From 676213b51a5ef1721f1a48453229ba0a0dff0b43 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 6 May 2016 21:42:24 +0000 Subject: [PATCH 001/275] Removed ClassMetadataInfo. Before suite run: 7.19 seconds. After: 6.7 seconds --- docs/en/cookbook/sql-table-prefixes.rst | 2 +- docs/en/reference/events.rst | 2 +- docs/en/reference/metadata-drivers.rst | 21 +- docs/en/reference/php-mapping.rst | 34 +- docs/en/reference/tools.rst | 15 +- .../{Mapping => Annotation}/Annotation.php | 2 +- .../AssociationOverride.php | 6 +- .../AssociationOverrides.php | 4 +- .../AttributeOverride.php | 4 +- .../AttributeOverrides.php | 4 +- .../ORM/{Mapping => Annotation}/Cache.php | 2 +- .../ChangeTrackingPolicy.php | 2 +- .../ORM/{Mapping => Annotation}/Column.php | 2 +- .../{Mapping => Annotation}/ColumnResult.php | 2 +- .../CustomIdGenerator.php | 2 +- .../DiscriminatorColumn.php | 2 +- .../DiscriminatorMap.php | 2 +- .../ORM/Annotation/DoctrineAnnotations.php | 69 + .../{Mapping => Annotation}/Embeddable.php | 2 +- .../ORM/{Mapping => Annotation}/Embedded.php | 2 +- .../ORM/{Mapping => Annotation}/Entity.php | 2 +- .../EntityListeners.php | 2 +- .../{Mapping => Annotation}/EntityResult.php | 4 +- .../{Mapping => Annotation}/FieldResult.php | 2 +- .../GeneratedValue.php | 2 +- .../HasLifecycleCallbacks.php | 2 +- .../ORM/{Mapping => Annotation}/Id.php | 2 +- .../ORM/{Mapping => Annotation}/Index.php | 2 +- .../InheritanceType.php | 2 +- .../{Mapping => Annotation}/JoinColumn.php | 2 +- .../{Mapping => Annotation}/JoinColumns.php | 4 +- .../ORM/{Mapping => Annotation}/JoinTable.php | 6 +- .../{Mapping => Annotation}/ManyToMany.php | 2 +- .../ORM/{Mapping => Annotation}/ManyToOne.php | 2 +- .../MappedSuperclass.php | 2 +- .../NamedNativeQueries.php | 4 +- .../NamedNativeQuery.php | 2 +- .../{Mapping => Annotation}/NamedQueries.php | 4 +- .../{Mapping => Annotation}/NamedQuery.php | 2 +- .../ORM/{Mapping => Annotation}/OneToMany.php | 2 +- .../ORM/{Mapping => Annotation}/OneToOne.php | 2 +- .../ORM/{Mapping => Annotation}/OrderBy.php | 2 +- .../ORM/{Mapping => Annotation}/PostLoad.php | 2 +- .../{Mapping => Annotation}/PostPersist.php | 2 +- .../{Mapping => Annotation}/PostRemove.php | 2 +- .../{Mapping => Annotation}/PostUpdate.php | 2 +- .../ORM/{Mapping => Annotation}/PreFlush.php | 2 +- .../{Mapping => Annotation}/PrePersist.php | 2 +- .../ORM/{Mapping => Annotation}/PreRemove.php | 2 +- .../ORM/{Mapping => Annotation}/PreUpdate.php | 2 +- .../SequenceGenerator.php | 2 +- .../SqlResultSetMapping.php | 6 +- .../SqlResultSetMappings.php | 4 +- .../ORM/{Mapping => Annotation}/Table.php | 6 +- .../UniqueConstraint.php | 2 +- .../ORM/{Mapping => Annotation}/Version.php | 2 +- lib/Doctrine/ORM/Configuration.php | 4 +- lib/Doctrine/ORM/Id/AbstractIdGenerator.php | 3 +- .../Mapping/Builder/ClassMetadataBuilder.php | 7 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 3362 +++++++++++++++- .../ORM/Mapping/ClassMetadataFactory.php | 10 +- .../ORM/Mapping/ClassMetadataInfo.php | 3397 ----------------- .../ORM/Mapping/Driver/AnnotationDriver.php | 162 +- .../ORM/Mapping/Driver/DatabaseDriver.php | 20 +- .../Mapping/Driver/DoctrineAnnotations.php | 69 - lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 50 +- .../ORM/Mapping/Driver/YamlDriver.php | 2 +- lib/Doctrine/ORM/Proxy/ProxyFactory.php | 2 +- .../ORM/Query/ResultSetMappingBuilder.php | 36 +- lib/Doctrine/ORM/Query/SqlWalker.php | 3 +- .../ORM/Tools/ConvertDoctrine1Schema.php | 62 +- .../DisconnectedClassMetadataFactory.php | 2 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 216 +- .../Tools/Export/Driver/AbstractExporter.php | 46 +- .../Export/Driver/AnnotationExporter.php | 10 +- .../ORM/Tools/Export/Driver/PhpExporter.php | 18 +- .../ORM/Tools/Export/Driver/XmlExporter.php | 29 +- .../ORM/Tools/Export/Driver/YamlExporter.php | 16 +- .../Tools/Pagination/LimitSubqueryWalker.php | 4 +- .../ORM/Tools/ResolveTargetEntityListener.php | 6 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 2 +- lib/Doctrine/ORM/Tools/SchemaValidator.php | 20 +- .../Doctrine/Tests/Models/CMS/CmsAddress.php | 2 +- tests/Doctrine/Tests/Models/CMS/CmsUser.php | 2 +- tests/Doctrine/Tests/Models/Cache/City.php | 2 +- .../Tests/Models/Company/CompanyContract.php | 2 +- .../Models/Company/CompanyFixContract.php | 2 +- .../Models/Company/CompanyFlexContract.php | 2 +- .../Company/CompanyFlexUltraContract.php | 2 +- .../Tests/Models/Company/CompanyPerson.php | 2 +- .../DDC1476EntityWithDefaultFieldType.php | 4 +- .../Tests/Models/DDC3579/DDC3579User.php | 2 +- .../Models/DDC869/DDC869ChequePayment.php | 2 +- .../Models/DDC869/DDC869CreditCardPayment.php | 2 +- .../Tests/Models/DDC869/DDC869Payment.php | 4 +- .../Tests/Models/DDC889/DDC889Class.php | 4 +- .../Tests/Models/DDC889/DDC889Entity.php | 2 +- .../Tests/Models/DDC889/DDC889SuperClass.php | 4 +- .../Tests/Models/DDC964/DDC964Admin.php | 2 +- .../Tests/Models/DDC964/DDC964Guest.php | 2 +- .../Tests/Models/DDC964/DDC964User.php | 4 +- .../Doctrine/Tests/ORM/ConfigurationTest.php | 14 +- .../ORM/Functional/DatabaseDriverTest.php | 4 +- .../ORM/Functional/DatabaseDriverTestCase.php | 6 +- .../Functional/ExtraLazyCollectionTest.php | 18 +- .../Tests/ORM/Functional/SQLFilterTest.php | 9 +- .../ORM/Functional/Ticket/DDC1301Test.php | 14 +- .../ORM/Functional/Ticket/DDC2387Test.php | 6 +- .../ORM/Functional/Ticket/DDC2415Test.php | 8 +- .../ORM/Functional/Ticket/DDC3103Test.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 48 +- .../ORM/Mapping/AnnotationDriverTest.php | 2 +- .../Mapping/BasicInheritanceMappingTest.php | 10 +- .../Tests/ORM/Mapping/FieldBuilderTest.php | 6 +- .../ORM/Mapping/PHPMappingDriverTest.php | 2 +- .../php/Doctrine.Tests.Models.Cache.City.php | 19 +- ...e.Tests.Models.Company.CompanyContract.php | 6 +- ...1476.DDC1476EntityWithDefaultFieldType.php | 4 +- ...trine.Tests.Models.DDC3579.DDC3579User.php | 4 +- ...rine.Tests.Models.DDC869.DDC869Payment.php | 4 +- ...ctrine.Tests.Models.DDC889.DDC889Class.php | 5 +- ...trine.Tests.Models.DDC889.DDC889Entity.php | 2 +- ...e.Tests.Models.DDC889.DDC889SuperClass.php | 4 +- ...octrine.Tests.Models.DDC964.DDC964User.php | 4 +- .../php/Doctrine.Tests.ORM.Mapping.Animal.php | 10 +- .../Doctrine.Tests.ORM.Mapping.Comment.php | 4 +- ...ctrine.Tests.ORM.Mapping.DDC1170Entity.php | 4 +- ...octrine.Tests.ORM.Mapping.DDC807Entity.php | 4 +- .../php/Doctrine.Tests.ORM.Mapping.PHPSLC.php | 4 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 8 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 89 +- .../AbstractClassMetadataExporterTest.php | 30 +- .../Export/XmlClassMetadataExporterTest.php | 4 +- .../Doctrine.Tests.ORM.Tools.Export.User.php | 16 +- tests/Doctrine/Tests/OrmTestCase.php | 12 +- 135 files changed, 4125 insertions(+), 4142 deletions(-) rename lib/Doctrine/ORM/{Mapping => Annotation}/Annotation.php (96%) rename lib/Doctrine/ORM/{Mapping => Annotation}/AssociationOverride.php (93%) rename lib/Doctrine/ORM/{Mapping => Annotation}/AssociationOverrides.php (93%) rename lib/Doctrine/ORM/{Mapping => Annotation}/AttributeOverride.php (94%) rename lib/Doctrine/ORM/{Mapping => Annotation}/AttributeOverrides.php (93%) rename lib/Doctrine/ORM/{Mapping => Annotation}/Cache.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/ChangeTrackingPolicy.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/Column.php (98%) rename lib/Doctrine/ORM/{Mapping => Annotation}/ColumnResult.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/CustomIdGenerator.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/DiscriminatorColumn.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/DiscriminatorMap.php (97%) create mode 100644 lib/Doctrine/ORM/Annotation/DoctrineAnnotations.php rename lib/Doctrine/ORM/{Mapping => Annotation}/Embeddable.php (96%) rename lib/Doctrine/ORM/{Mapping => Annotation}/Embedded.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/Entity.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/EntityListeners.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/EntityResult.php (95%) rename lib/Doctrine/ORM/{Mapping => Annotation}/FieldResult.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/GeneratedValue.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/HasLifecycleCallbacks.php (96%) rename lib/Doctrine/ORM/{Mapping => Annotation}/Id.php (96%) rename lib/Doctrine/ORM/{Mapping => Annotation}/Index.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/InheritanceType.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/JoinColumn.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/JoinColumns.php (92%) rename lib/Doctrine/ORM/{Mapping => Annotation}/JoinTable.php (90%) rename lib/Doctrine/ORM/{Mapping => Annotation}/ManyToMany.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/ManyToOne.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/MappedSuperclass.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/NamedNativeQueries.php (93%) rename lib/Doctrine/ORM/{Mapping => Annotation}/NamedNativeQuery.php (98%) rename lib/Doctrine/ORM/{Mapping => Annotation}/NamedQueries.php (92%) rename lib/Doctrine/ORM/{Mapping => Annotation}/NamedQuery.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/OneToMany.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/OneToOne.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/OrderBy.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/PostLoad.php (96%) rename lib/Doctrine/ORM/{Mapping => Annotation}/PostPersist.php (96%) rename lib/Doctrine/ORM/{Mapping => Annotation}/PostRemove.php (96%) rename lib/Doctrine/ORM/{Mapping => Annotation}/PostUpdate.php (96%) rename lib/Doctrine/ORM/{Mapping => Annotation}/PreFlush.php (96%) rename lib/Doctrine/ORM/{Mapping => Annotation}/PrePersist.php (96%) rename lib/Doctrine/ORM/{Mapping => Annotation}/PreRemove.php (96%) rename lib/Doctrine/ORM/{Mapping => Annotation}/PreUpdate.php (96%) rename lib/Doctrine/ORM/{Mapping => Annotation}/SequenceGenerator.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/SqlResultSetMapping.php (92%) rename lib/Doctrine/ORM/{Mapping => Annotation}/SqlResultSetMappings.php (93%) rename lib/Doctrine/ORM/{Mapping => Annotation}/Table.php (90%) rename lib/Doctrine/ORM/{Mapping => Annotation}/UniqueConstraint.php (97%) rename lib/Doctrine/ORM/{Mapping => Annotation}/Version.php (96%) delete mode 100644 lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php delete mode 100644 lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php diff --git a/docs/en/cookbook/sql-table-prefixes.rst b/docs/en/cookbook/sql-table-prefixes.rst index fdfd4032f3c..73ee78a1be6 100644 --- a/docs/en/cookbook/sql-table-prefixes.rst +++ b/docs/en/cookbook/sql-table-prefixes.rst @@ -45,7 +45,7 @@ appropriate autoloaders. } foreach ($classMetadata->getAssociationMappings() as $fieldName => $mapping) { - if ($mapping['type'] == \Doctrine\ORM\Mapping\ClassMetadataInfo::MANY_TO_MANY && $mapping['isOwningSide']) { + if ($mapping['type'] == \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY && $mapping['isOwningSide']) { $mappedTableName = $mapping['joinTable']['name']; $classMetadata->associationMappings[$fieldName]['joinTable']['name'] = $this->prefix . $mappedTableName; } diff --git a/docs/en/reference/events.rst b/docs/en/reference/events.rst index 7922d3dfd1d..6dfde28d388 100644 --- a/docs/en/reference/events.rst +++ b/docs/en/reference/events.rst @@ -960,7 +960,7 @@ Load ClassMetadata Event ------------------------ When the mapping information for an entity is read, it is populated -in to a ``ClassMetadataInfo`` instance. You can hook in to this +in to a ``ClassMetadata`` instance. You can hook in to this process and manipulate the instance. .. code-block:: php diff --git a/docs/en/reference/metadata-drivers.rst b/docs/en/reference/metadata-drivers.rst index 6b9cb31e42c..e0509627924 100644 --- a/docs/en/reference/metadata-drivers.rst +++ b/docs/en/reference/metadata-drivers.rst @@ -60,7 +60,7 @@ implements the ``Driver`` interface: _loadMappingFile($file); - // populate ClassMetadataInfo instance from $data + // populate ClassMetadata instance from $data } /** @@ -154,14 +154,11 @@ entity when needed. You have all the methods you need to manually specify the mapping information instead of using some mapping file to populate it from. -The base ``ClassMetadataInfo`` class is responsible for only data -storage and is not meant for runtime use. It does not require that -the class actually exists yet so it is useful for describing some +The ``ClassMetadata`` class is responsible for only data storage +and is not meant for runtime use. It does not require that the +class actually exists yet so it is useful for describing some entity before it exists and using that information to generate for -example the entities themselves. The class ``ClassMetadata`` -extends ``ClassMetadataInfo`` and adds some functionality required -for runtime usage and requires that the PHP class is present and -can be autoloaded. +example the entities themselves. You can read more about the API of the ``ClassMetadata`` classes in the PHP Mapping chapter. diff --git a/docs/en/reference/php-mapping.rst b/docs/en/reference/php-mapping.rst index 78a721411d6..2efa3a71d75 100644 --- a/docs/en/reference/php-mapping.rst +++ b/docs/en/reference/php-mapping.rst @@ -180,14 +180,26 @@ It also has several methods that create builders (which are necessary for advanc - ``createManyToMany($name, $targetEntity)`` returns an ``ManyToManyAssociationBuilder`` instance - ``createOneToMany($name, $targetEntity)`` returns an ``OneToManyAssociationBuilder`` instance -ClassMetadataInfo API +ClassMetadata API --------------------- -The ``ClassMetadataInfo`` class is the base data object for storing +The ``ClassMetadata`` class is the base data object for storing the mapping metadata for a single entity. It contains all the getters and setters you need populate and retrieve information for an entity. +Internal +~~~~~~~~ + +- ``getReflectionClass()`` +- ``getReflectionProperties()`` +- ``getReflectionProperty($name)`` +- ``getSingleIdReflectionProperty()`` +- ``getIdentifierValues($entity)`` +- ``setIdentifierValues($entity, $id)`` +- ``setFieldValue($entity, $field, $value)`` +- ``getFieldValue($entity, $field)`` + General Setters ~~~~~~~~~~~~~~~ @@ -304,22 +316,4 @@ Lifecycle Callback Getters - ``hasLifecycleCallbacks($lifecycleEvent)`` - ``getLifecycleCallbacks($event)`` -ClassMetadata API ------------------ - -The ``ClassMetadata`` class extends ``ClassMetadataInfo`` and adds -the runtime functionality required by Doctrine. It adds a few extra -methods related to runtime reflection for working with the entities -themselves. - - -- ``getReflectionClass()`` -- ``getReflectionProperties()`` -- ``getReflectionProperty($name)`` -- ``getSingleIdReflectionProperty()`` -- ``getIdentifierValues($entity)`` -- ``setIdentifierValues($entity, $id)`` -- ``setFieldValue($entity, $field, $value)`` -- ``getFieldValue($entity, $field)`` - diff --git a/docs/en/reference/tools.rst b/docs/en/reference/tools.rst index c3580b36d57..390fccdd3af 100644 --- a/docs/en/reference/tools.rst +++ b/docs/en/reference/tools.rst @@ -73,7 +73,7 @@ sample ``cli-config.php`` file looks as follows: // Any way to access the EntityManager from your application $em = GetMyEntityManager(); - + $helperSet = new \Symfony\Component\Console\Helper\HelperSet(array( 'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($em->getConnection()), 'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($em) @@ -84,7 +84,7 @@ script will ultimately use. The Doctrine Binary will automatically find the first instance of HelperSet in the global variable namespace and use this. -.. note:: +.. note:: You have to adjust this snippet for your specific application or framework and use their facilities to access the Doctrine EntityManager and @@ -173,7 +173,7 @@ When using the SchemaTool class directly, create your schema using the ``createSchema()`` method. First create an instance of the ``SchemaTool`` and pass it an instance of the ``EntityManager`` that you want to use to create the schema. This method receives an -array of ``ClassMetadataInfo`` instances. +array of ``ClassMetadata`` instances. .. code-block:: php @@ -204,8 +204,8 @@ tables of the current model to clean up with orphaned tables. You can also use database introspection to update your schema easily with the ``updateSchema()`` method. It will compare your -existing database schema to the passed array of -``ClassMetadataInfo`` instances. +existing database schema to the passed array of ``ClassMetadata`` +instances. .. code-block:: php @@ -361,8 +361,7 @@ Reverse Engineering ------------------- You can use the ``DatabaseDriver`` to reverse engineer a database -to an array of ``ClassMetadataInfo`` instances and generate YAML, -XML, etc. from them. +to an array of ``ClassMetadata`` instances and generate YAML, XML, etc. from them. .. note:: @@ -384,7 +383,7 @@ First you need to retrieve the metadata instances with the $em->getConnection()->getSchemaManager() ) ); - + $cmf = new \Doctrine\ORM\Tools\DisconnectedClassMetadataFactory(); $cmf->setEntityManager($em); $metadata = $cmf->getAllMetadata(); diff --git a/lib/Doctrine/ORM/Mapping/Annotation.php b/lib/Doctrine/ORM/Annotation/Annotation.php similarity index 96% rename from lib/Doctrine/ORM/Mapping/Annotation.php rename to lib/Doctrine/ORM/Annotation/Annotation.php index 19374ff3146..4c8d2b00349 100644 --- a/lib/Doctrine/ORM/Mapping/Annotation.php +++ b/lib/Doctrine/ORM/Annotation/Annotation.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; interface Annotation { diff --git a/lib/Doctrine/ORM/Mapping/AssociationOverride.php b/lib/Doctrine/ORM/Annotation/AssociationOverride.php similarity index 93% rename from lib/Doctrine/ORM/Mapping/AssociationOverride.php rename to lib/Doctrine/ORM/Annotation/AssociationOverride.php index e208b16228a..c9ab0061f6a 100644 --- a/lib/Doctrine/ORM/Mapping/AssociationOverride.php +++ b/lib/Doctrine/ORM/Annotation/AssociationOverride.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * This annotation is used to override association mapping of property for an entity relationship. @@ -40,14 +40,14 @@ final class AssociationOverride implements Annotation /** * The join column that is being mapped to the persistent attribute. * - * @var array<\Doctrine\ORM\Mapping\JoinColumn> + * @var array<\Doctrine\ORM\Annotation\JoinColumn> */ public $joinColumns; /** * The join table that maps the relationship. * - * @var \Doctrine\ORM\Mapping\JoinTable + * @var \Doctrine\ORM\Annotation\JoinTable */ public $joinTable; diff --git a/lib/Doctrine/ORM/Mapping/AssociationOverrides.php b/lib/Doctrine/ORM/Annotation/AssociationOverrides.php similarity index 93% rename from lib/Doctrine/ORM/Mapping/AssociationOverrides.php rename to lib/Doctrine/ORM/Annotation/AssociationOverrides.php index 217c9e45735..3122c67d9a3 100644 --- a/lib/Doctrine/ORM/Mapping/AssociationOverrides.php +++ b/lib/Doctrine/ORM/Annotation/AssociationOverrides.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * This annotation is used to override association mappings of relationship properties. @@ -33,7 +33,7 @@ final class AssociationOverrides implements Annotation /** * Mapping overrides of relationship properties. * - * @var array<\Doctrine\ORM\Mapping\AssociationOverride> + * @var array<\Doctrine\ORM\Annotation\AssociationOverride> */ public $value; } diff --git a/lib/Doctrine/ORM/Mapping/AttributeOverride.php b/lib/Doctrine/ORM/Annotation/AttributeOverride.php similarity index 94% rename from lib/Doctrine/ORM/Mapping/AttributeOverride.php rename to lib/Doctrine/ORM/Annotation/AttributeOverride.php index f86d3a1521d..dbc4a860894 100644 --- a/lib/Doctrine/ORM/Mapping/AttributeOverride.php +++ b/lib/Doctrine/ORM/Annotation/AttributeOverride.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * This annotation is used to override the mapping of a entity property. @@ -40,7 +40,7 @@ final class AttributeOverride implements Annotation /** * The column definition. * - * @var \Doctrine\ORM\Mapping\Column + * @var \Doctrine\ORM\Annotation\Column */ public $column; } diff --git a/lib/Doctrine/ORM/Mapping/AttributeOverrides.php b/lib/Doctrine/ORM/Annotation/AttributeOverrides.php similarity index 93% rename from lib/Doctrine/ORM/Mapping/AttributeOverrides.php rename to lib/Doctrine/ORM/Annotation/AttributeOverrides.php index 63b2cc66e7f..adb90c4061f 100644 --- a/lib/Doctrine/ORM/Mapping/AttributeOverrides.php +++ b/lib/Doctrine/ORM/Annotation/AttributeOverrides.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * This annotation is used to override the mapping of a entity property. @@ -33,7 +33,7 @@ final class AttributeOverrides implements Annotation /** * One or more field or property mapping overrides. * - * @var array<\Doctrine\ORM\Mapping\AttributeOverride> + * @var array<\Doctrine\ORM\Annotation\AttributeOverride> */ public $value; } diff --git a/lib/Doctrine/ORM/Mapping/Cache.php b/lib/Doctrine/ORM/Annotation/Cache.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/Cache.php rename to lib/Doctrine/ORM/Annotation/Cache.php index 3226b603160..9250f45132f 100644 --- a/lib/Doctrine/ORM/Mapping/Cache.php +++ b/lib/Doctrine/ORM/Annotation/Cache.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * Caching to an entity or a collection. diff --git a/lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php b/lib/Doctrine/ORM/Annotation/ChangeTrackingPolicy.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php rename to lib/Doctrine/ORM/Annotation/ChangeTrackingPolicy.php index 3657b764f1e..86739e3b2af 100644 --- a/lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php +++ b/lib/Doctrine/ORM/Annotation/ChangeTrackingPolicy.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/Column.php b/lib/Doctrine/ORM/Annotation/Column.php similarity index 98% rename from lib/Doctrine/ORM/Mapping/Column.php rename to lib/Doctrine/ORM/Annotation/Column.php index 711590be672..cb5e0ddae92 100644 --- a/lib/Doctrine/ORM/Mapping/Column.php +++ b/lib/Doctrine/ORM/Annotation/Column.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/ColumnResult.php b/lib/Doctrine/ORM/Annotation/ColumnResult.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/ColumnResult.php rename to lib/Doctrine/ORM/Annotation/ColumnResult.php index a164c85c0ee..3b7bf3ee5a4 100644 --- a/lib/Doctrine/ORM/Mapping/ColumnResult.php +++ b/lib/Doctrine/ORM/Annotation/ColumnResult.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * References name of a column in the SELECT clause of a SQL query. diff --git a/lib/Doctrine/ORM/Mapping/CustomIdGenerator.php b/lib/Doctrine/ORM/Annotation/CustomIdGenerator.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/CustomIdGenerator.php rename to lib/Doctrine/ORM/Annotation/CustomIdGenerator.php index 41e200e12a7..6ef48d91320 100644 --- a/lib/Doctrine/ORM/Mapping/CustomIdGenerator.php +++ b/lib/Doctrine/ORM/Annotation/CustomIdGenerator.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/DiscriminatorColumn.php b/lib/Doctrine/ORM/Annotation/DiscriminatorColumn.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/DiscriminatorColumn.php rename to lib/Doctrine/ORM/Annotation/DiscriminatorColumn.php index 97ca7e9b577..fa7cd99a9f8 100644 --- a/lib/Doctrine/ORM/Mapping/DiscriminatorColumn.php +++ b/lib/Doctrine/ORM/Annotation/DiscriminatorColumn.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/DiscriminatorMap.php b/lib/Doctrine/ORM/Annotation/DiscriminatorMap.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/DiscriminatorMap.php rename to lib/Doctrine/ORM/Annotation/DiscriminatorMap.php index 09d619465cd..7c879dc0b51 100644 --- a/lib/Doctrine/ORM/Mapping/DiscriminatorMap.php +++ b/lib/Doctrine/ORM/Annotation/DiscriminatorMap.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Annotation/DoctrineAnnotations.php b/lib/Doctrine/ORM/Annotation/DoctrineAnnotations.php new file mode 100644 index 00000000000..fa8caf9621d --- /dev/null +++ b/lib/Doctrine/ORM/Annotation/DoctrineAnnotations.php @@ -0,0 +1,69 @@ +. + */ + +require_once __DIR__.'/Annotation.php'; +require_once __DIR__.'/AssociationOverride.php'; +require_once __DIR__.'/AssociationOverrides.php'; +require_once __DIR__.'/AttributeOverride.php'; +require_once __DIR__.'/AttributeOverrides.php'; +require_once __DIR__.'/Cache.php'; +require_once __DIR__.'/ChangeTrackingPolicy.php'; +require_once __DIR__.'/Column.php'; +require_once __DIR__.'/ColumnResult.php'; +require_once __DIR__.'/CustomIdGenerator.php'; +require_once __DIR__.'/DiscriminatorColumn.php'; +require_once __DIR__.'/DiscriminatorMap.php'; +require_once __DIR__.'/Embeddable.php'; +require_once __DIR__.'/Embedded.php'; +require_once __DIR__.'/Entity.php'; +require_once __DIR__.'/EntityListeners.php'; +require_once __DIR__.'/EntityResult.php'; +require_once __DIR__.'/FieldResult.php'; +require_once __DIR__.'/GeneratedValue.php'; +require_once __DIR__.'/HasLifecycleCallbacks.php'; +require_once __DIR__.'/Id.php'; +require_once __DIR__.'/Index.php'; +require_once __DIR__.'/InheritanceType.php'; +require_once __DIR__.'/JoinColumn.php'; +require_once __DIR__.'/JoinColumns.php'; +require_once __DIR__.'/JoinTable.php'; +require_once __DIR__.'/ManyToMany.php'; +require_once __DIR__.'/ManyToOne.php'; +require_once __DIR__.'/MappedSuperclass.php'; +require_once __DIR__.'/NamedNativeQueries.php'; +require_once __DIR__.'/NamedNativeQuery.php'; +require_once __DIR__.'/NamedQueries.php'; +require_once __DIR__.'/NamedQuery.php'; +require_once __DIR__.'/OneToMany.php'; +require_once __DIR__.'/OneToOne.php'; +require_once __DIR__.'/OrderBy.php'; +require_once __DIR__.'/PrePersist.php'; +require_once __DIR__.'/PostLoad.php'; +require_once __DIR__.'/PostPersist.php'; +require_once __DIR__.'/PostRemove.php'; +require_once __DIR__.'/PostUpdate.php'; +require_once __DIR__.'/PreFlush.php'; +require_once __DIR__.'/PreRemove.php'; +require_once __DIR__.'/PreUpdate.php'; +require_once __DIR__.'/SequenceGenerator.php'; +require_once __DIR__.'/SqlResultSetMapping.php'; +require_once __DIR__.'/SqlResultSetMappings.php'; +require_once __DIR__.'/Table.php'; +require_once __DIR__.'/UniqueConstraint.php'; +require_once __DIR__.'/Version.php'; diff --git a/lib/Doctrine/ORM/Mapping/Embeddable.php b/lib/Doctrine/ORM/Annotation/Embeddable.php similarity index 96% rename from lib/Doctrine/ORM/Mapping/Embeddable.php rename to lib/Doctrine/ORM/Annotation/Embeddable.php index f14bfac82a6..b1e75da58e3 100644 --- a/lib/Doctrine/ORM/Mapping/Embeddable.php +++ b/lib/Doctrine/ORM/Annotation/Embeddable.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/Embedded.php b/lib/Doctrine/ORM/Annotation/Embedded.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/Embedded.php rename to lib/Doctrine/ORM/Annotation/Embedded.php index 37339108bc9..a3cf16224a1 100644 --- a/lib/Doctrine/ORM/Mapping/Embedded.php +++ b/lib/Doctrine/ORM/Annotation/Embedded.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/Entity.php b/lib/Doctrine/ORM/Annotation/Entity.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/Entity.php rename to lib/Doctrine/ORM/Annotation/Entity.php index edf6ad5a4be..8d5715f6ebc 100644 --- a/lib/Doctrine/ORM/Mapping/Entity.php +++ b/lib/Doctrine/ORM/Annotation/Entity.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/EntityListeners.php b/lib/Doctrine/ORM/Annotation/EntityListeners.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/EntityListeners.php rename to lib/Doctrine/ORM/Annotation/EntityListeners.php index ae6c9126bd7..da16c94d8dc 100644 --- a/lib/Doctrine/ORM/Mapping/EntityListeners.php +++ b/lib/Doctrine/ORM/Annotation/EntityListeners.php @@ -18,7 +18,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * The EntityListeners annotation specifies the callback listener classes to be used for an entity or mapped superclass. diff --git a/lib/Doctrine/ORM/Mapping/EntityResult.php b/lib/Doctrine/ORM/Annotation/EntityResult.php similarity index 95% rename from lib/Doctrine/ORM/Mapping/EntityResult.php rename to lib/Doctrine/ORM/Annotation/EntityResult.php index d8b05730ae5..d32665a9d2c 100644 --- a/lib/Doctrine/ORM/Mapping/EntityResult.php +++ b/lib/Doctrine/ORM/Annotation/EntityResult.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * References an entity in the SELECT clause of a SQL query. @@ -43,7 +43,7 @@ final class EntityResult implements Annotation /** * Maps the columns specified in the SELECT list of the query to the properties or fields of the entity class. * - * @var array<\Doctrine\ORM\Mapping\FieldResult> + * @var array<\Doctrine\ORM\Annotation\FieldResult> */ public $fields = []; diff --git a/lib/Doctrine/ORM/Mapping/FieldResult.php b/lib/Doctrine/ORM/Annotation/FieldResult.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/FieldResult.php rename to lib/Doctrine/ORM/Annotation/FieldResult.php index 5e8aa0cd3e0..6f435ce19cb 100644 --- a/lib/Doctrine/ORM/Mapping/FieldResult.php +++ b/lib/Doctrine/ORM/Annotation/FieldResult.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * Is used to map the columns specified in the SELECT list of the query to the properties or fields of the entity class. diff --git a/lib/Doctrine/ORM/Mapping/GeneratedValue.php b/lib/Doctrine/ORM/Annotation/GeneratedValue.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/GeneratedValue.php rename to lib/Doctrine/ORM/Annotation/GeneratedValue.php index 27c03d4bee7..85c894c5132 100644 --- a/lib/Doctrine/ORM/Mapping/GeneratedValue.php +++ b/lib/Doctrine/ORM/Annotation/GeneratedValue.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/HasLifecycleCallbacks.php b/lib/Doctrine/ORM/Annotation/HasLifecycleCallbacks.php similarity index 96% rename from lib/Doctrine/ORM/Mapping/HasLifecycleCallbacks.php rename to lib/Doctrine/ORM/Annotation/HasLifecycleCallbacks.php index 313ece31f8c..0f84fe81ae3 100644 --- a/lib/Doctrine/ORM/Mapping/HasLifecycleCallbacks.php +++ b/lib/Doctrine/ORM/Annotation/HasLifecycleCallbacks.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/Id.php b/lib/Doctrine/ORM/Annotation/Id.php similarity index 96% rename from lib/Doctrine/ORM/Mapping/Id.php rename to lib/Doctrine/ORM/Annotation/Id.php index 6c9bcef0d71..931e0af2284 100644 --- a/lib/Doctrine/ORM/Mapping/Id.php +++ b/lib/Doctrine/ORM/Annotation/Id.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/Index.php b/lib/Doctrine/ORM/Annotation/Index.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/Index.php rename to lib/Doctrine/ORM/Annotation/Index.php index 45953a80478..0a00b163678 100644 --- a/lib/Doctrine/ORM/Mapping/Index.php +++ b/lib/Doctrine/ORM/Annotation/Index.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/InheritanceType.php b/lib/Doctrine/ORM/Annotation/InheritanceType.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/InheritanceType.php rename to lib/Doctrine/ORM/Annotation/InheritanceType.php index de803369a30..97931761361 100644 --- a/lib/Doctrine/ORM/Mapping/InheritanceType.php +++ b/lib/Doctrine/ORM/Annotation/InheritanceType.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/JoinColumn.php b/lib/Doctrine/ORM/Annotation/JoinColumn.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/JoinColumn.php rename to lib/Doctrine/ORM/Annotation/JoinColumn.php index febce917481..bf5202f145d 100644 --- a/lib/Doctrine/ORM/Mapping/JoinColumn.php +++ b/lib/Doctrine/ORM/Annotation/JoinColumn.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/JoinColumns.php b/lib/Doctrine/ORM/Annotation/JoinColumns.php similarity index 92% rename from lib/Doctrine/ORM/Mapping/JoinColumns.php rename to lib/Doctrine/ORM/Annotation/JoinColumns.php index ae096c27503..1704c8fb8d8 100644 --- a/lib/Doctrine/ORM/Mapping/JoinColumns.php +++ b/lib/Doctrine/ORM/Annotation/JoinColumns.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation @@ -26,7 +26,7 @@ final class JoinColumns implements Annotation { /** - * @var array<\Doctrine\ORM\Mapping\JoinColumn> + * @var array<\Doctrine\ORM\Annotation\JoinColumn> */ public $value; } diff --git a/lib/Doctrine/ORM/Mapping/JoinTable.php b/lib/Doctrine/ORM/Annotation/JoinTable.php similarity index 90% rename from lib/Doctrine/ORM/Mapping/JoinTable.php rename to lib/Doctrine/ORM/Annotation/JoinTable.php index 879316a2874..99a742d1753 100644 --- a/lib/Doctrine/ORM/Mapping/JoinTable.php +++ b/lib/Doctrine/ORM/Annotation/JoinTable.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation @@ -36,12 +36,12 @@ final class JoinTable implements Annotation public $schema; /** - * @var array<\Doctrine\ORM\Mapping\JoinColumn> + * @var array<\Doctrine\ORM\Annotation\JoinColumn> */ public $joinColumns = []; /** - * @var array<\Doctrine\ORM\Mapping\JoinColumn> + * @var array<\Doctrine\ORM\Annotation\JoinColumn> */ public $inverseJoinColumns = []; } diff --git a/lib/Doctrine/ORM/Mapping/ManyToMany.php b/lib/Doctrine/ORM/Annotation/ManyToMany.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/ManyToMany.php rename to lib/Doctrine/ORM/Annotation/ManyToMany.php index ca2f53c9eea..6b2330fe0f1 100644 --- a/lib/Doctrine/ORM/Mapping/ManyToMany.php +++ b/lib/Doctrine/ORM/Annotation/ManyToMany.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/ManyToOne.php b/lib/Doctrine/ORM/Annotation/ManyToOne.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/ManyToOne.php rename to lib/Doctrine/ORM/Annotation/ManyToOne.php index d3414e6a956..09acef71a19 100644 --- a/lib/Doctrine/ORM/Mapping/ManyToOne.php +++ b/lib/Doctrine/ORM/Annotation/ManyToOne.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/MappedSuperclass.php b/lib/Doctrine/ORM/Annotation/MappedSuperclass.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/MappedSuperclass.php rename to lib/Doctrine/ORM/Annotation/MappedSuperclass.php index 74588107d89..3c0e39790ac 100644 --- a/lib/Doctrine/ORM/Mapping/MappedSuperclass.php +++ b/lib/Doctrine/ORM/Annotation/MappedSuperclass.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/NamedNativeQueries.php b/lib/Doctrine/ORM/Annotation/NamedNativeQueries.php similarity index 93% rename from lib/Doctrine/ORM/Mapping/NamedNativeQueries.php rename to lib/Doctrine/ORM/Annotation/NamedNativeQueries.php index 2539107afcf..92b4cd35735 100644 --- a/lib/Doctrine/ORM/Mapping/NamedNativeQueries.php +++ b/lib/Doctrine/ORM/Annotation/NamedNativeQueries.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * Is used to specify an array of native SQL named queries. @@ -34,7 +34,7 @@ final class NamedNativeQueries implements Annotation /** * One or more NamedNativeQuery annotations. * - * @var array<\Doctrine\ORM\Mapping\NamedNativeQuery> + * @var array<\Doctrine\ORM\Annotation\NamedNativeQuery> */ public $value = []; } diff --git a/lib/Doctrine/ORM/Mapping/NamedNativeQuery.php b/lib/Doctrine/ORM/Annotation/NamedNativeQuery.php similarity index 98% rename from lib/Doctrine/ORM/Mapping/NamedNativeQuery.php rename to lib/Doctrine/ORM/Annotation/NamedNativeQuery.php index f336c99171d..5a4b016ce63 100644 --- a/lib/Doctrine/ORM/Mapping/NamedNativeQuery.php +++ b/lib/Doctrine/ORM/Annotation/NamedNativeQuery.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * Is used to specify a native SQL named query. diff --git a/lib/Doctrine/ORM/Mapping/NamedQueries.php b/lib/Doctrine/ORM/Annotation/NamedQueries.php similarity index 92% rename from lib/Doctrine/ORM/Mapping/NamedQueries.php rename to lib/Doctrine/ORM/Annotation/NamedQueries.php index 5fce0727b28..e7f7f2b9412 100644 --- a/lib/Doctrine/ORM/Mapping/NamedQueries.php +++ b/lib/Doctrine/ORM/Annotation/NamedQueries.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation @@ -26,7 +26,7 @@ final class NamedQueries implements Annotation { /** - * @var array<\Doctrine\ORM\Mapping\NamedQuery> + * @var array<\Doctrine\ORM\Annotation\NamedQuery> */ public $value; } diff --git a/lib/Doctrine/ORM/Mapping/NamedQuery.php b/lib/Doctrine/ORM/Annotation/NamedQuery.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/NamedQuery.php rename to lib/Doctrine/ORM/Annotation/NamedQuery.php index c4e6cd528fb..758050a2952 100644 --- a/lib/Doctrine/ORM/Mapping/NamedQuery.php +++ b/lib/Doctrine/ORM/Annotation/NamedQuery.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/OneToMany.php b/lib/Doctrine/ORM/Annotation/OneToMany.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/OneToMany.php rename to lib/Doctrine/ORM/Annotation/OneToMany.php index 4b2465718e1..2d30b611baf 100644 --- a/lib/Doctrine/ORM/Mapping/OneToMany.php +++ b/lib/Doctrine/ORM/Annotation/OneToMany.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/OneToOne.php b/lib/Doctrine/ORM/Annotation/OneToOne.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/OneToOne.php rename to lib/Doctrine/ORM/Annotation/OneToOne.php index b2ab81f88d9..8c70212bed5 100644 --- a/lib/Doctrine/ORM/Mapping/OneToOne.php +++ b/lib/Doctrine/ORM/Annotation/OneToOne.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/OrderBy.php b/lib/Doctrine/ORM/Annotation/OrderBy.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/OrderBy.php rename to lib/Doctrine/ORM/Annotation/OrderBy.php index ad1b7a8f714..a72c0ff5a70 100644 --- a/lib/Doctrine/ORM/Mapping/OrderBy.php +++ b/lib/Doctrine/ORM/Annotation/OrderBy.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/PostLoad.php b/lib/Doctrine/ORM/Annotation/PostLoad.php similarity index 96% rename from lib/Doctrine/ORM/Mapping/PostLoad.php rename to lib/Doctrine/ORM/Annotation/PostLoad.php index 2f8e9932e35..eb30aa9a56d 100644 --- a/lib/Doctrine/ORM/Mapping/PostLoad.php +++ b/lib/Doctrine/ORM/Annotation/PostLoad.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/PostPersist.php b/lib/Doctrine/ORM/Annotation/PostPersist.php similarity index 96% rename from lib/Doctrine/ORM/Mapping/PostPersist.php rename to lib/Doctrine/ORM/Annotation/PostPersist.php index 2aea7194911..4c43160bb1e 100644 --- a/lib/Doctrine/ORM/Mapping/PostPersist.php +++ b/lib/Doctrine/ORM/Annotation/PostPersist.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/PostRemove.php b/lib/Doctrine/ORM/Annotation/PostRemove.php similarity index 96% rename from lib/Doctrine/ORM/Mapping/PostRemove.php rename to lib/Doctrine/ORM/Annotation/PostRemove.php index 321c4bd547b..15cbaa09c86 100644 --- a/lib/Doctrine/ORM/Mapping/PostRemove.php +++ b/lib/Doctrine/ORM/Annotation/PostRemove.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/PostUpdate.php b/lib/Doctrine/ORM/Annotation/PostUpdate.php similarity index 96% rename from lib/Doctrine/ORM/Mapping/PostUpdate.php rename to lib/Doctrine/ORM/Annotation/PostUpdate.php index a55f7072a69..de77736f52b 100644 --- a/lib/Doctrine/ORM/Mapping/PostUpdate.php +++ b/lib/Doctrine/ORM/Annotation/PostUpdate.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/PreFlush.php b/lib/Doctrine/ORM/Annotation/PreFlush.php similarity index 96% rename from lib/Doctrine/ORM/Mapping/PreFlush.php rename to lib/Doctrine/ORM/Annotation/PreFlush.php index 6697d372c37..46a85a6263e 100644 --- a/lib/Doctrine/ORM/Mapping/PreFlush.php +++ b/lib/Doctrine/ORM/Annotation/PreFlush.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/PrePersist.php b/lib/Doctrine/ORM/Annotation/PrePersist.php similarity index 96% rename from lib/Doctrine/ORM/Mapping/PrePersist.php rename to lib/Doctrine/ORM/Annotation/PrePersist.php index fea05be6d3d..2aaef4b5242 100644 --- a/lib/Doctrine/ORM/Mapping/PrePersist.php +++ b/lib/Doctrine/ORM/Annotation/PrePersist.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/PreRemove.php b/lib/Doctrine/ORM/Annotation/PreRemove.php similarity index 96% rename from lib/Doctrine/ORM/Mapping/PreRemove.php rename to lib/Doctrine/ORM/Annotation/PreRemove.php index 29822edacc9..84e1231c427 100644 --- a/lib/Doctrine/ORM/Mapping/PreRemove.php +++ b/lib/Doctrine/ORM/Annotation/PreRemove.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/PreUpdate.php b/lib/Doctrine/ORM/Annotation/PreUpdate.php similarity index 96% rename from lib/Doctrine/ORM/Mapping/PreUpdate.php rename to lib/Doctrine/ORM/Annotation/PreUpdate.php index 290df72e04a..c9f8fe39eeb 100644 --- a/lib/Doctrine/ORM/Mapping/PreUpdate.php +++ b/lib/Doctrine/ORM/Annotation/PreUpdate.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/SequenceGenerator.php b/lib/Doctrine/ORM/Annotation/SequenceGenerator.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/SequenceGenerator.php rename to lib/Doctrine/ORM/Annotation/SequenceGenerator.php index ba1c45b6425..8897a222ca1 100644 --- a/lib/Doctrine/ORM/Mapping/SequenceGenerator.php +++ b/lib/Doctrine/ORM/Annotation/SequenceGenerator.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/SqlResultSetMapping.php b/lib/Doctrine/ORM/Annotation/SqlResultSetMapping.php similarity index 92% rename from lib/Doctrine/ORM/Mapping/SqlResultSetMapping.php rename to lib/Doctrine/ORM/Annotation/SqlResultSetMapping.php index cb78c9a40a5..109b95fe2a9 100644 --- a/lib/Doctrine/ORM/Mapping/SqlResultSetMapping.php +++ b/lib/Doctrine/ORM/Annotation/SqlResultSetMapping.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * The SqlResultSetMapping annotation is used to specify the mapping of the result of a native SQL query. @@ -41,14 +41,14 @@ final class SqlResultSetMapping implements Annotation /** * Specifies the result set mapping to entities. * - * @var array<\Doctrine\ORM\Mapping\EntityResult> + * @var array<\Doctrine\ORM\Annotation\EntityResult> */ public $entities = []; /** * Specifies the result set mapping to scalar values. * - * @var array<\Doctrine\ORM\Mapping\ColumnResult> + * @var array<\Doctrine\ORM\Annotation\ColumnResult> */ public $columns = []; } diff --git a/lib/Doctrine/ORM/Mapping/SqlResultSetMappings.php b/lib/Doctrine/ORM/Annotation/SqlResultSetMappings.php similarity index 93% rename from lib/Doctrine/ORM/Mapping/SqlResultSetMappings.php rename to lib/Doctrine/ORM/Annotation/SqlResultSetMappings.php index 0b74f2d9598..c3929e352e1 100644 --- a/lib/Doctrine/ORM/Mapping/SqlResultSetMappings.php +++ b/lib/Doctrine/ORM/Annotation/SqlResultSetMappings.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * Is used to specify an array of mappings. @@ -34,7 +34,7 @@ final class SqlResultSetMappings implements Annotation /** * One or more SqlResultSetMapping annotations. * - * @var array<\Doctrine\ORM\Mapping\SqlResultSetMapping> + * @var array<\Doctrine\ORM\Annotation\SqlResultSetMapping> */ public $value = []; } diff --git a/lib/Doctrine/ORM/Mapping/Table.php b/lib/Doctrine/ORM/Annotation/Table.php similarity index 90% rename from lib/Doctrine/ORM/Mapping/Table.php rename to lib/Doctrine/ORM/Annotation/Table.php index 6ed703750be..d4a1274faf9 100644 --- a/lib/Doctrine/ORM/Mapping/Table.php +++ b/lib/Doctrine/ORM/Annotation/Table.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation @@ -36,12 +36,12 @@ final class Table implements Annotation public $schema; /** - * @var array<\Doctrine\ORM\Mapping\Index> + * @var array<\Doctrine\ORM\Annotation\Index> */ public $indexes; /** - * @var array<\Doctrine\ORM\Mapping\UniqueConstraint> + * @var array<\Doctrine\ORM\Annotation\UniqueConstraint> */ public $uniqueConstraints; diff --git a/lib/Doctrine/ORM/Mapping/UniqueConstraint.php b/lib/Doctrine/ORM/Annotation/UniqueConstraint.php similarity index 97% rename from lib/Doctrine/ORM/Mapping/UniqueConstraint.php rename to lib/Doctrine/ORM/Annotation/UniqueConstraint.php index f117d1873e8..44d63b88af6 100644 --- a/lib/Doctrine/ORM/Mapping/UniqueConstraint.php +++ b/lib/Doctrine/ORM/Annotation/UniqueConstraint.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Mapping/Version.php b/lib/Doctrine/ORM/Annotation/Version.php similarity index 96% rename from lib/Doctrine/ORM/Mapping/Version.php rename to lib/Doctrine/ORM/Annotation/Version.php index a2377027950..2307de3d95f 100644 --- a/lib/Doctrine/ORM/Mapping/Version.php +++ b/lib/Doctrine/ORM/Annotation/Version.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Annotation; /** * @Annotation diff --git a/lib/Doctrine/ORM/Configuration.php b/lib/Doctrine/ORM/Configuration.php index 6073fbe008c..ba42a81387e 100644 --- a/lib/Doctrine/ORM/Configuration.php +++ b/lib/Doctrine/ORM/Configuration.php @@ -153,12 +153,12 @@ public function setMetadataDriverImpl(MappingDriver $driverImpl) */ public function newDefaultAnnotationDriver($paths = [], $useSimpleAnnotationReader = true) { - AnnotationRegistry::registerFile(__DIR__ . '/Mapping/Driver/DoctrineAnnotations.php'); + AnnotationRegistry::registerFile(__DIR__ . '/Annotation/DoctrineAnnotations.php'); if ($useSimpleAnnotationReader) { // Register the ORM Annotations in the AnnotationRegistry $reader = new SimpleAnnotationReader(); - $reader->addNamespace('Doctrine\ORM\Mapping'); + $reader->addNamespace('Doctrine\ORM\Annotation'); $cachedReader = new CachedReader($reader, new ArrayCache()); return new AnnotationDriver($cachedReader, (array) $paths); diff --git a/lib/Doctrine/ORM/Id/AbstractIdGenerator.php b/lib/Doctrine/ORM/Id/AbstractIdGenerator.php index dada71e43ad..02051976852 100644 --- a/lib/Doctrine/ORM/Id/AbstractIdGenerator.php +++ b/lib/Doctrine/ORM/Id/AbstractIdGenerator.php @@ -27,7 +27,8 @@ abstract class AbstractIdGenerator * Generates an identifier for an entity. * * @param EntityManager $em - * @param \Doctrine\ORM\Mapping\Entity $entity + * @param object $entity + * * @return mixed */ abstract public function generate(EntityManager $em, $entity); diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php index c08b374feeb..85aa0c79769 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php @@ -20,7 +20,6 @@ namespace Doctrine\ORM\Mapping\Builder; use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\ClassMetadataInfo; /** * Builder Object for ClassMetadata @@ -34,14 +33,14 @@ class ClassMetadataBuilder { /** - * @var \Doctrine\ORM\Mapping\ClassMetadataInfo + * @var \Doctrine\ORM\Mapping\ClassMetadata */ private $cm; /** - * @param \Doctrine\ORM\Mapping\ClassMetadataInfo $cm + * @param \Doctrine\ORM\Mapping\ClassMetadata $cm */ - public function __construct(ClassMetadataInfo $cm) + public function __construct(ClassMetadata $cm) { $this->cm = $cm; } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index a57f1e15a10..1691d1e0a61 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -19,11 +19,3367 @@ namespace Doctrine\ORM\Mapping; +use BadMethodCallException; +use Doctrine\Instantiator\Instantiator; +use InvalidArgumentException; +use RuntimeException; +use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Platforms\AbstractPlatform; +use ReflectionClass; +use Doctrine\Common\ClassLoader; +use Doctrine\Common\Persistence\Mapping\ClassMetadata as ClassMetadataInterface; +use Doctrine\ORM\Cache\CacheException; + /** - * {@inheritDoc} + * A ClassMetadata instance holds all the object-relational mapping metadata + * of an entity and its associations. + * + * Once populated, ClassMetadata instances are usually cached in a serialized form. + * + * IMPORTANT NOTE: + * + * The fields of this class are only public for 2 reasons: + * 1) To allow fast READ access. + * 2) To drastically reduce the size of a serialized instance (private/protected members + * get the whole class name, namespace inclusive, prepended to every property in + * the serialized representation). * - * @todo remove or rename ClassMetadataInfo to ClassMetadata + * @author Roman Borschel + * @author Jonathan H. Wage + * @since 2.0 */ -class ClassMetadata extends ClassMetadataInfo +class ClassMetadata implements ClassMetadataInterface { + /* The inheritance mapping types */ + /** + * NONE means the class does not participate in an inheritance hierarchy + * and therefore does not need an inheritance mapping type. + */ + const INHERITANCE_TYPE_NONE = 1; + + /** + * JOINED means the class will be persisted according to the rules of + * Class Table Inheritance. + */ + const INHERITANCE_TYPE_JOINED = 2; + + /** + * SINGLE_TABLE means the class will be persisted according to the rules of + * Single Table Inheritance. + */ + const INHERITANCE_TYPE_SINGLE_TABLE = 3; + + /** + * TABLE_PER_CLASS means the class will be persisted according to the rules + * of Concrete Table Inheritance. + */ + const INHERITANCE_TYPE_TABLE_PER_CLASS = 4; + + /* The Id generator types. */ + /** + * AUTO means the generator type will depend on what the used platform prefers. + * Offers full portability. + */ + const GENERATOR_TYPE_AUTO = 1; + + /** + * SEQUENCE means a separate sequence object will be used. Platforms that do + * not have native sequence support may emulate it. Full portability is currently + * not guaranteed. + */ + const GENERATOR_TYPE_SEQUENCE = 2; + + /** + * TABLE means a separate table is used for id generation. + * Offers full portability. + */ + const GENERATOR_TYPE_TABLE = 3; + + /** + * IDENTITY means an identity column is used for id generation. The database + * will fill in the id column on insertion. Platforms that do not support + * native identity columns may emulate them. Full portability is currently + * not guaranteed. + */ + const GENERATOR_TYPE_IDENTITY = 4; + + /** + * NONE means the class does not have a generated id. That means the class + * must have a natural, manually assigned id. + */ + const GENERATOR_TYPE_NONE = 5; + + /** + * UUID means that a UUID/GUID expression is used for id generation. Full + * portability is currently not guaranteed. + */ + const GENERATOR_TYPE_UUID = 6; + + /** + * CUSTOM means that customer will use own ID generator that supposedly work + */ + const GENERATOR_TYPE_CUSTOM = 7; + + /** + * DEFERRED_IMPLICIT means that changes of entities are calculated at commit-time + * by doing a property-by-property comparison with the original data. This will + * be done for all entities that are in MANAGED state at commit-time. + * + * This is the default change tracking policy. + */ + const CHANGETRACKING_DEFERRED_IMPLICIT = 1; + + /** + * DEFERRED_EXPLICIT means that changes of entities are calculated at commit-time + * by doing a property-by-property comparison with the original data. This will + * be done only for entities that were explicitly saved (through persist() or a cascade). + */ + const CHANGETRACKING_DEFERRED_EXPLICIT = 2; + + /** + * NOTIFY means that Doctrine relies on the entities sending out notifications + * when their properties change. Such entity classes must implement + * the NotifyPropertyChanged interface. + */ + const CHANGETRACKING_NOTIFY = 3; + + /** + * Specifies that an association is to be fetched when it is first accessed. + */ + const FETCH_LAZY = 2; + + /** + * Specifies that an association is to be fetched when the owner of the + * association is fetched. + */ + const FETCH_EAGER = 3; + + /** + * Specifies that an association is to be fetched lazy (on first access) and that + * commands such as Collection#count, Collection#slice are issued directly against + * the database if the collection is not yet initialized. + */ + const FETCH_EXTRA_LAZY = 4; + + /** + * Identifies a one-to-one association. + */ + const ONE_TO_ONE = 1; + + /** + * Identifies a many-to-one association. + */ + const MANY_TO_ONE = 2; + + /** + * Identifies a one-to-many association. + */ + const ONE_TO_MANY = 4; + + /** + * Identifies a many-to-many association. + */ + const MANY_TO_MANY = 8; + + /** + * Combined bitmask for to-one (single-valued) associations. + */ + const TO_ONE = 3; + + /** + * Combined bitmask for to-many (collection-valued) associations. + */ + const TO_MANY = 12; + + /** + * ReadOnly cache can do reads, inserts and deletes, cannot perform updates or employ any locks, + */ + const CACHE_USAGE_READ_ONLY = 1; + + /** + * Nonstrict Read Write Cache doesn’t employ any locks but can do inserts, update and deletes. + */ + const CACHE_USAGE_NONSTRICT_READ_WRITE = 2; + + /** + * Read Write Attempts to lock the entity before update/delete. + */ + const CACHE_USAGE_READ_WRITE = 3; + + /** + * READ-ONLY: The name of the entity class. + * + * @var string + */ + public $name; + + /** + * READ-ONLY: The namespace the entity class is contained in. + * + * @var string + * + * @todo Not really needed. Usage could be localized. + */ + public $namespace; + + /** + * READ-ONLY: The name of the entity class that is at the root of the mapped entity inheritance + * hierarchy. If the entity is not part of a mapped inheritance hierarchy this is the same + * as {@link $name}. + * + * @var string + */ + public $rootEntityName; + + /** + * READ-ONLY: The definition of custom generator. Only used for CUSTOM + * generator type + * + * The definition has the following structure: + * + * array( + * 'class' => 'ClassName', + * ) + * + * + * @var array + * + * @todo Merge with tableGeneratorDefinition into generic generatorDefinition + */ + public $customGeneratorDefinition; + + /** + * The name of the custom repository class used for the entity class. + * (Optional). + * + * @var string + */ + public $customRepositoryClassName; + + /** + * READ-ONLY: Whether this class describes the mapping of a mapped superclass. + * + * @var boolean + */ + public $isMappedSuperclass = false; + + /** + * READ-ONLY: Whether this class describes the mapping of an embeddable class. + * + * @var boolean + */ + public $isEmbeddedClass = false; + + /** + * READ-ONLY: The names of the parent classes (ancestors). + * + * @var array + */ + public $parentClasses = []; + + /** + * READ-ONLY: The names of all subclasses (descendants). + * + * @var array + */ + public $subClasses = []; + + /** + * READ-ONLY: The names of all embedded classes based on properties. + * + * @var array + */ + public $embeddedClasses = []; + + /** + * READ-ONLY: The named queries allowed to be called directly from Repository. + * + * @var array + */ + public $namedQueries = []; + + /** + * READ-ONLY: The named native queries allowed to be called directly from Repository. + * + * A native SQL named query definition has the following structure: + *
+     * array(
+     *     'name'               => ,
+     *     'query'              => ,
+     *     'resultClass'        => ,
+     *     'resultSetMapping'   => 
+     * )
+     * 
+ * + * @var array + */ + public $namedNativeQueries = []; + + /** + * READ-ONLY: The mappings of the results of native SQL queries. + * + * A native result mapping definition has the following structure: + *
+     * array(
+     *     'name'               => ,
+     *     'entities'           => array(),
+     *     'columns'            => array()
+     * )
+     * 
+ * + * @var array + */ + public $sqlResultSetMappings = []; + + /** + * READ-ONLY: The field names of all fields that are part of the identifier/primary key + * of the mapped entity class. + * + * @var array + */ + public $identifier = []; + + /** + * READ-ONLY: The inheritance mapping type used by the class. + * + * @var integer + */ + public $inheritanceType = self::INHERITANCE_TYPE_NONE; + + /** + * READ-ONLY: The Id generator type used by the class. + * + * @var int + */ + public $generatorType = self::GENERATOR_TYPE_NONE; + + /** + * READ-ONLY: The field mappings of the class. + * Keys are field names and values are mapping definitions. + * + * The mapping definition array has the following values: + * + * - fieldName (string) + * The name of the field in the Entity. + * + * - type (string) + * The type name of the mapped field. Can be one of Doctrine's mapping types + * or a custom mapping type. + * + * - columnName (string, optional) + * The column name. Optional. Defaults to the field name. + * + * - length (integer, optional) + * The database length of the column. Optional. Default value taken from + * the type. + * + * - id (boolean, optional) + * Marks the field as the primary key of the entity. Multiple fields of an + * entity can have the id attribute, forming a composite key. + * + * - nullable (boolean, optional) + * Whether the column is nullable. Defaults to FALSE. + * + * - columnDefinition (string, optional, schema-only) + * The SQL fragment that is used when generating the DDL for the column. + * + * - precision (integer, optional, schema-only) + * The precision of a decimal column. Only valid if the column type is decimal. + * + * - scale (integer, optional, schema-only) + * The scale of a decimal column. Only valid if the column type is decimal. + * + * - 'unique' (string, optional, schema-only) + * Whether a unique constraint should be generated for the column. + * + * @var array + */ + public $fieldMappings = []; + + /** + * READ-ONLY: An array of field names. Used to look up field names from column names. + * Keys are column names and values are field names. + * + * @var array + */ + public $fieldNames = []; + + /** + * READ-ONLY: A map of field names to column names. Keys are field names and values column names. + * Used to look up column names from field names. + * This is the reverse lookup map of $_fieldNames. + * + * @var array + * + * @deprecated 3.0 Remove this. + */ + public $columnNames = []; + + /** + * READ-ONLY: The discriminator value of this class. + * + * This does only apply to the JOINED and SINGLE_TABLE inheritance mapping strategies + * where a discriminator column is used. + * + * @var mixed + * + * @see discriminatorColumn + */ + public $discriminatorValue; + + /** + * READ-ONLY: The discriminator map of all mapped classes in the hierarchy. + * + * This does only apply to the JOINED and SINGLE_TABLE inheritance mapping strategies + * where a discriminator column is used. + * + * @var mixed + * + * @see discriminatorColumn + */ + public $discriminatorMap = []; + + /** + * READ-ONLY: The definition of the discriminator column used in JOINED and SINGLE_TABLE + * inheritance mappings. + * + * @var array + */ + public $discriminatorColumn; + + /** + * READ-ONLY: The primary table definition. The definition is an array with the + * following entries: + * + * name => + * schema => + * indexes => array + * uniqueConstraints => array + * + * @var array + */ + public $table; + + /** + * READ-ONLY: The registered lifecycle callbacks for entities of this class. + * + * @var array + */ + public $lifecycleCallbacks = []; + + /** + * READ-ONLY: The registered entity listeners. + * + * @var array + */ + public $entityListeners = []; + + /** + * READ-ONLY: The association mappings of this class. + * + * The mapping definition array supports the following keys: + * + * - fieldName (string) + * The name of the field in the entity the association is mapped to. + * + * - targetEntity (string) + * The class name of the target entity. If it is fully-qualified it is used as is. + * If it is a simple, unqualified class name the namespace is assumed to be the same + * as the namespace of the source entity. + * + * - mappedBy (string, required for bidirectional associations) + * The name of the field that completes the bidirectional association on the owning side. + * This key must be specified on the inverse side of a bidirectional association. + * + * - inversedBy (string, required for bidirectional associations) + * The name of the field that completes the bidirectional association on the inverse side. + * This key must be specified on the owning side of a bidirectional association. + * + * - cascade (array, optional) + * The names of persistence operations to cascade on the association. The set of possible + * values are: "persist", "remove", "detach", "merge", "refresh", "all" (implies all others). + * + * - orderBy (array, one-to-many/many-to-many only) + * A map of field names (of the target entity) to sorting directions (ASC/DESC). + * Example: array('priority' => 'desc') + * + * - fetch (integer, optional) + * The fetching strategy to use for the association, usually defaults to FETCH_LAZY. + * Possible values are: ClassMetadata::FETCH_EAGER, ClassMetadata::FETCH_LAZY. + * + * - joinTable (array, optional, many-to-many only) + * Specification of the join table and its join columns (foreign keys). + * Only valid for many-to-many mappings. Note that one-to-many associations can be mapped + * through a join table by simply mapping the association as many-to-many with a unique + * constraint on the join table. + * + * - indexBy (string, optional, to-many only) + * Specification of a field on target-entity that is used to index the collection by. + * This field HAS to be either the primary key or a unique column. Otherwise the collection + * does not contain all the entities that are actually related. + * + * A join table definition has the following structure: + *
+     * array(
+     *     'name' => ,
+     *      'joinColumns' => array(),
+     *      'inverseJoinColumns' => array()
+     * )
+     * 
+ * + * @var array + */ + public $associationMappings = []; + + /** + * READ-ONLY: Flag indicating whether the identifier/primary key of the class is composite. + * + * @var boolean + */ + public $isIdentifierComposite = false; + + /** + * READ-ONLY: Flag indicating whether the identifier/primary key contains at least one foreign key association. + * + * This flag is necessary because some code blocks require special treatment of this cases. + * + * @var boolean + */ + public $containsForeignIdentifier = false; + + /** + * READ-ONLY: The ID generator used for generating IDs for this class. + * + * @var \Doctrine\ORM\Id\AbstractIdGenerator + * + * @todo Remove! + */ + public $idGenerator; + + /** + * READ-ONLY: The definition of the sequence generator of this class. Only used for the + * SEQUENCE generation strategy. + * + * The definition has the following structure: + * + * array( + * 'sequenceName' => 'name', + * 'allocationSize' => 20, + * 'initialValue' => 1 + * ) + * + * + * @var array + * + * @todo Merge with tableGeneratorDefinition into generic generatorDefinition + */ + public $sequenceGeneratorDefinition; + + /** + * READ-ONLY: The definition of the table generator of this class. Only used for the + * TABLE generation strategy. + * + * @var array + * + * @todo Merge with tableGeneratorDefinition into generic generatorDefinition + */ + public $tableGeneratorDefinition; + + /** + * READ-ONLY: The policy used for change-tracking on entities of this class. + * + * @var integer + */ + public $changeTrackingPolicy = self::CHANGETRACKING_DEFERRED_IMPLICIT; + + /** + * READ-ONLY: A flag for whether or not instances of this class are to be versioned + * with optimistic locking. + * + * @var boolean + */ + public $isVersioned; + + /** + * READ-ONLY: The name of the field which is used for versioning in optimistic locking (if any). + * + * @var mixed + */ + public $versionField; + + /** + * @var array + */ + public $cache = null; + + /** + * The ReflectionClass instance of the mapped class. + * + * @var ReflectionClass + */ + public $reflClass; + + /** + * Is this entity marked as "read-only"? + * + * That means it is never considered for change-tracking in the UnitOfWork. It is a very helpful performance + * optimization for entities that are immutable, either in your domain or through the relation database + * (coming from a view, or a history table for example). + * + * @var bool + */ + public $isReadOnly = false; + + /** + * NamingStrategy determining the default column and table names. + * + * @var \Doctrine\ORM\Mapping\NamingStrategy + */ + protected $namingStrategy; + + /** + * The ReflectionProperty instances of the mapped class. + * + * @var \ReflectionProperty[] + */ + public $reflFields = []; + + /** + * @var \Doctrine\Instantiator\InstantiatorInterface|null + */ + private $instantiator; + + /** + * Initializes a new ClassMetadata instance that will hold the object-relational mapping + * metadata of the class with the given name. + * + * @param string $entityName The name of the entity class the new instance is used for. + * @param NamingStrategy|null $namingStrategy + */ + public function __construct($entityName, NamingStrategy $namingStrategy = null) + { + $this->name = $entityName; + $this->rootEntityName = $entityName; + $this->namingStrategy = $namingStrategy ?: new DefaultNamingStrategy(); + $this->instantiator = new Instantiator(); + } + + /** + * Gets the ReflectionProperties of the mapped class. + * + * @return array An array of ReflectionProperty instances. + */ + public function getReflectionProperties() + { + return $this->reflFields; + } + + /** + * Gets a ReflectionProperty for a specific field of the mapped class. + * + * @param string $name + * + * @return \ReflectionProperty + */ + public function getReflectionProperty($name) + { + return $this->reflFields[$name]; + } + + /** + * Gets the ReflectionProperty for the single identifier field. + * + * @return \ReflectionProperty + * + * @throws BadMethodCallException If the class has a composite identifier. + */ + public function getSingleIdReflectionProperty() + { + if ($this->isIdentifierComposite) { + throw new BadMethodCallException("Class " . $this->name . " has a composite identifier."); + } + + return $this->reflFields[$this->identifier[0]]; + } + + /** + * Extracts the identifier values of an entity of this class. + * + * For composite identifiers, the identifier values are returned as an array + * with the same order as the field order in {@link identifier}. + * + * @param object $entity + * + * @return array + */ + public function getIdentifierValues($entity) + { + if ($this->isIdentifierComposite) { + $id = []; + + foreach ($this->identifier as $idField) { + $value = $this->reflFields[$idField]->getValue($entity); + + if (null !== $value) { + $id[$idField] = $value; + } + } + + return $id; + } + + $id = $this->identifier[0]; + $value = $this->reflFields[$id]->getValue($entity); + + if (null === $value) { + return []; + } + + return [$id => $value]; + } + + /** + * Populates the entity identifier of an entity. + * + * @param object $entity + * @param array $id + * + * @return void + * + * @todo Rename to assignIdentifier() + */ + public function setIdentifierValues($entity, array $id) + { + foreach ($id as $idField => $idValue) { + $this->reflFields[$idField]->setValue($entity, $idValue); + } + } + + /** + * Sets the specified field to the specified value on the given entity. + * + * @param object $entity + * @param string $field + * @param mixed $value + * + * @return void + */ + public function setFieldValue($entity, $field, $value) + { + $this->reflFields[$field]->setValue($entity, $value); + } + + /** + * Gets the specified field's value off the given entity. + * + * @param object $entity + * @param string $field + * + * @return mixed + */ + public function getFieldValue($entity, $field) + { + return $this->reflFields[$field]->getValue($entity); + } + + /** + * Creates a string representation of this instance. + * + * @return string The string representation of this instance. + * + * @todo Construct meaningful string representation. + */ + public function __toString() + { + return __CLASS__ . '@' . spl_object_hash($this); + } + + /** + * Determines which fields get serialized. + * + * It is only serialized what is necessary for best unserialization performance. + * That means any metadata properties that are not set or empty or simply have + * their default value are NOT serialized. + * + * Parts that are also NOT serialized because they can not be properly unserialized: + * - reflClass (ReflectionClass) + * - reflFields (ReflectionProperty array) + * + * @return array The names of all the fields that should be serialized. + */ + public function __sleep() + { + // This metadata is always serialized/cached. + $serialized = [ + 'associationMappings', + 'columnNames', //TODO: 3.0 Remove this. Can use fieldMappings[$fieldName]['columnName'] + 'fieldMappings', + 'fieldNames', + 'embeddedClasses', + 'identifier', + 'isIdentifierComposite', // TODO: REMOVE + 'name', + 'namespace', // TODO: REMOVE + 'table', + 'rootEntityName', + 'idGenerator', //TODO: Does not really need to be serialized. Could be moved to runtime. + ]; + + // The rest of the metadata is only serialized if necessary. + if ($this->changeTrackingPolicy != self::CHANGETRACKING_DEFERRED_IMPLICIT) { + $serialized[] = 'changeTrackingPolicy'; + } + + if ($this->customRepositoryClassName) { + $serialized[] = 'customRepositoryClassName'; + } + + if ($this->inheritanceType != self::INHERITANCE_TYPE_NONE) { + $serialized[] = 'inheritanceType'; + $serialized[] = 'discriminatorColumn'; + $serialized[] = 'discriminatorValue'; + $serialized[] = 'discriminatorMap'; + $serialized[] = 'parentClasses'; + $serialized[] = 'subClasses'; + } + + if ($this->generatorType != self::GENERATOR_TYPE_NONE) { + $serialized[] = 'generatorType'; + if ($this->generatorType == self::GENERATOR_TYPE_SEQUENCE) { + $serialized[] = 'sequenceGeneratorDefinition'; + } + } + + if ($this->isMappedSuperclass) { + $serialized[] = 'isMappedSuperclass'; + } + + if ($this->isEmbeddedClass) { + $serialized[] = 'isEmbeddedClass'; + } + + if ($this->containsForeignIdentifier) { + $serialized[] = 'containsForeignIdentifier'; + } + + if ($this->isVersioned) { + $serialized[] = 'isVersioned'; + $serialized[] = 'versionField'; + } + + if ($this->lifecycleCallbacks) { + $serialized[] = 'lifecycleCallbacks'; + } + + if ($this->entityListeners) { + $serialized[] = 'entityListeners'; + } + + if ($this->namedQueries) { + $serialized[] = 'namedQueries'; + } + + if ($this->namedNativeQueries) { + $serialized[] = 'namedNativeQueries'; + } + + if ($this->sqlResultSetMappings) { + $serialized[] = 'sqlResultSetMappings'; + } + + if ($this->isReadOnly) { + $serialized[] = 'isReadOnly'; + } + + if ($this->customGeneratorDefinition) { + $serialized[] = "customGeneratorDefinition"; + } + + if ($this->cache) { + $serialized[] = 'cache'; + } + + return $serialized; + } + + /** + * Creates a new instance of the mapped class, without invoking the constructor. + * + * @return object + */ + public function newInstance() + { + return $this->instantiator->instantiate($this->name); + } + + /** + * Restores some state that can not be serialized/unserialized. + * + * @param \Doctrine\Common\Persistence\Mapping\ReflectionService $reflService + * + * @return void + */ + public function wakeupReflection($reflService) + { + // Restore ReflectionClass and properties + $this->reflClass = $reflService->getClass($this->name); + $this->instantiator = $this->instantiator ?: new Instantiator(); + + $parentReflFields = []; + + foreach ($this->embeddedClasses as $property => $embeddedClass) { + if (isset($embeddedClass['declaredField'])) { + $parentReflFields[$property] = new ReflectionEmbeddedProperty( + $parentReflFields[$embeddedClass['declaredField']], + $reflService->getAccessibleProperty( + $this->embeddedClasses[$embeddedClass['declaredField']]['class'], + $embeddedClass['originalField'] + ), + $this->embeddedClasses[$embeddedClass['declaredField']]['class'] + ); + + continue; + } + + $fieldRefl = $reflService->getAccessibleProperty( + isset($embeddedClass['declared']) ? $embeddedClass['declared'] : $this->name, + $property + ); + + $parentReflFields[$property] = $fieldRefl; + $this->reflFields[$property] = $fieldRefl; + } + + foreach ($this->fieldMappings as $field => $mapping) { + if (isset($mapping['declaredField']) && isset($parentReflFields[$mapping['declaredField']])) { + $this->reflFields[$field] = new ReflectionEmbeddedProperty( + $parentReflFields[$mapping['declaredField']], + $reflService->getAccessibleProperty($mapping['originalClass'], $mapping['originalField']), + $mapping['originalClass'] + ); + continue; + } + + $this->reflFields[$field] = isset($mapping['declared']) + ? $reflService->getAccessibleProperty($mapping['declared'], $field) + : $reflService->getAccessibleProperty($this->name, $field); + } + + foreach ($this->associationMappings as $field => $mapping) { + $this->reflFields[$field] = isset($mapping['declared']) + ? $reflService->getAccessibleProperty($mapping['declared'], $field) + : $reflService->getAccessibleProperty($this->name, $field); + } + } + + /** + * Initializes a new ClassMetadata instance that will hold the object-relational mapping + * metadata of the class with the given name. + * + * @param \Doctrine\Common\Persistence\Mapping\ReflectionService $reflService The reflection service. + * + * @return void + */ + public function initializeReflection($reflService) + { + $this->reflClass = $reflService->getClass($this->name); + $this->namespace = $reflService->getClassNamespace($this->name); + + if ($this->reflClass) { + $this->name = $this->rootEntityName = $this->reflClass->getName(); + } + + $this->table['name'] = $this->namingStrategy->classToTableName($this->name); + } + + /** + * Validates Identifier. + * + * @return void + * + * @throws MappingException + */ + public function validateIdentifier() + { + if ($this->isMappedSuperclass || $this->isEmbeddedClass) { + return; + } + + // Verify & complete identifier mapping + if ( ! $this->identifier) { + throw MappingException::identifierRequired($this->name); + } + + if ($this->usesIdGenerator() && $this->isIdentifierComposite) { + throw MappingException::compositeKeyAssignedIdGeneratorRequired($this->name); + } + } + + /** + * Validates association targets actually exist. + * + * @return void + * + * @throws MappingException + */ + public function validateAssociations() + { + foreach ($this->associationMappings as $mapping) { + if ( ! ClassLoader::classExists($mapping['targetEntity']) ) { + throw MappingException::invalidTargetEntityClass($mapping['targetEntity'], $this->name, $mapping['fieldName']); + } + } + } + + /** + * Validates lifecycle callbacks. + * + * @param \Doctrine\Common\Persistence\Mapping\ReflectionService $reflService + * + * @return void + * + * @throws MappingException + */ + public function validateLifecycleCallbacks($reflService) + { + foreach ($this->lifecycleCallbacks as $callbacks) { + foreach ($callbacks as $callbackFuncName) { + if ( ! $reflService->hasPublicMethod($this->name, $callbackFuncName)) { + throw MappingException::lifecycleCallbackMethodNotFound($this->name, $callbackFuncName); + } + } + } + } + + /** + * {@inheritDoc} + */ + public function getReflectionClass() + { + return $this->reflClass; + } + + /** + * @param array $cache + * + * @return void + */ + public function enableCache(array $cache) + { + if ( ! isset($cache['usage'])) { + $cache['usage'] = self::CACHE_USAGE_READ_ONLY; + } + + if ( ! isset($cache['region'])) { + $cache['region'] = strtolower(str_replace('\\', '_', $this->rootEntityName)); + } + + $this->cache = $cache; + } + + /** + * @param string $fieldName + * @param array $cache + * + * @return void + */ + public function enableAssociationCache($fieldName, array $cache) + { + $this->associationMappings[$fieldName]['cache'] = $this->getAssociationCacheDefaults($fieldName, $cache); + } + + /** + * @param string $fieldName + * @param array $cache + * + * @return array + */ + public function getAssociationCacheDefaults($fieldName, array $cache) + { + if ( ! isset($cache['usage'])) { + $cache['usage'] = isset($this->cache['usage']) + ? $this->cache['usage'] + : self::CACHE_USAGE_READ_ONLY; + } + + if ( ! isset($cache['region'])) { + $cache['region'] = strtolower(str_replace('\\', '_', $this->rootEntityName)) . '__' . $fieldName; + } + + return $cache; + } + + /** + * Sets the change tracking policy used by this class. + * + * @param integer $policy + * + * @return void + */ + public function setChangeTrackingPolicy($policy) + { + $this->changeTrackingPolicy = $policy; + } + + /** + * Whether the change tracking policy of this class is "deferred explicit". + * + * @return boolean + */ + public function isChangeTrackingDeferredExplicit() + { + return self::CHANGETRACKING_DEFERRED_EXPLICIT === $this->changeTrackingPolicy; + } + + /** + * Whether the change tracking policy of this class is "deferred implicit". + * + * @return boolean + */ + public function isChangeTrackingDeferredImplicit() + { + return self::CHANGETRACKING_DEFERRED_IMPLICIT === $this->changeTrackingPolicy; + } + + /** + * Whether the change tracking policy of this class is "notify". + * + * @return boolean + */ + public function isChangeTrackingNotify() + { + return self::CHANGETRACKING_NOTIFY === $this->changeTrackingPolicy; + } + + /** + * Checks whether a field is part of the identifier/primary key field(s). + * + * @param string $fieldName The field name. + * + * @return boolean TRUE if the field is part of the table identifier/primary key field(s), + * FALSE otherwise. + */ + public function isIdentifier($fieldName) + { + if ( ! $this->identifier) { + return false; + } + + if ( ! $this->isIdentifierComposite) { + return $fieldName === $this->identifier[0]; + } + + return in_array($fieldName, $this->identifier, true); + } + + /** + * Checks if the field is unique. + * + * @param string $fieldName The field name. + * + * @return boolean TRUE if the field is unique, FALSE otherwise. + */ + public function isUniqueField($fieldName) + { + $mapping = $this->getFieldMapping($fieldName); + + return false !== $mapping && isset($mapping['unique']) && $mapping['unique']; + } + + /** + * Checks if the field is not null. + * + * @param string $fieldName The field name. + * + * @return boolean TRUE if the field is not null, FALSE otherwise. + */ + public function isNullable($fieldName) + { + $mapping = $this->getFieldMapping($fieldName); + + return false !== $mapping && isset($mapping['nullable']) && $mapping['nullable']; + } + + /** + * Gets a column name for a field name. + * If the column name for the field cannot be found, the given field name + * is returned. + * + * @param string $fieldName The field name. + * + * @return string The column name. + */ + public function getColumnName($fieldName) + { + return isset($this->columnNames[$fieldName]) + ? $this->columnNames[$fieldName] + : $fieldName; + } + + /** + * Gets the mapping of a (regular) field that holds some data but not a + * reference to another object. + * + * @param string $fieldName The field name. + * + * @return array The field mapping. + * + * @throws MappingException + */ + public function getFieldMapping($fieldName) + { + if ( ! isset($this->fieldMappings[$fieldName])) { + throw MappingException::mappingNotFound($this->name, $fieldName); + } + + return $this->fieldMappings[$fieldName]; + } + + /** + * Gets the mapping of an association. + * + * @see ClassMetadata::$associationMappings + * + * @param string $fieldName The field name that represents the association in + * the object model. + * + * @return array The mapping. + * + * @throws MappingException + */ + public function getAssociationMapping($fieldName) + { + if ( ! isset($this->associationMappings[$fieldName])) { + throw MappingException::mappingNotFound($this->name, $fieldName); + } + + return $this->associationMappings[$fieldName]; + } + + /** + * Gets all association mappings of the class. + * + * @return array + */ + public function getAssociationMappings() + { + return $this->associationMappings; + } + + /** + * Gets the field name for a column name. + * If no field name can be found the column name is returned. + * + * @param string $columnName The column name. + * + * @return string The column alias. + */ + public function getFieldName($columnName) + { + return isset($this->fieldNames[$columnName]) + ? $this->fieldNames[$columnName] + : $columnName; + } + + /** + * Gets the named query. + * + * @see ClassMetadata::$namedQueries + * + * @param string $queryName The query name. + * + * @return string + * + * @throws MappingException + */ + public function getNamedQuery($queryName) + { + if ( ! isset($this->namedQueries[$queryName])) { + throw MappingException::queryNotFound($this->name, $queryName); + } + + return $this->namedQueries[$queryName]['dql']; + } + + /** + * Gets all named queries of the class. + * + * @return array + */ + public function getNamedQueries() + { + return $this->namedQueries; + } + + /** + * Gets the named native query. + * + * @see ClassMetadata::$namedNativeQueries + * + * @param string $queryName The query name. + * + * @return array + * + * @throws MappingException + */ + public function getNamedNativeQuery($queryName) + { + if ( ! isset($this->namedNativeQueries[$queryName])) { + throw MappingException::queryNotFound($this->name, $queryName); + } + + return $this->namedNativeQueries[$queryName]; + } + + /** + * Gets all named native queries of the class. + * + * @return array + */ + public function getNamedNativeQueries() + { + return $this->namedNativeQueries; + } + + /** + * Gets the result set mapping. + * + * @see ClassMetadata::$sqlResultSetMappings + * + * @param string $name The result set mapping name. + * + * @return array + * + * @throws MappingException + */ + public function getSqlResultSetMapping($name) + { + if ( ! isset($this->sqlResultSetMappings[$name])) { + throw MappingException::resultMappingNotFound($this->name, $name); + } + + return $this->sqlResultSetMappings[$name]; + } + + /** + * Gets all sql result set mappings of the class. + * + * @return array + */ + public function getSqlResultSetMappings() + { + return $this->sqlResultSetMappings; + } + + /** + * Validates & completes the given field mapping. + * + * @param array $mapping The field mapping to validate & complete. + * + * @return array The validated and completed field mapping. + * + * @throws MappingException + */ + protected function _validateAndCompleteFieldMapping(array &$mapping) + { + // Check mandatory fields + if ( ! isset($mapping['fieldName']) || ! $mapping['fieldName']) { + throw MappingException::missingFieldName($this->name); + } + + if ( ! isset($mapping['type'])) { + // Default to string + $mapping['type'] = 'string'; + } + + // Complete fieldName and columnName mapping + if ( ! isset($mapping['columnName'])) { + $mapping['columnName'] = $this->namingStrategy->propertyToColumnName($mapping['fieldName'], $this->name); + } + + if ('`' === $mapping['columnName'][0]) { + $mapping['columnName'] = trim($mapping['columnName'], '`'); + $mapping['quoted'] = true; + } + + $this->columnNames[$mapping['fieldName']] = $mapping['columnName']; + + if (isset($this->fieldNames[$mapping['columnName']]) || ($this->discriminatorColumn && $this->discriminatorColumn['name'] === $mapping['columnName'])) { + throw MappingException::duplicateColumnName($this->name, $mapping['columnName']); + } + + $this->fieldNames[$mapping['columnName']] = $mapping['fieldName']; + + // Complete id mapping + if (isset($mapping['id']) && true === $mapping['id']) { + if ($this->versionField == $mapping['fieldName']) { + throw MappingException::cannotVersionIdField($this->name, $mapping['fieldName']); + } + + if ( ! in_array($mapping['fieldName'], $this->identifier)) { + $this->identifier[] = $mapping['fieldName']; + } + + // Check for composite key + if ( ! $this->isIdentifierComposite && count($this->identifier) > 1) { + $this->isIdentifierComposite = true; + } + } + + if (Type::hasType($mapping['type']) && Type::getType($mapping['type'])->canRequireSQLConversion()) { + if (isset($mapping['id']) && true === $mapping['id']) { + throw MappingException::sqlConversionNotAllowedForIdentifiers($this->name, $mapping['fieldName'], $mapping['type']); + } + + $mapping['requireSQLConversion'] = true; + } + } + + /** + * Validates & completes the basic mapping information that is common to all + * association mappings (one-to-one, many-ot-one, one-to-many, many-to-many). + * + * @param array $mapping The mapping. + * + * @return array The updated mapping. + * + * @throws MappingException If something is wrong with the mapping. + */ + protected function _validateAndCompleteAssociationMapping(array $mapping) + { + if ( ! isset($mapping['mappedBy'])) { + $mapping['mappedBy'] = null; + } + + if ( ! isset($mapping['inversedBy'])) { + $mapping['inversedBy'] = null; + } + + $mapping['isOwningSide'] = true; // assume owning side until we hit mappedBy + + if (empty($mapping['indexBy'])) { + unset($mapping['indexBy']); + } + + // If targetEntity is unqualified, assume it is in the same namespace as + // the sourceEntity. + $mapping['sourceEntity'] = $this->name; + + if (isset($mapping['targetEntity'])) { + $mapping['targetEntity'] = $this->fullyQualifiedClassName($mapping['targetEntity']); + $mapping['targetEntity'] = ltrim($mapping['targetEntity'], '\\'); + } + + if (($mapping['type'] & self::MANY_TO_ONE) > 0 && isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']) { + throw MappingException::illegalOrphanRemoval($this->name, $mapping['fieldName']); + } + + // Complete id mapping + if (isset($mapping['id']) && true === $mapping['id']) { + if (isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']) { + throw MappingException::illegalOrphanRemovalOnIdentifierAssociation($this->name, $mapping['fieldName']); + } + + if ( ! in_array($mapping['fieldName'], $this->identifier)) { + if (isset($mapping['joinColumns']) && count($mapping['joinColumns']) >= 2) { + throw MappingException::cannotMapCompositePrimaryKeyEntitiesAsForeignId( + $mapping['targetEntity'], $this->name, $mapping['fieldName'] + ); + } + + $this->identifier[] = $mapping['fieldName']; + $this->containsForeignIdentifier = true; + } + + // Check for composite key + if ( ! $this->isIdentifierComposite && count($this->identifier) > 1) { + $this->isIdentifierComposite = true; + } + + if ($this->cache && !isset($mapping['cache'])) { + throw CacheException::nonCacheableEntityAssociation($this->name, $mapping['fieldName']); + } + } + + // Mandatory attributes for both sides + // Mandatory: fieldName, targetEntity + if ( ! isset($mapping['fieldName']) || ! $mapping['fieldName']) { + throw MappingException::missingFieldName($this->name); + } + + if ( ! isset($mapping['targetEntity'])) { + throw MappingException::missingTargetEntity($mapping['fieldName']); + } + + // Mandatory and optional attributes for either side + if ( ! $mapping['mappedBy']) { + if (isset($mapping['joinTable']) && $mapping['joinTable']) { + if (isset($mapping['joinTable']['name']) && $mapping['joinTable']['name'][0] === '`') { + $mapping['joinTable']['name'] = trim($mapping['joinTable']['name'], '`'); + $mapping['joinTable']['quoted'] = true; + } + } + } else { + $mapping['isOwningSide'] = false; + } + + if (isset($mapping['id']) && true === $mapping['id'] && $mapping['type'] & self::TO_MANY) { + throw MappingException::illegalToManyIdentifierAssociation($this->name, $mapping['fieldName']); + } + + // Fetch mode. Default fetch mode to LAZY, if not set. + if ( ! isset($mapping['fetch'])) { + $mapping['fetch'] = self::FETCH_LAZY; + } + + // Cascades + $cascades = isset($mapping['cascade']) ? array_map('strtolower', $mapping['cascade']) : []; + $allCascades = ['remove', 'persist', 'refresh', 'merge', 'detach']; + + if (in_array('all', $cascades)) { + $cascades = $allCascades; + } elseif (count($cascades) !== count(array_intersect($cascades, $allCascades))) { + throw MappingException::invalidCascadeOption( + array_diff($cascades, $allCascades), + $this->name, + $mapping['fieldName'] + ); + } + + $mapping['cascade'] = $cascades; + $mapping['isCascadeRemove'] = in_array('remove', $cascades); + $mapping['isCascadePersist'] = in_array('persist', $cascades); + $mapping['isCascadeRefresh'] = in_array('refresh', $cascades); + $mapping['isCascadeMerge'] = in_array('merge', $cascades); + $mapping['isCascadeDetach'] = in_array('detach', $cascades); + + return $mapping; + } + + /** + * Validates & completes a one-to-one association mapping. + * + * @param array $mapping The mapping to validate & complete. + * + * @return array The validated & completed mapping. + * + * @throws RuntimeException + * @throws MappingException + */ + protected function _validateAndCompleteOneToOneMapping(array $mapping) + { + $mapping = $this->_validateAndCompleteAssociationMapping($mapping); + + if (isset($mapping['joinColumns']) && $mapping['joinColumns']) { + $mapping['isOwningSide'] = true; + } + + if ($mapping['isOwningSide']) { + if (empty($mapping['joinColumns'])) { + // Apply default join column + $mapping['joinColumns'] = [ + [ + 'name' => $this->namingStrategy->joinColumnName($mapping['fieldName'], $this->name), + 'referencedColumnName' => $this->namingStrategy->referenceColumnName() + ] + ]; + } + + $uniqueConstraintColumns = []; + + foreach ($mapping['joinColumns'] as &$joinColumn) { + if ($mapping['type'] === self::ONE_TO_ONE && ! $this->isInheritanceTypeSingleTable()) { + if (count($mapping['joinColumns']) === 1) { + if (empty($mapping['id'])) { + $joinColumn['unique'] = true; + } + } else { + $uniqueConstraintColumns[] = $joinColumn['name']; + } + } + + if (empty($joinColumn['name'])) { + $joinColumn['name'] = $this->namingStrategy->joinColumnName($mapping['fieldName'], $this->name); + } + + if (empty($joinColumn['referencedColumnName'])) { + $joinColumn['referencedColumnName'] = $this->namingStrategy->referenceColumnName(); + } + + if ($joinColumn['name'][0] === '`') { + $joinColumn['name'] = trim($joinColumn['name'], '`'); + $joinColumn['quoted'] = true; + } + + if ($joinColumn['referencedColumnName'][0] === '`') { + $joinColumn['referencedColumnName'] = trim($joinColumn['referencedColumnName'], '`'); + $joinColumn['quoted'] = true; + } + + $mapping['sourceToTargetKeyColumns'][$joinColumn['name']] = $joinColumn['referencedColumnName']; + $mapping['joinColumnFieldNames'][$joinColumn['name']] = isset($joinColumn['fieldName']) + ? $joinColumn['fieldName'] + : $joinColumn['name']; + } + + if ($uniqueConstraintColumns) { + if ( ! $this->table) { + throw new RuntimeException("ClassMetadata::setTable() has to be called before defining a one to one relationship."); + } + + $this->table['uniqueConstraints'][$mapping['fieldName'] . "_uniq"] = [ + 'columns' => $uniqueConstraintColumns + ]; + } + + $mapping['targetToSourceKeyColumns'] = array_flip($mapping['sourceToTargetKeyColumns']); + } + + $mapping['orphanRemoval'] = isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']; + $mapping['isCascadeRemove'] = $mapping['orphanRemoval'] || $mapping['isCascadeRemove']; + + if ($mapping['orphanRemoval']) { + unset($mapping['unique']); + } + + if (isset($mapping['id']) && $mapping['id'] === true && !$mapping['isOwningSide']) { + throw MappingException::illegalInverseIdentifierAssociation($this->name, $mapping['fieldName']); + } + + return $mapping; + } + + /** + * Validates & completes a one-to-many association mapping. + * + * @param array $mapping The mapping to validate and complete. + * + * @return array The validated and completed mapping. + * + * @throws MappingException + * @throws InvalidArgumentException + */ + protected function _validateAndCompleteOneToManyMapping(array $mapping) + { + $mapping = $this->_validateAndCompleteAssociationMapping($mapping); + + // OneToMany-side MUST be inverse (must have mappedBy) + if ( ! isset($mapping['mappedBy'])) { + throw MappingException::oneToManyRequiresMappedBy($mapping['fieldName']); + } + + $mapping['orphanRemoval'] = isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']; + $mapping['isCascadeRemove'] = $mapping['orphanRemoval'] || $mapping['isCascadeRemove']; + + $this->assertMappingOrderBy($mapping); + + return $mapping; + } + + /** + * Validates & completes a many-to-many association mapping. + * + * @param array $mapping The mapping to validate & complete. + * + * @return array The validated & completed mapping. + * + * @throws \InvalidArgumentException + */ + protected function _validateAndCompleteManyToManyMapping(array $mapping) + { + $mapping = $this->_validateAndCompleteAssociationMapping($mapping); + + if ($mapping['isOwningSide']) { + // owning side MUST have a join table + if ( ! isset($mapping['joinTable']['name'])) { + $mapping['joinTable']['name'] = $this->namingStrategy->joinTableName($mapping['sourceEntity'], $mapping['targetEntity'], $mapping['fieldName']); + } + + $selfReferencingEntityWithoutJoinColumns = $mapping['sourceEntity'] == $mapping['targetEntity'] + && (! (isset($mapping['joinTable']['joinColumns']) || isset($mapping['joinTable']['inverseJoinColumns']))); + + if ( ! isset($mapping['joinTable']['joinColumns'])) { + $mapping['joinTable']['joinColumns'] = [ + [ + 'name' => $this->namingStrategy->joinKeyColumnName($mapping['sourceEntity'], $selfReferencingEntityWithoutJoinColumns ? 'source' : null), + 'referencedColumnName' => $this->namingStrategy->referenceColumnName(), + 'onDelete' => 'CASCADE' + ] + ]; + } + + if ( ! isset($mapping['joinTable']['inverseJoinColumns'])) { + $mapping['joinTable']['inverseJoinColumns'] = [ + [ + 'name' => $this->namingStrategy->joinKeyColumnName($mapping['targetEntity'], $selfReferencingEntityWithoutJoinColumns ? 'target' : null), + 'referencedColumnName' => $this->namingStrategy->referenceColumnName(), + 'onDelete' => 'CASCADE' + ] + ]; + } + + $mapping['joinTableColumns'] = []; + + foreach ($mapping['joinTable']['joinColumns'] as &$joinColumn) { + if (empty($joinColumn['name'])) { + $joinColumn['name'] = $this->namingStrategy->joinKeyColumnName($mapping['sourceEntity'], $joinColumn['referencedColumnName']); + } + + if (empty($joinColumn['referencedColumnName'])) { + $joinColumn['referencedColumnName'] = $this->namingStrategy->referenceColumnName(); + } + + if ($joinColumn['name'][0] === '`') { + $joinColumn['name'] = trim($joinColumn['name'], '`'); + $joinColumn['quoted'] = true; + } + + if ($joinColumn['referencedColumnName'][0] === '`') { + $joinColumn['referencedColumnName'] = trim($joinColumn['referencedColumnName'], '`'); + $joinColumn['quoted'] = true; + } + + if (isset($joinColumn['onDelete']) && strtolower($joinColumn['onDelete']) == 'cascade') { + $mapping['isOnDeleteCascade'] = true; + } + + $mapping['relationToSourceKeyColumns'][$joinColumn['name']] = $joinColumn['referencedColumnName']; + $mapping['joinTableColumns'][] = $joinColumn['name']; + } + + foreach ($mapping['joinTable']['inverseJoinColumns'] as &$inverseJoinColumn) { + if (empty($inverseJoinColumn['name'])) { + $inverseJoinColumn['name'] = $this->namingStrategy->joinKeyColumnName($mapping['targetEntity'], $inverseJoinColumn['referencedColumnName']); + } + + if (empty($inverseJoinColumn['referencedColumnName'])) { + $inverseJoinColumn['referencedColumnName'] = $this->namingStrategy->referenceColumnName(); + } + + if ($inverseJoinColumn['name'][0] === '`') { + $inverseJoinColumn['name'] = trim($inverseJoinColumn['name'], '`'); + $inverseJoinColumn['quoted'] = true; + } + + if ($inverseJoinColumn['referencedColumnName'][0] === '`') { + $inverseJoinColumn['referencedColumnName'] = trim($inverseJoinColumn['referencedColumnName'], '`'); + $inverseJoinColumn['quoted'] = true; + } + + if (isset($inverseJoinColumn['onDelete']) && strtolower($inverseJoinColumn['onDelete']) == 'cascade') { + $mapping['isOnDeleteCascade'] = true; + } + + $mapping['relationToTargetKeyColumns'][$inverseJoinColumn['name']] = $inverseJoinColumn['referencedColumnName']; + $mapping['joinTableColumns'][] = $inverseJoinColumn['name']; + } + } + + $mapping['orphanRemoval'] = isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']; + + $this->assertMappingOrderBy($mapping); + + return $mapping; + } + + /** + * {@inheritDoc} + */ + public function getIdentifierFieldNames() + { + return $this->identifier; + } + + /** + * Gets the name of the single id field. Note that this only works on + * entity classes that have a single-field pk. + * + * @return string + * + * @throws MappingException If the class has a composite primary key. + */ + public function getSingleIdentifierFieldName() + { + if ($this->isIdentifierComposite) { + throw MappingException::singleIdNotAllowedOnCompositePrimaryKey($this->name); + } + + return $this->identifier[0]; + } + + /** + * Gets the column name of the single id column. Note that this only works on + * entity classes that have a single-field pk. + * + * @return string + * + * @throws MappingException If the class has a composite primary key. + */ + public function getSingleIdentifierColumnName() + { + return $this->getColumnName($this->getSingleIdentifierFieldName()); + } + + /** + * INTERNAL: + * Sets the mapped identifier/primary key fields of this class. + * Mainly used by the ClassMetadataFactory to assign inherited identifiers. + * + * @param array $identifier + * + * @return void + */ + public function setIdentifier(array $identifier) + { + $this->identifier = $identifier; + $this->isIdentifierComposite = (count($this->identifier) > 1); + } + + /** + * {@inheritDoc} + */ + public function getIdentifier() + { + return $this->identifier; + } + + /** + * {@inheritDoc} + */ + public function hasField($fieldName) + { + return isset($this->fieldMappings[$fieldName]); + } + + /** + * Gets an array containing all the column names. + * + * @param array|null $fieldNames + * + * @return array + */ + public function getColumnNames(array $fieldNames = null) + { + if (null === $fieldNames) { + return array_keys($this->fieldNames); + } + + return array_values(array_map([$this, 'getColumnName'], $fieldNames)); + } + + /** + * Returns an array with all the identifier column names. + * + * @return array + */ + public function getIdentifierColumnNames() + { + $columnNames = []; + + foreach ($this->identifier as $idProperty) { + if (isset($this->fieldMappings[$idProperty])) { + $columnNames[] = $this->fieldMappings[$idProperty]['columnName']; + + continue; + } + + // Association defined as Id field + $joinColumns = $this->associationMappings[$idProperty]['joinColumns']; + $assocColumnNames = array_map(function ($joinColumn) { return $joinColumn['name']; }, $joinColumns); + + $columnNames = array_merge($columnNames, $assocColumnNames); + } + + return $columnNames; + } + + /** + * Sets the type of Id generator to use for the mapped class. + * + * @param int $generatorType + * + * @return void + */ + public function setIdGeneratorType($generatorType) + { + $this->generatorType = $generatorType; + } + + /** + * Checks whether the mapped class uses an Id generator. + * + * @return boolean TRUE if the mapped class uses an Id generator, FALSE otherwise. + */ + public function usesIdGenerator() + { + return $this->generatorType != self::GENERATOR_TYPE_NONE; + } + + /** + * @return boolean + */ + public function isInheritanceTypeNone() + { + return $this->inheritanceType == self::INHERITANCE_TYPE_NONE; + } + + /** + * Checks whether the mapped class uses the JOINED inheritance mapping strategy. + * + * @return boolean TRUE if the class participates in a JOINED inheritance mapping, + * FALSE otherwise. + */ + public function isInheritanceTypeJoined() + { + return $this->inheritanceType == self::INHERITANCE_TYPE_JOINED; + } + + /** + * Checks whether the mapped class uses the SINGLE_TABLE inheritance mapping strategy. + * + * @return boolean TRUE if the class participates in a SINGLE_TABLE inheritance mapping, + * FALSE otherwise. + */ + public function isInheritanceTypeSingleTable() + { + return $this->inheritanceType == self::INHERITANCE_TYPE_SINGLE_TABLE; + } + + /** + * Checks whether the mapped class uses the TABLE_PER_CLASS inheritance mapping strategy. + * + * @return boolean TRUE if the class participates in a TABLE_PER_CLASS inheritance mapping, + * FALSE otherwise. + */ + public function isInheritanceTypeTablePerClass() + { + return $this->inheritanceType == self::INHERITANCE_TYPE_TABLE_PER_CLASS; + } + + /** + * Checks whether the class uses an identity column for the Id generation. + * + * @return boolean TRUE if the class uses the IDENTITY generator, FALSE otherwise. + */ + public function isIdGeneratorIdentity() + { + return $this->generatorType == self::GENERATOR_TYPE_IDENTITY; + } + + /** + * Checks whether the class uses a sequence for id generation. + * + * @return boolean TRUE if the class uses the SEQUENCE generator, FALSE otherwise. + */ + public function isIdGeneratorSequence() + { + return $this->generatorType == self::GENERATOR_TYPE_SEQUENCE; + } + + /** + * Checks whether the class uses a table for id generation. + * + * @return boolean TRUE if the class uses the TABLE generator, FALSE otherwise. + */ + public function isIdGeneratorTable() + { + return $this->generatorType == self::GENERATOR_TYPE_TABLE; + } + + /** + * Checks whether the class has a natural identifier/pk (which means it does + * not use any Id generator. + * + * @return boolean + */ + public function isIdentifierNatural() + { + return $this->generatorType == self::GENERATOR_TYPE_NONE; + } + + /** + * Checks whether the class use a UUID for id generation. + * + * @return boolean + */ + public function isIdentifierUuid() + { + return $this->generatorType == self::GENERATOR_TYPE_UUID; + } + + /** + * Gets the type of a field. + * + * @param string $fieldName + * + * @return \Doctrine\DBAL\Types\Type|string|null + * + * @todo 3.0 Remove this. PersisterHelper should fix it somehow + */ + public function getTypeOfField($fieldName) + { + return isset($this->fieldMappings[$fieldName]) + ? $this->fieldMappings[$fieldName]['type'] + : null; + } + + /** + * Gets the type of a column. + * + * @param string $columnName + * + * @return \Doctrine\DBAL\Types\Type|string|null + * + * @deprecated 3.0 remove this. this method is bogous and unreliable, since it cannot resolve the type of a column + * that is derived by a referenced field on a different entity. + */ + public function getTypeOfColumn($columnName) + { + return $this->getTypeOfField($this->getFieldName($columnName)); + } + + /** + * Gets the name of the primary table. + * + * @return string + */ + public function getTableName() + { + return $this->table['name']; + } + + /** + * Gets primary table's schema name. + * + * @return string|null + */ + public function getSchemaName() + { + return isset($this->table['schema']) ? $this->table['schema'] : null; + } + + /** + * Gets the table name to use for temporary identifier tables of this class. + * + * @return string + */ + public function getTemporaryIdTableName() + { + // replace dots with underscores because PostgreSQL creates temporary tables in a special schema + return str_replace('.', '_', $this->getTableName() . '_id_tmp'); + } + + /** + * Sets the mapped subclasses of this class. + * + * @param array $subclasses The names of all mapped subclasses. + * + * @return void + */ + public function setSubclasses(array $subclasses) + { + foreach ($subclasses as $subclass) { + $this->subClasses[] = $this->fullyQualifiedClassName($subclass); + } + } + + /** + * Sets the parent class names. + * Assumes that the class names in the passed array are in the order: + * directParent -> directParentParent -> directParentParentParent ... -> root. + * + * @param array $classNames + * + * @return void + */ + public function setParentClasses(array $classNames) + { + $this->parentClasses = $classNames; + + if (count($classNames) > 0) { + $this->rootEntityName = array_pop($classNames); + } + } + + /** + * Sets the inheritance type used by the class and its subclasses. + * + * @param integer $type + * + * @return void + * + * @throws MappingException + */ + public function setInheritanceType($type) + { + if ( ! $this->_isInheritanceType($type)) { + throw MappingException::invalidInheritanceType($this->name, $type); + } + + $this->inheritanceType = $type; + } + + /** + * Sets the association to override association mapping of property for an entity relationship. + * + * @param string $fieldName + * @param array $overrideMapping + * + * @return void + * + * @throws MappingException + */ + public function setAssociationOverride($fieldName, array $overrideMapping) + { + if ( ! isset($this->associationMappings[$fieldName])) { + throw MappingException::invalidOverrideFieldName($this->name, $fieldName); + } + + $mapping = $this->associationMappings[$fieldName]; + + if (isset($overrideMapping['joinColumns'])) { + $mapping['joinColumns'] = $overrideMapping['joinColumns']; + } + + if (isset($overrideMapping['inversedBy'])) { + $mapping['inversedBy'] = $overrideMapping['inversedBy']; + } + + if (isset($overrideMapping['joinTable'])) { + $mapping['joinTable'] = $overrideMapping['joinTable']; + } + + $mapping['joinColumnFieldNames'] = null; + $mapping['joinTableColumns'] = null; + $mapping['sourceToTargetKeyColumns'] = null; + $mapping['relationToSourceKeyColumns'] = null; + $mapping['relationToTargetKeyColumns'] = null; + + switch ($mapping['type']) { + case self::ONE_TO_ONE: + $mapping = $this->_validateAndCompleteOneToOneMapping($mapping); + break; + case self::ONE_TO_MANY: + $mapping = $this->_validateAndCompleteOneToManyMapping($mapping); + break; + case self::MANY_TO_ONE: + $mapping = $this->_validateAndCompleteOneToOneMapping($mapping); + break; + case self::MANY_TO_MANY: + $mapping = $this->_validateAndCompleteManyToManyMapping($mapping); + break; + } + + $this->associationMappings[$fieldName] = $mapping; + } + + /** + * Sets the override for a mapped field. + * + * @param string $fieldName + * @param array $overrideMapping + * + * @return void + * + * @throws MappingException + */ + public function setAttributeOverride($fieldName, array $overrideMapping) + { + if ( ! isset($this->fieldMappings[$fieldName])) { + throw MappingException::invalidOverrideFieldName($this->name, $fieldName); + } + + $mapping = $this->fieldMappings[$fieldName]; + + if (isset($mapping['id'])) { + $overrideMapping['id'] = $mapping['id']; + } + + if ( ! isset($overrideMapping['type'])) { + $overrideMapping['type'] = $mapping['type']; + } + + if ( ! isset($overrideMapping['fieldName'])) { + $overrideMapping['fieldName'] = $mapping['fieldName']; + } + + if ($overrideMapping['type'] !== $mapping['type']) { + throw MappingException::invalidOverrideFieldType($this->name, $fieldName); + } + + unset($this->fieldMappings[$fieldName]); + unset($this->fieldNames[$mapping['columnName']]); + unset($this->columnNames[$mapping['fieldName']]); + + $this->_validateAndCompleteFieldMapping($overrideMapping); + + $this->fieldMappings[$fieldName] = $overrideMapping; + } + + /** + * Checks whether a mapped field is inherited from an entity superclass. + * + * @param string $fieldName + * + * @return bool TRUE if the field is inherited, FALSE otherwise. + */ + public function isInheritedField($fieldName) + { + return isset($this->fieldMappings[$fieldName]['inherited']); + } + + /** + * Checks if this entity is the root in any entity-inheritance-hierarchy. + * + * @return bool + */ + public function isRootEntity() + { + return $this->name == $this->rootEntityName; + } + + /** + * Checks whether a mapped association field is inherited from a superclass. + * + * @param string $fieldName + * + * @return boolean TRUE if the field is inherited, FALSE otherwise. + */ + public function isInheritedAssociation($fieldName) + { + return isset($this->associationMappings[$fieldName]['inherited']); + } + + public function isInheritedEmbeddedClass($fieldName) + { + return isset($this->embeddedClasses[$fieldName]['inherited']); + } + + /** + * Sets the name of the primary table the class is mapped to. + * + * @param string $tableName The table name. + * + * @return void + * + * @deprecated Use {@link setPrimaryTable}. + */ + public function setTableName($tableName) + { + $this->table['name'] = $tableName; + } + + /** + * Sets the primary table definition. The provided array supports the + * following structure: + * + * name => (optional, defaults to class name) + * indexes => array of indexes (optional) + * uniqueConstraints => array of constraints (optional) + * + * If a key is omitted, the current value is kept. + * + * @param array $table The table description. + * + * @return void + */ + public function setPrimaryTable(array $table) + { + if (isset($table['name'])) { + // Split schema and table name from a table name like "myschema.mytable" + if (strpos($table['name'], '.') !== false) { + list($this->table['schema'], $table['name']) = explode('.', $table['name'], 2); + } + + if ($table['name'][0] === '`') { + $table['name'] = trim($table['name'], '`'); + $this->table['quoted'] = true; + } + + $this->table['name'] = $table['name']; + } + + if (isset($table['schema'])) { + $this->table['schema'] = $table['schema']; + } + + if (isset($table['indexes'])) { + $this->table['indexes'] = $table['indexes']; + } + + if (isset($table['uniqueConstraints'])) { + $this->table['uniqueConstraints'] = $table['uniqueConstraints']; + } + + if (isset($table['options'])) { + $this->table['options'] = $table['options']; + } + } + + /** + * Checks whether the given type identifies an inheritance type. + * + * @param integer $type + * + * @return boolean TRUE if the given type identifies an inheritance type, FALSe otherwise. + */ + private function _isInheritanceType($type) + { + return $type == self::INHERITANCE_TYPE_NONE + || $type == self::INHERITANCE_TYPE_SINGLE_TABLE + || $type == self::INHERITANCE_TYPE_JOINED + || $type == self::INHERITANCE_TYPE_TABLE_PER_CLASS; + } + + /** + * Adds a mapped field to the class. + * + * @param array $mapping The field mapping. + * + * @return void + * + * @throws MappingException + */ + public function mapField(array $mapping) + { + $this->_validateAndCompleteFieldMapping($mapping); + $this->assertFieldNotMapped($mapping['fieldName']); + + $this->fieldMappings[$mapping['fieldName']] = $mapping; + } + + /** + * INTERNAL: + * Adds an association mapping without completing/validating it. + * This is mainly used to add inherited association mappings to derived classes. + * + * @param array $mapping + * + * @return void + * + * @throws MappingException + */ + public function addInheritedAssociationMapping(array $mapping/*, $owningClassName = null*/) + { + if (isset($this->associationMappings[$mapping['fieldName']])) { + throw MappingException::duplicateAssociationMapping($this->name, $mapping['fieldName']); + } + $this->associationMappings[$mapping['fieldName']] = $mapping; + } + + /** + * INTERNAL: + * Adds a field mapping without completing/validating it. + * This is mainly used to add inherited field mappings to derived classes. + * + * @param array $fieldMapping + * + * @return void + */ + public function addInheritedFieldMapping(array $fieldMapping) + { + $this->fieldMappings[$fieldMapping['fieldName']] = $fieldMapping; + $this->columnNames[$fieldMapping['fieldName']] = $fieldMapping['columnName']; + $this->fieldNames[$fieldMapping['columnName']] = $fieldMapping['fieldName']; + } + + /** + * INTERNAL: + * Adds a named query to this class. + * + * @param array $queryMapping + * + * @return void + * + * @throws MappingException + */ + public function addNamedQuery(array $queryMapping) + { + if (!isset($queryMapping['name'])) { + throw MappingException::nameIsMandatoryForQueryMapping($this->name); + } + + if (isset($this->namedQueries[$queryMapping['name']])) { + throw MappingException::duplicateQueryMapping($this->name, $queryMapping['name']); + } + + if (!isset($queryMapping['query'])) { + throw MappingException::emptyQueryMapping($this->name, $queryMapping['name']); + } + + $name = $queryMapping['name']; + $query = $queryMapping['query']; + $dql = str_replace('__CLASS__', $this->name, $query); + + $this->namedQueries[$name] = [ + 'name' => $name, + 'query' => $query, + 'dql' => $dql, + ]; + } + + /** + * INTERNAL: + * Adds a named native query to this class. + * + * @param array $queryMapping + * + * @return void + * + * @throws MappingException + */ + public function addNamedNativeQuery(array $queryMapping) + { + if (!isset($queryMapping['name'])) { + throw MappingException::nameIsMandatoryForQueryMapping($this->name); + } + + if (isset($this->namedNativeQueries[$queryMapping['name']])) { + throw MappingException::duplicateQueryMapping($this->name, $queryMapping['name']); + } + + if (!isset($queryMapping['query'])) { + throw MappingException::emptyQueryMapping($this->name, $queryMapping['name']); + } + + if (!isset($queryMapping['resultClass']) && !isset($queryMapping['resultSetMapping'])) { + throw MappingException::missingQueryMapping($this->name, $queryMapping['name']); + } + + $queryMapping['isSelfClass'] = false; + + if (isset($queryMapping['resultClass'])) { + if ($queryMapping['resultClass'] === '__CLASS__') { + + $queryMapping['isSelfClass'] = true; + $queryMapping['resultClass'] = $this->name; + } + + $queryMapping['resultClass'] = $this->fullyQualifiedClassName($queryMapping['resultClass']); + $queryMapping['resultClass'] = ltrim($queryMapping['resultClass'], '\\'); + } + + $this->namedNativeQueries[$queryMapping['name']] = $queryMapping; + } + + /** + * INTERNAL: + * Adds a sql result set mapping to this class. + * + * @param array $resultMapping + * + * @return void + * + * @throws MappingException + */ + public function addSqlResultSetMapping(array $resultMapping) + { + if (!isset($resultMapping['name'])) { + throw MappingException::nameIsMandatoryForSqlResultSetMapping($this->name); + } + + if (isset($this->sqlResultSetMappings[$resultMapping['name']])) { + throw MappingException::duplicateResultSetMapping($this->name, $resultMapping['name']); + } + + if (isset($resultMapping['entities'])) { + foreach ($resultMapping['entities'] as $key => $entityResult) { + if (!isset($entityResult['entityClass'])) { + throw MappingException::missingResultSetMappingEntity($this->name, $resultMapping['name']); + } + + $entityResult['isSelfClass'] = false; + if ($entityResult['entityClass'] === '__CLASS__') { + + $entityResult['isSelfClass'] = true; + $entityResult['entityClass'] = $this->name; + + } + + $entityResult['entityClass'] = $this->fullyQualifiedClassName($entityResult['entityClass']); + + $resultMapping['entities'][$key]['entityClass'] = ltrim($entityResult['entityClass'], '\\'); + $resultMapping['entities'][$key]['isSelfClass'] = $entityResult['isSelfClass']; + + if (isset($entityResult['fields'])) { + foreach ($entityResult['fields'] as $k => $field) { + if (!isset($field['name'])) { + throw MappingException::missingResultSetMappingFieldName($this->name, $resultMapping['name']); + } + + if (!isset($field['column'])) { + $fieldName = $field['name']; + if (strpos($fieldName, '.')) { + list(, $fieldName) = explode('.', $fieldName); + } + + $resultMapping['entities'][$key]['fields'][$k]['column'] = $fieldName; + } + } + } + } + } + + $this->sqlResultSetMappings[$resultMapping['name']] = $resultMapping; + } + + /** + * Adds a one-to-one mapping. + * + * @param array $mapping The mapping. + * + * @return void + */ + public function mapOneToOne(array $mapping) + { + $mapping['type'] = self::ONE_TO_ONE; + + $mapping = $this->_validateAndCompleteOneToOneMapping($mapping); + + $this->_storeAssociationMapping($mapping); + } + + /** + * Adds a one-to-many mapping. + * + * @param array $mapping The mapping. + * + * @return void + */ + public function mapOneToMany(array $mapping) + { + $mapping['type'] = self::ONE_TO_MANY; + + $mapping = $this->_validateAndCompleteOneToManyMapping($mapping); + + $this->_storeAssociationMapping($mapping); + } + + /** + * Adds a many-to-one mapping. + * + * @param array $mapping The mapping. + * + * @return void + */ + public function mapManyToOne(array $mapping) + { + $mapping['type'] = self::MANY_TO_ONE; + + // A many-to-one mapping is essentially a one-one backreference + $mapping = $this->_validateAndCompleteOneToOneMapping($mapping); + + $this->_storeAssociationMapping($mapping); + } + + /** + * Adds a many-to-many mapping. + * + * @param array $mapping The mapping. + * + * @return void + */ + public function mapManyToMany(array $mapping) + { + $mapping['type'] = self::MANY_TO_MANY; + + $mapping = $this->_validateAndCompleteManyToManyMapping($mapping); + + $this->_storeAssociationMapping($mapping); + } + + /** + * Stores the association mapping. + * + * @param array $assocMapping + * + * @return void + * + * @throws MappingException + */ + protected function _storeAssociationMapping(array $assocMapping) + { + $sourceFieldName = $assocMapping['fieldName']; + + $this->assertFieldNotMapped($sourceFieldName); + + $this->associationMappings[$sourceFieldName] = $assocMapping; + } + + /** + * Registers a custom repository class for the entity class. + * + * @param string $repositoryClassName The class name of the custom mapper. + * + * @return void + */ + public function setCustomRepositoryClass($repositoryClassName) + { + $this->customRepositoryClassName = $this->fullyQualifiedClassName($repositoryClassName); + } + + /** + * Dispatches the lifecycle event of the given entity to the registered + * lifecycle callbacks and lifecycle listeners. + * + * @deprecated Deprecated since version 2.4 in favor of \Doctrine\ORM\Event\ListenersInvoker + * + * @param string $lifecycleEvent The lifecycle event. + * @param object $entity The Entity on which the event occurred. + * + * @return void + */ + public function invokeLifecycleCallbacks($lifecycleEvent, $entity) + { + foreach ($this->lifecycleCallbacks[$lifecycleEvent] as $callback) { + $entity->$callback(); + } + } + + /** + * Whether the class has any attached lifecycle listeners or callbacks for a lifecycle event. + * + * @param string $lifecycleEvent + * + * @return boolean + */ + public function hasLifecycleCallbacks($lifecycleEvent) + { + return isset($this->lifecycleCallbacks[$lifecycleEvent]); + } + + /** + * Gets the registered lifecycle callbacks for an event. + * + * @param string $event + * + * @return array + */ + public function getLifecycleCallbacks($event) + { + return isset($this->lifecycleCallbacks[$event]) ? $this->lifecycleCallbacks[$event] : []; + } + + /** + * Adds a lifecycle callback for entities of this class. + * + * @param string $callback + * @param string $event + * + * @return void + */ + public function addLifecycleCallback($callback, $event) + { + if (isset($this->lifecycleCallbacks[$event]) && in_array($callback, $this->lifecycleCallbacks[$event])) { + return; + } + + $this->lifecycleCallbacks[$event][] = $callback; + } + + /** + * Sets the lifecycle callbacks for entities of this class. + * Any previously registered callbacks are overwritten. + * + * @param array $callbacks + * + * @return void + */ + public function setLifecycleCallbacks(array $callbacks) + { + $this->lifecycleCallbacks = $callbacks; + } + + /** + * Adds a entity listener for entities of this class. + * + * @param string $eventName The entity lifecycle event. + * @param string $class The listener class. + * @param string $method The listener callback method. + * + * @throws \Doctrine\ORM\Mapping\MappingException + */ + public function addEntityListener($eventName, $class, $method) + { + $class = $this->fullyQualifiedClassName($class); + + $listener = [ + 'class' => $class, + 'method' => $method, + ]; + + if ( ! class_exists($class)) { + throw MappingException::entityListenerClassNotFound($class, $this->name); + } + + if ( ! method_exists($class, $method)) { + throw MappingException::entityListenerMethodNotFound($class, $method, $this->name); + } + + if (isset($this->entityListeners[$eventName]) && in_array($listener, $this->entityListeners[$eventName])) { + throw MappingException::duplicateEntityListener($class, $method, $this->name); + } + + $this->entityListeners[$eventName][] = $listener; + } + + /** + * Sets the discriminator column definition. + * + * @param array $columnDef + * + * @return void + * + * @throws MappingException + * + * @see getDiscriminatorColumn() + */ + public function setDiscriminatorColumn($columnDef) + { + if ($columnDef !== null) { + if ( ! isset($columnDef['name'])) { + throw MappingException::nameIsMandatoryForDiscriminatorColumns($this->name); + } + + if (isset($this->fieldNames[$columnDef['name']])) { + throw MappingException::duplicateColumnName($this->name, $columnDef['name']); + } + + if ( ! isset($columnDef['fieldName'])) { + $columnDef['fieldName'] = $columnDef['name']; + } + + if ( ! isset($columnDef['type'])) { + $columnDef['type'] = "string"; + } + + if (in_array($columnDef['type'], ["boolean", "array", "object", "datetime", "time", "date"])) { + throw MappingException::invalidDiscriminatorColumnType($this->name, $columnDef['type']); + } + + $this->discriminatorColumn = $columnDef; + } + } + + /** + * Sets the discriminator values used by this class. + * Used for JOINED and SINGLE_TABLE inheritance mapping strategies. + * + * @param array $map + * + * @return void + */ + public function setDiscriminatorMap(array $map) + { + foreach ($map as $value => $className) { + $this->addDiscriminatorMapClass($value, $className); + } + } + + /** + * Adds one entry of the discriminator map with a new class and corresponding name. + * + * @param string $name + * @param string $className + * + * @return void + * + * @throws MappingException + */ + public function addDiscriminatorMapClass($name, $className) + { + $className = $this->fullyQualifiedClassName($className); + $className = ltrim($className, '\\'); + + $this->discriminatorMap[$name] = $className; + + if ($this->name === $className) { + $this->discriminatorValue = $name; + + return; + } + + if ( ! (class_exists($className) || interface_exists($className))) { + throw MappingException::invalidClassInDiscriminatorMap($className, $this->name); + } + + if (is_subclass_of($className, $this->name) && ! in_array($className, $this->subClasses)) { + $this->subClasses[] = $className; + } + } + + /** + * Checks whether the class has a named query with the given query name. + * + * @param string $queryName + * + * @return boolean + */ + public function hasNamedQuery($queryName) + { + return isset($this->namedQueries[$queryName]); + } + + /** + * Checks whether the class has a named native query with the given query name. + * + * @param string $queryName + * + * @return boolean + */ + public function hasNamedNativeQuery($queryName) + { + return isset($this->namedNativeQueries[$queryName]); + } + + /** + * Checks whether the class has a named native query with the given query name. + * + * @param string $name + * + * @return boolean + */ + public function hasSqlResultSetMapping($name) + { + return isset($this->sqlResultSetMappings[$name]); + } + + /** + * {@inheritDoc} + */ + public function hasAssociation($fieldName) + { + return isset($this->associationMappings[$fieldName]); + } + + /** + * {@inheritDoc} + */ + public function isSingleValuedAssociation($fieldName) + { + return isset($this->associationMappings[$fieldName]) + && ($this->associationMappings[$fieldName]['type'] & self::TO_ONE); + } + + /** + * {@inheritDoc} + */ + public function isCollectionValuedAssociation($fieldName) + { + return isset($this->associationMappings[$fieldName]) + && ! ($this->associationMappings[$fieldName]['type'] & self::TO_ONE); + } + + /** + * Is this an association that only has a single join column? + * + * @param string $fieldName + * + * @return bool + */ + public function isAssociationWithSingleJoinColumn($fieldName) + { + return isset($this->associationMappings[$fieldName]) + && isset($this->associationMappings[$fieldName]['joinColumns'][0]) + && ! isset($this->associationMappings[$fieldName]['joinColumns'][1]); + } + + /** + * Returns the single association join column (if any). + * + * @param string $fieldName + * + * @return string + * + * @throws MappingException + */ + public function getSingleAssociationJoinColumnName($fieldName) + { + if ( ! $this->isAssociationWithSingleJoinColumn($fieldName)) { + throw MappingException::noSingleAssociationJoinColumnFound($this->name, $fieldName); + } + + return $this->associationMappings[$fieldName]['joinColumns'][0]['name']; + } + + /** + * Returns the single association referenced join column name (if any). + * + * @param string $fieldName + * + * @return string + * + * @throws MappingException + */ + public function getSingleAssociationReferencedJoinColumnName($fieldName) + { + if ( ! $this->isAssociationWithSingleJoinColumn($fieldName)) { + throw MappingException::noSingleAssociationJoinColumnFound($this->name, $fieldName); + } + + return $this->associationMappings[$fieldName]['joinColumns'][0]['referencedColumnName']; + } + + /** + * Used to retrieve a fieldname for either field or association from a given column. + * + * This method is used in foreign-key as primary-key contexts. + * + * @param string $columnName + * + * @return string + * + * @throws MappingException + */ + public function getFieldForColumn($columnName) + { + if (isset($this->fieldNames[$columnName])) { + return $this->fieldNames[$columnName]; + } + + foreach ($this->associationMappings as $assocName => $mapping) { + if ($this->isAssociationWithSingleJoinColumn($assocName) && + $this->associationMappings[$assocName]['joinColumns'][0]['name'] == $columnName) { + + return $assocName; + } + } + + throw MappingException::noFieldNameFoundForColumn($this->name, $columnName); + } + + /** + * Sets the ID generator used to generate IDs for instances of this class. + * + * @param \Doctrine\ORM\Id\AbstractIdGenerator $generator + * + * @return void + */ + public function setIdGenerator($generator) + { + $this->idGenerator = $generator; + } + + /** + * Sets definition. + * + * @param array $definition + * + * @return void + */ + public function setCustomGeneratorDefinition(array $definition) + { + $this->customGeneratorDefinition = $definition; + } + + /** + * Sets the definition of the sequence ID generator for this class. + * + * The definition must have the following structure: + * + * array( + * 'sequenceName' => 'name', + * 'allocationSize' => 20, + * 'initialValue' => 1 + * 'quoted' => 1 + * ) + * + * + * @param array $definition + * + * @return void + * + * @throws MappingException + */ + public function setSequenceGeneratorDefinition(array $definition) + { + if ( ! isset($definition['sequenceName'])) { + throw MappingException::missingSequenceName($this->name); + } + + if ($definition['sequenceName'][0] == '`') { + $definition['sequenceName'] = trim($definition['sequenceName'], '`'); + $definition['quoted'] = true; + } + + $this->sequenceGeneratorDefinition = $definition; + } + + /** + * Sets the version field mapping used for versioning. Sets the default + * value to use depending on the column type. + * + * @param array $mapping The version field mapping array. + * + * @return void + * + * @throws MappingException + */ + public function setVersionMapping(array &$mapping) + { + $this->isVersioned = true; + $this->versionField = $mapping['fieldName']; + + if ( ! isset($mapping['default'])) { + if (in_array($mapping['type'], ['integer', 'bigint', 'smallint'])) { + $mapping['default'] = 1; + } else if ($mapping['type'] == 'datetime') { + $mapping['default'] = 'CURRENT_TIMESTAMP'; + } else { + throw MappingException::unsupportedOptimisticLockingType($this->name, $mapping['fieldName'], $mapping['type']); + } + } + } + + /** + * Sets whether this class is to be versioned for optimistic locking. + * + * @param boolean $bool + * + * @return void + */ + public function setVersioned($bool) + { + $this->isVersioned = $bool; + } + + /** + * Sets the name of the field that is to be used for versioning if this class is + * versioned for optimistic locking. + * + * @param string $versionField + * + * @return void + */ + public function setVersionField($versionField) + { + $this->versionField = $versionField; + } + + /** + * Marks this class as read only, no change tracking is applied to it. + * + * @return void + */ + public function markReadOnly() + { + $this->isReadOnly = true; + } + + /** + * {@inheritDoc} + */ + public function getFieldNames() + { + return array_keys($this->fieldMappings); + } + + /** + * {@inheritDoc} + */ + public function getAssociationNames() + { + return array_keys($this->associationMappings); + } + + /** + * {@inheritDoc} + * + * @throws InvalidArgumentException + */ + public function getAssociationTargetClass($assocName) + { + if ( ! isset($this->associationMappings[$assocName])) { + throw new InvalidArgumentException("Association name expected, '" . $assocName ."' is not an association."); + } + + return $this->associationMappings[$assocName]['targetEntity']; + } + + /** + * {@inheritDoc} + */ + public function getName() + { + return $this->name; + } + + /** + * Gets the (possibly quoted) identifier column names for safe use in an SQL statement. + * + * @deprecated Deprecated since version 2.3 in favor of \Doctrine\ORM\Mapping\QuoteStrategy + * + * @param \Doctrine\DBAL\Platforms\AbstractPlatform $platform + * + * @return array + */ + public function getQuotedIdentifierColumnNames($platform) + { + $quotedColumnNames = []; + + foreach ($this->identifier as $idProperty) { + if (isset($this->fieldMappings[$idProperty])) { + $quotedColumnNames[] = isset($this->fieldMappings[$idProperty]['quoted']) + ? $platform->quoteIdentifier($this->fieldMappings[$idProperty]['columnName']) + : $this->fieldMappings[$idProperty]['columnName']; + + continue; + } + + // Association defined as Id field + $joinColumns = $this->associationMappings[$idProperty]['joinColumns']; + $assocQuotedColumnNames = array_map( + function ($joinColumn) use ($platform) { + return isset($joinColumn['quoted']) + ? $platform->quoteIdentifier($joinColumn['name']) + : $joinColumn['name']; + }, + $joinColumns + ); + + $quotedColumnNames = array_merge($quotedColumnNames, $assocQuotedColumnNames); + } + + return $quotedColumnNames; + } + + /** + * Gets the (possibly quoted) column name of a mapped field for safe use in an SQL statement. + * + * @deprecated Deprecated since version 2.3 in favor of \Doctrine\ORM\Mapping\QuoteStrategy + * + * @param string $field + * @param \Doctrine\DBAL\Platforms\AbstractPlatform $platform + * + * @return string + */ + public function getQuotedColumnName($field, $platform) + { + return isset($this->fieldMappings[$field]['quoted']) + ? $platform->quoteIdentifier($this->fieldMappings[$field]['columnName']) + : $this->fieldMappings[$field]['columnName']; + } + + /** + * Gets the (possibly quoted) primary table name of this class for safe use in an SQL statement. + * + * @deprecated Deprecated since version 2.3 in favor of \Doctrine\ORM\Mapping\QuoteStrategy + * + * @param \Doctrine\DBAL\Platforms\AbstractPlatform $platform + * + * @return string + */ + public function getQuotedTableName($platform) + { + return isset($this->table['quoted']) + ? $platform->quoteIdentifier($this->table['name']) + : $this->table['name']; + } + + /** + * Gets the (possibly quoted) name of the join table. + * + * @deprecated Deprecated since version 2.3 in favor of \Doctrine\ORM\Mapping\QuoteStrategy + * + * @param array $assoc + * @param \Doctrine\DBAL\Platforms\AbstractPlatform $platform + * + * @return string + */ + public function getQuotedJoinTableName(array $assoc, $platform) + { + return isset($assoc['joinTable']['quoted']) + ? $platform->quoteIdentifier($assoc['joinTable']['name']) + : $assoc['joinTable']['name']; + } + + /** + * {@inheritDoc} + */ + public function isAssociationInverseSide($fieldName) + { + return isset($this->associationMappings[$fieldName]) + && ! $this->associationMappings[$fieldName]['isOwningSide']; + } + + /** + * {@inheritDoc} + */ + public function getAssociationMappedByTargetField($fieldName) + { + return $this->associationMappings[$fieldName]['mappedBy']; + } + + /** + * @param string $targetClass + * + * @return array + */ + public function getAssociationsByTargetClass($targetClass) + { + $relations = []; + + foreach ($this->associationMappings as $mapping) { + if ($mapping['targetEntity'] == $targetClass) { + $relations[$mapping['fieldName']] = $mapping; + } + } + + return $relations; + } + + /** + * @param string|null $className + * + * @return string|null null if the input value is null + */ + public function fullyQualifiedClassName($className) + { + if (empty($className)) { + return $className; + } + + if ($className !== null && strpos($className, '\\') === false && $this->namespace) { + return $this->namespace . '\\' . $className; + } + + return $className; + } + + /** + * @param string $name + * + * @return mixed + */ + public function getMetadataValue($name) + { + + if (isset($this->$name)) { + return $this->$name; + } + + return null; + } + + /** + * Map Embedded Class + * + * @param array $mapping + * + * @throws MappingException + * @return void + */ + public function mapEmbedded(array $mapping) + { + $this->assertFieldNotMapped($mapping['fieldName']); + + $this->embeddedClasses[$mapping['fieldName']] = [ + 'class' => $this->fullyQualifiedClassName($mapping['class']), + 'columnPrefix' => $mapping['columnPrefix'], + 'declaredField' => isset($mapping['declaredField']) ? $mapping['declaredField'] : null, + 'originalField' => isset($mapping['originalField']) ? $mapping['originalField'] : null, + ]; + } + + /** + * Inline the embeddable class + * + * @param string $property + * @param ClassMetadata $embeddable + */ + public function inlineEmbeddable($property, ClassMetadata $embeddable) + { + foreach ($embeddable->fieldMappings as $fieldMapping) { + $fieldMapping['originalClass'] = isset($fieldMapping['originalClass']) + ? $fieldMapping['originalClass'] + : $embeddable->name; + $fieldMapping['declaredField'] = isset($fieldMapping['declaredField']) + ? $property . '.' . $fieldMapping['declaredField'] + : $property; + $fieldMapping['originalField'] = isset($fieldMapping['originalField']) + ? $fieldMapping['originalField'] + : $fieldMapping['fieldName']; + $fieldMapping['fieldName'] = $property . "." . $fieldMapping['fieldName']; + + if (! empty($this->embeddedClasses[$property]['columnPrefix'])) { + $fieldMapping['columnName'] = $this->embeddedClasses[$property]['columnPrefix'] . $fieldMapping['columnName']; + } elseif ($this->embeddedClasses[$property]['columnPrefix'] !== false) { + $fieldMapping['columnName'] = $this->namingStrategy + ->embeddedFieldToColumnName( + $property, + $fieldMapping['columnName'], + $this->reflClass->name, + $embeddable->reflClass->name + ); + } + + $this->mapField($fieldMapping); + } + } + + /** + * @param string $fieldName + * @throws MappingException + */ + private function assertFieldNotMapped($fieldName) + { + if (isset($this->fieldMappings[$fieldName]) || + isset($this->associationMappings[$fieldName]) || + isset($this->embeddedClasses[$fieldName])) { + + throw MappingException::duplicateFieldMapping($this->name, $fieldName); + } + } + + /** + * Gets the sequence name based on class metadata. + * + * @param AbstractPlatform $platform + * @return string + * + * @todo Sequence names should be computed in DBAL depending on the platform + */ + public function getSequenceName(AbstractPlatform $platform) + { + $sequencePrefix = $this->getSequencePrefix($platform); + $columnName = $this->getSingleIdentifierColumnName(); + $sequenceName = $sequencePrefix . '_' . $columnName . '_seq'; + + return $sequenceName; + } + + /** + * Gets the sequence name prefix based on class metadata. + * + * @param AbstractPlatform $platform + * @return string + * + * @todo Sequence names should be computed in DBAL depending on the platform + */ + public function getSequencePrefix(AbstractPlatform $platform) + { + $tableName = $this->getTableName(); + $sequencePrefix = $tableName; + + // Prepend the schema name to the table name if there is one + if ($schemaName = $this->getSchemaName()) { + $sequencePrefix = $schemaName . '.' . $tableName; + + if ( ! $platform->supportsSchemas() && $platform->canEmulateSchemas()) { + $sequencePrefix = $schemaName . '__' . $tableName; + } + } + + return $sequencePrefix; + } + + /** + * @param array $mapping + */ + private function assertMappingOrderBy(array $mapping) + { + if (isset($mapping['orderBy']) && !is_array($mapping['orderBy'])) { + throw new InvalidArgumentException("'orderBy' is expected to be an array, not " . gettype($mapping['orderBy'])); + } + } } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index a1412d2f1ad..634e3ec95cc 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -606,13 +606,13 @@ private function addInheritedSqlResultSetMappings(ClassMetadata $subClass, Class * Completes the ID generator mapping. If "auto" is specified we choose the generator * most appropriate for the targeted database platform. * - * @param ClassMetadataInfo $class + * @param ClassMetadata $class * * @return void * * @throws ORMException */ - private function completeIdGeneratorMapping(ClassMetadataInfo $class) + private function completeIdGeneratorMapping(ClassMetadata $class) { $idGenType = $class->generatorType; if ($idGenType == ClassMetadata::GENERATOR_TYPE_AUTO) { @@ -718,10 +718,10 @@ private function completeIdGeneratorMapping(ClassMetadataInfo $class) /** * Inherits the ID generator mapping from a parent class. * - * @param ClassMetadataInfo $class - * @param ClassMetadataInfo $parent + * @param ClassMetadata $class + * @param ClassMetadata $parent */ - private function inheritIdGeneratorMapping(ClassMetadataInfo $class, ClassMetadataInfo $parent) + private function inheritIdGeneratorMapping(ClassMetadata $class, ClassMetadata $parent) { if ($parent->isIdGeneratorSequence()) { $class->setSequenceGeneratorDefinition($parent->sequenceGeneratorDefinition); diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php deleted file mode 100644 index b5eebcdde2c..00000000000 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php +++ /dev/null @@ -1,3397 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping; - -use BadMethodCallException; -use Doctrine\Instantiator\Instantiator; -use InvalidArgumentException; -use RuntimeException; -use Doctrine\DBAL\Types\Type; -use Doctrine\DBAL\Platforms\AbstractPlatform; -use ReflectionClass; -use Doctrine\Common\Persistence\Mapping\ClassMetadata; -use Doctrine\Common\ClassLoader; -use Doctrine\ORM\Cache\CacheException; - -/** - * A ClassMetadata instance holds all the object-relational mapping metadata - * of an entity and its associations. - * - * Once populated, ClassMetadata instances are usually cached in a serialized form. - * - * IMPORTANT NOTE: - * - * The fields of this class are only public for 2 reasons: - * 1) To allow fast READ access. - * 2) To drastically reduce the size of a serialized instance (private/protected members - * get the whole class name, namespace inclusive, prepended to every property in - * the serialized representation). - * - * @author Roman Borschel - * @author Jonathan H. Wage - * @since 2.0 - */ -class ClassMetadataInfo implements ClassMetadata -{ - /* The inheritance mapping types */ - /** - * NONE means the class does not participate in an inheritance hierarchy - * and therefore does not need an inheritance mapping type. - */ - const INHERITANCE_TYPE_NONE = 1; - - /** - * JOINED means the class will be persisted according to the rules of - * Class Table Inheritance. - */ - const INHERITANCE_TYPE_JOINED = 2; - - /** - * SINGLE_TABLE means the class will be persisted according to the rules of - * Single Table Inheritance. - */ - const INHERITANCE_TYPE_SINGLE_TABLE = 3; - - /** - * TABLE_PER_CLASS means the class will be persisted according to the rules - * of Concrete Table Inheritance. - */ - const INHERITANCE_TYPE_TABLE_PER_CLASS = 4; - - /* The Id generator types. */ - /** - * AUTO means the generator type will depend on what the used platform prefers. - * Offers full portability. - */ - const GENERATOR_TYPE_AUTO = 1; - - /** - * SEQUENCE means a separate sequence object will be used. Platforms that do - * not have native sequence support may emulate it. Full portability is currently - * not guaranteed. - */ - const GENERATOR_TYPE_SEQUENCE = 2; - - /** - * TABLE means a separate table is used for id generation. - * Offers full portability. - */ - const GENERATOR_TYPE_TABLE = 3; - - /** - * IDENTITY means an identity column is used for id generation. The database - * will fill in the id column on insertion. Platforms that do not support - * native identity columns may emulate them. Full portability is currently - * not guaranteed. - */ - const GENERATOR_TYPE_IDENTITY = 4; - - /** - * NONE means the class does not have a generated id. That means the class - * must have a natural, manually assigned id. - */ - const GENERATOR_TYPE_NONE = 5; - - /** - * UUID means that a UUID/GUID expression is used for id generation. Full - * portability is currently not guaranteed. - */ - const GENERATOR_TYPE_UUID = 6; - - /** - * CUSTOM means that customer will use own ID generator that supposedly work - */ - const GENERATOR_TYPE_CUSTOM = 7; - - /** - * DEFERRED_IMPLICIT means that changes of entities are calculated at commit-time - * by doing a property-by-property comparison with the original data. This will - * be done for all entities that are in MANAGED state at commit-time. - * - * This is the default change tracking policy. - */ - const CHANGETRACKING_DEFERRED_IMPLICIT = 1; - - /** - * DEFERRED_EXPLICIT means that changes of entities are calculated at commit-time - * by doing a property-by-property comparison with the original data. This will - * be done only for entities that were explicitly saved (through persist() or a cascade). - */ - const CHANGETRACKING_DEFERRED_EXPLICIT = 2; - - /** - * NOTIFY means that Doctrine relies on the entities sending out notifications - * when their properties change. Such entity classes must implement - * the NotifyPropertyChanged interface. - */ - const CHANGETRACKING_NOTIFY = 3; - - /** - * Specifies that an association is to be fetched when it is first accessed. - */ - const FETCH_LAZY = 2; - - /** - * Specifies that an association is to be fetched when the owner of the - * association is fetched. - */ - const FETCH_EAGER = 3; - - /** - * Specifies that an association is to be fetched lazy (on first access) and that - * commands such as Collection#count, Collection#slice are issued directly against - * the database if the collection is not yet initialized. - */ - const FETCH_EXTRA_LAZY = 4; - - /** - * Identifies a one-to-one association. - */ - const ONE_TO_ONE = 1; - - /** - * Identifies a many-to-one association. - */ - const MANY_TO_ONE = 2; - - /** - * Identifies a one-to-many association. - */ - const ONE_TO_MANY = 4; - - /** - * Identifies a many-to-many association. - */ - const MANY_TO_MANY = 8; - - /** - * Combined bitmask for to-one (single-valued) associations. - */ - const TO_ONE = 3; - - /** - * Combined bitmask for to-many (collection-valued) associations. - */ - const TO_MANY = 12; - - /** - * ReadOnly cache can do reads, inserts and deletes, cannot perform updates or employ any locks, - */ - const CACHE_USAGE_READ_ONLY = 1; - - /** - * Nonstrict Read Write Cache doesn’t employ any locks but can do inserts, update and deletes. - */ - const CACHE_USAGE_NONSTRICT_READ_WRITE = 2; - - /** - * Read Write Attempts to lock the entity before update/delete. - */ - const CACHE_USAGE_READ_WRITE = 3; - - /** - * READ-ONLY: The name of the entity class. - * - * @var string - */ - public $name; - - /** - * READ-ONLY: The namespace the entity class is contained in. - * - * @var string - * - * @todo Not really needed. Usage could be localized. - */ - public $namespace; - - /** - * READ-ONLY: The name of the entity class that is at the root of the mapped entity inheritance - * hierarchy. If the entity is not part of a mapped inheritance hierarchy this is the same - * as {@link $name}. - * - * @var string - */ - public $rootEntityName; - - /** - * READ-ONLY: The definition of custom generator. Only used for CUSTOM - * generator type - * - * The definition has the following structure: - * - * array( - * 'class' => 'ClassName', - * ) - * - * - * @var array - * - * @todo Merge with tableGeneratorDefinition into generic generatorDefinition - */ - public $customGeneratorDefinition; - - /** - * The name of the custom repository class used for the entity class. - * (Optional). - * - * @var string - */ - public $customRepositoryClassName; - - /** - * READ-ONLY: Whether this class describes the mapping of a mapped superclass. - * - * @var boolean - */ - public $isMappedSuperclass = false; - - /** - * READ-ONLY: Whether this class describes the mapping of an embeddable class. - * - * @var boolean - */ - public $isEmbeddedClass = false; - - /** - * READ-ONLY: The names of the parent classes (ancestors). - * - * @var array - */ - public $parentClasses = []; - - /** - * READ-ONLY: The names of all subclasses (descendants). - * - * @var array - */ - public $subClasses = []; - - /** - * READ-ONLY: The names of all embedded classes based on properties. - * - * @var array - */ - public $embeddedClasses = []; - - /** - * READ-ONLY: The named queries allowed to be called directly from Repository. - * - * @var array - */ - public $namedQueries = []; - - /** - * READ-ONLY: The named native queries allowed to be called directly from Repository. - * - * A native SQL named query definition has the following structure: - *
-     * array(
-     *     'name'               => ,
-     *     'query'              => ,
-     *     'resultClass'        => ,
-     *     'resultSetMapping'   => 
-     * )
-     * 
- * - * @var array - */ - public $namedNativeQueries = []; - - /** - * READ-ONLY: The mappings of the results of native SQL queries. - * - * A native result mapping definition has the following structure: - *
-     * array(
-     *     'name'               => ,
-     *     'entities'           => array(),
-     *     'columns'            => array()
-     * )
-     * 
- * - * @var array - */ - public $sqlResultSetMappings = []; - - /** - * READ-ONLY: The field names of all fields that are part of the identifier/primary key - * of the mapped entity class. - * - * @var array - */ - public $identifier = []; - - /** - * READ-ONLY: The inheritance mapping type used by the class. - * - * @var integer - */ - public $inheritanceType = self::INHERITANCE_TYPE_NONE; - - /** - * READ-ONLY: The Id generator type used by the class. - * - * @var int - */ - public $generatorType = self::GENERATOR_TYPE_NONE; - - /** - * READ-ONLY: The field mappings of the class. - * Keys are field names and values are mapping definitions. - * - * The mapping definition array has the following values: - * - * - fieldName (string) - * The name of the field in the Entity. - * - * - type (string) - * The type name of the mapped field. Can be one of Doctrine's mapping types - * or a custom mapping type. - * - * - columnName (string, optional) - * The column name. Optional. Defaults to the field name. - * - * - length (integer, optional) - * The database length of the column. Optional. Default value taken from - * the type. - * - * - id (boolean, optional) - * Marks the field as the primary key of the entity. Multiple fields of an - * entity can have the id attribute, forming a composite key. - * - * - nullable (boolean, optional) - * Whether the column is nullable. Defaults to FALSE. - * - * - columnDefinition (string, optional, schema-only) - * The SQL fragment that is used when generating the DDL for the column. - * - * - precision (integer, optional, schema-only) - * The precision of a decimal column. Only valid if the column type is decimal. - * - * - scale (integer, optional, schema-only) - * The scale of a decimal column. Only valid if the column type is decimal. - * - * - 'unique' (string, optional, schema-only) - * Whether a unique constraint should be generated for the column. - * - * @var array - */ - public $fieldMappings = []; - - /** - * READ-ONLY: An array of field names. Used to look up field names from column names. - * Keys are column names and values are field names. - * - * @var array - */ - public $fieldNames = []; - - /** - * READ-ONLY: A map of field names to column names. Keys are field names and values column names. - * Used to look up column names from field names. - * This is the reverse lookup map of $_fieldNames. - * - * @var array - * - * @deprecated 3.0 Remove this. - */ - public $columnNames = []; - - /** - * READ-ONLY: The discriminator value of this class. - * - * This does only apply to the JOINED and SINGLE_TABLE inheritance mapping strategies - * where a discriminator column is used. - * - * @var mixed - * - * @see discriminatorColumn - */ - public $discriminatorValue; - - /** - * READ-ONLY: The discriminator map of all mapped classes in the hierarchy. - * - * This does only apply to the JOINED and SINGLE_TABLE inheritance mapping strategies - * where a discriminator column is used. - * - * @var mixed - * - * @see discriminatorColumn - */ - public $discriminatorMap = []; - - /** - * READ-ONLY: The definition of the discriminator column used in JOINED and SINGLE_TABLE - * inheritance mappings. - * - * @var array - */ - public $discriminatorColumn; - - /** - * READ-ONLY: The primary table definition. The definition is an array with the - * following entries: - * - * name => - * schema => - * indexes => array - * uniqueConstraints => array - * - * @var array - */ - public $table; - - /** - * READ-ONLY: The registered lifecycle callbacks for entities of this class. - * - * @var array[] - */ - public $lifecycleCallbacks = []; - - /** - * READ-ONLY: The registered entity listeners. - * - * @var array - */ - public $entityListeners = []; - - /** - * READ-ONLY: The association mappings of this class. - * - * The mapping definition array supports the following keys: - * - * - fieldName (string) - * The name of the field in the entity the association is mapped to. - * - * - targetEntity (string) - * The class name of the target entity. If it is fully-qualified it is used as is. - * If it is a simple, unqualified class name the namespace is assumed to be the same - * as the namespace of the source entity. - * - * - mappedBy (string, required for bidirectional associations) - * The name of the field that completes the bidirectional association on the owning side. - * This key must be specified on the inverse side of a bidirectional association. - * - * - inversedBy (string, required for bidirectional associations) - * The name of the field that completes the bidirectional association on the inverse side. - * This key must be specified on the owning side of a bidirectional association. - * - * - cascade (array, optional) - * The names of persistence operations to cascade on the association. The set of possible - * values are: "persist", "remove", "detach", "merge", "refresh", "all" (implies all others). - * - * - orderBy (array, one-to-many/many-to-many only) - * A map of field names (of the target entity) to sorting directions (ASC/DESC). - * Example: array('priority' => 'desc') - * - * - fetch (integer, optional) - * The fetching strategy to use for the association, usually defaults to FETCH_LAZY. - * Possible values are: ClassMetadata::FETCH_EAGER, ClassMetadata::FETCH_LAZY. - * - * - joinTable (array, optional, many-to-many only) - * Specification of the join table and its join columns (foreign keys). - * Only valid for many-to-many mappings. Note that one-to-many associations can be mapped - * through a join table by simply mapping the association as many-to-many with a unique - * constraint on the join table. - * - * - indexBy (string, optional, to-many only) - * Specification of a field on target-entity that is used to index the collection by. - * This field HAS to be either the primary key or a unique column. Otherwise the collection - * does not contain all the entities that are actually related. - * - * A join table definition has the following structure: - *
-     * array(
-     *     'name' => ,
-     *      'joinColumns' => array(),
-     *      'inverseJoinColumns' => array()
-     * )
-     * 
- * - * @var array - */ - public $associationMappings = []; - - /** - * READ-ONLY: Flag indicating whether the identifier/primary key of the class is composite. - * - * @var boolean - */ - public $isIdentifierComposite = false; - - /** - * READ-ONLY: Flag indicating whether the identifier/primary key contains at least one foreign key association. - * - * This flag is necessary because some code blocks require special treatment of this cases. - * - * @var boolean - */ - public $containsForeignIdentifier = false; - - /** - * READ-ONLY: The ID generator used for generating IDs for this class. - * - * @var \Doctrine\ORM\Id\AbstractIdGenerator - * - * @todo Remove! - */ - public $idGenerator; - - /** - * READ-ONLY: The definition of the sequence generator of this class. Only used for the - * SEQUENCE generation strategy. - * - * The definition has the following structure: - * - * array( - * 'sequenceName' => 'name', - * 'allocationSize' => 20, - * 'initialValue' => 1 - * ) - * - * - * @var array - * - * @todo Merge with tableGeneratorDefinition into generic generatorDefinition - */ - public $sequenceGeneratorDefinition; - - /** - * READ-ONLY: The definition of the table generator of this class. Only used for the - * TABLE generation strategy. - * - * @var array - * - * @todo Merge with tableGeneratorDefinition into generic generatorDefinition - */ - public $tableGeneratorDefinition; - - /** - * READ-ONLY: The policy used for change-tracking on entities of this class. - * - * @var integer - */ - public $changeTrackingPolicy = self::CHANGETRACKING_DEFERRED_IMPLICIT; - - /** - * READ-ONLY: A flag for whether or not instances of this class are to be versioned - * with optimistic locking. - * - * @var boolean - */ - public $isVersioned; - - /** - * READ-ONLY: The name of the field which is used for versioning in optimistic locking (if any). - * - * @var mixed - */ - public $versionField; - - /** - * @var array - */ - public $cache = null; - - /** - * The ReflectionClass instance of the mapped class. - * - * @var ReflectionClass - */ - public $reflClass; - - /** - * Is this entity marked as "read-only"? - * - * That means it is never considered for change-tracking in the UnitOfWork. It is a very helpful performance - * optimization for entities that are immutable, either in your domain or through the relation database - * (coming from a view, or a history table for example). - * - * @var bool - */ - public $isReadOnly = false; - - /** - * NamingStrategy determining the default column and table names. - * - * @var \Doctrine\ORM\Mapping\NamingStrategy - */ - protected $namingStrategy; - - /** - * The ReflectionProperty instances of the mapped class. - * - * @var \ReflectionProperty[] - */ - public $reflFields = []; - - /** - * @var \Doctrine\Instantiator\InstantiatorInterface|null - */ - private $instantiator; - - /** - * Initializes a new ClassMetadata instance that will hold the object-relational mapping - * metadata of the class with the given name. - * - * @param string $entityName The name of the entity class the new instance is used for. - * @param NamingStrategy|null $namingStrategy - */ - public function __construct($entityName, NamingStrategy $namingStrategy = null) - { - $this->name = $entityName; - $this->rootEntityName = $entityName; - $this->namingStrategy = $namingStrategy ?: new DefaultNamingStrategy(); - $this->instantiator = new Instantiator(); - } - - /** - * Gets the ReflectionProperties of the mapped class. - * - * @return array An array of ReflectionProperty instances. - */ - public function getReflectionProperties() - { - return $this->reflFields; - } - - /** - * Gets a ReflectionProperty for a specific field of the mapped class. - * - * @param string $name - * - * @return \ReflectionProperty - */ - public function getReflectionProperty($name) - { - return $this->reflFields[$name]; - } - - /** - * Gets the ReflectionProperty for the single identifier field. - * - * @return \ReflectionProperty - * - * @throws BadMethodCallException If the class has a composite identifier. - */ - public function getSingleIdReflectionProperty() - { - if ($this->isIdentifierComposite) { - throw new BadMethodCallException("Class " . $this->name . " has a composite identifier."); - } - - return $this->reflFields[$this->identifier[0]]; - } - - /** - * Extracts the identifier values of an entity of this class. - * - * For composite identifiers, the identifier values are returned as an array - * with the same order as the field order in {@link identifier}. - * - * @param object $entity - * - * @return array - */ - public function getIdentifierValues($entity) - { - if ($this->isIdentifierComposite) { - $id = []; - - foreach ($this->identifier as $idField) { - $value = $this->reflFields[$idField]->getValue($entity); - - if (null !== $value) { - $id[$idField] = $value; - } - } - - return $id; - } - - $id = $this->identifier[0]; - $value = $this->reflFields[$id]->getValue($entity); - - if (null === $value) { - return []; - } - - return [$id => $value]; - } - - /** - * Populates the entity identifier of an entity. - * - * @param object $entity - * @param array $id - * - * @return void - * - * @todo Rename to assignIdentifier() - */ - public function setIdentifierValues($entity, array $id) - { - foreach ($id as $idField => $idValue) { - $this->reflFields[$idField]->setValue($entity, $idValue); - } - } - - /** - * Sets the specified field to the specified value on the given entity. - * - * @param object $entity - * @param string $field - * @param mixed $value - * - * @return void - */ - public function setFieldValue($entity, $field, $value) - { - $this->reflFields[$field]->setValue($entity, $value); - } - - /** - * Gets the specified field's value off the given entity. - * - * @param object $entity - * @param string $field - * - * @return mixed - */ - public function getFieldValue($entity, $field) - { - return $this->reflFields[$field]->getValue($entity); - } - - /** - * Creates a string representation of this instance. - * - * @return string The string representation of this instance. - * - * @todo Construct meaningful string representation. - */ - public function __toString() - { - return __CLASS__ . '@' . spl_object_hash($this); - } - - /** - * Determines which fields get serialized. - * - * It is only serialized what is necessary for best unserialization performance. - * That means any metadata properties that are not set or empty or simply have - * their default value are NOT serialized. - * - * Parts that are also NOT serialized because they can not be properly unserialized: - * - reflClass (ReflectionClass) - * - reflFields (ReflectionProperty array) - * - * @return array The names of all the fields that should be serialized. - */ - public function __sleep() - { - // This metadata is always serialized/cached. - $serialized = [ - 'associationMappings', - 'columnNames', //TODO: 3.0 Remove this. Can use fieldMappings[$fieldName]['columnName'] - 'fieldMappings', - 'fieldNames', - 'embeddedClasses', - 'identifier', - 'isIdentifierComposite', // TODO: REMOVE - 'name', - 'namespace', // TODO: REMOVE - 'table', - 'rootEntityName', - 'idGenerator', //TODO: Does not really need to be serialized. Could be moved to runtime. - ]; - - // The rest of the metadata is only serialized if necessary. - if ($this->changeTrackingPolicy != self::CHANGETRACKING_DEFERRED_IMPLICIT) { - $serialized[] = 'changeTrackingPolicy'; - } - - if ($this->customRepositoryClassName) { - $serialized[] = 'customRepositoryClassName'; - } - - if ($this->inheritanceType != self::INHERITANCE_TYPE_NONE) { - $serialized[] = 'inheritanceType'; - $serialized[] = 'discriminatorColumn'; - $serialized[] = 'discriminatorValue'; - $serialized[] = 'discriminatorMap'; - $serialized[] = 'parentClasses'; - $serialized[] = 'subClasses'; - } - - if ($this->generatorType != self::GENERATOR_TYPE_NONE) { - $serialized[] = 'generatorType'; - if ($this->generatorType == self::GENERATOR_TYPE_SEQUENCE) { - $serialized[] = 'sequenceGeneratorDefinition'; - } - } - - if ($this->isMappedSuperclass) { - $serialized[] = 'isMappedSuperclass'; - } - - if ($this->isEmbeddedClass) { - $serialized[] = 'isEmbeddedClass'; - } - - if ($this->containsForeignIdentifier) { - $serialized[] = 'containsForeignIdentifier'; - } - - if ($this->isVersioned) { - $serialized[] = 'isVersioned'; - $serialized[] = 'versionField'; - } - - if ($this->lifecycleCallbacks) { - $serialized[] = 'lifecycleCallbacks'; - } - - if ($this->entityListeners) { - $serialized[] = 'entityListeners'; - } - - if ($this->namedQueries) { - $serialized[] = 'namedQueries'; - } - - if ($this->namedNativeQueries) { - $serialized[] = 'namedNativeQueries'; - } - - if ($this->sqlResultSetMappings) { - $serialized[] = 'sqlResultSetMappings'; - } - - if ($this->isReadOnly) { - $serialized[] = 'isReadOnly'; - } - - if ($this->customGeneratorDefinition) { - $serialized[] = "customGeneratorDefinition"; - } - - if ($this->cache) { - $serialized[] = 'cache'; - } - - return $serialized; - } - - /** - * Creates a new instance of the mapped class, without invoking the constructor. - * - * @return object - */ - public function newInstance() - { - return $this->instantiator->instantiate($this->name); - } - - /** - * Restores some state that can not be serialized/unserialized. - * - * @param \Doctrine\Common\Persistence\Mapping\ReflectionService $reflService - * - * @return void - */ - public function wakeupReflection($reflService) - { - // Restore ReflectionClass and properties - $this->reflClass = $reflService->getClass($this->name); - $this->instantiator = $this->instantiator ?: new Instantiator(); - - $parentReflFields = []; - - foreach ($this->embeddedClasses as $property => $embeddedClass) { - if (isset($embeddedClass['declaredField'])) { - $parentReflFields[$property] = new ReflectionEmbeddedProperty( - $parentReflFields[$embeddedClass['declaredField']], - $reflService->getAccessibleProperty( - $this->embeddedClasses[$embeddedClass['declaredField']]['class'], - $embeddedClass['originalField'] - ), - $this->embeddedClasses[$embeddedClass['declaredField']]['class'] - ); - - continue; - } - - $fieldRefl = $reflService->getAccessibleProperty( - isset($embeddedClass['declared']) ? $embeddedClass['declared'] : $this->name, - $property - ); - - $parentReflFields[$property] = $fieldRefl; - $this->reflFields[$property] = $fieldRefl; - } - - foreach ($this->fieldMappings as $field => $mapping) { - if (isset($mapping['declaredField']) && isset($parentReflFields[$mapping['declaredField']])) { - $this->reflFields[$field] = new ReflectionEmbeddedProperty( - $parentReflFields[$mapping['declaredField']], - $reflService->getAccessibleProperty($mapping['originalClass'], $mapping['originalField']), - $mapping['originalClass'] - ); - continue; - } - - $this->reflFields[$field] = isset($mapping['declared']) - ? $reflService->getAccessibleProperty($mapping['declared'], $field) - : $reflService->getAccessibleProperty($this->name, $field); - } - - foreach ($this->associationMappings as $field => $mapping) { - $this->reflFields[$field] = isset($mapping['declared']) - ? $reflService->getAccessibleProperty($mapping['declared'], $field) - : $reflService->getAccessibleProperty($this->name, $field); - } - } - - /** - * Initializes a new ClassMetadata instance that will hold the object-relational mapping - * metadata of the class with the given name. - * - * @param \Doctrine\Common\Persistence\Mapping\ReflectionService $reflService The reflection service. - * - * @return void - */ - public function initializeReflection($reflService) - { - $this->reflClass = $reflService->getClass($this->name); - $this->namespace = $reflService->getClassNamespace($this->name); - - if ($this->reflClass) { - $this->name = $this->rootEntityName = $this->reflClass->getName(); - } - - $this->table['name'] = $this->namingStrategy->classToTableName($this->name); - } - - /** - * Validates Identifier. - * - * @return void - * - * @throws MappingException - */ - public function validateIdentifier() - { - if ($this->isMappedSuperclass || $this->isEmbeddedClass) { - return; - } - - // Verify & complete identifier mapping - if ( ! $this->identifier) { - throw MappingException::identifierRequired($this->name); - } - - if ($this->usesIdGenerator() && $this->isIdentifierComposite) { - throw MappingException::compositeKeyAssignedIdGeneratorRequired($this->name); - } - } - - /** - * Validates association targets actually exist. - * - * @return void - * - * @throws MappingException - */ - public function validateAssociations() - { - foreach ($this->associationMappings as $mapping) { - if ( ! ClassLoader::classExists($mapping['targetEntity']) ) { - throw MappingException::invalidTargetEntityClass($mapping['targetEntity'], $this->name, $mapping['fieldName']); - } - } - } - - /** - * Validates lifecycle callbacks. - * - * @param \Doctrine\Common\Persistence\Mapping\ReflectionService $reflService - * - * @return void - * - * @throws MappingException - */ - public function validateLifecycleCallbacks($reflService) - { - foreach ($this->lifecycleCallbacks as $callbacks) { - foreach ($callbacks as $callbackFuncName) { - if ( ! $reflService->hasPublicMethod($this->name, $callbackFuncName)) { - throw MappingException::lifecycleCallbackMethodNotFound($this->name, $callbackFuncName); - } - } - } - } - - /** - * {@inheritDoc} - */ - public function getReflectionClass() - { - return $this->reflClass; - } - - /** - * @param array $cache - * - * @return void - */ - public function enableCache(array $cache) - { - if ( ! isset($cache['usage'])) { - $cache['usage'] = self::CACHE_USAGE_READ_ONLY; - } - - if ( ! isset($cache['region'])) { - $cache['region'] = strtolower(str_replace('\\', '_', $this->rootEntityName)); - } - - $this->cache = $cache; - } - - /** - * @param string $fieldName - * @param array $cache - * - * @return void - */ - public function enableAssociationCache($fieldName, array $cache) - { - $this->associationMappings[$fieldName]['cache'] = $this->getAssociationCacheDefaults($fieldName, $cache); - } - - /** - * @param string $fieldName - * @param array $cache - * - * @return array - */ - public function getAssociationCacheDefaults($fieldName, array $cache) - { - if ( ! isset($cache['usage'])) { - $cache['usage'] = isset($this->cache['usage']) - ? $this->cache['usage'] - : self::CACHE_USAGE_READ_ONLY; - } - - if ( ! isset($cache['region'])) { - $cache['region'] = strtolower(str_replace('\\', '_', $this->rootEntityName)) . '__' . $fieldName; - } - - return $cache; - } - - /** - * Sets the change tracking policy used by this class. - * - * @param integer $policy - * - * @return void - */ - public function setChangeTrackingPolicy($policy) - { - $this->changeTrackingPolicy = $policy; - } - - /** - * Whether the change tracking policy of this class is "deferred explicit". - * - * @return boolean - */ - public function isChangeTrackingDeferredExplicit() - { - return self::CHANGETRACKING_DEFERRED_EXPLICIT === $this->changeTrackingPolicy; - } - - /** - * Whether the change tracking policy of this class is "deferred implicit". - * - * @return boolean - */ - public function isChangeTrackingDeferredImplicit() - { - return self::CHANGETRACKING_DEFERRED_IMPLICIT === $this->changeTrackingPolicy; - } - - /** - * Whether the change tracking policy of this class is "notify". - * - * @return boolean - */ - public function isChangeTrackingNotify() - { - return self::CHANGETRACKING_NOTIFY === $this->changeTrackingPolicy; - } - - /** - * Checks whether a field is part of the identifier/primary key field(s). - * - * @param string $fieldName The field name. - * - * @return boolean TRUE if the field is part of the table identifier/primary key field(s), - * FALSE otherwise. - */ - public function isIdentifier($fieldName) - { - if ( ! $this->identifier) { - return false; - } - - if ( ! $this->isIdentifierComposite) { - return $fieldName === $this->identifier[0]; - } - - return in_array($fieldName, $this->identifier, true); - } - - /** - * Checks if the field is unique. - * - * @param string $fieldName The field name. - * - * @return boolean TRUE if the field is unique, FALSE otherwise. - */ - public function isUniqueField($fieldName) - { - $mapping = $this->getFieldMapping($fieldName); - - return false !== $mapping && isset($mapping['unique']) && $mapping['unique']; - } - - /** - * Checks if the field is not null. - * - * @param string $fieldName The field name. - * - * @return boolean TRUE if the field is not null, FALSE otherwise. - */ - public function isNullable($fieldName) - { - $mapping = $this->getFieldMapping($fieldName); - - return false !== $mapping && isset($mapping['nullable']) && $mapping['nullable']; - } - - /** - * Gets a column name for a field name. - * If the column name for the field cannot be found, the given field name - * is returned. - * - * @param string $fieldName The field name. - * - * @return string The column name. - */ - public function getColumnName($fieldName) - { - return isset($this->columnNames[$fieldName]) - ? $this->columnNames[$fieldName] - : $fieldName; - } - - /** - * Gets the mapping of a (regular) field that holds some data but not a - * reference to another object. - * - * @param string $fieldName The field name. - * - * @return array The field mapping. - * - * @throws MappingException - */ - public function getFieldMapping($fieldName) - { - if ( ! isset($this->fieldMappings[$fieldName])) { - throw MappingException::mappingNotFound($this->name, $fieldName); - } - - return $this->fieldMappings[$fieldName]; - } - - /** - * Gets the mapping of an association. - * - * @see ClassMetadataInfo::$associationMappings - * - * @param string $fieldName The field name that represents the association in - * the object model. - * - * @return array The mapping. - * - * @throws MappingException - */ - public function getAssociationMapping($fieldName) - { - if ( ! isset($this->associationMappings[$fieldName])) { - throw MappingException::mappingNotFound($this->name, $fieldName); - } - - return $this->associationMappings[$fieldName]; - } - - /** - * Gets all association mappings of the class. - * - * @return array - */ - public function getAssociationMappings() - { - return $this->associationMappings; - } - - /** - * Gets the field name for a column name. - * If no field name can be found the column name is returned. - * - * @param string $columnName The column name. - * - * @return string The column alias. - */ - public function getFieldName($columnName) - { - return isset($this->fieldNames[$columnName]) - ? $this->fieldNames[$columnName] - : $columnName; - } - - /** - * Gets the named query. - * - * @see ClassMetadataInfo::$namedQueries - * - * @param string $queryName The query name. - * - * @return string - * - * @throws MappingException - */ - public function getNamedQuery($queryName) - { - if ( ! isset($this->namedQueries[$queryName])) { - throw MappingException::queryNotFound($this->name, $queryName); - } - - return $this->namedQueries[$queryName]['dql']; - } - - /** - * Gets all named queries of the class. - * - * @return array - */ - public function getNamedQueries() - { - return $this->namedQueries; - } - - /** - * Gets the named native query. - * - * @see ClassMetadataInfo::$namedNativeQueries - * - * @param string $queryName The query name. - * - * @return array - * - * @throws MappingException - */ - public function getNamedNativeQuery($queryName) - { - if ( ! isset($this->namedNativeQueries[$queryName])) { - throw MappingException::queryNotFound($this->name, $queryName); - } - - return $this->namedNativeQueries[$queryName]; - } - - /** - * Gets all named native queries of the class. - * - * @return array - */ - public function getNamedNativeQueries() - { - return $this->namedNativeQueries; - } - - /** - * Gets the result set mapping. - * - * @see ClassMetadataInfo::$sqlResultSetMappings - * - * @param string $name The result set mapping name. - * - * @return array - * - * @throws MappingException - */ - public function getSqlResultSetMapping($name) - { - if ( ! isset($this->sqlResultSetMappings[$name])) { - throw MappingException::resultMappingNotFound($this->name, $name); - } - - return $this->sqlResultSetMappings[$name]; - } - - /** - * Gets all sql result set mappings of the class. - * - * @return array - */ - public function getSqlResultSetMappings() - { - return $this->sqlResultSetMappings; - } - - /** - * Validates & completes the given field mapping. - * - * @param array $mapping The field mapping to validate & complete. - * - * @return void - * - * @throws MappingException - */ - protected function _validateAndCompleteFieldMapping(array &$mapping) - { - // Check mandatory fields - if ( ! isset($mapping['fieldName']) || !$mapping['fieldName']) { - throw MappingException::missingFieldName($this->name); - } - - if ( ! isset($mapping['type'])) { - // Default to string - $mapping['type'] = 'string'; - } - - // Complete fieldName and columnName mapping - if ( ! isset($mapping['columnName'])) { - $mapping['columnName'] = $this->namingStrategy->propertyToColumnName($mapping['fieldName'], $this->name); - } - - if ('`' === $mapping['columnName'][0]) { - $mapping['columnName'] = trim($mapping['columnName'], '`'); - $mapping['quoted'] = true; - } - - $this->columnNames[$mapping['fieldName']] = $mapping['columnName']; - - if (isset($this->fieldNames[$mapping['columnName']]) || ($this->discriminatorColumn && $this->discriminatorColumn['name'] === $mapping['columnName'])) { - throw MappingException::duplicateColumnName($this->name, $mapping['columnName']); - } - - $this->fieldNames[$mapping['columnName']] = $mapping['fieldName']; - - // Complete id mapping - if (isset($mapping['id']) && true === $mapping['id']) { - if ($this->versionField == $mapping['fieldName']) { - throw MappingException::cannotVersionIdField($this->name, $mapping['fieldName']); - } - - if ( ! in_array($mapping['fieldName'], $this->identifier)) { - $this->identifier[] = $mapping['fieldName']; - } - - // Check for composite key - if ( ! $this->isIdentifierComposite && count($this->identifier) > 1) { - $this->isIdentifierComposite = true; - } - } - - if (Type::hasType($mapping['type']) && Type::getType($mapping['type'])->canRequireSQLConversion()) { - if (isset($mapping['id']) && true === $mapping['id']) { - throw MappingException::sqlConversionNotAllowedForIdentifiers($this->name, $mapping['fieldName'], $mapping['type']); - } - - $mapping['requireSQLConversion'] = true; - } - } - - /** - * Validates & completes the basic mapping information that is common to all - * association mappings (one-to-one, many-ot-one, one-to-many, many-to-many). - * - * @param array $mapping The mapping. - * - * @return array The updated mapping. - * - * @throws MappingException If something is wrong with the mapping. - */ - protected function _validateAndCompleteAssociationMapping(array $mapping) - { - if ( ! isset($mapping['mappedBy'])) { - $mapping['mappedBy'] = null; - } - - if ( ! isset($mapping['inversedBy'])) { - $mapping['inversedBy'] = null; - } - - $mapping['isOwningSide'] = true; // assume owning side until we hit mappedBy - - if (empty($mapping['indexBy'])) { - unset($mapping['indexBy']); - } - - // If targetEntity is unqualified, assume it is in the same namespace as - // the sourceEntity. - $mapping['sourceEntity'] = $this->name; - - if (isset($mapping['targetEntity'])) { - $mapping['targetEntity'] = $this->fullyQualifiedClassName($mapping['targetEntity']); - $mapping['targetEntity'] = ltrim($mapping['targetEntity'], '\\'); - } - - if (($mapping['type'] & self::MANY_TO_ONE) > 0 && isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']) { - throw MappingException::illegalOrphanRemoval($this->name, $mapping['fieldName']); - } - - // Complete id mapping - if (isset($mapping['id']) && true === $mapping['id']) { - if (isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']) { - throw MappingException::illegalOrphanRemovalOnIdentifierAssociation($this->name, $mapping['fieldName']); - } - - if ( ! in_array($mapping['fieldName'], $this->identifier)) { - if (isset($mapping['joinColumns']) && count($mapping['joinColumns']) >= 2) { - throw MappingException::cannotMapCompositePrimaryKeyEntitiesAsForeignId( - $mapping['targetEntity'], $this->name, $mapping['fieldName'] - ); - } - - $this->identifier[] = $mapping['fieldName']; - $this->containsForeignIdentifier = true; - } - - // Check for composite key - if ( ! $this->isIdentifierComposite && count($this->identifier) > 1) { - $this->isIdentifierComposite = true; - } - - if ($this->cache && !isset($mapping['cache'])) { - throw CacheException::nonCacheableEntityAssociation($this->name, $mapping['fieldName']); - } - } - - // Mandatory attributes for both sides - // Mandatory: fieldName, targetEntity - if ( ! isset($mapping['fieldName']) || !$mapping['fieldName']) { - throw MappingException::missingFieldName($this->name); - } - - if ( ! isset($mapping['targetEntity'])) { - throw MappingException::missingTargetEntity($mapping['fieldName']); - } - - // Mandatory and optional attributes for either side - if ( ! $mapping['mappedBy']) { - if (isset($mapping['joinTable']) && $mapping['joinTable']) { - if (isset($mapping['joinTable']['name']) && $mapping['joinTable']['name'][0] === '`') { - $mapping['joinTable']['name'] = trim($mapping['joinTable']['name'], '`'); - $mapping['joinTable']['quoted'] = true; - } - } - } else { - $mapping['isOwningSide'] = false; - } - - if (isset($mapping['id']) && true === $mapping['id'] && $mapping['type'] & self::TO_MANY) { - throw MappingException::illegalToManyIdentifierAssociation($this->name, $mapping['fieldName']); - } - - // Fetch mode. Default fetch mode to LAZY, if not set. - if ( ! isset($mapping['fetch'])) { - $mapping['fetch'] = self::FETCH_LAZY; - } - - // Cascades - $cascades = isset($mapping['cascade']) ? array_map('strtolower', $mapping['cascade']) : []; - - $allCascades = ['remove', 'persist', 'refresh', 'merge', 'detach']; - if (in_array('all', $cascades)) { - $cascades = $allCascades; - } elseif (count($cascades) !== count(array_intersect($cascades, $allCascades))) { - throw MappingException::invalidCascadeOption( - array_diff($cascades, $allCascades), - $this->name, - $mapping['fieldName'] - ); - } - - $mapping['cascade'] = $cascades; - $mapping['isCascadeRemove'] = in_array('remove', $cascades); - $mapping['isCascadePersist'] = in_array('persist', $cascades); - $mapping['isCascadeRefresh'] = in_array('refresh', $cascades); - $mapping['isCascadeMerge'] = in_array('merge', $cascades); - $mapping['isCascadeDetach'] = in_array('detach', $cascades); - - return $mapping; - } - - /** - * Validates & completes a one-to-one association mapping. - * - * @param array $mapping The mapping to validate & complete. - * - * @return array The validated & completed mapping. - * - * @throws RuntimeException - * @throws MappingException - */ - protected function _validateAndCompleteOneToOneMapping(array $mapping) - { - $mapping = $this->_validateAndCompleteAssociationMapping($mapping); - - if (isset($mapping['joinColumns']) && $mapping['joinColumns']) { - $mapping['isOwningSide'] = true; - } - - if ($mapping['isOwningSide']) { - if (empty($mapping['joinColumns'])) { - // Apply default join column - $mapping['joinColumns'] = [ - [ - 'name' => $this->namingStrategy->joinColumnName($mapping['fieldName'], $this->name), - 'referencedColumnName' => $this->namingStrategy->referenceColumnName() - ] - ]; - } - - $uniqueConstraintColumns = []; - - foreach ($mapping['joinColumns'] as &$joinColumn) { - if ($mapping['type'] === self::ONE_TO_ONE && ! $this->isInheritanceTypeSingleTable()) { - if (count($mapping['joinColumns']) === 1) { - if (empty($mapping['id'])) { - $joinColumn['unique'] = true; - } - } else { - $uniqueConstraintColumns[] = $joinColumn['name']; - } - } - - if (empty($joinColumn['name'])) { - $joinColumn['name'] = $this->namingStrategy->joinColumnName($mapping['fieldName'], $this->name); - } - - if (empty($joinColumn['referencedColumnName'])) { - $joinColumn['referencedColumnName'] = $this->namingStrategy->referenceColumnName(); - } - - if ($joinColumn['name'][0] === '`') { - $joinColumn['name'] = trim($joinColumn['name'], '`'); - $joinColumn['quoted'] = true; - } - - if ($joinColumn['referencedColumnName'][0] === '`') { - $joinColumn['referencedColumnName'] = trim($joinColumn['referencedColumnName'], '`'); - $joinColumn['quoted'] = true; - } - - $mapping['sourceToTargetKeyColumns'][$joinColumn['name']] = $joinColumn['referencedColumnName']; - $mapping['joinColumnFieldNames'][$joinColumn['name']] = isset($joinColumn['fieldName']) - ? $joinColumn['fieldName'] - : $joinColumn['name']; - } - - if ($uniqueConstraintColumns) { - if ( ! $this->table) { - throw new RuntimeException("ClassMetadataInfo::setTable() has to be called before defining a one to one relationship."); - } - - $this->table['uniqueConstraints'][$mapping['fieldName'] . "_uniq"] = [ - 'columns' => $uniqueConstraintColumns - ]; - } - - $mapping['targetToSourceKeyColumns'] = array_flip($mapping['sourceToTargetKeyColumns']); - } - - $mapping['orphanRemoval'] = isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']; - $mapping['isCascadeRemove'] = $mapping['orphanRemoval'] || $mapping['isCascadeRemove']; - - if ($mapping['orphanRemoval']) { - unset($mapping['unique']); - } - - if (isset($mapping['id']) && $mapping['id'] === true && !$mapping['isOwningSide']) { - throw MappingException::illegalInverseIdentifierAssociation($this->name, $mapping['fieldName']); - } - - return $mapping; - } - - /** - * Validates & completes a one-to-many association mapping. - * - * @param array $mapping The mapping to validate and complete. - * - * @return array The validated and completed mapping. - * - * @throws MappingException - * @throws InvalidArgumentException - */ - protected function _validateAndCompleteOneToManyMapping(array $mapping) - { - $mapping = $this->_validateAndCompleteAssociationMapping($mapping); - - // OneToMany-side MUST be inverse (must have mappedBy) - if ( ! isset($mapping['mappedBy'])) { - throw MappingException::oneToManyRequiresMappedBy($mapping['fieldName']); - } - - $mapping['orphanRemoval'] = isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']; - $mapping['isCascadeRemove'] = $mapping['orphanRemoval'] || $mapping['isCascadeRemove']; - - $this->assertMappingOrderBy($mapping); - - return $mapping; - } - - /** - * Validates & completes a many-to-many association mapping. - * - * @param array $mapping The mapping to validate & complete. - * - * @return array The validated & completed mapping. - * - * @throws \InvalidArgumentException - */ - protected function _validateAndCompleteManyToManyMapping(array $mapping) - { - $mapping = $this->_validateAndCompleteAssociationMapping($mapping); - - if ($mapping['isOwningSide']) { - // owning side MUST have a join table - if ( ! isset($mapping['joinTable']['name'])) { - $mapping['joinTable']['name'] = $this->namingStrategy->joinTableName($mapping['sourceEntity'], $mapping['targetEntity'], $mapping['fieldName']); - } - - $selfReferencingEntityWithoutJoinColumns = $mapping['sourceEntity'] == $mapping['targetEntity'] - && (! (isset($mapping['joinTable']['joinColumns']) || isset($mapping['joinTable']['inverseJoinColumns']))); - - if ( ! isset($mapping['joinTable']['joinColumns'])) { - $mapping['joinTable']['joinColumns'] = [ - [ - 'name' => $this->namingStrategy->joinKeyColumnName($mapping['sourceEntity'], $selfReferencingEntityWithoutJoinColumns ? 'source' : null), - 'referencedColumnName' => $this->namingStrategy->referenceColumnName(), - 'onDelete' => 'CASCADE' - ] - ]; - } - - if ( ! isset($mapping['joinTable']['inverseJoinColumns'])) { - $mapping['joinTable']['inverseJoinColumns'] = [ - [ - 'name' => $this->namingStrategy->joinKeyColumnName($mapping['targetEntity'], $selfReferencingEntityWithoutJoinColumns ? 'target' : null), - 'referencedColumnName' => $this->namingStrategy->referenceColumnName(), - 'onDelete' => 'CASCADE' - ] - ]; - } - - $mapping['joinTableColumns'] = []; - - foreach ($mapping['joinTable']['joinColumns'] as &$joinColumn) { - if (empty($joinColumn['name'])) { - $joinColumn['name'] = $this->namingStrategy->joinKeyColumnName($mapping['sourceEntity'], $joinColumn['referencedColumnName']); - } - - if (empty($joinColumn['referencedColumnName'])) { - $joinColumn['referencedColumnName'] = $this->namingStrategy->referenceColumnName(); - } - - if ($joinColumn['name'][0] === '`') { - $joinColumn['name'] = trim($joinColumn['name'], '`'); - $joinColumn['quoted'] = true; - } - - if ($joinColumn['referencedColumnName'][0] === '`') { - $joinColumn['referencedColumnName'] = trim($joinColumn['referencedColumnName'], '`'); - $joinColumn['quoted'] = true; - } - - if (isset($joinColumn['onDelete']) && strtolower($joinColumn['onDelete']) == 'cascade') { - $mapping['isOnDeleteCascade'] = true; - } - - $mapping['relationToSourceKeyColumns'][$joinColumn['name']] = $joinColumn['referencedColumnName']; - $mapping['joinTableColumns'][] = $joinColumn['name']; - } - - foreach ($mapping['joinTable']['inverseJoinColumns'] as &$inverseJoinColumn) { - if (empty($inverseJoinColumn['name'])) { - $inverseJoinColumn['name'] = $this->namingStrategy->joinKeyColumnName($mapping['targetEntity'], $inverseJoinColumn['referencedColumnName']); - } - - if (empty($inverseJoinColumn['referencedColumnName'])) { - $inverseJoinColumn['referencedColumnName'] = $this->namingStrategy->referenceColumnName(); - } - - if ($inverseJoinColumn['name'][0] === '`') { - $inverseJoinColumn['name'] = trim($inverseJoinColumn['name'], '`'); - $inverseJoinColumn['quoted'] = true; - } - - if ($inverseJoinColumn['referencedColumnName'][0] === '`') { - $inverseJoinColumn['referencedColumnName'] = trim($inverseJoinColumn['referencedColumnName'], '`'); - $inverseJoinColumn['quoted'] = true; - } - - if (isset($inverseJoinColumn['onDelete']) && strtolower($inverseJoinColumn['onDelete']) == 'cascade') { - $mapping['isOnDeleteCascade'] = true; - } - - $mapping['relationToTargetKeyColumns'][$inverseJoinColumn['name']] = $inverseJoinColumn['referencedColumnName']; - $mapping['joinTableColumns'][] = $inverseJoinColumn['name']; - } - } - - $mapping['orphanRemoval'] = isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']; - - $this->assertMappingOrderBy($mapping); - - return $mapping; - } - - /** - * {@inheritDoc} - */ - public function getIdentifierFieldNames() - { - return $this->identifier; - } - - /** - * Gets the name of the single id field. Note that this only works on - * entity classes that have a single-field pk. - * - * @return string - * - * @throws MappingException If the class doesn't have an identifier or it has a composite primary key. - */ - public function getSingleIdentifierFieldName() - { - if ($this->isIdentifierComposite) { - throw MappingException::singleIdNotAllowedOnCompositePrimaryKey($this->name); - } - - if ( ! isset($this->identifier[0])) { - throw MappingException::noIdDefined($this->name); - } - - return $this->identifier[0]; - } - - /** - * Gets the column name of the single id column. Note that this only works on - * entity classes that have a single-field pk. - * - * @return string - * - * @throws MappingException If the class doesn't have an identifier or it has a composite primary key. - */ - public function getSingleIdentifierColumnName() - { - return $this->getColumnName($this->getSingleIdentifierFieldName()); - } - - /** - * INTERNAL: - * Sets the mapped identifier/primary key fields of this class. - * Mainly used by the ClassMetadataFactory to assign inherited identifiers. - * - * @param array $identifier - * - * @return void - */ - public function setIdentifier(array $identifier) - { - $this->identifier = $identifier; - $this->isIdentifierComposite = (count($this->identifier) > 1); - } - - /** - * {@inheritDoc} - */ - public function getIdentifier() - { - return $this->identifier; - } - - /** - * {@inheritDoc} - */ - public function hasField($fieldName) - { - return isset($this->fieldMappings[$fieldName]) || isset($this->embeddedClasses[$fieldName]); - } - - /** - * Gets an array containing all the column names. - * - * @param array|null $fieldNames - * - * @return array - */ - public function getColumnNames(array $fieldNames = null) - { - if (null === $fieldNames) { - return array_keys($this->fieldNames); - } - - return array_values(array_map([$this, 'getColumnName'], $fieldNames)); - } - - /** - * Returns an array with all the identifier column names. - * - * @return array - */ - public function getIdentifierColumnNames() - { - $columnNames = []; - - foreach ($this->identifier as $idProperty) { - if (isset($this->fieldMappings[$idProperty])) { - $columnNames[] = $this->fieldMappings[$idProperty]['columnName']; - - continue; - } - - // Association defined as Id field - $joinColumns = $this->associationMappings[$idProperty]['joinColumns']; - $assocColumnNames = array_map(function ($joinColumn) { return $joinColumn['name']; }, $joinColumns); - - $columnNames = array_merge($columnNames, $assocColumnNames); - } - - return $columnNames; - } - - /** - * Sets the type of Id generator to use for the mapped class. - * - * @param int $generatorType - * - * @return void - */ - public function setIdGeneratorType($generatorType) - { - $this->generatorType = $generatorType; - } - - /** - * Checks whether the mapped class uses an Id generator. - * - * @return boolean TRUE if the mapped class uses an Id generator, FALSE otherwise. - */ - public function usesIdGenerator() - { - return $this->generatorType != self::GENERATOR_TYPE_NONE; - } - - /** - * @return boolean - */ - public function isInheritanceTypeNone() - { - return $this->inheritanceType == self::INHERITANCE_TYPE_NONE; - } - - /** - * Checks whether the mapped class uses the JOINED inheritance mapping strategy. - * - * @return boolean TRUE if the class participates in a JOINED inheritance mapping, - * FALSE otherwise. - */ - public function isInheritanceTypeJoined() - { - return $this->inheritanceType == self::INHERITANCE_TYPE_JOINED; - } - - /** - * Checks whether the mapped class uses the SINGLE_TABLE inheritance mapping strategy. - * - * @return boolean TRUE if the class participates in a SINGLE_TABLE inheritance mapping, - * FALSE otherwise. - */ - public function isInheritanceTypeSingleTable() - { - return $this->inheritanceType == self::INHERITANCE_TYPE_SINGLE_TABLE; - } - - /** - * Checks whether the mapped class uses the TABLE_PER_CLASS inheritance mapping strategy. - * - * @return boolean TRUE if the class participates in a TABLE_PER_CLASS inheritance mapping, - * FALSE otherwise. - */ - public function isInheritanceTypeTablePerClass() - { - return $this->inheritanceType == self::INHERITANCE_TYPE_TABLE_PER_CLASS; - } - - /** - * Checks whether the class uses an identity column for the Id generation. - * - * @return boolean TRUE if the class uses the IDENTITY generator, FALSE otherwise. - */ - public function isIdGeneratorIdentity() - { - return $this->generatorType == self::GENERATOR_TYPE_IDENTITY; - } - - /** - * Checks whether the class uses a sequence for id generation. - * - * @return boolean TRUE if the class uses the SEQUENCE generator, FALSE otherwise. - */ - public function isIdGeneratorSequence() - { - return $this->generatorType == self::GENERATOR_TYPE_SEQUENCE; - } - - /** - * Checks whether the class uses a table for id generation. - * - * @return boolean TRUE if the class uses the TABLE generator, FALSE otherwise. - */ - public function isIdGeneratorTable() - { - return $this->generatorType == self::GENERATOR_TYPE_TABLE; - } - - /** - * Checks whether the class has a natural identifier/pk (which means it does - * not use any Id generator. - * - * @return boolean - */ - public function isIdentifierNatural() - { - return $this->generatorType == self::GENERATOR_TYPE_NONE; - } - - /** - * Checks whether the class use a UUID for id generation. - * - * @return boolean - */ - public function isIdentifierUuid() - { - return $this->generatorType == self::GENERATOR_TYPE_UUID; - } - - /** - * Gets the type of a field. - * - * @param string $fieldName - * - * @return \Doctrine\DBAL\Types\Type|string|null - * - * @todo 3.0 Remove this. PersisterHelper should fix it somehow - */ - public function getTypeOfField($fieldName) - { - return isset($this->fieldMappings[$fieldName]) - ? $this->fieldMappings[$fieldName]['type'] - : null; - } - - /** - * Gets the type of a column. - * - * @param string $columnName - * - * @return \Doctrine\DBAL\Types\Type|string|null - * - * @deprecated 3.0 remove this. this method is bogus and unreliable, since it cannot resolve the type of a column - * that is derived by a referenced field on a different entity. - */ - public function getTypeOfColumn($columnName) - { - return $this->getTypeOfField($this->getFieldName($columnName)); - } - - /** - * Gets the name of the primary table. - * - * @return string - */ - public function getTableName() - { - return $this->table['name']; - } - - /** - * Gets primary table's schema name. - * - * @return string|null - */ - public function getSchemaName() - { - return isset($this->table['schema']) ? $this->table['schema'] : null; - } - - /** - * Gets the table name to use for temporary identifier tables of this class. - * - * @return string - */ - public function getTemporaryIdTableName() - { - // replace dots with underscores because PostgreSQL creates temporary tables in a special schema - return str_replace('.', '_', $this->getTableName() . '_id_tmp'); - } - - /** - * Sets the mapped subclasses of this class. - * - * @param array $subclasses The names of all mapped subclasses. - * - * @return void - */ - public function setSubclasses(array $subclasses) - { - foreach ($subclasses as $subclass) { - $this->subClasses[] = $this->fullyQualifiedClassName($subclass); - } - } - - /** - * Sets the parent class names. - * Assumes that the class names in the passed array are in the order: - * directParent -> directParentParent -> directParentParentParent ... -> root. - * - * @param array $classNames - * - * @return void - */ - public function setParentClasses(array $classNames) - { - $this->parentClasses = $classNames; - - if (count($classNames) > 0) { - $this->rootEntityName = array_pop($classNames); - } - } - - /** - * Sets the inheritance type used by the class and its subclasses. - * - * @param integer $type - * - * @return void - * - * @throws MappingException - */ - public function setInheritanceType($type) - { - if ( ! $this->_isInheritanceType($type)) { - throw MappingException::invalidInheritanceType($this->name, $type); - } - - $this->inheritanceType = $type; - } - - /** - * Sets the association to override association mapping of property for an entity relationship. - * - * @param string $fieldName - * @param array $overrideMapping - * - * @return void - * - * @throws MappingException - */ - public function setAssociationOverride($fieldName, array $overrideMapping) - { - if ( ! isset($this->associationMappings[$fieldName])) { - throw MappingException::invalidOverrideFieldName($this->name, $fieldName); - } - - $mapping = $this->associationMappings[$fieldName]; - - if (isset($overrideMapping['joinColumns'])) { - $mapping['joinColumns'] = $overrideMapping['joinColumns']; - } - - if (isset($overrideMapping['inversedBy'])) { - $mapping['inversedBy'] = $overrideMapping['inversedBy']; - } - - if (isset($overrideMapping['joinTable'])) { - $mapping['joinTable'] = $overrideMapping['joinTable']; - } - - if (isset($overrideMapping['fetch'])) { - $mapping['fetch'] = $overrideMapping['fetch']; - } - - $mapping['joinColumnFieldNames'] = null; - $mapping['joinTableColumns'] = null; - $mapping['sourceToTargetKeyColumns'] = null; - $mapping['relationToSourceKeyColumns'] = null; - $mapping['relationToTargetKeyColumns'] = null; - - switch ($mapping['type']) { - case self::ONE_TO_ONE: - $mapping = $this->_validateAndCompleteOneToOneMapping($mapping); - break; - case self::ONE_TO_MANY: - $mapping = $this->_validateAndCompleteOneToManyMapping($mapping); - break; - case self::MANY_TO_ONE: - $mapping = $this->_validateAndCompleteOneToOneMapping($mapping); - break; - case self::MANY_TO_MANY: - $mapping = $this->_validateAndCompleteManyToManyMapping($mapping); - break; - } - - $this->associationMappings[$fieldName] = $mapping; - } - - /** - * Sets the override for a mapped field. - * - * @param string $fieldName - * @param array $overrideMapping - * - * @return void - * - * @throws MappingException - */ - public function setAttributeOverride($fieldName, array $overrideMapping) - { - if ( ! isset($this->fieldMappings[$fieldName])) { - throw MappingException::invalidOverrideFieldName($this->name, $fieldName); - } - - $mapping = $this->fieldMappings[$fieldName]; - - if (isset($mapping['id'])) { - $overrideMapping['id'] = $mapping['id']; - } - - if ( ! isset($overrideMapping['type'])) { - $overrideMapping['type'] = $mapping['type']; - } - - if ( ! isset($overrideMapping['fieldName'])) { - $overrideMapping['fieldName'] = $mapping['fieldName']; - } - - if ($overrideMapping['type'] !== $mapping['type']) { - throw MappingException::invalidOverrideFieldType($this->name, $fieldName); - } - - unset($this->fieldMappings[$fieldName]); - unset($this->fieldNames[$mapping['columnName']]); - unset($this->columnNames[$mapping['fieldName']]); - - $this->_validateAndCompleteFieldMapping($overrideMapping); - - $this->fieldMappings[$fieldName] = $overrideMapping; - } - - /** - * Checks whether a mapped field is inherited from an entity superclass. - * - * @param string $fieldName - * - * @return bool TRUE if the field is inherited, FALSE otherwise. - */ - public function isInheritedField($fieldName) - { - return isset($this->fieldMappings[$fieldName]['inherited']); - } - - /** - * Checks if this entity is the root in any entity-inheritance-hierarchy. - * - * @return bool - */ - public function isRootEntity() - { - return $this->name == $this->rootEntityName; - } - - /** - * Checks whether a mapped association field is inherited from a superclass. - * - * @param string $fieldName - * - * @return boolean TRUE if the field is inherited, FALSE otherwise. - */ - public function isInheritedAssociation($fieldName) - { - return isset($this->associationMappings[$fieldName]['inherited']); - } - - public function isInheritedEmbeddedClass($fieldName) - { - return isset($this->embeddedClasses[$fieldName]['inherited']); - } - - /** - * Sets the name of the primary table the class is mapped to. - * - * @param string $tableName The table name. - * - * @return void - * - * @deprecated Use {@link setPrimaryTable}. - */ - public function setTableName($tableName) - { - $this->table['name'] = $tableName; - } - - /** - * Sets the primary table definition. The provided array supports the - * following structure: - * - * name => (optional, defaults to class name) - * indexes => array of indexes (optional) - * uniqueConstraints => array of constraints (optional) - * - * If a key is omitted, the current value is kept. - * - * @param array $table The table description. - * - * @return void - */ - public function setPrimaryTable(array $table) - { - if (isset($table['name'])) { - // Split schema and table name from a table name like "myschema.mytable" - if (strpos($table['name'], '.') !== false) { - list($this->table['schema'], $table['name']) = explode('.', $table['name'], 2); - } - - if ($table['name'][0] === '`') { - $table['name'] = trim($table['name'], '`'); - $this->table['quoted'] = true; - } - - $this->table['name'] = $table['name']; - } - - if (isset($table['quoted'])) { - $this->table['quoted'] = $table['quoted']; - } - - if (isset($table['schema'])) { - $this->table['schema'] = $table['schema']; - } - - if (isset($table['indexes'])) { - $this->table['indexes'] = $table['indexes']; - } - - if (isset($table['uniqueConstraints'])) { - $this->table['uniqueConstraints'] = $table['uniqueConstraints']; - } - - if (isset($table['options'])) { - $this->table['options'] = $table['options']; - } - } - - /** - * Checks whether the given type identifies an inheritance type. - * - * @param integer $type - * - * @return boolean TRUE if the given type identifies an inheritance type, FALSe otherwise. - */ - private function _isInheritanceType($type) - { - return $type == self::INHERITANCE_TYPE_NONE || - $type == self::INHERITANCE_TYPE_SINGLE_TABLE || - $type == self::INHERITANCE_TYPE_JOINED || - $type == self::INHERITANCE_TYPE_TABLE_PER_CLASS; - } - - /** - * Adds a mapped field to the class. - * - * @param array $mapping The field mapping. - * - * @return void - * - * @throws MappingException - */ - public function mapField(array $mapping) - { - $this->_validateAndCompleteFieldMapping($mapping); - $this->assertFieldNotMapped($mapping['fieldName']); - - $this->fieldMappings[$mapping['fieldName']] = $mapping; - } - - /** - * INTERNAL: - * Adds an association mapping without completing/validating it. - * This is mainly used to add inherited association mappings to derived classes. - * - * @param array $mapping - * - * @return void - * - * @throws MappingException - */ - public function addInheritedAssociationMapping(array $mapping/*, $owningClassName = null*/) - { - if (isset($this->associationMappings[$mapping['fieldName']])) { - throw MappingException::duplicateAssociationMapping($this->name, $mapping['fieldName']); - } - $this->associationMappings[$mapping['fieldName']] = $mapping; - } - - /** - * INTERNAL: - * Adds a field mapping without completing/validating it. - * This is mainly used to add inherited field mappings to derived classes. - * - * @param array $fieldMapping - * - * @return void - */ - public function addInheritedFieldMapping(array $fieldMapping) - { - $this->fieldMappings[$fieldMapping['fieldName']] = $fieldMapping; - $this->columnNames[$fieldMapping['fieldName']] = $fieldMapping['columnName']; - $this->fieldNames[$fieldMapping['columnName']] = $fieldMapping['fieldName']; - } - - /** - * INTERNAL: - * Adds a named query to this class. - * - * @param array $queryMapping - * - * @return void - * - * @throws MappingException - */ - public function addNamedQuery(array $queryMapping) - { - if (!isset($queryMapping['name'])) { - throw MappingException::nameIsMandatoryForQueryMapping($this->name); - } - - if (isset($this->namedQueries[$queryMapping['name']])) { - throw MappingException::duplicateQueryMapping($this->name, $queryMapping['name']); - } - - if (!isset($queryMapping['query'])) { - throw MappingException::emptyQueryMapping($this->name, $queryMapping['name']); - } - - $name = $queryMapping['name']; - $query = $queryMapping['query']; - $dql = str_replace('__CLASS__', $this->name, $query); - - $this->namedQueries[$name] = [ - 'name' => $name, - 'query' => $query, - 'dql' => $dql, - ]; - } - - /** - * INTERNAL: - * Adds a named native query to this class. - * - * @param array $queryMapping - * - * @return void - * - * @throws MappingException - */ - public function addNamedNativeQuery(array $queryMapping) - { - if (!isset($queryMapping['name'])) { - throw MappingException::nameIsMandatoryForQueryMapping($this->name); - } - - if (isset($this->namedNativeQueries[$queryMapping['name']])) { - throw MappingException::duplicateQueryMapping($this->name, $queryMapping['name']); - } - - if (!isset($queryMapping['query'])) { - throw MappingException::emptyQueryMapping($this->name, $queryMapping['name']); - } - - if (!isset($queryMapping['resultClass']) && !isset($queryMapping['resultSetMapping'])) { - throw MappingException::missingQueryMapping($this->name, $queryMapping['name']); - } - - $queryMapping['isSelfClass'] = false; - - if (isset($queryMapping['resultClass'])) { - if ($queryMapping['resultClass'] === '__CLASS__') { - - $queryMapping['isSelfClass'] = true; - $queryMapping['resultClass'] = $this->name; - } - - $queryMapping['resultClass'] = $this->fullyQualifiedClassName($queryMapping['resultClass']); - $queryMapping['resultClass'] = ltrim($queryMapping['resultClass'], '\\'); - } - - $this->namedNativeQueries[$queryMapping['name']] = $queryMapping; - } - - /** - * INTERNAL: - * Adds a sql result set mapping to this class. - * - * @param array $resultMapping - * - * @return void - * - * @throws MappingException - */ - public function addSqlResultSetMapping(array $resultMapping) - { - if (!isset($resultMapping['name'])) { - throw MappingException::nameIsMandatoryForSqlResultSetMapping($this->name); - } - - if (isset($this->sqlResultSetMappings[$resultMapping['name']])) { - throw MappingException::duplicateResultSetMapping($this->name, $resultMapping['name']); - } - - if (isset($resultMapping['entities'])) { - foreach ($resultMapping['entities'] as $key => $entityResult) { - if (!isset($entityResult['entityClass'])) { - throw MappingException::missingResultSetMappingEntity($this->name, $resultMapping['name']); - } - - $entityResult['isSelfClass'] = false; - if ($entityResult['entityClass'] === '__CLASS__') { - - $entityResult['isSelfClass'] = true; - $entityResult['entityClass'] = $this->name; - - } - - $entityResult['entityClass'] = $this->fullyQualifiedClassName($entityResult['entityClass']); - - $resultMapping['entities'][$key]['entityClass'] = ltrim($entityResult['entityClass'], '\\'); - $resultMapping['entities'][$key]['isSelfClass'] = $entityResult['isSelfClass']; - - if (isset($entityResult['fields'])) { - foreach ($entityResult['fields'] as $k => $field) { - if (!isset($field['name'])) { - throw MappingException::missingResultSetMappingFieldName($this->name, $resultMapping['name']); - } - - if (!isset($field['column'])) { - $fieldName = $field['name']; - if (strpos($fieldName, '.')) { - list(, $fieldName) = explode('.', $fieldName); - } - - $resultMapping['entities'][$key]['fields'][$k]['column'] = $fieldName; - } - } - } - } - } - - $this->sqlResultSetMappings[$resultMapping['name']] = $resultMapping; - } - - /** - * Adds a one-to-one mapping. - * - * @param array $mapping The mapping. - * - * @return void - */ - public function mapOneToOne(array $mapping) - { - $mapping['type'] = self::ONE_TO_ONE; - - $mapping = $this->_validateAndCompleteOneToOneMapping($mapping); - - $this->_storeAssociationMapping($mapping); - } - - /** - * Adds a one-to-many mapping. - * - * @param array $mapping The mapping. - * - * @return void - */ - public function mapOneToMany(array $mapping) - { - $mapping['type'] = self::ONE_TO_MANY; - - $mapping = $this->_validateAndCompleteOneToManyMapping($mapping); - - $this->_storeAssociationMapping($mapping); - } - - /** - * Adds a many-to-one mapping. - * - * @param array $mapping The mapping. - * - * @return void - */ - public function mapManyToOne(array $mapping) - { - $mapping['type'] = self::MANY_TO_ONE; - - // A many-to-one mapping is essentially a one-one backreference - $mapping = $this->_validateAndCompleteOneToOneMapping($mapping); - - $this->_storeAssociationMapping($mapping); - } - - /** - * Adds a many-to-many mapping. - * - * @param array $mapping The mapping. - * - * @return void - */ - public function mapManyToMany(array $mapping) - { - $mapping['type'] = self::MANY_TO_MANY; - - $mapping = $this->_validateAndCompleteManyToManyMapping($mapping); - - $this->_storeAssociationMapping($mapping); - } - - /** - * Stores the association mapping. - * - * @param array $assocMapping - * - * @return void - * - * @throws MappingException - */ - protected function _storeAssociationMapping(array $assocMapping) - { - $sourceFieldName = $assocMapping['fieldName']; - - $this->assertFieldNotMapped($sourceFieldName); - - $this->associationMappings[$sourceFieldName] = $assocMapping; - } - - /** - * Registers a custom repository class for the entity class. - * - * @param string $repositoryClassName The class name of the custom mapper. - * - * @return void - */ - public function setCustomRepositoryClass($repositoryClassName) - { - $this->customRepositoryClassName = $this->fullyQualifiedClassName($repositoryClassName); - } - - /** - * Dispatches the lifecycle event of the given entity to the registered - * lifecycle callbacks and lifecycle listeners. - * - * @deprecated Deprecated since version 2.4 in favor of \Doctrine\ORM\Event\ListenersInvoker - * - * @param string $lifecycleEvent The lifecycle event. - * @param object $entity The Entity on which the event occurred. - * - * @return void - */ - public function invokeLifecycleCallbacks($lifecycleEvent, $entity) - { - foreach ($this->lifecycleCallbacks[$lifecycleEvent] as $callback) { - $entity->$callback(); - } - } - - /** - * Whether the class has any attached lifecycle listeners or callbacks for a lifecycle event. - * - * @param string $lifecycleEvent - * - * @return boolean - */ - public function hasLifecycleCallbacks($lifecycleEvent) - { - return isset($this->lifecycleCallbacks[$lifecycleEvent]); - } - - /** - * Gets the registered lifecycle callbacks for an event. - * - * @param string $event - * - * @return array - */ - public function getLifecycleCallbacks($event) - { - return isset($this->lifecycleCallbacks[$event]) ? $this->lifecycleCallbacks[$event] : []; - } - - /** - * Adds a lifecycle callback for entities of this class. - * - * @param string $callback - * @param string $event - * - * @return void - */ - public function addLifecycleCallback($callback, $event) - { - if (isset($this->lifecycleCallbacks[$event]) && in_array($callback, $this->lifecycleCallbacks[$event])) { - return; - } - - $this->lifecycleCallbacks[$event][] = $callback; - } - - /** - * Sets the lifecycle callbacks for entities of this class. - * Any previously registered callbacks are overwritten. - * - * @param array $callbacks - * - * @return void - */ - public function setLifecycleCallbacks(array $callbacks) - { - $this->lifecycleCallbacks = $callbacks; - } - - /** - * Adds a entity listener for entities of this class. - * - * @param string $eventName The entity lifecycle event. - * @param string $class The listener class. - * @param string $method The listener callback method. - * - * @throws \Doctrine\ORM\Mapping\MappingException - */ - public function addEntityListener($eventName, $class, $method) - { - $class = $this->fullyQualifiedClassName($class); - - $listener = [ - 'class' => $class, - 'method' => $method, - ]; - - if ( ! class_exists($class)) { - throw MappingException::entityListenerClassNotFound($class, $this->name); - } - - if ( ! method_exists($class, $method)) { - throw MappingException::entityListenerMethodNotFound($class, $method, $this->name); - } - - if (isset($this->entityListeners[$eventName]) && in_array($listener, $this->entityListeners[$eventName])) { - throw MappingException::duplicateEntityListener($class, $method, $this->name); - } - - $this->entityListeners[$eventName][] = $listener; - } - - /** - * Sets the discriminator column definition. - * - * @param array $columnDef - * - * @return void - * - * @throws MappingException - * - * @see getDiscriminatorColumn() - */ - public function setDiscriminatorColumn($columnDef) - { - if ($columnDef !== null) { - if ( ! isset($columnDef['name'])) { - throw MappingException::nameIsMandatoryForDiscriminatorColumns($this->name); - } - - if (isset($this->fieldNames[$columnDef['name']])) { - throw MappingException::duplicateColumnName($this->name, $columnDef['name']); - } - - if ( ! isset($columnDef['fieldName'])) { - $columnDef['fieldName'] = $columnDef['name']; - } - - if ( ! isset($columnDef['type'])) { - $columnDef['type'] = "string"; - } - - if (in_array($columnDef['type'], ["boolean", "array", "object", "datetime", "time", "date"])) { - throw MappingException::invalidDiscriminatorColumnType($this->name, $columnDef['type']); - } - - $this->discriminatorColumn = $columnDef; - } - } - - /** - * Sets the discriminator values used by this class. - * Used for JOINED and SINGLE_TABLE inheritance mapping strategies. - * - * @param array $map - * - * @return void - */ - public function setDiscriminatorMap(array $map) - { - foreach ($map as $value => $className) { - $this->addDiscriminatorMapClass($value, $className); - } - } - - /** - * Adds one entry of the discriminator map with a new class and corresponding name. - * - * @param string $name - * @param string $className - * - * @return void - * - * @throws MappingException - */ - public function addDiscriminatorMapClass($name, $className) - { - $className = $this->fullyQualifiedClassName($className); - $className = ltrim($className, '\\'); - - $this->discriminatorMap[$name] = $className; - - if ($this->name === $className) { - $this->discriminatorValue = $name; - - return; - } - - if ( ! (class_exists($className) || interface_exists($className))) { - throw MappingException::invalidClassInDiscriminatorMap($className, $this->name); - } - - if (is_subclass_of($className, $this->name) && ! in_array($className, $this->subClasses)) { - $this->subClasses[] = $className; - } - } - - /** - * Checks whether the class has a named query with the given query name. - * - * @param string $queryName - * - * @return boolean - */ - public function hasNamedQuery($queryName) - { - return isset($this->namedQueries[$queryName]); - } - - /** - * Checks whether the class has a named native query with the given query name. - * - * @param string $queryName - * - * @return boolean - */ - public function hasNamedNativeQuery($queryName) - { - return isset($this->namedNativeQueries[$queryName]); - } - - /** - * Checks whether the class has a named native query with the given query name. - * - * @param string $name - * - * @return boolean - */ - public function hasSqlResultSetMapping($name) - { - return isset($this->sqlResultSetMappings[$name]); - } - - /** - * {@inheritDoc} - */ - public function hasAssociation($fieldName) - { - return isset($this->associationMappings[$fieldName]); - } - - /** - * {@inheritDoc} - */ - public function isSingleValuedAssociation($fieldName) - { - return isset($this->associationMappings[$fieldName]) - && ($this->associationMappings[$fieldName]['type'] & self::TO_ONE); - } - - /** - * {@inheritDoc} - */ - public function isCollectionValuedAssociation($fieldName) - { - return isset($this->associationMappings[$fieldName]) - && ! ($this->associationMappings[$fieldName]['type'] & self::TO_ONE); - } - - /** - * Is this an association that only has a single join column? - * - * @param string $fieldName - * - * @return bool - */ - public function isAssociationWithSingleJoinColumn($fieldName) - { - return isset($this->associationMappings[$fieldName]) - && isset($this->associationMappings[$fieldName]['joinColumns'][0]) - && ! isset($this->associationMappings[$fieldName]['joinColumns'][1]); - } - - /** - * Returns the single association join column (if any). - * - * @param string $fieldName - * - * @return string - * - * @throws MappingException - */ - public function getSingleAssociationJoinColumnName($fieldName) - { - if ( ! $this->isAssociationWithSingleJoinColumn($fieldName)) { - throw MappingException::noSingleAssociationJoinColumnFound($this->name, $fieldName); - } - - return $this->associationMappings[$fieldName]['joinColumns'][0]['name']; - } - - /** - * Returns the single association referenced join column name (if any). - * - * @param string $fieldName - * - * @return string - * - * @throws MappingException - */ - public function getSingleAssociationReferencedJoinColumnName($fieldName) - { - if ( ! $this->isAssociationWithSingleJoinColumn($fieldName)) { - throw MappingException::noSingleAssociationJoinColumnFound($this->name, $fieldName); - } - - return $this->associationMappings[$fieldName]['joinColumns'][0]['referencedColumnName']; - } - - /** - * Used to retrieve a fieldname for either field or association from a given column. - * - * This method is used in foreign-key as primary-key contexts. - * - * @param string $columnName - * - * @return string - * - * @throws MappingException - */ - public function getFieldForColumn($columnName) - { - if (isset($this->fieldNames[$columnName])) { - return $this->fieldNames[$columnName]; - } - - foreach ($this->associationMappings as $assocName => $mapping) { - if ($this->isAssociationWithSingleJoinColumn($assocName) && - $this->associationMappings[$assocName]['joinColumns'][0]['name'] == $columnName) { - - return $assocName; - } - } - - throw MappingException::noFieldNameFoundForColumn($this->name, $columnName); - } - - /** - * Sets the ID generator used to generate IDs for instances of this class. - * - * @param \Doctrine\ORM\Id\AbstractIdGenerator $generator - * - * @return void - */ - public function setIdGenerator($generator) - { - $this->idGenerator = $generator; - } - - /** - * Sets definition. - * - * @param array $definition - * - * @return void - */ - public function setCustomGeneratorDefinition(array $definition) - { - $this->customGeneratorDefinition = $definition; - } - - /** - * Sets the definition of the sequence ID generator for this class. - * - * The definition must have the following structure: - * - * array( - * 'sequenceName' => 'name', - * 'allocationSize' => 20, - * 'initialValue' => 1 - * 'quoted' => 1 - * ) - * - * - * @param array $definition - * - * @return void - * - * @throws MappingException - */ - public function setSequenceGeneratorDefinition(array $definition) - { - if ( ! isset($definition['sequenceName'])) { - throw MappingException::missingSequenceName($this->name); - } - - if ($definition['sequenceName'][0] == '`') { - $definition['sequenceName'] = trim($definition['sequenceName'], '`'); - $definition['quoted'] = true; - } - - $this->sequenceGeneratorDefinition = $definition; - } - - /** - * Sets the version field mapping used for versioning. Sets the default - * value to use depending on the column type. - * - * @param array $mapping The version field mapping array. - * - * @return void - * - * @throws MappingException - */ - public function setVersionMapping(array &$mapping) - { - $this->isVersioned = true; - $this->versionField = $mapping['fieldName']; - - if ( ! isset($mapping['default'])) { - if (in_array($mapping['type'], ['integer', 'bigint', 'smallint'])) { - $mapping['default'] = 1; - } else if ($mapping['type'] == 'datetime') { - $mapping['default'] = 'CURRENT_TIMESTAMP'; - } else { - throw MappingException::unsupportedOptimisticLockingType($this->name, $mapping['fieldName'], $mapping['type']); - } - } - } - - /** - * Sets whether this class is to be versioned for optimistic locking. - * - * @param boolean $bool - * - * @return void - */ - public function setVersioned($bool) - { - $this->isVersioned = $bool; - } - - /** - * Sets the name of the field that is to be used for versioning if this class is - * versioned for optimistic locking. - * - * @param string $versionField - * - * @return void - */ - public function setVersionField($versionField) - { - $this->versionField = $versionField; - } - - /** - * Marks this class as read only, no change tracking is applied to it. - * - * @return void - */ - public function markReadOnly() - { - $this->isReadOnly = true; - } - - /** - * {@inheritDoc} - */ - public function getFieldNames() - { - return array_keys($this->fieldMappings); - } - - /** - * {@inheritDoc} - */ - public function getAssociationNames() - { - return array_keys($this->associationMappings); - } - - /** - * {@inheritDoc} - * - * @throws InvalidArgumentException - */ - public function getAssociationTargetClass($assocName) - { - if ( ! isset($this->associationMappings[$assocName])) { - throw new InvalidArgumentException("Association name expected, '" . $assocName ."' is not an association."); - } - - return $this->associationMappings[$assocName]['targetEntity']; - } - - /** - * {@inheritDoc} - */ - public function getName() - { - return $this->name; - } - - /** - * Gets the (possibly quoted) identifier column names for safe use in an SQL statement. - * - * @deprecated Deprecated since version 2.3 in favor of \Doctrine\ORM\Mapping\QuoteStrategy - * - * @param \Doctrine\DBAL\Platforms\AbstractPlatform $platform - * - * @return array - */ - public function getQuotedIdentifierColumnNames($platform) - { - $quotedColumnNames = []; - - foreach ($this->identifier as $idProperty) { - if (isset($this->fieldMappings[$idProperty])) { - $quotedColumnNames[] = isset($this->fieldMappings[$idProperty]['quoted']) - ? $platform->quoteIdentifier($this->fieldMappings[$idProperty]['columnName']) - : $this->fieldMappings[$idProperty]['columnName']; - - continue; - } - - // Association defined as Id field - $joinColumns = $this->associationMappings[$idProperty]['joinColumns']; - $assocQuotedColumnNames = array_map( - function ($joinColumn) use ($platform) { - return isset($joinColumn['quoted']) - ? $platform->quoteIdentifier($joinColumn['name']) - : $joinColumn['name']; - }, - $joinColumns - ); - - $quotedColumnNames = array_merge($quotedColumnNames, $assocQuotedColumnNames); - } - - return $quotedColumnNames; - } - - /** - * Gets the (possibly quoted) column name of a mapped field for safe use in an SQL statement. - * - * @deprecated Deprecated since version 2.3 in favor of \Doctrine\ORM\Mapping\QuoteStrategy - * - * @param string $field - * @param \Doctrine\DBAL\Platforms\AbstractPlatform $platform - * - * @return string - */ - public function getQuotedColumnName($field, $platform) - { - return isset($this->fieldMappings[$field]['quoted']) - ? $platform->quoteIdentifier($this->fieldMappings[$field]['columnName']) - : $this->fieldMappings[$field]['columnName']; - } - - /** - * Gets the (possibly quoted) primary table name of this class for safe use in an SQL statement. - * - * @deprecated Deprecated since version 2.3 in favor of \Doctrine\ORM\Mapping\QuoteStrategy - * - * @param \Doctrine\DBAL\Platforms\AbstractPlatform $platform - * - * @return string - */ - public function getQuotedTableName($platform) - { - return isset($this->table['quoted']) - ? $platform->quoteIdentifier($this->table['name']) - : $this->table['name']; - } - - /** - * Gets the (possibly quoted) name of the join table. - * - * @deprecated Deprecated since version 2.3 in favor of \Doctrine\ORM\Mapping\QuoteStrategy - * - * @param array $assoc - * @param \Doctrine\DBAL\Platforms\AbstractPlatform $platform - * - * @return string - */ - public function getQuotedJoinTableName(array $assoc, $platform) - { - return isset($assoc['joinTable']['quoted']) - ? $platform->quoteIdentifier($assoc['joinTable']['name']) - : $assoc['joinTable']['name']; - } - - /** - * {@inheritDoc} - */ - public function isAssociationInverseSide($fieldName) - { - return isset($this->associationMappings[$fieldName]) - && ! $this->associationMappings[$fieldName]['isOwningSide']; - } - - /** - * {@inheritDoc} - */ - public function getAssociationMappedByTargetField($fieldName) - { - return $this->associationMappings[$fieldName]['mappedBy']; - } - - /** - * @param string $targetClass - * - * @return array - */ - public function getAssociationsByTargetClass($targetClass) - { - $relations = []; - - foreach ($this->associationMappings as $mapping) { - if ($mapping['targetEntity'] == $targetClass) { - $relations[$mapping['fieldName']] = $mapping; - } - } - - return $relations; - } - - /** - * @param string|null $className - * - * @return string|null null if the input value is null - */ - public function fullyQualifiedClassName($className) - { - if (empty($className)) { - return $className; - } - - if ($className !== null && strpos($className, '\\') === false && $this->namespace) { - return $this->namespace . '\\' . $className; - } - - return $className; - } - - /** - * @param string $name - * - * @return mixed - */ - public function getMetadataValue($name) - { - - if (isset($this->$name)) { - return $this->$name; - } - - return null; - } - - /** - * Map Embedded Class - * - * @param array $mapping - * - * @throws MappingException - * @return void - */ - public function mapEmbedded(array $mapping) - { - $this->assertFieldNotMapped($mapping['fieldName']); - - $this->embeddedClasses[$mapping['fieldName']] = [ - 'class' => $this->fullyQualifiedClassName($mapping['class']), - 'columnPrefix' => $mapping['columnPrefix'], - 'declaredField' => isset($mapping['declaredField']) ? $mapping['declaredField'] : null, - 'originalField' => isset($mapping['originalField']) ? $mapping['originalField'] : null, - ]; - } - - /** - * Inline the embeddable class - * - * @param string $property - * @param ClassMetadataInfo $embeddable - */ - public function inlineEmbeddable($property, ClassMetadataInfo $embeddable) - { - foreach ($embeddable->fieldMappings as $fieldMapping) { - $fieldMapping['originalClass'] = isset($fieldMapping['originalClass']) - ? $fieldMapping['originalClass'] - : $embeddable->name; - $fieldMapping['declaredField'] = isset($fieldMapping['declaredField']) - ? $property . '.' . $fieldMapping['declaredField'] - : $property; - $fieldMapping['originalField'] = isset($fieldMapping['originalField']) - ? $fieldMapping['originalField'] - : $fieldMapping['fieldName']; - $fieldMapping['fieldName'] = $property . "." . $fieldMapping['fieldName']; - - if (! empty($this->embeddedClasses[$property]['columnPrefix'])) { - $fieldMapping['columnName'] = $this->embeddedClasses[$property]['columnPrefix'] . $fieldMapping['columnName']; - } elseif ($this->embeddedClasses[$property]['columnPrefix'] !== false) { - $fieldMapping['columnName'] = $this->namingStrategy - ->embeddedFieldToColumnName( - $property, - $fieldMapping['columnName'], - $this->reflClass->name, - $embeddable->reflClass->name - ); - } - - $this->mapField($fieldMapping); - } - } - - /** - * @param string $fieldName - * @throws MappingException - */ - private function assertFieldNotMapped($fieldName) - { - if (isset($this->fieldMappings[$fieldName]) || - isset($this->associationMappings[$fieldName]) || - isset($this->embeddedClasses[$fieldName])) { - - throw MappingException::duplicateFieldMapping($this->name, $fieldName); - } - } - - /** - * Gets the sequence name based on class metadata. - * - * @param AbstractPlatform $platform - * @return string - * - * @todo Sequence names should be computed in DBAL depending on the platform - */ - public function getSequenceName(AbstractPlatform $platform) - { - $sequencePrefix = $this->getSequencePrefix($platform); - $columnName = $this->getSingleIdentifierColumnName(); - $sequenceName = $sequencePrefix . '_' . $columnName . '_seq'; - - return $sequenceName; - } - - /** - * Gets the sequence name prefix based on class metadata. - * - * @param AbstractPlatform $platform - * @return string - * - * @todo Sequence names should be computed in DBAL depending on the platform - */ - public function getSequencePrefix(AbstractPlatform $platform) - { - $tableName = $this->getTableName(); - $sequencePrefix = $tableName; - - // Prepend the schema name to the table name if there is one - if ($schemaName = $this->getSchemaName()) { - $sequencePrefix = $schemaName . '.' . $tableName; - - if ( ! $platform->supportsSchemas() && $platform->canEmulateSchemas()) { - $sequencePrefix = $schemaName . '__' . $tableName; - } - } - - return $sequencePrefix; - } - - /** - * @param array $mapping - */ - private function assertMappingOrderBy(array $mapping) - { - if (isset($mapping['orderBy']) && !is_array($mapping['orderBy'])) { - throw new InvalidArgumentException("'orderBy' is expected to be an array, not " . gettype($mapping['orderBy'])); - } - } -} diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index d59fd3bb773..fdd8756e6dc 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -20,10 +20,11 @@ namespace Doctrine\ORM\Mapping\Driver; use Doctrine\Common\Annotations\AnnotationReader; -use Doctrine\Common\Persistence\Mapping\ClassMetadata; +use Doctrine\Common\Persistence\Mapping\ClassMetadata as ClassMetadataInterface; use Doctrine\Common\Persistence\Mapping\Driver\AnnotationDriver as AbstractAnnotationDriver; +use Doctrine\ORM\Annotation; use Doctrine\ORM\Events; -use Doctrine\ORM\Mapping; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; use Doctrine\ORM\Mapping\MappingException; @@ -42,16 +43,15 @@ class AnnotationDriver extends AbstractAnnotationDriver * {@inheritDoc} */ protected $entityAnnotationClasses = [ - Mapping\Entity::class => 1, - Mapping\MappedSuperclass::class => 2, + Annotation\Entity::class => 1, + Annotation\MappedSuperclass::class => 2, ]; /** * {@inheritDoc} */ - public function loadMetadataForClass($className, ClassMetadata $metadata) + public function loadMetadataForClass($className, ClassMetadataInterface $metadata) { - /* @var $metadata \Doctrine\ORM\Mapping\ClassMetadataInfo */ $class = $metadata->getReflectionClass(); if ( ! $class) { @@ -73,8 +73,8 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } // Evaluate Entity annotation - if (isset($classAnnotations[Mapping\Entity::class])) { - $entityAnnot = $classAnnotations[Mapping\Entity::class]; + if (isset($classAnnotations[Annotation\Entity::class])) { + $entityAnnot = $classAnnotations[Annotation\Entity::class]; if ($entityAnnot->repositoryClass !== null) { $metadata->setCustomRepositoryClass($entityAnnot->repositoryClass); } @@ -82,20 +82,20 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) if ($entityAnnot->readOnly) { $metadata->markReadOnly(); } - } else if (isset($classAnnotations[Mapping\MappedSuperclass::class])) { - $mappedSuperclassAnnot = $classAnnotations[Mapping\MappedSuperclass::class]; + } else if (isset($classAnnotations[Annotation\MappedSuperclass::class])) { + $mappedSuperclassAnnot = $classAnnotations[Annotation\MappedSuperclass::class]; $metadata->setCustomRepositoryClass($mappedSuperclassAnnot->repositoryClass); $metadata->isMappedSuperclass = true; - } else if (isset($classAnnotations[Mapping\Embeddable::class])) { + } else if (isset($classAnnotations[Annotation\Embeddable::class])) { $metadata->isEmbeddedClass = true; } else { throw MappingException::classIsNotAValidEntityOrMappedSuperClass($className); } // Evaluate Table annotation - if (isset($classAnnotations[Mapping\Table::class])) { - $tableAnnot = $classAnnotations[Mapping\Table::class]; + if (isset($classAnnotations[Annotation\Table::class])) { + $tableAnnot = $classAnnotations[Annotation\Table::class]; $primaryTable = [ 'name' => $tableAnnot->name, 'schema' => $tableAnnot->schema @@ -145,19 +145,19 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } // Evaluate @Cache annotation - if (isset($classAnnotations[Mapping\Cache::class])) { - $cacheAnnot = $classAnnotations[Mapping\Cache::class]; + if (isset($classAnnotations[Annotation\Cache::class])) { + $cacheAnnot = $classAnnotations[Annotation\Cache::class]; $cacheMap = [ 'region' => $cacheAnnot->region, - 'usage' => constant('Doctrine\ORM\Mapping\ClassMetadata::CACHE_USAGE_' . $cacheAnnot->usage), + 'usage' => constant(sprintf('%s::CACHE_USAGE_%s', ClassMetadata::class, $cacheAnnot->usage)), ]; $metadata->enableCache($cacheMap); } // Evaluate NamedNativeQueries annotation - if (isset($classAnnotations[Mapping\NamedNativeQueries::class])) { - $namedNativeQueriesAnnot = $classAnnotations[Mapping\NamedNativeQueries::class]; + if (isset($classAnnotations[Annotation\NamedNativeQueries::class])) { + $namedNativeQueriesAnnot = $classAnnotations[Annotation\NamedNativeQueries::class]; foreach ($namedNativeQueriesAnnot->value as $namedNativeQuery) { $metadata->addNamedNativeQuery( @@ -172,8 +172,8 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } // Evaluate SqlResultSetMappings annotation - if (isset($classAnnotations[Mapping\SqlResultSetMappings::class])) { - $sqlResultSetMappingsAnnot = $classAnnotations[Mapping\SqlResultSetMappings::class]; + if (isset($classAnnotations[Annotation\SqlResultSetMappings::class])) { + $sqlResultSetMappingsAnnot = $classAnnotations[Annotation\SqlResultSetMappings::class]; foreach ($sqlResultSetMappingsAnnot->value as $resultSetMapping) { $entities = []; @@ -212,15 +212,15 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } // Evaluate NamedQueries annotation - if (isset($classAnnotations[Mapping\NamedQueries::class])) { - $namedQueriesAnnot = $classAnnotations[Mapping\NamedQueries::class]; + if (isset($classAnnotations[Annotation\NamedQueries::class])) { + $namedQueriesAnnot = $classAnnotations[Annotation\NamedQueries::class]; if ( ! is_array($namedQueriesAnnot->value)) { throw new \UnexpectedValueException("@NamedQueries should contain an array of @NamedQuery annotations."); } foreach ($namedQueriesAnnot->value as $namedQuery) { - if ( ! ($namedQuery instanceof Mapping\NamedQuery)) { + if ( ! ($namedQuery instanceof Annotation\NamedQuery)) { throw new \UnexpectedValueException("@NamedQueries should contain an array of @NamedQuery annotations."); } $metadata->addNamedQuery( @@ -233,17 +233,17 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } // Evaluate InheritanceType annotation - if (isset($classAnnotations[Mapping\InheritanceType::class])) { - $inheritanceTypeAnnot = $classAnnotations[Mapping\InheritanceType::class]; + if (isset($classAnnotations[Annotation\InheritanceType::class])) { + $inheritanceTypeAnnot = $classAnnotations[Annotation\InheritanceType::class]; $metadata->setInheritanceType( - constant('Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_' . $inheritanceTypeAnnot->value) + constant(sprintf('%s::INHERITANCE_TYPE_%s', ClassMetadata::class, $inheritanceTypeAnnot->value)) ); - if ($metadata->inheritanceType != Mapping\ClassMetadata::INHERITANCE_TYPE_NONE) { + if ($metadata->inheritanceType != ClassMetadata::INHERITANCE_TYPE_NONE) { // Evaluate DiscriminatorColumn annotation - if (isset($classAnnotations[Mapping\DiscriminatorColumn::class])) { - $discrColumnAnnot = $classAnnotations[Mapping\DiscriminatorColumn::class]; + if (isset($classAnnotations[Annotation\DiscriminatorColumn::class])) { + $discrColumnAnnot = $classAnnotations[Annotation\DiscriminatorColumn::class]; $metadata->setDiscriminatorColumn( [ @@ -258,8 +258,8 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } // Evaluate DiscriminatorMap annotation - if (isset($classAnnotations[Mapping\DiscriminatorMap::class])) { - $discrMapAnnot = $classAnnotations[Mapping\DiscriminatorMap::class]; + if (isset($classAnnotations[Annotation\DiscriminatorMap::class])) { + $discrMapAnnot = $classAnnotations[Annotation\DiscriminatorMap::class]; $metadata->setDiscriminatorMap($discrMapAnnot->value); } } @@ -267,9 +267,12 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate DoctrineChangeTrackingPolicy annotation - if (isset($classAnnotations[Mapping\ChangeTrackingPolicy::class])) { - $changeTrackingAnnot = $classAnnotations[Mapping\ChangeTrackingPolicy::class]; - $metadata->setChangeTrackingPolicy(constant('Doctrine\ORM\Mapping\ClassMetadata::CHANGETRACKING_' . $changeTrackingAnnot->value)); + if (isset($classAnnotations[Annotation\ChangeTrackingPolicy::class])) { + $changeTrackingAnnot = $classAnnotations[Annotation\ChangeTrackingPolicy::class]; + + $metadata->setChangeTrackingPolicy( + constant(sprintf('%s::CHANGETRACKING_%s', ClassMetadata::class, $changeTrackingAnnot->value)) + ); } // Evaluate annotations on properties/fields @@ -289,11 +292,11 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $mapping['fieldName'] = $property->getName(); // Evaluate @Cache annotation - if (($cacheAnnot = $this->reader->getPropertyAnnotation($property, Mapping\Cache::class)) !== null) { + if (($cacheAnnot = $this->reader->getPropertyAnnotation($property, Annotation\Cache::class)) !== null) { $mapping['cache'] = $metadata->getAssociationCacheDefaults( $mapping['fieldName'], [ - 'usage' => constant('Doctrine\ORM\Mapping\ClassMetadata::CACHE_USAGE_' . $cacheAnnot->usage), + 'usage' => constant(sprintf('%s::CACHE_USAGE_%s', ClassMetadata::class, $cacheAnnot->usage)), 'region' => $cacheAnnot->region, ] ); @@ -301,9 +304,9 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Check for JoinColumn/JoinColumns annotations $joinColumns = []; - if ($joinColumnAnnot = $this->reader->getPropertyAnnotation($property, Mapping\JoinColumn::class)) { + if ($joinColumnAnnot = $this->reader->getPropertyAnnotation($property, Annotation\JoinColumn::class)) { $joinColumns[] = $this->joinColumnToArray($joinColumnAnnot); - } else if ($joinColumnsAnnot = $this->reader->getPropertyAnnotation($property, Mapping\JoinColumns::class)) { + } else if ($joinColumnsAnnot = $this->reader->getPropertyAnnotation($property, Annotation\JoinColumns::class)) { foreach ($joinColumnsAnnot->value as $joinColumn) { $joinColumns[] = $this->joinColumnToArray($joinColumn); } @@ -311,29 +314,31 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Field can only be annotated with one of: // @Column, @OneToOne, @OneToMany, @ManyToOne, @ManyToMany - if ($columnAnnot = $this->reader->getPropertyAnnotation($property, Mapping\Column::class)) { + if ($columnAnnot = $this->reader->getPropertyAnnotation($property, Annotation\Column::class)) { if ($columnAnnot->type == null) { throw MappingException::propertyTypeIsRequired($className, $property->getName()); } $mapping = $this->columnToArray($property->getName(), $columnAnnot); - if ($idAnnot = $this->reader->getPropertyAnnotation($property, Mapping\Id::class)) { + if ($idAnnot = $this->reader->getPropertyAnnotation($property, Annotation\Id::class)) { $mapping['id'] = true; } - if ($generatedValueAnnot = $this->reader->getPropertyAnnotation($property, Mapping\GeneratedValue::class)) { - $metadata->setIdGeneratorType(constant('Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_' . $generatedValueAnnot->strategy)); + if ($generatedValueAnnot = $this->reader->getPropertyAnnotation($property, Annotation\GeneratedValue::class)) { + $metadata->setIdGeneratorType( + constant(sprintf('%s::GENERATOR_TYPE_%s', ClassMetadata::class, $generatedValueAnnot->strategy)) + ); } - if ($this->reader->getPropertyAnnotation($property, Mapping\Version::class)) { + if ($this->reader->getPropertyAnnotation($property, Annotation\Version::class)) { $metadata->setVersionMapping($mapping); } $metadata->mapField($mapping); // Check for SequenceGenerator/TableGenerator definition - if ($seqGeneratorAnnot = $this->reader->getPropertyAnnotation($property, Mapping\SequenceGenerator::class)) { + if ($seqGeneratorAnnot = $this->reader->getPropertyAnnotation($property, Annotation\SequenceGenerator::class)) { $metadata->setSequenceGeneratorDefinition( [ 'sequenceName' => $seqGeneratorAnnot->sequenceName, @@ -343,15 +348,15 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) ); } else if ($this->reader->getPropertyAnnotation($property, 'Doctrine\ORM\Mapping\TableGenerator')) { throw MappingException::tableIdGeneratorNotImplemented($className); - } else if ($customGeneratorAnnot = $this->reader->getPropertyAnnotation($property, Mapping\CustomIdGenerator::class)) { + } else if ($customGeneratorAnnot = $this->reader->getPropertyAnnotation($property, Annotation\CustomIdGenerator::class)) { $metadata->setCustomGeneratorDefinition( [ 'class' => $customGeneratorAnnot->class ] ); } - } else if ($oneToOneAnnot = $this->reader->getPropertyAnnotation($property, Mapping\OneToOne::class)) { - if ($idAnnot = $this->reader->getPropertyAnnotation($property, Mapping\Id::class)) { + } else if ($oneToOneAnnot = $this->reader->getPropertyAnnotation($property, Annotation\OneToOne::class)) { + if ($idAnnot = $this->reader->getPropertyAnnotation($property, Annotation\Id::class)) { $mapping['id'] = true; } @@ -363,7 +368,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $mapping['orphanRemoval'] = $oneToOneAnnot->orphanRemoval; $mapping['fetch'] = $this->getFetchMode($className, $oneToOneAnnot->fetch); $metadata->mapOneToOne($mapping); - } else if ($oneToManyAnnot = $this->reader->getPropertyAnnotation($property, Mapping\OneToMany::class)) { + } else if ($oneToManyAnnot = $this->reader->getPropertyAnnotation($property, Annotation\OneToMany::class)) { $mapping['mappedBy'] = $oneToManyAnnot->mappedBy; $mapping['targetEntity'] = $oneToManyAnnot->targetEntity; $mapping['cascade'] = $oneToManyAnnot->cascade; @@ -371,13 +376,13 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $mapping['orphanRemoval'] = $oneToManyAnnot->orphanRemoval; $mapping['fetch'] = $this->getFetchMode($className, $oneToManyAnnot->fetch); - if ($orderByAnnot = $this->reader->getPropertyAnnotation($property, Mapping\OrderBy::class)) { + if ($orderByAnnot = $this->reader->getPropertyAnnotation($property, Annotation\OrderBy::class)) { $mapping['orderBy'] = $orderByAnnot->value; } $metadata->mapOneToMany($mapping); - } else if ($manyToOneAnnot = $this->reader->getPropertyAnnotation($property, Mapping\ManyToOne::class)) { - if ($idAnnot = $this->reader->getPropertyAnnotation($property, Mapping\Id::class)) { + } else if ($manyToOneAnnot = $this->reader->getPropertyAnnotation($property, Annotation\ManyToOne::class)) { + if ($idAnnot = $this->reader->getPropertyAnnotation($property, Annotation\Id::class)) { $mapping['id'] = true; } @@ -387,10 +392,10 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $mapping['targetEntity'] = $manyToOneAnnot->targetEntity; $mapping['fetch'] = $this->getFetchMode($className, $manyToOneAnnot->fetch); $metadata->mapManyToOne($mapping); - } else if ($manyToManyAnnot = $this->reader->getPropertyAnnotation($property, Mapping\ManyToMany::class)) { + } else if ($manyToManyAnnot = $this->reader->getPropertyAnnotation($property, Annotation\ManyToMany::class)) { $joinTable = []; - if ($joinTableAnnot = $this->reader->getPropertyAnnotation($property, Mapping\JoinTable::class)) { + if ($joinTableAnnot = $this->reader->getPropertyAnnotation($property, Annotation\JoinTable::class)) { $joinTable = [ 'name' => $joinTableAnnot->name, 'schema' => $joinTableAnnot->schema @@ -414,12 +419,12 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $mapping['orphanRemoval'] = $manyToManyAnnot->orphanRemoval; $mapping['fetch'] = $this->getFetchMode($className, $manyToManyAnnot->fetch); - if ($orderByAnnot = $this->reader->getPropertyAnnotation($property, Mapping\OrderBy::class)) { + if ($orderByAnnot = $this->reader->getPropertyAnnotation($property, Annotation\OrderBy::class)) { $mapping['orderBy'] = $orderByAnnot->value; } $metadata->mapManyToMany($mapping); - } else if ($embeddedAnnot = $this->reader->getPropertyAnnotation($property, Mapping\Embedded::class)) { + } else if ($embeddedAnnot = $this->reader->getPropertyAnnotation($property, Annotation\Embedded::class)) { $mapping['class'] = $embeddedAnnot->class; $mapping['columnPrefix'] = $embeddedAnnot->columnPrefix; @@ -428,8 +433,8 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } // Evaluate AssociationOverrides annotation - if (isset($classAnnotations[Mapping\AssociationOverrides::class])) { - $associationOverridesAnnot = $classAnnotations[Mapping\AssociationOverrides::class]; + if (isset($classAnnotations[Annotation\AssociationOverrides::class])) { + $associationOverridesAnnot = $classAnnotations[Annotation\AssociationOverrides::class]; foreach ($associationOverridesAnnot->value as $associationOverride) { $override = []; @@ -480,8 +485,8 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } // Evaluate AttributeOverrides annotation - if (isset($classAnnotations[Mapping\AttributeOverrides::class])) { - $attributeOverridesAnnot = $classAnnotations[Mapping\AttributeOverrides::class]; + if (isset($classAnnotations[Annotation\AttributeOverrides::class])) { + $attributeOverridesAnnot = $classAnnotations[Annotation\AttributeOverrides::class]; foreach ($attributeOverridesAnnot->value as $attributeOverrideAnnot) { $attributeOverride = $this->columnToArray($attributeOverrideAnnot->name, $attributeOverrideAnnot->column); @@ -491,8 +496,8 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } // Evaluate EntityListeners annotation - if (isset($classAnnotations[Mapping\EntityListeners::class])) { - $entityListenersAnnot = $classAnnotations[Mapping\EntityListeners::class]; + if (isset($classAnnotations[Annotation\EntityListeners::class])) { + $entityListenersAnnot = $classAnnotations[Annotation\EntityListeners::class]; foreach ($entityListenersAnnot->value as $item) { $listenerClassName = $metadata->fullyQualifiedClassName($item); @@ -523,7 +528,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } // Evaluate @HasLifecycleCallbacks annotation - if (isset($classAnnotations[Mapping\HasLifecycleCallbacks::class])) { + if (isset($classAnnotations[Annotation\HasLifecycleCallbacks::class])) { /* @var $method \ReflectionMethod */ foreach ($class->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { foreach ($this->getMethodCallbacks($method) as $value) { @@ -545,11 +550,13 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) */ private function getFetchMode($className, $fetchMode) { - if ( ! defined('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . $fetchMode)) { + $fetchModeConstant = sprintf('%s::FETCH_%s', ClassMetadata::class, $fetchMode); + + if ( ! defined($fetchModeConstant)) { throw MappingException::invalidFetchMode($className, $fetchMode); } - return constant('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . $fetchMode); + return constant($fetchModeConstant); } /** @@ -565,35 +572,35 @@ private function getMethodCallbacks(\ReflectionMethod $method) $annotations = $this->reader->getMethodAnnotations($method); foreach ($annotations as $annot) { - if ($annot instanceof Mapping\PrePersist) { + if ($annot instanceof Annotation\PrePersist) { $callbacks[] = [$method->name, Events::prePersist]; } - if ($annot instanceof Mapping\PostPersist) { + if ($annot instanceof Annotation\PostPersist) { $callbacks[] = [$method->name, Events::postPersist]; } - if ($annot instanceof Mapping\PreUpdate) { + if ($annot instanceof Annotation\PreUpdate) { $callbacks[] = [$method->name, Events::preUpdate]; } - if ($annot instanceof Mapping\PostUpdate) { + if ($annot instanceof Annotation\PostUpdate) { $callbacks[] = [$method->name, Events::postUpdate]; } - if ($annot instanceof Mapping\PreRemove) { + if ($annot instanceof Annotation\PreRemove) { $callbacks[] = [$method->name, Events::preRemove]; } - if ($annot instanceof Mapping\PostRemove) { + if ($annot instanceof Annotation\PostRemove) { $callbacks[] = [$method->name, Events::postRemove]; } - if ($annot instanceof Mapping\PostLoad) { + if ($annot instanceof Annotation\PostLoad) { $callbacks[] = [$method->name, Events::postLoad]; } - if ($annot instanceof Mapping\PreFlush) { + if ($annot instanceof Annotation\PreFlush) { $callbacks[] = [$method->name, Events::preFlush]; } } @@ -604,10 +611,11 @@ private function getMethodCallbacks(\ReflectionMethod $method) /** * Parse the given JoinColumn as array * - * @param Mapping\JoinColumn $joinColumn + * @param Annotation\JoinColumn $joinColumn + * * @return array */ - private function joinColumnToArray(Mapping\JoinColumn $joinColumn) + private function joinColumnToArray(Annotation\JoinColumn $joinColumn) { return [ 'name' => $joinColumn->name, @@ -622,12 +630,12 @@ private function joinColumnToArray(Mapping\JoinColumn $joinColumn) /** * Parse the given Column as array * - * @param string $fieldName - * @param Mapping\Column $column + * @param string $fieldName + * @param Annotation\Column $column * * @return array */ - private function columnToArray($fieldName, Mapping\Column $column) + private function columnToArray($fieldName, Annotation\Column $column) { $mapping = [ 'fieldName' => $fieldName, diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index 756399f6d43..417564dfa36 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -20,14 +20,14 @@ namespace Doctrine\ORM\Mapping\Driver; use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; -use Doctrine\Common\Persistence\Mapping\ClassMetadata; +use Doctrine\Common\Persistence\Mapping\ClassMetadata as ClassMetadataInterface; use Doctrine\Common\Util\Inflector; use Doctrine\DBAL\Schema\AbstractSchemaManager; use Doctrine\DBAL\Schema\SchemaException; use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Schema\Column; use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\MappingException; /** @@ -170,7 +170,7 @@ public function setTables($entityTables, $manyToManyTables) /** * {@inheritDoc} */ - public function loadMetadataForClass($className, ClassMetadata $metadata) + public function loadMetadataForClass($className, ClassMetadataInterface $metadata) { $this->reverseEngineerMappingFromDatabase(); @@ -312,9 +312,9 @@ private function reverseEngineerMappingFromDatabase() /** * Build indexes from a class metadata. * - * @param \Doctrine\ORM\Mapping\ClassMetadataInfo $metadata + * @param ClassMetadata $metadata */ - private function buildIndexes(ClassMetadataInfo $metadata) + private function buildIndexes(ClassMetadata $metadata) { $tableName = $metadata->table['name']; $indexes = $this->tables[$tableName]->getIndexes(); @@ -337,9 +337,9 @@ private function buildIndexes(ClassMetadataInfo $metadata) /** * Build field mapping from class metadata. * - * @param \Doctrine\ORM\Mapping\ClassMetadataInfo $metadata + * @param ClassMetadata $metadata */ - private function buildFieldMappings(ClassMetadataInfo $metadata) + private function buildFieldMappings(ClassMetadata $metadata) { $tableName = $metadata->table['name']; $columns = $this->tables[$tableName]->getColumns(); @@ -371,7 +371,7 @@ private function buildFieldMappings(ClassMetadataInfo $metadata) // We need to check for the columns here, because we might have associations as id as well. if ($ids && count($primaryKeys) == 1) { - $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); } foreach ($fieldMappings as $fieldMapping) { @@ -439,9 +439,9 @@ private function buildFieldMapping($tableName, Column $column) /** * Build to one (one to one, many to one) association mapping from class metadata. * - * @param \Doctrine\ORM\Mapping\ClassMetadataInfo $metadata + * @param ClassMetadata $metadata */ - private function buildToOneAssociationMappings(ClassMetadataInfo $metadata) + private function buildToOneAssociationMappings(ClassMetadata $metadata) { $tableName = $metadata->table['name']; $primaryKeys = $this->getTablePrimaryKeys($this->tables[$tableName]); diff --git a/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php b/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php deleted file mode 100644 index 8f4a34c0ef4..00000000000 --- a/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php +++ /dev/null @@ -1,69 +0,0 @@ -. - */ - -require_once __DIR__.'/../Annotation.php'; -require_once __DIR__.'/../Entity.php'; -require_once __DIR__.'/../Embeddable.php'; -require_once __DIR__.'/../Embedded.php'; -require_once __DIR__.'/../MappedSuperclass.php'; -require_once __DIR__.'/../InheritanceType.php'; -require_once __DIR__.'/../DiscriminatorColumn.php'; -require_once __DIR__.'/../DiscriminatorMap.php'; -require_once __DIR__.'/../Id.php'; -require_once __DIR__.'/../GeneratedValue.php'; -require_once __DIR__.'/../Version.php'; -require_once __DIR__.'/../JoinColumn.php'; -require_once __DIR__.'/../JoinColumns.php'; -require_once __DIR__.'/../Column.php'; -require_once __DIR__.'/../OneToOne.php'; -require_once __DIR__.'/../OneToMany.php'; -require_once __DIR__.'/../ManyToOne.php'; -require_once __DIR__.'/../ManyToMany.php'; -require_once __DIR__.'/../Table.php'; -require_once __DIR__.'/../UniqueConstraint.php'; -require_once __DIR__.'/../Index.php'; -require_once __DIR__.'/../JoinTable.php'; -require_once __DIR__.'/../SequenceGenerator.php'; -require_once __DIR__.'/../CustomIdGenerator.php'; -require_once __DIR__.'/../ChangeTrackingPolicy.php'; -require_once __DIR__.'/../OrderBy.php'; -require_once __DIR__.'/../NamedQueries.php'; -require_once __DIR__.'/../NamedQuery.php'; -require_once __DIR__.'/../HasLifecycleCallbacks.php'; -require_once __DIR__.'/../PrePersist.php'; -require_once __DIR__.'/../PostPersist.php'; -require_once __DIR__.'/../PreUpdate.php'; -require_once __DIR__.'/../PostUpdate.php'; -require_once __DIR__.'/../PreRemove.php'; -require_once __DIR__.'/../PostRemove.php'; -require_once __DIR__.'/../PostLoad.php'; -require_once __DIR__.'/../PreFlush.php'; -require_once __DIR__.'/../FieldResult.php'; -require_once __DIR__.'/../ColumnResult.php'; -require_once __DIR__.'/../EntityResult.php'; -require_once __DIR__.'/../NamedNativeQuery.php'; -require_once __DIR__.'/../NamedNativeQueries.php'; -require_once __DIR__.'/../SqlResultSetMapping.php'; -require_once __DIR__.'/../SqlResultSetMappings.php'; -require_once __DIR__.'/../AssociationOverride.php'; -require_once __DIR__.'/../AssociationOverrides.php'; -require_once __DIR__.'/../AttributeOverride.php'; -require_once __DIR__.'/../AttributeOverrides.php'; -require_once __DIR__.'/../EntityListeners.php'; -require_once __DIR__.'/../Cache.php'; diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 39af412c9f2..74a0760b51b 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -54,23 +54,23 @@ public function __construct($locator, $fileExtension = self::DEFAULT_FILE_EXTENS */ public function loadMetadataForClass($className, ClassMetadata $metadata) { - /* @var $metadata \Doctrine\ORM\Mapping\ClassMetadataInfo */ - /* @var $xmlRoot SimpleXMLElement */ + /* @var \Doctrine\ORM\Mapping\ClassMetadata $metadata */ + /* @var \SimpleXMLElement $xmlRoot */ $xmlRoot = $this->getElement($className); - if ($xmlRoot->getName() == 'entity') { + if ($xmlRoot->getName() === 'entity') { if (isset($xmlRoot['repository-class'])) { $metadata->setCustomRepositoryClass((string) $xmlRoot['repository-class']); } if (isset($xmlRoot['read-only']) && $this->evaluateBoolean($xmlRoot['read-only'])) { $metadata->markReadOnly(); } - } else if ($xmlRoot->getName() == 'mapped-superclass') { + } else if ($xmlRoot->getName() === 'mapped-superclass') { $metadata->setCustomRepositoryClass( isset($xmlRoot['repository-class']) ? (string) $xmlRoot['repository-class'] : null ); $metadata->isMappedSuperclass = true; - } else if ($xmlRoot->getName() == 'embeddable') { + } else if ($xmlRoot->getName() === 'embeddable') { $metadata->isEmbeddedClass = true; } else { throw MappingException::classIsNotAValidEntityOrMappedSuperClass($className); @@ -170,6 +170,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate if (isset($xmlRoot->{'discriminator-column'})) { $discrColumn = $xmlRoot->{'discriminator-column'}; + $metadata->setDiscriminatorColumn( [ 'name' => isset($discrColumn['name']) ? (string) $discrColumn['name'] : null, @@ -185,9 +186,11 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate if (isset($xmlRoot->{'discriminator-map'})) { $map = []; + foreach ($xmlRoot->{'discriminator-map'}->{'discriminator-mapping'} as $discrMapElement) { $map[(string) $discrMapElement['value']] = (string) $discrMapElement['class']; } + $metadata->setDiscriminatorMap($map); } } @@ -196,8 +199,9 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate if (isset($xmlRoot['change-tracking-policy'])) { - $metadata->setChangeTrackingPolicy(constant('Doctrine\ORM\Mapping\ClassMetadata::CHANGETRACKING_' - . strtoupper((string) $xmlRoot['change-tracking-policy']))); + $metadata->setChangeTrackingPolicy( + constant('Doctrine\ORM\Mapping\ClassMetadata::CHANGETRACKING_' . strtoupper((string) $xmlRoot['change-tracking-policy'])) + ); } // Evaluate @@ -247,6 +251,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // The mapping assignment is done in 2 times as a bug might occurs on some php/xml lib versions // The internal SimpleXmlIterator get resetted, to this generate a duplicate field exception $mappings = []; + // Evaluate mappings if (isset($xmlRoot->field)) { foreach ($xmlRoot->field as $fieldMapping) { @@ -291,9 +296,11 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate mappings $associationIds = []; + foreach ($xmlRoot->id as $idElement) { if (isset($idElement['association-key']) && $this->evaluateBoolean($idElement['association-key'])) { $associationIds[(string) $idElement['name']] = true; + continue; } @@ -325,15 +332,19 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $metadata->mapField($mapping); if (isset($idElement->generator)) { - $strategy = isset($idElement->generator['strategy']) ? - (string) $idElement->generator['strategy'] : 'AUTO'; - $metadata->setIdGeneratorType(constant('Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_' - . $strategy)); + $strategy = isset($idElement->generator['strategy']) + ? (string) $idElement->generator['strategy'] + : 'AUTO'; + + $metadata->setIdGeneratorType( + constant('Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_' . $strategy) + ); } // Check for SequenceGenerator/TableGenerator definition if (isset($idElement->{'sequence-generator'})) { $seqGenerator = $idElement->{'sequence-generator'}; + $metadata->setSequenceGeneratorDefinition( [ 'sequenceName' => (string) $seqGenerator['sequence-name'], @@ -343,11 +354,8 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) ); } else if (isset($idElement->{'custom-id-generator'})) { $customGenerator = $idElement->{'custom-id-generator'}; - $metadata->setCustomGeneratorDefinition( - [ - 'class' => (string) $customGenerator['class'] - ] - ); + + $metadata->setCustomGeneratorDefinition(['class' => (string) $customGenerator['class']]); } else if (isset($idElement->{'table-generator'})) { throw MappingException::tableIdGeneratorNotImplemented($className); } @@ -375,6 +383,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) if (isset($oneToOneElement['inversed-by'])) { $mapping['inversedBy'] = (string) $oneToOneElement['inversed-by']; } + $joinColumns = []; if (isset($oneToOneElement->{'join-column'})) { @@ -544,9 +553,11 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) if (isset($manyToManyElement->{'order-by'})) { $orderBy = []; + foreach ($manyToManyElement->{'order-by'}->{'order-by-field'} as $orderByField) { $orderBy[(string) $orderByField['name']] = (string) $orderByField['direction']; } + $mapping['orderBy'] = $orderBy; } @@ -569,9 +580,12 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) if (isset($xmlRoot->{'attribute-overrides'})) { foreach ($xmlRoot->{'attribute-overrides'}->{'attribute-override'} as $overrideElement) { $fieldName = (string) $overrideElement['name']; + foreach ($overrideElement->field as $field) { $mapping = $this->columnToArray($field); + $mapping['fieldName'] = $fieldName; + $metadata->setAttributeOverride($fieldName, $mapping); } } @@ -586,9 +600,11 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Check for join-columns if (isset($overrideElement->{'join-columns'})) { $joinColumns = []; + foreach ($overrideElement->{'join-columns'}->{'join-column'} as $joinColumnElement) { $joinColumns[] = $this->joinColumnToArray($joinColumnElement); } + $override['joinColumns'] = $joinColumns; } @@ -642,6 +658,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) if (isset($xmlRoot->{'entity-listeners'})) { foreach ($xmlRoot->{'entity-listeners'}->{'entity-listener'} as $listenerElement) { $className = (string) $listenerElement['class']; + // Evaluate the listener using naming convention. if ($listenerElement->count() === 0) { EntityListenerBuilder::bindEntityListener($metadata, $className); @@ -819,6 +836,7 @@ private function cacheToArray(SimpleXMLElement $cacheMapping) private function _getCascadeMappings(SimpleXMLElement $cascadeElement) { $cascades = []; + /* @var $action SimpleXmlElement */ foreach ($cascadeElement->children() as $action) { // According to the JPA specifications, XML uses "cascade-persist" diff --git a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php index c4fb45ecedd..441d41ad055 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php @@ -52,7 +52,7 @@ public function __construct($locator, $fileExtension = self::DEFAULT_FILE_EXTENS */ public function loadMetadataForClass($className, ClassMetadata $metadata) { - /* @var $metadata \Doctrine\ORM\Mapping\ClassMetadataInfo */ + /* @var \Doctrine\ORM\Mapping\ClassMetadata $metadata */ $element = $this->getElement($className); if ($element['type'] == 'entity') { diff --git a/lib/Doctrine/ORM/Proxy/ProxyFactory.php b/lib/Doctrine/ORM/Proxy/ProxyFactory.php index 6bc7dc5272a..ca610aaf29b 100644 --- a/lib/Doctrine/ORM/Proxy/ProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/ProxyFactory.php @@ -90,7 +90,7 @@ public function __construct(EntityManagerInterface $em, $proxyDir, $proxyNs, $au */ protected function skipClass(ClassMetadata $metadata) { - /* @var $metadata \Doctrine\ORM\Mapping\ClassMetadataInfo */ + /* @var \Doctrine\ORM\Mapping\ClassMetadata $metadata */ return $metadata->isMappedSuperclass || $metadata->getReflectionClass()->isAbstract(); } diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index 887d02c6f5a..c7285b5eadd 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -20,7 +20,7 @@ namespace Doctrine\ORM\Query; use Doctrine\ORM\EntityManagerInterface; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Utility\PersisterHelper; @@ -161,7 +161,7 @@ protected function addAllClassFields($class, $alias, $columnAliasMap = []) } foreach ($classMetadata->associationMappings as $associationMapping) { - if ($associationMapping['isOwningSide'] && $associationMapping['type'] & ClassMetadataInfo::TO_ONE) { + if ($associationMapping['isOwningSide'] && $associationMapping['type'] & ClassMetadata::TO_ONE) { $targetClass = $this->em->getClassMetadata($associationMapping['targetEntity']); $isIdentifier = isset($associationMapping['id']) && $associationMapping['id'] === true; @@ -180,7 +180,7 @@ protected function addAllClassFields($class, $alias, $columnAliasMap = []) } } - private function isInheritanceSupported(ClassMetadataInfo $classMetadata) + private function isInheritanceSupported(ClassMetadata $classMetadata) { if ($classMetadata->isInheritanceTypeSingleTable() && in_array($classMetadata->name, $classMetadata->discriminatorMap, true)) { @@ -240,7 +240,7 @@ private function getColumnAliasMap($className, $mode, array $customRenameColumns } foreach ($class->associationMappings as $associationMapping) { - if ($associationMapping['isOwningSide'] && $associationMapping['type'] & ClassMetadataInfo::TO_ONE) { + if ($associationMapping['isOwningSide'] && $associationMapping['type'] & ClassMetadata::TO_ONE) { foreach ($associationMapping['joinColumns'] as $joinColumn) { $columnName = $joinColumn['name']; $columnAlias[$columnName] = $this->getColumnAlias($columnName, $mode, $customRenameColumns); @@ -254,12 +254,12 @@ private function getColumnAliasMap($className, $mode, array $customRenameColumns /** * Adds the mappings of the results of native SQL queries to the result set. * - * @param ClassMetadataInfo $class - * @param array $queryMapping + * @param ClassMetadata $class + * @param array $queryMapping * * @return ResultSetMappingBuilder */ - public function addNamedNativeQueryMapping(ClassMetadataInfo $class, array $queryMapping) + public function addNamedNativeQueryMapping(ClassMetadata $class, array $queryMapping) { if (isset($queryMapping['resultClass'])) { return $this->addNamedNativeQueryResultClassMapping($class, $queryMapping['resultClass']); @@ -271,12 +271,12 @@ public function addNamedNativeQueryMapping(ClassMetadataInfo $class, array $quer /** * Adds the class mapping of the results of native SQL queries to the result set. * - * @param ClassMetadataInfo $class - * @param string $resultClassName + * @param ClassMetadata $class + * @param string $resultClassName * * @return ResultSetMappingBuilder */ - public function addNamedNativeQueryResultClassMapping(ClassMetadataInfo $class, $resultClassName) + public function addNamedNativeQueryResultClassMapping(ClassMetadata $class, $resultClassName) { $classMetadata = $this->em->getClassMetadata($resultClassName); $shortName = $classMetadata->reflClass->getShortName(); @@ -298,7 +298,7 @@ public function addNamedNativeQueryResultClassMapping(ClassMetadataInfo $class, } foreach ($classMetadata->associationMappings as $associationMapping) { - if ($associationMapping['isOwningSide'] && $associationMapping['type'] & ClassMetadataInfo::TO_ONE) { + if ($associationMapping['isOwningSide'] && $associationMapping['type'] & ClassMetadata::TO_ONE) { $targetClass = $this->em->getClassMetadata($associationMapping['targetEntity']); foreach ($associationMapping['joinColumns'] as $joinColumn) { @@ -316,12 +316,12 @@ public function addNamedNativeQueryResultClassMapping(ClassMetadataInfo $class, /** * Adds the result set mapping of the results of native SQL queries to the result set. * - * @param ClassMetadataInfo $class - * @param string $resultSetMappingName + * @param ClassMetadata $class + * @param string $resultSetMappingName * * @return ResultSetMappingBuilder */ - public function addNamedNativeQueryResultSetMapping(ClassMetadataInfo $class, $resultSetMappingName) + public function addNamedNativeQueryResultSetMapping(ClassMetadata $class, $resultSetMappingName) { $counter = 0; $resultMapping = $class->getSqlResultSetMapping($resultSetMappingName); @@ -367,16 +367,16 @@ public function addNamedNativeQueryResultSetMapping(ClassMetadataInfo $class, $r /** * Adds the entity result mapping of the results of native SQL queries to the result set. * - * @param ClassMetadataInfo $classMetadata - * @param array $entityMapping - * @param string $alias + * @param ClassMetadata $classMetadata + * @param array $entityMapping + * @param string $alias * * @return ResultSetMappingBuilder * * @throws MappingException * @throws \InvalidArgumentException */ - public function addNamedNativeQueryEntityResultMapping(ClassMetadataInfo $classMetadata, array $entityMapping, $alias) + public function addNamedNativeQueryEntityResultMapping(ClassMetadata $classMetadata, array $entityMapping, $alias) { if (isset($entityMapping['discriminatorColumn']) && $entityMapping['discriminatorColumn']) { $discriminatorColumn = $entityMapping['discriminatorColumn']; diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 98f58ad8c69..64efb80cd49 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -22,7 +22,6 @@ use Doctrine\DBAL\LockMode; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\ClassMetadataInfo; use Doctrine\ORM\OptimisticLockException; use Doctrine\ORM\Query; use Doctrine\ORM\Utility\PersisterHelper; @@ -1677,7 +1676,7 @@ public function walkGroupByItem($groupByItem) } foreach ($this->queryComponents[$groupByItem]['metadata']->associationMappings as $mapping) { - if ($mapping['isOwningSide'] && $mapping['type'] & ClassMetadataInfo::TO_ONE) { + if ($mapping['isOwningSide'] && $mapping['type'] & ClassMetadata::TO_ONE) { $item = new AST\PathExpression(AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION, $groupByItem, $mapping['fieldName']); $item->type = AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION; diff --git a/lib/Doctrine/ORM/Tools/ConvertDoctrine1Schema.php b/lib/Doctrine/ORM/Tools/ConvertDoctrine1Schema.php index 408cb52d238..643bb99d08d 100644 --- a/lib/Doctrine/ORM/Tools/ConvertDoctrine1Schema.php +++ b/lib/Doctrine/ORM/Tools/ConvertDoctrine1Schema.php @@ -19,7 +19,7 @@ namespace Doctrine\ORM\Tools; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Common\Util\Inflector; use Doctrine\DBAL\Types\Type; use Symfony\Component\Yaml\Yaml; @@ -65,10 +65,10 @@ public function __construct($from) } /** - * Gets an array of ClassMetadataInfo instances from the passed + * Gets an array of ClassMetadata instances from the passed * Doctrine 1 schema. * - * @return array An array of ClassMetadataInfo instances + * @return array An array of ClassMetadata instances */ public function getMetadata() { @@ -86,7 +86,7 @@ public function getMetadata() $metadatas = []; foreach ($schema as $className => $mappingInformation) { - $metadatas[] = $this->convertToClassMetadataInfo($className, $mappingInformation); + $metadatas[] = $this->convertToClassMetadata($className, $mappingInformation); } return $metadatas; @@ -96,11 +96,11 @@ public function getMetadata() * @param string $className * @param array $mappingInformation * - * @return \Doctrine\ORM\Mapping\ClassMetadataInfo + * @return ClassMetadata */ - private function convertToClassMetadataInfo($className, $mappingInformation) + private function convertToClassMetadata($className, $mappingInformation) { - $metadata = new ClassMetadataInfo($className); + $metadata = new ClassMetadata($className); $this->convertTableName($className, $mappingInformation, $metadata); $this->convertColumns($className, $mappingInformation, $metadata); @@ -111,13 +111,13 @@ private function convertToClassMetadataInfo($className, $mappingInformation) } /** - * @param string $className - * @param array $model - * @param ClassMetadataInfo $metadata + * @param string $className + * @param array $model + * @param ClassMetadata $metadata * * @return void */ - private function convertTableName($className, array $model, ClassMetadataInfo $metadata) + private function convertTableName($className, array $model, ClassMetadata $metadata) { if (isset($model['tableName']) && $model['tableName']) { $e = explode('.', $model['tableName']); @@ -132,13 +132,13 @@ private function convertTableName($className, array $model, ClassMetadataInfo $m } /** - * @param string $className - * @param array $model - * @param ClassMetadataInfo $metadata + * @param string $className + * @param array $model + * @param ClassMetadata $metadata * * @return void */ - private function convertColumns($className, array $model, ClassMetadataInfo $metadata) + private function convertColumns($className, array $model, ClassMetadata $metadata) { $id = false; @@ -160,21 +160,21 @@ private function convertColumns($className, array $model, ClassMetadataInfo $met 'id' => true ]; $metadata->mapField($fieldMapping); - $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); } } /** - * @param string $className - * @param string $name - * @param string|array $column - * @param ClassMetadataInfo $metadata + * @param string $className + * @param string $name + * @param string|array $column + * @param ClassMetadata $metadata * * @return array * * @throws ToolsException */ - private function convertColumn($className, $name, $column, ClassMetadataInfo $metadata) + private function convertColumn($className, $name, $column, ClassMetadata $metadata) { if (is_string($column)) { $string = $column; @@ -233,9 +233,9 @@ private function convertColumn($className, $name, $column, ClassMetadataInfo $me $metadata->mapField($fieldMapping); if (isset($column['autoincrement'])) { - $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); } elseif (isset($column['sequence'])) { - $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_SEQUENCE); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); $definition = [ 'sequenceName' => is_array($column['sequence']) ? $column['sequence']['name']:$column['sequence'] @@ -256,13 +256,13 @@ private function convertColumn($className, $name, $column, ClassMetadataInfo $me } /** - * @param string $className - * @param array $model - * @param ClassMetadataInfo $metadata + * @param string $className + * @param array $model + * @param ClassMetadata $metadata * * @return void */ - private function convertIndexes($className, array $model, ClassMetadataInfo $metadata) + private function convertIndexes($className, array $model, ClassMetadata $metadata) { if (empty($model['indexes'])) { return; @@ -279,13 +279,13 @@ private function convertIndexes($className, array $model, ClassMetadataInfo $met } /** - * @param string $className - * @param array $model - * @param ClassMetadataInfo $metadata + * @param string $className + * @param array $model + * @param ClassMetadata $metadata * * @return void */ - private function convertRelations($className, array $model, ClassMetadataInfo $metadata) + private function convertRelations($className, array $model, ClassMetadata $metadata) { if (empty($model['relations'])) { return; diff --git a/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php b/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php index 7a3ec6f893c..560df367925 100644 --- a/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php @@ -23,7 +23,7 @@ use Doctrine\ORM\Mapping\ClassMetadataFactory; /** - * The DisconnectedClassMetadataFactory is used to create ClassMetadataInfo objects + * The DisconnectedClassMetadataFactory is used to create ClassMetadata objects * that do not require the entity class actually exist. This allows us to * load some mapping information and use it to do things like generate code * from the mapping information. diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index fafa51f3daa..cece90d8df2 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -22,10 +22,9 @@ use Doctrine\Common\Collections\Collection; use Doctrine\Common\Util\Inflector; use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Mapping\ClassMetadataInfo; - +use Doctrine\ORM\Mapping\ClassMetadata; /** - * Generic class used to generate PHP5 entity classes from ClassMetadataInfo instances. + * Generic class used to generate PHP5 entity classes from ClassMetadata instances. * * [php] * $classes = $em->getClassMetadataFactory()->getAllMetadata(); @@ -70,7 +69,7 @@ class EntityGenerator protected $extension = '.php'; /** - * Whether or not the current ClassMetadataInfo instance is new or old. + * Whether or not the current ClassMetadata instance is new or old. * * @var boolean */ @@ -175,13 +174,13 @@ class EntityGenerator * @var array */ protected static $generatorStrategyMap = [ - ClassMetadataInfo::GENERATOR_TYPE_AUTO => 'AUTO', - ClassMetadataInfo::GENERATOR_TYPE_SEQUENCE => 'SEQUENCE', - ClassMetadataInfo::GENERATOR_TYPE_TABLE => 'TABLE', - ClassMetadataInfo::GENERATOR_TYPE_IDENTITY => 'IDENTITY', - ClassMetadataInfo::GENERATOR_TYPE_NONE => 'NONE', - ClassMetadataInfo::GENERATOR_TYPE_UUID => 'UUID', - ClassMetadataInfo::GENERATOR_TYPE_CUSTOM => 'CUSTOM' + ClassMetadata::GENERATOR_TYPE_AUTO => 'AUTO', + ClassMetadata::GENERATOR_TYPE_SEQUENCE => 'SEQUENCE', + ClassMetadata::GENERATOR_TYPE_TABLE => 'TABLE', + ClassMetadata::GENERATOR_TYPE_IDENTITY => 'IDENTITY', + ClassMetadata::GENERATOR_TYPE_NONE => 'NONE', + ClassMetadata::GENERATOR_TYPE_UUID => 'UUID', + ClassMetadata::GENERATOR_TYPE_CUSTOM => 'CUSTOM' ]; /** @@ -190,9 +189,9 @@ class EntityGenerator * @var array */ protected static $changeTrackingPolicyMap = [ - ClassMetadataInfo::CHANGETRACKING_DEFERRED_IMPLICIT => 'DEFERRED_IMPLICIT', - ClassMetadataInfo::CHANGETRACKING_DEFERRED_EXPLICIT => 'DEFERRED_EXPLICIT', - ClassMetadataInfo::CHANGETRACKING_NOTIFY => 'NOTIFY', + ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT => 'DEFERRED_IMPLICIT', + ClassMetadata::CHANGETRACKING_DEFERRED_EXPLICIT => 'DEFERRED_EXPLICIT', + ClassMetadata::CHANGETRACKING_NOTIFY => 'NOTIFY', ]; /** @@ -201,10 +200,10 @@ class EntityGenerator * @var array */ protected static $inheritanceTypeMap = [ - ClassMetadataInfo::INHERITANCE_TYPE_NONE => 'NONE', - ClassMetadataInfo::INHERITANCE_TYPE_JOINED => 'JOINED', - ClassMetadataInfo::INHERITANCE_TYPE_SINGLE_TABLE => 'SINGLE_TABLE', - ClassMetadataInfo::INHERITANCE_TYPE_TABLE_PER_CLASS => 'TABLE_PER_CLASS', + ClassMetadata::INHERITANCE_TYPE_NONE => 'NONE', + ClassMetadata::INHERITANCE_TYPE_JOINED => 'JOINED', + ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE => 'SINGLE_TABLE', + ClassMetadata::INHERITANCE_TYPE_TABLE_PER_CLASS => 'TABLE_PER_CLASS', ]; /** @@ -339,7 +338,7 @@ public function __construct() } /** - * Generates and writes entity classes for the given array of ClassMetadataInfo instances. + * Generates and writes entity classes for the given array of ClassMetadata instances. * * @param array $metadatas * @param string $outputDirectory @@ -354,16 +353,16 @@ public function generate(array $metadatas, $outputDirectory) } /** - * Generates and writes entity class to disk for the given ClassMetadataInfo instance. + * Generates and writes entity class to disk for the given ClassMetadata instance. * - * @param ClassMetadataInfo $metadata - * @param string $outputDirectory + * @param ClassMetadata $metadata + * @param string $outputDirectory * * @return void * * @throws \RuntimeException */ - public function writeEntityClass(ClassMetadataInfo $metadata, $outputDirectory) + public function writeEntityClass(ClassMetadata $metadata, $outputDirectory) { $path = $outputDirectory . '/' . str_replace('\\', DIRECTORY_SEPARATOR, $metadata->name) . $this->extension; $dir = dirname($path); @@ -398,13 +397,13 @@ public function writeEntityClass(ClassMetadataInfo $metadata, $outputDirectory) } /** - * Generates a PHP5 Doctrine 2 entity class from the given ClassMetadataInfo instance. + * Generates a PHP5 Doctrine 2 entity class from the given ClassMetadata instance. * - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - public function generateEntityClass(ClassMetadataInfo $metadata) + public function generateEntityClass(ClassMetadata $metadata) { $placeHolders = [ '', @@ -428,14 +427,14 @@ public function generateEntityClass(ClassMetadataInfo $metadata) } /** - * Generates the updated code for the given ClassMetadataInfo and entity at path. + * Generates the updated code for the given ClassMetadata and entity at path. * - * @param ClassMetadataInfo $metadata - * @param string $path + * @param ClassMetadata $metadata + * @param string $path * * @return string */ - public function generateUpdatedEntityClass(ClassMetadataInfo $metadata, $path) + public function generateUpdatedEntityClass(ClassMetadata $metadata, $path) { $currentCode = file_get_contents($path); @@ -598,11 +597,11 @@ protected function getType($type) } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - protected function generateEntityNamespace(ClassMetadataInfo $metadata) + protected function generateEntityNamespace(ClassMetadata $metadata) { if ($this->hasNamespace($metadata)) { return 'namespace ' . $this->getNamespace($metadata) .';'; @@ -612,29 +611,29 @@ protected function generateEntityNamespace(ClassMetadataInfo $metadata) protected function generateEntityUse() { if ($this->generateAnnotations) { - return "\n".'use Doctrine\ORM\Mapping as ORM;'."\n"; + return "\n".'use Doctrine\ORM\Annotation as ORM;'."\n"; } else { return ""; } } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - protected function generateEntityClassName(ClassMetadataInfo $metadata) + protected function generateEntityClassName(ClassMetadata $metadata) { return 'class ' . $this->getClassName($metadata) . ($this->extendsClass() ? ' extends ' . $this->getClassToExtendName() : null); } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - protected function generateEntityBody(ClassMetadataInfo $metadata) + protected function generateEntityBody(ClassMetadata $metadata) { $fieldMappingProperties = $this->generateEntityFieldMappingProperties($metadata); $embeddedProperties = $this->generateEntityEmbeddedProperties($metadata); @@ -670,11 +669,11 @@ protected function generateEntityBody(ClassMetadataInfo $metadata) } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - protected function generateEntityConstructor(ClassMetadataInfo $metadata) + protected function generateEntityConstructor(ClassMetadata $metadata) { if ($this->hasMethod('__construct', $metadata)) { return ''; @@ -687,7 +686,7 @@ protected function generateEntityConstructor(ClassMetadataInfo $metadata) $collections = []; foreach ($metadata->associationMappings as $mapping) { - if ($mapping['type'] & ClassMetadataInfo::TO_MANY) { + if ($mapping['type'] & ClassMetadata::TO_MANY) { $collections[] = '$this->'.$mapping['fieldName'].' = new \Doctrine\Common\Collections\ArrayCollection();'; } } @@ -700,11 +699,11 @@ protected function generateEntityConstructor(ClassMetadataInfo $metadata) } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - private function generateEmbeddableConstructor(ClassMetadataInfo $metadata) + private function generateEmbeddableConstructor(ClassMetadata $metadata) { $paramTypes = []; $paramVariables = []; @@ -849,12 +848,12 @@ protected function parseTokensInEntityFile($src) } /** - * @param string $property - * @param ClassMetadataInfo $metadata + * @param string $property + * @param ClassMetadata $metadata * * @return bool */ - protected function hasProperty($property, ClassMetadataInfo $metadata) + protected function hasProperty($property, ClassMetadata $metadata) { if ($this->extendsClass() || (!$this->isNew && class_exists($metadata->name))) { // don't generate property if its already on the base class. @@ -878,12 +877,12 @@ protected function hasProperty($property, ClassMetadataInfo $metadata) } /** - * @param string $method - * @param ClassMetadataInfo $metadata + * @param string $method + * @param ClassMetadata $metadata * * @return bool */ - protected function hasMethod($method, ClassMetadataInfo $metadata) + protected function hasMethod($method, ClassMetadata $metadata) { if ($this->extendsClass() || (!$this->isNew && class_exists($metadata->name))) { // don't generate method if its already on the base class. @@ -908,11 +907,11 @@ protected function hasMethod($method, ClassMetadataInfo $metadata) } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return array */ - protected function getTraits(ClassMetadataInfo $metadata) + protected function getTraits(ClassMetadata $metadata) { if (! ($metadata->reflClass !== null || class_exists($metadata->name))) { return []; @@ -934,11 +933,11 @@ protected function getTraits(ClassMetadataInfo $metadata) } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return bool */ - protected function hasNamespace(ClassMetadataInfo $metadata) + protected function hasNamespace(ClassMetadata $metadata) { return (bool) strpos($metadata->name, '\\'); } @@ -970,32 +969,32 @@ protected function getClassToExtendName() } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - protected function getClassName(ClassMetadataInfo $metadata) + protected function getClassName(ClassMetadata $metadata) { return ($pos = strrpos($metadata->name, '\\')) ? substr($metadata->name, $pos + 1, strlen($metadata->name)) : $metadata->name; } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - protected function getNamespace(ClassMetadataInfo $metadata) + protected function getNamespace(ClassMetadata $metadata) { return substr($metadata->name, 0, strrpos($metadata->name, '\\')); } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - protected function generateEntityDocBlock(ClassMetadataInfo $metadata) + protected function generateEntityDocBlock(ClassMetadata $metadata) { $lines = []; $lines[] = '/**'; @@ -1029,11 +1028,11 @@ protected function generateEntityDocBlock(ClassMetadataInfo $metadata) } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - protected function generateEntityAnnotation(ClassMetadataInfo $metadata) + protected function generateEntityAnnotation(ClassMetadata $metadata) { $prefix = '@' . $this->annotationsPrefix; @@ -1049,11 +1048,11 @@ protected function generateEntityAnnotation(ClassMetadataInfo $metadata) } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - protected function generateTableAnnotation(ClassMetadataInfo $metadata) + protected function generateTableAnnotation(ClassMetadata $metadata) { if ($metadata->isEmbeddedClass) { return ''; @@ -1107,25 +1106,25 @@ protected function generateTableConstraints($constraintName, array $constraints) } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - protected function generateInheritanceAnnotation(ClassMetadataInfo $metadata) + protected function generateInheritanceAnnotation(ClassMetadata $metadata) { - if ($metadata->inheritanceType != ClassMetadataInfo::INHERITANCE_TYPE_NONE) { + if ($metadata->inheritanceType != ClassMetadata::INHERITANCE_TYPE_NONE) { return '@' . $this->annotationsPrefix . 'InheritanceType("'.$this->getInheritanceTypeString($metadata->inheritanceType).'")'; } } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - protected function generateDiscriminatorColumnAnnotation(ClassMetadataInfo $metadata) + protected function generateDiscriminatorColumnAnnotation(ClassMetadata $metadata) { - if ($metadata->inheritanceType != ClassMetadataInfo::INHERITANCE_TYPE_NONE) { + if ($metadata->inheritanceType != ClassMetadata::INHERITANCE_TYPE_NONE) { $discrColumn = $metadata->discriminatorColumn; $columnDefinition = 'name="' . $discrColumn['name'] . '", type="' . $discrColumn['type'] @@ -1136,13 +1135,13 @@ protected function generateDiscriminatorColumnAnnotation(ClassMetadataInfo $meta } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - protected function generateDiscriminatorMapAnnotation(ClassMetadataInfo $metadata) + protected function generateDiscriminatorMapAnnotation(ClassMetadata $metadata) { - if ($metadata->inheritanceType != ClassMetadataInfo::INHERITANCE_TYPE_NONE) { + if ($metadata->inheritanceType != ClassMetadata::INHERITANCE_TYPE_NONE) { $inheritanceClassMap = []; foreach ($metadata->discriminatorMap as $type => $class) { @@ -1154,11 +1153,11 @@ protected function generateDiscriminatorMapAnnotation(ClassMetadataInfo $metadat } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - protected function generateEntityStubMethods(ClassMetadataInfo $metadata) + protected function generateEntityStubMethods(ClassMetadata $metadata) { $methods = []; @@ -1173,7 +1172,7 @@ protected function generateEntityStubMethods(ClassMetadataInfo $metadata) if (( ! isset($fieldMapping['id']) || ! $fieldMapping['id'] || - $metadata->generatorType == ClassMetadataInfo::GENERATOR_TYPE_NONE + $metadata->generatorType == ClassMetadata::GENERATOR_TYPE_NONE ) && (! $metadata->isEmbeddedClass || ! $this->embeddablesImmutable) && $code = $this->generateEntityStubMethod($metadata, 'set', $fieldMapping['fieldName'], $fieldMapping['type'], $nullableField) ) { @@ -1202,7 +1201,7 @@ protected function generateEntityStubMethods(ClassMetadataInfo $metadata) } foreach ($metadata->associationMappings as $associationMapping) { - if ($associationMapping['type'] & ClassMetadataInfo::TO_ONE) { + if ($associationMapping['type'] & ClassMetadata::TO_ONE) { $nullable = $this->isAssociationIsNullable($associationMapping) ? 'null' : null; if ($code = $this->generateEntityStubMethod($metadata, 'set', $associationMapping['fieldName'], $associationMapping['targetEntity'], $nullable)) { $methods[] = $code; @@ -1210,7 +1209,7 @@ protected function generateEntityStubMethods(ClassMetadataInfo $metadata) if ($code = $this->generateEntityStubMethod($metadata, 'get', $associationMapping['fieldName'], $associationMapping['targetEntity'], $nullable)) { $methods[] = $code; } - } elseif ($associationMapping['type'] & ClassMetadataInfo::TO_MANY) { + } elseif ($associationMapping['type'] & ClassMetadata::TO_MANY) { if ($code = $this->generateEntityStubMethod($metadata, 'add', $associationMapping['fieldName'], $associationMapping['targetEntity'])) { $methods[] = $code; } @@ -1254,11 +1253,11 @@ protected function isAssociationIsNullable(array $associationMapping) } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - protected function generateEntityLifecycleCallbackMethods(ClassMetadataInfo $metadata) + protected function generateEntityLifecycleCallbackMethods(ClassMetadata $metadata) { if (empty($metadata->lifecycleCallbacks)) { return ''; @@ -1276,11 +1275,11 @@ protected function generateEntityLifecycleCallbackMethods(ClassMetadataInfo $met } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - protected function generateEntityAssociationMappingProperties(ClassMetadataInfo $metadata) + protected function generateEntityAssociationMappingProperties(ClassMetadata $metadata) { $lines = []; @@ -1298,11 +1297,11 @@ protected function generateEntityAssociationMappingProperties(ClassMetadataInfo } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - protected function generateEntityFieldMappingProperties(ClassMetadataInfo $metadata) + protected function generateEntityFieldMappingProperties(ClassMetadata $metadata) { $lines = []; @@ -1326,11 +1325,11 @@ protected function generateEntityFieldMappingProperties(ClassMetadataInfo $metad } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - protected function generateEntityEmbeddedProperties(ClassMetadataInfo $metadata) + protected function generateEntityEmbeddedProperties(ClassMetadata $metadata) { $lines = []; @@ -1347,18 +1346,19 @@ protected function generateEntityEmbeddedProperties(ClassMetadataInfo $metadata) } /** - * @param ClassMetadataInfo $metadata - * @param string $type - * @param string $fieldName - * @param string|null $typeHint - * @param string|null $defaultValue + * @param ClassMetadata $metadata + * @param string $type + * @param string $fieldName + * @param string|null $typeHint + * @param string|null $defaultValue * * @return string */ - protected function generateEntityStubMethod(ClassMetadataInfo $metadata, $type, $fieldName, $typeHint = null, $defaultValue = null) + protected function generateEntityStubMethod(ClassMetadata $metadata, $type, $fieldName, $typeHint = null, $defaultValue = null) { $methodName = $type . Inflector::classify($fieldName); $variableName = Inflector::camelize($fieldName); + if (in_array($type, ["add", "remove"])) { $methodName = Inflector::singularize($methodName); $variableName = Inflector::singularize($variableName); @@ -1402,13 +1402,13 @@ protected function generateEntityStubMethod(ClassMetadataInfo $metadata, $type, } /** - * @param string $name - * @param string $methodName - * @param ClassMetadataInfo $metadata + * @param string $name + * @param string $methodName + * @param ClassMetadata $metadata * * @return string */ - protected function generateLifecycleCallbackMethod($name, $methodName, ClassMetadataInfo $metadata) + protected function generateLifecycleCallbackMethod($name, $methodName, ClassMetadata $metadata) { if ($this->hasMethod($methodName, $metadata)) { return ''; @@ -1466,17 +1466,17 @@ protected function generateJoinColumnAnnotation(array $joinColumn) } /** - * @param array $associationMapping - * @param ClassMetadataInfo $metadata + * @param array $associationMapping + * @param ClassMetadata $metadata * * @return string */ - protected function generateAssociationMappingPropertyDocBlock(array $associationMapping, ClassMetadataInfo $metadata) + protected function generateAssociationMappingPropertyDocBlock(array $associationMapping, ClassMetadata $metadata) { $lines = []; $lines[] = $this->spaces . '/**'; - if ($associationMapping['type'] & ClassMetadataInfo::TO_MANY) { + if ($associationMapping['type'] & ClassMetadata::TO_MANY) { $lines[] = $this->spaces . ' * @var \Doctrine\Common\Collections\Collection'; } else { $lines[] = $this->spaces . ' * @var \\' . ltrim($associationMapping['targetEntity'], '\\'); @@ -1495,16 +1495,16 @@ protected function generateAssociationMappingPropertyDocBlock(array $association $type = null; switch ($associationMapping['type']) { - case ClassMetadataInfo::ONE_TO_ONE: + case ClassMetadata::ONE_TO_ONE: $type = 'OneToOne'; break; - case ClassMetadataInfo::MANY_TO_ONE: + case ClassMetadata::MANY_TO_ONE: $type = 'ManyToOne'; break; - case ClassMetadataInfo::ONE_TO_MANY: + case ClassMetadata::ONE_TO_MANY: $type = 'OneToMany'; break; - case ClassMetadataInfo::MANY_TO_MANY: + case ClassMetadata::MANY_TO_MANY: $type = 'ManyToMany'; break; } @@ -1542,10 +1542,10 @@ protected function generateAssociationMappingPropertyDocBlock(array $association $typeOptions[] = 'orphanRemoval=' . ($associationMapping['orphanRemoval'] ? 'true' : 'false'); } - if (isset($associationMapping['fetch']) && $associationMapping['fetch'] !== ClassMetadataInfo::FETCH_LAZY) { + if (isset($associationMapping['fetch']) && $associationMapping['fetch'] !== ClassMetadata::FETCH_LAZY) { $fetchMap = [ - ClassMetadataInfo::FETCH_EXTRA_LAZY => 'EXTRA_LAZY', - ClassMetadataInfo::FETCH_EAGER => 'EAGER', + ClassMetadata::FETCH_EXTRA_LAZY => 'EXTRA_LAZY', + ClassMetadata::FETCH_EAGER => 'EAGER', ]; $typeOptions[] = 'fetch="' . $fetchMap[$associationMapping['fetch']] . '"'; @@ -1618,12 +1618,12 @@ protected function generateAssociationMappingPropertyDocBlock(array $association } /** - * @param array $fieldMapping - * @param ClassMetadataInfo $metadata + * @param array $fieldMapping + * @param ClassMetadata $metadata * * @return string */ - protected function generateFieldMappingPropertyDocBlock(array $fieldMapping, ClassMetadataInfo $metadata) + protected function generateFieldMappingPropertyDocBlock(array $fieldMapping, ClassMetadata $metadata) { $lines = []; $lines[] = $this->spaces . '/**'; diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php index 100e16fd00f..c61d2ab406a 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php @@ -19,7 +19,7 @@ namespace Doctrine\ORM\Tools\Export\Driver; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Tools\Export\ExportException; /** @@ -74,14 +74,14 @@ public function setOverwriteExistingFiles($overwrite) * Converts a single ClassMetadata instance to the exported format * and returns it. * - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - abstract public function exportClassMetadata(ClassMetadataInfo $metadata); + abstract public function exportClassMetadata(ClassMetadata $metadata); /** - * Sets the array of ClassMetadataInfo instances to export. + * Sets the array of ClassMetadata instances to export. * * @param array $metadata * @@ -151,13 +151,13 @@ public function export() } /** - * Generates the path to write the class for the given ClassMetadataInfo instance. + * Generates the path to write the class for the given ClassMetadata instance. * - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - protected function _generateOutputPath(ClassMetadataInfo $metadata) + protected function _generateOutputPath(ClassMetadata $metadata) { return $this->_outputDir . '/' . str_replace('\\', '.', $metadata->name) . $this->_extension; } @@ -187,16 +187,16 @@ public function setExtension($extension) protected function _getInheritanceTypeString($type) { switch ($type) { - case ClassMetadataInfo::INHERITANCE_TYPE_NONE: + case ClassMetadata::INHERITANCE_TYPE_NONE: return 'NONE'; - case ClassMetadataInfo::INHERITANCE_TYPE_JOINED: + case ClassMetadata::INHERITANCE_TYPE_JOINED: return 'JOINED'; - case ClassMetadataInfo::INHERITANCE_TYPE_SINGLE_TABLE: + case ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE: return 'SINGLE_TABLE'; - case ClassMetadataInfo::INHERITANCE_TYPE_TABLE_PER_CLASS: + case ClassMetadata::INHERITANCE_TYPE_TABLE_PER_CLASS: return 'PER_CLASS'; } } @@ -209,13 +209,13 @@ protected function _getInheritanceTypeString($type) protected function _getFetchModeString($mode) { switch ($mode) { - case ClassMetadataInfo::FETCH_EAGER: + case ClassMetadata::FETCH_EAGER: return 'EAGER'; - case ClassMetadataInfo::FETCH_EXTRA_LAZY: + case ClassMetadata::FETCH_EXTRA_LAZY: return 'EXTRA_LAZY'; - case ClassMetadataInfo::FETCH_LAZY: + case ClassMetadata::FETCH_LAZY: return 'LAZY'; } } @@ -228,13 +228,13 @@ protected function _getFetchModeString($mode) protected function _getChangeTrackingPolicyString($policy) { switch ($policy) { - case ClassMetadataInfo::CHANGETRACKING_DEFERRED_IMPLICIT: + case ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT: return 'DEFERRED_IMPLICIT'; - case ClassMetadataInfo::CHANGETRACKING_DEFERRED_EXPLICIT: + case ClassMetadata::CHANGETRACKING_DEFERRED_EXPLICIT: return 'DEFERRED_EXPLICIT'; - case ClassMetadataInfo::CHANGETRACKING_NOTIFY: + case ClassMetadata::CHANGETRACKING_NOTIFY: return 'NOTIFY'; } } @@ -247,22 +247,22 @@ protected function _getChangeTrackingPolicyString($policy) protected function _getIdGeneratorTypeString($type) { switch ($type) { - case ClassMetadataInfo::GENERATOR_TYPE_AUTO: + case ClassMetadata::GENERATOR_TYPE_AUTO: return 'AUTO'; - case ClassMetadataInfo::GENERATOR_TYPE_SEQUENCE: + case ClassMetadata::GENERATOR_TYPE_SEQUENCE: return 'SEQUENCE'; - case ClassMetadataInfo::GENERATOR_TYPE_TABLE: + case ClassMetadata::GENERATOR_TYPE_TABLE: return 'TABLE'; - case ClassMetadataInfo::GENERATOR_TYPE_IDENTITY: + case ClassMetadata::GENERATOR_TYPE_IDENTITY: return 'IDENTITY'; - case ClassMetadataInfo::GENERATOR_TYPE_UUID: + case ClassMetadata::GENERATOR_TYPE_UUID: return 'UUID'; - case ClassMetadataInfo::GENERATOR_TYPE_CUSTOM: + case ClassMetadata::GENERATOR_TYPE_CUSTOM: return 'CUSTOM'; } } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php index 044a1da53a8..0bfdf371da6 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php @@ -19,7 +19,7 @@ namespace Doctrine\ORM\Tools\Export\Driver; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Tools\EntityGenerator; /** @@ -44,7 +44,7 @@ class AnnotationExporter extends AbstractExporter /** * {@inheritdoc} */ - public function exportClassMetadata(ClassMetadataInfo $metadata) + public function exportClassMetadata(ClassMetadata $metadata) { if ( ! $this->_entityGenerator) { throw new \RuntimeException('For the AnnotationExporter you must set an EntityGenerator instance with the setEntityGenerator() method.'); @@ -59,17 +59,17 @@ public function exportClassMetadata(ClassMetadataInfo $metadata) } /** - * @param \Doctrine\ORM\Mapping\ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return string */ - protected function _generateOutputPath(ClassMetadataInfo $metadata) + protected function _generateOutputPath(ClassMetadata $metadata) { return $this->_outputDir . '/' . str_replace('\\', '/', $metadata->name) . $this->_extension; } /** - * @param \Doctrine\ORM\Tools\EntityGenerator $entityGenerator + * @param EntityGenerator $entityGenerator * * @return void */ diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 69db59f784a..6e58f931eab 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -19,7 +19,7 @@ namespace Doctrine\ORM\Tools\Export\Driver; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; /** * ClassMetadata exporter for PHP code. @@ -38,12 +38,12 @@ class PhpExporter extends AbstractExporter /** * {@inheritdoc} */ - public function exportClassMetadata(ClassMetadataInfo $metadata) + public function exportClassMetadata(ClassMetadata $metadata) { $lines = []; $lines[] = 'isMappedSuperclass) { @@ -51,7 +51,7 @@ public function exportClassMetadata(ClassMetadataInfo $metadata) } if ($metadata->inheritanceType) { - $lines[] = '$metadata->setInheritanceType(ClassMetadataInfo::INHERITANCE_TYPE_' . $this->_getInheritanceTypeString($metadata->inheritanceType) . ');'; + $lines[] = '$metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_' . $this->_getInheritanceTypeString($metadata->inheritanceType) . ');'; } if ($metadata->customRepositoryClassName) { @@ -71,7 +71,7 @@ public function exportClassMetadata(ClassMetadataInfo $metadata) } if ($metadata->changeTrackingPolicy) { - $lines[] = '$metadata->setChangeTrackingPolicy(ClassMetadataInfo::CHANGETRACKING_' . $this->_getChangeTrackingPolicyString($metadata->changeTrackingPolicy) . ');'; + $lines[] = '$metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_' . $this->_getChangeTrackingPolicyString($metadata->changeTrackingPolicy) . ');'; } if ($metadata->lifecycleCallbacks) { @@ -87,7 +87,7 @@ public function exportClassMetadata(ClassMetadataInfo $metadata) } if ( ! $metadata->isIdentifierComposite && $generatorType = $this->_getIdGeneratorTypeString($metadata->generatorType)) { - $lines[] = '$metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_' . $generatorType . ');'; + $lines[] = '$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_' . $generatorType . ');'; } foreach ($metadata->associationMappings as $associationMapping) { @@ -113,7 +113,7 @@ public function exportClassMetadata(ClassMetadataInfo $metadata) $associationMappingArray['fetch'] = $associationMapping['fetch']; } - if ($associationMapping['type'] & ClassMetadataInfo::TO_ONE) { + if ($associationMapping['type'] & ClassMetadata::TO_ONE) { $method = 'mapOneToOne'; $oneToOneMappingArray = [ 'mappedBy' => $associationMapping['mappedBy'], @@ -123,7 +123,7 @@ public function exportClassMetadata(ClassMetadataInfo $metadata) ]; $associationMappingArray = array_merge($associationMappingArray, $oneToOneMappingArray); - } elseif ($associationMapping['type'] == ClassMetadataInfo::ONE_TO_MANY) { + } elseif ($associationMapping['type'] == ClassMetadata::ONE_TO_MANY) { $method = 'mapOneToMany'; $potentialAssociationMappingIndexes = [ 'mappedBy', @@ -137,7 +137,7 @@ public function exportClassMetadata(ClassMetadataInfo $metadata) } } $associationMappingArray = array_merge($associationMappingArray, $oneToManyMappingArray); - } elseif ($associationMapping['type'] == ClassMetadataInfo::MANY_TO_MANY) { + } elseif ($associationMapping['type'] == ClassMetadata::MANY_TO_MANY) { $method = 'mapManyToMany'; $potentialAssociationMappingIndexes = [ 'mappedBy', diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index c4eb8f63792..856d1feee4a 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -19,7 +19,7 @@ namespace Doctrine\ORM\Tools\Export\Driver; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; /** * ClassMetadata exporter for Doctrine XML mapping files. @@ -38,7 +38,7 @@ class XmlExporter extends AbstractExporter /** * {@inheritdoc} */ - public function exportClassMetadata(ClassMetadataInfo $metadata) + public function exportClassMetadata(ClassMetadata $metadata) { $xml = new \SimpleXmlElement("addAttribute('schema', $metadata->table['schema']); } - if ($metadata->inheritanceType && $metadata->inheritanceType !== ClassMetadataInfo::INHERITANCE_TYPE_NONE) { + if ($metadata->inheritanceType && $metadata->inheritanceType !== ClassMetadata::INHERITANCE_TYPE_NONE) { $root->addAttribute('inheritance-type', $this->_getInheritanceTypeString($metadata->inheritanceType)); } @@ -226,10 +226,10 @@ public function exportClassMetadata(ClassMetadataInfo $metadata) } $orderMap = [ - ClassMetadataInfo::ONE_TO_ONE, - ClassMetadataInfo::ONE_TO_MANY, - ClassMetadataInfo::MANY_TO_ONE, - ClassMetadataInfo::MANY_TO_MANY, + ClassMetadata::ONE_TO_ONE, + ClassMetadata::ONE_TO_MANY, + ClassMetadata::MANY_TO_ONE, + ClassMetadata::MANY_TO_MANY, ]; uasort($metadata->associationMappings, function($m1, $m2) use (&$orderMap){ @@ -241,13 +241,13 @@ public function exportClassMetadata(ClassMetadataInfo $metadata) foreach ($metadata->associationMappings as $associationMapping) { $associationMappingXml = null; - if ($associationMapping['type'] == ClassMetadataInfo::ONE_TO_ONE) { + if ($associationMapping['type'] == ClassMetadata::ONE_TO_ONE) { $associationMappingXml = $root->addChild('one-to-one'); - } elseif ($associationMapping['type'] == ClassMetadataInfo::MANY_TO_ONE) { + } elseif ($associationMapping['type'] == ClassMetadata::MANY_TO_ONE) { $associationMappingXml = $root->addChild('many-to-one'); - } elseif ($associationMapping['type'] == ClassMetadataInfo::ONE_TO_MANY) { + } elseif ($associationMapping['type'] == ClassMetadata::ONE_TO_MANY) { $associationMappingXml = $root->addChild('one-to-many'); - } elseif ($associationMapping['type'] == ClassMetadataInfo::MANY_TO_MANY) { + } elseif ($associationMapping['type'] == ClassMetadata::MANY_TO_MANY) { $associationMappingXml = $root->addChild('many-to-many'); } @@ -419,15 +419,15 @@ private function exportTableOptions(\SimpleXMLElement $parentXml, array $options * Export sequence information (if available/configured) into the current identifier XML node * * @param \SimpleXMLElement $identifierXmlNode - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return void */ - private function exportSequenceInformation(\SimpleXMLElement $identifierXmlNode, ClassMetadataInfo $metadata) + private function exportSequenceInformation(\SimpleXMLElement $identifierXmlNode, ClassMetadata $metadata) { $sequenceDefinition = $metadata->sequenceGeneratorDefinition; - if (! ($metadata->generatorType === ClassMetadataInfo::GENERATOR_TYPE_SEQUENCE && $sequenceDefinition)) { + if (! ($metadata->generatorType === ClassMetadata::GENERATOR_TYPE_SEQUENCE && $sequenceDefinition)) { return; } @@ -446,6 +446,7 @@ private function exportSequenceInformation(\SimpleXMLElement $identifierXmlNode, private function _asXml($simpleXml) { $dom = new \DOMDocument('1.0', 'UTF-8'); + $dom->loadXML($simpleXml->asXML()); $dom->formatOutput = true; diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php index b9a38f9046f..2b89cda739a 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php @@ -20,7 +20,7 @@ namespace Doctrine\ORM\Tools\Export\Driver; use Symfony\Component\Yaml\Yaml; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; /** * ClassMetadata exporter for Doctrine YAML mapping files. @@ -39,7 +39,7 @@ class YamlExporter extends AbstractExporter /** * {@inheritdoc} */ - public function exportClassMetadata(ClassMetadataInfo $metadata) + public function exportClassMetadata(ClassMetadata $metadata) { $array = []; @@ -57,7 +57,7 @@ public function exportClassMetadata(ClassMetadataInfo $metadata) $inheritanceType = $metadata->inheritanceType; - if ($inheritanceType !== ClassMetadataInfo::INHERITANCE_TYPE_NONE) { + if ($inheritanceType !== ClassMetadata::INHERITANCE_TYPE_NONE) { $array['inheritanceType'] = $this->_getInheritanceTypeString($inheritanceType); } @@ -69,7 +69,7 @@ public function exportClassMetadata(ClassMetadataInfo $metadata) $array['discriminatorMap'] = $map; } - if ($metadata->changeTrackingPolicy !== ClassMetadataInfo::CHANGETRACKING_DEFERRED_IMPLICIT) { + if ($metadata->changeTrackingPolicy !== ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT) { $array['changeTrackingPolicy'] = $this->_getChangeTrackingPolicyString($metadata->changeTrackingPolicy); } @@ -162,7 +162,7 @@ public function exportClassMetadata(ClassMetadataInfo $metadata) $array['id'][$name]['associationKey'] = true; } - if ($associationMapping['type'] & ClassMetadataInfo::TO_ONE) { + if ($associationMapping['type'] & ClassMetadata::TO_ONE) { $joinColumns = $associationMapping['isOwningSide'] ? $associationMapping['joinColumns'] : []; $newJoinColumns = []; @@ -183,12 +183,12 @@ public function exportClassMetadata(ClassMetadataInfo $metadata) $associationMappingArray = array_merge($associationMappingArray, $oneToOneMappingArray); - if ($associationMapping['type'] & ClassMetadataInfo::ONE_TO_ONE) { + if ($associationMapping['type'] & ClassMetadata::ONE_TO_ONE) { $array['oneToOne'][$name] = $associationMappingArray; } else { $array['manyToOne'][$name] = $associationMappingArray; } - } elseif ($associationMapping['type'] == ClassMetadataInfo::ONE_TO_MANY) { + } elseif ($associationMapping['type'] == ClassMetadata::ONE_TO_MANY) { $oneToManyMappingArray = [ 'mappedBy' => $associationMapping['mappedBy'], 'inversedBy' => $associationMapping['inversedBy'], @@ -198,7 +198,7 @@ public function exportClassMetadata(ClassMetadataInfo $metadata) $associationMappingArray = array_merge($associationMappingArray, $oneToManyMappingArray); $array['oneToMany'][$name] = $associationMappingArray; - } elseif ($associationMapping['type'] == ClassMetadataInfo::MANY_TO_MANY) { + } elseif ($associationMapping['type'] == ClassMetadata::MANY_TO_MANY) { $manyToManyMappingArray = [ 'mappedBy' => $associationMapping['mappedBy'], 'inversedBy' => $associationMapping['inversedBy'], diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php index 1874eb88dde..83fd619d036 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php @@ -20,7 +20,7 @@ namespace Doctrine\ORM\Tools\Pagination; use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Query; use Doctrine\ORM\Query\TreeWalkerAdapter; use Doctrine\ORM\Query\AST\Functions\IdentityFunction; @@ -147,7 +147,7 @@ private function validate(SelectStatement $AST) && isset($queryComponents[$expression->identificationVariable])) { $queryComponent = $queryComponents[$expression->identificationVariable]; if (isset($queryComponent['parent']) - && $queryComponent['relation']['type'] & ClassMetadataInfo::TO_MANY) { + && $queryComponent['relation']['type'] & ClassMetadata::TO_MANY) { throw new \RuntimeException("Cannot select distinct identifiers from query with LIMIT and ORDER BY on a column from a fetch joined to-many association. Use output walkers."); } } diff --git a/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php b/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php index 36f1f929bde..f415ea128ce 100644 --- a/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php +++ b/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php @@ -113,12 +113,12 @@ public function loadClassMetadata(LoadClassMetadataEventArgs $args) } /** - * @param \Doctrine\ORM\Mapping\ClassMetadataInfo $classMetadata - * @param array $mapping + * @param ClassMetadata $classMetadata + * @param array $mapping * * @return void */ - private function remapAssociation($classMetadata, $mapping) + private function remapAssociation(ClassMetadata $classMetadata, $mapping) { $newMapping = $this->resolveTargetEntities[$mapping['targetEntity']]; $newMapping = array_replace_recursive($mapping, $newMapping); diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 007ac85a8b7..f09a8d44bbd 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -253,7 +253,7 @@ public function getSchemaFromMetadata(array $classes) if (isset($class->fieldMappings[$identifierField])) { $pkColumns[] = $this->quoteStrategy->getColumnName($identifierField, $class, $this->platform); } elseif (isset($class->associationMappings[$identifierField])) { - /* @var $assoc \Doctrine\ORM\Mapping\OneToOne */ + /* @var $assoc \Doctrine\ORM\Annotation\OneToOne */ $assoc = $class->associationMappings[$identifierField]; foreach ($assoc['joinColumns'] as $joinColumn) { diff --git a/lib/Doctrine/ORM/Tools/SchemaValidator.php b/lib/Doctrine/ORM/Tools/SchemaValidator.php index ee39aed817e..50ccff2cfed 100644 --- a/lib/Doctrine/ORM/Tools/SchemaValidator.php +++ b/lib/Doctrine/ORM/Tools/SchemaValidator.php @@ -20,7 +20,7 @@ namespace Doctrine\ORM\Tools; use Doctrine\ORM\EntityManagerInterface; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\DBAL\Types\Type; /** @@ -79,11 +79,11 @@ public function validateMapping() /** * Validates a single class of the current. * - * @param ClassMetadataInfo $class + * @param ClassMetadata $class * * @return array */ - public function validateClass(ClassMetadataInfo $class) + public function validateClass(ClassMetadata $class) { $ce = []; $cmf = $this->em->getMetadataFactory(); @@ -155,13 +155,13 @@ public function validateClass(ClassMetadataInfo $class) // Verify inverse side/owning side match each other if (array_key_exists($assoc['inversedBy'], $targetMetadata->associationMappings)) { $targetAssoc = $targetMetadata->associationMappings[$assoc['inversedBy']]; - if ($assoc['type'] == ClassMetadataInfo::ONE_TO_ONE && $targetAssoc['type'] !== ClassMetadataInfo::ONE_TO_ONE) { + if ($assoc['type'] == ClassMetadata::ONE_TO_ONE && $targetAssoc['type'] !== ClassMetadata::ONE_TO_ONE) { $ce[] = "If association " . $class->name . "#" . $fieldName . " is one-to-one, then the inversed " . "side " . $targetMetadata->name . "#" . $assoc['inversedBy'] . " has to be one-to-one as well."; - } elseif ($assoc['type'] == ClassMetadataInfo::MANY_TO_ONE && $targetAssoc['type'] !== ClassMetadataInfo::ONE_TO_MANY) { + } elseif ($assoc['type'] == ClassMetadata::MANY_TO_ONE && $targetAssoc['type'] !== ClassMetadata::ONE_TO_MANY) { $ce[] = "If association " . $class->name . "#" . $fieldName . " is many-to-one, then the inversed " . "side " . $targetMetadata->name . "#" . $assoc['inversedBy'] . " has to be one-to-many."; - } elseif ($assoc['type'] == ClassMetadataInfo::MANY_TO_MANY && $targetAssoc['type'] !== ClassMetadataInfo::MANY_TO_MANY) { + } elseif ($assoc['type'] == ClassMetadata::MANY_TO_MANY && $targetAssoc['type'] !== ClassMetadata::MANY_TO_MANY) { $ce[] = "If association " . $class->name . "#" . $fieldName . " is many-to-many, then the inversed " . "side " . $targetMetadata->name . "#" . $assoc['inversedBy'] . " has to be many-to-many as well."; } @@ -169,8 +169,9 @@ public function validateClass(ClassMetadataInfo $class) } if ($assoc['isOwningSide']) { - if ($assoc['type'] == ClassMetadataInfo::MANY_TO_MANY) { + if ($assoc['type'] == ClassMetadata::MANY_TO_MANY) { $identifierColumns = $class->getIdentifierColumnNames(); + foreach ($assoc['joinTable']['joinColumns'] as $joinColumn) { if (!in_array($joinColumn['referencedColumnName'], $identifierColumns)) { $ce[] = "The referenced column name '" . $joinColumn['referencedColumnName'] . "' " . @@ -180,6 +181,7 @@ public function validateClass(ClassMetadataInfo $class) } $identifierColumns = $targetMetadata->getIdentifierColumnNames(); + foreach ($assoc['joinTable']['inverseJoinColumns'] as $inverseJoinColumn) { if (!in_array($inverseJoinColumn['referencedColumnName'], $identifierColumns)) { $ce[] = "The referenced column name '" . $joinColumn['referencedColumnName'] . "' " . @@ -202,8 +204,9 @@ public function validateClass(ClassMetadataInfo $class) "' are missing."; } - } elseif ($assoc['type'] & ClassMetadataInfo::TO_ONE) { + } elseif ($assoc['type'] & ClassMetadata::TO_ONE) { $identifierColumns = $targetMetadata->getIdentifierColumnNames(); + foreach ($assoc['joinColumns'] as $joinColumn) { if (!in_array($joinColumn['referencedColumnName'], $identifierColumns)) { $ce[] = "The referenced column name '" . $joinColumn['referencedColumnName'] . "' " . @@ -265,7 +268,6 @@ public function validateClass(ClassMetadataInfo $class) public function schemaInSyncWithMetadata() { $schemaTool = new SchemaTool($this->em); - $allMetadata = $this->em->getMetadataFactory()->getAllMetadata(); return count($schemaTool->getUpdateSchemaSql($allMetadata, true)) == 0; diff --git a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php index f5c0b9af766..48c6f6e7cb7 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php @@ -122,7 +122,7 @@ public function setUser(CmsUser $user) { } } - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata) + public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { $metadata->setPrimaryTable( [ diff --git a/tests/Doctrine/Tests/Models/CMS/CmsUser.php b/tests/Doctrine/Tests/Models/CMS/CmsUser.php index 153033605bd..95fa71e17af 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsUser.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsUser.php @@ -269,7 +269,7 @@ public function setEmail(CmsEmail $email = null) { } } - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata) + public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { $metadata->setPrimaryTable( [ diff --git a/tests/Doctrine/Tests/Models/Cache/City.php b/tests/Doctrine/Tests/Models/Cache/City.php index b3769fbe779..e4e59a7d7a0 100644 --- a/tests/Doctrine/Tests/Models/Cache/City.php +++ b/tests/Doctrine/Tests/Models/Cache/City.php @@ -100,7 +100,7 @@ public function getAttractions() return $this->attractions; } - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata) + public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { include __DIR__ . '/../../ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php'; } diff --git a/tests/Doctrine/Tests/Models/Company/CompanyContract.php b/tests/Doctrine/Tests/Models/Company/CompanyContract.php index 15e691ba087..6d4b61d4f40 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyContract.php @@ -130,7 +130,7 @@ public function removeEngineer(CompanyEmployee $engineer) abstract public function calculatePrice(); - static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata) + static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { $metadata->setInheritanceType(\Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_JOINED); $metadata->setTableName( 'company_contracts'); diff --git a/tests/Doctrine/Tests/Models/Company/CompanyFixContract.php b/tests/Doctrine/Tests/Models/Company/CompanyFixContract.php index 8fe94e2584d..4f51dc4060f 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyFixContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyFixContract.php @@ -28,7 +28,7 @@ public function setFixPrice($fixPrice) $this->fixPrice = $fixPrice; } - static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata) + static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { $metadata->mapField( [ diff --git a/tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php b/tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php index 978e8d5e6cd..c83e6479ef1 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php @@ -108,7 +108,7 @@ public function removeManager(CompanyManager $manager) $this->managers->removeElement($manager); } - static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata) + static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { $metadata->mapField( [ diff --git a/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php b/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php index 47313d032e7..a69abefeb3b 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php @@ -29,7 +29,7 @@ public function setMaxPrice($maxPrice) $this->maxPrice = $maxPrice; } - static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata) + static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { $metadata->mapField( [ diff --git a/tests/Doctrine/Tests/Models/Company/CompanyPerson.php b/tests/Doctrine/Tests/Models/Company/CompanyPerson.php index ca80c953dcb..8592e375150 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyPerson.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyPerson.php @@ -117,7 +117,7 @@ public function setSpouse(CompanyPerson $spouse) { } } - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata) + public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { $metadata->setPrimaryTable( diff --git a/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php b/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php index b543b0fe589..601d38a3a0e 100644 --- a/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php +++ b/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php @@ -42,7 +42,7 @@ public function setName($name) $this->name = $name; } - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata) + public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { $metadata->mapField( [ @@ -56,7 +56,7 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $met ] ); - $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadataInfo::GENERATOR_TYPE_NONE); + $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE); } } diff --git a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php index 8b6193cdc3f..77524f64d83 100644 --- a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php +++ b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php @@ -109,6 +109,6 @@ public static function loadMetadata($metadata) ] ); - $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadataInfo::GENERATOR_TYPE_AUTO); + $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_AUTO); } } diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php index 4690e068a4c..9e7b3a78b22 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php @@ -11,7 +11,7 @@ class DDC869ChequePayment extends DDC869Payment /** @Column(type="string") */ protected $serialNumber; - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata) + public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { $metadata->mapField( [ diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869CreditCardPayment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869CreditCardPayment.php index 6f314e31889..f3027a026ad 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869CreditCardPayment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869CreditCardPayment.php @@ -11,7 +11,7 @@ class DDC869CreditCardPayment extends DDC869Payment /** @Column(type="string") */ protected $creditCardNumber; - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata) + public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { $metadata->mapField( [ diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php index 992c53ae27a..b21b1a29d2a 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php @@ -19,7 +19,7 @@ class DDC869Payment protected $value; - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata) + public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { $metadata->mapField( [ @@ -37,7 +37,7 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $met ); $metadata->isMappedSuperclass = true; $metadata->setCustomRepositoryClass(DDC869PaymentRepository::class); - $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadataInfo::GENERATOR_TYPE_AUTO); + $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_AUTO); } } diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php b/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php index 089261a83ba..41201eec8fb 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php @@ -13,7 +13,7 @@ class DDC889Class extends DDC889SuperClass protected $id; - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata) + public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { $metadata->mapField( [ @@ -24,7 +24,7 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $met ] ); - $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadataInfo::GENERATOR_TYPE_AUTO); + $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_AUTO); } } diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889Entity.php b/tests/Doctrine/Tests/Models/DDC889/DDC889Entity.php index 43884435fa7..2a689eb7d37 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889Entity.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889Entity.php @@ -8,7 +8,7 @@ class DDC889Entity extends DDC889SuperClass { - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata) + public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { } diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php b/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php index 8408a9ad74b..c26a9bda9c6 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php @@ -11,7 +11,7 @@ class DDC889SuperClass /** @Column() */ protected $name; - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata) + public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { $metadata->mapField( [ @@ -20,6 +20,6 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $met ); $metadata->isMappedSuperclass = true; - $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadataInfo::GENERATOR_TYPE_NONE); + $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE); } } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php b/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php index 29ea4dd4e14..fc0e8da9740 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php @@ -21,7 +21,7 @@ */ class DDC964Admin extends DDC964User { - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata) + public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { $metadata->setAssociationOverride('address', [ diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php b/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php index 23486b0fd6d..bc9f163d26a 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php @@ -24,7 +24,7 @@ */ class DDC964Guest extends DDC964User { - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata) + public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { $metadata->setAttributeOverride('id', [ 'columnName' => 'guest_id', diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php index a9f15c8c948..5ab56c1699b 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php @@ -107,7 +107,7 @@ public function setAddress(DDC964Address $address) $this->address = $address; } - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata) + public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { $metadata->mapField( [ @@ -162,6 +162,6 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $met ] ); - $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadataInfo::GENERATOR_TYPE_AUTO); + $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_AUTO); } } diff --git a/tests/Doctrine/Tests/ORM/ConfigurationTest.php b/tests/Doctrine/Tests/ORM/ConfigurationTest.php index 92a2eeaea70..cc54d305afd 100644 --- a/tests/Doctrine/Tests/ORM/ConfigurationTest.php +++ b/tests/Doctrine/Tests/ORM/ConfigurationTest.php @@ -2,22 +2,24 @@ namespace Doctrine\Tests\ORM; +use Doctrine\Common\Cache\ArrayCache; use Doctrine\Common\Cache\Cache; use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; use Doctrine\Common\Proxy\AbstractProxyFactory; -use Doctrine\Common\Cache\ArrayCache; +use Doctrine\ORM\Annotation as AnnotationNamespace; use Doctrine\ORM\Cache\CacheConfiguration; -use Doctrine\ORM\EntityRepository; -use Doctrine\ORM\Mapping as AnnotationNamespace; use Doctrine\ORM\Configuration; +use Doctrine\ORM\EntityRepository; +use Doctrine\ORM\Mapping\ClassMetadataFactory; +use Doctrine\ORM\Mapping\DefaultEntityListenerResolver; use Doctrine\ORM\Mapping\EntityListenerResolver; use Doctrine\ORM\Mapping\NamingStrategy; use Doctrine\ORM\Mapping\QuoteStrategy; use Doctrine\ORM\ORMException; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\Tests\Models\DDC753\DDC753CustomRepository; +use PHPUnit_Framework_TestCase; use ReflectionClass; -use PHPUnit\Framework\TestCase; /** * Tests for the Configuration object @@ -309,7 +311,7 @@ public function testSetCustomHydrationModes() public function testSetGetClassMetadataFactoryName() { - $this->assertSame(AnnotationNamespace\ClassMetadataFactory::class, $this->configuration->getClassMetadataFactoryName()); + $this->assertSame(ClassMetadataFactory::class, $this->configuration->getClassMetadataFactoryName()); $this->configuration->setClassMetadataFactoryName(__CLASS__); $this->assertSame(__CLASS__, $this->configuration->getClassMetadataFactoryName()); } @@ -352,7 +354,7 @@ public function testSetGetQuoteStrategy() public function testSetGetEntityListenerResolver() { $this->assertInstanceOf(EntityListenerResolver::class, $this->configuration->getEntityListenerResolver()); - $this->assertInstanceOf(AnnotationNamespace\DefaultEntityListenerResolver::class, $this->configuration->getEntityListenerResolver()); + $this->assertInstanceOf(DefaultEntityListenerResolver::class, $this->configuration->getEntityListenerResolver()); $resolver = $this->createMock(EntityListenerResolver::class); $this->configuration->setEntityListenerResolver($resolver); $this->assertSame($resolver, $this->configuration->getEntityListenerResolver()); diff --git a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php index 5d08039e504..99474975b37 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php @@ -3,8 +3,8 @@ namespace Doctrine\Tests\ORM\Functional; use Doctrine\DBAL\Platforms\SQLServerPlatform; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\DBAL\Schema\Table; -use Doctrine\ORM\Mapping\ClassMetadataInfo; use Doctrine\DBAL\Platforms\PostgreSqlPlatform; class DatabaseDriverTest extends DatabaseDriverTestCase @@ -109,7 +109,7 @@ public function testLoadMetadataWithForeignKeyFromDatabase() $bazMetadata->associationMappings = \array_change_key_case($bazMetadata->associationMappings, \CASE_LOWER); $this->assertArrayHasKey('bar', $bazMetadata->associationMappings); - $this->assertEquals(ClassMetadataInfo::MANY_TO_ONE, $bazMetadata->associationMappings['bar']['type']); + $this->assertEquals(ClassMetadata::MANY_TO_ONE, $bazMetadata->associationMappings['bar']['type']); } public function testDetectManyToManyTables() diff --git a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTestCase.php b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTestCase.php index 89d3cd3583c..0a4672dfc72 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTestCase.php +++ b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTestCase.php @@ -4,7 +4,7 @@ use Doctrine\ORM\Mapping\Driver\DatabaseDriver; use Doctrine\Tests\OrmFunctionalTestCase; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; /** * Common BaseClass for DatabaseDriver Tests @@ -19,7 +19,7 @@ protected function convertToClassMetadata(array $entityTables, array $manyTables $metadatas = []; foreach ($driver->getAllClassNames() AS $className) { - $class = new ClassMetadataInfo($className); + $class = new ClassMetadata($className); $driver->loadMetadataForClass($className, $class); $metadatas[$className] = $class; } @@ -43,7 +43,7 @@ protected function extractClassMetadata(array $classNames) if (!in_array(strtolower($className), $classNames)) { continue; } - $class = new ClassMetadataInfo($className); + $class = new ClassMetadata($className); $driver->loadMetadataForClass($className, $class); $metadatas[$className] = $class; } diff --git a/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php index e7f4fd29803..2e85d7e4959 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php @@ -2,7 +2,7 @@ namespace Doctrine\Tests\ORM\Functional; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Tests\Models\CMS\CmsArticle; use Doctrine\Tests\Models\CMS\CmsGroup; use Doctrine\Tests\Models\CMS\CmsPhonenumber; @@ -41,11 +41,11 @@ public function setUp() parent::setUp(); $class = $this->_em->getClassMetadata(CmsUser::class); - $class->associationMappings['groups']['fetch'] = ClassMetadataInfo::FETCH_EXTRA_LAZY; + $class->associationMappings['groups']['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; $class->associationMappings['groups']['indexBy'] = 'name'; - $class->associationMappings['articles']['fetch'] = ClassMetadataInfo::FETCH_EXTRA_LAZY; + $class->associationMappings['articles']['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; $class->associationMappings['articles']['indexBy'] = 'topic'; - $class->associationMappings['phonenumbers']['fetch'] = ClassMetadataInfo::FETCH_EXTRA_LAZY; + $class->associationMappings['phonenumbers']['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; $class->associationMappings['phonenumbers']['indexBy'] = 'phonenumber'; unset($class->associationMappings['phonenumbers']['cache']); @@ -53,7 +53,7 @@ public function setUp() unset($class->associationMappings['users']['cache']); $class = $this->_em->getClassMetadata(CmsGroup::class); - $class->associationMappings['users']['fetch'] = ClassMetadataInfo::FETCH_EXTRA_LAZY; + $class->associationMappings['users']['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; $class->associationMappings['users']['indexBy'] = 'username'; $this->loadFixture(); @@ -64,16 +64,16 @@ public function tearDown() parent::tearDown(); $class = $this->_em->getClassMetadata(CmsUser::class); - $class->associationMappings['groups']['fetch'] = ClassMetadataInfo::FETCH_LAZY; - $class->associationMappings['articles']['fetch'] = ClassMetadataInfo::FETCH_LAZY; - $class->associationMappings['phonenumbers']['fetch'] = ClassMetadataInfo::FETCH_LAZY; + $class->associationMappings['groups']['fetch'] = ClassMetadata::FETCH_LAZY; + $class->associationMappings['articles']['fetch'] = ClassMetadata::FETCH_LAZY; + $class->associationMappings['phonenumbers']['fetch'] = ClassMetadata::FETCH_LAZY; unset($class->associationMappings['groups']['indexBy']); unset($class->associationMappings['articles']['indexBy']); unset($class->associationMappings['phonenumbers']['indexBy']); $class = $this->_em->getClassMetadata(CmsGroup::class); - $class->associationMappings['users']['fetch'] = ClassMetadataInfo::FETCH_LAZY; + $class->associationMappings['users']['fetch'] = ClassMetadata::FETCH_LAZY; unset($class->associationMappings['users']['indexBy']); } diff --git a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php index c35036b6e3c..38b2743b435 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php @@ -8,7 +8,6 @@ use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManager; use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\ClassMetadataInfo; use Doctrine\ORM\Query\Filter\SQLFilter; use Doctrine\ORM\Query\FilterCollection; use Doctrine\Tests\Models\CMS\CmsAddress; @@ -51,8 +50,8 @@ public function tearDown() parent::tearDown(); $class = $this->_em->getClassMetadata(CmsUser::class); - $class->associationMappings['groups']['fetch'] = ClassMetadataInfo::FETCH_LAZY; - $class->associationMappings['articles']['fetch'] = ClassMetadataInfo::FETCH_LAZY; + $class->associationMappings['groups']['fetch'] = ClassMetadata::FETCH_LAZY; + $class->associationMappings['articles']['fetch'] = ClassMetadata::FETCH_LAZY; } public function testConfigureFilter() @@ -523,8 +522,8 @@ public function testWhereOrFilter() private function loadLazyFixtureData() { $class = $this->_em->getClassMetadata(CmsUser::class); - $class->associationMappings['articles']['fetch'] = ClassMetadataInfo::FETCH_EXTRA_LAZY; - $class->associationMappings['groups']['fetch'] = ClassMetadataInfo::FETCH_EXTRA_LAZY; + $class->associationMappings['articles']['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; + $class->associationMappings['groups']['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; $this->loadFixtureData(); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php index 785b22187ed..9c57bbcd880 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php @@ -2,7 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Tests\Models; /** @@ -21,9 +21,9 @@ public function setUp() parent::setUp(); $class = $this->_em->getClassMetadata(Models\Legacy\LegacyUser::class); - $class->associationMappings['_articles']['fetch'] = ClassMetadataInfo::FETCH_EXTRA_LAZY; - $class->associationMappings['_references']['fetch'] = ClassMetadataInfo::FETCH_EXTRA_LAZY; - $class->associationMappings['_cars']['fetch'] = ClassMetadataInfo::FETCH_EXTRA_LAZY; + $class->associationMappings['_articles']['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; + $class->associationMappings['_references']['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; + $class->associationMappings['_cars']['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; $this->loadFixture(); } @@ -33,9 +33,9 @@ public function tearDown() parent::tearDown(); $class = $this->_em->getClassMetadata(Models\Legacy\LegacyUser::class); - $class->associationMappings['_articles']['fetch'] = ClassMetadataInfo::FETCH_LAZY; - $class->associationMappings['_references']['fetch'] = ClassMetadataInfo::FETCH_LAZY; - $class->associationMappings['_cars']['fetch'] = ClassMetadataInfo::FETCH_LAZY; + $class->associationMappings['_articles']['fetch'] = ClassMetadata::FETCH_LAZY; + $class->associationMappings['_references']['fetch'] = ClassMetadata::FETCH_LAZY; + $class->associationMappings['_cars']['fetch'] = ClassMetadata::FETCH_LAZY; } public function testCountNotInitializesLegacyCollection() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php index de4e2058955..2ba39e73cc5 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php @@ -3,7 +3,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; use Doctrine\Tests\ORM\Functional\DatabaseDriverTestCase; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; class DDC2387Test extends DatabaseDriverTestCase { @@ -24,7 +24,7 @@ public function testCompositeAssociationKeyDetection() $metadata = $this->convertToClassMetadata([$product, $attributes], []); - $this->assertEquals(ClassMetadataInfo::GENERATOR_TYPE_NONE, $metadata['Ddc2387Attributes']->generatorType); - $this->assertEquals(ClassMetadataInfo::GENERATOR_TYPE_AUTO, $metadata['Ddc2387Product']->generatorType); + $this->assertEquals(ClassMetadata::GENERATOR_TYPE_NONE, $metadata['Ddc2387Attributes']->generatorType); + $this->assertEquals(ClassMetadata::GENERATOR_TYPE_AUTO, $metadata['Ddc2387Product']->generatorType); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php index fb1f0ec273a..8372b95e136 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php @@ -4,7 +4,7 @@ use Doctrine\ORM\EntityManager; use Doctrine\ORM\Id\AbstractIdGenerator; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\Driver\StaticPHPDriver; /** @@ -57,7 +57,7 @@ public function getId() return $this->id; } - public static function loadMetadata(ClassMetadataInfo $metadata) + public static function loadMetadata(ClassMetadata $metadata) { $metadata->mapField( [ @@ -67,7 +67,7 @@ public static function loadMetadata(ClassMetadataInfo $metadata) ] ); - $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_CUSTOM); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); $metadata->setCustomGeneratorDefinition(['class' => DDC2415Generator::class]); $metadata->isMappedSuperclass = true; @@ -88,7 +88,7 @@ public function getName() return $this->name; } - public static function loadMetadata(ClassMetadataInfo $metadata) + public static function loadMetadata(ClassMetadata $metadata) { $metadata->mapField( [ diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php index fe8329345ca..5d8d09fb7ad 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php @@ -10,7 +10,7 @@ class DDC3103Test extends \Doctrine\Tests\OrmFunctionalTestCase { /** - * @covers \Doctrine\ORM\Mapping\ClassMetadataInfo::__sleep + * @covers \Doctrine\ORM\Mapping\ClassMetadata::__sleep */ public function testIssue() { diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index e13d7aa7e5b..a75c19912d0 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -496,7 +496,7 @@ public function testDefaultFieldType() $this->assertEquals('id', $class->fieldMappings['id']['columnName']); $this->assertEquals('name', $class->fieldMappings['name']['columnName']); - $this->assertEquals(ClassMetadataInfo::GENERATOR_TYPE_NONE, $class->generatorType); + $this->assertEquals(ClassMetadata::GENERATOR_TYPE_NONE, $class->generatorType); } /** @@ -1161,16 +1161,16 @@ public function doStuffOnPostPersist() } - public static function loadMetadata(ClassMetadataInfo $metadata) + public static function loadMetadata(ClassMetadata $metadata) { - $metadata->setInheritanceType(ClassMetadataInfo::INHERITANCE_TYPE_NONE); + $metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); $metadata->setPrimaryTable( [ - 'name' => 'cms_users', - 'options' => ['foo' => 'bar', 'baz' => ['key' => 'val']], + 'name' => 'cms_users', + 'options' => ['foo' => 'bar', 'baz' => ['key' => 'val']], ] ); - $metadata->setChangeTrackingPolicy(ClassMetadataInfo::CHANGETRACKING_DEFERRED_IMPLICIT); + $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); $metadata->addLifecycleCallback('doStuffOnPrePersist', 'prePersist'); $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); $metadata->addLifecycleCallback('doStuffOnPostPersist', 'postPersist'); @@ -1205,7 +1205,7 @@ public static function loadMetadata(ClassMetadataInfo $metadata) $mapping = ['fieldName' => 'version', 'type' => 'integer']; $metadata->setVersionMapping($mapping); $metadata->mapField($mapping); - $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); $metadata->mapOneToOne( [ 'fieldName' => 'address', @@ -1319,9 +1319,9 @@ abstract class Animal */ public $id; - public static function loadMetadata(ClassMetadataInfo $metadata) + public static function loadMetadata(ClassMetadata $metadata) { - $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_CUSTOM); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); $metadata->setCustomGeneratorDefinition(["class" => "stdClass"]); } } @@ -1329,7 +1329,7 @@ public static function loadMetadata(ClassMetadataInfo $metadata) /** @Entity */ class Cat extends Animal { - public static function loadMetadata(ClassMetadataInfo $metadata) + public static function loadMetadata(ClassMetadata $metadata) { } @@ -1338,7 +1338,7 @@ public static function loadMetadata(ClassMetadataInfo $metadata) /** @Entity */ class Dog extends Animal { - public static function loadMetadata(ClassMetadataInfo $metadata) + public static function loadMetadata(ClassMetadata $metadata) { } @@ -1387,7 +1387,7 @@ public function getValue() return $this->value; } - public static function loadMetadata(ClassMetadataInfo $metadata) + public static function loadMetadata(ClassMetadata $metadata) { $metadata->mapField( [ @@ -1404,7 +1404,7 @@ public static function loadMetadata(ClassMetadataInfo $metadata) ] ); - $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_NONE); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); } } @@ -1424,7 +1424,7 @@ class DDC807Entity **/ public $id; - public static function loadMetadata(ClassMetadataInfo $metadata) + public static function loadMetadata(ClassMetadata $metadata) { $metadata->mapField( [ @@ -1441,7 +1441,7 @@ public static function loadMetadata(ClassMetadataInfo $metadata) ] ); - $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_NONE); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); } } @@ -1463,14 +1463,14 @@ class Comment */ private $content; - public static function loadMetadata(ClassMetadataInfo $metadata) + public static function loadMetadata(ClassMetadata $metadata) { - $metadata->setInheritanceType(ClassMetadataInfo::INHERITANCE_TYPE_NONE); + $metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); $metadata->setPrimaryTable( [ - 'indexes' => [ - ['columns' => ['content'], 'flags' => ['fulltext'], 'options' => ['where' => 'content IS NOT NULL']] - ] + 'indexes' => [ + ['columns' => ['content'], 'flags' => ['fulltext'], 'options' => ['where' => 'content IS NOT NULL']] + ] ] ); @@ -1506,7 +1506,7 @@ class SingleTableEntityNoDiscriminatorColumnMapping */ public $id; - public static function loadMetadata(ClassMetadataInfo $metadata) + public static function loadMetadata(ClassMetadata $metadata) { $metadata->mapField( [ @@ -1515,7 +1515,7 @@ public static function loadMetadata(ClassMetadataInfo $metadata) ] ); - $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_NONE); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); } } @@ -1540,7 +1540,7 @@ class SingleTableEntityIncompleteDiscriminatorColumnMapping */ public $id; - public static function loadMetadata(ClassMetadataInfo $metadata) + public static function loadMetadata(ClassMetadata $metadata) { $metadata->mapField( [ @@ -1549,7 +1549,7 @@ public static function loadMetadata(ClassMetadataInfo $metadata) ] ); - $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_NONE); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php index b30ed703bc4..6a809a14e0a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php @@ -238,7 +238,7 @@ public function testInvalidFetchOptionThrowsException() $factory->setEntityManager($em); $this->expectException(AnnotationException::class); - $this->expectExceptionMessage('[Enum Error] Attribute "fetch" of @Doctrine\ORM\Mapping\OneToMany declared on property Doctrine\Tests\ORM\Mapping\InvalidFetchOption::$collection accept only [LAZY, EAGER, EXTRA_LAZY], but got eager.'); + $this->expectExceptionMessage('[Enum Error] Attribute "fetch" of @Doctrine\ORM\Annotation\OneToMany declared on property Doctrine\Tests\ORM\Mapping\InvalidFetchOption::$collection accept only [LAZY, EAGER, EXTRA_LAZY], but got eager.'); $factory->getMetadataFor(InvalidFetchOption::class); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index 292954506a4..22c2a027224 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -6,7 +6,7 @@ use Doctrine\ORM\EntityRepository; use Doctrine\ORM\Id\SequenceGenerator; use Doctrine\ORM\Mapping\ClassMetadataFactory; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\MappingException; use Doctrine\Tests\Models\DDC869\DDC869ChequePayment; use Doctrine\Tests\Models\DDC869\DDC869CreditCardPayment; @@ -156,8 +156,8 @@ public function testMappedSuperclassWithId() */ public function testGeneratedValueFromMappedSuperclass() { + /* @var ClassMetadata $class */ $class = $this->cmf->getMetadataFor(SuperclassEntity::class); - /* @var $class ClassMetadataInfo */ $this->assertInstanceOf(SequenceGenerator::class, $class->idGenerator); $this->assertEquals( @@ -172,8 +172,8 @@ public function testGeneratedValueFromMappedSuperclass() */ public function testSequenceDefinitionInHierarchyWithSandwichMappedSuperclass() { + /* @var ClassMetadata $class */ $class = $this->cmf->getMetadataFor(HierarchyD::class); - /* @var $class ClassMetadataInfo */ $this->assertInstanceOf(SequenceGenerator::class, $class->idGenerator); $this->assertEquals( @@ -188,8 +188,8 @@ public function testSequenceDefinitionInHierarchyWithSandwichMappedSuperclass() */ public function testMultipleMappedSuperclasses() { + /* @var ClassMetadata $class */ $class = $this->cmf->getMetadataFor(MediumSuperclassEntity::class); - /* @var $class ClassMetadataInfo */ $this->assertInstanceOf(SequenceGenerator::class, $class->idGenerator); $this->assertEquals( @@ -205,8 +205,8 @@ public function testMultipleMappedSuperclasses() */ public function testMappedSuperclassIndex() { + /* @var $ClassMetadata class */ $class = $this->cmf->getMetadataFor(EntityIndexSubClass::class); - /* @var $class ClassMetadataInfo */ $this->assertArrayHasKey('mapped1', $class->fieldMappings); $this->assertArrayHasKey('IDX_NAME_INDEX', $class->table['uniqueConstraints']); diff --git a/tests/Doctrine/Tests/ORM/Mapping/FieldBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/FieldBuilderTest.php index 0ec0798aae1..b592e94c710 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/FieldBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/FieldBuilderTest.php @@ -3,7 +3,7 @@ namespace Doctrine\Tests\ORM\Mapping; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Tests\Models\CMS\CmsUser; use Doctrine\Tests\OrmTestCase; @@ -11,7 +11,7 @@ class FieldBuilderTest extends OrmTestCase { public function testCustomIdGeneratorCanBeSet() { - $cmBuilder = new ClassMetadataBuilder(new ClassMetadataInfo(CmsUser::class)); + $cmBuilder = new ClassMetadataBuilder(new ClassMetadata(CmsUser::class)); $fieldBuilder = $cmBuilder->createField('aField', 'string'); @@ -20,7 +20,7 @@ public function testCustomIdGeneratorCanBeSet() $fieldBuilder->build(); - $this->assertEquals(ClassMetadataInfo::GENERATOR_TYPE_CUSTOM, $cmBuilder->getClassMetadata()->generatorType); + $this->assertEquals(ClassMetadata::GENERATOR_TYPE_CUSTOM, $cmBuilder->getClassMetadata()->generatorType); $this->assertEquals(['class' => 'stdClass'], $cmBuilder->getClassMetadata()->customGeneratorDefinition); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php index 04493dbc424..e352149e3ec 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php @@ -16,7 +16,7 @@ protected function _loadDriver() // Convert Annotation mapping information to PHP // Uncomment this code if annotations changed and you want to update the PHP code // for the same mapping information -// $meta = new \Doctrine\ORM\Mapping\ClassMetadataInfo("Doctrine\Tests\ORM\Mapping\Animal"); +// $meta = new \Doctrine\ORM\Mapping\ClassMetadata("Doctrine\Tests\ORM\Mapping\Animal"); // $driver = $this->createAnnotationDriver(); // $driver->loadMetadataForClass("Doctrine\Tests\ORM\Mapping\Animal", $meta); // $exporter = $cme->getExporter('php', $path); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index 6ee9a78fc0b..3a5ece746a9 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -1,20 +1,15 @@ setInheritanceType(ClassMetadataInfo::INHERITANCE_TYPE_NONE); +$metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); $metadata->setPrimaryTable(['name' => 'cache_city']); -$metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_IDENTITY); -$metadata->setChangeTrackingPolicy(ClassMetadataInfo::CHANGETRACKING_DEFERRED_IMPLICIT); - -$metadata->enableCache( - [ - 'usage' => ClassMetadataInfo::CACHE_USAGE_READ_ONLY - ] -); +$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_IDENTITY); +$metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); +$metadata->enableCache(['usage' => ClassMetadata::CACHE_USAGE_READ_ONLY]); $metadata->mapField( [ @@ -47,7 +42,7 @@ ] ); $metadata->enableAssociationCache('state', [ - 'usage' => ClassMetadataInfo::CACHE_USAGE_READ_ONLY + 'usage' => ClassMetadata::CACHE_USAGE_READ_ONLY ] ); @@ -68,6 +63,6 @@ ] ); $metadata->enableAssociationCache('attractions', [ - 'usage' => ClassMetadataInfo::CACHE_USAGE_READ_ONLY + 'usage' => ClassMetadata::CACHE_USAGE_READ_ONLY ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php index 33389ce9530..d3d4b7ca3fe 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php @@ -1,9 +1,9 @@ setInheritanceType(ClassMetadataInfo::INHERITANCE_TYPE_JOINED); -$metadata->setTableName( 'company_contracts'); +$metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_JOINED); +$metadata->setTableName('company_contracts'); $metadata->setDiscriminatorColumn( [ 'name' => 'discr', diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php index 62459aad000..bcdb48aeb8f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php @@ -1,6 +1,6 @@ mapField( [ @@ -13,4 +13,4 @@ 'fieldName' => 'name' ] ); -$metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_NONE); +$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php index 49aeacb1eee..6fc2d784111 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php @@ -1,6 +1,6 @@ mapField( [ @@ -30,4 +30,4 @@ ] ); -$metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO); +$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php index 1f3f12b2d5f..39fde7db784 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php @@ -1,6 +1,6 @@ mapField( @@ -19,4 +19,4 @@ ); $metadata->isMappedSuperclass = true; $metadata->setCustomRepositoryClass(DDC869PaymentRepository::class); -$metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO); +$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Class.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Class.php index e1161da1360..5c0492c5177 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Class.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Class.php @@ -1,7 +1,8 @@ mapField( [ 'id' => true, @@ -11,4 +12,4 @@ ] ); -//$metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO); +//$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Entity.php index a14f3e7ea1f..cd0a919018b 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Entity.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Entity.php @@ -1,3 +1,3 @@ mapField( @@ -11,4 +11,4 @@ ); $metadata->isMappedSuperclass = true; $metadata->setCustomRepositoryClass(DDC889SuperClass::class); -$metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO); +$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php index dc445f1ca6c..a62ad8c8c27 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php @@ -1,6 +1,6 @@ mapField( [ @@ -55,4 +55,4 @@ ] ); -$metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO); +$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php index 5000a68a229..2dfdcee86e7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php @@ -1,11 +1,11 @@ setInheritanceType(ClassMetadataInfo::INHERITANCE_TYPE_SINGLE_TABLE); +/* @var ClassMetadata $metadata */ +$metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE); $metadata->setDiscriminatorColumn( [ 'name' => 'dtype', @@ -20,7 +20,7 @@ 'dog' => Dog::class, ] ); -$metadata->setChangeTrackingPolicy(ClassMetadataInfo::CHANGETRACKING_DEFERRED_IMPLICIT); +$metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); $metadata->mapField( [ 'fieldName' => 'id', @@ -34,5 +34,5 @@ 'columnName' => 'id', ] ); -$metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_CUSTOM); +$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); $metadata->setCustomGeneratorDefinition(["class" => "stdClass"]); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php index a33ebbaeb37..5e2b675fcd6 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php @@ -1,8 +1,8 @@ setInheritanceType(ClassMetadataInfo::INHERITANCE_TYPE_NONE); +$metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); $metadata->setPrimaryTable( [ 'indexes' => [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php index dd442ceb0e4..33a4c62e602 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php @@ -1,6 +1,6 @@ mapField( [ @@ -17,4 +17,4 @@ ] ); -$metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_NONE); +$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php index c9d8ad9f29d..59f06d8a760 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php @@ -1,6 +1,6 @@ mapField( [ @@ -16,4 +16,4 @@ ] ); -$metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_NONE); +$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php index ad1ed23bfc7..53dab3131eb 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php @@ -1,10 +1,10 @@ enableCache( [ - 'usage' => ClassMetadataInfo::CACHE_USAGE_READ_ONLY + 'usage' => ClassMetadata::CACHE_USAGE_READ_ONLY ] ); $metadata->mapManyToOne( diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index b716893b6fb..1b8ae73fc8d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -1,17 +1,17 @@ setInheritanceType(ClassMetadataInfo::INHERITANCE_TYPE_NONE); +$metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); $metadata->setPrimaryTable( [ 'name' => 'cms_users', ] ); -$metadata->setChangeTrackingPolicy(ClassMetadataInfo::CHANGETRACKING_DEFERRED_IMPLICIT); +$metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); $metadata->addLifecycleCallback('doStuffOnPrePersist', 'prePersist'); $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); $metadata->addLifecycleCallback('doStuffOnPostPersist', 'postPersist'); @@ -52,7 +52,7 @@ $mapping = ['fieldName' => 'version', 'type' => 'integer']; $metadata->setVersionMapping($mapping); $metadata->mapField($mapping); -$metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO); +$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); $metadata->mapOneToOne( [ 'fieldName' => 'address', diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index f2d74d0437f..5a44690d94e 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -6,7 +6,7 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\ORM\Mapping\ClassMetadataFactory; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; use Doctrine\ORM\Tools\EntityGenerator; use Doctrine\Tests\Models\DDC2372\DDC2372Admin; @@ -50,19 +50,21 @@ public function tearDown() } /** - * @param ClassMetadataInfo[] $embeddedClasses + * @param ClassMetadata[] $embeddedClasses * - * @return ClassMetadataInfo + * @return ClassMetadata */ public function generateBookEntityFixture(array $embeddedClasses = []) { - $metadata = new ClassMetadataInfo($this->_namespace . '\EntityGeneratorBook'); + $metadata = new ClassMetadata($this->_namespace . '\EntityGeneratorBook'); + $metadata->namespace = $this->_namespace; $metadata->customRepositoryClassName = $this->_namespace . '\EntityGeneratorBookRepository'; $metadata->table['name'] = 'book'; $metadata->table['uniqueConstraints']['name_uniq'] = ['columns' => ['name']]; $metadata->table['indexes']['status_idx'] = ['columns' => ['status']]; + $metadata->mapField(['fieldName' => 'name', 'type' => 'string']); $metadata->mapField(['fieldName' => 'status', 'type' => 'string', 'options' => ['default' => 'published']]); $metadata->mapField(['fieldName' => 'id', 'type' => 'integer', 'id' => true]); @@ -76,7 +78,7 @@ public function generateBookEntityFixture(array $embeddedClasses = []) [ 'fieldName' => 'comments', 'targetEntity' => EntityGeneratorComment::class, - 'fetch' => ClassMetadataInfo::FETCH_EXTRA_LAZY, + 'fetch' => ClassMetadata::FETCH_EXTRA_LAZY, 'joinTable' => [ 'name' => 'book_comment', 'joinColumns' => [['name' => 'book_id', 'referencedColumnName' => 'id']], @@ -86,7 +88,7 @@ public function generateBookEntityFixture(array $embeddedClasses = []) ); $metadata->addLifecycleCallback('loading', 'postLoad'); $metadata->addLifecycleCallback('willBeRemoved', 'preRemove'); - $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); foreach ($embeddedClasses as $fieldName => $embeddedClass) { $this->mapNestedEmbedded($fieldName, $metadata, $embeddedClass); @@ -100,15 +102,18 @@ public function generateBookEntityFixture(array $embeddedClasses = []) private function generateEntityTypeFixture(array $field) { - $metadata = new ClassMetadataInfo($this->_namespace . '\EntityType'); + $metadata = new ClassMetadata($this->_namespace . '\EntityType'); + $metadata->namespace = $this->_namespace; $metadata->table['name'] = 'entity_type'; + $metadata->mapField(['fieldName' => 'id', 'type' => 'integer', 'id' => true]); - $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); $name = $field['fieldName']; $type = $field['dbType']; + $metadata->mapField(['fieldName' => $name, 'type' => $type]); $this->_generator->writeEntityClass($metadata, $this->_tmpDir); @@ -117,13 +122,15 @@ private function generateEntityTypeFixture(array $field) } /** - * @return ClassMetadataInfo + * @return ClassMetadata */ private function generateIsbnEmbeddableFixture(array $embeddedClasses = [], $columnPrefix = null) { - $metadata = new ClassMetadataInfo($this->_namespace . '\EntityGeneratorIsbn'); + $metadata = new ClassMetadata($this->_namespace . '\EntityGeneratorIsbn'); + $metadata->namespace = $this->_namespace; $metadata->isEmbeddedClass = true; + $metadata->mapField(['fieldName' => 'prefix', 'type' => 'integer']); $metadata->mapField(['fieldName' => 'groupNumber', 'type' => 'integer']); $metadata->mapField(['fieldName' => 'publisherNumber', 'type' => 'integer']); @@ -140,13 +147,15 @@ private function generateIsbnEmbeddableFixture(array $embeddedClasses = [], $col } /** - * @return ClassMetadataInfo + * @return ClassMetadata */ private function generateTestEmbeddableFixture() { - $metadata = new ClassMetadataInfo($this->_namespace . '\EntityGeneratorTestEmbeddable'); + $metadata = new ClassMetadata($this->_namespace . '\EntityGeneratorTestEmbeddable'); + $metadata->namespace = $this->_namespace; $metadata->isEmbeddedClass = true; + $metadata->mapField(['fieldName' => 'field1', 'type' => 'integer']); $metadata->mapField(['fieldName' => 'field2', 'type' => 'integer', 'nullable' => true]); $metadata->mapField(['fieldName' => 'field3', 'type' => 'datetime']); @@ -158,15 +167,15 @@ private function generateTestEmbeddableFixture() } /** - * @param string $fieldName - * @param ClassMetadataInfo $classMetadata - * @param ClassMetadataInfo $embeddableMetadata - * @param string|null $columnPrefix + * @param string $fieldName + * @param ClassMetadata $classMetadata + * @param ClassMetadata $embeddableMetadata + * @param string|null $columnPrefix */ private function mapEmbedded( $fieldName, - ClassMetadataInfo $classMetadata, - ClassMetadataInfo $embeddableMetadata, + ClassMetadata $classMetadata, + ClassMetadata $embeddableMetadata, $columnPrefix = false ) { $classMetadata->mapEmbedded( @@ -175,14 +184,14 @@ private function mapEmbedded( } /** - * @param string $fieldName - * @param ClassMetadataInfo $classMetadata - * @param ClassMetadataInfo $embeddableMetadata + * @param string $fieldName + * @param ClassMetadata $classMetadata + * @param ClassMetadata $embeddableMetadata */ private function mapNestedEmbedded( $fieldName, - ClassMetadataInfo $classMetadata, - ClassMetadataInfo $embeddableMetadata + ClassMetadata $classMetadata, + ClassMetadata $embeddableMetadata ) { foreach ($embeddableMetadata->embeddedClasses as $property => $embeddableClass) { $classMetadata->mapEmbedded( @@ -200,9 +209,9 @@ private function mapNestedEmbedded( } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata */ - private function loadEntityClass(ClassMetadataInfo $metadata) + private function loadEntityClass(ClassMetadata $metadata) { $className = basename(str_replace('\\', '/', $metadata->name)); $path = $this->_tmpDir . '/' . $this->_namespace . '/' . $className . '.php'; @@ -213,11 +222,11 @@ private function loadEntityClass(ClassMetadataInfo $metadata) } /** - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata * * @return mixed An instance of the given metadata's class. */ - public function newInstance($metadata) + public function newInstance(ClassMetadata $metadata) { $this->loadEntityClass($metadata); @@ -449,7 +458,7 @@ public function testLoadMetadata() $reflectionService = new RuntimeReflectionService(); - $cm = new ClassMetadataInfo($metadata->name); + $cm = new ClassMetadata($metadata->name); $cm->initializeReflection($reflectionService); $driver = $this->createAnnotationDriver(); @@ -464,11 +473,11 @@ public function testLoadMetadata() $this->assertEquals($cm->embeddedClasses, $metadata->embeddedClasses); $this->assertEquals($cm->isEmbeddedClass, $metadata->isEmbeddedClass); - $this->assertEquals(ClassMetadataInfo::FETCH_EXTRA_LAZY, $cm->associationMappings['comments']['fetch']); + $this->assertEquals(ClassMetadata::FETCH_EXTRA_LAZY, $cm->associationMappings['comments']['fetch']); $isbn = $this->newInstance($embeddedMetadata); - $cm = new ClassMetadataInfo($embeddedMetadata->name); + $cm = new ClassMetadata($embeddedMetadata->name); $cm->initializeReflection($reflectionService); $driver->loadMetadataForClass($cm->name, $cm); @@ -491,7 +500,7 @@ public function testLoadPrefixedMetadata() $reflectionService = new RuntimeReflectionService(); - $cm = new ClassMetadataInfo($metadata->name); + $cm = new ClassMetadata($metadata->name); $cm->initializeReflection($reflectionService); $driver->loadMetadataForClass($cm->name, $cm); @@ -505,7 +514,7 @@ public function testLoadPrefixedMetadata() $isbn = $this->newInstance($embeddedMetadata); - $cm = new ClassMetadataInfo($embeddedMetadata->name); + $cm = new ClassMetadata($embeddedMetadata->name); $cm->initializeReflection($reflectionService); $driver->loadMetadataForClass($cm->name, $cm); @@ -520,7 +529,7 @@ public function testLoadPrefixedMetadata() */ public function testMappedSuperclassAnnotationGeneration() { - $metadata = new ClassMetadataInfo($this->_namespace . '\EntityGeneratorBook'); + $metadata = new ClassMetadata($this->_namespace . '\EntityGeneratorBook'); $metadata->namespace = $this->_namespace; $metadata->isMappedSuperclass = true; @@ -529,7 +538,7 @@ public function testMappedSuperclassAnnotationGeneration() $this->newInstance($metadata); // force instantiation (causes autoloading to kick in) $driver = new AnnotationDriver(new AnnotationReader(), []); - $cm = new ClassMetadataInfo($metadata->name); + $cm = new ClassMetadata($metadata->name); $cm->initializeReflection(new RuntimeReflectionService); $driver->loadMetadataForClass($cm->name, $cm); @@ -558,10 +567,10 @@ public function testParseTokensInEntityFile($php, $classes) */ public function testGenerateEntityWithSequenceGenerator() { - $metadata = new ClassMetadataInfo($this->_namespace . '\DDC1784Entity'); + $metadata = new ClassMetadata($this->_namespace . '\DDC1784Entity'); $metadata->namespace = $this->_namespace; $metadata->mapField(['fieldName' => 'id', 'type' => 'integer', 'id' => true]); - $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_SEQUENCE); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); $metadata->setSequenceGeneratorDefinition( [ 'sequenceName' => 'DDC1784_ID_SEQ', @@ -592,10 +601,10 @@ public function testGenerateEntityWithSequenceGenerator() */ public function testGenerateEntityWithMultipleInverseJoinColumns() { - $metadata = new ClassMetadataInfo($this->_namespace . '\DDC2079Entity'); + $metadata = new ClassMetadata($this->_namespace . '\DDC2079Entity'); $metadata->namespace = $this->_namespace; $metadata->mapField(['fieldName' => 'id', 'type' => 'integer', 'id' => true]); - $metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_SEQUENCE); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); $metadata->mapManyToMany( [ 'fieldName' => 'centroCustos', @@ -638,7 +647,7 @@ public function testGenerateEntityWithMultipleInverseJoinColumns() */ public function testGetInheritanceTypeString() { - $reflection = new \ReflectionClass('\Doctrine\ORM\Mapping\ClassMetadataInfo'); + $reflection = new \ReflectionClass('\Doctrine\ORM\Mapping\ClassMetadata'); $method = new \ReflectionMethod($this->_generator, 'getInheritanceTypeString'); $constants = $reflection->getConstants(); $pattern = '/^INHERITANCE_TYPE_/'; @@ -696,7 +705,7 @@ public function testGetChangeTrackingPolicyString() */ public function testGetIdGeneratorTypeString() { - $reflection = new \ReflectionClass('\Doctrine\ORM\Mapping\ClassMetadataInfo'); + $reflection = new \ReflectionClass('\Doctrine\ORM\Mapping\ClassMetadata'); $method = new \ReflectionMethod($this->_generator, 'getIdGeneratorTypeString'); $constants = $reflection->getConstants(); $pattern = '/^GENERATOR_TYPE_/'; diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index e9523b5b1df..f337c43447b 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -6,7 +6,7 @@ use Doctrine\Common\Persistence\Mapping\Driver\PHPDriver; use Doctrine\ORM\Configuration; use Doctrine\ORM\Mapping\ClassMetadataFactory; -use Doctrine\ORM\Mapping\ClassMetadataInfo; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; use Doctrine\ORM\Mapping\Driver\XmlDriver; use Doctrine\ORM\Mapping\Driver\YamlDriver; @@ -138,7 +138,7 @@ public function testExportedMetadataCanBeReadBackIn() /** * @depends testExportedMetadataCanBeReadBackIn - * @param ClassMetadataInfo $class + * @param ClassMetadata $class */ public function testTableIsExported($class) { @@ -152,7 +152,7 @@ public function testTableIsExported($class) /** * @depends testTableIsExported - * @param ClassMetadataInfo $class + * @param ClassMetadata $class */ public function testTypeIsExported($class) { @@ -163,11 +163,11 @@ public function testTypeIsExported($class) /** * @depends testTypeIsExported - * @param ClassMetadataInfo $class + * @param ClassMetadata $class */ public function testIdentifierIsExported($class) { - $this->assertEquals(ClassMetadataInfo::GENERATOR_TYPE_IDENTITY, $class->generatorType, "Generator Type wrong"); + $this->assertEquals(ClassMetadata::GENERATOR_TYPE_IDENTITY, $class->generatorType, "Generator Type wrong"); $this->assertEquals(['id'], $class->identifier); $this->assertTrue(isset($class->fieldMappings['id']['id']) && $class->fieldMappings['id']['id'] === true); @@ -176,7 +176,7 @@ public function testIdentifierIsExported($class) /** * @depends testIdentifierIsExported - * @param ClassMetadataInfo $class + * @param ClassMetadata $class */ public function testFieldsAreExported($class) { @@ -223,7 +223,7 @@ public function testFieldsAreProperlySerialized() /** * @depends testFieldsAreExported - * @param ClassMetadataInfo $class + * @param ClassMetadata $class */ public function testOneToOneAssociationsAreExported($class) { @@ -239,7 +239,7 @@ public function testOneToOneAssociationsAreExported($class) $this->assertFalse($class->associationMappings['address']['isCascadeMerge']); $this->assertFalse($class->associationMappings['address']['isCascadeDetach']); $this->assertTrue($class->associationMappings['address']['orphanRemoval']); - $this->assertEquals(ClassMetadataInfo::FETCH_EAGER, $class->associationMappings['address']['fetch']); + $this->assertEquals(ClassMetadata::FETCH_EAGER, $class->associationMappings['address']['fetch']); return $class; } @@ -255,7 +255,7 @@ public function testManyToOneAssociationsAreExported($class) /** * @depends testOneToOneAssociationsAreExported - * @param ClassMetadataInfo $class + * @param ClassMetadata $class */ public function testOneToManyAssociationsAreExported($class) { @@ -270,14 +270,14 @@ public function testOneToManyAssociationsAreExported($class) $this->assertTrue($class->associationMappings['phonenumbers']['isCascadeMerge']); $this->assertFalse($class->associationMappings['phonenumbers']['isCascadeDetach']); $this->assertTrue($class->associationMappings['phonenumbers']['orphanRemoval']); - $this->assertEquals(ClassMetadataInfo::FETCH_LAZY, $class->associationMappings['phonenumbers']['fetch']); + $this->assertEquals(ClassMetadata::FETCH_LAZY, $class->associationMappings['phonenumbers']['fetch']); return $class; } /** * @depends testOneToManyAssociationsAreExported - * @param ClassMetadataInfo $metadata + * @param ClassMetadata $metadata */ public function testManyToManyAssociationsAreExported($class) { @@ -297,14 +297,14 @@ public function testManyToManyAssociationsAreExported($class) $this->assertTrue($class->associationMappings['groups']['isCascadeRefresh']); $this->assertTrue($class->associationMappings['groups']['isCascadeMerge']); $this->assertTrue($class->associationMappings['groups']['isCascadeDetach']); - $this->assertEquals(ClassMetadataInfo::FETCH_EXTRA_LAZY, $class->associationMappings['groups']['fetch']); + $this->assertEquals(ClassMetadata::FETCH_EXTRA_LAZY, $class->associationMappings['groups']['fetch']); return $class; } /** * @depends testManyToManyAssociationsAreExported - * @param ClassMetadataInfo $class + * @param ClassMetadata $class */ public function testLifecycleCallbacksAreExported($class) { @@ -322,7 +322,7 @@ public function testLifecycleCallbacksAreExported($class) /** * @depends testLifecycleCallbacksAreExported - * @param ClassMetadataInfo $class + * @param ClassMetadata $class */ public function testCascadeIsExported($class) { @@ -338,7 +338,7 @@ public function testCascadeIsExported($class) /** * @depends testCascadeIsExported - * @param ClassMetadataInfo $class + * @param ClassMetadata $class */ public function testInversedByIsExported($class) { diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php index 424412882eb..d5fa7b5bc93 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php @@ -1,7 +1,7 @@ setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_SEQUENCE); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); $metadata->setSequenceGeneratorDefinition( [ 'sequenceName' => 'seq_entity_test_id', diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php index 5c8a0c013ba..db4c0985e4b 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php @@ -1,16 +1,16 @@ setInheritanceType(ClassMetadataInfo::INHERITANCE_TYPE_NONE); +$metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); $metadata->setPrimaryTable( [ 'name' => 'cms_users', 'options' => ['engine' => 'MyISAM', 'foo' => ['bar' => 'baz']], ] ); -$metadata->setChangeTrackingPolicy(ClassMetadataInfo::CHANGETRACKING_DEFERRED_IMPLICIT); +$metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); $metadata->addLifecycleCallback('doStuffOnPrePersist', 'prePersist'); $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); $metadata->addLifecycleCallback('doStuffOnPostPersist', 'postPersist'); @@ -47,7 +47,7 @@ 'options' => ["unsigned"=>true], ] ); -$metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO); +$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); $metadata->mapManyToOne( [ 'fieldName' => 'mainGroup', @@ -74,7 +74,7 @@ ], ], 'orphanRemoval' => true, - 'fetch' => ClassMetadataInfo::FETCH_EAGER, + 'fetch' => ClassMetadata::FETCH_EAGER, ] ); $metadata->mapOneToOne( @@ -88,7 +88,7 @@ ], 'inversedBy' => NULL, 'orphanRemoval' => false, - 'fetch' => ClassMetadataInfo::FETCH_EAGER, + 'fetch' => ClassMetadata::FETCH_EAGER, ] ); $metadata->mapOneToMany( @@ -102,7 +102,7 @@ ], 'mappedBy' => 'user', 'orphanRemoval' => true, - 'fetch' => ClassMetadataInfo::FETCH_LAZY, + 'fetch' => ClassMetadata::FETCH_LAZY, 'orderBy' => [ 'number' => 'ASC', @@ -113,7 +113,7 @@ [ 'fieldName' => 'groups', 'targetEntity' => Export\Group::class, - 'fetch' => ClassMetadataInfo::FETCH_EXTRA_LAZY, + 'fetch' => ClassMetadata::FETCH_EXTRA_LAZY, 'cascade' => [ 0 => 'remove', diff --git a/tests/Doctrine/Tests/OrmTestCase.php b/tests/Doctrine/Tests/OrmTestCase.php index 46e8ea143ee..4b767ab5f00 100644 --- a/tests/Doctrine/Tests/OrmTestCase.php +++ b/tests/Doctrine/Tests/OrmTestCase.php @@ -70,7 +70,7 @@ protected function createAnnotationDriver($paths = [], $alias = null) // Register the ORM Annotations in the AnnotationRegistry $reader = new Annotations\SimpleAnnotationReader(); - $reader->addNamespace('Doctrine\ORM\Mapping'); + $reader->addNamespace('Doctrine\ORM\Annotation'); $reader = new Annotations\CachedReader($reader, new ArrayCache()); } else if (version_compare(Version::VERSION, '2.1.0-BETA3-DEV', '>=')) { @@ -80,9 +80,9 @@ protected function createAnnotationDriver($paths = [], $alias = null) $reader->setEnableParsePhpImports(false); if ($alias) { - $reader->setAnnotationNamespaceAlias('Doctrine\ORM\Mapping\\', $alias); + $reader->setAnnotationNamespaceAlias('Doctrine\ORM\Annotation\\', $alias); } else { - $reader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\'); + $reader->setDefaultAnnotationNamespace('Doctrine\ORM\Annotation\\'); } $reader = new Annotations\CachedReader(new Annotations\IndexedReader($reader), new ArrayCache()); @@ -90,13 +90,13 @@ protected function createAnnotationDriver($paths = [], $alias = null) $reader = new Annotations\AnnotationReader(); if ($alias) { - $reader->setAnnotationNamespaceAlias('Doctrine\ORM\Mapping\\', $alias); + $reader->setAnnotationNamespaceAlias('Doctrine\ORM\Annotation\\', $alias); } else { - $reader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\'); + $reader->setDefaultAnnotationNamespace('Doctrine\ORM\Annotation\\'); } } - Annotations\AnnotationRegistry::registerFile(__DIR__ . "/../../../lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php"); + Annotations\AnnotationRegistry::registerFile(__DIR__ . "/../../../lib/Doctrine/ORM/Annotation/DoctrineAnnotations.php"); return new AnnotationDriver($reader, (array) $paths); } From 4de9fd332cbb0ea6add9fce52cec58f28d156381 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 6 May 2016 21:47:01 +0000 Subject: [PATCH 002/275] Renamed setIdentifierValues to assignIdentifier --- docs/en/reference/php-mapping.rst | 2 +- lib/Doctrine/ORM/EntityManager.php | 2 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 4 +--- lib/Doctrine/ORM/UnitOfWork.php | 4 ++-- tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php | 2 +- 5 files changed, 6 insertions(+), 8 deletions(-) diff --git a/docs/en/reference/php-mapping.rst b/docs/en/reference/php-mapping.rst index 2efa3a71d75..fafd9a20676 100644 --- a/docs/en/reference/php-mapping.rst +++ b/docs/en/reference/php-mapping.rst @@ -196,7 +196,7 @@ Internal - ``getReflectionProperty($name)`` - ``getSingleIdReflectionProperty()`` - ``getIdentifierValues($entity)`` -- ``setIdentifierValues($entity, $id)`` +- ``assignIdentifier($entity, $id)`` - ``setFieldValue($entity, $field, $value)`` - ``getFieldValue($entity, $field)`` diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index d4b032bfc1e..5bd5e8f55b2 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -524,7 +524,7 @@ public function getPartialReference($entityName, $identifier) $entity = $class->newInstance(); - $class->setIdentifierValues($entity, $identifier); + $class->assignIdentifier($entity, $identifier); $this->unitOfWork->registerManaged($entity, $identifier, []); $this->unitOfWork->markReadOnly($entity); diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 1691d1e0a61..c21bf50a249 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -745,10 +745,8 @@ public function getIdentifierValues($entity) * @param array $id * * @return void - * - * @todo Rename to assignIdentifier() */ - public function setIdentifierValues($entity, array $id) + public function assignIdentifier($entity, array $id) { foreach ($id as $idField => $idValue) { $this->reflFields[$idField]->setValue($entity, $idValue); diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index c0b0dd8c302..662145d09f6 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -889,7 +889,7 @@ private function persistNew($class, $entity) if ( ! $idGen instanceof \Doctrine\ORM\Id\AssignedGenerator) { $idValue = [$class->getSingleIdentifierFieldName() => $this->convertSingleFieldIdentifierToPHPValue($class, $idValue)]; - $class->setIdentifierValues($entity, $idValue); + $class->assignIdentifier($entity, $idValue); } $this->entityIdentifiers[$oid] = $idValue; @@ -1846,7 +1846,7 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, arra } $managedCopy = $this->newInstance($class); - $class->setIdentifierValues($managedCopy, $id); + $class->assignIdentifier($managedCopy, $id); $this->mergeEntityStateIntoManagedCopy($entity, $managedCopy); $this->persistNew($class, $managedCopy); diff --git a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php index c10afbb8961..55ea226ae59 100644 --- a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php @@ -715,7 +715,7 @@ public function testSupportsMemberOfExpressionSelfReferencing() // Tough one: Many-many self-referencing ("friends") with class table inheritance $q = $this->_em->createQuery('SELECT p FROM Doctrine\Tests\Models\Company\CompanyPerson p WHERE :param MEMBER OF p.friends'); $person = new CompanyPerson(); - $this->_em->getClassMetadata(get_class($person))->setIdentifierValues($person, ['id' => 101]); + $this->_em->getClassMetadata(get_class($person))->assignIdentifier($person, ['id' => 101]); $q->setParameter('param', $person); $this->assertEquals( 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.title AS title_2, c2_.salary AS salary_3, c2_.department AS department_4, c2_.startDate AS startDate_5, c0_.discr AS discr_6, c0_.spouse_id AS spouse_id_7, c1_.car_id AS car_id_8 FROM company_persons c0_ LEFT JOIN company_managers c1_ ON c0_.id = c1_.id LEFT JOIN company_employees c2_ ON c0_.id = c2_.id WHERE EXISTS (SELECT 1 FROM company_persons_friends c3_ INNER JOIN company_persons c4_ ON c3_.friend_id = c4_.id WHERE c3_.person_id = c0_.id AND c4_.id IN (?))', From 71505f37faa49afcbe78004def7e826204f623ac Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 6 May 2016 21:59:15 +0000 Subject: [PATCH 003/275] Removed ClassMetadata::$columnNames. Improved overall test suite by 10% due to less serialization/deserialization --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 20 ++----------------- .../ORM/Mapping/AbstractMappingDriverTest.php | 2 -- .../Tests/ORM/Tools/EntityGeneratorTest.php | 4 ---- 3 files changed, 2 insertions(+), 24 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index c21bf50a249..d40aa599c4e 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -404,17 +404,6 @@ class ClassMetadata implements ClassMetadataInterface */ public $fieldNames = []; - /** - * READ-ONLY: A map of field names to column names. Keys are field names and values column names. - * Used to look up column names from field names. - * This is the reverse lookup map of $_fieldNames. - * - * @var array - * - * @deprecated 3.0 Remove this. - */ - public $columnNames = []; - /** * READ-ONLY: The discriminator value of this class. * @@ -810,7 +799,6 @@ public function __sleep() // This metadata is always serialized/cached. $serialized = [ 'associationMappings', - 'columnNames', //TODO: 3.0 Remove this. Can use fieldMappings[$fieldName]['columnName'] 'fieldMappings', 'fieldNames', 'embeddedClasses', @@ -1209,8 +1197,8 @@ public function isNullable($fieldName) */ public function getColumnName($fieldName) { - return isset($this->columnNames[$fieldName]) - ? $this->columnNames[$fieldName] + return isset($this->fieldMappings[$fieldName]) + ? $this->fieldMappings[$fieldName]['columnName'] : $fieldName; } @@ -1400,8 +1388,6 @@ protected function _validateAndCompleteFieldMapping(array &$mapping) $mapping['quoted'] = true; } - $this->columnNames[$mapping['fieldName']] = $mapping['columnName']; - if (isset($this->fieldNames[$mapping['columnName']]) || ($this->discriminatorColumn && $this->discriminatorColumn['name'] === $mapping['columnName'])) { throw MappingException::duplicateColumnName($this->name, $mapping['columnName']); } @@ -2207,7 +2193,6 @@ public function setAttributeOverride($fieldName, array $overrideMapping) unset($this->fieldMappings[$fieldName]); unset($this->fieldNames[$mapping['columnName']]); - unset($this->columnNames[$mapping['fieldName']]); $this->_validateAndCompleteFieldMapping($overrideMapping); @@ -2377,7 +2362,6 @@ public function addInheritedAssociationMapping(array $mapping/*, $owningClassNam public function addInheritedFieldMapping(array $fieldMapping) { $this->fieldMappings[$fieldMapping['fieldName']] = $fieldMapping; - $this->columnNames[$fieldMapping['fieldName']] = $fieldMapping['columnName']; $this->fieldNames[$fieldMapping['columnName']] = $fieldMapping['fieldName']; } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index a75c19912d0..fba0acfd3fa 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -834,7 +834,6 @@ public function testAttributeOverridesMapping() $this->assertEquals('id', $adminMetadata->fieldMappings['id']['fieldName']); $this->assertEquals('user_id', $adminMetadata->fieldMappings['id']['columnName']); $this->assertEquals(['user_id'=>'id','user_name'=>'name'], $adminMetadata->fieldNames); - $this->assertEquals(['id'=>'user_id','name'=>'user_name'], $adminMetadata->columnNames); $this->assertEquals(150, $adminMetadata->fieldMappings['id']['length']); @@ -849,7 +848,6 @@ public function testAttributeOverridesMapping() $this->assertEquals('guest_id', $guestMetadata->fieldMappings['id']['columnName']); $this->assertEquals('id', $guestMetadata->fieldMappings['id']['fieldName']); $this->assertEquals(['guest_id'=>'id','guest_name'=>'name'], $guestMetadata->fieldNames); - $this->assertEquals(['id'=>'guest_id','name'=>'guest_name'], $guestMetadata->columnNames); $this->assertEquals(140, $guestMetadata->fieldMappings['id']['length']); $this->assertEquals('name', $guestMetadata->fieldMappings['name']['fieldName']); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 5a44690d94e..d634b9616f3 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -464,7 +464,6 @@ public function testLoadMetadata() $driver = $this->createAnnotationDriver(); $driver->loadMetadataForClass($cm->name, $cm); - $this->assertEquals($cm->columnNames, $metadata->columnNames); $this->assertEquals($cm->getTableName(), $metadata->getTableName()); $this->assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); $this->assertEquals($cm->identifier, $metadata->identifier); @@ -482,7 +481,6 @@ public function testLoadMetadata() $driver->loadMetadataForClass($cm->name, $cm); - $this->assertEquals($cm->columnNames, $embeddedMetadata->columnNames); $this->assertEquals($cm->embeddedClasses, $embeddedMetadata->embeddedClasses); $this->assertEquals($cm->isEmbeddedClass, $embeddedMetadata->isEmbeddedClass); } @@ -505,7 +503,6 @@ public function testLoadPrefixedMetadata() $driver->loadMetadataForClass($cm->name, $cm); - $this->assertEquals($cm->columnNames, $metadata->columnNames); $this->assertEquals($cm->getTableName(), $metadata->getTableName()); $this->assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); $this->assertEquals($cm->identifier, $metadata->identifier); @@ -519,7 +516,6 @@ public function testLoadPrefixedMetadata() $driver->loadMetadataForClass($cm->name, $cm); - $this->assertEquals($cm->columnNames, $embeddedMetadata->columnNames); $this->assertEquals($cm->embeddedClasses, $embeddedMetadata->embeddedClasses); $this->assertEquals($cm->isEmbeddedClass, $embeddedMetadata->isEmbeddedClass); } From 4cab2000c136878ee96afe62ae22b84330dd7bac Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 6 May 2016 22:03:19 +0000 Subject: [PATCH 004/275] Removed ClassMetadata::$namespace --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 19 +++++-------------- .../Tests/ORM/Mapping/ClassMetadataTest.php | 1 - 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index d40aa599c4e..a59d88e4820 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -213,15 +213,6 @@ class ClassMetadata implements ClassMetadataInterface */ public $name; - /** - * READ-ONLY: The namespace the entity class is contained in. - * - * @var string - * - * @todo Not really needed. Usage could be localized. - */ - public $namespace; - /** * READ-ONLY: The name of the entity class that is at the root of the mapped entity inheritance * hierarchy. If the entity is not part of a mapped inheritance hierarchy this is the same @@ -805,7 +796,6 @@ public function __sleep() 'identifier', 'isIdentifierComposite', // TODO: REMOVE 'name', - 'namespace', // TODO: REMOVE 'table', 'rootEntityName', 'idGenerator', //TODO: Does not really need to be serialized. Could be moved to runtime. @@ -969,7 +959,6 @@ public function wakeupReflection($reflService) public function initializeReflection($reflService) { $this->reflClass = $reflService->getClass($this->name); - $this->namespace = $reflService->getClassNamespace($this->name); if ($this->reflClass) { $this->name = $this->rootEntityName = $this->reflClass->getName(); @@ -3217,12 +3206,14 @@ public function getAssociationsByTargetClass($targetClass) */ public function fullyQualifiedClassName($className) { - if (empty($className)) { + if (empty($className) || ! $this->reflClass) { return $className; } - if ($className !== null && strpos($className, '\\') === false && $this->namespace) { - return $this->namespace . '\\' . $className; + $namespace = $this->reflClass->getNamespaceName(); + + if ($className !== null && strpos($className, '\\') === false && $namespace) { + return $namespace . '\\' . $className; } return $className; diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 24d9559f78a..308eb1a4f82 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -56,7 +56,6 @@ public function testClassMetadataInstanceSerialization() // Check state $this->assertTrue(count($cm->getReflectionProperties()) > 0); - $this->assertEquals('Doctrine\Tests\Models\CMS', $cm->namespace); $this->assertInstanceOf(\ReflectionClass::class, $cm->reflClass); $this->assertEquals(CMS\CmsUser::class, $cm->name); $this->assertEquals('UserParent', $cm->rootEntityName); From 64fbb3db757bf4d7a93b8c65a5e5b7d51eaf112f Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 7 May 2016 01:47:08 +0000 Subject: [PATCH 005/275] Removed ClassMetadata::$fieldMappings[$field][requireSQLConversion] --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 2 - .../AbstractEntityInheritancePersister.php | 11 ++- .../Entity/BasicEntityPersister.php | 45 ++++++------ lib/Doctrine/ORM/Query/SqlWalker.php | 72 +++++++++---------- .../Functional/OneToOneEagerLoadingTest.php | 10 +-- .../BasicEntityPersisterTypeValueSqlTest.php | 2 +- 6 files changed, 64 insertions(+), 78 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index a59d88e4820..cc672bafe36 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1403,8 +1403,6 @@ protected function _validateAndCompleteFieldMapping(array &$mapping) if (isset($mapping['id']) && true === $mapping['id']) { throw MappingException::sqlConversionNotAllowedForIdentifiers($this->name, $mapping['fieldName'], $mapping['type']); } - - $mapping['requireSQLConversion'] = true; } } diff --git a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php index 79472b50c0e..bc10d378d19 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php @@ -62,6 +62,7 @@ protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r' { $tableAlias = $alias == 'r' ? '' : $alias; $fieldMapping = $class->fieldMappings[$field]; + $type = Type::getType($fieldMapping['type']); $columnAlias = $this->getSQLColumnAlias($fieldMapping['columnName']); $sql = sprintf( '%s.%s', @@ -71,15 +72,13 @@ protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r' $this->currentPersisterContext->rsm->addFieldResult($alias, $columnAlias, $field, $class->name); - if (isset($fieldMapping['requireSQLConversion'])) { - $type = Type::getType($fieldMapping['type']); - $sql = $type->convertToPHPValueSQL($sql, $this->platform); - } - - return $sql . ' AS ' . $columnAlias; + return $type->convertToPHPValueSQL($sql, $this->platform) . ' AS ' . $columnAlias; } /** + * @todo Consider receiving fieldName, ClassMetadata and alias only and let this code handle the rest. + * This should minimize the need for PersisterHelper::getTypeOfColumn() + * * @param string $tableAlias * @param string $joinColumnName * @param string $quotedColumnName diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 972199c5ea2..61f4c19b081 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -418,13 +418,11 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat switch (true) { case isset($this->class->fieldNames[$columnName]): - $fieldName = $this->class->fieldNames[$columnName]; - $column = $this->quoteStrategy->getColumnName($fieldName, $this->class, $this->platform); - - if (isset($this->class->fieldMappings[$fieldName]['requireSQLConversion'])) { - $type = Type::getType($this->columnTypes[$columnName]); - $placeholder = $type->convertToDatabaseValueSQL('?', $this->platform); - } + $fieldName = $this->class->fieldNames[$columnName]; + $fieldMapping = $this->class->fieldMappings[$fieldName]; + $column = $this->quoteStrategy->getColumnName($fieldName, $this->class, $this->platform); + $type = Type::getType($fieldMapping['type']); + $placeholder = $type->convertToDatabaseValueSQL('?', $this->platform); break; @@ -1175,7 +1173,6 @@ protected final function getOrderBySQL(array $orderBy, $baseTableAlias) } if (isset($this->class->associationMappings[$fieldName])) { - if ( ! $this->class->associationMappings[$fieldName]['isOwningSide']) { throw ORMException::invalidFindByInverseAssociation($this->class->name, $fieldName); } @@ -1412,11 +1409,11 @@ public function getInsertSQL() foreach ($columns as $column) { $placeholder = '?'; - if (isset($this->class->fieldNames[$column]) - && isset($this->columnTypes[$this->class->fieldNames[$column]]) - && isset($this->class->fieldMappings[$this->class->fieldNames[$column]]['requireSQLConversion'])) { - $type = Type::getType($this->columnTypes[$this->class->fieldNames[$column]]); - $placeholder = $type->convertToDatabaseValueSQL('?', $this->platform); + if (isset($this->class->fieldNames[$column])) { + $fieldName = $this->class->fieldNames[$column]; + $fieldMapping = $this->class->fieldMappings[$fieldName]; + $type = Type::getType($fieldMapping['type']); + $placeholder = $type->convertToDatabaseValueSQL('?', $this->platform); } $values[] = $placeholder; @@ -1485,19 +1482,18 @@ protected function getInsertColumnList() protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r') { $root = $alias == 'r' ? '' : $alias ; - $tableAlias = $this->getSQLTableAlias($class->name, $root); $fieldMapping = $class->fieldMappings[$field]; - $sql = sprintf('%s.%s', $tableAlias, $this->quoteStrategy->getColumnName($field, $class, $this->platform)); + $type = Type::getType($fieldMapping['type']); $columnAlias = $this->getSQLColumnAlias($fieldMapping['columnName']); + $sql = sprintf( + '%s.%s', + $this->getSQLTableAlias($class->name, $root), + $this->quoteStrategy->getColumnName($field, $class, $this->platform) + ); $this->currentPersisterContext->rsm->addFieldResult($alias, $columnAlias, $field); - if (isset($fieldMapping['requireSQLConversion'])) { - $type = Type::getType($fieldMapping['type']); - $sql = $type->convertToPHPValueSQL($sql, $this->platform); - } - - return $sql . ' AS ' . $columnAlias; + return $type->convertToPHPValueSQL($sql, $this->platform) . ' AS ' . $columnAlias; } /** @@ -1614,9 +1610,10 @@ public function getSelectConditionStatementSQL($field, $value, $assoc = null, $c foreach ($columns as $column) { $placeholder = '?'; - if (isset($this->class->fieldMappings[$field]['requireSQLConversion'])) { - $type = Type::getType($this->class->fieldMappings[$field]['type']); - $placeholder = $type->convertToDatabaseValueSQL($placeholder, $this->platform); + if (isset($this->class->fieldMappings[$field])) { + $fieldMapping = $this->class->fieldMappings[$field]; + $type = Type::getType($fieldMapping['type']); + $placeholder = $type->convertToDatabaseValueSQL($placeholder, $this->platform); } if (null !== $comparison) { diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 64efb80cd49..81fe8e11fa7 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -1269,28 +1269,25 @@ public function walkSelectExpression($selectExpression) throw QueryException::invalidPathExpression($expr); } - $fieldName = $expr->field; - $dqlAlias = $expr->identificationVariable; - $qComp = $this->queryComponents[$dqlAlias]; - $class = $qComp['metadata']; - - $resultAlias = $selectExpression->fieldIdentificationVariable ?: $fieldName; - $tableName = ($class->isInheritanceTypeJoined()) + $fieldName = $expr->field; + $dqlAlias = $expr->identificationVariable; + $qComp = $this->queryComponents[$dqlAlias]; + $class = $qComp['metadata']; + $fieldMapping = $class->fieldMappings[$fieldName]; + $type = Type::getType($fieldMapping['type']); + $columnAlias = $this->getSQLColumnAlias($fieldMapping['columnName']); + $resultAlias = $selectExpression->fieldIdentificationVariable ?: $fieldName; + $tableName = ($class->isInheritanceTypeJoined()) ? $this->em->getUnitOfWork()->getEntityPersister($class->name)->getOwningTable($fieldName) : $class->getTableName(); - $sqlTableAlias = $this->getSQLTableAlias($tableName, $dqlAlias); - $fieldMapping = $class->fieldMappings[$fieldName]; - $columnName = $this->quoteStrategy->getColumnName($fieldName, $class, $this->platform); - $columnAlias = $this->getSQLColumnAlias($fieldMapping['columnName']); - $col = $sqlTableAlias . '.' . $columnName; - - if (isset($fieldMapping['requireSQLConversion'])) { - $type = Type::getType($fieldMapping['type']); - $col = $type->convertToPHPValueSQL($col, $this->conn->getDatabasePlatform()); - } + $col = sprintf( + '%s.%s', + $this->getSQLTableAlias($tableName, $dqlAlias), + $this->quoteStrategy->getColumnName($fieldName, $class, $this->platform) + ); - $sql .= $col . ' AS ' . $columnAlias; + $sql .= $type->convertToPHPValueSQL($col, $this->conn->getDatabasePlatform()) . ' AS ' . $columnAlias; $this->scalarResultAliasMap[$resultAlias] = $columnAlias; @@ -1373,22 +1370,19 @@ public function walkSelectExpression($selectExpression) continue; } - $tableName = (isset($mapping['inherited'])) + $type = Type::getType($mapping['type']); + $columnAlias = $this->getSQLColumnAlias($mapping['columnName']); + $tableName = (isset($mapping['inherited'])) ? $this->em->getClassMetadata($mapping['inherited'])->getTableName() : $class->getTableName(); - $sqlTableAlias = $this->getSQLTableAlias($tableName, $dqlAlias); - $columnAlias = $this->getSQLColumnAlias($mapping['columnName']); - $quotedColumnName = $this->quoteStrategy->getColumnName($fieldName, $class, $this->platform); - - $col = $sqlTableAlias . '.' . $quotedColumnName; + $col = sprintf( + '%s.%s', + $this->getSQLTableAlias($tableName, $dqlAlias), + $this->quoteStrategy->getColumnName($fieldName, $class, $this->platform) + ); - if (isset($mapping['requireSQLConversion'])) { - $type = Type::getType($mapping['type']); - $col = $type->convertToPHPValueSQL($col, $this->platform); - } - - $sqlParts[] = $col . ' AS '. $columnAlias; + $sqlParts[] = $type->convertToPHPValueSQL($col, $this->platform) . ' AS '. $columnAlias; $this->scalarResultAliasMap[$resultAlias][] = $columnAlias; @@ -1409,17 +1403,15 @@ public function walkSelectExpression($selectExpression) continue; } - $columnAlias = $this->getSQLColumnAlias($mapping['columnName']); - $quotedColumnName = $this->quoteStrategy->getColumnName($fieldName, $subClass, $this->platform); - - $col = $sqlTableAlias . '.' . $quotedColumnName; - - if (isset($mapping['requireSQLConversion'])) { - $type = Type::getType($mapping['type']); - $col = $type->convertToPHPValueSQL($col, $this->platform); - } + $type = Type::getType($mapping['type']); + $columnAlias = $this->getSQLColumnAlias($mapping['columnName']); + $col = sprintf( + '%s.%s', + $sqlTableAlias, + $this->quoteStrategy->getColumnName($fieldName, $subClass, $this->platform) + ); - $sqlParts[] = $col . ' AS ' . $columnAlias; + $sqlParts[] = $type->convertToPHPValueSQL($col, $this->platform) . ' AS ' . $columnAlias; $this->scalarResultAliasMap[$resultAlias][] = $columnAlias; diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php index 5b4cdffdfe5..ac623482b1b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php @@ -146,14 +146,14 @@ public function testEagerLoadWithNullableColumnsGeneratesLeftJoinOnBothSides() $train = $this->_em->find(get_class($train), $train->id); $this->assertSQLEquals( - "SELECT t0.id AS id_1, t0.driver_id AS driver_id_2, t3.id AS id_4, t3.name AS name_5, t0.owner_id AS owner_id_6, t7.id AS id_8, t7.name AS name_9 FROM Train t0 LEFT JOIN TrainDriver t3 ON t0.driver_id = t3.id INNER JOIN TrainOwner t7 ON t0.owner_id = t7.id WHERE t0.id = ?", + "SELECT t0.id AS id_1, t0.driver_id AS driver_id_2, t4.id AS id_3, t4.name AS name_5, t0.owner_id AS owner_id_6, t8.id AS id_7, t8.name AS name_9 FROM Train t0 LEFT JOIN TrainDriver t4 ON t0.driver_id = t4.id INNER JOIN TrainOwner t8 ON t0.owner_id = t8.id WHERE t0.id = ?", $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery]['sql'] ); $this->_em->clear(); $driver = $this->_em->find(get_class($driver), $driver->id); $this->assertSQLEquals( - "SELECT t0.id AS id_1, t0.name AS name_2, t3.id AS id_4, t3.driver_id AS driver_id_5, t3.owner_id AS owner_id_6 FROM TrainOwner t0 LEFT JOIN Train t3 ON t3.owner_id = t0.id WHERE t0.id IN (?)", + "SELECT t0.id AS id_1, t0.name AS name_2, t4.id AS id_3, t4.driver_id AS driver_id_5, t4.owner_id AS owner_id_6 FROM TrainOwner t0 LEFT JOIN Train t4 ON t4.owner_id = t0.id WHERE t0.id IN (?)", $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery]['sql'] ); } @@ -177,13 +177,13 @@ public function testEagerLoadWithNonNullableColumnsGeneratesInnerJoinOnOwningSid // The last query is the eager loading of the owner of the train $this->assertSQLEquals( - "SELECT t0.id AS id_1, t0.name AS name_2, t3.id AS id_4, t3.driver_id AS driver_id_5, t3.owner_id AS owner_id_6 FROM TrainOwner t0 LEFT JOIN Train t3 ON t3.owner_id = t0.id WHERE t0.id IN (?)", + "SELECT t0.id AS id_1, t0.name AS name_2, t4.id AS id_3, t4.driver_id AS driver_id_5, t4.owner_id AS owner_id_6 FROM TrainOwner t0 LEFT JOIN Train t4 ON t4.owner_id = t0.id WHERE t0.id IN (?)", $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery]['sql'] ); // The one before is the fetching of the waggon and train $this->assertSQLEquals( - "SELECT t0.id AS id_1, t0.train_id AS train_id_2, t3.id AS id_4, t3.driver_id AS driver_id_5, t3.owner_id AS owner_id_6 FROM Waggon t0 INNER JOIN Train t3 ON t0.train_id = t3.id WHERE t0.id = ?", + "SELECT t0.id AS id_1, t0.train_id AS train_id_2, t4.id AS id_3, t4.driver_id AS driver_id_5, t4.owner_id AS owner_id_6 FROM Waggon t0 INNER JOIN Train t4 ON t0.train_id = t4.id WHERE t0.id = ?", $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery - 1]['sql'] ); } @@ -201,7 +201,7 @@ public function testEagerLoadWithNonNullableColumnsGeneratesLeftJoinOnNonOwningS $waggon = $this->_em->find(get_class($owner), $owner->id); $this->assertSQLEquals( - "SELECT t0.id AS id_1, t0.name AS name_2, t3.id AS id_4, t3.driver_id AS driver_id_5, t3.owner_id AS owner_id_6 FROM TrainOwner t0 LEFT JOIN Train t3 ON t3.owner_id = t0.id WHERE t0.id = ?", + "SELECT t0.id AS id_1, t0.name AS name_2, t4.id AS id_3, t4.driver_id AS driver_id_5, t4.owner_id AS owner_id_6 FROM TrainOwner t0 LEFT JOIN Train t4 ON t4.owner_id = t0.id WHERE t0.id = ?", $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery]['sql'] ); } diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php index ba1d18051e1..57156b9ec8d 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php @@ -98,7 +98,7 @@ public function testStripNonAlphanumericCharactersFromSelectColumnListSQL() $method = new \ReflectionMethod($persister, 'getSelectColumnsSQL'); $method->setAccessible(true); - $this->assertEquals('t0."simple-entity-id" AS simpleentityid_1, t0."simple-entity-value" AS simpleentityvalue_2', $method->invoke($persister)); + $this->assertEquals('t1."simple-entity-id" AS simpleentityid_0, t1."simple-entity-value" AS simpleentityvalue_2', $method->invoke($persister)); } /** From 0675a9ac2a5ad4a027beaab9a32851f853971569 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 7 May 2016 02:46:45 +0000 Subject: [PATCH 006/275] Removed ClassMetadata::getTypeOfColumn() method --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index cc672bafe36..5c99eeea8e4 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1994,21 +1994,6 @@ public function getTypeOfField($fieldName) : null; } - /** - * Gets the type of a column. - * - * @param string $columnName - * - * @return \Doctrine\DBAL\Types\Type|string|null - * - * @deprecated 3.0 remove this. this method is bogous and unreliable, since it cannot resolve the type of a column - * that is derived by a referenced field on a different entity. - */ - public function getTypeOfColumn($columnName) - { - return $this->getTypeOfField($this->getFieldName($columnName)); - } - /** * Gets the name of the primary table. * From 1dcdc6c4886b8cbd62ee34fb658b1611f20e98e9 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 7 May 2016 03:04:53 +0000 Subject: [PATCH 007/275] Optimized EntityPersister::getSelectColumnSQL() and EntityInheritancePersistence::getSelectJoinColumnSQL() --- .../AbstractEntityInheritancePersister.php | 43 +++++-------------- .../Entity/BasicEntityPersister.php | 6 +-- .../Entity/JoinedSubclassPersister.php | 40 ++++++++--------- .../Entity/SingleTablePersister.php | 19 ++++---- 4 files changed, 43 insertions(+), 65 deletions(-) diff --git a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php index bc10d378d19..9557d7193e0 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php @@ -56,43 +56,22 @@ protected function prepareInsertData($entity) abstract protected function getDiscriminatorColumnTableName(); /** - * {@inheritdoc} - */ - protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r') - { - $tableAlias = $alias == 'r' ? '' : $alias; - $fieldMapping = $class->fieldMappings[$field]; - $type = Type::getType($fieldMapping['type']); - $columnAlias = $this->getSQLColumnAlias($fieldMapping['columnName']); - $sql = sprintf( - '%s.%s', - $this->getSQLTableAlias($class->name, $tableAlias), - $this->quoteStrategy->getColumnName($field, $class, $this->platform) - ); - - $this->currentPersisterContext->rsm->addFieldResult($alias, $columnAlias, $field, $class->name); - - return $type->convertToPHPValueSQL($sql, $this->platform) . ' AS ' . $columnAlias; - } - - /** - * @todo Consider receiving fieldName, ClassMetadata and alias only and let this code handle the rest. - * This should minimize the need for PersisterHelper::getTypeOfColumn() - * - * @param string $tableAlias - * @param string $joinColumnName - * @param string $quotedColumnName - * - * @param string $type + * @param string $field The field name. + * @param ClassMetadata $class The class that declares this field. The table this class is + * mapped to must own the column for the given field. + * @param string $type * * @return string */ - protected function getSelectJoinColumnSQL($tableAlias, $joinColumnName, $quotedColumnName, $type) + protected function getSelectJoinColumnSQL($field, ClassMetadata $class, $type) { - $columnAlias = $this->getSQLColumnAlias($joinColumnName); + $tableAlias = $this->getSQLTableAlias($class->name); + $columnAlias = $this->getSQLColumnAlias($field); + $type = Type::getType($type); + $sql = sprintf('%s.%s', $tableAlias, $field); - $this->currentPersisterContext->rsm->addMetaResult('r', $columnAlias, $joinColumnName, false, $type); + $this->currentPersisterContext->rsm->addMetaResult('r', $columnAlias, $field, false, $type->getName()); - return $tableAlias . '.' . $quotedColumnName . ' AS ' . $columnAlias; + return $type->convertToPHPValueSQL($sql, $this->platform) . ' AS ' . $columnAlias; } } diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 61f4c19b081..421bc96a22c 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -1481,17 +1481,17 @@ protected function getInsertColumnList() */ protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r') { - $root = $alias == 'r' ? '' : $alias ; + $tableAlias = $alias == 'r' ? '' : $alias; $fieldMapping = $class->fieldMappings[$field]; $type = Type::getType($fieldMapping['type']); $columnAlias = $this->getSQLColumnAlias($fieldMapping['columnName']); $sql = sprintf( '%s.%s', - $this->getSQLTableAlias($class->name, $root), + $this->getSQLTableAlias($class->name, $tableAlias), $this->quoteStrategy->getColumnName($field, $class, $this->platform) ); - $this->currentPersisterContext->rsm->addFieldResult($alias, $columnAlias, $field); + $this->currentPersisterContext->rsm->addFieldResult($alias, $columnAlias, $field, $class->name); return $type->convertToPHPValueSQL($sql, $this->platform) . ' AS ' . $columnAlias; } diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index 0be15068977..d5a8262cde5 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -458,19 +458,16 @@ protected function getSelectColumnsSQL() continue; } - $tableAlias = isset($mapping['inherited']) - ? $this->getSQLTableAlias($mapping['inherited']) - : $baseTableAlias; - - $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); - - foreach ($mapping['joinColumns'] as $joinColumn) { - $columnList[] = $this->getSelectJoinColumnSQL( - $tableAlias, - $joinColumn['name'], - $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform), - PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em) - ); + $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); + $declaringClass = isset($mapping['inherited']) + ? $this->em->getClassMetadata($mapping['inherited']) + : $this->class; + + foreach ($mapping['targetToSourceKeyColumns'] as $srcColumn) { + $targetColumn = $mapping['sourceToTargetKeyColumns'][$srcColumn]; + $type = PersisterHelper::getTypeOfColumn($targetColumn, $targetClass, $this->em); + + $columnList[] = $this->getSelectJoinColumnSQL($srcColumn, $declaringClass, $type); } } @@ -503,15 +500,16 @@ protected function getSelectColumnsSQL() continue; } - $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); + $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); + $declaringClass = isset($mapping['inherited']) + ? $this->em->getClassMetadata($mapping['inherited']) + : $subClass; + + foreach ($mapping['targetToSourceKeyColumns'] as $srcColumn) { + $targetColumn = $mapping['sourceToTargetKeyColumns'][$srcColumn]; + $type = PersisterHelper::getTypeOfColumn($targetColumn, $targetClass, $this->em); - foreach ($mapping['joinColumns'] as $joinColumn) { - $columnList[] = $this->getSelectJoinColumnSQL( - $tableAlias, - $joinColumn['name'], - $this->quoteStrategy->getJoinColumnName($joinColumn, $subClass, $this->platform), - PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em) - ); + $columnList[] = $this->getSelectJoinColumnSQL($srcColumn, $declaringClass, $type); } } } diff --git a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php index 4b8352b350c..0ca96cb1033 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php @@ -87,15 +87,16 @@ protected function getSelectColumnsSQL() continue; } - $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); - - foreach ($assoc['joinColumns'] as $joinColumn) { - $columnList[] = $this->getSelectJoinColumnSQL( - $tableAlias, - $joinColumn['name'], - $this->quoteStrategy->getJoinColumnName($joinColumn, $subClass, $this->platform), - PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em) - ); + $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); + $declaringClass = isset($assoc['inherited']) + ? $this->em->getClassMetadata($assoc['inherited']) + : $this->class; + + foreach ($assoc['targetToSourceKeyColumns'] as $srcColumn) { + $targetColumn = $assoc['sourceToTargetKeyColumns'][$srcColumn]; + $type = PersisterHelper::getTypeOfColumn($targetColumn, $targetClass, $this->em); + + $columnList[] = $this->getSelectJoinColumnSQL($srcColumn, $declaringClass, $type); } } } From b00c7400dfff385f2430d1c419771edbc6cdf5f4 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 7 May 2016 07:13:00 +0000 Subject: [PATCH 008/275] Some CS fixes --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 57 ++++++++++--------- .../Query/Exec/MultiTableDeleteExecutor.php | 7 ++- 2 files changed, 33 insertions(+), 31 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 5c99eeea8e4..ec1e8f5d9bf 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -46,6 +46,7 @@ * * @author Roman Borschel * @author Jonathan H. Wage + * @author Guilherme Blanco * @since 2.0 */ class ClassMetadata implements ClassMetadataInterface @@ -353,9 +354,9 @@ class ClassMetadata implements ClassMetadataInterface * - fieldName (string) * The name of the field in the Entity. * - * - type (string) - * The type name of the mapped field. Can be one of Doctrine's mapping types - * or a custom mapping type. + * - type (Type) + * The type of the mapped field. Can be one of Doctrine's mapping types or a + * custom mapping type. * * - columnName (string, optional) * The column name. Optional. Defaults to the field name. @@ -1355,7 +1356,7 @@ public function getSqlResultSetMappings() * * @throws MappingException */ - protected function _validateAndCompleteFieldMapping(array &$mapping) + protected function validateAndCompleteFieldMapping(array &$mapping) { // Check mandatory fields if ( ! isset($mapping['fieldName']) || ! $mapping['fieldName']) { @@ -1416,7 +1417,7 @@ protected function _validateAndCompleteFieldMapping(array &$mapping) * * @throws MappingException If something is wrong with the mapping. */ - protected function _validateAndCompleteAssociationMapping(array $mapping) + protected function validateAndCompleteAssociationMapping(array $mapping) { if ( ! isset($mapping['mappedBy'])) { $mapping['mappedBy'] = null; @@ -1537,9 +1538,9 @@ protected function _validateAndCompleteAssociationMapping(array $mapping) * @throws RuntimeException * @throws MappingException */ - protected function _validateAndCompleteOneToOneMapping(array $mapping) + protected function validateAndCompleteOneToOneMapping(array $mapping) { - $mapping = $this->_validateAndCompleteAssociationMapping($mapping); + $mapping = $this->validateAndCompleteAssociationMapping($mapping); if (isset($mapping['joinColumns']) && $mapping['joinColumns']) { $mapping['isOwningSide'] = true; @@ -1630,9 +1631,9 @@ protected function _validateAndCompleteOneToOneMapping(array $mapping) * @throws MappingException * @throws InvalidArgumentException */ - protected function _validateAndCompleteOneToManyMapping(array $mapping) + protected function validateAndCompleteOneToManyMapping(array $mapping) { - $mapping = $this->_validateAndCompleteAssociationMapping($mapping); + $mapping = $this->validateAndCompleteAssociationMapping($mapping); // OneToMany-side MUST be inverse (must have mappedBy) if ( ! isset($mapping['mappedBy'])) { @@ -1656,9 +1657,9 @@ protected function _validateAndCompleteOneToManyMapping(array $mapping) * * @throws \InvalidArgumentException */ - protected function _validateAndCompleteManyToManyMapping(array $mapping) + protected function validateAndCompleteManyToManyMapping(array $mapping) { - $mapping = $this->_validateAndCompleteAssociationMapping($mapping); + $mapping = $this->validateAndCompleteAssociationMapping($mapping); if ($mapping['isOwningSide']) { // owning side MUST have a join table @@ -2068,7 +2069,7 @@ public function setParentClasses(array $classNames) */ public function setInheritanceType($type) { - if ( ! $this->_isInheritanceType($type)) { + if ( ! $this->isInheritanceType($type)) { throw MappingException::invalidInheritanceType($this->name, $type); } @@ -2113,16 +2114,16 @@ public function setAssociationOverride($fieldName, array $overrideMapping) switch ($mapping['type']) { case self::ONE_TO_ONE: - $mapping = $this->_validateAndCompleteOneToOneMapping($mapping); + $mapping = $this->validateAndCompleteOneToOneMapping($mapping); break; case self::ONE_TO_MANY: - $mapping = $this->_validateAndCompleteOneToManyMapping($mapping); + $mapping = $this->validateAndCompleteOneToManyMapping($mapping); break; case self::MANY_TO_ONE: - $mapping = $this->_validateAndCompleteOneToOneMapping($mapping); + $mapping = $this->validateAndCompleteOneToOneMapping($mapping); break; case self::MANY_TO_MANY: - $mapping = $this->_validateAndCompleteManyToManyMapping($mapping); + $mapping = $this->validateAndCompleteManyToManyMapping($mapping); break; } @@ -2166,7 +2167,7 @@ public function setAttributeOverride($fieldName, array $overrideMapping) unset($this->fieldMappings[$fieldName]); unset($this->fieldNames[$mapping['columnName']]); - $this->_validateAndCompleteFieldMapping($overrideMapping); + $this->validateAndCompleteFieldMapping($overrideMapping); $this->fieldMappings[$fieldName] = $overrideMapping; } @@ -2278,7 +2279,7 @@ public function setPrimaryTable(array $table) * * @return boolean TRUE if the given type identifies an inheritance type, FALSe otherwise. */ - private function _isInheritanceType($type) + private function isInheritanceType($type) { return $type == self::INHERITANCE_TYPE_NONE || $type == self::INHERITANCE_TYPE_SINGLE_TABLE @@ -2297,7 +2298,7 @@ private function _isInheritanceType($type) */ public function mapField(array $mapping) { - $this->_validateAndCompleteFieldMapping($mapping); + $this->validateAndCompleteFieldMapping($mapping); $this->assertFieldNotMapped($mapping['fieldName']); $this->fieldMappings[$mapping['fieldName']] = $mapping; @@ -2488,9 +2489,9 @@ public function mapOneToOne(array $mapping) { $mapping['type'] = self::ONE_TO_ONE; - $mapping = $this->_validateAndCompleteOneToOneMapping($mapping); + $mapping = $this->validateAndCompleteOneToOneMapping($mapping); - $this->_storeAssociationMapping($mapping); + $this->storeAssociationMapping($mapping); } /** @@ -2504,9 +2505,9 @@ public function mapOneToMany(array $mapping) { $mapping['type'] = self::ONE_TO_MANY; - $mapping = $this->_validateAndCompleteOneToManyMapping($mapping); + $mapping = $this->validateAndCompleteOneToManyMapping($mapping); - $this->_storeAssociationMapping($mapping); + $this->storeAssociationMapping($mapping); } /** @@ -2521,9 +2522,9 @@ public function mapManyToOne(array $mapping) $mapping['type'] = self::MANY_TO_ONE; // A many-to-one mapping is essentially a one-one backreference - $mapping = $this->_validateAndCompleteOneToOneMapping($mapping); + $mapping = $this->validateAndCompleteOneToOneMapping($mapping); - $this->_storeAssociationMapping($mapping); + $this->storeAssociationMapping($mapping); } /** @@ -2537,9 +2538,9 @@ public function mapManyToMany(array $mapping) { $mapping['type'] = self::MANY_TO_MANY; - $mapping = $this->_validateAndCompleteManyToManyMapping($mapping); + $mapping = $this->validateAndCompleteManyToManyMapping($mapping); - $this->_storeAssociationMapping($mapping); + $this->storeAssociationMapping($mapping); } /** @@ -2551,7 +2552,7 @@ public function mapManyToMany(array $mapping) * * @throws MappingException */ - protected function _storeAssociationMapping(array $assocMapping) + protected function storeAssociationMapping(array $assocMapping) { $sourceFieldName = $assocMapping['fieldName']; diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php index aaf94d7ff90..8a7e67f7515 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php @@ -66,9 +66,9 @@ public function __construct(AST\Node $AST, $sqlWalker) $platform = $conn->getDatabasePlatform(); $quoteStrategy = $em->getConfiguration()->getQuoteStrategy(); - $primaryClass = $em->getClassMetadata($AST->deleteClause->abstractSchemaName); - $primaryDqlAlias = $AST->deleteClause->aliasIdentificationVariable; - $rootClass = $em->getClassMetadata($primaryClass->rootEntityName); + $primaryClass = $em->getClassMetadata($AST->deleteClause->abstractSchemaName); + $primaryDqlAlias = $AST->deleteClause->aliasIdentificationVariable; + $rootClass = $em->getClassMetadata($primaryClass->rootEntityName); $tempTable = $platform->getTemporaryTableName($rootClass->getTemporaryIdTableName()); $idColumnNames = $rootClass->getIdentifierColumnNames(); @@ -102,6 +102,7 @@ public function __construct(AST\Node $AST, $sqlWalker) // 4. Store DDL for temporary identifier table. $columnDefinitions = []; + foreach ($idColumnNames as $idColumnName) { $columnDefinitions[$idColumnName] = [ 'notnull' => true, From 5716efc287ed80cf73a8b5fdce35896656ff0115 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 7 May 2016 17:46:12 +0000 Subject: [PATCH 009/275] ClassMetadata::[]['type'] now holds a Type instance instead of string --- .../Internal/Hydration/AbstractHydrator.php | 11 +- .../ORM/Internal/Hydration/ObjectHydrator.php | 7 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 54 ++++-- .../ORM/Mapping/ClassMetadataFactory.php | 165 +++++++++-------- .../ORM/Mapping/Driver/AnnotationDriver.php | 5 +- .../ORM/Mapping/Driver/YamlDriver.php | 2 +- .../Collection/OneToManyPersister.php | 3 +- .../AbstractEntityInheritancePersister.php | 7 +- .../Entity/BasicEntityPersister.php | 18 +- .../Query/Exec/MultiTableDeleteExecutor.php | 3 +- .../Query/Exec/MultiTableUpdateExecutor.php | 5 +- lib/Doctrine/ORM/Query/ResultSetMapping.php | 16 +- .../ORM/Query/ResultSetMappingBuilder.php | 14 +- lib/Doctrine/ORM/Query/SqlWalker.php | 34 ++-- lib/Doctrine/ORM/Tools/EntityGenerator.php | 52 +++--- .../ORM/Tools/Export/Driver/PhpExporter.php | 3 + .../ORM/Tools/Export/Driver/XmlExporter.php | 14 +- .../ORM/Tools/Export/Driver/YamlExporter.php | 4 + .../Pagination/LimitSubqueryOutputWalker.php | 90 ++++++---- .../Tools/Pagination/LimitSubqueryWalker.php | 10 +- .../ORM/Tools/Pagination/Paginator.php | 12 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 93 +++++----- lib/Doctrine/ORM/Tools/SchemaValidator.php | 6 - lib/Doctrine/ORM/UnitOfWork.php | 6 +- lib/Doctrine/ORM/Utility/PersisterHelper.php | 3 +- ...etchJoinArrayHydrationPerformanceBench.php | 3 +- ...oinFullObjectHydrationPerformanceBench.php | 3 +- ...PartialObjectHydrationPerformanceBench.php | 3 +- .../Tests/ORM/Cache/DefaultQueryCacheTest.php | 3 +- .../ORM/Functional/DatabaseDriverTest.php | 20 +-- .../Tests/ORM/Functional/NativeQueryTest.php | 166 +++++++++++------- .../Tests/ORM/Functional/ResultCacheTest.php | 18 +- .../ORM/Functional/Ticket/DDC1655Test.php | 26 +++ .../ORM/Functional/Ticket/DDC1685Test.php | 2 + .../ORM/Functional/Ticket/DDC3634Test.php | 7 +- .../ORM/Functional/Ticket/DDC3711Test.php | 1 - .../Tests/ORM/Hydration/ArrayHydratorTest.php | 25 +-- .../ORM/Hydration/ObjectHydratorTest.php | 103 +++++++++-- .../ORM/Hydration/ResultSetMappingTest.php | 23 +-- .../ORM/Hydration/ScalarHydratorTest.php | 13 +- .../Hydration/SimpleObjectHydratorTest.php | 30 ++-- .../ORM/Mapping/AbstractMappingDriverTest.php | 24 +-- .../ORM/Mapping/AnnotationDriverTest.php | 8 +- .../ORM/Mapping/ClassMetadataBuilderTest.php | 78 ++++++-- .../ORM/Mapping/ClassMetadataFactoryTest.php | 11 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 3 +- ...ests.Models.DDC3711.DDC3711EntityA.dcm.yml | 4 +- ...ests.Models.DDC3711.DDC3711EntityB.dcm.yml | 4 +- ...tyPersisterCompositeTypeParametersTest.php | 5 +- .../ORM/Tools/ConvertDoctrine1SchemaTest.php | 2 +- .../AbstractClassMetadataExporterTest.php | 6 +- 51 files changed, 760 insertions(+), 468 deletions(-) diff --git a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php index 6a7061285be..89865d394fc 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php @@ -377,7 +377,7 @@ protected function hydrateColumnInfo($key) return $this->_cache[$key] = [ 'isIdentifier' => in_array($fieldName, $classMetadata->identifier), 'fieldName' => $fieldName, - 'type' => Type::getType($fieldMapping['type']), + 'type' => $fieldMapping['type'], 'dqlAlias' => $this->_rsm->columnOwnerMap[$key], ]; @@ -389,7 +389,7 @@ protected function hydrateColumnInfo($key) 'isScalar' => true, 'isNewObjectParameter' => true, 'fieldName' => $this->_rsm->scalarMappings[$key], - 'type' => Type::getType($this->_rsm->typeMappings[$key]), + 'type' => $this->_rsm->typeMappings[$key], 'argIndex' => $mapping['argIndex'], 'objIndex' => $mapping['objIndex'], 'class' => new \ReflectionClass($mapping['className']), @@ -399,16 +399,13 @@ protected function hydrateColumnInfo($key) return $this->_cache[$key] = [ 'isScalar' => true, 'fieldName' => $this->_rsm->scalarMappings[$key], - 'type' => Type::getType($this->_rsm->typeMappings[$key]), + 'type' => $this->_rsm->typeMappings[$key], ]; case (isset($this->_rsm->metaMappings[$key])): // Meta column (has meaning in relational schema only, i.e. foreign keys or discriminator columns). $fieldName = $this->_rsm->metaMappings[$key]; $dqlAlias = $this->_rsm->columnOwnerMap[$key]; - $type = isset($this->_rsm->typeMappings[$key]) - ? Type::getType($this->_rsm->typeMappings[$key]) - : null; // Cache metadata fetch $this->getClassMetadata($this->_rsm->aliasMap[$dqlAlias]); @@ -417,7 +414,7 @@ protected function hydrateColumnInfo($key) 'isIdentifier' => isset($this->_rsm->isIdentifierColumn[$dqlAlias][$key]), 'isMetaColumn' => true, 'fieldName' => $fieldName, - 'type' => $type, + 'type' => $this->_rsm->typeMappings[$key], 'dqlAlias' => $dqlAlias, ]; } diff --git a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php index 42f59973942..f8f964bfdc3 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php @@ -19,13 +19,14 @@ namespace Doctrine\ORM\Internal\Hydration; -use Doctrine\ORM\UnitOfWork; use PDO; +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Event\PostLoadEventDispatcher; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\PersistentCollection; -use Doctrine\ORM\Query; -use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Proxy\Proxy; +use Doctrine\ORM\Query; +use Doctrine\ORM\UnitOfWork; /** * The ObjectHydrator constructs an object graph out of an SQL result set. diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index ec1e8f5d9bf..045df3d31ee 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -20,15 +20,15 @@ namespace Doctrine\ORM\Mapping; use BadMethodCallException; -use Doctrine\Instantiator\Instantiator; -use InvalidArgumentException; -use RuntimeException; -use Doctrine\DBAL\Types\Type; -use Doctrine\DBAL\Platforms\AbstractPlatform; -use ReflectionClass; use Doctrine\Common\ClassLoader; use Doctrine\Common\Persistence\Mapping\ClassMetadata as ClassMetadataInterface; +use Doctrine\DBAL\Platforms\AbstractPlatform; +use Doctrine\DBAL\Types\Type; +use Doctrine\Instantiator\Instantiator; use Doctrine\ORM\Cache\CacheException; +use InvalidArgumentException; +use ReflectionClass; +use RuntimeException; /** * A ClassMetadata instance holds all the object-relational mapping metadata @@ -639,7 +639,7 @@ class ClassMetadata implements ClassMetadataInterface */ public function __construct($entityName, NamingStrategy $namingStrategy = null) { - $this->name = $entityName; + $this->name = $entityName; $this->rootEntityName = $entityName; $this->namingStrategy = $namingStrategy ?: new DefaultNamingStrategy(); $this->instantiator = new Instantiator(); @@ -1363,9 +1363,12 @@ protected function validateAndCompleteFieldMapping(array &$mapping) throw MappingException::missingFieldName($this->name); } - if ( ! isset($mapping['type'])) { - // Default to string - $mapping['type'] = 'string'; + $type = isset($mapping['type']) + ? $mapping['type'] + : 'string'; // Default to string + + if ( ! ($type instanceof Type)) { + $mapping['type'] = Type::getType($type); } // Complete fieldName and columnName mapping @@ -1400,9 +1403,13 @@ protected function validateAndCompleteFieldMapping(array &$mapping) } } - if (Type::hasType($mapping['type']) && Type::getType($mapping['type'])->canRequireSQLConversion()) { + if ($mapping['type']->canRequireSQLConversion()) { if (isset($mapping['id']) && true === $mapping['id']) { - throw MappingException::sqlConversionNotAllowedForIdentifiers($this->name, $mapping['fieldName'], $mapping['type']); + throw MappingException::sqlConversionNotAllowedForIdentifiers( + $this->name, + $mapping['fieldName'], + $mapping['type'] + ); } } } @@ -2152,10 +2159,16 @@ public function setAttributeOverride($fieldName, array $overrideMapping) $overrideMapping['id'] = $mapping['id']; } - if ( ! isset($overrideMapping['type'])) { - $overrideMapping['type'] = $mapping['type']; + $type = isset($overrideMapping['type']) + ? $overrideMapping['type'] + : $mapping['type']; + + if ( ! ($type instanceof Type)) { + $type = Type::getType($type); } + $overrideMapping['type'] = $type; + if ( ! isset($overrideMapping['fieldName'])) { $overrideMapping['fieldName'] = $mapping['fieldName']; } @@ -2464,6 +2477,7 @@ public function addSqlResultSetMapping(array $resultMapping) if (!isset($field['column'])) { $fieldName = $field['name']; + if (strpos($fieldName, '.')) { list(, $fieldName) = explode('.', $fieldName); } @@ -2704,12 +2718,16 @@ public function setDiscriminatorColumn($columnDef) $columnDef['fieldName'] = $columnDef['name']; } - if ( ! isset($columnDef['type'])) { - $columnDef['type'] = "string"; + $type = isset($columnDef['type']) + ? $columnDef['type'] + : 'string'; + + if ( ! ($type instanceof Type)) { + $columnDef['type'] = Type::getType($type); } - if (in_array($columnDef['type'], ["boolean", "array", "object", "datetime", "time", "date"])) { - throw MappingException::invalidDiscriminatorColumnType($this->name, $columnDef['type']); + if (in_array($columnDef['type']->getName(), ["boolean", "array", "object", "datetime", "time", "date"])) { + throw MappingException::invalidDiscriminatorColumnType($this->name, $columnDef['type']->getName()); } $this->discriminatorColumn = $columnDef; diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 634e3ec95cc..e06dc9bd825 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -105,7 +105,7 @@ protected function initialize() */ protected function onNotFoundMetadata($className) { - if (! $this->evm->hasListeners(Events::onClassMetadataNotFound)) { + if ( ! $this->evm->hasListeners(Events::onClassMetadataNotFound)) { return; } @@ -162,7 +162,7 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS $this->completeIdGeneratorMapping($class); } - if (!$class->isMappedSuperclass) { + if ( ! $class->isMappedSuperclass) { foreach ($class->embeddedClasses as $property => $embeddableClass) { if (isset($embeddableClass['inherited'])) { @@ -202,9 +202,7 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS $class->setPrimaryTable($parent->table); } - if ($parent) { - $this->addInheritedIndexes($class, $parent); - } + $this->addInheritedIndexes($class, $parent); if ($parent->cache) { $class->cache = $parent->cache; @@ -239,6 +237,7 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS if ($this->evm->hasListeners(Events::loadClassMetadata)) { $eventArgs = new LoadClassMetadataEventArgs($class, $this->em); + $this->evm->dispatchEvent(Events::loadClassMetadata, $eventArgs); } @@ -267,11 +266,12 @@ protected function validateRuntimeMetadata($class, $parent) $class->validateLifecycleCallbacks($this->getReflectionService()); // verify inheritance - if ( ! $class->isMappedSuperclass && !$class->isInheritanceTypeNone()) { + if ( ! $class->isMappedSuperclass && ! $class->isInheritanceTypeNone()) { if ( ! $parent) { if (count($class->discriminatorMap) == 0) { throw MappingException::missingDiscriminatorMap($class->name); } + if ( ! $class->discriminatorColumn) { throw MappingException::missingDiscriminatorColumn($class->name); } @@ -302,12 +302,8 @@ protected function newClassMetadataInstance($className) */ private function resolveDiscriminatorValue(ClassMetadata $metadata) { - if ($metadata->discriminatorValue - || ! $metadata->discriminatorMap - || $metadata->isMappedSuperclass - || ! $metadata->reflClass - || $metadata->reflClass->isAbstract() - ) { + if ($metadata->discriminatorValue || ! $metadata->discriminatorMap || + $metadata->isMappedSuperclass || ! $metadata->reflClass || $metadata->reflClass->isAbstract()) { return; } @@ -349,10 +345,10 @@ private function resolveDiscriminatorValue(ClassMetadata $metadata) private function addDefaultDiscriminatorMap(ClassMetadata $class) { $allClasses = $this->driver->getAllClassNames(); - $fqcn = $class->getName(); - $map = [$this->getShortName($class->name) => $fqcn]; - + $fqcn = $class->getName(); + $map = [$this->getShortName($class->name) => $fqcn]; $duplicates = []; + foreach ($allClasses as $subClassCandidate) { if (is_subclass_of($subClassCandidate, $fqcn)) { $shortName = $this->getShortName($subClassCandidate); @@ -404,11 +400,14 @@ private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $pare if ( ! isset($mapping['inherited']) && ! $parentClass->isMappedSuperclass) { $mapping['inherited'] = $parentClass->name; } + if ( ! isset($mapping['declared'])) { $mapping['declared'] = $parentClass->name; } + $subClass->addInheritedFieldMapping($mapping); } + foreach ($parentClass->reflFields as $name => $field) { $subClass->reflFields[$name] = $field; } @@ -431,6 +430,7 @@ private function addInheritedRelations(ClassMetadata $subClass, ClassMetadata $p if ($mapping['type'] & ClassMetadata::TO_MANY && !$mapping['isOwningSide']) { throw MappingException::illegalToManyAssociationOnMappedSuperclass($parentClass->name, $field); } + $mapping['sourceEntity'] = $subClass->name; } @@ -438,9 +438,11 @@ private function addInheritedRelations(ClassMetadata $subClass, ClassMetadata $p if ( ! isset($mapping['inherited']) && ! $parentClass->isMappedSuperclass) { $mapping['inherited'] = $parentClass->name; } + if ( ! isset($mapping['declared'])) { $mapping['declared'] = $parentClass->name; } + $subClass->addInheritedAssociationMapping($mapping); } } @@ -451,6 +453,7 @@ private function addInheritedEmbeddedClasses(ClassMetadata $subClass, ClassMetad if ( ! isset($embeddedClass['inherited']) && ! $parentClass->isMappedSuperclass) { $embeddedClass['inherited'] = $parentClass->name; } + if ( ! isset($embeddedClass['declared'])) { $embeddedClass['declared'] = $parentClass->name; } @@ -499,19 +502,21 @@ private function addNestedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata */ private function addInheritedIndexes(ClassMetadata $subClass, ClassMetadata $parentClass) { - if (! $parentClass->isMappedSuperclass) { + if ( ! $parentClass->isMappedSuperclass) { return; } foreach (['uniqueConstraints', 'indexes'] as $indexType) { - if (isset($parentClass->table[$indexType])) { - foreach ($parentClass->table[$indexType] as $indexName => $index) { - if (isset($subClass->table[$indexType][$indexName])) { - continue; // Let the inheriting table override indices - } + if ( ! isset($parentClass->table[$indexType])) { + continue; + } - $subClass->table[$indexType][$indexName] = $index; + foreach ($parentClass->table[$indexType] as $indexName => $index) { + if (isset($subClass->table[$indexType][$indexName])) { + continue; // Let the inheriting table override indices } + + $subClass->table[$indexType][$indexName] = $index; } } } @@ -529,14 +534,16 @@ private function addInheritedIndexes(ClassMetadata $subClass, ClassMetadata $par private function addInheritedNamedQueries(ClassMetadata $subClass, ClassMetadata $parentClass) { foreach ($parentClass->namedQueries as $name => $query) { - if ( ! isset ($subClass->namedQueries[$name])) { - $subClass->addNamedQuery( - [ - 'name' => $query['name'], - 'query' => $query['query'] - ] - ); + if (isset($subClass->namedQueries[$name])) { + continue; } + + $subClass->addNamedQuery( + [ + 'name' => $query['name'], + 'query' => $query['query'] + ] + ); } } @@ -553,17 +560,19 @@ private function addInheritedNamedQueries(ClassMetadata $subClass, ClassMetadata private function addInheritedNamedNativeQueries(ClassMetadata $subClass, ClassMetadata $parentClass) { foreach ($parentClass->namedNativeQueries as $name => $query) { - if ( ! isset ($subClass->namedNativeQueries[$name])) { - $subClass->addNamedNativeQuery( - [ - 'name' => $query['name'], - 'query' => $query['query'], - 'isSelfClass' => $query['isSelfClass'], - 'resultSetMapping' => $query['resultSetMapping'], - 'resultClass' => $query['isSelfClass'] ? $subClass->name : $query['resultClass'], - ] - ); + if (isset($subClass->namedNativeQueries[$name])) { + continue; } + + $subClass->addNamedNativeQuery( + [ + 'name' => $query['name'], + 'query' => $query['query'], + 'isSelfClass' => $query['isSelfClass'], + 'resultSetMapping' => $query['resultSetMapping'], + 'resultClass' => $query['isSelfClass'] ? $subClass->name : $query['resultClass'], + ] + ); } } @@ -580,25 +589,28 @@ private function addInheritedNamedNativeQueries(ClassMetadata $subClass, ClassMe private function addInheritedSqlResultSetMappings(ClassMetadata $subClass, ClassMetadata $parentClass) { foreach ($parentClass->sqlResultSetMappings as $name => $mapping) { - if ( ! isset ($subClass->sqlResultSetMappings[$name])) { - $entities = []; - foreach ($mapping['entities'] as $entity) { - $entities[] = [ - 'fields' => $entity['fields'], - 'isSelfClass' => $entity['isSelfClass'], - 'discriminatorColumn' => $entity['discriminatorColumn'], - 'entityClass' => $entity['isSelfClass'] ? $subClass->name : $entity['entityClass'], - ]; - } + if (isset ($subClass->sqlResultSetMappings[$name])) { + continue; + } - $subClass->addSqlResultSetMapping( - [ - 'name' => $mapping['name'], - 'columns' => $mapping['columns'], - 'entities' => $entities, - ] - ); + $entities = []; + + foreach ($mapping['entities'] as $entity) { + $entities[] = [ + 'fields' => $entity['fields'], + 'isSelfClass' => $entity['isSelfClass'], + 'discriminatorColumn' => $entity['discriminatorColumn'], + 'entityClass' => $entity['isSelfClass'] ? $subClass->name : $entity['entityClass'], + ]; } + + $subClass->addSqlResultSetMapping( + [ + 'name' => $mapping['name'], + 'columns' => $mapping['columns'], + 'entities' => $entities, + ] + ); } } @@ -615,14 +627,16 @@ private function addInheritedSqlResultSetMappings(ClassMetadata $subClass, Class private function completeIdGeneratorMapping(ClassMetadata $class) { $idGenType = $class->generatorType; + if ($idGenType == ClassMetadata::GENERATOR_TYPE_AUTO) { - if ($this->getTargetPlatform()->prefersSequences()) { - $class->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); - } else if ($this->getTargetPlatform()->prefersIdentityColumns()) { - $class->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_IDENTITY); - } else { - $class->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_TABLE); - } + $idGenType = $this->getTargetPlatform()->prefersSequences() + ? ClassMetadata::GENERATOR_TYPE_SEQUENCE + : ($this->getTargetPlatform()->prefersIdentityColumns() + ? ClassMetadata::GENERATOR_TYPE_IDENTITY + : ClassMetadata::GENERATOR_TYPE_TABLE + ); + + $class->setIdGeneratorType($idGenType); } // Create & assign an appropriate ID generator instance @@ -652,7 +666,7 @@ private function completeIdGeneratorMapping(ClassMetadata $class) ->getSequenceName($definition, $class, $this->getTargetPlatform()); } - $generator = ($fieldName && $class->fieldMappings[$fieldName]['type'] === 'bigint') + $generator = ($fieldName && $class->fieldMappings[$fieldName]['type']->getName() === 'bigint') ? new BigIntegerIdentityGenerator($sequenceName) : new IdentityGenerator($sequenceName); @@ -670,9 +684,9 @@ private function completeIdGeneratorMapping(ClassMetadata $class) $quoted = isset($class->fieldMappings[$fieldName]['quoted']) || isset($class->table['quoted']); $definition = [ - 'sequenceName' => $this->getTargetPlatform()->fixSchemaElementName($sequenceName), - 'allocationSize' => 1, - 'initialValue' => 1, + 'sequenceName' => $this->getTargetPlatform()->fixSchemaElementName($sequenceName), + 'allocationSize' => 1, + 'initialValue' => 1, ]; if ($quoted) { @@ -682,10 +696,14 @@ private function completeIdGeneratorMapping(ClassMetadata $class) $class->setSequenceGeneratorDefinition($definition); } - $sequenceGenerator = new \Doctrine\ORM\Id\SequenceGenerator( - $this->em->getConfiguration()->getQuoteStrategy()->getSequenceName($definition, $class, $this->getTargetPlatform()), - $definition['allocationSize'] - ); + $sequenceName = $this + ->em + ->getConfiguration() + ->getQuoteStrategy() + ->getSequenceName($definition, $class, $this->getTargetPlatform()); + + $sequenceGenerator = new \Doctrine\ORM\Id\SequenceGenerator($sequenceName, $definition['allocationSize']); + $class->setIdGenerator($sequenceGenerator); break; @@ -703,10 +721,11 @@ private function completeIdGeneratorMapping(ClassMetadata $class) case ClassMetadata::GENERATOR_TYPE_CUSTOM: $definition = $class->customGeneratorDefinition; + if ( ! class_exists($definition['class'])) { - throw new ORMException("Can't instantiate custom generator : " . - $definition['class']); + throw new ORMException("Can't instantiate custom generator : " . $definition['class']); } + $class->setIdGenerator(new $definition['class']); break; diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index fdd8756e6dc..e870b47d314 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -24,8 +24,8 @@ use Doctrine\Common\Persistence\Mapping\Driver\AnnotationDriver as AbstractAnnotationDriver; use Doctrine\ORM\Annotation; use Doctrine\ORM\Events; -use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\MappingException; /** @@ -178,6 +178,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat foreach ($sqlResultSetMappingsAnnot->value as $resultSetMapping) { $entities = []; $columns = []; + foreach ($resultSetMapping->entities as $entityResultAnnot) { $entityResult = [ 'fields' => [], @@ -223,6 +224,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat if ( ! ($namedQuery instanceof Annotation\NamedQuery)) { throw new \UnexpectedValueException("@NamedQueries should contain an array of @NamedQuery annotations."); } + $metadata->addNamedQuery( [ 'name' => $namedQuery->name, @@ -260,6 +262,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat // Evaluate DiscriminatorMap annotation if (isset($classAnnotations[Annotation\DiscriminatorMap::class])) { $discrMapAnnot = $classAnnotations[Annotation\DiscriminatorMap::class]; + $metadata->setDiscriminatorMap($discrMapAnnot->value); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php index 441d41ad055..493264de96f 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php @@ -728,7 +728,7 @@ private function columnToArray($fieldName, $column) if (isset($column['type'])) { $params = explode('(', $column['type']); - $column['type'] = $params[0]; + $column['type'] = trim($params[0]); $mapping['type'] = $column['type']; if (isset($params[1])) { diff --git a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php index 82115071f35..927c00b1807 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php @@ -20,7 +20,6 @@ namespace Doctrine\ORM\Persisters\Collection; use Doctrine\Common\Collections\Criteria; -use Doctrine\DBAL\Types\Type; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\Utility\PersisterHelper; @@ -251,7 +250,7 @@ private function deleteJoinedEntityCollection(PersistentCollection $collection) foreach ($idColumnNames as $idColumnName) { $columnDefinitions[$idColumnName] = [ 'notnull' => true, - 'type' => Type::getType(PersisterHelper::getTypeOfColumn($idColumnName, $rootClass, $this->em)), + 'type' => PersisterHelper::getTypeOfColumn($idColumnName, $rootClass, $this->em), ]; } diff --git a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php index 9557d7193e0..86feb9a3ae3 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php @@ -42,7 +42,9 @@ protected function prepareInsertData($entity) // Populate the discriminator column $discColumn = $this->class->discriminatorColumn; + $this->columnTypes[$discColumn['name']] = $discColumn['type']; + $data[$this->getDiscriminatorColumnTableName()][$discColumn['name']] = $this->class->discriminatorValue; return $data; @@ -59,7 +61,7 @@ abstract protected function getDiscriminatorColumnTableName(); * @param string $field The field name. * @param ClassMetadata $class The class that declares this field. The table this class is * mapped to must own the column for the given field. - * @param string $type + * @param Type $type * * @return string */ @@ -67,10 +69,9 @@ protected function getSelectJoinColumnSQL($field, ClassMetadata $class, $type) { $tableAlias = $this->getSQLTableAlias($class->name); $columnAlias = $this->getSQLColumnAlias($field); - $type = Type::getType($type); $sql = sprintf('%s.%s', $tableAlias, $field); - $this->currentPersisterContext->rsm->addMetaResult('r', $columnAlias, $field, false, $type->getName()); + $this->currentPersisterContext->rsm->addMetaResult('r', $columnAlias, $field, false, $type); return $type->convertToPHPValueSQL($sql, $this->platform) . ' AS ' . $columnAlias; } diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 421bc96a22c..833b31e9485 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -354,7 +354,7 @@ protected function fetchVersionValue($versionedClass, array $id) $this->extractIdentifierTypes($id, $versionedClass) ); - return Type::getType($fieldMapping['type'])->convertToPHPValue($value, $this->platform); + return $fieldMapping['type']->convertToPHPValue($value, $this->platform); } private function extractIdentifierTypes(array $id, ClassMetadata $versionedClass) : array @@ -421,8 +421,7 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat $fieldName = $this->class->fieldNames[$columnName]; $fieldMapping = $this->class->fieldMappings[$fieldName]; $column = $this->quoteStrategy->getColumnName($fieldName, $this->class, $this->platform); - $type = Type::getType($fieldMapping['type']); - $placeholder = $type->convertToDatabaseValueSQL('?', $this->platform); + $placeholder = $fieldMapping['type']->convertToDatabaseValueSQL('?', $this->platform); break; @@ -477,7 +476,7 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat $types[] = $this->class->fieldMappings[$versionField]['type']; $params[] = $this->class->reflFields[$versionField]->getValue($entity); - switch ($versionFieldType) { + switch ($versionFieldType->getName()) { case Type::SMALLINT: case Type::INTEGER: case Type::BIGINT: @@ -1412,8 +1411,7 @@ public function getInsertSQL() if (isset($this->class->fieldNames[$column])) { $fieldName = $this->class->fieldNames[$column]; $fieldMapping = $this->class->fieldMappings[$fieldName]; - $type = Type::getType($fieldMapping['type']); - $placeholder = $type->convertToDatabaseValueSQL('?', $this->platform); + $placeholder = $fieldMapping['type']->convertToDatabaseValueSQL('?', $this->platform); } $values[] = $placeholder; @@ -1483,7 +1481,6 @@ protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r' { $tableAlias = $alias == 'r' ? '' : $alias; $fieldMapping = $class->fieldMappings[$field]; - $type = Type::getType($fieldMapping['type']); $columnAlias = $this->getSQLColumnAlias($fieldMapping['columnName']); $sql = sprintf( '%s.%s', @@ -1493,7 +1490,7 @@ protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r' $this->currentPersisterContext->rsm->addFieldResult($alias, $columnAlias, $field, $class->name); - return $type->convertToPHPValueSQL($sql, $this->platform) . ' AS ' . $columnAlias; + return $fieldMapping['type']->convertToPHPValueSQL($sql, $this->platform) . ' AS ' . $columnAlias; } /** @@ -1612,8 +1609,7 @@ public function getSelectConditionStatementSQL($field, $value, $assoc = null, $c if (isset($this->class->fieldMappings[$field])) { $fieldMapping = $this->class->fieldMappings[$field]; - $type = Type::getType($fieldMapping['type']); - $placeholder = $type->convertToDatabaseValueSQL($placeholder, $this->platform); + $placeholder = $fieldMapping['type']->convertToDatabaseValueSQL($placeholder, $this->platform); } if (null !== $comparison) { @@ -1926,8 +1922,6 @@ private function getTypes($field, $value, ClassMetadata $class) if (is_array($value)) { return array_map(function ($type) { - $type = Type::getType($type); - return $type->getBindingType() + Connection::ARRAY_PARAM_OFFSET; }, $types); } diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php index 8a7e67f7515..655d1357172 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php @@ -20,7 +20,6 @@ namespace Doctrine\ORM\Query\Exec; use Doctrine\DBAL\Connection; -use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Query\AST; use Doctrine\ORM\Utility\PersisterHelper; @@ -106,7 +105,7 @@ public function __construct(AST\Node $AST, $sqlWalker) foreach ($idColumnNames as $idColumnName) { $columnDefinitions[$idColumnName] = [ 'notnull' => true, - 'type' => Type::getType(PersisterHelper::getTypeOfColumn($idColumnName, $rootClass, $em)), + 'type' => PersisterHelper::getTypeOfColumn($idColumnName, $rootClass, $em), ]; } $this->_createTempTableSql = $platform->getCreateTemporaryTableSnippetSQL() . ' ' . $tempTable . ' (' diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php index acad25a924b..368b23cc6de 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php @@ -20,9 +20,8 @@ namespace Doctrine\ORM\Query\Exec; use Doctrine\DBAL\Connection; -use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Query\ParameterTypeInferer; use Doctrine\ORM\Query\AST; +use Doctrine\ORM\Query\ParameterTypeInferer; use Doctrine\ORM\Utility\PersisterHelper; /** @@ -148,7 +147,7 @@ public function __construct(AST\Node $AST, $sqlWalker) foreach ($idColumnNames as $idColumnName) { $columnDefinitions[$idColumnName] = [ 'notnull' => true, - 'type' => Type::getType(PersisterHelper::getTypeOfColumn($idColumnName, $rootClass, $em)), + 'type' => PersisterHelper::getTypeOfColumn($idColumnName, $rootClass, $em), ]; } diff --git a/lib/Doctrine/ORM/Query/ResultSetMapping.php b/lib/Doctrine/ORM/Query/ResultSetMapping.php index efffa674c2d..6e582d9ef55 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMapping.php +++ b/lib/Doctrine/ORM/Query/ResultSetMapping.php @@ -18,6 +18,7 @@ */ namespace Doctrine\ORM\Query; +use Doctrine\DBAL\Types\Type; /** * A ResultSetMapping describes how a result set of an SQL query maps to a Doctrine result. @@ -368,13 +369,13 @@ public function addJoinedEntityResult($class, $alias, $parentAlias, $relation) * * @param string $columnName The name of the column in the SQL result set. * @param string $alias The result alias with which the scalar result should be placed in the result structure. - * @param string $type The column type + * @param Type $type The column type * * @return ResultSetMapping This ResultSetMapping instance. * * @todo Rename: addScalar */ - public function addScalarResult($columnName, $alias, $type = 'string') + public function addScalarResult($columnName, $alias, Type $type) { $this->scalarMappings[$columnName] = $alias; $this->typeMappings[$columnName] = $type; @@ -555,25 +556,20 @@ public function isMixedResult() * @param string $columnName The name of the column in the SQL result set. * @param string $fieldName The name of the field on the declaring class. * @param bool $isIdentifierColumn - * @param string $type The column type + * @param Type $type The column type * * @return ResultSetMapping This ResultSetMapping instance. - * - * @todo Make all methods of this class require all parameters and not infer anything */ - public function addMetaResult($alias, $columnName, $fieldName, $isIdentifierColumn = false, $type = null) + public function addMetaResult($alias, $columnName, $fieldName, $isIdentifierColumn, Type $type) { $this->metaMappings[$columnName] = $fieldName; $this->columnOwnerMap[$columnName] = $alias; + $this->typeMappings[$columnName] = $type; if ($isIdentifierColumn) { $this->isIdentifierColumn[$alias][$columnName] = true; } - if ($type) { - $this->typeMappings[$columnName] = $type; - } - return $this; } } diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index c7285b5eadd..4a253ac3850 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -19,6 +19,7 @@ namespace Doctrine\ORM\Query; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\MappingException; @@ -168,7 +169,7 @@ protected function addAllClassFields($class, $alias, $columnAliasMap = []) foreach ($associationMapping['joinColumns'] as $joinColumn) { $columnName = $joinColumn['name']; $columnAlias = $platform->getSQLResultCasing($columnAliasMap[$columnName]); - $columnType = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); + $columnType = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); if (isset($this->metaMappings[$columnAlias])) { throw new \InvalidArgumentException("The column '$columnAlias' conflicts with another column in the mapper."); @@ -328,7 +329,6 @@ public function addNamedNativeQueryResultSetMapping(ClassMetadata $class, $resul $rootShortName = $class->reflClass->getShortName(); $rootAlias = strtolower($rootShortName[0]) . $counter; - if (isset($resultMapping['entities'])) { foreach ($resultMapping['entities'] as $key => $entityMapping) { $classMetadata = $this->em->getClassMetadata($entityMapping['entityClass']); @@ -337,9 +337,9 @@ public function addNamedNativeQueryResultSetMapping(ClassMetadata $class, $resul $this->addEntityResult($classMetadata->name, $rootAlias); $this->addNamedNativeQueryEntityResultMapping($classMetadata, $entityMapping, $rootAlias); } else { - $shortName = $classMetadata->reflClass->getShortName(); - $joinAlias = strtolower($shortName[0]) . ++ $counter; - $associations = $class->getAssociationsByTargetClass($classMetadata->name); + $shortName = $classMetadata->reflClass->getShortName(); + $joinAlias = strtolower($shortName[0]) . ++ $counter; + $associations = $class->getAssociationsByTargetClass($classMetadata->name); $this->addNamedNativeQueryEntityResultMapping($classMetadata, $entityMapping, $joinAlias); @@ -354,8 +354,8 @@ public function addNamedNativeQueryResultSetMapping(ClassMetadata $class, $resul if (isset($resultMapping['columns'])) { foreach ($resultMapping['columns'] as $entityMapping) { $type = isset($class->fieldNames[$entityMapping['name']]) - ? PersisterHelper::getTypeOfColumn($entityMapping['name'], $class, $this->em) - : 'string'; + ? $class->fieldNames[$entityMapping['name']]['type'] + : Type::getType('string'); $this->addScalarResult($entityMapping['name'], $entityMapping['name'], $type); } diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 81fe8e11fa7..b57b21dc698 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -1274,7 +1274,6 @@ public function walkSelectExpression($selectExpression) $qComp = $this->queryComponents[$dqlAlias]; $class = $qComp['metadata']; $fieldMapping = $class->fieldMappings[$fieldName]; - $type = Type::getType($fieldMapping['type']); $columnAlias = $this->getSQLColumnAlias($fieldMapping['columnName']); $resultAlias = $selectExpression->fieldIdentificationVariable ?: $fieldName; $tableName = ($class->isInheritanceTypeJoined()) @@ -1287,7 +1286,11 @@ public function walkSelectExpression($selectExpression) $this->quoteStrategy->getColumnName($fieldName, $class, $this->platform) ); - $sql .= $type->convertToPHPValueSQL($col, $this->conn->getDatabasePlatform()) . ' AS ' . $columnAlias; + $sql .= sprintf( + '%s AS %s', + $fieldMapping['type']->convertToPHPValueSQL($col, $this->conn->getDatabasePlatform()), + $columnAlias + ); $this->scalarResultAliasMap[$resultAlias] = $columnAlias; @@ -1317,8 +1320,9 @@ public function walkSelectExpression($selectExpression) $this->scalarResultAliasMap[$resultAlias] = $columnAlias; if ( ! $hidden) { - // We cannot resolve field type here; assume 'string'. - $this->rsm->addScalarResult($columnAlias, $resultAlias, 'string'); + // Conceptually we could resolve field type here by traverse through AST to retrieve field type, + // but this is not a feasible solution; assume 'string'. + $this->rsm->addScalarResult($columnAlias, $resultAlias, Type::getType('string')); } break; @@ -1332,7 +1336,7 @@ public function walkSelectExpression($selectExpression) if ( ! $hidden) { // We cannot resolve field type here; assume 'string'. - $this->rsm->addScalarResult($columnAlias, $resultAlias, 'string'); + $this->rsm->addScalarResult($columnAlias, $resultAlias, Type::getType('string')); } break; @@ -1370,7 +1374,6 @@ public function walkSelectExpression($selectExpression) continue; } - $type = Type::getType($mapping['type']); $columnAlias = $this->getSQLColumnAlias($mapping['columnName']); $tableName = (isset($mapping['inherited'])) ? $this->em->getClassMetadata($mapping['inherited'])->getTableName() @@ -1382,7 +1385,11 @@ public function walkSelectExpression($selectExpression) $this->quoteStrategy->getColumnName($fieldName, $class, $this->platform) ); - $sqlParts[] = $type->convertToPHPValueSQL($col, $this->platform) . ' AS '. $columnAlias; + $sqlParts[] = sprintf( + '%s AS %s', + $mapping['type']->convertToPHPValueSQL($col, $this->platform), + $columnAlias + ); $this->scalarResultAliasMap[$resultAlias][] = $columnAlias; @@ -1403,7 +1410,6 @@ public function walkSelectExpression($selectExpression) continue; } - $type = Type::getType($mapping['type']); $columnAlias = $this->getSQLColumnAlias($mapping['columnName']); $col = sprintf( '%s.%s', @@ -1411,7 +1417,11 @@ public function walkSelectExpression($selectExpression) $this->quoteStrategy->getColumnName($fieldName, $subClass, $this->platform) ); - $sqlParts[] = $type->convertToPHPValueSQL($col, $this->platform) . ' AS ' . $columnAlias; + $sqlParts[] = sprintf( + '%s AS %s', + $mapping['type']->convertToPHPValueSQL($col, $this->platform), + $columnAlias + ); $this->scalarResultAliasMap[$resultAlias][] = $columnAlias; @@ -1506,7 +1516,7 @@ public function walkNewObject($newObjectExpression, $newObjectResultAlias=null) foreach ($newObjectExpression->args as $argIndex => $e) { $resultAlias = $this->scalarResultCounter++; $columnAlias = $this->getSQLColumnAlias('sclr'); - $fieldType = 'string'; + $fieldType = Type::getType('string'); switch (true) { case ($e instanceof AST\NewObjectExpression): @@ -1529,11 +1539,11 @@ public function walkNewObject($newObjectExpression, $newObjectResultAlias=null) case ($e instanceof AST\Literal): switch ($e->type) { case AST\Literal::BOOLEAN: - $fieldType = 'boolean'; + $fieldType = Type::getType('boolean'); break; case AST\Literal::NUMERIC: - $fieldType = is_float($e->value) ? 'float' : 'integer'; + $fieldType = Type::getType(is_float($e->value) ? 'float' : 'integer'); break; } diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index cece90d8df2..5ffe70974ae 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -23,6 +23,7 @@ use Doctrine\Common\Util\Inflector; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; + /** * Generic class used to generate PHP5 entity classes from ClassMetadata instances. * @@ -737,18 +738,19 @@ private function generateEmbeddableConstructor(ClassMetadata $metadata) } foreach ($fieldMappings as $fieldMapping) { - if (isset($fieldMapping['declaredField']) && - isset($metadata->embeddedClasses[$fieldMapping['declaredField']]) - ) { + if (isset($fieldMapping['declaredField']) && isset($metadata->embeddedClasses[$fieldMapping['declaredField']])) { continue; } - $paramTypes[] = $this->getType($fieldMapping['type']) . (!empty($fieldMapping['nullable']) ? '|null' : ''); - $param = '$' . $fieldMapping['fieldName']; + $fieldType = $fieldMapping['type']->getName(); + $mappedType = $this->getType($fieldType); + $param = '$' . $fieldMapping['fieldName']; + + $paramTypes[] = $mappedType . (!empty($fieldMapping['nullable']) ? '|null' : ''); $paramVariables[] = $param; - if ($fieldMapping['type'] === 'datetime') { - $param = $this->getType($fieldMapping['type']) . ' ' . $param; + if ($fieldType === 'datetime') { + $param = $mappedType . ' ' . $param; } if (!empty($fieldMapping['nullable'])) { @@ -1094,11 +1096,14 @@ protected function generateTableAnnotation(ClassMetadata $metadata) protected function generateTableConstraints($constraintName, array $constraints) { $annotations = []; + foreach ($constraints as $name => $constraint) { $columns = []; + foreach ($constraint['columns'] as $column) { $columns[] = '"' . $column . '"'; } + $annotations[] = '@' . $this->annotationsPrefix . $constraintName . '(name="' . $name . '", columns={' . implode(', ', $columns) . '})'; } @@ -1126,9 +1131,13 @@ protected function generateDiscriminatorColumnAnnotation(ClassMetadata $metadata { if ($metadata->inheritanceType != ClassMetadata::INHERITANCE_TYPE_NONE) { $discrColumn = $metadata->discriminatorColumn; - $columnDefinition = 'name="' . $discrColumn['name'] - . '", type="' . $discrColumn['type'] - . '", length=' . $discrColumn['length']; + + $columnDefinition = sprintf( + 'name="%s", type="%s", length=%d', + $discrColumn['name'], + $discrColumn['type']->getName(), + $discrColumn['length'] + ); return '@' . $this->annotationsPrefix . 'DiscriminatorColumn(' . $columnDefinition . ')'; } @@ -1162,24 +1171,20 @@ protected function generateEntityStubMethods(ClassMetadata $metadata) $methods = []; foreach ($metadata->fieldMappings as $fieldMapping) { - if (isset($fieldMapping['declaredField']) && - isset($metadata->embeddedClasses[$fieldMapping['declaredField']]) - ) { + if (isset($fieldMapping['declaredField']) && isset($metadata->embeddedClasses[$fieldMapping['declaredField']])) { continue; } + $fieldType = $fieldMapping['type']->getName(); $nullableField = $this->nullableFieldExpression($fieldMapping); - if (( ! isset($fieldMapping['id']) || - ! $fieldMapping['id'] || - $metadata->generatorType == ClassMetadata::GENERATOR_TYPE_NONE - ) && (! $metadata->isEmbeddedClass || ! $this->embeddablesImmutable) - && $code = $this->generateEntityStubMethod($metadata, 'set', $fieldMapping['fieldName'], $fieldMapping['type'], $nullableField) - ) { + if (( ! isset($fieldMapping['id']) || ! $fieldMapping['id'] || $metadata->generatorType == ClassMetadata::GENERATOR_TYPE_NONE) && + ( ! $metadata->isEmbeddedClass || ! $this->embeddablesImmutable) && + $code = $this->generateEntityStubMethod($metadata, 'set', $fieldMapping['fieldName'], $fieldType, $nullableField)) { $methods[] = $code; } - if ($code = $this->generateEntityStubMethod($metadata, 'get', $fieldMapping['fieldName'], $fieldMapping['type'], $nullableField)) { + if ($code = $this->generateEntityStubMethod($metadata, 'get', $fieldMapping['fieldName'], $fieldType, $nullableField)) { $methods[] = $code; } } @@ -1625,10 +1630,13 @@ protected function generateAssociationMappingPropertyDocBlock(array $association */ protected function generateFieldMappingPropertyDocBlock(array $fieldMapping, ClassMetadata $metadata) { + $fieldType = $fieldMapping['type']->getName(); + $lines = []; + $lines[] = $this->spaces . '/**'; $lines[] = $this->spaces . ' * @var ' - . $this->getType($fieldMapping['type']) + . $this->getType($fieldType) . ($this->nullableFieldExpression($fieldMapping) ? '|null' : ''); if ($this->generateAnnotations) { @@ -1640,7 +1648,7 @@ protected function generateFieldMappingPropertyDocBlock(array $fieldMapping, Cla } if (isset($fieldMapping['type'])) { - $column[] = 'type="' . $fieldMapping['type'] . '"'; + $column[] = 'type="' . $fieldType . '"'; } if (isset($fieldMapping['length'])) { diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 6e58f931eab..6daaa100611 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -83,6 +83,9 @@ public function exportClassMetadata(ClassMetadata $metadata) } foreach ($metadata->fieldMappings as $fieldMapping) { + // We need to override the value we'll blindly var_export() later + $fieldMapping['type'] = $fieldMapping['type']->getName(); + $lines[] = '$metadata->mapField(' . $this->_varExport($fieldMapping) . ');'; } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 856d1feee4a..d01dbf73024 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -78,7 +78,7 @@ public function exportClassMetadata(ClassMetadata $metadata) if ($metadata->discriminatorColumn) { $discriminatorColumnXml = $root->addChild('discriminator-column'); $discriminatorColumnXml->addAttribute('name', $metadata->discriminatorColumn['name']); - $discriminatorColumnXml->addAttribute('type', $metadata->discriminatorColumn['type']); + $discriminatorColumnXml->addAttribute('type', $metadata->discriminatorColumn['type']->getName()); if (isset($metadata->discriminatorColumn['length'])) { $discriminatorColumnXml->addAttribute('length', $metadata->discriminatorColumn['length']); @@ -108,6 +108,7 @@ public function exportClassMetadata(ClassMetadata $metadata) $indexXml = $indexesXml->addChild('index'); $indexXml->addAttribute('name', $name); $indexXml->addAttribute('columns', implode(',', $index['columns'])); + if (isset($index['flags'])) { $indexXml->addAttribute('flags', implode(',', $index['flags'])); } @@ -119,17 +120,19 @@ public function exportClassMetadata(ClassMetadata $metadata) foreach ($metadata->table['uniqueConstraints'] as $name => $unique) { $uniqueConstraintXml = $uniqueConstraintsXml->addChild('unique-constraint'); + $uniqueConstraintXml->addAttribute('name', $name); $uniqueConstraintXml->addAttribute('columns', implode(',', $unique['columns'])); } } $fields = $metadata->fieldMappings; - $id = []; + foreach ($fields as $name => $field) { if (isset($field['id']) && $field['id']) { $id[$name] = $field; + unset($fields[$name]); } } @@ -150,10 +153,11 @@ public function exportClassMetadata(ClassMetadata $metadata) if ($id) { foreach ($id as $field) { $idXml = $root->addChild('id'); + $idXml->addAttribute('name', $field['fieldName']); if (isset($field['type'])) { - $idXml->addAttribute('type', $field['type']); + $idXml->addAttribute('type', $field['type']->getName()); } if (isset($field['columnName'])) { @@ -170,6 +174,7 @@ public function exportClassMetadata(ClassMetadata $metadata) if ($idGeneratorType = $this->_getIdGeneratorTypeString($metadata->generatorType)) { $generatorXml = $idXml->addChild('generator'); + $generatorXml->addAttribute('strategy', $idGeneratorType); $this->exportSequenceInformation($idXml, $metadata); @@ -180,8 +185,9 @@ public function exportClassMetadata(ClassMetadata $metadata) if ($fields) { foreach ($fields as $field) { $fieldXml = $root->addChild('field'); + $fieldXml->addAttribute('name', $field['fieldName']); - $fieldXml->addAttribute('type', $field['type']); + $fieldXml->addAttribute('type', $field['type']->getName()); if (isset($field['columnName'])) { $fieldXml->addAttribute('column', $field['columnName']); diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php index 2b89cda739a..f7b5139ca1a 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php @@ -94,6 +94,7 @@ public function exportClassMetadata(ClassMetadata $metadata) $ids = []; foreach ($fieldMappings as $name => $fieldMapping) { $fieldMapping['column'] = $fieldMapping['columnName']; + $fieldMapping['type'] = $fieldMapping['type']->getName(); unset($fieldMapping['columnName'], $fieldMapping['fieldName']); @@ -103,7 +104,9 @@ public function exportClassMetadata(ClassMetadata $metadata) if (isset($fieldMapping['id']) && $fieldMapping['id']) { $ids[$name] = $fieldMapping; + unset($fieldMappings[$name]); + continue; } @@ -120,6 +123,7 @@ public function exportClassMetadata(ClassMetadata $metadata) if ( ! isset($array['fields'])) { $array['fields'] = []; } + $array['fields'] = array_merge($array['fields'], $fieldMappings); } diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php index 034b33b2c16..2e6172ba389 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php @@ -24,6 +24,7 @@ use Doctrine\DBAL\Platforms\PostgreSqlPlatform; use Doctrine\DBAL\Platforms\SQLAnywherePlatform; use Doctrine\DBAL\Platforms\SQLServerPlatform; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Query\AST\OrderByClause; use Doctrine\ORM\Query\AST\PartialObjectExpression; use Doctrine\ORM\Query\AST\SelectExpression; @@ -158,7 +159,9 @@ private function rebuildOrderByForRowNumber(SelectStatement $AST) $orderByItem->expression = $selectAliasToExpressionMap[$orderByItem->expression]; } } + $func = new RowNumberOverFunction('dctrn_rownum'); + $func->orderByClause = $AST->orderByClause; $AST->selectClause->selectExpressions[] = new SelectExpression($func, 'dctrn_rownum', true); @@ -180,6 +183,7 @@ public function walkSelectStatement(SelectStatement $AST) if ($this->platformSupportsRowNumber()) { return $this->walkSelectStatementWithRowNumber($AST); } + return $this->walkSelectStatementWithoutRowNumber($AST); } @@ -198,44 +202,44 @@ public function walkSelectStatementWithRowNumber(SelectStatement $AST) $hasOrderBy = false; $outerOrderBy = ' ORDER BY dctrn_minrownum ASC'; $orderGroupBy = ''; + if ($AST->orderByClause instanceof OrderByClause) { $hasOrderBy = true; + $this->rebuildOrderByForRowNumber($AST); } - $innerSql = $this->getInnerSQL($AST); - - $sqlIdentifier = $this->getSQLIdentifier($AST); + $innerSql = $this->getInnerSQL($AST); + $sqlIdentifier = $this->getSQLIdentifier($AST); + $sqlAliasIdentifier = array_map(function ($info) { return $info['alias']; }, $sqlIdentifier); if ($hasOrderBy) { - $orderGroupBy = ' GROUP BY ' . implode(', ', $sqlIdentifier); - $sqlIdentifier[] = 'MIN(' . $this->walkResultVariable('dctrn_rownum') . ') AS dctrn_minrownum'; + $orderGroupBy = ' GROUP BY ' . implode(', ', $sqlAliasIdentifier); + $sqlPiece = 'MIN(' . $this->walkResultVariable('dctrn_rownum') . ') AS dctrn_minrownum'; + + $sqlAliasIdentifier[] = $sqlPiece; + $sqlIdentifier[] = array( + 'alias' => $sqlPiece, + 'type' => Type::getType('integer'), + ); } // Build the counter query - $sql = sprintf( - 'SELECT DISTINCT %s FROM (%s) dctrn_result', - implode(', ', $sqlIdentifier), - $innerSql - ); + $sql = sprintf('SELECT DISTINCT %s FROM (%s) dctrn_result', implode(', ', $sqlAliasIdentifier), $innerSql); if ($hasOrderBy) { $sql .= $orderGroupBy . $outerOrderBy; } // Apply the limit and offset. - $sql = $this->platform->modifyLimitQuery( - $sql, - $this->maxResults, - $this->firstResult - ); + $sql = $this->platform->modifyLimitQuery($sql, $this->maxResults, $this->firstResult); // Add the columns to the ResultSetMapping. It's not really nice but // it works. Preferably I'd clear the RSM or simply create a new one // but that is not possible from inside the output walker, so we dirty // up the one we have. - foreach ($sqlIdentifier as $property => $alias) { - $this->rsm->addScalarResult($alias, $property); + foreach ($sqlIdentifier as $property => $propertyMapping) { + $this->rsm->addScalarResult($propertyMapping['alias'], $property, $propertyMapping['type']); } return $sql; @@ -267,16 +271,15 @@ public function walkSelectStatementWithoutRowNumber(SelectStatement $AST, $addMi $orderByClause = $AST->orderByClause; $AST->orderByClause = null; - $innerSql = $this->getInnerSQL($AST); - - $sqlIdentifier = $this->getSQLIdentifier($AST); + $innerSql = $this->getInnerSQL($AST); + $sqlIdentifier = $this->getSQLIdentifier($AST); + $sqlAliasIdentifier = array_map(function ($info) { return $info['alias']; }, $sqlIdentifier); // Build the counter query - $sql = sprintf('SELECT DISTINCT %s FROM (%s) dctrn_result', - implode(', ', $sqlIdentifier), $innerSql); + $sql = sprintf('SELECT DISTINCT %s FROM (%s) dctrn_result', implode(', ', $sqlAliasIdentifier), $innerSql); // http://www.doctrine-project.org/jira/browse/DDC-1958 - $sql = $this->preserveSqlOrdering($sqlIdentifier, $innerSql, $sql, $orderByClause); + $sql = $this->preserveSqlOrdering($sqlAliasIdentifier, $innerSql, $sql, $orderByClause); // Apply the limit and offset. $sql = $this->platform->modifyLimitQuery( @@ -287,8 +290,8 @@ public function walkSelectStatementWithoutRowNumber(SelectStatement $AST, $addMi // it works. Preferably I'd clear the RSM or simply create a new one // but that is not possible from inside the output walker, so we dirty // up the one we have. - foreach ($sqlIdentifier as $property => $alias) { - $this->rsm->addScalarResult($alias, $property); + foreach ($sqlIdentifier as $property => $propertyMapping) { + $this->rsm->addScalarResult($propertyMapping['alias'], $property, $propertyMapping['type']); } // Restore orderByClause @@ -320,12 +323,15 @@ private function addMissingItemsFromOrderByToSelect(SelectStatement $AST) // Get a map of referenced identifiers to field names. $selects = []; + foreach ($orderByPathExpressions as $pathExpression) { $idVar = $pathExpression->identificationVariable; $field = $pathExpression->field; - if (!isset($selects[$idVar])) { + + if ( ! isset($selects[$idVar])) { $selects[$idVar] = []; } + $selects[$idVar][$field] = true; } @@ -334,10 +340,13 @@ private function addMissingItemsFromOrderByToSelect(SelectStatement $AST) foreach ($AST->selectClause->selectExpressions as $selectExpression) { if ($selectExpression instanceof SelectExpression) { $idVar = $selectExpression->expression; - if (!is_string($idVar)) { + + if ( ! is_string($idVar)) { continue; } + $field = $selectExpression->fieldIdentificationVariable; + if ($field === null) { // No need to add this select, as we're already fetching the whole object. unset($selects[$idVar]); @@ -349,7 +358,9 @@ private function addMissingItemsFromOrderByToSelect(SelectStatement $AST) // Add select items which were not excluded to the AST's select clause. foreach ($selects as $idVar => $fields) { - $AST->selectClause->selectExpressions[] = new SelectExpression(new PartialObjectExpression($idVar, array_keys($fields)), null, true); + $selectExpression = new SelectExpression(new PartialObjectExpression($idVar, array_keys($fields)), null, true); + + $AST->selectClause->selectExpressions[] = $selectExpression; } } @@ -441,10 +452,10 @@ private function generateSqlAliasReplacements() : array // Generate search patterns for each field's path expression in the order by clause foreach ($this->rsm->fieldMappings as $fieldAlias => $fieldName) { $dqlAliasForFieldAlias = $this->rsm->columnOwnerMap[$fieldAlias]; - $class = $metadataList[$dqlAliasForFieldAlias]; + $class = $metadataList[$dqlAliasForFieldAlias]; // If the field is from a joined child table, we won't be ordering on it. - if (! isset($class->fieldMappings[$fieldName])) { + if ( ! isset($class->fieldMappings[$fieldName])) { continue; } @@ -459,13 +470,12 @@ private function generateSqlAliasReplacements() : array // Get the SQL table alias for the entity and field $sqlTableAliasForFieldAlias = $aliasMap[$dqlAliasForFieldAlias]; - if (isset($fieldMapping['declared']) && $fieldMapping['declared'] !== $class->name) { // Field was declared in a parent class, so we need to get the proper SQL table alias // for the joined parent table. $otherClassMetadata = $this->em->getClassMetadata($fieldMapping['declared']); - if (! $otherClassMetadata->isMappedSuperclass) { + if ( ! $otherClassMetadata->isMappedSuperclass) { $sqlTableAliasForFieldAlias = $this->getSQLTableAlias($otherClassMetadata->getTableName(), $dqlAliasForFieldAlias); } } @@ -532,6 +542,7 @@ private function getSQLIdentifier(SelectStatement $AST) // Get the root entity and alias from the AST fromClause. $from = $AST->fromClause->identificationVariableDeclarations; + if (count($from) !== 1) { throw new \RuntimeException('Cannot count query which selects two FROM components, cannot make distinction'); } @@ -543,11 +554,15 @@ private function getSQLIdentifier(SelectStatement $AST) // For every identifier, find out the SQL alias by combing through the ResultSetMapping $sqlIdentifier = []; + foreach ($rootIdentifier as $property) { if (isset($rootClass->fieldMappings[$property])) { foreach (array_keys($this->rsm->fieldMappings, $property) as $alias) { - if ($this->rsm->columnOwnerMap[$alias] == $rootAlias) { - $sqlIdentifier[$property] = $alias; + if ($this->rsm->columnOwnerMap[$alias] === $rootAlias) { + $sqlIdentifier[$property] = array( + 'type' => $rootClass->fieldMappings[$property]['type'], + 'alias' => $alias, + ); } } } @@ -556,8 +571,11 @@ private function getSQLIdentifier(SelectStatement $AST) $joinColumn = $rootClass->associationMappings[$property]['joinColumns'][0]['name']; foreach (array_keys($this->rsm->metaMappings, $joinColumn) as $alias) { - if ($this->rsm->columnOwnerMap[$alias] == $rootAlias) { - $sqlIdentifier[$property] = $alias; + if ($this->rsm->columnOwnerMap[$alias] === $rootAlias) { + $sqlIdentifier[$property] = array( + 'type' => $this->rsm->typeMappings[$alias], + 'alias' => $alias, + ); } } } diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php index 83fd619d036..37174e3d6a9 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php @@ -84,13 +84,13 @@ public function walkSelectStatement(SelectStatement $AST) $identifier = $rootClass->getSingleIdentifierFieldName(); if (isset($rootClass->associationMappings[$identifier])) { - throw new \RuntimeException("Paginating an entity with foreign key as identifier only works when using the Output Walkers. Call Paginator#setUseOutputWalkers(true) before iterating the paginator."); + throw new \RuntimeException( + "Paginating an entity with foreign key as identifier only works when using the Output Walkers. " . + "Call Paginator#setUseOutputWalkers(true) before iterating the paginator." + ); } - $this->_getQuery()->setHint( - self::IDENTIFIER_TYPE, - Type::getType($rootClass->fieldMappings[$identifier]['type']) - ); + $this->_getQuery()->setHint(self::IDENTIFIER_TYPE, $rootClass->fieldMappings[$identifier]['type']); $pathExpression = new PathExpression( PathExpression::TYPE_STATE_FIELD | PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION, diff --git a/lib/Doctrine/ORM/Tools/Pagination/Paginator.php b/lib/Doctrine/ORM/Tools/Pagination/Paginator.php index 250df071f92..1deac3f9d99 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/Paginator.php +++ b/lib/Doctrine/ORM/Tools/Pagination/Paginator.php @@ -19,11 +19,12 @@ namespace Doctrine\ORM\Tools\Pagination; -use Doctrine\ORM\Query\Parser; -use Doctrine\ORM\QueryBuilder; +use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\NoResultException; use Doctrine\ORM\Query; +use Doctrine\ORM\Query\Parser; use Doctrine\ORM\Query\ResultSetMapping; -use Doctrine\ORM\NoResultException; +use Doctrine\ORM\QueryBuilder; /** * The paginator can handle various complex scenarios with DQL. @@ -152,12 +153,14 @@ public function getIterator() $ids = array_map('current', $subQuery->getScalarResult()); $whereInQuery = $this->cloneQuery($this->query); + // don't do this for an empty id array if (count($ids) === 0) { return new \ArrayIterator([]); } $this->appendTreeWalker($whereInQuery, WhereInWalker::class); + $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, count($ids)); $whereInQuery->setFirstResult(null)->setMaxResults(null); $whereInQuery->setParameter(WhereInWalker::PAGINATOR_ID_ALIAS, $ids); @@ -250,7 +253,8 @@ private function getCountQuery() $platform = $countQuery->getEntityManager()->getConnection()->getDatabasePlatform(); // law of demeter win $rsm = new ResultSetMapping(); - $rsm->addScalarResult($platform->getSQLResultCasing('dctrn_count'), 'count'); + + $rsm->addScalarResult($platform->getSQLResultCasing('dctrn_count'), 'count', Type::getType('integer')); $countQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, CountOutputWalker::class); $countQuery->setResultSetMapping($rsm); diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index f09a8d44bbd..828de915dc4 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -19,7 +19,6 @@ namespace Doctrine\ORM\Tools; -use Doctrine\ORM\ORMException; use Doctrine\DBAL\Schema\Comparator; use Doctrine\DBAL\Schema\Index; use Doctrine\DBAL\Schema\Schema; @@ -28,8 +27,9 @@ use Doctrine\DBAL\Schema\Visitor\RemoveNamespacedAssets; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Tools\Event\GenerateSchemaTableEventArgs; +use Doctrine\ORM\ORMException; use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs; +use Doctrine\ORM\Tools\Event\GenerateSchemaTableEventArgs; /** * The SchemaTool is a tool to create/drop/update database schemas based on @@ -177,20 +177,20 @@ public function getSchemaFromMetadata(array $classes) foreach ($class->subClasses as $subClassName) { $subClass = $this->em->getClassMetadata($subClassName); + $this->gatherColumns($subClass, $table); $this->gatherRelationsSql($subClass, $table, $schema, $addedFks, $blacklistedFks); + $processedClasses[$subClassName] = true; } } elseif ($class->isInheritanceTypeJoined()) { // Add all non-inherited fields as columns $pkColumns = []; + foreach ($class->fieldMappings as $fieldName => $mapping) { if ( ! isset($mapping['inherited'])) { - $columnName = $this->quoteStrategy->getColumnName( - $mapping['fieldName'], - $class, - $this->platform - ); + $columnName = $this->quoteStrategy->getColumnName($mapping['fieldName'], $class, $this->platform); + $this->gatherColumn($class, $mapping, $table); if ($class->isIdentifier($fieldName)) { @@ -202,20 +202,24 @@ public function getSchemaFromMetadata(array $classes) $this->gatherRelationsSql($class, $table, $schema, $addedFks, $blacklistedFks); // Add the discriminator column only to the root table - if ($class->name == $class->rootEntityName) { + if ($class->name === $class->rootEntityName) { $this->addDiscriminatorColumnDefinition($class, $table); } else { // Add an ID FK column to child tables $inheritedKeyColumns = []; + foreach ($class->identifier as $identifierField) { $idMapping = $class->fieldMappings[$identifierField]; + if (isset($idMapping['inherited'])) { $this->gatherColumn($class, $idMapping, $table); + $columnName = $this->quoteStrategy->getColumnName( $identifierField, $class, $this->platform ); + // TODO: This seems rather hackish, can we optimize it? $table->getColumn($columnName)->setAutoincrement(false); @@ -223,7 +227,7 @@ public function getSchemaFromMetadata(array $classes) $inheritedKeyColumns[] = $columnName; } } - if (!empty($inheritedKeyColumns)) { + if ( ! empty($inheritedKeyColumns)) { // Add a FK constraint on the ID column $table->addForeignKeyConstraint( $this->quoteStrategy->getTableName( @@ -239,7 +243,6 @@ public function getSchemaFromMetadata(array $classes) } $table->setPrimaryKey($pkColumns); - } elseif ($class->isInheritanceTypeTablePerClass()) { throw ORMException::notSupported(); } else { @@ -355,25 +358,28 @@ public function getSchemaFromMetadata(array $classes) */ private function addDiscriminatorColumnDefinition($class, Table $table) { - $discrColumn = $class->discriminatorColumn; + $discrColumn = $class->discriminatorColumn; + $discrColumnType = $discrColumn['type']->getName(); + $options = [ + 'notnull' => isset($discrColumn['notnull']) ? $discrColumn['notnull'] : true, + ]; - if ( ! isset($discrColumn['type']) || - (strtolower($discrColumn['type']) == 'string' && ! isset($discrColumn['length'])) - ) { - $discrColumn['type'] = 'string'; - $discrColumn['length'] = 255; - } + switch ($discrColumnType) { + case 'string': + $options['length'] = ($discrColumn['length'] !== null) ? $discrColumn['length'] : 255; + break; - $options = [ - 'length' => isset($discrColumn['length']) ? $discrColumn['length'] : null, - 'notnull' => true - ]; + case 'decimal': + $options['scale'] = $discrColumn['scale']; + $options['precision'] = $discrColumn['precision']; + break; + } if (isset($discrColumn['columnDefinition'])) { $options['columnDefinition'] = $discrColumn['columnDefinition']; } - $table->addColumn($discrColumn['name'], $discrColumn['type'], $options); + $table->addColumn($discrColumn['name'], $discrColumnType, $options); } /** @@ -414,19 +420,21 @@ private function gatherColumns($class, Table $table) private function gatherColumn($class, array $mapping, Table $table) { $columnName = $this->quoteStrategy->getColumnName($mapping['fieldName'], $class, $this->platform); - $columnType = $mapping['type']; + $columnType = $mapping['type']->getName(); + + $options = [ + 'length' => isset($mapping['length']) ? $mapping['length'] : null, + 'notnull' => isset($mapping['nullable']) ? ! $mapping['nullable'] : true, + 'platformOptions' => [ + 'version' => ($class->isVersioned && $class->versionField === $mapping['fieldName']), + ], + ]; - $options = []; - $options['length'] = isset($mapping['length']) ? $mapping['length'] : null; - $options['notnull'] = isset($mapping['nullable']) ? ! $mapping['nullable'] : true; - if ($class->isInheritanceTypeSingleTable() && $class->parentClasses) { + if ($class->isInheritanceTypeSingleTable() && count($class->parentClasses) > 0) { $options['notnull'] = false; } - $options['platformOptions'] = []; - $options['platformOptions']['version'] = $class->isVersioned && $class->versionField === $mapping['fieldName']; - - if (strtolower($columnType) === 'string' && null === $options['length']) { + if (strtolower($columnType) == 'string' && null === $options['length']) { $options['length'] = 255; } @@ -463,6 +471,7 @@ private function gatherColumn($class, array $mapping, Table $table) if ($class->isIdGeneratorIdentity() && $class->getIdentifierFieldNames() == [$mapping['fieldName']]) { $options['autoincrement'] = true; } + if ($class->isInheritanceTypeJoined() && $class->name !== $class->rootEntityName) { $options['autoincrement'] = false; } @@ -475,6 +484,7 @@ private function gatherColumn($class, array $mapping, Table $table) } $isUnique = isset($mapping['unique']) ? $mapping['unique'] : false; + if ($isUnique) { $table->addUniqueIndex([$columnName]); } @@ -625,7 +635,6 @@ private function gatherRelationJoinColumns( $uniqueConstraints = []; foreach ($joinColumns as $joinColumn) { - list($definingClass, $referencedFieldName) = $this->getDefiningClass( $class, $joinColumn['referencedColumnName'] @@ -653,10 +662,9 @@ private function gatherRelationJoinColumns( // Only add the column to the table if it does not exist already. // It might exist already if the foreign key is mapped into a regular // property as well. - $fieldMapping = $definingClass->getFieldMapping($referencedFieldName); + $columnDef = null; - $columnDef = null; if (isset($joinColumn['columnDefinition'])) { $columnDef = $joinColumn['columnDefinition']; } elseif (isset($fieldMapping['columnDefinition'])) { @@ -664,6 +672,7 @@ private function gatherRelationJoinColumns( } $columnOptions = ['notnull' => false, 'columnDefinition' => $columnDef]; + $columnType = $fieldMapping['type']->getName(); if (isset($joinColumn['nullable'])) { $columnOptions['notnull'] = !$joinColumn['nullable']; @@ -673,14 +682,18 @@ private function gatherRelationJoinColumns( $columnOptions['options'] = $fieldMapping['options']; } - if ($fieldMapping['type'] == "string" && isset($fieldMapping['length'])) { - $columnOptions['length'] = $fieldMapping['length']; - } elseif ($fieldMapping['type'] == "decimal") { - $columnOptions['scale'] = $fieldMapping['scale']; - $columnOptions['precision'] = $fieldMapping['precision']; + switch ($columnType) { + case 'string': + $columnOptions['length'] = ($fieldMapping['length'] !== null) ? $fieldMapping['length'] : 255; + break; + + case 'decimal': + $columnOptions['scale'] = $fieldMapping['scale']; + $columnOptions['precision'] = $fieldMapping['precision']; + break; } - $theJoinTable->addColumn($quotedColumnName, $fieldMapping['type'], $columnOptions); + $theJoinTable->addColumn($quotedColumnName, $columnType, $columnOptions); } if (isset($joinColumn['unique']) && $joinColumn['unique'] == true) { diff --git a/lib/Doctrine/ORM/Tools/SchemaValidator.php b/lib/Doctrine/ORM/Tools/SchemaValidator.php index 50ccff2cfed..226bd82fd01 100644 --- a/lib/Doctrine/ORM/Tools/SchemaValidator.php +++ b/lib/Doctrine/ORM/Tools/SchemaValidator.php @@ -88,12 +88,6 @@ public function validateClass(ClassMetadata $class) $ce = []; $cmf = $this->em->getMetadataFactory(); - foreach ($class->fieldMappings as $fieldName => $mapping) { - if (!Type::hasType($mapping['type'])) { - $ce[] = "The field '" . $class->name . "#" . $fieldName."' uses a non-existent type '" . $mapping['type'] . "'."; - } - } - foreach ($class->associationMappings as $fieldName => $assoc) { if (!class_exists($assoc['targetEntity']) || $cmf->isTransient($assoc['targetEntity'])) { $ce[] = "The target entity '" . $assoc['targetEntity'] . "' specified on " . $class->name . '#' . $fieldName . ' is unknown or not an entity.'; diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 662145d09f6..43f426c5f37 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -3499,9 +3499,7 @@ private function clearEntityInsertionsForEntityName($entityName) */ private function convertSingleFieldIdentifierToPHPValue(ClassMetadata $class, $identifierValue) { - return $this->em->getConnection()->convertToPHPValue( - $identifierValue, - $class->getTypeOfField($class->getSingleIdentifierFieldName()) - ); + return $class->getTypeOfField($class->getSingleIdentifierFieldName()) + ->convertToPHPValue($identifierValue, $this->em->getConnection()->getDatabasePlatform()); } } diff --git a/lib/Doctrine/ORM/Utility/PersisterHelper.php b/lib/Doctrine/ORM/Utility/PersisterHelper.php index d72dc3e19c0..981188b7c52 100644 --- a/lib/Doctrine/ORM/Utility/PersisterHelper.php +++ b/lib/Doctrine/ORM/Utility/PersisterHelper.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Utility; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Query\QueryException; @@ -80,7 +81,7 @@ public static function getTypeOfField($fieldName, ClassMetadata $class, EntityMa * @param ClassMetadata $class * @param EntityManagerInterface $em * - * @return string + * @return Type * * @throws \RuntimeException */ diff --git a/tests/Doctrine/Performance/Hydration/MixedQueryFetchJoinArrayHydrationPerformanceBench.php b/tests/Doctrine/Performance/Hydration/MixedQueryFetchJoinArrayHydrationPerformanceBench.php index bbda1f23dd8..eebe2d4bbaf 100644 --- a/tests/Doctrine/Performance/Hydration/MixedQueryFetchJoinArrayHydrationPerformanceBench.php +++ b/tests/Doctrine/Performance/Hydration/MixedQueryFetchJoinArrayHydrationPerformanceBench.php @@ -2,6 +2,7 @@ namespace Doctrine\Performance\Hydration; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Internal\Hydration\ArrayHydrator; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\Performance\EntityManagerFactory; @@ -80,7 +81,7 @@ public function init() $this->rsm->addFieldResult('u', 'u__status', 'status'); $this->rsm->addFieldResult('u', 'u__username', 'username'); $this->rsm->addFieldResult('u', 'u__name', 'name'); - $this->rsm->addScalarResult('sclr0', 'nameUpper'); + $this->rsm->addScalarResult('sclr0', 'nameUpper', Type::getType('string')); $this->rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber'); } diff --git a/tests/Doctrine/Performance/Hydration/MixedQueryFetchJoinFullObjectHydrationPerformanceBench.php b/tests/Doctrine/Performance/Hydration/MixedQueryFetchJoinFullObjectHydrationPerformanceBench.php index c70ca77cb10..36d28a199e7 100644 --- a/tests/Doctrine/Performance/Hydration/MixedQueryFetchJoinFullObjectHydrationPerformanceBench.php +++ b/tests/Doctrine/Performance/Hydration/MixedQueryFetchJoinFullObjectHydrationPerformanceBench.php @@ -2,6 +2,7 @@ namespace Doctrine\Performance\Hydration; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Internal\Hydration\ObjectHydrator; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\Performance\EntityManagerFactory; @@ -67,7 +68,7 @@ public function init() $this->rsm->addFieldResult('u', 'u__status', 'status'); $this->rsm->addFieldResult('u', 'u__username', 'username'); $this->rsm->addFieldResult('u', 'u__name', 'name'); - $this->rsm->addScalarResult('sclr0', 'nameUpper'); + $this->rsm->addScalarResult('sclr0', 'nameUpper', Type::getType('string')); $this->rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber'); $this->rsm->addJoinedEntityResult(CmsAddress::class, 'a', 'u', 'address'); $this->rsm->addFieldResult('a', 'a__id', 'id'); diff --git a/tests/Doctrine/Performance/Hydration/MixedQueryFetchJoinPartialObjectHydrationPerformanceBench.php b/tests/Doctrine/Performance/Hydration/MixedQueryFetchJoinPartialObjectHydrationPerformanceBench.php index f2e33f76dbd..2a51d86ce93 100644 --- a/tests/Doctrine/Performance/Hydration/MixedQueryFetchJoinPartialObjectHydrationPerformanceBench.php +++ b/tests/Doctrine/Performance/Hydration/MixedQueryFetchJoinPartialObjectHydrationPerformanceBench.php @@ -2,6 +2,7 @@ namespace Doctrine\Performance\Hydration; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Internal\Hydration\ObjectHydrator; use Doctrine\ORM\Query; use Doctrine\ORM\Query\ResultSetMapping; @@ -81,7 +82,7 @@ public function init() $this->rsm->addFieldResult('u', 'u__status', 'status'); $this->rsm->addFieldResult('u', 'u__username', 'username'); $this->rsm->addFieldResult('u', 'u__name', 'name'); - $this->rsm->addScalarResult('sclr0', 'nameUpper'); + $this->rsm->addScalarResult('sclr0', 'nameUpper', Type::getType('string')); $this->rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber'); } diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php index 58eddd37509..239dc0af213 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php @@ -6,6 +6,7 @@ use Doctrine\ORM\Cache\EntityCacheKey; use Doctrine\ORM\Cache\QueryCache; use Doctrine\Tests\Mocks\TimestampRegionMock; +use Doctrine\DBAL\Types\Type; use Doctrine\Tests\OrmTestCase; use Doctrine\Tests\Mocks\CacheRegionMock; use Doctrine\ORM\Cache\DefaultQueryCache; @@ -622,7 +623,7 @@ public function testScalarResultException() $key = new QueryCacheKey('query.key1', 0); $rsm = new ResultSetMappingBuilder($this->em); - $rsm->addScalarResult('id', 'u', 'integer'); + $rsm->addScalarResult('id', 'u', Type::getType('integer')); $this->queryCache->put($key, $rsm, $result); } diff --git a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php index 99474975b37..67d3a9fed8b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php @@ -65,16 +65,16 @@ public function testLoadMetadataFromDatabase() $this->assertArrayHasKey('DbdriverFoo', $metadatas); $metadata = $metadatas['DbdriverFoo']; - $this->assertArrayHasKey('id', $metadata->fieldMappings); - $this->assertEquals('id', $metadata->fieldMappings['id']['fieldName']); - $this->assertEquals('id', strtolower($metadata->fieldMappings['id']['columnName'])); - $this->assertEquals('integer', (string)$metadata->fieldMappings['id']['type']); - - $this->assertArrayHasKey('bar', $metadata->fieldMappings); - $this->assertEquals('bar', $metadata->fieldMappings['bar']['fieldName']); - $this->assertEquals('bar', strtolower($metadata->fieldMappings['bar']['columnName'])); - $this->assertEquals('string', (string)$metadata->fieldMappings['bar']['type']); - $this->assertEquals(200, $metadata->fieldMappings['bar']['length']); + $this->assertArrayHasKey('id', $metadata->fieldMappings); + $this->assertEquals('id', $metadata->fieldMappings['id']['fieldName']); + $this->assertEquals('id', strtolower($metadata->fieldMappings['id']['columnName'])); + $this->assertEquals('integer', $metadata->fieldMappings['id']['type']->getName()); + + $this->assertArrayHasKey('bar', $metadata->fieldMappings); + $this->assertEquals('bar', $metadata->fieldMappings['bar']['fieldName']); + $this->assertEquals('bar', strtolower($metadata->fieldMappings['bar']['columnName'])); + $this->assertEquals('string', $metadata->fieldMappings['bar']['type']->getName()); + $this->assertEquals(200, $metadata->fieldMappings['bar']['length']); $this->assertTrue($metadata->fieldMappings['bar']['nullable']); } diff --git a/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php b/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php index 31c19a1cd4c..12bd9cedbf4 100644 --- a/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Functional; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Internal\Hydration\HydrationException; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\Query\Parameter; @@ -42,20 +43,23 @@ protected function setUp() public function testBasicNativeQuery() { $user = new CmsUser; + $user->name = 'Roman'; $user->username = 'romanb'; $user->status = 'dev'; + $this->_em->persist($user); $this->_em->flush(); - $this->_em->clear(); $rsm = new ResultSetMapping; + $rsm->addEntityResult(CmsUser::class, 'u'); $rsm->addFieldResult('u', $this->platform->getSQLResultCasing('id'), 'id'); $rsm->addFieldResult('u', $this->platform->getSQLResultCasing('name'), 'name'); $query = $this->_em->createNativeQuery('SELECT id, name FROM cms_users WHERE username = ?', $rsm); + $query->setParameter(1, 'romanb'); $users = $query->getResult(); @@ -68,32 +72,34 @@ public function testBasicNativeQuery() public function testBasicNativeQueryWithMetaResult() { $user = new CmsUser; + $user->name = 'Roman'; $user->username = 'romanb'; $user->status = 'dev'; $addr = new CmsAddress; + $addr->country = 'germany'; $addr->zip = 10827; $addr->city = 'Berlin'; - $user->setAddress($addr); $this->_em->persist($user); $this->_em->flush(); - $this->_em->clear(); $rsm = new ResultSetMapping; + $rsm->addEntityResult(CmsAddress::class, 'a'); $rsm->addFieldResult('a', $this->platform->getSQLResultCasing('id'), 'id'); $rsm->addFieldResult('a', $this->platform->getSQLResultCasing('country'), 'country'); $rsm->addFieldResult('a', $this->platform->getSQLResultCasing('zip'), 'zip'); $rsm->addFieldResult('a', $this->platform->getSQLResultCasing('city'), 'city'); - $rsm->addMetaResult('a', $this->platform->getSQLResultCasing('user_id'), 'user_id', false, 'integer'); + $rsm->addMetaResult('a', $this->platform->getSQLResultCasing('user_id'), 'user_id', false, Type::getType('integer')); $query = $this->_em->createNativeQuery('SELECT a.id, a.country, a.zip, a.city, a.user_id FROM cms_addresses a WHERE a.id = ?', $rsm); + $query->setParameter(1, $addr->id); $addresses = $query->getResult(); @@ -110,21 +116,23 @@ public function testBasicNativeQueryWithMetaResult() public function testJoinedOneToManyNativeQuery() { $user = new CmsUser; + $user->name = 'Roman'; $user->username = 'romanb'; $user->status = 'dev'; $phone = new CmsPhonenumber; + $phone->phonenumber = 424242; $user->addPhonenumber($phone); $this->_em->persist($user); $this->_em->flush(); - $this->_em->clear(); $rsm = new ResultSetMapping; + $rsm->addEntityResult(CmsUser::class, 'u'); $rsm->addFieldResult('u', $this->platform->getSQLResultCasing('id'), 'id'); $rsm->addFieldResult('u', $this->platform->getSQLResultCasing('name'), 'name'); @@ -133,43 +141,46 @@ public function testJoinedOneToManyNativeQuery() $rsm->addFieldResult('p', $this->platform->getSQLResultCasing('phonenumber'), 'phonenumber'); $query = $this->_em->createNativeQuery('SELECT id, name, status, phonenumber FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ?', $rsm); + $query->setParameter(1, 'romanb'); $users = $query->getResult(); + $this->assertEquals(1, count($users)); $this->assertInstanceOf(CmsUser::class, $users[0]); $this->assertEquals('Roman', $users[0]->name); $this->assertInstanceOf(PersistentCollection::class, $users[0]->getPhonenumbers()); $this->assertTrue($users[0]->getPhonenumbers()->isInitialized()); $this->assertEquals(1, count($users[0]->getPhonenumbers())); + $phones = $users[0]->getPhonenumbers(); + $this->assertEquals(424242, $phones[0]->phonenumber); $this->assertTrue($phones[0]->getUser() === $users[0]); - } public function testJoinedOneToOneNativeQuery() { $user = new CmsUser; + $user->name = 'Roman'; $user->username = 'romanb'; $user->status = 'dev'; $addr = new CmsAddress; + $addr->country = 'germany'; $addr->zip = 10827; $addr->city = 'Berlin'; - $user->setAddress($addr); $this->_em->persist($user); $this->_em->flush(); - $this->_em->clear(); - $rsm = new ResultSetMapping; + $rsm->addEntityResult(CmsUser::class, 'u'); $rsm->addFieldResult('u', $this->platform->getSQLResultCasing('id'), 'id'); $rsm->addFieldResult('u', $this->platform->getSQLResultCasing('name'), 'name'); @@ -181,6 +192,7 @@ public function testJoinedOneToOneNativeQuery() $rsm->addFieldResult('a', $this->platform->getSQLResultCasing('city'), 'city'); $query = $this->_em->createNativeQuery('SELECT u.id, u.name, u.status, a.id AS a_id, a.country, a.zip, a.city FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?', $rsm); + $query->setParameter(1, 'romanb'); $users = $query->getResult(); @@ -200,6 +212,7 @@ public function testJoinedOneToOneNativeQuery() public function testFluentInterface() { $parameters = new ArrayCollection; + $parameters->add(new Parameter(1, 'foo')); $parameters->add(new Parameter(2, 'bar')); @@ -221,43 +234,53 @@ public function testFluentInterface() public function testJoinedOneToManyNativeQueryWithRSMBuilder() { $user = new CmsUser; + $user->name = 'Roman'; $user->username = 'romanb'; $user->status = 'dev'; $phone = new CmsPhonenumber; + $phone->phonenumber = 424242; $user->addPhonenumber($phone); $this->_em->persist($user); $this->_em->flush(); - $this->_em->clear(); $rsm = new ResultSetMappingBuilder($this->_em); + $rsm->addRootEntityFromClassMetadata(CmsUser::class, 'u'); $rsm->addJoinedEntityFromClassMetadata(CmsPhonenumber::class, 'p', 'u', 'phonenumbers'); $query = $this->_em->createNativeQuery('SELECT u.*, p.* FROM cms_users u LEFT JOIN cms_phonenumbers p ON u.id = p.user_id WHERE username = ?', $rsm); + $query->setParameter(1, 'romanb'); $users = $query->getResult(); + $this->assertEquals(1, count($users)); $this->assertInstanceOf(CmsUser::class, $users[0]); $this->assertEquals('Roman', $users[0]->name); $this->assertInstanceOf(PersistentCollection::class, $users[0]->getPhonenumbers()); $this->assertTrue($users[0]->getPhonenumbers()->isInitialized()); $this->assertEquals(1, count($users[0]->getPhonenumbers())); + $phones = $users[0]->getPhonenumbers(); + $this->assertEquals(424242, $phones[0]->phonenumber); $this->assertTrue($phones[0]->getUser() === $users[0]); $this->_em->clear(); $rsm = new ResultSetMappingBuilder($this->_em); + $rsm->addRootEntityFromClassMetadata(CmsPhonenumber::class, 'p'); + $query = $this->_em->createNativeQuery('SELECT p.* FROM cms_phonenumbers p WHERE p.phonenumber = ?', $rsm); + $query->setParameter(1, $phone->phonenumber); + $phone = $query->getSingleResult(); $this->assertNotNull($phone->getUser()); @@ -267,30 +290,30 @@ public function testJoinedOneToManyNativeQueryWithRSMBuilder() public function testJoinedOneToOneNativeQueryWithRSMBuilder() { $user = new CmsUser; + $user->name = 'Roman'; $user->username = 'romanb'; $user->status = 'dev'; $addr = new CmsAddress; + $addr->country = 'germany'; $addr->zip = 10827; $addr->city = 'Berlin'; - $user->setAddress($addr); $this->_em->persist($user); $this->_em->flush(); - $this->_em->clear(); - $rsm = new ResultSetMappingBuilder($this->_em); + $rsm->addRootEntityFromClassMetadata(CmsUser::class, 'u'); - $rsm->addJoinedEntityFromClassMetadata(CmsAddress::class, 'a', 'u', 'address', ['id' => 'a_id'] - ); + $rsm->addJoinedEntityFromClassMetadata(CmsAddress::class, 'a', 'u', 'address', ['id' => 'a_id']); $query = $this->_em->createNativeQuery('SELECT u.*, a.*, a.id AS a_id FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?', $rsm); + $query->setParameter(1, 'romanb'); $users = $query->getResult(); @@ -309,9 +332,13 @@ public function testJoinedOneToOneNativeQueryWithRSMBuilder() $this->_em->clear(); $rsm = new ResultSetMappingBuilder($this->_em); + $rsm->addRootEntityFromClassMetadata(CmsAddress::class, 'a'); + $query = $this->_em->createNativeQuery('SELECT a.* FROM cms_addresses a WHERE a.id = ?', $rsm); + $query->setParameter(1, $addr->getId()); + $address = $query->getSingleResult(); $this->assertNotNull($address->getUser()); @@ -324,6 +351,7 @@ public function testJoinedOneToOneNativeQueryWithRSMBuilder() public function testConcreteClassInSingleTableInheritanceSchemaWithRSMBuilderIsFine() { $rsm = new ResultSetMappingBuilder($this->_em); + $rsm->addRootEntityFromClassMetadata(CompanyFixContract::class, 'c'); self::assertSame(CompanyFixContract::class, $rsm->getClassName('c')); @@ -338,6 +366,7 @@ public function testAbstractClassInSingleTableInheritanceSchemaWithRSMBuilderThr $this->expectExceptionMessage('ResultSetMapping builder does not currently support your inheritance scheme.'); $rsm = new ResultSetMappingBuilder($this->_em); + $rsm->addRootEntityFromClassMetadata(CompanyContract::class, 'c'); } @@ -347,6 +376,7 @@ public function testAbstractClassInSingleTableInheritanceSchemaWithRSMBuilderThr public function testRSMBuilderThrowsExceptionOnColumnConflict() { $rsm = new ResultSetMappingBuilder($this->_em); + $rsm->addRootEntityFromClassMetadata(CmsUser::class, 'u'); $rsm->addJoinedEntityFromClassMetadata(CmsAddress::class, 'a', 'u', 'address'); } @@ -357,17 +387,18 @@ public function testRSMBuilderThrowsExceptionOnColumnConflict() public function testUnknownParentAliasThrowsException() { $rsm = new ResultSetMappingBuilder($this->_em); + $rsm->addRootEntityFromClassMetadata(CmsUser::class, 'u'); - $rsm->addJoinedEntityFromClassMetadata(CmsAddress::class, 'a', 'un', 'address', ['id' => 'a_id'] - ); + $rsm->addJoinedEntityFromClassMetadata(CmsAddress::class, 'a', 'un', 'address', ['id' => 'a_id']); $query = $this->_em->createNativeQuery('SELECT u.*, a.*, a.id AS a_id FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?', $rsm); + $query->setParameter(1, 'romanb'); $this->expectException(HydrationException::class); $this->expectExceptionMessage("The parent object of entity result with alias 'a' was not found. The parent alias is 'un'."); - $users = $query->getResult(); + $query->getResult(); } @@ -376,12 +407,14 @@ public function testUnknownParentAliasThrowsException() */ public function testBasicNativeNamedQueryWithSqlResultSetMapping() { - $user = new CmsUser; + $user = new CmsUser; + $user->name = 'Fabio B. Silva'; $user->username = 'FabioBatSilva'; $user->status = 'dev'; - $addr = new CmsAddress; + $addr = new CmsAddress; + $addr->country = 'Brazil'; $addr->zip = 10827; $addr->city = 'SĂŁo Paulo'; @@ -391,10 +424,8 @@ public function testBasicNativeNamedQueryWithSqlResultSetMapping() $this->_em->clear(); $this->_em->persist($user); $this->_em->flush(); - $this->_em->clear(); - $repository = $this->_em->getRepository(CmsAddress::class); $query = $repository->createNativeNamedQuery('find-all'); $result = $query->getResult(); @@ -411,12 +442,14 @@ public function testBasicNativeNamedQueryWithSqlResultSetMapping() */ public function testBasicNativeNamedQueryWithResultClass() { - $user = new CmsUser; + $user = new CmsUser; + $user->name = 'Fabio B. Silva'; $user->username = 'FabioBatSilva'; $user->status = 'dev'; - $email = new CmsEmail(); + $email = new CmsEmail(); + $email->email = 'fabio.bat.silva@gmail.com'; $user->setEmail($email); @@ -424,14 +457,13 @@ public function testBasicNativeNamedQueryWithResultClass() $this->_em->clear(); $this->_em->persist($user); $this->_em->flush(); - $this->_em->clear(); $repository = $this->_em->getRepository(CmsUser::class); - - $result = $repository->createNativeNamedQuery('fetchIdAndUsernameWithResultClass') - ->setParameter(1, 'FabioBatSilva') - ->getResult(); + $result = $repository + ->createNativeNamedQuery('fetchIdAndUsernameWithResultClass') + ->setParameter(1, 'FabioBatSilva') + ->getResult(); $this->assertEquals(1, count($result)); $this->assertInstanceOf(CmsUser::class, $result[0]); @@ -442,9 +474,10 @@ public function testBasicNativeNamedQueryWithResultClass() $this->_em->clear(); - $result = $repository->createNativeNamedQuery('fetchAllColumns') - ->setParameter(1, 'FabioBatSilva') - ->getResult(); + $result = $repository + ->createNativeNamedQuery('fetchAllColumns') + ->setParameter(1, 'FabioBatSilva') + ->getResult(); $this->assertEquals(1, count($result)); $this->assertInstanceOf(CmsUser::class, $result[0]); @@ -455,7 +488,6 @@ public function testBasicNativeNamedQueryWithResultClass() $this->assertInstanceOf(CmsEmail::class, $result[0]->email); } - /** * @group DDC-1663 */ @@ -535,19 +567,22 @@ public function testJoinedOneToManyNativeNamedQueryWithResultSetMapping() */ public function testMixedNativeNamedQueryNormalJoin() { - $user1 = new CmsUser; + $user1 = new CmsUser; + $user1->name = 'Fabio B. Silva'; $user1->username = 'FabioBatSilva'; $user1->status = 'dev'; - $user2 = new CmsUser; + $user2 = new CmsUser; + $user2->name = 'test tester'; $user2->username = 'test'; $user2->status = 'tester'; - $phone1 = new CmsPhonenumber; - $phone2 = new CmsPhonenumber; - $phone3 = new CmsPhonenumber; + $phone1 = new CmsPhonenumber; + $phone2 = new CmsPhonenumber; + $phone3 = new CmsPhonenumber; + $phone1->phonenumber = 11111111; $phone2->phonenumber = 22222222; $phone3->phonenumber = 33333333; @@ -559,13 +594,12 @@ public function testMixedNativeNamedQueryNormalJoin() $this->_em->persist($user1); $this->_em->persist($user2); $this->_em->flush(); - $this->_em->clear(); $repository = $this->_em->getRepository(CmsUser::class); - - $result = $repository->createNativeNamedQuery('fetchUserPhonenumberCount') - ->setParameter(1, ['test','FabioBatSilva'])->getResult(); + $result = $repository + ->createNativeNamedQuery('fetchUserPhonenumberCount') + ->setParameter(1, ['test','FabioBatSilva'])->getResult(); $this->assertEquals(2, count($result)); $this->assertTrue(is_array($result[0])); @@ -588,23 +622,24 @@ public function testMixedNativeNamedQueryNormalJoin() public function testNativeNamedQueryInheritance() { $person = new CompanyPerson; + $person->setName('Fabio B. Silva'); $employee = new CompanyEmployee; + $employee->setName('Fabio Silva'); $employee->setSalary(100000); $employee->setDepartment('IT'); $this->_em->persist($person); $this->_em->persist($employee); - $this->_em->flush(); $this->_em->clear(); $repository = $this->_em->getRepository(CompanyPerson::class); - - $result = $repository->createNativeNamedQuery('fetchAllWithSqlResultSetMapping') - ->getResult(); + $result = $repository + ->createNativeNamedQuery('fetchAllWithSqlResultSetMapping') + ->getResult(); $this->assertEquals(2, count($result)); $this->assertInstanceOf(CompanyPerson::class, $result[0]); @@ -614,12 +649,11 @@ public function testNativeNamedQueryInheritance() $this->assertEquals('Fabio B. Silva', $result[0]->getName()); $this->assertEquals('Fabio Silva', $result[1]->getName()); - $this->_em->clear(); - - $result = $repository->createNativeNamedQuery('fetchAllWithResultClass') - ->getResult(); + $result = $repository + ->createNativeNamedQuery('fetchAllWithResultClass') + ->getResult(); $this->assertEquals(2, count($result)); $this->assertInstanceOf(CompanyPerson::class, $result[0]); @@ -636,29 +670,28 @@ public function testNativeNamedQueryInheritance() */ public function testMultipleEntityResults() { + $user = new CmsUser; - $user = new CmsUser; $user->name = 'Fabio B. Silva'; $user->username = 'FabioBatSilva'; $user->status = 'dev'; - $addr = new CmsAddress; + $addr = new CmsAddress; + $addr->country = 'Brazil'; $addr->zip = 10827; $addr->city = 'SĂŁo Paulo'; - $phone = new CmsPhonenumber; - $phone->phonenumber = 424242; + $phone = new CmsPhonenumber; + $phone->phonenumber = 424242; $user->setAddress($addr); $user->addPhonenumber($phone); - $this->_em->clear(); $this->_em->persist($user); $this->_em->flush(); - $this->_em->clear(); @@ -666,10 +699,8 @@ public function testMultipleEntityResults() $query = $repository->createNativeNamedQuery('fetchMultipleJoinsEntityResults'); $result = $query->getResult(); - $this->assertEquals(1, count($result)); $this->assertTrue(is_array($result[0])); - $this->assertInstanceOf(CmsUser::class, $result[0][0]); $this->assertEquals('Fabio B. Silva', $result[0][0]->name); $this->assertInstanceOf(CmsAddress::class, $result[0][0]->getAddress()); @@ -678,7 +709,6 @@ public function testMultipleEntityResults() $this->assertEquals(10827, $result[0][0]->getAddress()->getZipCode()); $this->assertEquals(1, $result[0]['numphones']); - } /** @@ -695,7 +725,6 @@ public function testNamedNativeQueryInheritance() $contractMappings = $contractMetadata->getSqlResultSetMappings(); $flexMappings = $flexMetadata->getSqlResultSetMappings(); - // contract queries $this->assertEquals('all-contracts', $contractQueries['all-contracts']['name']); $this->assertEquals(CompanyContract::class, $contractQueries['all-contracts']['resultClass']); @@ -740,6 +769,7 @@ public function testNamedNativeQueryInheritance() public function testGenerateSelectClauseNoRenameSingleEntity() { $rsm = new ResultSetMappingBuilder($this->_em); + $rsm->addRootEntityFromClassMetadata(CmsUser::class, 'u'); $selectClause = $rsm->generateSelectClause(); @@ -753,10 +783,14 @@ public function testGenerateSelectClauseNoRenameSingleEntity() public function testGenerateSelectClauseCustomRenames() { $rsm = new ResultSetMappingBuilder($this->_em); - $rsm->addRootEntityFromClassMetadata(CmsUser::class, 'u', [ - 'id' => 'id1', - 'username' => 'username2' - ] + + $rsm->addRootEntityFromClassMetadata( + CmsUser::class, + 'u', + [ + 'id' => 'id1', + 'username' => 'username2' + ] ); $selectClause = $rsm->generateSelectClause(); @@ -770,6 +804,7 @@ public function testGenerateSelectClauseCustomRenames() public function testGenerateSelectClauseRenameTableAlias() { $rsm = new ResultSetMappingBuilder($this->_em); + $rsm->addRootEntityFromClassMetadata(CmsUser::class, 'u'); $selectClause = $rsm->generateSelectClause(['u' => 'u1']); @@ -783,6 +818,7 @@ public function testGenerateSelectClauseRenameTableAlias() public function testGenerateSelectClauseIncrement() { $rsm = new ResultSetMappingBuilder($this->_em, ResultSetMappingBuilder::COLUMN_RENAMING_INCREMENT); + $rsm->addRootEntityFromClassMetadata(CmsUser::class, 'u'); $selectClause = $rsm->generateSelectClause(); @@ -796,6 +832,7 @@ public function testGenerateSelectClauseIncrement() public function testGenerateSelectClauseToString() { $rsm = new ResultSetMappingBuilder($this->_em, ResultSetMappingBuilder::COLUMN_RENAMING_INCREMENT); + $rsm->addRootEntityFromClassMetadata(CmsUser::class, 'u'); $this->assertSQLEquals('u.id AS id0, u.status AS status1, u.username AS username2, u.name AS name3, u.email_id AS email_id4', (string)$rsm); @@ -807,6 +844,7 @@ public function testGenerateSelectClauseToString() public function testGenerateSelectClauseWithDiscriminatorColumn() { $rsm = new ResultSetMappingBuilder($this->_em, ResultSetMappingBuilder::COLUMN_RENAMING_INCREMENT); + $rsm->addEntityResult(DDC3899User::class, 'u'); $rsm->addJoinedEntityResult(DDC3899FixContract::class, 'c', 'u', 'contracts'); $rsm->addFieldResult('u', $this->platform->getSQLResultCasing('id'), 'id'); diff --git a/tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php b/tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php index bfadf2c2543..e916fcdd594 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php @@ -2,11 +2,12 @@ namespace Doctrine\Tests\ORM\Functional; +use Doctrine\Common\Cache\ArrayCache; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Query; use Doctrine\ORM\Query\ResultSetMapping; -use Doctrine\Tests\Models\CMS\CmsUser; use Doctrine\Tests\Models\CMS\CmsArticle; -use Doctrine\Common\Cache\ArrayCache; +use Doctrine\Tests\Models\CMS\CmsUser; use Doctrine\Tests\OrmFunctionalTestCase; /** @@ -24,7 +25,9 @@ class ResultCacheTest extends OrmFunctionalTestCase protected function setUp() { $this->cacheDataReflection = new \ReflectionProperty(ArrayCache::class, "data"); $this->cacheDataReflection->setAccessible(true); + $this->useModelSet('cms'); + parent::setUp(); } @@ -49,7 +52,6 @@ public function testResultCache() $this->_em->flush(); $query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux'); - $cache = new ArrayCache(); $query->setResultCacheDriver($cache)->setResultCacheId('my_cache_id'); @@ -97,6 +99,7 @@ public function testUseResultCache() $query->useResultCache(true); $query->setResultCacheDriver($cache); $query->setResultCacheId('testing_result_cache_id'); + $users = $query->getResult(); $this->assertTrue($cache->contains('testing_result_cache_id')); @@ -133,12 +136,17 @@ public function testUseResultCacheParams() $this->assertEquals($sqlCount + 2, count($this->_sqlLoggerStack->queries), "The next two sql should have been cached, but were not."); } + /** + * @return \Doctrine\ORM\NativeQuery + * + * @throws \Doctrine\ORM\ORMException + */ public function testNativeQueryResultCaching() { $cache = new ArrayCache(); $rsm = new ResultSetMapping(); - $rsm->addScalarResult('id', 'u', 'integer'); + $rsm->addScalarResult('id', 'u', Type::getType('integer')); $query = $this->_em->createNativeQuery('select u.id FROM cms_users u WHERE u.id = ?', $rsm); @@ -160,7 +168,7 @@ public function testNativeQueryResultCaching() */ public function testResultCacheNotDependsOnQueryHints($query) { - $cache = $query->getResultCacheDriver(); + $cache = $query->getResultCacheDriver(); $cacheCount = $this->getCacheSize($cache); $query->setHint('foo', 'bar'); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1655Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1655Test.php index a63d3635fe5..a22a5fc9e43 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1655Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1655Test.php @@ -22,9 +22,35 @@ public function setUp() ] ); } catch(\Exception $e) { + $this->fail($e->getMessage() . PHP_EOL . $e->getTraceAsString()); } } + protected function tearDown() + { + $conn = static::$_sharedConn; + + // In case test is skipped, tearDown is called, but no setup may have run + if (!$conn) { + return; + } + + $platform = $conn->getDatabasePlatform(); + + $this->_sqlLoggerStack->enabled = false; + + $conn->executeUpdate('DROP TABLE DDC1655Foo'); + $conn->executeUpdate('DROP TABLE DDC1655Baz'); + + // Some drivers require sequence dropping (ie. PostgreSQL) + if ($platform->prefersSequences()) { + $conn->executeUpdate('DROP SEQUENCE DDC1655Foo_id_seq'); + $conn->executeUpdate('DROP SEQUENCE DDC1655Baz_id_seq'); + } + + $this->_em->clear(); + } + public function testPostLoadOneToManyInheritance() { $cm = $this->_em->getClassMetadata(DDC1655Foo::class); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1685Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1685Test.php index 576b4e28628..18c33ad42ce 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1685Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1685Test.php @@ -15,6 +15,7 @@ class DDC1685Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { $this->useModelSet('ddc117'); + parent::setUp(); $this->_em->createQuery('DELETE FROM Doctrine\Tests\Models\DDC117\DDC117ArticleDetails ad')->execute(); @@ -48,6 +49,7 @@ public function testPaginateIterate() public function testPaginateCountNoOutputWalkers() { $this->paginator->setUseOutputWalkers(false); + $this->assertEquals(1, count($this->paginator)); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php index 01f42bb930f..022d22b0a5a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php @@ -11,9 +11,10 @@ /** * @group DDC-3634 */ -class DDC3634Test extends OrmFunctionalTestCase { - - protected function setUp() { +class DDC3634Test extends OrmFunctionalTestCase +{ + protected function setUp() + { parent::setUp(); $metadata = $this->_em->getClassMetadata(DDC3634Entity::class); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3711Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3711Test.php index bd2b1ba9bc6..cf29be50939 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3711Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3711Test.php @@ -2,7 +2,6 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; - use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Tests\Models\DDC3711\DDC3711EntityA; use Doctrine\Tests\ORM\Mapping\YamlMappingDriverTest; diff --git a/tests/Doctrine/Tests/ORM/Hydration/ArrayHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/ArrayHydratorTest.php index 6c0b30ef655..0dfd66b44ef 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ArrayHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ArrayHydratorTest.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Hydration; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\Tests\Mocks\HydratorMockStatement; use Doctrine\Tests\Models\CMS\CmsArticle; @@ -75,7 +76,7 @@ public function testSimpleEntityWithScalarQuery($userEntityKey) $rsm->addEntityResult(CmsUser::class, $alias); $rsm->addFieldResult($alias, 's__id', 'id'); $rsm->addFieldResult($alias, 's__name', 'name'); - $rsm->addScalarResult('sclr0', 'nameUpper', 'string'); + $rsm->addScalarResult('sclr0', 'nameUpper', Type::getType('string')); // Faked result set $resultSet = [ @@ -382,7 +383,7 @@ public function testMixedQueryNormalJoin($userEntityKey) $rsm->addEntityResult(CmsUser::class, 'u', $userEntityKey ?: null); $rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__status', 'status'); - $rsm->addScalarResult('sclr0', 'numPhones', 'integer'); + $rsm->addScalarResult('sclr0', 'numPhones', Type::getType('integer')); // Faked result set $resultSet = [ @@ -437,7 +438,7 @@ public function testMixedQueryFetchJoin($userEntityKey) ); $rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__status', 'status'); - $rsm->addScalarResult('sclr0', 'nameUpper', 'string'); + $rsm->addScalarResult('sclr0', 'nameUpper', Type::getType('string')); $rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber'); // Faked result set @@ -508,7 +509,7 @@ public function testMixedQueryFetchJoinCustomIndex($userEntityKey) ); $rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__status', 'status'); - $rsm->addScalarResult('sclr0', 'nameUpper', 'string'); + $rsm->addScalarResult('sclr0', 'nameUpper', Type::getType('string')); $rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber'); $rsm->addIndexBy('u', 'id'); $rsm->addIndexBy('p', 'phonenumber'); @@ -593,7 +594,7 @@ public function testMixedQueryMultipleFetchJoin() ); $rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__status', 'status'); - $rsm->addScalarResult('sclr0', 'nameUpper', 'string'); + $rsm->addScalarResult('sclr0', 'nameUpper', Type::getType('string')); $rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber'); $rsm->addFieldResult('a', 'a__id', 'id'); $rsm->addFieldResult('a', 'a__topic', 'topic'); @@ -718,7 +719,7 @@ public function testMixedQueryMultipleDeepMixedFetchJoin() ); $rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__status', 'status'); - $rsm->addScalarResult('sclr0', 'nameUpper', 'string'); + $rsm->addScalarResult('sclr0', 'nameUpper', Type::getType('string')); $rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber'); $rsm->addFieldResult('a', 'a__id', 'id'); $rsm->addFieldResult('a', 'a__topic', 'topic'); @@ -933,10 +934,10 @@ public function testChainedJoinWithScalars($entityKey) $rsm->addEntityResult(CmsUser::class, 'u', $entityKey ?: null); $rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__status', 'status'); - $rsm->addScalarResult('a__id', 'id', 'integer'); - $rsm->addScalarResult('a__topic', 'topic', 'string'); - $rsm->addScalarResult('c__id', 'cid', 'integer'); - $rsm->addScalarResult('c__topic', 'ctopic', 'string'); + $rsm->addScalarResult('a__id', 'id', Type::getType('integer')); + $rsm->addScalarResult('a__topic', 'topic', Type::getType('string')); + $rsm->addScalarResult('c__id', 'cid', Type::getType('integer')); + $rsm->addScalarResult('c__topic', 'ctopic', Type::getType('string')); // Faked result set $resultSet = [ @@ -1130,7 +1131,7 @@ public function testMissingIdForRootEntity($userEntityKey) $rsm->addEntityResult(CmsUser::class, 'u', $userEntityKey ?: null); $rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__status', 'status'); - $rsm->addScalarResult('sclr0', 'nameUpper', 'string'); + $rsm->addScalarResult('sclr0', 'nameUpper', Type::getType('string')); // Faked result set $resultSet = [ @@ -1189,7 +1190,7 @@ public function testIndexByAndMixedResult($userEntityKey) $rsm->addEntityResult(CmsUser::class, 'u', $userEntityKey ?: null); $rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__status', 'status'); - $rsm->addScalarResult('sclr0', 'nameUpper', 'string'); + $rsm->addScalarResult('sclr0', 'nameUpper', Type::getType('string')); $rsm->addIndexBy('u', 'id'); // Faked result set diff --git a/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php index c7d82a0dc7a..3cea72f3d8c 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Hydration; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\Proxy\ProxyFactory; @@ -384,7 +385,7 @@ public function testMixedQueryNormalJoin($userEntityKey) $rsm->addEntityResult(CmsUser::class, 'u', $userEntityKey ?: null); $rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__status', 'status'); - $rsm->addScalarResult('sclr0', 'numPhones', 'integer'); + $rsm->addScalarResult('sclr0', 'numPhones', Type::getType('integer')); // Faked result set $resultSet = [ @@ -440,7 +441,7 @@ public function testMixedQueryFetchJoin($userEntityKey) $rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__status', 'status'); $rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber'); - $rsm->addScalarResult('sclr0', 'nameUpper', 'string'); + $rsm->addScalarResult('sclr0', 'nameUpper', Type::getType('string')); // Faked result set $resultSet = [ @@ -517,7 +518,7 @@ public function testMixedQueryFetchJoinCustomIndex($userEntityKey) ); $rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__status', 'status'); - $rsm->addScalarResult('sclr0', 'nameUpper', 'string'); + $rsm->addScalarResult('sclr0', 'nameUpper', Type::getType('string')); $rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber'); $rsm->addIndexBy('u', 'id'); $rsm->addIndexBy('p', 'phonenumber'); @@ -602,7 +603,7 @@ public function testMixedQueryMultipleFetchJoin($userEntityKey) ); $rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__status', 'status'); - $rsm->addScalarResult('sclr0', 'nameUpper', 'string'); + $rsm->addScalarResult('sclr0', 'nameUpper', Type::getType('string')); $rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber'); $rsm->addFieldResult('a', 'a__id', 'id'); $rsm->addFieldResult('a', 'a__topic', 'topic'); @@ -718,7 +719,7 @@ public function testMixedQueryMultipleDeepMixedFetchJoin($userEntityKey) ); $rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__status', 'status'); - $rsm->addScalarResult('sclr0', 'nameUpper', 'string'); + $rsm->addScalarResult('sclr0', 'nameUpper', Type::getType('string')); $rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber'); $rsm->addFieldResult('a', 'a__id', 'id'); $rsm->addFieldResult('a', 'a__topic', 'topic'); @@ -964,8 +965,8 @@ public function testScalarQueryWithoutResultVariables($userEntityKey) { $rsm = new ResultSetMapping; $rsm->addEntityResult(CmsUser::class, 'u', $userEntityKey ?: null); - $rsm->addScalarResult('sclr0', 'id', 'integer'); - $rsm->addScalarResult('sclr1', 'name', 'string'); + $rsm->addScalarResult('sclr0', 'id', Type::getType('integer')); + $rsm->addScalarResult('sclr1', 'name', Type::getType('string')); // Faked result set $resultSet = [ @@ -1005,7 +1006,7 @@ public function testCreatesProxyForLazyLoadingWithForeignKeys() $rsm->addEntityResult(ECommerceProduct::class, 'p'); $rsm->addFieldResult('p', 'p__id', 'id'); $rsm->addFieldResult('p', 'p__name', 'name'); - $rsm->addMetaResult('p', 'p__shipping_id', 'shipping_id', false, 'integer'); + $rsm->addMetaResult('p', 'p__shipping_id', 'shipping_id', false, Type::getType('integer')); // Faked result set $resultSet = [ @@ -1054,7 +1055,7 @@ public function testCreatesProxyForLazyLoadingWithForeignKeysWithAliasedProductE $rsm->addEntityResult(ECommerceProduct::class, 'p', 'product'); $rsm->addFieldResult('p', 'p__id', 'id'); $rsm->addFieldResult('p', 'p__name', 'name'); - $rsm->addMetaResult('p', 'p__shipping_id', 'shipping_id', false, 'integer'); + $rsm->addMetaResult('p', 'p__shipping_id', 'shipping_id', false, Type::getType('integer')); // Faked result set $resultSet = [ @@ -1223,6 +1224,72 @@ public function testChainedJoinWithEmptyCollectionsWithAliasedUserEntity() $this->assertEquals(0, $result[1]['user']->articles->count()); } + /** + * SELECT PARTIAL u.{id,status}, a.id, a.topic, c.id as cid, c.topic as ctopic + * FROM CmsUser u + * LEFT JOIN u.articles a + * LEFT JOIN a.comments c + * + * @todo Figure it out why this test is commented out and provide a better description in docblock + * + * @group bubu + * @dataProvider provideDataForUserEntityResult + */ + /*public function testChainedJoinWithScalars($userEntityKey) + { + $rsm = new ResultSetMapping; + $rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u', $userEntityKey ?: null); + $rsm->addFieldResult('u', 'u__id', 'id'); + $rsm->addFieldResult('u', 'u__status', 'status'); + $rsm->addScalarResult('a__id', 'id', Type::getType('integer')); + $rsm->addScalarResult('a__topic', 'topic', Type::getType('string')); + $rsm->addScalarResult('c__id', 'cid', Type::getType('integer')); + $rsm->addScalarResult('c__topic', 'ctopic', Type::getType('string')); + + // Faked result set + $resultSet = array( + //row1 + array( + 'u__id' => '1', + 'u__status' => 'developer', + 'a__id' => '1', + 'a__topic' => 'The First', + 'c__id' => '1', + 'c__topic' => 'First Comment' + ), + array( + 'u__id' => '1', + 'u__status' => 'developer', + 'a__id' => '1', + 'a__topic' => 'The First', + 'c__id' => '2', + 'c__topic' => 'Second Comment' + ), + array( + 'u__id' => '1', + 'u__status' => 'developer', + 'a__id' => '42', + 'a__topic' => 'The Answer', + 'c__id' => null, + 'c__topic' => null + ), + ); + + $stmt = new HydratorMockStatement($resultSet); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $result = $hydrator->hydrateAll($stmt, $rsm, array(Query::HINT_FORCE_PARTIAL_LOAD => true)); + + \Doctrine\Common\Util\Debug::dump($result, 3); + + $this->assertEquals(1, count($result)); + + $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $result[0][$userEntityKey]); // User object + $this->assertEquals(42, $result[0]['id']); + $this->assertEquals('The First', $result[0]['topic']); + $this->assertEquals(1, $result[0]['cid']); + $this->assertEquals('First Comment', $result[0]['ctopic']); + }*/ + /** * SELECT PARTIAL u.{id, name} * FROM Doctrine\Tests\Models\CMS\CmsUser u @@ -1575,7 +1642,7 @@ public function testMissingIdForRootEntity($userEntityKey) $rsm->addEntityResult(CmsUser::class, 'u', $userEntityKey ?: null); $rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__status', 'status'); - $rsm->addScalarResult('sclr0', 'nameUpper', 'string'); + $rsm->addScalarResult('sclr0', 'nameUpper', Type::getType('string')); // Faked result set $resultSet = [ @@ -1640,7 +1707,7 @@ public function testMissingIdForCollectionValuedChildEntity($userEntityKey) ); $rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__status', 'status'); - $rsm->addScalarResult('sclr0', 'nameUpper', 'string'); + $rsm->addScalarResult('sclr0', 'nameUpper', Type::getType('string')); $rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber'); // Faked result set @@ -1702,10 +1769,10 @@ public function testMissingIdForSingleValuedChildEntity($userEntityKey) ); $rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__status', 'status'); - $rsm->addScalarResult('sclr0', 'nameUpper', 'string'); + $rsm->addScalarResult('sclr0', 'nameUpper', Type::getType('string')); $rsm->addFieldResult('a', 'a__id', 'id'); $rsm->addFieldResult('a', 'a__city', 'city'); - $rsm->addMetaResult('a', 'user_id', 'user_id', false, 'string'); + $rsm->addMetaResult('a', 'user_id', 'user_id', false, Type::getType('string')); // Faked result set $resultSet = [ @@ -1750,7 +1817,7 @@ public function testIndexByAndMixedResult($userEntityKey) $rsm->addEntityResult(CmsUser::class, 'u', $userEntityKey ?: null); $rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__status', 'status'); - $rsm->addScalarResult('sclr0', 'nameUpper', 'string'); + $rsm->addScalarResult('sclr0', 'nameUpper', Type::getType('string')); $rsm->addIndexBy('u', 'id'); // Faked result set @@ -1792,7 +1859,7 @@ public function testIndexByScalarsOnly($userEntityKey) { $rsm = new ResultSetMapping; $rsm->addEntityResult(CmsUser::class, 'u', $userEntityKey ?: null); - $rsm->addScalarResult('sclr0', 'nameUpper', 'string'); + $rsm->addScalarResult('sclr0', 'nameUpper', Type::getType('string')); $rsm->addIndexByScalar('sclr0'); // Faked result set @@ -1860,11 +1927,11 @@ public function testMissingDiscriminatorColumnException() $rsm->addEntityResult(CompanyFixContract::class, 'c'); $rsm->addJoinedEntityResult(CompanyEmployee::class, 'e', 'c', 'salesPerson'); $rsm->addFieldResult('c', 'c__id', 'id'); - $rsm->addMetaResult('c', 'c_discr', 'discr', false, 'string'); + $rsm->addMetaResult('c', 'c_discr', 'discr', false, Type::getType('string')); $rsm->setDiscriminatorColumn('c', 'c_discr'); $rsm->addFieldResult('e', 'e__id', 'id'); $rsm->addFieldResult('e', 'e__name', 'name'); - $rsm->addMetaResult('e ', 'e_discr', 'discr', false, 'string'); + $rsm->addMetaResult('e ', 'e_discr', 'discr', false, Type::getType('string')); $rsm->setDiscriminatorColumn('e', 'e_discr'); $resultSet = [ @@ -1894,7 +1961,7 @@ public function testInvalidDiscriminatorValueException() $rsm->addEntityResult(CompanyPerson::class, 'p'); $rsm->addFieldResult('p', 'p__id', 'id'); $rsm->addFieldResult('p', 'p__name', 'name'); - $rsm->addMetaResult('p', 'discr', 'discr', false, 'string'); + $rsm->addMetaResult('p', 'discr', 'discr', false, Type::getType('string')); $rsm->setDiscriminatorColumn('p', 'discr'); $resultSet = [ diff --git a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php index 30352b365a3..72d32823e8a 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Hydration; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\Tests\Models\CMS\CmsEmail; @@ -18,19 +19,21 @@ class ResultSetMappingTest extends \Doctrine\Tests\OrmTestCase { /** - * @var ResultSetMapping + * @var \Doctrine\ORM\EntityManager */ - private $_rsm; + private $_em; /** - * @var \Doctrine\ORM\EntityManager + * @var ResultSetMapping */ - private $_em; + private $_rsm; - protected function setUp() { + protected function setUp() + { parent::setUp(); + + $this->_em = $this->_getTestEntityManager(); $this->_rsm = new ResultSetMapping; - $this->_em = $this->_getTestEntityManager(); } /** @@ -84,8 +87,8 @@ public function testFluentInterface() $this->_rsm->addIndexByColumn('id', 'id'); $this->_rsm->addIndexBy('username', 'username'); $this->_rsm->addIndexByScalar('sclr0'); - $this->_rsm->addScalarResult('sclr0', 'numPhones'); - $this->_rsm->addMetaResult('a', 'user_id', 'user_id'); + $this->_rsm->addScalarResult('sclr0', 'numPhones', Type::getType('integer')); + $this->_rsm->addMetaResult('a', 'user_id', 'user_id', false, Type::getType('integer')); $this->assertTrue($rms->hasIndexBy('id')); $this->assertTrue($rms->isFieldResult('id')); @@ -276,8 +279,8 @@ public function testIndexByMetadataColumn() { $this->_rsm->addEntityResult(LegacyUser::class, 'u'); $this->_rsm->addJoinedEntityResult(LegacyUserReference::class, 'lu', 'u', '_references'); - $this->_rsm->addMetaResult('lu', '_source', '_source', true, 'integer'); - $this->_rsm->addMetaResult('lu', '_target', '_target', true, 'integer'); + $this->_rsm->addMetaResult('lu', '_source', '_source', true, Type::getType('integer')); + $this->_rsm->addMetaResult('lu', '_target', '_target', true, Type::getType('integer')); $this->_rsm->addIndexBy('lu', '_source'); $this->assertTrue($this->_rsm->hasIndexBy('lu')); diff --git a/tests/Doctrine/Tests/ORM/Hydration/ScalarHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/ScalarHydratorTest.php index 919486cc8ec..f716d766d04 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ScalarHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ScalarHydratorTest.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Hydration; use Doctrine\ORM\Internal\Hydration\ScalarHydrator; +use Doctrine\DBAL\Types\Type; use Doctrine\Tests\Mocks\HydratorMockStatement; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\Tests\Models\CMS\CmsUser; @@ -51,9 +52,9 @@ public function testNewHydrationSimpleEntityQuery() public function testHydrateScalarResults() { $rsm = new ResultSetMapping(); - $rsm->addScalarResult('foo1', 'foo', 'string'); - $rsm->addScalarResult('bar2', 'bar', 'string'); - $rsm->addScalarResult('baz3', 'baz', 'string'); + $rsm->addScalarResult('foo1', 'foo', Type::getType('string')); + $rsm->addScalarResult('bar2', 'bar', Type::getType('string')); + $rsm->addScalarResult('baz3', 'baz', Type::getType('string')); $resultSet = [ [ @@ -78,9 +79,9 @@ public function testSkipUnknownColumns() $rsm->addEntityResult(CmsUser::class, 'u'); $rsm->addFieldResult('u', 'u__id', 'id'); $rsm->addFieldResult('u', 'u__name', 'name'); - $rsm->addScalarResult('foo1', 'foo', 'string'); - $rsm->addScalarResult('bar2', 'bar', 'string'); - $rsm->addScalarResult('baz3', 'baz', 'string'); + $rsm->addScalarResult('foo1', 'foo', Type::getType('string')); + $rsm->addScalarResult('bar2', 'bar', Type::getType('string')); + $rsm->addScalarResult('baz3', 'baz', Type::getType('string')); $resultSet = [ [ diff --git a/tests/Doctrine/Tests/ORM/Hydration/SimpleObjectHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/SimpleObjectHydratorTest.php index ffcd81e3571..63373017e13 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/SimpleObjectHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/SimpleObjectHydratorTest.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\ORM\Hydration; +use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Internal\Hydration\SimpleObjectHydrator; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\Tests\Mocks\HydratorMockStatement; use Doctrine\Tests\Models\CMS\CmsAddress; @@ -21,11 +23,13 @@ class SimpleObjectHydratorTest extends HydrationTestCase public function testMissingDiscriminatorColumnException() { $rsm = new ResultSetMapping; + $rsm->addEntityResult(CompanyPerson::class, 'p'); $rsm->addFieldResult('p', 'p__id', 'id'); $rsm->addFieldResult('p', 'p__name', 'name'); - $rsm->addMetaResult('p ', 'discr', 'discr', false, 'string'); + $rsm->addMetaResult('p ', 'discr', 'discr', false, Type::getType('string')); $rsm->setDiscriminatorColumn('p', 'discr'); + $resultSet = [ [ 'u__id' => '1', @@ -33,14 +37,16 @@ public function testMissingDiscriminatorColumnException() ], ]; - $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\SimpleObjectHydrator($this->_em); + $stmt = new HydratorMockStatement($resultSet); + $hydrator = new SimpleObjectHydrator($this->_em); + $hydrator->hydrateAll($stmt, $rsm); } public function testExtraFieldInResultSetShouldBeIgnore() { $rsm = new ResultSetMapping; + $rsm->addEntityResult(CmsAddress::class, 'a'); $rsm->addFieldResult('a', 'a__id', 'id'); $rsm->addFieldResult('a', 'a__city', 'city'); @@ -53,12 +59,14 @@ public function testExtraFieldInResultSetShouldBeIgnore() ]; $expectedEntity = new \Doctrine\Tests\Models\CMS\CmsAddress(); + $expectedEntity->id = 1; $expectedEntity->city = 'Cracow'; - $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\SimpleObjectHydrator($this->_em); - $result = $hydrator->hydrateAll($stmt, $rsm); + $stmt = new HydratorMockStatement($resultSet); + $hydrator = new SimpleObjectHydrator($this->_em); + $result = $hydrator->hydrateAll($stmt, $rsm); + $this->assertEquals($result[0], $expectedEntity); } @@ -73,10 +81,9 @@ public function testInvalidDiscriminatorValueException() $rsm = new ResultSetMapping; $rsm->addEntityResult(CompanyPerson::class, 'p'); - $rsm->addFieldResult('p', 'p__id', 'id'); $rsm->addFieldResult('p', 'p__name', 'name'); - $rsm->addMetaResult('p', 'discr', 'discr', false, 'string'); + $rsm->addMetaResult('p', 'discr', 'discr', false, Type::getType('string')); $rsm->setDiscriminatorColumn('p', 'discr'); $resultSet = [ @@ -87,8 +94,9 @@ public function testInvalidDiscriminatorValueException() ], ]; - $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\SimpleObjectHydrator($this->_em); + $stmt = new HydratorMockStatement($resultSet); + $hydrator = new SimpleObjectHydrator($this->_em); + $hydrator->hydrateAll($stmt, $rsm); } @@ -102,7 +110,7 @@ public function testNullValueShouldNotOverwriteFieldWithSameNameInJoinedInherita $rsm->addFieldResult('p', 'p__id', 'id'); $rsm->addFieldResult('p', 'm__tags', 'tags', Issue5989Manager::class); $rsm->addFieldResult('p', 'e__tags', 'tags', Issue5989Employee::class); - $rsm->addMetaResult('p', 'discr', 'discr', false, 'string'); + $rsm->addMetaResult('p', 'discr', 'discr', false, Type::getType('string')); $resultSet = [ [ 'p__id' => '1', diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index fba0acfd3fa..d8b51d7731f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -3,14 +3,12 @@ namespace Doctrine\Tests\ORM\Mapping; use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\EntityManager; use Doctrine\ORM\Events; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; -use Doctrine\ORM\Mapping\ClassMetadataInfo; use Doctrine\ORM\Mapping\DefaultNamingStrategy; -use Doctrine\ORM\Mapping\DiscriminatorColumn; -use Doctrine\ORM\Mapping\Id; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Mapping\UnderscoreNamingStrategy; use Doctrine\Tests\Models\Cache\City; @@ -217,7 +215,7 @@ public function testFieldMappingsColumnNames($class) */ public function testStringFieldMappings($class) { - $this->assertEquals('string', $class->fieldMappings['name']['type']); + $this->assertEquals('string', $class->fieldMappings['name']['type']->getName()); $this->assertEquals(50, $class->fieldMappings['name']['length']); $this->assertTrue($class->fieldMappings['name']['nullable']); $this->assertTrue($class->fieldMappings['name']['unique']); @@ -258,7 +256,7 @@ public function testIdFieldOptions($class) public function testIdentifier($class) { $this->assertEquals(['id'], $class->identifier); - $this->assertEquals('integer', $class->fieldMappings['id']['type']); + $this->assertEquals('integer', $class->fieldMappings['id']['type']->getName()); $this->assertEquals(ClassMetadata::GENERATOR_TYPE_AUTO, $class->generatorType, "ID-Generator is not ClassMetadata::GENERATOR_TYPE_AUTO"); return $class; @@ -426,7 +424,13 @@ public function testDiscriminatorColumnDefaults() $class = $this->createClassMetadata(Animal::class); $this->assertEquals( - ['name' => 'discr', 'type' => 'string', 'length' => '32', 'fieldName' => 'discr', 'columnDefinition' => null], + [ + 'name' => 'discr', + 'type' => Type::getType('string'), + 'length' => '32', + 'fieldName' => 'discr', + 'columnDefinition' => null + ], $class->discriminatorColumn ); } @@ -477,8 +481,8 @@ public function testDefaultFieldType() $this->assertArrayHasKey('type', $class->fieldMappings['id']); $this->assertArrayHasKey('type', $class->fieldMappings['name']); - $this->assertEquals('string', $class->fieldMappings['id']['type']); - $this->assertEquals('string', $class->fieldMappings['name']['type']); + $this->assertEquals('string', $class->fieldMappings['id']['type']->getName()); + $this->assertEquals('string', $class->fieldMappings['name']['type']->getName()); @@ -1057,9 +1061,9 @@ public function testDiscriminatorColumnDefaultType() $this->markTestSkipped('PHP Mapping Drivers have no defaults.'); } $class = $this->createClassMetadata(SingleTableEntityNoDiscriminatorColumnMapping::class); - $this->assertEquals('string', $class->discriminatorColumn['type']); + $this->assertEquals('string', $class->discriminatorColumn['type']->getName()); $class = $this->createClassMetadata(SingleTableEntityIncompleteDiscriminatorColumnMapping::class); - $this->assertEquals('string', $class->discriminatorColumn['type']); + $this->assertEquals('string', $class->discriminatorColumn['type']->getName()); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php index 6a809a14e0a..80ca49dd95a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php @@ -5,7 +5,7 @@ use Doctrine\Common\Annotations\AnnotationException; use Doctrine\Common\Annotations\AnnotationReader; use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; -use Doctrine\ORM\Mapping; +use Doctrine\ORM\Annotation; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; @@ -29,7 +29,7 @@ public function testLoadMetadataForNonEntityThrowsException() $reader = new AnnotationReader(); $annotationDriver = new AnnotationDriver($reader); - $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); + $this->expectException(MappingException::class); $annotationDriver->loadMetadataForClass('stdClass', $cm); } @@ -54,8 +54,8 @@ public function testColumnWithMissingTypeDefaultsToString() $cm->initializeReflection(new RuntimeReflectionService()); $annotationDriver = $this->_loadDriver(); - $annotationDriver->loadMetadataForClass(Mapping\InvalidColumn::class, $cm); - $this->assertEquals('string', $cm->fieldMappings['id']['type']); + $annotationDriver->loadMetadataForClass(Annotation\InvalidColumn::class, $cm); + $this->assertEquals('string', $cm->fieldMappings['id']['type']->getName()); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php index 657ad65b474..54d257cad75 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Mapping; use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\Builder\EmbeddedBuilder; use Doctrine\ORM\Mapping\Builder\FieldBuilder; @@ -182,7 +183,15 @@ public function testSetInheritanceSingleTable() public function testSetDiscriminatorColumn() { $this->assertIsFluent($this->builder->setDiscriminatorColumn('discr', 'string', '124')); - $this->assertEquals(['fieldName' => 'discr', 'name' => 'discr', 'type' => 'string', 'length' => '124'], $this->cm->discriminatorColumn); + $this->assertEquals( + [ + 'fieldName' => 'discr', + 'name' => 'discr', + 'type' => Type::getType('string'), + 'length' => '124', + ], + $this->cm->discriminatorColumn + ); } public function testAddDiscriminatorMapClass() @@ -210,7 +219,14 @@ public function testChangeTrackingPolicyNotify() public function testAddField() { $this->assertIsFluent($this->builder->addField('name', 'string')); - $this->assertEquals(['columnName' => 'name', 'fieldName' => 'name', 'type' => 'string'], $this->cm->fieldMappings['name']); + $this->assertEquals( + [ + 'columnName' => 'name', + 'fieldName' => 'name', + 'type' => Type::getType('string') + ], + $this->cm->fieldMappings['name'] + ); } public function testCreateField() @@ -220,23 +236,40 @@ public function testCreateField() $this->assertFalse(isset($this->cm->fieldMappings['name'])); $this->assertIsFluent($fieldBuilder->build()); - $this->assertEquals(['columnName' => 'name', 'fieldName' => 'name', 'type' => 'string'], $this->cm->fieldMappings['name']); + $this->assertEquals( + [ + 'columnName' => 'name', + 'fieldName' => 'name', + 'type' => Type::getType('string'), + ], + $this->cm->fieldMappings['name'] + ); } public function testCreateVersionedField() { - $this->builder->createField('name', 'integer')->columnName('username')->length(124)->nullable()->columnDefinition('foobar')->unique()->isVersionField()->build(); + $this->builder->createField('name', 'integer') + ->columnName('username') + ->length(124) + ->nullable() + ->columnDefinition('foobar') + ->unique() + ->isVersionField() + ->build(); + $this->assertEquals( [ - 'columnDefinition' => 'foobar', - 'columnName' => 'username', - 'default' => 1, - 'fieldName' => 'name', - 'length' => 124, - 'type' => 'integer', - 'nullable' => true, - 'unique' => true, - ], $this->cm->fieldMappings['name']); + 'columnDefinition' => 'foobar', + 'columnName' => 'username', + 'default' => 1, + 'fieldName' => 'name', + 'length' => 124, + 'type' => Type::getType('integer'), + 'nullable' => true, + 'unique' => true, + ], + $this->cm->fieldMappings['name'] + ); } public function testCreatePrimaryField() @@ -244,7 +277,15 @@ public function testCreatePrimaryField() $this->builder->createField('id', 'integer')->makePrimaryKey()->generatedValue()->build(); $this->assertEquals(['id'], $this->cm->identifier); - $this->assertEquals(['columnName' => 'id', 'fieldName' => 'id', 'id' => true, 'type' => 'integer'], $this->cm->fieldMappings['id']); + $this->assertEquals( + [ + 'columnName' => 'id', + 'fieldName' => 'id', + 'id' => true, + 'type' => Type::getType('integer'), + ], + $this->cm->fieldMappings['id'] + ); } public function testCreateUnsignedOptionField() @@ -252,7 +293,14 @@ public function testCreateUnsignedOptionField() $this->builder->createField('state', 'integer')->option('unsigned', true)->build(); $this->assertEquals( - ['fieldName' => 'state', 'type' => 'integer', 'options' => ['unsigned' => true], 'columnName' => 'state'], $this->cm->fieldMappings['state']); + [ + 'fieldName' => 'state', + 'type' => Type::getType('integer'), + 'options' => ['unsigned' => true], + 'columnName' => 'state' + ], + $this->cm->fieldMappings['state'] + ); } public function testAddLifecycleEvent() diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index d1cf1b48f88..b76e34162db 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -292,13 +292,11 @@ public function testQuoteMetadata() $em = $this->_createEntityManager($driver); $cmf->setEntityManager($em); - $userMetadata = $cmf->getMetadataFor(Quote\User::class); $phoneMetadata = $cmf->getMetadataFor(Quote\Phone::class); $groupMetadata = $cmf->getMetadataFor(Quote\Group::class); $addressMetadata = $cmf->getMetadataFor(Quote\Address::class); - // Phone Class Metadata $this->assertTrue($phoneMetadata->fieldMappings['number']['quoted']); $this->assertEquals('phone-number', $phoneMetadata->fieldMappings['number']['columnName']); @@ -308,8 +306,6 @@ public function testQuoteMetadata() $this->assertEquals('user-id', $user['joinColumns'][0]['name']); $this->assertEquals('user-id', $user['joinColumns'][0]['referencedColumnName']); - - // User Group Metadata $this->assertTrue($groupMetadata->fieldMappings['id']['quoted']); $this->assertTrue($groupMetadata->fieldMappings['name']['quoted']); @@ -322,7 +318,6 @@ public function testQuoteMetadata() $this->assertEquals('parent-id', $user['joinColumns'][0]['name']); $this->assertEquals('group-id', $user['joinColumns'][0]['referencedColumnName']); - // Address Class Metadata $this->assertTrue($addressMetadata->fieldMappings['id']['quoted']); $this->assertTrue($addressMetadata->fieldMappings['zip']['quoted']); @@ -331,12 +326,11 @@ public function testQuoteMetadata() $this->assertEquals('address-zip', $addressMetadata->fieldMappings['zip']['columnName']); $user = $addressMetadata->associationMappings['user']; + $this->assertTrue($user['joinColumns'][0]['quoted']); $this->assertEquals('user-id', $user['joinColumns'][0]['name']); $this->assertEquals('user-id', $user['joinColumns'][0]['referencedColumnName']); - - // User Class Metadata $this->assertTrue($userMetadata->fieldMappings['id']['quoted']); $this->assertTrue($userMetadata->fieldMappings['name']['quoted']); @@ -344,13 +338,14 @@ public function testQuoteMetadata() $this->assertEquals('user-id', $userMetadata->fieldMappings['id']['columnName']); $this->assertEquals('user-name', $userMetadata->fieldMappings['name']['columnName']); - $address = $userMetadata->associationMappings['address']; + $this->assertTrue($address['joinColumns'][0]['quoted']); $this->assertEquals('address-id', $address['joinColumns'][0]['name']); $this->assertEquals('address-id', $address['joinColumns'][0]['referencedColumnName']); $groups = $userMetadata->associationMappings['groups']; + $this->assertTrue($groups['joinTable']['quoted']); $this->assertTrue($groups['joinTable']['joinColumns'][0]['quoted']); $this->assertEquals('quote-users-groups', $groups['joinTable']['name']); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 308eb1a4f82..567b302e5da 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -4,6 +4,7 @@ use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\Common\Persistence\Mapping\StaticReflectionService; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Events; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DefaultNamingStrategy; @@ -62,7 +63,7 @@ public function testClassMetadataInstanceSerialization() $this->assertEquals([CMS\One::class, CMS\Two::class, CMS\Three::class], $cm->subClasses); $this->assertEquals(['UserParent'], $cm->parentClasses); $this->assertEquals(CMS\UserRepository::class, $cm->customRepositoryClassName); - $this->assertEquals(['name' => 'disc', 'type' => 'integer', 'fieldName' => 'disc'], $cm->discriminatorColumn); + $this->assertEquals(['name' => 'disc', 'type' => Type::getType('integer'), 'fieldName' => 'disc'], $cm->discriminatorColumn); $this->assertTrue($cm->associationMappings['phonenumbers']['type'] == ClassMetadata::ONE_TO_ONE); $this->assertEquals(1, count($cm->associationMappings)); $oneOneMapping = $cm->getAssociationMapping('phonenumbers'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3711.DDC3711EntityA.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3711.DDC3711EntityA.dcm.yml index c8a87331dcb..45da9ba84b7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3711.DDC3711EntityA.dcm.yml +++ b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3711.DDC3711EntityA.dcm.yml @@ -3,9 +3,9 @@ Doctrine\Tests\Models\DDC3711\DDC3711EntityA: table: ddc3711.entityA id: id1: - type: int + type: integer id2: - type: int + type: integer manyToMany: entityB: targetEntity: Doctrine\Tests\Models\DDC3711\DDC3711EntityB diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3711.DDC3711EntityB.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3711.DDC3711EntityB.dcm.yml index 24ec96932c6..0b412ae5422 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3711.DDC3711EntityB.dcm.yml +++ b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3711.DDC3711EntityB.dcm.yml @@ -3,6 +3,6 @@ Doctrine\Tests\Models\DDC3711\DDC3711EntityB: table: ddc3711.entityB id: id1: - type: int + type: integer id2: - type: int + type: integer diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php index 1694d97ce8f..d070fee0c27 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Persisters; use Doctrine\Common\Collections\Criteria; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Persisters\Entity\BasicEntityPersister; use Doctrine\Tests\Models\GeoNames\Admin1; use Doctrine\Tests\Models\GeoNames\Admin1AlternateName; @@ -45,7 +46,7 @@ public function testExpandParametersWillExpandCompositeEntityKeys() list ($values, $types) = $this->_persister->expandParameters(['admin1' => $admin1]); - $this->assertEquals(['integer', 'string'], $types); + $this->assertEquals([Type::getType('integer'), Type::getType('string')], $types); $this->assertEquals([10, 'IT'], $values); } @@ -59,7 +60,7 @@ public function testExpandCriteriaParametersWillExpandCompositeEntityKeys() list ($values, $types) = $this->_persister->expandCriteriaParameters($criteria); - $this->assertEquals(['integer', 'string'], $types); + $this->assertEquals([Type::getType('integer'), Type::getType('string')], $types); $this->assertEquals([10, 'IT'], $values); } } diff --git a/tests/Doctrine/Tests/ORM/Tools/ConvertDoctrine1SchemaTest.php b/tests/Doctrine/Tests/ORM/Tools/ConvertDoctrine1SchemaTest.php index ca6192faa29..a7941c8a722 100644 --- a/tests/Doctrine/Tests/ORM/Tools/ConvertDoctrine1SchemaTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/ConvertDoctrine1SchemaTest.php @@ -69,7 +69,7 @@ public function testTest() $this->assertEquals('User', $userClass->name); $this->assertEquals(4, count($profileClass->fieldMappings)); $this->assertEquals(5, count($userClass->fieldMappings)); - $this->assertEquals('text', $userClass->fieldMappings['clob']['type']); + $this->assertEquals('text', $userClass->fieldMappings['clob']['type']->getName()); $this->assertEquals('test_alias', $userClass->fieldMappings['theAlias']['columnName']); $this->assertEquals('theAlias', $userClass->fieldMappings['theAlias']['fieldName']); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index f337c43447b..b316ee6a295 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -182,16 +182,16 @@ public function testFieldsAreExported($class) { $this->assertTrue(isset($class->fieldMappings['id']['id']) && $class->fieldMappings['id']['id'] === true); $this->assertEquals('id', $class->fieldMappings['id']['fieldName']); - $this->assertEquals('integer', $class->fieldMappings['id']['type']); + $this->assertEquals('integer', $class->fieldMappings['id']['type']->getName()); $this->assertEquals('id', $class->fieldMappings['id']['columnName']); $this->assertEquals('name', $class->fieldMappings['name']['fieldName']); - $this->assertEquals('string', $class->fieldMappings['name']['type']); + $this->assertEquals('string', $class->fieldMappings['name']['type']->getName()); $this->assertEquals(50, $class->fieldMappings['name']['length']); $this->assertEquals('name', $class->fieldMappings['name']['columnName']); $this->assertEquals('email', $class->fieldMappings['email']['fieldName']); - $this->assertEquals('string', $class->fieldMappings['email']['type']); + $this->assertEquals('string', $class->fieldMappings['email']['type']->getName()); $this->assertEquals('user_email', $class->fieldMappings['email']['columnName']); $this->assertEquals('CHAR(32) NOT NULL', $class->fieldMappings['email']['columnDefinition']); From d321b45a613b0391a17f801552712ae5f61f01fe Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 7 May 2016 18:57:35 +0000 Subject: [PATCH 010/275] $this->assertXXX changes to self::assertXXX as PHPUnit test methods are all static --- .../ORM/Mapping/ClassMetadataFactory.php | 1 - .../Tests/ORM/Cache/AbstractRegionTest.php | 20 +- .../Tests/ORM/Cache/CacheConfigTest.php | 16 +- .../Doctrine/Tests/ORM/Cache/CacheKeyTest.php | 14 +- .../Tests/ORM/Cache/CacheLoggerChainTest.php | 8 +- .../ORM/Cache/DefaultCacheFactoryTest.php | 50 +- .../Tests/ORM/Cache/DefaultCacheTest.php | 64 +- .../Cache/DefaultCollectionHydratorTest.php | 32 +- .../ORM/Cache/DefaultEntityHydratorTest.php | 106 +-- .../Tests/ORM/Cache/DefaultQueryCacheTest.php | 160 ++-- .../Tests/ORM/Cache/DefaultRegionTest.php | 30 +- .../Tests/ORM/Cache/FileLockRegionTest.php | 162 ++-- .../Tests/ORM/Cache/MultiGetRegionTest.php | 12 +- .../AbstractCollectionPersisterTest.php | 22 +- ...ReadWriteCachedCollectionPersisterTest.php | 20 +- .../Entity/AbstractEntityPersisterTest.php | 54 +- ...rictReadWriteCachedEntityPersisterTest.php | 16 +- .../ReadWriteCachedEntityPersisterTest.php | 12 +- .../ORM/Cache/StatisticsCacheLoggerTest.php | 78 +- .../Tests/ORM/CommitOrderCalculatorTest.php | 4 +- .../Doctrine/Tests/ORM/ConfigurationTest.php | 122 +-- .../Tests/ORM/Entity/ConstructorTest.php | 2 +- .../Doctrine/Tests/ORM/EntityManagerTest.php | 50 +- .../Tests/ORM/EntityNotFoundExceptionTest.php | 8 +- .../OnClassMetadataNotFoundEventArgsTest.php | 10 +- .../AbstractManyToManyAssociationTestCase.php | 4 +- .../Functional/AdvancedAssociationTest.php | 30 +- .../ORM/Functional/AdvancedDqlQueryTest.php | 58 +- .../ORM/Functional/BasicFunctionalTest.php | 276 +++---- .../Functional/ClassTableInheritanceTest.php | 155 ++-- .../Functional/ClassTableInheritanceTest2.php | 18 +- .../Tests/ORM/Functional/ClearEventTest.php | 2 +- .../Functional/CompositePrimaryKeyTest.php | 26 +- ...ompositePrimaryKeyWithAssociationsTest.php | 10 +- .../ORM/Functional/CustomFunctionsTest.php | 4 +- .../ORM/Functional/CustomIdObjectTypeTest.php | 10 +- .../ORM/Functional/DatabaseDriverTest.php | 94 +-- .../ORM/Functional/DefaultValuesTest.php | 14 +- .../ORM/Functional/DetachedEntityTest.php | 62 +- .../ORM/Functional/EntityListenersTest.php | 64 +- .../EntityRepositoryCriteriaTest.php | 30 +- .../ORM/Functional/EntityRepositoryTest.php | 200 ++--- .../Functional/ExtraLazyCollectionTest.php | 348 ++++----- .../Tests/ORM/Functional/FlushEventTest.php | 18 +- .../ORM/Functional/HydrationCacheTest.php | 12 +- .../Tests/ORM/Functional/IdentityMapTest.php | 56 +- .../ORM/Functional/IndexByAssociationTest.php | 46 +- .../JoinedTableCompositeKeyTest.php | 4 +- .../ORM/Functional/LifecycleCallbackTest.php | 86 +- .../Functional/Locking/GearmanLockTest.php | 26 +- .../Tests/ORM/Functional/Locking/LockTest.php | 12 +- .../ORM/Functional/Locking/OptimisticTest.php | 34 +- .../ManyToManyBasicAssociationTest.php | 128 +-- ...ManyToManyBidirectionalAssociationTest.php | 110 +-- .../ORM/Functional/ManyToManyEventTest.php | 4 +- ...nyToManySelfReferentialAssociationTest.php | 30 +- ...anyToManyUnidirectionalAssociationTest.php | 24 +- .../ORM/Functional/MappedSuperclassTest.php | 10 +- .../Functional/MergeCompositeToOneKeyTest.php | 8 +- .../Tests/ORM/Functional/MergeProxiesTest.php | 56 +- .../Functional/MergeSharedEntitiesTest.php | 10 +- .../MergeVersionedManyToOneTest.php | 2 +- .../Tests/ORM/Functional/NativeQueryTest.php | 290 +++---- .../Tests/ORM/Functional/NewOperatorTest.php | 620 +++++++-------- .../Tests/ORM/Functional/NotifyPolicyTest.php | 28 +- .../OneToManyBidirectionalAssociationTest.php | 90 +-- .../Functional/OneToManyOrphanRemovalTest.php | 12 +- ...neToManySelfReferentialAssociationTest.php | 43 +- ...OneToManyUnidirectionalAssociationTest.php | 8 +- .../OneToOneBidirectionalAssociationTest.php | 37 +- .../Functional/OneToOneEagerLoadingTest.php | 44 +- .../Functional/OneToOneOrphanRemovalTest.php | 6 +- ...OneToOneSelfReferentialAssociationTest.php | 31 +- .../OneToOneSingleTableInheritanceTest.php | 8 +- .../OneToOneUnidirectionalAssociationTest.php | 18 +- .../ORM/Functional/OrderedCollectionTest.php | 18 +- ...edJoinedTableInheritanceCollectionTest.php | 10 +- .../Tests/ORM/Functional/PaginationTest.php | 70 +- .../PersistentCollectionCriteriaTest.php | 16 +- .../Functional/PersistentCollectionTest.php | 18 +- .../ORM/Functional/PersistentObjectTest.php | 6 +- .../ORM/Functional/PostFlushEventTest.php | 8 +- .../ORM/Functional/PostLoadEventTest.php | 8 +- .../Functional/ProxiesLikeEntitiesTest.php | 23 +- .../Tests/ORM/Functional/QueryCacheTest.php | 10 +- .../ORM/Functional/QueryDqlFunctionTest.php | 244 +++--- .../Tests/ORM/Functional/QueryTest.php | 154 ++-- .../Tests/ORM/Functional/ReadOnlyTest.php | 8 +- .../ORM/Functional/ReferenceProxyTest.php | 68 +- .../Tests/ORM/Functional/ResultCacheTest.php | 46 +- .../Tests/ORM/Functional/SQLFilterTest.php | 282 +++---- .../SchemaTool/CompanySchemaTest.php | 20 +- .../ORM/Functional/SchemaTool/DBAL483Test.php | 2 +- .../ORM/Functional/SchemaTool/DDC214Test.php | 6 +- .../SchemaTool/MySqlSchemaToolTest.php | 44 +- .../SchemaTool/PostgreSqlSchemaToolTest.php | 70 +- .../ORM/Functional/SchemaValidatorTest.php | 2 +- ...econdLevelCacheCompositePrimaryKeyTest.php | 88 +-- ...ompositePrimaryKeyWithAssociationsTest.php | 12 +- .../SecondLevelCacheConcurrentTest.php | 44 +- .../SecondLevelCacheCriteriaTest.php | 72 +- ...econdLevelCacheExtraLazyCollectionTest.php | 22 +- ...condLevelCacheJoinTableInheritanceTest.php | 106 +-- .../SecondLevelCacheManyToManyTest.php | 164 ++-- .../SecondLevelCacheManyToOneTest.php | 178 ++--- .../SecondLevelCacheOneToManyTest.php | 264 +++---- .../SecondLevelCacheOneToOneTest.php | 222 +++--- .../SecondLevelCacheQueryCacheTest.php | 736 +++++++++--------- .../SecondLevelCacheRepositoryTest.php | 161 ++-- ...ndLevelCacheSingleTableInheritanceTest.php | 118 +-- .../ORM/Functional/SecondLevelCacheTest.php | 192 ++--- .../SequenceEmulatedIdentityStrategyTest.php | 6 +- .../SingleTableCompositeKeyTest.php | 4 +- .../Functional/SingleTableInheritanceTest.php | 94 +-- .../StandardEntityPersisterTest.php | 16 +- .../ORM/Functional/Ticket/DDC1040Test.php | 4 +- .../ORM/Functional/Ticket/DDC1041Test.php | 6 +- .../ORM/Functional/Ticket/DDC1043Test.php | 2 +- .../ORM/Functional/Ticket/DDC1080Test.php | 2 +- .../ORM/Functional/Ticket/DDC1129Test.php | 8 +- .../ORM/Functional/Ticket/DDC1151Test.php | 18 +- .../ORM/Functional/Ticket/DDC1163Test.php | 8 +- .../ORM/Functional/Ticket/DDC117Test.php | 118 +-- .../ORM/Functional/Ticket/DDC1193Test.php | 8 +- .../ORM/Functional/Ticket/DDC1225Test.php | 2 +- .../ORM/Functional/Ticket/DDC1228Test.php | 12 +- .../ORM/Functional/Ticket/DDC1238Test.php | 4 +- .../ORM/Functional/Ticket/DDC1250Test.php | 2 +- .../ORM/Functional/Ticket/DDC1276Test.php | 6 +- .../ORM/Functional/Ticket/DDC1300Test.php | 2 +- .../ORM/Functional/Ticket/DDC1301Test.php | 24 +- .../ORM/Functional/Ticket/DDC1335Test.php | 94 +-- .../ORM/Functional/Ticket/DDC1360Test.php | 12 +- .../ORM/Functional/Ticket/DDC1392Test.php | 4 +- .../ORM/Functional/Ticket/DDC1404Test.php | 12 +- .../ORM/Functional/Ticket/DDC142Test.php | 19 +- .../ORM/Functional/Ticket/DDC1430Test.php | 58 +- .../ORM/Functional/Ticket/DDC1436Test.php | 8 +- .../ORM/Functional/Ticket/DDC1452Test.php | 10 +- .../ORM/Functional/Ticket/DDC1458Test.php | 8 +- .../ORM/Functional/Ticket/DDC1461Test.php | 6 +- .../ORM/Functional/Ticket/DDC1509Test.php | 4 +- .../ORM/Functional/Ticket/DDC1514Test.php | 8 +- .../ORM/Functional/Ticket/DDC1515Test.php | 2 +- .../ORM/Functional/Ticket/DDC1526Test.php | 2 +- .../ORM/Functional/Ticket/DDC1545Test.php | 20 +- .../ORM/Functional/Ticket/DDC1548Test.php | 2 +- .../ORM/Functional/Ticket/DDC1594Test.php | 6 +- .../ORM/Functional/Ticket/DDC1595Test.php | 6 +- .../ORM/Functional/Ticket/DDC163Test.php | 6 +- .../ORM/Functional/Ticket/DDC1643Test.php | 16 +- .../ORM/Functional/Ticket/DDC1654Test.php | 10 +- .../ORM/Functional/Ticket/DDC1655Test.php | 22 +- .../ORM/Functional/Ticket/DDC1666Test.php | 4 +- .../ORM/Functional/Ticket/DDC1685Test.php | 8 +- .../ORM/Functional/Ticket/DDC168Test.php | 10 +- .../ORM/Functional/Ticket/DDC1690Test.php | 24 +- .../ORM/Functional/Ticket/DDC1695Test.php | 2 +- .../ORM/Functional/Ticket/DDC1707Test.php | 2 +- .../ORM/Functional/Ticket/DDC1719Test.php | 32 +- .../ORM/Functional/Ticket/DDC1734Test.php | 12 +- .../ORM/Functional/Ticket/DDC1778Test.php | 6 +- .../ORM/Functional/Ticket/DDC1787Test.php | 2 +- .../ORM/Functional/Ticket/DDC1843Test.php | 72 +- .../ORM/Functional/Ticket/DDC1884Test.php | 18 +- .../ORM/Functional/Ticket/DDC1885Test.php | 76 +- .../ORM/Functional/Ticket/DDC1918Test.php | 6 +- .../ORM/Functional/Ticket/DDC1995Test.php | 14 +- .../ORM/Functional/Ticket/DDC1998Test.php | 6 +- .../ORM/Functional/Ticket/DDC199Test.php | 12 +- .../ORM/Functional/Ticket/DDC2012Test.php | 26 +- .../ORM/Functional/Ticket/DDC2074Test.php | 8 +- .../ORM/Functional/Ticket/DDC2084Test.php | 6 +- .../ORM/Functional/Ticket/DDC2090Test.php | 16 +- .../ORM/Functional/Ticket/DDC211Test.php | 2 +- .../ORM/Functional/Ticket/DDC2138Test.php | 14 +- .../ORM/Functional/Ticket/DDC2175Test.php | 6 +- .../ORM/Functional/Ticket/DDC2182Test.php | 6 +- .../ORM/Functional/Ticket/DDC2214Test.php | 2 +- .../ORM/Functional/Ticket/DDC2224Test.php | 4 +- .../ORM/Functional/Ticket/DDC2230Test.php | 10 +- .../ORM/Functional/Ticket/DDC2231Test.php | 8 +- .../ORM/Functional/Ticket/DDC2252Test.php | 16 +- .../ORM/Functional/Ticket/DDC2306Test.php | 8 +- .../ORM/Functional/Ticket/DDC2346Test.php | 4 +- .../ORM/Functional/Ticket/DDC2350Test.php | 6 +- .../ORM/Functional/Ticket/DDC2359Test.php | 2 +- .../ORM/Functional/Ticket/DDC237Test.php | 20 +- .../ORM/Functional/Ticket/DDC2387Test.php | 4 +- .../ORM/Functional/Ticket/DDC2409Test.php | 24 +- .../ORM/Functional/Ticket/DDC2415Test.php | 10 +- .../ORM/Functional/Ticket/DDC2494Test.php | 32 +- .../ORM/Functional/Ticket/DDC2519Test.php | 46 +- .../ORM/Functional/Ticket/DDC2575Test.php | 26 +- .../ORM/Functional/Ticket/DDC2579Test.php | 8 +- .../ORM/Functional/Ticket/DDC258Test.php | 24 +- .../ORM/Functional/Ticket/DDC2645Test.php | 4 +- .../ORM/Functional/Ticket/DDC2655Test.php | 2 +- .../ORM/Functional/Ticket/DDC2660Test.php | 12 +- .../ORM/Functional/Ticket/DDC2759Test.php | 2 +- .../ORM/Functional/Ticket/DDC2790Test.php | 2 +- .../ORM/Functional/Ticket/DDC279Test.php | 6 +- .../ORM/Functional/Ticket/DDC2825Test.php | 10 +- .../ORM/Functional/Ticket/DDC2862Test.php | 58 +- .../ORM/Functional/Ticket/DDC2895Test.php | 4 +- .../ORM/Functional/Ticket/DDC2931Test.php | 10 +- .../ORM/Functional/Ticket/DDC2943Test.php | 32 +- .../ORM/Functional/Ticket/DDC2984Test.php | 6 +- .../ORM/Functional/Ticket/DDC2996Test.php | 4 +- .../ORM/Functional/Ticket/DDC3033Test.php | 2 +- .../ORM/Functional/Ticket/DDC3042Test.php | 2 +- .../ORM/Functional/Ticket/DDC3068Test.php | 6 +- .../ORM/Functional/Ticket/DDC309Test.php | 8 +- .../ORM/Functional/Ticket/DDC3103Test.php | 4 +- .../ORM/Functional/Ticket/DDC3160Test.php | 6 +- .../ORM/Functional/Ticket/DDC3192Test.php | 4 +- .../ORM/Functional/Ticket/DDC3223Test.php | 2 +- .../ORM/Functional/Ticket/DDC3300Test.php | 4 +- .../ORM/Functional/Ticket/DDC331Test.php | 2 +- .../ORM/Functional/Ticket/DDC3330Test.php | 2 +- .../ORM/Functional/Ticket/DDC3346Test.php | 10 +- .../ORM/Functional/Ticket/DDC345Test.php | 6 +- .../ORM/Functional/Ticket/DDC353Test.php | 10 +- .../ORM/Functional/Ticket/DDC3582Test.php | 6 +- .../ORM/Functional/Ticket/DDC3597Test.php | 4 +- .../ORM/Functional/Ticket/DDC3634Test.php | 6 +- .../ORM/Functional/Ticket/DDC3644Test.php | 8 +- .../ORM/Functional/Ticket/DDC3699Test.php | 8 +- .../ORM/Functional/Ticket/DDC3711Test.php | 8 +- .../ORM/Functional/Ticket/DDC371Test.php | 8 +- .../ORM/Functional/Ticket/DDC381Test.php | 2 +- .../ORM/Functional/Ticket/DDC3967Test.php | 2 +- .../ORM/Functional/Ticket/DDC4003Test.php | 2 +- .../ORM/Functional/Ticket/DDC422Test.php | 10 +- .../ORM/Functional/Ticket/DDC425Test.php | 2 +- .../ORM/Functional/Ticket/DDC440Test.php | 8 +- .../ORM/Functional/Ticket/DDC444Test.php | 6 +- .../ORM/Functional/Ticket/DDC448Test.php | 2 +- .../ORM/Functional/Ticket/DDC493Test.php | 2 +- .../ORM/Functional/Ticket/DDC501Test.php | 28 +- .../ORM/Functional/Ticket/DDC512Test.php | 16 +- .../ORM/Functional/Ticket/DDC513Test.php | 2 +- .../ORM/Functional/Ticket/DDC518Test.php | 2 +- .../ORM/Functional/Ticket/DDC522Test.php | 14 +- .../ORM/Functional/Ticket/DDC531Test.php | 10 +- .../ORM/Functional/Ticket/DDC599Test.php | 12 +- .../ORM/Functional/Ticket/DDC618Test.php | 46 +- .../ORM/Functional/Ticket/DDC633Test.php | 8 +- .../ORM/Functional/Ticket/DDC656Test.php | 6 +- .../ORM/Functional/Ticket/DDC657Test.php | 62 +- .../ORM/Functional/Ticket/DDC698Test.php | 2 +- .../ORM/Functional/Ticket/DDC719Test.php | 2 +- .../ORM/Functional/Ticket/DDC729Test.php | 16 +- .../ORM/Functional/Ticket/DDC735Test.php | 8 +- .../ORM/Functional/Ticket/DDC736Test.php | 10 +- .../ORM/Functional/Ticket/DDC748Test.php | 10 +- .../ORM/Functional/Ticket/DDC758Test.php | 30 +- .../ORM/Functional/Ticket/DDC767Test.php | 2 +- .../ORM/Functional/Ticket/DDC809Test.php | 4 +- .../ORM/Functional/Ticket/DDC812Test.php | 4 +- .../ORM/Functional/Ticket/DDC837Test.php | 38 +- .../ORM/Functional/Ticket/DDC849Test.php | 22 +- .../ORM/Functional/Ticket/DDC881Test.php | 12 +- .../ORM/Functional/Ticket/DDC949Test.php | 8 +- .../ORM/Functional/Ticket/DDC960Test.php | 2 +- .../ORM/Functional/Ticket/DDC992Test.php | 14 +- .../ORM/Functional/Ticket/Ticket2481Test.php | 2 +- .../Tests/ORM/Functional/Ticket/Ticket69.php | 8 +- .../Tests/ORM/Functional/TypeTest.php | 50 +- .../Tests/ORM/Functional/TypeValueSqlTest.php | 30 +- .../ORM/Functional/UUIDGeneratorTest.php | 4 +- .../ManyToManyCompositeIdForeignKeyTest.php | 36 +- .../ManyToManyCompositeIdTest.php | 28 +- .../ManyToManyExtraLazyTest.php | 16 +- .../ValueConversionType/ManyToManyTest.php | 22 +- .../OneToManyCompositeIdForeignKeyTest.php | 34 +- .../OneToManyCompositeIdTest.php | 24 +- .../OneToManyExtraLazyTest.php | 8 +- .../ValueConversionType/OneToManyTest.php | 18 +- .../OneToOneCompositeIdForeignKeyTest.php | 32 +- .../OneToOneCompositeIdTest.php | 24 +- .../ValueConversionType/OneToOneTest.php | 18 +- .../Tests/ORM/Functional/ValueObjectsTest.php | 108 +-- .../ORM/Functional/VersionedOneToOneTest.php | 6 +- .../Tests/ORM/Hydration/ArrayHydratorTest.php | 418 +++++----- .../ORM/Hydration/CustomHydratorTest.php | 4 +- .../ORM/Hydration/ObjectHydratorTest.php | 566 +++++++------- .../ORM/Hydration/ResultSetMappingTest.php | 104 +-- .../ORM/Hydration/ScalarHydratorTest.php | 12 +- .../Hydration/SimpleObjectHydratorTest.php | 2 +- .../Hydration/SingleScalarHydratorTest.php | 8 +- .../Tests/ORM/Id/AssignedGeneratorTest.php | 4 +- .../Tests/ORM/LazyCriteriaCollectionTest.php | 30 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 722 ++++++++--------- .../ORM/Mapping/AnnotationDriverTest.php | 26 +- .../ORM/Mapping/AnsiQuoteStrategyTest.php | 29 +- .../Mapping/BasicInheritanceMappingTest.php | 84 +- .../ORM/Mapping/ClassMetadataBuilderTest.php | 175 +++-- .../ORM/Mapping/ClassMetadataFactoryTest.php | 126 +-- .../Mapping/ClassMetadataLoadEventTest.php | 6 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 222 +++--- .../ORM/Mapping/DefaultQuoteStrategyTest.php | 2 +- .../Mapping/EntityListenerResolverTest.php | 38 +- .../Tests/ORM/Mapping/FieldBuilderTest.php | 4 +- .../Tests/ORM/Mapping/NamingStrategyTest.php | 12 +- .../Tests/ORM/Mapping/QuoteStrategyTest.php | 39 +- .../ReflectionPropertiesGetterTest.php | 24 +- .../ReflectionEmbeddedPropertyTest.php | 6 +- .../Mapping/Symfony/AbstractDriverTest.php | 4 +- .../ORM/Mapping/XmlMappingDriverTest.php | 22 +- .../ORM/Mapping/YamlMappingDriverTest.php | 16 +- .../ORM/Performance/SecondLevelCacheTest.php | 18 +- .../Tests/ORM/PersistentCollectionTest.php | 18 +- ...tyPersisterCompositeTypeParametersTest.php | 8 +- ...sicEntityPersisterCompositeTypeSqlTest.php | 6 +- .../BasicEntityPersisterTypeValueSqlTest.php | 26 +- .../JoinedSubclassPersisterTest.php | 2 +- .../Tests/ORM/Proxy/ProxyFactoryTest.php | 16 +- .../ORM/Query/CustomTreeWalkersJoinTest.php | 6 +- .../Tests/ORM/Query/CustomTreeWalkersTest.php | 10 +- .../ORM/Query/DeleteSqlGenerationTest.php | 56 +- tests/Doctrine/Tests/ORM/Query/ExprTest.php | 164 ++-- .../Tests/ORM/Query/FilterCollectionTest.php | 18 +- .../ORM/Query/LanguageRecognitionTest.php | 218 +++--- tests/Doctrine/Tests/ORM/Query/LexerTest.php | 68 +- .../ORM/Query/ParameterTypeInfererTest.php | 2 +- .../Tests/ORM/Query/ParserResultTest.php | 12 +- tests/Doctrine/Tests/ORM/Query/ParserTest.php | 10 +- .../ORM/Query/QueryExpressionVisitorTest.php | 16 +- tests/Doctrine/Tests/ORM/Query/QueryTest.php | 46 +- .../ORM/Query/SelectSqlGenerationTest.php | 490 ++++++------ .../Tests/ORM/Query/SqlWalkerTest.php | 4 +- .../ORM/Query/UpdateSqlGenerationTest.php | 36 +- tests/Doctrine/Tests/ORM/QueryBuilderTest.php | 280 +++---- .../DefaultRepositoryFactoryTest.php | 12 +- .../AttachEntityListenersListenerTest.php | 32 +- .../ClearCacheCollectionRegionCommandTest.php | 8 +- .../ClearCacheEntityRegionCommandTest.php | 8 +- .../ClearCacheQueryRegionCommandTest.php | 8 +- .../GenerateRepositoriesCommandTest.php | 24 +- .../Tools/Console/Command/InfoCommandTest.php | 4 +- .../Command/MappingDescribeCommandTest.php | 4 +- .../Console/Command/RunDqlCommandTest.php | 10 +- .../ORM/Tools/ConvertDoctrine1SchemaTest.php | 26 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 402 +++++----- .../Tools/EntityRepositoryGeneratorTest.php | 36 +- .../AbstractClassMetadataExporterTest.php | 176 ++--- .../Export/XmlClassMetadataExporterTest.php | 4 +- .../Pagination/CountOutputWalkerTest.php | 17 +- .../ORM/Tools/Pagination/CountWalkerTest.php | 30 +- .../LimitSubqueryOutputWalkerTest.php | 27 +- .../Pagination/LimitSubqueryWalkerTest.php | 12 +- .../Tools/Pagination/WhereInWalkerTest.php | 20 +- .../Tools/ResolveTargetEntityListenerTest.php | 18 +- .../Tests/ORM/Tools/SchemaToolTest.php | 34 +- .../Tests/ORM/Tools/SchemaValidatorTest.php | 24 +- tests/Doctrine/Tests/ORM/Tools/SetupTest.php | 32 +- tests/Doctrine/Tests/ORM/UnitOfWorkTest.php | 76 +- .../ORM/Utility/IdentifierFlattenerTest.php | 32 +- .../Doctrine/Tests/OrmFunctionalTestCase.php | 2 +- 360 files changed, 7885 insertions(+), 7816 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index e06dc9bd825..d2e2edae8bf 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -164,7 +164,6 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS if ( ! $class->isMappedSuperclass) { foreach ($class->embeddedClasses as $property => $embeddableClass) { - if (isset($embeddableClass['inherited'])) { continue; } diff --git a/tests/Doctrine/Tests/ORM/Cache/AbstractRegionTest.php b/tests/Doctrine/Tests/ORM/Cache/AbstractRegionTest.php index 665978f01d3..02ab8939433 100644 --- a/tests/Doctrine/Tests/ORM/Cache/AbstractRegionTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/AbstractRegionTest.php @@ -48,19 +48,19 @@ static public function dataProviderCacheValues() */ public function testPutGetContainsEvict($key, $value) { - $this->assertFalse($this->region->contains($key)); + self::assertFalse($this->region->contains($key)); $this->region->put($key, $value); - $this->assertTrue($this->region->contains($key)); + self::assertTrue($this->region->contains($key)); $actual = $this->region->get($key); - $this->assertEquals($value, $actual); + self::assertEquals($value, $actual); $this->region->evict($key); - $this->assertFalse($this->region->contains($key)); + self::assertFalse($this->region->contains($key)); } public function testEvictAll() @@ -68,18 +68,18 @@ public function testEvictAll() $key1 = new CacheKeyMock('key.1'); $key2 = new CacheKeyMock('key.2'); - $this->assertFalse($this->region->contains($key1)); - $this->assertFalse($this->region->contains($key2)); + self::assertFalse($this->region->contains($key1)); + self::assertFalse($this->region->contains($key2)); $this->region->put($key1, new CacheEntryMock(['value' => 'foo'])); $this->region->put($key2, new CacheEntryMock(['value' => 'bar'])); - $this->assertTrue($this->region->contains($key1)); - $this->assertTrue($this->region->contains($key2)); + self::assertTrue($this->region->contains($key1)); + self::assertTrue($this->region->contains($key2)); $this->region->evictAll(); - $this->assertFalse($this->region->contains($key1)); - $this->assertFalse($this->region->contains($key2)); + self::assertFalse($this->region->contains($key1)); + self::assertFalse($this->region->contains($key2)); } } diff --git a/tests/Doctrine/Tests/ORM/Cache/CacheConfigTest.php b/tests/Doctrine/Tests/ORM/Cache/CacheConfigTest.php index 4c016df1fc7..a3708b53189 100644 --- a/tests/Doctrine/Tests/ORM/Cache/CacheConfigTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/CacheConfigTest.php @@ -38,33 +38,33 @@ public function testSetGetRegionLifetime() $config->setDefaultLifetime(111); - $this->assertEquals($config->getDefaultLifetime(), $config->getLifetime('foo_region')); + self::assertEquals($config->getDefaultLifetime(), $config->getLifetime('foo_region')); $config->setLifetime('foo_region', 222); - $this->assertEquals(222, $config->getLifetime('foo_region')); + self::assertEquals(222, $config->getLifetime('foo_region')); } public function testSetGetCacheLogger() { $logger = $this->createMock(CacheLogger::class); - $this->assertNull($this->config->getCacheLogger()); + self::assertNull($this->config->getCacheLogger()); $this->config->setCacheLogger($logger); - $this->assertEquals($logger, $this->config->getCacheLogger()); + self::assertEquals($logger, $this->config->getCacheLogger()); } public function testSetGetCacheFactory() { $factory = $this->createMock(CacheFactory::class); - $this->assertNull($this->config->getCacheFactory()); + self::assertNull($this->config->getCacheFactory()); $this->config->setCacheFactory($factory); - $this->assertEquals($factory, $this->config->getCacheFactory()); + self::assertEquals($factory, $this->config->getCacheFactory()); } public function testSetGetQueryValidator() @@ -76,10 +76,10 @@ public function testSetGetQueryValidator() $validator = $this->createMock(QueryCacheValidator::class); - $this->assertInstanceOf(TimestampQueryCacheValidator::class, $this->config->getQueryValidator()); + self::assertInstanceOf(TimestampQueryCacheValidator::class, $this->config->getQueryValidator()); $this->config->setQueryValidator($validator); - $this->assertEquals($validator, $this->config->getQueryValidator()); + self::assertEquals($validator, $this->config->getQueryValidator()); } } diff --git a/tests/Doctrine/Tests/ORM/Cache/CacheKeyTest.php b/tests/Doctrine/Tests/ORM/Cache/CacheKeyTest.php index 63c86d7f1af..d1d10ac8959 100644 --- a/tests/Doctrine/Tests/ORM/Cache/CacheKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/CacheKeyTest.php @@ -16,7 +16,7 @@ public function testEntityCacheKeyIdentifierCollision() $key1 = new EntityCacheKey('Foo', ['id'=>1]); $key2 = new EntityCacheKey('Bar', ['id'=>1]); - $this->assertNotEquals($key1->hash, $key2->hash); + self::assertNotEquals($key1->hash, $key2->hash); } public function testEntityCacheKeyIdentifierType() @@ -24,7 +24,7 @@ public function testEntityCacheKeyIdentifierType() $key1 = new EntityCacheKey('Foo', ['id'=>1]); $key2 = new EntityCacheKey('Foo', ['id'=>'1']); - $this->assertEquals($key1->hash, $key2->hash); + self::assertEquals($key1->hash, $key2->hash); } public function testEntityCacheKeyIdentifierOrder() @@ -32,7 +32,7 @@ public function testEntityCacheKeyIdentifierOrder() $key1 = new EntityCacheKey('Foo', ['foo_bar'=>1, 'bar_foo'=> 2]); $key2 = new EntityCacheKey('Foo', ['bar_foo'=>2, 'foo_bar'=> 1]); - $this->assertEquals($key1->hash, $key2->hash); + self::assertEquals($key1->hash, $key2->hash); } public function testCollectionCacheKeyIdentifierType() @@ -40,7 +40,7 @@ public function testCollectionCacheKeyIdentifierType() $key1 = new CollectionCacheKey('Foo', 'assoc', ['id'=>1]); $key2 = new CollectionCacheKey('Foo', 'assoc', ['id'=>'1']); - $this->assertEquals($key1->hash, $key2->hash); + self::assertEquals($key1->hash, $key2->hash); } public function testCollectionCacheKeyIdentifierOrder() @@ -48,7 +48,7 @@ public function testCollectionCacheKeyIdentifierOrder() $key1 = new CollectionCacheKey('Foo', 'assoc', ['foo_bar'=>1, 'bar_foo'=> 2]); $key2 = new CollectionCacheKey('Foo', 'assoc', ['bar_foo'=>2, 'foo_bar'=> 1]); - $this->assertEquals($key1->hash, $key2->hash); + self::assertEquals($key1->hash, $key2->hash); } public function testCollectionCacheKeyIdentifierCollision() @@ -56,7 +56,7 @@ public function testCollectionCacheKeyIdentifierCollision() $key1 = new CollectionCacheKey('Foo', 'assoc', ['id'=>1]); $key2 = new CollectionCacheKey('Bar', 'assoc', ['id'=>1]); - $this->assertNotEquals($key1->hash, $key2->hash); + self::assertNotEquals($key1->hash, $key2->hash); } public function testCollectionCacheKeyAssociationCollision() @@ -64,6 +64,6 @@ public function testCollectionCacheKeyAssociationCollision() $key1 = new CollectionCacheKey('Foo', 'assoc1', ['id'=>1]); $key2 = new CollectionCacheKey('Foo', 'assoc2', ['id'=>1]); - $this->assertNotEquals($key1->hash, $key2->hash); + self::assertNotEquals($key1->hash, $key2->hash); } } diff --git a/tests/Doctrine/Tests/ORM/Cache/CacheLoggerChainTest.php b/tests/Doctrine/Tests/ORM/Cache/CacheLoggerChainTest.php index a070237a200..fcc835ae6b0 100644 --- a/tests/Doctrine/Tests/ORM/Cache/CacheLoggerChainTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/CacheLoggerChainTest.php @@ -35,14 +35,14 @@ protected function setUp() public function testGetAndSetLogger() { - $this->assertEmpty($this->logger->getLoggers()); + self::assertEmpty($this->logger->getLoggers()); - $this->assertNull($this->logger->getLogger('mock')); + self::assertNull($this->logger->getLogger('mock')); $this->logger->setLogger('mock', $this->mock); - $this->assertSame($this->mock, $this->logger->getLogger('mock')); - $this->assertEquals(['mock' => $this->mock], $this->logger->getLoggers()); + self::assertSame($this->mock, $this->logger->getLogger('mock')); + self::assertEquals(['mock' => $this->mock], $this->logger->getLoggers()); } public function testEntityCacheChain() diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php index 1ca213b20e0..74abef696cd 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php @@ -63,7 +63,7 @@ protected function setUp() public function testImplementsCacheFactory() { - $this->assertInstanceOf(CacheFactory::class, $this->factory); + self::assertInstanceOf(CacheFactory::class, $this->factory); } public function testBuildCachedEntityPersisterReadOnly() @@ -82,8 +82,8 @@ public function testBuildCachedEntityPersisterReadOnly() $cachedPersister = $this->factory->buildCachedEntityPersister($em, $persister, $metadata); - $this->assertInstanceOf(CachedEntityPersister::class, $cachedPersister); - $this->assertInstanceOf(ReadOnlyCachedEntityPersister::class, $cachedPersister); + self::assertInstanceOf(CachedEntityPersister::class, $cachedPersister); + self::assertInstanceOf(ReadOnlyCachedEntityPersister::class, $cachedPersister); } public function testBuildCachedEntityPersisterReadWrite() @@ -102,8 +102,8 @@ public function testBuildCachedEntityPersisterReadWrite() $cachedPersister = $this->factory->buildCachedEntityPersister($em, $persister, $metadata); - $this->assertInstanceOf(CachedEntityPersister::class, $cachedPersister); - $this->assertInstanceOf(ReadWriteCachedEntityPersister::class, $cachedPersister); + self::assertInstanceOf(CachedEntityPersister::class, $cachedPersister); + self::assertInstanceOf(ReadWriteCachedEntityPersister::class, $cachedPersister); } public function testBuildCachedEntityPersisterNonStrictReadWrite() @@ -122,8 +122,8 @@ public function testBuildCachedEntityPersisterNonStrictReadWrite() $cachedPersister = $this->factory->buildCachedEntityPersister($em, $persister, $metadata); - $this->assertInstanceOf(CachedEntityPersister::class, $cachedPersister); - $this->assertInstanceOf(NonStrictReadWriteCachedEntityPersister::class, $cachedPersister); + self::assertInstanceOf(CachedEntityPersister::class, $cachedPersister); + self::assertInstanceOf(NonStrictReadWriteCachedEntityPersister::class, $cachedPersister); } public function testBuildCachedCollectionPersisterReadOnly() @@ -144,8 +144,8 @@ public function testBuildCachedCollectionPersisterReadOnly() $cachedPersister = $this->factory->buildCachedCollectionPersister($em, $persister, $mapping); - $this->assertInstanceOf(CachedCollectionPersister::class, $cachedPersister); - $this->assertInstanceOf(ReadOnlyCachedCollectionPersister::class, $cachedPersister); + self::assertInstanceOf(CachedCollectionPersister::class, $cachedPersister); + self::assertInstanceOf(ReadOnlyCachedCollectionPersister::class, $cachedPersister); } public function testBuildCachedCollectionPersisterReadWrite() @@ -165,8 +165,8 @@ public function testBuildCachedCollectionPersisterReadWrite() $cachedPersister = $this->factory->buildCachedCollectionPersister($em, $persister, $mapping); - $this->assertInstanceOf(CachedCollectionPersister::class, $cachedPersister); - $this->assertInstanceOf(ReadWriteCachedCollectionPersister::class, $cachedPersister); + self::assertInstanceOf(CachedCollectionPersister::class, $cachedPersister); + self::assertInstanceOf(ReadWriteCachedCollectionPersister::class, $cachedPersister); } public function testBuildCachedCollectionPersisterNonStrictReadWrite() @@ -186,8 +186,8 @@ public function testBuildCachedCollectionPersisterNonStrictReadWrite() $cachedPersister = $this->factory->buildCachedCollectionPersister($em, $persister, $mapping); - $this->assertInstanceOf(CachedCollectionPersister::class, $cachedPersister); - $this->assertInstanceOf(NonStrictReadWriteCachedCollectionPersister::class, $cachedPersister); + self::assertInstanceOf(CachedCollectionPersister::class, $cachedPersister); + self::assertInstanceOf(NonStrictReadWriteCachedCollectionPersister::class, $cachedPersister); } public function testInheritedEntityCacheRegion() @@ -202,11 +202,11 @@ public function testInheritedEntityCacheRegion() $cachedPersister1 = $factory->buildCachedEntityPersister($em, $persister1, $metadata1); $cachedPersister2 = $factory->buildCachedEntityPersister($em, $persister2, $metadata2); - $this->assertInstanceOf(CachedEntityPersister::class, $cachedPersister1); - $this->assertInstanceOf(CachedEntityPersister::class, $cachedPersister2); + self::assertInstanceOf(CachedEntityPersister::class, $cachedPersister1); + self::assertInstanceOf(CachedEntityPersister::class, $cachedPersister2); - $this->assertNotSame($cachedPersister1, $cachedPersister2); - $this->assertSame($cachedPersister1->getCacheRegion(), $cachedPersister2->getCacheRegion()); + self::assertNotSame($cachedPersister1, $cachedPersister2); + self::assertSame($cachedPersister1->getCacheRegion(), $cachedPersister2->getCacheRegion()); } public function testCreateNewCacheDriver() @@ -221,11 +221,11 @@ public function testCreateNewCacheDriver() $cachedPersister1 = $factory->buildCachedEntityPersister($em, $persister1, $metadata1); $cachedPersister2 = $factory->buildCachedEntityPersister($em, $persister2, $metadata2); - $this->assertInstanceOf(CachedEntityPersister::class, $cachedPersister1); - $this->assertInstanceOf(CachedEntityPersister::class, $cachedPersister2); + self::assertInstanceOf(CachedEntityPersister::class, $cachedPersister1); + self::assertInstanceOf(CachedEntityPersister::class, $cachedPersister2); - $this->assertNotSame($cachedPersister1, $cachedPersister2); - $this->assertNotSame($cachedPersister1->getCacheRegion(), $cachedPersister2->getCacheRegion()); + self::assertNotSame($cachedPersister1, $cachedPersister2); + self::assertNotSame($cachedPersister1->getCacheRegion(), $cachedPersister2->getCacheRegion()); } /** @@ -292,8 +292,8 @@ public function testBuildsNewNamespacedCacheInstancePerRegionInstance() ] ); - $this->assertSame('foo', $fooRegion->getCache()->getNamespace()); - $this->assertSame('bar', $barRegion->getCache()->getNamespace()); + self::assertSame('foo', $fooRegion->getCache()->getNamespace()); + self::assertSame('bar', $barRegion->getCache()->getNamespace()); } public function testAppendsNamespacedCacheInstancePerRegionInstanceWhenItsAlreadySet() @@ -327,7 +327,7 @@ public function testBuildsDefaultCacheRegionFromGenericCacheRegion() $factory = new DefaultCacheFactory($this->regionsConfig, $cache); - $this->assertInstanceOf( + self::assertInstanceOf( DefaultRegion::class, $factory->getRegion( [ @@ -345,7 +345,7 @@ public function testBuildsMultiGetCacheRegionFromGenericCacheRegion() $factory = new DefaultCacheFactory($this->regionsConfig, $cache); - $this->assertInstanceOf( + self::assertInstanceOf( DefaultMultiGetRegion::class, $factory->getRegion( [ diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php index cbc9d8e8b73..ecbb7fa45a4 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php @@ -70,19 +70,19 @@ private function putCollectionCacheEntry($className, $association, array $ownerI public function testImplementsCache() { - $this->assertInstanceOf(Cache::class, $this->cache); + self::assertInstanceOf(Cache::class, $this->cache); } public function testGetEntityCacheRegionAccess() { - $this->assertInstanceOf(Cache\Region::class, $this->cache->getEntityCacheRegion(State::class)); - $this->assertNull($this->cache->getEntityCacheRegion(CmsUser::class)); + self::assertInstanceOf(Cache\Region::class, $this->cache->getEntityCacheRegion(State::class)); + self::assertNull($this->cache->getEntityCacheRegion(CmsUser::class)); } public function testGetCollectionCacheRegionAccess() { - $this->assertInstanceOf(Cache\Region::class, $this->cache->getCollectionCacheRegion(State::class, 'cities')); - $this->assertNull($this->cache->getCollectionCacheRegion(CmsUser::class, 'phonenumbers')); + self::assertInstanceOf(Cache\Region::class, $this->cache->getCollectionCacheRegion(State::class, 'cities')); + self::assertNull($this->cache->getCollectionCacheRegion(CmsUser::class, 'phonenumbers')); } public function testContainsEntity() @@ -91,12 +91,12 @@ public function testContainsEntity() $className = Country::class; $cacheEntry = array_merge($identifier, ['name' => 'Brazil']); - $this->assertFalse($this->cache->containsEntity(Country::class, 1)); + self::assertFalse($this->cache->containsEntity(Country::class, 1)); $this->putEntityCacheEntry($className, $identifier, $cacheEntry); - $this->assertTrue($this->cache->containsEntity(Country::class, 1)); - $this->assertFalse($this->cache->containsEntity(CmsUser::class, 1)); + self::assertTrue($this->cache->containsEntity(Country::class, 1)); + self::assertFalse($this->cache->containsEntity(CmsUser::class, 1)); } public function testEvictEntity() @@ -107,12 +107,12 @@ public function testEvictEntity() $this->putEntityCacheEntry($className, $identifier, $cacheEntry); - $this->assertTrue($this->cache->containsEntity(Country::class, 1)); + self::assertTrue($this->cache->containsEntity(Country::class, 1)); $this->cache->evictEntity(Country::class, 1); $this->cache->evictEntity(CmsUser::class, 1); - $this->assertFalse($this->cache->containsEntity(Country::class, 1)); + self::assertFalse($this->cache->containsEntity(Country::class, 1)); } public function testEvictEntityRegion() @@ -123,12 +123,12 @@ public function testEvictEntityRegion() $this->putEntityCacheEntry($className, $identifier, $cacheEntry); - $this->assertTrue($this->cache->containsEntity(Country::class, 1)); + self::assertTrue($this->cache->containsEntity(Country::class, 1)); $this->cache->evictEntityRegion(Country::class); $this->cache->evictEntityRegion(CmsUser::class); - $this->assertFalse($this->cache->containsEntity(Country::class, 1)); + self::assertFalse($this->cache->containsEntity(Country::class, 1)); } public function testEvictEntityRegions() @@ -139,11 +139,11 @@ public function testEvictEntityRegions() $this->putEntityCacheEntry($className, $identifier, $cacheEntry); - $this->assertTrue($this->cache->containsEntity(Country::class, 1)); + self::assertTrue($this->cache->containsEntity(Country::class, 1)); $this->cache->evictEntityRegions(); - $this->assertFalse($this->cache->containsEntity(Country::class, 1)); + self::assertFalse($this->cache->containsEntity(Country::class, 1)); } public function testContainsCollection() @@ -156,12 +156,12 @@ public function testContainsCollection() ['id' => 12], ]; - $this->assertFalse($this->cache->containsCollection(State::class, $association, 1)); + self::assertFalse($this->cache->containsCollection(State::class, $association, 1)); $this->putCollectionCacheEntry($className, $association, $ownerId, $cacheEntry); - $this->assertTrue($this->cache->containsCollection(State::class, $association, 1)); - $this->assertFalse($this->cache->containsCollection(CmsUser::class, 'phonenumbers', 1)); + self::assertTrue($this->cache->containsCollection(State::class, $association, 1)); + self::assertFalse($this->cache->containsCollection(CmsUser::class, 'phonenumbers', 1)); } public function testEvictCollection() @@ -176,12 +176,12 @@ public function testEvictCollection() $this->putCollectionCacheEntry($className, $association, $ownerId, $cacheEntry); - $this->assertTrue($this->cache->containsCollection(State::class, $association, 1)); + self::assertTrue($this->cache->containsCollection(State::class, $association, 1)); $this->cache->evictCollection($className, $association, $ownerId); $this->cache->evictCollection(CmsUser::class, 'phonenumbers', 1); - $this->assertFalse($this->cache->containsCollection(State::class, $association, 1)); + self::assertFalse($this->cache->containsCollection(State::class, $association, 1)); } public function testEvictCollectionRegion() @@ -196,12 +196,12 @@ public function testEvictCollectionRegion() $this->putCollectionCacheEntry($className, $association, $ownerId, $cacheEntry); - $this->assertTrue($this->cache->containsCollection(State::class, $association, 1)); + self::assertTrue($this->cache->containsCollection(State::class, $association, 1)); $this->cache->evictCollectionRegion($className, $association); $this->cache->evictCollectionRegion(CmsUser::class, 'phonenumbers'); - $this->assertFalse($this->cache->containsCollection(State::class, $association, 1)); + self::assertFalse($this->cache->containsCollection(State::class, $association, 1)); } public function testEvictCollectionRegions() @@ -216,33 +216,33 @@ public function testEvictCollectionRegions() $this->putCollectionCacheEntry($className, $association, $ownerId, $cacheEntry); - $this->assertTrue($this->cache->containsCollection(State::class, $association, 1)); + self::assertTrue($this->cache->containsCollection(State::class, $association, 1)); $this->cache->evictCollectionRegions(); - $this->assertFalse($this->cache->containsCollection(State::class, $association, 1)); + self::assertFalse($this->cache->containsCollection(State::class, $association, 1)); } public function testQueryCache() { - $this->assertFalse($this->cache->containsQuery('foo')); + self::assertFalse($this->cache->containsQuery('foo')); $defaultQueryCache = $this->cache->getQueryCache(); $fooQueryCache = $this->cache->getQueryCache('foo'); - $this->assertInstanceOf(Cache\QueryCache::class, $defaultQueryCache); - $this->assertInstanceOf(Cache\QueryCache::class, $fooQueryCache); - $this->assertSame($defaultQueryCache, $this->cache->getQueryCache()); - $this->assertSame($fooQueryCache, $this->cache->getQueryCache('foo')); + self::assertInstanceOf(Cache\QueryCache::class, $defaultQueryCache); + self::assertInstanceOf(Cache\QueryCache::class, $fooQueryCache); + self::assertSame($defaultQueryCache, $this->cache->getQueryCache()); + self::assertSame($fooQueryCache, $this->cache->getQueryCache('foo')); $this->cache->evictQueryRegion(); $this->cache->evictQueryRegion('foo'); $this->cache->evictQueryRegions(); - $this->assertTrue($this->cache->containsQuery('foo')); + self::assertTrue($this->cache->containsQuery('foo')); - $this->assertSame($defaultQueryCache, $this->cache->getQueryCache()); - $this->assertSame($fooQueryCache, $this->cache->getQueryCache('foo')); + self::assertSame($defaultQueryCache, $this->cache->getQueryCache()); + self::assertSame($fooQueryCache, $this->cache->getQueryCache('foo')); } public function testToIdentifierArrayShouldLookupForEntityIdentifier() @@ -257,7 +257,7 @@ public function testToIdentifierArrayShouldLookupForEntityIdentifier() $method->setAccessible(true); $property->setValue($entity, $identifier); - $this->assertEquals(['id'=>$identifier], $method->invoke($this->cache, $metadata, $identifier)); + self::assertEquals(['id'=>$identifier], $method->invoke($this->cache, $metadata, $identifier)); } } diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCollectionHydratorTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCollectionHydratorTest.php index f2a35b16a95..2a11972b69a 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCollectionHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCollectionHydratorTest.php @@ -35,7 +35,7 @@ protected function setUp() public function testImplementsCollectionEntryStructure() { - $this->assertInstanceOf(DefaultCollectionHydrator::class, $this->structure); + self::assertInstanceOf(DefaultCollectionHydrator::class, $this->structure); } public function testLoadCacheCollection() @@ -59,24 +59,24 @@ public function testLoadCacheCollection() $collection = new PersistentCollection($this->_em, $targetClass, new ArrayCollection()); $list = $this->structure->loadCacheEntry($sourceClass, $key, $entry, $collection); - $this->assertNotNull($list); - $this->assertCount(2, $list); - $this->assertCount(2, $collection); + self::assertNotNull($list); + self::assertCount(2, $list); + self::assertCount(2, $collection); - $this->assertInstanceOf($targetClass->name, $list[0]); - $this->assertInstanceOf($targetClass->name, $list[1]); - $this->assertInstanceOf($targetClass->name, $collection[0]); - $this->assertInstanceOf($targetClass->name, $collection[1]); + self::assertInstanceOf($targetClass->name, $list[0]); + self::assertInstanceOf($targetClass->name, $list[1]); + self::assertInstanceOf($targetClass->name, $collection[0]); + self::assertInstanceOf($targetClass->name, $collection[1]); - $this->assertSame($list[0], $collection[0]); - $this->assertSame($list[1], $collection[1]); + self::assertSame($list[0], $collection[0]); + self::assertSame($list[1], $collection[1]); - $this->assertEquals(31, $list[0]->getId()); - $this->assertEquals(32, $list[1]->getId()); - $this->assertEquals($list[0]->getId(), $collection[0]->getId()); - $this->assertEquals($list[1]->getId(), $collection[1]->getId()); - $this->assertEquals(UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($collection[0])); - $this->assertEquals(UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($collection[1])); + self::assertEquals(31, $list[0]->getId()); + self::assertEquals(32, $list[1]->getId()); + self::assertEquals($list[0]->getId(), $collection[0]->getId()); + self::assertEquals($list[1]->getId(), $collection[1]->getId()); + self::assertEquals(UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($collection[0])); + self::assertEquals(UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($collection[1])); } } diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php index d58ab8a0527..b9e518cd265 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php @@ -37,7 +37,7 @@ protected function setUp() public function testImplementsEntityEntryStructure() { - $this->assertInstanceOf('\Doctrine\ORM\Cache\EntityHydrator', $this->structure); + self::assertInstanceOf('\Doctrine\ORM\Cache\EntityHydrator', $this->structure); } public function testCreateEntity() @@ -47,11 +47,11 @@ public function testCreateEntity() $entry = new EntityCacheEntry($metadata->name, ['id'=>1, 'name'=>'Foo']); $entity = $this->structure->loadCacheEntry($metadata, $key, $entry); - $this->assertInstanceOf($metadata->name, $entity); + self::assertInstanceOf($metadata->name, $entity); - $this->assertEquals(1, $entity->getId()); - $this->assertEquals('Foo', $entity->getName()); - $this->assertEquals(UnitOfWork::STATE_MANAGED, $this->em->getUnitOfWork()->getEntityState($entity)); + self::assertEquals(1, $entity->getId()); + self::assertEquals('Foo', $entity->getName()); + self::assertEquals(UnitOfWork::STATE_MANAGED, $this->em->getUnitOfWork()->getEntityState($entity)); } public function testLoadProxy() @@ -62,12 +62,12 @@ public function testLoadProxy() $proxy = $this->em->getReference($metadata->name, $key->identifier); $entity = $this->structure->loadCacheEntry($metadata, $key, $entry, $proxy); - $this->assertInstanceOf($metadata->name, $entity); - $this->assertSame($proxy, $entity); + self::assertInstanceOf($metadata->name, $entity); + self::assertSame($proxy, $entity); - $this->assertEquals(1, $entity->getId()); - $this->assertEquals('Foo', $entity->getName()); - $this->assertEquals(UnitOfWork::STATE_MANAGED, $this->em->getUnitOfWork()->getEntityState($proxy)); + self::assertEquals(1, $entity->getId()); + self::assertEquals('Foo', $entity->getName()); + self::assertEquals(UnitOfWork::STATE_MANAGED, $this->em->getUnitOfWork()->getEntityState($proxy)); } public function testBuildCacheEntry() @@ -83,16 +83,18 @@ public function testBuildCacheEntry() $cache = $this->structure->buildCacheEntry($metadata, $key, $entity); - $this->assertInstanceOf(CacheEntry::class, $cache); - $this->assertInstanceOf(EntityCacheEntry::class, $cache); + self::assertInstanceOf(CacheEntry::class, $cache); + self::assertInstanceOf(EntityCacheEntry::class, $cache); - $this->assertArrayHasKey('id', $cache->data); - $this->assertArrayHasKey('name', $cache->data); - $this->assertEquals( + self::assertArrayHasKey('id', $cache->data); + self::assertArrayHasKey('name', $cache->data); + self::assertEquals( [ - 'id' => 1, - 'name' => 'Foo', - ], $cache->data); + 'id' => 1, + 'name' => 'Foo', + ], + $cache->data + ); } public function testBuildCacheEntryAssociation() @@ -113,18 +115,20 @@ public function testBuildCacheEntryAssociation() $cache = $this->structure->buildCacheEntry($metadata, $key, $state); - $this->assertInstanceOf(CacheEntry::class, $cache); - $this->assertInstanceOf(EntityCacheEntry::class, $cache); + self::assertInstanceOf(CacheEntry::class, $cache); + self::assertInstanceOf(EntityCacheEntry::class, $cache); - $this->assertArrayHasKey('id', $cache->data); - $this->assertArrayHasKey('name', $cache->data); - $this->assertArrayHasKey('country', $cache->data); - $this->assertEquals( + self::assertArrayHasKey('id', $cache->data); + self::assertArrayHasKey('name', $cache->data); + self::assertArrayHasKey('country', $cache->data); + self::assertEquals( [ - 'id' => 12, - 'name' => 'Bar', - 'country' => new AssociationCacheEntry(Country::class, ['id' => 11]), - ], $cache->data); + 'id' => 12, + 'name' => 'Bar', + 'country' => new AssociationCacheEntry(Country::class, ['id' => 11]), + ], + $cache->data + ); } public function testBuildCacheEntryNonInitializedAssocProxy() @@ -142,18 +146,20 @@ public function testBuildCacheEntryNonInitializedAssocProxy() $cache = $this->structure->buildCacheEntry($metadata, $key, $entity); - $this->assertInstanceOf(CacheEntry::class, $cache); - $this->assertInstanceOf(EntityCacheEntry::class, $cache); + self::assertInstanceOf(CacheEntry::class, $cache); + self::assertInstanceOf(EntityCacheEntry::class, $cache); - $this->assertArrayHasKey('id', $cache->data); - $this->assertArrayHasKey('name', $cache->data); - $this->assertArrayHasKey('country', $cache->data); - $this->assertEquals( + self::assertArrayHasKey('id', $cache->data); + self::assertArrayHasKey('name', $cache->data); + self::assertArrayHasKey('country', $cache->data); + self::assertEquals( [ - 'id' => 12, - 'name' => 'Bar', - 'country' => new AssociationCacheEntry(Country::class, ['id' => 11]), - ], $cache->data); + 'id' => 12, + 'name' => 'Bar', + 'country' => new AssociationCacheEntry(Country::class, ['id' => 11]), + ], + $cache->data + ); } public function testCacheEntryWithWrongIdentifierType() @@ -171,19 +177,21 @@ public function testCacheEntryWithWrongIdentifierType() $cache = $this->structure->buildCacheEntry($metadata, $key, $entity); - $this->assertInstanceOf(CacheEntry::class, $cache); - $this->assertInstanceOf(EntityCacheEntry::class, $cache); + self::assertInstanceOf(CacheEntry::class, $cache); + self::assertInstanceOf(EntityCacheEntry::class, $cache); - $this->assertArrayHasKey('id', $cache->data); - $this->assertArrayHasKey('name', $cache->data); - $this->assertArrayHasKey('country', $cache->data); - $this->assertSame($entity->getId(), $cache->data['id']); - $this->assertEquals( + self::assertArrayHasKey('id', $cache->data); + self::assertArrayHasKey('name', $cache->data); + self::assertArrayHasKey('country', $cache->data); + self::assertSame($entity->getId(), $cache->data['id']); + self::assertEquals( [ - 'id' => 12, - 'name' => 'Bar', - 'country' => new AssociationCacheEntry(Country::class, ['id' => 11]), - ], $cache->data); + 'id' => 12, + 'name' => 'Bar', + 'country' => new AssociationCacheEntry(Country::class, ['id' => 11]), + ], + $cache->data + ); } } diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php index 239dc0af213..f1f2e3f947e 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php @@ -65,20 +65,20 @@ protected function setUp() public function testImplementQueryCache() { - $this->assertInstanceOf(QueryCache::class, $this->queryCache); + self::assertInstanceOf(QueryCache::class, $this->queryCache); } public function testGetRegion() { - $this->assertSame($this->region, $this->queryCache->getRegion()); + self::assertSame($this->region, $this->queryCache->getRegion()); } public function testClearShouldEvictRegion() { $this->queryCache->clear(); - $this->assertArrayHasKey('evictAll', $this->region->calls); - $this->assertCount(1, $this->region->calls['evictAll']); + self::assertArrayHasKey('evictAll', $this->region->calls); + self::assertCount(1, $this->region->calls['evictAll']); } public function testPutBasicQueryResult() @@ -99,21 +99,21 @@ public function testPutBasicQueryResult() $this->em->getUnitOfWork()->registerManaged($entity, ['id' => $i], ['name' => $name]); } - $this->assertTrue($this->queryCache->put($key, $rsm, $result)); - $this->assertArrayHasKey('put', $this->region->calls); - $this->assertCount(5, $this->region->calls['put']); - - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][0]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][1]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][2]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][3]['key']); - $this->assertInstanceOf(QueryCacheKey::class, $this->region->calls['put'][4]['key']); - - $this->assertInstanceOf(EntityCacheEntry::class, $this->region->calls['put'][0]['entry']); - $this->assertInstanceOf(EntityCacheEntry::class, $this->region->calls['put'][1]['entry']); - $this->assertInstanceOf(EntityCacheEntry::class, $this->region->calls['put'][2]['entry']); - $this->assertInstanceOf(EntityCacheEntry::class, $this->region->calls['put'][3]['entry']); - $this->assertInstanceOf(QueryCacheEntry::class, $this->region->calls['put'][4]['entry']); + self::assertTrue($this->queryCache->put($key, $rsm, $result)); + self::assertArrayHasKey('put', $this->region->calls); + self::assertCount(5, $this->region->calls['put']); + + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][0]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][1]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][2]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][3]['key']); + self::assertInstanceOf(QueryCacheKey::class, $this->region->calls['put'][4]['key']); + + self::assertInstanceOf(EntityCacheEntry::class, $this->region->calls['put'][0]['entry']); + self::assertInstanceOf(EntityCacheEntry::class, $this->region->calls['put'][1]['entry']); + self::assertInstanceOf(EntityCacheEntry::class, $this->region->calls['put'][2]['entry']); + self::assertInstanceOf(EntityCacheEntry::class, $this->region->calls['put'][3]['entry']); + self::assertInstanceOf(QueryCacheEntry::class, $this->region->calls['put'][4]['entry']); } public function testPutToOneAssociationQueryResult() @@ -140,19 +140,19 @@ public function testPutToOneAssociationQueryResult() $uow->registerManaged($city, ['id' => $city->getId()], ['name' => $city->getName(), 'state' => $state]); } - $this->assertTrue($this->queryCache->put($key, $rsm, $result)); - $this->assertArrayHasKey('put', $this->region->calls); - $this->assertCount(9, $this->region->calls['put']); - - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][0]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][1]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][2]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][3]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][4]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][5]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][6]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][7]['key']); - $this->assertInstanceOf(QueryCacheKey::class, $this->region->calls['put'][8]['key']); + self::assertTrue($this->queryCache->put($key, $rsm, $result)); + self::assertArrayHasKey('put', $this->region->calls); + self::assertCount(9, $this->region->calls['put']); + + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][0]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][1]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][2]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][3]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][4]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][5]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][6]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][7]['key']); + self::assertInstanceOf(QueryCacheKey::class, $this->region->calls['put'][8]['key']); } public function testPutToOneAssociation2LevelsQueryResult() @@ -188,23 +188,23 @@ public function testPutToOneAssociation2LevelsQueryResult() $uow->registerManaged($city, ['id' => $city->getId()], ['name' => $city->getName(), 'state' => $state]); } - $this->assertTrue($this->queryCache->put($key, $rsm, $result)); - $this->assertArrayHasKey('put', $this->region->calls); - $this->assertCount(13, $this->region->calls['put']); - - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][0]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][1]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][2]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][3]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][4]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][5]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][6]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][7]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][8]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][9]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][10]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][11]['key']); - $this->assertInstanceOf(QueryCacheKey::class, $this->region->calls['put'][12]['key']); + self::assertTrue($this->queryCache->put($key, $rsm, $result)); + self::assertArrayHasKey('put', $this->region->calls); + self::assertCount(13, $this->region->calls['put']); + + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][0]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][1]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][2]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][3]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][4]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][5]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][6]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][7]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][8]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][9]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][10]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][11]['key']); + self::assertInstanceOf(QueryCacheKey::class, $this->region->calls['put'][12]['key']); } public function testPutToOneAssociationNullQueryResult() @@ -228,15 +228,15 @@ public function testPutToOneAssociationNullQueryResult() $uow->registerManaged($city, ['id' => $city->getId()], ['name' => $city->getName(), 'state' => null]); } - $this->assertTrue($this->queryCache->put($key, $rsm, $result)); - $this->assertArrayHasKey('put', $this->region->calls); - $this->assertCount(5, $this->region->calls['put']); + self::assertTrue($this->queryCache->put($key, $rsm, $result)); + self::assertArrayHasKey('put', $this->region->calls); + self::assertCount(5, $this->region->calls['put']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][0]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][1]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][2]['key']); - $this->assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][3]['key']); - $this->assertInstanceOf(QueryCacheKey::class, $this->region->calls['put'][4]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][0]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][1]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][2]['key']); + self::assertInstanceOf(EntityCacheKey::class, $this->region->calls['put'][3]['key']); + self::assertInstanceOf(QueryCacheKey::class, $this->region->calls['put'][4]['key']); } public function testPutToManyAssociationQueryResult() @@ -272,9 +272,9 @@ public function testPutToManyAssociationQueryResult() ); } - $this->assertTrue($this->queryCache->put($key, $rsm, $result)); - $this->assertArrayHasKey('put', $this->region->calls); - $this->assertCount(13, $this->region->calls['put']); + self::assertTrue($this->queryCache->put($key, $rsm, $result)); + self::assertArrayHasKey('put', $this->region->calls); + self::assertCount(13, $this->region->calls['put']); } public function testGetBasicQueryResult() @@ -346,13 +346,13 @@ public function testGetWithAssociation() $result = $this->queryCache->get($key, $rsm); - $this->assertCount(2, $result); - $this->assertInstanceOf(Country::class, $result[0]); - $this->assertInstanceOf(Country::class, $result[1]); - $this->assertEquals(1, $result[0]->getId()); - $this->assertEquals(2, $result[1]->getId()); - $this->assertEquals('Foo', $result[0]->getName()); - $this->assertEquals('Bar', $result[1]->getName()); + self::assertCount(2, $result); + self::assertInstanceOf(Country::class, $result[0]); + self::assertInstanceOf(Country::class, $result[1]); + self::assertEquals(1, $result[0]->getId()); + self::assertEquals(2, $result[1]->getId()); + self::assertEquals('Foo', $result[0]->getName()); + self::assertEquals('Bar', $result[1]->getName()); } public function testCancelPutResultIfEntityPutFails() @@ -375,9 +375,9 @@ public function testCancelPutResultIfEntityPutFails() $this->region->addReturn('put', false); - $this->assertFalse($this->queryCache->put($key, $rsm, $result)); - $this->assertArrayHasKey('put', $this->region->calls); - $this->assertCount(1, $this->region->calls['put']); + self::assertFalse($this->queryCache->put($key, $rsm, $result)); + self::assertArrayHasKey('put', $this->region->calls); + self::assertCount(1, $this->region->calls['put']); } public function testCancelPutResultIfAssociationEntityPutFails() @@ -406,7 +406,7 @@ public function testCancelPutResultIfAssociationEntityPutFails() $this->region->addReturn('put', true); // put root entity $this->region->addReturn('put', false); // association fails - $this->assertFalse($this->queryCache->put($key, $rsm, $result)); + self::assertFalse($this->queryCache->put($key, $rsm, $result)); } public function testCancelPutToManyAssociationQueryResult() @@ -441,9 +441,9 @@ public function testCancelPutToManyAssociationQueryResult() $this->region->addReturn('put', true); // put root entity $this->region->addReturn('put', false); // collection association fails - $this->assertFalse($this->queryCache->put($key, $rsm, $result)); - $this->assertArrayHasKey('put', $this->region->calls); - $this->assertCount(2, $this->region->calls['put']); + self::assertFalse($this->queryCache->put($key, $rsm, $result)); + self::assertArrayHasKey('put', $this->region->calls); + self::assertCount(2, $this->region->calls['put']); } public function testIgnoreCacheNonGetMode() @@ -461,7 +461,7 @@ public function testIgnoreCacheNonGetMode() $this->region->addReturn('get', $entry); - $this->assertNull($this->queryCache->get($key, $rsm)); + self::assertNull($this->queryCache->get($key, $rsm)); } public function testIgnoreCacheNonPutMode() @@ -482,7 +482,7 @@ public function testIgnoreCacheNonPutMode() $this->em->getUnitOfWork()->registerManaged($entity, ['id' => $i], ['name' => $name]); } - $this->assertFalse($this->queryCache->put($key, $rsm, $result)); + self::assertFalse($this->queryCache->put($key, $rsm, $result)); } public function testGetShouldIgnoreOldQueryCacheEntryResult() @@ -514,7 +514,7 @@ public function testGetShouldIgnoreOldQueryCacheEntryResult() $rsm->addRootEntityFromClassMetadata(Country::class, 'c'); - $this->assertNull($this->queryCache->get($key, $rsm)); + self::assertNull($this->queryCache->get($key, $rsm)); } public function testGetShouldIgnoreNonQueryCacheEntryResult() @@ -545,7 +545,7 @@ public function testGetShouldIgnoreNonQueryCacheEntryResult() $rsm->addRootEntityFromClassMetadata(Country::class, 'c'); - $this->assertNull($this->queryCache->get($key, $rsm)); + self::assertNull($this->queryCache->get($key, $rsm)); } public function testGetShouldIgnoreMissingEntityQueryCacheEntry() @@ -564,7 +564,7 @@ public function testGetShouldIgnoreMissingEntityQueryCacheEntry() $rsm->addRootEntityFromClassMetadata(Country::class, 'c'); - $this->assertNull($this->queryCache->get($key, $rsm)); + self::assertNull($this->queryCache->get($key, $rsm)); } public function testGetAssociationValue() @@ -666,7 +666,7 @@ public function testNotCacheableEntityException() $this->em->getUnitOfWork()->registerManaged($entity, ['id' => $i], ['booleanField' => $boolean]); } - $this->assertFalse($this->queryCache->put($key, $rsm, $result)); + self::assertFalse($this->queryCache->put($key, $rsm, $result)); } } diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultRegionTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultRegionTest.php index 97365dfcf28..eb321f06639 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultRegionTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultRegionTest.php @@ -22,8 +22,8 @@ protected function createRegion() public function testGetters() { - $this->assertEquals('default.region.test', $this->region->getName()); - $this->assertSame($this->cache, $this->region->getCache()); + self::assertEquals('default.region.test', $this->region->getName()); + self::assertSame($this->cache, $this->region->getCache()); } public function testSharedRegion() @@ -34,19 +34,19 @@ public function testSharedRegion() $region1 = new DefaultRegion('region1', $cache->createChild()); $region2 = new DefaultRegion('region2', $cache->createChild()); - $this->assertFalse($region1->contains($key)); - $this->assertFalse($region2->contains($key)); + self::assertFalse($region1->contains($key)); + self::assertFalse($region2->contains($key)); $region1->put($key, $entry); $region2->put($key, $entry); - $this->assertTrue($region1->contains($key)); - $this->assertTrue($region2->contains($key)); + self::assertTrue($region1->contains($key)); + self::assertTrue($region2->contains($key)); $region1->evictAll(); - $this->assertFalse($region1->contains($key)); - $this->assertTrue($region2->contains($key)); + self::assertFalse($region1->contains($key)); + self::assertTrue($region2->contains($key)); } public function testDoesNotModifyCacheNamespace() @@ -58,7 +58,7 @@ public function testDoesNotModifyCacheNamespace() new DefaultRegion('bar', $cache); new DefaultRegion('baz', $cache); - $this->assertSame('foo', $cache->getNamespace()); + self::assertSame('foo', $cache->getNamespace()); } public function testEvictAllWithGenericCacheThrowsUnsupportedException() @@ -81,19 +81,19 @@ public function testGetMulti() $key2 = new CacheKeyMock('key.2'); $value2 = new CacheEntryMock(['id' => 2, 'name' => 'bar']); - $this->assertFalse($this->region->contains($key1)); - $this->assertFalse($this->region->contains($key2)); + self::assertFalse($this->region->contains($key1)); + self::assertFalse($this->region->contains($key2)); $this->region->put($key1, $value1); $this->region->put($key2, $value2); - $this->assertTrue($this->region->contains($key1)); - $this->assertTrue($this->region->contains($key2)); + self::assertTrue($this->region->contains($key1)); + self::assertTrue($this->region->contains($key2)); $actual = $this->region->getMultiple(new CollectionCacheEntry([$key1, $key2])); - $this->assertEquals($value1, $actual[0]); - $this->assertEquals($value2, $actual[1]); + self::assertEquals($value1, $actual[0]); + self::assertEquals($value2, $actual[1]); } } diff --git a/tests/Doctrine/Tests/ORM/Cache/FileLockRegionTest.php b/tests/Doctrine/Tests/ORM/Cache/FileLockRegionTest.php index 1162f3c6aa6..4ac2d5f4533 100644 --- a/tests/Doctrine/Tests/ORM/Cache/FileLockRegionTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/FileLockRegionTest.php @@ -61,7 +61,7 @@ protected function createRegion() public function testGetRegionName() { - $this->assertEquals('concurren_region_test', $this->region->getName()); + self::assertEquals('concurren_region_test', $this->region->getName()); } public function testLockAndUnlock() @@ -70,22 +70,22 @@ public function testLockAndUnlock() $entry = new CacheEntryMock(['foo' => 'bar']); $file = $this->getFileName($this->region, $key); - $this->assertFalse($this->region->contains($key)); - $this->assertTrue($this->region->put($key, $entry)); - $this->assertTrue($this->region->contains($key)); + self::assertFalse($this->region->contains($key)); + self::assertTrue($this->region->put($key, $entry)); + self::assertTrue($this->region->contains($key)); $lock = $this->region->lock($key); - $this->assertFileExists($file); - $this->assertInstanceOf(Lock::class, $lock); - $this->assertEquals($lock->value, file_get_contents($file)); + self::assertFileExists($file); + self::assertInstanceOf(Lock::class, $lock); + self::assertEquals($lock->value, file_get_contents($file)); // should be not available after lock - $this->assertFalse($this->region->contains($key)); - $this->assertNull($this->region->get($key)); + self::assertFalse($this->region->contains($key)); + self::assertNull($this->region->get($key)); - $this->assertTrue($this->region->unlock($key, $lock)); - $this->assertFileNotExists($file); + self::assertTrue($this->region->unlock($key, $lock)); + self::assertFileNotExists($file); } public function testLockWithExistingLock() @@ -94,21 +94,21 @@ public function testLockWithExistingLock() $entry = new CacheEntryMock(['foo' => 'bar']); $file = $this->getFileName($this->region, $key); - $this->assertFalse($this->region->contains($key)); - $this->assertTrue($this->region->put($key, $entry)); - $this->assertTrue($this->region->contains($key)); + self::assertFalse($this->region->contains($key)); + self::assertTrue($this->region->put($key, $entry)); + self::assertTrue($this->region->contains($key)); file_put_contents($file, 'foo'); - $this->assertFileExists($file); - $this->assertEquals('foo' , file_get_contents($file)); + self::assertFileExists($file); + self::assertEquals('foo' , file_get_contents($file)); - $this->assertNull($this->region->lock($key)); - $this->assertEquals('foo' , file_get_contents($file)); - $this->assertFileExists($file); + self::assertNull($this->region->lock($key)); + self::assertEquals('foo' , file_get_contents($file)); + self::assertFileExists($file); // should be not available - $this->assertFalse($this->region->contains($key)); - $this->assertNull($this->region->get($key)); + self::assertFalse($this->region->contains($key)); + self::assertNull($this->region->get($key)); } public function testUnlockWithExistingLock() @@ -117,27 +117,27 @@ public function testUnlockWithExistingLock() $entry = new CacheEntryMock(['foo' => 'bar']); $file = $this->getFileName($this->region, $key); - $this->assertFalse($this->region->contains($key)); - $this->assertTrue($this->region->put($key, $entry)); - $this->assertTrue($this->region->contains($key)); + self::assertFalse($this->region->contains($key)); + self::assertTrue($this->region->put($key, $entry)); + self::assertTrue($this->region->contains($key)); - $this->assertInstanceOf(Lock::class, $lock = $this->region->lock($key)); - $this->assertEquals($lock->value, file_get_contents($file)); - $this->assertFileExists($file); + self::assertInstanceOf(Lock::class, $lock = $this->region->lock($key)); + self::assertEquals($lock->value, file_get_contents($file)); + self::assertFileExists($file); // change the lock file_put_contents($file, 'foo'); - $this->assertFileExists($file); - $this->assertEquals('foo' , file_get_contents($file)); + self::assertFileExists($file); + self::assertEquals('foo' , file_get_contents($file)); //try to unlock - $this->assertFalse($this->region->unlock($key, $lock)); - $this->assertEquals('foo' , file_get_contents($file)); - $this->assertFileExists($file); + self::assertFalse($this->region->unlock($key, $lock)); + self::assertEquals('foo' , file_get_contents($file)); + self::assertFileExists($file); // should be not available - $this->assertFalse($this->region->contains($key)); - $this->assertNull($this->region->get($key)); + self::assertFalse($this->region->contains($key)); + self::assertNull($this->region->get($key)); } public function testPutWithExistingLock() @@ -146,21 +146,21 @@ public function testPutWithExistingLock() $entry = new CacheEntryMock(['foo' => 'bar']); $file = $this->getFileName($this->region, $key); - $this->assertFalse($this->region->contains($key)); - $this->assertTrue($this->region->put($key, $entry)); - $this->assertTrue($this->region->contains($key)); + self::assertFalse($this->region->contains($key)); + self::assertTrue($this->region->put($key, $entry)); + self::assertTrue($this->region->contains($key)); // create lock file_put_contents($file, 'foo'); - $this->assertFileExists($file); - $this->assertEquals('foo' , file_get_contents($file)); + self::assertFileExists($file); + self::assertEquals('foo' , file_get_contents($file)); - $this->assertFalse($this->region->contains($key)); - $this->assertFalse($this->region->put($key, $entry)); - $this->assertFalse($this->region->contains($key)); + self::assertFalse($this->region->contains($key)); + self::assertFalse($this->region->put($key, $entry)); + self::assertFalse($this->region->contains($key)); - $this->assertFileExists($file); - $this->assertEquals('foo' , file_get_contents($file)); + self::assertFileExists($file); + self::assertEquals('foo' , file_get_contents($file)); } public function testLockedEvict() @@ -169,18 +169,18 @@ public function testLockedEvict() $entry = new CacheEntryMock(['foo' => 'bar']); $file = $this->getFileName($this->region, $key); - $this->assertFalse($this->region->contains($key)); - $this->assertTrue($this->region->put($key, $entry)); - $this->assertTrue($this->region->contains($key)); + self::assertFalse($this->region->contains($key)); + self::assertTrue($this->region->put($key, $entry)); + self::assertTrue($this->region->contains($key)); - $this->assertInstanceOf(Lock::class, $lock = $this->region->lock($key)); - $this->assertEquals($lock->value, file_get_contents($file)); - $this->assertFileExists($file); + self::assertInstanceOf(Lock::class, $lock = $this->region->lock($key)); + self::assertEquals($lock->value, file_get_contents($file)); + self::assertFileExists($file); - $this->assertFalse($this->region->contains($key)); - $this->assertTrue($this->region->evict($key)); - $this->assertFalse($this->region->contains($key)); - $this->assertFileNotExists($file); + self::assertFalse($this->region->contains($key)); + self::assertTrue($this->region->evict($key)); + self::assertFalse($this->region->contains($key)); + self::assertFileNotExists($file); } public function testLockedEvictAll() @@ -193,30 +193,30 @@ public function testLockedEvictAll() $entry2 = new CacheEntryMock(['foo2' => 'bar2']); $file2 = $this->getFileName($this->region, $key2); - $this->assertFalse($this->region->contains($key1)); - $this->assertTrue($this->region->put($key1, $entry1)); - $this->assertTrue($this->region->contains($key1)); + self::assertFalse($this->region->contains($key1)); + self::assertTrue($this->region->put($key1, $entry1)); + self::assertTrue($this->region->contains($key1)); - $this->assertFalse($this->region->contains($key2)); - $this->assertTrue($this->region->put($key2, $entry2)); - $this->assertTrue($this->region->contains($key2)); + self::assertFalse($this->region->contains($key2)); + self::assertTrue($this->region->put($key2, $entry2)); + self::assertTrue($this->region->contains($key2)); - $this->assertInstanceOf(Lock::class, $lock1 = $this->region->lock($key1)); - $this->assertInstanceOf(Lock::class, $lock2 = $this->region->lock($key2)); + self::assertInstanceOf(Lock::class, $lock1 = $this->region->lock($key1)); + self::assertInstanceOf(Lock::class, $lock2 = $this->region->lock($key2)); - $this->assertEquals($lock2->value, file_get_contents($file2)); - $this->assertEquals($lock1->value, file_get_contents($file1)); + self::assertEquals($lock2->value, file_get_contents($file2)); + self::assertEquals($lock1->value, file_get_contents($file1)); - $this->assertFileExists($file1); - $this->assertFileExists($file2); + self::assertFileExists($file1); + self::assertFileExists($file2); - $this->assertTrue($this->region->evictAll()); + self::assertTrue($this->region->evictAll()); - $this->assertFileNotExists($file1); - $this->assertFileNotExists($file2); + self::assertFileNotExists($file1); + self::assertFileNotExists($file2); - $this->assertFalse($this->region->contains($key1)); - $this->assertFalse($this->region->contains($key2)); + self::assertFalse($this->region->contains($key1)); + self::assertFalse($this->region->contains($key2)); } public function testLockLifetime() @@ -229,18 +229,18 @@ public function testLockLifetime() $property->setAccessible(true); $property->setValue($this->region, -10); - $this->assertFalse($this->region->contains($key)); - $this->assertTrue($this->region->put($key, $entry)); - $this->assertTrue($this->region->contains($key)); + self::assertFalse($this->region->contains($key)); + self::assertTrue($this->region->put($key, $entry)); + self::assertTrue($this->region->contains($key)); - $this->assertInstanceOf(Lock::class, $lock = $this->region->lock($key)); - $this->assertEquals($lock->value, file_get_contents($file)); - $this->assertFileExists($file); + self::assertInstanceOf(Lock::class, $lock = $this->region->lock($key)); + self::assertEquals($lock->value, file_get_contents($file)); + self::assertFileExists($file); // outdated lock should be removed - $this->assertTrue($this->region->contains($key)); - $this->assertNotNull($this->region->get($key)); - $this->assertFileNotExists($file); + self::assertTrue($this->region->contains($key)); + self::assertNotNull($this->region->get($key)); + self::assertFileNotExists($file); } /** @@ -256,7 +256,7 @@ public function testHandlesScanErrorsGracefullyOnEvictAll() $reflectionDirectory->setValue($region, str_repeat('a', 10000)); set_error_handler(function () {}, E_WARNING); - $this->assertTrue($region->evictAll()); + self::assertTrue($region->evictAll()); restore_error_handler(); } diff --git a/tests/Doctrine/Tests/ORM/Cache/MultiGetRegionTest.php b/tests/Doctrine/Tests/ORM/Cache/MultiGetRegionTest.php index 0d98665d0d0..622da0145de 100644 --- a/tests/Doctrine/Tests/ORM/Cache/MultiGetRegionTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/MultiGetRegionTest.php @@ -25,18 +25,18 @@ public function testGetMulti() $key2 = new CacheKeyMock('key.2'); $value2 = new CacheEntryMock(['id' => 2, 'name' => 'bar']); - $this->assertFalse($this->region->contains($key1)); - $this->assertFalse($this->region->contains($key2)); + self::assertFalse($this->region->contains($key1)); + self::assertFalse($this->region->contains($key2)); $this->region->put($key1, $value1); $this->region->put($key2, $value2); - $this->assertTrue($this->region->contains($key1)); - $this->assertTrue($this->region->contains($key2)); + self::assertTrue($this->region->contains($key1)); + self::assertTrue($this->region->contains($key2)); $actual = $this->region->getMultiple(new CollectionCacheEntry([$key1, $key2])); - $this->assertEquals($value1, $actual[0]); - $this->assertEquals($value2, $actual[1]); + self::assertEquals($value1, $actual[0]); + self::assertEquals($value2, $actual[1]); } } diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php index c950cea70df..68d84bb2edb 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php @@ -124,9 +124,9 @@ public function testImplementsEntityPersister() { $persister = $this->createPersisterDefault(); - $this->assertInstanceOf(CollectionPersister::class, $persister); - $this->assertInstanceOf(CachedPersister::class, $persister); - $this->assertInstanceOf(CachedCollectionPersister::class, $persister); + self::assertInstanceOf(CollectionPersister::class, $persister); + self::assertInstanceOf(CachedPersister::class, $persister); + self::assertInstanceOf(CachedCollectionPersister::class, $persister); } public function testInvokeDelete() @@ -141,7 +141,7 @@ public function testInvokeDelete() ->method('delete') ->with($this->equalTo($collection)); - $this->assertNull($persister->delete($collection)); + self::assertNull($persister->delete($collection)); } public function testInvokeUpdate() @@ -158,7 +158,7 @@ public function testInvokeUpdate() ->method('update') ->with($this->equalTo($collection)); - $this->assertNull($persister->update($collection)); + self::assertNull($persister->update($collection)); } public function testInvokeCount() @@ -174,7 +174,7 @@ public function testInvokeCount() ->with($this->equalTo($collection)) ->will($this->returnValue(0)); - $this->assertEquals(0, $persister->count($collection)); + self::assertEquals(0, $persister->count($collection)); } public function testInvokeSlice() @@ -191,7 +191,7 @@ public function testInvokeSlice() ->with($this->equalTo($collection), $this->equalTo(1), $this->equalTo(2)) ->will($this->returnValue($slice)); - $this->assertEquals($slice, $persister->slice($collection, 1 , 2)); + self::assertEquals($slice, $persister->slice($collection, 1 , 2)); } public function testInvokeContains() @@ -208,7 +208,7 @@ public function testInvokeContains() ->with($this->equalTo($collection), $this->equalTo($element)) ->will($this->returnValue(false)); - $this->assertFalse($persister->contains($collection,$element)); + self::assertFalse($persister->contains($collection,$element)); } public function testInvokeContainsKey() @@ -224,7 +224,7 @@ public function testInvokeContainsKey() ->with($this->equalTo($collection), $this->equalTo(0)) ->will($this->returnValue(false)); - $this->assertFalse($persister->containsKey($collection, 0)); + self::assertFalse($persister->containsKey($collection, 0)); } public function testInvokeRemoveElement() @@ -241,7 +241,7 @@ public function testInvokeRemoveElement() ->with($this->equalTo($collection), $this->equalTo($element)) ->will($this->returnValue(false)); - $this->assertFalse($persister->removeElement($collection, $element)); + self::assertFalse($persister->removeElement($collection, $element)); } public function testInvokeGet() @@ -258,6 +258,6 @@ public function testInvokeGet() ->with($this->equalTo($collection), $this->equalTo(0)) ->will($this->returnValue($element)); - $this->assertEquals($element, $persister->get($collection, 0)); + self::assertEquals($element, $persister->get($collection, 0)); } } diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersisterTest.php index 6b7be1f751f..e27f83fea58 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersisterTest.php @@ -153,11 +153,11 @@ public function testTransactionRollBackDeleteShouldClearQueue() $persister->delete($collection); - $this->assertCount(1, $property->getValue($persister)); + self::assertCount(1, $property->getValue($persister)); $persister->afterTransactionRolledBack(); - $this->assertCount(0, $property->getValue($persister)); + self::assertCount(0, $property->getValue($persister)); } public function testTransactionRollBackUpdateShouldClearQueue() @@ -184,11 +184,11 @@ public function testTransactionRollBackUpdateShouldClearQueue() $persister->update($collection); - $this->assertCount(1, $property->getValue($persister)); + self::assertCount(1, $property->getValue($persister)); $persister->afterTransactionRolledBack(); - $this->assertCount(0, $property->getValue($persister)); + self::assertCount(0, $property->getValue($persister)); } public function testTransactionRollCommitDeleteShouldClearQueue() @@ -215,11 +215,11 @@ public function testTransactionRollCommitDeleteShouldClearQueue() $persister->delete($collection); - $this->assertCount(1, $property->getValue($persister)); + self::assertCount(1, $property->getValue($persister)); $persister->afterTransactionComplete(); - $this->assertCount(0, $property->getValue($persister)); + self::assertCount(0, $property->getValue($persister)); } public function testTransactionRollCommitUpdateShouldClearQueue() @@ -246,11 +246,11 @@ public function testTransactionRollCommitUpdateShouldClearQueue() $persister->update($collection); - $this->assertCount(1, $property->getValue($persister)); + self::assertCount(1, $property->getValue($persister)); $persister->afterTransactionComplete(); - $this->assertCount(0, $property->getValue($persister)); + self::assertCount(0, $property->getValue($persister)); } public function testDeleteLockFailureShouldIgnoreQueue() @@ -275,7 +275,7 @@ public function testDeleteLockFailureShouldIgnoreQueue() $this->em->getUnitOfWork()->registerManaged($entity, ['id'=>1], ['id'=>1, 'name'=>'Foo']); $persister->delete($collection); - $this->assertCount(0, $property->getValue($persister)); + self::assertCount(0, $property->getValue($persister)); } public function testUpdateLockFailureShouldIgnoreQueue() @@ -300,6 +300,6 @@ public function testUpdateLockFailureShouldIgnoreQueue() $this->em->getUnitOfWork()->registerManaged($entity, ['id'=>1], ['id'=>1, 'name'=>'Foo']); $persister->update($collection); - $this->assertCount(0, $property->getValue($persister)); + self::assertCount(0, $property->getValue($persister)); } } diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php index 09c7221f522..e3311828fd6 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php @@ -126,9 +126,9 @@ public function testImplementsEntityPersister() { $persister = $this->createPersisterDefault(); - $this->assertInstanceOf(EntityPersister::class, $persister); - $this->assertInstanceOf(CachedPersister::class, $persister); - $this->assertInstanceOf(CachedEntityPersister::class, $persister); + self::assertInstanceOf(EntityPersister::class, $persister); + self::assertInstanceOf(CachedPersister::class, $persister); + self::assertInstanceOf(CachedEntityPersister::class, $persister); } public function testInvokeAddInsert() @@ -140,7 +140,7 @@ public function testInvokeAddInsert() ->method('addInsert') ->with($this->equalTo($entity)); - $this->assertNull($persister->addInsert($entity)); + self::assertNull($persister->addInsert($entity)); } public function testInvokeGetInserts() @@ -152,7 +152,7 @@ public function testInvokeGetInserts() ->method('getInserts') ->will($this->returnValue([$entity])); - $this->assertEquals([$entity], $persister->getInserts()); + self::assertEquals([$entity], $persister->getInserts()); } public function testInvokeGetSelectSQL() @@ -166,9 +166,7 @@ public function testInvokeGetSelectSQL() )) ->will($this->returnValue('SELECT * FROM foo WERE name = ?')); - $this->assertEquals('SELECT * FROM foo WERE name = ?', $persister->getSelectSQL( - ['name'=>'Foo'], [0], 1, 2, 3, [4] - )); + self::assertEquals('SELECT * FROM foo WERE name = ?', $persister->getSelectSQL(['name'=>'Foo'], [0], 1, 2, 3, [4])); } public function testInvokeGetInsertSQL() @@ -179,7 +177,7 @@ public function testInvokeGetInsertSQL() ->method('getInsertSQL') ->will($this->returnValue('INSERT INTO foo (?)')); - $this->assertEquals('INSERT INTO foo (?)', $persister->getInsertSQL()); + self::assertEquals('INSERT INTO foo (?)', $persister->getInsertSQL()); } public function testInvokeExpandParameters() @@ -191,7 +189,7 @@ public function testInvokeExpandParameters() ->with($this->equalTo(['name'=>'Foo'])) ->will($this->returnValue(['name'=>'Foo'])); - $this->assertEquals(['name'=>'Foo'], $persister->expandParameters(['name'=>'Foo'])); + self::assertEquals(['name'=>'Foo'], $persister->expandParameters(['name'=>'Foo'])); } public function testInvokeExpandCriteriaParameters() @@ -204,7 +202,7 @@ public function testInvokeExpandCriteriaParameters() ->with($this->equalTo($criteria)) ->will($this->returnValue(['name'=>'Foo'])); - $this->assertEquals(['name'=>'Foo'], $persister->expandCriteriaParameters($criteria)); + self::assertEquals(['name'=>'Foo'], $persister->expandCriteriaParameters($criteria)); } public function testInvokeSelectConditionStatementSQL() @@ -216,7 +214,7 @@ public function testInvokeSelectConditionStatementSQL() ->with($this->equalTo('id'), $this->equalTo(1), $this->equalTo([]), $this->equalTo('=')) ->will($this->returnValue('name = 1')); - $this->assertEquals('name = 1', $persister->getSelectConditionStatementSQL('id', 1, [], '=')); + self::assertEquals('name = 1', $persister->getSelectConditionStatementSQL('id', 1, [], '=')); } public function testInvokeExecuteInserts() @@ -227,7 +225,7 @@ public function testInvokeExecuteInserts() ->method('executeInserts') ->will($this->returnValue(['id' => 1])); - $this->assertEquals(['id' => 1], $persister->executeInserts()); + self::assertEquals(['id' => 1], $persister->executeInserts()); } public function testInvokeUpdate() @@ -241,7 +239,7 @@ public function testInvokeUpdate() $this->em->getUnitOfWork()->registerManaged($entity, ['id'=>1], ['id'=>1, 'name'=>'Foo']); - $this->assertNull($persister->update($entity)); + self::assertNull($persister->update($entity)); } public function testInvokeDelete() @@ -255,7 +253,7 @@ public function testInvokeDelete() $this->em->getUnitOfWork()->registerManaged($entity, ['id'=>1], ['id'=>1, 'name'=>'Foo']); - $this->assertNull($persister->delete($entity)); + self::assertNull($persister->delete($entity)); } public function testInvokeGetOwningTable() @@ -267,7 +265,7 @@ public function testInvokeGetOwningTable() ->with($this->equalTo('name')) ->will($this->returnValue('t')); - $this->assertEquals('t', $persister->getOwningTable('name')); + self::assertEquals('t', $persister->getOwningTable('name')); } public function testInvokeLoad() @@ -284,7 +282,7 @@ public function testInvokeLoad() )) ->will($this->returnValue($entity)); - $this->assertEquals($entity, $persister->load(['id' => 1], $entity, [0], [1], 2, 3, [4])); + self::assertEquals($entity, $persister->load(['id' => 1], $entity, [0], [1], 2, 3, [4])); } public function testInvokeLoadAll() @@ -306,7 +304,7 @@ public function testInvokeLoadAll() ->method('getResultSetMapping') ->will($this->returnValue($rsm)); - $this->assertEquals([$entity], $persister->loadAll(['id' => 1], [0], 1, 2)); + self::assertEquals([$entity], $persister->loadAll(['id' => 1], [0], 1, 2)); } public function testInvokeLoadById() @@ -319,7 +317,7 @@ public function testInvokeLoadById() ->with($this->equalTo(['id' => 1]), $this->equalTo($entity)) ->will($this->returnValue($entity)); - $this->assertEquals($entity, $persister->loadById(['id' => 1], $entity)); + self::assertEquals($entity, $persister->loadById(['id' => 1], $entity)); } public function testInvokeLoadOneToOneEntity() @@ -332,7 +330,7 @@ public function testInvokeLoadOneToOneEntity() ->with($this->equalTo([]), $this->equalTo('foo'), $this->equalTo(['id' => 11])) ->will($this->returnValue($entity)); - $this->assertEquals($entity, $persister->loadOneToOneEntity([], 'foo', ['id' => 11])); + self::assertEquals($entity, $persister->loadOneToOneEntity([], 'foo', ['id' => 11])); } public function testInvokeRefresh() @@ -345,7 +343,7 @@ public function testInvokeRefresh() ->with($this->equalTo(['id' => 1]), $this->equalTo($entity), $this->equalTo(0)) ->will($this->returnValue($entity)); - $this->assertNull($persister->refresh(['id' => 1], $entity), 0); + self::assertNull($persister->refresh(['id' => 1], $entity), 0); } public function testInvokeLoadCriteria() @@ -367,7 +365,7 @@ public function testInvokeLoadCriteria() ->with($this->equalTo($criteria)) ->will($this->returnValue([$entity])); - $this->assertEquals([$entity], $persister->loadCriteria($criteria)); + self::assertEquals([$entity], $persister->loadCriteria($criteria)); } public function testInvokeGetManyToManyCollection() @@ -380,7 +378,7 @@ public function testInvokeGetManyToManyCollection() ->with($this->equalTo([]), $this->equalTo('Foo'), $this->equalTo(1), $this->equalTo(2)) ->will($this->returnValue([$entity])); - $this->assertEquals([$entity], $persister->getManyToManyCollection([], 'Foo', 1 ,2)); + self::assertEquals([$entity], $persister->getManyToManyCollection([], 'Foo', 1 ,2)); } public function testInvokeGetOneToManyCollection() @@ -393,7 +391,7 @@ public function testInvokeGetOneToManyCollection() ->with($this->equalTo([]), $this->equalTo('Foo'), $this->equalTo(1), $this->equalTo(2)) ->will($this->returnValue([$entity])); - $this->assertEquals([$entity], $persister->getOneToManyCollection([], 'Foo', 1 ,2)); + self::assertEquals([$entity], $persister->getOneToManyCollection([], 'Foo', 1 ,2)); } public function testInvokeLoadManyToManyCollection() @@ -409,7 +407,7 @@ public function testInvokeLoadManyToManyCollection() ->with($this->equalTo($assoc), $this->equalTo('Foo'), $coll) ->will($this->returnValue([$entity])); - $this->assertEquals([$entity], $persister->loadManyToManyCollection($assoc, 'Foo', $coll)); + self::assertEquals([$entity], $persister->loadManyToManyCollection($assoc, 'Foo', $coll)); } public function testInvokeLoadOneToManyCollection() @@ -425,7 +423,7 @@ public function testInvokeLoadOneToManyCollection() ->with($this->equalTo($assoc), $this->equalTo('Foo'), $coll) ->will($this->returnValue([$entity])); - $this->assertEquals([$entity], $persister->loadOneToManyCollection($assoc, 'Foo', $coll)); + self::assertEquals([$entity], $persister->loadOneToManyCollection($assoc, 'Foo', $coll)); } public function testInvokeLock() @@ -437,7 +435,7 @@ public function testInvokeLock() ->method('lock') ->with($this->equalTo($identifier), $this->equalTo(1)); - $this->assertNull($persister->lock($identifier, 1)); + self::assertNull($persister->lock($identifier, 1)); } public function testInvokeExists() @@ -449,6 +447,6 @@ public function testInvokeExists() ->method('exists') ->with($this->equalTo($entity), $this->equalTo(null)); - $this->assertNull($persister->exists($entity)); + self::assertNull($persister->exists($entity)); } } diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersisterTest.php index 0f1e67b0f63..a73fe557644 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersisterTest.php @@ -37,11 +37,11 @@ public function testTransactionRollBackShouldClearQueue() $persister->update($entity); $persister->delete($entity); - $this->assertCount(2, $property->getValue($persister)); + self::assertCount(2, $property->getValue($persister)); $persister->afterTransactionRolledBack(); - $this->assertCount(0, $property->getValue($persister)); + self::assertCount(0, $property->getValue($persister)); } public function testInsertTransactionCommitShouldPutCache() @@ -74,11 +74,11 @@ public function testInsertTransactionCommitShouldPutCache() $persister->addInsert($entity); $persister->executeInserts(); - $this->assertCount(1, $property->getValue($persister)); + self::assertCount(1, $property->getValue($persister)); $persister->afterTransactionComplete(); - $this->assertCount(0, $property->getValue($persister)); + self::assertCount(0, $property->getValue($persister)); } public function testUpdateTransactionCommitShouldPutCache() @@ -103,11 +103,11 @@ public function testUpdateTransactionCommitShouldPutCache() $persister->update($entity); - $this->assertCount(1, $property->getValue($persister)); + self::assertCount(1, $property->getValue($persister)); $persister->afterTransactionComplete(); - $this->assertCount(0, $property->getValue($persister)); + self::assertCount(0, $property->getValue($persister)); } public function testDeleteTransactionCommitShouldEvictCache() @@ -131,10 +131,10 @@ public function testDeleteTransactionCommitShouldEvictCache() $persister->delete($entity); - $this->assertCount(1, $property->getValue($persister)); + self::assertCount(1, $property->getValue($persister)); $persister->afterTransactionComplete(); - $this->assertCount(0, $property->getValue($persister)); + self::assertCount(0, $property->getValue($persister)); } } diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersisterTest.php index 06748282c73..626d963036c 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersisterTest.php @@ -150,11 +150,11 @@ public function testTransactionRollBackShouldClearQueue() $persister->update($entity); $persister->delete($entity); - $this->assertCount(2, $property->getValue($persister)); + self::assertCount(2, $property->getValue($persister)); $persister->afterTransactionRolledBack(); - $this->assertCount(0, $property->getValue($persister)); + self::assertCount(0, $property->getValue($persister)); } public function testTransactionCommitShouldClearQueue() @@ -181,11 +181,11 @@ public function testTransactionCommitShouldClearQueue() $persister->update($entity); $persister->delete($entity); - $this->assertCount(2, $property->getValue($persister)); + self::assertCount(2, $property->getValue($persister)); $persister->afterTransactionComplete(); - $this->assertCount(0, $property->getValue($persister)); + self::assertCount(0, $property->getValue($persister)); } public function testDeleteLockFailureShouldIgnoreQueue() @@ -209,7 +209,7 @@ public function testDeleteLockFailureShouldIgnoreQueue() $this->em->getUnitOfWork()->registerManaged($entity, ['id'=>1], ['id'=>1, 'name'=>'Foo']); $persister->delete($entity); - $this->assertCount(0, $property->getValue($persister)); + self::assertCount(0, $property->getValue($persister)); } public function testUpdateLockFailureShouldIgnoreQueue() @@ -233,6 +233,6 @@ public function testUpdateLockFailureShouldIgnoreQueue() $this->em->getUnitOfWork()->registerManaged($entity, ['id'=>1], ['id'=>1, 'name'=>'Foo']); $persister->update($entity); - $this->assertCount(0, $property->getValue($persister)); + self::assertCount(0, $property->getValue($persister)); } } diff --git a/tests/Doctrine/Tests/ORM/Cache/StatisticsCacheLoggerTest.php b/tests/Doctrine/Tests/ORM/Cache/StatisticsCacheLoggerTest.php index e9f04f350ed..a2b7bdf725d 100644 --- a/tests/Doctrine/Tests/ORM/Cache/StatisticsCacheLoggerTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/StatisticsCacheLoggerTest.php @@ -35,12 +35,12 @@ public function testEntityCache() $this->logger->entityCachePut($name, $key); $this->logger->entityCacheMiss($name, $key); - $this->assertEquals(1, $this->logger->getHitCount()); - $this->assertEquals(1, $this->logger->getPutCount()); - $this->assertEquals(1, $this->logger->getMissCount()); - $this->assertEquals(1, $this->logger->getRegionHitCount($name)); - $this->assertEquals(1, $this->logger->getRegionPutCount($name)); - $this->assertEquals(1, $this->logger->getRegionMissCount($name)); + self::assertEquals(1, $this->logger->getHitCount()); + self::assertEquals(1, $this->logger->getPutCount()); + self::assertEquals(1, $this->logger->getMissCount()); + self::assertEquals(1, $this->logger->getRegionHitCount($name)); + self::assertEquals(1, $this->logger->getRegionPutCount($name)); + self::assertEquals(1, $this->logger->getRegionMissCount($name)); } public function testCollectionCache() @@ -52,12 +52,12 @@ public function testCollectionCache() $this->logger->collectionCachePut($name, $key); $this->logger->collectionCacheMiss($name, $key); - $this->assertEquals(1, $this->logger->getHitCount()); - $this->assertEquals(1, $this->logger->getPutCount()); - $this->assertEquals(1, $this->logger->getMissCount()); - $this->assertEquals(1, $this->logger->getRegionHitCount($name)); - $this->assertEquals(1, $this->logger->getRegionPutCount($name)); - $this->assertEquals(1, $this->logger->getRegionMissCount($name)); + self::assertEquals(1, $this->logger->getHitCount()); + self::assertEquals(1, $this->logger->getPutCount()); + self::assertEquals(1, $this->logger->getMissCount()); + self::assertEquals(1, $this->logger->getRegionHitCount($name)); + self::assertEquals(1, $this->logger->getRegionPutCount($name)); + self::assertEquals(1, $this->logger->getRegionMissCount($name)); } public function testQueryCache() @@ -69,12 +69,12 @@ public function testQueryCache() $this->logger->queryCachePut($name, $key); $this->logger->queryCacheMiss($name, $key); - $this->assertEquals(1, $this->logger->getHitCount()); - $this->assertEquals(1, $this->logger->getPutCount()); - $this->assertEquals(1, $this->logger->getMissCount()); - $this->assertEquals(1, $this->logger->getRegionHitCount($name)); - $this->assertEquals(1, $this->logger->getRegionPutCount($name)); - $this->assertEquals(1, $this->logger->getRegionMissCount($name)); + self::assertEquals(1, $this->logger->getHitCount()); + self::assertEquals(1, $this->logger->getPutCount()); + self::assertEquals(1, $this->logger->getMissCount()); + self::assertEquals(1, $this->logger->getRegionHitCount($name)); + self::assertEquals(1, $this->logger->getRegionPutCount($name)); + self::assertEquals(1, $this->logger->getRegionMissCount($name)); } public function testMultipleCaches() @@ -99,36 +99,36 @@ public function testMultipleCaches() $this->logger->collectionCachePut($coolRegion, $coolKey); $this->logger->collectionCacheMiss($coolRegion, $coolKey); - $this->assertEquals(3, $this->logger->getHitCount()); - $this->assertEquals(3, $this->logger->getPutCount()); - $this->assertEquals(3, $this->logger->getMissCount()); + self::assertEquals(3, $this->logger->getHitCount()); + self::assertEquals(3, $this->logger->getPutCount()); + self::assertEquals(3, $this->logger->getMissCount()); - $this->assertEquals(1, $this->logger->getRegionHitCount($queryRegion)); - $this->assertEquals(1, $this->logger->getRegionPutCount($queryRegion)); - $this->assertEquals(1, $this->logger->getRegionMissCount($queryRegion)); + self::assertEquals(1, $this->logger->getRegionHitCount($queryRegion)); + self::assertEquals(1, $this->logger->getRegionPutCount($queryRegion)); + self::assertEquals(1, $this->logger->getRegionMissCount($queryRegion)); - $this->assertEquals(1, $this->logger->getRegionHitCount($coolRegion)); - $this->assertEquals(1, $this->logger->getRegionPutCount($coolRegion)); - $this->assertEquals(1, $this->logger->getRegionMissCount($coolRegion)); + self::assertEquals(1, $this->logger->getRegionHitCount($coolRegion)); + self::assertEquals(1, $this->logger->getRegionPutCount($coolRegion)); + self::assertEquals(1, $this->logger->getRegionMissCount($coolRegion)); - $this->assertEquals(1, $this->logger->getRegionHitCount($entityRegion)); - $this->assertEquals(1, $this->logger->getRegionPutCount($entityRegion)); - $this->assertEquals(1, $this->logger->getRegionMissCount($entityRegion)); + self::assertEquals(1, $this->logger->getRegionHitCount($entityRegion)); + self::assertEquals(1, $this->logger->getRegionPutCount($entityRegion)); + self::assertEquals(1, $this->logger->getRegionMissCount($entityRegion)); $miss = $this->logger->getRegionsMiss(); $hit = $this->logger->getRegionsHit(); $put = $this->logger->getRegionsPut(); - $this->assertArrayHasKey($coolRegion, $miss); - $this->assertArrayHasKey($queryRegion, $miss); - $this->assertArrayHasKey($entityRegion, $miss); + self::assertArrayHasKey($coolRegion, $miss); + self::assertArrayHasKey($queryRegion, $miss); + self::assertArrayHasKey($entityRegion, $miss); - $this->assertArrayHasKey($coolRegion, $put); - $this->assertArrayHasKey($queryRegion, $put); - $this->assertArrayHasKey($entityRegion, $put); + self::assertArrayHasKey($coolRegion, $put); + self::assertArrayHasKey($queryRegion, $put); + self::assertArrayHasKey($entityRegion, $put); - $this->assertArrayHasKey($coolRegion, $hit); - $this->assertArrayHasKey($queryRegion, $hit); - $this->assertArrayHasKey($entityRegion, $hit); + self::assertArrayHasKey($coolRegion, $hit); + self::assertArrayHasKey($queryRegion, $hit); + self::assertArrayHasKey($entityRegion, $hit); } } diff --git a/tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php b/tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php index 8c9ec26c44d..256fdd3d6ab 100644 --- a/tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php +++ b/tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php @@ -46,7 +46,7 @@ public function testCommitOrdering1() // There is only 1 valid ordering for this constellation $correctOrder = [$class5, $class1, $class2, $class3, $class4]; - $this->assertSame($correctOrder, $sorted); + self::assertSame($correctOrder, $sorted); } public function testCommitOrdering2() @@ -65,7 +65,7 @@ public function testCommitOrdering2() // There is only 1 valid ordering for this constellation $correctOrder = [$class2, $class1]; - $this->assertSame($correctOrder, $sorted); + self::assertSame($correctOrder, $sorted); } } diff --git a/tests/Doctrine/Tests/ORM/ConfigurationTest.php b/tests/Doctrine/Tests/ORM/ConfigurationTest.php index cc54d305afd..3c93d648fa4 100644 --- a/tests/Doctrine/Tests/ORM/ConfigurationTest.php +++ b/tests/Doctrine/Tests/ORM/ConfigurationTest.php @@ -40,41 +40,41 @@ protected function setUp() public function testSetGetProxyDir() { - $this->assertSame(null, $this->configuration->getProxyDir()); // defaults + self::assertSame(null, $this->configuration->getProxyDir()); // defaults $this->configuration->setProxyDir(__DIR__); - $this->assertSame(__DIR__, $this->configuration->getProxyDir()); + self::assertSame(__DIR__, $this->configuration->getProxyDir()); } public function testSetGetAutoGenerateProxyClasses() { - $this->assertSame(AbstractProxyFactory::AUTOGENERATE_ALWAYS, $this->configuration->getAutoGenerateProxyClasses()); // defaults + self::assertSame(AbstractProxyFactory::AUTOGENERATE_ALWAYS, $this->configuration->getAutoGenerateProxyClasses()); // defaults $this->configuration->setAutoGenerateProxyClasses(false); - $this->assertSame(AbstractProxyFactory::AUTOGENERATE_NEVER, $this->configuration->getAutoGenerateProxyClasses()); + self::assertSame(AbstractProxyFactory::AUTOGENERATE_NEVER, $this->configuration->getAutoGenerateProxyClasses()); $this->configuration->setAutoGenerateProxyClasses(true); - $this->assertSame(AbstractProxyFactory::AUTOGENERATE_ALWAYS, $this->configuration->getAutoGenerateProxyClasses()); + self::assertSame(AbstractProxyFactory::AUTOGENERATE_ALWAYS, $this->configuration->getAutoGenerateProxyClasses()); $this->configuration->setAutoGenerateProxyClasses(AbstractProxyFactory::AUTOGENERATE_FILE_NOT_EXISTS); - $this->assertSame(AbstractProxyFactory::AUTOGENERATE_FILE_NOT_EXISTS, $this->configuration->getAutoGenerateProxyClasses()); + self::assertSame(AbstractProxyFactory::AUTOGENERATE_FILE_NOT_EXISTS, $this->configuration->getAutoGenerateProxyClasses()); } public function testSetGetProxyNamespace() { - $this->assertSame(null, $this->configuration->getProxyNamespace()); // defaults + self::assertSame(null, $this->configuration->getProxyNamespace()); // defaults $this->configuration->setProxyNamespace(__NAMESPACE__); - $this->assertSame(__NAMESPACE__, $this->configuration->getProxyNamespace()); + self::assertSame(__NAMESPACE__, $this->configuration->getProxyNamespace()); } public function testSetGetMetadataDriverImpl() { - $this->assertSame(null, $this->configuration->getMetadataDriverImpl()); // defaults + self::assertSame(null, $this->configuration->getMetadataDriverImpl()); // defaults $metadataDriver = $this->createMock(MappingDriver::class); $this->configuration->setMetadataDriverImpl($metadataDriver); - $this->assertSame($metadataDriver, $this->configuration->getMetadataDriverImpl()); + self::assertSame($metadataDriver, $this->configuration->getMetadataDriverImpl()); } public function testNewDefaultAnnotationDriver() @@ -88,7 +88,7 @@ public function testNewDefaultAnnotationDriver() $reflectionClass->getMethod('namespacedAnnotationMethod'), AnnotationNamespace\PrePersist::class ); - $this->assertInstanceOf(AnnotationNamespace\PrePersist::class, $annotation); + self::assertInstanceOf(AnnotationNamespace\PrePersist::class, $annotation); $annotationDriver = $this->configuration->newDefaultAnnotationDriver($paths); $reader = $annotationDriver->getReader(); @@ -96,49 +96,49 @@ public function testNewDefaultAnnotationDriver() $reflectionClass->getMethod('simpleAnnotationMethod'), AnnotationNamespace\PrePersist::class ); - $this->assertInstanceOf(AnnotationNamespace\PrePersist::class, $annotation); + self::assertInstanceOf(AnnotationNamespace\PrePersist::class, $annotation); } public function testSetGetEntityNamespace() { $this->configuration->addEntityNamespace('TestNamespace', __NAMESPACE__); - $this->assertSame(__NAMESPACE__, $this->configuration->getEntityNamespace('TestNamespace')); + self::assertSame(__NAMESPACE__, $this->configuration->getEntityNamespace('TestNamespace')); $namespaces = ['OtherNamespace' => __NAMESPACE__]; $this->configuration->setEntityNamespaces($namespaces); - $this->assertSame($namespaces, $this->configuration->getEntityNamespaces()); + self::assertSame($namespaces, $this->configuration->getEntityNamespaces()); $this->expectException(ORMException::class); $this->configuration->getEntityNamespace('NonExistingNamespace'); } public function testSetGetQueryCacheImpl() { - $this->assertSame(null, $this->configuration->getQueryCacheImpl()); // defaults + self::assertSame(null, $this->configuration->getQueryCacheImpl()); // defaults $queryCacheImpl = $this->createMock(Cache::class); $this->configuration->setQueryCacheImpl($queryCacheImpl); - $this->assertSame($queryCacheImpl, $this->configuration->getQueryCacheImpl()); + self::assertSame($queryCacheImpl, $this->configuration->getQueryCacheImpl()); } public function testSetGetHydrationCacheImpl() { - $this->assertSame(null, $this->configuration->getHydrationCacheImpl()); // defaults + self::assertSame(null, $this->configuration->getHydrationCacheImpl()); // defaults $queryCacheImpl = $this->createMock(Cache::class); $this->configuration->setHydrationCacheImpl($queryCacheImpl); - $this->assertSame($queryCacheImpl, $this->configuration->getHydrationCacheImpl()); + self::assertSame($queryCacheImpl, $this->configuration->getHydrationCacheImpl()); } public function testSetGetMetadataCacheImpl() { - $this->assertSame(null, $this->configuration->getMetadataCacheImpl()); // defaults + self::assertSame(null, $this->configuration->getMetadataCacheImpl()); // defaults $queryCacheImpl = $this->createMock(Cache::class); $this->configuration->setMetadataCacheImpl($queryCacheImpl); - $this->assertSame($queryCacheImpl, $this->configuration->getMetadataCacheImpl()); + self::assertSame($queryCacheImpl, $this->configuration->getMetadataCacheImpl()); } public function testAddGetNamedQuery() { $dql = 'SELECT u FROM User u'; $this->configuration->addNamedQuery('QueryName', $dql); - $this->assertSame($dql, $this->configuration->getNamedQuery('QueryName')); + self::assertSame($dql, $this->configuration->getNamedQuery('QueryName')); $this->expectException(ORMException::class); $this->expectExceptionMessage('a named query'); $this->configuration->getNamedQuery('NonExistingQuery'); @@ -150,8 +150,8 @@ public function testAddGetNamedNativeQuery() $rsm = $this->createMock(ResultSetMapping::class); $this->configuration->addNamedNativeQuery('QueryName', $sql, $rsm); $fetched = $this->configuration->getNamedNativeQuery('QueryName'); - $this->assertSame($sql, $fetched[0]); - $this->assertSame($rsm, $fetched[1]); + self::assertSame($sql, $fetched[0]); + self::assertSame($rsm, $fetched[1]); $this->expectException(ORMException::class); $this->expectExceptionMessage('a named native query'); $this->configuration->getNamedNativeQuery('NonExistingQuery'); @@ -263,41 +263,59 @@ public function testEnsureProductionSettingsAutoGenerateProxyClassesEval() public function testAddGetCustomStringFunction() { $this->configuration->addCustomStringFunction('FunctionName', __CLASS__); - $this->assertSame(__CLASS__, $this->configuration->getCustomStringFunction('FunctionName')); - $this->assertSame(null, $this->configuration->getCustomStringFunction('NonExistingFunction')); + + self::assertSame(__CLASS__, $this->configuration->getCustomStringFunction('FunctionName')); + self::assertSame(null, $this->configuration->getCustomStringFunction('NonExistingFunction')); + $this->configuration->setCustomStringFunctions(['OtherFunctionName' => __CLASS__]); - $this->assertSame(__CLASS__, $this->configuration->getCustomStringFunction('OtherFunctionName')); + + self::assertSame(__CLASS__, $this->configuration->getCustomStringFunction('OtherFunctionName')); + + $this->expectException(ORMException::class); + $this->configuration->addCustomStringFunction('concat', __CLASS__); } public function testAddGetCustomNumericFunction() { $this->configuration->addCustomNumericFunction('FunctionName', __CLASS__); - $this->assertSame(__CLASS__, $this->configuration->getCustomNumericFunction('FunctionName')); - $this->assertSame(null, $this->configuration->getCustomNumericFunction('NonExistingFunction')); + + self::assertSame(__CLASS__, $this->configuration->getCustomNumericFunction('FunctionName')); + self::assertSame(null, $this->configuration->getCustomNumericFunction('NonExistingFunction')); + $this->configuration->setCustomNumericFunctions(['OtherFunctionName' => __CLASS__]); - $this->assertSame(__CLASS__, $this->configuration->getCustomNumericFunction('OtherFunctionName')); + + self::assertSame(__CLASS__, $this->configuration->getCustomNumericFunction('OtherFunctionName')); + + $this->expectException(ORMException::class); + $this->configuration->addCustomNumericFunction('abs', __CLASS__); } public function testAddGetCustomDatetimeFunction() { $this->configuration->addCustomDatetimeFunction('FunctionName', __CLASS__); - $this->assertSame(__CLASS__, $this->configuration->getCustomDatetimeFunction('FunctionName')); - $this->assertSame(null, $this->configuration->getCustomDatetimeFunction('NonExistingFunction')); + + self::assertSame(__CLASS__, $this->configuration->getCustomDatetimeFunction('FunctionName')); + self::assertSame(null, $this->configuration->getCustomDatetimeFunction('NonExistingFunction')); + $this->configuration->setCustomDatetimeFunctions(['OtherFunctionName' => __CLASS__]); - $this->assertSame(__CLASS__, $this->configuration->getCustomDatetimeFunction('OtherFunctionName')); + + self::assertSame(__CLASS__, $this->configuration->getCustomDatetimeFunction('OtherFunctionName')); + + $this->expectException(ORMException::class); + $this->configuration->addCustomDatetimeFunction('date_add', __CLASS__); } public function testAddGetCustomHydrationMode() { - $this->assertSame(null, $this->configuration->getCustomHydrationMode('NonExisting')); + self::assertSame(null, $this->configuration->getCustomHydrationMode('NonExisting')); $this->configuration->addCustomHydrationMode('HydrationModeName', __CLASS__); - $this->assertSame(__CLASS__, $this->configuration->getCustomHydrationMode('HydrationModeName')); + self::assertSame(__CLASS__, $this->configuration->getCustomHydrationMode('HydrationModeName')); } public function testSetCustomHydrationModes() { $this->configuration->addCustomHydrationMode('HydrationModeName', __CLASS__); - $this->assertSame(__CLASS__, $this->configuration->getCustomHydrationMode('HydrationModeName')); + self::assertSame(__CLASS__, $this->configuration->getCustomHydrationMode('HydrationModeName')); $this->configuration->setCustomHydrationModes( [ @@ -305,47 +323,47 @@ public function testSetCustomHydrationModes() ] ); - $this->assertNull($this->configuration->getCustomHydrationMode('HydrationModeName')); - $this->assertSame(__CLASS__, $this->configuration->getCustomHydrationMode('AnotherHydrationModeName')); + self::assertNull($this->configuration->getCustomHydrationMode('HydrationModeName')); + self::assertSame(__CLASS__, $this->configuration->getCustomHydrationMode('AnotherHydrationModeName')); } public function testSetGetClassMetadataFactoryName() { - $this->assertSame(ClassMetadataFactory::class, $this->configuration->getClassMetadataFactoryName()); + self::assertSame(ClassMetadataFactory::class, $this->configuration->getClassMetadataFactoryName()); $this->configuration->setClassMetadataFactoryName(__CLASS__); - $this->assertSame(__CLASS__, $this->configuration->getClassMetadataFactoryName()); + self::assertSame(__CLASS__, $this->configuration->getClassMetadataFactoryName()); } public function testAddGetFilters() { - $this->assertSame(null, $this->configuration->getFilterClassName('NonExistingFilter')); + self::assertSame(null, $this->configuration->getFilterClassName('NonExistingFilter')); $this->configuration->addFilter('FilterName', __CLASS__); - $this->assertSame(__CLASS__, $this->configuration->getFilterClassName('FilterName')); + self::assertSame(__CLASS__, $this->configuration->getFilterClassName('FilterName')); } public function setDefaultRepositoryClassName() { - $this->assertSame(EntityRepository::class, $this->configuration->getDefaultRepositoryClassName()); + self::assertSame(EntityRepository::class, $this->configuration->getDefaultRepositoryClassName()); $this->configuration->setDefaultRepositoryClassName(DDC753CustomRepository::class); - $this->assertSame(DDC753CustomRepository::class, $this->configuration->getDefaultRepositoryClassName()); + self::assertSame(DDC753CustomRepository::class, $this->configuration->getDefaultRepositoryClassName()); $this->expectException(ORMException::class); $this->configuration->setDefaultRepositoryClassName(__CLASS__); } public function testSetGetNamingStrategy() { - $this->assertInstanceOf(NamingStrategy::class, $this->configuration->getNamingStrategy()); + self::assertInstanceOf(NamingStrategy::class, $this->configuration->getNamingStrategy()); $namingStrategy = $this->createMock(NamingStrategy::class); $this->configuration->setNamingStrategy($namingStrategy); - $this->assertSame($namingStrategy, $this->configuration->getNamingStrategy()); + self::assertSame($namingStrategy, $this->configuration->getNamingStrategy()); } public function testSetGetQuoteStrategy() { - $this->assertInstanceOf(QuoteStrategy::class, $this->configuration->getQuoteStrategy()); + self::assertInstanceOf(QuoteStrategy::class, $this->configuration->getQuoteStrategy()); $quoteStrategy = $this->createMock(QuoteStrategy::class); $this->configuration->setQuoteStrategy($quoteStrategy); - $this->assertSame($quoteStrategy, $this->configuration->getQuoteStrategy()); + self::assertSame($quoteStrategy, $this->configuration->getQuoteStrategy()); } /** @@ -353,11 +371,11 @@ public function testSetGetQuoteStrategy() */ public function testSetGetEntityListenerResolver() { - $this->assertInstanceOf(EntityListenerResolver::class, $this->configuration->getEntityListenerResolver()); - $this->assertInstanceOf(DefaultEntityListenerResolver::class, $this->configuration->getEntityListenerResolver()); + self::assertInstanceOf(EntityListenerResolver::class, $this->configuration->getEntityListenerResolver()); + self::assertInstanceOf(DefaultEntityListenerResolver::class, $this->configuration->getEntityListenerResolver()); $resolver = $this->createMock(EntityListenerResolver::class); $this->configuration->setEntityListenerResolver($resolver); - $this->assertSame($resolver, $this->configuration->getEntityListenerResolver()); + self::assertSame($resolver, $this->configuration->getEntityListenerResolver()); } /** @@ -367,9 +385,9 @@ public function testSetGetSecondLevelCacheConfig() { $mockClass = $this->createMock(CacheConfiguration::class); - $this->assertNull($this->configuration->getSecondLevelCacheConfiguration()); + self::assertNull($this->configuration->getSecondLevelCacheConfiguration()); $this->configuration->setSecondLevelCacheConfiguration($mockClass); - $this->assertEquals($mockClass, $this->configuration->getSecondLevelCacheConfiguration()); + self::assertEquals($mockClass, $this->configuration->getSecondLevelCacheConfiguration()); } } diff --git a/tests/Doctrine/Tests/ORM/Entity/ConstructorTest.php b/tests/Doctrine/Tests/ORM/Entity/ConstructorTest.php index 117525eca32..f7efba2a5cf 100644 --- a/tests/Doctrine/Tests/ORM/Entity/ConstructorTest.php +++ b/tests/Doctrine/Tests/ORM/Entity/ConstructorTest.php @@ -9,7 +9,7 @@ class ConstructorTest extends OrmTestCase public function testFieldInitializationInConstructor() { $entity = new ConstructorTestEntity1("romanb"); - $this->assertEquals("romanb", $entity->username); + self::assertEquals("romanb", $entity->username); } } diff --git a/tests/Doctrine/Tests/ORM/EntityManagerTest.php b/tests/Doctrine/Tests/ORM/EntityManagerTest.php index 7f36bb285b1..0d3bf0e3c93 100644 --- a/tests/Doctrine/Tests/ORM/EntityManagerTest.php +++ b/tests/Doctrine/Tests/ORM/EntityManagerTest.php @@ -39,39 +39,39 @@ function setUp() */ public function testIsOpen() { - $this->assertTrue($this->_em->isOpen()); + self::assertTrue($this->_em->isOpen()); $this->_em->close(); - $this->assertFalse($this->_em->isOpen()); + self::assertFalse($this->_em->isOpen()); } public function testGetConnection() { - $this->assertInstanceOf(Connection::class, $this->_em->getConnection()); + self::assertInstanceOf(Connection::class, $this->_em->getConnection()); } public function testGetMetadataFactory() { - $this->assertInstanceOf(ClassMetadataFactory::class, $this->_em->getMetadataFactory()); + self::assertInstanceOf(ClassMetadataFactory::class, $this->_em->getMetadataFactory()); } public function testGetConfiguration() { - $this->assertInstanceOf(Configuration::class, $this->_em->getConfiguration()); + self::assertInstanceOf(Configuration::class, $this->_em->getConfiguration()); } public function testGetUnitOfWork() { - $this->assertInstanceOf(UnitOfWork::class, $this->_em->getUnitOfWork()); + self::assertInstanceOf(UnitOfWork::class, $this->_em->getUnitOfWork()); } public function testGetProxyFactory() { - $this->assertInstanceOf(ProxyFactory::class, $this->_em->getProxyFactory()); + self::assertInstanceOf(ProxyFactory::class, $this->_em->getProxyFactory()); } public function testGetEventManager() { - $this->assertInstanceOf(EventManager::class, $this->_em->getEventManager()); + self::assertInstanceOf(EventManager::class, $this->_em->getEventManager()); } public function testCreateNativeQuery() @@ -79,7 +79,7 @@ public function testCreateNativeQuery() $rsm = new ResultSetMapping(); $query = $this->_em->createNativeQuery('SELECT foo', $rsm); - $this->assertSame('SELECT foo', $query->getSql()); + self::assertSame('SELECT foo', $query->getSql()); } /** @@ -92,12 +92,12 @@ public function testCreateNamedNativeQuery() $query = $this->_em->createNamedNativeQuery('foo'); - $this->assertInstanceOf(NativeQuery::class, $query); + self::assertInstanceOf(NativeQuery::class, $query); } public function testCreateQueryBuilder() { - $this->assertInstanceOf(QueryBuilder::class, $this->_em->createQueryBuilder()); + self::assertInstanceOf(QueryBuilder::class, $this->_em->createQueryBuilder()); } public function testCreateQueryBuilderAliasValid() @@ -106,32 +106,32 @@ public function testCreateQueryBuilderAliasValid() ->select('u')->from(CmsUser::class, 'u'); $q2 = clone $q; - $this->assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u', $q->getQuery()->getDql()); - $this->assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u', $q2->getQuery()->getDql()); + self::assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u', $q->getQuery()->getDql()); + self::assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u', $q2->getQuery()->getDql()); $q3 = clone $q; - $this->assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u', $q3->getQuery()->getDql()); + self::assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u', $q3->getQuery()->getDql()); } public function testCreateQuery_DqlIsOptional() { - $this->assertInstanceOf(Query::class, $this->_em->createQuery()); + self::assertInstanceOf(Query::class, $this->_em->createQuery()); } public function testGetPartialReference() { $user = $this->_em->getPartialReference(CmsUser::class, 42); - $this->assertTrue($this->_em->contains($user)); - $this->assertEquals(42, $user->id); - $this->assertNull($user->getName()); + self::assertTrue($this->_em->contains($user)); + self::assertEquals(42, $user->id); + self::assertNull($user->getName()); } public function testCreateQuery() { $q = $this->_em->createQuery('SELECT 1'); - $this->assertInstanceOf(Query::class, $q); - $this->assertEquals('SELECT 1', $q->getDql()); + self::assertInstanceOf(Query::class, $q); + self::assertEquals('SELECT 1', $q->getDql()); } /** @@ -142,8 +142,8 @@ public function testCreateNamedQuery() $this->_em->getConfiguration()->addNamedQuery('foo', 'SELECT 1'); $query = $this->_em->createNamedQuery('foo'); - $this->assertInstanceOf(Query::class, $query); - $this->assertEquals('SELECT 1', $query->getDql()); + self::assertInstanceOf(Query::class, $query); + self::assertEquals('SELECT 1', $query->getDql()); } static public function dataMethodsAffectedByNoObjectArguments() @@ -200,12 +200,12 @@ public function testTransactionalAcceptsReturn() return 'foo'; }); - $this->assertEquals('foo', $return); + self::assertEquals('foo', $return); } public function testTransactionalAcceptsVariousCallables() { - $this->assertSame('callback', $this->_em->transactional([$this, 'transactionalCallback'])); + self::assertSame('callback', $this->_em->transactional([$this, 'transactionalCallback'])); } public function testTransactionalThrowsInvalidArgumentExceptionIfNonCallablePassed() @@ -218,7 +218,7 @@ public function testTransactionalThrowsInvalidArgumentExceptionIfNonCallablePass public function transactionalCallback($em) { - $this->assertSame($this->_em, $em); + self::assertSame($this->_em, $em); return 'callback'; } diff --git a/tests/Doctrine/Tests/ORM/EntityNotFoundExceptionTest.php b/tests/Doctrine/Tests/ORM/EntityNotFoundExceptionTest.php index ec1cfbfc99c..f1908142f0f 100644 --- a/tests/Doctrine/Tests/ORM/EntityNotFoundExceptionTest.php +++ b/tests/Doctrine/Tests/ORM/EntityNotFoundExceptionTest.php @@ -19,15 +19,15 @@ public function testFromClassNameAndIdentifier() ['foo' => 'bar'] ); - $this->assertInstanceOf(EntityNotFoundException::class, $exception); - $this->assertSame('Entity of type \'foo\' for IDs foo(bar) was not found', $exception->getMessage()); + self::assertInstanceOf(EntityNotFoundException::class, $exception); + self::assertSame('Entity of type \'foo\' for IDs foo(bar) was not found', $exception->getMessage()); $exception = EntityNotFoundException::fromClassNameAndIdentifier( 'foo', [] ); - $this->assertInstanceOf(EntityNotFoundException::class, $exception); - $this->assertSame('Entity of type \'foo\' was not found', $exception->getMessage()); + self::assertInstanceOf(EntityNotFoundException::class, $exception); + self::assertSame('Entity of type \'foo\' was not found', $exception->getMessage()); } } diff --git a/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php b/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php index e5f62bd26ae..7cc025049b6 100644 --- a/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php +++ b/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php @@ -21,20 +21,20 @@ public function testEventArgsMutability() $args = new OnClassMetadataNotFoundEventArgs('foo', $objectManager); - $this->assertSame('foo', $args->getClassName()); - $this->assertSame($objectManager, $args->getObjectManager()); + self::assertSame('foo', $args->getClassName()); + self::assertSame($objectManager, $args->getObjectManager()); - $this->assertNull($args->getFoundMetadata()); + self::assertNull($args->getFoundMetadata()); /* @var $metadata \Doctrine\Common\Persistence\Mapping\ClassMetadata */ $metadata = $this->createMock(ClassMetadata::class); $args->setFoundMetadata($metadata); - $this->assertSame($metadata, $args->getFoundMetadata()); + self::assertSame($metadata, $args->getFoundMetadata()); $args->setFoundMetadata(null); - $this->assertNull($args->getFoundMetadata()); + self::assertNull($args->getFoundMetadata()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/AbstractManyToManyAssociationTestCase.php b/tests/Doctrine/Tests/ORM/Functional/AbstractManyToManyAssociationTestCase.php index 26445c1417a..f2eabe4d68d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/AbstractManyToManyAssociationTestCase.php +++ b/tests/Doctrine/Tests/ORM/Functional/AbstractManyToManyAssociationTestCase.php @@ -16,12 +16,12 @@ class AbstractManyToManyAssociationTestCase extends OrmFunctionalTestCase public function assertForeignKeysContain($firstId, $secondId) { - $this->assertEquals(1, $this->_countForeignKeys($firstId, $secondId)); + self::assertEquals(1, $this->_countForeignKeys($firstId, $secondId)); } public function assertForeignKeysNotContain($firstId, $secondId) { - $this->assertEquals(0, $this->_countForeignKeys($firstId, $secondId)); + self::assertEquals(0, $this->_countForeignKeys($firstId, $secondId)); } protected function _countForeignKeys($firstId, $secondId) diff --git a/tests/Doctrine/Tests/ORM/Functional/AdvancedAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/AdvancedAssociationTest.php index e6714500cd5..7d2950d894f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/AdvancedAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/AdvancedAssociationTest.php @@ -58,35 +58,35 @@ public function testIssue() // test1 - lazy-loading many-to-one after find() $phrase2 = $this->_em->find(Phrase::class, $phrase->getId()); - $this->assertTrue(is_numeric($phrase2->getType()->getId())); + self::assertTrue(is_numeric($phrase2->getType()->getId())); $this->_em->clear(); // test2 - eager load in DQL query $query = $this->_em->createQuery("SELECT p,t FROM Doctrine\Tests\ORM\Functional\Phrase p JOIN p.type t"); $res = $query->getResult(); - $this->assertEquals(1, count($res)); - $this->assertInstanceOf(PhraseType::class, $res[0]->getType()); - $this->assertInstanceOf(PersistentCollection::class, $res[0]->getType()->getPhrases()); - $this->assertFalse($res[0]->getType()->getPhrases()->isInitialized()); + self::assertEquals(1, count($res)); + self::assertInstanceOf(PhraseType::class, $res[0]->getType()); + self::assertInstanceOf(PersistentCollection::class, $res[0]->getType()->getPhrases()); + self::assertFalse($res[0]->getType()->getPhrases()->isInitialized()); $this->_em->clear(); // test2 - eager load in DQL query with double-join back and forth $query = $this->_em->createQuery("SELECT p,t,pp FROM Doctrine\Tests\ORM\Functional\Phrase p JOIN p.type t JOIN t.phrases pp"); $res = $query->getResult(); - $this->assertEquals(1, count($res)); - $this->assertInstanceOf(PhraseType::class, $res[0]->getType()); - $this->assertInstanceOf(PersistentCollection::class, $res[0]->getType()->getPhrases()); - $this->assertTrue($res[0]->getType()->getPhrases()->isInitialized()); + self::assertEquals(1, count($res)); + self::assertInstanceOf(PhraseType::class, $res[0]->getType()); + self::assertInstanceOf(PersistentCollection::class, $res[0]->getType()->getPhrases()); + self::assertTrue($res[0]->getType()->getPhrases()->isInitialized()); $this->_em->clear(); // test3 - lazy-loading one-to-many after find() $phrase3 = $this->_em->find(Phrase::class, $phrase->getId()); $definitions = $phrase3->getDefinitions(); - $this->assertInstanceOf(PersistentCollection::class, $definitions); - $this->assertInstanceOf(Definition::class, $definitions[0]); + self::assertInstanceOf(PersistentCollection::class, $definitions); + self::assertInstanceOf(Definition::class, $definitions[0]); $this->_em->clear(); @@ -95,10 +95,10 @@ public function testIssue() $res = $query->getResult(); $definitions = $res[0]->getDefinitions(); - $this->assertEquals(1, count($res)); + self::assertEquals(1, count($res)); - $this->assertInstanceOf(Definition::class, $definitions[0]); - $this->assertEquals(2, $definitions->count()); + self::assertInstanceOf(Definition::class, $definitions[0]); + self::assertEquals(2, $definitions->count()); } public function testManyToMany() @@ -121,7 +121,7 @@ public function testManyToMany() $res = $query->getResult(); $types = $res[0]->getTypes(); - $this->assertInstanceOf(Type::class, $types[0]); + self::assertInstanceOf(Type::class, $types[0]); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/AdvancedDqlQueryTest.php b/tests/Doctrine/Tests/ORM/Functional/AdvancedDqlQueryTest.php index a7c35412b52..c4080d5454b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/AdvancedDqlQueryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/AdvancedDqlQueryTest.php @@ -30,11 +30,11 @@ public function testAggregateWithHavingClause() $result = $this->_em->createQuery($dql)->getScalarResult(); - $this->assertEquals(2, count($result)); - $this->assertEquals('IT', $result[0]['department']); - $this->assertEquals(150000, $result[0]['avgSalary']); - $this->assertEquals('IT2', $result[1]['department']); - $this->assertEquals(600000, $result[1]['avgSalary']); + self::assertEquals(2, count($result)); + self::assertEquals('IT', $result[0]['department']); + self::assertEquals(150000, $result[0]['avgSalary']); + self::assertEquals('IT2', $result[1]['department']); + self::assertEquals(600000, $result[1]['avgSalary']); } public function testUnnamedScalarResultsAreOneBased() @@ -45,9 +45,9 @@ public function testUnnamedScalarResultsAreOneBased() $result = $this->_em->createQuery($dql)->getScalarResult(); - $this->assertEquals(2, count($result)); - $this->assertEquals(150000, $result[0][1]); - $this->assertEquals(600000, $result[1][1]); + self::assertEquals(2, count($result)); + self::assertEquals(150000, $result[0][1]); + self::assertEquals(600000, $result[1][1]); } public function testOrderByResultVariableCollectionSize() @@ -59,19 +59,19 @@ public function testOrderByResultVariableCollectionSize() $result = $this->_em->createQuery($dql)->getScalarResult(); - $this->assertEquals(4, count($result)); + self::assertEquals(4, count($result)); - $this->assertEquals("Jonathan W.", $result[0]['name']); - $this->assertEquals(3, $result[0]['friends']); + self::assertEquals("Jonathan W.", $result[0]['name']); + self::assertEquals(3, $result[0]['friends']); - $this->assertEquals('Guilherme B.', $result[1]['name']); - $this->assertEquals(2, $result[1]['friends']); + self::assertEquals('Guilherme B.', $result[1]['name']); + self::assertEquals(2, $result[1]['friends']); - $this->assertEquals('Benjamin E.', $result[2]['name']); - $this->assertEquals(2, $result[2]['friends']); + self::assertEquals('Benjamin E.', $result[2]['name']); + self::assertEquals(2, $result[2]['friends']); - $this->assertEquals('Roman B.', $result[3]['name']); - $this->assertEquals(1, $result[3]['friends']); + self::assertEquals('Roman B.', $result[3]['name']); + self::assertEquals(1, $result[3]['friends']); } public function testIsNullAssociation() @@ -80,12 +80,12 @@ public function testIsNullAssociation() 'WHERE p.spouse IS NULL'; $result = $this->_em->createQuery($dql)->getResult(); - $this->assertEquals(2, count($result)); - $this->assertTrue($result[0]->getId() > 0); - $this->assertNull($result[0]->getSpouse()); + self::assertEquals(2, count($result)); + self::assertTrue($result[0]->getId() > 0); + self::assertNull($result[0]->getSpouse()); - $this->assertTrue($result[1]->getId() > 0); - $this->assertNull($result[1]->getSpouse()); + self::assertTrue($result[1]->getId() > 0); + self::assertNull($result[1]->getSpouse()); } public function testSelectSubselect() @@ -94,8 +94,8 @@ public function testSelectSubselect() 'FROM Doctrine\Tests\Models\Company\CompanyManager p'; $result = $this->_em->createQuery($dql)->getArrayResult(); - $this->assertEquals(1, count($result)); - $this->assertEquals("Caramba", $result[0]['brandName']); + self::assertEquals(1, count($result)); + self::assertEquals("Caramba", $result[0]['brandName']); } public function testInSubselect() @@ -104,8 +104,8 @@ public function testInSubselect() "WHERE p.name IN (SELECT n.name FROM Doctrine\Tests\Models\Company\CompanyPerson n WHERE n.name = 'Roman B.')"; $result = $this->_em->createQuery($dql)->getScalarResult(); - $this->assertEquals(1, count($result)); - $this->assertEquals('Roman B.', $result[0]['name']); + self::assertEquals(1, count($result)); + self::assertEquals('Roman B.', $result[0]['name']); } public function testGroupByMultipleFields() @@ -114,7 +114,7 @@ public function testGroupByMultipleFields() 'GROUP BY p.department, p.name'; $result = $this->_em->createQuery($dql)->getResult(); - $this->assertEquals(4, count($result)); + self::assertEquals(4, count($result)); } public function testUpdateAs() @@ -122,7 +122,7 @@ public function testUpdateAs() $dql = 'UPDATE Doctrine\Tests\Models\Company\CompanyEmployee AS p SET p.salary = 1'; $this->_em->createQuery($dql)->execute(); - $this->assertTrue(count($this->_em->createQuery( + self::assertTrue(count($this->_em->createQuery( 'SELECT count(p.id) FROM Doctrine\Tests\Models\Company\CompanyEmployee p WHERE p.salary = 1')->getResult()) > 0); } @@ -134,7 +134,7 @@ public function testDeleteAs() $dql = 'SELECT count(p) FROM Doctrine\Tests\Models\Company\CompanyEmployee p'; $result = $this->_em->createQuery($dql)->getSingleScalarResult(); - $this->assertEquals(0, $result); + self::assertEquals(0, $result); } public function generateFixture() diff --git a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php index 7bdb846535c..864bc781461 100644 --- a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php @@ -36,45 +36,45 @@ public function testBasicUnitsOfWorkWithOneToManyAssociation() $this->_em->flush(); - $this->assertTrue(is_numeric($user->id)); - $this->assertTrue($this->_em->contains($user)); + self::assertTrue(is_numeric($user->id)); + self::assertTrue($this->_em->contains($user)); // Read $user2 = $this->_em->find(CmsUser::class, $user->id); - $this->assertTrue($user === $user2); + self::assertTrue($user === $user2); // Add a phonenumber $ph = new CmsPhonenumber; $ph->phonenumber = "12345"; $user->addPhonenumber($ph); $this->_em->flush(); - $this->assertTrue($this->_em->contains($ph)); - $this->assertTrue($this->_em->contains($user)); + self::assertTrue($this->_em->contains($ph)); + self::assertTrue($this->_em->contains($user)); // Update name $user->name = 'guilherme'; $this->_em->flush(); - $this->assertEquals('guilherme', $user->name); + self::assertEquals('guilherme', $user->name); // Add another phonenumber $ph2 = new CmsPhonenumber; $ph2->phonenumber = "6789"; $user->addPhonenumber($ph2); $this->_em->flush(); - $this->assertTrue($this->_em->contains($ph2)); + self::assertTrue($this->_em->contains($ph2)); // Delete $this->_em->remove($user); - $this->assertTrue($this->_em->getUnitOfWork()->isScheduledForDelete($user)); - $this->assertTrue($this->_em->getUnitOfWork()->isScheduledForDelete($ph)); - $this->assertTrue($this->_em->getUnitOfWork()->isScheduledForDelete($ph2)); + self::assertTrue($this->_em->getUnitOfWork()->isScheduledForDelete($user)); + self::assertTrue($this->_em->getUnitOfWork()->isScheduledForDelete($ph)); + self::assertTrue($this->_em->getUnitOfWork()->isScheduledForDelete($ph2)); $this->_em->flush(); - $this->assertFalse($this->_em->getUnitOfWork()->isScheduledForDelete($user)); - $this->assertFalse($this->_em->getUnitOfWork()->isScheduledForDelete($ph)); - $this->assertFalse($this->_em->getUnitOfWork()->isScheduledForDelete($ph2)); - $this->assertEquals(UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($user)); - $this->assertEquals(UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($ph)); - $this->assertEquals(UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($ph2)); + self::assertFalse($this->_em->getUnitOfWork()->isScheduledForDelete($user)); + self::assertFalse($this->_em->getUnitOfWork()->isScheduledForDelete($ph)); + self::assertFalse($this->_em->getUnitOfWork()->isScheduledForDelete($ph2)); + self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($user)); + self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($ph)); + self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($ph2)); } public function testOneToManyAssociationModification() @@ -101,8 +101,8 @@ public function testOneToManyAssociationModification() $this->_em->flush(); - $this->assertEquals(1, count($user->phonenumbers)); - $this->assertNull($ph1->user); + self::assertEquals(1, count($user->phonenumbers)); + self::assertNull($ph1->user); } public function testBasicOneToOne() @@ -128,7 +128,7 @@ public function testBasicOneToOne() $userId = $this->_em->getConnection()->executeQuery( "SELECT user_id FROM cms_addresses WHERE id=?", [$address->id] )->fetchColumn(); - $this->assertTrue(is_numeric($userId)); + self::assertTrue(is_numeric($userId)); $this->_em->clear(); @@ -137,8 +137,8 @@ public function testBasicOneToOne() ->getSingleResult(); // Address has been eager-loaded because it cant be lazy - $this->assertInstanceOf(CmsAddress::class, $user2->address); - $this->assertNotInstanceOf(Proxy::class, $user2->address); + self::assertInstanceOf(CmsAddress::class, $user2->address); + self::assertNotInstanceOf(Proxy::class, $user2->address); } /** @@ -151,15 +151,15 @@ public function testRemove() $user->username = 'gblanco'; $user->status = 'developer'; - $this->assertEquals(UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($user), "State should be UnitOfWork::STATE_NEW"); + self::assertEquals(UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($user), "State should be UnitOfWork::STATE_NEW"); $this->_em->persist($user); - $this->assertEquals(UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($user), "State should be UnitOfWork::STATE_MANAGED"); + self::assertEquals(UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($user), "State should be UnitOfWork::STATE_MANAGED"); $this->_em->remove($user); - $this->assertEquals(UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($user), "State should be UnitOfWork::STATE_NEW"); + self::assertEquals(UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($user), "State should be UnitOfWork::STATE_NEW"); $this->_em->persist($user); $this->_em->flush(); @@ -167,12 +167,12 @@ public function testRemove() $this->_em->remove($user); - $this->assertEquals(UnitOfWork::STATE_REMOVED, $this->_em->getUnitOfWork()->getEntityState($user), "State should be UnitOfWork::STATE_REMOVED"); + self::assertEquals(UnitOfWork::STATE_REMOVED, $this->_em->getUnitOfWork()->getEntityState($user), "State should be UnitOfWork::STATE_REMOVED"); $this->_em->flush(); - $this->assertEquals(UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($user), "State should be UnitOfWork::STATE_NEW"); + self::assertEquals(UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($user), "State should be UnitOfWork::STATE_NEW"); - $this->assertNull($this->_em->find(CmsUser::class, $id)); + self::assertNull($this->_em->find(CmsUser::class, $id)); } public function testOneToManyOrphanRemoval() @@ -193,18 +193,18 @@ public function testOneToManyOrphanRemoval() $this->_em->flush(); $user->getPhonenumbers()->remove(0); - $this->assertEquals(2, count($user->getPhonenumbers())); + self::assertEquals(2, count($user->getPhonenumbers())); $this->_em->flush(); // Check that there are just 2 phonenumbers left $count = $this->_em->getConnection()->fetchColumn("SELECT COUNT(*) FROM cms_phonenumbers"); - $this->assertEquals(2, $count); // only 2 remaining + self::assertEquals(2, $count); // only 2 remaining // check that clear() removes the others via orphan removal $user->getPhonenumbers()->clear(); $this->_em->flush(); - $this->assertEquals(0, $this->_em->getConnection()->fetchColumn("select count(*) from cms_phonenumbers")); + self::assertEquals(0, $this->_em->getConnection()->fetchColumn("select count(*) from cms_phonenumbers")); } public function testBasicQuery() @@ -220,28 +220,28 @@ public function testBasicQuery() $users = $query->getResult(); - $this->assertEquals(1, count($users)); - $this->assertEquals('Guilherme', $users[0]->name); - $this->assertEquals('gblanco', $users[0]->username); - $this->assertEquals('developer', $users[0]->status); - //$this->assertNull($users[0]->phonenumbers); - //$this->assertNull($users[0]->articles); + self::assertEquals(1, count($users)); + self::assertEquals('Guilherme', $users[0]->name); + self::assertEquals('gblanco', $users[0]->username); + self::assertEquals('developer', $users[0]->status); + //self::assertNull($users[0]->phonenumbers); + //self::assertNull($users[0]->articles); $usersArray = $query->getArrayResult(); - $this->assertTrue(is_array($usersArray)); - $this->assertEquals(1, count($usersArray)); - $this->assertEquals('Guilherme', $usersArray[0]['name']); - $this->assertEquals('gblanco', $usersArray[0]['username']); - $this->assertEquals('developer', $usersArray[0]['status']); + self::assertTrue(is_array($usersArray)); + self::assertEquals(1, count($usersArray)); + self::assertEquals('Guilherme', $usersArray[0]['name']); + self::assertEquals('gblanco', $usersArray[0]['username']); + self::assertEquals('developer', $usersArray[0]['status']); $usersScalar = $query->getScalarResult(); - $this->assertTrue(is_array($usersScalar)); - $this->assertEquals(1, count($usersScalar)); - $this->assertEquals('Guilherme', $usersScalar[0]['u_name']); - $this->assertEquals('gblanco', $usersScalar[0]['u_username']); - $this->assertEquals('developer', $usersScalar[0]['u_status']); + self::assertTrue(is_array($usersScalar)); + self::assertEquals(1, count($usersScalar)); + self::assertEquals('Guilherme', $usersScalar[0]['u_name']); + self::assertEquals('gblanco', $usersScalar[0]['u_username']); + self::assertEquals('developer', $usersScalar[0]['u_status']); } public function testBasicOneToManyInnerJoin() @@ -257,7 +257,7 @@ public function testBasicOneToManyInnerJoin() $users = $query->getResult(); - $this->assertEquals(0, count($users)); + self::assertEquals(0, count($users)); } public function testBasicOneToManyLeftJoin() @@ -273,13 +273,13 @@ public function testBasicOneToManyLeftJoin() $users = $query->getResult(); - $this->assertEquals(1, count($users)); - $this->assertEquals('Guilherme', $users[0]->name); - $this->assertEquals('gblanco', $users[0]->username); - $this->assertEquals('developer', $users[0]->status); - $this->assertInstanceOf(PersistentCollection::class, $users[0]->phonenumbers); - $this->assertTrue($users[0]->phonenumbers->isInitialized()); - $this->assertEquals(0, $users[0]->phonenumbers->count()); + self::assertEquals(1, count($users)); + self::assertEquals('Guilherme', $users[0]->name); + self::assertEquals('gblanco', $users[0]->username); + self::assertEquals('developer', $users[0]->status); + self::assertInstanceOf(PersistentCollection::class, $users[0]->phonenumbers); + self::assertTrue($users[0]->phonenumbers->isInitialized()); + self::assertEquals(0, $users[0]->phonenumbers->count()); } public function testBasicRefresh() @@ -294,9 +294,9 @@ public function testBasicRefresh() $user->status = 'mascot'; - $this->assertEquals('mascot', $user->status); + self::assertEquals('mascot', $user->status); $this->_em->refresh($user); - $this->assertEquals('developer', $user->status); + self::assertEquals('developer', $user->status); } /** @@ -325,10 +325,10 @@ public function testRefreshResetsCollection() $user->addPhonenumber($ph2); - $this->assertEquals(2, count($user->phonenumbers)); + self::assertEquals(2, count($user->phonenumbers)); $this->_em->refresh($user); - $this->assertEquals(1, count($user->phonenumbers)); + self::assertEquals(1, count($user->phonenumbers)); } /** @@ -357,14 +357,14 @@ public function testDqlRefreshResetsCollection() $user->addPhonenumber($ph2); - $this->assertEquals(2, count($user->phonenumbers)); + self::assertEquals(2, count($user->phonenumbers)); $dql = "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1"; $user = $this->_em->createQuery($dql) ->setParameter(1, $user->id) ->setHint(Query::HINT_REFRESH, true) ->getSingleResult(); - $this->assertEquals(1, count($user->phonenumbers)); + self::assertEquals(1, count($user->phonenumbers)); } /** @@ -400,7 +400,7 @@ public function testCreateEntityOfProxy() ->setParameter(1, $userId) ->getSingleResult(); - $this->assertEquals(1, count($user->phonenumbers)); + self::assertEquals(1, count($user->phonenumbers)); } public function testAddToCollectionDoesNotInitialize() @@ -420,19 +420,19 @@ public function testAddToCollectionDoesNotInitialize() $this->_em->flush(); $this->_em->clear(); - $this->assertEquals(3, $user->getPhonenumbers()->count()); + self::assertEquals(3, $user->getPhonenumbers()->count()); $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username='gblanco'"); $gblanco = $query->getSingleResult(); - $this->assertFalse($gblanco->getPhonenumbers()->isInitialized()); + self::assertFalse($gblanco->getPhonenumbers()->isInitialized()); $newPhone = new CmsPhonenumber; $newPhone->phonenumber = 555; $gblanco->addPhonenumber($newPhone); - $this->assertFalse($gblanco->getPhonenumbers()->isInitialized()); + self::assertFalse($gblanco->getPhonenumbers()->isInitialized()); $this->_em->persist($gblanco); $this->_em->flush(); @@ -440,7 +440,7 @@ public function testAddToCollectionDoesNotInitialize() $query = $this->_em->createQuery("select u, p from Doctrine\Tests\Models\CMS\CmsUser u join u.phonenumbers p where u.username='gblanco'"); $gblanco2 = $query->getSingleResult(); - $this->assertEquals(4, $gblanco2->getPhonenumbers()->count()); + self::assertEquals(4, $gblanco2->getPhonenumbers()->count()); } public function testInitializeCollectionWithNewObjectsRetainsNewObjects() @@ -460,28 +460,28 @@ public function testInitializeCollectionWithNewObjectsRetainsNewObjects() $this->_em->flush(); $this->_em->clear(); - $this->assertEquals(3, $user->getPhonenumbers()->count()); + self::assertEquals(3, $user->getPhonenumbers()->count()); $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username='gblanco'"); $gblanco = $query->getSingleResult(); - $this->assertFalse($gblanco->getPhonenumbers()->isInitialized()); + self::assertFalse($gblanco->getPhonenumbers()->isInitialized()); $newPhone = new CmsPhonenumber; $newPhone->phonenumber = 555; $gblanco->addPhonenumber($newPhone); - $this->assertFalse($gblanco->getPhonenumbers()->isInitialized()); - $this->assertEquals(4, $gblanco->getPhonenumbers()->count()); - $this->assertTrue($gblanco->getPhonenumbers()->isInitialized()); + self::assertFalse($gblanco->getPhonenumbers()->isInitialized()); + self::assertEquals(4, $gblanco->getPhonenumbers()->count()); + self::assertTrue($gblanco->getPhonenumbers()->isInitialized()); $this->_em->flush(); $this->_em->clear(); $query = $this->_em->createQuery("select u, p from Doctrine\Tests\Models\CMS\CmsUser u join u.phonenumbers p where u.username='gblanco'"); $gblanco2 = $query->getSingleResult(); - $this->assertEquals(4, $gblanco2->getPhonenumbers()->count()); + self::assertEquals(4, $gblanco2->getPhonenumbers()->count()); } public function testSetSetAssociationWithGetReference() @@ -501,8 +501,8 @@ public function testSetSetAssociationWithGetReference() $this->_em->flush(); $this->_em->detach($address); - $this->assertFalse($this->_em->contains($address)); - $this->assertTrue($this->_em->contains($user)); + self::assertFalse($this->_em->contains($address)); + self::assertTrue($this->_em->contains($user)); // Assume we only got the identifier of the address and now want to attach // that address to the user without actually loading it, using getReference(). @@ -517,9 +517,9 @@ public function testSetSetAssociationWithGetReference() $query = $this->_em->createQuery("select u, a from Doctrine\Tests\Models\CMS\CmsUser u join u.address a where u.username='gblanco'"); $gblanco = $query->getSingleResult(); - $this->assertInstanceOf(CmsUser::class, $gblanco); - $this->assertInstanceOf(CmsAddress::class, $gblanco->getAddress()); - $this->assertEquals('Berlin', $gblanco->getAddress()->getCity()); + self::assertInstanceOf(CmsUser::class, $gblanco); + self::assertInstanceOf(CmsAddress::class, $gblanco->getAddress()); + self::assertEquals('Berlin', $gblanco->getAddress()->getCity()); } @@ -548,11 +548,11 @@ public function testOneToManyCascadeRemove() $this->_em->clear(); - $this->assertEquals(0, $this->_em->createQuery( + self::assertEquals(0, $this->_em->createQuery( "select count(p.phonenumber) from Doctrine\Tests\Models\CMS\CmsPhonenumber p") ->getSingleScalarResult()); - $this->assertEquals(0, $this->_em->createQuery( + self::assertEquals(0, $this->_em->createQuery( "select count(u.id) from Doctrine\Tests\Models\CMS\CmsUser u") ->getSingleScalarResult()); } @@ -579,10 +579,10 @@ public function testTextColumnSaveAndRetrieve() // test find() with leading backslash at the same time $articleNew = $this->_em->find('\Doctrine\Tests\Models\CMS\CmsArticle', $articleId); - $this->assertTrue($this->_em->contains($articleNew)); - $this->assertEquals("Lorem ipsum dolor sunt.", $articleNew->text); + self::assertTrue($this->_em->contains($articleNew)); + self::assertEquals("Lorem ipsum dolor sunt.", $articleNew->text); - $this->assertNotSame($article, $articleNew); + self::assertNotSame($article, $articleNew); $articleNew->text = "Lorem ipsum dolor sunt. And stuff!"; @@ -590,8 +590,8 @@ public function testTextColumnSaveAndRetrieve() $this->_em->clear(); $articleNew = $this->_em->find(CmsArticle::class, $articleId); - $this->assertEquals("Lorem ipsum dolor sunt. And stuff!", $articleNew->text); - $this->assertTrue($this->_em->contains($articleNew)); + self::assertEquals("Lorem ipsum dolor sunt. And stuff!", $articleNew->text); + self::assertTrue($this->_em->contains($articleNew)); } public function testFlushDoesNotIssueUnnecessaryUpdates() @@ -625,15 +625,15 @@ public function testFlushDoesNotIssueUnnecessaryUpdates() $query = $this->_em->createQuery('select u,a,ad from Doctrine\Tests\Models\CMS\CmsUser u join u.articles a join u.address ad'); $user2 = $query->getSingleResult(); - $this->assertEquals(1, count($user2->articles)); - $this->assertInstanceOf(CmsAddress::class, $user2->address); + self::assertEquals(1, count($user2->articles)); + self::assertInstanceOf(CmsAddress::class, $user2->address); $oldLogger = $this->_em->getConnection()->getConfiguration()->getSQLLogger(); $debugStack = new DebugStack(); $this->_em->getConnection()->getConfiguration()->setSQLLogger($debugStack); $this->_em->flush(); - $this->assertEquals(0, count($debugStack->queries)); + self::assertEquals(0, count($debugStack->queries)); $this->_em->getConnection()->getConfiguration()->setSQLLogger($oldLogger); } @@ -656,7 +656,7 @@ public function testRemoveEntityByReference() $this->_em->flush(); $this->_em->clear(); - $this->assertEquals(0, $this->_em->getConnection()->fetchColumn("select count(*) from cms_users")); + self::assertEquals(0, $this->_em->getConnection()->fetchColumn("select count(*) from cms_users")); //$this->_em->getConnection()->getConfiguration()->setSQLLogger(null); } @@ -687,12 +687,12 @@ public function testQueryEntityByReference() ->setParameter('user', $userRef) ->getSingleResult(); - $this->assertInstanceOf(Proxy::class, $address2->getUser()); - $this->assertTrue($userRef === $address2->getUser()); - $this->assertFalse($userRef->__isInitialized__); - $this->assertEquals('Germany', $address2->country); - $this->assertEquals('Berlin', $address2->city); - $this->assertEquals('12345', $address2->zip); + self::assertInstanceOf(Proxy::class, $address2->getUser()); + self::assertTrue($userRef === $address2->getUser()); + self::assertFalse($userRef->__isInitialized__); + self::assertEquals('Germany', $address2->country); + self::assertEquals('Berlin', $address2->city); + self::assertEquals('12345', $address2->zip); } public function testOneToOneNullUpdate() @@ -713,12 +713,12 @@ public function testOneToOneNullUpdate() $this->_em->persist($user); $this->_em->flush(); - $this->assertEquals(1, $this->_em->getConnection()->fetchColumn("select 1 from cms_addresses where user_id = ".$user->id)); + self::assertEquals(1, $this->_em->getConnection()->fetchColumn("select 1 from cms_addresses where user_id = ".$user->id)); $address->user = null; $this->_em->flush(); - $this->assertNotEquals(1, $this->_em->getConnection()->fetchColumn("select 1 from cms_addresses where user_id = ".$user->id)); + self::assertNotEquals(1, $this->_em->getConnection()->fetchColumn("select 1 from cms_addresses where user_id = ".$user->id)); } /** @@ -825,14 +825,14 @@ public function testOneToOneOrphanRemoval() $this->_em->flush(); - $this->assertEquals(0, $this->_em->getConnection()->fetchColumn("select count(*) from cms_addresses")); + self::assertEquals(0, $this->_em->getConnection()->fetchColumn("select count(*) from cms_addresses")); // check orphan removal through replacement $user->address = $address; $address->user = $user; $this->_em->flush(); - $this->assertEquals(1, $this->_em->getConnection()->fetchColumn("select count(*) from cms_addresses")); + self::assertEquals(1, $this->_em->getConnection()->fetchColumn("select count(*) from cms_addresses")); // remove $address to free up unique key id $this->_em->remove($address); @@ -847,7 +847,7 @@ public function testOneToOneOrphanRemoval() $user->address = $newAddress; $this->_em->flush(); - $this->assertEquals(1, $this->_em->getConnection()->fetchColumn("select count(*) from cms_addresses")); + self::assertEquals(1, $this->_em->getConnection()->fetchColumn("select count(*) from cms_addresses")); } public function testGetPartialReferenceToUpdateObjectWithoutLoadingIt() @@ -862,15 +862,15 @@ public function testGetPartialReferenceToUpdateObjectWithoutLoadingIt() $this->_em->clear(); $user = $this->_em->getPartialReference(CmsUser::class, $userId); - $this->assertTrue($this->_em->contains($user)); - $this->assertNull($user->getName()); - $this->assertEquals($userId, $user->id); + self::assertTrue($this->_em->contains($user)); + self::assertNull($user->getName()); + self::assertEquals($userId, $user->id); $user->name = 'Stephan'; $this->_em->flush(); $this->_em->clear(); - $this->assertEquals('Benjamin E.', $this->_em->find(get_class($user), $userId)->name); + self::assertEquals('Benjamin E.', $this->_em->find(get_class($user), $userId)->name); } public function testMergePersistsNewEntities() @@ -881,19 +881,19 @@ public function testMergePersistsNewEntities() $user->status = 'active'; $managedUser = $this->_em->merge($user); - $this->assertEquals('beberlei', $managedUser->username); - $this->assertEquals('Benjamin E.', $managedUser->name); - $this->assertEquals('active', $managedUser->status); + self::assertEquals('beberlei', $managedUser->username); + self::assertEquals('Benjamin E.', $managedUser->name); + self::assertEquals('active', $managedUser->status); - $this->assertTrue($user !== $managedUser); - $this->assertTrue($this->_em->contains($managedUser)); + self::assertTrue($user !== $managedUser); + self::assertTrue($this->_em->contains($managedUser)); $this->_em->flush(); $userId = $managedUser->id; $this->_em->clear(); $user2 = $this->_em->find(get_class($managedUser), $userId); - $this->assertInstanceOf(CmsUser::class, $user2); + self::assertInstanceOf(CmsUser::class, $user2); } public function testMergeNonPersistedProperties() @@ -906,21 +906,21 @@ public function testMergeNonPersistedProperties() $user->nonPersistedPropertyObject = new CmsPhonenumber(); $managedUser = $this->_em->merge($user); - $this->assertEquals('test', $managedUser->nonPersistedProperty); - $this->assertSame($user->nonPersistedProperty, $managedUser->nonPersistedProperty); - $this->assertSame($user->nonPersistedPropertyObject, $managedUser->nonPersistedPropertyObject); + self::assertEquals('test', $managedUser->nonPersistedProperty); + self::assertSame($user->nonPersistedProperty, $managedUser->nonPersistedProperty); + self::assertSame($user->nonPersistedPropertyObject, $managedUser->nonPersistedPropertyObject); - $this->assertTrue($user !== $managedUser); - $this->assertTrue($this->_em->contains($managedUser)); + self::assertTrue($user !== $managedUser); + self::assertTrue($this->_em->contains($managedUser)); $this->_em->flush(); $userId = $managedUser->id; $this->_em->clear(); $user2 = $this->_em->find(get_class($managedUser), $userId); - $this->assertNull($user2->nonPersistedProperty); - $this->assertNull($user2->nonPersistedPropertyObject); - $this->assertEquals('active', $user2->status); + self::assertNull($user2->nonPersistedProperty); + self::assertNull($user2->nonPersistedPropertyObject); + self::assertEquals('active', $user2->status); } public function testMergeThrowsExceptionIfEntityWithGeneratedIdentifierDoesNotExist() @@ -961,7 +961,7 @@ public function testOneToOneMergeSetNull() $this->_em->flush(); $this->_em->clear(); - $this->assertNull($this->_em->find(get_class($ph), $ph->phonenumber)->getUser()); + self::assertNull($this->_em->find(get_class($ph), $ph->phonenumber)->getUser()); } /** @@ -990,9 +990,9 @@ public function testManyToOneFetchModeQuery() ->setParameter(1, $article->id) ->setFetchMode(CmsArticle::class, 'user', ClassMetadata::FETCH_EAGER) ->getSingleResult(); - $this->assertInstanceOf(Proxy::class, $article->user, "It IS a proxy, ..."); - $this->assertTrue($article->user->__isInitialized__, "...but its initialized!"); - $this->assertEquals($qc+2, $this->getCurrentQueryCount()); + self::assertInstanceOf(Proxy::class, $article->user, "It IS a proxy, ..."); + self::assertTrue($article->user->__isInitialized__, "...but its initialized!"); + self::assertEquals($qc+2, $this->getCurrentQueryCount()); } /** @@ -1034,14 +1034,14 @@ public function testClearWithEntityName() $this->_em->clear(CmsUser::class); - $this->assertEquals(UnitOfWork::STATE_DETACHED, $unitOfWork->getEntityState($user)); - $this->assertEquals(UnitOfWork::STATE_DETACHED, $unitOfWork->getEntityState($article1)); - $this->assertEquals(UnitOfWork::STATE_DETACHED, $unitOfWork->getEntityState($article2)); - $this->assertEquals(UnitOfWork::STATE_MANAGED, $unitOfWork->getEntityState($address)); + self::assertEquals(UnitOfWork::STATE_DETACHED, $unitOfWork->getEntityState($user)); + self::assertEquals(UnitOfWork::STATE_DETACHED, $unitOfWork->getEntityState($article1)); + self::assertEquals(UnitOfWork::STATE_DETACHED, $unitOfWork->getEntityState($article2)); + self::assertEquals(UnitOfWork::STATE_MANAGED, $unitOfWork->getEntityState($address)); $this->_em->clear(); - $this->assertEquals(UnitOfWork::STATE_DETACHED, $unitOfWork->getEntityState($address)); + self::assertEquals(UnitOfWork::STATE_DETACHED, $unitOfWork->getEntityState($address)); } public function testFlushManyExplicitEntities() @@ -1069,10 +1069,10 @@ public function testFlushManyExplicitEntities() $this->_em->flush([$userA, $userB]); $this->_em->refresh($userC); - $this->assertTrue($userA->id > 0, 'user a has an id'); - $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'); + self::assertTrue($userA->id > 0, 'user a has an id'); + self::assertTrue($userB->id > 0, 'user b has an id'); + self::assertTrue($userC->id > 0, 'user c has an id'); + self::assertEquals('UserC', $userC->name, 'name has not changed because we did not flush it'); } /** @@ -1093,7 +1093,7 @@ public function testFlushSingleManagedEntity() $this->_em->clear(); $user = $this->_em->find(get_class($user), $user->id); - $this->assertEquals('administrator', $user->status); + self::assertEquals('administrator', $user->status); } /** @@ -1135,8 +1135,8 @@ public function testFlushSingleAndNewEntity() $this->_em->persist($otherUser); $this->_em->flush($user); - $this->assertTrue($this->_em->contains($otherUser), "Other user is contained in EntityManager"); - $this->assertTrue($otherUser->id > 0, "other user has an id"); + self::assertTrue($this->_em->contains($otherUser), "Other user is contained in EntityManager"); + self::assertTrue($otherUser->id > 0, "other user has an id"); } /** @@ -1162,8 +1162,8 @@ public function testFlushAndCascadePersist() $this->_em->flush($user); - $this->assertTrue($this->_em->contains($address), "Other user is contained in EntityManager"); - $this->assertTrue($address->id > 0, "other user has an id"); + self::assertTrue($this->_em->contains($address), "Other user is contained in EntityManager"); + self::assertTrue($address->id > 0, "other user has an id"); } /** @@ -1212,7 +1212,7 @@ public function testFlushSingleNewEntityThenRemove() $this->_em->flush($user); $this->_em->clear(); - $this->assertNull($this->_em->find(get_class($user), $userId)); + self::assertNull($this->_em->find(get_class($user), $userId)); } /** @@ -1239,8 +1239,8 @@ public function testProxyIsIgnored() $this->_em->persist($otherUser); $this->_em->flush($user); - $this->assertTrue($this->_em->contains($otherUser), "Other user is contained in EntityManager"); - $this->assertTrue($otherUser->id > 0, "other user has an id"); + self::assertTrue($this->_em->contains($otherUser), "Other user is contained in EntityManager"); + self::assertTrue($otherUser->id > 0, "other user has an id"); } /** @@ -1269,7 +1269,7 @@ public function testFlushSingleSaveOnlySingle() $this->_em->clear(); $user2 = $this->_em->find(get_class($user2), $user2->id); - $this->assertEquals('developer', $user2->status); + self::assertEquals('developer', $user2->status); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest.php b/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest.php index 4ece24fa773..f5608d33a41 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest.php @@ -51,14 +51,14 @@ public function testCRUD() $entities = $query->getResult(); - $this->assertCount(2, $entities); - $this->assertInstanceOf(CompanyPerson::class, $entities[0]); - $this->assertInstanceOf(CompanyEmployee::class, $entities[1]); - $this->assertTrue(is_numeric($entities[0]->getId())); - $this->assertTrue(is_numeric($entities[1]->getId())); - $this->assertEquals('Roman S. Borschel', $entities[0]->getName()); - $this->assertEquals('Guilherme Blanco', $entities[1]->getName()); - $this->assertEquals(100000, $entities[1]->getSalary()); + self::assertCount($entities); + self::assertInstanceOf(CompanyPerson::class, $entities[0]); + self::assertInstanceOf(CompanyEmployee::class, $entities[1]); + self::assertTrue(is_numeric($entities[0]->getId())); + self::assertTrue(is_numeric($entities[1]->getId())); + self::assertEquals('Roman S. Borschel', $entities[0]->getName()); + self::assertEquals('Guilherme Blanco', $entities[1]->getName()); + self::assertEquals(100000, $entities[1]->getSalary()); $this->_em->clear(); @@ -66,17 +66,18 @@ public function testCRUD() $entities = $query->getResult(); - $this->assertCount(1, $entities); - $this->assertInstanceOf(CompanyEmployee::class, $entities[0]); - $this->assertTrue(is_numeric($entities[0]->getId())); - $this->assertEquals('Guilherme Blanco', $entities[0]->getName()); - $this->assertEquals(100000, $entities[0]->getSalary()); + self::assertCount(1, $entities); + self::assertInstanceOf(CompanyEmployee::class, $entities[0]); + self::assertTrue(is_numeric($entities[0]->getId())); + self::assertEquals('Guilherme Blanco', $entities[0]->getName()); + self::assertEquals(100000, $entities[0]->getSalary()); $this->_em->clear(); $guilherme = $this->_em->getRepository(get_class($employee))->findOneBy(['name' => 'Guilherme Blanco']); - $this->assertInstanceOf(CompanyEmployee::class, $guilherme); - $this->assertEquals('Guilherme Blanco', $guilherme->getName()); + + self::assertInstanceOf(CompanyEmployee::class, $guilherme); + self::assertEquals('Guilherme Blanco', $guilherme->getName()); $this->_em->clear(); @@ -85,12 +86,15 @@ public function testCRUD() $query->setParameter(2, 'NewDepartment'); $query->setParameter(3, 100000); $query->getSQL(); + $numUpdated = $query->execute(); - $this->assertEquals(1, $numUpdated); + + self::assertEquals(1, $numUpdated); $query = $this->_em->createQuery('delete from ' . CompanyPerson::class . ' p'); $numDeleted = $query->execute(); - $this->assertEquals(2, $numDeleted); + + self::assertEquals(2, $numDeleted); } public function testMultiLevelUpdateAndFind() @@ -113,11 +117,11 @@ public function testMultiLevelUpdateAndFind() $manager = $this->_em->find(CompanyManager::class, $manager->getId()); - $this->assertInstanceOf(CompanyManager::class, $manager); - $this->assertEquals('Roman B.', $manager->getName()); - $this->assertEquals(119000, $manager->getSalary()); - $this->assertEquals('CEO', $manager->getTitle()); - $this->assertTrue(is_numeric($manager->getId())); + self::assertInstanceOf(CompanyManager::class, $manager); + self::assertEquals('Roman B.', $manager->getName()); + self::assertEquals(119000, $manager->getSalary()); + self::assertEquals('CEO', $manager->getTitle()); + self::assertTrue(is_numeric($manager->getId())); } public function testFindOnBaseClass() @@ -134,11 +138,11 @@ public function testFindOnBaseClass() $person = $this->_em->find(CompanyPerson::class, $manager->getId()); - $this->assertInstanceOf(CompanyManager::class, $person); - $this->assertEquals('Roman S. Borschel', $person->getName()); - $this->assertEquals(100000, $person->getSalary()); - $this->assertEquals('CTO', $person->getTitle()); - $this->assertTrue(is_numeric($person->getId())); + self::assertInstanceOf(CompanyManager::class, $person); + self::assertEquals('Roman S. Borschel', $person->getName()); + self::assertEquals(100000, $person->getSalary()); + self::assertEquals('CTO', $person->getTitle()); + self::assertTrue(is_numeric($person->getId())); } public function testSelfReferencingOneToOne() @@ -153,8 +157,8 @@ public function testSelfReferencingOneToOne() $wife->setName('Mary Smith'); $wife->setSpouse($manager); - $this->assertSame($manager, $wife->getSpouse()); - $this->assertSame($wife, $manager->getSpouse()); + self::assertSame($manager, $wife->getSpouse()); + self::assertSame($wife, $manager->getSpouse()); $this->_em->persist($manager); $this->_em->persist($wife); @@ -164,12 +168,13 @@ public function testSelfReferencingOneToOne() $query = $this->_em->createQuery('select p, s from ' . CompanyPerson::class . ' p join p.spouse s where p.name=\'Mary Smith\''); $result = $query->getResult(); - $this->assertCount(1, $result); - $this->assertInstanceOf(CompanyPerson::class, $result[0]); - $this->assertEquals('Mary Smith', $result[0]->getName()); - $this->assertInstanceOf(CompanyEmployee::class, $result[0]->getSpouse()); - $this->assertEquals('John Smith', $result[0]->getSpouse()->getName()); - $this->assertSame($result[0], $result[0]->getSpouse()->getSpouse()); + + self::assertCount(1, $result); + self::assertInstanceOf(CompanyPerson::class, $result[0]); + self::assertEquals('Mary Smith', $result[0]->getName()); + self::assertInstanceOf(CompanyEmployee::class, $result[0]->getSpouse()); + self::assertEquals('John Smith', $result[0]->getSpouse()->getName()); + self::assertSame($result[0], $result[0]->getSpouse()->getSpouse()); } public function testSelfReferencingManyToMany() @@ -182,9 +187,8 @@ public function testSelfReferencingManyToMany() $person1->addFriend($person2); - $this->assertCount(1, $person1->getFriends()); - $this->assertCount(1, $person2->getFriends()); - + self::assertCount(1, $person1->getFriends()); + self::assertCount(1, $person2->getFriends()); $this->_em->persist($person1); $this->_em->persist($person2); @@ -197,12 +201,14 @@ public function testSelfReferencingManyToMany() $query->setParameter(1, 'Roman'); $result = $query->getResult(); - $this->assertCount(1, $result); - $this->assertCount(1, $result[0]->getFriends()); - $this->assertEquals('Roman', $result[0]->getName()); + + self::assertCount(1, $result); + self::assertCount(1, $result[0]->getFriends()); + self::assertEquals('Roman', $result[0]->getName()); $friends = $result[0]->getFriends(); - $this->assertEquals('Jonathan', $friends[0]->getName()); + + self::assertEquals('Jonathan', $friends[0]->getName()); } public function testLazyLoading1() @@ -226,21 +232,22 @@ public function testLazyLoading1() $result = $q->getResult(); - $this->assertCount(1, $result); - $this->assertInstanceOf(CompanyOrganization::class, $result[0]); - $this->assertNull($result[0]->getMainEvent()); + self::assertCount(1, $result); + self::assertInstanceOf(CompanyOrganization::class, $result[0]); + self::assertNull($result[0]->getMainEvent()); $events = $result[0]->getEvents(); - $this->assertInstanceOf(PersistentCollection::class, $events); - $this->assertFalse($events->isInitialized()); + self::assertInstanceOf(PersistentCollection::class, $events); + self::assertFalse($events->isInitialized()); + + self::assertCount(2, $events); - $this->assertCount(2, $events); if ($events[0] instanceof CompanyAuction) { - $this->assertInstanceOf(CompanyRaffle::class, $events[1]); + self::assertInstanceOf(CompanyRaffle::class, $events[1]); } else { - $this->assertInstanceOf(CompanyRaffle::class, $events[0]); - $this->assertInstanceOf(CompanyAuction::class, $events[1]); + self::assertInstanceOf(CompanyRaffle::class, $events[0]); + self::assertInstanceOf(CompanyAuction::class, $events[1]); } } @@ -259,8 +266,9 @@ public function testLazyLoading2() $q->setParameter(1, $event1->getId()); $result = $q->getResult(); - $this->assertCount(1, $result); - $this->assertInstanceOf(CompanyAuction::class, $result[0], sprintf("Is of class %s", get_class($result[0]))); + + self::assertCount(1, $result); + self::assertInstanceOf(CompanyAuction::class, $result[0], sprintf("Is of class %s",get_class($result[0]))); $this->_em->clear(); @@ -269,13 +277,14 @@ public function testLazyLoading2() $result = $q->getResult(); - $this->assertCount(1, $result); - $this->assertInstanceOf(CompanyOrganization::class, $result[0]); + self::assertCount(1, $result); + self::assertInstanceOf(CompanyOrganization::class, $result[0]); $mainEvent = $result[0]->getMainEvent(); + // mainEvent should have been loaded because it can't be lazy - $this->assertInstanceOf(CompanyAuction::class, $mainEvent); - $this->assertNotInstanceOf(Proxy::class, $mainEvent); + self::assertInstanceOf(CompanyAuction::class, $mainEvent); + self::assertNotInstanceOf(Proxy::class, $mainEvent); } /** @@ -289,7 +298,7 @@ public function testBulkUpdateIssueDDC368() $result = $this->_em->createQuery('SELECT count(p.id) FROM ' . CompanyEmployee::class . ' p WHERE p.salary = 1') ->getResult(); - $this->assertGreaterThan(0, count($result)); + self::assertGreaterThan(0, count($result)); } /** @@ -331,7 +340,7 @@ public function testDeleteJoinTableRecords() $this->_em->remove($employee1); $this->_em->flush(); - $this->assertNull($this->_em->find(get_class($employee1), $employee1Id)); + self::assertNull($this->_em->find(get_class($employee1), $employee1Id)); } /** @@ -359,8 +368,8 @@ public function testQueryForInheritedSingleValuedAssociation() ->setParameter(1, $person->getId()) ->getSingleResult(); - $this->assertEquals($manager->getId(), $dqlManager->getId()); - $this->assertEquals($person->getId(), $dqlManager->getSpouse()->getId()); + self::assertEquals($manager->getId(), $dqlManager->getId()); + self::assertEquals($person->getId(), $dqlManager->getSpouse()->getId()); } /** @@ -387,12 +396,12 @@ public function testFindByAssociation() $repos = $this->_em->getRepository(CompanyManager::class); $pmanager = $repos->findOneBy(['spouse' => $person->getId()]); - $this->assertEquals($manager->getId(), $pmanager->getId()); + self::assertEquals($manager->getId(), $pmanager->getId()); $repos = $this->_em->getRepository(CompanyPerson::class); $pmanager = $repos->findOneBy(['spouse' => $person->getId()]); - $this->assertEquals($manager->getId(), $pmanager->getId()); + self::assertEquals($manager->getId(), $pmanager->getId()); } /** @@ -411,13 +420,13 @@ public function testGetReferenceEntityWithSubclasses() $this->_em->clear(); $ref = $this->_em->getReference(CompanyPerson::class, $manager->getId()); - $this->assertNotInstanceOf(Proxy::class, $ref, "Cannot Request a proxy from a class that has subclasses."); - $this->assertInstanceOf(CompanyPerson::class, $ref); - $this->assertInstanceOf(CompanyEmployee::class, $ref, "Direct fetch of the reference has to load the child class Employee directly."); + self::assertNotInstanceOf(Proxy::class, $ref, "Cannot Request a proxy from a class that has subclasses."); + self::assertInstanceOf(CompanyPerson::class, $ref); + self::assertInstanceOf(CompanyEmployee::class, $ref, "Direct fetch of the reference has to load the child class Employee directly."); $this->_em->clear(); $ref = $this->_em->getReference(CompanyManager::class, $manager->getId()); - $this->assertInstanceOf(Proxy::class, $ref, "A proxy can be generated only if no subclasses exists for the requested reference."); + self::assertInstanceOf(Proxy::class, $ref, "A proxy can be generated only if no subclasses exists for the requested reference."); } /** @@ -443,7 +452,7 @@ public function testGetSubClassManyToManyCollection() $manager = $this->_em->find(CompanyManager::class, $manager->getId()); - $this->assertCount(1, $manager->getFriends()); + self::assertCount(1, $manager->getFriends()); } /** @@ -457,12 +466,12 @@ public function testExistsSubclass() $manager->setTitle('Awesome!'); $manager->setDepartment('IT'); - $this->assertFalse($this->_em->getUnitOfWork()->getEntityPersister(get_class($manager))->exists($manager)); + self::assertFalse($this->_em->getUnitOfWork()->getEntityPersister(get_class($manager))->exists($manager)); $this->_em->persist($manager); $this->_em->flush(); - $this->assertTrue($this->_em->getUnitOfWork()->getEntityPersister(get_class($manager))->exists($manager)); + self::assertTrue($this->_em->getUnitOfWork()->getEntityPersister(get_class($manager))->exists($manager)); } /** @@ -483,12 +492,14 @@ public function testMatching() $users = $repository->matching(new Criteria( Criteria::expr()->eq('department', 'IT') )); - $this->assertCount(1, $users); + + self::assertCount(1, $users); $repository = $this->_em->getRepository(CompanyManager::class); $users = $repository->matching(new Criteria( Criteria::expr()->eq('department', 'IT') )); - $this->assertCount(1, $users); + + self::assertCount(1, $users); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest2.php b/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest2.php index 84949a6e3ed..2a8d863ebe1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest2.php +++ b/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest2.php @@ -47,12 +47,12 @@ public function testOneToOneAssocToBaseTypeBidirectional() $related2 = $this->_em->find(CTIRelated::class, $relatedId); - $this->assertInstanceOf(CTIRelated::class, $related2); - $this->assertInstanceOf(CTIChild::class, $related2->getCTIParent()); - $this->assertNotInstanceOf(Proxy::class, $related2->getCTIParent()); - $this->assertEquals('hello', $related2->getCTIParent()->getData()); + self::assertInstanceOf(CTIRelated::class, $related2); + self::assertInstanceOf(CTIChild::class, $related2->getCTIParent()); + self::assertNotInstanceOf(Proxy::class, $related2->getCTIParent()); + self::assertEquals('hello', $related2->getCTIParent()->getData()); - $this->assertSame($related2, $related2->getCTIParent()->getRelated()); + self::assertSame($related2, $related2->getCTIParent()->getRelated()); } public function testManyToManyToCTIHierarchy() @@ -70,10 +70,10 @@ public function testManyToManyToCTIHierarchy() $this->_em->clear(); $mmrel2 = $this->_em->find(get_class($mmrel), $mmrel->getId()); - $this->assertFalse($mmrel2->getCTIChildren()->isInitialized()); - $this->assertEquals(1, count($mmrel2->getCTIChildren())); - $this->assertTrue($mmrel2->getCTIChildren()->isInitialized()); - $this->assertInstanceOf(CTIChild::class, $mmrel2->getCTIChildren()->get(0)); + self::assertFalse($mmrel2->getCTIChildren()->isInitialized()); + self::assertEquals(1, count($mmrel2->getCTIChildren())); + self::assertTrue($mmrel2->getCTIChildren()->isInitialized()); + self::assertInstanceOf(CTIChild::class, $mmrel2->getCTIChildren()->get(0)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ClearEventTest.php b/tests/Doctrine/Tests/ORM/Functional/ClearEventTest.php index 8c234c0f3f3..18fb5814419 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ClearEventTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ClearEventTest.php @@ -20,7 +20,7 @@ public function testEventIsCalledOnClear() $this->_em->clear(); - $this->assertTrue($listener->called); + self::assertTrue($listener->called); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyTest.php index 03bde6ba7cb..2511ea0feaa 100644 --- a/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyTest.php @@ -48,10 +48,10 @@ public function testPersistCompositePkEntity() $poi = $this->_em->find(NavPointOfInterest::class, ['lat' => 100, 'long' => 200]); - $this->assertInstanceOf(NavPointOfInterest::class, $poi); - $this->assertEquals(100, $poi->getLat()); - $this->assertEquals(200, $poi->getLong()); - $this->assertEquals('Brandenburger Tor', $poi->getName()); + self::assertInstanceOf(NavPointOfInterest::class, $poi); + self::assertEquals(100, $poi->getLat()); + self::assertEquals(200, $poi->getLong()); + self::assertEquals('Brandenburger Tor', $poi->getName()); } /** @@ -88,9 +88,9 @@ public function testIdentityFunctionWithCompositePrimaryKey() $dql = "SELECT IDENTITY(p.poi, 'long') AS long, IDENTITY(p.poi, 'lat') AS lat FROM Doctrine\Tests\Models\Navigation\NavPhotos p"; $result = $this->_em->createQuery($dql)->getResult(); - $this->assertCount(1, $result); - $this->assertEquals(200, $result[0]['long']); - $this->assertEquals(100, $result[0]['lat']); + self::assertCount(1, $result); + self::assertEquals(200, $result[0]['long']); + self::assertEquals(100, $result[0]['lat']); } public function testManyToManyCompositeRelation() @@ -100,7 +100,7 @@ public function testManyToManyCompositeRelation() $tour = $this->_em->find(NavTour::class, $tour->getId()); - $this->assertEquals(1, count($tour->getPointOfInterests())); + self::assertEquals(1, count($tour->getPointOfInterests())); } public function testCompositeDqlEagerFetching() @@ -112,12 +112,12 @@ public function testCompositeDqlEagerFetching() 'INNER JOIN t.pois p INNER JOIN p.country c'; $tours = $this->_em->createQuery($dql)->getResult(); - $this->assertEquals(1, count($tours)); + self::assertEquals(1, count($tours)); $pois = $tours[0]->getPointOfInterests(); - $this->assertEquals(1, count($pois)); - $this->assertEquals('Brandenburger Tor', $pois[0]->getName()); + self::assertEquals(1, count($pois)); + self::assertEquals('Brandenburger Tor', $pois[0]->getName()); } public function testCompositeCollectionMemberExpression() @@ -132,7 +132,7 @@ public function testCompositeCollectionMemberExpression() $tours = $this->_em->createQuery($dql) ->getResult(); - $this->assertEquals(1, count($tours)); + self::assertEquals(1, count($tours)); } public function testSpecifyUnknownIdentifierPrimaryKeyFails() @@ -171,6 +171,6 @@ public function testDeleteCompositePersistentCollection() $this->_em->clear(); $poi = $this->_em->find(NavPointOfInterest::class, ['lat' => 100, 'long' => 200]); - $this->assertEquals(0, count($poi->getVisitors())); + self::assertEquals(0, count($poi->getVisitors())); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyWithAssociationsTest.php b/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyWithAssociationsTest.php index 533f611d402..dd6019da9c8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyWithAssociationsTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyWithAssociationsTest.php @@ -47,15 +47,15 @@ public function testFindByAbleToGetCompositeEntitiesWithMixedTypeIdentifiers() $admin1Rome = $admin1Repo->findOneBy(['country' => 'IT', 'id' => 1]); $names = $admin1NamesRepo->findBy(['admin1' => $admin1Rome]); - $this->assertCount(2, $names); + self::assertCount(2, $names); $name1 = $admin1NamesRepo->findOneBy(['admin1' => $admin1Rome, 'id' => 1]); $name2 = $admin1NamesRepo->findOneBy(['admin1' => $admin1Rome, 'id' => 2]); - $this->assertEquals(1, $name1->id); - $this->assertEquals("Roma", $name1->name); + self::assertEquals(1, $name1->id); + self::assertEquals("Roma", $name1->name); - $this->assertEquals(2, $name2->id); - $this->assertEquals("Rome", $name2->name); + self::assertEquals(2, $name2->id); + self::assertEquals("Rome", $name2->name); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/CustomFunctionsTest.php b/tests/Doctrine/Tests/ORM/Functional/CustomFunctionsTest.php index 79668b8f2cc..1aebb983e1b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/CustomFunctionsTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/CustomFunctionsTest.php @@ -44,8 +44,8 @@ public function testCustomFunctionDefinedWithCallback() $users = $query->getResult(); - $this->assertEquals(1, count($users)); - $this->assertSame($user, $users[0]); + self::assertEquals(1, count($users)); + self::assertSame($user, $users[0]); } public function testCustomFunctionOverride() diff --git a/tests/Doctrine/Tests/ORM/Functional/CustomIdObjectTypeTest.php b/tests/Doctrine/Tests/ORM/Functional/CustomIdObjectTypeTest.php index 08d89fa8ec2..c9e9e6da2fd 100644 --- a/tests/Doctrine/Tests/ORM/Functional/CustomIdObjectTypeTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/CustomIdObjectTypeTest.php @@ -33,7 +33,7 @@ public function testFindByCustomIdObject() $result = $this->_em->find(CustomIdObjectTypeParent::class, $parent->id); - $this->assertSame($parent, $result); + self::assertSame($parent, $result); } /** @@ -58,8 +58,8 @@ public function testFetchJoinCustomIdObject() ) ->getResult(); - $this->assertCount(1, $result); - $this->assertSame($parent, $result[0]); + self::assertCount(1, $result); + self::assertSame($parent, $result[0]); } /** @@ -87,7 +87,7 @@ public function testFetchJoinWhereCustomIdObject() ->setParameter(1, $parent->children->first()->id) ->getResult(); - $this->assertCount(1, $result); - $this->assertSame($parent, $result[0]); + self::assertCount(1, $result); + self::assertSame($parent, $result[0]); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php index 67d3a9fed8b..6a4dee110a6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php @@ -43,8 +43,8 @@ public function testIssue2059() $metadata = $this->convertToClassMetadata([$project, $user], []); - $this->assertTrue(isset($metadata['Ddc2059Project']->fieldMappings['user'])); - $this->assertTrue(isset($metadata['Ddc2059Project']->associationMappings['user2'])); + self::assertTrue(isset($metadata['Ddc2059Project']->fieldMappings['user'])); + self::assertTrue(isset($metadata['Ddc2059Project']->associationMappings['user2'])); } public function testLoadMetadataFromDatabase() @@ -62,20 +62,20 @@ public function testLoadMetadataFromDatabase() $metadatas = $this->extractClassMetadata(["DbdriverFoo"]); - $this->assertArrayHasKey('DbdriverFoo', $metadatas); + self::assertArrayHasKey('DbdriverFoo', $metadatas); $metadata = $metadatas['DbdriverFoo']; - $this->assertArrayHasKey('id', $metadata->fieldMappings); - $this->assertEquals('id', $metadata->fieldMappings['id']['fieldName']); - $this->assertEquals('id', strtolower($metadata->fieldMappings['id']['columnName'])); - $this->assertEquals('integer', $metadata->fieldMappings['id']['type']->getName()); - - $this->assertArrayHasKey('bar', $metadata->fieldMappings); - $this->assertEquals('bar', $metadata->fieldMappings['bar']['fieldName']); - $this->assertEquals('bar', strtolower($metadata->fieldMappings['bar']['columnName'])); - $this->assertEquals('string', $metadata->fieldMappings['bar']['type']->getName()); - $this->assertEquals(200, $metadata->fieldMappings['bar']['length']); - $this->assertTrue($metadata->fieldMappings['bar']['nullable']); + self::assertArrayHasKey('id', $metadata->fieldMappings); + self::assertEquals('id', $metadata->fieldMappings['id']['fieldName']); + self::assertEquals('id', strtolower($metadata->fieldMappings['id']['columnName'])); + self::assertEquals('integer', $metadata->fieldMappings['id']['type']->getName()); + + self::assertArrayHasKey('bar', $metadata->fieldMappings); + self::assertEquals('bar', $metadata->fieldMappings['bar']['fieldName']); + self::assertEquals('bar', strtolower($metadata->fieldMappings['bar']['columnName'])); + self::assertEquals('string', $metadata->fieldMappings['bar']['type']->getName()); + self::assertEquals(200, $metadata->fieldMappings['bar']['length']); + self::assertTrue($metadata->fieldMappings['bar']['nullable']); } public function testLoadMetadataWithForeignKeyFromDatabase() @@ -100,16 +100,16 @@ public function testLoadMetadataWithForeignKeyFromDatabase() $metadatas = $this->extractClassMetadata(["DbdriverBar", "DbdriverBaz"]); - $this->assertArrayHasKey('DbdriverBaz', $metadatas); + self::assertArrayHasKey('DbdriverBaz', $metadatas); $bazMetadata = $metadatas['DbdriverBaz']; - $this->assertArrayNotHasKey('barId', $bazMetadata->fieldMappings, "The foreign Key field should not be inflected as 'barId' field, its an association."); - $this->assertArrayHasKey('id', $bazMetadata->fieldMappings); + self::assertArrayNotHasKey('barId', $bazMetadata->fieldMappings, "The foreign Key field should not be inflected as 'barId' field, its an association."); + self::assertArrayHasKey('id', $bazMetadata->fieldMappings); $bazMetadata->associationMappings = \array_change_key_case($bazMetadata->associationMappings, \CASE_LOWER); - $this->assertArrayHasKey('bar', $bazMetadata->associationMappings); - $this->assertEquals(ClassMetadata::MANY_TO_ONE, $bazMetadata->associationMappings['bar']['type']); + self::assertArrayHasKey('bar', $bazMetadata->associationMappings); + self::assertEquals(ClassMetadata::MANY_TO_ONE, $bazMetadata->associationMappings['bar']['type']); } public function testDetectManyToManyTables() @@ -120,16 +120,16 @@ public function testDetectManyToManyTables() $metadatas = $this->extractClassMetadata(["CmsUsers", "CmsGroups", "CmsTags"]); - $this->assertArrayHasKey('CmsUsers', $metadatas, 'CmsUsers entity was not detected.'); - $this->assertArrayHasKey('CmsGroups', $metadatas, 'CmsGroups entity was not detected.'); - $this->assertArrayHasKey('CmsTags', $metadatas, 'CmsTags entity was not detected.'); + self::assertArrayHasKey('CmsUsers', $metadatas, 'CmsUsers entity was not detected.'); + self::assertArrayHasKey('CmsGroups', $metadatas, 'CmsGroups entity was not detected.'); + self::assertArrayHasKey('CmsTags', $metadatas, 'CmsTags entity was not detected.'); - $this->assertEquals(3, count($metadatas['CmsUsers']->associationMappings)); - $this->assertArrayHasKey('group', $metadatas['CmsUsers']->associationMappings); - $this->assertEquals(1, count($metadatas['CmsGroups']->associationMappings)); - $this->assertArrayHasKey('user', $metadatas['CmsGroups']->associationMappings); - $this->assertEquals(1, count($metadatas['CmsTags']->associationMappings)); - $this->assertArrayHasKey('user', $metadatas['CmsGroups']->associationMappings); + self::assertEquals(3, count($metadatas['CmsUsers']->associationMappings)); + self::assertArrayHasKey('group', $metadatas['CmsUsers']->associationMappings); + self::assertEquals(1, count($metadatas['CmsGroups']->associationMappings)); + self::assertArrayHasKey('user', $metadatas['CmsGroups']->associationMappings); + self::assertEquals(1, count($metadatas['CmsTags']->associationMappings)); + self::assertArrayHasKey('user', $metadatas['CmsGroups']->associationMappings); } public function testIgnoreManyToManyTableWithoutFurtherForeignKeyDetails() @@ -149,7 +149,7 @@ public function testIgnoreManyToManyTableWithoutFurtherForeignKeyDetails() $metadatas = $this->convertToClassMetadata([$tableA, $tableB], [$tableMany]); - $this->assertEquals(0, count($metadatas['DbdriverBaz']->associationMappings), "no association mappings should be detected."); + self::assertEquals(0, count($metadatas['DbdriverBaz']->associationMappings), "no association mappings should be detected."); } public function testLoadMetadataFromDatabaseDetail() @@ -179,41 +179,41 @@ public function testLoadMetadataFromDatabaseDetail() $metadatas = $this->extractClassMetadata(["DbdriverFoo"]); - $this->assertArrayHasKey('DbdriverFoo', $metadatas); + self::assertArrayHasKey('DbdriverFoo', $metadatas); $metadata = $metadatas['DbdriverFoo']; - $this->assertArrayHasKey('id', $metadata->fieldMappings); - $this->assertEquals('id', $metadata->fieldMappings['id']['fieldName']); - $this->assertEquals('id', strtolower($metadata->fieldMappings['id']['columnName'])); - $this->assertEquals('integer', (string) $metadata->fieldMappings['id']['type']); + self::assertArrayHasKey('id', $metadata->fieldMappings); + self::assertEquals('id', $metadata->fieldMappings['id']['fieldName']); + self::assertEquals('id', strtolower($metadata->fieldMappings['id']['columnName'])); + self::assertEquals('integer', (string) $metadata->fieldMappings['id']['type']); // FIXME: Condition here is fugly. // NOTE: PostgreSQL and SQL SERVER do not support UNSIGNED integer if ( ! $this->_em->getConnection()->getDatabasePlatform() instanceof PostgreSqlPlatform AND ! $this->_em->getConnection()->getDatabasePlatform() instanceof SQLServerPlatform) { - $this->assertArrayHasKey('columnUnsigned', $metadata->fieldMappings); - $this->assertTrue($metadata->fieldMappings['columnUnsigned']['options']['unsigned']); + self::assertArrayHasKey('columnUnsigned', $metadata->fieldMappings); + self::assertTrue($metadata->fieldMappings['columnUnsigned']['options']['unsigned']); } - $this->assertArrayHasKey('columnComment', $metadata->fieldMappings); - $this->assertEquals('test_comment', $metadata->fieldMappings['columnComment']['options']['comment']); + self::assertArrayHasKey('columnComment', $metadata->fieldMappings); + self::assertEquals('test_comment', $metadata->fieldMappings['columnComment']['options']['comment']); - $this->assertArrayHasKey('columnDefault', $metadata->fieldMappings); - $this->assertEquals('test_default', $metadata->fieldMappings['columnDefault']['options']['default']); + self::assertArrayHasKey('columnDefault', $metadata->fieldMappings); + self::assertEquals('test_default', $metadata->fieldMappings['columnDefault']['options']['default']); - $this->assertArrayHasKey('columnDecimal', $metadata->fieldMappings); - $this->assertEquals(4, $metadata->fieldMappings['columnDecimal']['precision']); - $this->assertEquals(3, $metadata->fieldMappings['columnDecimal']['scale']); + self::assertArrayHasKey('columnDecimal', $metadata->fieldMappings); + self::assertEquals(4, $metadata->fieldMappings['columnDecimal']['precision']); + self::assertEquals(3, $metadata->fieldMappings['columnDecimal']['scale']); - $this->assertTrue( ! empty($metadata->table['indexes']['index1']['columns'])); - $this->assertEquals( + self::assertTrue( ! empty($metadata->table['indexes']['index1']['columns'])); + self::assertEquals( ['column_index1','column_index2'], $metadata->table['indexes']['index1']['columns'] ); - $this->assertTrue( ! empty($metadata->table['uniqueConstraints']['unique_index1']['columns'])); - $this->assertEquals( + self::assertTrue( ! empty($metadata->table['uniqueConstraints']['unique_index1']['columns'])); + self::assertEquals( ['column_unique_index1', 'column_unique_index2'], $metadata->table['uniqueConstraints']['unique_index1']['columns'] ); diff --git a/tests/Doctrine/Tests/ORM/Functional/DefaultValuesTest.php b/tests/Doctrine/Tests/ORM/Functional/DefaultValuesTest.php index 2797ba8337b..05dea616ca7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DefaultValuesTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DefaultValuesTest.php @@ -40,7 +40,7 @@ public function testSimpleDetachMerge() { $user2 = $this->_em->getReference(get_class($user), $userId); $this->_em->flush(); - $this->assertFalse($user2->__isInitialized__); + self::assertFalse($user2->__isInitialized__); $a = new DefaultValueAddress; $a->country = 'de'; @@ -52,13 +52,13 @@ public function testSimpleDetachMerge() { $this->_em->persist($a); $this->_em->flush(); - $this->assertFalse($user2->__isInitialized__); + self::assertFalse($user2->__isInitialized__); $this->_em->clear(); $a2 = $this->_em->find(get_class($a), $a->id); - $this->assertInstanceOf(DefaultValueUser::class, $a2->getUser()); - $this->assertEquals($userId, $a2->getUser()->getId()); - $this->assertEquals('Poweruser', $a2->getUser()->type); + self::assertInstanceOf(DefaultValueUser::class, $a2->getUser()); + self::assertEquals($userId, $a2->getUser()->getId()); + self::assertEquals('Poweruser', $a2->getUser()->type); } /** @@ -75,14 +75,14 @@ public function testGetPartialReferenceWithDefaultValueNotEvaluatedInFlush() $this->_em->clear(); $user = $this->_em->getPartialReference(DefaultValueUser::class, $user->id); - $this->assertTrue($this->_em->getUnitOfWork()->isReadOnly($user)); + self::assertTrue($this->_em->getUnitOfWork()->isReadOnly($user)); $this->_em->flush(); $this->_em->clear(); $user = $this->_em->find(DefaultValueUser::class, $user->id); - $this->assertEquals('Normaluser', $user->type); + self::assertEquals('Normaluser', $user->type); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php b/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php index 523c98c0943..62dd28ebb8b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php @@ -35,15 +35,15 @@ public function testSimpleDetachMerge() $this->_em->clear(); // $user is now detached - $this->assertFalse($this->_em->contains($user)); + self::assertFalse($this->_em->contains($user)); $user->name = 'Roman B.'; $user2 = $this->_em->merge($user); - $this->assertFalse($user === $user2); - $this->assertTrue($this->_em->contains($user2)); - $this->assertEquals('Roman B.', $user2->name); + self::assertFalse($user === $user2); + self::assertTrue($this->_em->contains($user2)); + self::assertEquals('Roman B.', $user2->name); } public function testSerializeUnserializeModifyMerge() @@ -60,20 +60,20 @@ public function testSerializeUnserializeModifyMerge() $this->_em->persist($user); $this->_em->flush(); - $this->assertTrue($this->_em->contains($user)); - $this->assertTrue($user->phonenumbers->isInitialized()); + self::assertTrue($this->_em->contains($user)); + self::assertTrue($user->phonenumbers->isInitialized()); $serialized = serialize($user); $this->_em->clear(); - $this->assertFalse($this->_em->contains($user)); + self::assertFalse($this->_em->contains($user)); unset($user); $user = unserialize($serialized); - $this->assertEquals(1, count($user->getPhonenumbers()), "Pre-Condition: 1 Phonenumber"); + self::assertEquals(1, count($user->getPhonenumbers()), "Pre-Condition: 1 Phonenumber"); $ph2 = new CmsPhonenumber; @@ -82,29 +82,29 @@ public function testSerializeUnserializeModifyMerge() $oldPhonenumbers = $user->getPhonenumbers(); - $this->assertEquals(2, count($oldPhonenumbers), "Pre-Condition: 2 Phonenumbers"); - $this->assertFalse($this->_em->contains($user)); + self::assertEquals(2, count($oldPhonenumbers), "Pre-Condition: 2 Phonenumbers"); + self::assertFalse($this->_em->contains($user)); $this->_em->persist($ph2); // Merge back in $user = $this->_em->merge($user); // merge cascaded to phonenumbers - $this->assertInstanceOf(CmsUser::class, $user->phonenumbers[0]->user); - $this->assertInstanceOf(CmsUser::class, $user->phonenumbers[1]->user); + self::assertInstanceOf(CmsUser::class, $user->phonenumbers[0]->user); + self::assertInstanceOf(CmsUser::class, $user->phonenumbers[1]->user); $im = $this->_em->getUnitOfWork()->getIdentityMap(); $this->_em->flush(); - $this->assertTrue($this->_em->contains($user), "Failed to assert that merged user is contained inside EntityManager persistence context."); + self::assertTrue($this->_em->contains($user), "Failed to assert that merged user is contained inside EntityManager persistence context."); $phonenumbers = $user->getPhonenumbers(); - $this->assertNotSame($oldPhonenumbers, $phonenumbers, "Merge should replace the Detached Collection with a new PersistentCollection."); - $this->assertEquals(2, count($phonenumbers), "Failed to assert that two phonenumbers are contained in the merged users phonenumber collection."); + self::assertNotSame($oldPhonenumbers, $phonenumbers, "Merge should replace the Detached Collection with a new PersistentCollection."); + self::assertEquals(2, count($phonenumbers), "Failed to assert that two phonenumbers are contained in the merged users phonenumber collection."); - $this->assertInstanceOf(CmsPhonenumber::class, $phonenumbers[1]); - $this->assertTrue($this->_em->contains($phonenumbers[1]), "Failed to assert that second phonenumber in collection is contained inside EntityManager persistence context."); + self::assertInstanceOf(CmsPhonenumber::class, $phonenumbers[1]); + self::assertTrue($this->_em->contains($phonenumbers[1]), "Failed to assert that second phonenumber in collection is contained inside EntityManager persistence context."); - $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."); + self::assertInstanceOf(CmsPhonenumber::class, $phonenumbers[0]); + self::assertTrue($this->_em->getUnitOfWork()->isInIdentityMap($phonenumbers[0])); + self::assertTrue($this->_em->contains($phonenumbers[0]), "Failed to assert that first phonenumber in collection is contained inside EntityManager persistence context."); } /** @@ -146,16 +146,16 @@ public function testUninitializedLazyAssociationsAreIgnoredOnMerge() $this->_em->clear(); $address2 = $this->_em->find(get_class($address), $address->id); - $this->assertInstanceOf(Proxy::class, $address2->user); - $this->assertFalse($address2->user->__isInitialized__); + self::assertInstanceOf(Proxy::class, $address2->user); + self::assertFalse($address2->user->__isInitialized__); $detachedAddress2 = unserialize(serialize($address2)); - $this->assertInstanceOf(Proxy::class, $detachedAddress2->user); - $this->assertFalse($detachedAddress2->user->__isInitialized__); + self::assertInstanceOf(Proxy::class, $detachedAddress2->user); + self::assertFalse($detachedAddress2->user->__isInitialized__); $managedAddress2 = $this->_em->merge($detachedAddress2); - $this->assertInstanceOf(Proxy::class, $managedAddress2->user); - $this->assertFalse($managedAddress2->user === $detachedAddress2->user); - $this->assertFalse($managedAddress2->user->__isInitialized__); + self::assertInstanceOf(Proxy::class, $managedAddress2->user); + self::assertFalse($managedAddress2->user === $detachedAddress2->user); + self::assertFalse($managedAddress2->user->__isInitialized__); } /** @@ -179,8 +179,8 @@ public function testUseDetachedEntityAsQueryParameter() $newUser = $query->getSingleResult(); - $this->assertInstanceOf(CmsUser::class, $newUser); - $this->assertEquals('gblanco', $newUser->username); + self::assertInstanceOf(CmsUser::class, $newUser); + self::assertEquals('gblanco', $newUser->username); } /** @@ -198,8 +198,8 @@ public function testDetachManagedUnpersistedEntity() $this->_em->flush(); - $this->assertFalse($this->_em->contains($user)); - $this->assertFalse($this->_em->getUnitOfWork()->isInIdentityMap($user)); + self::assertFalse($this->_em->contains($user)); + self::assertFalse($this->_em->getUnitOfWork()->isInIdentityMap($user)); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/EntityListenersTest.php b/tests/Doctrine/Tests/ORM/Functional/EntityListenersTest.php index 98457dd49db..8e1610e4bd0 100644 --- a/tests/Doctrine/Tests/ORM/Functional/EntityListenersTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/EntityListenersTest.php @@ -40,10 +40,10 @@ public function testPreFlushListeners() $this->_em->persist($fix); $this->_em->flush(); - $this->assertCount(1,$this->listener->preFlushCalls); - $this->assertSame($fix, $this->listener->preFlushCalls[0][0]); - $this->assertInstanceOf(CompanyFixContract::class, $this->listener->preFlushCalls[0][0]); - $this->assertInstanceOf(PreFlushEventArgs::class, $this->listener->preFlushCalls[0][1]); + self::assertCount(1,$this->listener->preFlushCalls); + self::assertSame($fix, $this->listener->preFlushCalls[0][0]); + self::assertInstanceOf(CompanyFixContract::class, $this->listener->preFlushCalls[0][0]); + self::assertInstanceOf(PreFlushEventArgs::class, $this->listener->preFlushCalls[0][1]); } public function testPostLoadListeners() @@ -60,10 +60,10 @@ public function testPostLoadListeners() $dql = "SELECT f FROM Doctrine\Tests\Models\Company\CompanyFixContract f WHERE f.id = ?1"; $fix = $this->_em->createQuery($dql)->setParameter(1, $fix->getId())->getSingleResult(); - $this->assertCount(1,$this->listener->postLoadCalls); - $this->assertSame($fix, $this->listener->postLoadCalls[0][0]); - $this->assertInstanceOf(CompanyFixContract::class, $this->listener->postLoadCalls[0][0]); - $this->assertInstanceOf(LifecycleEventArgs::class, $this->listener->postLoadCalls[0][1]); + self::assertCount(1,$this->listener->postLoadCalls); + self::assertSame($fix, $this->listener->postLoadCalls[0][0]); + self::assertInstanceOf(CompanyFixContract::class, $this->listener->postLoadCalls[0][0]); + self::assertInstanceOf(LifecycleEventArgs::class, $this->listener->postLoadCalls[0][1]); } public function testPrePersistListeners() @@ -76,10 +76,10 @@ public function testPrePersistListeners() $this->_em->persist($fix); $this->_em->flush(); - $this->assertCount(1,$this->listener->prePersistCalls); - $this->assertSame($fix, $this->listener->prePersistCalls[0][0]); - $this->assertInstanceOf(CompanyFixContract::class, $this->listener->prePersistCalls[0][0]); - $this->assertInstanceOf(LifecycleEventArgs::class, $this->listener->prePersistCalls[0][1]); + self::assertCount(1,$this->listener->prePersistCalls); + self::assertSame($fix, $this->listener->prePersistCalls[0][0]); + self::assertInstanceOf(CompanyFixContract::class, $this->listener->prePersistCalls[0][0]); + self::assertInstanceOf(LifecycleEventArgs::class, $this->listener->prePersistCalls[0][1]); } public function testPostPersistListeners() @@ -92,10 +92,10 @@ public function testPostPersistListeners() $this->_em->persist($fix); $this->_em->flush(); - $this->assertCount(1,$this->listener->postPersistCalls); - $this->assertSame($fix, $this->listener->postPersistCalls[0][0]); - $this->assertInstanceOf(CompanyFixContract::class, $this->listener->postPersistCalls[0][0]); - $this->assertInstanceOf(LifecycleEventArgs::class, $this->listener->postPersistCalls[0][1]); + self::assertCount(1,$this->listener->postPersistCalls); + self::assertSame($fix, $this->listener->postPersistCalls[0][0]); + self::assertInstanceOf(CompanyFixContract::class, $this->listener->postPersistCalls[0][0]); + self::assertInstanceOf(LifecycleEventArgs::class, $this->listener->postPersistCalls[0][1]); } public function testPreUpdateListeners() @@ -113,10 +113,10 @@ public function testPreUpdateListeners() $this->_em->persist($fix); $this->_em->flush(); - $this->assertCount(1,$this->listener->preUpdateCalls); - $this->assertSame($fix, $this->listener->preUpdateCalls[0][0]); - $this->assertInstanceOf(CompanyFixContract::class, $this->listener->preUpdateCalls[0][0]); - $this->assertInstanceOf(PreUpdateEventArgs::class, $this->listener->preUpdateCalls[0][1]); + self::assertCount(1,$this->listener->preUpdateCalls); + self::assertSame($fix, $this->listener->preUpdateCalls[0][0]); + self::assertInstanceOf(CompanyFixContract::class, $this->listener->preUpdateCalls[0][0]); + self::assertInstanceOf(PreUpdateEventArgs::class, $this->listener->preUpdateCalls[0][1]); } public function testPostUpdateListeners() @@ -134,10 +134,10 @@ public function testPostUpdateListeners() $this->_em->persist($fix); $this->_em->flush(); - $this->assertCount(1,$this->listener->postUpdateCalls); - $this->assertSame($fix, $this->listener->postUpdateCalls[0][0]); - $this->assertInstanceOf(CompanyFixContract::class, $this->listener->postUpdateCalls[0][0]); - $this->assertInstanceOf(LifecycleEventArgs::class, $this->listener->postUpdateCalls[0][1]); + self::assertCount(1,$this->listener->postUpdateCalls); + self::assertSame($fix, $this->listener->postUpdateCalls[0][0]); + self::assertInstanceOf(CompanyFixContract::class, $this->listener->postUpdateCalls[0][0]); + self::assertInstanceOf(LifecycleEventArgs::class, $this->listener->postUpdateCalls[0][1]); } public function testPreRemoveListeners() @@ -153,10 +153,10 @@ public function testPreRemoveListeners() $this->_em->remove($fix); $this->_em->flush(); - $this->assertCount(1,$this->listener->preRemoveCalls); - $this->assertSame($fix, $this->listener->preRemoveCalls[0][0]); - $this->assertInstanceOf(CompanyFixContract::class, $this->listener->preRemoveCalls[0][0]); - $this->assertInstanceOf(LifecycleEventArgs::class, $this->listener->preRemoveCalls[0][1]); + self::assertCount(1,$this->listener->preRemoveCalls); + self::assertSame($fix, $this->listener->preRemoveCalls[0][0]); + self::assertInstanceOf(CompanyFixContract::class, $this->listener->preRemoveCalls[0][0]); + self::assertInstanceOf(LifecycleEventArgs::class, $this->listener->preRemoveCalls[0][1]); } public function testPostRemoveListeners() @@ -172,9 +172,9 @@ public function testPostRemoveListeners() $this->_em->remove($fix); $this->_em->flush(); - $this->assertCount(1,$this->listener->postRemoveCalls); - $this->assertSame($fix, $this->listener->postRemoveCalls[0][0]); - $this->assertInstanceOf(CompanyFixContract::class, $this->listener->postRemoveCalls[0][0]); - $this->assertInstanceOf(LifecycleEventArgs::class, $this->listener->postRemoveCalls[0][1]); + self::assertCount(1,$this->listener->postRemoveCalls); + self::assertSame($fix, $this->listener->postRemoveCalls[0][0]); + self::assertInstanceOf(CompanyFixContract::class, $this->listener->postRemoveCalls[0][0]); + self::assertInstanceOf(LifecycleEventArgs::class, $this->listener->postRemoveCalls[0][1]); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryCriteriaTest.php b/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryCriteriaTest.php index 700964b97da..f5dd1ed4b03 100644 --- a/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryCriteriaTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryCriteriaTest.php @@ -70,7 +70,7 @@ public function testLteDateComparison() Criteria::expr()->lte('datetime', new \DateTime('today')) )); - $this->assertEquals(2, count($dates)); + self::assertEquals(2, count($dates)); } private function loadNullFieldFixtures() @@ -102,7 +102,7 @@ public function testIsNullComparison() Criteria::expr()->isNull('time') )); - $this->assertEquals(1, count($dates)); + self::assertEquals(1, count($dates)); } public function testEqNullComparison() @@ -114,7 +114,7 @@ public function testEqNullComparison() Criteria::expr()->eq('time', null) )); - $this->assertEquals(1, count($dates)); + self::assertEquals(1, count($dates)); } public function testNotEqNullComparison() @@ -126,7 +126,7 @@ public function testNotEqNullComparison() Criteria::expr()->neq('time', null) )); - $this->assertEquals(1, count($dates)); + self::assertEquals(1, count($dates)); } public function testCanCountWithoutLoadingCollection() @@ -136,22 +136,22 @@ public function testCanCountWithoutLoadingCollection() $dates = $repository->matching(new Criteria()); - $this->assertFalse($dates->isInitialized()); - $this->assertCount(3, $dates); - $this->assertFalse($dates->isInitialized()); + self::assertFalse($dates->isInitialized()); + self::assertCount(3, $dates); + self::assertFalse($dates->isInitialized()); // Test it can work even with a constraint $dates = $repository->matching(new Criteria( Criteria::expr()->lte('datetime', new \DateTime('today')) )); - $this->assertFalse($dates->isInitialized()); - $this->assertCount(2, $dates); - $this->assertFalse($dates->isInitialized()); + self::assertFalse($dates->isInitialized()); + self::assertCount(2, $dates); + self::assertFalse($dates->isInitialized()); // Trigger a loading, to make sure collection is initialized $date = $dates[0]; - $this->assertTrue($dates->isInitialized()); + self::assertTrue($dates->isInitialized()); } public function testCanContainsWithoutLoadingCollection() @@ -175,12 +175,12 @@ public function testCanContainsWithoutLoadingCollection() $user = $this->_em->find(User::class, $user->id); $tweets = $user->tweets->matching($criteria); - $this->assertInstanceOf(LazyCriteriaCollection::class, $tweets); - $this->assertFalse($tweets->isInitialized()); + self::assertInstanceOf(LazyCriteriaCollection::class, $tweets); + self::assertFalse($tweets->isInitialized()); $tweets->contains($tweet); - $this->assertTrue($tweets->contains($tweet)); + self::assertTrue($tweets->contains($tweet)); - $this->assertFalse($tweets->isInitialized()); + self::assertFalse($tweets->isInitialized()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryTest.php b/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryTest.php index ebc7acee973..33daa15cc00 100644 --- a/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryTest.php @@ -180,9 +180,9 @@ public function testBasicFind() $repos = $this->_em->getRepository(CmsUser::class); $user = $repos->find($user1Id); - $this->assertInstanceOf(CmsUser::class,$user); - $this->assertEquals('Roman', $user->name); - $this->assertEquals('freak', $user->status); + self::assertInstanceOf(CmsUser::class,$user); + self::assertEquals('Roman', $user->name); + self::assertEquals('freak', $user->status); } public function testFindByField() @@ -191,10 +191,10 @@ public function testFindByField() $repos = $this->_em->getRepository(CmsUser::class); $users = $repos->findBy(['status' => 'dev']); - $this->assertEquals(2, count($users)); - $this->assertInstanceOf(CmsUser::class,$users[0]); - $this->assertEquals('Guilherme', $users[0]->name); - $this->assertEquals('dev', $users[0]->status); + self::assertEquals(2, count($users)); + self::assertInstanceOf(CmsUser::class,$users[0]); + self::assertEquals('Guilherme', $users[0]->name); + self::assertEquals('dev', $users[0]->status); } public function testFindByAssociationWithIntegerAsParameter() @@ -217,8 +217,8 @@ public function testFindByAssociationWithIntegerAsParameter() $repository = $this->_em->getRepository(CmsAddress::class); $addresses = $repository->findBy(['user' => [$user1->getId(), $user2->getId()]]); - $this->assertEquals(2, count($addresses)); - $this->assertInstanceOf(CmsAddress::class,$addresses[0]); + self::assertEquals(2, count($addresses)); + self::assertInstanceOf(CmsAddress::class,$addresses[0]); } public function testFindByAssociationWithObjectAsParameter() @@ -241,8 +241,8 @@ public function testFindByAssociationWithObjectAsParameter() $repository = $this->_em->getRepository(CmsAddress::class); $addresses = $repository->findBy(['user' => [$user1, $user2]]); - $this->assertEquals(2, count($addresses)); - $this->assertInstanceOf(CmsAddress::class,$addresses[0]); + self::assertEquals(2, count($addresses)); + self::assertInstanceOf(CmsAddress::class,$addresses[0]); } public function testFindFieldByMagicCall() @@ -251,10 +251,10 @@ public function testFindFieldByMagicCall() $repos = $this->_em->getRepository(CmsUser::class); $users = $repos->findByStatus('dev'); - $this->assertEquals(2, count($users)); - $this->assertInstanceOf(CmsUser::class,$users[0]); - $this->assertEquals('Guilherme', $users[0]->name); - $this->assertEquals('dev', $users[0]->status); + self::assertEquals(2, count($users)); + self::assertInstanceOf(CmsUser::class,$users[0]); + self::assertEquals('Guilherme', $users[0]->name); + self::assertEquals('dev', $users[0]->status); } public function testFindAll() @@ -263,7 +263,7 @@ public function testFindAll() $repos = $this->_em->getRepository(CmsUser::class); $users = $repos->findAll(); - $this->assertEquals(4, count($users)); + self::assertEquals(4, count($users)); } public function testFindByAlias() @@ -276,7 +276,7 @@ public function testFindByAlias() $repos = $this->_em->getRepository('CMS:CmsUser'); $users = $repos->findAll(); - $this->assertEquals(4, count($users)); + self::assertEquals(4, count($users)); } public function testCount() @@ -387,7 +387,7 @@ public function testFindMagicCallByNullValue() $repos = $this->_em->getRepository(CmsUser::class); $users = $repos->findByStatus(null); - $this->assertEquals(1, count($users)); + self::assertEquals(1, count($users)); } /** @@ -424,8 +424,8 @@ public function testFindOneByAssociationKey() $repos = $this->_em->getRepository(CmsAddress::class); $address = $repos->findOneBy(['user' => $userId]); - $this->assertInstanceOf(CmsAddress::class, $address); - $this->assertEquals($addressId, $address->id); + self::assertInstanceOf(CmsAddress::class, $address); + self::assertEquals($addressId, $address->id); } /** @@ -439,7 +439,7 @@ public function testFindOneByOrderBy() $userAsc = $repos->findOneBy([], ["username" => "ASC"]); $userDesc = $repos->findOneBy([], ["username" => "DESC"]); - $this->assertNotSame($userAsc, $userDesc); + self::assertNotSame($userAsc, $userDesc); } /** @@ -451,9 +451,9 @@ public function testFindByAssociationKey() $repos = $this->_em->getRepository(CmsAddress::class); $addresses = $repos->findBy(['user' => $userId]); - $this->assertContainsOnly(CmsAddress::class, $addresses); - $this->assertEquals(1, count($addresses)); - $this->assertEquals($addressId, $addresses[0]->id); + self::assertContainsOnly(CmsAddress::class, $addresses); + self::assertEquals(1, count($addresses)); + self::assertEquals($addressId, $addresses[0]->id); } /** @@ -465,9 +465,9 @@ public function testFindAssociationByMagicCall() $repos = $this->_em->getRepository(CmsAddress::class); $addresses = $repos->findByUser($userId); - $this->assertContainsOnly(CmsAddress::class, $addresses); - $this->assertEquals(1, count($addresses)); - $this->assertEquals($addressId, $addresses[0]->id); + self::assertContainsOnly(CmsAddress::class, $addresses); + self::assertEquals(1, count($addresses)); + self::assertEquals($addressId, $addresses[0]->id); } /** @@ -479,8 +479,8 @@ public function testFindOneAssociationByMagicCall() $repos = $this->_em->getRepository(CmsAddress::class); $address = $repos->findOneByUser($userId); - $this->assertInstanceOf(CmsAddress::class, $address); - $this->assertEquals($addressId, $address->id); + self::assertInstanceOf(CmsAddress::class, $address); + self::assertEquals($addressId, $address->id); } public function testValidNamedQueryRetrieval() @@ -489,8 +489,8 @@ public function testValidNamedQueryRetrieval() $query = $repos->createNamedQuery('all'); - $this->assertInstanceOf(Query::class, $query); - $this->assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u', $query->getDQL()); + self::assertInstanceOf(Query::class, $query); + self::assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u', $query->getDQL()); } public function testInvalidNamedQueryRetrieval() @@ -511,8 +511,8 @@ public function testIsNullCriteriaDoesNotGenerateAParameter() $users = $repos->findBy(['status' => null, 'username' => 'romanb']); $params = $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery]['params']; - $this->assertEquals(1, count($params), "Should only execute with one parameter."); - $this->assertEquals(['romanb'], $params); + self::assertEquals(1, count($params), "Should only execute with one parameter."); + self::assertEquals(['romanb'], $params); } public function testIsNullCriteria() @@ -522,7 +522,7 @@ public function testIsNullCriteria() $repos = $this->_em->getRepository(CmsUser::class); $users = $repos->findBy(['status' => null]); - $this->assertEquals(1, count($users)); + self::assertEquals(1, count($users)); } /** @@ -537,10 +537,10 @@ public function testFindByLimitOffset() $users1 = $repos->findBy([], null, 1, 0); $users2 = $repos->findBy([], null, 1, 1); - $this->assertEquals(4, count($repos->findBy([]))); - $this->assertEquals(1, count($users1)); - $this->assertEquals(1, count($users2)); - $this->assertNotSame($users1[0], $users2[0]); + self::assertEquals(4, count($repos->findBy([]))); + self::assertEquals(1, count($users1)); + self::assertEquals(1, count($users2)); + self::assertNotSame($users1[0], $users2[0]); } /** @@ -554,10 +554,10 @@ public function testFindByOrderBy() $usersAsc = $repos->findBy([], ["username" => "ASC"]); $usersDesc = $repos->findBy([], ["username" => "DESC"]); - $this->assertEquals(4, count($usersAsc), "Pre-condition: only four users in fixture"); - $this->assertEquals(4, count($usersDesc), "Pre-condition: only four users in fixture"); - $this->assertSame($usersAsc[0], $usersDesc[3]); - $this->assertSame($usersAsc[3], $usersDesc[0]); + self::assertEquals(4, count($usersAsc), "Pre-condition: only four users in fixture"); + self::assertEquals(4, count($usersDesc), "Pre-condition: only four users in fixture"); + self::assertSame($usersAsc[0], $usersDesc[3]); + self::assertSame($usersAsc[3], $usersDesc[0]); } /** @@ -571,11 +571,11 @@ public function testFindByOrderByAssociation() $resultAsc = $repository->findBy([], ['email' => 'ASC']); $resultDesc = $repository->findBy([], ['email' => 'DESC']); - $this->assertCount(3, $resultAsc); - $this->assertCount(3, $resultDesc); + self::assertCount(3, $resultAsc); + self::assertCount(3, $resultDesc); - $this->assertEquals($resultAsc[0]->getEmail()->getId(), $resultDesc[2]->getEmail()->getId()); - $this->assertEquals($resultAsc[2]->getEmail()->getId(), $resultDesc[0]->getEmail()->getId()); + self::assertEquals($resultAsc[0]->getEmail()->getId(), $resultDesc[2]->getEmail()->getId()); + self::assertEquals($resultAsc[2]->getEmail()->getId(), $resultDesc[0]->getEmail()->getId()); } /** @@ -589,15 +589,15 @@ public function testFindFieldByMagicCallOrderBy() $usersAsc = $repos->findByStatus('dev', ['username' => "ASC"]); $usersDesc = $repos->findByStatus('dev', ['username' => "DESC"]); - $this->assertEquals(2, count($usersAsc)); - $this->assertEquals(2, count($usersDesc)); + self::assertEquals(2, count($usersAsc)); + self::assertEquals(2, count($usersDesc)); - $this->assertInstanceOf(CmsUser::class,$usersAsc[0]); - $this->assertEquals('Alexander', $usersAsc[0]->name); - $this->assertEquals('dev', $usersAsc[0]->status); + self::assertInstanceOf(CmsUser::class,$usersAsc[0]); + self::assertEquals('Alexander', $usersAsc[0]->name); + self::assertEquals('dev', $usersAsc[0]->status); - $this->assertSame($usersAsc[0], $usersDesc[1]); - $this->assertSame($usersAsc[1], $usersDesc[0]); + self::assertSame($usersAsc[0], $usersDesc[1]); + self::assertSame($usersAsc[1], $usersDesc[0]); } /** @@ -611,9 +611,9 @@ public function testFindFieldByMagicCallLimitOffset() $users1 = $repos->findByStatus('dev', [], 1, 0); $users2 = $repos->findByStatus('dev', [], 1, 1); - $this->assertEquals(1, count($users1)); - $this->assertEquals(1, count($users2)); - $this->assertNotSame($users1[0], $users2[0]); + self::assertEquals(1, count($users1)); + self::assertEquals(1, count($users2)); + self::assertNotSame($users1[0], $users2[0]); } /** @@ -621,22 +621,22 @@ public function testFindFieldByMagicCallLimitOffset() */ public function testDefaultRepositoryClassName() { - $this->assertEquals($this->_em->getConfiguration()->getDefaultRepositoryClassName(), EntityRepository::class); + self::assertEquals($this->_em->getConfiguration()->getDefaultRepositoryClassName(), EntityRepository::class); $this->_em->getConfiguration()->setDefaultRepositoryClassName(DDC753DefaultRepository::class); - $this->assertEquals($this->_em->getConfiguration()->getDefaultRepositoryClassName(), DDC753DefaultRepository::class); + self::assertEquals($this->_em->getConfiguration()->getDefaultRepositoryClassName(), DDC753DefaultRepository::class); $repos = $this->_em->getRepository(DDC753EntityWithDefaultCustomRepository::class); - $this->assertInstanceOf(DDC753DefaultRepository::class, $repos); - $this->assertTrue($repos->isDefaultRepository()); + self::assertInstanceOf(DDC753DefaultRepository::class, $repos); + self::assertTrue($repos->isDefaultRepository()); $repos = $this->_em->getRepository(DDC753EntityWithCustomRepository::class); - $this->assertInstanceOf(DDC753CustomRepository::class, $repos); - $this->assertTrue($repos->isCustomRepository()); + self::assertInstanceOf(DDC753CustomRepository::class, $repos); + self::assertTrue($repos->isCustomRepository()); - $this->assertEquals($this->_em->getConfiguration()->getDefaultRepositoryClassName(), DDC753DefaultRepository::class); + self::assertEquals($this->_em->getConfiguration()->getDefaultRepositoryClassName(), DDC753DefaultRepository::class); $this->_em->getConfiguration()->setDefaultRepositoryClassName(EntityRepository::class); - $this->assertEquals($this->_em->getConfiguration()->getDefaultRepositoryClassName(), EntityRepository::class); + self::assertEquals($this->_em->getConfiguration()->getDefaultRepositoryClassName(), EntityRepository::class); } @@ -647,7 +647,7 @@ public function testDefaultRepositoryClassName() */ public function testSetDefaultRepositoryInvalidClassError() { - $this->assertEquals($this->_em->getConfiguration()->getDefaultRepositoryClassName(), EntityRepository::class); + self::assertEquals($this->_em->getConfiguration()->getDefaultRepositoryClassName(), EntityRepository::class); $this->_em->getConfiguration()->setDefaultRepositoryClassName(DDC753InvalidRepository::class); } @@ -663,8 +663,8 @@ public function testSingleRepositoryInstanceForDifferentEntityAliases() $repository = $this->_em->getRepository(CmsUser::class); - $this->assertSame($repository, $this->_em->getRepository('Aliased:CmsUser')); - $this->assertSame($repository, $this->_em->getRepository('AliasedAgain:CmsUser')); + self::assertSame($repository, $this->_em->getRepository('Aliased:CmsUser')); + self::assertSame($repository, $this->_em->getRepository('AliasedAgain:CmsUser')); } /** @@ -672,7 +672,7 @@ public function testSingleRepositoryInstanceForDifferentEntityAliases() */ public function testCanRetrieveRepositoryFromClassNameWithLeadingBackslash() { - $this->assertSame( + self::assertSame( $this->_em->getRepository('\\' . CmsUser::class), $this->_em->getRepository(CmsUser::class) ); @@ -711,8 +711,8 @@ public function testFindByAssociationArray() $data = $repo->findBy(['user' => [1, 2, 3]]); $query = array_pop($this->_sqlLoggerStack->queries); - $this->assertEquals([1,2,3], $query['params'][0]); - $this->assertEquals(Connection::PARAM_INT_ARRAY, $query['types'][0]); + self::assertEquals([1,2,3], $query['params'][0]); + self::assertEquals(Connection::PARAM_INT_ARRAY, $query['types'][0]); } /** @@ -725,7 +725,7 @@ public function testMatchingEmptyCriteria() $repository = $this->_em->getRepository(CmsUser::class); $users = $repository->matching(new Criteria()); - $this->assertEquals(4, count($users)); + self::assertEquals(4, count($users)); } /** @@ -740,7 +740,7 @@ public function testMatchingCriteriaEqComparison() Criteria::expr()->eq('username', 'beberlei') )); - $this->assertEquals(1, count($users)); + self::assertEquals(1, count($users)); } /** @@ -755,7 +755,7 @@ public function testMatchingCriteriaNeqComparison() Criteria::expr()->neq('username', 'beberlei') )); - $this->assertEquals(3, count($users)); + self::assertEquals(3, count($users)); } /** @@ -770,7 +770,7 @@ public function testMatchingCriteriaInComparison() Criteria::expr()->in('username', ['beberlei', 'gblanco']) )); - $this->assertEquals(2, count($users)); + self::assertEquals(2, count($users)); } /** @@ -785,7 +785,7 @@ public function testMatchingCriteriaNotInComparison() Criteria::expr()->notIn('username', ['beberlei', 'gblanco', 'asm89']) )); - $this->assertEquals(1, count($users)); + self::assertEquals(1, count($users)); } /** @@ -800,7 +800,7 @@ public function testMatchingCriteriaLtComparison() Criteria::expr()->lt('id', $firstUserId + 1) )); - $this->assertEquals(1, count($users)); + self::assertEquals(1, count($users)); } /** @@ -815,7 +815,7 @@ public function testMatchingCriteriaLeComparison() Criteria::expr()->lte('id', $firstUserId + 1) )); - $this->assertEquals(2, count($users)); + self::assertEquals(2, count($users)); } /** @@ -830,7 +830,7 @@ public function testMatchingCriteriaGtComparison() Criteria::expr()->gt('id', $firstUserId) )); - $this->assertEquals(3, count($users)); + self::assertEquals(3, count($users)); } /** @@ -845,7 +845,7 @@ public function testMatchingCriteriaGteComparison() Criteria::expr()->gte('id', $firstUserId) )); - $this->assertEquals(4, count($users)); + self::assertEquals(4, count($users)); } /** @@ -864,11 +864,11 @@ public function testMatchingCriteriaAssocationByObjectInMemory() $repository = $this->_em->getRepository(CmsAddress::class); $addresses = $repository->matching($criteria); - $this->assertEquals(1, count($addresses)); + self::assertEquals(1, count($addresses)); $addresses = new ArrayCollection($repository->findAll()); - $this->assertEquals(1, count($addresses->matching($criteria))); + self::assertEquals(1, count($addresses->matching($criteria))); } /** @@ -887,11 +887,11 @@ public function testMatchingCriteriaAssocationInWithArray() $repository = $this->_em->getRepository(CmsAddress::class); $addresses = $repository->matching($criteria); - $this->assertEquals(1, count($addresses)); + self::assertEquals(1, count($addresses)); $addresses = new ArrayCollection($repository->findAll()); - $this->assertEquals(1, count($addresses->matching($criteria))); + self::assertEquals(1, count($addresses->matching($criteria))); } public function testMatchingCriteriaContainsComparison() @@ -901,13 +901,13 @@ public function testMatchingCriteriaContainsComparison() $repository = $this->_em->getRepository(CmsUser::class); $users = $repository->matching(new Criteria(Criteria::expr()->contains('name', 'Foobar'))); - $this->assertEquals(0, count($users)); + self::assertEquals(0, count($users)); $users = $repository->matching(new Criteria(Criteria::expr()->contains('name', 'Rom'))); - $this->assertEquals(1, count($users)); + self::assertEquals(1, count($users)); $users = $repository->matching(new Criteria(Criteria::expr()->contains('status', 'dev'))); - $this->assertEquals(2, count($users)); + self::assertEquals(2, count($users)); } public function testMatchingCriteriaStartsWithComparison() @@ -961,14 +961,14 @@ public function testMatchingCriteriaNullAssocComparison() $usersIsNull = $repository->matching($criteriaIsNull); $usersEqNull = $repository->matching($criteriaEqNull); - $this->assertCount(1, $usersIsNull); - $this->assertCount(1, $usersEqNull); + self::assertCount(1, $usersIsNull); + self::assertCount(1, $usersEqNull); - $this->assertInstanceOf(CmsUser::class, $usersIsNull[0]); - $this->assertInstanceOf(CmsUser::class, $usersEqNull[0]); + self::assertInstanceOf(CmsUser::class, $usersIsNull[0]); + self::assertInstanceOf(CmsUser::class, $usersEqNull[0]); - $this->assertNull($usersIsNull[0]->getEmail()); - $this->assertNull($usersEqNull[0]->getEmail()); + self::assertNull($usersIsNull[0]->getEmail()); + self::assertNull($usersEqNull[0]->getEmail()); } /** @@ -979,8 +979,8 @@ public function testCreateResultSetMappingBuilder() $repository = $this->_em->getRepository(CmsUser::class); $rsm = $repository->createResultSetMappingBuilder('u'); - $this->assertInstanceOf(Query\ResultSetMappingBuilder::class, $rsm); - $this->assertEquals(['u' => CmsUser::class], $rsm->aliasMap); + self::assertInstanceOf(Query\ResultSetMappingBuilder::class, $rsm); + self::assertEquals(['u' => CmsUser::class], $rsm->aliasMap); } /** @@ -1057,8 +1057,8 @@ public function testFindByNullValueInInCondition() $users = $this->_em->getRepository(CmsUser::class)->findBy(['status' => [null]]); - $this->assertCount(1, $users); - $this->assertSame($user1, reset($users)); + self::assertCount(1, $users); + self::assertSame($user1, reset($users)); } /** @@ -1085,8 +1085,8 @@ public function testFindByNullValueInMultipleInCriteriaValues() ->getRepository(CmsUser::class) ->findBy(['status' => ['foo', null]]); - $this->assertCount(1, $users); - $this->assertSame($user1, reset($users)); + self::assertCount(1, $users); + self::assertSame($user1, reset($users)); } /** @@ -1113,10 +1113,10 @@ public function testFindMultipleByNullValueInMultipleInCriteriaValues() ->getRepository(CmsUser::class) ->findBy(['status' => ['dbal maintainer', null]]); - $this->assertCount(2, $users); + self::assertCount(2, $users); foreach ($users as $user) { - $this->assertTrue(in_array($user, [$user1, $user2])); + self::assertTrue(in_array($user, [$user1, $user2])); } } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php index 2e85d7e4959..ec943d261fa 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php @@ -87,13 +87,13 @@ public function testCountNotInitializesCollection() $user = $this->_em->find(CmsUser::class, $this->userId); $queryCount = $this->getCurrentQueryCount(); - $this->assertFalse($user->groups->isInitialized()); - $this->assertEquals(3, count($user->groups)); - $this->assertFalse($user->groups->isInitialized()); + self::assertFalse($user->groups->isInitialized()); + self::assertEquals(3, count($user->groups)); + self::assertFalse($user->groups->isInitialized()); foreach ($user->groups AS $group) { } - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount(), "Expecting two queries to be fired for count, then iteration."); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount(), "Expecting two queries to be fired for count, then iteration."); } /** @@ -109,9 +109,9 @@ public function testCountWhenNewEntityPresent() $user->addGroup($newGroup); $this->_em->persist($newGroup); - $this->assertFalse($user->groups->isInitialized()); - $this->assertEquals(4, count($user->groups)); - $this->assertFalse($user->groups->isInitialized()); + self::assertFalse($user->groups->isInitialized()); + self::assertEquals(4, count($user->groups)); + self::assertFalse($user->groups->isInitialized()); } /** @@ -125,9 +125,9 @@ public function testCountWhenInitialized() foreach ($user->groups AS $group) { } - $this->assertTrue($user->groups->isInitialized()); - $this->assertEquals(3, count($user->groups)); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount(), "Should only execute one query to initialize collection, no extra query for count() more."); + self::assertTrue($user->groups->isInitialized()); + self::assertEquals(3, count($user->groups)); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount(), "Should only execute one query to initialize collection, no extra query for count() more."); } /** @@ -136,10 +136,10 @@ public function testCountWhenInitialized() public function testCountInverseCollection() { $group = $this->_em->find(CmsGroup::class, $this->groupId); - $this->assertFalse($group->users->isInitialized(), "Pre-Condition"); + self::assertFalse($group->users->isInitialized(), "Pre-Condition"); - $this->assertEquals(4, count($group->users)); - $this->assertFalse($group->users->isInitialized(), "Extra Lazy collection should not be initialized by counting the collection."); + self::assertEquals(4, count($group->users)); + self::assertFalse($group->users->isInitialized(), "Extra Lazy collection should not be initialized by counting the collection."); } /** @@ -148,9 +148,9 @@ public function testCountInverseCollection() public function testCountOneToMany() { $user = $this->_em->find(CmsUser::class, $this->userId); - $this->assertFalse($user->groups->isInitialized(), "Pre-Condition"); + self::assertFalse($user->groups->isInitialized(), "Pre-Condition"); - $this->assertEquals(2, count($user->articles)); + self::assertEquals(2, count($user->articles)); } /** @@ -160,8 +160,8 @@ public function testCountOneToManyJoinedInheritance() { $otherClass = $this->_em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); - $this->assertFalse($otherClass->childClasses->isInitialized(), "Pre-Condition"); - $this->assertEquals(2, count($otherClass->childClasses)); + self::assertFalse($otherClass->childClasses->isInitialized(), "Pre-Condition"); + self::assertEquals(2, count($otherClass->childClasses)); } /** @@ -170,10 +170,10 @@ public function testCountOneToManyJoinedInheritance() public function testFullSlice() { $user = $this->_em->find(CmsUser::class, $this->userId); - $this->assertFalse($user->groups->isInitialized(), "Pre-Condition: Collection is not initialized."); + self::assertFalse($user->groups->isInitialized(), "Pre-Condition: Collection is not initialized."); $someGroups = $user->groups->slice(null); - $this->assertEquals(3, count($someGroups)); + self::assertEquals(3, count($someGroups)); } /** @@ -183,28 +183,28 @@ public function testFullSlice() public function testSlice() { $user = $this->_em->find(CmsUser::class, $this->userId); - $this->assertFalse($user->groups->isInitialized(), "Pre-Condition: Collection is not initialized."); + self::assertFalse($user->groups->isInitialized(), "Pre-Condition: Collection is not initialized."); $queryCount = $this->getCurrentQueryCount(); $someGroups = $user->groups->slice(0, 2); - $this->assertContainsOnly(CmsGroup::class, $someGroups); - $this->assertEquals(2, count($someGroups)); - $this->assertFalse($user->groups->isInitialized(), "Slice should not initialize the collection if it wasn't before!"); + self::assertContainsOnly(CmsGroup::class, $someGroups); + self::assertEquals(2, count($someGroups)); + self::assertFalse($user->groups->isInitialized(), "Slice should not initialize the collection if it wasn't before!"); $otherGroup = $user->groups->slice(2, 1); - $this->assertContainsOnly(CmsGroup::class, $otherGroup); - $this->assertEquals(1, count($otherGroup)); - $this->assertFalse($user->groups->isInitialized()); + self::assertContainsOnly(CmsGroup::class, $otherGroup); + self::assertEquals(1, count($otherGroup)); + self::assertFalse($user->groups->isInitialized()); foreach ($user->groups AS $group) { } - $this->assertTrue($user->groups->isInitialized()); - $this->assertEquals(3, count($user->groups)); + self::assertTrue($user->groups->isInitialized()); + self::assertEquals(3, count($user->groups)); - $this->assertEquals($queryCount + 3, $this->getCurrentQueryCount()); + self::assertEquals($queryCount + 3, $this->getCurrentQueryCount()); } /** @@ -220,11 +220,11 @@ public function testSliceInitializedCollection() $someGroups = $user->groups->slice(0, 2); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertEquals(2, count($someGroups)); - $this->assertTrue($user->groups->contains(array_shift($someGroups))); - $this->assertTrue($user->groups->contains(array_shift($someGroups))); + self::assertEquals(2, count($someGroups)); + self::assertTrue($user->groups->contains(array_shift($someGroups))); + self::assertTrue($user->groups->contains(array_shift($someGroups))); } /** @@ -233,19 +233,19 @@ public function testSliceInitializedCollection() public function testSliceInverseCollection() { $group = $this->_em->find(CmsGroup::class, $this->groupId); - $this->assertFalse($group->users->isInitialized(), "Pre-Condition"); + self::assertFalse($group->users->isInitialized(), "Pre-Condition"); $queryCount = $this->getCurrentQueryCount(); $someUsers = $group->users->slice(0, 2); $otherUsers = $group->users->slice(2, 2); - $this->assertContainsOnly(CmsUser::class, $someUsers); - $this->assertContainsOnly(CmsUser::class, $otherUsers); - $this->assertEquals(2, count($someUsers)); - $this->assertEquals(2, count($otherUsers)); + self::assertContainsOnly(CmsUser::class, $someUsers); + self::assertContainsOnly(CmsUser::class, $otherUsers); + self::assertEquals(2, count($someUsers)); + self::assertEquals(2, count($otherUsers)); // +2 queries executed by slice - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount(), "Slicing two parts should only execute two additional queries."); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount(), "Slicing two parts should only execute two additional queries."); } /** @@ -254,14 +254,14 @@ public function testSliceInverseCollection() public function testSliceOneToMany() { $user = $this->_em->find(CmsUser::class, $this->userId); - $this->assertFalse($user->articles->isInitialized(), "Pre-Condition: Collection is not initialized."); + self::assertFalse($user->articles->isInitialized(), "Pre-Condition: Collection is not initialized."); $queryCount = $this->getCurrentQueryCount(); $someArticle = $user->articles->slice(0, 1); $otherArticle = $user->articles->slice(1, 1); - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount()); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); } /** @@ -270,15 +270,15 @@ public function testSliceOneToMany() public function testContainsOneToMany() { $user = $this->_em->find(CmsUser::class, $this->userId); - $this->assertFalse($user->articles->isInitialized(), "Pre-Condition: Collection is not initialized."); + self::assertFalse($user->articles->isInitialized(), "Pre-Condition: Collection is not initialized."); // Test One to Many existence retrieved from DB $article = $this->_em->find(CmsArticle::class, $this->articleId); $queryCount = $this->getCurrentQueryCount(); - $this->assertTrue($user->articles->contains($article)); - $this->assertFalse($user->articles->isInitialized(), "Post-Condition: Collection is not initialized."); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertTrue($user->articles->contains($article)); + self::assertFalse($user->articles->isInitialized(), "Post-Condition: Collection is not initialized."); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); // Test One to Many existence with state new $article = new CmsArticle(); @@ -286,17 +286,17 @@ public function testContainsOneToMany() $article->text = "blub"; $queryCount = $this->getCurrentQueryCount(); - $this->assertFalse($user->articles->contains($article)); - $this->assertEquals($queryCount, $this->getCurrentQueryCount(), "Checking for contains of new entity should cause no query to be executed."); + self::assertFalse($user->articles->contains($article)); + self::assertEquals($queryCount, $this->getCurrentQueryCount(), "Checking for contains of new entity should cause no query to be executed."); // Test One to Many existence with state clear $this->_em->persist($article); $this->_em->flush(); $queryCount = $this->getCurrentQueryCount(); - $this->assertFalse($user->articles->contains($article)); - $this->assertEquals($queryCount+1, $this->getCurrentQueryCount(), "Checking for contains of persisted entity should cause one query to be executed."); - $this->assertFalse($user->articles->isInitialized(), "Post-Condition: Collection is not initialized."); + self::assertFalse($user->articles->contains($article)); + self::assertEquals($queryCount+1, $this->getCurrentQueryCount(), "Checking for contains of persisted entity should cause one query to be executed."); + self::assertFalse($user->articles->isInitialized(), "Post-Condition: Collection is not initialized."); // Test One to Many existence with state managed $article = new CmsArticle(); @@ -307,9 +307,9 @@ public function testContainsOneToMany() $queryCount = $this->getCurrentQueryCount(); - $this->assertFalse($user->articles->contains($article)); - $this->assertEquals($queryCount, $this->getCurrentQueryCount(), "Checking for contains of managed entity (but not persisted) should cause no query to be executed."); - $this->assertFalse($user->articles->isInitialized(), "Post-Condition: Collection is not initialized."); + self::assertFalse($user->articles->contains($article)); + self::assertEquals($queryCount, $this->getCurrentQueryCount(), "Checking for contains of managed entity (but not persisted) should cause no query to be executed."); + self::assertFalse($user->articles->isInitialized(), "Post-Condition: Collection is not initialized."); } /** @@ -319,7 +319,7 @@ public function testLazyOneToManyJoinedInheritanceIsLazilyInitialized() { $otherClass = $this->_em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); - $this->assertFalse($otherClass->childClasses->isInitialized(), 'Collection is not initialized.'); + self::assertFalse($otherClass->childClasses->isInitialized(), 'Collection is not initialized.'); } /** @@ -333,9 +333,9 @@ public function testContainsOnOneToManyJoinedInheritanceWillNotInitializeCollect $childClass = $this->_em->find(DDC2504ChildClass::class, $this->ddc2504ChildClassId); $queryCount = $this->getCurrentQueryCount(); - $this->assertTrue($otherClass->childClasses->contains($childClass)); - $this->assertFalse($otherClass->childClasses->isInitialized(), 'Collection is not initialized.'); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount(), 'Search operation was performed via SQL'); + self::assertTrue($otherClass->childClasses->contains($childClass)); + self::assertFalse($otherClass->childClasses->isInitialized(), 'Collection is not initialized.'); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount(), 'Search operation was performed via SQL'); } /** @@ -346,8 +346,8 @@ public function testContainsOnOneToManyJoinedInheritanceWillNotCauseQueriesWhenN $otherClass = $this->_em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); $queryCount = $this->getCurrentQueryCount(); - $this->assertFalse($otherClass->childClasses->contains(new DDC2504ChildClass())); - $this->assertEquals( + self::assertFalse($otherClass->childClasses->contains(new DDC2504ChildClass())); + self::assertEquals( $queryCount, $this->getCurrentQueryCount(), 'Checking for contains of new entity should cause no query to be executed.' @@ -367,9 +367,9 @@ public function testContainsOnOneToManyJoinedInheritanceWillNotInitializeCollect $this->_em->flush(); $queryCount = $this->getCurrentQueryCount(); - $this->assertFalse($otherClass->childClasses->contains($childClass)); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount(), "Checking for contains of persisted entity should cause one query to be executed."); - $this->assertFalse($otherClass->childClasses->isInitialized(), "Post-Condition: Collection is not initialized."); + self::assertFalse($otherClass->childClasses->contains($childClass)); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount(), "Checking for contains of persisted entity should cause one query to be executed."); + self::assertFalse($otherClass->childClasses->isInitialized(), "Post-Condition: Collection is not initialized."); } /** @@ -384,9 +384,9 @@ public function testContainsOnOneToManyJoinedInheritanceWillNotInitializeCollect $queryCount = $this->getCurrentQueryCount(); - $this->assertFalse($otherClass->childClasses->contains($childClass)); - $this->assertEquals($queryCount, $this->getCurrentQueryCount(), "Checking for contains of managed entity (but not persisted) should cause no query to be executed."); - $this->assertFalse($otherClass->childClasses->isInitialized(), "Post-Condition: Collection is not initialized."); + self::assertFalse($otherClass->childClasses->contains($childClass)); + self::assertEquals($queryCount, $this->getCurrentQueryCount(), "Checking for contains of managed entity (but not persisted) should cause no query to be executed."); + self::assertFalse($otherClass->childClasses->isInitialized(), "Post-Condition: Collection is not initialized."); } /** @@ -396,9 +396,9 @@ public function testCountingOnOneToManyJoinedInheritanceWillNotInitializeCollect { $otherClass = $this->_em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); - $this->assertEquals(2, count($otherClass->childClasses)); + self::assertEquals(2, count($otherClass->childClasses)); - $this->assertFalse($otherClass->childClasses->isInitialized()); + self::assertFalse($otherClass->childClasses->isInitialized()); } /** @@ -407,15 +407,15 @@ public function testCountingOnOneToManyJoinedInheritanceWillNotInitializeCollect public function testContainsManyToMany() { $user = $this->_em->find(CmsUser::class, $this->userId); - $this->assertFalse($user->groups->isInitialized(), "Pre-Condition: Collection is not initialized."); + self::assertFalse($user->groups->isInitialized(), "Pre-Condition: Collection is not initialized."); // Test Many to Many existence retrieved from DB $group = $this->_em->find(CmsGroup::class, $this->groupId); $queryCount = $this->getCurrentQueryCount(); - $this->assertTrue($user->groups->contains($group)); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount(), "Checking for contains of managed entity should cause one query to be executed."); - $this->assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); + self::assertTrue($user->groups->contains($group)); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount(), "Checking for contains of managed entity should cause one query to be executed."); + self::assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); // Test Many to Many existence with state new $group = new CmsGroup(); @@ -423,9 +423,9 @@ public function testContainsManyToMany() $queryCount = $this->getCurrentQueryCount(); - $this->assertFalse($user->groups->contains($group)); - $this->assertEquals($queryCount, $this->getCurrentQueryCount(), "Checking for contains of new entity should cause no query to be executed."); - $this->assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); + self::assertFalse($user->groups->contains($group)); + self::assertEquals($queryCount, $this->getCurrentQueryCount(), "Checking for contains of new entity should cause no query to be executed."); + self::assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); // Test Many to Many existence with state clear $this->_em->persist($group); @@ -433,9 +433,9 @@ public function testContainsManyToMany() $queryCount = $this->getCurrentQueryCount(); - $this->assertFalse($user->groups->contains($group)); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount(), "Checking for contains of persisted entity should cause one query to be executed."); - $this->assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); + self::assertFalse($user->groups->contains($group)); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount(), "Checking for contains of persisted entity should cause one query to be executed."); + self::assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); // Test Many to Many existence with state managed $group = new CmsGroup(); @@ -445,9 +445,9 @@ public function testContainsManyToMany() $queryCount = $this->getCurrentQueryCount(); - $this->assertFalse($user->groups->contains($group)); - $this->assertEquals($queryCount, $this->getCurrentQueryCount(), "Checking for contains of managed entity (but not persisted) should cause no query to be executed."); - $this->assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); + self::assertFalse($user->groups->contains($group)); + self::assertEquals($queryCount, $this->getCurrentQueryCount(), "Checking for contains of managed entity (but not persisted) should cause no query to be executed."); + self::assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); } /** @@ -456,22 +456,22 @@ public function testContainsManyToMany() public function testContainsManyToManyInverse() { $group = $this->_em->find(CmsGroup::class, $this->groupId); - $this->assertFalse($group->users->isInitialized(), "Pre-Condition: Collection is not initialized."); + self::assertFalse($group->users->isInitialized(), "Pre-Condition: Collection is not initialized."); $user = $this->_em->find(CmsUser::class, $this->userId); $queryCount = $this->getCurrentQueryCount(); - $this->assertTrue($group->users->contains($user)); - $this->assertEquals($queryCount+1, $this->getCurrentQueryCount(), "Checking for contains of managed entity should cause one query to be executed."); - $this->assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); + self::assertTrue($group->users->contains($user)); + self::assertEquals($queryCount+1, $this->getCurrentQueryCount(), "Checking for contains of managed entity should cause one query to be executed."); + self::assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); $newUser = new CmsUser(); $newUser->name = "A New group!"; $queryCount = $this->getCurrentQueryCount(); - $this->assertFalse($group->users->contains($newUser)); - $this->assertEquals($queryCount, $this->getCurrentQueryCount(), "Checking for contains of new entity should cause no query to be executed."); - $this->assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); + self::assertFalse($group->users->contains($newUser)); + self::assertEquals($queryCount, $this->getCurrentQueryCount(), "Checking for contains of new entity should cause no query to be executed."); + self::assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); } /** @@ -480,7 +480,7 @@ public function testContainsManyToManyInverse() public function testRemoveElementOneToMany() { $user = $this->_em->find(CmsUser::class, $this->userId); - $this->assertFalse($user->articles->isInitialized(), "Pre-Condition: Collection is not initialized."); + self::assertFalse($user->articles->isInitialized(), "Pre-Condition: Collection is not initialized."); // Test One to Many removal with Entity retrieved from DB $article = $this->_em->find(CmsArticle::class, $this->articleId); @@ -488,8 +488,8 @@ public function testRemoveElementOneToMany() $user->articles->removeElement($article); - $this->assertFalse($user->articles->isInitialized(), "Post-Condition: Collection is not initialized."); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertFalse($user->articles->isInitialized(), "Post-Condition: Collection is not initialized."); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); // Test One to Many removal with Entity state as new $article = new CmsArticle(); @@ -500,7 +500,7 @@ public function testRemoveElementOneToMany() $user->articles->removeElement($article); - $this->assertEquals($queryCount, $this->getCurrentQueryCount(), "Removing a new entity should cause no query to be executed."); + self::assertEquals($queryCount, $this->getCurrentQueryCount(), "Removing a new entity should cause no query to be executed."); // Test One to Many removal with Entity state as clean $this->_em->persist($article); @@ -510,8 +510,8 @@ public function testRemoveElementOneToMany() $user->articles->removeElement($article); - $this->assertEquals($queryCount, $this->getCurrentQueryCount(), "Removing a persisted entity will not cause queries when the owning side doesn't actually change."); - $this->assertFalse($user->articles->isInitialized(), "Post-Condition: Collection is not initialized."); + self::assertEquals($queryCount, $this->getCurrentQueryCount(), "Removing a persisted entity will not cause queries when the owning side doesn't actually change."); + self::assertFalse($user->articles->isInitialized(), "Post-Condition: Collection is not initialized."); // Test One to Many removal with Entity state as managed $article = new CmsArticle(); @@ -524,7 +524,7 @@ public function testRemoveElementOneToMany() $user->articles->removeElement($article); - $this->assertEquals($queryCount, $this->getCurrentQueryCount(), "Removing a managed entity should cause no query to be executed."); + self::assertEquals($queryCount, $this->getCurrentQueryCount(), "Removing a managed entity should cause no query to be executed."); } /** @@ -542,27 +542,27 @@ public function testRemovalOfManagedElementFromOneToManyJoinedInheritanceCollect $otherClass->childClasses->removeElement($childClass); $childClass->other = null; // updating owning side - $this->assertFalse($otherClass->childClasses->isInitialized(), 'Collection is not initialized.'); + self::assertFalse($otherClass->childClasses->isInitialized(), 'Collection is not initialized.'); - $this->assertEquals( + self::assertEquals( $queryCount, $this->getCurrentQueryCount(), 'No queries have been executed' ); - $this->assertTrue( + self::assertTrue( $otherClass->childClasses->contains($childClass), 'Collection item still not updated (needs flushing)' ); $this->_em->flush(); - $this->assertFalse( + self::assertFalse( $otherClass->childClasses->contains($childClass), 'Referenced item was removed in the transaction' ); - $this->assertFalse($otherClass->childClasses->isInitialized(), 'Collection is not initialized.'); + self::assertFalse($otherClass->childClasses->isInitialized(), 'Collection is not initialized.'); } /** @@ -576,7 +576,7 @@ public function testRemovalOfNonManagedElementFromOneToManyJoinedInheritanceColl $otherClass->childClasses->removeElement(new DDC2504ChildClass()); - $this->assertEquals( + self::assertEquals( $queryCount, $this->getCurrentQueryCount(), 'Removing an unmanaged entity should cause no query to be executed.' @@ -598,7 +598,7 @@ public function testRemovalOfNewElementFromOneToManyJoinedInheritanceCollectionD $otherClass->childClasses->removeElement($childClass); - $this->assertEquals( + self::assertEquals( $queryCount, $this->getCurrentQueryCount(), 'Removing a new entity should cause no query to be executed.' @@ -620,12 +620,12 @@ public function testRemovalOfNewManagedElementFromOneToManyJoinedInheritanceColl $otherClass->childClasses->removeElement($childClass); - $this->assertEquals( + self::assertEquals( $queryCount, $this->getCurrentQueryCount(), 'No queries are executed, as the owning side of the association is not actually updated.' ); - $this->assertFalse($otherClass->childClasses->isInitialized(), 'Collection is not initialized.'); + self::assertFalse($otherClass->childClasses->isInitialized(), 'Collection is not initialized.'); } /** @@ -634,7 +634,7 @@ public function testRemovalOfNewManagedElementFromOneToManyJoinedInheritanceColl public function testRemoveElementManyToMany() { $user = $this->_em->find(CmsUser::class, $this->userId); - $this->assertFalse($user->groups->isInitialized(), "Pre-Condition: Collection is not initialized."); + self::assertFalse($user->groups->isInitialized(), "Pre-Condition: Collection is not initialized."); // Test Many to Many removal with Entity retrieved from DB $group = $this->_em->find(CmsGroup::class, $this->groupId); @@ -642,8 +642,8 @@ public function testRemoveElementManyToMany() $this->assertTrue($user->groups->removeElement($group)); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount(), "Removing a persisted entity should cause one query to be executed."); - $this->assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount(), "Removing a persisted entity should cause one query to be executed."); + self::assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); $this->assertFalse($user->groups->removeElement($group), "Removing an already removed element returns false"); @@ -655,8 +655,8 @@ public function testRemoveElementManyToMany() $user->groups->removeElement($group); - $this->assertEquals($queryCount, $this->getCurrentQueryCount(), "Removing new entity should cause no query to be executed."); - $this->assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); + self::assertEquals($queryCount, $this->getCurrentQueryCount(), "Removing new entity should cause no query to be executed."); + self::assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); // Test Many to Many removal with Entity state as clean $this->_em->persist($group); @@ -666,8 +666,8 @@ public function testRemoveElementManyToMany() $user->groups->removeElement($group); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount(), "Removing a persisted entity should cause one query to be executed."); - $this->assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount(), "Removing a persisted entity should cause one query to be executed."); + self::assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); // Test Many to Many removal with Entity state as managed $group = new CmsGroup(); @@ -679,8 +679,8 @@ public function testRemoveElementManyToMany() $user->groups->removeElement($group); - $this->assertEquals($queryCount, $this->getCurrentQueryCount(), "Removing a managed entity should cause no query to be executed."); - $this->assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); + self::assertEquals($queryCount, $this->getCurrentQueryCount(), "Removing a managed entity should cause no query to be executed."); + self::assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); } /** @@ -689,15 +689,15 @@ public function testRemoveElementManyToMany() public function testRemoveElementManyToManyInverse() { $group = $this->_em->find(CmsGroup::class, $this->groupId); - $this->assertFalse($group->users->isInitialized(), "Pre-Condition: Collection is not initialized."); + self::assertFalse($group->users->isInitialized(), "Pre-Condition: Collection is not initialized."); $user = $this->_em->find(CmsUser::class, $this->userId); $queryCount = $this->getCurrentQueryCount(); $group->users->removeElement($user); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount(), "Removing a managed entity should cause one query to be executed."); - $this->assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount(), "Removing a managed entity should cause one query to be executed."); + self::assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); $newUser = new CmsUser(); $newUser->name = "A New group!"; @@ -706,8 +706,8 @@ public function testRemoveElementManyToManyInverse() $group->users->removeElement($newUser); - $this->assertEquals($queryCount, $this->getCurrentQueryCount(), "Removing a new entity should cause no query to be executed."); - $this->assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); + self::assertEquals($queryCount, $this->getCurrentQueryCount(), "Removing a new entity should cause no query to be executed."); + self::assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); } /** @@ -723,13 +723,13 @@ public function testCountAfterAddThenFlush() $user->addGroup($newGroup); $this->_em->persist($newGroup); - $this->assertFalse($user->groups->isInitialized()); - $this->assertEquals(4, count($user->groups)); - $this->assertFalse($user->groups->isInitialized()); + self::assertFalse($user->groups->isInitialized()); + self::assertEquals(4, count($user->groups)); + self::assertFalse($user->groups->isInitialized()); $this->_em->flush(); - $this->assertEquals(4, count($user->groups)); + self::assertEquals(4, count($user->groups)); } /** @@ -750,8 +750,8 @@ public function testSliceOnDirtyCollection() $qc = $this->getCurrentQueryCount(); $groups = $user->groups->slice(0, 10); - $this->assertEquals(4, count($groups)); - $this->assertEquals($qc + 1, $this->getCurrentQueryCount()); + self::assertEquals(4, count($groups)); + self::assertEquals($qc + 1, $this->getCurrentQueryCount()); } /** @@ -766,12 +766,12 @@ public function testGetIndexByIdentifier() $queryCount = $this->getCurrentQueryCount(); $phonenumber = $user->phonenumbers->get($this->phonenumber); - $this->assertFalse($user->phonenumbers->isInitialized()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertSame($phonenumber, $this->_em->find(CmsPhonenumber::class, $this->phonenumber)); + self::assertFalse($user->phonenumbers->isInitialized()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertSame($phonenumber, $this->_em->find(CmsPhonenumber::class, $this->phonenumber)); $article = $user->phonenumbers->get($this->phonenumber); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount(), "Getting the same entity should not cause an extra query to be executed"); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount(), "Getting the same entity should not cause an extra query to be executed"); } /** @@ -786,9 +786,9 @@ public function testGetIndexByOneToMany() $article = $user->articles->get($this->topic); - $this->assertFalse($user->articles->isInitialized()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertSame($article, $this->_em->find(CmsArticle::class, $this->articleId)); + self::assertFalse($user->articles->isInitialized()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertSame($article, $this->_em->find(CmsArticle::class, $this->articleId)); } /** @@ -803,9 +803,9 @@ public function testGetIndexByManyToManyInverseSide() $user = $group->users->get($this->username); - $this->assertFalse($group->users->isInitialized()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertSame($user, $this->_em->find(CmsUser::class, $this->userId)); + self::assertFalse($group->users->isInitialized()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertSame($user, $this->_em->find(CmsUser::class, $this->userId)); } /** @@ -820,9 +820,9 @@ public function testGetIndexByManyToManyOwningSide() $group = $user->groups->get($this->groupname); - $this->assertFalse($user->groups->isInitialized()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertSame($group, $this->_em->find(CmsGroup::class, $this->groupId)); + self::assertFalse($user->groups->isInitialized()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertSame($group, $this->_em->find(CmsGroup::class, $this->groupId)); } /** @@ -831,8 +831,8 @@ public function testGetIndexByManyToManyOwningSide() public function testGetNonExistentIndexBy() { $user = $this->_em->find(CmsUser::class, $this->userId); - $this->assertNull($user->articles->get(-1)); - $this->assertNull($user->groups->get(-1)); + self::assertNull($user->articles->get(-1)); + self::assertNull($user->groups->get(-1)); } public function testContainsKeyIndexByOneToMany() @@ -844,9 +844,9 @@ public function testContainsKeyIndexByOneToMany() $contains = $user->articles->containsKey($this->topic); - $this->assertTrue($contains); - $this->assertFalse($user->articles->isInitialized()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertTrue($contains); + self::assertFalse($user->articles->isInitialized()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); } public function testContainsKeyIndexByOneToManyJoinedInheritance() @@ -860,9 +860,9 @@ public function testContainsKeyIndexByOneToManyJoinedInheritance() $contains = $otherClass->childClasses->containsKey($this->ddc2504ChildClassId); - $this->assertTrue($contains); - $this->assertFalse($otherClass->childClasses->isInitialized()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertTrue($contains); + self::assertFalse($otherClass->childClasses->isInitialized()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); } public function testContainsKeyIndexByManyToMany() @@ -875,9 +875,9 @@ public function testContainsKeyIndexByManyToMany() $contains = $user->groups->containsKey($group->name); - $this->assertTrue($contains, "The item is not into collection"); - $this->assertFalse($user->groups->isInitialized(), "The collection must not be initialized"); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertTrue($contains, "The item is not into collection"); + self::assertFalse($user->groups->isInitialized(), "The collection must not be initialized"); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); } public function testContainsKeyIndexByManyToManyNonOwning() { @@ -888,9 +888,9 @@ public function testContainsKeyIndexByManyToManyNonOwning() $contains = $group->users->containsKey($user->username); - $this->assertTrue($contains, "The item is not into collection"); - $this->assertFalse($group->users->isInitialized(), "The collection must not be initialized"); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertTrue($contains, "The item is not into collection"); + self::assertFalse($group->users->isInitialized(), "The collection must not be initialized"); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); } public function testContainsKeyIndexByWithPkManyToMany() @@ -904,9 +904,9 @@ public function testContainsKeyIndexByWithPkManyToMany() $contains = $user->groups->containsKey($this->groupId); - $this->assertTrue($contains, "The item is not into collection"); - $this->assertFalse($user->groups->isInitialized(), "The collection must not be initialized"); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertTrue($contains, "The item is not into collection"); + self::assertFalse($user->groups->isInitialized(), "The collection must not be initialized"); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); } public function testContainsKeyIndexByWithPkManyToManyNonOwning() { @@ -919,9 +919,9 @@ public function testContainsKeyIndexByWithPkManyToManyNonOwning() $contains = $group->users->containsKey($this->userId2); - $this->assertTrue($contains, "The item is not into collection"); - $this->assertFalse($group->users->isInitialized(), "The collection must not be initialized"); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertTrue($contains, "The item is not into collection"); + self::assertFalse($group->users->isInitialized(), "The collection must not be initialized"); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); } public function testContainsKeyNonExistentIndexByOneToMany() @@ -932,9 +932,9 @@ public function testContainsKeyNonExistentIndexByOneToMany() $contains = $user->articles->containsKey("NonExistentTopic"); - $this->assertFalse($contains); - $this->assertFalse($user->articles->isInitialized()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertFalse($contains); + self::assertFalse($user->articles->isInitialized()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); } public function testContainsKeyNonExistentIndexByManyToMany() @@ -946,9 +946,9 @@ public function testContainsKeyNonExistentIndexByManyToMany() $contains = $user->groups->containsKey("NonExistentTopic"); - $this->assertFalse($contains); - $this->assertFalse($user->groups->isInitialized()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertFalse($contains); + self::assertFalse($user->groups->isInitialized()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); } private function loadFixture() @@ -1072,7 +1072,7 @@ public function testRemoveManagedElementFromOneToManyExtraLazyCollectionIsNoOp() /* @var $user User */ $user = $this->_em->find(User::class, $userId); - $this->assertCount(1, $user->tweets, 'Element was not removed - need to update the owning side first'); + self::assertCount(1, $user->tweets, 'Element was not removed - need to update the owning side first'); } /** @@ -1092,13 +1092,13 @@ public function testRemoveManagedElementFromOneToManyExtraLazyCollectionWithoutD /* @var $tweet Tweet */ $tweet = $this->_em->find(Tweet::class, $tweetId); - $this->assertInstanceOf( + self::assertInstanceOf( Tweet::class, $tweet, 'Even though the collection is extra lazy, the tweet should not have been deleted' ); - $this->assertInstanceOf( + self::assertInstanceOf( User::class, $tweet->author, 'Tweet author link has not been removed - need to update the owning side first' @@ -1122,18 +1122,18 @@ public function testRemovingManagedLazyProxyFromExtraLazyOneToManyDoesRemoveTheA /* @var $tweet Tweet */ $tweet = $this->_em->find(Tweet::class, $tweet->id); - $this->assertInstanceOf( + self::assertInstanceOf( Tweet::class, $tweet, 'Even though the collection is extra lazy, the tweet should not have been deleted' ); - $this->assertInstanceOf(User::class, $tweet->author); + self::assertInstanceOf(User::class, $tweet->author); /* @var $user User */ $user = $this->_em->find(User::class, $userId); - $this->assertCount(1, $user->tweets, 'Element was not removed - need to update the owning side first'); + self::assertCount(1, $user->tweets, 'Element was not removed - need to update the owning side first'); } /** @@ -1153,8 +1153,8 @@ public function testRemoveOrphanedManagedElementFromOneToManyExtraLazyCollection /* @var $user User */ $user = $this->_em->find(User::class, $userId); - $this->assertCount(0, $user->userLists, 'Element was removed from association due to orphan removal'); - $this->assertNull( + self::assertCount(0, $user->userLists, 'Element was removed from association due to orphan removal'); + self::assertNull( $this->_em->find(UserList::class, $userListId), 'Element was deleted due to orphan removal' ); @@ -1176,13 +1176,13 @@ public function testRemoveOrphanedUnManagedElementFromOneToManyExtraLazyCollecti /* @var $userList UserList */ $userList = $this->_em->find(UserList::class, $userListId); - $this->assertInstanceOf( + self::assertInstanceOf( UserList::class, $userList, 'Even though the collection is extra lazy + orphan removal, the user list should not have been deleted' ); - $this->assertInstanceOf( + self::assertInstanceOf( User::class, $userList->owner, 'User list to owner link has not been removed' @@ -1206,8 +1206,8 @@ public function testRemoveOrphanedManagedLazyProxyFromExtraLazyOneToMany() /* @var $user User */ $user = $this->_em->find(User::class, $userId); - $this->assertCount(0, $user->userLists, 'Element was removed from association due to orphan removal'); - $this->assertNull( + self::assertCount(0, $user->userLists, 'Element was removed from association due to orphan removal'); + self::assertNull( $this->_em->find(UserList::class, $userListId), 'Element was deleted due to orphan removal' ); diff --git a/tests/Doctrine/Tests/ORM/Functional/FlushEventTest.php b/tests/Doctrine/Tests/ORM/Functional/FlushEventTest.php index b9298e3dc09..3fad8784c3e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/FlushEventTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/FlushEventTest.php @@ -33,15 +33,15 @@ public function testPersistNewEntitiesOnPreFlush() $this->_em->persist($user); - $this->assertEquals(0, $user->phonenumbers->count()); + self::assertEquals(0, $user->phonenumbers->count()); $this->_em->flush(); - $this->assertEquals(1, $user->phonenumbers->count()); - $this->assertTrue($this->_em->contains($user->phonenumbers->get(0))); - $this->assertTrue($user->phonenumbers->get(0)->getUser() === $user); + self::assertEquals(1, $user->phonenumbers->count()); + self::assertTrue($this->_em->contains($user->phonenumbers->get(0))); + self::assertTrue($user->phonenumbers->get(0)->getUser() === $user); - $this->assertFalse($user->phonenumbers->isDirty()); + self::assertFalse($user->phonenumbers->isDirty()); // Can be used together with SQL Logging to check that a subsequent flush has // nothing to do. This proofs the correctness of the changes that happened in onFlush. @@ -61,13 +61,13 @@ public function testPreAndOnFlushCalledAlways() $this->_em->flush(); - $this->assertEquals(1, $listener->preFlush); - $this->assertEquals(1, $listener->onFlush); + self::assertEquals(1, $listener->preFlush); + self::assertEquals(1, $listener->onFlush); $this->_em->flush(); - $this->assertEquals(2, $listener->preFlush); - $this->assertEquals(2, $listener->onFlush); + self::assertEquals(2, $listener->preFlush); + self::assertEquals(2, $listener->onFlush); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/HydrationCacheTest.php b/tests/Doctrine/Tests/ORM/Functional/HydrationCacheTest.php index dc84ac4ed1f..220f2ba3bab 100644 --- a/tests/Doctrine/Tests/ORM/Functional/HydrationCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/HydrationCacheTest.php @@ -42,30 +42,30 @@ public function testHydrationCache() ->setHydrationCacheProfile(new QueryCacheProfile(null, null, $cache)) ->getResult(); - $this->assertEquals($c, $this->getCurrentQueryCount(), "Should not execute query. Its cached!"); + self::assertEquals($c, $this->getCurrentQueryCount(), "Should not execute query. Its cached!"); $users = $this->_em->createQuery($dql) ->setHydrationCacheProfile(new QueryCacheProfile(null, null, $cache)) ->getArrayResult(); - $this->assertEquals($c + 1, $this->getCurrentQueryCount(), "Hydration is part of cache key."); + self::assertEquals($c + 1, $this->getCurrentQueryCount(), "Hydration is part of cache key."); $users = $this->_em->createQuery($dql) ->setHydrationCacheProfile(new QueryCacheProfile(null, null, $cache)) ->getArrayResult(); - $this->assertEquals($c + 1, $this->getCurrentQueryCount(), "Hydration now cached"); + self::assertEquals($c + 1, $this->getCurrentQueryCount(), "Hydration now cached"); $users = $this->_em->createQuery($dql) ->setHydrationCacheProfile(new QueryCacheProfile(null, 'cachekey', $cache)) ->getArrayResult(); - $this->assertTrue($cache->contains('cachekey'), 'Explicit cache key'); + self::assertTrue($cache->contains('cachekey'), 'Explicit cache key'); $users = $this->_em->createQuery($dql) ->setHydrationCacheProfile(new QueryCacheProfile(null, 'cachekey', $cache)) ->getArrayResult(); - $this->assertEquals($c + 2, $this->getCurrentQueryCount(), "Hydration now cached"); + self::assertEquals($c + 2, $this->getCurrentQueryCount(), "Hydration now cached"); } public function testHydrationParametersSerialization() @@ -83,7 +83,7 @@ public function testHydrationParametersSerialization() $query->getResult(); - $this->assertEquals($c, $this->getCurrentQueryCount(), "Should not execute query. Its cached!"); + self::assertEquals($c, $this->getCurrentQueryCount(), "Should not execute query. Its cached!"); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/IdentityMapTest.php b/tests/Doctrine/Tests/ORM/Functional/IdentityMapTest.php index 15929ae270d..0fe8d84a900 100644 --- a/tests/Doctrine/Tests/ORM/Functional/IdentityMapTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/IdentityMapTest.php @@ -43,16 +43,16 @@ public function testBasicIdentityManagement() $this->_em->clear(); $user2 = $this->_em->find(get_class($user), $user->getId()); - $this->assertTrue($user2 !== $user); + self::assertTrue($user2 !== $user); $user3 = $this->_em->find(get_class($user), $user->getId()); - $this->assertTrue($user2 === $user3); + self::assertTrue($user2 === $user3); $address2 = $this->_em->find(get_class($address), $address->getId()); - $this->assertTrue($address2 !== $address); + self::assertTrue($address2 !== $address); $address3 = $this->_em->find(get_class($address), $address->getId()); - $this->assertTrue($address2 === $address3); + self::assertTrue($address2 === $address3); - $this->assertTrue($user2->getAddress() === $address2); // !!! + self::assertTrue($user2->getAddress() === $address2); // !!! } public function testSingleValuedAssociationIdentityMapBehaviorWithRefresh() @@ -79,7 +79,7 @@ public function testSingleValuedAssociationIdentityMapBehaviorWithRefresh() $this->_em->persist($user2); $this->_em->flush(); - $this->assertSame($user1, $address->user); + self::assertSame($user1, $address->user); //external update to CmsAddress $this->_em->getConnection()->executeUpdate('update cms_addresses set user_id = ?', [$user2->getId()]); @@ -89,12 +89,12 @@ public function testSingleValuedAssociationIdentityMapBehaviorWithRefresh() $this->_em->refresh($address); // Now the association should be "correct", referencing $user2 - $this->assertSame($user2, $address->user); - $this->assertSame($user2->address, $address); // check back reference also + self::assertSame($user2, $address->user); + self::assertSame($user2->address, $address); // check back reference also // Attention! refreshes can result in broken bidirectional associations! this is currently expected! // $user1 still points to $address! - $this->assertSame($user1->address, $address); + self::assertSame($user1->address, $address); } public function testSingleValuedAssociationIdentityMapBehaviorWithRefreshQuery() @@ -122,7 +122,7 @@ public function testSingleValuedAssociationIdentityMapBehaviorWithRefreshQuery() $this->_em->flush(); - $this->assertSame($user1, $address->user); + self::assertSame($user1, $address->user); //external update to CmsAddress $this->_em->getConnection()->executeUpdate('update cms_addresses set user_id = ?', [$user2->getId()]); @@ -131,11 +131,11 @@ public function testSingleValuedAssociationIdentityMapBehaviorWithRefreshQuery() $q = $this->_em->createQuery('select a, u from Doctrine\Tests\Models\CMS\CmsAddress a join a.user u'); $address2 = $q->getSingleResult(); - $this->assertSame($address, $address2); + self::assertSame($address, $address2); // Should still be $user1 - $this->assertSame($user1, $address2->user); - $this->assertTrue($user2->address === null); + self::assertSame($user1, $address2->user); + self::assertTrue($user2->address === null); // But we want to have this external change! // Solution 2: Alternatively, a refresh query should work @@ -143,15 +143,15 @@ public function testSingleValuedAssociationIdentityMapBehaviorWithRefreshQuery() $q->setHint(Query::HINT_REFRESH, true); $address3 = $q->getSingleResult(); - $this->assertSame($address, $address3); // should still be the same, always from identity map + self::assertSame($address, $address3); // should still be the same, always from identity map // Now the association should be "correct", referencing $user2 - $this->assertSame($user2, $address2->user); - $this->assertSame($user2->address, $address2); // check back reference also + self::assertSame($user2, $address2->user); + self::assertSame($user2->address, $address2); // check back reference also // Attention! refreshes can result in broken bidirectional associations! this is currently expected! // $user1 still points to $address2! - $this->assertSame($user1->address, $address2); + self::assertSame($user1->address, $address2); } public function testCollectionValuedAssociationIdentityMapBehaviorWithRefreshQuery() @@ -177,8 +177,8 @@ public function testCollectionValuedAssociationIdentityMapBehaviorWithRefreshQue $this->_em->persist($user); // cascaded to phone numbers $this->_em->flush(); - $this->assertEquals(3, count($user->getPhonenumbers())); - $this->assertFalse($user->getPhonenumbers()->isDirty()); + self::assertEquals(3, count($user->getPhonenumbers())); + self::assertFalse($user->getPhonenumbers()->isDirty()); //external update to CmsAddress $this->_em->getConnection()->executeUpdate('insert into cms_phonenumbers (phonenumber, user_id) VALUES (?,?)', [999, $user->getId()] @@ -188,10 +188,10 @@ public function testCollectionValuedAssociationIdentityMapBehaviorWithRefreshQue $q = $this->_em->createQuery('select u, p from Doctrine\Tests\Models\CMS\CmsUser u join u.phonenumbers p'); $user2 = $q->getSingleResult(); - $this->assertSame($user, $user2); + self::assertSame($user, $user2); // Should still be the same 3 phonenumbers - $this->assertEquals(3, count($user2->getPhonenumbers())); + self::assertEquals(3, count($user2->getPhonenumbers())); // But we want to have this external change! // Solution 1: refresh(). @@ -201,10 +201,10 @@ public function testCollectionValuedAssociationIdentityMapBehaviorWithRefreshQue $q->setHint(Query::HINT_REFRESH, true); $user3 = $q->getSingleResult(); - $this->assertSame($user, $user3); // should still be the same, always from identity map + self::assertSame($user, $user3); // should still be the same, always from identity map // Now the collection should be refreshed with correct count - $this->assertEquals(4, count($user3->getPhonenumbers())); + self::assertEquals(4, count($user3->getPhonenumbers())); } public function testCollectionValuedAssociationIdentityMapBehaviorWithRefresh() @@ -230,7 +230,7 @@ public function testCollectionValuedAssociationIdentityMapBehaviorWithRefresh() $this->_em->persist($user); // cascaded to phone numbers $this->_em->flush(); - $this->assertEquals(3, count($user->getPhonenumbers())); + self::assertEquals(3, count($user->getPhonenumbers())); //external update to CmsAddress $this->_em->getConnection()->executeUpdate('insert into cms_phonenumbers (phonenumber, user_id) VALUES (?,?)', [999, $user->getId()] @@ -240,19 +240,19 @@ public function testCollectionValuedAssociationIdentityMapBehaviorWithRefresh() $q = $this->_em->createQuery('select u, p from Doctrine\Tests\Models\CMS\CmsUser u join u.phonenumbers p'); $user2 = $q->getSingleResult(); - $this->assertSame($user, $user2); + self::assertSame($user, $user2); // Should still be the same 3 phonenumbers - $this->assertEquals(3, count($user2->getPhonenumbers())); + self::assertEquals(3, count($user2->getPhonenumbers())); // But we want to have this external change! // Solution 1: refresh(). $this->_em->refresh($user2); - $this->assertSame($user, $user2); // should still be the same, always from identity map + self::assertSame($user, $user2); // should still be the same, always from identity map // Now the collection should be refreshed with correct count - $this->assertEquals(4, count($user2->getPhonenumbers())); + self::assertEquals(4, count($user2->getPhonenumbers())); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/IndexByAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/IndexByAssociationTest.php index 289e55807f8..f9d02955f31 100644 --- a/tests/Doctrine/Tests/ORM/Functional/IndexByAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/IndexByAssociationTest.php @@ -49,11 +49,11 @@ public function testManyToOneFinder() /* @var $market Market */ $market = $this->_em->find(Market::class, $this->market->getId()); - $this->assertEquals(2, count($market->stocks)); - $this->assertTrue(isset($market->stocks['AAPL']), "AAPL symbol has to be key in indexed association."); - $this->assertTrue(isset($market->stocks['GOOG']), "GOOG symbol has to be key in indexed association."); - $this->assertEquals("AAPL", $market->stocks['AAPL']->getSymbol()); - $this->assertEquals("GOOG", $market->stocks['GOOG']->getSymbol()); + self::assertEquals(2, count($market->stocks)); + self::assertTrue(isset($market->stocks['AAPL']), "AAPL symbol has to be key in indexed association."); + self::assertTrue(isset($market->stocks['GOOG']), "GOOG symbol has to be key in indexed association."); + self::assertEquals("AAPL", $market->stocks['AAPL']->getSymbol()); + self::assertEquals("GOOG", $market->stocks['GOOG']->getSymbol()); } public function testManyToOneDQL() @@ -61,22 +61,22 @@ public function testManyToOneDQL() $dql = "SELECT m, s FROM Doctrine\Tests\Models\StockExchange\Market m JOIN m.stocks s WHERE m.id = ?1"; $market = $this->_em->createQuery($dql)->setParameter(1, $this->market->getId())->getSingleResult(); - $this->assertEquals(2, count($market->stocks)); - $this->assertTrue(isset($market->stocks['AAPL']), "AAPL symbol has to be key in indexed association."); - $this->assertTrue(isset($market->stocks['GOOG']), "GOOG symbol has to be key in indexed association."); - $this->assertEquals("AAPL", $market->stocks['AAPL']->getSymbol()); - $this->assertEquals("GOOG", $market->stocks['GOOG']->getSymbol()); + self::assertEquals(2, count($market->stocks)); + self::assertTrue(isset($market->stocks['AAPL']), "AAPL symbol has to be key in indexed association."); + self::assertTrue(isset($market->stocks['GOOG']), "GOOG symbol has to be key in indexed association."); + self::assertEquals("AAPL", $market->stocks['AAPL']->getSymbol()); + self::assertEquals("GOOG", $market->stocks['GOOG']->getSymbol()); } public function testManyToMany() { $bond = $this->_em->find(Bond::class, $this->bond->getId()); - $this->assertEquals(2, count($bond->stocks)); - $this->assertTrue(isset($bond->stocks['AAPL']), "AAPL symbol has to be key in indexed association."); - $this->assertTrue(isset($bond->stocks['GOOG']), "GOOG symbol has to be key in indexed association."); - $this->assertEquals("AAPL", $bond->stocks['AAPL']->getSymbol()); - $this->assertEquals("GOOG", $bond->stocks['GOOG']->getSymbol()); + self::assertEquals(2, count($bond->stocks)); + self::assertTrue(isset($bond->stocks['AAPL']), "AAPL symbol has to be key in indexed association."); + self::assertTrue(isset($bond->stocks['GOOG']), "GOOG symbol has to be key in indexed association."); + self::assertEquals("AAPL", $bond->stocks['AAPL']->getSymbol()); + self::assertEquals("GOOG", $bond->stocks['GOOG']->getSymbol()); } public function testManytoManyDQL() @@ -84,11 +84,11 @@ public function testManytoManyDQL() $dql = "SELECT b, s FROM Doctrine\Tests\Models\StockExchange\Bond b JOIN b.stocks s WHERE b.id = ?1"; $bond = $this->_em->createQuery($dql)->setParameter(1, $this->bond->getId())->getSingleResult(); - $this->assertEquals(2, count($bond->stocks)); - $this->assertTrue(isset($bond->stocks['AAPL']), "AAPL symbol has to be key in indexed association."); - $this->assertTrue(isset($bond->stocks['GOOG']), "GOOG symbol has to be key in indexed association."); - $this->assertEquals("AAPL", $bond->stocks['AAPL']->getSymbol()); - $this->assertEquals("GOOG", $bond->stocks['GOOG']->getSymbol()); + self::assertEquals(2, count($bond->stocks)); + self::assertTrue(isset($bond->stocks['AAPL']), "AAPL symbol has to be key in indexed association."); + self::assertTrue(isset($bond->stocks['GOOG']), "GOOG symbol has to be key in indexed association."); + self::assertEquals("AAPL", $bond->stocks['AAPL']->getSymbol()); + self::assertEquals("GOOG", $bond->stocks['GOOG']->getSymbol()); } public function testDqlOverrideIndexBy() @@ -96,9 +96,9 @@ public function testDqlOverrideIndexBy() $dql = "SELECT b, s FROM Doctrine\Tests\Models\StockExchange\Bond b JOIN b.stocks s INDEX BY s.id WHERE b.id = ?1"; $bond = $this->_em->createQuery($dql)->setParameter(1, $this->bond->getId())->getSingleResult(); - $this->assertEquals(2, count($bond->stocks)); - $this->assertFalse(isset($bond->stocks['AAPL']), "AAPL symbol not exists in re-indexed association."); - $this->assertFalse(isset($bond->stocks['GOOG']), "GOOG symbol not exists in re-indexed association."); + self::assertEquals(2, count($bond->stocks)); + self::assertFalse(isset($bond->stocks['AAPL']), "AAPL symbol not exists in re-indexed association."); + self::assertFalse(isset($bond->stocks['GOOG']), "GOOG symbol not exists in re-indexed association."); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/JoinedTableCompositeKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/JoinedTableCompositeKeyTest.php index ab5c394e020..fada8630f3b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/JoinedTableCompositeKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/JoinedTableCompositeKeyTest.php @@ -27,7 +27,7 @@ public function testInsertWithCompositeKey() $this->_em->clear(); $entity = $this->findEntity(); - $this->assertEquals($childEntity, $entity); + self::assertEquals($childEntity, $entity); } /** @@ -49,7 +49,7 @@ public function testUpdateWithCompositeKey() $this->_em->clear(); $persistedEntity = $this->findEntity(); - $this->assertEquals($entity, $persistedEntity); + self::assertEquals($entity, $persistedEntity); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php b/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php index 914acbecf86..97adae461d7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php @@ -35,20 +35,20 @@ public function testPreSavePostSaveCallbacksAreInvoked() $this->_em->persist($entity); $this->_em->flush(); - $this->assertTrue($entity->prePersistCallbackInvoked); - $this->assertTrue($entity->postPersistCallbackInvoked); + self::assertTrue($entity->prePersistCallbackInvoked); + self::assertTrue($entity->postPersistCallbackInvoked); $this->_em->clear(); $query = $this->_em->createQuery("select e from Doctrine\Tests\ORM\Functional\LifecycleCallbackTestEntity e"); $result = $query->getResult(); - $this->assertTrue($result[0]->postLoadCallbackInvoked); + self::assertTrue($result[0]->postLoadCallbackInvoked); $result[0]->value = 'hello again'; $this->_em->flush(); - $this->assertEquals('changed from preUpdate callback!', $result[0]->value); + self::assertEquals('changed from preUpdate callback!', $result[0]->value); } public function testPreFlushCallbacksAreInvoked() @@ -59,19 +59,19 @@ public function testPreFlushCallbacksAreInvoked() $this->_em->flush(); - $this->assertTrue($entity->prePersistCallbackInvoked); - $this->assertTrue($entity->preFlushCallbackInvoked); + self::assertTrue($entity->prePersistCallbackInvoked); + self::assertTrue($entity->preFlushCallbackInvoked); $entity->preFlushCallbackInvoked = false; $this->_em->flush(); - $this->assertTrue($entity->preFlushCallbackInvoked); + self::assertTrue($entity->preFlushCallbackInvoked); $entity->value = 'bye'; $entity->preFlushCallbackInvoked = false; $this->_em->flush(); - $this->assertTrue($entity->preFlushCallbackInvoked); + self::assertTrue($entity->preFlushCallbackInvoked); } public function testChangesDontGetLost() @@ -89,8 +89,8 @@ public function testChangesDontGetLost() $user2 = $this->_em->find(get_class($user), $user->getId()); - $this->assertEquals('Alice', $user2->getName()); - $this->assertEquals('Hello World', $user2->getValue()); + self::assertEquals('Alice', $user2->getName()); + self::assertEquals('Hello World', $user2->getValue()); } /** @@ -107,10 +107,10 @@ public function testGetReferenceWithPostLoadEventIsDelayedUntilProxyTrigger() $this->_em->clear(); $reference = $this->_em->getReference(LifecycleCallbackTestEntity::class, $id); - $this->assertFalse($reference->postLoadCallbackInvoked); + self::assertFalse($reference->postLoadCallbackInvoked); $reference->getValue(); // trigger proxy load - $this->assertTrue($reference->postLoadCallbackInvoked); + self::assertTrue($reference->postLoadCallbackInvoked); } /** @@ -127,11 +127,11 @@ public function testPostLoadTriggeredOnRefresh() $this->_em->clear(); $reference = $this->_em->find(LifecycleCallbackTestEntity::class, $id); - $this->assertTrue($reference->postLoadCallbackInvoked); + self::assertTrue($reference->postLoadCallbackInvoked); $reference->postLoadCallbackInvoked = false; $this->_em->refresh($reference); - $this->assertTrue($reference->postLoadCallbackInvoked, "postLoad should be invoked when refresh() is called."); + self::assertTrue($reference->postLoadCallbackInvoked, "postLoad should be invoked when refresh() is called."); } /** @@ -155,8 +155,8 @@ public function testCascadedEntitiesCallsPrePersist() //$this->_em->persist($c); $this->_em->flush(); - $this->assertTrue($e1->prePersistCallbackInvoked); - $this->assertTrue($e2->prePersistCallbackInvoked); + self::assertTrue($e1->prePersistCallbackInvoked); + self::assertTrue($e2->prePersistCallbackInvoked); } /** @@ -195,10 +195,10 @@ public function testCascadedEntitiesLoadedInPostLoad() ->createQuery(sprintf($dql, $e1->getId(), $e2->getId())) ->getResult(); - $this->assertTrue(current($entities)->postLoadCallbackInvoked); - $this->assertTrue(current($entities)->postLoadCascaderNotNull); - $this->assertTrue(current($entities)->cascader->postLoadCallbackInvoked); - $this->assertEquals(current($entities)->cascader->postLoadEntitiesCount, 2); + self::assertTrue(current($entities)->postLoadCallbackInvoked); + self::assertTrue(current($entities)->postLoadCascaderNotNull); + self::assertTrue(current($entities)->cascader->postLoadCallbackInvoked); + self::assertEquals(current($entities)->cascader->postLoadEntitiesCount, 2); } /** @@ -238,8 +238,8 @@ public function testCascadedEntitiesNotLoadedInPostLoadDuringIteration() ->iterate(); foreach ($result as $entity) { - $this->assertTrue($entity[0]->postLoadCallbackInvoked); - $this->assertFalse($entity[0]->postLoadCascaderNotNull); + self::assertTrue($entity[0]->postLoadCallbackInvoked); + self::assertFalse($entity[0]->postLoadCascaderNotNull); break; } @@ -262,8 +262,8 @@ public function testCascadedEntitiesNotLoadedInPostLoadDuringIterationWithSimple ->iterate(null, Query::HYDRATE_SIMPLEOBJECT); foreach ($result as $entity) { - $this->assertTrue($entity[0]->postLoadCallbackInvoked); - $this->assertFalse($entity[0]->postLoadCascaderNotNull); + self::assertTrue($entity[0]->postLoadCallbackInvoked); + self::assertFalse($entity[0]->postLoadCascaderNotNull); break; } @@ -313,7 +313,7 @@ public function testPostLoadIsInvokedOnFetchJoinedEntities() public function testLifecycleCallbacksGetInherited() { $childMeta = $this->_em->getClassMetadata(LifecycleCallbackChildEntity::class); - $this->assertEquals(['prePersist' => [0 => 'doStuff']], $childMeta->lifecycleCallbacks); + self::assertEquals(['prePersist' => [0 => 'doStuff']], $childMeta->lifecycleCallbacks); } public function testLifecycleListener_ChangeUpdateChangeSet() @@ -339,7 +339,7 @@ public function testLifecycleListener_ChangeUpdateChangeSet() $bob = $this->_em->createQuery($dql)->getSingleResult(); - $this->assertEquals('Bob', $bob->getName()); + self::assertEquals('Bob', $bob->getName()); } /** @@ -363,23 +363,23 @@ public function testLifecycleCallbackEventArgs() $this->_em->flush(); - $this->assertArrayHasKey('preFlushHandler', $e->calls); - $this->assertArrayHasKey('postLoadHandler', $e->calls); - $this->assertArrayHasKey('prePersistHandler', $e->calls); - $this->assertArrayHasKey('postPersistHandler', $e->calls); - $this->assertArrayHasKey('preUpdateHandler', $e->calls); - $this->assertArrayHasKey('postUpdateHandler', $e->calls); - $this->assertArrayHasKey('preRemoveHandler', $e->calls); - $this->assertArrayHasKey('postRemoveHandler', $e->calls); - - $this->assertInstanceOf(PreFlushEventArgs::class, $e->calls['preFlushHandler']); - $this->assertInstanceOf(LifecycleEventArgs::class, $e->calls['postLoadHandler']); - $this->assertInstanceOf(LifecycleEventArgs::class, $e->calls['prePersistHandler']); - $this->assertInstanceOf(LifecycleEventArgs::class, $e->calls['postPersistHandler']); - $this->assertInstanceOf(PreUpdateEventArgs::class, $e->calls['preUpdateHandler']); - $this->assertInstanceOf(LifecycleEventArgs::class, $e->calls['postUpdateHandler']); - $this->assertInstanceOf(LifecycleEventArgs::class, $e->calls['preRemoveHandler']); - $this->assertInstanceOf(LifecycleEventArgs::class, $e->calls['postRemoveHandler']); + self::assertArrayHasKey('preFlushHandler', $e->calls); + self::assertArrayHasKey('postLoadHandler', $e->calls); + self::assertArrayHasKey('prePersistHandler', $e->calls); + self::assertArrayHasKey('postPersistHandler', $e->calls); + self::assertArrayHasKey('preUpdateHandler', $e->calls); + self::assertArrayHasKey('postUpdateHandler', $e->calls); + self::assertArrayHasKey('preRemoveHandler', $e->calls); + self::assertArrayHasKey('postRemoveHandler', $e->calls); + + self::assertInstanceOf(PreFlushEventArgs::class, $e->calls['preFlushHandler']); + self::assertInstanceOf(LifecycleEventArgs::class, $e->calls['postLoadHandler']); + self::assertInstanceOf(LifecycleEventArgs::class, $e->calls['prePersistHandler']); + self::assertInstanceOf(LifecycleEventArgs::class, $e->calls['postPersistHandler']); + self::assertInstanceOf(PreUpdateEventArgs::class, $e->calls['preUpdateHandler']); + self::assertInstanceOf(LifecycleEventArgs::class, $e->calls['postUpdateHandler']); + self::assertInstanceOf(LifecycleEventArgs::class, $e->calls['preRemoveHandler']); + self::assertInstanceOf(LifecycleEventArgs::class, $e->calls['postRemoveHandler']); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Locking/GearmanLockTest.php b/tests/Doctrine/Tests/ORM/Functional/Locking/GearmanLockTest.php index 9c8d4b7eaf2..712e2e91338 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Locking/GearmanLockTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/Locking/GearmanLockTest.php @@ -52,7 +52,7 @@ public function testFindWithLock() $this->asyncFindWithLock(CmsArticle::class, $this->articleId, LockMode::PESSIMISTIC_WRITE); $this->asyncFindWithLock(CmsArticle::class, $this->articleId, LockMode::PESSIMISTIC_WRITE); - $this->assertLockWorked(); + self::assertLockWorked(); } public function testFindWithWriteThenReadLock() @@ -60,7 +60,7 @@ public function testFindWithWriteThenReadLock() $this->asyncFindWithLock(CmsArticle::class, $this->articleId, LockMode::PESSIMISTIC_WRITE); $this->asyncFindWithLock(CmsArticle::class, $this->articleId, LockMode::PESSIMISTIC_READ); - $this->assertLockWorked(); + self::assertLockWorked(); } public function testFindWithReadThenWriteLock() @@ -68,7 +68,7 @@ public function testFindWithReadThenWriteLock() $this->asyncFindWithLock(CmsArticle::class, $this->articleId, LockMode::PESSIMISTIC_READ); $this->asyncFindWithLock(CmsArticle::class, $this->articleId, LockMode::PESSIMISTIC_WRITE); - $this->assertLockWorked(); + self::assertLockWorked(); } public function testFindWithOneLock() @@ -76,7 +76,7 @@ public function testFindWithOneLock() $this->asyncFindWithLock(CmsArticle::class, $this->articleId, LockMode::PESSIMISTIC_WRITE); $this->asyncFindWithLock(CmsArticle::class, $this->articleId, LockMode::NONE); - $this->assertLockDoesNotBlock(); + self::assertLockDoesNotBlock(); } public function testDqlWithLock() @@ -84,7 +84,7 @@ public function testDqlWithLock() $this->asyncDqlWithLock('SELECT a FROM Doctrine\Tests\Models\CMS\CmsArticle a', [], LockMode::PESSIMISTIC_WRITE); $this->asyncFindWithLock(CmsArticle::class, $this->articleId, LockMode::PESSIMISTIC_WRITE); - $this->assertLockWorked(); + self::assertLockWorked(); } public function testLock() @@ -92,7 +92,7 @@ public function testLock() $this->asyncFindWithLock(CmsArticle::class, $this->articleId, LockMode::PESSIMISTIC_WRITE); $this->asyncLock(CmsArticle::class, $this->articleId, LockMode::PESSIMISTIC_WRITE); - $this->assertLockWorked(); + self::assertLockWorked(); } public function testLock2() @@ -100,7 +100,7 @@ public function testLock2() $this->asyncFindWithLock(CmsArticle::class, $this->articleId, LockMode::PESSIMISTIC_WRITE); $this->asyncLock(CmsArticle::class, $this->articleId, LockMode::PESSIMISTIC_READ); - $this->assertLockWorked(); + self::assertLockWorked(); } public function testLock3() @@ -108,7 +108,7 @@ public function testLock3() $this->asyncFindWithLock(CmsArticle::class, $this->articleId, LockMode::PESSIMISTIC_READ); $this->asyncLock(CmsArticle::class, $this->articleId, LockMode::PESSIMISTIC_WRITE); - $this->assertLockWorked(); + self::assertLockWorked(); } public function testLock4() @@ -116,12 +116,12 @@ public function testLock4() $this->asyncFindWithLock(CmsArticle::class, $this->articleId, LockMode::NONE); $this->asyncLock(CmsArticle::class, $this->articleId, LockMode::PESSIMISTIC_WRITE); - $this->assertLockDoesNotBlock(); + self::assertLockDoesNotBlock(); } protected function assertLockDoesNotBlock() { - $this->assertLockWorked($onlyForSeconds = 1); + self::assertLockWorked($onlyForSeconds = 1); } protected function assertLockWorked($forTime = 2, $notLongerThan = null) @@ -132,10 +132,10 @@ protected function assertLockWorked($forTime = 2, $notLongerThan = null) $this->gearman->runTasks(); - $this->assertTrue($this->maxRunTime > $forTime, + self::assertTrue($this->maxRunTime > $forTime, "Because of locking this tests should have run at least " . $forTime . " seconds, ". "but only did for " . $this->maxRunTime . " seconds."); - $this->assertTrue($this->maxRunTime < $notLongerThan, + self::assertTrue($this->maxRunTime < $notLongerThan, "The longest task should not run longer than " . $notLongerThan . " seconds, ". "but did for " . $this->maxRunTime . " seconds." ); @@ -180,6 +180,6 @@ protected function startJob($fn, $fixture) ] )); - $this->assertEquals(GEARMAN_SUCCESS, $this->gearman->returnCode()); + self::assertEquals(GEARMAN_SUCCESS, $this->gearman->returnCode()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Locking/LockTest.php b/tests/Doctrine/Tests/ORM/Functional/Locking/LockTest.php index d515e95bff7..b6b9dc1b6ca 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Locking/LockTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/Locking/LockTest.php @@ -148,6 +148,7 @@ public function testLockPessimisticWrite() $this->_em->flush(); $this->_em->beginTransaction(); + try { $this->_em->lock($article, LockMode::PESSIMISTIC_WRITE); $this->_em->commit(); @@ -156,9 +157,11 @@ public function testLockPessimisticWrite() throw $e; } - $query = array_pop( $this->_sqlLoggerStack->queries ); - $query = array_pop( $this->_sqlLoggerStack->queries ); - $this->assertContains($writeLockSql, $query['sql']); + array_pop($this->_sqlLoggerStack->queries); + + $query = array_pop($this->_sqlLoggerStack->queries); + + self::assertContains($writeLockSql, $query['sql']); } /** @@ -190,9 +193,10 @@ public function testLockPessimisticRead() } array_pop($this->_sqlLoggerStack->queries); + $query = array_pop($this->_sqlLoggerStack->queries); - $this->assertContains($readLockSql, $query['sql']); + self::assertContains($readLockSql, $query['sql']); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/Locking/OptimisticTest.php b/tests/Doctrine/Tests/ORM/Functional/Locking/OptimisticTest.php index 8b8113b6a66..424d69473b4 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Locking/OptimisticTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/Locking/OptimisticTest.php @@ -39,7 +39,7 @@ public function testJoinedChildInsertSetsInitialVersionValue() $this->_em->persist($test); $this->_em->flush(); - $this->assertEquals(1, $test->version); + self::assertEquals(1, $test->version); return $test; } @@ -66,7 +66,7 @@ public function testJoinedChildFailureThrowsException(OptimisticJoinedChild $chi try { $this->_em->flush(); } catch (OptimisticLockException $e) { - $this->assertSame($test, $e->getEntity()); + self::assertSame($test, $e->getEntity()); } } @@ -79,7 +79,7 @@ public function testJoinedParentInsertSetsInitialVersionValue() $this->_em->persist($test); $this->_em->flush(); - $this->assertEquals(1, $test->version); + self::assertEquals(1, $test->version); return $test; } @@ -106,7 +106,7 @@ public function testJoinedParentFailureThrowsException(OptimisticJoinedParent $p try { $this->_em->flush(); } catch (OptimisticLockException $e) { - $this->assertSame($test, $e->getEntity()); + self::assertSame($test, $e->getEntity()); } } @@ -120,8 +120,8 @@ public function testMultipleFlushesDoIncrementalUpdates() $this->_em->persist($test); $this->_em->flush(); - $this->assertInternalType('int', $test->getVersion()); - $this->assertEquals($i + 1, $test->getVersion()); + self::assertInternalType('int', $test->getVersion()); + self::assertEquals($i + 1, $test->getVersion()); } } @@ -134,8 +134,8 @@ public function testStandardInsertSetsInitialVersionValue() $this->_em->persist($test); $this->_em->flush(); - $this->assertInternalType('int', $test->getVersion()); - $this->assertEquals(1, $test->getVersion()); + self::assertInternalType('int', $test->getVersion()); + self::assertEquals(1, $test->getVersion()); return $test; } @@ -162,7 +162,7 @@ public function testStandardFailureThrowsException(OptimisticStandard $entity) try { $this->_em->flush(); } catch (OptimisticLockException $e) { - $this->assertSame($test, $e->getEntity()); + self::assertSame($test, $e->getEntity()); } } @@ -188,12 +188,12 @@ public function testOptimisticTimestampSetsDefaultValue() $test->name = 'Testing'; - $this->assertNull($test->version, "Pre-Condition"); + self::assertNull($test->version, "Pre-Condition"); $this->_em->persist($test); $this->_em->flush(); - $this->assertInstanceOf('DateTime', $test->version); + self::assertInstanceOf('DateTime', $test->version); return $test; } @@ -209,7 +209,7 @@ public function testOptimisticTimestampFailureThrowsException(OptimisticTimestam $test = $q->getSingleResult(); - $this->assertInstanceOf('DateTime', $test->version); + self::assertInstanceOf('DateTime', $test->version); // Manually increment the version datetime column $format = $this->_em->getConnection()->getDatabasePlatform()->getDateTimeFormatString(); @@ -227,8 +227,8 @@ public function testOptimisticTimestampFailureThrowsException(OptimisticTimestam $caughtException = $e; } - $this->assertNotNull($caughtException, "No OptimisticLockingException was thrown"); - $this->assertSame($test, $caughtException->getEntity()); + self::assertNotNull($caughtException, "No OptimisticLockingException was thrown"); + self::assertSame($test, $caughtException->getEntity()); } @@ -243,7 +243,7 @@ public function testOptimisticTimestampLockFailureThrowsException(OptimisticTime $test = $q->getSingleResult(); - $this->assertInstanceOf('DateTime', $test->version); + self::assertInstanceOf('DateTime', $test->version); // Try to lock the record with an older timestamp and it should throw an exception $caughtException = null; @@ -256,8 +256,8 @@ public function testOptimisticTimestampLockFailureThrowsException(OptimisticTime $caughtException = $e; } - $this->assertNotNull($caughtException, "No OptimisticLockingException was thrown"); - $this->assertSame($test, $caughtException->getEntity()); + self::assertNotNull($caughtException, "No OptimisticLockingException was thrown"); + self::assertSame($test, $caughtException->getEntity()); } diff --git a/tests/Doctrine/Tests/ORM/Functional/ManyToManyBasicAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/ManyToManyBasicAssociationTest.php index 0436b2af762..0ed3a80564c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ManyToManyBasicAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ManyToManyBasicAssociationTest.php @@ -35,7 +35,7 @@ public function testUnsetManyToMany() $this->_em->flush(); // Check that the link in the association table has been deleted - $this->assertGblancoGroupCountIs(0); + self::assertGblancoGroupCountIs(0); } public function testBasicManyToManyJoin() @@ -43,24 +43,24 @@ public function testBasicManyToManyJoin() $user = $this->addCmsUserGblancoWithGroups(1); $this->_em->clear(); - $this->assertEquals(0, $this->_em->getUnitOfWork()->size()); + self::assertEquals(0, $this->_em->getUnitOfWork()->size()); $query = $this->_em->createQuery("select u, g from Doctrine\Tests\Models\CMS\CmsUser u join u.groups g"); $result = $query->getResult(); - $this->assertEquals(2, $this->_em->getUnitOfWork()->size()); - $this->assertInstanceOf(CmsUser::class, $result[0]); - $this->assertEquals('Guilherme', $result[0]->name); - $this->assertEquals(1, $result[0]->getGroups()->count()); + self::assertEquals(2, $this->_em->getUnitOfWork()->size()); + self::assertInstanceOf(CmsUser::class, $result[0]); + self::assertEquals('Guilherme', $result[0]->name); + self::assertEquals(1, $result[0]->getGroups()->count()); $groups = $result[0]->getGroups(); - $this->assertEquals('Developers_0', $groups[0]->getName()); + self::assertEquals('Developers_0', $groups[0]->getName()); - $this->assertEquals(UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($result[0])); - $this->assertEquals(UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($groups[0])); + self::assertEquals(UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($result[0])); + self::assertEquals(UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($groups[0])); - $this->assertInstanceOf(PersistentCollection::class, $groups); - $this->assertInstanceOf(PersistentCollection::class, $groups[0]->getUsers()); + self::assertInstanceOf(PersistentCollection::class, $groups); + self::assertInstanceOf(PersistentCollection::class, $groups[0]->getUsers()); $groups[0]->getUsers()->clear(); $groups->clear(); @@ -69,7 +69,7 @@ public function testBasicManyToManyJoin() $this->_em->clear(); $query = $this->_em->createQuery("select u, g from Doctrine\Tests\Models\CMS\CmsUser u join u.groups g"); - $this->assertEquals(0, count($query->getResult())); + self::assertEquals(0, count($query->getResult())); } public function testManyToManyAddRemove() @@ -82,14 +82,14 @@ public function testManyToManyAddRemove() // Get user $user = $uRep->findOneById($user->getId()); - $this->assertNotNull($user, "Has to return exactly one entry."); + self::assertNotNull($user, "Has to return exactly one entry."); - $this->assertFalse($user->getGroups()->isInitialized()); + self::assertFalse($user->getGroups()->isInitialized()); // Check groups - $this->assertEquals(2, $user->getGroups()->count()); + self::assertEquals(2, $user->getGroups()->count()); - $this->assertTrue($user->getGroups()->isInitialized()); + self::assertTrue($user->getGroups()->isInitialized()); // Remove first group unset($user->groups[0]); @@ -102,7 +102,7 @@ public function testManyToManyAddRemove() $user2 = $uRep->findOneById($user->getId()); // Check groups - $this->assertEquals(1, $user2->getGroups()->count()); + self::assertEquals(1, $user2->getGroups()->count()); } public function testManyToManyInverseSideIgnored() @@ -123,8 +123,8 @@ public function testManyToManyInverseSideIgnored() // Association should not exist $user2 = $this->_em->find(get_class($user), $user->getId()); - $this->assertNotNull($user2, "Has to return exactly one entry."); - $this->assertEquals(0, $user2->getGroups()->count()); + self::assertNotNull($user2, "Has to return exactly one entry."); + self::assertEquals(0, $user2->getGroups()->count()); } public function testManyToManyCollectionClearing() @@ -132,14 +132,14 @@ public function testManyToManyCollectionClearing() $user = $this->addCmsUserGblancoWithGroups($groupCount = 10); // Check that there are indeed 10 links in the association table - $this->assertGblancoGroupCountIs($groupCount); + self::assertGblancoGroupCountIs($groupCount); $user->groups->clear(); $this->_em->flush(); // Check that the links in the association table have been deleted - $this->assertGblancoGroupCountIs(0); + self::assertGblancoGroupCountIs(0); } public function testManyToManyCollectionClearAndAdd() @@ -153,14 +153,14 @@ public function testManyToManyCollectionClearAndAdd() $user->groups[] = $group; } - $this->assertInstanceOf(PersistentCollection::class, $user->groups); - $this->assertTrue($user->groups->isDirty()); + self::assertInstanceOf(PersistentCollection::class, $user->groups); + self::assertTrue($user->groups->isDirty()); - $this->assertEquals($groupCount, count($user->groups), "There should be 10 groups in the collection."); + self::assertEquals($groupCount, count($user->groups), "There should be 10 groups in the collection."); $this->_em->flush(); - $this->assertGblancoGroupCountIs($groupCount); + self::assertGblancoGroupCountIs($groupCount); } /** @@ -169,7 +169,7 @@ public function testManyToManyCollectionClearAndAdd() public function assertGblancoGroupCountIs($expectedGroupCount) { $countDql = "SELECT count(g.id) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.groups g WHERE u.username = 'gblanco'"; - $this->assertEquals( + self::assertEquals( $expectedGroupCount, $this->_em->createQuery($countDql)->getSingleScalarResult(), "Failed to verify that CmsUser with username 'gblanco' has a group count of 10 with a DQL count query." @@ -193,18 +193,18 @@ public function testRetrieveManyToManyAndAddMore() $newGroup->setName('12Monkeys'); $freshUser->addGroup($newGroup); - $this->assertFalse($freshUser->groups->isInitialized(), "CmsUser::groups Collection has to be uninitialized for this test."); + self::assertFalse($freshUser->groups->isInitialized(), "CmsUser::groups Collection has to be uninitialized for this test."); $this->_em->flush(); - $this->assertFalse($freshUser->groups->isInitialized(), "CmsUser::groups Collection has to be uninitialized for this test."); - $this->assertEquals(3, count($freshUser->getGroups())); - $this->assertEquals(3, count($freshUser->getGroups()->getSnapshot()), "Snapshot of CmsUser::groups should contain 3 entries."); + self::assertFalse($freshUser->groups->isInitialized(), "CmsUser::groups Collection has to be uninitialized for this test."); + self::assertEquals(3, count($freshUser->getGroups())); + self::assertEquals(3, count($freshUser->getGroups()->getSnapshot()), "Snapshot of CmsUser::groups should contain 3 entries."); $this->_em->clear(); $freshUser = $this->_em->find(CmsUser::class, $user->getId()); - $this->assertEquals(3, count($freshUser->getGroups())); + self::assertEquals(3, count($freshUser->getGroups())); } /** @@ -219,7 +219,7 @@ public function testRemoveUserWithManyGroups() $this->_em->flush(); $newUser = $this->_em->find(get_class($user), $userId); - $this->assertNull($newUser); + self::assertNull($newUser); } /** @@ -236,7 +236,7 @@ public function testRemoveGroupWithUser() $this->_em->clear(); $newUser = $this->_em->find(get_class($user), $user->getId()); - $this->assertEquals(0, count($newUser->getGroups())); + self::assertEquals(0, count($newUser->getGroups())); } public function testDereferenceCollectionDelete() @@ -248,7 +248,7 @@ public function testDereferenceCollectionDelete() $this->_em->clear(); $newUser = $this->_em->find(get_class($user), $user->getId()); - $this->assertEquals(0, count($newUser->getGroups())); + self::assertEquals(0, count($newUser->getGroups())); } /** @@ -267,8 +267,8 @@ public function testWorkWithDqlHydratedEmptyCollection() $newUser = $this->_em->createQuery('SELECT u, g FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.groups g WHERE u.id = ?1') ->setParameter(1, $user->getId()) ->getSingleResult(); - $this->assertEquals(0, count($newUser->groups)); - $this->assertInternalType('array', $newUser->groups->getMapping()); + self::assertEquals(0, count($newUser->groups)); + self::assertInternalType('array', $newUser->groups->getMapping()); $newUser->addGroup($group); @@ -276,7 +276,7 @@ public function testWorkWithDqlHydratedEmptyCollection() $this->_em->clear(); $newUser = $this->_em->find(get_class($user), $user->getId()); - $this->assertEquals(1, count($newUser->groups)); + self::assertEquals(1, count($newUser->groups)); } /** @@ -299,7 +299,7 @@ public function addCmsUserGblancoWithGroups($groupCount = 1) $this->_em->persist($user); $this->_em->flush(); - $this->assertNotNull($user->getId(), "User 'gblanco' should have an ID assigned after the persist()/flush() operation."); + self::assertNotNull($user->getId(), "User 'gblanco' should have an ID assigned after the persist()/flush() operation."); return $user; } @@ -325,16 +325,16 @@ public function testClearAndResetCollection() $coll = new ArrayCollection([$group1, $group2]); $user->groups = $coll; $this->_em->flush(); - $this->assertInstanceOf(PersistentCollection::class, $user->groups, + self::assertInstanceOf(PersistentCollection::class, $user->groups, "UnitOfWork should have replaced ArrayCollection with PersistentCollection."); $this->_em->flush(); $this->_em->clear(); $user = $this->_em->find(get_class($user), $user->id); - $this->assertEquals(2, count($user->groups)); - $this->assertEquals('Developers_New1', $user->groups[0]->name); - $this->assertEquals('Developers_New2', $user->groups[1]->name); + self::assertEquals(2, count($user->groups)); + self::assertEquals('Developers_New1', $user->groups[0]->name); + self::assertEquals('Developers_New2', $user->groups[1]->name); } /** @@ -347,9 +347,9 @@ public function testInitializePersistentCollection() $user = $this->_em->find(get_class($user), $user->id); - $this->assertFalse($user->groups->isInitialized(), "Pre-condition: lazy collection"); + self::assertFalse($user->groups->isInitialized(), "Pre-condition: lazy collection"); $this->_em->getUnitOfWork()->initializeObject($user->groups); - $this->assertTrue($user->groups->isInitialized(), "Collection should be initialized after calling UnitOfWork::initializeObject()"); + self::assertTrue($user->groups->isInitialized(), "Collection should be initialized after calling UnitOfWork::initializeObject()"); } /** @@ -364,12 +364,12 @@ public function testClearBeforeLazyLoad() $user = $this->_em->find(get_class($user), $user->id); $user->groups->clear(); - $this->assertEquals(0, count($user->groups)); + self::assertEquals(0, count($user->groups)); $this->_em->flush(); $user = $this->_em->find(get_class($user), $user->id); - $this->assertEquals(0, count($user->groups)); + self::assertEquals(0, count($user->groups)); } /** @@ -401,7 +401,7 @@ public function testManyToManyOrderByIsNotIgnored() $criteria = Criteria::create() ->orderBy(['name' => Criteria::ASC]); - $this->assertEquals( + self::assertEquals( ['A', 'B', 'C', 'Developers_0'], $user ->getGroups() @@ -445,7 +445,7 @@ public function testManyToManyOrderByHonorsFieldNameColumnNameAliases() $criteria = Criteria::create() ->orderBy(['name' => Criteria::ASC]); - $this->assertEquals( + self::assertEquals( ['A', 'B', 'C'], $user ->getTags() @@ -465,14 +465,14 @@ public function testMatchingWithLimit() $user = $this->_em->find(get_class($user), $user->id); $groups = $user->groups; - $this->assertFalse($user->groups->isInitialized(), "Pre-condition: lazy collection"); + self::assertFalse($user->groups->isInitialized(), "Pre-condition: lazy collection"); $criteria = Criteria::create()->setMaxResults(1); $result = $groups->matching($criteria); - $this->assertCount(1, $result); + self::assertCount(1, $result); - $this->assertFalse($user->groups->isInitialized(), "Post-condition: matching does not initialize collection"); + self::assertFalse($user->groups->isInitialized(), "Post-condition: matching does not initialize collection"); } public function testMatchingWithOffset() @@ -483,17 +483,17 @@ public function testMatchingWithOffset() $user = $this->_em->find(get_class($user), $user->id); $groups = $user->groups; - $this->assertFalse($user->groups->isInitialized(), "Pre-condition: lazy collection"); + self::assertFalse($user->groups->isInitialized(), "Pre-condition: lazy collection"); $criteria = Criteria::create()->setFirstResult(1); $result = $groups->matching($criteria); - $this->assertCount(1, $result); + self::assertCount(1, $result); $firstGroup = $result->first(); - $this->assertEquals('Developers_1', $firstGroup->name); + self::assertEquals('Developers_1', $firstGroup->name); - $this->assertFalse($user->groups->isInitialized(), "Post-condition: matching does not initialize collection"); + self::assertFalse($user->groups->isInitialized(), "Post-condition: matching does not initialize collection"); } public function testMatchingWithLimitAndOffset() @@ -504,20 +504,20 @@ public function testMatchingWithLimitAndOffset() $user = $this->_em->find(get_class($user), $user->id); $groups = $user->groups; - $this->assertFalse($user->groups->isInitialized(), "Pre-condition: lazy collection"); + self::assertFalse($user->groups->isInitialized(), "Pre-condition: lazy collection"); $criteria = Criteria::create()->setFirstResult(1)->setMaxResults(3); $result = $groups->matching($criteria); - $this->assertCount(3, $result); + self::assertCount(3, $result); $firstGroup = $result->first(); - $this->assertEquals('Developers_1', $firstGroup->name); + self::assertEquals('Developers_1', $firstGroup->name); $lastGroup = $result->last(); - $this->assertEquals('Developers_3', $lastGroup->name); + self::assertEquals('Developers_3', $lastGroup->name); - $this->assertFalse($user->groups->isInitialized(), "Post-condition: matching does not initialize collection"); + self::assertFalse($user->groups->isInitialized(), "Post-condition: matching does not initialize collection"); } public function testMatching() @@ -528,16 +528,16 @@ public function testMatching() $user = $this->_em->find(get_class($user), $user->id); $groups = $user->groups; - $this->assertFalse($user->groups->isInitialized(), "Pre-condition: lazy collection"); + self::assertFalse($user->groups->isInitialized(), "Pre-condition: lazy collection"); $criteria = Criteria::create()->where(Criteria::expr()->eq('name', (string) 'Developers_0')); $result = $groups->matching($criteria); - $this->assertCount(1, $result); + self::assertCount(1, $result); $firstGroup = $result->first(); - $this->assertEquals('Developers_0', $firstGroup->name); + self::assertEquals('Developers_0', $firstGroup->name); - $this->assertFalse($user->groups->isInitialized(), "Post-condition: matching does not initialize collection"); + self::assertFalse($user->groups->isInitialized(), "Post-condition: matching does not initialize collection"); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ManyToManyBidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/ManyToManyBidirectionalAssociationTest.php index 9c70ab7f6aa..f00376db0fd 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ManyToManyBidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ManyToManyBidirectionalAssociationTest.php @@ -42,8 +42,8 @@ public function testSavesAManyToManyAssociationWithCascadeSaveSet() $this->_em->persist($this->firstProduct); $this->_em->flush(); - $this->assertForeignKeysContain($this->firstProduct->getId(), $this->firstCategory->getId()); - $this->assertForeignKeysContain($this->firstProduct->getId(), $this->secondCategory->getId()); + self::assertForeignKeysContain($this->firstProduct->getId(), $this->firstCategory->getId()); + self::assertForeignKeysContain($this->firstProduct->getId(), $this->secondCategory->getId()); } public function testRemovesAManyToManyAssociation() @@ -55,13 +55,13 @@ public function testRemovesAManyToManyAssociation() $this->_em->flush(); - $this->assertForeignKeysNotContain($this->firstProduct->getId(), $this->firstCategory->getId()); - $this->assertForeignKeysContain($this->firstProduct->getId(), $this->secondCategory->getId()); + self::assertForeignKeysNotContain($this->firstProduct->getId(), $this->firstCategory->getId()); + self::assertForeignKeysContain($this->firstProduct->getId(), $this->secondCategory->getId()); $this->firstProduct->getCategories()->remove(1); $this->_em->flush(); - $this->assertForeignKeysNotContain($this->firstProduct->getId(), $this->secondCategory->getId()); + self::assertForeignKeysNotContain($this->firstProduct->getId(), $this->secondCategory->getId()); } public function testEagerLoadFromInverseSideAndLazyLoadFromOwningSide() @@ -69,7 +69,7 @@ public function testEagerLoadFromInverseSideAndLazyLoadFromOwningSide() //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); $this->_createLoadingFixture(); $categories = $this->_findCategories(); - $this->assertLazyLoadFromOwningSide($categories); + self::assertLazyLoadFromOwningSide($categories); } public function testEagerLoadFromOwningSideAndLazyLoadFromInverseSide() @@ -77,7 +77,7 @@ public function testEagerLoadFromOwningSideAndLazyLoadFromInverseSide() //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); $this->_createLoadingFixture(); $products = $this->_findProducts(); - $this->assertLazyLoadFromInverseSide($products); + self::assertLazyLoadFromInverseSide($products); } private function _createLoadingFixture() @@ -98,13 +98,13 @@ protected function _findProducts() $query = $this->_em->createQuery('SELECT p, c FROM Doctrine\Tests\Models\ECommerce\ECommerceProduct p LEFT JOIN p.categories c ORDER BY p.id, c.id'); //$query->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true); $result = $query->getResult(); - $this->assertEquals(2, count($result)); + self::assertEquals(2, count($result)); $cats1 = $result[0]->getCategories(); $cats2 = $result[1]->getCategories(); - $this->assertTrue($cats1->isInitialized()); - $this->assertTrue($cats2->isInitialized()); - $this->assertFalse($cats1[0]->getProducts()->isInitialized()); - $this->assertFalse($cats2[0]->getProducts()->isInitialized()); + self::assertTrue($cats1->isInitialized()); + self::assertTrue($cats2->isInitialized()); + self::assertFalse($cats1[0]->getProducts()->isInitialized()); + self::assertFalse($cats2[0]->getProducts()->isInitialized()); return $result; } @@ -114,16 +114,16 @@ protected function _findCategories() $query = $this->_em->createQuery('SELECT c, p FROM Doctrine\Tests\Models\ECommerce\ECommerceCategory c LEFT JOIN c.products p ORDER BY c.id, p.id'); //$query->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true); $result = $query->getResult(); - $this->assertEquals(2, count($result)); - $this->assertInstanceOf(ECommerceCategory::class, $result[0]); - $this->assertInstanceOf(ECommerceCategory::class, $result[1]); + self::assertEquals(2, count($result)); + self::assertInstanceOf(ECommerceCategory::class, $result[0]); + self::assertInstanceOf(ECommerceCategory::class, $result[1]); $prods1 = $result[0]->getProducts(); $prods2 = $result[1]->getProducts(); - $this->assertTrue($prods1->isInitialized()); - $this->assertTrue($prods2->isInitialized()); + self::assertTrue($prods1->isInitialized()); + self::assertTrue($prods2->isInitialized()); - $this->assertFalse($prods1[0]->getCategories()->isInitialized()); - $this->assertFalse($prods2[0]->getCategories()->isInitialized()); + self::assertFalse($prods1[0]->getCategories()->isInitialized()); + self::assertFalse($prods2[0]->getCategories()->isInitialized()); return $result; } @@ -135,32 +135,32 @@ public function assertLazyLoadFromInverseSide($products) $firstProductCategories = $firstProduct->getCategories(); $secondProductCategories = $secondProduct->getCategories(); - $this->assertEquals(2, count($firstProductCategories)); - $this->assertEquals(2, count($secondProductCategories)); + self::assertEquals(2, count($firstProductCategories)); + self::assertEquals(2, count($secondProductCategories)); - $this->assertTrue($firstProductCategories[0] === $secondProductCategories[0]); - $this->assertTrue($firstProductCategories[1] === $secondProductCategories[1]); + self::assertTrue($firstProductCategories[0] === $secondProductCategories[0]); + self::assertTrue($firstProductCategories[1] === $secondProductCategories[1]); $firstCategoryProducts = $firstProductCategories[0]->getProducts(); $secondCategoryProducts = $firstProductCategories[1]->getProducts(); - $this->assertFalse($firstCategoryProducts->isInitialized()); - $this->assertFalse($secondCategoryProducts->isInitialized()); - $this->assertEquals(0, $firstCategoryProducts->unwrap()->count()); - $this->assertEquals(0, $secondCategoryProducts->unwrap()->count()); + self::assertFalse($firstCategoryProducts->isInitialized()); + self::assertFalse($secondCategoryProducts->isInitialized()); + self::assertEquals(0, $firstCategoryProducts->unwrap()->count()); + self::assertEquals(0, $secondCategoryProducts->unwrap()->count()); - $this->assertEquals(2, count($firstCategoryProducts)); // lazy-load - $this->assertTrue($firstCategoryProducts->isInitialized()); - $this->assertFalse($secondCategoryProducts->isInitialized()); - $this->assertEquals(2, count($secondCategoryProducts)); // lazy-load - $this->assertTrue($secondCategoryProducts->isInitialized()); + self::assertEquals(2, count($firstCategoryProducts)); // lazy-load + self::assertTrue($firstCategoryProducts->isInitialized()); + self::assertFalse($secondCategoryProducts->isInitialized()); + self::assertEquals(2, count($secondCategoryProducts)); // lazy-load + self::assertTrue($secondCategoryProducts->isInitialized()); - $this->assertInstanceOf(ECommerceProduct::class, $firstCategoryProducts[0]); - $this->assertInstanceOf(ECommerceProduct::class, $firstCategoryProducts[1]); - $this->assertInstanceOf(ECommerceProduct::class, $secondCategoryProducts[0]); - $this->assertInstanceOf(ECommerceProduct::class, $secondCategoryProducts[1]); + self::assertInstanceOf(ECommerceProduct::class, $firstCategoryProducts[0]); + self::assertInstanceOf(ECommerceProduct::class, $firstCategoryProducts[1]); + self::assertInstanceOf(ECommerceProduct::class, $secondCategoryProducts[0]); + self::assertInstanceOf(ECommerceProduct::class, $secondCategoryProducts[1]); - $this->assertCollectionEquals($firstCategoryProducts, $secondCategoryProducts); + self::assertCollectionEquals($firstCategoryProducts, $secondCategoryProducts); } public function assertLazyLoadFromOwningSide($categories) @@ -170,31 +170,31 @@ public function assertLazyLoadFromOwningSide($categories) $firstCategoryProducts = $firstCategory->getProducts(); $secondCategoryProducts = $secondCategory->getProducts(); - $this->assertEquals(2, count($firstCategoryProducts)); - $this->assertEquals(2, count($secondCategoryProducts)); + self::assertEquals(2, count($firstCategoryProducts)); + self::assertEquals(2, count($secondCategoryProducts)); - $this->assertTrue($firstCategoryProducts[0] === $secondCategoryProducts[0]); - $this->assertTrue($firstCategoryProducts[1] === $secondCategoryProducts[1]); + self::assertTrue($firstCategoryProducts[0] === $secondCategoryProducts[0]); + self::assertTrue($firstCategoryProducts[1] === $secondCategoryProducts[1]); $firstProductCategories = $firstCategoryProducts[0]->getCategories(); $secondProductCategories = $firstCategoryProducts[1]->getCategories(); - $this->assertFalse($firstProductCategories->isInitialized()); - $this->assertFalse($secondProductCategories->isInitialized()); - $this->assertEquals(0, $firstProductCategories->unwrap()->count()); - $this->assertEquals(0, $secondProductCategories->unwrap()->count()); + self::assertFalse($firstProductCategories->isInitialized()); + self::assertFalse($secondProductCategories->isInitialized()); + self::assertEquals(0, $firstProductCategories->unwrap()->count()); + self::assertEquals(0, $secondProductCategories->unwrap()->count()); - $this->assertEquals(2, count($firstProductCategories)); // lazy-load - $this->assertTrue($firstProductCategories->isInitialized()); - $this->assertFalse($secondProductCategories->isInitialized()); - $this->assertEquals(2, count($secondProductCategories)); // lazy-load - $this->assertTrue($secondProductCategories->isInitialized()); + self::assertEquals(2, count($firstProductCategories)); // lazy-load + self::assertTrue($firstProductCategories->isInitialized()); + self::assertFalse($secondProductCategories->isInitialized()); + self::assertEquals(2, count($secondProductCategories)); // lazy-load + self::assertTrue($secondProductCategories->isInitialized()); - $this->assertInstanceOf(ECommerceCategory::class, $firstProductCategories[0]); - $this->assertInstanceOf(ECommerceCategory::class, $firstProductCategories[1]); - $this->assertInstanceOf(ECommerceCategory::class, $secondProductCategories[0]); - $this->assertInstanceOf(ECommerceCategory::class, $secondProductCategories[1]); + self::assertInstanceOf(ECommerceCategory::class, $firstProductCategories[0]); + self::assertInstanceOf(ECommerceCategory::class, $firstProductCategories[1]); + self::assertInstanceOf(ECommerceCategory::class, $secondProductCategories[0]); + self::assertInstanceOf(ECommerceCategory::class, $secondProductCategories[1]); - $this->assertCollectionEquals($firstProductCategories, $secondProductCategories); + self::assertCollectionEquals($firstProductCategories, $secondProductCategories); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ManyToManyEventTest.php b/tests/Doctrine/Tests/ORM/Functional/ManyToManyEventTest.php index 87283ec4bf1..cd348c5adbb 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ManyToManyEventTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ManyToManyEventTest.php @@ -33,7 +33,7 @@ public function testListenerShouldBeNotifiedOnlyWhenUpdating() $user = $this->createNewValidUser(); $this->_em->persist($user); $this->_em->flush(); - $this->assertFalse($this->listener->wasNotified); + self::assertFalse($this->listener->wasNotified); $group = new CmsGroup(); $group->name = "admins"; @@ -41,7 +41,7 @@ public function testListenerShouldBeNotifiedOnlyWhenUpdating() $this->_em->persist($user); $this->_em->flush(); - $this->assertTrue($this->listener->wasNotified); + self::assertTrue($this->listener->wasNotified); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/ManyToManySelfReferentialAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/ManyToManySelfReferentialAssociationTest.php index 559cd4ba662..5b7364f36cf 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ManyToManySelfReferentialAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ManyToManySelfReferentialAssociationTest.php @@ -40,9 +40,9 @@ public function testSavesAManyToManyAssociationWithCascadeSaveSet() $this->_em->persist($this->firstProduct); $this->_em->flush(); - $this->assertForeignKeysContain($this->firstProduct->getId(), + self::assertForeignKeysContain($this->firstProduct->getId(), $this->firstRelated->getId()); - $this->assertForeignKeysContain($this->firstProduct->getId(), + self::assertForeignKeysContain($this->firstProduct->getId(), $this->secondRelated->getId()); } @@ -55,9 +55,9 @@ public function testRemovesAManyToManyAssociation() $this->_em->flush(); - $this->assertForeignKeysNotContain($this->firstProduct->getId(), + self::assertForeignKeysNotContain($this->firstProduct->getId(), $this->firstRelated->getId()); - $this->assertForeignKeysContain($this->firstProduct->getId(), + self::assertForeignKeysContain($this->firstProduct->getId(), $this->secondRelated->getId()); } @@ -65,7 +65,7 @@ public function testEagerLoadsOwningSide() { $this->_createLoadingFixture(); $products = $this->_findProducts(); - $this->assertLoadingOfOwningSide($products); + self::assertLoadingOfOwningSide($products); } public function testLazyLoadsOwningSide() @@ -77,28 +77,28 @@ public function testLazyLoadsOwningSide() $query = $this->_em->createQuery('SELECT p FROM Doctrine\Tests\Models\ECommerce\ECommerceProduct p'); $products = $query->getResult(); - $this->assertLoadingOfOwningSide($products); + self::assertLoadingOfOwningSide($products); } public function assertLoadingOfOwningSide($products) { list ($firstProduct, $secondProduct) = $products; - $this->assertEquals(2, count($firstProduct->getRelated())); - $this->assertEquals(2, count($secondProduct->getRelated())); + self::assertEquals(2, count($firstProduct->getRelated())); + self::assertEquals(2, count($secondProduct->getRelated())); $categories = $firstProduct->getRelated(); $firstRelatedBy = $categories[0]->getRelated(); $secondRelatedBy = $categories[1]->getRelated(); - $this->assertEquals(2, count($firstRelatedBy)); - $this->assertEquals(2, count($secondRelatedBy)); + self::assertEquals(2, count($firstRelatedBy)); + self::assertEquals(2, count($secondRelatedBy)); - $this->assertInstanceOf(ECommerceProduct::class, $firstRelatedBy[0]); - $this->assertInstanceOf(ECommerceProduct::class, $firstRelatedBy[1]); - $this->assertInstanceOf(ECommerceProduct::class, $secondRelatedBy[0]); - $this->assertInstanceOf(ECommerceProduct::class, $secondRelatedBy[1]); + self::assertInstanceOf(ECommerceProduct::class, $firstRelatedBy[0]); + self::assertInstanceOf(ECommerceProduct::class, $firstRelatedBy[1]); + self::assertInstanceOf(ECommerceProduct::class, $secondRelatedBy[0]); + self::assertInstanceOf(ECommerceProduct::class, $secondRelatedBy[1]); - $this->assertCollectionEquals($firstRelatedBy, $secondRelatedBy); + self::assertCollectionEquals($firstRelatedBy, $secondRelatedBy); } protected function _createLoadingFixture() diff --git a/tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php index 20e31db00df..663d62cfef1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php @@ -40,8 +40,8 @@ public function testSavesAManyToManyAssociationWithCascadeSaveSet() $this->_em->persist($this->firstCart); $this->_em->flush(); - $this->assertForeignKeysContain($this->firstCart->getId(), $this->firstProduct->getId()); - $this->assertForeignKeysContain($this->firstCart->getId(), $this->secondProduct->getId()); + self::assertForeignKeysContain($this->firstCart->getId(), $this->firstProduct->getId()); + self::assertForeignKeysContain($this->firstCart->getId(), $this->secondProduct->getId()); } public function testRemovesAManyToManyAssociation() @@ -53,8 +53,8 @@ public function testRemovesAManyToManyAssociation() $this->_em->flush(); - $this->assertForeignKeysNotContain($this->firstCart->getId(), $this->firstProduct->getId()); - $this->assertForeignKeysContain($this->firstCart->getId(), $this->secondProduct->getId()); + self::assertForeignKeysNotContain($this->firstCart->getId(), $this->firstProduct->getId()); + self::assertForeignKeysContain($this->firstCart->getId(), $this->secondProduct->getId()); } public function testEagerLoad() @@ -67,11 +67,11 @@ public function testEagerLoad() $products = $firstCart->getProducts(); $secondCart = $result[1]; - $this->assertInstanceOf(ECommerceProduct::class, $products[0]); - $this->assertInstanceOf(ECommerceProduct::class, $products[1]); - $this->assertCollectionEquals($products, $secondCart->getProducts()); - //$this->assertEquals("Doctrine 1.x Manual", $products[0]->getName()); - //$this->assertEquals("Doctrine 2.x Manual", $products[1]->getName()); + self::assertInstanceOf(ECommerceProduct::class, $products[0]); + self::assertInstanceOf(ECommerceProduct::class, $products[1]); + self::assertCollectionEquals($products, $secondCart->getProducts()); + //self::assertEquals("Doctrine 1.x Manual", $products[0]->getName()); + //self::assertEquals("Doctrine 2.x Manual", $products[1]->getName()); } public function testLazyLoadsCollection() @@ -86,9 +86,9 @@ public function testLazyLoadsCollection() $products = $firstCart->getProducts(); $secondCart = $result[1]; - $this->assertInstanceOf(ECommerceProduct::class, $products[0]); - $this->assertInstanceOf(ECommerceProduct::class, $products[1]); - $this->assertCollectionEquals($products, $secondCart->getProducts()); + self::assertInstanceOf(ECommerceProduct::class, $products[0]); + self::assertInstanceOf(ECommerceProduct::class, $products[1]); + self::assertCollectionEquals($products, $secondCart->getProducts()); } private function _createFixture() diff --git a/tests/Doctrine/Tests/ORM/Functional/MappedSuperclassTest.php b/tests/Doctrine/Tests/ORM/Functional/MappedSuperclassTest.php index 97c34bba335..a86e5990c3b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/MappedSuperclassTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/MappedSuperclassTest.php @@ -41,10 +41,10 @@ public function testCRUD() $cleanFile = $this->_em->find(get_class($file), $file->getId()); - $this->assertInstanceOf(Directory::class, $cleanFile->getParent()); - $this->assertInstanceOf(Proxy::class, $cleanFile->getParent()); - $this->assertEquals($directory->getId(), $cleanFile->getParent()->getId()); - $this->assertInstanceOf(Directory::class, $cleanFile->getParent()->getParent()); - $this->assertEquals($root->getId(), $cleanFile->getParent()->getParent()->getId()); + self::assertInstanceOf(Directory::class, $cleanFile->getParent()); + self::assertInstanceOf(Proxy::class, $cleanFile->getParent()); + self::assertEquals($directory->getId(), $cleanFile->getParent()->getId()); + self::assertInstanceOf(Directory::class, $cleanFile->getParent()->getParent()); + self::assertEquals($root->getId(), $cleanFile->getParent()->getParent()->getId()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/MergeCompositeToOneKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/MergeCompositeToOneKeyTest.php index fab94a9066c..6e479dedee5 100644 --- a/tests/Doctrine/Tests/ORM/Functional/MergeCompositeToOneKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/MergeCompositeToOneKeyTest.php @@ -39,9 +39,9 @@ public function testMergingOfEntityWithCompositeIdentifierContainingToOneAssocia /* @var $merged CompositeToOneKeyState */ $merged = $this->_em->merge($state); - $this->assertInstanceOf(CompositeToOneKeyState::class, $state); - $this->assertNotSame($state, $merged); - $this->assertInstanceOf(Country::class, $merged->country); - $this->assertNotSame($country, $merged->country); + self::assertInstanceOf(CompositeToOneKeyState::class, $state); + self::assertNotSame($state, $merged); + self::assertInstanceOf(Country::class, $merged->country); + self::assertNotSame($country, $merged->country); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php b/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php index 3d0acd1f898..19de0b6ac30 100644 --- a/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php @@ -38,10 +38,10 @@ public function testMergeDetachedUnInitializedProxy() $managed = $this->_em->getReference(DateTimeModel::class, 123); - $this->assertSame($managed, $this->_em->merge($detachedUninitialized)); + self::assertSame($managed, $this->_em->merge($detachedUninitialized)); - $this->assertFalse($managed->__isInitialized()); - $this->assertFalse($detachedUninitialized->__isInitialized()); + self::assertFalse($managed->__isInitialized()); + self::assertFalse($detachedUninitialized->__isInitialized()); } /** @@ -58,13 +58,13 @@ public function testMergeUnserializedUnInitializedProxy() $managed = $this->_em->getReference(DateTimeModel::class, 123); - $this->assertSame( + self::assertSame( $managed, $this->_em->merge(unserialize(serialize($this->_em->merge($detachedUninitialized)))) ); - $this->assertFalse($managed->__isInitialized()); - $this->assertFalse($detachedUninitialized->__isInitialized()); + self::assertFalse($managed->__isInitialized()); + self::assertFalse($detachedUninitialized->__isInitialized()); } /** @@ -77,9 +77,9 @@ public function testMergeManagedProxy() { $managed = $this->_em->getReference(DateTimeModel::class, 123); - $this->assertSame($managed, $this->_em->merge($managed)); + self::assertSame($managed, $this->_em->merge($managed)); - $this->assertFalse($managed->__isInitialized()); + self::assertFalse($managed->__isInitialized()); } /** @@ -101,14 +101,14 @@ public function testMergeWithExistingUninitializedManagedProxy() $managed = $this->_em->getReference(DateTimeModel::class, $date->id); - $this->assertInstanceOf(Proxy::class, $managed); - $this->assertFalse($managed->__isInitialized()); + self::assertInstanceOf(Proxy::class, $managed); + self::assertFalse($managed->__isInitialized()); $date->date = $dateTime = new \DateTime(); - $this->assertSame($managed, $this->_em->merge($date)); - $this->assertTrue($managed->__isInitialized()); - $this->assertSame($dateTime, $managed->date, 'Data was merged into the proxy after initialization'); + self::assertSame($managed, $this->_em->merge($date)); + self::assertTrue($managed->__isInitialized()); + self::assertSame($dateTime, $managed->date, 'Data was merged into the proxy after initialization'); } /** @@ -139,20 +139,20 @@ public function testMergingProxyFromDifferentEntityManagerWithExistingManagedIns $proxy2 = $em2->getReference(DateTimeModel::class, $file1->id); $merged2 = $em2->merge($proxy1); - $this->assertNotSame($proxy1, $merged2); - $this->assertSame($proxy2, $merged2); + self::assertNotSame($proxy1, $merged2); + self::assertSame($proxy2, $merged2); - $this->assertFalse($proxy1->__isInitialized()); - $this->assertFalse($proxy2->__isInitialized()); + self::assertFalse($proxy1->__isInitialized()); + self::assertFalse($proxy2->__isInitialized()); $proxy1->__load(); - $this->assertCount( + self::assertCount( $queryCount1 + 1, $logger1->queries, 'Loading the first proxy was done through the first entity manager' ); - $this->assertCount( + self::assertCount( $queryCount2, $logger2->queries, 'No queries were executed on the second entity manager, as it is unrelated with the first proxy' @@ -160,12 +160,12 @@ public function testMergingProxyFromDifferentEntityManagerWithExistingManagedIns $proxy2->__load(); - $this->assertCount( + self::assertCount( $queryCount1 + 1, $logger1->queries, 'Loading the second proxy does not affect the first entity manager' ); - $this->assertCount( + self::assertCount( $queryCount2 + 1, $logger2->queries, 'Loading of the second proxy instance was done through the second entity manager' @@ -199,16 +199,16 @@ public function testMergingUnInitializedProxyDoesNotInitializeIt() $unManagedProxy = $em1->getReference(DateTimeModel::class, $file1->id); $mergedInstance = $em2->merge($unManagedProxy); - $this->assertNotInstanceOf(Proxy::class, $mergedInstance); - $this->assertNotSame($unManagedProxy, $mergedInstance); - $this->assertFalse($unManagedProxy->__isInitialized()); + self::assertNotInstanceOf(Proxy::class, $mergedInstance); + self::assertNotSame($unManagedProxy, $mergedInstance); + self::assertFalse($unManagedProxy->__isInitialized()); - $this->assertCount( + self::assertCount( $queryCount1, $logger1->queries, 'Loading the merged instance affected only the first entity manager' ); - $this->assertCount( + self::assertCount( $queryCount1 + 1, $logger2->queries, 'Loading the merged instance was done via the second entity manager' @@ -216,12 +216,12 @@ public function testMergingUnInitializedProxyDoesNotInitializeIt() $unManagedProxy->__load(); - $this->assertCount( + self::assertCount( $queryCount1 + 1, $logger1->queries, 'Loading the first proxy was done through the first entity manager' ); - $this->assertCount( + self::assertCount( $queryCount2 + 1, $logger2->queries, 'No queries were executed on the second entity manager, as it is unrelated with the first proxy' diff --git a/tests/Doctrine/Tests/ORM/Functional/MergeSharedEntitiesTest.php b/tests/Doctrine/Tests/ORM/Functional/MergeSharedEntitiesTest.php index b549a420108..49921df6563 100644 --- a/tests/Doctrine/Tests/ORM/Functional/MergeSharedEntitiesTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/MergeSharedEntitiesTest.php @@ -35,7 +35,7 @@ public function testMergeSharedNewEntities() $picture = $this->_em->merge($picture); - $this->assertEquals($picture->file, $picture->otherFile, 'Identical entities must remain identical'); + self::assertEquals($picture->file, $picture->otherFile, 'Identical entities must remain identical'); } public function testMergeSharedManagedEntities() @@ -53,7 +53,7 @@ public function testMergeSharedManagedEntities() $picture = $this->_em->merge($picture); - $this->assertEquals($picture->file, $picture->otherFile, 'Identical entities must remain identical'); + self::assertEquals($picture->file, $picture->otherFile, 'Identical entities must remain identical'); } public function testMergeSharedDetachedSerializedEntities() @@ -73,7 +73,7 @@ public function testMergeSharedDetachedSerializedEntities() $picture = $this->_em->merge(unserialize($serializedPicture)); - $this->assertEquals($picture->file, $picture->otherFile, 'Identical entities must remain identical'); + self::assertEquals($picture->file, $picture->otherFile, 'Identical entities must remain identical'); } /** @@ -91,8 +91,8 @@ public function testMergeInheritedTransientPrivateProperties() $admin2->setSession('zeh current session data'); - $this->assertSame($admin1, $this->_em->merge($admin2)); - $this->assertSame('zeh current session data', $admin1->getSession()); + self::assertSame($admin1, $this->_em->merge($admin2)); + self::assertSame('zeh current session data', $admin1->getSession()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/MergeVersionedManyToOneTest.php b/tests/Doctrine/Tests/ORM/Functional/MergeVersionedManyToOneTest.php index 43af6720c83..82b9c207591 100644 --- a/tests/Doctrine/Tests/ORM/Functional/MergeVersionedManyToOneTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/MergeVersionedManyToOneTest.php @@ -39,6 +39,6 @@ public function testSetVersionOnCreate() $articleMerged->name = 'Article Merged'; $this->_em->flush(); - $this->assertEquals(2, $articleMerged->version); + self::assertEquals(2, $articleMerged->version); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php b/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php index 12bd9cedbf4..4b853191a62 100644 --- a/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php @@ -64,9 +64,9 @@ public function testBasicNativeQuery() $users = $query->getResult(); - $this->assertEquals(1, count($users)); - $this->assertInstanceOf(CmsUser::class, $users[0]); - $this->assertEquals('Roman', $users[0]->name); + self::assertEquals(1, count($users)); + self::assertInstanceOf(CmsUser::class, $users[0]); + self::assertEquals('Roman', $users[0]->name); } public function testBasicNativeQueryWithMetaResult() @@ -104,13 +104,13 @@ public function testBasicNativeQueryWithMetaResult() $addresses = $query->getResult(); - $this->assertEquals(1, count($addresses)); - $this->assertTrue($addresses[0] instanceof CmsAddress); - $this->assertEquals($addr->country, $addresses[0]->country); - $this->assertEquals($addr->zip, $addresses[0]->zip); - $this->assertEquals($addr->city, $addresses[0]->city); - $this->assertEquals($addr->street, $addresses[0]->street); - $this->assertTrue($addresses[0]->user instanceof CmsUser); + self::assertEquals(1, count($addresses)); + self::assertTrue($addresses[0] instanceof CmsAddress); + self::assertEquals($addr->country, $addresses[0]->country); + self::assertEquals($addr->zip, $addresses[0]->zip); + self::assertEquals($addr->city, $addresses[0]->city); + self::assertEquals($addr->street, $addresses[0]->street); + self::assertTrue($addresses[0]->user instanceof CmsUser); } public function testJoinedOneToManyNativeQuery() @@ -146,17 +146,17 @@ public function testJoinedOneToManyNativeQuery() $users = $query->getResult(); - $this->assertEquals(1, count($users)); - $this->assertInstanceOf(CmsUser::class, $users[0]); - $this->assertEquals('Roman', $users[0]->name); - $this->assertInstanceOf(PersistentCollection::class, $users[0]->getPhonenumbers()); - $this->assertTrue($users[0]->getPhonenumbers()->isInitialized()); - $this->assertEquals(1, count($users[0]->getPhonenumbers())); + self::assertEquals(1, count($users)); + self::assertInstanceOf(CmsUser::class, $users[0]); + self::assertEquals('Roman', $users[0]->name); + self::assertInstanceOf(PersistentCollection::class, $users[0]->getPhonenumbers()); + self::assertTrue($users[0]->getPhonenumbers()->isInitialized()); + self::assertEquals(1, count($users[0]->getPhonenumbers())); $phones = $users[0]->getPhonenumbers(); - $this->assertEquals(424242, $phones[0]->phonenumber); - $this->assertTrue($phones[0]->getUser() === $users[0]); + self::assertEquals(424242, $phones[0]->phonenumber); + self::assertTrue($phones[0]->getUser() === $users[0]); } public function testJoinedOneToOneNativeQuery() @@ -197,16 +197,16 @@ public function testJoinedOneToOneNativeQuery() $users = $query->getResult(); - $this->assertEquals(1, count($users)); - $this->assertInstanceOf(CmsUser::class, $users[0]); - $this->assertEquals('Roman', $users[0]->name); - $this->assertInstanceOf(PersistentCollection::class, $users[0]->getPhonenumbers()); - $this->assertFalse($users[0]->getPhonenumbers()->isInitialized()); - $this->assertInstanceOf(CmsAddress::class, $users[0]->getAddress()); - $this->assertTrue($users[0]->getAddress()->getUser() == $users[0]); - $this->assertEquals('germany', $users[0]->getAddress()->getCountry()); - $this->assertEquals(10827, $users[0]->getAddress()->getZipCode()); - $this->assertEquals('Berlin', $users[0]->getAddress()->getCity()); + self::assertEquals(1, count($users)); + self::assertInstanceOf(CmsUser::class, $users[0]); + self::assertEquals('Roman', $users[0]->name); + self::assertInstanceOf(PersistentCollection::class, $users[0]->getPhonenumbers()); + self::assertFalse($users[0]->getPhonenumbers()->isInitialized()); + self::assertInstanceOf(CmsAddress::class, $users[0]->getAddress()); + self::assertTrue($users[0]->getAddress()->getUser() == $users[0]); + self::assertEquals('germany', $users[0]->getAddress()->getCountry()); + self::assertEquals(10827, $users[0]->getAddress()->getZipCode()); + self::assertEquals('Berlin', $users[0]->getAddress()->getCity()); } public function testFluentInterface() @@ -228,7 +228,7 @@ public function testFluentInterface() ->setResultCacheDriver(null) ->setResultCacheLifetime(3500); - $this->assertSame($q, $q2); + self::assertSame($q, $q2); } public function testJoinedOneToManyNativeQueryWithRSMBuilder() @@ -259,17 +259,17 @@ public function testJoinedOneToManyNativeQueryWithRSMBuilder() $users = $query->getResult(); - $this->assertEquals(1, count($users)); - $this->assertInstanceOf(CmsUser::class, $users[0]); - $this->assertEquals('Roman', $users[0]->name); - $this->assertInstanceOf(PersistentCollection::class, $users[0]->getPhonenumbers()); - $this->assertTrue($users[0]->getPhonenumbers()->isInitialized()); - $this->assertEquals(1, count($users[0]->getPhonenumbers())); + self::assertEquals(1, count($users)); + self::assertInstanceOf(CmsUser::class, $users[0]); + self::assertEquals('Roman', $users[0]->name); + self::assertInstanceOf(PersistentCollection::class, $users[0]->getPhonenumbers()); + self::assertTrue($users[0]->getPhonenumbers()->isInitialized()); + self::assertEquals(1, count($users[0]->getPhonenumbers())); $phones = $users[0]->getPhonenumbers(); - $this->assertEquals(424242, $phones[0]->phonenumber); - $this->assertTrue($phones[0]->getUser() === $users[0]); + self::assertEquals(424242, $phones[0]->phonenumber); + self::assertTrue($phones[0]->getUser() === $users[0]); $this->_em->clear(); @@ -283,8 +283,8 @@ public function testJoinedOneToManyNativeQueryWithRSMBuilder() $phone = $query->getSingleResult(); - $this->assertNotNull($phone->getUser()); - $this->assertEquals($user->name, $phone->getUser()->getName()); + self::assertNotNull($phone->getUser()); + self::assertEquals($user->name, $phone->getUser()->getName()); } public function testJoinedOneToOneNativeQueryWithRSMBuilder() @@ -318,16 +318,16 @@ public function testJoinedOneToOneNativeQueryWithRSMBuilder() $users = $query->getResult(); - $this->assertEquals(1, count($users)); - $this->assertInstanceOf(CmsUser::class, $users[0]); - $this->assertEquals('Roman', $users[0]->name); - $this->assertInstanceOf(PersistentCollection::class, $users[0]->getPhonenumbers()); - $this->assertFalse($users[0]->getPhonenumbers()->isInitialized()); - $this->assertInstanceOf(CmsAddress::class, $users[0]->getAddress()); - $this->assertTrue($users[0]->getAddress()->getUser() == $users[0]); - $this->assertEquals('germany', $users[0]->getAddress()->getCountry()); - $this->assertEquals(10827, $users[0]->getAddress()->getZipCode()); - $this->assertEquals('Berlin', $users[0]->getAddress()->getCity()); + self::assertEquals(1, count($users)); + self::assertInstanceOf(CmsUser::class, $users[0]); + self::assertEquals('Roman', $users[0]->name); + self::assertInstanceOf(PersistentCollection::class, $users[0]->getPhonenumbers()); + self::assertFalse($users[0]->getPhonenumbers()->isInitialized()); + self::assertInstanceOf(CmsAddress::class, $users[0]->getAddress()); + self::assertTrue($users[0]->getAddress()->getUser() == $users[0]); + self::assertEquals('germany', $users[0]->getAddress()->getCountry()); + self::assertEquals(10827, $users[0]->getAddress()->getZipCode()); + self::assertEquals('Berlin', $users[0]->getAddress()->getCity()); $this->_em->clear(); @@ -341,8 +341,8 @@ public function testJoinedOneToOneNativeQueryWithRSMBuilder() $address = $query->getSingleResult(); - $this->assertNotNull($address->getUser()); - $this->assertEquals($user->name, $address->getUser()->getName()); + self::assertNotNull($address->getUser()); + self::assertEquals($user->name, $address->getUser()->getName()); } /** @@ -430,11 +430,11 @@ public function testBasicNativeNamedQueryWithSqlResultSetMapping() $query = $repository->createNativeNamedQuery('find-all'); $result = $query->getResult(); - $this->assertCount(1, $result); - $this->assertInstanceOf(CmsAddress::class, $result[0]); - $this->assertEquals($addr->id, $result[0]->id); - $this->assertEquals($addr->city, $result[0]->city); - $this->assertEquals($addr->country, $result[0]->country); + self::assertCount(1, $result); + self::assertInstanceOf(CmsAddress::class, $result[0]); + self::assertEquals($addr->id, $result[0]->id); + self::assertEquals($addr->city, $result[0]->city); + self::assertEquals($addr->country, $result[0]->country); } /** @@ -465,12 +465,12 @@ public function testBasicNativeNamedQueryWithResultClass() ->setParameter(1, 'FabioBatSilva') ->getResult(); - $this->assertEquals(1, count($result)); - $this->assertInstanceOf(CmsUser::class, $result[0]); - $this->assertNull($result[0]->name); - $this->assertNull($result[0]->email); - $this->assertEquals($user->id, $result[0]->id); - $this->assertEquals('FabioBatSilva', $result[0]->username); + self::assertEquals(1, count($result)); + self::assertInstanceOf(CmsUser::class, $result[0]); + self::assertNull($result[0]->name); + self::assertNull($result[0]->email); + self::assertEquals($user->id, $result[0]->id); + self::assertEquals('FabioBatSilva', $result[0]->username); $this->_em->clear(); @@ -479,13 +479,13 @@ public function testBasicNativeNamedQueryWithResultClass() ->setParameter(1, 'FabioBatSilva') ->getResult(); - $this->assertEquals(1, count($result)); - $this->assertInstanceOf(CmsUser::class, $result[0]); - $this->assertEquals($user->id, $result[0]->id); - $this->assertEquals('Fabio B. Silva', $result[0]->name); - $this->assertEquals('FabioBatSilva', $result[0]->username); - $this->assertEquals('dev', $result[0]->status); - $this->assertInstanceOf(CmsEmail::class, $result[0]->email); + self::assertEquals(1, count($result)); + self::assertInstanceOf(CmsUser::class, $result[0]); + self::assertEquals($user->id, $result[0]->id); + self::assertEquals('Fabio B. Silva', $result[0]->name); + self::assertEquals('FabioBatSilva', $result[0]->username); + self::assertEquals('dev', $result[0]->status); + self::assertInstanceOf(CmsEmail::class, $result[0]->email); } /** @@ -514,16 +514,16 @@ public function testJoinedOneToOneNativeNamedQueryWithResultSetMapping() ->setParameter(1, 'FabioBatSilva') ->getResult(); - $this->assertEquals(1, count($result)); - $this->assertInstanceOf(CmsUser::class, $result[0]); - $this->assertEquals('Fabio B. Silva', $result[0]->name); - $this->assertInstanceOf(PersistentCollection::class, $result[0]->getPhonenumbers()); - $this->assertFalse($result[0]->getPhonenumbers()->isInitialized()); - $this->assertInstanceOf(CmsAddress::class, $result[0]->getAddress()); - $this->assertTrue($result[0]->getAddress()->getUser() == $result[0]); - $this->assertEquals('Brazil', $result[0]->getAddress()->getCountry()); - $this->assertEquals(10827, $result[0]->getAddress()->getZipCode()); - $this->assertEquals('SĂŁo Paulo', $result[0]->getAddress()->getCity()); + self::assertEquals(1, count($result)); + self::assertInstanceOf(CmsUser::class, $result[0]); + self::assertEquals('Fabio B. Silva', $result[0]->name); + self::assertInstanceOf(PersistentCollection::class, $result[0]->getPhonenumbers()); + self::assertFalse($result[0]->getPhonenumbers()->isInitialized()); + self::assertInstanceOf(CmsAddress::class, $result[0]->getAddress()); + self::assertTrue($result[0]->getAddress()->getUser() == $result[0]); + self::assertEquals('Brazil', $result[0]->getAddress()->getCountry()); + self::assertEquals(10827, $result[0]->getAddress()->getZipCode()); + self::assertEquals('SĂŁo Paulo', $result[0]->getAddress()->getCity()); } /** @@ -551,15 +551,15 @@ public function testJoinedOneToManyNativeNamedQueryWithResultSetMapping() $result = $repository->createNativeNamedQuery('fetchJoinedPhonenumber') ->setParameter(1, 'FabioBatSilva')->getResult(); - $this->assertEquals(1, count($result)); - $this->assertInstanceOf(CmsUser::class, $result[0]); - $this->assertEquals('Fabio B. Silva', $result[0]->name); - $this->assertInstanceOf(PersistentCollection::class, $result[0]->getPhonenumbers()); - $this->assertTrue($result[0]->getPhonenumbers()->isInitialized()); - $this->assertEquals(1, count($result[0]->getPhonenumbers())); + self::assertEquals(1, count($result)); + self::assertInstanceOf(CmsUser::class, $result[0]); + self::assertEquals('Fabio B. Silva', $result[0]->name); + self::assertInstanceOf(PersistentCollection::class, $result[0]->getPhonenumbers()); + self::assertTrue($result[0]->getPhonenumbers()->isInitialized()); + self::assertEquals(1, count($result[0]->getPhonenumbers())); $phones = $result[0]->getPhonenumbers(); - $this->assertEquals(424242, $phones[0]->phonenumber); - $this->assertTrue($phones[0]->getUser() === $result[0]); + self::assertEquals(424242, $phones[0]->phonenumber); + self::assertTrue($phones[0]->getUser() === $result[0]); } /** @@ -601,19 +601,19 @@ public function testMixedNativeNamedQueryNormalJoin() ->createNativeNamedQuery('fetchUserPhonenumberCount') ->setParameter(1, ['test','FabioBatSilva'])->getResult(); - $this->assertEquals(2, count($result)); - $this->assertTrue(is_array($result[0])); - $this->assertTrue(is_array($result[1])); + self::assertEquals(2, count($result)); + self::assertTrue(is_array($result[0])); + self::assertTrue(is_array($result[1])); // first user => 2 phonenumbers - $this->assertInstanceOf(CmsUser::class, $result[0][0]); - $this->assertEquals('Fabio B. Silva', $result[0][0]->name); - $this->assertEquals(2, $result[0]['numphones']); + self::assertInstanceOf(CmsUser::class, $result[0][0]); + self::assertEquals('Fabio B. Silva', $result[0][0]->name); + self::assertEquals(2, $result[0]['numphones']); // second user => 1 phonenumbers - $this->assertInstanceOf(CmsUser::class, $result[1][0]); - $this->assertEquals('test tester', $result[1][0]->name); - $this->assertEquals(1, $result[1]['numphones']); + self::assertInstanceOf(CmsUser::class, $result[1][0]); + self::assertEquals('test tester', $result[1][0]->name); + self::assertEquals(1, $result[1]['numphones']); } /** @@ -641,13 +641,13 @@ public function testNativeNamedQueryInheritance() ->createNativeNamedQuery('fetchAllWithSqlResultSetMapping') ->getResult(); - $this->assertEquals(2, count($result)); - $this->assertInstanceOf(CompanyPerson::class, $result[0]); - $this->assertInstanceOf(CompanyEmployee::class, $result[1]); - $this->assertTrue(is_numeric($result[0]->getId())); - $this->assertTrue(is_numeric($result[1]->getId())); - $this->assertEquals('Fabio B. Silva', $result[0]->getName()); - $this->assertEquals('Fabio Silva', $result[1]->getName()); + self::assertEquals(2, count($result)); + self::assertInstanceOf(CompanyPerson::class, $result[0]); + self::assertInstanceOf(CompanyEmployee::class, $result[1]); + self::assertTrue(is_numeric($result[0]->getId())); + self::assertTrue(is_numeric($result[1]->getId())); + self::assertEquals('Fabio B. Silva', $result[0]->getName()); + self::assertEquals('Fabio Silva', $result[1]->getName()); $this->_em->clear(); @@ -655,13 +655,13 @@ public function testNativeNamedQueryInheritance() ->createNativeNamedQuery('fetchAllWithResultClass') ->getResult(); - $this->assertEquals(2, count($result)); - $this->assertInstanceOf(CompanyPerson::class, $result[0]); - $this->assertInstanceOf(CompanyEmployee::class, $result[1]); - $this->assertTrue(is_numeric($result[0]->getId())); - $this->assertTrue(is_numeric($result[1]->getId())); - $this->assertEquals('Fabio B. Silva', $result[0]->getName()); - $this->assertEquals('Fabio Silva', $result[1]->getName()); + self::assertEquals(2, count($result)); + self::assertInstanceOf(CompanyPerson::class, $result[0]); + self::assertInstanceOf(CompanyEmployee::class, $result[1]); + self::assertTrue(is_numeric($result[0]->getId())); + self::assertTrue(is_numeric($result[1]->getId())); + self::assertEquals('Fabio B. Silva', $result[0]->getName()); + self::assertEquals('Fabio Silva', $result[1]->getName()); } /** @@ -699,16 +699,16 @@ public function testMultipleEntityResults() $query = $repository->createNativeNamedQuery('fetchMultipleJoinsEntityResults'); $result = $query->getResult(); - $this->assertEquals(1, count($result)); - $this->assertTrue(is_array($result[0])); - $this->assertInstanceOf(CmsUser::class, $result[0][0]); - $this->assertEquals('Fabio B. Silva', $result[0][0]->name); - $this->assertInstanceOf(CmsAddress::class, $result[0][0]->getAddress()); - $this->assertTrue($result[0][0]->getAddress()->getUser() == $result[0][0]); - $this->assertEquals('Brazil', $result[0][0]->getAddress()->getCountry()); - $this->assertEquals(10827, $result[0][0]->getAddress()->getZipCode()); + self::assertEquals(1, count($result)); + self::assertTrue(is_array($result[0])); + self::assertInstanceOf(CmsUser::class, $result[0][0]); + self::assertEquals('Fabio B. Silva', $result[0][0]->name); + self::assertInstanceOf(CmsAddress::class, $result[0][0]->getAddress()); + self::assertTrue($result[0][0]->getAddress()->getUser() == $result[0][0]); + self::assertEquals('Brazil', $result[0][0]->getAddress()->getCountry()); + self::assertEquals(10827, $result[0][0]->getAddress()->getZipCode()); - $this->assertEquals(1, $result[0]['numphones']); + self::assertEquals(1, $result[0]['numphones']); } /** @@ -726,40 +726,40 @@ public function testNamedNativeQueryInheritance() $flexMappings = $flexMetadata->getSqlResultSetMappings(); // contract queries - $this->assertEquals('all-contracts', $contractQueries['all-contracts']['name']); - $this->assertEquals(CompanyContract::class, $contractQueries['all-contracts']['resultClass']); + self::assertEquals('all-contracts', $contractQueries['all-contracts']['name']); + self::assertEquals(CompanyContract::class, $contractQueries['all-contracts']['resultClass']); - $this->assertEquals('all', $contractQueries['all']['name']); - $this->assertEquals(CompanyContract::class, $contractQueries['all']['resultClass']); + self::assertEquals('all', $contractQueries['all']['name']); + self::assertEquals(CompanyContract::class, $contractQueries['all']['resultClass']); // flex contract queries - $this->assertEquals('all-contracts', $flexQueries['all-contracts']['name']); - $this->assertEquals(CompanyFlexContract::class, $flexQueries['all-contracts']['resultClass']); + self::assertEquals('all-contracts', $flexQueries['all-contracts']['name']); + self::assertEquals(CompanyFlexContract::class, $flexQueries['all-contracts']['resultClass']); - $this->assertEquals('all-flex', $flexQueries['all-flex']['name']); - $this->assertEquals(CompanyFlexContract::class, $flexQueries['all-flex']['resultClass']); + self::assertEquals('all-flex', $flexQueries['all-flex']['name']); + self::assertEquals(CompanyFlexContract::class, $flexQueries['all-flex']['resultClass']); - $this->assertEquals('all', $flexQueries['all']['name']); - $this->assertEquals(CompanyFlexContract::class, $flexQueries['all']['resultClass']); + self::assertEquals('all', $flexQueries['all']['name']); + self::assertEquals(CompanyFlexContract::class, $flexQueries['all']['resultClass']); // contract result mapping - $this->assertEquals('mapping-all-contracts', $contractMappings['mapping-all-contracts']['name']); - $this->assertEquals(CompanyContract::class, $contractMappings['mapping-all-contracts']['entities'][0]['entityClass']); + self::assertEquals('mapping-all-contracts', $contractMappings['mapping-all-contracts']['name']); + self::assertEquals(CompanyContract::class, $contractMappings['mapping-all-contracts']['entities'][0]['entityClass']); - $this->assertEquals('mapping-all', $contractMappings['mapping-all']['name']); - $this->assertEquals(CompanyContract::class, $contractMappings['mapping-all-contracts']['entities'][0]['entityClass']); + self::assertEquals('mapping-all', $contractMappings['mapping-all']['name']); + self::assertEquals(CompanyContract::class, $contractMappings['mapping-all-contracts']['entities'][0]['entityClass']); // flex contract result mapping - $this->assertEquals('mapping-all-contracts', $flexMappings['mapping-all-contracts']['name']); - $this->assertEquals(CompanyFlexContract::class, $flexMappings['mapping-all-contracts']['entities'][0]['entityClass']); + self::assertEquals('mapping-all-contracts', $flexMappings['mapping-all-contracts']['name']); + self::assertEquals(CompanyFlexContract::class, $flexMappings['mapping-all-contracts']['entities'][0]['entityClass']); - $this->assertEquals('mapping-all', $flexMappings['mapping-all']['name']); - $this->assertEquals(CompanyFlexContract::class, $flexMappings['mapping-all']['entities'][0]['entityClass']); + self::assertEquals('mapping-all', $flexMappings['mapping-all']['name']); + self::assertEquals(CompanyFlexContract::class, $flexMappings['mapping-all']['entities'][0]['entityClass']); - $this->assertEquals('mapping-all-flex', $flexMappings['mapping-all-flex']['name']); - $this->assertEquals(CompanyFlexContract::class, $flexMappings['mapping-all-flex']['entities'][0]['entityClass']); + self::assertEquals('mapping-all-flex', $flexMappings['mapping-all-flex']['name']); + self::assertEquals(CompanyFlexContract::class, $flexMappings['mapping-all-flex']['entities'][0]['entityClass']); } @@ -774,7 +774,7 @@ public function testGenerateSelectClauseNoRenameSingleEntity() $selectClause = $rsm->generateSelectClause(); - $this->assertSQLEquals('u.id AS id, u.status AS status, u.username AS username, u.name AS name, u.email_id AS email_id', $selectClause); + self::assertSQLEquals('u.id AS id, u.status AS status, u.username AS username, u.name AS name, u.email_id AS email_id', $selectClause); } /** @@ -795,7 +795,7 @@ public function testGenerateSelectClauseCustomRenames() $selectClause = $rsm->generateSelectClause(); - $this->assertSQLEquals('u.id AS id1, u.status AS status, u.username AS username2, u.name AS name, u.email_id AS email_id', $selectClause); + self::assertSQLEquals('u.id AS id1, u.status AS status, u.username AS username2, u.name AS name, u.email_id AS email_id', $selectClause); } /** @@ -809,7 +809,7 @@ public function testGenerateSelectClauseRenameTableAlias() $selectClause = $rsm->generateSelectClause(['u' => 'u1']); - $this->assertSQLEquals('u1.id AS id, u1.status AS status, u1.username AS username, u1.name AS name, u1.email_id AS email_id', $selectClause); + self::assertSQLEquals('u1.id AS id, u1.status AS status, u1.username AS username, u1.name AS name, u1.email_id AS email_id', $selectClause); } /** @@ -823,7 +823,7 @@ public function testGenerateSelectClauseIncrement() $selectClause = $rsm->generateSelectClause(); - $this->assertSQLEquals('u.id AS id0, u.status AS status1, u.username AS username2, u.name AS name3, u.email_id AS email_id4', $selectClause); + self::assertSQLEquals('u.id AS id0, u.status AS status1, u.username AS username2, u.name AS name3, u.email_id AS email_id4', $selectClause); } /** @@ -835,7 +835,7 @@ public function testGenerateSelectClauseToString() $rsm->addRootEntityFromClassMetadata(CmsUser::class, 'u'); - $this->assertSQLEquals('u.id AS id0, u.status AS status1, u.username AS username2, u.name AS name3, u.email_id AS email_id4', (string)$rsm); + self::assertSQLEquals('u.id AS id0, u.status AS status1, u.username AS username2, u.name AS name3, u.email_id AS email_id4', (string)$rsm); } /** @@ -852,6 +852,6 @@ public function testGenerateSelectClauseWithDiscriminatorColumn() $selectClause = $rsm->generateSelectClause(['u' => 'u1', 'c' => 'c1']); - $this->assertSQLEquals('u1.id as id, c1.discr as discr', $selectClause); + self::assertSQLEquals('u1.id as id, c1.discr as discr', $selectClause); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/NewOperatorTest.php b/tests/Doctrine/Tests/ORM/Functional/NewOperatorTest.php index 1422dcd9a2c..1a418525e94 100644 --- a/tests/Doctrine/Tests/ORM/Functional/NewOperatorTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/NewOperatorTest.php @@ -122,23 +122,23 @@ public function testShouldSupportsBasicUsage($hydrationMode) $query = $this->_em->createQuery($dql); $result = $query->getResult($hydrationMode); - $this->assertCount(3, $result); + self::assertCount(3, $result); - $this->assertInstanceOf(CmsUserDTO::class, $result[0]); - $this->assertInstanceOf(CmsUserDTO::class, $result[1]); - $this->assertInstanceOf(CmsUserDTO::class, $result[2]); + self::assertInstanceOf(CmsUserDTO::class, $result[0]); + self::assertInstanceOf(CmsUserDTO::class, $result[1]); + self::assertInstanceOf(CmsUserDTO::class, $result[2]); - $this->assertEquals($this->fixtures[0]->name, $result[0]->name); - $this->assertEquals($this->fixtures[1]->name, $result[1]->name); - $this->assertEquals($this->fixtures[2]->name, $result[2]->name); + self::assertEquals($this->fixtures[0]->name, $result[0]->name); + self::assertEquals($this->fixtures[1]->name, $result[1]->name); + self::assertEquals($this->fixtures[2]->name, $result[2]->name); - $this->assertEquals($this->fixtures[0]->email->email, $result[0]->email); - $this->assertEquals($this->fixtures[1]->email->email, $result[1]->email); - $this->assertEquals($this->fixtures[2]->email->email, $result[2]->email); + self::assertEquals($this->fixtures[0]->email->email, $result[0]->email); + self::assertEquals($this->fixtures[1]->email->email, $result[1]->email); + self::assertEquals($this->fixtures[2]->email->email, $result[2]->email); - $this->assertEquals($this->fixtures[0]->address->city, $result[0]->address); - $this->assertEquals($this->fixtures[1]->address->city, $result[1]->address); - $this->assertEquals($this->fixtures[2]->address->city, $result[2]->address); + self::assertEquals($this->fixtures[0]->address->city, $result[0]->address); + self::assertEquals($this->fixtures[1]->address->city, $result[1]->address); + self::assertEquals($this->fixtures[2]->address->city, $result[2]->address); } /** @@ -165,23 +165,23 @@ public function testShouldIgnoreAliasesForSingleObject($hydrationMode) $query = $this->_em->createQuery($dql); $result = $query->getResult($hydrationMode); - $this->assertCount(3, $result); + self::assertCount(3, $result); - $this->assertInstanceOf(CmsUserDTO::class, $result[0]); - $this->assertInstanceOf(CmsUserDTO::class, $result[1]); - $this->assertInstanceOf(CmsUserDTO::class, $result[2]); + self::assertInstanceOf(CmsUserDTO::class, $result[0]); + self::assertInstanceOf(CmsUserDTO::class, $result[1]); + self::assertInstanceOf(CmsUserDTO::class, $result[2]); - $this->assertEquals($this->fixtures[0]->name, $result[0]->name); - $this->assertEquals($this->fixtures[1]->name, $result[1]->name); - $this->assertEquals($this->fixtures[2]->name, $result[2]->name); + self::assertEquals($this->fixtures[0]->name, $result[0]->name); + self::assertEquals($this->fixtures[1]->name, $result[1]->name); + self::assertEquals($this->fixtures[2]->name, $result[2]->name); - $this->assertEquals($this->fixtures[0]->email->email, $result[0]->email); - $this->assertEquals($this->fixtures[1]->email->email, $result[1]->email); - $this->assertEquals($this->fixtures[2]->email->email, $result[2]->email); + self::assertEquals($this->fixtures[0]->email->email, $result[0]->email); + self::assertEquals($this->fixtures[1]->email->email, $result[1]->email); + self::assertEquals($this->fixtures[2]->email->email, $result[2]->email); - $this->assertEquals($this->fixtures[0]->address->city, $result[0]->address); - $this->assertEquals($this->fixtures[1]->address->city, $result[1]->address); - $this->assertEquals($this->fixtures[2]->address->city, $result[2]->address); + self::assertEquals($this->fixtures[0]->address->city, $result[0]->address); + self::assertEquals($this->fixtures[1]->address->city, $result[1]->address); + self::assertEquals($this->fixtures[2]->address->city, $result[2]->address); } public function testShouldAssumeFromEntityNamespaceWhenNotGiven() @@ -201,11 +201,11 @@ public function testShouldAssumeFromEntityNamespaceWhenNotGiven() $query = $this->_em->createQuery($dql); $result = $query->getResult(); - $this->assertCount(3, $result); + self::assertCount(3, $result); - $this->assertInstanceOf(CmsUserDTO::class, $result[0]); - $this->assertInstanceOf(CmsUserDTO::class, $result[1]); - $this->assertInstanceOf(CmsUserDTO::class, $result[2]); + self::assertInstanceOf(CmsUserDTO::class, $result[0]); + self::assertInstanceOf(CmsUserDTO::class, $result[1]); + self::assertInstanceOf(CmsUserDTO::class, $result[2]); } public function testShouldSupportFromEntityNamespaceAlias() @@ -229,11 +229,11 @@ public function testShouldSupportFromEntityNamespaceAlias() $query = $this->_em->createQuery($dql); $result = $query->getResult(); - $this->assertCount(3, $result); + self::assertCount(3, $result); - $this->assertInstanceOf(CmsUserDTO::class, $result[0]); - $this->assertInstanceOf(CmsUserDTO::class, $result[1]); - $this->assertInstanceOf(CmsUserDTO::class, $result[2]); + self::assertInstanceOf(CmsUserDTO::class, $result[0]); + self::assertInstanceOf(CmsUserDTO::class, $result[1]); + self::assertInstanceOf(CmsUserDTO::class, $result[2]); } public function testShouldSupportValueObjectNamespaceAlias() @@ -257,11 +257,11 @@ public function testShouldSupportValueObjectNamespaceAlias() $query = $this->_em->createQuery($dql); $result = $query->getResult(); - $this->assertCount(3, $result); + self::assertCount(3, $result); - $this->assertInstanceOf(CmsUserDTO::class, $result[0]); - $this->assertInstanceOf(CmsUserDTO::class, $result[1]); - $this->assertInstanceOf(CmsUserDTO::class, $result[2]); + self::assertInstanceOf(CmsUserDTO::class, $result[0]); + self::assertInstanceOf(CmsUserDTO::class, $result[1]); + self::assertInstanceOf(CmsUserDTO::class, $result[2]); } public function testShouldSupportLiteralExpression() @@ -290,28 +290,28 @@ public function testShouldSupportLiteralExpression() $query = $this->_em->createQuery($dql); $result = $query->getResult(); - $this->assertCount(3, $result); + self::assertCount(3, $result); - $this->assertInstanceOf(CmsUserDTO::class, $result[0]); - $this->assertInstanceOf(CmsUserDTO::class, $result[1]); - $this->assertInstanceOf(CmsUserDTO::class, $result[2]); + self::assertInstanceOf(CmsUserDTO::class, $result[0]); + self::assertInstanceOf(CmsUserDTO::class, $result[1]); + self::assertInstanceOf(CmsUserDTO::class, $result[2]); - $this->assertEquals($this->fixtures[0]->name, $result[0]->name); - $this->assertEquals($this->fixtures[1]->name, $result[1]->name); - $this->assertEquals($this->fixtures[2]->name, $result[2]->name); + self::assertEquals($this->fixtures[0]->name, $result[0]->name); + self::assertEquals($this->fixtures[1]->name, $result[1]->name); + self::assertEquals($this->fixtures[2]->name, $result[2]->name); - $this->assertEquals('fabio.bat.silva@gmail.com', $result[0]->email); - $this->assertEquals('fabio.bat.silva@gmail.com', $result[1]->email); - $this->assertEquals('fabio.bat.silva@gmail.com', $result[2]->email); + self::assertEquals('fabio.bat.silva@gmail.com', $result[0]->email); + self::assertEquals('fabio.bat.silva@gmail.com', $result[1]->email); + self::assertEquals('fabio.bat.silva@gmail.com', $result[2]->email); - $this->assertEquals(false, $result[0]->address); - $this->assertEquals(false, $result[1]->address); - $this->assertEquals(false, $result[2]->address); + self::assertEquals(false, $result[0]->address); + self::assertEquals(false, $result[1]->address); + self::assertEquals(false, $result[2]->address); - $this->assertEquals(123, $result[0]->phonenumbers); - $this->assertEquals(123, $result[1]->phonenumbers); - $this->assertEquals(123, $result[2]->phonenumbers); + self::assertEquals(123, $result[0]->phonenumbers); + self::assertEquals(123, $result[1]->phonenumbers); + self::assertEquals(123, $result[2]->phonenumbers); } public function testShouldSupportCaseExpression() @@ -338,20 +338,20 @@ public function testShouldSupportCaseExpression() $query = $this->_em->createQuery($dql); $result = $query->getResult(); - $this->assertCount(3, $result); + self::assertCount(3, $result); - $this->assertInstanceOf(CmsUserDTO::class, $result[0]); - $this->assertInstanceOf(CmsUserDTO::class, $result[1]); - $this->assertInstanceOf(CmsUserDTO::class, $result[2]); + self::assertInstanceOf(CmsUserDTO::class, $result[0]); + self::assertInstanceOf(CmsUserDTO::class, $result[1]); + self::assertInstanceOf(CmsUserDTO::class, $result[2]); - $this->assertEquals($this->fixtures[0]->name, $result[0]->name); - $this->assertEquals($this->fixtures[1]->name, $result[1]->name); - $this->assertEquals($this->fixtures[2]->name, $result[2]->name); + self::assertEquals($this->fixtures[0]->name, $result[0]->name); + self::assertEquals($this->fixtures[1]->name, $result[1]->name); + self::assertEquals($this->fixtures[2]->name, $result[2]->name); - $this->assertEquals('TEST1', $result[0]->email); - $this->assertEquals('OTHER_TEST', $result[1]->email); - $this->assertEquals('OTHER_TEST', $result[2]->email); + self::assertEquals('TEST1', $result[0]->email); + self::assertEquals('OTHER_TEST', $result[1]->email); + self::assertEquals('OTHER_TEST', $result[2]->email); } public function testShouldSupportSimpleArithmeticExpression() @@ -380,35 +380,35 @@ public function testShouldSupportSimpleArithmeticExpression() $query = $this->_em->createQuery($dql); $result = $query->getResult(); - $this->assertCount(3, $result); + self::assertCount(3, $result); - $this->assertInstanceOf(CmsUserDTO::class, $result[0]); - $this->assertInstanceOf(CmsUserDTO::class, $result[1]); - $this->assertInstanceOf(CmsUserDTO::class, $result[2]); + self::assertInstanceOf(CmsUserDTO::class, $result[0]); + self::assertInstanceOf(CmsUserDTO::class, $result[1]); + self::assertInstanceOf(CmsUserDTO::class, $result[2]); - $this->assertEquals($this->fixtures[0]->name, $result[0]->name); - $this->assertEquals($this->fixtures[1]->name, $result[1]->name); - $this->assertEquals($this->fixtures[2]->name, $result[2]->name); + self::assertEquals($this->fixtures[0]->name, $result[0]->name); + self::assertEquals($this->fixtures[1]->name, $result[1]->name); + self::assertEquals($this->fixtures[2]->name, $result[2]->name); - $this->assertEquals($this->fixtures[0]->email->email, $result[0]->email); - $this->assertEquals($this->fixtures[1]->email->email, $result[1]->email); - $this->assertEquals($this->fixtures[2]->email->email, $result[2]->email); + self::assertEquals($this->fixtures[0]->email->email, $result[0]->email); + self::assertEquals($this->fixtures[1]->email->email, $result[1]->email); + self::assertEquals($this->fixtures[2]->email->email, $result[2]->email); - $this->assertEquals($this->fixtures[0]->address->city, $result[0]->address); - $this->assertEquals($this->fixtures[1]->address->city, $result[1]->address); - $this->assertEquals($this->fixtures[2]->address->city, $result[2]->address); + self::assertEquals($this->fixtures[0]->address->city, $result[0]->address); + self::assertEquals($this->fixtures[1]->address->city, $result[1]->address); + self::assertEquals($this->fixtures[2]->address->city, $result[2]->address); - $this->assertEquals( + self::assertEquals( ($this->fixtures[0]->address->id + $this->fixtures[0]->id), $result[0]->phonenumbers ); - $this->assertEquals( + self::assertEquals( ($this->fixtures[1]->address->id + $this->fixtures[1]->id), $result[1]->phonenumbers ); - $this->assertEquals( + self::assertEquals( ($this->fixtures[2]->address->id + $this->fixtures[2]->id), $result[2]->phonenumbers ); @@ -440,35 +440,35 @@ public function testShouldSupportAggregateFunctions() $query = $this->_em->createQuery($dql); $result = $query->getResult(); - $this->assertCount(3, $result); + self::assertCount(3, $result); - $this->assertInstanceOf(CmsUserDTO::class, $result[0]); - $this->assertInstanceOf(CmsUserDTO::class, $result[1]); - $this->assertInstanceOf(CmsUserDTO::class, $result[2]); + self::assertInstanceOf(CmsUserDTO::class, $result[0]); + self::assertInstanceOf(CmsUserDTO::class, $result[1]); + self::assertInstanceOf(CmsUserDTO::class, $result[2]); - $this->assertEquals($this->fixtures[0]->name, $result[0]->name); - $this->assertEquals($this->fixtures[1]->name, $result[1]->name); - $this->assertEquals($this->fixtures[2]->name, $result[2]->name); + self::assertEquals($this->fixtures[0]->name, $result[0]->name); + self::assertEquals($this->fixtures[1]->name, $result[1]->name); + self::assertEquals($this->fixtures[2]->name, $result[2]->name); - $this->assertEquals($this->fixtures[0]->email->email, $result[0]->email); - $this->assertEquals($this->fixtures[1]->email->email, $result[1]->email); - $this->assertEquals($this->fixtures[2]->email->email, $result[2]->email); + self::assertEquals($this->fixtures[0]->email->email, $result[0]->email); + self::assertEquals($this->fixtures[1]->email->email, $result[1]->email); + self::assertEquals($this->fixtures[2]->email->email, $result[2]->email); - $this->assertEquals($this->fixtures[0]->address->city, $result[0]->address); - $this->assertEquals($this->fixtures[1]->address->city, $result[1]->address); - $this->assertEquals($this->fixtures[2]->address->city, $result[2]->address); + self::assertEquals($this->fixtures[0]->address->city, $result[0]->address); + self::assertEquals($this->fixtures[1]->address->city, $result[1]->address); + self::assertEquals($this->fixtures[2]->address->city, $result[2]->address); - $this->assertEquals( + self::assertEquals( (count($this->fixtures[0]->phonenumbers)), $result[0]->phonenumbers ); - $this->assertEquals( + self::assertEquals( (count($this->fixtures[1]->phonenumbers)), $result[1]->phonenumbers ); - $this->assertEquals( + self::assertEquals( (count($this->fixtures[2]->phonenumbers)), $result[2]->phonenumbers ); @@ -500,35 +500,35 @@ public function testShouldSupportArithmeticExpression() $query = $this->_em->createQuery($dql); $result = $query->getResult(); - $this->assertCount(3, $result); + self::assertCount(3, $result); - $this->assertInstanceOf(CmsUserDTO::class, $result[0]); - $this->assertInstanceOf(CmsUserDTO::class, $result[1]); - $this->assertInstanceOf(CmsUserDTO::class, $result[2]); + self::assertInstanceOf(CmsUserDTO::class, $result[0]); + self::assertInstanceOf(CmsUserDTO::class, $result[1]); + self::assertInstanceOf(CmsUserDTO::class, $result[2]); - $this->assertEquals($this->fixtures[0]->name, $result[0]->name); - $this->assertEquals($this->fixtures[1]->name, $result[1]->name); - $this->assertEquals($this->fixtures[2]->name, $result[2]->name); + self::assertEquals($this->fixtures[0]->name, $result[0]->name); + self::assertEquals($this->fixtures[1]->name, $result[1]->name); + self::assertEquals($this->fixtures[2]->name, $result[2]->name); - $this->assertEquals($this->fixtures[0]->email->email, $result[0]->email); - $this->assertEquals($this->fixtures[1]->email->email, $result[1]->email); - $this->assertEquals($this->fixtures[2]->email->email, $result[2]->email); + self::assertEquals($this->fixtures[0]->email->email, $result[0]->email); + self::assertEquals($this->fixtures[1]->email->email, $result[1]->email); + self::assertEquals($this->fixtures[2]->email->email, $result[2]->email); - $this->assertEquals($this->fixtures[0]->address->city, $result[0]->address); - $this->assertEquals($this->fixtures[1]->address->city, $result[1]->address); - $this->assertEquals($this->fixtures[2]->address->city, $result[2]->address); + self::assertEquals($this->fixtures[0]->address->city, $result[0]->address); + self::assertEquals($this->fixtures[1]->address->city, $result[1]->address); + self::assertEquals($this->fixtures[2]->address->city, $result[2]->address); - $this->assertEquals( + self::assertEquals( (count($this->fixtures[0]->phonenumbers) + $this->fixtures[0]->id), $result[0]->phonenumbers ); - $this->assertEquals( + self::assertEquals( (count($this->fixtures[1]->phonenumbers) + $this->fixtures[1]->id), $result[1]->phonenumbers ); - $this->assertEquals( + self::assertEquals( (count($this->fixtures[2]->phonenumbers) + $this->fixtures[2]->id), $result[2]->phonenumbers ); @@ -558,32 +558,32 @@ public function testShouldSupportMultipleNewOperators() $query = $this->_em->createQuery($dql); $result = $query->getResult(); - $this->assertCount(3, $result); + self::assertCount(3, $result); - $this->assertInstanceOf(CmsUserDTO::class, $result[0][0]); - $this->assertInstanceOf(CmsUserDTO::class, $result[1][0]); - $this->assertInstanceOf(CmsUserDTO::class, $result[2][0]); + self::assertInstanceOf(CmsUserDTO::class, $result[0][0]); + self::assertInstanceOf(CmsUserDTO::class, $result[1][0]); + self::assertInstanceOf(CmsUserDTO::class, $result[2][0]); - $this->assertInstanceOf(CmsAddressDTO::class, $result[0][1]); - $this->assertInstanceOf(CmsAddressDTO::class, $result[1][1]); - $this->assertInstanceOf(CmsAddressDTO::class, $result[2][1]); + self::assertInstanceOf(CmsAddressDTO::class, $result[0][1]); + self::assertInstanceOf(CmsAddressDTO::class, $result[1][1]); + self::assertInstanceOf(CmsAddressDTO::class, $result[2][1]); - $this->assertEquals($this->fixtures[0]->name, $result[0][0]->name); - $this->assertEquals($this->fixtures[1]->name, $result[1][0]->name); - $this->assertEquals($this->fixtures[2]->name, $result[2][0]->name); + self::assertEquals($this->fixtures[0]->name, $result[0][0]->name); + self::assertEquals($this->fixtures[1]->name, $result[1][0]->name); + self::assertEquals($this->fixtures[2]->name, $result[2][0]->name); - $this->assertEquals($this->fixtures[0]->email->email, $result[0][0]->email); - $this->assertEquals($this->fixtures[1]->email->email, $result[1][0]->email); - $this->assertEquals($this->fixtures[2]->email->email, $result[2][0]->email); + self::assertEquals($this->fixtures[0]->email->email, $result[0][0]->email); + self::assertEquals($this->fixtures[1]->email->email, $result[1][0]->email); + self::assertEquals($this->fixtures[2]->email->email, $result[2][0]->email); - $this->assertEquals($this->fixtures[0]->address->city, $result[0][1]->city); - $this->assertEquals($this->fixtures[1]->address->city, $result[1][1]->city); - $this->assertEquals($this->fixtures[2]->address->city, $result[2][1]->city); + self::assertEquals($this->fixtures[0]->address->city, $result[0][1]->city); + self::assertEquals($this->fixtures[1]->address->city, $result[1][1]->city); + self::assertEquals($this->fixtures[2]->address->city, $result[2][1]->city); - $this->assertEquals($this->fixtures[0]->address->country, $result[0][1]->country); - $this->assertEquals($this->fixtures[1]->address->country, $result[1][1]->country); - $this->assertEquals($this->fixtures[2]->address->country, $result[2][1]->country); + self::assertEquals($this->fixtures[0]->address->country, $result[0][1]->country); + self::assertEquals($this->fixtures[1]->address->country, $result[1][1]->country); + self::assertEquals($this->fixtures[2]->address->country, $result[2][1]->country); } public function testShouldSupportMultipleNewOperatorsWithAliases() @@ -610,32 +610,32 @@ public function testShouldSupportMultipleNewOperatorsWithAliases() $query = $this->_em->createQuery($dql); $result = $query->getResult(); - $this->assertCount(3, $result); + self::assertCount(3, $result); - $this->assertInstanceOf(CmsUserDTO::class, $result[0]['cmsUser']); - $this->assertInstanceOf(CmsUserDTO::class, $result[1]['cmsUser']); - $this->assertInstanceOf(CmsUserDTO::class, $result[2]['cmsUser']); + self::assertInstanceOf(CmsUserDTO::class, $result[0]['cmsUser']); + self::assertInstanceOf(CmsUserDTO::class, $result[1]['cmsUser']); + self::assertInstanceOf(CmsUserDTO::class, $result[2]['cmsUser']); - $this->assertInstanceOf(CmsAddressDTO::class, $result[0]['cmsAddress']); - $this->assertInstanceOf(CmsAddressDTO::class, $result[1]['cmsAddress']); - $this->assertInstanceOf(CmsAddressDTO::class, $result[2]['cmsAddress']); + self::assertInstanceOf(CmsAddressDTO::class, $result[0]['cmsAddress']); + self::assertInstanceOf(CmsAddressDTO::class, $result[1]['cmsAddress']); + self::assertInstanceOf(CmsAddressDTO::class, $result[2]['cmsAddress']); - $this->assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name); - $this->assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name); - $this->assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name); + self::assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name); + self::assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name); + self::assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name); - $this->assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email); - $this->assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email); - $this->assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email); + self::assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email); + self::assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email); + self::assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email); - $this->assertEquals($this->fixtures[0]->address->city, $result[0]['cmsAddress']->city); - $this->assertEquals($this->fixtures[1]->address->city, $result[1]['cmsAddress']->city); - $this->assertEquals($this->fixtures[2]->address->city, $result[2]['cmsAddress']->city); + self::assertEquals($this->fixtures[0]->address->city, $result[0]['cmsAddress']->city); + self::assertEquals($this->fixtures[1]->address->city, $result[1]['cmsAddress']->city); + self::assertEquals($this->fixtures[2]->address->city, $result[2]['cmsAddress']->city); - $this->assertEquals($this->fixtures[0]->address->country, $result[0]['cmsAddress']->country); - $this->assertEquals($this->fixtures[1]->address->country, $result[1]['cmsAddress']->country); - $this->assertEquals($this->fixtures[2]->address->country, $result[2]['cmsAddress']->country); + self::assertEquals($this->fixtures[0]->address->country, $result[0]['cmsAddress']->country); + self::assertEquals($this->fixtures[1]->address->country, $result[1]['cmsAddress']->country); + self::assertEquals($this->fixtures[2]->address->country, $result[2]['cmsAddress']->country); } public function testShouldSupportMultipleNewOperatorsWithAndWithoutAliases() @@ -662,32 +662,32 @@ public function testShouldSupportMultipleNewOperatorsWithAndWithoutAliases() $query = $this->_em->createQuery($dql); $result = $query->getResult(); - $this->assertCount(3, $result); + self::assertCount(3, $result); - $this->assertInstanceOf(CmsUserDTO::class, $result[0]['cmsUser']); - $this->assertInstanceOf(CmsUserDTO::class, $result[1]['cmsUser']); - $this->assertInstanceOf(CmsUserDTO::class, $result[2]['cmsUser']); + self::assertInstanceOf(CmsUserDTO::class, $result[0]['cmsUser']); + self::assertInstanceOf(CmsUserDTO::class, $result[1]['cmsUser']); + self::assertInstanceOf(CmsUserDTO::class, $result[2]['cmsUser']); - $this->assertInstanceOf(CmsAddressDTO::class, $result[0][0]); - $this->assertInstanceOf(CmsAddressDTO::class, $result[1][0]); - $this->assertInstanceOf(CmsAddressDTO::class, $result[2][0]); + self::assertInstanceOf(CmsAddressDTO::class, $result[0][0]); + self::assertInstanceOf(CmsAddressDTO::class, $result[1][0]); + self::assertInstanceOf(CmsAddressDTO::class, $result[2][0]); - $this->assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name); - $this->assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name); - $this->assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name); + self::assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name); + self::assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name); + self::assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name); - $this->assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email); - $this->assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email); - $this->assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email); + self::assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email); + self::assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email); + self::assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email); - $this->assertEquals($this->fixtures[0]->address->city, $result[0][0]->city); - $this->assertEquals($this->fixtures[1]->address->city, $result[1][0]->city); - $this->assertEquals($this->fixtures[2]->address->city, $result[2][0]->city); + self::assertEquals($this->fixtures[0]->address->city, $result[0][0]->city); + self::assertEquals($this->fixtures[1]->address->city, $result[1][0]->city); + self::assertEquals($this->fixtures[2]->address->city, $result[2][0]->city); - $this->assertEquals($this->fixtures[0]->address->country, $result[0][0]->country); - $this->assertEquals($this->fixtures[1]->address->country, $result[1][0]->country); - $this->assertEquals($this->fixtures[2]->address->country, $result[2][0]->country); + self::assertEquals($this->fixtures[0]->address->country, $result[0][0]->country); + self::assertEquals($this->fixtures[1]->address->country, $result[1][0]->country); + self::assertEquals($this->fixtures[2]->address->country, $result[2][0]->country); } public function testShouldSupportMultipleNewOperatorsAndSingleScalar() @@ -715,36 +715,36 @@ public function testShouldSupportMultipleNewOperatorsAndSingleScalar() $query = $this->_em->createQuery($dql); $result = $query->getResult(); - $this->assertCount(3, $result); + self::assertCount(3, $result); - $this->assertInstanceOf(CmsUserDTO::class, $result[0][0]); - $this->assertInstanceOf(CmsUserDTO::class, $result[1][0]); - $this->assertInstanceOf(CmsUserDTO::class, $result[2][0]); + self::assertInstanceOf(CmsUserDTO::class, $result[0][0]); + self::assertInstanceOf(CmsUserDTO::class, $result[1][0]); + self::assertInstanceOf(CmsUserDTO::class, $result[2][0]); - $this->assertInstanceOf(CmsAddressDTO::class, $result[0][1]); - $this->assertInstanceOf(CmsAddressDTO::class, $result[1][1]); - $this->assertInstanceOf(CmsAddressDTO::class, $result[2][1]); + self::assertInstanceOf(CmsAddressDTO::class, $result[0][1]); + self::assertInstanceOf(CmsAddressDTO::class, $result[1][1]); + self::assertInstanceOf(CmsAddressDTO::class, $result[2][1]); - $this->assertEquals($this->fixtures[0]->name, $result[0][0]->name); - $this->assertEquals($this->fixtures[1]->name, $result[1][0]->name); - $this->assertEquals($this->fixtures[2]->name, $result[2][0]->name); + self::assertEquals($this->fixtures[0]->name, $result[0][0]->name); + self::assertEquals($this->fixtures[1]->name, $result[1][0]->name); + self::assertEquals($this->fixtures[2]->name, $result[2][0]->name); - $this->assertEquals($this->fixtures[0]->email->email, $result[0][0]->email); - $this->assertEquals($this->fixtures[1]->email->email, $result[1][0]->email); - $this->assertEquals($this->fixtures[2]->email->email, $result[2][0]->email); + self::assertEquals($this->fixtures[0]->email->email, $result[0][0]->email); + self::assertEquals($this->fixtures[1]->email->email, $result[1][0]->email); + self::assertEquals($this->fixtures[2]->email->email, $result[2][0]->email); - $this->assertEquals($this->fixtures[0]->address->city, $result[0][1]->city); - $this->assertEquals($this->fixtures[1]->address->city, $result[1][1]->city); - $this->assertEquals($this->fixtures[2]->address->city, $result[2][1]->city); + self::assertEquals($this->fixtures[0]->address->city, $result[0][1]->city); + self::assertEquals($this->fixtures[1]->address->city, $result[1][1]->city); + self::assertEquals($this->fixtures[2]->address->city, $result[2][1]->city); - $this->assertEquals($this->fixtures[0]->address->country, $result[0][1]->country); - $this->assertEquals($this->fixtures[1]->address->country, $result[1][1]->country); - $this->assertEquals($this->fixtures[2]->address->country, $result[2][1]->country); + self::assertEquals($this->fixtures[0]->address->country, $result[0][1]->country); + self::assertEquals($this->fixtures[1]->address->country, $result[1][1]->country); + self::assertEquals($this->fixtures[2]->address->country, $result[2][1]->country); - $this->assertEquals($this->fixtures[0]->status,$result[0]['status']); - $this->assertEquals($this->fixtures[1]->status,$result[1]['status']); - $this->assertEquals($this->fixtures[2]->status,$result[2]['status']); + self::assertEquals($this->fixtures[0]->status,$result[0]['status']); + self::assertEquals($this->fixtures[1]->status,$result[1]['status']); + self::assertEquals($this->fixtures[2]->status,$result[2]['status']); } public function testShouldSupportMultipleNewOperatorsAndSingleScalarWithAliases() @@ -772,36 +772,36 @@ public function testShouldSupportMultipleNewOperatorsAndSingleScalarWithAliases( $query = $this->_em->createQuery($dql); $result = $query->getResult(); - $this->assertCount(3, $result); + self::assertCount(3, $result); - $this->assertInstanceOf(CmsUserDTO::class, $result[0]['cmsUser']); - $this->assertInstanceOf(CmsUserDTO::class, $result[1]['cmsUser']); - $this->assertInstanceOf(CmsUserDTO::class, $result[2]['cmsUser']); + self::assertInstanceOf(CmsUserDTO::class, $result[0]['cmsUser']); + self::assertInstanceOf(CmsUserDTO::class, $result[1]['cmsUser']); + self::assertInstanceOf(CmsUserDTO::class, $result[2]['cmsUser']); - $this->assertInstanceOf(CmsAddressDTO::class, $result[0]['cmsAddress']); - $this->assertInstanceOf(CmsAddressDTO::class, $result[1]['cmsAddress']); - $this->assertInstanceOf(CmsAddressDTO::class, $result[2]['cmsAddress']); + self::assertInstanceOf(CmsAddressDTO::class, $result[0]['cmsAddress']); + self::assertInstanceOf(CmsAddressDTO::class, $result[1]['cmsAddress']); + self::assertInstanceOf(CmsAddressDTO::class, $result[2]['cmsAddress']); - $this->assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name); - $this->assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name); - $this->assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name); + self::assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name); + self::assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name); + self::assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name); - $this->assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email); - $this->assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email); - $this->assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email); + self::assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email); + self::assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email); + self::assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email); - $this->assertEquals($this->fixtures[0]->address->city, $result[0]['cmsAddress']->city); - $this->assertEquals($this->fixtures[1]->address->city, $result[1]['cmsAddress']->city); - $this->assertEquals($this->fixtures[2]->address->city, $result[2]['cmsAddress']->city); + self::assertEquals($this->fixtures[0]->address->city, $result[0]['cmsAddress']->city); + self::assertEquals($this->fixtures[1]->address->city, $result[1]['cmsAddress']->city); + self::assertEquals($this->fixtures[2]->address->city, $result[2]['cmsAddress']->city); - $this->assertEquals($this->fixtures[0]->address->country, $result[0]['cmsAddress']->country); - $this->assertEquals($this->fixtures[1]->address->country, $result[1]['cmsAddress']->country); - $this->assertEquals($this->fixtures[2]->address->country, $result[2]['cmsAddress']->country); + self::assertEquals($this->fixtures[0]->address->country, $result[0]['cmsAddress']->country); + self::assertEquals($this->fixtures[1]->address->country, $result[1]['cmsAddress']->country); + self::assertEquals($this->fixtures[2]->address->country, $result[2]['cmsAddress']->country); - $this->assertEquals($this->fixtures[0]->status,$result[0]['cmsUserStatus']); - $this->assertEquals($this->fixtures[1]->status,$result[1]['cmsUserStatus']); - $this->assertEquals($this->fixtures[2]->status,$result[2]['cmsUserStatus']); + self::assertEquals($this->fixtures[0]->status,$result[0]['cmsUserStatus']); + self::assertEquals($this->fixtures[1]->status,$result[1]['cmsUserStatus']); + self::assertEquals($this->fixtures[2]->status,$result[2]['cmsUserStatus']); } public function testShouldSupportMultipleNewOperatorsAndSingleScalarWithAndWithoutAliases() @@ -829,36 +829,36 @@ public function testShouldSupportMultipleNewOperatorsAndSingleScalarWithAndWitho $query = $this->_em->createQuery($dql); $result = $query->getResult(); - $this->assertCount(3, $result); + self::assertCount(3, $result); - $this->assertInstanceOf(CmsUserDTO::class, $result[0]['cmsUser']); - $this->assertInstanceOf(CmsUserDTO::class, $result[1]['cmsUser']); - $this->assertInstanceOf(CmsUserDTO::class, $result[2]['cmsUser']); + self::assertInstanceOf(CmsUserDTO::class, $result[0]['cmsUser']); + self::assertInstanceOf(CmsUserDTO::class, $result[1]['cmsUser']); + self::assertInstanceOf(CmsUserDTO::class, $result[2]['cmsUser']); - $this->assertInstanceOf(CmsAddressDTO::class, $result[0][0]); - $this->assertInstanceOf(CmsAddressDTO::class, $result[1][0]); - $this->assertInstanceOf(CmsAddressDTO::class, $result[2][0]); + self::assertInstanceOf(CmsAddressDTO::class, $result[0][0]); + self::assertInstanceOf(CmsAddressDTO::class, $result[1][0]); + self::assertInstanceOf(CmsAddressDTO::class, $result[2][0]); - $this->assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name); - $this->assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name); - $this->assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name); + self::assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name); + self::assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name); + self::assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name); - $this->assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email); - $this->assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email); - $this->assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email); + self::assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email); + self::assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email); + self::assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email); - $this->assertEquals($this->fixtures[0]->address->city, $result[0][0]->city); - $this->assertEquals($this->fixtures[1]->address->city, $result[1][0]->city); - $this->assertEquals($this->fixtures[2]->address->city, $result[2][0]->city); + self::assertEquals($this->fixtures[0]->address->city, $result[0][0]->city); + self::assertEquals($this->fixtures[1]->address->city, $result[1][0]->city); + self::assertEquals($this->fixtures[2]->address->city, $result[2][0]->city); - $this->assertEquals($this->fixtures[0]->address->country, $result[0][0]->country); - $this->assertEquals($this->fixtures[1]->address->country, $result[1][0]->country); - $this->assertEquals($this->fixtures[2]->address->country, $result[2][0]->country); + self::assertEquals($this->fixtures[0]->address->country, $result[0][0]->country); + self::assertEquals($this->fixtures[1]->address->country, $result[1][0]->country); + self::assertEquals($this->fixtures[2]->address->country, $result[2][0]->country); - $this->assertEquals($this->fixtures[0]->status,$result[0]['status']); - $this->assertEquals($this->fixtures[1]->status,$result[1]['status']); - $this->assertEquals($this->fixtures[2]->status,$result[2]['status']); + self::assertEquals($this->fixtures[0]->status,$result[0]['status']); + self::assertEquals($this->fixtures[1]->status,$result[1]['status']); + self::assertEquals($this->fixtures[2]->status,$result[2]['status']); } public function testShouldSupportMultipleNewOperatorsAndMultipleScalars() @@ -887,40 +887,40 @@ public function testShouldSupportMultipleNewOperatorsAndMultipleScalars() $query = $this->_em->createQuery($dql); $result = $query->getResult(); - $this->assertCount(3, $result); + self::assertCount(3, $result); - $this->assertInstanceOf(CmsUserDTO::class, $result[0][0]); - $this->assertInstanceOf(CmsUserDTO::class, $result[1][0]); - $this->assertInstanceOf(CmsUserDTO::class, $result[2][0]); + self::assertInstanceOf(CmsUserDTO::class, $result[0][0]); + self::assertInstanceOf(CmsUserDTO::class, $result[1][0]); + self::assertInstanceOf(CmsUserDTO::class, $result[2][0]); - $this->assertInstanceOf(CmsAddressDTO::class, $result[0][1]); - $this->assertInstanceOf(CmsAddressDTO::class, $result[1][1]); - $this->assertInstanceOf(CmsAddressDTO::class, $result[2][1]); + self::assertInstanceOf(CmsAddressDTO::class, $result[0][1]); + self::assertInstanceOf(CmsAddressDTO::class, $result[1][1]); + self::assertInstanceOf(CmsAddressDTO::class, $result[2][1]); - $this->assertEquals($this->fixtures[0]->name, $result[0][0]->name); - $this->assertEquals($this->fixtures[1]->name, $result[1][0]->name); - $this->assertEquals($this->fixtures[2]->name, $result[2][0]->name); + self::assertEquals($this->fixtures[0]->name, $result[0][0]->name); + self::assertEquals($this->fixtures[1]->name, $result[1][0]->name); + self::assertEquals($this->fixtures[2]->name, $result[2][0]->name); - $this->assertEquals($this->fixtures[0]->email->email, $result[0][0]->email); - $this->assertEquals($this->fixtures[1]->email->email, $result[1][0]->email); - $this->assertEquals($this->fixtures[2]->email->email, $result[2][0]->email); + self::assertEquals($this->fixtures[0]->email->email, $result[0][0]->email); + self::assertEquals($this->fixtures[1]->email->email, $result[1][0]->email); + self::assertEquals($this->fixtures[2]->email->email, $result[2][0]->email); - $this->assertEquals($this->fixtures[0]->address->city, $result[0][1]->city); - $this->assertEquals($this->fixtures[1]->address->city, $result[1][1]->city); - $this->assertEquals($this->fixtures[2]->address->city, $result[2][1]->city); + self::assertEquals($this->fixtures[0]->address->city, $result[0][1]->city); + self::assertEquals($this->fixtures[1]->address->city, $result[1][1]->city); + self::assertEquals($this->fixtures[2]->address->city, $result[2][1]->city); - $this->assertEquals($this->fixtures[0]->address->country, $result[0][1]->country); - $this->assertEquals($this->fixtures[1]->address->country, $result[1][1]->country); - $this->assertEquals($this->fixtures[2]->address->country, $result[2][1]->country); + self::assertEquals($this->fixtures[0]->address->country, $result[0][1]->country); + self::assertEquals($this->fixtures[1]->address->country, $result[1][1]->country); + self::assertEquals($this->fixtures[2]->address->country, $result[2][1]->country); - $this->assertEquals($this->fixtures[0]->status,$result[0]['status']); - $this->assertEquals($this->fixtures[1]->status,$result[1]['status']); - $this->assertEquals($this->fixtures[2]->status,$result[2]['status']); + self::assertEquals($this->fixtures[0]->status,$result[0]['status']); + self::assertEquals($this->fixtures[1]->status,$result[1]['status']); + self::assertEquals($this->fixtures[2]->status,$result[2]['status']); - $this->assertEquals($this->fixtures[0]->username,$result[0]['username']); - $this->assertEquals($this->fixtures[1]->username,$result[1]['username']); - $this->assertEquals($this->fixtures[2]->username,$result[2]['username']); + self::assertEquals($this->fixtures[0]->username,$result[0]['username']); + self::assertEquals($this->fixtures[1]->username,$result[1]['username']); + self::assertEquals($this->fixtures[2]->username,$result[2]['username']); } public function testShouldSupportMultipleNewOperatorsAndMultipleScalarsWithAliases() @@ -949,40 +949,40 @@ public function testShouldSupportMultipleNewOperatorsAndMultipleScalarsWithAlias $query = $this->_em->createQuery($dql); $result = $query->getResult(); - $this->assertCount(3, $result); + self::assertCount(3, $result); - $this->assertInstanceOf(CmsUserDTO::class, $result[0]['cmsUser']); - $this->assertInstanceOf(CmsUserDTO::class, $result[1]['cmsUser']); - $this->assertInstanceOf(CmsUserDTO::class, $result[2]['cmsUser']); + self::assertInstanceOf(CmsUserDTO::class, $result[0]['cmsUser']); + self::assertInstanceOf(CmsUserDTO::class, $result[1]['cmsUser']); + self::assertInstanceOf(CmsUserDTO::class, $result[2]['cmsUser']); - $this->assertInstanceOf(CmsAddressDTO::class, $result[0]['cmsAddress']); - $this->assertInstanceOf(CmsAddressDTO::class, $result[1]['cmsAddress']); - $this->assertInstanceOf(CmsAddressDTO::class, $result[2]['cmsAddress']); + self::assertInstanceOf(CmsAddressDTO::class, $result[0]['cmsAddress']); + self::assertInstanceOf(CmsAddressDTO::class, $result[1]['cmsAddress']); + self::assertInstanceOf(CmsAddressDTO::class, $result[2]['cmsAddress']); - $this->assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name); - $this->assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name); - $this->assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name); + self::assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name); + self::assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name); + self::assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name); - $this->assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email); - $this->assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email); - $this->assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email); + self::assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email); + self::assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email); + self::assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email); - $this->assertEquals($this->fixtures[0]->address->city, $result[0]['cmsAddress']->city); - $this->assertEquals($this->fixtures[1]->address->city, $result[1]['cmsAddress']->city); - $this->assertEquals($this->fixtures[2]->address->city, $result[2]['cmsAddress']->city); + self::assertEquals($this->fixtures[0]->address->city, $result[0]['cmsAddress']->city); + self::assertEquals($this->fixtures[1]->address->city, $result[1]['cmsAddress']->city); + self::assertEquals($this->fixtures[2]->address->city, $result[2]['cmsAddress']->city); - $this->assertEquals($this->fixtures[0]->address->country, $result[0]['cmsAddress']->country); - $this->assertEquals($this->fixtures[1]->address->country, $result[1]['cmsAddress']->country); - $this->assertEquals($this->fixtures[2]->address->country, $result[2]['cmsAddress']->country); + self::assertEquals($this->fixtures[0]->address->country, $result[0]['cmsAddress']->country); + self::assertEquals($this->fixtures[1]->address->country, $result[1]['cmsAddress']->country); + self::assertEquals($this->fixtures[2]->address->country, $result[2]['cmsAddress']->country); - $this->assertEquals($this->fixtures[0]->status,$result[0]['cmsUserStatus']); - $this->assertEquals($this->fixtures[1]->status,$result[1]['cmsUserStatus']); - $this->assertEquals($this->fixtures[2]->status,$result[2]['cmsUserStatus']); + self::assertEquals($this->fixtures[0]->status,$result[0]['cmsUserStatus']); + self::assertEquals($this->fixtures[1]->status,$result[1]['cmsUserStatus']); + self::assertEquals($this->fixtures[2]->status,$result[2]['cmsUserStatus']); - $this->assertEquals($this->fixtures[0]->username,$result[0]['cmsUserUsername']); - $this->assertEquals($this->fixtures[1]->username,$result[1]['cmsUserUsername']); - $this->assertEquals($this->fixtures[2]->username,$result[2]['cmsUserUsername']); + self::assertEquals($this->fixtures[0]->username,$result[0]['cmsUserUsername']); + self::assertEquals($this->fixtures[1]->username,$result[1]['cmsUserUsername']); + self::assertEquals($this->fixtures[2]->username,$result[2]['cmsUserUsername']); } public function testShouldSupportMultipleNewOperatorsAndMultipleScalarsWithAndWithoutAliases() @@ -1011,40 +1011,40 @@ public function testShouldSupportMultipleNewOperatorsAndMultipleScalarsWithAndWi $query = $this->_em->createQuery($dql); $result = $query->getResult(); - $this->assertCount(3, $result); + self::assertCount(3, $result); - $this->assertInstanceOf(CmsUserDTO::class, $result[0]['cmsUser']); - $this->assertInstanceOf(CmsUserDTO::class, $result[1]['cmsUser']); - $this->assertInstanceOf(CmsUserDTO::class, $result[2]['cmsUser']); + self::assertInstanceOf(CmsUserDTO::class, $result[0]['cmsUser']); + self::assertInstanceOf(CmsUserDTO::class, $result[1]['cmsUser']); + self::assertInstanceOf(CmsUserDTO::class, $result[2]['cmsUser']); - $this->assertInstanceOf(CmsAddressDTO::class, $result[0][0]); - $this->assertInstanceOf(CmsAddressDTO::class, $result[1][0]); - $this->assertInstanceOf(CmsAddressDTO::class, $result[2][0]); + self::assertInstanceOf(CmsAddressDTO::class, $result[0][0]); + self::assertInstanceOf(CmsAddressDTO::class, $result[1][0]); + self::assertInstanceOf(CmsAddressDTO::class, $result[2][0]); - $this->assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name); - $this->assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name); - $this->assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name); + self::assertEquals($this->fixtures[0]->name, $result[0]['cmsUser']->name); + self::assertEquals($this->fixtures[1]->name, $result[1]['cmsUser']->name); + self::assertEquals($this->fixtures[2]->name, $result[2]['cmsUser']->name); - $this->assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email); - $this->assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email); - $this->assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email); + self::assertEquals($this->fixtures[0]->email->email, $result[0]['cmsUser']->email); + self::assertEquals($this->fixtures[1]->email->email, $result[1]['cmsUser']->email); + self::assertEquals($this->fixtures[2]->email->email, $result[2]['cmsUser']->email); - $this->assertEquals($this->fixtures[0]->address->city, $result[0][0]->city); - $this->assertEquals($this->fixtures[1]->address->city, $result[1][0]->city); - $this->assertEquals($this->fixtures[2]->address->city, $result[2][0]->city); + self::assertEquals($this->fixtures[0]->address->city, $result[0][0]->city); + self::assertEquals($this->fixtures[1]->address->city, $result[1][0]->city); + self::assertEquals($this->fixtures[2]->address->city, $result[2][0]->city); - $this->assertEquals($this->fixtures[0]->address->country, $result[0][0]->country); - $this->assertEquals($this->fixtures[1]->address->country, $result[1][0]->country); - $this->assertEquals($this->fixtures[2]->address->country, $result[2][0]->country); + self::assertEquals($this->fixtures[0]->address->country, $result[0][0]->country); + self::assertEquals($this->fixtures[1]->address->country, $result[1][0]->country); + self::assertEquals($this->fixtures[2]->address->country, $result[2][0]->country); - $this->assertEquals($this->fixtures[0]->status,$result[0]['status']); - $this->assertEquals($this->fixtures[1]->status,$result[1]['status']); - $this->assertEquals($this->fixtures[2]->status,$result[2]['status']); + self::assertEquals($this->fixtures[0]->status,$result[0]['status']); + self::assertEquals($this->fixtures[1]->status,$result[1]['status']); + self::assertEquals($this->fixtures[2]->status,$result[2]['status']); - $this->assertEquals($this->fixtures[0]->username,$result[0]['cmsUserUsername']); - $this->assertEquals($this->fixtures[1]->username,$result[1]['cmsUserUsername']); - $this->assertEquals($this->fixtures[2]->username,$result[2]['cmsUserUsername']); + self::assertEquals($this->fixtures[0]->username,$result[0]['cmsUserUsername']); + self::assertEquals($this->fixtures[1]->username,$result[1]['cmsUserUsername']); + self::assertEquals($this->fixtures[2]->username,$result[2]['cmsUserUsername']); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/NotifyPolicyTest.php b/tests/Doctrine/Tests/ORM/Functional/NotifyPolicyTest.php index 5444af6710e..fe5cf580b09 100644 --- a/tests/Doctrine/Tests/ORM/Functional/NotifyPolicyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/NotifyPolicyTest.php @@ -42,26 +42,26 @@ public function testChangeTracking() $this->_em->persist($user); $this->_em->persist($group); - $this->assertEquals(1, count($user->listeners)); - $this->assertEquals(1, count($group->listeners)); + self::assertEquals(1, count($user->listeners)); + self::assertEquals(1, count($group->listeners)); $this->_em->flush(); $this->_em->clear(); - $this->assertEquals(1, count($user->listeners)); - $this->assertEquals(1, count($group->listeners)); + self::assertEquals(1, count($user->listeners)); + self::assertEquals(1, count($group->listeners)); $userId = $user->getId(); $groupId = $group->getId(); unset($user, $group); $user = $this->_em->find(NotifyUser::class, $userId); - $this->assertEquals(1, $user->getGroups()->count()); + self::assertEquals(1, $user->getGroups()->count()); $group = $this->_em->find(NotifyGroup::class, $groupId); - $this->assertEquals(1, $group->getUsers()->count()); + self::assertEquals(1, $group->getUsers()->count()); - $this->assertEquals(1, count($user->listeners)); - $this->assertEquals(1, count($group->listeners)); + self::assertEquals(1, count($user->listeners)); + self::assertEquals(1, count($group->listeners)); $group2 = new NotifyGroup(); $group2->setName('nerds'); @@ -74,19 +74,19 @@ public function testChangeTracking() $this->_em->flush(); $this->_em->clear(); - $this->assertEquals(1, count($user->listeners)); - $this->assertEquals(1, count($group->listeners)); + self::assertEquals(1, count($user->listeners)); + self::assertEquals(1, count($group->listeners)); $group2Id = $group2->getId(); unset($group2, $user); $user = $this->_em->find(NotifyUser::class, $userId); - $this->assertEquals(2, $user->getGroups()->count()); + self::assertEquals(2, $user->getGroups()->count()); $group2 = $this->_em->find(NotifyGroup::class, $group2Id); - $this->assertEquals(1, $group2->getUsers()->count()); + self::assertEquals(1, $group2->getUsers()->count()); $group = $this->_em->find(NotifyGroup::class, $groupId); - $this->assertEquals(1, $group->getUsers()->count()); - $this->assertEquals('geeks', $group->getName()); + self::assertEquals(1, $group->getUsers()->count()); + self::assertEquals('geeks', $group->getName()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToManyBidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToManyBidirectionalAssociationTest.php index 95309c60579..3a33f57abb7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToManyBidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToManyBidirectionalAssociationTest.php @@ -36,8 +36,8 @@ public function testSavesAOneToManyAssociationWithCascadeSaveSet() { $this->_em->persist($this->product); $this->_em->flush(); - $this->assertFeatureForeignKeyIs($this->product->getId(), $this->firstFeature); - $this->assertFeatureForeignKeyIs($this->product->getId(), $this->secondFeature); + self::assertFeatureForeignKeyIs($this->product->getId(), $this->firstFeature); + self::assertFeatureForeignKeyIs($this->product->getId(), $this->secondFeature); } public function testSavesAnEmptyCollection() @@ -45,7 +45,7 @@ public function testSavesAnEmptyCollection() $this->_em->persist($this->product); $this->_em->flush(); - $this->assertEquals(0, count($this->product->getFeatures())); + self::assertEquals(0, count($this->product->getFeatures())); } public function testDoesNotSaveAnInverseSideSet() { @@ -53,7 +53,7 @@ public function testDoesNotSaveAnInverseSideSet() { $this->_em->persist($this->product); $this->_em->flush(); - $this->assertFeatureForeignKeyIs(null, $this->firstFeature); + self::assertFeatureForeignKeyIs(null, $this->firstFeature); } public function testRemovesOneToOneAssociation() @@ -65,8 +65,8 @@ public function testRemovesOneToOneAssociation() $this->product->removeFeature($this->firstFeature); $this->_em->flush(); - $this->assertFeatureForeignKeyIs(null, $this->firstFeature); - $this->assertFeatureForeignKeyIs($this->product->getId(), $this->secondFeature); + self::assertFeatureForeignKeyIs(null, $this->firstFeature); + self::assertFeatureForeignKeyIs($this->product->getId(), $this->secondFeature); } public function testEagerLoadsOneToManyAssociation() @@ -78,14 +78,14 @@ public function testEagerLoadsOneToManyAssociation() $features = $product->getFeatures(); - $this->assertInstanceOf(ECommerceFeature::class, $features[0]); - $this->assertNotInstanceOf(Proxy::class, $features[0]->getProduct()); - $this->assertSame($product, $features[0]->getProduct()); - $this->assertEquals('Model writing tutorial', $features[0]->getDescription()); - $this->assertInstanceOf(ECommerceFeature::class, $features[1]); - $this->assertSame($product, $features[1]->getProduct()); - $this->assertNotInstanceOf(Proxy::class, $features[1]->getProduct()); - $this->assertEquals('Annotations examples', $features[1]->getDescription()); + self::assertInstanceOf(ECommerceFeature::class, $features[0]); + self::assertNotInstanceOf(Proxy::class, $features[0]->getProduct()); + self::assertSame($product, $features[0]->getProduct()); + self::assertEquals('Model writing tutorial', $features[0]->getDescription()); + self::assertInstanceOf(ECommerceFeature::class, $features[1]); + self::assertSame($product, $features[1]->getProduct()); + self::assertNotInstanceOf(Proxy::class, $features[1]->getProduct()); + self::assertEquals('Annotations examples', $features[1]->getDescription()); } public function testLazyLoadsObjectsOnTheOwningSide() @@ -97,14 +97,14 @@ public function testLazyLoadsObjectsOnTheOwningSide() $product = $result[0]; $features = $product->getFeatures(); - $this->assertFalse($features->isInitialized()); - $this->assertInstanceOf(ECommerceFeature::class, $features[0]); - $this->assertTrue($features->isInitialized()); - $this->assertSame($product, $features[0]->getProduct()); - $this->assertEquals('Model writing tutorial', $features[0]->getDescription()); - $this->assertInstanceOf(ECommerceFeature::class, $features[1]); - $this->assertSame($product, $features[1]->getProduct()); - $this->assertEquals('Annotations examples', $features[1]->getDescription()); + self::assertFalse($features->isInitialized()); + self::assertInstanceOf(ECommerceFeature::class, $features[0]); + self::assertTrue($features->isInitialized()); + self::assertSame($product, $features[0]->getProduct()); + self::assertEquals('Model writing tutorial', $features[0]->getDescription()); + self::assertInstanceOf(ECommerceFeature::class, $features[1]); + self::assertSame($product, $features[1]->getProduct()); + self::assertEquals('Annotations examples', $features[1]->getDescription()); } public function testLazyLoadsObjectsOnTheInverseSide() @@ -115,11 +115,11 @@ public function testLazyLoadsObjectsOnTheInverseSide() $features = $query->getResult(); $product = $features[0]->getProduct(); - $this->assertInstanceOf(Proxy::class, $product); - $this->assertInstanceOf(ECommerceProduct::class, $product); - $this->assertFalse($product->__isInitialized__); - $this->assertSame('Doctrine Cookbook', $product->getName()); - $this->assertTrue($product->__isInitialized__); + self::assertInstanceOf(Proxy::class, $product); + self::assertInstanceOf(ECommerceProduct::class, $product); + self::assertFalse($product->__isInitialized__); + self::assertSame('Doctrine Cookbook', $product->getName()); + self::assertTrue($product->__isInitialized__); } public function testLazyLoadsObjectsOnTheInverseSide2() @@ -131,16 +131,16 @@ public function testLazyLoadsObjectsOnTheInverseSide2() $features = $query->getResult(); $product = $features[0]->getProduct(); - $this->assertNotInstanceOf(Proxy::class, $product); - $this->assertInstanceOf(ECommerceProduct::class, $product); - $this->assertSame('Doctrine Cookbook', $product->getName()); + self::assertNotInstanceOf(Proxy::class, $product); + self::assertInstanceOf(ECommerceProduct::class, $product); + self::assertSame('Doctrine Cookbook', $product->getName()); - $this->assertFalse($product->getFeatures()->isInitialized()); + self::assertFalse($product->getFeatures()->isInitialized()); // This would trigger lazy-load - //$this->assertEquals(2, $product->getFeatures()->count()); - //$this->assertTrue($product->getFeatures()->contains($features[0])); - //$this->assertTrue($product->getFeatures()->contains($features[1])); + //self::assertEquals(2, $product->getFeatures()->count()); + //self::assertTrue($product->getFeatures()->contains($features[0])); + //self::assertTrue($product->getFeatures()->contains($features[1])); //$this->_em->getConnection()->getConfiguration()->setSQLLogger(null); } @@ -149,7 +149,7 @@ public function testJoinFromOwningSide() { $query = $this->_em->createQuery('select f,p from Doctrine\Tests\Models\ECommerce\ECommerceFeature f join f.product p'); $features = $query->getResult(); - $this->assertEquals(0, count($features)); + self::assertEquals(0, count($features)); } /** @@ -166,13 +166,13 @@ public function testMatching() Criteria::expr()->eq('description', 'Model writing tutorial') )); - $this->assertInstanceOf(Collection::class, $results); - $this->assertEquals(1, count($results)); + self::assertInstanceOf(Collection::class, $results); + self::assertEquals(1, count($results)); $results = $features->matching(new Criteria()); - $this->assertInstanceOf(Collection::class, $results); - $this->assertEquals(2, count($results)); + self::assertInstanceOf(Collection::class, $results); + self::assertEquals(2, count($results)); } /** @@ -194,7 +194,7 @@ public function testMatchingOnDirtyCollection() Criteria::expr()->eq('description', 'Model writing tutorial') )); - $this->assertEquals(2, count($results)); + self::assertEquals(2, count($results)); } public function testMatchingBis() @@ -212,13 +212,13 @@ public function testMatchingBis() Criteria::expr()->eq('description', 'Third feature') )); - $this->assertInstanceOf(Collection::class, $results); - $this->assertCount(1, $results); + self::assertInstanceOf(Collection::class, $results); + self::assertCount(1, $results); $results = $features->matching(new Criteria()); - $this->assertInstanceOf(Collection::class, $results); - $this->assertCount(3, $results); + self::assertInstanceOf(Collection::class, $results); + self::assertCount(3, $results); } private function _createFixture() @@ -236,6 +236,6 @@ public function assertFeatureForeignKeyIs($value, ECommerceFeature $feature) { 'SELECT product_id FROM ecommerce_features WHERE id=?', [$feature->getId()] )->fetchColumn(); - $this->assertEquals($value, $foreignKey); + self::assertEquals($value, $foreignKey); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToManyOrphanRemovalTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToManyOrphanRemovalTest.php index da70672b6d2..e12c93e446f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToManyOrphanRemovalTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToManyOrphanRemovalTest.php @@ -51,12 +51,12 @@ public function testOrphanRemoval() $query = $this->_em->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u'); $result = $query->getResult(); - $this->assertEquals(0, count($result), 'CmsUser should be removed by EntityManager'); + self::assertEquals(0, count($result), 'CmsUser should be removed by EntityManager'); $query = $this->_em->createQuery('SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p'); $result = $query->getResult(); - $this->assertEquals(0, count($result), 'CmsPhonenumber should be removed by orphanRemoval'); + self::assertEquals(0, count($result), 'CmsPhonenumber should be removed by orphanRemoval'); } /** @@ -74,7 +74,7 @@ public function testOrphanRemovalRemoveFromCollection() $query = $this->_em->createQuery('SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p'); $result = $query->getResult(); - $this->assertEquals(1, count($result), 'CmsPhonenumber should be removed by orphanRemoval'); + self::assertEquals(1, count($result), 'CmsPhonenumber should be removed by orphanRemoval'); } /** @@ -94,7 +94,7 @@ public function testOrphanRemovalClearCollectionAndReAdd() $query = $this->_em->createQuery('SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p'); $result = $query->getResult(); - $this->assertEquals(1, count($result), 'CmsPhonenumber should be removed by orphanRemoval'); + self::assertEquals(1, count($result), 'CmsPhonenumber should be removed by orphanRemoval'); } /** @@ -115,7 +115,7 @@ public function testOrphanRemovalClearCollectionAndAddNew() $query = $this->_em->createQuery('SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p'); $result = $query->getResult(); - $this->assertEquals(1, count($result), 'Old CmsPhonenumbers should be removed by orphanRemoval and new one added'); + self::assertEquals(1, count($result), 'Old CmsPhonenumbers should be removed by orphanRemoval and new one added'); } /** @@ -131,6 +131,6 @@ public function testOrphanRemovalUnitializedCollection() $query = $this->_em->createQuery('SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p'); $result = $query->getResult(); - $this->assertEquals(0, count($result), 'CmsPhonenumber should be removed by orphanRemoval'); + self::assertEquals(0, count($result), 'CmsPhonenumber should be removed by orphanRemoval'); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToManySelfReferentialAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToManySelfReferentialAssociationTest.php index c9f42237d19..fbe7591d902 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToManySelfReferentialAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToManySelfReferentialAssociationTest.php @@ -35,8 +35,8 @@ public function testSavesAOneToManyAssociationWithCascadeSaveSet() { $this->_em->flush(); - $this->assertForeignKeyIs($this->parent->getId(), $this->firstChild); - $this->assertForeignKeyIs($this->parent->getId(), $this->secondChild); + self::assertForeignKeyIs($this->parent->getId(), $this->firstChild); + self::assertForeignKeyIs($this->parent->getId(), $this->secondChild); } public function testSavesAnEmptyCollection() @@ -44,7 +44,7 @@ public function testSavesAnEmptyCollection() $this->_em->persist($this->parent); $this->_em->flush(); - $this->assertEquals(0, count($this->parent->getChildren())); + self::assertEquals(0, count($this->parent->getChildren())); } public function testDoesNotSaveAnInverseSideSet() { @@ -52,7 +52,7 @@ public function testDoesNotSaveAnInverseSideSet() { $this->_em->persist($this->parent); $this->_em->flush(); - $this->assertForeignKeyIs(null, $this->firstChild); + self::assertForeignKeyIs(null, $this->firstChild); } public function testRemovesOneToManyAssociation() @@ -64,8 +64,8 @@ public function testRemovesOneToManyAssociation() $this->parent->removeChild($this->firstChild); $this->_em->flush(); - $this->assertForeignKeyIs(null, $this->firstChild); - $this->assertForeignKeyIs($this->parent->getId(), $this->secondChild); + self::assertForeignKeyIs(null, $this->firstChild); + self::assertForeignKeyIs($this->parent->getId(), $this->secondChild); } public function testEagerLoadsOneToManyAssociation() @@ -74,16 +74,16 @@ public function testEagerLoadsOneToManyAssociation() $query = $this->_em->createQuery('select c1, c2 from Doctrine\Tests\Models\ECommerce\ECommerceCategory c1 join c1.children c2'); $result = $query->getResult(); - $this->assertEquals(1, count($result)); + self::assertEquals(1, count($result)); $parent = $result[0]; $children = $parent->getChildren(); - $this->assertInstanceOf(ECommerceCategory::class, $children[0]); - $this->assertSame($parent, $children[0]->getParent()); - $this->assertEquals(' books', strstr($children[0]->getName(), ' books')); - $this->assertInstanceOf(ECommerceCategory::class, $children[1]); - $this->assertSame($parent, $children[1]->getParent()); - $this->assertEquals(' books', strstr($children[1]->getName(), ' books')); + self::assertInstanceOf(ECommerceCategory::class, $children[0]); + self::assertSame($parent, $children[0]->getParent()); + self::assertEquals(' books', strstr($children[0]->getName(), ' books')); + self::assertInstanceOf(ECommerceCategory::class, $children[1]); + self::assertSame($parent, $children[1]->getParent()); + self::assertEquals(' books', strstr($children[1]->getName(), ' books')); } public function testLazyLoadsOneToManyAssociation() @@ -97,12 +97,12 @@ public function testLazyLoadsOneToManyAssociation() $parent = $result[0]; $children = $parent->getChildren(); - $this->assertInstanceOf(ECommerceCategory::class, $children[0]); - $this->assertSame($parent, $children[0]->getParent()); - $this->assertEquals(' books', strstr($children[0]->getName(), ' books')); - $this->assertInstanceOf(ECommerceCategory::class, $children[1]); - $this->assertSame($parent, $children[1]->getParent()); - $this->assertEquals(' books', strstr($children[1]->getName(), ' books')); + self::assertInstanceOf(ECommerceCategory::class, $children[0]); + self::assertSame($parent, $children[0]->getParent()); + self::assertEquals(' books', strstr($children[0]->getName(), ' books')); + self::assertInstanceOf(ECommerceCategory::class, $children[1]); + self::assertSame($parent, $children[1]->getParent()); + self::assertEquals(' books', strstr($children[1]->getName(), ' books')); } private function _createFixture() @@ -116,8 +116,7 @@ private function _createFixture() } public function assertForeignKeyIs($value, ECommerceCategory $child) { - $foreignKey = $this->_em->getConnection()->executeQuery('SELECT parent_id FROM ecommerce_categories WHERE id=?', [$child->getId()] - )->fetchColumn(); - $this->assertEquals($value, $foreignKey); + $foreignKey = $this->_em->getConnection()->executeQuery('SELECT parent_id FROM ecommerce_categories WHERE id=?', [$child->getId()])->fetchColumn(); + self::assertEquals($value, $foreignKey); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToManyUnidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToManyUnidirectionalAssociationTest.php index c13a6fe9971..7167e111f94 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToManyUnidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToManyUnidirectionalAssociationTest.php @@ -50,9 +50,9 @@ public function testPersistOwning_InverseCascade() "JOIN r.legs l JOIN l.fromLocation f JOIN l.toLocation t" )->getSingleResult(); - $this->assertEquals(1, count($routes->legs)); - $this->assertEquals("Berlin", $routes->legs[0]->fromLocation->name); - $this->assertEquals("Bonn", $routes->legs[0]->toLocation->name); + self::assertEquals(1, count($routes->legs)); + self::assertEquals("Berlin", $routes->legs[0]->fromLocation->name); + self::assertEquals("Bonn", $routes->legs[0]->toLocation->name); } public function testLegsAreUniqueToRoutes() @@ -80,6 +80,6 @@ public function testLegsAreUniqueToRoutes() $exceptionThrown = true; } - $this->assertTrue($exceptionThrown, "The underlying database driver throws an exception."); + self::assertTrue($exceptionThrown, "The underlying database driver throws an exception."); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneBidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneBidirectionalAssociationTest.php index c989e126c44..a6c989b3a8f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneBidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneBidirectionalAssociationTest.php @@ -32,7 +32,7 @@ public function testSavesAOneToOneAssociationWithCascadeSaveSet() { $this->_em->persist($this->customer); $this->_em->flush(); - $this->assertCartForeignKeyIs($this->customer->getId()); + self::assertCartForeignKeyIs($this->customer->getId()); } public function testDoesNotSaveAnInverseSideSet() { @@ -40,7 +40,7 @@ public function testDoesNotSaveAnInverseSideSet() { $this->_em->persist($this->customer); $this->_em->flush(); - $this->assertCartForeignKeyIs(null); + self::assertCartForeignKeyIs(null); } public function testRemovesOneToOneAssociation() @@ -51,7 +51,7 @@ public function testRemovesOneToOneAssociation() $this->_em->flush(); - $this->assertCartForeignKeyIs(null); + self::assertCartForeignKeyIs(null); } public function testEagerLoad() @@ -62,8 +62,8 @@ public function testEagerLoad() $result = $query->getResult(); $customer = $result[0]; - $this->assertInstanceOf(ECommerceCart::class, $customer->getCart()); - $this->assertEquals('paypal', $customer->getCart()->getPayment()); + self::assertInstanceOf(ECommerceCart::class, $customer->getCart()); + self::assertEquals('paypal', $customer->getCart()->getPayment()); } public function testLazyLoadsObjectsOnTheOwningSide() { @@ -75,8 +75,8 @@ public function testLazyLoadsObjectsOnTheOwningSide() { $result = $query->getResult(); $cart = $result[0]; - $this->assertInstanceOf(ECommerceCustomer::class, $cart->getCustomer()); - $this->assertEquals('Giorgio', $cart->getCustomer()->getName()); + self::assertInstanceOf(ECommerceCustomer::class, $cart->getCustomer()); + self::assertEquals('Giorgio', $cart->getCustomer()->getName()); } public function testInverseSideIsNeverLazy() @@ -89,10 +89,10 @@ public function testInverseSideIsNeverLazy() $result = $query->getResult(); $customer = $result[0]; - $this->assertNull($customer->getMentor()); - $this->assertInstanceOf(ECommerceCart::class, $customer->getCart()); - $this->assertNotInstanceOf(Proxy::class, $customer->getCart()); - $this->assertEquals('paypal', $customer->getCart()->getPayment()); + self::assertNull($customer->getMentor()); + self::assertInstanceOf(ECommerceCart::class, $customer->getCart()); + self::assertNotInstanceOf(Proxy::class, $customer->getCart()); + self::assertEquals('paypal', $customer->getCart()->getPayment()); } public function testUpdateWithProxyObject() @@ -107,9 +107,9 @@ public function testUpdateWithProxyObject() $this->_em->flush(); $this->_em->clear(); - $this->assertInstanceOf(ECommerceCart::class, $cust->getCart()); - $this->assertEquals('Roman', $cust->getName()); - $this->assertSame($cust, $cart->getCustomer()); + self::assertInstanceOf(ECommerceCart::class, $cust->getCart()); + self::assertEquals('Roman', $cust->getName()); + self::assertSame($cust, $cart->getCustomer()); $query = $this->_em->createQuery('select ca from Doctrine\Tests\Models\ECommerce\ECommerceCart ca where ca.id =?1'); $query->setParameter(1, $cart->getId()); @@ -126,8 +126,8 @@ public function testUpdateWithProxyObject() $cart3 = $query2->getSingleResult(); - $this->assertInstanceOf(ECommerceCustomer::class, $cart3->getCustomer()); - $this->assertEquals('Roman', $cart3->getCustomer()->getName()); + self::assertInstanceOf(ECommerceCustomer::class, $cart3->getCustomer()); + self::assertEquals('Roman', $cart3->getCustomer()->getName()); } protected function _createFixture() @@ -145,8 +145,7 @@ protected function _createFixture() } public function assertCartForeignKeyIs($value) { - $foreignKey = $this->_em->getConnection()->executeQuery('SELECT customer_id FROM ecommerce_carts WHERE id=?', [$this->cart->getId()] - )->fetchColumn(); - $this->assertEquals($value, $foreignKey); + $foreignKey = $this->_em->getConnection()->executeQuery('SELECT customer_id FROM ecommerce_carts WHERE id=?', [$this->cart->getId()])->fetchColumn(); + self::assertEquals($value, $foreignKey); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php index ac623482b1b..f7c78ca295a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php @@ -47,10 +47,10 @@ public function testEagerLoadOneToOneOwningSide() $sqlCount = count($this->_sqlLoggerStack->queries); $train = $this->_em->find(get_class($train), $train->id); - $this->assertNotInstanceOf(Proxy::class, $train->driver); - $this->assertEquals("Benjamin", $train->driver->name); + self::assertNotInstanceOf(Proxy::class, $train->driver); + self::assertEquals("Benjamin", $train->driver->name); - $this->assertEquals($sqlCount + 1, count($this->_sqlLoggerStack->queries)); + self::assertEquals($sqlCount + 1, count($this->_sqlLoggerStack->queries)); } /** @@ -67,10 +67,10 @@ public function testEagerLoadOneToOneNullOwningSide() $sqlCount = count($this->_sqlLoggerStack->queries); $train = $this->_em->find(get_class($train), $train->id); - $this->assertNotInstanceOf(Proxy::class, $train->driver); - $this->assertNull($train->driver); + self::assertNotInstanceOf(Proxy::class, $train->driver); + self::assertNull($train->driver); - $this->assertEquals($sqlCount + 1, count($this->_sqlLoggerStack->queries)); + self::assertEquals($sqlCount + 1, count($this->_sqlLoggerStack->queries)); } /** @@ -88,10 +88,10 @@ public function testEagerLoadOneToOneInverseSide() $sqlCount = count($this->_sqlLoggerStack->queries); $driver = $this->_em->find(get_class($owner), $owner->id); - $this->assertNotInstanceOf(Proxy::class, $owner->train); - $this->assertNotNull($owner->train); + self::assertNotInstanceOf(Proxy::class, $owner->train); + self::assertNotNull($owner->train); - $this->assertEquals($sqlCount + 1, count($this->_sqlLoggerStack->queries)); + self::assertEquals($sqlCount + 1, count($this->_sqlLoggerStack->queries)); } /** @@ -105,15 +105,15 @@ public function testEagerLoadOneToOneNullInverseSide() $this->_em->flush(); $this->_em->clear(); - $this->assertNull($driver->train); + self::assertNull($driver->train); $sqlCount = count($this->_sqlLoggerStack->queries); $driver = $this->_em->find(get_class($driver), $driver->id); - $this->assertNotInstanceOf(Proxy::class, $driver->train); - $this->assertNull($driver->train); + self::assertNotInstanceOf(Proxy::class, $driver->train); + self::assertNull($driver->train); - $this->assertEquals($sqlCount + 1, count($this->_sqlLoggerStack->queries)); + self::assertEquals($sqlCount + 1, count($this->_sqlLoggerStack->queries)); } public function testEagerLoadManyToOne() @@ -127,8 +127,8 @@ public function testEagerLoadManyToOne() $this->_em->clear(); $waggon = $this->_em->find(get_class($waggon), $waggon->id); - $this->assertNotInstanceOf(Proxy::class, $waggon->train); - $this->assertNotNull($waggon->train); + self::assertNotInstanceOf(Proxy::class, $waggon->train); + self::assertNotNull($waggon->train); } /** @@ -145,14 +145,14 @@ public function testEagerLoadWithNullableColumnsGeneratesLeftJoinOnBothSides() $this->_em->clear(); $train = $this->_em->find(get_class($train), $train->id); - $this->assertSQLEquals( + self::assertSQLEquals( "SELECT t0.id AS id_1, t0.driver_id AS driver_id_2, t4.id AS id_3, t4.name AS name_5, t0.owner_id AS owner_id_6, t8.id AS id_7, t8.name AS name_9 FROM Train t0 LEFT JOIN TrainDriver t4 ON t0.driver_id = t4.id INNER JOIN TrainOwner t8 ON t0.owner_id = t8.id WHERE t0.id = ?", $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery]['sql'] ); $this->_em->clear(); $driver = $this->_em->find(get_class($driver), $driver->id); - $this->assertSQLEquals( + self::assertSQLEquals( "SELECT t0.id AS id_1, t0.name AS name_2, t4.id AS id_3, t4.driver_id AS driver_id_5, t4.owner_id AS owner_id_6 FROM TrainOwner t0 LEFT JOIN Train t4 ON t4.owner_id = t0.id WHERE t0.id IN (?)", $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery]['sql'] ); @@ -176,13 +176,13 @@ public function testEagerLoadWithNonNullableColumnsGeneratesInnerJoinOnOwningSid $waggon = $this->_em->find(get_class($waggon), $waggon->id); // The last query is the eager loading of the owner of the train - $this->assertSQLEquals( + self::assertSQLEquals( "SELECT t0.id AS id_1, t0.name AS name_2, t4.id AS id_3, t4.driver_id AS driver_id_5, t4.owner_id AS owner_id_6 FROM TrainOwner t0 LEFT JOIN Train t4 ON t4.owner_id = t0.id WHERE t0.id IN (?)", $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery]['sql'] ); // The one before is the fetching of the waggon and train - $this->assertSQLEquals( + self::assertSQLEquals( "SELECT t0.id AS id_1, t0.train_id AS train_id_2, t4.id AS id_3, t4.driver_id AS driver_id_5, t4.owner_id AS owner_id_6 FROM Waggon t0 INNER JOIN Train t4 ON t0.train_id = t4.id WHERE t0.id = ?", $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery - 1]['sql'] ); @@ -200,7 +200,7 @@ public function testEagerLoadWithNonNullableColumnsGeneratesLeftJoinOnNonOwningS $this->_em->clear(); $waggon = $this->_em->find(get_class($owner), $owner->id); - $this->assertSQLEquals( + self::assertSQLEquals( "SELECT t0.id AS id_1, t0.name AS name_2, t4.id AS id_3, t4.driver_id AS driver_id_5, t4.owner_id AS owner_id_6 FROM TrainOwner t0 LEFT JOIN Train t4 ON t4.owner_id = t0.id WHERE t0.id = ?", $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery]['sql'] ); @@ -219,9 +219,9 @@ public function testEagerLoadingDoesNotBreakRefresh() $this->_em->getConnection()->exec("UPDATE TrainOrder SET train_id = NULL"); - $this->assertSame($train, $order->train); + self::assertSame($train, $order->train); $this->_em->refresh($order); - $this->assertTrue($order->train === null, "Train reference was not refreshed to NULL."); + self::assertTrue($order->train === null, "Train reference was not refreshed to NULL."); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneOrphanRemovalTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneOrphanRemovalTest.php index 09ef64e021f..b470cb77ec0 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneOrphanRemovalTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneOrphanRemovalTest.php @@ -49,12 +49,12 @@ public function testOrphanRemoval() $query = $this->_em->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u'); $result = $query->getResult(); - $this->assertEquals(0, count($result), 'CmsUser should be removed by EntityManager'); + self::assertEquals(0, count($result), 'CmsUser should be removed by EntityManager'); $query = $this->_em->createQuery('SELECT a FROM Doctrine\Tests\Models\CMS\CmsAddress a'); $result = $query->getResult(); - $this->assertEquals(0, count($result), 'CmsAddress should be removed by orphanRemoval'); + self::assertEquals(0, count($result), 'CmsAddress should be removed by orphanRemoval'); } public function testOrphanRemovalWhenUnlink() @@ -87,6 +87,6 @@ public function testOrphanRemovalWhenUnlink() $query = $this->_em->createQuery('SELECT e FROM Doctrine\Tests\Models\CMS\CmsEmail e'); $result = $query->getResult(); - $this->assertEquals(0, count($result), 'CmsEmail should be removed by orphanRemoval'); + self::assertEquals(0, count($result), 'CmsEmail should be removed by orphanRemoval'); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneSelfReferentialAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneSelfReferentialAssociationTest.php index 0011e8c8c40..f15196b6d22 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneSelfReferentialAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneSelfReferentialAssociationTest.php @@ -35,7 +35,7 @@ public function testSavesAOneToOneAssociationWithCascadeSaveSet() { $this->_em->persist($this->customer); $this->_em->flush(); - $this->assertForeignKeyIs($this->mentor->getId()); + self::assertForeignKeyIs($this->mentor->getId()); } public function testRemovesOneToOneAssociation() @@ -46,7 +46,7 @@ public function testRemovesOneToOneAssociation() $this->_em->flush(); - $this->assertForeignKeyIs(null); + self::assertForeignKeyIs(null); } public function testFind() @@ -54,7 +54,7 @@ public function testFind() $id = $this->_createFixture(); $customer = $this->_em->find(ECommerceCustomer::class, $id); - $this->assertNotInstanceOf(Proxy::class, $customer->getMentor()); + self::assertNotInstanceOf(Proxy::class, $customer->getMentor()); } public function testEagerLoadsAssociation() @@ -64,7 +64,7 @@ public function testEagerLoadsAssociation() $query = $this->_em->createQuery('select c, m from Doctrine\Tests\Models\ECommerce\ECommerceCustomer c left join c.mentor m order by c.id asc'); $result = $query->getResult(); $customer = $result[0]; - $this->assertLoadingOfAssociation($customer); + self::assertLoadingOfAssociation($customer); } /** @@ -81,7 +81,7 @@ public function testLazyLoadsAssociation() $query = $this->_em->createQuery("select c from Doctrine\Tests\Models\ECommerce\ECommerceCustomer c where c.name='Luke Skywalker'"); $result = $query->getResult(); $customer = $result[0]; - $this->assertLoadingOfAssociation($customer); + self::assertLoadingOfAssociation($customer); } public function testMultiSelfReference() @@ -106,24 +106,23 @@ public function testMultiSelfReference() $entity2 = $this->_em->find(get_class($entity1), $entity1->getId()); - $this->assertInstanceOf(MultiSelfReference::class, $entity2->getOther1()); - $this->assertInstanceOf(MultiSelfReference::class, $entity2->getOther2()); - $this->assertNull($entity2->getOther1()->getOther1()); - $this->assertNull($entity2->getOther1()->getOther2()); - $this->assertNull($entity2->getOther2()->getOther1()); - $this->assertNull($entity2->getOther2()->getOther2()); + self::assertInstanceOf(MultiSelfReference::class, $entity2->getOther1()); + self::assertInstanceOf(MultiSelfReference::class, $entity2->getOther2()); + self::assertNull($entity2->getOther1()->getOther1()); + self::assertNull($entity2->getOther1()->getOther2()); + self::assertNull($entity2->getOther2()->getOther1()); + self::assertNull($entity2->getOther2()->getOther2()); } public function assertLoadingOfAssociation($customer) { - $this->assertInstanceOf(ECommerceCustomer::class, $customer->getMentor()); - $this->assertEquals('Obi-wan Kenobi', $customer->getMentor()->getName()); + self::assertInstanceOf(ECommerceCustomer::class, $customer->getMentor()); + self::assertEquals('Obi-wan Kenobi', $customer->getMentor()->getName()); } public function assertForeignKeyIs($value) { - $foreignKey = $this->_em->getConnection()->executeQuery('SELECT mentor_id FROM ecommerce_customers WHERE id=?', [$this->customer->getId()] - )->fetchColumn(); - $this->assertEquals($value, $foreignKey); + $foreignKey = $this->_em->getConnection()->executeQuery('SELECT mentor_id FROM ecommerce_customers WHERE id=?', [$this->customer->getId()])->fetchColumn(); + self::assertEquals($value, $foreignKey); } private function _createFixture() diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneSingleTableInheritanceTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneSingleTableInheritanceTest.php index 3e9a291f00b..785c7c6a45b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneSingleTableInheritanceTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneSingleTableInheritanceTest.php @@ -40,9 +40,9 @@ public function testFindFromOneToOneOwningSideJoinedTableInheritance() /* @var $foundCat Cat */ $foundCat = $this->_em->find(Pet::class, $cat->id); - $this->assertInstanceOf(Cat::class, $foundCat); - $this->assertSame($cat->id, $foundCat->id); - $this->assertInstanceOf(LitterBox::class, $foundCat->litterBox); - $this->assertSame($cat->litterBox->id, $foundCat->litterBox->id); + self::assertInstanceOf(Cat::class, $foundCat); + self::assertSame($cat->id, $foundCat->id); + self::assertInstanceOf(LitterBox::class, $foundCat->litterBox); + self::assertSame($cat->litterBox->id, $foundCat->litterBox->id); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php index 797a38517d0..1e6a17d9e18 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php @@ -33,7 +33,7 @@ public function testSavesAOneToOneAssociationWithCascadeSaveSet() { $this->_em->persist($this->product); $this->_em->flush(); - $this->assertForeignKeyIs($this->shipping->getId()); + self::assertForeignKeyIs($this->shipping->getId()); } public function testRemovesOneToOneAssociation() @@ -44,7 +44,7 @@ public function testRemovesOneToOneAssociation() $this->_em->flush(); - $this->assertForeignKeyIs(null); + self::assertForeignKeyIs(null); } public function _testEagerLoad() @@ -55,8 +55,8 @@ public function _testEagerLoad() $result = $query->getResult(); $product = $result[0]; - $this->assertInstanceOf(ECommerceShipping::class, $product->getShipping()); - $this->assertEquals(1, $product->getShipping()->getDays()); + self::assertInstanceOf(ECommerceShipping::class, $product->getShipping()); + self::assertEquals(1, $product->getShipping()->getDays()); } public function testLazyLoadsObjects() { @@ -68,8 +68,8 @@ public function testLazyLoadsObjects() { $result = $query->getResult(); $product = $result[0]; - $this->assertInstanceOf(ECommerceShipping::class, $product->getShipping()); - $this->assertEquals(1, $product->getShipping()->getDays()); + self::assertInstanceOf(ECommerceShipping::class, $product->getShipping()); + self::assertEquals(1, $product->getShipping()->getDays()); } public function testDoesNotLazyLoadObjectsIfConfigurationDoesNotAllowIt() { @@ -81,7 +81,7 @@ public function testDoesNotLazyLoadObjectsIfConfigurationDoesNotAllowIt() { $result = $query->getResult(); $product = $result[0]; - $this->assertNull($product->getShipping()); + self::assertNull($product->getShipping()); } protected function _createFixture() @@ -103,7 +103,7 @@ public function assertForeignKeyIs($value) { 'SELECT shipping_id FROM ecommerce_products WHERE id=?', [$this->product->getId()] )->fetchColumn(); - $this->assertEquals($value, $foreignKey); + self::assertEquals($value, $foreignKey); } /** @@ -119,6 +119,6 @@ public function testNullForeignKey() $product = $this->_em->find(get_class($product), $product->getId()); - $this->assertNull($product->getShipping()); + self::assertNull($product->getShipping()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/OrderedCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/OrderedCollectionTest.php index aa4fb1da0f6..f8130e1fa53 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OrderedCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OrderedCollectionTest.php @@ -61,9 +61,9 @@ public function testLazyManyToManyCollection_IsRetrievedWithOrderByClause() $route = $this->_em->find(RoutingRoute::class, $routeId); - $this->assertEquals(2, count($route->legs)); - $this->assertEquals("Berlin", $route->legs[0]->fromLocation->getName()); - $this->assertEquals("Bonn", $route->legs[1]->fromLocation->getName()); + self::assertEquals(2, count($route->legs)); + self::assertEquals("Berlin", $route->legs[0]->fromLocation->getName()); + self::assertEquals("Bonn", $route->legs[1]->fromLocation->getName()); } public function testLazyOneToManyCollection_IsRetrievedWithOrderByClause() @@ -92,9 +92,9 @@ public function testLazyOneToManyCollection_IsRetrievedWithOrderByClause() $route = $this->_em->find(RoutingRoute::class, $routeId); - $this->assertEquals(2, count($route->bookings)); - $this->assertEquals('Benjamin', $route->bookings[0]->getPassengerName()); - $this->assertEquals('Guilherme', $route->bookings[1]->getPassengerName()); + self::assertEquals(2, count($route->bookings)); + self::assertEquals('Benjamin', $route->bookings[0]->getPassengerName()); + self::assertEquals('Guilherme', $route->bookings[1]->getPassengerName()); } public function testOrderedResultFromDqlQuery() @@ -105,8 +105,8 @@ public function testOrderedResultFromDqlQuery() ->setParameter(1, $routeId) ->getSingleResult(); - $this->assertEquals(2, count($route->legs)); - $this->assertEquals("Berlin", $route->legs[0]->fromLocation->getName()); - $this->assertEquals("Bonn", $route->legs[1]->fromLocation->getName()); + self::assertEquals(2, count($route->legs)); + self::assertEquals("Berlin", $route->legs[0]->fromLocation->getName()); + self::assertEquals("Bonn", $route->legs[1]->fromLocation->getName()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/OrderedJoinedTableInheritanceCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/OrderedJoinedTableInheritanceCollectionTest.php index 30531bae98d..491464b2017 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OrderedJoinedTableInheritanceCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OrderedJoinedTableInheritanceCollectionTest.php @@ -52,8 +52,8 @@ public function testOrderdOneToManyCollection() { $poofy = $this->_em->createQuery("SELECT p FROM Doctrine\Tests\ORM\Functional\OJTIC_Pet p WHERE p.name = 'Poofy'")->getSingleResult(); - $this->assertEquals('Aari', $poofy->children[0]->getName()); - $this->assertEquals('Zampa', $poofy->children[1]->getName()); + self::assertEquals('Aari', $poofy->children[0]->getName()); + self::assertEquals('Zampa', $poofy->children[1]->getName()); $this->_em->clear(); @@ -61,11 +61,11 @@ public function testOrderdOneToManyCollection() "SELECT p, c FROM Doctrine\Tests\ORM\Functional\OJTIC_Pet p JOIN p.children c WHERE p.name = 'Poofy'") ->getResult(); - $this->assertEquals(1, count($result)); + self::assertEquals(1, count($result)); $poofy = $result[0]; - $this->assertEquals('Aari', $poofy->children[0]->getName()); - $this->assertEquals('Zampa', $poofy->children[1]->getName()); + self::assertEquals('Aari', $poofy->children[0]->getName()); + self::assertEquals('Zampa', $poofy->children[1]->getName()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/PaginationTest.php b/tests/Doctrine/Tests/ORM/Functional/PaginationTest.php index 58a88dbd764..1c23641a8bb 100644 --- a/tests/Doctrine/Tests/ORM/Functional/PaginationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/PaginationTest.php @@ -40,7 +40,7 @@ public function testCountSimpleWithoutJoin($useOutputWalkers) $paginator = new Paginator($query); $paginator->setUseOutputWalkers($useOutputWalkers); - $this->assertCount(9, $paginator); + self::assertCount(9, $paginator); } /** @@ -53,7 +53,7 @@ public function testCountWithFetchJoin($useOutputWalkers) $paginator = new Paginator($query); $paginator->setUseOutputWalkers($useOutputWalkers); - $this->assertCount(9, $paginator); + self::assertCount(9, $paginator); } public function testCountComplexWithOutputWalker() @@ -63,7 +63,7 @@ public function testCountComplexWithOutputWalker() $paginator = new Paginator($query); $paginator->setUseOutputWalkers(true); - $this->assertCount(3, $paginator); + self::assertCount(3, $paginator); } public function testCountComplexWithoutOutputWalker() @@ -77,7 +77,7 @@ public function testCountComplexWithoutOutputWalker() $this->expectException(\RuntimeException::class); $this->expectExceptionMessage('Cannot count query that uses a HAVING clause. Use the output walkers for pagination'); - $this->assertCount(3, $paginator); + self::assertCount(3, $paginator); } /** @@ -90,7 +90,7 @@ public function testCountWithComplexScalarOrderBy($useOutputWalkers) $paginator = new Paginator($query); $paginator->setUseOutputWalkers($useOutputWalkers); - $this->assertCount(9, $paginator); + self::assertCount(9, $paginator); } /** @@ -103,19 +103,19 @@ public function testIterateSimpleWithoutJoin($useOutputWalkers, $fetchJoinCollec $paginator = new Paginator($query, $fetchJoinCollection); $paginator->setUseOutputWalkers($useOutputWalkers); - $this->assertCount(9, $paginator->getIterator()); + self::assertCount(9, $paginator->getIterator()); // Test with limit $query->setMaxResults(3); $paginator = new Paginator($query, $fetchJoinCollection); $paginator->setUseOutputWalkers($useOutputWalkers); - $this->assertCount(3, $paginator->getIterator()); + self::assertCount(3, $paginator->getIterator()); // Test with limit and offset $query->setMaxResults(3)->setFirstResult(4); $paginator = new Paginator($query, $fetchJoinCollection); $paginator->setUseOutputWalkers($useOutputWalkers); - $this->assertCount(3, $paginator->getIterator()); + self::assertCount(3, $paginator->getIterator()); } private function iterateWithOrderAsc($useOutputWalkers, $fetchJoinCollection, $baseDql, $checkField) @@ -127,9 +127,9 @@ private function iterateWithOrderAsc($useOutputWalkers, $fetchJoinCollection, $b $paginator = new Paginator($query, $fetchJoinCollection); $paginator->setUseOutputWalkers($useOutputWalkers); $iter = $paginator->getIterator(); - $this->assertCount(9, $iter); + self::assertCount(9, $iter); $result = iterator_to_array($iter); - $this->assertEquals($checkField . "0", $result[0]->$checkField); + self::assertEquals($checkField . "0", $result[0]->$checkField); } private function iterateWithOrderAscWithLimit($useOutputWalkers, $fetchJoinCollection, $baseDql, $checkField) @@ -143,9 +143,9 @@ private function iterateWithOrderAscWithLimit($useOutputWalkers, $fetchJoinColle $paginator = new Paginator($query, $fetchJoinCollection); $paginator->setUseOutputWalkers($useOutputWalkers); $iter = $paginator->getIterator(); - $this->assertCount(3, $iter); + self::assertCount(3, $iter); $result = iterator_to_array($iter); - $this->assertEquals($checkField . "0", $result[0]->$checkField); + self::assertEquals($checkField . "0", $result[0]->$checkField); } private function iterateWithOrderAscWithLimitAndOffset($useOutputWalkers, $fetchJoinCollection, $baseDql, $checkField) @@ -159,9 +159,9 @@ private function iterateWithOrderAscWithLimitAndOffset($useOutputWalkers, $fetch $paginator = new Paginator($query, $fetchJoinCollection); $paginator->setUseOutputWalkers($useOutputWalkers); $iter = $paginator->getIterator(); - $this->assertCount(3, $iter); + self::assertCount(3, $iter); $result = iterator_to_array($iter); - $this->assertEquals($checkField . "3", $result[0]->$checkField); + self::assertEquals($checkField . "3", $result[0]->$checkField); } private function iterateWithOrderDesc($useOutputWalkers, $fetchJoinCollection, $baseDql, $checkField) @@ -172,9 +172,9 @@ private function iterateWithOrderDesc($useOutputWalkers, $fetchJoinCollection, $ $paginator = new Paginator($query, $fetchJoinCollection); $paginator->setUseOutputWalkers($useOutputWalkers); $iter = $paginator->getIterator(); - $this->assertCount(9, $iter); + self::assertCount(9, $iter); $result = iterator_to_array($iter); - $this->assertEquals($checkField . "8", $result[0]->$checkField); + self::assertEquals($checkField . "8", $result[0]->$checkField); } private function iterateWithOrderDescWithLimit($useOutputWalkers, $fetchJoinCollection, $baseDql, $checkField) @@ -187,9 +187,9 @@ private function iterateWithOrderDescWithLimit($useOutputWalkers, $fetchJoinColl $paginator = new Paginator($query, $fetchJoinCollection); $paginator->setUseOutputWalkers($useOutputWalkers); $iter = $paginator->getIterator(); - $this->assertCount(3, $iter); + self::assertCount(3, $iter); $result = iterator_to_array($iter); - $this->assertEquals($checkField . "8", $result[0]->$checkField); + self::assertEquals($checkField . "8", $result[0]->$checkField); } private function iterateWithOrderDescWithLimitAndOffset($useOutputWalkers, $fetchJoinCollection, $baseDql, $checkField) @@ -202,9 +202,9 @@ private function iterateWithOrderDescWithLimitAndOffset($useOutputWalkers, $fetc $paginator = new Paginator($query, $fetchJoinCollection); $paginator->setUseOutputWalkers($useOutputWalkers); $iter = $paginator->getIterator(); - $this->assertCount(3, $iter); + self::assertCount(3, $iter); $result = iterator_to_array($iter); - $this->assertEquals($checkField . "5", $result[0]->$checkField); + self::assertEquals($checkField . "5", $result[0]->$checkField); } /** @@ -283,7 +283,7 @@ public function testIterateWithFetchJoin($useOutputWalkers) $paginator = new Paginator($query, true); $paginator->setUseOutputWalkers($useOutputWalkers); - $this->assertCount(9, $paginator->getIterator()); + self::assertCount(9, $paginator->getIterator()); } /** @@ -459,7 +459,7 @@ public function testIterateComplexWithOutputWalker() $paginator = new Paginator($query); $paginator->setUseOutputWalkers(true); - $this->assertCount(3, $paginator->getIterator()); + self::assertCount(3, $paginator->getIterator()); } public function testJoinedClassTableInheritance() @@ -468,7 +468,7 @@ public function testJoinedClassTableInheritance() $query = $this->_em->createQuery($dql); $paginator = new Paginator($query); - $this->assertCount(1, $paginator->getIterator()); + self::assertCount(1, $paginator->getIterator()); } /** @@ -569,7 +569,7 @@ public function testCountWithCountSubqueryInWhereClauseWithOutputWalker() $paginator = new Paginator($query, true); $paginator->setUseOutputWalkers(true); - $this->assertCount(9, $paginator); + self::assertCount(9, $paginator); } public function testIterateWithCountSubqueryInWhereClause() @@ -581,9 +581,9 @@ public function testIterateWithCountSubqueryInWhereClause() $paginator->setUseOutputWalkers(true); $users = iterator_to_array($paginator->getIterator()); - $this->assertCount(9, $users); + self::assertCount(9, $users); foreach ($users as $i => $user) { - $this->assertEquals("username" . (8 - $i), $user->username); + self::assertEquals("username" . (8 - $i), $user->username); } } @@ -615,7 +615,7 @@ public function testPaginationWithColumnAttributeNameDifference() $paginator = new Paginator($query); $paginator->getIterator(); - $this->assertCount(9, $paginator->getIterator()); + self::assertCount(9, $paginator->getIterator()); } public function testCloneQuery() @@ -626,7 +626,7 @@ public function testCloneQuery() $paginator = new Paginator($query); $paginator->getIterator(); - $this->assertTrue($query->getParameters()->isEmpty()); + self::assertTrue($query->getParameters()->isEmpty()); } public function testQueryWalkerIsKept() @@ -637,8 +637,8 @@ public function testQueryWalkerIsKept() $paginator = new Paginator($query, true); $paginator->setUseOutputWalkers(false); - $this->assertCount(1, $paginator->getIterator()); - $this->assertEquals(1, $paginator->count()); + self::assertCount(1, $paginator->getIterator()); + self::assertEquals(1, $paginator->count()); } public function testCountQueryStripsParametersInSelect() @@ -658,8 +658,8 @@ public function testCountQueryStripsParametersInSelect() $getCountQuery->setAccessible(true); - $this->assertCount(2, $getCountQuery->invoke($paginator)->getParameters()); - $this->assertCount(9, $paginator); + self::assertCount(2, $getCountQuery->invoke($paginator)->getParameters()); + self::assertCount(9, $paginator); $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, Query\SqlWalker::class); @@ -667,8 +667,8 @@ public function testCountQueryStripsParametersInSelect() // if select part of query is replaced with count(...) paginator should remove // parameters from query object not used in new query. - $this->assertCount(1, $getCountQuery->invoke($paginator)->getParameters()); - $this->assertCount(9, $paginator); + self::assertCount(1, $getCountQuery->invoke($paginator)->getParameters()); + self::assertCount(9, $paginator); } /** @@ -690,7 +690,7 @@ public function testPaginationWithSubSelectOrderByExpression($useOutputWalker, $ $paginator = new Paginator($query, $fetchJoinCollection); $paginator->setUseOutputWalkers($useOutputWalker); - $this->assertCount(9, $paginator->getIterator()); + self::assertCount(9, $paginator->getIterator()); } public function populate() diff --git a/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionCriteriaTest.php b/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionCriteriaTest.php index 4e0f442d84a..d0add27cbcf 100644 --- a/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionCriteriaTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionCriteriaTest.php @@ -80,19 +80,19 @@ public function testCanCountWithoutLoadingPersistentCollection() $user = $repository->findOneBy(['name' => 'ngal']); $tweets = $user->tweets->matching(new Criteria()); - $this->assertInstanceOf(LazyCriteriaCollection::class, $tweets); - $this->assertFalse($tweets->isInitialized()); - $this->assertCount(2, $tweets); - $this->assertFalse($tweets->isInitialized()); + self::assertInstanceOf(LazyCriteriaCollection::class, $tweets); + self::assertFalse($tweets->isInitialized()); + self::assertCount(2, $tweets); + self::assertFalse($tweets->isInitialized()); // Make sure it works with constraints $tweets = $user->tweets->matching(new Criteria( Criteria::expr()->eq('content', 'Foo') )); - $this->assertInstanceOf(LazyCriteriaCollection::class, $tweets); - $this->assertFalse($tweets->isInitialized()); - $this->assertCount(1, $tweets); - $this->assertFalse($tweets->isInitialized()); + self::assertInstanceOf(LazyCriteriaCollection::class, $tweets); + self::assertFalse($tweets->isInitialized()); + self::assertCount(1, $tweets); + self::assertFalse($tweets->isInitialized()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionTest.php index b1751455f34..e4537695a8c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionTest.php @@ -41,7 +41,7 @@ public function testPersist() $content = new PersistentCollectionContent('second element'); $collectionHolder->addElement($content); - $this->assertEquals(2, $collectionHolder->getCollection()->count()); + self::assertEquals(2, $collectionHolder->getCollection()->count()); } /** @@ -58,8 +58,8 @@ public function testExtraLazyIsEmptyDoesNotInitializeCollection() $collectionHolder = $this->_em->find(PersistentCollectionHolder::class, $collectionHolder->getId()); $collection = $collectionHolder->getRawCollection(); - $this->assertTrue($collection->isEmpty()); - $this->assertFalse($collection->isInitialized()); + self::assertTrue($collection->isEmpty()); + self::assertFalse($collection->isInitialized()); $collectionHolder->addElement(new PersistentCollectionContent()); @@ -69,8 +69,8 @@ public function testExtraLazyIsEmptyDoesNotInitializeCollection() $collectionHolder = $this->_em->find(PersistentCollectionHolder::class, $collectionHolder->getId()); $collection = $collectionHolder->getRawCollection(); - $this->assertFalse($collection->isEmpty()); - $this->assertFalse($collection->isInitialized()); + self::assertFalse($collection->isEmpty()); + self::assertFalse($collection->isInitialized()); } /** @@ -90,10 +90,10 @@ public function testMatchingDoesNotModifyTheGivenCriteria() $collectionHolder = $this->_em->find(PersistentCollectionHolder::class, $collectionHolder->getId()); $collectionHolder->getCollection()->matching($criteria); - $this->assertEmpty($criteria->getWhereExpression()); - $this->assertEmpty($criteria->getFirstResult()); - $this->assertEmpty($criteria->getMaxResults()); - $this->assertEmpty($criteria->getOrderings()); + self::assertEmpty($criteria->getWhereExpression()); + self::assertEmpty($criteria->getFirstResult()); + self::assertEmpty($criteria->getMaxResults()); + self::assertEmpty($criteria->getOrderings()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/PersistentObjectTest.php b/tests/Doctrine/Tests/ORM/Functional/PersistentObjectTest.php index 0fd2b47455c..16e284732cc 100644 --- a/tests/Doctrine/Tests/ORM/Functional/PersistentObjectTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/PersistentObjectTest.php @@ -51,7 +51,7 @@ public function testFind() $entity = $this->_em->find(PersistentEntity::class, $entity->getId()); - $this->assertEquals('test', $entity->getName()); + self::assertEquals('test', $entity->getName()); $entity->setName('foobar'); $this->_em->flush(); @@ -68,7 +68,7 @@ public function testGetReference() $entity = $this->_em->getReference(PersistentEntity::class, $entity->getId()); - $this->assertEquals('test', $entity->getName()); + self::assertEquals('test', $entity->getName()); } public function testSetAssociation() @@ -82,7 +82,7 @@ public function testSetAssociation() $this->_em->clear(); $entity = $this->_em->getReference(PersistentEntity::class, $entity->getId()); - $this->assertSame($entity, $entity->getParent()); + self::assertSame($entity, $entity->getParent()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/PostFlushEventTest.php b/tests/Doctrine/Tests/ORM/Functional/PostFlushEventTest.php index 12e2c40809d..e58bd129b45 100644 --- a/tests/Doctrine/Tests/ORM/Functional/PostFlushEventTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/PostFlushEventTest.php @@ -32,7 +32,7 @@ public function testListenerShouldBeNotified() { $this->_em->persist($this->createNewValidUser()); $this->_em->flush(); - $this->assertTrue($this->listener->wasNotified); + self::assertTrue($this->listener->wasNotified); } public function testListenerShouldNotBeNotifiedWhenFlushThrowsException() @@ -48,8 +48,8 @@ public function testListenerShouldNotBeNotifiedWhenFlushThrowsException() $exceptionRaised = true; } - $this->assertTrue($exceptionRaised); - $this->assertFalse($this->listener->wasNotified); + self::assertTrue($exceptionRaised); + self::assertFalse($this->listener->wasNotified); } public function testListenerShouldReceiveEntityManagerThroughArgs() @@ -57,7 +57,7 @@ public function testListenerShouldReceiveEntityManagerThroughArgs() $this->_em->persist($this->createNewValidUser()); $this->_em->flush(); $receivedEm = $this->listener->receivedArgs->getEntityManager(); - $this->assertSame($this->_em, $receivedEm); + self::assertSame($this->_em, $receivedEm); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/PostLoadEventTest.php b/tests/Doctrine/Tests/ORM/Functional/PostLoadEventTest.php index 02a08666673..bd3228e05e5 100644 --- a/tests/Doctrine/Tests/ORM/Functional/PostLoadEventTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/PostLoadEventTest.php @@ -218,8 +218,8 @@ public function testAssociationsArePopulatedWhenEventIsFired() $qb->addSelect('email'); $qb->getQuery()->getSingleResult(); - $this->assertTrue($checkerListener->checked, 'postLoad event is not invoked'); - $this->assertTrue($checkerListener->populated, 'Association of email is not populated in postLoad event'); + self::assertTrue($checkerListener->checked, 'postLoad event is not invoked'); + self::assertTrue($checkerListener->populated, 'Association of email is not populated in postLoad event'); } /** @@ -232,8 +232,8 @@ public function testEventRaisedCorrectTimesWhenOtherEntityLoadedInEventHandler() $eventManager->addEventListener([Events::postLoad], $listener); $this->_em->find(CmsUser::class, $this->userId); - $this->assertSame(1, $listener->countHandledEvents(CmsUser::class), CmsUser::class . ' should be handled once!'); - $this->assertSame(1, $listener->countHandledEvents(CmsEmail::class), CmsEmail::class . ' should be handled once!'); + self::assertSame(1, $listener->countHandledEvents(CmsUser::class), CmsUser::class . ' should be handled once!'); + self::assertSame(1, $listener->countHandledEvents(CmsEmail::class), CmsEmail::class . ' should be handled once!'); } private function loadFixture() diff --git a/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php b/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php index c88eff4ab70..8532e00b56b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php @@ -65,12 +65,12 @@ public function testPersistUpdate() $proxy->name = 'Marco'; $this->_em->persist($proxy); $this->_em->flush(); - $this->assertNotNull($proxy->getId()); + self::assertNotNull($proxy->getId()); $proxy->name = 'Marco Pivetta'; $this->_em->getUnitOfWork() ->computeChangeSet($this->_em->getClassMetadata(CmsUser::class), $proxy); - $this->assertNotEmpty($this->_em->getUnitOfWork()->getEntityChangeSet($proxy)); - $this->assertEquals('Marco Pivetta', $this->_em->find(CmsUser::class, $proxy->getId())->name); + self::assertNotEmpty($this->_em->getUnitOfWork()->getEntityChangeSet($proxy)); + self::assertEquals('Marco Pivetta', $this->_em->find(CmsUser::class, $proxy->getId())->name); $this->_em->remove($proxy); $this->_em->flush(); } @@ -80,12 +80,12 @@ public function testEntityWithIdentifier() $userId = $this->user->getId(); /* @var $uninitializedProxy CmsUserProxy */ $uninitializedProxy = $this->_em->getReference(CmsUser::class, $userId); - $this->assertInstanceOf(CmsUserProxy::class, $uninitializedProxy); + self::assertInstanceOf(CmsUserProxy::class, $uninitializedProxy); $this->_em->persist($uninitializedProxy); $this->_em->flush($uninitializedProxy); - $this->assertFalse($uninitializedProxy->__isInitialized(), 'Proxy didn\'t get initialized during flush operations'); - $this->assertEquals($userId, $uninitializedProxy->getId()); + self::assertFalse($uninitializedProxy->__isInitialized(), 'Proxy didn\'t get initialized during flush operations'); + self::assertEquals($userId, $uninitializedProxy->getId()); $this->_em->remove($uninitializedProxy); $this->_em->flush(); } @@ -103,7 +103,7 @@ public function testProxyAsDqlParameterPersist() ->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u = ?1') ->setParameter(1, $proxy) ->getSingleResult(); - $this->assertSame($this->user->getId(), $result->getId()); + self::assertSame($this->user->getId(), $result->getId()); $this->_em->remove($proxy); $this->_em->flush(); } @@ -114,23 +114,22 @@ public function testProxyAsDqlParameterPersist() public function testFindWithProxyName() { $result = $this->_em->find(CmsUserProxy::class, $this->user->getId()); - $this->assertSame($this->user->getId(), $result->getId()); + self::assertSame($this->user->getId(), $result->getId()); $this->_em->clear(); $result = $this->_em->getReference(CmsUserProxy::class, $this->user->getId()); - $this->assertSame($this->user->getId(), $result->getId()); + self::assertSame($this->user->getId(), $result->getId()); $this->_em->clear(); $result = $this->_em->getRepository(CmsUserProxy::class)->findOneBy(['username' => $this->user->username]); - $this->assertSame($this->user->getId(), $result->getId()); + self::assertSame($this->user->getId(), $result->getId()); $this->_em->clear(); $result = $this->_em ->createQuery('SELECT u FROM Doctrine\Tests\Proxies\__CG__\Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1') ->setParameter(1, $this->user->getId()) ->getSingleResult(); - - $this->assertSame($this->user->getId(), $result->getId()); + self::assertSame($this->user->getId(), $result->getId()); $this->_em->clear(); } diff --git a/tests/Doctrine/Tests/ORM/Functional/QueryCacheTest.php b/tests/Doctrine/Tests/ORM/Functional/QueryCacheTest.php index a307ad13786..596c58028ac 100644 --- a/tests/Doctrine/Tests/ORM/Functional/QueryCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/QueryCacheTest.php @@ -49,12 +49,12 @@ public function testQueryCache_DependsOnHints() $query->setQueryCacheDriver($cache); $query->getResult(); - $this->assertEquals(1, $this->getCacheSize($cache)); + self::assertEquals(1, $this->getCacheSize($cache)); $query->setHint('foo', 'bar'); $query->getResult(); - $this->assertEquals(2, $this->getCacheSize($cache)); + self::assertEquals(2, $this->getCacheSize($cache)); return $query; } @@ -72,7 +72,7 @@ public function testQueryCache_DependsOnFirstResult($query) $query->setMaxResults(9999); $query->getResult(); - $this->assertEquals($cacheCount + 1, $this->getCacheSize($cache)); + self::assertEquals($cacheCount + 1, $this->getCacheSize($cache)); } /** @@ -87,7 +87,7 @@ public function testQueryCache_DependsOnMaxResults($query) $query->setMaxResults(10); $query->getResult(); - $this->assertEquals($cacheCount + 1, $this->getCacheSize($cache)); + self::assertEquals($cacheCount + 1, $this->getCacheSize($cache)); } /** @@ -100,7 +100,7 @@ public function testQueryCache_DependsOnHydrationMode($query) $cacheCount = $this->getCacheSize($cache); $query->getArrayResult(); - $this->assertEquals($cacheCount + 1, $this->getCacheSize($cache)); + self::assertEquals($cacheCount + 1, $this->getCacheSize($cache)); } public function testQueryCache_NoHitSaveParserResult() diff --git a/tests/Doctrine/Tests/ORM/Functional/QueryDqlFunctionTest.php b/tests/Doctrine/Tests/ORM/Functional/QueryDqlFunctionTest.php index 764b213dde2..b7f4fe0484c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/QueryDqlFunctionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/QueryDqlFunctionTest.php @@ -25,7 +25,7 @@ public function testAggregateSum() $salarySum = $this->_em->createQuery('SELECT SUM(m.salary) AS salary FROM Doctrine\Tests\Models\Company\CompanyManager m') ->getSingleResult(); - $this->assertEquals(1500000, $salarySum['salary']); + self::assertEquals(1500000, $salarySum['salary']); } public function testAggregateAvg() @@ -33,7 +33,7 @@ public function testAggregateAvg() $salaryAvg = $this->_em->createQuery('SELECT AVG(m.salary) AS salary FROM Doctrine\Tests\Models\Company\CompanyManager m') ->getSingleResult(); - $this->assertEquals(375000, round($salaryAvg['salary'], 0)); + self::assertEquals(375000, round($salaryAvg['salary'], 0)); } public function testAggregateMin() @@ -41,7 +41,7 @@ public function testAggregateMin() $salary = $this->_em->createQuery('SELECT MIN(m.salary) AS salary FROM Doctrine\Tests\Models\Company\CompanyManager m') ->getSingleResult(); - $this->assertEquals(100000, $salary['salary']); + self::assertEquals(100000, $salary['salary']); } public function testAggregateMax() @@ -49,7 +49,7 @@ public function testAggregateMax() $salary = $this->_em->createQuery('SELECT MAX(m.salary) AS salary FROM Doctrine\Tests\Models\Company\CompanyManager m') ->getSingleResult(); - $this->assertEquals(800000, $salary['salary']); + self::assertEquals(800000, $salary['salary']); } public function testAggregateCount() @@ -57,7 +57,7 @@ public function testAggregateCount() $managerCount = $this->_em->createQuery('SELECT COUNT(m.id) AS managers FROM Doctrine\Tests\Models\Company\CompanyManager m') ->getSingleResult(); - $this->assertEquals(4, $managerCount['managers']); + self::assertEquals(4, $managerCount['managers']); } public function testFunctionAbs() @@ -65,11 +65,11 @@ public function testFunctionAbs() $result = $this->_em->createQuery('SELECT m, ABS(m.salary * -1) AS abs FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') ->getResult(); - $this->assertEquals(4, count($result)); - $this->assertEquals(100000, $result[0]['abs']); - $this->assertEquals(200000, $result[1]['abs']); - $this->assertEquals(400000, $result[2]['abs']); - $this->assertEquals(800000, $result[3]['abs']); + self::assertEquals(4, count($result)); + self::assertEquals(100000, $result[0]['abs']); + self::assertEquals(200000, $result[1]['abs']); + self::assertEquals(400000, $result[2]['abs']); + self::assertEquals(800000, $result[3]['abs']); } public function testFunctionConcat() @@ -77,11 +77,11 @@ public function testFunctionConcat() $arg = $this->_em->createQuery('SELECT m, CONCAT(m.name, m.department) AS namedep FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') ->getArrayResult(); - $this->assertEquals(4, count($arg)); - $this->assertEquals('Roman B.IT', $arg[0]['namedep']); - $this->assertEquals('Benjamin E.HR', $arg[1]['namedep']); - $this->assertEquals('Guilherme B.Complaint Department', $arg[2]['namedep']); - $this->assertEquals('Jonathan W.Administration', $arg[3]['namedep']); + self::assertEquals(4, count($arg)); + self::assertEquals('Roman B.IT', $arg[0]['namedep']); + self::assertEquals('Benjamin E.HR', $arg[1]['namedep']); + self::assertEquals('Guilherme B.Complaint Department', $arg[2]['namedep']); + self::assertEquals('Jonathan W.Administration', $arg[3]['namedep']); } public function testFunctionLength() @@ -89,11 +89,11 @@ public function testFunctionLength() $result = $this->_em->createQuery('SELECT m, LENGTH(CONCAT(m.name, m.department)) AS namedeplength FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') ->getArrayResult(); - $this->assertEquals(4, count($result)); - $this->assertEquals(10, $result[0]['namedeplength']); - $this->assertEquals(13, $result[1]['namedeplength']); - $this->assertEquals(32, $result[2]['namedeplength']); - $this->assertEquals(25, $result[3]['namedeplength']); + self::assertEquals(4, count($result)); + self::assertEquals(10, $result[0]['namedeplength']); + self::assertEquals(13, $result[1]['namedeplength']); + self::assertEquals(32, $result[2]['namedeplength']); + self::assertEquals(25, $result[3]['namedeplength']); } public function testFunctionLocate() @@ -104,15 +104,15 @@ public function testFunctionLocate() $result = $this->_em->createQuery($dql) ->getArrayResult(); - $this->assertEquals(4, count($result)); - $this->assertEquals(0, $result[0]['loc']); - $this->assertEquals(2, $result[1]['loc']); - $this->assertEquals(6, $result[2]['loc']); - $this->assertEquals(0, $result[3]['loc']); - $this->assertEquals(0, $result[0]['loc2']); - $this->assertEquals(10, $result[1]['loc2']); - $this->assertEquals(9, $result[2]['loc2']); - $this->assertEquals(0, $result[3]['loc2']); + self::assertEquals(4, count($result)); + self::assertEquals(0, $result[0]['loc']); + self::assertEquals(2, $result[1]['loc']); + self::assertEquals(6, $result[2]['loc']); + self::assertEquals(0, $result[3]['loc']); + self::assertEquals(0, $result[0]['loc2']); + self::assertEquals(10, $result[1]['loc2']); + self::assertEquals(9, $result[2]['loc2']); + self::assertEquals(0, $result[3]['loc2']); } public function testFunctionLower() @@ -120,11 +120,11 @@ public function testFunctionLower() $result = $this->_em->createQuery("SELECT m, LOWER(m.name) AS lowername FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC") ->getArrayResult(); - $this->assertEquals(4, count($result)); - $this->assertEquals('roman b.', $result[0]['lowername']); - $this->assertEquals('benjamin e.', $result[1]['lowername']); - $this->assertEquals('guilherme b.', $result[2]['lowername']); - $this->assertEquals('jonathan w.', $result[3]['lowername']); + self::assertEquals(4, count($result)); + self::assertEquals('roman b.', $result[0]['lowername']); + self::assertEquals('benjamin e.', $result[1]['lowername']); + self::assertEquals('guilherme b.', $result[2]['lowername']); + self::assertEquals('jonathan w.', $result[3]['lowername']); } public function testFunctionMod() @@ -132,11 +132,11 @@ public function testFunctionMod() $result = $this->_em->createQuery("SELECT m, MOD(m.salary, 3500) AS amod FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC") ->getArrayResult(); - $this->assertEquals(4, count($result)); - $this->assertEquals(2000, $result[0]['amod']); - $this->assertEquals(500, $result[1]['amod']); - $this->assertEquals(1000, $result[2]['amod']); - $this->assertEquals(2000, $result[3]['amod']); + self::assertEquals(4, count($result)); + self::assertEquals(2000, $result[0]['amod']); + self::assertEquals(500, $result[1]['amod']); + self::assertEquals(1000, $result[2]['amod']); + self::assertEquals(2000, $result[3]['amod']); } public function testFunctionSqrt() @@ -144,11 +144,11 @@ public function testFunctionSqrt() $result = $this->_em->createQuery("SELECT m, SQRT(m.salary) AS sqrtsalary FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC") ->getArrayResult(); - $this->assertEquals(4, count($result)); - $this->assertEquals(316, round($result[0]['sqrtsalary'])); - $this->assertEquals(447, round($result[1]['sqrtsalary'])); - $this->assertEquals(632, round($result[2]['sqrtsalary'])); - $this->assertEquals(894, round($result[3]['sqrtsalary'])); + self::assertEquals(4, count($result)); + self::assertEquals(316, round($result[0]['sqrtsalary'])); + self::assertEquals(447, round($result[1]['sqrtsalary'])); + self::assertEquals(632, round($result[2]['sqrtsalary'])); + self::assertEquals(894, round($result[3]['sqrtsalary'])); } public function testFunctionUpper() @@ -156,11 +156,11 @@ public function testFunctionUpper() $result = $this->_em->createQuery("SELECT m, UPPER(m.name) AS uppername FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC") ->getArrayResult(); - $this->assertEquals(4, count($result)); - $this->assertEquals('ROMAN B.', $result[0]['uppername']); - $this->assertEquals('BENJAMIN E.', $result[1]['uppername']); - $this->assertEquals('GUILHERME B.', $result[2]['uppername']); - $this->assertEquals('JONATHAN W.', $result[3]['uppername']); + self::assertEquals(4, count($result)); + self::assertEquals('ROMAN B.', $result[0]['uppername']); + self::assertEquals('BENJAMIN E.', $result[1]['uppername']); + self::assertEquals('GUILHERME B.', $result[2]['uppername']); + self::assertEquals('JONATHAN W.', $result[3]['uppername']); } public function testFunctionSubstring() @@ -171,16 +171,16 @@ public function testFunctionSubstring() $result = $this->_em->createQuery($dql) ->getArrayResult(); - $this->assertEquals(4, count($result)); - $this->assertEquals('Ben', $result[0]['str1']); - $this->assertEquals('Gui', $result[1]['str1']); - $this->assertEquals('Jon', $result[2]['str1']); - $this->assertEquals('Rom', $result[3]['str1']); + self::assertEquals(4, count($result)); + self::assertEquals('Ben', $result[0]['str1']); + self::assertEquals('Gui', $result[1]['str1']); + self::assertEquals('Jon', $result[2]['str1']); + self::assertEquals('Rom', $result[3]['str1']); - $this->assertEquals('amin E.', $result[0]['str2']); - $this->assertEquals('herme B.', $result[1]['str2']); - $this->assertEquals('than W.', $result[2]['str2']); - $this->assertEquals('n B.', $result[3]['str2']); + self::assertEquals('amin E.', $result[0]['str2']); + self::assertEquals('herme B.', $result[1]['str2']); + self::assertEquals('than W.', $result[2]['str2']); + self::assertEquals('n B.', $result[3]['str2']); } public function testFunctionTrim() @@ -191,19 +191,19 @@ public function testFunctionTrim() $result = $this->_em->createQuery($dql)->getArrayResult(); - $this->assertEquals(4, count($result)); - $this->assertEquals('Roman B', $result[0]['str1']); - $this->assertEquals('Benjamin E', $result[1]['str1']); - $this->assertEquals('Guilherme B', $result[2]['str1']); - $this->assertEquals('Jonathan W', $result[3]['str1']); - $this->assertEquals('Roman B.', $result[0]['str2']); - $this->assertEquals('Benjamin E.', $result[1]['str2']); - $this->assertEquals('Guilherme B.', $result[2]['str2']); - $this->assertEquals('Jonathan W.', $result[3]['str2']); - $this->assertEquals('Roman B.', $result[0]['str3']); - $this->assertEquals('Benjamin E.', $result[1]['str3']); - $this->assertEquals('Guilherme B.', $result[2]['str3']); - $this->assertEquals('Jonathan W.', $result[3]['str3']); + self::assertEquals(4, count($result)); + self::assertEquals('Roman B', $result[0]['str1']); + self::assertEquals('Benjamin E', $result[1]['str1']); + self::assertEquals('Guilherme B', $result[2]['str1']); + self::assertEquals('Jonathan W', $result[3]['str1']); + self::assertEquals('Roman B.', $result[0]['str2']); + self::assertEquals('Benjamin E.', $result[1]['str2']); + self::assertEquals('Guilherme B.', $result[2]['str2']); + self::assertEquals('Jonathan W.', $result[3]['str2']); + self::assertEquals('Roman B.', $result[0]['str3']); + self::assertEquals('Benjamin E.', $result[1]['str3']); + self::assertEquals('Guilherme B.', $result[2]['str3']); + self::assertEquals('Jonathan W.', $result[3]['str3']); } public function testOperatorAdd() @@ -211,11 +211,11 @@ public function testOperatorAdd() $result = $this->_em->createQuery('SELECT m, m.salary+2500 AS add FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') ->getResult(); - $this->assertEquals(4, count($result)); - $this->assertEquals(102500, $result[0]['add']); - $this->assertEquals(202500, $result[1]['add']); - $this->assertEquals(402500, $result[2]['add']); - $this->assertEquals(802500, $result[3]['add']); + self::assertEquals(4, count($result)); + self::assertEquals(102500, $result[0]['add']); + self::assertEquals(202500, $result[1]['add']); + self::assertEquals(402500, $result[2]['add']); + self::assertEquals(802500, $result[3]['add']); } public function testOperatorSub() @@ -223,11 +223,11 @@ public function testOperatorSub() $result = $this->_em->createQuery('SELECT m, m.salary-2500 AS sub FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') ->getResult(); - $this->assertEquals(4, count($result)); - $this->assertEquals(97500, $result[0]['sub']); - $this->assertEquals(197500, $result[1]['sub']); - $this->assertEquals(397500, $result[2]['sub']); - $this->assertEquals(797500, $result[3]['sub']); + self::assertEquals(4, count($result)); + self::assertEquals(97500, $result[0]['sub']); + self::assertEquals(197500, $result[1]['sub']); + self::assertEquals(397500, $result[2]['sub']); + self::assertEquals(797500, $result[3]['sub']); } public function testOperatorMultiply() @@ -235,11 +235,11 @@ public function testOperatorMultiply() $result = $this->_em->createQuery('SELECT m, m.salary*2 AS op FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') ->getResult(); - $this->assertEquals(4, count($result)); - $this->assertEquals(200000, $result[0]['op']); - $this->assertEquals(400000, $result[1]['op']); - $this->assertEquals(800000, $result[2]['op']); - $this->assertEquals(1600000, $result[3]['op']); + self::assertEquals(4, count($result)); + self::assertEquals(200000, $result[0]['op']); + self::assertEquals(400000, $result[1]['op']); + self::assertEquals(800000, $result[2]['op']); + self::assertEquals(1600000, $result[3]['op']); } /** @@ -250,11 +250,11 @@ public function testOperatorDiv() $result = $this->_em->createQuery('SELECT m, (m.salary/0.5) AS op FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') ->getResult(); - $this->assertEquals(4, count($result)); - $this->assertEquals(200000, $result[0]['op']); - $this->assertEquals(400000, $result[1]['op']); - $this->assertEquals(800000, $result[2]['op']); - $this->assertEquals(1600000, $result[3]['op']); + self::assertEquals(4, count($result)); + self::assertEquals(200000, $result[0]['op']); + self::assertEquals(400000, $result[1]['op']); + self::assertEquals(800000, $result[2]['op']); + self::assertEquals(1600000, $result[3]['op']); } public function testConcatFunction() @@ -262,11 +262,11 @@ public function testConcatFunction() $arg = $this->_em->createQuery('SELECT CONCAT(m.name, m.department) AS namedep FROM Doctrine\Tests\Models\Company\CompanyManager m order by namedep desc') ->getArrayResult(); - $this->assertEquals(4, count($arg)); - $this->assertEquals('Roman B.IT', $arg[0]['namedep']); - $this->assertEquals('Jonathan W.Administration', $arg[1]['namedep']); - $this->assertEquals('Guilherme B.Complaint Department', $arg[2]['namedep']); - $this->assertEquals('Benjamin E.HR', $arg[3]['namedep']); + self::assertEquals(4, count($arg)); + self::assertEquals('Roman B.IT', $arg[0]['namedep']); + self::assertEquals('Jonathan W.Administration', $arg[1]['namedep']); + self::assertEquals('Guilherme B.Complaint Department', $arg[2]['namedep']); + self::assertEquals('Benjamin E.HR', $arg[3]['namedep']); } /** @@ -277,12 +277,12 @@ public function testDateDiff() $query = $this->_em->createQuery("SELECT DATE_DIFF(CURRENT_TIMESTAMP(), DATE_ADD(CURRENT_TIMESTAMP(), 10, 'day')) AS diff FROM Doctrine\Tests\Models\Company\CompanyManager m"); $arg = $query->getArrayResult(); - $this->assertEquals(-10, $arg[0]['diff'], "Should be roughly -10 (or -9)", 1); + self::assertEquals(-10, $arg[0]['diff'], "Should be roughly -10 (or -9)", 1); $query = $this->_em->createQuery("SELECT DATE_DIFF(DATE_ADD(CURRENT_TIMESTAMP(), 10, 'day'), CURRENT_TIMESTAMP()) AS diff FROM Doctrine\Tests\Models\Company\CompanyManager m"); $arg = $query->getArrayResult(); - $this->assertEquals(10, $arg[0]['diff'], "Should be roughly 10 (or 9)", 1); + self::assertEquals(10, $arg[0]['diff'], "Should be roughly 10 (or 9)", 1); } /** @@ -293,12 +293,12 @@ public function testDateAdd() $arg = $this->_em->createQuery("SELECT DATE_ADD(CURRENT_TIMESTAMP(), 10, 'day') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m") ->getArrayResult(); - $this->assertTrue(strtotime($arg[0]['add']) > 0); + self::assertTrue(strtotime($arg[0]['add']) > 0); $arg = $this->_em->createQuery("SELECT DATE_ADD(CURRENT_TIMESTAMP(), 10, 'month') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m") ->getArrayResult(); - $this->assertTrue(strtotime($arg[0]['add']) > 0); + self::assertTrue(strtotime($arg[0]['add']) > 0); } public function testDateAddSecond() @@ -307,15 +307,15 @@ public function testDateAddSecond() $query = $this->_em->createQuery($dql)->setMaxResults(1); $result = $query->getArrayResult(); - $this->assertCount(1, $result); - $this->assertArrayHasKey('now', $result[0]); - $this->assertArrayHasKey('add', $result[0]); + self::assertCount(1, $result); + self::assertArrayHasKey('now', $result[0]); + self::assertArrayHasKey('add', $result[0]); $now = strtotime($result[0]['now']); $add = strtotime($result[0]['add']); $diff = $add - $now; - $this->assertSQLEquals(10, $diff); + self::assertSQLEquals(10, $diff); } /** @@ -326,12 +326,12 @@ public function testDateSub() $arg = $this->_em->createQuery("SELECT DATE_SUB(CURRENT_TIMESTAMP(), 10, 'day') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m") ->getArrayResult(); - $this->assertTrue(strtotime($arg[0]['add']) > 0); + self::assertTrue(strtotime($arg[0]['add']) > 0); $arg = $this->_em->createQuery("SELECT DATE_SUB(CURRENT_TIMESTAMP(), 10, 'month') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m") ->getArrayResult(); - $this->assertTrue(strtotime($arg[0]['add']) > 0); + self::assertTrue(strtotime($arg[0]['add']) > 0); } /** @@ -347,15 +347,15 @@ public function testBitOrComparison() 'm.id ' ; $result = $this->_em->createQuery($dql)->getArrayResult(); - $this->assertEquals(4 | 2, $result[0]['bit_or']); - $this->assertEquals(4 | 2, $result[1]['bit_or']); - $this->assertEquals(4 | 2, $result[2]['bit_or']); - $this->assertEquals(4 | 2, $result[3]['bit_or']); + self::assertEquals(4 | 2, $result[0]['bit_or']); + self::assertEquals(4 | 2, $result[1]['bit_or']); + self::assertEquals(4 | 2, $result[2]['bit_or']); + self::assertEquals(4 | 2, $result[3]['bit_or']); - $this->assertEquals(($result[0][0]['salary']/100000) | 2, $result[0]['salary_bit_or']); - $this->assertEquals(($result[1][0]['salary']/100000) | 2, $result[1]['salary_bit_or']); - $this->assertEquals(($result[2][0]['salary']/100000) | 2, $result[2]['salary_bit_or']); - $this->assertEquals(($result[3][0]['salary']/100000) | 2, $result[3]['salary_bit_or']); + self::assertEquals(($result[0][0]['salary']/100000) | 2, $result[0]['salary_bit_or']); + self::assertEquals(($result[1][0]['salary']/100000) | 2, $result[1]['salary_bit_or']); + self::assertEquals(($result[2][0]['salary']/100000) | 2, $result[2]['salary_bit_or']); + self::assertEquals(($result[3][0]['salary']/100000) | 2, $result[3]['salary_bit_or']); } /** @@ -371,15 +371,15 @@ public function testBitAndComparison() 'm.id ' ; $result = $this->_em->createQuery($dql)->getArrayResult(); - $this->assertEquals(4 & 2, $result[0]['bit_and']); - $this->assertEquals(4 & 2, $result[1]['bit_and']); - $this->assertEquals(4 & 2, $result[2]['bit_and']); - $this->assertEquals(4 & 2, $result[3]['bit_and']); + self::assertEquals(4 & 2, $result[0]['bit_and']); + self::assertEquals(4 & 2, $result[1]['bit_and']); + self::assertEquals(4 & 2, $result[2]['bit_and']); + self::assertEquals(4 & 2, $result[3]['bit_and']); - $this->assertEquals(($result[0][0]['salary']/100000) & 2, $result[0]['salary_bit_and']); - $this->assertEquals(($result[1][0]['salary']/100000) & 2, $result[1]['salary_bit_and']); - $this->assertEquals(($result[2][0]['salary']/100000) & 2, $result[2]['salary_bit_and']); - $this->assertEquals(($result[3][0]['salary']/100000) & 2, $result[3]['salary_bit_and']); + self::assertEquals(($result[0][0]['salary']/100000) & 2, $result[0]['salary_bit_and']); + self::assertEquals(($result[1][0]['salary']/100000) & 2, $result[1]['salary_bit_and']); + self::assertEquals(($result[2][0]['salary']/100000) & 2, $result[2]['salary_bit_and']); + self::assertEquals(($result[3][0]['salary']/100000) & 2, $result[3]['salary_bit_and']); } protected function generateFixture() diff --git a/tests/Doctrine/Tests/ORM/Functional/QueryTest.php b/tests/Doctrine/Tests/ORM/Functional/QueryTest.php index f25cd33faaa..13a8a27f1c4 100644 --- a/tests/Doctrine/Tests/ORM/Functional/QueryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/QueryTest.php @@ -44,30 +44,30 @@ public function testSimpleQueries() $result = $query->getResult(); - $this->assertEquals(1, count($result)); - $this->assertInstanceOf(CmsUser::class, $result[0][0]); - $this->assertEquals('Guilherme', $result[0][0]->name); - $this->assertEquals('gblanco', $result[0][0]->username); - $this->assertEquals('developer', $result[0][0]->status); - $this->assertEquals('GUILHERME', $result[0][1]); + self::assertEquals(1, count($result)); + self::assertInstanceOf(CmsUser::class, $result[0][0]); + self::assertEquals('Guilherme', $result[0][0]->name); + self::assertEquals('gblanco', $result[0][0]->username); + self::assertEquals('developer', $result[0][0]->status); + self::assertEquals('GUILHERME', $result[0][1]); $resultArray = $query->getArrayResult(); - $this->assertEquals(1, count($resultArray)); - $this->assertTrue(is_array($resultArray[0][0])); - $this->assertEquals('Guilherme', $resultArray[0][0]['name']); - $this->assertEquals('gblanco', $resultArray[0][0]['username']); - $this->assertEquals('developer', $resultArray[0][0]['status']); - $this->assertEquals('GUILHERME', $resultArray[0][1]); + self::assertEquals(1, count($resultArray)); + self::assertTrue(is_array($resultArray[0][0])); + self::assertEquals('Guilherme', $resultArray[0][0]['name']); + self::assertEquals('gblanco', $resultArray[0][0]['username']); + self::assertEquals('developer', $resultArray[0][0]['status']); + self::assertEquals('GUILHERME', $resultArray[0][1]); $scalarResult = $query->getScalarResult(); - $this->assertEquals(1, count($scalarResult)); - $this->assertEquals('Guilherme', $scalarResult[0]['u_name']); - $this->assertEquals('gblanco', $scalarResult[0]['u_username']); - $this->assertEquals('developer', $scalarResult[0]['u_status']); - $this->assertEquals('GUILHERME', $scalarResult[0][1]); + self::assertEquals(1, count($scalarResult)); + self::assertEquals('Guilherme', $scalarResult[0]['u_name']); + self::assertEquals('gblanco', $scalarResult[0]['u_username']); + self::assertEquals('developer', $scalarResult[0]['u_status']); + self::assertEquals('GUILHERME', $scalarResult[0][1]); $query = $this->_em->createQuery("select upper(u.name) from Doctrine\Tests\Models\CMS\CmsUser u where u.username = 'gblanco'"); - $this->assertEquals('GUILHERME', $query->getSingleScalarResult()); + self::assertEquals('GUILHERME', $query->getSingleScalarResult()); } public function testJoinQueries() @@ -96,11 +96,11 @@ public function testJoinQueries() $query = $this->_em->createQuery('select u, a from ' . CmsUser::class . ' u join u.articles a ORDER BY a.topic'); $users = $query->getResult(); - $this->assertEquals(1, count($users)); - $this->assertInstanceOf(CmsUser::class, $users[0]); - $this->assertEquals(2, count($users[0]->articles)); - $this->assertEquals('Doctrine 2', $users[0]->articles[0]->topic); - $this->assertEquals('Symfony 2', $users[0]->articles[1]->topic); + self::assertEquals(1, count($users)); + self::assertInstanceOf(CmsUser::class, $users[0]); + self::assertEquals(2, count($users[0]->articles)); + self::assertEquals('Doctrine 2', $users[0]->articles[0]->topic); + self::assertEquals('Symfony 2', $users[0]->articles[1]->topic); } public function testUsingZeroBasedQueryParameterShouldWork() @@ -117,7 +117,7 @@ public function testUsingZeroBasedQueryParameterShouldWork() $q->setParameter(0, 'jwage'); $user = $q->getSingleResult(); - $this->assertNotNull($user); + self::assertNotNull($user); } public function testUsingUnknownQueryParameterShouldThrowException() @@ -223,17 +223,17 @@ public function testIterateResultAsArrayAndParams() $found[] = $article; } - $this->assertEquals(1, count($found)); - $this->assertSame( + self::assertEquals(1, count($found)); + self::assertEquals( [ [ [ 'id' => $articleId, 'topic' => 'Doctrine 2', 'text' => 'This is an introduction to Doctrine 2.', - 'version' => 1, - ], - ], + 'version' => 1 + ] + ] ], $found ); @@ -267,13 +267,13 @@ public function testIterateResult_IterativelyBuildUpUnitOfWork() $identityMap = $this->_em->getUnitOfWork()->getIdentityMap(); $identityMapCount = count($identityMap[CmsArticle::class]); - $this->assertTrue($identityMapCount>$iteratedCount); + self::assertTrue($identityMapCount>$iteratedCount); $iteratedCount++; } - $this->assertSame(["Doctrine 2", "Symfony 2"], $topics); - $this->assertSame(2, $iteratedCount); + self::assertSame(["Doctrine 2", "Symfony 2"], $topics); + self::assertSame(2, $iteratedCount); $this->_em->flush(); $this->_em->clear(); @@ -309,8 +309,8 @@ public function testIterateResultClearEveryCycle() $iteratedCount++; } - $this->assertSame(["Doctrine 2", "Symfony 2"], $topics); - $this->assertSame(2, $iteratedCount); + self::assertSame(["Doctrine 2", "Symfony 2"], $topics); + self::assertSame(2, $iteratedCount); $this->_em->flush(); } @@ -391,18 +391,18 @@ public function testModifiedLimitQuery() ->setMaxResults(2) ->getResult(); - $this->assertEquals(2, count($data)); - $this->assertEquals('gblanco1', $data[0]->username); - $this->assertEquals('gblanco2', $data[1]->username); + self::assertEquals(2, count($data)); + self::assertEquals('gblanco1', $data[0]->username); + self::assertEquals('gblanco2', $data[1]->username); $data = $this->_em->createQuery('SELECT u FROM ' . CmsUser::class . ' u') ->setFirstResult(3) ->setMaxResults(2) ->getResult(); - $this->assertEquals(2, count($data)); - $this->assertEquals('gblanco3', $data[0]->username); - $this->assertEquals('gblanco4', $data[1]->username); + self::assertEquals(2, count($data)); + self::assertEquals('gblanco3', $data[0]->username); + self::assertEquals('gblanco4', $data[1]->username); $data = $this->_em->createQuery('SELECT u FROM ' . CmsUser::class . ' u') ->setFirstResult(3) @@ -416,7 +416,7 @@ public function testSupportsQueriesWithEntityNamespaces() try { $query = $this->_em->createQuery('UPDATE CMS:CmsUser u SET u.name = ?1'); - $this->assertEquals('UPDATE cms_users SET name = ?', $query->getSQL()); + self::assertEquals('UPDATE cms_users SET name = ?', $query->getSQL()); $query->free(); } catch (\Exception $e) { $this->fail($e->getMessage()); @@ -448,11 +448,11 @@ public function testEntityParameters() ->setParameter("topic", "dr. dolittle"); $result = $q->getResult(); - $this->assertEquals(1, count($result)); - $this->assertInstanceOf(CmsArticle::class, $result[0]); - $this->assertEquals("dr. dolittle", $result[0]->topic); - $this->assertInstanceOf(Proxy::class, $result[0]->user); - $this->assertFalse($result[0]->user->__isInitialized__); + self::assertEquals(1, count($result)); + self::assertInstanceOf(CmsArticle::class, $result[0]); + self::assertEquals("dr. dolittle", $result[0]->topic); + self::assertInstanceOf(Proxy::class, $result[0]->user); + self::assertFalse($result[0]->user->__isInitialized__); } /** @@ -479,9 +479,9 @@ public function testEnableFetchEagerMode() ->setFetchMode(CmsArticle::class, 'user', ClassMetadata::FETCH_EAGER) ->getResult(); - $this->assertEquals(10, count($articles)); + self::assertEquals(10, count($articles)); foreach ($articles AS $article) { - $this->assertNotInstanceOf(Proxy::class, $article); + self::assertNotInstanceOf(Proxy::class, $article); } } @@ -501,12 +501,12 @@ public function testgetOneOrNullResult() $query = $this->_em->createQuery("select u from " . CmsUser::class . " u where u.username = 'gblanco'"); $fetchedUser = $query->getOneOrNullResult(); - $this->assertInstanceOf(CmsUser::class, $fetchedUser); - $this->assertEquals('gblanco', $fetchedUser->username); + self::assertInstanceOf(CmsUser::class, $fetchedUser); + self::assertEquals('gblanco', $fetchedUser->username); $query = $this->_em->createQuery("select u.username from " . CmsUser::class . " u where u.username = 'gblanco'"); $fetchedUsername = $query->getOneOrNullResult(Query::HYDRATE_SINGLE_SCALAR); - $this->assertEquals('gblanco', $fetchedUsername); + self::assertEquals('gblanco', $fetchedUsername); } /** @@ -540,10 +540,10 @@ public function testgetOneOrNullResultSeveralRows() public function testgetOneOrNullResultNoRows() { $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u"); - $this->assertNull($query->getOneOrNullResult()); + self::assertNull($query->getOneOrNullResult()); $query = $this->_em->createQuery("select u.username from Doctrine\Tests\Models\CMS\CmsUser u where u.username = 'gblanco'"); - $this->assertNull($query->getOneOrNullResult(Query::HYDRATE_SCALAR)); + self::assertNull($query->getOneOrNullResult(Query::HYDRATE_SCALAR)); } /** @@ -581,7 +581,7 @@ public function testParameterOrder() )); $result = $query->getResult(); - $this->assertEquals(3, count($result)); + self::assertEquals(3, count($result)); } public function testDqlWithAutoInferOfParameters() @@ -612,7 +612,7 @@ public function testDqlWithAutoInferOfParameters() $users = $query->execute(); - $this->assertEquals(2, count($users)); + self::assertEquals(2, count($users)); } public function testQueryBuilderWithStringWhereClauseContainingOrAndConditionalPrimary() @@ -626,7 +626,7 @@ public function testQueryBuilderWithStringWhereClauseContainingOrAndConditionalP $query = $qb->getQuery(); $users = $query->execute(); - $this->assertEquals(0, count($users)); + self::assertEquals(0, count($users)); } public function testQueryWithArrayOfEntitiesAsParameter() @@ -658,7 +658,7 @@ public function testQueryWithArrayOfEntitiesAsParameter() $users = $query->execute(); - $this->assertEquals(2, count($users)); + self::assertEquals(2, count($users)); } public function testQueryWithHiddenAsSelectExpression() @@ -687,8 +687,8 @@ public function testQueryWithHiddenAsSelectExpression() $query = $this->_em->createQuery("SELECT u, (SELECT COUNT(u2.id) FROM Doctrine\Tests\Models\CMS\CmsUser u2) AS HIDDEN total FROM Doctrine\Tests\Models\CMS\CmsUser u"); $users = $query->execute(); - $this->assertEquals(3, count($users)); - $this->assertInstanceOf(CmsUser::class, $users[0]); + self::assertEquals(3, count($users)); + self::assertInstanceOf(CmsUser::class, $users[0]); } /** @@ -708,7 +708,7 @@ public function testSetParameterBindingSingleIdentifierObject() $q = $this->_em->createQuery("SELECT DISTINCT u from Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1"); $q->setParameter(1, $userC); - $this->assertEquals($userC, $q->getParameter(1)->getValue()); + self::assertEquals($userC, $q->getParameter(1)->getValue()); // Parameter is not converted before, but it should be converted during execution. Test should not fail here $q->getResult(); @@ -750,18 +750,18 @@ public function testSetCollectionParameterBindingSingleIdentifierObject() $q->setParameter('users', $userCollection); $users = $q->execute(); - $this->assertEquals(3, count($users)); - $this->assertInstanceOf(CmsUser::class, $users[0]); - $this->assertInstanceOf(CmsUser::class, $users[1]); - $this->assertInstanceOf(CmsUser::class, $users[2]); + self::assertEquals(3, count($users)); + self::assertInstanceOf(CmsUser::class, $users[0]); + self::assertInstanceOf(CmsUser::class, $users[1]); + self::assertInstanceOf(CmsUser::class, $users[2]); $resultUser1 = $users[0]; $resultUser2 = $users[1]; $resultUser3 = $users[2]; - $this->assertEquals($u1->username, $resultUser1->username); - $this->assertEquals($u2->username, $resultUser2->username); - $this->assertEquals($u3->username, $resultUser3->username); + self::assertEquals($u1->username, $resultUser1->username); + self::assertEquals($u2->username, $resultUser2->username); + self::assertEquals($u3->username, $resultUser3->username); } /** @@ -783,7 +783,7 @@ public function testUnexpectedResultException() $this->_em->createQuery($dql)->getSingleResult(); $this->fail('Expected exception "\Doctrine\ORM\NoResultException".'); } catch (UnexpectedResultException $exc) { - $this->assertInstanceOf('\Doctrine\ORM\NoResultException', $exc); + self::assertInstanceOf('\Doctrine\ORM\NoResultException', $exc); } @@ -796,7 +796,7 @@ public function testUnexpectedResultException() $this->_em->createQuery($dql)->getSingleResult(); $this->fail('Expected exception "\Doctrine\ORM\NonUniqueResultException".'); } catch (UnexpectedResultException $exc) { - $this->assertInstanceOf('\Doctrine\ORM\NonUniqueResultException', $exc); + self::assertInstanceOf('\Doctrine\ORM\NonUniqueResultException', $exc); } } @@ -828,9 +828,9 @@ public function testMultipleJoinComponentsUsingInnerJoin() "); $users = $query->execute(); - $this->assertEquals(2, count($users)); - $this->assertInstanceOf(CmsUser::class, $users[0]); - $this->assertInstanceOf(CmsPhonenumber::class, $users[1]); + self::assertEquals(2, count($users)); + self::assertInstanceOf(CmsUser::class, $users[0]); + self::assertInstanceOf(CmsPhonenumber::class, $users[1]); } public function testMultipleJoinComponentsUsingLeftJoin() @@ -861,10 +861,10 @@ public function testMultipleJoinComponentsUsingLeftJoin() "); $users = $query->execute(); - $this->assertEquals(4, count($users)); - $this->assertInstanceOf(CmsUser::class, $users[0]); - $this->assertInstanceOf(CmsPhonenumber::class, $users[1]); - $this->assertInstanceOf(CmsUser::class, $users[2]); - $this->assertNull($users[3]); + self::assertEquals(4, count($users)); + self::assertInstanceOf(CmsUser::class, $users[0]); + self::assertInstanceOf(CmsPhonenumber::class, $users[1]); + self::assertInstanceOf(CmsUser::class, $users[2]); + self::assertNull($users[3]); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ReadOnlyTest.php b/tests/Doctrine/Tests/ORM/Functional/ReadOnlyTest.php index a664a4df252..9107076f62e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ReadOnlyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ReadOnlyTest.php @@ -38,8 +38,8 @@ public function testReadOnlyEntityNeverChangeTracked() $this->_em->clear(); $dbReadOnly = $this->_em->find(ReadOnlyEntity::class, $readOnly->id); - $this->assertEquals("Test1", $dbReadOnly->name); - $this->assertEquals(1234, $dbReadOnly->numericValue); + self::assertEquals("Test1", $dbReadOnly->name); + self::assertEquals(1234, $dbReadOnly->numericValue); } /** @@ -54,7 +54,7 @@ public function testClearReadOnly() $this->_em->clear(); - $this->assertFalse($this->_em->getUnitOfWork()->isReadOnly($readOnly)); + self::assertFalse($this->_em->getUnitOfWork()->isReadOnly($readOnly)); } /** @@ -69,7 +69,7 @@ public function testClearEntitiesReadOnly() $this->_em->clear(get_class($readOnly)); - $this->assertFalse($this->_em->getUnitOfWork()->isReadOnly($readOnly)); + self::assertFalse($this->_em->getUnitOfWork()->isReadOnly($readOnly)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php b/tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php index 5e1cb2fb223..1578fb2b728 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php @@ -58,7 +58,7 @@ public function testLazyLoadsFieldValuesFromDatabase() $id = $this->createProduct(); $productProxy = $this->_em->getReference(ECommerceProduct::class, ['id' => $id]); - $this->assertEquals('Doctrine Cookbook', $productProxy->getName()); + self::assertEquals('Doctrine Cookbook', $productProxy->getName()); } /** @@ -71,7 +71,7 @@ public function testAccessMetatadaForProxy() $entity = $this->_em->getReference(ECommerceProduct::class , $id); $class = $this->_em->getClassMetadata(get_class($entity)); - $this->assertEquals(ECommerceProduct::class, $class->name); + self::assertEquals(ECommerceProduct::class, $class->name); } /** @@ -84,8 +84,8 @@ public function testReferenceFind() $entity = $this->_em->getReference(ECommerceProduct::class , $id); $entity2 = $this->_em->find(ECommerceProduct::class , $id); - $this->assertSame($entity, $entity2); - $this->assertEquals('Doctrine Cookbook', $entity2->getName()); + self::assertSame($entity, $entity2); + self::assertEquals('Doctrine Cookbook', $entity2->getName()); } /** @@ -101,16 +101,16 @@ public function testCloneProxy() /* @var $clone ECommerceProduct */ $clone = clone $entity; - $this->assertEquals($id, $entity->getId()); - $this->assertEquals('Doctrine Cookbook', $entity->getName()); + self::assertEquals($id, $entity->getId()); + self::assertEquals('Doctrine Cookbook', $entity->getName()); - $this->assertFalse($this->_em->contains($clone), "Cloning a reference proxy should return an unmanaged/detached entity."); - $this->assertEquals($id, $clone->getId(), "Cloning a reference proxy should return same id."); - $this->assertEquals('Doctrine Cookbook', $clone->getName(), "Cloning a reference proxy should return same product name."); + self::assertFalse($this->_em->contains($clone), "Cloning a reference proxy should return an unmanaged/detached entity."); + self::assertEquals($id, $clone->getId(), "Cloning a reference proxy should return same id."); + self::assertEquals('Doctrine Cookbook', $clone->getName(), "Cloning a reference proxy should return same product name."); // domain logic, Product::__clone sets isCloned public property - $this->assertTrue($clone->isCloned); - $this->assertFalse($entity->isCloned); + self::assertTrue($clone->isCloned); + self::assertFalse($entity->isCloned); } /** @@ -123,9 +123,9 @@ public function testInitializeProxy() /* @var $entity ECommerceProduct */ $entity = $this->_em->getReference(ECommerceProduct::class , $id); - $this->assertFalse($entity->__isInitialized__, "Pre-Condition: Object is unitialized proxy."); + self::assertFalse($entity->__isInitialized__, "Pre-Condition: Object is unitialized proxy."); $this->_em->getUnitOfWork()->initializeObject($entity); - $this->assertTrue($entity->__isInitialized__, "Should be initialized after called UnitOfWork::initializeObject()"); + self::assertTrue($entity->__isInitialized__, "Should be initialized after called UnitOfWork::initializeObject()"); } /** @@ -143,7 +143,7 @@ public function testInitializeChangeAndFlushProxy() $this->_em->clear(); $entity = $this->_em->getReference(ECommerceProduct::class , $id); - $this->assertEquals('Doctrine 2 Cookbook', $entity->getName()); + self::assertEquals('Doctrine 2 Cookbook', $entity->getName()); } /** @@ -156,11 +156,11 @@ public function testWakeupCalledOnProxy() /* @var $entity ECommerceProduct */ $entity = $this->_em->getReference(ECommerceProduct::class , $id); - $this->assertFalse($entity->wakeUp); + self::assertFalse($entity->wakeUp); $entity->setName('Doctrine 2 Cookbook'); - $this->assertTrue($entity->wakeUp, "Loading the proxy should call __wakeup()."); + self::assertTrue($entity->wakeUp, "Loading the proxy should call __wakeup()."); } public function testDoNotInitializeProxyOnGettingTheIdentifier() @@ -170,9 +170,9 @@ public function testDoNotInitializeProxyOnGettingTheIdentifier() /* @var $entity ECommerceProduct */ $entity = $this->_em->getReference(ECommerceProduct::class , $id); - $this->assertFalse($entity->__isInitialized__, "Pre-Condition: Object is unitialized proxy."); - $this->assertEquals($id, $entity->getId()); - $this->assertFalse($entity->__isInitialized__, "Getting the identifier doesn't initialize the proxy."); + self::assertFalse($entity->__isInitialized__, "Pre-Condition: Object is unitialized proxy."); + self::assertEquals($id, $entity->getId()); + self::assertFalse($entity->__isInitialized__, "Getting the identifier doesn't initialize the proxy."); } /** @@ -185,9 +185,9 @@ public function testDoNotInitializeProxyOnGettingTheIdentifier_DDC_1625() /* @var $entity CompanyAuction */ $entity = $this->_em->getReference(CompanyAuction::class , $id); - $this->assertFalse($entity->__isInitialized__, "Pre-Condition: Object is unitialized proxy."); - $this->assertEquals($id, $entity->getId()); - $this->assertFalse($entity->__isInitialized__, "Getting the identifier doesn't initialize the proxy when extending."); + self::assertFalse($entity->__isInitialized__, "Pre-Condition: Object is unitialized proxy."); + self::assertEquals($id, $entity->getId()); + self::assertFalse($entity->__isInitialized__, "Getting the identifier doesn't initialize the proxy when extending."); } public function testDoNotInitializeProxyOnGettingTheIdentifierAndReturnTheRightType() @@ -207,10 +207,10 @@ public function testDoNotInitializeProxyOnGettingTheIdentifierAndReturnTheRightT $product = $this->_em->getRepository(ECommerceProduct::class)->find($product->getId()); $entity = $product->getShipping(); - $this->assertFalse($entity->__isInitialized__, "Pre-Condition: Object is unitialized proxy."); - $this->assertEquals($id, $entity->getId()); - $this->assertSame($id, $entity->getId(), "Check that the id's are the same value, and type."); - $this->assertFalse($entity->__isInitialized__, "Getting the identifier doesn't initialize the proxy."); + self::assertFalse($entity->__isInitialized__, "Pre-Condition: Object is unitialized proxy."); + self::assertEquals($id, $entity->getId()); + self::assertSame($id, $entity->getId(), "Check that the id's are the same value, and type."); + self::assertFalse($entity->__isInitialized__, "Getting the identifier doesn't initialize the proxy."); } public function testInitializeProxyOnGettingSomethingOtherThanTheIdentifier() @@ -220,9 +220,9 @@ public function testInitializeProxyOnGettingSomethingOtherThanTheIdentifier() /* @var $entity ECommerceProduct */ $entity = $this->_em->getReference(ECommerceProduct::class , $id); - $this->assertFalse($entity->__isInitialized__, "Pre-Condition: Object is unitialized proxy."); - $this->assertEquals('Doctrine Cookbook', $entity->getName()); - $this->assertTrue($entity->__isInitialized__, "Getting something other than the identifier initializes the proxy."); + self::assertFalse($entity->__isInitialized__, "Pre-Condition: Object is unitialized proxy."); + self::assertEquals('Doctrine Cookbook', $entity->getName()); + self::assertTrue($entity->__isInitialized__, "Getting something other than the identifier initializes the proxy."); } /** @@ -236,16 +236,16 @@ public function testCommonPersistenceProxy() $entity = $this->_em->getReference(ECommerceProduct::class , $id); $className = ClassUtils::getClass($entity); - $this->assertInstanceOf(Proxy::class, $entity); - $this->assertFalse($entity->__isInitialized()); - $this->assertEquals(ECommerceProduct::class, $className); + self::assertInstanceOf(Proxy::class, $entity); + self::assertFalse($entity->__isInitialized()); + self::assertEquals(ECommerceProduct::class, $className); $restName = str_replace($this->_em->getConfiguration()->getProxyNamespace(), "", get_class($entity)); $restName = substr(get_class($entity), strlen($this->_em->getConfiguration()->getProxyNamespace()) +1); $proxyFileName = $this->_em->getConfiguration()->getProxyDir() . DIRECTORY_SEPARATOR . str_replace("\\", "", $restName) . ".php"; - $this->assertTrue(file_exists($proxyFileName), "Proxy file name cannot be found generically."); + self::assertTrue(file_exists($proxyFileName), "Proxy file name cannot be found generically."); $entity->__load(); - $this->assertTrue($entity->__isInitialized()); + self::assertTrue($entity->__isInitialized()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php b/tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php index e916fcdd594..c36dce598ca 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php @@ -56,13 +56,13 @@ public function testResultCache() $query->setResultCacheDriver($cache)->setResultCacheId('my_cache_id'); - $this->assertFalse($cache->contains('my_cache_id')); + self::assertFalse($cache->contains('my_cache_id')); $users = $query->getResult(); - $this->assertTrue($cache->contains('my_cache_id')); - $this->assertEquals(1, count($users)); - $this->assertEquals('Roman', $users[0]->name); + self::assertTrue($cache->contains('my_cache_id')); + self::assertEquals(1, count($users)); + self::assertEquals('Roman', $users[0]->name); $this->_em->clear(); @@ -71,9 +71,9 @@ public function testResultCache() $users = $query2->getResult(); - $this->assertTrue($cache->contains('my_cache_id')); - $this->assertEquals(1, count($users)); - $this->assertEquals('Roman', $users[0]->name); + self::assertTrue($cache->contains('my_cache_id')); + self::assertEquals(1, count($users)); + self::assertEquals('Roman', $users[0]->name); } public function testSetResultCacheId() @@ -84,11 +84,11 @@ public function testSetResultCacheId() $query->setResultCacheDriver($cache); $query->setResultCacheId('testing_result_cache_id'); - $this->assertFalse($cache->contains('testing_result_cache_id')); + self::assertFalse($cache->contains('testing_result_cache_id')); $users = $query->getResult(); - $this->assertTrue($cache->contains('testing_result_cache_id')); + self::assertTrue($cache->contains('testing_result_cache_id')); } public function testUseResultCache() @@ -102,7 +102,7 @@ public function testUseResultCache() $users = $query->getResult(); - $this->assertTrue($cache->contains('testing_result_cache_id')); + self::assertTrue($cache->contains('testing_result_cache_id')); $this->_em->getConfiguration()->setResultCacheImpl(new ArrayCache()); } @@ -124,7 +124,7 @@ public function testUseResultCacheParams() $query->setParameter(1, 2); $query->getResult(); - $this->assertEquals($sqlCount + 2, count($this->_sqlLoggerStack->queries), "Two non-cached queries."); + self::assertEquals($sqlCount + 2, count($this->_sqlLoggerStack->queries), "Two non-cached queries."); $query->setParameter(1, 1); $query->useResultCache(true); @@ -133,7 +133,7 @@ public function testUseResultCacheParams() $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."); + self::assertEquals($sqlCount + 2, count($this->_sqlLoggerStack->queries), "The next two sql should have been cached, but were not."); } /** @@ -153,11 +153,11 @@ public function testNativeQueryResultCaching() $query->setParameter(1, 10); $query->setResultCacheDriver($cache)->useResultCache(true); - $this->assertEquals(0, $this->getCacheSize($cache)); + self::assertEquals(0, $this->getCacheSize($cache)); $query->getResult(); - $this->assertEquals(1, $this->getCacheSize($cache)); + self::assertEquals(1, $this->getCacheSize($cache)); return $query; } @@ -174,7 +174,7 @@ public function testResultCacheNotDependsOnQueryHints($query) $query->setHint('foo', 'bar'); $query->getResult(); - $this->assertEquals($cacheCount, $this->getCacheSize($cache)); + self::assertEquals($cacheCount, $this->getCacheSize($cache)); } /** @@ -189,7 +189,7 @@ public function testResultCacheDependsOnParameters($query) $query->setParameter(1, 50); $query->getResult(); - $this->assertEquals($cacheCount + 1, $this->getCacheSize($cache)); + self::assertEquals($cacheCount + 1, $this->getCacheSize($cache)); } /** @@ -201,10 +201,10 @@ public function testResultCacheNotDependsOnHydrationMode($query) $cache = $query->getResultCacheDriver(); $cacheCount = $this->getCacheSize($cache); - $this->assertNotEquals(Query::HYDRATE_ARRAY, $query->getHydrationMode()); + self::assertNotEquals(Query::HYDRATE_ARRAY, $query->getHydrationMode()); $query->getArrayResult(); - $this->assertEquals($cacheCount, $this->getCacheSize($cache)); + self::assertEquals($cacheCount, $this->getCacheSize($cache)); } /** @@ -241,8 +241,8 @@ public function testResultCacheWithObjectParameter() $articles = $query->getResult(); - $this->assertEquals(1, count($articles)); - $this->assertEquals('baz', $articles[0]->topic); + self::assertEquals(1, count($articles)); + self::assertEquals('baz', $articles[0]->topic); $this->_em->clear(); @@ -253,8 +253,8 @@ public function testResultCacheWithObjectParameter() $articles = $query2->getResult(); - $this->assertEquals(1, count($articles)); - $this->assertEquals('baz', $articles[0]->topic); + self::assertEquals(1, count($articles)); + self::assertEquals('baz', $articles[0]->topic); $query3 = $this->_em->createQuery('select a from Doctrine\Tests\Models\CMS\CmsArticle a WHERE a.user = ?1'); $query3->setParameter(1, $user2); @@ -263,6 +263,6 @@ public function testResultCacheWithObjectParameter() $articles = $query3->getResult(); - $this->assertEquals(0, count($articles)); + self::assertEquals(0, count($articles)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php index 38b2743b435..90d84e9ba2e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php @@ -60,8 +60,8 @@ public function testConfigureFilter() $config->addFilter("locale", "\Doctrine\Tests\ORM\Functional\MyLocaleFilter"); - $this->assertEquals("\Doctrine\Tests\ORM\Functional\MyLocaleFilter", $config->getFilterClassName("locale")); - $this->assertNull($config->getFilterClassName("foo")); + self::assertEquals("\Doctrine\Tests\ORM\Functional\MyLocaleFilter", $config->getFilterClassName("locale")); + self::assertNull($config->getFilterClassName("foo")); } public function testEntityManagerEnableFilter() @@ -71,11 +71,11 @@ public function testEntityManagerEnableFilter() // Enable an existing filter $filter = $em->getFilters()->enable("locale"); - $this->assertTrue($filter instanceof MyLocaleFilter); + self::assertTrue($filter instanceof MyLocaleFilter); // Enable the filter again $filter2 = $em->getFilters()->enable("locale"); - $this->assertEquals($filter, $filter2); + self::assertEquals($filter, $filter2); // Enable a non-existing filter $exceptionThrown = false; @@ -84,7 +84,7 @@ public function testEntityManagerEnableFilter() } catch (\InvalidArgumentException $e) { $exceptionThrown = true; } - $this->assertTrue($exceptionThrown); + self::assertTrue($exceptionThrown); } public function testEntityManagerEnabledFilters() @@ -92,14 +92,14 @@ public function testEntityManagerEnabledFilters() $em = $this->_getEntityManager(); // No enabled filters - $this->assertEquals([], $em->getFilters()->getEnabledFilters()); + self::assertEquals([], $em->getFilters()->getEnabledFilters()); $this->configureFilters($em); $filter = $em->getFilters()->enable("locale"); $filter = $em->getFilters()->enable("soft_delete"); // Two enabled filters - $this->assertEquals(2, count($em->getFilters()->getEnabledFilters())); + self::assertEquals(2, count($em->getFilters()->getEnabledFilters())); } @@ -112,8 +112,8 @@ public function testEntityManagerDisableFilter() $filter = $em->getFilters()->enable("locale"); // Disable it - $this->assertEquals($filter, $em->getFilters()->disable("locale")); - $this->assertEquals(0, count($em->getFilters()->getEnabledFilters())); + self::assertEquals($filter, $em->getFilters()->disable("locale")); + self::assertEquals(0, count($em->getFilters()->getEnabledFilters())); // Disable a non-existing filter $exceptionThrown = false; @@ -122,7 +122,7 @@ public function testEntityManagerDisableFilter() } catch (\InvalidArgumentException $e) { $exceptionThrown = true; } - $this->assertTrue($exceptionThrown); + self::assertTrue($exceptionThrown); // Disable a non-enabled filter $exceptionThrown = false; @@ -131,7 +131,7 @@ public function testEntityManagerDisableFilter() } catch (\InvalidArgumentException $e) { $exceptionThrown = true; } - $this->assertTrue($exceptionThrown); + self::assertTrue($exceptionThrown); } public function testEntityManagerGetFilter() @@ -143,7 +143,7 @@ public function testEntityManagerGetFilter() $filter = $em->getFilters()->enable("locale"); // Get the filter - $this->assertEquals($filter, $em->getFilters()->getFilter("locale")); + self::assertEquals($filter, $em->getFilters()->getFilter("locale")); // Get a non-enabled filter $exceptionThrown = false; @@ -152,7 +152,7 @@ public function testEntityManagerGetFilter() } catch (\InvalidArgumentException $e) { $exceptionThrown = true; } - $this->assertTrue($exceptionThrown); + self::assertTrue($exceptionThrown); } /** @@ -165,14 +165,14 @@ public function testEntityManagerIsFilterEnabled() // Check for an enabled filter $em->getFilters()->enable("locale"); - $this->assertTrue($em->getFilters()->isEnabled("locale")); + self::assertTrue($em->getFilters()->isEnabled("locale")); // Check for a disabled filter $em->getFilters()->disable("locale"); - $this->assertFalse($em->getFilters()->isEnabled("locale")); + self::assertFalse($em->getFilters()->isEnabled("locale")); // Check a non-existing filter - $this->assertFalse($em->getFilters()->isEnabled("foo_filter")); + self::assertFalse($em->getFilters()->isEnabled("foo_filter")); } protected function configureFilters($em) @@ -239,7 +239,7 @@ public function testSQLFilterGetSetParameter() $filter->setParameter('locale', 'en', DBALType::STRING); - $this->assertEquals("'en'", $filter->getParameter('locale')); + self::assertEquals("'en'", $filter->getParameter('locale')); } /** @@ -261,7 +261,7 @@ public function testSQLFilterGetConnection() $reflMethod = new \ReflectionMethod(SQLFilter::class, 'getConnection'); $reflMethod->setAccessible(true); - $this->assertSame($conn, $reflMethod->invoke($filter)); + self::assertSame($conn, $reflMethod->invoke($filter)); } public function testSQLFilterSetParameterInfersType() @@ -287,7 +287,7 @@ public function testSQLFilterSetParameterInfersType() $filter->setParameter('locale', 'en'); - $this->assertEquals("'en'", $filter->getParameter('locale')); + self::assertEquals("'en'", $filter->getParameter('locale')); } public function testSQLFilterAddConstraint() @@ -301,11 +301,11 @@ public function testSQLFilterAddConstraint() // Test for an entity that gets extra filter data $targetEntity->name = 'MyEntity\SoftDeleteNewsItem'; - $this->assertEquals('t1_.deleted = 0', $filter->addFilterConstraint($targetEntity, 't1_')); + self::assertEquals('t1_.deleted = 0', $filter->addFilterConstraint($targetEntity, 't1_')); // Test for an entity that doesn't get extra filter data $targetEntity->name = 'MyEntity\NoSoftDeleteNewsItem'; - $this->assertEquals('', $filter->addFilterConstraint($targetEntity, 't1_')); + self::assertEquals('', $filter->addFilterConstraint($targetEntity, 't1_')); } @@ -327,8 +327,8 @@ public function testSQLFilterToString() 'locale' => ['value' => 'en', 'type' => DBALType::STRING], ]; - $this->assertEquals(serialize($parameters), ''.$filter); - $this->assertEquals(''.$filter, ''.$filter2); + self::assertEquals(serialize($parameters), ''.$filter); + self::assertEquals(''.$filter, ''.$filter2); } public function testQueryCache_DependsOnFilters() @@ -342,18 +342,18 @@ public function testQueryCache_DependsOnFilters() $query->setQueryCacheDriver($cache); $query->getResult(); - $this->assertEquals(1, sizeof($cacheDataReflection->getValue($cache))); + self::assertEquals(1, sizeof($cacheDataReflection->getValue($cache))); $conf = $this->_em->getConfiguration(); $conf->addFilter("locale", "\Doctrine\Tests\ORM\Functional\MyLocaleFilter"); $this->_em->getFilters()->enable("locale"); $query->getResult(); - $this->assertEquals(2, sizeof($cacheDataReflection->getValue($cache))); + self::assertEquals(2, sizeof($cacheDataReflection->getValue($cache))); // Another time doesn't add another cache entry $query->getResult(); - $this->assertEquals(2, sizeof($cacheDataReflection->getValue($cache))); + self::assertEquals(2, sizeof($cacheDataReflection->getValue($cache))); } public function testQueryGeneration_DependsOnFilters() @@ -366,47 +366,47 @@ public function testQueryGeneration_DependsOnFilters() $this->_em->getFilters()->enable("country") ->setParameter("country", "en", DBALType::STRING); - $this->assertNotEquals($firstSQLQuery, $query->getSQL()); + self::assertNotEquals($firstSQLQuery, $query->getSQL()); } public function testRepositoryFind() { $this->loadFixtureData(); - $this->assertNotNull($this->_em->getRepository(CmsGroup::class)->find($this->groupId)); - $this->assertNotNull($this->_em->getRepository(CmsGroup::class)->find($this->groupId2)); + self::assertNotNull($this->_em->getRepository(CmsGroup::class)->find($this->groupId)); + self::assertNotNull($this->_em->getRepository(CmsGroup::class)->find($this->groupId2)); $this->useCMSGroupPrefixFilter(); $this->_em->clear(); - $this->assertNotNull($this->_em->getRepository(CmsGroup::class)->find($this->groupId)); - $this->assertNull($this->_em->getRepository(CmsGroup::class)->find($this->groupId2)); + self::assertNotNull($this->_em->getRepository(CmsGroup::class)->find($this->groupId)); + self::assertNull($this->_em->getRepository(CmsGroup::class)->find($this->groupId2)); } public function testRepositoryFindAll() { $this->loadFixtureData(); - $this->assertCount(2, $this->_em->getRepository(CmsGroup::class)->findAll()); + self::assertCount(2, $this->_em->getRepository(CmsGroup::class)->findAll()); $this->useCMSGroupPrefixFilter(); $this->_em->clear(); - $this->assertCount(1, $this->_em->getRepository(CmsGroup::class)->findAll()); + self::assertCount(1, $this->_em->getRepository(CmsGroup::class)->findAll()); } public function testRepositoryFindBy() { $this->loadFixtureData(); - $this->assertCount(1, $this->_em->getRepository(CmsGroup::class)->findBy( + self::assertCount(1, $this->_em->getRepository(CmsGroup::class)->findBy( ['id' => $this->groupId2] )); $this->useCMSGroupPrefixFilter(); $this->_em->clear(); - $this->assertCount(0, $this->_em->getRepository(CmsGroup::class)->findBy( + self::assertCount(0, $this->_em->getRepository(CmsGroup::class)->findBy( ['id' => $this->groupId2] )); } @@ -415,26 +415,26 @@ public function testRepositoryFindByX() { $this->loadFixtureData(); - $this->assertCount(1, $this->_em->getRepository(CmsGroup::class)->findById($this->groupId2)); + self::assertCount(1, $this->_em->getRepository(CmsGroup::class)->findById($this->groupId2)); $this->useCMSGroupPrefixFilter(); $this->_em->clear(); - $this->assertCount(0, $this->_em->getRepository(CmsGroup::class)->findById($this->groupId2)); + self::assertCount(0, $this->_em->getRepository(CmsGroup::class)->findById($this->groupId2)); } public function testRepositoryFindOneBy() { $this->loadFixtureData(); - $this->assertNotNull($this->_em->getRepository(CmsGroup::class)->findOneBy( + self::assertNotNull($this->_em->getRepository(CmsGroup::class)->findOneBy( ['id' => $this->groupId2] )); $this->useCMSGroupPrefixFilter(); $this->_em->clear(); - $this->assertNull($this->_em->getRepository(CmsGroup::class)->findOneBy( + self::assertNull($this->_em->getRepository(CmsGroup::class)->findOneBy( ['id' => $this->groupId2] )); } @@ -443,12 +443,12 @@ public function testRepositoryFindOneByX() { $this->loadFixtureData(); - $this->assertNotNull($this->_em->getRepository(CmsGroup::class)->findOneById($this->groupId2)); + self::assertNotNull($this->_em->getRepository(CmsGroup::class)->findOneById($this->groupId2)); $this->useCMSGroupPrefixFilter(); $this->_em->clear(); - $this->assertNull($this->_em->getRepository(CmsGroup::class)->findOneById($this->groupId2)); + self::assertNull($this->_em->getRepository(CmsGroup::class)->findOneById($this->groupId2)); } public function testToOneFilter() @@ -459,14 +459,14 @@ public function testToOneFilter() $query = $this->_em->createQuery('select ux, ua from Doctrine\Tests\Models\CMS\CmsUser ux JOIN ux.address ua'); // We get two users before enabling the filter - $this->assertEquals(2, count($query->getResult())); + self::assertEquals(2, count($query->getResult())); $conf = $this->_em->getConfiguration(); $conf->addFilter("country", "\Doctrine\Tests\ORM\Functional\CMSCountryFilter"); $this->_em->getFilters()->enable("country")->setParameter("country", "Germany", DBALType::STRING); // We get one user after enabling the filter - $this->assertEquals(1, count($query->getResult())); + self::assertEquals(1, count($query->getResult())); } public function testManyToManyFilter() @@ -475,14 +475,14 @@ public function testManyToManyFilter() $query = $this->_em->createQuery('select ux, ug from Doctrine\Tests\Models\CMS\CmsUser ux JOIN ux.groups ug'); // We get two users before enabling the filter - $this->assertEquals(2, count($query->getResult())); + self::assertEquals(2, count($query->getResult())); $conf = $this->_em->getConfiguration(); $conf->addFilter("group_prefix", "\Doctrine\Tests\ORM\Functional\CMSGroupPrefixFilter"); $this->_em->getFilters()->enable("group_prefix")->setParameter("prefix", "bar_%", DBALType::STRING); // We get one user after enabling the filter - $this->assertEquals(1, count($query->getResult())); + self::assertEquals(1, count($query->getResult())); } @@ -492,14 +492,14 @@ public function testWhereFilter() $query = $this->_em->createQuery('select ug from Doctrine\Tests\Models\CMS\CmsGroup ug WHERE 1=1'); // We get two users before enabling the filter - $this->assertEquals(2, count($query->getResult())); + self::assertEquals(2, count($query->getResult())); $conf = $this->_em->getConfiguration(); $conf->addFilter("group_prefix", "\Doctrine\Tests\ORM\Functional\CMSGroupPrefixFilter"); $this->_em->getFilters()->enable("group_prefix")->setParameter("prefix", "bar_%", DBALType::STRING); // We get one user after enabling the filter - $this->assertEquals(1, count($query->getResult())); + self::assertEquals(1, count($query->getResult())); } public function testWhereOrFilter() @@ -508,14 +508,14 @@ public function testWhereOrFilter() $query = $this->_em->createQuery('select ug from Doctrine\Tests\Models\CMS\CmsGroup ug WHERE 1=1 OR 1=1'); // We get two users before enabling the filter - $this->assertEquals(2, count($query->getResult())); + self::assertEquals(2, count($query->getResult())); $conf = $this->_em->getConfiguration(); $conf->addFilter("group_prefix", "\Doctrine\Tests\ORM\Functional\CMSGroupPrefixFilter"); $this->_em->getFilters()->enable("group_prefix")->setParameter("prefix", "bar_%", DBALType::STRING); // We get one user after enabling the filter - $this->assertEquals(1, count($query->getResult())); + self::assertEquals(1, count($query->getResult())); } @@ -539,12 +539,12 @@ public function testOneToMany_ExtraLazyCountWithFilter() $this->loadLazyFixtureData(); $user = $this->_em->find(CmsUser::class, $this->userId); - $this->assertFalse($user->articles->isInitialized()); - $this->assertEquals(2, count($user->articles)); + self::assertFalse($user->articles->isInitialized()); + self::assertEquals(2, count($user->articles)); $this->useCMSArticleTopicFilter(); - $this->assertEquals(1, count($user->articles)); + self::assertEquals(1, count($user->articles)); } public function testOneToMany_ExtraLazyContainsWithFilter() @@ -553,12 +553,12 @@ public function testOneToMany_ExtraLazyContainsWithFilter() $user = $this->_em->find(CmsUser::class, $this->userId); $filteredArticle = $this->_em->find(CmsArticle::class, $this->articleId2); - $this->assertFalse($user->articles->isInitialized()); - $this->assertTrue($user->articles->contains($filteredArticle)); + self::assertFalse($user->articles->isInitialized()); + self::assertTrue($user->articles->contains($filteredArticle)); $this->useCMSArticleTopicFilter(); - $this->assertFalse($user->articles->contains($filteredArticle)); + self::assertFalse($user->articles->contains($filteredArticle)); } public function testOneToMany_ExtraLazySliceWithFilter() @@ -566,12 +566,12 @@ public function testOneToMany_ExtraLazySliceWithFilter() $this->loadLazyFixtureData(); $user = $this->_em->find(CmsUser::class, $this->userId); - $this->assertFalse($user->articles->isInitialized()); - $this->assertEquals(2, count($user->articles->slice(0,10))); + self::assertFalse($user->articles->isInitialized()); + self::assertEquals(2, count($user->articles->slice(0,10))); $this->useCMSArticleTopicFilter(); - $this->assertEquals(1, count($user->articles->slice(0,10))); + self::assertEquals(1, count($user->articles->slice(0,10))); } private function useCMSGroupPrefixFilter() @@ -587,12 +587,12 @@ public function testManyToMany_ExtraLazyCountWithFilter() $user = $this->_em->find(CmsUser::class, $this->userId2); - $this->assertFalse($user->groups->isInitialized()); - $this->assertEquals(2, count($user->groups)); + self::assertFalse($user->groups->isInitialized()); + self::assertEquals(2, count($user->groups)); $this->useCMSGroupPrefixFilter(); - $this->assertEquals(1, count($user->groups)); + self::assertEquals(1, count($user->groups)); } public function testManyToMany_ExtraLazyContainsWithFilter() @@ -601,12 +601,12 @@ public function testManyToMany_ExtraLazyContainsWithFilter() $user = $this->_em->find(CmsUser::class, $this->userId2); $filteredArticle = $this->_em->find(CmsGroup::class, $this->groupId2); - $this->assertFalse($user->groups->isInitialized()); - $this->assertTrue($user->groups->contains($filteredArticle)); + self::assertFalse($user->groups->isInitialized()); + self::assertTrue($user->groups->contains($filteredArticle)); $this->useCMSGroupPrefixFilter(); - $this->assertFalse($user->groups->contains($filteredArticle)); + self::assertFalse($user->groups->contains($filteredArticle)); } public function testManyToMany_ExtraLazySliceWithFilter() @@ -614,12 +614,12 @@ public function testManyToMany_ExtraLazySliceWithFilter() $this->loadLazyFixtureData(); $user = $this->_em->find(CmsUser::class, $this->userId2); - $this->assertFalse($user->groups->isInitialized()); - $this->assertEquals(2, count($user->groups->slice(0,10))); + self::assertFalse($user->groups->isInitialized()); + self::assertEquals(2, count($user->groups->slice(0,10))); $this->useCMSGroupPrefixFilter(); - $this->assertEquals(1, count($user->groups->slice(0,10))); + self::assertEquals(1, count($user->groups->slice(0,10))); } private function loadFixtureData() @@ -690,34 +690,34 @@ public function testJoinSubclassPersister_FilterOnlyOnRootTableWhenFetchingSubEn { $this->loadCompanyJoinedSubclassFixtureData(); // Persister - $this->assertEquals(2, count($this->_em->getRepository(CompanyManager::class)->findAll())); + self::assertEquals(2, count($this->_em->getRepository(CompanyManager::class)->findAll())); // SQLWalker - $this->assertEquals(2, count($this->_em->createQuery("SELECT cm FROM Doctrine\Tests\Models\Company\CompanyManager cm")->getResult())); + self::assertEquals(2, count($this->_em->createQuery("SELECT cm FROM Doctrine\Tests\Models\Company\CompanyManager cm")->getResult())); // Enable the filter $this->usePersonNameFilter('Guilh%'); $managers = $this->_em->getRepository(CompanyManager::class)->findAll(); - $this->assertEquals(1, count($managers)); - $this->assertEquals("Guilherme", $managers[0]->getName()); + self::assertEquals(1, count($managers)); + self::assertEquals("Guilherme", $managers[0]->getName()); - $this->assertEquals(1, count($this->_em->createQuery("SELECT cm FROM Doctrine\Tests\Models\Company\CompanyManager cm")->getResult())); + self::assertEquals(1, count($this->_em->createQuery("SELECT cm FROM Doctrine\Tests\Models\Company\CompanyManager cm")->getResult())); } public function testJoinSubclassPersister_FilterOnlyOnRootTableWhenFetchingRootEntity() { $this->loadCompanyJoinedSubclassFixtureData(); - $this->assertEquals(3, count($this->_em->getRepository(CompanyPerson::class)->findAll())); - $this->assertEquals(3, count($this->_em->createQuery("SELECT cp FROM Doctrine\Tests\Models\Company\CompanyPerson cp")->getResult())); + self::assertEquals(3, count($this->_em->getRepository(CompanyPerson::class)->findAll())); + self::assertEquals(3, count($this->_em->createQuery("SELECT cp FROM Doctrine\Tests\Models\Company\CompanyPerson cp")->getResult())); // Enable the filter $this->usePersonNameFilter('Guilh%'); $persons = $this->_em->getRepository(CompanyPerson::class)->findAll(); - $this->assertEquals(1, count($persons)); - $this->assertEquals("Guilherme", $persons[0]->getName()); + self::assertEquals(1, count($persons)); + self::assertEquals("Guilherme", $persons[0]->getName()); - $this->assertEquals(1, count($this->_em->createQuery("SELECT cp FROM Doctrine\Tests\Models\Company\CompanyPerson cp")->getResult())); + self::assertEquals(1, count($this->_em->createQuery("SELECT cp FROM Doctrine\Tests\Models\Company\CompanyPerson cp")->getResult())); } private function loadCompanyJoinedSubclassFixtureData() @@ -748,9 +748,9 @@ public function testSingleTableInheritance_FilterOnlyOnRootTableWhenFetchingSubE { $this->loadCompanySingleTableInheritanceFixtureData(); // Persister - $this->assertEquals(2, count($this->_em->getRepository(CompanyFlexUltraContract::class)->findAll())); + self::assertEquals(2, count($this->_em->getRepository(CompanyFlexUltraContract::class)->findAll())); // SQLWalker - $this->assertEquals(2, count($this->_em->createQuery("SELECT cfc FROM Doctrine\Tests\Models\Company\CompanyFlexUltraContract cfc")->getResult())); + self::assertEquals(2, count($this->_em->createQuery("SELECT cfc FROM Doctrine\Tests\Models\Company\CompanyFlexUltraContract cfc")->getResult())); // Enable the filter $conf = $this->_em->getConfiguration(); @@ -759,15 +759,15 @@ public function testSingleTableInheritance_FilterOnlyOnRootTableWhenFetchingSubE ->enable("completed_contract") ->setParameter("completed", true, DBALType::BOOLEAN); - $this->assertEquals(1, count($this->_em->getRepository(CompanyFlexUltraContract::class)->findAll())); - $this->assertEquals(1, count($this->_em->createQuery("SELECT cfc FROM Doctrine\Tests\Models\Company\CompanyFlexUltraContract cfc")->getResult())); + self::assertEquals(1, count($this->_em->getRepository(CompanyFlexUltraContract::class)->findAll())); + self::assertEquals(1, count($this->_em->createQuery("SELECT cfc FROM Doctrine\Tests\Models\Company\CompanyFlexUltraContract cfc")->getResult())); } public function testSingleTableInheritance_FilterOnlyOnRootTableWhenFetchingRootEntity() { $this->loadCompanySingleTableInheritanceFixtureData(); - $this->assertEquals(4, count($this->_em->getRepository(CompanyFlexContract::class)->findAll())); - $this->assertEquals(4, count($this->_em->createQuery("SELECT cfc FROM Doctrine\Tests\Models\Company\CompanyFlexContract cfc")->getResult())); + self::assertEquals(4, count($this->_em->getRepository(CompanyFlexContract::class)->findAll())); + self::assertEquals(4, count($this->_em->createQuery("SELECT cfc FROM Doctrine\Tests\Models\Company\CompanyFlexContract cfc")->getResult())); // Enable the filter $conf = $this->_em->getConfiguration(); @@ -776,8 +776,8 @@ public function testSingleTableInheritance_FilterOnlyOnRootTableWhenFetchingRoot ->enable("completed_contract") ->setParameter("completed", true, DBALType::BOOLEAN); - $this->assertEquals(2, count($this->_em->getRepository(CompanyFlexContract::class)->findAll())); - $this->assertEquals(2, count($this->_em->createQuery("SELECT cfc FROM Doctrine\Tests\Models\Company\CompanyFlexContract cfc")->getResult())); + self::assertEquals(2, count($this->_em->getRepository(CompanyFlexContract::class)->findAll())); + self::assertEquals(2, count($this->_em->createQuery("SELECT cfc FROM Doctrine\Tests\Models\Company\CompanyFlexContract cfc")->getResult())); } private function loadCompanySingleTableInheritanceFixtureData() @@ -842,14 +842,14 @@ public function testManyToMany_ExtraLazyCountWithFilterOnSTI() $manager = $this->_em->find(CompanyManager::class, $this->managerId); - $this->assertFalse($manager->managedContracts->isInitialized()); - $this->assertEquals(4, count($manager->managedContracts)); + self::assertFalse($manager->managedContracts->isInitialized()); + self::assertEquals(4, count($manager->managedContracts)); // Enable the filter $this->useCompletedContractFilter(); - $this->assertFalse($manager->managedContracts->isInitialized()); - $this->assertEquals(2, count($manager->managedContracts)); + self::assertFalse($manager->managedContracts->isInitialized()); + self::assertEquals(2, count($manager->managedContracts)); } public function testManyToMany_ExtraLazyContainsWithFilterOnSTI() @@ -860,16 +860,16 @@ public function testManyToMany_ExtraLazyContainsWithFilterOnSTI() $contract1 = $this->_em->find(CompanyContract::class, $this->contractId1); $contract2 = $this->_em->find(CompanyContract::class, $this->contractId2); - $this->assertFalse($manager->managedContracts->isInitialized()); - $this->assertTrue($manager->managedContracts->contains($contract1)); - $this->assertTrue($manager->managedContracts->contains($contract2)); + self::assertFalse($manager->managedContracts->isInitialized()); + self::assertTrue($manager->managedContracts->contains($contract1)); + self::assertTrue($manager->managedContracts->contains($contract2)); // Enable the filter $this->useCompletedContractFilter(); - $this->assertFalse($manager->managedContracts->isInitialized()); - $this->assertFalse($manager->managedContracts->contains($contract1)); - $this->assertTrue($manager->managedContracts->contains($contract2)); + self::assertFalse($manager->managedContracts->isInitialized()); + self::assertFalse($manager->managedContracts->contains($contract1)); + self::assertTrue($manager->managedContracts->contains($contract2)); } public function testManyToMany_ExtraLazySliceWithFilterOnSTI() @@ -878,14 +878,14 @@ public function testManyToMany_ExtraLazySliceWithFilterOnSTI() $manager = $this->_em->find(CompanyManager::class, $this->managerId); - $this->assertFalse($manager->managedContracts->isInitialized()); - $this->assertEquals(4, count($manager->managedContracts->slice(0, 10))); + self::assertFalse($manager->managedContracts->isInitialized()); + self::assertEquals(4, count($manager->managedContracts->slice(0, 10))); // Enable the filter $this->useCompletedContractFilter(); - $this->assertFalse($manager->managedContracts->isInitialized()); - $this->assertEquals(2, count($manager->managedContracts->slice(0, 10))); + self::assertFalse($manager->managedContracts->isInitialized()); + self::assertEquals(2, count($manager->managedContracts->slice(0, 10))); } private function usePersonNameFilter($name) @@ -904,14 +904,14 @@ public function testManyToMany_ExtraLazyCountWithFilterOnCTI() $contract = $this->_em->find(CompanyFlexUltraContract::class, $this->contractId1); - $this->assertFalse($contract->managers->isInitialized()); - $this->assertEquals(2, count($contract->managers)); + self::assertFalse($contract->managers->isInitialized()); + self::assertEquals(2, count($contract->managers)); // Enable the filter $this->usePersonNameFilter('Benjamin'); - $this->assertFalse($contract->managers->isInitialized()); - $this->assertEquals(1, count($contract->managers)); + self::assertFalse($contract->managers->isInitialized()); + self::assertEquals(1, count($contract->managers)); } public function testManyToMany_ExtraLazyContainsWithFilterOnCTI() @@ -922,16 +922,16 @@ public function testManyToMany_ExtraLazyContainsWithFilterOnCTI() $manager1 = $this->_em->find(CompanyManager::class, $this->managerId); $manager2 = $this->_em->find(CompanyManager::class, $this->managerId2); - $this->assertFalse($contract->managers->isInitialized()); - $this->assertTrue($contract->managers->contains($manager1)); - $this->assertTrue($contract->managers->contains($manager2)); + self::assertFalse($contract->managers->isInitialized()); + self::assertTrue($contract->managers->contains($manager1)); + self::assertTrue($contract->managers->contains($manager2)); // Enable the filter $this->usePersonNameFilter('Benjamin'); - $this->assertFalse($contract->managers->isInitialized()); - $this->assertFalse($contract->managers->contains($manager1)); - $this->assertTrue($contract->managers->contains($manager2)); + self::assertFalse($contract->managers->isInitialized()); + self::assertFalse($contract->managers->contains($manager1)); + self::assertTrue($contract->managers->contains($manager2)); } public function testManyToMany_ExtraLazySliceWithFilterOnCTI() @@ -940,14 +940,14 @@ public function testManyToMany_ExtraLazySliceWithFilterOnCTI() $contract = $this->_em->find(CompanyFlexUltraContract::class, $this->contractId1); - $this->assertFalse($contract->managers->isInitialized()); - $this->assertEquals(2, count($contract->managers->slice(0, 10))); + self::assertFalse($contract->managers->isInitialized()); + self::assertEquals(2, count($contract->managers->slice(0, 10))); // Enable the filter $this->usePersonNameFilter('Benjamin'); - $this->assertFalse($contract->managers->isInitialized()); - $this->assertEquals(1, count($contract->managers->slice(0, 10))); + self::assertFalse($contract->managers->isInitialized()); + self::assertEquals(1, count($contract->managers->slice(0, 10))); } public function testOneToMany_ExtraLazyCountWithFilterOnSTI() @@ -956,14 +956,14 @@ public function testOneToMany_ExtraLazyCountWithFilterOnSTI() $manager = $this->_em->find(CompanyManager::class, $this->managerId); - $this->assertFalse($manager->soldContracts->isInitialized()); - $this->assertEquals(2, count($manager->soldContracts)); + self::assertFalse($manager->soldContracts->isInitialized()); + self::assertEquals(2, count($manager->soldContracts)); // Enable the filter $this->useCompletedContractFilter(); - $this->assertFalse($manager->soldContracts->isInitialized()); - $this->assertEquals(1, count($manager->soldContracts)); + self::assertFalse($manager->soldContracts->isInitialized()); + self::assertEquals(1, count($manager->soldContracts)); } public function testOneToMany_ExtraLazyContainsWithFilterOnSTI() @@ -974,16 +974,16 @@ public function testOneToMany_ExtraLazyContainsWithFilterOnSTI() $contract1 = $this->_em->find(CompanyContract::class, $this->contractId1); $contract2 = $this->_em->find(CompanyContract::class, $this->contractId2); - $this->assertFalse($manager->soldContracts->isInitialized()); - $this->assertTrue($manager->soldContracts->contains($contract1)); - $this->assertTrue($manager->soldContracts->contains($contract2)); + self::assertFalse($manager->soldContracts->isInitialized()); + self::assertTrue($manager->soldContracts->contains($contract1)); + self::assertTrue($manager->soldContracts->contains($contract2)); // Enable the filter $this->useCompletedContractFilter(); - $this->assertFalse($manager->soldContracts->isInitialized()); - $this->assertFalse($manager->soldContracts->contains($contract1)); - $this->assertTrue($manager->soldContracts->contains($contract2)); + self::assertFalse($manager->soldContracts->isInitialized()); + self::assertFalse($manager->soldContracts->contains($contract1)); + self::assertTrue($manager->soldContracts->contains($contract2)); } public function testOneToMany_ExtraLazySliceWithFilterOnSTI() @@ -993,14 +993,14 @@ public function testOneToMany_ExtraLazySliceWithFilterOnSTI() $manager = $this->_em->find(CompanyManager::class, $this->managerId); - $this->assertFalse($manager->soldContracts->isInitialized()); - $this->assertEquals(2, count($manager->soldContracts->slice(0, 10))); + self::assertFalse($manager->soldContracts->isInitialized()); + self::assertEquals(2, count($manager->soldContracts->slice(0, 10))); // Enable the filter $this->useCompletedContractFilter(); - $this->assertFalse($manager->soldContracts->isInitialized()); - $this->assertEquals(1, count($manager->soldContracts->slice(0, 10))); + self::assertFalse($manager->soldContracts->isInitialized()); + self::assertEquals(1, count($manager->soldContracts->slice(0, 10))); } private function loadCompanyOrganizationEventJoinedSubclassFixtureData() { @@ -1041,14 +1041,14 @@ public function testOneToMany_ExtraLazyCountWithFilterOnCTI() $organization = $this->_em->find(CompanyOrganization::class, $this->organizationId); - $this->assertFalse($organization->events->isInitialized()); - $this->assertEquals(2, count($organization->events)); + self::assertFalse($organization->events->isInitialized()); + self::assertEquals(2, count($organization->events)); // Enable the filter $this->useCompanyEventIdFilter(); - $this->assertFalse($organization->events->isInitialized()); - $this->assertEquals(1, count($organization->events)); + self::assertFalse($organization->events->isInitialized()); + self::assertEquals(1, count($organization->events)); } public function testOneToMany_ExtraLazyContainsWithFilterOnCTI() @@ -1060,16 +1060,16 @@ public function testOneToMany_ExtraLazyContainsWithFilterOnCTI() $event1 = $this->_em->find(CompanyEvent::class, $this->eventId1); $event2 = $this->_em->find(CompanyEvent::class, $this->eventId2); - $this->assertFalse($organization->events->isInitialized()); - $this->assertTrue($organization->events->contains($event1)); - $this->assertTrue($organization->events->contains($event2)); + self::assertFalse($organization->events->isInitialized()); + self::assertTrue($organization->events->contains($event1)); + self::assertTrue($organization->events->contains($event2)); // Enable the filter $this->useCompanyEventIdFilter(); - $this->assertFalse($organization->events->isInitialized()); - $this->assertFalse($organization->events->contains($event1)); - $this->assertTrue($organization->events->contains($event2)); + self::assertFalse($organization->events->isInitialized()); + self::assertFalse($organization->events->contains($event1)); + self::assertTrue($organization->events->contains($event2)); } public function testOneToMany_ExtraLazySliceWithFilterOnCTI() @@ -1078,14 +1078,14 @@ public function testOneToMany_ExtraLazySliceWithFilterOnCTI() $organization = $this->_em->find(CompanyOrganization::class, $this->organizationId); - $this->assertFalse($organization->events->isInitialized()); - $this->assertEquals(2, count($organization->events->slice(0, 10))); + self::assertFalse($organization->events->isInitialized()); + self::assertEquals(2, count($organization->events->slice(0, 10))); // Enable the filter $this->useCompanyEventIdFilter(); - $this->assertFalse($organization->events->isInitialized()); - $this->assertEquals(1, count($organization->events->slice(0, 10))); + self::assertFalse($organization->events->isInitialized()); + self::assertEquals(1, count($organization->events->slice(0, 10))); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/CompanySchemaTest.php b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/CompanySchemaTest.php index 1a36591cf53..74ea46df75c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/CompanySchemaTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/CompanySchemaTest.php @@ -27,7 +27,7 @@ public function testGeneratedSchema() { $schema = $this->_em->getConnection()->getSchemaManager()->createSchema(); - $this->assertTrue($schema->hasTable('company_contracts')); + self::assertTrue($schema->hasTable('company_contracts')); return $schema; } @@ -41,14 +41,14 @@ public function testSingleTableInheritance(Schema $schema) $table = $schema->getTable('company_contracts'); // Check nullability constraints - $this->assertTrue($table->getColumn('id')->getNotnull()); - $this->assertTrue($table->getColumn('completed')->getNotnull()); - $this->assertFalse($table->getColumn('salesPerson_id')->getNotnull()); - $this->assertTrue($table->getColumn('discr')->getNotnull()); - $this->assertFalse($table->getColumn('fixPrice')->getNotnull()); - $this->assertFalse($table->getColumn('hoursWorked')->getNotnull()); - $this->assertFalse($table->getColumn('pricePerHour')->getNotnull()); - $this->assertFalse($table->getColumn('maxPrice')->getNotnull()); + self::assertTrue($table->getColumn('id')->getNotnull()); + self::assertTrue($table->getColumn('completed')->getNotnull()); + self::assertFalse($table->getColumn('salesPerson_id')->getNotnull()); + self::assertTrue($table->getColumn('discr')->getNotnull()); + self::assertFalse($table->getColumn('fixPrice')->getNotnull()); + self::assertFalse($table->getColumn('hoursWorked')->getNotnull()); + self::assertFalse($table->getColumn('pricePerHour')->getNotnull()); + self::assertFalse($table->getColumn('maxPrice')->getNotnull()); } /** @@ -65,6 +65,6 @@ public function testDropPartSchemaWithForeignKeys() $this->_em->getClassMetadata(CompanyManager::class), ] ); - $this->assertEquals(4, count($sql)); + self::assertEquals(4, count($sql)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/DBAL483Test.php b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/DBAL483Test.php index 8a874c478a7..705f9b2ad30 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/DBAL483Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/DBAL483Test.php @@ -31,7 +31,7 @@ public function testDefaultValueIsComparedCorrectly() return strpos($sql, 'DBAL483') !== false; }); - $this->assertEquals(0, count($updateSql)); + self::assertEquals(0, count($updateSql)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/DDC214Test.php b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/DDC214Test.php index 8c414b119a3..72f1213aac6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/DDC214Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/DDC214Test.php @@ -41,7 +41,7 @@ public function testCmsAddressModel() Models\CMS\CmsEmail::class, ]; - $this->assertCreatedSchemaNeedsNoUpdates($this->classes); + self::assertCreatedSchemaNeedsNoUpdates($this->classes); } /** @@ -60,7 +60,7 @@ public function testCompanyModel() Models\Company\CompanyCar::class ]; - $this->assertCreatedSchemaNeedsNoUpdates($this->classes); + self::assertCreatedSchemaNeedsNoUpdates($this->classes); } public function assertCreatedSchemaNeedsNoUpdates($classes) @@ -87,6 +87,6 @@ public function assertCreatedSchemaNeedsNoUpdates($classes) $sql = $schemaDiff->toSql($this->_em->getConnection()->getDatabasePlatform()); $sql = array_filter($sql, function($sql) { return strpos($sql, 'DROP') === false; }); - $this->assertEquals(0, count($sql), "SQL: " . implode(PHP_EOL, $sql)); + self::assertEquals(0, count($sql), "SQL: " . implode(PHP_EOL, $sql)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/MySqlSchemaToolTest.php b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/MySqlSchemaToolTest.php index 2deedb37aa6..1ca25b2cf63 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/MySqlSchemaToolTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/MySqlSchemaToolTest.php @@ -29,23 +29,23 @@ public function testGetCreateSchemaSql() $tool = new SchemaTool($this->_em); $sql = $tool->getCreateSchemaSql($classes); - $this->assertEquals("CREATE TABLE cms_groups (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(50) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[0]); - $this->assertEquals("CREATE TABLE cms_users (id INT AUTO_INCREMENT NOT NULL, email_id INT DEFAULT NULL, status VARCHAR(50) DEFAULT NULL, username VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_3AF03EC5F85E0677 (username), UNIQUE INDEX UNIQ_3AF03EC5A832C1C9 (email_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[1]); - $this->assertEquals("CREATE TABLE cms_users_groups (user_id INT NOT NULL, group_id INT NOT NULL, INDEX IDX_7EA9409AA76ED395 (user_id), INDEX IDX_7EA9409AFE54D947 (group_id), PRIMARY KEY(user_id, group_id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[2]); - $this->assertEquals("CREATE TABLE cms_users_tags (user_id INT NOT NULL, tag_id INT NOT NULL, INDEX IDX_93F5A1ADA76ED395 (user_id), INDEX IDX_93F5A1ADBAD26311 (tag_id), PRIMARY KEY(user_id, tag_id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[3]); - $this->assertEquals("CREATE TABLE cms_tags (id INT AUTO_INCREMENT NOT NULL, tag_name VARCHAR(50) DEFAULT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[4]); - $this->assertEquals("CREATE TABLE cms_addresses (id INT AUTO_INCREMENT NOT NULL, user_id INT DEFAULT NULL, country VARCHAR(50) NOT NULL, zip VARCHAR(50) NOT NULL, city VARCHAR(50) NOT NULL, UNIQUE INDEX UNIQ_ACAC157BA76ED395 (user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[5]); - $this->assertEquals("CREATE TABLE cms_emails (id INT AUTO_INCREMENT NOT NULL, email VARCHAR(250) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[6]); - $this->assertEquals("CREATE TABLE cms_phonenumbers (phonenumber VARCHAR(50) NOT NULL, user_id INT DEFAULT NULL, INDEX IDX_F21F790FA76ED395 (user_id), PRIMARY KEY(phonenumber)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[7]); - $this->assertEquals("ALTER TABLE cms_users ADD CONSTRAINT FK_3AF03EC5A832C1C9 FOREIGN KEY (email_id) REFERENCES cms_emails (id)", $sql[8]); - $this->assertEquals("ALTER TABLE cms_users_groups ADD CONSTRAINT FK_7EA9409AA76ED395 FOREIGN KEY (user_id) REFERENCES cms_users (id)", $sql[9]); - $this->assertEquals("ALTER TABLE cms_users_groups ADD CONSTRAINT FK_7EA9409AFE54D947 FOREIGN KEY (group_id) REFERENCES cms_groups (id)", $sql[10]); - $this->assertEquals("ALTER TABLE cms_users_tags ADD CONSTRAINT FK_93F5A1ADA76ED395 FOREIGN KEY (user_id) REFERENCES cms_users (id)", $sql[11]); - $this->assertEquals("ALTER TABLE cms_users_tags ADD CONSTRAINT FK_93F5A1ADBAD26311 FOREIGN KEY (tag_id) REFERENCES cms_tags (id)", $sql[12]); - $this->assertEquals("ALTER TABLE cms_addresses ADD CONSTRAINT FK_ACAC157BA76ED395 FOREIGN KEY (user_id) REFERENCES cms_users (id)", $sql[13]); - $this->assertEquals("ALTER TABLE cms_phonenumbers ADD CONSTRAINT FK_F21F790FA76ED395 FOREIGN KEY (user_id) REFERENCES cms_users (id)", $sql[14]); - - $this->assertEquals(15, count($sql)); + self::assertEquals("CREATE TABLE cms_groups (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(50) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[0]); + self::assertEquals("CREATE TABLE cms_users (id INT AUTO_INCREMENT NOT NULL, email_id INT DEFAULT NULL, status VARCHAR(50) DEFAULT NULL, username VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_3AF03EC5F85E0677 (username), UNIQUE INDEX UNIQ_3AF03EC5A832C1C9 (email_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[1]); + self::assertEquals("CREATE TABLE cms_users_groups (user_id INT NOT NULL, group_id INT NOT NULL, INDEX IDX_7EA9409AA76ED395 (user_id), INDEX IDX_7EA9409AFE54D947 (group_id), PRIMARY KEY(user_id, group_id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[2]); + self::assertEquals("CREATE TABLE cms_users_tags (user_id INT NOT NULL, tag_id INT NOT NULL, INDEX IDX_93F5A1ADA76ED395 (user_id), INDEX IDX_93F5A1ADBAD26311 (tag_id), PRIMARY KEY(user_id, tag_id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[3]); + self::assertEquals("CREATE TABLE cms_tags (id INT AUTO_INCREMENT NOT NULL, tag_name VARCHAR(50) DEFAULT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[4]); + self::assertEquals("CREATE TABLE cms_addresses (id INT AUTO_INCREMENT NOT NULL, user_id INT DEFAULT NULL, country VARCHAR(50) NOT NULL, zip VARCHAR(50) NOT NULL, city VARCHAR(50) NOT NULL, UNIQUE INDEX UNIQ_ACAC157BA76ED395 (user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[5]); + self::assertEquals("CREATE TABLE cms_emails (id INT AUTO_INCREMENT NOT NULL, email VARCHAR(250) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[6]); + self::assertEquals("CREATE TABLE cms_phonenumbers (phonenumber VARCHAR(50) NOT NULL, user_id INT DEFAULT NULL, INDEX IDX_F21F790FA76ED395 (user_id), PRIMARY KEY(phonenumber)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[7]); + self::assertEquals("ALTER TABLE cms_users ADD CONSTRAINT FK_3AF03EC5A832C1C9 FOREIGN KEY (email_id) REFERENCES cms_emails (id)", $sql[8]); + self::assertEquals("ALTER TABLE cms_users_groups ADD CONSTRAINT FK_7EA9409AA76ED395 FOREIGN KEY (user_id) REFERENCES cms_users (id)", $sql[9]); + self::assertEquals("ALTER TABLE cms_users_groups ADD CONSTRAINT FK_7EA9409AFE54D947 FOREIGN KEY (group_id) REFERENCES cms_groups (id)", $sql[10]); + self::assertEquals("ALTER TABLE cms_users_tags ADD CONSTRAINT FK_93F5A1ADA76ED395 FOREIGN KEY (user_id) REFERENCES cms_users (id)", $sql[11]); + self::assertEquals("ALTER TABLE cms_users_tags ADD CONSTRAINT FK_93F5A1ADBAD26311 FOREIGN KEY (tag_id) REFERENCES cms_tags (id)", $sql[12]); + self::assertEquals("ALTER TABLE cms_addresses ADD CONSTRAINT FK_ACAC157BA76ED395 FOREIGN KEY (user_id) REFERENCES cms_users (id)", $sql[13]); + self::assertEquals("ALTER TABLE cms_phonenumbers ADD CONSTRAINT FK_F21F790FA76ED395 FOREIGN KEY (user_id) REFERENCES cms_users (id)", $sql[14]); + + self::assertEquals(15, count($sql)); } public function testGetCreateSchemaSql2() @@ -57,8 +57,8 @@ public function testGetCreateSchemaSql2() $tool = new SchemaTool($this->_em); $sql = $tool->getCreateSchemaSql($classes); - $this->assertEquals(1, count($sql)); - $this->assertEquals("CREATE TABLE decimal_model (id INT AUTO_INCREMENT NOT NULL, `decimal` NUMERIC(5, 2) NOT NULL, `high_scale` NUMERIC(14, 4) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[0]); + self::assertEquals(1, count($sql)); + self::assertEquals("CREATE TABLE decimal_model (id INT AUTO_INCREMENT NOT NULL, `decimal` NUMERIC(5, 2) NOT NULL, `high_scale` NUMERIC(14, 4) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[0]); } public function testGetCreateSchemaSql3() @@ -70,8 +70,8 @@ public function testGetCreateSchemaSql3() $tool = new SchemaTool($this->_em); $sql = $tool->getCreateSchemaSql($classes); - $this->assertEquals(1, count($sql)); - $this->assertEquals("CREATE TABLE boolean_model (id INT AUTO_INCREMENT NOT NULL, booleanField TINYINT(1) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[0]); + self::assertEquals(1, count($sql)); + self::assertEquals("CREATE TABLE boolean_model (id INT AUTO_INCREMENT NOT NULL, booleanField TINYINT(1) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[0]); } /** @@ -86,7 +86,7 @@ public function testGetCreateSchemaSql4() $tool = new SchemaTool($this->_em); $sql = $tool->getCreateSchemaSql($classes); - $this->assertEquals(0, count($sql)); + self::assertEquals(0, count($sql)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php index 5ebf84c5644..f165661aa18 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php @@ -21,7 +21,7 @@ public function testPostgresMetadataSequenceIncrementedBy10() { $address = $this->_em->getClassMetadata(Models\CMS\CmsAddress::class); - $this->assertEquals(1, $address->sequenceGeneratorDefinition['allocationSize']); + self::assertEquals(1, $address->sequenceGeneratorDefinition['allocationSize']); } public function testGetCreateSchemaSql() @@ -36,31 +36,31 @@ public function testGetCreateSchemaSql() $sql = $tool->getCreateSchemaSql($classes); $sqlCount = count($sql); - $this->assertEquals("CREATE TABLE cms_addresses (id INT NOT NULL, user_id INT DEFAULT NULL, country VARCHAR(50) NOT NULL, zip VARCHAR(50) NOT NULL, city VARCHAR(50) NOT NULL, PRIMARY KEY(id))", array_shift($sql)); - $this->assertEquals("CREATE UNIQUE INDEX UNIQ_ACAC157BA76ED395 ON cms_addresses (user_id)", array_shift($sql)); - $this->assertEquals("CREATE TABLE cms_users (id INT NOT NULL, email_id INT DEFAULT NULL, status VARCHAR(50) DEFAULT NULL, username VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id))", array_shift($sql)); - $this->assertEquals("CREATE UNIQUE INDEX UNIQ_3AF03EC5F85E0677 ON cms_users (username)", array_shift($sql)); - $this->assertEquals("CREATE UNIQUE INDEX UNIQ_3AF03EC5A832C1C9 ON cms_users (email_id)", array_shift($sql)); - $this->assertEquals("CREATE TABLE cms_users_groups (user_id INT NOT NULL, group_id INT NOT NULL, PRIMARY KEY(user_id, group_id))", array_shift($sql)); - $this->assertEquals("CREATE INDEX IDX_7EA9409AA76ED395 ON cms_users_groups (user_id)", array_shift($sql)); - $this->assertEquals("CREATE INDEX IDX_7EA9409AFE54D947 ON cms_users_groups (group_id)", array_shift($sql)); - $this->assertEquals("CREATE TABLE cms_users_tags (user_id INT NOT NULL, tag_id INT NOT NULL, PRIMARY KEY(user_id, tag_id))", array_shift($sql)); - $this->assertEquals("CREATE INDEX IDX_93F5A1ADA76ED395 ON cms_users_tags (user_id)", array_shift($sql)); - $this->assertEquals("CREATE INDEX IDX_93F5A1ADBAD26311 ON cms_users_tags (tag_id)", array_shift($sql)); - $this->assertEquals("CREATE TABLE cms_phonenumbers (phonenumber VARCHAR(50) NOT NULL, user_id INT DEFAULT NULL, PRIMARY KEY(phonenumber))", array_shift($sql)); - $this->assertEquals("CREATE INDEX IDX_F21F790FA76ED395 ON cms_phonenumbers (user_id)", array_shift($sql)); - $this->assertEquals("CREATE SEQUENCE cms_addresses_id_seq INCREMENT BY 1 MINVALUE 1 START 1", array_shift($sql)); - $this->assertEquals("CREATE SEQUENCE cms_users_id_seq INCREMENT BY 1 MINVALUE 1 START 1", array_shift($sql)); - $this->assertEquals("ALTER TABLE cms_addresses ADD CONSTRAINT FK_ACAC157BA76ED395 FOREIGN KEY (user_id) REFERENCES cms_users (id) NOT DEFERRABLE INITIALLY IMMEDIATE", array_shift($sql)); - $this->assertEquals("ALTER TABLE cms_users ADD CONSTRAINT FK_3AF03EC5A832C1C9 FOREIGN KEY (email_id) REFERENCES cms_emails (id) NOT DEFERRABLE INITIALLY IMMEDIATE", array_shift($sql)); - $this->assertEquals("ALTER TABLE cms_users_groups ADD CONSTRAINT FK_7EA9409AA76ED395 FOREIGN KEY (user_id) REFERENCES cms_users (id) NOT DEFERRABLE INITIALLY IMMEDIATE", array_shift($sql)); - $this->assertEquals("ALTER TABLE cms_users_groups ADD CONSTRAINT FK_7EA9409AFE54D947 FOREIGN KEY (group_id) REFERENCES cms_groups (id) NOT DEFERRABLE INITIALLY IMMEDIATE", array_shift($sql)); - $this->assertEquals("ALTER TABLE cms_users_tags ADD CONSTRAINT FK_93F5A1ADA76ED395 FOREIGN KEY (user_id) REFERENCES cms_users (id) NOT DEFERRABLE INITIALLY IMMEDIATE", array_shift($sql)); - $this->assertEquals("ALTER TABLE cms_users_tags ADD CONSTRAINT FK_93F5A1ADBAD26311 FOREIGN KEY (tag_id) REFERENCES cms_tags (id) NOT DEFERRABLE INITIALLY IMMEDIATE", array_shift($sql)); - $this->assertEquals("ALTER TABLE cms_phonenumbers ADD CONSTRAINT FK_F21F790FA76ED395 FOREIGN KEY (user_id) REFERENCES cms_users (id) NOT DEFERRABLE INITIALLY IMMEDIATE", array_shift($sql)); - - $this->assertEquals([], $sql, "SQL Array should be empty now."); - $this->assertEquals(22, $sqlCount, "Total of 22 queries should be executed"); + self::assertEquals("CREATE TABLE cms_addresses (id INT NOT NULL, user_id INT DEFAULT NULL, country VARCHAR(50) NOT NULL, zip VARCHAR(50) NOT NULL, city VARCHAR(50) NOT NULL, PRIMARY KEY(id))", array_shift($sql)); + self::assertEquals("CREATE UNIQUE INDEX UNIQ_ACAC157BA76ED395 ON cms_addresses (user_id)", array_shift($sql)); + self::assertEquals("CREATE TABLE cms_users (id INT NOT NULL, email_id INT DEFAULT NULL, status VARCHAR(50) DEFAULT NULL, username VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id))", array_shift($sql)); + self::assertEquals("CREATE UNIQUE INDEX UNIQ_3AF03EC5F85E0677 ON cms_users (username)", array_shift($sql)); + self::assertEquals("CREATE UNIQUE INDEX UNIQ_3AF03EC5A832C1C9 ON cms_users (email_id)", array_shift($sql)); + self::assertEquals("CREATE TABLE cms_users_groups (user_id INT NOT NULL, group_id INT NOT NULL, PRIMARY KEY(user_id, group_id))", array_shift($sql)); + self::assertEquals("CREATE INDEX IDX_7EA9409AA76ED395 ON cms_users_groups (user_id)", array_shift($sql)); + self::assertEquals("CREATE INDEX IDX_7EA9409AFE54D947 ON cms_users_groups (group_id)", array_shift($sql)); + self::assertEquals("CREATE TABLE cms_users_tags (user_id INT NOT NULL, tag_id INT NOT NULL, PRIMARY KEY(user_id, tag_id))", array_shift($sql)); + self::assertEquals("CREATE INDEX IDX_93F5A1ADA76ED395 ON cms_users_tags (user_id)", array_shift($sql)); + self::assertEquals("CREATE INDEX IDX_93F5A1ADBAD26311 ON cms_users_tags (tag_id)", array_shift($sql)); + self::assertEquals("CREATE TABLE cms_phonenumbers (phonenumber VARCHAR(50) NOT NULL, user_id INT DEFAULT NULL, PRIMARY KEY(phonenumber))", array_shift($sql)); + self::assertEquals("CREATE INDEX IDX_F21F790FA76ED395 ON cms_phonenumbers (user_id)", array_shift($sql)); + self::assertEquals("CREATE SEQUENCE cms_addresses_id_seq INCREMENT BY 1 MINVALUE 1 START 1", array_shift($sql)); + self::assertEquals("CREATE SEQUENCE cms_users_id_seq INCREMENT BY 1 MINVALUE 1 START 1", array_shift($sql)); + self::assertEquals("ALTER TABLE cms_addresses ADD CONSTRAINT FK_ACAC157BA76ED395 FOREIGN KEY (user_id) REFERENCES cms_users (id) NOT DEFERRABLE INITIALLY IMMEDIATE", array_shift($sql)); + self::assertEquals("ALTER TABLE cms_users ADD CONSTRAINT FK_3AF03EC5A832C1C9 FOREIGN KEY (email_id) REFERENCES cms_emails (id) NOT DEFERRABLE INITIALLY IMMEDIATE", array_shift($sql)); + self::assertEquals("ALTER TABLE cms_users_groups ADD CONSTRAINT FK_7EA9409AA76ED395 FOREIGN KEY (user_id) REFERENCES cms_users (id) NOT DEFERRABLE INITIALLY IMMEDIATE", array_shift($sql)); + self::assertEquals("ALTER TABLE cms_users_groups ADD CONSTRAINT FK_7EA9409AFE54D947 FOREIGN KEY (group_id) REFERENCES cms_groups (id) NOT DEFERRABLE INITIALLY IMMEDIATE", array_shift($sql)); + self::assertEquals("ALTER TABLE cms_users_tags ADD CONSTRAINT FK_93F5A1ADA76ED395 FOREIGN KEY (user_id) REFERENCES cms_users (id) NOT DEFERRABLE INITIALLY IMMEDIATE", array_shift($sql)); + self::assertEquals("ALTER TABLE cms_users_tags ADD CONSTRAINT FK_93F5A1ADBAD26311 FOREIGN KEY (tag_id) REFERENCES cms_tags (id) NOT DEFERRABLE INITIALLY IMMEDIATE", array_shift($sql)); + self::assertEquals("ALTER TABLE cms_phonenumbers ADD CONSTRAINT FK_F21F790FA76ED395 FOREIGN KEY (user_id) REFERENCES cms_users (id) NOT DEFERRABLE INITIALLY IMMEDIATE", array_shift($sql)); + + self::assertEquals([], $sql, "SQL Array should be empty now."); + self::assertEquals(22, $sqlCount, "Total of 22 queries should be executed"); } public function testGetCreateSchemaSql2() @@ -72,10 +72,10 @@ public function testGetCreateSchemaSql2() $tool = new SchemaTool($this->_em); $sql = $tool->getCreateSchemaSql($classes); - $this->assertEquals(2, count($sql)); + self::assertEquals(2, count($sql)); - $this->assertEquals('CREATE TABLE decimal_model (id INT NOT NULL, "decimal" NUMERIC(5, 2) NOT NULL, "high_scale" NUMERIC(14, 4) NOT NULL, PRIMARY KEY(id))', $sql[0]); - $this->assertEquals("CREATE SEQUENCE decimal_model_id_seq INCREMENT BY 1 MINVALUE 1 START 1", $sql[1]); + self::assertEquals('CREATE TABLE decimal_model (id INT NOT NULL, "decimal" NUMERIC(5, 2) NOT NULL, "high_scale" NUMERIC(14, 4) NOT NULL, PRIMARY KEY(id))', $sql[0]); + self::assertEquals("CREATE SEQUENCE decimal_model_id_seq INCREMENT BY 1 MINVALUE 1 START 1", $sql[1]); } public function testGetCreateSchemaSql3() @@ -87,9 +87,9 @@ public function testGetCreateSchemaSql3() $tool = new SchemaTool($this->_em); $sql = $tool->getCreateSchemaSql($classes); - $this->assertEquals(2, count($sql)); - $this->assertEquals("CREATE TABLE boolean_model (id INT NOT NULL, booleanField BOOLEAN NOT NULL, PRIMARY KEY(id))", $sql[0]); - $this->assertEquals("CREATE SEQUENCE boolean_model_id_seq INCREMENT BY 1 MINVALUE 1 START 1", $sql[1]); + self::assertEquals(2, count($sql)); + self::assertEquals("CREATE TABLE boolean_model (id INT NOT NULL, booleanField BOOLEAN NOT NULL, PRIMARY KEY(id))", $sql[0]); + self::assertEquals("CREATE SEQUENCE boolean_model_id_seq INCREMENT BY 1 MINVALUE 1 START 1", $sql[1]); } public function testGetDropSchemaSql() @@ -103,7 +103,7 @@ public function testGetDropSchemaSql() $tool = new SchemaTool($this->_em); $sql = $tool->getDropSchemaSQL($classes); - $this->assertEquals(17, count($sql)); + self::assertEquals(17, count($sql)); $dropSequenceSQLs = 0; @@ -112,7 +112,7 @@ public function testGetDropSchemaSql() $dropSequenceSQLs++; } } - $this->assertEquals(4, $dropSequenceSQLs, "Expect 4 sequences to be dropped."); + self::assertEquals(4, $dropSequenceSQLs, "Expect 4 sequences to be dropped."); } /** @@ -131,7 +131,7 @@ public function testUpdateSchemaWithPostgreSQLSchema() $sql = $tool->getUpdateSchemaSql($classes); $sql = array_filter($sql, function($sql) { return (strpos($sql, "DROP SEQUENCE stonewood.") === 0); }); - $this->assertCount(0, $sql, implode("\n", $sql)); + self::assertCount(0, $sql, implode("\n", $sql)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SchemaValidatorTest.php b/tests/Doctrine/Tests/ORM/Functional/SchemaValidatorTest.php index 5ab0f07c07e..c4314fe28bb 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SchemaValidatorTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SchemaValidatorTest.php @@ -70,7 +70,7 @@ public function testValidateModelSets(string $modelSet) foreach ($classes as $class) { $ce = $validator->validateClass($class); - $this->assertEmpty($ce, "Invalid Modelset: " . $modelSet . " class " . $class->name . ": ". implode("\n", $ce)); + self::assertEmpty($ce, "Invalid Modelset: " . $modelSet . " class " . $class->name . ": ". implode("\n", $ce)); } } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCompositePrimaryKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCompositePrimaryKeyTest.php index 9dff7df1d1c..f17098f85e5 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCompositePrimaryKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCompositePrimaryKeyTest.php @@ -31,29 +31,29 @@ public function testPutAndLoadCompositPrimaryKeyEntities() $flight->setDeparture(new \DateTime('tomorrow')); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); $this->_em->persist($flight); $this->_em->flush(); $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(Flight::class, $id)); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); + self::assertTrue($this->cache->containsEntity(Flight::class, $id)); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); $queryCount = $this->getCurrentQueryCount(); $flight = $this->_em->find(Flight::class, $id); $leavingFrom = $flight->getLeavingFrom(); $goingTo = $flight->getGoingTo(); - $this->assertInstanceOf(Flight::class, $flight); - $this->assertInstanceOf(City::class, $goingTo); - $this->assertInstanceOf(City::class, $leavingFrom); + self::assertInstanceOf(Flight::class, $flight); + self::assertInstanceOf(City::class, $goingTo); + self::assertInstanceOf(City::class, $leavingFrom); - $this->assertEquals($goingTo->getId(), $goingToId); - $this->assertEquals($leavingFrom->getId(), $leavingFromId); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($goingTo->getId(), $goingToId); + self::assertEquals($leavingFrom->getId(), $leavingFromId); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); } public function testRemoveCompositPrimaryKeyEntities() @@ -77,25 +77,25 @@ public function testRemoveCompositPrimaryKeyEntities() $flight->setDeparture(new \DateTime('tomorrow')); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); $this->_em->persist($flight); $this->_em->flush(); - $this->assertTrue($this->cache->containsEntity(Flight::class, $id)); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); + self::assertTrue($this->cache->containsEntity(Flight::class, $id)); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); $this->_em->remove($flight); $this->_em->flush(); $this->_em->clear(); - $this->assertFalse($this->cache->containsEntity(Flight::class, $id)); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); + self::assertFalse($this->cache->containsEntity(Flight::class, $id)); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); - $this->assertNull($this->_em->find(Flight::class, $id)); + self::assertNull($this->_em->find(Flight::class, $id)); } public function testUpdateCompositPrimaryKeyEntities() @@ -121,31 +121,31 @@ public function testUpdateCompositPrimaryKeyEntities() $flight->setDeparture($now); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); $this->_em->persist($flight); $this->_em->flush(); $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(Flight::class, $id)); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); + self::assertTrue($this->cache->containsEntity(Flight::class, $id)); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); $queryCount = $this->getCurrentQueryCount(); $flight = $this->_em->find(Flight::class, $id); $leavingFrom = $flight->getLeavingFrom(); $goingTo = $flight->getGoingTo(); - $this->assertInstanceOf(Flight::class, $flight); - $this->assertInstanceOf(City::class, $goingTo); - $this->assertInstanceOf(City::class, $leavingFrom); + self::assertInstanceOf(Flight::class, $flight); + self::assertInstanceOf(City::class, $goingTo); + self::assertInstanceOf(City::class, $leavingFrom); - $this->assertEquals($goingTo->getId(), $goingToId); - $this->assertEquals($flight->getDeparture(), $now); - $this->assertEquals($leavingFrom->getId(), $leavingFromId); - $this->assertEquals($leavingFrom->getId(), $leavingFromId); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($goingTo->getId(), $goingToId); + self::assertEquals($flight->getDeparture(), $now); + self::assertEquals($leavingFrom->getId(), $leavingFromId); + self::assertEquals($leavingFrom->getId(), $leavingFromId); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); $flight->setDeparture($tomorrow); @@ -153,23 +153,23 @@ public function testUpdateCompositPrimaryKeyEntities() $this->_em->flush(); $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(Flight::class, $id)); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); + self::assertTrue($this->cache->containsEntity(Flight::class, $id)); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); $queryCount = $this->getCurrentQueryCount(); $flight = $this->_em->find(Flight::class, $id); $leavingFrom = $flight->getLeavingFrom(); $goingTo = $flight->getGoingTo(); - $this->assertInstanceOf(Flight::class, $flight); - $this->assertInstanceOf(City::class, $goingTo); - $this->assertInstanceOf(City::class, $leavingFrom); + self::assertInstanceOf(Flight::class, $flight); + self::assertInstanceOf(City::class, $goingTo); + self::assertInstanceOf(City::class, $leavingFrom); - $this->assertEquals($goingTo->getId(), $goingToId); - $this->assertEquals($flight->getDeparture(), $tomorrow); - $this->assertEquals($leavingFrom->getId(), $leavingFromId); - $this->assertEquals($leavingFrom->getId(), $leavingFromId); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($goingTo->getId(), $goingToId); + self::assertEquals($flight->getDeparture(), $tomorrow); + self::assertEquals($leavingFrom->getId(), $leavingFromId); + self::assertEquals($leavingFrom->getId(), $leavingFromId); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCompositePrimaryKeyWithAssociationsTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCompositePrimaryKeyWithAssociationsTest.php index 8af09c9bf0d..9f82b3cd7c8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCompositePrimaryKeyWithAssociationsTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCompositePrimaryKeyWithAssociationsTest.php @@ -57,9 +57,9 @@ public function testFindByReturnsCachedEntity() $admin1Rome = $admin1Repo->findOneBy(['country' => 'IT', 'id' => 1]); - $this->assertEquals("Italy", $admin1Rome->country->name); - $this->assertEquals(2, count($admin1Rome->names)); - $this->assertEquals($queries + 3, $this->getCurrentQueryCount()); + self::assertEquals("Italy", $admin1Rome->country->name); + self::assertEquals(2, count($admin1Rome->names)); + self::assertEquals($queries + 3, $this->getCurrentQueryCount()); $this->_em->clear(); @@ -67,9 +67,9 @@ public function testFindByReturnsCachedEntity() $admin1Rome = $admin1Repo->findOneBy(['country' => 'IT', 'id' => 1]); - $this->assertEquals("Italy", $admin1Rome->country->name); - $this->assertEquals(2, count($admin1Rome->names)); - $this->assertEquals($queries, $this->getCurrentQueryCount()); + self::assertEquals("Italy", $admin1Rome->country->name); + self::assertEquals(2, count($admin1Rome->names)); + self::assertEquals($queries, $this->getCurrentQueryCount()); } private function evictRegions() diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php index 0f4ca383284..3f607676fbe 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php @@ -61,19 +61,19 @@ public function testBasicConcurrentEntityReadLock() $cacheId = new EntityCacheKey(Country::class, ['id'=>$countryId]); $region = $this->_em->getCache()->getEntityCacheRegion(Country::class); - $this->assertTrue($this->cache->containsEntity(Country::class, $countryId)); + self::assertTrue($this->cache->containsEntity(Country::class, $countryId)); /** @var \Doctrine\Tests\Mocks\ConcurrentRegionMock */ $region->setLock($cacheId, Lock::createLockRead()); // another proc lock the entity cache - $this->assertFalse($this->cache->containsEntity(Country::class, $countryId)); + self::assertFalse($this->cache->containsEntity(Country::class, $countryId)); $queryCount = $this->getCurrentQueryCount(); $country = $this->_em->find(Country::class, $countryId); - $this->assertInstanceOf(Country::class, $country); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertFalse($this->cache->containsEntity(Country::class, $countryId)); + self::assertInstanceOf(Country::class, $country); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertFalse($this->cache->containsEntity(Country::class, $countryId)); } public function testBasicConcurrentCollectionReadLock() @@ -88,10 +88,10 @@ public function testBasicConcurrentCollectionReadLock() $stateId = $this->states[0]->getId(); $state = $this->_em->find(State::class, $stateId); - $this->assertInstanceOf(State::class, $state); - $this->assertInstanceOf(Country::class, $state->getCountry()); - $this->assertNotNull($state->getCountry()->getName()); - $this->assertCount(2, $state->getCities()); + self::assertInstanceOf(State::class, $state); + self::assertInstanceOf(Country::class, $state->getCountry()); + self::assertNotNull($state->getCountry()->getName()); + self::assertCount(2, $state->getCities()); $this->_em->clear(); $this->secondLevelCacheLogger->clearStats(); @@ -100,31 +100,31 @@ public function testBasicConcurrentCollectionReadLock() $cacheId = new CollectionCacheKey(State::class, 'cities', ['id'=>$stateId]); $region = $this->_em->getCache()->getCollectionCacheRegion(State::class, 'cities'); - $this->assertTrue($this->cache->containsCollection(State::class, 'cities', $stateId)); + self::assertTrue($this->cache->containsCollection(State::class, 'cities', $stateId)); /* @var $region \Doctrine\Tests\Mocks\ConcurrentRegionMock */ $region->setLock($cacheId, Lock::createLockRead()); // another proc lock the entity cache - $this->assertFalse($this->cache->containsCollection(State::class, 'cities', $stateId)); + self::assertFalse($this->cache->containsCollection(State::class, 'cities', $stateId)); $queryCount = $this->getCurrentQueryCount(); $state = $this->_em->find(State::class, $stateId); - $this->assertEquals(0, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(0, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(0, $this->secondLevelCacheLogger->getRegionMissCount($this->getEntityRegion(State::class))); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(State::class))); + self::assertEquals(0, $this->secondLevelCacheLogger->getRegionMissCount($this->getEntityRegion(State::class))); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(State::class))); - $this->assertInstanceOf(State::class, $state); - $this->assertCount(2, $state->getCities()); + self::assertInstanceOf(State::class, $state); + self::assertCount(2, $state->getCities()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getCollectionRegion(State::class, 'cities'))); + self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getCollectionRegion(State::class, 'cities'))); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertFalse($this->cache->containsCollection(State::class, 'cities', $stateId)); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertFalse($this->cache->containsCollection(State::class, 'cities', $stateId)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCriteriaTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCriteriaTest.php index 17d0ac7fc7e..78b2777dc62 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCriteriaTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCriteriaTest.php @@ -20,7 +20,7 @@ public function testMatchingPut() $this->evictRegions(); $this->_em->clear(); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); $repository = $this->_em->getRepository(Country::class); $queryCount = $this->getCurrentQueryCount(); @@ -32,11 +32,11 @@ public function testMatchingPut() // Because matching returns lazy collection, we force initialization $result1->toArray(); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertEquals($this->countries[0]->getId(), $result1[0]->getId()); - $this->assertEquals($this->countries[0]->getName(), $result1[0]->getName()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertEquals($this->countries[0]->getId(), $result1[0]->getId()); + self::assertEquals($this->countries[0]->getName(), $result1[0]->getName()); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); $this->_em->clear(); @@ -44,13 +44,13 @@ public function testMatchingPut() Criteria::expr()->eq('name', $name) )); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertCount(1, $result2); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(1, $result2); - $this->assertInstanceOf(Country::class, $result2[0]); + self::assertInstanceOf(Country::class, $result2[0]); - $this->assertEquals($result1[0]->getId(), $result2[0]->getId()); - $this->assertEquals($result1[0]->getName(), $result2[0]->getName()); + self::assertEquals($result1[0]->getId(), $result2[0]->getId()); + self::assertEquals($result1[0]->getName(), $result2[0]->getName()); } public function testRepositoryMatching() @@ -60,7 +60,7 @@ public function testRepositoryMatching() $this->loadFixturesCountries(); $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); $repository = $this->_em->getRepository(Country::class); $queryCount = $this->getCurrentQueryCount(); @@ -71,10 +71,10 @@ public function testRepositoryMatching() // Because matching returns lazy collection, we force initialization $result1->toArray(); - $this->assertCount(1, $result1); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertEquals($this->countries[0]->getId(), $result1[0]->getId()); - $this->assertEquals($this->countries[0]->getName(), $result1[0]->getName()); + self::assertCount(1, $result1); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertEquals($this->countries[0]->getId(), $result1[0]->getId()); + self::assertEquals($this->countries[0]->getName(), $result1[0]->getName()); $this->_em->clear(); @@ -85,13 +85,13 @@ public function testRepositoryMatching() // Because matching returns lazy collection, we force initialization $result2->toArray(); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertCount(1, $result2); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(1, $result2); - $this->assertInstanceOf(Country::class, $result2[0]); + self::assertInstanceOf(Country::class, $result2[0]); - $this->assertEquals($this->countries[0]->getId(), $result2[0]->getId()); - $this->assertEquals($this->countries[0]->getName(), $result2[0]->getName()); + self::assertEquals($this->countries[0]->getId(), $result2[0]->getId()); + self::assertEquals($this->countries[0]->getName(), $result2[0]->getName()); $result3 = $repository->matching(new Criteria( Criteria::expr()->eq('name', $this->countries[1]->getName()) @@ -100,25 +100,25 @@ public function testRepositoryMatching() // Because matching returns lazy collection, we force initialization $result3->toArray(); - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount()); - $this->assertCount(1, $result3); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); + self::assertCount(1, $result3); - $this->assertInstanceOf(Country::class, $result3[0]); + self::assertInstanceOf(Country::class, $result3[0]); - $this->assertEquals($this->countries[1]->getId(), $result3[0]->getId()); - $this->assertEquals($this->countries[1]->getName(), $result3[0]->getName()); + self::assertEquals($this->countries[1]->getId(), $result3[0]->getId()); + self::assertEquals($this->countries[1]->getName(), $result3[0]->getName()); $result4 = $repository->matching(new Criteria( Criteria::expr()->eq('name', $this->countries[1]->getName()) )); - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount()); - $this->assertCount(1, $result4); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); + self::assertCount(1, $result4); - $this->assertInstanceOf(Country::class, $result4[0]); + self::assertInstanceOf(Country::class, $result4[0]); - $this->assertEquals($this->countries[1]->getId(), $result4[0]->getId()); - $this->assertEquals($this->countries[1]->getName(), $result4[0]->getName()); + self::assertEquals($this->countries[1]->getId(), $result4[0]->getId()); + self::assertEquals($this->countries[1]->getName(), $result4[0]->getName()); } public function testCollectionMatching() @@ -137,9 +137,9 @@ public function testCollectionMatching() Criteria::expr()->eq('name', $itemName) )); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertInstanceOf(Collection::class, $matching); - $this->assertCount(1, $matching); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertInstanceOf(Collection::class, $matching); + self::assertCount(1, $matching); $this->_em->clear(); @@ -150,9 +150,9 @@ public function testCollectionMatching() Criteria::expr()->eq('name', $itemName) )); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertInstanceOf(Collection::class, $matching); - $this->assertCount(1, $matching); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertInstanceOf(Collection::class, $matching); + self::assertCount(1, $matching); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheExtraLazyCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheExtraLazyCollectionTest.php index 75499ac302c..b0ff34c91eb 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheExtraLazyCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheExtraLazyCollectionTest.php @@ -48,8 +48,8 @@ public function testCacheCountAfterAddThenFlush() $owner = $this->_em->find(Travel::class, $ownerId); $ref = $this->_em->find(State::class, $this->states[1]->getId()); - $this->assertTrue($this->cache->containsEntity(Travel::class, $ownerId)); - $this->assertTrue($this->cache->containsCollection(Travel::class, 'visitedCities', $ownerId)); + self::assertTrue($this->cache->containsEntity(Travel::class, $ownerId)); + self::assertTrue($this->cache->containsCollection(Travel::class, 'visitedCities', $ownerId)); $newItem = new City("New City", $ref); $owner->getVisitedCities()->add($newItem); @@ -59,23 +59,23 @@ public function testCacheCountAfterAddThenFlush() $queryCount = $this->getCurrentQueryCount(); - $this->assertFalse($owner->getVisitedCities()->isInitialized()); - $this->assertEquals(4, $owner->getVisitedCities()->count()); - $this->assertFalse($owner->getVisitedCities()->isInitialized()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertFalse($owner->getVisitedCities()->isInitialized()); + self::assertEquals(4, $owner->getVisitedCities()->count()); + self::assertFalse($owner->getVisitedCities()->isInitialized()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); $this->_em->flush(); - $this->assertFalse($owner->getVisitedCities()->isInitialized()); - $this->assertFalse($this->cache->containsCollection(Travel::class, 'visitedCities', $ownerId)); + self::assertFalse($owner->getVisitedCities()->isInitialized()); + self::assertFalse($this->cache->containsCollection(Travel::class, 'visitedCities', $ownerId)); $this->_em->clear(); $queryCount = $this->getCurrentQueryCount(); $owner = $this->_em->find(Travel::class, $ownerId); - $this->assertEquals(4, $owner->getVisitedCities()->count()); - $this->assertFalse($owner->getVisitedCities()->isInitialized()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertEquals(4, $owner->getVisitedCities()->count()); + self::assertFalse($owner->getVisitedCities()->isInitialized()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheJoinTableInheritanceTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheJoinTableInheritanceTest.php index f9b9542444e..8157eb280b0 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheJoinTableInheritanceTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheJoinTableInheritanceTest.php @@ -19,8 +19,8 @@ public function testUseSameRegion() $contactRegion = $this->cache->getEntityCacheRegion(AttractionContactInfo::class); $locationRegion = $this->cache->getEntityCacheRegion(AttractionLocationInfo::class); - $this->assertEquals($infoRegion->getName(), $contactRegion->getName()); - $this->assertEquals($infoRegion->getName(), $locationRegion->getName()); + self::assertEquals($infoRegion->getName(), $contactRegion->getName()); + self::assertEquals($infoRegion->getName(), $locationRegion->getName()); } public function testPutOnPersistJoinTableInheritance() @@ -33,10 +33,10 @@ public function testPutOnPersistJoinTableInheritance() $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(AttractionInfo::class, $this->attractionsInfo[0]->getId())); - $this->assertTrue($this->cache->containsEntity(AttractionInfo::class, $this->attractionsInfo[1]->getId())); - $this->assertTrue($this->cache->containsEntity(AttractionInfo::class, $this->attractionsInfo[2]->getId())); - $this->assertTrue($this->cache->containsEntity(AttractionInfo::class, $this->attractionsInfo[3]->getId())); + self::assertTrue($this->cache->containsEntity(AttractionInfo::class, $this->attractionsInfo[0]->getId())); + self::assertTrue($this->cache->containsEntity(AttractionInfo::class, $this->attractionsInfo[1]->getId())); + self::assertTrue($this->cache->containsEntity(AttractionInfo::class, $this->attractionsInfo[2]->getId())); + self::assertTrue($this->cache->containsEntity(AttractionInfo::class, $this->attractionsInfo[3]->getId())); } public function testJoinTableCountaisRootClass() @@ -50,8 +50,8 @@ public function testJoinTableCountaisRootClass() $this->_em->clear(); foreach ($this->attractionsInfo as $info) { - $this->assertTrue($this->cache->containsEntity(AttractionInfo::class, $info->getId())); - $this->assertTrue($this->cache->containsEntity(get_class($info), $info->getId())); + self::assertTrue($this->cache->containsEntity(AttractionInfo::class, $info->getId())); + self::assertTrue($this->cache->containsEntity(get_class($info), $info->getId())); } } @@ -70,33 +70,33 @@ public function testPutAndLoadJoinTableEntities() $entityId1 = $this->attractionsInfo[0]->getId(); $entityId2 = $this->attractionsInfo[1]->getId(); - $this->assertFalse($this->cache->containsEntity(AttractionInfo::class, $entityId1)); - $this->assertFalse($this->cache->containsEntity(AttractionInfo::class, $entityId2)); - $this->assertFalse($this->cache->containsEntity(AttractionContactInfo::class, $entityId1)); - $this->assertFalse($this->cache->containsEntity(AttractionContactInfo::class, $entityId2)); + self::assertFalse($this->cache->containsEntity(AttractionInfo::class, $entityId1)); + self::assertFalse($this->cache->containsEntity(AttractionInfo::class, $entityId2)); + self::assertFalse($this->cache->containsEntity(AttractionContactInfo::class, $entityId1)); + self::assertFalse($this->cache->containsEntity(AttractionContactInfo::class, $entityId2)); $queryCount = $this->getCurrentQueryCount(); $entity1 = $this->_em->find(AttractionInfo::class, $entityId1); $entity2 = $this->_em->find(AttractionInfo::class, $entityId2); //load entity and relation whit sub classes - $this->assertEquals($queryCount + 4, $this->getCurrentQueryCount()); + self::assertEquals($queryCount + 4, $this->getCurrentQueryCount()); - $this->assertTrue($this->cache->containsEntity(AttractionInfo::class, $entityId1)); - $this->assertTrue($this->cache->containsEntity(AttractionInfo::class, $entityId2)); - $this->assertTrue($this->cache->containsEntity(AttractionContactInfo::class, $entityId1)); - $this->assertTrue($this->cache->containsEntity(AttractionContactInfo::class, $entityId2)); + self::assertTrue($this->cache->containsEntity(AttractionInfo::class, $entityId1)); + self::assertTrue($this->cache->containsEntity(AttractionInfo::class, $entityId2)); + self::assertTrue($this->cache->containsEntity(AttractionContactInfo::class, $entityId1)); + self::assertTrue($this->cache->containsEntity(AttractionContactInfo::class, $entityId2)); - $this->assertInstanceOf(AttractionInfo::class, $entity1); - $this->assertInstanceOf(AttractionInfo::class, $entity2); - $this->assertInstanceOf(AttractionContactInfo::class, $entity1); - $this->assertInstanceOf(AttractionContactInfo::class, $entity2); + self::assertInstanceOf(AttractionInfo::class, $entity1); + self::assertInstanceOf(AttractionInfo::class, $entity2); + self::assertInstanceOf(AttractionContactInfo::class, $entity1); + self::assertInstanceOf(AttractionContactInfo::class, $entity2); - $this->assertEquals($this->attractionsInfo[0]->getId(), $entity1->getId()); - $this->assertEquals($this->attractionsInfo[0]->getFone(), $entity1->getFone()); + self::assertEquals($this->attractionsInfo[0]->getId(), $entity1->getId()); + self::assertEquals($this->attractionsInfo[0]->getFone(), $entity1->getFone()); - $this->assertEquals($this->attractionsInfo[1]->getId(), $entity2->getId()); - $this->assertEquals($this->attractionsInfo[1]->getFone(), $entity2->getFone()); + self::assertEquals($this->attractionsInfo[1]->getId(), $entity2->getId()); + self::assertEquals($this->attractionsInfo[1]->getFone(), $entity2->getFone()); $this->_em->clear(); @@ -104,20 +104,20 @@ public function testPutAndLoadJoinTableEntities() $entity3 = $this->_em->find(AttractionInfo::class, $entityId1); $entity4 = $this->_em->find(AttractionInfo::class, $entityId2); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertInstanceOf(AttractionInfo::class, $entity3); - $this->assertInstanceOf(AttractionInfo::class, $entity4); - $this->assertInstanceOf(AttractionContactInfo::class, $entity3); - $this->assertInstanceOf(AttractionContactInfo::class, $entity4); + self::assertInstanceOf(AttractionInfo::class, $entity3); + self::assertInstanceOf(AttractionInfo::class, $entity4); + self::assertInstanceOf(AttractionContactInfo::class, $entity3); + self::assertInstanceOf(AttractionContactInfo::class, $entity4); - $this->assertNotSame($entity1, $entity3); - $this->assertEquals($entity1->getId(), $entity3->getId()); - $this->assertEquals($entity1->getFone(), $entity3->getFone()); + self::assertNotSame($entity1, $entity3); + self::assertEquals($entity1->getId(), $entity3->getId()); + self::assertEquals($entity1->getFone(), $entity3->getFone()); - $this->assertNotSame($entity2, $entity4); - $this->assertEquals($entity2->getId(), $entity4->getId()); - $this->assertEquals($entity2->getFone(), $entity4->getFone()); + self::assertNotSame($entity2, $entity4); + self::assertEquals($entity2->getId(), $entity4->getId()); + self::assertEquals($entity2->getFone(), $entity4->getFone()); } public function testQueryCacheFindAllJoinTableEntities() @@ -136,8 +136,8 @@ public function testQueryCacheFindAllJoinTableEntities() ->setCacheable(true) ->getResult(); - $this->assertCount(count($this->attractionsInfo), $result1); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(count($this->attractionsInfo), $result1); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); $this->_em->clear(); @@ -145,11 +145,11 @@ public function testQueryCacheFindAllJoinTableEntities() ->setCacheable(true) ->getResult(); - $this->assertCount(count($this->attractionsInfo), $result2); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(count($this->attractionsInfo), $result2); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); foreach ($result2 as $entity) { - $this->assertInstanceOf(AttractionInfo::class, $entity); + self::assertInstanceOf(AttractionInfo::class, $entity); } } @@ -165,29 +165,29 @@ public function testOneToManyRelationJoinTable() $entity = $this->_em->find(Attraction::class, $this->attractions[0]->getId()); - $this->assertInstanceOf(Attraction::class, $entity); - $this->assertInstanceOf(PersistentCollection::class, $entity->getInfos()); - $this->assertCount(1, $entity->getInfos()); + self::assertInstanceOf(Attraction::class, $entity); + self::assertInstanceOf(PersistentCollection::class, $entity->getInfos()); + self::assertCount(1, $entity->getInfos()); $ownerId = $this->attractions[0]->getId(); $queryCount = $this->getCurrentQueryCount(); - $this->assertTrue($this->cache->containsEntity(Attraction::class, $ownerId)); - $this->assertTrue($this->cache->containsCollection(Attraction::class, 'infos', $ownerId)); + self::assertTrue($this->cache->containsEntity(Attraction::class, $ownerId)); + self::assertTrue($this->cache->containsCollection(Attraction::class, 'infos', $ownerId)); - $this->assertInstanceOf(AttractionContactInfo::class, $entity->getInfos()->get(0)); - $this->assertEquals($this->attractionsInfo[0]->getFone(), $entity->getInfos()->get(0)->getFone()); + self::assertInstanceOf(AttractionContactInfo::class, $entity->getInfos()->get(0)); + self::assertEquals($this->attractionsInfo[0]->getFone(), $entity->getInfos()->get(0)->getFone()); $this->_em->clear(); $entity = $this->_em->find(Attraction::class, $this->attractions[0]->getId()); - $this->assertInstanceOf(Attraction::class, $entity); - $this->assertInstanceOf(PersistentCollection::class, $entity->getInfos()); - $this->assertCount(1, $entity->getInfos()); + self::assertInstanceOf(Attraction::class, $entity); + self::assertInstanceOf(PersistentCollection::class, $entity->getInfos()); + self::assertCount(1, $entity->getInfos()); - $this->assertInstanceOf(AttractionContactInfo::class, $entity->getInfos()->get(0)); - $this->assertEquals($this->attractionsInfo[0]->getFone(), $entity->getInfos()->get(0)->getFone()); + self::assertInstanceOf(AttractionContactInfo::class, $entity->getInfos()->get(0)); + self::assertEquals($this->attractionsInfo[0]->getFone(), $entity->getInfos()->get(0)->getFone()); } public function testQueryCacheShouldBeEvictedOnTimestampUpdate() diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheManyToManyTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheManyToManyTest.php index efe19f3e074..b7f6bc77adc 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheManyToManyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheManyToManyTest.php @@ -23,16 +23,16 @@ public function testShouldPutManyToManyCollectionOwningSideOnPersist() $this->loadFixturesTravels(); $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(Travel::class, $this->travels[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Travel::class, $this->travels[1]->getId())); + self::assertTrue($this->cache->containsEntity(Travel::class, $this->travels[0]->getId())); + self::assertTrue($this->cache->containsEntity(Travel::class, $this->travels[1]->getId())); - $this->assertTrue($this->cache->containsCollection(Travel::class, 'visitedCities', $this->travels[0]->getId())); - $this->assertTrue($this->cache->containsCollection(Travel::class, 'visitedCities', $this->travels[1]->getId())); + self::assertTrue($this->cache->containsCollection(Travel::class, 'visitedCities', $this->travels[0]->getId())); + self::assertTrue($this->cache->containsCollection(Travel::class, 'visitedCities', $this->travels[1]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[2]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[3]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[2]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[3]->getId())); } public function testPutAndLoadManyToManyRelation() @@ -52,51 +52,51 @@ public function testPutAndLoadManyToManyRelation() $this->secondLevelCacheLogger->clearStats(); - $this->assertFalse($this->cache->containsEntity(Travel::class, $this->travels[0]->getId())); - $this->assertFalse($this->cache->containsEntity(Travel::class, $this->travels[1]->getId())); + self::assertFalse($this->cache->containsEntity(Travel::class, $this->travels[0]->getId())); + self::assertFalse($this->cache->containsEntity(Travel::class, $this->travels[1]->getId())); - $this->assertFalse($this->cache->containsCollection(Travel::class, 'visitedCities', $this->travels[0]->getId())); - $this->assertFalse($this->cache->containsCollection(Travel::class, 'visitedCities', $this->travels[1]->getId())); + self::assertFalse($this->cache->containsCollection(Travel::class, 'visitedCities', $this->travels[0]->getId())); + self::assertFalse($this->cache->containsCollection(Travel::class, 'visitedCities', $this->travels[1]->getId())); - $this->assertFalse($this->cache->containsEntity(City::class, $this->cities[0]->getId())); - $this->assertFalse($this->cache->containsEntity(City::class, $this->cities[1]->getId())); - $this->assertFalse($this->cache->containsEntity(City::class, $this->cities[2]->getId())); - $this->assertFalse($this->cache->containsEntity(City::class, $this->cities[3]->getId())); + self::assertFalse($this->cache->containsEntity(City::class, $this->cities[0]->getId())); + self::assertFalse($this->cache->containsEntity(City::class, $this->cities[1]->getId())); + self::assertFalse($this->cache->containsEntity(City::class, $this->cities[2]->getId())); + self::assertFalse($this->cache->containsEntity(City::class, $this->cities[3]->getId())); $t1 = $this->_em->find(Travel::class, $this->travels[0]->getId()); $t2 = $this->_em->find(Travel::class, $this->travels[1]->getId()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(Travel::class))); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionMissCount($this->getEntityRegion(Travel::class))); + self::assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(Travel::class))); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionMissCount($this->getEntityRegion(Travel::class))); //trigger lazy load - $this->assertCount(3, $t1->getVisitedCities()); - $this->assertCount(2, $t2->getVisitedCities()); + self::assertCount(3, $t1->getVisitedCities()); + self::assertCount(2, $t2->getVisitedCities()); - $this->assertEquals(4, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(4, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getCollectionRegion(Travel::class, 'visitedCities'))); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionMissCount($this->getCollectionRegion(Travel::class, 'visitedCities'))); + self::assertEquals(4, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(4, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getCollectionRegion(Travel::class, 'visitedCities'))); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionMissCount($this->getCollectionRegion(Travel::class, 'visitedCities'))); - $this->assertInstanceOf(City::class, $t1->getVisitedCities()->get(0)); - $this->assertInstanceOf(City::class, $t1->getVisitedCities()->get(1)); - $this->assertInstanceOf(City::class, $t1->getVisitedCities()->get(2)); + self::assertInstanceOf(City::class, $t1->getVisitedCities()->get(0)); + self::assertInstanceOf(City::class, $t1->getVisitedCities()->get(1)); + self::assertInstanceOf(City::class, $t1->getVisitedCities()->get(2)); - $this->assertInstanceOf(City::class, $t2->getVisitedCities()->get(0)); - $this->assertInstanceOf(City::class, $t2->getVisitedCities()->get(1)); + self::assertInstanceOf(City::class, $t2->getVisitedCities()->get(0)); + self::assertInstanceOf(City::class, $t2->getVisitedCities()->get(1)); - $this->assertTrue($this->cache->containsEntity(Travel::class, $this->travels[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Travel::class, $this->travels[1]->getId())); + self::assertTrue($this->cache->containsEntity(Travel::class, $this->travels[0]->getId())); + self::assertTrue($this->cache->containsEntity(Travel::class, $this->travels[1]->getId())); - $this->assertTrue($this->cache->containsCollection(Travel::class, 'visitedCities', $this->travels[0]->getId())); - $this->assertTrue($this->cache->containsCollection(Travel::class, 'visitedCities', $this->travels[1]->getId())); + self::assertTrue($this->cache->containsCollection(Travel::class, 'visitedCities', $this->travels[0]->getId())); + self::assertTrue($this->cache->containsCollection(Travel::class, 'visitedCities', $this->travels[1]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[2]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[3]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[2]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[3]->getId())); $this->_em->clear(); $this->secondLevelCacheLogger->clearStats(); @@ -107,42 +107,42 @@ public function testPutAndLoadManyToManyRelation() $t4 = $this->_em->find(Travel::class, $this->travels[1]->getId()); //trigger lazy load from cache - $this->assertCount(3, $t3->getVisitedCities()); - $this->assertCount(2, $t4->getVisitedCities()); + self::assertCount(3, $t3->getVisitedCities()); + self::assertCount(2, $t4->getVisitedCities()); - $this->assertInstanceOf(City::class, $t3->getVisitedCities()->get(0)); - $this->assertInstanceOf(City::class, $t3->getVisitedCities()->get(1)); - $this->assertInstanceOf(City::class, $t3->getVisitedCities()->get(2)); + self::assertInstanceOf(City::class, $t3->getVisitedCities()->get(0)); + self::assertInstanceOf(City::class, $t3->getVisitedCities()->get(1)); + self::assertInstanceOf(City::class, $t3->getVisitedCities()->get(2)); - $this->assertInstanceOf(City::class, $t4->getVisitedCities()->get(0)); - $this->assertInstanceOf(City::class, $t4->getVisitedCities()->get(1)); + self::assertInstanceOf(City::class, $t4->getVisitedCities()->get(0)); + self::assertInstanceOf(City::class, $t4->getVisitedCities()->get(1)); - $this->assertEquals(4, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(Travel::class))); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionHitCount($this->getCollectionRegion(Travel::class, 'visitedCities'))); + self::assertEquals(4, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(Travel::class))); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionHitCount($this->getCollectionRegion(Travel::class, 'visitedCities'))); - $this->assertNotSame($t1->getVisitedCities()->get(0), $t3->getVisitedCities()->get(0)); - $this->assertEquals($t1->getVisitedCities()->get(0)->getId(), $t3->getVisitedCities()->get(0)->getId()); - $this->assertEquals($t1->getVisitedCities()->get(0)->getName(), $t3->getVisitedCities()->get(0)->getName()); + self::assertNotSame($t1->getVisitedCities()->get(0), $t3->getVisitedCities()->get(0)); + self::assertEquals($t1->getVisitedCities()->get(0)->getId(), $t3->getVisitedCities()->get(0)->getId()); + self::assertEquals($t1->getVisitedCities()->get(0)->getName(), $t3->getVisitedCities()->get(0)->getName()); - $this->assertNotSame($t1->getVisitedCities()->get(1), $t3->getVisitedCities()->get(1)); - $this->assertEquals($t1->getVisitedCities()->get(1)->getId(), $t3->getVisitedCities()->get(1)->getId()); - $this->assertEquals($t1->getVisitedCities()->get(1)->getName(), $t3->getVisitedCities()->get(1)->getName()); + self::assertNotSame($t1->getVisitedCities()->get(1), $t3->getVisitedCities()->get(1)); + self::assertEquals($t1->getVisitedCities()->get(1)->getId(), $t3->getVisitedCities()->get(1)->getId()); + self::assertEquals($t1->getVisitedCities()->get(1)->getName(), $t3->getVisitedCities()->get(1)->getName()); - $this->assertNotSame($t1->getVisitedCities()->get(2), $t3->getVisitedCities()->get(2)); - $this->assertEquals($t1->getVisitedCities()->get(2)->getId(), $t3->getVisitedCities()->get(2)->getId()); - $this->assertEquals($t1->getVisitedCities()->get(2)->getName(), $t3->getVisitedCities()->get(2)->getName()); + self::assertNotSame($t1->getVisitedCities()->get(2), $t3->getVisitedCities()->get(2)); + self::assertEquals($t1->getVisitedCities()->get(2)->getId(), $t3->getVisitedCities()->get(2)->getId()); + self::assertEquals($t1->getVisitedCities()->get(2)->getName(), $t3->getVisitedCities()->get(2)->getName()); - $this->assertNotSame($t2->getVisitedCities()->get(0), $t4->getVisitedCities()->get(0)); - $this->assertEquals($t2->getVisitedCities()->get(0)->getId(), $t4->getVisitedCities()->get(0)->getId()); - $this->assertEquals($t2->getVisitedCities()->get(0)->getName(), $t4->getVisitedCities()->get(0)->getName()); + self::assertNotSame($t2->getVisitedCities()->get(0), $t4->getVisitedCities()->get(0)); + self::assertEquals($t2->getVisitedCities()->get(0)->getId(), $t4->getVisitedCities()->get(0)->getId()); + self::assertEquals($t2->getVisitedCities()->get(0)->getName(), $t4->getVisitedCities()->get(0)->getName()); - $this->assertNotSame($t2->getVisitedCities()->get(1), $t4->getVisitedCities()->get(1)); - $this->assertEquals($t2->getVisitedCities()->get(1)->getId(), $t4->getVisitedCities()->get(1)->getId()); - $this->assertEquals($t2->getVisitedCities()->get(1)->getName(), $t4->getVisitedCities()->get(1)->getName()); + self::assertNotSame($t2->getVisitedCities()->get(1), $t4->getVisitedCities()->get(1)); + self::assertEquals($t2->getVisitedCities()->get(1)->getId(), $t4->getVisitedCities()->get(1)->getId()); + self::assertEquals($t2->getVisitedCities()->get(1)->getName(), $t4->getVisitedCities()->get(1)->getName()); - $this->assertEquals(4, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals(4, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); } public function testStoreManyToManyAssociationWhitCascade() @@ -171,19 +171,19 @@ public function testStoreManyToManyAssociationWhitCascade() $this->_em->flush(); $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(Travel::class, $travel->getId())); - $this->assertTrue($this->cache->containsEntity(Traveler::class, $traveler->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[3]->getId())); - $this->assertTrue($this->cache->containsCollection(Travel::class, 'visitedCities', $travel->getId())); + self::assertTrue($this->cache->containsEntity(Travel::class, $travel->getId())); + self::assertTrue($this->cache->containsEntity(Traveler::class, $traveler->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[3]->getId())); + self::assertTrue($this->cache->containsCollection(Travel::class, 'visitedCities', $travel->getId())); $queryCount1 = $this->getCurrentQueryCount(); $t1 = $this->_em->find(Travel::class, $travel->getId()); - $this->assertInstanceOf(Travel::class, $t1); - $this->assertCount(3, $t1->getVisitedCities()); - $this->assertEquals($queryCount1, $this->getCurrentQueryCount()); + self::assertInstanceOf(Travel::class, $t1); + self::assertCount(3, $t1->getVisitedCities()); + self::assertEquals($queryCount1, $this->getCurrentQueryCount()); } /** @@ -202,12 +202,12 @@ public function testReadOnlyCollection() $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(Travel::class, $this->travels[0]->getId())); - $this->assertTrue($this->cache->containsCollection(Travel::class, 'visitedCities', $this->travels[0]->getId())); + self::assertTrue($this->cache->containsEntity(Travel::class, $this->travels[0]->getId())); + self::assertTrue($this->cache->containsCollection(Travel::class, 'visitedCities', $this->travels[0]->getId())); $travel = $this->_em->find(Travel::class, $this->travels[0]->getId()); - $this->assertCount(3, $travel->getVisitedCities()); + self::assertCount(3, $travel->getVisitedCities()); $travel->getVisitedCities()->remove(0); @@ -231,16 +231,16 @@ public function testManyToManyWithEmptyRelation() $entitiId = $this->travels[2]->getId(); //empty travel $entity = $this->_em->find(Travel::class, $entitiId); - $this->assertEquals(0, $entity->getVisitedCities()->count()); - $this->assertEquals($queryCount+2, $this->getCurrentQueryCount()); + self::assertEquals(0, $entity->getVisitedCities()->count()); + self::assertEquals($queryCount+2, $this->getCurrentQueryCount()); $this->_em->clear(); $entity = $this->_em->find(Travel::class, $entitiId); $queryCount = $this->getCurrentQueryCount(); - $this->assertEquals(0, $entity->getVisitedCities()->count()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals(0, $entity->getVisitedCities()->count()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheManyToOneTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheManyToOneTest.php index 7af52f741c2..ae702652eca 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheManyToOneTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheManyToOneTest.php @@ -21,10 +21,10 @@ public function testPutOnPersist() $this->loadFixturesStates(); $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->states[0]->getCountry()->getId())); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->states[1]->getCountry()->getId())); - $this->assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); - $this->assertTrue($this->cache->containsEntity(State::class, $this->states[1]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->states[0]->getCountry()->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->states[1]->getCountry()->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $this->states[1]->getId())); } public function testPutAndLoadManyToOneRelation() @@ -36,37 +36,37 @@ public function testPutAndLoadManyToOneRelation() $this->cache->evictEntityRegion(State::class); $this->cache->evictEntityRegion(Country::class); - $this->assertFalse($this->cache->containsEntity(State::class, $this->states[0]->getId())); - $this->assertFalse($this->cache->containsEntity(State::class, $this->states[1]->getId())); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->states[0]->getCountry()->getId())); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->states[1]->getCountry()->getId())); + self::assertFalse($this->cache->containsEntity(State::class, $this->states[0]->getId())); + self::assertFalse($this->cache->containsEntity(State::class, $this->states[1]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->states[0]->getCountry()->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->states[1]->getCountry()->getId())); $c1 = $this->_em->find(State::class, $this->states[0]->getId()); $c2 = $this->_em->find(State::class, $this->states[1]->getId()); //trigger lazy load - $this->assertNotNull($c1->getCountry()->getName()); - $this->assertNotNull($c2->getCountry()->getName()); + self::assertNotNull($c1->getCountry()->getName()); + self::assertNotNull($c2->getCountry()->getName()); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->states[0]->getCountry()->getId())); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->states[1]->getCountry()->getId())); - $this->assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); - $this->assertTrue($this->cache->containsEntity(State::class, $this->states[1]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->states[0]->getCountry()->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->states[1]->getCountry()->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $this->states[1]->getId())); - $this->assertInstanceOf(State::class, $c1); - $this->assertInstanceOf(State::class, $c2); - $this->assertInstanceOf(Country::class, $c1->getCountry()); - $this->assertInstanceOf(Country::class, $c2->getCountry()); + self::assertInstanceOf(State::class, $c1); + self::assertInstanceOf(State::class, $c2); + self::assertInstanceOf(Country::class, $c1->getCountry()); + self::assertInstanceOf(Country::class, $c2->getCountry()); - $this->assertEquals($this->states[0]->getId(), $c1->getId()); - $this->assertEquals($this->states[0]->getName(), $c1->getName()); - $this->assertEquals($this->states[0]->getCountry()->getId(), $c1->getCountry()->getId()); - $this->assertEquals($this->states[0]->getCountry()->getName(), $c1->getCountry()->getName()); + self::assertEquals($this->states[0]->getId(), $c1->getId()); + self::assertEquals($this->states[0]->getName(), $c1->getName()); + self::assertEquals($this->states[0]->getCountry()->getId(), $c1->getCountry()->getId()); + self::assertEquals($this->states[0]->getCountry()->getName(), $c1->getCountry()->getName()); - $this->assertEquals($this->states[1]->getId(), $c2->getId()); - $this->assertEquals($this->states[1]->getName(), $c2->getName()); - $this->assertEquals($this->states[1]->getCountry()->getId(), $c2->getCountry()->getId()); - $this->assertEquals($this->states[1]->getCountry()->getName(), $c2->getCountry()->getName()); + self::assertEquals($this->states[1]->getId(), $c2->getId()); + self::assertEquals($this->states[1]->getName(), $c2->getName()); + self::assertEquals($this->states[1]->getCountry()->getId(), $c2->getCountry()->getId()); + self::assertEquals($this->states[1]->getCountry()->getName(), $c2->getCountry()->getName()); $this->_em->clear(); @@ -75,28 +75,28 @@ public function testPutAndLoadManyToOneRelation() $c3 = $this->_em->find(State::class, $this->states[0]->getId()); $c4 = $this->_em->find(State::class, $this->states[1]->getId()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); //trigger lazy load from cache - $this->assertNotNull($c3->getCountry()->getName()); - $this->assertNotNull($c4->getCountry()->getName()); + self::assertNotNull($c3->getCountry()->getName()); + self::assertNotNull($c4->getCountry()->getName()); - $this->assertInstanceOf(State::class, $c3); - $this->assertInstanceOf(State::class, $c4); - $this->assertInstanceOf(Country::class, $c3->getCountry()); - $this->assertInstanceOf(Country::class, $c4->getCountry()); + self::assertInstanceOf(State::class, $c3); + self::assertInstanceOf(State::class, $c4); + self::assertInstanceOf(Country::class, $c3->getCountry()); + self::assertInstanceOf(Country::class, $c4->getCountry()); - $this->assertEquals($c1->getId(), $c3->getId()); - $this->assertEquals($c1->getName(), $c3->getName()); + self::assertEquals($c1->getId(), $c3->getId()); + self::assertEquals($c1->getName(), $c3->getName()); - $this->assertEquals($c2->getId(), $c4->getId()); - $this->assertEquals($c2->getName(), $c4->getName()); + self::assertEquals($c2->getId(), $c4->getId()); + self::assertEquals($c2->getName(), $c4->getName()); - $this->assertEquals($this->states[0]->getCountry()->getId(), $c3->getCountry()->getId()); - $this->assertEquals($this->states[0]->getCountry()->getName(), $c3->getCountry()->getName()); + self::assertEquals($this->states[0]->getCountry()->getId(), $c3->getCountry()->getId()); + self::assertEquals($this->states[0]->getCountry()->getName(), $c3->getCountry()->getName()); - $this->assertEquals($this->states[1]->getCountry()->getId(), $c4->getCountry()->getId()); - $this->assertEquals($this->states[1]->getCountry()->getName(), $c4->getCountry()->getName()); + self::assertEquals($this->states[1]->getCountry()->getId(), $c4->getCountry()->getId()); + self::assertEquals($this->states[1]->getCountry()->getName(), $c4->getCountry()->getName()); } public function testInverseSidePutShouldEvictCollection() @@ -126,11 +126,11 @@ public function testInverseSidePutShouldEvictCollection() $queryCount = $this->getCurrentQueryCount(); // Association was cleared from EM - $this->assertNotEquals($prev, $state->getCities()); + self::assertNotEquals($prev, $state->getCities()); // New association has one more item (cache was evicted) - $this->assertEquals($count + 1, $state->getCities()->count()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($count + 1, $state->getCities()->count()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); } public function testShouldNotReloadWhenAssociationIsMissing() @@ -145,15 +145,15 @@ public function testShouldNotReloadWhenAssociationIsMissing() $countryId1 = $this->states[0]->getCountry()->getId(); $countryId2 = $this->states[3]->getCountry()->getId(); - $this->assertTrue($this->cache->containsEntity(Country::class, $countryId1)); - $this->assertTrue($this->cache->containsEntity(Country::class, $countryId2)); - $this->assertTrue($this->cache->containsEntity(State::class, $stateId1)); - $this->assertTrue($this->cache->containsEntity(State::class, $stateId2)); + self::assertTrue($this->cache->containsEntity(Country::class, $countryId1)); + self::assertTrue($this->cache->containsEntity(Country::class, $countryId2)); + self::assertTrue($this->cache->containsEntity(State::class, $stateId1)); + self::assertTrue($this->cache->containsEntity(State::class, $stateId2)); $this->cache->evictEntityRegion(Country::class); - $this->assertFalse($this->cache->containsEntity(Country::class, $countryId1)); - $this->assertFalse($this->cache->containsEntity(Country::class, $countryId2)); + self::assertFalse($this->cache->containsEntity(Country::class, $countryId1)); + self::assertFalse($this->cache->containsEntity(Country::class, $countryId2)); $this->_em->clear(); @@ -162,27 +162,27 @@ public function testShouldNotReloadWhenAssociationIsMissing() $state1 = $this->_em->find(State::class, $stateId1); $state2 = $this->_em->find(State::class, $stateId2); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertInstanceOf(State::class, $state1); - $this->assertInstanceOf(State::class, $state2); - $this->assertInstanceOf(Country::class, $state1->getCountry()); - $this->assertInstanceOf(Country::class, $state2->getCountry()); + self::assertInstanceOf(State::class, $state1); + self::assertInstanceOf(State::class, $state2); + self::assertInstanceOf(Country::class, $state1->getCountry()); + self::assertInstanceOf(Country::class, $state2->getCountry()); $queryCount = $this->getCurrentQueryCount(); - $this->assertNotNull($state1->getCountry()->getName()); - $this->assertNotNull($state2->getCountry()->getName()); - $this->assertEquals($countryId1, $state1->getCountry()->getId()); - $this->assertEquals($countryId2, $state2->getCountry()->getId()); + self::assertNotNull($state1->getCountry()->getName()); + self::assertNotNull($state2->getCountry()->getName()); + self::assertEquals($countryId1, $state1->getCountry()->getId()); + self::assertEquals($countryId2, $state2->getCountry()->getId()); - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount()); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); } public function testPutAndLoadNonCacheableManyToOne() { - $this->assertNull($this->cache->getEntityCacheRegion(Action::class)); - $this->assertInstanceOf(Region::class, $this->cache->getEntityCacheRegion(Token::class)); + self::assertNull($this->cache->getEntityCacheRegion(Action::class)); + self::assertInstanceOf(Region::class, $this->cache->getEntityCacheRegion(Token::class)); $token = new Token('token-hash'); $action = new Action('exec'); @@ -193,26 +193,26 @@ public function testPutAndLoadNonCacheableManyToOne() $this->_em->flush(); $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(Token::class, $token->token)); - $this->assertFalse($this->cache->containsEntity(Token::class, $action->name)); + self::assertTrue($this->cache->containsEntity(Token::class, $token->token)); + self::assertFalse($this->cache->containsEntity(Token::class, $action->name)); $queryCount = $this->getCurrentQueryCount(); $entity = $this->_em->find(Token::class, $token->token); - $this->assertInstanceOf(Token::class, $entity); - $this->assertEquals('token-hash', $entity->token); + self::assertInstanceOf(Token::class, $entity); + self::assertEquals('token-hash', $entity->token); - $this->assertInstanceOf(Action::class, $entity->getAction()); - $this->assertEquals('exec', $entity->getAction()->name); + self::assertInstanceOf(Action::class, $entity->getAction()); + self::assertEquals('exec', $entity->getAction()->name); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); } public function testPutAndLoadNonCacheableCompositeManyToOne() { - $this->assertNull($this->cache->getEntityCacheRegion(Action::class)); - $this->assertNull($this->cache->getEntityCacheRegion(ComplexAction::class)); - $this->assertInstanceOf(Region::class, $this->cache->getEntityCacheRegion(Token::class)); + self::assertNull($this->cache->getEntityCacheRegion(Action::class)); + self::assertNull($this->cache->getEntityCacheRegion(ComplexAction::class)); + self::assertInstanceOf(Region::class, $this->cache->getEntityCacheRegion(Token::class)); $token = new Token('token-hash'); @@ -231,10 +231,10 @@ public function testPutAndLoadNonCacheableCompositeManyToOne() $this->_em->flush(); $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(Token::class, $token->token)); - $this->assertFalse($this->cache->containsEntity(Action::class, $action1->name)); - $this->assertFalse($this->cache->containsEntity(Action::class, $action2->name)); - $this->assertFalse($this->cache->containsEntity(Action::class, $action3->name)); + self::assertTrue($this->cache->containsEntity(Token::class, $token->token)); + self::assertFalse($this->cache->containsEntity(Action::class, $action1->name)); + self::assertFalse($this->cache->containsEntity(Action::class, $action2->name)); + self::assertFalse($this->cache->containsEntity(Action::class, $action3->name)); $queryCount = $this->getCurrentQueryCount(); /** @@ -242,22 +242,22 @@ public function testPutAndLoadNonCacheableCompositeManyToOne() */ $entity = $this->_em->find(Token::class, $token->token); - $this->assertInstanceOf(Token::class, $entity); - $this->assertEquals('token-hash', $entity->token); + self::assertInstanceOf(Token::class, $entity); + self::assertEquals('token-hash', $entity->token); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertInstanceOf(Action::class, $entity->getAction()); - $this->assertInstanceOf(ComplexAction::class, $entity->getComplexAction()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertInstanceOf(Action::class, $entity->getAction()); + self::assertInstanceOf(ComplexAction::class, $entity->getComplexAction()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertInstanceOf(Action::class, $entity->getComplexAction()->getAction1()); - $this->assertInstanceOf(Action::class, $entity->getComplexAction()->getAction2()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertInstanceOf(Action::class, $entity->getComplexAction()->getAction1()); + self::assertInstanceOf(Action::class, $entity->getComplexAction()->getAction2()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertEquals('login', $entity->getComplexAction()->getAction1()->name); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertEquals('rememberme', $entity->getComplexAction()->getAction2()->name); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertEquals('login', $entity->getComplexAction()->getAction1()->name); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertEquals('rememberme', $entity->getComplexAction()->getAction2()->name); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheOneToManyTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheOneToManyTest.php index 9f347cc5ba1..d8d51078c7f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheOneToManyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheOneToManyTest.php @@ -23,10 +23,10 @@ public function testShouldPutCollectionInverseSideOnPersist() $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); - $this->assertTrue($this->cache->containsEntity(State::class, $this->states[1]->getId())); - $this->assertTrue($this->cache->containsCollection(State::class, 'cities', $this->states[0]->getId())); - $this->assertTrue($this->cache->containsCollection(State::class, 'cities', $this->states[1]->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $this->states[1]->getId())); + self::assertTrue($this->cache->containsCollection(State::class, 'cities', $this->states[0]->getId())); + self::assertTrue($this->cache->containsCollection(State::class, 'cities', $this->states[1]->getId())); } public function testPutAndLoadOneToManyRelation() @@ -41,50 +41,50 @@ public function testPutAndLoadOneToManyRelation() $this->cache->evictEntityRegion(City::class); $this->cache->evictCollectionRegion(State::class, 'cities'); - $this->assertFalse($this->cache->containsEntity(State::class, $this->states[0]->getId())); - $this->assertFalse($this->cache->containsEntity(State::class, $this->states[1]->getId())); + self::assertFalse($this->cache->containsEntity(State::class, $this->states[0]->getId())); + self::assertFalse($this->cache->containsEntity(State::class, $this->states[1]->getId())); - $this->assertFalse($this->cache->containsCollection(State::class, 'cities', $this->states[0]->getId())); - $this->assertFalse($this->cache->containsCollection(State::class, 'cities', $this->states[1]->getId())); + self::assertFalse($this->cache->containsCollection(State::class, 'cities', $this->states[0]->getId())); + self::assertFalse($this->cache->containsCollection(State::class, 'cities', $this->states[1]->getId())); - $this->assertFalse($this->cache->containsEntity(City::class, $this->states[0]->getCities()->get(0)->getId())); - $this->assertFalse($this->cache->containsEntity(City::class, $this->states[0]->getCities()->get(1)->getId())); - $this->assertFalse($this->cache->containsEntity(City::class, $this->states[1]->getCities()->get(0)->getId())); - $this->assertFalse($this->cache->containsEntity(City::class, $this->states[1]->getCities()->get(1)->getId())); + self::assertFalse($this->cache->containsEntity(City::class, $this->states[0]->getCities()->get(0)->getId())); + self::assertFalse($this->cache->containsEntity(City::class, $this->states[0]->getCities()->get(1)->getId())); + self::assertFalse($this->cache->containsEntity(City::class, $this->states[1]->getCities()->get(0)->getId())); + self::assertFalse($this->cache->containsEntity(City::class, $this->states[1]->getCities()->get(1)->getId())); $s1 = $this->_em->find(State::class, $this->states[0]->getId()); $s2 = $this->_em->find(State::class, $this->states[1]->getId()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(State::class))); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionMissCount($this->getEntityRegion(State::class))); + self::assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(State::class))); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionMissCount($this->getEntityRegion(State::class))); //trigger lazy load - $this->assertCount(2, $s1->getCities()); - $this->assertCount(2, $s2->getCities()); + self::assertCount(2, $s1->getCities()); + self::assertCount(2, $s2->getCities()); - $this->assertEquals(4, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(4, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getCollectionRegion(State::class, 'cities'))); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionMissCount($this->getCollectionRegion(State::class, 'cities'))); + self::assertEquals(4, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(4, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getCollectionRegion(State::class, 'cities'))); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionMissCount($this->getCollectionRegion(State::class, 'cities'))); - $this->assertInstanceOf(City::class, $s1->getCities()->get(0)); - $this->assertInstanceOf(City::class, $s1->getCities()->get(1)); + self::assertInstanceOf(City::class, $s1->getCities()->get(0)); + self::assertInstanceOf(City::class, $s1->getCities()->get(1)); - $this->assertInstanceOf(City::class, $s2->getCities()->get(0)); - $this->assertInstanceOf(City::class, $s2->getCities()->get(1)); + self::assertInstanceOf(City::class, $s2->getCities()->get(0)); + self::assertInstanceOf(City::class, $s2->getCities()->get(1)); - $this->assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); - $this->assertTrue($this->cache->containsEntity(State::class, $this->states[1]->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $this->states[1]->getId())); - $this->assertTrue($this->cache->containsCollection(State::class, 'cities', $this->states[0]->getId())); - $this->assertTrue($this->cache->containsCollection(State::class, 'cities', $this->states[1]->getId())); + self::assertTrue($this->cache->containsCollection(State::class, 'cities', $this->states[0]->getId())); + self::assertTrue($this->cache->containsCollection(State::class, 'cities', $this->states[1]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->states[0]->getCities()->get(0)->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->states[0]->getCities()->get(1)->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->states[1]->getCities()->get(0)->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->states[1]->getCities()->get(1)->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->states[0]->getCities()->get(0)->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->states[0]->getCities()->get(1)->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->states[1]->getCities()->get(0)->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->states[1]->getCities()->get(1)->getId())); $this->_em->clear(); $this->secondLevelCacheLogger->clearStats(); @@ -95,36 +95,36 @@ public function testPutAndLoadOneToManyRelation() $s4 = $this->_em->find(State::class, $this->states[1]->getId()); //trigger lazy load from cache - $this->assertCount(2, $s3->getCities()); - $this->assertCount(2, $s4->getCities()); + self::assertCount(2, $s3->getCities()); + self::assertCount(2, $s4->getCities()); - $this->assertEquals(4, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(State::class))); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionHitCount($this->getCollectionRegion(State::class, 'cities'))); + self::assertEquals(4, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(State::class))); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionHitCount($this->getCollectionRegion(State::class, 'cities'))); - $this->assertInstanceOf(City::class, $s3->getCities()->get(0)); - $this->assertInstanceOf(City::class, $s3->getCities()->get(1)); - $this->assertInstanceOf(City::class, $s4->getCities()->get(0)); - $this->assertInstanceOf(City::class, $s4->getCities()->get(1)); + self::assertInstanceOf(City::class, $s3->getCities()->get(0)); + self::assertInstanceOf(City::class, $s3->getCities()->get(1)); + self::assertInstanceOf(City::class, $s4->getCities()->get(0)); + self::assertInstanceOf(City::class, $s4->getCities()->get(1)); - $this->assertNotSame($s1->getCities()->get(0), $s3->getCities()->get(0)); - $this->assertEquals($s1->getCities()->get(0)->getId(), $s3->getCities()->get(0)->getId()); - $this->assertEquals($s1->getCities()->get(0)->getName(), $s3->getCities()->get(0)->getName()); + self::assertNotSame($s1->getCities()->get(0), $s3->getCities()->get(0)); + self::assertEquals($s1->getCities()->get(0)->getId(), $s3->getCities()->get(0)->getId()); + self::assertEquals($s1->getCities()->get(0)->getName(), $s3->getCities()->get(0)->getName()); - $this->assertNotSame($s1->getCities()->get(1), $s3->getCities()->get(1)); - $this->assertEquals($s1->getCities()->get(1)->getId(), $s3->getCities()->get(1)->getId()); - $this->assertEquals($s1->getCities()->get(1)->getName(), $s3->getCities()->get(1)->getName()); + self::assertNotSame($s1->getCities()->get(1), $s3->getCities()->get(1)); + self::assertEquals($s1->getCities()->get(1)->getId(), $s3->getCities()->get(1)->getId()); + self::assertEquals($s1->getCities()->get(1)->getName(), $s3->getCities()->get(1)->getName()); - $this->assertNotSame($s2->getCities()->get(0), $s4->getCities()->get(0)); - $this->assertEquals($s2->getCities()->get(0)->getId(), $s4->getCities()->get(0)->getId()); - $this->assertEquals($s2->getCities()->get(0)->getName(), $s4->getCities()->get(0)->getName()); + self::assertNotSame($s2->getCities()->get(0), $s4->getCities()->get(0)); + self::assertEquals($s2->getCities()->get(0)->getId(), $s4->getCities()->get(0)->getId()); + self::assertEquals($s2->getCities()->get(0)->getName(), $s4->getCities()->get(0)->getName()); - $this->assertNotSame($s2->getCities()->get(1), $s4->getCities()->get(1)); - $this->assertEquals($s2->getCities()->get(1)->getId(), $s4->getCities()->get(1)->getId()); - $this->assertEquals($s2->getCities()->get(1)->getName(), $s4->getCities()->get(1)->getName()); + self::assertNotSame($s2->getCities()->get(1), $s4->getCities()->get(1)); + self::assertEquals($s2->getCities()->get(1)->getId(), $s4->getCities()->get(1)->getId()); + self::assertEquals($s2->getCities()->get(1)->getName(), $s4->getCities()->get(1)->getName()); - $this->assertEquals(4, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals(4, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); } public function testLoadOneToManyCollectionFromDatabaseWhenEntityMissing() @@ -135,12 +135,12 @@ public function testLoadOneToManyCollectionFromDatabaseWhenEntityMissing() $this->_em->clear(); //trigger lazy load from database - $this->assertCount(2, $this->_em->find(State::class, $this->states[0]->getId())->getCities()); + self::assertCount(2, $this->_em->find(State::class, $this->states[0]->getId())->getCities()); - $this->assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); - $this->assertTrue($this->cache->containsCollection(State::class, 'cities', $this->states[0]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->states[0]->getCities()->get(0)->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->states[0]->getCities()->get(1)->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); + self::assertTrue($this->cache->containsCollection(State::class, 'cities', $this->states[0]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->states[0]->getCities()->get(0)->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->states[0]->getCities()->get(1)->getId())); $queryCount = $this->getCurrentQueryCount(); $stateId = $this->states[0]->getId(); @@ -148,23 +148,23 @@ public function testLoadOneToManyCollectionFromDatabaseWhenEntityMissing() $cityId = $this->states[0]->getCities()->get(1)->getId(); //trigger lazy load from cache - $this->assertCount(2, $state->getCities()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertTrue($this->cache->containsEntity(City::class, $cityId)); + self::assertCount(2, $state->getCities()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertTrue($this->cache->containsEntity(City::class, $cityId)); $this->cache->evictEntity(City::class, $cityId); - $this->assertFalse($this->cache->containsEntity(City::class, $cityId)); - $this->assertTrue($this->cache->containsEntity(State::class, $stateId)); - $this->assertTrue($this->cache->containsCollection(State::class, 'cities', $stateId)); + self::assertFalse($this->cache->containsEntity(City::class, $cityId)); + self::assertTrue($this->cache->containsEntity(State::class, $stateId)); + self::assertTrue($this->cache->containsCollection(State::class, 'cities', $stateId)); $this->_em->clear(); $state = $this->_em->find(State::class, $stateId); //trigger lazy load from database - $this->assertCount(2, $state->getCities()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(2, $state->getCities()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); } @@ -179,8 +179,8 @@ public function testShoudNotPutOneToManyRelationOnPersist() $this->_em->flush(); $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(State::class, $state->getId())); - $this->assertFalse($this->cache->containsCollection(State::class, 'cities', $state->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $state->getId())); + self::assertFalse($this->cache->containsCollection(State::class, 'cities', $state->getId())); } public function testOneToManyRemove() @@ -196,28 +196,28 @@ public function testOneToManyRemove() $this->cache->evictEntityRegion(City::class); $this->cache->evictCollectionRegion(State::class, 'cities'); - $this->assertFalse($this->cache->containsEntity(State::class, $this->states[0]->getId())); - $this->assertFalse($this->cache->containsCollection(State::class, 'cities', $this->states[0]->getId())); - $this->assertFalse($this->cache->containsEntity(City::class, $this->states[0]->getCities()->get(0)->getId())); - $this->assertFalse($this->cache->containsEntity(City::class, $this->states[0]->getCities()->get(1)->getId())); + self::assertFalse($this->cache->containsEntity(State::class, $this->states[0]->getId())); + self::assertFalse($this->cache->containsCollection(State::class, 'cities', $this->states[0]->getId())); + self::assertFalse($this->cache->containsEntity(City::class, $this->states[0]->getCities()->get(0)->getId())); + self::assertFalse($this->cache->containsEntity(City::class, $this->states[0]->getCities()->get(1)->getId())); $entity = $this->_em->find(State::class, $this->states[0]->getId()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(State::class))); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getEntityRegion(State::class))); + self::assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(State::class))); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getEntityRegion(State::class))); //trigger lazy load - $this->assertCount(2, $entity->getCities()); + self::assertCount(2, $entity->getCities()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getCollectionRegion(State::class, 'cities'))); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getCollectionRegion(State::class, 'cities'))); + self::assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getCollectionRegion(State::class, 'cities'))); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getCollectionRegion(State::class, 'cities'))); - $this->assertInstanceOf(City::class, $entity->getCities()->get(0)); - $this->assertInstanceOf(City::class, $entity->getCities()->get(1)); + self::assertInstanceOf(City::class, $entity->getCities()->get(0)); + self::assertInstanceOf(City::class, $entity->getCities()->get(1)); $this->_em->clear(); $this->secondLevelCacheLogger->clearStats(); @@ -226,23 +226,23 @@ public function testOneToManyRemove() $state = $this->_em->find(State::class, $this->states[0]->getId()); //trigger lazy load from cache - $this->assertCount(2, $state->getCities()); + self::assertCount(2, $state->getCities()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(State::class))); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getCollectionRegion(State::class, 'cities'))); + self::assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(State::class))); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getCollectionRegion(State::class, 'cities'))); $city0 = $state->getCities()->get(0); $city1 = $state->getCities()->get(1); - $this->assertInstanceOf(City::class, $city0); - $this->assertInstanceOf(City::class, $city1); + self::assertInstanceOf(City::class, $city0); + self::assertInstanceOf(City::class, $city1); - $this->assertEquals($entity->getCities()->get(0)->getName(), $city0->getName()); - $this->assertEquals($entity->getCities()->get(1)->getName(), $city1->getName()); + self::assertEquals($entity->getCities()->get(0)->getName(), $city0->getName()); + self::assertEquals($entity->getCities()->get(1)->getName(), $city1->getName()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); $state->getCities()->removeElement($city0); @@ -257,17 +257,17 @@ public function testOneToManyRemove() $state = $this->_em->find(State::class, $this->states[0]->getId()); //trigger lazy load from cache - $this->assertCount(1, $state->getCities()); + self::assertCount(1, $state->getCities()); $city1 = $state->getCities()->get(0); - $this->assertInstanceOf(City::class, $city1); - $this->assertEquals($entity->getCities()->get(1)->getName(), $city1->getName()); + self::assertInstanceOf(City::class, $city1); + self::assertEquals($entity->getCities()->get(1)->getName(), $city1->getName()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(State::class))); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getCollectionRegion(State::class, 'cities'))); + self::assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(State::class))); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getCollectionRegion(State::class, 'cities'))); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); $state->getCities()->remove(0); @@ -281,11 +281,11 @@ public function testOneToManyRemove() $queryCount = $this->getCurrentQueryCount(); $state = $this->_em->find(State::class, $this->states[0]->getId()); - $this->assertCount(0, $state->getCities()); + self::assertCount(0, $state->getCities()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(State::class))); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getCollectionRegion(State::class, 'cities'))); + self::assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(State::class))); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getCollectionRegion(State::class, 'cities'))); } public function testOneToManyWithEmptyRelation() @@ -304,16 +304,16 @@ public function testOneToManyWithEmptyRelation() $queryCount = $this->getCurrentQueryCount(); $entity = $this->_em->find(State::class, $entitiId); - $this->assertEquals(0, $entity->getCities()->count()); - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount()); + self::assertEquals(0, $entity->getCities()->count()); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); $this->_em->clear(); $queryCount = $this->getCurrentQueryCount(); $entity = $this->_em->find(State::class, $entitiId); - $this->assertEquals(0, $entity->getCities()->count()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals(0, $entity->getCities()->count()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); } @@ -333,16 +333,16 @@ public function testOneToManyCount() $queryCount = $this->getCurrentQueryCount(); $entity = $this->_em->find(State::class, $entityId); - $this->assertEquals(2, $entity->getCities()->count()); - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount()); + self::assertEquals(2, $entity->getCities()->count()); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); $this->_em->clear(); $queryCount = $this->getCurrentQueryCount(); $entity = $this->_em->find(State::class, $entityId); - $this->assertEquals(2, $entity->getCities()->count()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals(2, $entity->getCities()->count()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); } public function testCacheInitializeCollectionWithNewObjects() @@ -361,22 +361,22 @@ public function testCacheInitializeCollectionWithNewObjects() $this->_em->flush(); $this->_em->clear(); - $this->assertCount(3, $traveler->getTravels()); + self::assertCount(3, $traveler->getTravels()); $travelerId = $traveler->getId(); $queryCount = $this->getCurrentQueryCount(); $entity = $this->_em->find(Traveler::class, $travelerId); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertFalse($entity->getTravels()->isInitialized()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertFalse($entity->getTravels()->isInitialized()); $newItem = new Travel($entity); $entity->getTravels()->add($newItem); - $this->assertFalse($entity->getTravels()->isInitialized()); - $this->assertCount(4, $entity->getTravels()); - $this->assertTrue($entity->getTravels()->isInitialized()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertFalse($entity->getTravels()->isInitialized()); + self::assertCount(4, $entity->getTravels()); + self::assertTrue($entity->getTravels()->isInitialized()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); $this->_em->flush(); $this->_em->clear(); @@ -384,13 +384,13 @@ public function testCacheInitializeCollectionWithNewObjects() $query = "SELECT t, tt FROM Doctrine\Tests\Models\Cache\Traveler t JOIN t.travels tt WHERE t.id = $travelerId"; $result = $this->_em->createQuery($query)->getSingleResult(); - $this->assertEquals(4, $result->getTravels()->count()); + self::assertEquals(4, $result->getTravels()->count()); } public function testPutAndLoadNonCacheableOneToMany() { - $this->assertNull($this->cache->getEntityCacheRegion(Login::class)); - $this->assertInstanceOf(Region::class, $this->cache->getEntityCacheRegion(Token::class)); + self::assertNull($this->cache->getEntityCacheRegion(Login::class)); + self::assertInstanceOf(Region::class, $this->cache->getEntityCacheRegion(Token::class)); $l1 = new Login('session1'); $l2 = new Login('session2'); @@ -402,17 +402,17 @@ public function testPutAndLoadNonCacheableOneToMany() $this->_em->flush(); $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(Token::class, $token->token)); + self::assertTrue($this->cache->containsEntity(Token::class, $token->token)); $queryCount = $this->getCurrentQueryCount(); $entity = $this->_em->find(Token::class, $token->token); - $this->assertInstanceOf(Token::class, $entity); - $this->assertEquals('token-hash', $entity->token); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertInstanceOf(Token::class, $entity); + self::assertEquals('token-hash', $entity->token); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertCount(2, $entity->logins); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(2, $entity->logins); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheOneToOneTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheOneToOneTest.php index 6e428814d3f..afb5fd4ca2b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheOneToOneTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheOneToOneTest.php @@ -28,10 +28,10 @@ public function testPutOneToOneOnUnidirectionalPersist() $entity1 = $this->travelersWithProfile[0]; $entity2 = $this->travelersWithProfile[1]; - $this->assertTrue($this->cache->containsEntity(Traveler::class, $entity1->getId())); - $this->assertTrue($this->cache->containsEntity(Traveler::class, $entity2->getId())); - $this->assertTrue($this->cache->containsEntity(TravelerProfile::class, $entity1->getProfile()->getId())); - $this->assertTrue($this->cache->containsEntity(TravelerProfile::class, $entity2->getProfile()->getId())); + self::assertTrue($this->cache->containsEntity(Traveler::class, $entity1->getId())); + self::assertTrue($this->cache->containsEntity(Traveler::class, $entity2->getId())); + self::assertTrue($this->cache->containsEntity(TravelerProfile::class, $entity1->getProfile()->getId())); + self::assertTrue($this->cache->containsEntity(TravelerProfile::class, $entity2->getProfile()->getId())); } public function testPutOneToOneOnBidirectionalPersist() @@ -47,12 +47,12 @@ public function testPutOneToOneOnBidirectionalPersist() $entity1 = $this->travelersWithProfile[0]; $entity2 = $this->travelersWithProfile[1]; - $this->assertTrue($this->cache->containsEntity(Traveler::class, $entity1->getId())); - $this->assertTrue($this->cache->containsEntity(Traveler::class, $entity2->getId())); - $this->assertTrue($this->cache->containsEntity(TravelerProfile::class, $entity1->getProfile()->getId())); - $this->assertTrue($this->cache->containsEntity(TravelerProfile::class, $entity2->getProfile()->getId())); - $this->assertTrue($this->cache->containsEntity(TravelerProfileInfo::class, $entity1->getProfile()->getInfo()->getId())); - $this->assertTrue($this->cache->containsEntity(TravelerProfileInfo::class, $entity2->getProfile()->getInfo()->getId())); + self::assertTrue($this->cache->containsEntity(Traveler::class, $entity1->getId())); + self::assertTrue($this->cache->containsEntity(Traveler::class, $entity2->getId())); + self::assertTrue($this->cache->containsEntity(TravelerProfile::class, $entity1->getProfile()->getId())); + self::assertTrue($this->cache->containsEntity(TravelerProfile::class, $entity2->getProfile()->getId())); + self::assertTrue($this->cache->containsEntity(TravelerProfileInfo::class, $entity1->getProfile()->getInfo()->getId())); + self::assertTrue($this->cache->containsEntity(TravelerProfileInfo::class, $entity2->getProfile()->getInfo()->getId())); } public function testPutAndLoadOneToOneUnidirectionalRelation() @@ -71,40 +71,40 @@ public function testPutAndLoadOneToOneUnidirectionalRelation() $entity1 = $this->travelersWithProfile[0]; $entity2 = $this->travelersWithProfile[1]; - $this->assertFalse($this->cache->containsEntity(Traveler::class, $entity1->getId())); - $this->assertFalse($this->cache->containsEntity(Traveler::class, $entity2->getId())); - $this->assertFalse($this->cache->containsEntity(TravelerProfile::class, $entity1->getProfile()->getId())); - $this->assertFalse($this->cache->containsEntity(TravelerProfile::class, $entity2->getProfile()->getId())); + self::assertFalse($this->cache->containsEntity(Traveler::class, $entity1->getId())); + self::assertFalse($this->cache->containsEntity(Traveler::class, $entity2->getId())); + self::assertFalse($this->cache->containsEntity(TravelerProfile::class, $entity1->getProfile()->getId())); + self::assertFalse($this->cache->containsEntity(TravelerProfile::class, $entity2->getProfile()->getId())); $t1 = $this->_em->find(Traveler::class, $entity1->getId()); $t2 = $this->_em->find(Traveler::class, $entity2->getId()); - $this->assertTrue($this->cache->containsEntity(Traveler::class, $entity1->getId())); - $this->assertTrue($this->cache->containsEntity(Traveler::class, $entity2->getId())); + self::assertTrue($this->cache->containsEntity(Traveler::class, $entity1->getId())); + self::assertTrue($this->cache->containsEntity(Traveler::class, $entity2->getId())); // The inverse side its not cached - $this->assertFalse($this->cache->containsEntity(TravelerProfile::class, $entity1->getProfile()->getId())); - $this->assertFalse($this->cache->containsEntity(TravelerProfile::class, $entity2->getProfile()->getId())); + self::assertFalse($this->cache->containsEntity(TravelerProfile::class, $entity1->getProfile()->getId())); + self::assertFalse($this->cache->containsEntity(TravelerProfile::class, $entity2->getProfile()->getId())); - $this->assertInstanceOf(Traveler::class, $t1); - $this->assertInstanceOf(Traveler::class, $t2); - $this->assertInstanceOf(TravelerProfile::class, $t1->getProfile()); - $this->assertInstanceOf(TravelerProfile::class, $t2->getProfile()); + self::assertInstanceOf(Traveler::class, $t1); + self::assertInstanceOf(Traveler::class, $t2); + self::assertInstanceOf(TravelerProfile::class, $t1->getProfile()); + self::assertInstanceOf(TravelerProfile::class, $t2->getProfile()); - $this->assertEquals($entity1->getId(), $t1->getId()); - $this->assertEquals($entity1->getName(), $t1->getName()); - $this->assertEquals($entity1->getProfile()->getId(), $t1->getProfile()->getId()); - $this->assertEquals($entity1->getProfile()->getName(), $t1->getProfile()->getName()); + self::assertEquals($entity1->getId(), $t1->getId()); + self::assertEquals($entity1->getName(), $t1->getName()); + self::assertEquals($entity1->getProfile()->getId(), $t1->getProfile()->getId()); + self::assertEquals($entity1->getProfile()->getName(), $t1->getProfile()->getName()); - $this->assertEquals($entity2->getId(), $t2->getId()); - $this->assertEquals($entity2->getName(), $t2->getName()); - $this->assertEquals($entity2->getProfile()->getId(), $t2->getProfile()->getId()); - $this->assertEquals($entity2->getProfile()->getName(), $t2->getProfile()->getName()); + self::assertEquals($entity2->getId(), $t2->getId()); + self::assertEquals($entity2->getName(), $t2->getName()); + self::assertEquals($entity2->getProfile()->getId(), $t2->getProfile()->getId()); + self::assertEquals($entity2->getProfile()->getName(), $t2->getProfile()->getName()); // its all cached now - $this->assertTrue($this->cache->containsEntity(Traveler::class, $entity1->getId())); - $this->assertTrue($this->cache->containsEntity(Traveler::class, $entity2->getId())); - $this->assertTrue($this->cache->containsEntity(TravelerProfile::class, $entity1->getProfile()->getId())); - $this->assertTrue($this->cache->containsEntity(TravelerProfile::class, $entity1->getProfile()->getId())); + self::assertTrue($this->cache->containsEntity(Traveler::class, $entity1->getId())); + self::assertTrue($this->cache->containsEntity(Traveler::class, $entity2->getId())); + self::assertTrue($this->cache->containsEntity(TravelerProfile::class, $entity1->getProfile()->getId())); + self::assertTrue($this->cache->containsEntity(TravelerProfile::class, $entity1->getProfile()->getId())); $this->_em->clear(); @@ -113,18 +113,18 @@ public function testPutAndLoadOneToOneUnidirectionalRelation() $t3 = $this->_em->find(Traveler::class, $entity1->getId()); $t4 = $this->_em->find(Traveler::class, $entity2->getId()); - $this->assertInstanceOf(Traveler::class, $t3); - $this->assertInstanceOf(Traveler::class, $t4); - $this->assertInstanceOf(TravelerProfile::class, $t3->getProfile()); - $this->assertInstanceOf(TravelerProfile::class, $t4->getProfile()); + self::assertInstanceOf(Traveler::class, $t3); + self::assertInstanceOf(Traveler::class, $t4); + self::assertInstanceOf(TravelerProfile::class, $t3->getProfile()); + self::assertInstanceOf(TravelerProfile::class, $t4->getProfile()); - $this->assertEquals($entity1->getProfile()->getId(), $t3->getProfile()->getId()); - $this->assertEquals($entity2->getProfile()->getId(), $t4->getProfile()->getId()); + self::assertEquals($entity1->getProfile()->getId(), $t3->getProfile()->getId()); + self::assertEquals($entity2->getProfile()->getId(), $t4->getProfile()->getId()); - $this->assertEquals($entity1->getProfile()->getName(), $t3->getProfile()->getName()); - $this->assertEquals($entity2->getProfile()->getName(), $t4->getProfile()->getName()); + self::assertEquals($entity1->getProfile()->getName(), $t3->getProfile()->getName()); + self::assertEquals($entity2->getProfile()->getName(), $t4->getProfile()->getName()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); } public function testPutAndLoadOneToOneBidirectionalRelation() @@ -144,28 +144,28 @@ public function testPutAndLoadOneToOneBidirectionalRelation() $entity1 = $this->travelersWithProfile[0]->getProfile(); $entity2 = $this->travelersWithProfile[1]->getProfile(); - $this->assertFalse($this->cache->containsEntity(TravelerProfile::class, $entity1->getId())); - $this->assertFalse($this->cache->containsEntity(TravelerProfile::class, $entity2->getId())); - $this->assertFalse($this->cache->containsEntity(TravelerProfileInfo::class, $entity1->getInfo()->getId())); - $this->assertFalse($this->cache->containsEntity(TravelerProfileInfo::class, $entity2->getInfo()->getId())); + self::assertFalse($this->cache->containsEntity(TravelerProfile::class, $entity1->getId())); + self::assertFalse($this->cache->containsEntity(TravelerProfile::class, $entity2->getId())); + self::assertFalse($this->cache->containsEntity(TravelerProfileInfo::class, $entity1->getInfo()->getId())); + self::assertFalse($this->cache->containsEntity(TravelerProfileInfo::class, $entity2->getInfo()->getId())); $p1 = $this->_em->find(TravelerProfile::class, $entity1->getId()); $p2 = $this->_em->find(TravelerProfile::class, $entity2->getId()); - $this->assertEquals($entity1->getId(), $p1->getId()); - $this->assertEquals($entity1->getName(), $p1->getName()); - $this->assertEquals($entity1->getInfo()->getId(), $p1->getInfo()->getId()); - $this->assertEquals($entity1->getInfo()->getDescription(), $p1->getInfo()->getDescription()); + self::assertEquals($entity1->getId(), $p1->getId()); + self::assertEquals($entity1->getName(), $p1->getName()); + self::assertEquals($entity1->getInfo()->getId(), $p1->getInfo()->getId()); + self::assertEquals($entity1->getInfo()->getDescription(), $p1->getInfo()->getDescription()); - $this->assertEquals($entity2->getId(), $p2->getId()); - $this->assertEquals($entity2->getName(), $p2->getName()); - $this->assertEquals($entity2->getInfo()->getId(), $p2->getInfo()->getId()); - $this->assertEquals($entity2->getInfo()->getDescription(), $p2->getInfo()->getDescription()); + self::assertEquals($entity2->getId(), $p2->getId()); + self::assertEquals($entity2->getName(), $p2->getName()); + self::assertEquals($entity2->getInfo()->getId(), $p2->getInfo()->getId()); + self::assertEquals($entity2->getInfo()->getDescription(), $p2->getInfo()->getDescription()); - $this->assertTrue($this->cache->containsEntity(TravelerProfile::class, $entity1->getId())); - $this->assertTrue($this->cache->containsEntity(TravelerProfile::class, $entity2->getId())); - $this->assertTrue($this->cache->containsEntity(TravelerProfileInfo::class, $entity1->getInfo()->getId())); - $this->assertTrue($this->cache->containsEntity(TravelerProfileInfo::class, $entity2->getInfo()->getId())); + self::assertTrue($this->cache->containsEntity(TravelerProfile::class, $entity1->getId())); + self::assertTrue($this->cache->containsEntity(TravelerProfile::class, $entity2->getId())); + self::assertTrue($this->cache->containsEntity(TravelerProfileInfo::class, $entity1->getInfo()->getId())); + self::assertTrue($this->cache->containsEntity(TravelerProfileInfo::class, $entity2->getInfo()->getId())); $this->_em->clear(); @@ -174,22 +174,22 @@ public function testPutAndLoadOneToOneBidirectionalRelation() $p3 = $this->_em->find(TravelerProfile::class, $entity1->getId()); $p4 = $this->_em->find(TravelerProfile::class, $entity2->getId()); - $this->assertInstanceOf(TravelerProfile::class, $p3); - $this->assertInstanceOf(TravelerProfile::class, $p4); - $this->assertInstanceOf(TravelerProfileInfo::class, $p3->getInfo()); - $this->assertInstanceOf(TravelerProfileInfo::class, $p4->getInfo()); + self::assertInstanceOf(TravelerProfile::class, $p3); + self::assertInstanceOf(TravelerProfile::class, $p4); + self::assertInstanceOf(TravelerProfileInfo::class, $p3->getInfo()); + self::assertInstanceOf(TravelerProfileInfo::class, $p4->getInfo()); - $this->assertEquals($entity1->getId(), $p3->getId()); - $this->assertEquals($entity1->getName(), $p3->getName()); - $this->assertEquals($entity1->getInfo()->getId(), $p3->getInfo()->getId()); - $this->assertEquals($entity1->getInfo()->getDescription(), $p3->getInfo()->getDescription()); + self::assertEquals($entity1->getId(), $p3->getId()); + self::assertEquals($entity1->getName(), $p3->getName()); + self::assertEquals($entity1->getInfo()->getId(), $p3->getInfo()->getId()); + self::assertEquals($entity1->getInfo()->getDescription(), $p3->getInfo()->getDescription()); - $this->assertEquals($entity2->getId(), $p4->getId()); - $this->assertEquals($entity2->getName(), $p4->getName()); - $this->assertEquals($entity2->getInfo()->getId(), $p4->getInfo()->getId()); - $this->assertEquals($entity2->getInfo()->getDescription(), $p4->getInfo()->getDescription()); + self::assertEquals($entity2->getId(), $p4->getId()); + self::assertEquals($entity2->getName(), $p4->getName()); + self::assertEquals($entity2->getInfo()->getId(), $p4->getInfo()->getId()); + self::assertEquals($entity2->getInfo()->getDescription(), $p4->getInfo()->getDescription()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); } public function testInverseSidePutAndLoadOneToOneBidirectionalRelation() @@ -204,29 +204,29 @@ public function testInverseSidePutAndLoadOneToOneBidirectionalRelation() $entity1 = $this->addresses[0]->person; $entity2 = $this->addresses[1]->person; - $this->assertFalse($this->cache->containsEntity(Person::class, $entity1->id)); - $this->assertFalse($this->cache->containsEntity(Person::class, $entity2->id)); - $this->assertFalse($this->cache->containsEntity(Address::class, $entity1->address->id)); - $this->assertFalse($this->cache->containsEntity(Address::class, $entity2->address->id)); + self::assertFalse($this->cache->containsEntity(Person::class, $entity1->id)); + self::assertFalse($this->cache->containsEntity(Person::class, $entity2->id)); + self::assertFalse($this->cache->containsEntity(Address::class, $entity1->address->id)); + self::assertFalse($this->cache->containsEntity(Address::class, $entity2->address->id)); $p1 = $this->_em->find(Person::class, $entity1->id); $p2 = $this->_em->find(Person::class, $entity2->id); - $this->assertEquals($entity1->id, $p1->id); - $this->assertEquals($entity1->name, $p1->name); - $this->assertEquals($entity1->address->id, $p1->address->id); - $this->assertEquals($entity1->address->location, $p1->address->location); + self::assertEquals($entity1->id, $p1->id); + self::assertEquals($entity1->name, $p1->name); + self::assertEquals($entity1->address->id, $p1->address->id); + self::assertEquals($entity1->address->location, $p1->address->location); - $this->assertEquals($entity2->id, $p2->id); - $this->assertEquals($entity2->name, $p2->name); - $this->assertEquals($entity2->address->id, $p2->address->id); - $this->assertEquals($entity2->address->location, $p2->address->location); + self::assertEquals($entity2->id, $p2->id); + self::assertEquals($entity2->name, $p2->name); + self::assertEquals($entity2->address->id, $p2->address->id); + self::assertEquals($entity2->address->location, $p2->address->location); - $this->assertTrue($this->cache->containsEntity(Person::class, $entity1->id)); - $this->assertTrue($this->cache->containsEntity(Person::class, $entity2->id)); + self::assertTrue($this->cache->containsEntity(Person::class, $entity1->id)); + self::assertTrue($this->cache->containsEntity(Person::class, $entity2->id)); // The inverse side its not cached - $this->assertFalse($this->cache->containsEntity(Address::class, $entity1->address->id)); - $this->assertFalse($this->cache->containsEntity(Address::class, $entity2->address->id)); + self::assertFalse($this->cache->containsEntity(Address::class, $entity1->address->id)); + self::assertFalse($this->cache->containsEntity(Address::class, $entity2->address->id)); $this->_em->clear(); @@ -235,28 +235,28 @@ public function testInverseSidePutAndLoadOneToOneBidirectionalRelation() $p3 = $this->_em->find(Person::class, $entity1->id); $p4 = $this->_em->find(Person::class, $entity2->id); - $this->assertInstanceOf(Person::class, $p3); - $this->assertInstanceOf(Person::class, $p4); - $this->assertInstanceOf(Address::class, $p3->address); - $this->assertInstanceOf(Address::class, $p4->address); + self::assertInstanceOf(Person::class, $p3); + self::assertInstanceOf(Person::class, $p4); + self::assertInstanceOf(Address::class, $p3->address); + self::assertInstanceOf(Address::class, $p4->address); - $this->assertEquals($entity1->id, $p3->id); - $this->assertEquals($entity1->name, $p3->name); - $this->assertEquals($entity1->address->id, $p3->address->id); - $this->assertEquals($entity1->address->location, $p3->address->location); + self::assertEquals($entity1->id, $p3->id); + self::assertEquals($entity1->name, $p3->name); + self::assertEquals($entity1->address->id, $p3->address->id); + self::assertEquals($entity1->address->location, $p3->address->location); - $this->assertEquals($entity2->id, $p4->id); - $this->assertEquals($entity2->name, $p4->name); - $this->assertEquals($entity2->address->id, $p4->address->id); - $this->assertEquals($entity2->address->location, $p4->address->location); + self::assertEquals($entity2->id, $p4->id); + self::assertEquals($entity2->name, $p4->name); + self::assertEquals($entity2->address->id, $p4->address->id); + self::assertEquals($entity2->address->location, $p4->address->location); - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount()); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); } public function testPutAndLoadNonCacheableOneToOne() { - $this->assertNull($this->cache->getEntityCacheRegion(Client::class)); - $this->assertInstanceOf(Region::class, $this->cache->getEntityCacheRegion(Token::class)); + self::assertNull($this->cache->getEntityCacheRegion(Client::class)); + self::assertInstanceOf(Region::class, $this->cache->getEntityCacheRegion(Token::class)); $client = new Client('FabioBatSilva'); $token = new Token('token-hash', $client); @@ -268,17 +268,17 @@ public function testPutAndLoadNonCacheableOneToOne() $queryCount = $this->getCurrentQueryCount(); - $this->assertTrue($this->cache->containsEntity(Token::class, $token->token)); - $this->assertFalse($this->cache->containsEntity(Client::class, $client->id)); + self::assertTrue($this->cache->containsEntity(Token::class, $token->token)); + self::assertFalse($this->cache->containsEntity(Client::class, $client->id)); $entity = $this->_em->find(Token::class, $token->token); - $this->assertInstanceOf(Token::class, $entity); - $this->assertInstanceOf(Client::class, $entity->getClient()); - $this->assertEquals('token-hash', $entity->token); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertInstanceOf(Token::class, $entity); + self::assertInstanceOf(Client::class, $entity->getClient()); + self::assertEquals('token-hash', $entity->token); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertEquals('FabioBatSilva', $entity->getClient()->name); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertEquals('FabioBatSilva', $entity->getClient()->name); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheQueryCacheTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheQueryCacheTest.php index 0a32886dd0f..c14e67ec438 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheQueryCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheQueryCacheTest.php @@ -28,24 +28,24 @@ public function testBasicQueryCache() $this->secondLevelCacheLogger->clearStats(); $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT c FROM Doctrine\Tests\Models\Cache\Country c'; $result1 = $this->_em->createQuery($dql)->setCacheable(true)->getResult(); - $this->assertCount(2, $result1); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertEquals($this->countries[0]->getId(), $result1[0]->getId()); - $this->assertEquals($this->countries[1]->getId(), $result1[1]->getId()); - $this->assertEquals($this->countries[0]->getName(), $result1[0]->getName()); - $this->assertEquals($this->countries[1]->getName(), $result1[1]->getName()); + self::assertCount(2, $result1); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertEquals($this->countries[0]->getId(), $result1[0]->getId()); + self::assertEquals($this->countries[1]->getId(), $result1[1]->getId()); + self::assertEquals($this->countries[0]->getName(), $result1[0]->getName()); + self::assertEquals($this->countries[1]->getName(), $result1[1]->getName()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); $this->_em->clear(); @@ -53,33 +53,33 @@ public function testBasicQueryCache() ->setCacheable(true) ->getResult(); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertCount(2, $result2); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(2, $result2); - $this->assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(3, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(3, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getDefaultQueryRegionName())); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); - $this->assertInstanceOf(Country::class, $result2[0]); - $this->assertInstanceOf(Country::class, $result2[1]); + self::assertInstanceOf(Country::class, $result2[0]); + self::assertInstanceOf(Country::class, $result2[1]); - $this->assertEquals($result1[0]->getId(), $result2[0]->getId()); - $this->assertEquals($result1[1]->getId(), $result2[1]->getId()); + self::assertEquals($result1[0]->getId(), $result2[0]->getId()); + self::assertEquals($result1[1]->getId(), $result2[1]->getId()); - $this->assertEquals($result1[0]->getName(), $result2[0]->getName()); - $this->assertEquals($result1[1]->getName(), $result2[1]->getName()); + self::assertEquals($result1[0]->getName(), $result2[0]->getName()); + self::assertEquals($result1[1]->getName(), $result2[1]->getName()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(3, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(3, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getDefaultQueryRegionName())); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); } public function testQueryCacheModeGet() @@ -91,8 +91,8 @@ public function testQueryCacheModeGet() $this->secondLevelCacheLogger->clearStats(); $this->_em->clear(); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT c FROM Doctrine\Tests\Models\Cache\Country c'; @@ -101,25 +101,25 @@ public function testQueryCacheModeGet() ->setCacheable(true); // MODE_GET should never add items to the cache. - $this->assertCount(2, $queryGet->getResult()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(2, $queryGet->getResult()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertCount(2, $queryGet->getResult()); - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount()); + self::assertCount(2, $queryGet->getResult()); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); $result = $this->_em->createQuery($dql) ->setCacheable(true) ->getResult(); - $this->assertCount(2, $result); - $this->assertEquals($queryCount + 3, $this->getCurrentQueryCount()); + self::assertCount(2, $result); + self::assertEquals($queryCount + 3, $this->getCurrentQueryCount()); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); // MODE_GET should read items if exists. - $this->assertCount(2, $queryGet->getResult()); - $this->assertEquals($queryCount + 3, $this->getCurrentQueryCount()); + self::assertCount(2, $queryGet->getResult()); + self::assertEquals($queryCount + 3, $this->getCurrentQueryCount()); } public function testQueryCacheModePut() @@ -131,8 +131,8 @@ public function testQueryCacheModePut() $this->secondLevelCacheLogger->clearStats(); $this->_em->clear(); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT c FROM Doctrine\Tests\Models\Cache\Country c'; @@ -140,26 +140,26 @@ public function testQueryCacheModePut() ->setCacheable(true) ->getResult(); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); - $this->assertCount(2, $result); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(2, $result); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); $queryPut = $this->_em->createQuery($dql) ->setCacheMode(Cache::MODE_PUT) ->setCacheable(true); // MODE_PUT should never read itens from cache. - $this->assertCount(2, $queryPut->getResult()); - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount()); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); - - $this->assertCount(2, $queryPut->getResult()); - $this->assertEquals($queryCount + 3, $this->getCurrentQueryCount()); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertCount(2, $queryPut->getResult()); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + + self::assertCount(2, $queryPut->getResult()); + self::assertEquals($queryCount + 3, $this->getCurrentQueryCount()); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); } public function testQueryCacheModeRefresh() @@ -171,8 +171,8 @@ public function testQueryCacheModeRefresh() $this->secondLevelCacheLogger->clearStats(); $this->_em->clear(); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); $region = $this->cache->getEntityCacheRegion(Country::class); $queryCount = $this->getCurrentQueryCount(); @@ -181,11 +181,11 @@ public function testQueryCacheModeRefresh() ->setCacheable(true) ->getResult(); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); - $this->assertCount(2, $result); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(2, $result); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); $countryId1 = $this->countries[0]->getId(); $countryId2 = $this->countries[1]->getId(); @@ -207,18 +207,18 @@ public function testQueryCacheModeRefresh() // MODE_REFRESH should never read itens from cache. $result1 = $queryRefresh->getResult(); - $this->assertCount(2, $result1); - $this->assertEquals($countryName1, $result1[0]->getName()); - $this->assertEquals($countryName2, $result1[1]->getName()); - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount()); + self::assertCount(2, $result1); + self::assertEquals($countryName1, $result1[0]->getName()); + self::assertEquals($countryName2, $result1[1]->getName()); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); $this->_em->clear(); $result2 = $queryRefresh->getResult(); - $this->assertCount(2, $result2); - $this->assertEquals($countryName1, $result2[0]->getName()); - $this->assertEquals($countryName2, $result2[1]->getName()); - $this->assertEquals($queryCount + 3, $this->getCurrentQueryCount()); + self::assertCount(2, $result2); + self::assertEquals($countryName1, $result2[0]->getName()); + self::assertEquals($countryName2, $result2[1]->getName()); + self::assertEquals($queryCount + 3, $this->getCurrentQueryCount()); } public function testBasicQueryCachePutEntityCache() @@ -234,21 +234,21 @@ public function testBasicQueryCachePutEntityCache() $dql = 'SELECT c FROM Doctrine\Tests\Models\Cache\Country c'; $result1 = $this->_em->createQuery($dql)->setCacheable(true)->getResult(); - $this->assertCount(2, $result1); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertEquals($this->countries[0]->getId(), $result1[0]->getId()); - $this->assertEquals($this->countries[1]->getId(), $result1[1]->getId()); - $this->assertEquals($this->countries[0]->getName(), $result1[0]->getName()); - $this->assertEquals($this->countries[1]->getName(), $result1[1]->getName()); + self::assertCount(2, $result1); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertEquals($this->countries[0]->getId(), $result1[0]->getId()); + self::assertEquals($this->countries[1]->getId(), $result1[1]->getId()); + self::assertEquals($this->countries[0]->getName(), $result1[0]->getName()); + self::assertEquals($this->countries[1]->getName(), $result1[1]->getName()); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); - $this->assertEquals(3, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(Country::class))); + self::assertEquals(3, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(Country::class))); $this->_em->clear(); @@ -256,33 +256,33 @@ public function testBasicQueryCachePutEntityCache() ->setCacheable(true) ->getResult(); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertCount(2, $result2); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(2, $result2); - $this->assertEquals(3, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(3, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(3, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(3, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getDefaultQueryRegionName())); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); - $this->assertInstanceOf(Country::class, $result2[0]); - $this->assertInstanceOf(Country::class, $result2[1]); + self::assertInstanceOf(Country::class, $result2[0]); + self::assertInstanceOf(Country::class, $result2[1]); - $this->assertEquals($result1[0]->getId(), $result2[0]->getId()); - $this->assertEquals($result1[1]->getId(), $result2[1]->getId()); + self::assertEquals($result1[0]->getId(), $result2[0]->getId()); + self::assertEquals($result1[1]->getId(), $result2[1]->getId()); - $this->assertEquals($result1[0]->getName(), $result2[0]->getName()); - $this->assertEquals($result1[1]->getName(), $result2[1]->getName()); + self::assertEquals($result1[0]->getName(), $result2[0]->getName()); + self::assertEquals($result1[1]->getName(), $result2[1]->getName()); - $this->assertEquals(3, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(3, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(3, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(3, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getDefaultQueryRegionName())); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); } /** @@ -375,8 +375,8 @@ public function testBasicQueryParams() $this->loadFixturesCountries(); $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); $queryCount = $this->getCurrentQueryCount(); $name = $this->countries[0]->getName(); @@ -386,9 +386,9 @@ public function testBasicQueryParams() ->setParameter('name', $name) ->getResult(); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertEquals($this->countries[0]->getId(), $result1[0]->getId()); - $this->assertEquals($this->countries[0]->getName(), $result1[0]->getName()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertEquals($this->countries[0]->getId(), $result1[0]->getId()); + self::assertEquals($this->countries[0]->getName(), $result1[0]->getName()); $this->_em->clear(); @@ -396,13 +396,13 @@ public function testBasicQueryParams() ->setParameter('name', $name) ->getResult(); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertCount(1, $result2); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(1, $result2); - $this->assertInstanceOf(Country::class, $result2[0]); + self::assertInstanceOf(Country::class, $result2[0]); - $this->assertEquals($result1[0]->getId(), $result2[0]->getId()); - $this->assertEquals($result1[0]->getName(), $result2[0]->getName()); + self::assertEquals($result1[0]->getId(), $result2[0]->getId()); + self::assertEquals($result1[0]->getName(), $result2[0]->getName()); } public function testLoadFromDatabaseWhenEntityMissing() @@ -412,27 +412,27 @@ public function testLoadFromDatabaseWhenEntityMissing() $this->loadFixturesCountries(); $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT c FROM Doctrine\Tests\Models\Cache\Country c'; $result1 = $this->_em->createQuery($dql)->setCacheable(true)->getResult(); - $this->assertCount(2, $result1); - $this->assertEquals($queryCount + 1 , $this->getCurrentQueryCount()); - $this->assertEquals($this->countries[0]->getId(), $result1[0]->getId()); - $this->assertEquals($this->countries[1]->getId(), $result1[1]->getId()); - $this->assertEquals($this->countries[0]->getName(), $result1[0]->getName()); - $this->assertEquals($this->countries[1]->getName(), $result1[1]->getName()); + self::assertCount(2, $result1); + self::assertEquals($queryCount + 1 , $this->getCurrentQueryCount()); + self::assertEquals($this->countries[0]->getId(), $result1[0]->getId()); + self::assertEquals($this->countries[1]->getId(), $result1[1]->getId()); + self::assertEquals($this->countries[0]->getName(), $result1[0]->getName()); + self::assertEquals($this->countries[1]->getName(), $result1[1]->getName()); - $this->assertEquals(3, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); + self::assertEquals(3, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); $this->cache->evictEntity(Country::class, $result1[0]->getId()); - $this->assertFalse($this->cache->containsEntity(Country::class, $result1[0]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $result1[0]->getId())); $this->_em->clear(); @@ -440,24 +440,24 @@ public function testLoadFromDatabaseWhenEntityMissing() ->setCacheable(true) ->getResult(); - $this->assertEquals($queryCount + 2 , $this->getCurrentQueryCount()); - $this->assertCount(2, $result2); + self::assertEquals($queryCount + 2 , $this->getCurrentQueryCount()); + self::assertCount(2, $result2); - $this->assertEquals(5, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(3, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); + self::assertEquals(5, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(3, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); - $this->assertInstanceOf(Country::class, $result2[0]); - $this->assertInstanceOf(Country::class, $result2[1]); + self::assertInstanceOf(Country::class, $result2[0]); + self::assertInstanceOf(Country::class, $result2[1]); - $this->assertEquals($result1[0]->getId(), $result2[0]->getId()); - $this->assertEquals($result1[1]->getId(), $result2[1]->getId()); + self::assertEquals($result1[0]->getId(), $result2[0]->getId()); + self::assertEquals($result1[1]->getId(), $result2[1]->getId()); - $this->assertEquals($result1[0]->getName(), $result2[0]->getName()); - $this->assertEquals($result1[1]->getName(), $result2[1]->getName()); + self::assertEquals($result1[0]->getName(), $result2[0]->getName()); + self::assertEquals($result1[1]->getName(), $result2[1]->getName()); - $this->assertEquals($queryCount + 2 , $this->getCurrentQueryCount()); + self::assertEquals($queryCount + 2 , $this->getCurrentQueryCount()); } public function testBasicQueryFetchJoinsOneToMany() @@ -475,26 +475,26 @@ public function testBasicQueryFetchJoinsOneToMany() ->setCacheable(true) ->getResult(); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertInstanceOf(State::class, $result1[0]); - $this->assertInstanceOf(State::class, $result1[1]); - $this->assertCount(2, $result1[0]->getCities()); - $this->assertCount(2, $result1[1]->getCities()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertInstanceOf(State::class, $result1[0]); + self::assertInstanceOf(State::class, $result1[1]); + self::assertCount(2, $result1[0]->getCities()); + self::assertCount(2, $result1[1]->getCities()); - $this->assertInstanceOf(City::class, $result1[0]->getCities()->get(0)); - $this->assertInstanceOf(City::class, $result1[0]->getCities()->get(1)); - $this->assertInstanceOf(City::class, $result1[1]->getCities()->get(0)); - $this->assertInstanceOf(City::class, $result1[1]->getCities()->get(1)); + self::assertInstanceOf(City::class, $result1[0]->getCities()->get(0)); + self::assertInstanceOf(City::class, $result1[0]->getCities()->get(1)); + self::assertInstanceOf(City::class, $result1[1]->getCities()->get(0)); + self::assertInstanceOf(City::class, $result1[1]->getCities()->get(1)); - $this->assertNotNull($result1[0]->getCities()->get(0)->getId()); - $this->assertNotNull($result1[0]->getCities()->get(1)->getId()); - $this->assertNotNull($result1[1]->getCities()->get(0)->getId()); - $this->assertNotNull($result1[1]->getCities()->get(1)->getId()); + self::assertNotNull($result1[0]->getCities()->get(0)->getId()); + self::assertNotNull($result1[0]->getCities()->get(1)->getId()); + self::assertNotNull($result1[1]->getCities()->get(0)->getId()); + self::assertNotNull($result1[1]->getCities()->get(1)->getId()); - $this->assertNotNull($result1[0]->getCities()->get(0)->getName()); - $this->assertNotNull($result1[0]->getCities()->get(1)->getName()); - $this->assertNotNull($result1[1]->getCities()->get(0)->getName()); - $this->assertNotNull($result1[1]->getCities()->get(1)->getName()); + self::assertNotNull($result1[0]->getCities()->get(0)->getName()); + self::assertNotNull($result1[0]->getCities()->get(1)->getName()); + self::assertNotNull($result1[1]->getCities()->get(0)->getName()); + self::assertNotNull($result1[1]->getCities()->get(1)->getName()); $this->_em->clear(); @@ -502,27 +502,27 @@ public function testBasicQueryFetchJoinsOneToMany() ->setCacheable(true) ->getResult(); - $this->assertInstanceOf(State::class, $result2[0]); - $this->assertInstanceOf(State::class, $result2[1]); - $this->assertCount(2, $result2[0]->getCities()); - $this->assertCount(2, $result2[1]->getCities()); + self::assertInstanceOf(State::class, $result2[0]); + self::assertInstanceOf(State::class, $result2[1]); + self::assertCount(2, $result2[0]->getCities()); + self::assertCount(2, $result2[1]->getCities()); - $this->assertInstanceOf(City::class, $result2[0]->getCities()->get(0)); - $this->assertInstanceOf(City::class, $result2[0]->getCities()->get(1)); - $this->assertInstanceOf(City::class, $result2[1]->getCities()->get(0)); - $this->assertInstanceOf(City::class, $result2[1]->getCities()->get(1)); + self::assertInstanceOf(City::class, $result2[0]->getCities()->get(0)); + self::assertInstanceOf(City::class, $result2[0]->getCities()->get(1)); + self::assertInstanceOf(City::class, $result2[1]->getCities()->get(0)); + self::assertInstanceOf(City::class, $result2[1]->getCities()->get(1)); - $this->assertNotNull($result2[0]->getCities()->get(0)->getId()); - $this->assertNotNull($result2[0]->getCities()->get(1)->getId()); - $this->assertNotNull($result2[1]->getCities()->get(0)->getId()); - $this->assertNotNull($result2[1]->getCities()->get(1)->getId()); + self::assertNotNull($result2[0]->getCities()->get(0)->getId()); + self::assertNotNull($result2[0]->getCities()->get(1)->getId()); + self::assertNotNull($result2[1]->getCities()->get(0)->getId()); + self::assertNotNull($result2[1]->getCities()->get(1)->getId()); - $this->assertNotNull($result2[0]->getCities()->get(0)->getName()); - $this->assertNotNull($result2[0]->getCities()->get(1)->getName()); - $this->assertNotNull($result2[1]->getCities()->get(0)->getName()); - $this->assertNotNull($result2[1]->getCities()->get(1)->getName()); + self::assertNotNull($result2[0]->getCities()->get(0)->getName()); + self::assertNotNull($result2[0]->getCities()->get(1)->getName()); + self::assertNotNull($result2[1]->getCities()->get(0)->getName()); + self::assertNotNull($result2[1]->getCities()->get(1)->getName()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); } public function testBasicQueryFetchJoinsManyToOne() @@ -541,25 +541,25 @@ public function testBasicQueryFetchJoinsManyToOne() ->setCacheable(true) ->getResult(); - $this->assertCount(4, $result1); - $this->assertInstanceOf(City::class, $result1[0]); - $this->assertInstanceOf(City::class, $result1[1]); - $this->assertInstanceOf(State::class, $result1[0]->getState()); - $this->assertInstanceOf(State::class, $result1[1]->getState()); + self::assertCount(4, $result1); + self::assertInstanceOf(City::class, $result1[0]); + self::assertInstanceOf(City::class, $result1[1]); + self::assertInstanceOf(State::class, $result1[0]->getState()); + self::assertInstanceOf(State::class, $result1[1]->getState()); - $this->assertTrue($this->cache->containsEntity(City::class, $result1[0]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $result1[1]->getId())); - $this->assertTrue($this->cache->containsEntity(State::class, $result1[0]->getState()->getId())); - $this->assertTrue($this->cache->containsEntity(State::class, $result1[1]->getState()->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $result1[0]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $result1[1]->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $result1[0]->getState()->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $result1[1]->getState()->getId())); - $this->assertEquals(7, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(State::class))); - $this->assertEquals(4, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(City::class))); + self::assertEquals(7, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(State::class))); + self::assertEquals(4, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(City::class))); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); $this->_em->clear(); $this->secondLevelCacheLogger->clearStats(); @@ -568,28 +568,28 @@ public function testBasicQueryFetchJoinsManyToOne() ->setCacheable(true) ->getResult(); - $this->assertCount(4, $result1); - $this->assertInstanceOf(City::class, $result2[0]); - $this->assertInstanceOf(City::class, $result2[1]); - $this->assertInstanceOf(State::class, $result2[0]->getState()); - $this->assertInstanceOf(State::class, $result2[1]->getState()); + self::assertCount(4, $result1); + self::assertInstanceOf(City::class, $result2[0]); + self::assertInstanceOf(City::class, $result2[1]); + self::assertInstanceOf(State::class, $result2[0]->getState()); + self::assertInstanceOf(State::class, $result2[1]->getState()); - $this->assertNotNull($result2[0]->getId()); - $this->assertNotNull($result2[0]->getId()); - $this->assertNotNull($result2[1]->getState()->getId()); - $this->assertNotNull($result2[1]->getState()->getId()); + self::assertNotNull($result2[0]->getId()); + self::assertNotNull($result2[0]->getId()); + self::assertNotNull($result2[1]->getState()->getId()); + self::assertNotNull($result2[1]->getState()->getId()); - $this->assertNotNull($result2[0]->getName()); - $this->assertNotNull($result2[0]->getName()); - $this->assertNotNull($result2[1]->getState()->getName()); - $this->assertNotNull($result2[1]->getState()->getName()); + self::assertNotNull($result2[0]->getName()); + self::assertNotNull($result2[0]->getName()); + self::assertNotNull($result2[1]->getState()->getName()); + self::assertNotNull($result2[1]->getState()->getName()); - $this->assertEquals($result1[0]->getName(), $result2[0]->getName()); - $this->assertEquals($result1[1]->getName(), $result2[1]->getName()); - $this->assertEquals($result1[0]->getState()->getName(), $result2[0]->getState()->getName()); - $this->assertEquals($result1[1]->getState()->getName(), $result2[1]->getState()->getName()); + self::assertEquals($result1[0]->getName(), $result2[0]->getName()); + self::assertEquals($result1[1]->getName(), $result2[1]->getName()); + self::assertEquals($result1[0]->getState()->getName(), $result2[0]->getState()->getName()); + self::assertEquals($result1[1]->getState()->getName(), $result2[1]->getState()->getName()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); } public function testReloadQueryIfToOneIsNotFound() @@ -608,17 +608,17 @@ public function testReloadQueryIfToOneIsNotFound() ->setCacheable(true) ->getResult(); - $this->assertCount(4, $result1); - $this->assertInstanceOf(City::class, $result1[0]); - $this->assertInstanceOf(City::class, $result1[1]); - $this->assertInstanceOf(State::class, $result1[0]->getState()); - $this->assertInstanceOf(State::class, $result1[1]->getState()); + self::assertCount(4, $result1); + self::assertInstanceOf(City::class, $result1[0]); + self::assertInstanceOf(City::class, $result1[1]); + self::assertInstanceOf(State::class, $result1[0]->getState()); + self::assertInstanceOf(State::class, $result1[1]->getState()); - $this->assertTrue($this->cache->containsEntity(City::class, $result1[0]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $result1[1]->getId())); - $this->assertTrue($this->cache->containsEntity(State::class, $result1[0]->getState()->getId())); - $this->assertTrue($this->cache->containsEntity(State::class, $result1[1]->getState()->getId())); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertTrue($this->cache->containsEntity(City::class, $result1[0]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $result1[1]->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $result1[0]->getState()->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $result1[1]->getState()->getId())); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); $this->_em->clear(); @@ -628,13 +628,13 @@ public function testReloadQueryIfToOneIsNotFound() ->setCacheable(true) ->getResult(); - $this->assertCount(4, $result1); - $this->assertInstanceOf(City::class, $result2[0]); - $this->assertInstanceOf(City::class, $result2[1]); - $this->assertInstanceOf(State::class, $result2[0]->getState()); - $this->assertInstanceOf(State::class, $result2[1]->getState()); + self::assertCount(4, $result1); + self::assertInstanceOf(City::class, $result2[0]); + self::assertInstanceOf(City::class, $result2[1]); + self::assertInstanceOf(State::class, $result2[0]->getState()); + self::assertInstanceOf(State::class, $result2[1]->getState()); - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount()); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); } public function testReloadQueryIfToManyAssociationItemIsNotFound() @@ -652,16 +652,16 @@ public function testReloadQueryIfToManyAssociationItemIsNotFound() ->setCacheable(true) ->getResult(); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertInstanceOf(State::class, $result1[0]); - $this->assertInstanceOf(State::class, $result1[1]); - $this->assertCount(2, $result1[0]->getCities()); - $this->assertCount(2, $result1[1]->getCities()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertInstanceOf(State::class, $result1[0]); + self::assertInstanceOf(State::class, $result1[1]); + self::assertCount(2, $result1[0]->getCities()); + self::assertCount(2, $result1[1]->getCities()); - $this->assertInstanceOf(City::class, $result1[0]->getCities()->get(0)); - $this->assertInstanceOf(City::class, $result1[0]->getCities()->get(1)); - $this->assertInstanceOf(City::class, $result1[1]->getCities()->get(0)); - $this->assertInstanceOf(City::class, $result1[1]->getCities()->get(1)); + self::assertInstanceOf(City::class, $result1[0]->getCities()->get(0)); + self::assertInstanceOf(City::class, $result1[0]->getCities()->get(1)); + self::assertInstanceOf(City::class, $result1[1]->getCities()->get(0)); + self::assertInstanceOf(City::class, $result1[1]->getCities()->get(1)); $this->_em->clear(); @@ -671,17 +671,17 @@ public function testReloadQueryIfToManyAssociationItemIsNotFound() ->setCacheable(true) ->getResult(); - $this->assertInstanceOf(State::class, $result2[0]); - $this->assertInstanceOf(State::class, $result2[1]); - $this->assertCount(2, $result2[0]->getCities()); - $this->assertCount(2, $result2[1]->getCities()); + self::assertInstanceOf(State::class, $result2[0]); + self::assertInstanceOf(State::class, $result2[1]); + self::assertCount(2, $result2[0]->getCities()); + self::assertCount(2, $result2[1]->getCities()); - $this->assertInstanceOf(City::class, $result2[0]->getCities()->get(0)); - $this->assertInstanceOf(City::class, $result2[0]->getCities()->get(1)); - $this->assertInstanceOf(City::class, $result2[1]->getCities()->get(0)); - $this->assertInstanceOf(City::class, $result2[1]->getCities()->get(1)); + self::assertInstanceOf(City::class, $result2[0]->getCities()->get(0)); + self::assertInstanceOf(City::class, $result2[0]->getCities()->get(1)); + self::assertInstanceOf(City::class, $result2[1]->getCities()->get(0)); + self::assertInstanceOf(City::class, $result2[1]->getCities()->get(1)); - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount()); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); } public function testBasicNativeQueryCache() @@ -692,8 +692,8 @@ public function testBasicNativeQueryCache() $this->secondLevelCacheLogger->clearStats(); $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); $rsm = new ResultSetMapping; $rsm->addEntityResult(Country::class, 'c'); @@ -704,17 +704,17 @@ public function testBasicNativeQueryCache() $sql = 'SELECT id, name FROM cache_country'; $result1 = $this->_em->createNativeQuery($sql, $rsm)->setCacheable(true)->getResult(); - $this->assertCount(2, $result1); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertEquals($this->countries[0]->getId(), $result1[0]->getId()); - $this->assertEquals($this->countries[1]->getId(), $result1[1]->getId()); - $this->assertEquals($this->countries[0]->getName(), $result1[0]->getName()); - $this->assertEquals($this->countries[1]->getName(), $result1[1]->getName()); + self::assertCount(2, $result1); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertEquals($this->countries[0]->getId(), $result1[0]->getId()); + self::assertEquals($this->countries[1]->getId(), $result1[1]->getId()); + self::assertEquals($this->countries[0]->getName(), $result1[0]->getName()); + self::assertEquals($this->countries[1]->getName(), $result1[1]->getName()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); $this->_em->clear(); @@ -722,33 +722,33 @@ public function testBasicNativeQueryCache() ->setCacheable(true) ->getResult(); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertCount(2, $result2); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(2, $result2); - $this->assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(3, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(3, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getDefaultQueryRegionName())); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); - $this->assertInstanceOf(Country::class, $result2[0]); - $this->assertInstanceOf(Country::class, $result2[1]); + self::assertInstanceOf(Country::class, $result2[0]); + self::assertInstanceOf(Country::class, $result2[1]); - $this->assertEquals($result1[0]->getId(), $result2[0]->getId()); - $this->assertEquals($result1[1]->getId(), $result2[1]->getId()); + self::assertEquals($result1[0]->getId(), $result2[0]->getId()); + self::assertEquals($result1[1]->getId(), $result2[1]->getId()); - $this->assertEquals($result1[0]->getName(), $result2[0]->getName()); - $this->assertEquals($result1[1]->getName(), $result2[1]->getName()); + self::assertEquals($result1[0]->getName(), $result2[0]->getName()); + self::assertEquals($result1[1]->getName(), $result2[1]->getName()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(3, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(3, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getDefaultQueryRegionName())); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount($this->getDefaultQueryRegionName())); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); } public function testQueryDependsOnFirstAndMaxResultResult() @@ -767,9 +767,9 @@ public function testQueryDependsOnFirstAndMaxResultResult() ->setMaxResults(1) ->getResult(); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); $this->_em->clear(); @@ -779,9 +779,9 @@ public function testQueryDependsOnFirstAndMaxResultResult() ->setMaxResults(1) ->getResult(); - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); $this->_em->clear(); @@ -789,9 +789,9 @@ public function testQueryDependsOnFirstAndMaxResultResult() ->setCacheable(true) ->getResult(); - $this->assertEquals($queryCount + 3, $this->getCurrentQueryCount()); - $this->assertEquals(3, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(3, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals($queryCount + 3, $this->getCurrentQueryCount()); + self::assertEquals(3, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(3, $this->secondLevelCacheLogger->getMissCount()); } public function testQueryCacheLifetime() @@ -816,10 +816,10 @@ public function testQueryCacheLifetime() ->setLifetime(3600) ->getResult(); - $this->assertNotEmpty($result1); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); + self::assertNotEmpty($result1); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); $this->_em->clear(); @@ -828,7 +828,7 @@ public function testQueryCacheLifetime() ->getRegion() ->get($key); - $this->assertInstanceOf(Cache\QueryCacheEntry::class, $entry); + self::assertInstanceOf(Cache\QueryCacheEntry::class, $entry); $entry->time = $entry->time / 2; $this->cache->getQueryCache() @@ -840,10 +840,10 @@ public function testQueryCacheLifetime() ->setLifetime(3600) ->getResult(); - $this->assertNotEmpty($result2); - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); + self::assertNotEmpty($result2); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); } public function testQueryCacheRegion() @@ -863,54 +863,54 @@ public function testQueryCacheRegion() ->setCacheRegion('foo_region') ->getResult(); - $this->assertNotEmpty($result1); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertEquals(0, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount('foo_region')); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount('foo_region')); + self::assertNotEmpty($result1); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertEquals(0, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount('foo_region')); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount('foo_region')); $query2 = clone $query; $result2 = $query2->setCacheable(true) ->setCacheRegion('bar_region') ->getResult(); - $this->assertNotEmpty($result2); - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount()); - $this->assertEquals(0, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount('bar_region')); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount('bar_region')); + self::assertNotEmpty($result2); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); + self::assertEquals(0, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount('bar_region')); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount('bar_region')); $query3 = clone $query; $result3 = $query3->setCacheable(true) ->setCacheRegion('foo_region') ->getResult(); - $this->assertNotEmpty($result3); - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount()); - $this->assertEquals(3, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount('foo_region')); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount('foo_region')); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount('foo_region')); + self::assertNotEmpty($result3); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); + self::assertEquals(3, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount('foo_region')); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount('foo_region')); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount('foo_region')); $query4 = clone $query; $result4 = $query4->setCacheable(true) ->setCacheRegion('bar_region') ->getResult(); - $this->assertNotEmpty($result3); - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount()); - $this->assertEquals(6, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount('bar_region')); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount('bar_region')); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount('bar_region')); + self::assertNotEmpty($result3); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); + self::assertEquals(6, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount('bar_region')); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount('bar_region')); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount('bar_region')); } public function testResolveAssociationCacheEntry() @@ -934,13 +934,13 @@ public function testResolveAssociationCacheEntry() ->setMaxResults(1) ->getSingleResult(); - $this->assertNotNull($state1); - $this->assertNotNull($state1->getCountry()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertInstanceOf(State::class, $state1); - $this->assertInstanceOf(Proxy::class, $state1->getCountry()); - $this->assertEquals($countryName, $state1->getCountry()->getName()); - $this->assertEquals($stateId, $state1->getId()); + self::assertNotNull($state1); + self::assertNotNull($state1->getCountry()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertInstanceOf(State::class, $state1); + self::assertInstanceOf(Proxy::class, $state1->getCountry()); + self::assertEquals($countryName, $state1->getCountry()->getName()); + self::assertEquals($stateId, $state1->getId()); $this->_em->clear(); @@ -952,13 +952,13 @@ public function testResolveAssociationCacheEntry() ->setMaxResults(1) ->getSingleResult(); - $this->assertNotNull($state2); - $this->assertNotNull($state2->getCountry()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertInstanceOf(State::class, $state2); - $this->assertInstanceOf(Proxy::class, $state2->getCountry()); - $this->assertEquals($countryName, $state2->getCountry()->getName()); - $this->assertEquals($stateId, $state2->getId()); + self::assertNotNull($state2); + self::assertNotNull($state2->getCountry()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertInstanceOf(State::class, $state2); + self::assertInstanceOf(Proxy::class, $state2->getCountry()); + self::assertEquals($countryName, $state2->getCountry()->getName()); + self::assertEquals($stateId, $state2->getId()); } public function testResolveToOneAssociationCacheEntry() @@ -983,11 +983,11 @@ public function testResolveToOneAssociationCacheEntry() ->setMaxResults(1) ->getSingleResult(); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertInstanceOf(City::class, $city1); - $this->assertInstanceOf(State::class, $city1->getState()); - $this->assertInstanceOf(City::class, $city1->getState()->getCities()->get(0)); - $this->assertInstanceOf(State::class, $city1->getState()->getCities()->get(0)->getState()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertInstanceOf(City::class, $city1); + self::assertInstanceOf(State::class, $city1->getState()); + self::assertInstanceOf(City::class, $city1->getState()->getCities()->get(0)); + self::assertInstanceOf(State::class, $city1->getState()->getCities()->get(0)->getState()); $this->_em->clear(); @@ -999,11 +999,11 @@ public function testResolveToOneAssociationCacheEntry() ->setMaxResults(1) ->getSingleResult(); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertInstanceOf(City::class, $city2); - $this->assertInstanceOf(State::class, $city2->getState()); - $this->assertInstanceOf(City::class, $city2->getState()->getCities()->get(0)); - $this->assertInstanceOf(State::class, $city2->getState()->getCities()->get(0)->getState()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertInstanceOf(City::class, $city2); + self::assertInstanceOf(State::class, $city2->getState()); + self::assertInstanceOf(City::class, $city2->getState()->getCities()->get(0)); + self::assertInstanceOf(State::class, $city2->getState()->getCities()->get(0)->getState()); } public function testResolveToManyAssociationCacheEntry() @@ -1028,12 +1028,12 @@ public function testResolveToManyAssociationCacheEntry() ->setMaxResults(1) ->getSingleResult(); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertInstanceOf(State::class, $state1); - $this->assertInstanceOf(Proxy::class, $state1->getCountry()); - $this->assertInstanceOf(City::class, $state1->getCities()->get(0)); - $this->assertInstanceOf(State::class, $state1->getCities()->get(0)->getState()); - $this->assertSame($state1, $state1->getCities()->get(0)->getState()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertInstanceOf(State::class, $state1); + self::assertInstanceOf(Proxy::class, $state1->getCountry()); + self::assertInstanceOf(City::class, $state1->getCities()->get(0)); + self::assertInstanceOf(State::class, $state1->getCities()->get(0)->getState()); + self::assertSame($state1, $state1->getCities()->get(0)->getState()); $this->_em->clear(); @@ -1045,12 +1045,12 @@ public function testResolveToManyAssociationCacheEntry() ->setMaxResults(1) ->getSingleResult(); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertInstanceOf(State::class, $state2); - $this->assertInstanceOf(Proxy::class, $state2->getCountry()); - $this->assertInstanceOf(City::class, $state2->getCities()->get(0)); - $this->assertInstanceOf(State::class, $state2->getCities()->get(0)->getState()); - $this->assertSame($state2, $state2->getCities()->get(0)->getState()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertInstanceOf(State::class, $state2); + self::assertInstanceOf(Proxy::class, $state2->getCountry()); + self::assertInstanceOf(City::class, $state2->getCities()->get(0)); + self::assertInstanceOf(State::class, $state2->getCities()->get(0)->getState()); + self::assertSame($state2, $state2->getCities()->get(0)->getState()); } public function testHintClearEntityRegionUpdateStatement() @@ -1058,15 +1058,15 @@ public function testHintClearEntityRegionUpdateStatement() $this->evictRegions(); $this->loadFixturesCountries(); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); $this->_em->createQuery('DELETE Doctrine\Tests\Models\Cache\Country u WHERE u.id = 4') ->setHint(Query::HINT_CACHE_EVICT, true) ->execute(); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); } public function testHintClearEntityRegionDeleteStatement() @@ -1074,15 +1074,15 @@ public function testHintClearEntityRegionDeleteStatement() $this->evictRegions(); $this->loadFixturesCountries(); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); $this->_em->createQuery("UPDATE Doctrine\Tests\Models\Cache\Country u SET u.name = 'foo' WHERE u.id = 1") ->setHint(Query::HINT_CACHE_EVICT, true) ->execute(); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheRepositoryTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheRepositoryTest.php index c8c4303c4da..6ef61ba95d2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheRepositoryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheRepositoryTest.php @@ -19,22 +19,22 @@ public function testRepositoryCacheFind() $this->secondLevelCacheLogger->clearStats(); $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); $queryCount = $this->getCurrentQueryCount(); $repository = $this->_em->getRepository(Country::class); $country1 = $repository->find($this->countries[0]->getId()); $country2 = $repository->find($this->countries[1]->getId()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertInstanceOf(Country::class, $country1); - $this->assertInstanceOf(Country::class, $country2); + self::assertInstanceOf(Country::class, $country1); + self::assertInstanceOf(Country::class, $country2); - $this->assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(0, $this->secondLevelCacheLogger->getMissCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(Country::class))); + self::assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(0, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(Country::class))); } @@ -45,28 +45,28 @@ public function testRepositoryCacheFindAll() $this->secondLevelCacheLogger->clearStats(); $this->_em->clear(); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); $repository = $this->_em->getRepository(Country::class); $queryCount = $this->getCurrentQueryCount(); - $this->assertCount(2, $repository->findAll()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(2, $repository->findAll()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); $queryCount = $this->getCurrentQueryCount(); $countries = $repository->findAll(); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertInstanceOf(Country::class, $countries[0]); - $this->assertInstanceOf(Country::class, $countries[1]); + self::assertInstanceOf(Country::class, $countries[0]); + self::assertInstanceOf(Country::class, $countries[1]); - $this->assertEquals(3, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(3, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); } public function testRepositoryCacheFindAllInvalidation() @@ -76,24 +76,23 @@ public function testRepositoryCacheFindAllInvalidation() $this->secondLevelCacheLogger->clearStats(); $this->_em->clear(); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); $repository = $this->_em->getRepository(Country::class); $queryCount = $this->getCurrentQueryCount(); - $this->assertCount(2, $repository->findAll()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(2, $repository->findAll()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); $queryCount = $this->getCurrentQueryCount(); $countries = $repository->findAll(); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); - - $this->assertCount(2, $countries); - $this->assertInstanceOf(Country::class, $countries[0]); - $this->assertInstanceOf(Country::class, $countries[1]); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertCount(2, $countries); + self::assertInstanceOf(Country::class, $countries[0]); + self::assertInstanceOf(Country::class, $countries[1]); $country = new Country('foo'); $this->_em->persist($country); @@ -102,8 +101,8 @@ public function testRepositoryCacheFindAllInvalidation() $queryCount = $this->getCurrentQueryCount(); - $this->assertCount(3, $repository->findAll()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(3, $repository->findAll()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); $country = $repository->find($country->getId()); @@ -113,8 +112,8 @@ public function testRepositoryCacheFindAllInvalidation() $queryCount = $this->getCurrentQueryCount(); - $this->assertCount(2, $repository->findAll()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(2, $repository->findAll()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); } public function testRepositoryCacheFindBy() @@ -124,27 +123,27 @@ public function testRepositoryCacheFindBy() $this->secondLevelCacheLogger->clearStats(); $this->_em->clear(); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); $criteria = ['name'=>$this->countries[0]->getName()]; $repository = $this->_em->getRepository(Country::class); $queryCount = $this->getCurrentQueryCount(); - $this->assertCount(1, $repository->findBy($criteria)); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(1, $repository->findBy($criteria)); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); $queryCount = $this->getCurrentQueryCount(); $countries = $repository->findBy($criteria); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertCount(1, $countries); - $this->assertInstanceOf(Country::class, $countries[0]); + self::assertCount(1, $countries); + self::assertInstanceOf(Country::class, $countries[0]); - $this->assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); } public function testRepositoryCacheFindOneBy() @@ -154,26 +153,26 @@ public function testRepositoryCacheFindOneBy() $this->secondLevelCacheLogger->clearStats(); $this->_em->clear(); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); $criteria = ['name'=>$this->countries[0]->getName()]; $repository = $this->_em->getRepository(Country::class); $queryCount = $this->getCurrentQueryCount(); - $this->assertNotNull($repository->findOneBy($criteria)); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertNotNull($repository->findOneBy($criteria)); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); $queryCount = $this->getCurrentQueryCount(); $country = $repository->findOneBy($criteria); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertInstanceOf(Country::class, $country); + self::assertInstanceOf(Country::class, $country); - $this->assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); } public function testRepositoryCacheFindAllToOneAssociation() @@ -191,29 +190,29 @@ public function testRepositoryCacheFindAllToOneAssociation() $queryCount = $this->getCurrentQueryCount(); $entities = $repository->findAll(); - $this->assertCount(4, $entities); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(4, $entities); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertInstanceOf(State::class, $entities[0]); - $this->assertInstanceOf(State::class, $entities[1]); - $this->assertInstanceOf(Country::class, $entities[0]->getCountry()); - $this->assertInstanceOf(Country::class, $entities[0]->getCountry()); - $this->assertInstanceOf(Proxy::class, $entities[0]->getCountry()); - $this->assertInstanceOf(Proxy::class, $entities[1]->getCountry()); + self::assertInstanceOf(State::class, $entities[0]); + self::assertInstanceOf(State::class, $entities[1]); + self::assertInstanceOf(Country::class, $entities[0]->getCountry()); + self::assertInstanceOf(Country::class, $entities[0]->getCountry()); + self::assertInstanceOf(Proxy::class, $entities[0]->getCountry()); + self::assertInstanceOf(Proxy::class, $entities[1]->getCountry()); // load from cache $queryCount = $this->getCurrentQueryCount(); $entities = $repository->findAll(); - $this->assertCount(4, $entities); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertCount(4, $entities); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertInstanceOf(State::class, $entities[0]); - $this->assertInstanceOf(State::class, $entities[1]); - $this->assertInstanceOf(Country::class, $entities[0]->getCountry()); - $this->assertInstanceOf(Country::class, $entities[1]->getCountry()); - $this->assertInstanceOf(Proxy::class, $entities[0]->getCountry()); - $this->assertInstanceOf(Proxy::class, $entities[1]->getCountry()); + self::assertInstanceOf(State::class, $entities[0]); + self::assertInstanceOf(State::class, $entities[1]); + self::assertInstanceOf(Country::class, $entities[0]->getCountry()); + self::assertInstanceOf(Country::class, $entities[1]->getCountry()); + self::assertInstanceOf(Proxy::class, $entities[0]->getCountry()); + self::assertInstanceOf(Proxy::class, $entities[1]->getCountry()); // invalidate cache $this->_em->persist(new State('foo', $this->_em->find(Country::class, $this->countries[0]->getId()))); @@ -224,28 +223,28 @@ public function testRepositoryCacheFindAllToOneAssociation() $queryCount = $this->getCurrentQueryCount(); $entities = $repository->findAll(); - $this->assertCount(5, $entities); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(5, $entities); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertInstanceOf(State::class, $entities[0]); - $this->assertInstanceOf(State::class, $entities[1]); - $this->assertInstanceOf(Country::class, $entities[0]->getCountry()); - $this->assertInstanceOf(Country::class, $entities[1]->getCountry()); - $this->assertInstanceOf(Proxy::class, $entities[0]->getCountry()); - $this->assertInstanceOf(Proxy::class, $entities[1]->getCountry()); + self::assertInstanceOf(State::class, $entities[0]); + self::assertInstanceOf(State::class, $entities[1]); + self::assertInstanceOf(Country::class, $entities[0]->getCountry()); + self::assertInstanceOf(Country::class, $entities[1]->getCountry()); + self::assertInstanceOf(Proxy::class, $entities[0]->getCountry()); + self::assertInstanceOf(Proxy::class, $entities[1]->getCountry()); // load from cache $queryCount = $this->getCurrentQueryCount(); $entities = $repository->findAll(); - $this->assertCount(5, $entities); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertCount(5, $entities); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertInstanceOf(State::class, $entities[0]); - $this->assertInstanceOf(State::class, $entities[1]); - $this->assertInstanceOf(Country::class, $entities[0]->getCountry()); - $this->assertInstanceOf(Country::class, $entities[1]->getCountry()); - $this->assertInstanceOf(Proxy::class, $entities[0]->getCountry()); - $this->assertInstanceOf(Proxy::class, $entities[1]->getCountry()); + self::assertInstanceOf(State::class, $entities[0]); + self::assertInstanceOf(State::class, $entities[1]); + self::assertInstanceOf(Country::class, $entities[0]->getCountry()); + self::assertInstanceOf(Country::class, $entities[1]->getCountry()); + self::assertInstanceOf(Proxy::class, $entities[0]->getCountry()); + self::assertInstanceOf(Proxy::class, $entities[1]->getCountry()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheSingleTableInheritanceTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheSingleTableInheritanceTest.php index 858adb3a19c..c2449a9dc08 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheSingleTableInheritanceTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheSingleTableInheritanceTest.php @@ -21,9 +21,9 @@ public function testUseSameRegion() $beachRegion = $this->cache->getEntityCacheRegion(Beach::class); $barRegion = $this->cache->getEntityCacheRegion(Bar::class); - $this->assertEquals($attractionRegion->getName(), $restaurantRegion->getName()); - $this->assertEquals($attractionRegion->getName(), $beachRegion->getName()); - $this->assertEquals($attractionRegion->getName(), $barRegion->getName()); + self::assertEquals($attractionRegion->getName(), $restaurantRegion->getName()); + self::assertEquals($attractionRegion->getName(), $beachRegion->getName()); + self::assertEquals($attractionRegion->getName(), $barRegion->getName()); } public function testPutOnPersistSingleTableInheritance() @@ -35,8 +35,8 @@ public function testPutOnPersistSingleTableInheritance() $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(Bar::class, $this->attractions[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Bar::class, $this->attractions[1]->getId())); + self::assertTrue($this->cache->containsEntity(Bar::class, $this->attractions[0]->getId())); + self::assertTrue($this->cache->containsEntity(Bar::class, $this->attractions[1]->getId())); } public function testCountaisRootClass() @@ -49,8 +49,8 @@ public function testCountaisRootClass() $this->_em->clear(); foreach ($this->attractions as $attraction) { - $this->assertTrue($this->cache->containsEntity(Attraction::class, $attraction->getId())); - $this->assertTrue($this->cache->containsEntity(get_class($attraction), $attraction->getId())); + self::assertTrue($this->cache->containsEntity(Attraction::class, $attraction->getId())); + self::assertTrue($this->cache->containsEntity(get_class($attraction), $attraction->getId())); } } @@ -68,29 +68,29 @@ public function testPutAndLoadEntities() $entityId1 = $this->attractions[0]->getId(); $entityId2 = $this->attractions[1]->getId(); - $this->assertFalse($this->cache->containsEntity(Attraction::class, $entityId1)); - $this->assertFalse($this->cache->containsEntity(Attraction::class, $entityId2)); - $this->assertFalse($this->cache->containsEntity(Bar::class, $entityId1)); - $this->assertFalse($this->cache->containsEntity(Bar::class, $entityId2)); + self::assertFalse($this->cache->containsEntity(Attraction::class, $entityId1)); + self::assertFalse($this->cache->containsEntity(Attraction::class, $entityId2)); + self::assertFalse($this->cache->containsEntity(Bar::class, $entityId1)); + self::assertFalse($this->cache->containsEntity(Bar::class, $entityId2)); $entity1 = $this->_em->find(Attraction::class, $entityId1); $entity2 = $this->_em->find(Attraction::class, $entityId2); - $this->assertTrue($this->cache->containsEntity(Attraction::class, $entityId1)); - $this->assertTrue($this->cache->containsEntity(Attraction::class, $entityId2)); - $this->assertTrue($this->cache->containsEntity(Bar::class, $entityId1)); - $this->assertTrue($this->cache->containsEntity(Bar::class, $entityId2)); + self::assertTrue($this->cache->containsEntity(Attraction::class, $entityId1)); + self::assertTrue($this->cache->containsEntity(Attraction::class, $entityId2)); + self::assertTrue($this->cache->containsEntity(Bar::class, $entityId1)); + self::assertTrue($this->cache->containsEntity(Bar::class, $entityId2)); - $this->assertInstanceOf(Attraction::class, $entity1); - $this->assertInstanceOf(Attraction::class, $entity2); - $this->assertInstanceOf(Bar::class, $entity1); - $this->assertInstanceOf(Bar::class, $entity2); + self::assertInstanceOf(Attraction::class, $entity1); + self::assertInstanceOf(Attraction::class, $entity2); + self::assertInstanceOf(Bar::class, $entity1); + self::assertInstanceOf(Bar::class, $entity2); - $this->assertEquals($this->attractions[0]->getId(), $entity1->getId()); - $this->assertEquals($this->attractions[0]->getName(), $entity1->getName()); + self::assertEquals($this->attractions[0]->getId(), $entity1->getId()); + self::assertEquals($this->attractions[0]->getName(), $entity1->getName()); - $this->assertEquals($this->attractions[1]->getId(), $entity2->getId()); - $this->assertEquals($this->attractions[1]->getName(), $entity2->getName()); + self::assertEquals($this->attractions[1]->getId(), $entity2->getId()); + self::assertEquals($this->attractions[1]->getName(), $entity2->getName()); $this->_em->clear(); @@ -99,20 +99,20 @@ public function testPutAndLoadEntities() $entity3 = $this->_em->find(Attraction::class, $entityId1); $entity4 = $this->_em->find(Attraction::class, $entityId2); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertInstanceOf(Attraction::class, $entity3); - $this->assertInstanceOf(Attraction::class, $entity4); - $this->assertInstanceOf(Bar::class, $entity3); - $this->assertInstanceOf(Bar::class, $entity4); + self::assertInstanceOf(Attraction::class, $entity3); + self::assertInstanceOf(Attraction::class, $entity4); + self::assertInstanceOf(Bar::class, $entity3); + self::assertInstanceOf(Bar::class, $entity4); - $this->assertNotSame($entity1, $entity3); - $this->assertEquals($entity1->getId(), $entity3->getId()); - $this->assertEquals($entity1->getName(), $entity3->getName()); + self::assertNotSame($entity1, $entity3); + self::assertEquals($entity1->getId(), $entity3->getId()); + self::assertEquals($entity1->getName(), $entity3->getName()); - $this->assertNotSame($entity2, $entity4); - $this->assertEquals($entity2->getId(), $entity4->getId()); - $this->assertEquals($entity2->getName(), $entity4->getName()); + self::assertNotSame($entity2, $entity4); + self::assertEquals($entity2->getId(), $entity4->getId()); + self::assertEquals($entity2->getName(), $entity4->getName()); } public function testQueryCacheFindAll() @@ -130,8 +130,8 @@ public function testQueryCacheFindAll() ->setCacheable(true) ->getResult(); - $this->assertCount(count($this->attractions), $result1); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(count($this->attractions), $result1); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); $this->_em->clear(); @@ -139,11 +139,11 @@ public function testQueryCacheFindAll() ->setCacheable(true) ->getResult(); - $this->assertCount(count($this->attractions), $result2); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(count($this->attractions), $result2); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); foreach ($result2 as $entity) { - $this->assertInstanceOf(Attraction::class, $entity); + self::assertInstanceOf(Attraction::class, $entity); } } @@ -157,12 +157,12 @@ public function testShouldNotPutOneToManyRelationOnPersist() $this->_em->clear(); foreach ($this->cities as $city) { - $this->assertTrue($this->cache->containsEntity(City::class, $city->getId())); - $this->assertFalse($this->cache->containsCollection(City::class, 'attractions', $city->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $city->getId())); + self::assertFalse($this->cache->containsCollection(City::class, 'attractions', $city->getId())); } foreach ($this->attractions as $attraction) { - $this->assertTrue($this->cache->containsEntity(Attraction::class, $attraction->getId())); + self::assertTrue($this->cache->containsEntity(Attraction::class, $attraction->getId())); } } @@ -181,35 +181,35 @@ public function testOneToManyRelationSingleTable() $entity = $this->_em->find(City::class, $this->cities[0]->getId()); - $this->assertInstanceOf(City::class, $entity); - $this->assertInstanceOf(PersistentCollection::class, $entity->getAttractions()); - $this->assertCount(2, $entity->getAttractions()); + self::assertInstanceOf(City::class, $entity); + self::assertInstanceOf(PersistentCollection::class, $entity->getAttractions()); + self::assertCount(2, $entity->getAttractions()); $ownerId = $this->cities[0]->getId(); $queryCount = $this->getCurrentQueryCount(); - $this->assertTrue($this->cache->containsEntity(City::class, $ownerId)); - $this->assertTrue($this->cache->containsCollection(City::class, 'attractions', $ownerId)); + self::assertTrue($this->cache->containsEntity(City::class, $ownerId)); + self::assertTrue($this->cache->containsCollection(City::class, 'attractions', $ownerId)); - $this->assertInstanceOf(Bar::class, $entity->getAttractions()->get(0)); - $this->assertInstanceOf(Bar::class, $entity->getAttractions()->get(1)); - $this->assertEquals($this->attractions[0]->getName(), $entity->getAttractions()->get(0)->getName()); - $this->assertEquals($this->attractions[1]->getName(), $entity->getAttractions()->get(1)->getName()); + self::assertInstanceOf(Bar::class, $entity->getAttractions()->get(0)); + self::assertInstanceOf(Bar::class, $entity->getAttractions()->get(1)); + self::assertEquals($this->attractions[0]->getName(), $entity->getAttractions()->get(0)->getName()); + self::assertEquals($this->attractions[1]->getName(), $entity->getAttractions()->get(1)->getName()); $this->_em->clear(); $entity = $this->_em->find(City::class, $ownerId); - $this->assertInstanceOf(City::class, $entity); - $this->assertInstanceOf(PersistentCollection::class, $entity->getAttractions()); - $this->assertCount(2, $entity->getAttractions()); + self::assertInstanceOf(City::class, $entity); + self::assertInstanceOf(PersistentCollection::class, $entity->getAttractions()); + self::assertCount(2, $entity->getAttractions()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertInstanceOf(Bar::class, $entity->getAttractions()->get(0)); - $this->assertInstanceOf(Bar::class, $entity->getAttractions()->get(1)); - $this->assertEquals($this->attractions[0]->getName(), $entity->getAttractions()->get(0)->getName()); - $this->assertEquals($this->attractions[1]->getName(), $entity->getAttractions()->get(1)->getName()); + self::assertInstanceOf(Bar::class, $entity->getAttractions()->get(0)); + self::assertInstanceOf(Bar::class, $entity->getAttractions()->get(1)); + self::assertEquals($this->attractions[0]->getName(), $entity->getAttractions()->get(0)->getName()); + self::assertEquals($this->attractions[1]->getName(), $entity->getAttractions()->get(1)->getName()); } public function testQueryCacheShouldBeEvictedOnTimestampUpdate() diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheTest.php index 32047dda39b..26d9098e50e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheTest.php @@ -16,10 +16,10 @@ public function testPutOnPersist() $this->loadFixturesCountries(); $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); - $this->assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(Country::class))); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(Country::class))); } public function testPutAndLoadEntities() @@ -27,28 +27,28 @@ public function testPutAndLoadEntities() $this->loadFixturesCountries(); $this->_em->clear(); - $this->assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(Country::class))); + self::assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(Country::class))); $this->cache->evictEntityRegion(Country::class); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); $c1 = $this->_em->find(Country::class, $this->countries[0]->getId()); $c2 = $this->_em->find(Country::class, $this->countries[1]->getId()); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); - $this->assertInstanceOf(Country::class, $c1); - $this->assertInstanceOf(Country::class, $c2); + self::assertInstanceOf(Country::class, $c1); + self::assertInstanceOf(Country::class, $c2); - $this->assertEquals($this->countries[0]->getId(), $c1->getId()); - $this->assertEquals($this->countries[0]->getName(), $c1->getName()); + self::assertEquals($this->countries[0]->getId(), $c1->getId()); + self::assertEquals($this->countries[0]->getName(), $c1->getName()); - $this->assertEquals($this->countries[1]->getId(), $c2->getId()); - $this->assertEquals($this->countries[1]->getName(), $c2->getName()); + self::assertEquals($this->countries[1]->getId(), $c2->getId()); + self::assertEquals($this->countries[1]->getName(), $c2->getName()); $this->_em->clear(); @@ -57,18 +57,18 @@ public function testPutAndLoadEntities() $c3 = $this->_em->find(Country::class, $this->countries[0]->getId()); $c4 = $this->_em->find(Country::class, $this->countries[1]->getId()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(Country::class))); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(Country::class))); - $this->assertInstanceOf(Country::class, $c3); - $this->assertInstanceOf(Country::class, $c4); + self::assertInstanceOf(Country::class, $c3); + self::assertInstanceOf(Country::class, $c4); - $this->assertEquals($c1->getId(), $c3->getId()); - $this->assertEquals($c1->getName(), $c3->getName()); + self::assertEquals($c1->getId(), $c3->getId()); + self::assertEquals($c1->getName(), $c3->getName()); - $this->assertEquals($c2->getId(), $c4->getId()); - $this->assertEquals($c2->getName(), $c4->getName()); + self::assertEquals($c2->getId(), $c4->getId()); + self::assertEquals($c2->getName(), $c4->getName()); } public function testRemoveEntities() @@ -76,45 +76,45 @@ public function testRemoveEntities() $this->loadFixturesCountries(); $this->_em->clear(); - $this->assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); $this->cache->evictEntityRegion(Country::class); $this->secondLevelCacheLogger->clearRegionStats($this->getEntityRegion(Country::class)); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); $c1 = $this->_em->find(Country::class, $this->countries[0]->getId()); $c2 = $this->_em->find(Country::class, $this->countries[1]->getId()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); - $this->assertInstanceOf(Country::class, $c1); - $this->assertInstanceOf(Country::class, $c2); + self::assertInstanceOf(Country::class, $c1); + self::assertInstanceOf(Country::class, $c2); - $this->assertEquals($this->countries[0]->getId(), $c1->getId()); - $this->assertEquals($this->countries[0]->getName(), $c1->getName()); + self::assertEquals($this->countries[0]->getId(), $c1->getId()); + self::assertEquals($this->countries[0]->getName(), $c1->getName()); - $this->assertEquals($this->countries[1]->getId(), $c2->getId()); - $this->assertEquals($this->countries[1]->getName(), $c2->getName()); + self::assertEquals($this->countries[1]->getId(), $c2->getId()); + self::assertEquals($this->countries[1]->getName(), $c2->getName()); $this->_em->remove($c1); $this->_em->remove($c2); $this->_em->flush(); $this->_em->clear(); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); + self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); - $this->assertNull($this->_em->find(Country::class, $this->countries[0]->getId())); - $this->assertNull($this->_em->find(Country::class, $this->countries[1]->getId())); + self::assertNull($this->_em->find(Country::class, $this->countries[0]->getId())); + self::assertNull($this->_em->find(Country::class, $this->countries[1]->getId())); - $this->assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); } public function testUpdateEntities() @@ -123,34 +123,34 @@ public function testUpdateEntities() $this->loadFixturesStates(); $this->_em->clear(); - $this->assertEquals(6, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(Country::class))); - $this->assertEquals(4, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(State::class))); + self::assertEquals(6, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(Country::class))); + self::assertEquals(4, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(State::class))); $this->cache->evictEntityRegion(State::class); $this->secondLevelCacheLogger->clearRegionStats($this->getEntityRegion(State::class)); - $this->assertFalse($this->cache->containsEntity(State::class, $this->states[0]->getId())); - $this->assertFalse($this->cache->containsEntity(State::class, $this->states[1]->getId())); + self::assertFalse($this->cache->containsEntity(State::class, $this->states[0]->getId())); + self::assertFalse($this->cache->containsEntity(State::class, $this->states[1]->getId())); $s1 = $this->_em->find(State::class, $this->states[0]->getId()); $s2 = $this->_em->find(State::class, $this->states[1]->getId()); - $this->assertEquals(4, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(Country::class))); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(State::class))); + self::assertEquals(4, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(Country::class))); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(State::class))); - $this->assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); - $this->assertTrue($this->cache->containsEntity(State::class, $this->states[1]->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $this->states[1]->getId())); - $this->assertInstanceOf(State::class, $s1); - $this->assertInstanceOf(State::class, $s2); + self::assertInstanceOf(State::class, $s1); + self::assertInstanceOf(State::class, $s2); - $this->assertEquals($this->states[0]->getId(), $s1->getId()); - $this->assertEquals($this->states[0]->getName(), $s1->getName()); + self::assertEquals($this->states[0]->getId(), $s1->getId()); + self::assertEquals($this->states[0]->getName(), $s1->getName()); - $this->assertEquals($this->states[1]->getId(), $s2->getId()); - $this->assertEquals($this->states[1]->getName(), $s2->getName()); + self::assertEquals($this->states[1]->getId(), $s2->getId()); + self::assertEquals($this->states[1]->getName(), $s2->getName()); $s1->setName("NEW NAME 1"); $s2->setName("NEW NAME 2"); @@ -160,37 +160,37 @@ public function testUpdateEntities() $this->_em->flush(); $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); - $this->assertTrue($this->cache->containsEntity(State::class, $this->states[1]->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $this->states[1]->getId())); - $this->assertEquals(6, $this->secondLevelCacheLogger->getPutCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(Country::class))); - $this->assertEquals(4, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(State::class))); + self::assertEquals(6, $this->secondLevelCacheLogger->getPutCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(Country::class))); + self::assertEquals(4, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(State::class))); $queryCount = $this->getCurrentQueryCount(); $c3 = $this->_em->find(State::class, $this->states[0]->getId()); $c4 = $this->_em->find(State::class, $this->states[1]->getId()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(State::class))); + self::assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(State::class))); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); - $this->assertTrue($this->cache->containsEntity(State::class, $this->states[1]->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $this->states[1]->getId())); - $this->assertInstanceOf(State::class, $c3); - $this->assertInstanceOf(State::class, $c4); + self::assertInstanceOf(State::class, $c3); + self::assertInstanceOf(State::class, $c4); - $this->assertEquals($s1->getId(), $c3->getId()); - $this->assertEquals("NEW NAME 1", $c3->getName()); + self::assertEquals($s1->getId(), $c3->getId()); + self::assertEquals("NEW NAME 1", $c3->getName()); - $this->assertEquals($s2->getId(), $c4->getId()); - $this->assertEquals("NEW NAME 2", $c4->getName()); + self::assertEquals($s2->getId(), $c4->getId()); + self::assertEquals("NEW NAME 2", $c4->getName()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); - $this->assertEquals(2, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(State::class))); + self::assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); + self::assertEquals(2, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(State::class))); } public function testPostFlushFailure() @@ -217,9 +217,9 @@ public function testPostFlushFailure() $this->fail('Should throw exception'); } catch (\RuntimeException $exc) { - $this->assertNotNull($country->getId()); - $this->assertEquals('post flush failure', $exc->getMessage()); - $this->assertTrue($this->cache->containsEntity(Country::class, $country->getId())); + self::assertNotNull($country->getId()); + self::assertEquals('post flush failure', $exc->getMessage()); + self::assertTrue($this->cache->containsEntity(Country::class, $country->getId())); } } @@ -246,9 +246,9 @@ public function testPostUpdateFailure() $stateName = $this->states[0]->getName(); $state = $this->_em->find(State::class, $stateId); - $this->assertTrue($this->cache->containsEntity(State::class, $stateId)); - $this->assertInstanceOf(State::class, $state); - $this->assertEquals($stateName, $state->getName()); + self::assertTrue($this->cache->containsEntity(State::class, $stateId)); + self::assertInstanceOf(State::class, $state); + self::assertEquals($stateName, $state->getName()); $state->setName($stateName . uniqid()); @@ -259,17 +259,17 @@ public function testPostUpdateFailure() $this->fail('Should throw exception'); } catch (\Exception $exc) { - $this->assertEquals('post update failure', $exc->getMessage()); + self::assertEquals('post update failure', $exc->getMessage()); } $this->_em->clear(); - $this->assertTrue($this->cache->containsEntity(State::class, $stateId)); + self::assertTrue($this->cache->containsEntity(State::class, $stateId)); $state = $this->_em->find(State::class, $stateId); - $this->assertInstanceOf(State::class, $state); - $this->assertEquals($stateName, $state->getName()); + self::assertInstanceOf(State::class, $state); + self::assertEquals($stateName, $state->getName()); } public function testPostRemoveFailure() @@ -293,8 +293,8 @@ public function testPostRemoveFailure() $countryId = $this->countries[0]->getId(); $country = $this->_em->find(Country::class, $countryId); - $this->assertTrue($this->cache->containsEntity(Country::class, $countryId)); - $this->assertInstanceOf(Country::class, $country); + self::assertTrue($this->cache->containsEntity(Country::class, $countryId)); + self::assertInstanceOf(Country::class, $country); $this->_em->remove($country); @@ -303,17 +303,17 @@ public function testPostRemoveFailure() $this->fail('Should throw exception'); } catch (\Exception $exc) { - $this->assertEquals('post remove failure', $exc->getMessage()); + self::assertEquals('post remove failure', $exc->getMessage()); } $this->_em->clear(); - $this->assertFalse( + self::assertFalse( $this->cache->containsEntity(Country::class, $countryId), 'Removal attempts should clear the cache entry corresponding to the entity' ); - $this->assertInstanceOf(Country::class, $this->_em->find(Country::class, $countryId)); + self::assertInstanceOf(Country::class, $this->_em->find(Country::class, $countryId)); } public function testCachedNewEntityExists() @@ -323,11 +323,11 @@ public function testCachedNewEntityExists() $persister = $this->_em->getUnitOfWork()->getEntityPersister(Country::class); $queryCount = $this->getCurrentQueryCount(); - $this->assertTrue($persister->exists($this->countries[0])); + self::assertTrue($persister->exists($this->countries[0])); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertFalse($persister->exists(new Country('Foo'))); + self::assertFalse($persister->exists(new Country('Foo'))); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SequenceEmulatedIdentityStrategyTest.php b/tests/Doctrine/Tests/ORM/Functional/SequenceEmulatedIdentityStrategyTest.php index d425936f5bd..e7050cca725 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SequenceEmulatedIdentityStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SequenceEmulatedIdentityStrategyTest.php @@ -53,9 +53,9 @@ public function testPreSavePostSaveCallbacksAreInvoked() $entity->setValue('hello'); $this->_em->persist($entity); $this->_em->flush(); - $this->assertTrue(is_numeric($entity->getId())); - $this->assertTrue($entity->getId() > 0); - $this->assertTrue($this->_em->contains($entity)); + self::assertTrue(is_numeric($entity->getId())); + self::assertTrue($entity->getId() > 0); + self::assertTrue($this->_em->contains($entity)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SingleTableCompositeKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/SingleTableCompositeKeyTest.php index 091c79f5412..1d999e2f64d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SingleTableCompositeKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SingleTableCompositeKeyTest.php @@ -27,7 +27,7 @@ public function testInsertWithCompositeKey() $this->_em->clear(); $entity = $this->findEntity(); - $this->assertEquals($childEntity, $entity); + self::assertEquals($childEntity, $entity); } /** @@ -49,7 +49,7 @@ public function testUpdateWithCompositeKey() $this->_em->clear(); $persistedEntity = $this->findEntity(); - $this->assertEquals($entity, $persistedEntity); + self::assertEquals($entity, $persistedEntity); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/SingleTableInheritanceTest.php b/tests/Doctrine/Tests/ORM/Functional/SingleTableInheritanceTest.php index 5bafffd790f..d3ba9ed74f3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SingleTableInheritanceTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SingleTableInheritanceTest.php @@ -114,9 +114,9 @@ public function testPersistChildOfBaseClass() $contract = $this->_em->find(CompanyFixContract::class, $fixContract->getId()); - $this->assertInstanceOf(CompanyFixContract::class, $contract); - $this->assertEquals(1000, $contract->getFixPrice()); - $this->assertEquals($this->salesPerson->getId(), $contract->getSalesPerson()->getId()); + self::assertInstanceOf(CompanyFixContract::class, $contract); + self::assertEquals(1000, $contract->getFixPrice()); + self::assertEquals($this->salesPerson->getId(), $contract->getSalesPerson()->getId()); } public function testPersistDeepChildOfBaseClass() @@ -135,10 +135,10 @@ public function testPersistDeepChildOfBaseClass() $contract = $this->_em->find(CompanyFlexUltraContract::class, $ultraContract->getId()); - $this->assertInstanceOf(CompanyFlexUltraContract::class, $contract); - $this->assertEquals(7000, $contract->getMaxPrice()); - $this->assertEquals(100, $contract->getHoursWorked()); - $this->assertEquals(50, $contract->getPricePerHour()); + self::assertInstanceOf(CompanyFlexUltraContract::class, $contract); + self::assertEquals(7000, $contract->getMaxPrice()); + self::assertEquals(100, $contract->getHoursWorked()); + self::assertEquals(50, $contract->getPricePerHour()); } public function testChildClassLifecycleUpdate() @@ -152,7 +152,7 @@ public function testChildClassLifecycleUpdate() $this->_em->clear(); $newFix = $this->_em->find(CompanyContract::class, $this->fix->getId()); - $this->assertEquals(2500, $newFix->getFixPrice()); + self::assertEquals(2500, $newFix->getFixPrice()); } public function testChildClassLifecycleRemove() @@ -163,7 +163,7 @@ public function testChildClassLifecycleRemove() $this->_em->remove($fix); $this->_em->flush(); - $this->assertNull($this->_em->find(CompanyContract::class, $this->fix->getId())); + self::assertNull($this->_em->find(CompanyContract::class, $this->fix->getId())); } public function testFindAllForAbstractBaseClass() @@ -171,17 +171,17 @@ public function testFindAllForAbstractBaseClass() $this->loadFullFixture(); $contracts = $this->_em->getRepository(CompanyContract::class)->findAll(); - $this->assertEquals(3, count($contracts)); - $this->assertContainsOnly(CompanyContract::class, $contracts); + self::assertEquals(3, count($contracts)); + self::assertContainsOnly(CompanyContract::class, $contracts); } public function testFindAllForChildClass() { $this->loadFullFixture(); - $this->assertEquals(1, count($this->_em->getRepository(CompanyFixContract::class)->findAll())); - $this->assertEquals(2, count($this->_em->getRepository(CompanyFlexContract::class)->findAll())); - $this->assertEquals(1, count($this->_em->getRepository(CompanyFlexUltraContract::class)->findAll())); + self::assertEquals(1, count($this->_em->getRepository(CompanyFixContract::class)->findAll())); + self::assertEquals(2, count($this->_em->getRepository(CompanyFlexContract::class)->findAll())); + self::assertEquals(1, count($this->_em->getRepository(CompanyFlexUltraContract::class)->findAll())); } public function testFindForAbstractBaseClass() @@ -190,8 +190,8 @@ public function testFindForAbstractBaseClass() $contract = $this->_em->find(CompanyContract::class, $this->fix->getId()); - $this->assertInstanceOf(CompanyFixContract::class, $contract); - $this->assertEquals(1000, $contract->getFixPrice()); + self::assertInstanceOf(CompanyFixContract::class, $contract); + self::assertEquals(1000, $contract->getFixPrice()); } public function testQueryForAbstractBaseClass() @@ -200,17 +200,17 @@ public function testQueryForAbstractBaseClass() $contracts = $this->_em->createQuery('SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c')->getResult(); - $this->assertEquals(3, count($contracts)); - $this->assertContainsOnly(CompanyContract::class, $contracts); + self::assertEquals(3, count($contracts)); + self::assertContainsOnly(CompanyContract::class, $contracts); } public function testQueryForChildClass() { $this->loadFullFixture(); - $this->assertEquals(1, count($this->_em->createQuery('SELECT c FROM Doctrine\Tests\Models\Company\CompanyFixContract c')->getResult())); - $this->assertEquals(2, count($this->_em->createQuery('SELECT c FROM Doctrine\Tests\Models\Company\CompanyFlexContract c')->getResult())); - $this->assertEquals(1, count($this->_em->createQuery('SELECT c FROM Doctrine\Tests\Models\Company\CompanyFlexUltraContract c')->getResult())); + self::assertEquals(1, count($this->_em->createQuery('SELECT c FROM Doctrine\Tests\Models\Company\CompanyFixContract c')->getResult())); + self::assertEquals(2, count($this->_em->createQuery('SELECT c FROM Doctrine\Tests\Models\Company\CompanyFlexContract c')->getResult())); + self::assertEquals(1, count($this->_em->createQuery('SELECT c FROM Doctrine\Tests\Models\Company\CompanyFlexUltraContract c')->getResult())); } public function testQueryBaseClassWithJoin() @@ -218,8 +218,8 @@ public function testQueryBaseClassWithJoin() $this->loadFullFixture(); $contracts = $this->_em->createQuery('SELECT c, p FROM Doctrine\Tests\Models\Company\CompanyContract c JOIN c.salesPerson p')->getResult(); - $this->assertEquals(3, count($contracts)); - $this->assertContainsOnly(CompanyContract::class, $contracts); + self::assertEquals(3, count($contracts)); + self::assertContainsOnly(CompanyContract::class, $contracts); } public function testQueryScalarWithDiscriminatorValue() @@ -234,7 +234,7 @@ public function testQueryScalarWithDiscriminatorValue() sort($discrValues); - $this->assertEquals(['fix', 'flexible', 'flexultra'], $discrValues); + self::assertEquals(['fix', 'flexible', 'flexultra'], $discrValues); } public function testQueryChildClassWithCondition() @@ -244,8 +244,8 @@ public function testQueryChildClassWithCondition() $dql = 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyFixContract c WHERE c.fixPrice = ?1'; $contract = $this->_em->createQuery($dql)->setParameter(1, 1000)->getSingleResult(); - $this->assertInstanceOf(CompanyFixContract::class, $contract); - $this->assertEquals(1000, $contract->getFixPrice()); + self::assertInstanceOf(CompanyFixContract::class, $contract); + self::assertEquals(1000, $contract->getFixPrice()); } /** @@ -258,13 +258,13 @@ public function testUpdateChildClassWithCondition() $dql = 'UPDATE Doctrine\Tests\Models\Company\CompanyFlexContract c SET c.hoursWorked = c.hoursWorked * 2 WHERE c.hoursWorked = 150'; $affected = $this->_em->createQuery($dql)->execute(); - $this->assertEquals(1, $affected); + self::assertEquals(1, $affected); $flexContract = $this->_em->find(CompanyContract::class, $this->flex->getId()); $ultraContract = $this->_em->find(CompanyContract::class, $this->ultra->getId()); - $this->assertEquals(300, $ultraContract->getHoursWorked()); - $this->assertEquals(100, $flexContract->getHoursWorked()); + self::assertEquals(300, $ultraContract->getHoursWorked()); + self::assertEquals(100, $flexContract->getHoursWorked()); } public function testUpdateBaseClassWithCondition() @@ -274,12 +274,12 @@ public function testUpdateBaseClassWithCondition() $dql = 'UPDATE Doctrine\Tests\Models\Company\CompanyContract c SET c.completed = true WHERE c.completed = false'; $affected = $this->_em->createQuery($dql)->execute(); - $this->assertEquals(1, $affected); + self::assertEquals(1, $affected); $dql = 'UPDATE Doctrine\Tests\Models\Company\CompanyContract c SET c.completed = false'; $affected = $this->_em->createQuery($dql)->execute(); - $this->assertEquals(3, $affected); + self::assertEquals(3, $affected); } public function testDeleteByChildClassCondition() @@ -289,7 +289,7 @@ public function testDeleteByChildClassCondition() $dql = 'DELETE Doctrine\Tests\Models\Company\CompanyFlexContract c'; $affected = $this->_em->createQuery($dql)->execute(); - $this->assertEquals(2, $affected); + self::assertEquals(2, $affected); } public function testDeleteByBaseClassCondition() @@ -299,12 +299,12 @@ public function testDeleteByBaseClassCondition() $dql = "DELETE Doctrine\Tests\Models\Company\CompanyContract c WHERE c.completed = true"; $affected = $this->_em->createQuery($dql)->execute(); - $this->assertEquals(2, $affected); + self::assertEquals(2, $affected); $contracts = $this->_em->createQuery('SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c')->getResult(); - $this->assertEquals(1, count($contracts)); + self::assertEquals(1, count($contracts)); - $this->assertFalse($contracts[0]->isCompleted(), "Only non completed contracts should be left."); + self::assertFalse($contracts[0]->isCompleted(), "Only non completed contracts should be left."); } /** @@ -318,7 +318,7 @@ public function testDeleteJoinTableRecords() $this->_em->remove($this->_em->find(get_class($this->fix), $this->fix->getId())); $this->_em->flush(); - $this->assertNull($this->_em->find(get_class($this->fix), $this->fix->getId()), "Contract should not be present in the database anymore."); + self::assertNull($this->_em->find(get_class($this->fix), $this->fix->getId()), "Contract should not be present in the database anymore."); } /** @@ -330,19 +330,19 @@ public function testFindByAssociation() $repos = $this->_em->getRepository(CompanyContract::class); $contracts = $repos->findBy(['salesPerson' => $this->salesPerson->getId()]); - $this->assertEquals(3, count($contracts), "There should be 3 entities related to " . $this->salesPerson->getId() . " for 'Doctrine\Tests\Models\Company\CompanyContract'"); + self::assertEquals(3, count($contracts), "There should be 3 entities related to " . $this->salesPerson->getId() . " for 'Doctrine\Tests\Models\Company\CompanyContract'"); $repos = $this->_em->getRepository(CompanyFixContract::class); $contracts = $repos->findBy(['salesPerson' => $this->salesPerson->getId()]); - $this->assertEquals(1, count($contracts), "There should be 1 entities related to " . $this->salesPerson->getId() . " for 'Doctrine\Tests\Models\Company\CompanyFixContract'"); + self::assertEquals(1, count($contracts), "There should be 1 entities related to " . $this->salesPerson->getId() . " for 'Doctrine\Tests\Models\Company\CompanyFixContract'"); $repos = $this->_em->getRepository(CompanyFlexContract::class); $contracts = $repos->findBy(['salesPerson' => $this->salesPerson->getId()]); - $this->assertEquals(2, count($contracts), "There should be 2 entities related to " . $this->salesPerson->getId() . " for 'Doctrine\Tests\Models\Company\CompanyFlexContract'"); + self::assertEquals(2, count($contracts), "There should be 2 entities related to " . $this->salesPerson->getId() . " for 'Doctrine\Tests\Models\Company\CompanyFlexContract'"); $repos = $this->_em->getRepository(CompanyFlexUltraContract::class); $contracts = $repos->findBy(['salesPerson' => $this->salesPerson->getId()]); - $this->assertEquals(1, count($contracts), "There should be 1 entities related to " . $this->salesPerson->getId() . " for 'Doctrine\Tests\Models\Company\CompanyFlexUltraContract'"); + self::assertEquals(1, count($contracts), "There should be 1 entities related to " . $this->salesPerson->getId() . " for 'Doctrine\Tests\Models\Company\CompanyFlexUltraContract'"); } /** @@ -356,13 +356,13 @@ public function testInheritanceMatching() $contracts = $repository->matching(new Criteria( Criteria::expr()->eq('salesPerson', $this->salesPerson) )); - $this->assertEquals(3, count($contracts)); + self::assertEquals(3, count($contracts)); $repository = $this->_em->getRepository(CompanyFixContract::class); $contracts = $repository->matching(new Criteria( Criteria::expr()->eq('salesPerson', $this->salesPerson) )); - $this->assertEquals(1, count($contracts)); + self::assertEquals(1, count($contracts)); } /** @@ -393,13 +393,13 @@ public function testGetReferenceEntityWithSubclasses() $this->loadFullFixture(); $ref = $this->_em->getReference(CompanyContract::class, $this->fix->getId()); - $this->assertNotInstanceOf(Proxy::class, $ref, "Cannot Request a proxy from a class that has subclasses."); - $this->assertInstanceOf(CompanyContract::class, $ref); - $this->assertInstanceOf(CompanyFixContract::class, $ref, "Direct fetch of the reference has to load the child class Employee directly."); + self::assertNotInstanceOf(Proxy::class, $ref, "Cannot Request a proxy from a class that has subclasses."); + self::assertInstanceOf(CompanyContract::class, $ref); + self::assertInstanceOf(CompanyFixContract::class, $ref, "Direct fetch of the reference has to load the child class Employee directly."); $this->_em->clear(); $ref = $this->_em->getReference(CompanyFixContract::class, $this->fix->getId()); - $this->assertInstanceOf(Proxy::class, $ref, "A proxy can be generated only if no subclasses exists for the requested reference."); + self::assertInstanceOf(Proxy::class, $ref, "A proxy can be generated only if no subclasses exists for the requested reference."); } /** @@ -415,6 +415,6 @@ public function testEagerLoadInheritanceHierarchy() ->setParameter(1, $this->fix->getId()) ->getSingleResult(); - $this->assertNotInstanceOf(Proxy::class, $contract->getSalesPerson()); + self::assertNotInstanceOf(Proxy::class, $contract->getSalesPerson()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/StandardEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Functional/StandardEntityPersisterTest.php index bef1f768212..25d53778645 100644 --- a/tests/Doctrine/Tests/ORM/Functional/StandardEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/StandardEntityPersisterTest.php @@ -40,7 +40,7 @@ public function testAcceptsForeignKeysAsCriteria() $newCart = new ECommerceCart(); $this->_em->getUnitOfWork()->registerManaged($newCart, ['id' => $cardId], []); $persister->load(['customer_id' => $customer->getId()], $newCart, $class->associationMappings['customer']); - $this->assertEquals('Credit card', $newCart->getPayment()); + self::assertEquals('Credit card', $newCart->getPayment()); } /** @@ -61,8 +61,8 @@ public function testAddPersistRetrieve() $this->_em->flush(); - $this->assertEquals(2, count($p->getFeatures())); - $this->assertInstanceOf(PersistentCollection::class, $p->getFeatures()); + self::assertEquals(2, count($p->getFeatures())); + self::assertInstanceOf(PersistentCollection::class, $p->getFeatures()); $q = $this->_em->createQuery( 'SELECT p, f @@ -72,15 +72,15 @@ public function testAddPersistRetrieve() $res = $q->getResult(); - $this->assertEquals(2, count($p->getFeatures())); - $this->assertInstanceOf(PersistentCollection::class, $p->getFeatures()); + self::assertEquals(2, count($p->getFeatures())); + self::assertInstanceOf(PersistentCollection::class, $p->getFeatures()); // Check that the features are the same instances still foreach ($p->getFeatures() as $feature) { if ($feature->getDescription() == 'AC-3') { - $this->assertTrue($feature === $f1); + self::assertTrue($feature === $f1); } else { - $this->assertTrue($feature === $f2); + self::assertTrue($feature === $f2); } } @@ -103,6 +103,6 @@ public function testAddPersistRetrieve() $res = $q->getResult(); // Persisted Product now must have 3 Feature items - $this->assertEquals(3, count($res[0]->getFeatures())); + self::assertEquals(3, count($res[0]->getFeatures())); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1040Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1040Test.php index 988e8ba99d2..f96c77ea4ec 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1040Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1040Test.php @@ -49,7 +49,7 @@ public function testReuseNamedEntityParameter() ->setParameter('topic', 'This is John Galt speaking!') ->getSingleResult(); - $this->assertSame($article, $farticle); + self::assertSame($article, $farticle); } public function testUseMultiplePositionalParameters() @@ -75,6 +75,6 @@ public function testUseMultiplePositionalParameters() ->setParameter(3, $user) ->getSingleResult(); - $this->assertSame($article, $farticle); + self::assertSame($article, $farticle); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1041Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1041Test.php index ed27ed10044..9f388662076 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1041Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1041Test.php @@ -26,8 +26,8 @@ public function testGrabWrongSubtypeReturnsNull() $id = $fix->getId(); - $this->assertNull($this->_em->find(Models\Company\CompanyFlexContract::class, $id)); - $this->assertNull($this->_em->getReference(Models\Company\CompanyFlexContract::class, $id)); - $this->assertNull($this->_em->getPartialReference(Models\Company\CompanyFlexContract::class, $id)); + self::assertNull($this->_em->find(Models\Company\CompanyFlexContract::class, $id)); + self::assertNull($this->_em->getReference(Models\Company\CompanyFlexContract::class, $id)); + self::assertNull($this->_em->getPartialReference(Models\Company\CompanyFlexContract::class, $id)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1043Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1043Test.php index 9b35eb006c2..3520723741b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1043Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1043Test.php @@ -31,6 +31,6 @@ public function testChangeSetPlusWeirdPHPCastingIntCastingRule() $this->_em->clear(); $user = $this->_em->find(CmsUser::class, $user->id); - $this->assertSame("44", $user->status); + self::assertSame("44", $user->status); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1080Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1080Test.php index 59ee4bb58ff..3eee24396dc 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1080Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1080Test.php @@ -62,7 +62,7 @@ public function testHydration() $foo = $this->_em->find(DDC1080Foo::class, $foo1->getFooID()); $fooBars = $foo->getFooBars(); - $this->assertEquals(3, count($fooBars), "Should return three foobars."); + self::assertEquals(3, count($fooBars), "Should return three foobars."); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1129Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1129Test.php index 81c95010298..fc9f1566d6b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1129Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1129Test.php @@ -24,22 +24,22 @@ public function testVersionFieldIgnoredInChangesetComputation() $this->_em->persist($article); $this->_em->flush(); - $this->assertEquals(1, $article->version); + self::assertEquals(1, $article->version); $class = $this->_em->getClassMetadata(CmsArticle::class); $uow = $this->_em->getUnitOfWork(); $uow->computeChangeSet($class, $article); $changeSet = $uow->getEntityChangeSet($article); - $this->assertEquals(0, count($changeSet), "No changesets should be computed."); + self::assertEquals(0, count($changeSet), "No changesets should be computed."); $article->text = "This is John Galt speaking."; $this->_em->flush(); - $this->assertEquals(2, $article->version); + self::assertEquals(2, $article->version); $uow->computeChangeSet($class, $article); $changeSet = $uow->getEntityChangeSet($article); - $this->assertEquals(0, count($changeSet), "No changesets should be computed."); + self::assertEquals(0, count($changeSet), "No changesets should be computed."); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1151Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1151Test.php index 5677801b408..f1c92271b0f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1151Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1151Test.php @@ -20,15 +20,15 @@ public function testQuoteForeignKey() ] ); - $this->assertEquals("CREATE TABLE \"User\" (id INT NOT NULL, PRIMARY KEY(id))", $sql[0]); - $this->assertEquals("CREATE TABLE ddc1151user_ddc1151group (ddc1151user_id INT NOT NULL, ddc1151group_id INT NOT NULL, PRIMARY KEY(ddc1151user_id, ddc1151group_id))", $sql[1]); - $this->assertEquals("CREATE INDEX IDX_88A3259AC5AD08A ON ddc1151user_ddc1151group (ddc1151user_id)", $sql[2]); - $this->assertEquals("CREATE INDEX IDX_88A32597357E0B1 ON ddc1151user_ddc1151group (ddc1151group_id)", $sql[3]); - $this->assertEquals("CREATE TABLE \"Group\" (id INT NOT NULL, PRIMARY KEY(id))", $sql[4]); - $this->assertEquals("CREATE SEQUENCE \"User_id_seq\" INCREMENT BY 1 MINVALUE 1 START 1", $sql[5]); - $this->assertEquals("CREATE SEQUENCE \"Group_id_seq\" INCREMENT BY 1 MINVALUE 1 START 1", $sql[6]); - $this->assertEquals("ALTER TABLE ddc1151user_ddc1151group ADD CONSTRAINT FK_88A3259AC5AD08A FOREIGN KEY (ddc1151user_id) REFERENCES \"User\" (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE", $sql[7]); - $this->assertEquals("ALTER TABLE ddc1151user_ddc1151group ADD CONSTRAINT FK_88A32597357E0B1 FOREIGN KEY (ddc1151group_id) REFERENCES \"Group\" (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE", $sql[8]); + self::assertEquals("CREATE TABLE \"User\" (id INT NOT NULL, PRIMARY KEY(id))", $sql[0]); + self::assertEquals("CREATE TABLE ddc1151user_ddc1151group (ddc1151user_id INT NOT NULL, ddc1151group_id INT NOT NULL, PRIMARY KEY(ddc1151user_id, ddc1151group_id))", $sql[1]); + self::assertEquals("CREATE INDEX IDX_88A3259AC5AD08A ON ddc1151user_ddc1151group (ddc1151user_id)", $sql[2]); + self::assertEquals("CREATE INDEX IDX_88A32597357E0B1 ON ddc1151user_ddc1151group (ddc1151group_id)", $sql[3]); + self::assertEquals("CREATE TABLE \"Group\" (id INT NOT NULL, PRIMARY KEY(id))", $sql[4]); + self::assertEquals("CREATE SEQUENCE \"User_id_seq\" INCREMENT BY 1 MINVALUE 1 START 1", $sql[5]); + self::assertEquals("CREATE SEQUENCE \"Group_id_seq\" INCREMENT BY 1 MINVALUE 1 START 1", $sql[6]); + self::assertEquals("ALTER TABLE ddc1151user_ddc1151group ADD CONSTRAINT FK_88A3259AC5AD08A FOREIGN KEY (ddc1151user_id) REFERENCES \"User\" (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE", $sql[7]); + self::assertEquals("ALTER TABLE ddc1151user_ddc1151group ADD CONSTRAINT FK_88A32597357E0B1 FOREIGN KEY (ddc1151group_id) REFERENCES \"Group\" (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE", $sql[8]); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1163Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1163Test.php index f287034925a..cab871b1441 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1163Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1163Test.php @@ -64,7 +64,7 @@ private function createProxyForSpecialProduct() /* @var $proxyHolder DDC1163ProxyHolder */ $proxyHolder = $this->_em->find(DDC1163ProxyHolder::class, $this->proxyHolderId); - $this->assertInstanceOf(DDC1163SpecialProduct::class, $proxyHolder->getSpecialProduct()); + self::assertInstanceOf(DDC1163SpecialProduct::class, $proxyHolder->getSpecialProduct()); } private function setPropertyAndAssignTagToSpecialProduct() @@ -72,13 +72,13 @@ private function setPropertyAndAssignTagToSpecialProduct() /* @var $specialProduct DDC1163SpecialProduct */ $specialProduct = $this->_em->find(DDC1163SpecialProduct::class, $this->productId); - $this->assertInstanceOf(DDC1163SpecialProduct::class, $specialProduct); - $this->assertInstanceOf(Proxy::class, $specialProduct); + self::assertInstanceOf(DDC1163SpecialProduct::class, $specialProduct); + self::assertInstanceOf(Proxy::class, $specialProduct); $specialProduct->setSubclassProperty('foobar'); // this screams violation of law of demeter ;) - $this->assertEquals( + self::assertEquals( DDC1163SpecialProduct::class, $this->_em->getUnitOfWork()->getEntityPersister(get_class($specialProduct))->getClassMetadata()->name ); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC117Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC117Test.php index 8478a5f66d6..c42265ddde4 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC117Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC117Test.php @@ -57,30 +57,30 @@ public function testAssociationOnlyCompositeKey() $idCriteria = ['source' => $this->article1->id(), 'target' => $this->article2->id()]; $mapRef = $this->_em->find(DDC117Reference::class, $idCriteria); - $this->assertInstanceOf(DDC117Reference::class, $mapRef); - $this->assertInstanceOf(DDC117Article::class, $mapRef->target()); - $this->assertInstanceOf(DDC117Article::class, $mapRef->source()); - $this->assertSame($mapRef, $this->_em->find(DDC117Reference::class, $idCriteria)); + self::assertInstanceOf(DDC117Reference::class, $mapRef); + self::assertInstanceOf(DDC117Article::class, $mapRef->target()); + self::assertInstanceOf(DDC117Article::class, $mapRef->source()); + self::assertSame($mapRef, $this->_em->find(DDC117Reference::class, $idCriteria)); $this->_em->clear(); $dql = 'SELECT r, s FROM ' . DDC117Reference::class . ' r JOIN r.source s WHERE r.source = ?1'; $dqlRef = $this->_em->createQuery($dql)->setParameter(1, 1)->getSingleResult(); - $this->assertInstanceOf(DDC117Reference::class, $mapRef); - $this->assertInstanceOf(DDC117Article::class, $mapRef->target()); - $this->assertInstanceOf(DDC117Article::class, $mapRef->source()); - $this->assertSame($dqlRef, $this->_em->find(DDC117Reference::class, $idCriteria)); + self::assertInstanceOf(DDC117Reference::class, $mapRef); + self::assertInstanceOf(DDC117Article::class, $mapRef->target()); + self::assertInstanceOf(DDC117Article::class, $mapRef->source()); + self::assertSame($dqlRef, $this->_em->find(DDC117Reference::class, $idCriteria)); $this->_em->clear(); $dql = 'SELECT r, s FROM ' . DDC117Reference::class . ' r JOIN r.source s WHERE s.title = ?1'; $dqlRef = $this->_em->createQuery($dql)->setParameter(1, 'Foo')->getSingleResult(); - $this->assertInstanceOf(DDC117Reference::class, $dqlRef); - $this->assertInstanceOf(DDC117Article::class, $dqlRef->target()); - $this->assertInstanceOf(DDC117Article::class, $dqlRef->source()); - $this->assertSame($dqlRef, $this->_em->find(DDC117Reference::class, $idCriteria)); + self::assertInstanceOf(DDC117Reference::class, $dqlRef); + self::assertInstanceOf(DDC117Article::class, $dqlRef->target()); + self::assertInstanceOf(DDC117Article::class, $dqlRef->source()); + self::assertSame($dqlRef, $this->_em->find(DDC117Reference::class, $idCriteria)); $dql = 'SELECT r, s FROM ' . DDC117Reference::class . ' r JOIN r.source s WHERE s.title = ?1'; $dqlRef = $this->_em->createQuery($dql)->setParameter(1, 'Foo')->getSingleResult(); @@ -96,14 +96,14 @@ public function testUpdateAssociationEntity() $idCriteria = ['source' => $this->article1->id(), 'target' => $this->article2->id()]; $mapRef = $this->_em->find(DDC117Reference::class, $idCriteria); - $this->assertNotNull($mapRef); + self::assertNotNull($mapRef); $mapRef->setDescription("New Description!!"); $this->_em->flush(); $this->_em->clear(); $mapRef = $this->_em->find(DDC117Reference::class, $idCriteria); - $this->assertEquals('New Description!!', $mapRef->getDescription()); + self::assertEquals('New Description!!', $mapRef->getDescription()); } /** @@ -114,11 +114,11 @@ public function testFetchDql() $dql = "SELECT r, s FROM Doctrine\Tests\Models\DDC117\DDC117Reference r JOIN r.source s WHERE s.title = ?1"; $refs = $this->_em->createQuery($dql)->setParameter(1, 'Foo')->getResult(); - $this->assertTrue(count($refs) > 0, "Has to contain at least one Reference."); + self::assertTrue(count($refs) > 0, "Has to contain at least one Reference."); foreach ($refs AS $ref) { - $this->assertInstanceOf(DDC117Reference::class, $ref, "Contains only Reference instances."); - $this->assertTrue($this->_em->contains($ref), "Contains Reference in the IdentityMap."); + self::assertInstanceOf(DDC117Reference::class, $ref, "Contains only Reference instances."); + self::assertTrue($this->_em->contains($ref), "Contains Reference in the IdentityMap."); } } @@ -135,7 +135,7 @@ public function testRemoveCompositeElement() $this->_em->flush(); $this->_em->clear(); - $this->assertNull($this->_em->find(DDC117Reference::class, $idCriteria)); + self::assertNull($this->_em->find(DDC117Reference::class, $idCriteria)); } /** @@ -152,7 +152,7 @@ public function testDqlRemoveCompositeElement() ->setParameter(2, $this->article2->id()) ->execute(); - $this->assertNull($this->_em->find(DDC117Reference::class, $idCriteria)); + self::assertNull($this->_em->find(DDC117Reference::class, $idCriteria)); } /** @@ -162,11 +162,11 @@ public function testInverseSideAccess() { $this->article1 = $this->_em->find(DDC117Article::class, $this->article1->id()); - $this->assertEquals(1, count($this->article1->references())); + self::assertEquals(1, count($this->article1->references())); foreach ($this->article1->references() AS $this->reference) { - $this->assertInstanceOf(DDC117Reference::class, $this->reference); - $this->assertSame($this->article1, $this->reference->source()); + self::assertInstanceOf(DDC117Reference::class, $this->reference); + self::assertSame($this->article1, $this->reference->source()); } $this->_em->clear(); @@ -176,11 +176,11 @@ public function testInverseSideAccess() ->setParameter(1, $this->article1->id()) ->getSingleResult(); - $this->assertEquals(1, count($this->article1->references())); + self::assertEquals(1, count($this->article1->references())); foreach ($this->article1->references() AS $this->reference) { - $this->assertInstanceOf(DDC117Reference::class, $this->reference); - $this->assertSame($this->article1, $this->reference->source()); + self::assertInstanceOf(DDC117Reference::class, $this->reference); + self::assertSame($this->article1, $this->reference->source()); } } @@ -192,9 +192,9 @@ public function testMixedCompositeKey() $idCriteria = ['article' => $this->article1->id(), 'language' => 'en']; $this->translation = $this->_em->find(DDC117Translation::class, $idCriteria); - $this->assertInstanceOf(DDC117Translation::class, $this->translation); + self::assertInstanceOf(DDC117Translation::class, $this->translation); - $this->assertSame($this->translation, $this->_em->find(DDC117Translation::class, $idCriteria)); + self::assertSame($this->translation, $this->_em->find(DDC117Translation::class, $idCriteria)); $this->_em->clear(); @@ -204,7 +204,7 @@ public function testMixedCompositeKey() ->setParameter(2, 'en') ->getSingleResult(); - $this->assertInstanceOf(DDC117Translation::class, $this->translation); + self::assertInstanceOf(DDC117Translation::class, $this->translation); } /** @@ -224,7 +224,7 @@ public function testMixedCompositeKeyViolateUniqueness() $exceptionThrown = true; } - $this->assertTrue($exceptionThrown, "The underlying database driver throws an exception."); + self::assertTrue($exceptionThrown, "The underlying database driver throws an exception."); } /** @@ -246,7 +246,7 @@ public function testOneToOneForeignObjectId() /* @var $article DDC117Article */ $article = $this->_em->find(get_class($this->article1), $this->article1->id()); - $this->assertEquals('not so very long text!', $article->getText()); + self::assertEquals('not so very long text!', $article->getText()); } /** @@ -258,7 +258,7 @@ public function testOneToOneCascadeRemove() $this->_em->remove($article); $this->_em->flush(); - $this->assertFalse($this->_em->contains($article->getDetails())); + self::assertFalse($this->_em->contains($article->getDetails())); } /** @@ -297,9 +297,9 @@ public function testReferencesToForeignKeyEntities() $approveChanges = $this->_em->find(DDC117ApproveChanges::class, $approveChanges->getId()); - $this->assertInstanceOf(DDC117ArticleDetails::class, $approveChanges->getArticleDetails()); - $this->assertInstanceOf(DDC117Reference::class, $approveChanges->getReference()); - $this->assertInstanceOf(DDC117Translation::class, $approveChanges->getTranslation()); + self::assertInstanceOf(DDC117ArticleDetails::class, $approveChanges->getArticleDetails()); + self::assertInstanceOf(DDC117Reference::class, $approveChanges->getReference()); + self::assertInstanceOf(DDC117Translation::class, $approveChanges->getTranslation()); } /** @@ -311,9 +311,9 @@ public function testLoadOneToManyCollectionOfForeignKeyEntities() $article = $this->_em->find(get_class($this->article1), $this->article1->id()); $translations = $article->getTranslations(); - $this->assertFalse($translations->isInitialized()); - $this->assertContainsOnly(DDC117Translation::class, $translations); - $this->assertTrue($translations->isInitialized()); + self::assertFalse($translations->isInitialized()); + self::assertContainsOnly(DDC117Translation::class, $translations); + self::assertTrue($translations->isInitialized()); } /** @@ -323,16 +323,16 @@ public function testLoadManyToManyCollectionOfForeignKeyEntities() { $editor = $this->loadEditorFixture(); - $this->assertFalse($editor->reviewingTranslations->isInitialized()); - $this->assertContainsOnly(DDC117Translation::class, $editor->reviewingTranslations); - $this->assertTrue($editor->reviewingTranslations->isInitialized()); + self::assertFalse($editor->reviewingTranslations->isInitialized()); + self::assertContainsOnly(DDC117Translation::class, $editor->reviewingTranslations); + self::assertTrue($editor->reviewingTranslations->isInitialized()); $this->_em->clear(); $dql = "SELECT e, t FROM Doctrine\Tests\Models\DDC117\DDC117Editor e JOIN e.reviewingTranslations t WHERE e.id = ?1"; $editor = $this->_em->createQuery($dql)->setParameter(1, $editor->id)->getSingleResult(); - $this->assertTrue($editor->reviewingTranslations->isInitialized()); - $this->assertContainsOnly(DDC117Translation::class, $editor->reviewingTranslations); + self::assertTrue($editor->reviewingTranslations->isInitialized()); + self::assertContainsOnly(DDC117Translation::class, $editor->reviewingTranslations); } /** @@ -341,14 +341,14 @@ public function testLoadManyToManyCollectionOfForeignKeyEntities() public function testClearManyToManyCollectionOfForeignKeyEntities() { $editor = $this->loadEditorFixture(); - $this->assertEquals(3, count($editor->reviewingTranslations)); + self::assertEquals(3, count($editor->reviewingTranslations)); $editor->reviewingTranslations->clear(); $this->_em->flush(); $this->_em->clear(); $editor = $this->_em->find(get_class($editor), $editor->id); - $this->assertEquals(0, count($editor->reviewingTranslations)); + self::assertEquals(0, count($editor->reviewingTranslations)); } /** @@ -358,11 +358,11 @@ public function testLoadInverseManyToManyCollection() { $editor = $this->loadEditorFixture(); - $this->assertInstanceOf(DDC117Translation::class, $editor->reviewingTranslations[0]); + self::assertInstanceOf(DDC117Translation::class, $editor->reviewingTranslations[0]); $reviewedBy = $editor->reviewingTranslations[0]->getReviewedByEditors(); - $this->assertEquals(1, count($reviewedBy)); - $this->assertSame($editor, $reviewedBy[0]); + self::assertEquals(1, count($reviewedBy)); + self::assertSame($editor, $reviewedBy[0]); $this->_em->clear(); @@ -373,9 +373,9 @@ public function testLoadInverseManyToManyCollection() ->setParameter(2, $this->translation->getLanguage()) ->getSingleResult(); - $this->assertInstanceOf(DDC117Translation::class, $trans); - $this->assertContainsOnly(DDC117Editor::class, $trans->reviewedByEditors); - $this->assertEquals(1, count($trans->reviewedByEditors)); + self::assertInstanceOf(DDC117Translation::class, $trans); + self::assertContainsOnly(DDC117Editor::class, $trans->reviewedByEditors); + self::assertEquals(1, count($trans->reviewedByEditors)); } /** @@ -393,7 +393,7 @@ public function testLoadOneToManyOfSourceEntityWithAssociationIdentifier() $lastTranslatedBy = $editor->reviewingTranslations[0]->getLastTranslatedBy(); $lastTranslatedBy->count(); - $this->assertEquals(1, count($lastTranslatedBy)); + self::assertEquals(1, count($lastTranslatedBy)); } /** @@ -438,8 +438,8 @@ public function testMergeForeignKeyIdentifierEntity() $this->_em->detach($refRep); $refRep = $this->_em->merge($refRep); - $this->assertEquals($this->article1->id(), $refRep->source()->id()); - $this->assertEquals($this->article2->id(), $refRep->target()->id()); + self::assertEquals($this->article1->id(), $refRep->source()->id()); + self::assertEquals($this->article2->id(), $refRep->target()->id()); } /** @@ -467,7 +467,7 @@ public function testArrayHydrationWithCompositeKey() $dql = "SELECT r,s,t FROM Doctrine\Tests\Models\DDC117\DDC117Reference r INNER JOIN r.source s INNER JOIN r.target t"; $data = $this->_em->createQuery($dql)->getArrayResult(); - $this->assertEquals($before + 3, count($data)); + self::assertEquals($before + 3, count($data)); } /** @@ -484,12 +484,12 @@ public function testGetEntityState() $this->reference = new DDC117Reference($this->article2, $this->article1, "Test-Description"); - $this->assertEquals(\Doctrine\ORM\UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($this->reference)); + self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($this->reference)); $idCriteria = ['source' => $this->article1->id(), 'target' => $this->article2->id()]; $reference = $this->_em->find(DDC117Reference::class, $idCriteria); - $this->assertEquals(\Doctrine\ORM\UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($reference)); + self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($reference)); } /** * @group DDC-117 @@ -498,8 +498,8 @@ public function testIndexByOnCompositeKeyField() { $article = $this->_em->find(DDC117Article::class, $this->article1->id()); - $this->assertInstanceOf(DDC117Article::class, $article); - $this->assertEquals(1, count($article->getLinks())); - $this->assertTrue($article->getLinks()->offsetExists($this->article2->id())); + self::assertInstanceOf(DDC117Article::class, $article); + self::assertEquals(1, count($article->getLinks())); + self::assertTrue($article->getLinks()->offsetExists($this->article2->id())); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1193Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1193Test.php index f4d98cb23a4..9cf28ed4e12 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1193Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1193Test.php @@ -43,14 +43,14 @@ public function testIssue() $company = $this->_em->find(get_class($company), $companyId); - $this->assertTrue($this->_em->getUnitOfWork()->isInIdentityMap($company), "Company is in identity map."); - $this->assertFalse($company->member->__isInitialized__, "Pre-Condition"); - $this->assertTrue($this->_em->getUnitOfWork()->isInIdentityMap($company->member), "Member is in identity map."); + self::assertTrue($this->_em->getUnitOfWork()->isInIdentityMap($company), "Company is in identity map."); + self::assertFalse($company->member->__isInitialized__, "Pre-Condition"); + self::assertTrue($this->_em->getUnitOfWork()->isInIdentityMap($company->member), "Member is in identity map."); $this->_em->remove($company); $this->_em->flush(); - $this->assertEquals(count($this->_em->getRepository(get_class($account))->findAll()), 0); + self::assertEquals(count($this->_em->getRepository(get_class($account))->findAll()), 0); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1225Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1225Test.php index 1bfd6b91e15..cb3b15dbf65 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1225Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1225Test.php @@ -30,7 +30,7 @@ public function testIssue() ->where('te1.testEntity2 = ?1') ->setParameter(1, 0); - $this->assertEquals( + self::assertEquals( strtolower('SELECT t0_.test_entity2_id AS test_entity2_id_0 FROM te1 t0_ WHERE t0_.test_entity2_id = ?'), strtolower($qb->getQuery()->getSQL()) ); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1228Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1228Test.php index b4de087a359..ebfbd0b16dc 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1228Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1228Test.php @@ -37,18 +37,18 @@ public function testOneToOnePersist() $user = $this->_em->find(DDC1228User::class, $user->id); - $this->assertFalse($user->getProfile()->__isInitialized__, "Proxy is not initialized"); + self::assertFalse($user->getProfile()->__isInitialized__, "Proxy is not initialized"); $user->getProfile()->setName("Bar"); - $this->assertTrue($user->getProfile()->__isInitialized__, "Proxy is not initialized"); + self::assertTrue($user->getProfile()->__isInitialized__, "Proxy is not initialized"); - $this->assertEquals("Bar", $user->getProfile()->getName()); - $this->assertEquals(["id" => 1, "name" => "Foo"], $this->_em->getUnitOfWork()->getOriginalEntityData($user->getProfile())); + self::assertEquals("Bar", $user->getProfile()->getName()); + self::assertEquals(["id" => 1, "name" => "Foo"], $this->_em->getUnitOfWork()->getOriginalEntityData($user->getProfile())); $this->_em->flush(); $this->_em->clear(); $user = $this->_em->find(DDC1228User::class, $user->id); - $this->assertEquals("Bar", $user->getProfile()->getName()); + self::assertEquals("Bar", $user->getProfile()->getName()); } public function testRefresh() @@ -71,7 +71,7 @@ public function testRefresh() $this->_em->clear(); $user = $this->_em->find(DDC1228User::class, $user->id); - $this->assertEquals("Baz", $user->name); + self::assertEquals("Baz", $user->name); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1238Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1238Test.php index 00c621eeeef..450996179b8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1238Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1238Test.php @@ -37,7 +37,7 @@ public function testIssue() $this->_em->clear(); $userId2 = $user->getId(); - $this->assertEquals($userId, $userId2, "This proxy can still be initialized."); + self::assertEquals($userId, $userId2, "This proxy can still be initialized."); } public function testIssueProxyClear() @@ -61,7 +61,7 @@ public function testIssueProxyClear() // force proxy load, getId() doesn't work anymore $user->getName(); - $this->assertNull($user->getId(), "Now this is null, we already have a user instance of that type"); + self::assertNull($user->getId(), "Now this is null, we already have a user instance of that type"); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1250Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1250Test.php index a09b1761fea..3a5c38b1a03 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1250Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1250Test.php @@ -38,7 +38,7 @@ public function testIssue() $history = $this->_em->createQuery('SELECT h FROM ' . __NAMESPACE__ . '\\DDC1250ClientHistory h WHERE h.id = ?1') ->setParameter(1, $c2->id)->getSingleResult(); - $this->assertInstanceOf(DDC1250ClientHistory::class, $history); + self::assertInstanceOf(DDC1250ClientHistory::class, $history); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1276Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1276Test.php index eeaa870ae4d..100440a3dfc 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1276Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1276Test.php @@ -36,11 +36,11 @@ public function testIssue() $user = $this->_em->find(CmsUser::class, $user->id); $cloned = clone $user; - $this->assertSame($user->groups, $cloned->groups); - $this->assertEquals(2, count($user->groups)); + self::assertSame($user->groups, $cloned->groups); + self::assertEquals(2, count($user->groups)); $this->_em->merge($cloned); - $this->assertEquals(2, count($user->groups)); + self::assertEquals(2, count($user->groups)); $this->_em->flush(); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1300Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1300Test.php index 4f0038b1c89..2deb7852fd7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1300Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1300Test.php @@ -37,7 +37,7 @@ public function testIssue() $query = $this->_em->createQuery('SELECT f, fl FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1300Foo f JOIN f._fooLocaleRefFoo fl'); $result = $query->getResult(); - $this->assertEquals(1, count($result)); + self::assertEquals(1, count($result)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php index 9c57bbcd880..6637347133a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php @@ -43,13 +43,13 @@ public function testCountNotInitializesLegacyCollection() $user = $this->_em->find(Models\Legacy\LegacyUser::class, $this->userId); $queryCount = $this->getCurrentQueryCount(); - $this->assertFalse($user->_articles->isInitialized()); - $this->assertEquals(2, count($user->_articles)); - $this->assertFalse($user->_articles->isInitialized()); + self::assertFalse($user->_articles->isInitialized()); + self::assertEquals(2, count($user->_articles)); + self::assertFalse($user->_articles->isInitialized()); foreach ($user->_articles AS $article) { } - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount(), "Expecting two queries to be fired for count, then iteration."); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount(), "Expecting two queries to be fired for count, then iteration."); } public function testCountNotInitializesLegacyCollectionWithForeignIdentifier() @@ -57,13 +57,13 @@ public function testCountNotInitializesLegacyCollectionWithForeignIdentifier() $user = $this->_em->find(Models\Legacy\LegacyUser::class, $this->userId); $queryCount = $this->getCurrentQueryCount(); - $this->assertFalse($user->_references->isInitialized()); - $this->assertEquals(2, count($user->_references)); - $this->assertFalse($user->_references->isInitialized()); + self::assertFalse($user->_references->isInitialized()); + self::assertEquals(2, count($user->_references)); + self::assertFalse($user->_references->isInitialized()); foreach ($user->_references AS $reference) { } - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount(), "Expecting two queries to be fired for count, then iteration."); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount(), "Expecting two queries to be fired for count, then iteration."); } public function testCountNotInitializesLegacyManyToManyCollection() @@ -71,13 +71,13 @@ public function testCountNotInitializesLegacyManyToManyCollection() $user = $this->_em->find(Models\Legacy\LegacyUser::class, $this->userId); $queryCount = $this->getCurrentQueryCount(); - $this->assertFalse($user->_cars->isInitialized()); - $this->assertEquals(3, count($user->_cars)); - $this->assertFalse($user->_cars->isInitialized()); + self::assertFalse($user->_cars->isInitialized()); + self::assertEquals(3, count($user->_cars)); + self::assertFalse($user->_cars->isInitialized()); foreach ($user->_cars AS $reference) { } - $this->assertEquals($queryCount + 2, $this->getCurrentQueryCount(), "Expecting two queries to be fired for count, then iteration."); + self::assertEquals($queryCount + 2, $this->getCurrentQueryCount(), "Expecting two queries to be fired for count, then iteration."); } public function loadFixture() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1335Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1335Test.php index dd475559472..7d0cb956fcd 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1335Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1335Test.php @@ -29,39 +29,39 @@ public function testDql() $query = $this->_em->createQuery($dql); $result = $query->getResult(); - $this->assertEquals(sizeof($result), 3); - $this->assertArrayHasKey(1, $result); - $this->assertArrayHasKey(2, $result); - $this->assertArrayHasKey(3, $result); + self::assertEquals(sizeof($result), 3); + self::assertArrayHasKey(1, $result); + self::assertArrayHasKey(2, $result); + self::assertArrayHasKey(3, $result); $dql = 'SELECT u, p FROM '.__NAMESPACE__ . '\DDC1335User u INDEX BY u.email INNER JOIN u.phones p INDEX BY p.id'; $query = $this->_em->createQuery($dql); $result = $query->getResult(); - $this->assertEquals(sizeof($result), 3); - $this->assertArrayHasKey('foo@foo.com', $result); - $this->assertArrayHasKey('bar@bar.com', $result); - $this->assertArrayHasKey('foobar@foobar.com', $result); + self::assertEquals(sizeof($result), 3); + self::assertArrayHasKey('foo@foo.com', $result); + self::assertArrayHasKey('bar@bar.com', $result); + self::assertArrayHasKey('foobar@foobar.com', $result); - $this->assertEquals(sizeof($result['foo@foo.com']->phones), 3); - $this->assertEquals(sizeof($result['bar@bar.com']->phones), 3); - $this->assertEquals(sizeof($result['foobar@foobar.com']->phones), 3); + self::assertEquals(sizeof($result['foo@foo.com']->phones), 3); + self::assertEquals(sizeof($result['bar@bar.com']->phones), 3); + self::assertEquals(sizeof($result['foobar@foobar.com']->phones), 3); $foo = $result['foo@foo.com']->phones->toArray(); $bar = $result['bar@bar.com']->phones->toArray(); $foobar = $result['foobar@foobar.com']->phones->toArray(); - $this->assertArrayHasKey(1, $foo); - $this->assertArrayHasKey(2, $foo); - $this->assertArrayHasKey(3, $foo); + self::assertArrayHasKey(1, $foo); + self::assertArrayHasKey(2, $foo); + self::assertArrayHasKey(3, $foo); - $this->assertArrayHasKey(4, $bar); - $this->assertArrayHasKey(5, $bar); - $this->assertArrayHasKey(6, $bar); + self::assertArrayHasKey(4, $bar); + self::assertArrayHasKey(5, $bar); + self::assertArrayHasKey(6, $bar); - $this->assertArrayHasKey(7, $foobar); - $this->assertArrayHasKey(8, $foobar); - $this->assertArrayHasKey(9, $foobar); + self::assertArrayHasKey(7, $foobar); + self::assertArrayHasKey(8, $foobar); + self::assertArrayHasKey(9, $foobar); } public function testTicket() @@ -72,11 +72,11 @@ public function testTicket() $dql = $builder->getQuery()->getDQL(); $result = $builder->getQuery()->getResult(); - $this->assertEquals(sizeof($result), 3); - $this->assertArrayHasKey(1, $result); - $this->assertArrayHasKey(2, $result); - $this->assertArrayHasKey(3, $result); - $this->assertEquals('SELECT u FROM ' . __NAMESPACE__ . '\DDC1335User u INDEX BY u.id', $dql); + self::assertEquals(sizeof($result), 3); + self::assertArrayHasKey(1, $result); + self::assertArrayHasKey(2, $result); + self::assertArrayHasKey(3, $result); + self::assertEquals('SELECT u FROM ' . __NAMESPACE__ . '\DDC1335User u INDEX BY u.id', $dql); } public function testIndexByUnique() @@ -87,11 +87,11 @@ public function testIndexByUnique() $dql = $builder->getQuery()->getDQL(); $result = $builder->getQuery()->getResult(); - $this->assertEquals(sizeof($result), 3); - $this->assertArrayHasKey('foo@foo.com', $result); - $this->assertArrayHasKey('bar@bar.com', $result); - $this->assertArrayHasKey('foobar@foobar.com', $result); - $this->assertEquals('SELECT u FROM ' . __NAMESPACE__ . '\DDC1335User u INDEX BY u.email', $dql); + self::assertEquals(sizeof($result), 3); + self::assertArrayHasKey('foo@foo.com', $result); + self::assertArrayHasKey('bar@bar.com', $result); + self::assertArrayHasKey('foobar@foobar.com', $result); + self::assertEquals('SELECT u FROM ' . __NAMESPACE__ . '\DDC1335User u INDEX BY u.email', $dql); } public function testIndexWithJoin() @@ -104,28 +104,28 @@ public function testIndexWithJoin() $dql = $builder->getQuery()->getDQL(); $result = $builder->getQuery()->getResult(); - $this->assertEquals(sizeof($result), 3); - $this->assertArrayHasKey('foo@foo.com', $result); - $this->assertArrayHasKey('bar@bar.com', $result); - $this->assertArrayHasKey('foobar@foobar.com', $result); + self::assertEquals(sizeof($result), 3); + self::assertArrayHasKey('foo@foo.com', $result); + self::assertArrayHasKey('bar@bar.com', $result); + self::assertArrayHasKey('foobar@foobar.com', $result); - $this->assertEquals(sizeof($result['foo@foo.com']->phones), 3); - $this->assertEquals(sizeof($result['bar@bar.com']->phones), 3); - $this->assertEquals(sizeof($result['foobar@foobar.com']->phones), 3); + self::assertEquals(sizeof($result['foo@foo.com']->phones), 3); + self::assertEquals(sizeof($result['bar@bar.com']->phones), 3); + self::assertEquals(sizeof($result['foobar@foobar.com']->phones), 3); - $this->assertArrayHasKey(1, $result['foo@foo.com']->phones->toArray()); - $this->assertArrayHasKey(2, $result['foo@foo.com']->phones->toArray()); - $this->assertArrayHasKey(3, $result['foo@foo.com']->phones->toArray()); + self::assertArrayHasKey(1, $result['foo@foo.com']->phones->toArray()); + self::assertArrayHasKey(2, $result['foo@foo.com']->phones->toArray()); + self::assertArrayHasKey(3, $result['foo@foo.com']->phones->toArray()); - $this->assertArrayHasKey(4, $result['bar@bar.com']->phones->toArray()); - $this->assertArrayHasKey(5, $result['bar@bar.com']->phones->toArray()); - $this->assertArrayHasKey(6, $result['bar@bar.com']->phones->toArray()); + self::assertArrayHasKey(4, $result['bar@bar.com']->phones->toArray()); + self::assertArrayHasKey(5, $result['bar@bar.com']->phones->toArray()); + self::assertArrayHasKey(6, $result['bar@bar.com']->phones->toArray()); - $this->assertArrayHasKey(7, $result['foobar@foobar.com']->phones->toArray()); - $this->assertArrayHasKey(8, $result['foobar@foobar.com']->phones->toArray()); - $this->assertArrayHasKey(9, $result['foobar@foobar.com']->phones->toArray()); + self::assertArrayHasKey(7, $result['foobar@foobar.com']->phones->toArray()); + self::assertArrayHasKey(8, $result['foobar@foobar.com']->phones->toArray()); + self::assertArrayHasKey(9, $result['foobar@foobar.com']->phones->toArray()); - $this->assertEquals('SELECT u, p FROM '.__NAMESPACE__ . '\DDC1335User u INDEX BY u.email INNER JOIN u.phones p INDEX BY p.id', $dql); + self::assertEquals('SELECT u, p FROM '.__NAMESPACE__ . '\DDC1335User u INDEX BY u.email INNER JOIN u.phones p INDEX BY p.id', $dql); } private function loadFixture() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1360Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1360Test.php index 6e71e6fc742..1c184211ca2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1360Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1360Test.php @@ -21,12 +21,14 @@ public function testSchemaDoubleQuotedCreate() ] ); - $this->assertEquals( + self::assertEquals( [ - 'CREATE SCHEMA user', - 'CREATE TABLE "user"."user" (id INT NOT NULL, PRIMARY KEY(id))', - 'CREATE SEQUENCE "user"."user_id_seq" INCREMENT BY 1 MINVALUE 1 START 1', - ], $sql); + 'CREATE SCHEMA user', + 'CREATE TABLE "user"."user" (id INT NOT NULL, PRIMARY KEY(id))', + 'CREATE SEQUENCE "user"."user_id_seq" INCREMENT BY 1 MINVALUE 1 START 1', + ], + $sql + ); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1392Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1392Test.php index 806e61de4da..6dee7affe35 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1392Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1392Test.php @@ -39,10 +39,10 @@ public function testFailingCase() $fileId = $file->getFileId(); $pictureId = $picture->getPictureId(); - $this->assertTrue($fileId > 0); + self::assertTrue($fileId > 0); $picture = $em->find(DDC1392Picture::class, $pictureId); - $this->assertEquals(UnitOfWork::STATE_MANAGED, $em->getUnitOfWork()->getEntityState($picture->getFile()), "Lazy Proxy should be marked MANAGED."); + self::assertEquals(UnitOfWork::STATE_MANAGED, $em->getUnitOfWork()->getEntityState($picture->getFile()), "Lazy Proxy should be marked MANAGED."); $file = $picture->getFile(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1404Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1404Test.php index b3a1a939d21..953591e9626 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1404Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1404Test.php @@ -34,14 +34,14 @@ public function testTicket() $querySecond = $repository->createNamedQuery('second'); - $this->assertEquals('SELECT p FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1404ChildEntity p', $queryAll->getDQL()); - $this->assertEquals('SELECT p FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1404ChildEntity p WHERE p.id = 1', $queryFirst->getDQL()); - $this->assertEquals('SELECT p FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1404ChildEntity p WHERE p.id = 2', $querySecond->getDQL()); + self::assertEquals('SELECT p FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1404ChildEntity p', $queryAll->getDQL()); + self::assertEquals('SELECT p FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1404ChildEntity p WHERE p.id = 1', $queryFirst->getDQL()); + self::assertEquals('SELECT p FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1404ChildEntity p WHERE p.id = 2', $querySecond->getDQL()); - $this->assertEquals(sizeof($queryAll->getResult()), 2); - $this->assertEquals(sizeof($queryFirst->getResult()), 1); - $this->assertEquals(sizeof($querySecond->getResult()), 1); + self::assertEquals(sizeof($queryAll->getResult()), 2); + self::assertEquals(sizeof($queryFirst->getResult()), 1); + self::assertEquals(sizeof($querySecond->getResult()), 1); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC142Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC142Test.php index 287b73dec3b..27dcb38f133 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC142Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC142Test.php @@ -51,17 +51,17 @@ public function testCreateRetrieveUpdateDelete() $this->_em->clear(); $id = $user->id; - $this->assertNotNull($id); + self::assertNotNull($id); $user = $this->_em->find(User::class, $id); $address = $user->getAddress(); - $this->assertInstanceOf(User::class, $user); - $this->assertInstanceOf(Address::class, $user->getAddress()); + self::assertInstanceOf(User::class, $user); + self::assertInstanceOf(Address::class, $user->getAddress()); - $this->assertEquals('FabioBatSilva', $user->name); - $this->assertEquals('12345', $address->zip); + self::assertEquals('FabioBatSilva', $user->name); + self::assertEquals('12345', $address->zip); $user->name = 'FabioBatSilva1'; @@ -74,17 +74,16 @@ public function testCreateRetrieveUpdateDelete() $user = $this->_em->find(User::class, $id); - $this->assertInstanceOf(User::class, $user); - $this->assertNull($user->getAddress()); - - $this->assertEquals('FabioBatSilva1', $user->name); + self::assertInstanceOf(User::class, $user); + self::assertNull($user->getAddress()); + self::assertEquals('FabioBatSilva1', $user->name); $this->_em->remove($user); $this->_em->flush(); $this->_em->clear(); - $this->assertNull($this->_em->find(User::class, $id)); + self::assertNull($this->_em->find(User::class, $id)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1430Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1430Test.php index 6b08a832675..bfb92203a2f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1430Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1430Test.php @@ -35,25 +35,25 @@ public function testOrderByFields() ->orderBy('o.id') ->getQuery(); - $this->assertSQLEquals('SELECT o.id, o.date, COUNT(p.id) AS p_count FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1430Order o LEFT JOIN o.products p GROUP BY o.id, o.date ORDER BY o.id ASC', $query->getDQL()); - $this->assertSQLEquals('SELECT d0_.order_id AS order_id_0, d0_.created_at AS created_at_1, COUNT(d1_.id) AS sclr_2 FROM DDC1430Order d0_ LEFT JOIN DDC1430OrderProduct d1_ ON d0_.order_id = d1_.order_id GROUP BY d0_.order_id, d0_.created_at ORDER BY d0_.order_id ASC', $query->getSQL()); + self::assertSQLEquals('SELECT o.id, o.date, COUNT(p.id) AS p_count FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1430Order o LEFT JOIN o.products p GROUP BY o.id, o.date ORDER BY o.id ASC', $query->getDQL()); + self::assertSQLEquals('SELECT d0_.order_id AS order_id_0, d0_.created_at AS created_at_1, COUNT(d1_.id) AS sclr_2 FROM DDC1430Order d0_ LEFT JOIN DDC1430OrderProduct d1_ ON d0_.order_id = d1_.order_id GROUP BY d0_.order_id, d0_.created_at ORDER BY d0_.order_id ASC', $query->getSQL()); $result = $query->getResult(); - $this->assertEquals(2, sizeof($result)); + self::assertEquals(2, sizeof($result)); - $this->assertArrayHasKey('id', $result[0]); - $this->assertArrayHasKey('id', $result[1]); + self::assertArrayHasKey('id', $result[0]); + self::assertArrayHasKey('id', $result[1]); - $this->assertArrayHasKey('p_count', $result[0]); - $this->assertArrayHasKey('p_count', $result[1]); + self::assertArrayHasKey('p_count', $result[0]); + self::assertArrayHasKey('p_count', $result[1]); - $this->assertEquals(1, $result[0]['id']); - $this->assertEquals(2, $result[1]['id']); + self::assertEquals(1, $result[0]['id']); + self::assertEquals(2, $result[1]['id']); - $this->assertEquals(2, $result[0]['p_count']); - $this->assertEquals(3, $result[1]['p_count']); + self::assertEquals(2, $result[0]['p_count']); + self::assertEquals(3, $result[1]['p_count']); } public function testOrderByAllObjectFields() @@ -67,22 +67,22 @@ public function testOrderByAllObjectFields() ->getQuery(); - $this->assertSQLEquals('SELECT o, COUNT(p.id) AS p_count FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1430Order o LEFT JOIN o.products p GROUP BY o.id, o.date, o.status ORDER BY o.id ASC', $query->getDQL()); - $this->assertSQLEquals('SELECT d0_.order_id AS order_id_0, d0_.created_at AS created_at_1, d0_.order_status AS order_status_2, COUNT(d1_.id) AS sclr_3 FROM DDC1430Order d0_ LEFT JOIN DDC1430OrderProduct d1_ ON d0_.order_id = d1_.order_id GROUP BY d0_.order_id, d0_.created_at, d0_.order_status ORDER BY d0_.order_id ASC', $query->getSQL()); + self::assertSQLEquals('SELECT o, COUNT(p.id) AS p_count FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1430Order o LEFT JOIN o.products p GROUP BY o.id, o.date, o.status ORDER BY o.id ASC', $query->getDQL()); + self::assertSQLEquals('SELECT d0_.order_id AS order_id_0, d0_.created_at AS created_at_1, d0_.order_status AS order_status_2, COUNT(d1_.id) AS sclr_3 FROM DDC1430Order d0_ LEFT JOIN DDC1430OrderProduct d1_ ON d0_.order_id = d1_.order_id GROUP BY d0_.order_id, d0_.created_at, d0_.order_status ORDER BY d0_.order_id ASC', $query->getSQL()); $result = $query->getResult(); - $this->assertEquals(2, sizeof($result)); + self::assertEquals(2, sizeof($result)); - $this->assertTrue($result[0][0] instanceof DDC1430Order); - $this->assertTrue($result[1][0] instanceof DDC1430Order); + self::assertTrue($result[0][0] instanceof DDC1430Order); + self::assertTrue($result[1][0] instanceof DDC1430Order); - $this->assertEquals($result[0][0]->getId(), 1); - $this->assertEquals($result[1][0]->getId(), 2); + self::assertEquals($result[0][0]->getId(), 1); + self::assertEquals($result[1][0]->getId(), 2); - $this->assertEquals($result[0]['p_count'], 2); - $this->assertEquals($result[1]['p_count'], 3); + self::assertEquals($result[0]['p_count'], 2); + self::assertEquals($result[1]['p_count'], 3); } public function testTicket() @@ -96,22 +96,22 @@ public function testTicket() ->getQuery(); - $this->assertSQLEquals('SELECT o, COUNT(p.id) AS p_count FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1430Order o LEFT JOIN o.products p GROUP BY o ORDER BY o.id ASC', $query->getDQL()); - $this->assertSQLEquals('SELECT d0_.order_id AS order_id_0, d0_.created_at AS created_at_1, d0_.order_status AS order_status_2, COUNT(d1_.id) AS sclr_3 FROM DDC1430Order d0_ LEFT JOIN DDC1430OrderProduct d1_ ON d0_.order_id = d1_.order_id GROUP BY d0_.order_id, d0_.created_at, d0_.order_status ORDER BY d0_.order_id ASC', $query->getSQL()); + self::assertSQLEquals('SELECT o, COUNT(p.id) AS p_count FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1430Order o LEFT JOIN o.products p GROUP BY o ORDER BY o.id ASC', $query->getDQL()); + self::assertSQLEquals('SELECT d0_.order_id AS order_id_0, d0_.created_at AS created_at_1, d0_.order_status AS order_status_2, COUNT(d1_.id) AS sclr_3 FROM DDC1430Order d0_ LEFT JOIN DDC1430OrderProduct d1_ ON d0_.order_id = d1_.order_id GROUP BY d0_.order_id, d0_.created_at, d0_.order_status ORDER BY d0_.order_id ASC', $query->getSQL()); $result = $query->getResult(); - $this->assertEquals(2, sizeof($result)); + self::assertEquals(2, sizeof($result)); - $this->assertTrue($result[0][0] instanceof DDC1430Order); - $this->assertTrue($result[1][0] instanceof DDC1430Order); + self::assertTrue($result[0][0] instanceof DDC1430Order); + self::assertTrue($result[1][0] instanceof DDC1430Order); - $this->assertEquals($result[0][0]->getId(), 1); - $this->assertEquals($result[1][0]->getId(), 2); + self::assertEquals($result[0][0]->getId(), 1); + self::assertEquals($result[1][0]->getId(), 2); - $this->assertEquals($result[0]['p_count'], 2); - $this->assertEquals($result[1]['p_count'], 3); + self::assertEquals($result[0]['p_count'], 2); + self::assertEquals($result[1]['p_count'], 3); } public function loadFixtures() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1436Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1436Test.php index 9ffa497cd4d..b7fd4f13e13 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1436Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1436Test.php @@ -42,13 +42,13 @@ public function testIdentityMap() ->setParameter('id', $id) ->getOneOrNullResult(); - $this->assertInstanceOf(DDC1436Page::class, $page); + self::assertInstanceOf(DDC1436Page::class, $page); // step 2 $page = $this->_em->find(DDC1436Page::class, $id); - $this->assertInstanceOf(DDC1436Page::class, $page); - $this->assertInstanceOf(DDC1436Page::class, $page->getParent()); - $this->assertInstanceOf(DDC1436Page::class, $page->getParent()->getParent()); + self::assertInstanceOf(DDC1436Page::class, $page); + self::assertInstanceOf(DDC1436Page::class, $page->getParent()); + self::assertInstanceOf(DDC1436Page::class, $page->getParent()->getParent()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1452Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1452Test.php index 7e7ecc4f841..574ca4cf693 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1452Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1452Test.php @@ -49,9 +49,9 @@ public function testIssue() $dql = "SELECT a, b, ba FROM " . __NAMESPACE__ . "\DDC1452EntityA AS a LEFT JOIN a.entitiesB AS b LEFT JOIN b.entityATo AS ba"; $results = $this->_em->createQuery($dql)->setMaxResults(1)->getResult(); - $this->assertSame($results[0], $results[0]->entitiesB[0]->entityAFrom); - $this->assertFalse( $results[0]->entitiesB[0]->entityATo instanceof Proxy); - $this->assertInstanceOf(Collection::class, $results[0]->entitiesB[0]->entityATo->getEntitiesB()); + self::assertSame($results[0], $results[0]->entitiesB[0]->entityAFrom); + self::assertFalse( $results[0]->entitiesB[0]->entityATo instanceof Proxy); + self::assertInstanceOf(Collection::class, $results[0]->entitiesB[0]->entityATo->getEntitiesB()); } public function testFetchJoinOneToOneFromInverse() @@ -78,12 +78,12 @@ public function testFetchJoinOneToOneFromInverse() $data = $this->_em->createQuery($dql)->getResult(); $this->_em->clear(); - $this->assertFalse($data[0]->user instanceof Proxy); + self::assertFalse($data[0]->user instanceof Proxy); $dql = "SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.address a"; $data = $this->_em->createQuery($dql)->getResult(); - $this->assertFalse($data[0]->address instanceof Proxy); + self::assertFalse($data[0]->address instanceof Proxy); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1458Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1458Test.php index 72d79cd432f..03ecc1f3245 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1458Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1458Test.php @@ -27,7 +27,7 @@ public function testIssue() $this->_em->clear(); // So here the value is 3 - $this->assertEquals(3, $testEntity->getValue()); + self::assertEquals(3, $testEntity->getValue()); $test = $this->_em->getRepository(TestEntity::class)->find(1); @@ -35,19 +35,19 @@ public function testIssue() $test->setValue(5); // So here the value is 5 - $this->assertEquals(5, $test->getValue()); + self::assertEquals(5, $test->getValue()); // Get the additional entity $additional = $test->getAdditional(); // Still 5.. - $this->assertEquals(5, $test->getValue()); + self::assertEquals(5, $test->getValue()); // Force the proxy to load $additional->getBool(); // The value should still be 5 - $this->assertEquals(5, $test->getValue()); + self::assertEquals(5, $test->getValue()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1461Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1461Test.php index da7100d683e..ac5230fae1b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1461Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1461Test.php @@ -29,8 +29,8 @@ public function testChangeDetectionDeferredExplicit() $this->_em->persist($user); $this->_em->flush(); - $this->assertEquals(\Doctrine\ORM\UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($user, \Doctrine\ORM\UnitOfWork::STATE_NEW), "Entity should be managed."); - $this->assertEquals(\Doctrine\ORM\UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($user), "Entity should be managed."); + self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($user, \Doctrine\ORM\UnitOfWork::STATE_NEW), "Entity should be managed."); + self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($user), "Entity should be managed."); $acc = new DDC1461TwitterAccount; $user->twitterAccount = $acc; @@ -39,7 +39,7 @@ public function testChangeDetectionDeferredExplicit() $this->_em->flush(); $user = $this->_em->find(get_class($user), $user->id); - $this->assertNotNull($user->twitterAccount); + self::assertNotNull($user->twitterAccount); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php index 17cfdf78dc7..50c6347b540 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php @@ -46,8 +46,8 @@ public function testFailingCase() $pic = $em->merge($picture); /* @var $pic DDC1509Picture */ - $this->assertNotNull($pic->getThumbnail()); - $this->assertNotNull($pic->getFile()); + self::assertNotNull($pic->getThumbnail()); + self::assertNotNull($pic->getFile()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1514Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1514Test.php index 1fc8a06efad..1de21f1f7eb 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1514Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1514Test.php @@ -56,11 +56,11 @@ public function testIssue() $dql = "SELECT a, b, ba, c FROM " . __NAMESPACE__ . "\DDC1514EntityA AS a LEFT JOIN a.entitiesB AS b LEFT JOIN b.entityATo AS ba LEFT JOIN a.entityC AS c ORDER BY a.title"; $results = $this->_em->createQuery($dql)->getResult(); - $this->assertEquals($a1->id, $results[0]->id); - $this->assertNull($results[0]->entityC); + self::assertEquals($a1->id, $results[0]->id); + self::assertNull($results[0]->entityC); - $this->assertEquals($a2->id, $results[1]->id); - $this->assertEquals($c->title, $results[1]->entityC->title); + self::assertEquals($a2->id, $results[1]->id); + self::assertEquals($c->title, $results[1]->entityC->title); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1515Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1515Test.php index 294ae87388f..cb04206955d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1515Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1515Test.php @@ -32,7 +32,7 @@ public function testIssue() $this->_em->clear(); $bar = $this->_em->find(DDC1515Bar::class, $bar->id); - $this->assertInstanceOf(DDC1515Foo::class, $bar->foo); + self::assertInstanceOf(DDC1515Foo::class, $bar->foo); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1526Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1526Test.php index 7a76e3fb938..32a5f58c7ae 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1526Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1526Test.php @@ -41,7 +41,7 @@ public function testIssue() // All Children collection now have to be initialized foreach ($menus as $menu) { - $this->assertTrue($menu->children->isInitialized()); + self::assertTrue($menu->children->isInitialized()); } } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1545Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1545Test.php index 20ebe424c5c..b0bdbe542e4 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1545Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1545Test.php @@ -72,8 +72,8 @@ public function testLinkObjects() ->setParameter('id', $this->articleId) ->getOneOrNullResult(); - $this->assertNotNull($article->user); - $this->assertEquals($user->id, $article->user->id); + self::assertNotNull($article->user); + self::assertEquals($user->id, $article->user->id); } public function testLinkObjectsWithAssociationLoaded() @@ -98,8 +98,8 @@ public function testLinkObjectsWithAssociationLoaded() ->setParameter('id', $this->articleId) ->getOneOrNullResult(); - $this->assertNotNull($article->user); - $this->assertEquals($user->id, $article->user->id); + self::assertNotNull($article->user); + self::assertEquals($user->id, $article->user->id); } public function testUnlinkObjects() @@ -119,7 +119,7 @@ public function testUnlinkObjects() ->setParameter('id', $this->articleId) ->getOneOrNullResult(); - $this->assertNull($article->user); + self::assertNull($article->user); } public function testUnlinkObjectsWithAssociationLoaded() @@ -142,7 +142,7 @@ public function testUnlinkObjectsWithAssociationLoaded() ->setParameter('id', $this->articleId) ->getOneOrNullResult(); - $this->assertNull($article->user); + self::assertNull($article->user); } public function testChangeLink() @@ -164,8 +164,8 @@ public function testChangeLink() ->setParameter('id', $this->articleId) ->getOneOrNullResult(); - $this->assertNotNull($article->user); - $this->assertEquals($user2->id, $article->user->id); + self::assertNotNull($article->user); + self::assertEquals($user2->id, $article->user->id); } public function testChangeLinkWithAssociationLoaded() @@ -190,7 +190,7 @@ public function testChangeLinkWithAssociationLoaded() ->setParameter('id', $this->articleId) ->getOneOrNullResult(); - $this->assertNotNull($article->user); - $this->assertEquals($user2->id, $article->user->id); + self::assertNotNull($article->user); + self::assertEquals($user2->id, $article->user->id); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1548Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1548Test.php index 6628586cc91..7be8812cde4 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1548Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1548Test.php @@ -33,7 +33,7 @@ public function testIssue() $obt = $this->_em->find(DDC1548Rel::class, $rel->id); - $this->assertNull($obt->e2); + self::assertNull($obt->e2); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1594Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1594Test.php index 0c94f73d54c..538cb0ca85e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1594Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1594Test.php @@ -34,8 +34,8 @@ public function testIssue() $mergedUser = $this->_em->merge($detachedUser); - $this->assertNotSame($mergedUser, $detachedUser); - $this->assertEquals('bar', $detachedUser->getName()); - $this->assertEquals('bar', $mergedUser->getName()); + self::assertNotSame($mergedUser, $detachedUser); + self::assertEquals('bar', $detachedUser->getName()); + self::assertEquals('bar', $mergedUser->getName()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php index 5f0e128b5c0..96f07e4bb4f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php @@ -38,14 +38,14 @@ public function testIssue() $entity1 = $repository->find($e1->id); // DDC-1596 - $this->assertSQLEquals( + self::assertSQLEquals( "SELECT t0.id AS id_1, t0.type FROM base t0 WHERE t0.id = ? AND t0.type IN ('Entity1')", $sqlLogger->queries[count($sqlLogger->queries)]['sql'] ); $entities = $entity1->getEntities()->getValues(); - $this->assertEquals( + self::assertEquals( "SELECT t0.id AS id_1, t0.type FROM base t0 INNER JOIN entity1_entity2 ON t0.id = entity1_entity2.item WHERE entity1_entity2.parent = ? AND t0.type IN ('Entity2')", $sqlLogger->queries[count($sqlLogger->queries)]['sql'] ); @@ -55,7 +55,7 @@ public function testIssue() $entity1 = $repository->find($e1->id); $entities = $entity1->getEntities()->count(); - $this->assertSQLEquals( + self::assertSQLEquals( "SELECT COUNT(*) FROM entity1_entity2 t WHERE t.parent = ?", $sqlLogger->queries[count($sqlLogger->queries)]['sql'] ); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC163Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC163Test.php index cea515ce3ec..9a57d03dcf3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC163Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC163Test.php @@ -56,8 +56,8 @@ public function testQueryWithOrConditionUsingTwoRelationOnSameEntity() $q->setParameter('name2', "p4"); $result = $q->getScalarResult(); - $this->assertEquals('p3', $result[0]['spouse_name']); - $this->assertEquals('p1', $result[0]['person_name']); - $this->assertEquals('p2', $result[0]['friend_name']); + self::assertEquals('p3', $result[0]['spouse_name']); + self::assertEquals('p1', $result[0]['person_name']); + self::assertEquals('p2', $result[0]['friend_name']); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1643Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1643Test.php index fda16824621..c5636714491 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1643Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1643Test.php @@ -54,7 +54,7 @@ public function testClonePersistentCollectionAndReuse() $user1 = $this->_em->find(get_class($user1), $user1->id); - $this->assertEquals(2, count($user1->groups)); + self::assertEquals(2, count($user1->groups)); } public function testClonePersistentCollectionAndShare() @@ -70,8 +70,8 @@ public function testClonePersistentCollectionAndShare() $user1 = $this->_em->find(get_class($user1), $user1->id); $user2 = $this->_em->find(get_class($user1), $user2->id); - $this->assertEquals(2, count($user1->groups)); - $this->assertEquals(2, count($user2->groups)); + self::assertEquals(2, count($user1->groups)); + self::assertEquals(2, count($user2->groups)); } public function testCloneThenDirtyPersistentCollection() @@ -91,8 +91,8 @@ public function testCloneThenDirtyPersistentCollection() $user1 = $this->_em->find(get_class($user1), $user1->id); $user2 = $this->_em->find(get_class($user1), $user2->id); - $this->assertEquals(3, count($user2->groups)); - $this->assertEquals(2, count($user1->groups)); + self::assertEquals(3, count($user2->groups)); + self::assertEquals(2, count($user1->groups)); } public function testNotCloneAndPassAroundFlush() @@ -105,7 +105,7 @@ public function testNotCloneAndPassAroundFlush() $user2->groups = $user1->groups; $user2->groups->add($group3); - $this->assertCount(1, $user1->groups->getInsertDiff()); + self::assertCount(1, $user1->groups->getInsertDiff()); $this->_em->persist($group3); $this->_em->flush(); @@ -114,8 +114,8 @@ public function testNotCloneAndPassAroundFlush() $user1 = $this->_em->find(get_class($user1), $user1->id); $user2 = $this->_em->find(get_class($user1), $user2->id); - $this->assertEquals(3, count($user2->groups)); - $this->assertEquals(3, count($user1->groups)); + self::assertEquals(3, count($user2->groups)); + self::assertEquals(3, count($user1->groups)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1654Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1654Test.php index a5a620f63da..3093f48f7c9 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1654Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1654Test.php @@ -42,7 +42,7 @@ public function testManyToManyRemoveFromCollectionOrphanRemoval() $this->_em->clear(); $comments = $this->_em->getRepository(DDC1654Comment::class)->findAll(); - $this->assertEquals(0, count($comments)); + self::assertEquals(0, count($comments)); } public function testManyToManyRemoveElementFromCollectionOrphanRemoval() @@ -61,7 +61,7 @@ public function testManyToManyRemoveElementFromCollectionOrphanRemoval() $this->_em->clear(); $comments = $this->_em->getRepository(DDC1654Comment::class)->findAll(); - $this->assertEquals(0, count($comments)); + self::assertEquals(0, count($comments)); } /** @@ -84,7 +84,7 @@ public function testManyToManyRemoveElementFromReAddToCollectionOrphanRemoval() $this->_em->clear(); $comments = $this->_em->getRepository(DDC1654Comment::class)->findAll(); - $this->assertEquals(2, count($comments)); + self::assertEquals(2, count($comments)); } public function testManyToManyClearCollectionOrphanRemoval() @@ -102,7 +102,7 @@ public function testManyToManyClearCollectionOrphanRemoval() $this->_em->clear(); $comments = $this->_em->getRepository(DDC1654Comment::class)->findAll(); - $this->assertEquals(0, count($comments)); + self::assertEquals(0, count($comments)); } @@ -126,7 +126,7 @@ public function testManyToManyClearCollectionReAddOrphanRemoval() $this->_em->clear(); $comments = $this->_em->getRepository(DDC1654Comment::class)->findAll(); - $this->assertEquals(1, count($comments)); + self::assertEquals(1, count($comments)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1655Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1655Test.php index a22a5fc9e43..1a8f07fb735 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1655Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1655Test.php @@ -54,10 +54,10 @@ protected function tearDown() public function testPostLoadOneToManyInheritance() { $cm = $this->_em->getClassMetadata(DDC1655Foo::class); - $this->assertEquals(["postLoad" => ["postLoad"]], $cm->lifecycleCallbacks); + self::assertEquals(["postLoad" => ["postLoad"]], $cm->lifecycleCallbacks); $cm = $this->_em->getClassMetadata(DDC1655Bar::class); - $this->assertEquals(["postLoad" => ["postLoad", "postSubLoaded"]], $cm->lifecycleCallbacks); + self::assertEquals(["postLoad" => ["postLoad", "postSubLoaded"]], $cm->lifecycleCallbacks); $baz = new DDC1655Baz(); $foo = new DDC1655Foo(); @@ -73,7 +73,7 @@ public function testPostLoadOneToManyInheritance() $baz = $this->_em->find(get_class($baz), $baz->id); foreach ($baz->foos as $foo) { - $this->assertEquals(1, $foo->loaded, "should have loaded callback counter incremented for " . get_class($foo)); + self::assertEquals(1, $foo->loaded, "should have loaded callback counter incremented for " . get_class($foo)); } } @@ -90,23 +90,23 @@ public function testPostLoadInheritanceChild() $this->_em->clear(); $bar = $this->_em->find(get_class($bar), $bar->id); - $this->assertEquals(1, $bar->loaded); - $this->assertEquals(1, $bar->subLoaded); + self::assertEquals(1, $bar->loaded); + self::assertEquals(1, $bar->subLoaded); $bar = $this->_em->find(get_class($bar), $bar->id); - $this->assertEquals(1, $bar->loaded); - $this->assertEquals(1, $bar->subLoaded); + self::assertEquals(1, $bar->loaded); + self::assertEquals(1, $bar->subLoaded); $dql = "SELECT b FROM " . __NAMESPACE__ . "\DDC1655Bar b WHERE b.id = ?1"; $bar = $this->_em->createQuery($dql)->setParameter(1, $bar->id)->getSingleResult(); - $this->assertEquals(1, $bar->loaded); - $this->assertEquals(1, $bar->subLoaded); + self::assertEquals(1, $bar->loaded); + self::assertEquals(1, $bar->subLoaded); $this->_em->refresh($bar); - $this->assertEquals(2, $bar->loaded); - $this->assertEquals(2, $bar->subLoaded); + self::assertEquals(2, $bar->loaded); + self::assertEquals(2, $bar->subLoaded); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1666Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1666Test.php index e664e537c3d..e82ea130f8d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1666Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1666Test.php @@ -28,13 +28,13 @@ public function testGivenOrphanRemovalOneToOne_WhenReplacing_ThenNoUniqueConstra $this->_em->persist($user); $this->_em->flush(); - $this->assertTrue($this->_em->contains($email)); + self::assertTrue($this->_em->contains($email)); $user->setEmail($newEmail = new CmsEmail()); $newEmail->setEmail("benjamin.eberlei@googlemail.com"); $this->_em->flush(); - $this->assertFalse($this->_em->contains($email)); + self::assertFalse($this->_em->contains($email)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1685Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1685Test.php index 18c33ad42ce..0eedb326ce5 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1685Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1685Test.php @@ -36,13 +36,13 @@ protected function setUp() public function testPaginateCount() { - $this->assertEquals(1, count($this->paginator)); + self::assertEquals(1, count($this->paginator)); } public function testPaginateIterate() { foreach ($this->paginator as $ad) { - $this->assertInstanceOf(DDC117ArticleDetails::class, $ad); + self::assertInstanceOf(DDC117ArticleDetails::class, $ad); } } @@ -50,7 +50,7 @@ public function testPaginateCountNoOutputWalkers() { $this->paginator->setUseOutputWalkers(false); - $this->assertEquals(1, count($this->paginator)); + self::assertEquals(1, count($this->paginator)); } public function testPaginateIterateNoOutputWalkers() @@ -61,7 +61,7 @@ public function testPaginateIterateNoOutputWalkers() $this->expectExceptionMessage('Paginating an entity with foreign key as identifier only works when using the Output Walkers. Call Paginator#setUseOutputWalkers(true) before iterating the paginator.'); foreach ($this->paginator as $ad) { - $this->assertInstanceOf(DDC117ArticleDetails::class, $ad); + self::assertInstanceOf(DDC117ArticleDetails::class, $ad); } } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php index ddaa83d80eb..fde657f1202 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php @@ -53,10 +53,10 @@ public function testJoinedSubclassPersisterRequiresSpecificOrderOfMetadataReflFi $q->setParameter(1, "Foo"); $theEmployee = $q->getSingleResult(); - $this->assertEquals("bar", $theEmployee->getDepartment()); - $this->assertEquals("Foo", $theEmployee->getName()); - $this->assertEquals(1000, $theEmployee->getSalary()); - $this->assertInstanceOf(CompanyEmployee::class, $theEmployee); - $this->assertInstanceOf(CompanyEmployee::class, $theEmployee->getSpouse()); + self::assertEquals("bar", $theEmployee->getDepartment()); + self::assertEquals("Foo", $theEmployee->getName()); + self::assertEquals(1000, $theEmployee->getSalary()); + self::assertInstanceOf(CompanyEmployee::class, $theEmployee); + self::assertInstanceOf(CompanyEmployee::class, $theEmployee->getSpouse()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1690Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1690Test.php index 47e79ed7aee..64b5375d1b9 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1690Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1690Test.php @@ -35,14 +35,14 @@ public function testChangeTracking() $this->_em->persist($parent); $this->_em->persist($child); - $this->assertEquals(1, count($parent->listeners)); - $this->assertEquals(1, count($child->listeners)); + self::assertEquals(1, count($parent->listeners)); + self::assertEquals(1, count($child->listeners)); $this->_em->flush(); $this->_em->clear(); - $this->assertEquals(1, count($parent->listeners)); - $this->assertEquals(1, count($child->listeners)); + self::assertEquals(1, count($parent->listeners)); + self::assertEquals(1, count($child->listeners)); $parentId = $parent->getId(); $childId = $child->getId(); @@ -51,25 +51,25 @@ public function testChangeTracking() $parent = $this->_em->find(DDC1690Parent::class, $parentId); $child = $this->_em->find(DDC1690Child::class, $childId); - $this->assertEquals(1, count($parent->listeners)); - $this->assertInstanceOf(Proxy::class, $child, 'Verifying that $child is a proxy before using proxy API'); - $this->assertCount(0, $child->listeners); + self::assertEquals(1, count($parent->listeners)); + self::assertInstanceOf(Proxy::class, $child, 'Verifying that $child is a proxy before using proxy API'); + self::assertCount(0, $child->listeners); $child->__load(); - $this->assertCount(1, $child->listeners); + self::assertCount(1, $child->listeners); unset($parent, $child); $parent = $this->_em->find(DDC1690Parent::class, $parentId); $child = $parent->getChild(); - $this->assertEquals(1, count($parent->listeners)); - $this->assertEquals(1, count($child->listeners)); + self::assertEquals(1, count($parent->listeners)); + self::assertEquals(1, count($child->listeners)); unset($parent, $child); $child = $this->_em->find(DDC1690Child::class, $childId); $parent = $child->getParent(); - $this->assertEquals(1, count($parent->listeners)); - $this->assertEquals(1, count($child->listeners)); + self::assertEquals(1, count($parent->listeners)); + self::assertEquals(1, count($child->listeners)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php index 20cef650755..396903f2857 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php @@ -15,7 +15,7 @@ public function testIssue() $dql = "SELECT n.smallText, n.publishDate FROM " . __NAMESPACE__ . "\\DDC1695News n"; $sql = $this->_em->createQuery($dql)->getSQL(); - $this->assertEquals( + self::assertEquals( 'SELECT d0_."SmallText" AS SmallText_0, d0_."PublishDate" AS PublishDate_1 FROM "DDC1695News" d0_', $sql ); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1707Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1707Test.php index 54b52a57bd1..402c2c1ec82 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1707Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1707Test.php @@ -33,7 +33,7 @@ public function testPostLoadOnChild() $class->invokeLifecycleCallbacks(Events::postLoad, $entity); - $this->assertTrue($entity->postLoad); + self::assertTrue($entity->postLoad); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php index b3784ff8a7c..3671d5570a3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php @@ -47,14 +47,14 @@ public function testCreateRetrieveUpdateDelete() $e1 = $this->_em->find(DDC1719SimpleEntity::class, $e1Id); $e2 = $this->_em->find(DDC1719SimpleEntity::class, $e2Id); - $this->assertInstanceOf(DDC1719SimpleEntity::class, $e1); - $this->assertInstanceOf(DDC1719SimpleEntity::class, $e2); + self::assertInstanceOf(DDC1719SimpleEntity::class, $e1); + self::assertInstanceOf(DDC1719SimpleEntity::class, $e2); - $this->assertEquals($e1Id, $e1->id); - $this->assertEquals($e2Id, $e2->id); + self::assertEquals($e1Id, $e1->id); + self::assertEquals($e2Id, $e2->id); - $this->assertEquals('Bar 1', $e1->value); - $this->assertEquals('Foo 1', $e2->value); + self::assertEquals('Bar 1', $e1->value); + self::assertEquals('Foo 1', $e2->value); $e1->value = 'Bar 2'; $e2->value = 'Foo 2'; @@ -64,17 +64,17 @@ public function testCreateRetrieveUpdateDelete() $this->_em->persist($e2); $this->_em->flush(); - $this->assertEquals('Bar 2', $e1->value); - $this->assertEquals('Foo 2', $e2->value); + self::assertEquals('Bar 2', $e1->value); + self::assertEquals('Foo 2', $e2->value); - $this->assertInstanceOf(DDC1719SimpleEntity::class, $e1); - $this->assertInstanceOf(DDC1719SimpleEntity::class, $e2); + self::assertInstanceOf(DDC1719SimpleEntity::class, $e1); + self::assertInstanceOf(DDC1719SimpleEntity::class, $e2); - $this->assertEquals($e1Id, $e1->id); - $this->assertEquals($e2Id, $e2->id); + self::assertEquals($e1Id, $e1->id); + self::assertEquals($e2Id, $e2->id); - $this->assertEquals('Bar 2', $e1->value); - $this->assertEquals('Foo 2', $e2->value); + self::assertEquals('Bar 2', $e1->value); + self::assertEquals('Foo 2', $e2->value); // Delete $this->_em->remove($e1); @@ -85,8 +85,8 @@ public function testCreateRetrieveUpdateDelete() $e1 = $this->_em->find(DDC1719SimpleEntity::class, $e1Id); $e2 = $this->_em->find(DDC1719SimpleEntity::class, $e2Id); - $this->assertNull($e1); - $this->assertNull($e2); + self::assertNull($e1); + self::assertNull($e2); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php index cfca544ae81..0753c234ff1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php @@ -32,15 +32,15 @@ public function testMergeWorksOnNonSerializedProxies() $proxy = $this->getProxy($group); - $this->assertInstanceOf(Proxy::class, $proxy); - $this->assertFalse($proxy->__isInitialized()); + self::assertInstanceOf(Proxy::class, $proxy); + self::assertFalse($proxy->__isInitialized()); $this->_em->detach($proxy); $this->_em->clear(); $proxy = $this->_em->merge($proxy); - $this->assertEquals('Foo', $proxy->getName(), 'The entity is broken'); + self::assertEquals('Foo', $proxy->getName(), 'The entity is broken'); } /** @@ -62,15 +62,15 @@ public function testMergeWorksOnSerializedProxies() $proxy = $this->getProxy($group); - $this->assertInstanceOf(Proxy::class, $proxy); - $this->assertFalse($proxy->__isInitialized()); + self::assertInstanceOf(Proxy::class, $proxy); + self::assertFalse($proxy->__isInitialized()); $this->_em->detach($proxy); $serializedProxy = serialize($proxy); $this->_em->clear(); $unserializedProxy = $this->_em->merge(unserialize($serializedProxy)); - $this->assertEquals('Foo', $unserializedProxy->getName(), 'The entity is broken'); + self::assertEquals('Foo', $unserializedProxy->getName(), 'The entity is broken'); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1778Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1778Test.php index 09623f13535..913b33ce9f5 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1778Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1778Test.php @@ -45,7 +45,7 @@ public function testClear() $this->user = $this->_em->find(CmsUser::class, $this->user->getId()); - $this->assertCount(1, $this->user->getPhonenumbers()); + self::assertCount(1, $this->user->getPhonenumbers()); } public function testRemove() @@ -57,7 +57,7 @@ public function testRemove() $this->user = $this->_em->find(CmsUser::class, $this->user->getId()); - $this->assertCount(1, $this->user->getPhonenumbers()); + self::assertCount(1, $this->user->getPhonenumbers()); } public function testRemoveElement() @@ -69,6 +69,6 @@ public function testRemoveElement() $this->user = $this->_em->find(CmsUser::class, $this->user->getId()); - $this->assertCount(1, $this->user->getPhonenumbers()); + self::assertCount(1, $this->user->getPhonenumbers()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1787Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1787Test.php index 17f28658a5d..0a5f8fcd554 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1787Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1787Test.php @@ -27,7 +27,7 @@ public function testIssue() $this->_em->persist($bar2); $this->_em->flush(); - $this->assertSame(1, $bar->getVersion()); + self::assertSame(1, $bar->getVersion()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1843Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1843Test.php index 4273a36b6af..a3f4e92ed98 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1843Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1843Test.php @@ -61,21 +61,21 @@ public function testCreateRetrieveUpdateDelete() $e3 = $this->_em->find(Group::class, $e3Id); $e4 = $this->_em->find(Group::class, $e4Id); - $this->assertInstanceOf(Group::class, $e1); - $this->assertInstanceOf(Group::class, $e2); - $this->assertInstanceOf(Group::class, $e3); - $this->assertInstanceOf(Group::class, $e4); + self::assertInstanceOf(Group::class, $e1); + self::assertInstanceOf(Group::class, $e2); + self::assertInstanceOf(Group::class, $e3); + self::assertInstanceOf(Group::class, $e4); - $this->assertEquals($e1Id, $e1->id); - $this->assertEquals($e2Id, $e2->id); - $this->assertEquals($e3Id, $e3->id); - $this->assertEquals($e4Id, $e4->id); + self::assertEquals($e1Id, $e1->id); + self::assertEquals($e2Id, $e2->id); + self::assertEquals($e3Id, $e3->id); + self::assertEquals($e4Id, $e4->id); - $this->assertEquals('Parent Bar 1', $e1->name); - $this->assertEquals('Parent Foo 2', $e2->name); - $this->assertEquals('Bar 3', $e3->name); - $this->assertEquals('Foo 4', $e4->name); + self::assertEquals('Parent Bar 1', $e1->name); + self::assertEquals('Parent Foo 2', $e2->name); + self::assertEquals('Bar 3', $e3->name); + self::assertEquals('Foo 4', $e4->name); $e1->name = 'Parent Bar 11'; $e2->name = 'Parent Foo 22'; @@ -89,25 +89,25 @@ public function testCreateRetrieveUpdateDelete() $this->_em->persist($e4); $this->_em->flush(); - $this->assertEquals('Parent Bar 11', $e1->name); - $this->assertEquals('Parent Foo 22', $e2->name); - $this->assertEquals('Bar 33', $e3->name); - $this->assertEquals('Foo 44', $e4->name); + self::assertEquals('Parent Bar 11', $e1->name); + self::assertEquals('Parent Foo 22', $e2->name); + self::assertEquals('Bar 33', $e3->name); + self::assertEquals('Foo 44', $e4->name); - $this->assertInstanceOf(Group::class, $e1); - $this->assertInstanceOf(Group::class, $e2); - $this->assertInstanceOf(Group::class, $e3); - $this->assertInstanceOf(Group::class, $e4); + self::assertInstanceOf(Group::class, $e1); + self::assertInstanceOf(Group::class, $e2); + self::assertInstanceOf(Group::class, $e3); + self::assertInstanceOf(Group::class, $e4); - $this->assertEquals($e1Id, $e1->id); - $this->assertEquals($e2Id, $e2->id); - $this->assertEquals($e3Id, $e3->id); - $this->assertEquals($e4Id, $e4->id); + self::assertEquals($e1Id, $e1->id); + self::assertEquals($e2Id, $e2->id); + self::assertEquals($e3Id, $e3->id); + self::assertEquals($e4Id, $e4->id); - $this->assertEquals('Parent Bar 11', $e1->name); - $this->assertEquals('Parent Foo 22', $e2->name); - $this->assertEquals('Bar 33', $e3->name); - $this->assertEquals('Foo 44', $e4->name); + self::assertEquals('Parent Bar 11', $e1->name); + self::assertEquals('Parent Foo 22', $e2->name); + self::assertEquals('Bar 33', $e3->name); + self::assertEquals('Foo 44', $e4->name); // Delete $this->_em->remove($e4); @@ -119,10 +119,10 @@ public function testCreateRetrieveUpdateDelete() $this->_em->clear(); - $this->assertInstanceOf(Group::class, $e1); - $this->assertInstanceOf(Group::class, $e2); - $this->assertInstanceOf(Group::class, $e3); - $this->assertInstanceOf(Group::class, $e4); + self::assertInstanceOf(Group::class, $e1); + self::assertInstanceOf(Group::class, $e2); + self::assertInstanceOf(Group::class, $e3); + self::assertInstanceOf(Group::class, $e4); // Retrieve $e1 = $this->_em->find(Group::class, $e1Id); @@ -130,10 +130,10 @@ public function testCreateRetrieveUpdateDelete() $e3 = $this->_em->find(Group::class, $e3Id); $e4 = $this->_em->find(Group::class, $e4Id); - $this->assertNull($e1); - $this->assertNull($e2); - $this->assertNull($e3); - $this->assertNull($e4); + self::assertNull($e1); + self::assertNull($e2); + self::assertNull($e3); + self::assertNull($e4); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1884Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1884Test.php index 938459ad465..db353a55fee 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1884Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1884Test.php @@ -108,9 +108,9 @@ public function testSelectFromInverseSideWithCompositePkAndSolelyIdentifierColum ->getQuery() ->getArrayResult(); - $this->assertCount(1, $result); - $this->assertArrayHasKey('freeDriverRides', $result[0]); - $this->assertCount(3, $result[0]['freeDriverRides']); + self::assertCount(1, $result); + self::assertArrayHasKey('freeDriverRides', $result[0]); + self::assertCount(3, $result[0]['freeDriverRides']); } /** @@ -129,9 +129,9 @@ public function testSelectFromInverseSideWithCompositePkUsingFetchJoins() ->setParameter(1, 'John Doe') ->getQuery()->getArrayResult(); - $this->assertCount(1, $result); - $this->assertArrayHasKey('driverRides', $result[0]); - $this->assertCount(3, $result[0]['driverRides']); + self::assertCount(1, $result); + self::assertArrayHasKey('driverRides', $result[0]); + self::assertCount(3, $result[0]['driverRides']); } /** @@ -149,8 +149,8 @@ public function testSelectFromOwningSideUsingFetchJoins() ->setParameter(1, 'John Doe') ->getQuery()->getArrayResult(); - $this->assertCount(3, $result); - $this->assertArrayHasKey('driver', $result[0]); - $this->assertArrayHasKey('car', $result[0]); + self::assertCount(3, $result); + self::assertArrayHasKey('driver', $result[0]); + self::assertArrayHasKey('car', $result[0]); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1885Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1885Test.php index 283340b820a..0dd0df2c24c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1885Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1885Test.php @@ -60,17 +60,17 @@ public function testCreateRetrieveUpdateDelete() // Retrieve $user = $this->_em->find(User::class, $u1Id); - $this->assertInstanceOf(User::class, $user); - $this->assertEquals('FabioBatSilva', $user->name); - $this->assertEquals($u1Id, $user->id); + self::assertInstanceOf(User::class, $user); + self::assertEquals('FabioBatSilva', $user->name); + self::assertEquals($u1Id, $user->id); - $this->assertCount(2, $user->groups); + self::assertCount(2, $user->groups); $g1 = $user->getGroups()->get(0); $g2 = $user->getGroups()->get(1); - $this->assertInstanceOf(Group::class, $g1); - $this->assertInstanceOf(Group::class, $g2); + self::assertInstanceOf(Group::class, $g1); + self::assertInstanceOf(Group::class, $g2); $g1->name = 'Bar 11'; $g2->name = 'Foo 22'; @@ -82,9 +82,9 @@ public function testCreateRetrieveUpdateDelete() $user = $this->_em->find(User::class, $u1Id); - $this->assertInstanceOf(User::class, $user); - $this->assertEquals('FabioBatSilva', $user->name); - $this->assertEquals($u1Id, $user->id); + self::assertInstanceOf(User::class, $user); + self::assertEquals('FabioBatSilva', $user->name); + self::assertEquals($u1Id, $user->id); // Delete $this->_em->remove($user); @@ -92,9 +92,9 @@ public function testCreateRetrieveUpdateDelete() $this->_em->flush(); $this->_em->clear(); - $this->assertNull($this->_em->find(User::class, $u1Id)); - $this->assertNull($this->_em->find(Group::class, $g1Id)); - $this->assertNull($this->_em->find(Group::class, $g2Id)); + self::assertNull($this->_em->find(User::class, $u1Id)); + self::assertNull($this->_em->find(Group::class, $g1Id)); + self::assertNull($this->_em->find(Group::class, $g2Id)); } public function testRemoveItem() @@ -103,13 +103,13 @@ public function testRemoveItem() $u1Id = $user->id; $user = $this->_em->find(User::class, $u1Id); - $this->assertInstanceOf(User::class, $user); - $this->assertEquals('FabioBatSilva', $user->name); - $this->assertEquals($u1Id, $user->id); + self::assertInstanceOf(User::class, $user); + self::assertEquals('FabioBatSilva', $user->name); + self::assertEquals($u1Id, $user->id); - $this->assertCount(2, $user->groups); - $this->assertInstanceOf(Group::class, $user->getGroups()->get(0)); - $this->assertInstanceOf(Group::class, $user->getGroups()->get(1)); + self::assertCount(2, $user->groups); + self::assertInstanceOf(Group::class, $user->getGroups()->get(0)); + self::assertInstanceOf(Group::class, $user->getGroups()->get(1)); $user->getGroups()->remove(0); @@ -120,11 +120,11 @@ public function testRemoveItem() $user = $this->_em->find(User::class, $u1Id); - $this->assertInstanceOf(User::class, $user); - $this->assertEquals('FabioBatSilva', $user->name); - $this->assertEquals($u1Id, $user->id); + self::assertInstanceOf(User::class, $user); + self::assertEquals('FabioBatSilva', $user->name); + self::assertEquals($u1Id, $user->id); - $this->assertCount(1, $user->getGroups()); + self::assertCount(1, $user->getGroups()); } public function testClearAll() @@ -133,13 +133,13 @@ public function testClearAll() $u1Id = $user->id; $user = $this->_em->find(User::class, $u1Id); - $this->assertInstanceOf(User::class, $user); - $this->assertEquals('FabioBatSilva', $user->name); - $this->assertEquals($u1Id, $user->id); + self::assertInstanceOf(User::class, $user); + self::assertEquals('FabioBatSilva', $user->name); + self::assertEquals($u1Id, $user->id); - $this->assertCount(2, $user->groups); - $this->assertInstanceOf(Group::class, $user->getGroups()->get(0)); - $this->assertInstanceOf(Group::class, $user->getGroups()->get(1)); + self::assertCount(2, $user->groups); + self::assertInstanceOf(Group::class, $user->getGroups()->get(0)); + self::assertInstanceOf(Group::class, $user->getGroups()->get(1)); $user->getGroups()->clear(); @@ -150,11 +150,11 @@ public function testClearAll() $user = $this->_em->find(User::class, $u1Id); - $this->assertInstanceOf(User::class, $user); - $this->assertEquals('FabioBatSilva', $user->name); - $this->assertEquals($u1Id, $user->id); + self::assertInstanceOf(User::class, $user); + self::assertEquals('FabioBatSilva', $user->name); + self::assertEquals($u1Id, $user->id); - $this->assertCount(0, $user->getGroups()); + self::assertCount(0, $user->getGroups()); } public function testCountExtraLazy() @@ -163,12 +163,12 @@ public function testCountExtraLazy() $u1Id = $user->id; $user = $this->_em->find(User::class, $u1Id); - $this->assertInstanceOf(User::class, $user); - $this->assertEquals('FabioBatSilva', $user->name); - $this->assertEquals($u1Id, $user->id); + self::assertInstanceOf(User::class, $user); + self::assertEquals('FabioBatSilva', $user->name); + self::assertEquals($u1Id, $user->id); - $this->assertCount(2, $user->groups); - $this->assertInstanceOf(Group::class, $user->getGroups()->get(0)); - $this->assertInstanceOf(Group::class, $user->getGroups()->get(1)); + self::assertCount(2, $user->groups); + self::assertInstanceOf(Group::class, $user->getGroups()->get(0)); + self::assertInstanceOf(Group::class, $user->getGroups()->get(1)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1918Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1918Test.php index 4b0c7eb9151..d6c4839b0e8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1918Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1918Test.php @@ -45,18 +45,18 @@ public function testLastPageCorrect() $query->setMaxResults(3); $paginator = new Paginator($query, true); - $this->assertEquals(3, count(iterator_to_array($paginator))); + self::assertEquals(3, count(iterator_to_array($paginator))); $query->setFirstResult(8); $query->setMaxResults(3); $paginator = new Paginator($query, true); - $this->assertEquals(2, count(iterator_to_array($paginator))); + self::assertEquals(2, count(iterator_to_array($paginator))); $query->setFirstResult(10); $query->setMaxResults(3); $paginator = new Paginator($query, true); - $this->assertEquals(0, count(iterator_to_array($paginator))); + self::assertEquals(0, count(iterator_to_array($paginator))); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1995Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1995Test.php index fb32b99fe51..d93a72885e6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1995Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1995Test.php @@ -38,8 +38,8 @@ public function testIssue() ->setParameter(1, $class) ->getResult(); - $this->assertCount(1, $result); - $this->assertInstanceOf(CompanyEmployee::class, $result[0]); + self::assertCount(1, $result); + self::assertInstanceOf(CompanyEmployee::class, $result[0]); } public function testQueryCache() @@ -71,11 +71,11 @@ public function testQueryCache() ->useQueryCache(true) ->getResult(); - $this->assertCount(1, $result1); - $this->assertCount(1, $result2); + self::assertCount(1, $result1); + self::assertCount(1, $result2); - $this->assertInstanceOf(CompanyEmployee::class, $result1[0]); - $this->assertInstanceOf(CompanyPerson::class, $result2[0]); - $this->assertNotInstanceOf(CompanyEmployee::class, $result2[0]); + self::assertInstanceOf(CompanyEmployee::class, $result1[0]); + self::assertInstanceOf(CompanyPerson::class, $result2[0]); + self::assertNotInstanceOf(CompanyEmployee::class, $result2[0]); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1998Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1998Test.php index 74ea2fd8889..74c9a71cebb 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1998Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1998Test.php @@ -37,12 +37,12 @@ public function testSqlConversionAsIdentifier() $found = $this->_em->find(DDC1998Entity::class, $entity->id); - $this->assertNull($found); + self::assertNull($found); $found = $this->_em->find(DDC1998Entity::class, "foo"); - $this->assertNull($found); + self::assertNull($found); - $this->assertEquals(0, count($this->_em->getRepository(DDC1998Entity::class)->findAll())); + self::assertEquals(0, count($this->_em->getRepository(DDC1998Entity::class)->findAll())); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC199Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC199Test.php index 2fb3acd33bd..2daadcf8c94 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC199Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC199Test.php @@ -41,12 +41,12 @@ public function testPolymorphicLoading() $query = $this->_em->createQuery('select e,r from Doctrine\Tests\ORM\Functional\Ticket\DDC199ParentClass e join e.relatedEntities r'); $result = $query->getResult(); - $this->assertEquals(1, count($result)); - $this->assertInstanceOf(DDC199ParentClass::class, $result[0]); - $this->assertTrue($result[0]->relatedEntities->isInitialized()); - $this->assertEquals(2, $result[0]->relatedEntities->count()); - $this->assertInstanceOf(DDC199RelatedClass::class, $result[0]->relatedEntities[0]); - $this->assertInstanceOf(DDC199RelatedClass::class, $result[0]->relatedEntities[1]); + self::assertEquals(1, count($result)); + self::assertInstanceOf(DDC199ParentClass::class, $result[0]); + self::assertTrue($result[0]->relatedEntities->isInitialized()); + self::assertEquals(2, $result[0]->relatedEntities->count()); + self::assertInstanceOf(DDC199RelatedClass::class, $result[0]->relatedEntities[0]); + self::assertInstanceOf(DDC199RelatedClass::class, $result[0]->relatedEntities[1]); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2012Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2012Test.php index 3882408081e..008ba12c637 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2012Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2012Test.php @@ -38,16 +38,16 @@ public function testIssue() $item = $this->_em->find(get_class($item), $item->id); - $this->assertArrayHasKey('convertToDatabaseValueSQL', DDC2012TsVectorType::$calls); - $this->assertArrayHasKey('convertToDatabaseValue', DDC2012TsVectorType::$calls); - $this->assertArrayHasKey('convertToPHPValue', DDC2012TsVectorType::$calls); + self::assertArrayHasKey('convertToDatabaseValueSQL', DDC2012TsVectorType::$calls); + self::assertArrayHasKey('convertToDatabaseValue', DDC2012TsVectorType::$calls); + self::assertArrayHasKey('convertToPHPValue', DDC2012TsVectorType::$calls); - $this->assertCount(1, DDC2012TsVectorType::$calls['convertToDatabaseValueSQL']); - $this->assertCount(1, DDC2012TsVectorType::$calls['convertToDatabaseValue']); - $this->assertCount(1, DDC2012TsVectorType::$calls['convertToPHPValue']); + self::assertCount(1, DDC2012TsVectorType::$calls['convertToDatabaseValueSQL']); + self::assertCount(1, DDC2012TsVectorType::$calls['convertToDatabaseValue']); + self::assertCount(1, DDC2012TsVectorType::$calls['convertToPHPValue']); - $this->assertInstanceOf(DDC2012Item::class, $item); - $this->assertEquals(['word1', 'word2', 'word3'], $item->tsv); + self::assertInstanceOf(DDC2012Item::class, $item); + self::assertEquals(['word1', 'word2', 'word3'], $item->tsv); $item->tsv = ['word1', 'word2']; @@ -58,12 +58,12 @@ public function testIssue() $item = $this->_em->find(get_class($item), $item->id); - $this->assertCount(2, DDC2012TsVectorType::$calls['convertToDatabaseValueSQL']); - $this->assertCount(2, DDC2012TsVectorType::$calls['convertToDatabaseValue']); - $this->assertCount(2, DDC2012TsVectorType::$calls['convertToPHPValue']); + self::assertCount(2, DDC2012TsVectorType::$calls['convertToDatabaseValueSQL']); + self::assertCount(2, DDC2012TsVectorType::$calls['convertToDatabaseValue']); + self::assertCount(2, DDC2012TsVectorType::$calls['convertToPHPValue']); - $this->assertInstanceOf(DDC2012Item::class, $item); - $this->assertEquals(['word1', 'word2'], $item->tsv); + self::assertInstanceOf(DDC2012Item::class, $item); + self::assertEquals(['word1', 'word2'], $item->tsv); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2074Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2074Test.php index ed77ba13468..32dcfe9699a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2074Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2074Test.php @@ -30,7 +30,7 @@ public function testShouldNotScheduleDeletionOnClonedInstances() $clonedCollection = clone $collection; $clonedCollection->clear(); - $this->assertEquals(0, count($uow->getScheduledCollectionDeletions())); + self::assertEquals(0, count($uow->getScheduledCollectionDeletions())); } public function testSavingClonedPersistentCollection() @@ -53,9 +53,9 @@ public function testSavingClonedPersistentCollection() $product1 = $this->_em->find(ECommerceProduct::class, $product->getId()); $product2 = $this->_em->find(ECommerceProduct::class, $newProduct->getId()); - $this->assertCount(1, $product1->getCategories()); - $this->assertCount(1, $product2->getCategories()); + self::assertCount(1, $product1->getCategories()); + self::assertCount(1, $product2->getCategories()); - $this->assertSame($product1->getCategories()->get(0), $product2->getCategories()->get(0)); + self::assertSame($product1->getCategories()->get(0), $product2->getCategories()->get(0)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2084Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2084Test.php index eadbc1caf9d..afc2f5e502e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2084Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2084Test.php @@ -44,9 +44,9 @@ public function testIssue() $e2 = $e1->getMyEntity2(); $e = $this->_em->find(__NAMESPACE__ . '\DDC2084\MyEntity1', $e2); - $this->assertInstanceOf(__NAMESPACE__ . '\DDC2084\MyEntity1', $e); - $this->assertInstanceOf(__NAMESPACE__ . '\DDC2084\MyEntity2', $e->getMyEntity2()); - $this->assertEquals('Foo', $e->getMyEntity2()->getValue()); + self::assertInstanceOf(__NAMESPACE__ . '\DDC2084\MyEntity1', $e); + self::assertInstanceOf(__NAMESPACE__ . '\DDC2084\MyEntity2', $e->getMyEntity2()); + self::assertEquals('Foo', $e->getMyEntity2()->getValue()); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2090Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2090Test.php index 174fee2b288..78a13af1287 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2090Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2090Test.php @@ -75,10 +75,10 @@ public function testIssue() $e1 = $this->_em->find(CompanyEmployee::class, $employee1->getId()); $e2 = $this->_em->find(CompanyEmployee::class, $employee2->getId()); - $this->assertEquals(101, $e1->getSalary()); - $this->assertEquals(102, $e2->getSalary()); - $this->assertEquals($date1, $e1->getStartDate()); - $this->assertEquals($date2, $e2->getStartDate()); + self::assertEquals(101, $e1->getSalary()); + self::assertEquals(102, $e2->getSalary()); + self::assertEquals($date1, $e1->getStartDate()); + self::assertEquals($date2, $e2->getStartDate()); $this->_em->createQueryBuilder() ->update(CompanyEmployee::class, 'e') @@ -106,9 +106,9 @@ public function testIssue() $e1 = $this->_em->find(CompanyEmployee::class, $employee1->getId()); $e2 = $this->_em->find(CompanyEmployee::class, $employee2->getId()); - $this->assertEquals(101, $e1->getSalary()); - $this->assertEquals(102, $e2->getSalary()); - $this->assertEquals($date1, $e1->getStartDate()); - $this->assertEquals($date2, $e2->getStartDate()); + self::assertEquals(101, $e1->getSalary()); + self::assertEquals(102, $e2->getSalary()); + self::assertEquals($date1, $e1->getStartDate()); + self::assertEquals($date2, $e2->getStartDate()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC211Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC211Test.php index 9ac27f3cf94..d2bd2c11636 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC211Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC211Test.php @@ -42,7 +42,7 @@ public function testIssue() } } - $this->assertEquals(4, $user->getGroups()->count()); + self::assertEquals(4, $user->getGroups()->count()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php index 960395e9c70..653452a8bc3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php @@ -25,22 +25,22 @@ public function testForeignKeyOnSTIWithMultipleMapping() ]; $schema = $schemaTool->getSchemaFromMetadata($classes); - $this->assertTrue($schema->hasTable('users_followed_objects'), "Table users_followed_objects should exist."); + self::assertTrue($schema->hasTable('users_followed_objects'), "Table users_followed_objects should exist."); /* @var $table \Doctrine\DBAL\Schema\Table */ $table = ($schema->getTable('users_followed_objects')); - $this->assertTrue($table->columnsAreIndexed(['object_id'])); - $this->assertTrue($table->columnsAreIndexed(['user_id'])); + self::assertTrue($table->columnsAreIndexed(['object_id'])); + self::assertTrue($table->columnsAreIndexed(['user_id'])); $foreignKeys = $table->getForeignKeys(); - $this->assertCount(1, $foreignKeys, 'user_id column has to have FK, but not object_id'); + self::assertCount(1, $foreignKeys, 'user_id column has to have FK, but not object_id'); /* @var $fk \Doctrine\DBAL\Schema\ForeignKeyConstraint */ $fk = reset($foreignKeys); - $this->assertEquals('users', $fk->getForeignTableName()); + self::assertEquals('users', $fk->getForeignTableName()); $localColumns = $fk->getLocalColumns(); - $this->assertContains('user_id', $localColumns); - $this->assertCount(1, $localColumns); + self::assertContains('user_id', $localColumns); + self::assertCount(1, $localColumns); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2175Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2175Test.php index d6b3c603b8f..3b393ff55ba 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2175Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2175Test.php @@ -25,17 +25,17 @@ public function testIssue() $this->_em->persist($entity); $this->_em->flush(); - $this->assertEquals(1, $entity->version); + self::assertEquals(1, $entity->version); $entity->field = "bar"; $this->_em->flush(); - $this->assertEquals(2, $entity->version); + self::assertEquals(2, $entity->version); $entity->field = "baz"; $this->_em->flush(); - $this->assertEquals(3, $entity->version); + self::assertEquals(3, $entity->version); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2182Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2182Test.php index 590b7cd5f58..28699679eab 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2182Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2182Test.php @@ -17,9 +17,9 @@ public function testPassColumnOptionsToJoinColumns() ] ); - $this->assertEquals("CREATE TABLE DDC2182OptionParent (id INT UNSIGNED NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[0]); - $this->assertEquals("CREATE TABLE DDC2182OptionChild (id VARCHAR(255) NOT NULL, parent_id INT UNSIGNED DEFAULT NULL, INDEX IDX_B314D4AD727ACA70 (parent_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[1]); - $this->assertEquals("ALTER TABLE DDC2182OptionChild ADD CONSTRAINT FK_B314D4AD727ACA70 FOREIGN KEY (parent_id) REFERENCES DDC2182OptionParent (id)", $sql[2]); + self::assertEquals("CREATE TABLE DDC2182OptionParent (id INT UNSIGNED NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[0]); + self::assertEquals("CREATE TABLE DDC2182OptionChild (id VARCHAR(255) NOT NULL, parent_id INT UNSIGNED DEFAULT NULL, INDEX IDX_B314D4AD727ACA70 (parent_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[1]); + self::assertEquals("ALTER TABLE DDC2182OptionChild ADD CONSTRAINT FK_B314D4AD727ACA70 FOREIGN KEY (parent_id) REFERENCES DDC2182OptionParent (id)", $sql[2]); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2214Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2214Test.php index 87101fff1da..2c8e6966749 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2214Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2214Test.php @@ -51,7 +51,7 @@ public function testIssue() $query = end($logger->queries); - $this->assertEquals(\Doctrine\DBAL\Connection::PARAM_INT_ARRAY, $query['types'][0]); + self::assertEquals(\Doctrine\DBAL\Connection::PARAM_INT_ARRAY, $query['types'][0]); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2224Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2224Test.php index 3529fa35640..e92130141c2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2224Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2224Test.php @@ -24,7 +24,7 @@ public function testIssue() $query->setQueryCacheDriver(new ArrayCache()); $query->setParameter('field', 'test', 'DDC2224Type'); - $this->assertStringEndsWith('.field = FUNCTION(?)', $query->getSQL()); + self::assertStringEndsWith('.field = FUNCTION(?)', $query->getSQL()); return $query; } @@ -35,7 +35,7 @@ public function testIssue() public function testCacheMissWhenTypeChanges(Query $query) { $query->setParameter('field', 'test', 'string'); - $this->assertStringEndsWith('.field = ?', $query->getSQL()); + self::assertStringEndsWith('.field = ?', $query->getSQL()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php index 4ced4df4dc7..d02c79a1c38 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php @@ -46,8 +46,8 @@ public function testNotifyTrackingNotCalledOnUninitializedProxies() /* @var $address Proxy */ $address = $mergedUser->address; - $this->assertInstanceOf(Proxy::class, $address); - $this->assertFalse($address->__isInitialized()); + self::assertInstanceOf(Proxy::class, $address); + self::assertFalse($address->__isInitialized()); } public function testNotifyTrackingCalledOnProxyInitialization() @@ -61,12 +61,12 @@ public function testNotifyTrackingCalledOnProxyInitialization() $addressProxy = $this->_em->getReference(DDC2230Address::class, $insertedAddress->id); /* @var $addressProxy Proxy|\Doctrine\Tests\ORM\Functional\Ticket\DDC2230Address */ - $this->assertFalse($addressProxy->__isInitialized()); - $this->assertNull($addressProxy->listener); + self::assertFalse($addressProxy->__isInitialized()); + self::assertNull($addressProxy->listener); $addressProxy->__load(); - $this->assertSame($this->_em->getUnitOfWork(), $addressProxy->listener); + self::assertSame($this->_em->getUnitOfWork(), $addressProxy->listener); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php index 6bfd8d823d0..620601bcd6a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php @@ -33,13 +33,13 @@ public function testInjectObjectManagerInProxyIfInitializedInUow() $y1ref = $this->_em->getReference(get_class($y1), $y1->id); - $this->assertInstanceOf(Proxy::class, $y1ref); - $this->assertFalse($y1ref->__isInitialized__); + self::assertInstanceOf(Proxy::class, $y1ref); + self::assertFalse($y1ref->__isInitialized__); $id = $y1ref->doSomething(); - $this->assertTrue($y1ref->__isInitialized__); - $this->assertEquals($this->_em, $y1ref->om); + self::assertTrue($y1ref->__isInitialized__); + self::assertEquals($this->_em, $y1ref->om); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2252Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2252Test.php index e4b60196622..1e732f6eeae 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2252Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2252Test.php @@ -65,8 +65,8 @@ public function testIssue() $membership = $this->_em->find(DDC2252Membership::class, $identifier); - $this->assertInstanceOf(DDC2252Membership::class, $membership); - $this->assertCount(3, $membership->getPrivileges()); + self::assertInstanceOf(DDC2252Membership::class, $membership); + self::assertCount(3, $membership->getPrivileges()); $membership->getPrivileges()->remove(2); $this->_em->persist($membership); @@ -75,8 +75,8 @@ public function testIssue() $membership = $this->_em->find(DDC2252Membership::class, $identifier); - $this->assertInstanceOf(DDC2252Membership::class, $membership); - $this->assertCount(2, $membership->getPrivileges()); + self::assertInstanceOf(DDC2252Membership::class, $membership); + self::assertCount(2, $membership->getPrivileges()); $membership->getPrivileges()->clear(); $this->_em->persist($membership); @@ -85,8 +85,8 @@ public function testIssue() $membership = $this->_em->find(DDC2252Membership::class, $identifier); - $this->assertInstanceOf(DDC2252Membership::class, $membership); - $this->assertCount(0, $membership->getPrivileges()); + self::assertInstanceOf(DDC2252Membership::class, $membership); + self::assertCount(0, $membership->getPrivileges()); $membership->addPrivilege($privilege3 = new DDC2252Privilege); $this->_em->persist($privilege3); @@ -96,8 +96,8 @@ public function testIssue() $membership = $this->_em->find(DDC2252Membership::class, $identifier); - $this->assertInstanceOf(DDC2252Membership::class, $membership); - $this->assertCount(1, $membership->getPrivileges()); + self::assertInstanceOf(DDC2252Membership::class, $membership); + self::assertCount(1, $membership->getPrivileges()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2306Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2306Test.php index 24807db029a..2bf7141d1a9 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2306Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2306Test.php @@ -60,16 +60,16 @@ public function testIssue() /* @var $user DDC2306User|Proxy */ $user = $address->users->first()->user; - $this->assertInstanceOf(Proxy::class, $user); - $this->assertInstanceOf(DDC2306User::class, $user); + self::assertInstanceOf(Proxy::class, $user); + self::assertInstanceOf(DDC2306User::class, $user); $userId = $user->id; - $this->assertNotNull($userId); + self::assertNotNull($userId); $user->__load(); - $this->assertEquals( + self::assertEquals( $userId, $user->id, 'As of DDC-1734, the identifier is NULL for un-managed proxies. The identifier should be an integer here' diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2346Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2346Test.php index a1cac08eaf3..722b51a4dec 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2346Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2346Test.php @@ -62,8 +62,8 @@ public function testIssue() $fetchedBazs = $this->_em->getRepository(DDC2346Baz::class)->findAll(); - $this->assertCount(2, $fetchedBazs); - $this->assertCount(2, $this->logger->queries, 'The total number of executed queries is 2, and not n+1'); + self::assertCount(2, $fetchedBazs); + self::assertCount(2, $this->logger->queries, 'The total number of executed queries is 2, and not n+1'); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2350Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2350Test.php index 1d3a4117ad0..3b612bdaa48 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2350Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2350Test.php @@ -40,11 +40,11 @@ public function testEagerCollectionsAreOnlyRetrievedOnce() $cnt = $this->getCurrentQueryCount(); $user = $this->_em->find(DDC2350User::class, $user->id); - $this->assertEquals($cnt + 1, $this->getCurrentQueryCount()); + self::assertEquals($cnt + 1, $this->getCurrentQueryCount()); - $this->assertEquals(2, count($user->reportedBugs)); + self::assertEquals(2, count($user->reportedBugs)); - $this->assertEquals($cnt + 1, $this->getCurrentQueryCount()); + self::assertEquals($cnt + 1, $this->getCurrentQueryCount()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php index 21a932ed36d..9c2d2e2b1f1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php @@ -54,7 +54,7 @@ public function testIssue() $metadataFactory->setEntityManager($entityManager); - $this->assertSame($mockMetadata, $metadataFactory->getMetadataFor(DDC2359Foo::class)); + self::assertSame($mockMetadata, $metadataFactory->getMetadataFor(DDC2359Foo::class)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php index eac219c7280..5d3ea60a84d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php @@ -39,26 +39,26 @@ public function testUninitializedProxyIsInitializedOnFetchJoin() $this->_em->clear(); $x2 = $this->_em->find(get_class($x), $x->id); // proxy injected for Y - $this->assertInstanceOf(Proxy::class, $x2->y); - $this->assertFalse($x2->y->__isInitialized__); + self::assertInstanceOf(Proxy::class, $x2->y); + self::assertFalse($x2->y->__isInitialized__); // proxy for Y is in identity map $z2 = $this->_em->createQuery('select z,y from ' . get_class($z) . ' z join z.y y where z.id = ?1') ->setParameter(1, $z->id) ->getSingleResult(); - $this->assertInstanceOf(Proxy::class, $z2->y); - $this->assertTrue($z2->y->__isInitialized__); - $this->assertEquals('Y', $z2->y->data); - $this->assertEquals($y->id, $z2->y->id); + self::assertInstanceOf(Proxy::class, $z2->y); + self::assertTrue($z2->y->__isInitialized__); + self::assertEquals('Y', $z2->y->data); + self::assertEquals($y->id, $z2->y->id); // since the Y is the same, the instance from the identity map is // used, even if it is a proxy. - $this->assertNotSame($x, $x2); - $this->assertNotSame($z, $z2); - $this->assertSame($z2->y, $x2->y); - $this->assertInstanceOf(Proxy::class, $z2->y); + self::assertNotSame($x, $x2); + self::assertNotSame($z, $z2); + self::assertSame($z2->y, $x2->y); + self::assertInstanceOf(Proxy::class, $z2->y); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php index 2ba39e73cc5..d21ec16b781 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php @@ -24,7 +24,7 @@ public function testCompositeAssociationKeyDetection() $metadata = $this->convertToClassMetadata([$product, $attributes], []); - $this->assertEquals(ClassMetadata::GENERATOR_TYPE_NONE, $metadata['Ddc2387Attributes']->generatorType); - $this->assertEquals(ClassMetadata::GENERATOR_TYPE_AUTO, $metadata['Ddc2387Product']->generatorType); + self::assertEquals(ClassMetadata::GENERATOR_TYPE_NONE, $metadata['Ddc2387Attributes']->generatorType); + self::assertEquals(ClassMetadata::GENERATOR_TYPE_AUTO, $metadata['Ddc2387Product']->generatorType); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2409Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2409Test.php index 94d39b99446..cee4859a679 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2409Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2409Test.php @@ -48,10 +48,10 @@ public function testIssue() $article->setAuthor($user); - $this->assertEquals(UnitOfWork::STATE_DETACHED, $uow->getEntityState($originalArticle)); - $this->assertEquals(UnitOfWork::STATE_DETACHED, $uow->getEntityState($originalUser)); - $this->assertEquals(UnitOfWork::STATE_MANAGED, $uow->getEntityState($article)); - $this->assertEquals(UnitOfWork::STATE_NEW, $uow->getEntityState($user)); + self::assertEquals(UnitOfWork::STATE_DETACHED, $uow->getEntityState($originalArticle)); + self::assertEquals(UnitOfWork::STATE_DETACHED, $uow->getEntityState($originalUser)); + self::assertEquals(UnitOfWork::STATE_MANAGED, $uow->getEntityState($article)); + self::assertEquals(UnitOfWork::STATE_NEW, $uow->getEntityState($user)); $em->detach($user); $em->detach($article); @@ -59,14 +59,14 @@ public function testIssue() $userMerged = $em->merge($user); $articleMerged = $em->merge($article); - $this->assertEquals(UnitOfWork::STATE_NEW, $uow->getEntityState($user)); - $this->assertEquals(UnitOfWork::STATE_DETACHED, $uow->getEntityState($article)); - $this->assertEquals(UnitOfWork::STATE_MANAGED, $uow->getEntityState($userMerged)); - $this->assertEquals(UnitOfWork::STATE_MANAGED, $uow->getEntityState($articleMerged)); + self::assertEquals(UnitOfWork::STATE_NEW, $uow->getEntityState($user)); + self::assertEquals(UnitOfWork::STATE_DETACHED, $uow->getEntityState($article)); + self::assertEquals(UnitOfWork::STATE_MANAGED, $uow->getEntityState($userMerged)); + self::assertEquals(UnitOfWork::STATE_MANAGED, $uow->getEntityState($articleMerged)); - $this->assertNotSame($user, $userMerged); - $this->assertNotSame($article, $articleMerged); - $this->assertNotSame($userMerged, $articleMerged->user); - $this->assertSame($user, $articleMerged->user); + self::assertNotSame($user, $userMerged); + self::assertNotSame($article, $articleMerged); + self::assertNotSame($userMerged, $articleMerged->user); + self::assertSame($user, $articleMerged->user); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php index 8372b95e136..f1f06959b42 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php @@ -31,9 +31,9 @@ public function testTicket() $parentMetadata = $this->_em->getClassMetadata(DDC2415ParentEntity::class); $childMetadata = $this->_em->getClassMetadata(DDC2415ChildEntity::class); - $this->assertEquals($parentMetadata->generatorType, $childMetadata->generatorType); - $this->assertEquals($parentMetadata->customGeneratorDefinition, $childMetadata->customGeneratorDefinition); - $this->assertEquals(DDC2415Generator::class, $parentMetadata->customGeneratorDefinition['class']); + self::assertEquals($parentMetadata->generatorType, $childMetadata->generatorType); + self::assertEquals($parentMetadata->customGeneratorDefinition, $childMetadata->customGeneratorDefinition); + self::assertEquals(DDC2415Generator::class, $parentMetadata->customGeneratorDefinition['class']); $e1 = new DDC2415ChildEntity("ChildEntity 1"); $e2 = new DDC2415ChildEntity("ChildEntity 2"); @@ -43,8 +43,8 @@ public function testTicket() $this->_em->flush(); $this->_em->clear(); - $this->assertEquals(md5($e1->getName()), $e1->getId()); - $this->assertEquals(md5($e2->getName()), $e2->getId()); + self::assertEquals(md5($e1->getName()), $e1->getId()); + self::assertEquals(md5($e2->getName()), $e2->getId()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2494Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2494Test.php index 4aa30e95046..f2e2267434d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2494Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2494Test.php @@ -40,33 +40,33 @@ public function testIssue() $this->_em->flush(); $this->_em->close(); - $this->assertArrayHasKey('convertToDatabaseValue', DDC2494TinyIntType::$calls); - $this->assertCount(3, DDC2494TinyIntType::$calls['convertToDatabaseValue']); + self::assertArrayHasKey('convertToDatabaseValue', DDC2494TinyIntType::$calls); + self::assertCount(3, DDC2494TinyIntType::$calls['convertToDatabaseValue']); $item = $this->_em->find(DDC2494Campaign::class, $campaign->getId()); - $this->assertInstanceOf(DDC2494Campaign::class, $item); - $this->assertInstanceOf(DDC2494Currency::class, $item->getCurrency()); + self::assertInstanceOf(DDC2494Campaign::class, $item); + self::assertInstanceOf(DDC2494Currency::class, $item->getCurrency()); $queryCount = $this->getCurrentQueryCount(); - $this->assertInstanceOf('\Doctrine\Common\Proxy\Proxy', $item->getCurrency()); - $this->assertFalse($item->getCurrency()->__isInitialized()); + self::assertInstanceOf('\Doctrine\Common\Proxy\Proxy', $item->getCurrency()); + self::assertFalse($item->getCurrency()->__isInitialized()); - $this->assertArrayHasKey('convertToPHPValue', DDC2494TinyIntType::$calls); - $this->assertCount(1, DDC2494TinyIntType::$calls['convertToPHPValue']); + self::assertArrayHasKey('convertToPHPValue', DDC2494TinyIntType::$calls); + self::assertCount(1, DDC2494TinyIntType::$calls['convertToPHPValue']); - $this->assertInternalType('integer', $item->getCurrency()->getId()); - $this->assertCount(1, DDC2494TinyIntType::$calls['convertToPHPValue']); - $this->assertFalse($item->getCurrency()->__isInitialized()); + self::assertInternalType('integer', $item->getCurrency()->getId()); + self::assertCount(1, DDC2494TinyIntType::$calls['convertToPHPValue']); + self::assertFalse($item->getCurrency()->__isInitialized()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertInternalType('integer', $item->getCurrency()->getTemp()); - $this->assertCount(3, DDC2494TinyIntType::$calls['convertToPHPValue']); - $this->assertTrue($item->getCurrency()->__isInitialized()); + self::assertInternalType('integer', $item->getCurrency()->getTemp()); + self::assertCount(3, DDC2494TinyIntType::$calls['convertToPHPValue']); + self::assertTrue($item->getCurrency()->__isInitialized()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2519Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2519Test.php index cc12d044dc0..36fc4918056 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2519Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2519Test.php @@ -29,29 +29,29 @@ public function testIssue() $dql = 'SELECT PARTIAL l.{_source, _target} FROM Doctrine\Tests\Models\Legacy\LegacyUserReference l'; $result = $this->_em->createQuery($dql)->getResult(); - $this->assertCount(2, $result); - $this->assertInstanceOf(LegacyUserReference::class, $result[0]); - $this->assertInstanceOf(LegacyUserReference::class, $result[1]); - - $this->assertInstanceOf(LegacyUser::class, $result[0]->source()); - $this->assertInstanceOf(LegacyUser::class, $result[0]->target()); - $this->assertInstanceOf(LegacyUser::class, $result[1]->source()); - $this->assertInstanceOf(LegacyUser::class, $result[1]->target()); - - $this->assertInstanceOf(Proxy::class, $result[0]->source()); - $this->assertInstanceOf(Proxy::class, $result[0]->target()); - $this->assertInstanceOf(Proxy::class, $result[1]->source()); - $this->assertInstanceOf(Proxy::class, $result[1]->target()); - - $this->assertFalse($result[0]->target()->__isInitialized()); - $this->assertFalse($result[0]->source()->__isInitialized()); - $this->assertFalse($result[1]->target()->__isInitialized()); - $this->assertFalse($result[1]->source()->__isInitialized()); - - $this->assertNotNull($result[0]->source()->getId()); - $this->assertNotNull($result[0]->target()->getId()); - $this->assertNotNull($result[1]->source()->getId()); - $this->assertNotNull($result[1]->target()->getId()); + self::assertCount(2, $result); + self::assertInstanceOf(LegacyUserReference::class, $result[0]); + self::assertInstanceOf(LegacyUserReference::class, $result[1]); + + self::assertInstanceOf(LegacyUser::class, $result[0]->source()); + self::assertInstanceOf(LegacyUser::class, $result[0]->target()); + self::assertInstanceOf(LegacyUser::class, $result[1]->source()); + self::assertInstanceOf(LegacyUser::class, $result[1]->target()); + + self::assertInstanceOf(Proxy::class, $result[0]->source()); + self::assertInstanceOf(Proxy::class, $result[0]->target()); + self::assertInstanceOf(Proxy::class, $result[1]->source()); + self::assertInstanceOf(Proxy::class, $result[1]->target()); + + self::assertFalse($result[0]->target()->__isInitialized()); + self::assertFalse($result[0]->source()->__isInitialized()); + self::assertFalse($result[1]->target()->__isInitialized()); + self::assertFalse($result[1]->source()->__isInitialized()); + + self::assertNotNull($result[0]->source()->getId()); + self::assertNotNull($result[0]->target()->getId()); + self::assertNotNull($result[1]->source()->getId()); + self::assertNotNull($result[1]->target()->getId()); } public function loadFixture() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2575Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2575Test.php index e3652e55c04..b464cb392a7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2575Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2575Test.php @@ -64,23 +64,23 @@ public function testHydrationIssue() $query = $qb->getQuery(); $result = $query->getResult(); - $this->assertCount(2, $result); + self::assertCount(2, $result); $row = $result[0]; - $this->assertNotNull($row->aRelation); - $this->assertEquals(1, $row->id); - $this->assertNotNull($row->aRelation->rootRelation); - $this->assertSame($row, $row->aRelation->rootRelation); - $this->assertNotNull($row->aRelation->bRelation); - $this->assertEquals(2, $row->aRelation->bRelation->id); + self::assertNotNull($row->aRelation); + self::assertEquals(1, $row->id); + self::assertNotNull($row->aRelation->rootRelation); + self::assertSame($row, $row->aRelation->rootRelation); + self::assertNotNull($row->aRelation->bRelation); + self::assertEquals(2, $row->aRelation->bRelation->id); $row = $result[1]; - $this->assertNotNull($row->aRelation); - $this->assertEquals(3, $row->id); - $this->assertNotNull($row->aRelation->rootRelation); - $this->assertSame($row, $row->aRelation->rootRelation); - $this->assertNotNull($row->aRelation->bRelation); - $this->assertEquals(4, $row->aRelation->bRelation->id); + self::assertNotNull($row->aRelation); + self::assertEquals(3, $row->id); + self::assertNotNull($row->aRelation->rootRelation); + self::assertSame($row, $row->aRelation->rootRelation); + self::assertNotNull($row->aRelation->bRelation); + self::assertEquals(4, $row->aRelation->bRelation->id); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2579Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2579Test.php index e7ba77759f4..df17406457e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2579Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2579Test.php @@ -50,15 +50,15 @@ public function testIssue() $criteria = ['assoc' => $assoc, 'id' => $id]; $entity = $repository->findOneBy($criteria); - $this->assertInstanceOf(DDC2579Entity::class, $entity); - $this->assertEquals($value, $entity->value); + self::assertInstanceOf(DDC2579Entity::class, $entity); + self::assertEquals($value, $entity->value); $this->_em->remove($entity); $this->_em->flush(); $this->_em->clear(); - $this->assertNull($repository->findOneBy($criteria)); - $this->assertCount(0, $repository->findAll()); + self::assertNull($repository->findOneBy($criteria)); + self::assertCount(0, $repository->findAll()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC258Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC258Test.php index fb7ce673e3e..1cfb340fd2e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC258Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC258Test.php @@ -47,25 +47,25 @@ public function testIssue() $e2 = $this->_em->find(DDC258Super::class, $c2->id); - $this->assertInstanceOf(DDC258Class2::class, $e2); - $this->assertEquals('Bar', $e2->title); - $this->assertEquals('Bar', $e2->description); - $this->assertEquals('Bar', $e2->text); + self::assertInstanceOf(DDC258Class2::class, $e2); + self::assertEquals('Bar', $e2->title); + self::assertEquals('Bar', $e2->description); + self::assertEquals('Bar', $e2->text); $all = $this->_em->getRepository(DDC258Super::class)->findAll(); foreach ($all as $obj) { if ($obj instanceof DDC258Class1) { - $this->assertEquals('Foo', $obj->title); - $this->assertEquals('Foo', $obj->description); + self::assertEquals('Foo', $obj->title); + self::assertEquals('Foo', $obj->description); } else if ($obj instanceof DDC258Class2) { - $this->assertTrue($e2 === $obj); - $this->assertEquals('Bar', $obj->title); - $this->assertEquals('Bar', $obj->description); - $this->assertEquals('Bar', $obj->text); + self::assertTrue($e2 === $obj); + self::assertEquals('Bar', $obj->title); + self::assertEquals('Bar', $obj->description); + self::assertEquals('Bar', $obj->text); } else if ($obj instanceof DDC258Class3) { - $this->assertEquals('Baz', $obj->apples); - $this->assertEquals('Baz', $obj->bananas); + self::assertEquals('Baz', $obj->apples); + self::assertEquals('Baz', $obj->bananas); } else { $this->fail('Instance of DDC258Class1, DDC258Class2 or DDC258Class3 expected.'); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2645Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2645Test.php index d6a77f7db37..088930cb487 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2645Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2645Test.php @@ -20,8 +20,8 @@ public function testIssue() $foo3 = $this->_em->merge($foo2); - $this->assertSame($foo, $foo3); - $this->assertEquals('Bar', $foo->name); + self::assertSame($foo, $foo3); + self::assertEquals('Bar', $foo->name); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2655Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2655Test.php index 8a2dc166a84..715e26d5276 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2655Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2655Test.php @@ -18,6 +18,6 @@ public function setUp() public function testSingleScalarOneOrNullResult() { $query = $this->_em->createQuery("SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = 'happy_doctrine_user'"); - $this->assertNull($query->getOneOrNullResult(Query::HYDRATE_SINGLE_SCALAR)); + self::assertNull($query->getOneOrNullResult(Query::HYDRATE_SINGLE_SCALAR)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2660Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2660Test.php index 46380f754b2..6e4373ff8d1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2660Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2660Test.php @@ -54,11 +54,11 @@ public function testIssueWithExtraColumn() $query = $this->_em->createNativeQuery($sql, $rsm); $result = $query->getResult(); - $this->assertCount(5, $result); + self::assertCount(5, $result); foreach ($result as $order) { - $this->assertNotNull($order); - $this->assertInstanceOf(DDC2660CustomerOrder::class, $order); + self::assertNotNull($order); + self::assertInstanceOf(DDC2660CustomerOrder::class, $order); } } @@ -72,11 +72,11 @@ public function testIssueWithoutExtraColumn() $query = $this->_em->createNativeQuery($sql, $rsm); $result = $query->getResult(); - $this->assertCount(5, $result); + self::assertCount(5, $result); foreach ($result as $order) { - $this->assertNotNull($order); - $this->assertInstanceOf(DDC2660CustomerOrder::class, $order); + self::assertNotNull($order); + self::assertInstanceOf(DDC2660CustomerOrder::class, $order); } } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2759Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2759Test.php index 10d3e68ae91..357a8ed3c28 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2759Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2759Test.php @@ -61,7 +61,7 @@ public function testCorrectNumberOfAssociationsIsReturned() $result = $builder->getQuery() ->getArrayResult(); - $this->assertCount(2, $result[0]['metadata']['metadataCategories']); + self::assertCount(2, $result[0]['metadata']['metadataCategories']); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2790Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2790Test.php index ee2668931c0..907a7e081e0 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2790Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2790Test.php @@ -51,7 +51,7 @@ public function testIssue() $qb->from(get_class($entity), 'c'); $qb->select("count(c)"); $count = intval($qb->getQuery()->getSingleScalarResult()); - $this->assertEquals($initial, $count); + self::assertEquals($initial, $count); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC279Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC279Test.php index f09e2e68ccd..5e67be72574 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC279Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC279Test.php @@ -50,10 +50,10 @@ public function testDDC279() $expected1 = 'Y'; $expected2 = 'Z'; - $this->assertEquals(1, count($result)); + self::assertEquals(1, count($result)); - $this->assertEquals($expected1, $result[0]->y->data); - $this->assertEquals($expected2, $result[0]->y->z->data); + self::assertEquals($expected1, $result[0]->y->data); + self::assertEquals($expected2, $result[0]->y->z->data); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php index 7aeba002a0a..5107f0b716c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php @@ -41,8 +41,8 @@ public function testClassSchemaMappingsValidity($className, $expectedSchemaName, $quotedTableName = $this->_em->getConfiguration()->getQuoteStrategy()->getTableName($classMetadata, $platform); // Check if table name and schema properties are defined in the class metadata - $this->assertEquals($expectedTableName, $classMetadata->table['name']); - $this->assertEquals($expectedSchemaName, $classMetadata->table['schema']); + self::assertEquals($expectedTableName, $classMetadata->table['name']); + self::assertEquals($expectedSchemaName, $classMetadata->table['schema']); if ($this->_em->getConnection()->getDatabasePlatform()->supportsSchemas()) { $fullTableName = sprintf('%s.%s', $expectedSchemaName, $expectedTableName); @@ -50,10 +50,10 @@ public function testClassSchemaMappingsValidity($className, $expectedSchemaName, $fullTableName = sprintf('%s__%s', $expectedSchemaName, $expectedTableName); } - $this->assertEquals($fullTableName, $quotedTableName); + self::assertEquals($fullTableName, $quotedTableName); // Checks sequence name validity - $this->assertEquals( + self::assertEquals( $fullTableName . '_' . $classMetadata->getSingleIdentifierColumnName() . '_seq', $classMetadata->getSequenceName($platform) ); @@ -76,7 +76,7 @@ public function testPersistenceOfEntityWithSchemaMapping($className) $this->_em->flush(); $this->_em->clear(); - $this->assertCount(1, $this->_em->getRepository($className)->findAll()); + self::assertCount(1, $this->_em->getRepository($className)->findAll()); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2862Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2862Test.php index c4b2fb227bf..726df35ec1c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2862Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2862Test.php @@ -36,32 +36,32 @@ public function testIssue() $this->_em->flush(); $this->_em->clear(); - $this->assertTrue($this->_em->getCache()->containsEntity(DDC2862User::class, ['id' => $user1->getId()])); - $this->assertTrue($this->_em->getCache()->containsEntity(DDC2862Driver::class, ['id' => $driver1->getId()])); + self::assertTrue($this->_em->getCache()->containsEntity(DDC2862User::class, ['id' => $user1->getId()])); + self::assertTrue($this->_em->getCache()->containsEntity(DDC2862Driver::class, ['id' => $driver1->getId()])); $queryCount = $this->getCurrentQueryCount(); $driver2 = $this->_em->find(DDC2862Driver::class, $driver1->getId()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertInstanceOf(DDC2862Driver::class, $driver2); - $this->assertInstanceOf(DDC2862User::class, $driver2->getUserProfile()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertInstanceOf(DDC2862Driver::class, $driver2); + self::assertInstanceOf(DDC2862User::class, $driver2->getUserProfile()); $driver2->setName('Franta'); $this->_em->flush(); $this->_em->clear(); - $this->assertTrue($this->_em->getCache()->containsEntity(DDC2862User::class, ['id' => $user1->getId()])); - $this->assertTrue($this->_em->getCache()->containsEntity(DDC2862Driver::class, ['id' => $driver1->getId()])); + self::assertTrue($this->_em->getCache()->containsEntity(DDC2862User::class, ['id' => $user1->getId()])); + self::assertTrue($this->_em->getCache()->containsEntity(DDC2862Driver::class, ['id' => $driver1->getId()])); $queryCount = $this->getCurrentQueryCount(); $driver3 = $this->_em->find(DDC2862Driver::class, $driver1->getId()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertInstanceOf(DDC2862Driver::class, $driver3); - $this->assertInstanceOf(DDC2862User::class, $driver3->getUserProfile()); - $this->assertEquals('Franta', $driver3->getName()); - $this->assertEquals('Foo', $driver3->getUserProfile()->getName()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertInstanceOf(DDC2862Driver::class, $driver3); + self::assertInstanceOf(DDC2862User::class, $driver3->getUserProfile()); + self::assertEquals('Franta', $driver3->getName()); + self::assertEquals('Foo', $driver3->getUserProfile()->getName()); } public function testIssueReopened() @@ -77,38 +77,38 @@ public function testIssueReopened() $this->_em->getCache()->evictEntityRegion(DDC2862User::class); $this->_em->getCache()->evictEntityRegion(DDC2862Driver::class); - $this->assertFalse($this->_em->getCache()->containsEntity(DDC2862User::class, ['id' => $user1->getId()])); - $this->assertFalse($this->_em->getCache()->containsEntity(DDC2862Driver::class, ['id' => $driver1->getId()])); + self::assertFalse($this->_em->getCache()->containsEntity(DDC2862User::class, ['id' => $user1->getId()])); + self::assertFalse($this->_em->getCache()->containsEntity(DDC2862Driver::class, ['id' => $driver1->getId()])); $queryCount = $this->getCurrentQueryCount(); $driver2 = $this->_em->find(DDC2862Driver::class, $driver1->getId()); - $this->assertInstanceOf(DDC2862Driver::class, $driver2); - $this->assertInstanceOf(DDC2862User::class, $driver2->getUserProfile()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertInstanceOf(DDC2862Driver::class, $driver2); + self::assertInstanceOf(DDC2862User::class, $driver2->getUserProfile()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); $this->_em->clear(); - $this->assertFalse($this->_em->getCache()->containsEntity(DDC2862User::class, ['id' => $user1->getId()])); - $this->assertTrue($this->_em->getCache()->containsEntity(DDC2862Driver::class, ['id' => $driver1->getId()])); + self::assertFalse($this->_em->getCache()->containsEntity(DDC2862User::class, ['id' => $user1->getId()])); + self::assertTrue($this->_em->getCache()->containsEntity(DDC2862Driver::class, ['id' => $driver1->getId()])); $queryCount = $this->getCurrentQueryCount(); $driver3 = $this->_em->find(DDC2862Driver::class, $driver1->getId()); - $this->assertInstanceOf(DDC2862Driver::class, $driver3); - $this->assertInstanceOf(DDC2862User::class, $driver3->getUserProfile()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertEquals('Foo', $driver3->getUserProfile()->getName()); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertInstanceOf(DDC2862Driver::class, $driver3); + self::assertInstanceOf(DDC2862User::class, $driver3->getUserProfile()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals('Foo', $driver3->getUserProfile()->getName()); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); $queryCount = $this->getCurrentQueryCount(); $driver4 = $this->_em->find(DDC2862Driver::class, $driver1->getId()); - $this->assertInstanceOf(DDC2862Driver::class, $driver4); - $this->assertInstanceOf(DDC2862User::class, $driver4->getUserProfile()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->assertEquals('Foo', $driver4->getUserProfile()->getName()); - $this->assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertInstanceOf(DDC2862Driver::class, $driver4); + self::assertInstanceOf(DDC2862User::class, $driver4->getUserProfile()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); + self::assertEquals('Foo', $driver4->getUserProfile()->getName()); + self::assertEquals($queryCount, $this->getCurrentQueryCount()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2895Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2895Test.php index 397c7acd380..20f1f5ba993 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2895Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2895Test.php @@ -27,7 +27,7 @@ public function testPostLoadOneToManyInheritance() { $cm = $this->_em->getClassMetadata(DDC2895::class); - $this->assertEquals( + self::assertEquals( [ "prePersist" => ["setLastModifiedPreUpdate"], "preUpdate" => ["setLastModifiedPreUpdate"], @@ -44,7 +44,7 @@ public function testPostLoadOneToManyInheritance() /** @var DDC2895 $ddc2895 */ $ddc2895 = $this->_em->find(get_class($ddc2895), $ddc2895->id); - $this->assertNotNull($ddc2895->getLastModified()); + self::assertNotNull($ddc2895->getLastModified()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2931Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2931Test.php index 927856a1c6e..97b6798c815 100755 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2931Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2931Test.php @@ -42,7 +42,7 @@ public function testIssue() $second = $this->_em->find(DDC2931User::class, $second->id); - $this->assertSame(2, $second->getRank()); + self::assertSame(2, $second->getRank()); } public function testFetchJoinedEntitiesCanBeRefreshed() @@ -78,10 +78,10 @@ public function testFetchJoinedEntitiesCanBeRefreshed() ->setHint(Query::HINT_REFRESH, true) ->getResult(); - $this->assertCount(1, $refreshedSecond); - $this->assertSame(1, $first->value); - $this->assertSame(2, $second->value); - $this->assertSame(3, $third->value); + self::assertCount(1, $refreshedSecond); + self::assertSame(1, $first->value); + self::assertSame(2, $second->value); + self::assertSame(3, $third->value); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2943Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2943Test.php index 553bc98f528..2feb78c65d7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2943Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2943Test.php @@ -40,12 +40,12 @@ public function testIssue() ->setFirstResult(0) ->setMaxResults(2); - $this->assertPaginatorQueryPut(new Paginator(clone $query), $region->getName(), 4, 2); + self::assertPaginatorQueryPut(new Paginator(clone $query), $region->getName(), 4, 2); $this->_em->clear(); $this->secondLevelCacheLogger->clearStats(); - $this->assertPaginatorQueryHit(new Paginator(clone $query), $region->getName(), 4, 2); + self::assertPaginatorQueryHit(new Paginator(clone $query), $region->getName(), 4, 2); } public function testIssueNonFetchJoin() @@ -59,33 +59,33 @@ public function testIssueNonFetchJoin() ->setFirstResult(0) ->setMaxResults(2); - $this->assertPaginatorQueryPut(new Paginator(clone $query, false), $region->getName(), 4, 2); + self::assertPaginatorQueryPut(new Paginator(clone $query, false), $region->getName(), 4, 2); $this->_em->clear(); $this->secondLevelCacheLogger->clearStats(); - $this->assertPaginatorQueryHit(new Paginator(clone $query, false), $region->getName(), 4, 2); + self::assertPaginatorQueryHit(new Paginator(clone $query, false), $region->getName(), 4, 2); } public function assertPaginatorQueryPut(Paginator $paginator, $regionName, $count, $pageSize) { - $this->assertCount($count, $paginator); - $this->assertCount($pageSize, $paginator->getIterator()); + self::assertCount($count, $paginator); + self::assertCount($pageSize, $paginator->getIterator()); - $this->assertEquals(0, $this->secondLevelCacheLogger->getRegionHitCount(Cache::DEFAULT_QUERY_REGION_NAME)); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount(Cache::DEFAULT_QUERY_REGION_NAME)); - $this->assertEquals(0, $this->secondLevelCacheLogger->getRegionHitCount($regionName)); - $this->assertEquals($count, $this->secondLevelCacheLogger->getRegionPutCount($regionName)); + self::assertEquals(0, $this->secondLevelCacheLogger->getRegionHitCount(Cache::DEFAULT_QUERY_REGION_NAME)); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount(Cache::DEFAULT_QUERY_REGION_NAME)); + self::assertEquals(0, $this->secondLevelCacheLogger->getRegionHitCount($regionName)); + self::assertEquals($count, $this->secondLevelCacheLogger->getRegionPutCount($regionName)); } public function assertPaginatorQueryHit(Paginator $paginator, $regionName, $count, $pageSize) { - $this->assertCount($count, $paginator); - $this->assertCount($pageSize, $paginator->getIterator()); + self::assertCount($count, $paginator); + self::assertCount($pageSize, $paginator->getIterator()); - $this->assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount(Cache::DEFAULT_QUERY_REGION_NAME)); - $this->assertEquals(0, $this->secondLevelCacheLogger->getRegionPutCount(Cache::DEFAULT_QUERY_REGION_NAME)); - $this->assertEquals($pageSize, $this->secondLevelCacheLogger->getRegionHitCount($regionName)); - $this->assertEquals(0, $this->secondLevelCacheLogger->getRegionPutCount($regionName)); + self::assertEquals(1, $this->secondLevelCacheLogger->getRegionHitCount(Cache::DEFAULT_QUERY_REGION_NAME)); + self::assertEquals(0, $this->secondLevelCacheLogger->getRegionPutCount(Cache::DEFAULT_QUERY_REGION_NAME)); + self::assertEquals($pageSize, $this->secondLevelCacheLogger->getRegionHitCount($regionName)); + self::assertEquals(0, $this->secondLevelCacheLogger->getRegionPutCount($regionName)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2984Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2984Test.php index 69f4d01c0c5..0724b493e39 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2984Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2984Test.php @@ -47,15 +47,15 @@ public function testIssue() $sameUser = $repository->find(new DDC2984DomainUserId('unique_id_within_a_vo')); //Until know, everything works as expected - $this->assertTrue($user->sameIdentityAs($sameUser)); + self::assertTrue($user->sameIdentityAs($sameUser)); $this->_em->clear(); //After clearing the identity map, the UnitOfWork produces the warning described in DDC-2984 $equalUser = $repository->find(new DDC2984DomainUserId('unique_id_within_a_vo')); - $this->assertNotSame($user, $equalUser); - $this->assertTrue($user->sameIdentityAs($equalUser)); + self::assertNotSame($user, $equalUser); + self::assertTrue($user->sameIdentityAs($equalUser)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2996Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2996Test.php index 4a2436330f0..ab996486301 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2996Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2996Test.php @@ -27,12 +27,12 @@ public function testIssue() $pref->value = "bar"; $this->_em->flush(); - $this->assertEquals(1, $pref->user->counter); + self::assertEquals(1, $pref->user->counter); $this->_em->clear(); $pref = $this->_em->find(DDC2996UserPreference::class, $pref->id); - $this->assertEquals(1, $pref->user->counter); + self::assertEquals(1, $pref->user->counter); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3033Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3033Test.php index b25686dce10..0f926258280 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3033Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3033Test.php @@ -47,7 +47,7 @@ public function testIssue() ], ]; - $this->assertEquals($expect, $product->changeSet); + self::assertEquals($expect, $product->changeSet); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3042Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3042Test.php index 940989bb713..000a10b466a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3042Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3042Test.php @@ -23,7 +23,7 @@ protected function setUp() public function testSQLGenerationDoesNotProvokeAliasCollisions() { - $this->assertStringNotMatchesFormat( + self::assertStringNotMatchesFormat( '%sfield11%sfield11%s', $this ->_em diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3068Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3068Test.php index 90a3f3ed80e..fc4d7c8b7ba 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3068Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3068Test.php @@ -46,7 +46,7 @@ public function testFindUsingAnArrayOfObjectAsPrimaryKey() ] ); - $this->assertInstanceOf(Ride::class, $ride1); + self::assertInstanceOf(Ride::class, $ride1); $ride2 = $this->_em->find(Ride::class, [ 'driver' => $this->foo, @@ -54,7 +54,7 @@ public function testFindUsingAnArrayOfObjectAsPrimaryKey() ] ); - $this->assertInstanceOf(Ride::class, $ride2); - $this->assertSame($ride1, $ride2); + self::assertInstanceOf(Ride::class, $ride2); + self::assertSame($ride1, $ride2); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC309Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC309Test.php index 15454b48269..dae25dfdec8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC309Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC309Test.php @@ -34,18 +34,18 @@ public function testTwoIterateHydrations() $q = $this->_em->createQuery('SELECT c FROM Doctrine\Tests\ORM\Functional\Ticket\DDC309Country c')->iterate(); $c = $q->next(); - $this->assertEquals(1, $c[0]->id); + self::assertEquals(1, $c[0]->id); $r = $this->_em->createQuery('SELECT u FROM Doctrine\Tests\ORM\Functional\Ticket\DDC309User u')->iterate(); $u = $r->next(); // This line breaks - $this->assertEquals(1, $u[0]->id); + self::assertEquals(1, $u[0]->id); $c = $q->next(); $u = $r->next(); - $this->assertEquals(2, $c[0]->id); - $this->assertEquals(2, $u[0]->id); + self::assertEquals(2, $c[0]->id); + self::assertEquals(2, $u[0]->id); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php index 5d8d09fb7ad..251bb86519a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php @@ -18,12 +18,12 @@ public function testIssue() $this->createAnnotationDriver()->loadMetadataForClass(DDC3103ArticleId::class, $classMetadata); - $this->assertTrue( + self::assertTrue( $classMetadata->isEmbeddedClass, 'The isEmbeddedClass property should be true from the mapping data.' ); - $this->assertTrue( + self::assertTrue( unserialize(serialize($classMetadata))->isEmbeddedClass, 'The isEmbeddedClass property should still be true after serialization and unserialization.' ); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3160Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3160Test.php index c0ed69dd0e4..3869ed718d8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3160Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3160Test.php @@ -37,9 +37,9 @@ public function testNoUpdateOnInsert() $this->_em->refresh($user); - $this->assertEquals('romanc', $user->username); - $this->assertEquals(1, $listener->inserts); - $this->assertEquals(0, $listener->updates); + self::assertEquals('romanc', $user->username); + self::assertEquals(1, $listener->inserts); + self::assertEquals(0, $listener->updates); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3192Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3192Test.php index 1262bce4521..31b1e012c1f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3192Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3192Test.php @@ -50,7 +50,7 @@ public function testIssue() $resultByPersister = $this->_em->find(DDC3192Transaction::class, $transaction->id); // This works: DDC2494 makes persister set type mapping info to ResultSetMapping - $this->assertEquals('BYR', $resultByPersister->currency->code); + self::assertEquals('BYR', $resultByPersister->currency->code); $this->_em->close(); @@ -62,7 +62,7 @@ public function testIssue() // This is fixed here: before the fix it used to return 974. // because unlike the BasicEntityPersister, SQLWalker doesn't set type info - $this->assertEquals('BYR', $resultByQuery->currency->code); + self::assertEquals('BYR', $resultByQuery->currency->code); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3223Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3223Test.php index 0f98adca1fa..95687602a7e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3223Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3223Test.php @@ -41,7 +41,7 @@ public function testIssueGetId() $profileStatus = clone $participant->profileStatus; - $this->assertSame(1, $profileStatus->getId(), 'The identifier on the cloned instance is an integer'); + self::assertSame(1, $profileStatus->getId(), 'The identifier on the cloned instance is an integer'); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3300Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3300Test.php index 17de7d217e1..273431ce423 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3300Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3300Test.php @@ -42,8 +42,8 @@ public function testResolveTargetEntitiesChangesDiscriminatorMapValues() $this->_em->flush(); $this->_em->clear(); - $this->assertEquals($boss, $this->_em->find(DDC3300BossInterface::class, $boss->id)); - $this->assertEquals($employee, $this->_em->find(DDC3300EmployeeInterface::class, $employee->id)); + self::assertEquals($boss, $this->_em->find(DDC3300BossInterface::class, $boss->id)); + self::assertEquals($employee, $this->_em->find(DDC3300EmployeeInterface::class, $employee->id)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC331Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC331Test.php index 5ec8ad730ae..12be0c236a2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC331Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC331Test.php @@ -20,7 +20,7 @@ protected function setUp() { public function testSelectFieldOnRootEntity() { $q = $this->_em->createQuery('SELECT e.name FROM Doctrine\Tests\Models\Company\CompanyEmployee e'); - $this->assertEquals( + self::assertEquals( strtolower('SELECT c0_.name AS name_0 FROM company_employees c1_ INNER JOIN company_persons c0_ ON c1_.id = c0_.id LEFT JOIN company_managers c2_ ON c1_.id = c2_.id'), strtolower($q->getSQL()) ); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3330Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3330Test.php index a03c3172cfd..6414febd122 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3330Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3330Test.php @@ -42,7 +42,7 @@ public function testIssueCollectionOrderWithPaginator() $paginator = new Paginator($query, true); - $this->assertEquals(3, count(iterator_to_array($paginator)), 'Count is not correct for pagination'); + self::assertEquals(3, count(iterator_to_array($paginator)), 'Count is not correct for pagination'); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3346Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3346Test.php index 3865767604e..786b438010d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3346Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3346Test.php @@ -26,7 +26,7 @@ public function testFindOneWithEagerFetchWillNotHydrateLimitedCollection() ['username' => 'bwoogy'] ); - $this->assertCount(2, $author->articles); + self::assertCount(2, $author->articles); } public function testFindLimitedWithEagerFetchWillNotHydrateLimitedCollection() @@ -38,8 +38,8 @@ public function testFindLimitedWithEagerFetchWillNotHydrateLimitedCollection() 1 ); - $this->assertCount(1, $authors); - $this->assertCount(2, $authors[0]->articles); + self::assertCount(1, $authors); + self::assertCount(2, $authors[0]->articles); } public function testFindWithEagerFetchAndOffsetWillNotHydrateLimitedCollection() @@ -52,8 +52,8 @@ public function testFindWithEagerFetchAndOffsetWillNotHydrateLimitedCollection() 0 // using an explicitly defined offset ); - $this->assertCount(1, $authors); - $this->assertCount(2, $authors[0]->articles); + self::assertCount(1, $authors); + self::assertCount(2, $authors[0]->articles); } private function loadAuthorFixture() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC345Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC345Test.php index 20b4236c304..168055f7cda 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC345Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC345Test.php @@ -46,9 +46,9 @@ public function testTwoIterateHydrations() $this->_em->flush(); - $this->assertEquals(1, $membership->prePersistCallCount); - $this->assertEquals(0, $membership->preUpdateCallCount); - $this->assertInstanceOf('DateTime', $membership->updated); + self::assertEquals(1, $membership->prePersistCallCount); + self::assertEquals(0, $membership->preUpdateCallCount); + self::assertInstanceOf('DateTime', $membership->updated); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php index dcb782bd4f8..caabe1856e2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php @@ -32,13 +32,13 @@ public function testWorkingCase() $em->clear(); $fileId = $file->getFileId(); - $this->assertTrue($fileId > 0); + self::assertTrue($fileId > 0); $file = $em->getReference(DDC353File::class, $fileId); - $this->assertEquals(UnitOfWork::STATE_MANAGED, $em->getUnitOfWork()->getEntityState($file), "Reference Proxy should be marked MANAGED."); + self::assertEquals(UnitOfWork::STATE_MANAGED, $em->getUnitOfWork()->getEntityState($file), "Reference Proxy should be marked MANAGED."); $picture = $em->find(DDC353Picture::class, $picture->getPictureId()); - $this->assertEquals(UnitOfWork::STATE_MANAGED, $em->getUnitOfWork()->getEntityState($picture->getFile()), "Lazy Proxy should be marked MANAGED."); + self::assertEquals(UnitOfWork::STATE_MANAGED, $em->getUnitOfWork()->getEntityState($picture->getFile()), "Lazy Proxy should be marked MANAGED."); $em->remove($picture); $em->flush(); @@ -59,10 +59,10 @@ public function testFailingCase() $fileId = $file->getFileId(); $pictureId = $picture->getPictureId(); - $this->assertTrue($fileId > 0); + self::assertTrue($fileId > 0); $picture = $em->find(DDC353Picture::class, $pictureId); - $this->assertEquals(UnitOfWork::STATE_MANAGED, $em->getUnitOfWork()->getEntityState($picture->getFile()), "Lazy Proxy should be marked MANAGED."); + self::assertEquals(UnitOfWork::STATE_MANAGED, $em->getUnitOfWork()->getEntityState($picture->getFile()), "Lazy Proxy should be marked MANAGED."); $em->remove($picture); $em->flush(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3582Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3582Test.php index 17b4bed85e4..74e09eb5a2a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3582Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3582Test.php @@ -14,9 +14,9 @@ function testNestedEmbeddablesAreHydratedWithProperClass() /** @var DDC3582Entity $entity */ $entity = $this->_em->find(DDC3582Entity::class, 'foo'); - $this->assertInstanceOf(DDC3582Embeddable1::class, $entity->embeddable1); - $this->assertInstanceOf(DDC3582Embeddable2::class, $entity->embeddable1->embeddable2); - $this->assertInstanceOf(DDC3582Embeddable3::class, $entity->embeddable1->embeddable2->embeddable3); + self::assertInstanceOf(DDC3582Embeddable1::class, $entity->embeddable1); + self::assertInstanceOf(DDC3582Embeddable2::class, $entity->embeddable1->embeddable2); + self::assertInstanceOf(DDC3582Embeddable3::class, $entity->embeddable1->embeddable2->embeddable3); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3597Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3597Test.php index 6d59fd6f70c..32c5e87bb2c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3597Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3597Test.php @@ -39,7 +39,7 @@ public function testSaveImageEntity() { //request entity $imageEntity = $this->_em->find(DDC3597Image::class, $imageEntity->getId()); - $this->assertInstanceOf(DDC3597Image::class, $imageEntity); + self::assertInstanceOf(DDC3597Image::class, $imageEntity); //cleanup $this->_em->remove($imageEntity); @@ -48,6 +48,6 @@ public function testSaveImageEntity() { //check delete $imageEntity = $this->_em->find(DDC3597Image::class, $imageEntity->getId()); - $this->assertNull($imageEntity); + self::assertNull($imageEntity); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php index 022d22b0a5a..00b7275366b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php @@ -48,7 +48,7 @@ public function testSavesVeryLargeIntegerAutoGeneratedValue() $entityManager->persist($entity); $entityManager->flush(); - $this->assertSame($veryLargeId, $entity->id); + self::assertSame($veryLargeId, $entity->id); } public function testSavesIntegerAutoGeneratedValueAsString() @@ -58,7 +58,7 @@ public function testSavesIntegerAutoGeneratedValueAsString() $this->_em->persist($entity); $this->_em->flush(); - $this->assertInternalType('string', $entity->id); + self::assertInternalType('string', $entity->id); } public function testSavesIntegerAutoGeneratedValueAsStringWithJoinedInheritance() @@ -68,7 +68,7 @@ public function testSavesIntegerAutoGeneratedValueAsStringWithJoinedInheritance( $this->_em->persist($entity); $this->_em->flush(); - $this->assertInternalType('string', $entity->id); + self::assertInternalType('string', $entity->id); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3644Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3644Test.php index 968c44d721b..bfee95f2149 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3644Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3644Test.php @@ -69,13 +69,13 @@ public function testIssueWithRegularEntity() // We should only have 1 item in the collection list now $user = $this->_em->find(DDC3644User::class, $userId); - $this->assertCount(1, $user->addresses); + self::assertCount(1, $user->addresses); // We should only have 1 item in the addresses table too $repository = $this->_em->getRepository(DDC3644Address::class); $addresses = $repository->findAll(); - $this->assertCount(1, $addresses); + self::assertCount(1, $addresses); } /** @@ -119,13 +119,13 @@ public function testIssueWithJoinedEntity() // We should only have 1 item in the collection list now $user = $this->_em->find(DDC3644User::class, $userId); - $this->assertCount(1, $user->pets); + self::assertCount(1, $user->pets); // We should only have 1 item in the pets table too $repository = $this->_em->getRepository(DDC3644Pet::class); $pets = $repository->findAll(); - $this->assertCount(1, $pets); + self::assertCount(1, $pets); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3699Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3699Test.php index fd284e5b11d..61237055a0e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3699Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3699Test.php @@ -55,8 +55,8 @@ public function testMergingParentClassFieldsDoesNotStopMergingScalarFieldsForToO /* @var $mergedChild DDC3699Child */ $mergedChild = $this->_em->merge($unManagedChild); - $this->assertSame($mergedChild->childField, 'modifiedChildValue'); - $this->assertSame($mergedChild->parentField, 'modifiedParentValue'); + self::assertSame($mergedChild->childField, 'modifiedChildValue'); + self::assertSame($mergedChild->parentField, 'modifiedParentValue'); } /** @@ -96,7 +96,7 @@ public function testMergingParentClassFieldsDoesNotStopMergingScalarFieldsForToM /* @var $mergedChild DDC3699Child */ $mergedChild = $this->_em->merge($unmanagedChild); - $this->assertSame($mergedChild->childField, 'modifiedChildValue'); - $this->assertSame($mergedChild->parentField, 'modifiedParentValue'); + self::assertSame($mergedChild->childField, 'modifiedChildValue'); + self::assertSame($mergedChild->parentField, 'modifiedParentValue'); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3711Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3711Test.php index cf29be50939..c72edd1401c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3711Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3711Test.php @@ -20,10 +20,10 @@ public function testCompositeKeyForJoinTableInManyToManyCreation() $factory = new \Doctrine\ORM\Mapping\ClassMetadataFactory(); $factory->setEntityManager($em); - $entityA = new ClassMetadata(DDC3711EntityA::class); - $entityA = $factory->getMetadataFor(DDC3711EntityA::class); + $metadataA = new ClassMetadata(DDC3711EntityA::class); + $entityA = $factory->getMetadataFor(DDC3711EntityA::class); - $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']); + self::assertEquals(['link_a_id1' => "id1", 'link_a_id2' => "id2"], $entityA->associationMappings['entityB']['relationToSourceKeyColumns']); + self::assertEquals(['link_b_id1' => "id1", 'link_b_id2' => "id2"], $entityA->associationMappings['entityB']['relationToTargetKeyColumns']); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC371Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC371Test.php index 3fe5c4b80d3..3e8e791f755 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC371Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC371Test.php @@ -44,10 +44,10 @@ public function testIssue() ->setHint(Query::HINT_REFRESH, true) ->getResult(); - $this->assertEquals(1, count($children)); - $this->assertNotInstanceOf(Proxy::class, $children[0]->parent); - $this->assertFalse($children[0]->parent->children->isInitialized()); - $this->assertEquals(0, $children[0]->parent->children->unwrap()->count()); + self::assertEquals(1, count($children)); + self::assertNotInstanceOf(Proxy::class, $children[0]->parent); + self::assertFalse($children[0]->parent->children->isInitialized()); + self::assertEquals(0, $children[0]->parent->children->unwrap()->count()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC381Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC381Test.php index bbfd6974e21..753409deff5 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC381Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC381Test.php @@ -36,7 +36,7 @@ public function testCallUnserializedProxyMethods() $data = serialize($entity); $entity = unserialize($data); - $this->assertEquals($persistedId, $entity->getId()); + self::assertEquals($persistedId, $entity->getId()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3967Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3967Test.php index 72a9cfe168a..87627bc92ba 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3967Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3967Test.php @@ -30,6 +30,6 @@ public function testIdentifierCachedWithProperType() $country = $this->_em->find(Country::class, "$id"); // Identifier type should be integer - $this->assertSame($country->getId(), $id); + self::assertSame($country->getId(), $id); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC4003Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC4003Test.php index 6764bc9bf75..d879a6f673f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC4003Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC4003Test.php @@ -56,6 +56,6 @@ public function test_reads_through_repository_same_data_that_it_wrote_in_cache() */ $cached = $repository->findOneBy(['id' => $id]); - $this->assertEquals($newName, $cached->getName()); + self::assertEquals($newName, $cached->getName()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC422Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC422Test.php index 6ace5e74943..04c0a7efa33 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC422Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC422Test.php @@ -31,15 +31,15 @@ public function testIssue() $customer = $this->_em->find(get_class($customer), $customer->id); - $this->assertInstanceOf(PersistentCollection::class, $customer->contacts); - $this->assertFalse($customer->contacts->isInitialized()); + self::assertInstanceOf(PersistentCollection::class, $customer->contacts); + self::assertFalse($customer->contacts->isInitialized()); $contact = new DDC422Contact; $customer->contacts->add($contact); - $this->assertTrue($customer->contacts->isDirty()); - $this->assertFalse($customer->contacts->isInitialized()); + self::assertTrue($customer->contacts->isDirty()); + self::assertFalse($customer->contacts->isInitialized()); $this->_em->flush(); - $this->assertEquals(1, $this->_em->getConnection()->fetchColumn("select count(*) from ddc422_customers_contacts")); + self::assertEquals(1, $this->_em->getConnection()->fetchColumn("select count(*) from ddc422_customers_contacts")); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC425Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC425Test.php index 8d91119a200..aae40be39bb 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC425Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC425Test.php @@ -25,7 +25,7 @@ public function testIssue() $num = $this->_em->createQuery('DELETE '.__NAMESPACE__.'\DDC425Entity e WHERE e.someDatetimeField > ?1') ->setParameter(1, new DateTime, Type::DATETIME) ->getResult(); - $this->assertEquals(0, $num); + self::assertEquals(0, $num); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC440Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC440Test.php index 30d2ca6b9cd..ebf4c93a883 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC440Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC440Test.php @@ -67,15 +67,15 @@ public function testOriginalEntityDataEmptyWhenProxyLoadedFromTwoAssociations() // Test the first phone. The assertion actually failed because original entity data is not set properly. // This was because it is also set as MainPhone and that one is created as a proxy, not the // original object when the find on Client is called. However loading proxies did not work correctly. - $this->assertInstanceOf(DDC440Phone::class, $p1); + self::assertInstanceOf(DDC440Phone::class, $p1); $originalData = $uw->getOriginalEntityData($p1); - $this->assertEquals($phone->getNumber(), $originalData['number']); + self::assertEquals($phone->getNumber(), $originalData['number']); //If you comment out previous test, this one should pass - $this->assertInstanceOf(DDC440Phone::class, $p2); + self::assertInstanceOf(DDC440Phone::class, $p2); $originalData = $uw->getOriginalEntityData($p2); - $this->assertEquals($phone2->getNumber(), $originalData['number']); + self::assertEquals($phone2->getNumber(), $originalData['number']); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC444Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC444Test.php index 41d7e1270ec..2ee9faaccd9 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC444Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC444Test.php @@ -28,7 +28,7 @@ public function testExplicitPolicy() $q = $this->_em->createQuery("SELECT u FROM $classname u"); $u = $q->getSingleResult(); - $this->assertEquals("Initial value", $u->name); + self::assertEquals("Initial value", $u->name); $u->name = "Modified value"; @@ -40,7 +40,7 @@ public function testExplicitPolicy() $u = $this->_em->createQuery("SELECT u FROM $classname u"); $u = $q->getSingleResult(); - $this->assertEquals("Initial value", $u->name); + self::assertEquals("Initial value", $u->name); $u->name = "Modified value"; @@ -51,7 +51,7 @@ public function testExplicitPolicy() $q = $this->_em->createQuery("SELECT u FROM $classname u"); $u = $q->getSingleResult(); - $this->assertEquals("Modified value", $u->name); + self::assertEquals("Modified value", $u->name); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC448Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC448Test.php index 31e03e33732..acf239b6ec8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC448Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC448Test.php @@ -21,7 +21,7 @@ protected function setUp() public function testIssue() { $q = $this->_em->createQuery("select b from ".__NAMESPACE__."\\DDC448SubTable b where b.connectedClassId = ?1"); - $this->assertEquals( + self::assertEquals( strtolower('SELECT d0_.id AS id_0, d0_.discr AS discr_1, d0_.connectedClassId AS connectedClassId_2 FROM SubTable s1_ INNER JOIN DDC448MainTable d0_ ON s1_.id = d0_.id WHERE d0_.connectedClassId = ?'), strtolower($q->getSQL()) ); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC493Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC493Test.php index 536a8b49b52..102ae55a113 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC493Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC493Test.php @@ -19,7 +19,7 @@ protected function setUp() public function testIssue() { $q = $this->_em->createQuery("select u, c.data from ".__NAMESPACE__."\\DDC493Distributor u JOIN u.contact c"); - $this->assertEquals( + self::assertEquals( strtolower('SELECT d0_.id AS id_0, d1_.data AS data_1, d0_.discr AS discr_2, d0_.contact AS contact_3 FROM DDC493Distributor d2_ INNER JOIN DDC493Customer d0_ ON d2_.id = d0_.id INNER JOIN DDC493Contact d1_ ON d0_.contact = d1_.id'), strtolower($q->getSQL()) ); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC501Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC501Test.php index 5b2996aab2f..a7040741424 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC501Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC501Test.php @@ -31,55 +31,55 @@ public function testMergeUnitializedManyToManyAndOneToManyCollections() $user = $this->createAndPersistUser(); $this->_em->flush(); - $this->assertTrue($this->_em->contains($user)); + self::assertTrue($this->_em->contains($user)); $this->_em->clear(); - $this->assertFalse($this->_em->contains($user)); + self::assertFalse($this->_em->contains($user)); unset($user); // Reload User from DB *without* any associations (i.e. an uninitialized PersistantCollection) $userReloaded = $this->loadUserFromEntityManager(); - $this->assertTrue($this->_em->contains($userReloaded)); + self::assertTrue($this->_em->contains($userReloaded)); $this->_em->clear(); - $this->assertFalse($this->_em->contains($userReloaded)); + self::assertFalse($this->_em->contains($userReloaded)); // freeze and unfreeze $userClone = unserialize(serialize($userReloaded)); - $this->assertInstanceOf(CmsUser::class, $userClone); + self::assertInstanceOf(CmsUser::class, $userClone); // detached user can't know about his phonenumbers - $this->assertEquals(0, count($userClone->getPhonenumbers())); - $this->assertFalse($userClone->getPhonenumbers()->isInitialized(), "User::phonenumbers should not be marked initialized."); + self::assertEquals(0, count($userClone->getPhonenumbers())); + self::assertFalse($userClone->getPhonenumbers()->isInitialized(), "User::phonenumbers should not be marked initialized."); // detached user can't know about his groups either - $this->assertEquals(0, count($userClone->getGroups())); - $this->assertFalse($userClone->getGroups()->isInitialized(), "User::groups should not be marked initialized."); + self::assertEquals(0, count($userClone->getGroups())); + self::assertFalse($userClone->getGroups()->isInitialized(), "User::groups should not be marked initialized."); // Merge back and flush $userClone = $this->_em->merge($userClone); // Back in managed world I would expect to have my phonenumbers back but they aren't! // Remember I didn't touch (and probably didn't need) them at all while in detached mode. - $this->assertEquals(4, count($userClone->getPhonenumbers()), 'Phonenumbers are not available anymore'); + self::assertEquals(4, count($userClone->getPhonenumbers()), 'Phonenumbers are not available anymore'); // This works fine as long as cmUser::groups doesn't cascade "merge" - $this->assertEquals(2, count($userClone->getGroups())); + self::assertEquals(2, count($userClone->getGroups())); $this->_em->flush(); $this->_em->clear(); - $this->assertFalse($this->_em->contains($userClone)); + self::assertFalse($this->_em->contains($userClone)); // Reload user from DB $userFromEntityManager = $this->loadUserFromEntityManager(); //Strange: Now the phonenumbers are back again - $this->assertEquals(4, count($userFromEntityManager->getPhonenumbers())); + self::assertEquals(4, count($userFromEntityManager->getPhonenumbers())); // 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())); + self::assertEquals(2, count($userClone->getGroups())); } protected function createAndPersistUser() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC512Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC512Test.php index 6f3c3cfb01b..b1af3bd9981 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC512Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC512Test.php @@ -34,16 +34,16 @@ public function testIssue() $q = $this->_em->createQuery("select u,i from ".__NAMESPACE__."\\DDC512Customer u left join u.item i"); $result = $q->getResult(); - $this->assertEquals(2, count($result)); - $this->assertInstanceOf(DDC512Customer::class, $result[0]); - $this->assertInstanceOf(DDC512Customer::class, $result[1]); + self::assertEquals(2, count($result)); + self::assertInstanceOf(DDC512Customer::class, $result[0]); + self::assertInstanceOf(DDC512Customer::class, $result[1]); if ($result[0]->id == $customer1->id) { - $this->assertInstanceOf(DDC512OfferItem::class, $result[0]->item); - $this->assertEquals($item->id, $result[0]->item->id); - $this->assertNull($result[1]->item); + self::assertInstanceOf(DDC512OfferItem::class, $result[0]->item); + self::assertEquals($item->id, $result[0]->item->id); + self::assertNull($result[1]->item); } else { - $this->assertInstanceOf(DDC512OfferItem::class, $result[1]->item); - $this->assertNull($result[0]->item); + self::assertInstanceOf(DDC512OfferItem::class, $result[1]->item); + self::assertNull($result[0]->item); } } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC513Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC513Test.php index 800c442a398..18bba4dc2e1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC513Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC513Test.php @@ -19,7 +19,7 @@ protected function setUp() public function testIssue() { $q = $this->_em->createQuery("select u from ".__NAMESPACE__."\\DDC513OfferItem u left join u.price p"); - $this->assertEquals( + self::assertEquals( strtolower('SELECT d0_.id AS id_0, d0_.discr AS discr_1, d0_.price AS price_2 FROM DDC513OfferItem d1_ INNER JOIN DDC513Item d0_ ON d1_.id = d0_.id LEFT JOIN DDC513Price d2_ ON d0_.price = d2_.id'), strtolower($q->getSQL()) ); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC518Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC518Test.php index 073bb335188..56174b80e0e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC518Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC518Test.php @@ -30,6 +30,6 @@ public function testMergeWithRelatedNew() $this->_em->persist($user); $managedArticle = $this->_em->merge($article); - $this->assertSame($article->user, $managedArticle->user); + self::assertSame($article->user, $managedArticle->user); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC522Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC522Test.php index dc6fa208179..bcde4d6ff2f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC522Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC522Test.php @@ -46,10 +46,10 @@ public function testJoinColumnWithSameNameAsAssociationField() $r = $this->_em->createQuery('select ca,c from ' . DDC522Cart::class . ' ca join ca.customer c') ->getResult(); - $this->assertInstanceOf(DDC522Cart::class, $r[0]); - $this->assertInstanceOf(DDC522Customer::class, $r[0]->customer); - $this->assertNotInstanceOf(Proxy::class, $r[0]->customer); - $this->assertEquals('name', $r[0]->customer->name); + self::assertInstanceOf(DDC522Cart::class, $r[0]); + self::assertInstanceOf(DDC522Customer::class, $r[0]->customer); + self::assertNotInstanceOf(Proxy::class, $r[0]->customer); + self::assertEquals('name', $r[0]->customer->name); $fkt = new DDC522ForeignKeyTest(); $fkt->cartId = $r[0]->id; // ignored for persistence @@ -59,9 +59,9 @@ public function testJoinColumnWithSameNameAsAssociationField() $this->_em->clear(); $fkt2 = $this->_em->find(get_class($fkt), $fkt->id); - $this->assertEquals($fkt->cart->id, $fkt2->cartId); - $this->assertInstanceOf(Proxy::class, $fkt2->cart); - $this->assertFalse($fkt2->cart->__isInitialized__); + self::assertEquals($fkt->cart->id, $fkt2->cartId); + self::assertInstanceOf(Proxy::class, $fkt2->cart); + self::assertFalse($fkt2->cart->__isInitialized__); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC531Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC531Test.php index 33d88c6be1f..0fe0f7b6e93 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC531Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC531Test.php @@ -31,12 +31,12 @@ public function testIssue() $item3 = $this->_em->find(DDC531Item::class, $item2->id); // Load child item first (id 2) // parent will already be loaded, cannot be lazy because it has mapped subclasses and we would not // know which proxy type to put in. - $this->assertInstanceOf(DDC531Item::class, $item3->parent); - $this->assertNotInstanceOf(Proxy::class, $item3->parent); + self::assertInstanceOf(DDC531Item::class, $item3->parent); + self::assertNotInstanceOf(Proxy::class, $item3->parent); $item4 = $this->_em->find(DDC531Item::class, $item1->id); // Load parent item (id 1) - $this->assertNull($item4->parent); - $this->assertNotNull($item4->getChildren()); - $this->assertTrue($item4->getChildren()->contains($item3)); // lazy-loads children + self::assertNull($item4->parent); + self::assertNotNull($item4->getChildren()); + self::assertTrue($item4->getChildren()->contains($item3)); // lazy-loads children } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php index 842ccdd1a73..f87bb88d369 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php @@ -36,9 +36,9 @@ public function testCascadeRemoveOnInheritanceHierarchy() $this->_em->remove($item); $this->_em->flush(); // Should not fail - $this->assertFalse($this->_em->contains($item)); + self::assertFalse($this->_em->contains($item)); $children = $item->getChildren(); - $this->assertFalse($this->_em->contains($children[0])); + self::assertFalse($this->_em->contains($children[0])); $this->_em->clear(); @@ -57,17 +57,17 @@ public function testCascadeRemoveOnInheritanceHierarchy() $this->_em->remove($item2); $this->_em->flush(); // should not fail - $this->assertFalse($this->_em->contains($item)); + self::assertFalse($this->_em->contains($item)); $children = $item->getChildren(); - $this->assertFalse($this->_em->contains($children[0])); + self::assertFalse($this->_em->contains($children[0])); } public function testCascadeRemoveOnChildren() { $class = $this->_em->getClassMetadata(DDC599Subitem::class); - $this->assertArrayHasKey('children', $class->associationMappings); - $this->assertTrue($class->associationMappings['children']['isCascadeRemove']); + self::assertArrayHasKey('children', $class->associationMappings); + self::assertTrue($class->associationMappings['children']['isCascadeRemove']); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC618Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC618Test.php index 5e359863e91..9954f18d621 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC618Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC618Test.php @@ -49,8 +49,8 @@ public function testIndexByHydrateObject() $joe = $this->_em->find(DDC618Author::class, 10); $alice = $this->_em->find(DDC618Author::class, 11); - $this->assertArrayHasKey('Joe', $result, "INDEX BY A.name should return an index by the name of 'Joe'."); - $this->assertArrayHasKey('Alice', $result, "INDEX BY A.name should return an index by the name of 'Alice'."); + self::assertArrayHasKey('Joe', $result, "INDEX BY A.name should return an index by the name of 'Joe'."); + self::assertArrayHasKey('Alice', $result, "INDEX BY A.name should return an index by the name of 'Alice'."); } public function testIndexByHydrateArray() @@ -61,8 +61,8 @@ public function testIndexByHydrateArray() $joe = $this->_em->find(DDC618Author::class, 10); $alice = $this->_em->find(DDC618Author::class, 11); - $this->assertArrayHasKey('Joe', $result, "INDEX BY A.name should return an index by the name of 'Joe'."); - $this->assertArrayHasKey('Alice', $result, "INDEX BY A.name should return an index by the name of 'Alice'."); + self::assertArrayHasKey('Joe', $result, "INDEX BY A.name should return an index by the name of 'Joe'."); + self::assertArrayHasKey('Alice', $result, "INDEX BY A.name should return an index by the name of 'Alice'."); } /** @@ -74,19 +74,19 @@ public function testIndexByJoin() 'INNER JOIN A.books B INDEX BY B.title ORDER BY A.name ASC'; $result = $this->_em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_OBJECT); - $this->assertEquals(3, count($result[0]->books)); // Alice, Joe doesn't appear because he has no books. - $this->assertEquals('Alice', $result[0]->name); - $this->assertTrue( isset($result[0]->books["In Wonderland"] ), "Indexing by title should have books by title."); - $this->assertTrue( isset($result[0]->books["Reloaded"] ), "Indexing by title should have books by title."); - $this->assertTrue( isset($result[0]->books["Test"] ), "Indexing by title should have books by title."); + self::assertEquals(3, count($result[0]->books)); // Alice, Joe doesn't appear because he has no books. + self::assertEquals('Alice', $result[0]->name); + self::assertTrue( isset($result[0]->books["In Wonderland"] ), "Indexing by title should have books by title."); + self::assertTrue( isset($result[0]->books["Reloaded"] ), "Indexing by title should have books by title."); + self::assertTrue( isset($result[0]->books["Test"] ), "Indexing by title should have books by title."); $result = $this->_em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY); - $this->assertEquals(3, count($result[0]['books'])); // Alice, Joe doesn't appear because he has no books. - $this->assertEquals('Alice', $result[0]['name']); - $this->assertTrue( isset($result[0]['books']["In Wonderland"] ), "Indexing by title should have books by title."); - $this->assertTrue( isset($result[0]['books']["Reloaded"] ), "Indexing by title should have books by title."); - $this->assertTrue( isset($result[0]['books']["Test"] ), "Indexing by title should have books by title."); + self::assertEquals(3, count($result[0]['books'])); // Alice, Joe doesn't appear because he has no books. + self::assertEquals('Alice', $result[0]['name']); + self::assertTrue( isset($result[0]['books']["In Wonderland"] ), "Indexing by title should have books by title."); + self::assertTrue( isset($result[0]['books']["Reloaded"] ), "Indexing by title should have books by title."); + self::assertTrue( isset($result[0]['books']["Test"] ), "Indexing by title should have books by title."); } /** @@ -98,14 +98,14 @@ public function testIndexByToOneJoinSilentlyIgnored() 'INNER JOIN B.author A INDEX BY A.name ORDER BY A.name ASC'; $result = $this->_em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_OBJECT); - $this->assertInstanceOf(DDC618Book::class, $result[0]); - $this->assertInstanceOf(DDC618Author::class, $result[0]->author); + self::assertInstanceOf(DDC618Book::class, $result[0]); + self::assertInstanceOf(DDC618Author::class, $result[0]->author); $dql = 'SELECT B, A FROM Doctrine\Tests\ORM\Functional\Ticket\DDC618Book B '. 'INNER JOIN B.author A INDEX BY A.name ORDER BY A.name ASC'; $result = $this->_em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY); - $this->assertEquals("Alice", $result[0]['author']['name']); + self::assertEquals("Alice", $result[0]['author']['name']); } /** @@ -117,13 +117,13 @@ public function testCombineIndexBy() 'INNER JOIN A.books B INDEX BY B.title ORDER BY A.name ASC'; $result = $this->_em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_OBJECT); - $this->assertArrayHasKey(11, $result); // Alice + self::assertArrayHasKey(11, $result); // Alice - $this->assertEquals(3, count($result[11]->books)); // Alice, Joe doesn't appear because he has no books. - $this->assertEquals('Alice', $result[11]->name); - $this->assertTrue( isset($result[11]->books["In Wonderland"] ), "Indexing by title should have books by title."); - $this->assertTrue( isset($result[11]->books["Reloaded"] ), "Indexing by title should have books by title."); - $this->assertTrue( isset($result[11]->books["Test"] ), "Indexing by title should have books by title."); + self::assertEquals(3, count($result[11]->books)); // Alice, Joe doesn't appear because he has no books. + self::assertEquals('Alice', $result[11]->name); + self::assertTrue( isset($result[11]->books["In Wonderland"] ), "Indexing by title should have books by title."); + self::assertTrue( isset($result[11]->books["Reloaded"] ), "Indexing by title should have books by title."); + self::assertTrue( isset($result[11]->books["Test"] ), "Indexing by title should have books by title."); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC633Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC633Test.php index 2ed53ed354f..426adb82eba 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC633Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC633Test.php @@ -41,8 +41,8 @@ public function testOneToOneEager() $eagerAppointment = $this->_em->find(DDC633Appointment::class, $app->id); // Eager loading of one to one leads to fetch-join - $this->assertNotInstanceOf(Proxy::class, $eagerAppointment->patient); - $this->assertTrue($this->_em->contains($eagerAppointment->patient)); + self::assertNotInstanceOf(Proxy::class, $eagerAppointment->patient); + self::assertTrue($this->_em->contains($eagerAppointment->patient)); } /** @@ -66,8 +66,8 @@ public function testDQLDeferredEagerLoad() $appointments = $this->_em->createQuery("SELECT a FROM " . __NAMESPACE__ . "\DDC633Appointment a")->getResult(); foreach ($appointments AS $eagerAppointment) { - $this->assertInstanceOf(Proxy::class, $eagerAppointment->patient); - $this->assertTrue($eagerAppointment->patient->__isInitialized__, "Proxy should already be initialized due to eager loading!"); + self::assertInstanceOf(Proxy::class, $eagerAppointment->patient); + self::assertTrue($eagerAppointment->patient->__isInitialized__, "Proxy should already be initialized due to eager loading!"); } } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC656Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC656Test.php index 1f94a3953a9..997d7909b19 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC656Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC656Test.php @@ -31,14 +31,14 @@ public function testRecomputeSingleEntityChangeSet_PreservesFieldOrder() $this->_em->getUnitOfWork()->recomputeSingleEntityChangeSet($this->_em->getClassMetadata(get_class($entity)), $entity); $data2 = $this->_em->getUnitOfWork()->getEntityChangeSet($entity); - $this->assertEquals(array_keys($data1), array_keys($data2)); + self::assertEquals(array_keys($data1), array_keys($data2)); $this->_em->flush(); $this->_em->clear(); $persistedEntity = $this->_em->find(get_class($entity), $entity->specificationId); - $this->assertEquals('type2', $persistedEntity->getType()); - $this->assertEquals('test1', $persistedEntity->getName()); + self::assertEquals('type2', $persistedEntity->getType()); + self::assertEquals('test1', $persistedEntity->getName()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC657Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC657Test.php index 759464a5f0e..9baee47c969 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC657Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC657Test.php @@ -22,11 +22,11 @@ public function testEntitySingleResult() $query = $this->_em->createQuery('SELECT d FROM ' . DateTimeModel::class . ' d'); $datetime = $query->setMaxResults(1)->getSingleResult(); - $this->assertInstanceOf(DateTimeModel::class, $datetime); + self::assertInstanceOf(DateTimeModel::class, $datetime); - $this->assertInstanceOf('DateTime', $datetime->datetime); - $this->assertInstanceOf('DateTime', $datetime->time); - $this->assertInstanceOf('DateTime', $datetime->date); + self::assertInstanceOf('DateTime', $datetime->datetime); + self::assertInstanceOf('DateTime', $datetime->time); + self::assertInstanceOf('DateTime', $datetime->date); } public function testScalarResult() @@ -34,15 +34,15 @@ public function testScalarResult() $query = $this->_em->createQuery('SELECT d.id, d.time, d.date, d.datetime FROM ' . DateTimeModel::class . ' d ORDER BY d.date ASC'); $result = $query->getScalarResult(); - $this->assertCount(2,$result); + self::assertCount(2,$result); - $this->assertContains('11:11:11', $result[0]['time']); - $this->assertContains('2010-01-01', $result[0]['date']); - $this->assertContains('2010-01-01 11:11:11', $result[0]['datetime']); + self::assertContains('11:11:11', $result[0]['time']); + self::assertContains('2010-01-01', $result[0]['date']); + self::assertContains('2010-01-01 11:11:11', $result[0]['datetime']); - $this->assertContains('12:12:12', $result[1]['time']); - $this->assertContains('2010-02-02', $result[1]['date']); - $this->assertContains('2010-02-02 12:12:12', $result[1]['datetime']); + self::assertContains('12:12:12', $result[1]['time']); + self::assertContains('2010-02-02', $result[1]['date']); + self::assertContains('2010-02-02 12:12:12', $result[1]['datetime']); } public function testaTicketEntityArrayResult() @@ -50,15 +50,15 @@ public function testaTicketEntityArrayResult() $query = $this->_em->createQuery('SELECT d FROM ' . DateTimeModel::class . ' d ORDER BY d.date ASC'); $result = $query->getArrayResult(); - $this->assertCount(2,$result); + self::assertCount(2,$result); - $this->assertInstanceOf('DateTime', $result[0]['datetime']); - $this->assertInstanceOf('DateTime', $result[0]['time']); - $this->assertInstanceOf('DateTime', $result[0]['date']); + self::assertInstanceOf('DateTime', $result[0]['datetime']); + self::assertInstanceOf('DateTime', $result[0]['time']); + self::assertInstanceOf('DateTime', $result[0]['date']); - $this->assertInstanceOf('DateTime', $result[1]['datetime']); - $this->assertInstanceOf('DateTime', $result[1]['time']); - $this->assertInstanceOf('DateTime', $result[1]['date']); + self::assertInstanceOf('DateTime', $result[1]['datetime']); + self::assertInstanceOf('DateTime', $result[1]['time']); + self::assertInstanceOf('DateTime', $result[1]['date']); } public function testTicketSingleResult() @@ -66,11 +66,11 @@ public function testTicketSingleResult() $query = $this->_em->createQuery('SELECT d.id, d.time, d.date, d.datetime FROM ' . DateTimeModel::class . ' d ORDER BY d.date ASC'); $datetime = $query->setMaxResults(1)->getSingleResult(); - $this->assertTrue(is_array($datetime)); + self::assertTrue(is_array($datetime)); - $this->assertInstanceOf('DateTime', $datetime['datetime']); - $this->assertInstanceOf('DateTime', $datetime['time']); - $this->assertInstanceOf('DateTime', $datetime['date']); + self::assertInstanceOf('DateTime', $datetime['datetime']); + self::assertInstanceOf('DateTime', $datetime['time']); + self::assertInstanceOf('DateTime', $datetime['date']); } public function testTicketResult() @@ -78,19 +78,19 @@ public function testTicketResult() $query = $this->_em->createQuery('SELECT d.id, d.time, d.date, d.datetime FROM ' . DateTimeModel::class . ' d ORDER BY d.date ASC'); $result = $query->getResult(); - $this->assertCount(2,$result); + self::assertCount(2,$result); - $this->assertInstanceOf('DateTime', $result[0]['time']); - $this->assertInstanceOf('DateTime', $result[0]['date']); - $this->assertInstanceOf('DateTime', $result[0]['datetime']); + self::assertInstanceOf('DateTime', $result[0]['time']); + self::assertInstanceOf('DateTime', $result[0]['date']); + self::assertInstanceOf('DateTime', $result[0]['datetime']); - $this->assertEquals('2010-01-01 11:11:11', $result[0]['datetime']->format('Y-m-d G:i:s')); + self::assertEquals('2010-01-01 11:11:11', $result[0]['datetime']->format('Y-m-d G:i:s')); - $this->assertInstanceOf('DateTime', $result[1]['time']); - $this->assertInstanceOf('DateTime', $result[1]['date']); - $this->assertInstanceOf('DateTime', $result[1]['datetime']); + self::assertInstanceOf('DateTime', $result[1]['time']); + self::assertInstanceOf('DateTime', $result[1]['date']); + self::assertInstanceOf('DateTime', $result[1]['datetime']); - $this->assertEquals('2010-02-02 12:12:12', $result[1]['datetime']->format('Y-m-d G:i:s')); + self::assertEquals('2010-02-02 12:12:12', $result[1]['datetime']->format('Y-m-d G:i:s')); } public function loadFixtures() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC698Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC698Test.php index f21d6de6936..13ebcd27527 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC698Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC698Test.php @@ -28,7 +28,7 @@ public function testTicket() $sql = $qb->getQuery()->getSQL(); - $this->assertEquals( + self::assertEquals( strtolower('SELECT p0_.privilegeID AS privilegeID_0, p0_.name AS name_1, r1_.roleID AS roleID_2, r1_.name AS name_3, r1_.shortName AS shortName_4 FROM Privileges p0_ LEFT JOIN RolePrivileges r2_ ON p0_.privilegeID = r2_.privilegeID LEFT JOIN Roles r1_ ON r1_.roleID = r2_.roleID'), strtolower($sql) ); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php index c6f1a2254cb..02737ba2a72 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php @@ -21,7 +21,7 @@ public function testIsEmptySqlGeneration() $referenceSQL = 'SELECT g0_.name AS name_0, g0_.description AS description_1, g0_.id AS id_2, g1_.name AS name_3, g1_.description AS description_4, g1_.id AS id_5 FROM groups g0_ LEFT JOIN groups_groups g2_ ON g0_.id = g2_.parent_id LEFT JOIN groups g1_ ON g1_.id = g2_.child_id WHERE (SELECT COUNT(*) FROM groups_groups g3_ WHERE g3_.child_id = g0_.id) = 0'; - $this->assertEquals( + self::assertEquals( strtolower($referenceSQL), strtolower($q->getSQL()) ); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC729Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC729Test.php index af4c9634c12..4b1ac0e120d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC729Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC729Test.php @@ -39,20 +39,20 @@ public function testMergeManyToMany() $a = new DDC729A(); $a->id = $aId; - $this->assertInstanceOf(ArrayCollection::class, $a->related); + self::assertInstanceOf(ArrayCollection::class, $a->related); $a = $this->_em->merge($a); - $this->assertInstanceOf(PersistentCollection::class, $a->related); + self::assertInstanceOf(PersistentCollection::class, $a->related); - $this->assertFalse($a->related->isInitialized(), "Collection should not be marked initialized."); - $this->assertFalse($a->related->isDirty(), "Collection should not be marked as dirty."); + self::assertFalse($a->related->isInitialized(), "Collection should not be marked initialized."); + self::assertFalse($a->related->isDirty(), "Collection should not be marked as dirty."); $this->_em->flush(); $this->_em->clear(); $a = $this->_em->find(DDC729A::class, $aId); - $this->assertEquals(1, count($a->related)); + self::assertEquals(1, count($a->related)); } public function testUnidirectionalMergeManyToMany() @@ -82,7 +82,7 @@ public function testUnidirectionalMergeManyToMany() $this->_em->clear(); $a = $this->_em->find(DDC729A::class, $aId); - $this->assertEquals(2, count($a->related)); + self::assertEquals(2, count($a->related)); } public function testBidirectionalMergeManyToMany() @@ -114,7 +114,7 @@ public function testBidirectionalMergeManyToMany() $this->_em->clear(); $a = $this->_em->find(DDC729A::class, $aId); - $this->assertEquals(2, count($a->related)); + self::assertEquals(2, count($a->related)); } public function testBidirectionalMultiMergeManyToMany() @@ -146,7 +146,7 @@ public function testBidirectionalMultiMergeManyToMany() $this->_em->clear(); $a = $this->_em->find(DDC729A::class, $aId); - $this->assertEquals(2, count($a->related)); + self::assertEquals(2, count($a->related)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC735Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC735Test.php index afae6973bf7..3b07f3a9a4f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC735Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC735Test.php @@ -32,7 +32,7 @@ public function testRemoveElement_AppliesOrphanRemoval() $this->_em->flush(); // Now you see it - $this->assertEquals(1, count($product->getReviews())); + self::assertEquals(1, count($product->getReviews())); // Remove the review $reviewId = $review->getId(); @@ -40,16 +40,16 @@ public function testRemoveElement_AppliesOrphanRemoval() $this->_em->flush(); // Now you don't - $this->assertEquals(0, count($product->getReviews()), 'count($reviews) should be 0 after removing its only Review'); + self::assertEquals(0, count($product->getReviews()), 'count($reviews) should be 0 after removing its only Review'); // Refresh $this->_em->refresh($product); // It should still be 0 - $this->assertEquals(0, count($product->getReviews()), 'count($reviews) should still be 0 after the refresh'); + self::assertEquals(0, count($product->getReviews()), 'count($reviews) should still be 0 after the refresh'); // Review should also not be available anymore - $this->assertNull($this->_em->find(DDC735Review::class, $reviewId)); + self::assertNull($this->_em->find(DDC735Review::class, $reviewId)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC736Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC736Test.php index 932731bf6f5..ce8b2c45410 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC736Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC736Test.php @@ -39,10 +39,10 @@ public function testReorderEntityFetchJoinForHydration() $cart2 = $result[0]; unset($result[0]); - $this->assertInstanceOf(ECommerceCart::class, $cart2); - $this->assertNotInstanceOf(Proxy::class, $cart2->getCustomer()); - $this->assertInstanceOf(ECommerceCustomer::class, $cart2->getCustomer()); - $this->assertEquals(['name' => 'roman', 'payment' => 'cash'], $result); + self::assertInstanceOf(ECommerceCart::class, $cart2); + self::assertNotInstanceOf(Proxy::class, $cart2->getCustomer()); + self::assertInstanceOf(ECommerceCustomer::class, $cart2->getCustomer()); + self::assertEquals(['name' => 'roman', 'payment' => 'cash'], $result); } /** @@ -71,7 +71,7 @@ public function testDqlTreeWalkerReordering() /* @var $cart2 ECommerceCart */ $cart2 = $result[0][0]; - $this->assertInstanceOf(Proxy::class, $cart2->getCustomer()); + self::assertInstanceOf(Proxy::class, $cart2->getCustomer()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC748Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC748Test.php index cfafc66dd64..f596a02735c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC748Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC748Test.php @@ -31,10 +31,10 @@ public function testRefreshWithManyToOne() $this->_em->persist($article); $this->_em->flush(); - $this->assertInstanceOf(Collection::class, $user->articles); + self::assertInstanceOf(Collection::class, $user->articles); $this->_em->refresh($article); - $this->assertTrue($article !== $user->articles, "The article should not be replaced on the inverse side of the relation."); - $this->assertInstanceOf(Collection::class, $user->articles); + self::assertTrue($article !== $user->articles, "The article should not be replaced on the inverse side of the relation."); + self::assertInstanceOf(Collection::class, $user->articles); } public function testRefreshOneToOne() @@ -56,7 +56,7 @@ public function testRefreshOneToOne() $this->_em->flush(); $this->_em->refresh($address); - $this->assertSame($user, $address->user); - $this->assertSame($user->address, $address); + self::assertSame($user, $address->user); + self::assertSame($user->address, $address); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php index a5707f233e3..f82c48440e8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php @@ -95,18 +95,18 @@ public function testManyToManyMergeAssociationAdds() $cmsGroups = $this->_em->getRepository(CmsGroup::class)->findAll(); // Check the entities are in the database - $this->assertEquals(1, sizeof($cmsUsers)); - $this->assertEquals(2, sizeof($cmsGroups)); + self::assertEquals(1, sizeof($cmsUsers)); + self::assertEquals(2, sizeof($cmsGroups)); // Check the associations between the entities are now in the database - $this->assertEquals(2, sizeof($cmsUsers[0]->groups)); - $this->assertEquals(1, sizeof($cmsGroups[0]->users)); - $this->assertEquals(1, sizeof($cmsGroups[1]->users)); - - $this->assertSame($cmsUsers[0]->groups[0], $cmsGroups[0]); - $this->assertSame($cmsUsers[0]->groups[1], $cmsGroups[1]); - $this->assertSame($cmsGroups[0]->users[0], $cmsUsers[0]); - $this->assertSame($cmsGroups[1]->users[0], $cmsUsers[0]); + self::assertEquals(2, sizeof($cmsUsers[0]->groups)); + self::assertEquals(1, sizeof($cmsGroups[0]->users)); + self::assertEquals(1, sizeof($cmsGroups[1]->users)); + + self::assertSame($cmsUsers[0]->groups[0], $cmsGroups[0]); + self::assertSame($cmsUsers[0]->groups[1], $cmsGroups[1]); + self::assertSame($cmsGroups[0]->users[0], $cmsUsers[0]); + self::assertSame($cmsGroups[1]->users[0], $cmsUsers[0]); } /** @@ -171,12 +171,12 @@ public function testManyToManyMergeAssociationRemoves() $cmsGroups = $this->_em->getRepository(CmsGroup::class)->findAll(); // Check the entities are in the database - $this->assertEquals(1, sizeof($cmsUsers)); - $this->assertEquals(2, sizeof($cmsGroups)); + self::assertEquals(1, sizeof($cmsUsers)); + self::assertEquals(2, sizeof($cmsGroups)); // Check the associations between the entities are now in the database - $this->assertEquals(0, sizeof($cmsUsers[0]->groups)); - $this->assertEquals(0, sizeof($cmsGroups[0]->users)); - $this->assertEquals(0, sizeof($cmsGroups[1]->users)); + self::assertEquals(0, sizeof($cmsUsers[0]->groups)); + self::assertEquals(0, sizeof($cmsGroups[0]->users)); + self::assertEquals(0, sizeof($cmsGroups[1]->users)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC767Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC767Test.php index 8420db13275..eee5f11e481 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC767Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC767Test.php @@ -46,7 +46,7 @@ public function testCollectionChangesInsideTransaction() /* @var $pUser CmsUser */ $pUser = $this->_em->find(get_class($user), $user->id); - $this->assertNotNull($pUser, "User not retrieved from database."); + self::assertNotNull($pUser, "User not retrieved from database."); $groups = [$group2->id, $group3->id]; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC809Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC809Test.php index 4c6464a188b..8a09afa8a01 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC809Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC809Test.php @@ -48,8 +48,8 @@ public function testIssue() ->getQuery() ->getResult(); - $this->assertEquals(4, count($result[0]->getSpecificationValues()), "Works in test-setup."); - $this->assertEquals(4, count($result[1]->getSpecificationValues()), "Only returns 2 in the case of the hydration bug."); + self::assertEquals(4, count($result[0]->getSpecificationValues()), "Works in test-setup."); + self::assertEquals(4, count($result[1]->getSpecificationValues()), "Only returns 2 in the case of the hydration bug."); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC812Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC812Test.php index 5b37a47923c..60e2c033f87 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC812Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC812Test.php @@ -40,7 +40,7 @@ public function testFetchJoinInitializesPreviouslyUninitializedCollectionOfManag ->setParameter(1, $article->id) ->getSingleResult(); - $this->assertTrue($article2Again === $article2); - $this->assertTrue($article2Again->comments->isInitialized()); + self::assertTrue($article2Again === $article2); + self::assertTrue($article2Again->comments->isInitialized()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC837Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC837Test.php index 4721a6b18be..c7c281ba054 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC837Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC837Test.php @@ -53,36 +53,36 @@ public function testIssue() // Test Class1 $e1 = $this->_em->find(DDC837Super::class, $c1->id); - $this->assertInstanceOf(DDC837Class1::class, $e1); - $this->assertEquals('Foo', $e1->title); - $this->assertEquals('Foo', $e1->description); - $this->assertInstanceOf(DDC837Aggregate::class, $e1->aggregate); - $this->assertEquals('test1', $e1->aggregate->getSysname()); + self::assertInstanceOf(DDC837Class1::class, $e1); + self::assertEquals('Foo', $e1->title); + self::assertEquals('Foo', $e1->description); + self::assertInstanceOf(DDC837Aggregate::class, $e1->aggregate); + self::assertEquals('test1', $e1->aggregate->getSysname()); // Test Class 2 $e2 = $this->_em->find(DDC837Super::class, $c2->id); - $this->assertInstanceOf(DDC837Class2::class, $e2); - $this->assertEquals('Bar', $e2->title); - $this->assertEquals('Bar', $e2->description); - $this->assertEquals('Bar', $e2->text); - $this->assertInstanceOf(DDC837Aggregate::class, $e2->aggregate); - $this->assertEquals('test2', $e2->aggregate->getSysname()); + self::assertInstanceOf(DDC837Class2::class, $e2); + self::assertEquals('Bar', $e2->title); + self::assertEquals('Bar', $e2->description); + self::assertEquals('Bar', $e2->text); + self::assertInstanceOf(DDC837Aggregate::class, $e2->aggregate); + self::assertEquals('test2', $e2->aggregate->getSysname()); $all = $this->_em->getRepository(DDC837Super::class)->findAll(); foreach ($all as $obj) { if ($obj instanceof DDC837Class1) { - $this->assertEquals('Foo', $obj->title); - $this->assertEquals('Foo', $obj->description); + self::assertEquals('Foo', $obj->title); + self::assertEquals('Foo', $obj->description); } else if ($obj instanceof DDC837Class2) { - $this->assertTrue($e2 === $obj); - $this->assertEquals('Bar', $obj->title); - $this->assertEquals('Bar', $obj->description); - $this->assertEquals('Bar', $obj->text); + self::assertTrue($e2 === $obj); + self::assertEquals('Bar', $obj->title); + self::assertEquals('Bar', $obj->description); + self::assertEquals('Bar', $obj->text); } else if ($obj instanceof DDC837Class3) { - $this->assertEquals('Baz', $obj->apples); - $this->assertEquals('Baz', $obj->bananas); + self::assertEquals('Baz', $obj->apples); + self::assertEquals('Baz', $obj->bananas); } else { $this->fail('Instance of DDC837Class1, DDC837Class2 or DDC837Class3 expected.'); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC849Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC849Test.php index 1844b316f37..476389c751f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC849Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC849Test.php @@ -44,25 +44,25 @@ public function testRemoveContains() $group1 = $this->user->groups[0]; $group2 = $this->user->groups[1]; - $this->assertTrue($this->user->groups->contains($group1)); - $this->assertTrue($this->user->groups->contains($group2)); + self::assertTrue($this->user->groups->contains($group1)); + self::assertTrue($this->user->groups->contains($group2)); $this->user->groups->removeElement($group1); $this->user->groups->remove(1); - $this->assertFalse($this->user->groups->contains($group1)); - $this->assertFalse($this->user->groups->contains($group2)); + self::assertFalse($this->user->groups->contains($group1)); + self::assertFalse($this->user->groups->contains($group2)); } public function testClearCount() { $this->user->addGroup(new CmsGroup); - $this->assertEquals(3, count($this->user->groups)); + self::assertEquals(3, count($this->user->groups)); $this->user->groups->clear(); - $this->assertEquals(0, $this->user->groups->count()); - $this->assertEquals(0, count($this->user->groups)); + self::assertEquals(0, $this->user->groups->count()); + self::assertEquals(0, count($this->user->groups)); } public function testClearContains() @@ -70,12 +70,12 @@ public function testClearContains() $group1 = $this->user->groups[0]; $group2 = $this->user->groups[1]; - $this->assertTrue($this->user->groups->contains($group1)); - $this->assertTrue($this->user->groups->contains($group2)); + self::assertTrue($this->user->groups->contains($group1)); + self::assertTrue($this->user->groups->contains($group2)); $this->user->groups->clear(); - $this->assertFalse($this->user->groups->contains($group1)); - $this->assertFalse($this->user->groups->contains($group2)); + self::assertFalse($this->user->groups->contains($group1)); + self::assertFalse($this->user->groups->contains($group2)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC881Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC881Test.php index 3df61f7165c..41e40ab3377 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC881Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC881Test.php @@ -83,16 +83,16 @@ public function testIssue() $dql = "SELECT c, p FROM " . DDC881PhoneCall::class . " c JOIN c.phonenumber p"; $calls = $this->_em->createQuery($dql)->getResult(); - $this->assertEquals(2, count($calls)); - $this->assertNotInstanceOf(Proxy::class, $calls[0]->getPhoneNumber()); - $this->assertNotInstanceOf(Proxy::class, $calls[1]->getPhoneNumber()); + self::assertEquals(2, count($calls)); + self::assertNotInstanceOf(Proxy::class, $calls[0]->getPhoneNumber()); + self::assertNotInstanceOf(Proxy::class, $calls[1]->getPhoneNumber()); $dql = "SELECT p, c FROM " . DDC881PhoneNumber::class . " p JOIN p.calls c"; $numbers = $this->_em->createQuery($dql)->getResult(); - $this->assertEquals(2, count($numbers)); - $this->assertInstanceOf(PersistentCollection::class, $numbers[0]->getCalls()); - $this->assertTrue($numbers[0]->getCalls()->isInitialized()); + self::assertEquals(2, count($numbers)); + self::assertInstanceOf(PersistentCollection::class, $numbers[0]->getCalls()); + self::assertTrue($numbers[0]->getCalls()->isInitialized()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC949Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC949Test.php index 8c3162df364..56df4c20cbd 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC949Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC949Test.php @@ -32,10 +32,10 @@ public function testBooleanThroughRepository() $true = $this->_em->getRepository(BooleanModel::class)->findOneBy(['booleanField' => true]); $false = $this->_em->getRepository(BooleanModel::class)->findOneBy(['booleanField' => false]); - $this->assertInstanceOf(BooleanModel::class, $true, "True model not found"); - $this->assertTrue($true->booleanField, "True Boolean Model should be true."); + self::assertInstanceOf(BooleanModel::class, $true, "True model not found"); + self::assertTrue($true->booleanField, "True Boolean Model should be true."); - $this->assertInstanceOf(BooleanModel::class, $false, "False model not found"); - $this->assertFalse($false->booleanField, "False Boolean Model should be false."); + self::assertInstanceOf(BooleanModel::class, $false, "False model not found"); + self::assertFalse($false->booleanField, "False Boolean Model should be false."); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC960Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC960Test.php index 730a70bce8c..5c781fe24c8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC960Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC960Test.php @@ -34,7 +34,7 @@ public function testUpdateRootVersion() $this->_em->flush(); - $this->assertEquals(2, $child->getVersion()); + self::assertEquals(2, $child->getVersion()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC992Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC992Test.php index 77780486bd4..c9bf9fc812d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC992Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC992Test.php @@ -42,9 +42,9 @@ public function testIssue() $child = $this->_em->getRepository(get_class($role))->find($child->roleID); $parents = count($child->extends); - $this->assertEquals(1, $parents); + self::assertEquals(1, $parents); foreach ($child->extends AS $parent) { - $this->assertEquals($role->getRoleID(), $parent->getRoleID()); + self::assertEquals($role->getRoleID(), $parent->getRoleID()); } } @@ -64,21 +64,21 @@ public function testOneToManyChild() $childRepository = $this->_em->getRepository(get_class($child)); $parent = $parentRepository->find($parent->id); - $this->assertEquals(1, count($parent->childs)); - $this->assertEquals(0, count($parent->childs[0]->childs())); + self::assertEquals(1, count($parent->childs)); + self::assertEquals(0, count($parent->childs[0]->childs())); $child = $parentRepository->findOneBy(["id" => $child->id]); - $this->assertSame($parent->childs[0], $child); + self::assertSame($parent->childs[0], $child); $this->_em->clear(); $child = $parentRepository->find($child->id); - $this->assertEquals(0, count($child->childs)); + self::assertEquals(0, count($child->childs)); $this->_em->clear(); $child = $childRepository->find($child->id); - $this->assertEquals(0, count($child->childs)); + self::assertEquals(0, count($child->childs)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket2481Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket2481Test.php index ebedf0c869f..47b7a31734a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket2481Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket2481Test.php @@ -26,7 +26,7 @@ public function testEmptyInsert() $this->_em->persist($test); $this->_em->flush(); - $this->assertTrue($test->id > 0); + self::assertTrue($test->id > 0); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket69.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket69.php index ccc8bce120c..71f117cbf63 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket69.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket69.php @@ -82,13 +82,13 @@ public function testIssue() $res = $query->getResult(); $lemma = $res[0]; - $this->assertEquals('foo', $lemma->getLemma()); - $this->assertInstanceOf(Lemma::class, $lemma); + self::assertEquals('foo', $lemma->getLemma()); + self::assertInstanceOf(Lemma::class, $lemma); $relations = $lemma->getRelations(); foreach($relations as $relation) { - $this->assertInstanceOf(Relation::class, $relation); - $this->assertTrue($relation->getType()->getType() != ''); + self::assertInstanceOf(Relation::class, $relation); + self::assertTrue($relation->getType()->getType() != ''); } $this->_em->clear(); diff --git a/tests/Doctrine/Tests/ORM/Functional/TypeTest.php b/tests/Doctrine/Tests/ORM/Functional/TypeTest.php index 9dd99777a04..d2af16c879c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/TypeTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/TypeTest.php @@ -32,8 +32,8 @@ public function testDecimal() $dql = 'SELECT d FROM ' . DecimalModel::class . ' d'; $decimal = $this->_em->createQuery($dql)->getSingleResult(); - $this->assertSame('0.15', $decimal->decimal); - $this->assertSame('0.1515', $decimal->highScale); + self::assertSame('0.15', $decimal->decimal); + self::assertSame('0.1515', $decimal->highScale); } /** @@ -52,7 +52,7 @@ public function testBoolean() $dql = 'SELECT b FROM ' . BooleanModel::class . ' b WHERE b.booleanField = true'; $bool = $this->_em->createQuery($dql)->getSingleResult(); - $this->assertTrue($bool->booleanField); + self::assertTrue($bool->booleanField); $bool->booleanField = false; @@ -62,7 +62,7 @@ public function testBoolean() $dql = 'SELECT b FROM ' . BooleanModel::class . ' b WHERE b.booleanField = false'; $bool = $this->_em->createQuery($dql)->getSingleResult(); - $this->assertFalse($bool->booleanField); + self::assertFalse($bool->booleanField); } public function testArray() @@ -78,7 +78,7 @@ public function testArray() $dql = 'SELECT s FROM ' . SerializationModel::class . ' s'; $serialize = $this->_em->createQuery($dql)->getSingleResult(); - $this->assertSame(["foo" => "bar", "bar" => "baz"], $serialize->array); + self::assertSame(["foo" => "bar", "bar" => "baz"], $serialize->array); } public function testObject() @@ -93,7 +93,7 @@ public function testObject() $dql = 'SELECT s FROM ' . SerializationModel::class . ' s'; $serialize = $this->_em->createQuery($dql)->getSingleResult(); - $this->assertInstanceOf('stdClass', $serialize->object); + self::assertInstanceOf('stdClass', $serialize->object); } public function testDate() @@ -107,8 +107,8 @@ public function testDate() $dateTimeDb = $this->_em->find(DateTimeModel::class, $dateTime->id); - $this->assertInstanceOf(\DateTime::class, $dateTimeDb->date); - $this->assertSame('2009-10-01', $dateTimeDb->date->format('Y-m-d')); + self::assertInstanceOf(\DateTime::class, $dateTimeDb->date); + self::assertEquals('2009-10-01', $dateTimeDb->date->format('Y-m-d')); } public function testDateTime() @@ -122,13 +122,15 @@ public function testDateTime() $dateTimeDb = $this->_em->find(DateTimeModel::class, $dateTime->id); - $this->assertInstanceOf(\DateTime::class, $dateTimeDb->datetime); - $this->assertSame('2009-10-02 20:10:52', $dateTimeDb->datetime->format('Y-m-d H:i:s')); + self::assertInstanceOf(\DateTime::class, $dateTimeDb->datetime); + self::assertEquals('2009-10-02 20:10:52', $dateTimeDb->datetime->format('Y-m-d H:i:s')); - $articles = $this->_em->getRepository(DateTimeModel::class) - ->findBy(['datetime' => new \DateTime()]); + $articles = $this->_em + ->getRepository(DateTimeModel::class) + ->findBy(['datetime' => new \DateTime( "now" )]) + ; - $this->assertEmpty($articles); + self::assertEmpty($articles); } public function testDqlQueryBindDateTimeInstance() @@ -142,9 +144,10 @@ public function testDqlQueryBindDateTimeInstance() $this->_em->flush(); $this->_em->clear(); - $dateTimeDb = $this->_em->createQuery('SELECT d FROM Doctrine\Tests\Models\Generic\DateTimeModel d WHERE d.datetime = ?1') - ->setParameter(1, $date, DBALType::DATETIME) - ->getSingleResult(); + $dateTimeDb = $this->_em + ->createQuery('SELECT d FROM Doctrine\Tests\Models\Generic\DateTimeModel d WHERE d.datetime = ?1') + ->setParameter(1, $date, DBALType::DATETIME) + ->getSingleResult(); $this->assertInstanceOf(\DateTime::class, $dateTimeDb->datetime); $this->assertSame('2009-10-02 20:10:52', $dateTimeDb->datetime->format('Y-m-d H:i:s')); @@ -162,11 +165,12 @@ public function testDqlQueryBuilderBindDateTimeInstance() $this->_em->clear(); $dateTimeDb = $this->_em->createQueryBuilder() - ->select('d') - ->from(DateTimeModel::class, 'd') - ->where('d.datetime = ?1') - ->setParameter(1, $date, DBALType::DATETIME) - ->getQuery()->getSingleResult(); + ->select('d') + ->from(DateTimeModel::class, 'd') + ->where('d.datetime = ?1') + ->setParameter(1, $date, DBALType::DATETIME) + ->getQuery() + ->getSingleResult(); $this->assertInstanceOf(\DateTime::class, $dateTimeDb->datetime); $this->assertSame('2009-10-02 20:10:52', $dateTimeDb->datetime->format('Y-m-d H:i:s')); @@ -183,7 +187,7 @@ public function testTime() $dateTimeDb = $this->_em->find(DateTimeModel::class, $dateTime->id); - $this->assertInstanceOf(\DateTime::class, $dateTimeDb->time); - $this->assertSame('19:27:20', $dateTimeDb->time->format('H:i:s')); + self::assertInstanceOf(\DateTime::class, $dateTime->time); + self::assertSame('19:27:20', $dateTime->time->format('H:i:s')); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/TypeValueSqlTest.php b/tests/Doctrine/Tests/ORM/Functional/TypeValueSqlTest.php index 3af954cfd97..b8a2744f8d0 100644 --- a/tests/Doctrine/Tests/ORM/Functional/TypeValueSqlTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/TypeValueSqlTest.php @@ -44,8 +44,8 @@ public function testUpperCaseStringType() $entity = $this->_em->find('\Doctrine\Tests\Models\CustomType\CustomTypeUpperCase', $id); - $this->assertEquals('foo', $entity->lowerCaseString, 'Entity holds lowercase string'); - $this->assertEquals('FOO', $this->_em->getConnection()->fetchColumn("select lowerCaseString from customtype_uppercases where id=".$entity->id.""), 'Database holds uppercase string'); + self::assertEquals('foo', $entity->lowerCaseString, 'Entity holds lowercase string'); + self::assertEquals('FOO', $this->_em->getConnection()->fetchColumn("select lowerCaseString from customtype_uppercases where id=".$entity->id.""), 'Database holds uppercase string'); } /** @@ -66,8 +66,8 @@ public function testUpperCaseStringTypeWhenColumnNameIsDefined() $this->_em->clear(); $entity = $this->_em->find('\Doctrine\Tests\Models\CustomType\CustomTypeUpperCase', $id); - $this->assertEquals('foo', $entity->namedLowerCaseString, 'Entity holds lowercase string'); - $this->assertEquals('FOO', $this->_em->getConnection()->fetchColumn("select named_lower_case_string from customtype_uppercases where id=".$entity->id.""), 'Database holds uppercase string'); + self::assertEquals('foo', $entity->namedLowerCaseString, 'Entity holds lowercase string'); + self::assertEquals('FOO', $this->_em->getConnection()->fetchColumn("select named_lower_case_string from customtype_uppercases where id=".$entity->id.""), 'Database holds uppercase string'); $entity->namedLowerCaseString = 'bar'; @@ -81,8 +81,8 @@ public function testUpperCaseStringTypeWhenColumnNameIsDefined() $entity = $this->_em->find('\Doctrine\Tests\Models\CustomType\CustomTypeUpperCase', $id); - $this->assertEquals('bar', $entity->namedLowerCaseString, 'Entity holds lowercase string'); - $this->assertEquals('BAR', $this->_em->getConnection()->fetchColumn("select named_lower_case_string from customtype_uppercases where id=".$entity->id.""), 'Database holds uppercase string'); + self::assertEquals('bar', $entity->namedLowerCaseString, 'Entity holds lowercase string'); + self::assertEquals('BAR', $this->_em->getConnection()->fetchColumn("select named_lower_case_string from customtype_uppercases where id=".$entity->id.""), 'Database holds uppercase string'); } public function testTypeValueSqlWithAssociations() @@ -108,11 +108,11 @@ public function testTypeValueSqlWithAssociations() $entity = $this->_em->find(CustomTypeParent::class, $parentId); - $this->assertTrue($entity->customInteger < 0, 'Fetched customInteger negative'); - $this->assertEquals(1, $this->_em->getConnection()->fetchColumn("select customInteger from customtype_parents where id=".$entity->id.""), 'Database has stored customInteger positive'); + self::assertTrue($entity->customInteger < 0, 'Fetched customInteger negative'); + self::assertEquals(1, $this->_em->getConnection()->fetchColumn("select customInteger from customtype_parents where id=".$entity->id.""), 'Database has stored customInteger positive'); - $this->assertNotNull($parent->child, 'Child attached'); - $this->assertCount(2, $entity->getMyFriends(), '2 friends attached'); + self::assertNotNull($parent->child, 'Child attached'); + self::assertCount(2, $entity->getMyFriends(), '2 friends attached'); } public function testSelectDQL() @@ -132,12 +132,12 @@ public function testSelectDQL() $result = $query->getResult(); - $this->assertEquals(1, count($result)); - $this->assertInstanceOf(CustomTypeParent::class, $result[0][0]); - $this->assertEquals(-1, $result[0][0]->customInteger); + self::assertEquals(1, count($result)); + self::assertInstanceOf(CustomTypeParent::class, $result[0][0]); + self::assertEquals(-1, $result[0][0]->customInteger); - $this->assertEquals(-1, $result[0]['customInteger']); + self::assertEquals(-1, $result[0]['customInteger']); - $this->assertEquals('foo', $result[0][0]->child->lowerCaseString); + self::assertEquals('foo', $result[0][0]->child->lowerCaseString); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/UUIDGeneratorTest.php b/tests/Doctrine/Tests/ORM/Functional/UUIDGeneratorTest.php index ff352ba1f11..6c2341de638 100644 --- a/tests/Doctrine/Tests/ORM/Functional/UUIDGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/UUIDGeneratorTest.php @@ -27,8 +27,8 @@ public function testGenerateUUID() $entity = new UUIDEntity(); $this->_em->persist($entity); - $this->assertNotNull($entity->getId()); - $this->assertTrue(strlen($entity->getId()) > 0); + self::assertNotNull($entity->getId()); + self::assertTrue(strlen($entity->getId()) > 0); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdForeignKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdForeignKeyTest.php index 108ba743737..6dd3e3361cb 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdForeignKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdForeignKeyTest.php @@ -58,16 +58,16 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { $conn = $this->_em->getConnection(); - $this->assertEquals('nop', $conn->fetchColumn('SELECT id4 FROM vct_auxiliary LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT id4 FROM vct_auxiliary LIMIT 1')); - $this->assertEquals('qrs', $conn->fetchColumn('SELECT id1 FROM vct_inversed_manytomany_compositeid_foreignkey LIMIT 1')); - $this->assertEquals('nop', $conn->fetchColumn('SELECT foreign_id FROM vct_inversed_manytomany_compositeid_foreignkey LIMIT 1')); + self::assertEquals('qrs', $conn->fetchColumn('SELECT id1 FROM vct_inversed_manytomany_compositeid_foreignkey LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT foreign_id FROM vct_inversed_manytomany_compositeid_foreignkey LIMIT 1')); - $this->assertEquals('tuv', $conn->fetchColumn('SELECT id2 FROM vct_owning_manytomany_compositeid_foreignkey LIMIT 1')); + self::assertEquals('tuv', $conn->fetchColumn('SELECT id2 FROM vct_owning_manytomany_compositeid_foreignkey LIMIT 1')); - $this->assertEquals('qrs', $conn->fetchColumn('SELECT associated_id FROM vct_xref_manytomany_compositeid_foreignkey LIMIT 1')); - $this->assertEquals('nop', $conn->fetchColumn('SELECT associated_foreign_id FROM vct_xref_manytomany_compositeid_foreignkey LIMIT 1')); - $this->assertEquals('tuv', $conn->fetchColumn('SELECT owning_id FROM vct_xref_manytomany_compositeid_foreignkey LIMIT 1')); + self::assertEquals('qrs', $conn->fetchColumn('SELECT associated_id FROM vct_xref_manytomany_compositeid_foreignkey LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT associated_foreign_id FROM vct_xref_manytomany_compositeid_foreignkey LIMIT 1')); + self::assertEquals('tuv', $conn->fetchColumn('SELECT owning_id FROM vct_xref_manytomany_compositeid_foreignkey LIMIT 1')); } /** @@ -90,9 +90,9 @@ public function testThatEntitiesAreFetchedFromTheDatabase() 'ghi' ); - $this->assertInstanceOf(Models\ValueConversionType\AuxiliaryEntity::class, $auxiliary); - $this->assertInstanceOf(Models\ValueConversionType\InversedManyToManyCompositeIdForeignKeyEntity::class, $inversed); - $this->assertInstanceOf(Models\ValueConversionType\OwningManyToManyCompositeIdForeignKeyEntity::class, $owning); + self::assertInstanceOf(Models\ValueConversionType\AuxiliaryEntity::class, $auxiliary); + self::assertInstanceOf(Models\ValueConversionType\InversedManyToManyCompositeIdForeignKeyEntity::class, $inversed); + self::assertInstanceOf(Models\ValueConversionType\OwningManyToManyCompositeIdForeignKeyEntity::class, $owning); } /** @@ -115,10 +115,10 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr 'ghi' ); - $this->assertEquals('abc', $auxiliary->id4); - $this->assertEquals('def', $inversed->id1); - $this->assertEquals('abc', $inversed->foreignEntity->id4); - $this->assertEquals('ghi', $owning->id2); + self::assertEquals('abc', $auxiliary->id4); + self::assertEquals('def', $inversed->id1); + self::assertEquals('abc', $inversed->foreignEntity->id4); + self::assertEquals('ghi', $owning->id2); } /** @@ -136,7 +136,7 @@ public function testThatInversedEntityIsFetchedFromTheDatabaseUsingAuxiliaryEnti ['id1' => 'def', 'foreignEntity' => $auxiliary] ); - $this->assertInstanceOf(Models\ValueConversionType\InversedManyToManyCompositeIdForeignKeyEntity::class, $inversed); + self::assertInstanceOf(Models\ValueConversionType\InversedManyToManyCompositeIdForeignKeyEntity::class, $inversed); } /** @@ -149,7 +149,7 @@ public function testThatTheCollectionFromOwningToInversedIsLoaded() 'ghi' ); - $this->assertCount(1, $owning->associatedEntities); + self::assertCount(1, $owning->associatedEntities); } /** @@ -162,7 +162,7 @@ public function testThatTheCollectionFromInversedToOwningIsLoaded() ['id1' => 'def', 'foreignEntity' => 'abc'] ); - $this->assertCount(1, $inversed->associatedEntities); + self::assertCount(1, $inversed->associatedEntities); } /** @@ -190,6 +190,6 @@ public function testThatTheJoinTableRowsAreRemovedWhenRemovingTheAssociation() // test association is removed - $this->assertEquals(0, $conn->fetchColumn('SELECT COUNT(*) FROM vct_xref_manytomany_compositeid_foreignkey')); + self::assertEquals(0, $conn->fetchColumn('SELECT COUNT(*) FROM vct_xref_manytomany_compositeid_foreignkey')); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdTest.php index 4403f2bf959..84d7ac115c0 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdTest.php @@ -52,14 +52,14 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { $conn = $this->_em->getConnection(); - $this->assertEquals('nop', $conn->fetchColumn('SELECT id1 FROM vct_inversed_manytomany_compositeid LIMIT 1')); - $this->assertEquals('qrs', $conn->fetchColumn('SELECT id2 FROM vct_inversed_manytomany_compositeid LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT id1 FROM vct_inversed_manytomany_compositeid LIMIT 1')); + self::assertEquals('qrs', $conn->fetchColumn('SELECT id2 FROM vct_inversed_manytomany_compositeid LIMIT 1')); - $this->assertEquals('tuv', $conn->fetchColumn('SELECT id3 FROM vct_owning_manytomany_compositeid LIMIT 1')); + self::assertEquals('tuv', $conn->fetchColumn('SELECT id3 FROM vct_owning_manytomany_compositeid LIMIT 1')); - $this->assertEquals('nop', $conn->fetchColumn('SELECT inversed_id1 FROM vct_xref_manytomany_compositeid LIMIT 1')); - $this->assertEquals('qrs', $conn->fetchColumn('SELECT inversed_id2 FROM vct_xref_manytomany_compositeid LIMIT 1')); - $this->assertEquals('tuv', $conn->fetchColumn('SELECT owning_id FROM vct_xref_manytomany_compositeid LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT inversed_id1 FROM vct_xref_manytomany_compositeid LIMIT 1')); + self::assertEquals('qrs', $conn->fetchColumn('SELECT inversed_id2 FROM vct_xref_manytomany_compositeid LIMIT 1')); + self::assertEquals('tuv', $conn->fetchColumn('SELECT owning_id FROM vct_xref_manytomany_compositeid LIMIT 1')); } /** @@ -77,8 +77,8 @@ public function testThatEntitiesAreFetchedFromTheDatabase() 'ghi' ); - $this->assertInstanceOf(Models\ValueConversionType\InversedManyToManyCompositeIdEntity::class, $inversed); - $this->assertInstanceOf(Models\ValueConversionType\OwningManyToManyCompositeIdEntity::class, $owning); + self::assertInstanceOf(Models\ValueConversionType\InversedManyToManyCompositeIdEntity::class, $inversed); + self::assertInstanceOf(Models\ValueConversionType\OwningManyToManyCompositeIdEntity::class, $owning); } /** @@ -96,9 +96,9 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr 'ghi' ); - $this->assertEquals('abc', $inversed->id1); - $this->assertEquals('def', $inversed->id2); - $this->assertEquals('ghi', $owning->id3); + self::assertEquals('abc', $inversed->id1); + self::assertEquals('def', $inversed->id2); + self::assertEquals('ghi', $owning->id3); } /** @@ -111,7 +111,7 @@ public function testThatTheCollectionFromOwningToInversedIsLoaded() 'ghi' ); - $this->assertCount(1, $owning->associatedEntities); + self::assertCount(1, $owning->associatedEntities); } /** @@ -124,7 +124,7 @@ public function testThatTheCollectionFromInversedToOwningIsLoaded() ['id1' => 'abc', 'id2' => 'def'] ); - $this->assertCount(1, $inversed->associatedEntities); + self::assertCount(1, $inversed->associatedEntities); } /** @@ -152,6 +152,6 @@ public function testThatTheJoinTableRowsAreRemovedWhenRemovingTheAssociation() // test association is removed - $this->assertEquals(0, $conn->fetchColumn('SELECT COUNT(*) FROM vct_xref_manytomany_compositeid')); + self::assertEquals(0, $conn->fetchColumn('SELECT COUNT(*) FROM vct_xref_manytomany_compositeid')); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyExtraLazyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyExtraLazyTest.php index af1d99de3f9..7d3b4266912 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyExtraLazyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyExtraLazyTest.php @@ -69,7 +69,7 @@ public function testThatTheExtraLazyCollectionFromOwningToInversedIsCounted() 'ghi' ); - $this->assertEquals(2, $owning->associatedEntities->count()); + self::assertEquals(2, $owning->associatedEntities->count()); } public function testThatTheExtraLazyCollectionFromInversedToOwningIsCounted() @@ -79,7 +79,7 @@ public function testThatTheExtraLazyCollectionFromInversedToOwningIsCounted() 'abc' ); - $this->assertEquals(2, $inversed->associatedEntities->count()); + self::assertEquals(2, $inversed->associatedEntities->count()); } public function testThatTheExtraLazyCollectionFromOwningToInversedContainsAnEntity() @@ -94,7 +94,7 @@ public function testThatTheExtraLazyCollectionFromOwningToInversedContainsAnEnti 'abc' ); - $this->assertTrue($owning->associatedEntities->contains($inversed)); + self::assertTrue($owning->associatedEntities->contains($inversed)); } public function testThatTheExtraLazyCollectionFromInversedToOwningContainsAnEntity() @@ -109,7 +109,7 @@ public function testThatTheExtraLazyCollectionFromInversedToOwningContainsAnEnti 'ghi' ); - $this->assertTrue($inversed->associatedEntities->contains($owning)); + self::assertTrue($inversed->associatedEntities->contains($owning)); } public function testThatTheExtraLazyCollectionFromOwningToInversedContainsAnIndexByKey() @@ -119,7 +119,7 @@ public function testThatTheExtraLazyCollectionFromOwningToInversedContainsAnInde 'ghi' ); - $this->assertTrue($owning->associatedEntities->containsKey('abc')); + self::assertTrue($owning->associatedEntities->containsKey('abc')); } public function testThatTheExtraLazyCollectionFromInversedToOwningContainsAnIndexByKey() @@ -129,7 +129,7 @@ public function testThatTheExtraLazyCollectionFromInversedToOwningContainsAnInde 'abc' ); - $this->assertTrue($inversed->associatedEntities->containsKey('ghi')); + self::assertTrue($inversed->associatedEntities->containsKey('ghi')); } public function testThatASliceOfTheExtraLazyCollectionFromOwningToInversedIsLoaded() @@ -139,7 +139,7 @@ public function testThatASliceOfTheExtraLazyCollectionFromOwningToInversedIsLoad 'ghi' ); - $this->assertCount(1, $owning->associatedEntities->slice(0, 1)); + self::assertCount(1, $owning->associatedEntities->slice(0, 1)); } public function testThatASliceOfTheExtraLazyCollectionFromInversedToOwningIsLoaded() @@ -149,6 +149,6 @@ public function testThatASliceOfTheExtraLazyCollectionFromInversedToOwningIsLoad 'abc' ); - $this->assertCount(1, $inversed->associatedEntities->slice(1, 1)); + self::assertCount(1, $inversed->associatedEntities->slice(1, 1)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyTest.php index 4532ee9d5fc..2b8541d7aaa 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyTest.php @@ -51,12 +51,12 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { $conn = $this->_em->getConnection(); - $this->assertEquals('nop', $conn->fetchColumn('SELECT id1 FROM vct_inversed_manytomany LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT id1 FROM vct_inversed_manytomany LIMIT 1')); - $this->assertEquals('qrs', $conn->fetchColumn('SELECT id2 FROM vct_owning_manytomany LIMIT 1')); + self::assertEquals('qrs', $conn->fetchColumn('SELECT id2 FROM vct_owning_manytomany LIMIT 1')); - $this->assertEquals('nop', $conn->fetchColumn('SELECT inversed_id FROM vct_xref_manytomany LIMIT 1')); - $this->assertEquals('qrs', $conn->fetchColumn('SELECT owning_id FROM vct_xref_manytomany LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT inversed_id FROM vct_xref_manytomany LIMIT 1')); + self::assertEquals('qrs', $conn->fetchColumn('SELECT owning_id FROM vct_xref_manytomany LIMIT 1')); } /** @@ -74,8 +74,8 @@ public function testThatEntitiesAreFetchedFromTheDatabase() 'def' ); - $this->assertInstanceOf(Models\ValueConversionType\InversedManyToManyEntity::class, $inversed); - $this->assertInstanceOf(Models\ValueConversionType\OwningManyToManyEntity::class, $owning); + self::assertInstanceOf(Models\ValueConversionType\InversedManyToManyEntity::class, $inversed); + self::assertInstanceOf(Models\ValueConversionType\OwningManyToManyEntity::class, $owning); } /** @@ -93,8 +93,8 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr 'def' ); - $this->assertEquals('abc', $inversed->id1); - $this->assertEquals('def', $owning->id2); + self::assertEquals('abc', $inversed->id1); + self::assertEquals('def', $owning->id2); } /** @@ -107,7 +107,7 @@ public function testThatTheCollectionFromOwningToInversedIsLoaded() 'def' ); - $this->assertCount(1, $owning->associatedEntities); + self::assertCount(1, $owning->associatedEntities); } /** @@ -120,7 +120,7 @@ public function testThatTheCollectionFromInversedToOwningIsLoaded() 'abc' ); - $this->assertCount(1, $inversed->associatedEntities); + self::assertCount(1, $inversed->associatedEntities); } /** @@ -148,6 +148,6 @@ public function testThatTheJoinTableRowsAreRemovedWhenRemovingTheAssociation() // test association is removed - $this->assertEquals(0, $conn->fetchColumn('SELECT COUNT(*) FROM vct_xref_manytomany')); + self::assertEquals(0, $conn->fetchColumn('SELECT COUNT(*) FROM vct_xref_manytomany')); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdForeignKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdForeignKeyTest.php index b76687bc4b3..3c19fd5ff41 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdForeignKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdForeignKeyTest.php @@ -58,14 +58,14 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { $conn = $this->_em->getConnection(); - $this->assertEquals('nop', $conn->fetchColumn('SELECT id4 FROM vct_auxiliary LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT id4 FROM vct_auxiliary LIMIT 1')); - $this->assertEquals('qrs', $conn->fetchColumn('SELECT id1 FROM vct_inversed_onetomany_compositeid_foreignkey LIMIT 1')); - $this->assertEquals('nop', $conn->fetchColumn('SELECT foreign_id FROM vct_inversed_onetomany_compositeid_foreignkey LIMIT 1')); + self::assertEquals('qrs', $conn->fetchColumn('SELECT id1 FROM vct_inversed_onetomany_compositeid_foreignkey LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT foreign_id FROM vct_inversed_onetomany_compositeid_foreignkey LIMIT 1')); - $this->assertEquals('tuv', $conn->fetchColumn('SELECT id2 FROM vct_owning_manytoone_compositeid_foreignkey LIMIT 1')); - $this->assertEquals('qrs', $conn->fetchColumn('SELECT associated_id FROM vct_owning_manytoone_compositeid_foreignkey LIMIT 1')); - $this->assertEquals('nop', $conn->fetchColumn('SELECT associated_foreign_id FROM vct_owning_manytoone_compositeid_foreignkey LIMIT 1')); + self::assertEquals('tuv', $conn->fetchColumn('SELECT id2 FROM vct_owning_manytoone_compositeid_foreignkey LIMIT 1')); + self::assertEquals('qrs', $conn->fetchColumn('SELECT associated_id FROM vct_owning_manytoone_compositeid_foreignkey LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT associated_foreign_id FROM vct_owning_manytoone_compositeid_foreignkey LIMIT 1')); } /** @@ -88,9 +88,9 @@ public function testThatEntitiesAreFetchedFromTheDatabase() 'ghi' ); - $this->assertInstanceOf(Models\ValueConversionType\AuxiliaryEntity::class, $auxiliary); - $this->assertInstanceOf(Models\ValueConversionType\InversedOneToManyCompositeIdForeignKeyEntity::class, $inversed); - $this->assertInstanceOf(Models\ValueConversionType\OwningManyToOneCompositeIdForeignKeyEntity::class, $owning); + self::assertInstanceOf(Models\ValueConversionType\AuxiliaryEntity::class, $auxiliary); + self::assertInstanceOf(Models\ValueConversionType\InversedOneToManyCompositeIdForeignKeyEntity::class, $inversed); + self::assertInstanceOf(Models\ValueConversionType\OwningManyToOneCompositeIdForeignKeyEntity::class, $owning); } /** @@ -113,10 +113,10 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr 'ghi' ); - $this->assertEquals('abc', $auxiliary->id4); - $this->assertEquals('def', $inversed->id1); - $this->assertEquals('abc', $inversed->foreignEntity->id4); - $this->assertEquals('ghi', $owning->id2); + self::assertEquals('abc', $auxiliary->id4); + self::assertEquals('def', $inversed->id1); + self::assertEquals('abc', $inversed->foreignEntity->id4); + self::assertEquals('ghi', $owning->id2); } /** @@ -134,7 +134,7 @@ public function testThatInversedEntityIsFetchedFromTheDatabaseUsingAuxiliaryEnti ['id1' => 'def', 'foreignEntity' => $auxiliary] ); - $this->assertInstanceOf(Models\ValueConversionType\InversedOneToManyCompositeIdForeignKeyEntity::class, $inversed); + self::assertInstanceOf(Models\ValueConversionType\InversedOneToManyCompositeIdForeignKeyEntity::class, $inversed); } /** @@ -149,9 +149,9 @@ public function testThatTheProxyFromOwningToInversedIsLoaded() $inversedProxy = $owning->associatedEntity; - $this->assertSame('def', $inversedProxy->id1, 'Proxy identifier is converted'); + self::assertSame('def', $inversedProxy->id1, 'Proxy identifier is converted'); - $this->assertEquals('some value to be loaded', $inversedProxy->someProperty); + self::assertEquals('some value to be loaded', $inversedProxy->someProperty); } /** @@ -164,6 +164,6 @@ public function testThatTheCollectionFromInversedToOwningIsLoaded() ['id1' => 'def', 'foreignEntity' => 'abc'] ); - $this->assertCount(1, $inversed->associatedEntities); + self::assertCount(1, $inversed->associatedEntities); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdTest.php index 266a382e760..a7dcf972b4f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdTest.php @@ -52,12 +52,12 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { $conn = $this->_em->getConnection(); - $this->assertEquals('nop', $conn->fetchColumn('SELECT id1 FROM vct_inversed_onetomany_compositeid LIMIT 1')); - $this->assertEquals('qrs', $conn->fetchColumn('SELECT id2 FROM vct_inversed_onetomany_compositeid LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT id1 FROM vct_inversed_onetomany_compositeid LIMIT 1')); + self::assertEquals('qrs', $conn->fetchColumn('SELECT id2 FROM vct_inversed_onetomany_compositeid LIMIT 1')); - $this->assertEquals('tuv', $conn->fetchColumn('SELECT id3 FROM vct_owning_manytoone_compositeid LIMIT 1')); - $this->assertEquals('nop', $conn->fetchColumn('SELECT associated_id1 FROM vct_owning_manytoone_compositeid LIMIT 1')); - $this->assertEquals('qrs', $conn->fetchColumn('SELECT associated_id2 FROM vct_owning_manytoone_compositeid LIMIT 1')); + self::assertEquals('tuv', $conn->fetchColumn('SELECT id3 FROM vct_owning_manytoone_compositeid LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT associated_id1 FROM vct_owning_manytoone_compositeid LIMIT 1')); + self::assertEquals('qrs', $conn->fetchColumn('SELECT associated_id2 FROM vct_owning_manytoone_compositeid LIMIT 1')); } /** @@ -75,8 +75,8 @@ public function testThatEntitiesAreFetchedFromTheDatabase() 'ghi' ); - $this->assertInstanceOf(Models\ValueConversionType\InversedOneToManyCompositeIdEntity::class, $inversed); - $this->assertInstanceOf(Models\ValueConversionType\OwningManyToOneCompositeIdEntity::class, $owning); + self::assertInstanceOf(Models\ValueConversionType\InversedOneToManyCompositeIdEntity::class, $inversed); + self::assertInstanceOf(Models\ValueConversionType\OwningManyToOneCompositeIdEntity::class, $owning); } /** @@ -94,9 +94,9 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr 'ghi' ); - $this->assertEquals('abc', $inversed->id1); - $this->assertEquals('def', $inversed->id2); - $this->assertEquals('ghi', $owning->id3); + self::assertEquals('abc', $inversed->id1); + self::assertEquals('def', $inversed->id2); + self::assertEquals('ghi', $owning->id3); } /** @@ -111,7 +111,7 @@ public function testThatTheProxyFromOwningToInversedIsLoaded() $inversedProxy = $owning->associatedEntity; - $this->assertEquals('some value to be loaded', $inversedProxy->someProperty); + self::assertEquals('some value to be loaded', $inversedProxy->someProperty); } /** @@ -124,6 +124,6 @@ public function testThatTheCollectionFromInversedToOwningIsLoaded() ['id1' => 'abc', 'id2' => 'def'] ); - $this->assertCount(1, $inversed->associatedEntities); + self::assertCount(1, $inversed->associatedEntities); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyExtraLazyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyExtraLazyTest.php index 9da341467a4..ea50a2b06ff 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyExtraLazyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyExtraLazyTest.php @@ -66,7 +66,7 @@ public function testThatExtraLazyCollectionIsCounted() 'abc' ); - $this->assertEquals(3, $inversed->associatedEntities->count()); + self::assertEquals(3, $inversed->associatedEntities->count()); } public function testThatExtraLazyCollectionContainsAnEntity() @@ -81,7 +81,7 @@ public function testThatExtraLazyCollectionContainsAnEntity() 'def' ); - $this->assertTrue($inversed->associatedEntities->contains($owning)); + self::assertTrue($inversed->associatedEntities->contains($owning)); } public function testThatExtraLazyCollectionContainsAnIndexbyKey() @@ -91,7 +91,7 @@ public function testThatExtraLazyCollectionContainsAnIndexbyKey() 'abc' ); - $this->assertTrue($inversed->associatedEntities->containsKey('def')); + self::assertTrue($inversed->associatedEntities->containsKey('def')); } public function testThatASliceOfTheExtraLazyCollectionIsLoaded() @@ -101,6 +101,6 @@ public function testThatASliceOfTheExtraLazyCollectionIsLoaded() 'abc' ); - $this->assertCount(2, $inversed->associatedEntities->slice(0, 2)); + self::assertCount(2, $inversed->associatedEntities->slice(0, 2)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyTest.php index 6a10296a7f9..e671bb85cfa 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyTest.php @@ -51,10 +51,10 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { $conn = $this->_em->getConnection(); - $this->assertEquals('nop', $conn->fetchColumn('SELECT id1 FROM vct_inversed_onetomany LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT id1 FROM vct_inversed_onetomany LIMIT 1')); - $this->assertEquals('qrs', $conn->fetchColumn('SELECT id2 FROM vct_owning_manytoone LIMIT 1')); - $this->assertEquals('nop', $conn->fetchColumn('SELECT associated_id FROM vct_owning_manytoone LIMIT 1')); + self::assertEquals('qrs', $conn->fetchColumn('SELECT id2 FROM vct_owning_manytoone LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT associated_id FROM vct_owning_manytoone LIMIT 1')); } /** @@ -72,8 +72,8 @@ public function testThatEntitiesAreFetchedFromTheDatabase() 'def' ); - $this->assertInstanceOf(Models\ValueConversionType\InversedOneToManyEntity::class, $inversed); - $this->assertInstanceOf(Models\ValueConversionType\OwningManyToOneEntity::class, $owning); + self::assertInstanceOf(Models\ValueConversionType\InversedOneToManyEntity::class, $inversed); + self::assertInstanceOf(Models\ValueConversionType\OwningManyToOneEntity::class, $owning); } /** @@ -91,8 +91,8 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr 'def' ); - $this->assertEquals('abc', $inversed->id1); - $this->assertEquals('def', $owning->id2); + self::assertEquals('abc', $inversed->id1); + self::assertEquals('def', $owning->id2); } /** @@ -107,7 +107,7 @@ public function testThatTheProxyFromOwningToInversedIsLoaded() $inversedProxy = $owning->associatedEntity; - $this->assertEquals('some value to be loaded', $inversedProxy->someProperty); + self::assertEquals('some value to be loaded', $inversedProxy->someProperty); } /** @@ -120,6 +120,6 @@ public function testThatTheCollectionFromInversedToOwningIsLoaded() 'abc' ); - $this->assertCount(1, $inversed->associatedEntities); + self::assertCount(1, $inversed->associatedEntities); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdForeignKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdForeignKeyTest.php index 206ca7e3258..544d8e2eab6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdForeignKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdForeignKeyTest.php @@ -57,14 +57,14 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { $conn = $this->_em->getConnection(); - $this->assertEquals('nop', $conn->fetchColumn('SELECT id4 FROM vct_auxiliary LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT id4 FROM vct_auxiliary LIMIT 1')); - $this->assertEquals('qrs', $conn->fetchColumn('SELECT id1 FROM vct_inversed_onetoone_compositeid_foreignkey LIMIT 1')); - $this->assertEquals('nop', $conn->fetchColumn('SELECT foreign_id FROM vct_inversed_onetoone_compositeid_foreignkey LIMIT 1')); + self::assertEquals('qrs', $conn->fetchColumn('SELECT id1 FROM vct_inversed_onetoone_compositeid_foreignkey LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT foreign_id FROM vct_inversed_onetoone_compositeid_foreignkey LIMIT 1')); - $this->assertEquals('tuv', $conn->fetchColumn('SELECT id2 FROM vct_owning_onetoone_compositeid_foreignkey LIMIT 1')); - $this->assertEquals('qrs', $conn->fetchColumn('SELECT associated_id FROM vct_owning_onetoone_compositeid_foreignkey LIMIT 1')); - $this->assertEquals('nop', $conn->fetchColumn('SELECT associated_foreign_id FROM vct_owning_onetoone_compositeid_foreignkey LIMIT 1')); + self::assertEquals('tuv', $conn->fetchColumn('SELECT id2 FROM vct_owning_onetoone_compositeid_foreignkey LIMIT 1')); + self::assertEquals('qrs', $conn->fetchColumn('SELECT associated_id FROM vct_owning_onetoone_compositeid_foreignkey LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT associated_foreign_id FROM vct_owning_onetoone_compositeid_foreignkey LIMIT 1')); } /** @@ -87,9 +87,9 @@ public function testThatEntitiesAreFetchedFromTheDatabase() 'ghi' ); - $this->assertInstanceOf(Models\ValueConversionType\AuxiliaryEntity::class, $auxiliary); - $this->assertInstanceOf(Models\ValueConversionType\InversedOneToOneCompositeIdForeignKeyEntity::class, $inversed); - $this->assertInstanceOf(Models\ValueConversionType\OwningOneToOneCompositeIdForeignKeyEntity::class, $owning); + self::assertInstanceOf(Models\ValueConversionType\AuxiliaryEntity::class, $auxiliary); + self::assertInstanceOf(Models\ValueConversionType\InversedOneToOneCompositeIdForeignKeyEntity::class, $inversed); + self::assertInstanceOf(Models\ValueConversionType\OwningOneToOneCompositeIdForeignKeyEntity::class, $owning); } /** @@ -112,10 +112,10 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr 'ghi' ); - $this->assertEquals('abc', $auxiliary->id4); - $this->assertEquals('def', $inversed->id1); - $this->assertEquals('abc', $inversed->foreignEntity->id4); - $this->assertEquals('ghi', $owning->id2); + self::assertEquals('abc', $auxiliary->id4); + self::assertEquals('def', $inversed->id1); + self::assertEquals('abc', $inversed->foreignEntity->id4); + self::assertEquals('ghi', $owning->id2); } /** @@ -133,7 +133,7 @@ public function testThatInversedEntityIsFetchedFromTheDatabaseUsingAuxiliaryEnti ['id1' => 'def', 'foreignEntity' => $auxiliary] ); - $this->assertInstanceOf(Models\ValueConversionType\InversedOneToOneCompositeIdForeignKeyEntity::class, $inversed); + self::assertInstanceOf(Models\ValueConversionType\InversedOneToOneCompositeIdForeignKeyEntity::class, $inversed); } /** @@ -148,7 +148,7 @@ public function testThatTheProxyFromOwningToInversedIsLoaded() $inversedProxy = $owning->associatedEntity; - $this->assertEquals('some value to be loaded', $inversedProxy->someProperty); + self::assertEquals('some value to be loaded', $inversedProxy->someProperty); } /** @@ -161,6 +161,6 @@ public function testThatTheEntityFromInversedToOwningIsEagerLoaded() ['id1' => 'def', 'foreignEntity' => 'abc'] ); - $this->assertInstanceOf(Models\ValueConversionType\OwningOneToOneCompositeIdForeignKeyEntity::class, $inversed->associatedEntity); + self::assertInstanceOf(Models\ValueConversionType\OwningOneToOneCompositeIdForeignKeyEntity::class, $inversed->associatedEntity); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdTest.php index 428fe80c6c5..ef52774976f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdTest.php @@ -51,12 +51,12 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { $conn = $this->_em->getConnection(); - $this->assertEquals('nop', $conn->fetchColumn('SELECT id1 FROM vct_inversed_onetoone_compositeid LIMIT 1')); - $this->assertEquals('qrs', $conn->fetchColumn('SELECT id2 FROM vct_inversed_onetoone_compositeid LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT id1 FROM vct_inversed_onetoone_compositeid LIMIT 1')); + self::assertEquals('qrs', $conn->fetchColumn('SELECT id2 FROM vct_inversed_onetoone_compositeid LIMIT 1')); - $this->assertEquals('tuv', $conn->fetchColumn('SELECT id3 FROM vct_owning_onetoone_compositeid LIMIT 1')); - $this->assertEquals('nop', $conn->fetchColumn('SELECT associated_id1 FROM vct_owning_onetoone_compositeid LIMIT 1')); - $this->assertEquals('qrs', $conn->fetchColumn('SELECT associated_id2 FROM vct_owning_onetoone_compositeid LIMIT 1')); + self::assertEquals('tuv', $conn->fetchColumn('SELECT id3 FROM vct_owning_onetoone_compositeid LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT associated_id1 FROM vct_owning_onetoone_compositeid LIMIT 1')); + self::assertEquals('qrs', $conn->fetchColumn('SELECT associated_id2 FROM vct_owning_onetoone_compositeid LIMIT 1')); } /** @@ -74,8 +74,8 @@ public function testThatEntitiesAreFetchedFromTheDatabase() 'ghi' ); - $this->assertInstanceOf(Models\ValueConversionType\InversedOneToOneCompositeIdEntity::class, $inversed); - $this->assertInstanceOf(Models\ValueConversionType\OwningOneToOneCompositeIdEntity::class, $owning); + self::assertInstanceOf(Models\ValueConversionType\InversedOneToOneCompositeIdEntity::class, $inversed); + self::assertInstanceOf(Models\ValueConversionType\OwningOneToOneCompositeIdEntity::class, $owning); } /** @@ -93,9 +93,9 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr 'ghi' ); - $this->assertEquals('abc', $inversed->id1); - $this->assertEquals('def', $inversed->id2); - $this->assertEquals('ghi', $owning->id3); + self::assertEquals('abc', $inversed->id1); + self::assertEquals('def', $inversed->id2); + self::assertEquals('ghi', $owning->id3); } /** @@ -110,7 +110,7 @@ public function testThatTheProxyFromOwningToInversedIsLoaded() $inversedProxy = $owning->associatedEntity; - $this->assertEquals('some value to be loaded', $inversedProxy->someProperty); + self::assertEquals('some value to be loaded', $inversedProxy->someProperty); } /** @@ -123,6 +123,6 @@ public function testThatTheEntityFromInversedToOwningIsEagerLoaded() ['id1' => 'abc', 'id2' => 'def'] ); - $this->assertInstanceOf(Models\ValueConversionType\OwningOneToOneCompositeIdEntity::class, $inversed->associatedEntity); + self::assertInstanceOf(Models\ValueConversionType\OwningOneToOneCompositeIdEntity::class, $inversed->associatedEntity); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneTest.php index 8ca8eebe56d..5c39cc17f3c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneTest.php @@ -51,10 +51,10 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { $conn = $this->_em->getConnection(); - $this->assertEquals('nop', $conn->fetchColumn('SELECT id1 FROM vct_inversed_onetoone LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT id1 FROM vct_inversed_onetoone LIMIT 1')); - $this->assertEquals('qrs', $conn->fetchColumn('SELECT id2 FROM vct_owning_onetoone LIMIT 1')); - $this->assertEquals('nop', $conn->fetchColumn('SELECT associated_id FROM vct_owning_onetoone LIMIT 1')); + self::assertEquals('qrs', $conn->fetchColumn('SELECT id2 FROM vct_owning_onetoone LIMIT 1')); + self::assertEquals('nop', $conn->fetchColumn('SELECT associated_id FROM vct_owning_onetoone LIMIT 1')); } /** @@ -72,8 +72,8 @@ public function testThatEntitiesAreFetchedFromTheDatabase() 'def' ); - $this->assertInstanceOf(Models\ValueConversionType\InversedOneToOneEntity::class, $inversed); - $this->assertInstanceOf(Models\ValueConversionType\OwningOneToOneEntity::class, $owning); + self::assertInstanceOf(Models\ValueConversionType\InversedOneToOneEntity::class, $inversed); + self::assertInstanceOf(Models\ValueConversionType\OwningOneToOneEntity::class, $owning); } /** @@ -91,8 +91,8 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr 'def' ); - $this->assertEquals('abc', $inversed->id1); - $this->assertEquals('def', $owning->id2); + self::assertEquals('abc', $inversed->id1); + self::assertEquals('def', $owning->id2); } /** @@ -107,7 +107,7 @@ public function testThatTheProxyFromOwningToInversedIsLoaded() $inversedProxy = $owning->associatedEntity; - $this->assertEquals('some value to be loaded', $inversedProxy->someProperty); + self::assertEquals('some value to be loaded', $inversedProxy->someProperty); } /** @@ -120,6 +120,6 @@ public function testThatTheEntityFromInversedToOwningIsEagerLoaded() 'abc' ); - $this->assertInstanceOf(Models\ValueConversionType\OwningOneToOneEntity::class, $inversed->associatedEntity); + self::assertInstanceOf(Models\ValueConversionType\OwningOneToOneEntity::class, $inversed->associatedEntity); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueObjectsTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueObjectsTest.php index ff5de971acd..5055fb12950 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueObjectsTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueObjectsTest.php @@ -35,8 +35,8 @@ public function testMetadataHasReflectionEmbeddablesAccessible() { $classMetadata = $this->_em->getClassMetadata(DDC93Person::class); - $this->assertInstanceOf(RuntimePublicReflectionProperty::class, $classMetadata->getReflectionProperty('address')); - $this->assertInstanceOf(ReflectionEmbeddedProperty::class, $classMetadata->getReflectionProperty('address.street')); + self::assertInstanceOf(RuntimePublicReflectionProperty::class, $classMetadata->getReflectionProperty('address')); + self::assertInstanceOf(ReflectionEmbeddedProperty::class, $classMetadata->getReflectionProperty('address.street')); } public function testCRUD() @@ -58,12 +58,12 @@ public function testCRUD() // 2. check loading value objects works $person = $this->_em->find(DDC93Person::class, $person->id); - $this->assertInstanceOf(DDC93Address::class, $person->address); - $this->assertEquals('United States of Tara Street', $person->address->street); - $this->assertEquals('12345', $person->address->zip); - $this->assertEquals('funkytown', $person->address->city); - $this->assertInstanceOf(DDC93Country::class, $person->address->country); - $this->assertEquals('Germany', $person->address->country->name); + self::assertInstanceOf(DDC93Address::class, $person->address); + self::assertEquals('United States of Tara Street', $person->address->street); + self::assertEquals('12345', $person->address->zip); + self::assertEquals('funkytown', $person->address->city); + self::assertInstanceOf(DDC93Country::class, $person->address->country); + self::assertEquals('Germany', $person->address->country->name); // 3. check changing value objects works $person->address->street = "Street"; @@ -76,17 +76,17 @@ public function testCRUD() $person = $this->_em->find(DDC93Person::class, $person->id); - $this->assertEquals('Street', $person->address->street); - $this->assertEquals('54321', $person->address->zip); - $this->assertEquals('another town', $person->address->city); - $this->assertEquals('United States of America', $person->address->country->name); + self::assertEquals('Street', $person->address->street); + self::assertEquals('54321', $person->address->zip); + self::assertEquals('another town', $person->address->city); + self::assertEquals('United States of America', $person->address->country->name); // 4. check deleting works $personId = $person->id;; $this->_em->remove($person); $this->_em->flush(); - $this->assertNull($this->_em->find(DDC93Person::class, $personId)); + self::assertNull($this->_em->find(DDC93Person::class, $personId)); } public function testLoadDql() @@ -109,24 +109,24 @@ public function testLoadDql() $dql = "SELECT p FROM " . __NAMESPACE__ . "\DDC93Person p"; $persons = $this->_em->createQuery($dql)->getResult(); - $this->assertCount(3, $persons); + self::assertCount(3, $persons); foreach ($persons as $person) { - $this->assertInstanceOf(DDC93Address::class, $person->address); - $this->assertEquals('Tree', $person->address->street); - $this->assertEquals('12345', $person->address->zip); - $this->assertEquals('funkytown', $person->address->city); - $this->assertInstanceOf(DDC93Country::class, $person->address->country); - $this->assertEquals('United States of America', $person->address->country->name); + self::assertInstanceOf(DDC93Address::class, $person->address); + self::assertEquals('Tree', $person->address->street); + self::assertEquals('12345', $person->address->zip); + self::assertEquals('funkytown', $person->address->city); + self::assertInstanceOf(DDC93Country::class, $person->address->country); + self::assertEquals('United States of America', $person->address->country->name); } $dql = "SELECT p FROM " . __NAMESPACE__ . "\DDC93Person p"; $persons = $this->_em->createQuery($dql)->getArrayResult(); foreach ($persons as $person) { - $this->assertEquals('Tree', $person['address.street']); - $this->assertEquals('12345', $person['address.zip']); - $this->assertEquals('funkytown', $person['address.city']); - $this->assertEquals('United States of America', $person['address.country.name']); + self::assertEquals('Tree', $person['address.street']); + self::assertEquals('12345', $person['address.zip']); + self::assertEquals('funkytown', $person['address.city']); + self::assertEquals('United States of America', $person['address.country.name']); } } @@ -149,9 +149,9 @@ public function testDqlOnEmbeddedObjectsField() ->setParameter('city', 'Karlsruhe') ->setParameter('country', 'Germany') ->getSingleResult(); - $this->assertEquals($person, $loadedPerson); + self::assertEquals($person, $loadedPerson); - $this->assertNull( + self::assertNull( $this->_em->createQuery($selectDql) ->setParameter('city', 'asdf') ->setParameter('country', 'Germany') @@ -167,8 +167,8 @@ public function testDqlOnEmbeddedObjectsField() ->execute(); $this->_em->refresh($person); - $this->assertEquals('Boo', $person->address->street); - $this->assertEquals('DE', $person->address->country->name); + self::assertEquals('Boo', $person->address->street); + self::assertEquals('DE', $person->address->country->name); // DELETE $this->_em->createQuery("DELETE " . __NAMESPACE__ . "\\DDC93Person p WHERE p.address.city = :city AND p.address.country.name = :country") @@ -177,7 +177,7 @@ public function testDqlOnEmbeddedObjectsField() ->execute(); $this->_em->clear(); - $this->assertNull($this->_em->find(DDC93Person::class, $person->id)); + self::assertNull($this->_em->find(DDC93Person::class, $person->id)); } public function testPartialDqlOnEmbeddedObjectsField() @@ -194,10 +194,10 @@ public function testPartialDqlOnEmbeddedObjectsField() ->setParameter('name', 'Karl') ->getSingleResult(); - $this->assertEquals('Gosport', $person->address->city); - $this->assertEquals('Foo', $person->address->street); - $this->assertEquals('12345', $person->address->zip); - $this->assertEquals('England', $person->address->country->name); + self::assertEquals('Gosport', $person->address->city); + self::assertEquals('Foo', $person->address->street); + self::assertEquals('12345', $person->address->zip); + self::assertEquals('England', $person->address->country->name); // Clear the EM and prove that the embeddable can be the subject of a partial query. $this->_em->clear(); @@ -209,11 +209,11 @@ public function testPartialDqlOnEmbeddedObjectsField() ->getSingleResult(); // Selected field must be equal, all other fields must be null. - $this->assertEquals('Gosport', $person->address->city); - $this->assertNull($person->address->street); - $this->assertNull($person->address->zip); - $this->assertNull($person->address->country); - $this->assertNull($person->name); + self::assertEquals('Gosport', $person->address->city); + self::assertNull($person->address->street); + self::assertNull($person->address->zip); + self::assertNull($person->address->country); + self::assertNull($person->name); // Clear the EM and prove that the embeddable can be the subject of a partial query regardless of attributes positions. $this->_em->clear(); @@ -225,11 +225,11 @@ public function testPartialDqlOnEmbeddedObjectsField() ->getSingleResult(); // Selected field must be equal, all other fields must be null. - $this->assertEquals('Gosport', $person->address->city); - $this->assertNull($person->address->street); - $this->assertNull($person->address->zip); - $this->assertNull($person->address->country); - $this->assertNull($person->name); + self::assertEquals('Gosport', $person->address->city); + self::assertNull($person->address->street); + self::assertNull($person->address->zip); + self::assertNull($person->address->country); + self::assertNull($person->name); } public function testDqlWithNonExistentEmbeddableField() @@ -257,27 +257,27 @@ public function testEmbeddableWithInheritance() $this->_em->flush($car); $reloadedCar = $this->_em->find(DDC93Car::class, $car->id); - $this->assertEquals($car, $reloadedCar); + self::assertEquals($car, $reloadedCar); } public function testInlineEmbeddableWithPrefix() { $metadata = $this->_em->getClassMetadata(DDC3028PersonWithPrefix::class); - $this->assertEquals('foobar_id', $metadata->getColumnName('id.id')); - $this->assertEquals('bloo_foo_id', $metadata->getColumnName('nested.nestedWithPrefix.id')); - $this->assertEquals('bloo_nestedWithEmptyPrefix_id', $metadata->getColumnName('nested.nestedWithEmptyPrefix.id')); - $this->assertEquals('bloo_id', $metadata->getColumnName('nested.nestedWithPrefixFalse.id')); + self::assertEquals('foobar_id', $metadata->getColumnName('id.id')); + self::assertEquals('bloo_foo_id', $metadata->getColumnName('nested.nestedWithPrefix.id')); + self::assertEquals('bloo_nestedWithEmptyPrefix_id', $metadata->getColumnName('nested.nestedWithEmptyPrefix.id')); + self::assertEquals('bloo_id', $metadata->getColumnName('nested.nestedWithPrefixFalse.id')); } public function testInlineEmbeddableEmptyPrefix() { $metadata = $this->_em->getClassMetadata(DDC3028PersonEmptyPrefix::class); - $this->assertEquals('id_id', $metadata->getColumnName('id.id')); - $this->assertEquals('nested_foo_id', $metadata->getColumnName('nested.nestedWithPrefix.id')); - $this->assertEquals('nested_nestedWithEmptyPrefix_id', $metadata->getColumnName('nested.nestedWithEmptyPrefix.id')); - $this->assertEquals('nested_id', $metadata->getColumnName('nested.nestedWithPrefixFalse.id')); + self::assertEquals('id_id', $metadata->getColumnName('id.id')); + self::assertEquals('nested_foo_id', $metadata->getColumnName('nested.nestedWithPrefix.id')); + self::assertEquals('nested_nestedWithEmptyPrefix_id', $metadata->getColumnName('nested.nestedWithEmptyPrefix.id')); + self::assertEquals('nested_id', $metadata->getColumnName('nested.nestedWithPrefixFalse.id')); } public function testInlineEmbeddablePrefixFalse() @@ -288,7 +288,7 @@ public function testInlineEmbeddablePrefixFalse() ->getClassMetadata(DDC3028PersonPrefixFalse::class) ->getColumnName('id.id'); - $this->assertEquals($expectedColumnName, $actualColumnName); + self::assertEquals($expectedColumnName, $actualColumnName); } public function testInlineEmbeddableInMappedSuperClass() @@ -297,7 +297,7 @@ public function testInlineEmbeddableInMappedSuperClass() ->getClassMetadata(DDC3027Dog::class) ->hasField('address.street'); - $this->assertTrue($isFieldMapped); + self::assertTrue($isFieldMapped); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/VersionedOneToOneTest.php b/tests/Doctrine/Tests/ORM/Functional/VersionedOneToOneTest.php index f8062f9954e..918a2366764 100644 --- a/tests/Doctrine/Tests/ORM/Functional/VersionedOneToOneTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/VersionedOneToOneTest.php @@ -56,8 +56,8 @@ public function testSetVersionOnCreate() $secondEntity = $this->_em->getRepository(SecondRelatedEntity::class) ->findOneBy(['name' => 'Bob']); - $this->assertSame($firstRelatedEntity, $firstEntity); - $this->assertSame($secondRelatedEntity, $secondEntity); - $this->assertSame($firstEntity->secondEntity, $secondEntity); + self::assertSame($firstRelatedEntity, $firstEntity); + self::assertSame($secondRelatedEntity, $secondEntity); + self::assertSame($firstEntity->secondEntity, $secondEntity); } } diff --git a/tests/Doctrine/Tests/ORM/Hydration/ArrayHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/ArrayHydratorTest.php index 0dfd66b44ef..e8bec62d507 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ArrayHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ArrayHydratorTest.php @@ -52,14 +52,14 @@ public function testSimpleEntityQuery() $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals(2, count($result)); - $this->assertTrue(is_array($result)); + self::assertEquals(2, count($result)); + self::assertTrue(is_array($result)); - $this->assertEquals(1, $result[0]['id']); - $this->assertEquals('romanb', $result[0]['name']); + self::assertEquals(1, $result[0]['id']); + self::assertEquals('romanb', $result[0]['name']); - $this->assertEquals(2, $result[1]['id']); - $this->assertEquals('jwage', $result[1]['name']); + self::assertEquals(2, $result[1]['id']); + self::assertEquals('jwage', $result[1]['name']); } /** @@ -96,24 +96,24 @@ public function testSimpleEntityWithScalarQuery($userEntityKey) $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals(2, count($result)); - $this->assertTrue(is_array($result)); + self::assertEquals(2, count($result)); + self::assertTrue(is_array($result)); - $this->assertArrayHasKey('nameUpper', $result[0]); - $this->assertArrayNotHasKey('id', $result[0]); - $this->assertArrayNotHasKey('name', $result[0]); + self::assertArrayHasKey('nameUpper', $result[0]); + self::assertArrayNotHasKey('id', $result[0]); + self::assertArrayNotHasKey('name', $result[0]); - $this->assertArrayHasKey(0, $result[0]); - $this->assertArrayHasKey('id', $result[0][0]); - $this->assertArrayHasKey('name', $result[0][0]); + self::assertArrayHasKey(0, $result[0]); + self::assertArrayHasKey('id', $result[0][0]); + self::assertArrayHasKey('name', $result[0][0]); - $this->assertArrayHasKey('nameUpper', $result[1]); - $this->assertArrayNotHasKey('id', $result[1]); - $this->assertArrayNotHasKey('name', $result[1]); + self::assertArrayHasKey('nameUpper', $result[1]); + self::assertArrayNotHasKey('id', $result[1]); + self::assertArrayNotHasKey('name', $result[1]); - $this->assertArrayHasKey(0, $result[1]); - $this->assertArrayHasKey('id', $result[1][0]); - $this->assertArrayHasKey('name', $result[1][0]); + self::assertArrayHasKey(0, $result[1]); + self::assertArrayHasKey('id', $result[1][0]); + self::assertArrayHasKey('name', $result[1][0]); } /** @@ -144,16 +144,16 @@ public function testSimpleEntityQueryWithAliasedUserEntity() $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals(2, count($result)); - $this->assertTrue(is_array($result)); + self::assertEquals(2, count($result)); + self::assertTrue(is_array($result)); - $this->assertArrayHasKey('user', $result[0]); - $this->assertEquals(1, $result[0]['user']['id']); - $this->assertEquals('romanb', $result[0]['user']['name']); + self::assertArrayHasKey('user', $result[0]); + self::assertEquals(1, $result[0]['user']['id']); + self::assertEquals('romanb', $result[0]['user']['name']); - $this->assertArrayHasKey('user', $result[1]); - $this->assertEquals(2, $result[1]['user']['id']); - $this->assertEquals('jwage', $result[1]['user']['name']); + self::assertArrayHasKey('user', $result[1]); + self::assertEquals(2, $result[1]['user']['id']); + self::assertEquals('jwage', $result[1]['user']['name']); } /** @@ -191,19 +191,19 @@ public function testSimpleMultipleRootEntityQuery() $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals(4, count($result)); + self::assertEquals(4, count($result)); - $this->assertEquals(1, $result[0]['id']); - $this->assertEquals('romanb', $result[0]['name']); + self::assertEquals(1, $result[0]['id']); + self::assertEquals('romanb', $result[0]['name']); - $this->assertEquals(1, $result[1]['id']); - $this->assertEquals('Cool things.', $result[1]['topic']); + self::assertEquals(1, $result[1]['id']); + self::assertEquals('Cool things.', $result[1]['topic']); - $this->assertEquals(2, $result[2]['id']); - $this->assertEquals('jwage', $result[2]['name']); + self::assertEquals(2, $result[2]['id']); + self::assertEquals('jwage', $result[2]['name']); - $this->assertEquals(2, $result[3]['id']); - $this->assertEquals('Cool things II.', $result[3]['topic']); + self::assertEquals(2, $result[3]['id']); + self::assertEquals('Cool things II.', $result[3]['topic']); } /** @@ -241,23 +241,23 @@ public function testSimpleMultipleRootEntityQueryWithAliasedUserEntity() $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals(4, count($result)); + self::assertEquals(4, count($result)); - $this->assertArrayHasKey('user', $result[0]); - $this->assertEquals(1, $result[0]['user']['id']); - $this->assertEquals('romanb', $result[0]['user']['name']); + self::assertArrayHasKey('user', $result[0]); + self::assertEquals(1, $result[0]['user']['id']); + self::assertEquals('romanb', $result[0]['user']['name']); - $this->assertArrayHasKey(0, $result[1]); - $this->assertEquals(1, $result[1][0]['id']); - $this->assertEquals('Cool things.', $result[1][0]['topic']); + self::assertArrayHasKey(0, $result[1]); + self::assertEquals(1, $result[1][0]['id']); + self::assertEquals('Cool things.', $result[1][0]['topic']); - $this->assertArrayHasKey('user', $result[2]); - $this->assertEquals(2, $result[2]['user']['id']); - $this->assertEquals('jwage', $result[2]['user']['name']); + self::assertArrayHasKey('user', $result[2]); + self::assertEquals(2, $result[2]['user']['id']); + self::assertEquals('jwage', $result[2]['user']['name']); - $this->assertArrayHasKey(0, $result[3]); - $this->assertEquals(2, $result[3][0]['id']); - $this->assertEquals('Cool things II.', $result[3][0]['topic']); + self::assertArrayHasKey(0, $result[3]); + self::assertEquals(2, $result[3][0]['id']); + self::assertEquals('Cool things II.', $result[3][0]['topic']); } /** @@ -295,23 +295,23 @@ public function testSimpleMultipleRootEntityQueryWithAliasedArticleEntity() $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals(4, count($result)); + self::assertEquals(4, count($result)); - $this->assertArrayHasKey(0, $result[0]); - $this->assertEquals(1, $result[0][0]['id']); - $this->assertEquals('romanb', $result[0][0]['name']); + self::assertArrayHasKey(0, $result[0]); + self::assertEquals(1, $result[0][0]['id']); + self::assertEquals('romanb', $result[0][0]['name']); - $this->assertArrayHasKey('article', $result[1]); - $this->assertEquals(1, $result[1]['article']['id']); - $this->assertEquals('Cool things.', $result[1]['article']['topic']); + self::assertArrayHasKey('article', $result[1]); + self::assertEquals(1, $result[1]['article']['id']); + self::assertEquals('Cool things.', $result[1]['article']['topic']); - $this->assertArrayHasKey(0, $result[2]); - $this->assertEquals(2, $result[2][0]['id']); - $this->assertEquals('jwage', $result[2][0]['name']); + self::assertArrayHasKey(0, $result[2]); + self::assertEquals(2, $result[2][0]['id']); + self::assertEquals('jwage', $result[2][0]['name']); - $this->assertArrayHasKey('article', $result[3]); - $this->assertEquals(2, $result[3]['article']['id']); - $this->assertEquals('Cool things II.', $result[3]['article']['topic']); + self::assertArrayHasKey('article', $result[3]); + self::assertEquals(2, $result[3]['article']['id']); + self::assertEquals('Cool things II.', $result[3]['article']['topic']); } /** @@ -349,23 +349,23 @@ public function testSimpleMultipleRootEntityQueryWithAliasedEntities() $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals(4, count($result)); + self::assertEquals(4, count($result)); - $this->assertArrayHasKey('user', $result[0]); - $this->assertEquals(1, $result[0]['user']['id']); - $this->assertEquals('romanb', $result[0]['user']['name']); + self::assertArrayHasKey('user', $result[0]); + self::assertEquals(1, $result[0]['user']['id']); + self::assertEquals('romanb', $result[0]['user']['name']); - $this->assertArrayHasKey('article', $result[1]); - $this->assertEquals(1, $result[1]['article']['id']); - $this->assertEquals('Cool things.', $result[1]['article']['topic']); + self::assertArrayHasKey('article', $result[1]); + self::assertEquals(1, $result[1]['article']['id']); + self::assertEquals('Cool things.', $result[1]['article']['topic']); - $this->assertArrayHasKey('user', $result[2]); - $this->assertEquals(2, $result[2]['user']['id']); - $this->assertEquals('jwage', $result[2]['user']['name']); + self::assertArrayHasKey('user', $result[2]); + self::assertEquals(2, $result[2]['user']['id']); + self::assertEquals('jwage', $result[2]['user']['name']); - $this->assertArrayHasKey('article', $result[3]); - $this->assertEquals(2, $result[3]['article']['id']); - $this->assertEquals('Cool things II.', $result[3]['article']['topic']); + self::assertArrayHasKey('article', $result[3]); + self::assertEquals(2, $result[3]['article']['id']); + self::assertEquals('Cool things II.', $result[3]['article']['topic']); } /** @@ -404,18 +404,18 @@ public function testMixedQueryNormalJoin($userEntityKey) $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals(2, count($result)); - $this->assertTrue(is_array($result)); - $this->assertTrue(is_array($result[0])); - $this->assertTrue(is_array($result[1])); + self::assertEquals(2, count($result)); + self::assertTrue(is_array($result)); + self::assertTrue(is_array($result[0])); + self::assertTrue(is_array($result[1])); // first user => 2 phonenumbers - $this->assertArrayHasKey($userEntityKey, $result[0]); - $this->assertEquals(2, $result[0]['numPhones']); + self::assertArrayHasKey($userEntityKey, $result[0]); + self::assertEquals(2, $result[0]['numPhones']); // second user => 1 phonenumber - $this->assertArrayHasKey($userEntityKey, $result[1]); - $this->assertEquals(1, $result[1]['numPhones']); + self::assertArrayHasKey($userEntityKey, $result[1]); + self::assertEquals(1, $result[1]['numPhones']); } /** @@ -468,23 +468,23 @@ public function testMixedQueryFetchJoin($userEntityKey) $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals(2, count($result)); + self::assertEquals(2, count($result)); - $this->assertTrue(is_array($result)); - $this->assertTrue(is_array($result[0])); - $this->assertTrue(is_array($result[1])); + self::assertTrue(is_array($result)); + self::assertTrue(is_array($result[0])); + self::assertTrue(is_array($result[1])); // first user => 2 phonenumbers - $this->assertEquals(2, count($result[0][$userEntityKey]['phonenumbers'])); - $this->assertEquals('ROMANB', $result[0]['nameUpper']); + self::assertEquals(2, count($result[0][$userEntityKey]['phonenumbers'])); + self::assertEquals('ROMANB', $result[0]['nameUpper']); // second user => 1 phonenumber - $this->assertEquals(1, count($result[1][$userEntityKey]['phonenumbers'])); - $this->assertEquals('JWAGE', $result[1]['nameUpper']); + self::assertEquals(1, count($result[1][$userEntityKey]['phonenumbers'])); + self::assertEquals('JWAGE', $result[1]['nameUpper']); - $this->assertEquals(42, $result[0][$userEntityKey]['phonenumbers'][0]['phonenumber']); - $this->assertEquals(43, $result[0][$userEntityKey]['phonenumbers'][1]['phonenumber']); - $this->assertEquals(91, $result[1][$userEntityKey]['phonenumbers'][0]['phonenumber']); + self::assertEquals(42, $result[0][$userEntityKey]['phonenumbers'][0]['phonenumber']); + self::assertEquals(43, $result[0][$userEntityKey]['phonenumbers'][1]['phonenumber']); + self::assertEquals(91, $result[1][$userEntityKey]['phonenumbers'][0]['phonenumber']); } /** @@ -542,26 +542,26 @@ public function testMixedQueryFetchJoinCustomIndex($userEntityKey) $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals(2, count($result)); + self::assertEquals(2, count($result)); - $this->assertTrue(is_array($result)); - $this->assertTrue(is_array($result[1])); - $this->assertTrue(is_array($result[2])); + self::assertTrue(is_array($result)); + self::assertTrue(is_array($result[1])); + self::assertTrue(is_array($result[2])); // test the scalar values - $this->assertEquals('ROMANB', $result[1]['nameUpper']); - $this->assertEquals('JWAGE', $result[2]['nameUpper']); + self::assertEquals('ROMANB', $result[1]['nameUpper']); + self::assertEquals('JWAGE', $result[2]['nameUpper']); // first user => 2 phonenumbers. notice the custom indexing by user id - $this->assertEquals(2, count($result[1][$userEntityKey]['phonenumbers'])); + self::assertEquals(2, count($result[1][$userEntityKey]['phonenumbers'])); // second user => 1 phonenumber. notice the custom indexing by user id - $this->assertEquals(1, count($result[2][$userEntityKey]['phonenumbers'])); + self::assertEquals(1, count($result[2][$userEntityKey]['phonenumbers'])); // test the custom indexing of the phonenumbers - $this->assertTrue(isset($result[1][$userEntityKey]['phonenumbers']['42'])); - $this->assertTrue(isset($result[1][$userEntityKey]['phonenumbers']['43'])); - $this->assertTrue(isset($result[2][$userEntityKey]['phonenumbers']['91'])); + self::assertTrue(isset($result[1][$userEntityKey]['phonenumbers']['42'])); + self::assertTrue(isset($result[1][$userEntityKey]['phonenumbers']['43'])); + self::assertTrue(isset($result[2][$userEntityKey]['phonenumbers']['91'])); } /** @@ -656,27 +656,27 @@ public function testMixedQueryMultipleFetchJoin() $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals(2, count($result)); - $this->assertTrue(is_array($result)); - $this->assertTrue(is_array($result[0])); - $this->assertTrue(is_array($result[1])); + self::assertEquals(2, count($result)); + self::assertTrue(is_array($result)); + self::assertTrue(is_array($result[0])); + self::assertTrue(is_array($result[1])); // first user => 2 phonenumbers, 2 articles - $this->assertEquals(2, count($result[0][0]['phonenumbers'])); - $this->assertEquals(2, count($result[0][0]['articles'])); - $this->assertEquals('ROMANB', $result[0]['nameUpper']); + self::assertEquals(2, count($result[0][0]['phonenumbers'])); + self::assertEquals(2, count($result[0][0]['articles'])); + self::assertEquals('ROMANB', $result[0]['nameUpper']); // second user => 1 phonenumber, 2 articles - $this->assertEquals(1, count($result[1][0]['phonenumbers'])); - $this->assertEquals(2, count($result[1][0]['articles'])); - $this->assertEquals('JWAGE', $result[1]['nameUpper']); - - $this->assertEquals(42, $result[0][0]['phonenumbers'][0]['phonenumber']); - $this->assertEquals(43, $result[0][0]['phonenumbers'][1]['phonenumber']); - $this->assertEquals(91, $result[1][0]['phonenumbers'][0]['phonenumber']); - - $this->assertEquals('Getting things done!', $result[0][0]['articles'][0]['topic']); - $this->assertEquals('ZendCon', $result[0][0]['articles'][1]['topic']); - $this->assertEquals('LINQ', $result[1][0]['articles'][0]['topic']); - $this->assertEquals('PHP7', $result[1][0]['articles'][1]['topic']); + self::assertEquals(1, count($result[1][0]['phonenumbers'])); + self::assertEquals(2, count($result[1][0]['articles'])); + self::assertEquals('JWAGE', $result[1]['nameUpper']); + + self::assertEquals(42, $result[0][0]['phonenumbers'][0]['phonenumber']); + self::assertEquals(43, $result[0][0]['phonenumbers'][1]['phonenumber']); + self::assertEquals(91, $result[1][0]['phonenumbers'][0]['phonenumber']); + + self::assertEquals('Getting things done!', $result[0][0]['articles'][0]['topic']); + self::assertEquals('ZendCon', $result[0][0]['articles'][1]['topic']); + self::assertEquals('LINQ', $result[1][0]['articles'][0]['topic']); + self::assertEquals('PHP7', $result[1][0]['articles'][1]['topic']); } /** @@ -795,41 +795,41 @@ public function testMixedQueryMultipleDeepMixedFetchJoin() $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals(2, count($result)); - $this->assertTrue(is_array($result)); - $this->assertTrue(is_array($result[0])); - $this->assertTrue(is_array($result[1])); + self::assertEquals(2, count($result)); + self::assertTrue(is_array($result)); + self::assertTrue(is_array($result[0])); + self::assertTrue(is_array($result[1])); // first user => 2 phonenumbers, 2 articles, 1 comment on first article - $this->assertEquals(2, count($result[0][0]['phonenumbers'])); - $this->assertEquals(2, count($result[0][0]['articles'])); - $this->assertEquals(1, count($result[0][0]['articles'][0]['comments'])); - $this->assertEquals('ROMANB', $result[0]['nameUpper']); + self::assertEquals(2, count($result[0][0]['phonenumbers'])); + self::assertEquals(2, count($result[0][0]['articles'])); + self::assertEquals(1, count($result[0][0]['articles'][0]['comments'])); + self::assertEquals('ROMANB', $result[0]['nameUpper']); // second user => 1 phonenumber, 2 articles, no comments - $this->assertEquals(1, count($result[1][0]['phonenumbers'])); - $this->assertEquals(2, count($result[1][0]['articles'])); - $this->assertEquals('JWAGE', $result[1]['nameUpper']); + self::assertEquals(1, count($result[1][0]['phonenumbers'])); + self::assertEquals(2, count($result[1][0]['articles'])); + self::assertEquals('JWAGE', $result[1]['nameUpper']); - $this->assertEquals(42, $result[0][0]['phonenumbers'][0]['phonenumber']); - $this->assertEquals(43, $result[0][0]['phonenumbers'][1]['phonenumber']); - $this->assertEquals(91, $result[1][0]['phonenumbers'][0]['phonenumber']); + self::assertEquals(42, $result[0][0]['phonenumbers'][0]['phonenumber']); + self::assertEquals(43, $result[0][0]['phonenumbers'][1]['phonenumber']); + self::assertEquals(91, $result[1][0]['phonenumbers'][0]['phonenumber']); - $this->assertEquals('Getting things done!', $result[0][0]['articles'][0]['topic']); - $this->assertEquals('ZendCon', $result[0][0]['articles'][1]['topic']); - $this->assertEquals('LINQ', $result[1][0]['articles'][0]['topic']); - $this->assertEquals('PHP7', $result[1][0]['articles'][1]['topic']); + self::assertEquals('Getting things done!', $result[0][0]['articles'][0]['topic']); + self::assertEquals('ZendCon', $result[0][0]['articles'][1]['topic']); + self::assertEquals('LINQ', $result[1][0]['articles'][0]['topic']); + self::assertEquals('PHP7', $result[1][0]['articles'][1]['topic']); - $this->assertEquals('First!', $result[0][0]['articles'][0]['comments'][0]['topic']); + self::assertEquals('First!', $result[0][0]['articles'][0]['comments'][0]['topic']); - $this->assertTrue(isset($result[0][0]['articles'][0]['comments'])); + self::assertTrue(isset($result[0][0]['articles'][0]['comments'])); // empty comment collections - $this->assertTrue(is_array($result[0][0]['articles'][1]['comments'])); - $this->assertEquals(0, count($result[0][0]['articles'][1]['comments'])); - $this->assertTrue(is_array($result[1][0]['articles'][0]['comments'])); - $this->assertEquals(0, count($result[1][0]['articles'][0]['comments'])); - $this->assertTrue(is_array($result[1][0]['articles'][1]['comments'])); - $this->assertEquals(0, count($result[1][0]['articles'][1]['comments'])); + self::assertTrue(is_array($result[0][0]['articles'][1]['comments'])); + self::assertEquals(0, count($result[0][0]['articles'][1]['comments'])); + self::assertTrue(is_array($result[1][0]['articles'][0]['comments'])); + self::assertEquals(0, count($result[1][0]['articles'][0]['comments'])); + self::assertTrue(is_array($result[1][0]['articles'][1]['comments'])); + self::assertEquals(0, count($result[1][0]['articles'][1]['comments'])); } /** @@ -909,14 +909,14 @@ public function testEntityQueryCustomResultSetOrder() $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals(2, count($result)); - $this->assertTrue(is_array($result)); - $this->assertTrue(is_array($result[0])); - $this->assertTrue(is_array($result[1])); - $this->assertTrue(isset($result[0]['boards'])); - $this->assertEquals(3, count($result[0]['boards'])); - $this->assertTrue(isset($result[1]['boards'])); - $this->assertEquals(1, count($result[1]['boards'])); + self::assertEquals(2, count($result)); + self::assertTrue(is_array($result)); + self::assertTrue(is_array($result[0])); + self::assertTrue(is_array($result[1])); + self::assertTrue(isset($result[0]['boards'])); + self::assertEquals(3, count($result[0]['boards'])); + self::assertTrue(isset($result[1]['boards'])); + self::assertEquals(1, count($result[1]['boards'])); } /** @@ -972,25 +972,25 @@ public function testChainedJoinWithScalars($entityKey) $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals(3, count($result)); - - $this->assertEquals(2, count($result[0][$entityKey])); // User array - $this->assertEquals(1, $result[0]['id']); - $this->assertEquals('The First', $result[0]['topic']); - $this->assertEquals(1, $result[0]['cid']); - $this->assertEquals('First Comment', $result[0]['ctopic']); - - $this->assertEquals(2, count($result[1][$entityKey])); // User array, duplicated - $this->assertEquals(1, $result[1]['id']); // duplicated - $this->assertEquals('The First', $result[1]['topic']); // duplicated - $this->assertEquals(2, $result[1]['cid']); - $this->assertEquals('Second Comment', $result[1]['ctopic']); - - $this->assertEquals(2, count($result[2][$entityKey])); // User array, duplicated - $this->assertEquals(42, $result[2]['id']); - $this->assertEquals('The Answer', $result[2]['topic']); - $this->assertNull($result[2]['cid']); - $this->assertNull($result[2]['ctopic']); + self::assertEquals(3, count($result)); + + self::assertEquals(2, count($result[0][$entityKey])); // User array + self::assertEquals(1, $result[0]['id']); + self::assertEquals('The First', $result[0]['topic']); + self::assertEquals(1, $result[0]['cid']); + self::assertEquals('First Comment', $result[0]['ctopic']); + + self::assertEquals(2, count($result[1][$entityKey])); // User array, duplicated + self::assertEquals(1, $result[1]['id']); // duplicated + self::assertEquals('The First', $result[1]['topic']); // duplicated + self::assertEquals(2, $result[1]['cid']); + self::assertEquals('Second Comment', $result[1]['ctopic']); + + self::assertEquals(2, count($result[2][$entityKey])); // User array, duplicated + self::assertEquals(42, $result[2]['id']); + self::assertEquals('The Answer', $result[2]['topic']); + self::assertNull($result[2]['cid']); + self::assertNull($result[2]['ctopic']); } /** @@ -1023,15 +1023,15 @@ public function testResultIteration() $rowNum = 0; while (($row = $iterator->next()) !== false) { - $this->assertEquals(1, count($row)); - $this->assertTrue(is_array($row[0])); + self::assertEquals(1, count($row)); + self::assertTrue(is_array($row[0])); if ($rowNum == 0) { - $this->assertEquals(1, $row[0]['id']); - $this->assertEquals('romanb', $row[0]['name']); + self::assertEquals(1, $row[0]['id']); + self::assertEquals('romanb', $row[0]['name']); } else if ($rowNum == 1) { - $this->assertEquals(2, $row[0]['id']); - $this->assertEquals('jwage', $row[0]['name']); + self::assertEquals(2, $row[0]['id']); + self::assertEquals('jwage', $row[0]['name']); } ++$rowNum; @@ -1068,16 +1068,16 @@ public function testResultIterationWithAliasedUserEntity() $rowNum = 0; while (($row = $iterator->next()) !== false) { - $this->assertEquals(1, count($row)); - $this->assertArrayHasKey(0, $row); - $this->assertArrayHasKey('user', $row[0]); + self::assertEquals(1, count($row)); + self::assertArrayHasKey(0, $row); + self::assertArrayHasKey('user', $row[0]); if ($rowNum == 0) { - $this->assertEquals(1, $row[0]['user']['id']); - $this->assertEquals('romanb', $row[0]['user']['name']); + self::assertEquals(1, $row[0]['user']['id']); + self::assertEquals('romanb', $row[0]['user']['name']); } else if ($rowNum == 1) { - $this->assertEquals(2, $row[0]['user']['id']); - $this->assertEquals('jwage', $row[0]['user']['name']); + self::assertEquals(2, $row[0]['user']['id']); + self::assertEquals('jwage', $row[0]['user']['name']); } ++$rowNum; @@ -1111,10 +1111,10 @@ public function testSkipUnknownColumns() $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals(1, count($result)); - $this->assertArrayHasKey('id', $result[0]); - $this->assertArrayHasKey('name', $result[0]); - $this->assertArrayNotHasKey('foo', $result[0]); + self::assertEquals(1, count($result)); + self::assertArrayHasKey('id', $result[0]); + self::assertArrayHasKey('name', $result[0]); + self::assertArrayNotHasKey('foo', $result[0]); } /** @@ -1162,17 +1162,17 @@ public function testMissingIdForRootEntity($userEntityKey) $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals(4, count($result), "Should hydrate four results."); + self::assertEquals(4, count($result), "Should hydrate four results."); - $this->assertEquals('ROMANB', $result[0]['nameUpper']); - $this->assertEquals('ROMANB', $result[1]['nameUpper']); - $this->assertEquals('JWAGE', $result[2]['nameUpper']); - $this->assertEquals('JWAGE', $result[3]['nameUpper']); + self::assertEquals('ROMANB', $result[0]['nameUpper']); + self::assertEquals('ROMANB', $result[1]['nameUpper']); + self::assertEquals('JWAGE', $result[2]['nameUpper']); + self::assertEquals('JWAGE', $result[3]['nameUpper']); - $this->assertEquals(['id' => 1, 'status' => 'developer'], $result[0][$userEntityKey]); - $this->assertNull($result[1][$userEntityKey]); - $this->assertEquals(['id' => 2, 'status' => 'developer'], $result[2][$userEntityKey]); - $this->assertNull($result[3][$userEntityKey]); + self::assertEquals(['id' => 1, 'status' => 'developer'], $result[0][$userEntityKey]); + self::assertNull($result[1][$userEntityKey]); + self::assertEquals(['id' => 2, 'status' => 'developer'], $result[2][$userEntityKey]); + self::assertNull($result[3][$userEntityKey]); } /** @@ -1212,12 +1212,12 @@ public function testIndexByAndMixedResult($userEntityKey) $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals(2, count($result)); + self::assertEquals(2, count($result)); - $this->assertTrue(isset($result[1])); - $this->assertEquals(1, $result[1][$userEntityKey]['id']); + self::assertTrue(isset($result[1])); + self::assertEquals(1, $result[1][$userEntityKey]['id']); - $this->assertTrue(isset($result[2])); - $this->assertEquals(2, $result[2][$userEntityKey]['id']); + self::assertTrue(isset($result[2])); + self::assertEquals(2, $result[2][$userEntityKey]['id']); } } diff --git a/tests/Doctrine/Tests/ORM/Hydration/CustomHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/CustomHydratorTest.php index 7342b942f4f..4b79483f1e7 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/CustomHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/CustomHydratorTest.php @@ -14,8 +14,8 @@ public function testCustomHydrator() $config->addCustomHydrationMode('CustomHydrator', CustomHydrator::class); $hydrator = $em->newHydrator('CustomHydrator'); - $this->assertInstanceOf(CustomHydrator::class, $hydrator); - $this->assertNull($config->getCustomHydrationMode('does not exist')); + self::assertInstanceOf(CustomHydrator::class, $hydrator); + self::assertNull($config->getCustomHydrationMode('does not exist')); } } diff --git a/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php index 3cea72f3d8c..a338bda8fb1 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php @@ -80,16 +80,16 @@ public function testSimpleEntityQuery() $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(2, count($result)); + self::assertEquals(2, count($result)); - $this->assertInstanceOf(CmsUser::class, $result[0]); - $this->assertInstanceOf(CmsUser::class, $result[1]); + self::assertInstanceOf(CmsUser::class, $result[0]); + self::assertInstanceOf(CmsUser::class, $result[1]); - $this->assertEquals(1, $result[0]->id); - $this->assertEquals('romanb', $result[0]->name); + self::assertEquals(1, $result[0]->id); + self::assertEquals('romanb', $result[0]->name); - $this->assertEquals(2, $result[1]->id); - $this->assertEquals('jwage', $result[1]->name); + self::assertEquals(2, $result[1]->id); + self::assertEquals('jwage', $result[1]->name); } /** @@ -119,19 +119,19 @@ public function testSimpleEntityQueryWithAliasedUserEntity() $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(2, count($result)); + self::assertEquals(2, count($result)); - $this->assertArrayHasKey('user', $result[0]); - $this->assertInstanceOf(CmsUser::class, $result[0]['user']); + self::assertArrayHasKey('user', $result[0]); + self::assertInstanceOf(CmsUser::class, $result[0]['user']); - $this->assertArrayHasKey('user', $result[1]); - $this->assertInstanceOf(CmsUser::class, $result[1]['user']); + self::assertArrayHasKey('user', $result[1]); + self::assertInstanceOf(CmsUser::class, $result[1]['user']); - $this->assertEquals(1, $result[0]['user']->id); - $this->assertEquals('romanb', $result[0]['user']->name); + self::assertEquals(1, $result[0]['user']->id); + self::assertEquals('romanb', $result[0]['user']->name); - $this->assertEquals(2, $result[1]['user']->id); - $this->assertEquals('jwage', $result[1]['user']->name); + self::assertEquals(2, $result[1]['user']->id); + self::assertEquals('jwage', $result[1]['user']->name); } /** @@ -168,24 +168,24 @@ public function testSimpleMultipleRootEntityQuery() $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(4, count($result)); + self::assertEquals(4, count($result)); - $this->assertInstanceOf(CmsUser::class, $result[0]); - $this->assertInstanceOf(CmsArticle::class, $result[1]); - $this->assertInstanceOf(CmsUser::class, $result[2]); - $this->assertInstanceOf(CmsArticle::class, $result[3]); + self::assertInstanceOf(CmsUser::class, $result[0]); + self::assertInstanceOf(CmsArticle::class, $result[1]); + self::assertInstanceOf(CmsUser::class, $result[2]); + self::assertInstanceOf(CmsArticle::class, $result[3]); - $this->assertEquals(1, $result[0]->id); - $this->assertEquals('romanb', $result[0]->name); + self::assertEquals(1, $result[0]->id); + self::assertEquals('romanb', $result[0]->name); - $this->assertEquals(1, $result[1]->id); - $this->assertEquals('Cool things.', $result[1]->topic); + self::assertEquals(1, $result[1]->id); + self::assertEquals('Cool things.', $result[1]->topic); - $this->assertEquals(2, $result[2]->id); - $this->assertEquals('jwage', $result[2]->name); + self::assertEquals(2, $result[2]->id); + self::assertEquals('jwage', $result[2]->name); - $this->assertEquals(2, $result[3]->id); - $this->assertEquals('Cool things II.', $result[3]->topic); + self::assertEquals(2, $result[3]->id); + self::assertEquals('Cool things II.', $result[3]->topic); } /** @@ -222,31 +222,31 @@ public function testSimpleMultipleRootEntityQueryWithAliasedUserEntity() $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(4, count($result)); - - $this->assertArrayHasKey('user', $result[0]); - $this->assertArrayNotHasKey(0, $result[0]); - $this->assertInstanceOf(CmsUser::class, $result[0]['user']); - $this->assertEquals(1, $result[0]['user']->id); - $this->assertEquals('romanb', $result[0]['user']->name); - - $this->assertArrayHasKey(0, $result[1]); - $this->assertArrayNotHasKey('user', $result[1]); - $this->assertInstanceOf(CmsArticle::class, $result[1][0]); - $this->assertEquals(1, $result[1][0]->id); - $this->assertEquals('Cool things.', $result[1][0]->topic); - - $this->assertArrayHasKey('user', $result[2]); - $this->assertArrayNotHasKey(0, $result[2]); - $this->assertInstanceOf(CmsUser::class, $result[2]['user']); - $this->assertEquals(2, $result[2]['user']->id); - $this->assertEquals('jwage', $result[2]['user']->name); - - $this->assertArrayHasKey(0, $result[3]); - $this->assertArrayNotHasKey('user', $result[3]); - $this->assertInstanceOf(CmsArticle::class, $result[3][0]); - $this->assertEquals(2, $result[3][0]->id); - $this->assertEquals('Cool things II.', $result[3][0]->topic); + self::assertEquals(4, count($result)); + + self::assertArrayHasKey('user', $result[0]); + self::assertArrayNotHasKey(0, $result[0]); + self::assertInstanceOf(CmsUser::class, $result[0]['user']); + self::assertEquals(1, $result[0]['user']->id); + self::assertEquals('romanb', $result[0]['user']->name); + + self::assertArrayHasKey(0, $result[1]); + self::assertArrayNotHasKey('user', $result[1]); + self::assertInstanceOf(CmsArticle::class, $result[1][0]); + self::assertEquals(1, $result[1][0]->id); + self::assertEquals('Cool things.', $result[1][0]->topic); + + self::assertArrayHasKey('user', $result[2]); + self::assertArrayNotHasKey(0, $result[2]); + self::assertInstanceOf(CmsUser::class, $result[2]['user']); + self::assertEquals(2, $result[2]['user']->id); + self::assertEquals('jwage', $result[2]['user']->name); + + self::assertArrayHasKey(0, $result[3]); + self::assertArrayNotHasKey('user', $result[3]); + self::assertInstanceOf(CmsArticle::class, $result[3][0]); + self::assertEquals(2, $result[3][0]->id); + self::assertEquals('Cool things II.', $result[3][0]->topic); } /** @@ -283,31 +283,31 @@ public function testSimpleMultipleRootEntityQueryWithAliasedArticleEntity() $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(4, count($result)); - - $this->assertArrayHasKey(0, $result[0]); - $this->assertArrayNotHasKey('article', $result[0]); - $this->assertInstanceOf(CmsUser::class, $result[0][0]); - $this->assertEquals(1, $result[0][0]->id); - $this->assertEquals('romanb', $result[0][0]->name); - - $this->assertArrayHasKey('article', $result[1]); - $this->assertArrayNotHasKey(0, $result[1]); - $this->assertInstanceOf(CmsArticle::class, $result[1]['article']); - $this->assertEquals(1, $result[1]['article']->id); - $this->assertEquals('Cool things.', $result[1]['article']->topic); - - $this->assertArrayHasKey(0, $result[2]); - $this->assertArrayNotHasKey('article', $result[2]); - $this->assertInstanceOf(CmsUser::class, $result[2][0]); - $this->assertEquals(2, $result[2][0]->id); - $this->assertEquals('jwage', $result[2][0]->name); - - $this->assertArrayHasKey('article', $result[3]); - $this->assertArrayNotHasKey(0, $result[3]); - $this->assertInstanceOf(CmsArticle::class, $result[3]['article']); - $this->assertEquals(2, $result[3]['article']->id); - $this->assertEquals('Cool things II.', $result[3]['article']->topic); + self::assertEquals(4, count($result)); + + self::assertArrayHasKey(0, $result[0]); + self::assertArrayNotHasKey('article', $result[0]); + self::assertInstanceOf(CmsUser::class, $result[0][0]); + self::assertEquals(1, $result[0][0]->id); + self::assertEquals('romanb', $result[0][0]->name); + + self::assertArrayHasKey('article', $result[1]); + self::assertArrayNotHasKey(0, $result[1]); + self::assertInstanceOf(CmsArticle::class, $result[1]['article']); + self::assertEquals(1, $result[1]['article']->id); + self::assertEquals('Cool things.', $result[1]['article']->topic); + + self::assertArrayHasKey(0, $result[2]); + self::assertArrayNotHasKey('article', $result[2]); + self::assertInstanceOf(CmsUser::class, $result[2][0]); + self::assertEquals(2, $result[2][0]->id); + self::assertEquals('jwage', $result[2][0]->name); + + self::assertArrayHasKey('article', $result[3]); + self::assertArrayNotHasKey(0, $result[3]); + self::assertInstanceOf(CmsArticle::class, $result[3]['article']); + self::assertEquals(2, $result[3]['article']->id); + self::assertEquals('Cool things II.', $result[3]['article']->topic); } /** @@ -344,31 +344,31 @@ public function testSimpleMultipleRootEntityQueryWithAliasedEntities() $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(4, count($result)); - - $this->assertArrayHasKey('user', $result[0]); - $this->assertArrayNotHasKey('article', $result[0]); - $this->assertInstanceOf(CmsUser::class, $result[0]['user']); - $this->assertEquals(1, $result[0]['user']->id); - $this->assertEquals('romanb', $result[0]['user']->name); - - $this->assertArrayHasKey('article', $result[1]); - $this->assertArrayNotHasKey('user', $result[1]); - $this->assertInstanceOf(CmsArticle::class, $result[1]['article']); - $this->assertEquals(1, $result[1]['article']->id); - $this->assertEquals('Cool things.', $result[1]['article']->topic); - - $this->assertArrayHasKey('user', $result[2]); - $this->assertArrayNotHasKey('article', $result[2]); - $this->assertInstanceOf(CmsUser::class, $result[2]['user']); - $this->assertEquals(2, $result[2]['user']->id); - $this->assertEquals('jwage', $result[2]['user']->name); - - $this->assertArrayHasKey('article', $result[3]); - $this->assertArrayNotHasKey('user', $result[3]); - $this->assertInstanceOf(CmsArticle::class, $result[3]['article']); - $this->assertEquals(2, $result[3]['article']->id); - $this->assertEquals('Cool things II.', $result[3]['article']->topic); + self::assertEquals(4, count($result)); + + self::assertArrayHasKey('user', $result[0]); + self::assertArrayNotHasKey('article', $result[0]); + self::assertInstanceOf(CmsUser::class, $result[0]['user']); + self::assertEquals(1, $result[0]['user']->id); + self::assertEquals('romanb', $result[0]['user']->name); + + self::assertArrayHasKey('article', $result[1]); + self::assertArrayNotHasKey('user', $result[1]); + self::assertInstanceOf(CmsArticle::class, $result[1]['article']); + self::assertEquals(1, $result[1]['article']->id); + self::assertEquals('Cool things.', $result[1]['article']->topic); + + self::assertArrayHasKey('user', $result[2]); + self::assertArrayNotHasKey('article', $result[2]); + self::assertInstanceOf(CmsUser::class, $result[2]['user']); + self::assertEquals(2, $result[2]['user']->id); + self::assertEquals('jwage', $result[2]['user']->name); + + self::assertArrayHasKey('article', $result[3]); + self::assertArrayNotHasKey('user', $result[3]); + self::assertInstanceOf(CmsArticle::class, $result[3]['article']); + self::assertEquals(2, $result[3]['article']->id); + self::assertEquals('Cool things II.', $result[3]['article']->topic); } /** @@ -406,19 +406,19 @@ public function testMixedQueryNormalJoin($userEntityKey) $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(2, count($result)); + self::assertEquals(2, count($result)); - $this->assertInternalType('array', $result); - $this->assertInternalType('array', $result[0]); - $this->assertInternalType('array', $result[1]); + self::assertInternalType('array', $result); + self::assertInternalType('array', $result[0]); + self::assertInternalType('array', $result[1]); // first user => 2 phonenumbers - $this->assertEquals(2, $result[0]['numPhones']); - $this->assertInstanceOf(CmsUser::class, $result[0][$userEntityKey]); + self::assertEquals(2, $result[0]['numPhones']); + self::assertInstanceOf(CmsUser::class, $result[0][$userEntityKey]); // second user => 1 phonenumber - $this->assertEquals(1, $result[1]['numPhones']); - $this->assertInstanceOf(CmsUser::class, $result[1][$userEntityKey]); + self::assertEquals(1, $result[1]['numPhones']); + self::assertInstanceOf(CmsUser::class, $result[1][$userEntityKey]); } /** @@ -470,31 +470,31 @@ public function testMixedQueryFetchJoin($userEntityKey) $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(2, count($result)); + self::assertEquals(2, count($result)); - $this->assertInternalType('array', $result); - $this->assertInternalType('array', $result[0]); - $this->assertInternalType('array', $result[1]); + self::assertInternalType('array', $result); + self::assertInternalType('array', $result[0]); + self::assertInternalType('array', $result[1]); - $this->assertInstanceOf(CmsUser::class, $result[0][$userEntityKey]); - $this->assertInstanceOf(PersistentCollection::class, $result[0][$userEntityKey]->phonenumbers); - $this->assertInstanceOf(CmsPhonenumber::class, $result[0][$userEntityKey]->phonenumbers[0]); + self::assertInstanceOf(CmsUser::class, $result[0][$userEntityKey]); + self::assertInstanceOf(PersistentCollection::class, $result[0][$userEntityKey]->phonenumbers); + self::assertInstanceOf(CmsPhonenumber::class, $result[0][$userEntityKey]->phonenumbers[0]); - $this->assertInstanceOf(CmsUser::class, $result[1][$userEntityKey]); - $this->assertInstanceOf(PersistentCollection::class, $result[1][$userEntityKey]->phonenumbers); - $this->assertInstanceOf(CmsPhonenumber::class, $result[0][$userEntityKey]->phonenumbers[1]); + self::assertInstanceOf(CmsUser::class, $result[1][$userEntityKey]); + self::assertInstanceOf(PersistentCollection::class, $result[1][$userEntityKey]->phonenumbers); + self::assertInstanceOf(CmsPhonenumber::class, $result[0][$userEntityKey]->phonenumbers[1]); // first user => 2 phonenumbers - $this->assertEquals(2, count($result[0][$userEntityKey]->phonenumbers)); - $this->assertEquals('ROMANB', $result[0]['nameUpper']); + self::assertEquals(2, count($result[0][$userEntityKey]->phonenumbers)); + self::assertEquals('ROMANB', $result[0]['nameUpper']); // second user => 1 phonenumber - $this->assertEquals(1, count($result[1][$userEntityKey]->phonenumbers)); - $this->assertEquals('JWAGE', $result[1]['nameUpper']); + self::assertEquals(1, count($result[1][$userEntityKey]->phonenumbers)); + self::assertEquals('JWAGE', $result[1]['nameUpper']); - $this->assertEquals(42, $result[0][$userEntityKey]->phonenumbers[0]->phonenumber); - $this->assertEquals(43, $result[0][$userEntityKey]->phonenumbers[1]->phonenumber); - $this->assertEquals(91, $result[1][$userEntityKey]->phonenumbers[0]->phonenumber); + self::assertEquals(42, $result[0][$userEntityKey]->phonenumbers[0]->phonenumber); + self::assertEquals(43, $result[0][$userEntityKey]->phonenumbers[1]->phonenumber); + self::assertEquals(91, $result[1][$userEntityKey]->phonenumbers[0]->phonenumber); } /** @@ -551,30 +551,30 @@ public function testMixedQueryFetchJoinCustomIndex($userEntityKey) $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(2, count($result)); + self::assertEquals(2, count($result)); - $this->assertInternalType('array', $result); - $this->assertInternalType('array', $result[1]); - $this->assertInternalType('array', $result[2]); + self::assertInternalType('array', $result); + self::assertInternalType('array', $result[1]); + self::assertInternalType('array', $result[2]); // test the scalar values - $this->assertEquals('ROMANB', $result[1]['nameUpper']); - $this->assertEquals('JWAGE', $result[2]['nameUpper']); + self::assertEquals('ROMANB', $result[1]['nameUpper']); + self::assertEquals('JWAGE', $result[2]['nameUpper']); - $this->assertInstanceOf(CmsUser::class, $result[1][$userEntityKey]); - $this->assertInstanceOf(CmsUser::class, $result[2][$userEntityKey]); - $this->assertInstanceOf(PersistentCollection::class, $result[1][$userEntityKey]->phonenumbers); + self::assertInstanceOf(CmsUser::class, $result[1][$userEntityKey]); + self::assertInstanceOf(CmsUser::class, $result[2][$userEntityKey]); + self::assertInstanceOf(PersistentCollection::class, $result[1][$userEntityKey]->phonenumbers); // first user => 2 phonenumbers. notice the custom indexing by user id - $this->assertEquals(2, count($result[1][$userEntityKey]->phonenumbers)); + self::assertEquals(2, count($result[1][$userEntityKey]->phonenumbers)); // second user => 1 phonenumber. notice the custom indexing by user id - $this->assertEquals(1, count($result[2][$userEntityKey]->phonenumbers)); + self::assertEquals(1, count($result[2][$userEntityKey]->phonenumbers)); // test the custom indexing of the phonenumbers - $this->assertTrue(isset($result[1][$userEntityKey]->phonenumbers['42'])); - $this->assertTrue(isset($result[1][$userEntityKey]->phonenumbers['43'])); - $this->assertTrue(isset($result[2][$userEntityKey]->phonenumbers['91'])); + self::assertTrue(isset($result[1][$userEntityKey]->phonenumbers['42'])); + self::assertTrue(isset($result[1][$userEntityKey]->phonenumbers['43'])); + self::assertTrue(isset($result[2][$userEntityKey]->phonenumbers['91'])); } /** @@ -665,25 +665,25 @@ public function testMixedQueryMultipleFetchJoin($userEntityKey) $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(2, count($result)); - - $this->assertTrue(is_array($result)); - $this->assertTrue(is_array($result[0])); - $this->assertTrue(is_array($result[1])); - - $this->assertInstanceOf(CmsUser::class, $result[0][$userEntityKey]); - $this->assertInstanceOf(PersistentCollection::class, $result[0][$userEntityKey]->phonenumbers); - $this->assertInstanceOf(CmsPhonenumber::class, $result[0][$userEntityKey]->phonenumbers[0]); - $this->assertInstanceOf(CmsPhonenumber::class, $result[0][$userEntityKey]->phonenumbers[1]); - $this->assertInstanceOf(PersistentCollection::class, $result[0][$userEntityKey]->articles); - $this->assertInstanceOf(CmsArticle::class, $result[0][$userEntityKey]->articles[0]); - $this->assertInstanceOf(CmsArticle::class, $result[0][$userEntityKey]->articles[1]); - - $this->assertInstanceOf(CmsUser::class, $result[1][$userEntityKey]); - $this->assertInstanceOf(PersistentCollection::class, $result[1][$userEntityKey]->phonenumbers); - $this->assertInstanceOf(CmsPhonenumber::class, $result[1][$userEntityKey]->phonenumbers[0]); - $this->assertInstanceOf(CmsArticle::class, $result[1][$userEntityKey]->articles[0]); - $this->assertInstanceOf(CmsArticle::class, $result[1][$userEntityKey]->articles[1]); + self::assertEquals(2, count($result)); + + self::assertTrue(is_array($result)); + self::assertTrue(is_array($result[0])); + self::assertTrue(is_array($result[1])); + + self::assertInstanceOf(CmsUser::class, $result[0][$userEntityKey]); + self::assertInstanceOf(PersistentCollection::class, $result[0][$userEntityKey]->phonenumbers); + self::assertInstanceOf(CmsPhonenumber::class, $result[0][$userEntityKey]->phonenumbers[0]); + self::assertInstanceOf(CmsPhonenumber::class, $result[0][$userEntityKey]->phonenumbers[1]); + self::assertInstanceOf(PersistentCollection::class, $result[0][$userEntityKey]->articles); + self::assertInstanceOf(CmsArticle::class, $result[0][$userEntityKey]->articles[0]); + self::assertInstanceOf(CmsArticle::class, $result[0][$userEntityKey]->articles[1]); + + self::assertInstanceOf(CmsUser::class, $result[1][$userEntityKey]); + self::assertInstanceOf(PersistentCollection::class, $result[1][$userEntityKey]->phonenumbers); + self::assertInstanceOf(CmsPhonenumber::class, $result[1][$userEntityKey]->phonenumbers[0]); + self::assertInstanceOf(CmsArticle::class, $result[1][$userEntityKey]->articles[0]); + self::assertInstanceOf(CmsArticle::class, $result[1][$userEntityKey]->articles[1]); } /** @@ -795,43 +795,43 @@ public function testMixedQueryMultipleDeepMixedFetchJoin($userEntityKey) $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(2, count($result)); + self::assertEquals(2, count($result)); - $this->assertTrue(is_array($result)); - $this->assertTrue(is_array($result[0])); - $this->assertTrue(is_array($result[1])); + self::assertTrue(is_array($result)); + self::assertTrue(is_array($result[0])); + self::assertTrue(is_array($result[1])); - $this->assertInstanceOf(CmsUser::class, $result[0][$userEntityKey]); - $this->assertInstanceOf(CmsUser::class, $result[1][$userEntityKey]); + self::assertInstanceOf(CmsUser::class, $result[0][$userEntityKey]); + self::assertInstanceOf(CmsUser::class, $result[1][$userEntityKey]); // phonenumbers - $this->assertInstanceOf(PersistentCollection::class, $result[0][$userEntityKey]->phonenumbers); - $this->assertInstanceOf(CmsPhonenumber::class, $result[0][$userEntityKey]->phonenumbers[0]); - $this->assertInstanceOf(CmsPhonenumber::class, $result[0][$userEntityKey]->phonenumbers[1]); + self::assertInstanceOf(PersistentCollection::class, $result[0][$userEntityKey]->phonenumbers); + self::assertInstanceOf(CmsPhonenumber::class, $result[0][$userEntityKey]->phonenumbers[0]); + self::assertInstanceOf(CmsPhonenumber::class, $result[0][$userEntityKey]->phonenumbers[1]); - $this->assertInstanceOf(PersistentCollection::class, $result[1][$userEntityKey]->phonenumbers); - $this->assertInstanceOf(CmsPhonenumber::class, $result[1][$userEntityKey]->phonenumbers[0]); + self::assertInstanceOf(PersistentCollection::class, $result[1][$userEntityKey]->phonenumbers); + self::assertInstanceOf(CmsPhonenumber::class, $result[1][$userEntityKey]->phonenumbers[0]); // articles - $this->assertInstanceOf(PersistentCollection::class, $result[0][$userEntityKey]->articles); - $this->assertInstanceOf(CmsArticle::class, $result[0][$userEntityKey]->articles[0]); - $this->assertInstanceOf(CmsArticle::class, $result[0][$userEntityKey]->articles[1]); + self::assertInstanceOf(PersistentCollection::class, $result[0][$userEntityKey]->articles); + self::assertInstanceOf(CmsArticle::class, $result[0][$userEntityKey]->articles[0]); + self::assertInstanceOf(CmsArticle::class, $result[0][$userEntityKey]->articles[1]); - $this->assertInstanceOf(CmsArticle::class, $result[1][$userEntityKey]->articles[0]); - $this->assertInstanceOf(CmsArticle::class, $result[1][$userEntityKey]->articles[1]); + self::assertInstanceOf(CmsArticle::class, $result[1][$userEntityKey]->articles[0]); + self::assertInstanceOf(CmsArticle::class, $result[1][$userEntityKey]->articles[1]); // article comments - $this->assertInstanceOf(PersistentCollection::class, $result[0][$userEntityKey]->articles[0]->comments); - $this->assertInstanceOf(CmsComment::class, $result[0][$userEntityKey]->articles[0]->comments[0]); + self::assertInstanceOf(PersistentCollection::class, $result[0][$userEntityKey]->articles[0]->comments); + self::assertInstanceOf(CmsComment::class, $result[0][$userEntityKey]->articles[0]->comments[0]); // empty comment collections - $this->assertInstanceOf(PersistentCollection::class, $result[0][$userEntityKey]->articles[1]->comments); - $this->assertEquals(0, count($result[0][$userEntityKey]->articles[1]->comments)); + self::assertInstanceOf(PersistentCollection::class, $result[0][$userEntityKey]->articles[1]->comments); + self::assertEquals(0, count($result[0][$userEntityKey]->articles[1]->comments)); - $this->assertInstanceOf(PersistentCollection::class, $result[1][$userEntityKey]->articles[0]->comments); - $this->assertEquals(0, count($result[1][$userEntityKey]->articles[0]->comments)); - $this->assertInstanceOf(PersistentCollection::class, $result[1][$userEntityKey]->articles[1]->comments); - $this->assertEquals(0, count($result[1][$userEntityKey]->articles[1]->comments)); + self::assertInstanceOf(PersistentCollection::class, $result[1][$userEntityKey]->articles[0]->comments); + self::assertEquals(0, count($result[1][$userEntityKey]->articles[0]->comments)); + self::assertInstanceOf(PersistentCollection::class, $result[1][$userEntityKey]->articles[1]->comments); + self::assertEquals(0, count($result[1][$userEntityKey]->articles[1]->comments)); } /** @@ -908,21 +908,21 @@ public function testEntityQueryCustomResultSetOrder() $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(2, count($result)); + self::assertEquals(2, count($result)); - $this->assertInstanceOf(ForumCategory::class, $result[0]); - $this->assertInstanceOf(ForumCategory::class, $result[1]); + self::assertInstanceOf(ForumCategory::class, $result[0]); + self::assertInstanceOf(ForumCategory::class, $result[1]); - $this->assertTrue($result[0] !== $result[1]); + self::assertTrue($result[0] !== $result[1]); - $this->assertEquals(1, $result[0]->getId()); - $this->assertEquals(2, $result[1]->getId()); + self::assertEquals(1, $result[0]->getId()); + self::assertEquals(2, $result[1]->getId()); - $this->assertTrue(isset($result[0]->boards)); - $this->assertEquals(3, count($result[0]->boards)); + self::assertTrue(isset($result[0]->boards)); + self::assertEquals(3, count($result[0]->boards)); - $this->assertTrue(isset($result[1]->boards)); - $this->assertEquals(1, count($result[1]->boards)); + self::assertTrue(isset($result[1]->boards)); + self::assertEquals(1, count($result[1]->boards)); } /** @@ -951,8 +951,8 @@ public function testSkipUnknownColumns() $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(1, count($result)); - $this->assertInstanceOf(CmsUser::class, $result[0]); + self::assertEquals(1, count($result)); + self::assertInstanceOf(CmsUser::class, $result[0]); } /** @@ -984,16 +984,16 @@ public function testScalarQueryWithoutResultVariables($userEntityKey) $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(2, count($result)); + self::assertEquals(2, count($result)); - $this->assertInternalType('array', $result[0]); - $this->assertInternalType('array', $result[1]); + self::assertInternalType('array', $result[0]); + self::assertInternalType('array', $result[1]); - $this->assertEquals(1, $result[0]['id']); - $this->assertEquals('romanb', $result[0]['name']); + self::assertEquals(1, $result[0]['id']); + self::assertEquals('romanb', $result[0]['name']); - $this->assertEquals(2, $result[1]['id']); - $this->assertEquals('jwage', $result[1]['name']); + self::assertEquals(2, $result[1]['id']); + self::assertEquals('jwage', $result[1]['name']); } /** @@ -1040,9 +1040,9 @@ public function testCreatesProxyForLazyLoadingWithForeignKeys() $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals(1, count($result)); + self::assertEquals(1, count($result)); - $this->assertInstanceOf(ECommerceProduct::class, $result[0]); + self::assertInstanceOf(ECommerceProduct::class, $result[0]); } /** @@ -1089,10 +1089,10 @@ public function testCreatesProxyForLazyLoadingWithForeignKeysWithAliasedProductE $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals(1, count($result)); + self::assertEquals(1, count($result)); - $this->assertInternalType('array', $result[0]); - $this->assertInstanceOf(ECommerceProduct::class, $result[0]['product']); + self::assertInternalType('array', $result[0]); + self::assertInstanceOf(ECommerceProduct::class, $result[0]['product']); } /** @@ -1149,13 +1149,13 @@ public function testChainedJoinWithEmptyCollections() $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(2, count($result)); + self::assertEquals(2, count($result)); - $this->assertInstanceOf(CmsUser::class, $result[0]); - $this->assertInstanceOf(CmsUser::class, $result[1]); + self::assertInstanceOf(CmsUser::class, $result[0]); + self::assertInstanceOf(CmsUser::class, $result[1]); - $this->assertEquals(0, $result[0]->articles->count()); - $this->assertEquals(0, $result[1]->articles->count()); + self::assertEquals(0, $result[0]->articles->count()); + self::assertEquals(0, $result[1]->articles->count()); } /** @@ -1212,16 +1212,16 @@ public function testChainedJoinWithEmptyCollectionsWithAliasedUserEntity() $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(2, count($result)); + self::assertEquals(2, count($result)); - $this->assertInternalType('array', $result[0]); - $this->assertInstanceOf(CmsUser::class, $result[0]['user']); + self::assertInternalType('array', $result[0]); + self::assertInstanceOf(CmsUser::class, $result[0]['user']); - $this->assertInternalType('array', $result[1]); - $this->assertInstanceOf(CmsUser::class, $result[1]['user']); + self::assertInternalType('array', $result[1]); + self::assertInstanceOf(CmsUser::class, $result[1]['user']); - $this->assertEquals(0, $result[0]['user']->articles->count()); - $this->assertEquals(0, $result[1]['user']->articles->count()); + self::assertEquals(0, $result[0]['user']->articles->count()); + self::assertEquals(0, $result[1]['user']->articles->count()); } /** @@ -1281,13 +1281,13 @@ public function testChainedJoinWithEmptyCollectionsWithAliasedUserEntity() \Doctrine\Common\Util\Debug::dump($result, 3); - $this->assertEquals(1, count($result)); + self::assertEquals(1, count($result)); - $this->assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $result[0][$userEntityKey]); // User object - $this->assertEquals(42, $result[0]['id']); - $this->assertEquals('The First', $result[0]['topic']); - $this->assertEquals(1, $result[0]['cid']); - $this->assertEquals('First Comment', $result[0]['ctopic']); + self::assertInstanceOf('Doctrine\Tests\Models\CMS\CmsUser', $result[0][$userEntityKey]); // User object + self::assertEquals(42, $result[0]['id']); + self::assertEquals('The First', $result[0]['topic']); + self::assertEquals(1, $result[0]['cid']); + self::assertEquals('First Comment', $result[0]['ctopic']); }*/ /** @@ -1319,15 +1319,15 @@ public function testResultIteration() $rowNum = 0; while (($row = $iterableResult->next()) !== false) { - $this->assertEquals(1, count($row)); - $this->assertInstanceOf(CmsUser::class, $row[0]); + self::assertEquals(1, count($row)); + self::assertInstanceOf(CmsUser::class, $row[0]); if ($rowNum == 0) { - $this->assertEquals(1, $row[0]->id); - $this->assertEquals('romanb', $row[0]->name); + self::assertEquals(1, $row[0]->id); + self::assertEquals('romanb', $row[0]->name); } else if ($rowNum == 1) { - $this->assertEquals(2, $row[0]->id); - $this->assertEquals('jwage', $row[0]->name); + self::assertEquals(2, $row[0]->id); + self::assertEquals('jwage', $row[0]->name); } ++$rowNum; @@ -1363,17 +1363,17 @@ public function testResultIterationWithAliasedUserEntity() $rowNum = 0; while (($row = $iterableResult->next()) !== false) { - $this->assertEquals(1, count($row)); - $this->assertArrayHasKey(0, $row); - $this->assertArrayHasKey('user', $row[0]); - $this->assertInstanceOf(CmsUser::class, $row[0]['user']); + self::assertEquals(1, count($row)); + self::assertArrayHasKey(0, $row); + self::assertArrayHasKey('user', $row[0]); + self::assertInstanceOf(CmsUser::class, $row[0]['user']); if ($rowNum == 0) { - $this->assertEquals(1, $row[0]['user']->id); - $this->assertEquals('romanb', $row[0]['user']->name); + self::assertEquals(1, $row[0]['user']->id); + self::assertEquals('romanb', $row[0]['user']->name); } else if ($rowNum == 1) { - $this->assertEquals(2, $row[0]['user']->id); - $this->assertEquals('jwage', $row[0]['user']->name); + self::assertEquals(2, $row[0]['user']->id); + self::assertEquals('jwage', $row[0]['user']->name); } ++$rowNum; @@ -1492,15 +1492,15 @@ public function testManyToManyHydration() $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(2, count($result)); + self::assertEquals(2, count($result)); - $this->assertContainsOnly(CmsUser::class, $result); + self::assertContainsOnly(CmsUser::class, $result); - $this->assertEquals(2, count($result[0]->groups)); - $this->assertEquals(2, count($result[0]->phonenumbers)); + self::assertEquals(2, count($result[0]->groups)); + self::assertEquals(2, count($result[0]->phonenumbers)); - $this->assertEquals(4, count($result[1]->groups)); - $this->assertEquals(2, count($result[1]->phonenumbers)); + self::assertEquals(4, count($result[1]->groups)); + self::assertEquals(2, count($result[1]->phonenumbers)); } /** @@ -1615,18 +1615,18 @@ public function testManyToManyHydrationWithAliasedUserEntity() $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(2, count($result)); + self::assertEquals(2, count($result)); - $this->assertInternalType('array', $result[0]); - $this->assertInstanceOf(CmsUser::class, $result[0]['user']); - $this->assertInternalType('array', $result[1]); - $this->assertInstanceOf(CmsUser::class, $result[1]['user']); + self::assertInternalType('array', $result[0]); + self::assertInstanceOf(CmsUser::class, $result[0]['user']); + self::assertInternalType('array', $result[1]); + self::assertInstanceOf(CmsUser::class, $result[1]['user']); - $this->assertEquals(2, count($result[0]['user']->groups)); - $this->assertEquals(2, count($result[0]['user']->phonenumbers)); + self::assertEquals(2, count($result[0]['user']->groups)); + self::assertEquals(2, count($result[0]['user']->phonenumbers)); - $this->assertEquals(4, count($result[1]['user']->groups)); - $this->assertEquals(2, count($result[1]['user']->phonenumbers)); + self::assertEquals(4, count($result[1]['user']->groups)); + self::assertEquals(2, count($result[1]['user']->phonenumbers)); } /** @@ -1673,18 +1673,18 @@ public function testMissingIdForRootEntity($userEntityKey) $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(4, count($result), "Should hydrate four results."); + self::assertEquals(4, count($result), "Should hydrate four results."); - $this->assertEquals('ROMANB', $result[0]['nameUpper']); - $this->assertEquals('ROMANB', $result[1]['nameUpper']); - $this->assertEquals('JWAGE', $result[2]['nameUpper']); - $this->assertEquals('JWAGE', $result[3]['nameUpper']); + self::assertEquals('ROMANB', $result[0]['nameUpper']); + self::assertEquals('ROMANB', $result[1]['nameUpper']); + self::assertEquals('JWAGE', $result[2]['nameUpper']); + self::assertEquals('JWAGE', $result[3]['nameUpper']); - $this->assertInstanceOf(CmsUser::class, $result[0][$userEntityKey]); - $this->assertNull($result[1][$userEntityKey]); + self::assertInstanceOf(CmsUser::class, $result[0][$userEntityKey]); + self::assertNull($result[1][$userEntityKey]); - $this->assertInstanceOf(CmsUser::class, $result[2][$userEntityKey]); - $this->assertNull($result[3][$userEntityKey]); + self::assertInstanceOf(CmsUser::class, $result[2][$userEntityKey]); + self::assertNull($result[3][$userEntityKey]); } /** @@ -1743,10 +1743,10 @@ public function testMissingIdForCollectionValuedChildEntity($userEntityKey) $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(2, count($result)); + self::assertEquals(2, count($result)); - $this->assertEquals(1, $result[0][$userEntityKey]->phonenumbers->count()); - $this->assertEquals(1, $result[1][$userEntityKey]->phonenumbers->count()); + self::assertEquals(1, $result[0][$userEntityKey]->phonenumbers->count()); + self::assertEquals(1, $result[1][$userEntityKey]->phonenumbers->count()); } /** @@ -1797,10 +1797,10 @@ public function testMissingIdForSingleValuedChildEntity($userEntityKey) $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(2, count($result)); + self::assertEquals(2, count($result)); - $this->assertInstanceOf(CmsAddress::class, $result[0][$userEntityKey]->address); - $this->assertNull($result[1][$userEntityKey]->address); + self::assertInstanceOf(CmsAddress::class, $result[0][$userEntityKey]->address); + self::assertNull($result[1][$userEntityKey]->address); } /** @@ -1839,13 +1839,13 @@ public function testIndexByAndMixedResult($userEntityKey) $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals(2, count($result)); + self::assertEquals(2, count($result)); - $this->assertTrue(isset($result[1])); - $this->assertEquals(1, $result[1][$userEntityKey]->id); + self::assertTrue(isset($result[1])); + self::assertEquals(1, $result[1][$userEntityKey]->id); - $this->assertTrue(isset($result[2])); - $this->assertEquals(2, $result[2][$userEntityKey]->id); + self::assertTrue(isset($result[2])); + self::assertEquals(2, $result[2][$userEntityKey]->id); } /** @@ -1877,7 +1877,7 @@ public function testIndexByScalarsOnly($userEntityKey) $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertEquals( + self::assertEquals( [ 'ROMANB' => ['nameUpper' => 'ROMANB'], 'JWAGE' => ['nameUpper' => 'JWAGE'] @@ -1997,10 +1997,10 @@ public function testFetchJoinCollectionValuedAssociationWithDefaultArrayValue() $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertCount(1, $result); - $this->assertInstanceOf(EntityWithArrayDefaultArrayValueM2M::class, $result[0]); - $this->assertInstanceOf(PersistentCollection::class, $result[0]->collection); - $this->assertCount(1, $result[0]->collection); - $this->assertInstanceOf(SimpleEntity::class, $result[0]->collection[0]); + self::assertCount(1, $result); + self::assertInstanceOf(EntityWithArrayDefaultArrayValueM2M::class, $result[0]); + self::assertInstanceOf(PersistentCollection::class, $result[0]->collection); + self::assertCount(1, $result[0]->collection); + self::assertInstanceOf(SimpleEntity::class, $result[0]->collection[0]); } } diff --git a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php index 72d32823e8a..06eafeacdaa 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php @@ -50,24 +50,24 @@ public function testBasicResultSetMapping() $this->_rsm->addFieldResult('u', 'username', 'username'); $this->_rsm->addFieldResult('u', 'name', 'name'); - $this->assertFalse($this->_rsm->isScalarResult('id')); - $this->assertFalse($this->_rsm->isScalarResult('status')); - $this->assertFalse($this->_rsm->isScalarResult('username')); - $this->assertFalse($this->_rsm->isScalarResult('name')); + self::assertFalse($this->_rsm->isScalarResult('id')); + self::assertFalse($this->_rsm->isScalarResult('status')); + self::assertFalse($this->_rsm->isScalarResult('username')); + self::assertFalse($this->_rsm->isScalarResult('name')); - $this->assertTrue($this->_rsm->getClassName('u') == CmsUser::class); + self::assertTrue($this->_rsm->getClassName('u') == CmsUser::class); $class = $this->_rsm->getDeclaringClass('id'); - $this->assertTrue($class == CmsUser::class); + self::assertTrue($class == CmsUser::class); - $this->assertEquals('u', $this->_rsm->getEntityAlias('id')); - $this->assertEquals('u', $this->_rsm->getEntityAlias('status')); - $this->assertEquals('u', $this->_rsm->getEntityAlias('username')); - $this->assertEquals('u', $this->_rsm->getEntityAlias('name')); + self::assertEquals('u', $this->_rsm->getEntityAlias('id')); + self::assertEquals('u', $this->_rsm->getEntityAlias('status')); + self::assertEquals('u', $this->_rsm->getEntityAlias('username')); + self::assertEquals('u', $this->_rsm->getEntityAlias('name')); - $this->assertEquals('id', $this->_rsm->getFieldName('id')); - $this->assertEquals('status', $this->_rsm->getFieldName('status')); - $this->assertEquals('username', $this->_rsm->getFieldName('username')); - $this->assertEquals('name', $this->_rsm->getFieldName('name')); + self::assertEquals('id', $this->_rsm->getFieldName('id')); + self::assertEquals('status', $this->_rsm->getFieldName('status')); + self::assertEquals('username', $this->_rsm->getFieldName('username')); + self::assertEquals('name', $this->_rsm->getFieldName('name')); } /** @@ -90,13 +90,13 @@ public function testFluentInterface() $this->_rsm->addScalarResult('sclr0', 'numPhones', Type::getType('integer')); $this->_rsm->addMetaResult('a', 'user_id', 'user_id', false, Type::getType('integer')); - $this->assertTrue($rms->hasIndexBy('id')); - $this->assertTrue($rms->isFieldResult('id')); - $this->assertTrue($rms->isFieldResult('name')); - $this->assertTrue($rms->isScalarResult('sclr0')); - $this->assertTrue($rms->isRelation('p')); - $this->assertTrue($rms->hasParentAlias('p')); - $this->assertTrue($rms->isMixedResult()); + self::assertTrue($rms->hasIndexBy('id')); + self::assertTrue($rms->isFieldResult('id')); + self::assertTrue($rms->isFieldResult('name')); + self::assertTrue($rms->isScalarResult('sclr0')); + self::assertTrue($rms->isRelation('p')); + self::assertTrue($rms->hasParentAlias('p')); + self::assertTrue($rms->isMixedResult()); } /** @@ -175,20 +175,20 @@ public function testAddNamedNativeQueryResultSetMapping() $rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->_em); $rsm->addNamedNativeQueryMapping($cm, $queryMapping); - $this->assertEquals('scalarColumn', $rsm->getScalarAlias('scalarColumn')); + self::assertEquals('scalarColumn', $rsm->getScalarAlias('scalarColumn')); - $this->assertEquals('c0', $rsm->getEntityAlias('user_id')); - $this->assertEquals('c0', $rsm->getEntityAlias('name')); - $this->assertEquals(CmsUser::class, $rsm->getClassName('c0')); - $this->assertEquals(CmsUser::class, $rsm->getDeclaringClass('name')); - $this->assertEquals(CmsUser::class, $rsm->getDeclaringClass('user_id')); + self::assertEquals('c0', $rsm->getEntityAlias('user_id')); + self::assertEquals('c0', $rsm->getEntityAlias('name')); + self::assertEquals(CmsUser::class, $rsm->getClassName('c0')); + self::assertEquals(CmsUser::class, $rsm->getDeclaringClass('name')); + self::assertEquals(CmsUser::class, $rsm->getDeclaringClass('user_id')); - $this->assertEquals('c1', $rsm->getEntityAlias('email_id')); - $this->assertEquals('c1', $rsm->getEntityAlias('email')); - $this->assertEquals(CmsEmail::class, $rsm->getClassName('c1')); - $this->assertEquals(CmsEmail::class, $rsm->getDeclaringClass('email')); - $this->assertEquals(CmsEmail::class, $rsm->getDeclaringClass('email_id')); + self::assertEquals('c1', $rsm->getEntityAlias('email_id')); + self::assertEquals('c1', $rsm->getEntityAlias('email')); + self::assertEquals(CmsEmail::class, $rsm->getClassName('c1')); + self::assertEquals(CmsEmail::class, $rsm->getDeclaringClass('email')); + self::assertEquals(CmsEmail::class, $rsm->getDeclaringClass('email_id')); } /** @@ -228,16 +228,16 @@ public function testAddNamedNativeQueryResultSetMappingWithoutFields() $rsm->addNamedNativeQueryMapping($cm, $queryMapping); - $this->assertEquals('scalarColumn', $rsm->getScalarAlias('scalarColumn')); - $this->assertEquals('c0', $rsm->getEntityAlias('id')); - $this->assertEquals('c0', $rsm->getEntityAlias('name')); - $this->assertEquals('c0', $rsm->getEntityAlias('status')); - $this->assertEquals('c0', $rsm->getEntityAlias('username')); - $this->assertEquals(CmsUser::class, $rsm->getClassName('c0')); - $this->assertEquals(CmsUser::class, $rsm->getDeclaringClass('id')); - $this->assertEquals(CmsUser::class, $rsm->getDeclaringClass('name')); - $this->assertEquals(CmsUser::class, $rsm->getDeclaringClass('status')); - $this->assertEquals(CmsUser::class, $rsm->getDeclaringClass('username')); + self::assertEquals('scalarColumn', $rsm->getScalarAlias('scalarColumn')); + self::assertEquals('c0', $rsm->getEntityAlias('id')); + self::assertEquals('c0', $rsm->getEntityAlias('name')); + self::assertEquals('c0', $rsm->getEntityAlias('status')); + self::assertEquals('c0', $rsm->getEntityAlias('username')); + self::assertEquals(CmsUser::class, $rsm->getClassName('c0')); + self::assertEquals(CmsUser::class, $rsm->getDeclaringClass('id')); + self::assertEquals(CmsUser::class, $rsm->getDeclaringClass('name')); + self::assertEquals(CmsUser::class, $rsm->getDeclaringClass('status')); + self::assertEquals(CmsUser::class, $rsm->getDeclaringClass('username')); } /** @@ -262,15 +262,15 @@ public function testAddNamedNativeQueryResultClass() $rsm->addNamedNativeQueryMapping($cm, $queryMapping); - $this->assertEquals('c0', $rsm->getEntityAlias('id')); - $this->assertEquals('c0', $rsm->getEntityAlias('name')); - $this->assertEquals('c0', $rsm->getEntityAlias('status')); - $this->assertEquals('c0', $rsm->getEntityAlias('username')); - $this->assertEquals(CmsUser::class, $rsm->getClassName('c0')); - $this->assertEquals(CmsUser::class, $rsm->getDeclaringClass('id')); - $this->assertEquals(CmsUser::class, $rsm->getDeclaringClass('name')); - $this->assertEquals(CmsUser::class, $rsm->getDeclaringClass('status')); - $this->assertEquals(CmsUser::class, $rsm->getDeclaringClass('username')); + self::assertEquals('c0', $rsm->getEntityAlias('id')); + self::assertEquals('c0', $rsm->getEntityAlias('name')); + self::assertEquals('c0', $rsm->getEntityAlias('status')); + self::assertEquals('c0', $rsm->getEntityAlias('username')); + self::assertEquals(CmsUser::class, $rsm->getClassName('c0')); + self::assertEquals(CmsUser::class, $rsm->getDeclaringClass('id')); + self::assertEquals(CmsUser::class, $rsm->getDeclaringClass('name')); + self::assertEquals(CmsUser::class, $rsm->getDeclaringClass('status')); + self::assertEquals(CmsUser::class, $rsm->getDeclaringClass('username')); } /** * @group DDC-117 @@ -283,7 +283,7 @@ public function testIndexByMetadataColumn() $this->_rsm->addMetaResult('lu', '_target', '_target', true, Type::getType('integer')); $this->_rsm->addIndexBy('lu', '_source'); - $this->assertTrue($this->_rsm->hasIndexBy('lu')); + self::assertTrue($this->_rsm->hasIndexBy('lu')); } } diff --git a/tests/Doctrine/Tests/ORM/Hydration/ScalarHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/ScalarHydratorTest.php index f716d766d04..b1d76bd2421 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ScalarHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ScalarHydratorTest.php @@ -38,12 +38,12 @@ public function testNewHydrationSimpleEntityQuery() $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertInternalType('array', $result); - $this->assertCount(2, $result); - $this->assertEquals('romanb', $result[0]['u_name']); - $this->assertEquals(1, $result[0]['u_id']); - $this->assertEquals('jwage', $result[1]['u_name']); - $this->assertEquals(2, $result[1]['u_id']); + self::assertInternalType('array', $result); + self::assertCount(2, $result); + self::assertEquals('romanb', $result[0]['u_name']); + self::assertEquals(1, $result[0]['u_id']); + self::assertEquals('jwage', $result[1]['u_name']); + self::assertEquals(2, $result[1]['u_id']); } /** diff --git a/tests/Doctrine/Tests/ORM/Hydration/SimpleObjectHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/SimpleObjectHydratorTest.php index 63373017e13..b68cdb21249 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/SimpleObjectHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/SimpleObjectHydratorTest.php @@ -67,7 +67,7 @@ public function testExtraFieldInResultSetShouldBeIgnore() $hydrator = new SimpleObjectHydrator($this->_em); $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals($result[0], $expectedEntity); + self::assertEquals($result[0], $expectedEntity); } /** diff --git a/tests/Doctrine/Tests/ORM/Hydration/SingleScalarHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/SingleScalarHydratorTest.php index f9d91be638d..1313ca08958 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/SingleScalarHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/SingleScalarHydratorTest.php @@ -74,19 +74,23 @@ public function testHydrateSingleScalar($name, $resultSet) if ($name === 'result1') { $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals('romanb', $result); + + self::assertEquals('romanb', $result); + return; } if ($name === 'result2') { $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals(1, $result); + + self::assertEquals(1, $result); return; } if (in_array($name, ['result3', 'result4'], true)) { $this->expectException(NonUniqueResultException::class); + $hydrator->hydrateAll($stmt, $rsm); } } diff --git a/tests/Doctrine/Tests/ORM/Id/AssignedGeneratorTest.php b/tests/Doctrine/Tests/ORM/Id/AssignedGeneratorTest.php index aa0240ebcd5..08e67a927d6 100644 --- a/tests/Doctrine/Tests/ORM/Id/AssignedGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Id/AssignedGeneratorTest.php @@ -45,13 +45,13 @@ public function testCorrectIdGeneration() $entity = new AssignedSingleIdEntity; $entity->myId = 1; $id = $this->_assignedGen->generate($this->_em, $entity); - $this->assertEquals(['myId' => 1], $id); + self::assertEquals(['myId' => 1], $id); $entity = new AssignedCompositeIdEntity; $entity->myId2 = 2; $entity->myId1 = 4; $id = $this->_assignedGen->generate($this->_em, $entity); - $this->assertEquals(['myId1' => 4, 'myId2' => 2], $id); + self::assertEquals(['myId1' => 4, 'myId2' => 2], $id); } } diff --git a/tests/Doctrine/Tests/ORM/LazyCriteriaCollectionTest.php b/tests/Doctrine/Tests/ORM/LazyCriteriaCollectionTest.php index 9286da614f8..e257fdc7468 100644 --- a/tests/Doctrine/Tests/ORM/LazyCriteriaCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/LazyCriteriaCollectionTest.php @@ -45,18 +45,18 @@ public function testCountIsCached() { $this->persister->expects($this->once())->method('count')->with($this->criteria)->will($this->returnValue(10)); - $this->assertSame(10, $this->lazyCriteriaCollection->count()); - $this->assertSame(10, $this->lazyCriteriaCollection->count()); - $this->assertSame(10, $this->lazyCriteriaCollection->count()); + self::assertSame(10, $this->lazyCriteriaCollection->count()); + self::assertSame(10, $this->lazyCriteriaCollection->count()); + self::assertSame(10, $this->lazyCriteriaCollection->count()); } public function testCountIsCachedEvenWithZeroResult() { $this->persister->expects($this->once())->method('count')->with($this->criteria)->will($this->returnValue(0)); - $this->assertSame(0, $this->lazyCriteriaCollection->count()); - $this->assertSame(0, $this->lazyCriteriaCollection->count()); - $this->assertSame(0, $this->lazyCriteriaCollection->count()); + self::assertSame(0, $this->lazyCriteriaCollection->count()); + self::assertSame(0, $this->lazyCriteriaCollection->count()); + self::assertSame(0, $this->lazyCriteriaCollection->count()); } public function testCountUsesWrappedCollectionWhenInitialized() @@ -71,9 +71,9 @@ public function testCountUsesWrappedCollectionWhenInitialized() // should never call the persister's count $this->persister->expects($this->never())->method('count'); - $this->assertSame(['foo', 'bar', 'baz'], $this->lazyCriteriaCollection->toArray()); + self::assertSame(['foo', 'bar', 'baz'], $this->lazyCriteriaCollection->toArray()); - $this->assertSame(3, $this->lazyCriteriaCollection->count()); + self::assertSame(3, $this->lazyCriteriaCollection->count()); } public function testMatchingUsesThePersisterOnlyOnce() @@ -99,24 +99,24 @@ public function testMatchingUsesThePersisterOnlyOnce() $filtered = $this->lazyCriteriaCollection->matching($criteria); - $this->assertInstanceOf(Collection::class, $filtered); - $this->assertEquals([$foo], $filtered->toArray()); + self::assertInstanceOf(Collection::class, $filtered); + self::assertEquals([$foo], $filtered->toArray()); - $this->assertEquals([$foo], $this->lazyCriteriaCollection->matching($criteria)->toArray()); + self::assertEquals([$foo], $this->lazyCriteriaCollection->matching($criteria)->toArray()); } public function testIsEmptyUsesCountWhenNotInitialized() { $this->persister->expects($this->once())->method('count')->with($this->criteria)->will($this->returnValue(0)); - $this->assertTrue($this->lazyCriteriaCollection->isEmpty()); + self::assertTrue($this->lazyCriteriaCollection->isEmpty()); } public function testIsEmptyIsFalseIfCountIsNotZero() { $this->persister->expects($this->once())->method('count')->with($this->criteria)->will($this->returnValue(1)); - $this->assertFalse($this->lazyCriteriaCollection->isEmpty()); + self::assertFalse($this->lazyCriteriaCollection->isEmpty()); } public function testIsEmptyUsesWrappedCollectionWhenInitialized() @@ -131,8 +131,8 @@ public function testIsEmptyUsesWrappedCollectionWhenInitialized() // should never call the persister's count $this->persister->expects($this->never())->method('count'); - $this->assertSame(['foo', 'bar', 'baz'], $this->lazyCriteriaCollection->toArray()); + self::assertSame(['foo', 'bar', 'baz'], $this->lazyCriteriaCollection->toArray()); - $this->assertFalse($this->lazyCriteriaCollection->isEmpty()); + self::assertFalse($this->lazyCriteriaCollection->isEmpty()); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index d8b51d7731f..faa0141a02f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -66,12 +66,14 @@ protected function createClassMetadataFactory(EntityManager $em = null) return $factory; } - public function testEntityTableNameAndInheritance() + /** + * @depends testLoadMapping + * @param ClassMetadata $class + */ + public function testEntityTableNameAndInheritance($class) { - $class = $this->createClassMetadata(User::class); - - $this->assertEquals('cms_users', $class->getTableName()); - $this->assertEquals(ClassMetadata::INHERITANCE_TYPE_NONE, $class->inheritanceType); + self::assertEquals('cms_users', $class->getTableName()); + self::assertEquals(ClassMetadata::INHERITANCE_TYPE_NONE, $class->inheritanceType); return $class; } @@ -82,12 +84,14 @@ public function testEntityTableNameAndInheritance() */ public function testEntityIndexes($class) { - $this->assertArrayHasKey('indexes', $class->table, 'ClassMetadata should have indexes key in table property.'); - $this->assertEquals( + self::assertArrayHasKey('indexes', $class->table, 'ClassMetadata should have indexes key in table property.'); + self::assertEquals( [ - 'name_idx' => ['columns' => ['name']], - 0 => ['columns' => ['user_email']] - ], $class->table['indexes']); + 'name_idx' => ['columns' => ['name']], + 0 => ['columns' => ['user_email']] + ], + $class->table['indexes'] + ); return $class; } @@ -96,14 +100,16 @@ public function testEntityIndexFlagsAndPartialIndexes() { $class = $this->createClassMetadata(Comment::class); - $this->assertEquals( + self::assertEquals( [ - 0 => [ - 'columns' => ['content'], - 'flags' => ['fulltext'], - 'options' => ['where' => 'content IS NOT NULL'], - ] - ], $class->table['indexes']); + 0 => [ + 'columns' => ['content'], + 'flags' => ['fulltext'], + 'options' => ['where' => 'content IS NOT NULL'], + ] + ], + $class->table['indexes'] + ); } /** @@ -112,13 +118,13 @@ public function testEntityIndexFlagsAndPartialIndexes() */ public function testEntityUniqueConstraints($class) { - $this->assertArrayHasKey('uniqueConstraints', $class->table, + self::assertArrayHasKey('uniqueConstraints', $class->table, 'ClassMetadata should have uniqueConstraints key in table property when Unique Constraints are set.'); - $this->assertEquals( - [ - "search_idx" => ["columns" => ["name", "user_email"], 'options' => ['where' => 'name IS NOT NULL']] - ], $class->table['uniqueConstraints']); + self::assertEquals( + ["search_idx" => ["columns" => ["name", "user_email"], 'options' => ['where' => 'name IS NOT NULL']]], + $class->table['uniqueConstraints'] + ); return $class; } @@ -129,12 +135,12 @@ public function testEntityUniqueConstraints($class) */ public function testEntityOptions($class) { - $this->assertArrayHasKey('options', $class->table, 'ClassMetadata should have options key in table property.'); + self::assertArrayHasKey('options', $class->table, 'ClassMetadata should have options key in table property.'); - $this->assertEquals( - [ - 'foo' => 'bar', 'baz' => ['key' => 'val'] - ], $class->table['options']); + self::assertEquals( + ['foo' => 'bar', 'baz' => ['key' => 'val']], + $class->table['options'] + ); return $class; } @@ -145,8 +151,8 @@ public function testEntityOptions($class) */ public function testEntitySequence($class) { - $this->assertInternalType('array', $class->sequenceGeneratorDefinition, 'No Sequence Definition set on this driver.'); - $this->assertEquals( + self::assertInternalType('array', $class->sequenceGeneratorDefinition, 'No Sequence Definition set on this driver.'); + self::assertEquals( [ 'sequenceName' => 'tablename_seq', 'allocationSize' => 100, @@ -160,9 +166,8 @@ public function testEntityCustomGenerator() { $class = $this->createClassMetadata(Animal::class); - $this->assertEquals(ClassMetadata::GENERATOR_TYPE_CUSTOM, - $class->generatorType, "Generator Type"); - $this->assertEquals( + self::assertEquals(ClassMetadata::GENERATOR_TYPE_CUSTOM, $class->generatorType, "Generator Type"); + self::assertEquals( ["class" => "stdClass"], $class->customGeneratorDefinition, "Custom Generator Definition"); @@ -175,11 +180,11 @@ public function testEntityCustomGenerator() */ public function testFieldMappings($class) { - $this->assertEquals(4, count($class->fieldMappings)); - $this->assertTrue(isset($class->fieldMappings['id'])); - $this->assertTrue(isset($class->fieldMappings['name'])); - $this->assertTrue(isset($class->fieldMappings['email'])); - $this->assertTrue(isset($class->fieldMappings['version'])); + self::assertEquals(4, count($class->fieldMappings)); + self::assertTrue(isset($class->fieldMappings['id'])); + self::assertTrue(isset($class->fieldMappings['name'])); + self::assertTrue(isset($class->fieldMappings['email'])); + self::assertTrue(isset($class->fieldMappings['version'])); return $class; } @@ -190,10 +195,10 @@ public function testFieldMappings($class) */ public function testVersionedField($class) { - $this->assertTrue($class->isVersioned); - $this->assertEquals("version", $class->versionField); + self::assertTrue($class->isVersioned); + self::assertEquals("version", $class->versionField); - $this->assertFalse(isset($class->fieldMappings['version']['version'])); + self::assertFalse(isset($class->fieldMappings['version']['version'])); } /** @@ -202,9 +207,9 @@ public function testVersionedField($class) */ public function testFieldMappingsColumnNames($class) { - $this->assertEquals("id", $class->fieldMappings['id']['columnName']); - $this->assertEquals("name", $class->fieldMappings['name']['columnName']); - $this->assertEquals("user_email", $class->fieldMappings['email']['columnName']); + self::assertEquals("id", $class->fieldMappings['id']['columnName']); + self::assertEquals("name", $class->fieldMappings['name']['columnName']); + self::assertEquals("user_email", $class->fieldMappings['email']['columnName']); return $class; } @@ -215,10 +220,10 @@ public function testFieldMappingsColumnNames($class) */ public function testStringFieldMappings($class) { - $this->assertEquals('string', $class->fieldMappings['name']['type']->getName()); - $this->assertEquals(50, $class->fieldMappings['name']['length']); - $this->assertTrue($class->fieldMappings['name']['nullable']); - $this->assertTrue($class->fieldMappings['name']['unique']); + self::assertEquals('string', $class->fieldMappings['name']['type']->getName()); + self::assertEquals(50, $class->fieldMappings['name']['length']); + self::assertTrue($class->fieldMappings['name']['nullable']); + self::assertTrue($class->fieldMappings['name']['unique']); return $class; } @@ -233,7 +238,7 @@ public function testStringFieldMappings($class) public function testFieldOptions(ClassMetadata $class) { $expected = ['foo' => 'bar', 'baz' => ['key' => 'val'], 'fixed' => false]; - $this->assertEquals($expected, $class->fieldMappings['name']['options']); + self::assertEquals($expected, $class->fieldMappings['name']['options']); return $class; } @@ -244,7 +249,7 @@ public function testFieldOptions(ClassMetadata $class) */ public function testIdFieldOptions($class) { - $this->assertEquals(['foo' => 'bar', 'unsigned' => false], $class->fieldMappings['id']['options']); + self::assertEquals(['foo' => 'bar', 'unsigned' => false], $class->fieldMappings['id']['options']); return $class; } @@ -255,9 +260,9 @@ public function testIdFieldOptions($class) */ public function testIdentifier($class) { - $this->assertEquals(['id'], $class->identifier); - $this->assertEquals('integer', $class->fieldMappings['id']['type']->getName()); - $this->assertEquals(ClassMetadata::GENERATOR_TYPE_AUTO, $class->generatorType, "ID-Generator is not ClassMetadata::GENERATOR_TYPE_AUTO"); + self::assertEquals(['id'], $class->identifier); + self::assertEquals('integer', $class->fieldMappings['id']['type']->getName()); + self::assertEquals(ClassMetadata::GENERATOR_TYPE_AUTO, $class->generatorType, "ID-Generator is not ClassMetadata::GENERATOR_TYPE_AUTO"); return $class; } @@ -286,7 +291,7 @@ public function testBooleanValuesForOptionIsSetCorrectly() */ public function testAssociations($class) { - $this->assertEquals(3, count($class->associationMappings)); + self::assertEquals(3, count($class->associationMappings)); return $class; } @@ -297,15 +302,15 @@ public function testAssociations($class) */ public function testOwningOneToOneAssociation($class) { - $this->assertTrue(isset($class->associationMappings['address'])); - $this->assertTrue($class->associationMappings['address']['isOwningSide']); - $this->assertEquals('user', $class->associationMappings['address']['inversedBy']); + self::assertTrue(isset($class->associationMappings['address'])); + self::assertTrue($class->associationMappings['address']['isOwningSide']); + self::assertEquals('user', $class->associationMappings['address']['inversedBy']); // Check cascading - $this->assertTrue($class->associationMappings['address']['isCascadeRemove']); - $this->assertFalse($class->associationMappings['address']['isCascadePersist']); - $this->assertFalse($class->associationMappings['address']['isCascadeRefresh']); - $this->assertFalse($class->associationMappings['address']['isCascadeDetach']); - $this->assertFalse($class->associationMappings['address']['isCascadeMerge']); + self::assertTrue($class->associationMappings['address']['isCascadeRemove']); + self::assertFalse($class->associationMappings['address']['isCascadePersist']); + self::assertFalse($class->associationMappings['address']['isCascadeRefresh']); + self::assertFalse($class->associationMappings['address']['isCascadeDetach']); + self::assertFalse($class->associationMappings['address']['isCascadeMerge']); return $class; } @@ -316,17 +321,17 @@ public function testOwningOneToOneAssociation($class) */ public function testInverseOneToManyAssociation($class) { - $this->assertTrue(isset($class->associationMappings['phonenumbers'])); - $this->assertFalse($class->associationMappings['phonenumbers']['isOwningSide']); - $this->assertTrue($class->associationMappings['phonenumbers']['isCascadePersist']); - $this->assertTrue($class->associationMappings['phonenumbers']['isCascadeRemove']); - $this->assertFalse($class->associationMappings['phonenumbers']['isCascadeRefresh']); - $this->assertFalse($class->associationMappings['phonenumbers']['isCascadeDetach']); - $this->assertFalse($class->associationMappings['phonenumbers']['isCascadeMerge']); - $this->assertTrue($class->associationMappings['phonenumbers']['orphanRemoval']); + self::assertTrue(isset($class->associationMappings['phonenumbers'])); + self::assertFalse($class->associationMappings['phonenumbers']['isOwningSide']); + self::assertTrue($class->associationMappings['phonenumbers']['isCascadePersist']); + self::assertTrue($class->associationMappings['phonenumbers']['isCascadeRemove']); + self::assertFalse($class->associationMappings['phonenumbers']['isCascadeRefresh']); + self::assertFalse($class->associationMappings['phonenumbers']['isCascadeDetach']); + self::assertFalse($class->associationMappings['phonenumbers']['isCascadeMerge']); + self::assertTrue($class->associationMappings['phonenumbers']['orphanRemoval']); // Test Order By - $this->assertEquals(['number' => 'ASC'], $class->associationMappings['phonenumbers']['orderBy']); + self::assertEquals(['number' => 'ASC'], $class->associationMappings['phonenumbers']['orderBy']); return $class; } @@ -337,16 +342,16 @@ public function testInverseOneToManyAssociation($class) */ public function testManyToManyAssociationWithCascadeAll($class) { - $this->assertTrue(isset($class->associationMappings['groups'])); - $this->assertTrue($class->associationMappings['groups']['isOwningSide']); + self::assertTrue(isset($class->associationMappings['groups'])); + self::assertTrue($class->associationMappings['groups']['isOwningSide']); // Make sure that cascade-all works as expected - $this->assertTrue($class->associationMappings['groups']['isCascadeRemove']); - $this->assertTrue($class->associationMappings['groups']['isCascadePersist']); - $this->assertTrue($class->associationMappings['groups']['isCascadeRefresh']); - $this->assertTrue($class->associationMappings['groups']['isCascadeDetach']); - $this->assertTrue($class->associationMappings['groups']['isCascadeMerge']); + self::assertTrue($class->associationMappings['groups']['isCascadeRemove']); + self::assertTrue($class->associationMappings['groups']['isCascadePersist']); + self::assertTrue($class->associationMappings['groups']['isCascadeRefresh']); + self::assertTrue($class->associationMappings['groups']['isCascadeDetach']); + self::assertTrue($class->associationMappings['groups']['isCascadeMerge']); - $this->assertFalse(isset($class->associationMappings['groups']['orderBy'])); + self::assertFalse(isset($class->associationMappings['groups']['orderBy'])); return $class; } @@ -357,9 +362,9 @@ public function testManyToManyAssociationWithCascadeAll($class) */ public function testLifecycleCallbacks($class) { - $this->assertEquals(count($class->lifecycleCallbacks), 2); - $this->assertEquals($class->lifecycleCallbacks['prePersist'][0], 'doStuffOnPrePersist'); - $this->assertEquals($class->lifecycleCallbacks['postPersist'][0], 'doStuffOnPostPersist'); + self::assertEquals(count($class->lifecycleCallbacks), 2); + self::assertEquals($class->lifecycleCallbacks['prePersist'][0], 'doStuffOnPrePersist'); + self::assertEquals($class->lifecycleCallbacks['postPersist'][0], 'doStuffOnPostPersist'); return $class; } @@ -370,8 +375,8 @@ public function testLifecycleCallbacks($class) */ public function testLifecycleCallbacksSupportMultipleMethodNames($class) { - $this->assertEquals(count($class->lifecycleCallbacks['prePersist']), 2); - $this->assertEquals($class->lifecycleCallbacks['prePersist'][1], 'doOtherStuffOnPrePersistToo'); + self::assertEquals(count($class->lifecycleCallbacks['prePersist']), 2); + self::assertEquals($class->lifecycleCallbacks['prePersist'][1], 'doOtherStuffOnPrePersistToo'); return $class; } @@ -383,8 +388,8 @@ public function testLifecycleCallbacksSupportMultipleMethodNames($class) public function testJoinColumnUniqueAndNullable($class) { // Non-Nullability of Join Column - $this->assertFalse($class->associationMappings['groups']['joinTable']['joinColumns'][0]['nullable']); - $this->assertFalse($class->associationMappings['groups']['joinTable']['joinColumns'][0]['unique']); + self::assertFalse($class->associationMappings['groups']['joinTable']['joinColumns'][0]['nullable']); + self::assertFalse($class->associationMappings['groups']['joinTable']['joinColumns'][0]['unique']); return $class; } @@ -395,8 +400,8 @@ public function testJoinColumnUniqueAndNullable($class) */ public function testColumnDefinition($class) { - $this->assertEquals("CHAR(32) NOT NULL", $class->fieldMappings['email']['columnDefinition']); - $this->assertEquals("INT NULL", $class->associationMappings['groups']['joinTable']['inverseJoinColumns'][0]['columnDefinition']); + self::assertEquals("CHAR(32) NOT NULL", $class->fieldMappings['email']['columnDefinition']); + self::assertEquals("INT NULL", $class->associationMappings['groups']['joinTable']['inverseJoinColumns'][0]['columnDefinition']); return $class; } @@ -407,7 +412,7 @@ public function testColumnDefinition($class) */ public function testJoinColumnOnDelete($class) { - $this->assertEquals('CASCADE', $class->associationMappings['address']['joinColumns'][0]['onDelete']); + self::assertEquals('CASCADE', $class->associationMappings['address']['joinColumns'][0]['onDelete']); return $class; } @@ -423,12 +428,12 @@ public function testDiscriminatorColumnDefaults() $class = $this->createClassMetadata(Animal::class); - $this->assertEquals( + self::assertEquals( [ - 'name' => 'discr', - 'type' => Type::getType('string'), - 'length' => '32', - 'fieldName' => 'discr', + 'name' => 'discr', + 'type' => Type::getType('string'), + 'length' => '32', + 'fieldName' => 'discr', 'columnDefinition' => null ], $class->discriminatorColumn @@ -446,23 +451,23 @@ public function testMappedSuperclassWithRepository() $class = $factory->getMetadataFor(DDC869CreditCardPayment::class); - $this->assertTrue(isset($class->fieldMappings['id'])); - $this->assertTrue(isset($class->fieldMappings['value'])); - $this->assertTrue(isset($class->fieldMappings['creditCardNumber'])); - $this->assertEquals($class->customRepositoryClassName, DDC869PaymentRepository::class); - $this->assertInstanceOf(DDC869PaymentRepository::class, $em->getRepository(DDC869CreditCardPayment::class)); - $this->assertTrue($em->getRepository(DDC869ChequePayment::class)->isTrue()); + self::assertTrue(isset($class->fieldMappings['id'])); + self::assertTrue(isset($class->fieldMappings['value'])); + self::assertTrue(isset($class->fieldMappings['creditCardNumber'])); + self::assertEquals($class->customRepositoryClassName, DDC869PaymentRepository::class); + self::assertInstanceOf(DDC869PaymentRepository::class, $em->getRepository(DDC869CreditCardPayment::class)); + self::assertTrue($em->getRepository(DDC869ChequePayment::class)->isTrue()); $class = $factory->getMetadataFor(DDC869ChequePayment::class); - $this->assertTrue(isset($class->fieldMappings['id'])); - $this->assertTrue(isset($class->fieldMappings['value'])); - $this->assertTrue(isset($class->fieldMappings['serialNumber'])); - $this->assertEquals($class->customRepositoryClassName, DDC869PaymentRepository::class); - $this->assertInstanceOf(DDC869PaymentRepository::class, $em->getRepository(DDC869ChequePayment::class)); - $this->assertTrue($em->getRepository(DDC869ChequePayment::class)->isTrue()); + self::assertTrue(isset($class->fieldMappings['id'])); + self::assertTrue(isset($class->fieldMappings['value'])); + self::assertTrue(isset($class->fieldMappings['serialNumber'])); + self::assertEquals($class->customRepositoryClassName, DDC869PaymentRepository::class); + self::assertInstanceOf(DDC869PaymentRepository::class, $em->getRepository(DDC869ChequePayment::class)); + self::assertTrue($em->getRepository(DDC869ChequePayment::class)->isTrue()); } /** @@ -474,33 +479,33 @@ public function testDefaultFieldType() $class = $factory->getMetadataFor(DDC1476EntityWithDefaultFieldType::class); - $this->assertArrayHasKey('id', $class->fieldMappings); - $this->assertArrayHasKey('name', $class->fieldMappings); + self::assertArrayHasKey('id', $class->fieldMappings); + self::assertArrayHasKey('name', $class->fieldMappings); - $this->assertArrayHasKey('type', $class->fieldMappings['id']); - $this->assertArrayHasKey('type', $class->fieldMappings['name']); + self::assertArrayHasKey('type', $class->fieldMappings['id']); + self::assertArrayHasKey('type', $class->fieldMappings['name']); - $this->assertEquals('string', $class->fieldMappings['id']['type']->getName()); - $this->assertEquals('string', $class->fieldMappings['name']['type']->getName()); + self::assertEquals('string', $class->fieldMappings['id']['type']->getName()); + self::assertEquals('string', $class->fieldMappings['name']['type']->getName()); - $this->assertArrayHasKey('fieldName', $class->fieldMappings['id']); - $this->assertArrayHasKey('fieldName', $class->fieldMappings['name']); + self::assertArrayHasKey('fieldName', $class->fieldMappings['id']); + self::assertArrayHasKey('fieldName', $class->fieldMappings['name']); - $this->assertEquals('id', $class->fieldMappings['id']['fieldName']); - $this->assertEquals('name', $class->fieldMappings['name']['fieldName']); + self::assertEquals('id', $class->fieldMappings['id']['fieldName']); + self::assertEquals('name', $class->fieldMappings['name']['fieldName']); - $this->assertArrayHasKey('columnName', $class->fieldMappings['id']); - $this->assertArrayHasKey('columnName', $class->fieldMappings['name']); + self::assertArrayHasKey('columnName', $class->fieldMappings['id']); + self::assertArrayHasKey('columnName', $class->fieldMappings['name']); - $this->assertEquals('id', $class->fieldMappings['id']['columnName']); - $this->assertEquals('name', $class->fieldMappings['name']['columnName']); + self::assertEquals('id', $class->fieldMappings['id']['columnName']); + self::assertEquals('name', $class->fieldMappings['name']['columnName']); - $this->assertEquals(ClassMetadata::GENERATOR_TYPE_NONE, $class->generatorType); + self::assertEquals(ClassMetadata::GENERATOR_TYPE_NONE, $class->generatorType); } /** @@ -511,14 +516,14 @@ public function testIdentifierColumnDefinition() $class = $this->createClassMetadata(DDC1170Entity::class); - $this->assertArrayHasKey('id', $class->fieldMappings); - $this->assertArrayHasKey('value', $class->fieldMappings); + self::assertArrayHasKey('id', $class->fieldMappings); + self::assertArrayHasKey('value', $class->fieldMappings); - $this->assertArrayHasKey('columnDefinition', $class->fieldMappings['id']); - $this->assertArrayHasKey('columnDefinition', $class->fieldMappings['value']); + self::assertArrayHasKey('columnDefinition', $class->fieldMappings['id']); + self::assertArrayHasKey('columnDefinition', $class->fieldMappings['value']); - $this->assertEquals("INT unsigned NOT NULL", $class->fieldMappings['id']['columnDefinition']); - $this->assertEquals("VARCHAR(255) NOT NULL", $class->fieldMappings['value']['columnDefinition']); + self::assertEquals("INT unsigned NOT NULL", $class->fieldMappings['id']['columnDefinition']); + self::assertEquals("VARCHAR(255) NOT NULL", $class->fieldMappings['value']['columnDefinition']); } /** @@ -536,9 +541,9 @@ public function testNamingStrategy() $class = $factory->getMetadataFor(DDC1476EntityWithDefaultFieldType::class); - $this->assertEquals('ID', $class->getColumnName('id')); - $this->assertEquals('NAME', $class->getColumnName('name')); - $this->assertEquals('DDC1476ENTITY_WITH_DEFAULT_FIELD_TYPE', $class->table['name']); + self::assertEquals('ID', $class->getColumnName('id')); + self::assertEquals('NAME', $class->getColumnName('name')); + self::assertEquals('DDC1476ENTITY_WITH_DEFAULT_FIELD_TYPE', $class->table['name']); } /** @@ -549,11 +554,11 @@ public function testDiscriminatorColumnDefinition() { $class = $this->createClassMetadata(DDC807Entity::class); - $this->assertArrayHasKey('columnDefinition', $class->discriminatorColumn); - $this->assertArrayHasKey('name', $class->discriminatorColumn); + self::assertArrayHasKey('columnDefinition', $class->discriminatorColumn); + self::assertArrayHasKey('name', $class->discriminatorColumn); - $this->assertEquals("ENUM('ONE','TWO')", $class->discriminatorColumn['columnDefinition']); - $this->assertEquals("dtype", $class->discriminatorColumn['name']); + self::assertEquals("ENUM('ONE','TWO')", $class->discriminatorColumn['columnDefinition']); + self::assertEquals("dtype", $class->discriminatorColumn['name']); } /** @@ -585,7 +590,7 @@ public function testNamedQuery() $driver = $this->_loadDriver(); $class = $this->createClassMetadata(User::class); - $this->assertCount(1, $class->getNamedQueries(), sprintf("Named queries not processed correctly by driver %s", get_class($driver))); + self::assertCount(1, $class->getNamedQueries(), sprintf("Named queries not processed correctly by driver %s", get_class($driver))); } /** @@ -597,47 +602,47 @@ public function testNamedNativeQuery() $class = $this->createClassMetadata(CmsAddress::class); //named native query - $this->assertCount(3, $class->namedNativeQueries); - $this->assertArrayHasKey('find-all', $class->namedNativeQueries); - $this->assertArrayHasKey('find-by-id', $class->namedNativeQueries); + self::assertCount(3, $class->namedNativeQueries); + self::assertArrayHasKey('find-all', $class->namedNativeQueries); + self::assertArrayHasKey('find-by-id', $class->namedNativeQueries); $findAllQuery = $class->getNamedNativeQuery('find-all'); - $this->assertEquals('find-all', $findAllQuery['name']); - $this->assertEquals('mapping-find-all', $findAllQuery['resultSetMapping']); - $this->assertEquals('SELECT id, country, city FROM cms_addresses', $findAllQuery['query']); + self::assertEquals('find-all', $findAllQuery['name']); + self::assertEquals('mapping-find-all', $findAllQuery['resultSetMapping']); + self::assertEquals('SELECT id, country, city FROM cms_addresses', $findAllQuery['query']); $findByIdQuery = $class->getNamedNativeQuery('find-by-id'); - $this->assertEquals('find-by-id', $findByIdQuery['name']); - $this->assertEquals(CmsAddress::class,$findByIdQuery['resultClass']); - $this->assertEquals('SELECT * FROM cms_addresses WHERE id = ?', $findByIdQuery['query']); + self::assertEquals('find-by-id', $findByIdQuery['name']); + self::assertEquals(CmsAddress::class,$findByIdQuery['resultClass']); + self::assertEquals('SELECT * FROM cms_addresses WHERE id = ?', $findByIdQuery['query']); $countQuery = $class->getNamedNativeQuery('count'); - $this->assertEquals('count', $countQuery['name']); - $this->assertEquals('mapping-count', $countQuery['resultSetMapping']); - $this->assertEquals('SELECT COUNT(*) AS count FROM cms_addresses', $countQuery['query']); + self::assertEquals('count', $countQuery['name']); + self::assertEquals('mapping-count', $countQuery['resultSetMapping']); + self::assertEquals('SELECT COUNT(*) AS count FROM cms_addresses', $countQuery['query']); // result set mapping - $this->assertCount(3, $class->sqlResultSetMappings); - $this->assertArrayHasKey('mapping-count', $class->sqlResultSetMappings); - $this->assertArrayHasKey('mapping-find-all', $class->sqlResultSetMappings); - $this->assertArrayHasKey('mapping-without-fields', $class->sqlResultSetMappings); + self::assertCount(3, $class->sqlResultSetMappings); + self::assertArrayHasKey('mapping-count', $class->sqlResultSetMappings); + self::assertArrayHasKey('mapping-find-all', $class->sqlResultSetMappings); + self::assertArrayHasKey('mapping-without-fields', $class->sqlResultSetMappings); $findAllMapping = $class->getSqlResultSetMapping('mapping-find-all'); - $this->assertEquals('mapping-find-all', $findAllMapping['name']); - $this->assertEquals(CmsAddress::class, $findAllMapping['entities'][0]['entityClass']); - $this->assertEquals(['name'=>'id','column'=>'id'], $findAllMapping['entities'][0]['fields'][0]); - $this->assertEquals(['name'=>'city','column'=>'city'], $findAllMapping['entities'][0]['fields'][1]); - $this->assertEquals(['name'=>'country','column'=>'country'], $findAllMapping['entities'][0]['fields'][2]); + self::assertEquals('mapping-find-all', $findAllMapping['name']); + self::assertEquals(CmsAddress::class, $findAllMapping['entities'][0]['entityClass']); + self::assertEquals(['name'=>'id','column'=>'id'], $findAllMapping['entities'][0]['fields'][0]); + self::assertEquals(['name'=>'city','column'=>'city'], $findAllMapping['entities'][0]['fields'][1]); + self::assertEquals(['name'=>'country','column'=>'country'], $findAllMapping['entities'][0]['fields'][2]); $withoutFieldsMapping = $class->getSqlResultSetMapping('mapping-without-fields'); - $this->assertEquals('mapping-without-fields', $withoutFieldsMapping['name']); - $this->assertEquals(CmsAddress::class, $withoutFieldsMapping['entities'][0]['entityClass']); - $this->assertEquals([], $withoutFieldsMapping['entities'][0]['fields']); + self::assertEquals('mapping-without-fields', $withoutFieldsMapping['name']); + self::assertEquals(CmsAddress::class, $withoutFieldsMapping['entities'][0]['entityClass']); + self::assertEquals([], $withoutFieldsMapping['entities'][0]['fields']); $countMapping = $class->getSqlResultSetMapping('mapping-count'); - $this->assertEquals('mapping-count', $countMapping['name']); - $this->assertEquals(['name'=>'count'], $countMapping['columns'][0]); + self::assertEquals('mapping-count', $countMapping['name']); + self::assertEquals(['name'=>'count'], $countMapping['columns'][0]); } @@ -651,65 +656,65 @@ public function testSqlResultSetMapping() $personMetadata = $this->createClassMetadata(CompanyPerson::class); // user asserts - $this->assertCount(4, $userMetadata->getSqlResultSetMappings()); + self::assertCount(4, $userMetadata->getSqlResultSetMappings()); $mapping = $userMetadata->getSqlResultSetMapping('mappingJoinedAddress'); - $this->assertEquals([],$mapping['columns']); - $this->assertEquals('mappingJoinedAddress', $mapping['name']); - $this->assertNull($mapping['entities'][0]['discriminatorColumn']); - $this->assertEquals(['name'=>'id','column'=>'id'], $mapping['entities'][0]['fields'][0]); - $this->assertEquals(['name'=>'name','column'=>'name'], $mapping['entities'][0]['fields'][1]); - $this->assertEquals(['name'=>'status','column'=>'status'], $mapping['entities'][0]['fields'][2]); - $this->assertEquals(['name'=>'address.zip','column'=>'zip'], $mapping['entities'][0]['fields'][3]); - $this->assertEquals(['name'=>'address.city','column'=>'city'], $mapping['entities'][0]['fields'][4]); - $this->assertEquals(['name'=>'address.country','column'=>'country'], $mapping['entities'][0]['fields'][5]); - $this->assertEquals(['name'=>'address.id','column'=>'a_id'], $mapping['entities'][0]['fields'][6]); - $this->assertEquals($userMetadata->name, $mapping['entities'][0]['entityClass']); + self::assertEquals([],$mapping['columns']); + self::assertEquals('mappingJoinedAddress', $mapping['name']); + self::assertNull($mapping['entities'][0]['discriminatorColumn']); + self::assertEquals(['name'=>'id','column'=>'id'], $mapping['entities'][0]['fields'][0]); + self::assertEquals(['name'=>'name','column'=>'name'], $mapping['entities'][0]['fields'][1]); + self::assertEquals(['name'=>'status','column'=>'status'], $mapping['entities'][0]['fields'][2]); + self::assertEquals(['name'=>'address.zip','column'=>'zip'], $mapping['entities'][0]['fields'][3]); + self::assertEquals(['name'=>'address.city','column'=>'city'], $mapping['entities'][0]['fields'][4]); + self::assertEquals(['name'=>'address.country','column'=>'country'], $mapping['entities'][0]['fields'][5]); + self::assertEquals(['name'=>'address.id','column'=>'a_id'], $mapping['entities'][0]['fields'][6]); + self::assertEquals($userMetadata->name, $mapping['entities'][0]['entityClass']); $mapping = $userMetadata->getSqlResultSetMapping('mappingJoinedPhonenumber'); - $this->assertEquals([],$mapping['columns']); - $this->assertEquals('mappingJoinedPhonenumber', $mapping['name']); - $this->assertNull($mapping['entities'][0]['discriminatorColumn']); - $this->assertEquals(['name'=>'id','column'=>'id'], $mapping['entities'][0]['fields'][0]); - $this->assertEquals(['name'=>'name','column'=>'name'], $mapping['entities'][0]['fields'][1]); - $this->assertEquals(['name'=>'status','column'=>'status'], $mapping['entities'][0]['fields'][2]); - $this->assertEquals(['name'=>'phonenumbers.phonenumber','column'=>'number'], $mapping['entities'][0]['fields'][3]); - $this->assertEquals($userMetadata->name, $mapping['entities'][0]['entityClass']); + self::assertEquals([],$mapping['columns']); + self::assertEquals('mappingJoinedPhonenumber', $mapping['name']); + self::assertNull($mapping['entities'][0]['discriminatorColumn']); + self::assertEquals(['name'=>'id','column'=>'id'], $mapping['entities'][0]['fields'][0]); + self::assertEquals(['name'=>'name','column'=>'name'], $mapping['entities'][0]['fields'][1]); + self::assertEquals(['name'=>'status','column'=>'status'], $mapping['entities'][0]['fields'][2]); + self::assertEquals(['name'=>'phonenumbers.phonenumber','column'=>'number'], $mapping['entities'][0]['fields'][3]); + self::assertEquals($userMetadata->name, $mapping['entities'][0]['entityClass']); $mapping = $userMetadata->getSqlResultSetMapping('mappingUserPhonenumberCount'); - $this->assertEquals(['name'=>'numphones'],$mapping['columns'][0]); - $this->assertEquals('mappingUserPhonenumberCount', $mapping['name']); - $this->assertNull($mapping['entities'][0]['discriminatorColumn']); - $this->assertEquals(['name'=>'id','column'=>'id'], $mapping['entities'][0]['fields'][0]); - $this->assertEquals(['name'=>'name','column'=>'name'], $mapping['entities'][0]['fields'][1]); - $this->assertEquals(['name'=>'status','column'=>'status'], $mapping['entities'][0]['fields'][2]); - $this->assertEquals($userMetadata->name, $mapping['entities'][0]['entityClass']); + self::assertEquals(['name'=>'numphones'],$mapping['columns'][0]); + self::assertEquals('mappingUserPhonenumberCount', $mapping['name']); + self::assertNull($mapping['entities'][0]['discriminatorColumn']); + self::assertEquals(['name'=>'id','column'=>'id'], $mapping['entities'][0]['fields'][0]); + self::assertEquals(['name'=>'name','column'=>'name'], $mapping['entities'][0]['fields'][1]); + self::assertEquals(['name'=>'status','column'=>'status'], $mapping['entities'][0]['fields'][2]); + self::assertEquals($userMetadata->name, $mapping['entities'][0]['entityClass']); $mapping = $userMetadata->getSqlResultSetMapping('mappingMultipleJoinsEntityResults'); - $this->assertEquals(['name'=>'numphones'],$mapping['columns'][0]); - $this->assertEquals('mappingMultipleJoinsEntityResults', $mapping['name']); - $this->assertNull($mapping['entities'][0]['discriminatorColumn']); - $this->assertEquals(['name'=>'id','column'=>'u_id'], $mapping['entities'][0]['fields'][0]); - $this->assertEquals(['name'=>'name','column'=>'u_name'], $mapping['entities'][0]['fields'][1]); - $this->assertEquals(['name'=>'status','column'=>'u_status'], $mapping['entities'][0]['fields'][2]); - $this->assertEquals($userMetadata->name, $mapping['entities'][0]['entityClass']); - $this->assertNull($mapping['entities'][1]['discriminatorColumn']); - $this->assertEquals(['name'=>'id','column'=>'a_id'], $mapping['entities'][1]['fields'][0]); - $this->assertEquals(['name'=>'zip','column'=>'a_zip'], $mapping['entities'][1]['fields'][1]); - $this->assertEquals(['name'=>'country','column'=>'a_country'], $mapping['entities'][1]['fields'][2]); - $this->assertEquals(CmsAddress::class, $mapping['entities'][1]['entityClass']); + self::assertEquals(['name'=>'numphones'],$mapping['columns'][0]); + self::assertEquals('mappingMultipleJoinsEntityResults', $mapping['name']); + self::assertNull($mapping['entities'][0]['discriminatorColumn']); + self::assertEquals(['name'=>'id','column'=>'u_id'], $mapping['entities'][0]['fields'][0]); + self::assertEquals(['name'=>'name','column'=>'u_name'], $mapping['entities'][0]['fields'][1]); + self::assertEquals(['name'=>'status','column'=>'u_status'], $mapping['entities'][0]['fields'][2]); + self::assertEquals($userMetadata->name, $mapping['entities'][0]['entityClass']); + self::assertNull($mapping['entities'][1]['discriminatorColumn']); + self::assertEquals(['name'=>'id','column'=>'a_id'], $mapping['entities'][1]['fields'][0]); + self::assertEquals(['name'=>'zip','column'=>'a_zip'], $mapping['entities'][1]['fields'][1]); + self::assertEquals(['name'=>'country','column'=>'a_country'], $mapping['entities'][1]['fields'][2]); + self::assertEquals(CmsAddress::class, $mapping['entities'][1]['entityClass']); //person asserts - $this->assertCount(1, $personMetadata->getSqlResultSetMappings()); + self::assertCount(1, $personMetadata->getSqlResultSetMappings()); $mapping = $personMetadata->getSqlResultSetMapping('mappingFetchAll'); - $this->assertEquals([],$mapping['columns']); - $this->assertEquals('mappingFetchAll', $mapping['name']); - $this->assertEquals('discriminator', $mapping['entities'][0]['discriminatorColumn']); - $this->assertEquals(['name'=>'id','column'=>'id'], $mapping['entities'][0]['fields'][0]); - $this->assertEquals(['name'=>'name','column'=>'name'], $mapping['entities'][0]['fields'][1]); - $this->assertEquals($personMetadata->name, $mapping['entities'][0]['entityClass']); + self::assertEquals([],$mapping['columns']); + self::assertEquals('mappingFetchAll', $mapping['name']); + self::assertEquals('discriminator', $mapping['entities'][0]['discriminatorColumn']); + self::assertEquals(['name'=>'id','column'=>'id'], $mapping['entities'][0]['fields'][0]); + self::assertEquals(['name'=>'name','column'=>'name'], $mapping['entities'][0]['fields'][1]); + self::assertEquals($personMetadata->name, $mapping['entities'][0]['entityClass']); } /* @@ -724,75 +729,75 @@ public function testAssociationOverridesMapping() // assert groups association mappings - $this->assertArrayHasKey('groups', $guestMetadata->associationMappings); - $this->assertArrayHasKey('groups', $adminMetadata->associationMappings); + self::assertArrayHasKey('groups', $guestMetadata->associationMappings); + self::assertArrayHasKey('groups', $adminMetadata->associationMappings); $guestGroups = $guestMetadata->associationMappings['groups']; $adminGroups = $adminMetadata->associationMappings['groups']; // assert not override attributes - $this->assertEquals($guestGroups['fieldName'], $adminGroups['fieldName']); - $this->assertEquals($guestGroups['type'], $adminGroups['type']); - $this->assertEquals($guestGroups['mappedBy'], $adminGroups['mappedBy']); - $this->assertEquals($guestGroups['inversedBy'], $adminGroups['inversedBy']); - $this->assertEquals($guestGroups['isOwningSide'], $adminGroups['isOwningSide']); - $this->assertEquals($guestGroups['fetch'], $adminGroups['fetch']); - $this->assertEquals($guestGroups['isCascadeRemove'], $adminGroups['isCascadeRemove']); - $this->assertEquals($guestGroups['isCascadePersist'], $adminGroups['isCascadePersist']); - $this->assertEquals($guestGroups['isCascadeRefresh'], $adminGroups['isCascadeRefresh']); - $this->assertEquals($guestGroups['isCascadeMerge'], $adminGroups['isCascadeMerge']); - $this->assertEquals($guestGroups['isCascadeDetach'], $adminGroups['isCascadeDetach']); + self::assertEquals($guestGroups['fieldName'], $adminGroups['fieldName']); + self::assertEquals($guestGroups['type'], $adminGroups['type']); + self::assertEquals($guestGroups['mappedBy'], $adminGroups['mappedBy']); + self::assertEquals($guestGroups['inversedBy'], $adminGroups['inversedBy']); + self::assertEquals($guestGroups['isOwningSide'], $adminGroups['isOwningSide']); + self::assertEquals($guestGroups['fetch'], $adminGroups['fetch']); + self::assertEquals($guestGroups['isCascadeRemove'], $adminGroups['isCascadeRemove']); + self::assertEquals($guestGroups['isCascadePersist'], $adminGroups['isCascadePersist']); + self::assertEquals($guestGroups['isCascadeRefresh'], $adminGroups['isCascadeRefresh']); + self::assertEquals($guestGroups['isCascadeMerge'], $adminGroups['isCascadeMerge']); + self::assertEquals($guestGroups['isCascadeDetach'], $adminGroups['isCascadeDetach']); // assert not override attributes - $this->assertEquals('ddc964_users_groups', $guestGroups['joinTable']['name']); - $this->assertEquals('user_id', $guestGroups['joinTable']['joinColumns'][0]['name']); - $this->assertEquals('group_id', $guestGroups['joinTable']['inverseJoinColumns'][0]['name']); + self::assertEquals('ddc964_users_groups', $guestGroups['joinTable']['name']); + self::assertEquals('user_id', $guestGroups['joinTable']['joinColumns'][0]['name']); + self::assertEquals('group_id', $guestGroups['joinTable']['inverseJoinColumns'][0]['name']); - $this->assertEquals(['user_id'=>'id'], $guestGroups['relationToSourceKeyColumns']); - $this->assertEquals(['group_id'=>'id'], $guestGroups['relationToTargetKeyColumns']); - $this->assertEquals(['user_id','group_id'], $guestGroups['joinTableColumns']); + self::assertEquals(['user_id'=>'id'], $guestGroups['relationToSourceKeyColumns']); + self::assertEquals(['group_id'=>'id'], $guestGroups['relationToTargetKeyColumns']); + self::assertEquals(['user_id','group_id'], $guestGroups['joinTableColumns']); - $this->assertEquals('ddc964_users_admingroups', $adminGroups['joinTable']['name']); - $this->assertEquals('adminuser_id', $adminGroups['joinTable']['joinColumns'][0]['name']); - $this->assertEquals('admingroup_id', $adminGroups['joinTable']['inverseJoinColumns'][0]['name']); + self::assertEquals('ddc964_users_admingroups', $adminGroups['joinTable']['name']); + self::assertEquals('adminuser_id', $adminGroups['joinTable']['joinColumns'][0]['name']); + self::assertEquals('admingroup_id', $adminGroups['joinTable']['inverseJoinColumns'][0]['name']); - $this->assertEquals(['adminuser_id'=>'id'], $adminGroups['relationToSourceKeyColumns']); - $this->assertEquals(['admingroup_id'=>'id'], $adminGroups['relationToTargetKeyColumns']); - $this->assertEquals(['adminuser_id','admingroup_id'], $adminGroups['joinTableColumns']); + self::assertEquals(['adminuser_id'=>'id'], $adminGroups['relationToSourceKeyColumns']); + self::assertEquals(['admingroup_id'=>'id'], $adminGroups['relationToTargetKeyColumns']); + self::assertEquals(['adminuser_id','admingroup_id'], $adminGroups['joinTableColumns']); // assert address association mappings - $this->assertArrayHasKey('address', $guestMetadata->associationMappings); - $this->assertArrayHasKey('address', $adminMetadata->associationMappings); + self::assertArrayHasKey('address', $guestMetadata->associationMappings); + self::assertArrayHasKey('address', $adminMetadata->associationMappings); $guestAddress = $guestMetadata->associationMappings['address']; $adminAddress = $adminMetadata->associationMappings['address']; // assert not override attributes - $this->assertEquals($guestAddress['fieldName'], $adminAddress['fieldName']); - $this->assertEquals($guestAddress['type'], $adminAddress['type']); - $this->assertEquals($guestAddress['mappedBy'], $adminAddress['mappedBy']); - $this->assertEquals($guestAddress['inversedBy'], $adminAddress['inversedBy']); - $this->assertEquals($guestAddress['isOwningSide'], $adminAddress['isOwningSide']); - $this->assertEquals($guestAddress['fetch'], $adminAddress['fetch']); - $this->assertEquals($guestAddress['isCascadeRemove'], $adminAddress['isCascadeRemove']); - $this->assertEquals($guestAddress['isCascadePersist'], $adminAddress['isCascadePersist']); - $this->assertEquals($guestAddress['isCascadeRefresh'], $adminAddress['isCascadeRefresh']); - $this->assertEquals($guestAddress['isCascadeMerge'], $adminAddress['isCascadeMerge']); - $this->assertEquals($guestAddress['isCascadeDetach'], $adminAddress['isCascadeDetach']); + self::assertEquals($guestAddress['fieldName'], $adminAddress['fieldName']); + self::assertEquals($guestAddress['type'], $adminAddress['type']); + self::assertEquals($guestAddress['mappedBy'], $adminAddress['mappedBy']); + self::assertEquals($guestAddress['inversedBy'], $adminAddress['inversedBy']); + self::assertEquals($guestAddress['isOwningSide'], $adminAddress['isOwningSide']); + self::assertEquals($guestAddress['fetch'], $adminAddress['fetch']); + self::assertEquals($guestAddress['isCascadeRemove'], $adminAddress['isCascadeRemove']); + self::assertEquals($guestAddress['isCascadePersist'], $adminAddress['isCascadePersist']); + self::assertEquals($guestAddress['isCascadeRefresh'], $adminAddress['isCascadeRefresh']); + self::assertEquals($guestAddress['isCascadeMerge'], $adminAddress['isCascadeMerge']); + self::assertEquals($guestAddress['isCascadeDetach'], $adminAddress['isCascadeDetach']); // assert override - $this->assertEquals('address_id', $guestAddress['joinColumns'][0]['name']); - $this->assertEquals(['address_id'=>'id'], $guestAddress['sourceToTargetKeyColumns']); - $this->assertEquals(['address_id'=>'address_id'], $guestAddress['joinColumnFieldNames']); - $this->assertEquals(['id'=>'address_id'], $guestAddress['targetToSourceKeyColumns']); + self::assertEquals('address_id', $guestAddress['joinColumns'][0]['name']); + self::assertEquals(['address_id'=>'id'], $guestAddress['sourceToTargetKeyColumns']); + self::assertEquals(['address_id'=>'address_id'], $guestAddress['joinColumnFieldNames']); + self::assertEquals(['id'=>'address_id'], $guestAddress['targetToSourceKeyColumns']); - $this->assertEquals('adminaddress_id', $adminAddress['joinColumns'][0]['name']); - $this->assertEquals(['adminaddress_id'=>'id'], $adminAddress['sourceToTargetKeyColumns']); - $this->assertEquals(['adminaddress_id'=>'adminaddress_id'], $adminAddress['joinColumnFieldNames']); - $this->assertEquals(['id'=>'adminaddress_id'], $adminAddress['targetToSourceKeyColumns']); + self::assertEquals('adminaddress_id', $adminAddress['joinColumns'][0]['name']); + self::assertEquals(['adminaddress_id'=>'id'], $adminAddress['sourceToTargetKeyColumns']); + self::assertEquals(['adminaddress_id'=>'adminaddress_id'], $adminAddress['joinColumnFieldNames']); + self::assertEquals(['id'=>'adminaddress_id'], $adminAddress['targetToSourceKeyColumns']); } /* @@ -805,11 +810,11 @@ public function testInversedByOverrideMapping() $adminMetadata = $factory->getMetadataFor(DDC3579Admin::class); // assert groups association mappings - $this->assertArrayHasKey('groups', $adminMetadata->associationMappings); + self::assertArrayHasKey('groups', $adminMetadata->associationMappings); $adminGroups = $adminMetadata->associationMappings['groups']; // assert override - $this->assertEquals('admins', $adminGroups['inversedBy']); + self::assertEquals('admins', $adminGroups['inversedBy']); } /** @@ -834,31 +839,31 @@ public function testAttributeOverridesMapping() $guestMetadata = $factory->getMetadataFor(DDC964Guest::class); $adminMetadata = $factory->getMetadataFor(DDC964Admin::class); - $this->assertTrue($adminMetadata->fieldMappings['id']['id']); - $this->assertEquals('id', $adminMetadata->fieldMappings['id']['fieldName']); - $this->assertEquals('user_id', $adminMetadata->fieldMappings['id']['columnName']); - $this->assertEquals(['user_id'=>'id','user_name'=>'name'], $adminMetadata->fieldNames); - $this->assertEquals(150, $adminMetadata->fieldMappings['id']['length']); + self::assertTrue($adminMetadata->fieldMappings['id']['id']); + self::assertEquals('id', $adminMetadata->fieldMappings['id']['fieldName']); + self::assertEquals('user_id', $adminMetadata->fieldMappings['id']['columnName']); + self::assertEquals(['user_id'=>'id','user_name'=>'name'], $adminMetadata->fieldNames); + self::assertEquals(150, $adminMetadata->fieldMappings['id']['length']); - $this->assertEquals('name', $adminMetadata->fieldMappings['name']['fieldName']); - $this->assertEquals('user_name', $adminMetadata->fieldMappings['name']['columnName']); - $this->assertEquals(250, $adminMetadata->fieldMappings['name']['length']); - $this->assertTrue($adminMetadata->fieldMappings['name']['nullable']); - $this->assertFalse($adminMetadata->fieldMappings['name']['unique']); + self::assertEquals('name', $adminMetadata->fieldMappings['name']['fieldName']); + self::assertEquals('user_name', $adminMetadata->fieldMappings['name']['columnName']); + self::assertEquals(250, $adminMetadata->fieldMappings['name']['length']); + self::assertTrue($adminMetadata->fieldMappings['name']['nullable']); + self::assertFalse($adminMetadata->fieldMappings['name']['unique']); - $this->assertTrue($guestMetadata->fieldMappings['id']['id']); - $this->assertEquals('guest_id', $guestMetadata->fieldMappings['id']['columnName']); - $this->assertEquals('id', $guestMetadata->fieldMappings['id']['fieldName']); - $this->assertEquals(['guest_id'=>'id','guest_name'=>'name'], $guestMetadata->fieldNames); - $this->assertEquals(140, $guestMetadata->fieldMappings['id']['length']); + self::assertTrue($guestMetadata->fieldMappings['id']['id']); + self::assertEquals('guest_id', $guestMetadata->fieldMappings['id']['columnName']); + self::assertEquals('id', $guestMetadata->fieldMappings['id']['fieldName']); + self::assertEquals(['guest_id'=>'id','guest_name'=>'name'], $guestMetadata->fieldNames); + self::assertEquals(140, $guestMetadata->fieldMappings['id']['length']); - $this->assertEquals('name', $guestMetadata->fieldMappings['name']['fieldName']); - $this->assertEquals('guest_name', $guestMetadata->fieldMappings['name']['columnName']); - $this->assertEquals(240, $guestMetadata->fieldMappings['name']['length']); - $this->assertFalse($guestMetadata->fieldMappings['name']['nullable']); - $this->assertTrue($guestMetadata->fieldMappings['name']['unique']); + self::assertEquals('name', $guestMetadata->fieldMappings['name']['fieldName']); + self::assertEquals('guest_name', $guestMetadata->fieldMappings['name']['columnName']); + self::assertEquals(240, $guestMetadata->fieldMappings['name']['length']); + self::assertFalse($guestMetadata->fieldMappings['name']['nullable']); + self::assertTrue($guestMetadata->fieldMappings['name']['unique']); } /** @@ -873,23 +878,23 @@ public function testEntityListeners() $fixClass = $factory->getMetadataFor(CompanyFlexContract::class); $ultraClass = $factory->getMetadataFor(CompanyFlexUltraContract::class); - $this->assertArrayHasKey(Events::prePersist, $superClass->entityListeners); - $this->assertArrayHasKey(Events::postPersist, $superClass->entityListeners); + self::assertArrayHasKey(Events::prePersist, $superClass->entityListeners); + self::assertArrayHasKey(Events::postPersist, $superClass->entityListeners); - $this->assertCount(1, $superClass->entityListeners[Events::prePersist]); - $this->assertCount(1, $superClass->entityListeners[Events::postPersist]); + self::assertCount(1, $superClass->entityListeners[Events::prePersist]); + self::assertCount(1, $superClass->entityListeners[Events::postPersist]); $postPersist = $superClass->entityListeners[Events::postPersist][0]; $prePersist = $superClass->entityListeners[Events::prePersist][0]; - $this->assertEquals(CompanyContractListener::class, $postPersist['class']); - $this->assertEquals(CompanyContractListener::class, $prePersist['class']); - $this->assertEquals('postPersistHandler', $postPersist['method']); - $this->assertEquals('prePersistHandler', $prePersist['method']); + self::assertEquals(CompanyContractListener::class, $postPersist['class']); + self::assertEquals(CompanyContractListener::class, $prePersist['class']); + self::assertEquals('postPersistHandler', $postPersist['method']); + self::assertEquals('prePersistHandler', $prePersist['method']); //Inherited listeners - $this->assertEquals($fixClass->entityListeners, $superClass->entityListeners); - $this->assertEquals($flexClass->entityListeners, $superClass->entityListeners); + self::assertEquals($fixClass->entityListeners, $superClass->entityListeners); + self::assertEquals($flexClass->entityListeners, $superClass->entityListeners); } /** @@ -902,27 +907,27 @@ public function testEntityListenersOverride() $ultraClass = $factory->getMetadataFor(CompanyFlexUltraContract::class); //overridden listeners - $this->assertArrayHasKey(Events::postPersist, $ultraClass->entityListeners); - $this->assertArrayHasKey(Events::prePersist, $ultraClass->entityListeners); + self::assertArrayHasKey(Events::postPersist, $ultraClass->entityListeners); + self::assertArrayHasKey(Events::prePersist, $ultraClass->entityListeners); - $this->assertCount(1, $ultraClass->entityListeners[Events::postPersist]); - $this->assertCount(3, $ultraClass->entityListeners[Events::prePersist]); + self::assertCount(1, $ultraClass->entityListeners[Events::postPersist]); + self::assertCount(3, $ultraClass->entityListeners[Events::prePersist]); $postPersist = $ultraClass->entityListeners[Events::postPersist][0]; $prePersist = $ultraClass->entityListeners[Events::prePersist][0]; - $this->assertEquals(CompanyContractListener::class, $postPersist['class']); - $this->assertEquals(CompanyContractListener::class, $prePersist['class']); - $this->assertEquals('postPersistHandler', $postPersist['method']); - $this->assertEquals('prePersistHandler', $prePersist['method']); + self::assertEquals(CompanyContractListener::class, $postPersist['class']); + self::assertEquals(CompanyContractListener::class, $prePersist['class']); + self::assertEquals('postPersistHandler', $postPersist['method']); + self::assertEquals('prePersistHandler', $prePersist['method']); $prePersist = $ultraClass->entityListeners[Events::prePersist][1]; - $this->assertEquals(CompanyFlexUltraContractListener::class, $prePersist['class']); - $this->assertEquals('prePersistHandler1', $prePersist['method']); + self::assertEquals(CompanyFlexUltraContractListener::class, $prePersist['class']); + self::assertEquals('prePersistHandler1', $prePersist['method']); $prePersist = $ultraClass->entityListeners[Events::prePersist][2]; - $this->assertEquals(CompanyFlexUltraContractListener::class, $prePersist['class']); - $this->assertEquals('prePersistHandler2', $prePersist['method']); + self::assertEquals(CompanyFlexUltraContractListener::class, $prePersist['class']); + self::assertEquals('prePersistHandler2', $prePersist['method']); } @@ -935,23 +940,23 @@ public function testEntityListenersNamingConvention() $factory = $this->createClassMetadataFactory($em); $metadata = $factory->getMetadataFor(CmsAddress::class); - $this->assertArrayHasKey(Events::postPersist, $metadata->entityListeners); - $this->assertArrayHasKey(Events::prePersist, $metadata->entityListeners); - $this->assertArrayHasKey(Events::postUpdate, $metadata->entityListeners); - $this->assertArrayHasKey(Events::preUpdate, $metadata->entityListeners); - $this->assertArrayHasKey(Events::postRemove, $metadata->entityListeners); - $this->assertArrayHasKey(Events::preRemove, $metadata->entityListeners); - $this->assertArrayHasKey(Events::postLoad, $metadata->entityListeners); - $this->assertArrayHasKey(Events::preFlush, $metadata->entityListeners); - - $this->assertCount(1, $metadata->entityListeners[Events::postPersist]); - $this->assertCount(1, $metadata->entityListeners[Events::prePersist]); - $this->assertCount(1, $metadata->entityListeners[Events::postUpdate]); - $this->assertCount(1, $metadata->entityListeners[Events::preUpdate]); - $this->assertCount(1, $metadata->entityListeners[Events::postRemove]); - $this->assertCount(1, $metadata->entityListeners[Events::preRemove]); - $this->assertCount(1, $metadata->entityListeners[Events::postLoad]); - $this->assertCount(1, $metadata->entityListeners[Events::preFlush]); + self::assertArrayHasKey(Events::postPersist, $metadata->entityListeners); + self::assertArrayHasKey(Events::prePersist, $metadata->entityListeners); + self::assertArrayHasKey(Events::postUpdate, $metadata->entityListeners); + self::assertArrayHasKey(Events::preUpdate, $metadata->entityListeners); + self::assertArrayHasKey(Events::postRemove, $metadata->entityListeners); + self::assertArrayHasKey(Events::preRemove, $metadata->entityListeners); + self::assertArrayHasKey(Events::postLoad, $metadata->entityListeners); + self::assertArrayHasKey(Events::preFlush, $metadata->entityListeners); + + self::assertCount(1, $metadata->entityListeners[Events::postPersist]); + self::assertCount(1, $metadata->entityListeners[Events::prePersist]); + self::assertCount(1, $metadata->entityListeners[Events::postUpdate]); + self::assertCount(1, $metadata->entityListeners[Events::preUpdate]); + self::assertCount(1, $metadata->entityListeners[Events::postRemove]); + self::assertCount(1, $metadata->entityListeners[Events::preRemove]); + self::assertCount(1, $metadata->entityListeners[Events::postLoad]); + self::assertCount(1, $metadata->entityListeners[Events::preFlush]); $postPersist = $metadata->entityListeners[Events::postPersist][0]; $prePersist = $metadata->entityListeners[Events::prePersist][0]; @@ -963,23 +968,23 @@ public function testEntityListenersNamingConvention() $preFlush = $metadata->entityListeners[Events::preFlush][0]; - $this->assertEquals(CmsAddressListener::class, $postPersist['class']); - $this->assertEquals(CmsAddressListener::class, $prePersist['class']); - $this->assertEquals(CmsAddressListener::class, $postUpdate['class']); - $this->assertEquals(CmsAddressListener::class, $preUpdate['class']); - $this->assertEquals(CmsAddressListener::class, $postRemove['class']); - $this->assertEquals(CmsAddressListener::class, $preRemove['class']); - $this->assertEquals(CmsAddressListener::class, $postLoad['class']); - $this->assertEquals(CmsAddressListener::class, $preFlush['class']); + self::assertEquals(CmsAddressListener::class, $postPersist['class']); + self::assertEquals(CmsAddressListener::class, $prePersist['class']); + self::assertEquals(CmsAddressListener::class, $postUpdate['class']); + self::assertEquals(CmsAddressListener::class, $preUpdate['class']); + self::assertEquals(CmsAddressListener::class, $postRemove['class']); + self::assertEquals(CmsAddressListener::class, $preRemove['class']); + self::assertEquals(CmsAddressListener::class, $postLoad['class']); + self::assertEquals(CmsAddressListener::class, $preFlush['class']); - $this->assertEquals(Events::postPersist, $postPersist['method']); - $this->assertEquals(Events::prePersist, $prePersist['method']); - $this->assertEquals(Events::postUpdate, $postUpdate['method']); - $this->assertEquals(Events::preUpdate, $preUpdate['method']); - $this->assertEquals(Events::postRemove, $postRemove['method']); - $this->assertEquals(Events::preRemove, $preRemove['method']); - $this->assertEquals(Events::postLoad, $postLoad['method']); - $this->assertEquals(Events::preFlush, $preFlush['method']); + self::assertEquals(Events::postPersist, $postPersist['method']); + self::assertEquals(Events::prePersist, $prePersist['method']); + self::assertEquals(Events::postUpdate, $postUpdate['method']); + self::assertEquals(Events::preUpdate, $preUpdate['method']); + self::assertEquals(Events::postRemove, $postRemove['method']); + self::assertEquals(Events::preRemove, $preRemove['method']); + self::assertEquals(Events::postLoad, $postLoad['method']); + self::assertEquals(Events::preFlush, $preFlush['method']); } /** @@ -990,24 +995,24 @@ public function testSecondLevelCacheMapping() $em = $this->_getTestEntityManager(); $factory = $this->createClassMetadataFactory($em); $class = $factory->getMetadataFor(City::class); - $this->assertArrayHasKey('usage', $class->cache); - $this->assertArrayHasKey('region', $class->cache); - $this->assertEquals(ClassMetadata::CACHE_USAGE_READ_ONLY, $class->cache['usage']); - $this->assertEquals('doctrine_tests_models_cache_city', $class->cache['region']); - - $this->assertArrayHasKey('state', $class->associationMappings); - $this->assertArrayHasKey('cache', $class->associationMappings['state']); - $this->assertArrayHasKey('usage', $class->associationMappings['state']['cache']); - $this->assertArrayHasKey('region', $class->associationMappings['state']['cache']); - $this->assertEquals(ClassMetadata::CACHE_USAGE_READ_ONLY, $class->associationMappings['state']['cache']['usage']); - $this->assertEquals('doctrine_tests_models_cache_city__state', $class->associationMappings['state']['cache']['region']); - - $this->assertArrayHasKey('attractions', $class->associationMappings); - $this->assertArrayHasKey('cache', $class->associationMappings['attractions']); - $this->assertArrayHasKey('usage', $class->associationMappings['attractions']['cache']); - $this->assertArrayHasKey('region', $class->associationMappings['attractions']['cache']); - $this->assertEquals(ClassMetadata::CACHE_USAGE_READ_ONLY, $class->associationMappings['attractions']['cache']['usage']); - $this->assertEquals('doctrine_tests_models_cache_city__attractions', $class->associationMappings['attractions']['cache']['region']); + self::assertArrayHasKey('usage', $class->cache); + self::assertArrayHasKey('region', $class->cache); + self::assertEquals(ClassMetadata::CACHE_USAGE_READ_ONLY, $class->cache['usage']); + self::assertEquals('doctrine_tests_models_cache_city', $class->cache['region']); + + self::assertArrayHasKey('state', $class->associationMappings); + self::assertArrayHasKey('cache', $class->associationMappings['state']); + self::assertArrayHasKey('usage', $class->associationMappings['state']['cache']); + self::assertArrayHasKey('region', $class->associationMappings['state']['cache']); + self::assertEquals(ClassMetadata::CACHE_USAGE_READ_ONLY, $class->associationMappings['state']['cache']['usage']); + self::assertEquals('doctrine_tests_models_cache_city__state', $class->associationMappings['state']['cache']['region']); + + self::assertArrayHasKey('attractions', $class->associationMappings); + self::assertArrayHasKey('cache', $class->associationMappings['attractions']); + self::assertArrayHasKey('usage', $class->associationMappings['attractions']['cache']); + self::assertArrayHasKey('region', $class->associationMappings['attractions']['cache']); + self::assertEquals(ClassMetadata::CACHE_USAGE_READ_ONLY, $class->associationMappings['attractions']['cache']['usage']); + self::assertEquals('doctrine_tests_models_cache_city__attractions', $class->associationMappings['attractions']['cache']['region']); } /** @@ -1019,8 +1024,8 @@ public function testSchemaDefinitionViaExplicitTableSchemaAnnotationProperty() /* @var $metadata \Doctrine\ORM\Mapping\ClassMetadata */ $metadata = $this->createClassMetadataFactory()->getMetadataFor(ExplicitSchemaAndTable::class); - $this->assertSame('explicit_schema', $metadata->getSchemaName()); - $this->assertSame('explicit_table', $metadata->getTableName()); + self::assertSame('explicit_schema', $metadata->getSchemaName()); + self::assertSame('explicit_table', $metadata->getTableName()); } /** @@ -1032,8 +1037,8 @@ public function testSchemaDefinitionViaSchemaDefinedInTableNameInTableAnnotation /* @var $metadata \Doctrine\ORM\Mapping\ClassMetadata */ $metadata = $this->createClassMetadataFactory()->getMetadataFor(SchemaAndTableInTableName::class); - $this->assertSame('implicit_schema', $metadata->getSchemaName()); - $this->assertSame('implicit_table', $metadata->getTableName()); + self::assertSame('implicit_schema', $metadata->getSchemaName()); + self::assertSame('implicit_table', $metadata->getTableName()); } /** @@ -1046,9 +1051,9 @@ public function testDiscriminatorColumnDefaultLength() $this->markTestSkipped('PHP Mapping Drivers have no defaults.'); } $class = $this->createClassMetadata(SingleTableEntityNoDiscriminatorColumnMapping::class); - $this->assertEquals(255, $class->discriminatorColumn['length']); + self::assertEquals(255, $class->discriminatorColumn['length']); $class = $this->createClassMetadata(SingleTableEntityIncompleteDiscriminatorColumnMapping::class); - $this->assertEquals(255, $class->discriminatorColumn['length']); + self::assertEquals(255, $class->discriminatorColumn['length']); } /** @@ -1061,9 +1066,9 @@ public function testDiscriminatorColumnDefaultType() $this->markTestSkipped('PHP Mapping Drivers have no defaults.'); } $class = $this->createClassMetadata(SingleTableEntityNoDiscriminatorColumnMapping::class); - $this->assertEquals('string', $class->discriminatorColumn['type']->getName()); + self::assertEquals('string', $class->discriminatorColumn['type']->getName()); $class = $this->createClassMetadata(SingleTableEntityIncompleteDiscriminatorColumnMapping::class); - $this->assertEquals('string', $class->discriminatorColumn['type']->getName()); + self::assertEquals('string', $class->discriminatorColumn['type']->getName()); } /** @@ -1076,9 +1081,9 @@ public function testDiscriminatorColumnDefaultName() $this->markTestSkipped('PHP Mapping Drivers have no defaults.'); } $class = $this->createClassMetadata(SingleTableEntityNoDiscriminatorColumnMapping::class); - $this->assertEquals('dtype', $class->discriminatorColumn['name']); + self::assertEquals('dtype', $class->discriminatorColumn['name']); $class = $this->createClassMetadata(SingleTableEntityIncompleteDiscriminatorColumnMapping::class); - $this->assertEquals('dtype', $class->discriminatorColumn['name']); + self::assertEquals('dtype', $class->discriminatorColumn['name']); } } @@ -1352,11 +1357,10 @@ public static function loadMetadata(ClassMetadata $metadata) */ class DDC1170Entity { - /** * @param string $value */ - function __construct($value = null) + public function __construct($value = null) { $this->value = $value; } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php index 80ca49dd95a..13ecc8c7d2d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php @@ -55,7 +55,7 @@ public function testColumnWithMissingTypeDefaultsToString() $annotationDriver = $this->_loadDriver(); $annotationDriver->loadMetadataForClass(Annotation\InvalidColumn::class, $cm); - $this->assertEquals('string', $cm->fieldMappings['id']['type']->getName()); + self::assertEquals('string', $cm->fieldMappings['id']['type']->getName()); } /** @@ -69,7 +69,7 @@ public function testGetAllClassNamesIsIdempotent() $annotationDriver = $this->_loadDriverForCMSModels(); $afterTestReset = $annotationDriver->getAllClassNames(); - $this->assertEquals($original, $afterTestReset); + self::assertEquals($original, $afterTestReset); } /** @@ -83,7 +83,7 @@ public function testGetAllClassNamesIsIdempotentEvenWithDifferentDriverInstances $annotationDriver = $this->_loadDriverForCMSModels(); $afterTestReset = $annotationDriver->getAllClassNames(); - $this->assertEquals($original, $afterTestReset); + self::assertEquals($original, $afterTestReset); } /** @@ -96,7 +96,7 @@ public function testGetAllClassNamesReturnsAlreadyLoadedClassesIfAppropriate() $annotationDriver = $this->_loadDriverForCMSModels(); $classes = $annotationDriver->getAllClassNames(); - $this->assertContains(CmsUser::class, $classes); + self::assertContains(CmsUser::class, $classes); } /** @@ -109,7 +109,7 @@ public function testGetClassNamesReturnsOnlyTheAppropriateClasses() $annotationDriver = $this->_loadDriverForCMSModels(); $classes = $annotationDriver->getAllClassNames(); - $this->assertNotContains(ECommerceCart::class, $classes); + self::assertNotContains(ECommerceCart::class, $classes); } protected function _loadDriverForCMSModels() @@ -145,10 +145,10 @@ public function testJoinTablesWithMappedSuperclassForAnnotationDriver() $factory->setEntityManager($em); $classPage = $factory->getMetadataFor(File::class); - $this->assertEquals(File::class, $classPage->associationMappings['parentDirectory']['sourceEntity']); + self::assertEquals(File::class, $classPage->associationMappings['parentDirectory']['sourceEntity']); $classDirectory = $factory->getMetadataFor(Directory::class); - $this->assertEquals(Directory::class, $classDirectory->associationMappings['parentDirectory']['sourceEntity']); + self::assertEquals(Directory::class, $classDirectory->associationMappings['parentDirectory']['sourceEntity']); } /** @@ -206,10 +206,10 @@ public function testInheritanceSkipsParentLifecycleCallbacks() $factory->setEntityManager($em); $cm = $factory->getMetadataFor(AnnotationChild::class); - $this->assertEquals(["postLoad" => ["postLoad"], "preUpdate" => ["preUpdate"]], $cm->lifecycleCallbacks); + self::assertEquals(["postLoad" => ["postLoad"], "preUpdate" => ["preUpdate"]], $cm->lifecycleCallbacks); $cm = $factory->getMetadataFor(AnnotationParent::class); - $this->assertEquals(["postLoad" => ["postLoad"], "preUpdate" => ["preUpdate"]], $cm->lifecycleCallbacks); + self::assertEquals(["postLoad" => ["postLoad"], "preUpdate" => ["preUpdate"]], $cm->lifecycleCallbacks); } /** @@ -250,10 +250,10 @@ public function testAttributeOverridesMappingWithTrait() $metadataWithoutOverride = $factory->getMetadataFor(DDC1872ExampleEntityWithoutOverride::class); $metadataWithOverride = $factory->getMetadataFor(DDC1872ExampleEntityWithOverride::class); - $this->assertEquals('trait_foo', $metadataWithoutOverride->fieldMappings['foo']['columnName']); - $this->assertEquals('foo_overridden', $metadataWithOverride->fieldMappings['foo']['columnName']); - $this->assertArrayHasKey('example_trait_bar_id', $metadataWithoutOverride->associationMappings['bar']['joinColumnFieldNames']); - $this->assertArrayHasKey('example_entity_overridden_bar_id', $metadataWithOverride->associationMappings['bar']['joinColumnFieldNames']); + self::assertEquals('trait_foo', $metadataWithoutOverride->fieldMappings['foo']['columnName']); + self::assertEquals('foo_overridden', $metadataWithOverride->fieldMappings['foo']['columnName']); + self::assertArrayHasKey('example_trait_bar_id', $metadataWithoutOverride->associationMappings['bar']['joinColumnFieldNames']); + self::assertArrayHasKey('example_entity_overridden_bar_id', $metadataWithOverride->associationMappings['bar']['joinColumnFieldNames']); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AnsiQuoteStrategyTest.php b/tests/Doctrine/Tests/ORM/Mapping/AnsiQuoteStrategyTest.php index a0b422c0f76..402dda8327c 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AnsiQuoteStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AnsiQuoteStrategyTest.php @@ -55,8 +55,8 @@ public function testGetColumnName() $class->mapField(['fieldName' => 'name', 'columnName' => 'name']); $class->mapField(['fieldName' => 'id', 'columnName' => 'id', 'id' => true]); - $this->assertEquals('id' ,$this->strategy->getColumnName('id', $class, $this->platform)); - $this->assertEquals('name' ,$this->strategy->getColumnName('name', $class, $this->platform)); + self::assertEquals('id' ,$this->strategy->getColumnName('id', $class, $this->platform)); + self::assertEquals('name' ,$this->strategy->getColumnName('name', $class, $this->platform)); } public function testGetTableName() @@ -64,7 +64,7 @@ public function testGetTableName() $class = $this->createClassMetadata(CmsUser::class); $class->setPrimaryTable(['name'=>'cms_user']); - $this->assertEquals('cms_user' ,$this->strategy->getTableName($class, $this->platform)); + self::assertEquals('cms_user' ,$this->strategy->getTableName($class, $this->platform)); } public function testJoinTableName() @@ -73,17 +73,14 @@ public function testJoinTableName() $class->mapManyToMany( [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser', - 'inversedBy' => 'users', - 'joinTable' => [ - 'name' => 'cmsaddress_cmsuser' - ] + 'fieldName' => 'user', + 'targetEntity' => 'CmsUser', + 'inversedBy' => 'users', + 'joinTable' => ['name' => 'cmsaddress_cmsuser'] ] ); - $this->assertEquals('cmsaddress_cmsuser', $this->strategy->getJoinTableName($class->associationMappings['user'], $class, $this->platform)); - + self::assertEquals('cmsaddress_cmsuser', $this->strategy->getJoinTableName($class->associationMappings['user'], $class, $this->platform)); } public function testIdentifierColumnNames() @@ -98,13 +95,13 @@ public function testIdentifierColumnNames() ] ); - $this->assertEquals(['id'], $this->strategy->getIdentifierColumnNames($class, $this->platform)); + self::assertEquals(['id'], $this->strategy->getIdentifierColumnNames($class, $this->platform)); } public function testColumnAlias() { - $this->assertEquals('columnName_1', $this->strategy->getColumnAlias('columnName', 1, $this->platform)); + self::assertEquals('columnName_1', $this->strategy->getColumnAlias('columnName', 1, $this->platform)); } public function testJoinColumnName() @@ -125,7 +122,7 @@ public function testJoinColumnName() ); $joinColumn = $class->associationMappings['article']['joinColumns'][0]; - $this->assertEquals('article',$this->strategy->getJoinColumnName($joinColumn, $class, $this->platform)); + self::assertEquals('article',$this->strategy->getJoinColumnName($joinColumn, $class, $this->platform)); } public function testReferencedJoinColumnName() @@ -146,7 +143,7 @@ public function testReferencedJoinColumnName() ); $joinColumn = $cm->associationMappings['article']['joinColumns'][0]; - $this->assertEquals('id',$this->strategy->getReferencedJoinColumnName($joinColumn, $cm, $this->platform)); + self::assertEquals('id',$this->strategy->getReferencedJoinColumnName($joinColumn, $cm, $this->platform)); } public function testGetSequenceName() @@ -160,6 +157,6 @@ public function testGetSequenceName() $class->setSequenceGeneratorDefinition($definition); - $this->assertEquals('user_id_seq',$this->strategy->getSequenceName($definition, $class, $this->platform)); + self::assertEquals('user_id_seq',$this->strategy->getSequenceName($definition, $class, $this->platform)); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index 22c2a027224..ec892c8b5ef 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -41,29 +41,29 @@ public function testGetMetadataForSubclassWithTransientBaseClass() { $class = $this->cmf->getMetadataFor(EntitySubClass::class); - $this->assertEmpty($class->subClasses); - $this->assertEmpty($class->parentClasses); - $this->assertArrayHasKey('id', $class->fieldMappings); - $this->assertArrayHasKey('name', $class->fieldMappings); + self::assertEmpty($class->subClasses); + self::assertEmpty($class->parentClasses); + self::assertArrayHasKey('id', $class->fieldMappings); + self::assertArrayHasKey('name', $class->fieldMappings); } public function testGetMetadataForSubclassWithMappedSuperclass() { $class = $this->cmf->getMetadataFor(EntitySubClass2::class); - $this->assertEmpty($class->subClasses); - $this->assertEmpty($class->parentClasses); + self::assertEmpty($class->subClasses); + self::assertEmpty($class->parentClasses); - $this->assertArrayHasKey('mapped1', $class->fieldMappings); - $this->assertArrayHasKey('mapped2', $class->fieldMappings); - $this->assertArrayHasKey('id', $class->fieldMappings); - $this->assertArrayHasKey('name', $class->fieldMappings); + self::assertArrayHasKey('mapped1', $class->fieldMappings); + self::assertArrayHasKey('mapped2', $class->fieldMappings); + self::assertArrayHasKey('id', $class->fieldMappings); + self::assertArrayHasKey('name', $class->fieldMappings); - $this->assertArrayNotHasKey('inherited', $class->fieldMappings['mapped1']); - $this->assertArrayNotHasKey('inherited', $class->fieldMappings['mapped2']); - $this->assertArrayNotHasKey('transient', $class->fieldMappings); + self::assertArrayNotHasKey('inherited', $class->fieldMappings['mapped1']); + self::assertArrayNotHasKey('inherited', $class->fieldMappings['mapped2']); + self::assertArrayNotHasKey('transient', $class->fieldMappings); - $this->assertArrayHasKey('mappedRelated1', $class->associationMappings); + self::assertArrayHasKey('mappedRelated1', $class->associationMappings); } /** @@ -73,26 +73,26 @@ public function testGetMetadataForSubclassWithMappedSuperclassWithRepository() { $class = $this->cmf->getMetadataFor(DDC869CreditCardPayment::class); - $this->assertArrayHasKey('id', $class->fieldMappings); - $this->assertArrayHasKey('value', $class->fieldMappings); - $this->assertArrayHasKey('creditCardNumber', $class->fieldMappings); - $this->assertEquals($class->customRepositoryClassName, DDC869PaymentRepository::class); + self::assertArrayHasKey('id', $class->fieldMappings); + self::assertArrayHasKey('value', $class->fieldMappings); + self::assertArrayHasKey('creditCardNumber', $class->fieldMappings); + self::assertEquals($class->customRepositoryClassName, DDC869PaymentRepository::class); $class = $this->cmf->getMetadataFor(DDC869ChequePayment::class); - $this->assertArrayHasKey('id', $class->fieldMappings); - $this->assertArrayHasKey('value', $class->fieldMappings); - $this->assertArrayHasKey('serialNumber', $class->fieldMappings); - $this->assertEquals($class->customRepositoryClassName, DDC869PaymentRepository::class); + self::assertArrayHasKey('id', $class->fieldMappings); + self::assertArrayHasKey('value', $class->fieldMappings); + self::assertArrayHasKey('serialNumber', $class->fieldMappings); + self::assertEquals($class->customRepositoryClassName, DDC869PaymentRepository::class); // override repositoryClass $class = $this->cmf->getMetadataFor(SubclassWithRepository::class); - $this->assertArrayHasKey('id', $class->fieldMappings); - $this->assertArrayHasKey('value', $class->fieldMappings); - $this->assertEquals($class->customRepositoryClassName, EntityRepository::class); + self::assertArrayHasKey('id', $class->fieldMappings); + self::assertArrayHasKey('value', $class->fieldMappings); + self::assertEquals($class->customRepositoryClassName, EntityRepository::class); } /** @@ -106,9 +106,9 @@ public function testSerializationWithPrivateFieldsFromMappedSuperclass() $class2 = unserialize(serialize($class)); $class2->wakeupReflection(new RuntimeReflectionService); - $this->assertArrayHasKey('mapped1', $class2->reflFields); - $this->assertArrayHasKey('mapped2', $class2->reflFields); - $this->assertArrayHasKey('mappedRelated1', $class2->reflFields); + self::assertArrayHasKey('mapped1', $class2->reflFields); + self::assertArrayHasKey('mapped2', $class2->reflFields); + self::assertArrayHasKey('mappedRelated1', $class2->reflFields); } /** @@ -118,9 +118,9 @@ public function testUnmappedSuperclassInHierarchy() { $class = $this->cmf->getMetadataFor(HierarchyD::class); - $this->assertArrayHasKey('id', $class->fieldMappings); - $this->assertArrayHasKey('a', $class->fieldMappings); - $this->assertArrayHasKey('d', $class->fieldMappings); + self::assertArrayHasKey('id', $class->fieldMappings); + self::assertArrayHasKey('a', $class->fieldMappings); + self::assertArrayHasKey('d', $class->fieldMappings); } /** @@ -147,7 +147,7 @@ public function testMappedSuperclassWithId() { $class = $this->cmf->getMetadataFor(SuperclassEntity::class); - $this->assertArrayHasKey('id', $class->fieldMappings); + self::assertArrayHasKey('id', $class->fieldMappings); } /** @@ -159,8 +159,8 @@ public function testGeneratedValueFromMappedSuperclass() /* @var ClassMetadata $class */ $class = $this->cmf->getMetadataFor(SuperclassEntity::class); - $this->assertInstanceOf(SequenceGenerator::class, $class->idGenerator); - $this->assertEquals( + self::assertInstanceOf(SequenceGenerator::class, $class->idGenerator); + self::assertEquals( ['allocationSize' => 1, 'initialValue' => 10, 'sequenceName' => 'foo'], $class->sequenceGeneratorDefinition ); @@ -175,8 +175,8 @@ public function testSequenceDefinitionInHierarchyWithSandwichMappedSuperclass() /* @var ClassMetadata $class */ $class = $this->cmf->getMetadataFor(HierarchyD::class); - $this->assertInstanceOf(SequenceGenerator::class, $class->idGenerator); - $this->assertEquals( + self::assertInstanceOf(SequenceGenerator::class, $class->idGenerator); + self::assertEquals( ['allocationSize' => 1, 'initialValue' => 10, 'sequenceName' => 'foo'], $class->sequenceGeneratorDefinition ); @@ -191,8 +191,8 @@ public function testMultipleMappedSuperclasses() /* @var ClassMetadata $class */ $class = $this->cmf->getMetadataFor(MediumSuperclassEntity::class); - $this->assertInstanceOf(SequenceGenerator::class, $class->idGenerator); - $this->assertEquals( + self::assertInstanceOf(SequenceGenerator::class, $class->idGenerator); + self::assertEquals( ['allocationSize' => 1, 'initialValue' => 10, 'sequenceName' => 'foo'], $class->sequenceGeneratorDefinition ); @@ -208,10 +208,10 @@ public function testMappedSuperclassIndex() /* @var $ClassMetadata class */ $class = $this->cmf->getMetadataFor(EntityIndexSubClass::class); - $this->assertArrayHasKey('mapped1', $class->fieldMappings); - $this->assertArrayHasKey('IDX_NAME_INDEX', $class->table['uniqueConstraints']); - $this->assertArrayHasKey('IDX_MAPPED1_INDEX', $class->table['uniqueConstraints']); - $this->assertArrayHasKey('IDX_MAPPED2_INDEX', $class->table['indexes']); + self::assertArrayHasKey('mapped1', $class->fieldMappings); + self::assertArrayHasKey('IDX_NAME_INDEX', $class->table['uniqueConstraints']); + self::assertArrayHasKey('IDX_MAPPED1_INDEX', $class->table['uniqueConstraints']); + self::assertArrayHasKey('IDX_MAPPED2_INDEX', $class->table['indexes']); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php index 54d257cad75..a131d467516 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php @@ -36,36 +36,38 @@ public function setUp() public function testSetMappedSuperClass() { - $this->assertIsFluent($this->builder->setMappedSuperClass()); - $this->assertTrue($this->cm->isMappedSuperclass); - $this->assertFalse($this->cm->isEmbeddedClass); + self::assertIsFluent($this->builder->setMappedSuperClass()); + self::assertTrue($this->cm->isMappedSuperclass); + self::assertFalse($this->cm->isEmbeddedClass); } public function testSetEmbedable() { - $this->assertIsFluent($this->builder->setEmbeddable()); - $this->assertTrue($this->cm->isEmbeddedClass); - $this->assertFalse($this->cm->isMappedSuperclass); + self::assertIsFluent($this->builder->setEmbeddable()); + self::assertTrue($this->cm->isEmbeddedClass); + self::assertFalse($this->cm->isMappedSuperclass); } public function testAddEmbeddedWithOnlyRequiredParams() { - $this->assertIsFluent($this->builder->addEmbedded('name', Name::class)); + self::assertIsFluent($this->builder->addEmbedded('name', Name::class)); - $this->assertEquals( + self::assertEquals( [ - 'name' => [ - 'class' => Name::class, - 'columnPrefix' => null, - 'declaredField' => null, - 'originalField' => null, - ] - ], $this->cm->embeddedClasses); + 'name' => [ + 'class' => Name::class, + 'columnPrefix' => null, + 'declaredField' => null, + 'originalField' => null, + ] + ], + $this->cm->embeddedClasses + ); } public function testAddEmbeddedWithPrefix() { - $this->assertIsFluent( + self::assertIsFluent( $this->builder->addEmbedded( 'name', Name::class, @@ -73,26 +75,28 @@ public function testAddEmbeddedWithPrefix() ) ); - $this->assertEquals( + self::assertEquals( [ - 'name' => [ - 'class' => Name::class, - 'columnPrefix' => 'nm_', - 'declaredField' => null, - 'originalField' => null, - ] - ], $this->cm->embeddedClasses); + 'name' => [ + 'class' => Name::class, + 'columnPrefix' => 'nm_', + 'declaredField' => null, + 'originalField' => null, + ] + ], + $this->cm->embeddedClasses + ); } public function testCreateEmbeddedWithoutExtraParams() { $embeddedBuilder = ($this->builder->createEmbedded('name', Name::class)); - $this->assertInstanceOf(EmbeddedBuilder::class, $embeddedBuilder); + self::assertInstanceOf(EmbeddedBuilder::class, $embeddedBuilder); - $this->assertFalse(isset($this->cm->embeddedClasses['name'])); + self::assertFalse(isset($this->cm->embeddedClasses['name'])); - $this->assertIsFluent($embeddedBuilder->build()); - $this->assertEquals( + self::assertIsFluent($embeddedBuilder->build()); + self::assertEquals( [ 'class' => Name::class, 'columnPrefix' => null, @@ -107,11 +111,11 @@ public function testCreateEmbeddedWithColumnPrefix() { $embeddedBuilder = ($this->builder->createEmbedded('name', Name::class)); - $this->assertEquals($embeddedBuilder, $embeddedBuilder->setColumnPrefix('nm_')); + self::assertEquals($embeddedBuilder, $embeddedBuilder->setColumnPrefix('nm_')); - $this->assertIsFluent($embeddedBuilder->build()); + self::assertIsFluent($embeddedBuilder->build()); - $this->assertEquals( + self::assertEquals( [ 'class' => Name::class, 'columnPrefix' => 'nm_', @@ -124,32 +128,32 @@ public function testCreateEmbeddedWithColumnPrefix() public function testSetCustomRepositoryClass() { - $this->assertIsFluent($this->builder->setCustomRepositoryClass(CmsGroup::class)); - $this->assertEquals(CmsGroup::class, $this->cm->customRepositoryClassName); + self::assertIsFluent($this->builder->setCustomRepositoryClass(CmsGroup::class)); + self::assertEquals(CmsGroup::class, $this->cm->customRepositoryClassName); } public function testSetReadOnly() { - $this->assertIsFluent($this->builder->setReadOnly()); - $this->assertTrue($this->cm->isReadOnly); + self::assertIsFluent($this->builder->setReadOnly()); + self::assertTrue($this->cm->isReadOnly); } public function testSetTable() { - $this->assertIsFluent($this->builder->setTable('users')); - $this->assertEquals('users', $this->cm->table['name']); + self::assertIsFluent($this->builder->setTable('users')); + self::assertEquals('users', $this->cm->table['name']); } public function testAddIndex() { - $this->assertIsFluent($this->builder->addIndex(['username', 'name'], 'users_idx')); - $this->assertEquals(['users_idx' => ['columns' => ['username', 'name']]], $this->cm->table['indexes']); + self::assertIsFluent($this->builder->addIndex(['username', 'name'], 'users_idx')); + self::assertEquals(['users_idx' => ['columns' => ['username', 'name']]], $this->cm->table['indexes']); } public function testAddUniqueConstraint() { - $this->assertIsFluent($this->builder->addUniqueConstraint(['username', 'name'], 'users_idx')); - $this->assertEquals(['users_idx' => ['columns' => ['username', 'name']]], $this->cm->table['uniqueConstraints']); + self::assertIsFluent($this->builder->addUniqueConstraint(['username', 'name'], 'users_idx')); + self::assertEquals(['users_idx' => ['columns' => ['username', 'name']]], $this->cm->table['uniqueConstraints']); } public function testSetPrimaryTableRelated() @@ -158,7 +162,7 @@ public function testSetPrimaryTableRelated() $this->builder->addIndex(['username', 'name'], 'users_idx'); $this->builder->setTable('users'); - $this->assertEquals( + self::assertEquals( [ 'name' => 'users', 'indexes' => ['users_idx' => ['columns' => ['username', 'name']]], @@ -170,20 +174,20 @@ public function testSetPrimaryTableRelated() public function testSetInheritanceJoined() { - $this->assertIsFluent($this->builder->setJoinedTableInheritance()); - $this->assertEquals(ClassMetadata::INHERITANCE_TYPE_JOINED, $this->cm->inheritanceType); + self::assertIsFluent($this->builder->setJoinedTableInheritance()); + self::assertEquals(ClassMetadata::INHERITANCE_TYPE_JOINED, $this->cm->inheritanceType); } public function testSetInheritanceSingleTable() { - $this->assertIsFluent($this->builder->setSingleTableInheritance()); - $this->assertEquals(ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE, $this->cm->inheritanceType); + self::assertIsFluent($this->builder->setSingleTableInheritance()); + self::assertEquals(ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE, $this->cm->inheritanceType); } public function testSetDiscriminatorColumn() { - $this->assertIsFluent($this->builder->setDiscriminatorColumn('discr', 'string', '124')); - $this->assertEquals( + self::assertIsFluent($this->builder->setDiscriminatorColumn('discr', 'string', '124')); + self::assertEquals( [ 'fieldName' => 'discr', 'name' => 'discr', @@ -196,30 +200,29 @@ public function testSetDiscriminatorColumn() public function testAddDiscriminatorMapClass() { - $this->assertIsFluent($this->builder->addDiscriminatorMapClass('test', CmsUser::class)); - $this->assertIsFluent($this->builder->addDiscriminatorMapClass('test2', CmsGroup::class)); + self::assertIsFluent($this->builder->addDiscriminatorMapClass('test', CmsUser::class)); + self::assertIsFluent($this->builder->addDiscriminatorMapClass('test2', CmsGroup::class)); - $this->assertEquals( - ['test' => CmsUser::class, 'test2' => CmsGroup::class], $this->cm->discriminatorMap); - $this->assertEquals('test', $this->cm->discriminatorValue); + self::assertEquals(['test' => CmsUser::class, 'test2' => CmsGroup::class], $this->cm->discriminatorMap); + self::assertEquals('test', $this->cm->discriminatorValue); } public function testChangeTrackingPolicyExplicit() { - $this->assertIsFluent($this->builder->setChangeTrackingPolicyDeferredExplicit()); - $this->assertEquals(ClassMetadata::CHANGETRACKING_DEFERRED_EXPLICIT, $this->cm->changeTrackingPolicy); + self::assertIsFluent($this->builder->setChangeTrackingPolicyDeferredExplicit()); + self::assertEquals(ClassMetadata::CHANGETRACKING_DEFERRED_EXPLICIT, $this->cm->changeTrackingPolicy); } public function testChangeTrackingPolicyNotify() { - $this->assertIsFluent($this->builder->setChangeTrackingPolicyNotify()); - $this->assertEquals(ClassMetadata::CHANGETRACKING_NOTIFY, $this->cm->changeTrackingPolicy); + self::assertIsFluent($this->builder->setChangeTrackingPolicyNotify()); + self::assertEquals(ClassMetadata::CHANGETRACKING_NOTIFY, $this->cm->changeTrackingPolicy); } public function testAddField() { - $this->assertIsFluent($this->builder->addField('name', 'string')); - $this->assertEquals( + self::assertIsFluent($this->builder->addField('name', 'string')); + self::assertEquals( [ 'columnName' => 'name', 'fieldName' => 'name', @@ -232,11 +235,11 @@ public function testAddField() public function testCreateField() { $fieldBuilder = ($this->builder->createField('name', 'string')); - $this->assertInstanceOf(FieldBuilder::class, $fieldBuilder); + self::assertInstanceOf(FieldBuilder::class, $fieldBuilder); - $this->assertFalse(isset($this->cm->fieldMappings['name'])); - $this->assertIsFluent($fieldBuilder->build()); - $this->assertEquals( + self::assertFalse(isset($this->cm->fieldMappings['name'])); + self::assertIsFluent($fieldBuilder->build()); + self::assertEquals( [ 'columnName' => 'name', 'fieldName' => 'name', @@ -257,7 +260,7 @@ public function testCreateVersionedField() ->isVersionField() ->build(); - $this->assertEquals( + self::assertEquals( [ 'columnDefinition' => 'foobar', 'columnName' => 'username', @@ -276,8 +279,8 @@ public function testCreatePrimaryField() { $this->builder->createField('id', 'integer')->makePrimaryKey()->generatedValue()->build(); - $this->assertEquals(['id'], $this->cm->identifier); - $this->assertEquals( + self::assertEquals(['id'], $this->cm->identifier); + self::assertEquals( [ 'columnName' => 'id', 'fieldName' => 'id', @@ -292,7 +295,7 @@ public function testCreateUnsignedOptionField() { $this->builder->createField('state', 'integer')->option('unsigned', true)->build(); - $this->assertEquals( + self::assertEquals( [ 'fieldName' => 'state', 'type' => Type::getType('integer'), @@ -307,12 +310,12 @@ public function testAddLifecycleEvent() { $this->builder->addLifecycleEvent('getStatus', 'postLoad'); - $this->assertEquals(['postLoad' => ['getStatus']], $this->cm->lifecycleCallbacks); + self::assertEquals(['postLoad' => ['getStatus']], $this->cm->lifecycleCallbacks); } public function testCreateManyToOne() { - $this->assertIsFluent( + self::assertIsFluent( $this->builder->createManyToOne('groups', CmsGroup::class) ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') ->cascadeAll() @@ -320,7 +323,7 @@ public function testCreateManyToOne() ->build() ); - $this->assertEquals( + self::assertEquals( [ 'groups' => [ 'fieldName' => 'groups', @@ -373,7 +376,7 @@ public function testCreateManyToOne() public function testCreateManyToOneWithIdentity() { - $this->assertIsFluent( + self::assertIsFluent( $this ->builder ->createManyToOne('groups', CmsGroup::class) @@ -384,7 +387,7 @@ public function testCreateManyToOneWithIdentity() ->build() ); - $this->assertEquals( + self::assertEquals( [ 'groups' => [ 'fieldName' => 'groups', @@ -440,7 +443,7 @@ public function testCreateManyToOneWithIdentity() public function testCreateOneToOne() { - $this->assertIsFluent( + self::assertIsFluent( $this->builder->createOneToOne('groups', CmsGroup::class) ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') ->cascadeAll() @@ -448,7 +451,7 @@ public function testCreateOneToOne() ->build() ); - $this->assertEquals( + self::assertEquals( [ 'groups' => [ 'fieldName' => 'groups', @@ -501,7 +504,7 @@ public function testCreateOneToOne() public function testCreateOneToOneWithIdentity() { - $this->assertIsFluent( + self::assertIsFluent( $this ->builder ->createOneToOne('groups', CmsGroup::class) @@ -512,7 +515,7 @@ public function testCreateOneToOneWithIdentity() ->build() ); - $this->assertEquals( + self::assertEquals( [ 'groups' => [ 'fieldName' => 'groups', @@ -581,7 +584,7 @@ public function testThrowsExceptionOnCreateOneToOneWithIdentityOnInverseSide() public function testCreateManyToMany() { - $this->assertIsFluent( + self::assertIsFluent( $this->builder->createManyToMany('groups', CmsGroup::class) ->setJoinTable('groups_users') ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') @@ -591,7 +594,7 @@ public function testCreateManyToMany() ->build() ); - $this->assertEquals( + self::assertEquals( [ 'groups' => [ @@ -679,7 +682,7 @@ public function testThrowsExceptionOnCreateManyToManyWithIdentity() public function testCreateOneToMany() { - $this->assertIsFluent( + self::assertIsFluent( $this->builder->createOneToMany('groups', CmsGroup::class) ->mappedBy('test') ->setOrderBy(['test']) @@ -687,7 +690,7 @@ public function testCreateOneToMany() ->build() ); - $this->assertEquals( + self::assertEquals( [ 'groups' => [ @@ -731,7 +734,7 @@ public function testThrowsExceptionOnCreateOneToManyWithIdentity() public function testOrphanRemovalOnCreateOneToOne() { - $this->assertIsFluent( + self::assertIsFluent( $this->builder ->createOneToOne('groups', CmsGroup::class) ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') @@ -739,7 +742,7 @@ public function testOrphanRemovalOnCreateOneToOne() ->build() ); - $this->assertEquals( + self::assertEquals( [ 'groups' => [ 'fieldName' => 'groups', @@ -786,7 +789,7 @@ public function testOrphanRemovalOnCreateOneToOne() public function testOrphanRemovalOnCreateOneToMany() { - $this->assertIsFluent( + self::assertIsFluent( $this->builder ->createOneToMany('groups', CmsGroup::class) ->mappedBy('test') @@ -794,7 +797,7 @@ public function testOrphanRemovalOnCreateOneToMany() ->build() ); - $this->assertEquals( + self::assertEquals( [ 'groups' => [ @@ -836,7 +839,7 @@ public function testOrphanRemovalOnManyToMany() ->orphanRemoval() ->build(); - $this->assertEquals( + self::assertEquals( [ 'groups' => [ 'fieldName' => 'groups', @@ -891,6 +894,6 @@ public function testOrphanRemovalOnManyToMany() public function assertIsFluent($ret) { - $this->assertSame($this->builder, $ret, "Return Value has to be same instance as used builder"); + self::assertSame($this->builder, $ret, "Return Value has to be same instance as used builder"); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index b76e34162db..0eef33d4622 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -50,21 +50,21 @@ public function testGetMetadataForSingleClass() $cmf->setMetadataFor($cm1->name, $cm1); // Prechecks - $this->assertEquals([], $cm1->parentClasses); - $this->assertEquals(ClassMetadata::INHERITANCE_TYPE_NONE, $cm1->inheritanceType); - $this->assertTrue($cm1->hasField('name')); - $this->assertEquals(2, count($cm1->associationMappings)); - $this->assertEquals(ClassMetadata::GENERATOR_TYPE_AUTO, $cm1->generatorType); - $this->assertEquals('group', $cm1->table['name']); + self::assertEquals([], $cm1->parentClasses); + self::assertEquals(ClassMetadata::INHERITANCE_TYPE_NONE, $cm1->inheritanceType); + self::assertTrue($cm1->hasField('name')); + self::assertEquals(2, count($cm1->associationMappings)); + self::assertEquals(ClassMetadata::GENERATOR_TYPE_AUTO, $cm1->generatorType); + self::assertEquals('group', $cm1->table['name']); // Go $cmMap1 = $cmf->getMetadataFor($cm1->name); - $this->assertSame($cm1, $cmMap1); - $this->assertEquals('group', $cmMap1->table['name']); - $this->assertTrue($cmMap1->table['quoted']); - $this->assertEquals([], $cmMap1->parentClasses); - $this->assertTrue($cmMap1->hasField('name')); + self::assertSame($cm1, $cmMap1); + self::assertEquals('group', $cmMap1->table['name']); + self::assertTrue($cmMap1->table['quoted']); + self::assertEquals([], $cmMap1->parentClasses); + self::assertTrue($cmMap1->hasField('name')); } public function testGetMetadataFor_ReturnsLoadedCustomIdGenerator() @@ -77,8 +77,8 @@ public function testGetMetadataFor_ReturnsLoadedCustomIdGenerator() $actual = $cmf->getMetadataFor($cm1->name); - $this->assertEquals(ClassMetadata::GENERATOR_TYPE_CUSTOM, $actual->generatorType); - $this->assertInstanceOf(CustomIdGenerator::class, $actual->idGenerator); + self::assertEquals(ClassMetadata::GENERATOR_TYPE_CUSTOM, $actual->generatorType); + self::assertInstanceOf(CustomIdGenerator::class, $actual->idGenerator); } public function testGetMetadataFor_ThrowsExceptionOnUnknownCustomGeneratorClass() @@ -118,9 +118,9 @@ public function testHasGetMetadata_NamespaceSeparatorIsNotNormalized() $h2 = $mf->hasMetadataFor('\\' . DoctrineGlobal_Article::class); $m2 = $mf->getMetadataFor('\\' . DoctrineGlobal_Article::class); - $this->assertNotSame($m1, $m2); - $this->assertFalse($h2); - $this->assertTrue($h1); + self::assertNotSame($m1, $m2); + self::assertFalse($h2); + self::assertTrue($h1); } /** @@ -141,8 +141,8 @@ public function testIsTransient() $em = $this->_createEntityManager($driver); - $this->assertTrue($em->getMetadataFactory()->isTransient(CmsUser::class)); - $this->assertFalse($em->getMetadataFactory()->isTransient(CmsArticle::class)); + self::assertTrue($em->getMetadataFactory()->isTransient(CmsUser::class)); + self::assertFalse($em->getMetadataFactory()->isTransient(CmsArticle::class)); } /** @@ -164,8 +164,8 @@ public function testIsTransientEntityNamespace() $em = $this->_createEntityManager($driver); $em->getConfiguration()->addEntityNamespace('CMS', 'Doctrine\Tests\Models\CMS'); - $this->assertTrue($em->getMetadataFactory()->isTransient('CMS:CmsUser')); - $this->assertFalse($em->getMetadataFactory()->isTransient('CMS:CmsArticle')); + self::assertTrue($em->getMetadataFactory()->isTransient('CMS:CmsUser')); + self::assertFalse($em->getMetadataFactory()->isTransient('CMS:CmsArticle')); } public function testAddDefaultDiscriminatorMap() @@ -190,12 +190,12 @@ public function testAddDefaultDiscriminatorMap() $childClassKey = array_search($childClass, $rootDiscriminatorMap); $anotherChildClassKey = array_search($anotherChildClass, $rootDiscriminatorMap); - $this->assertEquals('rootclass', $rootClassKey); - $this->assertEquals('childclass', $childClassKey); - $this->assertEquals('anotherchildclass', $anotherChildClassKey); + self::assertEquals('rootclass', $rootClassKey); + self::assertEquals('childclass', $childClassKey); + self::assertEquals('anotherchildclass', $anotherChildClassKey); - $this->assertEquals($childDiscriminatorMap, $rootDiscriminatorMap); - $this->assertEquals($anotherChildDiscriminatorMap, $rootDiscriminatorMap); + self::assertEquals($childDiscriminatorMap, $rootDiscriminatorMap); + self::assertEquals($anotherChildDiscriminatorMap, $rootDiscriminatorMap); // ClassMetadataFactory::addDefaultDiscriminatorMap shouldn't be called again, because the // discriminator map is already cached @@ -224,7 +224,7 @@ public function testGetAllMetadataWorksWithBadConnection() // getting all the metadata should work, even if get DatabasePlatform blows up $metadata = $cmf->getAllMetadata(); // this will just be an empty array - there was no error - $this->assertEquals([], $metadata); + self::assertEquals([], $metadata); } protected function _createEntityManager($metadataDriver, $conn = null) @@ -298,63 +298,63 @@ public function testQuoteMetadata() $addressMetadata = $cmf->getMetadataFor(Quote\Address::class); // Phone Class Metadata - $this->assertTrue($phoneMetadata->fieldMappings['number']['quoted']); - $this->assertEquals('phone-number', $phoneMetadata->fieldMappings['number']['columnName']); + self::assertTrue($phoneMetadata->fieldMappings['number']['quoted']); + self::assertEquals('phone-number', $phoneMetadata->fieldMappings['number']['columnName']); $user = $phoneMetadata->associationMappings['user']; - $this->assertTrue($user['joinColumns'][0]['quoted']); - $this->assertEquals('user-id', $user['joinColumns'][0]['name']); - $this->assertEquals('user-id', $user['joinColumns'][0]['referencedColumnName']); + self::assertTrue($user['joinColumns'][0]['quoted']); + self::assertEquals('user-id', $user['joinColumns'][0]['name']); + self::assertEquals('user-id', $user['joinColumns'][0]['referencedColumnName']); // User Group Metadata - $this->assertTrue($groupMetadata->fieldMappings['id']['quoted']); - $this->assertTrue($groupMetadata->fieldMappings['name']['quoted']); + self::assertTrue($groupMetadata->fieldMappings['id']['quoted']); + self::assertTrue($groupMetadata->fieldMappings['name']['quoted']); - $this->assertEquals('user-id', $userMetadata->fieldMappings['id']['columnName']); - $this->assertEquals('user-name', $userMetadata->fieldMappings['name']['columnName']); + self::assertEquals('user-id', $userMetadata->fieldMappings['id']['columnName']); + self::assertEquals('user-name', $userMetadata->fieldMappings['name']['columnName']); $user = $groupMetadata->associationMappings['parent']; - $this->assertTrue($user['joinColumns'][0]['quoted']); - $this->assertEquals('parent-id', $user['joinColumns'][0]['name']); - $this->assertEquals('group-id', $user['joinColumns'][0]['referencedColumnName']); + self::assertTrue($user['joinColumns'][0]['quoted']); + self::assertEquals('parent-id', $user['joinColumns'][0]['name']); + self::assertEquals('group-id', $user['joinColumns'][0]['referencedColumnName']); // Address Class Metadata - $this->assertTrue($addressMetadata->fieldMappings['id']['quoted']); - $this->assertTrue($addressMetadata->fieldMappings['zip']['quoted']); + self::assertTrue($addressMetadata->fieldMappings['id']['quoted']); + self::assertTrue($addressMetadata->fieldMappings['zip']['quoted']); - $this->assertEquals('address-id', $addressMetadata->fieldMappings['id']['columnName']); - $this->assertEquals('address-zip', $addressMetadata->fieldMappings['zip']['columnName']); + self::assertEquals('address-id', $addressMetadata->fieldMappings['id']['columnName']); + self::assertEquals('address-zip', $addressMetadata->fieldMappings['zip']['columnName']); $user = $addressMetadata->associationMappings['user']; - $this->assertTrue($user['joinColumns'][0]['quoted']); - $this->assertEquals('user-id', $user['joinColumns'][0]['name']); - $this->assertEquals('user-id', $user['joinColumns'][0]['referencedColumnName']); + self::assertTrue($user['joinColumns'][0]['quoted']); + self::assertEquals('user-id', $user['joinColumns'][0]['name']); + self::assertEquals('user-id', $user['joinColumns'][0]['referencedColumnName']); // User Class Metadata - $this->assertTrue($userMetadata->fieldMappings['id']['quoted']); - $this->assertTrue($userMetadata->fieldMappings['name']['quoted']); + self::assertTrue($userMetadata->fieldMappings['id']['quoted']); + self::assertTrue($userMetadata->fieldMappings['name']['quoted']); - $this->assertEquals('user-id', $userMetadata->fieldMappings['id']['columnName']); - $this->assertEquals('user-name', $userMetadata->fieldMappings['name']['columnName']); + self::assertEquals('user-id', $userMetadata->fieldMappings['id']['columnName']); + self::assertEquals('user-name', $userMetadata->fieldMappings['name']['columnName']); $address = $userMetadata->associationMappings['address']; - $this->assertTrue($address['joinColumns'][0]['quoted']); - $this->assertEquals('address-id', $address['joinColumns'][0]['name']); - $this->assertEquals('address-id', $address['joinColumns'][0]['referencedColumnName']); + self::assertTrue($address['joinColumns'][0]['quoted']); + self::assertEquals('address-id', $address['joinColumns'][0]['name']); + self::assertEquals('address-id', $address['joinColumns'][0]['referencedColumnName']); $groups = $userMetadata->associationMappings['groups']; - $this->assertTrue($groups['joinTable']['quoted']); - $this->assertTrue($groups['joinTable']['joinColumns'][0]['quoted']); - $this->assertEquals('quote-users-groups', $groups['joinTable']['name']); - $this->assertEquals('user-id', $groups['joinTable']['joinColumns'][0]['name']); - $this->assertEquals('user-id', $groups['joinTable']['joinColumns'][0]['referencedColumnName']); + self::assertTrue($groups['joinTable']['quoted']); + self::assertTrue($groups['joinTable']['joinColumns'][0]['quoted']); + self::assertEquals('quote-users-groups', $groups['joinTable']['name']); + self::assertEquals('user-id', $groups['joinTable']['joinColumns'][0]['name']); + self::assertEquals('user-id', $groups['joinTable']['joinColumns'][0]['referencedColumnName']); - $this->assertTrue($groups['joinTable']['inverseJoinColumns'][0]['quoted']); - $this->assertEquals('group-id', $groups['joinTable']['inverseJoinColumns'][0]['name']); - $this->assertEquals('group-id', $groups['joinTable']['inverseJoinColumns'][0]['referencedColumnName']); + self::assertTrue($groups['joinTable']['inverseJoinColumns'][0]['quoted']); + self::assertEquals('group-id', $groups['joinTable']['inverseJoinColumns'][0]['name']); + self::assertEquals('group-id', $groups['joinTable']['inverseJoinColumns'][0]['referencedColumnName']); } /** @@ -388,7 +388,7 @@ public function testFallbackLoadingCausesEventTriggeringThatCanModifyFetchedMeta $eventManager->addEventListener([Events::onClassMetadataNotFound], $listener); - $this->assertSame($metadata, $cmf->getMetadataFor('Foo')); + self::assertSame($metadata, $cmf->getMetadataFor('Foo')); } /** @@ -404,7 +404,7 @@ public function testAcceptsEntityManagerInterfaceInstances() $classMetadataFactory->setEntityManager($entityManager); // not really the cleanest way to check it, but we won't add a getter to the CMF just for the sake of testing. - $this->assertAttributeSame($entityManager, 'em', $classMetadataFactory); + self::assertAttributeSame($entityManager, 'em', $classMetadataFactory); } /** @@ -444,7 +444,7 @@ public function testInheritsIdGeneratorMappingFromEmbeddable() $userMetadata = $cmf->getMetadataFor(DDC4006User::class); - $this->assertTrue($userMetadata->isIdGeneratorIdentity()); + self::assertTrue($userMetadata->isIdGeneratorIdentity()); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php index bf268cf829a..a9a9f4e3373 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php @@ -18,9 +18,9 @@ public function testEvent() $evm = $em->getEventManager(); $evm->addEventListener(Events::loadClassMetadata, $this); $classMetadata = $metadataFactory->getMetadataFor(LoadEventTestEntity::class); - $this->assertTrue($classMetadata->hasField('about')); - $this->assertArrayHasKey('about', $classMetadata->reflFields); - $this->assertInstanceOf('ReflectionProperty', $classMetadata->reflFields['about']); + self::assertTrue($classMetadata->hasField('about')); + self::assertArrayHasKey('about', $classMetadata->reflFields); + self::assertInstanceOf('ReflectionProperty', $classMetadata->reflFields['about']); } public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs) diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 567b302e5da..4b0deb11e21 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -32,13 +32,13 @@ public function testClassMetadataInstanceSerialization() $cm->initializeReflection(new RuntimeReflectionService()); // Test initial state - $this->assertTrue(count($cm->getReflectionProperties()) == 0); - $this->assertInstanceOf('ReflectionClass', $cm->reflClass); - $this->assertEquals(CMS\CmsUser::class, $cm->name); - $this->assertEquals(CMS\CmsUser::class, $cm->rootEntityName); - $this->assertEquals([], $cm->subClasses); - $this->assertEquals([], $cm->parentClasses); - $this->assertEquals(ClassMetadata::INHERITANCE_TYPE_NONE, $cm->inheritanceType); + self::assertTrue(count($cm->getReflectionProperties()) == 0); + self::assertInstanceOf('ReflectionClass', $cm->reflClass); + self::assertEquals(CMS\CmsUser::class, $cm->name); + self::assertEquals(CMS\CmsUser::class, $cm->rootEntityName); + self::assertEquals([], $cm->subClasses); + self::assertEquals([], $cm->parentClasses); + self::assertEquals(ClassMetadata::INHERITANCE_TYPE_NONE, $cm->inheritanceType); // Customize state $cm->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE); @@ -49,29 +49,29 @@ public function testClassMetadataInstanceSerialization() $cm->mapOneToOne(['fieldName' => 'phonenumbers', 'targetEntity' => 'CmsAddress', 'mappedBy' => 'foo']); $cm->markReadOnly(); $cm->addNamedQuery(['name' => 'dql', 'query' => 'foo']); - $this->assertEquals(1, count($cm->associationMappings)); + self::assertEquals(1, count($cm->associationMappings)); $serialized = serialize($cm); $cm = unserialize($serialized); $cm->wakeupReflection(new RuntimeReflectionService()); // Check state - $this->assertTrue(count($cm->getReflectionProperties()) > 0); - $this->assertInstanceOf(\ReflectionClass::class, $cm->reflClass); - $this->assertEquals(CMS\CmsUser::class, $cm->name); - $this->assertEquals('UserParent', $cm->rootEntityName); - $this->assertEquals([CMS\One::class, CMS\Two::class, CMS\Three::class], $cm->subClasses); - $this->assertEquals(['UserParent'], $cm->parentClasses); - $this->assertEquals(CMS\UserRepository::class, $cm->customRepositoryClassName); - $this->assertEquals(['name' => 'disc', 'type' => Type::getType('integer'), 'fieldName' => 'disc'], $cm->discriminatorColumn); - $this->assertTrue($cm->associationMappings['phonenumbers']['type'] == ClassMetadata::ONE_TO_ONE); - $this->assertEquals(1, count($cm->associationMappings)); + self::assertTrue(count($cm->getReflectionProperties()) > 0); + self::assertInstanceOf(\ReflectionClass::class, $cm->reflClass); + self::assertEquals(CMS\CmsUser::class, $cm->name); + self::assertEquals('UserParent', $cm->rootEntityName); + self::assertEquals([CMS\One::class, CMS\Two::class, CMS\Three::class], $cm->subClasses); + self::assertEquals(['UserParent'], $cm->parentClasses); + self::assertEquals(CMS\UserRepository::class, $cm->customRepositoryClassName); + self::assertEquals(['name' => 'disc', 'type' => Type::getType('integer'), 'fieldName' => 'disc'], $cm->discriminatorColumn); + self::assertTrue($cm->associationMappings['phonenumbers']['type'] == ClassMetadata::ONE_TO_ONE); + self::assertEquals(1, count($cm->associationMappings)); $oneOneMapping = $cm->getAssociationMapping('phonenumbers'); - $this->assertTrue($oneOneMapping['fetch'] == ClassMetadata::FETCH_LAZY); - $this->assertEquals('phonenumbers', $oneOneMapping['fieldName']); - $this->assertEquals(CMS\CmsAddress::class, $oneOneMapping['targetEntity']); - $this->assertTrue($cm->isReadOnly); - $this->assertEquals(['dql' => ['name'=>'dql','query'=>'foo','dql'=>'foo']], $cm->namedQueries); + self::assertTrue($oneOneMapping['fetch'] == ClassMetadata::FETCH_LAZY); + self::assertEquals('phonenumbers', $oneOneMapping['fieldName']); + self::assertEquals(CMS\CmsAddress::class, $oneOneMapping['targetEntity']); + self::assertTrue($cm->isReadOnly); + self::assertEquals(['dql' => ['name'=>'dql','query'=>'foo','dql'=>'foo']], $cm->namedQueries); } public function testFieldIsNullable() @@ -81,15 +81,15 @@ public function testFieldIsNullable() // Explicit Nullable $cm->mapField(['fieldName' => 'status', 'nullable' => true, 'type' => 'string', 'length' => 50]); - $this->assertTrue($cm->isNullable('status')); + self::assertTrue($cm->isNullable('status')); // Explicit Not Nullable $cm->mapField(['fieldName' => 'username', 'nullable' => false, 'type' => 'string', 'length' => 50]); - $this->assertFalse($cm->isNullable('username')); + self::assertFalse($cm->isNullable('username')); // Implicit Not Nullable $cm->mapField(['fieldName' => 'name', 'type' => 'string', 'length' => 50]); - $this->assertFalse($cm->isNullable('name'), "By default a field should not be nullable."); + self::assertFalse($cm->isNullable('name'), "By default a field should not be nullable."); } /** @@ -113,7 +113,7 @@ public function testMapAssociationInGlobalNamespace() ] ); - $this->assertEquals("DoctrineGlobal_User", $cm->associationMappings['author']['targetEntity']); + self::assertEquals("DoctrineGlobal_User", $cm->associationMappings['author']['targetEntity']); } public function testMapManyToManyJoinTableDefaults() @@ -128,13 +128,17 @@ public function testMapManyToManyJoinTableDefaults() ); $assoc = $cm->associationMappings['groups']; - $this->assertEquals( + + self::assertEquals( [ - 'name' => 'cmsuser_cmsgroup', - 'joinColumns' => [['name' => 'cmsuser_id', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE']], - 'inverseJoinColumns' => [['name' => 'cmsgroup_id', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE']] - ], $assoc['joinTable']); - $this->assertTrue($assoc['isOnDeleteCascade']); + 'name' => 'cmsuser_cmsgroup', + 'joinColumns' => [['name' => 'cmsuser_id', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE']], + 'inverseJoinColumns' => [['name' => 'cmsgroup_id', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE']] + ], + $assoc['joinTable'] + ); + + self::assertTrue($assoc['isOnDeleteCascade']); } public function testSerializeManyToManyJoinTableCascade() @@ -143,8 +147,8 @@ public function testSerializeManyToManyJoinTableCascade() $cm->initializeReflection(new RuntimeReflectionService()); $cm->mapManyToMany( [ - 'fieldName' => 'groups', - 'targetEntity' => 'CmsGroup' + 'fieldName' => 'groups', + 'targetEntity' => 'CmsGroup' ] ); @@ -152,7 +156,7 @@ public function testSerializeManyToManyJoinTableCascade() $assoc = $cm->associationMappings['groups']; $assoc = unserialize(serialize($assoc)); - $this->assertTrue($assoc['isOnDeleteCascade']); + self::assertTrue($assoc['isOnDeleteCascade']); } /** @@ -166,8 +170,8 @@ public function testSetDiscriminatorMapInGlobalNamespace() $cm->initializeReflection(new RuntimeReflectionService()); $cm->setDiscriminatorMap(['descr' => 'DoctrineGlobal_Article', 'foo' => 'DoctrineGlobal_User']); - $this->assertEquals("DoctrineGlobal_Article", $cm->discriminatorMap['descr']); - $this->assertEquals("DoctrineGlobal_User", $cm->discriminatorMap['foo']); + self::assertEquals("DoctrineGlobal_Article", $cm->discriminatorMap['descr']); + self::assertEquals("DoctrineGlobal_User", $cm->discriminatorMap['foo']); } /** @@ -181,7 +185,7 @@ public function testSetSubClassesInGlobalNamespace() $cm->initializeReflection(new RuntimeReflectionService()); $cm->setSubclasses(['DoctrineGlobal_Article']); - $this->assertEquals("DoctrineGlobal_Article", $cm->subClasses[0]); + self::assertEquals("DoctrineGlobal_Article", $cm->subClasses[0]); } /** @@ -297,7 +301,7 @@ public function testGetTemporaryTableNameSchema() $cm->setTableName('foo.bar'); - $this->assertEquals('foo_bar_id_tmp', $cm->getTemporaryIdTableName()); + self::assertEquals('foo_bar_id_tmp', $cm->getTemporaryIdTableName()); } public function testDefaultTableName() @@ -309,8 +313,8 @@ public function testDefaultTableName() $primaryTable = []; $cm->setPrimaryTable($primaryTable); - $this->assertEquals('CmsUser', $cm->getTableName()); - $this->assertEquals('CmsUser', $cm->table['name']); + self::assertEquals('CmsUser', $cm->getTableName()); + self::assertEquals('CmsUser', $cm->table['name']); $cm = new ClassMetadata(CMS\CmsAddress::class); $cm->initializeReflection(new RuntimeReflectionService()); @@ -326,7 +330,7 @@ public function testDefaultTableName() ] ] ); - $this->assertEquals('cmsaddress_cmsuser', $cm->associationMappings['user']['joinTable']['name']); + self::assertEquals('cmsaddress_cmsuser', $cm->associationMappings['user']['joinTable']['name']); } public function testDefaultJoinColumnName() @@ -343,7 +347,7 @@ public function testDefaultJoinColumnName() 'joinColumns' => [['referencedColumnName' => 'id']] ] ); - $this->assertEquals('user_id', $cm->associationMappings['user']['joinColumns'][0]['name']); + self::assertEquals('user_id', $cm->associationMappings['user']['joinColumns'][0]['name']); $cm = new ClassMetadata(CMS\CmsAddress::class); $cm->initializeReflection(new RuntimeReflectionService()); @@ -359,8 +363,8 @@ public function testDefaultJoinColumnName() ] ] ); - $this->assertEquals('cmsaddress_id', $cm->associationMappings['user']['joinTable']['joinColumns'][0]['name']); - $this->assertEquals('cmsuser_id', $cm->associationMappings['user']['joinTable']['inverseJoinColumns'][0]['name']); + self::assertEquals('cmsaddress_id', $cm->associationMappings['user']['joinTable']['joinColumns'][0]['name']); + self::assertEquals('cmsuser_id', $cm->associationMappings['user']['joinTable']['inverseJoinColumns'][0]['name']); } /** @@ -386,30 +390,30 @@ public function testUnderscoreNamingStrategyDefaults() ] ); - $this->assertEquals(['USER_ID'=>'ID'], $oneToOneMetadata->associationMappings['user']['sourceToTargetKeyColumns']); - $this->assertEquals(['USER_ID'=>'USER_ID'], $oneToOneMetadata->associationMappings['user']['joinColumnFieldNames']); - $this->assertEquals(['ID'=>'USER_ID'], $oneToOneMetadata->associationMappings['user']['targetToSourceKeyColumns']); + self::assertEquals(['USER_ID'=>'ID'], $oneToOneMetadata->associationMappings['user']['sourceToTargetKeyColumns']); + self::assertEquals(['USER_ID'=>'USER_ID'], $oneToOneMetadata->associationMappings['user']['joinColumnFieldNames']); + self::assertEquals(['ID'=>'USER_ID'], $oneToOneMetadata->associationMappings['user']['targetToSourceKeyColumns']); - $this->assertEquals('USER_ID', $oneToOneMetadata->associationMappings['user']['joinColumns'][0]['name']); - $this->assertEquals('ID', $oneToOneMetadata->associationMappings['user']['joinColumns'][0]['referencedColumnName']); + self::assertEquals('USER_ID', $oneToOneMetadata->associationMappings['user']['joinColumns'][0]['name']); + self::assertEquals('ID', $oneToOneMetadata->associationMappings['user']['joinColumns'][0]['referencedColumnName']); - $this->assertEquals('CMS_ADDRESS_CMS_USER', $manyToManyMetadata->associationMappings['user']['joinTable']['name']); + self::assertEquals('CMS_ADDRESS_CMS_USER', $manyToManyMetadata->associationMappings['user']['joinTable']['name']); - $this->assertEquals(['CMS_ADDRESS_ID','CMS_USER_ID'], $manyToManyMetadata->associationMappings['user']['joinTableColumns']); - $this->assertEquals(['CMS_ADDRESS_ID'=>'ID'], $manyToManyMetadata->associationMappings['user']['relationToSourceKeyColumns']); - $this->assertEquals(['CMS_USER_ID'=>'ID'], $manyToManyMetadata->associationMappings['user']['relationToTargetKeyColumns']); + self::assertEquals(['CMS_ADDRESS_ID','CMS_USER_ID'], $manyToManyMetadata->associationMappings['user']['joinTableColumns']); + self::assertEquals(['CMS_ADDRESS_ID'=>'ID'], $manyToManyMetadata->associationMappings['user']['relationToSourceKeyColumns']); + self::assertEquals(['CMS_USER_ID'=>'ID'], $manyToManyMetadata->associationMappings['user']['relationToTargetKeyColumns']); - $this->assertEquals('CMS_ADDRESS_ID', $manyToManyMetadata->associationMappings['user']['joinTable']['joinColumns'][0]['name']); - $this->assertEquals('CMS_USER_ID', $manyToManyMetadata->associationMappings['user']['joinTable']['inverseJoinColumns'][0]['name']); + self::assertEquals('CMS_ADDRESS_ID', $manyToManyMetadata->associationMappings['user']['joinTable']['joinColumns'][0]['name']); + self::assertEquals('CMS_USER_ID', $manyToManyMetadata->associationMappings['user']['joinTable']['inverseJoinColumns'][0]['name']); - $this->assertEquals('ID', $manyToManyMetadata->associationMappings['user']['joinTable']['joinColumns'][0]['referencedColumnName']); - $this->assertEquals('ID', $manyToManyMetadata->associationMappings['user']['joinTable']['inverseJoinColumns'][0]['referencedColumnName']); + self::assertEquals('ID', $manyToManyMetadata->associationMappings['user']['joinTable']['joinColumns'][0]['referencedColumnName']); + self::assertEquals('ID', $manyToManyMetadata->associationMappings['user']['joinTable']['inverseJoinColumns'][0]['referencedColumnName']); $cm = new ClassMetadata('DoctrineGlobal_Article', $namingStrategy); $cm->mapManyToMany(['fieldName' => 'author', 'targetEntity' => CMS\CmsUser::class]); - $this->assertEquals('DOCTRINE_GLOBAL_ARTICLE_CMS_USER', $cm->associationMappings['author']['joinTable']['name']); + self::assertEquals('DOCTRINE_GLOBAL_ARTICLE_CMS_USER', $cm->associationMappings['author']['joinTable']['name']); } /** @@ -424,7 +428,7 @@ public function testSetMultipleIdentifierSetsComposite() $cm->mapField(['fieldName' => 'username']); $cm->setIdentifier(['name', 'username']); - $this->assertTrue($cm->isIdentifierComposite); + self::assertTrue($cm->isIdentifierComposite); } /** @@ -451,7 +455,7 @@ public function testJoinTableMappingDefaults() $cm->mapManyToMany(['fieldName' => 'author', 'targetEntity' => CMS\CmsUser::class]); - $this->assertEquals('doctrineglobal_article_cmsuser', $cm->associationMappings['author']['joinTable']['name']); + self::assertEquals('doctrineglobal_article_cmsuser', $cm->associationMappings['author']['joinTable']['name']); } /** @@ -471,8 +475,8 @@ public function testMapIdentifierAssociation() ] ); - $this->assertTrue($cm->containsForeignIdentifier, "Identifier Association should set 'containsForeignIdentifier' boolean flag."); - $this->assertEquals(["article"], $cm->identifier); + self::assertTrue($cm->containsForeignIdentifier, "Identifier Association should set 'containsForeignIdentifier' boolean flag."); + self::assertEquals(["article"], $cm->identifier); } /** @@ -560,7 +564,7 @@ public function testRetrievalOfNamedQueries() $cm->initializeReflection(new RuntimeReflectionService()); - $this->assertEquals(0, count($cm->getNamedQueries())); + self::assertEquals(0, count($cm->getNamedQueries())); $cm->addNamedQuery( [ @@ -569,7 +573,7 @@ public function testRetrievalOfNamedQueries() ] ); - $this->assertEquals(1, count($cm->getNamedQueries())); + self::assertEquals(1, count($cm->getNamedQueries())); } /** @@ -581,7 +585,7 @@ public function testRetrievalOfResultSetMappings() $cm->initializeReflection(new RuntimeReflectionService()); - $this->assertEquals(0, count($cm->getSqlResultSetMappings())); + self::assertEquals(0, count($cm->getSqlResultSetMappings())); $cm->addSqlResultSetMapping( [ @@ -594,7 +598,7 @@ public function testRetrievalOfResultSetMappings() ] ); - $this->assertEquals(1, count($cm->getSqlResultSetMappings())); + self::assertEquals(1, count($cm->getSqlResultSetMappings())); } public function testExistanceOfNamedQuery() @@ -610,8 +614,8 @@ public function testExistanceOfNamedQuery() ] ); - $this->assertTrue($cm->hasNamedQuery('all')); - $this->assertFalse($cm->hasNamedQuery('userById')); + self::assertTrue($cm->hasNamedQuery('all')); + self::assertFalse($cm->hasNamedQuery('userById')); } /** @@ -641,14 +645,14 @@ public function testRetrieveOfNamedNativeQuery() ); $mapping = $cm->getNamedNativeQuery('find-all'); - $this->assertEquals('SELECT * FROM cms_users', $mapping['query']); - $this->assertEquals('result-mapping-name', $mapping['resultSetMapping']); - $this->assertEquals(CMS\CmsUser::class, $mapping['resultClass']); + self::assertEquals('SELECT * FROM cms_users', $mapping['query']); + self::assertEquals('result-mapping-name', $mapping['resultSetMapping']); + self::assertEquals(CMS\CmsUser::class, $mapping['resultClass']); $mapping = $cm->getNamedNativeQuery('find-by-id'); - $this->assertEquals('SELECT * FROM cms_users WHERE id = ?', $mapping['query']); - $this->assertEquals('result-mapping-name', $mapping['resultSetMapping']); - $this->assertEquals(CMS\CmsUser::class, $mapping['resultClass']); + self::assertEquals('SELECT * FROM cms_users WHERE id = ?', $mapping['query']); + self::assertEquals('result-mapping-name', $mapping['resultSetMapping']); + self::assertEquals(CMS\CmsUser::class, $mapping['resultClass']); } /** @@ -700,15 +704,15 @@ public function testRetrieveOfSqlResultSetMapping() $mapping = $cm->getSqlResultSetMapping('find-all'); - $this->assertEquals(CMS\CmsUser::class, $mapping['entities'][0]['entityClass']); - $this->assertEquals(['name'=>'id','column'=>'id'], $mapping['entities'][0]['fields'][0]); - $this->assertEquals(['name'=>'name','column'=>'name'], $mapping['entities'][0]['fields'][1]); + self::assertEquals(CMS\CmsUser::class, $mapping['entities'][0]['entityClass']); + self::assertEquals(['name'=>'id','column'=>'id'], $mapping['entities'][0]['fields'][0]); + self::assertEquals(['name'=>'name','column'=>'name'], $mapping['entities'][0]['fields'][1]); - $this->assertEquals(CMS\CmsEmail::class, $mapping['entities'][1]['entityClass']); - $this->assertEquals(['name'=>'id','column'=>'id'], $mapping['entities'][1]['fields'][0]); - $this->assertEquals(['name'=>'email','column'=>'email'], $mapping['entities'][1]['fields'][1]); + self::assertEquals(CMS\CmsEmail::class, $mapping['entities'][1]['entityClass']); + self::assertEquals(['name'=>'id','column'=>'id'], $mapping['entities'][1]['fields'][0]); + self::assertEquals(['name'=>'email','column'=>'email'], $mapping['entities'][1]['fields'][1]); - $this->assertEquals('scalarColumn', $mapping['columns'][0]['name']); + self::assertEquals('scalarColumn', $mapping['columns'][0]['name']); } /** @@ -730,8 +734,8 @@ public function testExistanceOfSqlResultSetMapping() ] ); - $this->assertTrue($cm->hasSqlResultSetMapping('find-all')); - $this->assertFalse($cm->hasSqlResultSetMapping('find-by-id')); + self::assertTrue($cm->hasSqlResultSetMapping('find-all')); + self::assertFalse($cm->hasSqlResultSetMapping('find-by-id')); } /** @@ -752,8 +756,8 @@ public function testExistanceOfNamedNativeQuery() ] ); - $this->assertTrue($cm->hasNamedNativeQuery('find-all')); - $this->assertFalse($cm->hasNamedNativeQuery('find-by-id')); + self::assertTrue($cm->hasNamedNativeQuery('find-all')); + self::assertFalse($cm->hasNamedNativeQuery('find-by-id')); } public function testRetrieveOfNamedQuery() @@ -769,7 +773,7 @@ public function testRetrieveOfNamedQuery() ] ); - $this->assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1', $cm->getNamedQuery('userById')); + self::assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1', $cm->getNamedQuery('userById')); } /** @@ -780,7 +784,7 @@ public function testRetrievalOfNamedNativeQueries() $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $this->assertEquals(0, count($cm->getNamedNativeQueries())); + self::assertEquals(0, count($cm->getNamedNativeQueries())); $cm->addNamedNativeQuery( [ @@ -791,7 +795,7 @@ public function testRetrievalOfNamedNativeQueries() ] ); - $this->assertEquals(1, count($cm->getNamedNativeQueries())); + self::assertEquals(1, count($cm->getNamedNativeQueries())); } /** @@ -808,7 +812,7 @@ public function testSerializeEntityListeners() $serialize = serialize($metadata); $unserialize = unserialize($serialize); - $this->assertEquals($metadata->entityListeners, $unserialize->entityListeners); + self::assertEquals($metadata->entityListeners, $unserialize->entityListeners); } /** @@ -908,7 +912,7 @@ public function testClassCaseSensitivity() $cm = new ClassMetadata(strtoupper(CMS\CmsUser::class)); $cm->initializeReflection(new RuntimeReflectionService()); - $this->assertEquals(CMS\CmsUser::class, $cm->name); + self::assertEquals(CMS\CmsUser::class, $cm->name); } /** @@ -1040,9 +1044,9 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategy() ] ); - $this->assertEquals('routing_routingleg', $routingMetadata->table['name']); - $this->assertEquals('cms_cmsaddress_cms_cmsuser', $addressMetadata->associationMappings['user']['joinTable']['name']); - $this->assertEquals('doctrineglobal_article_cms_cmsuser', $articleMetadata->associationMappings['author']['joinTable']['name']); + self::assertEquals('routing_routingleg', $routingMetadata->table['name']); + self::assertEquals('cms_cmsaddress_cms_cmsuser', $addressMetadata->associationMappings['user']['joinTable']['name']); + self::assertEquals('doctrineglobal_article_cms_cmsuser', $articleMetadata->associationMappings['author']['joinTable']['name']); } /** @@ -1059,10 +1063,12 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategyProperty $metadata->mapField(['fieldName'=>'country']); $metadata->mapField(['fieldName'=>'city']); - $this->assertEquals($metadata->fieldNames, [ - 'cmsaddress_country' => 'country', - 'cmsaddress_city' => 'city' - ] + self::assertEquals( + $metadata->fieldNames, + [ + 'cmsaddress_country' => 'country', + 'cmsaddress_city' => 'city' + ] ); } @@ -1161,7 +1167,7 @@ public function testManyToManySelfReferencingNamingStrategyDefaults() ] ); - $this->assertEquals( + self::assertEquals( [ 'name' => 'customtypeparent_customtypeparent', 'joinColumns' => [['name' => 'customtypeparent_source', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE']], @@ -1169,9 +1175,9 @@ public function testManyToManySelfReferencingNamingStrategyDefaults() ], $cm->associationMappings['friendsWithMe']['joinTable'] ); - $this->assertEquals(['customtypeparent_source', 'customtypeparent_target'], $cm->associationMappings['friendsWithMe']['joinTableColumns']); - $this->assertEquals(['customtypeparent_source' => 'id'], $cm->associationMappings['friendsWithMe']['relationToSourceKeyColumns']); - $this->assertEquals(['customtypeparent_target' => 'id'], $cm->associationMappings['friendsWithMe']['relationToTargetKeyColumns']); + self::assertEquals(['customtypeparent_source', 'customtypeparent_target'], $cm->associationMappings['friendsWithMe']['joinTableColumns']); + self::assertEquals(['customtypeparent_source' => 'id'], $cm->associationMappings['friendsWithMe']['relationToSourceKeyColumns']); + self::assertEquals(['customtypeparent_target' => 'id'], $cm->associationMappings['friendsWithMe']['relationToTargetKeyColumns']); } /** @@ -1196,7 +1202,7 @@ public function testQuotedSequenceName() $cm->setSequenceGeneratorDefinition(['sequenceName' => '`foo`']); - $this->assertEquals(['sequenceName' => 'foo', 'quoted' => true], $cm->sequenceGeneratorDefinition); + self::assertEquals(['sequenceName' => 'foo', 'quoted' => true], $cm->sequenceGeneratorDefinition); } /** @@ -1206,7 +1212,7 @@ public function testIsIdentifierMappedSuperClass() { $class = new ClassMetadata(DDC2700MappedSuperClass::class); - $this->assertFalse($class->isIdentifier('foo')); + self::assertFalse($class->isIdentifier('foo')); } /** @@ -1216,7 +1222,7 @@ public function testCanInstantiateInternalPhpClassSubclass() { $classMetadata = new ClassMetadata(MyArrayObjectEntity::class); - $this->assertInstanceOf(MyArrayObjectEntity::class, $classMetadata->newInstance()); + self::assertInstanceOf(MyArrayObjectEntity::class, $classMetadata->newInstance()); } /** @@ -1229,7 +1235,7 @@ public function testCanInstantiateInternalPhpClassSubclassFromUnserializedMetada $classMetadata->wakeupReflection(new RuntimeReflectionService()); - $this->assertInstanceOf(MyArrayObjectEntity::class, $classMetadata->newInstance()); + self::assertInstanceOf(MyArrayObjectEntity::class, $classMetadata->newInstance()); } public function testWakeupReflectionWithEmbeddableAndStaticReflectionService() @@ -1255,7 +1261,7 @@ public function testWakeupReflectionWithEmbeddableAndStaticReflectionService() $classMetadata->mapField($field); $classMetadata->wakeupReflection(new StaticReflectionService()); - $this->assertEquals(['test' => null, 'test.embeddedProperty' => null], $classMetadata->getReflectionProperties()); + self::assertEquals(['test' => null, 'test.embeddedProperty' => null], $classMetadata->getReflectionProperties()); } public function testGetColumnNamesWithGivenFieldNames() diff --git a/tests/Doctrine/Tests/ORM/Mapping/DefaultQuoteStrategyTest.php b/tests/Doctrine/Tests/ORM/Mapping/DefaultQuoteStrategyTest.php index 765518c41bb..76991cd9640 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/DefaultQuoteStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/DefaultQuoteStrategyTest.php @@ -26,7 +26,7 @@ public function testGetJoinTableName() /* @var $platform AbstractPlatform */ $platform = $this->getMockForAbstractClass(AbstractPlatform::class); - $this->assertSame( + self::assertSame( 'readers.author_reader', $strategy->getJoinTableName($metadata->associationMappings['readers'], $metadata, $platform) ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/EntityListenerResolverTest.php b/tests/Doctrine/Tests/ORM/Mapping/EntityListenerResolverTest.php index bef03b9ba16..56053476872 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/EntityListenerResolverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/EntityListenerResolverTest.php @@ -27,8 +27,8 @@ public function testResolve() $className = '\Doctrine\Tests\Models\Company\CompanyContractListener'; $object = $this->resolver->resolve($className); - $this->assertInstanceOf($className, $object); - $this->assertSame($object, $this->resolver->resolve($className)); + self::assertInstanceOf($className, $object); + self::assertSame($object, $this->resolver->resolve($className)); } public function testRegisterAndResolve() @@ -38,7 +38,7 @@ public function testRegisterAndResolve() $this->resolver->register($object); - $this->assertSame($object, $this->resolver->resolve($className)); + self::assertSame($object, $this->resolver->resolve($className)); } public function testClearOne() @@ -49,19 +49,19 @@ public function testClearOne() $obj1 = $this->resolver->resolve($className1); $obj2 = $this->resolver->resolve($className2); - $this->assertInstanceOf($className1, $obj1); - $this->assertInstanceOf($className2, $obj2); + self::assertInstanceOf($className1, $obj1); + self::assertInstanceOf($className2, $obj2); - $this->assertSame($obj1, $this->resolver->resolve($className1)); - $this->assertSame($obj2, $this->resolver->resolve($className2)); + self::assertSame($obj1, $this->resolver->resolve($className1)); + self::assertSame($obj2, $this->resolver->resolve($className2)); $this->resolver->clear($className1); - $this->assertInstanceOf($className1, $this->resolver->resolve($className1)); - $this->assertInstanceOf($className2, $this->resolver->resolve($className2)); + self::assertInstanceOf($className1, $this->resolver->resolve($className1)); + self::assertInstanceOf($className2, $this->resolver->resolve($className2)); - $this->assertNotSame($obj1, $this->resolver->resolve($className1)); - $this->assertSame($obj2, $this->resolver->resolve($className2)); + self::assertNotSame($obj1, $this->resolver->resolve($className1)); + self::assertSame($obj2, $this->resolver->resolve($className2)); } public function testClearAll() @@ -72,19 +72,19 @@ public function testClearAll() $obj1 = $this->resolver->resolve($className1); $obj2 = $this->resolver->resolve($className2); - $this->assertInstanceOf($className1, $obj1); - $this->assertInstanceOf($className2, $obj2); + self::assertInstanceOf($className1, $obj1); + self::assertInstanceOf($className2, $obj2); - $this->assertSame($obj1, $this->resolver->resolve($className1)); - $this->assertSame($obj2, $this->resolver->resolve($className2)); + self::assertSame($obj1, $this->resolver->resolve($className1)); + self::assertSame($obj2, $this->resolver->resolve($className2)); $this->resolver->clear(); - $this->assertInstanceOf($className1, $this->resolver->resolve($className1)); - $this->assertInstanceOf($className2, $this->resolver->resolve($className2)); + self::assertInstanceOf($className1, $this->resolver->resolve($className1)); + self::assertInstanceOf($className2, $this->resolver->resolve($className2)); - $this->assertNotSame($obj1, $this->resolver->resolve($className1)); - $this->assertNotSame($obj2, $this->resolver->resolve($className2)); + self::assertNotSame($obj1, $this->resolver->resolve($className1)); + self::assertNotSame($obj2, $this->resolver->resolve($className2)); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/FieldBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/FieldBuilderTest.php index b592e94c710..4d73c8f910f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/FieldBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/FieldBuilderTest.php @@ -20,7 +20,7 @@ public function testCustomIdGeneratorCanBeSet() $fieldBuilder->build(); - $this->assertEquals(ClassMetadata::GENERATOR_TYPE_CUSTOM, $cmBuilder->getClassMetadata()->generatorType); - $this->assertEquals(['class' => 'stdClass'], $cmBuilder->getClassMetadata()->customGeneratorDefinition); + self::assertEquals(ClassMetadata::GENERATOR_TYPE_CUSTOM, $cmBuilder->getClassMetadata()->generatorType); + self::assertEquals(['class' => 'stdClass'], $cmBuilder->getClassMetadata()->customGeneratorDefinition); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php b/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php index 220a26363ca..45f6700891b 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php @@ -84,7 +84,7 @@ static public function dataClassToTableName() */ public function testClassToTableName(NamingStrategy $strategy, $expected, $className) { - $this->assertEquals($expected, $strategy->classToTableName($className)); + self::assertEquals($expected, $strategy->classToTableName($className)); } /** @@ -138,7 +138,7 @@ static public function dataPropertyToColumnName() */ public function testPropertyToColumnName(NamingStrategy $strategy, $expected, $propertyName) { - $this->assertEquals($expected, $strategy->propertyToColumnName($propertyName)); + self::assertEquals($expected, $strategy->propertyToColumnName($propertyName)); } /** @@ -166,7 +166,7 @@ static public function dataReferenceColumnName() */ public function testReferenceColumnName(NamingStrategy $strategy, $expected) { - $this->assertEquals($expected, $strategy->referenceColumnName()); + self::assertEquals($expected, $strategy->referenceColumnName()); } /** @@ -199,7 +199,7 @@ static public function dataJoinColumnName() */ public function testJoinColumnName(NamingStrategy $strategy, $expected, $propertyName, $className = null) { - $this->assertEquals($expected, $strategy->joinColumnName($propertyName, $className)); + self::assertEquals($expected, $strategy->joinColumnName($propertyName, $className)); } /** @@ -264,7 +264,7 @@ static public function dataJoinTableName() */ public function testJoinTableName(NamingStrategy $strategy, $expected, $ownerEntity, $associatedEntity, $propertyName = null) { - $this->assertEquals($expected, $strategy->joinTableName($ownerEntity, $associatedEntity, $propertyName)); + self::assertEquals($expected, $strategy->joinTableName($ownerEntity, $associatedEntity, $propertyName)); } /** @@ -317,6 +317,6 @@ static public function dataJoinKeyColumnName() */ public function testJoinKeyColumnName(NamingStrategy $strategy, $expected, $propertyEntityName, $referencedColumnName = null, $propertyName = null) { - $this->assertEquals($expected, $strategy->joinKeyColumnName($propertyEntityName, $referencedColumnName, $propertyName)); + self::assertEquals($expected, $strategy->joinKeyColumnName($propertyEntityName, $referencedColumnName, $propertyName)); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php b/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php index 2af97169c80..57e2e8cff49 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php @@ -53,13 +53,13 @@ public function testConfiguration() $em = $this->_getTestEntityManager(); $config = $em->getConfiguration(); - $this->assertInstanceOf(QuoteStrategy::class, $config->getQuoteStrategy()); - $this->assertInstanceOf(DefaultQuoteStrategy::class, $config->getQuoteStrategy()); + self::assertInstanceOf(QuoteStrategy::class, $config->getQuoteStrategy()); + self::assertInstanceOf(DefaultQuoteStrategy::class, $config->getQuoteStrategy()); $config->setQuoteStrategy(new MyQuoteStrategy()); - $this->assertInstanceOf(QuoteStrategy::class, $config->getQuoteStrategy()); - $this->assertInstanceOf(MyQuoteStrategy::class, $config->getQuoteStrategy()); + self::assertInstanceOf(QuoteStrategy::class, $config->getQuoteStrategy()); + self::assertInstanceOf(MyQuoteStrategy::class, $config->getQuoteStrategy()); } public function testGetColumnName() @@ -68,20 +68,20 @@ public function testGetColumnName() $cm->mapField(['fieldName' => 'name', 'columnName' => '`name`']); $cm->mapField(['fieldName' => 'id', 'columnName' => 'id']); - $this->assertEquals('id' ,$this->strategy->getColumnName('id', $cm, $this->platform)); - $this->assertEquals('"name"' ,$this->strategy->getColumnName('name', $cm, $this->platform)); + self::assertEquals('id' ,$this->strategy->getColumnName('id', $cm, $this->platform)); + self::assertEquals('"name"' ,$this->strategy->getColumnName('name', $cm, $this->platform)); } public function testGetTableName() { $cm = $this->createClassMetadata(CmsUser::class); $cm->setPrimaryTable(['name'=>'`cms_user`']); - $this->assertEquals('"cms_user"', $this->strategy->getTableName($cm, $this->platform)); + self::assertEquals('"cms_user"', $this->strategy->getTableName($cm, $this->platform)); $cm = new ClassMetadata(CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); $cm->setPrimaryTable(['name'=>'cms_user']); - $this->assertEquals('cms_user', $this->strategy->getTableName($cm, $this->platform)); + self::assertEquals('cms_user', $this->strategy->getTableName($cm, $this->platform)); } public function testJoinTableName() @@ -111,9 +111,8 @@ public function testJoinTableName() ] ); - $this->assertEquals('"cmsaddress_cmsuser"', $this->strategy->getJoinTableName($cm1->associationMappings['user'], $cm1, $this->platform)); - $this->assertEquals('cmsaddress_cmsuser', $this->strategy->getJoinTableName($cm2->associationMappings['user'], $cm2, $this->platform)); - + self::assertEquals('"cmsaddress_cmsuser"', $this->strategy->getJoinTableName($cm1->associationMappings['user'], $cm1, $this->platform)); + self::assertEquals('cmsaddress_cmsuser', $this->strategy->getJoinTableName($cm2->associationMappings['user'], $cm2, $this->platform)); } public function testIdentifierColumnNames() @@ -137,18 +136,18 @@ public function testIdentifierColumnNames() ] ); - $this->assertEquals(['"id"'], $this->strategy->getIdentifierColumnNames($cm1, $this->platform)); - $this->assertEquals(['id'], $this->strategy->getIdentifierColumnNames($cm2, $this->platform)); + self::assertEquals(['"id"'], $this->strategy->getIdentifierColumnNames($cm1, $this->platform)); + self::assertEquals(['id'], $this->strategy->getIdentifierColumnNames($cm2, $this->platform)); } public function testColumnAlias() { $i = 0; - $this->assertEquals('columnName_0', $this->strategy->getColumnAlias('columnName', $i++, $this->platform)); - $this->assertEquals('column_name_1', $this->strategy->getColumnAlias('column_name', $i++, $this->platform)); - $this->assertEquals('COLUMN_NAME_2', $this->strategy->getColumnAlias('COLUMN_NAME', $i++, $this->platform)); - $this->assertEquals('COLUMNNAME_3', $this->strategy->getColumnAlias('COLUMN-NAME-', $i++, $this->platform)); + self::assertEquals('columnName_0', $this->strategy->getColumnAlias('columnName', $i++, $this->platform)); + self::assertEquals('column_name_1', $this->strategy->getColumnAlias('column_name', $i++, $this->platform)); + self::assertEquals('COLUMN_NAME_2', $this->strategy->getColumnAlias('COLUMN_NAME', $i++, $this->platform)); + self::assertEquals('COLUMNNAME_3', $this->strategy->getColumnAlias('COLUMN-NAME-', $i++, $this->platform)); } public function testQuoteIdentifierJoinColumns() @@ -168,7 +167,7 @@ public function testQuoteIdentifierJoinColumns() ] ); - $this->assertEquals(['"article"'], $this->strategy->getIdentifierColumnNames($cm, $this->platform)); + self::assertEquals(['"article"'], $this->strategy->getIdentifierColumnNames($cm, $this->platform)); } public function testJoinColumnName() @@ -189,7 +188,7 @@ public function testJoinColumnName() ); $joinColumn = $cm->associationMappings['article']['joinColumns'][0]; - $this->assertEquals('"article"',$this->strategy->getJoinColumnName($joinColumn, $cm, $this->platform)); + self::assertEquals('"article"',$this->strategy->getJoinColumnName($joinColumn, $cm, $this->platform)); } public function testReferencedJoinColumnName() @@ -210,7 +209,7 @@ public function testReferencedJoinColumnName() ); $joinColumn = $cm->associationMappings['article']['joinColumns'][0]; - $this->assertEquals('"id"',$this->strategy->getReferencedJoinColumnName($joinColumn, $cm, $this->platform)); + self::assertEquals('"id"',$this->strategy->getReferencedJoinColumnName($joinColumn, $cm, $this->platform)); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/Reflection/ReflectionPropertiesGetterTest.php b/tests/Doctrine/Tests/ORM/Mapping/Reflection/ReflectionPropertiesGetterTest.php index 29906d59b9d..764998ef56c 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Reflection/ReflectionPropertiesGetterTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Reflection/ReflectionPropertiesGetterTest.php @@ -22,10 +22,10 @@ public function testRetrievesProperties() $properties = (new ReflectionPropertiesGetter(new RuntimeReflectionService())) ->getProperties(ClassWithMixedProperties::class); - $this->assertCount(5, $properties); + self::assertCount(5, $properties); foreach ($properties as $property) { - $this->assertInstanceOf('ReflectionProperty', $property); + self::assertInstanceOf('ReflectionProperty', $property); } } @@ -35,7 +35,7 @@ public function testRetrievedInstancesAreNotStatic() ->getProperties(ClassWithMixedProperties::class); foreach ($properties as $property) { - $this->assertFalse($property->isStatic()); + self::assertFalse($property->isStatic()); } } @@ -44,23 +44,23 @@ public function testExpectedKeys() $properties = (new ReflectionPropertiesGetter(new RuntimeReflectionService())) ->getProperties(ClassWithMixedProperties::class); - $this->assertArrayHasKey( + self::assertArrayHasKey( "\0" . ClassWithMixedProperties::class . "\0" . 'privateProperty', $properties ); - $this->assertArrayHasKey( + self::assertArrayHasKey( "\0" . ClassWithMixedProperties::class . "\0" . 'privatePropertyOverride', $properties ); - $this->assertArrayHasKey( + self::assertArrayHasKey( "\0" . ParentClass::class . "\0" . 'privatePropertyOverride', $properties ); - $this->assertArrayHasKey( + self::assertArrayHasKey( "\0*\0protectedProperty", $properties ); - $this->assertArrayHasKey( + self::assertArrayHasKey( "publicProperty", $properties ); @@ -73,7 +73,7 @@ public function testPropertiesAreAccessible() ->getProperties(ClassWithMixedProperties::class); foreach ($properties as $property) { - $this->assertSame($property->getName(), $property->getValue($object)); + self::assertSame($property->getName(), $property->getValue($object)); } } @@ -81,7 +81,7 @@ public function testPropertyGetterIsIdempotent() { $getter = (new ReflectionPropertiesGetter(new RuntimeReflectionService())); - $this->assertSame( + self::assertSame( $getter->getProperties(ClassWithMixedProperties::class), $getter->getProperties(ClassWithMixedProperties::class) ); @@ -107,7 +107,7 @@ public function testPropertyGetterWillSkipPropertiesNotRetrievedByTheRuntimeRefl $getter = (new ReflectionPropertiesGetter($reflectionService)); - $this->assertEmpty($getter->getProperties(ClassWithMixedProperties::class)); + self::assertEmpty($getter->getProperties(ClassWithMixedProperties::class)); } public function testPropertyGetterWillSkipClassesNotRetrievedByTheRuntimeReflectionService() @@ -124,6 +124,6 @@ public function testPropertyGetterWillSkipClassesNotRetrievedByTheRuntimeReflect $getter = (new ReflectionPropertiesGetter($reflectionService)); - $this->assertEmpty($getter->getProperties(ClassWithMixedProperties::class)); + self::assertEmpty($getter->getProperties(ClassWithMixedProperties::class)); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ReflectionEmbeddedPropertyTest.php b/tests/Doctrine/Tests/ORM/Mapping/ReflectionEmbeddedPropertyTest.php index 82761282ad4..5fde9cf2962 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ReflectionEmbeddedPropertyTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ReflectionEmbeddedPropertyTest.php @@ -39,11 +39,11 @@ public function testCanSetAndGetEmbeddedProperty( $embeddedPropertyReflection->setValue($object, 'newValue'); - $this->assertSame('newValue', $embeddedPropertyReflection->getValue($object)); + self::assertSame('newValue', $embeddedPropertyReflection->getValue($object)); $embeddedPropertyReflection->setValue($object, 'changedValue'); - $this->assertSame('changedValue', $embeddedPropertyReflection->getValue($object)); + self::assertSame('changedValue', $embeddedPropertyReflection->getValue($object)); } /** @@ -62,7 +62,7 @@ public function testWillSkipReadingPropertiesFromNullEmbeddable( $instantiator = new Instantiator(); - $this->assertNull($embeddedPropertyReflection->getValue( + self::assertNull($embeddedPropertyReflection->getValue( $instantiator->instantiate($parentProperty->getDeclaringClass()->getName()) )); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/Symfony/AbstractDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/Symfony/AbstractDriverTest.php index 85b3b2138dd..03b650a8d21 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Symfony/AbstractDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Symfony/AbstractDriverTest.php @@ -19,7 +19,7 @@ public function testFindMappingFile() ); touch($filename = $this->dir.'/Foo'.$this->getFileExtension()); - $this->assertEquals($filename, $driver->getLocator()->findMappingFile('MyNamespace\MySubnamespace\Entity\Foo')); + self::assertEquals($filename, $driver->getLocator()->findMappingFile('MyNamespace\MySubnamespace\Entity\Foo')); } public function testFindMappingFileInSubnamespace() @@ -31,7 +31,7 @@ public function testFindMappingFileInSubnamespace() ); touch($filename = $this->dir.'/Foo.Bar'.$this->getFileExtension()); - $this->assertEquals($filename, $driver->getLocator()->findMappingFile('MyNamespace\MySubnamespace\Entity\Foo\Bar')); + self::assertEquals($filename, $driver->getLocator()->findMappingFile('MyNamespace\MySubnamespace\Entity\Foo\Bar')); } public function testFindMappingFileNamespacedFoundFileNotFound() diff --git a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php index cc543b8919f..081118d2a2f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php @@ -35,8 +35,8 @@ public function testClassTableInheritanceDiscriminatorMap() 'baz' => CTIBaz::class, ]; - $this->assertEquals(3, count($class->discriminatorMap)); - $this->assertEquals($expectedMap, $class->discriminatorMap); + self::assertEquals(3, count($class->discriminatorMap)); + self::assertEquals($expectedMap, $class->discriminatorMap); } /** @@ -62,18 +62,18 @@ public function testIdentifierWithAssociationKey() $class = $factory->getMetadataFor(DDC117Translation::class); - $this->assertEquals(['language', 'article'], $class->identifier); - $this->assertArrayHasKey('article', $class->associationMappings); + self::assertEquals(['language', 'article'], $class->identifier); + self::assertArrayHasKey('article', $class->associationMappings); - $this->assertArrayHasKey('id', $class->associationMappings['article']); - $this->assertTrue($class->associationMappings['article']['id']); + self::assertArrayHasKey('id', $class->associationMappings['article']); + self::assertTrue($class->associationMappings['article']['id']); } public function testEmbeddableMapping() { $class = $this->createClassMetadata(Name::class); - $this->assertEquals(true, $class->isEmbeddedClass); + self::assertEquals(true, $class->isEmbeddedClass); } /** @@ -89,7 +89,7 @@ public function testEmbeddedMappingsWithUseColumnPrefix() $em->getConfiguration()->setMetadataDriverImpl($this->_loadDriver()); $factory->setEntityManager($em); - $this->assertEquals( + self::assertEquals( '__prefix__', $factory->getMetadataFor(DDC3293UserPrefixed::class) ->embeddedClasses['address']['columnPrefix'] @@ -109,7 +109,7 @@ public function testEmbeddedMappingsWithFalseUseColumnPrefix() $em->getConfiguration()->setMetadataDriverImpl($this->_loadDriver()); $factory->setEntityManager($em); - $this->assertFalse( + self::assertFalse( $factory->getMetadataFor(DDC3293User::class) ->embeddedClasses['address']['columnPrefix'] ); @@ -119,7 +119,7 @@ public function testEmbeddedMapping() { $class = $this->createClassMetadata(Person::class); - $this->assertEquals( + self::assertEquals( [ 'name' => [ 'class' => Name::class, @@ -155,7 +155,7 @@ public function testValidateXmlSchema($xmlMappingFile) $dom->load($xmlMappingFile); - $this->assertTrue($dom->schemaValidate($xsdSchemaFile)); + self::assertTrue($dom->schemaValidate($xsdSchemaFile)); } static public function dataValidSchema() diff --git a/tests/Doctrine/Tests/ORM/Mapping/YamlMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/YamlMappingDriverTest.php index b6feb405290..27da19c87fa 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/YamlMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/YamlMappingDriverTest.php @@ -38,11 +38,11 @@ public function testJoinTablesWithMappedSuperclassForYamlDriver() $classPage = new ClassMetadata(File::class); $classPage = $factory->getMetadataFor(File::class); - $this->assertEquals(File::class, $classPage->associationMappings['parentDirectory']['sourceEntity']); + self::assertEquals(File::class, $classPage->associationMappings['parentDirectory']['sourceEntity']); $classDirectory = new ClassMetadata(Directory::class); $classDirectory = $factory->getMetadataFor(Directory::class); - $this->assertEquals(Directory::class, $classDirectory->associationMappings['parentDirectory']['sourceEntity']); + self::assertEquals(Directory::class, $classDirectory->associationMappings['parentDirectory']['sourceEntity']); } /** @@ -68,14 +68,14 @@ public function testSpacesShouldBeIgnoredWhenUseExplode() $nameField = $metadata->fieldMappings['name']; $valueField = $metadata->fieldMappings['value']; - $this->assertEquals('name', $unique[0]); - $this->assertEquals('value', $unique[1]); + self::assertEquals('name', $unique[0]); + self::assertEquals('value', $unique[1]); - $this->assertEquals('value', $indexes[0]); - $this->assertEquals('name', $indexes[1]); + self::assertEquals('value', $indexes[0]); + self::assertEquals('name', $indexes[1]); - $this->assertEquals(255, $nameField['length']); - $this->assertEquals(255, $valueField['length']); + self::assertEquals(255, $nameField['length']); + self::assertEquals(255, $valueField['length']); } } diff --git a/tests/Doctrine/Tests/ORM/Performance/SecondLevelCacheTest.php b/tests/Doctrine/Tests/ORM/Performance/SecondLevelCacheTest.php index f954d4f4791..7ed0636400c 100644 --- a/tests/Doctrine/Tests/ORM/Performance/SecondLevelCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Performance/SecondLevelCacheTest.php @@ -50,7 +50,7 @@ public function testFindEntityWithoutCache() $this->findEntity($em, __FUNCTION__); - $this->assertEquals(6002, $this->countQuery($em)); + self::assertEquals(6002, $this->countQuery($em)); } public function testFindEntityWithCache() @@ -61,7 +61,7 @@ public function testFindEntityWithCache() $this->findEntity($em, __FUNCTION__); - $this->assertEquals(502, $this->countQuery($em)); + self::assertEquals(502, $this->countQuery($em)); } public function testFindAllEntityWithoutCache() @@ -70,7 +70,7 @@ public function testFindAllEntityWithoutCache() $this->findAllEntity($em, __FUNCTION__); - $this->assertEquals(153, $this->countQuery($em)); + self::assertEquals(153, $this->countQuery($em)); } public function testFindAllEntityWithCache() @@ -81,7 +81,7 @@ public function testFindAllEntityWithCache() $this->findAllEntity($em, __FUNCTION__); - $this->assertEquals(53, $this->countQuery($em)); + self::assertEquals(53, $this->countQuery($em)); } public function testFindEntityOneToManyWithoutCache() @@ -90,7 +90,7 @@ public function testFindEntityOneToManyWithoutCache() $this->findEntityOneToMany($em, __FUNCTION__); - $this->assertEquals(502, $this->countQuery($em)); + self::assertEquals(502, $this->countQuery($em)); } public function testFindEntityOneToManyWithCache() @@ -101,7 +101,7 @@ public function testFindEntityOneToManyWithCache() $this->findEntityOneToMany($em, __FUNCTION__); - $this->assertEquals(472, $this->countQuery($em)); + self::assertEquals(472, $this->countQuery($em)); } public function testQueryEntityWithoutCache() @@ -110,7 +110,7 @@ public function testQueryEntityWithoutCache() $this->queryEntity($em, __FUNCTION__); - $this->assertEquals(602, $this->countQuery($em)); + self::assertEquals(602, $this->countQuery($em)); } public function testQueryEntityWithCache() @@ -121,7 +121,7 @@ public function testQueryEntityWithCache() $this->queryEntity($em, __FUNCTION__); - $this->assertEquals(503, $this->countQuery($em)); + self::assertEquals(503, $this->countQuery($em)); } private function queryEntity(EntityManagerInterface $em, $label) @@ -273,7 +273,7 @@ private function findAllEntity(EntityManagerInterface $em, $label) $list = $rep->findAll(); $em->clear(); - $this->assertCount($size, $list); + self::assertCount($size, $list); } printf("\n[%s] find %s countries (%s times)", number_format(microtime(true) - $startFind, 6), $size, $times); diff --git a/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php b/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php index 0e1c20f517e..5918e1a6df0 100644 --- a/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php @@ -51,7 +51,7 @@ public function testCanBePutInLazyLoadingMode() $class = $this->_emMock->getClassMetadata(ECommerceProduct::class); $collection = new PersistentCollection($this->_emMock, $class, new ArrayCollection); $collection->setInitialized(false); - $this->assertFalse($collection->isInitialized()); + self::assertFalse($collection->isInitialized()); } /** @@ -61,7 +61,7 @@ public function testCurrentInitializesCollection() { $this->setUpPersistentCollection(); $this->collection->current(); - $this->assertTrue($this->collection->isInitialized()); + self::assertTrue($this->collection->isInitialized()); } /** @@ -71,7 +71,7 @@ public function testKeyInitializesCollection() { $this->setUpPersistentCollection(); $this->collection->key(); - $this->assertTrue($this->collection->isInitialized()); + self::assertTrue($this->collection->isInitialized()); } /** @@ -81,7 +81,7 @@ public function testNextInitializesCollection() { $this->setUpPersistentCollection(); $this->collection->next(); - $this->assertTrue($this->collection->isInitialized()); + self::assertTrue($this->collection->isInitialized()); } /** @@ -91,11 +91,11 @@ public function testNonObjects() { $this->setUpPersistentCollection(); - $this->assertEmpty($this->collection); + self::assertEmpty($this->collection); $this->collection->add("dummy"); - $this->assertNotEmpty($this->collection); + self::assertNotEmpty($this->collection); $product = new ECommerceProduct(); @@ -103,9 +103,9 @@ public function testNonObjects() $this->collection->set(2, "dummy"); $this->collection->set(3, null); - $this->assertSame($product, $this->collection->get(1)); - $this->assertSame("dummy", $this->collection->get(2)); - $this->assertSame(null, $this->collection->get(3)); + self::assertSame($product, $this->collection->get(1)); + self::assertSame("dummy", $this->collection->get(2)); + self::assertSame(null, $this->collection->get(3)); } /** diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php index d070fee0c27..9ec72666d1f 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php @@ -46,8 +46,8 @@ public function testExpandParametersWillExpandCompositeEntityKeys() list ($values, $types) = $this->_persister->expandParameters(['admin1' => $admin1]); - $this->assertEquals([Type::getType('integer'), Type::getType('string')], $types); - $this->assertEquals([10, 'IT'], $values); + self::assertEquals([Type::getType('integer'), Type::getType('string')], $types); + self::assertEquals([10, 'IT'], $values); } public function testExpandCriteriaParametersWillExpandCompositeEntityKeys() @@ -60,7 +60,7 @@ public function testExpandCriteriaParametersWillExpandCompositeEntityKeys() list ($values, $types) = $this->_persister->expandCriteriaParameters($criteria); - $this->assertEquals([Type::getType('integer'), Type::getType('string')], $types); - $this->assertEquals([10, 'IT'], $values); + self::assertEquals([Type::getType('integer'), Type::getType('string')], $types); + self::assertEquals([10, 'IT'], $values); } } diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php index 9392b8ee507..39421a5585a 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php @@ -33,19 +33,19 @@ protected function setUp() public function testSelectConditionStatementEq() { $statement = $this->_persister->getSelectConditionStatementSQL('admin1', 1, [], Comparison::EQ); - $this->assertEquals('t0.admin1 = ? AND t0.country = ?', $statement); + self::assertEquals('t0.admin1 = ? AND t0.country = ?', $statement); } public function testSelectConditionStatementEqNull() { $statement = $this->_persister->getSelectConditionStatementSQL('admin1', null, [], Comparison::IS); - $this->assertEquals('t0.admin1 IS NULL AND t0.country IS NULL', $statement); + self::assertEquals('t0.admin1 IS NULL AND t0.country IS NULL', $statement); } public function testSelectConditionStatementNeqNull() { $statement = $this->_persister->getSelectConditionStatementSQL('admin1', null, [], Comparison::NEQ); - $this->assertEquals('t0.admin1 IS NOT NULL AND t0.country IS NOT NULL', $statement); + self::assertEquals('t0.admin1 IS NOT NULL AND t0.country IS NOT NULL', $statement); } /** diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php index 57156b9ec8d..92e3bb05539 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php @@ -55,7 +55,7 @@ public function testGetInsertSQLUsesTypeValuesSQL() $sql = $method->invoke($this->_persister); - $this->assertEquals('INSERT INTO customtype_parents (customInteger, child_id) VALUES (ABS(?), ?)', $sql); + self::assertEquals('INSERT INTO customtype_parents (customInteger, child_id) VALUES (ABS(?), ?)', $sql); } public function testUpdateUsesTypeValuesSQL() @@ -76,7 +76,7 @@ public function testUpdateUsesTypeValuesSQL() $executeUpdates = $this->_em->getConnection()->getExecuteUpdates(); - $this->assertEquals('UPDATE customtype_parents SET customInteger = ABS(?), child_id = ? WHERE id = ?', $executeUpdates[0]['query']); + self::assertEquals('UPDATE customtype_parents SET customInteger = ABS(?), child_id = ? WHERE id = ?', $executeUpdates[0]['query']); } public function testGetSelectConditionSQLUsesTypeValuesSQL() @@ -86,7 +86,7 @@ public function testGetSelectConditionSQLUsesTypeValuesSQL() $sql = $method->invoke($this->_persister, ['customInteger' => 1, 'child' => 1]); - $this->assertEquals('t0.customInteger = ABS(?) AND t0.child_id = ?', $sql); + self::assertEquals('t0.customInteger = ABS(?) AND t0.child_id = ?', $sql); } /** @@ -98,7 +98,7 @@ public function testStripNonAlphanumericCharactersFromSelectColumnListSQL() $method = new \ReflectionMethod($persister, 'getSelectColumnsSQL'); $method->setAccessible(true); - $this->assertEquals('t1."simple-entity-id" AS simpleentityid_0, t1."simple-entity-value" AS simpleentityvalue_2', $method->invoke($persister)); + self::assertEquals('t1."simple-entity-id" AS simpleentityid_0, t1."simple-entity-value" AS simpleentityvalue_2', $method->invoke($persister)); } /** @@ -107,19 +107,19 @@ public function testStripNonAlphanumericCharactersFromSelectColumnListSQL() public function testSelectConditionStatementIsNull() { $statement = $this->_persister->getSelectConditionStatementSQL('test', null, [], Comparison::IS); - $this->assertEquals('test IS NULL', $statement); + self::assertEquals('test IS NULL', $statement); } public function testSelectConditionStatementEqNull() { $statement = $this->_persister->getSelectConditionStatementSQL('test', null, [], Comparison::EQ); - $this->assertEquals('test IS NULL', $statement); + self::assertEquals('test IS NULL', $statement); } public function testSelectConditionStatementNeqNull() { $statement = $this->_persister->getSelectConditionStatementSQL('test', null, [], Comparison::NEQ); - $this->assertEquals('test IS NOT NULL', $statement); + self::assertEquals('test IS NOT NULL', $statement); } /** @@ -127,17 +127,17 @@ public function testSelectConditionStatementNeqNull() */ public function testSelectConditionStatementWithMultipleValuesContainingNull() { - $this->assertEquals( + self::assertEquals( '(t0.id IN (?) OR t0.id IS NULL)', $this->_persister->getSelectConditionStatementSQL('id', [null]) ); - $this->assertEquals( + self::assertEquals( '(t0.id IN (?) OR t0.id IS NULL)', $this->_persister->getSelectConditionStatementSQL('id', [null, 123]) ); - $this->assertEquals( + self::assertEquals( '(t0.id IN (?) OR t0.id IS NULL)', $this->_persister->getSelectConditionStatementSQL('id', [123, null]) ); @@ -149,16 +149,16 @@ public function testCountCondition() // Using a criteria as array $statement = $persister->getCountSQL(['value' => 'bar']); - $this->assertEquals('SELECT COUNT(*) FROM "not-a-simple-entity" t0 WHERE t0."simple-entity-value" = ?', $statement); + self::assertEquals('SELECT COUNT(*) FROM "not-a-simple-entity" t0 WHERE t0."simple-entity-value" = ?', $statement); // Using a criteria object $criteria = new Criteria(Criteria::expr()->eq('value', 'bar')); $statement = $persister->getCountSQL($criteria); - $this->assertEquals('SELECT COUNT(*) FROM "not-a-simple-entity" t0 WHERE t0."simple-entity-value" = ?', $statement); + self::assertEquals('SELECT COUNT(*) FROM "not-a-simple-entity" t0 WHERE t0."simple-entity-value" = ?', $statement); } public function testCountEntities() { - $this->assertEquals(0, $this->_persister->count()); + self::assertEquals(0, $this->_persister->count()); } } diff --git a/tests/Doctrine/Tests/ORM/Persisters/JoinedSubclassPersisterTest.php b/tests/Doctrine/Tests/ORM/Persisters/JoinedSubclassPersisterTest.php index 4a4cec244a4..cdf281a7af3 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/JoinedSubclassPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/JoinedSubclassPersisterTest.php @@ -39,6 +39,6 @@ protected function setUp() */ public function testExecuteInsertsWillReturnEmptySetWithNoQueuedInserts() { - $this->assertSame([], $this->persister->executeInserts()); + self::assertSame([], $this->persister->executeInserts()); } } diff --git a/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php b/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php index 739a41f1807..4828095b7e8 100644 --- a/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php @@ -82,11 +82,11 @@ public function testSkipAbstractClassesOnGeneration() { $cm = new ClassMetadata(AbstractClass::class); $cm->initializeReflection(new RuntimeReflectionService()); - $this->assertNotNull($cm->reflClass); + self::assertNotNull($cm->reflClass); $num = $this->proxyFactory->generateProxyClasses([$cm]); - $this->assertEquals(0, $num, "No proxies generated."); + self::assertEquals(0, $num, "No proxies generated."); } /** @@ -111,9 +111,9 @@ public function testFailedProxyLoadingDoesNotMarkTheProxyAsInitialized() } catch (EntityNotFoundException $exception) { } - $this->assertFalse($proxy->__isInitialized()); - $this->assertInstanceOf('Closure', $proxy->__getInitializer(), 'The initializer wasn\'t removed'); - $this->assertInstanceOf('Closure', $proxy->__getCloner(), 'The cloner wasn\'t removed'); + self::assertFalse($proxy->__isInitialized()); + self::assertInstanceOf('Closure', $proxy->__getInitializer(), 'The initializer wasn\'t removed'); + self::assertInstanceOf('Closure', $proxy->__getCloner(), 'The cloner wasn\'t removed'); } /** @@ -138,9 +138,9 @@ public function testFailedProxyCloningDoesNotMarkTheProxyAsInitialized() } catch (EntityNotFoundException $exception) { } - $this->assertFalse($proxy->__isInitialized()); - $this->assertInstanceOf('Closure', $proxy->__getInitializer(), 'The initializer wasn\'t removed'); - $this->assertInstanceOf('Closure', $proxy->__getCloner(), 'The cloner wasn\'t removed'); + self::assertFalse($proxy->__isInitialized()); + self::assertInstanceOf('Closure', $proxy->__getInitializer(), 'The initializer wasn\'t removed'); + self::assertInstanceOf('Closure', $proxy->__getCloner(), 'The cloner wasn\'t removed'); } public function testProxyClonesParentFields() diff --git a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php index 9bc5bf5a0dc..1e81ea7371e 100644 --- a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php +++ b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php @@ -30,7 +30,7 @@ public function assertSqlGeneration($dqlToBeTested, $sqlToBeConfirmed) $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [CustomTreeWalkerJoin::class]) ->useQueryCache(false); - $this->assertEquals($sqlToBeConfirmed, $query->getSql()); + self::assertEquals($sqlToBeConfirmed, $query->getSql()); $query->free(); } catch (\Exception $e) { $this->fail($e->getMessage() . ' at "' . $e->getFile() . '" on line ' . $e->getLine()); @@ -40,7 +40,7 @@ public function assertSqlGeneration($dqlToBeTested, $sqlToBeConfirmed) public function testAddsJoin() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'select u from Doctrine\Tests\Models\CMS\CmsUser u', "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c1_.id AS id_4, c1_.country AS country_5, c1_.zip AS zip_6, c1_.city AS city_7, c0_.email_id AS email_id_8, c1_.user_id AS user_id_9 FROM cms_users c0_ LEFT JOIN cms_addresses c1_ ON c0_.id = c1_.user_id" ); @@ -48,7 +48,7 @@ public function testAddsJoin() public function testDoesNotAddJoin() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'select a from Doctrine\Tests\Models\CMS\CmsAddress a', "SELECT c0_.id AS id_0, c0_.country AS country_1, c0_.zip AS zip_2, c0_.city AS city_3, c0_.user_id AS user_id_4 FROM cms_addresses c0_" ); diff --git a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php index 4c2898141a7..c920cedc66d 100644 --- a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php +++ b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php @@ -41,7 +41,7 @@ public function generateSql($dqlToBeTested, $treeWalkers, $outputWalker) public function assertSqlGeneration($dqlToBeTested, $sqlToBeConfirmed, $treeWalkers = [], $outputWalker = null) { try { - $this->assertEquals($sqlToBeConfirmed, $this->generateSql($dqlToBeTested, $treeWalkers, $outputWalker)); + self::assertEquals($sqlToBeConfirmed, $this->generateSql($dqlToBeTested, $treeWalkers, $outputWalker)); } catch (\Exception $e) { $this->fail($e->getMessage() . ' at "' . $e->getFile() . '" on line ' . $e->getLine()); } @@ -49,7 +49,7 @@ public function assertSqlGeneration($dqlToBeTested, $sqlToBeConfirmed, $treeWalk public function testSupportsQueriesWithoutWhere() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'select u from Doctrine\Tests\Models\CMS\CmsUser u', "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c0_.email_id AS email_id_4 FROM cms_users c0_ WHERE c0_.id = 1", [CustomTreeWalker::class] @@ -58,7 +58,7 @@ public function testSupportsQueriesWithoutWhere() public function testSupportsQueriesWithMultipleConditionalExpressions() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'select u from Doctrine\Tests\Models\CMS\CmsUser u where u.name = :name or u.name = :otherName', "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c0_.email_id AS email_id_4 FROM cms_users c0_ WHERE (c0_.name = ? OR c0_.name = ?) AND c0_.id = 1", [CustomTreeWalker::class] @@ -67,7 +67,7 @@ public function testSupportsQueriesWithMultipleConditionalExpressions() public function testSupportsQueriesWithSimpleConditionalExpression() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'select u from Doctrine\Tests\Models\CMS\CmsUser u where u.name = :name', "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c0_.email_id AS email_id_4 FROM cms_users c0_ WHERE c0_.name = ? AND c0_.id = 1", [CustomTreeWalker::class] @@ -88,7 +88,7 @@ public function testSetUnknownQueryComponentThrowsException() public function testSupportsSeveralHintsQueries() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'select u from Doctrine\Tests\Models\CMS\CmsUser u', "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c1_.id AS id_4, c1_.country AS country_5, c1_.zip AS zip_6, c1_.city AS city_7, c0_.email_id AS email_id_8, c1_.user_id AS user_id_9 FROM cms_users c0_ LEFT JOIN cms_addresses c1_ ON c0_.id = c1_.user_id WHERE c0_.id = 1", [CustomTreeWalkerJoin::class, CustomTreeWalker::class] diff --git a/tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php index 8218339df35..3d36dcdbfb8 100644 --- a/tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php @@ -38,7 +38,7 @@ public function assertSqlGeneration($dqlToBeTested, $sqlToBeConfirmed) public function testSupportsDeleteWithoutWhereAndFrom() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u', 'DELETE FROM cms_users' ); @@ -46,7 +46,7 @@ public function testSupportsDeleteWithoutWhereAndFrom() public function testSupportsDeleteWithoutWhere() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'DELETE FROM Doctrine\Tests\Models\CMS\CmsUser u', 'DELETE FROM cms_users' ); @@ -54,7 +54,7 @@ public function testSupportsDeleteWithoutWhere() public function testSupportsWhereClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1', 'DELETE FROM cms_users WHERE id = ?' ); @@ -62,7 +62,7 @@ public function testSupportsWhereClause() public function testSupportsWhereOrExpressions() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = ?1 OR u.name = ?2', 'DELETE FROM cms_users WHERE username = ? OR name = ?' ); @@ -70,12 +70,12 @@ public function testSupportsWhereOrExpressions() public function testSupportsWhereNestedConditionalExpressions() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1 OR ( u.username = ?2 OR u.name = ?3)', 'DELETE FROM cms_users WHERE id = ? OR (username = ? OR name = ?)' ); - //$this->assertSqlGeneration( + //self::assertSqlGeneration( // 'DELETE FROM Doctrine\Tests\Models\CMS\CmsUser WHERE id = ?1', // 'DELETE FROM cms_users WHERE id = ?' //); @@ -83,7 +83,7 @@ public function testSupportsWhereNestedConditionalExpressions() public function testIsCaseAgnostic() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "delete from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1", "DELETE FROM cms_users WHERE username = ?" ); @@ -91,7 +91,7 @@ public function testIsCaseAgnostic() public function testSupportsAndCondition() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = ?1 AND u.name = ?2", "DELETE FROM cms_users WHERE username = ? AND name = ?" ); @@ -99,7 +99,7 @@ public function testSupportsAndCondition() public function testSupportsWhereNot() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE NOT u.id != ?1", "DELETE FROM cms_users WHERE NOT id <> ?" ); @@ -107,7 +107,7 @@ public function testSupportsWhereNot() public function testSupportsWhereNotWithParentheses() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE NOT ( u.id != ?1 )", "DELETE FROM cms_users WHERE NOT (id <> ?)" ); @@ -115,7 +115,7 @@ public function testSupportsWhereNotWithParentheses() public function testSupportsWhereNotWithAndExpression() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE NOT ( u.id != ?1 AND u.username = ?2 )", "DELETE FROM cms_users WHERE NOT (id <> ? AND username = ?)" ); @@ -126,7 +126,7 @@ public function testSupportsWhereNotWithAndExpression() public function testSupportsGreaterThanComparisonClause() { // id = ? was already tested (see testDeleteWithWhere()) - $this->assertSqlGeneration( + self::assertSqlGeneration( "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id > ?1", "DELETE FROM cms_users WHERE id > ?" ); @@ -134,7 +134,7 @@ public function testSupportsGreaterThanComparisonClause() public function testSupportsGreaterThanOrEqualToComparisonClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id >= ?1", "DELETE FROM cms_users WHERE id >= ?" ); @@ -142,7 +142,7 @@ public function testSupportsGreaterThanOrEqualToComparisonClause() public function testSupportsLessThanComparisonClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id < ?1", "DELETE FROM cms_users WHERE id < ?" ); @@ -150,7 +150,7 @@ public function testSupportsLessThanComparisonClause() public function testSupportsLessThanOrEqualToComparisonClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id <= ?1", "DELETE FROM cms_users WHERE id <= ?" ); @@ -158,7 +158,7 @@ public function testSupportsLessThanOrEqualToComparisonClause() public function testSupportsNotEqualToComparisonClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id <> ?1", "DELETE FROM cms_users WHERE id <> ?" ); @@ -166,7 +166,7 @@ public function testSupportsNotEqualToComparisonClause() public function testSupportsNotEqualToComparisonClauseExpressedWithExclamationMark() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id != ?1", "DELETE FROM cms_users WHERE id <> ?" ); @@ -174,7 +174,7 @@ public function testSupportsNotEqualToComparisonClauseExpressedWithExclamationMa public function testSupportsNotBetweenClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id NOT BETWEEN ?1 AND ?2", "DELETE FROM cms_users WHERE id NOT BETWEEN ? AND ?" ); @@ -182,7 +182,7 @@ public function testSupportsNotBetweenClause() public function testSupportsBetweenClauseUsedWithAndClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id BETWEEN ?1 AND ?2 AND u.username != ?3", "DELETE FROM cms_users WHERE id BETWEEN ? AND ? AND username <> ?" ); @@ -191,7 +191,7 @@ public function testSupportsBetweenClauseUsedWithAndClause() public function testSupportsNotLikeClause() { // "WHERE" Expression LikeExpression - $this->assertSqlGeneration( + self::assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username NOT LIKE ?1', 'DELETE FROM cms_users WHERE username NOT LIKE ?' ); @@ -199,7 +199,7 @@ public function testSupportsNotLikeClause() public function testSupportsLikeClauseWithEscapeExpression() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username LIKE ?1 ESCAPE '\\'", "DELETE FROM cms_users WHERE username LIKE ? ESCAPE '\\'" ); @@ -208,7 +208,7 @@ public function testSupportsLikeClauseWithEscapeExpression() public function testSupportsIsNullClause() { // "WHERE" Expression NullComparisonExpression - $this->assertSqlGeneration( + self::assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name IS NULL', 'DELETE FROM cms_users WHERE name IS NULL' ); @@ -216,7 +216,7 @@ public function testSupportsIsNullClause() public function testSupportsIsNotNullClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name IS NOT NULL', 'DELETE FROM cms_users WHERE name IS NOT NULL' ); @@ -224,7 +224,7 @@ public function testSupportsIsNotNullClause() public function testSupportsAtomExpressionAsClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE 1 = 1', 'DELETE FROM cms_users WHERE 1 = 1' ); @@ -232,7 +232,7 @@ public function testSupportsAtomExpressionAsClause() public function testSupportsParameterizedAtomExpression() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE ?1 = 1', 'DELETE FROM cms_users WHERE ? = 1' ); @@ -240,7 +240,7 @@ public function testSupportsParameterizedAtomExpression() public function testSupportsInClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id IN ( ?1, ?2, ?3, ?4 )', 'DELETE FROM cms_users WHERE id IN (?, ?, ?, ?)' ); @@ -248,7 +248,7 @@ public function testSupportsInClause() public function testSupportsNotInClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id NOT IN ( ?1, ?2 )', 'DELETE FROM cms_users WHERE id NOT IN (?, ?)' ); @@ -259,7 +259,7 @@ public function testSupportsNotInClause() */ public function testSubselectTableAliasReferencing() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE SIZE(u.groups) = 10', 'DELETE FROM cms_users WHERE (SELECT COUNT(*) FROM cms_users_groups c0_ WHERE c0_.user_id = cms_users.id) = 10' ); diff --git a/tests/Doctrine/Tests/ORM/Query/ExprTest.php b/tests/Doctrine/Tests/ORM/Query/ExprTest.php index 37a4b70a657..0a99e8dc1cc 100644 --- a/tests/Doctrine/Tests/ORM/Query/ExprTest.php +++ b/tests/Doctrine/Tests/ORM/Query/ExprTest.php @@ -33,32 +33,32 @@ protected function setUp() public function testAvgExpr() { - $this->assertEquals('AVG(u.id)', (string) $this->_expr->avg('u.id')); + self::assertEquals('AVG(u.id)', (string) $this->_expr->avg('u.id')); } public function testMaxExpr() { - $this->assertEquals('MAX(u.id)', (string) $this->_expr->max('u.id')); + self::assertEquals('MAX(u.id)', (string) $this->_expr->max('u.id')); } public function testMinExpr() { - $this->assertEquals('MIN(u.id)', (string) $this->_expr->min('u.id')); + self::assertEquals('MIN(u.id)', (string) $this->_expr->min('u.id')); } public function testCountExpr() { - $this->assertEquals('MAX(u.id)', (string) $this->_expr->max('u.id')); + self::assertEquals('MAX(u.id)', (string) $this->_expr->max('u.id')); } public function testCountDistinctExpr() { - $this->assertEquals('COUNT(DISTINCT u.id)', (string) $this->_expr->countDistinct('u.id')); + self::assertEquals('COUNT(DISTINCT u.id)', (string) $this->_expr->countDistinct('u.id')); } public function testCountDistinctExprMulti() { - $this->assertEquals('COUNT(DISTINCT u.id, u.name)', (string) $this->_expr->countDistinct('u.id', 'u.name')); + self::assertEquals('COUNT(DISTINCT u.id, u.name)', (string) $this->_expr->countDistinct('u.id', 'u.name')); } public function testExistsExpr() @@ -66,7 +66,7 @@ public function testExistsExpr() $qb = $this->_em->createQueryBuilder(); $qb->select('u')->from('User', 'u')->where('u.name = ?1'); - $this->assertEquals('EXISTS(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->_expr->exists($qb)); + self::assertEquals('EXISTS(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->_expr->exists($qb)); } public function testAllExpr() @@ -74,7 +74,7 @@ public function testAllExpr() $qb = $this->_em->createQueryBuilder(); $qb->select('u')->from('User', 'u')->where('u.name = ?1'); - $this->assertEquals('ALL(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->_expr->all($qb)); + self::assertEquals('ALL(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->_expr->all($qb)); } public function testSomeExpr() @@ -82,7 +82,7 @@ public function testSomeExpr() $qb = $this->_em->createQueryBuilder(); $qb->select('u')->from('User', 'u')->where('u.name = ?1'); - $this->assertEquals('SOME(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->_expr->some($qb)); + self::assertEquals('SOME(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->_expr->some($qb)); } public function testAnyExpr() @@ -90,7 +90,7 @@ public function testAnyExpr() $qb = $this->_em->createQueryBuilder(); $qb->select('u')->from('User', 'u')->where('u.name = ?1'); - $this->assertEquals('ANY(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->_expr->any($qb)); + self::assertEquals('ANY(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->_expr->any($qb)); } public function testNotExpr() @@ -98,17 +98,17 @@ public function testNotExpr() $qb = $this->_em->createQueryBuilder(); $qb->select('u')->from('User', 'u')->where('u.name = ?1'); - $this->assertEquals('NOT(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->_expr->not($qb)); + self::assertEquals('NOT(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->_expr->not($qb)); } public function testAndExpr() { - $this->assertEquals('1 = 1 AND 2 = 2', (string) $this->_expr->andX((string) $this->_expr->eq(1, 1), (string) $this->_expr->eq(2, 2))); + self::assertEquals('1 = 1 AND 2 = 2', (string) $this->_expr->andX((string) $this->_expr->eq(1, 1), (string) $this->_expr->eq(2, 2))); } public function testIntelligentParenthesisPreventionAndExpr() { - $this->assertEquals( + self::assertEquals( '1 = 1 AND 2 = 2', (string) $this->_expr->andX($this->_expr->orX($this->_expr->andX($this->_expr->eq(1, 1))), (string) $this->_expr->eq(2, 2)) ); @@ -116,69 +116,69 @@ public function testIntelligentParenthesisPreventionAndExpr() public function testOrExpr() { - $this->assertEquals('1 = 1 OR 2 = 2', (string) $this->_expr->orX((string) $this->_expr->eq(1, 1), (string) $this->_expr->eq(2, 2))); + self::assertEquals('1 = 1 OR 2 = 2', (string) $this->_expr->orX((string) $this->_expr->eq(1, 1), (string) $this->_expr->eq(2, 2))); } public function testAbsExpr() { - $this->assertEquals('ABS(1)', (string) $this->_expr->abs(1)); + self::assertEquals('ABS(1)', (string) $this->_expr->abs(1)); } public function testProdExpr() { - $this->assertEquals('1 * 2', (string) $this->_expr->prod(1, 2)); + self::assertEquals('1 * 2', (string) $this->_expr->prod(1, 2)); } public function testDiffExpr() { - $this->assertEquals('1 - 2', (string) $this->_expr->diff(1, 2)); + self::assertEquals('1 - 2', (string) $this->_expr->diff(1, 2)); } public function testSumExpr() { - $this->assertEquals('1 + 2', (string) $this->_expr->sum(1, 2)); + self::assertEquals('1 + 2', (string) $this->_expr->sum(1, 2)); } public function testQuotientExpr() { - $this->assertEquals('10 / 2', (string) $this->_expr->quot(10, 2)); + self::assertEquals('10 / 2', (string) $this->_expr->quot(10, 2)); } public function testScopeInArithmeticExpr() { - $this->assertEquals('(100 - 20) / 2', (string) $this->_expr->quot($this->_expr->diff(100, 20), 2)); - $this->assertEquals('100 - (20 / 2)', (string) $this->_expr->diff(100, $this->_expr->quot(20, 2))); + self::assertEquals('(100 - 20) / 2', (string) $this->_expr->quot($this->_expr->diff(100, 20), 2)); + self::assertEquals('100 - (20 / 2)', (string) $this->_expr->diff(100, $this->_expr->quot(20, 2))); } public function testSquareRootExpr() { - $this->assertEquals('SQRT(1)', (string) $this->_expr->sqrt(1)); + self::assertEquals('SQRT(1)', (string) $this->_expr->sqrt(1)); } public function testEqualExpr() { - $this->assertEquals('1 = 1', (string) $this->_expr->eq(1, 1)); + self::assertEquals('1 = 1', (string) $this->_expr->eq(1, 1)); } public function testLikeExpr() { - $this->assertEquals('a.description LIKE :description', (string) $this->_expr->like('a.description', ':description')); + self::assertEquals('a.description LIKE :description', (string) $this->_expr->like('a.description', ':description')); } public function testNotLikeExpr() { - $this->assertEquals('a.description NOT LIKE :description', (string) $this->_expr->notLike('a.description', ':description')); + self::assertEquals('a.description NOT LIKE :description', (string) $this->_expr->notLike('a.description', ':description')); } public function testConcatExpr() { - $this->assertEquals('CONCAT(u.first_name, u.last_name)', (string) $this->_expr->concat('u.first_name', 'u.last_name')); - $this->assertEquals('CONCAT(u.first_name, u.middle_name, u.last_name)', (string) $this->_expr->concat('u.first_name', 'u.middle_name', 'u.last_name')); + self::assertEquals('CONCAT(u.first_name, u.last_name)', (string) $this->_expr->concat('u.first_name', 'u.last_name')); + self::assertEquals('CONCAT(u.first_name, u.middle_name, u.last_name)', (string) $this->_expr->concat('u.first_name', 'u.middle_name', 'u.last_name')); } public function testSubstringExpr() { - $this->assertEquals('SUBSTRING(a.title, 0, 25)', (string) $this->_expr->substring('a.title', 0, 25)); + self::assertEquals('SUBSTRING(a.title, 0, 25)', (string) $this->_expr->substring('a.title', 0, 25)); } /** @@ -187,42 +187,42 @@ public function testSubstringExpr() */ public function testSubstringExprAcceptsTwoArguments() { - $this->assertEquals('SUBSTRING(a.title, 5)', (string) $this->_expr->substring('a.title', 5)); + self::assertEquals('SUBSTRING(a.title, 5)', (string) $this->_expr->substring('a.title', 5)); } public function testLowerExpr() { - $this->assertEquals('LOWER(u.first_name)', (string) $this->_expr->lower('u.first_name')); + self::assertEquals('LOWER(u.first_name)', (string) $this->_expr->lower('u.first_name')); } public function testUpperExpr() { - $this->assertEquals('UPPER(u.first_name)', (string) $this->_expr->upper('u.first_name')); + self::assertEquals('UPPER(u.first_name)', (string) $this->_expr->upper('u.first_name')); } public function testLengthExpr() { - $this->assertEquals('LENGTH(u.first_name)', (string) $this->_expr->length('u.first_name')); + self::assertEquals('LENGTH(u.first_name)', (string) $this->_expr->length('u.first_name')); } public function testGreaterThanExpr() { - $this->assertEquals('5 > 2', (string) $this->_expr->gt(5, 2)); + self::assertEquals('5 > 2', (string) $this->_expr->gt(5, 2)); } public function testLessThanExpr() { - $this->assertEquals('2 < 5', (string) $this->_expr->lt(2, 5)); + self::assertEquals('2 < 5', (string) $this->_expr->lt(2, 5)); } public function testStringLiteralExpr() { - $this->assertEquals("'word'", (string) $this->_expr->literal('word')); + self::assertEquals("'word'", (string) $this->_expr->literal('word')); } public function testNumericLiteralExpr() { - $this->assertEquals(5, (string) $this->_expr->literal(5)); + self::assertEquals(5, (string) $this->_expr->literal(5)); } /** @@ -231,65 +231,65 @@ public function testNumericLiteralExpr() */ public function testLiteralExprProperlyQuotesStrings() { - $this->assertEquals("'00010001'", (string) $this->_expr->literal('00010001')); + self::assertEquals("'00010001'", (string) $this->_expr->literal('00010001')); } public function testGreaterThanOrEqualToExpr() { - $this->assertEquals('5 >= 2', (string) $this->_expr->gte(5, 2)); + self::assertEquals('5 >= 2', (string) $this->_expr->gte(5, 2)); } public function testLessThanOrEqualTo() { - $this->assertEquals('2 <= 5', (string) $this->_expr->lte(2, 5)); + self::assertEquals('2 <= 5', (string) $this->_expr->lte(2, 5)); } public function testBetweenExpr() { - $this->assertEquals('u.id BETWEEN 3 AND 6', (string) $this->_expr->between('u.id', 3, 6)); + self::assertEquals('u.id BETWEEN 3 AND 6', (string) $this->_expr->between('u.id', 3, 6)); } public function testTrimExpr() { - $this->assertEquals('TRIM(u.id)', (string) $this->_expr->trim('u.id')); + self::assertEquals('TRIM(u.id)', (string) $this->_expr->trim('u.id')); } public function testIsNullExpr() { - $this->assertEquals('u.id IS NULL', (string) $this->_expr->isNull('u.id')); + self::assertEquals('u.id IS NULL', (string) $this->_expr->isNull('u.id')); } public function testIsNotNullExpr() { - $this->assertEquals('u.id IS NOT NULL', (string) $this->_expr->isNotNull('u.id')); + self::assertEquals('u.id IS NOT NULL', (string) $this->_expr->isNotNull('u.id')); } public function testIsInstanceOfExpr() { - $this->assertEquals('u INSTANCE OF Doctrine\Tests\Models\Company\CompanyEmployee', (string) $this->_expr->isInstanceOf('u', CompanyEmployee::class)); + self::assertEquals('u INSTANCE OF Doctrine\Tests\Models\Company\CompanyEmployee', (string) $this->_expr->isInstanceOf('u', CompanyEmployee::class)); } public function testIsMemberOfExpr() { - $this->assertEquals(':groupId MEMBER OF u.groups', (string) $this->_expr->isMemberOf(':groupId', 'u.groups')); + self::assertEquals(':groupId MEMBER OF u.groups', (string) $this->_expr->isMemberOf(':groupId', 'u.groups')); } public function testInExpr() { - $this->assertEquals('u.id IN(1, 2, 3)', (string) $this->_expr->in('u.id', [1, 2, 3])); + self::assertEquals('u.id IN(1, 2, 3)', (string) $this->_expr->in('u.id', [1, 2, 3])); } public function testInLiteralExpr() { - $this->assertEquals("u.type IN('foo', 'bar')", (string) $this->_expr->in('u.type', ['foo', 'bar'])); + self::assertEquals("u.type IN('foo', 'bar')", (string) $this->_expr->in('u.type', ['foo', 'bar'])); } public function testNotInExpr() { - $this->assertEquals('u.id NOT IN(1, 2, 3)', (string) $this->_expr->notIn('u.id', [1, 2, 3])); + self::assertEquals('u.id NOT IN(1, 2, 3)', (string) $this->_expr->notIn('u.id', [1, 2, 3])); } public function testNotInLiteralExpr() { - $this->assertEquals("u.type NOT IN('foo', 'bar')", (string) $this->_expr->notIn('u.type', ['foo', 'bar'])); + self::assertEquals("u.type NOT IN('foo', 'bar')", (string) $this->_expr->notIn('u.type', ['foo', 'bar'])); } public function testAndxOrxExpr() @@ -302,7 +302,7 @@ public function testAndxOrxExpr() $orExpr->add($andExpr); $orExpr->add($this->_expr->eq(1, 1)); - $this->assertEquals('(1 = 1 AND 1 < 5) OR 1 = 1', (string) $orExpr); + self::assertEquals('(1 = 1 AND 1 < 5) OR 1 = 1', (string) $orExpr); } public function testOrxExpr() @@ -311,27 +311,27 @@ public function testOrxExpr() $orExpr->add($this->_expr->eq(1, 1)); $orExpr->add($this->_expr->lt(1, 5)); - $this->assertEquals('1 = 1 OR 1 < 5', (string) $orExpr); + self::assertEquals('1 = 1 OR 1 < 5', (string) $orExpr); } public function testOrderByCountExpr() { $orderExpr = $this->_expr->desc('u.username'); - $this->assertEquals($orderExpr->count(), 1); - $this->assertEquals('u.username DESC', (string) $orderExpr); + self::assertEquals($orderExpr->count(), 1); + self::assertEquals('u.username DESC', (string) $orderExpr); } public function testOrderByOrder() { $orderExpr = $this->_expr->desc('u.username'); - $this->assertEquals('u.username DESC', (string) $orderExpr); + self::assertEquals('u.username DESC', (string) $orderExpr); } public function testOrderByAsc() { $orderExpr = $this->_expr->asc('u.username'); - $this->assertEquals('u.username ASC', (string) $orderExpr); + self::assertEquals('u.username ASC', (string) $orderExpr); } /** @@ -348,8 +348,8 @@ public function testAddThrowsException() */ public function testBooleanLiteral() { - $this->assertEquals('true', $this->_expr->literal(true)); - $this->assertEquals('false', $this->_expr->literal(false)); + self::assertEquals('true', $this->_expr->literal(true)); + self::assertEquals('false', $this->_expr->literal(false)); } @@ -361,59 +361,59 @@ public function testExpressionGetter() // Andx $andx = new Expr\Andx(['1 = 1', '2 = 2']); - $this->assertEquals(['1 = 1', '2 = 2'], $andx->getParts()); + self::assertEquals(['1 = 1', '2 = 2'], $andx->getParts()); // Comparison $comparison = new Expr\Comparison('foo', Expr\Comparison::EQ, 'bar'); - $this->assertEquals('foo', $comparison->getLeftExpr()); - $this->assertEquals('bar', $comparison->getRightExpr()); - $this->assertEquals(Expr\Comparison::EQ, $comparison->getOperator()); + self::assertEquals('foo', $comparison->getLeftExpr()); + self::assertEquals('bar', $comparison->getRightExpr()); + self::assertEquals(Expr\Comparison::EQ, $comparison->getOperator()); // From $from = new Expr\From('Foo', 'f', 'f.id'); - $this->assertEquals('f', $from->getAlias()); - $this->assertEquals('Foo', $from->getFrom()); - $this->assertEquals('f.id', $from->getIndexBy()); + self::assertEquals('f', $from->getAlias()); + self::assertEquals('Foo', $from->getFrom()); + self::assertEquals('f.id', $from->getIndexBy()); // Func $func = new Expr\Func('MAX', ['f.id']); - $this->assertEquals('MAX', $func->getName()); - $this->assertEquals(['f.id'], $func->getArguments()); + self::assertEquals('MAX', $func->getName()); + self::assertEquals(['f.id'], $func->getArguments()); // GroupBy $group = new Expr\GroupBy(['foo DESC', 'bar ASC']); - $this->assertEquals(['foo DESC', 'bar ASC'], $group->getParts()); + self::assertEquals(['foo DESC', 'bar ASC'], $group->getParts()); // Join $join = new Expr\Join(Expr\Join::INNER_JOIN, 'f.bar', 'b', Expr\Join::ON, 'b.bar_id = 1', 'b.bar_id'); - $this->assertEquals(Expr\Join::INNER_JOIN, $join->getJoinType()); - $this->assertEquals(Expr\Join::ON, $join->getConditionType()); - $this->assertEquals('b.bar_id = 1', $join->getCondition()); - $this->assertEquals('b.bar_id', $join->getIndexBy()); - $this->assertEquals('f.bar', $join->getJoin()); - $this->assertEquals('b', $join->getAlias()); + self::assertEquals(Expr\Join::INNER_JOIN, $join->getJoinType()); + self::assertEquals(Expr\Join::ON, $join->getConditionType()); + self::assertEquals('b.bar_id = 1', $join->getCondition()); + self::assertEquals('b.bar_id', $join->getIndexBy()); + self::assertEquals('f.bar', $join->getJoin()); + self::assertEquals('b', $join->getAlias()); // Literal $literal = new Expr\Literal(['foo']); - $this->assertEquals(['foo'], $literal->getParts()); + self::assertEquals(['foo'], $literal->getParts()); // Math $math = new Expr\Math(10, '+', 20); - $this->assertEquals(10, $math->getLeftExpr()); - $this->assertEquals(20, $math->getRightExpr()); - $this->assertEquals('+', $math->getOperator()); + self::assertEquals(10, $math->getLeftExpr()); + self::assertEquals(20, $math->getRightExpr()); + self::assertEquals('+', $math->getOperator()); // OrderBy $order = new Expr\OrderBy('foo', 'DESC'); - $this->assertEquals(['foo DESC'], $order->getParts()); + self::assertEquals(['foo DESC'], $order->getParts()); // Andx $orx = new Expr\Orx(['foo = 1', 'bar = 2']); - $this->assertEquals(['foo = 1', 'bar = 2'], $orx->getParts()); + self::assertEquals(['foo = 1', 'bar = 2'], $orx->getParts()); // Select $select = new Expr\Select(['foo', 'bar']); - $this->assertEquals(['foo', 'bar'], $select->getParts()); + self::assertEquals(['foo', 'bar'], $select->getParts()); } public function testAddEmpty() @@ -421,7 +421,7 @@ public function testAddEmpty() $andExpr = $this->_expr->andX(); $andExpr->add($this->_expr->andX()); - $this->assertEquals(0, $andExpr->count()); + self::assertEquals(0, $andExpr->count()); } public function testAddNull() @@ -429,6 +429,6 @@ public function testAddNull() $andExpr = $this->_expr->andX(); $andExpr->add(null); - $this->assertEquals(0, $andExpr->count()); + self::assertEquals(0, $andExpr->count()); } } diff --git a/tests/Doctrine/Tests/ORM/Query/FilterCollectionTest.php b/tests/Doctrine/Tests/ORM/Query/FilterCollectionTest.php index 0e47f6e82d6..995784198df 100644 --- a/tests/Doctrine/Tests/ORM/Query/FilterCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Query/FilterCollectionTest.php @@ -28,25 +28,25 @@ public function testEnable() { $filterCollection = $this->em->getFilters(); - $this->assertCount(0, $filterCollection->getEnabledFilters()); + self::assertCount(0, $filterCollection->getEnabledFilters()); $filterCollection->enable('testFilter'); $enabledFilters = $filterCollection->getEnabledFilters(); - $this->assertCount(1, $enabledFilters); - $this->assertContainsOnly(MyFilter::class, $enabledFilters); + self::assertCount(1, $enabledFilters); + self::assertContainsOnly(MyFilter::class, $enabledFilters); $filterCollection->disable('testFilter'); - $this->assertCount(0, $filterCollection->getEnabledFilters()); + self::assertCount(0, $filterCollection->getEnabledFilters()); } public function testHasFilter() { $filterCollection = $this->em->getFilters(); - $this->assertTrue($filterCollection->has('testFilter')); - $this->assertFalse($filterCollection->has('fakeFilter')); + self::assertTrue($filterCollection->has('testFilter')); + self::assertFalse($filterCollection->has('fakeFilter')); } /** @@ -56,11 +56,11 @@ public function testIsEnabled() { $filterCollection = $this->em->getFilters(); - $this->assertFalse($filterCollection->isEnabled('testFilter')); + self::assertFalse($filterCollection->isEnabled('testFilter')); $filterCollection->enable('testFilter'); - $this->assertTrue($filterCollection->isEnabled('testFilter')); + self::assertTrue($filterCollection->isEnabled('testFilter')); } /** @@ -77,7 +77,7 @@ public function testGetFilter() $filterCollection = $this->em->getFilters(); $filterCollection->enable('testFilter'); - $this->assertInstanceOf(MyFilter::class, $filterCollection->getFilter('testFilter')); + self::assertInstanceOf(MyFilter::class, $filterCollection->getFilter('testFilter')); } } diff --git a/tests/Doctrine/Tests/ORM/Query/LanguageRecognitionTest.php b/tests/Doctrine/Tests/ORM/Query/LanguageRecognitionTest.php index 064c0a799cb..31bb6d337c6 100644 --- a/tests/Doctrine/Tests/ORM/Query/LanguageRecognitionTest.php +++ b/tests/Doctrine/Tests/ORM/Query/LanguageRecognitionTest.php @@ -69,17 +69,17 @@ public function parseDql($dql, $hints = []) public function testEmptyQueryString() { - $this->assertInvalidDQL(''); + self::assertInvalidDQL(''); } public function testPlainFromClauseWithAlias() { - $this->assertValidDQL('SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u'); + self::assertValidDQL('SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u'); } public function testSelectSingleComponentWithAsterisk() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u'); } /** @@ -139,143 +139,143 @@ public function invalidDQL() public function testSelectSingleComponentWithMultipleColumns() { - $this->assertValidDQL('SELECT u.name, u.username FROM Doctrine\Tests\Models\CMS\CmsUser u'); + self::assertValidDQL('SELECT u.name, u.username FROM Doctrine\Tests\Models\CMS\CmsUser u'); } public function testSelectMultipleComponentsUsingMultipleFrom() { - $this->assertValidDQL('SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u, Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE u = p.user'); + self::assertValidDQL('SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u, Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE u = p.user'); } public function testSelectMultipleComponentsWithAsterisk() { - $this->assertValidDQL('SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.phonenumbers p'); + self::assertValidDQL('SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.phonenumbers p'); } public function testSelectDistinctIsSupported() { - $this->assertValidDQL('SELECT DISTINCT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u'); + self::assertValidDQL('SELECT DISTINCT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u'); } public function testAggregateFunctionInSelect() { - $this->assertValidDQL('SELECT COUNT(u.id) FROM Doctrine\Tests\Models\CMS\CmsUser u'); + self::assertValidDQL('SELECT COUNT(u.id) FROM Doctrine\Tests\Models\CMS\CmsUser u'); } public function testMultipleParenthesisInSelect() { - $this->assertValidDQL('SELECT (((u.id))) as v FROM Doctrine\Tests\Models\CMS\CmsUser u'); + self::assertValidDQL('SELECT (((u.id))) as v FROM Doctrine\Tests\Models\CMS\CmsUser u'); } public function testDuplicatedAliasInAggregateFunction() { - $this->assertInvalidDQL('SELECT COUNT(u.id) AS num, SUM(u.id) AS num FROM Doctrine\Tests\Models\CMS\CmsUser u'); + self::assertInvalidDQL('SELECT COUNT(u.id) AS num, SUM(u.id) AS num FROM Doctrine\Tests\Models\CMS\CmsUser u'); } public function testAggregateFunctionWithDistinctInSelect() { - $this->assertValidDQL('SELECT COUNT(DISTINCT u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u'); + self::assertValidDQL('SELECT COUNT(DISTINCT u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u'); } public function testFunctionalExpressionsSupportedInWherePart() { - $this->assertValidDQL("SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE TRIM(u.name) = 'someone'"); + self::assertValidDQL("SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE TRIM(u.name) = 'someone'"); } public function testArithmeticExpressionsSupportedInWherePart() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE ((u.id + 5000) * u.id + 3) < 10000000'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE ((u.id + 5000) * u.id + 3) < 10000000'); } public function testInExpressionSupportedInWherePart() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id IN (1, 2)'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id IN (1, 2)'); } public function testInExpressionWithoutSpacesSupportedInWherePart() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id IN (1,2,3)'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id IN (1,2,3)'); } public function testNotInExpressionSupportedInWherePart() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id NOT IN (1)'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id NOT IN (1)'); } public function testInExpressionWithSingleValuedAssociationPathExpression() { - $this->assertValidDQL("SELECT u FROM Doctrine\Tests\Models\Forum\ForumUser u WHERE u.avatar IN (?1, ?2)"); + self::assertValidDQL("SELECT u FROM Doctrine\Tests\Models\Forum\ForumUser u WHERE u.avatar IN (?1, ?2)"); } public function testInvalidInExpressionWithCollectionValuedAssociationPathExpression() { - $this->assertInvalidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.phonenumbers IN (?1, ?2)"); + self::assertInvalidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.phonenumbers IN (?1, ?2)"); } public function testInstanceOfExpressionSupportedInWherePart() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF Doctrine\Tests\Models\Company\CompanyEmployee'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF Doctrine\Tests\Models\Company\CompanyEmployee'); } public function testInstanceOfExpressionWithInputParamSupportedInWherePart() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF ?1'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF ?1'); } public function testNotInstanceOfExpressionSupportedInWherePart() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u NOT INSTANCE OF ?1'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u NOT INSTANCE OF ?1'); } public function testExistsExpressionSupportedInWherePart() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE EXISTS (SELECT p.phonenumber FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.phonenumber = 1234)'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE EXISTS (SELECT p.phonenumber FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.phonenumber = 1234)'); } public function testNotExistsExpressionSupportedInWherePart() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE NOT EXISTS (SELECT p.phonenumber FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.phonenumber = 1234)'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE NOT EXISTS (SELECT p.phonenumber FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.phonenumber = 1234)'); } public function testAggregateFunctionInHavingClause() { - $this->assertValidDQL('SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.phonenumbers p HAVING COUNT(p.phonenumber) > 2'); - $this->assertValidDQL("SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.phonenumbers p HAVING MAX(u.name) = 'romanb'"); + self::assertValidDQL('SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.phonenumbers p HAVING COUNT(p.phonenumber) > 2'); + self::assertValidDQL("SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.phonenumbers p HAVING MAX(u.name) = 'romanb'"); } public function testLeftJoin() { - $this->assertValidDQL('SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.phonenumbers p'); + self::assertValidDQL('SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.phonenumbers p'); } public function testJoin() { - $this->assertValidDQL('SELECT u,p FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.phonenumbers p'); + self::assertValidDQL('SELECT u,p FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.phonenumbers p'); } public function testInnerJoin() { - $this->assertValidDQL('SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.phonenumbers p'); + self::assertValidDQL('SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.phonenumbers p'); } public function testMultipleLeftJoin() { - $this->assertValidDQL('SELECT u, a, p FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a LEFT JOIN u.phonenumbers p'); + self::assertValidDQL('SELECT u, a, p FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a LEFT JOIN u.phonenumbers p'); } public function testMultipleInnerJoin() { - $this->assertValidDQL('SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.articles a INNER JOIN u.phonenumbers p'); + self::assertValidDQL('SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.articles a INNER JOIN u.phonenumbers p'); } public function testMixingOfJoins() { - $this->assertValidDQL('SELECT u.name, a.topic, p.phonenumber FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.articles a LEFT JOIN u.phonenumbers p'); + self::assertValidDQL('SELECT u.name, a.topic, p.phonenumber FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.articles a LEFT JOIN u.phonenumbers p'); } public function testJoinClassPathUsingWITH() { - $this->assertValidDQL('SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN Doctrine\Tests\Models\CMS\CmsArticle a WITH a.user = u.id'); + self::assertValidDQL('SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN Doctrine\Tests\Models\CMS\CmsArticle a WITH a.user = u.id'); } /** @@ -283,7 +283,7 @@ public function testJoinClassPathUsingWITH() */ public function testJoinClassPathUsingWHERE() { - $this->assertValidDQL('SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN Doctrine\Tests\Models\CMS\CmsArticle a WHERE a.user = u.id'); + self::assertValidDQL('SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN Doctrine\Tests\Models\CMS\CmsArticle a WHERE a.user = u.id'); } /** @@ -291,52 +291,52 @@ public function testJoinClassPathUsingWHERE() */ public function testDDC3701WHEREIsNotWITH() { - $this->assertInvalidDQL('SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c JOIN Doctrine\Tests\Models\Company\CompanyEmployee e WHERE e.id = c.salesPerson WHERE c.completed = true'); + self::assertInvalidDQL('SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c JOIN Doctrine\Tests\Models\Company\CompanyEmployee e WHERE e.id = c.salesPerson WHERE c.completed = true'); } public function testOrderBySingleColumn() { - $this->assertValidDQL('SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY u.name'); + self::assertValidDQL('SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY u.name'); } public function testOrderBySingleColumnAscending() { - $this->assertValidDQL('SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY u.name ASC'); + self::assertValidDQL('SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY u.name ASC'); } public function testOrderBySingleColumnDescending() { - $this->assertValidDQL('SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY u.name DESC'); + self::assertValidDQL('SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY u.name DESC'); } public function testOrderByMultipleColumns() { - $this->assertValidDQL('SELECT u.name, u.username FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY u.username DESC, u.name DESC'); + self::assertValidDQL('SELECT u.name, u.username FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY u.username DESC, u.name DESC'); } public function testSubselectInInExpression() { - $this->assertValidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id NOT IN (SELECT u2.id FROM Doctrine\Tests\Models\CMS\CmsUser u2 WHERE u2.name = 'zYne')"); + self::assertValidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id NOT IN (SELECT u2.id FROM Doctrine\Tests\Models\CMS\CmsUser u2 WHERE u2.name = 'zYne')"); } public function testSubselectInSelectPart() { - $this->assertValidDQL("SELECT u.name, (SELECT COUNT(p.phonenumber) FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.phonenumber = 1234) pcount FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = 'jon'"); + self::assertValidDQL("SELECT u.name, (SELECT COUNT(p.phonenumber) FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.phonenumber = 1234) pcount FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = 'jon'"); } public function testArithmeticExpressionInSelectPart() { - $this->assertValidDQL("SELECT SUM(u.id) / COUNT(u.id) FROM Doctrine\Tests\Models\CMS\CmsUser u"); + self::assertValidDQL("SELECT SUM(u.id) / COUNT(u.id) FROM Doctrine\Tests\Models\CMS\CmsUser u"); } public function testArithmeticExpressionInSubselectPart() { - $this->assertValidDQL("SELECT (SELECT SUM(u.id) / COUNT(u.id) FROM Doctrine\Tests\Models\CMS\CmsUser u2) value FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = 'jon'"); + self::assertValidDQL("SELECT (SELECT SUM(u.id) / COUNT(u.id) FROM Doctrine\Tests\Models\CMS\CmsUser u2) value FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = 'jon'"); } public function testArithmeticExpressionWithParenthesisInSubselectPart() { - $this->assertValidDQL("SELECT (SELECT (SUM(u.id) / COUNT(u.id)) FROM Doctrine\Tests\Models\CMS\CmsUser u2) value FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = 'jon'"); + self::assertValidDQL("SELECT (SELECT (SUM(u.id) / COUNT(u.id)) FROM Doctrine\Tests\Models\CMS\CmsUser u2) value FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = 'jon'"); } /** @@ -344,8 +344,8 @@ public function testArithmeticExpressionWithParenthesisInSubselectPart() */ public function testSelectLiteralInSubselect() { - $this->assertValidDQL('SELECT (SELECT 1 FROM Doctrine\Tests\Models\CMS\CmsUser u2) value FROM Doctrine\Tests\Models\CMS\CmsUser u'); - $this->assertValidDQL('SELECT (SELECT 0 FROM Doctrine\Tests\Models\CMS\CmsUser u2) value FROM Doctrine\Tests\Models\CMS\CmsUser u'); + self::assertValidDQL('SELECT (SELECT 1 FROM Doctrine\Tests\Models\CMS\CmsUser u2) value FROM Doctrine\Tests\Models\CMS\CmsUser u'); + self::assertValidDQL('SELECT (SELECT 0 FROM Doctrine\Tests\Models\CMS\CmsUser u2) value FROM Doctrine\Tests\Models\CMS\CmsUser u'); } /** @@ -353,125 +353,125 @@ public function testSelectLiteralInSubselect() */ public function testConstantValueInSelect() { - $this->assertValidDQL("SELECT u.name, 'foo' AS bar FROM Doctrine\Tests\Models\CMS\CmsUser u", true); + self::assertValidDQL("SELECT u.name, 'foo' AS bar FROM Doctrine\Tests\Models\CMS\CmsUser u", true); } public function testDuplicateAliasInSubselectPart() { - $this->assertInvalidDQL("SELECT (SELECT SUM(u.id) / COUNT(u.id) AS foo FROM Doctrine\Tests\Models\CMS\CmsUser u2) foo FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = 'jon'"); + self::assertInvalidDQL("SELECT (SELECT SUM(u.id) / COUNT(u.id) AS foo FROM Doctrine\Tests\Models\CMS\CmsUser u2) foo FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = 'jon'"); } public function testPositionalInputParameter() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1'); } public function testNamedInputParameter() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :id'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :id'); } public function testJoinConditionOverrideNotSupported() { - $this->assertInvalidDQL("SELECT u.name, p FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.phonenumbers p ON p.phonenumber = '123 123'"); + self::assertInvalidDQL("SELECT u.name, p FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.phonenumbers p ON p.phonenumber = '123 123'"); } public function testIndexByClauseWithOneComponent() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u INDEX BY u.id'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u INDEX BY u.id'); } public function testIndexBySupportsJoins() { - $this->assertValidDQL('SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a INDEX BY a.id'); // INDEX BY is now referring to articles + self::assertValidDQL('SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a INDEX BY a.id'); // INDEX BY is now referring to articles } public function testIndexBySupportsJoins2() { - $this->assertValidDQL('SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u INDEX BY u.id LEFT JOIN u.phonenumbers p INDEX BY p.phonenumber'); + self::assertValidDQL('SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u INDEX BY u.id LEFT JOIN u.phonenumbers p INDEX BY p.phonenumber'); } public function testBetweenExpressionSupported() { - $this->assertValidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name BETWEEN 'jepso' AND 'zYne'"); + self::assertValidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name BETWEEN 'jepso' AND 'zYne'"); } public function testNotBetweenExpressionSupported() { - $this->assertValidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name NOT BETWEEN 'jepso' AND 'zYne'"); + self::assertValidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name NOT BETWEEN 'jepso' AND 'zYne'"); } public function testLikeExpression() { - $this->assertValidDQL("SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name LIKE 'z%'"); + self::assertValidDQL("SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name LIKE 'z%'"); } public function testNotLikeExpression() { - $this->assertValidDQL("SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name NOT LIKE 'z%'"); + self::assertValidDQL("SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name NOT LIKE 'z%'"); } public function testLikeExpressionWithCustomEscapeCharacter() { - $this->assertValidDQL("SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name LIKE 'z|%' ESCAPE '|'"); + self::assertValidDQL("SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name LIKE 'z|%' ESCAPE '|'"); } public function testFieldComparisonWithoutAlias() { - $this->assertInvalidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE id = 1"); + self::assertInvalidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE id = 1"); } public function testDuplicatedAliasDeclaration() { - $this->assertInvalidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.articles u WHERE u.id = 1"); + self::assertInvalidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.articles u WHERE u.id = 1"); } public function testImplicitJoinInWhereOnSingleValuedAssociationPathExpression() { // This should be allowed because avatar is a single-value association. // SQL: SELECT ... FROM forum_user fu INNER JOIN forum_avatar fa ON fu.avatar_id = fa.id WHERE fa.id = ? - $this->assertValidDQL("SELECT u FROM Doctrine\Tests\Models\Forum\ForumUser u JOIN u.avatar a WHERE a.id = ?1"); + self::assertValidDQL("SELECT u FROM Doctrine\Tests\Models\Forum\ForumUser u JOIN u.avatar a WHERE a.id = ?1"); } public function testImplicitJoinInWhereOnCollectionValuedPathExpression() { // This should be forbidden, because articles is a collection - $this->assertInvalidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.articles a WHERE a.title = ?"); + self::assertInvalidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.articles a WHERE a.title = ?"); } public function testInvalidSyntaxIsRejected() { - $this->assertInvalidDQL("FOOBAR CmsUser"); - $this->assertInvalidDQL("DELETE FROM Doctrine\Tests\Models\CMS\CmsUser.articles"); - $this->assertInvalidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.articles.comments"); + self::assertInvalidDQL("FOOBAR CmsUser"); + self::assertInvalidDQL("DELETE FROM Doctrine\Tests\Models\CMS\CmsUser.articles"); + self::assertInvalidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.articles.comments"); // Currently UNDEFINED OFFSET error - $this->assertInvalidDQL("SELECT c FROM CmsUser.articles.comments c"); + self::assertInvalidDQL("SELECT c FROM CmsUser.articles.comments c"); } public function testUpdateWorksWithOneField() { - $this->assertValidDQL("UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = 'someone'"); + self::assertValidDQL("UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = 'someone'"); } public function testUpdateWorksWithMultipleFields() { - $this->assertValidDQL("UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = 'someone', u.username = 'some'"); + self::assertValidDQL("UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = 'someone', u.username = 'some'"); } public function testUpdateSupportsConditions() { - $this->assertValidDQL("UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = 'someone' WHERE u.id = 5"); + self::assertValidDQL("UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = 'someone' WHERE u.id = 5"); } public function testDeleteAll() { - $this->assertValidDQL('DELETE FROM Doctrine\Tests\Models\CMS\CmsUser u'); + self::assertValidDQL('DELETE FROM Doctrine\Tests\Models\CMS\CmsUser u'); } public function testDeleteWithCondition() { - $this->assertValidDQL('DELETE FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = 3'); + self::assertValidDQL('DELETE FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = 3'); } /** @@ -480,94 +480,94 @@ public function testDeleteWithCondition() */ public function testImplicitJoinWithCartesianProductAndConditionInWhere() { - $this->assertValidDQL("SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u, Doctrine\Tests\Models\CMS\CmsArticle a WHERE u.name = a.topic"); + self::assertValidDQL("SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u, Doctrine\Tests\Models\CMS\CmsArticle a WHERE u.name = a.topic"); } public function testAllExpressionWithCorrelatedSubquery() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id > ALL (SELECT u2.id FROM Doctrine\Tests\Models\CMS\CmsUser u2 WHERE u2.name = u.name)'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id > ALL (SELECT u2.id FROM Doctrine\Tests\Models\CMS\CmsUser u2 WHERE u2.name = u.name)'); } public function testCustomJoinsAndWithKeywordSupported() { - $this->assertValidDQL('SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.phonenumbers p WITH p.phonenumber = 123 WHERE u.id = 1'); + self::assertValidDQL('SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.phonenumbers p WITH p.phonenumber = 123 WHERE u.id = 1'); } public function testAnyExpressionWithCorrelatedSubquery() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id > ANY (SELECT u2.id FROM Doctrine\Tests\Models\CMS\CmsUser u2 WHERE u2.name = u.name)'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id > ANY (SELECT u2.id FROM Doctrine\Tests\Models\CMS\CmsUser u2 WHERE u2.name = u.name)'); } public function testSomeExpressionWithCorrelatedSubquery() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id > SOME (SELECT u2.id FROM Doctrine\Tests\Models\CMS\CmsUser u2 WHERE u2.name = u.name)'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id > SOME (SELECT u2.id FROM Doctrine\Tests\Models\CMS\CmsUser u2 WHERE u2.name = u.name)'); } public function testArithmeticExpressionWithoutParenthesisInWhereClause() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE SIZE(u.phonenumbers) + 1 > 10'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE SIZE(u.phonenumbers) + 1 > 10'); } public function testMemberOfExpression() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE :param MEMBER OF u.phonenumbers'); - //$this->assertValidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE 'Joe' MEMBER OF u.nicknames"); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE :param MEMBER OF u.phonenumbers'); + //self::assertValidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE 'Joe' MEMBER OF u.nicknames"); } public function testSizeFunction() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE SIZE(u.phonenumbers) > 1'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE SIZE(u.phonenumbers) > 1'); } public function testEmptyCollectionComparisonExpression() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.phonenumbers IS EMPTY'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.phonenumbers IS EMPTY'); } public function testSingleValuedAssociationFieldInWhere() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.address = ?1'); - $this->assertValidDQL('SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.user = ?1'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.address = ?1'); + self::assertValidDQL('SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.user = ?1'); } public function testBooleanLiteralInWhere() { - $this->assertValidDQL('SELECT b FROM Doctrine\Tests\Models\Generic\BooleanModel b WHERE b.booleanField = true'); + self::assertValidDQL('SELECT b FROM Doctrine\Tests\Models\Generic\BooleanModel b WHERE b.booleanField = true'); } public function testSubqueryInSelectExpression() { - $this->assertValidDQL('select u, (select max(p.phonenumber) from Doctrine\Tests\Models\CMS\CmsPhonenumber p) maxId from Doctrine\Tests\Models\CMS\CmsUser u'); + self::assertValidDQL('select u, (select max(p.phonenumber) from Doctrine\Tests\Models\CMS\CmsPhonenumber p) maxId from Doctrine\Tests\Models\CMS\CmsUser u'); } public function testUsageOfQComponentOutsideSubquery() { - $this->assertInvalidDQL('select u, (select max(p.phonenumber) from Doctrine\Tests\Models\CMS\CmsPhonenumber p) maxId from Doctrine\Tests\Models\CMS\CmsUser u WHERE p.user = ?1'); + self::assertInvalidDQL('select u, (select max(p.phonenumber) from Doctrine\Tests\Models\CMS\CmsPhonenumber p) maxId from Doctrine\Tests\Models\CMS\CmsUser u WHERE p.user = ?1'); } public function testUnknownAbstractSchemaName() { - $this->assertInvalidDQL('SELECT u FROM UnknownClassName u'); + self::assertInvalidDQL('SELECT u FROM UnknownClassName u'); } public function testCorrectPartialObjectLoad() { - $this->assertValidDQL('SELECT PARTIAL u.{id,name} FROM Doctrine\Tests\Models\CMS\CmsUser u'); + self::assertValidDQL('SELECT PARTIAL u.{id,name} FROM Doctrine\Tests\Models\CMS\CmsUser u'); } public function testIncorrectPartialObjectLoadBecauseOfMissingIdentifier() { - $this->assertInvalidDQL('SELECT PARTIAL u.{name} FROM Doctrine\Tests\Models\CMS\CmsUser u'); + self::assertInvalidDQL('SELECT PARTIAL u.{name} FROM Doctrine\Tests\Models\CMS\CmsUser u'); } public function testScalarExpressionInSelect() { - $this->assertValidDQL('SELECT u, 42 + u.id AS someNumber FROM Doctrine\Tests\Models\CMS\CmsUser u'); + self::assertValidDQL('SELECT u, 42 + u.id AS someNumber FROM Doctrine\Tests\Models\CMS\CmsUser u'); } public function testInputParameterInSelect() { - $this->assertValidDQL('SELECT u, u.id + ?1 AS someNumber FROM Doctrine\Tests\Models\CMS\CmsUser u'); + self::assertValidDQL('SELECT u, u.id + ?1 AS someNumber FROM Doctrine\Tests\Models\CMS\CmsUser u'); } /** @@ -577,7 +577,7 @@ public function testCustomFunctionsReturningStringInStringPrimary() { $this->_em->getConfiguration()->addCustomStringFunction('CC', Query\AST\Functions\ConcatFunction::class); - $this->assertValidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CC('%', u.name) LIKE '%foo%'", true); + self::assertValidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CC('%', u.name) LIKE '%foo%'", true); } /** @@ -585,7 +585,7 @@ public function testCustomFunctionsReturningStringInStringPrimary() */ public function testDQLKeywordInJoinIsAllowed() { - $this->assertValidDQL('SELECT u FROM ' . __NAMESPACE__ . '\DQLKeywordsModelUser u JOIN u.group g'); + self::assertValidDQL('SELECT u FROM ' . __NAMESPACE__ . '\DQLKeywordsModelUser u JOIN u.group g'); } /** @@ -593,13 +593,13 @@ public function testDQLKeywordInJoinIsAllowed() */ public function testDQLKeywordInConditionIsAllowed() { - $this->assertValidDQL('SELECT g FROM ' . __NAMESPACE__ . '\DQLKeywordsModelGroup g WHERE g.from=0'); + self::assertValidDQL('SELECT g FROM ' . __NAMESPACE__ . '\DQLKeywordsModelGroup g WHERE g.from=0'); } /* The exception is currently thrown in the SQLWalker, not earlier. public function testInverseSideSingleValuedAssociationPathNotAllowed() { - $this->assertInvalidDQL('SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.address = ?1'); + self::assertInvalidDQL('SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.address = ?1'); } */ @@ -608,7 +608,7 @@ public function testInverseSideSingleValuedAssociationPathNotAllowed() */ public function testSelectOnlyNonRootEntityAlias() { - $this->assertInvalidDQL('SELECT g FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.groups g'); + self::assertInvalidDQL('SELECT g FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.groups g'); } /** @@ -616,7 +616,7 @@ public function testSelectOnlyNonRootEntityAlias() */ public function testInputParameterSingleChar() { - $this->assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = :q'); + self::assertValidDQL('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = :q'); } /** @@ -624,7 +624,7 @@ public function testInputParameterSingleChar() */ public function testGroupBy() { - $this->assertValidDQL('SELECT g.id, count(u.id) FROM Doctrine\Tests\Models\CMS\CmsGroup g JOIN g.users u GROUP BY g.id'); + self::assertValidDQL('SELECT g.id, count(u.id) FROM Doctrine\Tests\Models\CMS\CmsGroup g JOIN g.users u GROUP BY g.id'); } /** @@ -632,7 +632,7 @@ public function testGroupBy() */ public function testGroupByIdentificationVariable() { - $this->assertValidDQL('SELECT g, count(u.id) FROM Doctrine\Tests\Models\CMS\CmsGroup g JOIN g.users u GROUP BY g'); + self::assertValidDQL('SELECT g, count(u.id) FROM Doctrine\Tests\Models\CMS\CmsGroup g JOIN g.users u GROUP BY g'); } /** @@ -640,7 +640,7 @@ public function testGroupByIdentificationVariable() */ public function testGroupByUnknownIdentificationVariable() { - $this->assertInvalidDQL('SELECT g, count(u.id) FROM Doctrine\Tests\Models\CMS\CmsGroup g JOIN g.users u GROUP BY m'); + self::assertInvalidDQL('SELECT g, count(u.id) FROM Doctrine\Tests\Models\CMS\CmsGroup g JOIN g.users u GROUP BY m'); } /** @@ -648,7 +648,7 @@ public function testGroupByUnknownIdentificationVariable() */ public function testSizeOfForeignKeyOneToManyPrimaryKeyEntity() { - $this->assertValidDQL("SELECT a, t FROM Doctrine\Tests\Models\DDC117\DDC117Article a JOIN a.translations t WHERE SIZE(a.translations) > 0"); + self::assertValidDQL("SELECT a, t FROM Doctrine\Tests\Models\DDC117\DDC117Article a JOIN a.translations t WHERE SIZE(a.translations) > 0"); } /** @@ -656,17 +656,17 @@ public function testSizeOfForeignKeyOneToManyPrimaryKeyEntity() */ public function testSizeOfForeignKeyManyToManyPrimaryKeyEntity() { - $this->assertValidDQL("SELECT e, t FROM Doctrine\Tests\Models\DDC117\DDC117Editor e JOIN e.reviewingTranslations t WHERE SIZE(e.reviewingTranslations) > 0"); + self::assertValidDQL("SELECT e, t FROM Doctrine\Tests\Models\DDC117\DDC117Editor e JOIN e.reviewingTranslations t WHERE SIZE(e.reviewingTranslations) > 0"); } public function testCaseSupportContainingNullIfExpression() { - $this->assertValidDQL("SELECT u.id, NULLIF(u.name, u.name) AS shouldBeNull FROM Doctrine\Tests\Models\CMS\CmsUser u"); + self::assertValidDQL("SELECT u.id, NULLIF(u.name, u.name) AS shouldBeNull FROM Doctrine\Tests\Models\CMS\CmsUser u"); } public function testCaseSupportContainingCoalesceExpression() { - $this->assertValidDQL("select COALESCE(NULLIF(u.name, ''), u.username) as Display FROM Doctrine\Tests\Models\CMS\CmsUser u"); + self::assertValidDQL("select COALESCE(NULLIF(u.name, ''), u.username) as Display FROM Doctrine\Tests\Models\CMS\CmsUser u"); } /** @@ -674,7 +674,7 @@ public function testCaseSupportContainingCoalesceExpression() */ public function testHavingSupportIsNullExpression() { - $this->assertValidDQL("SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING u.username IS NULL"); + self::assertValidDQL("SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING u.username IS NULL"); } /** @@ -682,7 +682,7 @@ public function testHavingSupportIsNullExpression() */ public function testHavingSupportResultVariableInNullComparisonExpression() { - $this->assertValidDQL("SELECT u AS user, SUM(a.id) AS score FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN Doctrine\Tests\Models\CMS\CmsAddress a WITH a.user = u GROUP BY u HAVING score IS NOT NULL AND score >= 5"); + self::assertValidDQL("SELECT u AS user, SUM(a.id) AS score FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN Doctrine\Tests\Models\CMS\CmsAddress a WITH a.user = u GROUP BY u HAVING score IS NOT NULL AND score >= 5"); } /** @@ -690,7 +690,7 @@ public function testHavingSupportResultVariableInNullComparisonExpression() */ public function testHavingSupportLikeExpression() { - $this->assertValidDQL("SELECT _u.id, count(_articles) as uuuu FROM Doctrine\Tests\Models\CMS\CmsUser _u LEFT JOIN _u.articles _articles GROUP BY _u HAVING uuuu LIKE '3'"); + self::assertValidDQL("SELECT _u.id, count(_articles) as uuuu FROM Doctrine\Tests\Models\CMS\CmsUser _u LEFT JOIN _u.articles _articles GROUP BY _u HAVING uuuu LIKE '3'"); } /** @@ -698,7 +698,7 @@ public function testHavingSupportLikeExpression() */ public function testNewLiteralExpression() { - $this->assertValidDQL("SELECT new " . __NAMESPACE__ . "\\DummyStruct(u.id, 'foo', 1, true) FROM Doctrine\Tests\Models\CMS\CmsUser u"); + self::assertValidDQL("SELECT new " . __NAMESPACE__ . "\\DummyStruct(u.id, 'foo', 1, true) FROM Doctrine\Tests\Models\CMS\CmsUser u"); } /** @@ -706,7 +706,7 @@ public function testNewLiteralExpression() */ public function testNewLiteralWithSubselectExpression() { - $this->assertValidDQL("SELECT new " . __NAMESPACE__ . "\\DummyStruct(u.id, 'foo', (SELECT 1 FROM Doctrine\Tests\Models\CMS\CmsUser su), true) FROM Doctrine\Tests\Models\CMS\CmsUser u"); + self::assertValidDQL("SELECT new " . __NAMESPACE__ . "\\DummyStruct(u.id, 'foo', (SELECT 1 FROM Doctrine\Tests\Models\CMS\CmsUser su), true) FROM Doctrine\Tests\Models\CMS\CmsUser u"); } } diff --git a/tests/Doctrine/Tests/ORM/Query/LexerTest.php b/tests/Doctrine/Tests/ORM/Query/LexerTest.php index 904b8978786..cfa49c0d848 100644 --- a/tests/Doctrine/Tests/ORM/Query/LexerTest.php +++ b/tests/Doctrine/Tests/ORM/Query/LexerTest.php @@ -22,8 +22,8 @@ public function testScannerRecognizesTokens($type, $value) $lexer->moveNext(); $token = $lexer->lookahead; - $this->assertEquals($type, $token['type']); - $this->assertEquals($value, $token['value']); + self::assertEquals($type, $token['type']); + self::assertEquals($value, $token['value']); } public function testScannerRecognizesTerminalString() @@ -39,7 +39,7 @@ public function testScannerRecognizesTerminalString() $lexer->moveNext(); $token = $lexer->lookahead; - $this->assertEquals(Lexer::T_ALL, $token['type']); + self::assertEquals(Lexer::T_ALL, $token['type']); } public function testScannerRecognizesDecimalInteger() @@ -47,8 +47,8 @@ public function testScannerRecognizesDecimalInteger() $lexer = new Lexer('1234'); $lexer->moveNext(); $token = $lexer->lookahead; - $this->assertEquals(Lexer::T_INTEGER, $token['type']); - $this->assertEquals(1234, $token['value']); + self::assertEquals(Lexer::T_INTEGER, $token['type']); + self::assertEquals(1234, $token['value']); } public function testScannerRecognizesFloat() @@ -56,8 +56,8 @@ public function testScannerRecognizesFloat() $lexer = new Lexer('1.234'); $lexer->moveNext(); $token = $lexer->lookahead; - $this->assertEquals(Lexer::T_FLOAT, $token['type']); - $this->assertEquals(1.234, $token['value']); + self::assertEquals(Lexer::T_FLOAT, $token['type']); + self::assertEquals(1.234, $token['value']); } public function testScannerRecognizesFloatWithExponent() @@ -65,8 +65,8 @@ public function testScannerRecognizesFloatWithExponent() $lexer = new Lexer('1.2e3'); $lexer->moveNext(); $token = $lexer->lookahead; - $this->assertEquals(Lexer::T_FLOAT, $token['type']); - $this->assertEquals(1.2e3, $token['value']); + self::assertEquals(Lexer::T_FLOAT, $token['type']); + self::assertEquals(1.2e3, $token['value']); } public function testScannerRecognizesFloatWithExponent2() @@ -74,8 +74,8 @@ public function testScannerRecognizesFloatWithExponent2() $lexer = new Lexer('0.2e3'); $lexer->moveNext(); $token = $lexer->lookahead; - $this->assertEquals(Lexer::T_FLOAT, $token['type']); - $this->assertEquals(.2e3, $token['value']); + self::assertEquals(Lexer::T_FLOAT, $token['type']); + self::assertEquals(.2e3, $token['value']); } public function testScannerRecognizesFloatWithNegativeExponent() @@ -83,8 +83,8 @@ public function testScannerRecognizesFloatWithNegativeExponent() $lexer = new Lexer('7E-10'); $lexer->moveNext(); $token = $lexer->lookahead; - $this->assertEquals(Lexer::T_FLOAT, $token['type']); - $this->assertEquals(7E-10, $token['value']); + self::assertEquals(Lexer::T_FLOAT, $token['type']); + self::assertEquals(7E-10, $token['value']); } public function testScannerRecognizesFloatBig() @@ -92,8 +92,8 @@ public function testScannerRecognizesFloatBig() $lexer = new Lexer('123456789.01'); $lexer->moveNext(); $token = $lexer->lookahead; - $this->assertEquals(Lexer::T_FLOAT, $token['type']); - $this->assertEquals(1.2345678901e8, $token['value']); + self::assertEquals(Lexer::T_FLOAT, $token['type']); + self::assertEquals(1.2345678901e8, $token['value']); } public function testScannerRecognizesFloatContainingWhitespace() @@ -101,14 +101,14 @@ public function testScannerRecognizesFloatContainingWhitespace() $lexer = new Lexer('- 1.234e2'); $lexer->moveNext(); $token = $lexer->lookahead; - $this->assertEquals(Lexer::T_MINUS, $token['type']); - $this->assertEquals('-', $token['value']); + self::assertEquals(Lexer::T_MINUS, $token['type']); + self::assertEquals('-', $token['value']); $lexer->moveNext(); $token = $lexer->lookahead; - $this->assertEquals(Lexer::T_FLOAT, $token['type']); - $this->assertNotEquals(-1.234e2, $token['value']); - $this->assertEquals(1.234e2, $token['value']); + self::assertEquals(Lexer::T_FLOAT, $token['type']); + self::assertNotEquals(-1.234e2, $token['value']); + self::assertEquals(1.234e2, $token['value']); } public function testScannerRecognizesStringContainingWhitespace() @@ -116,8 +116,8 @@ public function testScannerRecognizesStringContainingWhitespace() $lexer = new Lexer("'This is a string.'"); $lexer->moveNext(); $token = $lexer->lookahead; - $this->assertEquals(Lexer::T_STRING, $token['type']); - $this->assertEquals("This is a string.", $token['value']); + self::assertEquals(Lexer::T_STRING, $token['type']); + self::assertEquals("This is a string.", $token['value']); } public function testScannerRecognizesStringContainingSingleQuotes() @@ -125,8 +125,8 @@ public function testScannerRecognizesStringContainingSingleQuotes() $lexer = new Lexer("'abc''defg'''"); $lexer->moveNext(); $token = $lexer->lookahead; - $this->assertEquals(Lexer::T_STRING, $token['type']); - $this->assertEquals("abc'defg'", $token['value']); + self::assertEquals(Lexer::T_STRING, $token['type']); + self::assertEquals("abc'defg'", $token['value']); } public function testScannerRecognizesInputParameter() @@ -134,8 +134,8 @@ public function testScannerRecognizesInputParameter() $lexer = new Lexer('?1'); $lexer->moveNext(); $token = $lexer->lookahead; - $this->assertEquals(Lexer::T_INPUT_PARAMETER, $token['type']); - $this->assertEquals('?1', $token['value']); + self::assertEquals(Lexer::T_INPUT_PARAMETER, $token['type']); + self::assertEquals('?1', $token['value']); } public function testScannerRecognizesNamedInputParameter() @@ -143,8 +143,8 @@ public function testScannerRecognizesNamedInputParameter() $lexer = new Lexer(':name'); $lexer->moveNext(); $token = $lexer->lookahead; - $this->assertEquals(Lexer::T_INPUT_PARAMETER, $token['type']); - $this->assertEquals(':name', $token['value']); + self::assertEquals(Lexer::T_INPUT_PARAMETER, $token['type']); + self::assertEquals(':name', $token['value']); } public function testScannerRecognizesNamedInputParameterStartingWithUnderscore() @@ -152,8 +152,8 @@ public function testScannerRecognizesNamedInputParameterStartingWithUnderscore() $lexer = new Lexer(':_name'); $lexer->moveNext(); $token = $lexer->lookahead; - $this->assertEquals(Lexer::T_INPUT_PARAMETER, $token['type']); - $this->assertEquals(':_name', $token['value']); + self::assertEquals(Lexer::T_INPUT_PARAMETER, $token['type']); + self::assertEquals(':_name', $token['value']); } public function testScannerTokenizesASimpleQueryCorrectly() @@ -222,12 +222,12 @@ public function testScannerTokenizesASimpleQueryCorrectly() foreach ($tokens as $expected) { $lexer->moveNext(); $actual = $lexer->lookahead; - $this->assertEquals($expected['value'], $actual['value']); - $this->assertEquals($expected['type'], $actual['type']); - $this->assertEquals($expected['position'], $actual['position']); + self::assertEquals($expected['value'], $actual['value']); + self::assertEquals($expected['type'], $actual['type']); + self::assertEquals($expected['position'], $actual['position']); } - $this->assertFalse($lexer->moveNext()); + self::assertFalse($lexer->moveNext()); } public function provideTokens() diff --git a/tests/Doctrine/Tests/ORM/Query/ParameterTypeInfererTest.php b/tests/Doctrine/Tests/ORM/Query/ParameterTypeInfererTest.php index b929f8d18a3..4b5c78843b9 100644 --- a/tests/Doctrine/Tests/ORM/Query/ParameterTypeInfererTest.php +++ b/tests/Doctrine/Tests/ORM/Query/ParameterTypeInfererTest.php @@ -38,6 +38,6 @@ public function providerParameterTypeInferer() public function testParameterTypeInferer($value, $expected) { - $this->assertEquals($expected, ParameterTypeInferer::inferType($value)); + self::assertEquals($expected, ParameterTypeInferer::inferType($value)); } } diff --git a/tests/Doctrine/Tests/ORM/Query/ParserResultTest.php b/tests/Doctrine/Tests/ORM/Query/ParserResultTest.php index 1b74654430e..14004012806 100644 --- a/tests/Doctrine/Tests/ORM/Query/ParserResultTest.php +++ b/tests/Doctrine/Tests/ORM/Query/ParserResultTest.php @@ -18,31 +18,31 @@ public function setUp() public function testGetRsm() { - $this->assertInstanceOf(ResultSetMapping::class, $this->parserResult->getResultSetMapping()); + self::assertInstanceOf(ResultSetMapping::class, $this->parserResult->getResultSetMapping()); } public function testSetGetSqlExecutor() { - $this->assertNull($this->parserResult->getSqlExecutor()); + self::assertNull($this->parserResult->getSqlExecutor()); $executor = $this->getMockBuilder(AbstractSqlExecutor::class)->setMethods(['execute'])->getMock(); $this->parserResult->setSqlExecutor($executor); - $this->assertSame($executor, $this->parserResult->getSqlExecutor()); + self::assertSame($executor, $this->parserResult->getSqlExecutor()); } public function testGetSqlParameterPosition() { $this->parserResult->addParameterMapping(1, 1); $this->parserResult->addParameterMapping(1, 2); - $this->assertEquals([1, 2], $this->parserResult->getSqlParameterPositions(1)); + self::assertEquals([1, 2], $this->parserResult->getSqlParameterPositions(1)); } public function testGetParameterMappings() { - $this->assertInternalType('array', $this->parserResult->getParameterMappings()); + self::assertInternalType('array', $this->parserResult->getParameterMappings()); $this->parserResult->addParameterMapping(1, 1); $this->parserResult->addParameterMapping(1, 2); - $this->assertEquals([1 => [1, 2]], $this->parserResult->getParameterMappings()); + self::assertEquals([1 => [1, 2]], $this->parserResult->getParameterMappings()); } } diff --git a/tests/Doctrine/Tests/ORM/Query/ParserTest.php b/tests/Doctrine/Tests/ORM/Query/ParserTest.php index b290812fc85..c28c54c5aeb 100644 --- a/tests/Doctrine/Tests/ORM/Query/ParserTest.php +++ b/tests/Doctrine/Tests/ORM/Query/ParserTest.php @@ -20,7 +20,7 @@ public function testAbstractSchemaNameSupportsFQCN() { $parser = $this->createParser(CmsUser::class); - $this->assertEquals(CmsUser::class, $parser->AbstractSchemaName()); + self::assertEquals(CmsUser::class, $parser->AbstractSchemaName()); } /** @@ -31,7 +31,7 @@ public function testAbstractSchemaNameSupportsClassnamesWithLeadingBackslash() { $parser = $this->createParser('\\' . CmsUser::class); - $this->assertEquals('\\' . CmsUser::class, $parser->AbstractSchemaName()); + self::assertEquals('\\' . CmsUser::class, $parser->AbstractSchemaName()); } /** @@ -42,7 +42,7 @@ public function testAbstractSchemaNameSupportsIdentifier() { $parser = $this->createParser(\stdClass::class); - $this->assertEquals(\stdClass::class, $parser->AbstractSchemaName()); + self::assertEquals(\stdClass::class, $parser->AbstractSchemaName()); } /** @@ -55,7 +55,7 @@ public function testAbstractSchemaNameSupportsNamespaceAlias() $parser->getEntityManager()->getConfiguration()->addEntityNamespace('CMS', 'Doctrine\Tests\Models\CMS'); - $this->assertEquals(CmsUser::class, $parser->AbstractSchemaName()); + self::assertEquals(CmsUser::class, $parser->AbstractSchemaName()); } /** @@ -68,7 +68,7 @@ public function testAbstractSchemaNameSupportsNamespaceAliasWithRelativeClassnam $parser->getEntityManager()->getConfiguration()->addEntityNamespace('Model', 'Doctrine\Tests\Models'); - $this->assertEquals(CmsUser::class, $parser->AbstractSchemaName()); + self::assertEquals(CmsUser::class, $parser->AbstractSchemaName()); } /** diff --git a/tests/Doctrine/Tests/ORM/Query/QueryExpressionVisitorTest.php b/tests/Doctrine/Tests/ORM/Query/QueryExpressionVisitorTest.php index 0e306ab06ea..c3524b358cb 100644 --- a/tests/Doctrine/Tests/ORM/Query/QueryExpressionVisitorTest.php +++ b/tests/Doctrine/Tests/ORM/Query/QueryExpressionVisitorTest.php @@ -40,9 +40,9 @@ protected function setUp() */ public function testWalkComparison(CriteriaComparison $criteriaExpr, $queryExpr, Parameter $parameter = null) { - $this->assertEquals($queryExpr, $this->visitor->walkComparison($criteriaExpr)); + self::assertEquals($queryExpr, $this->visitor->walkComparison($criteriaExpr)); if ($parameter) { - $this->assertEquals(new ArrayCollection([$parameter]), $this->visitor->getParameters()); + self::assertEquals(new ArrayCollection([$parameter]), $this->visitor->getParameters()); } } @@ -90,8 +90,8 @@ public function testWalkAndCompositeExpression() ) ); - $this->assertInstanceOf(QueryBuilder\Andx::class, $expr); - $this->assertCount(2, $expr->getParts()); + self::assertInstanceOf(QueryBuilder\Andx::class, $expr); + self::assertCount(2, $expr->getParts()); } public function testWalkOrCompositeExpression() @@ -104,13 +104,13 @@ public function testWalkOrCompositeExpression() ) ); - $this->assertInstanceOf(QueryBuilder\Orx::class, $expr); - $this->assertCount(2, $expr->getParts()); + self::assertInstanceOf(QueryBuilder\Orx::class, $expr); + self::assertCount(2, $expr->getParts()); } public function testWalkValue() { - $this->assertEquals('value', $this->visitor->walkValue(new Value('value'))); + self::assertEquals('value', $this->visitor->walkValue(new Value('value'))); } public function testClearParameters() @@ -119,6 +119,6 @@ public function testClearParameters() $this->visitor->clearParameters(); - $this->assertCount(0, $this->visitor->getParameters()); + self::assertCount(0, $this->visitor->getParameters()); } } diff --git a/tests/Doctrine/Tests/ORM/Query/QueryTest.php b/tests/Doctrine/Tests/ORM/Query/QueryTest.php index 5a2a295fe79..19dd5b5cd5f 100644 --- a/tests/Doctrine/Tests/ORM/Query/QueryTest.php +++ b/tests/Doctrine/Tests/ORM/Query/QueryTest.php @@ -30,7 +30,7 @@ public function testGetParameters() $parameters = new ArrayCollection(); - $this->assertEquals($parameters, $query->getParameters()); + self::assertEquals($parameters, $query->getParameters()); } public function testGetParameters_HasSomeAlready() @@ -41,7 +41,7 @@ public function testGetParameters_HasSomeAlready() $parameters = new ArrayCollection(); $parameters->add(new Parameter(2, 84)); - $this->assertEquals($parameters, $query->getParameters()); + self::assertEquals($parameters, $query->getParameters()); } public function testSetParameters() @@ -54,7 +54,7 @@ public function testSetParameters() $query->setParameters($parameters); - $this->assertEquals($parameters, $query->getParameters()); + self::assertEquals($parameters, $query->getParameters()); } public function testFree() @@ -64,7 +64,7 @@ public function testFree() $query->free(); - $this->assertEquals(0, count($query->getParameters())); + self::assertEquals(0, count($query->getParameters())); } public function testClone() @@ -77,9 +77,9 @@ public function testClone() $cloned = clone $query; - $this->assertEquals($dql, $cloned->getDQL()); - $this->assertEquals(0, count($cloned->getParameters())); - $this->assertFalse($cloned->getHint('foo')); + self::assertEquals($dql, $cloned->getDQL()); + self::assertEquals(0, count($cloned->getParameters())); + self::assertFalse($cloned->getHint('foo')); } public function testFluentQueryInterface() @@ -99,7 +99,7 @@ public function testFluentQueryInterface() ->setFirstResult(10) ->setMaxResults(10); - $this->assertSame($q2, $q); + self::assertSame($q2, $q); } /** @@ -110,11 +110,11 @@ public function testHints() $q = $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a"); $q->setHint('foo', 'bar')->setHint('bar', 'baz'); - $this->assertEquals('bar', $q->getHint('foo')); - $this->assertEquals('baz', $q->getHint('bar')); - $this->assertEquals(['foo' => 'bar', 'bar' => 'baz'], $q->getHints()); - $this->assertTrue($q->hasHint('foo')); - $this->assertFalse($q->hasHint('barFooBaz')); + self::assertEquals('bar', $q->getHint('foo')); + self::assertEquals('baz', $q->getHint('bar')); + self::assertEquals(['foo' => 'bar', 'bar' => 'baz'], $q->getHints()); + self::assertTrue($q->hasHint('foo')); + self::assertFalse($q->hasHint('barFooBaz')); } /** @@ -125,7 +125,7 @@ public function testQueryDefaultResultCache() $this->_em->getConfiguration()->setResultCacheImpl(new ArrayCache()); $q = $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a"); $q->useResultCache(true); - $this->assertSame($this->_em->getConfiguration()->getResultCacheImpl(), $q->getQueryCacheProfile()->getResultCacheDriver()); + self::assertSame($this->_em->getConfiguration()->getResultCacheImpl(), $q->getQueryCacheProfile()->getResultCacheDriver()); } /** @@ -171,8 +171,8 @@ public function testCollectionParameters() $parameters = $query->getParameters(); $parameter = $parameters->first(); - $this->assertEquals('cities', $parameter->getName()); - $this->assertEquals($cities, $parameter->getValue()); + self::assertEquals('cities', $parameter->getName()); + self::assertEquals($cities, $parameter->getValue()); } /** @@ -181,7 +181,7 @@ public function testCollectionParameters() public function testProcessParameterValueClassMetadata() { $query = $this->_em->createQuery("SELECT a FROM Doctrine\Tests\Models\CMS\CmsAddress a WHERE a.city IN (:cities)"); - $this->assertEquals( + self::assertEquals( CmsAddress::class, $query->processParameterValue($this->_em->getClassMetadata(CmsAddress::class)) ); @@ -198,11 +198,11 @@ public function testDefaultQueryHints() $config->setDefaultQueryHints($defaultHints); $query = $this->_em->createQuery(); - $this->assertSame($config->getDefaultQueryHints(), $query->getHints()); + self::assertSame($config->getDefaultQueryHints(), $query->getHints()); $this->_em->getConfiguration()->setDefaultQueryHint('hint_name_1', 'hint_another_value_1'); - $this->assertNotSame($config->getDefaultQueryHints(), $query->getHints()); + self::assertNotSame($config->getDefaultQueryHints(), $query->getHints()); $q2 = clone $query; - $this->assertSame($config->getDefaultQueryHints(), $q2->getHints()); + self::assertSame($config->getDefaultQueryHints(), $q2->getHints()); } /** @@ -226,7 +226,7 @@ public function testResultCacheCaching() //let it cache ->getResult(); - $this->assertCount(1, $res); + self::assertCount(1, $res); $driverConnectionMock->setStatementMock(null); @@ -234,7 +234,7 @@ public function testResultCacheCaching() ->useQueryCache(true) ->useResultCache(false) ->getResult(); - $this->assertCount(0, $res); + self::assertCount(0, $res); } /** @@ -244,7 +244,7 @@ public function testSetHydrationCacheProfileNull() { $query = $this->_em->createQuery(); $query->setHydrationCacheProfile(null); - $this->assertNull($query->getHydrationCacheProfile()); + self::assertNull($query->getHydrationCacheProfile()); } /** diff --git a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php index 55ea226ae59..1acae9dca27 100644 --- a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php @@ -106,7 +106,7 @@ public function assertInvalidSqlGeneration($dqlToBeTested, $expectedException, a */ public function testJoinWithRangeVariablePutsConditionIntoSqlWhereClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT c.id FROM Doctrine\Tests\Models\Company\CompanyPerson c JOIN Doctrine\Tests\Models\Company\CompanyPerson r WHERE c.spouse = r AND r.id = 42', 'SELECT c0_.id AS id_0 FROM company_persons c0_ INNER JOIN company_persons c1_ WHERE c0_.spouse_id = c1_.id AND c1_.id = 42', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] @@ -123,7 +123,7 @@ public function testJoinWithRangeVariableAndInheritancePutsConditionIntoSqlWhere * The important thing is that the ON clauses in LEFT JOINs only contain the conditions necessary to join the appropriate inheritance table * whereas the filtering condition must remain in the SQL WHERE clause. */ - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT c.id FROM Doctrine\Tests\Models\Company\CompanyPerson c JOIN Doctrine\Tests\Models\Company\CompanyPerson r WHERE c.spouse = r AND r.id = 42', 'SELECT c0_.id AS id_0 FROM company_persons c0_ LEFT JOIN company_managers c1_ ON c0_.id = c1_.id LEFT JOIN company_employees c2_ ON c0_.id = c2_.id INNER JOIN company_persons c3_ LEFT JOIN company_managers c4_ ON c3_.id = c4_.id LEFT JOIN company_employees c5_ ON c3_.id = c5_.id WHERE c0_.spouse_id = c3_.id AND c3_.id = 42', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] @@ -132,7 +132,7 @@ public function testJoinWithRangeVariableAndInheritancePutsConditionIntoSqlWhere public function testSupportsSelectForAllFields() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_' ); @@ -140,7 +140,7 @@ public function testSupportsSelectForAllFields() public function testSupportsSelectForOneField() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u', 'SELECT c0_.id AS id_0 FROM cms_users c0_' ); @@ -148,7 +148,7 @@ public function testSupportsSelectForOneField() public function testSupportsSelectForOneNestedField() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsArticle a JOIN a.user u', 'SELECT c0_.id AS id_0 FROM cms_articles c1_ INNER JOIN cms_users c0_ ON c1_.user_id = c0_.id' ); @@ -156,7 +156,7 @@ public function testSupportsSelectForOneNestedField() public function testSupportsSelectForAllNestedField() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT a FROM Doctrine\Tests\Models\CMS\CmsArticle a JOIN a.user u ORDER BY u.name ASC', 'SELECT c0_.id AS id_0, c0_.topic AS topic_1, c0_.text AS text_2, c0_.version AS version_3 FROM cms_articles c0_ INNER JOIN cms_users c1_ ON c0_.user_id = c1_.id ORDER BY c1_.name ASC' ); @@ -164,7 +164,7 @@ public function testSupportsSelectForAllNestedField() public function testNotExistsExpression() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE NOT EXISTS (SELECT p.phonenumber FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.phonenumber = 1234)', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE NOT EXISTS (SELECT c1_.phonenumber FROM cms_phonenumbers c1_ WHERE c1_.phonenumber = 1234)' ); @@ -172,7 +172,7 @@ public function testNotExistsExpression() public function testSupportsSelectForMultipleColumnsOfASingleComponent() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u.username, u.name FROM Doctrine\Tests\Models\CMS\CmsUser u', 'SELECT c0_.username AS username_0, c0_.name AS name_1 FROM cms_users c0_' ); @@ -180,7 +180,7 @@ public function testSupportsSelectForMultipleColumnsOfASingleComponent() public function testSupportsSelectUsingMultipleFromComponents() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u, Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE u = p.user', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c1_.phonenumber AS phonenumber_4 FROM cms_users c0_, cms_phonenumbers c1_ WHERE c0_.id = c1_.user_id' ); @@ -188,7 +188,7 @@ public function testSupportsSelectUsingMultipleFromComponents() public function testSupportsJoinOnMultipleComponents() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN Doctrine\Tests\Models\CMS\CmsPhonenumber p WITH u = p.user', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c1_.phonenumber AS phonenumber_4 FROM cms_users c0_ INNER JOIN cms_phonenumbers c1_ ON (c0_.id = c1_.user_id)' ); @@ -196,12 +196,12 @@ public function testSupportsJoinOnMultipleComponents() public function testSupportsJoinOnMultipleComponentsWithJoinedInheritanceType() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\Company\CompanyEmployee e JOIN Doctrine\Tests\Models\Company\CompanyManager m WITH e.id = m.id', 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, c0_.discr AS discr_5 FROM company_employees c1_ INNER JOIN company_persons c0_ ON c1_.id = c0_.id INNER JOIN company_managers c2_ INNER JOIN company_employees c4_ ON c2_.id = c4_.id INNER JOIN company_persons c3_ ON c2_.id = c3_.id AND (c0_.id = c3_.id)' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\Company\CompanyEmployee e LEFT JOIN Doctrine\Tests\Models\Company\CompanyManager m WITH e.id = m.id', 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, c0_.discr AS discr_5 FROM company_employees c1_ INNER JOIN company_persons c0_ ON c1_.id = c0_.id LEFT JOIN company_managers c2_ INNER JOIN company_employees c4_ ON c2_.id = c4_.id INNER JOIN company_persons c3_ ON c2_.id = c3_.id ON (c0_.id = c3_.id)' ); @@ -209,7 +209,7 @@ public function testSupportsJoinOnMultipleComponentsWithJoinedInheritanceType() public function testSupportsSelectWithCollectionAssociationJoin() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.phonenumbers p', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c1_.phonenumber AS phonenumber_4 FROM cms_users c0_ INNER JOIN cms_phonenumbers c1_ ON c0_.id = c1_.user_id' ); @@ -217,7 +217,7 @@ public function testSupportsSelectWithCollectionAssociationJoin() public function testSupportsSelectWithSingleValuedAssociationJoin() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u, a FROM Doctrine\Tests\Models\Forum\ForumUser u JOIN u.avatar a', 'SELECT f0_.id AS id_0, f0_.username AS username_1, f1_.id AS id_2 FROM forum_users f0_ INNER JOIN forum_avatars f1_ ON f0_.avatar_id = f1_.id' ); @@ -225,7 +225,7 @@ public function testSupportsSelectWithSingleValuedAssociationJoin() public function testSelectCorrelatedSubqueryComplexMathematicalExpression() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT (SELECT (count(p.phonenumber)+5)*10 FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p JOIN p.user ui WHERE ui.id = u.id) AS c FROM Doctrine\Tests\Models\CMS\CmsUser u', 'SELECT (SELECT (count(c0_.phonenumber) + 5) * 10 AS sclr_1 FROM cms_phonenumbers c0_ INNER JOIN cms_users c1_ ON c0_.user_id = c1_.id WHERE c1_.id = c2_.id) AS sclr_0 FROM cms_users c2_' ); @@ -233,7 +233,7 @@ public function testSelectCorrelatedSubqueryComplexMathematicalExpression() public function testSelectComplexMathematicalExpression() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT (count(p.phonenumber)+5)*10 FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p JOIN p.user ui WHERE ui.id = ?1', 'SELECT (count(c0_.phonenumber) + 5) * 10 AS sclr_0 FROM cms_phonenumbers c0_ INNER JOIN cms_users c1_ ON c0_.user_id = c1_.id WHERE c1_.id = ?' ); @@ -244,7 +244,7 @@ public function testSelectComplexMathematicalExpression() public function testSingleAssociationPathExpressionInSubselect() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT (SELECT p.user FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.user = u) user_id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1', 'SELECT (SELECT c0_.user_id FROM cms_phonenumbers c0_ WHERE c0_.user_id = c1_.id) AS sclr_0 FROM cms_users c1_ WHERE c1_.id = ?' ); @@ -255,7 +255,7 @@ public function testSingleAssociationPathExpressionInSubselect() */ public function testConstantValueInSelect() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.name, 'foo' AS bar FROM Doctrine\Tests\Models\CMS\CmsUser u", "SELECT c0_.name AS name_0, 'foo' AS sclr_1 FROM cms_users c0_" ); @@ -263,7 +263,7 @@ public function testConstantValueInSelect() public function testSupportsOrderByWithAscAsDefault() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Forum\ForumUser u ORDER BY u.id', 'SELECT f0_.id AS id_0, f0_.username AS username_1 FROM forum_users f0_ ORDER BY f0_.id ASC' ); @@ -271,14 +271,14 @@ public function testSupportsOrderByWithAscAsDefault() public function testSupportsOrderByAsc() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Forum\ForumUser u ORDER BY u.id asc', 'SELECT f0_.id AS id_0, f0_.username AS username_1 FROM forum_users f0_ ORDER BY f0_.id ASC' ); } public function testSupportsOrderByDesc() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Forum\ForumUser u ORDER BY u.id desc', 'SELECT f0_.id AS id_0, f0_.username AS username_1 FROM forum_users f0_ ORDER BY f0_.id DESC' ); @@ -286,7 +286,7 @@ public function testSupportsOrderByDesc() public function testSupportsSelectDistinct() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT DISTINCT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u', 'SELECT DISTINCT c0_.name AS name_0 FROM cms_users c0_' ); @@ -294,7 +294,7 @@ public function testSupportsSelectDistinct() public function testSupportsAggregateFunctionInSelectedFields() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT COUNT(u.id) FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY u.id', 'SELECT COUNT(c0_.id) AS sclr_0 FROM cms_users c0_ GROUP BY c0_.id' ); @@ -302,7 +302,7 @@ public function testSupportsAggregateFunctionInSelectedFields() public function testSupportsAggregateFunctionWithSimpleArithmetic() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT MAX(u.id + 4) * 2 FROM Doctrine\Tests\Models\CMS\CmsUser u', 'SELECT MAX(c0_.id + 4) * 2 AS sclr_0 FROM cms_users c0_' ); @@ -318,7 +318,7 @@ public function testSupportsAggregateCountFunctionWithSimpleArithmetic() $connMock->setDatabasePlatform(new MySqlPlatform()); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT COUNT(CONCAT(u.id, u.name)) FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY u.id', 'SELECT COUNT(CONCAT(c0_.id, c0_.name)) AS sclr_0 FROM cms_users c0_ GROUP BY c0_.id' ); @@ -328,7 +328,7 @@ public function testSupportsAggregateCountFunctionWithSimpleArithmetic() public function testSupportsWhereClauseWithPositionalParameter() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'select u from Doctrine\Tests\Models\Forum\ForumUser u where u.id = ?1', 'SELECT f0_.id AS id_0, f0_.username AS username_1 FROM forum_users f0_ WHERE f0_.id = ?' ); @@ -336,7 +336,7 @@ public function testSupportsWhereClauseWithPositionalParameter() public function testSupportsWhereClauseWithNamedParameter() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'select u from Doctrine\Tests\Models\Forum\ForumUser u where u.username = :name', 'SELECT f0_.id AS id_0, f0_.username AS username_1 FROM forum_users f0_ WHERE f0_.username = ?' ); @@ -344,7 +344,7 @@ public function testSupportsWhereClauseWithNamedParameter() public function testSupportsWhereAndClauseWithNamedParameters() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'select u from Doctrine\Tests\Models\Forum\ForumUser u where u.username = :name and u.username = :name2', 'SELECT f0_.id AS id_0, f0_.username AS username_1 FROM forum_users f0_ WHERE f0_.username = ? AND f0_.username = ?' ); @@ -352,7 +352,7 @@ public function testSupportsWhereAndClauseWithNamedParameters() public function testSupportsCombinedWhereClauseWithNamedParameter() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'select u from Doctrine\Tests\Models\Forum\ForumUser u where (u.username = :name OR u.username = :name2) AND u.id = :id', 'SELECT f0_.id AS id_0, f0_.username AS username_1 FROM forum_users f0_ WHERE (f0_.username = ? OR f0_.username = ?) AND f0_.id = ?' ); @@ -360,7 +360,7 @@ public function testSupportsCombinedWhereClauseWithNamedParameter() public function testSupportsAggregateFunctionInASelectDistinct() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT COUNT(DISTINCT u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u', 'SELECT COUNT(DISTINCT c0_.name) AS sclr_0 FROM cms_users c0_' ); @@ -369,7 +369,7 @@ public function testSupportsAggregateFunctionInASelectDistinct() // Ticket #668 public function testSupportsASqlKeywordInAStringLiteralParam() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name LIKE '%foo OR bar%'", "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE c0_.name LIKE '%foo OR bar%'" ); @@ -377,7 +377,7 @@ public function testSupportsASqlKeywordInAStringLiteralParam() public function testSupportsArithmeticExpressionsInWherePart() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE ((u.id + 5000) * u.id + 3) < 10000000', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE ((c0_.id + 5000) * c0_.id + 3) < 10000000' ); @@ -385,7 +385,7 @@ public function testSupportsArithmeticExpressionsInWherePart() public function testSupportsMultipleEntitiesInFromClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u, Doctrine\Tests\Models\CMS\CmsArticle a JOIN a.user u2 WHERE u.id = u2.id', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c1_.id AS id_4, c1_.topic AS topic_5, c1_.text AS text_6, c1_.version AS version_7 FROM cms_users c0_, cms_articles c1_ INNER JOIN cms_users c2_ ON c1_.user_id = c2_.id WHERE c0_.id = c2_.id' ); @@ -393,7 +393,7 @@ public function testSupportsMultipleEntitiesInFromClause() public function testSupportsMultipleEntitiesInFromClauseUsingPathExpression() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u, Doctrine\Tests\Models\CMS\CmsArticle a WHERE u.id = a.user', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c1_.id AS id_4, c1_.topic AS topic_5, c1_.text AS text_6, c1_.version AS version_7 FROM cms_users c0_, cms_articles c1_ WHERE c0_.id = c1_.user_id' ); @@ -401,11 +401,11 @@ public function testSupportsMultipleEntitiesInFromClauseUsingPathExpression() public function testSupportsPlainJoinWithoutClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u.id, a.id from Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a', 'SELECT c0_.id AS id_0, c1_.id AS id_1 FROM cms_users c0_ LEFT JOIN cms_articles c1_ ON c0_.id = c1_.user_id' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u.id, a.id from Doctrine\Tests\Models\CMS\CmsUser u JOIN u.articles a', 'SELECT c0_.id AS id_0, c1_.id AS id_1 FROM cms_users c0_ INNER JOIN cms_articles c1_ ON c0_.id = c1_.user_id' ); @@ -416,11 +416,11 @@ public function testSupportsPlainJoinWithoutClause() */ public function testSupportsJoinAndWithClauseRestriction() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a WITH a.topic LIKE '%foo%'", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ LEFT JOIN cms_articles c1_ ON c0_.id = c1_.user_id AND (c1_.topic LIKE '%foo%')" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.articles a WITH a.topic LIKE '%foo%'", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ INNER JOIN cms_articles c1_ ON c0_.id = c1_.user_id AND (c1_.topic LIKE '%foo%')" ); @@ -441,7 +441,7 @@ public function testJoinOnClause_NotYetSupported_ThrowsException() public function testSupportsMultipleJoins() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u.id, a.id, p.phonenumber, c.id from Doctrine\Tests\Models\CMS\CmsUser u JOIN u.articles a JOIN u.phonenumbers p JOIN a.comments c', 'SELECT c0_.id AS id_0, c1_.id AS id_1, c2_.phonenumber AS phonenumber_2, c3_.id AS id_3 FROM cms_users c0_ INNER JOIN cms_articles c1_ ON c0_.id = c1_.user_id INNER JOIN cms_phonenumbers c2_ ON c0_.id = c2_.user_id INNER JOIN cms_comments c3_ ON c1_.id = c3_.article_id' ); @@ -449,7 +449,7 @@ public function testSupportsMultipleJoins() public function testSupportsTrimFunction() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE TRIM(TRAILING ' ' FROM u.name) = 'someone'", "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE TRIM(TRAILING ' ' FROM c0_.name) = 'someone'" ); @@ -460,7 +460,7 @@ public function testSupportsTrimFunction() */ public function testSupportsTrimLeadingZeroString() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE TRIM(TRAILING '0' FROM u.name) != ''", "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE TRIM(TRAILING '0' FROM c0_.name) <> ''" ); @@ -469,7 +469,7 @@ public function testSupportsTrimLeadingZeroString() // Ticket 894 public function testSupportsBetweenClauseWithPositionalParameters() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id BETWEEN ?1 AND ?2", "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE c0_.id BETWEEN ? AND ?" ); @@ -480,7 +480,7 @@ public function testSupportsBetweenClauseWithPositionalParameters() */ public function testSupportsNotBetweenForSizeFunction() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT m.name FROM Doctrine\Tests\Models\StockExchange\Market m WHERE SIZE(m.stocks) NOT BETWEEN ?1 AND ?2", "SELECT e0_.name AS name_0 FROM exchange_markets e0_ WHERE (SELECT COUNT(*) FROM exchange_stocks e1_ WHERE e1_.market_id = e0_.id) NOT BETWEEN ? AND ?" ); @@ -488,7 +488,7 @@ public function testSupportsNotBetweenForSizeFunction() public function testSupportsFunctionalExpressionsInWherePart() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE TRIM(u.name) = 'someone'", // String quoting in the SQL usually depends on the database platform. // This test works with a mock connection which uses ' for string quoting. @@ -498,7 +498,7 @@ public function testSupportsFunctionalExpressionsInWherePart() public function testSupportsInstanceOfExpressionsInWherePart() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF Doctrine\Tests\Models\Company\CompanyEmployee", "SELECT c0_.id AS id_0, c0_.name AS name_1, c0_.discr AS discr_2 FROM company_persons c0_ WHERE c0_.discr IN ('employee')" ); @@ -507,7 +507,7 @@ public function testSupportsInstanceOfExpressionsInWherePart() public function testSupportsInstanceOfExpressionInWherePartWithMultipleValues() { // This also uses FQCNs starting with or without a backslash in the INSTANCE OF parameter - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF (Doctrine\Tests\Models\Company\CompanyEmployee, \Doctrine\Tests\Models\Company\CompanyManager)", "SELECT c0_.id AS id_0, c0_.name AS name_1, c0_.discr AS discr_2 FROM company_persons c0_ WHERE c0_.discr IN ('employee', 'manager')" ); @@ -518,7 +518,7 @@ public function testSupportsInstanceOfExpressionInWherePartWithMultipleValues() */ public function testSupportsInstanceOfExpressionsInWherePartPrefixedSlash() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF \Doctrine\Tests\Models\Company\CompanyEmployee", "SELECT c0_.id AS id_0, c0_.name AS name_1, c0_.discr AS discr_2 FROM company_persons c0_ WHERE c0_.discr IN ('employee')" ); @@ -529,7 +529,7 @@ public function testSupportsInstanceOfExpressionsInWherePartPrefixedSlash() */ public function testSupportsInstanceOfExpressionsInWherePartWithUnrelatedClass() { - $this->assertInvalidSqlGeneration( + self::assertInvalidSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF \Doctrine\Tests\Models\CMS\CmsUser", QueryException::class ); @@ -537,7 +537,7 @@ public function testSupportsInstanceOfExpressionsInWherePartWithUnrelatedClass() public function testSupportsInstanceOfExpressionsInWherePartInDeeperLevel() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\Company\CompanyEmployee u WHERE u INSTANCE OF Doctrine\Tests\Models\Company\CompanyManager", "SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, c0_.discr AS discr_5 FROM company_employees c1_ INNER JOIN company_persons c0_ ON c1_.id = c0_.id WHERE c0_.discr IN ('manager')" ); @@ -545,7 +545,7 @@ public function testSupportsInstanceOfExpressionsInWherePartInDeeperLevel() public function testSupportsInstanceOfExpressionsInWherePartInDeepestLevel() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\Company\CompanyManager u WHERE u INSTANCE OF Doctrine\Tests\Models\Company\CompanyManager", "SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, c2_.title AS title_5, c0_.discr AS discr_6 FROM company_managers c2_ INNER JOIN company_employees c1_ ON c2_.id = c1_.id INNER JOIN company_persons c0_ ON c2_.id = c0_.id WHERE c0_.discr IN ('manager')" ); @@ -553,7 +553,7 @@ public function testSupportsInstanceOfExpressionsInWherePartInDeepestLevel() public function testSupportsInstanceOfExpressionsUsingInputParameterInWherePart() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF ?1", "SELECT c0_.id AS id_0, c0_.name AS name_1, c0_.discr AS discr_2 FROM company_persons c0_ WHERE c0_.discr IN (?)", [], [1 => $this->_em->getClassMetadata(CompanyEmployee::class)] @@ -563,7 +563,7 @@ public function testSupportsInstanceOfExpressionsUsingInputParameterInWherePart( // Ticket #973 public function testSupportsSingleValuedInExpressionWithoutSpacesInWherePart() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE IDENTITY(u.email) IN(46)", "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE c0_.email_id IN (46)" ); @@ -571,7 +571,7 @@ public function testSupportsSingleValuedInExpressionWithoutSpacesInWherePart() public function testSupportsMultipleValuedInExpressionInWherePart() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id IN (1, 2)', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE c0_.id IN (1, 2)' ); @@ -579,7 +579,7 @@ public function testSupportsMultipleValuedInExpressionInWherePart() public function testSupportsNotInExpressionInWherePart() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE :id NOT IN (1)', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE ? NOT IN (1)' ); @@ -590,7 +590,7 @@ public function testSupportsNotInExpressionInWherePart() */ public function testSupportsNotInExpressionForModFunction() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE MOD(u.id, 5) NOT IN(1,3,4)", "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE MOD(c0_.id, 5) NOT IN (1, 3, 4)" ); @@ -598,7 +598,7 @@ public function testSupportsNotInExpressionForModFunction() public function testInExpressionWithSingleValuedAssociationPathExpressionInWherePart() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Forum\ForumUser u WHERE u.avatar IN (?1, ?2)', 'SELECT f0_.id AS id_0, f0_.username AS username_1 FROM forum_users f0_ WHERE f0_.avatar_id IN (?, ?)' ); @@ -607,7 +607,7 @@ public function testInExpressionWithSingleValuedAssociationPathExpressionInWhere public function testInvalidInExpressionWithSingleValuedAssociationPathExpressionOnInverseSide() { // We do not support SingleValuedAssociationPathExpression on inverse side - $this->assertInvalidSqlGeneration( + self::assertInvalidSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.address IN (?1, ?2)", QueryException::class ); @@ -623,7 +623,7 @@ public function testSupportsConcatFunctionForMysqlAndPostgresql() "SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, 's') = ?1", "SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE CONCAT(c0_.name, 's') = ?" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT CONCAT(u.id, u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1", "SELECT CONCAT(c0_.id, c0_.name) AS sclr_0 FROM cms_users c0_ WHERE c0_.id = ?" ); @@ -633,7 +633,7 @@ public function testSupportsConcatFunctionForMysqlAndPostgresql() "SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, 's') = ?1", "SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE c0_.name || 's' = ?" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT CONCAT(u.id, u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1", "SELECT c0_.id || c0_.name AS sclr_0 FROM cms_users c0_ WHERE c0_.id = ?" ); @@ -643,7 +643,7 @@ public function testSupportsConcatFunctionForMysqlAndPostgresql() public function testSupportsExistsExpressionInWherePartWithCorrelatedSubquery() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE EXISTS (SELECT p.phonenumber FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.phonenumber = u.id)', 'SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE EXISTS (SELECT c1_.phonenumber FROM cms_phonenumbers c1_ WHERE c1_.phonenumber = c0_.id)' ); @@ -654,7 +654,7 @@ public function testSupportsExistsExpressionInWherePartWithCorrelatedSubquery() */ public function testSubqueriesInComparisonExpression() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE (u.id >= (SELECT u2.id FROM Doctrine\Tests\Models\CMS\CmsUser u2 WHERE u2.name = :name)) AND (u.id <= (SELECT u3.id FROM Doctrine\Tests\Models\CMS\CmsUser u3 WHERE u3.name = :name))', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE (c0_.id >= (SELECT c1_.id FROM cms_users c1_ WHERE c1_.name = ?)) AND (c0_.id <= (SELECT c2_.id FROM cms_users c2_ WHERE c2_.name = ?))' ); @@ -670,7 +670,7 @@ public function testSupportsMemberOfExpressionOneToMany() $phone->phonenumber = 101; $q->setParameter('param', $phone); - $this->assertEquals( + self::assertEquals( 'SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE EXISTS (SELECT 1 FROM cms_phonenumbers c1_ WHERE c0_.id = c1_.user_id AND c1_.phonenumber = ?)', $q->getSql() ); @@ -686,7 +686,7 @@ public function testSupportsMemberOfExpressionManyToMany() $group->id = 101; $q->setParameter('param', $group); - $this->assertEquals( + self::assertEquals( 'SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE EXISTS (SELECT 1 FROM cms_users_groups c1_ INNER JOIN cms_groups c2_ ON c1_.group_id = c2_.id WHERE c1_.user_id = c0_.id AND c2_.id IN (?))', $q->getSql() ); @@ -703,7 +703,7 @@ public function testSupportsMemberOfExpressionManyToManyParameterArray() $group2->id = 105; $q->setParameter('param', [$group, $group2]); - $this->assertEquals( + self::assertEquals( 'SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE EXISTS (SELECT 1 FROM cms_users_groups c1_ INNER JOIN cms_groups c2_ ON c1_.group_id = c2_.id WHERE c1_.user_id = c0_.id AND c2_.id IN (?))', $q->getSql() ); @@ -717,7 +717,7 @@ public function testSupportsMemberOfExpressionSelfReferencing() $person = new CompanyPerson(); $this->_em->getClassMetadata(get_class($person))->assignIdentifier($person, ['id' => 101]); $q->setParameter('param', $person); - $this->assertEquals( + self::assertEquals( 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.title AS title_2, c2_.salary AS salary_3, c2_.department AS department_4, c2_.startDate AS startDate_5, c0_.discr AS discr_6, c0_.spouse_id AS spouse_id_7, c1_.car_id AS car_id_8 FROM company_persons c0_ LEFT JOIN company_managers c1_ ON c0_.id = c1_.id LEFT JOIN company_employees c2_ ON c0_.id = c2_.id WHERE EXISTS (SELECT 1 FROM company_persons_friends c3_ INNER JOIN company_persons c4_ ON c3_.friend_id = c4_.id WHERE c3_.person_id = c0_.id AND c4_.id IN (?))', $q->getSql() ); @@ -728,7 +728,7 @@ public function testSupportsMemberOfWithSingleValuedAssociation() // Impossible example, but it illustrates the purpose $q = $this->_em->createQuery('SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.email MEMBER OF u.groups'); - $this->assertEquals( + self::assertEquals( 'SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE EXISTS (SELECT 1 FROM cms_users_groups c1_ INNER JOIN cms_groups c2_ ON c1_.group_id = c2_.id WHERE c1_.user_id = c0_.id AND c2_.id IN (c0_.email_id))', $q->getSql() ); @@ -739,7 +739,7 @@ public function testSupportsMemberOfWithIdentificationVariable() // Impossible example, but it illustrates the purpose $q = $this->_em->createQuery('SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u MEMBER OF u.groups'); - $this->assertEquals( + self::assertEquals( 'SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE EXISTS (SELECT 1 FROM cms_users_groups c1_ INNER JOIN cms_groups c2_ ON c1_.group_id = c2_.id WHERE c1_.user_id = c0_.id AND c2_.id IN (c0_.id))', $q->getSql() ); @@ -749,26 +749,26 @@ public function testSupportsCurrentDateFunction() { $q = $this->_em->createQuery('SELECT d.id FROM Doctrine\Tests\Models\Generic\DateTimeModel d WHERE d.datetime > current_date()'); $q->setHint(ORMQuery::HINT_FORCE_PARTIAL_LOAD, true); - $this->assertEquals('SELECT d0_.id AS id_0 FROM date_time_model d0_ WHERE d0_.col_datetime > CURRENT_DATE', $q->getSql()); + self::assertEquals('SELECT d0_.id AS id_0 FROM date_time_model d0_ WHERE d0_.col_datetime > CURRENT_DATE', $q->getSql()); } public function testSupportsCurrentTimeFunction() { $q = $this->_em->createQuery('SELECT d.id FROM Doctrine\Tests\Models\Generic\DateTimeModel d WHERE d.time > current_time()'); $q->setHint(ORMQuery::HINT_FORCE_PARTIAL_LOAD, true); - $this->assertEquals('SELECT d0_.id AS id_0 FROM date_time_model d0_ WHERE d0_.col_time > CURRENT_TIME', $q->getSql()); + self::assertEquals('SELECT d0_.id AS id_0 FROM date_time_model d0_ WHERE d0_.col_time > CURRENT_TIME', $q->getSql()); } public function testSupportsCurrentTimestampFunction() { $q = $this->_em->createQuery('SELECT d.id FROM Doctrine\Tests\Models\Generic\DateTimeModel d WHERE d.datetime > current_timestamp()'); $q->setHint(ORMQuery::HINT_FORCE_PARTIAL_LOAD, true); - $this->assertEquals('SELECT d0_.id AS id_0 FROM date_time_model d0_ WHERE d0_.col_datetime > CURRENT_TIMESTAMP', $q->getSql()); + self::assertEquals('SELECT d0_.id AS id_0 FROM date_time_model d0_ WHERE d0_.col_datetime > CURRENT_TIMESTAMP', $q->getSql()); } public function testExistsExpressionInWhereCorrelatedSubqueryAssocCondition() { - $this->assertSqlGeneration( + self::assertSqlGeneration( // DQL // The result of this query consists of all employees whose spouses are also employees. 'SELECT DISTINCT emp FROM Doctrine\Tests\Models\CMS\CmsEmployee emp @@ -786,7 +786,7 @@ public function testExistsExpressionInWhereCorrelatedSubqueryAssocCondition() public function testExistsExpressionWithSimpleSelectReturningScalar() { - $this->assertSqlGeneration( + self::assertSqlGeneration( // DQL // The result of this query consists of all employees whose spouses are also employees. 'SELECT DISTINCT emp FROM Doctrine\Tests\Models\CMS\CmsEmployee emp @@ -808,7 +808,7 @@ public function testLimitFromQueryClass() ->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u') ->setMaxResults(10); - $this->assertEquals('SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c0_.email_id AS email_id_4 FROM cms_users c0_ LIMIT 10', $q->getSql()); + self::assertEquals('SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c0_.email_id AS email_id_4 FROM cms_users c0_ LIMIT 10', $q->getSql()); } public function testLimitAndOffsetFromQueryClass() @@ -818,12 +818,12 @@ public function testLimitAndOffsetFromQueryClass() ->setMaxResults(10) ->setFirstResult(0); - $this->assertEquals('SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c0_.email_id AS email_id_4 FROM cms_users c0_ LIMIT 10 OFFSET 0', $q->getSql()); + self::assertEquals('SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c0_.email_id AS email_id_4 FROM cms_users c0_ LIMIT 10 OFFSET 0', $q->getSql()); } public function testSizeFunction() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE SIZE(u.phonenumbers) > 1", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE (SELECT COUNT(*) FROM cms_phonenumbers c1_ WHERE c1_.user_id = c0_.id) > 1" ); @@ -831,7 +831,7 @@ public function testSizeFunction() public function testSizeFunctionSupportsManyToMany() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE SIZE(u.groups) > 1", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE (SELECT COUNT(*) FROM cms_users_groups c1_ WHERE c1_.user_id = c0_.id) > 1" ); @@ -839,11 +839,11 @@ public function testSizeFunctionSupportsManyToMany() public function testEmptyCollectionComparisonExpression() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.phonenumbers IS EMPTY", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE (SELECT COUNT(*) FROM cms_phonenumbers c1_ WHERE c1_.user_id = c0_.id) = 0" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.phonenumbers IS NOT EMPTY", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE (SELECT COUNT(*) FROM cms_phonenumbers c1_ WHERE c1_.user_id = c0_.id) > 0" ); @@ -851,7 +851,7 @@ public function testEmptyCollectionComparisonExpression() public function testNestedExpressions() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "select u from Doctrine\Tests\Models\CMS\CmsUser u where u.id > 10 and u.id < 42 and ((u.id * 2) > 5)", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE c0_.id > 10 AND c0_.id < 42 AND ((c0_.id * 2) > 5)" ); @@ -859,7 +859,7 @@ public function testNestedExpressions() public function testNestedExpressions2() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "select u from Doctrine\Tests\Models\CMS\CmsUser u where (u.id > 10) and (u.id < 42 and ((u.id * 2) > 5)) or u.id <> 42", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE (c0_.id > 10) AND (c0_.id < 42 AND ((c0_.id * 2) > 5)) OR c0_.id <> 42" ); @@ -867,7 +867,7 @@ public function testNestedExpressions2() public function testNestedExpressions3() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "select u from Doctrine\Tests\Models\CMS\CmsUser u where (u.id > 10) and (u.id between 1 and 10 or u.id in (1, 2, 3, 4, 5))", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE (c0_.id > 10) AND (c0_.id BETWEEN 1 AND 10 OR c0_.id IN (1, 2, 3, 4, 5))" ); @@ -875,7 +875,7 @@ public function testNestedExpressions3() public function testOrderByCollectionAssociationSize() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "select u, size(u.articles) as numArticles from Doctrine\Tests\Models\CMS\CmsUser u order by numArticles", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, (SELECT COUNT(*) FROM cms_articles c1_ WHERE c1_.user_id = c0_.id) AS sclr_4 FROM cms_users c0_ ORDER BY sclr_4 ASC" ); @@ -883,7 +883,7 @@ public function testOrderByCollectionAssociationSize() public function testOrderBySupportsSingleValuedPathExpressionOwningSide() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "select a from Doctrine\Tests\Models\CMS\CmsArticle a order by a.user", "SELECT c0_.id AS id_0, c0_.topic AS topic_1, c0_.text AS text_2, c0_.version AS version_3 FROM cms_articles c0_ ORDER BY c0_.user_id ASC" ); @@ -903,12 +903,12 @@ public function testBooleanLiteralInWhereOnSqlite() $oldPlat = $this->_em->getConnection()->getDatabasePlatform(); $this->_em->getConnection()->setDatabasePlatform(new SqlitePlatform()); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT b FROM Doctrine\Tests\Models\Generic\BooleanModel b WHERE b.booleanField = true", "SELECT b0_.id AS id_0, b0_.booleanField AS booleanField_1 FROM boolean_model b0_ WHERE b0_.booleanField = 1" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT b FROM Doctrine\Tests\Models\Generic\BooleanModel b WHERE b.booleanField = false", "SELECT b0_.id AS id_0, b0_.booleanField AS booleanField_1 FROM boolean_model b0_ WHERE b0_.booleanField = 0" ); @@ -921,12 +921,12 @@ public function testBooleanLiteralInWhereOnPostgres() $oldPlat = $this->_em->getConnection()->getDatabasePlatform(); $this->_em->getConnection()->setDatabasePlatform(new PostgreSqlPlatform()); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT b FROM Doctrine\Tests\Models\Generic\BooleanModel b WHERE b.booleanField = true", "SELECT b0_.id AS id_0, b0_.booleanField AS booleanfield_1 FROM boolean_model b0_ WHERE b0_.booleanField = true" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT b FROM Doctrine\Tests\Models\Generic\BooleanModel b WHERE b.booleanField = false", "SELECT b0_.id AS id_0, b0_.booleanField AS booleanfield_1 FROM boolean_model b0_ WHERE b0_.booleanField = false" ); @@ -936,7 +936,7 @@ public function testBooleanLiteralInWhereOnPostgres() public function testSingleValuedAssociationFieldInWhere() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.user = ?1", "SELECT c0_.phonenumber AS phonenumber_0 FROM cms_phonenumbers c0_ WHERE c0_.user_id = ?" ); @@ -944,7 +944,7 @@ public function testSingleValuedAssociationFieldInWhere() public function testSingleValuedAssociationNullCheckOnOwningSide() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT a FROM Doctrine\Tests\Models\CMS\CmsAddress a WHERE a.user IS NULL", "SELECT c0_.id AS id_0, c0_.country AS country_1, c0_.zip AS zip_2, c0_.city AS city_3 FROM cms_addresses c0_ WHERE c0_.user_id IS NULL" ); @@ -955,7 +955,7 @@ public function testSingleValuedAssociationNullCheckOnOwningSide() // where the CmsUser is the inverse side is not supported. public function testSingleValuedAssociationNullCheckOnInverseSide() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.address a WHERE a.id IS NULL", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ LEFT JOIN cms_addresses c1_ ON c0_.id = c1_.user_id WHERE c1_.id IS NULL" ); @@ -967,29 +967,29 @@ public function testSingleValuedAssociationNullCheckOnInverseSide() */ public function testStringFunctionLikeExpression() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE LOWER(u.name) LIKE '%foo OR bar%'", "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE LOWER(c0_.name) LIKE '%foo OR bar%'" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE LOWER(u.name) LIKE :str", "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE LOWER(c0_.name) LIKE ?" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(UPPER(u.name), '_moo') LIKE :str", "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE UPPER(c0_.name) || '_moo' LIKE ?" ); // DDC-1572 - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE UPPER(u.name) LIKE UPPER(:str)", "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE UPPER(c0_.name) LIKE UPPER(?)" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE UPPER(LOWER(u.name)) LIKE UPPER(LOWER(:str))", "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE UPPER(LOWER(c0_.name)) LIKE UPPER(LOWER(?))" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a WITH a.topic LIKE u.name", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ LEFT JOIN cms_articles c1_ ON c0_.id = c1_.user_id AND (c1_.topic LIKE c0_.name)" ); @@ -1000,16 +1000,16 @@ public function testStringFunctionLikeExpression() */ public function testStringFunctionNotLikeExpression() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE LOWER(u.name) NOT LIKE '%foo OR bar%'", "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE LOWER(c0_.name) NOT LIKE '%foo OR bar%'" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE UPPER(LOWER(u.name)) NOT LIKE UPPER(LOWER(:str))", "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE UPPER(LOWER(c0_.name)) NOT LIKE UPPER(LOWER(?))" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a WITH a.topic NOT LIKE u.name", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ LEFT JOIN cms_articles c1_ ON c0_.id = c1_.user_id AND (c1_.topic NOT LIKE c0_.name)" ); @@ -1020,7 +1020,7 @@ public function testStringFunctionNotLikeExpression() */ public function testOrderedCollectionFetchJoined() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT r, l FROM Doctrine\Tests\Models\Routing\RoutingRoute r JOIN r.legs l", "SELECT r0_.id AS id_0, r1_.id AS id_1, r1_.departureDate AS departureDate_2, r1_.arrivalDate AS arrivalDate_3 FROM RoutingRoute r0_ INNER JOIN RoutingRouteLegs r2_ ON r0_.id = r2_.route_id INNER JOIN RoutingLeg r1_ ON r1_.id = r2_.leg_id ". "ORDER BY r1_.departureDate ASC" @@ -1029,7 +1029,7 @@ public function testOrderedCollectionFetchJoined() public function testSubselectInSelect() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.name, (SELECT COUNT(p.phonenumber) FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.phonenumber = 1234) pcount FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = 'jon'", "SELECT c0_.name AS name_0, (SELECT COUNT(c1_.phonenumber) AS sclr_2 FROM cms_phonenumbers c1_ WHERE c1_.phonenumber = 1234) AS sclr_1 FROM cms_users c0_ WHERE c0_.name = 'jon'" ); @@ -1045,7 +1045,7 @@ public function testPessimisticWriteLockQueryHint() $this->markTestSkipped('SqLite does not support Row locking at all.'); } - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = 'gblanco'", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 ". "FROM cms_users c0_ WHERE c0_.username = 'gblanco' FOR UPDATE", @@ -1061,7 +1061,7 @@ public function testPessimisticReadLockQueryHintPostgreSql() { $this->_em->getConnection()->setDatabasePlatform(new PostgreSqlPlatform()); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = 'gblanco'", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 ". "FROM cms_users c0_ WHERE c0_.username = 'gblanco' FOR SHARE", @@ -1075,7 +1075,7 @@ public function testPessimisticReadLockQueryHintPostgreSql() */ public function testLockModeNoneQueryHint() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = 'gblanco'", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 ". "FROM cms_users c0_ WHERE c0_.username = 'gblanco'", @@ -1088,7 +1088,7 @@ public function testLockModeNoneQueryHint() */ public function testSupportSelectWithMoreThan10InputParameters() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1 OR u.id = ?2 OR u.id = ?3 OR u.id = ?4 OR u.id = ?5 OR u.id = ?6 OR u.id = ?7 OR u.id = ?8 OR u.id = ?9 OR u.id = ?10 OR u.id = ?11", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE c0_.id = ? OR c0_.id = ? OR c0_.id = ? OR c0_.id = ? OR c0_.id = ? OR c0_.id = ? OR c0_.id = ? OR c0_.id = ? OR c0_.id = ? OR c0_.id = ? OR c0_.id = ?" ); @@ -1102,7 +1102,7 @@ public function testPessimisticReadLockQueryHintMySql() { $this->_em->getConnection()->setDatabasePlatform(new MySqlPlatform()); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = 'gblanco'", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 ". "FROM cms_users c0_ WHERE c0_.username = 'gblanco' LOCK IN SHARE MODE", @@ -1118,7 +1118,7 @@ public function testPessimisticReadLockQueryHintOracle() { $this->_em->getConnection()->setDatabasePlatform(new OraclePlatform()); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = 'gblanco'", "SELECT c0_.id AS ID_0, c0_.status AS STATUS_1, c0_.username AS USERNAME_2, c0_.name AS NAME_3 ". "FROM cms_users c0_ WHERE c0_.username = 'gblanco' FOR UPDATE", @@ -1134,7 +1134,7 @@ public function testSupportToCustomDQLFunctions() $config = $this->_em->getConfiguration(); $config->addCustomNumericFunction('MYABS', MyAbsFunction::class); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT MYABS(p.phonenumber) FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p', 'SELECT ABS(c0_.phonenumber) AS sclr_0 FROM cms_phonenumbers c0_' ); @@ -1147,7 +1147,7 @@ public function testSupportToCustomDQLFunctions() */ public function testMappedSuperclassAssociationJoin() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT f FROM Doctrine\Tests\Models\DirectoryTree\File f JOIN f.parentDirectory d WHERE f.id = ?1', 'SELECT f0_.id AS id_0, f0_.extension AS extension_1, f0_.name AS name_2 FROM "file" f0_ INNER JOIN Directory d1_ ON f0_.parentDirectory_id = d1_.id WHERE f0_.id = ?' ); @@ -1158,7 +1158,7 @@ public function testMappedSuperclassAssociationJoin() */ public function testGroupBy() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT g.id, count(u.id) FROM Doctrine\Tests\Models\CMS\CmsGroup g JOIN g.users u GROUP BY g.id', 'SELECT c0_.id AS id_0, count(c1_.id) AS sclr_1 FROM cms_groups c0_ INNER JOIN cms_users_groups c2_ ON c0_.id = c2_.group_id INNER JOIN cms_users c1_ ON c1_.id = c2_.user_id GROUP BY c0_.id' ); @@ -1169,7 +1169,7 @@ public function testGroupBy() */ public function testGroupByIdentificationVariable() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT g, count(u.id) FROM Doctrine\Tests\Models\CMS\CmsGroup g JOIN g.users u GROUP BY g', 'SELECT c0_.id AS id_0, c0_.name AS name_1, count(c1_.id) AS sclr_2 FROM cms_groups c0_ INNER JOIN cms_users_groups c2_ ON c0_.id = c2_.group_id INNER JOIN cms_users c1_ ON c1_.id = c2_.user_id GROUP BY c0_.id, c0_.name' ); @@ -1177,7 +1177,7 @@ public function testGroupByIdentificationVariable() public function testCaseContainingNullIf() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT NULLIF(g.id, g.name) AS NullIfEqual FROM Doctrine\Tests\Models\CMS\CmsGroup g", 'SELECT NULLIF(c0_.id, c0_.name) AS sclr_0 FROM cms_groups c0_' ); @@ -1185,7 +1185,7 @@ public function testCaseContainingNullIf() public function testCaseContainingCoalesce() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT COALESCE(NULLIF(u.name, ''), u.username) as Display FROM Doctrine\Tests\Models\CMS\CmsUser u", "SELECT COALESCE(NULLIF(c0_.name, ''), c0_.username) AS sclr_0 FROM cms_users c0_" ); @@ -1196,7 +1196,7 @@ public function testCaseContainingCoalesce() */ public function testSubSelectDiscriminator() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.name, (SELECT COUNT(cfc.id) total FROM Doctrine\Tests\Models\Company\CompanyFixContract cfc) as cfc_count FROM Doctrine\Tests\Models\CMS\CmsUser u", "SELECT c0_.name AS name_0, (SELECT COUNT(c1_.id) AS sclr_2 FROM company_contracts c1_ WHERE c1_.discr IN ('fix')) AS sclr_1 FROM cms_users c0_" ); @@ -1214,13 +1214,13 @@ public function testIdVariableResultVariableReuse() $exceptionThrown = true; } - $this->assertTrue($exceptionThrown); + self::assertTrue($exceptionThrown); } public function testSubSelectAliasesFromOuterQuery() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT uo, (SELECT ui.name FROM Doctrine\Tests\Models\CMS\CmsUser ui WHERE ui.id = uo.id) AS bar FROM Doctrine\Tests\Models\CMS\CmsUser uo", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, (SELECT c1_.name FROM cms_users c1_ WHERE c1_.id = c0_.id) AS sclr_4 FROM cms_users c0_" ); @@ -1228,7 +1228,7 @@ public function testSubSelectAliasesFromOuterQuery() public function testSubSelectAliasesFromOuterQueryWithSubquery() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT uo, (SELECT ui.name FROM Doctrine\Tests\Models\CMS\CmsUser ui WHERE ui.id = uo.id AND ui.name IN (SELECT uii.name FROM Doctrine\Tests\Models\CMS\CmsUser uii)) AS bar FROM Doctrine\Tests\Models\CMS\CmsUser uo", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, (SELECT c1_.name FROM cms_users c1_ WHERE c1_.id = c0_.id AND c1_.name IN (SELECT c2_.name FROM cms_users c2_)) AS sclr_4 FROM cms_users c0_" ); @@ -1236,7 +1236,7 @@ public function testSubSelectAliasesFromOuterQueryWithSubquery() public function testSubSelectAliasesFromOuterQueryReuseInWhereClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT uo, (SELECT ui.name FROM Doctrine\Tests\Models\CMS\CmsUser ui WHERE ui.id = uo.id) AS bar FROM Doctrine\Tests\Models\CMS\CmsUser uo WHERE bar = ?0", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, (SELECT c1_.name FROM cms_users c1_ WHERE c1_.id = c0_.id) AS sclr_4 FROM cms_users c0_ WHERE sclr_4 = ?" ); @@ -1247,7 +1247,7 @@ public function testSubSelectAliasesFromOuterQueryReuseInWhereClause() */ public function testSelectForeignKeyPKWithoutFields() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT t, s, l FROM Doctrine\Tests\Models\DDC117\DDC117Link l INNER JOIN l.target t INNER JOIN l.source s", "SELECT d0_.article_id AS article_id_0, d0_.title AS title_1, d1_.article_id AS article_id_2, d1_.title AS title_3, d2_.source_id AS source_id_4, d2_.target_id AS target_id_5 FROM DDC117Link d2_ INNER JOIN DDC117Article d0_ ON d2_.target_id = d0_.article_id INNER JOIN DDC117Article d1_ ON d2_.source_id = d1_.article_id" ); @@ -1255,7 +1255,7 @@ public function testSelectForeignKeyPKWithoutFields() public function testGeneralCaseWithSingleWhenClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT g.id, CASE WHEN ((g.id / 2) > 18) THEN 1 ELSE 0 END AS test FROM Doctrine\Tests\Models\CMS\CmsGroup g", "SELECT c0_.id AS id_0, CASE WHEN ((c0_.id / 2) > 18) THEN 1 ELSE 0 END AS sclr_1 FROM cms_groups c0_" ); @@ -1263,7 +1263,7 @@ public function testGeneralCaseWithSingleWhenClause() public function testGeneralCaseWithMultipleWhenClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT g.id, CASE WHEN (g.id / 2 < 10) THEN 2 WHEN ((g.id / 2) > 20) THEN 1 ELSE 0 END AS test FROM Doctrine\Tests\Models\CMS\CmsGroup g", "SELECT c0_.id AS id_0, CASE WHEN (c0_.id / 2 < 10) THEN 2 WHEN ((c0_.id / 2) > 20) THEN 1 ELSE 0 END AS sclr_1 FROM cms_groups c0_" ); @@ -1271,7 +1271,7 @@ public function testGeneralCaseWithMultipleWhenClause() public function testSimpleCaseWithSingleWhenClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id = CASE g.name WHEN 'admin' THEN 1 ELSE 2 END", "SELECT c0_.id AS id_0, c0_.name AS name_1 FROM cms_groups c0_ WHERE c0_.id = CASE c0_.name WHEN 'admin' THEN 1 ELSE 2 END" ); @@ -1279,7 +1279,7 @@ public function testSimpleCaseWithSingleWhenClause() public function testSimpleCaseWithMultipleWhenClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id = (CASE g.name WHEN 'admin' THEN 1 WHEN 'moderator' THEN 2 ELSE 3 END)", "SELECT c0_.id AS id_0, c0_.name AS name_1 FROM cms_groups c0_ WHERE c0_.id = (CASE c0_.name WHEN 'admin' THEN 1 WHEN 'moderator' THEN 2 ELSE 3 END)" ); @@ -1287,7 +1287,7 @@ public function testSimpleCaseWithMultipleWhenClause() public function testGeneralCaseWithSingleWhenClauseInSubselect() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id IN (SELECT CASE WHEN ((g2.id / 2) > 18) THEN 2 ELSE 1 END FROM Doctrine\Tests\Models\CMS\CmsGroup g2)", "SELECT c0_.id AS id_0, c0_.name AS name_1 FROM cms_groups c0_ WHERE c0_.id IN (SELECT CASE WHEN ((c1_.id / 2) > 18) THEN 2 ELSE 1 END AS sclr_2 FROM cms_groups c1_)" ); @@ -1295,7 +1295,7 @@ public function testGeneralCaseWithSingleWhenClauseInSubselect() public function testGeneralCaseWithMultipleWhenClauseInSubselect() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id IN (SELECT CASE WHEN (g.id / 2 < 10) THEN 3 WHEN ((g.id / 2) > 20) THEN 2 ELSE 1 END FROM Doctrine\Tests\Models\CMS\CmsGroup g2)", "SELECT c0_.id AS id_0, c0_.name AS name_1 FROM cms_groups c0_ WHERE c0_.id IN (SELECT CASE WHEN (c0_.id / 2 < 10) THEN 3 WHEN ((c0_.id / 2) > 20) THEN 2 ELSE 1 END AS sclr_2 FROM cms_groups c1_)" ); @@ -1303,7 +1303,7 @@ public function testGeneralCaseWithMultipleWhenClauseInSubselect() public function testSimpleCaseWithSingleWhenClauseInSubselect() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id IN (SELECT CASE g2.name WHEN 'admin' THEN 1 ELSE 2 END FROM Doctrine\Tests\Models\CMS\CmsGroup g2)", "SELECT c0_.id AS id_0, c0_.name AS name_1 FROM cms_groups c0_ WHERE c0_.id IN (SELECT CASE c1_.name WHEN 'admin' THEN 1 ELSE 2 END AS sclr_2 FROM cms_groups c1_)" ); @@ -1311,7 +1311,7 @@ public function testSimpleCaseWithSingleWhenClauseInSubselect() public function testSimpleCaseWithMultipleWhenClauseInSubselect() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id IN (SELECT CASE g2.name WHEN 'admin' THEN 1 WHEN 'moderator' THEN 2 ELSE 3 END FROM Doctrine\Tests\Models\CMS\CmsGroup g2)", "SELECT c0_.id AS id_0, c0_.name AS name_1 FROM cms_groups c0_ WHERE c0_.id IN (SELECT CASE c1_.name WHEN 'admin' THEN 1 WHEN 'moderator' THEN 2 ELSE 3 END AS sclr_2 FROM cms_groups c1_)" ); @@ -1322,7 +1322,7 @@ public function testSimpleCaseWithMultipleWhenClauseInSubselect() */ public function testSimpleCaseWithStringPrimary() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT g.id, CASE WHEN ((g.id / 2) > 18) THEN 'Foo' ELSE 'Bar' END AS test FROM Doctrine\Tests\Models\CMS\CmsGroup g", "SELECT c0_.id AS id_0, CASE WHEN ((c0_.id / 2) > 18) THEN 'Foo' ELSE 'Bar' END AS sclr_1 FROM cms_groups c0_" ); @@ -1333,27 +1333,27 @@ public function testSimpleCaseWithStringPrimary() */ public function testCaseNegativeValuesInThenExpression() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT CASE g.name WHEN 'admin' THEN - 1 ELSE - 2 END FROM Doctrine\Tests\Models\CMS\CmsGroup g", "SELECT CASE c0_.name WHEN 'admin' THEN -1 ELSE -2 END AS sclr_0 FROM cms_groups c0_" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT CASE g.name WHEN 'admin' THEN - 2 WHEN 'guest' THEN - 1 ELSE 0 END FROM Doctrine\Tests\Models\CMS\CmsGroup g", "SELECT CASE c0_.name WHEN 'admin' THEN -2 WHEN 'guest' THEN -1 ELSE 0 END AS sclr_0 FROM cms_groups c0_" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT CASE g.name WHEN 'admin' THEN (- 1) ELSE (- 2) END FROM Doctrine\Tests\Models\CMS\CmsGroup g", "SELECT CASE c0_.name WHEN 'admin' THEN (-1) ELSE (-2) END AS sclr_0 FROM cms_groups c0_" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT CASE g.name WHEN 'admin' THEN ( - :value) ELSE ( + :value) END FROM Doctrine\Tests\Models\CMS\CmsGroup g", "SELECT CASE c0_.name WHEN 'admin' THEN (-?) ELSE (+?) END AS sclr_0 FROM cms_groups c0_" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT CASE g.name WHEN 'admin' THEN ( - g.id) ELSE ( + g.id) END FROM Doctrine\Tests\Models\CMS\CmsGroup g", "SELECT CASE c0_.name WHEN 'admin' THEN (-c0_.id) ELSE (+c0_.id) END AS sclr_0 FROM cms_groups c0_" ); @@ -1361,22 +1361,22 @@ public function testCaseNegativeValuesInThenExpression() public function testIdentityFunctionWithCompositePrimaryKey() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT IDENTITY(p.poi, 'long') AS long FROM Doctrine\Tests\Models\Navigation\NavPhotos p", "SELECT n0_.poi_long AS sclr_0 FROM navigation_photos n0_" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT IDENTITY(p.poi, 'lat') AS lat FROM Doctrine\Tests\Models\Navigation\NavPhotos p", "SELECT n0_.poi_lat AS sclr_0 FROM navigation_photos n0_" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT IDENTITY(p.poi, 'long') AS long, IDENTITY(p.poi, 'lat') AS lat FROM Doctrine\Tests\Models\Navigation\NavPhotos p", "SELECT n0_.poi_long AS sclr_0, n0_.poi_lat AS sclr_1 FROM navigation_photos n0_" ); - $this->assertInvalidSqlGeneration( + self::assertInvalidSqlGeneration( "SELECT IDENTITY(p.poi, 'invalid') AS invalid FROM Doctrine\Tests\Models\Navigation\NavPhotos p", QueryException::class ); @@ -1387,12 +1387,12 @@ public function testIdentityFunctionWithCompositePrimaryKey() */ public function testPartialWithAssociationIdentifier() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT PARTIAL l.{_source, _target} FROM Doctrine\Tests\Models\Legacy\LegacyUserReference l", 'SELECT l0_.iUserIdSource AS iUserIdSource_0, l0_.iUserIdTarget AS iUserIdTarget_1 FROM legacy_users_reference l0_' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT PARTIAL l.{_description, _source, _target} FROM Doctrine\Tests\Models\Legacy\LegacyUserReference l", 'SELECT l0_.description AS description_0, l0_.iUserIdSource AS iUserIdSource_1, l0_.iUserIdTarget AS iUserIdTarget_2 FROM legacy_users_reference l0_' ); @@ -1403,7 +1403,7 @@ public function testPartialWithAssociationIdentifier() */ public function testIdentityFunctionInSelectClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT IDENTITY(u.email) as email_id FROM Doctrine\Tests\Models\CMS\CmsUser u", "SELECT c0_.email_id AS sclr_0 FROM cms_users c0_" ); @@ -1412,13 +1412,13 @@ public function testIdentityFunctionInSelectClause() public function testIdentityFunctionInJoinedSubclass() { //relation is in the subclass (CompanyManager) we are querying - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT m, IDENTITY(m.car) as car_id FROM Doctrine\Tests\Models\Company\CompanyManager m', 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, c2_.title AS title_5, c2_.car_id AS sclr_6, c0_.discr AS discr_7 FROM company_managers c2_ INNER JOIN company_employees c1_ ON c2_.id = c1_.id INNER JOIN company_persons c0_ ON c2_.id = c0_.id' ); //relation is in the base class (CompanyPerson). - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT m, IDENTITY(m.spouse) as spouse_id FROM Doctrine\Tests\Models\Company\CompanyManager m', 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, c2_.title AS title_5, c0_.spouse_id AS sclr_6, c0_.discr AS discr_7 FROM company_managers c2_ INNER JOIN company_employees c1_ ON c2_.id = c1_.id INNER JOIN company_persons c0_ ON c2_.id = c0_.id' ); @@ -1429,7 +1429,7 @@ public function testIdentityFunctionInJoinedSubclass() */ public function testIdentityFunctionDoesNotAcceptStateField() { - $this->assertInvalidSqlGeneration( + self::assertInvalidSqlGeneration( "SELECT IDENTITY(u.name) as name FROM Doctrine\Tests\Models\CMS\CmsUser u", QueryException::class ); @@ -1440,7 +1440,7 @@ public function testIdentityFunctionDoesNotAcceptStateField() */ public function testInheritanceTypeJoinInRootClassWithDisabledForcePartialLoad() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT p FROM Doctrine\Tests\Models\Company\CompanyPerson p', 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.title AS title_2, c2_.salary AS salary_3, c2_.department AS department_4, c2_.startDate AS startDate_5, c0_.discr AS discr_6, c0_.spouse_id AS spouse_id_7, c1_.car_id AS car_id_8 FROM company_persons c0_ LEFT JOIN company_managers c1_ ON c0_.id = c1_.id LEFT JOIN company_employees c2_ ON c0_.id = c2_.id', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] @@ -1452,7 +1452,7 @@ public function testInheritanceTypeJoinInRootClassWithDisabledForcePartialLoad() */ public function testInheritanceTypeJoinInRootClassWithEnabledForcePartialLoad() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT p FROM Doctrine\Tests\Models\Company\CompanyPerson p', 'SELECT c0_.id AS id_0, c0_.name AS name_1, c0_.discr AS discr_2 FROM company_persons c0_', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] @@ -1464,7 +1464,7 @@ public function testInheritanceTypeJoinInRootClassWithEnabledForcePartialLoad() */ public function testInheritanceTypeJoinInChildClassWithDisabledForcePartialLoad() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\Company\CompanyEmployee e', 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, c2_.title AS title_5, c0_.discr AS discr_6, c0_.spouse_id AS spouse_id_7, c2_.car_id AS car_id_8 FROM company_employees c1_ INNER JOIN company_persons c0_ ON c1_.id = c0_.id LEFT JOIN company_managers c2_ ON c1_.id = c2_.id', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] @@ -1476,7 +1476,7 @@ public function testInheritanceTypeJoinInChildClassWithDisabledForcePartialLoad( */ public function testInheritanceTypeJoinInChildClassWithEnabledForcePartialLoad() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\Company\CompanyEmployee e', 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, c0_.discr AS discr_5 FROM company_employees c1_ INNER JOIN company_persons c0_ ON c1_.id = c0_.id', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] @@ -1488,7 +1488,7 @@ public function testInheritanceTypeJoinInChildClassWithEnabledForcePartialLoad() */ public function testInheritanceTypeJoinInLeafClassWithDisabledForcePartialLoad() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT m FROM Doctrine\Tests\Models\Company\CompanyManager m', 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, c2_.title AS title_5, c0_.discr AS discr_6, c0_.spouse_id AS spouse_id_7, c2_.car_id AS car_id_8 FROM company_managers c2_ INNER JOIN company_employees c1_ ON c2_.id = c1_.id INNER JOIN company_persons c0_ ON c2_.id = c0_.id', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] @@ -1500,7 +1500,7 @@ public function testInheritanceTypeJoinInLeafClassWithDisabledForcePartialLoad() */ public function testInheritanceTypeJoinInLeafClassWithEnabledForcePartialLoad() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT m FROM Doctrine\Tests\Models\Company\CompanyManager m', 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, c2_.title AS title_5, c0_.discr AS discr_6 FROM company_managers c2_ INNER JOIN company_employees c1_ ON c2_.id = c1_.id INNER JOIN company_persons c0_ ON c2_.id = c0_.id', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] @@ -1512,7 +1512,7 @@ public function testInheritanceTypeJoinInLeafClassWithEnabledForcePartialLoad() */ public function testInheritanceTypeSingleTableInRootClassWithDisabledForcePartialLoad() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c', "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.fixPrice AS fixPrice_2, c0_.hoursWorked AS hoursWorked_3, c0_.pricePerHour AS pricePerHour_4, c0_.maxPrice AS maxPrice_5, c0_.discr AS discr_6, c0_.salesPerson_id AS salesPerson_id_7 FROM company_contracts c0_ WHERE c0_.discr IN ('fix', 'flexible', 'flexultra')", [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] @@ -1524,7 +1524,7 @@ public function testInheritanceTypeSingleTableInRootClassWithDisabledForcePartia */ public function testInheritanceTypeSingleTableInRootClassWithEnabledForcePartialLoad() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c', "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.fixPrice AS fixPrice_2, c0_.hoursWorked AS hoursWorked_3, c0_.pricePerHour AS pricePerHour_4, c0_.maxPrice AS maxPrice_5, c0_.discr AS discr_6 FROM company_contracts c0_ WHERE c0_.discr IN ('fix', 'flexible', 'flexultra')", [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] @@ -1536,7 +1536,7 @@ public function testInheritanceTypeSingleTableInRootClassWithEnabledForcePartial */ public function testInheritanceTypeSingleTableInChildClassWithDisabledForcePartialLoad() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT fc FROM Doctrine\Tests\Models\Company\CompanyFlexContract fc', "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.hoursWorked AS hoursWorked_2, c0_.pricePerHour AS pricePerHour_3, c0_.maxPrice AS maxPrice_4, c0_.discr AS discr_5, c0_.salesPerson_id AS salesPerson_id_6 FROM company_contracts c0_ WHERE c0_.discr IN ('flexible', 'flexultra')", [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] @@ -1548,7 +1548,7 @@ public function testInheritanceTypeSingleTableInChildClassWithDisabledForceParti */ public function testInheritanceTypeSingleTableInChildClassWithEnabledForcePartialLoad() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT fc FROM Doctrine\Tests\Models\Company\CompanyFlexContract fc', "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.hoursWorked AS hoursWorked_2, c0_.pricePerHour AS pricePerHour_3, c0_.maxPrice AS maxPrice_4, c0_.discr AS discr_5 FROM company_contracts c0_ WHERE c0_.discr IN ('flexible', 'flexultra')", [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] @@ -1560,7 +1560,7 @@ public function testInheritanceTypeSingleTableInChildClassWithEnabledForcePartia */ public function testInheritanceTypeSingleTableInLeafClassWithDisabledForcePartialLoad() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT fuc FROM Doctrine\Tests\Models\Company\CompanyFlexUltraContract fuc', "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.hoursWorked AS hoursWorked_2, c0_.pricePerHour AS pricePerHour_3, c0_.maxPrice AS maxPrice_4, c0_.discr AS discr_5, c0_.salesPerson_id AS salesPerson_id_6 FROM company_contracts c0_ WHERE c0_.discr IN ('flexultra')", [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] @@ -1572,7 +1572,7 @@ public function testInheritanceTypeSingleTableInLeafClassWithDisabledForcePartia */ public function testInheritanceTypeSingleTableInLeafClassWithEnabledForcePartialLoad() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT fuc FROM Doctrine\Tests\Models\Company\CompanyFlexUltraContract fuc', "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.hoursWorked AS hoursWorked_2, c0_.pricePerHour AS pricePerHour_3, c0_.maxPrice AS maxPrice_4, c0_.discr AS discr_5 FROM company_contracts c0_ WHERE c0_.discr IN ('flexultra')", [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] @@ -1584,7 +1584,7 @@ public function testInheritanceTypeSingleTableInLeafClassWithEnabledForcePartial */ public function testSelfReferenceWithOneToOneDoesNotDuplicateAlias() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT p, pp FROM Doctrine\Tests\Models\Company\CompanyPerson p JOIN p.spouse pp', "SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.title AS title_2, c2_.salary AS salary_3, c2_.department AS department_4, c2_.startDate AS startDate_5, c3_.id AS id_6, c3_.name AS name_7, c4_.title AS title_8, c5_.salary AS salary_9, c5_.department AS department_10, c5_.startDate AS startDate_11, c0_.discr AS discr_12, c0_.spouse_id AS spouse_id_13, c1_.car_id AS car_id_14, c3_.discr AS discr_15, c3_.spouse_id AS spouse_id_16, c4_.car_id AS car_id_17 FROM company_persons c0_ LEFT JOIN company_managers c1_ ON c0_.id = c1_.id LEFT JOIN company_employees c2_ ON c0_.id = c2_.id INNER JOIN company_persons c3_ ON c0_.spouse_id = c3_.id LEFT JOIN company_managers c4_ ON c3_.id = c4_.id LEFT JOIN company_employees c5_ ON c3_.id = c5_.id", [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] @@ -1596,7 +1596,7 @@ public function testSelfReferenceWithOneToOneDoesNotDuplicateAlias() */ public function testAliasDoesNotExceedPlatformDefinedLength() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT m FROM ' . __NAMESPACE__ . '\\DDC1384Model m', "SELECT d0_.aVeryLongIdentifierThatShouldBeShortenedByTheSQLWalker_fooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo AS ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo_0 FROM DDC1384Model d0_" ); @@ -1608,7 +1608,7 @@ public function testAliasDoesNotExceedPlatformDefinedLength() */ public function testIssue331() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT e.name FROM Doctrine\Tests\Models\Company\CompanyEmployee e', 'SELECT c0_.name AS name_0 FROM company_employees c1_ INNER JOIN company_persons c0_ ON c1_.id = c0_.id' ); @@ -1618,7 +1618,7 @@ public function testIssue331() */ public function testForeignKeyAsPrimaryKeySubselect() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT s FROM Doctrine\Tests\Models\DDC117\DDC117Article s WHERE EXISTS (SELECT r FROM Doctrine\Tests\Models\DDC117\DDC117Reference r WHERE r.source = s)", "SELECT d0_.article_id AS article_id_0, d0_.title AS title_1 FROM DDC117Article d0_ WHERE EXISTS (SELECT d1_.source_id, d1_.target_id FROM DDC117Reference d1_ WHERE d1_.source_id = d0_.article_id)" ); @@ -1629,12 +1629,12 @@ public function testForeignKeyAsPrimaryKeySubselect() */ public function testSelectWithArithmeticExpressionBeforeField() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT - e.value AS value, e.id FROM ' . __NAMESPACE__ . '\DDC1474Entity e', 'SELECT -d0_.value AS sclr_0, d0_.id AS id_1 FROM DDC1474Entity d0_' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT e.id, + e.value AS value FROM ' . __NAMESPACE__ . '\DDC1474Entity e', 'SELECT d0_.id AS id_0, +d0_.value AS sclr_1 FROM DDC1474Entity d0_' ); @@ -1645,12 +1645,12 @@ public function testSelectWithArithmeticExpressionBeforeField() */ public function testGroupByAllFieldsWhenObjectHasForeignKeys() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY u', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ GROUP BY c0_.id, c0_.status, c0_.username, c0_.name, c0_.email_id' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\CMS\CmsEmployee e GROUP BY e', 'SELECT c0_.id AS id_0, c0_.name AS name_1 FROM cms_employees c0_ GROUP BY c0_.id, c0_.name, c0_.spouse_id' ); @@ -1661,7 +1661,7 @@ public function testGroupByAllFieldsWhenObjectHasForeignKeys() */ public function testGroupBySupportsResultVariable() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u, u.status AS st FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY st', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c0_.status AS status_4 FROM cms_users c0_ GROUP BY c0_.status' ); @@ -1672,7 +1672,7 @@ public function testGroupBySupportsResultVariable() */ public function testGroupBySupportsIdentificationVariable() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u AS user FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY user', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ GROUP BY id_0, status_1, username_2, name_3' ); @@ -1683,19 +1683,19 @@ public function testGroupBySupportsIdentificationVariable() */ public function testSupportsBitComparison() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT BIT_OR(4,2), BIT_AND(4,2), u FROM Doctrine\Tests\Models\CMS\CmsUser u', 'SELECT (4 | 2) AS sclr_0, (4 & 2) AS sclr_1, c0_.id AS id_2, c0_.status AS status_3, c0_.username AS username_4, c0_.name AS name_5 FROM cms_users c0_' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT BIT_OR(u.id,2), BIT_AND(u.id,2) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE BIT_OR(u.id,2) > 0', 'SELECT (c0_.id | 2) AS sclr_0, (c0_.id & 2) AS sclr_1 FROM cms_users c0_ WHERE (c0_.id | 2) > 0' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT BIT_OR(u.id,2), BIT_AND(u.id,2) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE BIT_AND(u.id , 4) > 0', 'SELECT (c0_.id | 2) AS sclr_0, (c0_.id & 2) AS sclr_1 FROM cms_users c0_ WHERE (c0_.id & 4) > 0' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT BIT_OR(u.id,2), BIT_AND(u.id,2) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE BIT_OR(u.id , 2) > 0 OR BIT_AND(u.id , 4) > 0', 'SELECT (c0_.id | 2) AS sclr_0, (c0_.id & 2) AS sclr_1 FROM cms_users c0_ WHERE (c0_.id | 2) > 0 OR (c0_.id & 4) > 0' ); @@ -1706,22 +1706,22 @@ public function testSupportsBitComparison() */ public function testParenthesesOnTheLeftHandOfComparison() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u where ( (u.id + u.id) * u.id ) > 100', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE ((c0_.id + c0_.id) * c0_.id) > 100' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u where (u.id + u.id) * u.id > 100', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE (c0_.id + c0_.id) * c0_.id > 100' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u where 100 < (u.id + u.id) * u.id ', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE 100 < (c0_.id + c0_.id) * c0_.id' ); } public function testSupportsParenthesisExpressionInSubSelect() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u.id, (SELECT (1000*SUM(subU.id)/SUM(subU.id)) FROM Doctrine\Tests\Models\CMS\CmsUser subU where subU.id = u.id) AS subSelect FROM Doctrine\Tests\Models\CMS\CmsUser u', 'SELECT c0_.id AS id_0, (SELECT (1000 * SUM(c1_.id) / SUM(c1_.id)) FROM cms_users c1_ WHERE c1_.id = c0_.id) AS sclr_1 FROM cms_users c0_' ); @@ -1732,27 +1732,27 @@ public function testSupportsParenthesisExpressionInSubSelect() { */ public function testSupportsSubSqlFunction() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u1 FROM Doctrine\Tests\Models\CMS\CmsUser u1 WHERE u1.name IN ( SELECT TRIM(u2.name) FROM Doctrine\Tests\Models\CMS\CmsUser u2 )', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE c0_.name IN (SELECT TRIM(c1_.name) AS sclr_4 FROM cms_users c1_)' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u1 FROM Doctrine\Tests\Models\CMS\CmsUser u1 WHERE u1.name IN ( SELECT TRIM(u2.name) FROM Doctrine\Tests\Models\CMS\CmsUser u2 WHERE LOWER(u2.name) LIKE \'%fabio%\')', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE c0_.name IN (SELECT TRIM(c1_.name) AS sclr_4 FROM cms_users c1_ WHERE LOWER(c1_.name) LIKE \'%fabio%\')' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u1 FROM Doctrine\Tests\Models\CMS\CmsUser u1 WHERE u1.email IN ( SELECT TRIM(IDENTITY(u2.email)) FROM Doctrine\Tests\Models\CMS\CmsUser u2 )', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE c0_.email_id IN (SELECT TRIM(c1_.email_id) AS sclr_4 FROM cms_users c1_)' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u1 FROM Doctrine\Tests\Models\CMS\CmsUser u1 WHERE u1.email IN ( SELECT IDENTITY(u2.email) FROM Doctrine\Tests\Models\CMS\CmsUser u2 )', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE c0_.email_id IN (SELECT c1_.email_id AS sclr_4 FROM cms_users c1_)' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u1 FROM Doctrine\Tests\Models\CMS\CmsUser u1 WHERE COUNT(u1.id) = ( SELECT SUM(u2.id) FROM Doctrine\Tests\Models\CMS\CmsUser u2 )', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE COUNT(c0_.id) = (SELECT SUM(c1_.id) AS sclr_4 FROM cms_users c1_)' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u1 FROM Doctrine\Tests\Models\CMS\CmsUser u1 WHERE COUNT(u1.id) <= ( SELECT SUM(u2.id) + COUNT(u2.email) FROM Doctrine\Tests\Models\CMS\CmsUser u2 )', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE COUNT(c0_.id) <= (SELECT SUM(c1_.id) + COUNT(c1_.email_id) AS sclr_4 FROM cms_users c1_)' ); @@ -1763,32 +1763,32 @@ public function testSupportsSubSqlFunction() */ public function testSupportsNewOperator() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(u.name, e.email, a.city) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a", "SELECT c0_.name AS sclr_0, c1_.email AS sclr_1, c2_.city AS sclr_2 FROM cms_users c0_ INNER JOIN cms_emails c1_ ON c0_.email_id = c1_.id INNER JOIN cms_addresses c2_ ON c0_.id = c2_.user_id" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(u.name, e.email, a.id + u.id) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a", "SELECT c0_.name AS sclr_0, c1_.email AS sclr_1, c2_.id + c0_.id AS sclr_2 FROM cms_users c0_ INNER JOIN cms_emails c1_ ON c0_.email_id = c1_.id INNER JOIN cms_addresses c2_ ON c0_.id = c2_.user_id" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(u.name, e.email, a.city, COUNT(p)) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a JOIN u.phonenumbers p", "SELECT c0_.name AS sclr_0, c1_.email AS sclr_1, c2_.city AS sclr_2, COUNT(c3_.phonenumber) AS sclr_3 FROM cms_users c0_ INNER JOIN cms_emails c1_ ON c0_.email_id = c1_.id INNER JOIN cms_addresses c2_ ON c0_.id = c2_.user_id INNER JOIN cms_phonenumbers c3_ ON c0_.id = c3_.user_id" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(u.name, e.email, a.city, COUNT(p) + u.id) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a JOIN u.phonenumbers p", "SELECT c0_.name AS sclr_0, c1_.email AS sclr_1, c2_.city AS sclr_2, COUNT(c3_.phonenumber) + c0_.id AS sclr_3 FROM cms_users c0_ INNER JOIN cms_emails c1_ ON c0_.email_id = c1_.id INNER JOIN cms_addresses c2_ ON c0_.id = c2_.user_id INNER JOIN cms_phonenumbers c3_ ON c0_.id = c3_.user_id" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(a.id, a.country, a.city), new Doctrine\Tests\Models\CMS\CmsAddressDTO(u.name, e.email) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a ORDER BY u.name", "SELECT c0_.id AS sclr_0, c0_.country AS sclr_1, c0_.city AS sclr_2, c1_.name AS sclr_3, c2_.email AS sclr_4 FROM cms_users c1_ INNER JOIN cms_emails c2_ ON c1_.email_id = c2_.id INNER JOIN cms_addresses c0_ ON c1_.id = c0_.user_id ORDER BY c1_.name ASC" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(a.id, (SELECT 1 FROM Doctrine\Tests\Models\CMS\CmsUser su), a.country, a.city), new Doctrine\Tests\Models\CMS\CmsAddressDTO(u.name, e.email) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a ORDER BY u.name", "SELECT c0_.id AS sclr_0, (SELECT 1 AS sclr_2 FROM cms_users c1_) AS sclr_1, c0_.country AS sclr_3, c0_.city AS sclr_4, c2_.name AS sclr_5, c3_.email AS sclr_6 FROM cms_users c2_ INNER JOIN cms_emails c3_ ON c2_.email_id = c3_.id INNER JOIN cms_addresses c0_ ON c2_.id = c0_.user_id ORDER BY c2_.name ASC" ); @@ -1799,37 +1799,37 @@ public function testSupportsNewOperator() */ public function testWhereFunctionIsNullComparisonExpression() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE IDENTITY(u.email) IS NULL", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE c0_.email_id IS NULL" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE NULLIF(u.name, 'FabioBatSilva') IS NULL AND IDENTITY(u.email) IS NOT NULL", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE NULLIF(c0_.name, 'FabioBatSilva') IS NULL AND c0_.email_id IS NOT NULL" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE IDENTITY(u.email) IS NOT NULL", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE c0_.email_id IS NOT NULL" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE NULLIF(u.name, 'FabioBatSilva') IS NOT NULL", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE NULLIF(c0_.name, 'FabioBatSilva') IS NOT NULL" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE COALESCE(u.name, u.id) IS NOT NULL", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE COALESCE(c0_.name, c0_.id) IS NOT NULL" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE COALESCE(u.id, IDENTITY(u.email)) IS NOT NULL", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE COALESCE(c0_.id, c0_.email_id) IS NOT NULL" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE COALESCE(IDENTITY(u.email), NULLIF(u.name, 'FabioBatSilva')) IS NOT NULL", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE COALESCE(c0_.email_id, NULLIF(c0_.name, 'FabioBatSilva')) IS NOT NULL" ); @@ -1843,7 +1843,7 @@ public function testCustomTypeValueSql() DBALType::addType('negative_to_positive', NegativeToPositiveType::class); } - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT p.customInteger FROM Doctrine\Tests\Models\CustomType\CustomTypeParent p WHERE p.id = 1', 'SELECT -(c0_.customInteger) AS customInteger_0 FROM customtype_parents c0_ WHERE c0_.id = 1' ); @@ -1857,7 +1857,7 @@ public function testCustomTypeValueSqlIgnoresIdentifierColumn() DBALType::addType('negative_to_positive', NegativeToPositiveType::class); } - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT p.id FROM Doctrine\Tests\Models\CustomType\CustomTypeParent p WHERE p.id = 1', 'SELECT c0_.id AS id_0 FROM customtype_parents c0_ WHERE c0_.id = 1' ); @@ -1871,7 +1871,7 @@ public function testCustomTypeValueSqlForAllFields() DBALType::addType('negative_to_positive', NegativeToPositiveType::class); } - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT p FROM Doctrine\Tests\Models\CustomType\CustomTypeParent p', 'SELECT c0_.id AS id_0, -(c0_.customInteger) AS customInteger_1 FROM customtype_parents c0_' ); @@ -1885,7 +1885,7 @@ public function testCustomTypeValueSqlForPartialObject() DBALType::addType('negative_to_positive', NegativeToPositiveType::class); } - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT partial p.{id, customInteger} FROM Doctrine\Tests\Models\CustomType\CustomTypeParent p', 'SELECT c0_.id AS id_0, -(c0_.customInteger) AS customInteger_1 FROM customtype_parents c0_' ); @@ -1896,7 +1896,7 @@ public function testCustomTypeValueSqlForPartialObject() */ public function testMultipleFromAndInheritanceCondition() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT fix, flex FROM Doctrine\Tests\Models\Company\CompanyFixContract fix, Doctrine\Tests\Models\Company\CompanyFlexContract flex', "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.fixPrice AS fixPrice_2, c1_.id AS id_3, c1_.completed AS completed_4, c1_.hoursWorked AS hoursWorked_5, c1_.pricePerHour AS pricePerHour_6, c1_.maxPrice AS maxPrice_7, c0_.discr AS discr_8, c1_.discr AS discr_9 FROM company_contracts c0_, company_contracts c1_ WHERE (c0_.discr IN ('fix') AND c1_.discr IN ('flexible', 'flexultra'))" ); @@ -1907,15 +1907,15 @@ public function testMultipleFromAndInheritanceCondition() */ public function testOrderByClauseSupportsSimpleArithmeticExpression() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY u.id + 1 ', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ ORDER BY c0_.id + 1 ASC' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY ( ( (u.id + 1) * (u.id - 1) ) / 2)', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ ORDER BY (((c0_.id + 1) * (c0_.id - 1)) / 2) ASC' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY ((u.id + 5000) * u.id + 3) ', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ ORDER BY ((c0_.id + 5000) * c0_.id + 3) ASC' ); @@ -1923,7 +1923,7 @@ public function testOrderByClauseSupportsSimpleArithmeticExpression() public function testOrderByClauseSupportsFunction() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY CONCAT(u.username, u.name) ', 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ ORDER BY c0_.username || c0_.name ASC' ); @@ -1934,17 +1934,17 @@ public function testOrderByClauseSupportsFunction() */ public function testStripNonAlphanumericCharactersFromAlias() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\Generic\NonAlphaColumnsEntity e', 'SELECT n0_."simple-entity-id" AS simpleentityid_0, n0_."simple-entity-value" AS simpleentityvalue_1 FROM "not-a-simple-entity" n0_' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT e.value FROM Doctrine\Tests\Models\Generic\NonAlphaColumnsEntity e ORDER BY e.value', 'SELECT n0_."simple-entity-value" AS simpleentityvalue_0 FROM "not-a-simple-entity" n0_ ORDER BY n0_."simple-entity-value" ASC' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT TRIM(e.value) FROM Doctrine\Tests\Models\Generic\NonAlphaColumnsEntity e ORDER BY e.value', 'SELECT TRIM(n0_."simple-entity-value") AS sclr_0 FROM "not-a-simple-entity" n0_ ORDER BY n0_."simple-entity-value" ASC' ); @@ -1955,17 +1955,17 @@ public function testStripNonAlphanumericCharactersFromAlias() */ public function testColumnNameWithNumbersAndNonAlphanumericCharacters() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\Quote\NumericEntity e', 'SELECT t0_."1:1" AS 11_0, t0_."2:2" AS 22_1 FROM table t0_' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT e.value FROM Doctrine\Tests\Models\Quote\NumericEntity e', 'SELECT t0_."2:2" AS 22_0 FROM table t0_' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT TRIM(e.value) FROM Doctrine\Tests\Models\Quote\NumericEntity e', 'SELECT TRIM(t0_."2:2") AS sclr_0 FROM table t0_' ); @@ -1976,7 +1976,7 @@ public function testColumnNameWithNumbersAndNonAlphanumericCharacters() */ public function testQuotedTableDeclaration() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Quote\User u', 'SELECT q0_."user-id" AS userid_0, q0_."user-name" AS username_1 FROM "quote-user" q0_' ); @@ -1987,32 +1987,32 @@ public function testQuotedTableDeclaration() */ public function testQuotedWalkJoinVariableDeclaration() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u, a FROM Doctrine\Tests\Models\Quote\User u JOIN u.address a', 'SELECT q0_."user-id" AS userid_0, q0_."user-name" AS username_1, q1_."address-id" AS addressid_2, q1_."address-zip" AS addresszip_3, q1_.type AS type_4 FROM "quote-user" q0_ INNER JOIN "quote-address" q1_ ON q0_."address-id" = q1_."address-id" AND q1_.type IN (\'simple\', \'full\')' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u, p FROM Doctrine\Tests\Models\Quote\User u JOIN u.phones p', 'SELECT q0_."user-id" AS userid_0, q0_."user-name" AS username_1, q1_."phone-number" AS phonenumber_2 FROM "quote-user" q0_ INNER JOIN "quote-phone" q1_ ON q0_."user-id" = q1_."user-id"' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u, g FROM Doctrine\Tests\Models\Quote\User u JOIN u.groups g', 'SELECT q0_."user-id" AS userid_0, q0_."user-name" AS username_1, q1_."group-id" AS groupid_2, q1_."group-name" AS groupname_3 FROM "quote-user" q0_ INNER JOIN "quote-users-groups" q2_ ON q0_."user-id" = q2_."user-id" INNER JOIN "quote-group" q1_ ON q1_."group-id" = q2_."group-id"' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT a, u FROM Doctrine\Tests\Models\Quote\Address a JOIN a.user u', 'SELECT q0_."address-id" AS addressid_0, q0_."address-zip" AS addresszip_1, q1_."user-id" AS userid_2, q1_."user-name" AS username_3, q0_.type AS type_4 FROM "quote-address" q0_ INNER JOIN "quote-user" q1_ ON q0_."user-id" = q1_."user-id" WHERE q0_.type IN (\'simple\', \'full\')' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT g, u FROM Doctrine\Tests\Models\Quote\Group g JOIN g.users u', 'SELECT q0_."group-id" AS groupid_0, q0_."group-name" AS groupname_1, q1_."user-id" AS userid_2, q1_."user-name" AS username_3 FROM "quote-group" q0_ INNER JOIN "quote-users-groups" q2_ ON q0_."group-id" = q2_."group-id" INNER JOIN "quote-user" q1_ ON q1_."user-id" = q2_."user-id"' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT g, p FROM Doctrine\Tests\Models\Quote\Group g JOIN g.parent p', 'SELECT q0_."group-id" AS groupid_0, q0_."group-name" AS groupname_1, q1_."group-id" AS groupid_2, q1_."group-name" AS groupname_3 FROM "quote-group" q0_ INNER JOIN "quote-group" q1_ ON q0_."parent-id" = q1_."group-id"' ); @@ -2023,17 +2023,17 @@ public function testQuotedWalkJoinVariableDeclaration() */ public function testCaseThenParameterArithmeticExpression() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT SUM(CASE WHEN e.salary <= :value THEN e.salary - :value WHEN e.salary >= :value THEN :value - e.salary ELSE 0 END) FROM Doctrine\Tests\Models\Company\CompanyEmployee e', 'SELECT SUM(CASE WHEN c0_.salary <= ? THEN c0_.salary - ? WHEN c0_.salary >= ? THEN ? - c0_.salary ELSE 0 END) AS sclr_0 FROM company_employees c0_ INNER JOIN company_persons c1_ ON c0_.id = c1_.id' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT SUM(CASE WHEN e.salary <= :value THEN e.salary - :value WHEN e.salary >= :value THEN :value - e.salary ELSE e.salary + 0 END) FROM Doctrine\Tests\Models\Company\CompanyEmployee e', 'SELECT SUM(CASE WHEN c0_.salary <= ? THEN c0_.salary - ? WHEN c0_.salary >= ? THEN ? - c0_.salary ELSE c0_.salary + 0 END) AS sclr_0 FROM company_employees c0_ INNER JOIN company_persons c1_ ON c0_.id = c1_.id' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT SUM(CASE WHEN e.salary <= :value THEN (e.salary - :value) WHEN e.salary >= :value THEN (:value - e.salary) ELSE (e.salary + :value) END) FROM Doctrine\Tests\Models\Company\CompanyEmployee e', 'SELECT SUM(CASE WHEN c0_.salary <= ? THEN (c0_.salary - ?) WHEN c0_.salary >= ? THEN (? - c0_.salary) ELSE (c0_.salary + ?) END) AS sclr_0 FROM company_employees c0_ INNER JOIN company_persons c1_ ON c0_.id = c1_.id' ); @@ -2044,17 +2044,17 @@ public function testCaseThenParameterArithmeticExpression() */ public function testCaseThenFunction() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT CASE WHEN LENGTH(u.name) <> 0 THEN CONCAT(u.id, u.name) ELSE u.id END AS name FROM Doctrine\Tests\Models\CMS\CmsUser u', 'SELECT CASE WHEN LENGTH(c0_.name) <> 0 THEN c0_.id || c0_.name ELSE c0_.id END AS sclr_0 FROM cms_users c0_' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT CASE WHEN LENGTH(u.name) <> LENGTH(TRIM(u.name)) THEN TRIM(u.name) ELSE u.name END AS name FROM Doctrine\Tests\Models\CMS\CmsUser u', 'SELECT CASE WHEN LENGTH(c0_.name) <> LENGTH(TRIM(c0_.name)) THEN TRIM(c0_.name) ELSE c0_.name END AS sclr_0 FROM cms_users c0_' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT CASE WHEN LENGTH(u.name) > :value THEN SUBSTRING(u.name, 0, :value) ELSE TRIM(u.name) END AS name FROM Doctrine\Tests\Models\CMS\CmsUser u', 'SELECT CASE WHEN LENGTH(c0_.name) > ? THEN SUBSTRING(c0_.name FROM 0 FOR ?) ELSE TRIM(c0_.name) END AS sclr_0 FROM cms_users c0_' ); @@ -2069,31 +2069,31 @@ public function testSupportsMoreThanTwoParametersInConcatFunction() $orgPlatform = $connMock->getDatabasePlatform(); $connMock->setDatabasePlatform(new MySqlPlatform()); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, u.status, 's') = ?1", "SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE CONCAT(c0_.name, c0_.status, 's') = ?" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT CONCAT(u.id, u.name, u.status) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1", "SELECT CONCAT(c0_.id, c0_.name, c0_.status) AS sclr_0 FROM cms_users c0_ WHERE c0_.id = ?" ); $connMock->setDatabasePlatform(new PostgreSqlPlatform()); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, u.status, 's') = ?1", "SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE c0_.name || c0_.status || 's' = ?" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT CONCAT(u.id, u.name, u.status) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1", "SELECT c0_.id || c0_.name || c0_.status AS sclr_0 FROM cms_users c0_ WHERE c0_.id = ?" ); $connMock->setDatabasePlatform(new SQLServerPlatform()); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, u.status, 's') = ?1", "SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE (c0_.name + c0_.status + 's') = ?" ); - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT CONCAT(u.id, u.name, u.status) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1", "SELECT (c0_.id + c0_.name + c0_.status) AS sclr_0 FROM cms_users c0_ WHERE c0_.id = ?" ); @@ -2106,17 +2106,17 @@ public function testSupportsMoreThanTwoParametersInConcatFunction() */ public function testArithmeticPriority() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT 100/(2*2) FROM Doctrine\Tests\Models\CMS\CmsUser u', 'SELECT 100 / (2 * 2) AS sclr_0 FROM cms_users c0_' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT (u.id / (u.id * 2)) FROM Doctrine\Tests\Models\CMS\CmsUser u', 'SELECT (c0_.id / (c0_.id * 2)) AS sclr_0 FROM cms_users c0_' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT 100/(2*2) + (u.id / (u.id * 2)) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE (u.id / (u.id * 2)) > 0', 'SELECT 100 / (2 * 2) + (c0_.id / (c0_.id * 2)) AS sclr_0 FROM cms_users c0_ WHERE (c0_.id / (c0_.id * 2)) > 0' ); @@ -2127,12 +2127,12 @@ public function testArithmeticPriority() */ public function testOrderByClauseShouldReplaceOrderByRelationMapping() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT r, b FROM Doctrine\Tests\Models\Routing\RoutingRoute r JOIN r.bookings b', 'SELECT r0_.id AS id_0, r1_.id AS id_1, r1_.passengerName AS passengerName_2 FROM RoutingRoute r0_ INNER JOIN RoutingRouteBooking r1_ ON r0_.id = r1_.route_id ORDER BY r1_.passengerName ASC' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT r, b FROM Doctrine\Tests\Models\Routing\RoutingRoute r JOIN r.bookings b ORDER BY b.passengerName DESC', 'SELECT r0_.id AS id_0, r1_.id AS id_1, r1_.passengerName AS passengerName_2 FROM RoutingRoute r0_ INNER JOIN RoutingRouteBooking r1_ ON r0_.id = r1_.route_id ORDER BY r1_.passengerName DESC' ); @@ -2143,12 +2143,12 @@ public function testOrderByClauseShouldReplaceOrderByRelationMapping() */ public function testHavingSupportIsNullExpression() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING u.username IS NULL', 'SELECT c0_.name AS name_0 FROM cms_users c0_ HAVING c0_.username IS NULL' ); - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING MAX(u.name) IS NULL', 'SELECT c0_.name AS name_0 FROM cms_users c0_ HAVING MAX(c0_.name) IS NULL' ); @@ -2159,7 +2159,7 @@ public function testHavingSupportIsNullExpression() */ public function testClassTableInheritanceJoinWithConditionAppliesToBaseTable() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT e.id FROM Doctrine\Tests\Models\Company\CompanyOrganization o JOIN o.events e WITH e.id = ?1', 'SELECT c0_.id AS id_0 FROM company_organizations c1_ INNER JOIN (company_events c0_ LEFT JOIN company_auctions c2_ ON c0_.id = c2_.id LEFT JOIN company_raffles c3_ ON c0_.id = c3_.id) ON c1_.id = c0_.org_id AND (c0_.id = ?)', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] @@ -2172,7 +2172,7 @@ public function testClassTableInheritanceJoinWithConditionAppliesToBaseTable() public function testSingleTableInheritanceLeftJoinWithCondition() { // Regression test for the bug - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyEmployee e LEFT JOIN Doctrine\Tests\Models\Company\CompanyContract c WITH c.salesPerson = e.id', "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.fixPrice AS fixPrice_2, c0_.hoursWorked AS hoursWorked_3, c0_.pricePerHour AS pricePerHour_4, c0_.maxPrice AS maxPrice_5, c0_.discr AS discr_6 FROM company_employees c1_ INNER JOIN company_persons c2_ ON c1_.id = c2_.id LEFT JOIN company_contracts c0_ ON (c0_.salesPerson_id = c2_.id) AND c0_.discr IN ('fix', 'flexible', 'flexultra')" ); @@ -2184,7 +2184,7 @@ public function testSingleTableInheritanceLeftJoinWithCondition() public function testSingleTableInheritanceLeftJoinWithConditionAndWhere() { // Ensure other WHERE predicates are passed through to the main WHERE clause - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyEmployee e LEFT JOIN Doctrine\Tests\Models\Company\CompanyContract c WITH c.salesPerson = e.id WHERE e.salary > 1000', "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.fixPrice AS fixPrice_2, c0_.hoursWorked AS hoursWorked_3, c0_.pricePerHour AS pricePerHour_4, c0_.maxPrice AS maxPrice_5, c0_.discr AS discr_6 FROM company_employees c1_ INNER JOIN company_persons c2_ ON c1_.id = c2_.id LEFT JOIN company_contracts c0_ ON (c0_.salesPerson_id = c2_.id) AND c0_.discr IN ('fix', 'flexible', 'flexultra') WHERE c1_.salary > 1000" ); @@ -2196,7 +2196,7 @@ public function testSingleTableInheritanceLeftJoinWithConditionAndWhere() public function testSingleTableInheritanceInnerJoinWithCondition() { // Test inner joins too - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyEmployee e INNER JOIN Doctrine\Tests\Models\Company\CompanyContract c WITH c.salesPerson = e.id', "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.fixPrice AS fixPrice_2, c0_.hoursWorked AS hoursWorked_3, c0_.pricePerHour AS pricePerHour_4, c0_.maxPrice AS maxPrice_5, c0_.discr AS discr_6 FROM company_employees c1_ INNER JOIN company_persons c2_ ON c1_.id = c2_.id INNER JOIN company_contracts c0_ ON (c0_.salesPerson_id = c2_.id) AND c0_.discr IN ('fix', 'flexible', 'flexultra')" ); @@ -2209,7 +2209,7 @@ public function testSingleTableInheritanceLeftJoinNonAssociationWithConditionAnd { // Test that the discriminator IN() predicate is still added into // the where clause when not joining onto that table - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c LEFT JOIN Doctrine\Tests\Models\Company\CompanyEmployee e WITH e.id = c.salesPerson WHERE c.completed = true', "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.fixPrice AS fixPrice_2, c0_.hoursWorked AS hoursWorked_3, c0_.pricePerHour AS pricePerHour_4, c0_.maxPrice AS maxPrice_5, c0_.discr AS discr_6 FROM company_contracts c0_ LEFT JOIN company_employees c1_ INNER JOIN company_persons c2_ ON c1_.id = c2_.id ON (c2_.id = c0_.salesPerson_id) WHERE (c0_.completed = 1) AND c0_.discr IN ('fix', 'flexible', 'flexultra')" ); @@ -2223,7 +2223,7 @@ public function testSingleTableInheritanceJoinCreatesOnCondition() // Test that the discriminator IN() predicate is still added // into the where clause when not joining onto a single table inheritance entity // via a join association - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c JOIN c.salesPerson s WHERE c.completed = true', "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.fixPrice AS fixPrice_2, c0_.hoursWorked AS hoursWorked_3, c0_.pricePerHour AS pricePerHour_4, c0_.maxPrice AS maxPrice_5, c0_.discr AS discr_6 FROM company_contracts c0_ INNER JOIN company_employees c1_ ON c0_.salesPerson_id = c1_.id LEFT JOIN company_persons c2_ ON c1_.id = c2_.id WHERE (c0_.completed = 1) AND c0_.discr IN ('fix', 'flexible', 'flexultra')" ); @@ -2237,7 +2237,7 @@ public function testSingleTableInheritanceCreatesOnConditionAndWhere() // Test that when joining onto an entity using single table inheritance via // a join association that the discriminator IN() predicate is placed // into the ON clause of the join - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT e, COUNT(c) FROM Doctrine\Tests\Models\Company\CompanyEmployee e JOIN e.contracts c WHERE e.department = :department', "SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, COUNT(c2_.id) AS sclr_5, c0_.discr AS discr_6 FROM company_employees c1_ INNER JOIN company_persons c0_ ON c1_.id = c0_.id INNER JOIN company_contract_employees c3_ ON c1_.id = c3_.employee_id INNER JOIN company_contracts c2_ ON c2_.id = c3_.contract_id AND c2_.discr IN ('fix', 'flexible', 'flexultra') WHERE c1_.department = ?", [], @@ -2250,7 +2250,7 @@ public function testSingleTableInheritanceCreatesOnConditionAndWhere() */ public function testHavingSupportResultVariableInExpression() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT u.name AS foo FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING foo IN (?1)', 'SELECT c0_.name AS name_0 FROM cms_users c0_ HAVING name_0 IN (?)' ); @@ -2261,7 +2261,7 @@ public function testHavingSupportResultVariableInExpression() */ public function testHavingSupportResultVariableLikeExpression() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u.name AS foo FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING foo LIKE '3'", "SELECT c0_.name AS name_0 FROM cms_users c0_ HAVING name_0 LIKE '3'" ); @@ -2272,7 +2272,7 @@ public function testHavingSupportResultVariableLikeExpression() */ public function testHavingSupportResultVariableNullComparisonExpression() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "SELECT u AS user, SUM(a.id) AS score FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN Doctrine\Tests\Models\CMS\CmsAddress a WITH a.user = u GROUP BY u HAVING score IS NOT NULL AND score >= 5", "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, SUM(c1_.id) AS sclr_4 FROM cms_users c0_ LEFT JOIN cms_addresses c1_ ON (c1_.user_id = c0_.id) GROUP BY c0_.id, c0_.status, c0_.username, c0_.name, c0_.email_id HAVING sclr_4 IS NOT NULL AND sclr_4 >= 5" ); @@ -2283,7 +2283,7 @@ public function testHavingSupportResultVariableNullComparisonExpression() */ public function testHavingSupportResultVariableInAggregateFunction() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT COUNT(u.name) AS countName FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING countName IS NULL', 'SELECT COUNT(c0_.name) AS sclr_0 FROM cms_users c0_ HAVING sclr_0 IS NULL' ); @@ -2296,7 +2296,7 @@ public function testHavingSupportResultVariableInAggregateFunction() */ public function testHavingRegressionUsingVariableWithMathOperatorsExpression($operator) { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'SELECT COUNT(u.name) AS countName FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING 1 ' . $operator . ' countName > 0', 'SELECT COUNT(c0_.name) AS sclr_0 FROM cms_users c0_ HAVING 1 ' . $operator . ' sclr_0 > 0' ); diff --git a/tests/Doctrine/Tests/ORM/Query/SqlWalkerTest.php b/tests/Doctrine/Tests/ORM/Query/SqlWalkerTest.php index e23ee0117f8..96a081c2dae 100644 --- a/tests/Doctrine/Tests/ORM/Query/SqlWalkerTest.php +++ b/tests/Doctrine/Tests/ORM/Query/SqlWalkerTest.php @@ -32,7 +32,7 @@ protected function setUp() */ public function testGetSQLTableAlias($tableName, $expectedAlias) { - $this->assertSame($expectedAlias, $this->sqlWalker->getSQLTableAlias($tableName)); + self::assertSame($expectedAlias, $this->sqlWalker->getSQLTableAlias($tableName)); } /** @@ -40,7 +40,7 @@ public function testGetSQLTableAlias($tableName, $expectedAlias) */ public function testGetSQLTableAliasIsSameForMultipleCalls($tableName) { - $this->assertSame( + self::assertSame( $this->sqlWalker->getSQLTableAlias($tableName), $this->sqlWalker->getSQLTableAlias($tableName) ); diff --git a/tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php index 7044929e940..f24b45feecd 100644 --- a/tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php @@ -47,7 +47,7 @@ public function assertSqlGeneration($dqlToBeTested, $sqlToBeConfirmed) public function testSupportsQueriesWithoutWhere() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = ?1', 'UPDATE cms_users SET name = ?' ); @@ -55,7 +55,7 @@ public function testSupportsQueriesWithoutWhere() public function testSupportsMultipleFieldsWithoutWhere() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = ?1, u.username = ?2', 'UPDATE cms_users SET name = ?, username = ?' ); @@ -63,7 +63,7 @@ public function testSupportsMultipleFieldsWithoutWhere() public function testSupportsWhereClauses() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = ?1 WHERE u.id = ?2', 'UPDATE cms_users SET name = ? WHERE id = ?' ); @@ -71,7 +71,7 @@ public function testSupportsWhereClauses() public function testSupportsWhereClausesOnTheUpdatedField() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = ?1 WHERE u.name = ?2', 'UPDATE cms_users SET name = ? WHERE name = ?' ); @@ -79,7 +79,7 @@ public function testSupportsWhereClausesOnTheUpdatedField() public function testSupportsMultipleWhereClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = ?1 WHERE u.name = ?2 AND u.status = ?3', 'UPDATE cms_users SET name = ? WHERE name = ? AND status = ?' ); @@ -87,7 +87,7 @@ public function testSupportsMultipleWhereClause() public function testSupportsInClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = ?1 WHERE u.id IN (1, 3, 4)', 'UPDATE cms_users SET name = ? WHERE id IN (1, 3, 4)' ); @@ -95,7 +95,7 @@ public function testSupportsInClause() public function testSupportsParametrizedInClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = ?1 WHERE u.id IN (?2, ?3, ?4)', 'UPDATE cms_users SET name = ? WHERE id IN (?, ?, ?)' ); @@ -103,7 +103,7 @@ public function testSupportsParametrizedInClause() public function testSupportsNotInClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = ?1 WHERE u.id NOT IN (1, 3, 4)', 'UPDATE cms_users SET name = ? WHERE id NOT IN (1, 3, 4)' ); @@ -111,7 +111,7 @@ public function testSupportsNotInClause() public function testSupportsGreaterThanClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.status = ?1 WHERE u.id > ?2', 'UPDATE cms_users SET status = ? WHERE id > ?' ); @@ -119,7 +119,7 @@ public function testSupportsGreaterThanClause() public function testSupportsGreaterThanOrEqualToClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.status = ?1 WHERE u.id >= ?2', 'UPDATE cms_users SET status = ? WHERE id >= ?' ); @@ -127,7 +127,7 @@ public function testSupportsGreaterThanOrEqualToClause() public function testSupportsLessThanClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.status = ?1 WHERE u.id < ?2', 'UPDATE cms_users SET status = ? WHERE id < ?' ); @@ -135,7 +135,7 @@ public function testSupportsLessThanClause() public function testSupportsLessThanOrEqualToClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.status = ?1 WHERE u.id <= ?2', 'UPDATE cms_users SET status = ? WHERE id <= ?' ); @@ -143,7 +143,7 @@ public function testSupportsLessThanOrEqualToClause() public function testSupportsBetweenClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.status = ?1 WHERE u.id BETWEEN :from AND :to', 'UPDATE cms_users SET status = ? WHERE id BETWEEN ? AND ?' ); @@ -151,7 +151,7 @@ public function testSupportsBetweenClause() public function testSingleValuedAssociationFieldInWhere() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "UPDATE Doctrine\Tests\Models\CMS\CmsPhonenumber p SET p.phonenumber = 1234 WHERE p.user = ?1", "UPDATE cms_phonenumbers SET phonenumber = 1234 WHERE user_id = ?" ); @@ -159,7 +159,7 @@ public function testSingleValuedAssociationFieldInWhere() public function testSingleValuedAssociationFieldInSetClause() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "update Doctrine\Tests\Models\CMS\CmsComment c set c.article = null where c.article=?1", "UPDATE cms_comments SET article_id = NULL WHERE article_id = ?" ); @@ -170,7 +170,7 @@ public function testSingleValuedAssociationFieldInSetClause() */ public function testSubselectTableAliasReferencing() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.status = 'inactive' WHERE SIZE(u.groups) = 10", "UPDATE cms_users SET status = 'inactive' WHERE (SELECT COUNT(*) FROM cms_users_groups c0_ WHERE c0_.user_id = cms_users.id) = 10" ); @@ -178,7 +178,7 @@ public function testSubselectTableAliasReferencing() public function testCustomTypeValueSqlCompletelyIgnoredInUpdateStatements() { - $this->assertSqlGeneration( + self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CustomType\CustomTypeParent p SET p.customInteger = 1 WHERE p.id = 1', 'UPDATE customtype_parents SET customInteger = 1 WHERE id = 1' ); @@ -186,7 +186,7 @@ public function testCustomTypeValueSqlCompletelyIgnoredInUpdateStatements() public function testUpdateWithSubselectAsNewValue() { - $this->assertSqlGeneration( + self::assertSqlGeneration( "UPDATE Doctrine\Tests\Models\Company\CompanyFixContract fc SET fc.fixPrice = (SELECT ce2.salary FROM Doctrine\Tests\Models\Company\CompanyEmployee ce2 WHERE ce2.id = 2) WHERE fc.id = 1", "UPDATE company_contracts SET fixPrice = (SELECT c0_.salary FROM company_employees c0_ INNER JOIN company_persons c1_ ON c0_.id = c1_.id LEFT JOIN company_managers c2_ ON c0_.id = c2_.id WHERE c1_.id = 2) WHERE (id = 1) AND discr IN ('fix')" ); diff --git a/tests/Doctrine/Tests/ORM/QueryBuilderTest.php b/tests/Doctrine/Tests/ORM/QueryBuilderTest.php index 7da2c663caa..c8f3b9f798b 100644 --- a/tests/Doctrine/Tests/ORM/QueryBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/QueryBuilderTest.php @@ -40,7 +40,7 @@ protected function assertValidQueryBuilder(QueryBuilder $qb, $expectedDql) $dql = $qb->getDQL(); $q = $qb->getQuery(); - $this->assertEquals($expectedDql, $dql); + self::assertEquals($expectedDql, $dql); } public function testSelectSetsType() @@ -49,7 +49,7 @@ public function testSelectSetsType() ->delete(CmsUser::class, 'u') ->select('u.id', 'u.username'); - $this->assertEquals($qb->getType(), QueryBuilder::SELECT); + self::assertEquals($qb->getType(), QueryBuilder::SELECT); } public function testEmptySelectSetsType() @@ -58,7 +58,7 @@ public function testEmptySelectSetsType() ->delete(CmsUser::class, 'u') ->select(); - $this->assertEquals($qb->getType(), QueryBuilder::SELECT); + self::assertEquals($qb->getType(), QueryBuilder::SELECT); } public function testDeleteSetsType() @@ -67,7 +67,7 @@ public function testDeleteSetsType() ->from(CmsUser::class, 'u') ->delete(); - $this->assertEquals($qb->getType(), QueryBuilder::DELETE); + self::assertEquals($qb->getType(), QueryBuilder::DELETE); } public function testUpdateSetsType() @@ -76,7 +76,7 @@ public function testUpdateSetsType() ->from(CmsUser::class, 'u') ->update(); - $this->assertEquals($qb->getType(), QueryBuilder::UPDATE); + self::assertEquals($qb->getType(), QueryBuilder::UPDATE); } public function testSimpleSelect() @@ -85,7 +85,7 @@ public function testSimpleSelect() ->from(CmsUser::class, 'u') ->select('u.id', 'u.username'); - $this->assertValidQueryBuilder($qb, 'SELECT u.id, u.username FROM Doctrine\Tests\Models\CMS\CmsUser u'); + self::assertValidQueryBuilder($qb, 'SELECT u.id, u.username FROM Doctrine\Tests\Models\CMS\CmsUser u'); } public function testSimpleDelete() @@ -93,7 +93,7 @@ public function testSimpleDelete() $qb = $this->_em->createQueryBuilder() ->delete(CmsUser::class, 'u'); - $this->assertValidQueryBuilder($qb, 'DELETE Doctrine\Tests\Models\CMS\CmsUser u'); + self::assertValidQueryBuilder($qb, 'DELETE Doctrine\Tests\Models\CMS\CmsUser u'); } public function testSimpleSelectWithFromIndexBy() @@ -102,7 +102,7 @@ public function testSimpleSelectWithFromIndexBy() ->from(CmsUser::class, 'u', 'u.id') ->select('u.id', 'u.username'); - $this->assertValidQueryBuilder($qb, 'SELECT u.id, u.username FROM Doctrine\Tests\Models\CMS\CmsUser u INDEX BY u.id'); + self::assertValidQueryBuilder($qb, 'SELECT u.id, u.username FROM Doctrine\Tests\Models\CMS\CmsUser u INDEX BY u.id'); } public function testSimpleSelectWithIndexBy() @@ -112,7 +112,7 @@ public function testSimpleSelectWithIndexBy() ->indexBy('u', 'u.id') ->select('u.id', 'u.username'); - $this->assertValidQueryBuilder($qb, 'SELECT u.id, u.username FROM Doctrine\Tests\Models\CMS\CmsUser u INDEX BY u.id'); + self::assertValidQueryBuilder($qb, 'SELECT u.id, u.username FROM Doctrine\Tests\Models\CMS\CmsUser u INDEX BY u.id'); } public function testSimpleUpdate() @@ -121,7 +121,7 @@ public function testSimpleUpdate() ->update(CmsUser::class, 'u') ->set('u.username', ':username'); - $this->assertValidQueryBuilder($qb, 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.username = :username'); + self::assertValidQueryBuilder($qb, 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.username = :username'); } public function testInnerJoin() @@ -131,7 +131,7 @@ public function testInnerJoin() ->from(CmsUser::class, 'u') ->innerJoin('u.articles', 'a'); - $this->assertValidQueryBuilder($qb, 'SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.articles a'); + self::assertValidQueryBuilder($qb, 'SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.articles a'); } public function testComplexInnerJoin() @@ -141,7 +141,7 @@ public function testComplexInnerJoin() ->from(CmsUser::class, 'u') ->innerJoin('u.articles', 'a', 'ON', 'u.id = a.author_id'); - $this->assertValidQueryBuilder( + self::assertValidQueryBuilder( $qb, 'SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.articles a ON u.id = a.author_id' ); @@ -154,7 +154,7 @@ public function testComplexInnerJoinWithIndexBy() ->from(CmsUser::class, 'u') ->innerJoin('u.articles', 'a', 'ON', 'u.id = a.author_id', 'a.name'); - $this->assertValidQueryBuilder( + self::assertValidQueryBuilder( $qb, 'SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.articles a INDEX BY a.name ON u.id = a.author_id' ); @@ -167,7 +167,7 @@ public function testLeftJoin() ->from(CmsUser::class, 'u') ->leftJoin('u.articles', 'a'); - $this->assertValidQueryBuilder($qb, 'SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a'); + self::assertValidQueryBuilder($qb, 'SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a'); } public function testLeftJoinWithIndexBy() @@ -177,7 +177,7 @@ public function testLeftJoinWithIndexBy() ->from(CmsUser::class, 'u') ->leftJoin('u.articles', 'a', null, null, 'a.name'); - $this->assertValidQueryBuilder($qb, 'SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a INDEX BY a.name'); + self::assertValidQueryBuilder($qb, 'SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a INDEX BY a.name'); } public function testMultipleFrom() @@ -187,7 +187,7 @@ public function testMultipleFrom() ->from(CmsUser::class, 'u') ->from(CmsGroup::class, 'g'); - $this->assertValidQueryBuilder($qb, 'SELECT u, g FROM Doctrine\Tests\Models\CMS\CmsUser u, Doctrine\Tests\Models\CMS\CmsGroup g'); + self::assertValidQueryBuilder($qb, 'SELECT u, g FROM Doctrine\Tests\Models\CMS\CmsUser u, Doctrine\Tests\Models\CMS\CmsGroup g'); } public function testMultipleFromWithIndexBy() @@ -198,7 +198,7 @@ public function testMultipleFromWithIndexBy() ->from(CmsGroup::class, 'g') ->indexBy('g', 'g.id'); - $this->assertValidQueryBuilder($qb, 'SELECT u, g FROM Doctrine\Tests\Models\CMS\CmsUser u, Doctrine\Tests\Models\CMS\CmsGroup g INDEX BY g.id'); + self::assertValidQueryBuilder($qb, 'SELECT u, g FROM Doctrine\Tests\Models\CMS\CmsUser u, Doctrine\Tests\Models\CMS\CmsGroup g INDEX BY g.id'); } public function testMultipleFromWithJoin() @@ -209,7 +209,7 @@ public function testMultipleFromWithJoin() ->from(CmsGroup::class, 'g') ->innerJoin('u.articles', 'a', 'ON', 'u.id = a.author_id'); - $this->assertValidQueryBuilder($qb, 'SELECT u, g FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.articles a ON u.id = a.author_id, Doctrine\Tests\Models\CMS\CmsGroup g'); + self::assertValidQueryBuilder($qb, 'SELECT u, g FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.articles a ON u.id = a.author_id, Doctrine\Tests\Models\CMS\CmsGroup g'); } public function testMultipleFromWithMultipleJoin() @@ -222,7 +222,7 @@ public function testMultipleFromWithMultipleJoin() ->leftJoin('u.address', 'ad') ->innerJoin('a.comments', 'c'); - $this->assertValidQueryBuilder($qb, 'SELECT u, g FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.groups g LEFT JOIN u.address ad, Doctrine\Tests\Models\CMS\CmsArticle a INNER JOIN a.comments c'); + self::assertValidQueryBuilder($qb, 'SELECT u, g FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.groups g LEFT JOIN u.address ad, Doctrine\Tests\Models\CMS\CmsArticle a INNER JOIN a.comments c'); } public function testWhere() @@ -232,7 +232,7 @@ public function testWhere() ->from(CmsUser::class, 'u') ->where('u.id = :uid'); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid'); } public function testComplexAndWhere() @@ -243,7 +243,7 @@ public function testComplexAndWhere() ->where('u.id = :uid OR u.id = :uid2 OR u.id = :uid3') ->andWhere('u.name = :name'); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE (u.id = :uid OR u.id = :uid2 OR u.id = :uid3) AND u.name = :name'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE (u.id = :uid OR u.id = :uid2 OR u.id = :uid3) AND u.name = :name'); } public function testAndWhere() @@ -254,7 +254,7 @@ public function testAndWhere() ->where('u.id = :uid') ->andWhere('u.id = :uid2'); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid AND u.id = :uid2'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid AND u.id = :uid2'); } public function testOrWhere() @@ -265,7 +265,7 @@ public function testOrWhere() ->where('u.id = :uid') ->orWhere('u.id = :uid2'); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid OR u.id = :uid2'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid OR u.id = :uid2'); } public function testComplexAndWhereOrWhereNesting() @@ -279,7 +279,7 @@ public function testComplexAndWhereOrWhereNesting() ->orWhere('u.name = :name1', 'u.name = :name2') ->andWhere('u.name <> :noname'); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE (((u.id = :uid OR u.id = :uid2) AND u.id = :uid3) OR u.name = :name1 OR u.name = :name2) AND u.name <> :noname'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE (((u.id = :uid OR u.id = :uid2) AND u.id = :uid3) OR u.name = :name1 OR u.name = :name2) AND u.name <> :noname'); } public function testAndWhereIn() @@ -290,7 +290,7 @@ public function testAndWhereIn() ->where('u.id = :uid') ->andWhere($qb->expr()->in('u.id', [1, 2, 3])); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid AND u.id IN(1, 2, 3)'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid AND u.id IN(1, 2, 3)'); } public function testOrWhereIn() @@ -301,7 +301,7 @@ public function testOrWhereIn() ->where('u.id = :uid') ->orWhere($qb->expr()->in('u.id', [1, 2, 3])); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid OR u.id IN(1, 2, 3)'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid OR u.id IN(1, 2, 3)'); } public function testAndWhereNotIn() @@ -312,7 +312,7 @@ public function testAndWhereNotIn() ->where('u.id = :uid') ->andWhere($qb->expr()->notIn('u.id', [1, 2, 3])); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid AND u.id NOT IN(1, 2, 3)'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid AND u.id NOT IN(1, 2, 3)'); } public function testOrWhereNotIn() @@ -323,7 +323,7 @@ public function testOrWhereNotIn() ->where('u.id = :uid') ->orWhere($qb->expr()->notIn('u.id', [1, 2, 3])); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid OR u.id NOT IN(1, 2, 3)'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid OR u.id NOT IN(1, 2, 3)'); } public function testGroupBy() @@ -334,7 +334,7 @@ public function testGroupBy() ->groupBy('u.id') ->addGroupBy('u.username'); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY u.id, u.username'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY u.id, u.username'); } public function testHaving() @@ -345,7 +345,7 @@ public function testHaving() ->groupBy('u.id') ->having('COUNT(u.id) > 1'); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY u.id HAVING COUNT(u.id) > 1'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY u.id HAVING COUNT(u.id) > 1'); } public function testAndHaving() @@ -357,7 +357,7 @@ public function testAndHaving() ->having('COUNT(u.id) > 1') ->andHaving('COUNT(u.id) < 1'); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY u.id HAVING COUNT(u.id) > 1 AND COUNT(u.id) < 1'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY u.id HAVING COUNT(u.id) > 1 AND COUNT(u.id) < 1'); } public function testOrHaving() @@ -370,7 +370,7 @@ public function testOrHaving() ->andHaving('COUNT(u.id) < 1') ->orHaving('COUNT(u.id) > 1'); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY u.id HAVING (COUNT(u.id) > 1 AND COUNT(u.id) < 1) OR COUNT(u.id) > 1'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY u.id HAVING (COUNT(u.id) > 1 AND COUNT(u.id) < 1) OR COUNT(u.id) > 1'); } public function testOrderBy() @@ -380,7 +380,7 @@ public function testOrderBy() ->from(CmsUser::class, 'u') ->orderBy('u.username', 'ASC'); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY u.username ASC'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY u.username ASC'); } public function testOrderByWithExpression() @@ -390,7 +390,7 @@ public function testOrderByWithExpression() ->from(CmsUser::class, 'u') ->orderBy($qb->expr()->asc('u.username')); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY u.username ASC'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY u.username ASC'); } public function testAddOrderBy() @@ -401,7 +401,7 @@ public function testAddOrderBy() ->orderBy('u.username', 'ASC') ->addOrderBy('u.username', 'DESC'); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY u.username ASC, u.username DESC'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY u.username ASC, u.username DESC'); } public function testAddOrderByWithExpression() @@ -412,7 +412,7 @@ public function testAddOrderByWithExpression() ->orderBy('u.username', 'ASC') ->addOrderBy($qb->expr()->desc('u.username')); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY u.username ASC, u.username DESC'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY u.username ASC, u.username DESC'); } public function testAddCriteriaWhere() @@ -426,8 +426,8 @@ public function testAddCriteriaWhere() $qb->addCriteria($criteria); - $this->assertEquals('u.field = :field', (string) $qb->getDQLPart('where')); - $this->assertNotNull($qb->getParameter('field')); + self::assertEquals('u.field = :field', (string) $qb->getDQLPart('where')); + self::assertNotNull($qb->getParameter('field')); } public function testAddMultipleSameCriteriaWhere() @@ -443,9 +443,9 @@ public function testAddMultipleSameCriteriaWhere() $qb->addCriteria($criteria); - $this->assertEquals('alias1.field = :field AND alias1.field = :field_1', (string) $qb->getDQLPart('where')); - $this->assertNotNull($qb->getParameter('field')); - $this->assertNotNull($qb->getParameter('field_1')); + self::assertEquals('alias1.field = :field AND alias1.field = :field_1', (string) $qb->getDQLPart('where')); + self::assertNotNull($qb->getParameter('field')); + self::assertNotNull($qb->getParameter('field_1')); } /** @@ -462,9 +462,9 @@ public function testAddCriteriaWhereWithMultipleParametersWithSameField() $qb->addCriteria($criteria); - $this->assertEquals('alias1.field = :field AND alias1.field > :field_1', (string) $qb->getDQLPart('where')); - $this->assertSame('value1', $qb->getParameter('field')->getValue()); - $this->assertSame('value2', $qb->getParameter('field_1')->getValue()); + self::assertEquals('alias1.field = :field AND alias1.field > :field_1', (string) $qb->getDQLPart('where')); + self::assertSame('value1', $qb->getParameter('field')->getValue()); + self::assertSame('value2', $qb->getParameter('field_1')->getValue()); } /** @@ -481,9 +481,9 @@ public function testAddCriteriaWhereWithMultipleParametersWithDifferentFields() $qb->addCriteria($criteria); - $this->assertEquals('alias1.field1 = :field1 AND alias1.field2 > :field2', (string) $qb->getDQLPart('where')); - $this->assertSame('value1', $qb->getParameter('field1')->getValue()); - $this->assertSame('value2', $qb->getParameter('field2')->getValue()); + self::assertEquals('alias1.field1 = :field1 AND alias1.field2 > :field2', (string) $qb->getDQLPart('where')); + self::assertSame('value1', $qb->getParameter('field1')->getValue()); + self::assertSame('value2', $qb->getParameter('field2')->getValue()); } /** @@ -500,9 +500,9 @@ public function testAddCriteriaWhereWithMultipleParametersWithSubpathsAndDiffere $qb->addCriteria($criteria); - $this->assertEquals('alias1.field1 = :field1 AND alias1.field2 > :field2', (string) $qb->getDQLPart('where')); - $this->assertSame('value1', $qb->getParameter('field1')->getValue()); - $this->assertSame('value2', $qb->getParameter('field2')->getValue()); + self::assertEquals('alias1.field1 = :field1 AND alias1.field2 > :field2', (string) $qb->getDQLPart('where')); + self::assertSame('value1', $qb->getParameter('field1')->getValue()); + self::assertSame('value2', $qb->getParameter('field2')->getValue()); } /** @@ -519,9 +519,9 @@ public function testAddCriteriaWhereWithMultipleParametersWithSubpathsAndSamePro $qb->addCriteria($criteria); - $this->assertEquals('alias1.field1 = :field1 AND alias1.field1 > :field1_1', (string) $qb->getDQLPart('where')); - $this->assertSame('value1', $qb->getParameter('field1')->getValue()); - $this->assertSame('value2', $qb->getParameter('field1_1')->getValue()); + self::assertEquals('alias1.field1 = :field1 AND alias1.field1 > :field1_1', (string) $qb->getDQLPart('where')); + self::assertSame('value1', $qb->getParameter('field1')->getValue()); + self::assertSame('value2', $qb->getParameter('field1_1')->getValue()); } public function testAddCriteriaOrder() @@ -535,8 +535,8 @@ public function testAddCriteriaOrder() $qb->addCriteria($criteria); - $this->assertCount(1, $orderBy = $qb->getDQLPart('orderBy')); - $this->assertEquals('u.field DESC', (string) $orderBy[0]); + self::assertCount(1, $orderBy = $qb->getDQLPart('orderBy')); + self::assertEquals('u.field DESC', (string) $orderBy[0]); } /** @@ -554,8 +554,8 @@ public function testAddCriteriaOrderOnJoinAlias() $qb->addCriteria($criteria); - $this->assertCount(1, $orderBy = $qb->getDQLPart('orderBy')); - $this->assertEquals('a.field DESC', (string) $orderBy[0]); + self::assertCount(1, $orderBy = $qb->getDQLPart('orderBy')); + self::assertEquals('a.field DESC', (string) $orderBy[0]); } public function testAddCriteriaLimit() @@ -570,8 +570,8 @@ public function testAddCriteriaLimit() $qb->addCriteria($criteria); - $this->assertEquals(2, $qb->getFirstResult()); - $this->assertEquals(10, $qb->getMaxResults()); + self::assertEquals(2, $qb->getFirstResult()); + self::assertEquals(10, $qb->getMaxResults()); } public function testAddCriteriaUndefinedLimit() @@ -586,8 +586,8 @@ public function testAddCriteriaUndefinedLimit() $qb->addCriteria($criteria); - $this->assertEquals(2, $qb->getFirstResult()); - $this->assertEquals(10, $qb->getMaxResults()); + self::assertEquals(2, $qb->getFirstResult()); + self::assertEquals(10, $qb->getMaxResults()); } public function testGetQuery() @@ -597,7 +597,7 @@ public function testGetQuery() ->from(CmsUser::class, 'u'); $q = $qb->getQuery(); - $this->assertEquals(Query::class, get_class($q)); + self::assertEquals(Query::class, get_class($q)); } public function testSetParameter() @@ -610,7 +610,7 @@ public function testSetParameter() $parameter = new Parameter('id', 1, ParameterTypeInferer::inferType(1)); - $this->assertEquals($parameter, $qb->getParameter('id')); + self::assertEquals($parameter, $qb->getParameter('id')); } public function testSetParameters() @@ -626,7 +626,7 @@ public function testSetParameters() $qb->setParameters($parameters); - $this->assertEquals($parameters, $qb->getQuery()->getParameters()); + self::assertEquals($parameters, $qb->getQuery()->getParameters()); } @@ -642,7 +642,7 @@ public function testGetParameters() $qb->setParameters($parameters); - $this->assertEquals($parameters, $qb->getParameters()); + self::assertEquals($parameters, $qb->getParameters()); } public function testGetParameter() @@ -657,7 +657,7 @@ public function testGetParameter() $qb->setParameters($parameters); - $this->assertEquals($parameters->first(), $qb->getParameter('id')); + self::assertEquals($parameters->first(), $qb->getParameter('id')); } public function testMultipleWhere() @@ -667,7 +667,7 @@ public function testMultipleWhere() ->from(CmsUser::class, 'u') ->where('u.id = :uid', 'u.id = :uid2'); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid AND u.id = :uid2'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid AND u.id = :uid2'); } public function testMultipleAndWhere() @@ -677,7 +677,7 @@ public function testMultipleAndWhere() ->from(CmsUser::class, 'u') ->andWhere('u.id = :uid', 'u.id = :uid2'); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid AND u.id = :uid2'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid AND u.id = :uid2'); } public function testMultipleOrWhere() @@ -687,7 +687,7 @@ public function testMultipleOrWhere() ->from(CmsUser::class, 'u') ->orWhere('u.id = :uid', $qb->expr()->eq('u.id', ':uid2')); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid OR u.id = :uid2'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid OR u.id = :uid2'); } public function testComplexWhere() @@ -701,7 +701,7 @@ public function testComplexWhere() ->from(CmsUser::class, 'u') ->where($orExpr); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid3 OR u.id IN(1)'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid3 OR u.id IN(1)'); } public function testWhereInWithStringLiterals() @@ -711,11 +711,11 @@ public function testWhereInWithStringLiterals() ->from(CmsUser::class, 'u') ->where($qb->expr()->in('u.name', ['one', 'two', 'three'])); - $this->assertValidQueryBuilder($qb, "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name IN('one', 'two', 'three')"); + self::assertValidQueryBuilder($qb, "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name IN('one', 'two', 'three')"); $qb->where($qb->expr()->in('u.name', ["O'Reilly", "O'Neil", 'Smith'])); - $this->assertValidQueryBuilder($qb, "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name IN('O''Reilly', 'O''Neil', 'Smith')"); + self::assertValidQueryBuilder($qb, "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name IN('O''Reilly', 'O''Neil', 'Smith')"); } public function testWhereInWithObjectLiterals() @@ -726,11 +726,11 @@ public function testWhereInWithObjectLiterals() ->from(CmsUser::class, 'u') ->where($expr->in('u.name', [$expr->literal('one'), $expr->literal('two'), $expr->literal('three')])); - $this->assertValidQueryBuilder($qb, "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name IN('one', 'two', 'three')"); + self::assertValidQueryBuilder($qb, "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name IN('one', 'two', 'three')"); $qb->where($expr->in('u.name', [$expr->literal("O'Reilly"), $expr->literal("O'Neil"), $expr->literal('Smith')])); - $this->assertValidQueryBuilder($qb, "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name IN('O''Reilly', 'O''Neil', 'Smith')"); + self::assertValidQueryBuilder($qb, "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name IN('O''Reilly', 'O''Neil', 'Smith')"); } public function testNegation() @@ -745,7 +745,7 @@ public function testNegation() ->from(CmsUser::class, 'u') ->where($orExpr); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid3 OR NOT(u.id IN(1))'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :uid3 OR NOT(u.id IN(1))'); } public function testSomeAllAny() @@ -757,7 +757,7 @@ public function testSomeAllAny() ->from(CmsUser::class, 'u') ->where($expr->gt('u.id', $expr->all('select a.id from Doctrine\Tests\Models\CMS\CmsArticle a'))); - $this->assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id > ALL(select a.id from Doctrine\Tests\Models\CMS\CmsArticle a)'); + self::assertValidQueryBuilder($qb, 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id > ALL(select a.id from Doctrine\Tests\Models\CMS\CmsArticle a)'); } @@ -772,8 +772,8 @@ public function testMultipleIsolatedQueryConstruction() $q1 = $qb->getQuery(); - $this->assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = :name', $q1->getDQL()); - $this->assertEquals(1, count($q1->getParameters())); + self::assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = :name', $q1->getDQL()); + self::assertEquals(1, count($q1->getParameters())); // add another condition and construct a second query $qb->andWhere($expr->eq('u.id', ':id')); @@ -781,22 +781,22 @@ public function testMultipleIsolatedQueryConstruction() $q2 = $qb->getQuery(); - $this->assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = :name AND u.id = :id', $q2->getDQL()); - $this->assertTrue($q1 !== $q2); // two different, independent queries - $this->assertEquals(2, count($q2->getParameters())); - $this->assertEquals(1, count($q1->getParameters())); // $q1 unaffected + self::assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = :name AND u.id = :id', $q2->getDQL()); + self::assertTrue($q1 !== $q2); // two different, independent queries + self::assertEquals(2, count($q2->getParameters())); + self::assertEquals(1, count($q1->getParameters())); // $q1 unaffected } public function testGetEntityManager() { $qb = $this->_em->createQueryBuilder(); - $this->assertEquals($this->_em, $qb->getEntityManager()); + self::assertEquals($this->_em, $qb->getEntityManager()); } public function testInitialStateIsClean() { $qb = $this->_em->createQueryBuilder(); - $this->assertEquals(QueryBuilder::STATE_CLEAN, $qb->getState()); + self::assertEquals(QueryBuilder::STATE_CLEAN, $qb->getState()); } public function testAlteringQueryChangesStateToDirty() @@ -805,7 +805,7 @@ public function testAlteringQueryChangesStateToDirty() ->select('u') ->from(CmsUser::class, 'u'); - $this->assertEquals(QueryBuilder::STATE_DIRTY, $qb->getState()); + self::assertEquals(QueryBuilder::STATE_DIRTY, $qb->getState()); } public function testSelectWithFuncExpression() @@ -814,7 +814,7 @@ public function testSelectWithFuncExpression() $expr = $qb->expr(); $qb->select($expr->count('e.id')); - $this->assertValidQueryBuilder($qb, 'SELECT COUNT(e.id)'); + self::assertValidQueryBuilder($qb, 'SELECT COUNT(e.id)'); } public function testResetDQLPart() @@ -824,13 +824,13 @@ public function testResetDQLPart() ->from(CmsUser::class, 'u') ->where('u.username = ?1')->orderBy('u.username'); - $this->assertEquals('u.username = ?1', (string)$qb->getDQLPart('where')); - $this->assertEquals(1, count($qb->getDQLPart('orderBy'))); + self::assertEquals('u.username = ?1', (string)$qb->getDQLPart('where')); + self::assertEquals(1, count($qb->getDQLPart('orderBy'))); $qb->resetDQLPart('where')->resetDQLPart('orderBy'); - $this->assertNull($qb->getDQLPart('where')); - $this->assertEquals(0, count($qb->getDQLPart('orderBy'))); + self::assertNull($qb->getDQLPart('where')); + self::assertEquals(0, count($qb->getDQLPart('orderBy'))); } public function testResetDQLParts() @@ -842,9 +842,9 @@ public function testResetDQLParts() $qb->resetDQLParts(['where', 'orderBy']); - $this->assertEquals(1, count($qb->getDQLPart('select'))); - $this->assertNull($qb->getDQLPart('where')); - $this->assertEquals(0, count($qb->getDQLPart('orderBy'))); + self::assertEquals(1, count($qb->getDQLPart('select'))); + self::assertNull($qb->getDQLPart('where')); + self::assertEquals(0, count($qb->getDQLPart('orderBy'))); } public function testResetAllDQLParts() @@ -856,9 +856,9 @@ public function testResetAllDQLParts() $qb->resetDQLParts(); - $this->assertEquals(0, count($qb->getDQLPart('select'))); - $this->assertNull($qb->getDQLPart('where')); - $this->assertEquals(0, count($qb->getDQLPart('orderBy'))); + self::assertEquals(0, count($qb->getDQLPart('select'))); + self::assertNull($qb->getDQLPart('where')); + self::assertEquals(0, count($qb->getDQLPart('orderBy'))); } /** @@ -873,12 +873,12 @@ public function testDeepClone() ->andWhere('u.status = ?2'); $expr = $qb->getDQLPart('where'); - $this->assertEquals(2, $expr->count(), "Modifying the second query should affect the first one."); + self::assertEquals(2, $expr->count(), "Modifying the second query should affect the first one."); $qb2 = clone $qb; $qb2->andWhere('u.name = ?3'); - $this->assertEquals(2, $expr->count(), "Modifying the second query should affect the first one."); + self::assertEquals(2, $expr->count(), "Modifying the second query should affect the first one."); } /** @@ -896,9 +896,9 @@ public function testAddCriteriaWhereWithJoinAlias() $qb->addCriteria($criteria); - $this->assertEquals('alias1.field = :field AND alias2.field > :alias2_field', (string) $qb->getDQLPart('where')); - $this->assertSame('value1', $qb->getParameter('field')->getValue()); - $this->assertSame('value2', $qb->getParameter('alias2_field')->getValue()); + self::assertEquals('alias1.field = :field AND alias2.field > :alias2_field', (string) $qb->getDQLPart('where')); + self::assertSame('value1', $qb->getParameter('field')->getValue()); + self::assertSame('value2', $qb->getParameter('alias2_field')->getValue()); } /** @@ -916,9 +916,9 @@ public function testAddCriteriaWhereWithDefaultAndJoinAlias() $qb->addCriteria($criteria); - $this->assertEquals('alias1.field = :alias1_field AND alias2.field > :alias2_field', (string) $qb->getDQLPart('where')); - $this->assertSame('value1', $qb->getParameter('alias1_field')->getValue()); - $this->assertSame('value2', $qb->getParameter('alias2_field')->getValue()); + self::assertEquals('alias1.field = :alias1_field AND alias2.field > :alias2_field', (string) $qb->getDQLPart('where')); + self::assertSame('value1', $qb->getParameter('alias1_field')->getValue()); + self::assertSame('value2', $qb->getParameter('alias2_field')->getValue()); } /** @@ -937,10 +937,10 @@ public function testAddCriteriaWhereOnJoinAliasWithDuplicateFields() $qb->addCriteria($criteria); - $this->assertEquals('(alias1.field = :alias1_field AND alias2.field > :alias2_field) AND alias2.field < :alias2_field_2', (string) $qb->getDQLPart('where')); - $this->assertSame('value1', $qb->getParameter('alias1_field')->getValue()); - $this->assertSame('value2', $qb->getParameter('alias2_field')->getValue()); - $this->assertSame('value3', $qb->getParameter('alias2_field_2')->getValue()); + self::assertEquals('(alias1.field = :alias1_field AND alias2.field > :alias2_field) AND alias2.field < :alias2_field_2', (string) $qb->getDQLPart('where')); + self::assertSame('value1', $qb->getParameter('alias1_field')->getValue()); + self::assertSame('value2', $qb->getParameter('alias2_field')->getValue()); + self::assertSame('value3', $qb->getParameter('alias2_field_2')->getValue()); } @@ -956,9 +956,9 @@ public function testParametersAreCloned() $copy = clone $originalQb; $copy->setParameter('parameter2', 'value2'); - $this->assertCount(1, $originalQb->getParameters()); - $this->assertSame('value1', $copy->getParameter('parameter1')->getValue()); - $this->assertSame('value2', $copy->getParameter('parameter2')->getValue()); + self::assertCount(1, $originalQb->getParameters()); + self::assertSame('value1', $copy->getParameter('parameter1')->getValue()); + self::assertSame('value2', $copy->getParameter('parameter2')->getValue()); } public function testGetRootAlias() @@ -967,7 +967,7 @@ public function testGetRootAlias() ->select('u') ->from(CmsUser::class, 'u'); - $this->assertEquals('u', $qb->getRootAlias()); + self::assertEquals('u', $qb->getRootAlias()); } public function testGetRootAliases() @@ -976,7 +976,7 @@ public function testGetRootAliases() ->select('u') ->from(CmsUser::class, 'u'); - $this->assertEquals(['u'], $qb->getRootAliases()); + self::assertEquals(['u'], $qb->getRootAliases()); } public function testGetRootEntities() @@ -985,7 +985,7 @@ public function testGetRootEntities() ->select('u') ->from(CmsUser::class, 'u'); - $this->assertEquals([CmsUser::class], $qb->getRootEntities()); + self::assertEquals([CmsUser::class], $qb->getRootEntities()); } public function testGetSeveralRootAliases() @@ -995,8 +995,8 @@ public function testGetSeveralRootAliases() ->from(CmsUser::class, 'u') ->from(CmsUser::class, 'u2'); - $this->assertEquals(['u', 'u2'], $qb->getRootAliases()); - $this->assertEquals('u', $qb->getRootAlias()); + self::assertEquals(['u', 'u2'], $qb->getRootAliases()); + self::assertEquals('u', $qb->getRootAlias()); } public function testBCAddJoinWithoutRootAlias() @@ -1006,7 +1006,7 @@ public function testBCAddJoinWithoutRootAlias() ->from(CmsUser::class, 'u') ->add('join', ['INNER JOIN u.groups g'], true); - $this->assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.groups g', $qb->getDQL()); + self::assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.groups g', $qb->getDQL()); } /** @@ -1020,7 +1020,7 @@ public function testEmptyStringLiteral() ->from(CmsUser::class, 'u') ->where($expr->eq('u.username', $expr->literal(""))); - $this->assertEquals("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = ''", $qb->getDQL()); + self::assertEquals("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = ''", $qb->getDQL()); } /** @@ -1034,7 +1034,7 @@ public function testEmptyNumericLiteral() ->from(CmsUser::class, 'u') ->where($expr->eq('u.username', $expr->literal(0))); - $this->assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = 0', $qb->getDQL()); + self::assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = 0', $qb->getDQL()); } /** @@ -1046,7 +1046,7 @@ public function testAddFromString() ->add('select', 'u') ->add('from', CmsUser::class . ' u'); - $this->assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u', $qb->getDQL()); + self::assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u', $qb->getDQL()); } /** @@ -1059,7 +1059,7 @@ public function testAddDistinct() ->distinct() ->from(CmsUser::class, 'u'); - $this->assertEquals('SELECT DISTINCT u FROM Doctrine\Tests\Models\CMS\CmsUser u', $qb->getDQL()); + self::assertEquals('SELECT DISTINCT u FROM Doctrine\Tests\Models\CMS\CmsUser u', $qb->getDQL()); } /** @@ -1082,17 +1082,17 @@ public function testSecondLevelCacheQueryBuilderOptions() ->select('s') ->from(State::class, 's'); - $this->assertFalse($defaultQueryBuilder->isCacheable()); - $this->assertEquals(0, $defaultQueryBuilder->getLifetime()); - $this->assertNull($defaultQueryBuilder->getCacheRegion()); - $this->assertNull($defaultQueryBuilder->getCacheMode()); + self::assertFalse($defaultQueryBuilder->isCacheable()); + self::assertEquals(0, $defaultQueryBuilder->getLifetime()); + self::assertNull($defaultQueryBuilder->getCacheRegion()); + self::assertNull($defaultQueryBuilder->getCacheMode()); $defaultQuery = $defaultQueryBuilder->getQuery(); - $this->assertFalse($defaultQuery->isCacheable()); - $this->assertEquals(0, $defaultQuery->getLifetime()); - $this->assertNull($defaultQuery->getCacheRegion()); - $this->assertNull($defaultQuery->getCacheMode()); + self::assertFalse($defaultQuery->isCacheable()); + self::assertEquals(0, $defaultQuery->getLifetime()); + self::assertNull($defaultQuery->getCacheRegion()); + self::assertNull($defaultQuery->getCacheMode()); $builder = $this->_em->createQueryBuilder() ->select('s') @@ -1102,17 +1102,17 @@ public function testSecondLevelCacheQueryBuilderOptions() ->setCacheMode(Cache::MODE_REFRESH) ->from(State::class, 's'); - $this->assertTrue($builder->isCacheable()); - $this->assertEquals(123, $builder->getLifetime()); - $this->assertEquals('foo_reg', $builder->getCacheRegion()); - $this->assertEquals(Cache::MODE_REFRESH, $builder->getCacheMode()); + self::assertTrue($builder->isCacheable()); + self::assertEquals(123, $builder->getLifetime()); + self::assertEquals('foo_reg', $builder->getCacheRegion()); + self::assertEquals(Cache::MODE_REFRESH, $builder->getCacheMode()); $query = $builder->getQuery(); - $this->assertTrue($query->isCacheable()); - $this->assertEquals(123, $query->getLifetime()); - $this->assertEquals('foo_reg', $query->getCacheRegion()); - $this->assertEquals(Cache::MODE_REFRESH, $query->getCacheMode()); + self::assertTrue($query->isCacheable()); + self::assertEquals(123, $query->getLifetime()); + self::assertEquals('foo_reg', $query->getCacheRegion()); + self::assertEquals(Cache::MODE_REFRESH, $query->getCacheMode()); } /** @@ -1134,7 +1134,7 @@ public function testRebuildsFromParts() } $dql2 = $qb2->getDQL(); - $this->assertEquals($dql, $dql2); + self::assertEquals($dql, $dql2); } public function testGetAllAliasesWithNoJoins() @@ -1144,7 +1144,7 @@ public function testGetAllAliasesWithNoJoins() $aliases = $qb->getAllAliases(); - $this->assertEquals(['u'], $aliases); + self::assertEquals(['u'], $aliases); } public function testGetAllAliasesWithJoins() @@ -1156,6 +1156,6 @@ public function testGetAllAliasesWithJoins() $aliases = $qb->getAllAliases(); - $this->assertEquals(['u', 'g'], $aliases); + self::assertEquals(['u', 'g'], $aliases); } } diff --git a/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php b/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php index 85a63404618..9a237bdd695 100644 --- a/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php @@ -54,7 +54,7 @@ public function testCreatesRepositoryFromDefaultRepositoryClass() ->method('getClassMetadata') ->will($this->returnCallback([$this, 'buildClassMetadata'])); - $this->assertInstanceOf( + self::assertInstanceOf( DDC869PaymentRepository::class, $this->repositoryFactory->getRepository($this->entityManager, __CLASS__) ); @@ -67,7 +67,7 @@ public function testCreatedRepositoriesAreCached() ->method('getClassMetadata') ->will($this->returnCallback([$this, 'buildClassMetadata'])); - $this->assertSame( + self::assertSame( $this->repositoryFactory->getRepository($this->entityManager, __CLASS__), $this->repositoryFactory->getRepository($this->entityManager, __CLASS__) ); @@ -83,7 +83,7 @@ public function testCreatesRepositoryFromCustomClassMetadata() ->method('getClassMetadata') ->will($this->returnValue($customMetadata)); - $this->assertInstanceOf( + self::assertInstanceOf( DDC753DefaultRepository::class, $this->repositoryFactory->getRepository($this->entityManager, __CLASS__) ); @@ -105,10 +105,10 @@ public function testCachesDistinctRepositoriesPerDistinctEntityManager() $repo1 = $this->repositoryFactory->getRepository($em1, __CLASS__); $repo2 = $this->repositoryFactory->getRepository($em2, __CLASS__); - $this->assertSame($repo1, $this->repositoryFactory->getRepository($em1, __CLASS__)); - $this->assertSame($repo2, $this->repositoryFactory->getRepository($em2, __CLASS__)); + self::assertSame($repo1, $this->repositoryFactory->getRepository($em1, __CLASS__)); + self::assertSame($repo2, $this->repositoryFactory->getRepository($em2, __CLASS__)); - $this->assertNotSame($repo1, $repo2); + self::assertNotSame($repo1, $repo2); } /** diff --git a/tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php b/tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php index db4da0b5d88..516b2890091 100644 --- a/tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php @@ -48,10 +48,10 @@ public function testAttachEntityListeners() $metadata = $this->factory->getMetadataFor(AttachEntityListenersListenerTestFooEntity::class); - $this->assertArrayHasKey('postLoad', $metadata->entityListeners); - $this->assertCount(1, $metadata->entityListeners['postLoad']); - $this->assertEquals('postLoadHandler', $metadata->entityListeners['postLoad'][0]['method']); - $this->assertEquals(AttachEntityListenersListenerTestListener::class, $metadata->entityListeners['postLoad'][0]['class']); + self::assertArrayHasKey('postLoad', $metadata->entityListeners); + self::assertCount(1, $metadata->entityListeners['postLoad']); + self::assertEquals('postLoadHandler', $metadata->entityListeners['postLoad'][0]['method']); + self::assertEquals(AttachEntityListenersListenerTestListener::class, $metadata->entityListeners['postLoad'][0]['class']); } public function testAttachToExistingEntityListeners() @@ -71,23 +71,23 @@ public function testAttachToExistingEntityListeners() $metadata = $this->factory->getMetadataFor(AttachEntityListenersListenerTestBarEntity::class); - $this->assertArrayHasKey('postPersist', $metadata->entityListeners); - $this->assertArrayHasKey('prePersist', $metadata->entityListeners); + self::assertArrayHasKey('postPersist', $metadata->entityListeners); + self::assertArrayHasKey('prePersist', $metadata->entityListeners); - $this->assertCount(2, $metadata->entityListeners['prePersist']); - $this->assertCount(2, $metadata->entityListeners['postPersist']); + self::assertCount(2, $metadata->entityListeners['prePersist']); + self::assertCount(2, $metadata->entityListeners['postPersist']); - $this->assertEquals('prePersist', $metadata->entityListeners['prePersist'][0]['method']); - $this->assertEquals(AttachEntityListenersListenerTestListener::class, $metadata->entityListeners['prePersist'][0]['class']); + self::assertEquals('prePersist', $metadata->entityListeners['prePersist'][0]['method']); + self::assertEquals(AttachEntityListenersListenerTestListener::class, $metadata->entityListeners['prePersist'][0]['class']); - $this->assertEquals('prePersist', $metadata->entityListeners['prePersist'][1]['method']); - $this->assertEquals(AttachEntityListenersListenerTestListener2::class, $metadata->entityListeners['prePersist'][1]['class']); + self::assertEquals('prePersist', $metadata->entityListeners['prePersist'][1]['method']); + self::assertEquals(AttachEntityListenersListenerTestListener2::class, $metadata->entityListeners['prePersist'][1]['class']); - $this->assertEquals('postPersist', $metadata->entityListeners['postPersist'][0]['method']); - $this->assertEquals(AttachEntityListenersListenerTestListener::class, $metadata->entityListeners['postPersist'][0]['class']); + self::assertEquals('postPersist', $metadata->entityListeners['postPersist'][0]['method']); + self::assertEquals(AttachEntityListenersListenerTestListener::class, $metadata->entityListeners['postPersist'][0]['class']); - $this->assertEquals('postPersistHandler', $metadata->entityListeners['postPersist'][1]['method']); - $this->assertEquals(AttachEntityListenersListenerTestListener2::class, $metadata->entityListeners['postPersist'][1]['class']); + self::assertEquals('postPersistHandler', $metadata->entityListeners['postPersist'][1]['method']); + self::assertEquals(AttachEntityListenersListenerTestListener2::class, $metadata->entityListeners['postPersist'][1]['class']); } /** diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheCollectionRegionCommandTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheCollectionRegionCommandTest.php index 5ac2f97527d..c0d4a3d1267 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheCollectionRegionCommandTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheCollectionRegionCommandTest.php @@ -53,7 +53,7 @@ public function testClearAllRegion() ], ['decorated' => false] ); - $this->assertEquals('Clearing all second-level cache collection regions' . PHP_EOL, $tester->getDisplay()); + self::assertEquals('Clearing all second-level cache collection regions' . PHP_EOL, $tester->getDisplay()); } public function testClearByOwnerEntityClassName() @@ -68,7 +68,7 @@ public function testClearByOwnerEntityClassName() ], ['decorated' => false] ); - $this->assertEquals('Clearing second-level cache for collection "Doctrine\Tests\Models\Cache\State#cities"' . PHP_EOL, $tester->getDisplay()); + self::assertEquals('Clearing second-level cache for collection "Doctrine\Tests\Models\Cache\State#cities"' . PHP_EOL, $tester->getDisplay()); } public function testClearCacheEntryName() @@ -84,7 +84,7 @@ public function testClearCacheEntryName() ], ['decorated' => false] ); - $this->assertEquals('Clearing second-level cache entry for collection "Doctrine\Tests\Models\Cache\State#cities" owner entity identified by "1"' . PHP_EOL, $tester->getDisplay()); + self::assertEquals('Clearing second-level cache entry for collection "Doctrine\Tests\Models\Cache\State#cities" owner entity identified by "1"' . PHP_EOL, $tester->getDisplay()); } public function testFlushRegionName() @@ -100,6 +100,6 @@ public function testFlushRegionName() ], ['decorated' => false] ); - $this->assertEquals('Flushing cache provider configured for "Doctrine\Tests\Models\Cache\State#cities"' . PHP_EOL, $tester->getDisplay()); + self::assertEquals('Flushing cache provider configured for "Doctrine\Tests\Models\Cache\State#cities"' . PHP_EOL, $tester->getDisplay()); } } diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheEntityRegionCommandTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheEntityRegionCommandTest.php index 3546a3116df..b2e2d85a5e7 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheEntityRegionCommandTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheEntityRegionCommandTest.php @@ -53,7 +53,7 @@ public function testClearAllRegion() ], ['decorated' => false] ); - $this->assertEquals('Clearing all second-level cache entity regions' . PHP_EOL, $tester->getDisplay()); + self::assertEquals('Clearing all second-level cache entity regions' . PHP_EOL, $tester->getDisplay()); } public function testClearByEntityClassName() @@ -67,7 +67,7 @@ public function testClearByEntityClassName() ], ['decorated' => false] ); - $this->assertEquals('Clearing second-level cache for entity "Doctrine\Tests\Models\Cache\Country"' . PHP_EOL, $tester->getDisplay()); + self::assertEquals('Clearing second-level cache for entity "Doctrine\Tests\Models\Cache\Country"' . PHP_EOL, $tester->getDisplay()); } public function testClearCacheEntryName() @@ -82,7 +82,7 @@ public function testClearCacheEntryName() ], ['decorated' => false] ); - $this->assertEquals('Clearing second-level cache entry for entity "Doctrine\Tests\Models\Cache\Country" identified by "1"' . PHP_EOL, $tester->getDisplay()); + self::assertEquals('Clearing second-level cache entry for entity "Doctrine\Tests\Models\Cache\Country" identified by "1"' . PHP_EOL, $tester->getDisplay()); } public function testFlushRegionName() @@ -97,6 +97,6 @@ public function testFlushRegionName() ], ['decorated' => false] ); - $this->assertEquals('Flushing cache provider configured for entity named "Doctrine\Tests\Models\Cache\Country"' . PHP_EOL, $tester->getDisplay()); + self::assertEquals('Flushing cache provider configured for entity named "Doctrine\Tests\Models\Cache\Country"' . PHP_EOL, $tester->getDisplay()); } } diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheQueryRegionCommandTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheQueryRegionCommandTest.php index 0d296bf553f..7f513d9e34e 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheQueryRegionCommandTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheQueryRegionCommandTest.php @@ -52,7 +52,7 @@ public function testClearAllRegion() ], ['decorated' => false] ); - $this->assertEquals('Clearing all second-level cache query regions' . PHP_EOL, $tester->getDisplay()); + self::assertEquals('Clearing all second-level cache query regions' . PHP_EOL, $tester->getDisplay()); } public function testClearDefaultRegionName() @@ -66,7 +66,7 @@ public function testClearDefaultRegionName() ], ['decorated' => false] ); - $this->assertEquals('Clearing second-level cache query region named "query_cache_region"' . PHP_EOL, $tester->getDisplay()); + self::assertEquals('Clearing second-level cache query region named "query_cache_region"' . PHP_EOL, $tester->getDisplay()); } public function testClearByRegionName() @@ -80,7 +80,7 @@ public function testClearByRegionName() ], ['decorated' => false] ); - $this->assertEquals('Clearing second-level cache query region named "my_region"' . PHP_EOL, $tester->getDisplay()); + self::assertEquals('Clearing second-level cache query region named "my_region"' . PHP_EOL, $tester->getDisplay()); } public function testFlushRegionName() @@ -95,6 +95,6 @@ public function testFlushRegionName() ], ['decorated' => false] ); - $this->assertEquals('Flushing cache provider configured for second-level cache query region named "my_region"' . PHP_EOL, $tester->getDisplay()); + self::assertEquals('Flushing cache provider configured for second-level cache query region named "my_region"' . PHP_EOL, $tester->getDisplay()); } } diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/Command/GenerateRepositoriesCommandTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/Command/GenerateRepositoriesCommandTest.php index 45bdfa3862f..12cf2c144c3 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Console/Command/GenerateRepositoriesCommandTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Console/Command/GenerateRepositoriesCommandTest.php @@ -88,20 +88,20 @@ public function testGenerateRepositories() $cname = 'Doctrine\Tests\Models\DDC3231\DDC3231User1Repository'; $fname = str_replace('\\', DIRECTORY_SEPARATOR, $cname) . '.php'; - $this->assertFileExists($this->path . DIRECTORY_SEPARATOR . $fname); - $this->assertFileExists($this->path . DIRECTORY_SEPARATOR . 'DDC3231User1NoNamespaceRepository.php'); + self::assertFileExists($this->path . DIRECTORY_SEPARATOR . $fname); + self::assertFileExists($this->path . DIRECTORY_SEPARATOR . 'DDC3231User1NoNamespaceRepository.php'); require $this->path . DIRECTORY_SEPARATOR . $fname; require $this->path . DIRECTORY_SEPARATOR . 'DDC3231User1NoNamespaceRepository.php'; - $this->assertTrue(class_exists($cname)); - $this->assertTrue(class_exists('DDC3231User1NoNamespaceRepository')); + self::assertTrue(class_exists($cname)); + self::assertTrue(class_exists('DDC3231User1NoNamespaceRepository')); $repo1 = new \ReflectionClass($cname); $repo2 = new \ReflectionClass('DDC3231User1NoNamespaceRepository'); - $this->assertSame(EntityRepository::class, $repo1->getParentClass()->getName()); - $this->assertSame(EntityRepository::class, $repo2->getParentClass()->getName()); + self::assertSame(EntityRepository::class, $repo1->getParentClass()->getName()); + self::assertSame(EntityRepository::class, $repo2->getParentClass()->getName()); } public function testGenerateRepositoriesCustomDefaultRepository() @@ -111,20 +111,20 @@ public function testGenerateRepositoriesCustomDefaultRepository() $cname = 'Doctrine\Tests\Models\DDC3231\DDC3231User2Repository'; $fname = str_replace('\\', DIRECTORY_SEPARATOR, $cname) . '.php'; - $this->assertFileExists($this->path . DIRECTORY_SEPARATOR . $fname); - $this->assertFileExists($this->path . DIRECTORY_SEPARATOR . 'DDC3231User2NoNamespaceRepository.php'); + self::assertFileExists($this->path . DIRECTORY_SEPARATOR . $fname); + self::assertFileExists($this->path . DIRECTORY_SEPARATOR . 'DDC3231User2NoNamespaceRepository.php'); require $this->path . DIRECTORY_SEPARATOR . $fname; require $this->path . DIRECTORY_SEPARATOR . 'DDC3231User2NoNamespaceRepository.php'; - $this->assertTrue(class_exists($cname)); - $this->assertTrue(class_exists('DDC3231User2NoNamespaceRepository')); + self::assertTrue(class_exists($cname)); + self::assertTrue(class_exists('DDC3231User2NoNamespaceRepository')); $repo1 = new \ReflectionClass($cname); $repo2 = new \ReflectionClass('DDC3231User2NoNamespaceRepository'); - $this->assertSame(DDC3231EntityRepository::class, $repo1->getParentClass()->getName()); - $this->assertSame(DDC3231EntityRepository::class, $repo2->getParentClass()->getName()); + self::assertSame(DDC3231EntityRepository::class, $repo1->getParentClass()->getName()); + self::assertSame(DDC3231EntityRepository::class, $repo2->getParentClass()->getName()); } /** diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/Command/InfoCommandTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/Command/InfoCommandTest.php index a27fb90d79a..c12d06d9fee 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Console/Command/InfoCommandTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Console/Command/InfoCommandTest.php @@ -49,7 +49,7 @@ public function testListAllClasses() { $this->tester->execute(['command' => $this->command->getName()]); - $this->assertContains(AttractionInfo::class, $this->tester->getDisplay()); - $this->assertContains(City::class, $this->tester->getDisplay()); + self::assertContains(AttractionInfo::class, $this->tester->getDisplay()); + self::assertContains(City::class, $this->tester->getDisplay()); } } diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/Command/MappingDescribeCommandTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/Command/MappingDescribeCommandTest.php index 437f521e3d7..d83e17005e7 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Console/Command/MappingDescribeCommandTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Console/Command/MappingDescribeCommandTest.php @@ -61,8 +61,8 @@ public function testShowSpecificFuzzySingle() ); $display = $this->tester->getDisplay(); - $this->assertContains(AttractionInfo::class, $display); - $this->assertContains('Root entity name', $display); + self::assertContains(AttractionInfo::class, $display); + self::assertContains('Root entity name', $display); } /** diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/Command/RunDqlCommandTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/Command/RunDqlCommandTest.php index e2e68bd7e28..c328f55368b 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Console/Command/RunDqlCommandTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Console/Command/RunDqlCommandTest.php @@ -54,7 +54,7 @@ protected function setUp() public function testCommandName() { - $this->assertSame($this->command, $this->application->get('orm:run-dql')); + self::assertSame($this->command, $this->application->get('orm:run-dql')); } public function testWillRunQuery() @@ -62,7 +62,7 @@ public function testWillRunQuery() $this->_em->persist(new DateTimeModel()); $this->_em->flush(); - $this->assertSame( + self::assertSame( 0, $this->tester->execute( [ @@ -72,7 +72,7 @@ public function testWillRunQuery() ) ); - $this->assertContains(DateTimeModel::class, $this->tester->getDisplay()); + self::assertContains(DateTimeModel::class, $this->tester->getDisplay()); } public function testWillShowQuery() @@ -80,7 +80,7 @@ public function testWillShowQuery() $this->_em->persist(new DateTimeModel()); $this->_em->flush(); - $this->assertSame( + self::assertSame( 0, $this->tester->execute( [ @@ -91,6 +91,6 @@ public function testWillShowQuery() ) ); - $this->assertStringMatchesFormat('%Astring%sSELECT %a', $this->tester->getDisplay()); + self::assertStringMatchesFormat('%Astring%sSELECT %a', $this->tester->getDisplay()); } } diff --git a/tests/Doctrine/Tests/ORM/Tools/ConvertDoctrine1SchemaTest.php b/tests/Doctrine/Tests/ORM/Tools/ConvertDoctrine1SchemaTest.php index a7941c8a722..35ab6223577 100644 --- a/tests/Doctrine/Tests/ORM/Tools/ConvertDoctrine1SchemaTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/ConvertDoctrine1SchemaTest.php @@ -53,8 +53,8 @@ public function testTest() $exporter->setMetadata($converter->getMetadata()); $exporter->export(); - $this->assertTrue(file_exists(__DIR__ . '/convert/User.dcm.yml')); - $this->assertTrue(file_exists(__DIR__ . '/convert/Profile.dcm.yml')); + self::assertTrue(file_exists(__DIR__ . '/convert/User.dcm.yml')); + self::assertTrue(file_exists(__DIR__ . '/convert/Profile.dcm.yml')); $metadataDriver = new YamlDriver(__DIR__ . '/convert'); $em = $this->_createEntityManager($metadataDriver); @@ -64,19 +64,19 @@ public function testTest() $profileClass = $cmf->getMetadataFor('Profile'); $userClass = $cmf->getMetadataFor('User'); - $this->assertEquals(2, count($metadata)); - $this->assertEquals('Profile', $profileClass->name); - $this->assertEquals('User', $userClass->name); - $this->assertEquals(4, count($profileClass->fieldMappings)); - $this->assertEquals(5, count($userClass->fieldMappings)); - $this->assertEquals('text', $userClass->fieldMappings['clob']['type']->getName()); - $this->assertEquals('test_alias', $userClass->fieldMappings['theAlias']['columnName']); - $this->assertEquals('theAlias', $userClass->fieldMappings['theAlias']['fieldName']); + self::assertEquals(2, count($metadata)); + self::assertEquals('Profile', $profileClass->name); + self::assertEquals('User', $userClass->name); + self::assertEquals(4, count($profileClass->fieldMappings)); + self::assertEquals(5, count($userClass->fieldMappings)); + self::assertEquals('text', $userClass->fieldMappings['clob']['type']->getName()); + self::assertEquals('test_alias', $userClass->fieldMappings['theAlias']['columnName']); + self::assertEquals('theAlias', $userClass->fieldMappings['theAlias']['fieldName']); - $this->assertEquals('Profile', $profileClass->associationMappings['User']['sourceEntity']); - $this->assertEquals('User', $profileClass->associationMappings['User']['targetEntity']); + self::assertEquals('Profile', $profileClass->associationMappings['User']['sourceEntity']); + self::assertEquals('User', $profileClass->associationMappings['User']['targetEntity']); - $this->assertEquals('username', $userClass->table['uniqueConstraints']['username']['columns'][0]); + self::assertEquals('username', $userClass->table['uniqueConstraints']['username']['columns'][0]); } public function tearDown() diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index d634b9616f3..be120921521 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -216,7 +216,7 @@ private function loadEntityClass(ClassMetadata $metadata) $className = basename(str_replace('\\', '/', $metadata->name)); $path = $this->_tmpDir . '/' . $this->_namespace . '/' . $className . '.php'; - $this->assertFileExists($path); + self::assertFileExists($path); require_once $path; } @@ -273,59 +273,59 @@ public function testGeneratedEntityClass() $metadata = $this->generateBookEntityFixture(['isbn' => $isbnMetadata]); $book = $this->newInstance($metadata); - $this->assertTrue(class_exists($metadata->name), "Class does not exist."); - $this->assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', '__construct'), "EntityGeneratorBook::__construct() missing."); - $this->assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'getId'), "EntityGeneratorBook::getId() missing."); - $this->assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'setName'), "EntityGeneratorBook::setName() missing."); - $this->assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'getName'), "EntityGeneratorBook::getName() missing."); - $this->assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'setStatus'), "EntityGeneratorBook::setStatus() missing."); - $this->assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'getStatus'), "EntityGeneratorBook::getStatus() missing."); - $this->assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'setAuthor'), "EntityGeneratorBook::setAuthor() missing."); - $this->assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'getAuthor'), "EntityGeneratorBook::getAuthor() missing."); - $this->assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'getComments'), "EntityGeneratorBook::getComments() missing."); - $this->assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'addComment'), "EntityGeneratorBook::addComment() missing."); - $this->assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'removeComment'), "EntityGeneratorBook::removeComment() missing."); - $this->assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'setIsbn'), "EntityGeneratorBook::setIsbn() missing."); - $this->assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'getIsbn'), "EntityGeneratorBook::getIsbn() missing."); + self::assertTrue(class_exists($metadata->name), "Class does not exist."); + self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', '__construct'), "EntityGeneratorBook::__construct() missing."); + self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'getId'), "EntityGeneratorBook::getId() missing."); + self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'setName'), "EntityGeneratorBook::setName() missing."); + self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'getName'), "EntityGeneratorBook::getName() missing."); + self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'setStatus'), "EntityGeneratorBook::setStatus() missing."); + self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'getStatus'), "EntityGeneratorBook::getStatus() missing."); + self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'setAuthor'), "EntityGeneratorBook::setAuthor() missing."); + self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'getAuthor'), "EntityGeneratorBook::getAuthor() missing."); + self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'getComments'), "EntityGeneratorBook::getComments() missing."); + self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'addComment'), "EntityGeneratorBook::addComment() missing."); + self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'removeComment'), "EntityGeneratorBook::removeComment() missing."); + self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'setIsbn'), "EntityGeneratorBook::setIsbn() missing."); + self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'getIsbn'), "EntityGeneratorBook::getIsbn() missing."); $reflClass = new \ReflectionClass($metadata->name); - $this->assertCount(6, $reflClass->getProperties()); - $this->assertCount(15, $reflClass->getMethods()); + self::assertCount(6, $reflClass->getProperties()); + self::assertCount(15, $reflClass->getMethods()); - $this->assertEquals('published', $book->getStatus()); + self::assertEquals('published', $book->getStatus()); $book->setName('Jonathan H. Wage'); - $this->assertEquals('Jonathan H. Wage', $book->getName()); + self::assertEquals('Jonathan H. Wage', $book->getName()); $reflMethod = new \ReflectionMethod($metadata->name, 'addComment'); $addCommentParameters = $reflMethod->getParameters(); - $this->assertEquals('comment', $addCommentParameters[0]->getName()); + self::assertEquals('comment', $addCommentParameters[0]->getName()); $reflMethod = new \ReflectionMethod($metadata->name, 'removeComment'); $removeCommentParameters = $reflMethod->getParameters(); - $this->assertEquals('comment', $removeCommentParameters[0]->getName()); + self::assertEquals('comment', $removeCommentParameters[0]->getName()); $author = new EntityGeneratorAuthor(); $book->setAuthor($author); - $this->assertEquals($author, $book->getAuthor()); + self::assertEquals($author, $book->getAuthor()); $comment = new EntityGeneratorComment(); - $this->assertInstanceOf($metadata->name, $book->addComment($comment)); - $this->assertInstanceOf(ArrayCollection::class, $book->getComments()); - $this->assertEquals(new ArrayCollection([$comment]), $book->getComments()); - $this->assertInternalType('boolean', $book->removeComment($comment)); - $this->assertEquals(new ArrayCollection([]), $book->getComments()); + self::assertInstanceOf($metadata->name, $book->addComment($comment)); + self::assertInstanceOf(ArrayCollection::class, $book->getComments()); + self::assertEquals(new ArrayCollection([$comment]), $book->getComments()); + self::assertInternalType('boolean', $book->removeComment($comment)); + self::assertEquals(new ArrayCollection([]), $book->getComments()); $this->newInstance($isbnMetadata); $isbn = new $isbnMetadata->name(); $book->setIsbn($isbn); - $this->assertSame($isbn, $book->getIsbn()); + self::assertSame($isbn, $book->getIsbn()); $reflMethod = new \ReflectionMethod($metadata->name, 'setIsbn'); $reflParameters = $reflMethod->getParameters(); - $this->assertEquals($isbnMetadata->name, $reflParameters[0]->getClass()->name); + self::assertEquals($isbnMetadata->name, $reflParameters[0]->getClass()->name); } public function testEntityUpdatingWorks() @@ -339,31 +339,31 @@ public function testEntityUpdatingWorks() $this->_generator->writeEntityClass($metadata, $this->_tmpDir); - $this->assertFileExists($this->_tmpDir . "/" . $this->_namespace . "/EntityGeneratorBook.php~"); + self::assertFileExists($this->_tmpDir . "/" . $this->_namespace . "/EntityGeneratorBook.php~"); $book = $this->newInstance($metadata); $reflClass = new \ReflectionClass($metadata->name); - $this->assertTrue($reflClass->hasProperty('name'), "Regenerating keeps property 'name'."); - $this->assertTrue($reflClass->hasProperty('status'), "Regenerating keeps property 'status'."); - $this->assertTrue($reflClass->hasProperty('id'), "Regenerating keeps property 'id'."); - $this->assertTrue($reflClass->hasProperty('isbn'), "Regenerating keeps property 'isbn'."); - - $this->assertTrue($reflClass->hasProperty('test'), "Check for property test failed."); - $this->assertTrue($reflClass->getProperty('test')->isProtected(), "Check for protected property test failed."); - $this->assertTrue($reflClass->hasProperty('testEmbedded'), "Check for property testEmbedded failed."); - $this->assertTrue($reflClass->getProperty('testEmbedded')->isProtected(), "Check for protected property testEmbedded failed."); - $this->assertTrue($reflClass->hasMethod('getTest'), "Check for method 'getTest' failed."); - $this->assertTrue($reflClass->getMethod('getTest')->isPublic(), "Check for public visibility of method 'getTest' failed."); - $this->assertTrue($reflClass->hasMethod('setTest'), "Check for method 'setTest' failed."); - $this->assertTrue($reflClass->getMethod('setTest')->isPublic(), "Check for public visibility of method 'setTest' failed."); - $this->assertTrue($reflClass->hasMethod('getTestEmbedded'), "Check for method 'getTestEmbedded' failed."); - $this->assertTrue( + self::assertTrue($reflClass->hasProperty('name'), "Regenerating keeps property 'name'."); + self::assertTrue($reflClass->hasProperty('status'), "Regenerating keeps property 'status'."); + self::assertTrue($reflClass->hasProperty('id'), "Regenerating keeps property 'id'."); + self::assertTrue($reflClass->hasProperty('isbn'), "Regenerating keeps property 'isbn'."); + + self::assertTrue($reflClass->hasProperty('test'), "Check for property test failed."); + self::assertTrue($reflClass->getProperty('test')->isProtected(), "Check for protected property test failed."); + self::assertTrue($reflClass->hasProperty('testEmbedded'), "Check for property testEmbedded failed."); + self::assertTrue($reflClass->getProperty('testEmbedded')->isProtected(), "Check for protected property testEmbedded failed."); + self::assertTrue($reflClass->hasMethod('getTest'), "Check for method 'getTest' failed."); + self::assertTrue($reflClass->getMethod('getTest')->isPublic(), "Check for public visibility of method 'getTest' failed."); + self::assertTrue($reflClass->hasMethod('setTest'), "Check for method 'setTest' failed."); + self::assertTrue($reflClass->getMethod('setTest')->isPublic(), "Check for public visibility of method 'setTest' failed."); + self::assertTrue($reflClass->hasMethod('getTestEmbedded'), "Check for method 'getTestEmbedded' failed."); + self::assertTrue( $reflClass->getMethod('getTestEmbedded')->isPublic(), "Check for public visibility of method 'getTestEmbedded' failed." ); - $this->assertTrue($reflClass->hasMethod('setTestEmbedded'), "Check for method 'setTestEmbedded' failed."); - $this->assertTrue( + self::assertTrue($reflClass->hasMethod('setTestEmbedded'), "Check for method 'setTestEmbedded' failed."); + self::assertTrue( $reflClass->getMethod('setTestEmbedded')->isPublic(), "Check for public visibility of method 'setTestEmbedded' failed." ); @@ -384,19 +384,19 @@ public function testDoesNotRegenerateExistingMethodsWithDifferentCase() // Should not throw a PHP fatal error $this->_generator->writeEntityClass($metadata, $this->_tmpDir); - $this->assertFileExists($this->_tmpDir . "/" . $this->_namespace . "/EntityGeneratorBook.php~"); + self::assertFileExists($this->_tmpDir . "/" . $this->_namespace . "/EntityGeneratorBook.php~"); $this->newInstance($metadata); $reflClass = new \ReflectionClass($metadata->name); - $this->assertTrue($reflClass->hasProperty('status')); - $this->assertTrue($reflClass->hasProperty('STATUS')); - $this->assertTrue($reflClass->hasProperty('isbn')); - $this->assertTrue($reflClass->hasProperty('ISBN')); - $this->assertTrue($reflClass->hasMethod('getStatus')); - $this->assertTrue($reflClass->hasMethod('setStatus')); - $this->assertTrue($reflClass->hasMethod('getIsbn')); - $this->assertTrue($reflClass->hasMethod('setIsbn')); + self::assertTrue($reflClass->hasProperty('status')); + self::assertTrue($reflClass->hasProperty('STATUS')); + self::assertTrue($reflClass->hasProperty('isbn')); + self::assertTrue($reflClass->hasProperty('ISBN')); + self::assertTrue($reflClass->hasMethod('getStatus')); + self::assertTrue($reflClass->hasMethod('setStatus')); + self::assertTrue($reflClass->hasMethod('getIsbn')); + self::assertTrue($reflClass->hasMethod('setIsbn')); } /** @@ -408,21 +408,21 @@ public function testMethodDocBlockShouldStartWithBackSlash() $metadata = $this->generateBookEntityFixture(['isbn' => $embeddedMetadata]); $book = $this->newInstance($metadata); - $this->assertPhpDocVarType('\Doctrine\Common\Collections\Collection', new \ReflectionProperty($book, 'comments')); - $this->assertPhpDocReturnType('\Doctrine\Common\Collections\Collection', new \ReflectionMethod($book, 'getComments')); - $this->assertPhpDocParamType('\Doctrine\Tests\ORM\Tools\EntityGeneratorComment', new \ReflectionMethod($book, 'addComment')); - $this->assertPhpDocReturnType('EntityGeneratorBook', new \ReflectionMethod($book, 'addComment')); - $this->assertPhpDocParamType('\Doctrine\Tests\ORM\Tools\EntityGeneratorComment', new \ReflectionMethod($book, 'removeComment')); - $this->assertPhpDocReturnType('boolean', new \ReflectionMethod($book, 'removeComment')); + self::assertPhpDocVarType('\Doctrine\Common\Collections\Collection', new \ReflectionProperty($book, 'comments')); + self::assertPhpDocReturnType('\Doctrine\Common\Collections\Collection', new \ReflectionMethod($book, 'getComments')); + self::assertPhpDocParamType('\Doctrine\Tests\ORM\Tools\EntityGeneratorComment', new \ReflectionMethod($book, 'addComment')); + self::assertPhpDocReturnType('EntityGeneratorBook', new \ReflectionMethod($book, 'addComment')); + self::assertPhpDocParamType('\Doctrine\Tests\ORM\Tools\EntityGeneratorComment', new \ReflectionMethod($book, 'removeComment')); + self::assertPhpDocReturnType('boolean', new \ReflectionMethod($book, 'removeComment')); - $this->assertPhpDocVarType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor', new \ReflectionProperty($book, 'author')); - $this->assertPhpDocReturnType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor|null', new \ReflectionMethod($book, 'getAuthor')); - $this->assertPhpDocParamType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor|null', new \ReflectionMethod($book, 'setAuthor')); + self::assertPhpDocVarType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor', new \ReflectionProperty($book, 'author')); + self::assertPhpDocReturnType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor|null', new \ReflectionMethod($book, 'getAuthor')); + self::assertPhpDocParamType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor|null', new \ReflectionMethod($book, 'setAuthor')); $expectedClassName = '\\' . $embeddedMetadata->name; - $this->assertPhpDocVarType($expectedClassName, new \ReflectionProperty($book, 'isbn')); - $this->assertPhpDocReturnType($expectedClassName, new \ReflectionMethod($book, 'getIsbn')); - $this->assertPhpDocParamType($expectedClassName, new \ReflectionMethod($book, 'setIsbn')); + self::assertPhpDocVarType($expectedClassName, new \ReflectionProperty($book, 'isbn')); + self::assertPhpDocReturnType($expectedClassName, new \ReflectionMethod($book, 'getIsbn')); + self::assertPhpDocParamType($expectedClassName, new \ReflectionMethod($book, 'setIsbn')); } public function testEntityExtendsStdClass() @@ -431,11 +431,11 @@ public function testEntityExtendsStdClass() $metadata = $this->generateBookEntityFixture(); $book = $this->newInstance($metadata); - $this->assertInstanceOf('stdClass', $book); + self::assertInstanceOf('stdClass', $book); $metadata = $this->generateIsbnEmbeddableFixture(); $isbn = $this->newInstance($metadata); - $this->assertInstanceOf('stdClass', $isbn); + self::assertInstanceOf('stdClass', $isbn); } public function testLifecycleCallbacks() @@ -445,8 +445,8 @@ public function testLifecycleCallbacks() $book = $this->newInstance($metadata); $reflClass = new \ReflectionClass($metadata->name); - $this->assertTrue($reflClass->hasMethod('loading'), "Check for postLoad lifecycle callback."); - $this->assertTrue($reflClass->hasMethod('willBeRemoved'), "Check for preRemove lifecycle callback."); + self::assertTrue($reflClass->hasMethod('loading'), "Check for postLoad lifecycle callback."); + self::assertTrue($reflClass->hasMethod('willBeRemoved'), "Check for preRemove lifecycle callback."); } public function testLoadMetadata() @@ -464,15 +464,15 @@ public function testLoadMetadata() $driver = $this->createAnnotationDriver(); $driver->loadMetadataForClass($cm->name, $cm); - $this->assertEquals($cm->getTableName(), $metadata->getTableName()); - $this->assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); - $this->assertEquals($cm->identifier, $metadata->identifier); - $this->assertEquals($cm->idGenerator, $metadata->idGenerator); - $this->assertEquals($cm->customRepositoryClassName, $metadata->customRepositoryClassName); - $this->assertEquals($cm->embeddedClasses, $metadata->embeddedClasses); - $this->assertEquals($cm->isEmbeddedClass, $metadata->isEmbeddedClass); + self::assertEquals($cm->getTableName(), $metadata->getTableName()); + self::assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); + self::assertEquals($cm->identifier, $metadata->identifier); + self::assertEquals($cm->idGenerator, $metadata->idGenerator); + self::assertEquals($cm->customRepositoryClassName, $metadata->customRepositoryClassName); + self::assertEquals($cm->embeddedClasses, $metadata->embeddedClasses); + self::assertEquals($cm->isEmbeddedClass, $metadata->isEmbeddedClass); - $this->assertEquals(ClassMetadata::FETCH_EXTRA_LAZY, $cm->associationMappings['comments']['fetch']); + self::assertEquals(ClassMetadata::FETCH_EXTRA_LAZY, $cm->associationMappings['comments']['fetch']); $isbn = $this->newInstance($embeddedMetadata); @@ -481,8 +481,8 @@ public function testLoadMetadata() $driver->loadMetadataForClass($cm->name, $cm); - $this->assertEquals($cm->embeddedClasses, $embeddedMetadata->embeddedClasses); - $this->assertEquals($cm->isEmbeddedClass, $embeddedMetadata->isEmbeddedClass); + self::assertEquals($cm->embeddedClasses, $embeddedMetadata->embeddedClasses); + self::assertEquals($cm->isEmbeddedClass, $embeddedMetadata->isEmbeddedClass); } public function testLoadPrefixedMetadata() @@ -503,11 +503,11 @@ public function testLoadPrefixedMetadata() $driver->loadMetadataForClass($cm->name, $cm); - $this->assertEquals($cm->getTableName(), $metadata->getTableName()); - $this->assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); - $this->assertEquals($cm->identifier, $metadata->identifier); - $this->assertEquals($cm->idGenerator, $metadata->idGenerator); - $this->assertEquals($cm->customRepositoryClassName, $metadata->customRepositoryClassName); + self::assertEquals($cm->getTableName(), $metadata->getTableName()); + self::assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); + self::assertEquals($cm->identifier, $metadata->identifier); + self::assertEquals($cm->idGenerator, $metadata->idGenerator); + self::assertEquals($cm->customRepositoryClassName, $metadata->customRepositoryClassName); $isbn = $this->newInstance($embeddedMetadata); @@ -516,8 +516,8 @@ public function testLoadPrefixedMetadata() $driver->loadMetadataForClass($cm->name, $cm); - $this->assertEquals($cm->embeddedClasses, $embeddedMetadata->embeddedClasses); - $this->assertEquals($cm->isEmbeddedClass, $embeddedMetadata->isEmbeddedClass); + self::assertEquals($cm->embeddedClasses, $embeddedMetadata->embeddedClasses); + self::assertEquals($cm->isEmbeddedClass, $embeddedMetadata->isEmbeddedClass); } /** @@ -539,7 +539,7 @@ public function testMappedSuperclassAnnotationGeneration() $cm->initializeReflection(new RuntimeReflectionService); $driver->loadMetadataForClass($cm->name, $cm); - $this->assertTrue($cm->isMappedSuperclass); + self::assertTrue($cm->isMappedSuperclass); } /** @@ -555,7 +555,7 @@ public function testParseTokensInEntityFile($php, $classes) $p->setAccessible(true); $ret = $m->invoke($this->_generator, $php); - $this->assertEquals($classes, array_keys($p->getValue($this->_generator))); + self::assertEquals($classes, array_keys($p->getValue($this->_generator))); } /** @@ -579,17 +579,17 @@ public function testGenerateEntityWithSequenceGenerator() $filename = $this->_tmpDir . DIRECTORY_SEPARATOR . $this->_namespace . DIRECTORY_SEPARATOR . 'DDC1784Entity.php'; - $this->assertFileExists($filename); + self::assertFileExists($filename); require_once $filename; $reflection = new \ReflectionProperty($metadata->name, 'id'); $docComment = $reflection->getDocComment(); - $this->assertContains('@Id', $docComment); - $this->assertContains('@Column(name="id", type="integer")', $docComment); - $this->assertContains('@GeneratedValue(strategy="SEQUENCE")', $docComment); - $this->assertContains('@SequenceGenerator(sequenceName="DDC1784_ID_SEQ", allocationSize=1, initialValue=2)', $docComment); + self::assertContains('@Id', $docComment); + self::assertContains('@Column(name="id", type="integer")', $docComment); + self::assertContains('@GeneratedValue(strategy="SEQUENCE")', $docComment); + self::assertContains('@SequenceGenerator(sequenceName="DDC1784_ID_SEQ", allocationSize=1, initialValue=2)', $docComment); } /** @@ -623,18 +623,18 @@ public function testGenerateEntityWithMultipleInverseJoinColumns() $filename = $this->_tmpDir . DIRECTORY_SEPARATOR . $this->_namespace . DIRECTORY_SEPARATOR . 'DDC2079Entity.php'; - $this->assertFileExists($filename); + self::assertFileExists($filename); require_once $filename; $property = new \ReflectionProperty($metadata->name, 'centroCustos'); $docComment = $property->getDocComment(); //joinColumns - $this->assertContains('@JoinColumn(name="idorcamento", referencedColumnName="idorcamento"),', $docComment); - $this->assertContains('@JoinColumn(name="idunidade", referencedColumnName="idunidade")', $docComment); + self::assertContains('@JoinColumn(name="idorcamento", referencedColumnName="idorcamento"),', $docComment); + self::assertContains('@JoinColumn(name="idunidade", referencedColumnName="idunidade")', $docComment); //inverseJoinColumns - $this->assertContains('@JoinColumn(name="idcentrocusto", referencedColumnName="idcentrocusto"),', $docComment); - $this->assertContains('@JoinColumn(name="idpais", referencedColumnName="idpais")', $docComment); + self::assertContains('@JoinColumn(name="idcentrocusto", referencedColumnName="idcentrocusto"),', $docComment); + self::assertContains('@JoinColumn(name="idpais", referencedColumnName="idpais")', $docComment); } @@ -658,7 +658,7 @@ public function testGetInheritanceTypeString() $expected = preg_replace($pattern, '', $name); $actual = $method->invoke($this->_generator, $value); - $this->assertEquals($expected, $actual); + self::assertEquals($expected, $actual); } $this->expectException(\InvalidArgumentException::class); @@ -687,7 +687,7 @@ public function testGetChangeTrackingPolicyString() $expected = preg_replace($pattern, '', $name); $actual = $method->invoke($this->_generator, $value); - $this->assertEquals($expected, $actual); + self::assertEquals($expected, $actual); } $this->expectException(\InvalidArgumentException::class); @@ -716,7 +716,7 @@ public function testGetIdGeneratorTypeString() $expected = preg_replace($pattern, '', $name); $actual = $method->invoke($this->_generator, $value); - $this->assertEquals($expected, $actual); + self::assertEquals($expected, $actual); } $this->expectException(\InvalidArgumentException::class); @@ -735,7 +735,7 @@ public function testEntityTypeAlias(array $field) $metadata = $this->generateEntityTypeFixture($field); $path = $this->_tmpDir . '/'. $this->_namespace . '/EntityType.php'; - $this->assertFileExists($path); + self::assertFileExists($path); require_once $path; $entity = new $metadata->name; @@ -747,12 +747,12 @@ public function testEntityTypeAlias(array $field) $getter = "get" . ucfirst($name); $setter = "set" . ucfirst($name); - $this->assertPhpDocVarType($type, $reflClass->getProperty($name)); - $this->assertPhpDocParamType($type, $reflClass->getMethod($setter)); - $this->assertPhpDocReturnType($type, $reflClass->getMethod($getter)); + self::assertPhpDocVarType($type, $reflClass->getProperty($name)); + self::assertPhpDocParamType($type, $reflClass->getMethod($setter)); + self::assertPhpDocReturnType($type, $reflClass->getMethod($getter)); - $this->assertSame($entity, $entity->{$setter}($value)); - $this->assertEquals($value, $entity->{$getter}()); + self::assertSame($entity, $entity->{$setter}($value)); + self::assertEquals($value, $entity->{$getter}()); } /** @@ -771,14 +771,14 @@ public function testTraitPropertiesAndMethodsAreNotDuplicated() $this->_generator->writeEntityClass($metadata, $this->_tmpDir); - $this->assertFileExists($this->_tmpDir . "/" . $this->_namespace . "/DDC2372User.php"); + self::assertFileExists($this->_tmpDir . "/" . $this->_namespace . "/DDC2372User.php"); require $this->_tmpDir . "/" . $this->_namespace . "/DDC2372User.php"; $reflClass = new \ReflectionClass($metadata->name); - $this->assertSame($reflClass->hasProperty('address'), false); - $this->assertSame($reflClass->hasMethod('setAddress'), false); - $this->assertSame($reflClass->hasMethod('getAddress'), false); + self::assertSame($reflClass->hasProperty('address'), false); + self::assertSame($reflClass->hasMethod('setAddress'), false); + self::assertSame($reflClass->hasMethod('getAddress'), false); } /** @@ -797,14 +797,14 @@ public function testTraitPropertiesAndMethodsAreNotDuplicatedInChildClasses() $this->_generator->writeEntityClass($metadata, $this->_tmpDir); - $this->assertFileExists($this->_tmpDir . "/" . $this->_namespace . "/DDC2372Admin.php"); + self::assertFileExists($this->_tmpDir . "/" . $this->_namespace . "/DDC2372Admin.php"); require $this->_tmpDir . "/" . $this->_namespace . "/DDC2372Admin.php"; $reflClass = new \ReflectionClass($metadata->name); - $this->assertSame($reflClass->hasProperty('address'), false); - $this->assertSame($reflClass->hasMethod('setAddress'), false); - $this->assertSame($reflClass->hasMethod('getAddress'), false); + self::assertSame($reflClass->hasProperty('address'), false); + self::assertSame($reflClass->hasMethod('setAddress'), false); + self::assertSame($reflClass->hasMethod('getAddress'), false); } /** @@ -853,31 +853,31 @@ public function testMethodsAndPropertiesAreNotDuplicatedInChildClasses() // class _DDC1590User extends DDC1590Entity { ... } $rc2 = new \ReflectionClass($ns.'\_DDC1590User'); - $this->assertTrue($rc2->hasProperty('name')); - $this->assertTrue($rc2->hasProperty('id')); - $this->assertTrue($rc2->hasProperty('created_at')); + self::assertTrue($rc2->hasProperty('name')); + self::assertTrue($rc2->hasProperty('id')); + self::assertTrue($rc2->hasProperty('created_at')); - $this->assertTrue($rc2->hasMethod('getName')); - $this->assertTrue($rc2->hasMethod('setName')); - $this->assertTrue($rc2->hasMethod('getId')); - $this->assertFalse($rc2->hasMethod('setId')); - $this->assertTrue($rc2->hasMethod('getCreatedAt')); - $this->assertTrue($rc2->hasMethod('setCreatedAt')); + self::assertTrue($rc2->hasMethod('getName')); + self::assertTrue($rc2->hasMethod('setName')); + self::assertTrue($rc2->hasMethod('getId')); + self::assertFalse($rc2->hasMethod('setId')); + self::assertTrue($rc2->hasMethod('getCreatedAt')); + self::assertTrue($rc2->hasMethod('setCreatedAt')); // class __DDC1590User { ... } $rc3 = new \ReflectionClass($ns.'\__DDC1590User'); - $this->assertTrue($rc3->hasProperty('name')); - $this->assertFalse($rc3->hasProperty('id')); - $this->assertFalse($rc3->hasProperty('created_at')); + self::assertTrue($rc3->hasProperty('name')); + self::assertFalse($rc3->hasProperty('id')); + self::assertFalse($rc3->hasProperty('created_at')); - $this->assertTrue($rc3->hasMethod('getName')); - $this->assertTrue($rc3->hasMethod('setName')); - $this->assertFalse($rc3->hasMethod('getId')); - $this->assertFalse($rc3->hasMethod('setId')); - $this->assertFalse($rc3->hasMethod('getCreatedAt')); - $this->assertFalse($rc3->hasMethod('setCreatedAt')); + self::assertTrue($rc3->hasMethod('getName')); + self::assertTrue($rc3->hasMethod('setName')); + self::assertFalse($rc3->hasMethod('getId')); + self::assertFalse($rc3->hasMethod('setId')); + self::assertFalse($rc3->hasMethod('getCreatedAt')); + self::assertFalse($rc3->hasMethod('setCreatedAt')); } /** @@ -890,33 +890,33 @@ public function testGeneratedMutableEmbeddablesClass() $isbn = $this->newInstance($metadata); - $this->assertTrue(class_exists($metadata->name), "Class does not exist."); - $this->assertFalse(method_exists($metadata->name, '__construct'), "EntityGeneratorIsbn::__construct present."); - $this->assertTrue(method_exists($metadata->name, 'getPrefix'), "EntityGeneratorIsbn::getPrefix() missing."); - $this->assertTrue(method_exists($metadata->name, 'setPrefix'), "EntityGeneratorIsbn::setPrefix() missing."); - $this->assertTrue(method_exists($metadata->name, 'getGroupNumber'), "EntityGeneratorIsbn::getGroupNumber() missing."); - $this->assertTrue(method_exists($metadata->name, 'setGroupNumber'), "EntityGeneratorIsbn::setGroupNumber() missing."); - $this->assertTrue(method_exists($metadata->name, 'getPublisherNumber'), "EntityGeneratorIsbn::getPublisherNumber() missing."); - $this->assertTrue(method_exists($metadata->name, 'setPublisherNumber'), "EntityGeneratorIsbn::setPublisherNumber() missing."); - $this->assertTrue(method_exists($metadata->name, 'getTitleNumber'), "EntityGeneratorIsbn::getTitleNumber() missing."); - $this->assertTrue(method_exists($metadata->name, 'setTitleNumber'), "EntityGeneratorIsbn::setTitleNumber() missing."); - $this->assertTrue(method_exists($metadata->name, 'getCheckDigit'), "EntityGeneratorIsbn::getCheckDigit() missing."); - $this->assertTrue(method_exists($metadata->name, 'setCheckDigit'), "EntityGeneratorIsbn::setCheckDigit() missing."); - $this->assertTrue(method_exists($metadata->name, 'getTest'), "EntityGeneratorIsbn::getTest() missing."); - $this->assertTrue(method_exists($metadata->name, 'setTest'), "EntityGeneratorIsbn::setTest() missing."); + self::assertTrue(class_exists($metadata->name), "Class does not exist."); + self::assertFalse(method_exists($metadata->name, '__construct'), "EntityGeneratorIsbn::__construct present."); + self::assertTrue(method_exists($metadata->name, 'getPrefix'), "EntityGeneratorIsbn::getPrefix() missing."); + self::assertTrue(method_exists($metadata->name, 'setPrefix'), "EntityGeneratorIsbn::setPrefix() missing."); + self::assertTrue(method_exists($metadata->name, 'getGroupNumber'), "EntityGeneratorIsbn::getGroupNumber() missing."); + self::assertTrue(method_exists($metadata->name, 'setGroupNumber'), "EntityGeneratorIsbn::setGroupNumber() missing."); + self::assertTrue(method_exists($metadata->name, 'getPublisherNumber'), "EntityGeneratorIsbn::getPublisherNumber() missing."); + self::assertTrue(method_exists($metadata->name, 'setPublisherNumber'), "EntityGeneratorIsbn::setPublisherNumber() missing."); + self::assertTrue(method_exists($metadata->name, 'getTitleNumber'), "EntityGeneratorIsbn::getTitleNumber() missing."); + self::assertTrue(method_exists($metadata->name, 'setTitleNumber'), "EntityGeneratorIsbn::setTitleNumber() missing."); + self::assertTrue(method_exists($metadata->name, 'getCheckDigit'), "EntityGeneratorIsbn::getCheckDigit() missing."); + self::assertTrue(method_exists($metadata->name, 'setCheckDigit'), "EntityGeneratorIsbn::setCheckDigit() missing."); + self::assertTrue(method_exists($metadata->name, 'getTest'), "EntityGeneratorIsbn::getTest() missing."); + self::assertTrue(method_exists($metadata->name, 'setTest'), "EntityGeneratorIsbn::setTest() missing."); $isbn->setPrefix(978); - $this->assertSame(978, $isbn->getPrefix()); + self::assertSame(978, $isbn->getPrefix()); $this->newInstance($embeddedMetadata); $test = new $embeddedMetadata->name(); $isbn->setTest($test); - $this->assertSame($test, $isbn->getTest()); + self::assertSame($test, $isbn->getTest()); $reflMethod = new \ReflectionMethod($metadata->name, 'setTest'); $reflParameters = $reflMethod->getParameters(); - $this->assertEquals($embeddedMetadata->name, $reflParameters[0]->getClass()->name); + self::assertEquals($embeddedMetadata->name, $reflParameters[0]->getClass()->name); } /** @@ -931,20 +931,20 @@ public function testGeneratedImmutableEmbeddablesClass() $this->loadEntityClass($embeddedMetadata); $this->loadEntityClass($metadata); - $this->assertTrue(class_exists($metadata->name), "Class does not exist."); - $this->assertTrue(method_exists($metadata->name, '__construct'), "EntityGeneratorIsbn::__construct missing."); - $this->assertTrue(method_exists($metadata->name, 'getPrefix'), "EntityGeneratorIsbn::getPrefix() missing."); - $this->assertFalse(method_exists($metadata->name, 'setPrefix'), "EntityGeneratorIsbn::setPrefix() present."); - $this->assertTrue(method_exists($metadata->name, 'getGroupNumber'), "EntityGeneratorIsbn::getGroupNumber() missing."); - $this->assertFalse(method_exists($metadata->name, 'setGroupNumber'), "EntityGeneratorIsbn::setGroupNumber() present."); - $this->assertTrue(method_exists($metadata->name, 'getPublisherNumber'), "EntityGeneratorIsbn::getPublisherNumber() missing."); - $this->assertFalse(method_exists($metadata->name, 'setPublisherNumber'), "EntityGeneratorIsbn::setPublisherNumber() present."); - $this->assertTrue(method_exists($metadata->name, 'getTitleNumber'), "EntityGeneratorIsbn::getTitleNumber() missing."); - $this->assertFalse(method_exists($metadata->name, 'setTitleNumber'), "EntityGeneratorIsbn::setTitleNumber() present."); - $this->assertTrue(method_exists($metadata->name, 'getCheckDigit'), "EntityGeneratorIsbn::getCheckDigit() missing."); - $this->assertFalse(method_exists($metadata->name, 'setCheckDigit'), "EntityGeneratorIsbn::setCheckDigit() present."); - $this->assertTrue(method_exists($metadata->name, 'getTest'), "EntityGeneratorIsbn::getTest() missing."); - $this->assertFalse(method_exists($metadata->name, 'setTest'), "EntityGeneratorIsbn::setTest() present."); + self::assertTrue(class_exists($metadata->name), "Class does not exist."); + self::assertTrue(method_exists($metadata->name, '__construct'), "EntityGeneratorIsbn::__construct missing."); + self::assertTrue(method_exists($metadata->name, 'getPrefix'), "EntityGeneratorIsbn::getPrefix() missing."); + self::assertFalse(method_exists($metadata->name, 'setPrefix'), "EntityGeneratorIsbn::setPrefix() present."); + self::assertTrue(method_exists($metadata->name, 'getGroupNumber'), "EntityGeneratorIsbn::getGroupNumber() missing."); + self::assertFalse(method_exists($metadata->name, 'setGroupNumber'), "EntityGeneratorIsbn::setGroupNumber() present."); + self::assertTrue(method_exists($metadata->name, 'getPublisherNumber'), "EntityGeneratorIsbn::getPublisherNumber() missing."); + self::assertFalse(method_exists($metadata->name, 'setPublisherNumber'), "EntityGeneratorIsbn::setPublisherNumber() present."); + self::assertTrue(method_exists($metadata->name, 'getTitleNumber'), "EntityGeneratorIsbn::getTitleNumber() missing."); + self::assertFalse(method_exists($metadata->name, 'setTitleNumber'), "EntityGeneratorIsbn::setTitleNumber() present."); + self::assertTrue(method_exists($metadata->name, 'getCheckDigit'), "EntityGeneratorIsbn::getCheckDigit() missing."); + self::assertFalse(method_exists($metadata->name, 'setCheckDigit'), "EntityGeneratorIsbn::setCheckDigit() present."); + self::assertTrue(method_exists($metadata->name, 'getTest'), "EntityGeneratorIsbn::getTest() missing."); + self::assertFalse(method_exists($metadata->name, 'setTest'), "EntityGeneratorIsbn::setTest() present."); $test = new $embeddedMetadata->name(1, new \DateTime()); $isbn = new $metadata->name($test, 978, 3, 12, 732320, 83); @@ -952,45 +952,45 @@ public function testGeneratedImmutableEmbeddablesClass() $reflMethod = new \ReflectionMethod($isbn, '__construct'); $reflParameters = $reflMethod->getParameters(); - $this->assertCount(6, $reflParameters); + self::assertCount(6, $reflParameters); - $this->assertSame($embeddedMetadata->name, $reflParameters[0]->getClass()->name); - $this->assertSame('test', $reflParameters[0]->getName()); - $this->assertFalse($reflParameters[0]->isOptional()); + self::assertSame($embeddedMetadata->name, $reflParameters[0]->getClass()->name); + self::assertSame('test', $reflParameters[0]->getName()); + self::assertFalse($reflParameters[0]->isOptional()); - $this->assertSame('prefix', $reflParameters[1]->getName()); - $this->assertFalse($reflParameters[1]->isOptional()); + self::assertSame('prefix', $reflParameters[1]->getName()); + self::assertFalse($reflParameters[1]->isOptional()); - $this->assertSame('groupNumber', $reflParameters[2]->getName()); - $this->assertFalse($reflParameters[2]->isOptional()); + self::assertSame('groupNumber', $reflParameters[2]->getName()); + self::assertFalse($reflParameters[2]->isOptional()); - $this->assertSame('publisherNumber', $reflParameters[3]->getName()); - $this->assertFalse($reflParameters[3]->isOptional()); + self::assertSame('publisherNumber', $reflParameters[3]->getName()); + self::assertFalse($reflParameters[3]->isOptional()); - $this->assertSame('titleNumber', $reflParameters[4]->getName()); - $this->assertFalse($reflParameters[4]->isOptional()); + self::assertSame('titleNumber', $reflParameters[4]->getName()); + self::assertFalse($reflParameters[4]->isOptional()); - $this->assertSame('checkDigit', $reflParameters[5]->getName()); - $this->assertFalse($reflParameters[5]->isOptional()); + self::assertSame('checkDigit', $reflParameters[5]->getName()); + self::assertFalse($reflParameters[5]->isOptional()); $reflMethod = new \ReflectionMethod($test, '__construct'); $reflParameters = $reflMethod->getParameters(); - $this->assertCount(4, $reflParameters); + self::assertCount(4, $reflParameters); - $this->assertSame('field1', $reflParameters[0]->getName()); - $this->assertFalse($reflParameters[0]->isOptional()); + self::assertSame('field1', $reflParameters[0]->getName()); + self::assertFalse($reflParameters[0]->isOptional()); - $this->assertSame('DateTime', $reflParameters[1]->getClass()->name); - $this->assertSame('field3', $reflParameters[1]->getName()); - $this->assertFalse($reflParameters[1]->isOptional()); + self::assertSame('DateTime', $reflParameters[1]->getClass()->name); + self::assertSame('field3', $reflParameters[1]->getName()); + self::assertFalse($reflParameters[1]->isOptional()); - $this->assertSame('field2', $reflParameters[2]->getName()); - $this->assertTrue($reflParameters[2]->isOptional()); + self::assertSame('field2', $reflParameters[2]->getName()); + self::assertTrue($reflParameters[2]->isOptional()); - $this->assertSame('DateTime', $reflParameters[3]->getClass()->name); - $this->assertSame('field4', $reflParameters[3]->getName()); - $this->assertTrue($reflParameters[3]->isOptional()); + self::assertSame('DateTime', $reflParameters[3]->getClass()->name); + self::assertSame('field4', $reflParameters[3]->getName()); + self::assertTrue($reflParameters[3]->isOptional()); } public function testRegenerateEntityClass() @@ -1008,7 +1008,7 @@ public function testRegenerateEntityClass() $this->_generator->writeEntityClass($metadata, $this->_tmpDir); $classNew = file_get_contents($path); - $this->assertSame($classTest,$classNew); + self::assertSame($classTest,$classNew); } /** @@ -1151,9 +1151,9 @@ private function assertPhpDocVarType($type, \ReflectionProperty $property) $docComment = $property->getDocComment(); $regex = '/@var\s+([\S]+)$/m'; - $this->assertRegExp($regex, $docComment); - $this->assertEquals(1, preg_match($regex, $docComment, $matches)); - $this->assertEquals($type, $matches[1]); + self::assertRegExp($regex, $docComment); + self::assertEquals(1, preg_match($regex, $docComment, $matches)); + self::assertEquals($type, $matches[1]); } /** @@ -1165,9 +1165,9 @@ private function assertPhpDocReturnType($type, \ReflectionMethod $method) $docComment = $method->getDocComment(); $regex = '/@return\s+([\S]+)(\s+.*)$/m'; - $this->assertRegExp($regex, $docComment); - $this->assertEquals(1, preg_match($regex, $docComment, $matches)); - $this->assertEquals($type, $matches[1]); + self::assertRegExp($regex, $docComment); + self::assertEquals(1, preg_match($regex, $docComment, $matches)); + self::assertEquals($type, $matches[1]); } /** @@ -1176,8 +1176,8 @@ private function assertPhpDocReturnType($type, \ReflectionMethod $method) */ private function assertPhpDocParamType($type, \ReflectionMethod $method) { - $this->assertEquals(1, preg_match('/@param\s+([^\s]+)/', $method->getDocComment(), $matches)); - $this->assertEquals($type, $matches[1]); + self::assertEquals(1, preg_match('/@param\s+([^\s]+)/', $method->getDocComment(), $matches)); + self::assertEquals($type, $matches[1]); } } diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php index feff13dc066..ea19d4b34e6 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php @@ -83,15 +83,15 @@ public function testGeneratedEntityRepositoryClass() $rpath = $this->writeRepositoryClass($className); - $this->assertFileExists($rpath); + self::assertFileExists($rpath); require $rpath; $repo = new \ReflectionClass($em->getRepository($className)); - $this->assertTrue($repo->inNamespace()); - $this->assertSame($className . 'Repository', $repo->getName()); - $this->assertSame(EntityRepository::class, $repo->getParentClass()->getName()); + self::assertTrue($repo->inNamespace()); + self::assertSame($className . 'Repository', $repo->getName()); + self::assertSame(EntityRepository::class, $repo->getParentClass()->getName()); require_once __DIR__ . '/../../Models/DDC3231/DDC3231User1NoNamespace.php'; @@ -100,15 +100,15 @@ public function testGeneratedEntityRepositoryClass() $rpath2 = $this->writeRepositoryClass($className2); - $this->assertFileExists($rpath2); + self::assertFileExists($rpath2); require $rpath2; $repo2 = new \ReflectionClass($em->getRepository($className2)); - $this->assertFalse($repo2->inNamespace()); - $this->assertSame($className2 . 'Repository', $repo2->getName()); - $this->assertSame(EntityRepository::class, $repo2->getParentClass()->getName()); + self::assertFalse($repo2->inNamespace()); + self::assertSame($className2 . 'Repository', $repo2->getName()); + self::assertSame(EntityRepository::class, $repo2->getParentClass()->getName()); } /** @@ -124,16 +124,16 @@ public function testGeneratedEntityRepositoryClassCustomDefaultRepository() $rpath = $this->writeRepositoryClass($className, DDC3231EntityRepository::class); - $this->assertNotNull($rpath); - $this->assertFileExists($rpath); + self::assertNotNull($rpath); + self::assertFileExists($rpath); require $rpath; $repo = new \ReflectionClass($em->getRepository($className)); - $this->assertTrue($repo->inNamespace()); - $this->assertSame($className . 'Repository', $repo->getName()); - $this->assertSame(DDC3231EntityRepository::class, $repo->getParentClass()->getName()); + self::assertTrue($repo->inNamespace()); + self::assertSame($className . 'Repository', $repo->getName()); + self::assertSame(DDC3231EntityRepository::class, $repo->getParentClass()->getName()); require_once __DIR__ . '/../../Models/DDC3231/DDC3231User2NoNamespace.php'; @@ -143,16 +143,16 @@ public function testGeneratedEntityRepositoryClassCustomDefaultRepository() $rpath2 = $this->writeRepositoryClass($className2, DDC3231EntityRepository::class); - $this->assertNotNull($rpath2); - $this->assertFileExists($rpath2); + self::assertNotNull($rpath2); + self::assertFileExists($rpath2); require $rpath2; $repo2 = new \ReflectionClass($em->getRepository($className2)); - $this->assertFalse($repo2->inNamespace()); - $this->assertSame($className2 . 'Repository', $repo2->getName()); - $this->assertSame(DDC3231EntityRepository::class, $repo2->getParentClass()->getName()); + self::assertFalse($repo2->inNamespace()); + self::assertSame($className2 . 'Repository', $repo2->getName()); + self::assertSame(DDC3231EntityRepository::class, $repo2->getParentClass()->getName()); } /** diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index b316ee6a295..d1161cae6cf 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -57,7 +57,7 @@ protected function _createMetadataDriver($type, $path) 'yaml' => YamlDriver::class, ]; - $this->assertArrayHasKey($type, $mappingDriver, "There is no metadata driver for the type '" . $type . "'."); + self::assertArrayHasKey($type, $mappingDriver, "There is no metadata driver for the type '" . $type . "'."); $class = $mappingDriver[$type]; $driver = ($type === 'annotation') @@ -90,7 +90,7 @@ public function testExportDirectoryAndFilesAreCreated() $metadata[0]->name = ExportedUser::class; - $this->assertEquals(ExportedUser::class, $metadata[0]->name); + self::assertEquals(ExportedUser::class, $metadata[0]->name); $type = $this->_getType(); $cme = new ClassMetadataExporter(); @@ -109,9 +109,9 @@ public function testExportDirectoryAndFilesAreCreated() $exporter->export(); if ($type == 'annotation') { - $this->assertTrue(file_exists(__DIR__ . '/export/' . $type . '/'.str_replace('\\', '/', ExportedUser::class).$this->_extension)); + self::assertTrue(file_exists(__DIR__ . '/export/' . $type . '/'.str_replace('\\', '/', ExportedUser::class).$this->_extension)); } else { - $this->assertTrue(file_exists(__DIR__ . '/export/' . $type . '/Doctrine.Tests.ORM.Tools.Export.ExportedUser'.$this->_extension)); + self::assertTrue(file_exists(__DIR__ . '/export/' . $type . '/Doctrine.Tests.ORM.Tools.Export.ExportedUser'.$this->_extension)); } } @@ -127,11 +127,11 @@ public function testExportedMetadataCanBeReadBackIn() $cmf = $this->_createClassMetadataFactory($em, $type); $metadata = $cmf->getAllMetadata(); - $this->assertEquals(1, count($metadata)); + self::assertEquals(1, count($metadata)); $class = current($metadata); - $this->assertEquals(ExportedUser::class, $class->name); + self::assertEquals(ExportedUser::class, $class->name); return $class; } @@ -142,8 +142,8 @@ public function testExportedMetadataCanBeReadBackIn() */ public function testTableIsExported($class) { - $this->assertEquals('cms_users', $class->table['name']); - $this->assertEquals( + self::assertEquals('cms_users', $class->table['name']); + self::assertEquals( ['engine' => 'MyISAM', 'foo' => ['bar' => 'baz']], $class->table['options']); @@ -156,7 +156,7 @@ public function testTableIsExported($class) */ public function testTypeIsExported($class) { - $this->assertFalse($class->isMappedSuperclass); + self::assertFalse($class->isMappedSuperclass); return $class; } @@ -167,9 +167,9 @@ public function testTypeIsExported($class) */ public function testIdentifierIsExported($class) { - $this->assertEquals(ClassMetadata::GENERATOR_TYPE_IDENTITY, $class->generatorType, "Generator Type wrong"); - $this->assertEquals(['id'], $class->identifier); - $this->assertTrue(isset($class->fieldMappings['id']['id']) && $class->fieldMappings['id']['id'] === true); + self::assertEquals(ClassMetadata::GENERATOR_TYPE_IDENTITY, $class->generatorType, "Generator Type wrong"); + self::assertEquals(['id'], $class->identifier); + self::assertTrue(isset($class->fieldMappings['id']['id']) && $class->fieldMappings['id']['id'] === true); return $class; } @@ -180,22 +180,22 @@ public function testIdentifierIsExported($class) */ public function testFieldsAreExported($class) { - $this->assertTrue(isset($class->fieldMappings['id']['id']) && $class->fieldMappings['id']['id'] === true); - $this->assertEquals('id', $class->fieldMappings['id']['fieldName']); - $this->assertEquals('integer', $class->fieldMappings['id']['type']->getName()); - $this->assertEquals('id', $class->fieldMappings['id']['columnName']); + self::assertTrue(isset($class->fieldMappings['id']['id']) && $class->fieldMappings['id']['id'] === true); + self::assertEquals('id', $class->fieldMappings['id']['fieldName']); + self::assertEquals('integer', $class->fieldMappings['id']['type']->getName()); + self::assertEquals('id', $class->fieldMappings['id']['columnName']); - $this->assertEquals('name', $class->fieldMappings['name']['fieldName']); - $this->assertEquals('string', $class->fieldMappings['name']['type']->getName()); - $this->assertEquals(50, $class->fieldMappings['name']['length']); - $this->assertEquals('name', $class->fieldMappings['name']['columnName']); + self::assertEquals('name', $class->fieldMappings['name']['fieldName']); + self::assertEquals('string', $class->fieldMappings['name']['type']->getName()); + self::assertEquals(50, $class->fieldMappings['name']['length']); + self::assertEquals('name', $class->fieldMappings['name']['columnName']); - $this->assertEquals('email', $class->fieldMappings['email']['fieldName']); - $this->assertEquals('string', $class->fieldMappings['email']['type']->getName()); - $this->assertEquals('user_email', $class->fieldMappings['email']['columnName']); - $this->assertEquals('CHAR(32) NOT NULL', $class->fieldMappings['email']['columnDefinition']); + self::assertEquals('email', $class->fieldMappings['email']['fieldName']); + self::assertEquals('string', $class->fieldMappings['email']['type']->getName()); + self::assertEquals('user_email', $class->fieldMappings['email']['columnName']); + self::assertEquals('CHAR(32) NOT NULL', $class->fieldMappings['email']['columnDefinition']); - $this->assertEquals(true, $class->fieldMappings['age']['options']['unsigned']); + self::assertEquals(true, $class->fieldMappings['age']['options']['unsigned']); return $class; } @@ -212,10 +212,10 @@ public function testFieldsAreProperlySerialized() $xml->registerXPathNamespace("d", "http://doctrine-project.org/schemas/orm/doctrine-mapping"); $nodes = $xml->xpath("/d:doctrine-mapping/d:entity/d:field[@name='name' and @type='string' and @nullable='true']"); - $this->assertEquals(1, count($nodes)); + self::assertEquals(1, count($nodes)); $nodes = $xml->xpath("/d:doctrine-mapping/d:entity/d:field[@name='name' and @type='string' and @unique='true']"); - $this->assertEquals(1, count($nodes)); + self::assertEquals(1, count($nodes)); } else { $this->markTestSkipped('Test not available for '.$type.' driver'); } @@ -227,19 +227,19 @@ public function testFieldsAreProperlySerialized() */ public function testOneToOneAssociationsAreExported($class) { - $this->assertTrue(isset($class->associationMappings['address'])); - $this->assertEquals(Address::class, $class->associationMappings['address']['targetEntity']); - $this->assertEquals('address_id', $class->associationMappings['address']['joinColumns'][0]['name']); - $this->assertEquals('id', $class->associationMappings['address']['joinColumns'][0]['referencedColumnName']); - $this->assertEquals('CASCADE', $class->associationMappings['address']['joinColumns'][0]['onDelete']); - - $this->assertTrue($class->associationMappings['address']['isCascadeRemove']); - $this->assertTrue($class->associationMappings['address']['isCascadePersist']); - $this->assertFalse($class->associationMappings['address']['isCascadeRefresh']); - $this->assertFalse($class->associationMappings['address']['isCascadeMerge']); - $this->assertFalse($class->associationMappings['address']['isCascadeDetach']); - $this->assertTrue($class->associationMappings['address']['orphanRemoval']); - $this->assertEquals(ClassMetadata::FETCH_EAGER, $class->associationMappings['address']['fetch']); + self::assertTrue(isset($class->associationMappings['address'])); + self::assertEquals(Address::class, $class->associationMappings['address']['targetEntity']); + self::assertEquals('address_id', $class->associationMappings['address']['joinColumns'][0]['name']); + self::assertEquals('id', $class->associationMappings['address']['joinColumns'][0]['referencedColumnName']); + self::assertEquals('CASCADE', $class->associationMappings['address']['joinColumns'][0]['onDelete']); + + self::assertTrue($class->associationMappings['address']['isCascadeRemove']); + self::assertTrue($class->associationMappings['address']['isCascadePersist']); + self::assertFalse($class->associationMappings['address']['isCascadeRefresh']); + self::assertFalse($class->associationMappings['address']['isCascadeMerge']); + self::assertFalse($class->associationMappings['address']['isCascadeDetach']); + self::assertTrue($class->associationMappings['address']['orphanRemoval']); + self::assertEquals(ClassMetadata::FETCH_EAGER, $class->associationMappings['address']['fetch']); return $class; } @@ -249,8 +249,8 @@ public function testOneToOneAssociationsAreExported($class) */ public function testManyToOneAssociationsAreExported($class) { - $this->assertTrue(isset($class->associationMappings['mainGroup'])); - $this->assertEquals(Group::class, $class->associationMappings['mainGroup']['targetEntity']); + self::assertTrue(isset($class->associationMappings['mainGroup'])); + self::assertEquals(Group::class, $class->associationMappings['mainGroup']['targetEntity']); } /** @@ -259,18 +259,19 @@ public function testManyToOneAssociationsAreExported($class) */ public function testOneToManyAssociationsAreExported($class) { - $this->assertTrue(isset($class->associationMappings['phonenumbers'])); - $this->assertEquals(Phonenumber::class, $class->associationMappings['phonenumbers']['targetEntity']); - $this->assertEquals('user', $class->associationMappings['phonenumbers']['mappedBy']); - $this->assertEquals(['number' => 'ASC'], $class->associationMappings['phonenumbers']['orderBy']); - - $this->assertTrue($class->associationMappings['phonenumbers']['isCascadeRemove']); - $this->assertTrue($class->associationMappings['phonenumbers']['isCascadePersist']); - $this->assertFalse($class->associationMappings['phonenumbers']['isCascadeRefresh']); - $this->assertTrue($class->associationMappings['phonenumbers']['isCascadeMerge']); - $this->assertFalse($class->associationMappings['phonenumbers']['isCascadeDetach']); - $this->assertTrue($class->associationMappings['phonenumbers']['orphanRemoval']); - $this->assertEquals(ClassMetadata::FETCH_LAZY, $class->associationMappings['phonenumbers']['fetch']); + self::assertTrue(isset($class->associationMappings['phonenumbers'])); + //self::assertInstanceOf('Doctrine\ORM\Mapping\OneToManyMapping', $class->associationMappings['phonenumbers']); + self::assertEquals(Phonenumber::class, $class->associationMappings['phonenumbers']['targetEntity']); + self::assertEquals('user', $class->associationMappings['phonenumbers']['mappedBy']); + self::assertEquals(['number' => 'ASC'], $class->associationMappings['phonenumbers']['orderBy']); + + self::assertTrue($class->associationMappings['phonenumbers']['isCascadeRemove']); + self::assertTrue($class->associationMappings['phonenumbers']['isCascadePersist']); + self::assertFalse($class->associationMappings['phonenumbers']['isCascadeRefresh']); + self::assertTrue($class->associationMappings['phonenumbers']['isCascadeMerge']); + self::assertFalse($class->associationMappings['phonenumbers']['isCascadeDetach']); + self::assertTrue($class->associationMappings['phonenumbers']['orphanRemoval']); + self::assertEquals(ClassMetadata::FETCH_LAZY, $class->associationMappings['phonenumbers']['fetch']); return $class; } @@ -281,23 +282,24 @@ public function testOneToManyAssociationsAreExported($class) */ public function testManyToManyAssociationsAreExported($class) { - $this->assertTrue(isset($class->associationMappings['groups'])); - $this->assertEquals(Group::class, $class->associationMappings['groups']['targetEntity']); - $this->assertEquals('cms_users_groups', $class->associationMappings['groups']['joinTable']['name']); + self::assertTrue(isset($class->associationMappings['groups'])); + //self::assertInstanceOf('Doctrine\ORM\Mapping\ManyToManyMapping', $class->associationMappings['groups']); + self::assertEquals(Group::class, $class->associationMappings['groups']['targetEntity']); + self::assertEquals('cms_users_groups', $class->associationMappings['groups']['joinTable']['name']); - $this->assertEquals('user_id', $class->associationMappings['groups']['joinTable']['joinColumns'][0]['name']); - $this->assertEquals('id', $class->associationMappings['groups']['joinTable']['joinColumns'][0]['referencedColumnName']); + self::assertEquals('user_id', $class->associationMappings['groups']['joinTable']['joinColumns'][0]['name']); + self::assertEquals('id', $class->associationMappings['groups']['joinTable']['joinColumns'][0]['referencedColumnName']); - $this->assertEquals('group_id', $class->associationMappings['groups']['joinTable']['inverseJoinColumns'][0]['name']); - $this->assertEquals('id', $class->associationMappings['groups']['joinTable']['inverseJoinColumns'][0]['referencedColumnName']); - $this->assertEquals('INT NULL', $class->associationMappings['groups']['joinTable']['inverseJoinColumns'][0]['columnDefinition']); + self::assertEquals('group_id', $class->associationMappings['groups']['joinTable']['inverseJoinColumns'][0]['name']); + self::assertEquals('id', $class->associationMappings['groups']['joinTable']['inverseJoinColumns'][0]['referencedColumnName']); + self::assertEquals('INT NULL', $class->associationMappings['groups']['joinTable']['inverseJoinColumns'][0]['columnDefinition']); - $this->assertTrue($class->associationMappings['groups']['isCascadeRemove']); - $this->assertTrue($class->associationMappings['groups']['isCascadePersist']); - $this->assertTrue($class->associationMappings['groups']['isCascadeRefresh']); - $this->assertTrue($class->associationMappings['groups']['isCascadeMerge']); - $this->assertTrue($class->associationMappings['groups']['isCascadeDetach']); - $this->assertEquals(ClassMetadata::FETCH_EXTRA_LAZY, $class->associationMappings['groups']['fetch']); + self::assertTrue($class->associationMappings['groups']['isCascadeRemove']); + self::assertTrue($class->associationMappings['groups']['isCascadePersist']); + self::assertTrue($class->associationMappings['groups']['isCascadeRefresh']); + self::assertTrue($class->associationMappings['groups']['isCascadeMerge']); + self::assertTrue($class->associationMappings['groups']['isCascadeDetach']); + self::assertEquals(ClassMetadata::FETCH_EXTRA_LAZY, $class->associationMappings['groups']['fetch']); return $class; } @@ -308,14 +310,14 @@ public function testManyToManyAssociationsAreExported($class) */ public function testLifecycleCallbacksAreExported($class) { - $this->assertTrue(isset($class->lifecycleCallbacks['prePersist'])); - $this->assertEquals(2, count($class->lifecycleCallbacks['prePersist'])); - $this->assertEquals('doStuffOnPrePersist', $class->lifecycleCallbacks['prePersist'][0]); - $this->assertEquals('doOtherStuffOnPrePersistToo', $class->lifecycleCallbacks['prePersist'][1]); + self::assertTrue(isset($class->lifecycleCallbacks['prePersist'])); + self::assertEquals(2, count($class->lifecycleCallbacks['prePersist'])); + self::assertEquals('doStuffOnPrePersist', $class->lifecycleCallbacks['prePersist'][0]); + self::assertEquals('doOtherStuffOnPrePersistToo', $class->lifecycleCallbacks['prePersist'][1]); - $this->assertTrue(isset($class->lifecycleCallbacks['postPersist'])); - $this->assertEquals(1, count($class->lifecycleCallbacks['postPersist'])); - $this->assertEquals('doStuffOnPostPersist', $class->lifecycleCallbacks['postPersist'][0]); + self::assertTrue(isset($class->lifecycleCallbacks['postPersist'])); + self::assertEquals(1, count($class->lifecycleCallbacks['postPersist'])); + self::assertEquals('doStuffOnPostPersist', $class->lifecycleCallbacks['postPersist'][0]); return $class; } @@ -326,12 +328,12 @@ public function testLifecycleCallbacksAreExported($class) */ public function testCascadeIsExported($class) { - $this->assertTrue($class->associationMappings['phonenumbers']['isCascadePersist']); - $this->assertTrue($class->associationMappings['phonenumbers']['isCascadeMerge']); - $this->assertTrue($class->associationMappings['phonenumbers']['isCascadeRemove']); - $this->assertFalse($class->associationMappings['phonenumbers']['isCascadeRefresh']); - $this->assertFalse($class->associationMappings['phonenumbers']['isCascadeDetach']); - $this->assertTrue($class->associationMappings['phonenumbers']['orphanRemoval']); + self::assertTrue($class->associationMappings['phonenumbers']['isCascadePersist']); + self::assertTrue($class->associationMappings['phonenumbers']['isCascadeMerge']); + self::assertTrue($class->associationMappings['phonenumbers']['isCascadeRemove']); + self::assertFalse($class->associationMappings['phonenumbers']['isCascadeRefresh']); + self::assertFalse($class->associationMappings['phonenumbers']['isCascadeDetach']); + self::assertTrue($class->associationMappings['phonenumbers']['orphanRemoval']); return $class; } @@ -342,7 +344,7 @@ public function testCascadeIsExported($class) */ public function testInversedByIsExported($class) { - $this->assertEquals('user', $class->associationMappings['address']['inversedBy']); + self::assertEquals('user', $class->associationMappings['address']['inversedBy']); } /** * @depends testExportDirectoryAndFilesAreCreated @@ -356,16 +358,16 @@ public function testCascadeAllCollapsed() $xml->registerXPathNamespace("d", "http://doctrine-project.org/schemas/orm/doctrine-mapping"); $nodes = $xml->xpath("/d:doctrine-mapping/d:entity/d:one-to-many[@field='interests']/d:cascade/d:*"); - $this->assertEquals(1, count($nodes)); + self::assertEquals(1, count($nodes)); - $this->assertEquals('cascade-all', $nodes[0]->getName()); + self::assertEquals('cascade-all', $nodes[0]->getName()); } else if ($type == 'yaml') { $yaml = new Parser(); $value = $yaml->parse(file_get_contents(__DIR__ . '/export/'.$type.'/Doctrine.Tests.ORM.Tools.Export.ExportedUser.dcm.yml')); - $this->assertTrue(isset($value[ExportedUser::class]['oneToMany']['interests']['cascade'])); - $this->assertEquals(1, count($value[ExportedUser::class]['oneToMany']['interests']['cascade'])); - $this->assertEquals('all', $value[ExportedUser::class]['oneToMany']['interests']['cascade'][0]); + self::assertTrue(isset($value[ExportedUser::class]['oneToMany']['interests']['cascade'])); + self::assertEquals(1, count($value[ExportedUser::class]['oneToMany']['interests']['cascade'])); + self::assertEquals('all', $value[ExportedUser::class]['oneToMany']['interests']['cascade'][0]); } else { $this->markTestSkipped('Test not available for '.$type.' driver'); } diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php index d5fa7b5bc93..618406dc0cb 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php @@ -63,7 +63,7 @@ public function testSequenceGenerator() { XML; - $this->assertXmlStringEqualsXmlString($expectedFileContent, $exporter->exportClassMetadata($metadata)); + self::assertXmlStringEqualsXmlString($expectedFileContent, $exporter->exportClassMetadata($metadata)); } /** @@ -101,6 +101,6 @@ public function testFieldOptionsExport() { XML; - $this->assertXmlStringEqualsXmlString($expectedFileContent, $exporter->exportClassMetadata($metadata)); + self::assertXmlStringEqualsXmlString($expectedFileContent, $exporter->exportClassMetadata($metadata)); } } diff --git a/tests/Doctrine/Tests/ORM/Tools/Pagination/CountOutputWalkerTest.php b/tests/Doctrine/Tests/ORM/Tools/Pagination/CountOutputWalkerTest.php index df7f73f7881..af829a22a14 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Pagination/CountOutputWalkerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/CountOutputWalkerTest.php @@ -14,8 +14,9 @@ public function testCountQuery() $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, CountOutputWalker::class); $query->setFirstResult(null)->setMaxResults(null); - $this->assertEquals( - "SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_0 FROM (SELECT b0_.id AS id_0, c1_.id AS id_1, a2_.id AS id_2, a2_.name AS name_3, b0_.author_id AS author_id_4, b0_.category_id AS category_id_5 FROM BlogPost b0_ INNER JOIN Category c1_ ON b0_.category_id = c1_.id INNER JOIN Author a2_ ON b0_.author_id = a2_.id) dctrn_result) dctrn_table", $query->getSQL() + self::assertEquals( + "SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_0 FROM (SELECT b0_.id AS id_0, c1_.id AS id_1, a2_.id AS id_2, a2_.name AS name_3, b0_.author_id AS author_id_4, b0_.category_id AS category_id_5 FROM BlogPost b0_ INNER JOIN Category c1_ ON b0_.category_id = c1_.id INNER JOIN Author a2_ ON b0_.author_id = a2_.id) dctrn_result) dctrn_table", + $query->getSQL() ); } @@ -26,8 +27,9 @@ public function testCountQuery_MixedResultsWithName() $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, CountOutputWalker::class); $query->setFirstResult(null)->setMaxResults(null); - $this->assertEquals( - "SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_0 FROM (SELECT a0_.id AS id_0, a0_.name AS name_1, sum(a0_.name) AS sclr_2 FROM Author a0_) dctrn_result) dctrn_table", $query->getSQL() + self::assertEquals( + "SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_0 FROM (SELECT a0_.id AS id_0, a0_.name AS name_1, sum(a0_.name) AS sclr_2 FROM Author a0_) dctrn_result) dctrn_table", + $query->getSQL() ); } @@ -50,8 +52,9 @@ public function testCountQuery_Having(): void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, CountOutputWalker::class); $query->setFirstResult(null)->setMaxResults(null); - $this->assertSame( - "SELECT COUNT(*) AS dctrn_count FROM (SELECT count(u0_.id) AS sclr_0, g1_.id AS id_1, u0_.id AS id_2 FROM groups g1_ LEFT JOIN user_group u2_ ON g1_.id = u2_.group_id LEFT JOIN User u0_ ON u0_.id = u2_.user_id GROUP BY g1_.id HAVING sclr_0 > 0) dctrn_table", $query->getSQL() + self::assertEquals( + "SELECT COUNT(*) AS dctrn_count FROM (SELECT count(u0_.id) AS sclr_0, g1_.id AS id_1, u0_.id AS id_2 FROM groups g1_ LEFT JOIN user_group u2_ ON g1_.id = u2_.group_id LEFT JOIN User u0_ ON u0_.id = u2_.user_id GROUP BY g1_.id HAVING sclr_0 > 0) dctrn_table", + $query->getSQL() ); } @@ -66,7 +69,7 @@ public function testCountQueryOrderBySqlServer() $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, CountOutputWalker::class); $query->setFirstResult(null)->setMaxResults(null); - $this->assertEquals( + self::assertEquals( "SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_0 FROM (SELECT b0_.id AS id_0, b0_.author_id AS author_id_1, b0_.category_id AS category_id_2 FROM BlogPost b0_) dctrn_result) dctrn_table", $query->getSQL() ); diff --git a/tests/Doctrine/Tests/ORM/Tools/Pagination/CountWalkerTest.php b/tests/Doctrine/Tests/ORM/Tools/Pagination/CountWalkerTest.php index 2aa398d6fbe..958f42048bc 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Pagination/CountWalkerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/CountWalkerTest.php @@ -18,8 +18,9 @@ public function testCountQuery() $query->setHint(CountWalker::HINT_DISTINCT, true); $query->setFirstResult(null)->setMaxResults(null); - $this->assertEquals( - "SELECT count(DISTINCT b0_.id) AS sclr_0 FROM BlogPost b0_ INNER JOIN Category c1_ ON b0_.category_id = c1_.id INNER JOIN Author a2_ ON b0_.author_id = a2_.id", $query->getSQL() + self::assertEquals( + "SELECT count(DISTINCT b0_.id) AS sclr_0 FROM BlogPost b0_ INNER JOIN Category c1_ ON b0_.category_id = c1_.id INNER JOIN Author a2_ ON b0_.author_id = a2_.id", + $query->getSQL() ); } @@ -31,8 +32,9 @@ public function testCountQuery_MixedResultsWithName() $query->setHint(CountWalker::HINT_DISTINCT, true); $query->setFirstResult(null)->setMaxResults(null); - $this->assertEquals( - "SELECT count(DISTINCT a0_.id) AS sclr_0 FROM Author a0_", $query->getSQL() + self::assertEquals( + "SELECT count(DISTINCT a0_.id) AS sclr_0 FROM Author a0_", + $query->getSQL() ); } @@ -44,8 +46,9 @@ public function testCountQuery_KeepsGroupBy() $query->setHint(CountWalker::HINT_DISTINCT, true); $query->setFirstResult(null)->setMaxResults(null); - $this->assertEquals( - "SELECT count(DISTINCT b0_.id) AS sclr_0 FROM BlogPost b0_ GROUP BY b0_.id", $query->getSQL() + self::assertEquals( + "SELECT count(DISTINCT b0_.id) AS sclr_0 FROM BlogPost b0_ GROUP BY b0_.id", + $query->getSQL() ); } @@ -57,8 +60,9 @@ public function testCountQuery_RemovesOrderBy() $query->setHint(CountWalker::HINT_DISTINCT, true); $query->setFirstResult(null)->setMaxResults(null); - $this->assertEquals( - "SELECT count(DISTINCT b0_.id) AS sclr_0 FROM BlogPost b0_ INNER JOIN Category c1_ ON b0_.category_id = c1_.id INNER JOIN Author a2_ ON b0_.author_id = a2_.id", $query->getSQL() + self::assertEquals( + "SELECT count(DISTINCT b0_.id) AS sclr_0 FROM BlogPost b0_ INNER JOIN Category c1_ ON b0_.category_id = c1_.id INNER JOIN Author a2_ ON b0_.author_id = a2_.id", + $query->getSQL() ); } @@ -70,8 +74,9 @@ public function testCountQuery_RemovesLimits() $query->setHint(CountWalker::HINT_DISTINCT, true); $query->setFirstResult(null)->setMaxResults(null); - $this->assertEquals( - "SELECT count(DISTINCT b0_.id) AS sclr_0 FROM BlogPost b0_ INNER JOIN Category c1_ ON b0_.category_id = c1_.id INNER JOIN Author a2_ ON b0_.author_id = a2_.id", $query->getSQL() + self::assertEquals( + "SELECT count(DISTINCT b0_.id) AS sclr_0 FROM BlogPost b0_ INNER JOIN Category c1_ ON b0_.category_id = c1_.id INNER JOIN Author a2_ ON b0_.author_id = a2_.id", + $query->getSQL() ); } @@ -100,8 +105,9 @@ public function testCountQueryWithArbitraryJoin() $query->setHint(CountWalker::HINT_DISTINCT, true); $query->setFirstResult(null)->setMaxResults(null); - $this->assertEquals( - "SELECT count(DISTINCT b0_.id) AS sclr_0 FROM BlogPost b0_ LEFT JOIN Category c1_ ON (b0_.category_id = c1_.id)", $query->getSQL() + self::assertEquals( + "SELECT count(DISTINCT b0_.id) AS sclr_0 FROM BlogPost b0_ LEFT JOIN Category c1_ ON (b0_.category_id = c1_.id)", + $query->getSQL() ); } } diff --git a/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryOutputWalkerTest.php b/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryOutputWalkerTest.php index 39ee1360dc9..9a5dff4b8c5 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryOutputWalkerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryOutputWalkerTest.php @@ -19,7 +19,8 @@ public function testLimitSubquery() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - "SELECT DISTINCT id_0 FROM (SELECT m0_.id AS id_0, m0_.title AS title_1, c1_.id AS id_2, a2_.id AS id_3, a2_.name AS name_4, m0_.author_id AS author_id_5, m0_.category_id AS category_id_6 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON m0_.category_id = c1_.id INNER JOIN Author a2_ ON m0_.author_id = a2_.id) dctrn_result", $limitQuery->getSQL() + "SELECT DISTINCT id_0 FROM (SELECT m0_.id AS id_0, m0_.title AS title_1, c1_.id AS id_2, a2_.id AS id_3, a2_.name AS name_4, m0_.author_id AS author_id_5, m0_.category_id AS category_id_6 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON m0_.category_id = c1_.id INNER JOIN Author a2_ ON m0_.author_id = a2_.id) dctrn_result", + $limitQuery->getSQL() ); } @@ -34,7 +35,8 @@ public function testLimitSubqueryWithSortPg() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - "SELECT DISTINCT id_0, MIN(sclr_5) AS dctrn_minrownum FROM (SELECT m0_.id AS id_0, m0_.title AS title_1, c1_.id AS id_2, a2_.id AS id_3, a2_.name AS name_4, ROW_NUMBER() OVER(ORDER BY m0_.title ASC) AS sclr_5, m0_.author_id AS author_id_6, m0_.category_id AS category_id_7 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON m0_.category_id = c1_.id INNER JOIN Author a2_ ON m0_.author_id = a2_.id) dctrn_result GROUP BY id_0 ORDER BY dctrn_minrownum ASC", $limitQuery->getSQL() + "SELECT DISTINCT id_0, MIN(sclr_5) AS dctrn_minrownum FROM (SELECT m0_.id AS id_0, m0_.title AS title_1, c1_.id AS id_2, a2_.id AS id_3, a2_.name AS name_4, ROW_NUMBER() OVER(ORDER BY m0_.title ASC) AS sclr_5, m0_.author_id AS author_id_6, m0_.category_id AS category_id_7 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON m0_.category_id = c1_.id INNER JOIN Author a2_ ON m0_.author_id = a2_.id) dctrn_result GROUP BY id_0 ORDER BY dctrn_minrownum ASC", + $limitQuery->getSQL() ); $this->entityManager->getConnection()->setDatabasePlatform($odp); @@ -119,7 +121,8 @@ public function testLimitSubqueryWithSortOracle() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - "SELECT DISTINCT ID_0, MIN(SCLR_5) AS dctrn_minrownum FROM (SELECT m0_.id AS ID_0, m0_.title AS TITLE_1, c1_.id AS ID_2, a2_.id AS ID_3, a2_.name AS NAME_4, ROW_NUMBER() OVER(ORDER BY m0_.title ASC) AS SCLR_5, m0_.author_id AS AUTHOR_ID_6, m0_.category_id AS CATEGORY_ID_7 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON m0_.category_id = c1_.id INNER JOIN Author a2_ ON m0_.author_id = a2_.id) dctrn_result GROUP BY ID_0 ORDER BY dctrn_minrownum ASC", $limitQuery->getSQL() + "SELECT DISTINCT ID_0, MIN(SCLR_5) AS dctrn_minrownum FROM (SELECT m0_.id AS ID_0, m0_.title AS TITLE_1, c1_.id AS ID_2, a2_.id AS ID_3, a2_.name AS NAME_4, ROW_NUMBER() OVER(ORDER BY m0_.title ASC) AS SCLR_5, m0_.author_id AS AUTHOR_ID_6, m0_.category_id AS CATEGORY_ID_7 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON m0_.category_id = c1_.id INNER JOIN Author a2_ ON m0_.author_id = a2_.id) dctrn_result GROUP BY ID_0 ORDER BY dctrn_minrownum ASC", + $limitQuery->getSQL() ); $this->entityManager->getConnection()->setDatabasePlatform($odp); @@ -177,7 +180,8 @@ public function testLimitSubqueryOracle() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - "SELECT DISTINCT ID_0 FROM (SELECT m0_.id AS ID_0, m0_.title AS TITLE_1, c1_.id AS ID_2, a2_.id AS ID_3, a2_.name AS NAME_4, m0_.author_id AS AUTHOR_ID_5, m0_.category_id AS CATEGORY_ID_6 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON m0_.category_id = c1_.id INNER JOIN Author a2_ ON m0_.author_id = a2_.id) dctrn_result", $limitQuery->getSQL() + "SELECT DISTINCT ID_0 FROM (SELECT m0_.id AS ID_0, m0_.title AS TITLE_1, c1_.id AS ID_2, a2_.id AS ID_3, a2_.name AS NAME_4, m0_.author_id AS AUTHOR_ID_5, m0_.category_id AS CATEGORY_ID_6 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON m0_.category_id = c1_.id INNER JOIN Author a2_ ON m0_.author_id = a2_.id) dctrn_result", + $limitQuery->getSQL() ); $this->entityManager->getConnection()->setDatabasePlatform($odp); @@ -191,7 +195,8 @@ public function testCountQueryMixedResultsWithName() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - "SELECT DISTINCT id_0 FROM (SELECT a0_.id AS id_0, a0_.name AS name_1, sum(a0_.name) AS sclr_2 FROM Author a0_) dctrn_result", $limitQuery->getSQL() + "SELECT DISTINCT id_0 FROM (SELECT a0_.id AS id_0, a0_.name AS name_1, sum(a0_.name) AS sclr_2 FROM Author a0_) dctrn_result", + $limitQuery->getSQL() ); } @@ -207,7 +212,7 @@ public function testCountQueryWithArithmeticOrderByCondition() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); - $this->assertSame( + self::assertSame( 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, (1 - 1000) * 1 FROM (SELECT a0_.id AS id_0, a0_.name AS name_1 FROM Author a0_) dctrn_result_inner ORDER BY (1 - 1000) * 1 DESC) dctrn_result', $query->getSQL() ); @@ -222,7 +227,7 @@ public function testCountQueryWithComplexScalarOrderByItem() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); - $this->assertSame( + self::assertSame( 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, image_height_2 * image_width_3 FROM (SELECT a0_.id AS id_0, a0_.image AS image_1, a0_.image_height AS image_height_2, a0_.image_width AS image_width_3, a0_.image_alt_desc AS image_alt_desc_4, a0_.user_id AS user_id_5 FROM Avatar a0_) dctrn_result_inner ORDER BY image_height_2 * image_width_3 DESC) dctrn_result', $query->getSQL() ); @@ -237,7 +242,7 @@ public function testCountQueryWithComplexScalarOrderByItemJoined() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); - $this->assertSame( + self::assertSame( 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, image_height_1 * image_width_2 FROM (SELECT u0_.id AS id_0, a1_.image_height AS image_height_1, a1_.image_width AS image_width_2, a1_.user_id AS user_id_3 FROM User u0_ INNER JOIN Avatar a1_ ON u0_.id = a1_.user_id) dctrn_result_inner ORDER BY image_height_1 * image_width_2 DESC) dctrn_result', $query->getSQL() ); @@ -252,7 +257,7 @@ public function testCountQueryWithComplexScalarOrderByItemJoinedWithPartial() : $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); - $this->assertSame( + self::assertSame( 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, image_height_3 * image_width_4 FROM (SELECT u0_.id AS id_0, a1_.id AS id_1, a1_.image_alt_desc AS image_alt_desc_2, a1_.image_height AS image_height_3, a1_.image_width AS image_width_4, a1_.user_id AS user_id_5 FROM User u0_ INNER JOIN Avatar a1_ ON u0_.id = a1_.user_id) dctrn_result_inner ORDER BY image_height_3 * image_width_4 DESC) dctrn_result', $query->getSQL() ); @@ -267,7 +272,7 @@ public function testCountQueryWithComplexScalarOrderByItemOracle() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); - $this->assertSame( + self::assertSame( 'SELECT DISTINCT ID_0, MIN(SCLR_5) AS dctrn_minrownum FROM (SELECT a0_.id AS ID_0, a0_.image AS IMAGE_1, a0_.image_height AS IMAGE_HEIGHT_2, a0_.image_width AS IMAGE_WIDTH_3, a0_.image_alt_desc AS IMAGE_ALT_DESC_4, ROW_NUMBER() OVER(ORDER BY a0_.image_height * a0_.image_width DESC) AS SCLR_5, a0_.user_id AS USER_ID_6 FROM Avatar a0_) dctrn_result GROUP BY ID_0 ORDER BY dctrn_minrownum ASC', $query->getSQL() ); @@ -299,7 +304,7 @@ public function testLimitSubqueryWithColumnWithSortDirectionInName() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); - $this->assertSame( + self::assertSame( 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, image_alt_desc_4 FROM (SELECT a0_.id AS id_0, a0_.image AS image_1, a0_.image_height AS image_height_2, a0_.image_width AS image_width_3, a0_.image_alt_desc AS image_alt_desc_4, a0_.user_id AS user_id_5 FROM Avatar a0_) dctrn_result_inner ORDER BY image_alt_desc_4 DESC) dctrn_result', $query->getSQL() ); diff --git a/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryWalkerTest.php b/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryWalkerTest.php index 8ddc158b928..c665694298a 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryWalkerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryWalkerTest.php @@ -18,7 +18,7 @@ public function testLimitSubquery() $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]); - $this->assertEquals( + self::assertEquals( "SELECT DISTINCT m0_.id AS id_0 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON m0_.category_id = c1_.id INNER JOIN Author a2_ ON m0_.author_id = a2_.id", $limitQuery->getSQL() ); @@ -32,7 +32,7 @@ public function testLimitSubqueryWithSort() $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]); - $this->assertEquals( + self::assertEquals( "SELECT DISTINCT m0_.id AS id_0, m0_.title AS title_1 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON m0_.category_id = c1_.id INNER JOIN Author a2_ ON m0_.author_id = a2_.id ORDER BY m0_.title ASC", $limitQuery->getSQL() ); @@ -46,7 +46,7 @@ public function testCountQuery_MixedResultsWithName() $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]); - $this->assertEquals( + self::assertEquals( "SELECT DISTINCT a0_.id AS id_0, sum(a0_.name) AS sclr_1 FROM Author a0_", $limitQuery->getSQL() ); @@ -63,7 +63,7 @@ public function testLimitSubqueryWithSortOnAssociation() $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]); - $this->assertEquals( + self::assertEquals( "SELECT DISTINCT m0_.id AS id_0, m0_.author_id AS sclr_1 FROM MyBlogPost m0_ ORDER BY m0_.author_id ASC", $limitQuery->getSQL() ); @@ -80,7 +80,7 @@ public function testLimitSubqueryWithArbitraryJoin() $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]); - $this->assertEquals( + self::assertEquals( "SELECT DISTINCT m0_.id AS id_0 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON (m0_.category_id = c1_.id)", $limitQuery->getSQL() ); @@ -94,7 +94,7 @@ public function testLimitSubqueryWithSortWithArbitraryJoin() $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]); - $this->assertEquals( + self::assertEquals( "SELECT DISTINCT m0_.id AS id_0, m0_.title AS title_1 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON (m0_.category_id = c1_.id) ORDER BY m0_.title ASC", $limitQuery->getSQL() ); diff --git a/tests/Doctrine/Tests/ORM/Tools/Pagination/WhereInWalkerTest.php b/tests/Doctrine/Tests/ORM/Tools/Pagination/WhereInWalkerTest.php index 0c7cd48c2d3..12f38ffbdae 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Pagination/WhereInWalkerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/WhereInWalkerTest.php @@ -19,7 +19,7 @@ public function testWhereInQuery_NoWhere() $whereInQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [WhereInWalker::class]); $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); - $this->assertEquals( + self::assertEquals( "SELECT u0_.id AS id_0, g1_.id AS id_1 FROM User u0_ INNER JOIN user_group u2_ ON u0_.id = u2_.user_id INNER JOIN groups g1_ ON g1_.id = u2_.group_id WHERE u0_.id IN (?)", $whereInQuery->getSQL() ); } @@ -33,7 +33,7 @@ public function testCountQuery_MixedResultsWithName() $whereInQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [WhereInWalker::class]); $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); - $this->assertEquals( + self::assertEquals( "SELECT a0_.id AS id_0, a0_.name AS name_1, sum(a0_.name) AS sclr_2 FROM Author a0_ WHERE a0_.id IN (?)", $whereInQuery->getSQL() ); } @@ -47,7 +47,7 @@ public function testWhereInQuery_SingleWhere() $whereInQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [WhereInWalker::class]); $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); - $this->assertEquals( + self::assertEquals( "SELECT u0_.id AS id_0, g1_.id AS id_1 FROM User u0_ INNER JOIN user_group u2_ ON u0_.id = u2_.user_id INNER JOIN groups g1_ ON g1_.id = u2_.group_id WHERE 1 = 1 AND u0_.id IN (?)", $whereInQuery->getSQL() ); } @@ -61,7 +61,7 @@ public function testWhereInQuery_MultipleWhereWithAnd() $whereInQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [WhereInWalker::class]); $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); - $this->assertEquals( + self::assertEquals( "SELECT u0_.id AS id_0, g1_.id AS id_1 FROM User u0_ INNER JOIN user_group u2_ ON u0_.id = u2_.user_id INNER JOIN groups g1_ ON g1_.id = u2_.group_id WHERE 1 = 1 AND 2 = 2 AND u0_.id IN (?)", $whereInQuery->getSQL() ); } @@ -75,7 +75,7 @@ public function testWhereInQuery_MultipleWhereWithOr() $whereInQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [WhereInWalker::class]); $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); - $this->assertEquals( + self::assertEquals( "SELECT u0_.id AS id_0, g1_.id AS id_1 FROM User u0_ INNER JOIN user_group u2_ ON u0_.id = u2_.user_id INNER JOIN groups g1_ ON g1_.id = u2_.group_id WHERE (1 = 1 OR 2 = 2) AND u0_.id IN (?)", $whereInQuery->getSQL() ); } @@ -89,7 +89,7 @@ public function testWhereInQuery_MultipleWhereWithMixed_1() $whereInQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [WhereInWalker::class]); $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); - $this->assertEquals( + self::assertEquals( "SELECT u0_.id AS id_0, g1_.id AS id_1 FROM User u0_ INNER JOIN user_group u2_ ON u0_.id = u2_.user_id INNER JOIN groups g1_ ON g1_.id = u2_.group_id WHERE (1 = 1 OR 2 = 2) AND 3 = 3 AND u0_.id IN (?)", $whereInQuery->getSQL() ); } @@ -103,7 +103,7 @@ public function testWhereInQuery_MultipleWhereWithMixed_2() $whereInQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [WhereInWalker::class]); $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); - $this->assertEquals( + self::assertEquals( "SELECT u0_.id AS id_0, g1_.id AS id_1 FROM User u0_ INNER JOIN user_group u2_ ON u0_.id = u2_.user_id INNER JOIN groups g1_ ON g1_.id = u2_.group_id WHERE (1 = 1 AND 2 = 2 OR 3 = 3) AND u0_.id IN (?)", $whereInQuery->getSQL() ); } @@ -117,7 +117,7 @@ public function testWhereInQuery_WhereNot() $whereInQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [WhereInWalker::class]); $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); - $this->assertEquals( + self::assertEquals( "SELECT u0_.id AS id_0, g1_.id AS id_1 FROM User u0_ INNER JOIN user_group u2_ ON u0_.id = u2_.user_id INNER JOIN groups g1_ ON g1_.id = u2_.group_id WHERE (NOT 1 = 2) AND u0_.id IN (?)", $whereInQuery->getSQL() ); } @@ -133,7 +133,7 @@ public function testWhereInQueryWithArbitraryJoin_NoWhere() $whereInQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [WhereInWalker::class]); $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); - $this->assertEquals( + self::assertEquals( "SELECT b0_.id AS id_0, b0_.author_id AS author_id_1, b0_.category_id AS category_id_2 FROM BlogPost b0_ INNER JOIN Category c1_ ON (b0_.category_id = c1_.id) WHERE b0_.id IN (?)", $whereInQuery->getSQL() ); } @@ -146,7 +146,7 @@ public function testWhereInQueryWithArbitraryJoin_SingleWhere() $whereInQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [WhereInWalker::class]); $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); - $this->assertEquals( + self::assertEquals( "SELECT b0_.id AS id_0, b0_.author_id AS author_id_1, b0_.category_id AS category_id_2 FROM BlogPost b0_ INNER JOIN Category c1_ ON (b0_.category_id = c1_.id) WHERE 1 = 1 AND b0_.id IN (?)", $whereInQuery->getSQL() ); } diff --git a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php index 910df27f87c..14a3a566f02 100644 --- a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php @@ -47,12 +47,12 @@ public function testResolveTargetEntityListenerCanResolveTargetEntity() $cm = $this->factory->getMetadataFor(ResolveTargetEntity::class); $meta = $cm->associationMappings; - $this->assertSame(TargetEntity::class, $meta['manyToMany']['targetEntity']); - $this->assertSame(ResolveTargetEntity::class, $meta['manyToOne']['targetEntity']); - $this->assertSame(ResolveTargetEntity::class, $meta['oneToMany']['targetEntity']); - $this->assertSame(TargetEntity::class, $meta['oneToOne']['targetEntity']); + self::assertSame(TargetEntity::class, $meta['manyToMany']['targetEntity']); + self::assertSame(ResolveTargetEntity::class, $meta['manyToOne']['targetEntity']); + self::assertSame(ResolveTargetEntity::class, $meta['oneToMany']['targetEntity']); + self::assertSame(TargetEntity::class, $meta['oneToOne']['targetEntity']); - $this->assertSame($cm, $this->factory->getMetadataFor(ResolveTargetInterface::class)); + self::assertSame($cm, $this->factory->getMetadataFor(ResolveTargetInterface::class)); } /** @@ -68,7 +68,7 @@ public function testResolveTargetEntityListenerCanRetrieveTargetEntityByInterfac $cm = $this->factory->getMetadataFor(ResolveTargetInterface::class); - $this->assertSame($this->factory->getMetadataFor(ResolveTargetEntity::class), $cm); + self::assertSame($this->factory->getMetadataFor(ResolveTargetEntity::class), $cm); } /** @@ -84,8 +84,8 @@ public function testAssertTableColumnsAreNotAddedInManyToMany() $cm = $this->factory->getMetadataFor(ResolveTargetEntity::class); $meta = $cm->associationMappings['manyToMany']; - $this->assertSame(TargetEntity::class, $meta['targetEntity']); - $this->assertEquals(['resolvetargetentity_id', 'targetinterface_id'], $meta['joinTableColumns']); + self::assertSame(TargetEntity::class, $meta['targetEntity']); + self::assertEquals(['resolvetargetentity_id', 'targetinterface_id'], $meta['joinTableColumns']); } /** @@ -101,7 +101,7 @@ public function testDoesResolveTargetEntitiesInDQLAlsoWithInterfaces() $evm->addEventSubscriber($this->listener); - $this->assertStringMatchesFormat( + self::assertStringMatchesFormat( 'SELECT%AFROM ResolveTargetEntity%A', $this ->em diff --git a/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php b/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php index 1164ae219a2..a783bbf7df5 100644 --- a/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php @@ -38,8 +38,8 @@ public function testAddUniqueIndexForUniqueFieldAnnotation() $schema = $schemaTool->getSchemaFromMetadata($classes); - $this->assertTrue($schema->hasTable('cms_users'), "Table cms_users should exist."); - $this->assertTrue($schema->getTable('cms_users')->columnsAreIndexed(['username']), "username column should be indexed."); + self::assertTrue($schema->hasTable('cms_users'), "Table cms_users should exist."); + self::assertTrue($schema->getTable('cms_users')->columnsAreIndexed(['username']), "username column should be indexed."); } public function testAnnotationOptionsAttribute() @@ -55,8 +55,8 @@ public function testAnnotationOptionsAttribute() $expected = ['foo' => 'bar', 'baz' => ['key' => 'val']]; - $this->assertEquals($expected, $schema->getTable('TestEntityWithAnnotationOptionsAttribute')->getOptions(), "options annotation are passed to the tables options"); - $this->assertEquals($expected, $schema->getTable('TestEntityWithAnnotationOptionsAttribute')->getColumn('test')->getCustomSchemaOptions(), "options annotation are passed to the columns customSchemaOptions"); + self::assertEquals($expected, $schema->getTable('TestEntityWithAnnotationOptionsAttribute')->getOptions(), "options annotation are passed to the tables options"); + self::assertEquals($expected, $schema->getTable('TestEntityWithAnnotationOptionsAttribute')->getColumn('test')->getCustomSchemaOptions(), "options annotation are passed to the columns customSchemaOptions"); } /** @@ -77,10 +77,10 @@ public function testPassColumnDefinitionToJoinColumn() $schema = $schemaTool->getSchemaFromMetadata($classes); - $this->assertTrue($schema->hasTable('forum_users')); + self::assertTrue($schema->hasTable('forum_users')); $table = $schema->getTable("forum_users"); - $this->assertTrue($table->hasColumn('avatar_id')); - $this->assertEquals($customColumnDef, $table->getColumn('avatar_id')->getColumnDefinition()); + self::assertTrue($table->hasColumn('avatar_id')); + self::assertEquals($customColumnDef, $table->getColumn('avatar_id')->getColumnDefinition()); } /** @@ -108,8 +108,8 @@ public function testPostGenerateEvents() $schema = $schemaTool->getSchemaFromMetadata($classes); - $this->assertEquals(count($classes), $listener->tableCalls); - $this->assertTrue($listener->schemaCalled); + self::assertEquals(count($classes), $listener->tableCalls); + self::assertTrue($listener->schemaCalled); } public function testNullDefaultNotAddedToCustomSchemaOptions() @@ -122,7 +122,7 @@ public function testNullDefaultNotAddedToCustomSchemaOptions() ->getColumn('nullDefault') ->getCustomSchemaOptions(); - $this->assertSame([], $customSchemaOptions); + self::assertSame([], $customSchemaOptions); } /** @@ -138,12 +138,12 @@ public function testSchemaHasProperIndexesFromUniqueConstraintAnnotation() $schema = $schemaTool->getSchemaFromMetadata($classes); - $this->assertTrue($schema->hasTable('unique_constraint_annotation_table')); + self::assertTrue($schema->hasTable('unique_constraint_annotation_table')); $table = $schema->getTable('unique_constraint_annotation_table'); - $this->assertEquals(2, count($table->getIndexes())); - $this->assertTrue($table->hasIndex('primary')); - $this->assertTrue($table->hasIndex('uniq_hash')); + self::assertEquals(2, count($table->getIndexes())); + self::assertTrue($table->hasIndex('primary')); + self::assertTrue($table->hasIndex('uniq_hash')); } public function testRemoveUniqueIndexOverruledByPrimaryKey() @@ -157,12 +157,12 @@ public function testRemoveUniqueIndexOverruledByPrimaryKey() $schema = $schemaTool->getSchemaFromMetadata($classes); - $this->assertTrue($schema->hasTable('first_entity'), "Table first_entity should exist."); + self::assertTrue($schema->hasTable('first_entity'), "Table first_entity should exist."); $indexes = $schema->getTable('first_entity')->getIndexes(); - $this->assertCount(1, $indexes, "there should be only one index"); - $this->assertTrue(current($indexes)->isPrimary(), "index should be primary"); + self::assertCount(1, $indexes, "there should be only one index"); + self::assertTrue(current($indexes)->isPrimary(), "index should be primary"); } public function testSetDiscriminatorColumnWithoutLength() : void diff --git a/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php b/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php index 682ee896d1a..d901b399fda 100644 --- a/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php @@ -58,7 +58,7 @@ public function testInvalidManyToManyJoinColumnSchema() $ce = $this->validator->validateClass($class1); - $this->assertEquals( + self::assertEquals( [ "The inverse join columns of the many-to-many table 'Entity1Entity2' have to contain to ALL identifier columns of the target entity 'Doctrine\Tests\ORM\Tools\InvalidEntity2', however 'key4' are missing.", "The join columns of the many-to-many table 'Entity1Entity2' have to contain to ALL identifier columns of the source entity 'Doctrine\Tests\ORM\Tools\InvalidEntity1', however 'key2' are missing." @@ -77,7 +77,7 @@ public function testInvalidToOneJoinColumnSchema() $ce = $this->validator->validateClass($class2); - $this->assertEquals( + self::assertEquals( [ "The referenced column name 'id' has to be a primary key column on the target entity class 'Doctrine\Tests\ORM\Tools\InvalidEntity1'.", "The join columns of the association 'assoc' have to match to ALL identifier columns of the target entity 'Doctrine\Tests\ORM\Tools\InvalidEntity1', however 'key1, key2' are missing." @@ -96,7 +96,7 @@ public function testValidOneToOneAsIdentifierSchema() $ce = $this->validator->validateClass($class1); - $this->assertEquals([], $ce); + self::assertEquals([], $ce); } /** @@ -107,11 +107,13 @@ public function testInvalidTripleAssociationAsKeyMapping() $classThree = $this->em->getClassMetadata(DDC1649Three::class); $ce = $this->validator->validateClass($classThree); - $this->assertEquals( + self::assertEquals( [ - "Cannot map association 'Doctrine\Tests\ORM\Tools\DDC1649Three#two as identifier, because the target entity 'Doctrine\Tests\ORM\Tools\DDC1649Two' also maps an association as identifier.", - "The referenced column name 'id' has to be a primary key column on the target entity class 'Doctrine\Tests\ORM\Tools\DDC1649Two'." - ], $ce); + "Cannot map association 'Doctrine\Tests\ORM\Tools\DDC1649Three#two as identifier, because the target entity 'Doctrine\Tests\ORM\Tools\DDC1649Two' also maps an association as identifier.", + "The referenced column name 'id' has to be a primary key column on the target entity class 'Doctrine\Tests\ORM\Tools\DDC1649Two'." + ], + $ce + ); } /** @@ -122,7 +124,7 @@ public function testInvalidBiDirectionalRelationMappingMissingInversedByAttribut $class = $this->em->getClassMetadata(DDC3274One::class); $ce = $this->validator->validateClass($class); - $this->assertEquals( + self::assertEquals( [ "The field Doctrine\Tests\ORM\Tools\DDC3274One#two is on the inverse side of a bi-directional " . "relationship, but the specified mappedBy association on the target-entity " . @@ -140,7 +142,7 @@ public function testInvalidOrderByInvalidField() $class = $this->em->getClassMetadata(DDC3322One::class); $ce = $this->validator->validateClass($class); - $this->assertEquals( + self::assertEquals( [ "The association Doctrine\Tests\ORM\Tools\DDC3322One#invalidAssoc is ordered by a foreign field " . "invalidField that is not a field on the target entity Doctrine\Tests\ORM\Tools\DDC3322ValidEntity1." @@ -157,7 +159,7 @@ public function testInvalidOrderByCollectionValuedAssociation() $class = $this->em->getClassMetadata(DDC3322Two::class); $ce = $this->validator->validateClass($class); - $this->assertEquals( + self::assertEquals( [ "The association Doctrine\Tests\ORM\Tools\DDC3322Two#invalidAssoc is ordered by a field oneToMany " . "on Doctrine\Tests\ORM\Tools\DDC3322ValidEntity1 that is a collection-valued association." @@ -174,7 +176,7 @@ public function testInvalidOrderByAssociationInverseSide() $class = $this->em->getClassMetadata(DDC3322Three::class); $ce = $this->validator->validateClass($class); - $this->assertEquals( + self::assertEquals( [ "The association Doctrine\Tests\ORM\Tools\DDC3322Three#invalidAssoc is ordered by a field oneToOneInverse " . "on Doctrine\Tests\ORM\Tools\DDC3322ValidEntity1 that is the inverse side of an association." diff --git a/tests/Doctrine/Tests/ORM/Tools/SetupTest.php b/tests/Doctrine/Tests/ORM/Tools/SetupTest.php index c44cb6bcf56..3d4edb580d7 100644 --- a/tests/Doctrine/Tests/ORM/Tools/SetupTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/SetupTest.php @@ -47,33 +47,33 @@ public function testDirectoryAutoload() { Setup::registerAutoloadDirectory(__DIR__ . "/../../../../../vendor/doctrine/common/lib"); - $this->assertEquals($this->originalAutoloaderCount + 2, count(spl_autoload_functions())); + self::assertEquals($this->originalAutoloaderCount + 2, count(spl_autoload_functions())); } public function testAnnotationConfiguration() { $config = Setup::createAnnotationMetadataConfiguration([], true); - $this->assertInstanceOf(Configuration::class, $config); - $this->assertEquals(sys_get_temp_dir(), $config->getProxyDir()); - $this->assertEquals('DoctrineProxies', $config->getProxyNamespace()); - $this->assertInstanceOf(AnnotationDriver::class, $config->getMetadataDriverImpl()); + self::assertInstanceOf(Configuration::class, $config); + self::assertEquals(sys_get_temp_dir(), $config->getProxyDir()); + self::assertEquals('DoctrineProxies', $config->getProxyNamespace()); + self::assertInstanceOf(AnnotationDriver::class, $config->getMetadataDriverImpl()); } public function testXMLConfiguration() { $config = Setup::createXMLMetadataConfiguration([], true); - $this->assertInstanceOf(Configuration::class, $config); - $this->assertInstanceOf(XmlDriver::class, $config->getMetadataDriverImpl()); + self::assertInstanceOf(Configuration::class, $config); + self::assertInstanceOf(XmlDriver::class, $config->getMetadataDriverImpl()); } public function testYAMLConfiguration() { $config = Setup::createYAMLMetadataConfiguration([], true); - $this->assertInstanceOf(Configuration::class, $config); - $this->assertInstanceOf(YamlDriver::class, $config->getMetadataDriverImpl()); + self::assertInstanceOf(Configuration::class, $config); + self::assertInstanceOf(YamlDriver::class, $config->getMetadataDriverImpl()); } /** @@ -82,7 +82,7 @@ public function testYAMLConfiguration() public function testConfigureProxyDir() { $config = Setup::createAnnotationMetadataConfiguration([], true, "/foo"); - $this->assertEquals('/foo', $config->getProxyDir()); + self::assertEquals('/foo', $config->getProxyDir()); } /** @@ -93,9 +93,9 @@ public function testConfigureCache() $cache = new ArrayCache(); $config = Setup::createAnnotationMetadataConfiguration([], true, null, $cache); - $this->assertSame($cache, $config->getResultCacheImpl()); - $this->assertSame($cache, $config->getMetadataCacheImpl()); - $this->assertSame($cache, $config->getQueryCacheImpl()); + self::assertSame($cache, $config->getResultCacheImpl()); + self::assertSame($cache, $config->getMetadataCacheImpl()); + self::assertSame($cache, $config->getQueryCacheImpl()); } /** @@ -106,8 +106,8 @@ public function testConfigureCacheCustomInstance() $cache = $this->createMock(Cache::class); $config = Setup::createConfiguration([], true, $cache); - $this->assertSame($cache, $config->getResultCacheImpl()); - $this->assertSame($cache, $config->getMetadataCacheImpl()); - $this->assertSame($cache, $config->getQueryCacheImpl()); + self::assertSame($cache, $config->getResultCacheImpl()); + self::assertSame($cache, $config->getMetadataCacheImpl()); + self::assertSame($cache, $config->getQueryCacheImpl()); } } diff --git a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php index ff025df4f4b..207bf326e2f 100644 --- a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php +++ b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php @@ -71,9 +71,9 @@ public function testRegisterRemovedOnNewEntityIsIgnored() { $user = new ForumUser(); $user->username = 'romanb'; - $this->assertFalse($this->_unitOfWork->isScheduledForDelete($user)); + self::assertFalse($this->_unitOfWork->isScheduledForDelete($user)); $this->_unitOfWork->scheduleForDelete($user); - $this->assertFalse($this->_unitOfWork->isScheduledForDelete($user)); + self::assertFalse($this->_unitOfWork->isScheduledForDelete($user)); } @@ -92,12 +92,12 @@ public function testSavingSingleEntityWithIdentityColumnForcesInsert() $this->_unitOfWork->persist($user); // Check - $this->assertEquals(0, count($userPersister->getInserts())); - $this->assertEquals(0, count($userPersister->getUpdates())); - $this->assertEquals(0, count($userPersister->getDeletes())); - $this->assertFalse($this->_unitOfWork->isInIdentityMap($user)); + self::assertEquals(0, count($userPersister->getInserts())); + self::assertEquals(0, count($userPersister->getUpdates())); + self::assertEquals(0, count($userPersister->getDeletes())); + self::assertFalse($this->_unitOfWork->isInIdentityMap($user)); // should no longer be scheduled for insert - $this->assertTrue($this->_unitOfWork->isScheduledForInsert($user)); + self::assertTrue($this->_unitOfWork->isScheduledForInsert($user)); // Now lets check whether a subsequent commit() does anything $userPersister->reset(); @@ -106,12 +106,12 @@ public function testSavingSingleEntityWithIdentityColumnForcesInsert() $this->_unitOfWork->commit(); // Check. - $this->assertEquals(1, count($userPersister->getInserts())); - $this->assertEquals(0, count($userPersister->getUpdates())); - $this->assertEquals(0, count($userPersister->getDeletes())); + self::assertEquals(1, count($userPersister->getInserts())); + self::assertEquals(0, count($userPersister->getUpdates())); + self::assertEquals(0, count($userPersister->getDeletes())); // should have an id - $this->assertTrue(is_numeric($user->id)); + self::assertTrue(is_numeric($user->id)); } /** @@ -139,16 +139,16 @@ public function testCascadedIdentityColumnInsert() $this->_unitOfWork->commit(); - $this->assertTrue(is_numeric($user->id)); - $this->assertTrue(is_numeric($avatar->id)); + self::assertTrue(is_numeric($user->id)); + self::assertTrue(is_numeric($avatar->id)); - $this->assertEquals(1, count($userPersister->getInserts())); - $this->assertEquals(0, count($userPersister->getUpdates())); - $this->assertEquals(0, count($userPersister->getDeletes())); + self::assertEquals(1, count($userPersister->getInserts())); + self::assertEquals(0, count($userPersister->getUpdates())); + self::assertEquals(0, count($userPersister->getDeletes())); - $this->assertEquals(1, count($avatarPersister->getInserts())); - $this->assertEquals(0, count($avatarPersister->getUpdates())); - $this->assertEquals(0, count($avatarPersister->getDeletes())); + self::assertEquals(1, count($avatarPersister->getInserts())); + self::assertEquals(0, count($avatarPersister->getUpdates())); + self::assertEquals(0, count($avatarPersister->getDeletes())); } public function testChangeTrackingNotify() @@ -163,17 +163,17 @@ public function testChangeTrackingNotify() $this->_unitOfWork->persist($entity); $this->_unitOfWork->commit(); - $this->assertEquals(1, count($persister->getInserts())); + self::assertEquals(1, count($persister->getInserts())); $persister->reset(); - $this->assertTrue($this->_unitOfWork->isInIdentityMap($entity)); + self::assertTrue($this->_unitOfWork->isInIdentityMap($entity)); $entity->setData('newdata'); $entity->setTransient('newtransientvalue'); - $this->assertTrue($this->_unitOfWork->isScheduledForDirtyCheck($entity)); + self::assertTrue($this->_unitOfWork->isScheduledForDirtyCheck($entity)); - $this->assertEquals(['data' => ['thedata', 'newdata']], $this->_unitOfWork->getEntityChangeSet($entity)); + self::assertEquals(['data' => ['thedata', 'newdata']], $this->_unitOfWork->getEntityChangeSet($entity)); $item = new NotifyChangedRelatedItem(); $entity->getItems()->add($item); @@ -181,18 +181,18 @@ public function testChangeTrackingNotify() $this->_unitOfWork->persist($item); $this->_unitOfWork->commit(); - $this->assertEquals(1, count($itemPersister->getInserts())); + self::assertEquals(1, count($itemPersister->getInserts())); $persister->reset(); $itemPersister->reset(); $entity->getItems()->removeElement($item); $item->setOwner(null); - $this->assertTrue($entity->getItems()->isDirty()); + self::assertTrue($entity->getItems()->isDirty()); $this->_unitOfWork->commit(); $updates = $itemPersister->getUpdates(); - $this->assertEquals(1, count($updates)); - $this->assertTrue($updates[0] === $item); + self::assertEquals(1, count($updates)); + self::assertTrue($updates[0] === $item); } public function testGetEntityStateOnVersionedEntityWithAssignedIdentifier() @@ -202,8 +202,8 @@ public function testGetEntityStateOnVersionedEntityWithAssignedIdentifier() $e = new VersionedAssignedIdentifierEntity(); $e->id = 42; - $this->assertEquals(UnitOfWork::STATE_NEW, $this->_unitOfWork->getEntityState($e)); - $this->assertFalse($persister->isExistsCalled()); + self::assertEquals(UnitOfWork::STATE_NEW, $this->_unitOfWork->getEntityState($e)); + self::assertFalse($persister->isExistsCalled()); } public function testGetEntityStateWithAssignedIdentity() @@ -214,19 +214,19 @@ public function testGetEntityStateWithAssignedIdentity() $ph = new CmsPhonenumber(); $ph->phonenumber = '12345'; - $this->assertEquals(UnitOfWork::STATE_NEW, $this->_unitOfWork->getEntityState($ph)); - $this->assertTrue($persister->isExistsCalled()); + self::assertEquals(UnitOfWork::STATE_NEW, $this->_unitOfWork->getEntityState($ph)); + self::assertTrue($persister->isExistsCalled()); $persister->reset(); // if the entity is already managed the exists() check should be skipped $this->_unitOfWork->registerManaged($ph, ['phonenumber' => '12345'], []); - $this->assertEquals(UnitOfWork::STATE_MANAGED, $this->_unitOfWork->getEntityState($ph)); - $this->assertFalse($persister->isExistsCalled()); + self::assertEquals(UnitOfWork::STATE_MANAGED, $this->_unitOfWork->getEntityState($ph)); + self::assertFalse($persister->isExistsCalled()); $ph2 = new CmsPhonenumber(); $ph2->phonenumber = '12345'; - $this->assertEquals(UnitOfWork::STATE_DETACHED, $this->_unitOfWork->getEntityState($ph2)); - $this->assertFalse($persister->isExistsCalled()); + self::assertEquals(UnitOfWork::STATE_DETACHED, $this->_unitOfWork->getEntityState($ph2)); + self::assertFalse($persister->isExistsCalled()); } /** @@ -329,13 +329,13 @@ public function testRemovedAndRePersistedEntitiesAreInTheIdentityMapAndAreNotGar $entity->id = 123; $this->_unitOfWork->registerManaged($entity, ['id' => 123], []); - $this->assertTrue($this->_unitOfWork->isInIdentityMap($entity)); + self::assertTrue($this->_unitOfWork->isInIdentityMap($entity)); $this->_unitOfWork->remove($entity); - $this->assertFalse($this->_unitOfWork->isInIdentityMap($entity)); + self::assertFalse($this->_unitOfWork->isInIdentityMap($entity)); $this->_unitOfWork->persist($entity); - $this->assertTrue($this->_unitOfWork->isInIdentityMap($entity)); + self::assertTrue($this->_unitOfWork->isInIdentityMap($entity)); } /** diff --git a/tests/Doctrine/Tests/ORM/Utility/IdentifierFlattenerTest.php b/tests/Doctrine/Tests/ORM/Utility/IdentifierFlattenerTest.php index 86b6503d376..35cf244a339 100644 --- a/tests/Doctrine/Tests/ORM/Utility/IdentifierFlattenerTest.php +++ b/tests/Doctrine/Tests/ORM/Utility/IdentifierFlattenerTest.php @@ -72,11 +72,11 @@ public function testFlattenIdentifierWithOneToOneId() $id = $class->getIdentifierValues($firstEntity); - $this->assertCount(1, $id, 'We should have 1 identifier'); + self::assertCount(1, $id, 'We should have 1 identifier'); - $this->assertArrayHasKey('secondEntity', $id, 'It should be called secondEntity'); + self::assertArrayHasKey('secondEntity', $id, 'It should be called secondEntity'); - $this->assertInstanceOf( + self::assertInstanceOf( '\Doctrine\Tests\Models\VersionedOneToOne\SecondRelatedEntity', $id['secondEntity'], 'The entity should be an instance of SecondRelatedEntity' @@ -84,11 +84,11 @@ public function testFlattenIdentifierWithOneToOneId() $flatIds = $this->identifierFlattener->flattenIdentifier($class, $id); - $this->assertCount(1, $flatIds, 'We should have 1 flattened id'); + self::assertCount(1, $flatIds, 'We should have 1 flattened id'); - $this->assertArrayHasKey('secondEntity', $flatIds, 'It should be called secondEntity'); + self::assertArrayHasKey('secondEntity', $flatIds, 'It should be called secondEntity'); - $this->assertEquals($id['secondEntity']->id, $flatIds['secondEntity']); + self::assertEquals($id['secondEntity']->id, $flatIds['secondEntity']); } /** @@ -111,22 +111,22 @@ public function testFlattenIdentifierWithMutlipleIds() $class = $this->_em->getClassMetadata(Flight::class); $id = $class->getIdentifierValues($flight); - $this->assertCount(2, $id); + self::assertCount(2, $id); - $this->assertArrayHasKey('leavingFrom', $id); - $this->assertArrayHasKey('goingTo', $id); + self::assertArrayHasKey('leavingFrom', $id); + self::assertArrayHasKey('goingTo', $id); - $this->assertEquals($leeds, $id['leavingFrom']); - $this->assertEquals($london, $id['goingTo']); + self::assertEquals($leeds, $id['leavingFrom']); + self::assertEquals($london, $id['goingTo']); $flatIds = $this->identifierFlattener->flattenIdentifier($class, $id); - $this->assertCount(2, $flatIds); + self::assertCount(2, $flatIds); - $this->assertArrayHasKey('leavingFrom', $flatIds); - $this->assertArrayHasKey('goingTo', $flatIds); + self::assertArrayHasKey('leavingFrom', $flatIds); + self::assertArrayHasKey('goingTo', $flatIds); - $this->assertEquals($id['leavingFrom']->getId(), $flatIds['leavingFrom']); - $this->assertEquals($id['goingTo']->getId(), $flatIds['goingTo']); + self::assertEquals($id['leavingFrom']->getId(), $flatIds['leavingFrom']); + self::assertEquals($id['goingTo']->getId(), $flatIds['goingTo']); } } diff --git a/tests/Doctrine/Tests/OrmFunctionalTestCase.php b/tests/Doctrine/Tests/OrmFunctionalTestCase.php index e9299b1c685..bcdb783c533 100644 --- a/tests/Doctrine/Tests/OrmFunctionalTestCase.php +++ b/tests/Doctrine/Tests/OrmFunctionalTestCase.php @@ -814,7 +814,7 @@ protected function onNotSuccessfulTest(\Throwable $e) public function assertSQLEquals($expectedSql, $actualSql) { - return $this->assertEquals(strtolower($expectedSql), strtolower($actualSql), "Lowercase comparison of SQL statements failed."); + return self::assertEquals(strtolower($expectedSql), strtolower($actualSql), "Lowercase comparison of SQL statements failed."); } /** From 0b7e45c727861c96940a8a2ab9faafbed9ecc032 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sun, 8 May 2016 10:18:16 +0000 Subject: [PATCH 011/275] Added declaringClass and fixed almost all unit tests with the exception of EntityGeneratorTest. No explanation why it iss failing yet --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 62 +- .../ORM/Mapping/ClassMetadataFactory.php | 12 - .../ORM/Tools/Export/Driver/PhpExporter.php | 74 +- .../Pagination/LimitSubqueryOutputWalker.php | 12 +- .../ORM/Mapping/ClassMetadataBuilderTest.php | 777 +++++++++--------- .../ORM/Mapping/XmlMappingDriverTest.php | 9 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 40 +- 7 files changed, 484 insertions(+), 502 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 045df3d31ee..385653e3cc9 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -937,15 +937,11 @@ public function wakeupReflection($reflService) continue; } - $this->reflFields[$field] = isset($mapping['declared']) - ? $reflService->getAccessibleProperty($mapping['declared'], $field) - : $reflService->getAccessibleProperty($this->name, $field); + $this->reflFields[$field] = $reflService->getAccessibleProperty($mapping['declaringClass']->name, $field); } foreach ($this->associationMappings as $field => $mapping) { - $this->reflFields[$field] = isset($mapping['declared']) - ? $reflService->getAccessibleProperty($mapping['declared'], $field) - : $reflService->getAccessibleProperty($this->name, $field); + $this->reflFields[$field] = $reflService->getAccessibleProperty($mapping['declaringClass']->name, $field); } } @@ -1358,6 +1354,8 @@ public function getSqlResultSetMappings() */ protected function validateAndCompleteFieldMapping(array &$mapping) { + $mapping['declaringClass'] = $this; + // Check mandatory fields if ( ! isset($mapping['fieldName']) || ! $mapping['fieldName']) { throw MappingException::missingFieldName($this->name); @@ -1426,6 +1424,8 @@ protected function validateAndCompleteFieldMapping(array &$mapping) */ protected function validateAndCompleteAssociationMapping(array $mapping) { + $mapping['declaringClass'] = $this; + if ( ! isset($mapping['mappedBy'])) { $mapping['mappedBy'] = null; } @@ -2186,25 +2186,25 @@ public function setAttributeOverride($fieldName, array $overrideMapping) } /** - * Checks whether a mapped field is inherited from an entity superclass. - * - * @param string $fieldName + * Checks if this entity is the root in any entity-inheritance-hierarchy. * - * @return bool TRUE if the field is inherited, FALSE otherwise. + * @return bool */ - public function isInheritedField($fieldName) + public function isRootEntity() { - return isset($this->fieldMappings[$fieldName]['inherited']); + return $this->name == $this->rootEntityName; } /** - * Checks if this entity is the root in any entity-inheritance-hierarchy. + * Checks whether a mapped field is inherited from an entity superclass. * - * @return bool + * @param string $fieldName + * + * @return bool TRUE if the field is inherited, FALSE otherwise. */ - public function isRootEntity() + public function isInheritedField($fieldName) { - return $this->name == $this->rootEntityName; + return isset($this->fieldMappings[$fieldName]['inherited']); } /** @@ -2219,6 +2219,13 @@ public function isInheritedAssociation($fieldName) return isset($this->associationMappings[$fieldName]['inherited']); } + /** + * Checks whether a mapped embedded field is inherited from a superclass. + * + * @param string $fieldName + * + * @return boolean TRUE if the field is inherited, FALSE otherwise. + */ public function isInheritedEmbeddedClass($fieldName) { return isset($this->embeddedClasses[$fieldName]['inherited']); @@ -3249,10 +3256,11 @@ public function mapEmbedded(array $mapping) $this->assertFieldNotMapped($mapping['fieldName']); $this->embeddedClasses[$mapping['fieldName']] = [ - 'class' => $this->fullyQualifiedClassName($mapping['class']), - 'columnPrefix' => $mapping['columnPrefix'], - 'declaredField' => isset($mapping['declaredField']) ? $mapping['declaredField'] : null, - 'originalField' => isset($mapping['originalField']) ? $mapping['originalField'] : null, + 'class' => $this->fullyQualifiedClassName($mapping['class']), + 'columnPrefix' => $mapping['columnPrefix'], + 'declaredField' => isset($mapping['declaredField']) ? $mapping['declaredField'] : null, + 'originalField' => isset($mapping['originalField']) ? $mapping['originalField'] : null, + 'declaringClass' => $this, ]; } @@ -3279,13 +3287,12 @@ public function inlineEmbeddable($property, ClassMetadata $embeddable) if (! empty($this->embeddedClasses[$property]['columnPrefix'])) { $fieldMapping['columnName'] = $this->embeddedClasses[$property]['columnPrefix'] . $fieldMapping['columnName']; } elseif ($this->embeddedClasses[$property]['columnPrefix'] !== false) { - $fieldMapping['columnName'] = $this->namingStrategy - ->embeddedFieldToColumnName( - $property, - $fieldMapping['columnName'], - $this->reflClass->name, - $embeddable->reflClass->name - ); + $fieldMapping['columnName'] = $this->namingStrategy->embeddedFieldToColumnName( + $property, + $fieldMapping['columnName'], + $this->reflClass->name, + $embeddable->reflClass->name + ); } $this->mapField($fieldMapping); @@ -3301,7 +3308,6 @@ private function assertFieldNotMapped($fieldName) if (isset($this->fieldMappings[$fieldName]) || isset($this->associationMappings[$fieldName]) || isset($this->embeddedClasses[$fieldName])) { - throw MappingException::duplicateFieldMapping($this->name, $fieldName); } } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index d2e2edae8bf..2967015c17d 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -400,10 +400,6 @@ private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $pare $mapping['inherited'] = $parentClass->name; } - if ( ! isset($mapping['declared'])) { - $mapping['declared'] = $parentClass->name; - } - $subClass->addInheritedFieldMapping($mapping); } @@ -438,10 +434,6 @@ private function addInheritedRelations(ClassMetadata $subClass, ClassMetadata $p $mapping['inherited'] = $parentClass->name; } - if ( ! isset($mapping['declared'])) { - $mapping['declared'] = $parentClass->name; - } - $subClass->addInheritedAssociationMapping($mapping); } } @@ -453,10 +445,6 @@ private function addInheritedEmbeddedClasses(ClassMetadata $subClass, ClassMetad $embeddedClass['inherited'] = $parentClass->name; } - if ( ! isset($embeddedClass['declared'])) { - $embeddedClass['declared'] = $parentClass->name; - } - $subClass->embeddedClasses[$field] = $embeddedClass; } } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 6daaa100611..a557b823458 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -86,6 +86,8 @@ public function exportClassMetadata(ClassMetadata $metadata) // We need to override the value we'll blindly var_export() later $fieldMapping['type'] = $fieldMapping['type']->getName(); + unset($fieldMapping['declaringClass']); + $lines[] = '$metadata->mapField(' . $this->_varExport($fieldMapping) . ');'; } @@ -109,53 +111,71 @@ public function exportClassMetadata(ClassMetadata $metadata) $associationMappingArray = [ 'fieldName' => $associationMapping['fieldName'], 'targetEntity' => $associationMapping['targetEntity'], - 'cascade' => $cascade, + 'cascade' => $cascade, ]; if (isset($associationMapping['fetch'])) { $associationMappingArray['fetch'] = $associationMapping['fetch']; } - if ($associationMapping['type'] & ClassMetadata::TO_ONE) { - $method = 'mapOneToOne'; - $oneToOneMappingArray = [ - 'mappedBy' => $associationMapping['mappedBy'], - 'inversedBy' => $associationMapping['inversedBy'], - 'joinColumns' => $associationMapping['isOwningSide'] ? $associationMapping['joinColumns'] : [], - 'orphanRemoval' => $associationMapping['orphanRemoval'], - ]; - - $associationMappingArray = array_merge($associationMappingArray, $oneToOneMappingArray); - } elseif ($associationMapping['type'] == ClassMetadata::ONE_TO_MANY) { + switch ($associationMapping['type'] ) { + case ClassMetadata::ONE_TO_ONE: + $method = 'mapOneToOne'; + $specificMappingArray = [ + 'mappedBy' => $associationMapping['mappedBy'], + 'inversedBy' => $associationMapping['inversedBy'], + 'joinColumns' => $associationMapping['isOwningSide'] ? $associationMapping['joinColumns'] : [], + 'orphanRemoval' => $associationMapping['orphanRemoval'], + ]; + break; + + case ClassMetadata::MANY_TO_ONE: + $method = 'mapManyToOne'; + $specificMappingArray = [ + 'mappedBy' =>$associationMapping['mappedBy'], + 'inversedBy' => $associationMapping['inversedBy'], + 'joinColumns' => $associationMapping['isOwningSide'] ? $associationMapping['joinColumns'] : [], + 'orphanRemoval' => $associationMapping['orphanRemoval'], + ]; + break; + + case ClassMetadata::ONE_TO_MANY: $method = 'mapOneToMany'; - $potentialAssociationMappingIndexes = [ + $specificMappingArray = []; + $potentialAssociationMappingIndexes = [ 'mappedBy', 'orphanRemoval', 'orderBy', ]; - $oneToManyMappingArray = []; - foreach ($potentialAssociationMappingIndexes as $index) { - if (isset($associationMapping[$index])) { - $oneToManyMappingArray[$index] = $associationMapping[$index]; +$oneToManyMappingArray = []; foreach ($potentialAssociationMappingIndexes as $index) { + if (!isset($associationMapping[$index])) { + continue; + } + + $specificMappingArray[$index] = $associationMapping[$index]; } - } - $associationMappingArray = array_merge($associationMappingArray, $oneToManyMappingArray); - } elseif ($associationMapping['type'] == ClassMetadata::MANY_TO_MANY) { + break; + + case ClassMetadata::MANY_TO_MANY: $method = 'mapManyToMany'; - $potentialAssociationMappingIndexes = [ + $specificMappingArray = []; + $potentialAssociationMappingIndexes = [ 'mappedBy', 'joinTable', 'orderBy', - ]; - $manyToManyMappingArray = []; + ];$manyToManyMappingArray = []; foreach ($potentialAssociationMappingIndexes as $index) { - if (isset($associationMapping[$index])) { - $manyToManyMappingArray[$index] = $associationMapping[$index]; + if (!isset($associationMapping[$index])) { + continue; + } + + $specificMappingArray[$index] = $associationMapping[$index]; } - } - $associationMappingArray = array_merge($associationMappingArray, $manyToManyMappingArray); + break; } + $associationMappingArray = array_merge($associationMappingArray, $specificMappingArray); + $lines[] = '$metadata->' . $method . '(' . $this->_varExport($associationMappingArray) . ');'; } diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php index 2e6172ba389..e9eeeec1d5c 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php @@ -470,13 +470,15 @@ private function generateSqlAliasReplacements() : array // Get the SQL table alias for the entity and field $sqlTableAliasForFieldAlias = $aliasMap[$dqlAliasForFieldAlias]; - if (isset($fieldMapping['declared']) && $fieldMapping['declared'] !== $class->name) { + + if ($fieldMapping['declaringClass']->name !== $class->name) { // Field was declared in a parent class, so we need to get the proper SQL table alias // for the joined parent table. - $otherClassMetadata = $this->em->getClassMetadata($fieldMapping['declared']); - - if ( ! $otherClassMetadata->isMappedSuperclass) { - $sqlTableAliasForFieldAlias = $this->getSQLTableAlias($otherClassMetadata->getTableName(), $dqlAliasForFieldAlias); + if ( ! $fieldMapping['declaringClass']->isMappedSuperclass) { + $sqlTableAliasForFieldAlias = $this->getSQLTableAlias( + $fieldMapping['declaringClass']->getTableName(), + $dqlAliasForFieldAlias + ); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php index a131d467516..069670ce19f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php @@ -55,10 +55,11 @@ public function testAddEmbeddedWithOnlyRequiredParams() self::assertEquals( [ 'name' => [ - 'class' => Name::class, - 'columnPrefix' => null, - 'declaredField' => null, - 'originalField' => null, + 'class' => Name::class, + 'columnPrefix' => null, + 'declaredField' => null, + 'originalField' => null, + 'declaringClass' => $this->cm, ] ], $this->cm->embeddedClasses @@ -67,21 +68,16 @@ public function testAddEmbeddedWithOnlyRequiredParams() public function testAddEmbeddedWithPrefix() { - self::assertIsFluent( - $this->builder->addEmbedded( - 'name', - Name::class, - 'nm_' - ) - ); + self::assertIsFluent($this->builder->addEmbedded('name', Name::class, 'nm_')); self::assertEquals( [ 'name' => [ - 'class' => Name::class, - 'columnPrefix' => 'nm_', - 'declaredField' => null, - 'originalField' => null, + 'class' => 'Doctrine\Tests\Models\ValueObjects\Name', + 'columnPrefix' => 'nm_', + 'declaredField' => null, + 'originalField' => null, + 'declaringClass' => $this->cm, ] ], $this->cm->embeddedClasses @@ -90,18 +86,19 @@ public function testAddEmbeddedWithPrefix() public function testCreateEmbeddedWithoutExtraParams() { - $embeddedBuilder = ($this->builder->createEmbedded('name', Name::class)); - self::assertInstanceOf(EmbeddedBuilder::class, $embeddedBuilder); + $embeddedBuilder = $this->builder->createEmbedded('name', Name::class); + self::assertInstanceOf(EmbeddedBuilder::class, $embeddedBuilder); self::assertFalse(isset($this->cm->embeddedClasses['name'])); self::assertIsFluent($embeddedBuilder->build()); self::assertEquals( [ - 'class' => Name::class, - 'columnPrefix' => null, - 'declaredField' => null, - 'originalField' => null + 'class' => Name::class, + 'columnPrefix' => null, + 'declaredField' => null, + 'originalField' => null, + 'declaringClass' => $this->cm, ], $this->cm->embeddedClasses['name'] ); @@ -109,18 +106,18 @@ public function testCreateEmbeddedWithoutExtraParams() public function testCreateEmbeddedWithColumnPrefix() { - $embeddedBuilder = ($this->builder->createEmbedded('name', Name::class)); + $embeddedBuilder = $this->builder->createEmbedded('name', Name::class); self::assertEquals($embeddedBuilder, $embeddedBuilder->setColumnPrefix('nm_')); self::assertIsFluent($embeddedBuilder->build()); - self::assertEquals( [ - 'class' => Name::class, - 'columnPrefix' => 'nm_', - 'declaredField' => null, - 'originalField' => null + 'class' => Name::class, + 'columnPrefix' => 'nm_', + 'declaredField' => null, + 'originalField' => null, + 'declaringClass' => $this->cm, ], $this->cm->embeddedClasses['name'] ); @@ -224,9 +221,10 @@ public function testAddField() self::assertIsFluent($this->builder->addField('name', 'string')); self::assertEquals( [ - 'columnName' => 'name', - 'fieldName' => 'name', - 'type' => Type::getType('string') + 'columnName' => 'name', + 'fieldName' => 'name', + 'type' => Type::getType('string'), + 'declaringClass' => $this->cm, ], $this->cm->fieldMappings['name'] ); @@ -234,16 +232,18 @@ public function testAddField() public function testCreateField() { - $fieldBuilder = ($this->builder->createField('name', 'string')); - self::assertInstanceOf(FieldBuilder::class, $fieldBuilder); + $fieldBuilder = $this->builder->createField('name', 'string'); + self::assertInstanceOf(FieldBuilder::class, $fieldBuilder); self::assertFalse(isset($this->cm->fieldMappings['name'])); + self::assertIsFluent($fieldBuilder->build()); self::assertEquals( [ - 'columnName' => 'name', - 'fieldName' => 'name', - 'type' => Type::getType('string'), + 'columnName' => 'name', + 'fieldName' => 'name', + 'type' => Type::getType('string'), + 'declaringClass' => $this->cm, ], $this->cm->fieldMappings['name'] ); @@ -263,13 +263,14 @@ public function testCreateVersionedField() self::assertEquals( [ 'columnDefinition' => 'foobar', - 'columnName' => 'username', - 'default' => 1, - 'fieldName' => 'name', - 'length' => 124, - 'type' => Type::getType('integer'), - 'nullable' => true, - 'unique' => true, + 'columnName' => 'username', + 'default' => 1, + 'fieldName' => 'name', + 'length' => 124, + 'type' => Type::getType('integer'), + 'nullable' => true, + 'unique' => true, + 'declaringClass' => $this->cm, ], $this->cm->fieldMappings['name'] ); @@ -277,15 +278,19 @@ public function testCreateVersionedField() public function testCreatePrimaryField() { - $this->builder->createField('id', 'integer')->makePrimaryKey()->generatedValue()->build(); + $this->builder->createField('id', 'integer') + ->makePrimaryKey() + ->generatedValue() + ->build(); self::assertEquals(['id'], $this->cm->identifier); self::assertEquals( [ - 'columnName' => 'id', - 'fieldName' => 'id', - 'id' => true, - 'type' => Type::getType('integer'), + 'columnName' => 'id', + 'fieldName' => 'id', + 'id' => true, + 'type' => Type::getType('integer'), + 'declaringClass' => $this->cm, ], $this->cm->fieldMappings['id'] ); @@ -293,14 +298,17 @@ public function testCreatePrimaryField() public function testCreateUnsignedOptionField() { - $this->builder->createField('state', 'integer')->option('unsigned', true)->build(); + $this->builder->createField('state', 'integer') + ->option('unsigned', true) + ->build(); self::assertEquals( [ - 'fieldName' => 'state', - 'type' => Type::getType('integer'), - 'options' => ['unsigned' => true], - 'columnName' => 'state' + 'fieldName' => 'state', + 'type' => Type::getType('integer'), + 'options' => ['unsigned' => true], + 'columnName' => 'state', + 'declaringClass' => $this->cm, ], $this->cm->fieldMappings['state'] ); @@ -317,61 +325,60 @@ public function testCreateManyToOne() { self::assertIsFluent( $this->builder->createManyToOne('groups', CmsGroup::class) - ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') - ->cascadeAll() - ->fetchExtraLazy() - ->build() + ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') + ->cascadeAll() + ->fetchExtraLazy() + ->build() ); self::assertEquals( [ 'groups' => [ - 'fieldName' => 'groups', - 'targetEntity' => CmsGroup::class, - 'cascade' => [ - 0 => 'remove', - 1 => 'persist', - 2 => 'refresh', - 3 => 'merge', - 4 => 'detach', - ], - 'fetch' => 4, - 'joinColumns' => [ - 0 => - [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => false, - 'onDelete' => 'CASCADE', - 'columnDefinition' => NULL, + 'fieldName' => 'groups', + 'targetEntity' => CmsGroup::class, + 'cascade' => [ + 0 => 'remove', + 1 => 'persist', + 2 => 'refresh', + 3 => 'merge', + 4 => 'detach', + ], + 'fetch' => 4, + 'joinColumns' => [ + 0 => [ + 'name' => 'group_id', + 'referencedColumnName' => 'id', + 'nullable' => true, + 'unique' => false, + 'onDelete' => 'CASCADE', + 'columnDefinition' => NULL, + ], + ], + 'type' => 2, + 'mappedBy' => NULL, + 'inversedBy' => NULL, + 'isOwningSide' => true, + 'sourceEntity' => CmsUser::class, + 'isCascadeRemove' => true, + 'isCascadePersist' => true, + 'isCascadeRefresh' => true, + 'isCascadeMerge' => true, + 'isCascadeDetach' => true, + 'sourceToTargetKeyColumns' => [ + 'group_id' => 'id', + ], + 'joinColumnFieldNames' => [ + 'group_id' => 'group_id', + ], + 'targetToSourceKeyColumns' => [ + 'id' => 'group_id', + ], + 'orphanRemoval' => false, + 'declaringClass' => $this->cm, ], - ], - 'type' => 2, - 'mappedBy' => NULL, - 'inversedBy' => NULL, - 'isOwningSide' => true, - 'sourceEntity' => CmsUser::class, - 'isCascadeRemove' => true, - 'isCascadePersist' => true, - 'isCascadeRefresh' => true, - 'isCascadeMerge' => true, - 'isCascadeDetach' => true, - 'sourceToTargetKeyColumns' => - [ - 'group_id' => 'id', - ], - 'joinColumnFieldNames' => - [ - 'group_id' => 'group_id', - ], - 'targetToSourceKeyColumns' => - [ - 'id' => 'group_id', - ], - 'orphanRemoval' => false, - ], - ], $this->cm->associationMappings); + ], + $this->cm->associationMappings + ); } public function testCreateManyToOneWithIdentity() @@ -401,15 +408,14 @@ public function testCreateManyToOneWithIdentity() ], 'fetch' => 4, 'joinColumns' => [ - 0 => - [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => false, - 'onDelete' => 'CASCADE', - 'columnDefinition' => NULL, - ], + 0 => [ + 'name' => 'group_id', + 'referencedColumnName' => 'id', + 'nullable' => true, + 'unique' => false, + 'onDelete' => 'CASCADE', + 'columnDefinition' => NULL, + ], ], 'type' => 2, 'mappedBy' => NULL, @@ -421,20 +427,12 @@ public function testCreateManyToOneWithIdentity() 'isCascadeRefresh' => true, 'isCascadeMerge' => true, 'isCascadeDetach' => true, - 'sourceToTargetKeyColumns' => - [ - 'group_id' => 'id', - ], - 'joinColumnFieldNames' => - [ - 'group_id' => 'group_id', - ], - 'targetToSourceKeyColumns' => - [ - 'id' => 'group_id', - ], + 'sourceToTargetKeyColumns' => ['group_id' => 'id'], + 'joinColumnFieldNames' => ['group_id' => 'group_id'], + 'targetToSourceKeyColumns' => ['id' => 'group_id'], 'orphanRemoval' => false, - 'id' => true + 'declaringClass' => $this->cm, + 'id' => true, ], ], $this->cm->associationMappings @@ -445,69 +443,60 @@ public function testCreateOneToOne() { self::assertIsFluent( $this->builder->createOneToOne('groups', CmsGroup::class) - ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') - ->cascadeAll() - ->fetchExtraLazy() - ->build() + ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') + ->cascadeAll() + ->fetchExtraLazy() + ->build() ); self::assertEquals( [ 'groups' => [ - 'fieldName' => 'groups', - 'targetEntity' => CmsGroup::class, - 'cascade' => [ - 0 => 'remove', - 1 => 'persist', - 2 => 'refresh', - 3 => 'merge', - 4 => 'detach', - ], - 'fetch' => 4, - 'joinColumns' => [ - 0 => - [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => true, - 'onDelete' => 'CASCADE', - 'columnDefinition' => NULL, - ], - ], - 'type' => 1, - 'mappedBy' => NULL, - 'inversedBy' => NULL, - 'isOwningSide' => true, - 'sourceEntity' => CmsUser::class, - 'isCascadeRemove' => true, - 'isCascadePersist' => true, - 'isCascadeRefresh' => true, - 'isCascadeMerge' => true, - 'isCascadeDetach' => true, - 'sourceToTargetKeyColumns' => - [ - 'group_id' => 'id', - ], - 'joinColumnFieldNames' => - [ - 'group_id' => 'group_id', - ], - 'targetToSourceKeyColumns' => - [ - 'id' => 'group_id', - ], - 'orphanRemoval' => false + 'fieldName' => 'groups', + 'targetEntity' => CmsGroup::class, + 'cascade' => [ + 0 => 'remove', + 1 => 'persist', + 2 => 'refresh', + 3 => 'merge', + 4 => 'detach', + ], + 'fetch' => 4, + 'joinColumns' => [ + 0 => [ + 'name' => 'group_id', + 'referencedColumnName' => 'id', + 'nullable' => true, + 'unique' => true, + 'onDelete' => 'CASCADE', + 'columnDefinition' => NULL, + ], + ], + 'type' => 1, + 'mappedBy' => NULL, + 'inversedBy' => NULL, + 'isOwningSide' => true, + 'sourceEntity' => CmsUser::class, + 'isCascadeRemove' => true, + 'isCascadePersist' => true, + 'isCascadeRefresh' => true, + 'isCascadeMerge' => true, + 'isCascadeDetach' => true, + 'sourceToTargetKeyColumns' => ['group_id' => 'id'], + 'joinColumnFieldNames' => ['group_id' => 'group_id'], + 'targetToSourceKeyColumns' => ['id' => 'group_id'], + 'orphanRemoval' => false, + 'declaringClass' => $this->cm, ], - ], $this->cm->associationMappings); + ], + $this->cm->associationMappings + ); } public function testCreateOneToOneWithIdentity() { self::assertIsFluent( - $this - ->builder - ->createOneToOne('groups', CmsGroup::class) + $this->builder->createOneToOne('groups', CmsGroup::class) ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') ->cascadeAll() ->fetchExtraLazy() @@ -530,15 +519,14 @@ public function testCreateOneToOneWithIdentity() 'fetch' => 4, 'id' => true, 'joinColumns' => [ - 0 => - [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => false, - 'onDelete' => 'CASCADE', - 'columnDefinition' => NULL, - ], + 0 => [ + 'name' => 'group_id', + 'referencedColumnName' => 'id', + 'nullable' => true, + 'unique' => false, + 'onDelete' => 'CASCADE', + 'columnDefinition' => NULL, + ], ], 'type' => 1, 'mappedBy' => NULL, @@ -550,19 +538,11 @@ public function testCreateOneToOneWithIdentity() 'isCascadeRefresh' => true, 'isCascadeMerge' => true, 'isCascadeDetach' => true, - 'sourceToTargetKeyColumns' => - [ - 'group_id' => 'id', - ], - 'joinColumnFieldNames' => - [ - 'group_id' => 'group_id', - ], - 'targetToSourceKeyColumns' => - [ - 'id' => 'group_id', - ], - 'orphanRemoval' => false + 'sourceToTargetKeyColumns' => ['group_id' => 'id'], + 'joinColumnFieldNames' => ['group_id' => 'group_id'], + 'targetToSourceKeyColumns' => ['id' => 'group_id'], + 'orphanRemoval' => false, + 'declaringClass' => $this->cm, ], ], $this->cm->associationMappings @@ -586,84 +566,74 @@ public function testCreateManyToMany() { self::assertIsFluent( $this->builder->createManyToMany('groups', CmsGroup::class) - ->setJoinTable('groups_users') - ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') - ->addInverseJoinColumn('user_id', 'id') - ->cascadeAll() - ->fetchExtraLazy() - ->build() + ->setJoinTable('groups_users') + ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') + ->addInverseJoinColumn('user_id', 'id') + ->cascadeAll() + ->fetchExtraLazy() + ->build() ); self::assertEquals( [ - 'groups' => - [ - 'fieldName' => 'groups', - 'targetEntity' => CmsGroup::class, - 'cascade' => - [ - 0 => 'remove', - 1 => 'persist', - 2 => 'refresh', - 3 => 'merge', - 4 => 'detach', - ], - 'fetch' => 4, - 'joinTable' => - [ - 'joinColumns' => + 'groups' => [ + 'fieldName' => 'groups', + 'targetEntity' => CmsGroup::class, + 'cascade' => [ - 0 => - [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => false, - 'onDelete' => 'CASCADE', - 'columnDefinition' => NULL, - ], + 0 => 'remove', + 1 => 'persist', + 2 => 'refresh', + 3 => 'merge', + 4 => 'detach', ], - 'inverseJoinColumns' => - [ - 0 => - [ - 'name' => 'user_id', - 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => false, - 'onDelete' => NULL, - 'columnDefinition' => NULL, + 'fetch' => 4, + 'joinTable' => [ + 'joinColumns' =>[ + 0 => [ + 'name' => 'group_id', + 'referencedColumnName' => 'id', + 'nullable' => true, + 'unique' => false, + 'onDelete' => 'CASCADE', + 'columnDefinition' => NULL, + ], + ], + 'inverseJoinColumns' => [ + 0 => [ + 'name' => 'user_id', + 'referencedColumnName' => 'id', + 'nullable' => true, + 'unique' => false, + 'onDelete' => NULL, + 'columnDefinition' => NULL, + ], ], + 'name' => 'groups_users', ], - 'name' => 'groups_users', - ], - 'type' => 8, - 'mappedBy' => NULL, - 'inversedBy' => NULL, - 'isOwningSide' => true, - 'sourceEntity' => CmsUser::class, - 'isCascadeRemove' => true, - 'isCascadePersist' => true, - 'isCascadeRefresh' => true, - 'isCascadeMerge' => true, - 'isCascadeDetach' => true, - 'isOnDeleteCascade' => true, - 'relationToSourceKeyColumns' => - [ - 'group_id' => 'id', - ], - 'joinTableColumns' => - [ - 0 => 'group_id', - 1 => 'user_id', - ], - 'relationToTargetKeyColumns' => - [ - 'user_id' => 'id', + 'type' => 8, + 'mappedBy' => NULL, + 'inversedBy' => NULL, + 'isOwningSide' => true, + 'sourceEntity' => CmsUser::class, + 'isCascadeRemove' => true, + 'isCascadePersist' => true, + 'isCascadeRefresh' => true, + 'isCascadeMerge' => true, + 'isCascadeDetach' => true, + 'isOnDeleteCascade' => true, + 'relationToSourceKeyColumns' => ['group_id' => 'id'], + 'joinTableColumns' => [ + 0 => 'group_id', + 1 => 'user_id', + ], + 'relationToTargetKeyColumns' => ['user_id' => 'id'], + 'orphanRemoval' => false, + 'declaringClass' => $this->cm, ], - 'orphanRemoval' => false, ], - ], $this->cm->associationMappings); + $this->cm->associationMappings + ); } public function testThrowsExceptionOnCreateManyToManyWithIdentity() @@ -671,53 +641,52 @@ public function testThrowsExceptionOnCreateManyToManyWithIdentity() $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); $this->builder->createManyToMany('groups', CmsGroup::class) - ->makePrimaryKey() - ->setJoinTable('groups_users') - ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') - ->addInverseJoinColumn('user_id', 'id') - ->cascadeAll() - ->fetchExtraLazy() - ->build(); + ->makePrimaryKey() + ->setJoinTable('groups_users') + ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') + ->addInverseJoinColumn('user_id', 'id') + ->cascadeAll() + ->fetchExtraLazy() + ->build(); } public function testCreateOneToMany() { self::assertIsFluent( - $this->builder->createOneToMany('groups', CmsGroup::class) - ->mappedBy('test') - ->setOrderBy(['test']) - ->setIndexBy('test') - ->build() + $this->builder->createOneToMany('groups', CmsGroup::class) + ->mappedBy('test') + ->setOrderBy(['test']) + ->setIndexBy('test') + ->build() ); self::assertEquals( [ - 'groups' => - [ - 'fieldName' => 'groups', - 'targetEntity' => CmsGroup::class, - 'mappedBy' => 'test', - 'orderBy' => - [ - 0 => 'test', - ], - 'indexBy' => 'test', - 'type' => 4, - 'inversedBy' => NULL, - 'isOwningSide' => false, - 'sourceEntity' => CmsUser::class, - 'fetch' => 2, - 'cascade' => - [ + 'groups' => [ + 'fieldName' => 'groups', + 'targetEntity' => CmsGroup::class, + 'mappedBy' => 'test', + 'orderBy' => [ + 0 => 'test', + ], + 'indexBy' => 'test', + 'type' => 4, + 'inversedBy' => NULL, + 'isOwningSide' => false, + 'sourceEntity' => CmsUser::class, + 'fetch' => 2, + 'cascade' => [], + 'isCascadeRemove' => false, + 'isCascadePersist' => false, + 'isCascadeRefresh' => false, + 'isCascadeMerge' => false, + 'isCascadeDetach' => false, + 'orphanRemoval' => false, + 'declaringClass' => $this->cm, ], - 'isCascadeRemove' => false, - 'isCascadePersist' => false, - 'isCascadeRefresh' => false, - 'isCascadeMerge' => false, - 'isCascadeDetach' => false, - 'orphanRemoval' => false, ], - ], $this->cm->associationMappings); + $this->cm->associationMappings + ); } public function testThrowsExceptionOnCreateOneToManyWithIdentity() @@ -725,11 +694,11 @@ public function testThrowsExceptionOnCreateOneToManyWithIdentity() $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); $this->builder->createOneToMany('groups', CmsGroup::class) - ->makePrimaryKey() - ->mappedBy('test') - ->setOrderBy(['test']) - ->setIndexBy('test') - ->build(); + ->makePrimaryKey() + ->mappedBy('test') + ->setOrderBy(['test']) + ->setIndexBy('test') + ->build(); } public function testOrphanRemovalOnCreateOneToOne() @@ -744,47 +713,40 @@ public function testOrphanRemovalOnCreateOneToOne() self::assertEquals( [ - 'groups' => [ - 'fieldName' => 'groups', - 'targetEntity' => CmsGroup::class, - 'cascade' => [], - 'fetch' => 2, - 'joinColumns' => [ - 0 => - [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => true, - 'onDelete' => 'CASCADE', - 'columnDefinition' => NULL, - ], - ], - 'type' => 1, - 'mappedBy' => NULL, - 'inversedBy' => NULL, - 'isOwningSide' => true, - 'sourceEntity' => CmsUser::class, - 'isCascadeRemove' => true, - 'isCascadePersist' => false, - 'isCascadeRefresh' => false, - 'isCascadeMerge' => false, - 'isCascadeDetach' => false, - 'sourceToTargetKeyColumns' => - [ - 'group_id' => 'id', - ], - 'joinColumnFieldNames' => - [ - 'group_id' => 'group_id', - ], - 'targetToSourceKeyColumns' => - [ - 'id' => 'group_id', + 'groups' => [ + 'fieldName' => 'groups', + 'targetEntity' => CmsGroup::class, + 'cascade' => [], + 'fetch' => 2, + 'joinColumns' => [ + 0 => [ + 'name' => 'group_id', + 'referencedColumnName' => 'id', + 'nullable' => true, + 'unique' => true, + 'onDelete' => 'CASCADE', + 'columnDefinition' => NULL, + ], + ], + 'type' => 1, + 'mappedBy' => NULL, + 'inversedBy' => NULL, + 'isOwningSide' => true, + 'sourceEntity' => CmsUser::class, + 'isCascadeRemove' => true, + 'isCascadePersist' => false, + 'isCascadeRefresh' => false, + 'isCascadeMerge' => false, + 'isCascadeDetach' => false, + 'sourceToTargetKeyColumns' => ['group_id' => 'id'], + 'joinColumnFieldNames' => ['group_id' => 'group_id'], + 'targetToSourceKeyColumns' => ['id' => 'group_id'], + 'orphanRemoval' => true, + 'declaringClass' => $this->cm, ], - 'orphanRemoval' => true ], - ], $this->cm->associationMappings); + $this->cm->associationMappings + ); } public function testOrphanRemovalOnCreateOneToMany() @@ -799,25 +761,27 @@ public function testOrphanRemovalOnCreateOneToMany() self::assertEquals( [ - 'groups' => - [ - 'fieldName' => 'groups', - 'targetEntity' => CmsGroup::class, - 'mappedBy' => 'test', - 'type' => 4, - 'inversedBy' => NULL, - 'isOwningSide' => false, - 'sourceEntity' => CmsUser::class, - 'fetch' => 2, - 'cascade' => [], - 'isCascadeRemove' => true, - 'isCascadePersist' => false, - 'isCascadeRefresh' => false, - 'isCascadeMerge' => false, - 'isCascadeDetach' => false, - 'orphanRemoval' => true, + 'groups' => [ + 'fieldName' => 'groups', + 'targetEntity' => CmsGroup::class, + 'mappedBy' => 'test', + 'type' => 4, + 'inversedBy' => NULL, + 'isOwningSide' => false, + 'sourceEntity' => CmsUser::class, + 'fetch' => 2, + 'cascade' => [], + 'isCascadeRemove' => true, + 'isCascadePersist' => false, + 'isCascadeRefresh' => false, + 'isCascadeMerge' => false, + 'isCascadeDetach' => false, + 'orphanRemoval' => true, + 'declaringClass' => $this->cm, + ], ], - ], $this->cm->associationMappings); + $this->cm->associationMappings + ); } public function testExceptionOnOrphanRemovalOnManyToOne() @@ -841,55 +805,54 @@ public function testOrphanRemovalOnManyToMany() self::assertEquals( [ - 'groups' => [ - 'fieldName' => 'groups', - 'targetEntity' => CmsGroup::class, - 'cascade' => [], - 'fetch' => 2, - 'joinTable' => [ - 'joinColumns' => [ - 0 => [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => false, - 'onDelete' => 'CASCADE', - 'columnDefinition' => NULL, + 'groups' => [ + 'fieldName' => 'groups', + 'targetEntity' => CmsGroup::class, + 'cascade' => [], + 'fetch' => 2, + 'joinTable' => [ + 'joinColumns' => [ + 0 => [ + 'name' => 'group_id', + 'referencedColumnName' => 'id', + 'nullable' => true, + 'unique' => false, + 'onDelete' => 'CASCADE', + 'columnDefinition' => NULL, + ], ], + 'inverseJoinColumns' => [ + 0 => [ + 'name' => 'cmsgroup_id', + 'referencedColumnName' => 'id', + 'onDelete' => 'CASCADE' + ] + ], + 'name' => 'cmsuser_cmsgroup', ], - 'inverseJoinColumns' => [ - 0 => [ - 'name' => 'cmsgroup_id', - 'referencedColumnName' => 'id', - 'onDelete' => 'CASCADE' - ] + 'type' => 8, + 'mappedBy' => NULL, + 'inversedBy' => NULL, + 'isOwningSide' => true, + 'sourceEntity' => CmsUser::class, + 'isCascadeRemove' => false, + 'isCascadePersist' => false, + 'isCascadeRefresh' => false, + 'isCascadeMerge' => false, + 'isCascadeDetach' => false, + 'isOnDeleteCascade' => true, + 'relationToSourceKeyColumns' => ['group_id' => 'id'], + 'joinTableColumns' => [ + 0 => 'group_id', + 1 => 'cmsgroup_id', ], - 'name' => 'cmsuser_cmsgroup', - ], - 'type' => 8, - 'mappedBy' => NULL, - 'inversedBy' => NULL, - 'isOwningSide' => true, - 'sourceEntity' => CmsUser::class, - 'isCascadeRemove' => false, - 'isCascadePersist' => false, - 'isCascadeRefresh' => false, - 'isCascadeMerge' => false, - 'isCascadeDetach' => false, - 'isOnDeleteCascade' => true, - 'relationToSourceKeyColumns' => [ - 'group_id' => 'id', + 'relationToTargetKeyColumns' => ['cmsgroup_id' => 'id'], + 'orphanRemoval' => true, + 'declaringClass' => $this->cm, ], - 'joinTableColumns' => [ - 0 => 'group_id', - 1 => 'cmsgroup_id', - ], - 'relationToTargetKeyColumns' => [ - 'cmsgroup_id' => 'id', - ], - 'orphanRemoval' => true, ], - ], $this->cm->associationMappings); + $this->cm->associationMappings + ); } public function assertIsFluent($ret) diff --git a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php index 081118d2a2f..e67c9d6ccad 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php @@ -122,10 +122,11 @@ public function testEmbeddedMapping() self::assertEquals( [ 'name' => [ - 'class' => Name::class, - 'columnPrefix' => 'nm_', - 'declaredField' => null, - 'originalField' => null, + 'class' => Name::class, + 'columnPrefix' => 'nm_', + 'declaredField' => null, + 'originalField' => null, + 'declaringClass' => $class, ] ], $class->embeddedClasses diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index be120921521..d70d1c89527 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -15,7 +15,6 @@ class EntityGeneratorTest extends OrmTestCase { - /** * @var EntityGenerator */ @@ -26,9 +25,12 @@ class EntityGeneratorTest extends OrmTestCase public function setUp() { $this->_namespace = uniqid("doctrine_"); - $this->_tmpDir = \sys_get_temp_dir(); - \mkdir($this->_tmpDir . \DIRECTORY_SEPARATOR . $this->_namespace); + $this->_tmpDir = sys_get_temp_dir(); + + mkdir($this->_tmpDir . \DIRECTORY_SEPARATOR . $this->_namespace); + $this->_generator = new EntityGenerator(); + $this->_generator->setAnnotationPrefix(""); $this->_generator->setGenerateAnnotations(true); $this->_generator->setGenerateStubMethods(true); @@ -40,12 +42,14 @@ public function setUp() public function tearDown() { $ri = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($this->_tmpDir . '/' . $this->_namespace)); + foreach ($ri AS $file) { /* @var $file \SplFileInfo */ if ($file->isFile()) { - \unlink($file->getPathname()); + unlink($file->getPathname()); } } + rmdir($this->_tmpDir . '/' . $this->_namespace); } @@ -172,14 +176,14 @@ private function generateTestEmbeddableFixture() * @param ClassMetadata $embeddableMetadata * @param string|null $columnPrefix */ - private function mapEmbedded( - $fieldName, - ClassMetadata $classMetadata, - ClassMetadata $embeddableMetadata, - $columnPrefix = false - ) { + private function mapEmbedded($fieldName, ClassMetadata $classMetadata, ClassMetadata $embeddableMetadata, $columnPrefix = false) + { $classMetadata->mapEmbedded( - ['fieldName' => $fieldName, 'class' => $embeddableMetadata->name, 'columnPrefix' => $columnPrefix] + [ + 'fieldName' => $fieldName, + 'class' => $embeddableMetadata->name, + 'columnPrefix' => $columnPrefix + ] ); } @@ -196,13 +200,11 @@ private function mapNestedEmbedded( foreach ($embeddableMetadata->embeddedClasses as $property => $embeddableClass) { $classMetadata->mapEmbedded( [ - 'fieldName' => $fieldName . '.' . $property, - 'class' => $embeddableClass['class'], - 'columnPrefix' => $embeddableClass['columnPrefix'], - 'declaredField' => $embeddableClass['declaredField'] - ? $fieldName . '.' . $embeddableClass['declaredField'] - : $fieldName, - 'originalField' => $embeddableClass['originalField'] ?: $property, + 'fieldName' => $fieldName . '.' . $property, + 'class' => $embeddableClass['class'], + 'columnPrefix' => $embeddableClass['columnPrefix'], + 'declaredField' => $embeddableClass['declaredField'] ? $fieldName . '.' . $embeddableClass['declaredField'] : $fieldName, + 'originalField' => $embeddableClass['originalField'] ?: $property, ] ); } @@ -214,7 +216,7 @@ private function mapNestedEmbedded( private function loadEntityClass(ClassMetadata $metadata) { $className = basename(str_replace('\\', '/', $metadata->name)); - $path = $this->_tmpDir . '/' . $this->_namespace . '/' . $className . '.php'; + $path = $this->_tmpDir . '/' . $this->_namespace . '/' . $className . '.php'; self::assertFileExists($path); From 16b7e18444c5134424e8e88fe27b9cf03871074d Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 13 May 2016 23:13:16 +0000 Subject: [PATCH 012/275] Finalized inclusion of support for declaringClass --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 4 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 22 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 368 ++++++++++++------ 3 files changed, 260 insertions(+), 134 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 385653e3cc9..534f2b5c7bc 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -961,7 +961,9 @@ public function initializeReflection($reflService) $this->name = $this->rootEntityName = $this->reflClass->getName(); } - $this->table['name'] = $this->namingStrategy->classToTableName($this->name); + if ( ! isset($this->table['name'])) { + $this->table['name'] = $this->namingStrategy->classToTableName($this->name); + } } /** diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 5ffe70974ae..84c6b8b7707 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -1651,26 +1651,32 @@ protected function generateFieldMappingPropertyDocBlock(array $fieldMapping, Cla $column[] = 'type="' . $fieldType . '"'; } - if (isset($fieldMapping['length'])) { + if (isset($fieldMapping['length']) && $fieldMapping['length']) { $column[] = 'length=' . $fieldMapping['length']; } - if (isset($fieldMapping['precision'])) { + if (isset($fieldMapping['precision']) && $fieldMapping['precision']) { $column[] = 'precision=' . $fieldMapping['precision']; } - if (isset($fieldMapping['scale'])) { + if (isset($fieldMapping['scale']) && $fieldMapping['scale']) { $column[] = 'scale=' . $fieldMapping['scale']; } - if (isset($fieldMapping['nullable'])) { + if (isset($fieldMapping['nullable']) && $fieldMapping['nullable']) { $column[] = 'nullable=' . var_export($fieldMapping['nullable'], true); } + if (isset($fieldMapping['unique']) && $fieldMapping['unique']) { + $column[] = 'unique=' . var_export($fieldMapping['unique'], true); + } + $options = []; - if (isset($fieldMapping['options']['unsigned']) && $fieldMapping['options']['unsigned']) { - $options[] = '"unsigned"=true'; + if (isset($fieldMapping['options']) && $fieldMapping['options']) { + foreach ($fieldMapping['options'] as $key => $value) { + $options[] = sprintf('"%s"=%s', $key, str_replace("'", '"', var_export($value, true))); + } } if ($options) { @@ -1681,10 +1687,6 @@ protected function generateFieldMappingPropertyDocBlock(array $fieldMapping, Cla $column[] = 'columnDefinition="' . $fieldMapping['columnDefinition'] . '"'; } - if (isset($fieldMapping['unique'])) { - $column[] = 'unique=' . var_export($fieldMapping['unique'], true); - } - $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'Column(' . implode(', ', $column) . ')'; if (isset($fieldMapping['id']) && $fieldMapping['id']) { diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index d70d1c89527..a24cd52ac44 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -61,42 +61,110 @@ public function tearDown() public function generateBookEntityFixture(array $embeddedClasses = []) { $metadata = new ClassMetadata($this->_namespace . '\EntityGeneratorBook'); - - $metadata->namespace = $this->_namespace; $metadata->customRepositoryClassName = $this->_namespace . '\EntityGeneratorBookRepository'; $metadata->table['name'] = 'book'; $metadata->table['uniqueConstraints']['name_uniq'] = ['columns' => ['name']]; $metadata->table['indexes']['status_idx'] = ['columns' => ['status']]; - $metadata->mapField(['fieldName' => 'name', 'type' => 'string']); - $metadata->mapField(['fieldName' => 'status', 'type' => 'string', 'options' => ['default' => 'published']]); - $metadata->mapField(['fieldName' => 'id', 'type' => 'integer', 'id' => true]); + $metadata->mapField( + [ + 'fieldName' => 'name', + 'type' => 'string', + 'length' => null, + 'scale' => 0, + 'precision' => 0, + 'nullable' => false, + 'unique' => false, + ] + ); + + $metadata->mapField( + [ + 'fieldName' => 'status', + 'type' => 'string', + 'length' => null, + 'scale' => 0, + 'precision' => 0, + 'nullable' => false, + 'unique' => false, + 'options' => ['default' => 'published'], + ] + ); + + $metadata->mapField( + [ + 'fieldName' => 'id', + 'type' => 'integer', + 'id' => true, + 'length' => null, + 'scale' => 0, + 'precision' => 0, + 'nullable' => false, + 'unique' => false, + ] + ); + $metadata->mapOneToOne( - ['fieldName' => 'author', 'targetEntity' => EntityGeneratorAuthor::class, 'mappedBy' => 'book'] + [ + 'fieldName' => 'author', + 'targetEntity' => 'Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor', + 'mappedBy' => 'book', + 'joinColumns' => [ + [ + 'referencedColumnName' => 'id', + 'nullable' => false, + 'onDelete' => null, + 'columnDefinition' => null, + ], + ] + ] ); - $joinColumns = [ - ['name' => 'author_id', 'referencedColumnName' => 'id'] - ]; + $metadata->mapManyToMany( [ - 'fieldName' => 'comments', - 'targetEntity' => EntityGeneratorComment::class, - 'fetch' => ClassMetadata::FETCH_EXTRA_LAZY, - 'joinTable' => [ - 'name' => 'book_comment', - 'joinColumns' => [['name' => 'book_id', 'referencedColumnName' => 'id']], - 'inverseJoinColumns' => [['name' => 'comment_id', 'referencedColumnName' => 'id']], - ], + 'fieldName' => 'comments', + 'targetEntity' => 'Doctrine\Tests\ORM\Tools\EntityGeneratorComment', + 'fetch' => ClassMetadata::FETCH_EXTRA_LAZY, + 'joinTable' => [ + 'name' => 'book_comment', + 'schema' => null, + 'joinColumns' => [ + [ + 'name' => 'book_id', + 'referencedColumnName' => 'id', + 'nullable' => false, + 'unique' => false, + 'onDelete' => null, + 'columnDefinition' => null, + ], + ], + 'inverseJoinColumns' => [ + [ + 'name' => 'comment_id', + 'referencedColumnName' => 'id', + 'nullable' => false, + 'unique' => false, + 'onDelete' => null, + 'columnDefinition' => null, + ], + ], + ], ] ); + $metadata->addLifecycleCallback('loading', 'postLoad'); $metadata->addLifecycleCallback('willBeRemoved', 'preRemove'); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); foreach ($embeddedClasses as $fieldName => $embeddedClass) { - $this->mapNestedEmbedded($fieldName, $metadata, $embeddedClass); - $this->mapEmbedded($fieldName, $metadata, $embeddedClass); + $metadata->mapEmbedded( + [ + 'fieldName' => $fieldName, + 'class' => $embeddedClass->name, + 'columnPrefix' => null, + ] + ); } $this->_generator->writeEntityClass($metadata, $this->_tmpDir); @@ -107,18 +175,28 @@ public function generateBookEntityFixture(array $embeddedClasses = []) private function generateEntityTypeFixture(array $field) { $metadata = new ClassMetadata($this->_namespace . '\EntityType'); - - $metadata->namespace = $this->_namespace; - $metadata->table['name'] = 'entity_type'; - $metadata->mapField(['fieldName' => 'id', 'type' => 'integer', 'id' => true]); - $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); + $metadata->mapField( + [ + 'fieldName' => 'id', + 'type' => 'integer', + 'id' => true, + 'nullable' => false, + 'unique' => false, + ] + ); - $name = $field['fieldName']; - $type = $field['dbType']; + $metadata->mapField( + [ + 'fieldName' => $field['fieldName'], + 'type' => $field['dbType'], + 'nullable' => false, + 'unique' => false, + ] + ); - $metadata->mapField(['fieldName' => $name, 'type' => $type]); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); $this->_generator->writeEntityClass($metadata, $this->_tmpDir); @@ -131,18 +209,61 @@ private function generateEntityTypeFixture(array $field) private function generateIsbnEmbeddableFixture(array $embeddedClasses = [], $columnPrefix = null) { $metadata = new ClassMetadata($this->_namespace . '\EntityGeneratorIsbn'); - - $metadata->namespace = $this->_namespace; $metadata->isEmbeddedClass = true; - $metadata->mapField(['fieldName' => 'prefix', 'type' => 'integer']); - $metadata->mapField(['fieldName' => 'groupNumber', 'type' => 'integer']); - $metadata->mapField(['fieldName' => 'publisherNumber', 'type' => 'integer']); - $metadata->mapField(['fieldName' => 'titleNumber', 'type' => 'integer']); - $metadata->mapField(['fieldName' => 'checkDigit', 'type' => 'integer']); + $metadata->mapField( + [ + 'fieldName' => 'prefix', + 'type' => 'integer', + 'nullable' => false, + 'unique' => false, + ] + ); + + $metadata->mapField( + [ + 'fieldName' => 'groupNumber', + 'type' => 'integer', + 'nullable' => false, + 'unique' => false, + ] + ); + + $metadata->mapField( + [ + 'fieldName' => 'publisherNumber', + 'type' => 'integer', + 'nullable' => false, + 'unique' => false, + ] + ); + + $metadata->mapField( + [ + 'fieldName' => 'titleNumber', + 'type' => 'integer', + 'nullable' => false, + 'unique' => false, + ] + ); + + $metadata->mapField( + [ + 'fieldName' => 'checkDigit', + 'type' => 'integer', + 'nullable' => false, + 'unique' => false, + ] + ); foreach ($embeddedClasses as $fieldName => $embeddedClass) { - $this->mapEmbedded($fieldName, $metadata, $embeddedClass, $columnPrefix); + $metadata->mapEmbedded( + [ + 'fieldName' => $fieldName, + 'class' => $embeddedClass->name, + 'columnPrefix' => $columnPrefix, + ] + ); } $this->_generator->writeEntityClass($metadata, $this->_tmpDir); @@ -157,57 +278,47 @@ private function generateTestEmbeddableFixture() { $metadata = new ClassMetadata($this->_namespace . '\EntityGeneratorTestEmbeddable'); - $metadata->namespace = $this->_namespace; $metadata->isEmbeddedClass = true; - $metadata->mapField(['fieldName' => 'field1', 'type' => 'integer']); - $metadata->mapField(['fieldName' => 'field2', 'type' => 'integer', 'nullable' => true]); - $metadata->mapField(['fieldName' => 'field3', 'type' => 'datetime']); - $metadata->mapField(['fieldName' => 'field4', 'type' => 'datetime', 'nullable' => true]); + $metadata->mapField( + [ + 'fieldName' => 'field1', + 'type' => 'integer', + 'nullable' => false, + 'unique' => false, + ] + ); - $this->_generator->writeEntityClass($metadata, $this->_tmpDir); + $metadata->mapField( + [ + 'fieldName' => 'field2', + 'type' => 'integer', + 'nullable' => true, + 'unique' => false, + ] + ); - return $metadata; - } + $metadata->mapField( + [ + 'fieldName' => 'field3', + 'type' => 'datetime', + 'nullable' => false, + 'unique' => false, + ] + ); - /** - * @param string $fieldName - * @param ClassMetadata $classMetadata - * @param ClassMetadata $embeddableMetadata - * @param string|null $columnPrefix - */ - private function mapEmbedded($fieldName, ClassMetadata $classMetadata, ClassMetadata $embeddableMetadata, $columnPrefix = false) - { - $classMetadata->mapEmbedded( + $metadata->mapField( [ - 'fieldName' => $fieldName, - 'class' => $embeddableMetadata->name, - 'columnPrefix' => $columnPrefix + 'fieldName' => 'field4', + 'type' => 'datetime', + 'nullable' => true, + 'unique' => false, ] ); - } - /** - * @param string $fieldName - * @param ClassMetadata $classMetadata - * @param ClassMetadata $embeddableMetadata - */ - private function mapNestedEmbedded( - $fieldName, - ClassMetadata $classMetadata, - ClassMetadata $embeddableMetadata - ) { - foreach ($embeddableMetadata->embeddedClasses as $property => $embeddableClass) { - $classMetadata->mapEmbedded( - [ - 'fieldName' => $fieldName . '.' . $property, - 'class' => $embeddableClass['class'], - 'columnPrefix' => $embeddableClass['columnPrefix'], - 'declaredField' => $embeddableClass['declaredField'] ? $fieldName . '.' . $embeddableClass['declaredField'] : $fieldName, - 'originalField' => $embeddableClass['originalField'] ?: $property, - ] - ); - } + $this->_generator->writeEntityClass($metadata, $this->_tmpDir); + + return $metadata; } /** @@ -272,23 +383,23 @@ public function testGeneratedEntityClass() { $testMetadata = $this->generateTestEmbeddableFixture(); $isbnMetadata = $this->generateIsbnEmbeddableFixture(['test' => $testMetadata]); - $metadata = $this->generateBookEntityFixture(['isbn' => $isbnMetadata]); + $metadata = $this->generateBookEntityFixture(['isbn' => $isbnMetadata]); + $book = $this->newInstance($metadata); - $book = $this->newInstance($metadata); self::assertTrue(class_exists($metadata->name), "Class does not exist."); - self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', '__construct'), "EntityGeneratorBook::__construct() missing."); - self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'getId'), "EntityGeneratorBook::getId() missing."); - self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'setName'), "EntityGeneratorBook::setName() missing."); - self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'getName'), "EntityGeneratorBook::getName() missing."); - self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'setStatus'), "EntityGeneratorBook::setStatus() missing."); - self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'getStatus'), "EntityGeneratorBook::getStatus() missing."); - self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'setAuthor'), "EntityGeneratorBook::setAuthor() missing."); - self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'getAuthor'), "EntityGeneratorBook::getAuthor() missing."); - self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'getComments'), "EntityGeneratorBook::getComments() missing."); - self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'addComment'), "EntityGeneratorBook::addComment() missing."); - self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'removeComment'), "EntityGeneratorBook::removeComment() missing."); - self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'setIsbn'), "EntityGeneratorBook::setIsbn() missing."); - self::assertTrue(method_exists($metadata->namespace . '\EntityGeneratorBook', 'getIsbn'), "EntityGeneratorBook::getIsbn() missing."); + self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', '__construct'), "EntityGeneratorBook::__construct() missing."); + self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'getId'), "EntityGeneratorBook::getId() missing."); + self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'setName'), "EntityGeneratorBook::setName() missing."); + self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'getName'), "EntityGeneratorBook::getName() missing."); + self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'setStatus'), "EntityGeneratorBook::setStatus() missing."); + self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'getStatus'), "EntityGeneratorBook::getStatus() missing."); + self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'setAuthor'), "EntityGeneratorBook::setAuthor() missing."); + self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'getAuthor'), "EntityGeneratorBook::getAuthor() missing."); + self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'getComments'), "EntityGeneratorBook::getComments() missing."); + self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'addComment'), "EntityGeneratorBook::addComment() missing."); + self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'removeComment'), "EntityGeneratorBook::removeComment() missing."); + self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'setIsbn'), "EntityGeneratorBook::setIsbn() missing."); + self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'getIsbn'), "EntityGeneratorBook::getIsbn() missing."); $reflClass = new \ReflectionClass($metadata->name); @@ -337,7 +448,14 @@ public function testEntityUpdatingWorks() $metadata->mapField(['fieldName' => 'test', 'type' => 'string']); $testEmbeddableMetadata = $this->generateTestEmbeddableFixture(); - $this->mapEmbedded('testEmbedded', $metadata, $testEmbeddableMetadata); + + $metadata->mapEmbedded( + [ + 'fieldName' => 'testEmbedded', + 'class' => $testEmbeddableMetadata->name, + 'columnPrefix' => null, + ] + ); $this->_generator->writeEntityClass($metadata, $this->_tmpDir); @@ -418,8 +536,8 @@ public function testMethodDocBlockShouldStartWithBackSlash() self::assertPhpDocReturnType('boolean', new \ReflectionMethod($book, 'removeComment')); self::assertPhpDocVarType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor', new \ReflectionProperty($book, 'author')); - self::assertPhpDocReturnType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor|null', new \ReflectionMethod($book, 'getAuthor')); - self::assertPhpDocParamType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor|null', new \ReflectionMethod($book, 'setAuthor')); + self::assertPhpDocReturnType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor', new \ReflectionMethod($book, 'getAuthor')); + self::assertPhpDocParamType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor', new \ReflectionMethod($book, 'setAuthor')); $expectedClassName = '\\' . $embeddedMetadata->name; self::assertPhpDocVarType($expectedClassName, new \ReflectionProperty($book, 'isbn')); @@ -453,12 +571,13 @@ public function testLifecycleCallbacks() public function testLoadMetadata() { - $embeddedMetadata = $this->generateIsbnEmbeddableFixture(); - $metadata = $this->generateBookEntityFixture(['isbn' => $embeddedMetadata]); + $reflectionService = new RuntimeReflectionService(); - $book = $this->newInstance($metadata); + $embeddedMetadata = $this->generateIsbnEmbeddableFixture(); + $metadata = $this->generateBookEntityFixture(['isbn' => $embeddedMetadata]); + $book = $this->newInstance($metadata); - $reflectionService = new RuntimeReflectionService(); + $metadata->initializeReflection($reflectionService); $cm = new ClassMetadata($metadata->name); $cm->initializeReflection($reflectionService); @@ -527,12 +646,13 @@ public function testLoadPrefixedMetadata() */ public function testMappedSuperclassAnnotationGeneration() { - $metadata = new ClassMetadata($this->_namespace . '\EntityGeneratorBook'); - $metadata->namespace = $this->_namespace; + $metadata = new ClassMetadata($this->_namespace . '\EntityGeneratorBook'); + $metadata->isMappedSuperclass = true; $this->_generator->setAnnotationPrefix('ORM\\'); $this->_generator->writeEntityClass($metadata, $this->_tmpDir); + $this->newInstance($metadata); // force instantiation (causes autoloading to kick in) $driver = new AnnotationDriver(new AnnotationReader(), []); @@ -565,25 +685,26 @@ public function testParseTokensInEntityFile($php, $classes) */ public function testGenerateEntityWithSequenceGenerator() { - $metadata = new ClassMetadata($this->_namespace . '\DDC1784Entity'); - $metadata->namespace = $this->_namespace; + $metadata = new ClassMetadata($this->_namespace . '\DDC1784Entity'); + $metadata->mapField(['fieldName' => 'id', 'type' => 'integer', 'id' => true]); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); $metadata->setSequenceGeneratorDefinition( [ - 'sequenceName' => 'DDC1784_ID_SEQ', - 'allocationSize' => 1, - 'initialValue' => 2 + 'sequenceName' => 'DDC1784_ID_SEQ', + 'allocationSize' => 1, + 'initialValue' => 2 ] ); + $this->_generator->writeEntityClass($metadata, $this->_tmpDir); $filename = $this->_tmpDir . DIRECTORY_SEPARATOR . $this->_namespace . DIRECTORY_SEPARATOR . 'DDC1784Entity.php'; self::assertFileExists($filename); - require_once $filename; + require_once $filename; $reflection = new \ReflectionProperty($metadata->name, 'id'); $docComment = $reflection->getDocComment(); @@ -599,33 +720,35 @@ public function testGenerateEntityWithSequenceGenerator() */ public function testGenerateEntityWithMultipleInverseJoinColumns() { - $metadata = new ClassMetadata($this->_namespace . '\DDC2079Entity'); - $metadata->namespace = $this->_namespace; + $metadata = new ClassMetadata($this->_namespace . '\DDC2079Entity'); + $metadata->mapField(['fieldName' => 'id', 'type' => 'integer', 'id' => true]); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); $metadata->mapManyToMany( [ - 'fieldName' => 'centroCustos', - 'targetEntity' => 'DDC2079CentroCusto', - 'joinTable' => [ - 'name' => 'unidade_centro_custo', - 'joinColumns' => [ - ['name' => 'idorcamento', 'referencedColumnName' => 'idorcamento'], - ['name' => 'idunidade', 'referencedColumnName' => 'idunidade'] - ], - 'inverseJoinColumns' => [ - ['name' => 'idcentrocusto', 'referencedColumnName' => 'idcentrocusto'], - ['name' => 'idpais', 'referencedColumnName' => 'idpais'], + 'fieldName' => 'centroCustos', + 'targetEntity' => 'DDC2079CentroCusto', + 'joinTable' => [ + 'name' => 'unidade_centro_custo', + 'joinColumns' => [ + ['name' => 'idorcamento', 'referencedColumnName' => 'idorcamento'], + ['name' => 'idunidade', 'referencedColumnName' => 'idunidade'] + ], + 'inverseJoinColumns' => [ + ['name' => 'idcentrocusto', 'referencedColumnName' => 'idcentrocusto'], + ['name' => 'idpais', 'referencedColumnName' => 'idpais'], + ], ], - ], ] ); + $this->_generator->writeEntityClass($metadata, $this->_tmpDir); $filename = $this->_tmpDir . DIRECTORY_SEPARATOR . $this->_namespace . DIRECTORY_SEPARATOR . 'DDC2079Entity.php'; self::assertFileExists($filename); + require_once $filename; $property = new \ReflectionProperty($metadata->name, 'centroCustos'); @@ -769,11 +892,11 @@ public function testTraitPropertiesAndMethodsAreNotDuplicated() $user = new DDC2372User(); $metadata = $cmf->getMetadataFor(get_class($user)); $metadata->name = $this->_namespace . "\DDC2372User"; - $metadata->namespace = $this->_namespace; $this->_generator->writeEntityClass($metadata, $this->_tmpDir); self::assertFileExists($this->_tmpDir . "/" . $this->_namespace . "/DDC2372User.php"); + require $this->_tmpDir . "/" . $this->_namespace . "/DDC2372User.php"; $reflClass = new \ReflectionClass($metadata->name); @@ -795,7 +918,6 @@ public function testTraitPropertiesAndMethodsAreNotDuplicatedInChildClasses() $user = new DDC2372Admin(); $metadata = $cmf->getMetadataFor(get_class($user)); $metadata->name = $this->_namespace . "\DDC2372Admin"; - $metadata->namespace = $this->_namespace; $this->_generator->writeEntityClass($metadata, $this->_tmpDir); From 1642ae780d38d663a5d802ea1a89480e28584ddf Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 14 May 2016 03:55:36 +0000 Subject: [PATCH 013/275] Switched getSQLTableAlias to use table names instead of class names --- .../AbstractEntityInheritancePersister.php | 2 +- .../Entity/BasicEntityPersister.php | 119 ++++++++++-------- .../Entity/JoinedSubclassPersister.php | 36 +++--- .../Entity/SingleTablePersister.php | 8 +- lib/Doctrine/ORM/Query/SqlWalker.php | 4 +- .../Pagination/LimitSubqueryOutputWalker.php | 5 +- 6 files changed, 97 insertions(+), 77 deletions(-) diff --git a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php index 86feb9a3ae3..311efb95401 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php @@ -67,7 +67,7 @@ abstract protected function getDiscriminatorColumnTableName(); */ protected function getSelectJoinColumnSQL($field, ClassMetadata $class, $type) { - $tableAlias = $this->getSQLTableAlias($class->name); + $tableAlias = $this->getSQLTableAlias($class->getTableName()); $columnAlias = $this->getSQLColumnAlias($field); $sql = sprintf('%s.%s', $tableAlias, $field); diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 833b31e9485..3c84789489e 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -799,7 +799,7 @@ public function loadOneToOneEntity(array $assoc, $sourceEntity, array $identifie // unset the old value and set the new sql aliased value here. By definition // unset($identifier[$targetKeyColumn] works here with how UnitOfWork::createEntity() calls this method. - $identifier[$targetClass->getFieldForColumn($targetKeyColumn)] = + $identifier[$this->getSQLTableAlias($targetClass->getTableName()) . "." . $targetKeyColumn] = $sourceClass->reflFields[$sourceClass->fieldNames[$sourceKeyColumn]]->getValue($sourceEntity); unset($identifier[$targetKeyColumn]); @@ -1069,7 +1069,7 @@ public function getSelectSQL($criteria, $assoc = null, $lockMode = null, $limit } if ($orderBy) { - $orderBySql = $this->getOrderBySQL($orderBy, $this->getSQLTableAlias($this->class->name)); + $orderBySql = $this->getOrderBySQL($orderBy, $this->getSQLTableAlias($this->class->getTableName())); } $conditionSql = ($criteria instanceof Criteria) @@ -1087,7 +1087,7 @@ public function getSelectSQL($criteria, $assoc = null, $lockMode = null, $limit } $columnList = $this->getSelectColumnsSQL(); - $tableAlias = $this->getSQLTableAlias($this->class->name); + $tableAlias = $this->getSQLTableAlias($this->class->getTableName()); $filterSql = $this->generateFilterConditionSQL($this->class, $tableAlias); $tableName = $this->quoteStrategy->getTableName($this->class, $this->platform); @@ -1117,7 +1117,7 @@ public function getSelectSQL($criteria, $assoc = null, $lockMode = null, $limit public function getCountSQL($criteria = []) { $tableName = $this->quoteStrategy->getTableName($this->class, $this->platform); - $tableAlias = $this->getSQLTableAlias($this->class->name); + $tableAlias = $this->getSQLTableAlias($this->class->getTableName()); $conditionSql = ($criteria instanceof Criteria) ? $this->getSelectConditionCriteriaSQL($criteria) @@ -1153,7 +1153,6 @@ protected final function getOrderBySQL(array $orderBy, $baseTableAlias) $orderByList = []; foreach ($orderBy as $fieldName => $orientation) { - $orientation = strtoupper(trim($orientation)); if ($orientation != 'ASC' && $orientation != 'DESC') { @@ -1161,11 +1160,12 @@ protected final function getOrderBySQL(array $orderBy, $baseTableAlias) } if (isset($this->class->fieldMappings[$fieldName])) { - $tableAlias = isset($this->class->fieldMappings[$fieldName]['inherited']) - ? $this->getSQLTableAlias($this->class->fieldMappings[$fieldName]['inherited']) - : $baseTableAlias; - + $class = isset($this->class->fieldMappings[$fieldName]['inherited']) + ? $this->em->getClassMetadata($this->class->fieldMappings[$fieldName]['inherited']) + : $this->class; + $tableAlias = $this->getSQLTableAlias($class->getTableName()); $columnName = $this->quoteStrategy->getColumnName($fieldName, $this->class, $this->platform); + $orderByList[] = $tableAlias . '.' . $columnName . ' ' . $orientation; continue; @@ -1176,9 +1176,10 @@ protected final function getOrderBySQL(array $orderBy, $baseTableAlias) throw ORMException::invalidFindByInverseAssociation($this->class->name, $fieldName); } - $tableAlias = isset($this->class->associationMappings[$fieldName]['inherited']) - ? $this->getSQLTableAlias($this->class->associationMappings[$fieldName]['inherited']) - : $baseTableAlias; + $class = isset($this->class->associationMappings[$fieldName]['inherited']) + ? $this->em->getClassMetadata($this->class->associationMappings[$fieldName]['inherited']) + : $this->class; + $tableAlias = $this->getSQLTableAlias($class->getTableName()); foreach ($this->class->associationMappings[$fieldName]['joinColumns'] as $joinColumn) { $columnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); @@ -1275,18 +1276,24 @@ protected function getSelectColumnsSQL() $association = $eagerEntity->getAssociationMapping($assoc['mappedBy']); } - $joinTableAlias = $this->getSQLTableAlias($eagerEntity->name, $assocAlias); + $joinTableAlias = $this->getSQLTableAlias($eagerEntity->getTableName(), $assocAlias); $joinTableName = $this->quoteStrategy->getTableName($eagerEntity, $this->platform); if ($assoc['isOwningSide']) { - $tableAlias = $this->getSQLTableAlias($association['targetEntity'], $assocAlias); $this->currentPersisterContext->selectJoinSql .= ' ' . $this->getJoinSQLForJoinColumns($association['joinColumns']); + $sourceClass = $this->em->getClassMetadata($association['sourceEntity']); + $targetClass = $this->em->getClassMetadata($association['targetEntity']); + $tableAlias = $this->getSQLTableAlias($targetClass->getTableName(), $assocAlias); + foreach ($association['joinColumns'] as $joinColumn) { - $sourceCol = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); - $targetCol = $this->quoteStrategy->getReferencedJoinColumnName($joinColumn, $this->class, $this->platform); - $joinCondition[] = $this->getSQLTableAlias($association['sourceEntity']) - . '.' . $sourceCol . ' = ' . $tableAlias . '.' . $targetCol; + $joinCondition[] = sprintf( + '%s.%s = %s.%s', + $this->getSQLTableAlias($sourceClass->getTableName()), + $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform), + $tableAlias, + $this->quoteStrategy->getReferencedJoinColumnName($joinColumn, $this->class, $this->platform) + ); } // Add filter SQL @@ -1295,15 +1302,19 @@ protected function getSelectColumnsSQL() } } else { - $this->currentPersisterContext->selectJoinSql .= ' LEFT JOIN'; - foreach ($association['joinColumns'] as $joinColumn) { - $sourceCol = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); - $targetCol = $this->quoteStrategy->getReferencedJoinColumnName($joinColumn, $this->class, $this->platform); + $sourceClass = $this->em->getClassMetadata($association['sourceEntity']); + $targetClass = $this->em->getClassMetadata($association['targetEntity']); - $joinCondition[] = $this->getSQLTableAlias($association['sourceEntity'], $assocAlias) . '.' . $sourceCol . ' = ' - . $this->getSQLTableAlias($association['targetEntity']) . '.' . $targetCol; + foreach ($association['joinColumns'] as $joinColumn) { + $joinCondition[] = sprintf( + '%s.%s = %s.%s', + $this->getSQLTableAlias($sourceClass->getTableName(), $assocAlias), + $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform), + $this->getSQLTableAlias($targetClass->getTableName()), + $this->quoteStrategy->getReferencedJoinColumnName($joinColumn, $this->class, $this->platform) + ); } } @@ -1335,7 +1346,7 @@ protected function getSelectColumnAssociationSQL($field, $assoc, ClassMetadata $ $columnList = []; $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); $isIdentifier = isset($assoc['id']) && $assoc['id'] === true; - $sqlTableAlias = $this->getSQLTableAlias($class->name, ($alias == 'r' ? '' : $alias)); + $sqlTableAlias = $this->getSQLTableAlias($class->getTableName(), ($alias == 'r' ? '' : $alias)); foreach ($assoc['joinColumns'] as $joinColumn) { $quotedColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); @@ -1362,7 +1373,7 @@ protected function getSelectManyToManyJoinSQL(array $manyToMany) { $conditions = []; $association = $manyToMany; - $sourceTableAlias = $this->getSQLTableAlias($this->class->name); + $sourceTableAlias = $this->getSQLTableAlias($this->class->getTableName()); if ( ! $manyToMany['isOwningSide']) { $targetEntity = $this->em->getClassMetadata($manyToMany['targetEntity']); @@ -1479,12 +1490,11 @@ protected function getInsertColumnList() */ protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r') { - $tableAlias = $alias == 'r' ? '' : $alias; $fieldMapping = $class->fieldMappings[$field]; $columnAlias = $this->getSQLColumnAlias($fieldMapping['columnName']); $sql = sprintf( '%s.%s', - $this->getSQLTableAlias($class->name, $tableAlias), + $this->getSQLTableAlias($class->getTableName(), ($alias == 'r' ? '' : $alias)), $this->quoteStrategy->getColumnName($field, $class, $this->platform) ); @@ -1496,26 +1506,24 @@ protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r' /** * Gets the SQL table alias for the given class name. * - * @param string $className + * @param string $tableName * @param string $assocName * * @return string The SQL table alias. - * - * @todo Reconsider. Binding table aliases to class names is not such a good idea. */ - protected function getSQLTableAlias($className, $assocName = '') + protected function getSQLTableAlias($tableName, $assocName = '') { - if ($assocName) { - $className .= '#' . $assocName; + if ($tableName) { + $tableName .= '#' . $assocName; } - if (isset($this->currentPersisterContext->sqlTableAliases[$className])) { - return $this->currentPersisterContext->sqlTableAliases[$className]; + if (isset($this->currentPersisterContext->sqlTableAliases[$tableName])) { + return $this->currentPersisterContext->sqlTableAliases[$tableName]; } $tableAlias = 't' . $this->currentPersisterContext->sqlAliasCounter++; - $this->currentPersisterContext->sqlTableAliases[$className] = $tableAlias; + $this->currentPersisterContext->sqlTableAliases[$tableName] = $tableAlias; return $tableAlias; } @@ -1563,7 +1571,7 @@ protected function getLockTablesSql($lockMode) return $this->platform->appendLockHint( 'FROM ' . $this->quoteStrategy->getTableName($this->class, $this->platform) . ' ' - . $this->getSQLTableAlias($this->class->name), + . $this->getSQLTableAlias($this->class->getTableName()), $lockMode ); } @@ -1670,11 +1678,13 @@ public function getSelectConditionStatementSQL($field, $value, $assoc = null, $c private function getSelectConditionStatementColumnSQL($field, $assoc = null) { if (isset($this->class->fieldMappings[$field])) { - $className = (isset($this->class->fieldMappings[$field]['inherited'])) - ? $this->class->fieldMappings[$field]['inherited'] - : $this->class->name; + $class = isset($this->class->fieldMappings[$field]['inherited']) + ? $this->em->getClassMetadata($this->class->fieldMappings[$field]['inherited']) + : $this->class; + $tableAlias = $this->getSQLTableAlias($class->getTableName()); + $columnName = $this->quoteStrategy->getColumnName($field, $this->class, $this->platform); - return [$this->getSQLTableAlias($className) . '.' . $this->quoteStrategy->getColumnName($field, $this->class, $this->platform)]; + return [$tableAlias . '.' . $columnName]; } if (isset($this->class->associationMappings[$field])) { @@ -1703,14 +1713,18 @@ private function getSelectConditionStatementColumnSQL($field, $assoc = null) throw ORMException::invalidFindByInverseAssociation($this->class->name, $field); } - $className = (isset($association['inherited'])) - ? $association['inherited'] - : $this->class->name; + $class = isset($association['inherited']) + ? $this->em->getClassMetadata($association['inherited']) + : $this->class; + $tableAlias = $this->getSQLTableAlias($class->getTableName()); foreach ($association['joinColumns'] as $joinColumn) { - $columns[] = $this->getSQLTableAlias($className) . '.' . $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); + $columnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); + + $columns[] = $tableAlias . '.' . $columnName; } } + return $columns; } @@ -1788,7 +1802,10 @@ private function getOneToManyStatement(array $assoc, $sourceEntity, $offset = nu $parameters = []; $owningAssoc = $this->class->associationMappings[$assoc['mappedBy']]; $sourceClass = $this->em->getClassMetadata($assoc['sourceEntity']); - $tableAlias = $this->getSQLTableAlias(isset($owningAssoc['inherited']) ? $owningAssoc['inherited'] : $this->class->name); + $class = isset($owningAssoc['inherited']) + ? $this->em->getClassMetadata($owningAssoc['inherited']) + : $this->class; + $tableAlias = $this->getSQLTableAlias($class->getTableName()); foreach ($owningAssoc['targetToSourceKeyColumns'] as $sourceKeyColumn => $targetKeyColumn) { if ($sourceClass->containsForeignIdentifier) { @@ -1796,12 +1813,14 @@ private function getOneToManyStatement(array $assoc, $sourceEntity, $offset = nu $value = $sourceClass->reflFields[$field]->getValue($sourceEntity); if (isset($sourceClass->associationMappings[$field])) { + $targetClass = $this->em->getClassMetadata($sourceClass->associationMappings[$field]['targetEntity']); + $value = $this->em->getUnitOfWork()->getEntityIdentifier($value); - $value = $value[$this->em->getClassMetadata($sourceClass->associationMappings[$field]['targetEntity'])->identifier[0]]; + $value = $value[$targetClass->identifier[0]]; } $criteria[$tableAlias . "." . $targetKeyColumn] = $value; - $parameters[] = [ + $parameters[] = [ 'value' => $value, 'field' => $field, 'class' => $sourceClass, @@ -1991,7 +2010,7 @@ public function exists($entity, Criteria $extraConditions = null) return false; } - $alias = $this->getSQLTableAlias($this->class->name); + $alias = $this->getSQLTableAlias($this->class->getTableName()); $sql = 'SELECT 1 ' . $this->getLockTablesSql(null) diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index d5a8262cde5..67b4e4df5ca 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -308,7 +308,7 @@ public function getSelectSQL($criteria, $assoc = null, $lockMode = null, $limit { $this->switchPersisterContext($offset, $limit); - $baseTableAlias = $this->getSQLTableAlias($this->class->name); + $baseTableAlias = $this->getSQLTableAlias($this->class->getTableName()); $joinSql = $this->getJoinSql($baseTableAlias); if ($assoc != null && $assoc['type'] == ClassMetadata::MANY_TO_MANY) { @@ -320,7 +320,10 @@ public function getSelectSQL($criteria, $assoc = null, $lockMode = null, $limit : $this->getSelectConditionSQL($criteria, $assoc); // If the current class in the root entity, add the filters - if ($filterSql = $this->generateFilterConditionSQL($this->em->getClassMetadata($this->class->rootEntityName), $this->getSQLTableAlias($this->class->rootEntityName))) { + $rootClass = $this->em->getClassMetadata($this->class->rootEntityName); + $tableAlias = $this->getSQLTableAlias($rootClass->getTableName()); + + if ($filterSql = $this->generateFilterConditionSQL($rootClass, $tableAlias)) { $conditionSql .= $conditionSql ? ' AND ' . $filterSql : $filterSql; @@ -372,14 +375,16 @@ public function getSelectSQL($criteria, $assoc = null, $lockMode = null, $limit public function getCountSQL($criteria = []) { $tableName = $this->quoteStrategy->getTableName($this->class, $this->platform); - $baseTableAlias = $this->getSQLTableAlias($this->class->name); + $baseTableAlias = $this->getSQLTableAlias($this->class->getTableName()); $joinSql = $this->getJoinSql($baseTableAlias); $conditionSql = ($criteria instanceof Criteria) ? $this->getSelectConditionCriteriaSQL($criteria) : $this->getSelectConditionSQL($criteria); - $filterSql = $this->generateFilterConditionSQL($this->em->getClassMetadata($this->class->rootEntityName), $this->getSQLTableAlias($this->class->rootEntityName)); + $rootClass = $this->em->getClassMetadata($this->class->rootEntityName); + $tableAlias = $this->getSQLTableAlias($rootClass->getTableName()); + $filterSql = $this->generateFilterConditionSQL($rootClass, $tableAlias); if ('' !== $filterSql) { $conditionSql = $conditionSql @@ -402,14 +407,14 @@ protected function getLockTablesSql($lockMode) { $joinSql = ''; $identifierColumns = $this->class->getIdentifierColumnNames(); - $baseTableAlias = $this->getSQLTableAlias($this->class->name); + $baseTableAlias = $this->getSQLTableAlias($this->class->getTableName()); // INNER JOIN parent tables foreach ($this->class->parentClasses as $parentClassName) { - $conditions = []; - $tableAlias = $this->getSQLTableAlias($parentClassName); - $parentClass = $this->em->getClassMetadata($parentClassName); - $joinSql .= ' INNER JOIN ' . $this->quoteStrategy->getTableName($parentClass, $this->platform) . ' ' . $tableAlias . ' ON '; + $conditions = []; + $parentClass = $this->em->getClassMetadata($parentClassName); + $tableAlias = $this->getSQLTableAlias($parentClass->getTableName()); + $joinSql .= ' INNER JOIN ' . $this->quoteStrategy->getTableName($parentClass, $this->platform) . ' ' . $tableAlias . ' ON '; foreach ($identifierColumns as $idColumn) { $conditions[] = $baseTableAlias . '.' . $idColumn . ' = ' . $tableAlias . '.' . $idColumn; @@ -436,7 +441,7 @@ protected function getSelectColumnsSQL() $columnList = []; $discrColumn = $this->class->discriminatorColumn['name']; $discrColumnType = $this->class->discriminatorColumn['type']; - $baseTableAlias = $this->getSQLTableAlias($this->class->name); + $baseTableAlias = $this->getSQLTableAlias($this->class->getTableName()); $resultColumnName = $this->platform->getSQLResultCasing($discrColumn); $this->currentPersisterContext->rsm->addEntityResult($this->class->name, 'r'); @@ -472,16 +477,15 @@ protected function getSelectColumnsSQL() } // Add discriminator column (DO NOT ALIAS, see AbstractEntityInheritancePersister#processSQLResult). - $tableAlias = ($this->class->rootEntityName == $this->class->name) - ? $baseTableAlias - : $this->getSQLTableAlias($this->class->rootEntityName); + $rootClass = $this->em->getClassMetadata($this->class->rootEntityName); + $tableAlias = $this->getSQLTableAlias($rootClass->getTableName()); $columnList[] = $tableAlias . '.' . $discrColumn; // sub tables foreach ($this->class->subClasses as $subClassName) { $subClass = $this->em->getClassMetadata($subClassName); - $tableAlias = $this->getSQLTableAlias($subClassName); + $tableAlias = $this->getSQLTableAlias($subClass->getTableName()); // Add subclass columns foreach ($subClass->fieldMappings as $fieldName => $mapping) { @@ -583,7 +587,7 @@ private function getJoinSql($baseTableAlias) foreach ($this->class->parentClasses as $parentClassName) { $conditions = []; $parentClass = $this->em->getClassMetadata($parentClassName); - $tableAlias = $this->getSQLTableAlias($parentClassName); + $tableAlias = $this->getSQLTableAlias($parentClass->getTableName()); $joinSql .= ' INNER JOIN ' . $this->quoteStrategy->getTableName($parentClass, $this->platform) . ' ' . $tableAlias . ' ON '; @@ -598,7 +602,7 @@ private function getJoinSql($baseTableAlias) foreach ($this->class->subClasses as $subClassName) { $conditions = []; $subClass = $this->em->getClassMetadata($subClassName); - $tableAlias = $this->getSQLTableAlias($subClassName); + $tableAlias = $this->getSQLTableAlias($subClass->getTableName()); $joinSql .= ' LEFT JOIN ' . $this->quoteStrategy->getTableName($subClass, $this->platform) . ' ' . $tableAlias . ' ON '; foreach ($identifierColumn as $idColumn) { diff --git a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php index 0ca96cb1033..cb25604e5f5 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php @@ -55,7 +55,7 @@ protected function getSelectColumnsSQL() $columnList[] = parent::getSelectColumnsSQL(); $rootClass = $this->em->getClassMetadata($this->class->rootEntityName); - $tableAlias = $this->getSQLTableAlias($rootClass->name); + $tableAlias = $this->getSQLTableAlias($rootClass->getTableName()); // Append discriminator column $discrColumn = $this->class->discriminatorColumn['name']; @@ -122,9 +122,9 @@ protected function getInsertColumnList() /** * {@inheritdoc} */ - protected function getSQLTableAlias($className, $assocName = '') + protected function getSQLTableAlias($tableName, $assocName = '') { - return parent::getSQLTableAlias($this->class->rootEntityName, $assocName); + return parent::getSQLTableAlias($this->class->getTableName(), $assocName); } /** @@ -174,7 +174,7 @@ protected function getSelectConditionDiscriminatorValueSQL() $values = implode(', ', $values); $discColumn = $this->class->discriminatorColumn['name']; - $tableAlias = $this->getSQLTableAlias($this->class->name); + $tableAlias = $this->getSQLTableAlias($this->class->getTableName()); return $tableAlias . '.' . $discColumn . ' IN (' . $values . ')'; } diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index b57b21dc698..03a9dcb2cc6 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -1129,7 +1129,7 @@ public function walkJoin($join) case ($joinDeclaration instanceof \Doctrine\ORM\Query\AST\RangeVariableDeclaration): $class = $this->em->getClassMetadata($joinDeclaration->abstractSchemaName); $dqlAlias = $joinDeclaration->aliasIdentificationVariable; - $tableAlias = $this->getSQLTableAlias($class->table['name'], $dqlAlias); + $tableAlias = $this->getSQLTableAlias($class->getTableName(), $dqlAlias); $conditions = []; if ($join->conditionalExpression) { @@ -1763,7 +1763,7 @@ public function walkWhereClause($whereClause) $filterClauses = []; foreach ($this->rootAliases as $dqlAlias) { $class = $this->queryComponents[$dqlAlias]['metadata']; - $tableAlias = $this->getSQLTableAlias($class->table['name'], $dqlAlias); + $tableAlias = $this->getSQLTableAlias($class->getTableName(), $dqlAlias); if ($filterExpr = $this->generateFilterConditionSQL($class, $tableAlias)) { $filterClauses[] = $filterExpr; diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php index e9eeeec1d5c..05f06cbad57 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php @@ -475,10 +475,7 @@ private function generateSqlAliasReplacements() : array // Field was declared in a parent class, so we need to get the proper SQL table alias // for the joined parent table. if ( ! $fieldMapping['declaringClass']->isMappedSuperclass) { - $sqlTableAliasForFieldAlias = $this->getSQLTableAlias( - $fieldMapping['declaringClass']->getTableName(), - $dqlAliasForFieldAlias - ); + $sqlTableAliasForFieldAlias = $this->getSQLTableAlias($fieldMapping['declaringClass']->getTableName(), $dqlAliasForFieldAlias); } } From 9cf948df4c6b2ee59bb2a0d1c794e458939a2224 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 14 May 2016 07:33:58 +0000 Subject: [PATCH 014/275] Made fields, associations, join columns, version fields, identifiers, embeddeds and discriminator columns to hold its owning table name. --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 63 +++++++++++-------- .../ORM/Mapping/ClassMetadataFactory.php | 21 +++++++ .../ORM/Mapping/Driver/AnnotationDriver.php | 12 +++- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 18 ++++-- .../ORM/Mapping/Driver/YamlDriver.php | 18 ++++-- .../AbstractEntityInheritancePersister.php | 12 ++-- .../Entity/JoinedSubclassPersister.php | 42 +++++-------- .../Entity/SingleTablePersister.php | 16 ++--- .../Tests/Models/Company/CompanyContract.php | 7 ++- .../ORM/Mapping/AbstractMappingDriverTest.php | 10 +-- .../ORM/Mapping/ClassMetadataBuilderTest.php | 61 ++++++++++-------- .../Tests/ORM/Mapping/ClassMetadataTest.php | 12 +++- .../php/Doctrine.Tests.ORM.Mapping.Animal.php | 16 ++--- 13 files changed, 186 insertions(+), 122 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 534f2b5c7bc..93d8b3bc968 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -358,8 +358,11 @@ class ClassMetadata implements ClassMetadataInterface * The type of the mapped field. Can be one of Doctrine's mapping types or a * custom mapping type. * - * - columnName (string, optional) - * The column name. Optional. Defaults to the field name. + * - tableName (string) + * The table name. Defaults to the entity table name. + * + * - columnName (string) + * The column name. Defaults to the field name. * * - length (integer, optional) * The database length of the column. Optional. Default value taken from @@ -372,6 +375,9 @@ class ClassMetadata implements ClassMetadataInterface * - nullable (boolean, optional) * Whether the column is nullable. Defaults to FALSE. * + * - unique (boolean, optional, schema-only) + * Whether a unique constraint should be generated for the column. Defaults to FALSE. + * * - columnDefinition (string, optional, schema-only) * The SQL fragment that is used when generating the DDL for the column. * @@ -381,9 +387,6 @@ class ClassMetadata implements ClassMetadataInterface * - scale (integer, optional, schema-only) * The scale of a decimal column. Only valid if the column type is decimal. * - * - 'unique' (string, optional, schema-only) - * Whether a unique constraint should be generated for the column. - * * @var array */ public $fieldMappings = []; @@ -1357,6 +1360,7 @@ public function getSqlResultSetMappings() protected function validateAndCompleteFieldMapping(array &$mapping) { $mapping['declaringClass'] = $this; + $mapping['tableName'] = $this->getTableName(); // Check mandatory fields if ( ! isset($mapping['fieldName']) || ! $mapping['fieldName']) { @@ -1579,6 +1583,8 @@ protected function validateAndCompleteOneToOneMapping(array $mapping) } } + $joinColumn['tableName'] = $this->getTableName(); + if (empty($joinColumn['name'])) { $joinColumn['name'] = $this->namingStrategy->joinColumnName($mapping['fieldName'], $this->name); } @@ -2342,6 +2348,7 @@ public function addInheritedAssociationMapping(array $mapping/*, $owningClassNam if (isset($this->associationMappings[$mapping['fieldName']])) { throw MappingException::duplicateAssociationMapping($this->name, $mapping['fieldName']); } + $this->associationMappings[$mapping['fieldName']] = $mapping; } @@ -2714,33 +2721,39 @@ public function addEntityListener($eventName, $class, $method) */ public function setDiscriminatorColumn($columnDef) { - if ($columnDef !== null) { - if ( ! isset($columnDef['name'])) { - throw MappingException::nameIsMandatoryForDiscriminatorColumns($this->name); - } + if ($columnDef === null) { + return; + } - if (isset($this->fieldNames[$columnDef['name']])) { - throw MappingException::duplicateColumnName($this->name, $columnDef['name']); - } + if ( ! isset($columnDef['name'])) { + throw MappingException::nameIsMandatoryForDiscriminatorColumns($this->name); + } - if ( ! isset($columnDef['fieldName'])) { - $columnDef['fieldName'] = $columnDef['name']; - } + if (isset($this->fieldNames[$columnDef['name']])) { + throw MappingException::duplicateColumnName($this->name, $columnDef['name']); + } - $type = isset($columnDef['type']) - ? $columnDef['type'] - : 'string'; + $columnDef['tableName'] = isset($columnDef['tableName']) + ? $columnDef['tableName'] + : $this->table['name']; - if ( ! ($type instanceof Type)) { - $columnDef['type'] = Type::getType($type); - } + if ( ! isset($columnDef['fieldName'])) { + $columnDef['fieldName'] = $columnDef['name']; + } - if (in_array($columnDef['type']->getName(), ["boolean", "array", "object", "datetime", "time", "date"])) { - throw MappingException::invalidDiscriminatorColumnType($this->name, $columnDef['type']->getName()); - } + $type = isset($columnDef['type']) + ? $columnDef['type'] + : 'string'; - $this->discriminatorColumn = $columnDef; + if ( ! ($type instanceof Type)) { + $columnDef['type'] = Type::getType($type); } + + if (in_array($columnDef['type']->getName(), ["boolean", "array", "object", "datetime", "time", "date"])) { + throw MappingException::invalidDiscriminatorColumnType($this->name, $columnDef['type']->getName()); + } + + $this->discriminatorColumn = $columnDef; } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 2967015c17d..06f460b1050 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -396,6 +396,10 @@ private function getShortName($className) private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $parentClass) { foreach ($parentClass->fieldMappings as $mapping) { + if ( ! isset($mapping['tableName']) || ! $mapping['tableName']) { + $mapping['tableName'] = $subClass->getTableName(); + } + if ( ! isset($mapping['inherited']) && ! $parentClass->isMappedSuperclass) { $mapping['inherited'] = $parentClass->name; } @@ -420,6 +424,8 @@ private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $pare */ private function addInheritedRelations(ClassMetadata $subClass, ClassMetadata $parentClass) { + $tableName = $subClass->getTableName(); + foreach ($parentClass->associationMappings as $field => $mapping) { if ($parentClass->isMappedSuperclass) { if ($mapping['type'] & ClassMetadata::TO_MANY && !$mapping['isOwningSide']) { @@ -429,6 +435,17 @@ private function addInheritedRelations(ClassMetadata $subClass, ClassMetadata $p $mapping['sourceEntity'] = $subClass->name; } + // Resolve which table owns the join columns in a to-one mapping + if (isset($mapping['joinColumns'])) { + foreach ($mapping['joinColumns'] as &$joinColumn) { + if (isset($joinColumn['tableName']) && $joinColumn['tableName']) { + continue; + } + + $joinColumn['tableName'] = $tableName; + } + } + //$subclassMapping = $mapping; if ( ! isset($mapping['inherited']) && ! $parentClass->isMappedSuperclass) { $mapping['inherited'] = $parentClass->name; @@ -441,6 +458,10 @@ private function addInheritedRelations(ClassMetadata $subClass, ClassMetadata $p private function addInheritedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata $parentClass) { foreach ($parentClass->embeddedClasses as $field => $embeddedClass) { + $embeddedClass['tableName'] = ( ! isset($mapping['tableName']) && ! $parentClass->isMappedSuperclass) + ? $parentClass->getTableName() + : $subClass->getTableName(); + if ( ! isset($embeddedClass['inherited']) && ! $parentClass->isMappedSuperclass) { $embeddedClass['inherited'] = $parentClass->name; } diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index e870b47d314..278cd241ba7 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -242,7 +242,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat constant(sprintf('%s::INHERITANCE_TYPE_%s', ClassMetadata::class, $inheritanceTypeAnnot->value)) ); - if ($metadata->inheritanceType != ClassMetadata::INHERITANCE_TYPE_NONE) { + if ($metadata->inheritanceType !== ClassMetadata::INHERITANCE_TYPE_NONE) { // Evaluate DiscriminatorColumn annotation if (isset($classAnnotations[Annotation\DiscriminatorColumn::class])) { $discrColumnAnnot = $classAnnotations[Annotation\DiscriminatorColumn::class]; @@ -253,10 +253,18 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat 'type' => $discrColumnAnnot->type ?: 'string', 'length' => $discrColumnAnnot->length ?: 255, 'columnDefinition' => $discrColumnAnnot->columnDefinition, + 'tableName' => $metadata->table['name'], ] ); } else { - $metadata->setDiscriminatorColumn(['name' => 'dtype', 'type' => 'string', 'length' => 255]); + $metadata->setDiscriminatorColumn( + [ + 'name' => 'dtype', + 'type' => 'string', + 'length' => 255, + 'tableName' => $metadata->table['name'], + ] + ); } // Evaluate DiscriminatorMap annotation diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 74a0760b51b..60f5d7ac43a 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -173,14 +173,22 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $metadata->setDiscriminatorColumn( [ - 'name' => isset($discrColumn['name']) ? (string) $discrColumn['name'] : null, - 'type' => isset($discrColumn['type']) ? (string) $discrColumn['type'] : 'string', - 'length' => isset($discrColumn['length']) ? (string) $discrColumn['length'] : 255, - 'columnDefinition' => isset($discrColumn['column-definition']) ? (string) $discrColumn['column-definition'] : null + 'name' => isset($discrColumn['name']) ? (string) $discrColumn['name'] : null, + 'type' => isset($discrColumn['type']) ? (string) $discrColumn['type'] : 'string', + 'length' => isset($discrColumn['length']) ? (string) $discrColumn['length'] : 255, + 'columnDefinition' => isset($discrColumn['column-definition']) ? (string) $discrColumn['column-definition'] : null, + 'tableName' => $metadata->table['name'], ] ); } else { - $metadata->setDiscriminatorColumn(['name' => 'dtype', 'type' => 'string', 'length' => 255]); + $metadata->setDiscriminatorColumn( + [ + 'name' => 'dtype', + 'type' => 'string', + 'length' => 255, + 'tableName' => $metadata->table['name'], + ] + ); } // Evaluate diff --git a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php index 493264de96f..1483b16d56d 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php @@ -181,14 +181,22 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $discrColumn = $element['discriminatorColumn']; $metadata->setDiscriminatorColumn( [ - 'name' => isset($discrColumn['name']) ? (string) $discrColumn['name'] : null, - 'type' => isset($discrColumn['type']) ? (string) $discrColumn['type'] : 'string', - 'length' => isset($discrColumn['length']) ? (string) $discrColumn['length'] : 255, - 'columnDefinition' => isset($discrColumn['columnDefinition']) ? (string) $discrColumn['columnDefinition'] : null + 'name' => isset($discrColumn['name']) ? (string) $discrColumn['name'] : null, + 'type' => isset($discrColumn['type']) ? (string) $discrColumn['type'] : 'string', + 'length' => isset($discrColumn['length']) ? (string) $discrColumn['length'] : 255, + 'columnDefinition' => isset($discrColumn['columnDefinition']) ? (string) $discrColumn['columnDefinition'] : null, + 'tableName' => $metadata->table['name'], ] ); } else { - $metadata->setDiscriminatorColumn(['name' => 'dtype', 'type' => 'string', 'length' => 255]); + $metadata->setDiscriminatorColumn( + [ + 'name' => 'dtype', + 'type' => 'string', + 'length' => 255, + 'tableName' => $metadata->table['name'], + ] + ); } // Evaluate discriminatorMap diff --git a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php index 311efb95401..771e7e1c30e 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php @@ -58,16 +58,16 @@ protected function prepareInsertData($entity) abstract protected function getDiscriminatorColumnTableName(); /** - * @param string $field The field name. - * @param ClassMetadata $class The class that declares this field. The table this class is - * mapped to must own the column for the given field. - * @param Type $type + * @param string $tableName The class that declares this field. The table this class is + * mapped to must own the column for the given field. + * @param string $field The field name. + * @param Type $type * * @return string */ - protected function getSelectJoinColumnSQL($field, ClassMetadata $class, $type) + protected function getSelectJoinColumnSQL($tableName, $field, $type) { - $tableAlias = $this->getSQLTableAlias($class->getTableName()); + $tableAlias = $this->getSQLTableAlias($tableName); $columnAlias = $this->getSQLColumnAlias($field); $sql = sprintf('%s.%s', $tableAlias, $field); diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index 67b4e4df5ca..6f347b07275 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -439,9 +439,9 @@ protected function getSelectColumnsSQL() } $columnList = []; - $discrColumn = $this->class->discriminatorColumn['name']; - $discrColumnType = $this->class->discriminatorColumn['type']; - $baseTableAlias = $this->getSQLTableAlias($this->class->getTableName()); + $discrMapping = $this->class->discriminatorColumn; + $discrColumn = $discrMapping['name']; + $discrColumnType = $discrMapping['type']; $resultColumnName = $this->platform->getSQLResultCasing($discrColumn); $this->currentPersisterContext->rsm->addEntityResult($this->class->name, 'r'); @@ -458,34 +458,26 @@ protected function getSelectColumnsSQL() } // Add foreign key columns - foreach ($this->class->associationMappings as $mapping) { + foreach ($this->class->associationMappings as $field => $mapping) { if ( ! $mapping['isOwningSide'] || ! ($mapping['type'] & ClassMetadata::TO_ONE)) { continue; } - $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); - $declaringClass = isset($mapping['inherited']) - ? $this->em->getClassMetadata($mapping['inherited']) - : $this->class; + $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); - foreach ($mapping['targetToSourceKeyColumns'] as $srcColumn) { - $targetColumn = $mapping['sourceToTargetKeyColumns'][$srcColumn]; - $type = PersisterHelper::getTypeOfColumn($targetColumn, $targetClass, $this->em); + foreach ($mapping['joinColumns'] as $joinColumn) { + $type = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); - $columnList[] = $this->getSelectJoinColumnSQL($srcColumn, $declaringClass, $type); + $columnList[] = $this->getSelectJoinColumnSQL($joinColumn['tableName'], $joinColumn['name'], $type); } } // Add discriminator column (DO NOT ALIAS, see AbstractEntityInheritancePersister#processSQLResult). - $rootClass = $this->em->getClassMetadata($this->class->rootEntityName); - $tableAlias = $this->getSQLTableAlias($rootClass->getTableName()); - - $columnList[] = $tableAlias . '.' . $discrColumn; + $columnList[] = $this->getSQLTableAlias($discrMapping['tableName']) . '.' . $discrColumn; // sub tables foreach ($this->class->subClasses as $subClassName) { $subClass = $this->em->getClassMetadata($subClassName); - $tableAlias = $this->getSQLTableAlias($subClass->getTableName()); // Add subclass columns foreach ($subClass->fieldMappings as $fieldName => $mapping) { @@ -498,22 +490,16 @@ protected function getSelectColumnsSQL() // Add join columns (foreign keys) foreach ($subClass->associationMappings as $mapping) { - if ( ! $mapping['isOwningSide'] - || ! ($mapping['type'] & ClassMetadata::TO_ONE) - || isset($mapping['inherited'])) { + if ( ! $mapping['isOwningSide'] || ! ($mapping['type'] & ClassMetadata::TO_ONE) || isset($mapping['inherited'])) { continue; } - $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); - $declaringClass = isset($mapping['inherited']) - ? $this->em->getClassMetadata($mapping['inherited']) - : $subClass; + $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); - foreach ($mapping['targetToSourceKeyColumns'] as $srcColumn) { - $targetColumn = $mapping['sourceToTargetKeyColumns'][$srcColumn]; - $type = PersisterHelper::getTypeOfColumn($targetColumn, $targetClass, $this->em); + foreach ($mapping['joinColumns'] as $joinColumn) { + $type = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); - $columnList[] = $this->getSelectJoinColumnSQL($srcColumn, $declaringClass, $type); + $columnList[] = $this->getSelectJoinColumnSQL($joinColumn['tableName'], $joinColumn['name'], $type); } } } diff --git a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php index cb25604e5f5..e27a26c5059 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php @@ -82,21 +82,17 @@ protected function getSelectColumnsSQL() } // Foreign key columns - foreach ($subClass->associationMappings as $assoc) { - if ( ! $assoc['isOwningSide'] || ! ($assoc['type'] & ClassMetadata::TO_ONE) || isset($assoc['inherited'])) { + foreach ($subClass->associationMappings as $mapping) { + if ( ! $mapping['isOwningSide'] || ! ($mapping['type'] & ClassMetadata::TO_ONE) || isset($mapping['inherited'])) { continue; } - $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); - $declaringClass = isset($assoc['inherited']) - ? $this->em->getClassMetadata($assoc['inherited']) - : $this->class; + $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); - foreach ($assoc['targetToSourceKeyColumns'] as $srcColumn) { - $targetColumn = $assoc['sourceToTargetKeyColumns'][$srcColumn]; - $type = PersisterHelper::getTypeOfColumn($targetColumn, $targetClass, $this->em); + foreach ($mapping['joinColumns'] as $joinColumn) { + $type = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); - $columnList[] = $this->getSelectJoinColumnSQL($srcColumn, $declaringClass, $type); + $columnList[] = $this->getSelectJoinColumnSQL($joinColumn['tableName'], $joinColumn['name'], $type); } } } diff --git a/tests/Doctrine/Tests/Models/Company/CompanyContract.php b/tests/Doctrine/Tests/Models/Company/CompanyContract.php index 6d4b61d4f40..03a7ba6ae43 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyContract.php @@ -133,11 +133,12 @@ abstract public function calculatePrice(); static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { $metadata->setInheritanceType(\Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_JOINED); - $metadata->setTableName( 'company_contracts'); + $metadata->setPrimaryTable(['name' => 'company_contracts']); $metadata->setDiscriminatorColumn( [ - 'name' => 'discr', - 'type' => 'string', + 'name' => 'discr', + 'type' => 'string', + 'tableName' => $metadata->getTableName(), ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index faa0141a02f..33d47e56e05 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -434,7 +434,8 @@ public function testDiscriminatorColumnDefaults() 'type' => Type::getType('string'), 'length' => '32', 'fieldName' => 'discr', - 'columnDefinition' => null + 'columnDefinition' => null, + 'tableName' => 'Animal', ], $class->discriminatorColumn ); @@ -1441,9 +1442,10 @@ public static function loadMetadata(ClassMetadata $metadata) $metadata->setDiscriminatorColumn( [ - 'name' => "dtype", - 'type' => "string", - 'columnDefinition' => "ENUM('ONE','TWO')" + 'name' => "dtype", + 'type' => "string", + 'columnDefinition' => "ENUM('ONE','TWO')", + 'tableName' => $metadata->getTableName(), ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php index 069670ce19f..828f423a6c5 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php @@ -190,6 +190,7 @@ public function testSetDiscriminatorColumn() 'name' => 'discr', 'type' => Type::getType('string'), 'length' => '124', + 'tableName' => 'CmsUser', ], $this->cm->discriminatorColumn ); @@ -225,6 +226,7 @@ public function testAddField() 'fieldName' => 'name', 'type' => Type::getType('string'), 'declaringClass' => $this->cm, + 'tableName' => 'CmsUser', ], $this->cm->fieldMappings['name'] ); @@ -244,6 +246,7 @@ public function testCreateField() 'fieldName' => 'name', 'type' => Type::getType('string'), 'declaringClass' => $this->cm, + 'tableName' => 'CmsUser', ], $this->cm->fieldMappings['name'] ); @@ -271,6 +274,7 @@ public function testCreateVersionedField() 'nullable' => true, 'unique' => true, 'declaringClass' => $this->cm, + 'tableName' => 'CmsUser', ], $this->cm->fieldMappings['name'] ); @@ -291,6 +295,7 @@ public function testCreatePrimaryField() 'id' => true, 'type' => Type::getType('integer'), 'declaringClass' => $this->cm, + 'tableName' => 'CmsUser', ], $this->cm->fieldMappings['id'] ); @@ -309,6 +314,7 @@ public function testCreateUnsignedOptionField() 'options' => ['unsigned' => true], 'columnName' => 'state', 'declaringClass' => $this->cm, + 'tableName' => 'CmsUser', ], $this->cm->fieldMappings['state'] ); @@ -346,12 +352,13 @@ public function testCreateManyToOne() 'fetch' => 4, 'joinColumns' => [ 0 => [ - 'name' => 'group_id', + 'name' => 'group_id', 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => false, - 'onDelete' => 'CASCADE', - 'columnDefinition' => NULL, + 'nullable' => true, + 'unique' => false, + 'onDelete' => 'CASCADE', + 'columnDefinition' => NULL, + 'tableName' => 'CmsUser', ], ], 'type' => 2, @@ -409,12 +416,13 @@ public function testCreateManyToOneWithIdentity() 'fetch' => 4, 'joinColumns' => [ 0 => [ - 'name' => 'group_id', + 'name' => 'group_id', 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => false, - 'onDelete' => 'CASCADE', - 'columnDefinition' => NULL, + 'nullable' => true, + 'unique' => false, + 'onDelete' => 'CASCADE', + 'columnDefinition' => NULL, + 'tableName' => 'CmsUser', ], ], 'type' => 2, @@ -464,12 +472,13 @@ public function testCreateOneToOne() 'fetch' => 4, 'joinColumns' => [ 0 => [ - 'name' => 'group_id', + 'name' => 'group_id', 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => true, - 'onDelete' => 'CASCADE', - 'columnDefinition' => NULL, + 'nullable' => true, + 'unique' => true, + 'onDelete' => 'CASCADE', + 'columnDefinition' => NULL, + 'tableName' => 'CmsUser', ], ], 'type' => 1, @@ -520,12 +529,13 @@ public function testCreateOneToOneWithIdentity() 'id' => true, 'joinColumns' => [ 0 => [ - 'name' => 'group_id', + 'name' => 'group_id', 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => false, - 'onDelete' => 'CASCADE', - 'columnDefinition' => NULL, + 'nullable' => true, + 'unique' => false, + 'onDelete' => 'CASCADE', + 'columnDefinition' => NULL, + 'tableName' => 'CmsUser', ], ], 'type' => 1, @@ -720,12 +730,13 @@ public function testOrphanRemovalOnCreateOneToOne() 'fetch' => 2, 'joinColumns' => [ 0 => [ - 'name' => 'group_id', + 'name' => 'group_id', 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => true, - 'onDelete' => 'CASCADE', - 'columnDefinition' => NULL, + 'nullable' => true, + 'unique' => true, + 'onDelete' => 'CASCADE', + 'columnDefinition' => NULL, + 'tableName' => 'CmsUser', ], ], 'type' => 1, diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 4b0deb11e21..093b8e6a54a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -63,10 +63,20 @@ public function testClassMetadataInstanceSerialization() self::assertEquals([CMS\One::class, CMS\Two::class, CMS\Three::class], $cm->subClasses); self::assertEquals(['UserParent'], $cm->parentClasses); self::assertEquals(CMS\UserRepository::class, $cm->customRepositoryClassName); - self::assertEquals(['name' => 'disc', 'type' => Type::getType('integer'), 'fieldName' => 'disc'], $cm->discriminatorColumn); + self::assertEquals( + [ + 'name' => 'disc', + 'type' => Type::getType('integer'), + 'fieldName' => 'disc', + 'tableName' => 'CmsUser', + ], + $cm->discriminatorColumn + ); self::assertTrue($cm->associationMappings['phonenumbers']['type'] == ClassMetadata::ONE_TO_ONE); self::assertEquals(1, count($cm->associationMappings)); + $oneOneMapping = $cm->getAssociationMapping('phonenumbers'); + self::assertTrue($oneOneMapping['fetch'] == ClassMetadata::FETCH_LAZY); self::assertEquals('phonenumbers', $oneOneMapping['fieldName']); self::assertEquals(CMS\CmsAddress::class, $oneOneMapping['targetEntity']); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php index 2dfdcee86e7..2634d6f3ace 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php @@ -8,16 +8,17 @@ $metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE); $metadata->setDiscriminatorColumn( [ - 'name' => 'dtype', - 'type' => 'string', - 'length' => 255, - 'fieldName' => 'dtype', + 'name' => 'dtype', + 'type' => 'string', + 'length' => 255, + 'fieldName' => 'dtype', + 'tableName' => $metadata->getTableName(), ] ); $metadata->setDiscriminatorMap( [ - 'cat' => Cat::class, - 'dog' => Dog::class, + 'cat' => Cat::class, + 'dog' => Dog::class, ] ); $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); @@ -32,7 +33,6 @@ 'unique' => false, 'id' => true, 'columnName' => 'id', - ] -); + ]); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); $metadata->setCustomGeneratorDefinition(["class" => "stdClass"]); From 837a63baf76b60be778d0044df73f9d5a323543a Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 14 May 2016 14:48:43 +0000 Subject: [PATCH 015/275] Added tableName on fields, association join columns and embeddeds. --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 22 ++----- .../ORM/Mapping/ClassMetadataFactory.php | 66 +++++++++++++++---- .../Entity/BasicEntityPersister.php | 10 ++- .../ORM/Functional/MappedSuperclassTest.php | 6 +- .../Tests/ORM/Functional/NativeQueryTest.php | 4 +- 5 files changed, 77 insertions(+), 31 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 93d8b3bc968..e70cc16988a 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1360,7 +1360,7 @@ public function getSqlResultSetMappings() protected function validateAndCompleteFieldMapping(array &$mapping) { $mapping['declaringClass'] = $this; - $mapping['tableName'] = $this->getTableName(); + $mapping['tableName'] = ! $this->isMappedSuperclass ? $this->getTableName() : null; // Check mandatory fields if ( ! isset($mapping['fieldName']) || ! $mapping['fieldName']) { @@ -1583,7 +1583,7 @@ protected function validateAndCompleteOneToOneMapping(array $mapping) } } - $joinColumn['tableName'] = $this->getTableName(); + $joinColumn['tableName'] = ! $this->isMappedSuperclass ? $this->getTableName() : null; if (empty($joinColumn['name'])) { $joinColumn['name'] = $this->namingStrategy->joinColumnName($mapping['fieldName'], $this->name); @@ -3287,17 +3287,13 @@ public function mapEmbedded(array $mapping) */ public function inlineEmbeddable($property, ClassMetadata $embeddable) { - foreach ($embeddable->fieldMappings as $fieldMapping) { - $fieldMapping['originalClass'] = isset($fieldMapping['originalClass']) - ? $fieldMapping['originalClass'] - : $embeddable->name; + foreach ($embeddable->fieldMappings as $fieldName => $fieldMapping) { + $fieldMapping['fieldName'] = $property . "." . $fieldName; + $fieldMapping['originalClass'] = $fieldMapping['originalClass'] ?? $embeddable->name; + $fieldMapping['originalField'] = $fieldMapping['originalField'] ?? $fieldName; $fieldMapping['declaredField'] = isset($fieldMapping['declaredField']) ? $property . '.' . $fieldMapping['declaredField'] : $property; - $fieldMapping['originalField'] = isset($fieldMapping['originalField']) - ? $fieldMapping['originalField'] - : $fieldMapping['fieldName']; - $fieldMapping['fieldName'] = $property . "." . $fieldMapping['fieldName']; if (! empty($this->embeddedClasses[$property]['columnPrefix'])) { $fieldMapping['columnName'] = $this->embeddedClasses[$property]['columnPrefix'] . $fieldMapping['columnName']; @@ -3337,11 +3333,7 @@ private function assertFieldNotMapped($fieldName) */ public function getSequenceName(AbstractPlatform $platform) { - $sequencePrefix = $this->getSequencePrefix($platform); - $columnName = $this->getSingleIdentifierColumnName(); - $sequenceName = $sequencePrefix . '_' . $columnName . '_seq'; - - return $sequenceName; + return sprintf('%s_%s_seq', $this->getSequencePrefix($platform), $this->getSingleIdentifierColumnName()); } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 06f460b1050..cd4df2398db 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -137,11 +137,11 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS $class->setLifecycleCallbacks($parent->lifecycleCallbacks); $class->setChangeTrackingPolicy($parent->changeTrackingPolicy); - if ( ! empty($parent->customGeneratorDefinition)) { + if ( ! empty($parent->customGeneratorDefinition) && empty($class->customGeneratorDefinition)) { $class->setCustomGeneratorDefinition($parent->customGeneratorDefinition); } - if ($parent->isMappedSuperclass) { + if ($parent->isMappedSuperclass && empty($class->customRepositoryClassName)) { $class->setCustomRepositoryClass($parent->customRepositoryClassName); } } @@ -234,6 +234,8 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS $this->addDefaultDiscriminatorMap($class); } + $this->completeRuntimeMetadata($class, $parent); + if ($this->evm->hasListeners(Events::loadClassMetadata)) { $eventArgs = new LoadClassMetadataEventArgs($class, $this->em); @@ -243,6 +245,42 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS $this->validateRuntimeMetadata($class, $parent); } + /** + * @param ClassMetadata $class + * @param ClassMetadataInterface|null $parent + * + * @return void + */ + protected function completeRuntimeMetadata($class, $parent) + { + if ( ! $parent || ! $parent->isMappedSuperclass || $class->isMappedSuperclass) { + return; + } + + $tableName = $class->getTableName(); + + // Resolve column table names + foreach ($class->fieldMappings as &$mapping) { + $mapping['tableName'] = $mapping['tableName'] ?? $tableName; + } + + // Resolve association join column table names + foreach ($class->associationMappings as &$mapping) { + if (isset($mapping['joinColumns'])) { + foreach ($mapping['joinColumns'] as &$joinColumn) { + $joinColumn['tableName'] = $joinColumn['tableName'] ?? $tableName; + } + } + } + + // Resolve embedded table names + foreach ($class->embeddedClasses as &$mapping) { + if ( ! isset($mapping['tableName'])) { + $mapping['tableName'] = $mapping['tableName'] ?? $tableName; + } + } + } + /** * Validate runtime metadata is correctly defined. * @@ -396,8 +434,8 @@ private function getShortName($className) private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $parentClass) { foreach ($parentClass->fieldMappings as $mapping) { - if ( ! isset($mapping['tableName']) || ! $mapping['tableName']) { - $mapping['tableName'] = $subClass->getTableName(); + if ( ! isset($mapping['tableName'])) { + $mapping['tableName'] = ! $parentClass->isMappedSuperclass ? $parentClass->getTableName() : null; } if ( ! isset($mapping['inherited']) && ! $parentClass->isMappedSuperclass) { @@ -438,11 +476,9 @@ private function addInheritedRelations(ClassMetadata $subClass, ClassMetadata $p // Resolve which table owns the join columns in a to-one mapping if (isset($mapping['joinColumns'])) { foreach ($mapping['joinColumns'] as &$joinColumn) { - if (isset($joinColumn['tableName']) && $joinColumn['tableName']) { - continue; + if ( ! isset($joinColumn['tableName'])) { + $joinColumn['tableName'] = ! $parentClass->isMappedSuperclass ? $tableName : null; } - - $joinColumn['tableName'] = $tableName; } } @@ -455,12 +491,20 @@ private function addInheritedRelations(ClassMetadata $subClass, ClassMetadata $p } } + /** + * Adds inherited embedded mappings to the subclass mapping. + * + * @param \Doctrine\ORM\Mapping\ClassMetadata $subClass + * @param \Doctrine\ORM\Mapping\ClassMetadata $parentClass + * + * @return void + */ private function addInheritedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata $parentClass) { foreach ($parentClass->embeddedClasses as $field => $embeddedClass) { - $embeddedClass['tableName'] = ( ! isset($mapping['tableName']) && ! $parentClass->isMappedSuperclass) - ? $parentClass->getTableName() - : $subClass->getTableName(); + if ( ! isset($embeddedClass['tableName'])) { + $embeddedClass['tableName'] = ! $parentClass->isMappedSuperclass ? $parentClass->getTableName() : null; + } if ( ! isset($embeddedClass['inherited']) && ! $parentClass->isMappedSuperclass) { $embeddedClass['inherited'] = $parentClass->name; diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 3c84789489e..eb13a3da14d 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -1491,10 +1491,18 @@ protected function getInsertColumnList() protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r') { $fieldMapping = $class->fieldMappings[$field]; + +// $m = $fieldMapping['declaringClass']; +// $fieldMapping['declaringClass'] = $m->name; +// +// var_dump($fieldMapping); +// +// $fieldMapping['declaringClass'] = $m; + $columnAlias = $this->getSQLColumnAlias($fieldMapping['columnName']); $sql = sprintf( '%s.%s', - $this->getSQLTableAlias($class->getTableName(), ($alias == 'r' ? '' : $alias)), + $this->getSQLTableAlias($fieldMapping['tableName'], ($alias == 'r' ? '' : $alias)), $this->quoteStrategy->getColumnName($field, $class, $this->platform) ); diff --git a/tests/Doctrine/Tests/ORM/Functional/MappedSuperclassTest.php b/tests/Doctrine/Tests/ORM/Functional/MappedSuperclassTest.php index a86e5990c3b..44f84bc07eb 100644 --- a/tests/Doctrine/Tests/ORM/Functional/MappedSuperclassTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/MappedSuperclassTest.php @@ -14,8 +14,10 @@ */ class MappedSuperclassTest extends OrmFunctionalTestCase { - protected function setUp() { + protected function setUp() + { $this->useModelSet('directorytree'); + parent::setUp(); } @@ -39,7 +41,7 @@ public function testCRUD() $this->_em->flush(); $this->_em->clear(); - $cleanFile = $this->_em->find(get_class($file), $file->getId()); + $cleanFile = $this->_em->find(File::class, $file->getId()); self::assertInstanceOf(Directory::class, $cleanFile->getParent()); self::assertInstanceOf(Proxy::class, $cleanFile->getParent()); diff --git a/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php b/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php index 4b853191a62..3578460a984 100644 --- a/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php @@ -3,7 +3,7 @@ namespace Doctrine\Tests\ORM\Functional; use Doctrine\Common\Collections\ArrayCollection; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Type as DBALType; use Doctrine\ORM\Internal\Hydration\HydrationException; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\Query\Parameter; @@ -96,7 +96,7 @@ public function testBasicNativeQueryWithMetaResult() $rsm->addFieldResult('a', $this->platform->getSQLResultCasing('country'), 'country'); $rsm->addFieldResult('a', $this->platform->getSQLResultCasing('zip'), 'zip'); $rsm->addFieldResult('a', $this->platform->getSQLResultCasing('city'), 'city'); - $rsm->addMetaResult('a', $this->platform->getSQLResultCasing('user_id'), 'user_id', false, Type::getType('integer')); + $rsm->addMetaResult('a', $this->platform->getSQLResultCasing('user_id'), 'user_id', false, DBALType::getType('integer')); $query = $this->_em->createNativeQuery('SELECT a.id, a.country, a.zip, a.city, a.user_id FROM cms_addresses a WHERE a.id = ?', $rsm); From 9694e2eec08ef5707656c7a188736fbe4ed70701 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 14 May 2016 16:41:57 +0000 Subject: [PATCH 016/275] Fix for tableName in STI --- .../ORM/Mapping/ClassMetadataFactory.php | 15 +++++- lib/Doctrine/ORM/Query/SqlWalker.php | 48 +++++++++---------- .../Pagination/LimitSubqueryOutputWalker.php | 32 +++---------- 3 files changed, 42 insertions(+), 53 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index cd4df2398db..0e718b5a945 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -124,6 +124,10 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS /* @var $class ClassMetadata */ /* @var $parent ClassMetadata */ if ($parent) { + if ($parent->isInheritanceTypeSingleTable()) { + $class->setPrimaryTable($parent->table); + } + $class->setInheritanceType($parent->inheritanceType); $class->setDiscriminatorColumn($parent->discriminatorColumn); $class->setIdGeneratorType($parent->generatorType); @@ -253,7 +257,15 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS */ protected function completeRuntimeMetadata($class, $parent) { - if ( ! $parent || ! $parent->isMappedSuperclass || $class->isMappedSuperclass) { + if ( ! $parent) { + return; + } + + if ( ! $parent->isMappedSuperclass) { + return; + } + + if ($class->isMappedSuperclass) { return; } @@ -482,7 +494,6 @@ private function addInheritedRelations(ClassMetadata $subClass, ClassMetadata $p } } - //$subclassMapping = $mapping; if ( ! isset($mapping['inherited']) && ! $parentClass->isMappedSuperclass) { $mapping['inherited'] = $parentClass->name; } diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 03a9dcb2cc6..626c978da25 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -291,8 +291,9 @@ public function getSQLTableAlias($tableName, $dqlAlias = '') $tableName .= ($dqlAlias) ? '@[' . $dqlAlias . ']' : ''; if ( ! isset($this->tableAliasMap[$tableName])) { - $this->tableAliasMap[$tableName] = (preg_match('/[a-z]/i', $tableName[0]) ? strtolower($tableName[0]) : 't') - . $this->tableAliasCounter++ . '_'; + $char = preg_match('/[a-z]/i', $tableName[0]) ? strtolower($tableName[0]) : 't'; + + $this->tableAliasMap[$tableName] = $char . $this->tableAliasCounter++ . '_'; } return $this->tableAliasMap[$tableName]; @@ -457,7 +458,7 @@ private function _generateDiscriminatorColumnConditionSQL(array $dqlAliases) } $sqlTableAlias = ($this->useSqlTableAliases) - ? $this->getSQLTableAlias($class->getTableName(), $dqlAlias) . '.' + ? $this->getSQLTableAlias($class->discriminatorColumn['tableName'], $dqlAlias) . '.' : ''; $sqlParts[] = $sqlTableAlias . $class->discriminatorColumn['name'] . ' IN (' . implode(', ', $values) . ')'; @@ -503,6 +504,7 @@ private function generateFilterConditionSQL(ClassMetadata $targetEntity, $target } $filterClauses = []; + foreach ($this->em->getFilters()->getEnabledFilters() as $filter) { if ('' !== $filterExpr = $filter->addFilterConstraint($targetEntity, $targetTableAlias)) { $filterClauses[] = '(' . $filterExpr . ')'; @@ -661,8 +663,9 @@ public function walkPathExpression($pathExpr) // 1- the owning side: // Just use the foreign key, i.e. u.group_id $fieldName = $pathExpr->field; - $dqlAlias = $pathExpr->identificationVariable; - $class = $this->queryComponents[$dqlAlias]['metadata']; + $dqlAlias = $pathExpr->identificationVariable; + $class = $this->queryComponents[$dqlAlias]['metadata']; + $mapping = $class->associationMappings[$fieldName]; if (isset($class->associationMappings[$fieldName]['inherited'])) { $class = $this->em->getClassMetadata($class->associationMappings[$fieldName]['inherited']); @@ -670,20 +673,20 @@ public function walkPathExpression($pathExpr) $assoc = $class->associationMappings[$fieldName]; - if ( ! $assoc['isOwningSide']) { + if (! $assoc['isOwningSide']) { throw QueryException::associationPathInverseSideNotSupported($pathExpr); } // COMPOSITE KEYS NOT (YET?) SUPPORTED - if (count($assoc['sourceToTargetKeyColumns']) > 1) { + if (count($mapping['joinColumns']) > 1) { throw QueryException::associationPathCompositeKeyNotSupported(); } if ($this->useSqlTableAliases) { - $sql .= $this->getSQLTableAlias($class->getTableName(), $dqlAlias) . '.'; + $sql .= $this->getSQLTableAlias($mapping['joinColumns'][0]['tableName'], $dqlAlias) . '.'; } - $sql .= reset($assoc['targetToSourceKeyColumns']); + $sql .= $mapping['joinColumns'][0]['name']; break; default: @@ -731,7 +734,8 @@ public function walkSelectClause($selectClause) if ($class->isInheritanceTypeSingleTable() || $class->isInheritanceTypeJoined()) { // Add discriminator columns to SQL $rootClass = $this->em->getClassMetadata($class->rootEntityName); - $tblAlias = $this->getSQLTableAlias($rootClass->getTableName(), $dqlAlias); + $discrColumn = $rootClass->discriminatorColumn; + $tblAlias = $this->getSQLTableAlias($discrColumn['tableName'], $dqlAlias); $discrColumn = $rootClass->discriminatorColumn; $columnAlias = $this->getSQLColumnAlias($discrColumn['name']); @@ -754,15 +758,14 @@ public function walkSelectClause($selectClause) continue; } - $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); - $isIdentifier = (isset($assoc['id']) && $assoc['id'] === true); - $owningClass = (isset($assoc['inherited'])) ? $this->em->getClassMetadata($assoc['inherited']) : $class; - $sqlTableAlias = $this->getSQLTableAlias($owningClass->getTableName(), $dqlAlias); + $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); + $isIdentifier = (isset($assoc['id']) && $assoc['id'] === true); foreach ($assoc['joinColumns'] as $joinColumn) { - $columnName = $joinColumn['name']; - $columnAlias = $this->getSQLColumnAlias($columnName); - $columnType = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); + $sqlTableAlias = $this->getSQLTableAlias($joinColumn['tableName'], $dqlAlias); + $columnName = $joinColumn['name']; + $columnAlias = $this->getSQLColumnAlias($columnName); + $columnType = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); $quotedColumnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); $sqlSelectExpressions[] = $sqlTableAlias . '.' . $quotedColumnName . ' AS ' . $columnAlias; @@ -1375,13 +1378,9 @@ public function walkSelectExpression($selectExpression) } $columnAlias = $this->getSQLColumnAlias($mapping['columnName']); - $tableName = (isset($mapping['inherited'])) - ? $this->em->getClassMetadata($mapping['inherited'])->getTableName() - : $class->getTableName(); - $col = sprintf( '%s.%s', - $this->getSQLTableAlias($tableName, $dqlAlias), + $this->getSQLTableAlias($mapping['tableName'], $dqlAlias), $this->quoteStrategy->getColumnName($fieldName, $class, $this->platform) ); @@ -1402,8 +1401,7 @@ public function walkSelectExpression($selectExpression) // since it requires outer joining subtables. if ($class->isInheritanceTypeSingleTable() || ! $this->query->getHint(Query::HINT_FORCE_PARTIAL_LOAD)) { foreach ($class->subClasses as $subClassName) { - $subClass = $this->em->getClassMetadata($subClassName); - $sqlTableAlias = $this->getSQLTableAlias($subClass->getTableName(), $dqlAlias); + $subClass = $this->em->getClassMetadata($subClassName); foreach ($subClass->fieldMappings as $fieldName => $mapping) { if (isset($mapping['inherited']) || ($partialFieldSet && !in_array($fieldName, $partialFieldSet))) { @@ -1413,7 +1411,7 @@ public function walkSelectExpression($selectExpression) $columnAlias = $this->getSQLColumnAlias($mapping['columnName']); $col = sprintf( '%s.%s', - $sqlTableAlias, + $this->getSQLTableAlias($mapping['tableName'], $dqlAlias), $this->quoteStrategy->getColumnName($fieldName, $subClass, $this->platform) ); diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php index 05f06cbad57..4b864ac21b3 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php @@ -441,18 +441,12 @@ private function recreateInnerSql( */ private function generateSqlAliasReplacements() : array { - $aliasMap = $searchPatterns = $replacements = $metadataList = []; - - // Generate DQL alias -> SQL table alias mapping - foreach (\array_keys($this->rsm->aliasMap) as $dqlAlias) { - $metadataList[$dqlAlias] = $class = $this->queryComponents[$dqlAlias]['metadata']; - $aliasMap[$dqlAlias] = $this->getSQLTableAlias($class->getTableName(), $dqlAlias); - } + $searchPatterns = $replacements = []; // Generate search patterns for each field's path expression in the order by clause foreach ($this->rsm->fieldMappings as $fieldAlias => $fieldName) { $dqlAliasForFieldAlias = $this->rsm->columnOwnerMap[$fieldAlias]; - $class = $metadataList[$dqlAliasForFieldAlias]; + $class = $this->queryComponents[$dqlAliasForFieldAlias]['metadata']; // If the field is from a joined child table, we won't be ordering on it. if ( ! isset($class->fieldMappings[$fieldName])) { @@ -461,26 +455,12 @@ private function generateSqlAliasReplacements() : array $fieldMapping = $class->fieldMappings[$fieldName]; - // Get the proper column name as will appear in the select list - $columnName = $this->quoteStrategy->getColumnName( - $fieldName, - $metadataList[$dqlAliasForFieldAlias], - $this->em->getConnection()->getDatabasePlatform() - ); - - // Get the SQL table alias for the entity and field - $sqlTableAliasForFieldAlias = $aliasMap[$dqlAliasForFieldAlias]; - - if ($fieldMapping['declaringClass']->name !== $class->name) { - // Field was declared in a parent class, so we need to get the proper SQL table alias - // for the joined parent table. - if ( ! $fieldMapping['declaringClass']->isMappedSuperclass) { - $sqlTableAliasForFieldAlias = $this->getSQLTableAlias($fieldMapping['declaringClass']->getTableName(), $dqlAliasForFieldAlias); - } - } + // Get the SQL table alias for the entity and field and the column name as will appear in the select list + $tableAlias = $this->getSQLTableAlias($fieldMapping['tableName'], $dqlAliasForFieldAlias); + $columnName = $this->quoteStrategy->getColumnName($fieldName, $class, $this->em->getConnection()->getDatabasePlatform()); // Compose search and replace patterns - $searchPatterns[] = \sprintf(self::ORDER_BY_PATH_EXPRESSION, $sqlTableAliasForFieldAlias, $columnName); + $searchPatterns[] = \sprintf(self::ORDER_BY_PATH_EXPRESSION, $tableAlias, $columnName); $replacements[] = $fieldAlias; } From 9620b693b61807c4176e89c222021c62a42dfb41 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 16 May 2016 18:44:15 +0000 Subject: [PATCH 017/275] Upgrade file --- UPGRADE.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/UPGRADE.md b/UPGRADE.md index 3132aef9805..72614289742 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -1,3 +1,61 @@ + +# Upgrade to 3.0 + +## BC Break: Removed ``ClassMetadata::getTypeOfColumn()`` + +Better alternative is to use ``PersisterHelper::getTypeOfColumn()`` + +## BC Break: Removed ``ClassMetadata::$fieldMappings[$fieldName]['requireSQLConversion']`` + +ORM Type SQL conversion is now always being applied, minimizing the risks of erorr prone code in ORM internals + +## BC Break: Removed ``ClassMetadata::$columnNames`` + +If your code relies on this property, you should search/replace from this: + + $metadata->columnNames[$fieldName] + +To this: + + $metadata->fieldMappings[$fieldName]['columnName'] + +## BC Break: Renamed ``ClassMetadata::setIdentifierValues()`` to ``ClassMetadata::assignIdentifier()`` + +Provides a more meaningful name to method. + +## BC Break: Removed ``ClassMetadata::$namespace`` + +The namespace property in ClassMetadata was only used when using association +classes in the same namespace and it was used to speedup ClassMetadata +creation purposes. Namespace could be easily inferred by asking ``\ReflectionClass`` +which was already stored internally. + +## BC Break: Removed ``Doctrine\ORM\Mapping\ClassMetadataInfo`` + +There was no reason to keep a blank class. All references are now pointing +to ``Doctrine\ORM\Mapping\ClassMetadata``. + +## BC Break: Annotations classes namespace change + +All Annotations classes got moved from ``Doctrine\ORM\Mapping`` into a more +pertinent namespace ``Doctrine\ORM\Annotation``. This change was done to add +room for Metadata namespace refactoring. + +## Minor BC break: Mappings now store DBAL\Type instances instead of strings + +This lead to manual ``ResultSetMapping`` building instances to also hold Types in meta results. +Example: + + $rsm->addMetaResult('e ', 'e_discr', 'discr', false, Type::getType('string')); + +## Enhancement: Mappings now store their declaring ClassMetadata + +Every field, association or embedded now contains a pointer to its declaring ClassMetadata. + +## Enhancement: Mappings now store their corresponding table name + +Every field, association join column or inline embedded field/association holds a reference to its owning table name. + # Upgrade to 2.6 ## Minor BC BREAK: `Doctrine\ORM\Tools\Console\ConsoleRunner` is now final From ac0b8ee16e63b8ef425dd41b5bfddb44d0f76a95 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 16 May 2016 19:03:22 +0000 Subject: [PATCH 018/275] Fixed unit test --- tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php b/tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php index c36dce598ca..56c3ffaa121 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php @@ -3,7 +3,7 @@ namespace Doctrine\Tests\ORM\Functional; use Doctrine\Common\Cache\ArrayCache; -use Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Type as DBALType; use Doctrine\ORM\Query; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\Tests\Models\CMS\CmsArticle; @@ -146,7 +146,7 @@ public function testNativeQueryResultCaching() $cache = new ArrayCache(); $rsm = new ResultSetMapping(); - $rsm->addScalarResult('id', 'u', Type::getType('integer')); + $rsm->addScalarResult('id', 'u', DBALType::getType('integer')); $query = $this->_em->createNativeQuery('select u.id FROM cms_users u WHERE u.id = ?', $rsm); From b0ca724e8999f2c10f443b3a33b806e0da7a656a Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 16 May 2016 19:08:23 +0000 Subject: [PATCH 019/275] Fixed unit test --- tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php index 6a4dee110a6..a68e4006c46 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php @@ -186,7 +186,7 @@ public function testLoadMetadataFromDatabaseDetail() self::assertArrayHasKey('id', $metadata->fieldMappings); self::assertEquals('id', $metadata->fieldMappings['id']['fieldName']); self::assertEquals('id', strtolower($metadata->fieldMappings['id']['columnName'])); - self::assertEquals('integer', (string) $metadata->fieldMappings['id']['type']); + self::assertEquals('integer', $metadata->fieldMappings['id']['type']->getName()); // FIXME: Condition here is fugly. // NOTE: PostgreSQL and SQL SERVER do not support UNSIGNED integer From b836de866ae148226f016056d26e16dd08152440 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Tue, 17 May 2016 22:25:37 +0000 Subject: [PATCH 020/275] Initial code for FieldMetadata --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 48 +++ lib/Doctrine/ORM/Mapping/FieldMetadata.php | 305 ++++++++++++++++++ lib/Doctrine/ORM/Mapping/PropertyMetadata.php | 56 ++++ .../Entity/BasicEntityPersister.php | 5 +- lib/Doctrine/ORM/Query/SqlWalker.php | 6 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 15 +- 6 files changed, 422 insertions(+), 13 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/FieldMetadata.php create mode 100644 lib/Doctrine/ORM/Mapping/PropertyMetadata.php diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index e70cc16988a..7333e5b2e7a 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -345,6 +345,11 @@ class ClassMetadata implements ClassMetadataInterface */ public $generatorType = self::GENERATOR_TYPE_NONE; + /** + * @var array + */ + public $properties = []; + /** * READ-ONLY: The field mappings of the class. * Keys are field names and values are mapping definitions. @@ -2315,6 +2320,49 @@ private function isInheritanceType($type) || $type == self::INHERITANCE_TYPE_TABLE_PER_CLASS; } + /** + * @param string $fieldName + * @param Type $type + * @param array $mapping + * + * @throws MappingException + */ + public function addProperty($fieldName, Type $type, array $mapping = []) + { + $property = new FieldMetadata($this, $fieldName, $type); + + assert(! isset($this->properties[$fieldName]), MappingException::duplicateProperty($property)); + + $property->setTableName(! $this->isMappedSuperclass ? $this->getTableName() : null); + $property->setColumnName($mapping['columnName'] ?? $this->namingStrategy->propertyToColumnName($fieldName, $this->name)); + $property->setPrimaryKey(isset($mapping['id']) && $mapping['id'] === true); + + // Check for already declared column + if (isset($this->fieldNames[$property->getColumnName()]) || + ($this->discriminatorColumn != null && $this->discriminatorColumn['name'] == $property->getColumnName())) { + throw MappingException::duplicateColumnName($this->name, $property->getColumnName()); + } + + $this->fieldNames[$property->getColumnName()] = $fieldName; + + // Complete id mapping + if (isset($mapping['id']) && $mapping['id'] === true) { + assert($this->versionField !== $fieldName, MappingException::cannotVersionIdField($this->name, $fieldName)); + assert(! $type->canRequireSQLConversion(), MappingException::sqlConversionNotAllowedForPrimaryKeyProperties($property)); + + if ( ! in_array($fieldName, $this->identifier)) { + $this->identifier[] = $fieldName; + } + + // Check for composite key + if ( ! $this->isIdentifierComposite && count($this->identifier) > 1) { + $this->isIdentifierComposite = true; + } + } + + $this->properties[$fieldName] = $property; + } + /** * Adds a mapped field to the class. * diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php new file mode 100644 index 00000000000..d845be0ceed --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -0,0 +1,305 @@ +getReflectionClass()->getProperty($fieldName); + + $reflection->setAccessible(true); + + $this->declaringClass = $declaringClass; + $this->reflection = $reflection; + $this->fieldName = $fieldName; + $this->type = $type; + } + + /** + * {@inheritdoc} + */ + public function getDeclaringClass() + { + return $this->declaringClass; + } + + /** + * {@inheritdoc} + */ + public function setValue($object, $value) + { + $this->reflection->setValue($object, $value); + } + + /** + * {@inheritdoc} + */ + public function getValue($object) + { + return $this->reflection->getValue($object); + } + + /** + * {@inheritdoc} + */ + public function getFieldName() + { + return $this->fieldName; + } + + /** + * {@inheritdoc} + */ + public function getType() + { + return $this->type; + } + + /** + * {@inheritdoc} + */ + public function getTypeName() + { + return $this->type->getName(); + } + + /** + * {@inheritdoc} + */ + public function getTableName() + { + return $this->tableName; + } + + /** + * {@inheritdoc} + */ + public function setTableName($tableName) + { + $this->tableName = $tableName; + } + + /** + * {@inheritdoc} + */ + public function getColumnName() + { + return $this->columnName; + } + + /** + * {@inheritdoc} + */ + public function setColumnName($columnName) + { + $this->columnName = $columnName; + } + + /** + * {@inheritdoc} + */ + public function getColumnDefinition() + { + return $this->columnDefinition; + } + + /** + * {@inheritdoc} + */ + public function setColumnDefinition($columnDefinition) + { + $this->columnDefinition = $columnDefinition; + } + + /** + * @return integer + */ + public function getLength() + { + return $this->length; + } + + /** + * @param integer $length + */ + public function setLength($length) + { + $this->length = $length; + } + + /** + * @return integer + */ + public function getScale() + { + return $this->scale; + } + + /** + * @param integer $scale + */ + public function setScale($scale) + { + $this->scale = $scale; + } + + /** + * @return integer + */ + public function getPrecision() + { + return $this->precision; + } + + /** + * @param integer $precision + */ + public function setPrecision($precision) + { + $this->precision = $precision; + } + + /** + * @return array + */ + public function getOptions() + { + return $this->options; + } + + /** + * @param array $options + */ + public function setOptions(array $options) + { + $this->options = $options; + } + + /** + * {@inheritdoc} + */ + public function setPrimaryKey($isPrimaryKey) + { + $this->isPrimaryKey = $isPrimaryKey; + } + + /** + * {@inheritdoc} + */ + public function isPrimaryKey() + { + return $this->isPrimaryKey; + } + + /** + * {@inheritdoc} + */ + public function setNullable($isNullable) + { + $this->isNullable = $isNullable; + } + + /** + * {@inheritdoc} + */ + public function isNullable() + { + return $this->isNullable; + } + + /** + * {@inheritdoc} + */ + public function setUnique($isUnique) + { + $this->isUnique = $isUnique; + } + + /** + * {@inheritdoc} + */ + public function isUnique() + { + return $this->isUnique; + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/PropertyMetadata.php b/lib/Doctrine/ORM/Mapping/PropertyMetadata.php new file mode 100644 index 00000000000..4b07e8d986b --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/PropertyMetadata.php @@ -0,0 +1,56 @@ +quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); - $this->quotedColumns[$sourceColumn] = $quotedColumn; - $this->columnTypes[$sourceColumn] = PersisterHelper::getTypeOfColumn($targetColumn, $targetClass, $this->em); + $this->quotedColumns[$sourceColumn] = $quotedColumn; + $this->columnTypes[$sourceColumn] = PersisterHelper::getTypeOfColumn($targetColumn, $targetClass, $this->em); + $result[$owningTable][$sourceColumn] = $newValId ? $newValId[$targetClass->getFieldForColumn($targetColumn)] : null; diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 626c978da25..c04e0031a63 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -1279,13 +1279,9 @@ public function walkSelectExpression($selectExpression) $fieldMapping = $class->fieldMappings[$fieldName]; $columnAlias = $this->getSQLColumnAlias($fieldMapping['columnName']); $resultAlias = $selectExpression->fieldIdentificationVariable ?: $fieldName; - $tableName = ($class->isInheritanceTypeJoined()) - ? $this->em->getUnitOfWork()->getEntityPersister($class->name)->getOwningTable($fieldName) - : $class->getTableName(); - $col = sprintf( '%s.%s', - $this->getSQLTableAlias($tableName, $dqlAlias), + $this->getSQLTableAlias($fieldMapping['tableName'], $dqlAlias), $this->quoteStrategy->getColumnName($fieldName, $class, $this->platform) ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 33d47e56e05..40d4d49ebd9 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -67,11 +67,12 @@ protected function createClassMetadataFactory(EntityManager $em = null) } /** - * @depends testLoadMapping * @param ClassMetadata $class */ - public function testEntityTableNameAndInheritance($class) + public function testEntityTableNameAndInheritance() { + $class = $this->createClassMetadata(User::class); + self::assertEquals('cms_users', $class->getTableName()); self::assertEquals(ClassMetadata::INHERITANCE_TYPE_NONE, $class->inheritanceType); @@ -276,11 +277,13 @@ public function testBooleanValuesForOptionIsSetCorrectly() { $class = $this->createClassMetadata(User::class); - $this->assertInternalType('bool', $class->fieldMappings['id']['options']['unsigned']); - $this->assertFalse($class->fieldMappings['id']['options']['unsigned']); + $idOptions = $class->getProperty('id')->getOptions(); + $nameOptions = $class->getProperty('name')->getOptions(); - $this->assertInternalType('bool', $class->fieldMappings['name']['options']['fixed']); - $this->assertFalse($class->fieldMappings['name']['options']['fixed']); + self::assertInternalType('bool', $idOptions['unsigned']); + self::assertFalse($idOptions['unsigned']); + self::assertInternalType('bool', $nameOptions['fixed']); + self::assertFalse($nameOptions['fixed']); return $class; } From de40579c702bf49a0613d9fc14aca7adca590212 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Tue, 17 May 2016 23:10:01 +0000 Subject: [PATCH 021/275] Commented embeddeds support until fields are complete. Embeddeds will be brought back with proper implementation --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 28 ++++----- .../ORM/Mapping/ClassMetadataFactory.php | 16 ++--- .../Entity/BasicEntityPersister.php | 8 +-- .../Entity/JoinedSubclassPersister.php | 9 ++- lib/Doctrine/ORM/Tools/EntityGenerator.php | 24 ++++---- phpunit.xml.dist | 1 + .../ORM/Functional/Ticket/DDC3582Test.php | 3 + .../Tests/ORM/Functional/ValueObjectsTest.php | 1 + .../ORM/Mapping/ClassMetadataBuilderTest.php | 18 ++++++ .../ORM/Mapping/ClassMetadataFactoryTest.php | 2 + .../Tests/ORM/Mapping/ClassMetadataTest.php | 3 + .../ORM/Mapping/XmlMappingDriverTest.php | 12 +++- .../Tests/ORM/Tools/EntityGeneratorTest.php | 59 +++++++++++-------- 13 files changed, 115 insertions(+), 69 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 7333e5b2e7a..14676a647a3 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -281,7 +281,7 @@ class ClassMetadata implements ClassMetadataInterface * * @var array */ - public $embeddedClasses = []; + //public $embeddedClasses = []; /** * READ-ONLY: The named queries allowed to be called directly from Repository. @@ -801,7 +801,7 @@ public function __sleep() 'associationMappings', 'fieldMappings', 'fieldNames', - 'embeddedClasses', + //'embeddedClasses', 'identifier', 'isIdentifierComposite', // TODO: REMOVE 'name', @@ -912,7 +912,7 @@ public function wakeupReflection($reflService) $parentReflFields = []; - foreach ($this->embeddedClasses as $property => $embeddedClass) { + /*foreach ($this->embeddedClasses as $property => $embeddedClass) { if (isset($embeddedClass['declaredField'])) { $parentReflFields[$property] = new ReflectionEmbeddedProperty( $parentReflFields[$embeddedClass['declaredField']], @@ -933,17 +933,17 @@ public function wakeupReflection($reflService) $parentReflFields[$property] = $fieldRefl; $this->reflFields[$property] = $fieldRefl; - } + }*/ foreach ($this->fieldMappings as $field => $mapping) { - if (isset($mapping['declaredField']) && isset($parentReflFields[$mapping['declaredField']])) { + /*if (isset($mapping['declaredField']) && isset($parentReflFields[$mapping['declaredField']])) { $this->reflFields[$field] = new ReflectionEmbeddedProperty( $parentReflFields[$mapping['declaredField']], $reflService->getAccessibleProperty($mapping['originalClass'], $mapping['originalField']), $mapping['originalClass'] ); continue; - } + }*/ $this->reflFields[$field] = $reflService->getAccessibleProperty($mapping['declaringClass']->name, $field); } @@ -2241,7 +2241,7 @@ public function isInheritedAssociation($fieldName) */ public function isInheritedEmbeddedClass($fieldName) { - return isset($this->embeddedClasses[$fieldName]['inherited']); + //return isset($this->embeddedClasses[$fieldName]['inherited']); } /** @@ -3316,7 +3316,7 @@ public function getMetadataValue($name) */ public function mapEmbedded(array $mapping) { - $this->assertFieldNotMapped($mapping['fieldName']); + /*$this->assertFieldNotMapped($mapping['fieldName']); $this->embeddedClasses[$mapping['fieldName']] = [ 'class' => $this->fullyQualifiedClassName($mapping['class']), @@ -3324,7 +3324,7 @@ public function mapEmbedded(array $mapping) 'declaredField' => isset($mapping['declaredField']) ? $mapping['declaredField'] : null, 'originalField' => isset($mapping['originalField']) ? $mapping['originalField'] : null, 'declaringClass' => $this, - ]; + ];*/ } /** @@ -3335,7 +3335,7 @@ public function mapEmbedded(array $mapping) */ public function inlineEmbeddable($property, ClassMetadata $embeddable) { - foreach ($embeddable->fieldMappings as $fieldName => $fieldMapping) { + /*foreach ($embeddable->fieldMappings as $fieldName => $fieldMapping) { $fieldMapping['fieldName'] = $property . "." . $fieldName; $fieldMapping['originalClass'] = $fieldMapping['originalClass'] ?? $embeddable->name; $fieldMapping['originalField'] = $fieldMapping['originalField'] ?? $fieldName; @@ -3355,7 +3355,7 @@ public function inlineEmbeddable($property, ClassMetadata $embeddable) } $this->mapField($fieldMapping); - } + }*/ } /** @@ -3364,9 +3364,9 @@ public function inlineEmbeddable($property, ClassMetadata $embeddable) */ private function assertFieldNotMapped($fieldName) { - if (isset($this->fieldMappings[$fieldName]) || - isset($this->associationMappings[$fieldName]) || - isset($this->embeddedClasses[$fieldName])) { + if (isset($this->fieldMappings[$fieldName]) + || isset($this->associationMappings[$fieldName]) + /*|| isset($this->embeddedClasses[$fieldName])*/) { throw MappingException::duplicateFieldMapping($this->name, $fieldName); } } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 0e718b5a945..d4333d21216 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -166,7 +166,7 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS $this->completeIdGeneratorMapping($class); } - if ( ! $class->isMappedSuperclass) { + /*if ( ! $class->isMappedSuperclass) { foreach ($class->embeddedClasses as $property => $embeddableClass) { if (isset($embeddableClass['inherited'])) { continue; @@ -198,7 +198,7 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS unset($this->embeddablesActiveNesting[$class->name]); } - } + }*/ if ($parent) { if ($parent->isInheritanceTypeSingleTable()) { @@ -286,11 +286,11 @@ protected function completeRuntimeMetadata($class, $parent) } // Resolve embedded table names - foreach ($class->embeddedClasses as &$mapping) { + /*foreach ($class->embeddedClasses as &$mapping) { if ( ! isset($mapping['tableName'])) { $mapping['tableName'] = $mapping['tableName'] ?? $tableName; } - } + }*/ } /** @@ -512,7 +512,7 @@ private function addInheritedRelations(ClassMetadata $subClass, ClassMetadata $p */ private function addInheritedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata $parentClass) { - foreach ($parentClass->embeddedClasses as $field => $embeddedClass) { + /*foreach ($parentClass->embeddedClasses as $field => $embeddedClass) { if ( ! isset($embeddedClass['tableName'])) { $embeddedClass['tableName'] = ! $parentClass->isMappedSuperclass ? $parentClass->getTableName() : null; } @@ -522,7 +522,7 @@ private function addInheritedEmbeddedClasses(ClassMetadata $subClass, ClassMetad } $subClass->embeddedClasses[$field] = $embeddedClass; - } + }*/ } /** @@ -534,7 +534,7 @@ private function addInheritedEmbeddedClasses(ClassMetadata $subClass, ClassMetad */ private function addNestedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata $parentClass, $prefix) { - foreach ($subClass->embeddedClasses as $property => $embeddableClass) { + /*foreach ($subClass->embeddedClasses as $property => $embeddableClass) { if (isset($embeddableClass['inherited'])) { continue; } @@ -552,7 +552,7 @@ private function addNestedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata 'originalField' => $embeddableClass['originalField'] ?: $property, ] ); - } + }*/ } /** diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 0c29f635f36..18a778777b5 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -631,9 +631,9 @@ protected function prepareUpdateData($entity) continue; } - if (isset($this->class->embeddedClasses[$field])) { + /*if (isset($this->class->embeddedClasses[$field])) { continue; - } + }*/ $newVal = $change[1]; @@ -1454,9 +1454,9 @@ protected function getInsertColumnList() continue; } - if (isset($this->class->embeddedClasses[$name])) { + /*if (isset($this->class->embeddedClasses[$name])) { continue; - } + }*/ if (isset($this->class->associationMappings[$name])) { $assoc = $this->class->associationMappings[$name]; diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index 6f347b07275..0e2f13c60c8 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -520,11 +520,10 @@ protected function getInsertColumnList() : []; foreach ($this->class->reflFields as $name => $field) { - if (isset($this->class->fieldMappings[$name]['inherited']) - && ! isset($this->class->fieldMappings[$name]['id']) - || isset($this->class->associationMappings[$name]['inherited']) - || ($this->class->isVersioned && $this->class->versionField == $name) - || isset($this->class->embeddedClasses[$name])) { + if ((isset($this->class->fieldMappings[$name]['inherited']) && ! isset($this->class->fieldMappings[$name]['id'])) + || isset($this->class->associationMappings[$name]['inherited']) + || ($this->class->isVersioned && $this->class->versionField == $name) + /*|| isset($this->class->embeddedClasses[$name])*/) { continue; } diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 84c6b8b7707..9cd55152396 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -727,7 +727,7 @@ private function generateEmbeddableConstructor(ClassMetadata $metadata) $fieldMappings = array_merge($requiredFields, $optionalFields); - foreach ($metadata->embeddedClasses as $fieldName => $embeddedClass) { + /*foreach ($metadata->embeddedClasses as $fieldName => $embeddedClass) { $paramType = '\\' . ltrim($embeddedClass['class'], '\\'); $paramVariable = '$' . $fieldName; @@ -735,12 +735,12 @@ private function generateEmbeddableConstructor(ClassMetadata $metadata) $paramVariables[] = $paramVariable; $params[] = $paramType . ' ' . $paramVariable; $fields[] = '$this->' . $fieldName . ' = ' . $paramVariable . ';'; - } + }*/ foreach ($fieldMappings as $fieldMapping) { - if (isset($fieldMapping['declaredField']) && isset($metadata->embeddedClasses[$fieldMapping['declaredField']])) { + /*if (isset($fieldMapping['declaredField']) && isset($metadata->embeddedClasses[$fieldMapping['declaredField']])) { continue; - } + }*/ $fieldType = $fieldMapping['type']->getName(); $mappedType = $this->getType($fieldType); @@ -1171,9 +1171,9 @@ protected function generateEntityStubMethods(ClassMetadata $metadata) $methods = []; foreach ($metadata->fieldMappings as $fieldMapping) { - if (isset($fieldMapping['declaredField']) && isset($metadata->embeddedClasses[$fieldMapping['declaredField']])) { + /*if (isset($fieldMapping['declaredField']) && isset($metadata->embeddedClasses[$fieldMapping['declaredField']])) { continue; - } + }*/ $fieldType = $fieldMapping['type']->getName(); $nullableField = $this->nullableFieldExpression($fieldMapping); @@ -1189,7 +1189,7 @@ protected function generateEntityStubMethods(ClassMetadata $metadata) } } - foreach ($metadata->embeddedClasses as $fieldName => $embeddedClass) { + /*foreach ($metadata->embeddedClasses as $fieldName => $embeddedClass) { if (isset($embeddedClass['declaredField'])) { continue; } @@ -1203,7 +1203,7 @@ protected function generateEntityStubMethods(ClassMetadata $metadata) if ($code = $this->generateEntityStubMethod($metadata, 'get', $fieldName, $embeddedClass['class'])) { $methods[] = $code; } - } + }*/ foreach ($metadata->associationMappings as $associationMapping) { if ($associationMapping['type'] & ClassMetadata::TO_ONE) { @@ -1312,11 +1312,11 @@ protected function generateEntityFieldMappingProperties(ClassMetadata $metadata) foreach ($metadata->fieldMappings as $fieldMapping) { if ($this->hasProperty($fieldMapping['fieldName'], $metadata) || - $metadata->isInheritedField($fieldMapping['fieldName']) || + $metadata->isInheritedField($fieldMapping['fieldName']) /*|| ( isset($fieldMapping['declaredField']) && isset($metadata->embeddedClasses[$fieldMapping['declaredField']]) - ) + )*/ ) { continue; } @@ -1338,14 +1338,14 @@ protected function generateEntityEmbeddedProperties(ClassMetadata $metadata) { $lines = []; - foreach ($metadata->embeddedClasses as $fieldName => $embeddedClass) { + /*foreach ($metadata->embeddedClasses as $fieldName => $embeddedClass) { if (isset($embeddedClass['declaredField']) || $this->hasProperty($fieldName, $metadata)) { continue; } $lines[] = $this->generateEmbeddedPropertyDocBlock($embeddedClass); $lines[] = $this->spaces . $this->fieldVisibility . ' $' . $fieldName . ";\n"; - } + }*/ return implode("\n", $lines); } diff --git a/phpunit.xml.dist b/phpunit.xml.dist index e6fc543159c..1d9d2ce162e 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -31,6 +31,7 @@ + embedded performance locking_functional diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3582Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3582Test.php index 74e09eb5a2a..e825e4d8d20 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3582Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3582Test.php @@ -2,6 +2,9 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +/** + * @group embedded + */ class DDC3582Test extends \Doctrine\Tests\OrmFunctionalTestCase { function testNestedEmbeddablesAreHydratedWithProperClass() diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueObjectsTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueObjectsTest.php index 5055fb12950..75313837e1f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueObjectsTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueObjectsTest.php @@ -8,6 +8,7 @@ use Doctrine\Tests\OrmFunctionalTestCase; /** + * @group embedded * @group DDC-93 */ class ValueObjectsTest extends OrmFunctionalTestCase diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php index 828f423a6c5..326054664af 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php @@ -34,6 +34,9 @@ public function setUp() $this->builder = new ClassMetadataBuilder($this->cm); } + /** + * @group embedded + */ public function testSetMappedSuperClass() { self::assertIsFluent($this->builder->setMappedSuperClass()); @@ -41,6 +44,9 @@ public function testSetMappedSuperClass() self::assertFalse($this->cm->isEmbeddedClass); } + /** + * @group embedded + */ public function testSetEmbedable() { self::assertIsFluent($this->builder->setEmbeddable()); @@ -48,6 +54,9 @@ public function testSetEmbedable() self::assertFalse($this->cm->isMappedSuperclass); } + /** + * @group embedded + */ public function testAddEmbeddedWithOnlyRequiredParams() { self::assertIsFluent($this->builder->addEmbedded('name', Name::class)); @@ -66,6 +75,9 @@ public function testAddEmbeddedWithOnlyRequiredParams() ); } + /** + * @group embedded + */ public function testAddEmbeddedWithPrefix() { self::assertIsFluent($this->builder->addEmbedded('name', Name::class, 'nm_')); @@ -84,6 +96,9 @@ public function testAddEmbeddedWithPrefix() ); } + /** + * @group embedded + */ public function testCreateEmbeddedWithoutExtraParams() { $embeddedBuilder = $this->builder->createEmbedded('name', Name::class); @@ -104,6 +119,9 @@ public function testCreateEmbeddedWithoutExtraParams() ); } + /** + * @group embedded + */ public function testCreateEmbeddedWithColumnPrefix() { $embeddedBuilder = $this->builder->createEmbedded('name', Name::class); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 0eef33d4622..50d846ee9ba 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -408,6 +408,7 @@ public function testAcceptsEntityManagerInterfaceInstances() } /** + * @group embedded * @group DDC-3305 */ public function testRejectsEmbeddableWithoutValidClassName() @@ -433,6 +434,7 @@ public function testRejectsEmbeddableWithoutValidClassName() } /** + * @group embedded * @group DDC-4006 */ public function testInheritsIdGeneratorMappingFromEmbeddable() diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 093b8e6a54a..3423f9ea792 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -1248,6 +1248,9 @@ public function testCanInstantiateInternalPhpClassSubclassFromUnserializedMetada self::assertInstanceOf(MyArrayObjectEntity::class, $classMetadata->newInstance()); } + /** + * @group embedded + */ public function testWakeupReflectionWithEmbeddableAndStaticReflectionService() { $classMetadata = new ClassMetadata(TestEntity1::class); diff --git a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php index e67c9d6ccad..1a5b241ba9b 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php @@ -69,6 +69,9 @@ public function testIdentifierWithAssociationKey() self::assertTrue($class->associationMappings['article']['id']); } + /** + * @group embedded + */ public function testEmbeddableMapping() { $class = $this->createClassMetadata(Name::class); @@ -77,9 +80,10 @@ public function testEmbeddableMapping() } /** + * @group embedded * @group DDC-3293 * @group DDC-3477 - * @group 1238 + * @group DDC-1238 */ public function testEmbeddedMappingsWithUseColumnPrefix() { @@ -97,9 +101,10 @@ public function testEmbeddedMappingsWithUseColumnPrefix() } /** + * @group embedded * @group DDC-3293 * @group DDC-3477 - * @group 1238 + * @group DDC-1238 */ public function testEmbeddedMappingsWithFalseUseColumnPrefix() { @@ -115,6 +120,9 @@ public function testEmbeddedMappingsWithFalseUseColumnPrefix() ); } + /** + * @group embedded + */ public function testEmbeddedMapping() { $class = $this->createClassMetadata(Person::class); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index a24cd52ac44..852f6b88bc5 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -347,6 +347,7 @@ public function newInstance(ClassMetadata $metadata) } /** + * @group embedded * @group GH-6314 */ public function testEmbeddedEntityWithNamedColumnPrefix() @@ -364,6 +365,7 @@ public function testEmbeddedEntityWithNamedColumnPrefix() } /** + * @group embedded * @group GH-6314 */ public function testEmbeddedEntityWithoutColumnPrefix() @@ -379,6 +381,9 @@ public function testEmbeddedEntityWithoutColumnPrefix() self::assertContains($needle, $docComment); } + /** + * @group embedded + */ public function testGeneratedEntityClass() { $testMetadata = $this->generateTestEmbeddableFixture(); @@ -441,6 +446,9 @@ public function testGeneratedEntityClass() self::assertEquals($isbnMetadata->name, $reflParameters[0]->getClass()->name); } + /** + * @group embedded + */ public function testEntityUpdatingWorks() { $metadata = $this->generateBookEntityFixture(['isbn' => $this->generateIsbnEmbeddableFixture()]); @@ -490,6 +498,7 @@ public function testEntityUpdatingWorks() } /** + * @group embedded * @group DDC-3152 */ public function testDoesNotRegenerateExistingMethodsWithDifferentCase() @@ -539,10 +548,10 @@ public function testMethodDocBlockShouldStartWithBackSlash() self::assertPhpDocReturnType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor', new \ReflectionMethod($book, 'getAuthor')); self::assertPhpDocParamType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor', new \ReflectionMethod($book, 'setAuthor')); - $expectedClassName = '\\' . $embeddedMetadata->name; - self::assertPhpDocVarType($expectedClassName, new \ReflectionProperty($book, 'isbn')); - self::assertPhpDocReturnType($expectedClassName, new \ReflectionMethod($book, 'getIsbn')); - self::assertPhpDocParamType($expectedClassName, new \ReflectionMethod($book, 'setIsbn')); +// $expectedClassName = '\\' . $embeddedMetadata->name; +// self::assertPhpDocVarType($expectedClassName, new \ReflectionProperty($book, 'isbn')); +// self::assertPhpDocReturnType($expectedClassName, new \ReflectionMethod($book, 'getIsbn')); +// self::assertPhpDocParamType($expectedClassName, new \ReflectionMethod($book, 'setIsbn')); } public function testEntityExtendsStdClass() @@ -590,20 +599,20 @@ public function testLoadMetadata() self::assertEquals($cm->identifier, $metadata->identifier); self::assertEquals($cm->idGenerator, $metadata->idGenerator); self::assertEquals($cm->customRepositoryClassName, $metadata->customRepositoryClassName); - self::assertEquals($cm->embeddedClasses, $metadata->embeddedClasses); - self::assertEquals($cm->isEmbeddedClass, $metadata->isEmbeddedClass); +// self::assertEquals($cm->embeddedClasses, $metadata->embeddedClasses); +// self::assertEquals($cm->isEmbeddedClass, $metadata->isEmbeddedClass); self::assertEquals(ClassMetadata::FETCH_EXTRA_LAZY, $cm->associationMappings['comments']['fetch']); - $isbn = $this->newInstance($embeddedMetadata); - - $cm = new ClassMetadata($embeddedMetadata->name); - $cm->initializeReflection($reflectionService); - - $driver->loadMetadataForClass($cm->name, $cm); - - self::assertEquals($cm->embeddedClasses, $embeddedMetadata->embeddedClasses); - self::assertEquals($cm->isEmbeddedClass, $embeddedMetadata->isEmbeddedClass); +// $isbn = $this->newInstance($embeddedMetadata); +// +// $cm = new ClassMetadata($embeddedMetadata->name); +// $cm->initializeReflection($reflectionService); +// +// $driver->loadMetadataForClass($cm->name, $cm); +// +// self::assertEquals($cm->embeddedClasses, $embeddedMetadata->embeddedClasses); +// self::assertEquals($cm->isEmbeddedClass, $embeddedMetadata->isEmbeddedClass); } public function testLoadPrefixedMetadata() @@ -630,15 +639,15 @@ public function testLoadPrefixedMetadata() self::assertEquals($cm->idGenerator, $metadata->idGenerator); self::assertEquals($cm->customRepositoryClassName, $metadata->customRepositoryClassName); - $isbn = $this->newInstance($embeddedMetadata); - - $cm = new ClassMetadata($embeddedMetadata->name); - $cm->initializeReflection($reflectionService); - - $driver->loadMetadataForClass($cm->name, $cm); - - self::assertEquals($cm->embeddedClasses, $embeddedMetadata->embeddedClasses); - self::assertEquals($cm->isEmbeddedClass, $embeddedMetadata->isEmbeddedClass); +// $isbn = $this->newInstance($embeddedMetadata); +// +// $cm = new ClassMetadata($embeddedMetadata->name); +// $cm->initializeReflection($reflectionService); +// +// $driver->loadMetadataForClass($cm->name, $cm); +// +// self::assertEquals($cm->embeddedClasses, $embeddedMetadata->embeddedClasses); +// self::assertEquals($cm->isEmbeddedClass, $embeddedMetadata->isEmbeddedClass); } /** @@ -1005,6 +1014,7 @@ public function testMethodsAndPropertiesAreNotDuplicatedInChildClasses() } /** + * @group embedded * @group DDC-3304 */ public function testGeneratedMutableEmbeddablesClass() @@ -1044,6 +1054,7 @@ public function testGeneratedMutableEmbeddablesClass() } /** + * @group embedded * @group DDC-3304 */ public function testGeneratedImmutableEmbeddablesClass() From 1d4d113b0f844f2b449ddca1401af1d3b391d18a Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 18 May 2016 01:20:10 +0000 Subject: [PATCH 022/275] Moved all mapField to addProperty --- .../Mapping/Builder/ClassMetadataBuilder.php | 16 +- .../ORM/Mapping/Builder/FieldBuilder.php | 22 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 17 -- .../ORM/Mapping/Driver/AnnotationDriver.php | 11 +- .../ORM/Mapping/Driver/DatabaseDriver.php | 14 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 58 ++-- .../ORM/Mapping/Driver/YamlDriver.php | 67 +++-- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 19 ++ lib/Doctrine/ORM/Mapping/MappingException.php | 31 ++ .../ORM/Tools/ConvertDoctrine1Schema.php | 24 +- .../ORM/Tools/Export/Driver/PhpExporter.php | 14 +- .../Doctrine/Tests/Models/CMS/CmsAddress.php | 64 ++--- .../Tests/Models/Company/CompanyContract.php | 28 +- .../Models/Company/CompanyFixContract.php | 12 +- .../Models/Company/CompanyFlexContract.php | 22 +- .../Company/CompanyFlexUltraContract.php | 13 +- .../DDC1476EntityWithDefaultFieldType.php | 18 +- .../Tests/Models/DDC3579/DDC3579User.php | 32 +-- .../Models/DDC869/DDC869ChequePayment.php | 9 +- .../Models/DDC869/DDC869CreditCardPayment.php | 10 +- .../Tests/Models/DDC869/DDC869Payment.php | 20 +- .../Tests/Models/DDC889/DDC889Class.php | 12 +- .../Tests/Models/DDC889/DDC889SuperClass.php | 9 +- .../Tests/Models/DDC964/DDC964User.php | 69 ++--- .../ORM/Functional/Ticket/DDC2415Test.php | 16 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 266 ++++++++---------- .../ORM/Mapping/AnsiQuoteStrategyTest.php | 14 +- .../ORM/Mapping/ClassMetadataBuilderTest.php | 2 +- .../ORM/Mapping/ClassMetadataFactoryTest.php | 16 +- .../Mapping/ClassMetadataLoadEventTest.php | 8 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 58 ++-- .../Tests/ORM/Mapping/QuoteStrategyTest.php | 22 +- .../Doctrine.Tests.Models.CMS.CmsAddress.php | 123 ++++---- .../php/Doctrine.Tests.Models.Cache.City.php | 64 ++--- ...e.Tests.Models.Company.CompanyContract.php | 32 +-- ...ests.Models.Company.CompanyFixContract.php | 12 +- ...sts.Models.Company.CompanyFlexContract.php | 19 +- ...odels.Company.CompanyFlexUltraContract.php | 13 +- ...1476.DDC1476EntityWithDefaultFieldType.php | 16 +- ....Models.DDC2825.ExplicitSchemaAndTable.php | 13 +- ...dels.DDC2825.SchemaAndTableInTableName.php | 15 +- ...trine.Tests.Models.DDC3579.DDC3579User.php | 37 ++- ...ests.Models.DDC869.DDC869ChequePayment.php | 12 +- ....Models.DDC869.DDC869CreditCardPayment.php | 12 +- ...rine.Tests.Models.DDC869.DDC869Payment.php | 20 +- ...ctrine.Tests.Models.DDC889.DDC889Class.php | 12 +- ...e.Tests.Models.DDC889.DDC889SuperClass.php | 14 +- ...octrine.Tests.Models.DDC964.DDC964User.php | 70 ++--- .../php/Doctrine.Tests.ORM.Mapping.Animal.php | 26 +- .../Doctrine.Tests.ORM.Mapping.Comment.php | 28 +- ...ctrine.Tests.ORM.Mapping.DDC1170Entity.php | 20 +- ...octrine.Tests.ORM.Mapping.DDC807Entity.php | 13 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 181 ++++++------ .../Tests/ORM/Tools/EntityGeneratorTest.php | 132 +++++---- .../Export/XmlClassMetadataExporterTest.php | 26 +- .../Doctrine.Tests.ORM.Tools.Export.User.php | 204 +++++++------- 56 files changed, 986 insertions(+), 1141 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php index 85aa0c79769..053ab856987 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php @@ -19,6 +19,7 @@ namespace Doctrine\ORM\Mapping\Builder; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; /** @@ -308,12 +309,9 @@ public function addLifecycleEvent($methodName, $event) * * @return ClassMetadataBuilder */ - public function addField($name, $type, array $mapping = []) + public function addProperty($name, $type, array $mapping = []) { - $mapping['fieldName'] = $name; - $mapping['type'] = $type; - - $this->cm->mapField($mapping); + $this->cm->addProperty($name, Type::getType($type), $mapping); return $this; } @@ -328,13 +326,7 @@ public function addField($name, $type, array $mapping = []) */ public function createField($name, $type) { - return new FieldBuilder( - $this, - [ - 'fieldName' => $name, - 'type' => $type - ] - ); + return new FieldBuilder($this, $name, Type::getType($type)); } /** diff --git a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php index d0128d4a933..e6341874800 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php @@ -18,6 +18,7 @@ */ namespace Doctrine\ORM\Mapping\Builder; +use Doctrine\DBAL\Types\Type; /** * Field Builder @@ -34,6 +35,16 @@ class FieldBuilder */ private $builder; + /** + * @var string + */ + private $name; + + /** + * @var Type + */ + private $type; + /** * @var array */ @@ -61,12 +72,14 @@ class FieldBuilder /** * @param ClassMetadataBuilder $builder - * @param array $mapping + * @param string $name + * @param Type $type */ - public function __construct(ClassMetadataBuilder $builder, array $mapping) + public function __construct(ClassMetadataBuilder $builder, $name, Type $type) { $this->builder = $builder; - $this->mapping = $mapping; + $this->name = $name; + $this->type = $type; } /** @@ -282,7 +295,8 @@ public function build() $cm->setVersionMapping($this->mapping); } - $cm->mapField($this->mapping); + $cm->addProperty($this->name, $this->type, $this->mapping); + if ($this->sequenceDef) { $cm->setSequenceGeneratorDefinition($this->sequenceDef); } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 14676a647a3..eb8f9aa23db 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -2363,23 +2363,6 @@ public function addProperty($fieldName, Type $type, array $mapping = []) $this->properties[$fieldName] = $property; } - /** - * Adds a mapped field to the class. - * - * @param array $mapping The field mapping. - * - * @return void - * - * @throws MappingException - */ - public function mapField(array $mapping) - { - $this->validateAndCompleteFieldMapping($mapping); - $this->assertFieldNotMapped($mapping['fieldName']); - - $this->fieldMappings[$mapping['fieldName']] = $mapping; - } - /** * INTERNAL: * Adds an association mapping without completing/validating it. diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 278cd241ba7..42f8a8c1b19 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -22,6 +22,7 @@ use Doctrine\Common\Annotations\AnnotationReader; use Doctrine\Common\Persistence\Mapping\ClassMetadata as ClassMetadataInterface; use Doctrine\Common\Persistence\Mapping\Driver\AnnotationDriver as AbstractAnnotationDriver; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Annotation; use Doctrine\ORM\Events; use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; @@ -330,7 +331,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat throw MappingException::propertyTypeIsRequired($className, $property->getName()); } - $mapping = $this->columnToArray($property->getName(), $columnAnnot); + $mapping = $this->columnToArray($columnAnnot); if ($idAnnot = $this->reader->getPropertyAnnotation($property, Annotation\Id::class)) { $mapping['id'] = true; @@ -346,7 +347,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $metadata->setVersionMapping($mapping); } - $metadata->mapField($mapping); + $metadata->addProperty($property->getName(), Type::getType($columnAnnot->type), $mapping); // Check for SequenceGenerator/TableGenerator definition if ($seqGeneratorAnnot = $this->reader->getPropertyAnnotation($property, Annotation\SequenceGenerator::class)) { @@ -500,7 +501,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $attributeOverridesAnnot = $classAnnotations[Annotation\AttributeOverrides::class]; foreach ($attributeOverridesAnnot->value as $attributeOverrideAnnot) { - $attributeOverride = $this->columnToArray($attributeOverrideAnnot->name, $attributeOverrideAnnot->column); + $attributeOverride = $this->columnToArray($attributeOverrideAnnot->column); $metadata->setAttributeOverride($attributeOverrideAnnot->name, $attributeOverride); } @@ -646,11 +647,9 @@ private function joinColumnToArray(Annotation\JoinColumn $joinColumn) * * @return array */ - private function columnToArray($fieldName, Annotation\Column $column) + private function columnToArray(Annotation\Column $column) { $mapping = [ - 'fieldName' => $fieldName, - 'type' => $column->type, 'scale' => $column->scale, 'length' => $column->length, 'unique' => $column->unique, diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index 417564dfa36..19b630a0f5a 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -351,32 +351,29 @@ private function buildFieldMappings(ClassMetadata $metadata) $allForeignKeys = array_merge($allForeignKeys, $foreignKey->getLocalColumns()); } - $ids = []; - $fieldMappings = []; + $ids = []; foreach ($columns as $column) { if (in_array($column->getName(), $allForeignKeys)) { continue; } + $fieldName = $this->getFieldNameForColumn($tableName, $column->getName(), false); $fieldMapping = $this->buildFieldMapping($tableName, $column); if ($primaryKeys && in_array($column->getName(), $primaryKeys)) { $fieldMapping['id'] = true; + $ids[] = $fieldMapping; } - $fieldMappings[] = $fieldMapping; + $metadata->addProperty($fieldName, $column->getType(), $fieldMapping); } // We need to check for the columns here, because we might have associations as id as well. if ($ids && count($primaryKeys) == 1) { $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); } - - foreach ($fieldMappings as $fieldMapping) { - $metadata->mapField($fieldMapping); - } } /** @@ -390,14 +387,13 @@ private function buildFieldMappings(ClassMetadata $metadata) private function buildFieldMapping($tableName, Column $column) { $fieldMapping = [ - 'fieldName' => $this->getFieldNameForColumn($tableName, $column->getName(), false), 'columnName' => $column->getName(), 'type' => $column->getType()->getName(), 'nullable' => ( ! $column->getNotnull()), ]; // Type specific elements - switch ($fieldMapping['type']) { + switch ($column->getType()->getName()) { case Type::TARRAY: case Type::BLOB: case Type::GUID: diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 60f5d7ac43a..e70e5490f62 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -19,6 +19,7 @@ namespace Doctrine\ORM\Mapping\Driver; +use Doctrine\DBAL\Types\Type; use SimpleXMLElement; use Doctrine\Common\Persistence\Mapping\Driver\FileDriver; use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; @@ -215,6 +216,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate if (isset($xmlRoot->indexes)) { $metadata->table['indexes'] = []; + foreach ($xmlRoot->indexes->index as $indexXml) { $index = ['columns' => explode(',', (string) $indexXml['columns'])]; @@ -256,21 +258,20 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $metadata->table['options'] = $this->_parseOptions($xmlRoot->options->children()); } - // The mapping assignment is done in 2 times as a bug might occurs on some php/xml lib versions - // The internal SimpleXmlIterator get resetted, to this generate a duplicate field exception - $mappings = []; - // Evaluate mappings if (isset($xmlRoot->field)) { - foreach ($xmlRoot->field as $fieldMapping) { - $mapping = $this->columnToArray($fieldMapping); + foreach ($xmlRoot->field as $mapping) { + $fieldName = (string) $mapping['name']; + $fieldType = Type::getType((string) $mapping['type']); + $fieldMapping = $this->columnToArray($mapping); + + if (isset($fieldMapping['version'])) { + $metadata->setVersionMapping($fieldMapping); - if (isset($mapping['version'])) { - $metadata->setVersionMapping($mapping); - unset($mapping['version']); + unset($fieldMapping['version']); } - $metadata->mapField($mapping); + $metadata->addProperty($fieldName, $fieldType, $fieldMapping); } } @@ -294,14 +295,6 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } } - foreach ($mappings as $mapping) { - if (isset($mapping['version'])) { - $metadata->setVersionMapping($mapping); - } - - $metadata->mapField($mapping); - } - // Evaluate mappings $associationIds = []; @@ -312,32 +305,27 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) continue; } - $mapping = [ - 'id' => true, - 'fieldName' => (string) $idElement['name'] - ]; - - if (isset($idElement['type'])) { - $mapping['type'] = (string) $idElement['type']; - } + $fieldName = (string) $idElement['name']; + $fieldType = Type::getType(isset($idElement['type']) ? (string) $idElement['type'] : 'string'); + $fieldMapping = ['id' => true]; if (isset($idElement['length'])) { - $mapping['length'] = (string) $idElement['length']; + $fieldMapping['length'] = (string) $idElement['length']; } if (isset($idElement['column'])) { - $mapping['columnName'] = (string) $idElement['column']; + $fieldMapping['columnName'] = (string) $idElement['column']; } if (isset($idElement['column-definition'])) { - $mapping['columnDefinition'] = (string) $idElement['column-definition']; + $fieldMapping['columnDefinition'] = (string) $idElement['column-definition']; } if (isset($idElement->options)) { - $mapping['options'] = $this->_parseOptions($idElement->options->children()); + $fieldMapping['options'] = $this->_parseOptions($idElement->options->children()); } - $metadata->mapField($mapping); + $metadata->addProperty($fieldName, $fieldType, $fieldMapping); if (isset($idElement->generator)) { $strategy = isset($idElement->generator['strategy']) @@ -761,13 +749,7 @@ private function joinColumnToArray(SimpleXMLElement $joinColumnElement) */ private function columnToArray(SimpleXMLElement $fieldMapping) { - $mapping = [ - 'fieldName' => (string) $fieldMapping['name'], - ]; - - if (isset($fieldMapping['type'])) { - $mapping['type'] = (string) $fieldMapping['type']; - } + $mapping = []; if (isset($fieldMapping['column'])) { $mapping['columnName'] = (string) $fieldMapping['column']; diff --git a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php index 1483b16d56d..920f7cfd42e 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Mapping\Driver; use Doctrine\Common\Persistence\Mapping\ClassMetadata; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; use Doctrine\Common\Persistence\Mapping\Driver\FileDriver; use Doctrine\ORM\Mapping\ClassMetadata as Metadata; @@ -268,45 +269,45 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } $associationIds = []; + if (isset($element['id'])) { // Evaluate identifier settings foreach ($element['id'] as $name => $idElement) { if (isset($idElement['associationKey']) && $idElement['associationKey'] == true) { $associationIds[$name] = true; + continue; } - $mapping = [ - 'id' => true, - 'fieldName' => $name - ]; - - if (isset($idElement['type'])) { - $mapping['type'] = $idElement['type']; - } + $fieldName = $name; + $fieldType = Type::getType($idElement['type'] ?? 'string'); + $fieldMapping = ['id' => true]; if (isset($idElement['column'])) { - $mapping['columnName'] = $idElement['column']; + $fieldMapping['columnName'] = $idElement['column']; } if (isset($idElement['length'])) { - $mapping['length'] = $idElement['length']; + $fieldMapping['length'] = $idElement['length']; } if (isset($idElement['columnDefinition'])) { - $mapping['columnDefinition'] = $idElement['columnDefinition']; + $fieldMapping['columnDefinition'] = $idElement['columnDefinition']; } if (isset($idElement['options'])) { - $mapping['options'] = $idElement['options']; + $fieldMapping['options'] = $idElement['options']; } - $metadata->mapField($mapping); + $metadata->addProperty($fieldName, $fieldType, $fieldMapping); if (isset($idElement['generator'])) { - $metadata->setIdGeneratorType(constant('Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_' - . strtoupper($idElement['generator']['strategy']))); + $generatorStrategy = strtoupper($idElement['generator']['strategy']); + $generatorType = constant('Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_' . $generatorStrategy); + + $metadata->setIdGeneratorType($generatorType); } + // Check for SequenceGenerator/TableGenerator definition if (isset($idElement['sequenceGenerator'])) { $metadata->setSequenceGeneratorDefinition($idElement['sequenceGenerator']); @@ -325,24 +326,26 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate fields if (isset($element['fields'])) { - foreach ($element['fields'] as $name => $fieldMapping) { + foreach ($element['fields'] as $fieldName => $fieldMapping) { + $params = explode('(', $fieldMapping['type']); + $mapping = $this->columnToArray($fieldMapping); - $mapping = $this->columnToArray($name, $fieldMapping); - - if (isset($fieldMapping['id'])) { - $mapping['id'] = true; + if (isset($mapping['id'])) { if (isset($fieldMapping['generator']['strategy'])) { - $metadata->setIdGeneratorType(constant('Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_' - . strtoupper($fieldMapping['generator']['strategy']))); + $generatorStrategy = strtoupper($fieldMapping['generator']['strategy']); + $generatorType = constant('Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_' . $generatorStrategy); + + $metadata->setIdGeneratorType($generatorType); } } if (isset($mapping['version'])) { $metadata->setVersionMapping($mapping); + unset($mapping['version']); } - $metadata->mapField($mapping); + $metadata->addProperty($fieldName, Type::getType(trim($params[0])), $mapping); } } @@ -353,6 +356,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) 'class' => $embeddedMapping['class'], 'columnPrefix' => isset($embeddedMapping['columnPrefix']) ? $embeddedMapping['columnPrefix'] : null, ]; + $metadata->mapEmbedded($mapping); } } @@ -727,23 +731,22 @@ private function joinColumnToArray($joinColumnElement) * * @return array */ - private function columnToArray($fieldName, $column) + private function columnToArray($column) { - $mapping = [ - 'fieldName' => $fieldName - ]; + $mapping = []; if (isset($column['type'])) { $params = explode('(', $column['type']); - $column['type'] = trim($params[0]); - $mapping['type'] = $column['type']; - if (isset($params[1])) { $column['length'] = (integer) substr($params[1], 0, strlen($params[1]) - 1); } } + if (isset($column['length'])) { + $mapping['length'] = (integer) $column['length']; + } + if (isset($column['column'])) { $mapping['columnName'] = $column['column']; } @@ -768,6 +771,10 @@ private function columnToArray($fieldName, $column) $mapping['options'] = $column['options']; } + if (isset($column['id']) && $column['id']) { + $mapping['id'] = $column['id']; + } + if (isset($column['nullable'])) { $mapping['nullable'] = $column['nullable']; } diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index d845be0ceed..64ffe235f3e 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -302,4 +302,23 @@ public function isUnique() { return $this->isUnique; } + + /** + * @return array + */ + public function getMapping() + { + return [ + 'tableName' => $this->tableName, + 'columnName' => $this->columnName, + 'columnDefinition' => $this->columnDefinition, + 'length' => $this->length, + 'scale' => $this->scale, + 'precision' => $this->precision, + 'options' => $this->options, + 'id' => $this->isPrimaryKey, + 'nullable' => $this->isNullable, + 'unique' => $this->isUnique, + ]; + } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/MappingException.php b/lib/Doctrine/ORM/Mapping/MappingException.php index 7dc4405159a..eac6f75d400 100644 --- a/lib/Doctrine/ORM/Mapping/MappingException.php +++ b/lib/Doctrine/ORM/Mapping/MappingException.php @@ -370,6 +370,20 @@ public static function tableIdGeneratorNotImplemented($className) return new self("TableIdGenerator is not yet implemented for use with class ".$className); } + /** + * @param PropertyMetadata $propertyMetadata + * + * @return MappingException + */ + public static function duplicateProperty(PropertyMetadata $propertyMetadata) + { + return new self(sprintf( + 'Property "%s" in "%s" was already declared, but it must be declared only once', + $propertyMetadata->getFieldName(), + $propertyMetadata->getDeclaringClass()->getName() + )); + } + /** * @param string $entity The entity's name. * @param string $fieldName The name of the field that was already declared. @@ -552,6 +566,23 @@ public static function cannotVersionIdField($className, $fieldName) return new self("Setting Id field '$fieldName' as versionable in entity class '$className' is not supported."); } + /** + * @param PropertyMetadata $propertyMetadata + * + * @return MappingException + */ + public static function sqlConversionNotAllowedForPrimaryKeyProperties(PropertyMetadata $propertyMetadata) + { + return new self(sprintf( + 'It is not possible to set id field "%s" to type "%s" in entity class "%s". ' . + 'The type "%s" requires conversion SQL which is not allowed for identifiers.', + $propertyMetadata->getFieldName(), + $propertyMetadata->getTypeName(), + $propertyMetadata->getDeclaringClass()->getName(), + $propertyMetadata->getTypeName() + )); + } + /** * @param string $className * @param string $fieldName diff --git a/lib/Doctrine/ORM/Tools/ConvertDoctrine1Schema.php b/lib/Doctrine/ORM/Tools/ConvertDoctrine1Schema.php index 643bb99d08d..52029747845 100644 --- a/lib/Doctrine/ORM/Tools/ConvertDoctrine1Schema.php +++ b/lib/Doctrine/ORM/Tools/ConvertDoctrine1Schema.php @@ -153,13 +153,11 @@ private function convertColumns($className, array $model, ClassMetadata $metadat } if ( ! $id) { - $fieldMapping = [ - 'fieldName' => 'id', + $metadata->addProperty('id', Type::getType('integer'), [ 'columnName' => 'id', - 'type' => 'integer', - 'id' => true - ]; - $metadata->mapField($fieldMapping); + 'id' => true, + ]); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); } } @@ -208,15 +206,11 @@ private function convertColumn($className, $name, $column, ClassMetadata $metada throw ToolsException::couldNotMapDoctrine1Type($column['type']); } + $fieldName = isset($column['alias']) ? $column['alias'] : $name; + $fieldType = Type::getType($column['type']); $fieldMapping = []; - if (isset($column['primary'])) { - $fieldMapping['id'] = true; - } - - $fieldMapping['fieldName'] = isset($column['alias']) ? $column['alias'] : $name; $fieldMapping['columnName'] = $column['name']; - $fieldMapping['type'] = $column['type']; if (isset($column['length'])) { $fieldMapping['length'] = $column['length']; @@ -230,7 +224,11 @@ private function convertColumn($className, $name, $column, ClassMetadata $metada } } - $metadata->mapField($fieldMapping); + if (isset($column['primary'])) { + $fieldMapping['id'] = true; + } + + $metadata->addProperty($fieldName, $fieldType, $fieldMapping); if (isset($column['autoincrement'])) { $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index a557b823458..9eb694ca935 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -82,13 +82,13 @@ public function exportClassMetadata(ClassMetadata $metadata) } } - foreach ($metadata->fieldMappings as $fieldMapping) { - // We need to override the value we'll blindly var_export() later - $fieldMapping['type'] = $fieldMapping['type']->getName(); - - unset($fieldMapping['declaringClass']); - - $lines[] = '$metadata->mapField(' . $this->_varExport($fieldMapping) . ');'; + foreach ($metadata->properties as $property) { + $lines[] = sprintf( + '$metadata->addProperty("%s", Type::getType("%s"), %s)', + $property->getFieldName(), + $property->getType()->getName(), + $this->_varExport($property->getMapping()) + ); } if ( ! $metadata->isIdentifierComposite && $generatorType = $this->_getIdGeneratorTypeString($metadata->generatorType)) { diff --git a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php index 48c6f6e7cb7..51c456371b0 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\Models\CMS; +use Doctrine\DBAL\Types\Type; + /** * CmsAddress * @@ -130,57 +132,53 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat ] ); - $metadata->mapField( - [ - 'id' => true, - 'fieldName' => 'id', - 'type' => 'integer', - ] + $metadata->addProperty( + 'id', + Type::getType('integer'), + ['id' => true] ); - $metadata->mapField( - [ - 'fieldName' => 'zip', - 'length' => 50, - ] + $metadata->addProperty( + 'zip', + Type::getType('string'), + ['length' => 50] ); - $metadata->mapField( - [ - 'fieldName' => 'city', - 'length' => 50, - ] + $metadata->addProperty( + 'city', + Type::getType('string'), + ['length' => 50] ); $metadata->mapOneToOne( [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser', - 'joinColumns' => [['referencedColumnName' => 'id']] + 'fieldName' => 'user', + 'targetEntity' => 'CmsUser', + 'joinColumns' => [['referencedColumnName' => 'id']] ] ); $metadata->addNamedNativeQuery( [ - 'name' => 'find-all', - 'query' => 'SELECT id, country, city FROM cms_addresses', - 'resultSetMapping' => 'mapping-find-all', + 'name' => 'find-all', + 'query' => 'SELECT id, country, city FROM cms_addresses', + 'resultSetMapping' => 'mapping-find-all', ] ); $metadata->addNamedNativeQuery( [ - 'name' => 'find-by-id', - 'query' => 'SELECT * FROM cms_addresses WHERE id = ?', - 'resultClass' => CmsAddress::class, + 'name' => 'find-by-id', + 'query' => 'SELECT * FROM cms_addresses WHERE id = ?', + 'resultClass' => CmsAddress::class, ] ); $metadata->addNamedNativeQuery( [ - 'name' => 'count', - 'query' => 'SELECT COUNT(*) AS count FROM cms_addresses', - 'resultSetMapping' => 'mapping-count', + 'name' => 'count', + 'query' => 'SELECT COUNT(*) AS count FROM cms_addresses', + 'resultSetMapping' => 'mapping-count', ] ); @@ -225,12 +223,10 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat $metadata->addSqlResultSetMapping( [ - 'name' => 'mapping-count', - 'columns' => [ - [ - 'name' => 'count', - ], - ] + 'name' => 'mapping-count', + 'columns' => [ + ['name' => 'count'], + ] ] ); diff --git a/tests/Doctrine/Tests/Models/Company/CompanyContract.php b/tests/Doctrine/Tests/Models/Company/CompanyContract.php index 03a7ba6ae43..59a9df85c04 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyContract.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\Models\Company; +use Doctrine\DBAL\Types\Type; + /** * @Entity * @Table(name="company_contracts") @@ -142,27 +144,23 @@ static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat ] ); - $metadata->mapField( - [ - 'id' => true, - 'name' => 'id', - 'fieldName' => 'id', - ] + $metadata->addProperty( + 'id', + Type::getType('integer'), + ['id' => true] ); - $metadata->mapField( - [ - 'type' => 'boolean', - 'name' => 'completed', - 'fieldName' => 'completed', - ] + $metadata->addProperty( + 'completed', + Type::getType('boolean'), + ['columnName' => 'completed'] ); $metadata->setDiscriminatorMap( [ - "fix" => "CompanyFixContract", - "flexible" => "CompanyFlexContract", - "flexultra" => "CompanyFlexUltraContract" + "fix" => "CompanyFixContract", + "flexible" => "CompanyFlexContract", + "flexultra" => "CompanyFlexUltraContract" ] ); diff --git a/tests/Doctrine/Tests/Models/Company/CompanyFixContract.php b/tests/Doctrine/Tests/Models/Company/CompanyFixContract.php index 4f51dc4060f..3a3857c0c34 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyFixContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyFixContract.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\Models\Company; +use Doctrine\DBAL\Types\Type; + /** * @Entity */ @@ -30,12 +32,10 @@ public function setFixPrice($fixPrice) static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->mapField( - [ - 'type' => 'integer', - 'name' => 'fixPrice', - 'fieldName' => 'fixPrice', - ] + $metadata->addProperty( + 'fixPrice', + Type::getType('integer'), + ['columnName' => 'fixPrice'] ); } } diff --git a/tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php b/tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php index c83e6479ef1..ca94c8454d9 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php @@ -1,6 +1,8 @@ mapField( - [ - 'type' => 'integer', - 'name' => 'hoursWorked', - 'fieldName' => 'hoursWorked', - ] + $metadata->addProperty( + 'hoursWorked', + Type::getType('integer'), + ['columnName' => 'hoursWorked'] ); - $metadata->mapField( - [ - 'type' => 'integer', - 'name' => 'pricePerHour', - 'fieldName' => 'pricePerHour', - ] + $metadata->addProperty( + 'pricePerHour', + Type::getType('integer'), + ['columnName' => 'pricePerHour'] ); } } diff --git a/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php b/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php index a69abefeb3b..075568b3029 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\Models\Company; +use Doctrine\DBAL\Types\Type; + /** * @Entity * @EntityListeners({"CompanyContractListener","CompanyFlexUltraContractListener"}) @@ -31,13 +33,12 @@ public function setMaxPrice($maxPrice) static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->mapField( - [ - 'type' => 'integer', - 'name' => 'maxPrice', - 'fieldName' => 'maxPrice', - ] + $metadata->addProperty( + 'maxPrice', + Type::getType('integer'), + ['columnName' => 'maxPrice'] ); + $metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, 'CompanyContractListener', 'postPersistHandler'); $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, 'CompanyContractListener', 'prePersistHandler'); diff --git a/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php b/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php index 601d38a3a0e..679f050f644 100644 --- a/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php +++ b/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php @@ -2,12 +2,13 @@ namespace Doctrine\Tests\Models\DDC1476; +use Doctrine\DBAL\Types\Type; + /** * @Entity() */ class DDC1476EntityWithDefaultFieldType { - /** * @Id * @Column() @@ -15,7 +16,7 @@ class DDC1476EntityWithDefaultFieldType */ protected $id; - /** @column() */ + /** @Column() */ protected $name; /** @@ -44,17 +45,8 @@ public function setName($name) public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->mapField( - [ - 'id' => true, - 'fieldName' => 'id', - ] - ); - $metadata->mapField( - [ - 'fieldName' => 'name', - ] - ); + $metadata->addProperty('id', Type::getType('string'), ['id' => true]); + $metadata->addProperty('name', Type::getType('string')); $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE); } diff --git a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php index 77524f64d83..126adb3a181 100644 --- a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php +++ b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\Models\DDC3579; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\DBAL\Types\Type; /** * @MappedSuperclass @@ -79,33 +80,32 @@ public function getGroups() return $this->groups; } - public static function loadMetadata($metadata) + public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->mapField( + $metadata->addProperty( + 'id', + Type::getType('integer'), [ - 'id' => true, - 'fieldName' => 'id', - 'type' => 'integer', - 'columnName' => 'user_id', - 'length' => 150, + 'id' => true, + 'columnName' => 'user_id', ] ); - $metadata->mapField( + $metadata->addProperty( + 'name', + Type::getType('string'), [ - 'fieldName' => 'name', - 'type' => 'string', - 'columnName'=> 'user_name', - 'nullable' => true, - 'unique' => false, - 'length' => 250, + 'columnName'=> 'user_name', + 'nullable' => true, + 'unique' => false, + 'length' => 250, ] ); $metadata->mapManyToMany( [ - 'fieldName' => 'groups', - 'targetEntity' => 'DDC3579Group' + 'fieldName' => 'groups', + 'targetEntity' => 'DDC3579Group' ] ); diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php index 9e7b3a78b22..e704ab195a4 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\Models\DDC869; +use Doctrine\DBAL\Types\Type; + /** * @Entity */ @@ -13,12 +15,7 @@ class DDC869ChequePayment extends DDC869Payment public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->mapField( - [ - 'fieldName' => 'serialNumber', - 'type' => 'string', - ] - ); + $metadata->addProperty('serialNumber', Type::getType('string')); } } diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869CreditCardPayment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869CreditCardPayment.php index f3027a026ad..da30da77398 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869CreditCardPayment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869CreditCardPayment.php @@ -2,23 +2,19 @@ namespace Doctrine\Tests\Models\DDC869; +use Doctrine\DBAL\Types\Type; + /** * @Entity */ class DDC869CreditCardPayment extends DDC869Payment { - /** @Column(type="string") */ protected $creditCardNumber; public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->mapField( - [ - 'fieldName' => 'creditCardNumber', - 'type' => 'string', - ] - ); + $metadata->addProperty('creditCardNumber', Type::getType('string')); } } diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php index b21b1a29d2a..3c0ffa98c3f 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\Models\DDC869; +use Doctrine\DBAL\Types\Type; + /** * @MappedSuperclass(repositoryClass = "Doctrine\Tests\Models\DDC869\DDC869PaymentRepository") */ @@ -21,21 +23,11 @@ class DDC869Payment public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->mapField( - [ - 'id' => true, - 'fieldName' => 'id', - 'type' => 'integer', - 'columnName' => 'id', - ] - ); - $metadata->mapField( - [ - 'fieldName' => 'value', - 'type' => 'float', - ] - ); + $metadata->addProperty('id', Type::getType('integer'), ['id' => true]); + $metadata->addProperty('value', Type::getType('float')); + $metadata->isMappedSuperclass = true; + $metadata->setCustomRepositoryClass(DDC869PaymentRepository::class); $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_AUTO); } diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php b/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php index 41201eec8fb..022a1f197c9 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php @@ -2,9 +2,10 @@ namespace Doctrine\Tests\Models\DDC889; +use Doctrine\DBAL\Types\Type; + class DDC889Class extends DDC889SuperClass { - /** * @Id * @Column(type="integer") @@ -15,14 +16,7 @@ class DDC889Class extends DDC889SuperClass public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->mapField( - [ - 'id' => true, - 'fieldName' => 'id', - 'type' => 'integer', - 'columnName' => 'id', - ] - ); + $metadata->addProperty('id', Type::getType('integer'), ['id' => true]); $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_AUTO); } diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php b/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php index c26a9bda9c6..defe28efd11 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\Models\DDC889; +use Doctrine\DBAL\Types\Type; + /** * @MappedSuperclass */ @@ -13,13 +15,10 @@ class DDC889SuperClass public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->mapField( - [ - 'fieldName' => 'name', - ] - ); + $metadata->addProperty('name', Type::getType('string')); $metadata->isMappedSuperclass = true; + $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE); } } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php index 5ab56c1699b..e5c32c120c5 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\Models\DDC964; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\DBAL\Types\Type; /** * @MappedSuperclass @@ -109,56 +110,56 @@ public function setAddress(DDC964Address $address) public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->mapField( + $metadata->addProperty( + 'id', + Type::getType('integer'), [ - 'id' => true, - 'fieldName' => 'id', - 'type' => 'integer', - 'columnName' => 'user_id', - 'length' => 150, + 'id' => true, + 'columnName' => 'user_id', ] ); - $metadata->mapField( + + $metadata->addProperty( + 'name', + Type::getType('string'), [ - 'fieldName' => 'name', - 'type' => 'string', - 'columnName'=> 'user_name', - 'nullable' => true, - 'unique' => false, - 'length' => 250, + 'columnName'=> 'user_name', + 'nullable' => true, + 'unique' => false, + 'length' => 250, ] ); $metadata->mapManyToOne( [ - 'fieldName' => 'address', - 'targetEntity' => 'DDC964Address', - 'cascade' => ['persist','merge'], - 'joinColumn' => ['name'=>'address_id', 'referencedColumnMame'=>'id'], + 'fieldName' => 'address', + 'targetEntity' => 'DDC964Address', + 'cascade' => ['persist','merge'], + 'joinColumn' => ['name'=>'address_id', 'referencedColumnMame'=>'id'], ] ); $metadata->mapManyToMany( [ - 'fieldName' => 'groups', - 'targetEntity' => 'DDC964Group', - 'inversedBy' => 'users', - 'cascade' => ['persist','merge','detach'], - 'joinTable' => [ - 'name' => 'ddc964_users_groups', - 'joinColumns' => [ - [ - 'name'=>'user_id', - 'referencedColumnName'=>'id', - ] - ], - 'inverseJoinColumns'=> [ - [ - 'name'=>'group_id', - 'referencedColumnName'=>'id', + 'fieldName' => 'groups', + 'targetEntity' => 'DDC964Group', + 'inversedBy' => 'users', + 'cascade' => ['persist','merge','detach'], + 'joinTable' => [ + 'name' => 'ddc964_users_groups', + 'joinColumns' => [ + [ + 'name'=>'user_id', + 'referencedColumnName'=>'id', + ] + ], + 'inverseJoinColumns'=> [ + [ + 'name'=>'group_id', + 'referencedColumnName'=>'id', + ] ] ] - ] ] ); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php index f1f06959b42..c7111ef8b82 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\EntityManager; use Doctrine\ORM\Id\AbstractIdGenerator; use Doctrine\ORM\Mapping\ClassMetadata; @@ -59,13 +60,7 @@ public function getId() public static function loadMetadata(ClassMetadata $metadata) { - $metadata->mapField( - [ - 'id' => true, - 'fieldName' => 'id', - 'type' => 'string', - ] - ); + $metadata->addProperty('id', Type::getType('string'), ['id' => true]); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); $metadata->setCustomGeneratorDefinition(['class' => DDC2415Generator::class]); @@ -90,12 +85,7 @@ public function getName() public static function loadMetadata(ClassMetadata $metadata) { - $metadata->mapField( - [ - 'fieldName' => 'name', - 'type' => 'string', - ] - ); + $metadata->addProperty('name', Type::getType('string')); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 40d4d49ebd9..8c13bb0b50d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -451,8 +451,6 @@ public function testMappedSuperclassWithRepository() { $em = $this->_getTestEntityManager(); $factory = $this->createClassMetadataFactory($em); - - $class = $factory->getMetadataFor(DDC869CreditCardPayment::class); self::assertTrue(isset($class->fieldMappings['id'])); @@ -462,8 +460,6 @@ public function testMappedSuperclassWithRepository() self::assertInstanceOf(DDC869PaymentRepository::class, $em->getRepository(DDC869CreditCardPayment::class)); self::assertTrue($em->getRepository(DDC869ChequePayment::class)->isTrue()); - - $class = $factory->getMetadataFor(DDC869ChequePayment::class); self::assertTrue(isset($class->fieldMappings['id'])); @@ -486,23 +482,18 @@ public function testDefaultFieldType() self::assertArrayHasKey('id', $class->fieldMappings); self::assertArrayHasKey('name', $class->fieldMappings); - self::assertArrayHasKey('type', $class->fieldMappings['id']); self::assertArrayHasKey('type', $class->fieldMappings['name']); self::assertEquals('string', $class->fieldMappings['id']['type']->getName()); self::assertEquals('string', $class->fieldMappings['name']['type']->getName()); - - self::assertArrayHasKey('fieldName', $class->fieldMappings['id']); self::assertArrayHasKey('fieldName', $class->fieldMappings['name']); self::assertEquals('id', $class->fieldMappings['id']['fieldName']); self::assertEquals('name', $class->fieldMappings['name']['fieldName']); - - self::assertArrayHasKey('columnName', $class->fieldMappings['id']); self::assertArrayHasKey('columnName', $class->fieldMappings['name']); @@ -519,7 +510,6 @@ public function testIdentifierColumnDefinition() { $class = $this->createClassMetadata(DDC1170Entity::class); - self::assertArrayHasKey('id', $class->fieldMappings); self::assertArrayHasKey('value', $class->fieldMappings); @@ -538,10 +528,9 @@ public function testNamingStrategy() $em = $this->_getTestEntityManager(); $factory = $this->createClassMetadataFactory($em); - - $this->assertInstanceOf(DefaultNamingStrategy::class, $em->getConfiguration()->getNamingStrategy()); + self::assertInstanceOf(DefaultNamingStrategy::class, $em->getConfiguration()->getNamingStrategy()); $em->getConfiguration()->setNamingStrategy(new UnderscoreNamingStrategy(CASE_UPPER)); - $this->assertInstanceOf(UnderscoreNamingStrategy::class, $em->getConfiguration()->getNamingStrategy()); + self::assertInstanceOf(UnderscoreNamingStrategy::class, $em->getConfiguration()->getNamingStrategy()); $class = $factory->getMetadataFor(DDC1476EntityWithDefaultFieldType::class); @@ -610,7 +599,6 @@ public function testNamedNativeQuery() self::assertArrayHasKey('find-all', $class->namedNativeQueries); self::assertArrayHasKey('find-by-id', $class->namedNativeQueries); - $findAllQuery = $class->getNamedNativeQuery('find-all'); self::assertEquals('find-all', $findAllQuery['name']); self::assertEquals('mapping-find-all', $findAllQuery['resultSetMapping']); @@ -655,7 +643,6 @@ public function testNamedNativeQuery() */ public function testSqlResultSetMapping() { - $userMetadata = $this->createClassMetadata(CmsUser::class); $personMetadata = $this->createClassMetadata(CompanyPerson::class); @@ -675,7 +662,6 @@ public function testSqlResultSetMapping() self::assertEquals(['name'=>'address.id','column'=>'a_id'], $mapping['entities'][0]['fields'][6]); self::assertEquals($userMetadata->name, $mapping['entities'][0]['entityClass']); - $mapping = $userMetadata->getSqlResultSetMapping('mappingJoinedPhonenumber'); self::assertEquals([],$mapping['columns']); self::assertEquals('mappingJoinedPhonenumber', $mapping['name']); @@ -726,12 +712,10 @@ public function testSqlResultSetMapping() */ public function testAssociationOverridesMapping() { - $factory = $this->createClassMetadataFactory(); $adminMetadata = $factory->getMetadataFor(DDC964Admin::class); $guestMetadata = $factory->getMetadataFor(DDC964Guest::class); - // assert groups association mappings self::assertArrayHasKey('groups', $guestMetadata->associationMappings); self::assertArrayHasKey('groups', $adminMetadata->associationMappings); @@ -809,7 +793,6 @@ public function testAssociationOverridesMapping() */ public function testInversedByOverrideMapping() { - $factory = $this->createClassMetadataFactory(); $adminMetadata = $factory->getMetadataFor(DDC3579Admin::class); @@ -838,7 +821,6 @@ public function testFetchOverrideMapping() */ public function testAttributeOverridesMapping() { - $factory = $this->createClassMetadataFactory(); $guestMetadata = $factory->getMetadataFor(DDC964Guest::class); $adminMetadata = $factory->getMetadataFor(DDC964Admin::class); @@ -1177,121 +1159,114 @@ public static function loadMetadata(ClassMetadata $metadata) $metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); $metadata->setPrimaryTable( [ - 'name' => 'cms_users', - 'options' => ['foo' => 'bar', 'baz' => ['key' => 'val']], + 'name' => 'cms_users', + 'options' => [ + 'foo' => 'bar', + 'baz' => ['key' => 'val'] + ], ] ); + $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); + $metadata->addLifecycleCallback('doStuffOnPrePersist', 'prePersist'); $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); $metadata->addLifecycleCallback('doStuffOnPostPersist', 'postPersist'); - $metadata->mapField( + + $metadata->addProperty( + 'id', + Type::getType('integer'), [ - 'id' => true, - 'fieldName' => 'id', - 'type' => 'integer', - 'columnName' => 'id', - 'options' => ['foo' => 'bar', 'unsigned' => false], + 'id' => true, + 'options' => ['foo' => 'bar', 'unsigned' => false], ] ); - $metadata->mapField( + + $metadata->addProperty( + 'name', + Type::getType('string'), [ - 'fieldName' => 'name', - 'type' => 'string', - 'length' => 50, - 'unique' => true, - 'nullable' => true, - 'columnName' => 'name', - 'options' => ['foo' => 'bar', 'baz' => ['key' => 'val'], 'fixed' => false], + 'length' => 50, + 'unique' => true, + 'nullable' => true, + 'options' => [ + 'foo' => 'bar', + 'baz' => ['key' => 'val'], + 'fixed' => false + ], ] ); - $metadata->mapField( - [ - 'fieldName' => 'email', - 'type' => 'string', - 'columnName' => 'user_email', - 'columnDefinition' => 'CHAR(32) NOT NULL', - ] + + $metadata->addProperty('email', Type::getType('string'), [ + 'columnName' => 'user_email', + 'columnDefinition' => 'CHAR(32) NOT NULL', + ] ); + $mapping = ['fieldName' => 'version', 'type' => 'integer']; + $metadata->setVersionMapping($mapping); - $metadata->mapField($mapping); + $metadata->addProperty('version', Type::getType('integer')); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); $metadata->mapOneToOne( [ - 'fieldName' => 'address', - 'targetEntity' => Address::class, - 'cascade' => - [ - 0 => 'remove', - ], - 'mappedBy' => NULL, - 'inversedBy' => 'user', - 'joinColumns' => - [ - 0 => - [ - 'name' => 'address_id', - 'referencedColumnName' => 'id', - 'onDelete' => 'CASCADE', - ], - ], - 'orphanRemoval' => false, - ] + 'fieldName' => 'address', + 'targetEntity' => Address::class, + 'cascade' => [0 => 'remove'], + 'mappedBy' => NULL, + 'inversedBy' => 'user', + 'joinColumns' => [ + 0 => [ + 'name' => 'address_id', + 'referencedColumnName' => 'id', + 'onDelete' => 'CASCADE', + ], + ], + 'orphanRemoval' => false, + ] ); $metadata->mapOneToMany( [ - 'fieldName' => 'phonenumbers', - 'targetEntity' => Phonenumber::class, - 'cascade' => - [ - 1 => 'persist', - ], - 'mappedBy' => 'user', - 'orphanRemoval' => true, - 'orderBy' => - [ - 'number' => 'ASC', - ], - ] + 'fieldName' => 'phonenumbers', + 'targetEntity' => Phonenumber::class, + 'cascade' => [1 => 'persist'], + 'mappedBy' => 'user', + 'orphanRemoval' => true, + 'orderBy' => ['number' => 'ASC'], + ] ); $metadata->mapManyToMany( [ - 'fieldName' => 'groups', - 'targetEntity' => Group::class, - 'cascade' => - [ - 0 => 'remove', - 1 => 'persist', - 2 => 'refresh', - 3 => 'merge', - 4 => 'detach', - ], - 'mappedBy' => NULL, - 'joinTable' => - [ - 'name' => 'cms_users_groups', - 'joinColumns' => - [ - 0 => - [ - 'name' => 'user_id', - 'referencedColumnName' => 'id', - 'unique' => false, - 'nullable' => false, - ], - ], - 'inverseJoinColumns' => - [ - 0 => - [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - 'columnDefinition' => 'INT NULL', - ], - ], - ], - 'orderBy' => NULL, + 'fieldName' => 'groups', + 'targetEntity' => Group::class, + 'cascade' => [ + 0 => 'remove', + 1 => 'persist', + 2 => 'refresh', + 3 => 'merge', + 4 => 'detach', + ], + 'mappedBy' => null, + 'joinTable' => [ + 'name' => 'cms_users_groups', + 'joinColumns' => [ + 0 => [ + 'name' => 'user_id', + 'referencedColumnName' => 'id', + 'unique' => false, + 'nullable' => false, + ], + ], + 'inverseJoinColumns' => [ + 0 => [ + 'name' => 'group_id', + 'referencedColumnName' => 'id', + 'columnDefinition' => 'INT NULL', + ], + ], + ], + 'orderBy' => null, ] ); $metadata->table['uniqueConstraints'] = [ @@ -1399,19 +1374,19 @@ public function getValue() public static function loadMetadata(ClassMetadata $metadata) { - $metadata->mapField( + $metadata->addProperty( + 'id', + Type::getType('integer'), [ - 'id' => true, - 'fieldName' => 'id', - 'columnDefinition' => 'INT unsigned NOT NULL', + 'id' => true, + 'columnDefinition' => 'INT unsigned NOT NULL', ] ); - $metadata->mapField( - [ - 'fieldName' => 'value', - 'columnDefinition' => 'VARCHAR(255) NOT NULL' - ] + $metadata->addProperty( + 'value', + Type::getType('string'), + ['columnDefinition' => 'VARCHAR(255) NOT NULL'] ); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); @@ -1436,11 +1411,10 @@ class DDC807Entity public static function loadMetadata(ClassMetadata $metadata) { - $metadata->mapField( - [ - 'id' => true, - 'fieldName' => 'id', - ] + $metadata->addProperty( + 'id', + Type::getType('string'), + ['id' => true] ); $metadata->setDiscriminatorColumn( @@ -1477,24 +1451,26 @@ class Comment public static function loadMetadata(ClassMetadata $metadata) { $metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); + $metadata->setPrimaryTable( [ 'indexes' => [ - ['columns' => ['content'], 'flags' => ['fulltext'], 'options' => ['where' => 'content IS NOT NULL']] + [ + 'columns' => ['content'], + 'flags' => ['fulltext'], + 'options' => ['where' => 'content IS NOT NULL'] + ], ] ] ); - $metadata->mapField( + $metadata->addProperty( + 'content', + Type::getType('text'), [ - 'fieldName' => 'content', - 'type' => 'text', - 'scale' => 0, - 'length' => NULL, - 'unique' => false, - 'nullable' => false, - 'precision' => 0, - 'columnName' => 'content', + 'length' => null, + 'unique' => false, + 'nullable' => false, ] ); } @@ -1519,11 +1495,10 @@ class SingleTableEntityNoDiscriminatorColumnMapping public static function loadMetadata(ClassMetadata $metadata) { - $metadata->mapField( - [ - 'id' => true, - 'fieldName' => 'id', - ] + $metadata->addProperty( + 'id', + Type::getType('string'), + ['id' => true] ); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); @@ -1553,11 +1528,11 @@ class SingleTableEntityIncompleteDiscriminatorColumnMapping public static function loadMetadata(ClassMetadata $metadata) { - $metadata->mapField( - [ - 'id' => true, - 'fieldName' => 'id', - ] + // @todo: String != Integer and this should not work + $metadata->addProperty( + 'id', + Type::getType('string'), + ['id' => true] ); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); @@ -1566,5 +1541,6 @@ public static function loadMetadata(ClassMetadata $metadata) class SingleTableEntityIncompleteDiscriminatorColumnMappingSub1 extends SingleTableEntityIncompleteDiscriminatorColumnMapping {} + class SingleTableEntityIncompleteDiscriminatorColumnMappingSub2 extends SingleTableEntityIncompleteDiscriminatorColumnMapping {} diff --git a/tests/Doctrine/Tests/ORM/Mapping/AnsiQuoteStrategyTest.php b/tests/Doctrine/Tests/ORM/Mapping/AnsiQuoteStrategyTest.php index 402dda8327c..a3677978b02 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AnsiQuoteStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AnsiQuoteStrategyTest.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Mapping; use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\AnsiQuoteStrategy; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Tests\Models\CMS\CmsAddress; @@ -52,8 +53,8 @@ private function createClassMetadata($className) public function testGetColumnName() { $class = $this->createClassMetadata(CmsUser::class); - $class->mapField(['fieldName' => 'name', 'columnName' => 'name']); - $class->mapField(['fieldName' => 'id', 'columnName' => 'id', 'id' => true]); + $class->addProperty('id', Type::getType('string'), ['id' => true]); + $class->addProperty('name', Type::getType('string')); self::assertEquals('id' ,$this->strategy->getColumnName('id', $class, $this->platform)); self::assertEquals('name' ,$this->strategy->getColumnName('name', $class, $this->platform)); @@ -86,14 +87,7 @@ public function testJoinTableName() public function testIdentifierColumnNames() { $class = $this->createClassMetadata(CmsAddress::class); - - $class->mapField( - [ - 'id' => true, - 'fieldName' => 'id', - 'columnName' => 'id', - ] - ); + $class->addProperty('id', Type::getType('integer'), ['id' => true]); self::assertEquals(['id'], $this->strategy->getIdentifierColumnNames($class, $this->platform)); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php index 326054664af..302ce0164c4 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php @@ -237,7 +237,7 @@ public function testChangeTrackingPolicyNotify() public function testAddField() { - self::assertIsFluent($this->builder->addField('name', 'string')); + self::assertIsFluent($this->builder->addProperty('name', 'string')); self::assertEquals( [ 'columnName' => 'name', diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 50d846ee9ba..b021f94e736 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -7,6 +7,7 @@ use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\DBAL\Connection; use Doctrine\ORM\Configuration; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\EntityManager; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs; @@ -264,21 +265,26 @@ protected function _createValidClassMetadata() $cm1 = new ClassMetadata(TestEntity1::class); $cm1->initializeReflection(new RuntimeReflectionService()); $cm1->setPrimaryTable(['name' => '`group`']); + // Add a mapped field - $cm1->mapField(['fieldName' => 'name', 'type' => 'string']); + $cm1->addProperty('id', Type::getType('integer'), ['id' => true]); + // Add a mapped field - $cm1->mapField(['fieldName' => 'id', 'type' => 'integer', 'id' => true]); + $cm1->addProperty('name', Type::getType('string')); + // and a mapped association $cm1->mapOneToOne(['fieldName' => 'other', 'targetEntity' => 'TestEntity1', 'mappedBy' => 'this']); + // and an association on the owning side $joinColumns = [ ['name' => 'other_id', 'referencedColumnName' => 'id'] ]; - $cm1->mapOneToOne( - ['fieldName' => 'association', 'targetEntity' => 'TestEntity1', 'joinColumns' => $joinColumns] - ); + + $cm1->mapOneToOne(['fieldName' => 'association', 'targetEntity' => 'TestEntity1', 'joinColumns' => $joinColumns]); + // and an id generator type $cm1->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); + return $cm1; } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php index a9a9f4e3373..df2b0749719 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Mapping; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Event\LoadClassMetadataEventArgs; use Doctrine\ORM\Events; use Doctrine\Tests\OrmTestCase; @@ -26,12 +27,7 @@ public function testEvent() public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs) { $classMetadata = $eventArgs->getClassMetadata(); - $field = [ - 'fieldName' => 'about', - 'type' => 'string', - 'length' => 255 - ]; - $classMetadata->mapField($field); + $classMetadata->addProperty('about', Type::getType('string'), ['length' => 255]); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 3423f9ea792..49ad7e428a6 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -90,15 +90,21 @@ public function testFieldIsNullable() $cm->initializeReflection(new RuntimeReflectionService()); // Explicit Nullable - $cm->mapField(['fieldName' => 'status', 'nullable' => true, 'type' => 'string', 'length' => 50]); + $cm->addProperty('status', Type::getType('string'), [ + 'nullable' => true, + 'length' => 50, + ]); + self::assertTrue($cm->isNullable('status')); // Explicit Not Nullable - $cm->mapField(['fieldName' => 'username', 'nullable' => false, 'type' => 'string', 'length' => 50]); + $cm->addProperty('username', Type::getType('string'), ['nullable' => false, 'length' => 50]); + self::assertFalse($cm->isNullable('username')); // Implicit Not Nullable - $cm->mapField(['fieldName' => 'name', 'type' => 'string', 'length' => 50]); + $cm->addProperty('name', Type::getType('string'), ['length' => 50]); + self::assertFalse($cm->isNullable('name'), "By default a field should not be nullable."); } @@ -251,10 +257,11 @@ public function testDuplicateColumnName_ThrowsMappingException() $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->mapField(['fieldName' => 'name', 'columnName' => 'name']); + $cm->addProperty('name', Type::getType('string')); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - $cm->mapField(['fieldName' => 'username', 'columnName' => 'name']); + + $cm->addProperty('username', Type::getType('string'), ['columnName' => 'name']); } public function testDuplicateColumnName_DiscriminatorColumn_ThrowsMappingException() @@ -262,7 +269,7 @@ public function testDuplicateColumnName_DiscriminatorColumn_ThrowsMappingExcepti $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->mapField(['fieldName' => 'name', 'columnName' => 'name']); + $cm->addProperty('name', Type::getType('string')); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); $cm->setDiscriminatorColumn(['name' => 'name']); @@ -276,7 +283,8 @@ public function testDuplicateColumnName_DiscriminatorColumn2_ThrowsMappingExcept $cm->setDiscriminatorColumn(['name' => 'name']); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - $cm->mapField(['fieldName' => 'name', 'columnName' => 'name']); + + $cm->addProperty('name', Type::getType('string')); } public function testDuplicateFieldAndAssociationMapping1_ThrowsException() @@ -284,7 +292,7 @@ public function testDuplicateFieldAndAssociationMapping1_ThrowsException() $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->mapField(['fieldName' => 'name', 'columnName' => 'name']); + $cm->addProperty('name', Type::getType('string')); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); $cm->mapOneToOne(['fieldName' => 'name', 'targetEntity' => 'CmsUser']); @@ -298,7 +306,8 @@ public function testDuplicateFieldAndAssociationMapping2_ThrowsException() $cm->mapOneToOne(['fieldName' => 'name', 'targetEntity' => 'CmsUser']); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - $cm->mapField(['fieldName' => 'name', 'columnName' => 'name']); + + $cm->addProperty('name', Type::getType('string')); } /** @@ -434,8 +443,8 @@ public function testSetMultipleIdentifierSetsComposite() $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->mapField(['fieldName' => 'name']); - $cm->mapField(['fieldName' => 'username']); + $cm->addProperty('name', Type::getType('string')); + $cm->addProperty('username', Type::getType('string')); $cm->setIdentifier(['name', 'username']); self::assertTrue($cm->isIdentifierComposite); @@ -565,7 +574,7 @@ public function testEmptyFieldNameThrowsException() $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->mapField(['fieldName' => '']); + $cm->addProperty('', Type::getType('string')); } public function testRetrievalOfNamedQueries() @@ -573,7 +582,6 @@ public function testRetrievalOfNamedQueries() $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - self::assertEquals(0, count($cm->getNamedQueries())); $cm->addNamedQuery( @@ -1070,8 +1078,8 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategyProperty $metadata->initializeReflection(new RuntimeReflectionService()); - $metadata->mapField(['fieldName'=>'country']); - $metadata->mapField(['fieldName'=>'city']); + $metadata->addProperty('country', Type::getType('string')); + $metadata->addProperty('city', Type::getType('string')); self::assertEquals( $metadata->fieldNames, @@ -1119,7 +1127,8 @@ public function testInvalidPropertyAttributeOverrideNameException() { $cm = new ClassMetadata(DDC964Guest::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->mapField(['fieldName' => 'name']); + + $cm->addProperty('name', Type::getType('string')); $cm->setAttributeOverride('invalidPropertyName', []); } @@ -1133,9 +1142,9 @@ public function testInvalidOverrideAttributeFieldTypeException() { $cm = new ClassMetadata(DDC964Guest::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->mapField(['fieldName' => 'name', 'type'=>'string']); + $cm->addProperty('name', Type::getType('string')); - $cm->setAttributeOverride('name', ['type'=>'date']); + $cm->setAttributeOverride('name', ['type' => 'date']); } /** @@ -1263,15 +1272,14 @@ public function testWakeupReflectionWithEmbeddableAndStaticReflectionService() ] ); - $field = [ - 'fieldName' => 'test.embeddedProperty', - 'type' => 'string', + $mapping = [ 'originalClass' => TestEntity1::class, 'declaredField' => 'test', 'originalField' => 'embeddedProperty' ]; - $classMetadata->mapField($field); + $classMetadata->addProperty('test.embeddedProperty', Type::getType('string'), $mapping); + $classMetadata->wakeupReflection(new StaticReflectionService()); self::assertEquals(['test' => null, 'test.embeddedProperty' => null], $classMetadata->getReflectionProperties()); @@ -1282,9 +1290,9 @@ public function testGetColumnNamesWithGivenFieldNames() $metadata = new ClassMetadata(CMS\CmsUser::class); $metadata->initializeReflection(new RuntimeReflectionService()); - $metadata->mapField(['fieldName' => 'status', 'type' => 'string', 'columnName' => 'foo']); - $metadata->mapField(['fieldName' => 'username', 'type' => 'string', 'columnName' => 'bar']); - $metadata->mapField(['fieldName' => 'name', 'type' => 'string', 'columnName' => 'baz']); + $metadata->addProperty('status', Type::getType('string'), ['columnName' => 'foo']); + $metadata->addProperty('username', Type::getType('string'), ['columnName' => 'bar']); + $metadata->addProperty('name', Type::getType('string'), ['columnName' => 'baz']); self::assertSame(['foo', 'baz'], $metadata->getColumnNames(['status', 'name'])); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php b/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php index 57e2e8cff49..39b6287565d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php @@ -65,8 +65,8 @@ public function testConfiguration() public function testGetColumnName() { $cm = $this->createClassMetadata(CmsUser::class); - $cm->mapField(['fieldName' => 'name', 'columnName' => '`name`']); - $cm->mapField(['fieldName' => 'id', 'columnName' => 'id']); + $cm->addProperty('name', Type::getType('string'), ['columnName' => '`name`']); + $cm->addProperty('id', Type::getType('string')); self::assertEquals('id' ,$this->strategy->getColumnName('id', $cm, $this->platform)); self::assertEquals('"name"' ,$this->strategy->getColumnName('name', $cm, $this->platform)); @@ -120,19 +120,21 @@ public function testIdentifierColumnNames() $cm1 = $this->createClassMetadata(CmsAddress::class); $cm2 = $this->createClassMetadata(CmsAddress::class); - $cm1->mapField( + $cm1->addProperty( + 'id', + Type::getType('string'), [ - 'id' => true, - 'fieldName' => 'id', - 'columnName' => '`id`', + 'id' => true, + 'columnName' => '`id`', ] ); - $cm2->mapField( + $cm2->addProperty( + 'id', + Type::getType('string'), [ - 'id' => true, - 'fieldName' => 'id', - 'columnName' => 'id', + 'id' => true, + 'columnName' => 'id', ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php index 7238eb15a05..4f3e615d044 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php @@ -1,116 +1,97 @@ setPrimaryTable( - [ - 'name' => 'company_person', - ] -); - -$metadata->mapField( - [ - 'id' => true, - 'fieldName' => 'id', - 'type' => 'integer', - ] -); +/* @var $metadata ClassMetadata */ +$metadata->setPrimaryTable(['name' => 'company_person']); -$metadata->mapField( - [ - 'fieldName' => 'zip', - 'length' => 50, - ] -); - -$metadata->mapField( - [ - 'fieldName' => 'city', - 'length' => 50, - ] -); +$metadata->addProperty('id', Type::getType('integer'), ['id' => true]); +$metadata->addProperty('zip', Type::getType('string'), ['length' => 50]); +$metadata->addProperty('city', Type::getType('string'), ['length' => 50]); $metadata->mapOneToOne( [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser', - 'joinColumns' => [['referencedColumnName' => 'id']] + 'fieldName' => 'user', + 'targetEntity' => 'CmsUser', + 'joinColumns' => [['referencedColumnName' => 'id']] ] ); $metadata->addNamedNativeQuery( [ - 'name' => 'find-all', - 'query' => 'SELECT id, country, city FROM cms_addresses', - 'resultSetMapping' => 'mapping-find-all', + 'name' => 'find-all', + 'query' => 'SELECT id, country, city FROM cms_addresses', + 'resultSetMapping' => 'mapping-find-all', ] ); $metadata->addNamedNativeQuery( [ - 'name' => 'find-by-id', - 'query' => 'SELECT * FROM cms_addresses WHERE id = ?', - 'resultClass' => CmsAddress::class, + 'name' => 'find-by-id', + 'query' => 'SELECT * FROM cms_addresses WHERE id = ?', + 'resultClass' => CmsAddress::class, ] ); $metadata->addNamedNativeQuery( [ - 'name' => 'count', - 'query' => 'SELECT COUNT(*) AS count FROM cms_addresses', - 'resultSetMapping' => 'mapping-count', + 'name' => 'count', + 'query' => 'SELECT COUNT(*) AS count FROM cms_addresses', + 'resultSetMapping' => 'mapping-count', ] ); $metadata->addSqlResultSetMapping( [ - 'name' => 'mapping-find-all', - 'columns' => [], - 'entities' => [ - [ - 'fields' => [ - [ - 'name' => 'id', - 'column' => 'id', - ], - [ - 'name' => 'city', - 'column' => 'city', - ], - [ - 'name' => 'country', - 'column' => 'country', - ], - ], - 'entityClass' => CmsAddress::class, + 'name' => 'mapping-find-all', + 'columns' => [], + 'entities' => [ + [ + 'fields' => [ + [ + 'name' => 'id', + 'column' => 'id', + ], + [ + 'name' => 'city', + 'column' => 'city', + ], + [ + 'name' => 'country', + 'column' => 'country', + ], + ], + 'entityClass' => CmsAddress::class, + ], ], - ], ] ); $metadata->addSqlResultSetMapping( [ - 'name' => 'mapping-without-fields', - 'columns' => [], - 'entities' => [ - [ - 'entityClass' => CmsAddress::class, - 'fields' => [] + 'name' => 'mapping-without-fields', + 'columns' => [], + 'entities' => [ + [ + 'entityClass' => CmsAddress::class, + 'fields' => [] + ] ] ] - ] ); $metadata->addSqlResultSetMapping( [ - 'name' => 'mapping-count', - 'columns' => [ - [ - 'name' => 'count', - ], - ] + 'name' => 'mapping-count', + 'columns' => [ + [ + 'name' => 'count', + ], + ] ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index 3a5ece746a9..0631e32d180 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -1,68 +1,52 @@ setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); $metadata->setPrimaryTable(['name' => 'cache_city']); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_IDENTITY); $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); $metadata->enableCache(['usage' => ClassMetadata::CACHE_USAGE_READ_ONLY]); -$metadata->mapField( - [ - 'fieldName' => 'id', - 'type' => 'integer', - 'id' => true, - ] -); - -$metadata->mapField( - [ - 'fieldName' => 'name', - 'type' => 'string', - ] -); - +$metadata->addProperty('id', Type::getType('integer'), ['id' => true]); +$metadata->addProperty('name', Type::getType('string')); $metadata->mapOneToOne( [ - 'fieldName' => 'state', - 'targetEntity' => State::class, - 'inversedBy' => 'cities', - 'joinColumns' => - [ - [ - 'name' => 'state_id', - 'referencedColumnName' => 'id', - ] - ] + 'fieldName' => 'state', + 'targetEntity' => State::class, + 'inversedBy' => 'cities', + 'joinColumns' => [ + [ + 'name' => 'state_id', + 'referencedColumnName' => 'id', + ], + ], ] ); -$metadata->enableAssociationCache('state', [ - 'usage' => ClassMetadata::CACHE_USAGE_READ_ONLY -] -); + +$metadata->enableAssociationCache('state', ['usage' => ClassMetadata::CACHE_USAGE_READ_ONLY]); $metadata->mapManyToMany( [ - 'fieldName' => 'travels', - 'targetEntity' => Travel::class, - 'mappedBy' => 'visitedCities', + 'fieldName' => 'travels', + 'targetEntity' => Travel::class, + 'mappedBy' => 'visitedCities', ] ); $metadata->mapOneToMany( [ - 'fieldName' => 'attractions', - 'targetEntity' => Attraction::class, - 'mappedBy' => 'city', - 'orderBy' => ['name' => 'ASC',], + 'fieldName' => 'attractions', + 'targetEntity' => Attraction::class, + 'mappedBy' => 'city', + 'orderBy' => ['name' => 'ASC',], ] ); -$metadata->enableAssociationCache('attractions', [ - 'usage' => ClassMetadata::CACHE_USAGE_READ_ONLY -] -); + +$metadata->enableAssociationCache('attractions', ['usage' => ClassMetadata::CACHE_USAGE_READ_ONLY]); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php index d3d4b7ca3fe..28cf1900de7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php @@ -1,40 +1,30 @@ setInheritanceType(ClassMetadata::INHERITANCE_TYPE_JOINED); $metadata->setTableName('company_contracts'); -$metadata->setDiscriminatorColumn( - [ - 'name' => 'discr', - 'type' => 'string', - ] -); - -$metadata->mapField( - [ - 'id' => true, - 'name' => 'id', - 'fieldName' => 'id', - ] -); -$metadata->mapField( +$metadata->setDiscriminatorColumn( [ - 'type' => 'boolean', - 'name' => 'completed', - 'fieldName' => 'completed', + 'name' => 'discr', + 'type' => 'string', ] ); $metadata->setDiscriminatorMap( [ - "fix" => "CompanyFixContract", - "flexible" => "CompanyFlexContract", - "flexultra" => "CompanyFlexUltraContract" + "fix" => "CompanyFixContract", + "flexible" => "CompanyFlexContract", + "flexultra" => "CompanyFlexUltraContract" ] ); +$metadata->addProperty('id', Type::getType('string'), ['id' => true]); +$metadata->addProperty('completed', Type::getType('boolean')); + $metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, 'CompanyContractListener', 'postPersistHandler'); $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, 'CompanyContractListener', 'prePersistHandler'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFixContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFixContract.php index 3ea44ee7399..bfcadcb5461 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFixContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFixContract.php @@ -1,9 +1,7 @@ mapField( - [ - 'type' => 'integer', - 'name' => 'fixPrice', - 'fieldName' => 'fixPrice', - ] -); +use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\DBAL\Types\Type; + +/* @var $metadata ClassMetadata */ +$metadata->addProperty('fixPrice', Type::getType('integer'), ['columnName' => 'fixPrice']); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexContract.php index 7cc2b5504c9..82838c77288 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexContract.php @@ -1,17 +1,8 @@ mapField( - [ - 'type' => 'integer', - 'name' => 'hoursWorked', - 'fieldName' => 'hoursWorked', - ] -); +use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\DBAL\Types\Type; -$metadata->mapField( - [ - 'type' => 'integer', - 'name' => 'pricePerHour', - 'fieldName' => 'pricePerHour', - ] -); +/* @var $metadata ClassMetadata */ +$metadata->addProperty('hoursWorked', Type::getType('integer'), ['columnName' => 'hoursWorked']); +$metadata->addProperty('pricePerHour', Type::getType('integer'), ['columnName' => 'pricePerHour']); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexUltraContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexUltraContract.php index 9e392416ded..a2affcd792b 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexUltraContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexUltraContract.php @@ -1,12 +1,11 @@ mapField( - [ - 'type' => 'integer', - 'name' => 'maxPrice', - 'fieldName' => 'maxPrice', - ] -); +use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\ClassMetadata; + +/* @var $metadata ClassMetadata */ +$metadata->addProperty('maxPrice', Type::getType('integer'), ['columnName' => 'maxPrice']); + $metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, 'CompanyContractListener', 'postPersistHandler'); $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, 'CompanyContractListener', 'prePersistHandler'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php index bcdb48aeb8f..0bc5fc8c697 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php @@ -1,16 +1,10 @@ mapField( - [ - 'id' => true, - 'fieldName' => 'id', - ] -); -$metadata->mapField( - [ - 'fieldName' => 'name' - ] -); +/* @var $metadata ClassMetadata */ +$metadata->addProperty('id', Type::getType('integer'), ['id' => true]); +$metadata->addProperty('name', Type::getType('string')); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php index 85128c9ae4a..8bc1067cdf9 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php @@ -1,21 +1,16 @@ setPrimaryTable( [ - 'name' => 'explicit_table', - 'schema' => 'explicit_schema', + 'name' => 'explicit_table', + 'schema' => 'explicit_schema', ] ); -$metadata->mapField( - [ - 'id' => true, - 'fieldName' => 'id', - ] -); +$metadata->addProperty('id', Type::getType('integer'), ['id' => true]); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php index fb2edfcfb26..f7e77b2cc42 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php @@ -1,20 +1,11 @@ setPrimaryTable(['name' => 'implicit_schema.implicit_table']); -$metadata->setPrimaryTable( - [ - 'name' => 'implicit_schema.implicit_table', - ] -); - -$metadata->mapField( - [ - 'id' => true, - 'fieldName' => 'id', - ] -); +$metadata->addProperty('id', Type::getType('integer'), ['id' => true]); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php index 6fc2d784111..e1bbe2c6f8d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php @@ -1,33 +1,32 @@ mapField( +/* @var $metadata ClassMetadata */ +$metadata->addProperty( + 'id', + Type::getType('integer'), [ - 'id' => true, - 'fieldName' => 'id', - 'type' => 'integer', - 'columnName' => 'user_id', - 'length' => 150, + 'id' => true, + 'columnName' => 'user_id', ] ); -$metadata->mapField( +$metadata->addProperty( + 'name', + Type::getType('string'), [ - 'fieldName' => 'name', - 'type' => 'string', - 'columnName'=> 'user_name', - 'nullable' => true, - 'unique' => false, - 'length' => 250, + 'columnName' => 'user_name', + 'nullable' => true, + 'unique' => false, + 'length' => 250, ] ); -$metadata->mapManyToMany( - [ - 'fieldName' => 'groups', - 'targetEntity' => 'DDC3579Group' - ] -); +$metadata->mapManyToMany(array( + 'fieldName' => 'groups', + 'targetEntity' => 'DDC3579Group' +)); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869ChequePayment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869ChequePayment.php index e97e16f9596..8cdc8aa0b0e 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869ChequePayment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869ChequePayment.php @@ -1,7 +1,7 @@ mapField( - [ - 'fieldName' => 'serialNumber', - 'type' => 'string', - ] -); + +use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\ClassMetadata; + +/* @var $metadata ClassMetadata */ +$metadata->addProperty('serialNumber', Type::getType('integer')); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.php index de9d8dae0ee..f6f35971eae 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.php @@ -1,7 +1,7 @@ mapField( - [ - 'fieldName' => 'creditCardNumber', - 'type' => 'string', - ] -); + +use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\ClassMetadata; + +/* @var $metadata ClassMetadata */ +$metadata->addProperty('creditCardNumber', Type::getType('string')); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php index 39fde7db784..24136c35294 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php @@ -1,22 +1,14 @@ mapField( - [ - 'id' => true, - 'fieldName' => 'id', - 'type' => 'integer', - 'columnName' => 'id', - ] -); -$metadata->mapField( - [ - 'fieldName' => 'value', - 'type' => 'float', - ] -); +/* @var $metadata ClassMetadata */ $metadata->isMappedSuperclass = true; + +$metadata->addProperty('id', Type::getType('integer'), ['id' => true]); +$metadata->addProperty('value', Type::getType('float')); + $metadata->setCustomRepositoryClass(DDC869PaymentRepository::class); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Class.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Class.php index 5c0492c5177..f8d4bc391c9 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Class.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Class.php @@ -1,15 +1,7 @@ mapField( - [ - 'id' => true, - 'fieldName' => 'id', - 'type' => 'integer', - 'columnName' => 'id', - ] -); - -//$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); +$metadata->addProperty('id', Type::getType('integer'), ['id' => true]); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php index 47f42249fdd..b2762a3555b 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php @@ -1,14 +1,12 @@ mapField( - [ - 'fieldName' => 'name', - 'type' => 'string', - ] -); + +/* @var $metadata ClassMetadata */ $metadata->isMappedSuperclass = true; + +$metadata->addProperty('name', Type::getType('string')); + $metadata->setCustomRepositoryClass(DDC889SuperClass::class); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php index a62ad8c8c27..9f1b8d8d73c 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php @@ -1,57 +1,59 @@ mapField( +/* @var $metadata ClassMetadata */ +$metadata->addProperty( + 'id', + Type::getType('integer'), [ - 'id' => true, - 'fieldName' => 'id', - 'type' => 'integer', - 'columnName' => 'user_id', - 'length' => 150, + 'id' => true, + 'columnName' => 'user_id', ] ); -$metadata->mapField( + +$metadata->addProperty( + 'name', + Type::getType('string'), [ - 'fieldName' => 'name', - 'type' => 'string', - 'columnName'=> 'user_name', - 'nullable' => true, - 'unique' => false, - 'length' => 250, + 'columnName'=> 'user_name', + 'nullable' => true, + 'unique' => false, + 'length' => 250, ] ); $metadata->mapManyToOne( [ - 'fieldName' => 'address', - 'targetEntity' => 'DDC964Address', - 'cascade' => ['persist','merge'], - 'joinColumn' => ['name'=>'address_id', 'referencedColumnMame'=>'id'], + 'fieldName' => 'address', + 'targetEntity' => 'DDC964Address', + 'cascade' => ['persist','merge'], + 'joinColumn' => ['name'=>'address_id', 'referencedColumnMame'=>'id'], ] ); $metadata->mapManyToMany( [ - 'fieldName' => 'groups', - 'targetEntity' => 'DDC964Group', - 'inversedBy' => 'users', - 'cascade' => ['persist','merge','detach'], - 'joinTable' => [ - 'name' => 'ddc964_users_groups', - 'joinColumns' => [ - [ - 'name'=>'user_id', - 'referencedColumnName'=>'id', - ] - ], - 'inverseJoinColumns'=> [ - [ - 'name'=>'group_id', - 'referencedColumnName'=>'id', + 'fieldName' => 'groups', + 'targetEntity' => 'DDC964Group', + 'inversedBy' => 'users', + 'cascade' => ['persist','merge','detach'], + 'joinTable' => [ + 'name' => 'ddc964_users_groups', + 'joinColumns' => [ + [ + 'name' => 'user_id', + 'referencedColumnName' => 'id', + ] + ], + 'inverseJoinColumns' => [ + [ + 'name' => 'group_id', + 'referencedColumnName' => 'id', + ] ] ] - ] ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php index 2634d6f3ace..b358149e9aa 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php @@ -1,5 +1,6 @@ $metadata->getTableName(), ] ); + $metadata->setDiscriminatorMap( [ 'cat' => Cat::class, 'dog' => Dog::class, ] ); + $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); -$metadata->mapField( + +$metadata->addProperty( + 'id', + Type::getType('string'), [ - 'fieldName' => 'id', - 'type' => 'string', - 'length' => NULL, - 'precision' => 0, - 'scale' => 0, - 'nullable' => false, - 'unique' => false, - 'id' => true, - 'columnName' => 'id', - ]); + 'length' => NULL, + 'nullable' => false, + 'unique' => false, + 'id' => true, + ] +); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); + $metadata->setCustomGeneratorDefinition(["class" => "stdClass"]); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php index 5e2b675fcd6..eefc3fe5964 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php @@ -1,25 +1,29 @@ setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); + $metadata->setPrimaryTable( [ - 'indexes' => [ - ['columns' => ['content'], 'flags' => ['fulltext'], 'options'=> ['where' => 'content IS NOT NULL']] - ] + 'indexes' => [ + [ + 'columns' => ['content'], + 'flags' => ['fulltext'], + 'options' => ['where' => 'content IS NOT NULL'], + ], + ] ] ); -$metadata->mapField( +$metadata->addProperty( + 'content', + Type::getType('text'), [ - 'fieldName' => 'content', - 'type' => 'text', - 'scale' => 0, - 'length' => NULL, - 'unique' => false, - 'nullable' => false, - 'precision' => 0, - 'columnName' => 'content', + 'length' => NULL, + 'unique' => false, + 'nullable' => false, ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php index 33a4c62e602..5c80bb8b5a6 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php @@ -1,20 +1,22 @@ mapField( +/* @var $metadata ClassMetadata */ +$metadata->addProperty( + 'id', + Type::getType('string'), [ - 'id' => true, - 'fieldName' => 'id', - 'columnDefinition' => 'INT unsigned NOT NULL', + 'id' => true, + 'columnDefinition' => 'INT unsigned NOT NULL', ] ); -$metadata->mapField( - [ - 'fieldName' => 'value', - 'columnDefinition' => 'VARCHAR(255) NOT NULL' - ] +$metadata->addProperty( + 'value', + Type::getType('string'), + ['columnDefinition' => 'VARCHAR(255) NOT NULL'] ); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php index 59f06d8a760..3e685722ce7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php @@ -1,18 +1,15 @@ mapField( - [ - 'id' => true, - 'fieldName' => 'id', - ] -); +/* @var $metadata ClassMetadata */ +$metadata->addProperty('id', Type::getType('string'), ['id' => true]); $metadata->setDiscriminatorColumn( [ - 'name' => "dtype", - 'columnDefinition' => "ENUM('ONE','TWO')" + 'name' => "dtype", + 'columnDefinition' => "ENUM('ONE','TWO')" ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index 1b8ae73fc8d..653f0927b6f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -1,145 +1,142 @@ setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); -$metadata->setPrimaryTable( - [ - 'name' => 'cms_users', - ] -); +$metadata->setPrimaryTable(['name' => 'cms_users']); $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); + $metadata->addLifecycleCallback('doStuffOnPrePersist', 'prePersist'); $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); $metadata->addLifecycleCallback('doStuffOnPostPersist', 'postPersist'); + $metadata->addNamedQuery( [ - 'name' => 'all', - 'query' => 'SELECT u FROM __CLASS__ u' + 'name' => 'all', + 'query' => 'SELECT u FROM __CLASS__ u' ] ); -$metadata->mapField( + +$metadata->addProperty( + 'id', + Type::getType('integer'), [ - 'id' => true, - 'fieldName' => 'id', - 'type' => 'integer', - 'columnName' => 'id', - 'options' => ['foo' => 'bar', 'unsigned' => false], + 'id' => true, + 'options' => ['foo' => 'bar', 'unsigned' => false], ] ); -$metadata->mapField( + +$metadata->addProperty( + 'name', + Type::getType('string'), [ - 'fieldName' => 'name', - 'type' => 'string', - 'length' => 50, - 'unique' => true, - 'nullable' => true, - 'columnName' => 'name', - 'options' => ['foo' => 'bar', 'baz' => ['key' => 'val'], 'fixed' => false], + 'length' => 50, + 'unique' => true, + 'nullable' => true, + 'columnName' => 'name', + 'options' => [ + 'foo' => 'bar', + 'baz' => ['key' => 'val'], + 'fixed' => false + ], ] ); -$metadata->mapField( + +$metadata->addProperty( + 'email', + Type::getType('string'), [ - 'fieldName' => 'email', - 'type' => 'string', - 'columnName' => 'user_email', - 'columnDefinition' => 'CHAR(32) NOT NULL', + 'columnName' => 'user_email', + 'columnDefinition' => 'CHAR(32) NOT NULL', ] ); + $mapping = ['fieldName' => 'version', 'type' => 'integer']; $metadata->setVersionMapping($mapping); -$metadata->mapField($mapping); +$metadata->addProperty('version', Type::getType('integer')); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); + $metadata->mapOneToOne( [ - 'fieldName' => 'address', - 'targetEntity' => Address::class, - 'cascade' => - [ - 0 => 'remove', - ], - 'mappedBy' => NULL, - 'inversedBy' => 'user', - 'joinColumns' => - [ - 0 => - [ - 'name' => 'address_id', - 'referencedColumnName' => 'id', - 'onDelete' => 'CASCADE', - ], - ], - 'orphanRemoval' => false, + 'fieldName' => 'address', + 'targetEntity' => Address::class, + 'cascade' => [0 => 'remove'], + 'mappedBy' => null, + 'inversedBy' => 'user', + 'joinColumns' => [ + 0 => [ + 'name' => 'address_id', + 'referencedColumnName' => 'id', + 'onDelete' => 'CASCADE', + ], + ], + 'orphanRemoval' => false, ] ); + $metadata->mapOneToMany( [ - 'fieldName' => 'phonenumbers', - 'targetEntity' => Phonenumber::class, - 'cascade' => - [ - 1 => 'persist', - ], - 'mappedBy' => 'user', - 'orphanRemoval' => true, - 'orderBy' => - [ - 'number' => 'ASC', - ], + 'fieldName' => 'phonenumbers', + 'targetEntity' => Phonenumber::class, + 'cascade' => [1 => 'persist'], + 'mappedBy' => 'user', + 'orphanRemoval' => true, + 'orderBy' => ['number' => 'ASC'], ] ); + $metadata->mapManyToMany( [ - 'fieldName' => 'groups', - 'targetEntity' => Group::class, - 'cascade' => - [ - 0 => 'remove', - 1 => 'persist', - 2 => 'refresh', - 3 => 'merge', - 4 => 'detach', - ], - 'mappedBy' => NULL, - 'joinTable' => - [ - 'name' => 'cms_users_groups', - 'joinColumns' => - [ - 0 => - [ - 'name' => 'user_id', - 'referencedColumnName' => 'id', - 'unique' => false, - 'nullable' => false, - ], - ], - 'inverseJoinColumns' => - [ - 0 => - [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - 'columnDefinition' => 'INT NULL', - ], - ], - ], - 'orderBy' => NULL, + 'fieldName' => 'groups', + 'targetEntity' => Group::class, + 'cascade' => [ + 0 => 'remove', + 1 => 'persist', + 2 => 'refresh', + 3 => 'merge', + 4 => 'detach', + ], + 'mappedBy' => null, + 'joinTable' => [ + 'name' => 'cms_users_groups', + 'joinColumns' => [ + 0 => [ + 'name' => 'user_id', + 'referencedColumnName' => 'id', + 'unique' => false, + 'nullable' => false, + ], + ], + 'inverseJoinColumns' => [ + 0 => [ + 'name' => 'group_id', + 'referencedColumnName' => 'id', + 'columnDefinition' => 'INT NULL', + ], + ], + ], + 'orderBy' => null, ] ); + $metadata->table['options'] = [ 'foo' => 'bar', 'baz' => ['key' => 'val'] ]; + $metadata->table['uniqueConstraints'] = [ 'search_idx' => ['columns' => ['name', 'user_email'], 'options' => ['where' => 'name IS NOT NULL']], ]; + $metadata->table['indexes'] = [ 'name_idx' => ['columns' => ['name']], 0 => ['columns' => ['user_email']] ]; + $metadata->setSequenceGeneratorDefinition( [ 'sequenceName' => 'tablename_seq', diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 852f6b88bc5..211932f6dc1 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -5,6 +5,7 @@ use Doctrine\Common\Annotations\AnnotationReader; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; @@ -67,41 +68,34 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $metadata->table['uniqueConstraints']['name_uniq'] = ['columns' => ['name']]; $metadata->table['indexes']['status_idx'] = ['columns' => ['status']]; - $metadata->mapField( + $metadata->addProperty( + 'name', + Type::getType('string'), [ - 'fieldName' => 'name', - 'type' => 'string', - 'length' => null, - 'scale' => 0, - 'precision' => 0, - 'nullable' => false, - 'unique' => false, + 'length' => null, + 'nullable' => false, + 'unique' => false, ] ); - $metadata->mapField( + $metadata->addProperty( + 'status', + Type::getType('string'), [ - 'fieldName' => 'status', - 'type' => 'string', - 'length' => null, - 'scale' => 0, - 'precision' => 0, - 'nullable' => false, - 'unique' => false, - 'options' => ['default' => 'published'], + 'length' => null, + 'nullable' => false, + 'unique' => false, + 'options' => ['default' => 'published'], ] ); - $metadata->mapField( + $metadata->addProperty( + 'id', + Type::getType('integer'), [ - 'fieldName' => 'id', - 'type' => 'integer', - 'id' => true, - 'length' => null, - 'scale' => 0, - 'precision' => 0, - 'nullable' => false, - 'unique' => false, + 'id' => true, + 'nullable' => false, + 'unique' => false, ] ); @@ -160,9 +154,9 @@ public function generateBookEntityFixture(array $embeddedClasses = []) foreach ($embeddedClasses as $fieldName => $embeddedClass) { $metadata->mapEmbedded( [ - 'fieldName' => $fieldName, - 'class' => $embeddedClass->name, - 'columnPrefix' => null, + 'fieldName' => $fieldName, + 'class' => $embeddedClass->name, + 'columnPrefix' => null, ] ); } @@ -177,22 +171,22 @@ private function generateEntityTypeFixture(array $field) $metadata = new ClassMetadata($this->_namespace . '\EntityType'); $metadata->table['name'] = 'entity_type'; - $metadata->mapField( + $metadata->addProperty( + 'id', + Type::getType('integer'), [ - 'fieldName' => 'id', - 'type' => 'integer', 'id' => true, 'nullable' => false, 'unique' => false, ] ); - $metadata->mapField( + $metadata->addProperty( + $field['fieldName'], + Type::getType($field['dbType']), [ - 'fieldName' => $field['fieldName'], - 'type' => $field['dbType'], - 'nullable' => false, - 'unique' => false, + 'nullable' => false, + 'unique' => false, ] ); @@ -211,46 +205,46 @@ private function generateIsbnEmbeddableFixture(array $embeddedClasses = [], $col $metadata = new ClassMetadata($this->_namespace . '\EntityGeneratorIsbn'); $metadata->isEmbeddedClass = true; - $metadata->mapField( + $metadata->addProperty( + 'prefix', + Type::getType('integer'), [ - 'fieldName' => 'prefix', - 'type' => 'integer', 'nullable' => false, 'unique' => false, ] ); - $metadata->mapField( + $metadata->addProperty( + 'groupNumber', + Type::getType('integer'), [ - 'fieldName' => 'groupNumber', - 'type' => 'integer', 'nullable' => false, 'unique' => false, ] ); - $metadata->mapField( + $metadata->addProperty( + 'publisherNumber', + Type::getType('integer'), [ - 'fieldName' => 'publisherNumber', - 'type' => 'integer', 'nullable' => false, 'unique' => false, ] ); - $metadata->mapField( + $metadata->addProperty( + 'titleNumber', + Type::getType('integer'), [ - 'fieldName' => 'titleNumber', - 'type' => 'integer', 'nullable' => false, 'unique' => false, ] ); - $metadata->mapField( + $metadata->addProperty( + 'checkDigit', + Type::getType('integer'), [ - 'fieldName' => 'checkDigit', - 'type' => 'integer', 'nullable' => false, 'unique' => false, ] @@ -280,37 +274,37 @@ private function generateTestEmbeddableFixture() $metadata->isEmbeddedClass = true; - $metadata->mapField( + $metadata->addProperty( + 'field1', + Type::getType('integer'), [ - 'fieldName' => 'field1', - 'type' => 'integer', 'nullable' => false, 'unique' => false, ] ); - $metadata->mapField( + $metadata->addProperty( + 'field2', + Type::getType('integer'), [ - 'fieldName' => 'field2', - 'type' => 'integer', 'nullable' => true, 'unique' => false, ] ); - $metadata->mapField( + $metadata->addProperty( + 'field3', + Type::getType('datetime'), [ - 'fieldName' => 'field3', - 'type' => 'datetime', 'nullable' => false, 'unique' => false, ] ); - $metadata->mapField( + $metadata->addProperty( + 'field4', + Type::getType('datetime'), [ - 'fieldName' => 'field4', - 'type' => 'datetime', 'nullable' => true, 'unique' => false, ] @@ -453,7 +447,7 @@ public function testEntityUpdatingWorks() { $metadata = $this->generateBookEntityFixture(['isbn' => $this->generateIsbnEmbeddableFixture()]); - $metadata->mapField(['fieldName' => 'test', 'type' => 'string']); + $metadata->addProperty('test', Type::getType('string')); $testEmbeddableMetadata = $this->generateTestEmbeddableFixture(); @@ -696,8 +690,10 @@ public function testGenerateEntityWithSequenceGenerator() { $metadata = new ClassMetadata($this->_namespace . '\DDC1784Entity'); - $metadata->mapField(['fieldName' => 'id', 'type' => 'integer', 'id' => true]); + $metadata->addProperty('id', Type::getType('integer'), ['id' => true]); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); + $metadata->setSequenceGeneratorDefinition( [ 'sequenceName' => 'DDC1784_ID_SEQ', @@ -731,8 +727,10 @@ public function testGenerateEntityWithMultipleInverseJoinColumns() { $metadata = new ClassMetadata($this->_namespace . '\DDC2079Entity'); - $metadata->mapField(['fieldName' => 'id', 'type' => 'integer', 'id' => true]); + $metadata->addProperty('id', Type::getType('integer'), array('id' => true)); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); + $metadata->mapManyToMany( [ 'fieldName' => 'centroCustos', diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php index 618406dc0cb..085146a7aa2 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Tools\Export; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Tools\Export\Driver\XmlExporter; @@ -29,14 +30,7 @@ public function testSequenceGenerator() { $exporter = new XmlExporter(); $metadata = new ClassMetadata('entityTest'); - $metadata->mapField( - [ - "fieldName" => 'id', - "type" => 'integer', - "columnName" => 'id', - "id" => true, - ] - ); + $metadata->addProperty('id', Type::getType('integer'), ["id" => true]); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); $metadata->setSequenceGeneratorDefinition( @@ -75,15 +69,15 @@ public function testFieldOptionsExport() { $exporter = new XmlExporter(); $metadata = new ClassMetadata('entityTest'); - $metadata->mapField( + $metadata->addProperty( + 'myField', + Type::getType('string'), [ - "fieldName" => 'myField', - "type" => 'string', - "columnName" => 'my_field', - "options" => [ - "default" => "default_string", - "comment" => "The comment for the field", - ], + "columnName" => 'my_field', + "options" => [ + "default" => "default_string", + "comment" => "The comment for the field", + ], ] ); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php index db4c0985e4b..cc86a56d2df 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php @@ -1,151 +1,137 @@ setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); + $metadata->setPrimaryTable( [ - 'name' => 'cms_users', - 'options' => ['engine' => 'MyISAM', 'foo' => ['bar' => 'baz']], + 'name' => 'cms_users', + 'options' => [ + 'engine' => 'MyISAM', + 'foo' => ['bar' => 'baz'] + ], ] ); $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); + $metadata->addLifecycleCallback('doStuffOnPrePersist', 'prePersist'); $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); $metadata->addLifecycleCallback('doStuffOnPostPersist', 'postPersist'); -$metadata->mapField( - [ - 'id' => true, - 'fieldName' => 'id', - 'type' => 'integer', - 'columnName' => 'id', - ] -); -$metadata->mapField( + +$metadata->addProperty('id', Type::getType('integer'), ['id' => true]); + +$metadata->addProperty( + 'name', + Type::getType('string'), [ - 'fieldName' => 'name', - 'type' => 'string', - 'length' => 50, - 'unique' => true, - 'nullable' => true, - 'columnName' => 'name', + 'length' => 50, + 'unique' => true, + 'nullable' => true, + 'columnName' => 'name', ] ); -$metadata->mapField( + +$metadata->addProperty( + 'email', + Type::getType('string'), [ - 'fieldName' => 'email', - 'type' => 'string', - 'columnName' => 'user_email', - 'columnDefinition' => 'CHAR(32) NOT NULL', + 'columnName' => 'user_email', + 'columnDefinition' => 'CHAR(32) NOT NULL', ] ); -$metadata->mapField( - [ - 'fieldName' => 'age', - 'type' => 'integer', - 'options' => ["unsigned"=>true], - ] + +$metadata->addProperty( + 'age', + Type::getType('integer'), + ['options' => ['unsigned' => true]] ); + $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); + $metadata->mapManyToOne( [ - 'fieldName' => 'mainGroup', - 'targetEntity' => Export\Group::class, + 'fieldName' => 'mainGroup', + 'targetEntity' => Export\Group::class, ] ); + $metadata->mapOneToOne( [ - 'fieldName' => 'address', - 'targetEntity' => Export\Address::class, - 'inversedBy' => 'user', - 'cascade' => - [ - 0 => 'persist', - ], - 'mappedBy' => NULL, - 'joinColumns' => - [ - 0 => - [ - 'name' => 'address_id', - 'referencedColumnName' => 'id', - 'onDelete' => 'CASCADE', - ], - ], - 'orphanRemoval' => true, - 'fetch' => ClassMetadata::FETCH_EAGER, + 'fieldName' => 'address', + 'targetEntity' => Export\Address::class, + 'inversedBy' => 'user', + 'cascade' => ['persist'], + 'mappedBy' => null, + 'joinColumns' => [ + 0 => [ + 'name' => 'address_id', + 'referencedColumnName' => 'id', + 'onDelete' => 'CASCADE', + ], + ], + 'orphanRemoval' => true, + 'fetch' => ClassMetadata::FETCH_EAGER, ] ); + $metadata->mapOneToOne( [ - 'fieldName' => 'cart', - 'targetEntity' => Export\Cart::class, - 'mappedBy' => 'user', - 'cascade' => - [ - 0 => 'persist', - ], - 'inversedBy' => NULL, - 'orphanRemoval' => false, - 'fetch' => ClassMetadata::FETCH_EAGER, + 'fieldName' => 'cart', + 'targetEntity' => Export\Cart::class, + 'mappedBy' => 'user', + 'cascade' => [0 => 'persist'], + 'inversedBy' => null, + 'orphanRemoval' => false, + 'fetch' => ClassMetadata::FETCH_EAGER, ] ); + $metadata->mapOneToMany( [ - 'fieldName' => 'phonenumbers', - 'targetEntity' => Export\Phonenumber::class, - 'cascade' => - [ - 1 => 'persist', - 2 => 'merge', - ], - 'mappedBy' => 'user', - 'orphanRemoval' => true, - 'fetch' => ClassMetadata::FETCH_LAZY, - 'orderBy' => - [ - 'number' => 'ASC', - ], + 'fieldName' => 'phonenumbers', + 'targetEntity' => Export\Phonenumber::class, + 'cascade' => ['persist', 'merge'], + 'mappedBy' => 'user', + 'orphanRemoval' => true, + 'fetch' => ClassMetadata::FETCH_LAZY, + 'orderBy' => ['number' => 'ASC'], ] ); + $metadata->mapManyToMany( [ - 'fieldName' => 'groups', - 'targetEntity' => Export\Group::class, - 'fetch' => ClassMetadata::FETCH_EXTRA_LAZY, - 'cascade' => - [ - 0 => 'remove', - 1 => 'persist', - 2 => 'refresh', - 3 => 'merge', - 4 => 'detach', - ], - 'mappedBy' => NULL, - 'joinTable' => - [ - 'name' => 'cms_users_groups', - 'joinColumns' => - [ - 0 => - [ - 'name' => 'user_id', - 'referencedColumnName' => 'id', - 'unique' => false, - 'nullable' => false, - ], - ], - 'inverseJoinColumns' => - [ - 0 => - [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - 'columnDefinition' => 'INT NULL', - ], - ], - ], - 'orderBy' => NULL, + 'fieldName' => 'groups', + 'targetEntity' => Export\Group::class, + 'fetch' => ClassMetadata::FETCH_EXTRA_LAZY, + 'cascade' => [ + 0 => 'remove', + 1 => 'persist', + 2 => 'refresh', + 3 => 'merge', + 4 => 'detach', + ], + 'mappedBy' => null, + 'joinTable' => [ + 'name' => 'cms_users_groups', + 'joinColumns' => [ + 0 => [ + 'name' => 'user_id', + 'referencedColumnName' => 'id', + 'unique' => false, + 'nullable' => false, + ], + ], + 'inverseJoinColumns' => [ + 0 => [ + 'name' => 'group_id', + 'referencedColumnName' => 'id', + 'columnDefinition' => 'INT NULL', + ], + ], + ], + 'orderBy' => NULL, ] ); From 918a8d8c1842bf80f4a48bf749fb6c3ab808fca4 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 20 May 2016 03:04:33 +0000 Subject: [PATCH 023/275] Added InheritedFieldMetadata and got rid of most fieldMappings in the codebase --- .../ORM/Cache/DefaultEntityHydrator.php | 6 +- .../Internal/Hydration/AbstractHydrator.php | 6 +- .../ORM/Mapping/AnsiQuoteStrategy.php | 2 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 103 ++++++++-------- .../ORM/Mapping/ClassMetadataFactory.php | 24 ++-- .../ORM/Mapping/DefaultQuoteStrategy.php | 6 +- .../ORM/Mapping/Driver/DatabaseDriver.php | 2 +- .../ORM/Mapping/InheritedFieldMetadata.php | 8 ++ .../Entity/BasicEntityPersister.php | 96 +++++++-------- .../Entity/JoinedSubclassPersister.php | 39 ++++--- .../Entity/SingleTablePersister.php | 5 +- .../Query/AST/Functions/IdentityFunction.php | 6 +- .../Query/Exec/MultiTableUpdateExecutor.php | 5 +- lib/Doctrine/ORM/Query/Parser.php | 4 +- .../ORM/Query/ResultSetMappingBuilder.php | 4 +- lib/Doctrine/ORM/Query/SqlWalker.php | 44 +++---- .../Command/MappingDescribeCommand.php | 14 ++- lib/Doctrine/ORM/Tools/EntityGenerator.php | 110 +++++++++--------- .../ORM/Tools/Export/Driver/XmlExporter.php | 83 ++++++------- .../ORM/Tools/Export/Driver/YamlExporter.php | 35 +++--- .../Tools/Pagination/CountOutputWalker.php | 14 +-- .../Pagination/LimitSubqueryOutputWalker.php | 26 ++--- .../Tools/Pagination/LimitSubqueryWalker.php | 2 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 110 +++++++++--------- lib/Doctrine/ORM/UnitOfWork.php | 11 +- lib/Doctrine/ORM/Utility/PersisterHelper.php | 8 +- ...trine.Tests.Models.DDC3579.DDC3579User.php | 6 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 2 +- 28 files changed, 389 insertions(+), 392 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/InheritedFieldMetadata.php diff --git a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php index 7d72464dc01..a468b92880a 100644 --- a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php @@ -99,10 +99,8 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e unset($data[$name]); foreach ($associationIds as $fieldName => $fieldValue) { - if (isset($targetClassMetadata->fieldMappings[$fieldName])) { - $fieldMapping = $targetClassMetadata->fieldMappings[$fieldName]; - - $data[$owningAssociation['targetToSourceKeyColumns'][$fieldMapping['columnName']]] = $fieldValue; + if (($property = $targetClassMetadata->getProperty($fieldName)) !== null) { + $data[$owningAssociation['targetToSourceKeyColumns'][$property->getColumnName()]] = $fieldValue; continue; } diff --git a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php index 89865d394fc..6977a4673a0 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php @@ -372,12 +372,12 @@ protected function hydrateColumnInfo($key) case (isset($this->_rsm->fieldMappings[$key])): $classMetadata = $this->getClassMetadata($this->_rsm->declaringClasses[$key]); $fieldName = $this->_rsm->fieldMappings[$key]; - $fieldMapping = $classMetadata->fieldMappings[$fieldName]; + $property = $classMetadata->getProperty($fieldName); return $this->_cache[$key] = [ - 'isIdentifier' => in_array($fieldName, $classMetadata->identifier), + 'isIdentifier' => $property->isPrimaryKey(), 'fieldName' => $fieldName, - 'type' => $fieldMapping['type'], + 'type' => $property->getType(), 'dqlAlias' => $this->_rsm->columnOwnerMap[$key], ]; diff --git a/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php b/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php index d18c8be7c72..db0e2ab0c84 100644 --- a/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php @@ -35,7 +35,7 @@ class AnsiQuoteStrategy implements QuoteStrategy */ public function getColumnName($fieldName, ClassMetadata $class, AbstractPlatform $platform) { - return $class->fieldMappings[$fieldName]['columnName']; + return $class->getProperty($fieldName)->getColumnName(); } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index eb8f9aa23db..e39e8fa0e1a 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -348,7 +348,7 @@ class ClassMetadata implements ClassMetadataInterface /** * @var array */ - public $properties = []; + protected $properties = []; /** * READ-ONLY: The field mappings of the class. @@ -799,7 +799,7 @@ public function __sleep() // This metadata is always serialized/cached. $serialized = [ 'associationMappings', - 'fieldMappings', + 'properties', 'fieldNames', //'embeddedClasses', 'identifier', @@ -935,7 +935,7 @@ public function wakeupReflection($reflService) $this->reflFields[$property] = $fieldRefl; }*/ - foreach ($this->fieldMappings as $field => $mapping) { + foreach ($this->properties as $field => $property) { /*if (isset($mapping['declaredField']) && isset($parentReflFields[$mapping['declaredField']])) { $this->reflFields[$field] = new ReflectionEmbeddedProperty( $parentReflFields[$mapping['declaredField']], @@ -945,7 +945,7 @@ public function wakeupReflection($reflService) continue; }*/ - $this->reflFields[$field] = $reflService->getAccessibleProperty($mapping['declaringClass']->name, $field); + $this->reflFields[$field] = $reflService->getAccessibleProperty($property->getDeclaringClass()->name, $field); } foreach ($this->associationMappings as $field => $mapping) { @@ -1193,8 +1193,8 @@ public function isNullable($fieldName) */ public function getColumnName($fieldName) { - return isset($this->fieldMappings[$fieldName]) - ? $this->fieldMappings[$fieldName]['columnName'] + return isset($this->properties[$fieldName]) + ? $this->properties[$fieldName]->getColumnName() : $fieldName; } @@ -1204,17 +1204,17 @@ public function getColumnName($fieldName) * * @param string $fieldName The field name. * - * @return array The field mapping. + * @return PropertyMetadata The field mapping. * * @throws MappingException */ public function getFieldMapping($fieldName) { - if ( ! isset($this->fieldMappings[$fieldName])) { + if ( ! isset($this->properties[$fieldName])) { throw MappingException::mappingNotFound($this->name, $fieldName); } - return $this->fieldMappings[$fieldName]; + return $this->properties[$fieldName]; } /** @@ -1840,7 +1840,7 @@ public function getIdentifier() */ public function hasField($fieldName) { - return isset($this->fieldMappings[$fieldName]); + return isset($this->properties[$fieldName]); } /** @@ -1869,8 +1869,8 @@ public function getIdentifierColumnNames() $columnNames = []; foreach ($this->identifier as $idProperty) { - if (isset($this->fieldMappings[$idProperty])) { - $columnNames[] = $this->fieldMappings[$idProperty]['columnName']; + if (($property = $this->getProperty($idProperty)) !== null) { + $columnNames[] = $property->getColumnName(); continue; } @@ -2010,8 +2010,8 @@ public function isIdentifierUuid() */ public function getTypeOfField($fieldName) { - return isset($this->fieldMappings[$fieldName]) - ? $this->fieldMappings[$fieldName]['type'] + return isset($this->properties[$fieldName]) + ? $this->properties[$fieldName]->getType() : null; } @@ -2154,48 +2154,31 @@ public function setAssociationOverride($fieldName, array $overrideMapping) * Sets the override for a mapped field. * * @param string $fieldName + * @param Type $type * @param array $overrideMapping * * @return void * * @throws MappingException */ - public function setAttributeOverride($fieldName, array $overrideMapping) + public function setAttributeOverride($fieldName, Type $type, array $overrideMapping) { - if ( ! isset($this->fieldMappings[$fieldName])) { - throw MappingException::invalidOverrideFieldName($this->name, $fieldName); - } - - $mapping = $this->fieldMappings[$fieldName]; - - if (isset($mapping['id'])) { - $overrideMapping['id'] = $mapping['id']; - } + $property = $this->getProperty($fieldName); - $type = isset($overrideMapping['type']) - ? $overrideMapping['type'] - : $mapping['type']; - - if ( ! ($type instanceof Type)) { - $type = Type::getType($type); - } - - $overrideMapping['type'] = $type; - - if ( ! isset($overrideMapping['fieldName'])) { - $overrideMapping['fieldName'] = $mapping['fieldName']; + if ( ! $property) { + throw MappingException::invalidOverrideFieldName($this->name, $fieldName); } - if ($overrideMapping['type'] !== $mapping['type']) { + if ($type !== $property->getType()) { throw MappingException::invalidOverrideFieldType($this->name, $fieldName); } - unset($this->fieldMappings[$fieldName]); - unset($this->fieldNames[$mapping['columnName']]); + $overrideMapping['id'] = $property->isPrimaryKey(); - $this->validateAndCompleteFieldMapping($overrideMapping); + unset($this->properties[$fieldName]); + unset($this->fieldNames[$property->getColumnName()]); - $this->fieldMappings[$fieldName] = $overrideMapping; + $this->addProperty($fieldName, $type, $overrideMapping); } /** @@ -2217,7 +2200,7 @@ public function isRootEntity() */ public function isInheritedField($fieldName) { - return isset($this->fieldMappings[$fieldName]['inherited']); + return $this->properties[$fieldName] instanceof InheritedFieldMetadata; } /** @@ -2320,6 +2303,24 @@ private function isInheritanceType($type) || $type == self::INHERITANCE_TYPE_TABLE_PER_CLASS; } + /** + * @return array + */ + public function getProperties() + { + return $this->properties; + } + + /** + * @param string $fieldName + * + * @return PropertyMetadata|null + */ + public function getProperty($fieldName) + { + return $this->properties[$fieldName] ?? null; + } + /** * @param string $fieldName * @param Type $type @@ -2394,8 +2395,8 @@ public function addInheritedAssociationMapping(array $mapping/*, $owningClassNam */ public function addInheritedFieldMapping(array $fieldMapping) { - $this->fieldMappings[$fieldMapping['fieldName']] = $fieldMapping; - $this->fieldNames[$fieldMapping['columnName']] = $fieldMapping['fieldName']; + //$this->fieldMappings[$fieldMapping['fieldName']] = $fieldMapping; + //$this->fieldNames[$fieldMapping['columnName']] = $fieldMapping['fieldName']; } /** @@ -3097,7 +3098,7 @@ public function markReadOnly() */ public function getFieldNames() { - return array_keys($this->fieldMappings); + return array_keys($this->properties); } /** @@ -3144,10 +3145,8 @@ public function getQuotedIdentifierColumnNames($platform) $quotedColumnNames = []; foreach ($this->identifier as $idProperty) { - if (isset($this->fieldMappings[$idProperty])) { - $quotedColumnNames[] = isset($this->fieldMappings[$idProperty]['quoted']) - ? $platform->quoteIdentifier($this->fieldMappings[$idProperty]['columnName']) - : $this->fieldMappings[$idProperty]['columnName']; + if (isset($this->properties[$idProperty])) { + $quotedColumnNames[] = $this->getQuotedColumnName($idProperty, $platform); continue; } @@ -3181,9 +3180,7 @@ function ($joinColumn) use ($platform) { */ public function getQuotedColumnName($field, $platform) { - return isset($this->fieldMappings[$field]['quoted']) - ? $platform->quoteIdentifier($this->fieldMappings[$field]['columnName']) - : $this->fieldMappings[$field]['columnName']; + return $platform->quoteIdentifier($this->properties[$field]->getColumnName()); } /** @@ -3347,7 +3344,7 @@ public function inlineEmbeddable($property, ClassMetadata $embeddable) */ private function assertFieldNotMapped($fieldName) { - if (isset($this->fieldMappings[$fieldName]) + if (isset($this->properties[$fieldName]) || isset($this->associationMappings[$fieldName]) /*|| isset($this->embeddedClasses[$fieldName])*/) { throw MappingException::duplicateFieldMapping($this->name, $fieldName); diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index d4333d21216..30c542161ed 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -272,8 +272,8 @@ protected function completeRuntimeMetadata($class, $parent) $tableName = $class->getTableName(); // Resolve column table names - foreach ($class->fieldMappings as &$mapping) { - $mapping['tableName'] = $mapping['tableName'] ?? $tableName; + foreach ($class->getProperties() as $property) { + $property->setTableName($property->getTableName() ?? $tableName); } // Resolve association join column table names @@ -445,7 +445,7 @@ private function getShortName($className) */ private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $parentClass) { - foreach ($parentClass->fieldMappings as $mapping) { + /*foreach ($parentClass->fieldMappings as $mapping) { if ( ! isset($mapping['tableName'])) { $mapping['tableName'] = ! $parentClass->isMappedSuperclass ? $parentClass->getTableName() : null; } @@ -455,7 +455,7 @@ private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $pare } $subClass->addInheritedFieldMapping($mapping); - } + }*/ foreach ($parentClass->reflFields as $name => $field) { $subClass->reflFields[$name] = $field; @@ -711,17 +711,13 @@ private function completeIdGeneratorMapping(ClassMetadata $class) // Platforms that do not have native IDENTITY support need a sequence to emulate this behaviour. if ($this->getTargetPlatform()->usesSequenceEmulatedIdentityColumns()) { $columnName = $class->getSingleIdentifierColumnName(); - $quoted = isset($class->fieldMappings[$fieldName]['quoted']) || isset($class->table['quoted']); $sequencePrefix = $class->getSequencePrefix($this->getTargetPlatform()); $sequenceName = $this->getTargetPlatform()->getIdentitySequenceName($sequencePrefix, $columnName); $definition = [ - 'sequenceName' => $this->getTargetPlatform()->fixSchemaElementName($sequenceName) + 'sequenceName' => $this->getTargetPlatform()->fixSchemaElementName($sequenceName), + 'quotes' => true, ]; - if ($quoted) { - $definition['quoted'] = true; - } - $sequenceName = $this ->em ->getConfiguration() @@ -729,7 +725,7 @@ private function completeIdGeneratorMapping(ClassMetadata $class) ->getSequenceName($definition, $class, $this->getTargetPlatform()); } - $generator = ($fieldName && $class->fieldMappings[$fieldName]['type']->getName() === 'bigint') + $generator = ($fieldName && $class->getProperty($fieldName)->getTypeName() === 'bigint') ? new BigIntegerIdentityGenerator($sequenceName) : new IdentityGenerator($sequenceName); @@ -744,18 +740,14 @@ private function completeIdGeneratorMapping(ClassMetadata $class) if ( ! $definition) { $fieldName = $class->getSingleIdentifierFieldName(); $sequenceName = $class->getSequenceName($this->getTargetPlatform()); - $quoted = isset($class->fieldMappings[$fieldName]['quoted']) || isset($class->table['quoted']); $definition = [ 'sequenceName' => $this->getTargetPlatform()->fixSchemaElementName($sequenceName), 'allocationSize' => 1, 'initialValue' => 1, + 'quoted' => true, ]; - if ($quoted) { - $definition['quoted'] = true; - } - $class->setSequenceGeneratorDefinition($definition); } diff --git a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php index 6929edfe452..1920faea451 100644 --- a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php @@ -34,9 +34,7 @@ class DefaultQuoteStrategy implements QuoteStrategy */ public function getColumnName($fieldName, ClassMetadata $class, AbstractPlatform $platform) { - return isset($class->fieldMappings[$fieldName]['quoted']) - ? $platform->quoteIdentifier($class->fieldMappings[$fieldName]['columnName']) - : $class->fieldMappings[$fieldName]['columnName']; + return $platform->quoteIdentifier($class->getProperty($fieldName)->getColumnName()); } /** @@ -119,7 +117,7 @@ public function getIdentifierColumnNames(ClassMetadata $class, AbstractPlatform $quotedColumnNames = []; foreach ($class->identifier as $fieldName) { - if (isset($class->fieldMappings[$fieldName])) { + if ($class->getProperty($fieldName) !== null) { $quotedColumnNames[] = $this->getColumnName($fieldName, $class, $platform); continue; diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index 19b630a0f5a..d48aded5fed 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -453,7 +453,7 @@ private function buildToOneAssociationMappings(ClassMetadata $metadata) 'targetEntity' => $this->getClassNameForTable($foreignTableName), ]; - if (isset($metadata->fieldMappings[$associationMapping['fieldName']])) { + if ($metadata->getProperty($associationMapping['fieldName'])) { $associationMapping['fieldName'] .= '2'; // "foo" => "foo2" } diff --git a/lib/Doctrine/ORM/Mapping/InheritedFieldMetadata.php b/lib/Doctrine/ORM/Mapping/InheritedFieldMetadata.php new file mode 100644 index 00000000000..052951ab63d --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/InheritedFieldMetadata.php @@ -0,0 +1,8 @@ +versionField; - $fieldMapping = $versionedClass->fieldMappings[$versionField]; + $property = $versionedClass->getProperty($versionField); $tableName = $this->quoteStrategy->getTableName($versionedClass, $this->platform); $identifier = $this->quoteStrategy->getIdentifierColumnNames($versionedClass, $this->platform); $columnName = $this->quoteStrategy->getColumnName($versionField, $versionedClass, $this->platform); @@ -354,7 +355,7 @@ protected function fetchVersionValue($versionedClass, array $id) $this->extractIdentifierTypes($id, $versionedClass) ); - return $fieldMapping['type']->convertToPHPValue($value, $this->platform); + return $property->getType()->convertToPHPValue($value, $this->platform); } private function extractIdentifierTypes(array $id, ClassMetadata $versionedClass) : array @@ -418,10 +419,10 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat switch (true) { case isset($this->class->fieldNames[$columnName]): - $fieldName = $this->class->fieldNames[$columnName]; - $fieldMapping = $this->class->fieldMappings[$fieldName]; - $column = $this->quoteStrategy->getColumnName($fieldName, $this->class, $this->platform); - $placeholder = $fieldMapping['type']->convertToDatabaseValueSQL('?', $this->platform); + $fieldName = $this->class->fieldNames[$columnName]; + $property = $this->class->getProperty($fieldName); + $column = $this->quoteStrategy->getColumnName($fieldName, $this->class, $this->platform); + $placeholder = $property->getType()->convertToDatabaseValueSQL('?', $this->platform); break; @@ -442,7 +443,7 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat foreach ($this->class->identifier as $idField) { if ( ! isset($this->class->associationMappings[$idField])) { $params[] = $identifier[$idField]; - $types[] = $this->class->fieldMappings[$idField]['type']; + $types[] = $this->class->getProperty($idField)->getType(); $where[] = $this->quoteStrategy->getColumnName($idField, $this->class, $this->platform); continue; @@ -450,30 +451,32 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat $params[] = $identifier[$idField]; $where[] = $this->class->associationMappings[$idField]['joinColumns'][0]['name']; + $targetMapping = $this->em->getClassMetadata($this->class->associationMappings[$idField]['targetEntity']); + $property = $targetMapping->getProperty($targetMapping->identifier[0]); - switch (true) { - case (isset($targetMapping->fieldMappings[$targetMapping->identifier[0]])): - $types[] = $targetMapping->fieldMappings[$targetMapping->identifier[0]]['type']; - break; + if ($property) { + $types[] = $property->getType(); - case (isset($targetMapping->associationMappings[$targetMapping->identifier[0]])): - $types[] = $targetMapping->associationMappings[$targetMapping->identifier[0]]['type']; - break; + continue; + } - default: - throw ORMException::unrecognizedField($targetMapping->identifier[0]); + if (isset($targetMapping->associationMappings[$targetMapping->identifier[0]])) { + $types[] = $targetMapping->associationMappings[$targetMapping->identifier[0]]['type']; + + continue; } + throw ORMException::unrecognizedField($targetMapping->identifier[0]); } if ($versioned) { $versionField = $this->class->versionField; - $versionFieldType = $this->class->fieldMappings[$versionField]['type']; + $versionFieldType = $this->class->getProperty($versionField)->getType(); $versionColumn = $this->quoteStrategy->getColumnName($versionField, $this->class, $this->platform); $where[] = $versionColumn; - $types[] = $this->class->fieldMappings[$versionField]['type']; + $types[] = $versionFieldType; $params[] = $this->class->reflFields[$versionField]->getValue($entity); switch ($versionFieldType->getName()) { @@ -573,14 +576,14 @@ public function delete($entity) $idColumns = $this->quoteStrategy->getIdentifierColumnNames($class, $this->platform); $id = array_combine($idColumns, $identifier); $types = array_map(function ($identifier) use ($class, $self) { - if (isset($class->fieldMappings[$identifier])) { - return $class->fieldMappings[$identifier]['type']; + if (($property = $class->getProperty($identifier)) !== null) { + return $property->getType(); } $targetMapping = $self->em->getClassMetadata($class->associationMappings[$identifier]['targetEntity']); - if (isset($targetMapping->fieldMappings[$targetMapping->identifier[0]])) { - return $targetMapping->fieldMappings[$targetMapping->identifier[0]]['type']; + if (($property = $targetMapping->getProperty($targetMapping->identifier[0])) !== null) { + return $property->getType(); } if (isset($targetMapping->associationMappings[$targetMapping->identifier[0]])) { @@ -638,10 +641,10 @@ protected function prepareUpdateData($entity) $newVal = $change[1]; if ( ! isset($this->class->associationMappings[$field])) { - $fieldMapping = $this->class->fieldMappings[$field]; - $columnName = $fieldMapping['columnName']; + $property = $this->class->getProperty($field); + $columnName = $property->getColumnName(); - $this->columnTypes[$columnName] = $fieldMapping['type']; + $this->columnTypes[$columnName] = $property->getType(); $result[$this->getOwningTable($field)][$columnName] = $newVal; @@ -1160,9 +1163,9 @@ protected final function getOrderBySQL(array $orderBy, $baseTableAlias) throw ORMException::invalidOrientation($this->class->name, $fieldName); } - if (isset($this->class->fieldMappings[$fieldName])) { - $class = isset($this->class->fieldMappings[$fieldName]['inherited']) - ? $this->em->getClassMetadata($this->class->fieldMappings[$fieldName]['inherited']) + if (($property = $this->class->getProperty($fieldName)) !== null) { + $class = ($property instanceof InheritedFieldMetadata) + ? $property->getDeclaringClass() : $this->class; $tableAlias = $this->getSQLTableAlias($class->getTableName()); $columnName = $this->quoteStrategy->getColumnName($fieldName, $this->class, $this->platform); @@ -1421,9 +1424,9 @@ public function getInsertSQL() $placeholder = '?'; if (isset($this->class->fieldNames[$column])) { - $fieldName = $this->class->fieldNames[$column]; - $fieldMapping = $this->class->fieldMappings[$fieldName]; - $placeholder = $fieldMapping['type']->convertToDatabaseValueSQL('?', $this->platform); + $fieldName = $this->class->fieldNames[$column]; + $property = $this->class->getProperty($fieldName); + $placeholder = $property->getType()->convertToDatabaseValueSQL('?', $this->platform); } $values[] = $placeholder; @@ -1470,9 +1473,9 @@ protected function getInsertColumnList() continue; } - if (! $this->class->isIdGeneratorIdentity() || $this->class->identifier[0] != $name) { + if (! $this->class->isIdGeneratorIdentity() || $this->class->identifier[0] !== $name) { $columns[] = $this->quoteStrategy->getColumnName($name, $this->class, $this->platform); - $this->columnTypes[$name] = $this->class->fieldMappings[$name]['type']; + $this->columnTypes[$name] = $this->class->getProperty($name)->getType(); } } @@ -1491,7 +1494,7 @@ protected function getInsertColumnList() */ protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r') { - $fieldMapping = $class->fieldMappings[$field]; + $property = $class->getProperty($field); // $m = $fieldMapping['declaringClass']; // $fieldMapping['declaringClass'] = $m->name; @@ -1500,16 +1503,16 @@ protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r' // // $fieldMapping['declaringClass'] = $m; - $columnAlias = $this->getSQLColumnAlias($fieldMapping['columnName']); + $columnAlias = $this->getSQLColumnAlias($property->getColumnName()); $sql = sprintf( '%s.%s', - $this->getSQLTableAlias($fieldMapping['tableName'], ($alias == 'r' ? '' : $alias)), + $this->getSQLTableAlias($property->getTableName(), ($alias == 'r' ? '' : $alias)), $this->quoteStrategy->getColumnName($field, $class, $this->platform) ); $this->currentPersisterContext->rsm->addFieldResult($alias, $columnAlias, $field, $class->name); - return $fieldMapping['type']->convertToPHPValueSQL($sql, $this->platform) . ' AS ' . $columnAlias; + return $property->getType()->convertToPHPValueSQL($sql, $this->platform) . ' AS ' . $columnAlias; } /** @@ -1624,9 +1627,8 @@ public function getSelectConditionStatementSQL($field, $value, $assoc = null, $c foreach ($columns as $column) { $placeholder = '?'; - if (isset($this->class->fieldMappings[$field])) { - $fieldMapping = $this->class->fieldMappings[$field]; - $placeholder = $fieldMapping['type']->convertToDatabaseValueSQL($placeholder, $this->platform); + if (($property = $this->class->getProperty($field)) !== null) { + $placeholder = $property->getType()->convertToDatabaseValueSQL($placeholder, $this->platform); } if (null !== $comparison) { @@ -1686,9 +1688,9 @@ public function getSelectConditionStatementSQL($field, $value, $assoc = null, $c */ private function getSelectConditionStatementColumnSQL($field, $assoc = null) { - if (isset($this->class->fieldMappings[$field])) { - $class = isset($this->class->fieldMappings[$field]['inherited']) - ? $this->em->getClassMetadata($this->class->fieldMappings[$field]['inherited']) + if (($property = $this->class->getProperty($field)) !== null) { + $class = ($property instanceof InheritedFieldMetadata) + ? $property->getDeclaringClass() : $this->class; $tableAlias = $this->getSQLTableAlias($class->getTableName()); $columnName = $this->quoteStrategy->getColumnName($field, $this->class, $this->platform); @@ -1918,11 +1920,13 @@ private function expandToManyParameters($criteria) */ private function getTypes($field, $value, ClassMetadata $class) { - $types = []; + $property = $class->getProperty($field); + $hasProperty = $property !== null; + $types = []; switch (true) { - case (isset($class->fieldMappings[$field])): - $types = array_merge($types, [$class->fieldMappings[$field]['type']]); + case $hasProperty: + $types = array_merge($types, [$property->getType()]); break; case (isset($class->associationMappings[$field])): diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index 0e2f13c60c8..92ee90f9525 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -20,6 +20,8 @@ namespace Doctrine\ORM\Persisters\Entity; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\InheritedFieldMetadata; +use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\DBAL\LockMode; use Doctrine\DBAL\Types\Type; @@ -74,13 +76,11 @@ protected function getDiscriminatorColumnTableName() */ private function getVersionedClassMetadata() { - if (isset($this->class->fieldMappings[$this->class->versionField]['inherited'])) { - $definingClassName = $this->class->fieldMappings[$this->class->versionField]['inherited']; + $property = $this->class->getProperty($this->class->versionField); - return $this->em->getClassMetadata($definingClassName); - } - - return $this->class; + return ($property instanceof InheritedFieldMetadata) + ? $property->getDeclaringClass() + : $this->class; } /** @@ -98,13 +98,16 @@ public function getOwningTable($fieldName) return $this->owningTableMap[$fieldName]; } + $property = $this->class->getProperty($fieldName); + $isInherited = $property instanceof InheritedFieldMetadata; + switch (true) { case isset($this->class->associationMappings[$fieldName]['inherited']): $cm = $this->em->getClassMetadata($this->class->associationMappings[$fieldName]['inherited']); break; - case isset($this->class->fieldMappings[$fieldName]['inherited']): - $cm = $this->em->getClassMetadata($this->class->fieldMappings[$fieldName]['inherited']); + case $isInherited: + $cm = $property->getDeclaringClass(); break; default: @@ -449,9 +452,9 @@ protected function getSelectColumnsSQL() $this->currentPersisterContext->rsm->addMetaResult('r', $resultColumnName, $discrColumn, false, $discrColumnType); // Add regular columns - foreach ($this->class->fieldMappings as $fieldName => $mapping) { - $class = isset($mapping['inherited']) - ? $this->em->getClassMetadata($mapping['inherited']) + foreach ($this->class->getProperties() as $fieldName => $property) { + $class = ($property instanceof InheritedFieldMetadata) + ? $property->getDeclaringClass() : $this->class; $columnList[] = $this->getSelectColumnSQL($fieldName, $class); @@ -480,8 +483,8 @@ protected function getSelectColumnsSQL() $subClass = $this->em->getClassMetadata($subClassName); // Add subclass columns - foreach ($subClass->fieldMappings as $fieldName => $mapping) { - if (isset($mapping['inherited'])) { + foreach ($subClass->getProperties() as $fieldName => $property) { + if ($property instanceof InheritedFieldMetadata) { continue; } @@ -520,9 +523,11 @@ protected function getInsertColumnList() : []; foreach ($this->class->reflFields as $name => $field) { - if ((isset($this->class->fieldMappings[$name]['inherited']) && ! isset($this->class->fieldMappings[$name]['id'])) + $property = $this->class->getProperty($name); + + if (($property instanceof InheritedFieldMetadata && ! $property->isPrimaryKey()) || isset($this->class->associationMappings[$name]['inherited']) - || ($this->class->isVersioned && $this->class->versionField == $name) + || ($this->class->isVersioned && $this->class->versionField === $name) /*|| isset($this->class->embeddedClasses[$name])*/) { continue; } @@ -535,9 +540,9 @@ protected function getInsertColumnList() } } } else if ($this->class->name != $this->class->rootEntityName || - ! $this->class->isIdGeneratorIdentity() || $this->class->identifier[0] != $name) { + ! $this->class->isIdGeneratorIdentity() || $this->class->identifier[0] !== $name) { $columns[] = $this->quoteStrategy->getColumnName($name, $this->class, $this->platform); - $this->columnTypes[$name] = $this->class->fieldMappings[$name]['type']; + $this->columnTypes[$name] = $property->getType(); } } diff --git a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php index e27a26c5059..64bdd728d5c 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php @@ -21,6 +21,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Common\Collections\Criteria; +use Doctrine\ORM\Mapping\InheritedFieldMetadata; use Doctrine\ORM\Utility\PersisterHelper; /** @@ -73,8 +74,8 @@ protected function getSelectColumnsSQL() $subClass = $this->em->getClassMetadata($subClassName); // Regular columns - foreach ($subClass->fieldMappings as $fieldName => $mapping) { - if (isset($mapping['inherited'])) { + foreach ($subClass->getProperties() as $fieldName => $property) { + if ($property instanceof InheritedFieldMetadata) { continue; } diff --git a/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php index 6f69d5357ac..a8f3920f6c5 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php @@ -61,16 +61,14 @@ public function getSql(SqlWalker $sqlWalker) $joinColumn = reset($assoc['joinColumns']); if ($this->fieldMapping !== null) { - if ( ! isset($targetEntity->fieldMappings[$this->fieldMapping])) { + if (($property = $targetEntity->getProperty($this->fieldMapping)) === null) { throw new QueryException(sprintf('Undefined reference field mapping "%s"', $this->fieldMapping)); } - $field = $targetEntity->fieldMappings[$this->fieldMapping]; $joinColumn = null; foreach ($assoc['joinColumns'] as $mapping) { - - if ($mapping['referencedColumnName'] === $field['columnName']) { + if ($mapping['referencedColumnName'] === $property->getColumnName()) { $joinColumn = $mapping; break; diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php index 368b23cc6de..0644da391cf 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php @@ -20,6 +20,9 @@ namespace Doctrine\ORM\Query\Exec; use Doctrine\DBAL\Connection; +use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\InheritedFieldMetadata; +use Doctrine\ORM\Query\ParameterTypeInferer; use Doctrine\ORM\Query\AST; use Doctrine\ORM\Query\ParameterTypeInferer; use Doctrine\ORM\Utility\PersisterHelper; @@ -110,7 +113,7 @@ public function __construct(AST\Node $AST, $sqlWalker) foreach ($updateItems as $updateItem) { $field = $updateItem->pathExpression->field; - if ((isset($class->fieldMappings[$field]) && ! isset($class->fieldMappings[$field]['inherited'])) || + if ((($property = $class->getProperty($field)) !== null && ! ($property instanceof InheritedFieldMetadata)) || (isset($class->associationMappings[$field]) && ! isset($class->associationMappings[$field]['inherited']))) { $newValue = $updateItem->newValue; diff --git a/lib/Doctrine/ORM/Query/Parser.php b/lib/Doctrine/ORM/Query/Parser.php index c21b2de9623..d39848d9ebc 100644 --- a/lib/Doctrine/ORM/Query/Parser.php +++ b/lib/Doctrine/ORM/Query/Parser.php @@ -670,7 +670,7 @@ private function processDeferredPartialObjectExpressions() $class = $this->queryComponents[$expr->identificationVariable]['metadata']; foreach ($expr->partialFieldSet as $field) { - if (isset($class->fieldMappings[$field])) { + if ($class->getProperty($field)) { continue; } @@ -754,7 +754,7 @@ private function processDeferredPathExpressions() } // Check if field or association exists - if ( ! isset($class->associationMappings[$field]) && ! isset($class->fieldMappings[$field])) { + if ( ! isset($class->associationMappings[$field]) && ! $class->getProperty($field)) { $this->semanticalError( 'Class ' . $class->name . ' has no field or association named ' . $field, $deferredItem['token'] diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index 4a253ac3850..5a750680a50 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -407,7 +407,7 @@ public function addNamedNativeQueryEntityResultMapping(ClassMetadata $classMetad $this->addFieldResult($alias, $field['column'], $fieldName, $classMetadata->name); } } else { - if ( ! isset($classMetadata->fieldMappings[$fieldName])) { + if ( ! $classMetadata->getProperty($fieldName)) { throw new \InvalidArgumentException("Entity '".$classMetadata->name."' has no field '".$fieldName."'. "); } @@ -452,7 +452,7 @@ public function generateSelectClause($tableAliases = []) if (isset($this->fieldMappings[$columnName])) { $class = $this->em->getClassMetadata($this->declaringClasses[$columnName]); - $sql .= $class->fieldMappings[$this->fieldMappings[$columnName]]['columnName']; + $sql .= $class->getProperty($this->fieldMappings[$columnName])->getColumnName(); } else if (isset($this->metaMappings[$columnName])) { $sql .= $this->metaMappings[$columnName]; } else if (isset($this->discriminatorColumns[$dqlAlias])) { diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index c04e0031a63..d103d55efb6 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -22,6 +22,7 @@ use Doctrine\DBAL\LockMode; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\InheritedFieldMetadata; use Doctrine\ORM\OptimisticLockException; use Doctrine\ORM\Query; use Doctrine\ORM\Utility\PersisterHelper; @@ -628,11 +629,14 @@ public function walkIdentificationVariable($identificationVariable, $fieldName = { $class = $this->queryComponents[$identificationVariable]['metadata']; - if ( - $fieldName !== null && $class->isInheritanceTypeJoined() && - isset($class->fieldMappings[$fieldName]['inherited']) - ) { - $class = $this->em->getClassMetadata($class->fieldMappings[$fieldName]['inherited']); + if (!$fieldName) { + return $this->getSQLTableAlias($class->getTableName(), $identificationVariable); + } + + $property = $class->getProperty($fieldName); + + if ($class->isInheritanceTypeJoined() && $property instanceof InheritedFieldMetadata) { + $class = $property->getDeclaringClass(); } return $this->getSQLTableAlias($class->getTableName(), $identificationVariable); @@ -1276,25 +1280,25 @@ public function walkSelectExpression($selectExpression) $dqlAlias = $expr->identificationVariable; $qComp = $this->queryComponents[$dqlAlias]; $class = $qComp['metadata']; - $fieldMapping = $class->fieldMappings[$fieldName]; - $columnAlias = $this->getSQLColumnAlias($fieldMapping['columnName']); + $property = $class->getProperty($fieldName); + $columnAlias = $this->getSQLColumnAlias($property->getColumnName()); $resultAlias = $selectExpression->fieldIdentificationVariable ?: $fieldName; $col = sprintf( '%s.%s', - $this->getSQLTableAlias($fieldMapping['tableName'], $dqlAlias), + $this->getSQLTableAlias($property->getTableName(), $dqlAlias), $this->quoteStrategy->getColumnName($fieldName, $class, $this->platform) ); $sql .= sprintf( '%s AS %s', - $fieldMapping['type']->convertToPHPValueSQL($col, $this->conn->getDatabasePlatform()), + $property->getType()->convertToPHPValueSQL($col, $this->conn->getDatabasePlatform()), $columnAlias ); $this->scalarResultAliasMap[$resultAlias] = $columnAlias; if ( ! $hidden) { - $this->rsm->addScalarResult($columnAlias, $resultAlias, $fieldMapping['type']); + $this->rsm->addScalarResult($columnAlias, $resultAlias, $property->getType()); $this->scalarFields[$dqlAlias][$fieldName] = $columnAlias; } @@ -1368,21 +1372,21 @@ public function walkSelectExpression($selectExpression) $sqlParts = []; // Select all fields from the queried class - foreach ($class->fieldMappings as $fieldName => $mapping) { + foreach ($class->getProperties() as $fieldName => $property) { if ($partialFieldSet && ! in_array($fieldName, $partialFieldSet)) { continue; } - $columnAlias = $this->getSQLColumnAlias($mapping['columnName']); + $columnAlias = $this->getSQLColumnAlias($property->getColumnName()); $col = sprintf( '%s.%s', - $this->getSQLTableAlias($mapping['tableName'], $dqlAlias), + $this->getSQLTableAlias($property->getTableName(), $dqlAlias), $this->quoteStrategy->getColumnName($fieldName, $class, $this->platform) ); $sqlParts[] = sprintf( '%s AS %s', - $mapping['type']->convertToPHPValueSQL($col, $this->platform), + $property->getType()->convertToPHPValueSQL($col, $this->platform), $columnAlias ); @@ -1399,21 +1403,21 @@ public function walkSelectExpression($selectExpression) foreach ($class->subClasses as $subClassName) { $subClass = $this->em->getClassMetadata($subClassName); - foreach ($subClass->fieldMappings as $fieldName => $mapping) { - if (isset($mapping['inherited']) || ($partialFieldSet && !in_array($fieldName, $partialFieldSet))) { + foreach ($subClass->getProperties() as $fieldName => $property) { + if ($property instanceof InheritedFieldMetadata || ($partialFieldSet && !in_array($fieldName, $partialFieldSet))) { continue; } - $columnAlias = $this->getSQLColumnAlias($mapping['columnName']); + $columnAlias = $this->getSQLColumnAlias($property->getColumnName()); $col = sprintf( '%s.%s', - $this->getSQLTableAlias($mapping['tableName'], $dqlAlias), + $this->getSQLTableAlias($property->getTableName(), $dqlAlias), $this->quoteStrategy->getColumnName($fieldName, $subClass, $this->platform) ); $sqlParts[] = sprintf( '%s AS %s', - $mapping['type']->convertToPHPValueSQL($col, $this->platform), + $property->getType()->convertToPHPValueSQL($col, $this->platform), $columnAlias ); @@ -1525,7 +1529,7 @@ public function walkNewObject($newObjectExpression, $newObjectResultAlias=null) $dqlAlias = $e->identificationVariable; $qComp = $this->queryComponents[$dqlAlias]; $class = $qComp['metadata']; - $fieldType = $class->fieldMappings[$e->field]['type']; + $fieldType = $class->getProperty($e->field)->getType(); $sqlSelectExpressions[] = trim($e->dispatch($this)) . ' AS ' . $columnAlias; break; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index 6f2761e0dc6..f9bdf789d02 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -122,7 +122,7 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage [$this->formatField('Association mappings:', '')], $this->formatMappings($metadata->associationMappings), [$this->formatField('Field mappings:', '')], - $this->formatMappings($metadata->fieldMappings) + $this->formatMappings($metadata->getProperties()) ) ); @@ -265,12 +265,16 @@ private function formatMappings(array $propertyMappings) { $output = []; - foreach ($propertyMappings as $propertyName => $mapping) { + foreach ($propertyMappings as $propertyName => $property) { $output[] = $this->formatField(sprintf(' %s', $propertyName), ''); - foreach ($mapping as $field => $value) { - $output[] = $this->formatField(sprintf(' %s', $field), $this->formatValue($value)); - } + $output[] = $this->formatField(' type', $this->formatValue($property->getTypeName())); + $output[] = $this->formatField(' tableName', $this->formatValue($property->getTableName())); + $output[] = $this->formatField(' columnName', $this->formatValue($property->getColumnName())); + $output[] = $this->formatField(' columnDescription', $this->formatValue($property->getColumnDescription())); + $output[] = $this->formatField(' isPrimaryKey', $this->formatValue($property->isPrimaryKey())); + $output[] = $this->formatField(' isNullable', $this->formatValue($property->isNullable())); + $output[] = $this->formatField(' isUnique', $this->formatValue($property->isUnique())); } return $output; diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 9cd55152396..cf5585b6d41 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -22,6 +22,9 @@ use Doctrine\Common\Collections\Collection; use Doctrine\Common\Util\Inflector; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\InheritedFieldMetadata; +use Doctrine\ORM\Mapping\PropertyMetadata; use Doctrine\ORM\Mapping\ClassMetadata; /** @@ -715,17 +718,17 @@ private function generateEmbeddableConstructor(ClassMetadata $metadata) $requiredFields = []; $optionalFields = []; - foreach ($metadata->fieldMappings as $fieldMapping) { - if (empty($fieldMapping['nullable'])) { - $requiredFields[] = $fieldMapping; + foreach ($metadata->getProperties() as $property) { + if (! $property->isNullable()) { + $requiredFields[] = $property; continue; } - $optionalFields[] = $fieldMapping; + $optionalFields[] = $property; } - $fieldMappings = array_merge($requiredFields, $optionalFields); + $mappings = array_merge($requiredFields, $optionalFields); /*foreach ($metadata->embeddedClasses as $fieldName => $embeddedClass) { $paramType = '\\' . ltrim($embeddedClass['class'], '\\'); @@ -737,29 +740,30 @@ private function generateEmbeddableConstructor(ClassMetadata $metadata) $fields[] = '$this->' . $fieldName . ' = ' . $paramVariable . ';'; }*/ - foreach ($fieldMappings as $fieldMapping) { + foreach ($mappings as $property) { /*if (isset($fieldMapping['declaredField']) && isset($metadata->embeddedClasses[$fieldMapping['declaredField']])) { continue; }*/ - $fieldType = $fieldMapping['type']->getName(); + $fieldName = $property->getFieldName(); + $fieldType = $property->getTypeName(); $mappedType = $this->getType($fieldType); - $param = '$' . $fieldMapping['fieldName']; + $param = '$' . $fieldName; - $paramTypes[] = $mappedType . (!empty($fieldMapping['nullable']) ? '|null' : ''); + $paramTypes[] = $mappedType . ($property->isNullable() ? '|null' : ''); $paramVariables[] = $param; if ($fieldType === 'datetime') { $param = $mappedType . ' ' . $param; } - if (!empty($fieldMapping['nullable'])) { + if ($property->isNullable()) { $param .= ' = null'; } $params[] = $param; - $fields[] = '$this->' . $fieldMapping['fieldName'] . ' = $' . $fieldMapping['fieldName'] . ';'; + $fields[] = '$this->' . $fieldName . ' = $' . $fieldName . ';'; } $maxParamTypeLength = max(array_map('strlen', $paramTypes)); @@ -1170,21 +1174,20 @@ protected function generateEntityStubMethods(ClassMetadata $metadata) { $methods = []; - foreach ($metadata->fieldMappings as $fieldMapping) { + foreach ($metadata->getProperties() as $fieldName => $property) { /*if (isset($fieldMapping['declaredField']) && isset($metadata->embeddedClasses[$fieldMapping['declaredField']])) { continue; }*/ - $fieldType = $fieldMapping['type']->getName(); - $nullableField = $this->nullableFieldExpression($fieldMapping); + $fieldType = $property->getTypeName(); - if (( ! isset($fieldMapping['id']) || ! $fieldMapping['id'] || $metadata->generatorType == ClassMetadata::GENERATOR_TYPE_NONE) && + if (( ! $property->isPrimaryKey() || $metadata->generatorType == ClassMetadata::GENERATOR_TYPE_NONE) && ( ! $metadata->isEmbeddedClass || ! $this->embeddablesImmutable) && - $code = $this->generateEntityStubMethod($metadata, 'set', $fieldMapping['fieldName'], $fieldType, $nullableField)) { + $code = $this->generateEntityStubMethod($metadata, 'set', $fieldName, $fieldType, null)) { $methods[] = $code; } - if ($code = $this->generateEntityStubMethod($metadata, 'get', $fieldMapping['fieldName'], $fieldType, $nullableField)) { + if ($code = $this->generateEntityStubMethod($metadata, 'get', $fieldName, $fieldType, null)) { $methods[] = $code; } } @@ -1310,9 +1313,9 @@ protected function generateEntityFieldMappingProperties(ClassMetadata $metadata) { $lines = []; - foreach ($metadata->fieldMappings as $fieldMapping) { - if ($this->hasProperty($fieldMapping['fieldName'], $metadata) || - $metadata->isInheritedField($fieldMapping['fieldName']) /*|| + foreach ($metadata->getProperties() as $fieldName => $property) { + if ($this->hasProperty($fieldName, $metadata) || + $property instanceof InheritedFieldMetadata /*|| ( isset($fieldMapping['declaredField']) && isset($metadata->embeddedClasses[$fieldMapping['declaredField']]) @@ -1321,9 +1324,11 @@ protected function generateEntityFieldMappingProperties(ClassMetadata $metadata) continue; } - $lines[] = $this->generateFieldMappingPropertyDocBlock($fieldMapping, $metadata); - $lines[] = $this->spaces . $this->fieldVisibility . ' $' . $fieldMapping['fieldName'] - . (isset($fieldMapping['options']['default']) ? ' = ' . var_export($fieldMapping['options']['default'], true) : null) . ";\n"; + $options = $property->getOptions(); + + $lines[] = $this->generateFieldMappingPropertyDocBlock($property, $metadata); + $lines[] = $this->spaces . $this->fieldVisibility . ' $' . $fieldName + . (isset($options['default']) ? ' = ' . var_export($options['default'], true) : null) . ";\n"; } return implode("\n", $lines); @@ -1623,14 +1628,14 @@ protected function generateAssociationMappingPropertyDocBlock(array $association } /** - * @param array $fieldMapping + * @param FieldMetadata $propertyMetadata * @param ClassMetadata $metadata * * @return string */ - protected function generateFieldMappingPropertyDocBlock(array $fieldMapping, ClassMetadata $metadata) + protected function generateFieldMappingPropertyDocBlock(FieldMetadata $propertyMetadata, ClassMetadata $metadata) { - $fieldType = $fieldMapping['type']->getName(); + $fieldType = $propertyMetadata->getTypeName(); $lines = []; @@ -1642,39 +1647,40 @@ protected function generateFieldMappingPropertyDocBlock(array $fieldMapping, Cla if ($this->generateAnnotations) { $lines[] = $this->spaces . ' *'; - $column = []; - if (isset($fieldMapping['columnName'])) { - $column[] = 'name="' . $fieldMapping['columnName'] . '"'; + $column = ['type="' . $fieldType . '"']; + + if ($propertyMetadata->getColumnName()) { + $column[] = 'name="' . $propertyMetadata->getColumnName() . '"'; } - if (isset($fieldMapping['type'])) { - $column[] = 'type="' . $fieldType . '"'; + if (is_int($propertyMetadata->getLength())) { + $column[] = 'length=' . $propertyMetadata->getLength(); } - if (isset($fieldMapping['length']) && $fieldMapping['length']) { - $column[] = 'length=' . $fieldMapping['length']; + if (is_int($propertyMetadata->getPrecision())) { + $column[] = 'precision=' . $propertyMetadata->getPrecision(); } - if (isset($fieldMapping['precision']) && $fieldMapping['precision']) { - $column[] = 'precision=' . $fieldMapping['precision']; + if (is_int($propertyMetadata->getScale())) { + $column[] = 'scale=' . $propertyMetadata->getScale(); } - if (isset($fieldMapping['scale']) && $fieldMapping['scale']) { - $column[] = 'scale=' . $fieldMapping['scale']; + if ($propertyMetadata->isNullable()) { + $column[] = 'nullable=' . var_export($propertyMetadata->isNullable(), true); } - if (isset($fieldMapping['nullable']) && $fieldMapping['nullable']) { - $column[] = 'nullable=' . var_export($fieldMapping['nullable'], true); + if ($propertyMetadata->isUnique()) { + $column[] = 'unique=' . var_export($propertyMetadata->isUnique(), true); } - if (isset($fieldMapping['unique']) && $fieldMapping['unique']) { - $column[] = 'unique=' . var_export($fieldMapping['unique'], true); + if ($propertyMetadata->getColumnDefinition()) { + $column[] = 'columnDefinition="' . $propertyMetadata->getColumnDefinition() . '"'; } $options = []; - if (isset($fieldMapping['options']) && $fieldMapping['options']) { - foreach ($fieldMapping['options'] as $key => $value) { + if ($propertyMetadata->getOptions()) { + foreach ($propertyMetadata->getOptions() as $key => $value) { $options[] = sprintf('"%s"=%s', $key, str_replace("'", '"', var_export($value, true))); } } @@ -1683,13 +1689,9 @@ protected function generateFieldMappingPropertyDocBlock(array $fieldMapping, Cla $column[] = 'options={'.implode(',', $options).'}'; } - if (isset($fieldMapping['columnDefinition'])) { - $column[] = 'columnDefinition="' . $fieldMapping['columnDefinition'] . '"'; - } - $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'Column(' . implode(', ', $column) . ')'; - if (isset($fieldMapping['id']) && $fieldMapping['id']) { + if ($propertyMetadata->isPrimaryKey()) { $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'Id'; if ($generatorType = $this->getIdGeneratorTypeString($metadata->generatorType)) { @@ -1715,7 +1717,7 @@ protected function generateFieldMappingPropertyDocBlock(array $fieldMapping, Cla } } - if (isset($fieldMapping['version']) && $fieldMapping['version']) { + if ($metadata->versionField === $propertyMetadata->getFieldName()) { $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'Version'; } } @@ -1826,17 +1828,13 @@ protected function getIdGeneratorTypeString($type) } /** - * @param array $fieldMapping + * @param PropertyMetadata $property * * @return string|null */ - private function nullableFieldExpression(array $fieldMapping) + private function nullableFieldExpression(PropertyMetadata $property) { - if (isset($fieldMapping['nullable']) && true === $fieldMapping['nullable']) { - return 'null'; - } - - return null; + return $property->isNullable() ? 'null' : null; } /** diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index d01dbf73024..125804cbad0 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -126,14 +126,14 @@ public function exportClassMetadata(ClassMetadata $metadata) } } - $fields = $metadata->fieldMappings; - $id = []; + $properties = $metadata->getProperties(); + $id = []; - foreach ($fields as $name => $field) { - if (isset($field['id']) && $field['id']) { - $id[$name] = $field; + foreach ($properties as $name => $property) { + if ($property->isPrimaryKey()) { + $id[$name] = $property; - unset($fields[$name]); + unset($properties[$name]); } } @@ -151,26 +151,20 @@ public function exportClassMetadata(ClassMetadata $metadata) } if ($id) { - foreach ($id as $field) { + foreach ($id as $property) { $idXml = $root->addChild('id'); - $idXml->addAttribute('name', $field['fieldName']); + $idXml->addAttribute('name', $property->getFieldName()); + $idXml->addAttribute('type', $property->getTypeName()); + $idXml->addAttribute('column', $property->getColumnName()); - if (isset($field['type'])) { - $idXml->addAttribute('type', $field['type']->getName()); + if (is_int($property->getLength())) { + $idXml->addAttribute('length', $property->getLength()); } - if (isset($field['columnName'])) { - $idXml->addAttribute('column', $field['columnName']); - } - - if (isset($field['length'])) { - $idXml->addAttribute('length', $field['length']); - } - - if (isset($field['associationKey']) && $field['associationKey']) { + /*if (isset($field['associationKey']) && $field['associationKey']) { $idXml->addAttribute('association-key', 'true'); - } + }*/ if ($idGeneratorType = $this->_getIdGeneratorTypeString($metadata->generatorType)) { $generatorXml = $idXml->addChild('generator'); @@ -182,52 +176,45 @@ public function exportClassMetadata(ClassMetadata $metadata) } } - if ($fields) { - foreach ($fields as $field) { + if ($properties) { + foreach ($properties as $property) { $fieldXml = $root->addChild('field'); - $fieldXml->addAttribute('name', $field['fieldName']); - $fieldXml->addAttribute('type', $field['type']->getName()); + $fieldXml->addAttribute('name', $property->getFieldName()); + $fieldXml->addAttribute('type', $property->getTypeName()); + $fieldXml->addAttribute('column', $property->getColumnName()); + $fieldXml->addAttribute('nullable', $property->isNullable() ? 'true' : 'false'); + $fieldXml->addAttribute('unique', $property->isUnique() ? 'true' : 'false'); - if (isset($field['columnName'])) { - $fieldXml->addAttribute('column', $field['columnName']); + if (is_int($property->getLength())) { + $fieldXml->addAttribute('length', $property->getLength()); } - if (isset($field['length'])) { - $fieldXml->addAttribute('length', $field['length']); + if (is_int($property->getPrecision())) { + $fieldXml->addAttribute('precision', $property->getPrecision()); } - if (isset($field['precision'])) { - $fieldXml->addAttribute('precision', $field['precision']); + if (is_int($property->getScale())) { + $fieldXml->addAttribute('scale', $property->getScale()); } - if (isset($field['scale'])) { - $fieldXml->addAttribute('scale', $field['scale']); + if ($metadata->versionField === $property->getFieldName()) { + $fieldXml->addAttribute('version', 'true'); } - if (isset($field['unique']) && $field['unique']) { - $fieldXml->addAttribute('unique', $field['unique'] ? 'true' : 'false'); + if ($property->getColumnDefinition()) { + $fieldXml->addAttribute('column-definition', $property->getColumnDefinition()); } - if (isset($field['options'])) { + if ($property->getOptions()) { $optionsXml = $fieldXml->addChild('options'); - foreach ($field['options'] as $key => $value) { + + foreach ($property->getOptions() as $key => $value) { $optionXml = $optionsXml->addChild('option', $value); + $optionXml->addAttribute('name', $key); } } - - if (isset($field['version'])) { - $fieldXml->addAttribute('version', $field['version']); - } - - if (isset($field['columnDefinition'])) { - $fieldXml->addAttribute('column-definition', $field['columnDefinition']); - } - - if (isset($field['nullable'])) { - $fieldXml->addAttribute('nullable', $field['nullable'] ? 'true' : 'false'); - } } } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php index f7b5139ca1a..0049ff9bc5d 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php @@ -89,28 +89,29 @@ public function exportClassMetadata(ClassMetadata $metadata) $array['options'] = $metadata->table['options']; } - $fieldMappings = $metadata->fieldMappings; - - $ids = []; - foreach ($fieldMappings as $name => $fieldMapping) { - $fieldMapping['column'] = $fieldMapping['columnName']; - $fieldMapping['type'] = $fieldMapping['type']->getName(); - - unset($fieldMapping['columnName'], $fieldMapping['fieldName']); + $properties = $metadata->getProperties(); + $mappings = []; + $ids = []; + + foreach ($properties as $name => $property) { + $mapping = [ + 'column' => $property->getColumnName(), + 'type' => $property->getTypeName(), + ]; - if ($fieldMapping['column'] == $name) { - unset($fieldMapping['column']); + if ($mapping['column'] === $name) { + unset($mapping['column']); } - if (isset($fieldMapping['id']) && $fieldMapping['id']) { - $ids[$name] = $fieldMapping; + if (isset($mapping['id']) && $mapping['id']) { + $ids[$name] = $mapping; - unset($fieldMappings[$name]); + unset($mappings[$name]); continue; } - $fieldMappings[$name] = $fieldMapping; + $mappings[$name] = $mapping; } if ( ! $metadata->isIdentifierComposite && $idGeneratorType = $this->_getIdGeneratorTypeString($metadata->generatorType)) { @@ -119,12 +120,12 @@ public function exportClassMetadata(ClassMetadata $metadata) $array['id'] = $ids; - if ($fieldMappings) { + if ($mappings) { if ( ! isset($array['fields'])) { $array['fields'] = []; } - - $array['fields'] = array_merge($array['fields'], $fieldMappings); + + $array['fields'] = array_merge($array['fields'], $mappings); } foreach ($metadata->associationMappings as $name => $associationMapping) { diff --git a/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php index f3db053ca29..517e0a8e00c 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php @@ -117,21 +117,21 @@ public function walkSelectStatement(SelectStatement $AST) // For every identifier, find out the SQL alias by combing through the ResultSetMapping $sqlIdentifier = []; - foreach ($rootIdentifier as $property) { - if (isset($rootClass->fieldMappings[$property])) { - foreach (array_keys($this->rsm->fieldMappings, $property) as $alias) { + foreach ($rootIdentifier as $identifier) { + if (($property = $rootClass->getProperty($identifier)) !== null) { + foreach (array_keys($this->rsm->fieldMappings, $identifier) as $alias) { if ($this->rsm->columnOwnerMap[$alias] == $rootAlias) { - $sqlIdentifier[$property] = $alias; + $sqlIdentifier[$identifier] = $alias; } } } - if (isset($rootClass->associationMappings[$property])) { - $joinColumn = $rootClass->associationMappings[$property]['joinColumns'][0]['name']; + if (isset($rootClass->associationMappings[$identifier])) { + $joinColumn = $rootClass->associationMappings[$identifier]['joinColumns'][0]['name']; foreach (array_keys($this->rsm->metaMappings, $joinColumn) as $alias) { if ($this->rsm->columnOwnerMap[$alias] == $rootAlias) { - $sqlIdentifier[$property] = $alias; + $sqlIdentifier[$identifier] = $alias; } } } diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php index 4b864ac21b3..df13c039965 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php @@ -218,10 +218,10 @@ public function walkSelectStatementWithRowNumber(SelectStatement $AST) $sqlPiece = 'MIN(' . $this->walkResultVariable('dctrn_rownum') . ') AS dctrn_minrownum'; $sqlAliasIdentifier[] = $sqlPiece; - $sqlIdentifier[] = array( + $sqlIdentifier[] = [ 'alias' => $sqlPiece, 'type' => Type::getType('integer'), - ); + ]; } // Build the counter query @@ -449,14 +449,12 @@ private function generateSqlAliasReplacements() : array $class = $this->queryComponents[$dqlAliasForFieldAlias]['metadata']; // If the field is from a joined child table, we won't be ordering on it. - if ( ! isset($class->fieldMappings[$fieldName])) { + if (($property = $class->getProperty($fieldName)) === null) { continue; } - $fieldMapping = $class->fieldMappings[$fieldName]; - // Get the SQL table alias for the entity and field and the column name as will appear in the select list - $tableAlias = $this->getSQLTableAlias($fieldMapping['tableName'], $dqlAliasForFieldAlias); + $tableAlias = $this->getSQLTableAlias($property->getTableName(), $dqlAliasForFieldAlias); $columnName = $this->quoteStrategy->getColumnName($fieldName, $class, $this->em->getConnection()->getDatabasePlatform()); // Compose search and replace patterns @@ -534,14 +532,14 @@ private function getSQLIdentifier(SelectStatement $AST) // For every identifier, find out the SQL alias by combing through the ResultSetMapping $sqlIdentifier = []; - foreach ($rootIdentifier as $property) { - if (isset($rootClass->fieldMappings[$property])) { - foreach (array_keys($this->rsm->fieldMappings, $property) as $alias) { + foreach ($rootIdentifier as $identifier) { + if (($property = $rootClass->getProperty($identifier)) !== null) { + foreach (array_keys($this->rsm->fieldMappings, $identifier) as $alias) { if ($this->rsm->columnOwnerMap[$alias] === $rootAlias) { - $sqlIdentifier[$property] = array( - 'type' => $rootClass->fieldMappings[$property]['type'], + $sqlIdentifier[$identifier] = [ + 'type' => $property->getType(), 'alias' => $alias, - ); + ]; } } } @@ -551,10 +549,10 @@ private function getSQLIdentifier(SelectStatement $AST) foreach (array_keys($this->rsm->metaMappings, $joinColumn) as $alias) { if ($this->rsm->columnOwnerMap[$alias] === $rootAlias) { - $sqlIdentifier[$property] = array( + $sqlIdentifier[$property] = [ 'type' => $this->rsm->typeMappings[$alias], 'alias' => $alias, - ); + ]; } } } diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php index 37174e3d6a9..7cb5c8f5b30 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php @@ -90,7 +90,7 @@ public function walkSelectStatement(SelectStatement $AST) ); } - $this->_getQuery()->setHint(self::IDENTIFIER_TYPE, $rootClass->fieldMappings[$identifier]['type']); + $this->_getQuery()->setHint(self::IDENTIFIER_TYPE, $rootClass->getProperty($identifier)->getType()); $pathExpression = new PathExpression( PathExpression::TYPE_STATE_FIELD | PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION, diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 828de915dc4..1f08dc8ba88 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -19,6 +19,7 @@ namespace Doctrine\ORM\Tools; +use Doctrine\DBAL\Schema\Column; use Doctrine\DBAL\Schema\Comparator; use Doctrine\DBAL\Schema\Index; use Doctrine\DBAL\Schema\Schema; @@ -27,6 +28,9 @@ use Doctrine\DBAL\Schema\Visitor\RemoveNamespacedAssets; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\InheritedFieldMetadata; +use Doctrine\ORM\Mapping\PropertyMetadata; use Doctrine\ORM\ORMException; use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs; use Doctrine\ORM\Tools\Event\GenerateSchemaTableEventArgs; @@ -187,11 +191,11 @@ public function getSchemaFromMetadata(array $classes) // Add all non-inherited fields as columns $pkColumns = []; - foreach ($class->fieldMappings as $fieldName => $mapping) { - if ( ! isset($mapping['inherited'])) { - $columnName = $this->quoteStrategy->getColumnName($mapping['fieldName'], $class, $this->platform); + foreach ($class->getProperties() as $fieldName => $property) { + if ( ! ($property instanceof InheritedFieldMetadata)) { + $columnName = $this->quoteStrategy->getColumnName($fieldName, $class, $this->platform); - $this->gatherColumn($class, $mapping, $table); + $this->gatherColumn($class, $property, $table); if ($class->isIdentifier($fieldName)) { $pkColumns[] = $columnName; @@ -209,19 +213,14 @@ public function getSchemaFromMetadata(array $classes) $inheritedKeyColumns = []; foreach ($class->identifier as $identifierField) { - $idMapping = $class->fieldMappings[$identifierField]; + $idProperty = $class->getProperty($identifierField); - if (isset($idMapping['inherited'])) { - $this->gatherColumn($class, $idMapping, $table); - - $columnName = $this->quoteStrategy->getColumnName( - $identifierField, - $class, - $this->platform - ); + if ($idProperty instanceof InheritedFieldMetadata) { + $column = $this->gatherColumn($class, $idProperty, $table); + $columnName = $column->getQuotedName($this->platform); // TODO: This seems rather hackish, can we optimize it? - $table->getColumn($columnName)->setAutoincrement(false); + $column->setAutoincrement(false); $pkColumns[] = $columnName; $inheritedKeyColumns[] = $columnName; @@ -253,9 +252,13 @@ public function getSchemaFromMetadata(array $classes) $pkColumns = []; foreach ($class->identifier as $identifierField) { - if (isset($class->fieldMappings[$identifierField])) { + if (($property = $class->getProperty($identifierField)) !== null) { $pkColumns[] = $this->quoteStrategy->getColumnName($identifierField, $class, $this->platform); - } elseif (isset($class->associationMappings[$identifierField])) { + + continue; + } + + if (isset($class->associationMappings[$identifierField])) { /* @var $assoc \Doctrine\ORM\Annotation\OneToOne */ $assoc = $class->associationMappings[$identifierField]; @@ -395,15 +398,15 @@ private function gatherColumns($class, Table $table) { $pkColumns = []; - foreach ($class->fieldMappings as $mapping) { + foreach ($class->getProperties() as $property) { if ($class->isInheritanceTypeSingleTable() && isset($mapping['inherited'])) { continue; } - $this->gatherColumn($class, $mapping, $table); + $this->gatherColumn($class, $property, $table); - if ($class->isIdentifier($mapping['fieldName'])) { - $pkColumns[] = $this->quoteStrategy->getColumnName($mapping['fieldName'], $class, $this->platform); + if ($property->isPrimaryKey()) { + $pkColumns[] = $this->quoteStrategy->getColumnName($property->getFieldName(), $class, $this->platform); } } } @@ -411,83 +414,82 @@ private function gatherColumns($class, Table $table) /** * Creates a column definition as required by the DBAL from an ORM field mapping definition. * - * @param ClassMetadata $class The class that owns the field mapping. - * @param array $mapping The field mapping. + * @param ClassMetadata $classMetadata The class that owns the field mapping. + * @param FieldMetadata $fieldMetadata The field mapping. * @param Table $table * - * @return void + * @return Column The portable column definition as required by the DBAL. */ - private function gatherColumn($class, array $mapping, Table $table) + private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Table $table) { - $columnName = $this->quoteStrategy->getColumnName($mapping['fieldName'], $class, $this->platform); - $columnType = $mapping['type']->getName(); + $fieldName = $fieldMetadata->getFieldName(); + $columnName = $this->quoteStrategy->getColumnName($fieldName, $classMetadata, $this->platform); + $columnType = $fieldMetadata->getTypeName(); $options = [ - 'length' => isset($mapping['length']) ? $mapping['length'] : null, - 'notnull' => isset($mapping['nullable']) ? ! $mapping['nullable'] : true, + 'length' => $fieldMetadata->getLength(), + 'notnull' => ! $fieldMetadata->isNullable(), 'platformOptions' => [ - 'version' => ($class->isVersioned && $class->versionField === $mapping['fieldName']), + 'version' => ($classMetadata->isVersioned && $classMetadata->versionField === $fieldName), ], ]; - if ($class->isInheritanceTypeSingleTable() && count($class->parentClasses) > 0) { + if ($classMetadata->isInheritanceTypeSingleTable() && count($classMetadata->parentClasses) > 0) { $options['notnull'] = false; } - if (strtolower($columnType) == 'string' && null === $options['length']) { + if (strtolower($columnType) === 'string' && null === $options['length']) { $options['length'] = 255; } - if (isset($mapping['precision'])) { - $options['precision'] = $mapping['precision']; + if (is_int($fieldMetadata->getPrecision())) { + $options['precision'] = $fieldMetadata->getPrecision(); } - if (isset($mapping['scale'])) { - $options['scale'] = $mapping['scale']; + if (is_int($fieldMetadata->getScale())) { + $options['scale'] = $fieldMetadata->getScale(); } - if (isset($mapping['default'])) { - $options['default'] = $mapping['default']; + if ($fieldMetadata->getColumnDefinition()) { + $options['columnDefinition'] = $fieldMetadata->getColumnDefinition(); } - if (isset($mapping['columnDefinition'])) { - $options['columnDefinition'] = $mapping['columnDefinition']; - } + $fieldOptions = $fieldMetadata->getOptions(); - if (isset($mapping['options'])) { + if ($fieldOptions) { $knownOptions = ['comment', 'unsigned', 'fixed', 'default']; foreach ($knownOptions as $knownOption) { - if (array_key_exists($knownOption, $mapping['options'])) { - $options[$knownOption] = $mapping['options'][$knownOption]; + if (array_key_exists($knownOption, $fieldOptions)) { + $options[$knownOption] = $fieldOptions[$knownOption]; - unset($mapping['options'][$knownOption]); + unset($fieldOptions[$knownOption]); } } - $options['customSchemaOptions'] = $mapping['options']; + $options['customSchemaOptions'] = $fieldOptions; } - if ($class->isIdGeneratorIdentity() && $class->getIdentifierFieldNames() == [$mapping['fieldName']]) { + if ($classMetadata->isIdGeneratorIdentity() && $classMetadata->getIdentifierFieldNames() == [$fieldName]) { $options['autoincrement'] = true; } - if ($class->isInheritanceTypeJoined() && $class->name !== $class->rootEntityName) { + if ($classMetadata->isInheritanceTypeJoined() && $classMetadata->name !== $classMetadata->rootEntityName) { $options['autoincrement'] = false; } + if ($fieldMetadata->isUnique()) { + $table->addUniqueIndex([$columnName]); + } + if ($table->hasColumn($columnName)) { // required in some inheritance scenarios $table->changeColumn($columnName, $options); - } else { - $table->addColumn($columnName, $columnType, $options); - } - $isUnique = isset($mapping['unique']) ? $mapping['unique'] : false; - - if ($isUnique) { - $table->addUniqueIndex([$columnName]); + return $table->getColumn($columnName); } + + return $table->addColumn($columnName, $columnType, $options); } /** diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 43f426c5f37..21d2bd8b2be 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -2574,8 +2574,8 @@ public function createEntity($className, array $data, &$hints = []) } foreach ($data as $field => $value) { - if (isset($class->fieldMappings[$field])) { - $class->reflFields[$field]->setValue($entity, $value); + if (($property = $class->getProperty($field)) !== null) { + $property->setValue($entity, $value); } } @@ -3118,12 +3118,11 @@ public function clearEntityChangeSet($oid) */ public function propertyChanged($entity, $propertyName, $oldValue, $newValue) { - $oid = spl_object_hash($entity); - $class = $this->em->getClassMetadata(get_class($entity)); - + $oid = spl_object_hash($entity); + $class = $this->em->getClassMetadata(get_class($entity)); $isAssocField = isset($class->associationMappings[$propertyName]); - if ( ! $isAssocField && ! isset($class->fieldMappings[$propertyName])) { + if ( ! $isAssocField && ! $class->getProperty($propertyName)) { return; // ignore non-persistent fields } diff --git a/lib/Doctrine/ORM/Utility/PersisterHelper.php b/lib/Doctrine/ORM/Utility/PersisterHelper.php index 981188b7c52..08d8a454c16 100644 --- a/lib/Doctrine/ORM/Utility/PersisterHelper.php +++ b/lib/Doctrine/ORM/Utility/PersisterHelper.php @@ -46,8 +46,8 @@ class PersisterHelper */ public static function getTypeOfField($fieldName, ClassMetadata $class, EntityManagerInterface $em) { - if (isset($class->fieldMappings[$fieldName])) { - return [$class->fieldMappings[$fieldName]['type']]; + if (($property = $class->getProperty($fieldName)) !== null) { + return [$property->getType()]; } if ( ! isset($class->associationMappings[$fieldName])) { @@ -90,9 +90,7 @@ public static function getTypeOfColumn($columnName, ClassMetadata $class, Entity if (isset($class->fieldNames[$columnName])) { $fieldName = $class->fieldNames[$columnName]; - if (isset($class->fieldMappings[$fieldName])) { - return $class->fieldMappings[$fieldName]['type']; - } + return $class->getProperty($fieldName)->getType(); } // iterate over to-one association mappings diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php index e1bbe2c6f8d..a3f9a83db57 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php @@ -24,9 +24,11 @@ ] ); -$metadata->mapManyToMany(array( +$metadata->mapManyToMany( + [ 'fieldName' => 'groups', 'targetEntity' => 'DDC3579Group' -)); + ] +); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 211932f6dc1..5f3cd1b908e 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -727,7 +727,7 @@ public function testGenerateEntityWithMultipleInverseJoinColumns() { $metadata = new ClassMetadata($this->_namespace . '\DDC2079Entity'); - $metadata->addProperty('id', Type::getType('integer'), array('id' => true)); + $metadata->addProperty('id', Type::getType('integer'), ['id' => true]); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); From d956b5d4072f8ea73587d9ebdda9a58cff3469dd Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 20 May 2016 13:11:22 +0000 Subject: [PATCH 024/275] More work related to FieldMetadata and InheritedFieldMetadata --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 132 +++++++----------- .../ORM/Mapping/ClassMetadataFactory.php | 14 +- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 47 ++++++- .../ORM/Mapping/InheritedFieldMetadata.php | 28 ++++ lib/Doctrine/ORM/Mapping/PropertyMetadata.php | 10 ++ .../Entity/BasicEntityPersister.php | 4 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 20 +-- .../ORM/Functional/AdvancedDqlQueryTest.php | 7 +- 8 files changed, 150 insertions(+), 112 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index e39e8fa0e1a..04f4d4f83da 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1353,76 +1353,6 @@ public function getSqlResultSetMappings() return $this->sqlResultSetMappings; } - /** - * Validates & completes the given field mapping. - * - * @param array $mapping The field mapping to validate & complete. - * - * @return array The validated and completed field mapping. - * - * @throws MappingException - */ - protected function validateAndCompleteFieldMapping(array &$mapping) - { - $mapping['declaringClass'] = $this; - $mapping['tableName'] = ! $this->isMappedSuperclass ? $this->getTableName() : null; - - // Check mandatory fields - if ( ! isset($mapping['fieldName']) || ! $mapping['fieldName']) { - throw MappingException::missingFieldName($this->name); - } - - $type = isset($mapping['type']) - ? $mapping['type'] - : 'string'; // Default to string - - if ( ! ($type instanceof Type)) { - $mapping['type'] = Type::getType($type); - } - - // Complete fieldName and columnName mapping - if ( ! isset($mapping['columnName'])) { - $mapping['columnName'] = $this->namingStrategy->propertyToColumnName($mapping['fieldName'], $this->name); - } - - if ('`' === $mapping['columnName'][0]) { - $mapping['columnName'] = trim($mapping['columnName'], '`'); - $mapping['quoted'] = true; - } - - if (isset($this->fieldNames[$mapping['columnName']]) || ($this->discriminatorColumn && $this->discriminatorColumn['name'] === $mapping['columnName'])) { - throw MappingException::duplicateColumnName($this->name, $mapping['columnName']); - } - - $this->fieldNames[$mapping['columnName']] = $mapping['fieldName']; - - // Complete id mapping - if (isset($mapping['id']) && true === $mapping['id']) { - if ($this->versionField == $mapping['fieldName']) { - throw MappingException::cannotVersionIdField($this->name, $mapping['fieldName']); - } - - if ( ! in_array($mapping['fieldName'], $this->identifier)) { - $this->identifier[] = $mapping['fieldName']; - } - - // Check for composite key - if ( ! $this->isIdentifierComposite && count($this->identifier) > 1) { - $this->isIdentifierComposite = true; - } - } - - if ($mapping['type']->canRequireSQLConversion()) { - if (isset($mapping['id']) && true === $mapping['id']) { - throw MappingException::sqlConversionNotAllowedForIdentifiers( - $this->name, - $mapping['fieldName'], - $mapping['type'] - ); - } - } - } - /** * Validates & completes the basic mapping information that is common to all * association mappings (one-to-one, many-ot-one, one-to-many, many-to-many). @@ -2200,7 +2130,8 @@ public function isRootEntity() */ public function isInheritedField($fieldName) { - return $this->properties[$fieldName] instanceof InheritedFieldMetadata; + return isset($this->properties[$fieldName]) + && $this->properties[$fieldName] instanceof InheritedFieldMetadata; } /** @@ -2351,12 +2282,12 @@ public function addProperty($fieldName, Type $type, array $mapping = []) assert($this->versionField !== $fieldName, MappingException::cannotVersionIdField($this->name, $fieldName)); assert(! $type->canRequireSQLConversion(), MappingException::sqlConversionNotAllowedForPrimaryKeyProperties($property)); - if ( ! in_array($fieldName, $this->identifier)) { + if (! in_array($fieldName, $this->identifier)) { $this->identifier[] = $fieldName; } // Check for composite key - if ( ! $this->isIdentifierComposite && count($this->identifier) > 1) { + if (! $this->isIdentifierComposite && count($this->identifier) > 1) { $this->isIdentifierComposite = true; } } @@ -2366,22 +2297,39 @@ public function addProperty($fieldName, Type $type, array $mapping = []) /** * INTERNAL: - * Adds an association mapping without completing/validating it. - * This is mainly used to add inherited association mappings to derived classes. + * Adds a field mapping without completing/validating it. + * This is mainly used to add inherited field mappings to derived classes. * - * @param array $mapping + * @param ClassMetadata $declaringClass + * @param string $fieldName * * @return void - * - * @throws MappingException */ - public function addInheritedAssociationMapping(array $mapping/*, $owningClassName = null*/) + public function addInheritedProperty(ClassMetadata $declaringClass, $fieldName) { - if (isset($this->associationMappings[$mapping['fieldName']])) { - throw MappingException::duplicateAssociationMapping($this->name, $mapping['fieldName']); + $property = $declaringClass->getProperty($fieldName); + $inheritedProperty = new InheritedFieldMetadata($this, $declaringClass, $fieldName, $property->getType()); + + if ( ! $declaringClass->isMappedSuperclass) { + $inheritedProperty->setTableName($property->getTableName()); } - $this->associationMappings[$mapping['fieldName']] = $mapping; + //if ( ! $property->getTableName() && ! $this->isMappedSuperclass) { + // $inheritedProperty->setTableName($this->getTableName()); + //} + + $inheritedProperty->setColumnName($property->getColumnName()); + $inheritedProperty->setColumnDefinition($property->getColumnDefinition()); + $inheritedProperty->setPrimaryKey($property->isPrimaryKey()); + $inheritedProperty->setNullable($property->isNullable()); + $inheritedProperty->setUnique($property->isUnique()); + $inheritedProperty->setLength($property->getLength()); + $inheritedProperty->setScale($property->getScale()); + $inheritedProperty->setPrecision($property->getPrecision()); + $inheritedProperty->setOptions($property->getOptions()); + + $this->fieldNames[$property->getColumnName()] = $fieldName; + $this->properties[$fieldName] = $inheritedProperty; } /** @@ -2399,6 +2347,26 @@ public function addInheritedFieldMapping(array $fieldMapping) //$this->fieldNames[$fieldMapping['columnName']] = $fieldMapping['fieldName']; } + /** + * INTERNAL: + * Adds an association mapping without completing/validating it. + * This is mainly used to add inherited association mappings to derived classes. + * + * @param array $mapping + * + * @return void + * + * @throws MappingException + */ + public function addInheritedAssociationMapping(array $mapping/*, $owningClassName = null*/) + { + if (isset($this->associationMappings[$mapping['fieldName']])) { + throw MappingException::duplicateAssociationMapping($this->name, $mapping['fieldName']); + } + + $this->associationMappings[$mapping['fieldName']] = $mapping; + } + /** * INTERNAL: * Adds a named query to this class. diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 30c542161ed..549691c12c2 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -445,17 +445,9 @@ private function getShortName($className) */ private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $parentClass) { - /*foreach ($parentClass->fieldMappings as $mapping) { - if ( ! isset($mapping['tableName'])) { - $mapping['tableName'] = ! $parentClass->isMappedSuperclass ? $parentClass->getTableName() : null; - } - - if ( ! isset($mapping['inherited']) && ! $parentClass->isMappedSuperclass) { - $mapping['inherited'] = $parentClass->name; - } - - $subClass->addInheritedFieldMapping($mapping); - }*/ + foreach ($parentClass->getProperties() as $property) { + $subClass->addInheritedProperty($property->getDeclaringClass(), $property->getFieldName()); + } foreach ($parentClass->reflFields as $name => $field) { $subClass->reflFields[$name] = $field; diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index 64ffe235f3e..65472bc3286 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -2,6 +2,7 @@ namespace Doctrine\ORM\Mapping; +use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\Type; class FieldMetadata implements PropertyMetadata @@ -79,22 +80,30 @@ class FieldMetadata implements PropertyMetadata /** * FieldMetadata constructor. * - * @param ClassMetadata $declaringClass + * @param ClassMetadata $currentClass * @param string $fieldName * @param Type $type */ - public function __construct(ClassMetadata $declaringClass, $fieldName, Type $type) + public function __construct(ClassMetadata $currentClass, $fieldName, Type $type) { - $reflection = $declaringClass->getReflectionClass()->getProperty($fieldName); + $reflection = $currentClass->getReflectionClass()->getProperty($fieldName); $reflection->setAccessible(true); - $this->declaringClass = $declaringClass; + $this->declaringClass = $currentClass; $this->reflection = $reflection; $this->fieldName = $fieldName; $this->type = $type; } + /** + * {@inheritdoc} + */ + public function getCurrentClass() + { + return $this->declaringClass; + } + /** * {@inheritdoc} */ @@ -303,6 +312,36 @@ public function isUnique() return $this->isUnique; } + /** + * {@inheritdoc} + */ + public function isAssociation() + { + return false; + } + + /** + * {@inheritdoc} + */ + public function isField() + { + return true; + } + + /** + * @param AbstractPlatform $platform + * @param QuoteStrategy|null $quoteStrategy + * + * @return string + */ + public function getQuotedColumnName(AbstractPlatform $platform, QuoteStrategy $quoteStrategy = null) + { + return $quoteStrategy + ? $quoteStrategy->getColumnName($this->fieldName, $this->declaringClass, $platform) + : $platform->quoteIdentifier($this->columnName) + ; + } + /** * @return array */ diff --git a/lib/Doctrine/ORM/Mapping/InheritedFieldMetadata.php b/lib/Doctrine/ORM/Mapping/InheritedFieldMetadata.php index 052951ab63d..e2adb81f16f 100644 --- a/lib/Doctrine/ORM/Mapping/InheritedFieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/InheritedFieldMetadata.php @@ -2,7 +2,35 @@ namespace Doctrine\ORM\Mapping; +use Doctrine\DBAL\Types\Type; + class InheritedFieldMetadata extends FieldMetadata { + /** + * @var ClassMetadata + */ + private $currentClass; + + /** + * FieldMetadata constructor. + * + * @param ClassMetadata $currentClass + * @param ClassMetadata $declaringClass + * @param string $fieldName + * @param Type $type + */ + public function __construct(ClassMetadata $currentClass, ClassMetadata $declaringClass, $fieldName, Type $type) + { + parent::__construct($declaringClass, $fieldName, $type); + + $this->currentClass = $currentClass; + } + /** + * {@inheritdoc} + */ + public function getCurrentClass() + { + return $this->currentClass; + } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/PropertyMetadata.php b/lib/Doctrine/ORM/Mapping/PropertyMetadata.php index 4b07e8d986b..0a9912db977 100644 --- a/lib/Doctrine/ORM/Mapping/PropertyMetadata.php +++ b/lib/Doctrine/ORM/Mapping/PropertyMetadata.php @@ -53,4 +53,14 @@ public function getTableName(); * @return boolean */ public function isPrimaryKey(); + + /** + * @return boolean + */ + public function isAssociation(); + + /** + * @return boolean + */ + public function isField(); } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 6d4ee3be66d..10083d3a478 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -646,7 +646,7 @@ protected function prepareUpdateData($entity) $this->columnTypes[$columnName] = $property->getType(); - $result[$this->getOwningTable($field)][$columnName] = $newVal; + $result[$property->getTableName()][$columnName] = $newVal; continue; } @@ -1453,7 +1453,7 @@ protected function getInsertColumnList() $columns = []; foreach ($this->class->reflFields as $name => $field) { - if ($this->class->isVersioned && $this->class->versionField == $name) { + if ($this->class->isVersioned && $this->class->versionField === $name) { continue; } diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 1f08dc8ba88..118b23f916b 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -664,34 +664,34 @@ private function gatherRelationJoinColumns( // Only add the column to the table if it does not exist already. // It might exist already if the foreign key is mapped into a regular // property as well. - $fieldMapping = $definingClass->getFieldMapping($referencedFieldName); - $columnDef = null; + $property = $definingClass->getProperty($referencedFieldName); + $columnDef = null; if (isset($joinColumn['columnDefinition'])) { $columnDef = $joinColumn['columnDefinition']; - } elseif (isset($fieldMapping['columnDefinition'])) { - $columnDef = $fieldMapping['columnDefinition']; + } elseif ($property->getColumnDefinition()) { + $columnDef = $property->getColumnDefinition(); } $columnOptions = ['notnull' => false, 'columnDefinition' => $columnDef]; - $columnType = $fieldMapping['type']->getName(); + $columnType = $property->getTypeName(); if (isset($joinColumn['nullable'])) { $columnOptions['notnull'] = !$joinColumn['nullable']; } - if (isset($fieldMapping['options'])) { - $columnOptions['options'] = $fieldMapping['options']; + if ($property->getOptions()) { + $columnOptions['options'] = $property->getOptions(); } switch ($columnType) { case 'string': - $columnOptions['length'] = ($fieldMapping['length'] !== null) ? $fieldMapping['length'] : 255; + $columnOptions['length'] = is_int($property->getLength()) ? $property->getLength() : 255; break; case 'decimal': - $columnOptions['scale'] = $fieldMapping['scale']; - $columnOptions['precision'] = $fieldMapping['precision']; + $columnOptions['scale'] = $property->getScale(); + $columnOptions['precision'] = $property->getPrecision(); break; } diff --git a/tests/Doctrine/Tests/ORM/Functional/AdvancedDqlQueryTest.php b/tests/Doctrine/Tests/ORM/Functional/AdvancedDqlQueryTest.php index c4080d5454b..fc86bad29a0 100644 --- a/tests/Doctrine/Tests/ORM/Functional/AdvancedDqlQueryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/AdvancedDqlQueryTest.php @@ -2,9 +2,9 @@ namespace Doctrine\Tests\ORM\Functional; -use Doctrine\Tests\Models\Company\CompanyEmployee, - Doctrine\Tests\Models\Company\CompanyManager, - Doctrine\Tests\Models\Company\CompanyCar; +use Doctrine\Tests\Models\Company\CompanyEmployee; +use Doctrine\Tests\Models\Company\CompanyManager; +use Doctrine\Tests\Models\Company\CompanyCar; use Doctrine\Tests\OrmFunctionalTestCase; /** @@ -17,6 +17,7 @@ class AdvancedDqlQueryTest extends OrmFunctionalTestCase protected function setUp() { $this->useModelSet('company'); + parent::setUp(); $this->generateFixture(); From 04d8008cebc47a7546880adbca88174e3dee3b6f Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 20 May 2016 13:33:44 +0000 Subject: [PATCH 025/275] Fixed a bunch of unit tests --- .../ORM/Persisters/Entity/JoinedSubclassPersister.php | 8 ++++---- lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php | 2 -- lib/Doctrine/ORM/Tools/SchemaTool.php | 4 ++-- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index 92ee90f9525..0b6103941c7 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -158,6 +158,7 @@ public function executeInserts() if ($parentClass !== $rootClass) { $parentPersister = $this->em->getUnitOfWork()->getEntityPersister($parentClassName); + $subTableStmts[$parentTableName] = $this->conn->prepare($parentPersister->getInsertSQL()); } } @@ -179,9 +180,8 @@ public function executeInserts() if ($isPostInsertId) { $generatedId = $idGenerator->generate($this->em, $entity); - $id = [ - $this->class->identifier[0] => $generatedId - ]; + $id = [$this->class->identifier[0] => $generatedId]; + $postInsertIds[] = [ 'generatedId' => $generatedId, 'entity' => $entity, @@ -525,7 +525,7 @@ protected function getInsertColumnList() foreach ($this->class->reflFields as $name => $field) { $property = $this->class->getProperty($name); - if (($property instanceof InheritedFieldMetadata && ! $property->isPrimaryKey()) + if (($property instanceof InheritedFieldMetadata) || isset($this->class->associationMappings[$name]['inherited']) || ($this->class->isVersioned && $this->class->versionField === $name) /*|| isset($this->class->embeddedClasses[$name])*/) { diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php index 0644da391cf..34dfd7c0d28 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php @@ -20,9 +20,7 @@ namespace Doctrine\ORM\Query\Exec; use Doctrine\DBAL\Connection; -use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\InheritedFieldMetadata; -use Doctrine\ORM\Query\ParameterTypeInferer; use Doctrine\ORM\Query\AST; use Doctrine\ORM\Query\ParameterTypeInferer; use Doctrine\ORM\Utility\PersisterHelper; diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 118b23f916b..e32bc2b694e 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -399,7 +399,7 @@ private function gatherColumns($class, Table $table) $pkColumns = []; foreach ($class->getProperties() as $property) { - if ($class->isInheritanceTypeSingleTable() && isset($mapping['inherited'])) { + if ($class->isInheritanceTypeSingleTable() && $property instanceof InheritedFieldMetadata) { continue; } @@ -428,7 +428,7 @@ private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Tabl $options = [ 'length' => $fieldMetadata->getLength(), - 'notnull' => ! $fieldMetadata->isNullable(), + 'notnull' => $fieldMetadata->isNullable(), 'platformOptions' => [ 'version' => ($classMetadata->isVersioned && $classMetadata->versionField === $fieldName), ], From 5dc45c65d13534b388baf14461c26d6ce6434e36 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 20 May 2016 13:53:25 +0000 Subject: [PATCH 026/275] Converted ClassMetadtaa::setVersionMapping to use FieldMetadata instead of mapping --- .../ORM/Mapping/Builder/FieldBuilder.php | 11 +-- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 24 ++++--- .../ORM/Mapping/Driver/AnnotationDriver.php | 71 +++++++++---------- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 5 +- .../ORM/Mapping/Driver/YamlDriver.php | 8 +-- .../ORM/Mapping/AbstractMappingDriverTest.php | 7 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 12 ++-- 7 files changed, 67 insertions(+), 71 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php index e6341874800..536106c31ad 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php @@ -287,15 +287,18 @@ public function setCustomIdGenerator($customIdGenerator) public function build() { $cm = $this->builder->getClassMetadata(); + if ($this->generatedValue) { - $cm->setIdGeneratorType(constant('Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_' . $this->generatedValue)); + $cm->setIdGeneratorType( + constant('Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_' . $this->generatedValue) + ); } + $property = $cm->addProperty($this->name, $this->type, $this->mapping); + if ($this->version) { - $cm->setVersionMapping($this->mapping); + $cm->setVersionMapping($property); } - - $cm->addProperty($this->name, $this->type, $this->mapping); if ($this->sequenceDef) { $cm->setSequenceGeneratorDefinition($this->sequenceDef); diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 04f4d4f83da..9dfc927316f 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -2293,6 +2293,8 @@ public function addProperty($fieldName, Type $type, array $mapping = []) } $this->properties[$fieldName] = $property; + + return $property; } /** @@ -3004,24 +3006,26 @@ public function setSequenceGeneratorDefinition(array $definition) * Sets the version field mapping used for versioning. Sets the default * value to use depending on the column type. * - * @param array $mapping The version field mapping array. + * @param FieldMetadata $fieldMetadata * * @return void * * @throws MappingException */ - public function setVersionMapping(array &$mapping) + public function setVersionMapping(FieldMetadata $fieldMetadata) { - $this->isVersioned = true; - $this->versionField = $mapping['fieldName']; + $this->isVersioned = true; + $this->versionField = $fieldMetadata->getFieldName(); + + $options = $fieldMetadata->getOptions(); - if ( ! isset($mapping['default'])) { - if (in_array($mapping['type'], ['integer', 'bigint', 'smallint'])) { - $mapping['default'] = 1; - } else if ($mapping['type'] == 'datetime') { - $mapping['default'] = 'CURRENT_TIMESTAMP'; + if ( ! isset($options['default'])) { + if (in_array($fieldMetadata->getTypeName(), ['integer', 'bigint', 'smallint'])) { + $fieldMetadata->setOptions(array_merge($options, ['default' => 1])); + } else if ($fieldMetadata->getTypeName() === 'datetime') { + $fieldMetadata->setOptions(array_merge($options, ['default' => 'CURRENT_TIMESTAMP'])); } else { - throw MappingException::unsupportedOptimisticLockingType($this->name, $mapping['fieldName'], $mapping['type']); + throw MappingException::unsupportedOptimisticLockingType($this->name, $this->versionField, $fieldMetadata->getType()); } } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 42f8a8c1b19..3d2bfec53d4 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -288,23 +288,20 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat } // Evaluate annotations on properties/fields - /* @var $property \ReflectionProperty */ - foreach ($class->getProperties() as $property) { - if ($metadata->isMappedSuperclass && ! $property->isPrivate() - || - $metadata->isInheritedField($property->name) - || - $metadata->isInheritedAssociation($property->name) - || - $metadata->isInheritedEmbeddedClass($property->name)) { + /* @var $reflProperty \ReflectionProperty */ + foreach ($class->getProperties() as $reflProperty) { + if (($metadata->isMappedSuperclass && ! $reflProperty->isPrivate()) + || $metadata->isInheritedField($reflProperty->name) + || $metadata->isInheritedAssociation($reflProperty->name) + || $metadata->isInheritedEmbeddedClass($reflProperty->name)) { continue; } $mapping = []; - $mapping['fieldName'] = $property->getName(); + $mapping['fieldName'] = $reflProperty->getName(); // Evaluate @Cache annotation - if (($cacheAnnot = $this->reader->getPropertyAnnotation($property, Annotation\Cache::class)) !== null) { + if (($cacheAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Cache::class)) !== null) { $mapping['cache'] = $metadata->getAssociationCacheDefaults( $mapping['fieldName'], [ @@ -316,9 +313,9 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat // Check for JoinColumn/JoinColumns annotations $joinColumns = []; - if ($joinColumnAnnot = $this->reader->getPropertyAnnotation($property, Annotation\JoinColumn::class)) { + if ($joinColumnAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinColumn::class)) { $joinColumns[] = $this->joinColumnToArray($joinColumnAnnot); - } else if ($joinColumnsAnnot = $this->reader->getPropertyAnnotation($property, Annotation\JoinColumns::class)) { + } else if ($joinColumnsAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinColumns::class)) { foreach ($joinColumnsAnnot->value as $joinColumn) { $joinColumns[] = $this->joinColumnToArray($joinColumn); } @@ -326,31 +323,31 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat // Field can only be annotated with one of: // @Column, @OneToOne, @OneToMany, @ManyToOne, @ManyToMany - if ($columnAnnot = $this->reader->getPropertyAnnotation($property, Annotation\Column::class)) { + if ($columnAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Column::class)) { if ($columnAnnot->type == null) { - throw MappingException::propertyTypeIsRequired($className, $property->getName()); + throw MappingException::propertyTypeIsRequired($className, $reflProperty->getName()); } $mapping = $this->columnToArray($columnAnnot); - if ($idAnnot = $this->reader->getPropertyAnnotation($property, Annotation\Id::class)) { + if ($idAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Id::class)) { $mapping['id'] = true; } - if ($generatedValueAnnot = $this->reader->getPropertyAnnotation($property, Annotation\GeneratedValue::class)) { + if ($generatedValueAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\GeneratedValue::class)) { $metadata->setIdGeneratorType( constant(sprintf('%s::GENERATOR_TYPE_%s', ClassMetadata::class, $generatedValueAnnot->strategy)) ); } - if ($this->reader->getPropertyAnnotation($property, Annotation\Version::class)) { - $metadata->setVersionMapping($mapping); - } + $property = $metadata->addProperty($reflProperty->getName(), Type::getType($columnAnnot->type), $mapping); - $metadata->addProperty($property->getName(), Type::getType($columnAnnot->type), $mapping); + if ($this->reader->getPropertyAnnotation($reflProperty, Annotation\Version::class)) { + $metadata->setVersionMapping($property); + } // Check for SequenceGenerator/TableGenerator definition - if ($seqGeneratorAnnot = $this->reader->getPropertyAnnotation($property, Annotation\SequenceGenerator::class)) { + if ($seqGeneratorAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\SequenceGenerator::class)) { $metadata->setSequenceGeneratorDefinition( [ 'sequenceName' => $seqGeneratorAnnot->sequenceName, @@ -358,17 +355,13 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat 'initialValue' => $seqGeneratorAnnot->initialValue ] ); - } else if ($this->reader->getPropertyAnnotation($property, 'Doctrine\ORM\Mapping\TableGenerator')) { + } else if ($this->reader->getPropertyAnnotation($reflProperty, 'Doctrine\ORM\Mapping\TableGenerator')) { throw MappingException::tableIdGeneratorNotImplemented($className); - } else if ($customGeneratorAnnot = $this->reader->getPropertyAnnotation($property, Annotation\CustomIdGenerator::class)) { - $metadata->setCustomGeneratorDefinition( - [ - 'class' => $customGeneratorAnnot->class - ] - ); + } else if ($customGeneratorAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\CustomIdGenerator::class)) { + $metadata->setCustomGeneratorDefinition(['class' => $customGeneratorAnnot->class]); } - } else if ($oneToOneAnnot = $this->reader->getPropertyAnnotation($property, Annotation\OneToOne::class)) { - if ($idAnnot = $this->reader->getPropertyAnnotation($property, Annotation\Id::class)) { + } else if ($oneToOneAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\OneToOne::class)) { + if ($idAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Id::class)) { $mapping['id'] = true; } @@ -380,7 +373,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $mapping['orphanRemoval'] = $oneToOneAnnot->orphanRemoval; $mapping['fetch'] = $this->getFetchMode($className, $oneToOneAnnot->fetch); $metadata->mapOneToOne($mapping); - } else if ($oneToManyAnnot = $this->reader->getPropertyAnnotation($property, Annotation\OneToMany::class)) { + } else if ($oneToManyAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\OneToMany::class)) { $mapping['mappedBy'] = $oneToManyAnnot->mappedBy; $mapping['targetEntity'] = $oneToManyAnnot->targetEntity; $mapping['cascade'] = $oneToManyAnnot->cascade; @@ -388,13 +381,13 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $mapping['orphanRemoval'] = $oneToManyAnnot->orphanRemoval; $mapping['fetch'] = $this->getFetchMode($className, $oneToManyAnnot->fetch); - if ($orderByAnnot = $this->reader->getPropertyAnnotation($property, Annotation\OrderBy::class)) { + if ($orderByAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\OrderBy::class)) { $mapping['orderBy'] = $orderByAnnot->value; } $metadata->mapOneToMany($mapping); - } else if ($manyToOneAnnot = $this->reader->getPropertyAnnotation($property, Annotation\ManyToOne::class)) { - if ($idAnnot = $this->reader->getPropertyAnnotation($property, Annotation\Id::class)) { + } else if ($manyToOneAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\ManyToOne::class)) { + if ($idAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Id::class)) { $mapping['id'] = true; } @@ -404,10 +397,10 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $mapping['targetEntity'] = $manyToOneAnnot->targetEntity; $mapping['fetch'] = $this->getFetchMode($className, $manyToOneAnnot->fetch); $metadata->mapManyToOne($mapping); - } else if ($manyToManyAnnot = $this->reader->getPropertyAnnotation($property, Annotation\ManyToMany::class)) { + } else if ($manyToManyAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\ManyToMany::class)) { $joinTable = []; - if ($joinTableAnnot = $this->reader->getPropertyAnnotation($property, Annotation\JoinTable::class)) { + if ($joinTableAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinTable::class)) { $joinTable = [ 'name' => $joinTableAnnot->name, 'schema' => $joinTableAnnot->schema @@ -431,12 +424,12 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $mapping['orphanRemoval'] = $manyToManyAnnot->orphanRemoval; $mapping['fetch'] = $this->getFetchMode($className, $manyToManyAnnot->fetch); - if ($orderByAnnot = $this->reader->getPropertyAnnotation($property, Annotation\OrderBy::class)) { + if ($orderByAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\OrderBy::class)) { $mapping['orderBy'] = $orderByAnnot->value; } $metadata->mapManyToMany($mapping); - } else if ($embeddedAnnot = $this->reader->getPropertyAnnotation($property, Annotation\Embedded::class)) { + } else if ($embeddedAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Embedded::class)) { $mapping['class'] = $embeddedAnnot->class; $mapping['columnPrefix'] = $embeddedAnnot->columnPrefix; diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index e70e5490f62..d6e219c3c77 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -264,14 +264,13 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $fieldName = (string) $mapping['name']; $fieldType = Type::getType((string) $mapping['type']); $fieldMapping = $this->columnToArray($mapping); + $property = $metadata->addProperty($fieldName, $fieldType, $fieldMapping); if (isset($fieldMapping['version'])) { - $metadata->setVersionMapping($fieldMapping); + $metadata->setVersionMapping($property); unset($fieldMapping['version']); } - - $metadata->addProperty($fieldName, $fieldType, $fieldMapping); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php index 920f7cfd42e..dc9a486298a 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php @@ -339,13 +339,11 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } } - if (isset($mapping['version'])) { - $metadata->setVersionMapping($mapping); + $property = $metadata->addProperty($fieldName, Type::getType(trim($params[0])), $mapping); - unset($mapping['version']); + if (isset($mapping['version'])) { + $metadata->setVersionMapping($property); } - - $metadata->addProperty($fieldName, Type::getType(trim($params[0])), $mapping); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 8c13bb0b50d..63068525b61 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -1203,12 +1203,11 @@ public static function loadMetadata(ClassMetadata $metadata) ] ); - $mapping = ['fieldName' => 'version', 'type' => 'integer']; - - $metadata->setVersionMapping($mapping); - $metadata->addProperty('version', Type::getType('integer')); + $property = $metadata->addProperty('version', Type::getType('integer')); + $metadata->setVersionMapping($property); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); + $metadata->mapOneToOne( [ 'fieldName' => 'address', diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 49ad7e428a6..49f32947def 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -8,6 +8,7 @@ use Doctrine\ORM\Events; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Mapping\UnderscoreNamingStrategy; use Doctrine\Tests\Models\CMS; @@ -209,15 +210,14 @@ public function testSetSubClassesInGlobalNamespace() */ public function testSetInvalidVersionMapping_ThrowsException() { - $field = []; - $field['fieldName'] = 'foo'; - $field['type'] = 'string'; + $metadata = new ClassMetadata(CMS\CmsUser::class); + $property = new FieldMetadata($metadata, 'foo', Type::getType('string')); - $cm = new ClassMetadata(CMS\CmsUser::class); - $cm->initializeReflection(new RuntimeReflectionService()); + $metadata->initializeReflection(new RuntimeReflectionService()); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - $cm->setVersionMapping($field); + + $metadata->setVersionMapping($property); } public function testGetSingleIdentifierFieldName_MultipleIdentifierEntity_ThrowsException() From 5ea2365a4519f75387d83771f5c7ce044273e6b7 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 20 May 2016 14:20:35 +0000 Subject: [PATCH 027/275] More fixed unit tests --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 2 ++ lib/Doctrine/ORM/Mapping/FieldMetadata.php | 14 +++++++++----- lib/Doctrine/ORM/Mapping/PropertyMetadata.php | 6 ++++++ .../ORM/Persisters/Entity/BasicEntityPersister.php | 2 +- .../Tests/ORM/Functional/DatabaseDriverTest.php | 1 + 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 9dfc927316f..4b9a7b2d6be 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -945,6 +945,8 @@ public function wakeupReflection($reflService) continue; }*/ + $property->wakeupReflection($reflService); + $this->reflFields[$field] = $reflService->getAccessibleProperty($property->getDeclaringClass()->name, $field); } diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index 65472bc3286..f8b71cab2a4 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -2,6 +2,7 @@ namespace Doctrine\ORM\Mapping; +use Doctrine\Common\Persistence\Mapping\ReflectionService; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\Type; @@ -86,12 +87,7 @@ class FieldMetadata implements PropertyMetadata */ public function __construct(ClassMetadata $currentClass, $fieldName, Type $type) { - $reflection = $currentClass->getReflectionClass()->getProperty($fieldName); - - $reflection->setAccessible(true); - $this->declaringClass = $currentClass; - $this->reflection = $reflection; $this->fieldName = $fieldName; $this->type = $type; } @@ -328,6 +324,14 @@ public function isField() return true; } + /** + * {@inheritdoc} + */ + public function wakeupReflection(ReflectionService $reflectionService) + { + $this->reflection = $reflectionService->getAccessibleProperty($this->getDeclaringClass()->name, $this->fieldName); + } + /** * @param AbstractPlatform $platform * @param QuoteStrategy|null $quoteStrategy diff --git a/lib/Doctrine/ORM/Mapping/PropertyMetadata.php b/lib/Doctrine/ORM/Mapping/PropertyMetadata.php index 0a9912db977..095ce99e342 100644 --- a/lib/Doctrine/ORM/Mapping/PropertyMetadata.php +++ b/lib/Doctrine/ORM/Mapping/PropertyMetadata.php @@ -2,6 +2,7 @@ namespace Doctrine\ORM\Mapping; +use Doctrine\Common\Persistence\Mapping\ReflectionService; use Doctrine\DBAL\Types\Type; interface PropertyMetadata @@ -63,4 +64,9 @@ public function isAssociation(); * @return boolean */ public function isField(); + + /** + * @param ReflectionService $reflectionService + */ + public function wakeupReflection(ReflectionService $reflectionService); } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 10083d3a478..4101834b306 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -646,7 +646,7 @@ protected function prepareUpdateData($entity) $this->columnTypes[$columnName] = $property->getType(); - $result[$property->getTableName()][$columnName] = $newVal; + $result[$this->getOwningTable($field)][$columnName] = $newVal; continue; } diff --git a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php index a68e4006c46..f83c2b0d501 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php @@ -17,6 +17,7 @@ class DatabaseDriverTest extends DatabaseDriverTestCase public function setUp() { $this->useModelSet('cms'); + parent::setUp(); $this->_sm = $this->_em->getConnection()->getSchemaManager(); From 0d2bb69d655fae75c18457a996e9f576222ef5e3 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 20 May 2016 23:35:00 +0000 Subject: [PATCH 028/275] Removed quoting support and make sure we always quote data. Still missing checks for discriminator column and version column. --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 63 ++----------------- .../ORM/Mapping/ClassMetadataFactory.php | 1 - .../ORM/Mapping/DefaultQuoteStrategy.php | 28 ++------- .../Pagination/LimitSubqueryOutputWalker.php | 4 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 10 +-- .../Tests/Models/DirectoryTree/File.php | 2 +- .../Tests/Models/Generic/DecimalModel.php | 4 +- .../Models/Generic/NonAlphaColumnsEntity.php | 6 +- tests/Doctrine/Tests/Models/Quote/Address.php | 10 ++- tests/Doctrine/Tests/Models/Quote/Group.php | 8 +-- .../Tests/Models/Quote/NumericEntity.php | 4 +- tests/Doctrine/Tests/Models/Quote/Phone.php | 6 +- tests/Doctrine/Tests/Models/Quote/User.php | 18 +++--- .../ORM/Functional/Ticket/DDC1151Test.php | 4 +- .../ORM/Functional/Ticket/DDC1360Test.php | 2 +- .../ORM/Functional/Ticket/DDC1695Test.php | 38 +++++------ .../ORM/Functional/Ticket/DDC1719Test.php | 6 +- .../ORM/Functional/Ticket/DDC832Test.php | 6 +- .../ORM/Mapping/ClassMetadataFactoryTest.php | 2 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 2 +- .../Tests/ORM/Mapping/QuoteStrategyTest.php | 63 +++++++------------ 21 files changed, 101 insertions(+), 186 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 4b9a7b2d6be..d7c5a2e0120 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1434,14 +1434,7 @@ protected function validateAndCompleteAssociationMapping(array $mapping) } // Mandatory and optional attributes for either side - if ( ! $mapping['mappedBy']) { - if (isset($mapping['joinTable']) && $mapping['joinTable']) { - if (isset($mapping['joinTable']['name']) && $mapping['joinTable']['name'][0] === '`') { - $mapping['joinTable']['name'] = trim($mapping['joinTable']['name'], '`'); - $mapping['joinTable']['quoted'] = true; - } - } - } else { + if ($mapping['mappedBy']) { $mapping['isOwningSide'] = false; } @@ -1530,16 +1523,6 @@ protected function validateAndCompleteOneToOneMapping(array $mapping) $joinColumn['referencedColumnName'] = $this->namingStrategy->referenceColumnName(); } - if ($joinColumn['name'][0] === '`') { - $joinColumn['name'] = trim($joinColumn['name'], '`'); - $joinColumn['quoted'] = true; - } - - if ($joinColumn['referencedColumnName'][0] === '`') { - $joinColumn['referencedColumnName'] = trim($joinColumn['referencedColumnName'], '`'); - $joinColumn['quoted'] = true; - } - $mapping['sourceToTargetKeyColumns'][$joinColumn['name']] = $joinColumn['referencedColumnName']; $mapping['joinColumnFieldNames'][$joinColumn['name']] = isset($joinColumn['fieldName']) ? $joinColumn['fieldName'] @@ -1653,16 +1636,6 @@ protected function validateAndCompleteManyToManyMapping(array $mapping) $joinColumn['referencedColumnName'] = $this->namingStrategy->referenceColumnName(); } - if ($joinColumn['name'][0] === '`') { - $joinColumn['name'] = trim($joinColumn['name'], '`'); - $joinColumn['quoted'] = true; - } - - if ($joinColumn['referencedColumnName'][0] === '`') { - $joinColumn['referencedColumnName'] = trim($joinColumn['referencedColumnName'], '`'); - $joinColumn['quoted'] = true; - } - if (isset($joinColumn['onDelete']) && strtolower($joinColumn['onDelete']) == 'cascade') { $mapping['isOnDeleteCascade'] = true; } @@ -1680,16 +1653,6 @@ protected function validateAndCompleteManyToManyMapping(array $mapping) $inverseJoinColumn['referencedColumnName'] = $this->namingStrategy->referenceColumnName(); } - if ($inverseJoinColumn['name'][0] === '`') { - $inverseJoinColumn['name'] = trim($inverseJoinColumn['name'], '`'); - $inverseJoinColumn['quoted'] = true; - } - - if ($inverseJoinColumn['referencedColumnName'][0] === '`') { - $inverseJoinColumn['referencedColumnName'] = trim($inverseJoinColumn['referencedColumnName'], '`'); - $inverseJoinColumn['quoted'] = true; - } - if (isset($inverseJoinColumn['onDelete']) && strtolower($inverseJoinColumn['onDelete']) == 'cascade') { $mapping['isOnDeleteCascade'] = true; } @@ -2196,11 +2159,6 @@ public function setPrimaryTable(array $table) list($this->table['schema'], $table['name']) = explode('.', $table['name'], 2); } - if ($table['name'][0] === '`') { - $table['name'] = trim($table['name'], '`'); - $this->table['quoted'] = true; - } - $this->table['name'] = $table['name']; } @@ -2273,7 +2231,7 @@ public function addProperty($fieldName, Type $type, array $mapping = []) // Check for already declared column if (isset($this->fieldNames[$property->getColumnName()]) || - ($this->discriminatorColumn != null && $this->discriminatorColumn['name'] == $property->getColumnName())) { + ($this->discriminatorColumn != null && $this->discriminatorColumn['name'] === $property->getColumnName())) { throw MappingException::duplicateColumnName($this->name, $property->getColumnName()); } @@ -2996,11 +2954,6 @@ public function setSequenceGeneratorDefinition(array $definition) throw MappingException::missingSequenceName($this->name); } - if ($definition['sequenceName'][0] == '`') { - $definition['sequenceName'] = trim($definition['sequenceName'], '`'); - $definition['quoted'] = true; - } - $this->sequenceGeneratorDefinition = $definition; } @@ -3129,9 +3082,7 @@ public function getQuotedIdentifierColumnNames($platform) $joinColumns = $this->associationMappings[$idProperty]['joinColumns']; $assocQuotedColumnNames = array_map( function ($joinColumn) use ($platform) { - return isset($joinColumn['quoted']) - ? $platform->quoteIdentifier($joinColumn['name']) - : $joinColumn['name']; + return $platform->quoteIdentifier($joinColumn['name']); }, $joinColumns ); @@ -3168,9 +3119,7 @@ public function getQuotedColumnName($field, $platform) */ public function getQuotedTableName($platform) { - return isset($this->table['quoted']) - ? $platform->quoteIdentifier($this->table['name']) - : $this->table['name']; + return $platform->quoteIdentifier($this->table['name']); } /** @@ -3185,9 +3134,7 @@ public function getQuotedTableName($platform) */ public function getQuotedJoinTableName(array $assoc, $platform) { - return isset($assoc['joinTable']['quoted']) - ? $platform->quoteIdentifier($assoc['joinTable']['name']) - : $assoc['joinTable']['name']; + return $platform->quoteIdentifier($assoc['joinTable']['name']); } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 549691c12c2..1e3381b8dd4 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -737,7 +737,6 @@ private function completeIdGeneratorMapping(ClassMetadata $class) 'sequenceName' => $this->getTargetPlatform()->fixSchemaElementName($sequenceName), 'allocationSize' => 1, 'initialValue' => 1, - 'quoted' => true, ]; $class->setSequenceGeneratorDefinition($definition); diff --git a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php index 1920faea451..8041a690b61 100644 --- a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php @@ -54,9 +54,7 @@ public function getTableName(ClassMetadata $class, AbstractPlatform $platform) } } - return isset($class->table['quoted']) - ? $platform->quoteIdentifier($tableName) - : $tableName; + return $platform->quoteIdentifier($tableName); } /** @@ -64,9 +62,7 @@ public function getTableName(ClassMetadata $class, AbstractPlatform $platform) */ public function getSequenceName(array $definition, ClassMetadata $class, AbstractPlatform $platform) { - return isset($definition['quoted']) - ? $platform->quoteIdentifier($definition['sequenceName']) - : $definition['sequenceName']; + return $platform->quoteIdentifier($definition['sequenceName']); } /** @@ -74,9 +70,7 @@ public function getSequenceName(array $definition, ClassMetadata $class, Abstrac */ public function getJoinColumnName(array $joinColumn, ClassMetadata $class, AbstractPlatform $platform) { - return isset($joinColumn['quoted']) - ? $platform->quoteIdentifier($joinColumn['name']) - : $joinColumn['name']; + return $platform->quoteIdentifier($joinColumn['name']); } /** @@ -84,9 +78,7 @@ public function getJoinColumnName(array $joinColumn, ClassMetadata $class, Abstr */ public function getReferencedJoinColumnName(array $joinColumn, ClassMetadata $class, AbstractPlatform $platform) { - return isset($joinColumn['quoted']) - ? $platform->quoteIdentifier($joinColumn['referencedColumnName']) - : $joinColumn['referencedColumnName']; + return $platform->quoteIdentifier($joinColumn['referencedColumnName']); } /** @@ -100,13 +92,7 @@ public function getJoinTableName(array $association, ClassMetadata $class, Abstr $schema = $association['joinTable']['schema'] . '.'; } - $tableName = $association['joinTable']['name']; - - if (isset($association['joinTable']['quoted'])) { - $tableName = $platform->quoteIdentifier($tableName); - } - - return $schema . $tableName; + return $schema . $platform->quoteIdentifier($association['joinTable']['name']); } /** @@ -128,9 +114,7 @@ public function getIdentifierColumnNames(ClassMetadata $class, AbstractPlatform $assocQuotedColumnNames = array_map( function ($joinColumn) use ($platform) { - return isset($joinColumn['quoted']) - ? $platform->quoteIdentifier($joinColumn['name']) - : $joinColumn['name']; + return $platform->quoteIdentifier($joinColumn['name']); }, $joinColumns ); diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php index df13c039965..559c6468226 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php @@ -544,8 +544,8 @@ private function getSQLIdentifier(SelectStatement $AST) } } - if (isset($rootClass->associationMappings[$property])) { - $joinColumn = $rootClass->associationMappings[$property]['joinColumns'][0]['name']; + if (isset($rootClass->associationMappings[$identifier])) { + $joinColumn = $rootClass->associationMappings[$identifier]['joinColumns'][0]['name']; foreach (array_keys($this->rsm->metaMappings, $joinColumn) as $alias) { if ($this->rsm->columnOwnerMap[$alias] === $rootAlias) { diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index e32bc2b694e..8f49af49a4b 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -643,10 +643,12 @@ private function gatherRelationJoinColumns( ); if ( ! $definingClass) { - throw new \Doctrine\ORM\ORMException( - "Column name `".$joinColumn['referencedColumnName']."` referenced for relation from ". - $mapping['sourceEntity'] . " towards ". $mapping['targetEntity'] . " does not exist." - ); + throw new \Doctrine\ORM\ORMException(sprintf( + 'Column name "%s" referenced for relation from %s towards %s does not exist.', + $joinColumn['referencedColumnName'], + $mapping['sourceEntity'], + $mapping['targetEntity'] + )); } $quotedColumnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); diff --git a/tests/Doctrine/Tests/Models/DirectoryTree/File.php b/tests/Doctrine/Tests/Models/DirectoryTree/File.php index f6cbace23ca..4f66091f972 100644 --- a/tests/Doctrine/Tests/Models/DirectoryTree/File.php +++ b/tests/Doctrine/Tests/Models/DirectoryTree/File.php @@ -4,7 +4,7 @@ /** * @Entity - * @Table(name="`file`") + * @Table(name="file") */ class File extends AbstractContentItem { diff --git a/tests/Doctrine/Tests/Models/Generic/DecimalModel.php b/tests/Doctrine/Tests/Models/Generic/DecimalModel.php index 6a3654b03e6..c6944fc1abf 100644 --- a/tests/Doctrine/Tests/Models/Generic/DecimalModel.php +++ b/tests/Doctrine/Tests/Models/Generic/DecimalModel.php @@ -14,12 +14,12 @@ class DecimalModel */ public $id; /** - * @Column(name="`decimal`", type="decimal", scale=2, precision=5) + * @Column(name="decimal", type="decimal", scale=2, precision=5) */ public $decimal; /** - * @Column(name="`high_scale`", type="decimal", scale=4, precision=14) + * @Column(name="high_scale", type="decimal", scale=4, precision=14) */ public $highScale; } \ No newline at end of file diff --git a/tests/Doctrine/Tests/Models/Generic/NonAlphaColumnsEntity.php b/tests/Doctrine/Tests/Models/Generic/NonAlphaColumnsEntity.php index 7c2b888fc93..05d9b3f9f41 100644 --- a/tests/Doctrine/Tests/Models/Generic/NonAlphaColumnsEntity.php +++ b/tests/Doctrine/Tests/Models/Generic/NonAlphaColumnsEntity.php @@ -4,19 +4,19 @@ /** * @Entity - * @Table(name="`not-a-simple-entity`") + * @Table(name="not-a-simple-entity") */ class NonAlphaColumnsEntity { /** * @Id - * @Column(type="integer", name="`simple-entity-id`") + * @Column(type="integer", name="simple-entity-id") * @GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(type="string", name="`simple-entity-value`") + * @Column(type="string", name="simple-entity-value") */ public $value; diff --git a/tests/Doctrine/Tests/Models/Quote/Address.php b/tests/Doctrine/Tests/Models/Quote/Address.php index 42beaf2a4fd..0346cdd9ee4 100644 --- a/tests/Doctrine/Tests/Models/Quote/Address.php +++ b/tests/Doctrine/Tests/Models/Quote/Address.php @@ -4,7 +4,7 @@ /** * @Entity - * @Table(name="`quote-address`") + * @Table(name="quote-address") * @InheritanceType("SINGLE_TABLE") * @DiscriminatorColumn(name="type", type="string") * @DiscriminatorMap({"simple" = Address::class, "full" = FullAddress::class}) @@ -15,22 +15,21 @@ class Address /** * @Id * @GeneratedValue - * @Column(type="integer", name="`address-id`") + * @Column(type="integer", name="address-id") */ public $id; /** - * @Column(name="`address-zip`") + * @Column(name="address-zip") */ public $zip; /** * @OneToOne(targetEntity="User", inversedBy="address") - * @JoinColumn(name="`user-id`", referencedColumnName="`user-id`") + * @JoinColumn(name="user-id", referencedColumnName="user-id") */ public $user; - public function setUser(User $user) { if ($this->user !== $user) { $this->user = $user; @@ -38,7 +37,6 @@ public function setUser(User $user) { } } - public function getId() { return $this->id; diff --git a/tests/Doctrine/Tests/Models/Quote/Group.php b/tests/Doctrine/Tests/Models/Quote/Group.php index b416fbef54a..c9da4d94a8e 100644 --- a/tests/Doctrine/Tests/Models/Quote/Group.php +++ b/tests/Doctrine/Tests/Models/Quote/Group.php @@ -4,7 +4,7 @@ /** * @Entity - * @Table(name="`quote-group`") + * @Table(name="quote-group") */ class Group { @@ -12,12 +12,12 @@ class Group /** * @Id * @GeneratedValue - * @Column(type="integer", name="`group-id`") + * @Column(type="integer", name="group-id") */ public $id; /** - * @Column(name="`group-name`") + * @Column(name="group-name") */ public $name; @@ -25,7 +25,7 @@ class Group * @var Group * * @ManyToOne(targetEntity="Group", cascade={"persist"}) - * @JoinColumn(name="`parent-id`", referencedColumnName="`group-id`") + * @JoinColumn(name="parent-id", referencedColumnName="group-id") */ public $parent; diff --git a/tests/Doctrine/Tests/Models/Quote/NumericEntity.php b/tests/Doctrine/Tests/Models/Quote/NumericEntity.php index f1186cbcc13..2e6404f7cbd 100644 --- a/tests/Doctrine/Tests/Models/Quote/NumericEntity.php +++ b/tests/Doctrine/Tests/Models/Quote/NumericEntity.php @@ -10,13 +10,13 @@ class NumericEntity { /** * @Id - * @Column(type="integer", name="`1:1`") + * @Column(type="integer", name="1:1") * @GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(type="string", name="`2:2`") + * @Column(type="string", name="2:2") */ public $value; diff --git a/tests/Doctrine/Tests/Models/Quote/Phone.php b/tests/Doctrine/Tests/Models/Quote/Phone.php index 3d4475372c1..ab23cf2a3e9 100644 --- a/tests/Doctrine/Tests/Models/Quote/Phone.php +++ b/tests/Doctrine/Tests/Models/Quote/Phone.php @@ -4,20 +4,20 @@ /** * @Entity - * @Table(name="`quote-phone`") + * @Table(name="quote-phone") */ class Phone { /** * @Id - * @Column(name="`phone-number`") + * @Column(name="phone-number") */ public $number; /** * @ManyToOne(targetEntity="User", inversedBy="phones") - * @JoinColumn(name="`user-id`", referencedColumnName="`user-id`") + * @JoinColumn(name="user-id", referencedColumnName="user-id") */ public $user; diff --git a/tests/Doctrine/Tests/Models/Quote/User.php b/tests/Doctrine/Tests/Models/Quote/User.php index d6d1835a236..b82893d6d2b 100644 --- a/tests/Doctrine/Tests/Models/Quote/User.php +++ b/tests/Doctrine/Tests/Models/Quote/User.php @@ -6,19 +6,19 @@ /** * @Entity - * @Table(name="`quote-user`") + * @Table(name="quote-user") */ class User { /** * @Id * @GeneratedValue - * @Column(type="integer", name="`user-id`") + * @Column(type="integer", name="user-id") */ public $id; /** - * @Column(type="string", name="`user-name`") + * @Column(type="string", name="user-name") */ public $name; @@ -28,24 +28,24 @@ class User public $phones; /** - * @JoinColumn(name="`address-id`", referencedColumnName="`address-id`") + * @JoinColumn(name="address-id", referencedColumnName="address-id") * @OneToOne(targetEntity="Address", mappedBy="user", cascade={"persist"}, fetch="EAGER") */ public $address; /** * @ManyToMany(targetEntity="Group", inversedBy="users", cascade={"all"}, fetch="EXTRA_LAZY") - * @JoinTable(name="`quote-users-groups`", + * @JoinTable(name="quote-users-groups", * joinColumns={ * @JoinColumn( - * name="`user-id`", - * referencedColumnName="`user-id`" + * name="user-id", + * referencedColumnName="user-id" * ) * }, * inverseJoinColumns={ * @JoinColumn( - * name="`group-id`", - * referencedColumnName="`group-id`" + * name="group-id", + * referencedColumnName="group-id" * ) * } * ) diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1151Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1151Test.php index f1c92271b0f..6289d42921e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1151Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1151Test.php @@ -34,7 +34,7 @@ public function testQuoteForeignKey() /** * @Entity - * @Table(name="`User`") + * @Table(name="User") */ class DDC1151User { @@ -47,7 +47,7 @@ class DDC1151User /** * @Entity - * @Table(name="`Group`") + * @Table(name="Group") */ class DDC1151Group { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1360Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1360Test.php index 1c184211ca2..7f9a6478335 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1360Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1360Test.php @@ -33,7 +33,7 @@ public function testSchemaDoubleQuotedCreate() } /** - * @Entity @Table(name="`user`.`user`") + * @Entity @Table(name="user.user") */ class DDC1360DoubleQuote { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php index 396903f2857..cdc2d22561b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php @@ -23,7 +23,7 @@ public function testIssue() } /** - * @Table(name="`DDC1695News`") + * @Table(name="DDC1695News") * @Entity */ class DDC1695News @@ -31,7 +31,7 @@ class DDC1695News /** * @var int * - * @Column(name="`IdNews`", type="integer", nullable=false) + * @Column(name="IdNews", type="integer", nullable=false) * @Id * @GeneratedValue */ @@ -40,119 +40,119 @@ class DDC1695News /** * @var int * - * @Column(name="`IdUser`", type="bigint", nullable=false) + * @Column(name="IdUser", type="bigint", nullable=false) */ private $idUser; /** * @var int * - * @Column(name="`IdLanguage`", type="integer", nullable=false) + * @Column(name="IdLanguage", type="integer", nullable=false) */ private $idLanguage; /** * @var int * - * @Column(name="`IdCondition`", type="integer", nullable=true) + * @Column(name="IdCondition", type="integer", nullable=true) */ private $idCondition; /** * @var int * - * @Column(name="`IdHealthProvider`", type="integer", nullable=true) + * @Column(name="IdHealthProvider", type="integer", nullable=true) */ private $idHealthProvider; /** * @var int * - * @Column(name="`IdSpeciality`", type="integer", nullable=true) + * @Column(name="IdSpeciality", type="integer", nullable=true) */ private $idSpeciality; /** * @var int * - * @Column(name="`IdMedicineType`", type="integer", nullable=true) + * @Column(name="IdMedicineType", type="integer", nullable=true) */ private $idMedicineType; /** * @var int * - * @Column(name="`IdTreatment`", type="integer", nullable=true) + * @Column(name="IdTreatment", type="integer", nullable=true) */ private $idTreatment; /** * @var string * - * @Column(name="`Title`", type="string", nullable=true) + * @Column(name="Title", type="string", nullable=true) */ private $title; /** * @var string * - * @Column(name="`SmallText`", type="string", nullable=true) + * @Column(name="SmallText", type="string", nullable=true) */ private $smallText; /** * @var string * - * @Column(name="`LongText`", type="string", nullable=true) + * @Column(name="LongText", type="string", nullable=true) */ private $longText; /** * @var DateTimeZone * - * @Column(name="`PublishDate`", type="datetimetz", nullable=true) + * @Column(name="PublishDate", type="datetimetz", nullable=true) */ private $publishDate; /** * @var array * - * @Column(name="`IdxNews`", type="json_array", nullable=true) + * @Column(name="IdxNews", type="json_array", nullable=true) */ private $idxNews; /** * @var bool * - * @Column(name="`Highlight`", type="boolean", nullable=false) + * @Column(name="Highlight", type="boolean", nullable=false) */ private $highlight; /** * @var int * - * @Column(name="`Order`", type="integer", nullable=false) + * @Column(name="Order", type="integer", nullable=false) */ private $order; /** * @var bool * - * @Column(name="`Deleted`", type="boolean", nullable=false) + * @Column(name="Deleted", type="boolean", nullable=false) */ private $deleted; /** * @var bool * - * @Column(name="`Active`", type="boolean", nullable=false) + * @Column(name="Active", type="boolean", nullable=false) */ private $active; /** * @var bool * - * @Column(name="`UpdateToHighlighted`", type="boolean", nullable=true) + * @Column(name="UpdateToHighlighted", type="boolean", nullable=true) */ private $updateToHighlighted; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php index 3671d5570a3..6eb544bd73b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php @@ -93,20 +93,20 @@ public function testCreateRetrieveUpdateDelete() /** * @Entity - * @Table(name="`ddc-1719-simple-entity`") + * @Table(name="ddc-1719-simple-entity") */ class DDC1719SimpleEntity { /** * @Id - * @Column(type="integer", name="`simple-entity-id`") + * @Column(type="integer", name="simple-entity-id") * @GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(type="string", name="`simple-entity-value`") + * @Column(type="string", name="simple-entity-value") */ public $value; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php index fdae13585fc..16f531c9b30 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php @@ -144,7 +144,7 @@ public function testQuotedTableJoinedChildRemove() /** * @Entity - * @Table(name="`LIKE`") + * @Table(name="LIKE") */ class DDC832Like { @@ -170,7 +170,7 @@ public function __construct($word) /** * @Entity - * @Table(name="`INDEX`") + * @Table(name="INDEX") * @InheritanceType("JOINED") * @DiscriminatorColumn(name="discr", type="string") * @DiscriminatorMap({"like" = "DDC832JoinedIndex", "fuzzy" = "DDC832JoinedTreeIndex"}) @@ -199,7 +199,7 @@ public function __construct($name) /** * @Entity - * @Table(name="`TREE_INDEX`") + * @Table(name="TREE_INDEX") */ class DDC832JoinedTreeIndex extends DDC832JoinedIndex { diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index b021f94e736..c2f0f44591e 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -264,7 +264,7 @@ protected function _createValidClassMetadata() // Self-made metadata $cm1 = new ClassMetadata(TestEntity1::class); $cm1->initializeReflection(new RuntimeReflectionService()); - $cm1->setPrimaryTable(['name' => '`group`']); + $cm1->setPrimaryTable(['name' => 'group']); // Add a mapped field $cm1->addProperty('id', Type::getType('integer'), ['id' => true]); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 49f32947def..c4d7086aae4 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -1219,7 +1219,7 @@ public function testQuotedSequenceName() $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->setSequenceGeneratorDefinition(['sequenceName' => '`foo`']); + $cm->setSequenceGeneratorDefinition(['sequenceName' => 'foo']); self::assertEquals(['sequenceName' => 'foo', 'quoted' => true], $cm->sequenceGeneratorDefinition); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php b/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php index 39b6287565d..6aa76d5b6ae 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Mapping; use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DefaultQuoteStrategy; use Doctrine\ORM\Mapping\QuoteStrategy; @@ -65,7 +66,7 @@ public function testConfiguration() public function testGetColumnName() { $cm = $this->createClassMetadata(CmsUser::class); - $cm->addProperty('name', Type::getType('string'), ['columnName' => '`name`']); + $cm->addProperty('name', Type::getType('string'), ['columnName' => 'name']); $cm->addProperty('id', Type::getType('string')); self::assertEquals('id' ,$this->strategy->getColumnName('id', $cm, $this->platform)); @@ -75,7 +76,7 @@ public function testGetColumnName() public function testGetTableName() { $cm = $this->createClassMetadata(CmsUser::class); - $cm->setPrimaryTable(['name'=>'`cms_user`']); + $cm->setPrimaryTable(['name'=>'cms_user']); self::assertEquals('"cms_user"', $this->strategy->getTableName($cm, $this->platform)); $cm = new ClassMetadata(CmsUser::class); @@ -91,23 +92,19 @@ public function testJoinTableName() $cm1->mapManyToMany( [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser', - 'inversedBy' => 'users', - 'joinTable' => [ - 'name' => '`cmsaddress_cmsuser`' - ] + 'fieldName' => 'user', + 'targetEntity' => 'CmsUser', + 'inversedBy' => 'users', + 'joinTable' => ['name' => 'cmsaddress_cmsuser'] ] ); $cm2->mapManyToMany( [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser', - 'inversedBy' => 'users', - 'joinTable' => [ - 'name' => 'cmsaddress_cmsuser' - ] + 'fieldName' => 'user', + 'targetEntity' => 'CmsUser', + 'inversedBy' => 'users', + 'joinTable' => ['name' => 'cmsaddress_cmsuser'] ] ); @@ -125,7 +122,7 @@ public function testIdentifierColumnNames() Type::getType('string'), [ 'id' => true, - 'columnName' => '`id`', + 'columnName' => 'id', ] ); @@ -158,14 +155,10 @@ public function testQuoteIdentifierJoinColumns() $cm->mapOneToOne( [ - 'id' => true, - 'fieldName' => 'article', - 'targetEntity' => DDC117Article::class, - 'joinColumns' => [ - [ - 'name' => '`article`' - ] - ], + 'id' => true, + 'fieldName' => 'article', + 'targetEntity' => DDC117Article::class, + 'joinColumns' => [['name' => 'article']], ] ); @@ -178,14 +171,10 @@ public function testJoinColumnName() $cm->mapOneToOne( [ - 'id' => true, - 'fieldName' => 'article', - 'targetEntity' => DDC117Article::class, - 'joinColumns' => [ - [ - 'name' => '`article`' - ] - ], + 'id' => true, + 'fieldName' => 'article', + 'targetEntity' => DDC117Article::class, + 'joinColumns' => [['name' => 'article']], ] ); @@ -199,14 +188,10 @@ public function testReferencedJoinColumnName() $cm->mapOneToOne( [ - 'id' => true, - 'fieldName' => 'article', - 'targetEntity' => DDC117Article::class, - 'joinColumns' => [ - [ - 'name' => '`article`' - ] - ], + 'id' => true, + 'fieldName' => 'article', + 'targetEntity' => DDC117Article::class, + 'joinColumns' => [['name' => 'article']], ] ); From d0ae0aa711b5edf40214f2c7384ea97cdfcf5a35 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 21 May 2016 02:30:06 +0000 Subject: [PATCH 029/275] Removed traces of fieldMappings from codebase --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 143 +------------- .../Entity/BasicEntityPersister.php | 5 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 7 +- .../ORM/Functional/DatabaseDriverTest.php | 87 ++++++--- .../ORM/Mapping/AbstractMappingDriverTest.php | 182 +++++++++++------- .../ORM/Mapping/AnnotationDriverTest.php | 18 +- .../Mapping/BasicInheritanceMappingTest.php | 54 +++--- .../ORM/Mapping/ClassMetadataBuilderTest.php | 115 ++++++----- .../ORM/Mapping/ClassMetadataFactoryTest.php | 43 ++--- .../ORM/Mapping/YamlMappingDriverTest.php | 15 +- .../ORM/Tools/ConvertDoctrine1SchemaTest.php | 14 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 31 --- .../AbstractClassMetadataExporterTest.php | 48 +++-- .../Tests/ORM/Tools/SchemaToolTest.php | 13 +- 14 files changed, 343 insertions(+), 432 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index d7c5a2e0120..e0ee0def1d4 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -350,52 +350,6 @@ class ClassMetadata implements ClassMetadataInterface */ protected $properties = []; - /** - * READ-ONLY: The field mappings of the class. - * Keys are field names and values are mapping definitions. - * - * The mapping definition array has the following values: - * - * - fieldName (string) - * The name of the field in the Entity. - * - * - type (Type) - * The type of the mapped field. Can be one of Doctrine's mapping types or a - * custom mapping type. - * - * - tableName (string) - * The table name. Defaults to the entity table name. - * - * - columnName (string) - * The column name. Defaults to the field name. - * - * - length (integer, optional) - * The database length of the column. Optional. Default value taken from - * the type. - * - * - id (boolean, optional) - * Marks the field as the primary key of the entity. Multiple fields of an - * entity can have the id attribute, forming a composite key. - * - * - nullable (boolean, optional) - * Whether the column is nullable. Defaults to FALSE. - * - * - unique (boolean, optional, schema-only) - * Whether a unique constraint should be generated for the column. Defaults to FALSE. - * - * - columnDefinition (string, optional, schema-only) - * The SQL fragment that is used when generating the DDL for the column. - * - * - precision (integer, optional, schema-only) - * The precision of a decimal column. Only valid if the column type is decimal. - * - * - scale (integer, optional, schema-only) - * The scale of a decimal column. Only valid if the column type is decimal. - * - * @var array - */ - public $fieldMappings = []; - /** * READ-ONLY: An array of field names. Used to look up field names from column names. * Keys are column names and values are field names. @@ -2294,21 +2248,6 @@ public function addInheritedProperty(ClassMetadata $declaringClass, $fieldName) $this->properties[$fieldName] = $inheritedProperty; } - /** - * INTERNAL: - * Adds a field mapping without completing/validating it. - * This is mainly used to add inherited field mappings to derived classes. - * - * @param array $fieldMapping - * - * @return void - */ - public function addInheritedFieldMapping(array $fieldMapping) - { - //$this->fieldMappings[$fieldMapping['fieldName']] = $fieldMapping; - //$this->fieldNames[$fieldMapping['columnName']] = $fieldMapping['fieldName']; - } - /** * INTERNAL: * Adds an association mapping without completing/validating it. @@ -2937,8 +2876,7 @@ public function setCustomGeneratorDefinition(array $definition) * array( * 'sequenceName' => 'name', * 'allocationSize' => 20, - * 'initialValue' => 1 - * 'quoted' => 1 + * 'initialValue' => 1, * ) * * @@ -3058,85 +2996,6 @@ public function getName() return $this->name; } - /** - * Gets the (possibly quoted) identifier column names for safe use in an SQL statement. - * - * @deprecated Deprecated since version 2.3 in favor of \Doctrine\ORM\Mapping\QuoteStrategy - * - * @param \Doctrine\DBAL\Platforms\AbstractPlatform $platform - * - * @return array - */ - public function getQuotedIdentifierColumnNames($platform) - { - $quotedColumnNames = []; - - foreach ($this->identifier as $idProperty) { - if (isset($this->properties[$idProperty])) { - $quotedColumnNames[] = $this->getQuotedColumnName($idProperty, $platform); - - continue; - } - - // Association defined as Id field - $joinColumns = $this->associationMappings[$idProperty]['joinColumns']; - $assocQuotedColumnNames = array_map( - function ($joinColumn) use ($platform) { - return $platform->quoteIdentifier($joinColumn['name']); - }, - $joinColumns - ); - - $quotedColumnNames = array_merge($quotedColumnNames, $assocQuotedColumnNames); - } - - return $quotedColumnNames; - } - - /** - * Gets the (possibly quoted) column name of a mapped field for safe use in an SQL statement. - * - * @deprecated Deprecated since version 2.3 in favor of \Doctrine\ORM\Mapping\QuoteStrategy - * - * @param string $field - * @param \Doctrine\DBAL\Platforms\AbstractPlatform $platform - * - * @return string - */ - public function getQuotedColumnName($field, $platform) - { - return $platform->quoteIdentifier($this->properties[$field]->getColumnName()); - } - - /** - * Gets the (possibly quoted) primary table name of this class for safe use in an SQL statement. - * - * @deprecated Deprecated since version 2.3 in favor of \Doctrine\ORM\Mapping\QuoteStrategy - * - * @param \Doctrine\DBAL\Platforms\AbstractPlatform $platform - * - * @return string - */ - public function getQuotedTableName($platform) - { - return $platform->quoteIdentifier($this->table['name']); - } - - /** - * Gets the (possibly quoted) name of the join table. - * - * @deprecated Deprecated since version 2.3 in favor of \Doctrine\ORM\Mapping\QuoteStrategy - * - * @param array $assoc - * @param \Doctrine\DBAL\Platforms\AbstractPlatform $platform - * - * @return string - */ - public function getQuotedJoinTableName(array $assoc, $platform) - { - return $platform->quoteIdentifier($assoc['joinTable']['name']); - } - /** * {@inheritDoc} */ diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 4101834b306..2fda6d17c2b 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -1689,10 +1689,7 @@ public function getSelectConditionStatementSQL($field, $value, $assoc = null, $c private function getSelectConditionStatementColumnSQL($field, $assoc = null) { if (($property = $this->class->getProperty($field)) !== null) { - $class = ($property instanceof InheritedFieldMetadata) - ? $property->getDeclaringClass() - : $this->class; - $tableAlias = $this->getSQLTableAlias($class->getTableName()); + $tableAlias = $this->getSQLTableAlias($property->getTableName()); $columnName = $this->quoteStrategy->getColumnName($field, $this->class, $this->platform); return [$tableAlias . '.' . $columnName]; diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index cf5585b6d41..f37c6459728 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -1180,14 +1180,15 @@ protected function generateEntityStubMethods(ClassMetadata $metadata) }*/ $fieldType = $property->getTypeName(); + $nullable = $this->nullableFieldExpression($property); if (( ! $property->isPrimaryKey() || $metadata->generatorType == ClassMetadata::GENERATOR_TYPE_NONE) && ( ! $metadata->isEmbeddedClass || ! $this->embeddablesImmutable) && - $code = $this->generateEntityStubMethod($metadata, 'set', $fieldName, $fieldType, null)) { + $code = $this->generateEntityStubMethod($metadata, 'set', $fieldName, $fieldType, $nullable)) { $methods[] = $code; } - if ($code = $this->generateEntityStubMethod($metadata, 'get', $fieldName, $fieldType, null)) { + if ($code = $this->generateEntityStubMethod($metadata, 'get', $fieldName, $fieldType, $nullable)) { $methods[] = $code; } } @@ -1642,7 +1643,7 @@ protected function generateFieldMappingPropertyDocBlock(FieldMetadata $propertyM $lines[] = $this->spaces . '/**'; $lines[] = $this->spaces . ' * @var ' . $this->getType($fieldType) - . ($this->nullableFieldExpression($fieldMapping) ? '|null' : ''); + . ($propertyMetadata->isNullable() ? '|null' : ''); if ($this->generateAnnotations) { $lines[] = $this->spaces . ' *'; diff --git a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php index f83c2b0d501..5b0547a5673 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php @@ -44,7 +44,7 @@ public function testIssue2059() $metadata = $this->convertToClassMetadata([$project, $user], []); - self::assertTrue(isset($metadata['Ddc2059Project']->fieldMappings['user'])); + self::assertNotNull($metadata['Ddc2059Project']->getProperty('user')); self::assertTrue(isset($metadata['Ddc2059Project']->associationMappings['user2'])); } @@ -64,19 +64,26 @@ public function testLoadMetadataFromDatabase() $metadatas = $this->extractClassMetadata(["DbdriverFoo"]); self::assertArrayHasKey('DbdriverFoo', $metadatas); + $metadata = $metadatas['DbdriverFoo']; - self::assertArrayHasKey('id', $metadata->fieldMappings); - self::assertEquals('id', $metadata->fieldMappings['id']['fieldName']); - self::assertEquals('id', strtolower($metadata->fieldMappings['id']['columnName'])); - self::assertEquals('integer', $metadata->fieldMappings['id']['type']->getName()); - - self::assertArrayHasKey('bar', $metadata->fieldMappings); - self::assertEquals('bar', $metadata->fieldMappings['bar']['fieldName']); - self::assertEquals('bar', strtolower($metadata->fieldMappings['bar']['columnName'])); - self::assertEquals('string', $metadata->fieldMappings['bar']['type']->getName()); - self::assertEquals(200, $metadata->fieldMappings['bar']['length']); - self::assertTrue($metadata->fieldMappings['bar']['nullable']); + self::assertNotNull($metadata->getProperty('id')); + + $idProperty = $metadata->getProperty('id'); + + self::assertEquals('id', $idProperty->getFieldName()); + self::assertEquals('id', $idProperty->getColumnName()); + self::assertEquals('integer', $idProperty->getTypeName()); + + self::assertNotNull($metadata->getProperty('bar')); + + $barProperty = $metadata->getProperty('bar'); + + self::assertEquals('bar', $barProperty->getFieldName()); + self::assertEquals('bar', $barProperty->getColumnName()); + self::assertEquals('string', $barProperty->getTypeName()); + self::assertEquals(200, $barProperty->getLength()); + self::assertTrue($barProperty->isNullable()); } public function testLoadMetadataWithForeignKeyFromDatabase() @@ -102,10 +109,11 @@ public function testLoadMetadataWithForeignKeyFromDatabase() $metadatas = $this->extractClassMetadata(["DbdriverBar", "DbdriverBaz"]); self::assertArrayHasKey('DbdriverBaz', $metadatas); + $bazMetadata = $metadatas['DbdriverBaz']; - self::assertArrayNotHasKey('barId', $bazMetadata->fieldMappings, "The foreign Key field should not be inflected as 'barId' field, its an association."); - self::assertArrayHasKey('id', $bazMetadata->fieldMappings); + self::assertNull($bazMetadata->getProperty('barId'), "The foreign Key field should not be inflected, as 'barId' field is an association."); + self::assertNotNull($bazMetadata->getProperty('id')); $bazMetadata->associationMappings = \array_change_key_case($bazMetadata->associationMappings, \CASE_LOWER); @@ -184,29 +192,54 @@ public function testLoadMetadataFromDatabaseDetail() $metadata = $metadatas['DbdriverFoo']; - self::assertArrayHasKey('id', $metadata->fieldMappings); - self::assertEquals('id', $metadata->fieldMappings['id']['fieldName']); - self::assertEquals('id', strtolower($metadata->fieldMappings['id']['columnName'])); - self::assertEquals('integer', $metadata->fieldMappings['id']['type']->getName()); + self::assertNotNull($metadata->getProperty('id')); + + $idProperty = $metadata->getProperty('id'); + + self::assertEquals('id', $idProperty->getFieldName()); + self::assertEquals('id', $idProperty->getColumnName()); + self::assertEquals('integer', $idProperty->getTypeName()); // FIXME: Condition here is fugly. // NOTE: PostgreSQL and SQL SERVER do not support UNSIGNED integer if ( ! $this->_em->getConnection()->getDatabasePlatform() instanceof PostgreSqlPlatform AND ! $this->_em->getConnection()->getDatabasePlatform() instanceof SQLServerPlatform) { - self::assertArrayHasKey('columnUnsigned', $metadata->fieldMappings); - self::assertTrue($metadata->fieldMappings['columnUnsigned']['options']['unsigned']); + self::assertNotNull($metadata->getProperty('columnUnsigned')); + + $columnUnsignedProperty = $metadata->getProperty('columnUnsigned'); + $columnUnsignedOptions = $columnUnsignedProperty->getOptions(); + + self::assertArrayHasKey('unsigned', $columnUnsignedOptions); + self::assertTrue($columnUnsignedOptions['unsigned']); } - self::assertArrayHasKey('columnComment', $metadata->fieldMappings); - self::assertEquals('test_comment', $metadata->fieldMappings['columnComment']['options']['comment']); + // Check comment + self::assertNotNull($metadata->getProperty('columnComment')); + + $columnCommentProperty = $metadata->getProperty('columnComment'); + $columnCommentOptions = $columnCommentProperty->getOptions(); + + self::assertArrayHasKey('comment', $columnCommentOptions); + self::assertEquals('test_comment', $columnCommentOptions['comment']); + + // Check default + self::assertNotNull($metadata->getProperty('columnDefault')); + + $columnDefaultProperty = $metadata->getProperty('columnDefault'); + $columnDefaultOptions = $columnDefaultProperty->getOptions(); + + self::assertArrayHasKey('default', $columnDefaultOptions); + self::assertEquals('test_default', $columnCommentOptions['default']); + + // Check decimal + self::assertNotNull($metadata->getProperty('columnDecimal')); - self::assertArrayHasKey('columnDefault', $metadata->fieldMappings); - self::assertEquals('test_default', $metadata->fieldMappings['columnDefault']['options']['default']); + $columnDecimalProperty = $metadata->getProperty('columnDecimal'); - self::assertArrayHasKey('columnDecimal', $metadata->fieldMappings); - self::assertEquals(4, $metadata->fieldMappings['columnDecimal']['precision']); - self::assertEquals(3, $metadata->fieldMappings['columnDecimal']['scale']); + self::assertEquals(4, $columnDecimalProperty->getPrecision()); + self::assertEquals(3, $columnDecimalProperty->getScale()); + // Check indexes self::assertTrue( ! empty($metadata->table['indexes']['index1']['columns'])); self::assertEquals( ['column_index1','column_index2'], diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 63068525b61..08c53d49785 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -7,6 +7,7 @@ use Doctrine\ORM\EntityManager; use Doctrine\ORM\Events; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\DefaultNamingStrategy; use Doctrine\ORM\Mapping\MappingException; @@ -181,11 +182,12 @@ public function testEntityCustomGenerator() */ public function testFieldMappings($class) { - self::assertEquals(4, count($class->fieldMappings)); - self::assertTrue(isset($class->fieldMappings['id'])); - self::assertTrue(isset($class->fieldMappings['name'])); - self::assertTrue(isset($class->fieldMappings['email'])); - self::assertTrue(isset($class->fieldMappings['version'])); + self::assertEquals(4, count($class->getProperties())); + + self::assertNotNull($class->getProperty('id')); + self::assertNotNull($class->getProperty('name')); + self::assertNotNull($class->getProperty('email')); + self::assertNotNull($class->getProperty('version')); return $class; } @@ -198,8 +200,6 @@ public function testVersionedField($class) { self::assertTrue($class->isVersioned); self::assertEquals("version", $class->versionField); - - self::assertFalse(isset($class->fieldMappings['version']['version'])); } /** @@ -208,9 +208,13 @@ public function testVersionedField($class) */ public function testFieldMappingsColumnNames($class) { - self::assertEquals("id", $class->fieldMappings['id']['columnName']); - self::assertEquals("name", $class->fieldMappings['name']['columnName']); - self::assertEquals("user_email", $class->fieldMappings['email']['columnName']); + self::assertNotNull($class->getProperty('id')); + self::assertNotNull($class->getProperty('name')); + self::assertNotNull($class->getProperty('email')); + + self::assertEquals("id", $class->getProperty('id')->getColumnName()); + self::assertEquals("name", $class->getProperty('name')->getColumnName()); + self::assertEquals("user_email", $class->getProperty('email')->getColumnName()); return $class; } @@ -221,10 +225,14 @@ public function testFieldMappingsColumnNames($class) */ public function testStringFieldMappings($class) { - self::assertEquals('string', $class->fieldMappings['name']['type']->getName()); - self::assertEquals(50, $class->fieldMappings['name']['length']); - self::assertTrue($class->fieldMappings['name']['nullable']); - self::assertTrue($class->fieldMappings['name']['unique']); + self::assertNotNull($class->getProperty('name')); + + $property = $class->getProperty('name'); + + self::assertEquals('string', $property->getTypeName()); + self::assertEquals(50, $property->getLength()); + self::assertTrue($property->isNullable()); + self::assertTrue($property->isUnique()); return $class; } @@ -238,8 +246,12 @@ public function testStringFieldMappings($class) */ public function testFieldOptions(ClassMetadata $class) { + self::assertNotNull($class->getProperty('name')); + + $property = $class->getProperty('name'); $expected = ['foo' => 'bar', 'baz' => ['key' => 'val'], 'fixed' => false]; - self::assertEquals($expected, $class->fieldMappings['name']['options']); + + self::assertEquals($expected, $property->getOptions()); return $class; } @@ -250,7 +262,12 @@ public function testFieldOptions(ClassMetadata $class) */ public function testIdFieldOptions($class) { - self::assertEquals(['foo' => 'bar', 'unsigned' => false], $class->fieldMappings['id']['options']); + self::assertNotNull($class->getProperty('id')); + + $property = $class->getProperty('id'); + $expected = ['foo' => 'bar', 'unsigned' => false]; + + self::assertEquals($expected, $property->getOptions()); return $class; } @@ -261,8 +278,12 @@ public function testIdFieldOptions($class) */ public function testIdentifier($class) { + self::assertNotNull($class->getProperty('id')); + + $property = $class->getProperty('id'); + + self::assertEquals('integer', $property->getTypeName()); self::assertEquals(['id'], $class->identifier); - self::assertEquals('integer', $class->fieldMappings['id']['type']->getName()); self::assertEquals(ClassMetadata::GENERATOR_TYPE_AUTO, $class->generatorType, "ID-Generator is not ClassMetadata::GENERATOR_TYPE_AUTO"); return $class; @@ -403,7 +424,11 @@ public function testJoinColumnUniqueAndNullable($class) */ public function testColumnDefinition($class) { - self::assertEquals("CHAR(32) NOT NULL", $class->fieldMappings['email']['columnDefinition']); + self::assertNotNull($class->getProperty('email')); + + $property = $class->getProperty('email'); + + self::assertEquals("CHAR(32) NOT NULL", $property->getColumnDefinition()); self::assertEquals("INT NULL", $class->associationMappings['groups']['joinTable']['inverseJoinColumns'][0]['columnDefinition']); return $class; @@ -449,22 +474,22 @@ public function testDiscriminatorColumnDefaults() */ public function testMappedSuperclassWithRepository() { - $em = $this->_getTestEntityManager(); - $factory = $this->createClassMetadataFactory($em); - $class = $factory->getMetadataFor(DDC869CreditCardPayment::class); + $em = $this->_getTestEntityManager(); + $factory = $this->createClassMetadataFactory($em); + $class = $factory->getMetadataFor(DDC869CreditCardPayment::class); - self::assertTrue(isset($class->fieldMappings['id'])); - self::assertTrue(isset($class->fieldMappings['value'])); - self::assertTrue(isset($class->fieldMappings['creditCardNumber'])); + self::assertNotNull($class->getProperty('id')); + self::assertNotNull($class->getProperty('value')); + self::assertNotNull($class->getProperty('creditCardNumber')); self::assertEquals($class->customRepositoryClassName, DDC869PaymentRepository::class); self::assertInstanceOf(DDC869PaymentRepository::class, $em->getRepository(DDC869CreditCardPayment::class)); self::assertTrue($em->getRepository(DDC869ChequePayment::class)->isTrue()); $class = $factory->getMetadataFor(DDC869ChequePayment::class); - self::assertTrue(isset($class->fieldMappings['id'])); - self::assertTrue(isset($class->fieldMappings['value'])); - self::assertTrue(isset($class->fieldMappings['serialNumber'])); + self::assertNotNull($class->getProperty('id')); + self::assertNotNull($class->getProperty('value')); + self::assertNotNull($class->getProperty('serialNumber')); self::assertEquals($class->customRepositoryClassName, DDC869PaymentRepository::class); self::assertInstanceOf(DDC869PaymentRepository::class, $em->getRepository(DDC869ChequePayment::class)); self::assertTrue($em->getRepository(DDC869ChequePayment::class)->isTrue()); @@ -475,30 +500,26 @@ public function testMappedSuperclassWithRepository() */ public function testDefaultFieldType() { - $factory = $this->createClassMetadataFactory(); - $class = $factory->getMetadataFor(DDC1476EntityWithDefaultFieldType::class); - - - self::assertArrayHasKey('id', $class->fieldMappings); - self::assertArrayHasKey('name', $class->fieldMappings); + $factory = $this->createClassMetadataFactory(); + $class = $factory->getMetadataFor(DDC1476EntityWithDefaultFieldType::class); - self::assertArrayHasKey('type', $class->fieldMappings['id']); - self::assertArrayHasKey('type', $class->fieldMappings['name']); + self::assertNotNull($class->getProperty('id')); + self::assertNotNull($class->getProperty('name')); - self::assertEquals('string', $class->fieldMappings['id']['type']->getName()); - self::assertEquals('string', $class->fieldMappings['name']['type']->getName()); + $idProperty = $class->getProperty('id'); + $nameProperty = $class->getProperty('name'); - self::assertArrayHasKey('fieldName', $class->fieldMappings['id']); - self::assertArrayHasKey('fieldName', $class->fieldMappings['name']); + self::assertInstanceOf(FieldMetadata::class, $idProperty); + self::assertInstanceOf(FieldMetadata::class, $nameProperty); - self::assertEquals('id', $class->fieldMappings['id']['fieldName']); - self::assertEquals('name', $class->fieldMappings['name']['fieldName']); + self::assertEquals('string', $idProperty->getTypeName()); + self::assertEquals('string', $nameProperty->getTypeName()); - self::assertArrayHasKey('columnName', $class->fieldMappings['id']); - self::assertArrayHasKey('columnName', $class->fieldMappings['name']); + self::assertEquals('id', $idProperty->getFieldName()); + self::assertEquals('name', $nameProperty->getFieldName()); - self::assertEquals('id', $class->fieldMappings['id']['columnName']); - self::assertEquals('name', $class->fieldMappings['name']['columnName']); + self::assertEquals('id', $idProperty->getColumnName()); + self::assertEquals('name', $nameProperty->getColumnName()); self::assertEquals(ClassMetadata::GENERATOR_TYPE_NONE, $class->generatorType); } @@ -510,14 +531,11 @@ public function testIdentifierColumnDefinition() { $class = $this->createClassMetadata(DDC1170Entity::class); - self::assertArrayHasKey('id', $class->fieldMappings); - self::assertArrayHasKey('value', $class->fieldMappings); - - self::assertArrayHasKey('columnDefinition', $class->fieldMappings['id']); - self::assertArrayHasKey('columnDefinition', $class->fieldMappings['value']); + self::assertNotNull($class->getProperty('id')); + self::assertNotNull($class->getProperty('value')); - self::assertEquals("INT unsigned NOT NULL", $class->fieldMappings['id']['columnDefinition']); - self::assertEquals("VARCHAR(255) NOT NULL", $class->fieldMappings['value']['columnDefinition']); + self::assertEquals("INT unsigned NOT NULL", $class->getProperty('id')->getColumnDefinition()); + self::assertEquals("VARCHAR(255) NOT NULL", $class->getProperty('value')->getColumnDefinition()); } /** @@ -699,7 +717,8 @@ public function testSqlResultSetMapping() self::assertCount(1, $personMetadata->getSqlResultSetMappings()); $mapping = $personMetadata->getSqlResultSetMapping('mappingFetchAll'); - self::assertEquals([],$mapping['columns']); + + self::assertEquals([], $mapping['columns']); self::assertEquals('mappingFetchAll', $mapping['name']); self::assertEquals('discriminator', $mapping['entities'][0]['discriminatorColumn']); self::assertEquals(['name'=>'id','column'=>'id'], $mapping['entities'][0]['fields'][0]); @@ -745,7 +764,6 @@ public function testAssociationOverridesMapping() self::assertEquals(['group_id'=>'id'], $guestGroups['relationToTargetKeyColumns']); self::assertEquals(['user_id','group_id'], $guestGroups['joinTableColumns']); - self::assertEquals('ddc964_users_admingroups', $adminGroups['joinTable']['name']); self::assertEquals('adminuser_id', $adminGroups['joinTable']['joinColumns'][0]['name']); self::assertEquals('admingroup_id', $adminGroups['joinTable']['inverseJoinColumns'][0]['name']); @@ -781,7 +799,6 @@ public function testAssociationOverridesMapping() self::assertEquals(['address_id'=>'address_id'], $guestAddress['joinColumnFieldNames']); self::assertEquals(['id'=>'address_id'], $guestAddress['targetToSourceKeyColumns']); - self::assertEquals('adminaddress_id', $adminAddress['joinColumns'][0]['name']); self::assertEquals(['adminaddress_id'=>'id'], $adminAddress['sourceToTargetKeyColumns']); self::assertEquals(['adminaddress_id'=>'adminaddress_id'], $adminAddress['joinColumnFieldNames']); @@ -822,34 +839,51 @@ public function testFetchOverrideMapping() public function testAttributeOverridesMapping() { $factory = $this->createClassMetadataFactory(); - $guestMetadata = $factory->getMetadataFor(DDC964Guest::class); $adminMetadata = $factory->getMetadataFor(DDC964Admin::class); - self::assertTrue($adminMetadata->fieldMappings['id']['id']); - self::assertEquals('id', $adminMetadata->fieldMappings['id']['fieldName']); - self::assertEquals('user_id', $adminMetadata->fieldMappings['id']['columnName']); self::assertEquals(['user_id'=>'id','user_name'=>'name'], $adminMetadata->fieldNames); - self::assertEquals(150, $adminMetadata->fieldMappings['id']['length']); + self::assertNotNull($adminMetadata->getProperty('id')); + + $idProperty = $adminMetadata->getProperty('id'); - self::assertEquals('name', $adminMetadata->fieldMappings['name']['fieldName']); - self::assertEquals('user_name', $adminMetadata->fieldMappings['name']['columnName']); - self::assertEquals(250, $adminMetadata->fieldMappings['name']['length']); - self::assertTrue($adminMetadata->fieldMappings['name']['nullable']); - self::assertFalse($adminMetadata->fieldMappings['name']['unique']); + self::assertTrue($idProperty->isPrimaryKey()); + self::assertEquals('id', $idProperty->getFieldName()); + self::assertEquals('user_id', $idProperty->getColumnName()); + self::assertEquals(150, $idProperty->getLength()); + self::assertNotNull($adminMetadata->getProperty('name')); + + $nameProperty = $adminMetadata->getProperty('name'); + + self::assertEquals('name', $nameProperty->getFieldName()); + self::assertEquals('user_name', $nameProperty->getColumnName()); + self::assertEquals(250, $nameProperty->getLength()); + self::assertTrue($nameProperty->isNullable()); + self::assertFalse($nameProperty->isUnique()); + + $guestMetadata = $factory->getMetadataFor(DDC964Guest::class); - self::assertTrue($guestMetadata->fieldMappings['id']['id']); - self::assertEquals('guest_id', $guestMetadata->fieldMappings['id']['columnName']); - self::assertEquals('id', $guestMetadata->fieldMappings['id']['fieldName']); self::assertEquals(['guest_id'=>'id','guest_name'=>'name'], $guestMetadata->fieldNames); - self::assertEquals(140, $guestMetadata->fieldMappings['id']['length']); - self::assertEquals('name', $guestMetadata->fieldMappings['name']['fieldName']); - self::assertEquals('guest_name', $guestMetadata->fieldMappings['name']['columnName']); - self::assertEquals(240, $guestMetadata->fieldMappings['name']['length']); - self::assertFalse($guestMetadata->fieldMappings['name']['nullable']); - self::assertTrue($guestMetadata->fieldMappings['name']['unique']); + self::assertNotNull($guestMetadata->getProperty('id')); + + $idProperty = $guestMetadata->getProperty('id'); + + self::assertTrue($idProperty->isPrimaryKey()); + self::assertEquals('id', $idProperty->getFieldName()); + self::assertEquals('guest_id', $idProperty->getColumnName()); + self::assertEquals(140, $idProperty->getLength()); + + self::assertNotNull($guestMetadata->getProperty('name')); + + $nameProperty = $guestMetadata->getProperty('name'); + + self::assertEquals('name', $nameProperty->getFieldName()); + self::assertEquals('guest_name', $nameProperty->getColumnName()); + self::assertEquals(240, $nameProperty->getLength()); + self::assertFalse($nameProperty->isNullable()); + self::assertTrue($nameProperty->isUnique()); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php index 13ecc8c7d2d..68d12ad6e44 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php @@ -55,7 +55,12 @@ public function testColumnWithMissingTypeDefaultsToString() $annotationDriver = $this->_loadDriver(); $annotationDriver->loadMetadataForClass(Annotation\InvalidColumn::class, $cm); - self::assertEquals('string', $cm->fieldMappings['id']['type']->getName()); + + self::assertNotNull($cm->getProperty('id')); + + $idProperty = $cm->getProperty('id'); + + self::assertEquals('string', $idProperty->getTypeName()); } /** @@ -250,8 +255,15 @@ public function testAttributeOverridesMappingWithTrait() $metadataWithoutOverride = $factory->getMetadataFor(DDC1872ExampleEntityWithoutOverride::class); $metadataWithOverride = $factory->getMetadataFor(DDC1872ExampleEntityWithOverride::class); - self::assertEquals('trait_foo', $metadataWithoutOverride->fieldMappings['foo']['columnName']); - self::assertEquals('foo_overridden', $metadataWithOverride->fieldMappings['foo']['columnName']); + self::assertNotNull($metadataWithoutOverride->getProperty('foo')); + self::assertNotNull($metadataWithOverride->getProperty('foo')); + + $fooPropertyWithoutOverride = $metadataWithoutOverride->getProperty('foo'); + $fooPropertyWithOverride = $metadataWithOverride->getProperty('foo'); + + self::assertEquals('trait_foo', $fooPropertyWithoutOverride->getColumnName()); + self::assertEquals('foo_overridden', $fooPropertyWithOverride->getColumnName()); + self::assertArrayHasKey('example_trait_bar_id', $metadataWithoutOverride->associationMappings['bar']['joinColumnFieldNames']); self::assertArrayHasKey('example_entity_overridden_bar_id', $metadataWithOverride->associationMappings['bar']['joinColumnFieldNames']); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index ec892c8b5ef..72a59b531e1 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -8,6 +8,7 @@ use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\MappingException; +use Doctrine\ORM\Mapping\InheritedFieldMetadata; use Doctrine\Tests\Models\DDC869\DDC869ChequePayment; use Doctrine\Tests\Models\DDC869\DDC869CreditCardPayment; use Doctrine\Tests\Models\DDC869\DDC869Payment; @@ -43,8 +44,9 @@ public function testGetMetadataForSubclassWithTransientBaseClass() self::assertEmpty($class->subClasses); self::assertEmpty($class->parentClasses); - self::assertArrayHasKey('id', $class->fieldMappings); - self::assertArrayHasKey('name', $class->fieldMappings); + + self::assertNotNull($class->getProperty('id')); + self::assertNotNull($class->getProperty('name')); } public function testGetMetadataForSubclassWithMappedSuperclass() @@ -54,14 +56,15 @@ public function testGetMetadataForSubclassWithMappedSuperclass() self::assertEmpty($class->subClasses); self::assertEmpty($class->parentClasses); - self::assertArrayHasKey('mapped1', $class->fieldMappings); - self::assertArrayHasKey('mapped2', $class->fieldMappings); - self::assertArrayHasKey('id', $class->fieldMappings); - self::assertArrayHasKey('name', $class->fieldMappings); + self::assertNotNull($class->getProperty('id')); + self::assertNotNull($class->getProperty('name')); + self::assertNotNull($class->getProperty('mapped1')); + self::assertNotNull($class->getProperty('mapped2')); + + self::assertNotInstanceOf(InheritedFieldMetadata::class, $class->getProperty('mapped1')); + self::assertNotInstanceOf(InheritedFieldMetadata::class, $class->getProperty('mapped2')); - self::assertArrayNotHasKey('inherited', $class->fieldMappings['mapped1']); - self::assertArrayNotHasKey('inherited', $class->fieldMappings['mapped2']); - self::assertArrayNotHasKey('transient', $class->fieldMappings); + self::assertNull($class->getProperty('transient')); self::assertArrayHasKey('mappedRelated1', $class->associationMappings); } @@ -73,26 +76,28 @@ public function testGetMetadataForSubclassWithMappedSuperclassWithRepository() { $class = $this->cmf->getMetadataFor(DDC869CreditCardPayment::class); - self::assertArrayHasKey('id', $class->fieldMappings); - self::assertArrayHasKey('value', $class->fieldMappings); - self::assertArrayHasKey('creditCardNumber', $class->fieldMappings); self::assertEquals($class->customRepositoryClassName, DDC869PaymentRepository::class); + self::assertNotNull($class->getProperty('id')); + self::assertNotNull($class->getProperty('value')); + self::assertNotNull($class->getProperty('creditCardNumber')); + $class = $this->cmf->getMetadataFor(DDC869ChequePayment::class); - self::assertArrayHasKey('id', $class->fieldMappings); - self::assertArrayHasKey('value', $class->fieldMappings); - self::assertArrayHasKey('serialNumber', $class->fieldMappings); self::assertEquals($class->customRepositoryClassName, DDC869PaymentRepository::class); + self::assertNotNull($class->getProperty('id')); + self::assertNotNull($class->getProperty('value')); + self::assertNotNull($class->getProperty('serialNumber')); // override repositoryClass $class = $this->cmf->getMetadataFor(SubclassWithRepository::class); - self::assertArrayHasKey('id', $class->fieldMappings); - self::assertArrayHasKey('value', $class->fieldMappings); self::assertEquals($class->customRepositoryClassName, EntityRepository::class); + + self::assertNotNull($class->getProperty('id')); + self::assertNotNull($class->getProperty('value')); } /** @@ -100,10 +105,9 @@ public function testGetMetadataForSubclassWithMappedSuperclassWithRepository() */ public function testSerializationWithPrivateFieldsFromMappedSuperclass() { - - $class = $this->cmf->getMetadataFor(EntitySubClass2::class); - + $class = $this->cmf->getMetadataFor(EntitySubClass2::class); $class2 = unserialize(serialize($class)); + $class2->wakeupReflection(new RuntimeReflectionService); self::assertArrayHasKey('mapped1', $class2->reflFields); @@ -118,9 +122,9 @@ public function testUnmappedSuperclassInHierarchy() { $class = $this->cmf->getMetadataFor(HierarchyD::class); - self::assertArrayHasKey('id', $class->fieldMappings); - self::assertArrayHasKey('a', $class->fieldMappings); - self::assertArrayHasKey('d', $class->fieldMappings); + self::assertNotNull($class->getProperty('id')); + self::assertNotNull($class->getProperty('a')); + self::assertNotNull($class->getProperty('d')); } /** @@ -147,7 +151,7 @@ public function testMappedSuperclassWithId() { $class = $this->cmf->getMetadataFor(SuperclassEntity::class); - self::assertArrayHasKey('id', $class->fieldMappings); + self::assertNotNull($class->getProperty('id')); } /** @@ -208,7 +212,7 @@ public function testMappedSuperclassIndex() /* @var $ClassMetadata class */ $class = $this->cmf->getMetadataFor(EntityIndexSubClass::class); - self::assertArrayHasKey('mapped1', $class->fieldMappings); + self::assertNotNull($class->getProperty('mapped1')); self::assertArrayHasKey('IDX_NAME_INDEX', $class->table['uniqueConstraints']); self::assertArrayHasKey('IDX_MAPPED1_INDEX', $class->table['uniqueConstraints']); self::assertArrayHasKey('IDX_MAPPED2_INDEX', $class->table['indexes']); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php index 302ce0164c4..13b67a7cd65 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php @@ -237,17 +237,19 @@ public function testChangeTrackingPolicyNotify() public function testAddField() { + self::assertNull($this->cm->getProperty('name')); + self::assertIsFluent($this->builder->addProperty('name', 'string')); - self::assertEquals( - [ - 'columnName' => 'name', - 'fieldName' => 'name', - 'type' => Type::getType('string'), - 'declaringClass' => $this->cm, - 'tableName' => 'CmsUser', - ], - $this->cm->fieldMappings['name'] - ); + + self::assertNotNull($this->cm->getProperty('name')); + + $property = $this->cm->getProperty('name'); + + self::assertEquals('name', $property->getFieldName()); + self::assertEquals($this->cm, $property->getDeclaringClass()); + self::assertEquals('string', $property->getTypeName()); + self::assertEquals('CmsUser', $property->getTableName()); + self::assertEquals('name', $property->getColumnName()); } public function testCreateField() @@ -255,19 +257,19 @@ public function testCreateField() $fieldBuilder = $this->builder->createField('name', 'string'); self::assertInstanceOf(FieldBuilder::class, $fieldBuilder); - self::assertFalse(isset($this->cm->fieldMappings['name'])); + self::assertNull($this->cm->getProperty('name')); self::assertIsFluent($fieldBuilder->build()); - self::assertEquals( - [ - 'columnName' => 'name', - 'fieldName' => 'name', - 'type' => Type::getType('string'), - 'declaringClass' => $this->cm, - 'tableName' => 'CmsUser', - ], - $this->cm->fieldMappings['name'] - ); + + self::assertNotNull($this->cm->getProperty('name')); + + $property = $this->cm->getProperty('name'); + + self::assertEquals('name', $property->getFieldName()); + self::assertEquals($this->cm, $property->getDeclaringClass()); + self::assertEquals('string', $property->getTypeName()); + self::assertEquals('CmsUser', $property->getTableName()); + self::assertEquals('name', $property->getColumnName()); } public function testCreateVersionedField() @@ -281,21 +283,20 @@ public function testCreateVersionedField() ->isVersionField() ->build(); - self::assertEquals( - [ - 'columnDefinition' => 'foobar', - 'columnName' => 'username', - 'default' => 1, - 'fieldName' => 'name', - 'length' => 124, - 'type' => Type::getType('integer'), - 'nullable' => true, - 'unique' => true, - 'declaringClass' => $this->cm, - 'tableName' => 'CmsUser', - ], - $this->cm->fieldMappings['name'] - ); + self::assertNotNull($this->cm->getProperty('name')); + + $property = $this->cm->getProperty('name'); + + self::assertEquals('name', $property->getFieldName()); + self::assertEquals($this->cm, $property->getDeclaringClass()); + self::assertEquals('integer', $property->getTypeName()); + self::assertEquals('CmsUser', $property->getTableName()); + self::assertEquals('username', $property->getColumnName()); + self::assertEquals('foobar', $property->getColumnDefinition()); + self::assertEquals(124, $property->getLength()); + self::assertTrue($property->isNullable()); + self::assertTrue($property->isUnique()); + self::assertEquals(['default' => 1], $property->getOptions()); } public function testCreatePrimaryField() @@ -305,18 +306,17 @@ public function testCreatePrimaryField() ->generatedValue() ->build(); + self::assertNotNull($this->cm->getProperty('name')); + + $property = $this->cm->getProperty('name'); + self::assertEquals(['id'], $this->cm->identifier); - self::assertEquals( - [ - 'columnName' => 'id', - 'fieldName' => 'id', - 'id' => true, - 'type' => Type::getType('integer'), - 'declaringClass' => $this->cm, - 'tableName' => 'CmsUser', - ], - $this->cm->fieldMappings['id'] - ); + self::assertEquals('id', $property->getFieldName()); + self::assertEquals($this->cm, $property->getDeclaringClass()); + self::assertEquals('integer', $property->getTypeName()); + self::assertEquals('CmsUser', $property->getTableName()); + self::assertEquals('id', $property->getColumnName()); + self::assertTrue($property->isPrimaryKey()); } public function testCreateUnsignedOptionField() @@ -325,17 +325,16 @@ public function testCreateUnsignedOptionField() ->option('unsigned', true) ->build(); - self::assertEquals( - [ - 'fieldName' => 'state', - 'type' => Type::getType('integer'), - 'options' => ['unsigned' => true], - 'columnName' => 'state', - 'declaringClass' => $this->cm, - 'tableName' => 'CmsUser', - ], - $this->cm->fieldMappings['state'] - ); + self::assertNotNull($this->cm->getProperty('name')); + + $property = $this->cm->getProperty('name'); + + self::assertEquals('state', $property->getFieldName()); + self::assertEquals($this->cm, $property->getDeclaringClass()); + self::assertEquals('integer', $property->getTypeName()); + self::assertEquals('CmsUser', $property->getTableName()); + self::assertEquals('state', $property->getColumnName()); + self::assertEquals(['unsigned' => true], $property->getOptions()); } public function testAddLifecycleEvent() diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index c2f0f44591e..21d668baa6f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -304,61 +304,46 @@ public function testQuoteMetadata() $addressMetadata = $cmf->getMetadataFor(Quote\Address::class); // Phone Class Metadata - self::assertTrue($phoneMetadata->fieldMappings['number']['quoted']); - self::assertEquals('phone-number', $phoneMetadata->fieldMappings['number']['columnName']); + self::assertNotNull($phoneMetadata->getProperty('number')); + self::assertEquals('phone-number', $phoneMetadata->getProperty('number')->getColumnName()); $user = $phoneMetadata->associationMappings['user']; - self::assertTrue($user['joinColumns'][0]['quoted']); + self::assertEquals('user-id', $user['joinColumns'][0]['name']); self::assertEquals('user-id', $user['joinColumns'][0]['referencedColumnName']); - // User Group Metadata - self::assertTrue($groupMetadata->fieldMappings['id']['quoted']); - self::assertTrue($groupMetadata->fieldMappings['name']['quoted']); + // Address Class Metadata + self::assertNotNull($addressMetadata->getProperty('id')); + self::assertNotNull($addressMetadata->getProperty('zip')); + self::assertEquals('address-id', $addressMetadata->getProperty('id')->getColumnName()); + self::assertEquals('address-zip', $addressMetadata->getProperty('zip')->getColumnName()); - self::assertEquals('user-id', $userMetadata->fieldMappings['id']['columnName']); - self::assertEquals('user-name', $userMetadata->fieldMappings['name']['columnName']); + // User Class Metadata + self::assertNotNull($userMetadata->getProperty('id')); + self::assertNotNull($userMetadata->getProperty('name')); + self::assertEquals('user-id', $userMetadata->getProperty('id')->getColumnName()); + self::assertEquals('user-name', $userMetadata->getProperty('name')->getColumnName()); $user = $groupMetadata->associationMappings['parent']; - self::assertTrue($user['joinColumns'][0]['quoted']); + self::assertEquals('parent-id', $user['joinColumns'][0]['name']); self::assertEquals('group-id', $user['joinColumns'][0]['referencedColumnName']); - // Address Class Metadata - self::assertTrue($addressMetadata->fieldMappings['id']['quoted']); - self::assertTrue($addressMetadata->fieldMappings['zip']['quoted']); - - self::assertEquals('address-id', $addressMetadata->fieldMappings['id']['columnName']); - self::assertEquals('address-zip', $addressMetadata->fieldMappings['zip']['columnName']); - $user = $addressMetadata->associationMappings['user']; - self::assertTrue($user['joinColumns'][0]['quoted']); self::assertEquals('user-id', $user['joinColumns'][0]['name']); self::assertEquals('user-id', $user['joinColumns'][0]['referencedColumnName']); - // User Class Metadata - self::assertTrue($userMetadata->fieldMappings['id']['quoted']); - self::assertTrue($userMetadata->fieldMappings['name']['quoted']); - - self::assertEquals('user-id', $userMetadata->fieldMappings['id']['columnName']); - self::assertEquals('user-name', $userMetadata->fieldMappings['name']['columnName']); - $address = $userMetadata->associationMappings['address']; - self::assertTrue($address['joinColumns'][0]['quoted']); self::assertEquals('address-id', $address['joinColumns'][0]['name']); self::assertEquals('address-id', $address['joinColumns'][0]['referencedColumnName']); $groups = $userMetadata->associationMappings['groups']; - self::assertTrue($groups['joinTable']['quoted']); - self::assertTrue($groups['joinTable']['joinColumns'][0]['quoted']); self::assertEquals('quote-users-groups', $groups['joinTable']['name']); self::assertEquals('user-id', $groups['joinTable']['joinColumns'][0]['name']); self::assertEquals('user-id', $groups['joinTable']['joinColumns'][0]['referencedColumnName']); - - self::assertTrue($groups['joinTable']['inverseJoinColumns'][0]['quoted']); self::assertEquals('group-id', $groups['joinTable']['inverseJoinColumns'][0]['name']); self::assertEquals('group-id', $groups['joinTable']['inverseJoinColumns'][0]['referencedColumnName']); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/YamlMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/YamlMappingDriverTest.php index 27da19c87fa..7acee6b5f85 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/YamlMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/YamlMappingDriverTest.php @@ -33,15 +33,16 @@ public function testJoinTablesWithMappedSuperclassForYamlDriver() $em = $this->_getTestEntityManager(); $em->getConfiguration()->setMetadataDriverImpl($yamlDriver); + $factory = new ClassMetadataFactory(); $factory->setEntityManager($em); - $classPage = new ClassMetadata(File::class); $classPage = $factory->getMetadataFor(File::class); + self::assertEquals(File::class, $classPage->associationMappings['parentDirectory']['sourceEntity']); - $classDirectory = new ClassMetadata(Directory::class); $classDirectory = $factory->getMetadataFor(Directory::class); + self::assertEquals(Directory::class, $classDirectory->associationMappings['parentDirectory']['sourceEntity']); } @@ -65,17 +66,17 @@ public function testSpacesShouldBeIgnoredWhenUseExplode() $unique = $metadata->table['uniqueConstraints'][0]['columns']; $indexes = $metadata->table['indexes'][0]['columns']; - $nameField = $metadata->fieldMappings['name']; - $valueField = $metadata->fieldMappings['value']; - self::assertEquals('name', $unique[0]); self::assertEquals('value', $unique[1]); self::assertEquals('value', $indexes[0]); self::assertEquals('name', $indexes[1]); - self::assertEquals(255, $nameField['length']); - self::assertEquals(255, $valueField['length']); + $nameField = $metadata->getProperty('name'); + $valueField = $metadata->getProperty('value'); + + self::assertEquals(255, $nameField->getLength()); + self::assertEquals(255, $valueField->getLength()); } } diff --git a/tests/Doctrine/Tests/ORM/Tools/ConvertDoctrine1SchemaTest.php b/tests/Doctrine/Tests/ORM/Tools/ConvertDoctrine1SchemaTest.php index 35ab6223577..c28252296f7 100644 --- a/tests/Doctrine/Tests/ORM/Tools/ConvertDoctrine1SchemaTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/ConvertDoctrine1SchemaTest.php @@ -65,14 +65,16 @@ public function testTest() $userClass = $cmf->getMetadataFor('User'); self::assertEquals(2, count($metadata)); - self::assertEquals('Profile', $profileClass->name); + self::assertEquals('User', $userClass->name); - self::assertEquals(4, count($profileClass->fieldMappings)); - self::assertEquals(5, count($userClass->fieldMappings)); - self::assertEquals('text', $userClass->fieldMappings['clob']['type']->getName()); - self::assertEquals('test_alias', $userClass->fieldMappings['theAlias']['columnName']); - self::assertEquals('theAlias', $userClass->fieldMappings['theAlias']['fieldName']); + self::assertEquals(5, count($userClass->getProperties())); + self::assertNotNull($userClass->getProperty('clob')); + self::assertNotNull($userClass->getProperty('theAlias')); + self::assertEquals('text', $userClass->getProperty('clob')->getTypeName()); + self::assertEquals('test_alias', $userClass->getProperty('theAlias')->getColumnName()); + self::assertEquals('Profile', $profileClass->name); + self::assertEquals(4, count($profileClass->getProperties())); self::assertEquals('Profile', $profileClass->associationMappings['User']['sourceEntity']); self::assertEquals('User', $profileClass->associationMappings['User']['targetEntity']); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 5f3cd1b908e..2e47393ac75 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -491,37 +491,6 @@ public function testEntityUpdatingWorks() ); } - /** - * @group embedded - * @group DDC-3152 - */ - public function testDoesNotRegenerateExistingMethodsWithDifferentCase() - { - $metadata = $this->generateBookEntityFixture(['isbn' => $this->generateIsbnEmbeddableFixture()]); - - // Workaround to change existing fields case (just to simulate the use case) - $metadata->fieldMappings['status']['fieldName'] = 'STATUS'; - $metadata->embeddedClasses['ISBN'] = $metadata->embeddedClasses['isbn']; - unset($metadata->embeddedClasses['isbn']); - - // Should not throw a PHP fatal error - $this->_generator->writeEntityClass($metadata, $this->_tmpDir); - - self::assertFileExists($this->_tmpDir . "/" . $this->_namespace . "/EntityGeneratorBook.php~"); - - $this->newInstance($metadata); - $reflClass = new \ReflectionClass($metadata->name); - - self::assertTrue($reflClass->hasProperty('status')); - self::assertTrue($reflClass->hasProperty('STATUS')); - self::assertTrue($reflClass->hasProperty('isbn')); - self::assertTrue($reflClass->hasProperty('ISBN')); - self::assertTrue($reflClass->hasMethod('getStatus')); - self::assertTrue($reflClass->hasMethod('setStatus')); - self::assertTrue($reflClass->hasMethod('getIsbn')); - self::assertTrue($reflClass->hasMethod('setIsbn')); - } - /** * @group DDC-2121 */ diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index d1161cae6cf..afb05112be5 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -167,9 +167,13 @@ public function testTypeIsExported($class) */ public function testIdentifierIsExported($class) { - self::assertEquals(ClassMetadata::GENERATOR_TYPE_IDENTITY, $class->generatorType, "Generator Type wrong"); + self::assertNotNull($class->getProperty('id')); + + $property = $class->getProperty('id'); + + self::assertTrue($property->isPrimaryKey()); self::assertEquals(['id'], $class->identifier); - self::assertTrue(isset($class->fieldMappings['id']['id']) && $class->fieldMappings['id']['id'] === true); + self::assertEquals(ClassMetadata::GENERATOR_TYPE_IDENTITY, $class->generatorType, "Generator Type wrong"); return $class; } @@ -180,22 +184,30 @@ public function testIdentifierIsExported($class) */ public function testFieldsAreExported($class) { - self::assertTrue(isset($class->fieldMappings['id']['id']) && $class->fieldMappings['id']['id'] === true); - self::assertEquals('id', $class->fieldMappings['id']['fieldName']); - self::assertEquals('integer', $class->fieldMappings['id']['type']->getName()); - self::assertEquals('id', $class->fieldMappings['id']['columnName']); - - self::assertEquals('name', $class->fieldMappings['name']['fieldName']); - self::assertEquals('string', $class->fieldMappings['name']['type']->getName()); - self::assertEquals(50, $class->fieldMappings['name']['length']); - self::assertEquals('name', $class->fieldMappings['name']['columnName']); - - self::assertEquals('email', $class->fieldMappings['email']['fieldName']); - self::assertEquals('string', $class->fieldMappings['email']['type']->getName()); - self::assertEquals('user_email', $class->fieldMappings['email']['columnName']); - self::assertEquals('CHAR(32) NOT NULL', $class->fieldMappings['email']['columnDefinition']); - - self::assertEquals(true, $class->fieldMappings['age']['options']['unsigned']); + self::assertNotNull($class->getProperty('id')); + self::assertNotNull($class->getProperty('name')); + self::assertNotNull($class->getProperty('email')); + + $idProperty = $class->getProperty('id'); + $nameProperty = $class->getProperty('name'); + $emailProperty = $class->getProperty('email'); + + self::assertTrue($idProperty->isPrimaryKey()); + self::assertEquals('id', $idProperty->getFieldName()); + self::assertEquals('integer', $idProperty->getTypeName()); + self::assertEquals('id', $idProperty->getColumnName()); + + self::assertEquals('name', $nameProperty->getFieldName()); + self::assertEquals('string', $nameProperty->getTypeName()); + self::assertEquals('name', $nameProperty->getColumnName()); + self::assertEquals(50, $nameProperty->getLength()); + + self::assertEquals('email', $emailProperty->getFieldName()); + self::assertEquals('string', $emailProperty->getTypeName()); + self::assertEquals('user_email', $emailProperty->getColumnName()); + self::assertEquals('CHAR(32) NOT NULL', $emailProperty->getColumnDefinition()); + self::assertArrayHasKey('unsigned', $emailProperty->getOptions()); + self::assertEquals(true, $emailProperty->getOptions()['unsigned']); return $class; } diff --git a/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php b/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php index a783bbf7df5..07972cfa55a 100644 --- a/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php @@ -69,16 +69,19 @@ public function testPassColumnDefinitionToJoinColumn() $em = $this->_getTestEntityManager(); $schemaTool = new SchemaTool($em); - $avatar = $em->getClassMetadata(ForumAvatar::class); - $avatar->fieldMappings['id']['columnDefinition'] = $customColumnDef; - $user = $em->getClassMetadata(ForumUser::class); + $avatar = $em->getClassMetadata(ForumAvatar::class); + $idProperty = $avatar->getProperty('id'); - $classes = [$avatar, $user]; + $idProperty->setColumnDefinition($customColumnDef); - $schema = $schemaTool->getSchemaFromMetadata($classes); + $user = $em->getClassMetadata(ForumUser::class); + $classes = [$avatar, $user]; + $schema = $schemaTool->getSchemaFromMetadata($classes); self::assertTrue($schema->hasTable('forum_users')); + $table = $schema->getTable("forum_users"); + self::assertTrue($table->hasColumn('avatar_id')); self::assertEquals($customColumnDef, $table->getColumn('avatar_id')->getColumnDefinition()); } From b291450080f8b2d69cc444121a74f64fcaf03a9c Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 21 May 2016 12:23:17 +0000 Subject: [PATCH 030/275] Removed unused methods --- .../ORM/Mapping/Builder/FieldBuilder.php | 1 + lib/Doctrine/ORM/Mapping/ClassMetadata.php | 89 +++---------------- .../ORM/Mapping/Driver/AnnotationDriver.php | 2 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 2 - .../ORM/Mapping/Driver/YamlDriver.php | 40 ++++----- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 8 ++ .../ORM/Mapping/InheritedFieldMetadata.php | 8 ++ lib/Doctrine/ORM/Mapping/PropertyMetadata.php | 5 ++ lib/Doctrine/ORM/Tools/SchemaTool.php | 22 +++-- .../Tests/Models/DDC3579/DDC3579Admin.php | 2 +- .../Functional/AdvancedAssociationTest.php | 3 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 29 ++---- 12 files changed, 74 insertions(+), 137 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php index 536106c31ad..57ac155dc5a 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php @@ -80,6 +80,7 @@ public function __construct(ClassMetadataBuilder $builder, $name, Type $type) $this->builder = $builder; $this->name = $name; $this->type = $type; + $this->mapping = []; } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index e0ee0def1d4..d966399e051 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1110,39 +1110,13 @@ public function isIdentifier($fieldName) return in_array($fieldName, $this->identifier, true); } - /** - * Checks if the field is unique. - * - * @param string $fieldName The field name. - * - * @return boolean TRUE if the field is unique, FALSE otherwise. - */ - public function isUniqueField($fieldName) - { - $mapping = $this->getFieldMapping($fieldName); - - return false !== $mapping && isset($mapping['unique']) && $mapping['unique']; - } - - /** - * Checks if the field is not null. - * - * @param string $fieldName The field name. - * - * @return boolean TRUE if the field is not null, FALSE otherwise. - */ - public function isNullable($fieldName) - { - $mapping = $this->getFieldMapping($fieldName); - - return false !== $mapping && isset($mapping['nullable']) && $mapping['nullable']; - } - /** * Gets a column name for a field name. * If the column name for the field cannot be found, the given field name * is returned. * + * @todo remove + * * @param string $fieldName The field name. * * @return string The column name. @@ -1154,25 +1128,6 @@ public function getColumnName($fieldName) : $fieldName; } - /** - * Gets the mapping of a (regular) field that holds some data but not a - * reference to another object. - * - * @param string $fieldName The field name. - * - * @return PropertyMetadata The field mapping. - * - * @throws MappingException - */ - public function getFieldMapping($fieldName) - { - if ( ! isset($this->properties[$fieldName])) { - throw MappingException::mappingNotFound($this->name, $fieldName); - } - - return $this->properties[$fieldName]; - } - /** * Gets the mapping of an association. * @@ -1848,22 +1803,6 @@ public function isIdentifierUuid() return $this->generatorType == self::GENERATOR_TYPE_UUID; } - /** - * Gets the type of a field. - * - * @param string $fieldName - * - * @return \Doctrine\DBAL\Types\Type|string|null - * - * @todo 3.0 Remove this. PersisterHelper should fix it somehow - */ - public function getTypeOfField($fieldName) - { - return isset($this->properties[$fieldName]) - ? $this->properties[$fieldName]->getType() - : null; - } - /** * Gets the name of the primary table. * @@ -2040,19 +1979,6 @@ public function isRootEntity() return $this->name == $this->rootEntityName; } - /** - * Checks whether a mapped field is inherited from an entity superclass. - * - * @param string $fieldName - * - * @return bool TRUE if the field is inherited, FALSE otherwise. - */ - public function isInheritedField($fieldName) - { - return isset($this->properties[$fieldName]) - && $this->properties[$fieldName] instanceof InheritedFieldMetadata; - } - /** * Checks whether a mapped association field is inherited from a superclass. * @@ -2181,7 +2107,14 @@ public function addProperty($fieldName, Type $type, array $mapping = []) $property->setTableName(! $this->isMappedSuperclass ? $this->getTableName() : null); $property->setColumnName($mapping['columnName'] ?? $this->namingStrategy->propertyToColumnName($fieldName, $this->name)); - $property->setPrimaryKey(isset($mapping['id']) && $mapping['id'] === true); + $property->setPrimaryKey(isset($mapping['id']) && $mapping['id']); + $property->setNullable(isset($mapping['nullable']) && $mapping['nullable']); + $property->setUnique(isset($mapping['unique']) && $mapping['unique']); + $property->setColumnDefinition($mapping['columnDefinition'] ?? null); + $property->setLength($mapping['length'] ?? null); + $property->setScale($mapping['scale'] ?? null); + $property->setPrecision($mapping['precision'] ?? null); + $property->setOptions($mapping['options'] ?? []); // Check for already declared column if (isset($this->fieldNames[$property->getColumnName()]) || @@ -2192,7 +2125,7 @@ public function addProperty($fieldName, Type $type, array $mapping = []) $this->fieldNames[$property->getColumnName()] = $fieldName; // Complete id mapping - if (isset($mapping['id']) && $mapping['id'] === true) { + if (isset($mapping['id']) && $mapping['id']) { assert($this->versionField !== $fieldName, MappingException::cannotVersionIdField($this->name, $fieldName)); assert(! $type->canRequireSQLConversion(), MappingException::sqlConversionNotAllowedForPrimaryKeyProperties($property)); diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 3d2bfec53d4..f2fb744d356 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -291,7 +291,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat /* @var $reflProperty \ReflectionProperty */ foreach ($class->getProperties() as $reflProperty) { if (($metadata->isMappedSuperclass && ! $reflProperty->isPrivate()) - || $metadata->isInheritedField($reflProperty->name) + || (($property = $metadata->getProperty($reflProperty->name)) !== null && $property->isInherited()) || $metadata->isInheritedAssociation($reflProperty->name) || $metadata->isInheritedEmbeddedClass($reflProperty->name)) { continue; diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index d6e219c3c77..2a88cf0311c 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -579,8 +579,6 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) foreach ($overrideElement->field as $field) { $mapping = $this->columnToArray($field); - $mapping['fieldName'] = $fieldName; - $metadata->setAttributeOverride($fieldName, $mapping); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php index dc9a486298a..2ad39247543 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php @@ -272,34 +272,18 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) if (isset($element['id'])) { // Evaluate identifier settings - foreach ($element['id'] as $name => $idElement) { - if (isset($idElement['associationKey']) && $idElement['associationKey'] == true) { - $associationIds[$name] = true; + foreach ($element['id'] as $fieldName => $idElement) { + if (isset($idElement['associationKey']) && $idElement['associationKey']) { + $associationIds[$fieldName] = true; continue; } - $fieldName = $name; - $fieldType = Type::getType($idElement['type'] ?? 'string'); - $fieldMapping = ['id' => true]; + $mapping = $this->columnToArray($idElement); - if (isset($idElement['column'])) { - $fieldMapping['columnName'] = $idElement['column']; - } - - if (isset($idElement['length'])) { - $fieldMapping['length'] = $idElement['length']; - } - - if (isset($idElement['columnDefinition'])) { - $fieldMapping['columnDefinition'] = $idElement['columnDefinition']; - } - - if (isset($idElement['options'])) { - $fieldMapping['options'] = $idElement['options']; - } + $mapping['id'] = true; - $metadata->addProperty($fieldName, $fieldType, $fieldMapping); + $metadata->addProperty($fieldName, Type::getType($mapping['type']), $mapping); if (isset($idElement['generator'])) { $generatorStrategy = strtoupper($idElement['generator']['strategy']); @@ -327,7 +311,6 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate fields if (isset($element['fields'])) { foreach ($element['fields'] as $fieldName => $fieldMapping) { - $params = explode('(', $fieldMapping['type']); $mapping = $this->columnToArray($fieldMapping); if (isset($mapping['id'])) { @@ -339,7 +322,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } } - $property = $metadata->addProperty($fieldName, Type::getType(trim($params[0])), $mapping); + $property = $metadata->addProperty($fieldName, Type::getType($mapping['type']), $mapping); if (isset($mapping['version'])) { $metadata->setVersionMapping($property); @@ -647,6 +630,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) foreach ($element['attributeOverride'] as $fieldName => $attributeOverrideElement) { $mapping = $this->columnToArray($fieldName, $attributeOverrideElement); + $metadata->setAttributeOverride($fieldName, $mapping); } } @@ -731,7 +715,9 @@ private function joinColumnToArray($joinColumnElement) */ private function columnToArray($column) { - $mapping = []; + $mapping = [ + 'type' => 'string', + ]; if (isset($column['type'])) { $params = explode('(', $column['type']); @@ -739,12 +725,16 @@ private function columnToArray($column) if (isset($params[1])) { $column['length'] = (integer) substr($params[1], 0, strlen($params[1]) - 1); } + + $mapping['type'] = trim($params[0]); } if (isset($column['length'])) { $mapping['length'] = (integer) $column['length']; } + + if (isset($column['column'])) { $mapping['columnName'] = $column['column']; } diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index f8b71cab2a4..e88cbdffde4 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -308,6 +308,14 @@ public function isUnique() return $this->isUnique; } + /** + * {@inheritdoc} + */ + public function isInherited() + { + return false; + } + /** * {@inheritdoc} */ diff --git a/lib/Doctrine/ORM/Mapping/InheritedFieldMetadata.php b/lib/Doctrine/ORM/Mapping/InheritedFieldMetadata.php index e2adb81f16f..fae818cdd44 100644 --- a/lib/Doctrine/ORM/Mapping/InheritedFieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/InheritedFieldMetadata.php @@ -33,4 +33,12 @@ public function getCurrentClass() { return $this->currentClass; } + + /** + * {@inheritdoc} + */ + public function isInherited() + { + return false; + } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/PropertyMetadata.php b/lib/Doctrine/ORM/Mapping/PropertyMetadata.php index 095ce99e342..4620f049e2b 100644 --- a/lib/Doctrine/ORM/Mapping/PropertyMetadata.php +++ b/lib/Doctrine/ORM/Mapping/PropertyMetadata.php @@ -50,6 +50,11 @@ public function setTableName($tableName); */ public function getTableName(); + /** + * @return boolean + */ + public function isInherited(); + /** * @return boolean */ diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 8f49af49a4b..c6297918c3d 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -423,12 +423,12 @@ private function gatherColumns($class, Table $table) private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Table $table) { $fieldName = $fieldMetadata->getFieldName(); - $columnName = $this->quoteStrategy->getColumnName($fieldName, $classMetadata, $this->platform); + $columnName = $fieldMetadata->getColumnName(); $columnType = $fieldMetadata->getTypeName(); $options = [ 'length' => $fieldMetadata->getLength(), - 'notnull' => $fieldMetadata->isNullable(), + 'notnull' => ! $fieldMetadata->isNullable(), 'platformOptions' => [ 'version' => ($classMetadata->isVersioned && $classMetadata->versionField === $fieldName), ], @@ -478,18 +478,22 @@ private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Tabl $options['autoincrement'] = false; } - if ($fieldMetadata->isUnique()) { - $table->addUniqueIndex([$columnName]); - } + $quotedColumnName = $this->quoteStrategy->getColumnName($fieldName, $classMetadata, $this->platform); - if ($table->hasColumn($columnName)) { + if ($table->hasColumn($quotedColumnName)) { // required in some inheritance scenarios - $table->changeColumn($columnName, $options); + $table->changeColumn($quotedColumnName, $options); - return $table->getColumn($columnName); + $column = $table->getColumn($quotedColumnName); + } else { + $column = $table->addColumn($quotedColumnName, $columnType, $options); + } + + if ($fieldMetadata->isUnique()) { + $table->addUniqueIndex([$columnName]); } - return $table->addColumn($columnName, $columnType, $options); + return $column; } /** diff --git a/tests/Doctrine/Tests/Models/DDC3579/DDC3579Admin.php b/tests/Doctrine/Tests/Models/DDC3579/DDC3579Admin.php index 85383994cb0..1cb8421ec8a 100644 --- a/tests/Doctrine/Tests/Models/DDC3579/DDC3579Admin.php +++ b/tests/Doctrine/Tests/Models/DDC3579/DDC3579Admin.php @@ -13,7 +13,7 @@ */ class DDC3579Admin extends DDC3579User { - public static function loadMetadata($metadata) + public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { $metadata->setAssociationOverride('groups', [ 'inversedBy' => 'admins' diff --git a/tests/Doctrine/Tests/ORM/Functional/AdvancedAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/AdvancedAssociationTest.php index 7d2950d894f..dfd962eeba1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/AdvancedAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/AdvancedAssociationTest.php @@ -26,7 +26,8 @@ protected function setUp() { ] ); } catch (\Exception $e) { - // Swallow all exceptions. We do not test the schema tool here. + // Automatically mark failure + self::fail($e->getMessage()); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index c4d7086aae4..5b589041ea1 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -91,22 +91,25 @@ public function testFieldIsNullable() $cm->initializeReflection(new RuntimeReflectionService()); // Explicit Nullable - $cm->addProperty('status', Type::getType('string'), [ + $property = $cm->addProperty('status', Type::getType('string'), [ 'nullable' => true, 'length' => 50, ]); - self::assertTrue($cm->isNullable('status')); + self::assertTrue($property->isNullable()); // Explicit Not Nullable - $cm->addProperty('username', Type::getType('string'), ['nullable' => false, 'length' => 50]); + $property = $cm->addProperty('username', Type::getType('string'), [ + 'nullable' => false, + 'length' => 50, + ]); - self::assertFalse($cm->isNullable('username')); + self::assertFalse($property->isNullable()); // Implicit Not Nullable - $cm->addProperty('name', Type::getType('string'), ['length' => 50]); + $property = $cm->addProperty('name', Type::getType('string'), ['length' => 50]); - self::assertFalse($cm->isNullable('name'), "By default a field should not be nullable."); + self::assertFalse($property->isNullable(), "By default a field should not be nullable."); } /** @@ -450,20 +453,6 @@ public function testSetMultipleIdentifierSetsComposite() self::assertTrue($cm->isIdentifierComposite); } - /** - * @group DDC-944 - */ - public function testMappingNotFound() - { - $cm = new ClassMetadata(CMS\CmsUser::class); - $cm->initializeReflection(new RuntimeReflectionService()); - - $this->expectException(MappingException::class); - $this->expectExceptionMessage("No mapping found for field 'foo' on class '" . CMS\CmsUser::class . "'."); - - $cm->getFieldMapping('foo'); - } - /** * @group DDC-961 */ From cb222b66f487be9ac9a28ee798106c94e8776641 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Thu, 26 May 2016 22:43:47 +0000 Subject: [PATCH 031/275] More work towards FieldMetadata --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 38 +++++++++++++++---- .../ORM/Mapping/Driver/AnnotationDriver.php | 2 +- .../Command/MappingDescribeCommand.php | 31 +++++++++++++-- .../ORM/Tools/Export/Driver/PhpExporter.php | 5 ++- .../ORM/Tools/Export/Driver/XmlExporter.php | 38 +++++++++++++------ .../Tests/Models/DDC964/DDC964Guest.php | 13 +------ .../Tests/Models/DDC964/DDC964User.php | 2 +- .../ORM/Mapping/ClassMetadataFactoryTest.php | 1 - .../Tests/ORM/Mapping/ClassMetadataTest.php | 16 +------- .../Tests/ORM/Mapping/QuoteStrategyTest.php | 1 - ...ctrine.Tests.Models.DDC964.DDC964Guest.php | 16 +++----- .../php/Doctrine.Tests.ORM.Mapping.User.php | 4 +- .../AbstractClassMetadataExporterTest.php | 22 ++++++++--- 13 files changed, 116 insertions(+), 73 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index d966399e051..2e2e301abb3 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1942,14 +1942,13 @@ public function setAssociationOverride($fieldName, array $overrideMapping) * Sets the override for a mapped field. * * @param string $fieldName - * @param Type $type * @param array $overrideMapping * * @return void * * @throws MappingException */ - public function setAttributeOverride($fieldName, Type $type, array $overrideMapping) + public function setAttributeOverride($fieldName, array $overrideMapping) { $property = $this->getProperty($fieldName); @@ -1957,16 +1956,28 @@ public function setAttributeOverride($fieldName, Type $type, array $overrideMapp throw MappingException::invalidOverrideFieldName($this->name, $fieldName); } - if ($type !== $property->getType()) { - throw MappingException::invalidOverrideFieldType($this->name, $fieldName); - } - $overrideMapping['id'] = $property->isPrimaryKey(); unset($this->properties[$fieldName]); unset($this->fieldNames[$property->getColumnName()]); - $this->addProperty($fieldName, $type, $overrideMapping); + $this->addProperty($fieldName, $property->getType(), $overrideMapping); + } + + /** + * Gets the type of a field. + * + * @param string $fieldName + * + * @return \Doctrine\DBAL\Types\Type|string|null + * + * @todo 3.0 Remove this. PersisterHelper should fix it somehow + */ + public function getTypeOfField($fieldName) + { + return isset($this->properties[$fieldName]) + ? $this->properties[$fieldName]->getType() + : null; } /** @@ -1979,6 +1990,19 @@ public function isRootEntity() return $this->name == $this->rootEntityName; } + /** + * Checks whether a mapped field is inherited from an entity superclass. + * + * @param string $fieldName + * + * @return bool TRUE if the field is inherited, FALSE otherwise. + */ + public function isInheritedField($fieldName) + { + return isset($this->properties[$fieldName]) + && $this->properties[$fieldName] instanceof InheritedFieldMetadata; + } + /** * Checks whether a mapped association field is inherited from a superclass. * diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index f2fb744d356..3d2bfec53d4 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -291,7 +291,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat /* @var $reflProperty \ReflectionProperty */ foreach ($class->getProperties() as $reflProperty) { if (($metadata->isMappedSuperclass && ! $reflProperty->isPrivate()) - || (($property = $metadata->getProperty($reflProperty->name)) !== null && $property->isInherited()) + || $metadata->isInheritedField($reflProperty->name) || $metadata->isInheritedAssociation($reflProperty->name) || $metadata->isInheritedEmbeddedClass($reflProperty->name)) { continue; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index f9bdf789d02..7edc3cc40df 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -120,9 +120,9 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage $this->formatEntityListeners($metadata->entityListeners), ], [$this->formatField('Association mappings:', '')], - $this->formatMappings($metadata->associationMappings), + $this->formatAssociationMappings($metadata->associationMappings), [$this->formatField('Field mappings:', '')], - $this->formatMappings($metadata->getProperties()) + $this->formatPropertyMappings($metadata->getProperties()) ) ); @@ -261,7 +261,30 @@ private function formatField($label, $value) * * @return array */ - private function formatMappings(array $propertyMappings) + private function formatAssociationMappings(array $propertyMappings) + { + $output = []; + + foreach ($propertyMappings as $propertyName => $mapping) { + $output[] = $this->formatField(sprintf(' %s', $propertyName), ''); + + foreach ($mapping as $field => $value) { + $output[] = $this->formatField(sprintf(' %s', $field), $this->formatValue($value)); + } + } + + return $output; + } + + + /** + * Format the property mappings + * + * @param array $propertyMappings + * + * @return array + */ + private function formatPropertyMappings(array $propertyMappings) { $output = []; @@ -271,7 +294,7 @@ private function formatMappings(array $propertyMappings) $output[] = $this->formatField(' type', $this->formatValue($property->getTypeName())); $output[] = $this->formatField(' tableName', $this->formatValue($property->getTableName())); $output[] = $this->formatField(' columnName', $this->formatValue($property->getColumnName())); - $output[] = $this->formatField(' columnDescription', $this->formatValue($property->getColumnDescription())); + $output[] = $this->formatField(' columnDefinition', $this->formatValue($property->getColumnDefinition())); $output[] = $this->formatField(' isPrimaryKey', $this->formatValue($property->isPrimaryKey())); $output[] = $this->formatField(' isNullable', $this->formatValue($property->isNullable())); $output[] = $this->formatField(' isUnique', $this->formatValue($property->isUnique())); diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 9eb694ca935..3a292d8aa86 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -43,6 +43,7 @@ public function exportClassMetadata(ClassMetadata $metadata) $lines = []; $lines[] = 'properties as $property) { + foreach ($metadata->getProperties() as $property) { $lines[] = sprintf( - '$metadata->addProperty("%s", Type::getType("%s"), %s)', + '$metadata->addProperty("%s", Type::getType("%s"), %s);', $property->getFieldName(), $property->getType()->getName(), $this->_varExport($property->getMapping()) diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 125804cbad0..c52a6613296 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -97,7 +97,7 @@ public function exportClassMetadata(ClassMetadata $metadata) $trackingPolicy = $this->_getChangeTrackingPolicyString($metadata->changeTrackingPolicy); - if ( $trackingPolicy != 'DEFERRED_IMPLICIT') { + if ( $trackingPolicy !== 'DEFERRED_IMPLICIT') { $root->addChild('change-tracking-policy', $trackingPolicy); } @@ -131,29 +131,29 @@ public function exportClassMetadata(ClassMetadata $metadata) foreach ($properties as $name => $property) { if ($property->isPrimaryKey()) { - $id[$name] = $property; + $id[$name]['property'] = $property; unset($properties[$name]); } } - foreach ($metadata->associationMappings as $name => $assoc) { + /*foreach ($metadata->associationMappings as $name => $assoc) { if (isset($assoc['id']) && $assoc['id']) { - $id[$name] = [ - 'fieldName' => $name, - 'associationKey' => true + $id[$name]['associations'] = [ + 'fieldName' => $name, + 'associationKey' => true, ]; } - } + }*/ if ( ! $metadata->isIdentifierComposite && $idGeneratorType = $this->_getIdGeneratorTypeString($metadata->generatorType)) { $id[$metadata->getSingleIdentifierFieldName()]['generator']['strategy'] = $idGeneratorType; } if ($id) { - foreach ($id as $property) { - $idXml = $root->addChild('id'); - + foreach ($id as $field) { + $property = $field['property']; + $idXml = $root->addChild('id'); $idXml->addAttribute('name', $property->getFieldName()); $idXml->addAttribute('type', $property->getTypeName()); $idXml->addAttribute('column', $property->getColumnName()); @@ -183,8 +183,14 @@ public function exportClassMetadata(ClassMetadata $metadata) $fieldXml->addAttribute('name', $property->getFieldName()); $fieldXml->addAttribute('type', $property->getTypeName()); $fieldXml->addAttribute('column', $property->getColumnName()); - $fieldXml->addAttribute('nullable', $property->isNullable() ? 'true' : 'false'); - $fieldXml->addAttribute('unique', $property->isUnique() ? 'true' : 'false'); + + if ($property->isNullable()) { + $fieldXml->addAttribute('nullable', 'true'); + } + + if ($property->isUnique()) { + $fieldXml->addAttribute('unique', 'true'); + } if (is_int($property->getLength())) { $fieldXml->addAttribute('length', $property->getLength()); @@ -302,7 +308,9 @@ public function exportClassMetadata(ClassMetadata $metadata) if (isset($associationMapping['joinTable']) && $associationMapping['joinTable']) { $joinTableXml = $associationMappingXml->addChild('join-table'); + $joinTableXml->addAttribute('name', $associationMapping['joinTable']['name']); + $joinColumnsXml = $joinTableXml->addChild('join-columns'); foreach ($associationMapping['joinTable']['joinColumns'] as $joinColumn) { @@ -319,6 +327,7 @@ public function exportClassMetadata(ClassMetadata $metadata) foreach ($associationMapping['joinTable']['inverseJoinColumns'] as $inverseJoinColumn) { $inverseJoinColumnXml = $inverseJoinColumnsXml->addChild('join-column'); + $inverseJoinColumnXml->addAttribute('name', $inverseJoinColumn['name']); $inverseJoinColumnXml->addAttribute('referenced-column-name', $inverseJoinColumn['referencedColumnName']); @@ -339,11 +348,13 @@ public function exportClassMetadata(ClassMetadata $metadata) } } } + if (isset($associationMapping['joinColumns'])) { $joinColumnsXml = $associationMappingXml->addChild('join-columns'); foreach ($associationMapping['joinColumns'] as $joinColumn) { $joinColumnXml = $joinColumnsXml->addChild('join-column'); + $joinColumnXml->addAttribute('name', $joinColumn['name']); $joinColumnXml->addAttribute('referenced-column-name', $joinColumn['referencedColumnName']); @@ -360,11 +371,13 @@ public function exportClassMetadata(ClassMetadata $metadata) } } } + if (isset($associationMapping['orderBy'])) { $orderByXml = $associationMappingXml->addChild('order-by'); foreach ($associationMapping['orderBy'] as $name => $direction) { $orderByFieldXml = $orderByXml->addChild('order-by-field'); + $orderByFieldXml->addAttribute('name', $name); $orderByFieldXml->addAttribute('direction', $direction); } @@ -377,6 +390,7 @@ public function exportClassMetadata(ClassMetadata $metadata) foreach ($metadata->lifecycleCallbacks as $name => $methods) { foreach ($methods as $method) { $lifecycleCallbackXml = $lifecycleCallbacksXml->addChild('lifecycle-callback'); + $lifecycleCallbackXml->addAttribute('type', $name); $lifecycleCallbackXml->addAttribute('method', $method); } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php b/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php index bc9f163d26a..15e5fe5829a 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php @@ -6,11 +6,7 @@ * @Entity * @AttributeOverrides({ * @AttributeOverride(name="id", - * column=@Column( - * name = "guest_id", - * type = "integer", - length = 140 - * ) + * column=@Column(name="guest_id") * ), * @AttributeOverride(name="name", * column=@Column( @@ -26,12 +22,7 @@ class DDC964Guest extends DDC964User { public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->setAttributeOverride('id', [ - 'columnName' => 'guest_id', - 'type' => 'integer', - 'length' => 140, - ] - ); + $metadata->setAttributeOverride('id', ['columnName' => 'guest_id']); $metadata->setAttributeOverride('name', [ diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php index e5c32c120c5..5de8cd1e6e0 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php @@ -14,7 +14,7 @@ class DDC964User /** * @Id * @GeneratedValue - * @Column(type="integer", name="user_id", length=150) + * @Column(type="integer", name="user_id") */ protected $id; diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 21d668baa6f..1aab42a4b84 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -63,7 +63,6 @@ public function testGetMetadataForSingleClass() self::assertSame($cm1, $cmMap1); self::assertEquals('group', $cmMap1->table['name']); - self::assertTrue($cmMap1->table['quoted']); self::assertEquals([], $cmMap1->parentClasses); self::assertTrue($cmMap1->hasField('name')); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 5b589041ea1..b41d2676f65 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -1122,20 +1122,6 @@ public function testInvalidPropertyAttributeOverrideNameException() $cm->setAttributeOverride('invalidPropertyName', []); } - /** - * @group DDC-964 - * @expectedException Doctrine\ORM\Mapping\MappingException - * @expectedExceptionMessage The column type of attribute 'name' on class 'Doctrine\Tests\Models\DDC964\DDC964Guest' could not be changed. - */ - public function testInvalidOverrideAttributeFieldTypeException() - { - $cm = new ClassMetadata(DDC964Guest::class); - $cm->initializeReflection(new RuntimeReflectionService()); - $cm->addProperty('name', Type::getType('string')); - - $cm->setAttributeOverride('name', ['type' => 'date']); - } - /** * @group DDC-1955 * @@ -1210,7 +1196,7 @@ public function testQuotedSequenceName() $cm->setSequenceGeneratorDefinition(['sequenceName' => 'foo']); - self::assertEquals(['sequenceName' => 'foo', 'quoted' => true], $cm->sequenceGeneratorDefinition); + self::assertEquals(['sequenceName' => 'foo'], $cm->sequenceGeneratorDefinition); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php b/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php index 6aa76d5b6ae..a02aea87ea7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php @@ -18,7 +18,6 @@ */ class QuoteStrategyTest extends OrmTestCase { - /** * @var \Doctrine\ORM\Mapping\DefaultQuoteStrategy */ diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Guest.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Guest.php index 28f6f48c592..732f6e3eb55 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Guest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Guest.php @@ -1,16 +1,12 @@ setAttributeOverride('id', [ - 'columnName' => 'guest_id', - 'type' => 'integer', - 'length' => 140, -] -); + +$metadata->setAttributeOverride('id', ['columnName' => 'guest_id']); $metadata->setAttributeOverride('name', [ - 'columnName' => 'guest_name', - 'nullable' => false, - 'unique' => true, - 'length' => 240, + 'columnName' => 'guest_name', + 'nullable' => false, + 'unique' => true, + 'length' => 240, ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index 653f0927b6f..d6be91c4249 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -55,9 +55,7 @@ ] ); -$mapping = ['fieldName' => 'version', 'type' => 'integer']; -$metadata->setVersionMapping($mapping); -$metadata->addProperty('version', Type::getType('integer')); +$metadata->setVersionMapping($metadata->addProperty('version', Type::getType('integer'))); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index afb05112be5..0615fd41a6c 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -38,14 +38,19 @@ abstract protected function _getType(); protected function _createEntityManager($metadataDriver) { $driverMock = new DriverMock(); - $config = new Configuration(); + $config = new Configuration(); + $config->setProxyDir(__DIR__ . '/../../Proxies'); $config->setProxyNamespace('Doctrine\Tests\Proxies'); $eventManager = new EventManager(); $conn = new ConnectionMock([], $driverMock, $config, $eventManager); $config->setMetadataDriverImpl($metadataDriver); - return EntityManagerMock::create($conn, $config, $eventManager); + $driverMock = new DriverMock(); + $eventManager = new EventManager(); + $connection = new ConnectionMock([], $driverMock, $config, $eventManager); + + return EntityManagerMock::create($connection, $config, $eventManager); } protected function _createMetadataDriver($type, $path) @@ -145,7 +150,8 @@ public function testTableIsExported($class) self::assertEquals('cms_users', $class->table['name']); self::assertEquals( ['engine' => 'MyISAM', 'foo' => ['bar' => 'baz']], - $class->table['options']); + $class->table['options'] + ); return $class; } @@ -187,10 +193,12 @@ public function testFieldsAreExported($class) self::assertNotNull($class->getProperty('id')); self::assertNotNull($class->getProperty('name')); self::assertNotNull($class->getProperty('email')); + self::assertNotNull($class->getProperty('age')); $idProperty = $class->getProperty('id'); $nameProperty = $class->getProperty('name'); $emailProperty = $class->getProperty('email'); + $ageProperty = $class->getProperty('age'); self::assertTrue($idProperty->isPrimaryKey()); self::assertEquals('id', $idProperty->getFieldName()); @@ -206,8 +214,12 @@ public function testFieldsAreExported($class) self::assertEquals('string', $emailProperty->getTypeName()); self::assertEquals('user_email', $emailProperty->getColumnName()); self::assertEquals('CHAR(32) NOT NULL', $emailProperty->getColumnDefinition()); - self::assertArrayHasKey('unsigned', $emailProperty->getOptions()); - self::assertEquals(true, $emailProperty->getOptions()['unsigned']); + + self::assertEquals('age', $ageProperty->getFieldName()); + self::assertEquals('integer', $ageProperty->getTypeName()); + self::assertEquals('age', $ageProperty->getColumnName()); + self::assertArrayHasKey('unsigned', $ageProperty->getOptions()); + self::assertEquals(true, $ageProperty->getOptions()['unsigned']); return $class; } From 01d37245c545da8067c65af46a34f57408c46ca6 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Thu, 26 May 2016 23:57:27 +0000 Subject: [PATCH 032/275] No more errors (just failures) for FieldMetadata --- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 38 +++++++++---------- .../ORM/Mapping/Driver/YamlDriver.php | 2 - .../ORM/Tools/ConvertDoctrine1Schema.php | 11 +++--- .../ORM/Tools/Export/Driver/YamlExporter.php | 25 ++++++++++-- .../ORM/Tools/ConvertDoctrine1SchemaTest.php | 10 +++-- 5 files changed, 51 insertions(+), 35 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 2a88cf0311c..2c64c7e35ec 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -261,9 +261,9 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate mappings if (isset($xmlRoot->field)) { foreach ($xmlRoot->field as $mapping) { - $fieldName = (string) $mapping['name']; - $fieldType = Type::getType((string) $mapping['type']); $fieldMapping = $this->columnToArray($mapping); + $fieldName = (string) $mapping['name']; + $fieldType = Type::getType((string) $fieldMapping['type']); $property = $metadata->addProperty($fieldName, $fieldType, $fieldMapping); if (isset($fieldMapping['version'])) { @@ -305,24 +305,10 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } $fieldName = (string) $idElement['name']; - $fieldType = Type::getType(isset($idElement['type']) ? (string) $idElement['type'] : 'string'); - $fieldMapping = ['id' => true]; - - if (isset($idElement['length'])) { - $fieldMapping['length'] = (string) $idElement['length']; - } + $fieldMapping = $this->columnToArray($idElement); + $fieldType = Type::getType((string) $fieldMapping['type']); - if (isset($idElement['column'])) { - $fieldMapping['columnName'] = (string) $idElement['column']; - } - - if (isset($idElement['column-definition'])) { - $fieldMapping['columnDefinition'] = (string) $idElement['column-definition']; - } - - if (isset($idElement->options)) { - $fieldMapping['options'] = $this->_parseOptions($idElement->options->children()); - } + $fieldMapping['id'] = true; $metadata->addProperty($fieldName, $fieldType, $fieldMapping); @@ -746,7 +732,19 @@ private function joinColumnToArray(SimpleXMLElement $joinColumnElement) */ private function columnToArray(SimpleXMLElement $fieldMapping) { - $mapping = []; + $mapping = [ + 'type' => 'string', + ]; + + if (isset($fieldMapping['type'])) { + $params = explode('(', (string) $fieldMapping['type']); + + if (isset($params[1])) { + $fieldMapping['length'] = (integer) substr($params[1], 0, strlen($params[1]) - 1); + } + + $mapping['type'] = trim($params[0]); + } if (isset($fieldMapping['column'])) { $mapping['columnName'] = (string) $fieldMapping['column']; diff --git a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php index 2ad39247543..559e1c0b96f 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php @@ -733,8 +733,6 @@ private function columnToArray($column) $mapping['length'] = (integer) $column['length']; } - - if (isset($column['column'])) { $mapping['columnName'] = $column['column']; } diff --git a/lib/Doctrine/ORM/Tools/ConvertDoctrine1Schema.php b/lib/Doctrine/ORM/Tools/ConvertDoctrine1Schema.php index 52029747845..8b18105fe4c 100644 --- a/lib/Doctrine/ORM/Tools/ConvertDoctrine1Schema.php +++ b/lib/Doctrine/ORM/Tools/ConvertDoctrine1Schema.php @@ -330,11 +330,12 @@ private function convertRelations($className, array $model, ClassMetadata $metad $method = 'mapOneToMany'; } - $associationMapping = []; - $associationMapping['fieldName'] = $relation['alias']; - $associationMapping['targetEntity'] = $relation['class']; - $associationMapping['mappedBy'] = $relation['foreignAlias']; - $associationMapping['joinColumns'] = $joinColumns; + $associationMapping = [ + 'fieldName' => $relation['alias'], + 'targetEntity' => $relation['class'], + 'mappedBy' => $relation['foreignAlias'], + 'joinColumns' => $joinColumns, + ]; $metadata->$method($associationMapping); } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php index 0049ff9bc5d..8b38628c227 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php @@ -95,17 +95,28 @@ public function exportClassMetadata(ClassMetadata $metadata) foreach ($properties as $name => $property) { $mapping = [ - 'column' => $property->getColumnName(), - 'type' => $property->getTypeName(), + 'column' => $property->getColumnName(), + 'type' => $property->getTypeName(), + 'columnDefinition' => $property->getColumnDefinition(), + 'length' => $property->getLength(), + 'scale' => $property->getScale(), + 'precision' => $property->getPrecision(), + 'options' => $property->getOptions(), + 'id' => $property->isPrimaryKey(), + 'nullable' => $property->isNullable(), + 'unique' => $property->isUnique(), ]; if ($mapping['column'] === $name) { unset($mapping['column']); } - if (isset($mapping['id']) && $mapping['id']) { + $mapping = array_filter($mapping); + + if (isset($mapping['id']) && $mapping['id'] === true) { $ids[$name] = $mapping; + unset($mapping['id']); unset($mappings[$name]); continue; @@ -186,7 +197,13 @@ public function exportClassMetadata(ClassMetadata $metadata) 'orphanRemoval' => $associationMapping['orphanRemoval'], ]; - $associationMappingArray = array_merge($associationMappingArray, $oneToOneMappingArray); + if (count($associationMapping['joinColumns']) > 1) { + $oneToOneMappingArray['joinColumns'] = $associationMapping['joinColumns']; + } else { + $oneToOneMappingArray['joinColumn'] = reset($associationMapping['joinColumns']); + } + + $associationMappingArray = array_filter(array_merge($associationMappingArray, $oneToOneMappingArray)); if ($associationMapping['type'] & ClassMetadata::ONE_TO_ONE) { $array['oneToOne'][$name] = $associationMappingArray; diff --git a/tests/Doctrine/Tests/ORM/Tools/ConvertDoctrine1SchemaTest.php b/tests/Doctrine/Tests/ORM/Tools/ConvertDoctrine1SchemaTest.php index c28252296f7..d8ea2c4df2c 100644 --- a/tests/Doctrine/Tests/ORM/Tools/ConvertDoctrine1SchemaTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/ConvertDoctrine1SchemaTest.php @@ -28,15 +28,17 @@ class ConvertDoctrine1SchemaTest extends OrmTestCase { protected function _createEntityManager($metadataDriver) { - $driverMock = new DriverMock(); $config = new Configuration(); + $config->setProxyDir(__DIR__ . '/../../Proxies'); $config->setProxyNamespace('Doctrine\Tests\Proxies'); - $eventManager = new EventManager(); - $conn = new ConnectionMock([], $driverMock, $config, $eventManager); $config->setMetadataDriverImpl($metadataDriver); - return EntityManagerMock::create($conn, $config, $eventManager); + $driverMock = new DriverMock(); + $eventManager = new EventManager(); + $connection = new ConnectionMock(array(), $driverMock, $config, $eventManager); + + return EntityManagerMock::create($connection, $config, $eventManager); } public function testTest() From 1f14e1ad2f63cbcb2b4bcd7591a4840792f3fe73 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 27 May 2016 21:59:13 +0000 Subject: [PATCH 033/275] Normalized quote strategy execution for discriminator columns and join columns --- .../ORM/Mapping/DefaultQuoteStrategy.php | 4 +-- lib/Doctrine/ORM/Mapping/QuoteStrategy.php | 16 +++++----- lib/Doctrine/ORM/Query/SqlWalker.php | 32 ++++++++++--------- .../Tests/ORM/Performance/DDC2602Test.php | 1 + .../ORM/Performance/SecondLevelCacheTest.php | 1 + 5 files changed, 29 insertions(+), 25 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php index 8041a690b61..aaeb1ea720f 100644 --- a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php @@ -103,8 +103,8 @@ public function getIdentifierColumnNames(ClassMetadata $class, AbstractPlatform $quotedColumnNames = []; foreach ($class->identifier as $fieldName) { - if ($class->getProperty($fieldName) !== null) { - $quotedColumnNames[] = $this->getColumnName($fieldName, $class, $platform); + if (($property = $class->getProperty($fieldName)) !== null) { + $quotedColumnNames[] = $platform->quoteIdentifier($property->getColumnName()); continue; } diff --git a/lib/Doctrine/ORM/Mapping/QuoteStrategy.php b/lib/Doctrine/ORM/Mapping/QuoteStrategy.php index 1a21ff1bb16..3061a379d27 100644 --- a/lib/Doctrine/ORM/Mapping/QuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/QuoteStrategy.php @@ -38,7 +38,7 @@ interface QuoteStrategy * * @return string */ - function getColumnName($fieldName, ClassMetadata $class, AbstractPlatform $platform); + public function getColumnName($fieldName, ClassMetadata $class, AbstractPlatform $platform); /** * Gets the (possibly quoted) primary table name for safe use in an SQL statement. @@ -48,7 +48,7 @@ function getColumnName($fieldName, ClassMetadata $class, AbstractPlatform $platf * * @return string */ - function getTableName(ClassMetadata $class, AbstractPlatform $platform); + public function getTableName(ClassMetadata $class, AbstractPlatform $platform); /** * Gets the (possibly quoted) sequence name for safe use in an SQL statement. @@ -59,7 +59,7 @@ function getTableName(ClassMetadata $class, AbstractPlatform $platform); * * @return string */ - function getSequenceName(array $definition, ClassMetadata $class, AbstractPlatform $platform); + public function getSequenceName(array $definition, ClassMetadata $class, AbstractPlatform $platform); /** * Gets the (possibly quoted) name of the join table. @@ -70,7 +70,7 @@ function getSequenceName(array $definition, ClassMetadata $class, AbstractPlatfo * * @return string */ - function getJoinTableName(array $association, ClassMetadata $class, AbstractPlatform $platform); + public function getJoinTableName(array $association, ClassMetadata $class, AbstractPlatform $platform); /** * Gets the (possibly quoted) join column name. @@ -81,7 +81,7 @@ function getJoinTableName(array $association, ClassMetadata $class, AbstractPlat * * @return string */ - function getJoinColumnName(array $joinColumn, ClassMetadata $class, AbstractPlatform $platform); + public function getJoinColumnName(array $joinColumn, ClassMetadata $class, AbstractPlatform $platform); /** * Gets the (possibly quoted) join column name. @@ -92,7 +92,7 @@ function getJoinColumnName(array $joinColumn, ClassMetadata $class, AbstractPlat * * @return string */ - function getReferencedJoinColumnName(array $joinColumn, ClassMetadata $class, AbstractPlatform $platform); + public function getReferencedJoinColumnName(array $joinColumn, ClassMetadata $class, AbstractPlatform $platform); /** * Gets the (possibly quoted) identifier column names for safe use in an SQL statement. @@ -102,7 +102,7 @@ function getReferencedJoinColumnName(array $joinColumn, ClassMetadata $class, Ab * * @return array */ - function getIdentifierColumnNames(ClassMetadata $class, AbstractPlatform $platform); + public function getIdentifierColumnNames(ClassMetadata $class, AbstractPlatform $platform); /** * Gets the column alias. @@ -114,6 +114,6 @@ function getIdentifierColumnNames(ClassMetadata $class, AbstractPlatform $platfo * * @return string */ - function getColumnAlias($columnName, $counter, AbstractPlatform $platform, ClassMetadata $class = null); + public function getColumnAlias($columnName, $counter, AbstractPlatform $platform, ClassMetadata $class = null); } diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index d103d55efb6..c730e7e516e 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -458,11 +458,12 @@ private function _generateDiscriminatorColumnConditionSQL(array $dqlAliases) $values[] = $conn->quote($this->em->getClassMetadata($subclassName)->discriminatorValue); } - $sqlTableAlias = ($this->useSqlTableAliases) + $quotedColumnName = $this->platform->quoteIdentifier($class->discriminatorColumn['name']); + $sqlTableAlias = ($this->useSqlTableAliases) ? $this->getSQLTableAlias($class->discriminatorColumn['tableName'], $dqlAlias) . '.' : ''; - $sqlParts[] = $sqlTableAlias . $class->discriminatorColumn['name'] . ' IN (' . implode(', ', $values) . ')'; + $sqlParts[] = $sqlTableAlias . $quotedColumnName . ' IN (' . implode(', ', $values) . ')'; } $sql = implode(' AND ', $sqlParts); @@ -690,7 +691,7 @@ public function walkPathExpression($pathExpr) $sql .= $this->getSQLTableAlias($mapping['joinColumns'][0]['tableName'], $dqlAlias) . '.'; } - $sql .= $mapping['joinColumns'][0]['name']; + $sql .= $this->quoteStrategy->getJoinColumnName($mapping['joinColumns'][0], $class, $this->platform); break; default: @@ -737,13 +738,14 @@ public function walkSelectClause($selectClause) if ($class->isInheritanceTypeSingleTable() || $class->isInheritanceTypeJoined()) { // Add discriminator columns to SQL - $rootClass = $this->em->getClassMetadata($class->rootEntityName); - $discrColumn = $rootClass->discriminatorColumn; - $tblAlias = $this->getSQLTableAlias($discrColumn['tableName'], $dqlAlias); - $discrColumn = $rootClass->discriminatorColumn; - $columnAlias = $this->getSQLColumnAlias($discrColumn['name']); + $rootClass = $this->em->getClassMetadata($class->rootEntityName); + $discrColumn = $rootClass->discriminatorColumn; + $tblAlias = $this->getSQLTableAlias($discrColumn['tableName'], $dqlAlias); + $discrColumn = $rootClass->discriminatorColumn; + $columnAlias = $this->getSQLColumnAlias($discrColumn['name']); + $quotedColumnName = $this->platform->quoteIdentifier($discrColumn['name']); - $sqlSelectExpressions[] = $tblAlias . '.' . $discrColumn['name'] . ' AS ' . $columnAlias; + $sqlSelectExpressions[] = $tblAlias . '.' . $quotedColumnName . ' AS ' . $columnAlias; $this->rsm->setDiscriminatorColumn($dqlAlias, $columnAlias); $this->rsm->addMetaResult($dqlAlias, $columnAlias, $discrColumn['fieldName'], false, $discrColumn['type']); @@ -767,14 +769,14 @@ public function walkSelectClause($selectClause) foreach ($assoc['joinColumns'] as $joinColumn) { $sqlTableAlias = $this->getSQLTableAlias($joinColumn['tableName'], $dqlAlias); - $columnName = $joinColumn['name']; - $columnAlias = $this->getSQLColumnAlias($columnName); + $columnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); + $columnAlias = $this->getSQLColumnAlias($joinColumn['name']); $columnType = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); $quotedColumnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); $sqlSelectExpressions[] = $sqlTableAlias . '.' . $quotedColumnName . ' AS ' . $columnAlias; - $this->rsm->addMetaResult($dqlAlias, $columnAlias, $columnName, $isIdentifier, $columnType); + $this->rsm->addMetaResult($dqlAlias, $columnAlias, $joinColumn['name'], $isIdentifier, $columnType); } } @@ -796,14 +798,14 @@ public function walkSelectClause($selectClause) $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); foreach ($assoc['joinColumns'] as $joinColumn) { - $columnName = $joinColumn['name']; - $columnAlias = $this->getSQLColumnAlias($columnName); + $columnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $subClass, $this->platform); + $columnAlias = $this->getSQLColumnAlias($joinColumn['name']); $columnType = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); $quotedColumnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $subClass, $this->platform); $sqlSelectExpressions[] = $sqlTableAlias . '.' . $quotedColumnName . ' AS ' . $columnAlias; - $this->rsm->addMetaResult($dqlAlias, $columnAlias, $columnName, $subClass->isIdentifier($columnName), $columnType); + $this->rsm->addMetaResult($dqlAlias, $columnAlias, $joinColumn['name'], $subClass->isIdentifier($joinColumn['name']), $columnType); } } } diff --git a/tests/Doctrine/Tests/ORM/Performance/DDC2602Test.php b/tests/Doctrine/Tests/ORM/Performance/DDC2602Test.php index de8bedfc7d1..85f3981f0af 100644 --- a/tests/Doctrine/Tests/ORM/Performance/DDC2602Test.php +++ b/tests/Doctrine/Tests/ORM/Performance/DDC2602Test.php @@ -8,6 +8,7 @@ use Doctrine\Tests\OrmPerformanceTestCase; /** + * @group performance * @group DDC-2602 */ class DDC2602Test extends OrmPerformanceTestCase diff --git a/tests/Doctrine/Tests/ORM/Performance/SecondLevelCacheTest.php b/tests/Doctrine/Tests/ORM/Performance/SecondLevelCacheTest.php index 7ed0636400c..e54b8413a98 100644 --- a/tests/Doctrine/Tests/ORM/Performance/SecondLevelCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Performance/SecondLevelCacheTest.php @@ -10,6 +10,7 @@ use Doctrine\ORM\EntityManagerInterface; /** + * @group performance * @group DDC-2183 * @group performance */ From 89a8db2336a5c6eb80440d4afd9bfae873b1699c Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 28 May 2016 00:12:51 +0000 Subject: [PATCH 034/275] Refactored QuoteStrategy::getColumnName() --- UPGRADE.md | 35 +++++++++++++--- .../ORM/Mapping/AnsiQuoteStrategy.php | 28 +++++++++++-- .../ORM/Mapping/ClassMetadataFactory.php | 7 ++-- .../ORM/Mapping/DefaultQuoteStrategy.php | 6 +-- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 7 +--- lib/Doctrine/ORM/Mapping/QuoteStrategy.php | 5 +-- .../Collection/ManyToManyPersister.php | 17 ++++---- .../Entity/BasicEntityPersister.php | 40 +++++++++++-------- .../Entity/JoinedSubclassPersister.php | 2 +- .../ORM/Query/AST/Functions/SizeFunction.php | 9 +++-- lib/Doctrine/ORM/Query/SqlWalker.php | 31 ++++++++------ lib/Doctrine/ORM/Tools/EntityGenerator.php | 5 ++- .../Pagination/LimitSubqueryOutputWalker.php | 3 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 8 ++-- .../PersistentCollectionCriteriaTest.php | 4 ++ .../ORM/Functional/Ticket/DDC142Test.php | 2 + .../ORM/Functional/Ticket/DDC1719Test.php | 2 + .../ORM/Functional/Ticket/DDC1843Test.php | 3 +- .../ORM/Functional/Ticket/DDC1885Test.php | 3 +- .../ORM/Functional/Ticket/DDC2825Test.php | 2 + .../ORM/Functional/Ticket/DDC832Test.php | 3 ++ .../ORM/Mapping/AnsiQuoteStrategyTest.php | 12 +++--- .../Tests/ORM/Mapping/QuoteStrategyTest.php | 16 +++++--- .../Doctrine/Tests/OrmFunctionalTestCase.php | 4 ++ tests/Doctrine/Tests/OrmTestCase.php | 8 ++++ 25 files changed, 177 insertions(+), 85 deletions(-) diff --git a/UPGRADE.md b/UPGRADE.md index 72614289742..475f957e2c0 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -1,13 +1,24 @@ - # Upgrade to 3.0 -## BC Break: Removed ``ClassMetadata::getTypeOfColumn()`` +## BC Break: Removed methods in ``ClassMetadata`` + +* ``ClassMetadata::getFieldMapping`` => Use ``ClassMetadata::getProperty()`` and its methods +* ``ClassMetadata::getQuotedColumnName`` => Use ``ClassMetadata::getProperty()::getQuotedColumnName()`` +* ``ClassMetadata::getQuotedTableName`` +* ``ClassMetadata::getQuotedJoinTableName`` +* ``ClassMetadata::getQuotedIdentifierColumnNames`` +* ``ClassMetadata::isUniqueField`` => Use ``ClassMetadata::getProperty()::isUnique()`` +* ``ClassMetadata::isNullable`` => Use ``ClassMetadata::getProperty()::isNullable()`` +* ``ClassMetadata::getTypeOfColumn()`` => Use ``PersisterHelper::getTypeOfColumn()`` + +## BC Break: Removed ``quoted`` index from table, field and sequence mappings -Better alternative is to use ``PersisterHelper::getTypeOfColumn()`` +All conversions are now being called, always. Implement your own ``Doctrine\ORM\Mapping\QuoteStrategy`` to manipulate +to your custom desired behavior. ## BC Break: Removed ``ClassMetadata::$fieldMappings[$fieldName]['requireSQLConversion']`` -ORM Type SQL conversion is now always being applied, minimizing the risks of erorr prone code in ORM internals +ORM Type SQL conversion is now always being applied, minimizing the risks of error prone code in ORM internals ## BC Break: Removed ``ClassMetadata::$columnNames`` @@ -17,7 +28,7 @@ If your code relies on this property, you should search/replace from this: To this: - $metadata->fieldMappings[$fieldName]['columnName'] + $metadata->getProperty($fieldName)->getColumnName() ## BC Break: Renamed ``ClassMetadata::setIdentifierValues()`` to ``ClassMetadata::assignIdentifier()`` @@ -56,6 +67,7 @@ Every field, association or embedded now contains a pointer to its declaring Cla Every field, association join column or inline embedded field/association holds a reference to its owning table name. + # Upgrade to 2.6 ## Minor BC BREAK: `Doctrine\ORM\Tools\Console\ConsoleRunner` is now final @@ -79,6 +91,7 @@ Method `Doctrine\ORM\Query\Parser#overwriteInternalDQLFunctionNotAllowed` was removed because of the choice to allow users to overwrite internal functions, ie `AVG`, `SUM`, `COUNT`, `MIN` and `MAX`. [#6500](https://github.com/doctrine/doctrine2/pull/6500) + # Upgrade to 2.5 ## Minor BC BREAK: removed `Doctrine\ORM\Query\SqlWalker#walkCaseExpression()` @@ -238,6 +251,7 @@ From now on, the resultset will look like this: Added way to access the underlying QueryBuilder#from() method's 'indexBy' parameter when using EntityRepository#createQueryBuilder() + # Upgrade to 2.4 ## BC BREAK: Compatibility Bugfix in PersistentCollection#matching() @@ -282,6 +296,7 @@ Now parenthesis are considered, the previous DQL will generate: SELECT 100 / (2 * 2) FROM my_entity + # Upgrade to 2.3 ## Auto Discriminator Map breaks userland implementations with Listener @@ -351,6 +366,7 @@ Also, following mapping drivers have been deprecated, please use their replaceme * `Doctrine\ORM\Mapping\Driver\PHPDriver` => `Doctrine\Common\Persistence\Mapping\Driver\PHPDriver` * `Doctrine\ORM\Mapping\Driver\StaticPHPDriver` => `Doctrine\Common\Persistence\Mapping\Driver\StaticPHPDriver` + # Upgrade to 2.2 ## ResultCache implementation rewritten @@ -434,6 +450,7 @@ Also, Doctrine 2.2 now is around 10-15% faster than 2.1. Previously EntityManager#find(null) returned null. It now throws an exception. + # Upgrade to 2.1 ## Interface for EntityRepository @@ -458,6 +475,7 @@ The annotation reader was heavily refactored between 2.0 and 2.1-RC1. In theory This is already done inside the ``$config->newDefaultAnnotationDriver``, so everything should automatically work if you are using this method. You can verify if everything still works by executing a console command such as schema-validate that loads all metadata into memory. + # Update from 2.0-BETA3 to 2.0-BETA4 ## XML Driver element demoted to attribute @@ -466,6 +484,7 @@ We changed how the XML Driver allows to define the change-tracking-policy. The w + # Update from 2.0-BETA2 to 2.0-BETA3 ## Serialization of Uninitialized Proxies @@ -528,10 +547,12 @@ don't loose anything through this. The default allocation size for sequences has been changed from 10 to 1. This step was made to not cause confusion with users and also because it is partly some kind of premature optimization. + # Update from 2.0-BETA1 to 2.0-BETA2 There are no backwards incompatible changes in this release. + # Upgrade from 2.0-ALPHA4 to 2.0-BETA1 ## EntityRepository deprecates access to protected variables @@ -602,7 +623,6 @@ access all entities. Xml and Yaml Drivers work as before! - ## New inversedBy attribute It is now *mandatory* that the owning side of a bidirectional association specifies the @@ -698,6 +718,7 @@ The Collection interface in the Common package has been updated with some missin that were present only on the default implementation, ArrayCollection. Custom collection implementations need to be updated to adhere to the updated interface. + # Upgrade from 2.0-ALPHA3 to 2.0-ALPHA4 ## CLI Controller changes @@ -734,6 +755,8 @@ With new required method AbstractTask::buildDocumentation, its implementation de database schema without deleting any unused tables, sequences or foreign keys. * Use "doctrine schema-tool --complete-update" to do a full incremental update of your schema. + + # Upgrade from 2.0-ALPHA2 to 2.0-ALPHA3 This section details the changes made to Doctrine 2.0-ALPHA3 to make it easier for you diff --git a/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php b/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php index db0e2ab0c84..56b89cc6e84 100644 --- a/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php @@ -33,9 +33,9 @@ class AnsiQuoteStrategy implements QuoteStrategy /** * {@inheritdoc} */ - public function getColumnName($fieldName, ClassMetadata $class, AbstractPlatform $platform) + public function getColumnName(FieldMetadata $fieldMetadata, AbstractPlatform $platform) { - return $class->getProperty($fieldName)->getColumnName(); + return $fieldMetadata->getColumnName(); } /** @@ -83,7 +83,29 @@ public function getJoinTableName(array $association, ClassMetadata $class, Abstr */ public function getIdentifierColumnNames(ClassMetadata $class, AbstractPlatform $platform) { - return $class->identifier; + $columnNames = array(); + + foreach ($class->identifier as $fieldName) { + if (($property = $class->getProperty($fieldName)) !== null) { + $columnNames[] = $property->getColumnName(); + + continue; + } + + // Association defined as Id field + $joinColumns = $class->associationMappings[$fieldName]['joinColumns']; + $assocColumnNames = array_map( + function ($joinColumn) + { + return $joinColumn['name']; + }, + $joinColumns + ); + + $columnNames = array_merge($columnNames, $assocColumnNames); + } + + return $columnNames; } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 1e3381b8dd4..3f61fa1562b 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -128,15 +128,16 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS $class->setPrimaryTable($parent->table); } - $class->setInheritanceType($parent->inheritanceType); - $class->setDiscriminatorColumn($parent->discriminatorColumn); - $class->setIdGeneratorType($parent->generatorType); $this->addInheritedFields($class, $parent); $this->addInheritedRelations($class, $parent); $this->addInheritedEmbeddedClasses($class, $parent); + + $class->setInheritanceType($parent->inheritanceType); + $class->setIdGeneratorType($parent->generatorType); $class->setIdentifier($parent->identifier); $class->setVersioned($parent->isVersioned); $class->setVersionField($parent->versionField); + $class->setDiscriminatorColumn($parent->discriminatorColumn); $class->setDiscriminatorMap($parent->discriminatorMap); $class->setLifecycleCallbacks($parent->lifecycleCallbacks); $class->setChangeTrackingPolicy($parent->changeTrackingPolicy); diff --git a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php index aaeb1ea720f..6c9a4b17b02 100644 --- a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php @@ -32,9 +32,9 @@ class DefaultQuoteStrategy implements QuoteStrategy /** * {@inheritdoc} */ - public function getColumnName($fieldName, ClassMetadata $class, AbstractPlatform $platform) + public function getColumnName(FieldMetadata $fieldMetadata, AbstractPlatform $platform) { - return $platform->quoteIdentifier($class->getProperty($fieldName)->getColumnName()); + return $fieldMetadata->getQuotedColumnName($platform); } /** @@ -104,7 +104,7 @@ public function getIdentifierColumnNames(ClassMetadata $class, AbstractPlatform foreach ($class->identifier as $fieldName) { if (($property = $class->getProperty($fieldName)) !== null) { - $quotedColumnNames[] = $platform->quoteIdentifier($property->getColumnName()); + $quotedColumnNames[] = $property->getQuotedColumnName($platform); continue; } diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index e88cbdffde4..e8a25cbc4d2 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -346,12 +346,9 @@ public function wakeupReflection(ReflectionService $reflectionService) * * @return string */ - public function getQuotedColumnName(AbstractPlatform $platform, QuoteStrategy $quoteStrategy = null) + public function getQuotedColumnName(AbstractPlatform $platform) { - return $quoteStrategy - ? $quoteStrategy->getColumnName($this->fieldName, $this->declaringClass, $platform) - : $platform->quoteIdentifier($this->columnName) - ; + return $platform->quoteIdentifier($this->columnName); } /** diff --git a/lib/Doctrine/ORM/Mapping/QuoteStrategy.php b/lib/Doctrine/ORM/Mapping/QuoteStrategy.php index 3061a379d27..978573d92e7 100644 --- a/lib/Doctrine/ORM/Mapping/QuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/QuoteStrategy.php @@ -32,13 +32,12 @@ interface QuoteStrategy /** * Gets the (possibly quoted) column name for safe use in an SQL statement. * - * @param string $fieldName - * @param ClassMetadata $class + * @param FieldMetadata $fieldMetadata * @param AbstractPlatform $platform * * @return string */ - public function getColumnName($fieldName, ClassMetadata $class, AbstractPlatform $platform); + public function getColumnName(FieldMetadata $fieldMetadata, AbstractPlatform $platform); /** * Gets the (possibly quoted) primary table name for safe use in an SQL statement. diff --git a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php index 176ef37ee07..0f9e078cc5b 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php @@ -260,9 +260,11 @@ public function loadCriteria(PersistentCollection $collection, Criteria $criteri foreach ($parameters as $parameter) { list($name, $value) = $parameter; - $field = $this->quoteStrategy->getColumnName($name, $targetClass, $this->platform); - $whereClauses[] = sprintf('te.%s = ?', $field); - $params[] = $value; + + $field = $this->quoteStrategy->getColumnName($targetClass->getProperty($name), $this->platform); + + $whereClauses[] = sprintf('te.%s = ?', $field); + $params[] = $value; } $tableName = $this->quoteStrategy->getTableName($targetClass, $this->platform); @@ -753,14 +755,13 @@ private function expandCriteriaParameters(Criteria $criteria) private function getOrderingSql(Criteria $criteria, ClassMetadata $targetClass) { $orderings = $criteria->getOrderings(); + if ($orderings) { $orderBy = []; + foreach ($orderings as $name => $direction) { - $field = $this->quoteStrategy->getColumnName( - $name, - $targetClass, - $this->platform - ); + $field = $this->quoteStrategy->getColumnName($targetClass->getProperty($name), $this->platform); + $orderBy[] = $field . ' ' . $direction; } diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 2fda6d17c2b..e7fbbf9eff7 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -334,11 +334,10 @@ protected function assignDefaultVersionValue($entity, array $id) */ protected function fetchVersionValue($versionedClass, array $id) { - $versionField = $versionedClass->versionField; - $property = $versionedClass->getProperty($versionField); - $tableName = $this->quoteStrategy->getTableName($versionedClass, $this->platform); - $identifier = $this->quoteStrategy->getIdentifierColumnNames($versionedClass, $this->platform); - $columnName = $this->quoteStrategy->getColumnName($versionField, $versionedClass, $this->platform); + $property = $versionedClass->getProperty($versionedClass->versionField); + $tableName = $this->quoteStrategy->getTableName($versionedClass, $this->platform); + $identifier = $this->quoteStrategy->getIdentifierColumnNames($versionedClass, $this->platform); + $columnName = $this->quoteStrategy->getColumnName($property, $this->platform); // FIXME: Order with composite keys might not be correct $sql = 'SELECT ' . $columnName @@ -421,7 +420,7 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat case isset($this->class->fieldNames[$columnName]): $fieldName = $this->class->fieldNames[$columnName]; $property = $this->class->getProperty($fieldName); - $column = $this->quoteStrategy->getColumnName($fieldName, $this->class, $this->platform); + $column = $this->quoteStrategy->getColumnName($property, $this->platform); $placeholder = $property->getType()->convertToDatabaseValueSQL('?', $this->platform); break; @@ -442,9 +441,11 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat foreach ($this->class->identifier as $idField) { if ( ! isset($this->class->associationMappings[$idField])) { + $property = $this->class->getProperty($idField); + $params[] = $identifier[$idField]; - $types[] = $this->class->getProperty($idField)->getType(); - $where[] = $this->quoteStrategy->getColumnName($idField, $this->class, $this->platform); + $types[] = $property->getType(); + $where[] = $this->quoteStrategy->getColumnName($property, $this->platform); continue; } @@ -471,9 +472,10 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat } if ($versioned) { - $versionField = $this->class->versionField; - $versionFieldType = $this->class->getProperty($versionField)->getType(); - $versionColumn = $this->quoteStrategy->getColumnName($versionField, $this->class, $this->platform); + $versionField = $this->class->versionField; + $versionProperty = $this->class->getProperty($versionField); + $versionFieldType = $versionProperty->getType(); + $versionColumn = $this->quoteStrategy->getColumnName($versionProperty, $this->platform); $where[] = $versionColumn; $types[] = $versionFieldType; @@ -1168,7 +1170,7 @@ protected final function getOrderBySQL(array $orderBy, $baseTableAlias) ? $property->getDeclaringClass() : $this->class; $tableAlias = $this->getSQLTableAlias($class->getTableName()); - $columnName = $this->quoteStrategy->getColumnName($fieldName, $this->class, $this->platform); + $columnName = $this->quoteStrategy->getColumnName($property, $this->platform); $orderByList[] = $tableAlias . '.' . $columnName . ' ' . $orientation; @@ -1411,7 +1413,9 @@ public function getInsertSQL() $tableName = $this->quoteStrategy->getTableName($this->class, $this->platform); if (empty($columns)) { - $identityColumn = $this->quoteStrategy->getColumnName($this->class->identifier[0], $this->class, $this->platform); + $property = $this->class->getProperty($this->class->identifier[0]); + $identityColumn = $this->quoteStrategy->getColumnName($property, $this->platform); + $this->insertSql = $this->platform->getEmptyIdentityInsertSQL($tableName, $identityColumn); return $this->insertSql; @@ -1474,8 +1478,10 @@ protected function getInsertColumnList() } if (! $this->class->isIdGeneratorIdentity() || $this->class->identifier[0] !== $name) { - $columns[] = $this->quoteStrategy->getColumnName($name, $this->class, $this->platform); - $this->columnTypes[$name] = $this->class->getProperty($name)->getType(); + $property = $this->class->getProperty($name); + + $columns[] = $this->quoteStrategy->getColumnName($property, $this->platform); + $this->columnTypes[$name] = $property->getType(); } } @@ -1507,7 +1513,7 @@ protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r' $sql = sprintf( '%s.%s', $this->getSQLTableAlias($property->getTableName(), ($alias == 'r' ? '' : $alias)), - $this->quoteStrategy->getColumnName($field, $class, $this->platform) + $this->quoteStrategy->getColumnName($property, $this->platform) ); $this->currentPersisterContext->rsm->addFieldResult($alias, $columnAlias, $field, $class->name); @@ -1690,7 +1696,7 @@ private function getSelectConditionStatementColumnSQL($field, $assoc = null) { if (($property = $this->class->getProperty($field)) !== null) { $tableAlias = $this->getSQLTableAlias($property->getTableName()); - $columnName = $this->quoteStrategy->getColumnName($field, $this->class, $this->platform); + $columnName = $this->quoteStrategy->getColumnName($property, $this->platform); return [$tableAlias . '.' . $columnName]; } diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index 0b6103941c7..99e5a7d27d5 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -541,7 +541,7 @@ protected function getInsertColumnList() } } else if ($this->class->name != $this->class->rootEntityName || ! $this->class->isIdGeneratorIdentity() || $this->class->identifier[0] !== $name) { - $columns[] = $this->quoteStrategy->getColumnName($name, $this->class, $this->platform); + $columns[] = $this->quoteStrategy->getColumnName($property, $this->platform); $this->columnTypes[$name] = $property->getType(); } } diff --git a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php index bf0f7a4ec04..91b0768493c 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php @@ -70,9 +70,11 @@ public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) foreach ($owningAssoc['targetToSourceKeyColumns'] as $targetColumn => $sourceColumn) { if ($first) $first = false; else $sql .= ' AND '; + $property = $class->getProperty($class->fieldNames[$targetColumn]); + $sql .= $targetTableAlias . '.' . $sourceColumn . ' = ' - . $sourceTableAlias . '.' . $quoteStrategy->getColumnName($class->fieldNames[$targetColumn], $class, $platform); + . $sourceTableAlias . '.' . $quoteStrategy->getColumnName($property, $platform); } } else { // many-to-many $targetClass = $sqlWalker->getEntityManager()->getClassMetadata($assoc['targetEntity']); @@ -96,9 +98,8 @@ public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) foreach ($joinColumns as $joinColumn) { if ($first) $first = false; else $sql .= ' AND '; - $sourceColumnName = $quoteStrategy->getColumnName( - $class->fieldNames[$joinColumn['referencedColumnName']], $class, $platform - ); + $property = $class->getProperty($class->fieldNames[$joinColumn['referencedColumnName']]); + $sourceColumnName = $quoteStrategy->getColumnName($property, $platform); $sql .= $joinTableAlias . '.' . $joinColumn['name'] . ' = ' diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index c730e7e516e..e0a39495a37 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -411,7 +411,8 @@ private function _generateOrderedCollectionOrderByItems() $persister = $this->em->getUnitOfWork()->getEntityPersister($qComp['metadata']->name); foreach ($qComp['relation']['orderBy'] as $fieldName => $orientation) { - $columnName = $this->quoteStrategy->getColumnName($fieldName, $qComp['metadata'], $this->platform); + $property = $qComp['metadata']->getProperty($fieldName); + $columnName = $this->quoteStrategy->getColumnName($property, $this->platform); $tableName = ($qComp['metadata']->isInheritanceTypeJoined()) ? $persister->getOwningTable($fieldName) : $qComp['metadata']->getTableName(); @@ -654,14 +655,15 @@ public function walkPathExpression($pathExpr) switch ($pathExpr->type) { case AST\PathExpression::TYPE_STATE_FIELD: $fieldName = $pathExpr->field; - $dqlAlias = $pathExpr->identificationVariable; - $class = $this->queryComponents[$dqlAlias]['metadata']; + $dqlAlias = $pathExpr->identificationVariable; + $class = $this->queryComponents[$dqlAlias]['metadata']; + $property = $class->getProperty($fieldName); if ($this->useSqlTableAliases) { $sql .= $this->walkIdentificationVariable($dqlAlias, $fieldName) . '.'; } - $sql .= $this->quoteStrategy->getColumnName($fieldName, $class, $this->platform); + $sql .= $this->quoteStrategy->getColumnName($property, $this->platform); break; case AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION: @@ -1288,7 +1290,7 @@ public function walkSelectExpression($selectExpression) $col = sprintf( '%s.%s', $this->getSQLTableAlias($property->getTableName(), $dqlAlias), - $this->quoteStrategy->getColumnName($fieldName, $class, $this->platform) + $this->quoteStrategy->getColumnName($property, $this->platform) ); $sql .= sprintf( @@ -1383,7 +1385,7 @@ public function walkSelectExpression($selectExpression) $col = sprintf( '%s.%s', $this->getSQLTableAlias($property->getTableName(), $dqlAlias), - $this->quoteStrategy->getColumnName($fieldName, $class, $this->platform) + $this->quoteStrategy->getColumnName($property, $this->platform) ); $sqlParts[] = sprintf( @@ -1414,7 +1416,7 @@ public function walkSelectExpression($selectExpression) $col = sprintf( '%s.%s', $this->getSQLTableAlias($property->getTableName(), $dqlAlias), - $this->quoteStrategy->getColumnName($fieldName, $subClass, $this->platform) + $this->quoteStrategy->getColumnName($property, $this->platform) ); $sqlParts[] = sprintf( @@ -1903,7 +1905,8 @@ public function walkCollectionMemberExpression($collMemberExpr) $sqlParts = []; foreach ($owningAssoc['targetToSourceKeyColumns'] as $targetColumn => $sourceColumn) { - $targetColumn = $this->quoteStrategy->getColumnName($class->fieldNames[$targetColumn], $class, $this->platform); + $property = $class->getProperty($class->fieldNames[$targetColumn]); + $targetColumn = $this->quoteStrategy->getColumnName($property, $this->platform); $sqlParts[] = $sourceTableAlias . '.' . $targetColumn . ' = ' . $targetTableAlias . '.' . $sourceColumn; } @@ -1937,9 +1940,11 @@ public function walkCollectionMemberExpression($collMemberExpr) $joinSqlParts = []; foreach ($joinColumns as $joinColumn) { - $targetColumn = $this->quoteStrategy->getColumnName($targetClass->fieldNames[$joinColumn['referencedColumnName']], $targetClass, $this->platform); + $property = $class->getProperty($targetClass->fieldNames[$joinColumn['referencedColumnName']]); + $sourceColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); + $targetColumn = $this->quoteStrategy->getColumnName($property, $this->platform); - $joinSqlParts[] = $joinTableAlias . '.' . $joinColumn['name'] . ' = ' . $targetTableAlias . '.' . $targetColumn; + $joinSqlParts[] = $joinTableAlias . '.' . $sourceColumn . ' = ' . $targetTableAlias . '.' . $targetColumn; } $sql .= implode(' AND ', $joinSqlParts); @@ -1949,9 +1954,11 @@ public function walkCollectionMemberExpression($collMemberExpr) $sqlParts = []; foreach ($joinColumns as $joinColumn) { - $targetColumn = $this->quoteStrategy->getColumnName($class->fieldNames[$joinColumn['referencedColumnName']], $class, $this->platform); + $property = $class->getProperty($class->fieldNames[$joinColumn['referencedColumnName']]); + $sourceColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); + $targetColumn = $this->quoteStrategy->getColumnName($property, $this->platform); - $sqlParts[] = $joinTableAlias . '.' . $joinColumn['name'] . ' = ' . $sourceTableAlias . '.' . $targetColumn; + $sqlParts[] = $joinTableAlias . '.' . $sourceColumn . ' = ' . $sourceTableAlias . '.' . $targetColumn; } foreach ($this->quoteStrategy->getIdentifierColumnNames($targetClass, $this->platform) as $targetColumnName) { diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index f37c6459728..a18112760fc 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -1646,14 +1646,15 @@ protected function generateFieldMappingPropertyDocBlock(FieldMetadata $propertyM . ($propertyMetadata->isNullable() ? '|null' : ''); if ($this->generateAnnotations) { + $column = []; $lines[] = $this->spaces . ' *'; - $column = ['type="' . $fieldType . '"']; - if ($propertyMetadata->getColumnName()) { $column[] = 'name="' . $propertyMetadata->getColumnName() . '"'; } + $column[] = 'type="' . $fieldType . '"'; + if (is_int($propertyMetadata->getLength())) { $column[] = 'length=' . $propertyMetadata->getLength(); } diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php index 559c6468226..ba6cee76d03 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php @@ -441,6 +441,7 @@ private function recreateInnerSql( */ private function generateSqlAliasReplacements() : array { + $platform = $this->em->getConnection()->getDatabasePlatform(); $searchPatterns = $replacements = []; // Generate search patterns for each field's path expression in the order by clause @@ -455,7 +456,7 @@ private function generateSqlAliasReplacements() : array // Get the SQL table alias for the entity and field and the column name as will appear in the select list $tableAlias = $this->getSQLTableAlias($property->getTableName(), $dqlAliasForFieldAlias); - $columnName = $this->quoteStrategy->getColumnName($fieldName, $class, $this->em->getConnection()->getDatabasePlatform()); + $columnName = $this->quoteStrategy->getColumnName($property, $platform); // Compose search and replace patterns $searchPatterns[] = \sprintf(self::ORDER_BY_PATH_EXPRESSION, $tableAlias, $columnName); diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index c6297918c3d..279e2ebd19b 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -193,7 +193,7 @@ public function getSchemaFromMetadata(array $classes) foreach ($class->getProperties() as $fieldName => $property) { if ( ! ($property instanceof InheritedFieldMetadata)) { - $columnName = $this->quoteStrategy->getColumnName($fieldName, $class, $this->platform); + $columnName = $this->quoteStrategy->getColumnName($property, $this->platform); $this->gatherColumn($class, $property, $table); @@ -253,7 +253,7 @@ public function getSchemaFromMetadata(array $classes) foreach ($class->identifier as $identifierField) { if (($property = $class->getProperty($identifierField)) !== null) { - $pkColumns[] = $this->quoteStrategy->getColumnName($identifierField, $class, $this->platform); + $pkColumns[] = $this->quoteStrategy->getColumnName($property, $this->platform); continue; } @@ -406,7 +406,7 @@ private function gatherColumns($class, Table $table) $this->gatherColumn($class, $property, $table); if ($property->isPrimaryKey()) { - $pkColumns[] = $this->quoteStrategy->getColumnName($property->getFieldName(), $class, $this->platform); + $pkColumns[] = $this->quoteStrategy->getColumnName($property, $this->platform); } } } @@ -478,7 +478,7 @@ private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Tabl $options['autoincrement'] = false; } - $quotedColumnName = $this->quoteStrategy->getColumnName($fieldName, $classMetadata, $this->platform); + $quotedColumnName = $this->quoteStrategy->getColumnName($fieldMetadata, $this->platform); if ($table->hasColumn($quotedColumnName)) { // required in some inheritance scenarios diff --git a/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionCriteriaTest.php b/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionCriteriaTest.php index d0add27cbcf..ae0400c208c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionCriteriaTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionCriteriaTest.php @@ -4,6 +4,7 @@ use Doctrine\Common\Collections\Criteria; use Doctrine\ORM\LazyCriteriaCollection; +use Doctrine\ORM\Mapping\DefaultQuoteStrategy; use Doctrine\Tests\Models\Quote\Group; use Doctrine\Tests\Models\Quote\User as QuoteUser; use Doctrine\Tests\Models\Tweet\Tweet; @@ -18,8 +19,11 @@ class PersistentCollectionCriteriaTest extends OrmFunctionalTestCase { protected function setUp() { + $this->enableQuotes = true; + $this->useModelSet('tweet'); $this->useModelSet('quote'); + parent::setUp(); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC142Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC142Test.php index 27dcb38f133..03a7759c67b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC142Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC142Test.php @@ -15,6 +15,8 @@ class DDC142Test extends \Doctrine\Tests\OrmFunctionalTestCase { protected function setUp() { + $this->enableQuotes = true; + parent::setUp(); try { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php index 6eb544bd73b..fe64e7e9b72 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php @@ -9,6 +9,8 @@ class DDC1719Test extends \Doctrine\Tests\OrmFunctionalTestCase { protected function setUp() { + $this->enableQuotes = true; + parent::setUp(); $this->_schemaTool->createSchema( diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1843Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1843Test.php index a3f4e92ed98..69a1aa6b59c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1843Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1843Test.php @@ -13,9 +13,10 @@ */ class DDC1843Test extends \Doctrine\Tests\OrmFunctionalTestCase { - protected function setUp() { + $this->enableQuotes = true; + parent::setUp(); try { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1885Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1885Test.php index 0dd0df2c24c..2c637e4b59f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1885Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1885Test.php @@ -12,7 +12,6 @@ */ class DDC1885Test extends \Doctrine\Tests\OrmFunctionalTestCase { - /** * @var \Doctrine\Tests\Models\Quote\User */ @@ -20,6 +19,8 @@ class DDC1885Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { + $this->enableQuotes = true; + parent::setUp(); try { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php index 5107f0b716c..cd938c28b24 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php @@ -18,6 +18,8 @@ class DDC2825Test extends \Doctrine\Tests\OrmFunctionalTestCase */ protected function setUp() { + $this->enableQuotes = true; + parent::setUp(); $platform = $this->_em->getConnection()->getDatabasePlatform(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php index 16f531c9b30..d457254a301 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php @@ -6,6 +6,8 @@ class DDC832Test extends \Doctrine\Tests\OrmFunctionalTestCase { public function setUp() { + $this->enableQuotes = true; + parent::setUp(); $platform = $this->_em->getConnection()->getDatabasePlatform(); @@ -34,6 +36,7 @@ public function tearDown() $platform = $this->_em->getConnection()->getDatabasePlatform(); $sm = $this->_em->getConnection()->getSchemaManager(); + $sm->dropTable($platform->quoteIdentifier('TREE_INDEX')); $sm->dropTable($platform->quoteIdentifier('INDEX')); $sm->dropTable($platform->quoteIdentifier('LIKE')); diff --git a/tests/Doctrine/Tests/ORM/Mapping/AnsiQuoteStrategyTest.php b/tests/Doctrine/Tests/ORM/Mapping/AnsiQuoteStrategyTest.php index a3677978b02..b70beba1ce3 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AnsiQuoteStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AnsiQuoteStrategyTest.php @@ -18,7 +18,6 @@ */ class AnsiQuoteStrategyTest extends OrmTestCase { - /** * @var \Doctrine\ORM\Mapping\DefaultQuoteStrategy */ @@ -53,11 +52,11 @@ private function createClassMetadata($className) public function testGetColumnName() { $class = $this->createClassMetadata(CmsUser::class); - $class->addProperty('id', Type::getType('string'), ['id' => true]); - $class->addProperty('name', Type::getType('string')); + $idProperty = $class->addProperty('id', Type::getType('string'), ['id' => true]); + $nameProperty = $class->addProperty('name', Type::getType('string')); - self::assertEquals('id' ,$this->strategy->getColumnName('id', $class, $this->platform)); - self::assertEquals('name' ,$this->strategy->getColumnName('name', $class, $this->platform)); + self::assertEquals('id' ,$this->strategy->getColumnName($idProperty, $this->platform)); + self::assertEquals('name' ,$this->strategy->getColumnName($nameProperty, $this->platform)); } public function testGetTableName() @@ -65,7 +64,8 @@ public function testGetTableName() $class = $this->createClassMetadata(CmsUser::class); $class->setPrimaryTable(['name'=>'cms_user']); - self::assertEquals('cms_user' ,$this->strategy->getTableName($class, $this->platform)); + + self::assertEquals('cms_user', $this->strategy->getTableName($class, $this->platform)); } public function testJoinTableName() diff --git a/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php b/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php index a02aea87ea7..8a7fe6c3a4f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php @@ -43,6 +43,7 @@ protected function setUp() private function createClassMetadata($className) { $cm = new ClassMetadata($className); + $cm->initializeReflection(new RuntimeReflectionService()); return $cm; @@ -65,22 +66,27 @@ public function testConfiguration() public function testGetColumnName() { $cm = $this->createClassMetadata(CmsUser::class); - $cm->addProperty('name', Type::getType('string'), ['columnName' => 'name']); - $cm->addProperty('id', Type::getType('string')); - self::assertEquals('id' ,$this->strategy->getColumnName('id', $cm, $this->platform)); - self::assertEquals('"name"' ,$this->strategy->getColumnName('name', $cm, $this->platform)); + $idProperty = $cm->addProperty('id', Type::getType('string')); + $nameProperty = $cm->addProperty('name', Type::getType('string'), ['columnName' => 'name']); + + self::assertEquals('id', $this->strategy->getColumnName($idProperty, $this->platform)); + self::assertEquals('"name"', $this->strategy->getColumnName($nameProperty, $this->platform)); } public function testGetTableName() { $cm = $this->createClassMetadata(CmsUser::class); + $cm->setPrimaryTable(['name'=>'cms_user']); + self::assertEquals('"cms_user"', $this->strategy->getTableName($cm, $this->platform)); $cm = new ClassMetadata(CmsUser::class); - $cm->initializeReflection(new RuntimeReflectionService()); + + $cm->initializeReflection(new RuntimeReflectionService); $cm->setPrimaryTable(['name'=>'cms_user']); + self::assertEquals('cms_user', $this->strategy->getTableName($cm, $this->platform)); } diff --git a/tests/Doctrine/Tests/OrmFunctionalTestCase.php b/tests/Doctrine/Tests/OrmFunctionalTestCase.php index bcdb783c533..a5f9c682f49 100644 --- a/tests/Doctrine/Tests/OrmFunctionalTestCase.php +++ b/tests/Doctrine/Tests/OrmFunctionalTestCase.php @@ -12,6 +12,8 @@ use Doctrine\ORM\Cache\Logging\StatisticsCacheLogger; use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManager; +use Doctrine\ORM\Mapping\AnsiQuoteStrategy; +use Doctrine\ORM\Mapping\DefaultQuoteStrategy; use Doctrine\ORM\Tools\DebugUnitOfWorkListener; use Doctrine\ORM\Tools\SchemaTool; use Doctrine\Tests\DbalTypes\Rot13Type; @@ -700,6 +702,8 @@ protected function _getEntityManager(Connection $connection = null) { //FIXME: two different configs! $conn and the created entity manager have // different configs. $config = new Configuration(); + $config = new \Doctrine\ORM\Configuration(); + $config->setQuoteStrategy($this->enableQuotes ? new DefaultQuoteStrategy() : new AnsiQuoteStrategy()); $config->setMetadataCacheImpl(self::$_metadataCacheImpl); $config->setQueryCacheImpl(self::$_queryCacheImpl); $config->setProxyDir(__DIR__ . '/Proxies'); diff --git a/tests/Doctrine/Tests/OrmTestCase.php b/tests/Doctrine/Tests/OrmTestCase.php index 4b767ab5f00..d0a31de105f 100644 --- a/tests/Doctrine/Tests/OrmTestCase.php +++ b/tests/Doctrine/Tests/OrmTestCase.php @@ -8,6 +8,8 @@ use Doctrine\DBAL\DriverManager; use Doctrine\ORM\Cache\CacheConfiguration; use Doctrine\ORM\Cache\DefaultCacheFactory; +use Doctrine\ORM\Mapping\AnsiQuoteStrategy; +use Doctrine\ORM\Mapping\DefaultQuoteStrategy; use Doctrine\ORM\Configuration; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; use Doctrine\Tests\Mocks; @@ -31,6 +33,11 @@ abstract class OrmTestCase extends DoctrineTestCase */ private static $_queryCacheImpl = null; + /** + * @var bool + */ + protected $enableQuotes = false; + /** * @var bool */ @@ -124,6 +131,7 @@ protected function _getTestEntityManager($conn = null, $conf = null, $eventManag $config = new Configuration(); + $config->setQuoteStrategy($this->enableQuotes ? new DefaultQuoteStrategy() : new AnsiQuoteStrategy()); $config->setMetadataCacheImpl($metadataCache); $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver([], true)); $config->setQueryCacheImpl(self::getSharedQueryCacheImpl()); From 8eb2435aebdd7001a11a48b0e57df9a8496407ad Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Tue, 31 May 2016 23:22:26 +0000 Subject: [PATCH 035/275] Merged FieldMetadata and InheritedFieldMetadata into a single unit --- .../ORM/Mapping/Builder/FieldBuilder.php | 2 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 21 +++------ .../ORM/Mapping/Driver/AnnotationDriver.php | 4 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 2 +- .../ORM/Mapping/Driver/YamlDriver.php | 2 +- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 32 +++++++++---- .../ORM/Mapping/InheritedFieldMetadata.php | 44 ------------------ lib/Doctrine/ORM/Mapping/PropertyMetadata.php | 5 +++ .../Entity/BasicEntityPersister.php | 8 +--- .../Entity/JoinedSubclassPersister.php | 45 +++++++------------ .../Entity/SingleTablePersister.php | 3 +- .../Query/Exec/MultiTableUpdateExecutor.php | 3 +- lib/Doctrine/ORM/Query/SqlWalker.php | 5 +-- lib/Doctrine/ORM/Tools/EntityGenerator.php | 10 ++--- lib/Doctrine/ORM/Tools/SchemaTool.php | 9 ++-- .../ORM/Functional/Ticket/DDC1695Test.php | 10 ++++- .../ORM/Mapping/AbstractMappingDriverTest.php | 2 +- .../Mapping/BasicInheritanceMappingTest.php | 5 +-- .../Tests/ORM/Mapping/ClassMetadataTest.php | 2 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 2 +- 20 files changed, 82 insertions(+), 134 deletions(-) delete mode 100644 lib/Doctrine/ORM/Mapping/InheritedFieldMetadata.php diff --git a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php index 57ac155dc5a..cf7bba2eccb 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php @@ -298,7 +298,7 @@ public function build() $property = $cm->addProperty($this->name, $this->type, $this->mapping); if ($this->version) { - $cm->setVersionMapping($property); + $cm->setVersionMetadata($property); } if ($this->sequenceDef) { diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 2e2e301abb3..fd38056b2cf 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -541,7 +541,7 @@ class ClassMetadata implements ClassMetadataInterface * * @var boolean */ - public $isVersioned; + public $isVersioned = false; /** * READ-ONLY: The name of the field which is used for versioning in optimistic locking (if any). @@ -1990,19 +1990,6 @@ public function isRootEntity() return $this->name == $this->rootEntityName; } - /** - * Checks whether a mapped field is inherited from an entity superclass. - * - * @param string $fieldName - * - * @return bool TRUE if the field is inherited, FALSE otherwise. - */ - public function isInheritedField($fieldName) - { - return isset($this->properties[$fieldName]) - && $this->properties[$fieldName] instanceof InheritedFieldMetadata; - } - /** * Checks whether a mapped association field is inherited from a superclass. * @@ -2181,7 +2168,8 @@ public function addProperty($fieldName, Type $type, array $mapping = []) public function addInheritedProperty(ClassMetadata $declaringClass, $fieldName) { $property = $declaringClass->getProperty($fieldName); - $inheritedProperty = new InheritedFieldMetadata($this, $declaringClass, $fieldName, $property->getType()); + $inheritedProperty = new FieldMetadata($this, $fieldName, $property->getType()); + if ( ! $declaringClass->isMappedSuperclass) { $inheritedProperty->setTableName($property->getTableName()); @@ -2191,6 +2179,7 @@ public function addInheritedProperty(ClassMetadata $declaringClass, $fieldName) // $inheritedProperty->setTableName($this->getTableName()); //} + $inheritedProperty->setDeclaringClass($declaringClass); $inheritedProperty->setColumnName($property->getColumnName()); $inheritedProperty->setColumnDefinition($property->getColumnDefinition()); $inheritedProperty->setPrimaryKey($property->isPrimaryKey()); @@ -2862,7 +2851,7 @@ public function setSequenceGeneratorDefinition(array $definition) * * @throws MappingException */ - public function setVersionMapping(FieldMetadata $fieldMetadata) + public function setVersionMetadata(FieldMetadata $fieldMetadata) { $this->isVersioned = true; $this->versionField = $fieldMetadata->getFieldName(); diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 3d2bfec53d4..e68ba6d4c1b 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -291,7 +291,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat /* @var $reflProperty \ReflectionProperty */ foreach ($class->getProperties() as $reflProperty) { if (($metadata->isMappedSuperclass && ! $reflProperty->isPrivate()) - || $metadata->isInheritedField($reflProperty->name) + || (($property = $metadata->getProperty($reflProperty->name)) !== null && $property->isInherited()) || $metadata->isInheritedAssociation($reflProperty->name) || $metadata->isInheritedEmbeddedClass($reflProperty->name)) { continue; @@ -343,7 +343,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $property = $metadata->addProperty($reflProperty->getName(), Type::getType($columnAnnot->type), $mapping); if ($this->reader->getPropertyAnnotation($reflProperty, Annotation\Version::class)) { - $metadata->setVersionMapping($property); + $metadata->setVersionMetadata($property); } // Check for SequenceGenerator/TableGenerator definition diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 2c64c7e35ec..b3d544c39f3 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -267,7 +267,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $property = $metadata->addProperty($fieldName, $fieldType, $fieldMapping); if (isset($fieldMapping['version'])) { - $metadata->setVersionMapping($property); + $metadata->setVersionMetadata($property); unset($fieldMapping['version']); } diff --git a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php index 559e1c0b96f..0361a5280a9 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php @@ -325,7 +325,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $property = $metadata->addProperty($fieldName, Type::getType($mapping['type']), $mapping); if (isset($mapping['version'])) { - $metadata->setVersionMapping($property); + $metadata->setVersionMetadata($property); } } } diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index e8a25cbc4d2..82126df4f6f 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -13,6 +13,11 @@ class FieldMetadata implements PropertyMetadata */ private $declaringClass; + /** + * @var ClassMetadata + */ + private $currentClass; + /** * @var \ReflectionProperty */ @@ -88,6 +93,7 @@ class FieldMetadata implements PropertyMetadata public function __construct(ClassMetadata $currentClass, $fieldName, Type $type) { $this->declaringClass = $currentClass; + $this->currentClass = $currentClass; $this->fieldName = $fieldName; $this->type = $type; } @@ -97,7 +103,7 @@ public function __construct(ClassMetadata $currentClass, $fieldName, Type $type) */ public function getCurrentClass() { - return $this->declaringClass; + return $this->currentClass; } /** @@ -108,6 +114,22 @@ public function getDeclaringClass() return $this->declaringClass; } + /** + * @param ClassMetadata $declaringClass + */ + public function setDeclaringClass(ClassMetadata $declaringClass) + { + $this->declaringClass = $declaringClass; + } + + /** + * {@inheritdoc} + */ + public function isInherited() + { + return $this->declaringClass !== $this->currentClass; + } + /** * {@inheritdoc} */ @@ -308,14 +330,6 @@ public function isUnique() return $this->isUnique; } - /** - * {@inheritdoc} - */ - public function isInherited() - { - return false; - } - /** * {@inheritdoc} */ diff --git a/lib/Doctrine/ORM/Mapping/InheritedFieldMetadata.php b/lib/Doctrine/ORM/Mapping/InheritedFieldMetadata.php deleted file mode 100644 index fae818cdd44..00000000000 --- a/lib/Doctrine/ORM/Mapping/InheritedFieldMetadata.php +++ /dev/null @@ -1,44 +0,0 @@ -currentClass = $currentClass; - } - - /** - * {@inheritdoc} - */ - public function getCurrentClass() - { - return $this->currentClass; - } - - /** - * {@inheritdoc} - */ - public function isInherited() - { - return false; - } -} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/PropertyMetadata.php b/lib/Doctrine/ORM/Mapping/PropertyMetadata.php index 4620f049e2b..7fe795a2810 100644 --- a/lib/Doctrine/ORM/Mapping/PropertyMetadata.php +++ b/lib/Doctrine/ORM/Mapping/PropertyMetadata.php @@ -12,6 +12,11 @@ interface PropertyMetadata */ public function getDeclaringClass(); + /** + * @return ClassMetadata + */ + public function getCurrentClass(); + /** * @param object $object * @param mixed $value diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index e7fbbf9eff7..7c26ffbcc34 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -27,7 +27,6 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\InheritedFieldMetadata; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\OptimisticLockException; use Doctrine\ORM\ORMException; @@ -1166,11 +1165,8 @@ protected final function getOrderBySQL(array $orderBy, $baseTableAlias) } if (($property = $this->class->getProperty($fieldName)) !== null) { - $class = ($property instanceof InheritedFieldMetadata) - ? $property->getDeclaringClass() - : $this->class; - $tableAlias = $this->getSQLTableAlias($class->getTableName()); - $columnName = $this->quoteStrategy->getColumnName($property, $this->platform); + $tableAlias = $this->getSQLTableAlias($property->getTableName()); + $columnName = $this->quoteStrategy->getColumnName($property, $this->platform); $orderByList[] = $tableAlias . '.' . $columnName . ' ' . $orientation; diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index 99e5a7d27d5..48230e62a7c 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -19,14 +19,10 @@ namespace Doctrine\ORM\Persisters\Entity; -use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\InheritedFieldMetadata; -use Doctrine\ORM\Query\ResultSetMapping; - +use Doctrine\Common\Collections\Criteria; use Doctrine\DBAL\LockMode; use Doctrine\DBAL\Types\Type; - -use Doctrine\Common\Collections\Criteria; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Utility\PersisterHelper; /** @@ -78,9 +74,7 @@ private function getVersionedClassMetadata() { $property = $this->class->getProperty($this->class->versionField); - return ($property instanceof InheritedFieldMetadata) - ? $property->getDeclaringClass() - : $this->class; + return $property->getDeclaringClass(); } /** @@ -98,15 +92,14 @@ public function getOwningTable($fieldName) return $this->owningTableMap[$fieldName]; } - $property = $this->class->getProperty($fieldName); - $isInherited = $property instanceof InheritedFieldMetadata; + $property = $this->class->getProperty($fieldName); switch (true) { case isset($this->class->associationMappings[$fieldName]['inherited']): $cm = $this->em->getClassMetadata($this->class->associationMappings[$fieldName]['inherited']); break; - case $isInherited: + case ($property && $property->isInherited()): $cm = $property->getDeclaringClass(); break; @@ -115,8 +108,8 @@ public function getOwningTable($fieldName) break; } - $tableName = $cm->getTableName(); - $quotedTableName = $this->quoteStrategy->getTableName($cm, $this->platform); + $tableName = $cm->getTableName(); + $quotedTableName = $this->quoteStrategy->getTableName($cm, $this->platform); $this->owningTableMap[$fieldName] = $tableName; $this->quotedTableMap[$tableName] = $quotedTableName; @@ -204,7 +197,7 @@ public function executeInserts() : []; foreach ((array) $id as $idName => $idVal) { - $type = isset($this->columnTypes[$idName]) ? $this->columnTypes[$idName] : Type::STRING; + $type = isset($this->columnTypes[$idName]) ? $this->columnTypes[$idName] : Type::getType('string'); $stmt->bindValue($paramIndex++, $idVal, $type); } @@ -241,16 +234,11 @@ public function update($entity) return; } - if (($isVersioned = $this->class->isVersioned) === false) { - return; - } - - $versionedClass = $this->getVersionedClassMetadata(); - $versionedTable = $versionedClass->getTableName(); + $isVersioned = $this->class->isVersioned; foreach ($updateData as $tableName => $data) { $tableName = $this->quotedTableMap[$tableName]; - $versioned = $isVersioned && $versionedTable === $tableName; + $versioned = $isVersioned && $this->getVersionedClassMetadata()->getTableName() === $tableName; $this->updateTable($entity, $tableName, $data, $versioned); } @@ -258,6 +246,9 @@ public function update($entity) // Make sure the table with the version column is updated even if no columns on that // table were affected. if ($isVersioned) { + $versionedClass = $this->getVersionedClassMetadata(); + $versionedTable = $versionedClass->getTableName(); + if ( ! isset($updateData[$versionedTable])) { $tableName = $this->quoteStrategy->getTableName($versionedClass, $this->platform); @@ -453,11 +444,7 @@ protected function getSelectColumnsSQL() // Add regular columns foreach ($this->class->getProperties() as $fieldName => $property) { - $class = ($property instanceof InheritedFieldMetadata) - ? $property->getDeclaringClass() - : $this->class; - - $columnList[] = $this->getSelectColumnSQL($fieldName, $class); + $columnList[] = $this->getSelectColumnSQL($fieldName, $property->getDeclaringClass()); } // Add foreign key columns @@ -484,7 +471,7 @@ protected function getSelectColumnsSQL() // Add subclass columns foreach ($subClass->getProperties() as $fieldName => $property) { - if ($property instanceof InheritedFieldMetadata) { + if ($property->isInherited()) { continue; } @@ -525,7 +512,7 @@ protected function getInsertColumnList() foreach ($this->class->reflFields as $name => $field) { $property = $this->class->getProperty($name); - if (($property instanceof InheritedFieldMetadata) + if (($property && $property->isInherited()) || isset($this->class->associationMappings[$name]['inherited']) || ($this->class->isVersioned && $this->class->versionField === $name) /*|| isset($this->class->embeddedClasses[$name])*/) { diff --git a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php index 64bdd728d5c..5101daab045 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php @@ -21,7 +21,6 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Common\Collections\Criteria; -use Doctrine\ORM\Mapping\InheritedFieldMetadata; use Doctrine\ORM\Utility\PersisterHelper; /** @@ -75,7 +74,7 @@ protected function getSelectColumnsSQL() // Regular columns foreach ($subClass->getProperties() as $fieldName => $property) { - if ($property instanceof InheritedFieldMetadata) { + if ($property->isInherited()) { continue; } diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php index 34dfd7c0d28..0138aee0a2a 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php @@ -20,7 +20,6 @@ namespace Doctrine\ORM\Query\Exec; use Doctrine\DBAL\Connection; -use Doctrine\ORM\Mapping\InheritedFieldMetadata; use Doctrine\ORM\Query\AST; use Doctrine\ORM\Query\ParameterTypeInferer; use Doctrine\ORM\Utility\PersisterHelper; @@ -111,7 +110,7 @@ public function __construct(AST\Node $AST, $sqlWalker) foreach ($updateItems as $updateItem) { $field = $updateItem->pathExpression->field; - if ((($property = $class->getProperty($field)) !== null && ! ($property instanceof InheritedFieldMetadata)) || + if ((($property = $class->getProperty($field)) !== null && ! $property->isInherited()) || (isset($class->associationMappings[$field]) && ! isset($class->associationMappings[$field]['inherited']))) { $newValue = $updateItem->newValue; diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index e0a39495a37..34845e6dad8 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -22,7 +22,6 @@ use Doctrine\DBAL\LockMode; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\InheritedFieldMetadata; use Doctrine\ORM\OptimisticLockException; use Doctrine\ORM\Query; use Doctrine\ORM\Utility\PersisterHelper; @@ -637,7 +636,7 @@ public function walkIdentificationVariable($identificationVariable, $fieldName = $property = $class->getProperty($fieldName); - if ($class->isInheritanceTypeJoined() && $property instanceof InheritedFieldMetadata) { + if ($class->isInheritanceTypeJoined() && $property->isInherited()) { $class = $property->getDeclaringClass(); } @@ -1408,7 +1407,7 @@ public function walkSelectExpression($selectExpression) $subClass = $this->em->getClassMetadata($subClassName); foreach ($subClass->getProperties() as $fieldName => $property) { - if ($property instanceof InheritedFieldMetadata || ($partialFieldSet && !in_array($fieldName, $partialFieldSet))) { + if ($property->isInherited() || ($partialFieldSet && !in_array($fieldName, $partialFieldSet))) { continue; } diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index a18112760fc..d2710a4c1c9 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -22,10 +22,8 @@ use Doctrine\Common\Collections\Collection; use Doctrine\Common\Util\Inflector; use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Mapping\FieldMetadata; -use Doctrine\ORM\Mapping\InheritedFieldMetadata; -use Doctrine\ORM\Mapping\PropertyMetadata; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; /** * Generic class used to generate PHP5 entity classes from ClassMetadata instances. @@ -1316,7 +1314,7 @@ protected function generateEntityFieldMappingProperties(ClassMetadata $metadata) foreach ($metadata->getProperties() as $fieldName => $property) { if ($this->hasProperty($fieldName, $metadata) || - $property instanceof InheritedFieldMetadata /*|| + $property->isInherited() /*|| ( isset($fieldMapping['declaredField']) && isset($metadata->embeddedClasses[$fieldMapping['declaredField']]) @@ -1830,11 +1828,11 @@ protected function getIdGeneratorTypeString($type) } /** - * @param PropertyMetadata $property + * @param FieldMetadata $property * * @return string|null */ - private function nullableFieldExpression(PropertyMetadata $property) + private function nullableFieldExpression(FieldMetadata $property) { return $property->isNullable() ? 'null' : null; } diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 279e2ebd19b..55c453e2c40 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -29,8 +29,6 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FieldMetadata; -use Doctrine\ORM\Mapping\InheritedFieldMetadata; -use Doctrine\ORM\Mapping\PropertyMetadata; use Doctrine\ORM\ORMException; use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs; use Doctrine\ORM\Tools\Event\GenerateSchemaTableEventArgs; @@ -192,7 +190,7 @@ public function getSchemaFromMetadata(array $classes) $pkColumns = []; foreach ($class->getProperties() as $fieldName => $property) { - if ( ! ($property instanceof InheritedFieldMetadata)) { + if (! $property->isInherited()) { $columnName = $this->quoteStrategy->getColumnName($property, $this->platform); $this->gatherColumn($class, $property, $table); @@ -215,7 +213,7 @@ public function getSchemaFromMetadata(array $classes) foreach ($class->identifier as $identifierField) { $idProperty = $class->getProperty($identifierField); - if ($idProperty instanceof InheritedFieldMetadata) { + if ($idProperty->isInherited()) { $column = $this->gatherColumn($class, $idProperty, $table); $columnName = $column->getQuotedName($this->platform); @@ -226,6 +224,7 @@ public function getSchemaFromMetadata(array $classes) $inheritedKeyColumns[] = $columnName; } } + if ( ! empty($inheritedKeyColumns)) { // Add a FK constraint on the ID column $table->addForeignKeyConstraint( @@ -399,7 +398,7 @@ private function gatherColumns($class, Table $table) $pkColumns = []; foreach ($class->getProperties() as $property) { - if ($class->isInheritanceTypeSingleTable() && $property instanceof InheritedFieldMetadata) { + if ($class->isInheritanceTypeSingleTable() && $property->isInherited()) { continue; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php index cdc2d22561b..2a1ac586103 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php @@ -7,11 +7,19 @@ */ class DDC1695Test extends \Doctrine\Tests\OrmFunctionalTestCase { - public function testIssue() + public function setUp() { + $this->enableQuotes = true; + + parent::setUp(); + if ($this->_em->getConnection()->getDatabasePlatform()->getName() != "sqlite") { $this->markTestSkipped("Only with sqlite"); } + } + + public function testIssue() + { $dql = "SELECT n.smallText, n.publishDate FROM " . __NAMESPACE__ . "\\DDC1695News n"; $sql = $this->_em->createQuery($dql)->getSQL(); diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 08c53d49785..fc7f6ba4246 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -1239,7 +1239,7 @@ public static function loadMetadata(ClassMetadata $metadata) $property = $metadata->addProperty('version', Type::getType('integer')); - $metadata->setVersionMapping($property); + $metadata->setVersionMetadata($property); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); $metadata->mapOneToOne( diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index 72a59b531e1..35a4d3a43d8 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -8,7 +8,6 @@ use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\MappingException; -use Doctrine\ORM\Mapping\InheritedFieldMetadata; use Doctrine\Tests\Models\DDC869\DDC869ChequePayment; use Doctrine\Tests\Models\DDC869\DDC869CreditCardPayment; use Doctrine\Tests\Models\DDC869\DDC869Payment; @@ -61,8 +60,8 @@ public function testGetMetadataForSubclassWithMappedSuperclass() self::assertNotNull($class->getProperty('mapped1')); self::assertNotNull($class->getProperty('mapped2')); - self::assertNotInstanceOf(InheritedFieldMetadata::class, $class->getProperty('mapped1')); - self::assertNotInstanceOf(InheritedFieldMetadata::class, $class->getProperty('mapped2')); + self::assertFalse($class->getProperty('mapped1')->isInherited()); + self::assertFalse($class->getProperty('mapped2')->isInherited()); self::assertNull($class->getProperty('transient')); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index b41d2676f65..4a43722fad2 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -220,7 +220,7 @@ public function testSetInvalidVersionMapping_ThrowsException() $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - $metadata->setVersionMapping($property); + $metadata->setVersionMetadata($property); } public function testGetSingleIdentifierFieldName_MultipleIdentifierEntity_ThrowsException() diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index d6be91c4249..e53b8957cc2 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -55,7 +55,7 @@ ] ); -$metadata->setVersionMapping($metadata->addProperty('version', Type::getType('integer'))); +$metadata->setVersionMetadata($metadata->addProperty('version', Type::getType('integer'))); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); From 8d0450e6a57a5ec61ec3f9b4951ca7ea50628644 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Thu, 2 Jun 2016 10:40:54 +0000 Subject: [PATCH 036/275] Quick improvements --- UPGRADE.md | 7 +++ .../ORM/Mapping/AnsiQuoteStrategy.php | 2 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 46 ++++--------------- .../ORM/Mapping/DefaultQuoteStrategy.php | 9 ++-- .../ORM/Mapping/Driver/AnnotationDriver.php | 4 +- .../ORM/Mapping/Driver/DatabaseDriver.php | 6 +-- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 4 +- .../ORM/Mapping/Driver/YamlDriver.php | 4 +- .../Collection/ManyToManyPersister.php | 12 ++--- lib/Doctrine/ORM/UnitOfWork.php | 21 ++++----- .../ORM/Functional/Ticket/DDC1707Test.php | 11 +++-- .../ORM/Functional/Ticket/DDC2825Test.php | 9 ++-- .../Tests/ORM/Mapping/ClassMetadataTest.php | 5 +- ...e.Tests.Models.Company.CompanyContract.php | 2 +- 14 files changed, 61 insertions(+), 81 deletions(-) diff --git a/UPGRADE.md b/UPGRADE.md index 475f957e2c0..ff1137d4897 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -2,11 +2,18 @@ ## BC Break: Removed methods in ``ClassMetadata`` +* ``ClassMetadata::getTypeOfField`` (to be removed, part of Common API) + +## BC Break: Removed methods in ``ClassMetadata`` + +* ``ClassMetadata::setTableName`` => Use ``ClassMetadata::setPrimaryTable(['name' => ...])`` * ``ClassMetadata::getFieldMapping`` => Use ``ClassMetadata::getProperty()`` and its methods * ``ClassMetadata::getQuotedColumnName`` => Use ``ClassMetadata::getProperty()::getQuotedColumnName()`` * ``ClassMetadata::getQuotedTableName`` * ``ClassMetadata::getQuotedJoinTableName`` * ``ClassMetadata::getQuotedIdentifierColumnNames`` +* ``ClassMetadata::invokeLifecycleCallbacks`` +* ``ClassMetadata::isInheritedField`` => Use ``ClassMetadata::getProperty()::isInherited()`` * ``ClassMetadata::isUniqueField`` => Use ``ClassMetadata::getProperty()::isUnique()`` * ``ClassMetadata::isNullable`` => Use ``ClassMetadata::getProperty()::isNullable()`` * ``ClassMetadata::getTypeOfColumn()`` => Use ``PersisterHelper::getTypeOfColumn()`` diff --git a/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php b/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php index 56b89cc6e84..e6c83ecfd93 100644 --- a/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php @@ -43,7 +43,7 @@ public function getColumnName(FieldMetadata $fieldMetadata, AbstractPlatform $pl */ public function getTableName(ClassMetadata $class, AbstractPlatform $platform) { - return $class->table['name']; + return $class->getTableName(); } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index fd38056b2cf..67ac795efd4 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1830,8 +1830,13 @@ public function getSchemaName() */ public function getTemporaryIdTableName() { + $schema = empty($this->getSchemaName()) + ? '' + : $this->getSchemaName() . '_' + ; + // replace dots with underscores because PostgreSQL creates temporary tables in a special schema - return str_replace('.', '_', $this->getTableName() . '_id_tmp'); + return $schema . $this->getTableName() . '_id_tmp'; } /** @@ -2014,20 +2019,6 @@ public function isInheritedEmbeddedClass($fieldName) //return isset($this->embeddedClasses[$fieldName]['inherited']); } - /** - * Sets the name of the primary table the class is mapped to. - * - * @param string $tableName The table name. - * - * @return void - * - * @deprecated Use {@link setPrimaryTable}. - */ - public function setTableName($tableName) - { - $this->table['name'] = $tableName; - } - /** * Sets the primary table definition. The provided array supports the * following structure: @@ -2114,8 +2105,6 @@ public function addProperty($fieldName, Type $type, array $mapping = []) { $property = new FieldMetadata($this, $fieldName, $type); - assert(! isset($this->properties[$fieldName]), MappingException::duplicateProperty($property)); - $property->setTableName(! $this->isMappedSuperclass ? $this->getTableName() : null); $property->setColumnName($mapping['columnName'] ?? $this->namingStrategy->propertyToColumnName($fieldName, $this->name)); $property->setPrimaryKey(isset($mapping['id']) && $mapping['id']); @@ -2127,14 +2116,14 @@ public function addProperty($fieldName, Type $type, array $mapping = []) $property->setPrecision($mapping['precision'] ?? null); $property->setOptions($mapping['options'] ?? []); + assert(! isset($this->properties[$fieldName]), MappingException::duplicateProperty($property)); + // Check for already declared column if (isset($this->fieldNames[$property->getColumnName()]) || ($this->discriminatorColumn != null && $this->discriminatorColumn['name'] === $property->getColumnName())) { throw MappingException::duplicateColumnName($this->name, $property->getColumnName()); } - $this->fieldNames[$property->getColumnName()] = $fieldName; - // Complete id mapping if (isset($mapping['id']) && $mapping['id']) { assert($this->versionField !== $fieldName, MappingException::cannotVersionIdField($this->name, $fieldName)); @@ -2150,6 +2139,7 @@ public function addProperty($fieldName, Type $type, array $mapping = []) } } + $this->fieldNames[$property->getColumnName()] = $fieldName; $this->properties[$fieldName] = $property; return $property; @@ -2450,24 +2440,6 @@ public function setCustomRepositoryClass($repositoryClassName) $this->customRepositoryClassName = $this->fullyQualifiedClassName($repositoryClassName); } - /** - * Dispatches the lifecycle event of the given entity to the registered - * lifecycle callbacks and lifecycle listeners. - * - * @deprecated Deprecated since version 2.4 in favor of \Doctrine\ORM\Event\ListenersInvoker - * - * @param string $lifecycleEvent The lifecycle event. - * @param object $entity The Entity on which the event occurred. - * - * @return void - */ - public function invokeLifecycleCallbacks($lifecycleEvent, $entity) - { - foreach ($this->lifecycleCallbacks[$lifecycleEvent] as $callback) { - $entity->$callback(); - } - } - /** * Whether the class has any attached lifecycle listeners or callbacks for a lifecycle event. * diff --git a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php index 6c9a4b17b02..c3483827d85 100644 --- a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php @@ -44,13 +44,14 @@ public function getColumnName(FieldMetadata $fieldMetadata, AbstractPlatform $pl */ public function getTableName(ClassMetadata $class, AbstractPlatform $platform) { - $tableName = $class->table['name']; + $schemaName = $class->getSchemaName(); + $tableName = $class->getTableName(); - if ( ! empty($class->table['schema'])) { - $tableName = $class->table['schema'] . '.' . $class->table['name']; + if ( ! empty($schemaName)) { + $tableName = $schemaName . '.' . $tableName; if ( ! $platform->supportsSchemas() && $platform->canEmulateSchemas()) { - $tableName = $class->table['schema'] . '__' . $class->table['name']; + $tableName = $schemaName . '__' . $class->getTableName(); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index e68ba6d4c1b..3df2c6d174a 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -254,7 +254,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat 'type' => $discrColumnAnnot->type ?: 'string', 'length' => $discrColumnAnnot->length ?: 255, 'columnDefinition' => $discrColumnAnnot->columnDefinition, - 'tableName' => $metadata->table['name'], + 'tableName' => $metadata->getTableName(), ] ); } else { @@ -263,7 +263,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat 'name' => 'dtype', 'type' => 'string', 'length' => 255, - 'tableName' => $metadata->table['name'], + 'tableName' => $metadata->getTableName(), ] ); } diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index d48aded5fed..b824e5cd314 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -316,7 +316,7 @@ private function reverseEngineerMappingFromDatabase() */ private function buildIndexes(ClassMetadata $metadata) { - $tableName = $metadata->table['name']; + $tableName = $metadata->getTableName(); $indexes = $this->tables[$tableName]->getIndexes(); foreach ($indexes as $index) { @@ -341,7 +341,7 @@ private function buildIndexes(ClassMetadata $metadata) */ private function buildFieldMappings(ClassMetadata $metadata) { - $tableName = $metadata->table['name']; + $tableName = $metadata->getTableName(); $columns = $this->tables[$tableName]->getColumns(); $primaryKeys = $this->getTablePrimaryKeys($this->tables[$tableName]); $foreignKeys = $this->getTableForeignKeys($this->tables[$tableName]); @@ -439,7 +439,7 @@ private function buildFieldMapping($tableName, Column $column) */ private function buildToOneAssociationMappings(ClassMetadata $metadata) { - $tableName = $metadata->table['name']; + $tableName = $metadata->getTableName(); $primaryKeys = $this->getTablePrimaryKeys($this->tables[$tableName]); $foreignKeys = $this->getTableForeignKeys($this->tables[$tableName]); diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index b3d544c39f3..a0fcef2efeb 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -178,7 +178,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) 'type' => isset($discrColumn['type']) ? (string) $discrColumn['type'] : 'string', 'length' => isset($discrColumn['length']) ? (string) $discrColumn['length'] : 255, 'columnDefinition' => isset($discrColumn['column-definition']) ? (string) $discrColumn['column-definition'] : null, - 'tableName' => $metadata->table['name'], + 'tableName' => $metadata->getTableName(), ] ); } else { @@ -187,7 +187,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) 'name' => 'dtype', 'type' => 'string', 'length' => 255, - 'tableName' => $metadata->table['name'], + 'tableName' => $metadata->getTableName(), ] ); } diff --git a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php index 0361a5280a9..8fb15743901 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php @@ -186,7 +186,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) 'type' => isset($discrColumn['type']) ? (string) $discrColumn['type'] : 'string', 'length' => isset($discrColumn['length']) ? (string) $discrColumn['length'] : 255, 'columnDefinition' => isset($discrColumn['columnDefinition']) ? (string) $discrColumn['columnDefinition'] : null, - 'tableName' => $metadata->table['name'], + 'tableName' => $metadata->getTableName(), ] ); } else { @@ -195,7 +195,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) 'name' => 'dtype', 'type' => 'string', 'length' => 255, - 'tableName' => $metadata->table['name'], + 'tableName' => $metadata->getTableName(), ] ); } diff --git a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php index 0f9e078cc5b..a91a41b4538 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php @@ -251,9 +251,7 @@ public function loadCriteria(PersistentCollection $collection, Criteria $criteri foreach ($mapping[$sourceRelationMode] as $key => $value) { $whereClauses[] = sprintf('t.%s = ?', $key); - $params[] = $ownerMetadata->containsForeignIdentifier - ? $id[$ownerMetadata->getFieldForColumn($value)] - : $id[$ownerMetadata->fieldNames[$value]]; + $params[] = $id[$ownerMetadata->getFieldForColumn($value)]; } $parameters = $this->expandCriteriaParameters($criteria); @@ -418,9 +416,7 @@ protected function getDeleteSQLParameters(PersistentCollection $collection) $params = []; foreach ($mapping['relationToSourceKeyColumns'] as $columnName => $refColumnName) { - $params[] = isset($sourceClass->fieldNames[$refColumnName]) - ? $identifier[$sourceClass->fieldNames[$refColumnName]] - : $identifier[$sourceClass->getFieldForColumn($columnName)]; + $params[] = $identifier[$sourceClass->getFieldForColumn($refColumnName)]; } return $params; @@ -631,9 +627,7 @@ private function getJoinTableRestrictionsWithKey(PersistentCollection $collectio if (isset($mapping[$sourceRelationMode][$joinTableColumn])) { $column = $mapping[$sourceRelationMode][$joinTableColumn]; $whereClauses[] = 't.' . $joinTableColumn . ' = ?'; - $params[] = $sourceClass->containsForeignIdentifier - ? $id[$sourceClass->getFieldForColumn($column)] - : $id[$sourceClass->fieldNames[$column]]; + $params[] = $id[$sourceClass->getFieldForColumn($column)]; $types[] = PersisterHelper::getTypeOfColumn($column, $sourceClass, $this->em); } elseif ( ! $joinNeeded) { $column = $mapping[$targetRelationMode][$joinTableColumn]; diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 21d2bd8b2be..14df0d95b3e 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -2611,13 +2611,13 @@ public function createEntity($className, array $data, &$hints = []) $class->reflFields[$field]->setValue($entity, $data[$field]); $targetClass->reflFields[$assoc['mappedBy']]->setValue($data[$field], $entity); - continue 2; + break; } // Inverse side of x-to-one can never be lazy $class->reflFields[$field]->setValue($entity, $this->getEntityPersister($assoc['targetEntity'])->loadOneToOneEntity($assoc, $entity)); - continue 2; + break; } // use the entity association @@ -2625,7 +2625,7 @@ public function createEntity($className, array $data, &$hints = []) $class->reflFields[$field]->setValue($entity, $data[$field]); $this->originalEntityData[$oid][$field] = $data[$field]; - continue; + break; } $associatedId = []; @@ -2633,20 +2633,15 @@ public function createEntity($className, array $data, &$hints = []) // TODO: Is this even computed right in all cases of composite keys? foreach ($assoc['targetToSourceKeyColumns'] as $targetColumn => $srcColumn) { $joinColumnValue = isset($data[$srcColumn]) ? $data[$srcColumn] : null; + $targetField = $targetClass->getFieldForColumn($targetColumn); - if ($joinColumnValue !== null) { - if ($targetClass->containsForeignIdentifier) { - $associatedId[$targetClass->getFieldForColumn($targetColumn)] = $joinColumnValue; - } else { - $associatedId[$targetClass->fieldNames[$targetColumn]] = $joinColumnValue; - } - } elseif ($targetClass->containsForeignIdentifier - && in_array($targetClass->getFieldForColumn($targetColumn), $targetClass->identifier, true) - ) { + if ($joinColumnValue === null && in_array($targetField, $targetClass->identifier, true)) { // the missing key is part of target's entity primary key $associatedId = []; break; } + + $associatedId[$targetField] = $joinColumnValue; } if ( ! $associatedId) { @@ -2654,7 +2649,7 @@ public function createEntity($className, array $data, &$hints = []) $class->reflFields[$field]->setValue($entity, null); $this->originalEntityData[$oid][$field] = null; - continue; + break; } if ( ! isset($hints['fetchMode'][$class->name][$field])) { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1707Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1707Test.php index 402c2c1ec82..3b16ecd0018 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1707Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1707Test.php @@ -4,6 +4,8 @@ use Doctrine\ORM\Events; use Doctrine\Tests\OrmFunctionalTestCase; +use Doctrine\ORM\Event\LifecycleEventArgs; +use Doctrine\ORM\Event\ListenersInvoker; /** * @group DDC-1707 @@ -28,10 +30,13 @@ public function setUp() public function testPostLoadOnChild() { - $class = $this->_em->getClassMetadata(DDC1707Child::class); - $entity = new DDC1707Child(); + $class = $this->_em->getClassMetadata(DDC1707Child::class); + $entity = new DDC1707Child(); + $event = new LifecycleEventArgs($entity, $this->_em); + $invoker = new ListenersInvoker($this->_em); + $invoke = $invoker->getSubscribedSystems($class, \Doctrine\ORM\Events::postLoad); - $class->invokeLifecycleCallbacks(Events::postLoad, $entity); + $invoker->invoke($class, \Doctrine\ORM\Events::postLoad, $entity, $event, $invoke); self::assertTrue($entity->postLoad); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php index cd938c28b24..ed5b5da1fac 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php @@ -46,7 +46,7 @@ public function testClassSchemaMappingsValidity($className, $expectedSchemaName, self::assertEquals($expectedTableName, $classMetadata->table['name']); self::assertEquals($expectedSchemaName, $classMetadata->table['schema']); - if ($this->_em->getConnection()->getDatabasePlatform()->supportsSchemas()) { + if ($platform->supportsSchemas()) { $fullTableName = sprintf('%s.%s', $expectedSchemaName, $expectedTableName); } else { $fullTableName = sprintf('%s__%s', $expectedSchemaName, $expectedTableName); @@ -68,8 +68,11 @@ public function testClassSchemaMappingsValidity($className, $expectedSchemaName, */ public function testPersistenceOfEntityWithSchemaMapping($className) { + $classMetadata = $this->_em->getClassMetadata($className); + $repository = $this->_em->getRepository($className); + try { - $this->_schemaTool->createSchema([$this->_em->getClassMetadata($className)]); + $this->_schemaTool->createSchema([$classMetadata]); } catch (ToolsException $e) { // table already exists } @@ -78,7 +81,7 @@ public function testPersistenceOfEntityWithSchemaMapping($className) $this->_em->flush(); $this->_em->clear(); - self::assertCount(1, $this->_em->getRepository($className)->findAll()); + self::assertCount(1, $repository->findAll()); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 4a43722fad2..df4fc49f285 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -321,7 +321,10 @@ public function testGetTemporaryTableNameSchema() $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->setTableName('foo.bar'); + $cm->setPrimaryTable([ + 'schema' => 'foo', + 'name' => 'bar', + ]); self::assertEquals('foo_bar_id_tmp', $cm->getTemporaryIdTableName()); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php index 28cf1900de7..eebd9b27a1f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php @@ -5,7 +5,7 @@ /* @var $metadata ClassMetadata */ $metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_JOINED); -$metadata->setTableName('company_contracts'); +$metadata->setPrimaryTable(['name' => 'company_contracts']); $metadata->setDiscriminatorColumn( [ From 8c4915e5162689a6a9f4633dda2ca5a3fb5a4437 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 4 Jun 2016 07:21:38 +0000 Subject: [PATCH 037/275] Decoupled FieldMetadata into FieldMetadata and ColumnMetadata --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 21 +- .../ORM/Mapping/ClassMetadataFactory.php | 2 +- lib/Doctrine/ORM/Mapping/ColumnMetadata.php | 238 +++++++++++++++ .../ORM/Mapping/DefaultQuoteStrategy.php | 4 +- .../ORM/Mapping/Driver/AnnotationDriver.php | 4 + lib/Doctrine/ORM/Mapping/FieldMetadata.php | 285 ++---------------- lib/Doctrine/ORM/Mapping/MappingException.php | 20 +- .../{PropertyMetadata.php => Property.php} | 39 +-- .../Entity/BasicEntityPersister.php | 10 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 4 +- .../ORM/Tools/Export/Driver/PhpExporter.php | 2 +- .../ORM/Tools/Export/Driver/XmlExporter.php | 6 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 2 +- .../ORM/Functional/DatabaseDriverTest.php | 6 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 12 +- .../ORM/Mapping/ClassMetadataBuilderTest.php | 10 +- .../AbstractClassMetadataExporterTest.php | 8 +- 17 files changed, 330 insertions(+), 343 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/ColumnMetadata.php rename lib/Doctrine/ORM/Mapping/{PropertyMetadata.php => Property.php} (63%) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 67ac795efd4..379097f8eed 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -2077,7 +2077,7 @@ private function isInheritanceType($type) } /** - * @return array + * @return array */ public function getProperties() { @@ -2087,7 +2087,7 @@ public function getProperties() /** * @param string $fieldName * - * @return PropertyMetadata|null + * @return Property|null */ public function getProperty($fieldName) { @@ -2150,26 +2150,25 @@ public function addProperty($fieldName, Type $type, array $mapping = []) * Adds a field mapping without completing/validating it. * This is mainly used to add inherited field mappings to derived classes. * - * @param ClassMetadata $declaringClass - * @param string $fieldName + * @param Property $property * * @return void */ - public function addInheritedProperty(ClassMetadata $declaringClass, $fieldName) + public function addInheritedProperty(Property $property) { - $property = $declaringClass->getProperty($fieldName); - $inheritedProperty = new FieldMetadata($this, $fieldName, $property->getType()); - + $declaringClass = $property->getDeclaringClass(); + $fieldName = $property->getName(); + $inheritedProperty = new FieldMetadata($declaringClass, $fieldName, $property->getType()); if ( ! $declaringClass->isMappedSuperclass) { $inheritedProperty->setTableName($property->getTableName()); } - //if ( ! $property->getTableName() && ! $this->isMappedSuperclass) { + //if ($declaringClass->isMappedSuperclass && ! $this->isMappedSuperclass) { // $inheritedProperty->setTableName($this->getTableName()); //} - $inheritedProperty->setDeclaringClass($declaringClass); + $inheritedProperty->setCurrentClass($this); $inheritedProperty->setColumnName($property->getColumnName()); $inheritedProperty->setColumnDefinition($property->getColumnDefinition()); $inheritedProperty->setPrimaryKey($property->isPrimaryKey()); @@ -2826,7 +2825,7 @@ public function setSequenceGeneratorDefinition(array $definition) public function setVersionMetadata(FieldMetadata $fieldMetadata) { $this->isVersioned = true; - $this->versionField = $fieldMetadata->getFieldName(); + $this->versionField = $fieldMetadata->getName(); $options = $fieldMetadata->getOptions(); diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 3f61fa1562b..e74e22c3870 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -447,7 +447,7 @@ private function getShortName($className) private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $parentClass) { foreach ($parentClass->getProperties() as $property) { - $subClass->addInheritedProperty($property->getDeclaringClass(), $property->getFieldName()); + $subClass->addInheritedProperty($property); } foreach ($parentClass->reflFields as $name => $field) { diff --git a/lib/Doctrine/ORM/Mapping/ColumnMetadata.php b/lib/Doctrine/ORM/Mapping/ColumnMetadata.php new file mode 100644 index 00000000000..4610b459db1 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/ColumnMetadata.php @@ -0,0 +1,238 @@ +tableName = $tableName; + $this->fieldName = $fieldName; + $this->type = $type; + } + + /** + * {@inheritdoc} + */ + public function getTableName() + { + return $this->tableName; + } + + /** + * {@inheritdoc} + */ + public function getColumnName() + { + return $this->columnName; + } + + /** + * {@inheritdoc} + */ + public function getType() + { + return $this->type; + } + + /** + * {@inheritdoc} + */ + public function getTypeName() + { + return $this->type->getName(); + } + + /** + * {@inheritdoc} + */ + public function getColumnDefinition() + { + return $this->columnDefinition; + } + + /** + * {@inheritdoc} + */ + public function setColumnDefinition($columnDefinition) + { + $this->columnDefinition = $columnDefinition; + } + + /** + * @return integer + */ + public function getLength() + { + return $this->length; + } + + /** + * @param integer $length + */ + public function setLength($length) + { + $this->length = $length; + } + + /** + * @return integer + */ + public function getScale() + { + return $this->scale; + } + + /** + * @param integer $scale + */ + public function setScale($scale) + { + $this->scale = $scale; + } + + /** + * @return integer + */ + public function getPrecision() + { + return $this->precision; + } + + /** + * @param integer $precision + */ + public function setPrecision($precision) + { + $this->precision = $precision; + } + + /** + * @return array + */ + public function getOptions() + { + return $this->options; + } + + /** + * @param array $options + */ + public function setOptions(array $options) + { + $this->options = $options; + } + + /** + * {@inheritdoc} + */ + public function setPrimaryKey($isPrimaryKey) + { + $this->primaryKey = $isPrimaryKey; + } + + /** + * {@inheritdoc} + */ + public function isPrimaryKey() + { + return $this->primaryKey; + } + + /** + * {@inheritdoc} + */ + public function setNullable($isNullable) + { + $this->nullable = $isNullable; + } + + /** + * {@inheritdoc} + */ + public function isNullable() + { + return $this->nullable; + } + + /** + * {@inheritdoc} + */ + public function setUnique($isUnique) + { + $this->unique = $isUnique; + } + + /** + * {@inheritdoc} + */ + public function isUnique() + { + return $this->unique; + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php index c3483827d85..f6b0cf85f42 100644 --- a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php @@ -34,7 +34,7 @@ class DefaultQuoteStrategy implements QuoteStrategy */ public function getColumnName(FieldMetadata $fieldMetadata, AbstractPlatform $platform) { - return $fieldMetadata->getQuotedColumnName($platform); + return $platform->quoteIdentifier($fieldMetadata->getColumnName()); } /** @@ -105,7 +105,7 @@ public function getIdentifierColumnNames(ClassMetadata $class, AbstractPlatform foreach ($class->identifier as $fieldName) { if (($property = $class->getProperty($fieldName)) !== null) { - $quotedColumnNames[] = $property->getQuotedColumnName($platform); + $quotedColumnNames[] = $platform->quoteIdentifier($property->getColumnName()); continue; } diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 3df2c6d174a..39aaab92502 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -290,6 +290,10 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat // Evaluate annotations on properties/fields /* @var $reflProperty \ReflectionProperty */ foreach ($class->getProperties() as $reflProperty) { + /*if ($reflProperty->getDeclaringClass()->name !== $class->name) { + continue; + }*/ + if (($metadata->isMappedSuperclass && ! $reflProperty->isPrivate()) || (($property = $metadata->getProperty($reflProperty->name)) !== null && $property->isInherited()) || $metadata->isInheritedAssociation($reflProperty->name) diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index 82126df4f6f..74eef2a2d70 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -3,10 +3,9 @@ namespace Doctrine\ORM\Mapping; use Doctrine\Common\Persistence\Mapping\ReflectionService; -use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\Type; -class FieldMetadata implements PropertyMetadata +class FieldMetadata extends ColumnMetadata implements Property { /** * @var ClassMetadata @@ -26,84 +25,22 @@ class FieldMetadata implements PropertyMetadata /** * @var string */ - private $fieldName; - - /** - * @var Type - */ - private $type; - - /** - * @var string - */ - private $tableName; - - /** - * @var string - */ - private $columnName; - - /** - * @var string - */ - private $columnDefinition; - - /** - * @var integer - */ - private $length; - - /** - * @var integer - */ - private $scale; - - /** - * @var integer - */ - private $precision; - - /** - * @var array - */ - private $options = []; - - /** - * @var boolean - */ - private $isPrimaryKey = false; - - /** - * @var boolean - */ - private $isNullable = false; - - /** - * @var boolean - */ - private $isUnique = false; + private $name; /** * FieldMetadata constructor. * - * @param ClassMetadata $currentClass + * @param ClassMetadata $declaringClass * @param string $fieldName * @param Type $type */ - public function __construct(ClassMetadata $currentClass, $fieldName, Type $type) + public function __construct(ClassMetadata $declaringClass, $fieldName, Type $type) { - $this->declaringClass = $currentClass; - $this->currentClass = $currentClass; - $this->fieldName = $fieldName; - $this->type = $type; - } + parent::__construct(null, $fieldName, $type); - /** - * {@inheritdoc} - */ - public function getCurrentClass() - { - return $this->currentClass; + $this->declaringClass = $declaringClass; + $this->currentClass = $declaringClass; + $this->name = $fieldName; } /** @@ -114,72 +51,32 @@ public function getDeclaringClass() return $this->declaringClass; } - /** - * @param ClassMetadata $declaringClass - */ - public function setDeclaringClass(ClassMetadata $declaringClass) - { - $this->declaringClass = $declaringClass; - } - - /** - * {@inheritdoc} - */ - public function isInherited() - { - return $this->declaringClass !== $this->currentClass; - } - - /** - * {@inheritdoc} - */ - public function setValue($object, $value) - { - $this->reflection->setValue($object, $value); - } - - /** - * {@inheritdoc} - */ - public function getValue($object) - { - return $this->reflection->getValue($object); - } - - /** - * {@inheritdoc} - */ - public function getFieldName() - { - return $this->fieldName; - } - /** * {@inheritdoc} */ - public function getType() + public function getName() { - return $this->type; + return $this->name; } /** * {@inheritdoc} */ - public function getTypeName() + public function getCurrentClass() { - return $this->type->getName(); + return $this->currentClass; } /** - * {@inheritdoc} + * @param ClassMetadata $currentClass */ - public function getTableName() + public function setCurrentClass(ClassMetadata $currentClass) { - return $this->tableName; + $this->currentClass = $currentClass; } /** - * {@inheritdoc} + * @param string $tableName */ public function setTableName($tableName) { @@ -187,15 +84,7 @@ public function setTableName($tableName) } /** - * {@inheritdoc} - */ - public function getColumnName() - { - return $this->columnName; - } - - /** - * {@inheritdoc} + * @param string $columnName */ public function setColumnName($columnName) { @@ -205,129 +94,25 @@ public function setColumnName($columnName) /** * {@inheritdoc} */ - public function getColumnDefinition() - { - return $this->columnDefinition; - } - - /** - * {@inheritdoc} - */ - public function setColumnDefinition($columnDefinition) - { - $this->columnDefinition = $columnDefinition; - } - - /** - * @return integer - */ - public function getLength() - { - return $this->length; - } - - /** - * @param integer $length - */ - public function setLength($length) - { - $this->length = $length; - } - - /** - * @return integer - */ - public function getScale() - { - return $this->scale; - } - - /** - * @param integer $scale - */ - public function setScale($scale) - { - $this->scale = $scale; - } - - /** - * @return integer - */ - public function getPrecision() - { - return $this->precision; - } - - /** - * @param integer $precision - */ - public function setPrecision($precision) - { - $this->precision = $precision; - } - - /** - * @return array - */ - public function getOptions() - { - return $this->options; - } - - /** - * @param array $options - */ - public function setOptions(array $options) - { - $this->options = $options; - } - - /** - * {@inheritdoc} - */ - public function setPrimaryKey($isPrimaryKey) - { - $this->isPrimaryKey = $isPrimaryKey; - } - - /** - * {@inheritdoc} - */ - public function isPrimaryKey() - { - return $this->isPrimaryKey; - } - - /** - * {@inheritdoc} - */ - public function setNullable($isNullable) - { - $this->isNullable = $isNullable; - } - - /** - * {@inheritdoc} - */ - public function isNullable() + public function isInherited() { - return $this->isNullable; + return $this->declaringClass !== $this->currentClass; } /** * {@inheritdoc} */ - public function setUnique($isUnique) + public function setValue($object, $value) { - $this->isUnique = $isUnique; + $this->reflection->setValue($object, $value); } /** * {@inheritdoc} */ - public function isUnique() + public function getValue($object) { - return $this->isUnique; + return $this->reflection->getValue($object); } /** @@ -351,18 +136,10 @@ public function isField() */ public function wakeupReflection(ReflectionService $reflectionService) { - $this->reflection = $reflectionService->getAccessibleProperty($this->getDeclaringClass()->name, $this->fieldName); - } - - /** - * @param AbstractPlatform $platform - * @param QuoteStrategy|null $quoteStrategy - * - * @return string - */ - public function getQuotedColumnName(AbstractPlatform $platform) - { - return $platform->quoteIdentifier($this->columnName); + $this->reflection = $reflectionService->getAccessibleProperty( + $this->getDeclaringClass()->name, + $this->fieldName + ); } /** @@ -371,6 +148,8 @@ public function getQuotedColumnName(AbstractPlatform $platform) public function getMapping() { return [ + 'declaringClass' => $this->declaringClass->name, + 'currentClass' => $this->currentClass->name, 'tableName' => $this->tableName, 'columnName' => $this->columnName, 'columnDefinition' => $this->columnDefinition, @@ -378,9 +157,9 @@ public function getMapping() 'scale' => $this->scale, 'precision' => $this->precision, 'options' => $this->options, - 'id' => $this->isPrimaryKey, - 'nullable' => $this->isNullable, - 'unique' => $this->isUnique, + 'id' => $this->primaryKey, + 'nullable' => $this->nullable, + 'unique' => $this->unique, ]; } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/MappingException.php b/lib/Doctrine/ORM/Mapping/MappingException.php index eac6f75d400..949fac97bfd 100644 --- a/lib/Doctrine/ORM/Mapping/MappingException.php +++ b/lib/Doctrine/ORM/Mapping/MappingException.php @@ -371,16 +371,16 @@ public static function tableIdGeneratorNotImplemented($className) } /** - * @param PropertyMetadata $propertyMetadata + * @param Property $property * * @return MappingException */ - public static function duplicateProperty(PropertyMetadata $propertyMetadata) + public static function duplicateProperty(Property $property) { return new self(sprintf( 'Property "%s" in "%s" was already declared, but it must be declared only once', - $propertyMetadata->getFieldName(), - $propertyMetadata->getDeclaringClass()->getName() + $property->getName(), + $property->getDeclaringClass()->getName() )); } @@ -567,19 +567,19 @@ public static function cannotVersionIdField($className, $fieldName) } /** - * @param PropertyMetadata $propertyMetadata + * @param Property $property * * @return MappingException */ - public static function sqlConversionNotAllowedForPrimaryKeyProperties(PropertyMetadata $propertyMetadata) + public static function sqlConversionNotAllowedForPrimaryKeyProperties(Property $property) { return new self(sprintf( 'It is not possible to set id field "%s" to type "%s" in entity class "%s". ' . 'The type "%s" requires conversion SQL which is not allowed for identifiers.', - $propertyMetadata->getFieldName(), - $propertyMetadata->getTypeName(), - $propertyMetadata->getDeclaringClass()->getName(), - $propertyMetadata->getTypeName() + $property->getName(), + $property->getTypeName(), + $property->getDeclaringClass()->getName(), + $property->getTypeName() )); } diff --git a/lib/Doctrine/ORM/Mapping/PropertyMetadata.php b/lib/Doctrine/ORM/Mapping/Property.php similarity index 63% rename from lib/Doctrine/ORM/Mapping/PropertyMetadata.php rename to lib/Doctrine/ORM/Mapping/Property.php index 7fe795a2810..923525155f6 100644 --- a/lib/Doctrine/ORM/Mapping/PropertyMetadata.php +++ b/lib/Doctrine/ORM/Mapping/Property.php @@ -5,7 +5,7 @@ use Doctrine\Common\Persistence\Mapping\ReflectionService; use Doctrine\DBAL\Types\Type; -interface PropertyMetadata +interface Property { /** * @return ClassMetadata @@ -17,6 +17,11 @@ public function getDeclaringClass(); */ public function getCurrentClass(); + /** + * @return ClassMetadata + */ + public function setCurrentClass(ClassMetadata $currentClass); + /** * @param object $object * @param mixed $value @@ -33,7 +38,7 @@ public function getValue($object); /** * @return string */ - public function getFieldName(); + public function getName(); /** * @return Type @@ -45,36 +50,6 @@ public function getType(); */ public function getTypeName(); - /** - * @param string $tableName - */ - public function setTableName($tableName); - - /** - * @return string - */ - public function getTableName(); - - /** - * @return boolean - */ - public function isInherited(); - - /** - * @return boolean - */ - public function isPrimaryKey(); - - /** - * @return boolean - */ - public function isAssociation(); - - /** - * @return boolean - */ - public function isField(); - /** * @param ReflectionService $reflectionService */ diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 7c26ffbcc34..1c7c0d272a0 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -1496,15 +1496,7 @@ protected function getInsertColumnList() */ protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r') { - $property = $class->getProperty($field); - -// $m = $fieldMapping['declaringClass']; -// $fieldMapping['declaringClass'] = $m->name; -// -// var_dump($fieldMapping); -// -// $fieldMapping['declaringClass'] = $m; - + $property = $class->getProperty($field); $columnAlias = $this->getSQLColumnAlias($property->getColumnName()); $sql = sprintf( '%s.%s', diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index d2710a4c1c9..348f1cb4410 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -743,7 +743,7 @@ private function generateEmbeddableConstructor(ClassMetadata $metadata) continue; }*/ - $fieldName = $property->getFieldName(); + $fieldName = $property->getName(); $fieldType = $property->getTypeName(); $mappedType = $this->getType($fieldType); $param = '$' . $fieldName; @@ -1717,7 +1717,7 @@ protected function generateFieldMappingPropertyDocBlock(FieldMetadata $propertyM } } - if ($metadata->versionField === $propertyMetadata->getFieldName()) { + if ($metadata->versionField === $propertyMetadata->getName()) { $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'Version'; } } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 3a292d8aa86..00507eb434b 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -86,7 +86,7 @@ public function exportClassMetadata(ClassMetadata $metadata) foreach ($metadata->getProperties() as $property) { $lines[] = sprintf( '$metadata->addProperty("%s", Type::getType("%s"), %s);', - $property->getFieldName(), + $property->getName(), $property->getType()->getName(), $this->_varExport($property->getMapping()) ); diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index c52a6613296..23b5daf8f5a 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -154,7 +154,7 @@ public function exportClassMetadata(ClassMetadata $metadata) foreach ($id as $field) { $property = $field['property']; $idXml = $root->addChild('id'); - $idXml->addAttribute('name', $property->getFieldName()); + $idXml->addAttribute('name', $property->getName()); $idXml->addAttribute('type', $property->getTypeName()); $idXml->addAttribute('column', $property->getColumnName()); @@ -180,7 +180,7 @@ public function exportClassMetadata(ClassMetadata $metadata) foreach ($properties as $property) { $fieldXml = $root->addChild('field'); - $fieldXml->addAttribute('name', $property->getFieldName()); + $fieldXml->addAttribute('name', $property->getName()); $fieldXml->addAttribute('type', $property->getTypeName()); $fieldXml->addAttribute('column', $property->getColumnName()); @@ -204,7 +204,7 @@ public function exportClassMetadata(ClassMetadata $metadata) $fieldXml->addAttribute('scale', $property->getScale()); } - if ($metadata->versionField === $property->getFieldName()) { + if ($metadata->versionField === $property->getName()) { $fieldXml->addAttribute('version', 'true'); } diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 55c453e2c40..45bb0885f61 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -421,7 +421,7 @@ private function gatherColumns($class, Table $table) */ private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Table $table) { - $fieldName = $fieldMetadata->getFieldName(); + $fieldName = $fieldMetadata->getName(); $columnName = $fieldMetadata->getColumnName(); $columnType = $fieldMetadata->getTypeName(); diff --git a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php index 5b0547a5673..59f72383666 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php @@ -71,7 +71,7 @@ public function testLoadMetadataFromDatabase() $idProperty = $metadata->getProperty('id'); - self::assertEquals('id', $idProperty->getFieldName()); + self::assertEquals('id', $idProperty->getName()); self::assertEquals('id', $idProperty->getColumnName()); self::assertEquals('integer', $idProperty->getTypeName()); @@ -79,7 +79,7 @@ public function testLoadMetadataFromDatabase() $barProperty = $metadata->getProperty('bar'); - self::assertEquals('bar', $barProperty->getFieldName()); + self::assertEquals('bar', $barProperty->getName()); self::assertEquals('bar', $barProperty->getColumnName()); self::assertEquals('string', $barProperty->getTypeName()); self::assertEquals(200, $barProperty->getLength()); @@ -196,7 +196,7 @@ public function testLoadMetadataFromDatabaseDetail() $idProperty = $metadata->getProperty('id'); - self::assertEquals('id', $idProperty->getFieldName()); + self::assertEquals('id', $idProperty->getName()); self::assertEquals('id', $idProperty->getColumnName()); self::assertEquals('integer', $idProperty->getTypeName()); diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index fc7f6ba4246..03303343cdb 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -515,8 +515,8 @@ public function testDefaultFieldType() self::assertEquals('string', $idProperty->getTypeName()); self::assertEquals('string', $nameProperty->getTypeName()); - self::assertEquals('id', $idProperty->getFieldName()); - self::assertEquals('name', $nameProperty->getFieldName()); + self::assertEquals('id', $idProperty->getName()); + self::assertEquals('name', $nameProperty->getName()); self::assertEquals('id', $idProperty->getColumnName()); self::assertEquals('name', $nameProperty->getColumnName()); @@ -848,7 +848,7 @@ public function testAttributeOverridesMapping() $idProperty = $adminMetadata->getProperty('id'); self::assertTrue($idProperty->isPrimaryKey()); - self::assertEquals('id', $idProperty->getFieldName()); + self::assertEquals('id', $idProperty->getName()); self::assertEquals('user_id', $idProperty->getColumnName()); self::assertEquals(150, $idProperty->getLength()); @@ -856,7 +856,7 @@ public function testAttributeOverridesMapping() $nameProperty = $adminMetadata->getProperty('name'); - self::assertEquals('name', $nameProperty->getFieldName()); + self::assertEquals('name', $nameProperty->getName()); self::assertEquals('user_name', $nameProperty->getColumnName()); self::assertEquals(250, $nameProperty->getLength()); self::assertTrue($nameProperty->isNullable()); @@ -871,7 +871,7 @@ public function testAttributeOverridesMapping() $idProperty = $guestMetadata->getProperty('id'); self::assertTrue($idProperty->isPrimaryKey()); - self::assertEquals('id', $idProperty->getFieldName()); + self::assertEquals('id', $idProperty->getName()); self::assertEquals('guest_id', $idProperty->getColumnName()); self::assertEquals(140, $idProperty->getLength()); @@ -879,7 +879,7 @@ public function testAttributeOverridesMapping() $nameProperty = $guestMetadata->getProperty('name'); - self::assertEquals('name', $nameProperty->getFieldName()); + self::assertEquals('name', $nameProperty->getName()); self::assertEquals('guest_name', $nameProperty->getColumnName()); self::assertEquals(240, $nameProperty->getLength()); self::assertFalse($nameProperty->isNullable()); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php index 13b67a7cd65..538b772ab3a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php @@ -245,7 +245,7 @@ public function testAddField() $property = $this->cm->getProperty('name'); - self::assertEquals('name', $property->getFieldName()); + self::assertEquals('name', $property->getName()); self::assertEquals($this->cm, $property->getDeclaringClass()); self::assertEquals('string', $property->getTypeName()); self::assertEquals('CmsUser', $property->getTableName()); @@ -265,7 +265,7 @@ public function testCreateField() $property = $this->cm->getProperty('name'); - self::assertEquals('name', $property->getFieldName()); + self::assertEquals('name', $property->getName()); self::assertEquals($this->cm, $property->getDeclaringClass()); self::assertEquals('string', $property->getTypeName()); self::assertEquals('CmsUser', $property->getTableName()); @@ -287,7 +287,7 @@ public function testCreateVersionedField() $property = $this->cm->getProperty('name'); - self::assertEquals('name', $property->getFieldName()); + self::assertEquals('name', $property->getName()); self::assertEquals($this->cm, $property->getDeclaringClass()); self::assertEquals('integer', $property->getTypeName()); self::assertEquals('CmsUser', $property->getTableName()); @@ -311,7 +311,7 @@ public function testCreatePrimaryField() $property = $this->cm->getProperty('name'); self::assertEquals(['id'], $this->cm->identifier); - self::assertEquals('id', $property->getFieldName()); + self::assertEquals('id', $property->getName()); self::assertEquals($this->cm, $property->getDeclaringClass()); self::assertEquals('integer', $property->getTypeName()); self::assertEquals('CmsUser', $property->getTableName()); @@ -329,7 +329,7 @@ public function testCreateUnsignedOptionField() $property = $this->cm->getProperty('name'); - self::assertEquals('state', $property->getFieldName()); + self::assertEquals('state', $property->getName()); self::assertEquals($this->cm, $property->getDeclaringClass()); self::assertEquals('integer', $property->getTypeName()); self::assertEquals('CmsUser', $property->getTableName()); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index 0615fd41a6c..f6b29471c49 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -201,21 +201,21 @@ public function testFieldsAreExported($class) $ageProperty = $class->getProperty('age'); self::assertTrue($idProperty->isPrimaryKey()); - self::assertEquals('id', $idProperty->getFieldName()); + self::assertEquals('id', $idProperty->getName()); self::assertEquals('integer', $idProperty->getTypeName()); self::assertEquals('id', $idProperty->getColumnName()); - self::assertEquals('name', $nameProperty->getFieldName()); + self::assertEquals('name', $nameProperty->getName()); self::assertEquals('string', $nameProperty->getTypeName()); self::assertEquals('name', $nameProperty->getColumnName()); self::assertEquals(50, $nameProperty->getLength()); - self::assertEquals('email', $emailProperty->getFieldName()); + self::assertEquals('email', $emailProperty->getName()); self::assertEquals('string', $emailProperty->getTypeName()); self::assertEquals('user_email', $emailProperty->getColumnName()); self::assertEquals('CHAR(32) NOT NULL', $emailProperty->getColumnDefinition()); - self::assertEquals('age', $ageProperty->getFieldName()); + self::assertEquals('age', $ageProperty->getName()); self::assertEquals('integer', $ageProperty->getTypeName()); self::assertEquals('age', $ageProperty->getColumnName()); self::assertArrayHasKey('unsigned', $ageProperty->getOptions()); From 9952131c32c5c0421efb215296ee180694f30ba1 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 8 Jun 2016 23:03:48 +0000 Subject: [PATCH 038/275] Moved Discriminator Column to OO approach and refactored a bit for persisters --- .../Hydration/SimpleObjectHydrator.php | 2 +- .../ORM/Mapping/AnsiQuoteStrategy.php | 4 +- .../Mapping/Builder/ClassMetadataBuilder.php | 15 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 104 ++++++------ .../ORM/Mapping/ClassMetadataFactory.php | 12 +- lib/Doctrine/ORM/Mapping/ColumnMetadata.php | 74 ++++++--- .../ORM/Mapping/DefaultQuoteStrategy.php | 4 +- .../Mapping/DiscriminatorColumnMetadata.php | 24 +++ .../ORM/Mapping/Driver/AnnotationDriver.php | 31 ++-- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 44 +++--- .../ORM/Mapping/Driver/YamlDriver.php | 39 +++-- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 53 ++++--- lib/Doctrine/ORM/Mapping/Property.php | 17 ++ lib/Doctrine/ORM/Mapping/QuoteStrategy.php | 4 +- .../Collection/OneToManyPersister.php | 22 ++- .../AbstractEntityInheritancePersister.php | 11 +- .../Entity/BasicEntityPersister.php | 121 +++++++------- .../Entity/JoinedSubclassPersister.php | 149 ++++++++++++------ .../Entity/SingleTablePersister.php | 43 ++--- .../Query/Exec/MultiTableDeleteExecutor.php | 27 ++-- .../Query/Exec/MultiTableUpdateExecutor.php | 31 ++-- .../ORM/Query/ResultSetMappingBuilder.php | 17 +- lib/Doctrine/ORM/Query/SqlWalker.php | 73 +++++---- .../Command/MappingDescribeCommand.php | 40 ++++- lib/Doctrine/ORM/Tools/EntityGenerator.php | 6 +- .../ORM/Tools/Export/Driver/PhpExporter.php | 16 +- .../ORM/Tools/Export/Driver/XmlExporter.php | 18 ++- .../ORM/Tools/Export/Driver/YamlExporter.php | 15 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 25 +-- lib/Doctrine/ORM/Tools/SchemaValidator.php | 23 ++- .../Tests/Models/Company/CompanyContract.php | 16 +- .../Functional/AdvancedAssociationTest.php | 37 +++-- .../ORM/Functional/Ticket/DDC2138Test.php | 27 ++-- .../ORM/Functional/Ticket/DDC2175Test.php | 14 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 81 ++++++---- .../Mapping/BasicInheritanceMappingTest.php | 4 +- .../ORM/Mapping/ClassMetadataBuilderTest.php | 26 ++- .../Tests/ORM/Mapping/ClassMetadataTest.php | 56 ++++--- ...e.Tests.Models.Company.CompanyContract.php | 15 +- ...ests.Models.Company.CompanyFixContract.php | 2 +- ...sts.Models.Company.CompanyFlexContract.php | 2 +- ...ine.Tests.Models.Company.CompanyPerson.php | 8 +- ...1476.DDC1476EntityWithDefaultFieldType.php | 2 +- .../php/Doctrine.Tests.ORM.Mapping.Animal.php | 25 +-- ...octrine.Tests.ORM.Mapping.DDC807Entity.php | 14 +- ....DDC1476EntityWithDefaultFieldType.dcm.yml | 2 +- .../BasicEntityPersisterTypeValueSqlTest.php | 2 +- .../Doctrine/Tests/OrmFunctionalTestCase.php | 2 +- tests/Doctrine/Tests/OrmTestCase.php | 2 +- 49 files changed, 838 insertions(+), 563 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php diff --git a/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php index bf2beaba347..c6e160a148c 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php @@ -83,7 +83,7 @@ protected function hydrateRowData(array $sqlResult, array &$result) // We need to find the correct entity class name if we have inheritance in resultset if ($this->class->inheritanceType !== ClassMetadata::INHERITANCE_TYPE_NONE) { - $discrColumnName = $this->_platform->getSQLResultCasing($this->class->discriminatorColumn['name']); + $discrColumnName = $this->_platform->getSQLResultCasing($this->class->discriminatorColumn->getColumnName()); // Find mapped discriminator column from the result set. if ($metaMappingDiscrColumnName = array_search($discrColumnName, $this->_rsm->metaMappings)) { diff --git a/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php b/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php index e6c83ecfd93..6065b8c7a84 100644 --- a/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php @@ -33,9 +33,9 @@ class AnsiQuoteStrategy implements QuoteStrategy /** * {@inheritdoc} */ - public function getColumnName(FieldMetadata $fieldMetadata, AbstractPlatform $platform) + public function getColumnName(ColumnMetadata $columnMetadata, AbstractPlatform $platform) { - return $fieldMetadata->getColumnName(); + return $columnMetadata->getColumnName(); } /** diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php index 053ab856987..77b3f11ce9d 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php @@ -21,6 +21,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; /** * Builder Object for ClassMetadata @@ -235,13 +236,13 @@ public function setSingleTableInheritance() */ public function setDiscriminatorColumn($name, $type = 'string', $length = 255) { - $this->cm->setDiscriminatorColumn( - [ - 'name' => $name, - 'type' => $type, - 'length' => $length, - ] - ); + $discrColumn = new DiscriminatorColumnMetadata(); + + $discrColumn->setColumnName($name); + $discrColumn->setType(Type::getType($type)); + $discrColumn->setLength($length); + + $this->cm->setDiscriminatorColumn($discrColumn); return $this; } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 379097f8eed..2f0609f91ed 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -26,6 +26,9 @@ use Doctrine\DBAL\Types\Type; use Doctrine\Instantiator\Instantiator; use Doctrine\ORM\Cache\CacheException; +use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Utility\PersisterHelper; use InvalidArgumentException; use ReflectionClass; use RuntimeException; @@ -386,7 +389,7 @@ class ClassMetadata implements ClassMetadataInterface * READ-ONLY: The definition of the discriminator column used in JOINED and SINGLE_TABLE * inheritance mappings. * - * @var array + * @var DiscriminatorColumnMetadata */ public $discriminatorColumn; @@ -1664,29 +1667,37 @@ public function getColumnNames(array $fieldNames = null) } /** - * Returns an array with all the identifier column names. + * Returns an array with identifier column names and their corresponding ColumnMetadata. * * @return array */ - public function getIdentifierColumnNames() + public function getIdentifierColumns(EntityManagerInterface $em) { - $columnNames = []; + $columns = []; foreach ($this->identifier as $idProperty) { if (($property = $this->getProperty($idProperty)) !== null) { - $columnNames[] = $property->getColumnName(); + $columns[$property->getColumnName()] = $property; continue; } // Association defined as Id field - $joinColumns = $this->associationMappings[$idProperty]['joinColumns']; - $assocColumnNames = array_map(function ($joinColumn) { return $joinColumn['name']; }, $joinColumns); + $assoc = $this->associationMappings[$idProperty]; + $targetClass = $em->getClassMetadata($assoc['targetEntity']); + + foreach ($assoc['joinColumns'] as $joinColumn) { + $sourceColumn = $joinColumn['name']; + $targetColumn = $joinColumn['referencedColumnName']; - $columnNames = array_merge($columnNames, $assocColumnNames); + $columns[$sourceColumn] = array_merge( + $joinColumn, + ['type' => PersisterHelper::getTypeOfColumn($targetColumn, $targetClass, $em)] + ); + } } - return $columnNames; + return $columns; } /** @@ -2103,24 +2114,36 @@ public function getProperty($fieldName) */ public function addProperty($fieldName, Type $type, array $mapping = []) { - $property = new FieldMetadata($this, $fieldName, $type); + $property = new FieldMetadata(); + $property->setCurrentClass($this); + $property->setDeclaringClass($this); + $property->setName($fieldName); + $property->setType($type); $property->setTableName(! $this->isMappedSuperclass ? $this->getTableName() : null); $property->setColumnName($mapping['columnName'] ?? $this->namingStrategy->propertyToColumnName($fieldName, $this->name)); - $property->setPrimaryKey(isset($mapping['id']) && $mapping['id']); - $property->setNullable(isset($mapping['nullable']) && $mapping['nullable']); - $property->setUnique(isset($mapping['unique']) && $mapping['unique']); $property->setColumnDefinition($mapping['columnDefinition'] ?? null); $property->setLength($mapping['length'] ?? null); $property->setScale($mapping['scale'] ?? null); $property->setPrecision($mapping['precision'] ?? null); $property->setOptions($mapping['options'] ?? []); + $property->setPrimaryKey(isset($mapping['id']) && $mapping['id']); + $property->setNullable(isset($mapping['nullable']) && $mapping['nullable']); + $property->setUnique(isset($mapping['unique']) && $mapping['unique']); + + // Check for empty field name + if (empty($fieldName)) { + throw MappingException::missingFieldName($this->name); + } - assert(! isset($this->properties[$fieldName]), MappingException::duplicateProperty($property)); + // Check for duplicated property + if (isset($this->properties[$fieldName]) || isset($this->associationMappings[$fieldName])) { + throw MappingException::duplicateProperty($property); + } // Check for already declared column if (isset($this->fieldNames[$property->getColumnName()]) || - ($this->discriminatorColumn != null && $this->discriminatorColumn['name'] === $property->getColumnName())) { + ($this->discriminatorColumn != null && $this->discriminatorColumn->getColumnName() === $property->getColumnName())) { throw MappingException::duplicateColumnName($this->name, $property->getColumnName()); } @@ -2156,11 +2179,14 @@ public function addProperty($fieldName, Type $type, array $mapping = []) */ public function addInheritedProperty(Property $property) { - $declaringClass = $property->getDeclaringClass(); - $fieldName = $property->getName(); - $inheritedProperty = new FieldMetadata($declaringClass, $fieldName, $property->getType()); + $inheritedProperty = new FieldMetadata(); + + $inheritedProperty->setCurrentClass($this); + $inheritedProperty->setDeclaringClass($property->getDeclaringClass()); + $inheritedProperty->setName($property->getName()); + $inheritedProperty->setType($property->getType()); - if ( ! $declaringClass->isMappedSuperclass) { + if ( ! $property->getDeclaringClass()->isMappedSuperclass) { $inheritedProperty->setTableName($property->getTableName()); } @@ -2179,8 +2205,8 @@ public function addInheritedProperty(Property $property) $inheritedProperty->setPrecision($property->getPrecision()); $inheritedProperty->setOptions($property->getOptions()); - $this->fieldNames[$property->getColumnName()] = $fieldName; - $this->properties[$fieldName] = $inheritedProperty; + $this->fieldNames[$property->getColumnName()] = $property->getName(); + $this->properties[$property->getName()] = $inheritedProperty; } /** @@ -2529,7 +2555,7 @@ public function addEntityListener($eventName, $class, $method) /** * Sets the discriminator column definition. * - * @param array $columnDef + * @param DiscriminatorColumnMetadata $discriminatorColumn * * @return void * @@ -2537,41 +2563,25 @@ public function addEntityListener($eventName, $class, $method) * * @see getDiscriminatorColumn() */ - public function setDiscriminatorColumn($columnDef) + public function setDiscriminatorColumn(DiscriminatorColumnMetadata $discriminatorColumn) { - if ($columnDef === null) { - return; - } - - if ( ! isset($columnDef['name'])) { + if (empty($discriminatorColumn->getColumnName())) { throw MappingException::nameIsMandatoryForDiscriminatorColumns($this->name); } - if (isset($this->fieldNames[$columnDef['name']])) { - throw MappingException::duplicateColumnName($this->name, $columnDef['name']); - } - - $columnDef['tableName'] = isset($columnDef['tableName']) - ? $columnDef['tableName'] - : $this->table['name']; - - if ( ! isset($columnDef['fieldName'])) { - $columnDef['fieldName'] = $columnDef['name']; + if (isset($this->fieldNames[$discriminatorColumn->getColumnName()])) { + throw MappingException::duplicateColumnName($this->name, $discriminatorColumn->getColumnName()); } - $type = isset($columnDef['type']) - ? $columnDef['type'] - : 'string'; + $discriminatorColumn->setTableName($discriminatorColumn->getTableName() ?? $this->getTableName()); - if ( ! ($type instanceof Type)) { - $columnDef['type'] = Type::getType($type); - } + $allowedTypeList = ["boolean", "array", "object", "datetime", "time", "date"]; - if (in_array($columnDef['type']->getName(), ["boolean", "array", "object", "datetime", "time", "date"])) { - throw MappingException::invalidDiscriminatorColumnType($this->name, $columnDef['type']->getName()); + if (in_array($discriminatorColumn->getTypeName(), $allowedTypeList)) { + throw MappingException::invalidDiscriminatorColumnType($this->name, $discriminatorColumn->getTypeName()); } - $this->discriminatorColumn = $columnDef; + $this->discriminatorColumn = $discriminatorColumn; } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index e74e22c3870..86776d19dfa 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -137,8 +137,12 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS $class->setIdentifier($parent->identifier); $class->setVersioned($parent->isVersioned); $class->setVersionField($parent->versionField); - $class->setDiscriminatorColumn($parent->discriminatorColumn); - $class->setDiscriminatorMap($parent->discriminatorMap); + + if ($parent->discriminatorColumn) { + $class->setDiscriminatorColumn($parent->discriminatorColumn); + $class->setDiscriminatorMap($parent->discriminatorMap); + } + $class->setLifecycleCallbacks($parent->lifecycleCallbacks); $class->setChangeTrackingPolicy($parent->changeTrackingPolicy); @@ -318,7 +322,7 @@ protected function validateRuntimeMetadata($class, $parent) // verify inheritance if ( ! $class->isMappedSuperclass && ! $class->isInheritanceTypeNone()) { if ( ! $parent) { - if (count($class->discriminatorMap) == 0) { + if (count($class->discriminatorMap) === 0) { throw MappingException::missingDiscriminatorMap($class->name); } @@ -326,7 +330,7 @@ protected function validateRuntimeMetadata($class, $parent) throw MappingException::missingDiscriminatorColumn($class->name); } } - } else if ($class->isMappedSuperclass && $class->name == $class->rootEntityName && (count($class->discriminatorMap) || $class->discriminatorColumn)) { + } else if ($class->isMappedSuperclass && $class->name === $class->rootEntityName && (count($class->discriminatorMap) || $class->discriminatorColumn)) { // second condition is necessary for mapped superclasses in the middle of an inheritance hierarchy throw MappingException::noInheritanceOnMappedSuperClass($class->name); } diff --git a/lib/Doctrine/ORM/Mapping/ColumnMetadata.php b/lib/Doctrine/ORM/Mapping/ColumnMetadata.php index 4610b459db1..27d356b538e 100644 --- a/lib/Doctrine/ORM/Mapping/ColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ColumnMetadata.php @@ -1,8 +1,24 @@ . + */ namespace Doctrine\ORM\Mapping; -use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\Type; class ColumnMetadata @@ -63,29 +79,23 @@ class ColumnMetadata protected $unique = false; /** - * ColumnMetadata constructor. - * - * @param string $tableName - * @param string $fieldName - * @param Type $type + * @return string */ - public function __construct($tableName, $fieldName, Type $type) + public function getTableName() { - $this->tableName = $tableName; - $this->fieldName = $fieldName; - $this->type = $type; + return $this->tableName; } /** - * {@inheritdoc} + * @param string $tableName */ - public function getTableName() + public function setTableName($tableName) { - return $this->tableName; + $this->tableName = $tableName; } /** - * {@inheritdoc} + * @return string */ public function getColumnName() { @@ -93,7 +103,15 @@ public function getColumnName() } /** - * {@inheritdoc} + * @param string $columnName + */ + public function setColumnName($columnName) + { + $this->columnName = $columnName; + } + + /** + * @return Type */ public function getType() { @@ -101,7 +119,15 @@ public function getType() } /** - * {@inheritdoc} + * @param Type $type + */ + public function setType(Type $type) + { + $this->type = $type; + } + + /** + * @return string */ public function getTypeName() { @@ -109,7 +135,7 @@ public function getTypeName() } /** - * {@inheritdoc} + * @return string */ public function getColumnDefinition() { @@ -117,7 +143,7 @@ public function getColumnDefinition() } /** - * {@inheritdoc} + * @param string $columnDefinition */ public function setColumnDefinition($columnDefinition) { @@ -189,7 +215,7 @@ public function setOptions(array $options) } /** - * {@inheritdoc} + * @param boolean $isPrimaryKey */ public function setPrimaryKey($isPrimaryKey) { @@ -197,7 +223,7 @@ public function setPrimaryKey($isPrimaryKey) } /** - * {@inheritdoc} + * @return boolean */ public function isPrimaryKey() { @@ -205,7 +231,7 @@ public function isPrimaryKey() } /** - * {@inheritdoc} + * @param boolean $isNullable */ public function setNullable($isNullable) { @@ -213,7 +239,7 @@ public function setNullable($isNullable) } /** - * {@inheritdoc} + * @return boolean */ public function isNullable() { @@ -221,7 +247,7 @@ public function isNullable() } /** - * {@inheritdoc} + * @param boolean $isUnique */ public function setUnique($isUnique) { @@ -229,7 +255,7 @@ public function setUnique($isUnique) } /** - * {@inheritdoc} + * @return boolean */ public function isUnique() { diff --git a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php index f6b0cf85f42..1621706e7d0 100644 --- a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php @@ -32,9 +32,9 @@ class DefaultQuoteStrategy implements QuoteStrategy /** * {@inheritdoc} */ - public function getColumnName(FieldMetadata $fieldMetadata, AbstractPlatform $platform) + public function getColumnName(ColumnMetadata $columnMetadata, AbstractPlatform $platform) { - return $platform->quoteIdentifier($fieldMetadata->getColumnName()); + return $platform->quoteIdentifier($columnMetadata->getColumnName()); } /** diff --git a/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php b/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php new file mode 100644 index 00000000000..f6fbd3bdf99 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php @@ -0,0 +1,24 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +class DiscriminatorColumnMetadata extends ColumnMetadata +{ +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 39aaab92502..36c1603b332 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -27,6 +27,7 @@ use Doctrine\ORM\Events; use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; use Doctrine\ORM\Mapping\MappingException; /** @@ -244,30 +245,26 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat ); if ($metadata->inheritanceType !== ClassMetadata::INHERITANCE_TYPE_NONE) { + $discrColumn = new DiscriminatorColumnMetadata(); + + $discrColumn->setTableName($metadata->getTableName()); + // Evaluate DiscriminatorColumn annotation if (isset($classAnnotations[Annotation\DiscriminatorColumn::class])) { $discrColumnAnnot = $classAnnotations[Annotation\DiscriminatorColumn::class]; - $metadata->setDiscriminatorColumn( - [ - 'name' => $discrColumnAnnot->name, - 'type' => $discrColumnAnnot->type ?: 'string', - 'length' => $discrColumnAnnot->length ?: 255, - 'columnDefinition' => $discrColumnAnnot->columnDefinition, - 'tableName' => $metadata->getTableName(), - ] - ); + $discrColumn->setColumnName($discrColumnAnnot->name); + $discrColumn->setColumnDefinition($discrColumnAnnot->columnDefinition); + $discrColumn->setType(Type::getType($discrColumnAnnot->type ?: 'string')); + $discrColumn->setLength($discrColumnAnnot->length ?: 255); } else { - $metadata->setDiscriminatorColumn( - [ - 'name' => 'dtype', - 'type' => 'string', - 'length' => 255, - 'tableName' => $metadata->getTableName(), - ] - ); + $discrColumn->setColumnName('dtype'); + $discrColumn->setType(Type::getType('string')); + $discrColumn->setLength(255); } + $metadata->setDiscriminatorColumn($discrColumn); + // Evaluate DiscriminatorMap annotation if (isset($classAnnotations[Annotation\DiscriminatorMap::class])) { $discrMapAnnot = $classAnnotations[Annotation\DiscriminatorMap::class]; diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index a0fcef2efeb..78d4d0e9505 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -19,13 +19,13 @@ namespace Doctrine\ORM\Mapping\Driver; -use Doctrine\DBAL\Types\Type; -use SimpleXMLElement; +use Doctrine\Common\Persistence\Mapping\ClassMetadata; use Doctrine\Common\Persistence\Mapping\Driver\FileDriver; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; -use Doctrine\Common\Persistence\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; use Doctrine\ORM\Mapping\MappingException; -use Doctrine\ORM\Mapping\ClassMetadata as Metadata; +use SimpleXMLElement; /** * XmlDriver is a metadata driver that enables mapping through XML files. @@ -167,31 +167,27 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $inheritanceType = (string) $xmlRoot['inheritance-type']; $metadata->setInheritanceType(constant('Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_' . $inheritanceType)); - if ($metadata->inheritanceType != Metadata::INHERITANCE_TYPE_NONE) { + if ($metadata->inheritanceType !== \Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_NONE) { + $discrColumn = new DiscriminatorColumnMetadata(); + + $discrColumn->setTableName($metadata->getTableName()); + // Evaluate if (isset($xmlRoot->{'discriminator-column'})) { - $discrColumn = $xmlRoot->{'discriminator-column'}; - - $metadata->setDiscriminatorColumn( - [ - 'name' => isset($discrColumn['name']) ? (string) $discrColumn['name'] : null, - 'type' => isset($discrColumn['type']) ? (string) $discrColumn['type'] : 'string', - 'length' => isset($discrColumn['length']) ? (string) $discrColumn['length'] : 255, - 'columnDefinition' => isset($discrColumn['column-definition']) ? (string) $discrColumn['column-definition'] : null, - 'tableName' => $metadata->getTableName(), - ] - ); + $mapping = $xmlRoot->{'discriminator-column'}; + + $discrColumn->setColumnName(isset($mapping['name']) ? (string) $mapping['name'] : 'dtype'); + $discrColumn->setType(Type::getType(isset($mapping['type']) ? (string) $mapping['type'] : 'string')); + $discrColumn->setLength(isset($mapping['length']) ? (string) $mapping['length'] : 255); + $discrColumn->setColumnDefinition(isset($mapping['column-definition']) ? (string) $mapping['column-definition'] : null); } else { - $metadata->setDiscriminatorColumn( - [ - 'name' => 'dtype', - 'type' => 'string', - 'length' => 255, - 'tableName' => $metadata->getTableName(), - ] - ); + $discrColumn->setColumnName('dtype'); + $discrColumn->setType(Type::getType('string')); + $discrColumn->setLength(255); } + $metadata->setDiscriminatorColumn($discrColumn); + // Evaluate if (isset($xmlRoot->{'discriminator-map'})) { $map = []; diff --git a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php index 8fb15743901..5bfe78f8805 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php @@ -20,10 +20,10 @@ namespace Doctrine\ORM\Mapping\Driver; use Doctrine\Common\Persistence\Mapping\ClassMetadata; +use Doctrine\Common\Persistence\Mapping\Driver\FileDriver; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; -use Doctrine\Common\Persistence\Mapping\Driver\FileDriver; -use Doctrine\ORM\Mapping\ClassMetadata as Metadata; +use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; use Doctrine\ORM\Mapping\MappingException; use Symfony\Component\Yaml\Yaml; @@ -176,30 +176,27 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) if (isset($element['inheritanceType'])) { $metadata->setInheritanceType(constant('Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_' . strtoupper($element['inheritanceType']))); - if ($metadata->inheritanceType != Metadata::INHERITANCE_TYPE_NONE) { + if ($metadata->inheritanceType !== \Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_NONE) { + $discrColumn = new DiscriminatorColumnMetadata(); + + $discrColumn->setTableName($metadata->getTableName()); + // Evaluate discriminatorColumn if (isset($element['discriminatorColumn'])) { - $discrColumn = $element['discriminatorColumn']; - $metadata->setDiscriminatorColumn( - [ - 'name' => isset($discrColumn['name']) ? (string) $discrColumn['name'] : null, - 'type' => isset($discrColumn['type']) ? (string) $discrColumn['type'] : 'string', - 'length' => isset($discrColumn['length']) ? (string) $discrColumn['length'] : 255, - 'columnDefinition' => isset($discrColumn['columnDefinition']) ? (string) $discrColumn['columnDefinition'] : null, - 'tableName' => $metadata->getTableName(), - ] - ); + $mapping = $element['discriminatorColumn']; + + $discrColumn->setColumnName(isset($mapping['name']) ? (string) $mapping['name'] : 'dtype'); + $discrColumn->setType(Type::getType(isset($mapping['type']) ? (string) $mapping['type'] : 'string')); + $discrColumn->setLength(isset($mapping['length']) ? (string) $mapping['length'] : 255); + $discrColumn->setColumnDefinition(isset($mapping['columnDefinition']) ? (string) $mapping['columnDefinition'] : null); } else { - $metadata->setDiscriminatorColumn( - [ - 'name' => 'dtype', - 'type' => 'string', - 'length' => 255, - 'tableName' => $metadata->getTableName(), - ] - ); + $discrColumn->setColumnName('dtype'); + $discrColumn->setType(Type::getType('string')); + $discrColumn->setLength(255); } + $metadata->setDiscriminatorColumn($discrColumn); + // Evaluate discriminatorMap if (isset($element['discriminatorMap'])) { $metadata->setDiscriminatorMap($element['discriminatorMap']); diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index 74eef2a2d70..d0d3c238cbc 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -1,4 +1,21 @@ . + */ namespace Doctrine\ORM\Mapping; @@ -27,22 +44,6 @@ class FieldMetadata extends ColumnMetadata implements Property */ private $name; - /** - * FieldMetadata constructor. - * - * @param ClassMetadata $declaringClass - * @param string $fieldName - * @param Type $type - */ - public function __construct(ClassMetadata $declaringClass, $fieldName, Type $type) - { - parent::__construct(null, $fieldName, $type); - - $this->declaringClass = $declaringClass; - $this->currentClass = $declaringClass; - $this->name = $fieldName; - } - /** * {@inheritdoc} */ @@ -52,11 +53,11 @@ public function getDeclaringClass() } /** - * {@inheritdoc} + * @param ClassMetadata $declaringClass */ - public function getName() + public function setDeclaringClass(ClassMetadata $declaringClass) { - return $this->name; + $this->declaringClass = $declaringClass; } /** @@ -76,19 +77,19 @@ public function setCurrentClass(ClassMetadata $currentClass) } /** - * @param string $tableName + * {@inheritdoc} */ - public function setTableName($tableName) + public function getName() { - $this->tableName = $tableName; + return $this->name; } /** - * @param string $columnName + * {@inheritdoc} */ - public function setColumnName($columnName) + public function setName($name) { - $this->columnName = $columnName; + $this->name = $name; } /** @@ -138,7 +139,7 @@ public function wakeupReflection(ReflectionService $reflectionService) { $this->reflection = $reflectionService->getAccessibleProperty( $this->getDeclaringClass()->name, - $this->fieldName + $this->name ); } diff --git a/lib/Doctrine/ORM/Mapping/Property.php b/lib/Doctrine/ORM/Mapping/Property.php index 923525155f6..be6763af061 100644 --- a/lib/Doctrine/ORM/Mapping/Property.php +++ b/lib/Doctrine/ORM/Mapping/Property.php @@ -1,4 +1,21 @@ . + */ namespace Doctrine\ORM\Mapping; diff --git a/lib/Doctrine/ORM/Mapping/QuoteStrategy.php b/lib/Doctrine/ORM/Mapping/QuoteStrategy.php index 978573d92e7..820728e36c5 100644 --- a/lib/Doctrine/ORM/Mapping/QuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/QuoteStrategy.php @@ -32,12 +32,12 @@ interface QuoteStrategy /** * Gets the (possibly quoted) column name for safe use in an SQL statement. * - * @param FieldMetadata $fieldMetadata + * @param ColumnMetadata $columnMetadata * @param AbstractPlatform $platform * * @return string */ - public function getColumnName(FieldMetadata $fieldMetadata, AbstractPlatform $platform); + public function getColumnName(ColumnMetadata $columnMetadata, AbstractPlatform $platform); /** * Gets the (possibly quoted) primary table name for safe use in an SQL statement. diff --git a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php index 927c00b1807..141a526a3a0 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Persisters\Collection; use Doctrine\Common\Collections\Criteria; +use Doctrine\ORM\Mapping\ColumnMetadata; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\Utility\PersisterHelper; @@ -243,14 +244,19 @@ private function deleteJoinedEntityCollection(PersistentCollection $collection) // 1) Build temporary table DDL $tempTable = $this->platform->getTemporaryTableName($rootClass->getTemporaryIdTableName()); - $idColumnNames = $rootClass->getIdentifierColumnNames(); - $idColumnList = implode(', ', $idColumnNames); + $idColumns = $rootClass->getIdentifierColumns($this->em); + $idColumnNameList = implode(', ', array_keys($idColumns)); $columnDefinitions = []; - foreach ($idColumnNames as $idColumnName) { - $columnDefinitions[$idColumnName] = [ + foreach ($idColumns as $columnName => $column) { + $type = $column instanceof ColumnMetadata + ? $column->getType() + : $column['type'] + ; + + $columnDefinitions[$columnName] = [ 'notnull' => true, - 'type' => PersisterHelper::getTypeOfColumn($idColumnName, $rootClass, $this->em), + 'type' => $type, ]; } @@ -265,7 +271,7 @@ private function deleteJoinedEntityCollection(PersistentCollection $collection) . ' FROM ' . $targetClass->name . ' t0 WHERE t0.' . $mapping['mappedBy'] . ' = :owner' )->setParameter('owner', $collection->getOwner()); - $statement = 'INSERT INTO ' . $tempTable . ' (' . $idColumnList . ') ' . $query->getSQL(); + $statement = 'INSERT INTO ' . $tempTable . ' (' . $idColumnNameList . ') ' . $query->getSQL(); $parameters = array_values($sourceClass->getIdentifierValues($collection->getOwner())); $numDeleted = $this->conn->executeUpdate($statement, $parameters); @@ -274,8 +280,8 @@ private function deleteJoinedEntityCollection(PersistentCollection $collection) foreach (array_reverse($classNames) as $className) { $tableName = $this->quoteStrategy->getTableName($this->em->getClassMetadata($className), $this->platform); - $statement = 'DELETE FROM ' . $tableName . ' WHERE (' . $idColumnList . ')' - . ' IN (SELECT ' . $idColumnList . ' FROM ' . $tempTable . ')'; + $statement = 'DELETE FROM ' . $tableName . ' WHERE (' . $idColumnNameList . ')' + . ' IN (SELECT ' . $idColumnNameList . ' FROM ' . $tempTable . ')'; $this->conn->executeUpdate($statement); } diff --git a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php index 771e7e1c30e..d8fea521b34 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php @@ -43,20 +43,13 @@ protected function prepareInsertData($entity) // Populate the discriminator column $discColumn = $this->class->discriminatorColumn; - $this->columnTypes[$discColumn['name']] = $discColumn['type']; + $this->columns[$discColumn->getColumnName()] = $discColumn; - $data[$this->getDiscriminatorColumnTableName()][$discColumn['name']] = $this->class->discriminatorValue; + $data[$discColumn->getTableName()][$discColumn->getColumnName()] = $this->class->discriminatorValue; return $data; } - /** - * Gets the name of the table that contains the discriminator column. - * - * @return string The table name. - */ - abstract protected function getDiscriminatorColumnTableName(); - /** * @param string $tableName The class that declares this field. The table this class is * mapped to must own the column for the given field. diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 1c7c0d272a0..21ab6095e23 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -27,6 +27,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ColumnMetadata; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\OptimisticLockException; use Doctrine\ORM\ORMException; @@ -137,25 +138,14 @@ class BasicEntityPersister implements EntityPersister protected $queuedInserts = []; /** - * The map of column names to DBAL mapping types of all prepared columns used - * when INSERTing or UPDATEing an entity. + * The map of column names to DBAL columns used when INSERTing or UPDATEing an entity. * - * @var array - * - * @see prepareInsertData($entity) - * @see prepareUpdateData($entity) - */ - protected $columnTypes = []; - - /** - * The map of quoted column names. - * - * @var array + * @var array * * @see prepareInsertData($entity) * @see prepareUpdateData($entity) */ - protected $quotedColumns = []; + protected $columns = []; /** * The INSERT SQL statement used for entities handled by this persister. @@ -275,8 +265,13 @@ public function executeInserts() if (isset($insertData[$tableName])) { $paramIndex = 1; - foreach ($insertData[$tableName] as $column => $value) { - $stmt->bindValue($paramIndex++, $value, $this->columnTypes[$column]); + foreach ($insertData[$tableName] as $columnName => $value) { + $type = $this->columns[$columnName] instanceof ColumnMetadata + ? $this->columns[$columnName]->getType() + : $this->columns[$columnName]['type'] + ; + + $stmt->bindValue($paramIndex++, $value, $type); } } @@ -412,27 +407,21 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat $params = []; foreach ($updateData as $columnName => $value) { - $placeholder = '?'; - $column = $columnName; - - switch (true) { - case isset($this->class->fieldNames[$columnName]): - $fieldName = $this->class->fieldNames[$columnName]; - $property = $this->class->getProperty($fieldName); - $column = $this->quoteStrategy->getColumnName($property, $this->platform); - $placeholder = $property->getType()->convertToDatabaseValueSQL('?', $this->platform); - - break; - - case isset($this->quotedColumns[$columnName]): - $column = $this->quotedColumns[$columnName]; + $column = $this->columns[$columnName]; - break; + if ($column instanceof ColumnMetadata) { + $quotedColumnName = $this->quoteStrategy->getColumnName($column, $this->platform); + $type = $column->getType(); + $placeholder = $type->convertToDatabaseValueSQL('?', $this->platform); + } else { + $quotedColumnName = $this->quoteStrategy->getJoinColumnName($column, $this->class, $this->platform); + $type = $column['type']; + $placeholder = '?'; } - $params[] = $value; - $set[] = $column . ' = ' . $placeholder; - $types[] = $this->columnTypes[$columnName]; + $set[] = $quotedColumnName . ' = ' . $placeholder; + $params[] = $value; + $types[] = $type; } $where = []; @@ -626,12 +615,12 @@ protected function prepareUpdateData($entity) $result = []; $uow = $this->em->getUnitOfWork(); - if (($versioned = $this->class->isVersioned) != false) { + if (($versioned = $this->class->isVersioned) !== false) { $versionField = $this->class->versionField; } foreach ($uow->getEntityChangeSet($entity) as $field => $change) { - if (isset($versionField) && $versionField == $field) { + if (isset($versionField) && $versionField === $field) { continue; } @@ -645,7 +634,7 @@ protected function prepareUpdateData($entity) $property = $this->class->getProperty($field); $columnName = $property->getColumnName(); - $this->columnTypes[$columnName] = $property->getType(); + $this->columns[$columnName] = $property; $result[$this->getOwningTable($field)][$columnName] = $newVal; @@ -684,14 +673,14 @@ protected function prepareUpdateData($entity) foreach ($assoc['joinColumns'] as $joinColumn) { $sourceColumn = $joinColumn['name']; $targetColumn = $joinColumn['referencedColumnName']; - $quotedColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); + $targetField = $targetClass->getFieldForColumn($targetColumn); - $this->quotedColumns[$sourceColumn] = $quotedColumn; - $this->columnTypes[$sourceColumn] = PersisterHelper::getTypeOfColumn($targetColumn, $targetClass, $this->em); + $this->columns[$sourceColumn] = array_merge( + $joinColumn, + ['type' => PersisterHelper::getTypeOfColumn($targetColumn, $targetClass, $this->em)] + ); - $result[$owningTable][$sourceColumn] = $newValId - ? $newValId[$targetClass->getFieldForColumn($targetColumn)] - : null; + $result[$owningTable][$sourceColumn] = $newValId ? $newValId[$targetField] : null; } } @@ -1417,25 +1406,25 @@ public function getInsertSQL() return $this->insertSql; } - $values = []; - $columns = array_unique($columns); + $quotedColumns = []; + $values = []; - foreach ($columns as $column) { - $placeholder = '?'; + foreach ($columns as $columnName) { + $column = $this->columns[$columnName]; - if (isset($this->class->fieldNames[$column])) { - $fieldName = $this->class->fieldNames[$column]; - $property = $this->class->getProperty($fieldName); - $placeholder = $property->getType()->convertToDatabaseValueSQL('?', $this->platform); + if ($column instanceof ColumnMetadata) { + $quotedColumns[] = $this->quoteStrategy->getColumnName($column, $this->platform); + $values[] = $column->getType()->convertToDatabaseValueSQL('?', $this->platform); + } else { + $quotedColumns[] = $this->quoteStrategy->getJoinColumnName($column, $this->class, $this->platform); + $values[] = $column['type']->convertToDatabaseValueSQL('?', $this->platform); } - - $values[] = $placeholder; } - $columns = implode(', ', $columns); - $values = implode(', ', $values); + $quotedColumns = implode(', ', $quotedColumns); + $values = implode(', ', $values); - $this->insertSql = sprintf('INSERT INTO %s (%s) VALUES (%s)', $tableName, $columns, $values); + $this->insertSql = sprintf('INSERT INTO %s (%s) VALUES (%s)', $tableName, $quotedColumns, $values); return $this->insertSql; } @@ -1465,8 +1454,18 @@ protected function getInsertColumnList() $assoc = $this->class->associationMappings[$name]; if ($assoc['isOwningSide'] && $assoc['type'] & ClassMetadata::TO_ONE) { + $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); + foreach ($assoc['joinColumns'] as $joinColumn) { - $columns[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); + $sourceColumn = $joinColumn['name']; + $targetColumn = $joinColumn['referencedColumnName']; + + $columns[] = $sourceColumn; + + $this->columns[$sourceColumn] = array_merge( + $joinColumn, + ['type' => PersisterHelper::getTypeOfColumn($targetColumn, $targetClass, $this->em)] + ); } } @@ -1474,10 +1473,12 @@ protected function getInsertColumnList() } if (! $this->class->isIdGeneratorIdentity() || $this->class->identifier[0] !== $name) { - $property = $this->class->getProperty($name); + $property = $this->class->getProperty($name); + $columnName = $property->getColumnName(); + + $columns[] = $columnName; - $columns[] = $this->quoteStrategy->getColumnName($property, $this->platform); - $this->columnTypes[$name] = $property->getType(); + $this->columns[$columnName] = $property; } } diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index 48230e62a7c..13a23e7009e 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -23,6 +23,7 @@ use Doctrine\DBAL\LockMode; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ColumnMetadata; use Doctrine\ORM\Utility\PersisterHelper; /** @@ -52,18 +53,6 @@ class JoinedSubclassPersister extends AbstractEntityInheritancePersister */ private $quotedTableMap = []; - /** - * {@inheritdoc} - */ - protected function getDiscriminatorColumnTableName() - { - $class = ($this->class->name !== $this->class->rootEntityName) - ? $this->em->getClassMetadata($this->class->rootEntityName) - : $this->class; - - return $class->getTableName(); - } - /** * This function finds the ClassMetadata instance in an inheritance hierarchy * that is responsible for enabling versioning. @@ -166,7 +155,12 @@ public function executeInserts() $paramIndex = 1; foreach ($insertData[$rootTableName] as $columnName => $value) { - $rootTableStmt->bindValue($paramIndex++, $value, $this->columnTypes[$columnName]); + $type = $this->columns[$columnName] instanceof ColumnMetadata + ? $this->columns[$columnName]->getType() + : $this->columns[$columnName]['type'] + ; + + $rootTableStmt->bindValue($paramIndex++, $value, $type); } $rootTableStmt->execute(); @@ -197,14 +191,26 @@ public function executeInserts() : []; foreach ((array) $id as $idName => $idVal) { - $type = isset($this->columnTypes[$idName]) ? $this->columnTypes[$idName] : Type::getType('string'); + $type = Type::getType('string'); + + if (isset($this->columns[$idName])) { + $type = $this->columns[$idName] instanceof ColumnMetadata + ? $this->columns[$idName]->getType() + : $this->columns[$idName]['type'] + ; + } $stmt->bindValue($paramIndex++, $idVal, $type); } foreach ($data as $columnName => $value) { if (!is_array($id) || !isset($id[$columnName])) { - $stmt->bindValue($paramIndex++, $value, $this->columnTypes[$columnName]); + $type = $this->columns[$columnName] instanceof ColumnMetadata + ? $this->columns[$columnName]->getType() + : $this->columns[$columnName]['type'] + ; + + $stmt->bindValue($paramIndex++, $value, $type); } } @@ -237,10 +243,10 @@ public function update($entity) $isVersioned = $this->class->isVersioned; foreach ($updateData as $tableName => $data) { - $tableName = $this->quotedTableMap[$tableName]; - $versioned = $isVersioned && $this->getVersionedClassMetadata()->getTableName() === $tableName; + $quotedTableName = $this->quotedTableMap[$tableName]; + $versioned = $isVersioned && $this->getVersionedClassMetadata()->getTableName() === $tableName; - $this->updateTable($entity, $tableName, $data, $versioned); + $this->updateTable($entity, $quotedTableName, $data, $versioned); } // Make sure the table with the version column is updated even if no columns on that @@ -267,7 +273,7 @@ public function update($entity) public function delete($entity) { $identifier = $this->em->getUnitOfWork()->getEntityIdentifier($entity); - $id = array_combine($this->class->getIdentifierColumnNames(), $identifier); + $id = array_combine(array_keys($this->class->getIdentifierColumns($this->em)), $identifier); $this->deleteJoinTableRecords($identifier); @@ -400,7 +406,7 @@ public function getCountSQL($criteria = []) protected function getLockTablesSql($lockMode) { $joinSql = ''; - $identifierColumns = $this->class->getIdentifierColumnNames(); + $identifierColumns = $this->class->getIdentifierColumns($this->em); $baseTableAlias = $this->getSQLTableAlias($this->class->getTableName()); // INNER JOIN parent tables @@ -411,7 +417,12 @@ protected function getLockTablesSql($lockMode) $joinSql .= ' INNER JOIN ' . $this->quoteStrategy->getTableName($parentClass, $this->platform) . ' ' . $tableAlias . ' ON '; foreach ($identifierColumns as $idColumn) { - $conditions[] = $baseTableAlias . '.' . $idColumn . ' = ' . $tableAlias . '.' . $idColumn; + $quotedColumnName = $idColumn instanceof ColumnMetadata + ? $this->quoteStrategy->getColumnName($idColumn, $this->platform) + : $this->quoteStrategy->getJoinColumnName($idColumn, $this->em->getClassMetadata($idColumn['targetEntity']), $this->platform) + ; + + $conditions[] = $baseTableAlias . '.' . $quotedColumnName . ' = ' . $tableAlias . '.' . $quotedColumnName; } $joinSql .= implode(' AND ', $conditions); @@ -432,15 +443,9 @@ protected function getSelectColumnsSQL() return $this->currentPersisterContext->selectColumnListSql; } - $columnList = []; - $discrMapping = $this->class->discriminatorColumn; - $discrColumn = $discrMapping['name']; - $discrColumnType = $discrMapping['type']; - $resultColumnName = $this->platform->getSQLResultCasing($discrColumn); - $this->currentPersisterContext->rsm->addEntityResult($this->class->name, 'r'); - $this->currentPersisterContext->rsm->setDiscriminatorColumn('r', $resultColumnName); - $this->currentPersisterContext->rsm->addMetaResult('r', $resultColumnName, $discrColumn, false, $discrColumnType); + + $columnList = []; // Add regular columns foreach ($this->class->getProperties() as $fieldName => $property) { @@ -463,7 +468,18 @@ protected function getSelectColumnsSQL() } // Add discriminator column (DO NOT ALIAS, see AbstractEntityInheritancePersister#processSQLResult). - $columnList[] = $this->getSQLTableAlias($discrMapping['tableName']) . '.' . $discrColumn; + $discrColumn = $this->class->discriminatorColumn; + $discrColumnName = $discrColumn->getColumnName(); + $discrColumnType = $discrColumn->getType(); + $resultColumnName = $this->platform->getSQLResultCasing($discrColumnName); + + $this->currentPersisterContext->rsm->setDiscriminatorColumn('r', $resultColumnName); + $this->currentPersisterContext->rsm->addMetaResult('r', $resultColumnName, $discrColumnName, false, $discrColumnType); + + $columnList[] = $discrColumnType->convertToDatabaseValueSQL( + $this->getSQLTableAlias($discrColumn->getTableName()) . '.' . $discrColumnName, + $this->platform + ); // sub tables foreach ($this->class->subClasses as $subClassName) { @@ -505,10 +521,17 @@ protected function getSelectColumnsSQL() protected function getInsertColumnList() { // Identifier columns must always come first in the column list of subclasses. - $columns = $this->class->parentClasses - ? $this->class->getIdentifierColumnNames() + $columns = []; + $parentColumns = $this->class->parentClasses + ? $this->class->getIdentifierColumns($this->em) : []; + foreach ($parentColumns as $columnName => $column) { + $columns[] = $columnName; + + $this->columns[$columnName] = $column; + } + foreach ($this->class->reflFields as $name => $field) { $property = $this->class->getProperty($name); @@ -521,21 +544,44 @@ protected function getInsertColumnList() if (isset($this->class->associationMappings[$name])) { $assoc = $this->class->associationMappings[$name]; - if ($assoc['type'] & ClassMetadata::TO_ONE && $assoc['isOwningSide']) { - foreach ($assoc['targetToSourceKeyColumns'] as $sourceCol) { - $columns[] = $sourceCol; + + if ($assoc['isOwningSide'] && $assoc['type'] & ClassMetadata::TO_ONE) { + $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); + + foreach ($assoc['joinColumns'] as $joinColumn) { + $sourceColumn = $joinColumn['name']; + $targetColumn = $joinColumn['referencedColumnName']; + + $columns[] = $sourceColumn; + + $this->columns[$sourceColumn] = array_merge( + $joinColumn, + ['type' => PersisterHelper::getTypeOfColumn($targetColumn, $targetClass, $this->em)] + ); } } - } else if ($this->class->name != $this->class->rootEntityName || - ! $this->class->isIdGeneratorIdentity() || $this->class->identifier[0] !== $name) { - $columns[] = $this->quoteStrategy->getColumnName($property, $this->platform); - $this->columnTypes[$name] = $property->getType(); + + continue; + } + + if ($this->class->name != $this->class->rootEntityName + || ! $this->class->isIdGeneratorIdentity() || $this->class->identifier[0] !== $name) { + $columnName = $property->getColumnName(); + + $columns[] = $columnName; + + $this->columns[$columnName] = $property; } } // Add discriminator column if it is the topmost class. - if ($this->class->name == $this->class->rootEntityName) { - $columns[] = $this->class->discriminatorColumn['name']; + if ($this->class->name === $this->class->rootEntityName) { + $discrColumn = $this->class->discriminatorColumn; + $discrColumnName = $discrColumn->getColumnName(); + + $columns[] = $discrColumnName; + + $this->columns[$discrColumnName] = $discrColumn; } return $columns; @@ -557,8 +603,8 @@ protected function assignDefaultVersionValue($entity, array $id) */ private function getJoinSql($baseTableAlias) { - $joinSql = ''; - $identifierColumn = $this->class->getIdentifierColumnNames(); + $joinSql = ''; + $identifierColumns = $this->class->getIdentifierColumns($this->em); // INNER JOIN parent tables foreach ($this->class->parentClasses as $parentClassName) { @@ -567,9 +613,13 @@ private function getJoinSql($baseTableAlias) $tableAlias = $this->getSQLTableAlias($parentClass->getTableName()); $joinSql .= ' INNER JOIN ' . $this->quoteStrategy->getTableName($parentClass, $this->platform) . ' ' . $tableAlias . ' ON '; + foreach ($identifierColumns as $idColumn) { + $quotedColumnName = $idColumn instanceof ColumnMetadata + ? $this->quoteStrategy->getColumnName($idColumn, $this->platform) + : $this->quoteStrategy->getJoinColumnName($idColumn, $this->em->getClassMetadata($idColumn['targetEntity']), $this->platform) + ; - foreach ($identifierColumn as $idColumn) { - $conditions[] = $baseTableAlias . '.' . $idColumn . ' = ' . $tableAlias . '.' . $idColumn; + $conditions[] = $baseTableAlias . '.' . $quotedColumnName . ' = ' . $tableAlias . '.' . $quotedColumnName; } $joinSql .= implode(' AND ', $conditions); @@ -582,8 +632,13 @@ private function getJoinSql($baseTableAlias) $tableAlias = $this->getSQLTableAlias($subClass->getTableName()); $joinSql .= ' LEFT JOIN ' . $this->quoteStrategy->getTableName($subClass, $this->platform) . ' ' . $tableAlias . ' ON '; - foreach ($identifierColumn as $idColumn) { - $conditions[] = $baseTableAlias . '.' . $idColumn . ' = ' . $tableAlias . '.' . $idColumn; + foreach ($identifierColumns as $idColumn) { + $quotedColumnName = $idColumn instanceof ColumnMetadata + ? $this->quoteStrategy->getColumnName($idColumn, $this->platform) + : $this->quoteStrategy->getJoinColumnName($idColumn, $this->em->getClassMetadata($idColumn['targetEntity']), $this->platform) + ; + + $conditions[] = $baseTableAlias . '.' . $quotedColumnName . ' = ' . $tableAlias . '.' . $quotedColumnName; } $joinSql .= implode(' AND ', $conditions); diff --git a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php index 5101daab045..e819aca763a 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php @@ -35,14 +35,6 @@ */ class SingleTablePersister extends AbstractEntityInheritancePersister { - /** - * {@inheritdoc} - */ - protected function getDiscriminatorColumnTableName() - { - return $this->class->getTableName(); - } - /** * {@inheritdoc} */ @@ -58,15 +50,16 @@ protected function getSelectColumnsSQL() $tableAlias = $this->getSQLTableAlias($rootClass->getTableName()); // Append discriminator column - $discrColumn = $this->class->discriminatorColumn['name']; - $discrColumnType = $this->class->discriminatorColumn['type']; - - $columnList[] = $tableAlias . '.' . $discrColumn; - - $resultColumnName = $this->platform->getSQLResultCasing($discrColumn); + $discrColumn = $this->class->discriminatorColumn; + $discrColumnName = $discrColumn->getColumnName(); + $discrColumnType = $discrColumn->getType(); + $resultColumnName = $this->platform->getSQLResultCasing($discrColumnName); + $quotedColumnName = $this->quoteStrategy->getColumnName($discrColumn, $this->platform); $this->currentPersisterContext->rsm->setDiscriminatorColumn('r', $resultColumnName); - $this->currentPersisterContext->rsm->addMetaResult('r', $resultColumnName, $discrColumn, false, $discrColumnType); + $this->currentPersisterContext->rsm->addMetaResult('r', $resultColumnName, $discrColumnName, false, $discrColumnType); + + $columnList[] = $discrColumnType->convertToDatabaseValueSQL($tableAlias . '.' . $quotedColumnName, $this->platform); // Append subclass columns foreach ($this->class->subClasses as $subClassName) { @@ -110,7 +103,12 @@ protected function getInsertColumnList() $columns = parent::getInsertColumnList(); // Add discriminator column to the INSERT SQL - $columns[] = $this->class->discriminatorColumn['name']; + $discrColumn = $this->class->discriminatorColumn; + $discrColumnName = $discrColumn->getColumnName(); + + $columns[] = $discrColumnName; + + $this->columns[$discrColumnName] = $discrColumn; return $columns; } @@ -168,11 +166,16 @@ protected function getSelectConditionDiscriminatorValueSQL() $values[] = $this->conn->quote($discrValues[$subclassName]); } - $values = implode(', ', $values); - $discColumn = $this->class->discriminatorColumn['name']; - $tableAlias = $this->getSQLTableAlias($this->class->getTableName()); + $discrColumn = $this->class->discriminatorColumn; + $discrColumnType = $discrColumn->getType(); + $tableAlias = $this->getSQLTableAlias($discrColumn->getTableName()); + $quotedColumnName = $this->quoteStrategy->getColumnName($discrColumn, $this->platform); - return $tableAlias . '.' . $discColumn . ' IN (' . $values . ')'; + return sprintf( + '%s IN (%s)', + $discrColumnType->convertToDatabaseValueSQL($tableAlias . '.' . $quotedColumnName, $this->platform), + implode(', ', $values) + ); } /** diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php index 655d1357172..ae166a58751 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Query\Exec; use Doctrine\DBAL\Connection; +use Doctrine\ORM\Mapping\ColumnMetadata; use Doctrine\ORM\Query\AST; use Doctrine\ORM\Utility\PersisterHelper; @@ -69,15 +70,15 @@ public function __construct(AST\Node $AST, $sqlWalker) $primaryDqlAlias = $AST->deleteClause->aliasIdentificationVariable; $rootClass = $em->getClassMetadata($primaryClass->rootEntityName); - $tempTable = $platform->getTemporaryTableName($rootClass->getTemporaryIdTableName()); - $idColumnNames = $rootClass->getIdentifierColumnNames(); - $idColumnList = implode(', ', $idColumnNames); + $tempTable = $platform->getTemporaryTableName($rootClass->getTemporaryIdTableName()); + $idColumns = $rootClass->getIdentifierColumns($em); + $idColumnNameList = implode(', ', array_keys($idColumns)); // 1. Create an INSERT INTO temptable ... SELECT identifiers WHERE $AST->getWhereClause() $sqlWalker->setSQLTableAlias($primaryClass->getTableName(), 't0', $primaryDqlAlias); - $this->_insertSql = 'INSERT INTO ' . $tempTable . ' (' . $idColumnList . ')' - . ' SELECT t0.' . implode(', t0.', $idColumnNames); + $this->_insertSql = 'INSERT INTO ' . $tempTable . ' (' . $idColumnNameList . ')' + . ' SELECT t0.' . implode(', t0.', array_keys($idColumns)); $rangeDecl = new AST\RangeVariableDeclaration($primaryClass->name, $primaryDqlAlias); $fromClause = new AST\FromClause([new AST\IdentificationVariableDeclaration($rangeDecl, null, [])]); @@ -89,25 +90,31 @@ public function __construct(AST\Node $AST, $sqlWalker) } // 2. Create ID subselect statement used in DELETE ... WHERE ... IN (subselect) - $idSubselect = 'SELECT ' . $idColumnList . ' FROM ' . $tempTable; + $idSubselect = 'SELECT ' . $idColumnNameList . ' FROM ' . $tempTable; // 3. Create and store DELETE statements $classNames = array_merge($primaryClass->parentClasses, [$primaryClass->name], $primaryClass->subClasses); foreach (array_reverse($classNames) as $className) { $tableName = $quoteStrategy->getTableName($em->getClassMetadata($className), $platform); $this->_sqlStatements[] = 'DELETE FROM ' . $tableName - . ' WHERE (' . $idColumnList . ') IN (' . $idSubselect . ')'; + . ' WHERE (' . $idColumnNameList . ') IN (' . $idSubselect . ')'; } // 4. Store DDL for temporary identifier table. $columnDefinitions = []; - foreach ($idColumnNames as $idColumnName) { - $columnDefinitions[$idColumnName] = [ + foreach ($idColumns as $columnName => $column) { + $type = $column instanceof ColumnMetadata + ? $column->getType() + : $column['type'] + ; + + $columnDefinitions[$columnName] = [ 'notnull' => true, - 'type' => PersisterHelper::getTypeOfColumn($idColumnName, $rootClass, $em), + 'type' => $type, ]; } + $this->_createTempTableSql = $platform->getCreateTemporaryTableSnippetSQL() . ' ' . $tempTable . ' (' . $platform->getColumnDeclarationListSQL($columnDefinitions) . ')'; $this->_dropTempTableSql = $platform->getDropTemporaryTableSQL($tempTable); diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php index 0138aee0a2a..ae300cf7fce 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Query\Exec; use Doctrine\DBAL\Connection; +use Doctrine\ORM\Mapping\ColumnMetadata; use Doctrine\ORM\Query\AST; use Doctrine\ORM\Query\ParameterTypeInferer; use Doctrine\ORM\Utility\PersisterHelper; @@ -80,15 +81,15 @@ public function __construct(AST\Node $AST, $sqlWalker) $updateItems = $updateClause->updateItems; - $tempTable = $platform->getTemporaryTableName($rootClass->getTemporaryIdTableName()); - $idColumnNames = $rootClass->getIdentifierColumnNames(); - $idColumnList = implode(', ', $idColumnNames); + $tempTable = $platform->getTemporaryTableName($rootClass->getTemporaryIdTableName()); + $idColumns = $rootClass->getIdentifierColumns($em); + $idColumnNameList = implode(', ', array_keys($idColumns)); // 1. Create an INSERT INTO temptable ... SELECT identifiers WHERE $AST->getWhereClause() $sqlWalker->setSQLTableAlias($primaryClass->getTableName(), 't0', $updateClause->aliasIdentificationVariable); - $this->_insertSql = 'INSERT INTO ' . $tempTable . ' (' . $idColumnList . ')' - . ' SELECT t0.' . implode(', t0.', $idColumnNames); + $this->_insertSql = 'INSERT INTO ' . $tempTable . ' (' . $idColumnNameList . ')' + . ' SELECT t0.' . implode(', t0.', array_keys($idColumns)); $rangeDecl = new AST\RangeVariableDeclaration($primaryClass->name, $updateClause->aliasIdentificationVariable); $fromClause = new AST\FromClause([new AST\IdentificationVariableDeclaration($rangeDecl, null, [])]); @@ -96,7 +97,7 @@ public function __construct(AST\Node $AST, $sqlWalker) $this->_insertSql .= $sqlWalker->walkFromClause($fromClause); // 2. Create ID subselect statement used in UPDATE ... WHERE ... IN (subselect) - $idSubselect = 'SELECT ' . $idColumnList . ' FROM ' . $tempTable; + $idSubselect = 'SELECT ' . $idColumnNameList . ' FROM ' . $tempTable; // 3. Create and store UPDATE statements $classNames = array_merge($primaryClass->parentClasses, [$primaryClass->name], $primaryClass->subClasses); @@ -132,7 +133,7 @@ public function __construct(AST\Node $AST, $sqlWalker) } if ($affected) { - $this->_sqlStatements[$i] = $updateSql . ' WHERE (' . $idColumnList . ') IN (' . $idSubselect . ')'; + $this->_sqlStatements[$i] = $updateSql . ' WHERE (' . $idColumnNameList . ') IN (' . $idSubselect . ')'; } } @@ -144,10 +145,15 @@ public function __construct(AST\Node $AST, $sqlWalker) // 4. Store DDL for temporary identifier table. $columnDefinitions = []; - foreach ($idColumnNames as $idColumnName) { - $columnDefinitions[$idColumnName] = [ + foreach ($idColumns as $columnName => $column) { + $type = $column instanceof ColumnMetadata + ? $column->getType() + : $column['type'] + ; + + $columnDefinitions[$columnName] = [ 'notnull' => true, - 'type' => PersisterHelper::getTypeOfColumn($idColumnName, $rootClass, $em), + 'type' => $type, ]; } @@ -181,7 +187,10 @@ public function execute(Connection $conn, array $params, array $types) if (isset($this->_sqlParameters[$key])) { foreach ($this->_sqlParameters[$key] as $parameterKey => $parameterName) { $paramValues[] = $params[$parameterKey]; - $paramTypes[] = isset($types[$parameterKey]) ? $types[$parameterKey] : ParameterTypeInferer::inferType($params[$parameterKey]); + $paramTypes[] = isset($types[$parameterKey]) + ? $types[$parameterKey] + : ParameterTypeInferer::inferType($params[$parameterKey]) + ; } } diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index 5a750680a50..0b4fd2f6688 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -286,10 +286,12 @@ public function addNamedNativeQueryResultClassMapping(ClassMetadata $class, $res $this->addEntityResult($class->name, $alias); if ($classMetadata->discriminatorColumn) { - $discrColumn = $classMetadata->discriminatorColumn; + $discrColumn = $classMetadata->discriminatorColumn; + $discrColumnName = $discrColumn->getColumnName(); + $discrColumnType = $discrColumn->getType(); - $this->setDiscriminatorColumn($alias, $discrColumn['name']); - $this->addMetaResult($alias, $discrColumn['name'], $discrColumn['fieldName'], false, $discrColumn['type']); + $this->setDiscriminatorColumn($alias, $discrColumnName); + $this->addMetaResult($alias, $discrColumnName, $discrColumnName, false, $discrColumnType); } foreach ($classMetadata->getColumnNames() as $key => $columnName) { @@ -379,11 +381,12 @@ public function addNamedNativeQueryResultSetMapping(ClassMetadata $class, $resul public function addNamedNativeQueryEntityResultMapping(ClassMetadata $classMetadata, array $entityMapping, $alias) { if (isset($entityMapping['discriminatorColumn']) && $entityMapping['discriminatorColumn']) { - $discriminatorColumn = $entityMapping['discriminatorColumn']; - $discriminatorType = $classMetadata->discriminatorColumn['type']; + $discrColumn = $classMetadata->discriminatorColumn; + $discrColumnName = $entityMapping['discriminatorColumn']; + $discrColumnType = $discrColumn->getType(); - $this->setDiscriminatorColumn($alias, $discriminatorColumn); - $this->addMetaResult($alias, $discriminatorColumn, $discriminatorColumn, false, $discriminatorType); + $this->setDiscriminatorColumn($alias, $discrColumnName); + $this->addMetaResult($alias, $discrColumnName, $discrColumnName, false, $discrColumnType); } if (isset($entityMapping['fields']) && !empty($entityMapping['fields'])) { diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 34845e6dad8..cb98dbd6603 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -458,12 +458,18 @@ private function _generateDiscriminatorColumnConditionSQL(array $dqlAliases) $values[] = $conn->quote($this->em->getClassMetadata($subclassName)->discriminatorValue); } - $quotedColumnName = $this->platform->quoteIdentifier($class->discriminatorColumn['name']); + $discrColumn = $class->discriminatorColumn; + $discrColumnType = $discrColumn->getType(); + $quotedColumnName = $this->quoteStrategy->getColumnName($discrColumn, $this->platform); $sqlTableAlias = ($this->useSqlTableAliases) - ? $this->getSQLTableAlias($class->discriminatorColumn['tableName'], $dqlAlias) . '.' + ? $this->getSQLTableAlias($discrColumn->getTableName(), $dqlAlias) . '.' : ''; - $sqlParts[] = $sqlTableAlias . $quotedColumnName . ' IN (' . implode(', ', $values) . ')'; + $sqlParts[] = sprintf( + '%s IN (%s)', + $discrColumnType->convertToDatabaseValueSQL($sqlTableAlias . $quotedColumnName, $this->platform), + implode(', ', $values) + ); } $sql = implode(' AND ', $sqlParts); @@ -739,17 +745,21 @@ public function walkSelectClause($selectClause) if ($class->isInheritanceTypeSingleTable() || $class->isInheritanceTypeJoined()) { // Add discriminator columns to SQL - $rootClass = $this->em->getClassMetadata($class->rootEntityName); - $discrColumn = $rootClass->discriminatorColumn; - $tblAlias = $this->getSQLTableAlias($discrColumn['tableName'], $dqlAlias); - $discrColumn = $rootClass->discriminatorColumn; - $columnAlias = $this->getSQLColumnAlias($discrColumn['name']); - $quotedColumnName = $this->platform->quoteIdentifier($discrColumn['name']); - - $sqlSelectExpressions[] = $tblAlias . '.' . $quotedColumnName . ' AS ' . $columnAlias; + $discrColumn = $class->discriminatorColumn; + $discrColumnName = $discrColumn->getColumnName(); + $discrColumnType = $discrColumn->getType(); + $quotedColumnName = $this->quoteStrategy->getColumnName($discrColumn, $this->platform); + $sqlTableAlias = $this->getSQLTableAlias($discrColumn->getTableName(), $dqlAlias); + $sqlColumnAlias = $this->getSQLColumnAlias($discrColumnName); + + $sqlSelectExpressions[] = sprintf( + '%s AS %s', + $discrColumnType->convertToDatabaseValueSQL($sqlTableAlias . '.' . $quotedColumnName, $this->platform), + $sqlColumnAlias + ); - $this->rsm->setDiscriminatorColumn($dqlAlias, $columnAlias); - $this->rsm->addMetaResult($dqlAlias, $columnAlias, $discrColumn['fieldName'], false, $discrColumn['type']); + $this->rsm->setDiscriminatorColumn($dqlAlias, $sqlColumnAlias); + $this->rsm->addMetaResult($dqlAlias, $sqlColumnAlias, $discrColumnName, false, $discrColumnType); } // Add foreign key columns to SQL, if necessary @@ -2027,20 +2037,15 @@ public function walkInExpression($inExpr) */ public function walkInstanceOfExpression($instanceOfExpr) { - $sql = ''; - - $dqlAlias = $instanceOfExpr->identificationVariable; - $discrClass = $class = $this->queryComponents[$dqlAlias]['metadata']; - - if ($class->discriminatorColumn) { - $discrClass = $this->em->getClassMetadata($class->rootEntityName); - } - - if ($this->useSqlTableAliases) { - $sql .= $this->getSQLTableAlias($discrClass->getTableName(), $dqlAlias) . '.'; - } - - $sql .= $class->discriminatorColumn['name'] . ($instanceOfExpr->not ? ' NOT IN ' : ' IN '); + $dqlAlias = $instanceOfExpr->identificationVariable; + $class = $this->queryComponents[$dqlAlias]['metadata']; + $discrMap = array_flip($class->discriminatorMap); + $discrColumn = $class->discriminatorColumn; + $discrColumnType = $discrColumn->getType(); + $quotedColumnName = $this->quoteStrategy->getColumnName($discrColumn, $this->platform); + $sqlTableAlias = $this->useSqlTableAliases + ? $this->getSQLTableAlias($discrColumn->getTableName(), $dqlAlias) . '.' + : ''; $sqlParameterList = []; @@ -2054,12 +2059,11 @@ public function walkInstanceOfExpression($instanceOfExpr) } // Get name from ClassMetadata to resolve aliases. - $entityClassName = $this->em->getClassMetadata($parameter)->name; + $entityClass = $this->em->getClassMetadata($parameter); + $entityClassName = $entityClass->name; $discriminatorValue = $class->discriminatorValue; if ($entityClassName !== $class->name) { - $discrMap = array_flip($class->discriminatorMap); - if ( ! isset($discrMap[$entityClassName])) { throw QueryException::instanceOfUnrelatedClass($entityClassName, $class->rootEntityName); } @@ -2070,9 +2074,12 @@ public function walkInstanceOfExpression($instanceOfExpr) $sqlParameterList[] = $this->conn->quote($discriminatorValue); } - $sql .= '(' . implode(', ', $sqlParameterList) . ')'; - - return $sql; + return sprintf( + '%s %sIN (%s)', + $discrColumnType->convertToDatabaseValueSQL($sqlTableAlias . $quotedColumnName, $this->platform), + ($instanceOfExpr->not ? 'NOT ' : ''), + implode(', ', $sqlParameterList) + ); } /** diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index 7edc3cc40df..7fe8983df2c 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -21,6 +21,7 @@ use Doctrine\Common\Persistence\Mapping\MappingException; use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\ColumnMetadata; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Helper\Table; use Symfony\Component\Console\Input\InputArgument; @@ -103,7 +104,10 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage $this->formatField('SQL result set mappings', $metadata->sqlResultSetMappings), $this->formatField('Identifier', $metadata->identifier), $this->formatField('Inheritance type', $metadata->inheritanceType), - $this->formatField('Discriminator column', $metadata->discriminatorColumn), + $this->formatField('Discriminator column', '') + ], + $this->formatColumn($metadata->discriminatorColumn), + [ $this->formatField('Discriminator value', $metadata->discriminatorValue), $this->formatField('Discriminator map', $metadata->discriminatorMap), $this->formatField('Generator type', $metadata->generatorType), @@ -291,18 +295,38 @@ private function formatPropertyMappings(array $propertyMappings) foreach ($propertyMappings as $propertyName => $property) { $output[] = $this->formatField(sprintf(' %s', $propertyName), ''); - $output[] = $this->formatField(' type', $this->formatValue($property->getTypeName())); - $output[] = $this->formatField(' tableName', $this->formatValue($property->getTableName())); - $output[] = $this->formatField(' columnName', $this->formatValue($property->getColumnName())); - $output[] = $this->formatField(' columnDefinition', $this->formatValue($property->getColumnDefinition())); - $output[] = $this->formatField(' isPrimaryKey', $this->formatValue($property->isPrimaryKey())); - $output[] = $this->formatField(' isNullable', $this->formatValue($property->isNullable())); - $output[] = $this->formatField(' isUnique', $this->formatValue($property->isUnique())); + $output = array_merge($output, $this->formatColumn($property)); } return $output; } + /** + * @param ColumnMetadata|null $columnMetadata + * + * @return array|string + */ + private function formatColumn(ColumnMetadata $columnMetadata = null) + { + $output = []; + + if (null === $columnMetadata) { + $output[] = 'Null'; + + return $output; + } + + $output[] = $this->formatField(' type', $this->formatValue($columnMetadata->getTypeName())); + $output[] = $this->formatField(' tableName', $this->formatValue($columnMetadata->getTableName())); + $output[] = $this->formatField(' columnName', $this->formatValue($columnMetadata->getColumnName())); + $output[] = $this->formatField(' columnDefinition', $this->formatValue($columnMetadata->getColumnDefinition())); + $output[] = $this->formatField(' isPrimaryKey', $this->formatValue($columnMetadata->isPrimaryKey())); + $output[] = $this->formatField(' isNullable', $this->formatValue($columnMetadata->isNullable())); + $output[] = $this->formatField(' isUnique', $this->formatValue($columnMetadata->isUnique())); + + return $output; + } + /** * Format the entity listeners * diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 348f1cb4410..cf2372c9374 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -1136,9 +1136,9 @@ protected function generateDiscriminatorColumnAnnotation(ClassMetadata $metadata $columnDefinition = sprintf( 'name="%s", type="%s", length=%d', - $discrColumn['name'], - $discrColumn['type']->getName(), - $discrColumn['length'] + $discrColumn->getColumnName(), + $discrColumn->getTypeName(), + $discrColumn->getLength() ); return '@' . $this->annotationsPrefix . 'DiscriminatorColumn(' . $columnDefinition . ')'; diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 00507eb434b..0de75ecb9ed 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -45,6 +45,7 @@ public function exportClassMetadata(ClassMetadata $metadata) $lines[] = null; $lines[] = 'use Doctrine\DBAL\Types\Type;'; $lines[] = 'use Doctrine\ORM\Mapping\ClassMetadata;'; + $lines[] = 'use Doctrine\ORM\Mapping;'; $lines[] = null; if ($metadata->isMappedSuperclass) { @@ -64,7 +65,20 @@ public function exportClassMetadata(ClassMetadata $metadata) } if ($metadata->discriminatorColumn) { - $lines[] = '$metadata->setDiscriminatorColumn(' . $this->_varExport($metadata->discriminatorColumn) . ');'; + $discrColumn = $metadata->discriminatorColumn; + + $lines[] = '$discrColumn = new Mapping\DiscriminatorColumnMetadata();'; + $lines[] = '$discrColumn->setTableName("' . $discrColumn->getTableName() . '");'; + $lines[] = '$discrColumn->setColumnName("' . $discrColumn->getColumnName() . '");'; + $lines[] = '$discrColumn->setColumnDefinition("' . $discrColumn->getColumnDefinition() . '");'; + $lines[] = '$discrColumn->setType(Type::getType("' . $discrColumn->getTypeName() . '"));'; + $lines[] = '$discrColumn->setLength(' . $discrColumn->getLength() . ');'; + $lines[] = '$discrColumn->setScale(' . $discrColumn->getScale() . ');'; + $lines[] = '$discrColumn->setPrecision(' . $discrColumn->getPrecision() . ');'; + $lines[] = '$discrColumn->setOptions(' . $this->_varExport($discrColumn->getOptions()) . ');'; + $lines[] = '$discrColumn->setNullable(' . $this->_varExport($discrColumn->isNullable()) . ');'; + $lines[] = '$discrColumn->setUnique(' . $this->_varExport($discrColumn->isUnique()) . ');'; + $lines[] = '$metadata->setDiscriminatorColumn($discrColumn);'; } if ($metadata->discriminatorMap) { diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 23b5daf8f5a..b88fe121abb 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -76,12 +76,22 @@ public function exportClassMetadata(ClassMetadata $metadata) } if ($metadata->discriminatorColumn) { + $discrColumn = $metadata->discriminatorColumn; $discriminatorColumnXml = $root->addChild('discriminator-column'); - $discriminatorColumnXml->addAttribute('name', $metadata->discriminatorColumn['name']); - $discriminatorColumnXml->addAttribute('type', $metadata->discriminatorColumn['type']->getName()); - if (isset($metadata->discriminatorColumn['length'])) { - $discriminatorColumnXml->addAttribute('length', $metadata->discriminatorColumn['length']); + $discriminatorColumnXml->addAttribute('name', $discrColumn->getColumnName()); + $discriminatorColumnXml->addAttribute('type', $discrColumn->getTypeName()); + + if (is_int($discrColumn->getLength())) { + $discriminatorColumnXml->addAttribute('length', $discrColumn->getLength()); + } + + if (is_int($discrColumn->getScale())) { + $discriminatorColumnXml->addAttribute('scale', $discrColumn->getScale()); + } + + if (is_int($discrColumn->getPrecision())) { + $discriminatorColumnXml->addAttribute('precision', $discrColumn->getPrecision()); } } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php index 8b38628c227..fd0384e6acc 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php @@ -62,7 +62,20 @@ public function exportClassMetadata(ClassMetadata $metadata) } if ($column = $metadata->discriminatorColumn) { - $array['discriminatorColumn'] = $column; + $mapping = array( + 'column' => $column->getColumnName(), + 'type' => $column->getTypeName(), + 'columnDefinition' => $column->getColumnDefinition(), + 'length' => $column->getLength(), + 'scale' => $column->getScale(), + 'precision' => $column->getPrecision(), + 'options' => $column->getOptions(), + 'id' => $column->isPrimaryKey(), + 'nullable' => $column->isNullable(), + 'unique' => $column->isUnique(), + ); + + $array['discriminatorColumn'] = $mapping; } if ($map = $metadata->discriminatorMap) { diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 45bb0885f61..363f88c14a5 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -129,7 +129,7 @@ private function processingNotRequired($class, array $processedClasses) isset($processedClasses[$class->name]) || $class->isMappedSuperclass || $class->isEmbeddedClass || - ($class->isInheritanceTypeSingleTable() && $class->name != $class->rootEntityName) + ($class->isInheritanceTypeSingleTable() && $class->name !== $class->rootEntityName) ); } @@ -361,27 +361,27 @@ public function getSchemaFromMetadata(array $classes) private function addDiscriminatorColumnDefinition($class, Table $table) { $discrColumn = $class->discriminatorColumn; - $discrColumnType = $discrColumn['type']->getName(); + $discrColumnType = $discrColumn->getTypeName(); $options = [ - 'notnull' => isset($discrColumn['notnull']) ? $discrColumn['notnull'] : true, + 'notnull' => ! $discrColumn->isNullable(), ]; switch ($discrColumnType) { case 'string': - $options['length'] = ($discrColumn['length'] !== null) ? $discrColumn['length'] : 255; + $options['length'] = $discrColumn->getLength() ?? 255; break; case 'decimal': - $options['scale'] = $discrColumn['scale']; - $options['precision'] = $discrColumn['precision']; + $options['scale'] = $discrColumn->getScale(); + $options['precision'] = $discrColumn->getPrecision(); break; } - if (isset($discrColumn['columnDefinition'])) { - $options['columnDefinition'] = $discrColumn['columnDefinition']; + if (!empty($discrColumn->getColumnDefinition())) { + $options['columnDefinition'] = $discrColumn->getColumnDefinition(); } - $table->addColumn($discrColumn['name'], $discrColumnType, $options); + $table->addColumn($discrColumn->getColumnName(), $discrColumnType, $options); } /** @@ -592,11 +592,14 @@ private function getDefiningClass($class, $referencedColumnName) return [$class, $referencedFieldName]; } - if (in_array($referencedColumnName, $class->getIdentifierColumnNames())) { + $idColumns = $class->getIdentifierColumns($this->em); + $idColumnNameList = array_keys($idColumns); + + if (in_array($referencedColumnName, $idColumnNameList)) { // it seems to be an entity as foreign key foreach ($class->getIdentifierFieldNames() as $fieldName) { if ($class->hasAssociation($fieldName) - && $class->getSingleAssociationJoinColumnName($fieldName) == $referencedColumnName) { + && $class->getSingleAssociationJoinColumnName($fieldName) === $referencedColumnName) { return $this->getDefiningClass( $this->em->getClassMetadata($class->associationMappings[$fieldName]['targetEntity']), $class->getSingleAssociationReferencedJoinColumnName($fieldName) diff --git a/lib/Doctrine/ORM/Tools/SchemaValidator.php b/lib/Doctrine/ORM/Tools/SchemaValidator.php index 226bd82fd01..a89da9af01f 100644 --- a/lib/Doctrine/ORM/Tools/SchemaValidator.php +++ b/lib/Doctrine/ORM/Tools/SchemaValidator.php @@ -164,42 +164,41 @@ public function validateClass(ClassMetadata $class) if ($assoc['isOwningSide']) { if ($assoc['type'] == ClassMetadata::MANY_TO_MANY) { - $identifierColumns = $class->getIdentifierColumnNames(); + $classIdentifierColumns = array_keys($class->getIdentifierColumns($this->em)); + $targetIdentifierColumns = array_keys($targetMetadata->getIdentifierColumns($this->em)); foreach ($assoc['joinTable']['joinColumns'] as $joinColumn) { - if (!in_array($joinColumn['referencedColumnName'], $identifierColumns)) { + if (!in_array($joinColumn['referencedColumnName'], $classIdentifierColumns)) { $ce[] = "The referenced column name '" . $joinColumn['referencedColumnName'] . "' " . "has to be a primary key column on the target entity class '".$class->name."'."; break; } } - $identifierColumns = $targetMetadata->getIdentifierColumnNames(); - foreach ($assoc['joinTable']['inverseJoinColumns'] as $inverseJoinColumn) { - if (!in_array($inverseJoinColumn['referencedColumnName'], $identifierColumns)) { + if (!in_array($inverseJoinColumn['referencedColumnName'], $targetIdentifierColumns)) { $ce[] = "The referenced column name '" . $joinColumn['referencedColumnName'] . "' " . "has to be a primary key column on the target entity class '".$targetMetadata->name."'."; break; } } - if (count($targetMetadata->getIdentifierColumnNames()) != count($assoc['joinTable']['inverseJoinColumns'])) { + if (count($targetIdentifierColumns) !== count($assoc['joinTable']['inverseJoinColumns'])) { $ce[] = "The inverse join columns of the many-to-many table '" . $assoc['joinTable']['name'] . "' " . "have to contain to ALL identifier columns of the target entity '". $targetMetadata->name . "', " . - "however '" . implode(", ", array_diff($targetMetadata->getIdentifierColumnNames(), array_values($assoc['relationToTargetKeyColumns']))) . + "however '" . implode(", ", array_diff($targetIdentifierColumns, array_values($assoc['relationToTargetKeyColumns']))) . "' are missing."; } - if (count($class->getIdentifierColumnNames()) != count($assoc['joinTable']['joinColumns'])) { + if (count($classIdentifierColumns) !== count($assoc['joinTable']['joinColumns'])) { $ce[] = "The join columns of the many-to-many table '" . $assoc['joinTable']['name'] . "' " . "have to contain to ALL identifier columns of the source entity '". $class->name . "', " . - "however '" . implode(", ", array_diff($class->getIdentifierColumnNames(), array_values($assoc['relationToSourceKeyColumns']))) . + "however '" . implode(", ", array_diff($classIdentifierColumns, array_values($assoc['relationToSourceKeyColumns']))) . "' are missing."; } } elseif ($assoc['type'] & ClassMetadata::TO_ONE) { - $identifierColumns = $targetMetadata->getIdentifierColumnNames(); + $identifierColumns = array_keys($targetMetadata->getIdentifierColumns($this->em)); foreach ($assoc['joinColumns'] as $joinColumn) { if (!in_array($joinColumn['referencedColumnName'], $identifierColumns)) { @@ -208,7 +207,7 @@ public function validateClass(ClassMetadata $class) } } - if (count($identifierColumns) != count($assoc['joinColumns'])) { + if (count($identifierColumns) !== count($assoc['joinColumns'])) { $ids = []; foreach ($assoc['joinColumns'] as $joinColumn) { @@ -217,7 +216,7 @@ public function validateClass(ClassMetadata $class) $ce[] = "The join columns of the association '" . $assoc['fieldName'] . "' " . "have to match to ALL identifier columns of the target entity '". $targetMetadata->name . "', " . - "however '" . implode(", ", array_diff($targetMetadata->getIdentifierColumnNames(), $ids)) . + "however '" . implode(", ", array_diff($identifierColumns, $ids)) . "' are missing."; } } diff --git a/tests/Doctrine/Tests/Models/Company/CompanyContract.php b/tests/Doctrine/Tests/Models/Company/CompanyContract.php index 59a9df85c04..7df1e4b5d2f 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyContract.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\Models\Company; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping; /** * @Entity @@ -136,13 +137,14 @@ static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat { $metadata->setInheritanceType(\Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_JOINED); $metadata->setPrimaryTable(['name' => 'company_contracts']); - $metadata->setDiscriminatorColumn( - [ - 'name' => 'discr', - 'type' => 'string', - 'tableName' => $metadata->getTableName(), - ] - ); + + $discrColumn = new Mapping\DiscriminatorColumnMetadata(); + + $discrColumn->setTableName($metadata->getTableName()); + $discrColumn->setColumnName('discr'); + $discrColumn->setType(Type::getType('string')); + + $metadata->setDiscriminatorColumn($discrColumn); $metadata->addProperty( 'id', diff --git a/tests/Doctrine/Tests/ORM/Functional/AdvancedAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/AdvancedAssociationTest.php index dfd962eeba1..2700eb4704e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/AdvancedAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/AdvancedAssociationTest.php @@ -15,14 +15,35 @@ class AdvancedAssociationTest extends OrmFunctionalTestCase { protected function setUp() { parent::setUp(); + try { $this->_schemaTool->createSchema( [ - $this->_em->getClassMetadata(Phrase::class), - $this->_em->getClassMetadata(PhraseType::class), - $this->_em->getClassMetadata(Definition::class), - $this->_em->getClassMetadata(Lemma::class), - $this->_em->getClassMetadata(Type::class) + $this->_em->getClassMetadata(Phrase::class), + $this->_em->getClassMetadata(PhraseType::class), + $this->_em->getClassMetadata(Definition::class), + $this->_em->getClassMetadata(Lemma::class), + $this->_em->getClassMetadata(Type::class) + ] + ); + } catch (\Exception $e) { + // Automatically mark failure + self::fail($e->getMessage()); + } + } + + protected function tearDown() + { + parent::tearDown(); + + try { + $this->_schemaTool->dropSchema( + [ + $this->_em->getClassMetadata(Phrase::class), + $this->_em->getClassMetadata(PhraseType::class), + $this->_em->getClassMetadata(Definition::class), + $this->_em->getClassMetadata(Lemma::class), + $this->_em->getClassMetadata(Type::class) ] ); } catch (\Exception $e) { @@ -150,7 +171,6 @@ class Lemma { private $lemma; /** - * @var kateglo\application\utilities\collections\ArrayCollection * @ManyToMany(targetEntity="Type", mappedBy="lemmas", cascade={"persist"}) */ private $types; @@ -159,7 +179,6 @@ public function __construct() { $this->types = new ArrayCollection(); } - /** * * @return int @@ -186,8 +205,6 @@ public function getLemma(){ } /** - * - * @param kateglo\application\models\Type $type * @return void */ public function addType(Type $type){ @@ -198,8 +215,6 @@ public function addType(Type $type){ } /** - * - * @param kateglo\application\models\Type $type * @return void */ public function removeType(Type $type) diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php index 653452a8bc3..75b55cb4130 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php @@ -13,32 +13,35 @@ class DDC2138Test extends OrmFunctionalTestCase */ public function testForeignKeyOnSTIWithMultipleMapping() { - $em = $this->_em; - $schemaTool = new SchemaTool($em); - - $classes = [ - $em->getClassMetadata(DDC2138User::class), - $em->getClassMetadata(DDC2138Structure::class), - $em->getClassMetadata(DDC2138UserFollowedObject::class), - $em->getClassMetadata(DDC2138UserFollowedStructure::class), - $em->getClassMetadata(DDC2138UserFollowedUser::class) - ]; - - $schema = $schemaTool->getSchemaFromMetadata($classes); + $schema = $this->_schemaTool->getSchemaFromMetadata( + [ + $this->_em->getClassMetadata(DDC2138User::class), + $this->_em->getClassMetadata(DDC2138Structure::class), + $this->_em->getClassMetadata(DDC2138UserFollowedObject::class), + $this->_em->getClassMetadata(DDC2138UserFollowedStructure::class), + $this->_em->getClassMetadata(DDC2138UserFollowedUser::class) + ] + ); + self::assertTrue($schema->hasTable('users_followed_objects'), "Table users_followed_objects should exist."); /* @var $table \Doctrine\DBAL\Schema\Table */ $table = ($schema->getTable('users_followed_objects')); + self::assertTrue($table->columnsAreIndexed(['object_id'])); self::assertTrue($table->columnsAreIndexed(['user_id'])); + $foreignKeys = $table->getForeignKeys(); + self::assertCount(1, $foreignKeys, 'user_id column has to have FK, but not object_id'); /* @var $fk \Doctrine\DBAL\Schema\ForeignKeyConstraint */ $fk = reset($foreignKeys); + self::assertEquals('users', $fk->getForeignTableName()); $localColumns = $fk->getLocalColumns(); + self::assertContains('user_id', $localColumns); self::assertCount(1, $localColumns); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2175Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2175Test.php index 3b393ff55ba..1fe6f42fb77 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2175Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2175Test.php @@ -10,10 +10,18 @@ class DDC2175Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { parent::setUp(); + $this->_schemaTool->createSchema( - [ - $this->_em->getClassMetadata(DDC2175Entity::class), - ] + [$this->_em->getClassMetadata(DDC2175Entity::class)] + ); + } + + protected function tearDown() + { + parent::tearDown(); + + $this->_schemaTool->dropSchema( + [$this->_em->getClassMetadata(DDC2175Entity::class)] ); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 03303343cdb..24adaa15b37 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -7,6 +7,7 @@ use Doctrine\ORM\EntityManager; use Doctrine\ORM\Events; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\DefaultNamingStrategy; @@ -456,17 +457,15 @@ public function testDiscriminatorColumnDefaults() $class = $this->createClassMetadata(Animal::class); - self::assertEquals( - [ - 'name' => 'discr', - 'type' => Type::getType('string'), - 'length' => '32', - 'fieldName' => 'discr', - 'columnDefinition' => null, - 'tableName' => 'Animal', - ], - $class->discriminatorColumn - ); + self::assertNotNull($class->discriminatorColumn); + + $discrColumn = $class->discriminatorColumn; + + self::assertEquals('Animal', $discrColumn->getTableName()); + self::assertEquals('discr', $discrColumn->getColumnName()); + self::assertEquals('string', $discrColumn->getTypeName()); + self::assertEquals(32, $discrColumn->getLength()); + self::assertNull($discrColumn->getColumnDefinition()); } /** @@ -565,11 +564,12 @@ public function testDiscriminatorColumnDefinition() { $class = $this->createClassMetadata(DDC807Entity::class); - self::assertArrayHasKey('columnDefinition', $class->discriminatorColumn); - self::assertArrayHasKey('name', $class->discriminatorColumn); + self::assertNotNull($class->discriminatorColumn); + + $discrColumn = $class->discriminatorColumn; - self::assertEquals("ENUM('ONE','TWO')", $class->discriminatorColumn['columnDefinition']); - self::assertEquals("dtype", $class->discriminatorColumn['name']); + self::assertEquals('dtype', $discrColumn->getColumnName()); + self::assertEquals("ENUM('ONE','TWO')", $discrColumn->getColumnDefinition()); } /** @@ -841,7 +841,7 @@ public function testAttributeOverridesMapping() $factory = $this->createClassMetadataFactory(); $adminMetadata = $factory->getMetadataFor(DDC964Admin::class); - self::assertEquals(['user_id'=>'id','user_name'=>'name'], $adminMetadata->fieldNames); + self::assertEquals(['user_id'=>'id', 'user_name'=>'name'], $adminMetadata->fieldNames); self::assertNotNull($adminMetadata->getProperty('id')); @@ -850,7 +850,6 @@ public function testAttributeOverridesMapping() self::assertTrue($idProperty->isPrimaryKey()); self::assertEquals('id', $idProperty->getName()); self::assertEquals('user_id', $idProperty->getColumnName()); - self::assertEquals(150, $idProperty->getLength()); self::assertNotNull($adminMetadata->getProperty('name')); @@ -873,7 +872,6 @@ public function testAttributeOverridesMapping() self::assertTrue($idProperty->isPrimaryKey()); self::assertEquals('id', $idProperty->getName()); self::assertEquals('guest_id', $idProperty->getColumnName()); - self::assertEquals(140, $idProperty->getLength()); self::assertNotNull($guestMetadata->getProperty('name')); @@ -1015,6 +1013,7 @@ public function testSecondLevelCacheMapping() $em = $this->_getTestEntityManager(); $factory = $this->createClassMetadataFactory($em); $class = $factory->getMetadataFor(City::class); + self::assertArrayHasKey('usage', $class->cache); self::assertArrayHasKey('region', $class->cache); self::assertEquals(ClassMetadata::CACHE_USAGE_READ_ONLY, $class->cache['usage']); @@ -1070,10 +1069,14 @@ public function testDiscriminatorColumnDefaultLength() if (strpos(get_class($this), 'PHPMappingDriver') !== false) { $this->markTestSkipped('PHP Mapping Drivers have no defaults.'); } + $class = $this->createClassMetadata(SingleTableEntityNoDiscriminatorColumnMapping::class); - self::assertEquals(255, $class->discriminatorColumn['length']); + + self::assertEquals(255, $class->discriminatorColumn->getLength()); + $class = $this->createClassMetadata(SingleTableEntityIncompleteDiscriminatorColumnMapping::class); - self::assertEquals(255, $class->discriminatorColumn['length']); + + self::assertEquals(255, $class->discriminatorColumn->getLength()); } /** @@ -1085,10 +1088,14 @@ public function testDiscriminatorColumnDefaultType() if (strpos(get_class($this), 'PHPMappingDriver') !== false) { $this->markTestSkipped('PHP Mapping Drivers have no defaults.'); } + $class = $this->createClassMetadata(SingleTableEntityNoDiscriminatorColumnMapping::class); - self::assertEquals('string', $class->discriminatorColumn['type']->getName()); + + self::assertEquals('string', $class->discriminatorColumn->getTypeName()); + $class = $this->createClassMetadata(SingleTableEntityIncompleteDiscriminatorColumnMapping::class); - self::assertEquals('string', $class->discriminatorColumn['type']->getName()); + + self::assertEquals('string', $class->discriminatorColumn->getTypeName()); } /** @@ -1100,10 +1107,14 @@ public function testDiscriminatorColumnDefaultName() if (strpos(get_class($this), 'PHPMappingDriver') !== false) { $this->markTestSkipped('PHP Mapping Drivers have no defaults.'); } + $class = $this->createClassMetadata(SingleTableEntityNoDiscriminatorColumnMapping::class); - self::assertEquals('dtype', $class->discriminatorColumn['name']); + + self::assertEquals('dtype', $class->discriminatorColumn->getColumnName()); + $class = $this->createClassMetadata(SingleTableEntityIncompleteDiscriminatorColumnMapping::class); - self::assertEquals('dtype', $class->discriminatorColumn['name']); + + self::assertEquals('dtype', $class->discriminatorColumn->getColumnName()); } } @@ -1440,24 +1451,24 @@ class DDC807Entity * @Column(type="integer") * @GeneratedValue(strategy="NONE") **/ - public $id; + public $id; - public static function loadMetadata(ClassMetadata $metadata) + public static function loadMetadata(ClassMetadata $metadata) { - $metadata->addProperty( + $metadata->addProperty( 'id', Type::getType('string'), ['id' => true] ); - $metadata->setDiscriminatorColumn( - [ - 'name' => "dtype", - 'type' => "string", - 'columnDefinition' => "ENUM('ONE','TWO')", - 'tableName' => $metadata->getTableName(), - ] - ); + $discrColumn = new DiscriminatorColumnMetadata(); + + $discrColumn->setTableName($metadata->getTableName()); + $discrColumn->setColumnName('dtype'); + $discrColumn->setType(Type::getType('string')); + $discrColumn->setColumnDefinition("ENUM('ONE','TWO')"); + + $metadata->setDiscriminatorColumn($discrColumn); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index 35a4d3a43d8..c4eae0d5524 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -60,8 +60,8 @@ public function testGetMetadataForSubclassWithMappedSuperclass() self::assertNotNull($class->getProperty('mapped1')); self::assertNotNull($class->getProperty('mapped2')); - self::assertFalse($class->getProperty('mapped1')->isInherited()); - self::assertFalse($class->getProperty('mapped2')->isInherited()); + self::assertTrue($class->getProperty('mapped1')->isInherited()); + self::assertTrue($class->getProperty('mapped2')->isInherited()); self::assertNull($class->getProperty('transient')); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php index 538b772ab3a..7a86e1fff38 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php @@ -202,16 +202,14 @@ public function testSetInheritanceSingleTable() public function testSetDiscriminatorColumn() { self::assertIsFluent($this->builder->setDiscriminatorColumn('discr', 'string', '124')); - self::assertEquals( - [ - 'fieldName' => 'discr', - 'name' => 'discr', - 'type' => Type::getType('string'), - 'length' => '124', - 'tableName' => 'CmsUser', - ], - $this->cm->discriminatorColumn - ); + self::assertNotNull($this->cm->discriminatorColumn); + + $discrColumn = $this->cm->discriminatorColumn; + + self::assertEquals('CmsUser', $discrColumn->getTableName()); + self::assertEquals('discr', $discrColumn->getColumnName()); + self::assertEquals('string', $discrColumn->getTypeName()); + self::assertEquals(124, $discrColumn->getLength()); } public function testAddDiscriminatorMapClass() @@ -306,9 +304,9 @@ public function testCreatePrimaryField() ->generatedValue() ->build(); - self::assertNotNull($this->cm->getProperty('name')); + self::assertNotNull($this->cm->getProperty('id')); - $property = $this->cm->getProperty('name'); + $property = $this->cm->getProperty('id'); self::assertEquals(['id'], $this->cm->identifier); self::assertEquals('id', $property->getName()); @@ -325,9 +323,9 @@ public function testCreateUnsignedOptionField() ->option('unsigned', true) ->build(); - self::assertNotNull($this->cm->getProperty('name')); + self::assertNotNull($this->cm->getProperty('state')); - $property = $this->cm->getProperty('name'); + $property = $this->cm->getProperty('state'); self::assertEquals('state', $property->getName()); self::assertEquals($this->cm, $property->getDeclaringClass()); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index df4fc49f285..86c74b9515c 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -8,6 +8,7 @@ use Doctrine\ORM\Events; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Mapping\UnderscoreNamingStrategy; @@ -42,14 +43,20 @@ public function testClassMetadataInstanceSerialization() self::assertEquals(ClassMetadata::INHERITANCE_TYPE_NONE, $cm->inheritanceType); // Customize state + $discrColumn = new DiscriminatorColumnMetadata(); + + $discrColumn->setColumnName('disc'); + $discrColumn->setType(Type::getType('integer')); + $cm->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE); $cm->setSubclasses(["One", "Two", "Three"]); $cm->setParentClasses(["UserParent"]); $cm->setCustomRepositoryClass("UserRepository"); - $cm->setDiscriminatorColumn(['name' => 'disc', 'type' => 'integer']); + $cm->setDiscriminatorColumn($discrColumn); $cm->mapOneToOne(['fieldName' => 'phonenumbers', 'targetEntity' => 'CmsAddress', 'mappedBy' => 'foo']); $cm->markReadOnly(); $cm->addNamedQuery(['name' => 'dql', 'query' => 'foo']); + self::assertEquals(1, count($cm->associationMappings)); $serialized = serialize($cm); @@ -66,13 +73,15 @@ public function testClassMetadataInstanceSerialization() self::assertEquals(CMS\UserRepository::class, $cm->customRepositoryClassName); self::assertEquals( [ - 'name' => 'disc', - 'type' => Type::getType('integer'), - 'fieldName' => 'disc', - 'tableName' => 'CmsUser', + 'Doctrine\Tests\Models\CMS\One', + 'Doctrine\Tests\Models\CMS\Two', + 'Doctrine\Tests\Models\CMS\Three' ], - $cm->discriminatorColumn + $cm->subClasses ); + self::assertEquals(['UserParent'], $cm->parentClasses); + self::assertEquals(CMS\UserRepository::class, $cm->customRepositoryClassName); + self::assertEquals($discrColumn, $cm->discriminatorColumn); self::assertTrue($cm->associationMappings['phonenumbers']['type'] == ClassMetadata::ONE_TO_ONE); self::assertEquals(1, count($cm->associationMappings)); @@ -214,7 +223,12 @@ public function testSetSubClassesInGlobalNamespace() public function testSetInvalidVersionMapping_ThrowsException() { $metadata = new ClassMetadata(CMS\CmsUser::class); - $property = new FieldMetadata($metadata, 'foo', Type::getType('string')); + $property = new FieldMetadata(); + + $property->setDeclaringClass($metadata); + $property->setCurrentClass($metadata); + $property->setName('foo'); + $property->setType(Type::getType('string')); $metadata->initializeReflection(new RuntimeReflectionService()); @@ -274,8 +288,15 @@ public function testDuplicateColumnName_DiscriminatorColumn_ThrowsMappingExcepti $cm->addProperty('name', Type::getType('string')); + $discrColumn = new DiscriminatorColumnMetadata(); + + $discrColumn->setColumnName('name'); + $discrColumn->setType(Type::getType('string')); + $discrColumn->setLength(255); + $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - $cm->setDiscriminatorColumn(['name' => 'name']); + + $cm->setDiscriminatorColumn($discrColumn); } public function testDuplicateColumnName_DiscriminatorColumn2_ThrowsMappingException() @@ -283,7 +304,13 @@ public function testDuplicateColumnName_DiscriminatorColumn2_ThrowsMappingExcept $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->setDiscriminatorColumn(['name' => 'name']); + $discrColumn = new DiscriminatorColumnMetadata(); + + $discrColumn->setColumnName('name'); + $discrColumn->setType(Type::getType('string')); + $discrColumn->setLength(255); + + $cm->setDiscriminatorColumn($discrColumn); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); @@ -1013,17 +1040,6 @@ public function testNameIsMandatoryForEntityNameSqlResultSetMappingException() ); } - /** - * @expectedException \Doctrine\ORM\Mapping\MappingException - * @expectedExceptionMessage Discriminator column name on entity class 'Doctrine\Tests\Models\CMS\CmsUser' is not defined. - */ - public function testNameIsMandatoryForDiscriminatorColumnsMappingException() - { - $cm = new ClassMetadata(CMS\CmsUser::class); - $cm->initializeReflection(new RuntimeReflectionService()); - $cm->setDiscriminatorColumn([]); - } - /** * @group DDC-984 * @group DDC-559 diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php index eebd9b27a1f..768111eac58 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php @@ -1,18 +1,19 @@ setInheritanceType(ClassMetadata::INHERITANCE_TYPE_JOINED); $metadata->setPrimaryTable(['name' => 'company_contracts']); -$metadata->setDiscriminatorColumn( - [ - 'name' => 'discr', - 'type' => 'string', - ] -); +$discrColumn = new Mapping\DiscriminatorColumnMetadata(); + +$discrColumn->setColumnName('discr'); +$discrColumn->setType(Type::getType('string')); + +$metadata->setDiscriminatorColumn($discrColumn); $metadata->setDiscriminatorMap( [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFixContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFixContract.php index bfcadcb5461..ef18f34e5b9 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFixContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFixContract.php @@ -1,7 +1,7 @@ addProperty('fixPrice', Type::getType('integer'), ['columnName' => 'fixPrice']); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexContract.php index 82838c77288..f743708b77c 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexContract.php @@ -1,7 +1,7 @@ addProperty('hoursWorked', Type::getType('integer'), ['columnName' => 'hoursWorked']); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php index d92bd218b8f..95ab1c4e808 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php @@ -1,12 +1,10 @@ setPrimaryTable( - [ - 'name' => 'company_person', - ] -); +/** @var ClassMetadata $metadata */ +$metadata->setPrimaryTable(['name' => 'company_person']); $metadata->addNamedNativeQuery( [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php index 0bc5fc8c697..a21dfbc19f1 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php @@ -4,7 +4,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; /* @var $metadata ClassMetadata */ -$metadata->addProperty('id', Type::getType('integer'), ['id' => true]); +$metadata->addProperty('id', Type::getType('string'), ['id' => true]); $metadata->addProperty('name', Type::getType('string')); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php index b358149e9aa..074ba2a8618 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php @@ -1,21 +1,22 @@ setInheritanceType(ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE); -$metadata->setDiscriminatorColumn( - [ - 'name' => 'dtype', - 'type' => 'string', - 'length' => 255, - 'fieldName' => 'dtype', - 'tableName' => $metadata->getTableName(), - ] -); +/* @var $metadata ClassMetadata */ +$metadata->setInheritanceType(Mapping\ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE); + +$discrColumn = new Mapping\DiscriminatorColumnMetadata(); + +$discrColumn->setTableName($metadata->getTableName()); +$discrColumn->setColumnName('dtype'); +$discrColumn->setType(Type::getType('string')); +$discrColumn->setLength(255); + +$metadata->setDiscriminatorColumn($discrColumn); $metadata->setDiscriminatorMap( [ @@ -28,7 +29,7 @@ $metadata->addProperty( 'id', - Type::getType('string'), + Type::getType('integer'), [ 'length' => NULL, 'nullable' => false, diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php index 3e685722ce7..e3737e3c387 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php @@ -1,16 +1,18 @@ addProperty('id', Type::getType('string'), ['id' => true]); -$metadata->setDiscriminatorColumn( - [ - 'name' => "dtype", - 'columnDefinition' => "ENUM('ONE','TWO')" - ] -); +$discrColumn = new Mapping\DiscriminatorColumnMetadata(); + +$discrColumn->setColumnName('dtype'); +$discrColumn->setType(Type::getType('string')); +$discrColumn->setColumnDefinition("ENUM('ONE','TWO')"); + +$metadata->setDiscriminatorColumn($discrColumn); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.dcm.yml index 674328cd526..7dfc6476af0 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.dcm.yml +++ b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.dcm.yml @@ -1,7 +1,7 @@ Doctrine\Tests\Models\DDC1476\DDC1476EntityWithDefaultFieldType: type: entity id: - id: + id: generator: strategy: NONE fields: diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php index 92e3bb05539..0469cf8ec2e 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php @@ -55,7 +55,7 @@ public function testGetInsertSQLUsesTypeValuesSQL() $sql = $method->invoke($this->_persister); - self::assertEquals('INSERT INTO customtype_parents (customInteger, child_id) VALUES (ABS(?), ?)', $sql); + self::assertEquals('INSERT INTO "customtype_parents" ("customInteger", "child_id") VALUES (ABS(?), ?)', $sql); } public function testUpdateUsesTypeValuesSQL() diff --git a/tests/Doctrine/Tests/OrmFunctionalTestCase.php b/tests/Doctrine/Tests/OrmFunctionalTestCase.php index a5f9c682f49..de983186388 100644 --- a/tests/Doctrine/Tests/OrmFunctionalTestCase.php +++ b/tests/Doctrine/Tests/OrmFunctionalTestCase.php @@ -703,7 +703,7 @@ protected function _getEntityManager(Connection $connection = null) { // different configs. $config = new Configuration(); $config = new \Doctrine\ORM\Configuration(); - $config->setQuoteStrategy($this->enableQuotes ? new DefaultQuoteStrategy() : new AnsiQuoteStrategy()); + //$config->setQuoteStrategy($this->enableQuotes ? new DefaultQuoteStrategy() : new AnsiQuoteStrategy()); $config->setMetadataCacheImpl(self::$_metadataCacheImpl); $config->setQueryCacheImpl(self::$_queryCacheImpl); $config->setProxyDir(__DIR__ . '/Proxies'); diff --git a/tests/Doctrine/Tests/OrmTestCase.php b/tests/Doctrine/Tests/OrmTestCase.php index d0a31de105f..56acf7991cd 100644 --- a/tests/Doctrine/Tests/OrmTestCase.php +++ b/tests/Doctrine/Tests/OrmTestCase.php @@ -131,7 +131,7 @@ protected function _getTestEntityManager($conn = null, $conf = null, $eventManag $config = new Configuration(); - $config->setQuoteStrategy($this->enableQuotes ? new DefaultQuoteStrategy() : new AnsiQuoteStrategy()); + //$config->setQuoteStrategy($this->enableQuotes ? new DefaultQuoteStrategy() : new AnsiQuoteStrategy()); $config->setMetadataCacheImpl($metadataCache); $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver([], true)); $config->setQueryCacheImpl(self::getSharedQueryCacheImpl()); From 1747acb7d02e2f411ff694bc9eab260e67ebad1d Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Thu, 9 Jun 2016 00:11:48 +0000 Subject: [PATCH 039/275] Finalized changes to ensure everything breaking now is due to quoting being applied everywhere --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 15 +++++++++++++++ lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php | 2 +- tests/Doctrine/Tests/ORM/Functional/QueryTest.php | 4 ++++ .../Tests/ORM/Query/CustomTreeWalkersJoinTest.php | 6 ++++-- .../Tests/ORM/Query/CustomTreeWalkersTest.php | 4 +++- .../Tests/ORM/Query/DeleteSqlGenerationTest.php | 6 +++++- .../Tests/ORM/Query/SelectSqlGenerationTest.php | 8 ++------ .../Tests/ORM/Query/UpdateSqlGenerationTest.php | 7 +++++-- 8 files changed, 39 insertions(+), 13 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 2f0609f91ed..bb97bb21bf3 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1972,6 +1972,21 @@ public function setAttributeOverride($fieldName, array $overrideMapping) throw MappingException::invalidOverrideFieldName($this->name, $fieldName); } + $originalMapping = array( + 'tableName' => $property->getTableName(), + 'columnName' => $property->getColumnName(), + 'columnDefinition' => $property->getColumnDefinition(), + 'length' => $property->getLength(), + 'scale' => $property->getScale(), + 'precision' => $property->getPrecision(), + 'options' => $property->getOptions(), + 'id' => $property->isPrimaryKey(), + 'nullable' => $property->isNullable(), + 'unique' => $property->isUnique(), + ); + + $overrideMapping = array_replace_recursive($originalMapping, $overrideMapping); + $overrideMapping['id'] = $property->isPrimaryKey(); unset($this->properties[$fieldName]); diff --git a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php index 5bfe78f8805..707234bf678 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php @@ -626,7 +626,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) if (isset($element['attributeOverride']) && is_array($element['attributeOverride'])) { foreach ($element['attributeOverride'] as $fieldName => $attributeOverrideElement) { - $mapping = $this->columnToArray($fieldName, $attributeOverrideElement); + $mapping = $this->columnToArray($attributeOverrideElement); $metadata->setAttributeOverride($fieldName, $mapping); } diff --git a/tests/Doctrine/Tests/ORM/Functional/QueryTest.php b/tests/Doctrine/Tests/ORM/Functional/QueryTest.php index 13a8a27f1c4..90b637a5457 100644 --- a/tests/Doctrine/Tests/ORM/Functional/QueryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/QueryTest.php @@ -416,12 +416,16 @@ public function testSupportsQueriesWithEntityNamespaces() try { $query = $this->_em->createQuery('UPDATE CMS:CmsUser u SET u.name = ?1'); + self::assertEquals('UPDATE cms_users SET name = ?', $query->getSQL()); + $query->free(); } catch (\Exception $e) { $this->fail($e->getMessage()); } + self::assertEquals('UPDATE cms_users SET name = ?', $sqlGenerated); + $this->_em->getConfiguration()->setEntityNamespaces([]); } diff --git a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php index 1e81ea7371e..e9bcd684ace 100644 --- a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php +++ b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php @@ -30,12 +30,14 @@ public function assertSqlGeneration($dqlToBeTested, $sqlToBeConfirmed) $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [CustomTreeWalkerJoin::class]) ->useQueryCache(false); - self::assertEquals($sqlToBeConfirmed, $query->getSql()); + $sqlGenerated = $query->getSql(); + $query->free(); } catch (\Exception $e) { $this->fail($e->getMessage() . ' at "' . $e->getFile() . '" on line ' . $e->getLine()); - } + + self::assertEquals($sqlToBeConfirmed, $sqlGenerated); } public function testAddsJoin() diff --git a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php index c920cedc66d..b7e7288ccd7 100644 --- a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php +++ b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php @@ -41,10 +41,12 @@ public function generateSql($dqlToBeTested, $treeWalkers, $outputWalker) public function assertSqlGeneration($dqlToBeTested, $sqlToBeConfirmed, $treeWalkers = [], $outputWalker = null) { try { - self::assertEquals($sqlToBeConfirmed, $this->generateSql($dqlToBeTested, $treeWalkers, $outputWalker)); + $sqlGenerated = $this->generateSql($dqlToBeTested, $treeWalkers, $outputWalker); } catch (\Exception $e) { $this->fail($e->getMessage() . ' at "' . $e->getFile() . '" on line ' . $e->getLine()); } + + self::assertEquals($sqlToBeConfirmed, $sqlGenerated); } public function testSupportsQueriesWithoutWhere() diff --git a/tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php index 3d36dcdbfb8..c0e76a21108 100644 --- a/tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php @@ -29,11 +29,15 @@ public function assertSqlGeneration($dqlToBeTested, $sqlToBeConfirmed) { try { $query = $this->_em->createQuery($dqlToBeTested); - parent::assertEquals($sqlToBeConfirmed, $query->getSql()); + + $sqlGenerated = $query->getSql(); + $query->free(); } catch (\Exception $e) { $this->fail($e->getMessage()); } + + self::assertEquals($sqlToBeConfirmed, $sqlGenerated); } public function testSupportsDeleteWithoutWhereAndFrom() diff --git a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php index 1acae9dca27..a9ea7f5cadc 100644 --- a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php @@ -57,16 +57,12 @@ public function assertSqlGeneration($dqlToBeTested, $sqlToBeConfirmed, array $qu $sqlGenerated = $query->getSQL(); - parent::assertEquals( - $sqlToBeConfirmed, - $sqlGenerated, - sprintf('"%s" is not equal of "%s"', $sqlGenerated, $sqlToBeConfirmed) - ); - $query->free(); } catch (\Exception $e) { $this->fail($e->getMessage() ."\n".$e->getTraceAsString()); } + + self::assertEquals($sqlToBeConfirmed, $sqlGenerated); } /** diff --git a/tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php index f24b45feecd..327b7ec6dc5 100644 --- a/tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php @@ -37,12 +37,15 @@ protected function setUp() { public function assertSqlGeneration($dqlToBeTested, $sqlToBeConfirmed) { try { - $query = $this->_em->createQuery($dqlToBeTested); - parent::assertEquals($sqlToBeConfirmed, $query->getSql()); + $query = $this->_em->createQuery($dqlToBeTested); + $sqlGenerated = $query->getSql(); + $query->free(); } catch (\Exception $e) { $this->fail($e->getMessage()); } + + self::assertEquals($sqlToBeConfirmed, $sqlGenerated); } public function testSupportsQueriesWithoutWhere() From ad96156177c3087a9228794d41e17878fe58d615 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 10 Jun 2016 00:37:55 +0000 Subject: [PATCH 040/275] Removed isVersioned property. --- lib/Doctrine/ORM/EntityManager.php | 2 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 36 ++++++------------- .../ORM/Mapping/ClassMetadataFactory.php | 1 - .../ORM/Mapping/VersionFieldMetadata.php | 24 +++++++++++++ .../Entity/BasicEntityPersister.php | 30 ++++++++-------- .../Entity/JoinedSubclassPersister.php | 21 +++-------- lib/Doctrine/ORM/Query/SqlWalker.php | 13 +++---- .../Command/MappingDescribeCommand.php | 2 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 2 +- lib/Doctrine/ORM/UnitOfWork.php | 4 +-- .../EventListener/CacheMetadataListener.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 2 +- 12 files changed, 65 insertions(+), 74 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 5bd5e8f55b2..c954276c7c3 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -441,7 +441,7 @@ public function find($entityName, $id, $lockMode = null, $lockVersion = null) switch (true) { case LockMode::OPTIMISTIC === $lockMode: - if ( ! $class->isVersioned) { + if ( ! $class->isVersioned()) { throw OptimisticLockException::notVersioned($class->name); } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index bb97bb21bf3..cceec6bc14f 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -538,20 +538,12 @@ class ClassMetadata implements ClassMetadataInterface */ public $changeTrackingPolicy = self::CHANGETRACKING_DEFERRED_IMPLICIT; - /** - * READ-ONLY: A flag for whether or not instances of this class are to be versioned - * with optimistic locking. - * - * @var boolean - */ - public $isVersioned = false; - /** * READ-ONLY: The name of the field which is used for versioning in optimistic locking (if any). * - * @var mixed + * @var string|null */ - public $versionField; + public $versionField = null; /** * @var array @@ -804,8 +796,7 @@ public function __sleep() $serialized[] = 'containsForeignIdentifier'; } - if ($this->isVersioned) { - $serialized[] = 'isVersioned'; + if ($this->isVersioned()) { $serialized[] = 'versionField'; } @@ -2849,7 +2840,6 @@ public function setSequenceGeneratorDefinition(array $definition) */ public function setVersionMetadata(FieldMetadata $fieldMetadata) { - $this->isVersioned = true; $this->versionField = $fieldMetadata->getName(); $options = $fieldMetadata->getOptions(); @@ -2865,18 +2855,6 @@ public function setVersionMetadata(FieldMetadata $fieldMetadata) } } - /** - * Sets whether this class is to be versioned for optimistic locking. - * - * @param boolean $bool - * - * @return void - */ - public function setVersioned($bool) - { - $this->isVersioned = $bool; - } - /** * Sets the name of the field that is to be used for versioning if this class is * versioned for optimistic locking. @@ -2938,6 +2916,14 @@ public function getName() return $this->name; } + /** + * @return bool + */ + public function isVersioned() + { + return $this->versionField !== null; + } + /** * {@inheritDoc} */ diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 86776d19dfa..88e7f165b16 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -135,7 +135,6 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS $class->setInheritanceType($parent->inheritanceType); $class->setIdGeneratorType($parent->generatorType); $class->setIdentifier($parent->identifier); - $class->setVersioned($parent->isVersioned); $class->setVersionField($parent->versionField); if ($parent->discriminatorColumn) { diff --git a/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php b/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php new file mode 100644 index 00000000000..2194dcb6ae6 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php @@ -0,0 +1,24 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +class VersionFieldMetadata extends FieldMetadata +{ +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 21ab6095e23..25eecb0f383 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -290,7 +290,7 @@ public function executeInserts() $id = $this->class->getIdentifierValues($entity); } - if ($this->class->isVersioned) { + if ($this->class->isVersioned()) { $this->assignDefaultVersionValue($entity, $id); } } @@ -374,7 +374,7 @@ public function update($entity) return; } - $isVersioned = $this->class->isVersioned; + $isVersioned = $this->class->isVersioned(); $quotedTableName = $this->quoteStrategy->getTableName($this->class, $this->platform); $this->updateTable($entity, $quotedTableName, $data, $isVersioned); @@ -611,16 +611,12 @@ public function delete($entity) */ protected function prepareUpdateData($entity) { - $versionField = null; - $result = []; $uow = $this->em->getUnitOfWork(); - - if (($versioned = $this->class->isVersioned) !== false) { - $versionField = $this->class->versionField; - } + $versionField = $this->class->versionField; + $result = []; foreach ($uow->getEntityChangeSet($entity) as $field => $change) { - if (isset($versionField) && $versionField === $field) { + if ($versionField === $field) { continue; } @@ -628,15 +624,17 @@ protected function prepareUpdateData($entity) continue; }*/ - $newVal = $change[1]; + $owningTable = $this->getOwningTable($field); + $newVal = $change[1]; - if ( ! isset($this->class->associationMappings[$field])) { - $property = $this->class->getProperty($field); + if (($property = $this->class->getProperty($field)) !== null) { + // @todo this should be used instead + //$tableName = $property->getTableName(); $columnName = $property->getColumnName(); $this->columns[$columnName] = $property; - $result[$this->getOwningTable($field)][$columnName] = $newVal; + $result[$owningTable][$columnName] = $newVal; continue; } @@ -668,7 +666,6 @@ protected function prepareUpdateData($entity) } $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); - $owningTable = $this->getOwningTable($field); foreach ($assoc['joinColumns'] as $joinColumn) { $sourceColumn = $joinColumn['name']; @@ -1439,10 +1436,11 @@ public function getInsertSQL() */ protected function getInsertColumnList() { - $columns = []; + $versionField = $this->class->versionField; + $columns = []; foreach ($this->class->reflFields as $name => $field) { - if ($this->class->isVersioned && $this->class->versionField === $name) { + if ($versionField === $name) { continue; } diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index 13a23e7009e..1e54772fbf4 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -38,14 +38,6 @@ */ class JoinedSubclassPersister extends AbstractEntityInheritancePersister { - /** - * Map that maps column names to the table names that own them. - * This is mainly a temporary cache, used during a single request. - * - * @var array - */ - private $owningTableMap = []; - /** * Map of table to quoted table names. * @@ -77,10 +69,6 @@ private function getVersionedClassMetadata() */ public function getOwningTable($fieldName) { - if (isset($this->owningTableMap[$fieldName])) { - return $this->owningTableMap[$fieldName]; - } - $property = $this->class->getProperty($fieldName); switch (true) { @@ -100,7 +88,6 @@ public function getOwningTable($fieldName) $tableName = $cm->getTableName(); $quotedTableName = $this->quoteStrategy->getTableName($cm, $this->platform); - $this->owningTableMap[$fieldName] = $tableName; $this->quotedTableMap[$tableName] = $quotedTableName; return $tableName; @@ -177,7 +164,7 @@ public function executeInserts() $id = $this->em->getUnitOfWork()->getEntityIdentifier($entity); } - if ($this->class->isVersioned) { + if ($this->class->isVersioned()) { $this->assignDefaultVersionValue($entity, $id); } @@ -240,7 +227,7 @@ public function update($entity) return; } - $isVersioned = $this->class->isVersioned; + $isVersioned = $this->class->isVersioned(); foreach ($updateData as $tableName => $data) { $quotedTableName = $this->quotedTableMap[$tableName]; @@ -532,12 +519,14 @@ protected function getInsertColumnList() $this->columns[$columnName] = $column; } + $versionField = $this->class->versionField; + foreach ($this->class->reflFields as $name => $field) { $property = $this->class->getProperty($name); if (($property && $property->isInherited()) || isset($this->class->associationMappings[$name]['inherited']) - || ($this->class->isVersioned && $this->class->versionField === $name) + || ($versionField === $name) /*|| isset($this->class->embeddedClasses[$name])*/) { continue; } diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index cb98dbd6603..d3922c99edf 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -407,15 +407,10 @@ private function _generateOrderedCollectionOrderByItems() continue; } - $persister = $this->em->getUnitOfWork()->getEntityPersister($qComp['metadata']->name); - foreach ($qComp['relation']['orderBy'] as $fieldName => $orientation) { - $property = $qComp['metadata']->getProperty($fieldName); - $columnName = $this->quoteStrategy->getColumnName($property, $this->platform); - $tableName = ($qComp['metadata']->isInheritanceTypeJoined()) - ? $persister->getOwningTable($fieldName) - : $qComp['metadata']->getTableName(); - + $property = $qComp['metadata']->getProperty($fieldName); + $tableName = $property->getTableName(); + $columnName = $this->quoteStrategy->getColumnName($property, $this->platform); $orderedColumn = $this->getSQLTableAlias($tableName, $dqlAlias) . '.' . $columnName; // OrderByClause should replace an ordered relation. see - DDC-2475 @@ -571,7 +566,7 @@ public function walkSelectStatement(AST\SelectStatement $AST) } foreach ($this->selectedClasses as $selectedClass) { - if ( ! $selectedClass['class']->isVersioned) { + if ( ! $selectedClass['class']->isVersioned()) { throw OptimisticLockException::lockFailed($selectedClass['class']->name); } } diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index 7fe8983df2c..0dd3215b8d3 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -117,7 +117,7 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage $this->formatField('Sequence generator definition', $metadata->sequenceGeneratorDefinition), $this->formatField('Table generator definition', $metadata->tableGeneratorDefinition), $this->formatField('Change tracking policy', $metadata->changeTrackingPolicy), - $this->formatField('Versioned?', $metadata->isVersioned), + $this->formatField('Versioned?', $metadata->isVersioned()), $this->formatField('Version field', $metadata->versionField), $this->formatField('Read only?', $metadata->isReadOnly), diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 363f88c14a5..c7fbb5bb69b 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -429,7 +429,7 @@ private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Tabl 'length' => $fieldMetadata->getLength(), 'notnull' => ! $fieldMetadata->isNullable(), 'platformOptions' => [ - 'version' => ($classMetadata->isVersioned && $classMetadata->versionField === $fieldName), + 'version' => ($classMetadata->versionField === $fieldName), ], ]; diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 14df0d95b3e..729eeb95eef 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -1455,7 +1455,7 @@ public function getEntityState($entity, $assume = null) switch (true) { case ($class->isIdentifierNatural()): // Check for a version field, if available, to avoid a db lookup. - if ($class->isVersioned) { + if ($class->isVersioned()) { return ($class->getFieldValue($entity, $class->versionField)) ? self::STATE_DETACHED : self::STATE_NEW; @@ -2317,7 +2317,7 @@ public function lock($entity, $lockMode, $lockVersion = null) switch (true) { case LockMode::OPTIMISTIC === $lockMode: - if ( ! $class->isVersioned) { + if ( ! $class->isVersioned()) { throw OptimisticLockException::notVersioned($class->name); } diff --git a/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php b/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php index e8cc6b23ae3..814c7b70375 100644 --- a/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php +++ b/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php @@ -67,7 +67,7 @@ protected function enableCaching(ClassMetadata $metadata, EntityManager $em) 'usage' => ClassMetadata::CACHE_USAGE_NONSTRICT_READ_WRITE ]; - if ($metadata->isVersioned) { + if ($metadata->isVersioned()) { return; } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 24adaa15b37..4f52721e0ad 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -199,7 +199,7 @@ public function testFieldMappings($class) */ public function testVersionedField($class) { - self::assertTrue($class->isVersioned); + self::assertTrue($class->isVersioned()); self::assertEquals("version", $class->versionField); } From 7656296f14d314976d012fe5770aecf1fe0e8983 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 10 Jun 2016 01:25:03 +0000 Subject: [PATCH 041/275] Switched versionField to versionProperty --- .../ORM/Mapping/Builder/FieldBuilder.php | 2 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 62 ++++++++--------- .../ORM/Mapping/ClassMetadataFactory.php | 5 +- .../ORM/Mapping/Driver/AnnotationDriver.php | 2 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 2 +- .../ORM/Mapping/Driver/YamlDriver.php | 2 +- .../Entity/BasicEntityPersister.php | 66 +++++++++++-------- .../Entity/JoinedSubclassPersister.php | 33 ++-------- .../Command/MappingDescribeCommand.php | 2 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 2 +- .../ORM/Tools/Export/Driver/XmlExporter.php | 2 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 2 +- lib/Doctrine/ORM/UnitOfWork.php | 14 ++-- .../ORM/Mapping/AbstractMappingDriverTest.php | 11 +++- .../Tests/ORM/Mapping/ClassMetadataTest.php | 2 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 2 +- 16 files changed, 105 insertions(+), 106 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php index cf7bba2eccb..7f5e5abaf2c 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php @@ -298,7 +298,7 @@ public function build() $property = $cm->addProperty($this->name, $this->type, $this->mapping); if ($this->version) { - $cm->setVersionMetadata($property); + $cm->setVersionProperty($property); } if ($this->sequenceDef) { diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index cceec6bc14f..dd1b8b70e23 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -539,11 +539,11 @@ class ClassMetadata implements ClassMetadataInterface public $changeTrackingPolicy = self::CHANGETRACKING_DEFERRED_IMPLICIT; /** - * READ-ONLY: The name of the field which is used for versioning in optimistic locking (if any). + * READ-ONLY: The field which is used for versioning in optimistic locking (if any). * - * @var string|null + * @var FieldMetadata|null */ - public $versionField = null; + public $versionProperty = null; /** * @var array @@ -797,7 +797,7 @@ public function __sleep() } if ($this->isVersioned()) { - $serialized[] = 'versionField'; + $serialized[] = 'versionProperty'; } if ($this->lifecycleCallbacks) { @@ -2155,7 +2155,10 @@ public function addProperty($fieldName, Type $type, array $mapping = []) // Complete id mapping if (isset($mapping['id']) && $mapping['id']) { - assert($this->versionField !== $fieldName, MappingException::cannotVersionIdField($this->name, $fieldName)); + if ($this->versionProperty !== null && $this->versionProperty->getName() === $fieldName) { + throw MappingException::cannotVersionIdField($this->name, $fieldName); + } + assert(! $type->canRequireSQLConversion(), MappingException::sqlConversionNotAllowedForPrimaryKeyProperties($property)); if (! in_array($fieldName, $this->identifier)) { @@ -2832,40 +2835,39 @@ public function setSequenceGeneratorDefinition(array $definition) * Sets the version field mapping used for versioning. Sets the default * value to use depending on the column type. * - * @param FieldMetadata $fieldMetadata + * @param VersionFieldMetadata $versionFieldMetadata * * @return void * * @throws MappingException */ - public function setVersionMetadata(FieldMetadata $fieldMetadata) + public function setVersionProperty(FieldMetadata $versionFieldMetadata) { - $this->versionField = $fieldMetadata->getName(); + $this->versionProperty = $versionFieldMetadata; - $options = $fieldMetadata->getOptions(); + $options = $versionFieldMetadata->getOptions(); - if ( ! isset($options['default'])) { - if (in_array($fieldMetadata->getTypeName(), ['integer', 'bigint', 'smallint'])) { - $fieldMetadata->setOptions(array_merge($options, ['default' => 1])); - } else if ($fieldMetadata->getTypeName() === 'datetime') { - $fieldMetadata->setOptions(array_merge($options, ['default' => 'CURRENT_TIMESTAMP'])); - } else { - throw MappingException::unsupportedOptimisticLockingType($this->name, $this->versionField, $fieldMetadata->getType()); - } + if (isset($options['default'])) { + return; } - } - /** - * Sets the name of the field that is to be used for versioning if this class is - * versioned for optimistic locking. - * - * @param string $versionField - * - * @return void - */ - public function setVersionField($versionField) - { - $this->versionField = $versionField; + if (in_array($versionFieldMetadata->getTypeName(), ['integer', 'bigint', 'smallint'])) { + $versionFieldMetadata->setOptions(array_merge($options, ['default' => 1])); + + return; + } + + if ($versionFieldMetadata->getTypeName() === 'datetime') { + $versionFieldMetadata->setOptions(array_merge($options, ['default' => 'CURRENT_TIMESTAMP'])); + + return; + } + + throw MappingException::unsupportedOptimisticLockingType( + $this->name, + $versionFieldMetadata->getName(), + $versionFieldMetadata->getType() + ); } /** @@ -2921,7 +2923,7 @@ public function getName() */ public function isVersioned() { - return $this->versionField !== null; + return $this->versionProperty !== null; } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 88e7f165b16..9c60e7fa1d3 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -135,7 +135,10 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS $class->setInheritanceType($parent->inheritanceType); $class->setIdGeneratorType($parent->generatorType); $class->setIdentifier($parent->identifier); - $class->setVersionField($parent->versionField); + + if ($parent->versionProperty) { + $class->setVersionProperty($parent->versionProperty); + } if ($parent->discriminatorColumn) { $class->setDiscriminatorColumn($parent->discriminatorColumn); diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 36c1603b332..754b1cf65a8 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -344,7 +344,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $property = $metadata->addProperty($reflProperty->getName(), Type::getType($columnAnnot->type), $mapping); if ($this->reader->getPropertyAnnotation($reflProperty, Annotation\Version::class)) { - $metadata->setVersionMetadata($property); + $metadata->setVersionProperty($property); } // Check for SequenceGenerator/TableGenerator definition diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 78d4d0e9505..eb30097a4f7 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -263,7 +263,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $property = $metadata->addProperty($fieldName, $fieldType, $fieldMapping); if (isset($fieldMapping['version'])) { - $metadata->setVersionMetadata($property); + $metadata->setVersionProperty($property); unset($fieldMapping['version']); } diff --git a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php index 707234bf678..a59cec41034 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php @@ -322,7 +322,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $property = $metadata->addProperty($fieldName, Type::getType($mapping['type']), $mapping); if (isset($mapping['version'])) { - $metadata->setVersionMetadata($property); + $metadata->setVersionProperty($property); } } } diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 25eecb0f383..078e55e0155 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -28,6 +28,7 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ColumnMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\OptimisticLockException; use Doctrine\ORM\ORMException; @@ -313,25 +314,26 @@ public function executeInserts() */ protected function assignDefaultVersionValue($entity, array $id) { - $value = $this->fetchVersionValue($this->class, $id); + $versionProperty = $this->class->versionProperty; + $versionValue = $this->fetchVersionValue($versionProperty, $id); - $this->class->setFieldValue($entity, $this->class->versionField, $value); + $versionProperty->setValue($entity, $versionValue); } /** * Fetches the current version value of a versioned entity. * - * @param \Doctrine\ORM\Mapping\ClassMetadata $versionedClass - * @param array $id + * @param \Doctrine\ORM\Mapping\VersionFieldMetadata $versionProperty + * @param array $id * * @return mixed */ - protected function fetchVersionValue($versionedClass, array $id) + protected function fetchVersionValue(FieldMetadata $versionProperty, array $id) { - $property = $versionedClass->getProperty($versionedClass->versionField); - $tableName = $this->quoteStrategy->getTableName($versionedClass, $this->platform); - $identifier = $this->quoteStrategy->getIdentifierColumnNames($versionedClass, $this->platform); - $columnName = $this->quoteStrategy->getColumnName($property, $this->platform); + $versionedClass = $versionProperty->getDeclaringClass(); + $tableName = $this->quoteStrategy->getTableName($versionedClass, $this->platform); + $columnName = $this->quoteStrategy->getColumnName($versionProperty, $this->platform); + $identifier = $this->quoteStrategy->getIdentifierColumnNames($versionedClass, $this->platform); // FIXME: Order with composite keys might not be correct $sql = 'SELECT ' . $columnName @@ -339,16 +341,17 @@ protected function fetchVersionValue($versionedClass, array $id) . ' WHERE ' . implode(' = ? AND ', $identifier) . ' = ?'; - $flatId = $this->identifierFlattener->flattenIdentifier($versionedClass, $id); + $flattenedId = $this->identifierFlattener->flattenIdentifier($versionedClass, $id); + $versionType = $versionProperty->getType(); $value = $this->conn->fetchColumn( $sql, - array_values($flatId), + array_values($flattenedId), 0, $this->extractIdentifierTypes($id, $versionedClass) ); - return $property->getType()->convertToPHPValue($value, $this->platform); + return $versionType->convertToPHPValue($value, $this->platform); } private function extractIdentifierTypes(array $id, ClassMetadata $versionedClass) : array @@ -460,24 +463,23 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat } if ($versioned) { - $versionField = $this->class->versionField; - $versionProperty = $this->class->getProperty($versionField); - $versionFieldType = $versionProperty->getType(); - $versionColumn = $this->quoteStrategy->getColumnName($versionProperty, $this->platform); + $versionProperty = $this->class->versionProperty; + $versionColumnType = $versionProperty->getType(); + $versionColumnName = $this->quoteStrategy->getColumnName($versionProperty, $this->platform); - $where[] = $versionColumn; - $types[] = $versionFieldType; - $params[] = $this->class->reflFields[$versionField]->getValue($entity); + $where[] = $versionColumnName; + $types[] = $versionColumnType; + $params[] = $versionProperty->getValue($entity); - switch ($versionFieldType->getName()) { + switch ($versionColumnType->getName()) { case Type::SMALLINT: case Type::INTEGER: case Type::BIGINT: - $set[] = $versionColumn . ' = ' . $versionColumn . ' + 1'; + $set[] = $versionColumnName . ' = ' . $versionColumnName . ' + 1'; break; case Type::DATETIME: - $set[] = $versionColumn . ' = CURRENT_TIMESTAMP'; + $set[] = $versionColumnName . ' = CURRENT_TIMESTAMP'; break; } } @@ -611,12 +613,15 @@ public function delete($entity) */ protected function prepareUpdateData($entity) { - $uow = $this->em->getUnitOfWork(); - $versionField = $this->class->versionField; - $result = []; + $uow = $this->em->getUnitOfWork(); + $result = []; + $versionPropertyName = $this->class->isVersioned() + ? $this->class->versionProperty->getName() + : null + ; foreach ($uow->getEntityChangeSet($entity) as $field => $change) { - if ($versionField === $field) { + if ($versionPropertyName === $field) { continue; } @@ -1436,11 +1441,14 @@ public function getInsertSQL() */ protected function getInsertColumnList() { - $versionField = $this->class->versionField; - $columns = []; + $columns = []; + $versionPropertyName = $this->class->isVersioned() + ? $this->class->versionProperty->getName() + : null + ; foreach ($this->class->reflFields as $name => $field) { - if ($versionField === $name) { + if ($versionPropertyName === $name) { continue; } diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index 1e54772fbf4..bbae3e0d046 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -45,19 +45,6 @@ class JoinedSubclassPersister extends AbstractEntityInheritancePersister */ private $quotedTableMap = []; - /** - * This function finds the ClassMetadata instance in an inheritance hierarchy - * that is responsible for enabling versioning. - * - * @return \Doctrine\ORM\Mapping\ClassMetadata - */ - private function getVersionedClassMetadata() - { - $property = $this->class->getProperty($this->class->versionField); - - return $property->getDeclaringClass(); - } - /** * Gets the name of the table that owns the column the given field is mapped to. * @@ -231,7 +218,7 @@ public function update($entity) foreach ($updateData as $tableName => $data) { $quotedTableName = $this->quotedTableMap[$tableName]; - $versioned = $isVersioned && $this->getVersionedClassMetadata()->getTableName() === $tableName; + $versioned = $isVersioned && $this->class->versionProperty->getTableName() === $tableName; $this->updateTable($entity, $quotedTableName, $data, $versioned); } @@ -239,7 +226,7 @@ public function update($entity) // Make sure the table with the version column is updated even if no columns on that // table were affected. if ($isVersioned) { - $versionedClass = $this->getVersionedClassMetadata(); + $versionedClass = $this->class->versionProperty->getDeclaringClass(); $versionedTable = $versionedClass->getTableName(); if ( ! isset($updateData[$versionedTable])) { @@ -519,14 +506,17 @@ protected function getInsertColumnList() $this->columns[$columnName] = $column; } - $versionField = $this->class->versionField; + $versionPropertyName = $this->class->isVersioned() + ? $this->class->versionProperty->getName() + : null + ; foreach ($this->class->reflFields as $name => $field) { $property = $this->class->getProperty($name); if (($property && $property->isInherited()) || isset($this->class->associationMappings[$name]['inherited']) - || ($versionField === $name) + || ($versionPropertyName === $name) /*|| isset($this->class->embeddedClasses[$name])*/) { continue; } @@ -576,15 +566,6 @@ protected function getInsertColumnList() return $columns; } - /** - * {@inheritdoc} - */ - protected function assignDefaultVersionValue($entity, array $id) - { - $value = $this->fetchVersionValue($this->getVersionedClassMetadata(), $id); - $this->class->setFieldValue($entity, $this->class->versionField, $value); - } - /** * @param string $baseTableAlias * diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index 0dd3215b8d3..678fdc5d761 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -118,7 +118,7 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage $this->formatField('Table generator definition', $metadata->tableGeneratorDefinition), $this->formatField('Change tracking policy', $metadata->changeTrackingPolicy), $this->formatField('Versioned?', $metadata->isVersioned()), - $this->formatField('Version field', $metadata->versionField), + $this->formatField('Version field', ($metadata->isVersioned() ? $metadata->versionProperty->getName() : '')), $this->formatField('Read only?', $metadata->isReadOnly), $this->formatEntityListeners($metadata->entityListeners), diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index cf2372c9374..433a456682c 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -1717,7 +1717,7 @@ protected function generateFieldMappingPropertyDocBlock(FieldMetadata $propertyM } } - if ($metadata->versionField === $propertyMetadata->getName()) { + if ($metadata->isVersioned() && $metadata->versionProperty->getName() === $propertyMetadata->getName()) { $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'Version'; } } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index b88fe121abb..6cf4872da4c 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -214,7 +214,7 @@ public function exportClassMetadata(ClassMetadata $metadata) $fieldXml->addAttribute('scale', $property->getScale()); } - if ($metadata->versionField === $property->getName()) { + if ($metadata->isVersioned() && $metadata->versionProperty->getName() === $property->getName()) { $fieldXml->addAttribute('version', 'true'); } diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index c7fbb5bb69b..1d94f912499 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -429,7 +429,7 @@ private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Tabl 'length' => $fieldMetadata->getLength(), 'notnull' => ! $fieldMetadata->isNullable(), 'platformOptions' => [ - 'version' => ($classMetadata->versionField === $fieldName), + 'version' => ($classMetadata->isVersioned() && $classMetadata->versionProperty->getName() === $fieldName), ], ]; diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 729eeb95eef..7755030c993 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -610,7 +610,8 @@ public function computeChangeSet(ClassMetadata $class, $entity) continue; } - if (( ! $class->isIdentifier($name) || ! $class->isIdGeneratorIdentity()) && ($name !== $class->versionField)) { + if (( ! $class->isIdentifier($name) || ! $class->isIdGeneratorIdentity()) + && (! $class->isVersioned() || $name !== $class->versionProperty->getName())) { $actualData[$name] = $value; } } @@ -939,7 +940,7 @@ public function recomputeSingleEntityChangeSet(ClassMetadata $class, $entity) foreach ($class->reflFields as $name => $refProp) { if (( ! $class->isIdentifier($name) || ! $class->isIdGeneratorIdentity()) - && ($name !== $class->versionField) + && ($class->versionProperty === null || $name !== $class->versionProperty->getName()) && ! $class->isCollectionValuedAssociation($name)) { $actualData[$name] = $refProp->getValue($entity); } @@ -1456,7 +1457,7 @@ public function getEntityState($entity, $assume = null) case ($class->isIdentifierNatural()): // Check for a version field, if available, to avoid a db lookup. if ($class->isVersioned()) { - return ($class->getFieldValue($entity, $class->versionField)) + return $class->versionProperty->getValue($entity) ? self::STATE_DETACHED : self::STATE_NEW; } @@ -1890,9 +1891,8 @@ private function ensureVersionMatch(ClassMetadata $class, $entity, $managedCopy) return; } - $reflField = $class->reflFields[$class->versionField]; - $managedCopyVersion = $reflField->getValue($managedCopy); - $entityVersion = $reflField->getValue($entity); + $managedCopyVersion = $class->versionProperty->getValue($managedCopy); + $entityVersion = $class->versionProperty->getValue($entity); // Throw exception if versions don't match. if ($managedCopyVersion == $entityVersion) { @@ -2329,7 +2329,7 @@ public function lock($entity, $lockMode, $lockVersion = null) $entity->__load(); } - $entityVersion = $class->reflFields[$class->versionField]->getValue($entity); + $entityVersion = $class->versionProperty->getValue($entity); if ($entityVersion != $lockVersion) { throw OptimisticLockException::lockFailedVersionMismatch($entity, $lockVersion, $entityVersion); diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 4f52721e0ad..47491dfa9ce 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -197,10 +197,15 @@ public function testFieldMappings($class) * @depends testFieldMappings * @param ClassMetadata $class */ - public function testVersionedField($class) + public function testVersionProperty($class) { self::assertTrue($class->isVersioned()); - self::assertEquals("version", $class->versionField); + self::assertNotNull($class->versionProperty); + + $versionPropertyName = $class->versionProperty->getName(); + + self::assertEquals("version", $versionPropertyName); + self::assertNotNull($class->getProperty($versionPropertyName)); } /** @@ -1250,7 +1255,7 @@ public static function loadMetadata(ClassMetadata $metadata) $property = $metadata->addProperty('version', Type::getType('integer')); - $metadata->setVersionMetadata($property); + $metadata->setVersionProperty($property); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); $metadata->mapOneToOne( diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 86c74b9515c..478e77a8474 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -234,7 +234,7 @@ public function testSetInvalidVersionMapping_ThrowsException() $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - $metadata->setVersionMetadata($property); + $metadata->setVersionProperty($property); } public function testGetSingleIdentifierFieldName_MultipleIdentifierEntity_ThrowsException() diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index e53b8957cc2..e2fcfe0d2dc 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -55,7 +55,7 @@ ] ); -$metadata->setVersionMetadata($metadata->addProperty('version', Type::getType('integer'))); +$metadata->setVersionProperty($metadata->addProperty('version', Type::getType('integer'))); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); From dadb0ee576e3ecd36bc939c91ad31be50dbd8a76 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sun, 12 Jun 2016 12:16:23 +0000 Subject: [PATCH 042/275] Removed the need for FielMetadata::$currentClass property --- UPGRADE.md | 16 ++++++++-- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 24 ++++++++++----- .../ORM/Mapping/Driver/AnnotationDriver.php | 2 +- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 30 ------------------- lib/Doctrine/ORM/Mapping/Property.php | 10 ------- .../Entity/JoinedSubclassPersister.php | 6 ++-- .../Entity/SingleTablePersister.php | 2 +- .../Query/Exec/MultiTableUpdateExecutor.php | 2 +- lib/Doctrine/ORM/Query/SqlWalker.php | 4 +-- lib/Doctrine/ORM/Tools/EntityGenerator.php | 2 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 8 ++--- lib/Doctrine/ORM/UnitOfWork.php | 7 +++++ .../Mapping/BasicInheritanceMappingTest.php | 4 +-- 13 files changed, 53 insertions(+), 64 deletions(-) diff --git a/UPGRADE.md b/UPGRADE.md index ff1137d4897..6d0efa63b21 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -1,5 +1,10 @@ # Upgrade to 3.0 +## BC Break: Changed methods in ``ClassMetadata`` + +* ``ClassMetadata::addInheritedProperty`` +* ``ClassMetadata::setDiscriminatorColumn`` + ## BC Break: Removed methods in ``ClassMetadata`` * ``ClassMetadata::getTypeOfField`` (to be removed, part of Common API) @@ -12,6 +17,9 @@ * ``ClassMetadata::getQuotedTableName`` * ``ClassMetadata::getQuotedJoinTableName`` * ``ClassMetadata::getQuotedIdentifierColumnNames`` +* ``ClassMetadata::getIdentifierColumnNames`` => Use ``ClassMetadata::getIdentifierColumns($entityManager)`` +* ``ClassMetadata::setVersionMetadata`` => Use ``ClassMetadata::setVersionProperty`` +* ``ClassMetadata::setVersioned`` * ``ClassMetadata::invokeLifecycleCallbacks`` * ``ClassMetadata::isInheritedField`` => Use ``ClassMetadata::getProperty()::isInherited()`` * ``ClassMetadata::isUniqueField`` => Use ``ClassMetadata::getProperty()::isUnique()`` @@ -20,8 +28,8 @@ ## BC Break: Removed ``quoted`` index from table, field and sequence mappings -All conversions are now being called, always. Implement your own ``Doctrine\ORM\Mapping\QuoteStrategy`` to manipulate -to your custom desired behavior. +Quoting is now always called. Implement your own ``Doctrine\ORM\Mapping\NamingStrategy`` to manipulate +your schema, tables and column names to your custom desired naming convention. ## BC Break: Removed ``ClassMetadata::$fieldMappings[$fieldName]['requireSQLConversion']`` @@ -48,6 +56,10 @@ classes in the same namespace and it was used to speedup ClassMetadata creation purposes. Namespace could be easily inferred by asking ``\ReflectionClass`` which was already stored internally. +### BC Break: Removed ``ClassMetadata::$isVersioned`` + +Switched to a method alternative: ``ClassMetadata::isVersioned()`` + ## BC Break: Removed ``Doctrine\ORM\Mapping\ClassMetadataInfo`` There was no reason to keep a blank class. All references are now pointing diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index dd1b8b70e23..3d1bcbd5533 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -2012,6 +2012,20 @@ public function isRootEntity() return $this->name == $this->rootEntityName; } + /** + * Checks whether a mapped field is inherited from a superclass. + * + * @param string $fieldName + * + * @return boolean TRUE if the field is inherited, FALSE otherwise. + */ + public function isInheritedProperty($fieldName) + { + $declaringClass = $this->properties[$fieldName]->getDeclaringClass(); + + return ! ($declaringClass->name === $this->name); + } + /** * Checks whether a mapped association field is inherited from a superclass. * @@ -2122,7 +2136,6 @@ public function addProperty($fieldName, Type $type, array $mapping = []) { $property = new FieldMetadata(); - $property->setCurrentClass($this); $property->setDeclaringClass($this); $property->setName($fieldName); $property->setType($type); @@ -2190,11 +2203,6 @@ public function addInheritedProperty(Property $property) { $inheritedProperty = new FieldMetadata(); - $inheritedProperty->setCurrentClass($this); - $inheritedProperty->setDeclaringClass($property->getDeclaringClass()); - $inheritedProperty->setName($property->getName()); - $inheritedProperty->setType($property->getType()); - if ( ! $property->getDeclaringClass()->isMappedSuperclass) { $inheritedProperty->setTableName($property->getTableName()); } @@ -2203,7 +2211,9 @@ public function addInheritedProperty(Property $property) // $inheritedProperty->setTableName($this->getTableName()); //} - $inheritedProperty->setCurrentClass($this); + $inheritedProperty->setDeclaringClass($property->getDeclaringClass()); + $inheritedProperty->setName($property->getName()); + $inheritedProperty->setType($property->getType()); $inheritedProperty->setColumnName($property->getColumnName()); $inheritedProperty->setColumnDefinition($property->getColumnDefinition()); $inheritedProperty->setPrimaryKey($property->isPrimaryKey()); diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 754b1cf65a8..bb4d2d14e26 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -292,7 +292,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat }*/ if (($metadata->isMappedSuperclass && ! $reflProperty->isPrivate()) - || (($property = $metadata->getProperty($reflProperty->name)) !== null && $property->isInherited()) + || (($property = $metadata->getProperty($reflProperty->name)) !== null && $metadata->isInheritedProperty($property->getName())) || $metadata->isInheritedAssociation($reflProperty->name) || $metadata->isInheritedEmbeddedClass($reflProperty->name)) { continue; diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index d0d3c238cbc..b850d5f3361 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -29,11 +29,6 @@ class FieldMetadata extends ColumnMetadata implements Property */ private $declaringClass; - /** - * @var ClassMetadata - */ - private $currentClass; - /** * @var \ReflectionProperty */ @@ -60,22 +55,6 @@ public function setDeclaringClass(ClassMetadata $declaringClass) $this->declaringClass = $declaringClass; } - /** - * {@inheritdoc} - */ - public function getCurrentClass() - { - return $this->currentClass; - } - - /** - * @param ClassMetadata $currentClass - */ - public function setCurrentClass(ClassMetadata $currentClass) - { - $this->currentClass = $currentClass; - } - /** * {@inheritdoc} */ @@ -92,14 +71,6 @@ public function setName($name) $this->name = $name; } - /** - * {@inheritdoc} - */ - public function isInherited() - { - return $this->declaringClass !== $this->currentClass; - } - /** * {@inheritdoc} */ @@ -150,7 +121,6 @@ public function getMapping() { return [ 'declaringClass' => $this->declaringClass->name, - 'currentClass' => $this->currentClass->name, 'tableName' => $this->tableName, 'columnName' => $this->columnName, 'columnDefinition' => $this->columnDefinition, diff --git a/lib/Doctrine/ORM/Mapping/Property.php b/lib/Doctrine/ORM/Mapping/Property.php index be6763af061..52751fef4b6 100644 --- a/lib/Doctrine/ORM/Mapping/Property.php +++ b/lib/Doctrine/ORM/Mapping/Property.php @@ -29,16 +29,6 @@ interface Property */ public function getDeclaringClass(); - /** - * @return ClassMetadata - */ - public function getCurrentClass(); - - /** - * @return ClassMetadata - */ - public function setCurrentClass(ClassMetadata $currentClass); - /** * @param object $object * @param mixed $value diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index bbae3e0d046..b0ba890f2d2 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -63,7 +63,7 @@ public function getOwningTable($fieldName) $cm = $this->em->getClassMetadata($this->class->associationMappings[$fieldName]['inherited']); break; - case ($property && $property->isInherited()): + case ($property && $this->class->isInheritedProperty($fieldName)): $cm = $property->getDeclaringClass(); break; @@ -461,7 +461,7 @@ protected function getSelectColumnsSQL() // Add subclass columns foreach ($subClass->getProperties() as $fieldName => $property) { - if ($property->isInherited()) { + if ($subClass->isInheritedProperty($fieldName)) { continue; } @@ -514,7 +514,7 @@ protected function getInsertColumnList() foreach ($this->class->reflFields as $name => $field) { $property = $this->class->getProperty($name); - if (($property && $property->isInherited()) + if (($property && $this->class->isInheritedProperty($name)) || isset($this->class->associationMappings[$name]['inherited']) || ($versionPropertyName === $name) /*|| isset($this->class->embeddedClasses[$name])*/) { diff --git a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php index e819aca763a..8c79dafacc5 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php @@ -67,7 +67,7 @@ protected function getSelectColumnsSQL() // Regular columns foreach ($subClass->getProperties() as $fieldName => $property) { - if ($property->isInherited()) { + if ($subClass->isInheritedProperty($property->getName())) { continue; } diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php index ae300cf7fce..7db07a59b1e 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php @@ -111,7 +111,7 @@ public function __construct(AST\Node $AST, $sqlWalker) foreach ($updateItems as $updateItem) { $field = $updateItem->pathExpression->field; - if ((($property = $class->getProperty($field)) !== null && ! $property->isInherited()) || + if ((($property = $class->getProperty($field)) !== null && ! $class->isInheritedProperty($field)) || (isset($class->associationMappings[$field]) && ! isset($class->associationMappings[$field]['inherited']))) { $newValue = $updateItem->newValue; diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index d3922c99edf..7adc2997016 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -637,7 +637,7 @@ public function walkIdentificationVariable($identificationVariable, $fieldName = $property = $class->getProperty($fieldName); - if ($class->isInheritanceTypeJoined() && $property->isInherited()) { + if ($class->isInheritanceTypeJoined() && $class->isInheritedProperty($fieldName)) { $class = $property->getDeclaringClass(); } @@ -1412,7 +1412,7 @@ public function walkSelectExpression($selectExpression) $subClass = $this->em->getClassMetadata($subClassName); foreach ($subClass->getProperties() as $fieldName => $property) { - if ($property->isInherited() || ($partialFieldSet && !in_array($fieldName, $partialFieldSet))) { + if ($subClass->isInheritedProperty($fieldName) || ($partialFieldSet && !in_array($fieldName, $partialFieldSet))) { continue; } diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 433a456682c..a3db151b32b 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -1314,7 +1314,7 @@ protected function generateEntityFieldMappingProperties(ClassMetadata $metadata) foreach ($metadata->getProperties() as $fieldName => $property) { if ($this->hasProperty($fieldName, $metadata) || - $property->isInherited() /*|| + $metadata->isInheritedProperty($fieldName) /*|| ( isset($fieldMapping['declaredField']) && isset($metadata->embeddedClasses[$fieldMapping['declaredField']]) diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 1d94f912499..42fb55f7b35 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -190,7 +190,7 @@ public function getSchemaFromMetadata(array $classes) $pkColumns = []; foreach ($class->getProperties() as $fieldName => $property) { - if (! $property->isInherited()) { + if (! $class->isInheritedProperty($fieldName)) { $columnName = $this->quoteStrategy->getColumnName($property, $this->platform); $this->gatherColumn($class, $property, $table); @@ -213,7 +213,7 @@ public function getSchemaFromMetadata(array $classes) foreach ($class->identifier as $identifierField) { $idProperty = $class->getProperty($identifierField); - if ($idProperty->isInherited()) { + if ($class->isInheritedProperty($identifierField)) { $column = $this->gatherColumn($class, $idProperty, $table); $columnName = $column->getQuotedName($this->platform); @@ -397,8 +397,8 @@ private function gatherColumns($class, Table $table) { $pkColumns = []; - foreach ($class->getProperties() as $property) { - if ($class->isInheritanceTypeSingleTable() && $property->isInherited()) { + foreach ($class->getProperties() as $fieldName => $property) { + if ($class->isInheritanceTypeSingleTable() && $class->isInheritedProperty($fieldName)) { continue; } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 7755030c993..e8521a9fd4e 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -498,6 +498,10 @@ private function executeExtraUpdates() list ($entity, $changeset) = $update; $this->entityChangeSets[$oid] = $changeset; + +// echo 'Extra update: '; +// \Doctrine\Common\Util\Debug::dump($changeset, 3); + $this->getEntityPersister(get_class($entity))->update($entity); } @@ -1053,6 +1057,9 @@ private function executeUpdates($class) } if ( ! empty($this->entityChangeSets[$oid])) { +// echo 'Update: '; +// \Doctrine\Common\Util\Debug::dump($this->entityChangeSets[$oid], 3); + $persister->update($entity); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index c4eae0d5524..d0e43d50d20 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -60,8 +60,8 @@ public function testGetMetadataForSubclassWithMappedSuperclass() self::assertNotNull($class->getProperty('mapped1')); self::assertNotNull($class->getProperty('mapped2')); - self::assertTrue($class->getProperty('mapped1')->isInherited()); - self::assertTrue($class->getProperty('mapped2')->isInherited()); + self::assertTrue($class->isInheritedProperty('mapped1')); + self::assertTrue($class->isInheritedProperty('mapped2')); self::assertNull($class->getProperty('transient')); From 0a762153b212afd8d3788f4c9f0a02bd1b51d806 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sun, 12 Jun 2016 17:45:29 +0000 Subject: [PATCH 043/275] Cosmetic --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 3d1bcbd5533..40d2d1ba1f4 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -2202,16 +2202,13 @@ public function addProperty($fieldName, Type $type, array $mapping = []) public function addInheritedProperty(Property $property) { $inheritedProperty = new FieldMetadata(); + $declaringClass = $property->getDeclaringClass(); - if ( ! $property->getDeclaringClass()->isMappedSuperclass) { + if ( ! $declaringClass->isMappedSuperclass) { $inheritedProperty->setTableName($property->getTableName()); } - //if ($declaringClass->isMappedSuperclass && ! $this->isMappedSuperclass) { - // $inheritedProperty->setTableName($this->getTableName()); - //} - - $inheritedProperty->setDeclaringClass($property->getDeclaringClass()); + $inheritedProperty->setDeclaringClass($declaringClass); $inheritedProperty->setName($property->getName()); $inheritedProperty->setType($property->getType()); $inheritedProperty->setColumnName($property->getColumnName()); From 2b838c39a9279ef08763c733abd49ae7e57c2360 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sun, 12 Jun 2016 18:04:01 +0000 Subject: [PATCH 044/275] Cosmetic --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 2 +- .../Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php | 7 ++++--- tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php | 2 +- tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php | 6 ++---- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 40d2d1ba1f4..8ac35a50e50 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -957,7 +957,7 @@ public function validateIdentifier() public function validateAssociations() { foreach ($this->associationMappings as $mapping) { - if ( ! ClassLoader::classExists($mapping['targetEntity']) ) { + if ( ! class_exists($mapping['targetEntity'], true)) { throw MappingException::invalidTargetEntityClass($mapping['targetEntity'], $this->name, $mapping['fieldName']); } } diff --git a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php index 06eafeacdaa..516814ca65a 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Hydration; +use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Query\ResultSetMapping; @@ -105,7 +106,7 @@ public function testFluentInterface() public function testAddNamedNativeQueryResultSetMapping() { $cm = new ClassMetadata(CmsUser::class); - $cm->initializeReflection(new \Doctrine\Common\Persistence\Mapping\RuntimeReflectionService); + $cm->initializeReflection(new RuntimeReflectionService()); $cm->mapOneToOne( [ @@ -197,7 +198,7 @@ public function testAddNamedNativeQueryResultSetMapping() public function testAddNamedNativeQueryResultSetMappingWithoutFields() { $cm = new ClassMetadata(CmsUser::class); - $cm->initializeReflection(new \Doctrine\Common\Persistence\Mapping\RuntimeReflectionService); + $cm->initializeReflection(new RuntimeReflectionService()); $cm->addNamedNativeQuery( [ @@ -247,7 +248,7 @@ public function testAddNamedNativeQueryResultClass() { $cm = new ClassMetadata(CmsUser::class); - $cm->initializeReflection(new \Doctrine\Common\Persistence\Mapping\RuntimeReflectionService); + $cm->initializeReflection(new RuntimeReflectionService()); $cm->addNamedNativeQuery( [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php b/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php index 8a7fe6c3a4f..4f9bf385de9 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php @@ -84,7 +84,7 @@ public function testGetTableName() $cm = new ClassMetadata(CmsUser::class); - $cm->initializeReflection(new RuntimeReflectionService); + $cm->initializeReflection(new RuntimeReflectionService()); $cm->setPrimaryTable(['name'=>'cms_user']); self::assertEquals('cms_user', $this->strategy->getTableName($cm, $this->platform)); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 2e47393ac75..48b8f9f11f1 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -589,10 +589,8 @@ public function testLoadPrefixedMetadata() $book = $this->newInstance($metadata); - $reflectionService = new RuntimeReflectionService(); - $cm = new ClassMetadata($metadata->name); - $cm->initializeReflection($reflectionService); + $cm->initializeReflection(new RuntimeReflectionService()); $driver->loadMetadataForClass($cm->name, $cm); @@ -630,7 +628,7 @@ public function testMappedSuperclassAnnotationGeneration() $driver = new AnnotationDriver(new AnnotationReader(), []); $cm = new ClassMetadata($metadata->name); - $cm->initializeReflection(new RuntimeReflectionService); + $cm->initializeReflection(new RuntimeReflectionService()); $driver->loadMetadataForClass($cm->name, $cm); self::assertTrue($cm->isMappedSuperclass); From b5b9ea7a2677d346625d1363712234009fd00f93 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 4 Jul 2016 22:18:50 +0000 Subject: [PATCH 045/275] Removed isCascadeXXX --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 29 +++--- lib/Doctrine/ORM/Tools/EntityGenerator.php | 12 ++- .../ORM/Tools/Export/Driver/PhpExporter.php | 2 +- .../ORM/Tools/Export/Driver/XmlExporter.php | 31 ++---- .../ORM/Tools/Export/Driver/YamlExporter.php | 32 ++---- lib/Doctrine/ORM/UnitOfWork.php | 17 ++-- .../ORM/Functional/Ticket/DDC599Test.php | 2 +- .../ORM/Functional/Ticket/DDC758Test.php | 10 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 98 +++++++++---------- .../ORM/Mapping/ClassMetadataBuilderTest.php | 49 +--------- .../php/Doctrine.Tests.ORM.Mapping.User.php | 4 +- .../AbstractClassMetadataExporterTest.php | 40 ++++---- 12 files changed, 125 insertions(+), 201 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 8ac35a50e50..c03b78352cd 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1351,25 +1351,22 @@ protected function validateAndCompleteAssociationMapping(array $mapping) } // Cascades - $cascades = isset($mapping['cascade']) ? array_map('strtolower', $mapping['cascade']) : []; - $allCascades = ['remove', 'persist', 'refresh', 'merge', 'detach']; + $cascadeTypes = ['remove', 'persist', 'refresh', 'merge', 'detach']; + $cascades = isset($mapping['cascade']) ? array_map('strtolower', $mapping['cascade']) : []; if (in_array('all', $cascades)) { - $cascades = $allCascades; - } elseif (count($cascades) !== count(array_intersect($cascades, $allCascades))) { + $cascades = $cascadeTypes; + } + + if (count($cascades) !== count(array_intersect($cascades, $cascadeTypes))) { throw MappingException::invalidCascadeOption( - array_diff($cascades, $allCascades), + array_diff($cascades, array_intersect($cascades, $cascadeTypes)), $this->name, $mapping['fieldName'] ); } $mapping['cascade'] = $cascades; - $mapping['isCascadeRemove'] = in_array('remove', $cascades); - $mapping['isCascadePersist'] = in_array('persist', $cascades); - $mapping['isCascadeRefresh'] = in_array('refresh', $cascades); - $mapping['isCascadeMerge'] = in_array('merge', $cascades); - $mapping['isCascadeDetach'] = in_array('detach', $cascades); return $mapping; } @@ -1446,9 +1443,12 @@ protected function validateAndCompleteOneToOneMapping(array $mapping) } $mapping['orphanRemoval'] = isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']; - $mapping['isCascadeRemove'] = $mapping['orphanRemoval'] || $mapping['isCascadeRemove']; if ($mapping['orphanRemoval']) { + if (! in_array('remove', $mapping['cascade'])) { + $mapping['cascade'][] = 'remove'; + } + unset($mapping['unique']); } @@ -1478,8 +1478,11 @@ protected function validateAndCompleteOneToManyMapping(array $mapping) throw MappingException::oneToManyRequiresMappedBy($mapping['fieldName']); } - $mapping['orphanRemoval'] = isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']; - $mapping['isCascadeRemove'] = $mapping['orphanRemoval'] || $mapping['isCascadeRemove']; + $mapping['orphanRemoval'] = isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']; + + if ($mapping['orphanRemoval'] && ! in_array('remove', $mapping['cascade'])) { + $mapping['cascade'][] = 'remove'; + } $this->assertMappingOrderBy($mapping); diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index a3db151b32b..5d463df19c4 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -1503,6 +1503,7 @@ protected function generateAssociationMappingPropertyDocBlock(array $association } $type = null; + switch ($associationMapping['type']) { case ClassMetadata::ONE_TO_ONE: $type = 'OneToOne'; @@ -1517,6 +1518,7 @@ protected function generateAssociationMappingPropertyDocBlock(array $association $type = 'ManyToMany'; break; } + $typeOptions = []; if (isset($associationMapping['targetEntity'])) { @@ -1534,11 +1536,11 @@ protected function generateAssociationMappingPropertyDocBlock(array $association if ($associationMapping['cascade']) { $cascades = []; - if ($associationMapping['isCascadePersist']) $cascades[] = '"persist"'; - if ($associationMapping['isCascadeRemove']) $cascades[] = '"remove"'; - if ($associationMapping['isCascadeDetach']) $cascades[] = '"detach"'; - if ($associationMapping['isCascadeMerge']) $cascades[] = '"merge"'; - if ($associationMapping['isCascadeRefresh']) $cascades[] = '"refresh"'; + foreach (['remove', 'persist', 'refresh', 'merge', 'detach'] as $cascadeType) { + if (in_array($cascadeType, $associationMapping['cascade'])) { + $cascades[] = sprintf('"%s"', $cascadeType); + } + } if (count($cascades) === 5) { $cascades = ['"all"']; diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 0de75ecb9ed..517a05a9a09 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -113,7 +113,7 @@ public function exportClassMetadata(ClassMetadata $metadata) foreach ($metadata->associationMappings as $associationMapping) { $cascade = ['remove', 'persist', 'refresh', 'merge', 'detach']; foreach ($cascade as $key => $value) { - if ( ! $associationMapping['isCascade'.ucfirst($value)]) { + if ( ! in_array($value, $associationMapping['cascade'])) { unset($cascade[$key]); } } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 6cf4872da4c..18d5bfb8d73 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -283,35 +283,22 @@ public function exportClassMetadata(ClassMetadata $metadata) $associationMappingXml->addAttribute('fetch', $this->_getFetchModeString($associationMapping['fetch'])); } - $cascade = []; - if ($associationMapping['isCascadeRemove']) { - $cascade[] = 'cascade-remove'; - } - - if ($associationMapping['isCascadePersist']) { - $cascade[] = 'cascade-persist'; - } - - if ($associationMapping['isCascadeRefresh']) { - $cascade[] = 'cascade-refresh'; - } - - if ($associationMapping['isCascadeMerge']) { - $cascade[] = 'cascade-merge'; - } + $cascades = []; - if ($associationMapping['isCascadeDetach']) { - $cascade[] = 'cascade-detach'; + foreach (['remove', 'persist', 'refresh', 'merge', 'detach'] as $type) { + if (in_array($type, $associationMapping['cascade'])) { + $cascades[] = 'cascade-' . $type; + } } - if (count($cascade) === 5) { - $cascade = ['cascade-all']; + if (count($cascades) === 5) { + $cascades = ['cascade-all']; } - if ($cascade) { + if ($cascades) { $cascadeXml = $associationMappingXml->addChild('cascade'); - foreach ($cascade as $type) { + foreach ($cascades as $type) { $cascadeXml->addChild($type); } } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php index fd0384e6acc..d4935bf81d2 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php @@ -153,30 +153,16 @@ public function exportClassMetadata(ClassMetadata $metadata) } foreach ($metadata->associationMappings as $name => $associationMapping) { - $cascade = []; - - if ($associationMapping['isCascadeRemove']) { - $cascade[] = 'remove'; - } - - if ($associationMapping['isCascadePersist']) { - $cascade[] = 'persist'; - } - - if ($associationMapping['isCascadeRefresh']) { - $cascade[] = 'refresh'; - } - - if ($associationMapping['isCascadeMerge']) { - $cascade[] = 'merge'; - } + $cascade = array_filter( + $associationMapping['cascade'], + function ($cascade) { + return in_array($cascade, ['remove', 'persist', 'refresh', 'merge', 'detach']); + } + ); - if ($associationMapping['isCascadeDetach']) { - $cascade[] = 'detach'; - } - if (count($cascade) === 5) { - $cascade = ['all']; - } + $cascade = count($cascade) !== 5 + ? $cascade + : ['all']; $associationMappingArray = [ 'targetEntity' => $associationMapping['targetEntity'], diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index e8521a9fd4e..696a1ee913a 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -842,7 +842,7 @@ private function computeAssociationChanges($assoc, $value) switch ($state) { case self::STATE_NEW: - if ( ! $assoc['isCascadePersist']) { + if ( ! in_array('persist', $assoc['cascade'])) { throw ORMInvalidArgumentException::newEntityFoundThroughRelationship($assoc, $entry); } @@ -1942,6 +1942,7 @@ private function updateAssociationWithMergedEntity($entity, array $association, return; } + /** @var array|Collection $value */ $value = $prevClass->reflFields[$assocField]->getValue($previousManagedCopy); $value[] = $managedCopy; @@ -2076,7 +2077,7 @@ private function cascadeRefresh($entity, array &$visited) $associationMappings = array_filter( $class->associationMappings, - function ($assoc) { return $assoc['isCascadeRefresh']; } + function ($assoc) { return in_array('refresh', $assoc['cascade']); } ); foreach ($associationMappings as $assoc) { @@ -2119,7 +2120,7 @@ private function cascadeDetach($entity, array &$visited) $associationMappings = array_filter( $class->associationMappings, - function ($assoc) { return $assoc['isCascadeDetach']; } + function ($assoc) { return in_array('detach', $assoc['cascade']); } ); foreach ($associationMappings as $assoc) { @@ -2163,7 +2164,7 @@ private function cascadeMerge($entity, $managedCopy, array &$visited) $associationMappings = array_filter( $class->associationMappings, - function ($assoc) { return $assoc['isCascadeMerge']; } + function ($assoc) { return in_array('merge', $assoc['cascade']); } ); foreach ($associationMappings as $assoc) { @@ -2202,7 +2203,7 @@ private function cascadePersist($entity, array &$visited) $associationMappings = array_filter( $class->associationMappings, - function ($assoc) { return $assoc['isCascadePersist']; } + function ($assoc) { return in_array('persist', $assoc['cascade']); } ); foreach ($associationMappings as $assoc) { @@ -2262,7 +2263,7 @@ private function cascadeRemove($entity, array &$visited) $associationMappings = array_filter( $class->associationMappings, - function ($assoc) { return $assoc['isCascadeRemove']; } + function ($assoc) { return in_array('remove', $assoc['cascade']); } ); $entitiesToCascade = []; @@ -3384,7 +3385,7 @@ private function mergeEntityStateIntoManagedCopy($entity, $managedCopy) continue; } - if ( ! $assoc2['isCascadeMerge']) { + if ( ! in_array('merge', $assoc2['cascade'])) { if ($this->getEntityState($other) === self::STATE_DETACHED) { $targetClass = $this->em->getClassMetadata($assoc2['targetEntity']); $relatedId = $targetClass->getIdentifierValues($other); @@ -3424,7 +3425,7 @@ private function mergeEntityStateIntoManagedCopy($entity, $managedCopy) $prop->setValue($managedCopy, $managedCol); } - if ($assoc2['isCascadeMerge']) { + if (in_array('merge', $assoc2['cascade'])) { $managedCol->initialize(); // clear and set dirty a managed collection if its not also the same collection to merge from. diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php index f87bb88d369..20c4ab34135 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php @@ -67,7 +67,7 @@ public function testCascadeRemoveOnChildren() $class = $this->_em->getClassMetadata(DDC599Subitem::class); self::assertArrayHasKey('children', $class->associationMappings); - self::assertTrue($class->associationMappings['children']['isCascadeRemove']); + self::assertContains('remove', $class->associationMappings['children']['cascade']); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php index f82c48440e8..8898f006b23 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php @@ -22,12 +22,10 @@ public function setUp() */ private function setCascadeMergeFor($class) { - $metadata = $this->_em->getMetadataFactory()->getMetadataFor($class); - foreach ($metadata->associationMappings as $key => $associationMapping) { - $metadata->associationMappings[$key]["isCascadePersist"] = false; - $metadata->associationMappings[$key]["isCascadeMerge"] = true; - $metadata->associationMappings[$key]["isCascadeRemove"] = false; - $metadata->associationMappings[$key]["isCascadeDetach"] = false; + $metadata = $this->_em->getMetadataFactory()->getMetaDataFor($class); + + foreach ($metadata->associationMappings as $key => &$associationMapping) { + $associationMapping['cascade'] = ['merge']; } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 47491dfa9ce..95d19ad13c9 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -336,11 +336,7 @@ public function testOwningOneToOneAssociation($class) self::assertTrue($class->associationMappings['address']['isOwningSide']); self::assertEquals('user', $class->associationMappings['address']['inversedBy']); // Check cascading - self::assertTrue($class->associationMappings['address']['isCascadeRemove']); - self::assertFalse($class->associationMappings['address']['isCascadePersist']); - self::assertFalse($class->associationMappings['address']['isCascadeRefresh']); - self::assertFalse($class->associationMappings['address']['isCascadeDetach']); - self::assertFalse($class->associationMappings['address']['isCascadeMerge']); + self::assertEquals(['remove'], $class->associationMappings['address']['cascade']); return $class; } @@ -353,12 +349,9 @@ public function testInverseOneToManyAssociation($class) { self::assertTrue(isset($class->associationMappings['phonenumbers'])); self::assertFalse($class->associationMappings['phonenumbers']['isOwningSide']); - self::assertTrue($class->associationMappings['phonenumbers']['isCascadePersist']); - self::assertTrue($class->associationMappings['phonenumbers']['isCascadeRemove']); - self::assertFalse($class->associationMappings['phonenumbers']['isCascadeRefresh']); - self::assertFalse($class->associationMappings['phonenumbers']['isCascadeDetach']); - self::assertFalse($class->associationMappings['phonenumbers']['isCascadeMerge']); self::assertTrue($class->associationMappings['phonenumbers']['orphanRemoval']); + // Check cascading + self::assertEquals(['persist', 'remove'], $class->associationMappings['phonenumbers']['cascade']); // Test Order By self::assertEquals(['number' => 'ASC'], $class->associationMappings['phonenumbers']['orderBy']); @@ -375,11 +368,7 @@ public function testManyToManyAssociationWithCascadeAll($class) self::assertTrue(isset($class->associationMappings['groups'])); self::assertTrue($class->associationMappings['groups']['isOwningSide']); // Make sure that cascade-all works as expected - self::assertTrue($class->associationMappings['groups']['isCascadeRemove']); - self::assertTrue($class->associationMappings['groups']['isCascadePersist']); - self::assertTrue($class->associationMappings['groups']['isCascadeRefresh']); - self::assertTrue($class->associationMappings['groups']['isCascadeDetach']); - self::assertTrue($class->associationMappings['groups']['isCascadeMerge']); + self::assertEquals(['remove', 'persist', 'refresh', 'merge', 'detach'], $class->associationMappings['groups']['cascade']); self::assertFalse(isset($class->associationMappings['groups']['orderBy'])); @@ -754,11 +743,7 @@ public function testAssociationOverridesMapping() self::assertEquals($guestGroups['inversedBy'], $adminGroups['inversedBy']); self::assertEquals($guestGroups['isOwningSide'], $adminGroups['isOwningSide']); self::assertEquals($guestGroups['fetch'], $adminGroups['fetch']); - self::assertEquals($guestGroups['isCascadeRemove'], $adminGroups['isCascadeRemove']); - self::assertEquals($guestGroups['isCascadePersist'], $adminGroups['isCascadePersist']); - self::assertEquals($guestGroups['isCascadeRefresh'], $adminGroups['isCascadeRefresh']); - self::assertEquals($guestGroups['isCascadeMerge'], $adminGroups['isCascadeMerge']); - self::assertEquals($guestGroups['isCascadeDetach'], $adminGroups['isCascadeDetach']); + self::assertEquals($guestGroups['cascade'], $adminGroups['cascade']); // assert not override attributes self::assertEquals('ddc964_users_groups', $guestGroups['joinTable']['name']); @@ -792,11 +777,7 @@ public function testAssociationOverridesMapping() self::assertEquals($guestAddress['inversedBy'], $adminAddress['inversedBy']); self::assertEquals($guestAddress['isOwningSide'], $adminAddress['isOwningSide']); self::assertEquals($guestAddress['fetch'], $adminAddress['fetch']); - self::assertEquals($guestAddress['isCascadeRemove'], $adminAddress['isCascadeRemove']); - self::assertEquals($guestAddress['isCascadePersist'], $adminAddress['isCascadePersist']); - self::assertEquals($guestAddress['isCascadeRefresh'], $adminAddress['isCascadeRefresh']); - self::assertEquals($guestAddress['isCascadeMerge'], $adminAddress['isCascadeMerge']); - self::assertEquals($guestAddress['isCascadeDetach'], $adminAddress['isCascadeDetach']); + self::assertEquals($guestAddress['cascade'], $adminAddress['cascade']); // assert override self::assertEquals('address_id', $guestAddress['joinColumns'][0]['name']); @@ -1260,31 +1241,33 @@ public static function loadMetadata(ClassMetadata $metadata) $metadata->mapOneToOne( [ - 'fieldName' => 'address', - 'targetEntity' => Address::class, - 'cascade' => [0 => 'remove'], - 'mappedBy' => NULL, - 'inversedBy' => 'user', - 'joinColumns' => [ - 0 => [ - 'name' => 'address_id', - 'referencedColumnName' => 'id', - 'onDelete' => 'CASCADE', - ], - ], - 'orphanRemoval' => false, - ] + 'fieldName' => 'address', + 'targetEntity' => Address::class, + 'cascade' => [0 => 'remove'], + 'mappedBy' => null, + 'inversedBy' => 'user', + 'joinColumns' => [ + 0 => [ + 'name' => 'address_id', + 'referencedColumnName' => 'id', + 'onDelete' => 'CASCADE', + ], + ], + 'orphanRemoval' => false, + ] ); + $metadata->mapOneToMany( [ - 'fieldName' => 'phonenumbers', - 'targetEntity' => Phonenumber::class, - 'cascade' => [1 => 'persist'], - 'mappedBy' => 'user', - 'orphanRemoval' => true, - 'orderBy' => ['number' => 'ASC'], - ] + 'fieldName' => 'phonenumbers', + 'targetEntity' => Phonenumber::class, + 'cascade' =>[0 => 'persist'], + 'mappedBy' => 'user', + 'orphanRemoval' => true, + 'orderBy' => ['number' => 'ASC'], + ] ); + $metadata->mapManyToMany( [ 'fieldName' => 'groups', @@ -1300,12 +1283,13 @@ public static function loadMetadata(ClassMetadata $metadata) 'joinTable' => [ 'name' => 'cms_users_groups', 'joinColumns' => [ - 0 => [ - 'name' => 'user_id', - 'referencedColumnName' => 'id', - 'unique' => false, - 'nullable' => false, - ], + 0 => + [ + 'name' => 'user_id', + 'referencedColumnName' => 'id', + 'unique' => false, + 'nullable' => false, + ], ], 'inverseJoinColumns' => [ 0 => [ @@ -1318,12 +1302,22 @@ public static function loadMetadata(ClassMetadata $metadata) 'orderBy' => null, ] ); + + $metadata->table['uniqueConstraints'] = [ + 'search_idx' => [ + 'columns' => ['name', 'user_email'], + 'options' => ['where' => 'name IS NOT NULL'], + ], + ]; + $metadata->table['uniqueConstraints'] = [ 'search_idx' => ['columns' => ['name', 'user_email'], 'options'=> ['where' => 'name IS NOT NULL']], ]; + $metadata->table['indexes'] = [ 'name_idx' => ['columns' => ['name']], 0 => ['columns' => ['user_email']] ]; + $metadata->setSequenceGeneratorDefinition( [ 'sequenceName' => 'tablename_seq', diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php index 7a86e1fff38..29c7f176c22 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php @@ -381,11 +381,6 @@ public function testCreateManyToOne() 'inversedBy' => NULL, 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, - 'isCascadeRemove' => true, - 'isCascadePersist' => true, - 'isCascadeRefresh' => true, - 'isCascadeMerge' => true, - 'isCascadeDetach' => true, 'sourceToTargetKeyColumns' => [ 'group_id' => 'id', ], @@ -445,11 +440,6 @@ public function testCreateManyToOneWithIdentity() 'inversedBy' => NULL, 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, - 'isCascadeRemove' => true, - 'isCascadePersist' => true, - 'isCascadeRefresh' => true, - 'isCascadeMerge' => true, - 'isCascadeDetach' => true, 'sourceToTargetKeyColumns' => ['group_id' => 'id'], 'joinColumnFieldNames' => ['group_id' => 'group_id'], 'targetToSourceKeyColumns' => ['id' => 'group_id'], @@ -501,11 +491,6 @@ public function testCreateOneToOne() 'inversedBy' => NULL, 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, - 'isCascadeRemove' => true, - 'isCascadePersist' => true, - 'isCascadeRefresh' => true, - 'isCascadeMerge' => true, - 'isCascadeDetach' => true, 'sourceToTargetKeyColumns' => ['group_id' => 'id'], 'joinColumnFieldNames' => ['group_id' => 'group_id'], 'targetToSourceKeyColumns' => ['id' => 'group_id'], @@ -558,11 +543,6 @@ public function testCreateOneToOneWithIdentity() 'inversedBy' => NULL, 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, - 'isCascadeRemove' => true, - 'isCascadePersist' => true, - 'isCascadeRefresh' => true, - 'isCascadeMerge' => true, - 'isCascadeDetach' => true, 'sourceToTargetKeyColumns' => ['group_id' => 'id'], 'joinColumnFieldNames' => ['group_id' => 'group_id'], 'targetToSourceKeyColumns' => ['id' => 'group_id'], @@ -641,11 +621,6 @@ public function testCreateManyToMany() 'inversedBy' => NULL, 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, - 'isCascadeRemove' => true, - 'isCascadePersist' => true, - 'isCascadeRefresh' => true, - 'isCascadeMerge' => true, - 'isCascadeDetach' => true, 'isOnDeleteCascade' => true, 'relationToSourceKeyColumns' => ['group_id' => 'id'], 'joinTableColumns' => [ @@ -701,11 +676,6 @@ public function testCreateOneToMany() 'sourceEntity' => CmsUser::class, 'fetch' => 2, 'cascade' => [], - 'isCascadeRemove' => false, - 'isCascadePersist' => false, - 'isCascadeRefresh' => false, - 'isCascadeMerge' => false, - 'isCascadeDetach' => false, 'orphanRemoval' => false, 'declaringClass' => $this->cm, ], @@ -741,7 +711,7 @@ public function testOrphanRemovalOnCreateOneToOne() 'groups' => [ 'fieldName' => 'groups', 'targetEntity' => CmsGroup::class, - 'cascade' => [], + 'cascade' => [0 => 'remove'], 'fetch' => 2, 'joinColumns' => [ 0 => [ @@ -759,11 +729,6 @@ public function testOrphanRemovalOnCreateOneToOne() 'inversedBy' => NULL, 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, - 'isCascadeRemove' => true, - 'isCascadePersist' => false, - 'isCascadeRefresh' => false, - 'isCascadeMerge' => false, - 'isCascadeDetach' => false, 'sourceToTargetKeyColumns' => ['group_id' => 'id'], 'joinColumnFieldNames' => ['group_id' => 'group_id'], 'targetToSourceKeyColumns' => ['id' => 'group_id'], @@ -796,12 +761,7 @@ public function testOrphanRemovalOnCreateOneToMany() 'isOwningSide' => false, 'sourceEntity' => CmsUser::class, 'fetch' => 2, - 'cascade' => [], - 'isCascadeRemove' => true, - 'isCascadePersist' => false, - 'isCascadeRefresh' => false, - 'isCascadeMerge' => false, - 'isCascadeDetach' => false, + 'cascade' => [0 => 'remove'], 'orphanRemoval' => true, 'declaringClass' => $this->cm, ], @@ -861,11 +821,6 @@ public function testOrphanRemovalOnManyToMany() 'inversedBy' => NULL, 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, - 'isCascadeRemove' => false, - 'isCascadePersist' => false, - 'isCascadeRefresh' => false, - 'isCascadeMerge' => false, - 'isCascadeDetach' => false, 'isOnDeleteCascade' => true, 'relationToSourceKeyColumns' => ['group_id' => 'id'], 'joinTableColumns' => [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index e2fcfe0d2dc..fbc3b79eaec 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -76,18 +76,16 @@ 'orphanRemoval' => false, ] ); - $metadata->mapOneToMany( [ 'fieldName' => 'phonenumbers', 'targetEntity' => Phonenumber::class, - 'cascade' => [1 => 'persist'], + 'cascade' => [0 => 'persist'], 'mappedBy' => 'user', 'orphanRemoval' => true, 'orderBy' => ['number' => 'ASC'], ] ); - $metadata->mapManyToMany( [ 'fieldName' => 'groups', diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index f6b29471c49..1c1cdc7d1f7 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -257,11 +257,11 @@ public function testOneToOneAssociationsAreExported($class) self::assertEquals('id', $class->associationMappings['address']['joinColumns'][0]['referencedColumnName']); self::assertEquals('CASCADE', $class->associationMappings['address']['joinColumns'][0]['onDelete']); - self::assertTrue($class->associationMappings['address']['isCascadeRemove']); - self::assertTrue($class->associationMappings['address']['isCascadePersist']); - self::assertFalse($class->associationMappings['address']['isCascadeRefresh']); - self::assertFalse($class->associationMappings['address']['isCascadeMerge']); - self::assertFalse($class->associationMappings['address']['isCascadeDetach']); + self::assertContains('remove', $class->associationMappings['address']['cascade']); + self::assertContains('persist', $class->associationMappings['address']['cascade']); + self::assertNotContains('refresh', $class->associationMappings['address']['cascade']); + self::assertNotContains('merge', $class->associationMappings['address']['cascade']); + self::assertNotContains('detach', $class->associationMappings['address']['cascade']); self::assertTrue($class->associationMappings['address']['orphanRemoval']); self::assertEquals(ClassMetadata::FETCH_EAGER, $class->associationMappings['address']['fetch']); @@ -289,11 +289,11 @@ public function testOneToManyAssociationsAreExported($class) self::assertEquals('user', $class->associationMappings['phonenumbers']['mappedBy']); self::assertEquals(['number' => 'ASC'], $class->associationMappings['phonenumbers']['orderBy']); - self::assertTrue($class->associationMappings['phonenumbers']['isCascadeRemove']); - self::assertTrue($class->associationMappings['phonenumbers']['isCascadePersist']); - self::assertFalse($class->associationMappings['phonenumbers']['isCascadeRefresh']); - self::assertTrue($class->associationMappings['phonenumbers']['isCascadeMerge']); - self::assertFalse($class->associationMappings['phonenumbers']['isCascadeDetach']); + self::assertContains('remove', $class->associationMappings['phonenumbers']['cascade']); + self::assertContains('persist', $class->associationMappings['phonenumbers']['cascade']); + self::assertNotContains('refresh', $class->associationMappings['phonenumbers']['cascade']); + self::assertContains('merge', $class->associationMappings['phonenumbers']['cascade']); + self::assertNotContains('detach', $class->associationMappings['phonenumbers']['cascade']); self::assertTrue($class->associationMappings['phonenumbers']['orphanRemoval']); self::assertEquals(ClassMetadata::FETCH_LAZY, $class->associationMappings['phonenumbers']['fetch']); @@ -318,11 +318,11 @@ public function testManyToManyAssociationsAreExported($class) self::assertEquals('id', $class->associationMappings['groups']['joinTable']['inverseJoinColumns'][0]['referencedColumnName']); self::assertEquals('INT NULL', $class->associationMappings['groups']['joinTable']['inverseJoinColumns'][0]['columnDefinition']); - self::assertTrue($class->associationMappings['groups']['isCascadeRemove']); - self::assertTrue($class->associationMappings['groups']['isCascadePersist']); - self::assertTrue($class->associationMappings['groups']['isCascadeRefresh']); - self::assertTrue($class->associationMappings['groups']['isCascadeMerge']); - self::assertTrue($class->associationMappings['groups']['isCascadeDetach']); + self::assertContains('remove', $class->associationMappings['groups']['cascade']); + self::assertContains('persist', $class->associationMappings['groups']['cascade']); + self::assertContains('refresh', $class->associationMappings['groups']['cascade']); + self::assertContains('merge', $class->associationMappings['groups']['cascade']); + self::assertContains('detach', $class->associationMappings['groups']['cascade']); self::assertEquals(ClassMetadata::FETCH_EXTRA_LAZY, $class->associationMappings['groups']['fetch']); return $class; @@ -352,11 +352,11 @@ public function testLifecycleCallbacksAreExported($class) */ public function testCascadeIsExported($class) { - self::assertTrue($class->associationMappings['phonenumbers']['isCascadePersist']); - self::assertTrue($class->associationMappings['phonenumbers']['isCascadeMerge']); - self::assertTrue($class->associationMappings['phonenumbers']['isCascadeRemove']); - self::assertFalse($class->associationMappings['phonenumbers']['isCascadeRefresh']); - self::assertFalse($class->associationMappings['phonenumbers']['isCascadeDetach']); + self::assertContains('persist', $class->associationMappings['phonenumbers']['cascade']); + self::assertContains('merge', $class->associationMappings['phonenumbers']['cascade']); + self::assertContains('remove', $class->associationMappings['phonenumbers']['cascade']); + self::assertNotContains('refresh', $class->associationMappings['phonenumbers']['cascade']); + self::assertNotContains('detach', $class->associationMappings['phonenumbers']['cascade']); self::assertTrue($class->associationMappings['phonenumbers']['orphanRemoval']); return $class; From a50a3f43e6a6bb8095c34e09ec12feb31c62193d Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Tue, 5 Jul 2016 15:13:43 +0000 Subject: [PATCH 046/275] Breaking everything with start migration to use ClassMetadataBuilder in Mapping Drivers --- lib/Doctrine/ORM/Annotation/Table.php | 4 +- .../Mapping/Builder/ClassMetadataBuilder.php | 63 ++++++++-- .../ORM/Mapping/Driver/AnnotationDriver.php | 109 +++++++----------- 3 files changed, 98 insertions(+), 78 deletions(-) diff --git a/lib/Doctrine/ORM/Annotation/Table.php b/lib/Doctrine/ORM/Annotation/Table.php index d4a1274faf9..f1e2c2b4ae1 100644 --- a/lib/Doctrine/ORM/Annotation/Table.php +++ b/lib/Doctrine/ORM/Annotation/Table.php @@ -38,12 +38,12 @@ final class Table implements Annotation /** * @var array<\Doctrine\ORM\Annotation\Index> */ - public $indexes; + public $indexes = []; /** * @var array<\Doctrine\ORM\Annotation\UniqueConstraint> */ - public $uniqueConstraints; + public $uniqueConstraints = []; /** * @var array diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php index 77b3f11ce9d..4b3db44ee45 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php @@ -132,13 +132,21 @@ public function setReadOnly() /** * Sets the table name. * - * @param string $name + * @param string $name + * @param string|null $schema + * @param array $options * * @return ClassMetadataBuilder */ - public function setTable($name) + public function setTable($name, $schema = null, array $options = []) { - $this->cm->setPrimaryTable(['name' => $name]); + $this->cm->setPrimaryTable( + [ + 'name' => $name, + 'schema' => $schema, + 'options' => $options, + ] + ); return $this; } @@ -146,18 +154,36 @@ public function setTable($name) /** * Adds Index. * - * @param array $columns - * @param string $name + * @param array $columns + * @param string|null $name + * @param array $options + * @param array $flags * * @return ClassMetadataBuilder */ - public function addIndex(array $columns, $name) + public function addIndex(array $columns, $name, array $options = [], array $flags = []) { if (!isset($this->cm->table['indexes'])) { $this->cm->table['indexes'] = []; } - $this->cm->table['indexes'][$name] = ['columns' => $columns]; + $index = ['columns' => $columns]; + + if ( ! empty($options)) { + $index['options'] = $options; + } + + if ( ! empty($flags)) { + $index['flags'] = $flags; + } + + if (!$name) { + $this->cm->table['indexes'][] = $index; + + return $this; + } + + $this->cm->table['indexes'][$name] = $index; return $this; } @@ -165,20 +191,35 @@ public function addIndex(array $columns, $name) /** * Adds Unique Constraint. * - * @param array $columns - * @param string $name + * @param array $columns + * @param string|null $name + * @param array $options * * @return ClassMetadataBuilder */ - public function addUniqueConstraint(array $columns, $name) + public function addUniqueConstraint(array $columns, $name, array $options = []) { if ( ! isset($this->cm->table['uniqueConstraints'])) { $this->cm->table['uniqueConstraints'] = []; } - $this->cm->table['uniqueConstraints'][$name] = ['columns' => $columns]; + $index = ['columns' => $columns]; + + if ( ! empty($options)) { + $index['options'] = $options; + } + + if (!$name) { + $this->cm->table['uniqueConstraints'][] = $index; + + return $this; + } + + $this->cm->table['uniqueConstraints'][$name] = $index; return $this; + + } /** diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index bb4d2d14e26..793ec28cc4d 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -26,6 +26,7 @@ use Doctrine\ORM\Annotation; use Doctrine\ORM\Events; use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; +use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; use Doctrine\ORM\Mapping\MappingException; @@ -45,7 +46,7 @@ class AnnotationDriver extends AbstractAnnotationDriver * {@inheritDoc} */ protected $entityAnnotationClasses = [ - Annotation\Entity::class => 1, + Annotation\Entity::class => 1, Annotation\MappedSuperclass::class => 2, ]; @@ -54,7 +55,8 @@ class AnnotationDriver extends AbstractAnnotationDriver */ public function loadMetadataForClass($className, ClassMetadataInterface $metadata) { - $class = $metadata->getReflectionClass(); + $builder = new ClassMetadataBuilder($metadata); + $class = $metadata->getReflectionClass(); if ( ! $class) { // this happens when running annotation driver in combination with @@ -75,75 +77,57 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat } // Evaluate Entity annotation - if (isset($classAnnotations[Annotation\Entity::class])) { - $entityAnnot = $classAnnotations[Annotation\Entity::class]; - if ($entityAnnot->repositoryClass !== null) { - $metadata->setCustomRepositoryClass($entityAnnot->repositoryClass); - } + switch (true) { + case isset($classAnnotations[Annotation\Entity::class]): + $entityAnnot = $classAnnotations[Annotation\Entity::class]; - if ($entityAnnot->readOnly) { - $metadata->markReadOnly(); - } - } else if (isset($classAnnotations[Annotation\MappedSuperclass::class])) { - $mappedSuperclassAnnot = $classAnnotations[Annotation\MappedSuperclass::class]; - - $metadata->setCustomRepositoryClass($mappedSuperclassAnnot->repositoryClass); - $metadata->isMappedSuperclass = true; - } else if (isset($classAnnotations[Annotation\Embeddable::class])) { - $metadata->isEmbeddedClass = true; - } else { - throw MappingException::classIsNotAValidEntityOrMappedSuperClass($className); - } + if ($entityAnnot->repositoryClass !== null) { + $builder->setCustomRepositoryClass($entityAnnot->repositoryClass); + } - // Evaluate Table annotation - if (isset($classAnnotations[Annotation\Table::class])) { - $tableAnnot = $classAnnotations[Annotation\Table::class]; - $primaryTable = [ - 'name' => $tableAnnot->name, - 'schema' => $tableAnnot->schema - ]; + if ($entityAnnot->readOnly) { + $builder->setReadOnly(); + } - if ($tableAnnot->indexes !== null) { - foreach ($tableAnnot->indexes as $indexAnnot) { - $index = ['columns' => $indexAnnot->columns]; + break; - if ( ! empty($indexAnnot->flags)) { - $index['flags'] = $indexAnnot->flags; - } + case isset($classAnnotations[Annotation\MappedSuperclass::class]): + $mappedSuperclassAnnot = $classAnnotations[Annotation\MappedSuperclass::class]; - if ( ! empty($indexAnnot->options)) { - $index['options'] = $indexAnnot->options; - } + $builder->setCustomRepositoryClass($mappedSuperclassAnnot->repositoryClass); + $builder->setMappedSuperClass(); + break; - if ( ! empty($indexAnnot->name)) { - $primaryTable['indexes'][$indexAnnot->name] = $index; - } else { - $primaryTable['indexes'][] = $index; - } - } - } + case isset($classAnnotations[Annotation\Embeddable::class]): + $builder->setEmbeddable(); + break; - if ($tableAnnot->uniqueConstraints !== null) { - foreach ($tableAnnot->uniqueConstraints as $uniqueConstraintAnnot) { - $uniqueConstraint = ['columns' => $uniqueConstraintAnnot->columns]; + default: + throw MappingException::classIsNotAValidEntityOrMappedSuperClass($className); + } - if ( ! empty($uniqueConstraintAnnot->options)) { - $uniqueConstraint['options'] = $uniqueConstraintAnnot->options; - } + // Evaluate Table annotation + if (isset($classAnnotations[Annotation\Table::class])) { + $tableAnnot = $classAnnotations[Annotation\Table::class]; - if ( ! empty($uniqueConstraintAnnot->name)) { - $primaryTable['uniqueConstraints'][$uniqueConstraintAnnot->name] = $uniqueConstraint; - } else { - $primaryTable['uniqueConstraints'][] = $uniqueConstraint; - } - } - } + $builder->setTable($tableAnnot->name, $tableAnnot->schema, $tableAnnot->options); - if ($tableAnnot->options) { - $primaryTable['options'] = $tableAnnot->options; + foreach ($tableAnnot->indexes as $indexAnnot) { + $builder->addIndex( + $indexAnnot->columns, + $indexAnnot->name, + $indexAnnot->options, + $indexAnnot->flags + ); } - $metadata->setPrimaryTable($primaryTable); + foreach ($tableAnnot->uniqueConstraints as $uniqueConstraintAnnot) { + $builder->addUniqueConstraint( + $uniqueConstraintAnnot->columns, + $uniqueConstraintAnnot->name, + $uniqueConstraintAnnot->options + ); + } } // Evaluate @Cache annotation @@ -227,12 +211,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat throw new \UnexpectedValueException("@NamedQueries should contain an array of @NamedQuery annotations."); } - $metadata->addNamedQuery( - [ - 'name' => $namedQuery->name, - 'query' => $namedQuery->query - ] - ); + $builder->addNamedQuery($namedQuery->name, $namedQuery->query); } } From 0296ed1aa6c32d2a04e4eb7f9a871c250e49918a Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 8 Jul 2016 21:59:36 +0000 Subject: [PATCH 047/275] More work related to ClassMetadataBuilder changes and some fixes to broken tests --- lib/Doctrine/ORM/Annotation/Index.php | 4 ++-- .../ORM/Annotation/UniqueConstraint.php | 2 +- .../Mapping/Builder/ClassMetadataBuilder.php | 16 ++++++++++++++ .../ORM/Mapping/Driver/AnnotationDriver.php | 9 ++++---- .../ORM/Tools/Export/Driver/YamlExporter.php | 6 +++--- .../ORM/Mapping/ClassMetadataBuilderTest.php | 1 + .../Tests/ORM/Mapping/ClassMetadataTest.php | 1 - .../AbstractClassMetadataExporterTest.php | 21 ------------------- .../Export/XmlClassMetadataExporterTest.php | 16 ++++++++++++++ 9 files changed, 43 insertions(+), 33 deletions(-) diff --git a/lib/Doctrine/ORM/Annotation/Index.php b/lib/Doctrine/ORM/Annotation/Index.php index 0a00b163678..6e808d9a51c 100644 --- a/lib/Doctrine/ORM/Annotation/Index.php +++ b/lib/Doctrine/ORM/Annotation/Index.php @@ -38,10 +38,10 @@ final class Index implements Annotation /** * @var array */ - public $flags; + public $flags = []; /** * @var array */ - public $options; + public $options = []; } diff --git a/lib/Doctrine/ORM/Annotation/UniqueConstraint.php b/lib/Doctrine/ORM/Annotation/UniqueConstraint.php index 44d63b88af6..c4238fc31e6 100644 --- a/lib/Doctrine/ORM/Annotation/UniqueConstraint.php +++ b/lib/Doctrine/ORM/Annotation/UniqueConstraint.php @@ -38,5 +38,5 @@ final class UniqueConstraint implements Annotation /** * @var array */ - public $options; + public $options = []; } diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php index 4b3db44ee45..0ada14d42d1 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php @@ -151,6 +151,22 @@ public function setTable($name, $schema = null, array $options = []) return $this; } + /** + * @param string $usage + * @param string|null $region + */ + public function setCache($usage, $region = null) + { + $region = $region ?: strtolower(str_replace('\\', '_', $this->cm->rootEntityName)); + + $this->cm->enableCache( + [ + 'usage' => $usage, + 'region' => $region, + ] + ); + } + /** * Adds Index. * diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 793ec28cc4d..e84232ed1f0 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -133,12 +133,11 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat // Evaluate @Cache annotation if (isset($classAnnotations[Annotation\Cache::class])) { $cacheAnnot = $classAnnotations[Annotation\Cache::class]; - $cacheMap = [ - 'region' => $cacheAnnot->region, - 'usage' => constant(sprintf('%s::CACHE_USAGE_%s', ClassMetadata::class, $cacheAnnot->usage)), - ]; - $metadata->enableCache($cacheMap); + $builder->setCache( + constant(sprintf('%s::CACHE_USAGE_%s', ClassMetadata::class, $cacheAnnot->usage)), + $cacheAnnot->region + ); } // Evaluate NamedNativeQueries annotation diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php index d4935bf81d2..e5e10ffefbb 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php @@ -196,10 +196,10 @@ function ($cascade) { 'orphanRemoval' => $associationMapping['orphanRemoval'], ]; - if (count($associationMapping['joinColumns']) > 1) { - $oneToOneMappingArray['joinColumns'] = $associationMapping['joinColumns']; + if (count($joinColumns) > 1) { + $oneToOneMappingArray['joinColumns'] = $joinColumns; } else { - $oneToOneMappingArray['joinColumn'] = reset($associationMapping['joinColumns']); + $oneToOneMappingArray['joinColumn'] = reset($joinColumns); } $associationMappingArray = array_filter(array_merge($associationMappingArray, $oneToOneMappingArray)); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php index 29c7f176c22..83696469d96 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php @@ -182,6 +182,7 @@ public function testSetPrimaryTableRelated() 'name' => 'users', 'indexes' => ['users_idx' => ['columns' => ['username', 'name']]], 'uniqueConstraints' => ['users_idx' => ['columns' => ['username', 'name']]], + 'options' => [], ], $this->cm->table ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 478e77a8474..d101d750285 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -226,7 +226,6 @@ public function testSetInvalidVersionMapping_ThrowsException() $property = new FieldMetadata(); $property->setDeclaringClass($metadata); - $property->setCurrentClass($metadata); $property->setName('foo'); $property->setType(Type::getType('string')); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index 1c1cdc7d1f7..837cc1de576 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -224,27 +224,6 @@ public function testFieldsAreExported($class) return $class; } - /** - * @depends testExportDirectoryAndFilesAreCreated - */ - public function testFieldsAreProperlySerialized() - { - $type = $this->_getType(); - - if ($type == 'xml') { - $xml = simplexml_load_file(__DIR__ . '/export/'.$type.'/Doctrine.Tests.ORM.Tools.Export.ExportedUser.dcm.xml'); - - $xml->registerXPathNamespace("d", "http://doctrine-project.org/schemas/orm/doctrine-mapping"); - $nodes = $xml->xpath("/d:doctrine-mapping/d:entity/d:field[@name='name' and @type='string' and @nullable='true']"); - self::assertEquals(1, count($nodes)); - - $nodes = $xml->xpath("/d:doctrine-mapping/d:entity/d:field[@name='name' and @type='string' and @unique='true']"); - self::assertEquals(1, count($nodes)); - } else { - $this->markTestSkipped('Test not available for '.$type.' driver'); - } - } - /** * @depends testFieldsAreExported * @param ClassMetadata $class diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php index 085146a7aa2..c5f80f073c4 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php @@ -23,6 +23,22 @@ protected function _getType() return 'xml'; } + /** + * @depends testExportDirectoryAndFilesAreCreated + */ + public function testFieldsAreProperlySerialized() + { + $xml = simplexml_load_file(__DIR__ . '/export/xml/Doctrine.Tests.ORM.Tools.Export.ExportedUser.dcm.xml'); + + $xml->registerXPathNamespace("d", "http://doctrine-project.org/schemas/orm/doctrine-mapping"); + + $nodes = $xml->xpath("/d:doctrine-mapping/d:entity/d:field[@name='name' and @type='string' and @nullable='true']"); + self::assertEquals(1, count($nodes)); + + $nodes = $xml->xpath("/d:doctrine-mapping/d:entity/d:field[@name='name' and @type='string' and @unique='true']"); + self::assertEquals(1, count($nodes)); + } + /** * @group DDC-3428 */ From a78db23b8aed03b0f1b9a74b81fe9dc3a43abc9c Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 9 Jul 2016 03:44:57 +0000 Subject: [PATCH 048/275] Fixes to bugs and made test more consistent --- lib/Doctrine/ORM/Query/SqlWalker.php | 4 +-- .../Functional/CompositePrimaryKeyTest.php | 28 ++++++++++++++----- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 7adc2997016..a6d19522d06 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -1944,7 +1944,7 @@ public function walkCollectionMemberExpression($collMemberExpr) $joinSqlParts = []; foreach ($joinColumns as $joinColumn) { - $property = $class->getProperty($targetClass->fieldNames[$joinColumn['referencedColumnName']]); + $property = $targetClass->getProperty($targetClass->fieldNames[$joinColumn['referencedColumnName']]); $sourceColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); $targetColumn = $this->quoteStrategy->getColumnName($property, $this->platform); @@ -1970,7 +1970,7 @@ public function walkCollectionMemberExpression($collMemberExpr) $this->parserResult->addParameterMapping($dqlParamKey, $this->sqlParamIndex++); } - $sqlParts[] = $targetTableAlias . '.' . $targetColumnName . ' IN (' . $entitySql . ')'; + $sqlParts[] = $targetTableAlias . '.' . $targetColumnName . ' = ' . $entitySql; } $sql .= implode(' AND ', $sqlParts); diff --git a/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyTest.php index 2511ea0feaa..4571f1b5b99 100644 --- a/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyTest.php @@ -1,6 +1,7 @@ putGermanysBrandenburderTor(); $this->putTripAroundEurope(); - $dql = 'SELECT t, p, c FROM Doctrine\Tests\Models\Navigation\NavTour t ' . - 'INNER JOIN t.pois p INNER JOIN p.country c'; + $dql = 'SELECT t, p, c ' + . 'FROM Doctrine\Tests\Models\Navigation\NavTour t ' + . 'INNER JOIN t.pois p ' + . 'INNER JOIN p.country c' + ; + $tours = $this->_em->createQuery($dql)->getResult(); self::assertEquals(1, count($tours)); @@ -122,15 +127,24 @@ public function testCompositeDqlEagerFetching() public function testCompositeCollectionMemberExpression() { - $this->markTestSkipped('How to test this?'); + //$this->markTestSkipped('How to test this?'); $this->putGermanysBrandenburderTor(); $this->putTripAroundEurope(); - $dql = 'SELECT t FROM Doctrine\Tests\Models\Navigation\NavTour t, Doctrine\Tests\Models\Navigation\NavPointOfInterest p ' . - 'WHERE p MEMBER OF t.pois'; - $tours = $this->_em->createQuery($dql) - ->getResult(); + $dql = 'SELECT t ' + . 'FROM Doctrine\Tests\Models\Navigation\NavTour t ' + . ', Doctrine\Tests\Models\Navigation\NavPointOfInterest p ' + . 'WHERE p MEMBER OF t.pois' + ; + + $query = $this->_em->createQuery($dql); + + var_dump($query->getSQL()); + + $tours = $this->_em->createQuery($dql)->getResult(); + + Debug::dump($tours); self::assertEquals(1, count($tours)); } From 28ea7c73c05e50886802f96eabef1a01b6bdaf58 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 11 Jul 2016 01:28:37 +0000 Subject: [PATCH 049/275] Fixes and implemented incomplete tests --- .../Models/DDC2825/ExplicitSchemaAndTable.php | 14 ++++++++++++++ .../DDC2825/SchemaAndTableInTableName.php | 13 +++++++++++++ .../ORM/Functional/CompositePrimaryKeyTest.php | 12 +++--------- .../ORM/Mapping/StaticPHPMappingDriverTest.php | 18 ------------------ .../ORM/Query/SelectSqlGenerationTest.php | 10 +++++----- 5 files changed, 35 insertions(+), 32 deletions(-) diff --git a/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php b/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php index 3b6957653cd..77a18698d3d 100644 --- a/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php +++ b/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php @@ -2,9 +2,23 @@ namespace Doctrine\Tests\Models\DDC2825; +use Doctrine\DBAL\Types\Type; + /** @Entity @Table(name="explicit_table", schema="explicit_schema") */ class ExplicitSchemaAndTable { /** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */ public $id; + + public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) + { + $metadata->setPrimaryTable(array( + 'name' => 'explicit_table', + 'schema' => 'explicit_schema', + )); + + $metadata->addProperty('id', Type::getType('integer'), array ( + 'id' => true, + )); + } } diff --git a/tests/Doctrine/Tests/Models/DDC2825/SchemaAndTableInTableName.php b/tests/Doctrine/Tests/Models/DDC2825/SchemaAndTableInTableName.php index 151e577ec56..57bbfa0724b 100644 --- a/tests/Doctrine/Tests/Models/DDC2825/SchemaAndTableInTableName.php +++ b/tests/Doctrine/Tests/Models/DDC2825/SchemaAndTableInTableName.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\Models\DDC2825; +use Doctrine\DBAL\Types\Type; + /** * Quoted column name to check that sequence names are * correctly handled @@ -12,4 +14,15 @@ class SchemaAndTableInTableName { /** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */ public $id; + + public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) + { + $metadata->setPrimaryTable(array( + 'name' => 'implicit_schema.implicit_table', + )); + + $metadata->addProperty('id', Type::getType('integer'), array ( + 'id' => true, + )); + } } diff --git a/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyTest.php index 4571f1b5b99..2f2de36be5c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyTest.php @@ -127,8 +127,7 @@ public function testCompositeDqlEagerFetching() public function testCompositeCollectionMemberExpression() { - //$this->markTestSkipped('How to test this?'); - + // Test should not throw any kind of exception $this->putGermanysBrandenburderTor(); $this->putTripAroundEurope(); @@ -139,14 +138,9 @@ public function testCompositeCollectionMemberExpression() ; $query = $this->_em->createQuery($dql); + $tours = $query->getResult(); - var_dump($query->getSQL()); - - $tours = $this->_em->createQuery($dql)->getResult(); - - Debug::dump($tours); - - self::assertEquals(1, count($tours)); + self::assertEquals(0, count($tours)); } public function testSpecifyUnknownIdentifierPrimaryKeyFails() diff --git a/tests/Doctrine/Tests/ORM/Mapping/StaticPHPMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/StaticPHPMappingDriverTest.php index 3bc5a5d5d2e..8779f6f1942 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/StaticPHPMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/StaticPHPMappingDriverTest.php @@ -22,22 +22,4 @@ public function testinvalidEntityOrMappedSuperClassShouldMentionParentClasses() { self::assertInstanceOf(ClassMetadata::class, $this->createClassMetadata(DDC889Class::class)); } - - /** - * @group DDC-2825 - * @group 881 - */ - public function testSchemaDefinitionViaExplicitTableSchemaAnnotationProperty() - { - $this->markTestIncomplete(); - } - - /** - * @group DDC-2825 - * @group 881 - */ - public function testSchemaDefinitionViaSchemaDefinedInTableNameInTableAnnotationProperty() - { - $this->markTestIncomplete(); - } } diff --git a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php index a9ea7f5cadc..f29a43855bc 100644 --- a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php @@ -683,7 +683,7 @@ public function testSupportsMemberOfExpressionManyToMany() $q->setParameter('param', $group); self::assertEquals( - 'SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE EXISTS (SELECT 1 FROM cms_users_groups c1_ INNER JOIN cms_groups c2_ ON c1_.group_id = c2_.id WHERE c1_.user_id = c0_.id AND c2_.id IN (?))', + 'SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE EXISTS (SELECT 1 FROM cms_users_groups c1_ INNER JOIN cms_groups c2_ ON c1_.group_id = c2_.id WHERE c1_.user_id = c0_.id AND c2_.id = ?)', $q->getSql() ); } @@ -700,7 +700,7 @@ public function testSupportsMemberOfExpressionManyToManyParameterArray() $q->setParameter('param', [$group, $group2]); self::assertEquals( - 'SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE EXISTS (SELECT 1 FROM cms_users_groups c1_ INNER JOIN cms_groups c2_ ON c1_.group_id = c2_.id WHERE c1_.user_id = c0_.id AND c2_.id IN (?))', + 'SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE EXISTS (SELECT 1 FROM cms_users_groups c1_ INNER JOIN cms_groups c2_ ON c1_.group_id = c2_.id WHERE c1_.user_id = c0_.id AND c2_.id = ?)', $q->getSql() ); } @@ -714,7 +714,7 @@ public function testSupportsMemberOfExpressionSelfReferencing() $this->_em->getClassMetadata(get_class($person))->assignIdentifier($person, ['id' => 101]); $q->setParameter('param', $person); self::assertEquals( - 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.title AS title_2, c2_.salary AS salary_3, c2_.department AS department_4, c2_.startDate AS startDate_5, c0_.discr AS discr_6, c0_.spouse_id AS spouse_id_7, c1_.car_id AS car_id_8 FROM company_persons c0_ LEFT JOIN company_managers c1_ ON c0_.id = c1_.id LEFT JOIN company_employees c2_ ON c0_.id = c2_.id WHERE EXISTS (SELECT 1 FROM company_persons_friends c3_ INNER JOIN company_persons c4_ ON c3_.friend_id = c4_.id WHERE c3_.person_id = c0_.id AND c4_.id IN (?))', + 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.title AS title_2, c2_.salary AS salary_3, c2_.department AS department_4, c2_.startDate AS startDate_5, c0_.discr AS discr_6, c0_.spouse_id AS spouse_id_7, c1_.car_id AS car_id_8 FROM company_persons c0_ LEFT JOIN company_managers c1_ ON c0_.id = c1_.id LEFT JOIN company_employees c2_ ON c0_.id = c2_.id WHERE EXISTS (SELECT 1 FROM company_persons_friends c3_ INNER JOIN company_persons c4_ ON c3_.friend_id = c4_.id WHERE c3_.person_id = c0_.id AND c4_.id = ?)', $q->getSql() ); } @@ -725,7 +725,7 @@ public function testSupportsMemberOfWithSingleValuedAssociation() $q = $this->_em->createQuery('SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.email MEMBER OF u.groups'); self::assertEquals( - 'SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE EXISTS (SELECT 1 FROM cms_users_groups c1_ INNER JOIN cms_groups c2_ ON c1_.group_id = c2_.id WHERE c1_.user_id = c0_.id AND c2_.id IN (c0_.email_id))', + 'SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE EXISTS (SELECT 1 FROM cms_users_groups c1_ INNER JOIN cms_groups c2_ ON c1_.group_id = c2_.id WHERE c1_.user_id = c0_.id AND c2_.id = c0_.email_id)', $q->getSql() ); } @@ -736,7 +736,7 @@ public function testSupportsMemberOfWithIdentificationVariable() $q = $this->_em->createQuery('SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u MEMBER OF u.groups'); self::assertEquals( - 'SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE EXISTS (SELECT 1 FROM cms_users_groups c1_ INNER JOIN cms_groups c2_ ON c1_.group_id = c2_.id WHERE c1_.user_id = c0_.id AND c2_.id IN (c0_.id))', + 'SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE EXISTS (SELECT 1 FROM cms_users_groups c1_ INNER JOIN cms_groups c2_ ON c1_.group_id = c2_.id WHERE c1_.user_id = c0_.id AND c2_.id = c0_.id)', $q->getSql() ); } From 8aa78e82635865d5fbfe5c8bcd9c3245153d419d Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 11 Jul 2016 01:44:18 +0000 Subject: [PATCH 050/275] Fix for test --- tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php index 59f72383666..28b0e74cb11 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php @@ -229,7 +229,7 @@ public function testLoadMetadataFromDatabaseDetail() $columnDefaultOptions = $columnDefaultProperty->getOptions(); self::assertArrayHasKey('default', $columnDefaultOptions); - self::assertEquals('test_default', $columnCommentOptions['default']); + self::assertEquals('test_default', $columnDefaultOptions['default']); // Check decimal self::assertNotNull($metadata->getProperty('columnDecimal')); From 2382e4972cac219b75c08160ea028d15e23a0563 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Tue, 12 Jul 2016 00:47:24 +0000 Subject: [PATCH 051/275] Removed some methods from QuoteStrategy (beginning of the end of quoting saga). Renamed identity generator to become sequencing generators. --- .../ORM/Mapping/AnsiQuoteStrategy.php | 32 --- .../ORM/Mapping/Builder/FieldBuilder.php | 2 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 14 +- .../ORM/Mapping/ClassMetadataFactory.php | 50 ++--- .../ORM/Mapping/DefaultQuoteStrategy.php | 32 --- lib/Doctrine/ORM/Mapping/QuoteStrategy.php | 43 ---- .../Collection/ManyToManyPersister.php | 27 ++- .../Collection/OneToManyPersister.php | 2 +- .../Entity/BasicEntityPersister.php | 56 ++--- .../Entity/JoinedSubclassPersister.php | 12 +- .../Entity/SingleTablePersister.php | 4 +- .../Query/AST/Functions/IdentityFunction.php | 6 +- .../ORM/Query/AST/Functions/SizeFunction.php | 7 +- lib/Doctrine/ORM/Query/SqlWalker.php | 52 ++--- .../AbstractGenerator.php} | 4 +- .../{Id => Sequencing}/AssignedGenerator.php | 6 +- .../BigIntegerIdentityGenerator.php | 4 +- .../{Id => Sequencing}/IdentityGenerator.php | 4 +- .../{Id => Sequencing}/SequenceGenerator.php | 4 +- .../ORM/{Id => Sequencing}/TableGenerator.php | 4 +- .../ORM/{Id => Sequencing}/UuidGenerator.php | 4 +- .../Command/MappingDescribeCommand.php | 1 - .../Pagination/LimitSubqueryOutputWalker.php | 2 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 31 +-- lib/Doctrine/ORM/UnitOfWork.php | 2 +- tests/Doctrine/Tests/Mocks/SequenceMock.php | 2 +- .../ORM/Functional/Ticket/DDC2415Test.php | 4 +- .../ORM/Mapping/AnsiQuoteStrategyTest.php | 156 ------------- .../Mapping/BasicInheritanceMappingTest.php | 2 +- .../ORM/Mapping/ClassMetadataFactoryTest.php | 4 +- .../ORM/Mapping/DefaultQuoteStrategyTest.php | 34 --- .../Tests/ORM/Mapping/QuoteStrategyTest.php | 211 ------------------ .../AssignedGeneratorTest.php | 4 +- .../SequenceGeneratorTest.php | 4 +- 34 files changed, 149 insertions(+), 677 deletions(-) rename lib/Doctrine/ORM/{Id/AbstractIdGenerator.php => Sequencing/AbstractGenerator.php} (96%) rename lib/Doctrine/ORM/{Id => Sequencing}/AssignedGenerator.php (92%) rename lib/Doctrine/ORM/{Id => Sequencing}/BigIntegerIdentityGenerator.php (95%) rename lib/Doctrine/ORM/{Id => Sequencing}/IdentityGenerator.php (96%) rename lib/Doctrine/ORM/{Id => Sequencing}/SequenceGenerator.php (96%) rename lib/Doctrine/ORM/{Id => Sequencing}/TableGenerator.php (97%) rename lib/Doctrine/ORM/{Id => Sequencing}/UuidGenerator.php (94%) delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/AnsiQuoteStrategyTest.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/DefaultQuoteStrategyTest.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php rename tests/Doctrine/Tests/ORM/{Id => Sequencing}/AssignedGeneratorTest.php (94%) rename tests/Doctrine/Tests/ORM/{Id => Sequencing}/SequenceGeneratorTest.php (94%) diff --git a/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php b/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php index 6065b8c7a84..90f5881d6c6 100644 --- a/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php @@ -30,14 +30,6 @@ */ class AnsiQuoteStrategy implements QuoteStrategy { - /** - * {@inheritdoc} - */ - public function getColumnName(ColumnMetadata $columnMetadata, AbstractPlatform $platform) - { - return $columnMetadata->getColumnName(); - } - /** * {@inheritdoc} */ @@ -46,30 +38,6 @@ public function getTableName(ClassMetadata $class, AbstractPlatform $platform) return $class->getTableName(); } - /** - * {@inheritdoc} - */ - public function getSequenceName(array $definition, ClassMetadata $class, AbstractPlatform $platform) - { - return $definition['sequenceName']; - } - - /** - * {@inheritdoc} - */ - public function getJoinColumnName(array $joinColumn, ClassMetadata $class, AbstractPlatform $platform) - { - return $joinColumn['name']; - } - - /** - * {@inheritdoc} - */ - public function getReferencedJoinColumnName(array $joinColumn, ClassMetadata $class, AbstractPlatform $platform) - { - return $joinColumn['referencedColumnName']; - } - /** * {@inheritdoc} */ diff --git a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php index 7f5e5abaf2c..baf136fd30d 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php @@ -265,7 +265,7 @@ public function columnDefinition($def) /** * Set the FQCN of the custom ID generator. - * This class must extend \Doctrine\ORM\Id\AbstractIdGenerator. + * This class must extend \Doctrine\ORM\Sequencing\AbstractGenerator. * * @param string $customIdGenerator * diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index c03b78352cd..3c1c4926c95 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -496,7 +496,7 @@ class ClassMetadata implements ClassMetadataInterface /** * READ-ONLY: The ID generator used for generating IDs for this class. * - * @var \Doctrine\ORM\Id\AbstractIdGenerator + * @var \Doctrine\ORM\Sequencing\AbstractGenerator * * @todo Remove! */ @@ -521,16 +521,6 @@ class ClassMetadata implements ClassMetadataInterface */ public $sequenceGeneratorDefinition; - /** - * READ-ONLY: The definition of the table generator of this class. Only used for the - * TABLE generation strategy. - * - * @var array - * - * @todo Merge with tableGeneratorDefinition into generic generatorDefinition - */ - public $tableGeneratorDefinition; - /** * READ-ONLY: The policy used for change-tracking on entities of this class. * @@ -2793,7 +2783,7 @@ public function getFieldForColumn($columnName) /** * Sets the ID generator used to generate IDs for instances of this class. * - * @param \Doctrine\ORM\Id\AbstractIdGenerator $generator + * @param \Doctrine\ORM\Sequencing\AbstractGenerator $generator * * @return void */ diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 9c60e7fa1d3..4d1561da9c3 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -27,8 +27,7 @@ use Doctrine\ORM\Event\LoadClassMetadataEventArgs; use Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs; use Doctrine\ORM\Events; -use Doctrine\ORM\Id\BigIntegerIdentityGenerator; -use Doctrine\ORM\Id\IdentityGenerator; +use Doctrine\ORM\Sequencing; use Doctrine\ORM\ORMException; use ReflectionException; @@ -689,11 +688,12 @@ private function addInheritedSqlResultSetMappings(ClassMetadata $subClass, Class private function completeIdGeneratorMapping(ClassMetadata $class) { $idGenType = $class->generatorType; + $platform = $this->getTargetPlatform(); - if ($idGenType == ClassMetadata::GENERATOR_TYPE_AUTO) { - $idGenType = $this->getTargetPlatform()->prefersSequences() + if ($idGenType === ClassMetadata::GENERATOR_TYPE_AUTO) { + $idGenType = $platform->prefersSequences() ? ClassMetadata::GENERATOR_TYPE_SEQUENCE - : ($this->getTargetPlatform()->prefersIdentityColumns() + : ($platform->prefersIdentityColumns() ? ClassMetadata::GENERATOR_TYPE_IDENTITY : ClassMetadata::GENERATOR_TYPE_TABLE ); @@ -708,25 +708,17 @@ private function completeIdGeneratorMapping(ClassMetadata $class) $fieldName = $class->identifier ? $class->getSingleIdentifierFieldName() : null; // Platforms that do not have native IDENTITY support need a sequence to emulate this behaviour. - if ($this->getTargetPlatform()->usesSequenceEmulatedIdentityColumns()) { + if ($platform->usesSequenceEmulatedIdentityColumns()) { $columnName = $class->getSingleIdentifierColumnName(); - $sequencePrefix = $class->getSequencePrefix($this->getTargetPlatform()); - $sequenceName = $this->getTargetPlatform()->getIdentitySequenceName($sequencePrefix, $columnName); - $definition = [ - 'sequenceName' => $this->getTargetPlatform()->fixSchemaElementName($sequenceName), - 'quotes' => true, - ]; - - $sequenceName = $this - ->em - ->getConfiguration() - ->getQuoteStrategy() - ->getSequenceName($definition, $class, $this->getTargetPlatform()); + $sequencePrefix = $class->getSequencePrefix($platform); + $idSequenceName = $platform->getIdentitySequenceName($sequencePrefix, $columnName); + $sequenceName = $platform->quoteIdentifier($platform->fixSchemaElementName($idSequenceName)); } $generator = ($fieldName && $class->getProperty($fieldName)->getTypeName() === 'bigint') - ? new BigIntegerIdentityGenerator($sequenceName) - : new IdentityGenerator($sequenceName); + ? new Sequencing\BigIntegerIdentityGenerator($sequenceName) + : new Sequencing\IdentityGenerator($sequenceName) + ; $class->setIdGenerator($generator); @@ -737,11 +729,10 @@ private function completeIdGeneratorMapping(ClassMetadata $class) $definition = $class->sequenceGeneratorDefinition; if ( ! $definition) { - $fieldName = $class->getSingleIdentifierFieldName(); - $sequenceName = $class->getSequenceName($this->getTargetPlatform()); + $sequenceName = $class->getSequenceName($platform); $definition = [ - 'sequenceName' => $this->getTargetPlatform()->fixSchemaElementName($sequenceName), + 'sequenceName' => $platform->fixSchemaElementName($sequenceName), 'allocationSize' => 1, 'initialValue' => 1, ]; @@ -749,23 +740,18 @@ private function completeIdGeneratorMapping(ClassMetadata $class) $class->setSequenceGeneratorDefinition($definition); } - $sequenceName = $this - ->em - ->getConfiguration() - ->getQuoteStrategy() - ->getSequenceName($definition, $class, $this->getTargetPlatform()); - - $sequenceGenerator = new \Doctrine\ORM\Id\SequenceGenerator($sequenceName, $definition['allocationSize']); + $sequenceName = $platform->quoteIdentifier($definition['sequenceName']); + $sequenceGenerator = new Sequencing\SequenceGenerator($sequenceName, $definition['allocationSize']); $class->setIdGenerator($sequenceGenerator); break; case ClassMetadata::GENERATOR_TYPE_NONE: - $class->setIdGenerator(new \Doctrine\ORM\Id\AssignedGenerator()); + $class->setIdGenerator(new Sequencing\AssignedGenerator()); break; case ClassMetadata::GENERATOR_TYPE_UUID: - $class->setIdGenerator(new \Doctrine\ORM\Id\UuidGenerator()); + $class->setIdGenerator(new Sequencing\UuidGenerator()); break; case ClassMetadata::GENERATOR_TYPE_TABLE: diff --git a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php index 1621706e7d0..3f58007f7bc 100644 --- a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php @@ -29,14 +29,6 @@ */ class DefaultQuoteStrategy implements QuoteStrategy { - /** - * {@inheritdoc} - */ - public function getColumnName(ColumnMetadata $columnMetadata, AbstractPlatform $platform) - { - return $platform->quoteIdentifier($columnMetadata->getColumnName()); - } - /** * {@inheritdoc} * @@ -58,30 +50,6 @@ public function getTableName(ClassMetadata $class, AbstractPlatform $platform) return $platform->quoteIdentifier($tableName); } - /** - * {@inheritdoc} - */ - public function getSequenceName(array $definition, ClassMetadata $class, AbstractPlatform $platform) - { - return $platform->quoteIdentifier($definition['sequenceName']); - } - - /** - * {@inheritdoc} - */ - public function getJoinColumnName(array $joinColumn, ClassMetadata $class, AbstractPlatform $platform) - { - return $platform->quoteIdentifier($joinColumn['name']); - } - - /** - * {@inheritdoc} - */ - public function getReferencedJoinColumnName(array $joinColumn, ClassMetadata $class, AbstractPlatform $platform) - { - return $platform->quoteIdentifier($joinColumn['referencedColumnName']); - } - /** * {@inheritdoc} */ diff --git a/lib/Doctrine/ORM/Mapping/QuoteStrategy.php b/lib/Doctrine/ORM/Mapping/QuoteStrategy.php index 820728e36c5..bfdfd65a3c8 100644 --- a/lib/Doctrine/ORM/Mapping/QuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/QuoteStrategy.php @@ -29,16 +29,6 @@ */ interface QuoteStrategy { - /** - * Gets the (possibly quoted) column name for safe use in an SQL statement. - * - * @param ColumnMetadata $columnMetadata - * @param AbstractPlatform $platform - * - * @return string - */ - public function getColumnName(ColumnMetadata $columnMetadata, AbstractPlatform $platform); - /** * Gets the (possibly quoted) primary table name for safe use in an SQL statement. * @@ -49,17 +39,6 @@ public function getColumnName(ColumnMetadata $columnMetadata, AbstractPlatform $ */ public function getTableName(ClassMetadata $class, AbstractPlatform $platform); - /** - * Gets the (possibly quoted) sequence name for safe use in an SQL statement. - * - * @param array $definition - * @param ClassMetadata $class - * @param AbstractPlatform $platform - * - * @return string - */ - public function getSequenceName(array $definition, ClassMetadata $class, AbstractPlatform $platform); - /** * Gets the (possibly quoted) name of the join table. * @@ -71,28 +50,6 @@ public function getSequenceName(array $definition, ClassMetadata $class, Abstrac */ public function getJoinTableName(array $association, ClassMetadata $class, AbstractPlatform $platform); - /** - * Gets the (possibly quoted) join column name. - * - * @param array $joinColumn - * @param ClassMetadata $class - * @param AbstractPlatform $platform - * - * @return string - */ - public function getJoinColumnName(array $joinColumn, ClassMetadata $class, AbstractPlatform $platform); - - /** - * Gets the (possibly quoted) join column name. - * - * @param array $joinColumn - * @param ClassMetadata $class - * @param AbstractPlatform $platform - * - * @return string - */ - public function getReferencedJoinColumnName(array $joinColumn, ClassMetadata $class, AbstractPlatform $platform); - /** * Gets the (possibly quoted) identifier column names for safe use in an SQL statement. * diff --git a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php index a91a41b4538..b6018d546fc 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php @@ -129,8 +129,9 @@ public function count(PersistentCollection $collection) : $association['joinTable']['joinColumns']; foreach ($joinColumns as $joinColumn) { - $columnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $sourceClass, $this->platform); + $columnName = $this->platform->quoteIdentifier($joinColumn['name']); $referencedName = $joinColumn['referencedColumnName']; + $conditions[] = 't.' . $columnName . ' = ?'; $params[] = $id[$sourceClass->getFieldForColumn($referencedName)]; $types[] = PersisterHelper::getTypeOfColumn($referencedName, $sourceClass, $this->em); @@ -259,9 +260,10 @@ public function loadCriteria(PersistentCollection $collection, Criteria $criteri foreach ($parameters as $parameter) { list($name, $value) = $parameter; - $field = $this->quoteStrategy->getColumnName($targetClass->getProperty($name), $this->platform); + $property = $targetClass->getProperty($name); + $columnName = $this->platform->quoteIdentifier($property->getColumnName()); - $whereClauses[] = sprintf('te.%s = ?', $field); + $whereClauses[] = sprintf('te.%s = ?', $columnName); $params[] = $value; } @@ -366,8 +368,8 @@ protected function getOnConditionSQL($mapping) $conditions = []; foreach ($joinColumns as $joinColumn) { - $joinColumnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $targetClass, $this->platform); - $refColumnName = $this->quoteStrategy->getReferencedJoinColumnName($joinColumn, $targetClass, $this->platform); + $joinColumnName = $this->platform->quoteIdentifier($joinColumn['name']); + $refColumnName = $this->platform->quoteIdentifier($joinColumn['referencedColumnName']); $conditions[] = ' t.' . $joinColumnName . ' = ' . 'te.' . $refColumnName; } @@ -388,7 +390,7 @@ protected function getDeleteSQL(PersistentCollection $collection) $joinTable = $this->quoteStrategy->getJoinTableName($mapping, $class, $this->platform); foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) { - $columns[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); + $columns[] = $this->platform->quoteIdentifier($joinColumn['name']); } return 'DELETE FROM ' . $joinTable @@ -439,12 +441,12 @@ protected function getDeleteRowSQL(PersistentCollection $collection) $types = []; foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) { - $columns[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); + $columns[] = $this->platform->quoteIdentifier($joinColumn['name']); $types[] = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $class, $this->em); } foreach ($mapping['joinTable']['inverseJoinColumns'] as $joinColumn) { - $columns[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $targetClass, $this->platform); + $columns[] = $this->platform->quoteIdentifier($joinColumn['name']); $types[] = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); } @@ -488,12 +490,12 @@ protected function getInsertRowSQL(PersistentCollection $collection) $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) { - $columns[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $targetClass, $this->platform); + $columns[] = $this->platform->quoteIdentifier($joinColumn['name']); $types[] = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $class, $this->em); } foreach ($mapping['joinTable']['inverseJoinColumns'] as $joinColumn) { - $columns[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $targetClass, $this->platform); + $columns[] = $this->platform->quoteIdentifier($joinColumn['name']); $types[] = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); } @@ -754,9 +756,10 @@ private function getOrderingSql(Criteria $criteria, ClassMetadata $targetClass) $orderBy = []; foreach ($orderings as $name => $direction) { - $field = $this->quoteStrategy->getColumnName($targetClass->getProperty($name), $this->platform); + $property = $targetClass->getProperty($name); + $columnName = $this->platform->quoteIdentifier($property->getColumnName()); - $orderBy[] = $field . ' ' . $direction; + $orderBy[] = $columnName . ' ' . $direction; } return ' ORDER BY ' . implode(', ', $orderBy); diff --git a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php index 141a526a3a0..45816a87447 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php @@ -213,7 +213,7 @@ private function deleteEntityCollection(PersistentCollection $collection) $parameters = []; foreach ($targetClass->associationMappings[$mapping['mappedBy']]['joinColumns'] as $joinColumn) { - $columns[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $targetClass, $this->platform); + $columns[] = $this->platform->quoteIdentifier($joinColumn['name']); $parameters[] = $identifier[$sourceClass->getFieldForColumn($joinColumn['referencedColumnName'])]; } diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 078e55e0155..60cfa626bf0 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -332,7 +332,7 @@ protected function fetchVersionValue(FieldMetadata $versionProperty, array $id) { $versionedClass = $versionProperty->getDeclaringClass(); $tableName = $this->quoteStrategy->getTableName($versionedClass, $this->platform); - $columnName = $this->quoteStrategy->getColumnName($versionProperty, $this->platform); + $columnName = $this->platform->quoteIdentifier($versionProperty->getColumnName()); $identifier = $this->quoteStrategy->getIdentifierColumnNames($versionedClass, $this->platform); // FIXME: Order with composite keys might not be correct @@ -413,13 +413,13 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat $column = $this->columns[$columnName]; if ($column instanceof ColumnMetadata) { - $quotedColumnName = $this->quoteStrategy->getColumnName($column, $this->platform); + $quotedColumnName = $this->platform->quoteIdentifier($column->getColumnName()); $type = $column->getType(); $placeholder = $type->convertToDatabaseValueSQL('?', $this->platform); } else { - $quotedColumnName = $this->quoteStrategy->getJoinColumnName($column, $this->class, $this->platform); + $quotedColumnName = $this->platform->quoteIdentifier($column['name']); $type = $column['type']; - $placeholder = '?'; + $placeholder = $type->convertToDatabaseValueSQL('?', $this->platform); } $set[] = $quotedColumnName . ' = ' . $placeholder; @@ -436,7 +436,7 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat $params[] = $identifier[$idField]; $types[] = $property->getType(); - $where[] = $this->quoteStrategy->getColumnName($property, $this->platform); + $where[] = $this->platform->quoteIdentifier($property->getColumnName()); continue; } @@ -465,7 +465,7 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat if ($versioned) { $versionProperty = $this->class->versionProperty; $versionColumnType = $versionProperty->getType(); - $versionColumnName = $this->quoteStrategy->getColumnName($versionProperty, $this->platform); + $versionColumnName = $this->platform->quoteIdentifier($versionProperty->getColumnName()); $where[] = $versionColumnName; $types[] = $versionColumnType; @@ -535,11 +535,11 @@ protected function deleteJoinTableRecords($identifier) } foreach ($joinColumns as $joinColumn) { - $keys[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); + $keys[] = $this->platform->quoteIdentifier($joinColumn['name']); } foreach ($otherColumns as $joinColumn) { - $otherKeys[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); + $otherKeys[] = $this->platform->quoteIdentifier($joinColumn['name']); } if (isset($mapping['isOnDeleteCascade'])) { @@ -1005,7 +1005,7 @@ private function getManyToManyStatement(array $assoc, $sourceEntity, $offset = n foreach ($joinColumns as $joinColumn) { $sourceKeyColumn = $joinColumn['referencedColumnName']; - $quotedKeyColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); + $quotedKeyColumn = $this->platform->quoteIdentifier($joinColumn['name']);; switch (true) { case $sourceClass->containsForeignIdentifier: @@ -1032,6 +1032,7 @@ private function getManyToManyStatement(array $assoc, $sourceEntity, $offset = n } $criteria[$quotedJoinTable . '.' . $quotedKeyColumn] = $value; + $parameters[] = [ 'value' => $value, 'field' => $field, @@ -1040,6 +1041,7 @@ private function getManyToManyStatement(array $assoc, $sourceEntity, $offset = n } $sql = $this->getSelectSQL($criteria, $assoc, null, $limit, $offset); + list($params, $types) = $this->expandToManyParameters($parameters); return $this->conn->executeQuery($sql, $params, $types); @@ -1157,7 +1159,7 @@ protected final function getOrderBySQL(array $orderBy, $baseTableAlias) if (($property = $this->class->getProperty($fieldName)) !== null) { $tableAlias = $this->getSQLTableAlias($property->getTableName()); - $columnName = $this->quoteStrategy->getColumnName($property, $this->platform); + $columnName = $this->platform->quoteIdentifier($property->getColumnName()); $orderByList[] = $tableAlias . '.' . $columnName . ' ' . $orientation; @@ -1175,7 +1177,8 @@ protected final function getOrderBySQL(array $orderBy, $baseTableAlias) $tableAlias = $this->getSQLTableAlias($class->getTableName()); foreach ($this->class->associationMappings[$fieldName]['joinColumns'] as $joinColumn) { - $columnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); + $columnName = $this->platform->quoteIdentifier($joinColumn['name']); + $orderByList[] = $tableAlias . '.' . $columnName . ' ' . $orientation; } @@ -1283,9 +1286,9 @@ protected function getSelectColumnsSQL() $joinCondition[] = sprintf( '%s.%s = %s.%s', $this->getSQLTableAlias($sourceClass->getTableName()), - $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform), + $this->platform->quoteIdentifier($joinColumn['name']), $tableAlias, - $this->quoteStrategy->getReferencedJoinColumnName($joinColumn, $this->class, $this->platform) + $this->platform->quoteIdentifier($joinColumn['referencedColumnName']) ); } @@ -1304,9 +1307,9 @@ protected function getSelectColumnsSQL() $joinCondition[] = sprintf( '%s.%s = %s.%s', $this->getSQLTableAlias($sourceClass->getTableName(), $assocAlias), - $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform), + $this->platform->quoteIdentifier($joinColumn['name']), $this->getSQLTableAlias($targetClass->getTableName()), - $this->quoteStrategy->getReferencedJoinColumnName($joinColumn, $this->class, $this->platform) + $this->platform->quoteIdentifier($joinColumn['referencedColumnName']) ); } } @@ -1342,7 +1345,7 @@ protected function getSelectColumnAssociationSQL($field, $assoc, ClassMetadata $ $sqlTableAlias = $this->getSQLTableAlias($class->getTableName(), ($alias == 'r' ? '' : $alias)); foreach ($assoc['joinColumns'] as $joinColumn) { - $quotedColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); + $quotedColumn = $this->platform->quoteIdentifier($joinColumn['name']); $resultColumnName = $this->getSQLColumnAlias($joinColumn['name']); $type = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); @@ -1379,8 +1382,9 @@ protected function getSelectManyToManyJoinSQL(array $manyToMany) : $association['joinTable']['joinColumns']; foreach ($joinColumns as $joinColumn) { - $quotedSourceColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); - $quotedTargetColumn = $this->quoteStrategy->getReferencedJoinColumnName($joinColumn, $this->class, $this->platform); + $quotedSourceColumn = $this->platform->quoteIdentifier($joinColumn['name']); + $quotedTargetColumn = $this->platform->quoteIdentifier($joinColumn['referencedColumnName']); + $conditions[] = $sourceTableAlias . '.' . $quotedTargetColumn . ' = ' . $joinTableName . '.' . $quotedSourceColumn; } @@ -1401,7 +1405,7 @@ public function getInsertSQL() if (empty($columns)) { $property = $this->class->getProperty($this->class->identifier[0]); - $identityColumn = $this->quoteStrategy->getColumnName($property, $this->platform); + $identityColumn = $this->platform->quoteIdentifier($property->getColumnName()); $this->insertSql = $this->platform->getEmptyIdentityInsertSQL($tableName, $identityColumn); @@ -1415,10 +1419,10 @@ public function getInsertSQL() $column = $this->columns[$columnName]; if ($column instanceof ColumnMetadata) { - $quotedColumns[] = $this->quoteStrategy->getColumnName($column, $this->platform); + $quotedColumns[] = $this->platform->quoteIdentifier($column->getColumnName()); $values[] = $column->getType()->convertToDatabaseValueSQL('?', $this->platform); } else { - $quotedColumns[] = $this->quoteStrategy->getJoinColumnName($column, $this->class, $this->platform); + $quotedColumns[] = $this->platform->quoteIdentifier($column['name']); $values[] = $column['type']->convertToDatabaseValueSQL('?', $this->platform); } } @@ -1508,7 +1512,7 @@ protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r' $sql = sprintf( '%s.%s', $this->getSQLTableAlias($property->getTableName(), ($alias == 'r' ? '' : $alias)), - $this->quoteStrategy->getColumnName($property, $this->platform) + $this->platform->quoteIdentifier($property->getColumnName()) ); $this->currentPersisterContext->rsm->addFieldResult($alias, $columnAlias, $field, $class->name); @@ -1691,7 +1695,7 @@ private function getSelectConditionStatementColumnSQL($field, $assoc = null) { if (($property = $this->class->getProperty($field)) !== null) { $tableAlias = $this->getSQLTableAlias($property->getTableName()); - $columnName = $this->quoteStrategy->getColumnName($property, $this->platform); + $columnName = $this->platform->quoteIdentifier($property->getColumnName()); return [$tableAlias . '.' . $columnName]; } @@ -1714,7 +1718,9 @@ private function getSelectConditionStatementColumnSQL($field, $assoc = null) foreach ($joinColumns as $joinColumn) { - $columns[] = $joinTableName . '.' . $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); + $columnName = $this->platform->quoteIdentifier($joinColumn['name']); + + $columns[] = $joinTableName . '.' . $columnName; } } else { @@ -1728,7 +1734,7 @@ private function getSelectConditionStatementColumnSQL($field, $assoc = null) $tableAlias = $this->getSQLTableAlias($class->getTableName()); foreach ($association['joinColumns'] as $joinColumn) { - $columnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); + $columnName = $this->platform->quoteIdentifier($joinColumn['name']); $columns[] = $tableAlias . '.' . $columnName; } diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index b0ba890f2d2..a9588afc349 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -392,8 +392,8 @@ protected function getLockTablesSql($lockMode) foreach ($identifierColumns as $idColumn) { $quotedColumnName = $idColumn instanceof ColumnMetadata - ? $this->quoteStrategy->getColumnName($idColumn, $this->platform) - : $this->quoteStrategy->getJoinColumnName($idColumn, $this->em->getClassMetadata($idColumn['targetEntity']), $this->platform) + ? $this->platform->quoteIdentifier($idColumn->getColumnName()) + : $this->platform->quoteIdentifier($idColumn['name']) ; $conditions[] = $baseTableAlias . '.' . $quotedColumnName . ' = ' . $tableAlias . '.' . $quotedColumnName; @@ -585,8 +585,8 @@ private function getJoinSql($baseTableAlias) foreach ($identifierColumns as $idColumn) { $quotedColumnName = $idColumn instanceof ColumnMetadata - ? $this->quoteStrategy->getColumnName($idColumn, $this->platform) - : $this->quoteStrategy->getJoinColumnName($idColumn, $this->em->getClassMetadata($idColumn['targetEntity']), $this->platform) + ? $this->platform->quoteIdentifier($idColumn->getColumnName()) + : $this->platform->quoteIdentifier($idColumn['name']) ; $conditions[] = $baseTableAlias . '.' . $quotedColumnName . ' = ' . $tableAlias . '.' . $quotedColumnName; @@ -604,8 +604,8 @@ private function getJoinSql($baseTableAlias) foreach ($identifierColumns as $idColumn) { $quotedColumnName = $idColumn instanceof ColumnMetadata - ? $this->quoteStrategy->getColumnName($idColumn, $this->platform) - : $this->quoteStrategy->getJoinColumnName($idColumn, $this->em->getClassMetadata($idColumn['targetEntity']), $this->platform) + ? $this->platform->quoteIdentifier($idColumn->getColumnName()) + : $this->platform->quoteIdentifier($idColumn['name']) ; $conditions[] = $baseTableAlias . '.' . $quotedColumnName . ' = ' . $tableAlias . '.' . $quotedColumnName; diff --git a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php index 8c79dafacc5..f9e90030d5a 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php @@ -54,7 +54,7 @@ protected function getSelectColumnsSQL() $discrColumnName = $discrColumn->getColumnName(); $discrColumnType = $discrColumn->getType(); $resultColumnName = $this->platform->getSQLResultCasing($discrColumnName); - $quotedColumnName = $this->quoteStrategy->getColumnName($discrColumn, $this->platform); + $quotedColumnName = $this->platform->quoteIdentifier($discrColumn->getColumnName()); $this->currentPersisterContext->rsm->setDiscriminatorColumn('r', $resultColumnName); $this->currentPersisterContext->rsm->addMetaResult('r', $resultColumnName, $discrColumnName, false, $discrColumnType); @@ -169,7 +169,7 @@ protected function getSelectConditionDiscriminatorValueSQL() $discrColumn = $this->class->discriminatorColumn; $discrColumnType = $discrColumn->getType(); $tableAlias = $this->getSQLTableAlias($discrColumn->getTableName()); - $quotedColumnName = $this->quoteStrategy->getColumnName($discrColumn, $this->platform); + $quotedColumnName = $this->platform->quoteIdentifier($discrColumn->getColumnName()); return sprintf( '%s IN (%s)', diff --git a/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php index a8f3920f6c5..b4c59cebd1e 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php @@ -50,8 +50,8 @@ class IdentityFunction extends FunctionNode */ public function getSql(SqlWalker $sqlWalker) { - $platform = $sqlWalker->getEntityManager()->getConnection()->getDatabasePlatform(); - $quoteStrategy = $sqlWalker->getEntityManager()->getConfiguration()->getQuoteStrategy(); + $entityManager = $sqlWalker->getEntityManager(); + $platform = $entityManager->getConnection()->getDatabasePlatform(); $dqlAlias = $this->pathExpression->identificationVariable; $assocField = $this->pathExpression->field; $qComp = $sqlWalker->getQueryComponent($dqlAlias); @@ -84,7 +84,7 @@ public function getSql(SqlWalker $sqlWalker) $tableName = $sqlWalker->getEntityManager()->getClassMetadata($assoc['sourceEntity'])->getTableName(); $tableAlias = $sqlWalker->getSQLTableAlias($tableName, $dqlAlias); - $columnName = $quoteStrategy->getJoinColumnName($joinColumn, $targetEntity, $platform); + $columnName = $platform->quoteIdentifier($joinColumn['name']); return $tableAlias . '.' . $columnName; } diff --git a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php index 91b0768493c..e547a762f57 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php @@ -70,11 +70,12 @@ public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) foreach ($owningAssoc['targetToSourceKeyColumns'] as $targetColumn => $sourceColumn) { if ($first) $first = false; else $sql .= ' AND '; - $property = $class->getProperty($class->fieldNames[$targetColumn]); + $property = $class->getProperty($class->fieldNames[$targetColumn]); + $sourceColumnName = $platform->quoteIdentifier($property->getColumnName()); $sql .= $targetTableAlias . '.' . $sourceColumn . ' = ' - . $sourceTableAlias . '.' . $quoteStrategy->getColumnName($property, $platform); + . $sourceTableAlias . '.' . $sourceColumnName; } } else { // many-to-many $targetClass = $sqlWalker->getEntityManager()->getClassMetadata($assoc['targetEntity']); @@ -99,7 +100,7 @@ public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) if ($first) $first = false; else $sql .= ' AND '; $property = $class->getProperty($class->fieldNames[$joinColumn['referencedColumnName']]); - $sourceColumnName = $quoteStrategy->getColumnName($property, $platform); + $sourceColumnName = $platform->quoteIdentifier($property->getColumnName()); $sql .= $joinTableAlias . '.' . $joinColumn['name'] . ' = ' diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index a6d19522d06..6dadc1a4da7 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -410,7 +410,7 @@ private function _generateOrderedCollectionOrderByItems() foreach ($qComp['relation']['orderBy'] as $fieldName => $orientation) { $property = $qComp['metadata']->getProperty($fieldName); $tableName = $property->getTableName(); - $columnName = $this->quoteStrategy->getColumnName($property, $this->platform); + $columnName = $this->platform->quoteIdentifier($property->getColumnName()); $orderedColumn = $this->getSQLTableAlias($tableName, $dqlAlias) . '.' . $columnName; // OrderByClause should replace an ordered relation. see - DDC-2475 @@ -453,9 +453,9 @@ private function _generateDiscriminatorColumnConditionSQL(array $dqlAliases) $values[] = $conn->quote($this->em->getClassMetadata($subclassName)->discriminatorValue); } - $discrColumn = $class->discriminatorColumn; - $discrColumnType = $discrColumn->getType(); - $quotedColumnName = $this->quoteStrategy->getColumnName($discrColumn, $this->platform); + $discrColumn = $class->discriminatorColumn; + $discrColumnType = $discrColumn->getType(); + $quotedColumnName = $this->platform->quoteIdentifier($discrColumn->getColumnName()); $sqlTableAlias = ($this->useSqlTableAliases) ? $this->getSQLTableAlias($discrColumn->getTableName(), $dqlAlias) . '.' : ''; @@ -663,7 +663,7 @@ public function walkPathExpression($pathExpr) $sql .= $this->walkIdentificationVariable($dqlAlias, $fieldName) . '.'; } - $sql .= $this->quoteStrategy->getColumnName($property, $this->platform); + $sql .= $this->platform->quoteIdentifier($property->getColumnName()); break; case AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION: @@ -689,11 +689,13 @@ public function walkPathExpression($pathExpr) throw QueryException::associationPathCompositeKeyNotSupported(); } + $joinColumn = $mapping['joinColumns'][0]; + if ($this->useSqlTableAliases) { - $sql .= $this->getSQLTableAlias($mapping['joinColumns'][0]['tableName'], $dqlAlias) . '.'; + $sql .= $this->getSQLTableAlias($joinColumn['tableName'], $dqlAlias) . '.'; } - $sql .= $this->quoteStrategy->getJoinColumnName($mapping['joinColumns'][0], $class, $this->platform); + $sql .= $this->platform->quoteIdentifier($joinColumn['name']); break; default: @@ -743,7 +745,7 @@ public function walkSelectClause($selectClause) $discrColumn = $class->discriminatorColumn; $discrColumnName = $discrColumn->getColumnName(); $discrColumnType = $discrColumn->getType(); - $quotedColumnName = $this->quoteStrategy->getColumnName($discrColumn, $this->platform); + $quotedColumnName = $this->platform->quoteIdentifier($discrColumn->getColumnName()); $sqlTableAlias = $this->getSQLTableAlias($discrColumn->getTableName(), $dqlAlias); $sqlColumnAlias = $this->getSQLColumnAlias($discrColumnName); @@ -775,7 +777,7 @@ public function walkSelectClause($selectClause) foreach ($assoc['joinColumns'] as $joinColumn) { $sqlTableAlias = $this->getSQLTableAlias($joinColumn['tableName'], $dqlAlias); - $columnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); + $columnName = $this->platform->quoteIdentifier($joinColumn['name']); $columnAlias = $this->getSQLColumnAlias($joinColumn['name']); $columnType = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); @@ -804,7 +806,7 @@ public function walkSelectClause($selectClause) $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); foreach ($assoc['joinColumns'] as $joinColumn) { - $columnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $subClass, $this->platform); + $columnName = $this->platform->quoteIdentifier($joinColumn['name']); $columnAlias = $this->getSQLColumnAlias($joinColumn['name']); $columnType = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); @@ -957,8 +959,8 @@ public function walkJoinAssociationDeclaration($joinAssociationDeclaration, $joi $conditions = []; foreach ($assoc['joinColumns'] as $joinColumn) { - $quotedSourceColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $targetClass, $this->platform); - $quotedTargetColumn = $this->quoteStrategy->getReferencedJoinColumnName($joinColumn, $targetClass, $this->platform); + $quotedSourceColumn = $this->platform->quoteIdentifier($joinColumn['name']); + $quotedTargetColumn = $this->platform->quoteIdentifier($joinColumn['referencedColumnName']); if ($relation['isOwningSide']) { $conditions[] = $sourceTableAlias . '.' . $quotedSourceColumn . ' = ' . $targetTableAlias . '.' . $quotedTargetColumn; @@ -1001,8 +1003,8 @@ public function walkJoinAssociationDeclaration($joinAssociationDeclaration, $joi : $assoc['joinTable']['inverseJoinColumns']; foreach ($relationColumns as $joinColumn) { - $quotedSourceColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $targetClass, $this->platform); - $quotedTargetColumn = $this->quoteStrategy->getReferencedJoinColumnName($joinColumn, $targetClass, $this->platform); + $quotedSourceColumn = $this->platform->quoteIdentifier($joinColumn['name']); + $quotedTargetColumn = $this->platform->quoteIdentifier($joinColumn['referencedColumnName']); $conditions[] = $sourceTableAlias . '.' . $quotedTargetColumn . ' = ' . $joinTableAlias . '.' . $quotedSourceColumn; } @@ -1018,8 +1020,8 @@ public function walkJoinAssociationDeclaration($joinAssociationDeclaration, $joi : $assoc['joinTable']['joinColumns']; foreach ($relationColumns as $joinColumn) { - $quotedSourceColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $targetClass, $this->platform); - $quotedTargetColumn = $this->quoteStrategy->getReferencedJoinColumnName($joinColumn, $targetClass, $this->platform); + $quotedSourceColumn = $this->platform->quoteIdentifier($joinColumn['name']); + $quotedTargetColumn = $this->platform->quoteIdentifier($joinColumn['referencedColumnName']); $conditions[] = $targetTableAlias . '.' . $quotedTargetColumn . ' = ' . $joinTableAlias . '.' . $quotedSourceColumn; } @@ -1294,7 +1296,7 @@ public function walkSelectExpression($selectExpression) $col = sprintf( '%s.%s', $this->getSQLTableAlias($property->getTableName(), $dqlAlias), - $this->quoteStrategy->getColumnName($property, $this->platform) + $this->platform->quoteIdentifier($property->getColumnName()) ); $sql .= sprintf( @@ -1389,7 +1391,7 @@ public function walkSelectExpression($selectExpression) $col = sprintf( '%s.%s', $this->getSQLTableAlias($property->getTableName(), $dqlAlias), - $this->quoteStrategy->getColumnName($property, $this->platform) + $this->platform->quoteIdentifier($property->getColumnName()) ); $sqlParts[] = sprintf( @@ -1420,7 +1422,7 @@ public function walkSelectExpression($selectExpression) $col = sprintf( '%s.%s', $this->getSQLTableAlias($property->getTableName(), $dqlAlias), - $this->quoteStrategy->getColumnName($property, $this->platform) + $this->platform->quoteIdentifier($property->getColumnName()) ); $sqlParts[] = sprintf( @@ -1910,7 +1912,7 @@ public function walkCollectionMemberExpression($collMemberExpr) foreach ($owningAssoc['targetToSourceKeyColumns'] as $targetColumn => $sourceColumn) { $property = $class->getProperty($class->fieldNames[$targetColumn]); - $targetColumn = $this->quoteStrategy->getColumnName($property, $this->platform); + $targetColumn = $this->platform->quoteIdentifier($property->getColumnName()); $sqlParts[] = $sourceTableAlias . '.' . $targetColumn . ' = ' . $targetTableAlias . '.' . $sourceColumn; } @@ -1945,8 +1947,8 @@ public function walkCollectionMemberExpression($collMemberExpr) foreach ($joinColumns as $joinColumn) { $property = $targetClass->getProperty($targetClass->fieldNames[$joinColumn['referencedColumnName']]); - $sourceColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); - $targetColumn = $this->quoteStrategy->getColumnName($property, $this->platform); + $sourceColumn = $this->platform->quoteIdentifier($joinColumn['name']); + $targetColumn = $this->platform->quoteIdentifier($property->getColumnName()); $joinSqlParts[] = $joinTableAlias . '.' . $sourceColumn . ' = ' . $targetTableAlias . '.' . $targetColumn; } @@ -1959,8 +1961,8 @@ public function walkCollectionMemberExpression($collMemberExpr) foreach ($joinColumns as $joinColumn) { $property = $class->getProperty($class->fieldNames[$joinColumn['referencedColumnName']]); - $sourceColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); - $targetColumn = $this->quoteStrategy->getColumnName($property, $this->platform); + $sourceColumn = $this->platform->quoteIdentifier($joinColumn['name']); + $targetColumn = $this->platform->quoteIdentifier($property->getColumnName()); $sqlParts[] = $joinTableAlias . '.' . $sourceColumn . ' = ' . $sourceTableAlias . '.' . $targetColumn; } @@ -2037,7 +2039,7 @@ public function walkInstanceOfExpression($instanceOfExpr) $discrMap = array_flip($class->discriminatorMap); $discrColumn = $class->discriminatorColumn; $discrColumnType = $discrColumn->getType(); - $quotedColumnName = $this->quoteStrategy->getColumnName($discrColumn, $this->platform); + $quotedColumnName = $this->platform->quoteIdentifier($discrColumn->getColumnName()); $sqlTableAlias = $this->useSqlTableAliases ? $this->getSQLTableAlias($discrColumn->getTableName(), $dqlAlias) . '.' : ''; diff --git a/lib/Doctrine/ORM/Id/AbstractIdGenerator.php b/lib/Doctrine/ORM/Sequencing/AbstractGenerator.php similarity index 96% rename from lib/Doctrine/ORM/Id/AbstractIdGenerator.php rename to lib/Doctrine/ORM/Sequencing/AbstractGenerator.php index 02051976852..6cc3ab658c0 100644 --- a/lib/Doctrine/ORM/Id/AbstractIdGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/AbstractGenerator.php @@ -17,11 +17,11 @@ * . */ -namespace Doctrine\ORM\Id; +namespace Doctrine\ORM\Sequencing; use Doctrine\ORM\EntityManager; -abstract class AbstractIdGenerator +abstract class AbstractGenerator { /** * Generates an identifier for an entity. diff --git a/lib/Doctrine/ORM/Id/AssignedGenerator.php b/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php similarity index 92% rename from lib/Doctrine/ORM/Id/AssignedGenerator.php rename to lib/Doctrine/ORM/Sequencing/AssignedGenerator.php index 691eaee4221..5b8c1309490 100644 --- a/lib/Doctrine/ORM/Id/AssignedGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php @@ -17,13 +17,13 @@ * . */ -namespace Doctrine\ORM\Id; +namespace Doctrine\ORM\Sequencing; use Doctrine\ORM\EntityManager; use Doctrine\ORM\ORMException; /** - * Special generator for application-assigned identifiers (doesn't really generate anything). + * Special generator for application-assigned sequencing (doesn't really generate anything). * * @since 2.0 * @author Benjamin Eberlei @@ -31,7 +31,7 @@ * @author Jonathan Wage * @author Roman Borschel */ -class AssignedGenerator extends AbstractIdGenerator +class AssignedGenerator extends AbstractGenerator { /** * Returns the identifier assigned to the given entity. diff --git a/lib/Doctrine/ORM/Id/BigIntegerIdentityGenerator.php b/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php similarity index 95% rename from lib/Doctrine/ORM/Id/BigIntegerIdentityGenerator.php rename to lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php index 01d139f485b..1386781ebc9 100644 --- a/lib/Doctrine/ORM/Id/BigIntegerIdentityGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Id; +namespace Doctrine\ORM\Sequencing; use Doctrine\ORM\EntityManager; @@ -26,7 +26,7 @@ * that automatically get a database-generated, auto-incremented identifier on INSERT. * This generator obtains the last insert id after such an insert. */ -class BigIntegerIdentityGenerator extends AbstractIdGenerator +class BigIntegerIdentityGenerator extends AbstractGenerator { /** * The name of the sequence to pass to lastInsertId(), if any. diff --git a/lib/Doctrine/ORM/Id/IdentityGenerator.php b/lib/Doctrine/ORM/Sequencing/IdentityGenerator.php similarity index 96% rename from lib/Doctrine/ORM/Id/IdentityGenerator.php rename to lib/Doctrine/ORM/Sequencing/IdentityGenerator.php index b9f68c625f6..d21e2df3af6 100644 --- a/lib/Doctrine/ORM/Id/IdentityGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/IdentityGenerator.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Id; +namespace Doctrine\ORM\Sequencing; use Doctrine\ORM\EntityManager; @@ -26,7 +26,7 @@ * that automatically get a database-generated, auto-incremented identifier on INSERT. * This generator obtains the last insert id after such an insert. */ -class IdentityGenerator extends AbstractIdGenerator +class IdentityGenerator extends AbstractGenerator { /** * The name of the sequence to pass to lastInsertId(), if any. diff --git a/lib/Doctrine/ORM/Id/SequenceGenerator.php b/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php similarity index 96% rename from lib/Doctrine/ORM/Id/SequenceGenerator.php rename to lib/Doctrine/ORM/Sequencing/SequenceGenerator.php index 9d8e9eb75aa..205e03a4e01 100644 --- a/lib/Doctrine/ORM/Id/SequenceGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Id; +namespace Doctrine\ORM\Sequencing; use Doctrine\ORM\EntityManager; use Serializable; @@ -28,7 +28,7 @@ * @since 2.0 * @author Roman Borschel */ -class SequenceGenerator extends AbstractIdGenerator implements Serializable +class SequenceGenerator extends AbstractGenerator implements Serializable { /** * The allocation size of the sequence. diff --git a/lib/Doctrine/ORM/Id/TableGenerator.php b/lib/Doctrine/ORM/Sequencing/TableGenerator.php similarity index 97% rename from lib/Doctrine/ORM/Id/TableGenerator.php rename to lib/Doctrine/ORM/Sequencing/TableGenerator.php index 02385f51158..17e5ca9d23c 100644 --- a/lib/Doctrine/ORM/Id/TableGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/TableGenerator.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Id; +namespace Doctrine\ORM\Sequencing; use Doctrine\ORM\EntityManager; @@ -30,7 +30,7 @@ * @author Jonathan Wage * @author Roman Borschel */ -class TableGenerator extends AbstractIdGenerator +class TableGenerator extends AbstractGenerator { /** * @var string diff --git a/lib/Doctrine/ORM/Id/UuidGenerator.php b/lib/Doctrine/ORM/Sequencing/UuidGenerator.php similarity index 94% rename from lib/Doctrine/ORM/Id/UuidGenerator.php rename to lib/Doctrine/ORM/Sequencing/UuidGenerator.php index 7cac5ccf40f..0e9b35b9853 100644 --- a/lib/Doctrine/ORM/Id/UuidGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/UuidGenerator.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Id; +namespace Doctrine\ORM\Sequencing; use Doctrine\ORM\EntityManager; @@ -27,7 +27,7 @@ * @since 2.3 * @author Maarten de Keizer */ -class UuidGenerator extends AbstractIdGenerator +class UuidGenerator extends AbstractGenerator { /** * {@inheritDoc} diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index 678fdc5d761..882c1c160e6 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -115,7 +115,6 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage $this->formatField('Composite identifier?', $metadata->isIdentifierComposite), $this->formatField('Foreign identifier?', $metadata->containsForeignIdentifier), $this->formatField('Sequence generator definition', $metadata->sequenceGeneratorDefinition), - $this->formatField('Table generator definition', $metadata->tableGeneratorDefinition), $this->formatField('Change tracking policy', $metadata->changeTrackingPolicy), $this->formatField('Versioned?', $metadata->isVersioned()), $this->formatField('Version field', ($metadata->isVersioned() ? $metadata->versionProperty->getName() : '')), diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php index ba6cee76d03..159db3593b6 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php @@ -456,7 +456,7 @@ private function generateSqlAliasReplacements() : array // Get the SQL table alias for the entity and field and the column name as will appear in the select list $tableAlias = $this->getSQLTableAlias($property->getTableName(), $dqlAliasForFieldAlias); - $columnName = $this->quoteStrategy->getColumnName($property, $platform); + $columnName = $platform->quoteIdentifier($property->getColumnName()); // Compose search and replace patterns $searchPatterns[] = \sprintf(self::ORDER_BY_PATH_EXPRESSION, $tableAlias, $columnName); diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 42fb55f7b35..076a1dced36 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -191,7 +191,7 @@ public function getSchemaFromMetadata(array $classes) foreach ($class->getProperties() as $fieldName => $property) { if (! $class->isInheritedProperty($fieldName)) { - $columnName = $this->quoteStrategy->getColumnName($property, $this->platform); + $columnName = $this->platform->quoteIdentifier($property->getColumnName()); $this->gatherColumn($class, $property, $table); @@ -252,7 +252,7 @@ public function getSchemaFromMetadata(array $classes) foreach ($class->identifier as $identifierField) { if (($property = $class->getProperty($identifierField)) !== null) { - $pkColumns[] = $this->quoteStrategy->getColumnName($property, $this->platform); + $pkColumns[] = $this->platform->quoteIdentifier($property->getColumnName()); continue; } @@ -262,7 +262,7 @@ public function getSchemaFromMetadata(array $classes) $assoc = $class->associationMappings[$identifierField]; foreach ($assoc['joinColumns'] as $joinColumn) { - $pkColumns[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); + $pkColumns[] = $this->platform->quoteIdentifier($joinColumn['name']); } } } @@ -315,15 +315,12 @@ public function getSchemaFromMetadata(array $classes) $processedClasses[$class->name] = true; - if ($class->isIdGeneratorSequence() && $class->name == $class->rootEntityName) { - $seqDef = $class->sequenceGeneratorDefinition; - $quotedName = $this->quoteStrategy->getSequenceName($seqDef, $class, $this->platform); + if ($class->isIdGeneratorSequence() && $class->name === $class->rootEntityName) { + $definition = $class->sequenceGeneratorDefinition; + $quotedName = $this->platform->quoteIdentifier($definition['sequenceName']); + if ( ! $schema->hasSequence($quotedName)) { - $schema->createSequence( - $quotedName, - $seqDef['allocationSize'], - $seqDef['initialValue'] - ); + $schema->createSequence($quotedName, $definition['allocationSize'], $definition['initialValue']); } } @@ -405,7 +402,7 @@ private function gatherColumns($class, Table $table) $this->gatherColumn($class, $property, $table); if ($property->isPrimaryKey()) { - $pkColumns[] = $this->quoteStrategy->getColumnName($property, $this->platform); + $pkColumns[] = $this->platform->quoteIdentifier($property->getColumnName()); } } } @@ -477,7 +474,7 @@ private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Tabl $options['autoincrement'] = false; } - $quotedColumnName = $this->quoteStrategy->getColumnName($fieldMetadata, $this->platform); + $quotedColumnName = $this->platform->quoteIdentifier($fieldMetadata->getColumnName()); if ($table->hasColumn($quotedColumnName)) { // required in some inheritance scenarios @@ -657,12 +654,8 @@ private function gatherRelationJoinColumns( )); } - $quotedColumnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); - $quotedRefColumnName = $this->quoteStrategy->getReferencedJoinColumnName( - $joinColumn, - $class, - $this->platform - ); + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn['name']); + $quotedRefColumnName = $this->platform->quoteIdentifier($joinColumn['referencedColumnName']); $primaryKeyColumns[] = $quotedColumnName; $localColumns[] = $quotedColumnName; diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 696a1ee913a..dda134a08c2 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -891,7 +891,7 @@ private function persistNew($class, $entity) if ( ! $idGen->isPostInsertGenerator()) { $idValue = $idGen->generate($this->em, $entity); - if ( ! $idGen instanceof \Doctrine\ORM\Id\AssignedGenerator) { + if ( ! $idGen instanceof \Doctrine\ORM\Sequencing\AssignedGenerator) { $idValue = [$class->getSingleIdentifierFieldName() => $this->convertSingleFieldIdentifierToPHPValue($class, $idValue)]; $class->assignIdentifier($entity, $idValue); diff --git a/tests/Doctrine/Tests/Mocks/SequenceMock.php b/tests/Doctrine/Tests/Mocks/SequenceMock.php index fc6c10f41a4..e8dda12b5a7 100644 --- a/tests/Doctrine/Tests/Mocks/SequenceMock.php +++ b/tests/Doctrine/Tests/Mocks/SequenceMock.php @@ -3,7 +3,7 @@ namespace Doctrine\Tests\Mocks; use Doctrine\ORM\EntityManager; -use Doctrine\ORM\Id\SequenceGenerator; +use Doctrine\ORM\Sequencing\SequenceGenerator; /** * Mock class for SequenceGenerator. diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php index c7111ef8b82..8e012b937f4 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php @@ -4,7 +4,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\EntityManager; -use Doctrine\ORM\Id\AbstractIdGenerator; +use Doctrine\ORM\Sequencing\AbstractGenerator; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\Driver\StaticPHPDriver; @@ -89,7 +89,7 @@ public static function loadMetadata(ClassMetadata $metadata) } } -class DDC2415Generator extends AbstractIdGenerator +class DDC2415Generator extends AbstractGenerator { public function generate(EntityManager $em, $entity) { diff --git a/tests/Doctrine/Tests/ORM/Mapping/AnsiQuoteStrategyTest.php b/tests/Doctrine/Tests/ORM/Mapping/AnsiQuoteStrategyTest.php deleted file mode 100644 index b70beba1ce3..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/AnsiQuoteStrategyTest.php +++ /dev/null @@ -1,156 +0,0 @@ -_getTestEntityManager(); - $this->platform = $em->getConnection()->getDatabasePlatform(); - $this->strategy = new AnsiQuoteStrategy(); - } - - /** - * @param string $className - * @return \Doctrine\ORM\Mapping\ClassMetadata - */ - private function createClassMetadata($className) - { - $class = new ClassMetadata($className); - $class->initializeReflection(new RuntimeReflectionService()); - - return $class; - } - - public function testGetColumnName() - { - $class = $this->createClassMetadata(CmsUser::class); - $idProperty = $class->addProperty('id', Type::getType('string'), ['id' => true]); - $nameProperty = $class->addProperty('name', Type::getType('string')); - - self::assertEquals('id' ,$this->strategy->getColumnName($idProperty, $this->platform)); - self::assertEquals('name' ,$this->strategy->getColumnName($nameProperty, $this->platform)); - } - - public function testGetTableName() - { - $class = $this->createClassMetadata(CmsUser::class); - - $class->setPrimaryTable(['name'=>'cms_user']); - - self::assertEquals('cms_user', $this->strategy->getTableName($class, $this->platform)); - } - - public function testJoinTableName() - { - $class = $this->createClassMetadata(CmsAddress::class); - - $class->mapManyToMany( - [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser', - 'inversedBy' => 'users', - 'joinTable' => ['name' => 'cmsaddress_cmsuser'] - ] - ); - - self::assertEquals('cmsaddress_cmsuser', $this->strategy->getJoinTableName($class->associationMappings['user'], $class, $this->platform)); - } - - public function testIdentifierColumnNames() - { - $class = $this->createClassMetadata(CmsAddress::class); - $class->addProperty('id', Type::getType('integer'), ['id' => true]); - - self::assertEquals(['id'], $this->strategy->getIdentifierColumnNames($class, $this->platform)); - } - - - public function testColumnAlias() - { - self::assertEquals('columnName_1', $this->strategy->getColumnAlias('columnName', 1, $this->platform)); - } - - public function testJoinColumnName() - { - $class = $this->createClassMetadata(DDC117ArticleDetails::class); - - $class->mapOneToOne( - [ - 'id' => true, - 'fieldName' => 'article', - 'targetEntity' => DDC117Article::class, - 'joinColumns' => [ - [ - 'name' => 'article' - ] - ], - ] - ); - - $joinColumn = $class->associationMappings['article']['joinColumns'][0]; - self::assertEquals('article',$this->strategy->getJoinColumnName($joinColumn, $class, $this->platform)); - } - - public function testReferencedJoinColumnName() - { - $cm = $this->createClassMetadata(DDC117ArticleDetails::class); - - $cm->mapOneToOne( - [ - 'id' => true, - 'fieldName' => 'article', - 'targetEntity' => DDC117Article::class, - 'joinColumns' => [ - [ - 'name' => 'article' - ] - ], - ] - ); - - $joinColumn = $cm->associationMappings['article']['joinColumns'][0]; - self::assertEquals('id',$this->strategy->getReferencedJoinColumnName($joinColumn, $cm, $this->platform)); - } - - public function testGetSequenceName() - { - $class = $this->createClassMetadata(CmsUser::class); - $definition = [ - 'sequenceName' => 'user_id_seq', - 'allocationSize' => 1, - 'initialValue' => 2 - ]; - - $class->setSequenceGeneratorDefinition($definition); - - self::assertEquals('user_id_seq',$this->strategy->getSequenceName($definition, $class, $this->platform)); - } -} diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index d0e43d50d20..7337c89771d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -4,7 +4,7 @@ use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\ORM\EntityRepository; -use Doctrine\ORM\Id\SequenceGenerator; +use Doctrine\ORM\Sequencing\SequenceGenerator; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\MappingException; diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 1aab42a4b84..3dfa7bdae25 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -12,7 +12,7 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs; use Doctrine\ORM\Events; -use Doctrine\ORM\Id\AbstractIdGenerator; +use Doctrine\ORM\Sequencing\AbstractGenerator; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\MappingException; @@ -476,7 +476,7 @@ class TestEntity1 private $embedded; } -class CustomIdGenerator extends AbstractIdGenerator +class CustomIdGenerator extends AbstractGenerator { public function generate(EntityManager $em, $entity) { diff --git a/tests/Doctrine/Tests/ORM/Mapping/DefaultQuoteStrategyTest.php b/tests/Doctrine/Tests/ORM/Mapping/DefaultQuoteStrategyTest.php deleted file mode 100644 index 76991cd9640..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/DefaultQuoteStrategyTest.php +++ /dev/null @@ -1,34 +0,0 @@ - - */ -class DefaultQuoteStrategyTest extends OrmTestCase -{ - /** - * @group DDC-3590 - * @group 1316 - */ - public function testGetJoinTableName() - { - $em = $this->_getTestEntityManager(); - $metadata = $em->getClassMetadata(NonPublicSchemaUser::class); - $strategy = new DefaultQuoteStrategy(); - /* @var $platform AbstractPlatform */ - $platform = $this->getMockForAbstractClass(AbstractPlatform::class); - - self::assertSame( - 'readers.author_reader', - $strategy->getJoinTableName($metadata->associationMappings['readers'], $metadata, $platform) - ); - } -} diff --git a/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php b/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php deleted file mode 100644 index 4f9bf385de9..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/QuoteStrategyTest.php +++ /dev/null @@ -1,211 +0,0 @@ -_getTestEntityManager(); - $this->platform = $em->getConnection()->getDatabasePlatform(); - $this->strategy = new DefaultQuoteStrategy(); - } - - /** - * @param string $className - * @return \Doctrine\ORM\Mapping\ClassMetadata - */ - private function createClassMetadata($className) - { - $cm = new ClassMetadata($className); - - $cm->initializeReflection(new RuntimeReflectionService()); - - return $cm; - } - - public function testConfiguration() - { - $em = $this->_getTestEntityManager(); - $config = $em->getConfiguration(); - - self::assertInstanceOf(QuoteStrategy::class, $config->getQuoteStrategy()); - self::assertInstanceOf(DefaultQuoteStrategy::class, $config->getQuoteStrategy()); - - $config->setQuoteStrategy(new MyQuoteStrategy()); - - self::assertInstanceOf(QuoteStrategy::class, $config->getQuoteStrategy()); - self::assertInstanceOf(MyQuoteStrategy::class, $config->getQuoteStrategy()); - } - - public function testGetColumnName() - { - $cm = $this->createClassMetadata(CmsUser::class); - - $idProperty = $cm->addProperty('id', Type::getType('string')); - $nameProperty = $cm->addProperty('name', Type::getType('string'), ['columnName' => 'name']); - - self::assertEquals('id', $this->strategy->getColumnName($idProperty, $this->platform)); - self::assertEquals('"name"', $this->strategy->getColumnName($nameProperty, $this->platform)); - } - - public function testGetTableName() - { - $cm = $this->createClassMetadata(CmsUser::class); - - $cm->setPrimaryTable(['name'=>'cms_user']); - - self::assertEquals('"cms_user"', $this->strategy->getTableName($cm, $this->platform)); - - $cm = new ClassMetadata(CmsUser::class); - - $cm->initializeReflection(new RuntimeReflectionService()); - $cm->setPrimaryTable(['name'=>'cms_user']); - - self::assertEquals('cms_user', $this->strategy->getTableName($cm, $this->platform)); - } - - public function testJoinTableName() - { - $cm1 = $this->createClassMetadata(CmsAddress::class); - $cm2 = $this->createClassMetadata(CmsAddress::class); - - $cm1->mapManyToMany( - [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser', - 'inversedBy' => 'users', - 'joinTable' => ['name' => 'cmsaddress_cmsuser'] - ] - ); - - $cm2->mapManyToMany( - [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser', - 'inversedBy' => 'users', - 'joinTable' => ['name' => 'cmsaddress_cmsuser'] - ] - ); - - self::assertEquals('"cmsaddress_cmsuser"', $this->strategy->getJoinTableName($cm1->associationMappings['user'], $cm1, $this->platform)); - self::assertEquals('cmsaddress_cmsuser', $this->strategy->getJoinTableName($cm2->associationMappings['user'], $cm2, $this->platform)); - } - - public function testIdentifierColumnNames() - { - $cm1 = $this->createClassMetadata(CmsAddress::class); - $cm2 = $this->createClassMetadata(CmsAddress::class); - - $cm1->addProperty( - 'id', - Type::getType('string'), - [ - 'id' => true, - 'columnName' => 'id', - ] - ); - - $cm2->addProperty( - 'id', - Type::getType('string'), - [ - 'id' => true, - 'columnName' => 'id', - ] - ); - - self::assertEquals(['"id"'], $this->strategy->getIdentifierColumnNames($cm1, $this->platform)); - self::assertEquals(['id'], $this->strategy->getIdentifierColumnNames($cm2, $this->platform)); - } - - - public function testColumnAlias() - { - $i = 0; - self::assertEquals('columnName_0', $this->strategy->getColumnAlias('columnName', $i++, $this->platform)); - self::assertEquals('column_name_1', $this->strategy->getColumnAlias('column_name', $i++, $this->platform)); - self::assertEquals('COLUMN_NAME_2', $this->strategy->getColumnAlias('COLUMN_NAME', $i++, $this->platform)); - self::assertEquals('COLUMNNAME_3', $this->strategy->getColumnAlias('COLUMN-NAME-', $i++, $this->platform)); - } - - public function testQuoteIdentifierJoinColumns() - { - $cm = $this->createClassMetadata(DDC117ArticleDetails::class); - - $cm->mapOneToOne( - [ - 'id' => true, - 'fieldName' => 'article', - 'targetEntity' => DDC117Article::class, - 'joinColumns' => [['name' => 'article']], - ] - ); - - self::assertEquals(['"article"'], $this->strategy->getIdentifierColumnNames($cm, $this->platform)); - } - - public function testJoinColumnName() - { - $cm = $this->createClassMetadata(DDC117ArticleDetails::class); - - $cm->mapOneToOne( - [ - 'id' => true, - 'fieldName' => 'article', - 'targetEntity' => DDC117Article::class, - 'joinColumns' => [['name' => 'article']], - ] - ); - - $joinColumn = $cm->associationMappings['article']['joinColumns'][0]; - self::assertEquals('"article"',$this->strategy->getJoinColumnName($joinColumn, $cm, $this->platform)); - } - - public function testReferencedJoinColumnName() - { - $cm = $this->createClassMetadata(DDC117ArticleDetails::class); - - $cm->mapOneToOne( - [ - 'id' => true, - 'fieldName' => 'article', - 'targetEntity' => DDC117Article::class, - 'joinColumns' => [['name' => 'article']], - ] - ); - - $joinColumn = $cm->associationMappings['article']['joinColumns'][0]; - self::assertEquals('"id"',$this->strategy->getReferencedJoinColumnName($joinColumn, $cm, $this->platform)); - } -} - -class MyQuoteStrategy extends DefaultQuoteStrategy -{ - -} diff --git a/tests/Doctrine/Tests/ORM/Id/AssignedGeneratorTest.php b/tests/Doctrine/Tests/ORM/Sequencing/AssignedGeneratorTest.php similarity index 94% rename from tests/Doctrine/Tests/ORM/Id/AssignedGeneratorTest.php rename to tests/Doctrine/Tests/ORM/Sequencing/AssignedGeneratorTest.php index 08e67a927d6..841dd17bd40 100644 --- a/tests/Doctrine/Tests/ORM/Id/AssignedGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Sequencing/AssignedGeneratorTest.php @@ -1,8 +1,8 @@ Date: Tue, 12 Jul 2016 19:49:37 +0000 Subject: [PATCH 052/275] Removing Doctrine ORM 1 schema conversion tool. This tool reads and writes YAML files so it should be removed. --- .../Command/ConvertDoctrine1SchemaCommand.php | 231 ------------ .../ORM/Tools/Console/ConsoleRunner.php | 1 - .../ORM/Tools/ConvertDoctrine1Schema.php | 343 ------------------ lib/Doctrine/ORM/Tools/ToolsException.php | 10 - .../ConvertDoctrine1SchemaCommandTest.php | 25 -- .../ORM/Tools/Console/ConsoleRunnerTest.php | 2 - .../ORM/Tools/ConvertDoctrine1SchemaTest.php | 92 ----- .../ORM/Tools/doctrine1schema/schema.yml | 28 -- tools/sandbox/doctrine.php | 1 - 9 files changed, 733 deletions(-) delete mode 100644 lib/Doctrine/ORM/Tools/Console/Command/ConvertDoctrine1SchemaCommand.php delete mode 100644 lib/Doctrine/ORM/Tools/ConvertDoctrine1Schema.php delete mode 100644 tests/Doctrine/Tests/ORM/Tools/Console/Command/ConvertDoctrine1SchemaCommandTest.php delete mode 100644 tests/Doctrine/Tests/ORM/Tools/ConvertDoctrine1SchemaTest.php delete mode 100644 tests/Doctrine/Tests/ORM/Tools/doctrine1schema/schema.yml diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ConvertDoctrine1SchemaCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ConvertDoctrine1SchemaCommand.php deleted file mode 100644 index 6c81de940de..00000000000 --- a/lib/Doctrine/ORM/Tools/Console/Command/ConvertDoctrine1SchemaCommand.php +++ /dev/null @@ -1,231 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Tools\Console\Command; - -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputOption; -use Doctrine\ORM\Tools\Export\ClassMetadataExporter; -use Doctrine\ORM\Tools\ConvertDoctrine1Schema; -use Doctrine\ORM\Tools\EntityGenerator; -use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Command\Command; - -/** - * Command to convert a Doctrine 1 schema to a Doctrine 2 mapping file. - * - * @link www.doctrine-project.org - * @since 2.0 - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - */ -class ConvertDoctrine1SchemaCommand extends Command -{ - /** - * @var EntityGenerator|null - */ - private $entityGenerator = null; - - /** - * @var ClassMetadataExporter|null - */ - private $metadataExporter = null; - - /** - * @return EntityGenerator - */ - public function getEntityGenerator() - { - if ($this->entityGenerator == null) { - $this->entityGenerator = new EntityGenerator(); - } - - return $this->entityGenerator; - } - - /** - * @param EntityGenerator $entityGenerator - * - * @return void - */ - public function setEntityGenerator(EntityGenerator $entityGenerator) - { - $this->entityGenerator = $entityGenerator; - } - - /** - * @return ClassMetadataExporter - */ - public function getMetadataExporter() - { - if ($this->metadataExporter == null) { - $this->metadataExporter = new ClassMetadataExporter(); - } - - return $this->metadataExporter; - } - - /** - * @param ClassMetadataExporter $metadataExporter - * - * @return void - */ - public function setMetadataExporter(ClassMetadataExporter $metadataExporter) - { - $this->metadataExporter = $metadataExporter; - } - - /** - * {@inheritdoc} - */ - protected function configure() - { - $this - ->setName('orm:convert-d1-schema') - ->setAliases(['orm:convert:d1-schema']) - ->setDescription('Converts Doctrine 1.X schema into a Doctrine 2.X schema.') - ->setDefinition( - [ - new InputArgument( - 'from-path', InputArgument::REQUIRED, 'The path of Doctrine 1.X schema information.' - ), - new InputArgument( - 'to-type', InputArgument::REQUIRED, 'The destination Doctrine 2.X mapping type.' - ), - new InputArgument( - 'dest-path', InputArgument::REQUIRED, - 'The path to generate your Doctrine 2.X mapping information.' - ), - new InputOption( - 'from', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, - 'Optional paths of Doctrine 1.X schema information.', - [] - ), - new InputOption( - 'extend', null, InputOption::VALUE_OPTIONAL, - 'Defines a base class to be extended by generated entity classes.' - ), - new InputOption( - 'num-spaces', null, InputOption::VALUE_OPTIONAL, - 'Defines the number of indentation spaces', 4 - ) - ] - ) - ->setHelp(<<getArgument('from-path')], $input->getOption('from')); - - // Process destination directory - $destPath = realpath($input->getArgument('dest-path')); - - $toType = $input->getArgument('to-type'); - $extend = $input->getOption('extend'); - $numSpaces = $input->getOption('num-spaces'); - - $this->convertDoctrine1Schema($fromPaths, $destPath, $toType, $numSpaces, $extend, $output); - } - - /** - * @param array $fromPaths - * @param string $destPath - * @param string $toType - * @param int $numSpaces - * @param string|null $extend - * @param OutputInterface $output - * - * @throws \InvalidArgumentException - */ - public function convertDoctrine1Schema(array $fromPaths, $destPath, $toType, $numSpaces, $extend, OutputInterface $output) - { - foreach ($fromPaths as &$dirName) { - $dirName = realpath($dirName); - - if ( ! file_exists($dirName)) { - throw new \InvalidArgumentException( - sprintf("Doctrine 1.X schema directory '%s' does not exist.", $dirName) - ); - } - - if ( ! is_readable($dirName)) { - throw new \InvalidArgumentException( - sprintf("Doctrine 1.X schema directory '%s' does not have read permissions.", $dirName) - ); - } - } - - if ( ! file_exists($destPath)) { - throw new \InvalidArgumentException( - sprintf("Doctrine 2.X mapping destination directory '%s' does not exist.", $destPath) - ); - } - - if ( ! is_writable($destPath)) { - throw new \InvalidArgumentException( - sprintf("Doctrine 2.X mapping destination directory '%s' does not have write permissions.", $destPath) - ); - } - - $cme = $this->getMetadataExporter(); - $exporter = $cme->getExporter($toType, $destPath); - - if (strtolower($toType) === 'annotation') { - $entityGenerator = $this->getEntityGenerator(); - $exporter->setEntityGenerator($entityGenerator); - - $entityGenerator->setNumSpaces($numSpaces); - - if ($extend !== null) { - $entityGenerator->setClassToExtend($extend); - } - } - - $converter = new ConvertDoctrine1Schema($fromPaths); - $metadata = $converter->getMetadata(); - - if ($metadata) { - $output->writeln(''); - - foreach ($metadata as $class) { - $output->writeln(sprintf('Processing entity "%s"', $class->name)); - } - - $exporter->setMetadata($metadata); - $exporter->export(); - - $output->writeln(PHP_EOL . sprintf( - 'Converting Doctrine 1.X schema to "%s" mapping type in "%s"', $toType, $destPath - )); - } else { - $output->writeln('No Metadata Classes to process.'); - } - } -} diff --git a/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php b/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php index c6a265cc079..52bb16908ef 100644 --- a/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php +++ b/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php @@ -107,7 +107,6 @@ public static function addCommands(Application $cli) : void new Command\SchemaTool\UpdateCommand(), new Command\SchemaTool\DropCommand(), new Command\EnsureProductionSettingsCommand(), - new Command\ConvertDoctrine1SchemaCommand(), new Command\GenerateRepositoriesCommand(), new Command\GenerateEntitiesCommand(), new Command\GenerateProxiesCommand(), diff --git a/lib/Doctrine/ORM/Tools/ConvertDoctrine1Schema.php b/lib/Doctrine/ORM/Tools/ConvertDoctrine1Schema.php deleted file mode 100644 index 8b18105fe4c..00000000000 --- a/lib/Doctrine/ORM/Tools/ConvertDoctrine1Schema.php +++ /dev/null @@ -1,343 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Tools; - -use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\Common\Util\Inflector; -use Doctrine\DBAL\Types\Type; -use Symfony\Component\Yaml\Yaml; - -/** - * Class to help with converting Doctrine 1 schema files to Doctrine 2 mapping files - * - * - * @link www.doctrine-project.org - * @since 2.0 - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - */ -class ConvertDoctrine1Schema -{ - /** - * @var array - */ - private $from; - - /** - * @var array - */ - private $legacyTypeMap = [ - // TODO: This list may need to be updated - 'clob' => 'text', - 'timestamp' => 'datetime', - 'enum' => 'string' - ]; - - /** - * Constructor passes the directory or array of directories - * to convert the Doctrine 1 schema files from. - * - * @param array $from - * - * @author Jonathan Wage - */ - public function __construct($from) - { - $this->from = (array) $from; - } - - /** - * Gets an array of ClassMetadata instances from the passed - * Doctrine 1 schema. - * - * @return array An array of ClassMetadata instances - */ - public function getMetadata() - { - $schema = []; - foreach ($this->from as $path) { - if (is_dir($path)) { - $files = glob($path . '/*.yml'); - foreach ($files as $file) { - $schema = array_merge($schema, (array) Yaml::parse(file_get_contents($file))); - } - } else { - $schema = array_merge($schema, (array) Yaml::parse(file_get_contents($path))); - } - } - - $metadatas = []; - foreach ($schema as $className => $mappingInformation) { - $metadatas[] = $this->convertToClassMetadata($className, $mappingInformation); - } - - return $metadatas; - } - - /** - * @param string $className - * @param array $mappingInformation - * - * @return ClassMetadata - */ - private function convertToClassMetadata($className, $mappingInformation) - { - $metadata = new ClassMetadata($className); - - $this->convertTableName($className, $mappingInformation, $metadata); - $this->convertColumns($className, $mappingInformation, $metadata); - $this->convertIndexes($className, $mappingInformation, $metadata); - $this->convertRelations($className, $mappingInformation, $metadata); - - return $metadata; - } - - /** - * @param string $className - * @param array $model - * @param ClassMetadata $metadata - * - * @return void - */ - private function convertTableName($className, array $model, ClassMetadata $metadata) - { - if (isset($model['tableName']) && $model['tableName']) { - $e = explode('.', $model['tableName']); - - if (count($e) > 1) { - $metadata->table['schema'] = $e[0]; - $metadata->table['name'] = $e[1]; - } else { - $metadata->table['name'] = $e[0]; - } - } - } - - /** - * @param string $className - * @param array $model - * @param ClassMetadata $metadata - * - * @return void - */ - private function convertColumns($className, array $model, ClassMetadata $metadata) - { - $id = false; - - if (isset($model['columns']) && $model['columns']) { - foreach ($model['columns'] as $name => $column) { - $fieldMapping = $this->convertColumn($className, $name, $column, $metadata); - - if (isset($fieldMapping['id']) && $fieldMapping['id']) { - $id = true; - } - } - } - - if ( ! $id) { - $metadata->addProperty('id', Type::getType('integer'), [ - 'columnName' => 'id', - 'id' => true, - ]); - - $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); - } - } - - /** - * @param string $className - * @param string $name - * @param string|array $column - * @param ClassMetadata $metadata - * - * @return array - * - * @throws ToolsException - */ - private function convertColumn($className, $name, $column, ClassMetadata $metadata) - { - if (is_string($column)) { - $string = $column; - $column = []; - $column['type'] = $string; - } - - if ( ! isset($column['name'])) { - $column['name'] = $name; - } - - // check if a column alias was used (column_name as field_name) - if (preg_match("/(\w+)\sas\s(\w+)/i", $column['name'], $matches)) { - $name = $matches[1]; - $column['name'] = $name; - $column['alias'] = $matches[2]; - } - - if (preg_match("/([a-zA-Z]+)\(([0-9]+)\)/", $column['type'], $matches)) { - $column['type'] = $matches[1]; - $column['length'] = $matches[2]; - } - - $column['type'] = strtolower($column['type']); - // check if legacy column type (1.x) needs to be mapped to a 2.0 one - if (isset($this->legacyTypeMap[$column['type']])) { - $column['type'] = $this->legacyTypeMap[$column['type']]; - } - - if ( ! Type::hasType($column['type'])) { - throw ToolsException::couldNotMapDoctrine1Type($column['type']); - } - - $fieldName = isset($column['alias']) ? $column['alias'] : $name; - $fieldType = Type::getType($column['type']); - $fieldMapping = []; - - $fieldMapping['columnName'] = $column['name']; - - if (isset($column['length'])) { - $fieldMapping['length'] = $column['length']; - } - - $allowed = ['precision', 'scale', 'unique', 'options', 'notnull', 'version']; - - foreach ($column as $key => $value) { - if (in_array($key, $allowed)) { - $fieldMapping[$key] = $value; - } - } - - if (isset($column['primary'])) { - $fieldMapping['id'] = true; - } - - $metadata->addProperty($fieldName, $fieldType, $fieldMapping); - - if (isset($column['autoincrement'])) { - $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); - } elseif (isset($column['sequence'])) { - $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); - - $definition = [ - 'sequenceName' => is_array($column['sequence']) ? $column['sequence']['name']:$column['sequence'] - ]; - - if (isset($column['sequence']['size'])) { - $definition['allocationSize'] = $column['sequence']['size']; - } - - if (isset($column['sequence']['value'])) { - $definition['initialValue'] = $column['sequence']['value']; - } - - $metadata->setSequenceGeneratorDefinition($definition); - } - - return $fieldMapping; - } - - /** - * @param string $className - * @param array $model - * @param ClassMetadata $metadata - * - * @return void - */ - private function convertIndexes($className, array $model, ClassMetadata $metadata) - { - if (empty($model['indexes'])) { - return; - } - - foreach ($model['indexes'] as $name => $index) { - $type = (isset($index['type']) && $index['type'] == 'unique') - ? 'uniqueConstraints' : 'indexes'; - - $metadata->table[$type][$name] = [ - 'columns' => $index['fields'] - ]; - } - } - - /** - * @param string $className - * @param array $model - * @param ClassMetadata $metadata - * - * @return void - */ - private function convertRelations($className, array $model, ClassMetadata $metadata) - { - if (empty($model['relations'])) { - return; - } - - foreach ($model['relations'] as $name => $relation) { - if ( ! isset($relation['alias'])) { - $relation['alias'] = $name; - } - if ( ! isset($relation['class'])) { - $relation['class'] = $name; - } - if ( ! isset($relation['local'])) { - $relation['local'] = Inflector::tableize($relation['class']); - } - if ( ! isset($relation['foreign'])) { - $relation['foreign'] = 'id'; - } - if ( ! isset($relation['foreignAlias'])) { - $relation['foreignAlias'] = $className; - } - - if (isset($relation['refClass'])) { - $type = 'many'; - $foreignType = 'many'; - $joinColumns = []; - } else { - $type = isset($relation['type']) ? $relation['type'] : 'one'; - $foreignType = isset($relation['foreignType']) ? $relation['foreignType'] : 'many'; - $joinColumns = [ - [ - 'name' => $relation['local'], - 'referencedColumnName' => $relation['foreign'], - 'onDelete' => isset($relation['onDelete']) ? $relation['onDelete'] : null, - ] - ]; - } - - if ($type == 'one' && $foreignType == 'one') { - $method = 'mapOneToOne'; - } elseif ($type == 'many' && $foreignType == 'many') { - $method = 'mapManyToMany'; - } else { - $method = 'mapOneToMany'; - } - - $associationMapping = [ - 'fieldName' => $relation['alias'], - 'targetEntity' => $relation['class'], - 'mappedBy' => $relation['foreignAlias'], - 'joinColumns' => $joinColumns, - ]; - - $metadata->$method($associationMapping); - } - } -} diff --git a/lib/Doctrine/ORM/Tools/ToolsException.php b/lib/Doctrine/ORM/Tools/ToolsException.php index 0a461640491..8e4baab264c 100644 --- a/lib/Doctrine/ORM/Tools/ToolsException.php +++ b/lib/Doctrine/ORM/Tools/ToolsException.php @@ -38,14 +38,4 @@ public static function schemaToolFailure($sql, \Exception $e) { return new self("Schema-Tool failed with Error '" . $e->getMessage() . "' while executing DDL: " . $sql, "0", $e); } - - /** - * @param string $type - * - * @return ToolsException - */ - public static function couldNotMapDoctrine1Type($type) - { - return new self("Could not map doctrine 1 type '$type'!"); - } } diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/Command/ConvertDoctrine1SchemaCommandTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/Command/ConvertDoctrine1SchemaCommandTest.php deleted file mode 100644 index 3e6a0e90486..00000000000 --- a/tests/Doctrine/Tests/ORM/Tools/Console/Command/ConvertDoctrine1SchemaCommandTest.php +++ /dev/null @@ -1,25 +0,0 @@ -createMock(EntityGenerator::class); - $command = new ConvertDoctrine1SchemaCommand(); - $command->setEntityGenerator($entityGenerator); - - $output = $this->createMock(OutputInterface::class); - $output->expects($this->once()) - ->method('writeln') - ->with($this->equalTo('No Metadata Classes to process.')); - - $command->convertDoctrine1Schema([], sys_get_temp_dir(), 'annotation', 4, null, $output); - } -} diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/ConsoleRunnerTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/ConsoleRunnerTest.php index a53ba514dd9..f1cfc51029c 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Console/ConsoleRunnerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Console/ConsoleRunnerTest.php @@ -32,9 +32,7 @@ public function testCreateApplicationShouldReturnAnApplicationWithTheCorrectComm self::assertTrue($app->has('orm:clear-cache:metadata')); self::assertTrue($app->has('orm:clear-cache:query')); self::assertTrue($app->has('orm:clear-cache:result')); - self::assertTrue($app->has('orm:convert-d1-schema')); self::assertTrue($app->has('orm:convert-mapping')); - self::assertTrue($app->has('orm:convert:d1-schema')); self::assertTrue($app->has('orm:convert:mapping')); self::assertTrue($app->has('orm:ensure-production-settings')); self::assertTrue($app->has('orm:generate-entities')); diff --git a/tests/Doctrine/Tests/ORM/Tools/ConvertDoctrine1SchemaTest.php b/tests/Doctrine/Tests/ORM/Tools/ConvertDoctrine1SchemaTest.php deleted file mode 100644 index d8ea2c4df2c..00000000000 --- a/tests/Doctrine/Tests/ORM/Tools/ConvertDoctrine1SchemaTest.php +++ /dev/null @@ -1,92 +0,0 @@ - - * @author Roman Borschel setProxyDir(__DIR__ . '/../../Proxies'); - $config->setProxyNamespace('Doctrine\Tests\Proxies'); - $config->setMetadataDriverImpl($metadataDriver); - - $driverMock = new DriverMock(); - $eventManager = new EventManager(); - $connection = new ConnectionMock(array(), $driverMock, $config, $eventManager); - - return EntityManagerMock::create($connection, $config, $eventManager); - } - - public function testTest() - { - if ( ! class_exists('Symfony\Component\Yaml\Yaml', true)) { - $this->markTestSkipped('Please install Symfony YAML Component into the include path of your PHP installation.'); - } - - $cme = new ClassMetadataExporter(); - $converter = new ConvertDoctrine1Schema(__DIR__ . '/doctrine1schema'); - - $exporter = $cme->getExporter('yml', __DIR__ . '/convert'); - $exporter->setOverwriteExistingFiles(true); - $exporter->setMetadata($converter->getMetadata()); - $exporter->export(); - - self::assertTrue(file_exists(__DIR__ . '/convert/User.dcm.yml')); - self::assertTrue(file_exists(__DIR__ . '/convert/Profile.dcm.yml')); - - $metadataDriver = new YamlDriver(__DIR__ . '/convert'); - $em = $this->_createEntityManager($metadataDriver); - $cmf = new DisconnectedClassMetadataFactory(); - $cmf->setEntityManager($em); - $metadata = $cmf->getAllMetadata(); - $profileClass = $cmf->getMetadataFor('Profile'); - $userClass = $cmf->getMetadataFor('User'); - - self::assertEquals(2, count($metadata)); - - self::assertEquals('User', $userClass->name); - self::assertEquals(5, count($userClass->getProperties())); - self::assertNotNull($userClass->getProperty('clob')); - self::assertNotNull($userClass->getProperty('theAlias')); - self::assertEquals('text', $userClass->getProperty('clob')->getTypeName()); - self::assertEquals('test_alias', $userClass->getProperty('theAlias')->getColumnName()); - - self::assertEquals('Profile', $profileClass->name); - self::assertEquals(4, count($profileClass->getProperties())); - self::assertEquals('Profile', $profileClass->associationMappings['User']['sourceEntity']); - self::assertEquals('User', $profileClass->associationMappings['User']['targetEntity']); - - self::assertEquals('username', $userClass->table['uniqueConstraints']['username']['columns'][0]); - } - - public function tearDown() - { - @unlink(__DIR__ . '/convert/User.dcm.yml'); - @unlink(__DIR__ . '/convert/Profile.dcm.yml'); - @rmdir(__DIR__ . '/convert'); - } -} diff --git a/tests/Doctrine/Tests/ORM/Tools/doctrine1schema/schema.yml b/tests/Doctrine/Tests/ORM/Tools/doctrine1schema/schema.yml deleted file mode 100644 index efa24c79169..00000000000 --- a/tests/Doctrine/Tests/ORM/Tools/doctrine1schema/schema.yml +++ /dev/null @@ -1,28 +0,0 @@ -User: - tableName: users - columns: - username: - type: string(255) - length: 100 - notnull: true - unique: true - password: - type: string(255) - clob: clob - test_alias as theAlias: - type: string(255) - indexes: - username: - fields: [username] - type: unique - -Profile: - columns: - first_name: string(255) - last_name: string(255) - user_id: integer - relations: - User: - onDelete: CASCADE - foreignType: one - type: one \ No newline at end of file diff --git a/tools/sandbox/doctrine.php b/tools/sandbox/doctrine.php index 04c99e327b9..0588a861240 100644 --- a/tools/sandbox/doctrine.php +++ b/tools/sandbox/doctrine.php @@ -29,7 +29,6 @@ new \Doctrine\ORM\Tools\Console\Command\SchemaTool\UpdateCommand(), new \Doctrine\ORM\Tools\Console\Command\SchemaTool\DropCommand(), new \Doctrine\ORM\Tools\Console\Command\EnsureProductionSettingsCommand(), - new \Doctrine\ORM\Tools\Console\Command\ConvertDoctrine1SchemaCommand(), new \Doctrine\ORM\Tools\Console\Command\GenerateRepositoriesCommand(), new \Doctrine\ORM\Tools\Console\Command\GenerateEntitiesCommand(), new \Doctrine\ORM\Tools\Console\Command\GenerateProxiesCommand(), From e98dd36131fea244fd6ecd13b426d93010d12c45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Cobucci?= Date: Tue, 12 Jul 2016 20:16:36 +0000 Subject: [PATCH 053/275] Removing YAML class metadata exporter and its references. --- .../Tools/Export/ClassMetadataExporter.php | 6 +- .../Tools/Export/Driver/AbstractExporter.php | 8 +- .../ORM/Tools/Export/Driver/YamlExporter.php | 256 ------------------ .../AbstractClassMetadataExporterTest.php | 9 - .../Export/YamlClassMetadataExporterTest.php | 25 -- ...ctrine.Tests.ORM.Tools.Export.User.dcm.yml | 77 ------ 6 files changed, 6 insertions(+), 375 deletions(-) delete mode 100644 lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php delete mode 100644 tests/Doctrine/Tests/ORM/Tools/Export/YamlClassMetadataExporterTest.php delete mode 100644 tests/Doctrine/Tests/ORM/Tools/Export/yaml/Doctrine.Tests.ORM.Tools.Export.User.dcm.yml diff --git a/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php b/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php index ab44263cdf4..34f1c55d654 100644 --- a/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php @@ -21,7 +21,7 @@ /** * Class used for converting your mapping information between the - * supported formats: yaml, xml, and php/annotation. + * supported formats: xml and php/annotation. * * @link www.doctrine-project.org * @since 2.0 @@ -34,8 +34,6 @@ class ClassMetadataExporter */ private static $_exporterDrivers = [ 'xml' => Driver\XmlExporter::class, - 'yaml' => Driver\YamlExporter::class, - 'yml' => Driver\YamlExporter::class, 'php' => Driver\PhpExporter::class, 'annotation' => Driver\AnnotationExporter::class ]; @@ -56,7 +54,7 @@ public static function registerExportDriver($name, $class) /** * Gets an exporter driver instance. * - * @param string $type The type to get (yml, xml, etc.). + * @param string $type The type to get (xml, etc.). * @param string|null $dest The directory where the exporter will export to. * * @return Driver\AbstractExporter diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php index c61d2ab406a..d2eb0408dd9 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php @@ -106,8 +106,8 @@ public function getExtension() * Sets the directory to output the mapping files to. * * [php] - * $exporter = new YamlExporter($metadata); - * $exporter->setOutputDir(__DIR__ . '/yaml'); + * $exporter = new XmlExporter($metadata); + * $exporter->setOutputDir(__DIR__ . '/xml'); * $exporter->export(); * * @param string $dir @@ -166,8 +166,8 @@ protected function _generateOutputPath(ClassMetadata $metadata) * Sets the directory to output the mapping files to. * * [php] - * $exporter = new YamlExporter($metadata, __DIR__ . '/yaml'); - * $exporter->setExtension('.yml'); + * $exporter = new XmlExporter($metadata, __DIR__ . '/xml'); + * $exporter->setExtension('.xml'); * $exporter->export(); * * @param string $extension diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php deleted file mode 100644 index e5e10ffefbb..00000000000 --- a/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php +++ /dev/null @@ -1,256 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Tools\Export\Driver; - -use Symfony\Component\Yaml\Yaml; -use Doctrine\ORM\Mapping\ClassMetadata; - -/** - * ClassMetadata exporter for Doctrine YAML mapping files. - * - * @link www.doctrine-project.org - * @since 2.0 - * @author Jonathan Wage - */ -class YamlExporter extends AbstractExporter -{ - /** - * @var string - */ - protected $_extension = '.dcm.yml'; - - /** - * {@inheritdoc} - */ - public function exportClassMetadata(ClassMetadata $metadata) - { - $array = []; - - if ($metadata->isMappedSuperclass) { - $array['type'] = 'mappedSuperclass'; - } else { - $array['type'] = 'entity'; - } - - $array['table'] = $metadata->table['name']; - - if (isset($metadata->table['schema'])) { - $array['schema'] = $metadata->table['schema']; - } - - $inheritanceType = $metadata->inheritanceType; - - if ($inheritanceType !== ClassMetadata::INHERITANCE_TYPE_NONE) { - $array['inheritanceType'] = $this->_getInheritanceTypeString($inheritanceType); - } - - if ($column = $metadata->discriminatorColumn) { - $mapping = array( - 'column' => $column->getColumnName(), - 'type' => $column->getTypeName(), - 'columnDefinition' => $column->getColumnDefinition(), - 'length' => $column->getLength(), - 'scale' => $column->getScale(), - 'precision' => $column->getPrecision(), - 'options' => $column->getOptions(), - 'id' => $column->isPrimaryKey(), - 'nullable' => $column->isNullable(), - 'unique' => $column->isUnique(), - ); - - $array['discriminatorColumn'] = $mapping; - } - - if ($map = $metadata->discriminatorMap) { - $array['discriminatorMap'] = $map; - } - - if ($metadata->changeTrackingPolicy !== ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT) { - $array['changeTrackingPolicy'] = $this->_getChangeTrackingPolicyString($metadata->changeTrackingPolicy); - } - - if (isset($metadata->table['indexes'])) { - $array['indexes'] = $metadata->table['indexes']; - } - - if ($metadata->customRepositoryClassName) { - $array['repositoryClass'] = $metadata->customRepositoryClassName; - } - - if (isset($metadata->table['uniqueConstraints'])) { - $array['uniqueConstraints'] = $metadata->table['uniqueConstraints']; - } - - if (isset($metadata->table['options'])) { - $array['options'] = $metadata->table['options']; - } - - $properties = $metadata->getProperties(); - $mappings = []; - $ids = []; - - foreach ($properties as $name => $property) { - $mapping = [ - 'column' => $property->getColumnName(), - 'type' => $property->getTypeName(), - 'columnDefinition' => $property->getColumnDefinition(), - 'length' => $property->getLength(), - 'scale' => $property->getScale(), - 'precision' => $property->getPrecision(), - 'options' => $property->getOptions(), - 'id' => $property->isPrimaryKey(), - 'nullable' => $property->isNullable(), - 'unique' => $property->isUnique(), - ]; - - if ($mapping['column'] === $name) { - unset($mapping['column']); - } - - $mapping = array_filter($mapping); - - if (isset($mapping['id']) && $mapping['id'] === true) { - $ids[$name] = $mapping; - - unset($mapping['id']); - unset($mappings[$name]); - - continue; - } - - $mappings[$name] = $mapping; - } - - if ( ! $metadata->isIdentifierComposite && $idGeneratorType = $this->_getIdGeneratorTypeString($metadata->generatorType)) { - $ids[$metadata->getSingleIdentifierFieldName()]['generator']['strategy'] = $idGeneratorType; - } - - $array['id'] = $ids; - - if ($mappings) { - if ( ! isset($array['fields'])) { - $array['fields'] = []; - } - - $array['fields'] = array_merge($array['fields'], $mappings); - } - - foreach ($metadata->associationMappings as $name => $associationMapping) { - $cascade = array_filter( - $associationMapping['cascade'], - function ($cascade) { - return in_array($cascade, ['remove', 'persist', 'refresh', 'merge', 'detach']); - } - ); - - $cascade = count($cascade) !== 5 - ? $cascade - : ['all']; - - $associationMappingArray = [ - 'targetEntity' => $associationMapping['targetEntity'], - 'cascade' => $cascade, - ]; - - if (isset($associationMapping['fetch'])) { - $associationMappingArray['fetch'] = $this->_getFetchModeString($associationMapping['fetch']); - } - - if (isset($mapping['id']) && $mapping['id'] === true) { - $array['id'][$name]['associationKey'] = true; - } - - if ($associationMapping['type'] & ClassMetadata::TO_ONE) { - $joinColumns = $associationMapping['isOwningSide'] ? $associationMapping['joinColumns'] : []; - $newJoinColumns = []; - - foreach ($joinColumns as $joinColumn) { - $newJoinColumns[$joinColumn['name']]['referencedColumnName'] = $joinColumn['referencedColumnName']; - - if (isset($joinColumn['onDelete'])) { - $newJoinColumns[$joinColumn['name']]['onDelete'] = $joinColumn['onDelete']; - } - } - - $oneToOneMappingArray = [ - 'mappedBy' => $associationMapping['mappedBy'], - 'inversedBy' => $associationMapping['inversedBy'], - 'joinColumns' => $newJoinColumns, - 'orphanRemoval' => $associationMapping['orphanRemoval'], - ]; - - if (count($joinColumns) > 1) { - $oneToOneMappingArray['joinColumns'] = $joinColumns; - } else { - $oneToOneMappingArray['joinColumn'] = reset($joinColumns); - } - - $associationMappingArray = array_filter(array_merge($associationMappingArray, $oneToOneMappingArray)); - - if ($associationMapping['type'] & ClassMetadata::ONE_TO_ONE) { - $array['oneToOne'][$name] = $associationMappingArray; - } else { - $array['manyToOne'][$name] = $associationMappingArray; - } - } elseif ($associationMapping['type'] == ClassMetadata::ONE_TO_MANY) { - $oneToManyMappingArray = [ - 'mappedBy' => $associationMapping['mappedBy'], - 'inversedBy' => $associationMapping['inversedBy'], - 'orphanRemoval' => $associationMapping['orphanRemoval'], - 'orderBy' => isset($associationMapping['orderBy']) ? $associationMapping['orderBy'] : null - ]; - - $associationMappingArray = array_merge($associationMappingArray, $oneToManyMappingArray); - $array['oneToMany'][$name] = $associationMappingArray; - } elseif ($associationMapping['type'] == ClassMetadata::MANY_TO_MANY) { - $manyToManyMappingArray = [ - 'mappedBy' => $associationMapping['mappedBy'], - 'inversedBy' => $associationMapping['inversedBy'], - 'joinTable' => isset($associationMapping['joinTable']) ? $associationMapping['joinTable'] : null, - 'orderBy' => isset($associationMapping['orderBy']) ? $associationMapping['orderBy'] : null - ]; - - $associationMappingArray = array_merge($associationMappingArray, $manyToManyMappingArray); - $array['manyToMany'][$name] = $associationMappingArray; - } - } - if (isset($metadata->lifecycleCallbacks)) { - $array['lifecycleCallbacks'] = $metadata->lifecycleCallbacks; - } - - return $this->yamlDump([$metadata->name => $array], 10); - } - - /** - * Dumps a PHP array to a YAML string. - * - * The yamlDump method, when supplied with an array, will do its best - * to convert the array into friendly YAML. - * - * @param array $array PHP array - * @param integer $inline [optional] The level where you switch to inline YAML - * - * @return string A YAML string representing the original PHP array - */ - protected function yamlDump($array, $inline = 2) - { - return Yaml::dump($array, $inline); - } -} diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index 837cc1de576..ff7d500a256 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -17,7 +17,6 @@ use Doctrine\Tests\Mocks\DriverMock; use Doctrine\Tests\Mocks\EntityManagerMock; use Doctrine\Tests\OrmTestCase; -use Symfony\Component\Yaml\Parser; /** * Test case for ClassMetadataExporter @@ -59,7 +58,6 @@ protected function _createMetadataDriver($type, $path) 'php' => PHPDriver::class, 'annotation' => AnnotationDriver::class, 'xml' => XmlDriver::class, - 'yaml' => YamlDriver::class, ]; self::assertArrayHasKey($type, $mappingDriver, "There is no metadata driver for the type '" . $type . "'."); @@ -364,13 +362,6 @@ public function testCascadeAllCollapsed() self::assertEquals(1, count($nodes)); self::assertEquals('cascade-all', $nodes[0]->getName()); - } else if ($type == 'yaml') { - $yaml = new Parser(); - $value = $yaml->parse(file_get_contents(__DIR__ . '/export/'.$type.'/Doctrine.Tests.ORM.Tools.Export.ExportedUser.dcm.yml')); - - self::assertTrue(isset($value[ExportedUser::class]['oneToMany']['interests']['cascade'])); - self::assertEquals(1, count($value[ExportedUser::class]['oneToMany']['interests']['cascade'])); - self::assertEquals('all', $value[ExportedUser::class]['oneToMany']['interests']['cascade'][0]); } else { $this->markTestSkipped('Test not available for '.$type.' driver'); } diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/YamlClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/YamlClassMetadataExporterTest.php deleted file mode 100644 index a47c396d2ce..00000000000 --- a/tests/Doctrine/Tests/ORM/Tools/Export/YamlClassMetadataExporterTest.php +++ /dev/null @@ -1,25 +0,0 @@ - - * @author Roman Borschel markTestSkipped('Please install Symfony YAML Component into the include path of your PHP installation.'); - } - - return 'yaml'; - } -} diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/yaml/Doctrine.Tests.ORM.Tools.Export.User.dcm.yml b/tests/Doctrine/Tests/ORM/Tools/Export/yaml/Doctrine.Tests.ORM.Tools.Export.User.dcm.yml deleted file mode 100644 index d52e94601da..00000000000 --- a/tests/Doctrine/Tests/ORM/Tools/Export/yaml/Doctrine.Tests.ORM.Tools.Export.User.dcm.yml +++ /dev/null @@ -1,77 +0,0 @@ -Doctrine\Tests\ORM\Tools\Export\User: - type: entity - table: cms_users - options: - engine: MyISAM - foo: { bar: baz } - id: - id: - type: integer - generator: - strategy: AUTO - fields: - name: - type: string - length: 50 - nullable: true - unique: true - email: - type: string - column: user_email - columnDefinition: CHAR(32) NOT NULL - age: - type: integer - options: - unsigned: true - oneToOne: - address: - targetEntity: Doctrine\Tests\ORM\Tools\Export\Address - joinColumn: - name: address_id - referencedColumnName: id - onDelete: CASCADE - cascade: [ persist ] - inversedBy: user - orphanRemoval: true - fetch: EAGER - cart: - targetEntity: Doctrine\Tests\ORM\Tools\Export\Cart - mappedBy: user - cascade: [ remove ] - manyToOne: - mainGroup: - targetEntity: Doctrine\Tests\ORM\Tools\Export\Group - oneToMany: - phonenumbers: - targetEntity: Doctrine\Tests\ORM\Tools\Export\Phonenumber - mappedBy: user - orderBy: - number: ASC - cascade: [ persist, merge ] - orphanRemoval: true - fetch: LAZY - interests: - targetEntity: Doctrine\Tests\ORM\Tools\Export\Interests - mappedBy: user - cascade: [ persist, merge, remove, refresh, detach ] - orphanRemoval: true - manyToMany: - groups: - targetEntity: Doctrine\Tests\ORM\Tools\Export\Group - fetch: EXTRA_LAZY - joinTable: - name: cms_users_groups - joinColumns: - user_id: - referencedColumnName: id - nullable: false - unique: false - inverseJoinColumns: - group_id: - referencedColumnName: id - columnDefinition: INT NULL - cascade: - - all - lifecycleCallbacks: - prePersist: [ doStuffOnPrePersist, doOtherStuffOnPrePersistToo ] - postPersist: [ doStuffOnPostPersist ] From dac83730c44c7bea04499fdfa375396e71a0edca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Cobucci?= Date: Tue, 12 Jul 2016 20:18:45 +0000 Subject: [PATCH 054/275] Removing YAML drivers and all its references. --- composer.json | 4 - .../Mapping/Driver/SimplifiedYamlDriver.php | 43 - .../ORM/Mapping/Driver/YamlDriver.php | 813 ------------------ lib/Doctrine/ORM/Tools/Setup.php | 25 +- .../ORM/Functional/Ticket/DDC3711Test.php | 29 - .../ORM/Mapping/Symfony/YamlDriverTest.php | 23 - .../ORM/Mapping/YamlMappingDriverTest.php | 91 -- ...ctrine.Tests.Models.CMS.CmsAddress.dcm.yml | 64 -- .../Doctrine.Tests.Models.CMS.CmsUser.dcm.yml | 157 ---- .../Doctrine.Tests.Models.Cache.City.dcm.yml | 36 - ...sts.Models.Company.CompanyContract.dcm.yml | 32 - ....Models.Company.CompanyFixContract.dcm.yml | 5 - ...Models.Company.CompanyFlexContract.dcm.yml | 7 - ...s.Company.CompanyFlexUltraContract.dcm.yml | 25 - ...Tests.Models.Company.CompanyPerson.dcm.yml | 74 -- ....DDC1476EntityWithDefaultFieldType.dcm.yml | 8 - ...els.DDC2825.ExplicitSchemaAndTable.dcm.yml | 8 - ....DDC2825.SchemaAndTableInTableName.dcm.yml | 7 - ....Tests.Models.DDC3579.DDC3579Admin.dcm.yml | 5 - ...e.Tests.Models.DDC3579.DDC3579User.dcm.yml | 19 - ...ests.Models.DDC3711.DDC3711EntityA.dcm.yml | 23 - ...ests.Models.DDC3711.DDC3711EntityB.dcm.yml | 8 - ....Models.DDC869.DDC869ChequePayment.dcm.yml | 5 - ...els.DDC869.DDC869CreditCardPayment.dcm.yml | 5 - ....Tests.Models.DDC869.DDC869Payment.dcm.yml | 12 - ...ne.Tests.Models.DDC889.DDC889Class.dcm.yml | 8 - ...e.Tests.Models.DDC889.DDC889Entity.dcm.yml | 2 - ...sts.Models.DDC889.DDC889SuperClass.dcm.yml | 5 - ...ne.Tests.Models.DDC964.DDC964Admin.dcm.yml | 17 - ...ne.Tests.Models.DDC964.DDC964Guest.dcm.yml | 13 - ...ine.Tests.Models.DDC964.DDC964User.dcm.yml | 35 - ....DirectoryTree.AbstractContentItem.dcm.yml | 14 - ...sts.Models.DirectoryTree.Directory.dcm.yml | 6 - ...ne.Tests.Models.DirectoryTree.File.dcm.yml | 6 - ....Models.Generic.SerializationModel.dcm.yml | 13 - .../Doctrine.Tests.ORM.Mapping.Animal.dcm.yml | 17 - ...Doctrine.Tests.ORM.Mapping.Comment.dcm.yml | 11 - ...ne.Tests.ORM.Mapping.DDC1170Entity.dcm.yml | 10 - ...ne.Tests.ORM.Mapping.DDC2069Entity.dcm.yml | 15 - ...ine.Tests.ORM.Mapping.DDC807Entity.dcm.yml | 13 - ...completeDiscriminatorColumnMapping.dcm.yml | 12 - ...EntityNoDiscriminatorColumnMapping.dcm.yml | 10 - .../Doctrine.Tests.ORM.Mapping.User.dcm.yml | 85 -- tests/Doctrine/Tests/ORM/Tools/SetupTest.php | 8 - tools/sandbox/yaml/Entities.Address.dcm.yml | 16 - tools/sandbox/yaml/Entities.User.dcm.yml | 18 - 46 files changed, 3 insertions(+), 1859 deletions(-) delete mode 100644 lib/Doctrine/ORM/Mapping/Driver/SimplifiedYamlDriver.php delete mode 100644 lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php delete mode 100644 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3711Test.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/Symfony/YamlDriverTest.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/YamlMappingDriverTest.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.CMS.CmsAddress.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.CMS.CmsUser.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Cache.City.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Company.CompanyContract.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Company.CompanyFixContract.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Company.CompanyFlexContract.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Company.CompanyFlexUltraContract.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Company.CompanyPerson.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3579.DDC3579Admin.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3579.DDC3579User.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3711.DDC3711EntityA.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3711.DDC3711EntityB.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC869.DDC869ChequePayment.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC869.DDC869Payment.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC889.DDC889Class.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC889.DDC889Entity.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC889.DDC889SuperClass.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC964.DDC964Admin.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC964.DDC964Guest.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC964.DDC964User.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.AbstractContentItem.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.Directory.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.File.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Generic.SerializationModel.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Animal.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Comment.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.DDC1170Entity.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.DDC2069Entity.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.DDC807Entity.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.SingleTableEntityIncompleteDiscriminatorColumnMapping.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.SingleTableEntityNoDiscriminatorColumnMapping.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.User.dcm.yml delete mode 100644 tools/sandbox/yaml/Entities.Address.dcm.yml delete mode 100644 tools/sandbox/yaml/Entities.User.dcm.yml diff --git a/composer.json b/composer.json index d632c89919d..d6fc98f60dc 100644 --- a/composer.json +++ b/composer.json @@ -25,12 +25,8 @@ "symfony/console": "~3.0|~4.0" }, "require-dev": { - "symfony/yaml": "~3.0|~4.0", "phpunit/phpunit": "^6.0" }, - "suggest": { - "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" - }, "autoload": { "psr-4": { "Doctrine\\ORM\\": "lib/Doctrine/ORM" } }, diff --git a/lib/Doctrine/ORM/Mapping/Driver/SimplifiedYamlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/SimplifiedYamlDriver.php deleted file mode 100644 index 8f38784f4e6..00000000000 --- a/lib/Doctrine/ORM/Mapping/Driver/SimplifiedYamlDriver.php +++ /dev/null @@ -1,43 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Driver; - -use Doctrine\Common\Persistence\Mapping\Driver\SymfonyFileLocator; - -/** - * YamlDriver that additionally looks for mapping information in a global file. - * - * @author Fabien Potencier - * @author Benjamin Eberlei - * @license MIT - */ -class SimplifiedYamlDriver extends YamlDriver -{ - const DEFAULT_FILE_EXTENSION = '.orm.yml'; - - /** - * {@inheritDoc} - */ - public function __construct($prefixes, $fileExtension = self::DEFAULT_FILE_EXTENSION) - { - $locator = new SymfonyFileLocator((array) $prefixes, $fileExtension); - parent::__construct($locator, $fileExtension); - } -} diff --git a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php deleted file mode 100644 index a59cec41034..00000000000 --- a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php +++ /dev/null @@ -1,813 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Driver; - -use Doctrine\Common\Persistence\Mapping\ClassMetadata; -use Doctrine\Common\Persistence\Mapping\Driver\FileDriver; -use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; -use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; -use Doctrine\ORM\Mapping\MappingException; -use Symfony\Component\Yaml\Yaml; - -/** - * The YamlDriver reads the mapping metadata from yaml schema files. - * - * @since 2.0 - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan H. Wage - * @author Roman Borschel - */ -class YamlDriver extends FileDriver -{ - const DEFAULT_FILE_EXTENSION = '.dcm.yml'; - - /** - * {@inheritDoc} - */ - public function __construct($locator, $fileExtension = self::DEFAULT_FILE_EXTENSION) - { - parent::__construct($locator, $fileExtension); - } - - /** - * {@inheritDoc} - */ - public function loadMetadataForClass($className, ClassMetadata $metadata) - { - /* @var \Doctrine\ORM\Mapping\ClassMetadata $metadata */ - $element = $this->getElement($className); - - if ($element['type'] == 'entity') { - if (isset($element['repositoryClass'])) { - $metadata->setCustomRepositoryClass($element['repositoryClass']); - } - if (isset($element['readOnly']) && $element['readOnly'] == true) { - $metadata->markReadOnly(); - } - } else if ($element['type'] == 'mappedSuperclass') { - $metadata->setCustomRepositoryClass( - isset($element['repositoryClass']) ? $element['repositoryClass'] : null - ); - $metadata->isMappedSuperclass = true; - } else if ($element['type'] == 'embeddable') { - $metadata->isEmbeddedClass = true; - } else { - throw MappingException::classIsNotAValidEntityOrMappedSuperClass($className); - } - - // Evaluate root level properties - $primaryTable = []; - - if (isset($element['table'])) { - $primaryTable['name'] = $element['table']; - } - - if (isset($element['schema'])) { - $primaryTable['schema'] = $element['schema']; - } - - // Evaluate second level cache - if (isset($element['cache'])) { - $metadata->enableCache($this->cacheToArray($element['cache'])); - } - - $metadata->setPrimaryTable($primaryTable); - - // Evaluate named queries - if (isset($element['namedQueries'])) { - foreach ($element['namedQueries'] as $name => $queryMapping) { - if (is_string($queryMapping)) { - $queryMapping = ['query' => $queryMapping]; - } - - if ( ! isset($queryMapping['name'])) { - $queryMapping['name'] = $name; - } - - $metadata->addNamedQuery($queryMapping); - } - } - - // Evaluate named native queries - if (isset($element['namedNativeQueries'])) { - foreach ($element['namedNativeQueries'] as $name => $mappingElement) { - if (!isset($mappingElement['name'])) { - $mappingElement['name'] = $name; - } - $metadata->addNamedNativeQuery( - [ - 'name' => $mappingElement['name'], - 'query' => isset($mappingElement['query']) ? $mappingElement['query'] : null, - 'resultClass' => isset($mappingElement['resultClass']) ? $mappingElement['resultClass'] : null, - 'resultSetMapping' => isset($mappingElement['resultSetMapping']) ? $mappingElement['resultSetMapping'] : null, - ] - ); - } - } - - // Evaluate sql result set mappings - if (isset($element['sqlResultSetMappings'])) { - foreach ($element['sqlResultSetMappings'] as $name => $resultSetMapping) { - if (!isset($resultSetMapping['name'])) { - $resultSetMapping['name'] = $name; - } - - $entities = []; - $columns = []; - if (isset($resultSetMapping['entityResult'])) { - foreach ($resultSetMapping['entityResult'] as $entityResultElement) { - $entityResult = [ - 'fields' => [], - 'entityClass' => isset($entityResultElement['entityClass']) ? $entityResultElement['entityClass'] : null, - 'discriminatorColumn' => isset($entityResultElement['discriminatorColumn']) ? $entityResultElement['discriminatorColumn'] : null, - ]; - - if (isset($entityResultElement['fieldResult'])) { - foreach ($entityResultElement['fieldResult'] as $fieldResultElement) { - $entityResult['fields'][] = [ - 'name' => isset($fieldResultElement['name']) ? $fieldResultElement['name'] : null, - 'column' => isset($fieldResultElement['column']) ? $fieldResultElement['column'] : null, - ]; - } - } - - $entities[] = $entityResult; - } - } - - - if (isset($resultSetMapping['columnResult'])) { - foreach ($resultSetMapping['columnResult'] as $columnResultAnnot) { - $columns[] = [ - 'name' => isset($columnResultAnnot['name']) ? $columnResultAnnot['name'] : null, - ]; - } - } - - $metadata->addSqlResultSetMapping( - [ - 'name' => $resultSetMapping['name'], - 'entities' => $entities, - 'columns' => $columns - ] - ); - } - } - - if (isset($element['inheritanceType'])) { - $metadata->setInheritanceType(constant('Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_' . strtoupper($element['inheritanceType']))); - - if ($metadata->inheritanceType !== \Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_NONE) { - $discrColumn = new DiscriminatorColumnMetadata(); - - $discrColumn->setTableName($metadata->getTableName()); - - // Evaluate discriminatorColumn - if (isset($element['discriminatorColumn'])) { - $mapping = $element['discriminatorColumn']; - - $discrColumn->setColumnName(isset($mapping['name']) ? (string) $mapping['name'] : 'dtype'); - $discrColumn->setType(Type::getType(isset($mapping['type']) ? (string) $mapping['type'] : 'string')); - $discrColumn->setLength(isset($mapping['length']) ? (string) $mapping['length'] : 255); - $discrColumn->setColumnDefinition(isset($mapping['columnDefinition']) ? (string) $mapping['columnDefinition'] : null); - } else { - $discrColumn->setColumnName('dtype'); - $discrColumn->setType(Type::getType('string')); - $discrColumn->setLength(255); - } - - $metadata->setDiscriminatorColumn($discrColumn); - - // Evaluate discriminatorMap - if (isset($element['discriminatorMap'])) { - $metadata->setDiscriminatorMap($element['discriminatorMap']); - } - } - } - - - // Evaluate changeTrackingPolicy - if (isset($element['changeTrackingPolicy'])) { - $metadata->setChangeTrackingPolicy(constant('Doctrine\ORM\Mapping\ClassMetadata::CHANGETRACKING_' - . strtoupper($element['changeTrackingPolicy']))); - } - - // Evaluate indexes - if (isset($element['indexes'])) { - foreach ($element['indexes'] as $name => $indexYml) { - if ( ! isset($indexYml['name'])) { - $indexYml['name'] = $name; - } - - if (is_string($indexYml['columns'])) { - $index = ['columns' => array_map('trim', explode(',', $indexYml['columns']))]; - } else { - $index = ['columns' => $indexYml['columns']]; - } - - if (isset($indexYml['flags'])) { - if (is_string($indexYml['flags'])) { - $index['flags'] = array_map('trim', explode(',', $indexYml['flags'])); - } else { - $index['flags'] = $indexYml['flags']; - } - } - - if (isset($indexYml['options'])) { - $index['options'] = $indexYml['options']; - } - - $metadata->table['indexes'][$indexYml['name']] = $index; - } - } - - // Evaluate uniqueConstraints - if (isset($element['uniqueConstraints'])) { - foreach ($element['uniqueConstraints'] as $name => $uniqueYml) { - if ( ! isset($uniqueYml['name'])) { - $uniqueYml['name'] = $name; - } - - if (is_string($uniqueYml['columns'])) { - $unique = ['columns' => array_map('trim', explode(',', $uniqueYml['columns']))]; - } else { - $unique = ['columns' => $uniqueYml['columns']]; - } - - if (isset($uniqueYml['options'])) { - $unique['options'] = $uniqueYml['options']; - } - - $metadata->table['uniqueConstraints'][$uniqueYml['name']] = $unique; - } - } - - if (isset($element['options'])) { - $metadata->table['options'] = $element['options']; - } - - $associationIds = []; - - if (isset($element['id'])) { - // Evaluate identifier settings - foreach ($element['id'] as $fieldName => $idElement) { - if (isset($idElement['associationKey']) && $idElement['associationKey']) { - $associationIds[$fieldName] = true; - - continue; - } - - $mapping = $this->columnToArray($idElement); - - $mapping['id'] = true; - - $metadata->addProperty($fieldName, Type::getType($mapping['type']), $mapping); - - if (isset($idElement['generator'])) { - $generatorStrategy = strtoupper($idElement['generator']['strategy']); - $generatorType = constant('Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_' . $generatorStrategy); - - $metadata->setIdGeneratorType($generatorType); - } - - // Check for SequenceGenerator/TableGenerator definition - if (isset($idElement['sequenceGenerator'])) { - $metadata->setSequenceGeneratorDefinition($idElement['sequenceGenerator']); - } else if (isset($idElement['customIdGenerator'])) { - $customGenerator = $idElement['customIdGenerator']; - $metadata->setCustomGeneratorDefinition( - [ - 'class' => (string) $customGenerator['class'] - ] - ); - } else if (isset($idElement['tableGenerator'])) { - throw MappingException::tableIdGeneratorNotImplemented($className); - } - } - } - - // Evaluate fields - if (isset($element['fields'])) { - foreach ($element['fields'] as $fieldName => $fieldMapping) { - $mapping = $this->columnToArray($fieldMapping); - - if (isset($mapping['id'])) { - if (isset($fieldMapping['generator']['strategy'])) { - $generatorStrategy = strtoupper($fieldMapping['generator']['strategy']); - $generatorType = constant('Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_' . $generatorStrategy); - - $metadata->setIdGeneratorType($generatorType); - } - } - - $property = $metadata->addProperty($fieldName, Type::getType($mapping['type']), $mapping); - - if (isset($mapping['version'])) { - $metadata->setVersionProperty($property); - } - } - } - - if (isset($element['embedded'])) { - foreach ($element['embedded'] as $name => $embeddedMapping) { - $mapping = [ - 'fieldName' => $name, - 'class' => $embeddedMapping['class'], - 'columnPrefix' => isset($embeddedMapping['columnPrefix']) ? $embeddedMapping['columnPrefix'] : null, - ]; - - $metadata->mapEmbedded($mapping); - } - } - - // Evaluate oneToOne relationships - if (isset($element['oneToOne'])) { - foreach ($element['oneToOne'] as $name => $oneToOneElement) { - $mapping = [ - 'fieldName' => $name, - 'targetEntity' => $oneToOneElement['targetEntity'] - ]; - - if (isset($associationIds[$mapping['fieldName']])) { - $mapping['id'] = true; - } - - if (isset($oneToOneElement['fetch'])) { - $mapping['fetch'] = constant('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . $oneToOneElement['fetch']); - } - - if (isset($oneToOneElement['mappedBy'])) { - $mapping['mappedBy'] = $oneToOneElement['mappedBy']; - } else { - if (isset($oneToOneElement['inversedBy'])) { - $mapping['inversedBy'] = $oneToOneElement['inversedBy']; - } - - $joinColumns = []; - - if (isset($oneToOneElement['joinColumn'])) { - $joinColumns[] = $this->joinColumnToArray($oneToOneElement['joinColumn']); - } else if (isset($oneToOneElement['joinColumns'])) { - foreach ($oneToOneElement['joinColumns'] as $joinColumnName => $joinColumnElement) { - if ( ! isset($joinColumnElement['name'])) { - $joinColumnElement['name'] = $joinColumnName; - } - - $joinColumns[] = $this->joinColumnToArray($joinColumnElement); - } - } - - $mapping['joinColumns'] = $joinColumns; - } - - if (isset($oneToOneElement['cascade'])) { - $mapping['cascade'] = $oneToOneElement['cascade']; - } - - if (isset($oneToOneElement['orphanRemoval'])) { - $mapping['orphanRemoval'] = (bool) $oneToOneElement['orphanRemoval']; - } - - // Evaluate second level cache - if (isset($oneToOneElement['cache'])) { - $mapping['cache'] = $metadata->getAssociationCacheDefaults($mapping['fieldName'], $this->cacheToArray($oneToOneElement['cache'])); - } - - $metadata->mapOneToOne($mapping); - } - } - - // Evaluate oneToMany relationships - if (isset($element['oneToMany'])) { - foreach ($element['oneToMany'] as $name => $oneToManyElement) { - $mapping = [ - 'fieldName' => $name, - 'targetEntity' => $oneToManyElement['targetEntity'], - 'mappedBy' => $oneToManyElement['mappedBy'] - ]; - - if (isset($oneToManyElement['fetch'])) { - $mapping['fetch'] = constant('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . $oneToManyElement['fetch']); - } - - if (isset($oneToManyElement['cascade'])) { - $mapping['cascade'] = $oneToManyElement['cascade']; - } - - if (isset($oneToManyElement['orphanRemoval'])) { - $mapping['orphanRemoval'] = (bool) $oneToManyElement['orphanRemoval']; - } - - if (isset($oneToManyElement['orderBy'])) { - $mapping['orderBy'] = $oneToManyElement['orderBy']; - } - - if (isset($oneToManyElement['indexBy'])) { - $mapping['indexBy'] = $oneToManyElement['indexBy']; - } - - - // Evaluate second level cache - if (isset($oneToManyElement['cache'])) { - $mapping['cache'] = $metadata->getAssociationCacheDefaults($mapping['fieldName'], $this->cacheToArray($oneToManyElement['cache'])); - } - - $metadata->mapOneToMany($mapping); - } - } - - // Evaluate manyToOne relationships - if (isset($element['manyToOne'])) { - foreach ($element['manyToOne'] as $name => $manyToOneElement) { - $mapping = [ - 'fieldName' => $name, - 'targetEntity' => $manyToOneElement['targetEntity'] - ]; - - if (isset($associationIds[$mapping['fieldName']])) { - $mapping['id'] = true; - } - - if (isset($manyToOneElement['fetch'])) { - $mapping['fetch'] = constant('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . $manyToOneElement['fetch']); - } - - if (isset($manyToOneElement['inversedBy'])) { - $mapping['inversedBy'] = $manyToOneElement['inversedBy']; - } - - $joinColumns = []; - - if (isset($manyToOneElement['joinColumn'])) { - $joinColumns[] = $this->joinColumnToArray($manyToOneElement['joinColumn']); - } else if (isset($manyToOneElement['joinColumns'])) { - foreach ($manyToOneElement['joinColumns'] as $joinColumnName => $joinColumnElement) { - if ( ! isset($joinColumnElement['name'])) { - $joinColumnElement['name'] = $joinColumnName; - } - - $joinColumns[] = $this->joinColumnToArray($joinColumnElement); - } - } - - $mapping['joinColumns'] = $joinColumns; - - if (isset($manyToOneElement['cascade'])) { - $mapping['cascade'] = $manyToOneElement['cascade']; - } - - // Evaluate second level cache - if (isset($manyToOneElement['cache'])) { - $mapping['cache'] = $metadata->getAssociationCacheDefaults($mapping['fieldName'], $this->cacheToArray($manyToOneElement['cache'])); - } - - $metadata->mapManyToOne($mapping); - } - } - - // Evaluate manyToMany relationships - if (isset($element['manyToMany'])) { - foreach ($element['manyToMany'] as $name => $manyToManyElement) { - $mapping = [ - 'fieldName' => $name, - 'targetEntity' => $manyToManyElement['targetEntity'] - ]; - - if (isset($manyToManyElement['fetch'])) { - $mapping['fetch'] = constant('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . $manyToManyElement['fetch']); - } - - if (isset($manyToManyElement['mappedBy'])) { - $mapping['mappedBy'] = $manyToManyElement['mappedBy']; - } else if (isset($manyToManyElement['joinTable'])) { - - $joinTableElement = $manyToManyElement['joinTable']; - $joinTable = [ - 'name' => $joinTableElement['name'] - ]; - - if (isset($joinTableElement['schema'])) { - $joinTable['schema'] = $joinTableElement['schema']; - } - - if (isset($joinTableElement['joinColumns'])) { - foreach ($joinTableElement['joinColumns'] as $joinColumnName => $joinColumnElement) { - if ( ! isset($joinColumnElement['name'])) { - $joinColumnElement['name'] = $joinColumnName; - } - $joinTable['joinColumns'][] = $this->joinColumnToArray($joinColumnElement); - } - } - - if (isset($joinTableElement['inverseJoinColumns'])) { - foreach ($joinTableElement['inverseJoinColumns'] as $joinColumnName => $joinColumnElement) { - if ( ! isset($joinColumnElement['name'])) { - $joinColumnElement['name'] = $joinColumnName; - } - $joinTable['inverseJoinColumns'][] = $this->joinColumnToArray($joinColumnElement); - } - } - - $mapping['joinTable'] = $joinTable; - } - - if (isset($manyToManyElement['inversedBy'])) { - $mapping['inversedBy'] = $manyToManyElement['inversedBy']; - } - - if (isset($manyToManyElement['cascade'])) { - $mapping['cascade'] = $manyToManyElement['cascade']; - } - - if (isset($manyToManyElement['orderBy'])) { - $mapping['orderBy'] = $manyToManyElement['orderBy']; - } - - if (isset($manyToManyElement['indexBy'])) { - $mapping['indexBy'] = $manyToManyElement['indexBy']; - } - - if (isset($manyToManyElement['orphanRemoval'])) { - $mapping['orphanRemoval'] = (bool) $manyToManyElement['orphanRemoval']; - } - - // Evaluate second level cache - if (isset($manyToManyElement['cache'])) { - $mapping['cache'] = $metadata->getAssociationCacheDefaults($mapping['fieldName'], $this->cacheToArray($manyToManyElement['cache'])); - } - - $metadata->mapManyToMany($mapping); - } - } - - // Evaluate associationOverride - if (isset($element['associationOverride']) && is_array($element['associationOverride'])) { - - foreach ($element['associationOverride'] as $fieldName => $associationOverrideElement) { - $override = []; - - // Check for joinColumn - if (isset($associationOverrideElement['joinColumn'])) { - $joinColumns = []; - foreach ($associationOverrideElement['joinColumn'] as $name => $joinColumnElement) { - if ( ! isset($joinColumnElement['name'])) { - $joinColumnElement['name'] = $name; - } - $joinColumns[] = $this->joinColumnToArray($joinColumnElement); - } - $override['joinColumns'] = $joinColumns; - } - - // Check for joinTable - if (isset($associationOverrideElement['joinTable'])) { - - $joinTableElement = $associationOverrideElement['joinTable']; - $joinTable = [ - 'name' => $joinTableElement['name'] - ]; - - if (isset($joinTableElement['schema'])) { - $joinTable['schema'] = $joinTableElement['schema']; - } - - foreach ($joinTableElement['joinColumns'] as $name => $joinColumnElement) { - if ( ! isset($joinColumnElement['name'])) { - $joinColumnElement['name'] = $name; - } - - $joinTable['joinColumns'][] = $this->joinColumnToArray($joinColumnElement); - } - - foreach ($joinTableElement['inverseJoinColumns'] as $name => $joinColumnElement) { - if ( ! isset($joinColumnElement['name'])) { - $joinColumnElement['name'] = $name; - } - - $joinTable['inverseJoinColumns'][] = $this->joinColumnToArray($joinColumnElement); - } - - $override['joinTable'] = $joinTable; - } - - // Check for inversedBy - if (isset($associationOverrideElement['inversedBy'])) { - $override['inversedBy'] = (string) $associationOverrideElement['inversedBy']; - } - - // Check for `fetch` - if (isset($associationOverrideElement['fetch'])) { - $override['fetch'] = constant(Metadata::class . '::FETCH_' . $associationOverrideElement['fetch']); - } - - $metadata->setAssociationOverride($fieldName, $override); - } - } - - // Evaluate associationOverride - if (isset($element['attributeOverride']) && is_array($element['attributeOverride'])) { - - foreach ($element['attributeOverride'] as $fieldName => $attributeOverrideElement) { - $mapping = $this->columnToArray($attributeOverrideElement); - - $metadata->setAttributeOverride($fieldName, $mapping); - } - } - - // Evaluate lifeCycleCallbacks - if (isset($element['lifecycleCallbacks'])) { - foreach ($element['lifecycleCallbacks'] as $type => $methods) { - foreach ($methods as $method) { - $metadata->addLifecycleCallback($method, constant('Doctrine\ORM\Events::' . $type)); - } - } - } - - // Evaluate entityListeners - if (isset($element['entityListeners'])) { - foreach ($element['entityListeners'] as $className => $entityListener) { - // Evaluate the listener using naming convention. - if (empty($entityListener)) { - EntityListenerBuilder::bindEntityListener($metadata, $className); - - continue; - } - - foreach ($entityListener as $eventName => $callbackElement) { - foreach ($callbackElement as $methodName) { - $metadata->addEntityListener($eventName, $className, $methodName); - } - } - } - } - } - - /** - * Constructs a joinColumn mapping array based on the information - * found in the given join column element. - * - * @param array $joinColumnElement The array join column element. - * - * @return array The mapping array. - */ - private function joinColumnToArray($joinColumnElement) - { - $joinColumn = []; - if (isset($joinColumnElement['referencedColumnName'])) { - $joinColumn['referencedColumnName'] = (string) $joinColumnElement['referencedColumnName']; - } - - if (isset($joinColumnElement['name'])) { - $joinColumn['name'] = (string) $joinColumnElement['name']; - } - - if (isset($joinColumnElement['fieldName'])) { - $joinColumn['fieldName'] = (string) $joinColumnElement['fieldName']; - } - - if (isset($joinColumnElement['unique'])) { - $joinColumn['unique'] = (bool) $joinColumnElement['unique']; - } - - if (isset($joinColumnElement['nullable'])) { - $joinColumn['nullable'] = (bool) $joinColumnElement['nullable']; - } - - if (isset($joinColumnElement['onDelete'])) { - $joinColumn['onDelete'] = $joinColumnElement['onDelete']; - } - - if (isset($joinColumnElement['columnDefinition'])) { - $joinColumn['columnDefinition'] = $joinColumnElement['columnDefinition']; - } - - return $joinColumn; - } - - /** - * Parses the given column as array. - * - * @param string $fieldName - * @param array $column - * - * @return array - */ - private function columnToArray($column) - { - $mapping = [ - 'type' => 'string', - ]; - - if (isset($column['type'])) { - $params = explode('(', $column['type']); - - if (isset($params[1])) { - $column['length'] = (integer) substr($params[1], 0, strlen($params[1]) - 1); - } - - $mapping['type'] = trim($params[0]); - } - - if (isset($column['length'])) { - $mapping['length'] = (integer) $column['length']; - } - - if (isset($column['column'])) { - $mapping['columnName'] = $column['column']; - } - - if (isset($column['length'])) { - $mapping['length'] = $column['length']; - } - - if (isset($column['precision'])) { - $mapping['precision'] = $column['precision']; - } - - if (isset($column['scale'])) { - $mapping['scale'] = $column['scale']; - } - - if (isset($column['unique'])) { - $mapping['unique'] = (bool) $column['unique']; - } - - if (isset($column['options'])) { - $mapping['options'] = $column['options']; - } - - if (isset($column['id']) && $column['id']) { - $mapping['id'] = $column['id']; - } - - if (isset($column['nullable'])) { - $mapping['nullable'] = $column['nullable']; - } - - if (isset($column['version']) && $column['version']) { - $mapping['version'] = $column['version']; - } - - if (isset($column['columnDefinition'])) { - $mapping['columnDefinition'] = $column['columnDefinition']; - } - - return $mapping; - } - - /** - * Parse / Normalize the cache configuration - * - * @param array $cacheMapping - * - * @return array - */ - private function cacheToArray($cacheMapping) - { - $region = isset($cacheMapping['region']) ? (string) $cacheMapping['region'] : null; - $usage = isset($cacheMapping['usage']) ? strtoupper($cacheMapping['usage']) : null; - - if ($usage && ! defined('Doctrine\ORM\Mapping\ClassMetadata::CACHE_USAGE_' . $usage)) { - throw new \InvalidArgumentException(sprintf('Invalid cache usage "%s"', $usage)); - } - - if ($usage) { - $usage = constant('Doctrine\ORM\Mapping\ClassMetadata::CACHE_USAGE_' . $usage); - } - - return [ - 'usage' => $usage, - 'region' => $region, - ]; - } - - /** - * {@inheritDoc} - */ - protected function loadMappingFile($file) - { - if (defined(Yaml::class . '::PARSE_KEYS_AS_STRINGS')) { - return Yaml::parse(file_get_contents($file), Yaml::PARSE_KEYS_AS_STRINGS); - } - - return Yaml::parse(file_get_contents($file)); - } -} diff --git a/lib/Doctrine/ORM/Tools/Setup.php b/lib/Doctrine/ORM/Tools/Setup.php index 666d627a4b4..8b1fda77dbd 100644 --- a/lib/Doctrine/ORM/Tools/Setup.php +++ b/lib/Doctrine/ORM/Tools/Setup.php @@ -19,13 +19,12 @@ namespace Doctrine\ORM\Tools; -use Doctrine\Common\ClassLoader; +use Doctrine\Common\Cache\ArrayCache; use Doctrine\Common\Cache\Cache; use Doctrine\Common\Cache\CacheProvider; -use Doctrine\Common\Cache\ArrayCache; +use Doctrine\Common\ClassLoader; use Doctrine\ORM\Configuration; use Doctrine\ORM\Mapping\Driver\XmlDriver; -use Doctrine\ORM\Mapping\Driver\YamlDriver; /** * Convenience class for setting up Doctrine from different installations and configurations. @@ -51,7 +50,7 @@ public static function registerAutoloadDirectory($directory) $loader = new ClassLoader("Doctrine", $directory); $loader->register(); - $loader = new ClassLoader("Symfony\Component", $directory . "/Doctrine"); + $loader = new ClassLoader('Symfony\Component', $directory . "/Doctrine"); $loader->register(); } @@ -92,24 +91,6 @@ public static function createXMLMetadataConfiguration(array $paths, $isDevMode = return $config; } - /** - * Creates a configuration with a yaml metadata driver. - * - * @param array $paths - * @param boolean $isDevMode - * @param string $proxyDir - * @param Cache $cache - * - * @return Configuration - */ - public static function createYAMLMetadataConfiguration(array $paths, $isDevMode = false, $proxyDir = null, Cache $cache = null) - { - $config = self::createConfiguration($isDevMode, $proxyDir, $cache); - $config->setMetadataDriverImpl(new YamlDriver($paths)); - - return $config; - } - /** * Creates a configuration without a metadata driver. * diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3711Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3711Test.php deleted file mode 100644 index c72edd1401c..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3711Test.php +++ /dev/null @@ -1,29 +0,0 @@ - - */ -class DDC3711Test extends YamlMappingDriverTest -{ - public function testCompositeKeyForJoinTableInManyToManyCreation() - { - $yamlDriver = $this->_loadDriver(); - - $em = $this->_getTestEntityManager(); - $em->getConfiguration()->setMetadataDriverImpl($yamlDriver); - $factory = new \Doctrine\ORM\Mapping\ClassMetadataFactory(); - $factory->setEntityManager($em); - - $metadataA = new ClassMetadata(DDC3711EntityA::class); - $entityA = $factory->getMetadataFor(DDC3711EntityA::class); - - self::assertEquals(['link_a_id1' => "id1", 'link_a_id2' => "id2"], $entityA->associationMappings['entityB']['relationToSourceKeyColumns']); - self::assertEquals(['link_b_id1' => "id1", 'link_b_id2' => "id2"], $entityA->associationMappings['entityB']['relationToTargetKeyColumns']); - } -} diff --git a/tests/Doctrine/Tests/ORM/Mapping/Symfony/YamlDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/Symfony/YamlDriverTest.php deleted file mode 100644 index f9c8a839b04..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/Symfony/YamlDriverTest.php +++ /dev/null @@ -1,23 +0,0 @@ -markTestSkipped('Please install Symfony YAML Component into the include path of your PHP installation.'); - } - - return new YamlDriver(__DIR__ . DIRECTORY_SEPARATOR . 'yaml'); - } - - /** - * @group DDC-671 - * - * Entities for this test are in AbstractMappingDriverTest - */ - public function testJoinTablesWithMappedSuperclassForYamlDriver() - { - $yamlDriver = $this->_loadDriver(); - $yamlDriver->getLocator()->addPaths([__DIR__ . DIRECTORY_SEPARATOR . 'yaml']); - - $em = $this->_getTestEntityManager(); - $em->getConfiguration()->setMetadataDriverImpl($yamlDriver); - - $factory = new ClassMetadataFactory(); - $factory->setEntityManager($em); - - $classPage = $factory->getMetadataFor(File::class); - - self::assertEquals(File::class, $classPage->associationMappings['parentDirectory']['sourceEntity']); - - $classDirectory = $factory->getMetadataFor(Directory::class); - - self::assertEquals(Directory::class, $classDirectory->associationMappings['parentDirectory']['sourceEntity']); - } - - /** - * @group DDC-1468 - * - * @expectedException Doctrine\Common\Persistence\Mapping\MappingException - * @expectedExceptionMessage Invalid mapping file 'Doctrine.Tests.Models.Generic.SerializationModel.dcm.yml' for class 'Doctrine\Tests\Models\Generic\SerializationModel'. - */ - public function testInvalidMappingFileException() - { - $this->createClassMetadata(SerializationModel::class); - } - - /** - * @group DDC-2069 - */ - public function testSpacesShouldBeIgnoredWhenUseExplode() - { - $metadata = $this->createClassMetadata(DDC2069Entity::class); - $unique = $metadata->table['uniqueConstraints'][0]['columns']; - $indexes = $metadata->table['indexes'][0]['columns']; - - self::assertEquals('name', $unique[0]); - self::assertEquals('value', $unique[1]); - - self::assertEquals('value', $indexes[0]); - self::assertEquals('name', $indexes[1]); - - $nameField = $metadata->getProperty('name'); - $valueField = $metadata->getProperty('value'); - - self::assertEquals(255, $nameField->getLength()); - self::assertEquals(255, $valueField->getLength()); - } - -} - -class DDC2069Entity -{ - public $id; - - public $name; - - public $value; -} diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.CMS.CmsAddress.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.CMS.CmsAddress.dcm.yml deleted file mode 100644 index 712f089da99..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.CMS.CmsAddress.dcm.yml +++ /dev/null @@ -1,64 +0,0 @@ -Doctrine\Tests\Models\CMS\CmsAddress: - type: entity - table: cms_address - entityListeners: - CmsAddressListener: ~ - namedNativeQueries: - find-all: - resultSetMapping: mapping-find-all - query: SELECT id, country, city FROM cms_addresses - find-by-id: - name: find-by-id - resultClass: CmsAddress - query: SELECT * FROM cms_addresses WHERE id = ? - count: - name: count - resultSetMapping: mapping-count - query: SELECT COUNT(*) AS count FROM cms_addresses - - sqlResultSetMappings: - mapping-find-all: - entityResult: - address: - entityClass: CmsAddress - fieldResult: - 0: - name: id - column: id - 1: - name: city - column: city - 2: - name: country - column: country - mapping-without-fields: - name: mapping-without-fields - entityResult: - address: - entityClass: CmsAddress - mapping-count: - name: mapping-count - columnResult: - count: - name: count - id: - id: - type: integer - generator: - strategy: AUTO - fields: - country: - type: string - length: 50 - city: - type: string - length: 50 - zip: - type: string - length: 50 - oneToOne: - user: - targetEntity: CmsUser - inversedBy: address - joinColumn: - referencedColumnName: id diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.CMS.CmsUser.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.CMS.CmsUser.dcm.yml deleted file mode 100644 index 329e3d061dc..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.CMS.CmsUser.dcm.yml +++ /dev/null @@ -1,157 +0,0 @@ -Doctrine\Tests\Models\CMS\CmsUser: - type: entity - table: cms_users - namedQueries: - all: SELECT u FROM __CLASS__ u - namedNativeQueries: - fetchIdAndUsernameWithResultClass: - resultClass: CmsUser - query: SELECT id, username FROM cms_users WHERE username = ? - fetchAllColumns: - name: fetchAllColumns - resultClass: CmsUser - query: SELECT * FROM cms_users WHERE username = ? - fetchJoinedAddress: - name: fetchJoinedAddress - resultSetMapping: mappingJoinedAddress - query: SELECT u.id, u.name, u.status, a.id AS a_id, a.country, a.zip, a.city FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ? - fetchJoinedPhonenumber: - name: fetchJoinedPhonenumber - resultSetMapping: mappingJoinedPhonenumber - query: SELECT id, name, status, phonenumber AS number FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ? - fetchUserPhonenumberCount: - name: fetchUserPhonenumberCount - resultSetMapping: mappingUserPhonenumberCount - query: SELECT id, name, status, COUNT(phonenumber) AS numphones FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username IN (?) GROUP BY id, name, status, username ORDER BY username - fetchMultipleJoinsEntityResults: - name: fetchMultipleJoinsEntityResults - resultSetMapping: mappingMultipleJoinsEntityResults - query: SELECT u.id AS u_id, u.name AS u_name, u.status AS u_status, a.id AS a_id, a.zip AS a_zip, a.country AS a_country, COUNT(p.phonenumber) AS numphones FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id INNER JOIN cms_phonenumbers p ON u.id = p.user_id GROUP BY u.id, u.name, u.status, u.username, a.id, a.zip, a.country ORDER BY u.username - - sqlResultSetMappings: - mappingJoinedAddress: - entityResult: - 0: - entityClass: __CLASS__ - fieldResult: - 0: - name: id - 1: - name: name - 2: - name: status - 3: - name: address.zip - 4: - name: address.city - 5: - name: address.country - 6: - name: address.id - column: a_id - mappingJoinedPhonenumber: - name: mappingJoinedPhonenumber - entityResult: - user: - entityClass: CmsUser - fieldResult: - 0: - name: id - 1: - name: name - 2: - name: status - 3: - name: phonenumbers.phonenumber - column: number - mappingUserPhonenumberCount: - name: mappingUserPhonenumberCount - columnResult: - 0: - name: numphones - entityResult: - user_0: - entityClass: CmsUser - fieldResult: - 0: - name: id - 1: - name: name - 2: - name: status - mappingMultipleJoinsEntityResults: - name: mappingMultipleJoinsEntityResults - columnResult: - 0: - name: numphones - entityResult: - 0: - entityClass: __CLASS__ - fieldResult: - 0: - name: id - column: u_id - 1: - name: name - column: u_name - 2: - name: status - column: u_status - 1: - entityClass: CmsAddress - fieldResult: - 0: - name: id - column: a_id - 1: - name: zip - column: a_zip - 2: - name: country - column: a_country - id: - id: - type: integer - generator: - strategy: AUTO - fields: - name: - type: string - length: 255 - username: - type: string - length: 255 - unique: true - status: - type: string - length: 50 - unique: true - oneToOne: - address: - targetEntity: CmsAddress - orphanRemoval: true - inversedBy: user - joinColumn: - name: address_id - referencedColumnName: id - cascade: [ persist ] - email: - targetEntity: CmsEmail - orphanRemoval: true - inversedBy: user - joinColumn: - nullable: true - referencedColumnName: id - cascade: [ persist ] - manyToMany: - groups: - targetEntity: CmsGroup - joinTable: - name: cms_users_groups - joinColumns: - user_id: - referencedColumnName: id - inverseJoinColumns: - group_id: - referencedColumnName: id - cascade: [ persist , detach, merge] diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Cache.City.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Cache.City.dcm.yml deleted file mode 100644 index 05286e0df56..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Cache.City.dcm.yml +++ /dev/null @@ -1,36 +0,0 @@ -Doctrine\Tests\Models\Cache\City: - type: entity - table: cache_city - cache: - usage : READ_ONLY - id: - id: - type: integer - id: true - generator: - strategy: IDENTITY - fields: - name: - type: string - manyToOne: - state: - targetEntity: Doctrine\Tests\Models\Cache\State - inversedBy: cities - joinColumns: - state_id: - referencedColumnName: id - cache: - usage : READ_ONLY - manyToMany: - travels: - targetEntity: Doctrine\Tests\Models\Cache\Travel - mappedBy: visitedCities - - oneToMany: - attractions: - targetEntity: Doctrine\Tests\Models\Cache\Attraction - mappedBy: city - cache: - usage : READ_ONLY - orderBy: - name: ASC \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Company.CompanyContract.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Company.CompanyContract.dcm.yml deleted file mode 100644 index 03b9d3bedeb..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Company.CompanyContract.dcm.yml +++ /dev/null @@ -1,32 +0,0 @@ -Doctrine\Tests\Models\Company\CompanyContract: - type: entity - table: company_contracts - inheritanceType: SINGLE_TABLE - discriminatorMap: - fix: CompanyFixContract - flexible: CompanyFlexContract - flexultra: CompanyFlexUltraContract - - entityListeners: - CompanyContractListener: - - preFlush: [preFlushHandler] - postLoad: [postLoadHandler] - - postPersist: [postPersistHandler] - prePersist: [prePersistHandler] - - postUpdate: [postUpdateHandler] - preUpdate: [preUpdateHandler] - - postRemove: [postRemoveHandler] - preRemove: [preRemoveHandler] - - id: - id: - type: integer - generator: - strategy: AUTO - fields: - completed: - type: boolean \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Company.CompanyFixContract.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Company.CompanyFixContract.dcm.yml deleted file mode 100644 index 83d0c75be19..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Company.CompanyFixContract.dcm.yml +++ /dev/null @@ -1,5 +0,0 @@ -Doctrine\Tests\Models\Company\CompanyFixContract: - type: entity - fields: - fixPrice: - type: integer \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Company.CompanyFlexContract.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Company.CompanyFlexContract.dcm.yml deleted file mode 100644 index ef1d2630633..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Company.CompanyFlexContract.dcm.yml +++ /dev/null @@ -1,7 +0,0 @@ -Doctrine\Tests\Models\Company\CompanyFlexContract: - type: entity - fields: - hoursWorked: - type: integer - pricePerHour: - type: integer \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Company.CompanyFlexUltraContract.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Company.CompanyFlexUltraContract.dcm.yml deleted file mode 100644 index 26ce8f3d5fd..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Company.CompanyFlexUltraContract.dcm.yml +++ /dev/null @@ -1,25 +0,0 @@ -Doctrine\Tests\Models\Company\CompanyFlexUltraContract: - type: entity - - entityListeners: - CompanyContractListener: - - preFlush: [preFlushHandler] - postLoad: [postLoadHandler] - - postPersist: [postPersistHandler] - prePersist: [prePersistHandler] - - postUpdate: [postUpdateHandler] - preUpdate: [preUpdateHandler] - - postRemove: [postRemoveHandler] - preRemove: [preRemoveHandler] - - CompanyFlexUltraContractListener: - - prePersist: [prePersistHandler1, prePersistHandler2] - - fields: - maxPrice: - type: integer \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Company.CompanyPerson.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Company.CompanyPerson.dcm.yml deleted file mode 100644 index 28eec43e391..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Company.CompanyPerson.dcm.yml +++ /dev/null @@ -1,74 +0,0 @@ -Doctrine\Tests\Models\Company\CompanyPerson: - type: entity - table: company_persons - inheritanceType: JOINED - discriminatorMap: - person: CompanyPerson - manager: CompanyManager - employee: CompanyEmployee - namedNativeQueries: - fetchAllWithResultClass: - resultClass: __CLASS__ - query: SELECT id, name, discr FROM company_persons ORDER BY name - fetchAllWithSqlResultSetMapping: - name: fetchAllWithSqlResultSetMapping - resultSetMapping: mappingFetchAll - query: SELECT id, name, discr AS discriminator FROM company_persons ORDER BY name - - sqlResultSetMappings: - mappingFetchAll: - entityResult: - 0: - entityClass: __CLASS__ - discriminatorColumn: discriminator - fieldResult: - 0: - name: id - 1: - name: name - id: - id: - type: integer - generator: - strategy: AUTO - fields: - name: - type: string - length: 255 - username: - type: string - length: 255 - unique: true - status: - type: string - length: 50 - unique: true - oneToOne: - address: - targetEntity: CmsAddress - orphanRemoval: true - inversedBy: user - joinColumn: - name: address_id - referencedColumnName: id - cascade: [ persist ] - email: - targetEntity: CmsEmail - orphanRemoval: true - inversedBy: user - joinColumn: - nullable: true - referencedColumnName: id - cascade: [ persist ] - manyToMany: - groups: - targetEntity: CmsGroup - joinTable: - name: cms_users_groups - joinColumns: - user_id: - referencedColumnName: id - inverseJoinColumns: - group_id: - referencedColumnName: id - cascade: [ persist , detach, merge] diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.dcm.yml deleted file mode 100644 index 7dfc6476af0..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.dcm.yml +++ /dev/null @@ -1,8 +0,0 @@ -Doctrine\Tests\Models\DDC1476\DDC1476EntityWithDefaultFieldType: - type: entity - id: - id: - generator: - strategy: NONE - fields: - name: ~ diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.dcm.yml deleted file mode 100644 index f28adbb61f4..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.dcm.yml +++ /dev/null @@ -1,8 +0,0 @@ -Doctrine\Tests\Models\DDC2825\ExplicitSchemaAndTable: - type: entity - table: explicit_table - schema: explicit_schema - id: - id: - generator: - strategy: AUTO diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.dcm.yml deleted file mode 100644 index bf072816cd7..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.dcm.yml +++ /dev/null @@ -1,7 +0,0 @@ -Doctrine\Tests\Models\DDC2825\SchemaAndTableInTableName: - type: entity - table: implicit_schema.implicit_table - id: - id: - generator: - strategy: AUTO diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3579.DDC3579Admin.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3579.DDC3579Admin.dcm.yml deleted file mode 100644 index 7420b14e66d..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3579.DDC3579Admin.dcm.yml +++ /dev/null @@ -1,5 +0,0 @@ -Doctrine\Tests\Models\DDC3579\DDC3579Admin: - type: entity - associationOverride: - groups: - inversedBy: admins diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3579.DDC3579User.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3579.DDC3579User.dcm.yml deleted file mode 100644 index 63d095035f3..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3579.DDC3579User.dcm.yml +++ /dev/null @@ -1,19 +0,0 @@ -Doctrine\Tests\Models\DDC3579\DDC3579User: - type: mappedSuperclass - id: - id: - type: integer - column: user_id - length: 150 - generator: - strategy: AUTO - fields: - name: - type: string - column: user_name - length: 250 - nullable: true - unique: false - manyToMany: - groups: - targetEntity: DDC3579Group diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3711.DDC3711EntityA.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3711.DDC3711EntityA.dcm.yml deleted file mode 100644 index 45da9ba84b7..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3711.DDC3711EntityA.dcm.yml +++ /dev/null @@ -1,23 +0,0 @@ -Doctrine\Tests\Models\DDC3711\DDC3711EntityA: - type: entity - table: ddc3711.entityA - id: - id1: - type: integer - id2: - type: integer - manyToMany: - entityB: - targetEntity: Doctrine\Tests\Models\DDC3711\DDC3711EntityB - joinTable: - name: link - joinColumns: - link_a_id1: - referencedColumnName: id1 - link_a_id2: - referencedColumnName: id2 - inverseJoinColumns: - link_b_id1: - referencedColumnName: id1 - link_b_id2: - referencedColumnName: id2 \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3711.DDC3711EntityB.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3711.DDC3711EntityB.dcm.yml deleted file mode 100644 index 0b412ae5422..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC3711.DDC3711EntityB.dcm.yml +++ /dev/null @@ -1,8 +0,0 @@ -Doctrine\Tests\Models\DDC3711\DDC3711EntityB: - type: entity - table: ddc3711.entityB - id: - id1: - type: integer - id2: - type: integer diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC869.DDC869ChequePayment.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC869.DDC869ChequePayment.dcm.yml deleted file mode 100644 index 94f26981756..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC869.DDC869ChequePayment.dcm.yml +++ /dev/null @@ -1,5 +0,0 @@ -Doctrine\Tests\Models\DDC869\DDC869ChequePayment: - type: entity - fields: - serialNumber: - type: string \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.dcm.yml deleted file mode 100644 index 153a99fa7e7..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.dcm.yml +++ /dev/null @@ -1,5 +0,0 @@ -Doctrine\Tests\Models\DDC869\DDC869CreditCardPayment: - type: entity - fields: - creditCardNumber: - type: string \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC869.DDC869Payment.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC869.DDC869Payment.dcm.yml deleted file mode 100644 index b776664e1d1..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC869.DDC869Payment.dcm.yml +++ /dev/null @@ -1,12 +0,0 @@ -Doctrine\Tests\Models\DDC869\DDC869Payment: - type: mappedSuperclass - repositoryClass : Doctrine\Tests\Models\DDC869\DDC869PaymentRepository - id: - id: - type: integer - unsigned: true - generator: - strategy: AUTO - fields: - value: - type: float \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC889.DDC889Class.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC889.DDC889Class.dcm.yml deleted file mode 100644 index 567e5d585c5..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC889.DDC889Class.dcm.yml +++ /dev/null @@ -1,8 +0,0 @@ -Doctrine\Tests\Models\DDC889\DDC889Class: - type: class - id: - id: - type: integer - unsigned: true - generator: - strategy: AUTO \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC889.DDC889Entity.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC889.DDC889Entity.dcm.yml deleted file mode 100644 index aa932db214c..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC889.DDC889Entity.dcm.yml +++ /dev/null @@ -1,2 +0,0 @@ -Doctrine\Tests\Models\DDC889\DDC889Entity: - type: entity \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC889.DDC889SuperClass.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC889.DDC889SuperClass.dcm.yml deleted file mode 100644 index 7974d552d0c..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC889.DDC889SuperClass.dcm.yml +++ /dev/null @@ -1,5 +0,0 @@ -Doctrine\Tests\Models\DDC889\DDC889SuperClass: - type: mappedSuperclass - fields: - name: - type: string \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC964.DDC964Admin.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC964.DDC964Admin.dcm.yml deleted file mode 100644 index 0b8051d9644..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC964.DDC964Admin.dcm.yml +++ /dev/null @@ -1,17 +0,0 @@ -Doctrine\Tests\Models\DDC964\DDC964Admin: - type: entity - associationOverride: - address: - joinColumn: - adminaddress_id: - name: adminaddress_id - referencedColumnName: id - groups: - joinTable: - name: ddc964_users_admingroups - joinColumns: - adminuser_id: - referencedColumnName: id - inverseJoinColumns: - admingroup_id: - referencedColumnName: id \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC964.DDC964Guest.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC964.DDC964Guest.dcm.yml deleted file mode 100644 index ec7936f4a74..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC964.DDC964Guest.dcm.yml +++ /dev/null @@ -1,13 +0,0 @@ -Doctrine\Tests\Models\DDC964\DDC964Guest: - type: entity - attributeOverride: - id: - column: guest_id - type: integer - length: 140 - name: - column: guest_name - type: string - length: 240 - nullable: false - unique: true \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC964.DDC964User.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC964.DDC964User.dcm.yml deleted file mode 100644 index 3a9ebbf9d7e..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC964.DDC964User.dcm.yml +++ /dev/null @@ -1,35 +0,0 @@ -Doctrine\Tests\Models\DDC964\DDC964User: - type: mappedSuperclass - id: - id: - type: integer - column: user_id - length: 150 - generator: - strategy: AUTO - fields: - name: - type: string - column: user_name - length: 250 - nullable: true - unique: false - manyToOne: - address: - targetEntity: DDC964Address - joinColumn: - name: address_id - referencedColumnName: id - cascade: [ persist, merge ] - manyToMany: - groups: - targetEntity: DDC964Group - joinTable: - name: ddc964_users_groups - joinColumns: - user_id: - referencedColumnName: id - inverseJoinColumns: - group_id: - referencedColumnName: id - cascade: [ persist, merge, detach ] \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.AbstractContentItem.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.AbstractContentItem.dcm.yml deleted file mode 100644 index 9c573a561d2..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.AbstractContentItem.dcm.yml +++ /dev/null @@ -1,14 +0,0 @@ -Doctrine\Tests\Models\DirectoryTree\AbstractContentItem: - type: mappedSuperclass - id: - id: - type: integer - unsigned: true - generator: - strategy: AUTO - fields: - name: - type: string - manyToOne: - parentDirectory: - targetEntity: Doctrine\Tests\Models\DirectoryTree\Directory diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.Directory.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.Directory.dcm.yml deleted file mode 100644 index d2b93d4901c..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.Directory.dcm.yml +++ /dev/null @@ -1,6 +0,0 @@ -Doctrine\Tests\Models\DirectoryTree\Directory: - type: entity - fields: - path: - type: string - length: 255 diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.File.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.File.dcm.yml deleted file mode 100644 index cbc8edfec4f..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DirectoryTree.File.dcm.yml +++ /dev/null @@ -1,6 +0,0 @@ -Doctrine\Tests\Models\DirectoryTree\File: - type: entity - fields: - extension: - type: string - length: 10 diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Generic.SerializationModel.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Generic.SerializationModel.dcm.yml deleted file mode 100644 index 64f74b55f9b..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.Generic.SerializationModel.dcm.yml +++ /dev/null @@ -1,13 +0,0 @@ -\stdClass: - type: entity - id: - id: - type: integer - unsigned: true - generator: - strategy: AUTO - fields: - array: - type: array - object: - type: object \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Animal.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Animal.dcm.yml deleted file mode 100644 index 7bdad824037..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Animal.dcm.yml +++ /dev/null @@ -1,17 +0,0 @@ -Doctrine\Tests\ORM\Mapping\Animal: - type: entity - inheritanceType: SINGLE_TABLE - discriminatorMap: - cat: Cat - dog: Dog - discriminatorColumn: - type: string - name: discr - length: 32 - id: - id: - type: integer - generator: - strategy: CUSTOM - customIdGenerator: - class: stdClass diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Comment.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Comment.dcm.yml deleted file mode 100644 index f37bfdcc67b..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.Comment.dcm.yml +++ /dev/null @@ -1,11 +0,0 @@ -Doctrine\Tests\ORM\Mapping\Comment: - type: entity - fields: - content: - type: text - indexes: - 0: - columns: content - flags: fulltext - options: - where: "content IS NOT NULL" diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.DDC1170Entity.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.DDC1170Entity.dcm.yml deleted file mode 100644 index 8b2ac518bc9..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.DDC1170Entity.dcm.yml +++ /dev/null @@ -1,10 +0,0 @@ -Doctrine\Tests\ORM\Mapping\DDC1170Entity: - type: entity - id: - id: - columnDefinition: INT unsigned NOT NULL - generator: - strategy: NONE - fields: - value: - columnDefinition: VARCHAR(255) NOT NULL \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.DDC2069Entity.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.DDC2069Entity.dcm.yml deleted file mode 100644 index 5b16c12bc94..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.DDC2069Entity.dcm.yml +++ /dev/null @@ -1,15 +0,0 @@ -Doctrine\Tests\ORM\Mapping\DDC2069Entity: - type: entity - id: - id: ~ - fields: - name: - type: string ( 255 ) - value: - type: string ( 255 ) - uniqueConstraints: - 0: - columns: name, value - indexes: - 0: - columns: value, name diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.DDC807Entity.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.DDC807Entity.dcm.yml deleted file mode 100644 index 20db3c328e9..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.DDC807Entity.dcm.yml +++ /dev/null @@ -1,13 +0,0 @@ -Doctrine\Tests\ORM\Mapping\DDC807Entity: - type: entity - inheritanceType: SINGLE_TABLE - discriminatorMap: - ONE: DDC807SubClasse1 - TWO: DDC807SubClasse2 - discriminatorColumn: - name: dtype - columnDefinition: ENUM('ONE','TWO') - id: - id: - generator: - strategy: NONE \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.SingleTableEntityIncompleteDiscriminatorColumnMapping.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.SingleTableEntityIncompleteDiscriminatorColumnMapping.dcm.yml deleted file mode 100644 index 8c71ef7091f..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.SingleTableEntityIncompleteDiscriminatorColumnMapping.dcm.yml +++ /dev/null @@ -1,12 +0,0 @@ -Doctrine\Tests\ORM\Mapping\SingleTableEntityIncompleteDiscriminatorColumnMapping: - type: entity - inheritanceType: SINGLE_TABLE - discriminatorMap: - ONE: SingleTableEntityIncompleteDiscriminatorColumnMappingSub1 - TWO: SingleTableEntityIncompleteDiscriminatorColumnMappingSub2 - discriminatorColumn: - name: dtype - id: - id: - generator: - strategy: NONE \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.SingleTableEntityNoDiscriminatorColumnMapping.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.SingleTableEntityNoDiscriminatorColumnMapping.dcm.yml deleted file mode 100644 index 5cab520d1c4..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.SingleTableEntityNoDiscriminatorColumnMapping.dcm.yml +++ /dev/null @@ -1,10 +0,0 @@ -Doctrine\Tests\ORM\Mapping\SingleTableEntityNoDiscriminatorColumnMapping: - type: entity - inheritanceType: SINGLE_TABLE - discriminatorMap: - ONE: SingleTableEntityNoDiscriminatorColumnMappingSub1 - TWO: SingleTableEntityNoDiscriminatorColumnMappingSub2 - id: - id: - generator: - strategy: NONE \ No newline at end of file diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.User.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.User.dcm.yml deleted file mode 100644 index e3a32ce76be..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.User.dcm.yml +++ /dev/null @@ -1,85 +0,0 @@ -Doctrine\Tests\ORM\Mapping\User: - type: entity - table: cms_users - options: - foo: bar - baz: - key: val - namedQueries: - all: SELECT u FROM __CLASS__ u - id: - id: - type: integer - generator: - strategy: AUTO - sequenceGenerator: - sequenceName: tablename_seq - allocationSize: 100 - initialValue: 1 - options: - foo: bar - unsigned: false - fields: - name: - type: string - length: 50 - nullable: true - unique: true - options: - foo: bar - baz: - key: val - fixed: false - email: - type: string - column: user_email - columnDefinition: CHAR(32) NOT NULL - version: - type: integer - version: true - oneToOne: - address: - targetEntity: Address - inversedBy: user - joinColumn: - name: address_id - referencedColumnName: id - onDelete: CASCADE - cascade: [ remove ] - oneToMany: - phonenumbers: - targetEntity: Phonenumber - orphanRemoval: true - mappedBy: user - orderBy: - number: ASC - cascade: [ persist ] - manyToMany: - groups: - targetEntity: Group - joinTable: - name: cms_users_groups - joinColumns: - user_id: - referencedColumnName: id - nullable: false - unique: false - inverseJoinColumns: - group_id: - referencedColumnName: id - columnDefinition: INT NULL - cascade: - - all - lifecycleCallbacks: - prePersist: [ doStuffOnPrePersist, doOtherStuffOnPrePersistToo ] - postPersist: [ doStuffOnPostPersist ] - uniqueConstraints: - search_idx: - columns: name,user_email - options: - where: name IS NOT NULL - indexes: - name_idx: - columns: name - 0: - columns: user_email diff --git a/tests/Doctrine/Tests/ORM/Tools/SetupTest.php b/tests/Doctrine/Tests/ORM/Tools/SetupTest.php index 3d4edb580d7..401733f5533 100644 --- a/tests/Doctrine/Tests/ORM/Tools/SetupTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/SetupTest.php @@ -68,14 +68,6 @@ public function testXMLConfiguration() self::assertInstanceOf(XmlDriver::class, $config->getMetadataDriverImpl()); } - public function testYAMLConfiguration() - { - $config = Setup::createYAMLMetadataConfiguration([], true); - - self::assertInstanceOf(Configuration::class, $config); - self::assertInstanceOf(YamlDriver::class, $config->getMetadataDriverImpl()); - } - /** * @group DDC-1350 */ diff --git a/tools/sandbox/yaml/Entities.Address.dcm.yml b/tools/sandbox/yaml/Entities.Address.dcm.yml deleted file mode 100644 index 140e90224b3..00000000000 --- a/tools/sandbox/yaml/Entities.Address.dcm.yml +++ /dev/null @@ -1,16 +0,0 @@ -Entities\Address: - type: entity - table: addresses - id: - id: - type: integer - generator: - strategy: AUTO - fields: - street: - type: string - length: 255 - oneToOne: - user: - targetEntity: User - mappedBy: address \ No newline at end of file diff --git a/tools/sandbox/yaml/Entities.User.dcm.yml b/tools/sandbox/yaml/Entities.User.dcm.yml deleted file mode 100644 index a93d48f9f75..00000000000 --- a/tools/sandbox/yaml/Entities.User.dcm.yml +++ /dev/null @@ -1,18 +0,0 @@ -Entities\User: - type: entity - table: users - id: - id: - type: integer - generator: - strategy: AUTO - fields: - name: - type: string - length: 50 - oneToOne: - address: - targetEntity: Address - joinColumn: - name: address_id - referencedColumnName: id From b3c115fd9edef313b2e29da6231fa22186692dbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Cobucci?= Date: Tue, 12 Jul 2016 20:36:15 +0000 Subject: [PATCH 055/275] Removing YAML mappings on docblocks and messages. --- lib/Doctrine/ORM/Events.php | 2 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 8 ++++---- .../ORM/Tools/Console/Command/ConvertMappingCommand.php | 2 +- .../ORM/Tools/Console/Command/GenerateEntitiesCommand.php | 7 +++---- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/lib/Doctrine/ORM/Events.php b/lib/Doctrine/ORM/Events.php index e16b47a4214..35746d396b4 100644 --- a/lib/Doctrine/ORM/Events.php +++ b/lib/Doctrine/ORM/Events.php @@ -114,7 +114,7 @@ private function __construct() /** * The loadClassMetadata event occurs after the mapping metadata for a class - * has been loaded from a mapping source (annotations/xml/yaml). + * has been loaded from a mapping source (annotations/xml). * * @var string */ diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index eb30097a4f7..d1ff06769ad 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -821,10 +821,10 @@ private function _getCascadeMappings(SimpleXMLElement $cascadeElement) /* @var $action SimpleXmlElement */ foreach ($cascadeElement->children() as $action) { // According to the JPA specifications, XML uses "cascade-persist" - // instead of "persist". Here, both variations - // are supported because both YAML and Annotation use "persist" - // and we want to make sure that this driver doesn't need to know - // anything about the supported cascading actions + // instead of "persist". Here, both variations are supported + // because Annotation use "persist" and we want to make sure that + // this driver doesn't need to know anything about the supported + // cascading actions $cascades[] = str_replace('cascade-', '', $action->getName()); } diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ConvertMappingCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ConvertMappingCommand.php index 798dbe72858..86d975d00a4 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ConvertMappingCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ConvertMappingCommand.php @@ -98,7 +98,7 @@ protected function configure() entities with foreign keys as primary keys and many of the semantical operations on associations such as cascade. -Hint: There is no need to convert YAML or XML mapping files to annotations +Hint: There is no need to convert XML mapping files to annotations every time you make changes. All mapping drivers are first class citizens in Doctrine 2 and can be used as runtime mapping for the ORM. diff --git a/lib/Doctrine/ORM/Tools/Console/Command/GenerateEntitiesCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/GenerateEntitiesCommand.php index 080bfc97ace..1fff4a4d451 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/GenerateEntitiesCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/GenerateEntitiesCommand.php @@ -103,10 +103,9 @@ protected function configure() the entity-generator and code your entities manually. Important: Even if you specified Inheritance options in your -XML or YAML Mapping files the generator cannot generate the base and -child classes for you correctly, because it doesn't know which -class is supposed to extend which. You have to adjust the entity -code manually for inheritance to work! +XML Mapping files the generator cannot generate the base and child classes +for you correctly, because it doesn't know which class is supposed to extend +which. You have to adjust the entity code manually for inheritance to work! EOT ); } From b92c7a9a3e1529ef2fcbc5669bc3212f03399cfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Cobucci?= Date: Tue, 12 Jul 2016 20:41:08 +0000 Subject: [PATCH 056/275] Adding YAML removal as BC break. --- UPGRADE.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/UPGRADE.md b/UPGRADE.md index 6d0efa63b21..70b303c14fc 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -1,5 +1,10 @@ # Upgrade to 3.0 +## BC Break: Removed ``YAML`` mapping drivers. + +If your code relies on ``YamlDriver`` or ``SimpleYamlDriver``, you should change to +annotation or XML drivers instead. + ## BC Break: Changed methods in ``ClassMetadata`` * ``ClassMetadata::addInheritedProperty`` From f91a62b4ac228e970ad3125ba8ba921a6281558d Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 13 Jul 2016 09:11:02 +0200 Subject: [PATCH 057/275] s/should/**MUST** as per @afoeder's review Ref: https://github.com/doctrine/doctrine2/pull/5932/files/0f76b969cd79301a75c48bdbde89b118255cf7e3..8f5ebd93c1b802a4a89d0f4dff3d1d62cad67684#r70573803 --- UPGRADE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UPGRADE.md b/UPGRADE.md index 70b303c14fc..e2e5182eea3 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -2,7 +2,7 @@ ## BC Break: Removed ``YAML`` mapping drivers. -If your code relies on ``YamlDriver`` or ``SimpleYamlDriver``, you should change to +If your code relies on ``YamlDriver`` or ``SimpleYamlDriver``, you **MUST** change to annotation or XML drivers instead. ## BC Break: Changed methods in ``ClassMetadata`` From 7ff9857494c55b0c3d20804751c355dd3037d26e Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 20 Jul 2016 18:41:16 +0000 Subject: [PATCH 058/275] More work around JoinColumns. Should start AssociationMetadata changes by next commit --- .../ORM/Mapping/AnsiQuoteStrategy.php | 86 ---------- .../ORM/Mapping/AssociationMetadata.php | 157 ++++++++++++++++++ .../Mapping/Builder/AssociationBuilder.php | 2 +- .../Builder/ManyToManyAssociationBuilder.php | 2 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 16 +- .../ORM/Mapping/Driver/AnnotationDriver.php | 2 +- .../ORM/Mapping/Driver/DatabaseDriver.php | 3 + lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 9 +- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 1 - .../ORM/Mapping/JoinColumnMetadata.php | 80 +++++++++ .../ORM/Mapping/JoinTableMetadata.php | 24 +++ .../Mapping/ManyToManyAssociationMetadata.php | 24 +++ .../Mapping/ManyToOneAssociationMetadata.php | 24 +++ .../Mapping/OneToManyAssociationMetadata.php | 24 +++ .../Mapping/OneToOneAssociationMetadata.php | 24 +++ lib/Doctrine/ORM/Mapping/Property.php | 10 -- .../ORM/Mapping/ToManyAssociationMetadata.php | 25 +++ .../ORM/Mapping/ToOneAssociationMetadata.php | 46 +++++ .../Collection/ManyToManyPersister.php | 78 ++++----- .../Entity/BasicEntityPersister.php | 12 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 2 +- .../ORM/Tools/Export/Driver/XmlExporter.php | 6 +- .../Doctrine/Tests/Models/CMS/CmsAddress.php | 6 +- .../Tests/Models/DDC964/DDC964Admin.php | 11 +- .../Tests/Models/DDC964/DDC964User.php | 26 +-- .../PersistentCollectionCriteriaTest.php | 2 - .../ORM/Functional/Ticket/DDC142Test.php | 2 - .../ORM/Functional/Ticket/DDC1695Test.php | 2 - .../ORM/Functional/Ticket/DDC1719Test.php | 2 - .../ORM/Functional/Ticket/DDC1843Test.php | 2 - .../ORM/Functional/Ticket/DDC1885Test.php | 2 - .../ORM/Functional/Ticket/DDC2825Test.php | 2 - .../ORM/Functional/Ticket/DDC832Test.php | 2 - .../ORM/Hydration/ResultSetMappingTest.php | 21 +-- .../ORM/Mapping/AbstractMappingDriverTest.php | 31 ++-- .../ORM/Mapping/ClassMetadataBuilderTest.php | 10 -- .../ORM/Mapping/ClassMetadataFactoryTest.php | 2 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 84 ++++++---- .../Doctrine.Tests.Models.CMS.CmsAddress.php | 4 +- .../php/Doctrine.Tests.Models.Cache.City.php | 1 + ...ctrine.Tests.Models.DDC964.DDC964Admin.php | 42 +++-- ...octrine.Tests.Models.DDC964.DDC964User.php | 40 ++--- .../php/Doctrine.Tests.ORM.Mapping.User.php | 6 +- .../Doctrine.Tests.ORM.Tools.Export.User.php | 1 + .../Tools/ResolveTargetEntityListenerTest.php | 4 +- .../Doctrine/Tests/OrmFunctionalTestCase.php | 3 - tests/Doctrine/Tests/OrmTestCase.php | 8 - 47 files changed, 647 insertions(+), 326 deletions(-) delete mode 100644 lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php create mode 100644 lib/Doctrine/ORM/Mapping/AssociationMetadata.php create mode 100644 lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php create mode 100644 lib/Doctrine/ORM/Mapping/JoinTableMetadata.php create mode 100644 lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php create mode 100644 lib/Doctrine/ORM/Mapping/ManyToOneAssociationMetadata.php create mode 100644 lib/Doctrine/ORM/Mapping/OneToManyAssociationMetadata.php create mode 100644 lib/Doctrine/ORM/Mapping/OneToOneAssociationMetadata.php create mode 100644 lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php create mode 100644 lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php diff --git a/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php b/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php deleted file mode 100644 index 90f5881d6c6..00000000000 --- a/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php +++ /dev/null @@ -1,86 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping; - -use Doctrine\DBAL\Platforms\AbstractPlatform; - -/** - * ANSI compliant quote strategy, this strategy does not apply any quote. - * To use this strategy all mapped tables and columns should be ANSI compliant. - * - * @since 2.5 - * @author Fabio B. Silva - */ -class AnsiQuoteStrategy implements QuoteStrategy -{ - /** - * {@inheritdoc} - */ - public function getTableName(ClassMetadata $class, AbstractPlatform $platform) - { - return $class->getTableName(); - } - - /** - * {@inheritdoc} - */ - public function getJoinTableName(array $association, ClassMetadata $class, AbstractPlatform $platform) - { - return $association['joinTable']['name']; - } - - /** - * {@inheritdoc} - */ - public function getIdentifierColumnNames(ClassMetadata $class, AbstractPlatform $platform) - { - $columnNames = array(); - - foreach ($class->identifier as $fieldName) { - if (($property = $class->getProperty($fieldName)) !== null) { - $columnNames[] = $property->getColumnName(); - - continue; - } - - // Association defined as Id field - $joinColumns = $class->associationMappings[$fieldName]['joinColumns']; - $assocColumnNames = array_map( - function ($joinColumn) - { - return $joinColumn['name']; - }, - $joinColumns - ); - - $columnNames = array_merge($columnNames, $assocColumnNames); - } - - return $columnNames; - } - - /** - * {@inheritdoc} - */ - public function getColumnAlias($columnName, $counter, AbstractPlatform $platform, ClassMetadata $class = null) - { - return $platform->getSQLResultCasing($columnName . '_' . $counter); - } -} diff --git a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php new file mode 100644 index 00000000000..143e8cf60a4 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php @@ -0,0 +1,157 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +use Doctrine\Common\Persistence\Mapping\ReflectionService; + +class AssociationMetadata implements Property +{ + /** + * @var ClassMetadata + */ + private $declaringClass; + + /** + * @var \ReflectionProperty + */ + private $reflection; + + /** + * @var string + */ + private $name; + + /** + * @var string + */ + private $targetEntity; + + /** + * @var array + */ + private $cascade = []; + + /** + * {@inheritdoc} + */ + public function getDeclaringClass() + { + return $this->declaringClass; + } + + /** + * @param ClassMetadata $declaringClass + */ + public function setDeclaringClass(ClassMetadata $declaringClass) + { + $this->declaringClass = $declaringClass; + } + + /** + * {@inheritdoc} + */ + public function getName() + { + return $this->name; + } + + /** + * {@inheritdoc} + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * @return string + */ + public function getTargetEntity() + { + return $this->targetEntity; + } + + /** + * @param string $targetEntity + */ + public function setTargetEntity($targetEntity) + { + $this->targetEntity = $targetEntity; + } + + /** + * @return array + */ + public function getCascade() + { + return $this->cascade; + } + + /** + * @param array $cascade + */ + public function setCascade(array $cascade) + { + $this->cascade = $cascade; + } + + /** + * {@inheritdoc} + */ + public function setValue($object, $value) + { + $this->reflection->setValue($object, $value); + } + + /** + * {@inheritdoc} + */ + public function getValue($object) + { + return $this->reflection->getValue($object); + } + + /** + * {@inheritdoc} + */ + public function isAssociation() + { + return true; + } + + /** + * {@inheritdoc} + */ + public function isField() + { + return false; + } + + /** + * {@inheritdoc} + */ + public function wakeupReflection(ReflectionService $reflectionService) + { + $this->reflection = $reflectionService->getAccessibleProperty( + $this->getDeclaringClass()->name, + $this->name + ); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php index 7f4fddc96ba..570b97aa024 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php @@ -188,7 +188,7 @@ public function addJoinColumn($columnName, $referencedColumnName, $nullable = tr 'referencedColumnName' => $referencedColumnName, 'nullable' => $nullable, 'unique' => $unique, - 'onDelete' => $onDelete, + 'onDelete' => $onDelete ? strtoupper($onDelete) : $onDelete, 'columnDefinition' => $columnDef, ]; diff --git a/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php index a71859dfd38..0600e5a691b 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php @@ -70,7 +70,7 @@ public function addInverseJoinColumn($columnName, $referencedColumnName, $nullab 'referencedColumnName' => $referencedColumnName, 'nullable' => $nullable, 'unique' => $unique, - 'onDelete' => $onDelete, + 'onDelete' => $onDelete ? strtoupper($onDelete) : $onDelete, 'columnDefinition' => $columnDef, ]; diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 3c1c4926c95..cee25a23b65 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1385,7 +1385,8 @@ protected function validateAndCompleteOneToOneMapping(array $mapping) $mapping['joinColumns'] = [ [ 'name' => $this->namingStrategy->joinColumnName($mapping['fieldName'], $this->name), - 'referencedColumnName' => $this->namingStrategy->referenceColumnName() + 'referencedColumnName' => $this->namingStrategy->referenceColumnName(), + 'onDelete' => null, ] ]; } @@ -1521,8 +1522,6 @@ protected function validateAndCompleteManyToManyMapping(array $mapping) ]; } - $mapping['joinTableColumns'] = []; - foreach ($mapping['joinTable']['joinColumns'] as &$joinColumn) { if (empty($joinColumn['name'])) { $joinColumn['name'] = $this->namingStrategy->joinKeyColumnName($mapping['sourceEntity'], $joinColumn['referencedColumnName']); @@ -1532,12 +1531,7 @@ protected function validateAndCompleteManyToManyMapping(array $mapping) $joinColumn['referencedColumnName'] = $this->namingStrategy->referenceColumnName(); } - if (isset($joinColumn['onDelete']) && strtolower($joinColumn['onDelete']) == 'cascade') { - $mapping['isOnDeleteCascade'] = true; - } - $mapping['relationToSourceKeyColumns'][$joinColumn['name']] = $joinColumn['referencedColumnName']; - $mapping['joinTableColumns'][] = $joinColumn['name']; } foreach ($mapping['joinTable']['inverseJoinColumns'] as &$inverseJoinColumn) { @@ -1549,12 +1543,7 @@ protected function validateAndCompleteManyToManyMapping(array $mapping) $inverseJoinColumn['referencedColumnName'] = $this->namingStrategy->referenceColumnName(); } - if (isset($inverseJoinColumn['onDelete']) && strtolower($inverseJoinColumn['onDelete']) == 'cascade') { - $mapping['isOnDeleteCascade'] = true; - } - $mapping['relationToTargetKeyColumns'][$inverseJoinColumn['name']] = $inverseJoinColumn['referencedColumnName']; - $mapping['joinTableColumns'][] = $inverseJoinColumn['name']; } } @@ -1915,7 +1904,6 @@ public function setAssociationOverride($fieldName, array $overrideMapping) } $mapping['joinColumnFieldNames'] = null; - $mapping['joinTableColumns'] = null; $mapping['sourceToTargetKeyColumns'] = null; $mapping['relationToSourceKeyColumns'] = null; $mapping['relationToTargetKeyColumns'] = null; diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index e84232ed1f0..b8930b2f59d 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -605,7 +605,7 @@ private function joinColumnToArray(Annotation\JoinColumn $joinColumn) 'name' => $joinColumn->name, 'unique' => $joinColumn->unique, 'nullable' => $joinColumn->nullable, - 'onDelete' => $joinColumn->onDelete, + 'onDelete' => $joinColumn->onDelete ? strtoupper($joinColumn->onDelete) : $joinColumn->onDelete, 'columnDefinition' => $joinColumn->columnDefinition, 'referencedColumnName' => $joinColumn->referencedColumnName, ]; diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index b824e5cd314..58a65795277 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -231,6 +231,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $associationMapping['joinTable']['joinColumns'][] = [ 'name' => $cols[$i], 'referencedColumnName' => $fkCols[$i], + 'onDelete' => null, ]; } @@ -241,6 +242,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $associationMapping['joinTable']['inverseJoinColumns'][] = [ 'name' => $cols[$i], 'referencedColumnName' => $fkCols[$i], + 'onDelete' => null, ]; } } else { @@ -465,6 +467,7 @@ private function buildToOneAssociationMappings(ClassMetadata $metadata) $associationMapping['joinColumns'][] = [ 'name' => $fkColumns[$i], 'referencedColumnName' => $fkForeignColumns[$i], + 'onDelete' => null, ]; } diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index d1ff06769ad..2125c221795 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -697,7 +697,10 @@ private function joinColumnToArray(SimpleXMLElement $joinColumnElement) { $joinColumn = [ 'name' => (string) $joinColumnElement['name'], - 'referencedColumnName' => (string) $joinColumnElement['referenced-column-name'] + 'referencedColumnName' => (string) $joinColumnElement['referenced-column-name'], + 'onDelete' => isset($joinColumnElement['on-delete']) + ? strtoupper((string) $joinColumnElement['on-delete']) + : null, ]; if (isset($joinColumnElement['unique'])) { @@ -708,10 +711,6 @@ private function joinColumnToArray(SimpleXMLElement $joinColumnElement) $joinColumn['nullable'] = $this->evaluateBoolean($joinColumnElement['nullable']); } - if (isset($joinColumnElement['on-delete'])) { - $joinColumn['onDelete'] = (string) $joinColumnElement['on-delete']; - } - if (isset($joinColumnElement['column-definition'])) { $joinColumn['columnDefinition'] = (string) $joinColumnElement['column-definition']; } diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index b850d5f3361..9bca3bd75d1 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -20,7 +20,6 @@ namespace Doctrine\ORM\Mapping; use Doctrine\Common\Persistence\Mapping\ReflectionService; -use Doctrine\DBAL\Types\Type; class FieldMetadata extends ColumnMetadata implements Property { diff --git a/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php b/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php new file mode 100644 index 00000000000..e2a4ce1c6eb --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php @@ -0,0 +1,80 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +class JoinColumnMetadata extends ColumnMetadata +{ + /** @var string */ + private $referencedColumnName; + + /** @var string */ + private $aliasedName; + + /** @var string */ + private $onDelete; + + /** + * @return string + */ + public function getReferencedColumnName() + { + return $this->referencedColumnName; + } + + /** + * @param string $referencedColumnName + */ + public function setReferencedColumnName($referencedColumnName) + { + $this->referencedColumnName = $referencedColumnName; + } + + /** + * @return string + */ + public function getAliasedName() + { + return $this->aliasedName; + } + + /** + * @param string $aliasedName + */ + public function setAliasedName($aliasedName) + { + $this->aliasedName = $aliasedName; + } + + /** + * @return string + */ + public function getOnDelete() + { + return $this->onDelete; + } + + /** + * @param string $onDelete + */ + public function setOnDelete($onDelete) + { + $this->onDelete = $onDelete; + } +} diff --git a/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php b/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php new file mode 100644 index 00000000000..1d11c2c746d --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php @@ -0,0 +1,24 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +class JoinTableMetadata +{ +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php new file mode 100644 index 00000000000..15997d605c1 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php @@ -0,0 +1,24 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +class ManyToManyAssociationMetadata extends ToManyAssociationMetadata +{ +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/ManyToOneAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ManyToOneAssociationMetadata.php new file mode 100644 index 00000000000..ce49b6e1231 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/ManyToOneAssociationMetadata.php @@ -0,0 +1,24 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +class ManyToOneAssociationMetadata extends ToOneAssociationMetadata +{ +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/OneToManyAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/OneToManyAssociationMetadata.php new file mode 100644 index 00000000000..17c5d86cb32 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/OneToManyAssociationMetadata.php @@ -0,0 +1,24 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +class OneToManyAssociationMetadata extends ToManyAssociationMetadata +{ +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/OneToOneAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/OneToOneAssociationMetadata.php new file mode 100644 index 00000000000..b5982291afa --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/OneToOneAssociationMetadata.php @@ -0,0 +1,24 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +class OneToOneAssociationMetadata extends ToOneAssociationMetadata +{ +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Property.php b/lib/Doctrine/ORM/Mapping/Property.php index 52751fef4b6..b436028d04d 100644 --- a/lib/Doctrine/ORM/Mapping/Property.php +++ b/lib/Doctrine/ORM/Mapping/Property.php @@ -47,16 +47,6 @@ public function getValue($object); */ public function getName(); - /** - * @return Type - */ - public function getType(); - - /** - * @return string - */ - public function getTypeName(); - /** * @param ReflectionService $reflectionService */ diff --git a/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php new file mode 100644 index 00000000000..7aecdd9ba5e --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php @@ -0,0 +1,25 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +class ToManyAssociationMetadata extends AssociationMetadata +{ + +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php new file mode 100644 index 00000000000..7a462ccf981 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php @@ -0,0 +1,46 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +class ToOneAssociationMetadata extends AssociationMetadata +{ + /** + * @var array + */ + private $joinColumns = []; + + /** + * @return array + */ + public function getJoinColumns() + { + return $this->joinColumns; + } + + /** + * @param JoinColumnMetadata $joinColumn + */ + public function addJoinColumns(JoinColumnMetadata $joinColumn) + { + $this->joinColumns[] = $joinColumn; + } + + +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php index b6018d546fc..04742a6867b 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php @@ -526,7 +526,7 @@ protected function getInsertRowSQLParameters(PersistentCollection $collection, $ /** * Collects the parameters for inserting/deleting on the join table in the order - * of the join table columns as specified in ManyToManyMapping#joinTableColumns. + * of the join table columns. * * @param \Doctrine\ORM\PersistentCollection $collection * @param object $element @@ -535,35 +535,23 @@ protected function getInsertRowSQLParameters(PersistentCollection $collection, $ */ private function collectJoinTableColumnParameters(PersistentCollection $collection, $element) { - $params = []; - $mapping = $collection->getMapping(); - $isComposite = count($mapping['joinTableColumns']) > 2; + $params = []; + $mapping = $collection->getMapping(); + $owningClass = $this->em->getClassMetadata(get_class($collection->getOwner())); + $targetClass = $collection->getTypeClass(); + $owningIdentifier = $this->uow->getEntityIdentifier($collection->getOwner()); + $targetIdentifier = $this->uow->getEntityIdentifier($element); - $identifier1 = $this->uow->getEntityIdentifier($collection->getOwner()); - $identifier2 = $this->uow->getEntityIdentifier($element); + foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) { + $fieldName = $owningClass->getFieldForColumn($joinColumn['referencedColumnName']); - $class1 = $class2 = null; - if ($isComposite) { - $class1 = $this->em->getClassMetadata(get_class($collection->getOwner())); - $class2 = $collection->getTypeClass(); + $params[] = $owningIdentifier[$fieldName]; } - foreach ($mapping['joinTableColumns'] as $joinTableColumn) { - $isRelationToSource = isset($mapping['relationToSourceKeyColumns'][$joinTableColumn]); - - if ( ! $isComposite) { - $params[] = $isRelationToSource ? array_pop($identifier1) : array_pop($identifier2); - - continue; - } - - if ($isRelationToSource) { - $params[] = $identifier1[$class1->getFieldForColumn($mapping['relationToSourceKeyColumns'][$joinTableColumn])]; - - continue; - } + foreach ($mapping['joinTable']['inverseJoinColumns'] as $joinColumn) { + $fieldName = $targetClass->getFieldForColumn($joinColumn['referencedColumnName']); - $params[] = $identifier2[$class2->getFieldForColumn($mapping['relationToTargetKeyColumns'][$joinTableColumn])]; + $params[] = $targetIdentifier[$fieldName]; } return $params; @@ -625,15 +613,14 @@ private function getJoinTableRestrictionsWithKey(PersistentCollection $collectio $types[] = PersisterHelper::getTypeOfColumn($columnName, $targetClass, $this->em); } - foreach ($mapping['joinTableColumns'] as $joinTableColumn) { - if (isset($mapping[$sourceRelationMode][$joinTableColumn])) { - $column = $mapping[$sourceRelationMode][$joinTableColumn]; - $whereClauses[] = 't.' . $joinTableColumn . ' = ?'; - $params[] = $id[$sourceClass->getFieldForColumn($column)]; - $types[] = PersisterHelper::getTypeOfColumn($column, $sourceClass, $this->em); - } elseif ( ! $joinNeeded) { - $column = $mapping[$targetRelationMode][$joinTableColumn]; + foreach ($mapping[$sourceRelationMode] as $joinTableColumn => $column) { + $whereClauses[] = 't.' . $joinTableColumn . ' = ?'; + $params[] = $id[$sourceClass->getFieldForColumn($column)]; + $types[] = PersisterHelper::getTypeOfColumn($column, $sourceClass, $this->em); + } + if ( ! $joinNeeded) { + foreach ($mapping[$targetRelationMode] as $joinTableColumn => $column) { $whereClauses[] = 't.' . $joinTableColumn . ' = ?'; $params[] = $key; $types[] = PersisterHelper::getTypeOfColumn($column, $targetClass, $this->em); @@ -687,21 +674,16 @@ private function getJoinTableRestrictions(PersistentCollection $collection, $ele $params = []; $types = []; - foreach ($mapping['joinTableColumns'] as $joinTableColumn) { - $whereClauses[] = ($addFilters ? 't.' : '') . $joinTableColumn . ' = ?'; - - if (isset($mapping['relationToTargetKeyColumns'][$joinTableColumn])) { - $targetColumn = $mapping['relationToTargetKeyColumns'][$joinTableColumn]; - $params[] = $targetId[$targetClass->getFieldForColumn($targetColumn)]; - $types[] = PersisterHelper::getTypeOfColumn($targetColumn, $targetClass, $this->em); - - continue; - } + foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) { + $whereClauses[] = ($addFilters ? 't.' : '') . $this->platform->quoteIdentifier($joinColumn['name']) . ' = ?'; + $params[] = $sourceId[$sourceClass->getFieldForColumn($joinColumn['referencedColumnName'])]; + $types[] = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $sourceClass, $this->em); + } - // relationToSourceKeyColumns - $targetColumn = $mapping['relationToSourceKeyColumns'][$joinTableColumn]; - $params[] = $sourceId[$sourceClass->getFieldForColumn($targetColumn)]; - $types[] = PersisterHelper::getTypeOfColumn($targetColumn, $sourceClass, $this->em); + foreach ($mapping['joinTable']['inverseJoinColumns'] as $joinColumn) { + $whereClauses[] = ($addFilters ? 't.' : '') . $this->platform->quoteIdentifier($joinColumn['name']) . ' = ?'; + $params[] = $targetId[$targetClass->getFieldForColumn($joinColumn['referencedColumnName'])]; + $types[] = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); } if ($addFilters) { @@ -758,7 +740,7 @@ private function getOrderingSql(Criteria $criteria, ClassMetadata $targetClass) foreach ($orderings as $name => $direction) { $property = $targetClass->getProperty($name); $columnName = $this->platform->quoteIdentifier($property->getColumnName()); - + $orderBy[] = $columnName . ' ' . $direction; } diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 60cfa626bf0..21b8ab1ee43 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -534,15 +534,25 @@ protected function deleteJoinTableRecords($identifier) : $association['joinTable']['inverseJoinColumns']; } + $isOnDeleteCascade = false; + foreach ($joinColumns as $joinColumn) { $keys[] = $this->platform->quoteIdentifier($joinColumn['name']); + + if ($joinColumn['onDelete'] === 'CASCADE') { + $isOnDeleteCascade = true; + } } foreach ($otherColumns as $joinColumn) { $otherKeys[] = $this->platform->quoteIdentifier($joinColumn['name']); + + if ($joinColumn['onDelete'] === 'CASCADE') { + $isOnDeleteCascade = true; + } } - if (isset($mapping['isOnDeleteCascade'])) { + if ($isOnDeleteCascade) { continue; } diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 5d463df19c4..0fde4459452 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -1463,7 +1463,7 @@ protected function generateJoinColumnAnnotation(array $joinColumn) $joinColumnAnnot[] = 'nullable=' . ($joinColumn['nullable'] ? 'true' : 'false'); } - if (isset($joinColumn['onDelete'])) { + if (isset($joinColumn['onDelete']) && ! empty($joinColumn['onDelete'])) { $joinColumnAnnot[] = 'onDelete="' . ($joinColumn['onDelete'] . '"'); } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 18d5bfb8d73..2d56ae826ac 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -315,7 +315,7 @@ public function exportClassMetadata(ClassMetadata $metadata) $joinColumnXml->addAttribute('name', $joinColumn['name']); $joinColumnXml->addAttribute('referenced-column-name', $joinColumn['referencedColumnName']); - if (isset($joinColumn['onDelete'])) { + if (isset($joinColumn['onDelete']) && ! empty($joinColumn['onDelete'])) { $joinColumnXml->addAttribute('on-delete', $joinColumn['onDelete']); } } @@ -328,7 +328,7 @@ public function exportClassMetadata(ClassMetadata $metadata) $inverseJoinColumnXml->addAttribute('name', $inverseJoinColumn['name']); $inverseJoinColumnXml->addAttribute('referenced-column-name', $inverseJoinColumn['referencedColumnName']); - if (isset($inverseJoinColumn['onDelete'])) { + if (isset($inverseJoinColumn['onDelete']) && ! empty($inverseJoinColumn['onDelete'])) { $inverseJoinColumnXml->addAttribute('on-delete', $inverseJoinColumn['onDelete']); } @@ -355,7 +355,7 @@ public function exportClassMetadata(ClassMetadata $metadata) $joinColumnXml->addAttribute('name', $joinColumn['name']); $joinColumnXml->addAttribute('referenced-column-name', $joinColumn['referencedColumnName']); - if (isset($joinColumn['onDelete'])) { + if (isset($joinColumn['onDelete']) && ! empty($joinColumn['onDelete'])) { $joinColumnXml->addAttribute('on-delete', $joinColumn['onDelete']); } diff --git a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php index 51c456371b0..509849e5fef 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php @@ -152,9 +152,9 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat $metadata->mapOneToOne( [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser', - 'joinColumns' => [['referencedColumnName' => 'id']] + 'fieldName' => 'user', + 'targetEntity' => 'CmsUser', + 'joinColumns' => [['referencedColumnName' => 'id', 'onDelete' => null]] ] ); diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php b/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php index fc0e8da9740..9746dae88ab 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php @@ -25,13 +25,14 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat { $metadata->setAssociationOverride('address', [ - 'joinColumns'=> [ - [ - 'name' => 'adminaddress_id', - 'referencedColumnName' => 'id', + 'joinColumns'=> [ + [ + 'name' => 'adminaddress_id', + 'referencedColumnName' => 'id', + 'onDelete' => null, + ] ] ] - ] ); $metadata->setAssociationOverride('groups', diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php index 5de8cd1e6e0..5e4889e9acd 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php @@ -141,25 +141,27 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat $metadata->mapManyToMany( [ - 'fieldName' => 'groups', - 'targetEntity' => 'DDC964Group', - 'inversedBy' => 'users', - 'cascade' => ['persist','merge','detach'], - 'joinTable' => [ - 'name' => 'ddc964_users_groups', - 'joinColumns' => [ + 'fieldName' => 'groups', + 'targetEntity' => 'DDC964Group', + 'inversedBy' => 'users', + 'cascade' => ['persist','merge','detach'], + 'joinTable' => [ + 'name' => 'ddc964_users_groups', + 'joinColumns' => [ [ - 'name'=>'user_id', - 'referencedColumnName'=>'id', + 'name' => 'user_id', + 'referencedColumnName' => 'id', + 'onDelete' => null, ] ], - 'inverseJoinColumns'=> [ + 'inverseJoinColumns' => [ [ - 'name'=>'group_id', + 'name' => 'group_id', 'referencedColumnName'=>'id', + 'onDelete' => null, ] ] - ] + ] ] ); diff --git a/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionCriteriaTest.php b/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionCriteriaTest.php index ae0400c208c..e19442a0070 100644 --- a/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionCriteriaTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionCriteriaTest.php @@ -19,8 +19,6 @@ class PersistentCollectionCriteriaTest extends OrmFunctionalTestCase { protected function setUp() { - $this->enableQuotes = true; - $this->useModelSet('tweet'); $this->useModelSet('quote'); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC142Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC142Test.php index 03a7759c67b..27dcb38f133 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC142Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC142Test.php @@ -15,8 +15,6 @@ class DDC142Test extends \Doctrine\Tests\OrmFunctionalTestCase { protected function setUp() { - $this->enableQuotes = true; - parent::setUp(); try { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php index 2a1ac586103..d1ebc669cb1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php @@ -9,8 +9,6 @@ class DDC1695Test extends \Doctrine\Tests\OrmFunctionalTestCase { public function setUp() { - $this->enableQuotes = true; - parent::setUp(); if ($this->_em->getConnection()->getDatabasePlatform()->getName() != "sqlite") { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php index fe64e7e9b72..6eb544bd73b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php @@ -9,8 +9,6 @@ class DDC1719Test extends \Doctrine\Tests\OrmFunctionalTestCase { protected function setUp() { - $this->enableQuotes = true; - parent::setUp(); $this->_schemaTool->createSchema( diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1843Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1843Test.php index 69a1aa6b59c..e546784dac0 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1843Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1843Test.php @@ -15,8 +15,6 @@ class DDC1843Test extends \Doctrine\Tests\OrmFunctionalTestCase { protected function setUp() { - $this->enableQuotes = true; - parent::setUp(); try { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1885Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1885Test.php index 2c637e4b59f..8af12f4c434 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1885Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1885Test.php @@ -19,8 +19,6 @@ class DDC1885Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { - $this->enableQuotes = true; - parent::setUp(); try { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php index ed5b5da1fac..f12767dc19c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php @@ -18,8 +18,6 @@ class DDC2825Test extends \Doctrine\Tests\OrmFunctionalTestCase */ protected function setUp() { - $this->enableQuotes = true; - parent::setUp(); $platform = $this->_em->getConnection()->getDatabasePlatform(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php index d457254a301..5c962bf85bd 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php @@ -6,8 +6,6 @@ class DDC832Test extends \Doctrine\Tests\OrmFunctionalTestCase { public function setUp() { - $this->enableQuotes = true; - parent::setUp(); $platform = $this->_em->getConnection()->getDatabasePlatform(); diff --git a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php index 516814ca65a..e8012db002f 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php @@ -110,18 +110,19 @@ public function testAddNamedNativeQueryResultSetMapping() $cm->mapOneToOne( [ - 'fieldName' => 'email', - 'targetEntity' => CmsEmail::class, - 'cascade' => ['persist'], - 'inversedBy' => 'user', - 'orphanRemoval' => false, - 'joinColumns' => [ - [ - 'nullable' => true, - 'referencedColumnName' => 'id', + 'fieldName' => 'email', + 'targetEntity' => CmsEmail::class, + 'cascade' => ['persist'], + 'inversedBy' => 'user', + 'orphanRemoval' => false, + 'joinColumns' => [ + [ + 'nullable' => true, + 'referencedColumnName' => 'id', + 'onDelete' => null, + ] ] ] - ] ); $cm->addNamedNativeQuery( diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 95d19ad13c9..8467f69f7d6 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -752,7 +752,6 @@ public function testAssociationOverridesMapping() self::assertEquals(['user_id'=>'id'], $guestGroups['relationToSourceKeyColumns']); self::assertEquals(['group_id'=>'id'], $guestGroups['relationToTargetKeyColumns']); - self::assertEquals(['user_id','group_id'], $guestGroups['joinTableColumns']); self::assertEquals('ddc964_users_admingroups', $adminGroups['joinTable']['name']); self::assertEquals('adminuser_id', $adminGroups['joinTable']['joinColumns'][0]['name']); @@ -760,8 +759,6 @@ public function testAssociationOverridesMapping() self::assertEquals(['adminuser_id'=>'id'], $adminGroups['relationToSourceKeyColumns']); self::assertEquals(['admingroup_id'=>'id'], $adminGroups['relationToTargetKeyColumns']); - self::assertEquals(['adminuser_id','admingroup_id'], $adminGroups['joinTableColumns']); - // assert address association mappings self::assertArrayHasKey('address', $guestMetadata->associationMappings); @@ -1228,10 +1225,13 @@ public static function loadMetadata(ClassMetadata $metadata) ] ); - $metadata->addProperty('email', Type::getType('string'), [ - 'columnName' => 'user_email', - 'columnDefinition' => 'CHAR(32) NOT NULL', - ] + $metadata->addProperty( + 'email', + Type::getType('string'), + [ + 'columnName' => 'user_email', + 'columnDefinition' => 'CHAR(32) NOT NULL', + ] ); $property = $metadata->addProperty('version', Type::getType('integer')); @@ -1261,7 +1261,7 @@ public static function loadMetadata(ClassMetadata $metadata) [ 'fieldName' => 'phonenumbers', 'targetEntity' => Phonenumber::class, - 'cascade' =>[0 => 'persist'], + 'cascade' => [0 => 'persist'], 'mappedBy' => 'user', 'orphanRemoval' => true, 'orderBy' => ['number' => 'ASC'], @@ -1283,18 +1283,19 @@ public static function loadMetadata(ClassMetadata $metadata) 'joinTable' => [ 'name' => 'cms_users_groups', 'joinColumns' => [ - 0 => - [ - 'name' => 'user_id', - 'referencedColumnName' => 'id', - 'unique' => false, - 'nullable' => false, - ], + 0 => [ + 'name' => 'user_id', + 'referencedColumnName' => 'id', + 'onDelete' => null, + 'unique' => false, + 'nullable' => false, + ], ], 'inverseJoinColumns' => [ 0 => [ 'name' => 'group_id', 'referencedColumnName' => 'id', + 'onDelete' => null, 'columnDefinition' => 'INT NULL', ], ], diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php index 83696469d96..7a50d9ab1ac 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php @@ -622,12 +622,7 @@ public function testCreateManyToMany() 'inversedBy' => NULL, 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, - 'isOnDeleteCascade' => true, 'relationToSourceKeyColumns' => ['group_id' => 'id'], - 'joinTableColumns' => [ - 0 => 'group_id', - 1 => 'user_id', - ], 'relationToTargetKeyColumns' => ['user_id' => 'id'], 'orphanRemoval' => false, 'declaringClass' => $this->cm, @@ -822,12 +817,7 @@ public function testOrphanRemovalOnManyToMany() 'inversedBy' => NULL, 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, - 'isOnDeleteCascade' => true, 'relationToSourceKeyColumns' => ['group_id' => 'id'], - 'joinTableColumns' => [ - 0 => 'group_id', - 1 => 'cmsgroup_id', - ], 'relationToTargetKeyColumns' => ['cmsgroup_id' => 'id'], 'orphanRemoval' => true, 'declaringClass' => $this->cm, diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 3dfa7bdae25..a4fb1adfaff 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -276,7 +276,7 @@ protected function _createValidClassMetadata() // and an association on the owning side $joinColumns = [ - ['name' => 'other_id', 'referencedColumnName' => 'id'] + ['name' => 'other_id', 'referencedColumnName' => 'id', 'onDelete' => null] ]; $cm1->mapOneToOne(['fieldName' => 'association', 'targetEntity' => 'TestEntity1', 'joinColumns' => $joinColumns]); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index d101d750285..24d1675b7f8 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -132,13 +132,17 @@ public function testMapAssociationInGlobalNamespace() $cm->initializeReflection(new RuntimeReflectionService()); $cm->mapManyToMany( [ - 'fieldName' => 'author', - 'targetEntity' => 'DoctrineGlobal_User', - 'joinTable' => [ - 'name' => 'bar', - 'joinColumns' => [['name' => 'bar_id', 'referencedColumnName' => 'id']], - 'inverseJoinColumns' => [['name' => 'baz_id', 'referencedColumnName' => 'id']], - ], + 'fieldName' => 'author', + 'targetEntity' => 'DoctrineGlobal_User', + 'joinTable' => [ + 'name' => 'bar', + 'joinColumns' => [ + ['name' => 'bar_id', 'referencedColumnName' => 'id', 'onDelete' => null] + ], + 'inverseJoinColumns' => [ + ['name' => 'baz_id', 'referencedColumnName' => 'id', 'onDelete' => null] + ], + ], ] ); @@ -160,14 +164,16 @@ public function testMapManyToManyJoinTableDefaults() self::assertEquals( [ - 'name' => 'cmsuser_cmsgroup', - 'joinColumns' => [['name' => 'cmsuser_id', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE']], - 'inverseJoinColumns' => [['name' => 'cmsgroup_id', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE']] + 'name' => 'cmsuser_cmsgroup', + 'joinColumns' => [ + ['name' => 'cmsuser_id', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE'] + ], + 'inverseJoinColumns' => [ + ['name' => 'cmsgroup_id', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE'] + ] ], $assoc['joinTable'] ); - - self::assertTrue($assoc['isOnDeleteCascade']); } public function testSerializeManyToManyJoinTableCascade() @@ -181,11 +187,12 @@ public function testSerializeManyToManyJoinTableCascade() ] ); - /* @var $assoc \Doctrine\ORM\Mapping\ManyToMany */ $assoc = $cm->associationMappings['groups']; $assoc = unserialize(serialize($assoc)); - self::assertTrue($assoc['isOnDeleteCascade']); + foreach ($assoc['joinTable']['joinColumns'] as $joinColumn) { + self::assertEquals('CASCADE', $joinColumn['onDelete']); + } } /** @@ -376,8 +383,12 @@ public function testDefaultTableName() 'targetEntity' => 'CmsUser', 'inversedBy' => 'users', 'joinTable' => [ - 'joinColumns' => [['referencedColumnName' => 'id']], - 'inverseJoinColumns' => [['referencedColumnName' => 'id']] + 'joinColumns' => [ + ['referencedColumnName' => 'id', 'onDelete' => null] + ], + 'inverseJoinColumns' => [ + ['referencedColumnName' => 'id', 'onDelete' => null] + ] ] ] ); @@ -393,27 +404,35 @@ public function testDefaultJoinColumnName() // joinColumn's name will be automatically set to user_id $cm->mapOneToOne( [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser', - 'joinColumns' => [['referencedColumnName' => 'id']] + 'fieldName' => 'user', + 'targetEntity' => 'CmsUser', + 'joinColumns' => [ + ['referencedColumnName' => 'id', 'onDelete' => null] + ] ] ); + self::assertEquals('user_id', $cm->associationMappings['user']['joinColumns'][0]['name']); $cm = new ClassMetadata(CMS\CmsAddress::class); $cm->initializeReflection(new RuntimeReflectionService()); $cm->mapManyToMany( [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser', - 'inversedBy' => 'users', - 'joinTable' => [ + 'fieldName' => 'user', + 'targetEntity' => 'CmsUser', + 'inversedBy' => 'users', + 'joinTable' => [ 'name' => 'user_CmsUser', - 'joinColumns' => [['referencedColumnName' => 'id']], - 'inverseJoinColumns' => [['referencedColumnName' => 'id']] + 'joinColumns' => [ + ['referencedColumnName' => 'id', 'onDelete' => null] + ], + 'inverseJoinColumns' => [ + ['referencedColumnName' => 'id', 'onDelete' => null] + ] ] ] ); + self::assertEquals('cmsaddress_id', $cm->associationMappings['user']['joinTable']['joinColumns'][0]['name']); self::assertEquals('cmsuser_id', $cm->associationMappings['user']['joinTable']['inverseJoinColumns'][0]['name']); } @@ -451,9 +470,8 @@ public function testUnderscoreNamingStrategyDefaults() self::assertEquals('CMS_ADDRESS_CMS_USER', $manyToManyMetadata->associationMappings['user']['joinTable']['name']); - self::assertEquals(['CMS_ADDRESS_ID','CMS_USER_ID'], $manyToManyMetadata->associationMappings['user']['joinTableColumns']); - self::assertEquals(['CMS_ADDRESS_ID'=>'ID'], $manyToManyMetadata->associationMappings['user']['relationToSourceKeyColumns']); - self::assertEquals(['CMS_USER_ID'=>'ID'], $manyToManyMetadata->associationMappings['user']['relationToTargetKeyColumns']); + self::assertEquals(['CMS_ADDRESS_ID' => 'ID'], $manyToManyMetadata->associationMappings['user']['relationToSourceKeyColumns']); + self::assertEquals(['CMS_USER_ID' => 'ID'], $manyToManyMetadata->associationMappings['user']['relationToTargetKeyColumns']); self::assertEquals('CMS_ADDRESS_ID', $manyToManyMetadata->associationMappings['user']['joinTable']['joinColumns'][0]['name']); self::assertEquals('CMS_USER_ID', $manyToManyMetadata->associationMappings['user']['joinTable']['inverseJoinColumns'][0]['name']); @@ -1182,12 +1200,16 @@ public function testManyToManySelfReferencingNamingStrategyDefaults() self::assertEquals( [ 'name' => 'customtypeparent_customtypeparent', - 'joinColumns' => [['name' => 'customtypeparent_source', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE']], - 'inverseJoinColumns' => [['name' => 'customtypeparent_target', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE']], + 'joinColumns' => [ + ['name' => 'customtypeparent_source', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE'] + ], + 'inverseJoinColumns' => [ + ['name' => 'customtypeparent_target', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE'] + ], ], $cm->associationMappings['friendsWithMe']['joinTable'] ); - self::assertEquals(['customtypeparent_source', 'customtypeparent_target'], $cm->associationMappings['friendsWithMe']['joinTableColumns']); + self::assertEquals(['customtypeparent_source' => 'id'], $cm->associationMappings['friendsWithMe']['relationToSourceKeyColumns']); self::assertEquals(['customtypeparent_target' => 'id'], $cm->associationMappings['friendsWithMe']['relationToTargetKeyColumns']); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php index 4f3e615d044..85ab38272e7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php @@ -16,7 +16,9 @@ [ 'fieldName' => 'user', 'targetEntity' => 'CmsUser', - 'joinColumns' => [['referencedColumnName' => 'id']] + 'joinColumns' => [ + ['referencedColumnName' => 'id', 'onDelete' => null] + ] ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index 0631e32d180..101b8065938 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -25,6 +25,7 @@ [ 'name' => 'state_id', 'referencedColumnName' => 'id', + 'onDelete' => null, ], ], ] diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php index 10175feca96..8049e86f069 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php @@ -1,29 +1,35 @@ setAssociationOverride('address', +$metadata->setAssociationOverride( + 'address', [ - 'joinColumns'=> [ - [ - 'name' => 'adminaddress_id', - 'referencedColumnName' => 'id', + 'joinColumns'=> [ + [ + 'name' => 'adminaddress_id', + 'referencedColumnName' => 'id', + 'onDelete' => null, + ] ] ] - ] ); -$metadata->setAssociationOverride('groups', +$metadata->setAssociationOverride( + 'groups', [ - 'joinTable' => [ - 'name' => 'ddc964_users_admingroups', - 'joinColumns' => [ - [ - 'name' => 'adminuser_id', + 'joinTable' => [ + 'name' => 'ddc964_users_admingroups', + 'joinColumns' => [ + [ + 'name' => 'adminuser_id', + 'onDelete' => null, + ] + ], + 'inverseJoinColumns' => [ + [ + 'name' => 'admingroup_id', + 'onDelete' => null, + ] ] - ], - - 'inverseJoinColumns' => [[ - 'name' => 'admingroup_id', - ]] - ] + ] ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php index 9f1b8d8d73c..bfbc57fbe7b 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php @@ -35,25 +35,27 @@ $metadata->mapManyToMany( [ - 'fieldName' => 'groups', - 'targetEntity' => 'DDC964Group', - 'inversedBy' => 'users', - 'cascade' => ['persist','merge','detach'], - 'joinTable' => [ - 'name' => 'ddc964_users_groups', - 'joinColumns' => [ - [ - 'name' => 'user_id', - 'referencedColumnName' => 'id', - ] - ], - 'inverseJoinColumns' => [ - [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - ] - ] - ] + 'fieldName' => 'groups', + 'targetEntity' => 'DDC964Group', + 'inversedBy' => 'users', + 'cascade' => ['persist','merge','detach'], + 'joinTable' => [ + 'name' => 'ddc964_users_groups', + 'joinColumns' => [ + [ + 'name' => 'user_id', + 'referencedColumnName' =>'id', + 'onDelete' => null, + ] + ], + 'inverseJoinColumns' => [ + [ + 'name'=>'group_id', + 'referencedColumnName'=>'id', + 'onDelete' => null, + ] + ], + ] ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index fbc3b79eaec..7bced52456e 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -76,6 +76,7 @@ 'orphanRemoval' => false, ] ); + $metadata->mapOneToMany( [ 'fieldName' => 'phonenumbers', @@ -86,6 +87,7 @@ 'orderBy' => ['number' => 'ASC'], ] ); + $metadata->mapManyToMany( [ 'fieldName' => 'groups', @@ -104,7 +106,8 @@ 0 => [ 'name' => 'user_id', 'referencedColumnName' => 'id', - 'unique' => false, + 'onDelete' => null, + 'unique' => false, 'nullable' => false, ], ], @@ -112,6 +115,7 @@ 0 => [ 'name' => 'group_id', 'referencedColumnName' => 'id', + 'onDelete' => null, 'columnDefinition' => 'INT NULL', ], ], diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php index cc86a56d2df..cbf476948b4 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php @@ -120,6 +120,7 @@ 0 => [ 'name' => 'user_id', 'referencedColumnName' => 'id', + 'onDelete' => null, 'unique' => false, 'nullable' => false, ], diff --git a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php index 14a3a566f02..7d9a2f46733 100644 --- a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php @@ -85,7 +85,9 @@ public function testAssertTableColumnsAreNotAddedInManyToMany() $meta = $cm->associationMappings['manyToMany']; self::assertSame(TargetEntity::class, $meta['targetEntity']); - self::assertEquals(['resolvetargetentity_id', 'targetinterface_id'], $meta['joinTableColumns']); + + self::assertEquals(['resolvetargetentity_id' => 'id'], $meta['relationToSourceKeyColumns']); + self::assertEquals(['targetinterface_id' => 'id'], $meta['relationToTargetKeyColumns']); } /** diff --git a/tests/Doctrine/Tests/OrmFunctionalTestCase.php b/tests/Doctrine/Tests/OrmFunctionalTestCase.php index de983186388..153d6d23759 100644 --- a/tests/Doctrine/Tests/OrmFunctionalTestCase.php +++ b/tests/Doctrine/Tests/OrmFunctionalTestCase.php @@ -12,8 +12,6 @@ use Doctrine\ORM\Cache\Logging\StatisticsCacheLogger; use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManager; -use Doctrine\ORM\Mapping\AnsiQuoteStrategy; -use Doctrine\ORM\Mapping\DefaultQuoteStrategy; use Doctrine\ORM\Tools\DebugUnitOfWorkListener; use Doctrine\ORM\Tools\SchemaTool; use Doctrine\Tests\DbalTypes\Rot13Type; @@ -703,7 +701,6 @@ protected function _getEntityManager(Connection $connection = null) { // different configs. $config = new Configuration(); $config = new \Doctrine\ORM\Configuration(); - //$config->setQuoteStrategy($this->enableQuotes ? new DefaultQuoteStrategy() : new AnsiQuoteStrategy()); $config->setMetadataCacheImpl(self::$_metadataCacheImpl); $config->setQueryCacheImpl(self::$_queryCacheImpl); $config->setProxyDir(__DIR__ . '/Proxies'); diff --git a/tests/Doctrine/Tests/OrmTestCase.php b/tests/Doctrine/Tests/OrmTestCase.php index 56acf7991cd..4b767ab5f00 100644 --- a/tests/Doctrine/Tests/OrmTestCase.php +++ b/tests/Doctrine/Tests/OrmTestCase.php @@ -8,8 +8,6 @@ use Doctrine\DBAL\DriverManager; use Doctrine\ORM\Cache\CacheConfiguration; use Doctrine\ORM\Cache\DefaultCacheFactory; -use Doctrine\ORM\Mapping\AnsiQuoteStrategy; -use Doctrine\ORM\Mapping\DefaultQuoteStrategy; use Doctrine\ORM\Configuration; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; use Doctrine\Tests\Mocks; @@ -33,11 +31,6 @@ abstract class OrmTestCase extends DoctrineTestCase */ private static $_queryCacheImpl = null; - /** - * @var bool - */ - protected $enableQuotes = false; - /** * @var bool */ @@ -131,7 +124,6 @@ protected function _getTestEntityManager($conn = null, $conf = null, $eventManag $config = new Configuration(); - //$config->setQuoteStrategy($this->enableQuotes ? new DefaultQuoteStrategy() : new AnsiQuoteStrategy()); $config->setMetadataCacheImpl($metadataCache); $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver([], true)); $config->setQueryCacheImpl(self::getSharedQueryCacheImpl()); From fa9d0b8f2102f1965ce25924a934f630384f54ff Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Thu, 11 Aug 2016 03:57:59 +0000 Subject: [PATCH 059/275] Introduced JoinColumnMetadata and refactored most tests. Still 14 failing related to OO change. --- .../ORM/Cache/DefaultEntityHydrator.php | 3 +- .../Internal/Hydration/AbstractHydrator.php | 44 +- .../ORM/Internal/Hydration/ObjectHydrator.php | 26 +- .../Mapping/Builder/AssociationBuilder.php | 22 +- .../Builder/ManyToManyAssociationBuilder.php | 22 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 124 ++--- .../ORM/Mapping/ClassMetadataFactory.php | 12 +- .../ORM/Mapping/DefaultQuoteStrategy.php | 4 +- .../ORM/Mapping/Driver/AnnotationDriver.php | 43 +- .../ORM/Mapping/Driver/DatabaseDriver.php | 40 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 52 +- .../ORM/Mapping/JoinColumnMetadata.php | 12 +- .../ORM/Mapping/ToOneAssociationMetadata.php | 2 +- .../Collection/ManyToManyPersister.php | 85 ++-- .../Collection/OneToManyPersister.php | 4 +- .../Entity/BasicEntityPersister.php | 184 ++++--- .../Entity/JoinedSubclassPersister.php | 48 +- .../Entity/SingleTablePersister.php | 8 +- .../Query/AST/Functions/IdentityFunction.php | 8 +- .../ORM/Query/AST/Functions/SizeFunction.php | 12 +- .../ORM/Query/ResultSetMappingBuilder.php | 15 +- lib/Doctrine/ORM/Query/SqlWalker.php | 129 +++-- lib/Doctrine/ORM/Tools/EntityGenerator.php | 32 +- .../ORM/Tools/Export/Driver/PhpExporter.php | 148 +++--- .../ORM/Tools/Export/Driver/XmlExporter.php | 81 ++- .../Tools/Pagination/CountOutputWalker.php | 7 +- .../Pagination/LimitSubqueryOutputWalker.php | 5 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 45 +- lib/Doctrine/ORM/Tools/SchemaValidator.php | 14 +- lib/Doctrine/ORM/UnitOfWork.php | 6 +- .../ORM/Utility/IdentifierFlattener.php | 40 +- lib/Doctrine/ORM/Utility/PersisterHelper.php | 36 +- .../Doctrine/Tests/Models/CMS/CmsAddress.php | 11 +- .../Tests/Models/DDC964/DDC964Admin.php | 62 ++- .../Tests/Models/DDC964/DDC964User.php | 52 +- .../ORM/Hydration/ResultSetMappingTest.php | 81 +-- .../ORM/Mapping/AbstractMappingDriverTest.php | 150 +++--- .../ORM/Mapping/ClassMetadataFactoryTest.php | 60 ++- .../Tests/ORM/Mapping/ClassMetadataTest.php | 465 +++++++++++------- .../Doctrine.Tests.Models.CMS.CmsAddress.php | 12 +- .../php/Doctrine.Tests.Models.Cache.City.php | 28 +- ...ctrine.Tests.Models.DDC964.DDC964Admin.php | 68 +-- ...octrine.Tests.Models.DDC964.DDC964User.php | 51 +- .../php/Doctrine.Tests.ORM.Mapping.PHPSLC.php | 13 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 105 ++-- .../Tests/ORM/Tools/EntityGeneratorTest.php | 111 +++-- .../AbstractClassMetadataExporterTest.php | 67 +-- .../Doctrine.Tests.ORM.Tools.Export.User.php | 116 ++--- 48 files changed, 1580 insertions(+), 1185 deletions(-) diff --git a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php index a468b92880a..c5e92249730 100644 --- a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php @@ -130,8 +130,7 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e ? $this->uow->getEntityIdentifier($data[$name]) : $data[$name]; - // @TODO - fix it ! - // handle UnitOfWork#createEntity hash generation + // @TODO - fix it ! handle UnitOfWork#createEntity hash generation if ( ! is_array($targetId)) { $data[reset($assoc['joinColumnFieldNames'])] = $targetId; diff --git a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php index 6977a4673a0..cbe604f388e 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php @@ -23,6 +23,7 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Events; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Utility\IdentifierFlattener; use PDO; /** @@ -64,6 +65,13 @@ abstract class AbstractHydrator */ protected $_uow; + /** + * The IdentifierFlattener used for manipulating identifiers + * + * @var \Doctrine\ORM\Utility\IdentifierFlattener + */ + protected $identifierFlattener; + /** * Local ClassMetadata cache to avoid going to the EntityManager all the time. * @@ -99,9 +107,10 @@ abstract class AbstractHydrator */ public function __construct(EntityManagerInterface $em) { - $this->_em = $em; - $this->_platform = $em->getConnection()->getDatabasePlatform(); - $this->_uow = $em->getUnitOfWork(); + $this->_em = $em; + $this->_platform = $em->getConnection()->getDatabasePlatform(); + $this->_uow = $em->getUnitOfWork(); + $this->identifierFlattener = new IdentifierFlattener($this->_uow, $em->getMetadataFactory()); } /** @@ -448,26 +457,25 @@ protected function getClassMetadata($className) * @param array $data * * @return void - * - * @todo The "$id" generation is the same of UnitOfWork#createEntity. Remove this duplication somehow */ protected function registerManaged(ClassMetadata $class, $entity, array $data) { - if ($class->isIdentifierComposite) { - $id = []; + // TODO: All of the following share similar logic, consider refactoring: AbstractHydrator::registerManaged, + // ObjectHydrator::getEntityFromIdentityMap and UnitOfWork::createEntity(). + // $id = $this->identifierFlattener->flattenIdentifier($class, $data); + $id = []; - foreach ($class->identifier as $fieldName) { - $id[$fieldName] = isset($class->associationMappings[$fieldName]) - ? $data[$class->associationMappings[$fieldName]['joinColumns'][0]['name']] - : $data[$fieldName]; + foreach ($class->identifier as $fieldName) { + if (!isset($class->associationMappings[$fieldName])) { + $id[$fieldName] = $data[$fieldName]; + + continue; } - } else { - $fieldName = $class->identifier[0]; - $id = [ - $fieldName => isset($class->associationMappings[$fieldName]) - ? $data[$class->associationMappings[$fieldName]['joinColumns'][0]['name']] - : $data[$fieldName] - ]; + + $association = $class->associationMappings[$fieldName]; + $joinColumn = reset($association['joinColumns']); + + $id[$fieldName] = $data[$joinColumn->getColumnName()]; } $this->_em->getUnitOfWork()->registerManaged($entity, $id, $data); diff --git a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php index f8f964bfdc3..2f54c8acddc 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php @@ -280,25 +280,27 @@ private function getEntity(array $data, $dqlAlias) */ private function getEntityFromIdentityMap($className, array $data) { - // TODO: Abstract this code and UnitOfWork::createEntity() equivalent? + // TODO: All of the following share similar logic, consider refactoring: AbstractHydrator::registerManaged, + // ObjectHydrator::getEntityFromIdentityMap and UnitOfWork::createEntity(). + // $id = $this->identifierFlattener->flattenIdentifier($class, $data); + /* @var ClassMetadata $class */ $class = $this->_metadataCache[$className]; + $id = []; - /* @var $class ClassMetadata */ - if ($class->isIdentifierComposite) { - $idHash = ''; + foreach ($class->identifier as $fieldName) { + if (!isset($class->associationMappings[$fieldName])) { + $id[$fieldName] = $data[$fieldName]; - foreach ($class->identifier as $fieldName) { - $idHash .= ' ' . (isset($class->associationMappings[$fieldName]) - ? $data[$class->associationMappings[$fieldName]['joinColumns'][0]['name']] - : $data[$fieldName]); + continue; } - return $this->_uow->tryGetByIdHash(ltrim($idHash), $class->rootEntityName); - } else if (isset($class->associationMappings[$class->identifier[0]])) { - return $this->_uow->tryGetByIdHash($data[$class->associationMappings[$class->identifier[0]]['joinColumns'][0]['name']], $class->rootEntityName); + $association = $class->associationMappings[$fieldName]; + $joinColumn = reset($association['joinColumns']); + + $id[$fieldName] = $data[$joinColumn->getColumnName()]; } - return $this->_uow->tryGetByIdHash($data[$class->identifier[0]], $class->rootEntityName); + return $this->_uow->tryGetByIdHash(implode(' ', $id), $class->rootEntityName); } /** diff --git a/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php index 570b97aa024..bbb0836e3c5 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Mapping\Builder; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\JoinColumnMetadata; class AssociationBuilder { @@ -183,14 +184,19 @@ public function fetchLazy() */ public function addJoinColumn($columnName, $referencedColumnName, $nullable = true, $unique = false, $onDelete = null, $columnDef = null) { - $this->joinColumns[] = [ - 'name' => $columnName, - 'referencedColumnName' => $referencedColumnName, - 'nullable' => $nullable, - 'unique' => $unique, - 'onDelete' => $onDelete ? strtoupper($onDelete) : $onDelete, - 'columnDefinition' => $columnDef, - ]; + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setColumnName($columnName); + $joinColumn->setReferencedColumnName($referencedColumnName); + $joinColumn->setNullable($nullable); + $joinColumn->setUnique($unique); + $joinColumn->setColumnDefinition($columnDef); + + if ($onDelete) { + $joinColumn->setOnDelete($onDelete); + } + + $this->joinColumns[] = $joinColumn; return $this; } diff --git a/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php index 0600e5a691b..2c5e353cde0 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php @@ -18,6 +18,7 @@ */ namespace Doctrine\ORM\Mapping\Builder; +use Doctrine\ORM\Mapping\JoinColumnMetadata; /** * ManyToMany Association Builder @@ -65,14 +66,19 @@ public function setJoinTable($name) */ public function addInverseJoinColumn($columnName, $referencedColumnName, $nullable = true, $unique = false, $onDelete = null, $columnDef = null) { - $this->inverseJoinColumns[] = [ - 'name' => $columnName, - 'referencedColumnName' => $referencedColumnName, - 'nullable' => $nullable, - 'unique' => $unique, - 'onDelete' => $onDelete ? strtoupper($onDelete) : $onDelete, - 'columnDefinition' => $columnDef, - ]; + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setColumnName($columnName); + $joinColumn->setReferencedColumnName($referencedColumnName); + $joinColumn->setNullable($nullable); + $joinColumn->setUnique($unique); + $joinColumn->setColumnDefinition($columnDef); + + if ($onDelete) { + $joinColumn->setOnDelete($onDelete); + } + + $this->inverseJoinColumns[] = $joinColumn; return $this; } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index cee25a23b65..7f4efde405b 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1382,42 +1382,36 @@ protected function validateAndCompleteOneToOneMapping(array $mapping) if ($mapping['isOwningSide']) { if (empty($mapping['joinColumns'])) { // Apply default join column - $mapping['joinColumns'] = [ - [ - 'name' => $this->namingStrategy->joinColumnName($mapping['fieldName'], $this->name), - 'referencedColumnName' => $this->namingStrategy->referenceColumnName(), - 'onDelete' => null, - ] - ]; + $mapping['joinColumns'][] = new JoinColumnMetadata(); } $uniqueConstraintColumns = []; - foreach ($mapping['joinColumns'] as &$joinColumn) { + foreach ($mapping['joinColumns'] as $joinColumn) { if ($mapping['type'] === self::ONE_TO_ONE && ! $this->isInheritanceTypeSingleTable()) { - if (count($mapping['joinColumns']) === 1) { + if (1 === count($mapping['joinColumns'])) { if (empty($mapping['id'])) { - $joinColumn['unique'] = true; + $joinColumn->setUnique(true); } } else { - $uniqueConstraintColumns[] = $joinColumn['name']; + $uniqueConstraintColumns[] = $joinColumn->getColumnName(); } } - $joinColumn['tableName'] = ! $this->isMappedSuperclass ? $this->getTableName() : null; + $joinColumn->setTableName(! $this->isMappedSuperclass ? $this->getTableName() : null); - if (empty($joinColumn['name'])) { - $joinColumn['name'] = $this->namingStrategy->joinColumnName($mapping['fieldName'], $this->name); + if (! $joinColumn->getColumnName()) { + $joinColumn->setColumnName($this->namingStrategy->joinColumnName($mapping['fieldName'], $this->name)); } - if (empty($joinColumn['referencedColumnName'])) { - $joinColumn['referencedColumnName'] = $this->namingStrategy->referenceColumnName(); + if (! $joinColumn->getReferencedColumnName()) { + $joinColumn->setReferencedColumnName($this->namingStrategy->referenceColumnName()); } - $mapping['sourceToTargetKeyColumns'][$joinColumn['name']] = $joinColumn['referencedColumnName']; - $mapping['joinColumnFieldNames'][$joinColumn['name']] = isset($joinColumn['fieldName']) - ? $joinColumn['fieldName'] - : $joinColumn['name']; + $columnName = $joinColumn->getColumnName(); + + $mapping['sourceToTargetKeyColumns'][$columnName] = $joinColumn->getReferencedColumnName(); + $mapping['joinColumnFieldNames'][$columnName] = $joinColumn->getAliasedName() ?? $columnName; } if ($uniqueConstraintColumns) { @@ -1503,47 +1497,65 @@ protected function validateAndCompleteManyToManyMapping(array $mapping) && (! (isset($mapping['joinTable']['joinColumns']) || isset($mapping['joinTable']['inverseJoinColumns']))); if ( ! isset($mapping['joinTable']['joinColumns'])) { - $mapping['joinTable']['joinColumns'] = [ - [ - 'name' => $this->namingStrategy->joinKeyColumnName($mapping['sourceEntity'], $selfReferencingEntityWithoutJoinColumns ? 'source' : null), - 'referencedColumnName' => $this->namingStrategy->referenceColumnName(), - 'onDelete' => 'CASCADE' - ] - ]; + $referencedColumnName = $this->namingStrategy->referenceColumnName(); + $sourceReferenceName = $selfReferencingEntityWithoutJoinColumns ? 'source' : $referencedColumnName; + $columnName = $this->namingStrategy->joinKeyColumnName($mapping['sourceEntity'], $sourceReferenceName); + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setColumnName($columnName); + $joinColumn->setReferencedColumnName($referencedColumnName); + $joinColumn->setOnDelete('CASCADE'); + + $mapping['joinTable']['joinColumns'][] = $joinColumn; } if ( ! isset($mapping['joinTable']['inverseJoinColumns'])) { - $mapping['joinTable']['inverseJoinColumns'] = [ - [ - 'name' => $this->namingStrategy->joinKeyColumnName($mapping['targetEntity'], $selfReferencingEntityWithoutJoinColumns ? 'target' : null), - 'referencedColumnName' => $this->namingStrategy->referenceColumnName(), - 'onDelete' => 'CASCADE' - ] - ]; + $referencedColumnName = $this->namingStrategy->referenceColumnName(); + $targetReferenceName = $selfReferencingEntityWithoutJoinColumns ? 'target' : $referencedColumnName; + $columnName = $this->namingStrategy->joinKeyColumnName($mapping['targetEntity'], $targetReferenceName); + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setColumnName($columnName); + $joinColumn->setReferencedColumnName($referencedColumnName); + $joinColumn->setOnDelete('CASCADE'); + + $mapping['joinTable']['inverseJoinColumns'][] = $joinColumn; } - foreach ($mapping['joinTable']['joinColumns'] as &$joinColumn) { - if (empty($joinColumn['name'])) { - $joinColumn['name'] = $this->namingStrategy->joinKeyColumnName($mapping['sourceEntity'], $joinColumn['referencedColumnName']); + foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) { + if (! $joinColumn->getReferencedColumnName()) { + $joinColumn->setReferencedColumnName($this->namingStrategy->referenceColumnName()); } - if (empty($joinColumn['referencedColumnName'])) { - $joinColumn['referencedColumnName'] = $this->namingStrategy->referenceColumnName(); + $referencedColumnName = $joinColumn->getReferencedColumnName(); + + if (! $joinColumn->getColumnName()) { + $columnName = $this->namingStrategy->joinKeyColumnName($mapping['sourceEntity'], $referencedColumnName); + + $joinColumn->setColumnName($columnName); } - $mapping['relationToSourceKeyColumns'][$joinColumn['name']] = $joinColumn['referencedColumnName']; + $columnName = $joinColumn->getColumnName(); + + $mapping['relationToSourceKeyColumns'][$columnName] = $referencedColumnName; } - foreach ($mapping['joinTable']['inverseJoinColumns'] as &$inverseJoinColumn) { - if (empty($inverseJoinColumn['name'])) { - $inverseJoinColumn['name'] = $this->namingStrategy->joinKeyColumnName($mapping['targetEntity'], $inverseJoinColumn['referencedColumnName']); + foreach ($mapping['joinTable']['inverseJoinColumns'] as $inverseJoinColumn) { + if (! $inverseJoinColumn->getReferencedColumnName()) { + $inverseJoinColumn->setReferencedColumnName($this->namingStrategy->referenceColumnName()); } - if (empty($inverseJoinColumn['referencedColumnName'])) { - $inverseJoinColumn['referencedColumnName'] = $this->namingStrategy->referenceColumnName(); + $referencedColumnName = $inverseJoinColumn->getReferencedColumnName(); + + if (! $inverseJoinColumn->getColumnName()) { + $columnName = $this->namingStrategy->joinKeyColumnName($mapping['targetEntity'], $referencedColumnName); + + $inverseJoinColumn->setColumnName($columnName); } - $mapping['relationToTargetKeyColumns'][$inverseJoinColumn['name']] = $inverseJoinColumn['referencedColumnName']; + $columnName = $inverseJoinColumn->getColumnName(); + + $mapping['relationToTargetKeyColumns'][$columnName] = $referencedColumnName; } } @@ -1660,13 +1672,11 @@ public function getIdentifierColumns(EntityManagerInterface $em) $targetClass = $em->getClassMetadata($assoc['targetEntity']); foreach ($assoc['joinColumns'] as $joinColumn) { - $sourceColumn = $joinColumn['name']; - $targetColumn = $joinColumn['referencedColumnName']; - - $columns[$sourceColumn] = array_merge( - $joinColumn, - ['type' => PersisterHelper::getTypeOfColumn($targetColumn, $targetClass, $em)] + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $em) ); + + $columns[$joinColumn->getColumnName()] = $joinColumn; } } @@ -2719,7 +2729,9 @@ public function getSingleAssociationJoinColumnName($fieldName) throw MappingException::noSingleAssociationJoinColumnFound($this->name, $fieldName); } - return $this->associationMappings[$fieldName]['joinColumns'][0]['name']; + $joinColumn = reset($this->associationMappings[$fieldName]['joinColumns']); + + return $joinColumn->getColumnName(); } /** @@ -2737,7 +2749,9 @@ public function getSingleAssociationReferencedJoinColumnName($fieldName) throw MappingException::noSingleAssociationJoinColumnFound($this->name, $fieldName); } - return $this->associationMappings[$fieldName]['joinColumns'][0]['referencedColumnName']; + $joinColumn = reset($this->associationMappings[$fieldName]['joinColumns']); + + return $joinColumn->getReferencedColumnName(); } /** @@ -2759,7 +2773,7 @@ public function getFieldForColumn($columnName) foreach ($this->associationMappings as $assocName => $mapping) { if ($this->isAssociationWithSingleJoinColumn($assocName) && - $this->associationMappings[$assocName]['joinColumns'][0]['name'] == $columnName) { + $this->associationMappings[$assocName]['joinColumns'][0]->getColumnName() === $columnName) { return $assocName; } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 4d1561da9c3..2a98bd649d2 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -283,10 +283,10 @@ protected function completeRuntimeMetadata($class, $parent) } // Resolve association join column table names - foreach ($class->associationMappings as &$mapping) { + foreach ($class->associationMappings as $mapping) { if (isset($mapping['joinColumns'])) { - foreach ($mapping['joinColumns'] as &$joinColumn) { - $joinColumn['tableName'] = $joinColumn['tableName'] ?? $tableName; + foreach ($mapping['joinColumns'] as $joinColumn) { + $joinColumn->setTableName($joinColumn->getTableName() ?? $tableName); } } } @@ -485,9 +485,9 @@ private function addInheritedRelations(ClassMetadata $subClass, ClassMetadata $p // Resolve which table owns the join columns in a to-one mapping if (isset($mapping['joinColumns'])) { - foreach ($mapping['joinColumns'] as &$joinColumn) { - if ( ! isset($joinColumn['tableName'])) { - $joinColumn['tableName'] = ! $parentClass->isMappedSuperclass ? $tableName : null; + foreach ($mapping['joinColumns'] as $joinColumn) { + if ( ! $joinColumn->getTableName()) { + $joinColumn->setTableName(! $parentClass->isMappedSuperclass ? $tableName : null); } } } diff --git a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php index 3f58007f7bc..250a3838ddf 100644 --- a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php @@ -81,9 +81,9 @@ public function getIdentifierColumnNames(ClassMetadata $class, AbstractPlatform // Association defined as Id field $joinColumns = $class->associationMappings[$fieldName]['joinColumns']; $assocQuotedColumnNames = array_map( - function ($joinColumn) use ($platform) + function (JoinColumnMetadata $joinColumn) use ($platform) { - return $platform->quoteIdentifier($joinColumn['name']); + return $platform->quoteIdentifier($joinColumn->getColumnName()); }, $joinColumns ); diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index b8930b2f59d..7009a1379d3 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -29,6 +29,7 @@ use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; +use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\MappingException; /** @@ -293,10 +294,10 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $joinColumns = []; if ($joinColumnAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinColumn::class)) { - $joinColumns[] = $this->joinColumnToArray($joinColumnAnnot); + $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); } else if ($joinColumnsAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinColumns::class)) { foreach ($joinColumnsAnnot->value as $joinColumn) { - $joinColumns[] = $this->joinColumnToArray($joinColumn); + $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumn); } } @@ -386,11 +387,11 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat ]; foreach ($joinTableAnnot->joinColumns as $joinColumn) { - $joinTable['joinColumns'][] = $this->joinColumnToArray($joinColumn); + $joinTable['joinColumns'][] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumn); } foreach ($joinTableAnnot->inverseJoinColumns as $joinColumn) { - $joinTable['inverseJoinColumns'][] = $this->joinColumnToArray($joinColumn); + $joinTable['inverseJoinColumns'][] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumn); } } @@ -429,7 +430,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $joinColumns = []; foreach ($associationOverride->joinColumns as $joinColumn) { - $joinColumns[] = $this->joinColumnToArray($joinColumn); + $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumn); } $override['joinColumns'] = $joinColumns; @@ -444,11 +445,11 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat ]; foreach ($joinTableAnnot->joinColumns as $joinColumn) { - $joinTable['joinColumns'][] = $this->joinColumnToArray($joinColumn); + $joinTable['joinColumns'][] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumn); } foreach ($joinTableAnnot->inverseJoinColumns as $joinColumn) { - $joinTable['inverseJoinColumns'][] = $this->joinColumnToArray($joinColumn); + $joinTable['inverseJoinColumns'][] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumn); } $override['joinTable'] = $joinTable; @@ -595,20 +596,26 @@ private function getMethodCallbacks(\ReflectionMethod $method) /** * Parse the given JoinColumn as array * - * @param Annotation\JoinColumn $joinColumn + * @param Annotation\JoinColumn $joinColumnAnnot * - * @return array + * @return JoinColumnMetadata */ - private function joinColumnToArray(Annotation\JoinColumn $joinColumn) + private function convertJoinColumnAnnotationToJoinColumnMetadata(Annotation\JoinColumn $joinColumnAnnot) { - return [ - 'name' => $joinColumn->name, - 'unique' => $joinColumn->unique, - 'nullable' => $joinColumn->nullable, - 'onDelete' => $joinColumn->onDelete ? strtoupper($joinColumn->onDelete) : $joinColumn->onDelete, - 'columnDefinition' => $joinColumn->columnDefinition, - 'referencedColumnName' => $joinColumn->referencedColumnName, - ]; + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setColumnName($joinColumnAnnot->name); + $joinColumn->setColumnDefinition($joinColumnAnnot->columnDefinition); + $joinColumn->setReferencedColumnName($joinColumnAnnot->referencedColumnName); + $joinColumn->setAliasedName($joinColumnAnnot->fieldName); + $joinColumn->setNullable($joinColumnAnnot->nullable); + $joinColumn->setUnique($joinColumnAnnot->unique); + + if ($joinColumnAnnot->onDelete) { + $joinColumn->setOnDelete(strtoupper($joinColumnAnnot->onDelete)); + } + + return $joinColumn; } /** diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index 58a65795277..f5ed6850280 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -28,6 +28,7 @@ use Doctrine\DBAL\Schema\Column; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\MappingException; /** @@ -227,23 +228,25 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $fkCols = $myFk->getForeignColumns(); $cols = $myFk->getColumns(); - for ($i = 0, $colsCount = count($cols); $i < $colsCount; $i++) { - $associationMapping['joinTable']['joinColumns'][] = [ - 'name' => $cols[$i], - 'referencedColumnName' => $fkCols[$i], - 'onDelete' => null, - ]; + for ($i = 0, $l = count($cols); $i < $l; $i++) { + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setColumnName($cols[$i]); + $joinColumn->setReferencedColumnName($fkCols[$i]); + + $associationMapping['joinTable']['joinColumns'][] = $joinColumn; } $fkCols = $otherFk->getForeignColumns(); $cols = $otherFk->getColumns(); - for ($i = 0, $colsCount = count($cols); $i < $colsCount; $i++) { - $associationMapping['joinTable']['inverseJoinColumns'][] = [ - 'name' => $cols[$i], - 'referencedColumnName' => $fkCols[$i], - 'onDelete' => null, - ]; + for ($i = 0, $l = count($cols); $i < $l; $i++) { + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setColumnName($cols[$i]); + $joinColumn->setReferencedColumnName($fkCols[$i]); + + $associationMapping['joinTable']['inverseJoinColumns'][] = $joinColumn; } } else { $associationMapping['mappedBy'] = $this->getFieldNameForColumn($manyTable->getName(), current($myFk->getColumns()), true); @@ -463,12 +466,13 @@ private function buildToOneAssociationMappings(ClassMetadata $metadata) $associationMapping['id'] = true; } - for ($i = 0, $fkColumnsCount = count($fkColumns); $i < $fkColumnsCount; $i++) { - $associationMapping['joinColumns'][] = [ - 'name' => $fkColumns[$i], - 'referencedColumnName' => $fkForeignColumns[$i], - 'onDelete' => null, - ]; + for ($i = 0, $l = count($fkColumns); $i < $l; $i++) { + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setColumnName($fkColumns[$i]); + $joinColumn->setReferencedColumnName($fkForeignColumns[$i]); + + $associationMapping['joinColumns'][] = $joinColumn; } // Here we need to check if $fkColumns are the same as $primaryKeys diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 2125c221795..1ce0b8cfd24 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -24,6 +24,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; +use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\MappingException; use SimpleXMLElement; @@ -364,10 +365,10 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $joinColumns = []; if (isset($oneToOneElement->{'join-column'})) { - $joinColumns[] = $this->joinColumnToArray($oneToOneElement->{'join-column'}); + $joinColumns[] = $this->convertJoinColumnElementToJoinColumnMetadata($oneToOneElement->{'join-column'}); } else if (isset($oneToOneElement->{'join-columns'})) { foreach ($oneToOneElement->{'join-columns'}->{'join-column'} as $joinColumnElement) { - $joinColumns[] = $this->joinColumnToArray($joinColumnElement); + $joinColumns[] = $this->convertJoinColumnElementToJoinColumnMetadata($joinColumnElement); } } @@ -458,10 +459,10 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $joinColumns = []; if (isset($manyToOneElement->{'join-column'})) { - $joinColumns[] = $this->joinColumnToArray($manyToOneElement->{'join-column'}); + $joinColumns[] = $this->convertJoinColumnElementToJoinColumnMetadata($manyToOneElement->{'join-column'}); } else if (isset($manyToOneElement->{'join-columns'})) { foreach ($manyToOneElement->{'join-columns'}->{'join-column'} as $joinColumnElement) { - $joinColumns[] = $this->joinColumnToArray($joinColumnElement); + $joinColumns[] = $this->convertJoinColumnElementToJoinColumnMetadata($joinColumnElement); } } @@ -514,11 +515,11 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } foreach ($joinTableElement->{'join-columns'}->{'join-column'} as $joinColumnElement) { - $joinTable['joinColumns'][] = $this->joinColumnToArray($joinColumnElement); + $joinTable['joinColumns'][] = $this->convertJoinColumnElementToJoinColumnMetadata($joinColumnElement); } foreach ($joinTableElement->{'inverse-join-columns'}->{'join-column'} as $joinColumnElement) { - $joinTable['inverseJoinColumns'][] = $this->joinColumnToArray($joinColumnElement); + $joinTable['inverseJoinColumns'][] = $this->convertJoinColumnElementToJoinColumnMetadata($joinColumnElement); } $mapping['joinTable'] = $joinTable; @@ -577,7 +578,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $joinColumns = []; foreach ($overrideElement->{'join-columns'}->{'join-column'} as $joinColumnElement) { - $joinColumns[] = $this->joinColumnToArray($joinColumnElement); + $joinColumns[] = $this->convertJoinColumnElementToJoinColumnMetadata($joinColumnElement); } $override['joinColumns'] = $joinColumns; @@ -595,13 +596,13 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) if (isset($joinTableElement->{'join-columns'})) { foreach ($joinTableElement->{'join-columns'}->{'join-column'} as $joinColumnElement) { - $joinTable['joinColumns'][] = $this->joinColumnToArray($joinColumnElement); + $joinTable['joinColumns'][] = $this->convertJoinColumnElementToJoinColumnMetadata($joinColumnElement); } } if (isset($joinTableElement->{'inverse-join-columns'})) { foreach ($joinTableElement->{'inverse-join-columns'}->{'join-column'} as $joinColumnElement) { - $joinTable['inverseJoinColumns'][] = $this->joinColumnToArray($joinColumnElement); + $joinTable['inverseJoinColumns'][] = $this->convertJoinColumnElementToJoinColumnMetadata($joinColumnElement); } } @@ -691,28 +692,33 @@ private function _parseOptions(SimpleXMLElement $options) * * @param SimpleXMLElement $joinColumnElement The XML element. * - * @return array The mapping array. + * @return JoinColumnMetadata */ - private function joinColumnToArray(SimpleXMLElement $joinColumnElement) + private function convertJoinColumnElementToJoinColumnMetadata(SimpleXMLElement $joinColumnElement) { - $joinColumn = [ - 'name' => (string) $joinColumnElement['name'], - 'referencedColumnName' => (string) $joinColumnElement['referenced-column-name'], - 'onDelete' => isset($joinColumnElement['on-delete']) - ? strtoupper((string) $joinColumnElement['on-delete']) - : null, - ]; + $joinColumn = new JoinColumnMetadata(); - if (isset($joinColumnElement['unique'])) { - $joinColumn['unique'] = $this->evaluateBoolean($joinColumnElement['unique']); + $joinColumn->setColumnName((string) $joinColumnElement['name']); + $joinColumn->setReferencedColumnName((string) $joinColumnElement['referenced-column-name']); + + if (isset($joinColumnElement['column-definition'])) { + $joinColumn->setColumnDefinition((string) $joinColumnElement['column-definition']); + } + + if (isset($joinColumnElement['field-name'])) { + $joinColumn->setAliasedName((string) $joinColumnElement['field-name']); } if (isset($joinColumnElement['nullable'])) { - $joinColumn['nullable'] = $this->evaluateBoolean($joinColumnElement['nullable']); + $joinColumn->setNullable($this->evaluateBoolean($joinColumnElement['nullable'])); } - if (isset($joinColumnElement['column-definition'])) { - $joinColumn['columnDefinition'] = (string) $joinColumnElement['column-definition']; + if (isset($joinColumnElement['unique'])) { + $joinColumn->setUnique($this->evaluateBoolean($joinColumnElement['unique'])); + } + + if (isset($joinColumnElement['on-delete'])) { + $joinColumn->setOnDelete(strtoupper((string) $joinColumnElement['on-delete'])); } return $joinColumn; diff --git a/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php b/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php index e2a4ce1c6eb..8d2d0c43a4c 100644 --- a/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php @@ -27,6 +27,11 @@ class JoinColumnMetadata extends ColumnMetadata /** @var string */ private $aliasedName; + /** + * @var boolean + */ + protected $nullable = true; + /** @var string */ private $onDelete; @@ -75,6 +80,11 @@ public function getOnDelete() */ public function setOnDelete($onDelete) { - $this->onDelete = $onDelete; + $this->onDelete = $onDelete ? strtoupper($onDelete) : $onDelete; + } + + public function isOnDeleteCascade() + { + return $this->onDelete === 'CASCADE'; } } diff --git a/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php index 7a462ccf981..2986d14fbd7 100644 --- a/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php @@ -27,7 +27,7 @@ class ToOneAssociationMetadata extends AssociationMetadata private $joinColumns = []; /** - * @return array + * @return array */ public function getJoinColumns() { diff --git a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php index 04742a6867b..f471a8d2e26 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php @@ -51,7 +51,7 @@ public function delete(PersistentCollection $collection) $class = $this->em->getClassMetadata($mapping['sourceEntity']); foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) { - $types[] = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $class, $this->em); + $types[] = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $class, $this->em); } $this->conn->executeUpdate($this->getDeleteSQL($collection), $this->getDeleteSQLParameters($collection), $types); @@ -129,10 +129,10 @@ public function count(PersistentCollection $collection) : $association['joinTable']['joinColumns']; foreach ($joinColumns as $joinColumn) { - $columnName = $this->platform->quoteIdentifier($joinColumn['name']); - $referencedName = $joinColumn['referencedColumnName']; + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $referencedName = $joinColumn->getReferencedColumnName(); - $conditions[] = 't.' . $columnName . ' = ?'; + $conditions[] = 't.' . $quotedColumnName . ' = ?'; $params[] = $id[$sourceClass->getFieldForColumn($referencedName)]; $types[] = PersisterHelper::getTypeOfColumn($referencedName, $sourceClass, $this->em); } @@ -368,10 +368,10 @@ protected function getOnConditionSQL($mapping) $conditions = []; foreach ($joinColumns as $joinColumn) { - $joinColumnName = $this->platform->quoteIdentifier($joinColumn['name']); - $refColumnName = $this->platform->quoteIdentifier($joinColumn['referencedColumnName']); + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $quotedReferencedColumnName = $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()); - $conditions[] = ' t.' . $joinColumnName . ' = ' . 'te.' . $refColumnName; + $conditions[] = ' t.' . $quotedColumnName . ' = ' . 'te.' . $quotedReferencedColumnName; } return $conditions; @@ -390,7 +390,7 @@ protected function getDeleteSQL(PersistentCollection $collection) $joinTable = $this->quoteStrategy->getJoinTableName($mapping, $class, $this->platform); foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) { - $columns[] = $this->platform->quoteIdentifier($joinColumn['name']); + $columns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); } return 'DELETE FROM ' . $joinTable @@ -441,18 +441,19 @@ protected function getDeleteRowSQL(PersistentCollection $collection) $types = []; foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) { - $columns[] = $this->platform->quoteIdentifier($joinColumn['name']); - $types[] = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $class, $this->em); + $columns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $types[] = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $class, $this->em); } foreach ($mapping['joinTable']['inverseJoinColumns'] as $joinColumn) { - $columns[] = $this->platform->quoteIdentifier($joinColumn['name']); - $types[] = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); + $columns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $types[] = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); } + $quotedJoinTableName = $this->quoteStrategy->getJoinTableName($mapping, $class, $this->platform); + return [ - 'DELETE FROM ' . $this->quoteStrategy->getJoinTableName($mapping, $class, $this->platform) - . ' WHERE ' . implode(' = ? AND ', $columns) . ' = ?', + 'DELETE FROM ' . $quotedJoinTableName . ' WHERE ' . implode(' = ? AND ', $columns) . ' = ?', $types, ]; } @@ -483,27 +484,28 @@ protected function getDeleteRowSQLParameters(PersistentCollection $collection, $ */ protected function getInsertRowSQL(PersistentCollection $collection) { - $columns = []; - $types = []; $mapping = $collection->getMapping(); $class = $this->em->getClassMetadata($mapping['sourceEntity']); $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); + $columns = []; + $types = []; foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) { - $columns[] = $this->platform->quoteIdentifier($joinColumn['name']); - $types[] = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $class, $this->em); + $columns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $types[] = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $class, $this->em); } foreach ($mapping['joinTable']['inverseJoinColumns'] as $joinColumn) { - $columns[] = $this->platform->quoteIdentifier($joinColumn['name']); - $types[] = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); + $columns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $types[] = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); } + $quotedJoinTableName = $this->quoteStrategy->getJoinTableName($mapping, $class, $this->platform); + $columnNamesAsString = implode(', ', $columns); + $columnValuesAsString = implode(', ', array_fill(0, count($columns), '?')); + return [ - 'INSERT INTO ' . $this->quoteStrategy->getJoinTableName($mapping, $class, $this->platform) - . ' (' . implode(', ', $columns) . ')' - . ' VALUES' - . ' (' . implode(', ', array_fill(0, count($columns), '?')) . ')', + sprintf('INSERT INTO %s (%s) VALUES (%s)', $quotedJoinTableName, $columnNamesAsString, $columnValuesAsString), $types, ]; } @@ -543,13 +545,13 @@ private function collectJoinTableColumnParameters(PersistentCollection $collecti $targetIdentifier = $this->uow->getEntityIdentifier($element); foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) { - $fieldName = $owningClass->getFieldForColumn($joinColumn['referencedColumnName']); + $fieldName = $owningClass->getFieldForColumn($joinColumn->getReferencedColumnName()); $params[] = $owningIdentifier[$fieldName]; } foreach ($mapping['joinTable']['inverseJoinColumns'] as $joinColumn) { - $fieldName = $targetClass->getFieldForColumn($joinColumn['referencedColumnName']); + $fieldName = $targetClass->getFieldForColumn($joinColumn->getReferencedColumnName()); $params[] = $targetIdentifier[$fieldName]; } @@ -600,28 +602,31 @@ private function getJoinTableRestrictionsWithKey(PersistentCollection $collectio if ($joinNeeded) { // extra join needed if indexBy is not a @id $joinConditions = []; - foreach ($joinColumns as $joinTableColumn) { - $joinConditions[] = 't.' . $joinTableColumn['name'] . ' = tr.' . $joinTableColumn['referencedColumnName']; + foreach ($joinColumns as $joinColumn) { + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $quotedReferencedColumnName = $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()); + + $joinConditions[] = ' t.' . $quotedColumnName . ' = ' . 'tr.' . $quotedReferencedColumnName; } $tableName = $this->quoteStrategy->getTableName($targetClass, $this->platform); $quotedJoinTable .= ' JOIN ' . $tableName . ' tr ON ' . implode(' AND ', $joinConditions); $columnName = $targetClass->getColumnName($indexBy); - $whereClauses[] = 'tr.' . $columnName . ' = ?'; + $whereClauses[] = 'tr.' . $this->platform->quoteIdentifier($columnName) . ' = ?'; $params[] = $key; $types[] = PersisterHelper::getTypeOfColumn($columnName, $targetClass, $this->em); } foreach ($mapping[$sourceRelationMode] as $joinTableColumn => $column) { - $whereClauses[] = 't.' . $joinTableColumn . ' = ?'; + $whereClauses[] = 't.' . $this->platform->quoteIdentifier($joinTableColumn) . ' = ?'; $params[] = $id[$sourceClass->getFieldForColumn($column)]; $types[] = PersisterHelper::getTypeOfColumn($column, $sourceClass, $this->em); } if ( ! $joinNeeded) { foreach ($mapping[$targetRelationMode] as $joinTableColumn => $column) { - $whereClauses[] = 't.' . $joinTableColumn . ' = ?'; + $whereClauses[] = 't.' . $this->platform->quoteIdentifier($joinTableColumn) . ' = ?'; $params[] = $key; $types[] = PersisterHelper::getTypeOfColumn($column, $targetClass, $this->em); } @@ -675,15 +680,21 @@ private function getJoinTableRestrictions(PersistentCollection $collection, $ele $types = []; foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) { - $whereClauses[] = ($addFilters ? 't.' : '') . $this->platform->quoteIdentifier($joinColumn['name']) . ' = ?'; - $params[] = $sourceId[$sourceClass->getFieldForColumn($joinColumn['referencedColumnName'])]; - $types[] = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $sourceClass, $this->em); + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $referencedColumnName = $joinColumn->getReferencedColumnName(); + + $whereClauses[] = ($addFilters ? 't.' : '') . $quotedColumnName . ' = ?'; + $params[] = $sourceId[$sourceClass->getFieldForColumn($referencedColumnName)]; + $types[] = PersisterHelper::getTypeOfColumn($referencedColumnName, $sourceClass, $this->em); } foreach ($mapping['joinTable']['inverseJoinColumns'] as $joinColumn) { - $whereClauses[] = ($addFilters ? 't.' : '') . $this->platform->quoteIdentifier($joinColumn['name']) . ' = ?'; - $params[] = $targetId[$targetClass->getFieldForColumn($joinColumn['referencedColumnName'])]; - $types[] = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $referencedColumnName = $joinColumn->getReferencedColumnName(); + + $whereClauses[] = ($addFilters ? 't.' : '') . $quotedColumnName . ' = ?'; + $params[] = $targetId[$targetClass->getFieldForColumn($referencedColumnName)]; + $types[] = PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em); } if ($addFilters) { diff --git a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php index 45816a87447..99deee158e3 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php @@ -213,8 +213,8 @@ private function deleteEntityCollection(PersistentCollection $collection) $parameters = []; foreach ($targetClass->associationMappings[$mapping['mappedBy']]['joinColumns'] as $joinColumn) { - $columns[] = $this->platform->quoteIdentifier($joinColumn['name']); - $parameters[] = $identifier[$sourceClass->getFieldForColumn($joinColumn['referencedColumnName'])]; + $columns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $parameters[] = $identifier[$sourceClass->getFieldForColumn($joinColumn->getReferencedColumnName())]; } $statement = 'DELETE FROM ' . $this->quoteStrategy->getTableName($targetClass, $this->platform) diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 21b8ab1ee43..1e9568639ca 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -267,10 +267,7 @@ public function executeInserts() $paramIndex = 1; foreach ($insertData[$tableName] as $columnName => $value) { - $type = $this->columns[$columnName] instanceof ColumnMetadata - ? $this->columns[$columnName]->getType() - : $this->columns[$columnName]['type'] - ; + $type = $this->columns[$columnName]->getType(); $stmt->bindValue($paramIndex++, $value, $type); } @@ -280,12 +277,11 @@ public function executeInserts() if ($isPostInsertId) { $generatedId = $idGenerator->generate($this->em, $entity); - $id = [ - $this->class->identifier[0] => $generatedId - ]; + $id = [$this->class->identifier[0] => $generatedId]; + $postInsertIds[] = [ 'generatedId' => $generatedId, - 'entity' => $entity, + 'entity' => $entity, ]; } else { $id = $this->class->getIdentifierValues($entity); @@ -410,17 +406,10 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat $params = []; foreach ($updateData as $columnName => $value) { - $column = $this->columns[$columnName]; - - if ($column instanceof ColumnMetadata) { - $quotedColumnName = $this->platform->quoteIdentifier($column->getColumnName()); - $type = $column->getType(); - $placeholder = $type->convertToDatabaseValueSQL('?', $this->platform); - } else { - $quotedColumnName = $this->platform->quoteIdentifier($column['name']); - $type = $column['type']; - $placeholder = $type->convertToDatabaseValueSQL('?', $this->platform); - } + $column = $this->columns[$columnName]; + $quotedColumnName = $this->platform->quoteIdentifier($column->getColumnName()); + $type = $column->getType(); + $placeholder = $type->convertToDatabaseValueSQL('?', $this->platform); $set[] = $quotedColumnName . ' = ' . $placeholder; $params[] = $value; @@ -431,35 +420,23 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat $identifier = $this->em->getUnitOfWork()->getEntityIdentifier($entity); foreach ($this->class->identifier as $idField) { + $params[] = $identifier[$idField]; + if ( ! isset($this->class->associationMappings[$idField])) { $property = $this->class->getProperty($idField); - $params[] = $identifier[$idField]; $types[] = $property->getType(); $where[] = $this->platform->quoteIdentifier($property->getColumnName()); continue; } - $params[] = $identifier[$idField]; - $where[] = $this->class->associationMappings[$idField]['joinColumns'][0]['name']; - - $targetMapping = $this->em->getClassMetadata($this->class->associationMappings[$idField]['targetEntity']); - $property = $targetMapping->getProperty($targetMapping->identifier[0]); - - if ($property) { - $types[] = $property->getType(); - - continue; - } - - if (isset($targetMapping->associationMappings[$targetMapping->identifier[0]])) { - $types[] = $targetMapping->associationMappings[$targetMapping->identifier[0]]['type']; + $association = $this->class->associationMappings[$idField]; + $targetClass = $this->em->getClassMetadata($association['targetEntity']); + $joinColumn = reset($association['joinColumns']); - continue; - } - - throw ORMException::unrecognizedField($targetMapping->identifier[0]); + $where[] = $joinColumn->getColumnName(); + $types[] = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); } if ($versioned) { @@ -537,17 +514,17 @@ protected function deleteJoinTableRecords($identifier) $isOnDeleteCascade = false; foreach ($joinColumns as $joinColumn) { - $keys[] = $this->platform->quoteIdentifier($joinColumn['name']); + $keys[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); - if ($joinColumn['onDelete'] === 'CASCADE') { + if ($joinColumn->isOnDeleteCascade()) { $isOnDeleteCascade = true; } } foreach ($otherColumns as $joinColumn) { - $otherKeys[] = $this->platform->quoteIdentifier($joinColumn['name']); + $otherKeys[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); - if ($joinColumn['onDelete'] === 'CASCADE') { + if ($joinColumn->isOnDeleteCascade()) { $isOnDeleteCascade = true; } } @@ -556,12 +533,12 @@ protected function deleteJoinTableRecords($identifier) continue; } - $joinTableName = $this->quoteStrategy->getJoinTableName($association, $this->class, $this->platform); + $quotedJoinTableName = $this->quoteStrategy->getJoinTableName($association, $this->class, $this->platform); - $this->conn->delete($joinTableName, array_combine($keys, $identifier)); + $this->conn->delete($quotedJoinTableName, array_combine($keys, $identifier)); if ($selfReferential) { - $this->conn->delete($joinTableName, array_combine($otherKeys, $identifier)); + $this->conn->delete($quotedJoinTableName, array_combine($otherKeys, $identifier)); } } } @@ -683,16 +660,17 @@ protected function prepareUpdateData($entity) $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); foreach ($assoc['joinColumns'] as $joinColumn) { - $sourceColumn = $joinColumn['name']; - $targetColumn = $joinColumn['referencedColumnName']; - $targetField = $targetClass->getFieldForColumn($targetColumn); + $columnName = $joinColumn->getColumnName(); + $referencedColumnName = $joinColumn->getReferencedColumnName(); + $targetField = $targetClass->getFieldForColumn($referencedColumnName); - $this->columns[$sourceColumn] = array_merge( - $joinColumn, - ['type' => PersisterHelper::getTypeOfColumn($targetColumn, $targetClass, $this->em)] + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) ); - $result[$owningTable][$sourceColumn] = $newValId ? $newValId[$targetField] : null; + $this->columns[$columnName] = $joinColumn; + + $result[$owningTable][$columnName] = $newValId ? $newValId[$targetField] : null; } } @@ -1014,34 +992,36 @@ private function getManyToManyStatement(array $assoc, $sourceEntity, $offset = n $quotedJoinTable = $this->quoteStrategy->getJoinTableName($association, $class, $this->platform); foreach ($joinColumns as $joinColumn) { - $sourceKeyColumn = $joinColumn['referencedColumnName']; - $quotedKeyColumn = $this->platform->quoteIdentifier($joinColumn['name']);; + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $referencedColumnName = $joinColumn->getReferencedColumnName(); switch (true) { case $sourceClass->containsForeignIdentifier: - $field = $sourceClass->getFieldForColumn($sourceKeyColumn); + $field = $sourceClass->getFieldForColumn($referencedColumnName); $value = $sourceClass->reflFields[$field]->getValue($sourceEntity); if (isset($sourceClass->associationMappings[$field])) { + $targetClass = $this->em->getClassMetadata($sourceClass->associationMappings[$field]['targetEntity']); + $value = $this->em->getUnitOfWork()->getEntityIdentifier($value); - $value = $value[$this->em->getClassMetadata($sourceClass->associationMappings[$field]['targetEntity'])->identifier[0]]; + $value = $value[$targetClass->identifier[0]]; } break; - case isset($sourceClass->fieldNames[$sourceKeyColumn]): - $field = $sourceClass->fieldNames[$sourceKeyColumn]; + case isset($sourceClass->fieldNames[$referencedColumnName]): + $field = $sourceClass->fieldNames[$referencedColumnName]; $value = $sourceClass->reflFields[$field]->getValue($sourceEntity); break; default: throw MappingException::joinColumnMustPointToMappedField( - $sourceClass->name, $sourceKeyColumn + $sourceClass->name, $referencedColumnName ); } - $criteria[$quotedJoinTable . '.' . $quotedKeyColumn] = $value; + $criteria[$quotedJoinTable . '.' . $quotedColumnName] = $value; $parameters[] = [ 'value' => $value, @@ -1187,9 +1167,9 @@ protected final function getOrderBySQL(array $orderBy, $baseTableAlias) $tableAlias = $this->getSQLTableAlias($class->getTableName()); foreach ($this->class->associationMappings[$fieldName]['joinColumns'] as $joinColumn) { - $columnName = $this->platform->quoteIdentifier($joinColumn['name']); + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); - $orderByList[] = $tableAlias . '.' . $columnName . ' ' . $orientation; + $orderByList[] = $tableAlias . '.' . $quotedColumnName . ' ' . $orientation; } continue; @@ -1296,9 +1276,9 @@ protected function getSelectColumnsSQL() $joinCondition[] = sprintf( '%s.%s = %s.%s', $this->getSQLTableAlias($sourceClass->getTableName()), - $this->platform->quoteIdentifier($joinColumn['name']), + $this->platform->quoteIdentifier($joinColumn->getColumnName()), $tableAlias, - $this->platform->quoteIdentifier($joinColumn['referencedColumnName']) + $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()) ); } @@ -1312,14 +1292,15 @@ protected function getSelectColumnsSQL() $sourceClass = $this->em->getClassMetadata($association['sourceEntity']); $targetClass = $this->em->getClassMetadata($association['targetEntity']); + $tableAlias = $this->getSQLTableAlias($targetClass->getTableName()); foreach ($association['joinColumns'] as $joinColumn) { $joinCondition[] = sprintf( '%s.%s = %s.%s', $this->getSQLTableAlias($sourceClass->getTableName(), $assocAlias), - $this->platform->quoteIdentifier($joinColumn['name']), - $this->getSQLTableAlias($targetClass->getTableName()), - $this->platform->quoteIdentifier($joinColumn['referencedColumnName']) + $this->platform->quoteIdentifier($joinColumn->getColumnName()), + $tableAlias, + $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()) ); } } @@ -1355,13 +1336,14 @@ protected function getSelectColumnAssociationSQL($field, $assoc, ClassMetadata $ $sqlTableAlias = $this->getSQLTableAlias($class->getTableName(), ($alias == 'r' ? '' : $alias)); foreach ($assoc['joinColumns'] as $joinColumn) { - $quotedColumn = $this->platform->quoteIdentifier($joinColumn['name']); - $resultColumnName = $this->getSQLColumnAlias($joinColumn['name']); - $type = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); + $columnName = $joinColumn->getColumnName(); + $quotedColumnName = $this->platform->quoteIdentifier($columnName); + $resultColumnName = $this->getSQLColumnAlias($columnName); + $type = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); - $this->currentPersisterContext->rsm->addMetaResult($alias, $resultColumnName, $joinColumn['name'], $isIdentifier, $type); + $this->currentPersisterContext->rsm->addMetaResult($alias, $resultColumnName, $columnName, $isIdentifier, $type); - $columnList[] = sprintf('%s.%s AS %s', $sqlTableAlias, $quotedColumn, $resultColumnName); + $columnList[] = sprintf('%s.%s AS %s', $sqlTableAlias, $quotedColumnName, $resultColumnName); } return implode(', ', $columnList); @@ -1382,20 +1364,23 @@ protected function getSelectManyToManyJoinSQL(array $manyToMany) $sourceTableAlias = $this->getSQLTableAlias($this->class->getTableName()); if ( ! $manyToMany['isOwningSide']) { - $targetEntity = $this->em->getClassMetadata($manyToMany['targetEntity']); - $association = $targetEntity->associationMappings[$manyToMany['mappedBy']]; + $targetEntity = $this->em->getClassMetadata($manyToMany['targetEntity']); + $association = $targetEntity->associationMappings[$manyToMany['mappedBy']]; } - $joinTableName = $this->quoteStrategy->getJoinTableName($association, $this->class, $this->platform); - $joinColumns = ($manyToMany['isOwningSide']) + $joinTableName = $this->quoteStrategy->getJoinTableName($association, $this->class, $this->platform); + $joinColumns = ($manyToMany['isOwningSide']) ? $association['joinTable']['inverseJoinColumns'] : $association['joinTable']['joinColumns']; foreach ($joinColumns as $joinColumn) { - $quotedSourceColumn = $this->platform->quoteIdentifier($joinColumn['name']); - $quotedTargetColumn = $this->platform->quoteIdentifier($joinColumn['referencedColumnName']); - - $conditions[] = $sourceTableAlias . '.' . $quotedTargetColumn . ' = ' . $joinTableName . '.' . $quotedSourceColumn; + $conditions[] = sprintf( + '%s.%s = %s.%s', + $sourceTableAlias, + $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()), + $joinTableName, + $this->platform->quoteIdentifier($joinColumn->getColumnName()) + ); } return ' INNER JOIN ' . $joinTableName . ' ON ' . implode(' AND ', $conditions); @@ -1477,15 +1462,16 @@ protected function getInsertColumnList() $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); foreach ($assoc['joinColumns'] as $joinColumn) { - $sourceColumn = $joinColumn['name']; - $targetColumn = $joinColumn['referencedColumnName']; + $columnName = $joinColumn->getColumnName(); + $referencedColumnName = $joinColumn->getReferencedColumnName(); - $columns[] = $sourceColumn; + $columns[] = $columnName; - $this->columns[$sourceColumn] = array_merge( - $joinColumn, - ['type' => PersisterHelper::getTypeOfColumn($targetColumn, $targetClass, $this->em)] + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) ); + + $this->columns[$columnName] = $joinColumn; } } @@ -1721,16 +1707,16 @@ private function getSelectConditionStatementColumnSQL($field, $assoc = null) $association = $assoc; } - $joinTableName = $this->quoteStrategy->getJoinTableName($association, $class, $this->platform); - $joinColumns = $assoc['isOwningSide'] + $quotedJoinTableName = $this->quoteStrategy->getJoinTableName($association, $class, $this->platform); + $joinColumns = $assoc['isOwningSide'] ? $association['joinTable']['joinColumns'] : $association['joinTable']['inverseJoinColumns']; foreach ($joinColumns as $joinColumn) { - $columnName = $this->platform->quoteIdentifier($joinColumn['name']); + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); - $columns[] = $joinTableName . '.' . $columnName; + $columns[] = $quotedJoinTableName . '.' . $quotedColumnName; } } else { @@ -1744,16 +1730,16 @@ private function getSelectConditionStatementColumnSQL($field, $assoc = null) $tableAlias = $this->getSQLTableAlias($class->getTableName()); foreach ($association['joinColumns'] as $joinColumn) { - $columnName = $this->platform->quoteIdentifier($joinColumn['name']); + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); - $columns[] = $tableAlias . '.' . $columnName; + $columns[] = $tableAlias . '.' . $quotedColumnName; } } return $columns; } - if ($assoc !== null && strpos($field, " ") === false && strpos($field, "(") === false) { + if ($assoc !== null && strpos($field, ' ') === false && strpos($field, '(') === false) { // very careless developers could potentially open up this normally hidden api for userland attacks, // therefore checking for spaces and function calls which are not allowed. @@ -2071,9 +2057,11 @@ protected function getJoinSQLForJoinColumns($joinColumns) { // if one of the join columns is nullable, return left join foreach ($joinColumns as $joinColumn) { - if ( ! isset($joinColumn['nullable']) || $joinColumn['nullable']) { - return 'LEFT JOIN'; + if (! $joinColumn->isNullable()) { + continue; } + + return 'LEFT JOIN'; } return 'INNER JOIN'; @@ -2084,7 +2072,11 @@ protected function getJoinSQLForJoinColumns($joinColumns) */ public function getSQLColumnAlias($columnName) { - return $this->quoteStrategy->getColumnAlias($columnName, $this->currentPersisterContext->sqlAliasCounter++, $this->platform); + return $this->quoteStrategy->getColumnAlias( + $columnName, + $this->currentPersisterContext->sqlAliasCounter++, + $this->platform + ); } /** diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index a9588afc349..f13fb8629d7 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -129,10 +129,7 @@ public function executeInserts() $paramIndex = 1; foreach ($insertData[$rootTableName] as $columnName => $value) { - $type = $this->columns[$columnName] instanceof ColumnMetadata - ? $this->columns[$columnName]->getType() - : $this->columns[$columnName]['type'] - ; + $type = $this->columns[$columnName]->getType(); $rootTableStmt->bindValue($paramIndex++, $value, $type); } @@ -145,7 +142,7 @@ public function executeInserts() $postInsertIds[] = [ 'generatedId' => $generatedId, - 'entity' => $entity, + 'entity' => $entity, ]; } else { $id = $this->em->getUnitOfWork()->getEntityIdentifier($entity); @@ -168,10 +165,7 @@ public function executeInserts() $type = Type::getType('string'); if (isset($this->columns[$idName])) { - $type = $this->columns[$idName] instanceof ColumnMetadata - ? $this->columns[$idName]->getType() - : $this->columns[$idName]['type'] - ; + $type = $this->columns[$idName]->getType(); } $stmt->bindValue($paramIndex++, $idVal, $type); @@ -179,10 +173,7 @@ public function executeInserts() foreach ($data as $columnName => $value) { if (!is_array($id) || !isset($id[$columnName])) { - $type = $this->columns[$columnName] instanceof ColumnMetadata - ? $this->columns[$columnName]->getType() - : $this->columns[$columnName]['type'] - ; + $type = $this->columns[$columnName]->getType(); $stmt->bindValue($paramIndex++, $value, $type); } @@ -435,9 +426,11 @@ protected function getSelectColumnsSQL() $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); foreach ($mapping['joinColumns'] as $joinColumn) { - $type = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); - - $columnList[] = $this->getSelectJoinColumnSQL($joinColumn['tableName'], $joinColumn['name'], $type); + $columnList[] = $this->getSelectJoinColumnSQL( + $joinColumn->getTableName(), + $joinColumn->getColumnName(), + PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) + ); } } @@ -477,9 +470,11 @@ protected function getSelectColumnsSQL() $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); foreach ($mapping['joinColumns'] as $joinColumn) { - $type = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); - - $columnList[] = $this->getSelectJoinColumnSQL($joinColumn['tableName'], $joinColumn['name'], $type); + $columnList[] = $this->getSelectJoinColumnSQL( + $joinColumn->getTableName(), + $joinColumn->getColumnName(), + PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) + ); } } } @@ -528,15 +523,16 @@ protected function getInsertColumnList() $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); foreach ($assoc['joinColumns'] as $joinColumn) { - $sourceColumn = $joinColumn['name']; - $targetColumn = $joinColumn['referencedColumnName']; + $columnName = $joinColumn->getColumnName(); + $referencedColumnName = $joinColumn->getReferencedColumnName(); - $columns[] = $sourceColumn; - - $this->columns[$sourceColumn] = array_merge( - $joinColumn, - ['type' => PersisterHelper::getTypeOfColumn($targetColumn, $targetClass, $this->em)] + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) ); + + $columns[] = $columnName; + + $this->columns[$columnName] = $joinColumn; } } diff --git a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php index f9e90030d5a..db6856852f7 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php @@ -83,9 +83,11 @@ protected function getSelectColumnsSQL() $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); foreach ($mapping['joinColumns'] as $joinColumn) { - $type = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); - - $columnList[] = $this->getSelectJoinColumnSQL($joinColumn['tableName'], $joinColumn['name'], $type); + $columnList[] = $this->getSelectJoinColumnSQL( + $joinColumn->getTableName(), + $joinColumn->getColumnName(), + PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) + ); } } } diff --git a/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php index b4c59cebd1e..d62394e593b 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php @@ -68,7 +68,7 @@ public function getSql(SqlWalker $sqlWalker) $joinColumn = null; foreach ($assoc['joinColumns'] as $mapping) { - if ($mapping['referencedColumnName'] === $property->getColumnName()) { + if ($mapping->getReferencedColumnName() === $property->getColumnName()) { $joinColumn = $mapping; break; @@ -83,10 +83,10 @@ public function getSql(SqlWalker $sqlWalker) // The table with the relation may be a subclass, so get the table name from the association definition $tableName = $sqlWalker->getEntityManager()->getClassMetadata($assoc['sourceEntity'])->getTableName(); - $tableAlias = $sqlWalker->getSQLTableAlias($tableName, $dqlAlias); - $columnName = $platform->quoteIdentifier($joinColumn['name']); + $tableAlias = $sqlWalker->getSQLTableAlias($tableName, $dqlAlias); + $quotedColumnName = $platform->quoteIdentifier($joinColumn->getColumnName()); - return $tableAlias . '.' . $columnName; + return $tableAlias . '.' . $quotedColumnName; } /** diff --git a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php index e547a762f57..71795e24ea0 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php @@ -99,12 +99,12 @@ public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) foreach ($joinColumns as $joinColumn) { if ($first) $first = false; else $sql .= ' AND '; - $property = $class->getProperty($class->fieldNames[$joinColumn['referencedColumnName']]); - $sourceColumnName = $platform->quoteIdentifier($property->getColumnName()); - - $sql .= $joinTableAlias . '.' . $joinColumn['name'] - . ' = ' - . $sourceTableAlias . '.' . $sourceColumnName; + $sql .= sprintf('%s.%s = %s.%s', + $joinTableAlias, + $platform->quoteIdentifier($joinColumn->getColumnName()), + $sourceTableAlias, + $platform->quoteIdentifier($joinColumn->getReferencedColumnName()) + ); } } diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index 0b4fd2f6688..61758929b83 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -167,9 +167,9 @@ protected function addAllClassFields($class, $alias, $columnAliasMap = []) $isIdentifier = isset($associationMapping['id']) && $associationMapping['id'] === true; foreach ($associationMapping['joinColumns'] as $joinColumn) { - $columnName = $joinColumn['name']; + $columnName = $joinColumn->getColumnName(); $columnAlias = $platform->getSQLResultCasing($columnAliasMap[$columnName]); - $columnType = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); + $columnType = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); if (isset($this->metaMappings[$columnAlias])) { throw new \InvalidArgumentException("The column '$columnAlias' conflicts with another column in the mapper."); @@ -243,7 +243,7 @@ private function getColumnAliasMap($className, $mode, array $customRenameColumns foreach ($class->associationMappings as $associationMapping) { if ($associationMapping['isOwningSide'] && $associationMapping['type'] & ClassMetadata::TO_ONE) { foreach ($associationMapping['joinColumns'] as $joinColumn) { - $columnName = $joinColumn['name']; + $columnName = $joinColumn->getColumnName(); $columnAlias[$columnName] = $this->getColumnAlias($columnName, $mode, $customRenameColumns); } } @@ -302,13 +302,14 @@ public function addNamedNativeQueryResultClassMapping(ClassMetadata $class, $res foreach ($classMetadata->associationMappings as $associationMapping) { if ($associationMapping['isOwningSide'] && $associationMapping['type'] & ClassMetadata::TO_ONE) { - $targetClass = $this->em->getClassMetadata($associationMapping['targetEntity']); + $targetClass = $this->em->getClassMetadata($associationMapping['targetEntity']); + $isIdentifier = (isset($associationMapping['id']) && $associationMapping['id'] === true); foreach ($associationMapping['joinColumns'] as $joinColumn) { - $columnName = $joinColumn['name']; - $columnType = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); + $columnName = $joinColumn->getColumnName(); + $columnType = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); - $this->addMetaResult($alias, $columnName, $columnName, $classMetadata->isIdentifier($columnName), $columnType); + $this->addMetaResult($alias, $columnName, $columnName, $isIdentifier, $columnType); } } } diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 6dadc1a4da7..9142897cc10 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -689,13 +689,13 @@ public function walkPathExpression($pathExpr) throw QueryException::associationPathCompositeKeyNotSupported(); } - $joinColumn = $mapping['joinColumns'][0]; + $joinColumn = reset($mapping['joinColumns']); if ($this->useSqlTableAliases) { - $sql .= $this->getSQLTableAlias($joinColumn['tableName'], $dqlAlias) . '.'; + $sql .= $this->getSQLTableAlias($joinColumn->getTableName(), $dqlAlias) . '.'; } - $sql .= $this->platform->quoteIdentifier($joinColumn['name']); + $sql .= $this->platform->quoteIdentifier($joinColumn->getColumnName()); break; default: @@ -776,15 +776,20 @@ public function walkSelectClause($selectClause) $isIdentifier = (isset($assoc['id']) && $assoc['id'] === true); foreach ($assoc['joinColumns'] as $joinColumn) { - $sqlTableAlias = $this->getSQLTableAlias($joinColumn['tableName'], $dqlAlias); - $columnName = $this->platform->quoteIdentifier($joinColumn['name']); - $columnAlias = $this->getSQLColumnAlias($joinColumn['name']); - $columnType = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); - - $quotedColumnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); - $sqlSelectExpressions[] = $sqlTableAlias . '.' . $quotedColumnName . ' AS ' . $columnAlias; + $columnName = $joinColumn->getColumnName(); + $quotedColumnName = $this->platform->quoteIdentifier($columnName); + $columnAlias = $this->getSQLColumnAlias($columnName); + $columnType = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); + $sqlTableAlias = $this->getSQLTableAlias($joinColumn->getTableName(), $dqlAlias); + + $sqlSelectExpressions[] = sprintf( + '%s.%s AS %s', + $sqlTableAlias, + $quotedColumnName, + $columnAlias + ); - $this->rsm->addMetaResult($dqlAlias, $columnAlias, $joinColumn['name'], $isIdentifier, $columnType); + $this->rsm->addMetaResult($dqlAlias, $columnAlias, $columnName, $isIdentifier, $columnType); } } @@ -804,16 +809,22 @@ public function walkSelectClause($selectClause) if ($assoc['isOwningSide'] && $assoc['type'] & ClassMetadata::TO_ONE) { $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); + $isIdentifier = (isset($assoc['id']) && $assoc['id'] === true); foreach ($assoc['joinColumns'] as $joinColumn) { - $columnName = $this->platform->quoteIdentifier($joinColumn['name']); - $columnAlias = $this->getSQLColumnAlias($joinColumn['name']); - $columnType = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); - - $quotedColumnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $subClass, $this->platform); - $sqlSelectExpressions[] = $sqlTableAlias . '.' . $quotedColumnName . ' AS ' . $columnAlias; + $columnName = $joinColumn->getColumnName(); + $quotedColumnName = $this->platform->quoteIdentifier($columnName); + $columnAlias = $this->getSQLColumnAlias($columnName); + $columnType = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); + + $sqlSelectExpressions[] = sprintf( + '%s.%s AS %s', + $sqlTableAlias, + $quotedColumnName, + $columnAlias + ); - $this->rsm->addMetaResult($dqlAlias, $columnAlias, $joinColumn['name'], $subClass->isIdentifier($joinColumn['name']), $columnType); + $this->rsm->addMetaResult($dqlAlias, $columnAlias, $columnName, $isIdentifier, $columnType); } } } @@ -944,7 +955,7 @@ public function walkJoinAssociationDeclaration($joinAssociationDeclaration, $joi $assoc = ( ! $relation['isOwningSide']) ? $targetClass->associationMappings[$relation['mappedBy']] : $relation; if ($this->query->getHint(Query::HINT_INTERNAL_ITERATION) == true && (!$this->query->getHint(self::HINT_DISTINCT) || isset($this->selectedClasses[$joinedDqlAlias]))) { - if ($relation['type'] == ClassMetadata::ONE_TO_MANY || $relation['type'] == ClassMetadata::MANY_TO_MANY) { + if ($relation['type'] & ClassMetadata::TO_MANY) { throw QueryException::iterateWithFetchJoinNotAllowed($assoc); } } @@ -959,16 +970,16 @@ public function walkJoinAssociationDeclaration($joinAssociationDeclaration, $joi $conditions = []; foreach ($assoc['joinColumns'] as $joinColumn) { - $quotedSourceColumn = $this->platform->quoteIdentifier($joinColumn['name']); - $quotedTargetColumn = $this->platform->quoteIdentifier($joinColumn['referencedColumnName']); + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $quotedReferencedColumnName = $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()); if ($relation['isOwningSide']) { - $conditions[] = $sourceTableAlias . '.' . $quotedSourceColumn . ' = ' . $targetTableAlias . '.' . $quotedTargetColumn; + $conditions[] = $sourceTableAlias . '.' . $quotedColumnName . ' = ' . $targetTableAlias . '.' . $quotedReferencedColumnName; continue; } - $conditions[] = $sourceTableAlias . '.' . $quotedTargetColumn . ' = ' . $targetTableAlias . '.' . $quotedSourceColumn; + $conditions[] = $sourceTableAlias . '.' . $quotedReferencedColumnName . ' = ' . $targetTableAlias . '.' . $quotedColumnName; } // Apply remaining inheritance restrictions @@ -991,22 +1002,26 @@ public function walkJoinAssociationDeclaration($joinAssociationDeclaration, $joi ]; break; - case ($assoc['type'] == ClassMetadata::MANY_TO_MANY): + case ($assoc['type'] === ClassMetadata::MANY_TO_MANY): // Join relation table $joinTable = $assoc['joinTable']; $joinTableAlias = $this->getSQLTableAlias($joinTable['name'], $joinedDqlAlias); $joinTableName = $this->quoteStrategy->getJoinTableName($assoc, $sourceClass, $this->platform); - $conditions = []; - $relationColumns = ($relation['isOwningSide']) - ? $assoc['joinTable']['joinColumns'] - : $assoc['joinTable']['inverseJoinColumns']; + $conditions = []; + $joinColumns = ($relation['isOwningSide']) ? $joinTable['joinColumns'] : $joinTable['inverseJoinColumns']; - foreach ($relationColumns as $joinColumn) { - $quotedSourceColumn = $this->platform->quoteIdentifier($joinColumn['name']); - $quotedTargetColumn = $this->platform->quoteIdentifier($joinColumn['referencedColumnName']); + foreach ($joinColumns as $joinColumn) { + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $quotedReferencedColumnName = $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()); - $conditions[] = $sourceTableAlias . '.' . $quotedTargetColumn . ' = ' . $joinTableAlias . '.' . $quotedSourceColumn; + $conditions[] = sprintf( + '%s.%s = %s.%s', + $sourceTableAlias, + $quotedReferencedColumnName, + $joinTableAlias, + $quotedColumnName + ); } $sql .= $joinTableName . ' ' . $joinTableAlias . ' ON ' . implode(' AND ', $conditions); @@ -1014,16 +1029,20 @@ public function walkJoinAssociationDeclaration($joinAssociationDeclaration, $joi // Join target table $sql .= ($joinType == AST\Join::JOIN_TYPE_LEFT || $joinType == AST\Join::JOIN_TYPE_LEFTOUTER) ? ' LEFT JOIN ' : ' INNER JOIN '; - $conditions = []; - $relationColumns = ($relation['isOwningSide']) - ? $assoc['joinTable']['inverseJoinColumns'] - : $assoc['joinTable']['joinColumns']; + $conditions = []; + $joinColumns = ($relation['isOwningSide']) ? $joinTable['inverseJoinColumns'] : $joinTable['joinColumns']; - foreach ($relationColumns as $joinColumn) { - $quotedSourceColumn = $this->platform->quoteIdentifier($joinColumn['name']); - $quotedTargetColumn = $this->platform->quoteIdentifier($joinColumn['referencedColumnName']); + foreach ($joinColumns as $joinColumn) { + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $quotedReferencedColumnName = $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()); - $conditions[] = $targetTableAlias . '.' . $quotedTargetColumn . ' = ' . $joinTableAlias . '.' . $quotedSourceColumn; + $conditions[] = sprintf( + '%s.%s = %s.%s', + $targetTableAlias, + $quotedReferencedColumnName, + $joinTableAlias, + $quotedColumnName + ); } // Apply remaining inheritance restrictions @@ -1946,11 +1965,16 @@ public function walkCollectionMemberExpression($collMemberExpr) $joinSqlParts = []; foreach ($joinColumns as $joinColumn) { - $property = $targetClass->getProperty($targetClass->fieldNames[$joinColumn['referencedColumnName']]); - $sourceColumn = $this->platform->quoteIdentifier($joinColumn['name']); - $targetColumn = $this->platform->quoteIdentifier($property->getColumnName()); - - $joinSqlParts[] = $joinTableAlias . '.' . $sourceColumn . ' = ' . $targetTableAlias . '.' . $targetColumn; + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $quotedReferencedColumnName = $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()); + + $joinSqlParts[] = sprintf( + '%s.%s = %s.%s', + $joinTableAlias, + $quotedColumnName, + $targetTableAlias, + $quotedReferencedColumnName + ); } $sql .= implode(' AND ', $joinSqlParts); @@ -1960,11 +1984,16 @@ public function walkCollectionMemberExpression($collMemberExpr) $sqlParts = []; foreach ($joinColumns as $joinColumn) { - $property = $class->getProperty($class->fieldNames[$joinColumn['referencedColumnName']]); - $sourceColumn = $this->platform->quoteIdentifier($joinColumn['name']); - $targetColumn = $this->platform->quoteIdentifier($property->getColumnName()); - - $sqlParts[] = $joinTableAlias . '.' . $sourceColumn . ' = ' . $sourceTableAlias . '.' . $targetColumn; + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $quotedReferencedColumnName = $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()); + + $sqlParts[] = sprintf( + '%s.%s = %s.%s', + $joinTableAlias, + $quotedColumnName, + $sourceTableAlias, + $quotedReferencedColumnName + ); } foreach ($this->quoteStrategy->getIdentifierColumnNames($targetClass, $this->platform) as $targetColumnName) { diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 0fde4459452..869bf5b2a27 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -24,6 +24,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\JoinColumnMetadata; /** * Generic class used to generate PHP5 entity classes from ClassMetadata instances. @@ -1251,7 +1252,7 @@ protected function isAssociationIsNullable(array $associationMapping) } foreach ($joinColumns as $joinColumn) { - if (isset($joinColumn['nullable']) && !$joinColumn['nullable']) { + if (!$joinColumn->isNullable()) { return false; } } @@ -1439,36 +1440,31 @@ protected function generateLifecycleCallbackMethod($name, $methodName, ClassMeta } /** - * @param array $joinColumn + * @param JoinColumnMetadata $joinColumn * * @return string */ - protected function generateJoinColumnAnnotation(array $joinColumn) + protected function generateJoinColumnAnnotation(JoinColumnMetadata $joinColumn) { $joinColumnAnnot = []; - if (isset($joinColumn['name'])) { - $joinColumnAnnot[] = 'name="' . $joinColumn['name'] . '"'; - } - - if (isset($joinColumn['referencedColumnName'])) { - $joinColumnAnnot[] = 'referencedColumnName="' . $joinColumn['referencedColumnName'] . '"'; - } + $joinColumnAnnot[] = 'name="' . $joinColumn->getColumnName() . '"'; + $joinColumnAnnot[] = 'referencedColumnName="' . $joinColumn->getReferencedColumnName() . '"'; - if (isset($joinColumn['unique']) && $joinColumn['unique']) { - $joinColumnAnnot[] = 'unique=' . ($joinColumn['unique'] ? 'true' : 'false'); + if ($joinColumn->isUnique()) { + $joinColumnAnnot[] = 'unique=true'; } - if (isset($joinColumn['nullable'])) { - $joinColumnAnnot[] = 'nullable=' . ($joinColumn['nullable'] ? 'true' : 'false'); + if (!$joinColumn->isNullable()) { + $joinColumnAnnot[] = 'nullable=false'; } - if (isset($joinColumn['onDelete']) && ! empty($joinColumn['onDelete'])) { - $joinColumnAnnot[] = 'onDelete="' . ($joinColumn['onDelete'] . '"'); + if (!empty($joinColumn->getOnDelete())) { + $joinColumnAnnot[] = 'onDelete="' . $joinColumn->getOnDelete() . '"'; } - if (isset($joinColumn['columnDefinition'])) { - $joinColumnAnnot[] = 'columnDefinition="' . $joinColumn['columnDefinition'] . '"'; + if ($joinColumn->getColumnDefinition()) { + $joinColumnAnnot[] = 'columnDefinition="' . $joinColumn->getColumnDefinition() . '"'; } return '@' . $this->annotationsPrefix . 'JoinColumn(' . implode(', ', $joinColumnAnnot) . ')'; diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 517a05a9a09..cf64726a3bf 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Tools\Export\Driver; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\JoinColumnMetadata; /** * ClassMetadata exporter for PHP code. @@ -57,7 +58,7 @@ public function exportClassMetadata(ClassMetadata $metadata) } if ($metadata->customRepositoryClassName) { - $lines[] = "\$metadata->customRepositoryClassName = '" . $metadata->customRepositoryClassName . "';"; + $lines[] = '$metadata->customRepositoryClassName = "' . $metadata->customRepositoryClassName . '";'; } if ($metadata->table) { @@ -68,6 +69,7 @@ public function exportClassMetadata(ClassMetadata $metadata) $discrColumn = $metadata->discriminatorColumn; $lines[] = '$discrColumn = new Mapping\DiscriminatorColumnMetadata();'; + $lines[] = null; $lines[] = '$discrColumn->setTableName("' . $discrColumn->getTableName() . '");'; $lines[] = '$discrColumn->setColumnName("' . $discrColumn->getColumnName() . '");'; $lines[] = '$discrColumn->setColumnDefinition("' . $discrColumn->getColumnDefinition() . '");'; @@ -78,6 +80,7 @@ public function exportClassMetadata(ClassMetadata $metadata) $lines[] = '$discrColumn->setOptions(' . $this->_varExport($discrColumn->getOptions()) . ');'; $lines[] = '$discrColumn->setNullable(' . $this->_varExport($discrColumn->isNullable()) . ');'; $lines[] = '$discrColumn->setUnique(' . $this->_varExport($discrColumn->isUnique()) . ');'; + $lines[] = null; $lines[] = '$metadata->setDiscriminatorColumn($discrColumn);'; } @@ -123,80 +126,99 @@ public function exportClassMetadata(ClassMetadata $metadata) } $method = null; - $associationMappingArray = [ - 'fieldName' => $associationMapping['fieldName'], - 'targetEntity' => $associationMapping['targetEntity'], - 'cascade' => $cascade, - ]; - - if (isset($associationMapping['fetch'])) { - $associationMappingArray['fetch'] = $associationMapping['fetch']; - } - switch ($associationMapping['type'] ) { - case ClassMetadata::ONE_TO_ONE: - $method = 'mapOneToOne'; - $specificMappingArray = [ - 'mappedBy' => $associationMapping['mappedBy'], - 'inversedBy' => $associationMapping['inversedBy'], - 'joinColumns' => $associationMapping['isOwningSide'] ? $associationMapping['joinColumns'] : [], - 'orphanRemoval' => $associationMapping['orphanRemoval'], - ]; + switch (true) { + case ($associationMapping['type'] & ClassMetadata::TO_ONE): + $method = $associationMapping['type'] === ClassMetadata::ONE_TO_ONE + ? 'mapOneToOne' + : 'mapManyToOne'; + + $this->exportJoinColumns($associationMapping['joinColumns'] ?? [], $lines, 'joinColumns'); + + $lines[] = null; + $lines[] = '$metadata->' . $method . '(array('; + $lines[] = ' "fieldName" => "' . $associationMapping['fieldName'] . '",'; + $lines[] = ' "targetEntity" => "' . $associationMapping['targetEntity'] . '",'; + $lines[] = ' "fetch" => "' . $associationMapping['fetch'] . '",'; + $lines[] = ' "mappedBy" => "' . $associationMapping['mappedBy'] . '",'; + $lines[] = ' "inversedBy" => "' . $associationMapping['inversedBy'] . '",'; + $lines[] = ' "joinColumns" => $joinColumns,'; + $lines[] = ' "cascade" => ' . $this->_varExport($cascade) . ','; + $lines[] = ' "orphanRemoval" => ' . $this->_varExport($associationMapping['orphanRemoval']) . ','; + $lines[] = '));'; break; - case ClassMetadata::MANY_TO_ONE: - $method = 'mapManyToOne'; - $specificMappingArray = [ - 'mappedBy' =>$associationMapping['mappedBy'], - 'inversedBy' => $associationMapping['inversedBy'], - 'joinColumns' => $associationMapping['isOwningSide'] ? $associationMapping['joinColumns'] : [], - 'orphanRemoval' => $associationMapping['orphanRemoval'], - ]; - break; + case ($associationMapping['type'] & ClassMetadata::TO_MANY): + if ($associationMapping['type'] === ClassMetadata::MANY_TO_MANY) { + $method = 'mapManyToMany'; - case ClassMetadata::ONE_TO_MANY: - $method = 'mapOneToMany'; - $specificMappingArray = []; - $potentialAssociationMappingIndexes = [ - 'mappedBy', - 'orphanRemoval', - 'orderBy', - ]; -$oneToManyMappingArray = []; foreach ($potentialAssociationMappingIndexes as $index) { - if (!isset($associationMapping[$index])) { - continue; - } - - $specificMappingArray[$index] = $associationMapping[$index]; - } - break; - - case ClassMetadata::MANY_TO_MANY: - $method = 'mapManyToMany'; - $specificMappingArray = []; - $potentialAssociationMappingIndexes = [ - 'mappedBy', - 'joinTable', - 'orderBy', - ];$manyToManyMappingArray = []; - foreach ($potentialAssociationMappingIndexes as $index) { - if (!isset($associationMapping[$index])) { - continue; - } - - $specificMappingArray[$index] = $associationMapping[$index]; + $this->exportJoinTable($associationMapping['joinTable'], $lines, 'joinTable'); + } else { + $method = 'mapOneToMany'; } - break; - } - $associationMappingArray = array_merge($associationMappingArray, $specificMappingArray); + $lines[] = null; + $lines[] = '$metadata->' . $method . '(array('; + $lines[] = ' "fieldName" => "' . $associationMapping['fieldName'] . '",'; + $lines[] = ' "targetEntity" => "' . $associationMapping['targetEntity'] . '",'; + $lines[] = ' "fetch" => "' . $associationMapping['fetch'] . '",'; + $lines[] = ' "mappedBy" => "' . $associationMapping['mappedBy'] . '",'; + $lines[] = ' "inversedBy" => "' . $associationMapping['inversedBy'] . '",'; + $lines[] = ' "orderBy" => ' . $this->_varExport($associationMapping['orderBy']) . ','; + + if ($associationMapping['type'] === ClassMetadata::MANY_TO_MANY) { + $lines[] = ' "joinTable" => $joinTable,'; + } - $lines[] = '$metadata->' . $method . '(' . $this->_varExport($associationMappingArray) . ');'; + $lines[] = ' "cascade" => ' . $this->_varExport($cascade) . ','; + $lines[] = ' "orphanRemoval" => ' . $this->_varExport($associationMapping['orphanRemoval']) . ','; + $lines[] = '));'; + break; + } } return implode("\n", $lines); } + private function exportJoinTable(array $joinTable, array &$lines, $variableName) + { + $this->exportJoinColumns($joinTable['joinColumns'], $lines, 'joinColumns'); + + $lines[] = null; + + $this->exportJoinColumns($joinTable['inverseJoinColumns'], $lines, 'inverseJoinColumns'); + + $lines[] = null; + $lines[] = '$' . $variableName . ' = array('; + $lines[] = ' "name" => "' . $joinTable['name'] . '",'; + $lines[] = ' "joinColumns" => $joinColumns,'; + $lines[] = ' "inverseJoinColumns" => $inverseJoinColumns,'; + $lines[] = ');'; + } + + private function exportJoinColumns(array $joinColumns, array &$lines, $variableName) + { + $lines[] = '$' . $variableName . ' = array();'; + + foreach ($joinColumns as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ + $lines[] = '$joinColumn = new Mapping\JoinColumnMetadata();'; + $lines[] = null; + $lines[] = '$joinColumn->setTableName("' . $joinColumn->getTableName() . '");'; + $lines[] = '$joinColumn->setColumnName("' . $joinColumn->getColumnName() . '");'; + $lines[] = '$joinColumn->setReferencedColumnName("' . $joinColumn->getReferencedColumnName() . '");'; + $lines[] = '$joinColumn->setAliasedName("' . $joinColumn->getAliasedName() . '");'; + $lines[] = '$joinColumn->setColumnDefinition("' . $joinColumn->getColumnDefinition() . '");'; + $lines[] = '$joinColumn->setOnDelete("' . $joinColumn->getOnDelete() . '");'; + $lines[] = '$joinColumn->setOptions(' . $this->_varExport($joinColumn->getOptions()) . ');'; + $lines[] = '$joinColumn->setNullable("' . $joinColumn->isNullable() . '");'; + $lines[] = '$joinColumn->setUnique("' . $joinColumn->isUnique() . '");'; + $lines[] = '$joinColumn->setPrimaryKey("' . $joinColumn->isPrimaryKey() . '");'; + $lines[] = null; + $lines[] = '$' . $variableName . '[] = $joinColumn;'; + } + } + /** * @param mixed $var * diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 2d56ae826ac..d9feb2ed2ff 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Tools\Export\Driver; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\JoinColumnMetadata; /** * ClassMetadata exporter for Doctrine XML mapping files. @@ -311,37 +312,60 @@ public function exportClassMetadata(ClassMetadata $metadata) $joinColumnsXml = $joinTableXml->addChild('join-columns'); foreach ($associationMapping['joinTable']['joinColumns'] as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ $joinColumnXml = $joinColumnsXml->addChild('join-column'); - $joinColumnXml->addAttribute('name', $joinColumn['name']); - $joinColumnXml->addAttribute('referenced-column-name', $joinColumn['referencedColumnName']); - if (isset($joinColumn['onDelete']) && ! empty($joinColumn['onDelete'])) { - $joinColumnXml->addAttribute('on-delete', $joinColumn['onDelete']); + $joinColumnXml->addAttribute('name', $joinColumn->getColumnName()); + $joinColumnXml->addAttribute('referenced-column-name', $joinColumn->getReferencedColumnName()); + + if (! empty($joinColumn->getAliasedName())) { + $joinColumnXml->addAttribute('field-name', $joinColumn->getAliasedName()); + } + + if (! empty($joinColumn->getOnDelete())) { + $joinColumnXml->addAttribute('on-delete', $joinColumn->getOnDelete()); + } + + if (! empty($joinColumn->getColumnDefinition())) { + $joinColumnXml->addAttribute('column-definition', $joinColumn->getColumnDefinition()); + } + + if ($joinColumn->isNullable()) { + $joinColumnXml->addAttribute('nullable', $joinColumn->isNullable()); + } + + if ($joinColumn->isUnique()) { + $joinColumnXml->addAttribute('unique', $joinColumn->isUnique()); } } $inverseJoinColumnsXml = $joinTableXml->addChild('inverse-join-columns'); - foreach ($associationMapping['joinTable']['inverseJoinColumns'] as $inverseJoinColumn) { - $inverseJoinColumnXml = $inverseJoinColumnsXml->addChild('join-column'); + foreach ($associationMapping['joinTable']['inverseJoinColumns'] as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ + $joinColumnXml = $inverseJoinColumnsXml->addChild('join-column'); + + $joinColumnXml->addAttribute('name', $joinColumn->getColumnName()); + $joinColumnXml->addAttribute('referenced-column-name', $joinColumn->getReferencedColumnName()); - $inverseJoinColumnXml->addAttribute('name', $inverseJoinColumn['name']); - $inverseJoinColumnXml->addAttribute('referenced-column-name', $inverseJoinColumn['referencedColumnName']); + if (! empty($joinColumn->getAliasedName())) { + $joinColumnXml->addAttribute('field-name', $joinColumn->getAliasedName()); + } - if (isset($inverseJoinColumn['onDelete']) && ! empty($inverseJoinColumn['onDelete'])) { - $inverseJoinColumnXml->addAttribute('on-delete', $inverseJoinColumn['onDelete']); + if (! empty($joinColumn->getOnDelete())) { + $joinColumnXml->addAttribute('on-delete', $joinColumn->getOnDelete()); } - if (isset($inverseJoinColumn['columnDefinition'])) { - $inverseJoinColumnXml->addAttribute('column-definition', $inverseJoinColumn['columnDefinition']); + if (! empty($joinColumn->getColumnDefinition())) { + $joinColumnXml->addAttribute('column-definition', $joinColumn->getColumnDefinition()); } - if (isset($inverseJoinColumn['nullable'])) { - $inverseJoinColumnXml->addAttribute('nullable', $inverseJoinColumn['nullable']); + if ($joinColumn->isNullable()) { + $joinColumnXml->addAttribute('nullable', $joinColumn->isNullable()); } - if (isset($inverseJoinColumn['orderBy'])) { - $inverseJoinColumnXml->addAttribute('order-by', $inverseJoinColumn['orderBy']); + if ($joinColumn->isUnique()) { + $joinColumnXml->addAttribute('unique', $joinColumn->isUnique()); } } } @@ -350,21 +374,30 @@ public function exportClassMetadata(ClassMetadata $metadata) $joinColumnsXml = $associationMappingXml->addChild('join-columns'); foreach ($associationMapping['joinColumns'] as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ $joinColumnXml = $joinColumnsXml->addChild('join-column'); - $joinColumnXml->addAttribute('name', $joinColumn['name']); - $joinColumnXml->addAttribute('referenced-column-name', $joinColumn['referencedColumnName']); + $joinColumnXml->addAttribute('name', $joinColumn->getColumnName()); + $joinColumnXml->addAttribute('referenced-column-name', $joinColumn->getReferencedColumnName()); + + if (! empty($joinColumn->getAliasedName())) { + $joinColumnXml->addAttribute('field-name', $joinColumn->getAliasedName()); + } + + if (! empty($joinColumn->getOnDelete())) { + $joinColumnXml->addAttribute('on-delete', $joinColumn->getOnDelete()); + } - if (isset($joinColumn['onDelete']) && ! empty($joinColumn['onDelete'])) { - $joinColumnXml->addAttribute('on-delete', $joinColumn['onDelete']); + if (! empty($joinColumn->getColumnDefinition())) { + $joinColumnXml->addAttribute('column-definition', $joinColumn->getColumnDefinition()); } - if (isset($joinColumn['columnDefinition'])) { - $joinColumnXml->addAttribute('column-definition', $joinColumn['columnDefinition']); + if ($joinColumn->isNullable()) { + $joinColumnXml->addAttribute('nullable', $joinColumn->isNullable()); } - if (isset($joinColumn['nullable'])) { - $joinColumnXml->addAttribute('nullable', $joinColumn['nullable']); + if ($joinColumn->isUnique()) { + $joinColumnXml->addAttribute('unique', $joinColumn->isUnique()); } } } diff --git a/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php index 517e0a8e00c..145bb2d720a 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php @@ -127,10 +127,11 @@ public function walkSelectStatement(SelectStatement $AST) } if (isset($rootClass->associationMappings[$identifier])) { - $joinColumn = $rootClass->associationMappings[$identifier]['joinColumns'][0]['name']; + $association = $rootClass->associationMappings[$identifier]; + $joinColumn = reset($association['joinColumns']); - foreach (array_keys($this->rsm->metaMappings, $joinColumn) as $alias) { - if ($this->rsm->columnOwnerMap[$alias] == $rootAlias) { + foreach (array_keys($this->rsm->metaMappings, $joinColumn->getColumnName()) as $alias) { + if ($this->rsm->columnOwnerMap[$alias] === $rootAlias) { $sqlIdentifier[$identifier] = $alias; } } diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php index 159db3593b6..3588c2f6172 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php @@ -546,9 +546,10 @@ private function getSQLIdentifier(SelectStatement $AST) } if (isset($rootClass->associationMappings[$identifier])) { - $joinColumn = $rootClass->associationMappings[$identifier]['joinColumns'][0]['name']; + $association = $rootClass->associationMappings[$identifier]; + $joinColumn = reset($association['joinColumns']); - foreach (array_keys($this->rsm->metaMappings, $joinColumn) as $alias) { + foreach (array_keys($this->rsm->metaMappings, $joinColumn->getColumnName()) as $alias) { if ($this->rsm->columnOwnerMap[$alias] === $rootAlias) { $sqlIdentifier[$property] = [ 'type' => $this->rsm->typeMappings[$alias], diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 076a1dced36..2980b9c1fb1 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -258,11 +258,11 @@ public function getSchemaFromMetadata(array $classes) } if (isset($class->associationMappings[$identifierField])) { - /* @var $assoc \Doctrine\ORM\Annotation\OneToOne */ + /** @var array $assoc */ $assoc = $class->associationMappings[$identifierField]; foreach ($assoc['joinColumns'] as $joinColumn) { - $pkColumns[] = $this->platform->quoteIdentifier($joinColumn['name']); + $pkColumns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); } } } @@ -642,24 +642,24 @@ private function gatherRelationJoinColumns( foreach ($joinColumns as $joinColumn) { list($definingClass, $referencedFieldName) = $this->getDefiningClass( $class, - $joinColumn['referencedColumnName'] + $joinColumn->getReferencedColumnName() ); if ( ! $definingClass) { throw new \Doctrine\ORM\ORMException(sprintf( 'Column name "%s" referenced for relation from %s towards %s does not exist.', - $joinColumn['referencedColumnName'], + $joinColumn->getReferencedColumnName(), $mapping['sourceEntity'], $mapping['targetEntity'] )); } - $quotedColumnName = $this->platform->quoteIdentifier($joinColumn['name']); - $quotedRefColumnName = $this->platform->quoteIdentifier($joinColumn['referencedColumnName']); + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $quotedReferencedColumnName = $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()); $primaryKeyColumns[] = $quotedColumnName; $localColumns[] = $quotedColumnName; - $foreignColumns[] = $quotedRefColumnName; + $foreignColumns[] = $quotedReferencedColumnName; if ( ! $theJoinTable->hasColumn($quotedColumnName)) { // Only add the column to the table if it does not exist already. @@ -668,18 +668,17 @@ private function gatherRelationJoinColumns( $property = $definingClass->getProperty($referencedFieldName); $columnDef = null; - if (isset($joinColumn['columnDefinition'])) { - $columnDef = $joinColumn['columnDefinition']; + if (!empty($joinColumn->getColumnDefinition())) { + $columnDef = $joinColumn->getColumnDefinition(); } elseif ($property->getColumnDefinition()) { $columnDef = $property->getColumnDefinition(); } - $columnOptions = ['notnull' => false, 'columnDefinition' => $columnDef]; $columnType = $property->getTypeName(); - - if (isset($joinColumn['nullable'])) { - $columnOptions['notnull'] = !$joinColumn['nullable']; - } + $columnOptions = [ + 'notnull' => !$joinColumn->isNullable(), + 'columnDefinition' => $columnDef, + ]; if ($property->getOptions()) { $columnOptions['options'] = $property->getOptions(); @@ -691,7 +690,7 @@ private function gatherRelationJoinColumns( break; case 'decimal': - $columnOptions['scale'] = $property->getScale(); + $columnOptions['scale'] = $property->getScale(); $columnOptions['precision'] = $property->getPrecision(); break; } @@ -699,12 +698,12 @@ private function gatherRelationJoinColumns( $theJoinTable->addColumn($quotedColumnName, $columnType, $columnOptions); } - if (isset($joinColumn['unique']) && $joinColumn['unique'] == true) { + if ($joinColumn->isUnique()) { $uniqueConstraints[] = ['columns' => [$quotedColumnName]]; } - if (isset($joinColumn['onDelete'])) { - $fkOptions['onDelete'] = $joinColumn['onDelete']; + if (!empty($joinColumn->getOnDelete())) { + $fkOptions['onDelete'] = $joinColumn->getOnDelete(); } } @@ -715,6 +714,7 @@ private function gatherRelationJoinColumns( } $compositeName = $theJoinTable->getName().'.'.implode('', $localColumns); + if (isset($addedFks[$compositeName]) && ($foreignTableName != $addedFks[$compositeName]['foreignTableName'] || 0 < count(array_diff($foreignColumns, $addedFks[$compositeName]['foreignColumns']))) @@ -728,10 +728,15 @@ private function gatherRelationJoinColumns( break; } } + $blacklistedFks[$compositeName] = true; } elseif (!isset($blacklistedFks[$compositeName])) { - $addedFks[$compositeName] = ['foreignTableName' => $foreignTableName, 'foreignColumns' => $foreignColumns]; - $theJoinTable->addUnnamedForeignKeyConstraint( + $addedFks[$compositeName] = [ + 'foreignTableName' => $foreignTableName, + 'foreignColumns' => $foreignColumns + ]; + + $theJoinTable->addForeignKeyConstraint( $foreignTableName, $localColumns, $foreignColumns, diff --git a/lib/Doctrine/ORM/Tools/SchemaValidator.php b/lib/Doctrine/ORM/Tools/SchemaValidator.php index a89da9af01f..cb7ee1b8a6e 100644 --- a/lib/Doctrine/ORM/Tools/SchemaValidator.php +++ b/lib/Doctrine/ORM/Tools/SchemaValidator.php @@ -168,16 +168,16 @@ public function validateClass(ClassMetadata $class) $targetIdentifierColumns = array_keys($targetMetadata->getIdentifierColumns($this->em)); foreach ($assoc['joinTable']['joinColumns'] as $joinColumn) { - if (!in_array($joinColumn['referencedColumnName'], $classIdentifierColumns)) { - $ce[] = "The referenced column name '" . $joinColumn['referencedColumnName'] . "' " . + if (!in_array($joinColumn->getReferencedColumnName(), $classIdentifierColumns)) { + $ce[] = "The referenced column name '" . $joinColumn->getReferencedColumnName() . "' " . "has to be a primary key column on the target entity class '".$class->name."'."; break; } } foreach ($assoc['joinTable']['inverseJoinColumns'] as $inverseJoinColumn) { - if (!in_array($inverseJoinColumn['referencedColumnName'], $targetIdentifierColumns)) { - $ce[] = "The referenced column name '" . $joinColumn['referencedColumnName'] . "' " . + if (!in_array($inverseJoinColumn->getReferencedColumnName(), $targetIdentifierColumns)) { + $ce[] = "The referenced column name '" . $joinColumn->getReferencedColumnName() . "' " . "has to be a primary key column on the target entity class '".$targetMetadata->name."'."; break; } @@ -201,8 +201,8 @@ public function validateClass(ClassMetadata $class) $identifierColumns = array_keys($targetMetadata->getIdentifierColumns($this->em)); foreach ($assoc['joinColumns'] as $joinColumn) { - if (!in_array($joinColumn['referencedColumnName'], $identifierColumns)) { - $ce[] = "The referenced column name '" . $joinColumn['referencedColumnName'] . "' " . + if (!in_array($joinColumn->getReferencedColumnName(), $identifierColumns)) { + $ce[] = "The referenced column name '" . $joinColumn->getReferencedColumnName() . "' " . "has to be a primary key column on the target entity class '".$targetMetadata->name."'."; } } @@ -211,7 +211,7 @@ public function validateClass(ClassMetadata $class) $ids = []; foreach ($assoc['joinColumns'] as $joinColumn) { - $ids[] = $joinColumn['name']; + $ids[] = $joinColumn->getColumnName(); } $ce[] = "The join columns of the association '" . $assoc['fieldName'] . "' " . diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index dda134a08c2..d6de80f92b0 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -1160,9 +1160,9 @@ private function getCommitOrder(array $entityChangeSet = null) $newNodes[] = $targetClass; } - $joinColumns = reset($assoc['joinColumns']); + $joinColumn = reset($assoc['joinColumns']); - $calc->addDependency($targetClass->name, $class->name, (int)empty($joinColumns['nullable'])); + $calc->addDependency($targetClass->name, $class->name, $joinColumn->isNullable() ? 0 : 1); // If the target class has mapped subclasses, these share the same dependency. if ( ! $targetClass->subClasses) { @@ -2510,6 +2510,8 @@ public function createEntity($className, array $data, &$hints = []) $class = $this->em->getClassMetadata($className); //$isReadOnly = isset($hints[Query::HINT_READ_ONLY]); + // TODO: All of the following share similar logic, consider refactoring: AbstractHydrator::registerManaged, + // ObjectHydrator::getEntityFromIdentityMap and UnitOfWork::createEntity(). $id = $this->identifierFlattener->flattenIdentifier($class, $data); $idHash = implode(' ', $id); diff --git a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php index a283a683492..2c92672002c 100644 --- a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php +++ b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php @@ -71,30 +71,34 @@ public function flattenIdentifier(ClassMetadata $class, array $id) $flatId = []; foreach ($class->identifier as $field) { - if (isset($class->associationMappings[$field]) && isset($id[$field]) && is_object($id[$field])) { - /* @var $targetClassMetadata ClassMetadata */ - $targetClassMetadata = $this->metadataFactory->getMetadataFor( - $class->associationMappings[$field]['targetEntity'] - ); + if (!isset($class->associationMappings[$field])) { + $flatId[$field] = $id[$field]; - if ($this->unitOfWork->isInIdentityMap($id[$field])) { - $associatedId = $this->flattenIdentifier($targetClassMetadata, $this->unitOfWork->getEntityIdentifier($id[$field])); - } else { - $associatedId = $this->flattenIdentifier($targetClassMetadata, $targetClassMetadata->getIdentifierValues($id[$field])); - } + continue; + } - $flatId[$field] = implode(' ', $associatedId); - } elseif (isset($class->associationMappings[$field])) { - $associatedId = []; + $assoc = $class->associationMappings[$field]; - foreach ($class->associationMappings[$field]['joinColumns'] as $joinColumn) { - $associatedId[] = $id[$joinColumn['name']]; - } + if (isset($id[$field]) && is_object($id[$field])) { + /* @var $targetClassMetadata ClassMetadata */ + $targetClassMetadata = $this->metadataFactory->getMetadataFor($assoc['targetEntity']); + $identifiers = $this->unitOfWork->isInIdentityMap($id[$field]) + ? $this->unitOfWork->getEntityIdentifier($id[$field]) + : $targetClassMetadata->getIdentifierValues($id[$field]); + $associatedId = $this->flattenIdentifier($targetClassMetadata, $identifiers); $flatId[$field] = implode(' ', $associatedId); - } else { - $flatId[$field] = $id[$field]; + + continue; } + + $associatedId = []; + + foreach ($assoc['joinColumns'] as $joinColumn) { + $associatedId[] = $id[$joinColumn->getColumnName()]; + } + + $flatId[$field] = implode(' ', $associatedId); } return $flatId; diff --git a/lib/Doctrine/ORM/Utility/PersisterHelper.php b/lib/Doctrine/ORM/Utility/PersisterHelper.php index 08d8a454c16..c4d2238b760 100644 --- a/lib/Doctrine/ORM/Utility/PersisterHelper.php +++ b/lib/Doctrine/ORM/Utility/PersisterHelper.php @@ -93,35 +93,21 @@ public static function getTypeOfColumn($columnName, ClassMetadata $class, Entity return $class->getProperty($fieldName)->getType(); } - // iterate over to-one association mappings + // iterate over association mappings foreach ($class->associationMappings as $assoc) { - if ( ! isset($assoc['joinColumns'])) { - continue; - } - - foreach ($assoc['joinColumns'] as $joinColumn) { - if ($joinColumn['name'] == $columnName) { - $targetColumnName = $joinColumn['referencedColumnName']; - $targetClass = $em->getClassMetadata($assoc['targetEntity']); - - return self::getTypeOfColumn($targetColumnName, $targetClass, $em); + // resolve join columns over to-one or to-many + $joinColumns = (isset($assoc['joinTable']) && isset($assoc['joinTable']['joinColumns'])) + ? $assoc['joinTable']['joinColumns'] + : $assoc['joinColumns']; + + foreach ($joinColumns as $joinColumn) { + if ($joinColumn->getColumnName() !== $columnName) { + continue; } - } - } - // iterate over to-many association mappings - foreach ($class->associationMappings as $assoc) { - if ( ! (isset($assoc['joinTable']) && isset($assoc['joinTable']['joinColumns']))) { - continue; - } + $targetClass = $em->getClassMetadata($assoc['targetEntity']); - foreach ($assoc['joinTable']['joinColumns'] as $joinColumn) { - if ($joinColumn['name'] == $columnName) { - $targetColumnName = $joinColumn['referencedColumnName']; - $targetClass = $em->getClassMetadata($assoc['targetEntity']); - - return self::getTypeOfColumn($targetColumnName, $targetClass, $em); - } + return self::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $em); } } diff --git a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php index 509849e5fef..c15a5ee8fea 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\Models\CMS; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\JoinColumnMetadata; /** * CmsAddress @@ -150,11 +151,19 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat ['length' => 50] ); + $joinColumns = []; + + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setReferencedColumnName('id'); + + $joinColumns[] = $joinColumn; + $metadata->mapOneToOne( [ 'fieldName' => 'user', 'targetEntity' => 'CmsUser', - 'joinColumns' => [['referencedColumnName' => 'id', 'onDelete' => null]] + 'joinColumns' => $joinColumns, ] ); diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php b/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php index 9746dae88ab..fe1a45d8832 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\Models\DDC964; +use Doctrine\ORM\Mapping; + /** * @Entity * @AssociationOverrides({ @@ -23,32 +25,38 @@ class DDC964Admin extends DDC964User { public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->setAssociationOverride('address', - [ - 'joinColumns'=> [ - [ - 'name' => 'adminaddress_id', - 'referencedColumnName' => 'id', - 'onDelete' => null, - ] - ] - ] - ); - - $metadata->setAssociationOverride('groups', - [ - 'joinTable' => [ - 'name' => 'ddc964_users_admingroups', - 'joinColumns' => [ - [ - 'name' => 'adminuser_id', - ] - ], - 'inverseJoinColumns' => [[ - 'name' => 'admingroup_id', - ]] - ] - ] - ); + $joinColumns = []; + + $joinColumn = new Mapping\JoinColumnMetadata(); + + $joinColumn->setColumnName('adminaddress_id'); + $joinColumn->setReferencedColumnName('id'); + $joinColumn->setOnDelete(null); + + $joinColumns[] = $joinColumn; + + $metadata->setAssociationOverride('address', ['joinColumns' => $joinColumns]); + + $joinColumns = []; + + $joinColumn = new Mapping\JoinColumnMetadata(); + $joinColumn->setColumnName('adminuser_id'); + + $joinColumns[] = $joinColumn; + + $inverseJoinColumns = []; + + $joinColumn = new Mapping\JoinColumnMetadata(); + $joinColumn->setColumnName('admingroup_id'); + + $inverseJoinColumns[] = $joinColumn; + + $joinTable = [ + 'name' => 'ddc964_users_admingroups', + 'joinColumns' => $joinColumns, + 'inverseJoinColumns' => $inverseJoinColumns, + ]; + + $metadata->setAssociationOverride('groups', ['joinTable' => $joinTable]); } } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php index 5e4889e9acd..f6c976d247a 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php @@ -4,6 +4,7 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\JoinColumnMetadata; /** * @MappedSuperclass @@ -130,38 +131,53 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat ] ); + $joinColumns = []; + + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setColumnName('address_id'); + $joinColumn->setReferencedColumnName('id'); + + $joinColumns[] = $joinColumn; + $metadata->mapManyToOne( [ 'fieldName' => 'address', 'targetEntity' => 'DDC964Address', 'cascade' => ['persist','merge'], - 'joinColumn' => ['name'=>'address_id', 'referencedColumnMame'=>'id'], + 'joinColumns' => $joinColumns, ] ); + $joinColumns = $inverseJoinColumns = []; + + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setColumnName('user_id'); + $joinColumn->setReferencedColumnName('id'); + + $joinColumns[] = $joinColumn; + + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setColumnName('group_id'); + $joinColumn->setReferencedColumnName('id'); + + $inverseJoinColumns[] = $joinColumn; + + $joinTable = [ + 'name' => 'ddc964_users_groups', + 'joinColumns' => $joinColumns, + 'inverseJoinColumns' => $inverseJoinColumns, + ]; + $metadata->mapManyToMany( [ 'fieldName' => 'groups', 'targetEntity' => 'DDC964Group', 'inversedBy' => 'users', 'cascade' => ['persist','merge','detach'], - 'joinTable' => [ - 'name' => 'ddc964_users_groups', - 'joinColumns' => [ - [ - 'name' => 'user_id', - 'referencedColumnName' => 'id', - 'onDelete' => null, - ] - ], - 'inverseJoinColumns' => [ - [ - 'name' => 'group_id', - 'referencedColumnName'=>'id', - 'onDelete' => null, - ] - ] - ] + 'joinTable' => $joinTable, ] ); diff --git a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php index e8012db002f..9c24b42abb4 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php @@ -5,6 +5,7 @@ use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\Tests\Models\CMS\CmsEmail; use Doctrine\Tests\Models\CMS\CmsPhonenumber; @@ -108,6 +109,14 @@ public function testAddNamedNativeQueryResultSetMapping() $cm = new ClassMetadata(CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); + $joinColumns = []; + + $joinColumn = new JoinColumnMetadata(); + $joinColumn->setReferencedColumnName('id'); + $joinColumn->setNullable(true); + + $joinColumns[] = $joinColumn; + $cm->mapOneToOne( [ 'fieldName' => 'email', @@ -115,60 +124,54 @@ public function testAddNamedNativeQueryResultSetMapping() 'cascade' => ['persist'], 'inversedBy' => 'user', 'orphanRemoval' => false, - 'joinColumns' => [ - [ - 'nullable' => true, - 'referencedColumnName' => 'id', - 'onDelete' => null, - ] - ] + 'joinColumns' => $joinColumns, ] ); $cm->addNamedNativeQuery( [ - 'name' => 'find-all', - 'query' => 'SELECT u.id AS user_id, e.id AS email_id, u.name, e.email, u.id + e.id AS scalarColumn FROM cms_users u INNER JOIN cms_emails e ON e.id = u.email_id', - 'resultSetMapping' => 'find-all', + 'name' => 'find-all', + 'query' => 'SELECT u.id AS user_id, e.id AS email_id, u.name, e.email, u.id + e.id AS scalarColumn FROM cms_users u INNER JOIN cms_emails e ON e.id = u.email_id', + 'resultSetMapping' => 'find-all', ] ); $cm->addSqlResultSetMapping( [ - 'name' => 'find-all', - 'entities' => [ - [ - 'entityClass' => '__CLASS__', - 'fields' => [ - [ - 'name' => 'id', - 'column'=> 'user_id' - ], - [ - 'name' => 'name', - 'column'=> 'name' + 'name' => 'find-all', + 'entities' => [ + [ + 'entityClass' => '__CLASS__', + 'fields' => [ + [ + 'name' => 'id', + 'column'=> 'user_id' + ], + [ + 'name' => 'name', + 'column'=> 'name' + ] + ] + ], + [ + 'entityClass' => 'CmsEmail', + 'fields' => [ + [ + 'name' => 'id', + 'column'=> 'email_id' + ], + [ + 'name' => 'email', + 'column'=> 'email' + ] ] ] ], - [ - 'entityClass' => 'CmsEmail', - 'fields' => [ - [ - 'name' => 'id', - 'column'=> 'email_id' - ], - [ - 'name' => 'email', - 'column'=> 'email' - ] + 'columns' => [ + [ + 'name' => 'scalarColumn' ] ] - ], - 'columns' => [ - [ - 'name' => 'scalarColumn' - ] - ] ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 8467f69f7d6..69ed7e53a47 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -11,6 +11,7 @@ use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Mapping\UnderscoreNamingStrategy; use Doctrine\Tests\Models\Cache\City; @@ -407,8 +408,11 @@ public function testLifecycleCallbacksSupportMultipleMethodNames($class) public function testJoinColumnUniqueAndNullable($class) { // Non-Nullability of Join Column - self::assertFalse($class->associationMappings['groups']['joinTable']['joinColumns'][0]['nullable']); - self::assertFalse($class->associationMappings['groups']['joinTable']['joinColumns'][0]['unique']); + $association = $class->associationMappings['groups']; + $joinColumn = reset($association['joinTable']['joinColumns']); + + self::assertFalse($joinColumn->isNullable()); + self::assertFalse($joinColumn->isUnique()); return $class; } @@ -421,10 +425,12 @@ public function testColumnDefinition($class) { self::assertNotNull($class->getProperty('email')); - $property = $class->getProperty('email'); + $property = $class->getProperty('email'); + $association = $class->associationMappings['groups']; + $joinColumn = reset($association['joinTable']['inverseJoinColumns']); self::assertEquals("CHAR(32) NOT NULL", $property->getColumnDefinition()); - self::assertEquals("INT NULL", $class->associationMappings['groups']['joinTable']['inverseJoinColumns'][0]['columnDefinition']); + self::assertEquals("INT NULL", $joinColumn->getColumnDefinition()); return $class; } @@ -435,7 +441,10 @@ public function testColumnDefinition($class) */ public function testJoinColumnOnDelete($class) { - self::assertEquals('CASCADE', $class->associationMappings['address']['joinColumns'][0]['onDelete']); + $association = $class->associationMappings['address']; + $joinColumn = reset($association['joinColumns']); + + self::assertEquals('CASCADE', $joinColumn->getOnDelete()); return $class; } @@ -746,16 +755,22 @@ public function testAssociationOverridesMapping() self::assertEquals($guestGroups['cascade'], $adminGroups['cascade']); // assert not override attributes + $guestGroupsJoinColumn = reset($guestGroups['joinTable']['joinColumns']); + $guestGroupsInverseJoinColumn = reset($guestGroups['joinTable']['inverseJoinColumns']); + self::assertEquals('ddc964_users_groups', $guestGroups['joinTable']['name']); - self::assertEquals('user_id', $guestGroups['joinTable']['joinColumns'][0]['name']); - self::assertEquals('group_id', $guestGroups['joinTable']['inverseJoinColumns'][0]['name']); + self::assertEquals('user_id', $guestGroupsJoinColumn->getColumnName()); + self::assertEquals('group_id', $guestGroupsInverseJoinColumn->getColumnName()); self::assertEquals(['user_id'=>'id'], $guestGroups['relationToSourceKeyColumns']); self::assertEquals(['group_id'=>'id'], $guestGroups['relationToTargetKeyColumns']); + $adminGroupsJoinColumn = reset($adminGroups['joinTable']['joinColumns']); + $adminGroupsInverseJoinColumn = reset($adminGroups['joinTable']['inverseJoinColumns']); + self::assertEquals('ddc964_users_admingroups', $adminGroups['joinTable']['name']); - self::assertEquals('adminuser_id', $adminGroups['joinTable']['joinColumns'][0]['name']); - self::assertEquals('admingroup_id', $adminGroups['joinTable']['inverseJoinColumns'][0]['name']); + self::assertEquals('adminuser_id', $guestGroupsJoinColumn->getColumnName()); + self::assertEquals('admingroup_id', $guestGroupsInverseJoinColumn->getColumnName()); self::assertEquals(['adminuser_id'=>'id'], $adminGroups['relationToSourceKeyColumns']); self::assertEquals(['admingroup_id'=>'id'], $adminGroups['relationToTargetKeyColumns']); @@ -777,12 +792,16 @@ public function testAssociationOverridesMapping() self::assertEquals($guestAddress['cascade'], $adminAddress['cascade']); // assert override - self::assertEquals('address_id', $guestAddress['joinColumns'][0]['name']); + $guestAddressJoinColumn = reset($guestAddress['joinColumns']); + + self::assertEquals('address_id', $guestAddressJoinColumn->getColumnName()); self::assertEquals(['address_id'=>'id'], $guestAddress['sourceToTargetKeyColumns']); self::assertEquals(['address_id'=>'address_id'], $guestAddress['joinColumnFieldNames']); self::assertEquals(['id'=>'address_id'], $guestAddress['targetToSourceKeyColumns']); - self::assertEquals('adminaddress_id', $adminAddress['joinColumns'][0]['name']); + $adminAddressJoinColumn = reset($adminAddress['joinColumns']); + + self::assertEquals('adminaddress_id', $adminAddressJoinColumn->getColumnName()); self::assertEquals(['adminaddress_id'=>'id'], $adminAddress['sourceToTargetKeyColumns']); self::assertEquals(['adminaddress_id'=>'adminaddress_id'], $adminAddress['joinColumnFieldNames']); self::assertEquals(['id'=>'adminaddress_id'], $adminAddress['targetToSourceKeyColumns']); @@ -1239,84 +1258,85 @@ public static function loadMetadata(ClassMetadata $metadata) $metadata->setVersionProperty($property); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); + $joinColumns = []; + + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setColumnName('address_id'); + $joinColumn->setReferencedColumnName('id'); + $joinColumn->setOnDelete('CASCADE'); + + $joinColumns[] = $joinColumn; + $metadata->mapOneToOne( [ - 'fieldName' => 'address', - 'targetEntity' => Address::class, - 'cascade' => [0 => 'remove'], - 'mappedBy' => null, - 'inversedBy' => 'user', - 'joinColumns' => [ - 0 => [ - 'name' => 'address_id', - 'referencedColumnName' => 'id', - 'onDelete' => 'CASCADE', - ], - ], + 'fieldName' => 'address', + 'targetEntity' => Address::class, + 'cascade' => ['remove'], + 'inversedBy' => 'user', + 'joinColumns' => $joinColumns, 'orphanRemoval' => false, ] ); $metadata->mapOneToMany( [ - 'fieldName' => 'phonenumbers', - 'targetEntity' => Phonenumber::class, - 'cascade' => [0 => 'persist'], - 'mappedBy' => 'user', + 'fieldName' => 'phonenumbers', + 'targetEntity' => Phonenumber::class, + 'cascade' => ['persist'], + 'mappedBy' => 'user', 'orphanRemoval' => true, - 'orderBy' => ['number' => 'ASC'], + 'orderBy' => ['number' => 'ASC'], ] ); + $joinColumns = $inverseJoinColumns = []; + + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setColumnName('user_id'); + $joinColumn->setReferencedColumnName('id'); + + $joinColumns[] = $joinColumn; + + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setColumnName('group_id'); + $joinColumn->setReferencedColumnName('id'); + $joinColumn->setColumnDefinition('INT NULL'); + + $inverseJoinColumns[] = $joinColumn; + + $joinTable = [ + 'name' => 'cms_users_groups', + 'joinColumns' => $joinColumns, + 'inverseJoinColumns' => $inverseJoinColumns, + ]; + $metadata->mapManyToMany( [ - 'fieldName' => 'groups', + 'fieldName' => 'groups', 'targetEntity' => Group::class, - 'cascade' => [ - 0 => 'remove', - 1 => 'persist', - 2 => 'refresh', - 3 => 'merge', - 4 => 'detach', - ], - 'mappedBy' => null, - 'joinTable' => [ - 'name' => 'cms_users_groups', - 'joinColumns' => [ - 0 => [ - 'name' => 'user_id', - 'referencedColumnName' => 'id', - 'onDelete' => null, - 'unique' => false, - 'nullable' => false, - ], - ], - 'inverseJoinColumns' => [ - 0 => [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - 'onDelete' => null, - 'columnDefinition' => 'INT NULL', - ], - ], - ], - 'orderBy' => null, + 'cascade' => ['remove', 'persist', 'refresh', 'merge', 'detach'], + 'joinTable' => $joinTable, + 'orderBy' => NULL, ] ); $metadata->table['uniqueConstraints'] = [ 'search_idx' => [ 'columns' => ['name', 'user_email'], - 'options' => ['where' => 'name IS NOT NULL'], + 'options'=> ['where' => 'name IS NOT NULL'] ], ]; - $metadata->table['uniqueConstraints'] = [ - 'search_idx' => ['columns' => ['name', 'user_email'], 'options'=> ['where' => 'name IS NOT NULL']], - ]; - $metadata->table['indexes'] = [ - 'name_idx' => ['columns' => ['name']], 0 => ['columns' => ['user_email']] + 'name_idx' => [ + 'columns' => ['name'] + ], + 0 => [ // Unnamed index + 'columns' => ['user_email'] + ], ]; $metadata->setSequenceGeneratorDefinition( @@ -1326,6 +1346,7 @@ public static function loadMetadata(ClassMetadata $metadata) 'initialValue' => 1, ] ); + $metadata->addNamedQuery( [ 'name' => 'all', @@ -1374,7 +1395,6 @@ public static function loadMetadata(ClassMetadata $metadata) } } - /** * @Entity */ diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index a4fb1adfaff..a376e34ce4d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -12,6 +12,7 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs; use Doctrine\ORM\Events; +use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Sequencing\AbstractGenerator; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; @@ -275,11 +276,22 @@ protected function _createValidClassMetadata() $cm1->mapOneToOne(['fieldName' => 'other', 'targetEntity' => 'TestEntity1', 'mappedBy' => 'this']); // and an association on the owning side - $joinColumns = [ - ['name' => 'other_id', 'referencedColumnName' => 'id', 'onDelete' => null] - ]; + $joinColumns = []; - $cm1->mapOneToOne(['fieldName' => 'association', 'targetEntity' => 'TestEntity1', 'joinColumns' => $joinColumns]); + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setColumnName("other_id"); + $joinColumn->setReferencedColumnName("id"); + + $joinColumns[] = $joinColumn; + + $cm1->mapOneToOne( + [ + 'fieldName' => 'association', + 'targetEntity' => 'TestEntity1', + 'joinColumns' => $joinColumns, + ] + ); // and an id generator type $cm1->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); @@ -306,10 +318,11 @@ public function testQuoteMetadata() self::assertNotNull($phoneMetadata->getProperty('number')); self::assertEquals('phone-number', $phoneMetadata->getProperty('number')->getColumnName()); - $user = $phoneMetadata->associationMappings['user']; + $user = $phoneMetadata->associationMappings['user']; + $phoneUserJoinColumn = reset($user['joinColumns']); - self::assertEquals('user-id', $user['joinColumns'][0]['name']); - self::assertEquals('user-id', $user['joinColumns'][0]['referencedColumnName']); + self::assertEquals('user-id', $phoneUserJoinColumn->getColumnName()); + self::assertEquals('user-id', $phoneUserJoinColumn->getReferencedColumnName()); // Address Class Metadata self::assertNotNull($addressMetadata->getProperty('id')); @@ -323,28 +336,33 @@ public function testQuoteMetadata() self::assertEquals('user-id', $userMetadata->getProperty('id')->getColumnName()); self::assertEquals('user-name', $userMetadata->getProperty('name')->getColumnName()); - $user = $groupMetadata->associationMappings['parent']; + $group = $groupMetadata->associationMappings['parent']; + $groupUserJoinColumn = reset($group['joinColumns']); - self::assertEquals('parent-id', $user['joinColumns'][0]['name']); - self::assertEquals('group-id', $user['joinColumns'][0]['referencedColumnName']); + self::assertEquals('parent-id', $groupUserJoinColumn->getColumnName()); + self::assertEquals('group-id', $groupUserJoinColumn->getReferencedColumnName()); - $user = $addressMetadata->associationMappings['user']; + $user = $addressMetadata->associationMappings['user']; + $addressUserJoinColumn = reset($user['joinColumns']); - self::assertEquals('user-id', $user['joinColumns'][0]['name']); - self::assertEquals('user-id', $user['joinColumns'][0]['referencedColumnName']); + self::assertEquals('user-id', $addressUserJoinColumn->getColumnName()); + self::assertEquals('user-id', $addressUserJoinColumn->getReferencedColumnName()); - $address = $userMetadata->associationMappings['address']; + $address = $userMetadata->associationMappings['address']; + $userAddressJoinColumn = reset($address['joinColumns']); - self::assertEquals('address-id', $address['joinColumns'][0]['name']); - self::assertEquals('address-id', $address['joinColumns'][0]['referencedColumnName']); + self::assertEquals('address-id', $userAddressJoinColumn->getColumnName()); + self::assertEquals('address-id', $userAddressJoinColumn->getReferencedColumnName()); - $groups = $userMetadata->associationMappings['groups']; + $groups = $userMetadata->associationMappings['groups']; + $userGroupsJoinColumn = reset($groups['joinTable']['joinColumns']); + $userGroupsInverseJoinColumn = reset($groups['joinTable']['inverseJoinColumns']); self::assertEquals('quote-users-groups', $groups['joinTable']['name']); - self::assertEquals('user-id', $groups['joinTable']['joinColumns'][0]['name']); - self::assertEquals('user-id', $groups['joinTable']['joinColumns'][0]['referencedColumnName']); - self::assertEquals('group-id', $groups['joinTable']['inverseJoinColumns'][0]['name']); - self::assertEquals('group-id', $groups['joinTable']['inverseJoinColumns'][0]['referencedColumnName']); + self::assertEquals('user-id', $userGroupsJoinColumn->getColumnName()); + self::assertEquals('user-id', $userGroupsJoinColumn->getReferencedColumnName()); + self::assertEquals('group-id', $userGroupsInverseJoinColumn->getColumnName()); + self::assertEquals('group-id', $userGroupsInverseJoinColumn->getReferencedColumnName()); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 24d1675b7f8..9d36b7ed304 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -6,10 +6,12 @@ use Doctrine\Common\Persistence\Mapping\StaticReflectionService; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Events; +use Doctrine\ORM\Mapping; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DefaultNamingStrategy; use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Mapping\UnderscoreNamingStrategy; use Doctrine\Tests\Models\CMS; @@ -128,21 +130,37 @@ public function testMapAssociationInGlobalNamespace() { require_once __DIR__."/../../Models/Global/GlobalNamespaceModel.php"; - $cm = new ClassMetadata('DoctrineGlobal_Article'); + $cm = new ClassMetadata(DoctrineGlobal_Article::class); + $cm->initializeReflection(new RuntimeReflectionService()); + + $joinColumns = []; + + $joinColumn = new Mapping\JoinColumnMetadata(); + $joinColumn->setColumnName("bar_id"); + $joinColumn->setReferencedColumnName("id"); + + $joinColumns[] = $joinColumn; + + $inverseJoinColumns = []; + + $joinColumn = new Mapping\JoinColumnMetadata(); + $joinColumn->setColumnName("baz_id"); + $joinColumn->setReferencedColumnName("id"); + + $inverseJoinColumns[] = $joinColumn; + + $joinTable = [ + 'name' => 'bar', + 'joinColumns' => $joinColumns, + 'inverseJoinColumns' => $inverseJoinColumns, + ]; + $cm->mapManyToMany( [ - 'fieldName' => 'author', + 'fieldName' => 'author', 'targetEntity' => 'DoctrineGlobal_User', - 'joinTable' => [ - 'name' => 'bar', - 'joinColumns' => [ - ['name' => 'bar_id', 'referencedColumnName' => 'id', 'onDelete' => null] - ], - 'inverseJoinColumns' => [ - ['name' => 'baz_id', 'referencedColumnName' => 'id', 'onDelete' => null] - ], - ], + 'joinTable' => $joinTable, ] ); @@ -155,25 +173,40 @@ public function testMapManyToManyJoinTableDefaults() $cm->initializeReflection(new RuntimeReflectionService()); $cm->mapManyToMany( [ - 'fieldName' => 'groups', - 'targetEntity' => 'CmsGroup' + 'fieldName' => 'groups', + 'targetEntity' => 'CmsGroup' ] ); $assoc = $cm->associationMappings['groups']; - self::assertEquals( - [ - 'name' => 'cmsuser_cmsgroup', - 'joinColumns' => [ - ['name' => 'cmsuser_id', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE'] - ], - 'inverseJoinColumns' => [ - ['name' => 'cmsgroup_id', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE'] - ] - ], - $assoc['joinTable'] - ); + $joinColumns = []; + + $joinColumn = new Mapping\JoinColumnMetadata(); + + $joinColumn->setColumnName("cmsuser_id"); + $joinColumn->setReferencedColumnName("id"); + $joinColumn->setOnDelete("CASCADE"); + + $joinColumns[] = $joinColumn; + + $inverseJoinColumns = []; + + $joinColumn = new Mapping\JoinColumnMetadata(); + + $joinColumn->setColumnName("cmsgroup_id"); + $joinColumn->setReferencedColumnName("id"); + $joinColumn->setOnDelete("CASCADE"); + + $inverseJoinColumns[] = $joinColumn; + + $joinTable = [ + 'name' => 'cmsuser_cmsgroup', + 'joinColumns' => $joinColumns, + 'inverseJoinColumns' => $inverseJoinColumns, + ]; + + self::assertEquals($joinTable, $assoc['joinTable']); } public function testSerializeManyToManyJoinTableCascade() @@ -191,7 +224,7 @@ public function testSerializeManyToManyJoinTableCascade() $assoc = unserialize(serialize($assoc)); foreach ($assoc['joinTable']['joinColumns'] as $joinColumn) { - self::assertEquals('CASCADE', $joinColumn['onDelete']); + self::assertEquals('CASCADE', $joinColumn->getOnDelete()); } } @@ -376,22 +409,36 @@ public function testDefaultTableName() $cm = new ClassMetadata(CMS\CmsAddress::class); $cm->initializeReflection(new RuntimeReflectionService()); + // When joinTable's name is not given + $joinColumns = []; + + $joinColumn = new Mapping\JoinColumnMetadata(); + $joinColumn->setReferencedColumnName("id"); + + $joinColumns[] = $joinColumn; + + $inverseJoinColumns = []; + + $joinColumn = new Mapping\JoinColumnMetadata(); + $joinColumn->setReferencedColumnName("id"); + + $inverseJoinColumns[] = $joinColumn; + + $joinTable = [ + 'joinColumns' => $joinColumns, + 'inverseJoinColumns' => $inverseJoinColumns, + ]; + $cm->mapManyToMany( [ - 'fieldName' => 'user', + 'fieldName' => 'user', 'targetEntity' => 'CmsUser', - 'inversedBy' => 'users', - 'joinTable' => [ - 'joinColumns' => [ - ['referencedColumnName' => 'id', 'onDelete' => null] - ], - 'inverseJoinColumns' => [ - ['referencedColumnName' => 'id', 'onDelete' => null] - ] - ] + 'inversedBy' => 'users', + 'joinTable' => $joinTable, ] ); + self::assertEquals('cmsaddress_cmsuser', $cm->associationMappings['user']['joinTable']['name']); } @@ -402,86 +449,135 @@ public function testDefaultJoinColumnName() // this is really dirty, but it's the simplest way to test whether // joinColumn's name will be automatically set to user_id + $joinColumns = []; + + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setReferencedColumnName('id'); + + $joinColumns[] = $joinColumn; + $cm->mapOneToOne( [ - 'fieldName' => 'user', + 'fieldName' => 'user', 'targetEntity' => 'CmsUser', - 'joinColumns' => [ - ['referencedColumnName' => 'id', 'onDelete' => null] - ] + 'joinColumns' => $joinColumns, ] ); - self::assertEquals('user_id', $cm->associationMappings['user']['joinColumns'][0]['name']); + $association = $cm->associationMappings['user']; + $joinColumn = reset($association['joinColumns']); + + self::assertEquals('user_id', $joinColumn->getColumnName()); $cm = new ClassMetadata(CMS\CmsAddress::class); $cm->initializeReflection(new RuntimeReflectionService()); + + $joinColumns = []; + + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setReferencedColumnName('id'); + + $joinColumns[] = $joinColumn; + + $inverseJoinColumns = []; + + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setReferencedColumnName('id'); + + $inverseJoinColumns[] = $joinColumn; + + $joinTable = [ + 'name' => 'user_CmsUser', + 'joinColumns' => $joinColumns, + 'inverseJoinColumns' => $inverseJoinColumns, + ]; + $cm->mapManyToMany( [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser', - 'inversedBy' => 'users', - 'joinTable' => [ - 'name' => 'user_CmsUser', - 'joinColumns' => [ - ['referencedColumnName' => 'id', 'onDelete' => null] - ], - 'inverseJoinColumns' => [ - ['referencedColumnName' => 'id', 'onDelete' => null] - ] - ] + 'fieldName' => 'user', + 'targetEntity' => 'CmsUser', + 'inversedBy' => 'users', + 'joinTable' => $joinTable, ] ); - self::assertEquals('cmsaddress_id', $cm->associationMappings['user']['joinTable']['joinColumns'][0]['name']); - self::assertEquals('cmsuser_id', $cm->associationMappings['user']['joinTable']['inverseJoinColumns'][0]['name']); + $association = $cm->associationMappings['user']; + $joinTable = $association['joinTable']; + $joinColumn = reset($joinTable['joinColumns']); + $inverseJoinColumn = reset($joinTable['joinColumns']); + + self::assertEquals('cmsaddress_id', $joinColumn->getColumnName()); + self::assertEquals('cmsuser_id', $inverseJoinColumn->getColumnName()); } /** * @group DDC-559 */ - public function testUnderscoreNamingStrategyDefaults() + public function testOneToOneUnderscoreNamingStrategyDefaults() { - $namingStrategy = new UnderscoreNamingStrategy(CASE_UPPER); - $oneToOneMetadata = new ClassMetadata(CMS\CmsAddress::class, $namingStrategy); - $manyToManyMetadata = new ClassMetadata(CMS\CmsAddress::class, $namingStrategy); + $namingStrategy = new UnderscoreNamingStrategy(CASE_UPPER); + $metadata = new ClassMetadata(CMS\CmsAddress::class, $namingStrategy); - $oneToOneMetadata->mapOneToOne( + $metadata->mapOneToOne( [ 'fieldName' => 'user', 'targetEntity' => 'CmsUser' ] ); - $manyToManyMetadata->mapManyToMany( + $association = $metadata->associationMappings['user']; + $joinColumn = reset($association['joinColumns']); + + self::assertEquals(['USER_ID'=>'ID'], $association['sourceToTargetKeyColumns']); + self::assertEquals(['USER_ID'=>'USER_ID'], $association['joinColumnFieldNames']); + self::assertEquals(['ID'=>'USER_ID'], $association['targetToSourceKeyColumns']); + + self::assertEquals('USER_ID', $joinColumn->getColumnName()); + self::assertEquals('ID', $joinColumn->getReferencedColumnName()); + } + + /** + * @group DDC-559 + */ + public function testManyToManyUnderscoreNamingStrategyDefaults() + { + $namingStrategy = new UnderscoreNamingStrategy(CASE_UPPER); + $metadata = new ClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress', $namingStrategy); + + $metadata->mapManyToMany( [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser' + 'fieldName' => 'user', + 'targetEntity' => 'CmsUser' ] ); - self::assertEquals(['USER_ID'=>'ID'], $oneToOneMetadata->associationMappings['user']['sourceToTargetKeyColumns']); - self::assertEquals(['USER_ID'=>'USER_ID'], $oneToOneMetadata->associationMappings['user']['joinColumnFieldNames']); - self::assertEquals(['ID'=>'USER_ID'], $oneToOneMetadata->associationMappings['user']['targetToSourceKeyColumns']); + $association = $metadata->associationMappings['user']; + $joinColumn = reset($association['joinTable']['joinColumns']); + $inverseJoinColumn = reset($association['joinTable']['inverseJoinColumns']); - self::assertEquals('USER_ID', $oneToOneMetadata->associationMappings['user']['joinColumns'][0]['name']); - self::assertEquals('ID', $oneToOneMetadata->associationMappings['user']['joinColumns'][0]['referencedColumnName']); + self::assertEquals('CMS_ADDRESS_CMS_USER', $association['joinTable']['name']); + self::assertEquals(['CMS_ADDRESS_ID' => 'ID'], $association['relationToSourceKeyColumns']); + self::assertEquals(['CMS_USER_ID' => 'ID'], $association['relationToTargetKeyColumns']); - self::assertEquals('CMS_ADDRESS_CMS_USER', $manyToManyMetadata->associationMappings['user']['joinTable']['name']); + self::assertEquals('CMS_ADDRESS_ID', $joinColumn->getColumnName()); + self::assertEquals('ID', $joinColumn->getReferencedColumnName()); - self::assertEquals(['CMS_ADDRESS_ID' => 'ID'], $manyToManyMetadata->associationMappings['user']['relationToSourceKeyColumns']); - self::assertEquals(['CMS_USER_ID' => 'ID'], $manyToManyMetadata->associationMappings['user']['relationToTargetKeyColumns']); + self::assertEquals('CMS_USER_ID', $inverseJoinColumn->getColumnName()); + self::assertEquals('ID', $inverseJoinColumn->getReferencedColumnName()); - self::assertEquals('CMS_ADDRESS_ID', $manyToManyMetadata->associationMappings['user']['joinTable']['joinColumns'][0]['name']); - self::assertEquals('CMS_USER_ID', $manyToManyMetadata->associationMappings['user']['joinTable']['inverseJoinColumns'][0]['name']); - - self::assertEquals('ID', $manyToManyMetadata->associationMappings['user']['joinTable']['joinColumns'][0]['referencedColumnName']); - self::assertEquals('ID', $manyToManyMetadata->associationMappings['user']['joinTable']['inverseJoinColumns'][0]['referencedColumnName']); + $cm = new ClassMetadata('DoctrineGlobal_Article', $namingStrategy); + $cm->mapManyToMany( + [ + 'fieldName' => 'author', + 'targetEntity' => CMS\CmsUser::class + ] + ); - $cm = new ClassMetadata('DoctrineGlobal_Article', $namingStrategy); - $cm->mapManyToMany(['fieldName' => 'author', 'targetEntity' => CMS\CmsUser::class]); self::assertEquals('DOCTRINE_GLOBAL_ARTICLE_CMS_USER', $cm->associationMappings['author']['joinTable']['name']); } @@ -506,6 +602,7 @@ public function testSetMultipleIdentifierSetsComposite() public function testJoinTableMappingDefaults() { $cm = new ClassMetadata('DoctrineGlobal_Article'); + $cm->initializeReflection(new RuntimeReflectionService()); $cm->mapManyToMany(['fieldName' => 'author', 'targetEntity' => CMS\CmsUser::class]); @@ -523,10 +620,10 @@ public function testMapIdentifierAssociation() $cm->mapOneToOne( [ - 'fieldName' => 'article', - 'id' => true, - 'targetEntity' => DDC117Article::class, - 'joinColumns' => [], + 'fieldName' => 'article', + 'id' => true, + 'targetEntity' => DDC117Article::class, + 'joinColumns' => [], ] ); @@ -547,11 +644,11 @@ public function testOrphanRemovalIdentifierAssociation() $cm->mapOneToOne( [ - 'fieldName' => 'article', - 'id' => true, - 'targetEntity' => DDC117Article::class, - 'orphanRemoval' => true, - 'joinColumns' => [], + 'fieldName' => 'article', + 'id' => true, + 'targetEntity' => DDC117Article::class, + 'orphanRemoval' => true, + 'joinColumns' => [], ] ); } @@ -569,11 +666,11 @@ public function testInverseIdentifierAssociation() $cm->mapOneToOne( [ - 'fieldName' => 'article', - 'id' => true, - 'mappedBy' => 'details', // INVERSE! - 'targetEntity' => DDC117Article::class, - 'joinColumns' => [], + 'fieldName' => 'article', + 'id' => true, + 'mappedBy' => 'details', // INVERSE! + 'targetEntity' => DDC117Article::class, + 'joinColumns' => [], ] ); } @@ -591,10 +688,10 @@ public function testIdentifierAssociationManyToMany() $cm->mapManyToMany( [ - 'fieldName' => 'article', - 'id' => true, - 'targetEntity' => DDC117Article::class, - 'joinColumns' => [], + 'fieldName' => 'article', + 'id' => true, + 'targetEntity' => DDC117Article::class, + 'joinColumns' => [], ] ); } @@ -622,8 +719,8 @@ public function testRetrievalOfNamedQueries() $cm->addNamedQuery( [ - 'name' => 'userById', - 'query' => 'SELECT u FROM __CLASS__ u WHERE u.id = ?1' + 'name' => 'userById', + 'query' => 'SELECT u FROM __CLASS__ u WHERE u.id = ?1' ] ); @@ -682,19 +779,19 @@ public function testRetrieveOfNamedNativeQuery() $cm->addNamedNativeQuery( [ - 'name' => 'find-all', - 'query' => 'SELECT * FROM cms_users', - 'resultSetMapping' => 'result-mapping-name', - 'resultClass' => CMS\CmsUser::class, + 'name' => 'find-all', + 'query' => 'SELECT * FROM cms_users', + 'resultSetMapping' => 'result-mapping-name', + 'resultClass' => CMS\CmsUser::class, ] ); $cm->addNamedNativeQuery( [ - 'name' => 'find-by-id', - 'query' => 'SELECT * FROM cms_users WHERE id = ?', - 'resultClass' => '__CLASS__', - 'resultSetMapping' => 'result-mapping-name', + 'name' => 'find-by-id', + 'query' => 'SELECT * FROM cms_users WHERE id = ?', + 'resultClass' => '__CLASS__', + 'resultSetMapping' => 'result-mapping-name', ] ); @@ -719,40 +816,36 @@ public function testRetrieveOfSqlResultSetMapping() $cm->addSqlResultSetMapping( [ - 'name' => 'find-all', - 'entities' => [ - [ - 'entityClass' => '__CLASS__', - 'fields' => [ - [ - 'name' => 'id', - 'column'=> 'id' - ], - [ - 'name' => 'name', - 'column'=> 'name' + 'name' => 'find-all', + 'entities' => [ + [ + 'entityClass' => '__CLASS__', + 'fields' => [ + [ + 'name' => 'id', + 'column'=> 'id' + ], + [ + 'name' => 'name', + 'column'=> 'name' + ] ] - ] - ], - [ - 'entityClass' => CMS\CmsEmail::class, - 'fields' => [ - [ - 'name' => 'id', - 'column'=> 'id' - ], - [ - 'name' => 'email', - 'column'=> 'email' + ], + [ + 'entityClass' => CMS\CmsEmail::class, + 'fields' => [ + [ + 'name' => 'id', + 'column'=> 'id' + ], + [ + 'name' => 'email', + 'column'=> 'email' + ] ] ] - ] - ], - 'columns' => [ - [ - 'name' => 'scalarColumn' - ] - ] + ], + 'columns' => [['name' => 'scalarColumn']] ] ); @@ -779,12 +872,12 @@ public function testExistanceOfSqlResultSetMapping() $cm->addSqlResultSetMapping( [ - 'name' => 'find-all', - 'entities' => [ - [ - 'entityClass' => CMS\CmsUser::class, + 'name' => 'find-all', + 'entities' => [ + [ + 'entityClass' => CMS\CmsUser::class, + ], ], - ], ] ); @@ -803,10 +896,10 @@ public function testExistanceOfNamedNativeQuery() $cm->addNamedNativeQuery( [ - 'name' => 'find-all', - 'query' => 'SELECT * FROM cms_users', - 'resultClass' => CMS\CmsUser::class, - 'resultSetMapping' => 'result-mapping-name' + 'name' => 'find-all', + 'query' => 'SELECT * FROM cms_users', + 'resultClass' => CMS\CmsUser::class, + 'resultSetMapping' => 'result-mapping-name' ] ); @@ -822,8 +915,8 @@ public function testRetrieveOfNamedQuery() $cm->addNamedQuery( [ - 'name' => 'userById', - 'query' => 'SELECT u FROM __CLASS__ u WHERE u.id = ?1' + 'name' => 'userById', + 'query' => 'SELECT u FROM __CLASS__ u WHERE u.id = ?1' ] ); @@ -842,10 +935,10 @@ public function testRetrievalOfNamedNativeQueries() $cm->addNamedNativeQuery( [ - 'name' => 'find-all', - 'query' => 'SELECT * FROM cms_users', - 'resultClass' => CMS\CmsUser::class, - 'resultSetMapping' => 'result-mapping-name' + 'name' => 'find-all', + 'query' => 'SELECT * FROM cms_users', + 'resultClass' => CMS\CmsUser::class, + 'resultSetMapping' => 'result-mapping-name' ] ); @@ -880,15 +973,15 @@ public function testNamingCollisionNamedQueryShouldThrowException() $cm->addNamedQuery( [ - 'name' => 'userById', - 'query' => 'SELECT u FROM __CLASS__ u WHERE u.id = ?1' + 'name' => 'userById', + 'query' => 'SELECT u FROM __CLASS__ u WHERE u.id = ?1' ] ); $cm->addNamedQuery( [ - 'name' => 'userById', - 'query' => 'SELECT u FROM __CLASS__ u WHERE u.id = ?1' + 'name' => 'userById', + 'query' => 'SELECT u FROM __CLASS__ u WHERE u.id = ?1' ] ); } @@ -1075,15 +1168,15 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategy() $addressMetadata->mapManyToMany( [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser' + 'fieldName' => 'user', + 'targetEntity' => 'CmsUser' ] ); $articleMetadata->mapManyToMany( [ - 'fieldName' => 'author', - 'targetEntity' => CMS\CmsUser::class + 'fieldName' => 'author', + 'targetEntity' => CMS\CmsUser::class ] ); @@ -1131,7 +1224,7 @@ public function testInvalidCascade() /** * @group DDC-964 - * @expectedException Doctrine\ORM\Mapping\MappingException + * @expectedException \Doctrine\ORM\Mapping\MappingException * @expectedExceptionMessage Invalid field override named 'invalidPropertyName' for class 'Doctrine\Tests\Models\DDC964\DDC964Admin */ public function testInvalidPropertyAssociationOverrideNameException() @@ -1145,7 +1238,7 @@ public function testInvalidPropertyAssociationOverrideNameException() /** * @group DDC-964 - * @expectedException Doctrine\ORM\Mapping\MappingException + * @expectedException \Doctrine\ORM\Mapping\MappingException * @expectedExceptionMessage Invalid field override named 'invalidPropertyName' for class 'Doctrine\Tests\Models\DDC964\DDC964Guest'. */ public function testInvalidPropertyAttributeOverrideNameException() @@ -1161,7 +1254,7 @@ public function testInvalidPropertyAttributeOverrideNameException() /** * @group DDC-1955 * - * @expectedException Doctrine\ORM\Mapping\MappingException + * @expectedException \Doctrine\ORM\Mapping\MappingException * @expectedExceptionMessage Entity Listener "\InvalidClassName" declared on "Doctrine\Tests\Models\CMS\CmsUser" not found. */ public function testInvalidEntityListenerClassException() @@ -1175,7 +1268,7 @@ public function testInvalidEntityListenerClassException() /** * @group DDC-1955 * - * @expectedException Doctrine\ORM\Mapping\MappingException + * @expectedException \Doctrine\ORM\Mapping\MappingException * @expectedExceptionMessage Entity Listener "\Doctrine\Tests\Models\Company\CompanyContractListener" declared on "Doctrine\Tests\Models\CMS\CmsUser" has no method "invalidMethod". */ public function testInvalidEntityListenerMethodException() @@ -1197,21 +1290,37 @@ public function testManyToManySelfReferencingNamingStrategyDefaults() ] ); - self::assertEquals( - [ - 'name' => 'customtypeparent_customtypeparent', - 'joinColumns' => [ - ['name' => 'customtypeparent_source', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE'] - ], - 'inverseJoinColumns' => [ - ['name' => 'customtypeparent_target', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE'] - ], - ], - $cm->associationMappings['friendsWithMe']['joinTable'] - ); + $association = $cm->associationMappings['friendsWithMe']; + + $joinColumns = []; + + $joinColumn = new Mapping\JoinColumnMetadata(); + + $joinColumn->setColumnName("customtypeparent_source"); + $joinColumn->setReferencedColumnName("id"); + $joinColumn->setOnDelete("CASCADE"); + + $joinColumns[] = $joinColumn; + + $inverseJoinColumns = []; + + $joinColumn = new Mapping\JoinColumnMetadata(); + + $joinColumn->setColumnName("customtypeparent_target"); + $joinColumn->setReferencedColumnName("id"); + $joinColumn->setOnDelete("CASCADE"); + + $inverseJoinColumns[] = $joinColumn; + + $joinTable = [ + 'name' => 'customtypeparent_customtypeparent', + 'joinColumns' => $joinColumns, + 'inverseJoinColumns' => $inverseJoinColumns, + ]; - self::assertEquals(['customtypeparent_source' => 'id'], $cm->associationMappings['friendsWithMe']['relationToSourceKeyColumns']); - self::assertEquals(['customtypeparent_target' => 'id'], $cm->associationMappings['friendsWithMe']['relationToTargetKeyColumns']); + self::assertEquals($joinTable, $association['joinTable']); + self::assertEquals(['customtypeparent_source' => 'id'], $association['relationToSourceKeyColumns']); + self::assertEquals(['customtypeparent_target' => 'id'], $association['relationToTargetKeyColumns']); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php index 85ab38272e7..bf01e97513d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php @@ -1,6 +1,7 @@ addProperty('zip', Type::getType('string'), ['length' => 50]); $metadata->addProperty('city', Type::getType('string'), ['length' => 50]); +$joinColumns = []; + +$joinColumn = new Mapping\JoinColumnMetadata(); +$joinColumn->setReferencedColumnName("id"); + +$joinColumns[] = $joinColumn; + $metadata->mapOneToOne( [ 'fieldName' => 'user', 'targetEntity' => 'CmsUser', - 'joinColumns' => [ - ['referencedColumnName' => 'id', 'onDelete' => null] - ] + 'joinColumns' => $joinColumns ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index 101b8065938..cbce4217dc6 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -1,6 +1,7 @@ addProperty('id', Type::getType('integer'), ['id' => true]); $metadata->addProperty('name', Type::getType('string')); +$joinColumns = []; + +$joinColumn = new Mapping\JoinColumnMetadata(); + +$joinColumn->setColumnName("state_id"); +$joinColumn->setReferencedColumnName("id"); + +$joinColumns[] = $joinColumn; + $metadata->mapOneToOne( [ 'fieldName' => 'state', 'targetEntity' => State::class, 'inversedBy' => 'cities', - 'joinColumns' => [ - [ - 'name' => 'state_id', - 'referencedColumnName' => 'id', - 'onDelete' => null, - ], - ], + 'joinColumns' => $joinColumns, ] ); @@ -35,18 +39,18 @@ $metadata->mapManyToMany( [ - 'fieldName' => 'travels', + 'fieldName' => 'travels', 'targetEntity' => Travel::class, - 'mappedBy' => 'visitedCities', + 'mappedBy' => 'visitedCities', ] ); $metadata->mapOneToMany( [ - 'fieldName' => 'attractions', + 'fieldName' => 'attractions', 'targetEntity' => Attraction::class, - 'mappedBy' => 'city', - 'orderBy' => ['name' => 'ASC',], + 'mappedBy' => 'city', + 'orderBy' => ['name' => 'ASC'], ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php index 8049e86f069..285d477fdd9 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php @@ -1,35 +1,37 @@ setAssociationOverride( - 'address', - [ - 'joinColumns'=> [ - [ - 'name' => 'adminaddress_id', - 'referencedColumnName' => 'id', - 'onDelete' => null, - ] - ] - ] -); - -$metadata->setAssociationOverride( - 'groups', - [ - 'joinTable' => [ - 'name' => 'ddc964_users_admingroups', - 'joinColumns' => [ - [ - 'name' => 'adminuser_id', - 'onDelete' => null, - ] - ], - 'inverseJoinColumns' => [ - [ - 'name' => 'admingroup_id', - 'onDelete' => null, - ] - ] - ] - ] -); +use Doctrine\ORM\Mapping; + +$joinColumns = []; + +$joinColumn = new Mapping\JoinColumnMetadata(); + +$joinColumn->setColumnName('adminaddress_id'); +$joinColumn->setReferencedColumnName('id'); +$joinColumn->setOnDelete(null); + +$joinColumns[] = $joinColumn; + +$metadata->setAssociationOverride('address', ['joinColumns' => $joinColumns]); + +$joinColumns = []; + +$joinColumn = new Mapping\JoinColumnMetadata(); +$joinColumn->setColumnName('adminuser_id'); + +$joinColumns[] = $joinColumn; + +$inverseJoinColumns = []; + +$joinColumn = new Mapping\JoinColumnMetadata(); +$joinColumn->setColumnName('admingroup_id'); + +$inverseJoinColumns[] = $joinColumn; + +$joinTable = [ + 'name' => 'ddc964_users_admingroups', + 'joinColumns' => $joinColumns, + 'inverseJoinColumns' => $inverseJoinColumns, +]; + +$metadata->setAssociationOverride('groups', ['joinTable' => $joinTable]); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php index bfbc57fbe7b..bf0c6933995 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php @@ -1,6 +1,7 @@ setColumnName('address_id'); +$joinColumn->setReferencedColumnName('id'); + +$joinColumns[] = $joinColumn; + $metadata->mapManyToOne( [ 'fieldName' => 'address', 'targetEntity' => 'DDC964Address', 'cascade' => ['persist','merge'], - 'joinColumn' => ['name'=>'address_id', 'referencedColumnMame'=>'id'], + 'joinColumns' => $joinColumns, ] ); +$joinColumns = []; + +$joinColumn = new Mapping\JoinColumnMetadata(); +$joinColumn->setColumnName("user_id"); +$joinColumn->setReferencedColumnName("id"); + +$joinColumns[] = $joinColumn; + +$inverseJoinColumns = []; + +$joinColumn = new Mapping\JoinColumnMetadata(); +$joinColumn->setColumnName("group_id"); +$joinColumn->setReferencedColumnName("id"); + +$inverseJoinColumns[] = $joinColumn; + +$joinTable = [ + 'name' => 'ddc964_users_groups', + 'joinColumns' => $joinColumns, + 'inverseJoinColumns' => $inverseJoinColumns, +]; + $metadata->mapManyToMany( [ 'fieldName' => 'groups', 'targetEntity' => 'DDC964Group', 'inversedBy' => 'users', 'cascade' => ['persist','merge','detach'], - 'joinTable' => [ - 'name' => 'ddc964_users_groups', - 'joinColumns' => [ - [ - 'name' => 'user_id', - 'referencedColumnName' =>'id', - 'onDelete' => null, - ] - ], - 'inverseJoinColumns' => [ - [ - 'name'=>'group_id', - 'referencedColumnName'=>'id', - 'onDelete' => null, - ] - ], - ] + 'joinTable' => $joinTable, ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php index 53dab3131eb..255c32c5c48 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php @@ -2,15 +2,12 @@ use Doctrine\ORM\Mapping\ClassMetadata; -$metadata->enableCache( - [ - 'usage' => ClassMetadata::CACHE_USAGE_READ_ONLY - ] -); +$metadata->enableCache(['usage' => ClassMetadata::CACHE_USAGE_READ_ONLY]); + $metadata->mapManyToOne( [ - 'fieldName' => 'foo', - 'id' => true, - 'targetEntity' => 'PHPSLCFoo' + 'fieldName' => 'foo', + 'id' => true, + 'targetEntity' => 'PHPSLCFoo' ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index 7bced52456e..e71c3f88a4f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -1,6 +1,7 @@ setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); +$joinColumns = []; + +$joinColumn = new Mapping\JoinColumnMetadata(); +$joinColumn->setColumnName('address_id'); +$joinColumn->setReferencedColumnName('id'); +$joinColumn->setOnDelete('CASCADE'); + +$joinColumns[] = $joinColumn; + $metadata->mapOneToOne( [ - 'fieldName' => 'address', - 'targetEntity' => Address::class, - 'cascade' => [0 => 'remove'], - 'mappedBy' => null, - 'inversedBy' => 'user', - 'joinColumns' => [ - 0 => [ - 'name' => 'address_id', - 'referencedColumnName' => 'id', - 'onDelete' => 'CASCADE', - ], - ], + 'fieldName' => 'address', + 'targetEntity' => Group::class, + 'cascade' => ['remove'], + 'mappedBy' => NULL, + 'inversedBy' => 'user', + 'joinColumns' => $joinColumns, 'orphanRemoval' => false, ] ); $metadata->mapOneToMany( [ - 'fieldName' => 'phonenumbers', - 'targetEntity' => Phonenumber::class, - 'cascade' => [0 => 'persist'], - 'mappedBy' => 'user', + 'fieldName' => 'phonenumbers', + 'targetEntity' => Phonenumber::class, + 'cascade' => ['persist'], + 'mappedBy' => 'user', 'orphanRemoval' => true, - 'orderBy' => ['number' => 'ASC'], + 'orderBy' => ['number' => 'ASC'], ] ); +$joinColumns = []; + +$joinColumn = new Mapping\JoinColumnMetadata(); +$joinColumn->setColumnName("user_id"); +$joinColumn->setReferencedColumnName("id"); + +$joinColumns[] = $joinColumn; + +$inverseJoinColumns = []; + +$joinColumn = new Mapping\JoinColumnMetadata(); + +$joinColumn->setColumnName("group_id"); +$joinColumn->setReferencedColumnName("id"); +$joinColumn->setColumnDefinition("INT NULL"); + +$inverseJoinColumns[] = $joinColumn; + +$joinTable = [ + 'name' => 'cms_users_groups', + 'joinColumns' => $joinColumns, + 'inverseJoinColumns' => $inverseJoinColumns, +]; + $metadata->mapManyToMany( [ - 'fieldName' => 'groups', + 'fieldName' => 'groups', 'targetEntity' => Group::class, - 'cascade' => [ - 0 => 'remove', - 1 => 'persist', - 2 => 'refresh', - 3 => 'merge', - 4 => 'detach', - ], - 'mappedBy' => null, - 'joinTable' => [ - 'name' => 'cms_users_groups', - 'joinColumns' => [ - 0 => [ - 'name' => 'user_id', - 'referencedColumnName' => 'id', - 'onDelete' => null, - 'unique' => false, - 'nullable' => false, - ], - ], - 'inverseJoinColumns' => [ - 0 => [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - 'onDelete' => null, - 'columnDefinition' => 'INT NULL', - ], - ], - ], - 'orderBy' => null, + 'cascade' => ['remove', 'persist', 'refresh', 'merge', 'detach'], + 'mappedBy' => null, + 'joinTable' => $joinTable, + 'orderBy' => null, ] ); @@ -130,11 +133,15 @@ ]; $metadata->table['uniqueConstraints'] = [ - 'search_idx' => ['columns' => ['name', 'user_email'], 'options' => ['where' => 'name IS NOT NULL']], + 'search_idx' => [ + 'columns' => ['name', 'user_email'], + 'options' => ['where' => 'name IS NOT NULL'] + ], ]; $metadata->table['indexes'] = [ - 'name_idx' => ['columns' => ['name']], 0 => ['columns' => ['user_email']] + 'name_idx' => ['columns' => ['name']], + 0 => ['columns' => ['user_email']] ]; $metadata->setSequenceGeneratorDefinition( diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 48b8f9f11f1..a3a4abb6f28 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -9,6 +9,7 @@ use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; +use Doctrine\ORM\Mapping; use Doctrine\ORM\Tools\EntityGenerator; use Doctrine\Tests\Models\DDC2372\DDC2372Admin; use Doctrine\Tests\Models\DDC2372\DDC2372User; @@ -99,51 +100,51 @@ public function generateBookEntityFixture(array $embeddedClasses = []) ] ); + $joinColumns = []; + + $joinColumn = new Mapping\JoinColumnMetadata(); + $joinColumn->setColumnName('author_id'); + $joinColumn->setReferencedColumnName('id'); + + $joinColumns[] = $joinColumn; + $metadata->mapOneToOne( [ 'fieldName' => 'author', 'targetEntity' => 'Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor', 'mappedBy' => 'book', - 'joinColumns' => [ - [ - 'referencedColumnName' => 'id', - 'nullable' => false, - 'onDelete' => null, - 'columnDefinition' => null, - ], - ] + 'joinColumns' => $joinColumns, ] ); + $joinColumns = []; + + $joinColumn = new Mapping\JoinColumnMetadata(); + $joinColumn->setColumnName("book_id"); + $joinColumn->setReferencedColumnName("id"); + + $joinColumns[] = $joinColumn; + + $inverseJoinColumns = []; + + $joinColumn = new Mapping\JoinColumnMetadata(); + $joinColumn->setColumnName("comment_id"); + $joinColumn->setReferencedColumnName("id"); + + $inverseJoinColumns[] = $joinColumn; + + $joinTable = array( + 'name' => 'book_comment', + 'joinColumns' => $joinColumns, + 'inverseJoinColumns' => $inverseJoinColumns, + ); + $metadata->mapManyToMany( [ 'fieldName' => 'comments', 'targetEntity' => 'Doctrine\Tests\ORM\Tools\EntityGeneratorComment', 'fetch' => ClassMetadata::FETCH_EXTRA_LAZY, - 'joinTable' => [ - 'name' => 'book_comment', - 'schema' => null, - 'joinColumns' => [ - [ - 'name' => 'book_id', - 'referencedColumnName' => 'id', - 'nullable' => false, - 'unique' => false, - 'onDelete' => null, - 'columnDefinition' => null, - ], - ], - 'inverseJoinColumns' => [ - [ - 'name' => 'comment_id', - 'referencedColumnName' => 'id', - 'nullable' => false, - 'unique' => false, - 'onDelete' => null, - 'columnDefinition' => null, - ], - ], - ], + 'joinTable' => $joinTable, ] ); @@ -698,21 +699,45 @@ public function testGenerateEntityWithMultipleInverseJoinColumns() $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); + $joinColumns = []; + + $joinColumn = new Mapping\JoinColumnMetadata(); + $joinColumn->setColumnName("idorcamento"); + $joinColumn->setReferencedColumnName("idorcamento"); + + $joinColumns[] = $joinColumn; + + $joinColumn = new Mapping\JoinColumnMetadata(); + $joinColumn->setColumnName("idunidade"); + $joinColumn->setReferencedColumnName("idunidade"); + + $joinColumns[] = $joinColumn; + + $inverseJoinColumns = []; + + $joinColumn = new Mapping\JoinColumnMetadata(); + $joinColumn->setColumnName("idcentrocusto"); + $joinColumn->setReferencedColumnName("idcentrocusto"); + + $inverseJoinColumns[] = $joinColumn; + + $joinColumn = new Mapping\JoinColumnMetadata(); + $joinColumn->setColumnName("idpais"); + $joinColumn->setReferencedColumnName("idpais"); + + $inverseJoinColumns[] = $joinColumn; + + $joinTable = [ + 'name' => 'unidade_centro_custo', + 'joinColumns' => $joinColumns, + 'inverseJoinColumns' => $inverseJoinColumns, + ]; + $metadata->mapManyToMany( [ 'fieldName' => 'centroCustos', 'targetEntity' => 'DDC2079CentroCusto', - 'joinTable' => [ - 'name' => 'unidade_centro_custo', - 'joinColumns' => [ - ['name' => 'idorcamento', 'referencedColumnName' => 'idorcamento'], - ['name' => 'idunidade', 'referencedColumnName' => 'idunidade'] - ], - 'inverseJoinColumns' => [ - ['name' => 'idcentrocusto', 'referencedColumnName' => 'idcentrocusto'], - ['name' => 'idpais', 'referencedColumnName' => 'idpais'], - ], - ], + 'joinTable' => $joinTable, ] ); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index ff7d500a256..ccf1a5eb8eb 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -9,7 +9,6 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; use Doctrine\ORM\Mapping\Driver\XmlDriver; -use Doctrine\ORM\Mapping\Driver\YamlDriver; use Doctrine\ORM\Tools\DisconnectedClassMetadataFactory; use Doctrine\ORM\Tools\EntityGenerator; use Doctrine\ORM\Tools\Export\ClassMetadataExporter; @@ -229,18 +228,22 @@ public function testFieldsAreExported($class) public function testOneToOneAssociationsAreExported($class) { self::assertTrue(isset($class->associationMappings['address'])); - self::assertEquals(Address::class, $class->associationMappings['address']['targetEntity']); - self::assertEquals('address_id', $class->associationMappings['address']['joinColumns'][0]['name']); - self::assertEquals('id', $class->associationMappings['address']['joinColumns'][0]['referencedColumnName']); - self::assertEquals('CASCADE', $class->associationMappings['address']['joinColumns'][0]['onDelete']); - - self::assertContains('remove', $class->associationMappings['address']['cascade']); - self::assertContains('persist', $class->associationMappings['address']['cascade']); - self::assertNotContains('refresh', $class->associationMappings['address']['cascade']); - self::assertNotContains('merge', $class->associationMappings['address']['cascade']); - self::assertNotContains('detach', $class->associationMappings['address']['cascade']); - self::assertTrue($class->associationMappings['address']['orphanRemoval']); - self::assertEquals(ClassMetadata::FETCH_EAGER, $class->associationMappings['address']['fetch']); + + $association = $class->associationMappings['address']; + $joinColumn = reset($association['joinColumns']); + + self::assertEquals('Doctrine\Tests\ORM\Tools\Export\Address', $association['targetEntity']); + self::assertEquals('address_id', $joinColumn->getColumnName()); + self::assertEquals('id', $joinColumn->getReferencedColumnName()); + self::assertEquals('CASCADE', $joinColumn->getOnDelete()); + + self::assertContains('remove', $association['cascade']); + self::assertContains('persist', $association['cascade']); + self::assertNotContains('refresh', $association['cascade']); + self::assertNotContains('merge', $association['cascade']); + self::assertNotContains('detach', $association['cascade']); + self::assertTrue($association['orphanRemoval']); + self::assertEquals(ClassMetadata::FETCH_EAGER, $association['fetch']); return $class; } @@ -284,23 +287,29 @@ public function testOneToManyAssociationsAreExported($class) public function testManyToManyAssociationsAreExported($class) { self::assertTrue(isset($class->associationMappings['groups'])); + + $association = $class->associationMappings['groups']; + $joinColumn = reset($association['joinTable']['joinColumns']); + $inverseJoinColumn = reset($association['joinTable']['inverseJoinColumns']); + //self::assertInstanceOf('Doctrine\ORM\Mapping\ManyToManyMapping', $class->associationMappings['groups']); - self::assertEquals(Group::class, $class->associationMappings['groups']['targetEntity']); - self::assertEquals('cms_users_groups', $class->associationMappings['groups']['joinTable']['name']); - - self::assertEquals('user_id', $class->associationMappings['groups']['joinTable']['joinColumns'][0]['name']); - self::assertEquals('id', $class->associationMappings['groups']['joinTable']['joinColumns'][0]['referencedColumnName']); - - self::assertEquals('group_id', $class->associationMappings['groups']['joinTable']['inverseJoinColumns'][0]['name']); - self::assertEquals('id', $class->associationMappings['groups']['joinTable']['inverseJoinColumns'][0]['referencedColumnName']); - self::assertEquals('INT NULL', $class->associationMappings['groups']['joinTable']['inverseJoinColumns'][0]['columnDefinition']); - - self::assertContains('remove', $class->associationMappings['groups']['cascade']); - self::assertContains('persist', $class->associationMappings['groups']['cascade']); - self::assertContains('refresh', $class->associationMappings['groups']['cascade']); - self::assertContains('merge', $class->associationMappings['groups']['cascade']); - self::assertContains('detach', $class->associationMappings['groups']['cascade']); - self::assertEquals(ClassMetadata::FETCH_EXTRA_LAZY, $class->associationMappings['groups']['fetch']); + self::assertEquals(Group::class, $association['targetEntity']); + self::assertEquals('cms_users_groups', $association['joinTable']['name']); + + self::assertEquals('user_id', $joinColumn->getColumnName()); + self::assertEquals('id', $joinColumn->getReferencedColumnName()); + + self::assertEquals('group_id', $inverseJoinColumn->getColumnName()); + self::assertEquals('id', $inverseJoinColumn->getReferencedColumnName()); + self::assertEquals('INT NULL', $inverseJoinColumn->getColumnDefinition()); + + self::assertContains('remove', $association['cascade']); + self::assertContains('persist', $association['cascade']); + self::assertContains('refresh', $association['cascade']); + self::assertContains('merge', $association['cascade']); + self::assertContains('detach', $association['cascade']); + + self::assertEquals(ClassMetadata::FETCH_EXTRA_LAZY, $association['fetch']); return $class; } diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php index cbf476948b4..abb9189d35a 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php @@ -1,6 +1,7 @@ mapManyToOne( [ - 'fieldName' => 'mainGroup', + 'fieldName' => 'mainGroup', 'targetEntity' => Export\Group::class, ] ); +$joinColumns = []; + +$joinColumn = new Mapping\JoinColumnMetadata(); + +$joinColumn->setColumnName("address_id"); +$joinColumn->setReferencedColumnName("id"); +$joinColumn->setOnDelete("CASCADE"); + +$joinColumns[] = $joinColumn; + $metadata->mapOneToOne( [ - 'fieldName' => 'address', - 'targetEntity' => Export\Address::class, - 'inversedBy' => 'user', - 'cascade' => ['persist'], - 'mappedBy' => null, - 'joinColumns' => [ - 0 => [ - 'name' => 'address_id', - 'referencedColumnName' => 'id', - 'onDelete' => 'CASCADE', - ], - ], + 'fieldName' => 'address', + 'targetEntity' => Export\Address::class, + 'inversedBy' => 'user', + 'cascade' => ['persist'], + 'mappedBy' => null, + 'joinColumns' => $joinColumns, 'orphanRemoval' => true, - 'fetch' => ClassMetadata::FETCH_EAGER, + 'fetch' => ClassMetadata::FETCH_EAGER, ] ); $metadata->mapOneToOne( [ - 'fieldName' => 'cart', - 'targetEntity' => Export\Cart::class, - 'mappedBy' => 'user', - 'cascade' => [0 => 'persist'], - 'inversedBy' => null, + 'fieldName' => 'cart', + 'targetEntity' => Export\Cart::class, + 'mappedBy' => 'user', + 'cascade' => ['persist'], + 'inversedBy' => null, 'orphanRemoval' => false, - 'fetch' => ClassMetadata::FETCH_EAGER, + 'fetch' => ClassMetadata::FETCH_EAGER, ] ); $metadata->mapOneToMany( [ - 'fieldName' => 'phonenumbers', - 'targetEntity' => Export\Phonenumber::class, - 'cascade' => ['persist', 'merge'], - 'mappedBy' => 'user', + 'fieldName' => 'phonenumbers', + 'targetEntity' => Export\Phonenumber::class, + 'cascade' => ['persist', 'merge'], + 'mappedBy' => 'user', 'orphanRemoval' => true, - 'fetch' => ClassMetadata::FETCH_LAZY, - 'orderBy' => ['number' => 'ASC'], + 'fetch' => ClassMetadata::FETCH_LAZY, + 'orderBy' => ['number' => 'ASC'], ] ); +$joinColumns = []; + +$joinColumn = new Mapping\JoinColumnMetadata(); +$joinColumn->setColumnName("user_id"); +$joinColumn->setReferencedColumnName("id"); + +$joinColumns[] = $joinColumn; + +$inverseJoinColumns = []; + +$joinColumn = new Mapping\JoinColumnMetadata(); +$joinColumn->setColumnName("group_id"); +$joinColumn->setReferencedColumnName("id"); +$joinColumn->setColumnDefinition("INT NULL"); + +$inverseJoinColumns[] = $joinColumn; + +$joinTable = [ + 'name' => 'cms_users_groups', + 'joinColumns' => $joinColumns, + 'inverseJoinColumns' => $inverseJoinColumns, +]; + $metadata->mapManyToMany( [ - 'fieldName' => 'groups', + 'fieldName' => 'groups', 'targetEntity' => Export\Group::class, - 'fetch' => ClassMetadata::FETCH_EXTRA_LAZY, - 'cascade' => [ - 0 => 'remove', - 1 => 'persist', - 2 => 'refresh', - 3 => 'merge', - 4 => 'detach', - ], - 'mappedBy' => null, - 'joinTable' => [ - 'name' => 'cms_users_groups', - 'joinColumns' => [ - 0 => [ - 'name' => 'user_id', - 'referencedColumnName' => 'id', - 'onDelete' => null, - 'unique' => false, - 'nullable' => false, - ], - ], - 'inverseJoinColumns' => [ - 0 => [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - 'columnDefinition' => 'INT NULL', - ], - ], - ], - 'orderBy' => NULL, + 'cascade' => ['remove', 'persist', 'refresh', 'merge', 'detach'], + 'mappedBy' => null, + 'orderBy' => null, + 'joinTable' => $joinTable, + 'fetch' => ClassMetadata::FETCH_EXTRA_LAZY, ] ); From 3ff0afcabcb208144b67196e538b661488e450cd Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 26 Aug 2016 21:17:36 +0000 Subject: [PATCH 060/275] Starting the concept of Builders on Drivers --- .../Mapping/Builder/AssociationBuilder.php | 5 +- lib/Doctrine/ORM/Mapping/Builder/Builder.php | 31 + .../Mapping/Builder/ClassMetadataBuilder.php | 16 +- .../Mapping/Builder/ColumnMetadataBuilder.php | 250 ++++ .../DiscriminatorColumnMetadataBuilder.php | 60 + .../Mapping/Builder/FieldMetadataBuilder.php | 75 + .../Builder/JoinColumnMetadataBuilder.php | 115 ++ .../Builder/ManyToManyAssociationBuilder.php | 5 +- .../Builder/VersionFieldMetadataBuilder.php | 86 ++ lib/Doctrine/ORM/Mapping/ClassMetadata.php | 67 +- lib/Doctrine/ORM/Mapping/ColumnMetadata.php | 58 +- .../ORM/Mapping/Driver/AnnotationDriver.php | 48 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 33 +- .../Exporter/ColumnMetadataExporter.php | 73 + .../DiscriminatorColumnMetadataExporter.php | 44 + .../ORM/Mapping/Exporter/Exporter.php | 34 + .../Exporter/FieldMetadataExporter.php | 45 + .../ORM/Mapping/Exporter/VariableExporter.php | 60 + .../Exporter/VersionFieldMetadataExporter.php | 45 + lib/Doctrine/ORM/Mapping/FieldMetadata.php | 30 +- .../ORM/Mapping/JoinColumnMetadata.php | 4 +- lib/Doctrine/ORM/Mapping/MappingException.php | 15 +- .../ORM/Query/AST/Functions/SizeFunction.php | 8 +- lib/Doctrine/ORM/Query/SqlWalker.php | 13 +- .../Functional/OneToOneEagerLoadingTest.php | 26 +- .../Tests/ORM/Functional/QueryTest.php | 4 +- .../ORM/Functional/Ticket/DDC1225Test.php | 6 +- .../ORM/Functional/Ticket/DDC1430Test.php | 52 +- .../ORM/Functional/Ticket/DDC1595Test.php | 11 +- .../ORM/Functional/Ticket/DDC2224Test.php | 6 +- .../ORM/Functional/Ticket/DDC2825Test.php | 6 +- .../ORM/Functional/Ticket/DDC331Test.php | 7 +- .../ORM/Functional/Ticket/DDC448Test.php | 7 +- .../ORM/Functional/Ticket/DDC493Test.php | 7 +- .../ORM/Functional/Ticket/DDC513Test.php | 7 +- .../ORM/Functional/Ticket/DDC698Test.php | 8 +- .../ORM/Functional/Ticket/DDC719Test.php | 12 +- .../ORM/Mapping/ClassMetadataBuilderTest.php | 8 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 4 +- ...sicEntityPersisterCompositeTypeSqlTest.php | 6 +- .../BasicEntityPersisterTypeValueSqlTest.php | 19 +- .../ORM/Query/CustomTreeWalkersJoinTest.php | 4 +- .../Tests/ORM/Query/CustomTreeWalkersTest.php | 16 +- .../ORM/Query/DeleteSqlGenerationTest.php | 143 +- .../ORM/Query/SelectSqlGenerationTest.php | 1307 +++++++++-------- .../ORM/Query/UpdateSqlGenerationTest.php | 58 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 4 +- .../Pagination/CountOutputWalkerTest.php | 81 +- .../ORM/Tools/Pagination/CountWalkerTest.php | 119 +- .../LimitSubqueryOutputWalkerTest.php | 56 +- .../Pagination/LimitSubqueryWalkerTest.php | 12 +- .../Tools/Pagination/PaginationTestCase.php | 5 + .../Tools/Pagination/WhereInWalkerTest.php | 30 +- .../Tools/ResolveTargetEntityListenerTest.php | 2 +- .../Doctrine/Tests/OrmFunctionalTestCase.php | 8 +- 55 files changed, 2136 insertions(+), 1125 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/Builder/Builder.php create mode 100644 lib/Doctrine/ORM/Mapping/Builder/ColumnMetadataBuilder.php create mode 100644 lib/Doctrine/ORM/Mapping/Builder/DiscriminatorColumnMetadataBuilder.php create mode 100644 lib/Doctrine/ORM/Mapping/Builder/FieldMetadataBuilder.php create mode 100644 lib/Doctrine/ORM/Mapping/Builder/JoinColumnMetadataBuilder.php create mode 100644 lib/Doctrine/ORM/Mapping/Builder/VersionFieldMetadataBuilder.php create mode 100644 lib/Doctrine/ORM/Mapping/Exporter/ColumnMetadataExporter.php create mode 100644 lib/Doctrine/ORM/Mapping/Exporter/DiscriminatorColumnMetadataExporter.php create mode 100644 lib/Doctrine/ORM/Mapping/Exporter/Exporter.php create mode 100644 lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php create mode 100644 lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php create mode 100644 lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php diff --git a/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php index bbb0836e3c5..fac05279278 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php @@ -190,7 +190,10 @@ public function addJoinColumn($columnName, $referencedColumnName, $nullable = tr $joinColumn->setReferencedColumnName($referencedColumnName); $joinColumn->setNullable($nullable); $joinColumn->setUnique($unique); - $joinColumn->setColumnDefinition($columnDef); + + if ($columnDef) { + $joinColumn->setColumnDefinition($columnDef); + } if ($onDelete) { $joinColumn->setOnDelete($onDelete); diff --git a/lib/Doctrine/ORM/Mapping/Builder/Builder.php b/lib/Doctrine/ORM/Mapping/Builder/Builder.php new file mode 100644 index 00000000000..369e063d7ba --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Builder/Builder.php @@ -0,0 +1,31 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +interface Builder +{ + /** + * @return object + */ + public function build(); +} diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php index 0ada14d42d1..995d93550b7 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php @@ -283,23 +283,15 @@ public function setSingleTableInheritance() } /** - * Sets the discriminator column details. + * Sets the discriminator column. * - * @param string $name - * @param string $type - * @param int $length + * @param DiscriminatorColumnMetadata $discriminatorColumn * * @return ClassMetadataBuilder */ - public function setDiscriminatorColumn($name, $type = 'string', $length = 255) + public function setDiscriminatorColumn(DiscriminatorColumnMetadata $discriminatorColumn) { - $discrColumn = new DiscriminatorColumnMetadata(); - - $discrColumn->setColumnName($name); - $discrColumn->setType(Type::getType($type)); - $discrColumn->setLength($length); - - $this->cm->setDiscriminatorColumn($discrColumn); + $this->cm->setDiscriminatorColumn($discriminatorColumn); return $this; } diff --git a/lib/Doctrine/ORM/Mapping/Builder/ColumnMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ColumnMetadataBuilder.php new file mode 100644 index 00000000000..f6cfd6ce732 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Builder/ColumnMetadataBuilder.php @@ -0,0 +1,250 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\ColumnMetadata; + +class ColumnMetadataBuilder implements Builder +{ + /** @var string */ + protected $tableName; + + /** @var string */ + protected $columnName; + + /** @var Type */ + protected $type; + + /** @var int */ + protected $length = 255; + + /** @var int */ + protected $scale; + + /** @var int */ + protected $precision; + + /** @var string */ + protected $columnDefinition; + + /** @var array */ + protected $options = []; + + /** @var bool */ + protected $primaryKey = false; + + /** @var bool */ + protected $nullable = false; + + /** @var bool */ + protected $unique = false; + + /** + * ColumnMetadataBuilder constructor. + * + */ + public function __construct() + { + $this->type = Type::getType('string'); + } + + /** + * @param string $columnName + * + * @return self + */ + public function withColumnName(string $columnName) + { + $this->columnName = $columnName; + + return $this; + } + + /** + * @param Type $type + * + * @return self + */ + public function withType(Type $type) + { + $this->type = $type; + + return $this; + } + + /** + * @param string $tableName + * + * @return self + */ + public function withTableName(string $tableName) + { + $this->tableName = $tableName; + + return $this; + } + + /** + * @param string $columnDefinition + * + * @return self + */ + public function withColumnDefinition(string $columnDefinition) + { + $this->columnDefinition = $columnDefinition; + + return $this; + } + + /** + * @param int $length + * + * @return self + */ + public function withLength(int $length) + { + $this->length = $length; + + return $this; + } + + /** + * @param int $scale + * + * @return self + */ + public function withScale(int $scale) + { + $this->scale = $scale; + + return $this; + } + + /** + * @param int $precision + * + * @return self + */ + public function withPrecision(int $precision) + { + $this->precision = $precision; + + return $this; + } + + /** + * @param array $options + * + * @return self + */ + public function withOptions(array $options) + { + $this->options = $options; + + return $this; + } + + /** + * @param bool $primaryKey + * + * @return self + */ + public function withPrimaryKey(bool $primaryKey) + { + $this->primaryKey = $primaryKey; + + return $this; + } + + /** + * @param bool $nullable + * + * @return self + */ + public function withNullable(bool $nullable) + { + $this->nullable = $nullable; + + return $this; + } + + /** + * @param bool $unique + * + * @return self + */ + public function withUnique(bool $unique) + { + $this->unique = $unique; + + return $this; + } + + /** + * @return ColumnMetadata + */ + public function build() + { + $columnMetadata = $this->createMetadataObject(); + + if ($this->tableName !== null) { + $columnMetadata->setTableName($this->tableName); + } + + if ($this->columnDefinition !== null) { + $columnMetadata->setColumnDefinition($this->columnDefinition); + } + + if ($this->length !== null) { + $columnMetadata->setLength($this->length); + } + + if ($this->scale !== null) { + $columnMetadata->setScale($this->scale); + } + + if ($this->precision !== null) { + $columnMetadata->setPrecision($this->precision); + } + + // @todo: Remove this once constructor arguments is in place + $columnMetadata->setColumnName($this->columnName); + $columnMetadata->setType($this->type); + + $columnMetadata->setOptions($this->options); + $columnMetadata->setPrimaryKey($this->primaryKey); + $columnMetadata->setNullable($this->nullable); + $columnMetadata->setUnique($this->unique); + + return $columnMetadata; + } + + /** + * @return ColumnMetadata + */ + protected function createMetadataObject() + { + return new ColumnMetadata(); // new ColumnMetadata($this->columnName, $this->type); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/DiscriminatorColumnMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/DiscriminatorColumnMetadataBuilder.php new file mode 100644 index 00000000000..f5a2a434b99 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Builder/DiscriminatorColumnMetadataBuilder.php @@ -0,0 +1,60 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; +use Doctrine\ORM\Mapping\MappingException; + +class DiscriminatorColumnMetadataBuilder extends ColumnMetadataBuilder +{ + /** @var string */ + protected $columnName = 'dtype'; + + /** + * {@inheritdoc} + * + * @throws MappingException + */ + public function withType(Type $type) + { + $disallowedTypeList = ['boolean', 'array', 'object', 'datetime', 'time', 'date']; + $typeName = $type->getName(); + + if (in_array($typeName, $disallowedTypeList)) { + throw MappingException::invalidDiscriminatorColumnType($typeName); + } + + $this->type = $type; + + return $this; + } + + /** + * @return DiscriminatorColumnMetadata + */ + protected function createMetadataObject() + { + return new DiscriminatorColumnMetadata(); // new DiscriminatorColumnMetadata($this->columnName, $this->type); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/FieldMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/FieldMetadataBuilder.php new file mode 100644 index 00000000000..03f91321573 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Builder/FieldMetadataBuilder.php @@ -0,0 +1,75 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\NamingStrategy; + +class FieldMetadataBuilder extends ColumnMetadataBuilder +{ + /** @var string */ + protected $name; + + /** @var */ + private $namingStrategy; + + public function __construct(NamingStrategy $namingStrategy = null) + { + parent::__construct(); + + $this->namingStrategy = $namingStrategy ?: new DefaultNamingStrategy(); + } + + /** + * @param string $name + * + * @return self + */ + public function withName(string $name) + { + $this->name = $name; + + return $this; + } + + /** + * @return FieldMetadata + */ + public function build() + { + if (empty($this->columnName)) { + $this->columnName = $this->namingStrategy->propertyToColumnName($this->name); + } + + return parent::build(); + } + + /** + * @return FieldMetadata + */ + protected function createMetadataObject() + { + return new FieldMetadata($this->name); // new FieldMetadata($this->name, $this->columnName, $this->type); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/JoinColumnMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/JoinColumnMetadataBuilder.php new file mode 100644 index 00000000000..2cbafee204e --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Builder/JoinColumnMetadataBuilder.php @@ -0,0 +1,115 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\JoinColumnMetadata; +use Doctrine\ORM\Mapping\NamingStrategy; + +class JoinColumnMetadataBuilder extends ColumnMetadataBuilder +{ + /** @var string */ + private $referencedColumnName; + + /** @var string */ + private $aliasedName; + + /** @var boolean */ + protected $nullable = true; + + /** @var string */ + private $onDelete; + + /** @var */ + private $namingStrategy; + + public function __construct(NamingStrategy $namingStrategy = null) + { + parent::__construct(); + + $this->namingStrategy = $namingStrategy ?: new DefaultNamingStrategy(); + } + + /** + * @param string $referencedColumnName + * + * @return self + */ + public function withReferencedColumnName(string $referencedColumnName) + { + $this->referencedColumnName = $referencedColumnName; + + return $this; + } + + /** + * @param string $aliasedName + * + * @return self + */ + public function withAliasedName(string $aliasedName) + { + $this->aliasedName = $aliasedName; + + return $this; + } + + /** + * @param string $onDelete + * + * @return self + */ + public function withOnDelete(string $onDelete) + { + $this->onDelete = strtoupper($onDelete); + + return $this; + } + + /** + * @return JoinColumnMetadata + */ + public function build() + { + if (empty($this->referencedColumnName)) { + $this->referencedColumnName = $this->namingStrategy->referenceColumnName(); + } + + /** @var JoinColumnMetadata $metadata */ + $metadata = parent::build(); + + $metadata->setReferencedColumnName($this->referencedColumnName); + $metadata->setAliasedName($this->aliasedName); + $metadata->setOnDelete($this->onDelete); + + return $metadata; + } + + /** + * @return JoinColumnMetadata + */ + protected function createMetadataObject() + { + return new JoinColumnMetadata(); // new JoinColumnMetadata($this->columnName, $this->type); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php index 2c5e353cde0..ff350201186 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php @@ -72,7 +72,10 @@ public function addInverseJoinColumn($columnName, $referencedColumnName, $nullab $joinColumn->setReferencedColumnName($referencedColumnName); $joinColumn->setNullable($nullable); $joinColumn->setUnique($unique); - $joinColumn->setColumnDefinition($columnDef); + + if ($columnDef) { + $joinColumn->setColumnDefinition($columnDef); + } if ($onDelete) { $joinColumn->setOnDelete($onDelete); diff --git a/lib/Doctrine/ORM/Mapping/Builder/VersionFieldMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/VersionFieldMetadataBuilder.php new file mode 100644 index 00000000000..89b40957eb5 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Builder/VersionFieldMetadataBuilder.php @@ -0,0 +1,86 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\MappingException; +use Doctrine\ORM\Mapping\VersionFieldMetadata; + +class VersionFieldMetadataBuilder extends FieldMetadataBuilder +{ + /** @var string */ + protected $name = 'version'; + + /** + * {@inheritdoc} + * + * @throws MappingException + */ + public function withType(Type $type) + { + $allowedTypeList = ['integer', 'bigint', 'smallint', 'datetime']; + $typeName = $type->getName(); + + if (! in_array($typeName, $allowedTypeList)) { + throw MappingException::unsupportedOptimisticLockingType($typeName); + } + + $this->type = $type; + + return $this; + } + + /** + * @return VersionFieldMetadata + */ + public function build() + { + if (! isset($this->options['default'])) { + $this->options['default'] = $this->resolveDefaultValue(); + } + + return parent::build(); + } + + /** + * @return VersionFieldMetadata + */ + protected function createMetadataObject() + { + return new VersionFieldMetadata($this->name); // new VersionFieldMetadata($this->name, $this->columnName, $this->type); + } + + /** + * @return int|string + */ + private function resolveDefaultValue() + { + switch ($this->type->getName()) { + case Type::DATETIME: + return 'CURRENT_TIMESTAMP'; + + default: + return 1; + } + } +} diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 7f4efde405b..3759cf908a9 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -2125,17 +2125,32 @@ public function getProperty($fieldName) */ public function addProperty($fieldName, Type $type, array $mapping = []) { - $property = new FieldMetadata(); + $property = new FieldMetadata($fieldName); $property->setDeclaringClass($this); - $property->setName($fieldName); - $property->setType($type); - $property->setTableName(! $this->isMappedSuperclass ? $this->getTableName() : null); $property->setColumnName($mapping['columnName'] ?? $this->namingStrategy->propertyToColumnName($fieldName, $this->name)); - $property->setColumnDefinition($mapping['columnDefinition'] ?? null); - $property->setLength($mapping['length'] ?? null); - $property->setScale($mapping['scale'] ?? null); - $property->setPrecision($mapping['precision'] ?? null); + $property->setType($type); + + if (! $this->isMappedSuperclass) { + $property->setTableName($this->getTableName()); + } + + if (isset($mapping['columnDefinition'])) { + $property->setColumnDefinition($mapping['columnDefinition']); + } + + if (isset($mapping['length'])) { + $property->setLength($mapping['length']); + } + + if (isset($mapping['scale'])) { + $property->setScale($mapping['scale']); + } + + if (isset($mapping['precision'])) { + $property->setPrecision($mapping['precision']); + } + $property->setOptions($mapping['options'] ?? []); $property->setPrimaryKey(isset($mapping['id']) && $mapping['id']); $property->setNullable(isset($mapping['nullable']) && $mapping['nullable']); @@ -2192,7 +2207,7 @@ public function addProperty($fieldName, Type $type, array $mapping = []) */ public function addInheritedProperty(Property $property) { - $inheritedProperty = new FieldMetadata(); + $inheritedProperty = new FieldMetadata($property->getName()); $declaringClass = $property->getDeclaringClass(); if ( ! $declaringClass->isMappedSuperclass) { @@ -2200,17 +2215,29 @@ public function addInheritedProperty(Property $property) } $inheritedProperty->setDeclaringClass($declaringClass); - $inheritedProperty->setName($property->getName()); - $inheritedProperty->setType($property->getType()); + + if ($property->getColumnDefinition()) { + $inheritedProperty->setColumnDefinition($property->getColumnDefinition()); + } + + if ($property->getLength()) { + $inheritedProperty->setLength($property->getLength()); + } + + if ($property->getScale()) { + $inheritedProperty->setScale($property->getScale()); + } + + if ($property->getPrecision()) { + $inheritedProperty->setPrecision($property->getPrecision()); + } + $inheritedProperty->setColumnName($property->getColumnName()); - $inheritedProperty->setColumnDefinition($property->getColumnDefinition()); + $inheritedProperty->setType($property->getType()); + $inheritedProperty->setOptions($property->getOptions()); $inheritedProperty->setPrimaryKey($property->isPrimaryKey()); $inheritedProperty->setNullable($property->isNullable()); $inheritedProperty->setUnique($property->isUnique()); - $inheritedProperty->setLength($property->getLength()); - $inheritedProperty->setScale($property->getScale()); - $inheritedProperty->setPrecision($property->getPrecision()); - $inheritedProperty->setOptions($property->getOptions()); $this->fieldNames[$property->getColumnName()] = $property->getName(); $this->properties[$property->getName()] = $inheritedProperty; @@ -2585,7 +2612,7 @@ public function setDiscriminatorColumn(DiscriminatorColumnMetadata $discriminato $allowedTypeList = ["boolean", "array", "object", "datetime", "time", "date"]; if (in_array($discriminatorColumn->getTypeName(), $allowedTypeList)) { - throw MappingException::invalidDiscriminatorColumnType($this->name, $discriminatorColumn->getTypeName()); + throw MappingException::invalidDiscriminatorColumnType($discriminatorColumn->getTypeName()); } $this->discriminatorColumn = $discriminatorColumn; @@ -2865,11 +2892,7 @@ public function setVersionProperty(FieldMetadata $versionFieldMetadata) return; } - throw MappingException::unsupportedOptimisticLockingType( - $this->name, - $versionFieldMetadata->getName(), - $versionFieldMetadata->getType() - ); + throw MappingException::unsupportedOptimisticLockingType($versionFieldMetadata->getType()); } /** diff --git a/lib/Doctrine/ORM/Mapping/ColumnMetadata.php b/lib/Doctrine/ORM/Mapping/ColumnMetadata.php index 27d356b538e..54aaa7ed1e9 100644 --- a/lib/Doctrine/ORM/Mapping/ColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ColumnMetadata.php @@ -46,17 +46,17 @@ class ColumnMetadata /** * @var integer */ - protected $length = 255; + protected $length; /** * @var integer */ - protected $scale = 0; + protected $scale; /** * @var integer */ - protected $precision = 0; + protected $precision; /** * @var array @@ -78,6 +78,20 @@ class ColumnMetadata */ protected $unique = false; + /** + * ColumnMetadata constructor. + * + * @param string $columnName + * @param Type $type + * + * @todo Leverage this implementation instead of default, blank constructor + */ + /*public function __construct(string $columnName, Type $type) + { + $this->columnName = $columnName; + $this->type = $type; + }*/ + /** * @return string */ @@ -145,13 +159,13 @@ public function getColumnDefinition() /** * @param string $columnDefinition */ - public function setColumnDefinition($columnDefinition) + public function setColumnDefinition(string $columnDefinition) { $this->columnDefinition = $columnDefinition; } /** - * @return integer + * @return int */ public function getLength() { @@ -159,15 +173,15 @@ public function getLength() } /** - * @param integer $length + * @param int $length */ - public function setLength($length) + public function setLength(int $length) { $this->length = $length; } /** - * @return integer + * @return int */ public function getScale() { @@ -175,15 +189,15 @@ public function getScale() } /** - * @param integer $scale + * @param int $scale */ - public function setScale($scale) + public function setScale(int $scale) { $this->scale = $scale; } /** - * @return integer + * @return int */ public function getPrecision() { @@ -191,9 +205,9 @@ public function getPrecision() } /** - * @param integer $precision + * @param int $precision */ - public function setPrecision($precision) + public function setPrecision(int $precision) { $this->precision = $precision; } @@ -215,15 +229,15 @@ public function setOptions(array $options) } /** - * @param boolean $isPrimaryKey + * @param bool $isPrimaryKey */ - public function setPrimaryKey($isPrimaryKey) + public function setPrimaryKey(bool $isPrimaryKey) { $this->primaryKey = $isPrimaryKey; } /** - * @return boolean + * @return bool */ public function isPrimaryKey() { @@ -231,15 +245,15 @@ public function isPrimaryKey() } /** - * @param boolean $isNullable + * @param bool $isNullable */ - public function setNullable($isNullable) + public function setNullable(bool $isNullable) { $this->nullable = $isNullable; } /** - * @return boolean + * @return bool */ public function isNullable() { @@ -247,15 +261,15 @@ public function isNullable() } /** - * @param boolean $isUnique + * @param bool $isUnique */ - public function setUnique($isUnique) + public function setUnique(bool $isUnique) { $this->unique = $isUnique; } /** - * @return boolean + * @return bool */ public function isUnique() { diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 7009a1379d3..1dddab5037f 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -27,8 +27,8 @@ use Doctrine\ORM\Events; use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; +use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\MappingException; @@ -224,36 +224,43 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat ); if ($metadata->inheritanceType !== ClassMetadata::INHERITANCE_TYPE_NONE) { - $discrColumn = new DiscriminatorColumnMetadata(); + $discriminatorColumnBuilder = new DiscriminatorColumnMetadataBuilder(); - $discrColumn->setTableName($metadata->getTableName()); + $discriminatorColumnBuilder->withTableName($metadata->getTableName()); // Evaluate DiscriminatorColumn annotation if (isset($classAnnotations[Annotation\DiscriminatorColumn::class])) { - $discrColumnAnnot = $classAnnotations[Annotation\DiscriminatorColumn::class]; - - $discrColumn->setColumnName($discrColumnAnnot->name); - $discrColumn->setColumnDefinition($discrColumnAnnot->columnDefinition); - $discrColumn->setType(Type::getType($discrColumnAnnot->type ?: 'string')); - $discrColumn->setLength($discrColumnAnnot->length ?: 255); - } else { - $discrColumn->setColumnName('dtype'); - $discrColumn->setType(Type::getType('string')); - $discrColumn->setLength(255); + /** @var Annotation\DiscriminatorColumn $discriminatorColumnAnnotation */ + $discriminatorColumnAnnotation = $classAnnotations[Annotation\DiscriminatorColumn::class]; + + $discriminatorColumnBuilder->withColumnName($discriminatorColumnAnnotation->name); + + if (! empty($discriminatorColumnAnnotation->columnDefinition)) { + $discriminatorColumnBuilder->withColumnDefinition($discriminatorColumnAnnotation->columnDefinition); + } + + if (! empty($discriminatorColumnAnnotation->type)) { + $discriminatorColumnBuilder->withType(Type::getType($discriminatorColumnAnnotation->type)); + } + + if (! empty($discriminatorColumnAnnotation->length)) { + $discriminatorColumnBuilder->withLength($discriminatorColumnAnnotation->length); + } } - $metadata->setDiscriminatorColumn($discrColumn); + $discriminatorColumn = $discriminatorColumnBuilder->build(); + + $metadata->setDiscriminatorColumn($discriminatorColumn); // Evaluate DiscriminatorMap annotation if (isset($classAnnotations[Annotation\DiscriminatorMap::class])) { - $discrMapAnnot = $classAnnotations[Annotation\DiscriminatorMap::class]; + $discriminatorMapAnnotation = $classAnnotations[Annotation\DiscriminatorMap::class]; - $metadata->setDiscriminatorMap($discrMapAnnot->value); + $metadata->setDiscriminatorMap($discriminatorMapAnnotation->value); } } } - // Evaluate DoctrineChangeTrackingPolicy annotation if (isset($classAnnotations[Annotation\ChangeTrackingPolicy::class])) { $changeTrackingAnnot = $classAnnotations[Annotation\ChangeTrackingPolicy::class]; @@ -352,6 +359,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $mapping['cascade'] = $oneToOneAnnot->cascade; $mapping['orphanRemoval'] = $oneToOneAnnot->orphanRemoval; $mapping['fetch'] = $this->getFetchMode($className, $oneToOneAnnot->fetch); + $metadata->mapOneToOne($mapping); } else if ($oneToManyAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\OneToMany::class)) { $mapping['mappedBy'] = $oneToManyAnnot->mappedBy; @@ -376,6 +384,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $mapping['inversedBy'] = $manyToOneAnnot->inversedBy; $mapping['targetEntity'] = $manyToOneAnnot->targetEntity; $mapping['fetch'] = $this->getFetchMode($className, $manyToOneAnnot->fetch); + $metadata->mapManyToOne($mapping); } else if ($manyToManyAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\ManyToMany::class)) { $joinTable = []; @@ -605,12 +614,15 @@ private function convertJoinColumnAnnotationToJoinColumnMetadata(Annotation\Join $joinColumn = new JoinColumnMetadata(); $joinColumn->setColumnName($joinColumnAnnot->name); - $joinColumn->setColumnDefinition($joinColumnAnnot->columnDefinition); $joinColumn->setReferencedColumnName($joinColumnAnnot->referencedColumnName); $joinColumn->setAliasedName($joinColumnAnnot->fieldName); $joinColumn->setNullable($joinColumnAnnot->nullable); $joinColumn->setUnique($joinColumnAnnot->unique); + if (! empty($joinColumnAnnot->columnDefinition)) { + $joinColumn->setColumnDefinition($joinColumnAnnot->columnDefinition); + } + if ($joinColumnAnnot->onDelete) { $joinColumn->setOnDelete(strtoupper($joinColumnAnnot->onDelete)); } diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 1ce0b8cfd24..6c934f44c05 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -23,7 +23,7 @@ use Doctrine\Common\Persistence\Mapping\Driver\FileDriver; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; -use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; +use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\MappingException; use SimpleXMLElement; @@ -169,25 +169,32 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $metadata->setInheritanceType(constant('Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_' . $inheritanceType)); if ($metadata->inheritanceType !== \Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_NONE) { - $discrColumn = new DiscriminatorColumnMetadata(); + $discriminatorColumnBuilder = new DiscriminatorColumnMetadataBuilder(); - $discrColumn->setTableName($metadata->getTableName()); + $discriminatorColumnBuilder->withTableName($metadata->getTableName()); // Evaluate if (isset($xmlRoot->{'discriminator-column'})) { - $mapping = $xmlRoot->{'discriminator-column'}; + $discriminatorColumnMapping = $xmlRoot->{'discriminator-column'}; + $typeName = isset($discriminatorColumnMapping['type']) + ? (string) $discriminatorColumnMapping['type'] + : 'string'; - $discrColumn->setColumnName(isset($mapping['name']) ? (string) $mapping['name'] : 'dtype'); - $discrColumn->setType(Type::getType(isset($mapping['type']) ? (string) $mapping['type'] : 'string')); - $discrColumn->setLength(isset($mapping['length']) ? (string) $mapping['length'] : 255); - $discrColumn->setColumnDefinition(isset($mapping['column-definition']) ? (string) $mapping['column-definition'] : null); - } else { - $discrColumn->setColumnName('dtype'); - $discrColumn->setType(Type::getType('string')); - $discrColumn->setLength(255); + $discriminatorColumnBuilder->withType(Type::getType($typeName)); + $discriminatorColumnBuilder->withColumnName((string) $discriminatorColumnMapping['name']); + + if (isset($discriminatorColumnMapping['column-definition'])) { + $discriminatorColumnBuilder->withColumnDefinition((string) $discriminatorColumnMapping['column-definition']); + } + + if (isset($discriminatorColumnMapping['length'])) { + $discriminatorColumnBuilder->withLength((int) $discriminatorColumnMapping['length']); + } } - $metadata->setDiscriminatorColumn($discrColumn); + $discriminatorColumn = $discriminatorColumnBuilder->build(); + + $metadata->setDiscriminatorColumn($discriminatorColumn); // Evaluate if (isset($xmlRoot->{'discriminator-map'})) { diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ColumnMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ColumnMetadataExporter.php new file mode 100644 index 00000000000..66fdb5bae0d --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Exporter/ColumnMetadataExporter.php @@ -0,0 +1,73 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\ColumnMetadata; + +class ColumnMetadataExporter implements Exporter +{ + const VARIABLE = '$column'; + + /** + * {@inheritdoc} + */ + public function export($value, int $indentationLevel = 0) + { + /** @var ColumnMetadata $value */ + $variableExporter = new VariableExporter(); + $indentation = str_repeat(self::INDENTATION, $indentationLevel); + $objectReference = $indentation . static::VARIABLE; + $lines = []; + + $lines[] = $objectReference . ' = ' . $this->exportInstantiation($value); + + if (! empty($value->getColumnDefinition())) { + $lines[] = $objectReference. '->setColumnDefinition("' . $value->getColumnDefinition() . '");'; + } + + $lines[] = $objectReference . '->setTableName("' . $value->getTableName() . '");'; + $lines[] = $objectReference . '->setLength(' . $value->getLength() . ');'; + $lines[] = $objectReference . '->setScale(' . $value->getScale() . ');'; + $lines[] = $objectReference . '->setPrecision(' . $value->getPrecision() . ');'; + $lines[] = $objectReference . '->setOptions(' . ltrim($variableExporter->export($value->getOptions(), $indentationLevel + 1)) . ');'; + $lines[] = $objectReference . '->setPrimaryKey(' . ltrim($variableExporter->export($value->isPrimaryKey(), $indentationLevel + 1)) . ');'; + $lines[] = $objectReference . '->setNullable(' . ltrim($variableExporter->export($value->isNullable(), $indentationLevel + 1)) . ');'; + $lines[] = $objectReference . '->setUnique(' . ltrim($variableExporter->export($value->isUnique(), $indentationLevel + 1)) . ');'; + + return implode(PHP_EOL, $lines); + } + + /** + * @param ColumnMetadata $metadata + * + * @return string + */ + protected function exportInstantiation(ColumnMetadata $metadata) + { + return sprintf( + 'new Mapping\ColumnMetadata("%s", Type::getType("%s"));', + $metadata->getColumnName(), + $metadata->getTypeName() + ); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/DiscriminatorColumnMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/DiscriminatorColumnMetadataExporter.php new file mode 100644 index 00000000000..e71d77d61ae --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Exporter/DiscriminatorColumnMetadataExporter.php @@ -0,0 +1,44 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; + +class DiscriminatorColumnMetadataExporter extends ColumnMetadataExporter +{ + const VARIABLE = '$discriminatorColumn'; + + /** + * @param DiscriminatorColumnMetadata $metadata + * + * @return string + */ + protected function exportInstantiation(DiscriminatorColumnMetadata $metadata) + { + return sprintf( + 'new Mapping\DiscriminatorColumnMetadata("%s", Type::getType("%s"));', + $metadata->getColumnName(), + $metadata->getTypeName() + ); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/Exporter.php b/lib/Doctrine/ORM/Mapping/Exporter/Exporter.php new file mode 100644 index 00000000000..8fc16da06d4 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Exporter/Exporter.php @@ -0,0 +1,34 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +interface Exporter +{ + /** + * @param mixed $value + * @param int $indentationLevel + * + * @return string + */ + public function export($value, int $indentationLevel = 0); +} diff --git a/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php new file mode 100644 index 00000000000..cb65dab5105 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php @@ -0,0 +1,45 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\FieldMetadata; + +class FieldMetadataExporter extends ColumnMetadataExporter +{ + const VARIABLE = '$field'; + + /** + * @param FieldMetadata $metadata + * + * @return string + */ + protected function exportInstantiation(FieldMetadata $metadata) + { + return sprintf( + 'new Mapping\FieldMetadata("%s", "%s", Type::getType("%s"));', + $metadata->getName(), + $metadata->getColumnName(), + $metadata->getTypeName() + ); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php new file mode 100644 index 00000000000..af602d4d3be --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php @@ -0,0 +1,60 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +class VariableExporter implements Exporter +{ + const INDENTATION = ' '; + + /** + * {@inheritdoc} + */ + public function export($value, int $indentationLevel = 0) + { + if (! is_array($value)) { + return var_export($value, true); + } + + $indentation = str_repeat(self::INDENTATION, $indentationLevel); + $longestKey = array_reduce(array_keys($value), function ($k, $v) { + return (string) (strlen((string) $k) > strlen((string) $v) ? $k : $v); + }); + $maxKeyLength = strlen($longestKey) + (is_numeric($longestKey) ? 0 : 2); + + $lines = []; + + $lines[] = $indentation . '['; + + foreach ($value as $entryKey => $entryValue) { + $lines[] = sprintf('%s%s => %s,', + $indentation . self::INDENTATION, + str_pad(var_export($entryKey, true), $maxKeyLength), + ltrim($this->export($entryValue, $indentationLevel + 1)) + ); + } + + $lines[] = $indentation . ']'; + + return implode(PHP_EOL, $lines); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php new file mode 100644 index 00000000000..21e302ca53f --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php @@ -0,0 +1,45 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\VersionFieldMetadata; + +class VersionFieldMetadataExporter extends FieldMetadataExporter +{ + const VARIABLE = '$versionField'; + + /** + * @param VersionFieldMetadata $metadata + * + * @return string + */ + protected function exportInstantiation(VersionFieldMetadata $metadata) + { + return sprintf( + 'new Mapping\VersionFieldMetadata("%s", "%s", Type::getType("%s"));', + $metadata->getName(), + $metadata->getColumnName(), + $metadata->getTypeName() + ); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index 9bca3bd75d1..9e9812c0db9 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Mapping; use Doctrine\Common\Persistence\Mapping\ReflectionService; +use Doctrine\DBAL\Types\Type; class FieldMetadata extends ColumnMetadata implements Property { @@ -38,6 +39,27 @@ class FieldMetadata extends ColumnMetadata implements Property */ private $name; + /** + * FieldMetadata constructor. + * + * @param string $name + * @param string $columnName + * @param Type $type + * + * @todo Leverage this implementation instead of default, simple constructor + */ + /*public function __construct(string $name, string $columnName, Type $type) + { + parent::__construct($columnName, $type); + + $this->name = $name; + }*/ + + public function __construct(string $name) + { + $this->name = $name; + } + /** * {@inheritdoc} */ @@ -62,14 +84,6 @@ public function getName() return $this->name; } - /** - * {@inheritdoc} - */ - public function setName($name) - { - $this->name = $name; - } - /** * {@inheritdoc} */ diff --git a/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php b/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php index 8d2d0c43a4c..e9d5d431478 100644 --- a/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php @@ -27,9 +27,7 @@ class JoinColumnMetadata extends ColumnMetadata /** @var string */ private $aliasedName; - /** - * @var boolean - */ + /** @var boolean */ protected $nullable = true; /** @var string */ diff --git a/lib/Doctrine/ORM/Mapping/MappingException.php b/lib/Doctrine/ORM/Mapping/MappingException.php index 949fac97bfd..c77b1588f43 100644 --- a/lib/Doctrine/ORM/Mapping/MappingException.php +++ b/lib/Doctrine/ORM/Mapping/MappingException.php @@ -279,7 +279,7 @@ public static function joinTableRequired($fieldName) * * @return MappingException */ - static function missingRequiredOption($field, $expectedOption, $hint = '') + public static function missingRequiredOption($field, $expectedOption, $hint = '') { $message = "The mapping of field '{$field}' is invalid: The option '{$expectedOption}' is required."; @@ -449,17 +449,13 @@ public static function noIdDefined($entity) } /** - * @param string $entity - * @param string $fieldName * @param string $unsupportedType * * @return MappingException */ - public static function unsupportedOptimisticLockingType($entity, $fieldName, $unsupportedType) + public static function unsupportedOptimisticLockingType($unsupportedType) { - return new self('Locking type "'.$unsupportedType.'" (specified in "'.$entity.'", field "'.$fieldName.'") ' - .'is not supported by Doctrine.' - ); + return new self('Locking type "'.$unsupportedType.'" is not supported by Doctrine.'); } /** @@ -535,14 +531,13 @@ public static function missingDiscriminatorColumn($className) } /** - * @param string $className * @param string $type * * @return MappingException */ - public static function invalidDiscriminatorColumnType($className, $type) + public static function invalidDiscriminatorColumnType($type) { - return new self("Discriminator column type on entity class '$className' is not allowed to be '$type'. 'string' or 'integer' type variables are suggested!"); + return new self("Discriminator column type is not allowed to be '$type'. 'string' or 'integer' type variables are suggested!"); } /** diff --git a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php index 71795e24ea0..347de2f73ab 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php @@ -72,8 +72,9 @@ public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) $property = $class->getProperty($class->fieldNames[$targetColumn]); $sourceColumnName = $platform->quoteIdentifier($property->getColumnName()); + $targetColumnName = $platform->quoteIdentifier($sourceColumn); - $sql .= $targetTableAlias . '.' . $sourceColumn + $sql .= $targetTableAlias . '.' . $targetColumnName . ' = ' . $sourceTableAlias . '.' . $sourceColumnName; } @@ -87,6 +88,11 @@ public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) $joinTableAlias = $sqlWalker->getSQLTableAlias($joinTable['name']); $sourceTableAlias = $sqlWalker->getSQLTableAlias($class->getTableName(), $dqlAlias); + // Quote in case source table alias matches class table name (happens in an UPDATE statement) + if ($sourceTableAlias === $class->getTableName()) { + $sourceTableAlias = $platform->quoteIdentifier($sourceTableAlias); + } + // join to target table $sql .= $quoteStrategy->getJoinTableName($owningAssoc, $targetClass, $platform) . ' ' . $joinTableAlias . ' WHERE '; diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 9142897cc10..0fae60b879e 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -1930,10 +1930,17 @@ public function walkCollectionMemberExpression($collMemberExpr) $sqlParts = []; foreach ($owningAssoc['targetToSourceKeyColumns'] as $targetColumn => $sourceColumn) { - $property = $class->getProperty($class->fieldNames[$targetColumn]); - $targetColumn = $this->platform->quoteIdentifier($property->getColumnName()); + $property = $class->getProperty($class->fieldNames[$targetColumn]); + $sourceColumnName = $this->platform->quoteIdentifier($property->getColumnName()); + $targetColumnName = $this->platform->quoteIdentifier($sourceColumn); - $sqlParts[] = $sourceTableAlias . '.' . $targetColumn . ' = ' . $targetTableAlias . '.' . $sourceColumn; + $sqlParts[] = sprintf( + '%s.%s = %s.%s', + $sourceTableAlias, + $sourceColumnName, + $targetTableAlias, + $targetColumnName + ); } foreach ($this->quoteStrategy->getIdentifierColumnNames($targetClass, $this->platform) as $targetColumnName) { diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php index f7c78ca295a..9655f4325d2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php @@ -144,16 +144,19 @@ public function testEagerLoadWithNullableColumnsGeneratesLeftJoinOnBothSides() $this->_em->flush(); $this->_em->clear(); - $train = $this->_em->find(get_class($train), $train->id); + $this->_em->find(get_class($train), $train->id); + self::assertSQLEquals( - "SELECT t0.id AS id_1, t0.driver_id AS driver_id_2, t4.id AS id_3, t4.name AS name_5, t0.owner_id AS owner_id_6, t8.id AS id_7, t8.name AS name_9 FROM Train t0 LEFT JOIN TrainDriver t4 ON t0.driver_id = t4.id INNER JOIN TrainOwner t8 ON t0.owner_id = t8.id WHERE t0.id = ?", + 'SELECT t0."id" AS id_1, t0."driver_id" AS driver_id_2, t4."id" AS id_3, t4."name" AS name_5, t0."owner_id" AS owner_id_6, t8."id" AS id_7, t8."name" AS name_9 FROM "Train" t0 LEFT JOIN "TrainDriver" t4 ON t0."driver_id" = t4."id" INNER JOIN "TrainOwner" t8 ON t0."owner_id" = t8."id" WHERE t0."id" = ?', $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery]['sql'] ); $this->_em->clear(); - $driver = $this->_em->find(get_class($driver), $driver->id); + + $this->_em->find(get_class($driver), $driver->id); + self::assertSQLEquals( - "SELECT t0.id AS id_1, t0.name AS name_2, t4.id AS id_3, t4.driver_id AS driver_id_5, t4.owner_id AS owner_id_6 FROM TrainOwner t0 LEFT JOIN Train t4 ON t4.owner_id = t0.id WHERE t0.id IN (?)", + 'SELECT t0."id" AS id_1, t0."name" AS name_2, t4."id" AS id_3, t4."driver_id" AS driver_id_5, t4."owner_id" AS owner_id_6 FROM "TrainOwner" t0 LEFT JOIN "Train" t4 ON t4."owner_id" = t0."id" WHERE t0."id" IN (?)', $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery]['sql'] ); } @@ -173,17 +176,17 @@ public function testEagerLoadWithNonNullableColumnsGeneratesInnerJoinOnOwningSid $this->_em->flush(); $this->_em->clear(); - $waggon = $this->_em->find(get_class($waggon), $waggon->id); + $this->_em->find(get_class($waggon), $waggon->id); // The last query is the eager loading of the owner of the train self::assertSQLEquals( - "SELECT t0.id AS id_1, t0.name AS name_2, t4.id AS id_3, t4.driver_id AS driver_id_5, t4.owner_id AS owner_id_6 FROM TrainOwner t0 LEFT JOIN Train t4 ON t4.owner_id = t0.id WHERE t0.id IN (?)", + 'SELECT t0."id" AS id_1, t0."name" AS name_2, t4."id" AS id_3, t4."driver_id" AS driver_id_5, t4."owner_id" AS owner_id_6 FROM "TrainOwner" t0 LEFT JOIN "Train" t4 ON t4."owner_id" = t0."id" WHERE t0."id" IN (?)', $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery]['sql'] ); // The one before is the fetching of the waggon and train self::assertSQLEquals( - "SELECT t0.id AS id_1, t0.train_id AS train_id_2, t4.id AS id_3, t4.driver_id AS driver_id_5, t4.owner_id AS owner_id_6 FROM Waggon t0 INNER JOIN Train t4 ON t0.train_id = t4.id WHERE t0.id = ?", + 'SELECT t0."id" AS id_1, t0."train_id" AS train_id_2, t4."id" AS id_3, t4."driver_id" AS driver_id_5, t4."owner_id" AS owner_id_6 FROM "Waggon" t0 INNER JOIN "Train" t4 ON t0."train_id" = t4."id" WHERE t0."id" = ?', $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery - 1]['sql'] ); } @@ -195,13 +198,15 @@ public function testEagerLoadWithNonNullableColumnsGeneratesLeftJoinOnNonOwningS { $owner = new TrainOwner('Alexander'); $train = new Train($owner); + $this->_em->persist($train); $this->_em->flush(); $this->_em->clear(); - $waggon = $this->_em->find(get_class($owner), $owner->id); + $this->_em->find(get_class($owner), $owner->id); + self::assertSQLEquals( - "SELECT t0.id AS id_1, t0.name AS name_2, t4.id AS id_3, t4.driver_id AS driver_id_5, t4.owner_id AS owner_id_6 FROM TrainOwner t0 LEFT JOIN Train t4 ON t4.owner_id = t0.id WHERE t0.id = ?", + 'SELECT t0."id" AS id_1, t0."name" AS name_2, t4."id" AS id_3, t4."driver_id" AS driver_id_5, t4."owner_id" AS owner_id_6 FROM "TrainOwner" t0 LEFT JOIN "Train" t4 ON t4."owner_id" = t0."id" WHERE t0."id" = ?', $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery]['sql'] ); } @@ -213,6 +218,7 @@ public function testEagerLoadingDoesNotBreakRefresh() { $train = new Train(new TrainOwner('Johannes')); $order = new TrainOrder($train); + $this->_em->persist($train); $this->_em->persist($order); $this->_em->flush(); @@ -220,7 +226,9 @@ public function testEagerLoadingDoesNotBreakRefresh() $this->_em->getConnection()->exec("UPDATE TrainOrder SET train_id = NULL"); self::assertSame($train, $order->train); + $this->_em->refresh($order); + self::assertTrue($order->train === null, "Train reference was not refreshed to NULL."); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/QueryTest.php b/tests/Doctrine/Tests/ORM/Functional/QueryTest.php index 90b637a5457..90cf7c661d7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/QueryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/QueryTest.php @@ -417,15 +417,13 @@ public function testSupportsQueriesWithEntityNamespaces() try { $query = $this->_em->createQuery('UPDATE CMS:CmsUser u SET u.name = ?1'); - self::assertEquals('UPDATE cms_users SET name = ?', $query->getSQL()); + self::assertEquals('UPDATE "cms_users" SET "name" = ?', $query->getSQL()); $query->free(); } catch (\Exception $e) { $this->fail($e->getMessage()); } - self::assertEquals('UPDATE cms_users SET name = ?', $sqlGenerated); - $this->_em->getConfiguration()->setEntityNamespaces([]); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1225Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1225Test.php index cb3b15dbf65..99d7a0138e8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1225Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1225Test.php @@ -30,9 +30,9 @@ public function testIssue() ->where('te1.testEntity2 = ?1') ->setParameter(1, 0); - self::assertEquals( - strtolower('SELECT t0_.test_entity2_id AS test_entity2_id_0 FROM te1 t0_ WHERE t0_.test_entity2_id = ?'), - strtolower($qb->getQuery()->getSQL()) + self::assertSQLEquals( + 'SELECT t0_."test_entity2_id" AS test_entity2_id_0 FROM "te1" t0_ WHERE t0_."test_entity2_id" = ?', + $qb->getQuery()->getSQL() ); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1430Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1430Test.php index bfb92203a2f..b623264d9bb 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1430Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1430Test.php @@ -35,9 +35,15 @@ public function testOrderByFields() ->orderBy('o.id') ->getQuery(); - self::assertSQLEquals('SELECT o.id, o.date, COUNT(p.id) AS p_count FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1430Order o LEFT JOIN o.products p GROUP BY o.id, o.date ORDER BY o.id ASC', $query->getDQL()); - self::assertSQLEquals('SELECT d0_.order_id AS order_id_0, d0_.created_at AS created_at_1, COUNT(d1_.id) AS sclr_2 FROM DDC1430Order d0_ LEFT JOIN DDC1430OrderProduct d1_ ON d0_.order_id = d1_.order_id GROUP BY d0_.order_id, d0_.created_at ORDER BY d0_.order_id ASC', $query->getSQL()); + self::assertSQLEquals( + 'SELECT o.id, o.date, COUNT(p.id) AS p_count FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1430Order o LEFT JOIN o.products p GROUP BY o.id, o.date ORDER BY o.id ASC', + $query->getDQL() + ); + self::assertSQLEquals( + 'SELECT d0_."order_id" AS order_id_0, d0_."created_at" AS created_at_1, COUNT(d1_."id") AS sclr_2 FROM "DDC1430Order" d0_ LEFT JOIN "DDC1430OrderProduct" d1_ ON d0_."order_id" = d1_."order_id" GROUP BY d0_."order_id", d0_."created_at" ORDER BY d0_."order_id" ASC', + $query->getSQL() + ); $result = $query->getResult(); @@ -67,11 +73,17 @@ public function testOrderByAllObjectFields() ->getQuery(); - self::assertSQLEquals('SELECT o, COUNT(p.id) AS p_count FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1430Order o LEFT JOIN o.products p GROUP BY o.id, o.date, o.status ORDER BY o.id ASC', $query->getDQL()); - self::assertSQLEquals('SELECT d0_.order_id AS order_id_0, d0_.created_at AS created_at_1, d0_.order_status AS order_status_2, COUNT(d1_.id) AS sclr_3 FROM DDC1430Order d0_ LEFT JOIN DDC1430OrderProduct d1_ ON d0_.order_id = d1_.order_id GROUP BY d0_.order_id, d0_.created_at, d0_.order_status ORDER BY d0_.order_id ASC', $query->getSQL()); + self::assertSQLEquals( + 'SELECT o, COUNT(p.id) AS p_count FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1430Order o LEFT JOIN o.products p GROUP BY o.id, o.date, o.status ORDER BY o.id ASC', + $query->getDQL() + ); - $result = $query->getResult(); + self::assertSQLEquals( + 'SELECT d0_."order_id" AS order_id_0, d0_."created_at" AS created_at_1, d0_."order_status" AS order_status_2, COUNT(d1_."id") AS sclr_3 FROM "DDC1430Order" d0_ LEFT JOIN "DDC1430OrderProduct" d1_ ON d0_."order_id" = d1_."order_id" GROUP BY d0_."order_id", d0_."created_at", d0_."order_status" ORDER BY d0_."order_id" ASC', + $query->getSQL() + ); + $result = $query->getResult(); self::assertEquals(2, sizeof($result)); @@ -96,9 +108,15 @@ public function testTicket() ->getQuery(); - self::assertSQLEquals('SELECT o, COUNT(p.id) AS p_count FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1430Order o LEFT JOIN o.products p GROUP BY o ORDER BY o.id ASC', $query->getDQL()); - self::assertSQLEquals('SELECT d0_.order_id AS order_id_0, d0_.created_at AS created_at_1, d0_.order_status AS order_status_2, COUNT(d1_.id) AS sclr_3 FROM DDC1430Order d0_ LEFT JOIN DDC1430OrderProduct d1_ ON d0_.order_id = d1_.order_id GROUP BY d0_.order_id, d0_.created_at, d0_.order_status ORDER BY d0_.order_id ASC', $query->getSQL()); + self::assertSQLEquals( + 'SELECT o, COUNT(p.id) AS p_count FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1430Order o LEFT JOIN o.products p GROUP BY o ORDER BY o.id ASC', + $query->getDQL() + ); + self::assertSQLEquals( + 'SELECT d0_."order_id" AS order_id_0, d0_."created_at" AS created_at_1, d0_."order_status" AS order_status_2, COUNT(d1_."id") AS sclr_3 FROM "DDC1430Order" d0_ LEFT JOIN "DDC1430OrderProduct" d1_ ON d0_."order_id" = d1_."order_id" GROUP BY d0_."order_id", d0_."created_at", d0_."order_status" ORDER BY d0_."order_id" ASC', + $query->getSQL() + ); $result = $query->getResult(); @@ -131,7 +149,6 @@ public function loadFixtures() $this->_em->flush(); } - } /** @@ -139,7 +156,6 @@ public function loadFixtures() */ class DDC1430Order { - /** * @Id * @Column(name="order_id", type="integer") @@ -164,6 +180,13 @@ class DDC1430Order */ private $products; + public function __construct($status) + { + $this->status = $status; + $this->date = new \DateTime(); + $this->products = new \Doctrine\Common\Collections\ArrayCollection(); + } + /** * @return int */ @@ -172,12 +195,6 @@ public function getId() return $this->id; } - public function __construct($status) - { - $this->status = $status; - $this->date = new \DateTime(); - $this->products = new \Doctrine\Common\Collections\ArrayCollection(); - } /** * @return \DateTime */ @@ -225,8 +242,7 @@ public function addProduct(DDC1430OrderProduct $product) */ class DDC1430OrderProduct { - - /** + /** * @Id * @Column(type="integer") * @GeneratedValue() @@ -254,7 +270,7 @@ public function __construct($value) $this->value = $value; } - /** + /** * @return int */ public function getId() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php index 96f07e4bb4f..e369aa64e0d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php @@ -39,24 +39,25 @@ public function testIssue() // DDC-1596 self::assertSQLEquals( - "SELECT t0.id AS id_1, t0.type FROM base t0 WHERE t0.id = ? AND t0.type IN ('Entity1')", + 'SELECT t0."id" AS id_1, t0."type" FROM "base" t0 WHERE t0."id" = ? AND t0."type" IN (\'Entity1\')', $sqlLogger->queries[count($sqlLogger->queries)]['sql'] ); $entities = $entity1->getEntities()->getValues(); - self::assertEquals( - "SELECT t0.id AS id_1, t0.type FROM base t0 INNER JOIN entity1_entity2 ON t0.id = entity1_entity2.item WHERE entity1_entity2.parent = ? AND t0.type IN ('Entity2')", + self::assertSQLEquals( + 'SELECT t0."id" AS id_1, t0."type" FROM "base" t0 INNER JOIN "entity1_entity2" ON t0."id" = "entity1_entity2"."item" WHERE "entity1_entity2"."parent" = ? AND t0."type" IN (\'Entity2\')', $sqlLogger->queries[count($sqlLogger->queries)]['sql'] ); $this->_em->clear(); $entity1 = $repository->find($e1->id); - $entities = $entity1->getEntities()->count(); + + $entity1->getEntities()->count(); self::assertSQLEquals( - "SELECT COUNT(*) FROM entity1_entity2 t WHERE t.parent = ?", + 'SELECT COUNT(*) FROM "entity1_entity2" t WHERE t."parent" = ?', $sqlLogger->queries[count($sqlLogger->queries)]['sql'] ); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2224Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2224Test.php index e92130141c2..4033f925c3d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2224Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2224Test.php @@ -24,7 +24,8 @@ public function testIssue() $query->setQueryCacheDriver(new ArrayCache()); $query->setParameter('field', 'test', 'DDC2224Type'); - self::assertStringEndsWith('.field = FUNCTION(?)', $query->getSQL()); + + self::assertStringEndsWith('."field" = FUNCTION(?)', $query->getSQL()); return $query; } @@ -35,7 +36,8 @@ public function testIssue() public function testCacheMissWhenTypeChanges(Query $query) { $query->setParameter('field', 'test', 'string'); - self::assertStringEndsWith('.field = ?', $query->getSQL()); + + self::assertStringEndsWith('."field" = ?', $query->getSQL()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php index f12767dc19c..7fade168ac8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php @@ -45,16 +45,16 @@ public function testClassSchemaMappingsValidity($className, $expectedSchemaName, self::assertEquals($expectedSchemaName, $classMetadata->table['schema']); if ($platform->supportsSchemas()) { - $fullTableName = sprintf('%s.%s', $expectedSchemaName, $expectedTableName); + $fullTableName = sprintf('"%s"."%s"', $expectedSchemaName, $expectedTableName); } else { - $fullTableName = sprintf('%s__%s', $expectedSchemaName, $expectedTableName); + $fullTableName = sprintf('"%s__%s"', $expectedSchemaName, $expectedTableName); } self::assertEquals($fullTableName, $quotedTableName); // Checks sequence name validity self::assertEquals( - $fullTableName . '_' . $classMetadata->getSingleIdentifierColumnName() . '_seq', + str_replace('"', '', $fullTableName) . '_' . $classMetadata->getSingleIdentifierColumnName() . '_seq', $classMetadata->getSequenceName($platform) ); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC331Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC331Test.php index 12be0c236a2..c10c2864a2e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC331Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC331Test.php @@ -20,9 +20,10 @@ protected function setUp() { public function testSelectFieldOnRootEntity() { $q = $this->_em->createQuery('SELECT e.name FROM Doctrine\Tests\Models\Company\CompanyEmployee e'); - self::assertEquals( - strtolower('SELECT c0_.name AS name_0 FROM company_employees c1_ INNER JOIN company_persons c0_ ON c1_.id = c0_.id LEFT JOIN company_managers c2_ ON c1_.id = c2_.id'), - strtolower($q->getSQL()) + + self::assertSQLEquals( + 'SELECT c0_."name" AS name_0 FROM "company_employees" c1_ INNER JOIN "company_persons" c0_ ON c1_."id" = c0_."id" LEFT JOIN "company_managers" c2_ ON c1_."id" = c2_."id"', + $q->getSQL() ); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC448Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC448Test.php index acf239b6ec8..ffab784b792 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC448Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC448Test.php @@ -21,9 +21,10 @@ protected function setUp() public function testIssue() { $q = $this->_em->createQuery("select b from ".__NAMESPACE__."\\DDC448SubTable b where b.connectedClassId = ?1"); - self::assertEquals( - strtolower('SELECT d0_.id AS id_0, d0_.discr AS discr_1, d0_.connectedClassId AS connectedClassId_2 FROM SubTable s1_ INNER JOIN DDC448MainTable d0_ ON s1_.id = d0_.id WHERE d0_.connectedClassId = ?'), - strtolower($q->getSQL()) + + self::assertSQLEquals( + 'SELECT d0_."id" AS id_0, d0_."discr" AS discr_1, d0_."connectedClassId" AS connectedClassId_2 FROM "SubTable" s1_ INNER JOIN "DDC448MainTable" d0_ ON s1_."id" = d0_."id" WHERE d0_."connectedClassId" = ?', + $q->getSQL() ); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC493Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC493Test.php index 102ae55a113..92b2d45a5ed 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC493Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC493Test.php @@ -19,9 +19,10 @@ protected function setUp() public function testIssue() { $q = $this->_em->createQuery("select u, c.data from ".__NAMESPACE__."\\DDC493Distributor u JOIN u.contact c"); - self::assertEquals( - strtolower('SELECT d0_.id AS id_0, d1_.data AS data_1, d0_.discr AS discr_2, d0_.contact AS contact_3 FROM DDC493Distributor d2_ INNER JOIN DDC493Customer d0_ ON d2_.id = d0_.id INNER JOIN DDC493Contact d1_ ON d0_.contact = d1_.id'), - strtolower($q->getSQL()) + + self::assertSQLEquals( + 'SELECT d0_."id" AS id_0, d1_."data" AS data_1, d0_."discr" AS discr_2, d0_."contact" AS contact_3 FROM "DDC493Distributor" d2_ INNER JOIN "DDC493Customer" d0_ ON d2_."id" = d0_."id" INNER JOIN "DDC493Contact" d1_ ON d0_."contact" = d1_."id"', + $q->getSQL() ); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC513Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC513Test.php index 18bba4dc2e1..e3c7aadfc5c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC513Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC513Test.php @@ -19,9 +19,10 @@ protected function setUp() public function testIssue() { $q = $this->_em->createQuery("select u from ".__NAMESPACE__."\\DDC513OfferItem u left join u.price p"); - self::assertEquals( - strtolower('SELECT d0_.id AS id_0, d0_.discr AS discr_1, d0_.price AS price_2 FROM DDC513OfferItem d1_ INNER JOIN DDC513Item d0_ ON d1_.id = d0_.id LEFT JOIN DDC513Price d2_ ON d0_.price = d2_.id'), - strtolower($q->getSQL()) + + self::assertSQLEquals( + 'SELECT d0_."id" AS id_0, d0_."discr" AS discr_1, d0_."price" AS price_2 FROM "DDC513OfferItem" d1_ INNER JOIN "DDC513Item" d0_ ON d1_."id" = d0_."id" LEFT JOIN "DDC513Price" d2_ ON d0_."price" = d2_."id"', + $q->getSQL() ); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC698Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC698Test.php index 13ebcd27527..892e7a355db 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC698Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC698Test.php @@ -26,11 +26,9 @@ public function testTicket() ->from(__NAMESPACE__ . '\DDC698Privilege', 'p') ->leftJoin('p.roles', 'r'); - $sql = $qb->getQuery()->getSQL(); - - self::assertEquals( - strtolower('SELECT p0_.privilegeID AS privilegeID_0, p0_.name AS name_1, r1_.roleID AS roleID_2, r1_.name AS name_3, r1_.shortName AS shortName_4 FROM Privileges p0_ LEFT JOIN RolePrivileges r2_ ON p0_.privilegeID = r2_.privilegeID LEFT JOIN Roles r1_ ON r1_.roleID = r2_.roleID'), - strtolower($sql) + self::assertSQLEquals( + 'SELECT p0_."privilegeID" AS privilegeID_0, p0_."name" AS name_1, r1_."roleID" AS roleID_2, r1_."name" AS name_3, r1_."shortName" AS shortName_4 FROM "Privileges" p0_ LEFT JOIN "RolePrivileges" r2_ ON p0_."privilegeID" = r2_."privilegeID" LEFT JOIN "Roles" r1_ ON r1_."roleID" = r2_."roleID"', + $qb->getQuery()->getSQL() ); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php index 02737ba2a72..b04ef7b292e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php @@ -17,13 +17,13 @@ protected function setUp() public function testIsEmptySqlGeneration() { - $q = $this->_em->createQuery('SELECT g, c FROM Doctrine\Tests\ORM\Functional\Ticket\DDC719Group g LEFT JOIN g.children c WHERE g.parents IS EMPTY'); - - $referenceSQL = 'SELECT g0_.name AS name_0, g0_.description AS description_1, g0_.id AS id_2, g1_.name AS name_3, g1_.description AS description_4, g1_.id AS id_5 FROM groups g0_ LEFT JOIN groups_groups g2_ ON g0_.id = g2_.parent_id LEFT JOIN groups g1_ ON g1_.id = g2_.child_id WHERE (SELECT COUNT(*) FROM groups_groups g3_ WHERE g3_.child_id = g0_.id) = 0'; + $q = $this->_em->createQuery( + 'SELECT g, c FROM Doctrine\Tests\ORM\Functional\Ticket\DDC719Group g LEFT JOIN g.children c WHERE g.parents IS EMPTY' + ); - self::assertEquals( - strtolower($referenceSQL), - strtolower($q->getSQL()) + self::assertSQLEquals( + 'SELECT g0_."name" AS name_0, g0_."description" AS description_1, g0_."id" AS id_2, g1_."name" AS name_3, g1_."description" AS description_4, g1_."id" AS id_5 FROM "groups" g0_ LEFT JOIN "groups_groups" g2_ ON g0_."id" = g2_."parent_id" LEFT JOIN "groups" g1_ ON g1_."id" = g2_."child_id" WHERE (SELECT COUNT(*) FROM "groups_groups" g3_ WHERE g3_."child_id" = g0_."id") = 0', + $q->getSQL() ); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php index 7a50d9ab1ac..c77229bc586 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php @@ -5,6 +5,7 @@ use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; +use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; use Doctrine\ORM\Mapping\Builder\EmbeddedBuilder; use Doctrine\ORM\Mapping\Builder\FieldBuilder; use Doctrine\ORM\Mapping\ClassMetadata; @@ -202,7 +203,12 @@ public function testSetInheritanceSingleTable() public function testSetDiscriminatorColumn() { - self::assertIsFluent($this->builder->setDiscriminatorColumn('discr', 'string', '124')); + $discriminatorColumnBuilder = (new DiscriminatorColumnMetadataBuilder()) + ->withColumnName('discr') + ->withLength(124) + ; + + self::assertIsFluent($this->builder->setDiscriminatorColumn($discriminatorColumnBuilder->build())); self::assertNotNull($this->cm->discriminatorColumn); $discrColumn = $this->cm->discriminatorColumn; diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 9d36b7ed304..5a90df827df 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -263,11 +263,9 @@ public function testSetSubClassesInGlobalNamespace() public function testSetInvalidVersionMapping_ThrowsException() { $metadata = new ClassMetadata(CMS\CmsUser::class); - $property = new FieldMetadata(); + $property = new FieldMetadata('foo', 'foo', Type::getType('string')); $property->setDeclaringClass($metadata); - $property->setName('foo'); - $property->setType(Type::getType('string')); $metadata->initializeReflection(new RuntimeReflectionService()); diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php index 39421a5585a..91fcf5ca403 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php @@ -33,19 +33,19 @@ protected function setUp() public function testSelectConditionStatementEq() { $statement = $this->_persister->getSelectConditionStatementSQL('admin1', 1, [], Comparison::EQ); - self::assertEquals('t0.admin1 = ? AND t0.country = ?', $statement); + self::assertEquals('t0."admin1" = ? AND t0."country" = ?', $statement); } public function testSelectConditionStatementEqNull() { $statement = $this->_persister->getSelectConditionStatementSQL('admin1', null, [], Comparison::IS); - self::assertEquals('t0.admin1 IS NULL AND t0.country IS NULL', $statement); + self::assertEquals('t0."admin1" IS NULL AND t0."country" IS NULL', $statement); } public function testSelectConditionStatementNeqNull() { $statement = $this->_persister->getSelectConditionStatementSQL('admin1', null, [], Comparison::NEQ); - self::assertEquals('t0.admin1 IS NOT NULL AND t0.country IS NOT NULL', $statement); + self::assertEquals('t0."admin1" IS NOT NULL AND t0."country" IS NOT NULL', $statement); } /** diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php index 0469cf8ec2e..bbb62a6e264 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php @@ -45,7 +45,10 @@ protected function setUp() $this->_em = $this->_getTestEntityManager(); - $this->_persister = new BasicEntityPersister($this->_em, $this->_em->getClassMetadata(CustomTypeParent::class)); + $this->_persister = new BasicEntityPersister( + $this->_em, + $this->_em->getClassMetadata(CustomTypeParent::class) + ); } public function testGetInsertSQLUsesTypeValuesSQL() @@ -76,7 +79,10 @@ public function testUpdateUsesTypeValuesSQL() $executeUpdates = $this->_em->getConnection()->getExecuteUpdates(); - self::assertEquals('UPDATE customtype_parents SET customInteger = ABS(?), child_id = ? WHERE id = ?', $executeUpdates[0]['query']); + self::assertEquals( + 'UPDATE "customtype_parents" SET "customInteger" = ABS(?), "child_id" = ? WHERE "id" = ?', + $executeUpdates[0]['query'] + ); } public function testGetSelectConditionSQLUsesTypeValuesSQL() @@ -86,7 +92,7 @@ public function testGetSelectConditionSQLUsesTypeValuesSQL() $sql = $method->invoke($this->_persister, ['customInteger' => 1, 'child' => 1]); - self::assertEquals('t0.customInteger = ABS(?) AND t0.child_id = ?', $sql); + self::assertEquals('t0."customInteger" = ABS(?) AND t0."child_id" = ?', $sql); } /** @@ -128,17 +134,17 @@ public function testSelectConditionStatementNeqNull() public function testSelectConditionStatementWithMultipleValuesContainingNull() { self::assertEquals( - '(t0.id IN (?) OR t0.id IS NULL)', + '(t0."id" IN (?) OR t0."id" IS NULL)', $this->_persister->getSelectConditionStatementSQL('id', [null]) ); self::assertEquals( - '(t0.id IN (?) OR t0.id IS NULL)', + '(t0."id" IN (?) OR t0."id" IS NULL)', $this->_persister->getSelectConditionStatementSQL('id', [null, 123]) ); self::assertEquals( - '(t0.id IN (?) OR t0.id IS NULL)', + '(t0."id" IN (?) OR t0."id" IS NULL)', $this->_persister->getSelectConditionStatementSQL('id', [123, null]) ); } @@ -154,6 +160,7 @@ public function testCountCondition() // Using a criteria object $criteria = new Criteria(Criteria::expr()->eq('value', 'bar')); $statement = $persister->getCountSQL($criteria); + self::assertEquals('SELECT COUNT(*) FROM "not-a-simple-entity" t0 WHERE t0."simple-entity-value" = ?', $statement); } diff --git a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php index e9bcd684ace..7eb87c5ac06 100644 --- a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php +++ b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php @@ -44,7 +44,7 @@ public function testAddsJoin() { self::assertSqlGeneration( 'select u from Doctrine\Tests\Models\CMS\CmsUser u', - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c1_.id AS id_4, c1_.country AS country_5, c1_.zip AS zip_6, c1_.city AS city_7, c0_.email_id AS email_id_8, c1_.user_id AS user_id_9 FROM cms_users c0_ LEFT JOIN cms_addresses c1_ ON c0_.id = c1_.user_id" + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c1_."id" AS id_4, c1_."country" AS country_5, c1_."zip" AS zip_6, c1_."city" AS city_7, c0_."email_id" AS email_id_8, c1_."user_id" AS user_id_9 FROM "cms_users" c0_ LEFT JOIN "cms_addresses" c1_ ON c0_."id" = c1_."user_id"' ); } @@ -52,7 +52,7 @@ public function testDoesNotAddJoin() { self::assertSqlGeneration( 'select a from Doctrine\Tests\Models\CMS\CmsAddress a', - "SELECT c0_.id AS id_0, c0_.country AS country_1, c0_.zip AS zip_2, c0_.city AS city_3, c0_.user_id AS user_id_4 FROM cms_addresses c0_" + 'SELECT c0_."id" AS id_0, c0_."country" AS country_1, c0_."zip" AS zip_2, c0_."city" AS city_3, c0_."user_id" AS user_id_4 FROM "cms_addresses" c0_' ); } } diff --git a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php index b7e7288ccd7..044760f8e9e 100644 --- a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php +++ b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php @@ -51,27 +51,27 @@ public function assertSqlGeneration($dqlToBeTested, $sqlToBeConfirmed, $treeWalk public function testSupportsQueriesWithoutWhere() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'select u from Doctrine\Tests\Models\CMS\CmsUser u', - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c0_.email_id AS email_id_4 FROM cms_users c0_ WHERE c0_.id = 1", + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c0_."email_id" AS email_id_4 FROM "cms_users" c0_ WHERE c0_."id" = 1', [CustomTreeWalker::class] ); } public function testSupportsQueriesWithMultipleConditionalExpressions() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'select u from Doctrine\Tests\Models\CMS\CmsUser u where u.name = :name or u.name = :otherName', - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c0_.email_id AS email_id_4 FROM cms_users c0_ WHERE (c0_.name = ? OR c0_.name = ?) AND c0_.id = 1", + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c0_."email_id" AS email_id_4 FROM "cms_users" c0_ WHERE (c0_."name" = ? OR c0_."name" = ?) AND c0_."id" = 1', [CustomTreeWalker::class] ); } public function testSupportsQueriesWithSimpleConditionalExpression() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'select u from Doctrine\Tests\Models\CMS\CmsUser u where u.name = :name', - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c0_.email_id AS email_id_4 FROM cms_users c0_ WHERE c0_.name = ? AND c0_.id = 1", + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c0_."email_id" AS email_id_4 FROM "cms_users" c0_ WHERE c0_."name" = ? AND c0_."id" = 1', [CustomTreeWalker::class] ); } @@ -90,9 +90,9 @@ public function testSetUnknownQueryComponentThrowsException() public function testSupportsSeveralHintsQueries() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'select u from Doctrine\Tests\Models\CMS\CmsUser u', - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c1_.id AS id_4, c1_.country AS country_5, c1_.zip AS zip_6, c1_.city AS city_7, c0_.email_id AS email_id_8, c1_.user_id AS user_id_9 FROM cms_users c0_ LEFT JOIN cms_addresses c1_ ON c0_.id = c1_.user_id WHERE c0_.id = 1", + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c1_."id" AS id_4, c1_."country" AS country_5, c1_."zip" AS zip_6, c1_."city" AS city_7, c0_."email_id" AS email_id_8, c1_."user_id" AS user_id_9 FROM "cms_users" c0_ LEFT JOIN "cms_addresses" c1_ ON c0_."id" = c1_."user_id" WHERE c0_."id" = 1', [CustomTreeWalkerJoin::class, CustomTreeWalker::class] ); } diff --git a/tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php index c0e76a21108..eb4730e39ca 100644 --- a/tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php @@ -42,86 +42,81 @@ public function assertSqlGeneration($dqlToBeTested, $sqlToBeConfirmed) public function testSupportsDeleteWithoutWhereAndFrom() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u', - 'DELETE FROM cms_users' + 'DELETE FROM "cms_users"' ); } public function testSupportsDeleteWithoutWhere() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'DELETE FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'DELETE FROM cms_users' + 'DELETE FROM "cms_users"' ); } public function testSupportsWhereClause() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1', - 'DELETE FROM cms_users WHERE id = ?' + 'DELETE FROM "cms_users" WHERE "id" = ?' ); } public function testSupportsWhereOrExpressions() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = ?1 OR u.name = ?2', - 'DELETE FROM cms_users WHERE username = ? OR name = ?' + 'DELETE FROM "cms_users" WHERE "username" = ? OR "name" = ?' ); } public function testSupportsWhereNestedConditionalExpressions() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1 OR ( u.username = ?2 OR u.name = ?3)', - 'DELETE FROM cms_users WHERE id = ? OR (username = ? OR name = ?)' + 'DELETE FROM "cms_users" WHERE "id" = ? OR ("username" = ? OR "name" = ?)' ); - - //self::assertSqlGeneration( - // 'DELETE FROM Doctrine\Tests\Models\CMS\CmsUser WHERE id = ?1', - // 'DELETE FROM cms_users WHERE id = ?' - //); } public function testIsCaseAgnostic() { - self::assertSqlGeneration( - "delete from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1", - "DELETE FROM cms_users WHERE username = ?" + $this->assertSqlGeneration( + 'delete from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1', + 'DELETE FROM "cms_users" WHERE "username" = ?' ); } public function testSupportsAndCondition() { - self::assertSqlGeneration( - "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = ?1 AND u.name = ?2", - "DELETE FROM cms_users WHERE username = ? AND name = ?" + $this->assertSqlGeneration( + 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = ?1 AND u.name = ?2', + 'DELETE FROM "cms_users" WHERE "username" = ? AND "name" = ?' ); } public function testSupportsWhereNot() { - self::assertSqlGeneration( - "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE NOT u.id != ?1", - "DELETE FROM cms_users WHERE NOT id <> ?" + $this->assertSqlGeneration( + 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE NOT u.id != ?1', + 'DELETE FROM "cms_users" WHERE NOT "id" <> ?' ); } public function testSupportsWhereNotWithParentheses() { - self::assertSqlGeneration( - "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE NOT ( u.id != ?1 )", - "DELETE FROM cms_users WHERE NOT (id <> ?)" + $this->assertSqlGeneration( + 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE NOT ( u.id != ?1 )', + 'DELETE FROM "cms_users" WHERE NOT ("id" <> ?)' ); } public function testSupportsWhereNotWithAndExpression() { - self::assertSqlGeneration( - "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE NOT ( u.id != ?1 AND u.username = ?2 )", - "DELETE FROM cms_users WHERE NOT (id <> ? AND username = ?)" + $this->assertSqlGeneration( + 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE NOT ( u.id != ?1 AND u.username = ?2 )', + 'DELETE FROM "cms_users" WHERE NOT ("id" <> ? AND "username" = ?)' ); } @@ -129,132 +124,132 @@ public function testSupportsWhereNotWithAndExpression() public function testSupportsGreaterThanComparisonClause() { - // id = ? was already tested (see testDeleteWithWhere()) - self::assertSqlGeneration( - "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id > ?1", - "DELETE FROM cms_users WHERE id > ?" + // "id" = ? was already tested (see testDeleteWithWhere()) + $this->assertSqlGeneration( + 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id > ?1', + 'DELETE FROM "cms_users" WHERE "id" > ?' ); } public function testSupportsGreaterThanOrEqualToComparisonClause() { - self::assertSqlGeneration( - "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id >= ?1", - "DELETE FROM cms_users WHERE id >= ?" + $this->assertSqlGeneration( + 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id >= ?1', + 'DELETE FROM "cms_users" WHERE "id" >= ?' ); } public function testSupportsLessThanComparisonClause() { - self::assertSqlGeneration( - "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id < ?1", - "DELETE FROM cms_users WHERE id < ?" + $this->assertSqlGeneration( + 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id < ?1', + 'DELETE FROM "cms_users" WHERE "id" < ?' ); } public function testSupportsLessThanOrEqualToComparisonClause() { - self::assertSqlGeneration( - "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id <= ?1", - "DELETE FROM cms_users WHERE id <= ?" + $this->assertSqlGeneration( + 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id <= ?1', + 'DELETE FROM "cms_users" WHERE "id" <= ?' ); } public function testSupportsNotEqualToComparisonClause() { - self::assertSqlGeneration( - "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id <> ?1", - "DELETE FROM cms_users WHERE id <> ?" + $this->assertSqlGeneration( + 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id <> ?1', + 'DELETE FROM "cms_users" WHERE "id" <> ?' ); } public function testSupportsNotEqualToComparisonClauseExpressedWithExclamationMark() { - self::assertSqlGeneration( - "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id != ?1", - "DELETE FROM cms_users WHERE id <> ?" + $this->assertSqlGeneration( + 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id != ?1', + 'DELETE FROM "cms_users" WHERE "id" <> ?' ); } public function testSupportsNotBetweenClause() { - self::assertSqlGeneration( - "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id NOT BETWEEN ?1 AND ?2", - "DELETE FROM cms_users WHERE id NOT BETWEEN ? AND ?" + $this->assertSqlGeneration( + 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id NOT BETWEEN ?1 AND ?2', + 'DELETE FROM "cms_users" WHERE "id" NOT BETWEEN ? AND ?' ); } public function testSupportsBetweenClauseUsedWithAndClause() { - self::assertSqlGeneration( - "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id BETWEEN ?1 AND ?2 AND u.username != ?3", - "DELETE FROM cms_users WHERE id BETWEEN ? AND ? AND username <> ?" + $this->assertSqlGeneration( + 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id BETWEEN ?1 AND ?2 AND u.username != ?3', + 'DELETE FROM "cms_users" WHERE "id" BETWEEN ? AND ? AND "username" <> ?' ); } public function testSupportsNotLikeClause() { // "WHERE" Expression LikeExpression - self::assertSqlGeneration( + $this->assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username NOT LIKE ?1', - 'DELETE FROM cms_users WHERE username NOT LIKE ?' + 'DELETE FROM "cms_users" WHERE "username" NOT LIKE ?' ); } public function testSupportsLikeClauseWithEscapeExpression() { - self::assertSqlGeneration( - "DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username LIKE ?1 ESCAPE '\\'", - "DELETE FROM cms_users WHERE username LIKE ? ESCAPE '\\'" + $this->assertSqlGeneration( + 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username LIKE ?1 ESCAPE \'\\\'', + 'DELETE FROM "cms_users" WHERE "username" LIKE ? ESCAPE \'\\\'' ); } public function testSupportsIsNullClause() { // "WHERE" Expression NullComparisonExpression - self::assertSqlGeneration( + $this->assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name IS NULL', - 'DELETE FROM cms_users WHERE name IS NULL' + 'DELETE FROM "cms_users" WHERE "name" IS NULL' ); } public function testSupportsIsNotNullClause() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name IS NOT NULL', - 'DELETE FROM cms_users WHERE name IS NOT NULL' + 'DELETE FROM "cms_users" WHERE "name" IS NOT NULL' ); } public function testSupportsAtomExpressionAsClause() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE 1 = 1', - 'DELETE FROM cms_users WHERE 1 = 1' + 'DELETE FROM "cms_users" WHERE 1 = 1' ); } public function testSupportsParameterizedAtomExpression() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE ?1 = 1', - 'DELETE FROM cms_users WHERE ? = 1' + 'DELETE FROM "cms_users" WHERE ? = 1' ); } public function testSupportsInClause() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id IN ( ?1, ?2, ?3, ?4 )', - 'DELETE FROM cms_users WHERE id IN (?, ?, ?, ?)' + 'DELETE FROM "cms_users" WHERE "id" IN (?, ?, ?, ?)' ); } public function testSupportsNotInClause() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id NOT IN ( ?1, ?2 )', - 'DELETE FROM cms_users WHERE id NOT IN (?, ?)' + 'DELETE FROM "cms_users" WHERE "id" NOT IN (?, ?)' ); } @@ -263,9 +258,9 @@ public function testSupportsNotInClause() */ public function testSubselectTableAliasReferencing() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE SIZE(u.groups) = 10', - 'DELETE FROM cms_users WHERE (SELECT COUNT(*) FROM cms_users_groups c0_ WHERE c0_.user_id = cms_users.id) = 10' + 'DELETE FROM "cms_users" WHERE (SELECT COUNT(*) FROM "cms_users_groups" c0_ WHERE c0_."user_id" = "cms_users"."id") = 10' ); } } diff --git a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php index f29a43855bc..066e6fcb7eb 100644 --- a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php @@ -48,8 +48,10 @@ public function assertSqlGeneration($dqlToBeTested, $sqlToBeConfirmed, array $qu $query->setParameter($name, $value); } - $query->setHint(ORMQuery::HINT_FORCE_PARTIAL_LOAD, true) - ->useQueryCache(false); + $query + ->setHint(ORMQuery::HINT_FORCE_PARTIAL_LOAD, true) + ->useQueryCache(false) + ; foreach ($queryHints AS $name => $value) { $query->setHint($name, $value); @@ -83,8 +85,10 @@ public function assertInvalidSqlGeneration($dqlToBeTested, $expectedException, a $query->setParameter($name, $value); } - $query->setHint(ORMQuery::HINT_FORCE_PARTIAL_LOAD, true) - ->useQueryCache(false); + $query + ->setHint(ORMQuery::HINT_FORCE_PARTIAL_LOAD, true) + ->useQueryCache(false) + ; foreach ($queryHints AS $name => $value) { $query->setHint($name, $value); @@ -102,9 +106,9 @@ public function assertInvalidSqlGeneration($dqlToBeTested, $expectedException, a */ public function testJoinWithRangeVariablePutsConditionIntoSqlWhereClause() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT c.id FROM Doctrine\Tests\Models\Company\CompanyPerson c JOIN Doctrine\Tests\Models\Company\CompanyPerson r WHERE c.spouse = r AND r.id = 42', - 'SELECT c0_.id AS id_0 FROM company_persons c0_ INNER JOIN company_persons c1_ WHERE c0_.spouse_id = c1_.id AND c1_.id = 42', + 'SELECT c0_."id" AS id_0 FROM "company_persons" c0_ INNER JOIN "company_persons" c1_ WHERE c0_."spouse_id" = c1_."id" AND c1_."id" = 42', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] ); } @@ -119,119 +123,119 @@ public function testJoinWithRangeVariableAndInheritancePutsConditionIntoSqlWhere * The important thing is that the ON clauses in LEFT JOINs only contain the conditions necessary to join the appropriate inheritance table * whereas the filtering condition must remain in the SQL WHERE clause. */ - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT c.id FROM Doctrine\Tests\Models\Company\CompanyPerson c JOIN Doctrine\Tests\Models\Company\CompanyPerson r WHERE c.spouse = r AND r.id = 42', - 'SELECT c0_.id AS id_0 FROM company_persons c0_ LEFT JOIN company_managers c1_ ON c0_.id = c1_.id LEFT JOIN company_employees c2_ ON c0_.id = c2_.id INNER JOIN company_persons c3_ LEFT JOIN company_managers c4_ ON c3_.id = c4_.id LEFT JOIN company_employees c5_ ON c3_.id = c5_.id WHERE c0_.spouse_id = c3_.id AND c3_.id = 42', + 'SELECT c0_."id" AS id_0 FROM "company_persons" c0_ LEFT JOIN "company_managers" c1_ ON c0_."id" = c1_."id" LEFT JOIN "company_employees" c2_ ON c0_."id" = c2_."id" INNER JOIN "company_persons" c3_ LEFT JOIN "company_managers" c4_ ON c3_."id" = c4_."id" LEFT JOIN "company_employees" c5_ ON c3_."id" = c5_."id" WHERE c0_."spouse_id" = c3_."id" AND c3_."id" = 42', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] ); } public function testSupportsSelectForAllFields() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_' ); } public function testSupportsSelectForOneField() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT c0_.id AS id_0 FROM cms_users c0_' + 'SELECT c0_."id" AS id_0 FROM "cms_users" c0_' ); } public function testSupportsSelectForOneNestedField() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsArticle a JOIN a.user u', - 'SELECT c0_.id AS id_0 FROM cms_articles c1_ INNER JOIN cms_users c0_ ON c1_.user_id = c0_.id' + 'SELECT c0_."id" AS id_0 FROM "cms_articles" c1_ INNER JOIN "cms_users" c0_ ON c1_."user_id" = c0_."id"' ); } public function testSupportsSelectForAllNestedField() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT a FROM Doctrine\Tests\Models\CMS\CmsArticle a JOIN a.user u ORDER BY u.name ASC', - 'SELECT c0_.id AS id_0, c0_.topic AS topic_1, c0_.text AS text_2, c0_.version AS version_3 FROM cms_articles c0_ INNER JOIN cms_users c1_ ON c0_.user_id = c1_.id ORDER BY c1_.name ASC' + 'SELECT c0_."id" AS id_0, c0_."topic" AS topic_1, c0_."text" AS text_2, c0_."version" AS version_3 FROM "cms_articles" c0_ INNER JOIN "cms_users" c1_ ON c0_."user_id" = c1_."id" ORDER BY c1_."name" ASC' ); } public function testNotExistsExpression() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE NOT EXISTS (SELECT p.phonenumber FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.phonenumber = 1234)', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE NOT EXISTS (SELECT c1_.phonenumber FROM cms_phonenumbers c1_ WHERE c1_.phonenumber = 1234)' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE NOT EXISTS (SELECT c1_."phonenumber" FROM "cms_phonenumbers" c1_ WHERE c1_."phonenumber" = 1234)' ); } public function testSupportsSelectForMultipleColumnsOfASingleComponent() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u.username, u.name FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT c0_.username AS username_0, c0_.name AS name_1 FROM cms_users c0_' + 'SELECT c0_."username" AS username_0, c0_."name" AS name_1 FROM "cms_users" c0_' ); } public function testSupportsSelectUsingMultipleFromComponents() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u, Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE u = p.user', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c1_.phonenumber AS phonenumber_4 FROM cms_users c0_, cms_phonenumbers c1_ WHERE c0_.id = c1_.user_id' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c1_."phonenumber" AS phonenumber_4 FROM "cms_users" c0_, "cms_phonenumbers" c1_ WHERE c0_."id" = c1_."user_id"' ); } public function testSupportsJoinOnMultipleComponents() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN Doctrine\Tests\Models\CMS\CmsPhonenumber p WITH u = p.user', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c1_.phonenumber AS phonenumber_4 FROM cms_users c0_ INNER JOIN cms_phonenumbers c1_ ON (c0_.id = c1_.user_id)' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c1_."phonenumber" AS phonenumber_4 FROM "cms_users" c0_ INNER JOIN "cms_phonenumbers" c1_ ON (c0_."id" = c1_."user_id")' ); } public function testSupportsJoinOnMultipleComponentsWithJoinedInheritanceType() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\Company\CompanyEmployee e JOIN Doctrine\Tests\Models\Company\CompanyManager m WITH e.id = m.id', - 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, c0_.discr AS discr_5 FROM company_employees c1_ INNER JOIN company_persons c0_ ON c1_.id = c0_.id INNER JOIN company_managers c2_ INNER JOIN company_employees c4_ ON c2_.id = c4_.id INNER JOIN company_persons c3_ ON c2_.id = c3_.id AND (c0_.id = c3_.id)' + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, c0_."discr" AS discr_5 FROM "company_employees" c1_ INNER JOIN "company_persons" c0_ ON c1_."id" = c0_."id" INNER JOIN "company_managers" c2_ INNER JOIN "company_employees" c4_ ON c2_."id" = c4_."id" INNER JOIN "company_persons" c3_ ON c2_."id" = c3_."id" AND (c0_."id" = c3_."id")' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\Company\CompanyEmployee e LEFT JOIN Doctrine\Tests\Models\Company\CompanyManager m WITH e.id = m.id', - 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, c0_.discr AS discr_5 FROM company_employees c1_ INNER JOIN company_persons c0_ ON c1_.id = c0_.id LEFT JOIN company_managers c2_ INNER JOIN company_employees c4_ ON c2_.id = c4_.id INNER JOIN company_persons c3_ ON c2_.id = c3_.id ON (c0_.id = c3_.id)' + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, c0_."discr" AS discr_5 FROM "company_employees" c1_ INNER JOIN "company_persons" c0_ ON c1_."id" = c0_."id" LEFT JOIN "company_managers" c2_ INNER JOIN "company_employees" c4_ ON c2_."id" = c4_."id" INNER JOIN "company_persons" c3_ ON c2_."id" = c3_."id" ON (c0_."id" = c3_."id")' ); } public function testSupportsSelectWithCollectionAssociationJoin() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.phonenumbers p', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c1_.phonenumber AS phonenumber_4 FROM cms_users c0_ INNER JOIN cms_phonenumbers c1_ ON c0_.id = c1_.user_id' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c1_."phonenumber" AS phonenumber_4 FROM "cms_users" c0_ INNER JOIN "cms_phonenumbers" c1_ ON c0_."id" = c1_."user_id"' ); } public function testSupportsSelectWithSingleValuedAssociationJoin() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u, a FROM Doctrine\Tests\Models\Forum\ForumUser u JOIN u.avatar a', - 'SELECT f0_.id AS id_0, f0_.username AS username_1, f1_.id AS id_2 FROM forum_users f0_ INNER JOIN forum_avatars f1_ ON f0_.avatar_id = f1_.id' + 'SELECT f0_."id" AS id_0, f0_."username" AS username_1, f1_."id" AS id_2 FROM "forum_users" f0_ INNER JOIN "forum_avatars" f1_ ON f0_."avatar_id" = f1_."id"' ); } public function testSelectCorrelatedSubqueryComplexMathematicalExpression() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT (SELECT (count(p.phonenumber)+5)*10 FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p JOIN p.user ui WHERE ui.id = u.id) AS c FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT (SELECT (count(c0_.phonenumber) + 5) * 10 AS sclr_1 FROM cms_phonenumbers c0_ INNER JOIN cms_users c1_ ON c0_.user_id = c1_.id WHERE c1_.id = c2_.id) AS sclr_0 FROM cms_users c2_' + 'SELECT (SELECT (count(c0_."phonenumber") + 5) * 10 AS sclr_1 FROM "cms_phonenumbers" c0_ INNER JOIN "cms_users" c1_ ON c0_."user_id" = c1_."id" WHERE c1_."id" = c2_."id") AS sclr_0 FROM "cms_users" c2_' ); } public function testSelectComplexMathematicalExpression() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT (count(p.phonenumber)+5)*10 FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p JOIN p.user ui WHERE ui.id = ?1', - 'SELECT (count(c0_.phonenumber) + 5) * 10 AS sclr_0 FROM cms_phonenumbers c0_ INNER JOIN cms_users c1_ ON c0_.user_id = c1_.id WHERE c1_.id = ?' + 'SELECT (count(c0_."phonenumber") + 5) * 10 AS sclr_0 FROM "cms_phonenumbers" c0_ INNER JOIN "cms_users" c1_ ON c0_."user_id" = c1_."id" WHERE c1_."id" = ?' ); } @@ -240,9 +244,9 @@ public function testSelectComplexMathematicalExpression() public function testSingleAssociationPathExpressionInSubselect() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT (SELECT p.user FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.user = u) user_id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1', - 'SELECT (SELECT c0_.user_id FROM cms_phonenumbers c0_ WHERE c0_.user_id = c1_.id) AS sclr_0 FROM cms_users c1_ WHERE c1_.id = ?' + 'SELECT (SELECT c0_."user_id" FROM "cms_phonenumbers" c0_ WHERE c0_."user_id" = c1_."id") AS sclr_0 FROM "cms_users" c1_ WHERE c1_."id" = ?' ); }*/ @@ -251,174 +255,177 @@ public function testSingleAssociationPathExpressionInSubselect() */ public function testConstantValueInSelect() { - self::assertSqlGeneration( - "SELECT u.name, 'foo' AS bar FROM Doctrine\Tests\Models\CMS\CmsUser u", - "SELECT c0_.name AS name_0, 'foo' AS sclr_1 FROM cms_users c0_" + $this->assertSqlGeneration( + 'SELECT u.name, \'foo\' AS bar FROM Doctrine\Tests\Models\CMS\CmsUser u', + 'SELECT c0_."name" AS name_0, \'foo\' AS sclr_1 FROM "cms_users" c0_' ); } public function testSupportsOrderByWithAscAsDefault() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Forum\ForumUser u ORDER BY u.id', - 'SELECT f0_.id AS id_0, f0_.username AS username_1 FROM forum_users f0_ ORDER BY f0_.id ASC' + 'SELECT f0_."id" AS id_0, f0_."username" AS username_1 FROM "forum_users" f0_ ORDER BY f0_."id" ASC' ); } public function testSupportsOrderByAsc() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Forum\ForumUser u ORDER BY u.id asc', - 'SELECT f0_.id AS id_0, f0_.username AS username_1 FROM forum_users f0_ ORDER BY f0_.id ASC' + 'SELECT f0_."id" AS id_0, f0_."username" AS username_1 FROM "forum_users" f0_ ORDER BY f0_."id" ASC' ); } public function testSupportsOrderByDesc() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Forum\ForumUser u ORDER BY u.id desc', - 'SELECT f0_.id AS id_0, f0_.username AS username_1 FROM forum_users f0_ ORDER BY f0_.id DESC' + 'SELECT f0_."id" AS id_0, f0_."username" AS username_1 FROM "forum_users" f0_ ORDER BY f0_."id" DESC' ); } public function testSupportsSelectDistinct() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT DISTINCT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT DISTINCT c0_.name AS name_0 FROM cms_users c0_' + 'SELECT DISTINCT c0_."name" AS name_0 FROM "cms_users" c0_' ); } public function testSupportsAggregateFunctionInSelectedFields() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT COUNT(u.id) FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY u.id', - 'SELECT COUNT(c0_.id) AS sclr_0 FROM cms_users c0_ GROUP BY c0_.id' + 'SELECT COUNT(c0_."id") AS sclr_0 FROM "cms_users" c0_ GROUP BY c0_."id"' ); } public function testSupportsAggregateFunctionWithSimpleArithmetic() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT MAX(u.id + 4) * 2 FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT MAX(c0_.id + 4) * 2 AS sclr_0 FROM cms_users c0_' + 'SELECT MAX(c0_."id" + 4) * 2 AS sclr_0 FROM "cms_users" c0_' ); } /** * @group DDC-3276 */ - public function testSupportsAggregateCountFunctionWithSimpleArithmetic() + public function testSupportsAggregateCountFunctionWithSimpleArithmeticMySql() { - $connMock = $this->_em->getConnection(); - $orgPlatform = $connMock->getDatabasePlatform(); - - $connMock->setDatabasePlatform(new MySqlPlatform()); + $this->_em->getConnection()->setDatabasePlatform(new MySqlPlatform()); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT COUNT(CONCAT(u.id, u.name)) FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY u.id', - 'SELECT COUNT(CONCAT(c0_.id, c0_.name)) AS sclr_0 FROM cms_users c0_ GROUP BY c0_.id' + 'SELECT COUNT(CONCAT(c0_.`id`, c0_.`name`)) AS sclr_0 FROM `cms_users` c0_ GROUP BY c0_.`id`' ); - - $connMock->setDatabasePlatform($orgPlatform); } public function testSupportsWhereClauseWithPositionalParameter() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'select u from Doctrine\Tests\Models\Forum\ForumUser u where u.id = ?1', - 'SELECT f0_.id AS id_0, f0_.username AS username_1 FROM forum_users f0_ WHERE f0_.id = ?' + 'SELECT f0_."id" AS id_0, f0_."username" AS username_1 FROM "forum_users" f0_ WHERE f0_."id" = ?' ); } public function testSupportsWhereClauseWithNamedParameter() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'select u from Doctrine\Tests\Models\Forum\ForumUser u where u.username = :name', - 'SELECT f0_.id AS id_0, f0_.username AS username_1 FROM forum_users f0_ WHERE f0_.username = ?' + 'SELECT f0_."id" AS id_0, f0_."username" AS username_1 FROM "forum_users" f0_ WHERE f0_."username" = ?' ); } public function testSupportsWhereAndClauseWithNamedParameters() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'select u from Doctrine\Tests\Models\Forum\ForumUser u where u.username = :name and u.username = :name2', - 'SELECT f0_.id AS id_0, f0_.username AS username_1 FROM forum_users f0_ WHERE f0_.username = ? AND f0_.username = ?' + 'SELECT f0_."id" AS id_0, f0_."username" AS username_1 FROM "forum_users" f0_ WHERE f0_."username" = ? AND f0_."username" = ?' ); } public function testSupportsCombinedWhereClauseWithNamedParameter() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'select u from Doctrine\Tests\Models\Forum\ForumUser u where (u.username = :name OR u.username = :name2) AND u.id = :id', - 'SELECT f0_.id AS id_0, f0_.username AS username_1 FROM forum_users f0_ WHERE (f0_.username = ? OR f0_.username = ?) AND f0_.id = ?' + 'SELECT f0_."id" AS id_0, f0_."username" AS username_1 FROM "forum_users" f0_ WHERE (f0_."username" = ? OR f0_."username" = ?) AND f0_."id" = ?' ); } public function testSupportsAggregateFunctionInASelectDistinct() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT COUNT(DISTINCT u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT COUNT(DISTINCT c0_.name) AS sclr_0 FROM cms_users c0_' + 'SELECT COUNT(DISTINCT c0_."name") AS sclr_0 FROM "cms_users" c0_' ); } // Ticket #668 public function testSupportsASqlKeywordInAStringLiteralParam() { - self::assertSqlGeneration( - "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name LIKE '%foo OR bar%'", - "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE c0_.name LIKE '%foo OR bar%'" + $this->assertSqlGeneration( + 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name LIKE \'%foo OR bar%\'', + 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE c0_."name" LIKE \'%foo OR bar%\'' ); } public function testSupportsArithmeticExpressionsInWherePart() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE ((u.id + 5000) * u.id + 3) < 10000000', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE ((c0_.id + 5000) * c0_.id + 3) < 10000000' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE ((c0_."id" + 5000) * c0_."id" + 3) < 10000000' ); } public function testSupportsMultipleEntitiesInFromClause() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u, Doctrine\Tests\Models\CMS\CmsArticle a JOIN a.user u2 WHERE u.id = u2.id', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c1_.id AS id_4, c1_.topic AS topic_5, c1_.text AS text_6, c1_.version AS version_7 FROM cms_users c0_, cms_articles c1_ INNER JOIN cms_users c2_ ON c1_.user_id = c2_.id WHERE c0_.id = c2_.id' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c1_."id" AS id_4, c1_."topic" AS topic_5, c1_."text" AS text_6, c1_."version" AS version_7 FROM "cms_users" c0_, "cms_articles" c1_ INNER JOIN "cms_users" c2_ ON c1_."user_id" = c2_."id" WHERE c0_."id" = c2_."id"' ); } public function testSupportsMultipleEntitiesInFromClauseUsingPathExpression() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u, Doctrine\Tests\Models\CMS\CmsArticle a WHERE u.id = a.user', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c1_.id AS id_4, c1_.topic AS topic_5, c1_.text AS text_6, c1_.version AS version_7 FROM cms_users c0_, cms_articles c1_ WHERE c0_.id = c1_.user_id' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c1_."id" AS id_4, c1_."topic" AS topic_5, c1_."text" AS text_6, c1_."version" AS version_7 FROM "cms_users" c0_, "cms_articles" c1_ WHERE c0_."id" = c1_."user_id"' ); } public function testSupportsPlainJoinWithoutClause() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u.id, a.id from Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a', - 'SELECT c0_.id AS id_0, c1_.id AS id_1 FROM cms_users c0_ LEFT JOIN cms_articles c1_ ON c0_.id = c1_.user_id' + 'SELECT c0_."id" AS id_0, c1_."id" AS id_1 FROM "cms_users" c0_ LEFT JOIN "cms_articles" c1_ ON c0_."id" = c1_."user_id"' ); - self::assertSqlGeneration( + + $this->assertSqlGeneration( 'SELECT u.id, a.id from Doctrine\Tests\Models\CMS\CmsUser u JOIN u.articles a', - 'SELECT c0_.id AS id_0, c1_.id AS id_1 FROM cms_users c0_ INNER JOIN cms_articles c1_ ON c0_.id = c1_.user_id' + 'SELECT c0_."id" AS id_0, c1_."id" AS id_1 FROM "cms_users" c0_ INNER JOIN "cms_articles" c1_ ON c0_."id" = c1_."user_id"' ); } /** * @group DDC-135 */ - public function testSupportsJoinAndWithClauseRestriction() + public function testSupportsLeftJoinAndWithClauseRestriction() { - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a WITH a.topic LIKE '%foo%'", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ LEFT JOIN cms_articles c1_ ON c0_.id = c1_.user_id AND (c1_.topic LIKE '%foo%')" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a WITH a.topic LIKE \'%foo%\'', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ LEFT JOIN "cms_articles" c1_ ON c0_."id" = c1_."user_id" AND (c1_."topic" LIKE \'%foo%\')' ); - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.articles a WITH a.topic LIKE '%foo%'", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ INNER JOIN cms_articles c1_ ON c0_.id = c1_.user_id AND (c1_.topic LIKE '%foo%')" + } + + /** + * @group DDC-135 + */ + public function testSupportsInnerJoinAndWithClauseRestriction() + { + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.articles a WITH a.topic LIKE \'%foo%\'', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ INNER JOIN "cms_articles" c1_ ON c0_."id" = c1_."user_id" AND (c1_."topic" LIKE \'%foo%\')' ); } @@ -430,24 +437,26 @@ public function testJoinOnClause_NotYetSupported_ThrowsException() { $this->expectException(QueryException::class); - $sql = $this->_em->createQuery( - "SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a ON a.topic LIKE '%foo%'" - )->getSql(); + $query = $this->_em->createQuery( + 'SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a ON a.topic LIKE \'%foo%\'' + ); + + $query->getSql(); } public function testSupportsMultipleJoins() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u.id, a.id, p.phonenumber, c.id from Doctrine\Tests\Models\CMS\CmsUser u JOIN u.articles a JOIN u.phonenumbers p JOIN a.comments c', - 'SELECT c0_.id AS id_0, c1_.id AS id_1, c2_.phonenumber AS phonenumber_2, c3_.id AS id_3 FROM cms_users c0_ INNER JOIN cms_articles c1_ ON c0_.id = c1_.user_id INNER JOIN cms_phonenumbers c2_ ON c0_.id = c2_.user_id INNER JOIN cms_comments c3_ ON c1_.id = c3_.article_id' + 'SELECT c0_."id" AS id_0, c1_."id" AS id_1, c2_."phonenumber" AS phonenumber_2, c3_."id" AS id_3 FROM "cms_users" c0_ INNER JOIN "cms_articles" c1_ ON c0_."id" = c1_."user_id" INNER JOIN "cms_phonenumbers" c2_ ON c0_."id" = c2_."user_id" INNER JOIN "cms_comments" c3_ ON c1_."id" = c3_."article_id"' ); } public function testSupportsTrimFunction() { - self::assertSqlGeneration( - "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE TRIM(TRAILING ' ' FROM u.name) = 'someone'", - "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE TRIM(TRAILING ' ' FROM c0_.name) = 'someone'" + $this->assertSqlGeneration( + 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE TRIM(TRAILING \' \' FROM u.name) = \'someone\'', + 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE TRIM(TRAILING \' \' FROM c0_."name") = \'someone\'' ); } @@ -456,18 +465,18 @@ public function testSupportsTrimFunction() */ public function testSupportsTrimLeadingZeroString() { - self::assertSqlGeneration( - "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE TRIM(TRAILING '0' FROM u.name) != ''", - "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE TRIM(TRAILING '0' FROM c0_.name) <> ''" + $this->assertSqlGeneration( + 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE TRIM(TRAILING \'0\' FROM u.name) != \'\'', + 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE TRIM(TRAILING \'0\' FROM c0_."name") <> \'\'' ); } // Ticket 894 public function testSupportsBetweenClauseWithPositionalParameters() { - self::assertSqlGeneration( - "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id BETWEEN ?1 AND ?2", - "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE c0_.id BETWEEN ? AND ?" + $this->assertSqlGeneration( + 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id BETWEEN ?1 AND ?2', + 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE c0_."id" BETWEEN ? AND ?' ); } @@ -476,36 +485,36 @@ public function testSupportsBetweenClauseWithPositionalParameters() */ public function testSupportsNotBetweenForSizeFunction() { - self::assertSqlGeneration( - "SELECT m.name FROM Doctrine\Tests\Models\StockExchange\Market m WHERE SIZE(m.stocks) NOT BETWEEN ?1 AND ?2", - "SELECT e0_.name AS name_0 FROM exchange_markets e0_ WHERE (SELECT COUNT(*) FROM exchange_stocks e1_ WHERE e1_.market_id = e0_.id) NOT BETWEEN ? AND ?" + $this->assertSqlGeneration( + 'SELECT m.name FROM Doctrine\Tests\Models\StockExchange\Market m WHERE SIZE(m.stocks) NOT BETWEEN ?1 AND ?2', + 'SELECT e0_."name" AS name_0 FROM "exchange_markets" e0_ WHERE (SELECT COUNT(*) FROM "exchange_stocks" e1_ WHERE e1_."market_id" = e0_."id") NOT BETWEEN ? AND ?' ); } public function testSupportsFunctionalExpressionsInWherePart() { - self::assertSqlGeneration( - "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE TRIM(u.name) = 'someone'", + $this->assertSqlGeneration( + 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE TRIM(u.name) = \'someone\'', // String quoting in the SQL usually depends on the database platform. // This test works with a mock connection which uses ' for string quoting. - "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE TRIM(c0_.name) = 'someone'" + 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE TRIM(c0_."name") = \'someone\'' ); } public function testSupportsInstanceOfExpressionsInWherePart() { - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF Doctrine\Tests\Models\Company\CompanyEmployee", - "SELECT c0_.id AS id_0, c0_.name AS name_1, c0_.discr AS discr_2 FROM company_persons c0_ WHERE c0_.discr IN ('employee')" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF Doctrine\Tests\Models\Company\CompanyEmployee', + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c0_."discr" AS discr_2 FROM "company_persons" c0_ WHERE c0_."discr" IN (\'employee\')' ); } public function testSupportsInstanceOfExpressionInWherePartWithMultipleValues() { // This also uses FQCNs starting with or without a backslash in the INSTANCE OF parameter - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF (Doctrine\Tests\Models\Company\CompanyEmployee, \Doctrine\Tests\Models\Company\CompanyManager)", - "SELECT c0_.id AS id_0, c0_.name AS name_1, c0_.discr AS discr_2 FROM company_persons c0_ WHERE c0_.discr IN ('employee', 'manager')" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF (Doctrine\Tests\Models\Company\CompanyEmployee, \Doctrine\Tests\Models\Company\CompanyManager)', + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c0_."discr" AS discr_2 FROM "company_persons" c0_ WHERE c0_."discr" IN (\'employee\', \'manager\')' ); } @@ -514,9 +523,9 @@ public function testSupportsInstanceOfExpressionInWherePartWithMultipleValues() */ public function testSupportsInstanceOfExpressionsInWherePartPrefixedSlash() { - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF \Doctrine\Tests\Models\Company\CompanyEmployee", - "SELECT c0_.id AS id_0, c0_.name AS name_1, c0_.discr AS discr_2 FROM company_persons c0_ WHERE c0_.discr IN ('employee')" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF \Doctrine\Tests\Models\Company\CompanyEmployee', + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c0_."discr" AS discr_2 FROM "company_persons" c0_ WHERE c0_."discr" IN (\'employee\')' ); } @@ -525,33 +534,33 @@ public function testSupportsInstanceOfExpressionsInWherePartPrefixedSlash() */ public function testSupportsInstanceOfExpressionsInWherePartWithUnrelatedClass() { - self::assertInvalidSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF \Doctrine\Tests\Models\CMS\CmsUser", - QueryException::class + $this->assertInvalidSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF \Doctrine\Tests\Models\CMS\CmsUser', + 'Doctrine\\ORM\\Query\\QueryException' ); } public function testSupportsInstanceOfExpressionsInWherePartInDeeperLevel() { - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\Company\CompanyEmployee u WHERE u INSTANCE OF Doctrine\Tests\Models\Company\CompanyManager", - "SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, c0_.discr AS discr_5 FROM company_employees c1_ INNER JOIN company_persons c0_ ON c1_.id = c0_.id WHERE c0_.discr IN ('manager')" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\Company\CompanyEmployee u WHERE u INSTANCE OF Doctrine\Tests\Models\Company\CompanyManager', + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, c0_."discr" AS discr_5 FROM "company_employees" c1_ INNER JOIN "company_persons" c0_ ON c1_."id" = c0_."id" WHERE c0_."discr" IN (\'manager\')' ); } public function testSupportsInstanceOfExpressionsInWherePartInDeepestLevel() { - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\Company\CompanyManager u WHERE u INSTANCE OF Doctrine\Tests\Models\Company\CompanyManager", - "SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, c2_.title AS title_5, c0_.discr AS discr_6 FROM company_managers c2_ INNER JOIN company_employees c1_ ON c2_.id = c1_.id INNER JOIN company_persons c0_ ON c2_.id = c0_.id WHERE c0_.discr IN ('manager')" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\Company\CompanyManager u WHERE u INSTANCE OF Doctrine\Tests\Models\Company\CompanyManager', + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, c2_."title" AS title_5, c0_."discr" AS discr_6 FROM "company_managers" c2_ INNER JOIN "company_employees" c1_ ON c2_."id" = c1_."id" INNER JOIN "company_persons" c0_ ON c2_."id" = c0_."id" WHERE c0_."discr" IN (\'manager\')' ); } public function testSupportsInstanceOfExpressionsUsingInputParameterInWherePart() { - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF ?1", - "SELECT c0_.id AS id_0, c0_.name AS name_1, c0_.discr AS discr_2 FROM company_persons c0_ WHERE c0_.discr IN (?)", + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF ?1', + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c0_."discr" AS discr_2 FROM "company_persons" c0_ WHERE c0_."discr" IN (?)', [], [1 => $this->_em->getClassMetadata(CompanyEmployee::class)] ); } @@ -559,25 +568,25 @@ public function testSupportsInstanceOfExpressionsUsingInputParameterInWherePart( // Ticket #973 public function testSupportsSingleValuedInExpressionWithoutSpacesInWherePart() { - self::assertSqlGeneration( - "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE IDENTITY(u.email) IN(46)", - "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE c0_.email_id IN (46)" + $this->assertSqlGeneration( + 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE IDENTITY(u.email) IN(46)', + 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE c0_."email_id" IN (46)' ); } public function testSupportsMultipleValuedInExpressionInWherePart() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id IN (1, 2)', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE c0_.id IN (1, 2)' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."id" IN (1, 2)' ); } public function testSupportsNotInExpressionInWherePart() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE :id NOT IN (1)', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE ? NOT IN (1)' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE ? NOT IN (1)' ); } @@ -586,62 +595,64 @@ public function testSupportsNotInExpressionInWherePart() */ public function testSupportsNotInExpressionForModFunction() { - self::assertSqlGeneration( - "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE MOD(u.id, 5) NOT IN(1,3,4)", - "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE MOD(c0_.id, 5) NOT IN (1, 3, 4)" + $this->assertSqlGeneration( + 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE MOD(u.id, 5) NOT IN(1,3,4)', + 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE MOD(c0_."id", 5) NOT IN (1, 3, 4)' ); } public function testInExpressionWithSingleValuedAssociationPathExpressionInWherePart() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Forum\ForumUser u WHERE u.avatar IN (?1, ?2)', - 'SELECT f0_.id AS id_0, f0_.username AS username_1 FROM forum_users f0_ WHERE f0_.avatar_id IN (?, ?)' + 'SELECT f0_."id" AS id_0, f0_."username" AS username_1 FROM "forum_users" f0_ WHERE f0_."avatar_id" IN (?, ?)' ); } public function testInvalidInExpressionWithSingleValuedAssociationPathExpressionOnInverseSide() { // We do not support SingleValuedAssociationPathExpression on inverse side - self::assertInvalidSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.address IN (?1, ?2)", - QueryException::class + $this->assertInvalidSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.address IN (?1, ?2)', + 'Doctrine\ORM\Query\QueryException' ); } - public function testSupportsConcatFunctionForMysqlAndPostgresql() + public function testSupportsConcatFunctionMysql() { - $connMock = $this->_em->getConnection(); - $orgPlatform = $connMock->getDatabasePlatform(); + $this->_em->getConnection()->setDatabasePlatform(new MySqlPlatform()); - $connMock->setDatabasePlatform(new MySqlPlatform()); $this->assertSqlGeneration( - "SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, 's') = ?1", - "SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE CONCAT(c0_.name, 's') = ?" - ); - self::assertSqlGeneration( - "SELECT CONCAT(u.id, u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1", - "SELECT CONCAT(c0_.id, c0_.name) AS sclr_0 FROM cms_users c0_ WHERE c0_.id = ?" + 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, \'s\') = ?1', + 'SELECT c0_.`id` AS id_0 FROM `cms_users` c0_ WHERE CONCAT(c0_.`name`, \'s\') = ?' ); - $connMock->setDatabasePlatform(new PostgreSqlPlatform()); $this->assertSqlGeneration( - "SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, 's') = ?1", - "SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE c0_.name || 's' = ?" + 'SELECT CONCAT(u.id, u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1', + 'SELECT CONCAT(c0_.`id`, c0_.`name`) AS sclr_0 FROM `cms_users` c0_ WHERE c0_.`id` = ?' ); - self::assertSqlGeneration( - "SELECT CONCAT(u.id, u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1", - "SELECT c0_.id || c0_.name AS sclr_0 FROM cms_users c0_ WHERE c0_.id = ?" + } + + public function testSupportsConcatFunctionPgSql() + { + $this->_em->getConnection()->setDatabasePlatform(new PostgreSqlPlatform()); + + $this->assertSqlGeneration( + 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, \'s\') = ?1', + 'SELECT c0_."id" AS id_0 FROM "cms_users" c0_ WHERE c0_."name" || \'s\' = ?' ); - $connMock->setDatabasePlatform($orgPlatform); + $this->assertSqlGeneration( + 'SELECT CONCAT(u.id, u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1', + 'SELECT c0_."id" || c0_."name" AS sclr_0 FROM "cms_users" c0_ WHERE c0_."id" = ?' + ); } public function testSupportsExistsExpressionInWherePartWithCorrelatedSubquery() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE EXISTS (SELECT p.phonenumber FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.phonenumber = u.id)', - 'SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE EXISTS (SELECT c1_.phonenumber FROM cms_phonenumbers c1_ WHERE c1_.phonenumber = c0_.id)' + 'SELECT c0_."id" AS id_0 FROM "cms_users" c0_ WHERE EXISTS (SELECT c1_."phonenumber" FROM "cms_phonenumbers" c1_ WHERE c1_."phonenumber" = c0_."id")' ); } @@ -650,9 +661,9 @@ public function testSupportsExistsExpressionInWherePartWithCorrelatedSubquery() */ public function testSubqueriesInComparisonExpression() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE (u.id >= (SELECT u2.id FROM Doctrine\Tests\Models\CMS\CmsUser u2 WHERE u2.name = :name)) AND (u.id <= (SELECT u3.id FROM Doctrine\Tests\Models\CMS\CmsUser u3 WHERE u3.name = :name))', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE (c0_.id >= (SELECT c1_.id FROM cms_users c1_ WHERE c1_.name = ?)) AND (c0_.id <= (SELECT c2_.id FROM cms_users c2_ WHERE c2_.name = ?))' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE (c0_."id" >= (SELECT c1_."id" FROM "cms_users" c1_ WHERE c1_."name" = ?)) AND (c0_."id" <= (SELECT c2_."id" FROM "cms_users" c2_ WHERE c2_."name" = ?))' ); } @@ -660,6 +671,7 @@ public function testSupportsMemberOfExpressionOneToMany() { // "Get all users who have $phone as a phonenumber." (*cough* doesnt really make sense...) $q = $this->_em->createQuery('SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE :param MEMBER OF u.phonenumbers'); + $q->setHint(ORMQuery::HINT_FORCE_PARTIAL_LOAD, true); $phone = new CmsPhonenumber(); @@ -667,7 +679,7 @@ public function testSupportsMemberOfExpressionOneToMany() $q->setParameter('param', $phone); self::assertEquals( - 'SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE EXISTS (SELECT 1 FROM cms_phonenumbers c1_ WHERE c0_.id = c1_.user_id AND c1_.phonenumber = ?)', + 'SELECT c0_."id" AS id_0 FROM "cms_users" c0_ WHERE EXISTS (SELECT 1 FROM "cms_phonenumbers" c1_ WHERE c0_."id" = c1_."user_id" AND c1_."phonenumber" = ?)', $q->getSql() ); } @@ -676,6 +688,7 @@ public function testSupportsMemberOfExpressionManyToMany() { // "Get all users who are members of $group." $q = $this->_em->createQuery('SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE :param MEMBER OF u.groups'); + $q->setHint(ORMQuery::HINT_FORCE_PARTIAL_LOAD, true); $group = new CmsGroup(); @@ -683,7 +696,7 @@ public function testSupportsMemberOfExpressionManyToMany() $q->setParameter('param', $group); self::assertEquals( - 'SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE EXISTS (SELECT 1 FROM cms_users_groups c1_ INNER JOIN cms_groups c2_ ON c1_.group_id = c2_.id WHERE c1_.user_id = c0_.id AND c2_.id = ?)', + 'SELECT c0_."id" AS id_0 FROM "cms_users" c0_ WHERE EXISTS (SELECT 1 FROM "cms_users_groups" c1_ INNER JOIN "cms_groups" c2_ ON c1_."group_id" = c2_."id" WHERE c1_."user_id" = c0_."id" AND c2_."id" = ?)', $q->getSql() ); } @@ -700,7 +713,7 @@ public function testSupportsMemberOfExpressionManyToManyParameterArray() $q->setParameter('param', [$group, $group2]); self::assertEquals( - 'SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE EXISTS (SELECT 1 FROM cms_users_groups c1_ INNER JOIN cms_groups c2_ ON c1_.group_id = c2_.id WHERE c1_.user_id = c0_.id AND c2_.id = ?)', + 'SELECT c0_."id" AS id_0 FROM "cms_users" c0_ WHERE EXISTS (SELECT 1 FROM "cms_users_groups" c1_ INNER JOIN "cms_groups" c2_ ON c1_."group_id" = c2_."id" WHERE c1_."user_id" = c0_."id" AND c2_."id" = ?)', $q->getSql() ); } @@ -710,11 +723,15 @@ public function testSupportsMemberOfExpressionSelfReferencing() // "Get all persons who have $person as a friend." // Tough one: Many-many self-referencing ("friends") with class table inheritance $q = $this->_em->createQuery('SELECT p FROM Doctrine\Tests\Models\Company\CompanyPerson p WHERE :param MEMBER OF p.friends'); + $person = new CompanyPerson(); + $this->_em->getClassMetadata(get_class($person))->assignIdentifier($person, ['id' => 101]); + $q->setParameter('param', $person); + self::assertEquals( - 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.title AS title_2, c2_.salary AS salary_3, c2_.department AS department_4, c2_.startDate AS startDate_5, c0_.discr AS discr_6, c0_.spouse_id AS spouse_id_7, c1_.car_id AS car_id_8 FROM company_persons c0_ LEFT JOIN company_managers c1_ ON c0_.id = c1_.id LEFT JOIN company_employees c2_ ON c0_.id = c2_.id WHERE EXISTS (SELECT 1 FROM company_persons_friends c3_ INNER JOIN company_persons c4_ ON c3_.friend_id = c4_.id WHERE c3_.person_id = c0_.id AND c4_.id = ?)', + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."title" AS title_2, c2_."salary" AS salary_3, c2_."department" AS department_4, c2_."startDate" AS startDate_5, c0_."discr" AS discr_6, c0_."spouse_id" AS spouse_id_7, c1_."car_id" AS car_id_8 FROM "company_persons" c0_ LEFT JOIN "company_managers" c1_ ON c0_."id" = c1_."id" LEFT JOIN "company_employees" c2_ ON c0_."id" = c2_."id" WHERE EXISTS (SELECT 1 FROM "company_persons_friends" c3_ INNER JOIN "company_persons" c4_ ON c3_."friend_id" = c4_."id" WHERE c3_."person_id" = c0_."id" AND c4_."id" = ?)', $q->getSql() ); } @@ -722,49 +739,51 @@ public function testSupportsMemberOfExpressionSelfReferencing() public function testSupportsMemberOfWithSingleValuedAssociation() { // Impossible example, but it illustrates the purpose - $q = $this->_em->createQuery('SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.email MEMBER OF u.groups'); - - self::assertEquals( - 'SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE EXISTS (SELECT 1 FROM cms_users_groups c1_ INNER JOIN cms_groups c2_ ON c1_.group_id = c2_.id WHERE c1_.user_id = c0_.id AND c2_.id = c0_.email_id)', - $q->getSql() + $this->assertSqlGeneration( + 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.email MEMBER OF u.groups', + 'SELECT c0_."id" AS id_0 FROM "cms_users" c0_ WHERE EXISTS (SELECT 1 FROM "cms_users_groups" c1_ INNER JOIN "cms_groups" c2_ ON c1_."group_id" = c2_."id" WHERE c1_."user_id" = c0_."id" AND c2_."id" = c0_."email_id")' ); } public function testSupportsMemberOfWithIdentificationVariable() { // Impossible example, but it illustrates the purpose - $q = $this->_em->createQuery('SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u MEMBER OF u.groups'); - - self::assertEquals( - 'SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE EXISTS (SELECT 1 FROM cms_users_groups c1_ INNER JOIN cms_groups c2_ ON c1_.group_id = c2_.id WHERE c1_.user_id = c0_.id AND c2_.id = c0_.id)', - $q->getSql() + $this->assertSqlGeneration( + 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u MEMBER OF u.groups', + 'SELECT c0_."id" AS id_0 FROM "cms_users" c0_ WHERE EXISTS (SELECT 1 FROM "cms_users_groups" c1_ INNER JOIN "cms_groups" c2_ ON c1_."group_id" = c2_."id" WHERE c1_."user_id" = c0_."id" AND c2_."id" = c0_."id")' ); } public function testSupportsCurrentDateFunction() { - $q = $this->_em->createQuery('SELECT d.id FROM Doctrine\Tests\Models\Generic\DateTimeModel d WHERE d.datetime > current_date()'); - $q->setHint(ORMQuery::HINT_FORCE_PARTIAL_LOAD, true); - self::assertEquals('SELECT d0_.id AS id_0 FROM date_time_model d0_ WHERE d0_.col_datetime > CURRENT_DATE', $q->getSql()); + $this->assertSqlGeneration( + 'SELECT d.id FROM Doctrine\Tests\Models\Generic\DateTimeModel d WHERE d.datetime > current_date()', + 'SELECT d0_."id" AS id_0 FROM "date_time_model" d0_ WHERE d0_."col_datetime" > CURRENT_DATE', + [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] + ); } public function testSupportsCurrentTimeFunction() { - $q = $this->_em->createQuery('SELECT d.id FROM Doctrine\Tests\Models\Generic\DateTimeModel d WHERE d.time > current_time()'); - $q->setHint(ORMQuery::HINT_FORCE_PARTIAL_LOAD, true); - self::assertEquals('SELECT d0_.id AS id_0 FROM date_time_model d0_ WHERE d0_.col_time > CURRENT_TIME', $q->getSql()); + $this->assertSqlGeneration( + 'SELECT d.id FROM Doctrine\Tests\Models\Generic\DateTimeModel d WHERE d.time > current_time()', + 'SELECT d0_."id" AS id_0 FROM "date_time_model" d0_ WHERE d0_."col_time" > CURRENT_TIME', + [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] + ); } public function testSupportsCurrentTimestampFunction() { - $q = $this->_em->createQuery('SELECT d.id FROM Doctrine\Tests\Models\Generic\DateTimeModel d WHERE d.datetime > current_timestamp()'); - $q->setHint(ORMQuery::HINT_FORCE_PARTIAL_LOAD, true); - self::assertEquals('SELECT d0_.id AS id_0 FROM date_time_model d0_ WHERE d0_.col_datetime > CURRENT_TIMESTAMP', $q->getSql()); + $this->assertSqlGeneration( + 'SELECT d.id FROM Doctrine\Tests\Models\Generic\DateTimeModel d WHERE d.datetime > current_timestamp()', + 'SELECT d0_."id" AS id_0 FROM "date_time_model" d0_ WHERE d0_."col_datetime" > CURRENT_TIMESTAMP', + [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] + ); } public function testExistsExpressionInWhereCorrelatedSubqueryAssocCondition() { - self::assertSqlGeneration( + $this->assertSqlGeneration( // DQL // The result of this query consists of all employees whose spouses are also employees. 'SELECT DISTINCT emp FROM Doctrine\Tests\Models\CMS\CmsEmployee emp @@ -773,16 +792,16 @@ public function testExistsExpressionInWhereCorrelatedSubqueryAssocCondition() FROM Doctrine\Tests\Models\CMS\CmsEmployee spouseEmp WHERE spouseEmp = emp.spouse)', // SQL - 'SELECT DISTINCT c0_.id AS id_0, c0_.name AS name_1 FROM cms_employees c0_' + 'SELECT DISTINCT c0_."id" AS id_0, c0_."name" AS name_1 FROM "cms_employees" c0_' . ' WHERE EXISTS (' - . 'SELECT c1_.id FROM cms_employees c1_ WHERE c1_.id = c0_.spouse_id' + . 'SELECT c1_."id" FROM "cms_employees" c1_ WHERE c1_."id" = c0_."spouse_id"' . ')' ); } public function testExistsExpressionWithSimpleSelectReturningScalar() { - self::assertSqlGeneration( + $this->assertSqlGeneration( // DQL // The result of this query consists of all employees whose spouses are also employees. 'SELECT DISTINCT emp FROM Doctrine\Tests\Models\CMS\CmsEmployee emp @@ -791,9 +810,9 @@ public function testExistsExpressionWithSimpleSelectReturningScalar() FROM Doctrine\Tests\Models\CMS\CmsEmployee spouseEmp WHERE spouseEmp = emp.spouse)', // SQL - 'SELECT DISTINCT c0_.id AS id_0, c0_.name AS name_1 FROM cms_employees c0_' + 'SELECT DISTINCT c0_."id" AS id_0, c0_."name" AS name_1 FROM "cms_employees" c0_' . ' WHERE EXISTS (' - . 'SELECT 1 AS sclr_2 FROM cms_employees c1_ WHERE c1_.id = c0_.spouse_id' + . 'SELECT 1 AS sclr_2 FROM "cms_employees" c1_ WHERE c1_."id" = c0_."spouse_id"' . ')' ); } @@ -804,7 +823,10 @@ public function testLimitFromQueryClass() ->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u') ->setMaxResults(10); - self::assertEquals('SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c0_.email_id AS email_id_4 FROM cms_users c0_ LIMIT 10', $q->getSql()); + self::assertEquals( + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c0_."email_id" AS email_id_4 FROM "cms_users" c0_ LIMIT 10', + $q->getSql() + ); } public function testLimitAndOffsetFromQueryClass() @@ -814,74 +836,77 @@ public function testLimitAndOffsetFromQueryClass() ->setMaxResults(10) ->setFirstResult(0); - self::assertEquals('SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c0_.email_id AS email_id_4 FROM cms_users c0_ LIMIT 10 OFFSET 0', $q->getSql()); + self::assertEquals( + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c0_."email_id" AS email_id_4 FROM "cms_users" c0_ LIMIT 10 OFFSET 0', + $q->getSql() + ); } public function testSizeFunction() { - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE SIZE(u.phonenumbers) > 1", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE (SELECT COUNT(*) FROM cms_phonenumbers c1_ WHERE c1_.user_id = c0_.id) > 1" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE SIZE(u.phonenumbers) > 1', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE (SELECT COUNT(*) FROM "cms_phonenumbers" c1_ WHERE c1_."user_id" = c0_."id") > 1' ); } public function testSizeFunctionSupportsManyToMany() { - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE SIZE(u.groups) > 1", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE (SELECT COUNT(*) FROM cms_users_groups c1_ WHERE c1_.user_id = c0_.id) > 1" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE SIZE(u.groups) > 1', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE (SELECT COUNT(*) FROM "cms_users_groups" c1_ WHERE c1_."user_id" = c0_."id") > 1' ); } public function testEmptyCollectionComparisonExpression() { - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.phonenumbers IS EMPTY", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE (SELECT COUNT(*) FROM cms_phonenumbers c1_ WHERE c1_.user_id = c0_.id) = 0" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.phonenumbers IS EMPTY', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE (SELECT COUNT(*) FROM "cms_phonenumbers" c1_ WHERE c1_."user_id" = c0_."id") = 0' ); - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.phonenumbers IS NOT EMPTY", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE (SELECT COUNT(*) FROM cms_phonenumbers c1_ WHERE c1_.user_id = c0_.id) > 0" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.phonenumbers IS NOT EMPTY', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE (SELECT COUNT(*) FROM "cms_phonenumbers" c1_ WHERE c1_."user_id" = c0_."id") > 0' ); } public function testNestedExpressions() { - self::assertSqlGeneration( - "select u from Doctrine\Tests\Models\CMS\CmsUser u where u.id > 10 and u.id < 42 and ((u.id * 2) > 5)", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE c0_.id > 10 AND c0_.id < 42 AND ((c0_.id * 2) > 5)" + $this->assertSqlGeneration( + 'select u from Doctrine\Tests\Models\CMS\CmsUser u where u.id > 10 and u.id < 42 and ((u.id * 2) > 5)', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."id" > 10 AND c0_."id" < 42 AND ((c0_."id" * 2) > 5)' ); } public function testNestedExpressions2() { - self::assertSqlGeneration( - "select u from Doctrine\Tests\Models\CMS\CmsUser u where (u.id > 10) and (u.id < 42 and ((u.id * 2) > 5)) or u.id <> 42", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE (c0_.id > 10) AND (c0_.id < 42 AND ((c0_.id * 2) > 5)) OR c0_.id <> 42" + $this->assertSqlGeneration( + 'select u from Doctrine\Tests\Models\CMS\CmsUser u where (u.id > 10) and (u.id < 42 and ((u.id * 2) > 5)) or u.id <> 42', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE (c0_."id" > 10) AND (c0_."id" < 42 AND ((c0_."id" * 2) > 5)) OR c0_."id" <> 42' ); } public function testNestedExpressions3() { - self::assertSqlGeneration( - "select u from Doctrine\Tests\Models\CMS\CmsUser u where (u.id > 10) and (u.id between 1 and 10 or u.id in (1, 2, 3, 4, 5))", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE (c0_.id > 10) AND (c0_.id BETWEEN 1 AND 10 OR c0_.id IN (1, 2, 3, 4, 5))" + $this->assertSqlGeneration( + 'select u from Doctrine\Tests\Models\CMS\CmsUser u where (u.id > 10) and (u.id between 1 and 10 or u.id in (1, 2, 3, 4, 5))', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE (c0_."id" > 10) AND (c0_."id" BETWEEN 1 AND 10 OR c0_."id" IN (1, 2, 3, 4, 5))' ); } public function testOrderByCollectionAssociationSize() { - self::assertSqlGeneration( - "select u, size(u.articles) as numArticles from Doctrine\Tests\Models\CMS\CmsUser u order by numArticles", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, (SELECT COUNT(*) FROM cms_articles c1_ WHERE c1_.user_id = c0_.id) AS sclr_4 FROM cms_users c0_ ORDER BY sclr_4 ASC" + $this->assertSqlGeneration( + 'select u, size(u.articles) as numArticles from Doctrine\Tests\Models\CMS\CmsUser u order by numArticles', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, (SELECT COUNT(*) FROM "cms_articles" c1_ WHERE c1_."user_id" = c0_."id") AS sclr_4 FROM "cms_users" c0_ ORDER BY sclr_4 ASC' ); } public function testOrderBySupportsSingleValuedPathExpressionOwningSide() { - self::assertSqlGeneration( - "select a from Doctrine\Tests\Models\CMS\CmsArticle a order by a.user", - "SELECT c0_.id AS id_0, c0_.topic AS topic_1, c0_.text AS text_2, c0_.version AS version_3 FROM cms_articles c0_ ORDER BY c0_.user_id ASC" + $this->assertSqlGeneration( + 'select a from Doctrine\Tests\Models\CMS\CmsArticle a order by a.user', + 'SELECT c0_."id" AS id_0, c0_."topic" AS topic_1, c0_."text" AS text_2, c0_."version" AS version_3 FROM "cms_articles" c0_ ORDER BY c0_."user_id" ASC' ); } @@ -890,70 +915,65 @@ public function testOrderBySupportsSingleValuedPathExpressionOwningSide() */ public function testOrderBySupportsSingleValuedPathExpressionInverseSide() { - $q = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u order by u.address"); + $q = $this->_em->createQuery('select u from Doctrine\Tests\Models\CMS\CmsUser u order by u.address'); + $q->getSQL(); } public function testBooleanLiteralInWhereOnSqlite() { - $oldPlat = $this->_em->getConnection()->getDatabasePlatform(); $this->_em->getConnection()->setDatabasePlatform(new SqlitePlatform()); - self::assertSqlGeneration( - "SELECT b FROM Doctrine\Tests\Models\Generic\BooleanModel b WHERE b.booleanField = true", - "SELECT b0_.id AS id_0, b0_.booleanField AS booleanField_1 FROM boolean_model b0_ WHERE b0_.booleanField = 1" + $this->assertSqlGeneration( + 'SELECT b FROM Doctrine\Tests\Models\Generic\BooleanModel b WHERE b.booleanField = true', + 'SELECT b0_."id" AS id_0, b0_."booleanField" AS booleanField_1 FROM "boolean_model" b0_ WHERE b0_."booleanField" = 1' ); - self::assertSqlGeneration( - "SELECT b FROM Doctrine\Tests\Models\Generic\BooleanModel b WHERE b.booleanField = false", - "SELECT b0_.id AS id_0, b0_.booleanField AS booleanField_1 FROM boolean_model b0_ WHERE b0_.booleanField = 0" + $this->assertSqlGeneration( + 'SELECT b FROM Doctrine\Tests\Models\Generic\BooleanModel b WHERE b.booleanField = false', + 'SELECT b0_."id" AS id_0, b0_."booleanField" AS booleanField_1 FROM "boolean_model" b0_ WHERE b0_."booleanField" = 0' ); - - $this->_em->getConnection()->setDatabasePlatform($oldPlat); } public function testBooleanLiteralInWhereOnPostgres() { - $oldPlat = $this->_em->getConnection()->getDatabasePlatform(); $this->_em->getConnection()->setDatabasePlatform(new PostgreSqlPlatform()); - self::assertSqlGeneration( - "SELECT b FROM Doctrine\Tests\Models\Generic\BooleanModel b WHERE b.booleanField = true", - "SELECT b0_.id AS id_0, b0_.booleanField AS booleanfield_1 FROM boolean_model b0_ WHERE b0_.booleanField = true" + $this->assertSqlGeneration( + 'SELECT b FROM Doctrine\Tests\Models\Generic\BooleanModel b WHERE b.booleanField = true', + 'SELECT b0_."id" AS id_0, b0_."booleanField" AS booleanfield_1 FROM "boolean_model" b0_ WHERE b0_."booleanField" = true' ); - self::assertSqlGeneration( - "SELECT b FROM Doctrine\Tests\Models\Generic\BooleanModel b WHERE b.booleanField = false", - "SELECT b0_.id AS id_0, b0_.booleanField AS booleanfield_1 FROM boolean_model b0_ WHERE b0_.booleanField = false" + $this->assertSqlGeneration( + 'SELECT b FROM Doctrine\Tests\Models\Generic\BooleanModel b WHERE b.booleanField = false', + 'SELECT b0_."id" AS id_0, b0_."booleanField" AS booleanfield_1 FROM "boolean_model" b0_ WHERE b0_."booleanField" = false' ); - - $this->_em->getConnection()->setDatabasePlatform($oldPlat); } public function testSingleValuedAssociationFieldInWhere() { - self::assertSqlGeneration( - "SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.user = ?1", - "SELECT c0_.phonenumber AS phonenumber_0 FROM cms_phonenumbers c0_ WHERE c0_.user_id = ?" + $this->assertSqlGeneration( + 'SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.user = ?1', + 'SELECT c0_."phonenumber" AS phonenumber_0 FROM "cms_phonenumbers" c0_ WHERE c0_."user_id" = ?' ); } public function testSingleValuedAssociationNullCheckOnOwningSide() { - self::assertSqlGeneration( - "SELECT a FROM Doctrine\Tests\Models\CMS\CmsAddress a WHERE a.user IS NULL", - "SELECT c0_.id AS id_0, c0_.country AS country_1, c0_.zip AS zip_2, c0_.city AS city_3 FROM cms_addresses c0_ WHERE c0_.user_id IS NULL" + $this->assertSqlGeneration( + 'SELECT a FROM Doctrine\Tests\Models\CMS\CmsAddress a WHERE a.user IS NULL', + 'SELECT c0_."id" AS id_0, c0_."country" AS country_1, c0_."zip" AS zip_2, c0_."city" AS city_3 FROM "cms_addresses" c0_ WHERE c0_."user_id" IS NULL' ); } // Null check on inverse side has to happen through explicit JOIN. - // "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.address IS NULL" + // 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.address IS NULL' // where the CmsUser is the inverse side is not supported. public function testSingleValuedAssociationNullCheckOnInverseSide() { - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.address a WHERE a.id IS NULL", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ LEFT JOIN cms_addresses c1_ ON c0_.id = c1_.user_id WHERE c1_.id IS NULL" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.address a WHERE a.id IS NULL', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ LEFT JOIN "cms_addresses" c1_ ON c0_."id" = c1_."user_id" WHERE c1_."id" IS NULL' ); } @@ -963,31 +983,31 @@ public function testSingleValuedAssociationNullCheckOnInverseSide() */ public function testStringFunctionLikeExpression() { - self::assertSqlGeneration( - "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE LOWER(u.name) LIKE '%foo OR bar%'", - "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE LOWER(c0_.name) LIKE '%foo OR bar%'" + $this->assertSqlGeneration( + 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE LOWER(u.name) LIKE \'%foo OR bar%\'', + 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE LOWER(c0_."name") LIKE \'%foo OR bar%\'' ); - self::assertSqlGeneration( - "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE LOWER(u.name) LIKE :str", - "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE LOWER(c0_.name) LIKE ?" + $this->assertSqlGeneration( + 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE LOWER(u.name) LIKE :str', + 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE LOWER(c0_."name") LIKE ?' ); - self::assertSqlGeneration( - "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(UPPER(u.name), '_moo') LIKE :str", - "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE UPPER(c0_.name) || '_moo' LIKE ?" + $this->assertSqlGeneration( + 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(UPPER(u.name), \'_moo\') LIKE :str', + 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE UPPER(c0_."name") || \'_moo\' LIKE ?' ); // DDC-1572 - self::assertSqlGeneration( - "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE UPPER(u.name) LIKE UPPER(:str)", - "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE UPPER(c0_.name) LIKE UPPER(?)" + $this->assertSqlGeneration( + 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE UPPER(u.name) LIKE UPPER(:str)', + 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE UPPER(c0_."name") LIKE UPPER(?)' ); - self::assertSqlGeneration( - "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE UPPER(LOWER(u.name)) LIKE UPPER(LOWER(:str))", - "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE UPPER(LOWER(c0_.name)) LIKE UPPER(LOWER(?))" + $this->assertSqlGeneration( + 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE UPPER(LOWER(u.name)) LIKE UPPER(LOWER(:str))', + 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE UPPER(LOWER(c0_."name")) LIKE UPPER(LOWER(?))' ); - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a WITH a.topic LIKE u.name", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ LEFT JOIN cms_articles c1_ ON c0_.id = c1_.user_id AND (c1_.topic LIKE c0_.name)" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a WITH a.topic LIKE u.name', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ LEFT JOIN "cms_articles" c1_ ON c0_."id" = c1_."user_id" AND (c1_."topic" LIKE c0_."name")' ); } @@ -996,18 +1016,18 @@ public function testStringFunctionLikeExpression() */ public function testStringFunctionNotLikeExpression() { - self::assertSqlGeneration( - "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE LOWER(u.name) NOT LIKE '%foo OR bar%'", - "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE LOWER(c0_.name) NOT LIKE '%foo OR bar%'" + $this->assertSqlGeneration( + 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE LOWER(u.name) NOT LIKE \'%foo OR bar%\'', + 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE LOWER(c0_."name") NOT LIKE \'%foo OR bar%\'' ); - self::assertSqlGeneration( - "SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE UPPER(LOWER(u.name)) NOT LIKE UPPER(LOWER(:str))", - "SELECT c0_.name AS name_0 FROM cms_users c0_ WHERE UPPER(LOWER(c0_.name)) NOT LIKE UPPER(LOWER(?))" + $this->assertSqlGeneration( + 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE UPPER(LOWER(u.name)) NOT LIKE UPPER(LOWER(:str))', + 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE UPPER(LOWER(c0_."name")) NOT LIKE UPPER(LOWER(?))' ); - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a WITH a.topic NOT LIKE u.name", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ LEFT JOIN cms_articles c1_ ON c0_.id = c1_.user_id AND (c1_.topic NOT LIKE c0_.name)" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a WITH a.topic NOT LIKE u.name', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ LEFT JOIN "cms_articles" c1_ ON c0_."id" = c1_."user_id" AND (c1_."topic" NOT LIKE c0_."name")' ); } @@ -1016,18 +1036,17 @@ public function testStringFunctionNotLikeExpression() */ public function testOrderedCollectionFetchJoined() { - self::assertSqlGeneration( - "SELECT r, l FROM Doctrine\Tests\Models\Routing\RoutingRoute r JOIN r.legs l", - "SELECT r0_.id AS id_0, r1_.id AS id_1, r1_.departureDate AS departureDate_2, r1_.arrivalDate AS arrivalDate_3 FROM RoutingRoute r0_ INNER JOIN RoutingRouteLegs r2_ ON r0_.id = r2_.route_id INNER JOIN RoutingLeg r1_ ON r1_.id = r2_.leg_id ". - "ORDER BY r1_.departureDate ASC" + $this->assertSqlGeneration( + 'SELECT r, l FROM Doctrine\Tests\Models\Routing\RoutingRoute r JOIN r.legs l', + 'SELECT r0_."id" AS id_0, r1_."id" AS id_1, r1_."departureDate" AS departureDate_2, r1_."arrivalDate" AS arrivalDate_3 FROM "RoutingRoute" r0_ INNER JOIN "RoutingRouteLegs" r2_ ON r0_."id" = r2_."route_id" INNER JOIN "RoutingLeg" r1_ ON r1_."id" = r2_."leg_id" ORDER BY r1_."departureDate" ASC' ); } public function testSubselectInSelect() { - self::assertSqlGeneration( - "SELECT u.name, (SELECT COUNT(p.phonenumber) FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.phonenumber = 1234) pcount FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = 'jon'", - "SELECT c0_.name AS name_0, (SELECT COUNT(c1_.phonenumber) AS sclr_2 FROM cms_phonenumbers c1_ WHERE c1_.phonenumber = 1234) AS sclr_1 FROM cms_users c0_ WHERE c0_.name = 'jon'" + $this->assertSqlGeneration( + 'SELECT u.name, (SELECT COUNT(p.phonenumber) FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.phonenumber = 1234) pcount FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = \'jon\'', + 'SELECT c0_."name" AS name_0, (SELECT COUNT(c1_."phonenumber") AS dctrn__1 FROM "cms_phonenumbers" c1_ WHERE c1_."phonenumber" = 1234) AS sclr_1 FROM "cms_users" c0_ WHERE c0_."name" = \'jon\'' ); } @@ -1041,10 +1060,9 @@ public function testPessimisticWriteLockQueryHint() $this->markTestSkipped('SqLite does not support Row locking at all.'); } - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = 'gblanco'", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 ". - "FROM cms_users c0_ WHERE c0_.username = 'gblanco' FOR UPDATE", + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = \'gblanco\'', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."username" = \'gblanco\' FOR UPDATE', [ORMQuery::HINT_LOCK_MODE => LockMode::PESSIMISTIC_WRITE] ); } @@ -1057,10 +1075,9 @@ public function testPessimisticReadLockQueryHintPostgreSql() { $this->_em->getConnection()->setDatabasePlatform(new PostgreSqlPlatform()); - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = 'gblanco'", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 ". - "FROM cms_users c0_ WHERE c0_.username = 'gblanco' FOR SHARE", + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = \'gblanco\'', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."username" = \'gblanco\' FOR SHARE', [ORMQuery::HINT_LOCK_MODE => LockMode::PESSIMISTIC_READ] ); } @@ -1071,10 +1088,9 @@ public function testPessimisticReadLockQueryHintPostgreSql() */ public function testLockModeNoneQueryHint() { - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = 'gblanco'", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 ". - "FROM cms_users c0_ WHERE c0_.username = 'gblanco'", + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = \'gblanco\'', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."username" = \'gblanco\'', [ORMQuery::HINT_LOCK_MODE => LockMode::NONE] ); } @@ -1084,9 +1100,9 @@ public function testLockModeNoneQueryHint() */ public function testSupportSelectWithMoreThan10InputParameters() { - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1 OR u.id = ?2 OR u.id = ?3 OR u.id = ?4 OR u.id = ?5 OR u.id = ?6 OR u.id = ?7 OR u.id = ?8 OR u.id = ?9 OR u.id = ?10 OR u.id = ?11", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE c0_.id = ? OR c0_.id = ? OR c0_.id = ? OR c0_.id = ? OR c0_.id = ? OR c0_.id = ? OR c0_.id = ? OR c0_.id = ? OR c0_.id = ? OR c0_.id = ? OR c0_.id = ?" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1 OR u.id = ?2 OR u.id = ?3 OR u.id = ?4 OR u.id = ?5 OR u.id = ?6 OR u.id = ?7 OR u.id = ?8 OR u.id = ?9 OR u.id = ?10 OR u.id = ?11', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."id" = ? OR c0_."id" = ? OR c0_."id" = ? OR c0_."id" = ? OR c0_."id" = ? OR c0_."id" = ? OR c0_."id" = ? OR c0_."id" = ? OR c0_."id" = ? OR c0_."id" = ? OR c0_."id" = ?' ); } @@ -1098,10 +1114,9 @@ public function testPessimisticReadLockQueryHintMySql() { $this->_em->getConnection()->setDatabasePlatform(new MySqlPlatform()); - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = 'gblanco'", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 ". - "FROM cms_users c0_ WHERE c0_.username = 'gblanco' LOCK IN SHARE MODE", + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = \'gblanco\'', + 'SELECT c0_.`id` AS id_0, c0_.`status` AS status_1, c0_.`username` AS username_2, c0_.`name` AS name_3 FROM `cms_users` c0_ WHERE c0_.`username` = \'gblanco\' LOCK IN SHARE MODE', [ORMQuery::HINT_LOCK_MODE => LockMode::PESSIMISTIC_READ] ); } @@ -1114,10 +1129,9 @@ public function testPessimisticReadLockQueryHintOracle() { $this->_em->getConnection()->setDatabasePlatform(new OraclePlatform()); - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = 'gblanco'", - "SELECT c0_.id AS ID_0, c0_.status AS STATUS_1, c0_.username AS USERNAME_2, c0_.name AS NAME_3 ". - "FROM cms_users c0_ WHERE c0_.username = 'gblanco' FOR UPDATE", + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = \'gblanco\'', + 'SELECT c0_."id" AS ID_0, c0_."status" AS STATUS_1, c0_."username" AS USERNAME_2, c0_."name" AS NAME_3 FROM "cms_users" c0_ WHERE c0_."username" = \'gblanco\' FOR UPDATE', [ORMQuery::HINT_LOCK_MODE => LockMode::PESSIMISTIC_READ] ); } @@ -1130,9 +1144,9 @@ public function testSupportToCustomDQLFunctions() $config = $this->_em->getConfiguration(); $config->addCustomNumericFunction('MYABS', MyAbsFunction::class); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT MYABS(p.phonenumber) FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p', - 'SELECT ABS(c0_.phonenumber) AS sclr_0 FROM cms_phonenumbers c0_' + 'SELECT ABS(c0_."phonenumber") AS sclr_0 FROM "cms_phonenumbers" c0_' ); $config->setCustomNumericFunctions([]); @@ -1143,9 +1157,9 @@ public function testSupportToCustomDQLFunctions() */ public function testMappedSuperclassAssociationJoin() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT f FROM Doctrine\Tests\Models\DirectoryTree\File f JOIN f.parentDirectory d WHERE f.id = ?1', - 'SELECT f0_.id AS id_0, f0_.extension AS extension_1, f0_.name AS name_2 FROM "file" f0_ INNER JOIN Directory d1_ ON f0_.parentDirectory_id = d1_.id WHERE f0_.id = ?' + 'SELECT f0_."id" AS id_0, f0_."extension" AS extension_1, f0_."name" AS name_2 FROM "file" f0_ INNER JOIN "Directory" d1_ ON f0_."parentDirectory_id" = d1_."id" WHERE f0_."id" = ?' ); } @@ -1154,9 +1168,9 @@ public function testMappedSuperclassAssociationJoin() */ public function testGroupBy() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT g.id, count(u.id) FROM Doctrine\Tests\Models\CMS\CmsGroup g JOIN g.users u GROUP BY g.id', - 'SELECT c0_.id AS id_0, count(c1_.id) AS sclr_1 FROM cms_groups c0_ INNER JOIN cms_users_groups c2_ ON c0_.id = c2_.group_id INNER JOIN cms_users c1_ ON c1_.id = c2_.user_id GROUP BY c0_.id' + 'SELECT c0_."id" AS id_0, count(c1_."id") AS sclr_1 FROM "cms_groups" c0_ INNER JOIN "cms_users_groups" c2_ ON c0_."id" = c2_."group_id" INNER JOIN "cms_users" c1_ ON c1_."id" = c2_."user_id" GROUP BY c0_."id"' ); } @@ -1165,25 +1179,25 @@ public function testGroupBy() */ public function testGroupByIdentificationVariable() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT g, count(u.id) FROM Doctrine\Tests\Models\CMS\CmsGroup g JOIN g.users u GROUP BY g', - 'SELECT c0_.id AS id_0, c0_.name AS name_1, count(c1_.id) AS sclr_2 FROM cms_groups c0_ INNER JOIN cms_users_groups c2_ ON c0_.id = c2_.group_id INNER JOIN cms_users c1_ ON c1_.id = c2_.user_id GROUP BY c0_.id, c0_.name' + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, count(c1_."id") AS sclr_2 FROM "cms_groups" c0_ INNER JOIN "cms_users_groups" c2_ ON c0_."id" = c2_."group_id" INNER JOIN "cms_users" c1_ ON c1_."id" = c2_."user_id" GROUP BY c0_."id", c0_."name"' ); } public function testCaseContainingNullIf() { - self::assertSqlGeneration( - "SELECT NULLIF(g.id, g.name) AS NullIfEqual FROM Doctrine\Tests\Models\CMS\CmsGroup g", - 'SELECT NULLIF(c0_.id, c0_.name) AS sclr_0 FROM cms_groups c0_' + $this->assertSqlGeneration( + 'SELECT NULLIF(g.id, g.name) AS NullIfEqual FROM Doctrine\Tests\Models\CMS\CmsGroup g', + 'SELECT NULLIF(c0_."id", c0_."name") AS sclr_0 FROM "cms_groups" c0_' ); } public function testCaseContainingCoalesce() { - self::assertSqlGeneration( - "SELECT COALESCE(NULLIF(u.name, ''), u.username) as Display FROM Doctrine\Tests\Models\CMS\CmsUser u", - "SELECT COALESCE(NULLIF(c0_.name, ''), c0_.username) AS sclr_0 FROM cms_users c0_" + $this->assertSqlGeneration( + 'SELECT COALESCE(NULLIF(u.name, \'\'), u.username) as Display FROM Doctrine\Tests\Models\CMS\CmsUser u', + 'SELECT COALESCE(NULLIF(c0_."name", \'\'), c0_."username") AS sclr_0 FROM "cms_users" c0_' ); } @@ -1192,17 +1206,18 @@ public function testCaseContainingCoalesce() */ public function testSubSelectDiscriminator() { - self::assertSqlGeneration( - "SELECT u.name, (SELECT COUNT(cfc.id) total FROM Doctrine\Tests\Models\Company\CompanyFixContract cfc) as cfc_count FROM Doctrine\Tests\Models\CMS\CmsUser u", - "SELECT c0_.name AS name_0, (SELECT COUNT(c1_.id) AS sclr_2 FROM company_contracts c1_ WHERE c1_.discr IN ('fix')) AS sclr_1 FROM cms_users c0_" + $this->assertSqlGeneration( + 'SELECT u.name, (SELECT COUNT(cfc.id) total FROM Doctrine\Tests\Models\Company\CompanyFixContract cfc) as cfc_count FROM Doctrine\Tests\Models\CMS\CmsUser u', + 'SELECT c0_."name" AS name_0, (SELECT COUNT(c1_."id") AS dctrn__total FROM "company_contracts" c1_ WHERE c1_."discr" IN (\'fix\')) AS sclr_1 FROM "cms_users" c0_' ); } public function testIdVariableResultVariableReuse() { $exceptionThrown = false; + try { - $query = $this->_em->createQuery("SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name IN (SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u)"); + $query = $this->_em->createQuery('SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name IN (SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u)'); $query->getSql(); $query->free(); @@ -1216,25 +1231,25 @@ public function testIdVariableResultVariableReuse() public function testSubSelectAliasesFromOuterQuery() { - self::assertSqlGeneration( - "SELECT uo, (SELECT ui.name FROM Doctrine\Tests\Models\CMS\CmsUser ui WHERE ui.id = uo.id) AS bar FROM Doctrine\Tests\Models\CMS\CmsUser uo", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, (SELECT c1_.name FROM cms_users c1_ WHERE c1_.id = c0_.id) AS sclr_4 FROM cms_users c0_" + $this->assertSqlGeneration( + 'SELECT uo, (SELECT ui.name FROM Doctrine\Tests\Models\CMS\CmsUser ui WHERE ui.id = uo.id) AS bar FROM Doctrine\Tests\Models\CMS\CmsUser uo', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, (SELECT c1_."name" FROM "cms_users" c1_ WHERE c1_."id" = c0_."id") AS sclr_4 FROM "cms_users" c0_' ); } public function testSubSelectAliasesFromOuterQueryWithSubquery() { - self::assertSqlGeneration( - "SELECT uo, (SELECT ui.name FROM Doctrine\Tests\Models\CMS\CmsUser ui WHERE ui.id = uo.id AND ui.name IN (SELECT uii.name FROM Doctrine\Tests\Models\CMS\CmsUser uii)) AS bar FROM Doctrine\Tests\Models\CMS\CmsUser uo", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, (SELECT c1_.name FROM cms_users c1_ WHERE c1_.id = c0_.id AND c1_.name IN (SELECT c2_.name FROM cms_users c2_)) AS sclr_4 FROM cms_users c0_" + $this->assertSqlGeneration( + 'SELECT uo, (SELECT ui.name FROM Doctrine\Tests\Models\CMS\CmsUser ui WHERE ui.id = uo.id AND ui.name IN (SELECT uii.name FROM Doctrine\Tests\Models\CMS\CmsUser uii)) AS bar FROM Doctrine\Tests\Models\CMS\CmsUser uo', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, (SELECT c1_."name" FROM "cms_users" c1_ WHERE c1_."id" = c0_."id" AND c1_."name" IN (SELECT c2_."name" FROM "cms_users" c2_)) AS sclr_4 FROM "cms_users" c0_' ); } public function testSubSelectAliasesFromOuterQueryReuseInWhereClause() { - self::assertSqlGeneration( - "SELECT uo, (SELECT ui.name FROM Doctrine\Tests\Models\CMS\CmsUser ui WHERE ui.id = uo.id) AS bar FROM Doctrine\Tests\Models\CMS\CmsUser uo WHERE bar = ?0", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, (SELECT c1_.name FROM cms_users c1_ WHERE c1_.id = c0_.id) AS sclr_4 FROM cms_users c0_ WHERE sclr_4 = ?" + $this->assertSqlGeneration( + 'SELECT uo, (SELECT ui.name FROM Doctrine\Tests\Models\CMS\CmsUser ui WHERE ui.id = uo.id) AS bar FROM Doctrine\Tests\Models\CMS\CmsUser uo WHERE bar = ?0', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, (SELECT c1_."name" FROM "cms_users" c1_ WHERE c1_."id" = c0_."id") AS sclr_4 FROM "cms_users" c0_ WHERE sclr_4 = ?' ); } @@ -1243,73 +1258,73 @@ public function testSubSelectAliasesFromOuterQueryReuseInWhereClause() */ public function testSelectForeignKeyPKWithoutFields() { - self::assertSqlGeneration( - "SELECT t, s, l FROM Doctrine\Tests\Models\DDC117\DDC117Link l INNER JOIN l.target t INNER JOIN l.source s", - "SELECT d0_.article_id AS article_id_0, d0_.title AS title_1, d1_.article_id AS article_id_2, d1_.title AS title_3, d2_.source_id AS source_id_4, d2_.target_id AS target_id_5 FROM DDC117Link d2_ INNER JOIN DDC117Article d0_ ON d2_.target_id = d0_.article_id INNER JOIN DDC117Article d1_ ON d2_.source_id = d1_.article_id" + $this->assertSqlGeneration( + 'SELECT t, s, l FROM Doctrine\Tests\Models\DDC117\DDC117Link l INNER JOIN l.target t INNER JOIN l.source s', + 'SELECT d0_."article_id" AS article_id_0, d0_."title" AS title_1, d1_."article_id" AS article_id_2, d1_."title" AS title_3, d2_."source_id" AS source_id_4, d2_."target_id" AS target_id_5 FROM "DDC117Link" d2_ INNER JOIN "DDC117Article" d0_ ON d2_."target_id" = d0_."article_id" INNER JOIN "DDC117Article" d1_ ON d2_."source_id" = d1_."article_id"' ); } public function testGeneralCaseWithSingleWhenClause() { - self::assertSqlGeneration( - "SELECT g.id, CASE WHEN ((g.id / 2) > 18) THEN 1 ELSE 0 END AS test FROM Doctrine\Tests\Models\CMS\CmsGroup g", - "SELECT c0_.id AS id_0, CASE WHEN ((c0_.id / 2) > 18) THEN 1 ELSE 0 END AS sclr_1 FROM cms_groups c0_" + $this->assertSqlGeneration( + 'SELECT g.id, CASE WHEN ((g.id / 2) > 18) THEN 1 ELSE 0 END AS test FROM Doctrine\Tests\Models\CMS\CmsGroup g', + 'SELECT c0_."id" AS id_0, CASE WHEN ((c0_."id" / 2) > 18) THEN 1 ELSE 0 END AS sclr_1 FROM "cms_groups" c0_' ); } public function testGeneralCaseWithMultipleWhenClause() { - self::assertSqlGeneration( - "SELECT g.id, CASE WHEN (g.id / 2 < 10) THEN 2 WHEN ((g.id / 2) > 20) THEN 1 ELSE 0 END AS test FROM Doctrine\Tests\Models\CMS\CmsGroup g", - "SELECT c0_.id AS id_0, CASE WHEN (c0_.id / 2 < 10) THEN 2 WHEN ((c0_.id / 2) > 20) THEN 1 ELSE 0 END AS sclr_1 FROM cms_groups c0_" + $this->assertSqlGeneration( + 'SELECT g.id, CASE WHEN (g.id / 2 < 10) THEN 2 WHEN ((g.id / 2) > 20) THEN 1 ELSE 0 END AS test FROM Doctrine\Tests\Models\CMS\CmsGroup g', + 'SELECT c0_."id" AS id_0, CASE WHEN (c0_."id" / 2 < 10) THEN 2 WHEN ((c0_."id" / 2) > 20) THEN 1 ELSE 0 END AS sclr_1 FROM "cms_groups" c0_' ); } public function testSimpleCaseWithSingleWhenClause() { - self::assertSqlGeneration( - "SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id = CASE g.name WHEN 'admin' THEN 1 ELSE 2 END", - "SELECT c0_.id AS id_0, c0_.name AS name_1 FROM cms_groups c0_ WHERE c0_.id = CASE c0_.name WHEN 'admin' THEN 1 ELSE 2 END" + $this->assertSqlGeneration( + 'SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id = CASE g.name WHEN \'admin\' THEN 1 ELSE 2 END', + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1 FROM "cms_groups" c0_ WHERE c0_."id" = CASE c0_."name" WHEN \'admin\' THEN 1 ELSE 2 END' ); } public function testSimpleCaseWithMultipleWhenClause() { - self::assertSqlGeneration( - "SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id = (CASE g.name WHEN 'admin' THEN 1 WHEN 'moderator' THEN 2 ELSE 3 END)", - "SELECT c0_.id AS id_0, c0_.name AS name_1 FROM cms_groups c0_ WHERE c0_.id = (CASE c0_.name WHEN 'admin' THEN 1 WHEN 'moderator' THEN 2 ELSE 3 END)" + $this->assertSqlGeneration( + 'SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id = (CASE g.name WHEN \'admin\' THEN 1 WHEN \'moderator\' THEN 2 ELSE 3 END)', + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1 FROM "cms_groups" c0_ WHERE c0_."id" = (CASE c0_."name" WHEN \'admin\' THEN 1 WHEN \'moderator\' THEN 2 ELSE 3 END)' ); } public function testGeneralCaseWithSingleWhenClauseInSubselect() { - self::assertSqlGeneration( - "SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id IN (SELECT CASE WHEN ((g2.id / 2) > 18) THEN 2 ELSE 1 END FROM Doctrine\Tests\Models\CMS\CmsGroup g2)", - "SELECT c0_.id AS id_0, c0_.name AS name_1 FROM cms_groups c0_ WHERE c0_.id IN (SELECT CASE WHEN ((c1_.id / 2) > 18) THEN 2 ELSE 1 END AS sclr_2 FROM cms_groups c1_)" + $this->assertSqlGeneration( + 'SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id IN (SELECT CASE WHEN ((g2.id / 2) > 18) THEN 2 ELSE 1 END FROM Doctrine\Tests\Models\CMS\CmsGroup g2)', + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1 FROM "cms_groups" c0_ WHERE c0_."id" IN (SELECT CASE WHEN ((c1_."id" / 2) > 18) THEN 2 ELSE 1 END AS sclr_2 FROM "cms_groups" c1_)' ); } public function testGeneralCaseWithMultipleWhenClauseInSubselect() { - self::assertSqlGeneration( - "SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id IN (SELECT CASE WHEN (g.id / 2 < 10) THEN 3 WHEN ((g.id / 2) > 20) THEN 2 ELSE 1 END FROM Doctrine\Tests\Models\CMS\CmsGroup g2)", - "SELECT c0_.id AS id_0, c0_.name AS name_1 FROM cms_groups c0_ WHERE c0_.id IN (SELECT CASE WHEN (c0_.id / 2 < 10) THEN 3 WHEN ((c0_.id / 2) > 20) THEN 2 ELSE 1 END AS sclr_2 FROM cms_groups c1_)" + $this->assertSqlGeneration( + 'SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id IN (SELECT CASE WHEN (g.id / 2 < 10) THEN 3 WHEN ((g.id / 2) > 20) THEN 2 ELSE 1 END FROM Doctrine\Tests\Models\CMS\CmsGroup g2)', + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1 FROM "cms_groups" c0_ WHERE c0_."id" IN (SELECT CASE WHEN (c0_."id" / 2 < 10) THEN 3 WHEN ((c0_."id" / 2) > 20) THEN 2 ELSE 1 END AS sclr_2 FROM "cms_groups" c1_)' ); } public function testSimpleCaseWithSingleWhenClauseInSubselect() { - self::assertSqlGeneration( - "SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id IN (SELECT CASE g2.name WHEN 'admin' THEN 1 ELSE 2 END FROM Doctrine\Tests\Models\CMS\CmsGroup g2)", - "SELECT c0_.id AS id_0, c0_.name AS name_1 FROM cms_groups c0_ WHERE c0_.id IN (SELECT CASE c1_.name WHEN 'admin' THEN 1 ELSE 2 END AS sclr_2 FROM cms_groups c1_)" + $this->assertSqlGeneration( + 'SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id IN (SELECT CASE g2.name WHEN \'admin\' THEN 1 ELSE 2 END FROM Doctrine\Tests\Models\CMS\CmsGroup g2)', + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1 FROM "cms_groups" c0_ WHERE c0_."id" IN (SELECT CASE c1_."name" WHEN \'admin\' THEN 1 ELSE 2 END AS sclr_2 FROM "cms_groups" c1_)' ); } public function testSimpleCaseWithMultipleWhenClauseInSubselect() { - self::assertSqlGeneration( - "SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id IN (SELECT CASE g2.name WHEN 'admin' THEN 1 WHEN 'moderator' THEN 2 ELSE 3 END FROM Doctrine\Tests\Models\CMS\CmsGroup g2)", - "SELECT c0_.id AS id_0, c0_.name AS name_1 FROM cms_groups c0_ WHERE c0_.id IN (SELECT CASE c1_.name WHEN 'admin' THEN 1 WHEN 'moderator' THEN 2 ELSE 3 END AS sclr_2 FROM cms_groups c1_)" + $this->assertSqlGeneration( + 'SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id IN (SELECT CASE g2.name WHEN \'admin\' THEN 1 WHEN \'moderator\' THEN 2 ELSE 3 END FROM Doctrine\Tests\Models\CMS\CmsGroup g2)', + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1 FROM "cms_groups" c0_ WHERE c0_."id" IN (SELECT CASE c1_."name" WHEN \'admin\' THEN 1 WHEN \'moderator\' THEN 2 ELSE 3 END AS sclr_2 FROM "cms_groups" c1_)' ); } @@ -1318,9 +1333,9 @@ public function testSimpleCaseWithMultipleWhenClauseInSubselect() */ public function testSimpleCaseWithStringPrimary() { - self::assertSqlGeneration( - "SELECT g.id, CASE WHEN ((g.id / 2) > 18) THEN 'Foo' ELSE 'Bar' END AS test FROM Doctrine\Tests\Models\CMS\CmsGroup g", - "SELECT c0_.id AS id_0, CASE WHEN ((c0_.id / 2) > 18) THEN 'Foo' ELSE 'Bar' END AS sclr_1 FROM cms_groups c0_" + $this->assertSqlGeneration( + 'SELECT g.id, CASE WHEN ((g.id / 2) > 18) THEN \'Foo\' ELSE \'Bar\' END AS test FROM Doctrine\Tests\Models\CMS\CmsGroup g', + 'SELECT c0_."id" AS id_0, CASE WHEN ((c0_."id" / 2) > 18) THEN \'Foo\' ELSE \'Bar\' END AS sclr_1 FROM "cms_groups" c0_' ); } @@ -1329,51 +1344,51 @@ public function testSimpleCaseWithStringPrimary() */ public function testCaseNegativeValuesInThenExpression() { - self::assertSqlGeneration( - "SELECT CASE g.name WHEN 'admin' THEN - 1 ELSE - 2 END FROM Doctrine\Tests\Models\CMS\CmsGroup g", - "SELECT CASE c0_.name WHEN 'admin' THEN -1 ELSE -2 END AS sclr_0 FROM cms_groups c0_" + $this->assertSqlGeneration( + 'SELECT CASE g.name WHEN \'admin\' THEN - 1 ELSE - 2 END FROM Doctrine\Tests\Models\CMS\CmsGroup g', + 'SELECT CASE c0_."name" WHEN \'admin\' THEN -1 ELSE -2 END AS sclr_0 FROM "cms_groups" c0_' ); - self::assertSqlGeneration( - "SELECT CASE g.name WHEN 'admin' THEN - 2 WHEN 'guest' THEN - 1 ELSE 0 END FROM Doctrine\Tests\Models\CMS\CmsGroup g", - "SELECT CASE c0_.name WHEN 'admin' THEN -2 WHEN 'guest' THEN -1 ELSE 0 END AS sclr_0 FROM cms_groups c0_" + $this->assertSqlGeneration( + 'SELECT CASE g.name WHEN \'admin\' THEN - 2 WHEN \'guest\' THEN - 1 ELSE 0 END FROM Doctrine\Tests\Models\CMS\CmsGroup g', + 'SELECT CASE c0_."name" WHEN \'admin\' THEN -2 WHEN \'guest\' THEN -1 ELSE 0 END AS sclr_0 FROM "cms_groups" c0_' ); - self::assertSqlGeneration( - "SELECT CASE g.name WHEN 'admin' THEN (- 1) ELSE (- 2) END FROM Doctrine\Tests\Models\CMS\CmsGroup g", - "SELECT CASE c0_.name WHEN 'admin' THEN (-1) ELSE (-2) END AS sclr_0 FROM cms_groups c0_" + $this->assertSqlGeneration( + 'SELECT CASE g.name WHEN \'admin\' THEN (- 1) ELSE (- 2) END FROM Doctrine\Tests\Models\CMS\CmsGroup g', + 'SELECT CASE c0_."name" WHEN \'admin\' THEN (-1) ELSE (-2) END AS sclr_0 FROM "cms_groups" c0_' ); - self::assertSqlGeneration( - "SELECT CASE g.name WHEN 'admin' THEN ( - :value) ELSE ( + :value) END FROM Doctrine\Tests\Models\CMS\CmsGroup g", - "SELECT CASE c0_.name WHEN 'admin' THEN (-?) ELSE (+?) END AS sclr_0 FROM cms_groups c0_" + $this->assertSqlGeneration( + 'SELECT CASE g.name WHEN \'admin\' THEN ( - :value) ELSE ( + :value) END FROM Doctrine\Tests\Models\CMS\CmsGroup g', + 'SELECT CASE c0_."name" WHEN \'admin\' THEN (-?) ELSE (+?) END AS sclr_0 FROM "cms_groups" c0_' ); - self::assertSqlGeneration( - "SELECT CASE g.name WHEN 'admin' THEN ( - g.id) ELSE ( + g.id) END FROM Doctrine\Tests\Models\CMS\CmsGroup g", - "SELECT CASE c0_.name WHEN 'admin' THEN (-c0_.id) ELSE (+c0_.id) END AS sclr_0 FROM cms_groups c0_" + $this->assertSqlGeneration( + 'SELECT CASE g.name WHEN \'admin\' THEN ( - g.id) ELSE ( + g.id) END FROM Doctrine\Tests\Models\CMS\CmsGroup g', + 'SELECT CASE c0_."name" WHEN \'admin\' THEN (-c0_."id") ELSE (+c0_."id") END AS sclr_0 FROM "cms_groups" c0_' ); } public function testIdentityFunctionWithCompositePrimaryKey() { - self::assertSqlGeneration( - "SELECT IDENTITY(p.poi, 'long') AS long FROM Doctrine\Tests\Models\Navigation\NavPhotos p", - "SELECT n0_.poi_long AS sclr_0 FROM navigation_photos n0_" + $this->assertSqlGeneration( + 'SELECT IDENTITY(p.poi, \'long\') AS long FROM Doctrine\Tests\Models\Navigation\NavPhotos p', + 'SELECT n0_."poi_long" AS sclr_0 FROM "navigation_photos" n0_' ); - self::assertSqlGeneration( - "SELECT IDENTITY(p.poi, 'lat') AS lat FROM Doctrine\Tests\Models\Navigation\NavPhotos p", - "SELECT n0_.poi_lat AS sclr_0 FROM navigation_photos n0_" + $this->assertSqlGeneration( + 'SELECT IDENTITY(p.poi, \'lat\') AS lat FROM Doctrine\Tests\Models\Navigation\NavPhotos p', + 'SELECT n0_."poi_lat" AS sclr_0 FROM "navigation_photos" n0_' ); - self::assertSqlGeneration( - "SELECT IDENTITY(p.poi, 'long') AS long, IDENTITY(p.poi, 'lat') AS lat FROM Doctrine\Tests\Models\Navigation\NavPhotos p", - "SELECT n0_.poi_long AS sclr_0, n0_.poi_lat AS sclr_1 FROM navigation_photos n0_" + $this->assertSqlGeneration( + 'SELECT IDENTITY(p.poi, \'long\') AS long, IDENTITY(p.poi, \'lat\') AS lat FROM Doctrine\Tests\Models\Navigation\NavPhotos p', + 'SELECT n0_."poi_long" AS sclr_0, n0_."poi_lat" AS sclr_1 FROM "navigation_photos" n0_' ); - self::assertInvalidSqlGeneration( - "SELECT IDENTITY(p.poi, 'invalid') AS invalid FROM Doctrine\Tests\Models\Navigation\NavPhotos p", + $this->assertInvalidSqlGeneration( + 'SELECT IDENTITY(p.poi, \'invalid\') AS invalid FROM Doctrine\Tests\Models\Navigation\NavPhotos p', QueryException::class ); } @@ -1383,14 +1398,14 @@ public function testIdentityFunctionWithCompositePrimaryKey() */ public function testPartialWithAssociationIdentifier() { - self::assertSqlGeneration( - "SELECT PARTIAL l.{_source, _target} FROM Doctrine\Tests\Models\Legacy\LegacyUserReference l", - 'SELECT l0_.iUserIdSource AS iUserIdSource_0, l0_.iUserIdTarget AS iUserIdTarget_1 FROM legacy_users_reference l0_' + $this->assertSqlGeneration( + 'SELECT PARTIAL l.{_source, _target} FROM Doctrine\Tests\Models\Legacy\LegacyUserReference l', + 'SELECT l0_."iUserIdSource" AS iUserIdSource_0, l0_."iUserIdTarget" AS iUserIdTarget_1 FROM "legacy_users_reference" l0_' ); - self::assertSqlGeneration( - "SELECT PARTIAL l.{_description, _source, _target} FROM Doctrine\Tests\Models\Legacy\LegacyUserReference l", - 'SELECT l0_.description AS description_0, l0_.iUserIdSource AS iUserIdSource_1, l0_.iUserIdTarget AS iUserIdTarget_2 FROM legacy_users_reference l0_' + $this->assertSqlGeneration( + 'SELECT PARTIAL l.{_description, _source, _target} FROM Doctrine\Tests\Models\Legacy\LegacyUserReference l', + 'SELECT l0_."description" AS description_0, l0_."iUserIdSource" AS iUserIdSource_1, l0_."iUserIdTarget" AS iUserIdTarget_2 FROM "legacy_users_reference" l0_' ); } @@ -1399,24 +1414,24 @@ public function testPartialWithAssociationIdentifier() */ public function testIdentityFunctionInSelectClause() { - self::assertSqlGeneration( - "SELECT IDENTITY(u.email) as email_id FROM Doctrine\Tests\Models\CMS\CmsUser u", - "SELECT c0_.email_id AS sclr_0 FROM cms_users c0_" + $this->assertSqlGeneration( + 'SELECT IDENTITY(u.email) as email_id FROM Doctrine\Tests\Models\CMS\CmsUser u', + 'SELECT c0_."email_id" AS sclr_0 FROM "cms_users" c0_' ); } public function testIdentityFunctionInJoinedSubclass() { //relation is in the subclass (CompanyManager) we are querying - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT m, IDENTITY(m.car) as car_id FROM Doctrine\Tests\Models\Company\CompanyManager m', - 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, c2_.title AS title_5, c2_.car_id AS sclr_6, c0_.discr AS discr_7 FROM company_managers c2_ INNER JOIN company_employees c1_ ON c2_.id = c1_.id INNER JOIN company_persons c0_ ON c2_.id = c0_.id' + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, c2_."title" AS title_5, c2_."car_id" AS sclr_6, c0_."discr" AS discr_7 FROM "company_managers" c2_ INNER JOIN "company_employees" c1_ ON c2_."id" = c1_."id" INNER JOIN "company_persons" c0_ ON c2_."id" = c0_."id"' ); //relation is in the base class (CompanyPerson). - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT m, IDENTITY(m.spouse) as spouse_id FROM Doctrine\Tests\Models\Company\CompanyManager m', - 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, c2_.title AS title_5, c0_.spouse_id AS sclr_6, c0_.discr AS discr_7 FROM company_managers c2_ INNER JOIN company_employees c1_ ON c2_.id = c1_.id INNER JOIN company_persons c0_ ON c2_.id = c0_.id' + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, c2_."title" AS title_5, c0_."spouse_id" AS sclr_6, c0_."discr" AS discr_7 FROM "company_managers" c2_ INNER JOIN "company_employees" c1_ ON c2_."id" = c1_."id" INNER JOIN "company_persons" c0_ ON c2_."id" = c0_."id"' ); } @@ -1425,8 +1440,8 @@ public function testIdentityFunctionInJoinedSubclass() */ public function testIdentityFunctionDoesNotAcceptStateField() { - self::assertInvalidSqlGeneration( - "SELECT IDENTITY(u.name) as name FROM Doctrine\Tests\Models\CMS\CmsUser u", + $this->assertInvalidSqlGeneration( + 'SELECT IDENTITY(u.name) as name FROM Doctrine\Tests\Models\CMS\CmsUser u', QueryException::class ); } @@ -1436,9 +1451,9 @@ public function testIdentityFunctionDoesNotAcceptStateField() */ public function testInheritanceTypeJoinInRootClassWithDisabledForcePartialLoad() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT p FROM Doctrine\Tests\Models\Company\CompanyPerson p', - 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.title AS title_2, c2_.salary AS salary_3, c2_.department AS department_4, c2_.startDate AS startDate_5, c0_.discr AS discr_6, c0_.spouse_id AS spouse_id_7, c1_.car_id AS car_id_8 FROM company_persons c0_ LEFT JOIN company_managers c1_ ON c0_.id = c1_.id LEFT JOIN company_employees c2_ ON c0_.id = c2_.id', + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."title" AS title_2, c2_."salary" AS salary_3, c2_."department" AS department_4, c2_."startDate" AS startDate_5, c0_."discr" AS discr_6, c0_."spouse_id" AS spouse_id_7, c1_."car_id" AS car_id_8 FROM "company_persons" c0_ LEFT JOIN "company_managers" c1_ ON c0_."id" = c1_."id" LEFT JOIN "company_employees" c2_ ON c0_."id" = c2_."id"', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] ); } @@ -1448,9 +1463,9 @@ public function testInheritanceTypeJoinInRootClassWithDisabledForcePartialLoad() */ public function testInheritanceTypeJoinInRootClassWithEnabledForcePartialLoad() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT p FROM Doctrine\Tests\Models\Company\CompanyPerson p', - 'SELECT c0_.id AS id_0, c0_.name AS name_1, c0_.discr AS discr_2 FROM company_persons c0_', + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c0_."discr" AS discr_2 FROM "company_persons" c0_', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] ); } @@ -1460,9 +1475,9 @@ public function testInheritanceTypeJoinInRootClassWithEnabledForcePartialLoad() */ public function testInheritanceTypeJoinInChildClassWithDisabledForcePartialLoad() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\Company\CompanyEmployee e', - 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, c2_.title AS title_5, c0_.discr AS discr_6, c0_.spouse_id AS spouse_id_7, c2_.car_id AS car_id_8 FROM company_employees c1_ INNER JOIN company_persons c0_ ON c1_.id = c0_.id LEFT JOIN company_managers c2_ ON c1_.id = c2_.id', + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, c2_."title" AS title_5, c0_."discr" AS discr_6, c0_."spouse_id" AS spouse_id_7, c2_."car_id" AS car_id_8 FROM "company_employees" c1_ INNER JOIN "company_persons" c0_ ON c1_."id" = c0_."id" LEFT JOIN "company_managers" c2_ ON c1_."id" = c2_."id"', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] ); } @@ -1472,9 +1487,9 @@ public function testInheritanceTypeJoinInChildClassWithDisabledForcePartialLoad( */ public function testInheritanceTypeJoinInChildClassWithEnabledForcePartialLoad() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\Company\CompanyEmployee e', - 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, c0_.discr AS discr_5 FROM company_employees c1_ INNER JOIN company_persons c0_ ON c1_.id = c0_.id', + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, c0_."discr" AS discr_5 FROM "company_employees" c1_ INNER JOIN "company_persons" c0_ ON c1_."id" = c0_."id"', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] ); } @@ -1484,9 +1499,9 @@ public function testInheritanceTypeJoinInChildClassWithEnabledForcePartialLoad() */ public function testInheritanceTypeJoinInLeafClassWithDisabledForcePartialLoad() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT m FROM Doctrine\Tests\Models\Company\CompanyManager m', - 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, c2_.title AS title_5, c0_.discr AS discr_6, c0_.spouse_id AS spouse_id_7, c2_.car_id AS car_id_8 FROM company_managers c2_ INNER JOIN company_employees c1_ ON c2_.id = c1_.id INNER JOIN company_persons c0_ ON c2_.id = c0_.id', + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, c2_."title" AS title_5, c0_."discr" AS discr_6, c0_."spouse_id" AS spouse_id_7, c2_."car_id" AS car_id_8 FROM "company_managers" c2_ INNER JOIN "company_employees" c1_ ON c2_."id" = c1_."id" INNER JOIN "company_persons" c0_ ON c2_."id" = c0_."id"', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] ); } @@ -1496,9 +1511,9 @@ public function testInheritanceTypeJoinInLeafClassWithDisabledForcePartialLoad() */ public function testInheritanceTypeJoinInLeafClassWithEnabledForcePartialLoad() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT m FROM Doctrine\Tests\Models\Company\CompanyManager m', - 'SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, c2_.title AS title_5, c0_.discr AS discr_6 FROM company_managers c2_ INNER JOIN company_employees c1_ ON c2_.id = c1_.id INNER JOIN company_persons c0_ ON c2_.id = c0_.id', + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, c2_."title" AS title_5, c0_."discr" AS discr_6 FROM "company_managers" c2_ INNER JOIN "company_employees" c1_ ON c2_."id" = c1_."id" INNER JOIN "company_persons" c0_ ON c2_."id" = c0_."id"', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] ); } @@ -1508,9 +1523,9 @@ public function testInheritanceTypeJoinInLeafClassWithEnabledForcePartialLoad() */ public function testInheritanceTypeSingleTableInRootClassWithDisabledForcePartialLoad() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c', - "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.fixPrice AS fixPrice_2, c0_.hoursWorked AS hoursWorked_3, c0_.pricePerHour AS pricePerHour_4, c0_.maxPrice AS maxPrice_5, c0_.discr AS discr_6, c0_.salesPerson_id AS salesPerson_id_7 FROM company_contracts c0_ WHERE c0_.discr IN ('fix', 'flexible', 'flexultra')", + 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."fixPrice" AS fixPrice_2, c0_."hoursWorked" AS hoursWorked_3, c0_."pricePerHour" AS pricePerHour_4, c0_."maxPrice" AS maxPrice_5, c0_."discr" AS discr_6, c0_."salesPerson_id" AS salesPerson_id_7 FROM "company_contracts" c0_ WHERE c0_."discr" IN (\'fix\', \'flexible\', \'flexultra\')', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] ); } @@ -1520,9 +1535,9 @@ public function testInheritanceTypeSingleTableInRootClassWithDisabledForcePartia */ public function testInheritanceTypeSingleTableInRootClassWithEnabledForcePartialLoad() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c', - "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.fixPrice AS fixPrice_2, c0_.hoursWorked AS hoursWorked_3, c0_.pricePerHour AS pricePerHour_4, c0_.maxPrice AS maxPrice_5, c0_.discr AS discr_6 FROM company_contracts c0_ WHERE c0_.discr IN ('fix', 'flexible', 'flexultra')", + 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."fixPrice" AS fixPrice_2, c0_."hoursWorked" AS hoursWorked_3, c0_."pricePerHour" AS pricePerHour_4, c0_."maxPrice" AS maxPrice_5, c0_."discr" AS discr_6 FROM "company_contracts" c0_ WHERE c0_."discr" IN (\'fix\', \'flexible\', \'flexultra\')', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] ); } @@ -1532,9 +1547,9 @@ public function testInheritanceTypeSingleTableInRootClassWithEnabledForcePartial */ public function testInheritanceTypeSingleTableInChildClassWithDisabledForcePartialLoad() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT fc FROM Doctrine\Tests\Models\Company\CompanyFlexContract fc', - "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.hoursWorked AS hoursWorked_2, c0_.pricePerHour AS pricePerHour_3, c0_.maxPrice AS maxPrice_4, c0_.discr AS discr_5, c0_.salesPerson_id AS salesPerson_id_6 FROM company_contracts c0_ WHERE c0_.discr IN ('flexible', 'flexultra')", + 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."hoursWorked" AS hoursWorked_2, c0_."pricePerHour" AS pricePerHour_3, c0_."maxPrice" AS maxPrice_4, c0_."discr" AS discr_5, c0_."salesPerson_id" AS salesPerson_id_6 FROM "company_contracts" c0_ WHERE c0_."discr" IN (\'flexible\', \'flexultra\')', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] ); } @@ -1544,9 +1559,9 @@ public function testInheritanceTypeSingleTableInChildClassWithDisabledForceParti */ public function testInheritanceTypeSingleTableInChildClassWithEnabledForcePartialLoad() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT fc FROM Doctrine\Tests\Models\Company\CompanyFlexContract fc', - "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.hoursWorked AS hoursWorked_2, c0_.pricePerHour AS pricePerHour_3, c0_.maxPrice AS maxPrice_4, c0_.discr AS discr_5 FROM company_contracts c0_ WHERE c0_.discr IN ('flexible', 'flexultra')", + 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."hoursWorked" AS hoursWorked_2, c0_."pricePerHour" AS pricePerHour_3, c0_."maxPrice" AS maxPrice_4, c0_."discr" AS discr_5 FROM "company_contracts" c0_ WHERE c0_."discr" IN (\'flexible\', \'flexultra\')', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] ); } @@ -1556,9 +1571,9 @@ public function testInheritanceTypeSingleTableInChildClassWithEnabledForcePartia */ public function testInheritanceTypeSingleTableInLeafClassWithDisabledForcePartialLoad() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT fuc FROM Doctrine\Tests\Models\Company\CompanyFlexUltraContract fuc', - "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.hoursWorked AS hoursWorked_2, c0_.pricePerHour AS pricePerHour_3, c0_.maxPrice AS maxPrice_4, c0_.discr AS discr_5, c0_.salesPerson_id AS salesPerson_id_6 FROM company_contracts c0_ WHERE c0_.discr IN ('flexultra')", + 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."hoursWorked" AS hoursWorked_2, c0_."pricePerHour" AS pricePerHour_3, c0_."maxPrice" AS maxPrice_4, c0_."discr" AS discr_5, c0_."salesPerson_id" AS salesPerson_id_6 FROM "company_contracts" c0_ WHERE c0_."discr" IN (\'flexultra\')', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] ); } @@ -1568,9 +1583,9 @@ public function testInheritanceTypeSingleTableInLeafClassWithDisabledForcePartia */ public function testInheritanceTypeSingleTableInLeafClassWithEnabledForcePartialLoad() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT fuc FROM Doctrine\Tests\Models\Company\CompanyFlexUltraContract fuc', - "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.hoursWorked AS hoursWorked_2, c0_.pricePerHour AS pricePerHour_3, c0_.maxPrice AS maxPrice_4, c0_.discr AS discr_5 FROM company_contracts c0_ WHERE c0_.discr IN ('flexultra')", + 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."hoursWorked" AS hoursWorked_2, c0_."pricePerHour" AS pricePerHour_3, c0_."maxPrice" AS maxPrice_4, c0_."discr" AS discr_5 FROM "company_contracts" c0_ WHERE c0_."discr" IN (\'flexultra\')', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] ); } @@ -1580,9 +1595,9 @@ public function testInheritanceTypeSingleTableInLeafClassWithEnabledForcePartial */ public function testSelfReferenceWithOneToOneDoesNotDuplicateAlias() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT p, pp FROM Doctrine\Tests\Models\Company\CompanyPerson p JOIN p.spouse pp', - "SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.title AS title_2, c2_.salary AS salary_3, c2_.department AS department_4, c2_.startDate AS startDate_5, c3_.id AS id_6, c3_.name AS name_7, c4_.title AS title_8, c5_.salary AS salary_9, c5_.department AS department_10, c5_.startDate AS startDate_11, c0_.discr AS discr_12, c0_.spouse_id AS spouse_id_13, c1_.car_id AS car_id_14, c3_.discr AS discr_15, c3_.spouse_id AS spouse_id_16, c4_.car_id AS car_id_17 FROM company_persons c0_ LEFT JOIN company_managers c1_ ON c0_.id = c1_.id LEFT JOIN company_employees c2_ ON c0_.id = c2_.id INNER JOIN company_persons c3_ ON c0_.spouse_id = c3_.id LEFT JOIN company_managers c4_ ON c3_.id = c4_.id LEFT JOIN company_employees c5_ ON c3_.id = c5_.id", + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."title" AS title_2, c2_."salary" AS salary_3, c2_."department" AS department_4, c2_."startDate" AS startDate_5, c3_."id" AS id_6, c3_."name" AS name_7, c4_."title" AS title_8, c5_."salary" AS salary_9, c5_."department" AS department_10, c5_."startDate" AS startDate_11, c0_."discr" AS discr_12, c0_."spouse_id" AS spouse_id_13, c1_."car_id" AS car_id_14, c3_."discr" AS discr_15, c3_."spouse_id" AS spouse_id_16, c4_."car_id" AS car_id_17 FROM "company_persons" c0_ LEFT JOIN "company_managers" c1_ ON c0_."id" = c1_."id" LEFT JOIN "company_employees" c2_ ON c0_."id" = c2_."id" INNER JOIN "company_persons" c3_ ON c0_."spouse_id" = c3_."id" LEFT JOIN "company_managers" c4_ ON c3_."id" = c4_."id" LEFT JOIN "company_employees" c5_ ON c3_."id" = c5_."id"', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] ); } @@ -1592,9 +1607,9 @@ public function testSelfReferenceWithOneToOneDoesNotDuplicateAlias() */ public function testAliasDoesNotExceedPlatformDefinedLength() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT m FROM ' . __NAMESPACE__ . '\\DDC1384Model m', - "SELECT d0_.aVeryLongIdentifierThatShouldBeShortenedByTheSQLWalker_fooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo AS ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo_0 FROM DDC1384Model d0_" + 'SELECT d0_."aVeryLongIdentifierThatShouldBeShortenedByTheSQLWalker_fooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo" AS ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo_0 FROM "DDC1384Model" d0_' ); } @@ -1604,9 +1619,9 @@ public function testAliasDoesNotExceedPlatformDefinedLength() */ public function testIssue331() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT e.name FROM Doctrine\Tests\Models\Company\CompanyEmployee e', - 'SELECT c0_.name AS name_0 FROM company_employees c1_ INNER JOIN company_persons c0_ ON c1_.id = c0_.id' + 'SELECT c0_."name" AS name_0 FROM "company_employees" c1_ INNER JOIN "company_persons" c0_ ON c1_."id" = c0_."id"' ); } /** @@ -1614,9 +1629,9 @@ public function testIssue331() */ public function testForeignKeyAsPrimaryKeySubselect() { - self::assertSqlGeneration( - "SELECT s FROM Doctrine\Tests\Models\DDC117\DDC117Article s WHERE EXISTS (SELECT r FROM Doctrine\Tests\Models\DDC117\DDC117Reference r WHERE r.source = s)", - "SELECT d0_.article_id AS article_id_0, d0_.title AS title_1 FROM DDC117Article d0_ WHERE EXISTS (SELECT d1_.source_id, d1_.target_id FROM DDC117Reference d1_ WHERE d1_.source_id = d0_.article_id)" + $this->assertSqlGeneration( + 'SELECT s FROM Doctrine\Tests\Models\DDC117\DDC117Article s WHERE EXISTS (SELECT r FROM Doctrine\Tests\Models\DDC117\DDC117Reference r WHERE r.source = s)', + 'SELECT d0_."article_id" AS article_id_0, d0_."title" AS title_1 FROM "DDC117Article" d0_ WHERE EXISTS (SELECT d1_."source_id", d1_."target_id" FROM "DDC117Reference" d1_ WHERE d1_."source_id" = d0_."article_id")' ); } @@ -1625,14 +1640,14 @@ public function testForeignKeyAsPrimaryKeySubselect() */ public function testSelectWithArithmeticExpressionBeforeField() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT - e.value AS value, e.id FROM ' . __NAMESPACE__ . '\DDC1474Entity e', - 'SELECT -d0_.value AS sclr_0, d0_.id AS id_1 FROM DDC1474Entity d0_' + 'SELECT -d0_."value" AS sclr_0, d0_."id" AS id_1 FROM "DDC1474Entity" d0_' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT e.id, + e.value AS value FROM ' . __NAMESPACE__ . '\DDC1474Entity e', - 'SELECT d0_.id AS id_0, +d0_.value AS sclr_1 FROM DDC1474Entity d0_' + 'SELECT d0_."id" AS id_0, +d0_."value" AS sclr_1 FROM "DDC1474Entity" d0_' ); } @@ -1641,14 +1656,14 @@ public function testSelectWithArithmeticExpressionBeforeField() */ public function testGroupByAllFieldsWhenObjectHasForeignKeys() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY u', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ GROUP BY c0_.id, c0_.status, c0_.username, c0_.name, c0_.email_id' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ GROUP BY c0_."id", c0_."status", c0_."username", c0_."name", c0_."email_id"' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\CMS\CmsEmployee e GROUP BY e', - 'SELECT c0_.id AS id_0, c0_.name AS name_1 FROM cms_employees c0_ GROUP BY c0_.id, c0_.name, c0_.spouse_id' + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1 FROM "cms_employees" c0_ GROUP BY c0_."id", c0_."name", c0_."spouse_id"' ); } @@ -1657,9 +1672,9 @@ public function testGroupByAllFieldsWhenObjectHasForeignKeys() */ public function testGroupBySupportsResultVariable() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u, u.status AS st FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY st', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, c0_.status AS status_4 FROM cms_users c0_ GROUP BY c0_.status' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c0_."status" AS status_4 FROM "cms_users" c0_ GROUP BY c0_."status"' ); } @@ -1668,9 +1683,9 @@ public function testGroupBySupportsResultVariable() */ public function testGroupBySupportsIdentificationVariable() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u AS user FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY user', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ GROUP BY id_0, status_1, username_2, name_3' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ GROUP BY id_0, status_1, username_2, name_3' ); } @@ -1679,21 +1694,21 @@ public function testGroupBySupportsIdentificationVariable() */ public function testSupportsBitComparison() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT BIT_OR(4,2), BIT_AND(4,2), u FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT (4 | 2) AS sclr_0, (4 & 2) AS sclr_1, c0_.id AS id_2, c0_.status AS status_3, c0_.username AS username_4, c0_.name AS name_5 FROM cms_users c0_' + 'SELECT (4 | 2) AS sclr_0, (4 & 2) AS sclr_1, c0_."id" AS id_2, c0_."status" AS status_3, c0_."username" AS username_4, c0_."name" AS name_5 FROM "cms_users" c0_' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT BIT_OR(u.id,2), BIT_AND(u.id,2) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE BIT_OR(u.id,2) > 0', - 'SELECT (c0_.id | 2) AS sclr_0, (c0_.id & 2) AS sclr_1 FROM cms_users c0_ WHERE (c0_.id | 2) > 0' + 'SELECT (c0_."id" | 2) AS sclr_0, (c0_."id" & 2) AS sclr_1 FROM "cms_users" c0_ WHERE (c0_."id" | 2) > 0' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT BIT_OR(u.id,2), BIT_AND(u.id,2) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE BIT_AND(u.id , 4) > 0', - 'SELECT (c0_.id | 2) AS sclr_0, (c0_.id & 2) AS sclr_1 FROM cms_users c0_ WHERE (c0_.id & 4) > 0' + 'SELECT (c0_."id" | 2) AS sclr_0, (c0_."id" & 2) AS sclr_1 FROM "cms_users" c0_ WHERE (c0_."id" & 4) > 0' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT BIT_OR(u.id,2), BIT_AND(u.id,2) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE BIT_OR(u.id , 2) > 0 OR BIT_AND(u.id , 4) > 0', - 'SELECT (c0_.id | 2) AS sclr_0, (c0_.id & 2) AS sclr_1 FROM cms_users c0_ WHERE (c0_.id | 2) > 0 OR (c0_.id & 4) > 0' + 'SELECT (c0_."id" | 2) AS sclr_0, (c0_."id" & 2) AS sclr_1 FROM "cms_users" c0_ WHERE (c0_."id" | 2) > 0 OR (c0_."id" & 4) > 0' ); } @@ -1702,24 +1717,24 @@ public function testSupportsBitComparison() */ public function testParenthesesOnTheLeftHandOfComparison() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u where ( (u.id + u.id) * u.id ) > 100', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE ((c0_.id + c0_.id) * c0_.id) > 100' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE ((c0_."id" + c0_."id") * c0_."id") > 100' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u where (u.id + u.id) * u.id > 100', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE (c0_.id + c0_.id) * c0_.id > 100' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE (c0_."id" + c0_."id") * c0_."id" > 100' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u where 100 < (u.id + u.id) * u.id ', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE 100 < (c0_.id + c0_.id) * c0_.id' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE 100 < (c0_."id" + c0_."id") * c0_."id"' ); } public function testSupportsParenthesisExpressionInSubSelect() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u.id, (SELECT (1000*SUM(subU.id)/SUM(subU.id)) FROM Doctrine\Tests\Models\CMS\CmsUser subU where subU.id = u.id) AS subSelect FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT c0_.id AS id_0, (SELECT (1000 * SUM(c1_.id) / SUM(c1_.id)) FROM cms_users c1_ WHERE c1_.id = c0_.id) AS sclr_1 FROM cms_users c0_' + 'SELECT c0_."id" AS id_0, (SELECT (1000 * SUM(c1_."id") / SUM(c1_."id")) FROM "cms_users" c1_ WHERE c1_."id" = c0_."id") AS sclr_1 FROM "cms_users" c0_' ); } @@ -1728,29 +1743,29 @@ public function testSupportsParenthesisExpressionInSubSelect() { */ public function testSupportsSubSqlFunction() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u1 FROM Doctrine\Tests\Models\CMS\CmsUser u1 WHERE u1.name IN ( SELECT TRIM(u2.name) FROM Doctrine\Tests\Models\CMS\CmsUser u2 )', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE c0_.name IN (SELECT TRIM(c1_.name) AS sclr_4 FROM cms_users c1_)' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."name" IN (SELECT TRIM(c1_."name") AS sclr_4 FROM "cms_users" c1_)' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u1 FROM Doctrine\Tests\Models\CMS\CmsUser u1 WHERE u1.name IN ( SELECT TRIM(u2.name) FROM Doctrine\Tests\Models\CMS\CmsUser u2 WHERE LOWER(u2.name) LIKE \'%fabio%\')', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE c0_.name IN (SELECT TRIM(c1_.name) AS sclr_4 FROM cms_users c1_ WHERE LOWER(c1_.name) LIKE \'%fabio%\')' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."name" IN (SELECT TRIM(c1_."name") AS sclr_4 FROM "cms_users" c1_ WHERE LOWER(c1_."name") LIKE \'%fabio%\')' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u1 FROM Doctrine\Tests\Models\CMS\CmsUser u1 WHERE u1.email IN ( SELECT TRIM(IDENTITY(u2.email)) FROM Doctrine\Tests\Models\CMS\CmsUser u2 )', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE c0_.email_id IN (SELECT TRIM(c1_.email_id) AS sclr_4 FROM cms_users c1_)' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."email_id" IN (SELECT TRIM(c1_."email_id") AS sclr_4 FROM "cms_users" c1_)' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u1 FROM Doctrine\Tests\Models\CMS\CmsUser u1 WHERE u1.email IN ( SELECT IDENTITY(u2.email) FROM Doctrine\Tests\Models\CMS\CmsUser u2 )', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE c0_.email_id IN (SELECT c1_.email_id AS sclr_4 FROM cms_users c1_)' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."email_id" IN (SELECT c1_."email_id" AS sclr_4 FROM "cms_users" c1_)' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u1 FROM Doctrine\Tests\Models\CMS\CmsUser u1 WHERE COUNT(u1.id) = ( SELECT SUM(u2.id) FROM Doctrine\Tests\Models\CMS\CmsUser u2 )', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE COUNT(c0_.id) = (SELECT SUM(c1_.id) AS sclr_4 FROM cms_users c1_)' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE COUNT(c0_."id") = (SELECT SUM(c1_."id") AS dctrn__1 FROM "cms_users" c1_)' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u1 FROM Doctrine\Tests\Models\CMS\CmsUser u1 WHERE COUNT(u1.id) <= ( SELECT SUM(u2.id) + COUNT(u2.email) FROM Doctrine\Tests\Models\CMS\CmsUser u2 )', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE COUNT(c0_.id) <= (SELECT SUM(c1_.id) + COUNT(c1_.email_id) AS sclr_4 FROM cms_users c1_)' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE COUNT(c0_."id") <= (SELECT SUM(c1_."id") + COUNT(c1_."email_id") AS sclr_4 FROM "cms_users" c1_)' ); } @@ -1759,34 +1774,34 @@ public function testSupportsSubSqlFunction() */ public function testSupportsNewOperator() { - self::assertSqlGeneration( - "SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(u.name, e.email, a.city) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a", - "SELECT c0_.name AS sclr_0, c1_.email AS sclr_1, c2_.city AS sclr_2 FROM cms_users c0_ INNER JOIN cms_emails c1_ ON c0_.email_id = c1_.id INNER JOIN cms_addresses c2_ ON c0_.id = c2_.user_id" + $this->assertSqlGeneration( + 'SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(u.name, e.email, a.city) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a', + 'SELECT c0_."name" AS sclr_0, c1_."email" AS sclr_1, c2_."city" AS sclr_2 FROM "cms_users" c0_ INNER JOIN "cms_emails" c1_ ON c0_."email_id" = c1_."id" INNER JOIN "cms_addresses" c2_ ON c0_."id" = c2_."user_id"' ); - self::assertSqlGeneration( - "SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(u.name, e.email, a.id + u.id) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a", - "SELECT c0_.name AS sclr_0, c1_.email AS sclr_1, c2_.id + c0_.id AS sclr_2 FROM cms_users c0_ INNER JOIN cms_emails c1_ ON c0_.email_id = c1_.id INNER JOIN cms_addresses c2_ ON c0_.id = c2_.user_id" + $this->assertSqlGeneration( + 'SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(u.name, e.email, a.id + u.id) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a', + 'SELECT c0_."name" AS sclr_0, c1_."email" AS sclr_1, c2_."id" + c0_."id" AS sclr_2 FROM "cms_users" c0_ INNER JOIN "cms_emails" c1_ ON c0_."email_id" = c1_."id" INNER JOIN "cms_addresses" c2_ ON c0_."id" = c2_."user_id"' ); - self::assertSqlGeneration( - "SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(u.name, e.email, a.city, COUNT(p)) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a JOIN u.phonenumbers p", - "SELECT c0_.name AS sclr_0, c1_.email AS sclr_1, c2_.city AS sclr_2, COUNT(c3_.phonenumber) AS sclr_3 FROM cms_users c0_ INNER JOIN cms_emails c1_ ON c0_.email_id = c1_.id INNER JOIN cms_addresses c2_ ON c0_.id = c2_.user_id INNER JOIN cms_phonenumbers c3_ ON c0_.id = c3_.user_id" + $this->assertSqlGeneration( + 'SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(u.name, e.email, a.city, COUNT(p)) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a JOIN u.phonenumbers p', + 'SELECT c0_."name" AS sclr_0, c1_."email" AS sclr_1, c2_."city" AS sclr_2, COUNT(c3_."phonenumber") AS sclr_3 FROM "cms_users" c0_ INNER JOIN "cms_emails" c1_ ON c0_."email_id" = c1_."id" INNER JOIN "cms_addresses" c2_ ON c0_."id" = c2_."user_id" INNER JOIN "cms_phonenumbers" c3_ ON c0_."id" = c3_."user_id"' ); - self::assertSqlGeneration( - "SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(u.name, e.email, a.city, COUNT(p) + u.id) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a JOIN u.phonenumbers p", - "SELECT c0_.name AS sclr_0, c1_.email AS sclr_1, c2_.city AS sclr_2, COUNT(c3_.phonenumber) + c0_.id AS sclr_3 FROM cms_users c0_ INNER JOIN cms_emails c1_ ON c0_.email_id = c1_.id INNER JOIN cms_addresses c2_ ON c0_.id = c2_.user_id INNER JOIN cms_phonenumbers c3_ ON c0_.id = c3_.user_id" + $this->assertSqlGeneration( + 'SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(u.name, e.email, a.city, COUNT(p) + u.id) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a JOIN u.phonenumbers p', + 'SELECT c0_."name" AS sclr_0, c1_."email" AS sclr_1, c2_."city" AS sclr_2, COUNT(c3_."phonenumber") + c0_."id" AS sclr_3 FROM "cms_users" c0_ INNER JOIN "cms_emails" c1_ ON c0_."email_id" = c1_."id" INNER JOIN "cms_addresses" c2_ ON c0_."id" = c2_."user_id" INNER JOIN "cms_phonenumbers" c3_ ON c0_."id" = c3_."user_id"' ); - self::assertSqlGeneration( - "SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(a.id, a.country, a.city), new Doctrine\Tests\Models\CMS\CmsAddressDTO(u.name, e.email) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a ORDER BY u.name", - "SELECT c0_.id AS sclr_0, c0_.country AS sclr_1, c0_.city AS sclr_2, c1_.name AS sclr_3, c2_.email AS sclr_4 FROM cms_users c1_ INNER JOIN cms_emails c2_ ON c1_.email_id = c2_.id INNER JOIN cms_addresses c0_ ON c1_.id = c0_.user_id ORDER BY c1_.name ASC" + $this->assertSqlGeneration( + 'SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(a.id, a.country, a.city), new Doctrine\Tests\Models\CMS\CmsAddressDTO(u.name, e.email) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a ORDER BY u.name', + 'SELECT c0_."id" AS sclr_0, c0_."country" AS sclr_1, c0_."city" AS sclr_2, c1_."name" AS sclr_3, c2_."email" AS sclr_4 FROM "cms_users" c1_ INNER JOIN "cms_emails" c2_ ON c1_."email_id" = c2_."id" INNER JOIN "cms_addresses" c0_ ON c1_."id" = c0_."user_id" ORDER BY c1_."name" ASC' ); - self::assertSqlGeneration( - "SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(a.id, (SELECT 1 FROM Doctrine\Tests\Models\CMS\CmsUser su), a.country, a.city), new Doctrine\Tests\Models\CMS\CmsAddressDTO(u.name, e.email) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a ORDER BY u.name", - "SELECT c0_.id AS sclr_0, (SELECT 1 AS sclr_2 FROM cms_users c1_) AS sclr_1, c0_.country AS sclr_3, c0_.city AS sclr_4, c2_.name AS sclr_5, c3_.email AS sclr_6 FROM cms_users c2_ INNER JOIN cms_emails c3_ ON c2_.email_id = c3_.id INNER JOIN cms_addresses c0_ ON c2_.id = c0_.user_id ORDER BY c2_.name ASC" + $this->assertSqlGeneration( + 'SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(a.id, (SELECT 1 FROM Doctrine\Tests\Models\CMS\CmsUser su), a.country, a.city), new Doctrine\Tests\Models\CMS\CmsAddressDTO(u.name, e.email) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a ORDER BY u.name', + 'SELECT c0_."id" AS sclr_0, (SELECT 1 AS sclr_2 FROM "cms_users" c1_) AS sclr_1, c0_."country" AS sclr_3, c0_."city" AS sclr_4, c2_."name" AS sclr_5, c3_."email" AS sclr_6 FROM "cms_users" c2_ INNER JOIN "cms_emails" c3_ ON c2_."email_id" = c3_."id" INNER JOIN "cms_addresses" c0_ ON c2_."id" = c0_."user_id" ORDER BY c2_."name" ASC' ); } @@ -1795,39 +1810,39 @@ public function testSupportsNewOperator() */ public function testWhereFunctionIsNullComparisonExpression() { - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE IDENTITY(u.email) IS NULL", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE c0_.email_id IS NULL" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE IDENTITY(u.email) IS NULL', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."email_id" IS NULL' ); - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE NULLIF(u.name, 'FabioBatSilva') IS NULL AND IDENTITY(u.email) IS NOT NULL", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE NULLIF(c0_.name, 'FabioBatSilva') IS NULL AND c0_.email_id IS NOT NULL" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE NULLIF(u.name, \'FabioBatSilva\') IS NULL AND IDENTITY(u.email) IS NOT NULL', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE NULLIF(c0_."name", \'FabioBatSilva\') IS NULL AND c0_."email_id" IS NOT NULL' ); - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE IDENTITY(u.email) IS NOT NULL", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE c0_.email_id IS NOT NULL" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE IDENTITY(u.email) IS NOT NULL', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."email_id" IS NOT NULL' ); - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE NULLIF(u.name, 'FabioBatSilva') IS NOT NULL", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE NULLIF(c0_.name, 'FabioBatSilva') IS NOT NULL" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE NULLIF(u.name, \'FabioBatSilva\') IS NOT NULL', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE NULLIF(c0_."name", \'FabioBatSilva\') IS NOT NULL' ); - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE COALESCE(u.name, u.id) IS NOT NULL", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE COALESCE(c0_.name, c0_.id) IS NOT NULL" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE COALESCE(u.name, u.id) IS NOT NULL', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE COALESCE(c0_."name", c0_."id") IS NOT NULL' ); - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE COALESCE(u.id, IDENTITY(u.email)) IS NOT NULL", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE COALESCE(c0_.id, c0_.email_id) IS NOT NULL" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE COALESCE(u.id, IDENTITY(u.email)) IS NOT NULL', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE COALESCE(c0_."id", c0_."email_id") IS NOT NULL' ); - self::assertSqlGeneration( - "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE COALESCE(IDENTITY(u.email), NULLIF(u.name, 'FabioBatSilva')) IS NOT NULL", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ WHERE COALESCE(c0_.email_id, NULLIF(c0_.name, 'FabioBatSilva')) IS NOT NULL" + $this->assertSqlGeneration( + 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE COALESCE(IDENTITY(u.email), NULLIF(u.name, \'FabioBatSilva\')) IS NOT NULL', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE COALESCE(c0_."email_id", NULLIF(c0_."name", \'FabioBatSilva\')) IS NOT NULL' ); } @@ -1839,9 +1854,9 @@ public function testCustomTypeValueSql() DBALType::addType('negative_to_positive', NegativeToPositiveType::class); } - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT p.customInteger FROM Doctrine\Tests\Models\CustomType\CustomTypeParent p WHERE p.id = 1', - 'SELECT -(c0_.customInteger) AS customInteger_0 FROM customtype_parents c0_ WHERE c0_.id = 1' + 'SELECT -(c0_."customInteger") AS customInteger_0 FROM "customtype_parents" c0_ WHERE c0_."id" = 1' ); } @@ -1853,9 +1868,9 @@ public function testCustomTypeValueSqlIgnoresIdentifierColumn() DBALType::addType('negative_to_positive', NegativeToPositiveType::class); } - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT p.id FROM Doctrine\Tests\Models\CustomType\CustomTypeParent p WHERE p.id = 1', - 'SELECT c0_.id AS id_0 FROM customtype_parents c0_ WHERE c0_.id = 1' + 'SELECT c0_."id" AS id_0 FROM "customtype_parents" c0_ WHERE c0_."id" = 1' ); } @@ -1867,9 +1882,9 @@ public function testCustomTypeValueSqlForAllFields() DBALType::addType('negative_to_positive', NegativeToPositiveType::class); } - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT p FROM Doctrine\Tests\Models\CustomType\CustomTypeParent p', - 'SELECT c0_.id AS id_0, -(c0_.customInteger) AS customInteger_1 FROM customtype_parents c0_' + 'SELECT c0_."id" AS id_0, -(c0_."customInteger") AS customInteger_1 FROM "customtype_parents" c0_' ); } @@ -1881,9 +1896,9 @@ public function testCustomTypeValueSqlForPartialObject() DBALType::addType('negative_to_positive', NegativeToPositiveType::class); } - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT partial p.{id, customInteger} FROM Doctrine\Tests\Models\CustomType\CustomTypeParent p', - 'SELECT c0_.id AS id_0, -(c0_.customInteger) AS customInteger_1 FROM customtype_parents c0_' + 'SELECT c0_."id" AS id_0, -(c0_."customInteger") AS customInteger_1 FROM "customtype_parents" c0_' ); } @@ -1892,9 +1907,9 @@ public function testCustomTypeValueSqlForPartialObject() */ public function testMultipleFromAndInheritanceCondition() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT fix, flex FROM Doctrine\Tests\Models\Company\CompanyFixContract fix, Doctrine\Tests\Models\Company\CompanyFlexContract flex', - "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.fixPrice AS fixPrice_2, c1_.id AS id_3, c1_.completed AS completed_4, c1_.hoursWorked AS hoursWorked_5, c1_.pricePerHour AS pricePerHour_6, c1_.maxPrice AS maxPrice_7, c0_.discr AS discr_8, c1_.discr AS discr_9 FROM company_contracts c0_, company_contracts c1_ WHERE (c0_.discr IN ('fix') AND c1_.discr IN ('flexible', 'flexultra'))" + 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."fixPrice" AS fixPrice_2, c1_."id" AS id_3, c1_."completed" AS completed_4, c1_."hoursWorked" AS hoursWorked_5, c1_."pricePerHour" AS pricePerHour_6, c1_."maxPrice" AS maxPrice_7, c0_."discr" AS discr_8, c1_."discr" AS discr_9 FROM "company_contracts" c0_, "company_contracts" c1_ WHERE (c0_."discr" IN (\'fix\') AND c1_."discr" IN (\'flexible\', \'flexultra\'))' ); } @@ -1903,25 +1918,25 @@ public function testMultipleFromAndInheritanceCondition() */ public function testOrderByClauseSupportsSimpleArithmeticExpression() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY u.id + 1 ', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ ORDER BY c0_.id + 1 ASC' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ ORDER BY c0_."id" + 1 ASC' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY ( ( (u.id + 1) * (u.id - 1) ) / 2)', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ ORDER BY (((c0_.id + 1) * (c0_.id - 1)) / 2) ASC' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ ORDER BY (((c0_."id" + 1) * (c0_."id" - 1)) / 2) ASC' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY ((u.id + 5000) * u.id + 3) ', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ ORDER BY ((c0_.id + 5000) * c0_.id + 3) ASC' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ ORDER BY ((c0_."id" + 5000) * c0_."id" + 3) ASC' ); } public function testOrderByClauseSupportsFunction() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY CONCAT(u.username, u.name) ', - 'SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3 FROM cms_users c0_ ORDER BY c0_.username || c0_.name ASC' + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ ORDER BY c0_."username" || c0_."name" ASC' ); } @@ -1930,17 +1945,17 @@ public function testOrderByClauseSupportsFunction() */ public function testStripNonAlphanumericCharactersFromAlias() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\Generic\NonAlphaColumnsEntity e', 'SELECT n0_."simple-entity-id" AS simpleentityid_0, n0_."simple-entity-value" AS simpleentityvalue_1 FROM "not-a-simple-entity" n0_' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT e.value FROM Doctrine\Tests\Models\Generic\NonAlphaColumnsEntity e ORDER BY e.value', 'SELECT n0_."simple-entity-value" AS simpleentityvalue_0 FROM "not-a-simple-entity" n0_ ORDER BY n0_."simple-entity-value" ASC' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT TRIM(e.value) FROM Doctrine\Tests\Models\Generic\NonAlphaColumnsEntity e ORDER BY e.value', 'SELECT TRIM(n0_."simple-entity-value") AS sclr_0 FROM "not-a-simple-entity" n0_ ORDER BY n0_."simple-entity-value" ASC' ); @@ -1951,19 +1966,19 @@ public function testStripNonAlphanumericCharactersFromAlias() */ public function testColumnNameWithNumbersAndNonAlphanumericCharacters() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\Quote\NumericEntity e', - 'SELECT t0_."1:1" AS 11_0, t0_."2:2" AS 22_1 FROM table t0_' + 'SELECT t0_."1:1" AS 11_0, t0_."2:2" AS 22_1 FROM "table" t0_' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT e.value FROM Doctrine\Tests\Models\Quote\NumericEntity e', - 'SELECT t0_."2:2" AS 22_0 FROM table t0_' + 'SELECT t0_."2:2" AS 22_0 FROM "table" t0_' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT TRIM(e.value) FROM Doctrine\Tests\Models\Quote\NumericEntity e', - 'SELECT TRIM(t0_."2:2") AS sclr_0 FROM table t0_' + 'SELECT TRIM(t0_."2:2") AS sclr_0 FROM "table" t0_' ); } @@ -1972,7 +1987,7 @@ public function testColumnNameWithNumbersAndNonAlphanumericCharacters() */ public function testQuotedTableDeclaration() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Quote\User u', 'SELECT q0_."user-id" AS userid_0, q0_."user-name" AS username_1 FROM "quote-user" q0_' ); @@ -1983,32 +1998,32 @@ public function testQuotedTableDeclaration() */ public function testQuotedWalkJoinVariableDeclaration() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u, a FROM Doctrine\Tests\Models\Quote\User u JOIN u.address a', 'SELECT q0_."user-id" AS userid_0, q0_."user-name" AS username_1, q1_."address-id" AS addressid_2, q1_."address-zip" AS addresszip_3, q1_.type AS type_4 FROM "quote-user" q0_ INNER JOIN "quote-address" q1_ ON q0_."address-id" = q1_."address-id" AND q1_.type IN (\'simple\', \'full\')' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u, p FROM Doctrine\Tests\Models\Quote\User u JOIN u.phones p', 'SELECT q0_."user-id" AS userid_0, q0_."user-name" AS username_1, q1_."phone-number" AS phonenumber_2 FROM "quote-user" q0_ INNER JOIN "quote-phone" q1_ ON q0_."user-id" = q1_."user-id"' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u, g FROM Doctrine\Tests\Models\Quote\User u JOIN u.groups g', 'SELECT q0_."user-id" AS userid_0, q0_."user-name" AS username_1, q1_."group-id" AS groupid_2, q1_."group-name" AS groupname_3 FROM "quote-user" q0_ INNER JOIN "quote-users-groups" q2_ ON q0_."user-id" = q2_."user-id" INNER JOIN "quote-group" q1_ ON q1_."group-id" = q2_."group-id"' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT a, u FROM Doctrine\Tests\Models\Quote\Address a JOIN a.user u', 'SELECT q0_."address-id" AS addressid_0, q0_."address-zip" AS addresszip_1, q1_."user-id" AS userid_2, q1_."user-name" AS username_3, q0_.type AS type_4 FROM "quote-address" q0_ INNER JOIN "quote-user" q1_ ON q0_."user-id" = q1_."user-id" WHERE q0_.type IN (\'simple\', \'full\')' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT g, u FROM Doctrine\Tests\Models\Quote\Group g JOIN g.users u', 'SELECT q0_."group-id" AS groupid_0, q0_."group-name" AS groupname_1, q1_."user-id" AS userid_2, q1_."user-name" AS username_3 FROM "quote-group" q0_ INNER JOIN "quote-users-groups" q2_ ON q0_."group-id" = q2_."group-id" INNER JOIN "quote-user" q1_ ON q1_."user-id" = q2_."user-id"' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT g, p FROM Doctrine\Tests\Models\Quote\Group g JOIN g.parent p', 'SELECT q0_."group-id" AS groupid_0, q0_."group-name" AS groupname_1, q1_."group-id" AS groupid_2, q1_."group-name" AS groupname_3 FROM "quote-group" q0_ INNER JOIN "quote-group" q1_ ON q0_."parent-id" = q1_."group-id"' ); @@ -2019,19 +2034,19 @@ public function testQuotedWalkJoinVariableDeclaration() */ public function testCaseThenParameterArithmeticExpression() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT SUM(CASE WHEN e.salary <= :value THEN e.salary - :value WHEN e.salary >= :value THEN :value - e.salary ELSE 0 END) FROM Doctrine\Tests\Models\Company\CompanyEmployee e', - 'SELECT SUM(CASE WHEN c0_.salary <= ? THEN c0_.salary - ? WHEN c0_.salary >= ? THEN ? - c0_.salary ELSE 0 END) AS sclr_0 FROM company_employees c0_ INNER JOIN company_persons c1_ ON c0_.id = c1_.id' + 'SELECT SUM(CASE WHEN c0_."salary" <= ? THEN c0_."salary" - ? WHEN c0_."salary" >= ? THEN ? - c0_."salary" ELSE 0 END) AS sclr_0 FROM "company_employees" c0_ INNER JOIN "company_persons" c1_ ON c0_."id" = c1_."id"' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT SUM(CASE WHEN e.salary <= :value THEN e.salary - :value WHEN e.salary >= :value THEN :value - e.salary ELSE e.salary + 0 END) FROM Doctrine\Tests\Models\Company\CompanyEmployee e', - 'SELECT SUM(CASE WHEN c0_.salary <= ? THEN c0_.salary - ? WHEN c0_.salary >= ? THEN ? - c0_.salary ELSE c0_.salary + 0 END) AS sclr_0 FROM company_employees c0_ INNER JOIN company_persons c1_ ON c0_.id = c1_.id' + 'SELECT SUM(CASE WHEN c0_."salary" <= ? THEN c0_."salary" - ? WHEN c0_."salary" >= ? THEN ? - c0_."salary" ELSE c0_."salary" + 0 END) AS sclr_0 FROM "company_employees" c0_ INNER JOIN "company_persons" c1_ ON c0_."id" = c1_."id"' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT SUM(CASE WHEN e.salary <= :value THEN (e.salary - :value) WHEN e.salary >= :value THEN (:value - e.salary) ELSE (e.salary + :value) END) FROM Doctrine\Tests\Models\Company\CompanyEmployee e', - 'SELECT SUM(CASE WHEN c0_.salary <= ? THEN (c0_.salary - ?) WHEN c0_.salary >= ? THEN (? - c0_.salary) ELSE (c0_.salary + ?) END) AS sclr_0 FROM company_employees c0_ INNER JOIN company_persons c1_ ON c0_.id = c1_.id' + 'SELECT SUM(CASE WHEN c0_."salary" <= ? THEN (c0_."salary" - ?) WHEN c0_."salary" >= ? THEN (? - c0_."salary") ELSE (c0_."salary" + ?) END) AS sclr_0 FROM "company_employees" c0_ INNER JOIN "company_persons" c1_ ON c0_."id" = c1_."id"' ); } @@ -2040,61 +2055,74 @@ public function testCaseThenParameterArithmeticExpression() */ public function testCaseThenFunction() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT CASE WHEN LENGTH(u.name) <> 0 THEN CONCAT(u.id, u.name) ELSE u.id END AS name FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT CASE WHEN LENGTH(c0_.name) <> 0 THEN c0_.id || c0_.name ELSE c0_.id END AS sclr_0 FROM cms_users c0_' + 'SELECT CASE WHEN LENGTH(c0_."name") <> 0 THEN c0_."id" || c0_."name" ELSE c0_."id" END AS sclr_0 FROM "cms_users" c0_' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT CASE WHEN LENGTH(u.name) <> LENGTH(TRIM(u.name)) THEN TRIM(u.name) ELSE u.name END AS name FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT CASE WHEN LENGTH(c0_.name) <> LENGTH(TRIM(c0_.name)) THEN TRIM(c0_.name) ELSE c0_.name END AS sclr_0 FROM cms_users c0_' + 'SELECT CASE WHEN LENGTH(c0_."name") <> LENGTH(TRIM(c0_."name")) THEN TRIM(c0_."name") ELSE c0_."name" END AS sclr_0 FROM "cms_users" c0_' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT CASE WHEN LENGTH(u.name) > :value THEN SUBSTRING(u.name, 0, :value) ELSE TRIM(u.name) END AS name FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT CASE WHEN LENGTH(c0_.name) > ? THEN SUBSTRING(c0_.name FROM 0 FOR ?) ELSE TRIM(c0_.name) END AS sclr_0 FROM cms_users c0_' + 'SELECT CASE WHEN LENGTH(c0_."name") > ? THEN SUBSTRING(c0_."name" FROM 0 FOR ?) ELSE TRIM(c0_."name") END AS sclr_0 FROM "cms_users" c0_' ); } /** * @group DDC-2268 */ - public function testSupportsMoreThanTwoParametersInConcatFunction() + public function testSupportsMoreThanTwoParametersInConcatFunctionMySql() { - $connMock = $this->_em->getConnection(); - $orgPlatform = $connMock->getDatabasePlatform(); + $this->_em->getConnection()->setDatabasePlatform(new MySqlPlatform()); - $connMock->setDatabasePlatform(new MySqlPlatform()); - self::assertSqlGeneration( - "SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, u.status, 's') = ?1", - "SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE CONCAT(c0_.name, c0_.status, 's') = ?" - ); - self::assertSqlGeneration( - "SELECT CONCAT(u.id, u.name, u.status) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1", - "SELECT CONCAT(c0_.id, c0_.name, c0_.status) AS sclr_0 FROM cms_users c0_ WHERE c0_.id = ?" - ); + $this->assertSqlGeneration( + 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, u.status, \'s\') = ?1', + 'SELECT c0_.`id` AS id_0 FROM `cms_users` c0_ WHERE CONCAT(c0_.`name`, c0_.`status`, \'s\') = ?' + ); - $connMock->setDatabasePlatform(new PostgreSqlPlatform()); - self::assertSqlGeneration( - "SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, u.status, 's') = ?1", - "SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE c0_.name || c0_.status || 's' = ?" - ); - self::assertSqlGeneration( - "SELECT CONCAT(u.id, u.name, u.status) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1", - "SELECT c0_.id || c0_.name || c0_.status AS sclr_0 FROM cms_users c0_ WHERE c0_.id = ?" - ); + $this->assertSqlGeneration( + 'SELECT CONCAT(u.id, u.name, u.status) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1', + 'SELECT CONCAT(c0_.`id`, c0_.`name`, c0_.`status`) AS sclr_0 FROM `cms_users` c0_ WHERE c0_.`id` = ?' + ); + } - $connMock->setDatabasePlatform(new SQLServerPlatform()); - self::assertSqlGeneration( - "SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, u.status, 's') = ?1", - "SELECT c0_.id AS id_0 FROM cms_users c0_ WHERE (c0_.name + c0_.status + 's') = ?" - ); - self::assertSqlGeneration( - "SELECT CONCAT(u.id, u.name, u.status) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1", - "SELECT (c0_.id + c0_.name + c0_.status) AS sclr_0 FROM cms_users c0_ WHERE c0_.id = ?" + /** + * @group DDC-2268 + */ + public function testSupportsMoreThanTwoParametersInConcatFunctionPgSql() + { + $this->_em->getConnection()->setDatabasePlatform(new PostgreSqlPlatform()); + + $this->assertSqlGeneration( + 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, u.status, \'s\') = ?1', + 'SELECT c0_."id" AS id_0 FROM "cms_users" c0_ WHERE c0_."name" || c0_."status" || \'s\' = ?' + ); + + $this->assertSqlGeneration( + 'SELECT CONCAT(u.id, u.name, u.status) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1', + 'SELECT c0_."id" || c0_."name" || c0_."status" AS sclr_0 FROM "cms_users" c0_ WHERE c0_."id" = ?' + ); + } + + /** + * @group DDC-2268 + */ + public function testSupportsMoreThanTwoParametersInConcatFunctionSqlServer() + { + $this->_em->getConnection()->setDatabasePlatform(new SQLServerPlatform()); + + $this->assertSqlGeneration( + 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, u.status, \'s\') = ?1', + 'SELECT c0_.[id] AS id_0 FROM [cms_users] c0_ WHERE (c0_.[name] + c0_.[status] + \'s\') = ?' ); - $connMock->setDatabasePlatform($orgPlatform); + $this->assertSqlGeneration( + 'SELECT CONCAT(u.id, u.name, u.status) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1', + 'SELECT (c0_.[id] + c0_.[name] + c0_.[status]) AS sclr_0 FROM [cms_users] c0_ WHERE c0_.[id] = ?' + ); } /** @@ -2102,19 +2130,19 @@ public function testSupportsMoreThanTwoParametersInConcatFunction() */ public function testArithmeticPriority() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT 100/(2*2) FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT 100 / (2 * 2) AS sclr_0 FROM cms_users c0_' + 'SELECT 100 / (2 * 2) AS sclr_0 FROM "cms_users" c0_' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT (u.id / (u.id * 2)) FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT (c0_.id / (c0_.id * 2)) AS sclr_0 FROM cms_users c0_' + 'SELECT (c0_."id" / (c0_."id" * 2)) AS sclr_0 FROM "cms_users" c0_' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT 100/(2*2) + (u.id / (u.id * 2)) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE (u.id / (u.id * 2)) > 0', - 'SELECT 100 / (2 * 2) + (c0_.id / (c0_.id * 2)) AS sclr_0 FROM cms_users c0_ WHERE (c0_.id / (c0_.id * 2)) > 0' + 'SELECT 100 / (2 * 2) + (c0_."id" / (c0_."id" * 2)) AS sclr_0 FROM "cms_users" c0_ WHERE (c0_."id" / (c0_."id" * 2)) > 0' ); } @@ -2123,14 +2151,14 @@ public function testArithmeticPriority() */ public function testOrderByClauseShouldReplaceOrderByRelationMapping() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT r, b FROM Doctrine\Tests\Models\Routing\RoutingRoute r JOIN r.bookings b', - 'SELECT r0_.id AS id_0, r1_.id AS id_1, r1_.passengerName AS passengerName_2 FROM RoutingRoute r0_ INNER JOIN RoutingRouteBooking r1_ ON r0_.id = r1_.route_id ORDER BY r1_.passengerName ASC' + 'SELECT r0_."id" AS id_0, r1_."id" AS id_1, r1_."passengerName" AS passengerName_2 FROM "RoutingRoute" r0_ INNER JOIN "RoutingRouteBooking" r1_ ON r0_."id" = r1_."route_id" ORDER BY r1_."passengerName" ASC' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT r, b FROM Doctrine\Tests\Models\Routing\RoutingRoute r JOIN r.bookings b ORDER BY b.passengerName DESC', - 'SELECT r0_.id AS id_0, r1_.id AS id_1, r1_.passengerName AS passengerName_2 FROM RoutingRoute r0_ INNER JOIN RoutingRouteBooking r1_ ON r0_.id = r1_.route_id ORDER BY r1_.passengerName DESC' + 'SELECT r0_."id" AS id_0, r1_."id" AS id_1, r1_."passengerName" AS passengerName_2 FROM "RoutingRoute" r0_ INNER JOIN "RoutingRouteBooking" r1_ ON r0_."id" = r1_."route_id" ORDER BY r1_."passengerName" DESC' ); } @@ -2139,14 +2167,14 @@ public function testOrderByClauseShouldReplaceOrderByRelationMapping() */ public function testHavingSupportIsNullExpression() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING u.username IS NULL', - 'SELECT c0_.name AS name_0 FROM cms_users c0_ HAVING c0_.username IS NULL' + 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ HAVING c0_."username" IS NULL' ); - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING MAX(u.name) IS NULL', - 'SELECT c0_.name AS name_0 FROM cms_users c0_ HAVING MAX(c0_.name) IS NULL' + 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ HAVING MAX(c0_."name") IS NULL' ); } @@ -2155,9 +2183,9 @@ public function testHavingSupportIsNullExpression() */ public function testClassTableInheritanceJoinWithConditionAppliesToBaseTable() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT e.id FROM Doctrine\Tests\Models\Company\CompanyOrganization o JOIN o.events e WITH e.id = ?1', - 'SELECT c0_.id AS id_0 FROM company_organizations c1_ INNER JOIN (company_events c0_ LEFT JOIN company_auctions c2_ ON c0_.id = c2_.id LEFT JOIN company_raffles c3_ ON c0_.id = c3_.id) ON c1_.id = c0_.org_id AND (c0_.id = ?)', + 'SELECT c0_."id" AS id_0 FROM "company_organizations" c1_ INNER JOIN ("company_events" c0_ LEFT JOIN "company_auctions" c2_ ON c0_."id" = c2_."id" LEFT JOIN "company_raffles" c3_ ON c0_."id" = c3_."id") ON c1_."id" = c0_."org_id" AND (c0_."id" = ?)', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] ); } @@ -2168,9 +2196,9 @@ public function testClassTableInheritanceJoinWithConditionAppliesToBaseTable() public function testSingleTableInheritanceLeftJoinWithCondition() { // Regression test for the bug - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyEmployee e LEFT JOIN Doctrine\Tests\Models\Company\CompanyContract c WITH c.salesPerson = e.id', - "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.fixPrice AS fixPrice_2, c0_.hoursWorked AS hoursWorked_3, c0_.pricePerHour AS pricePerHour_4, c0_.maxPrice AS maxPrice_5, c0_.discr AS discr_6 FROM company_employees c1_ INNER JOIN company_persons c2_ ON c1_.id = c2_.id LEFT JOIN company_contracts c0_ ON (c0_.salesPerson_id = c2_.id) AND c0_.discr IN ('fix', 'flexible', 'flexultra')" + 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."fixPrice" AS fixPrice_2, c0_."hoursWorked" AS hoursWorked_3, c0_."pricePerHour" AS pricePerHour_4, c0_."maxPrice" AS maxPrice_5, c0_."discr" AS discr_6 FROM "company_employees" c1_ INNER JOIN "company_persons" c2_ ON c1_."id" = c2_."id" LEFT JOIN "company_contracts" c0_ ON (c0_."salesPerson_id" = c2_."id") AND c0_."discr" IN (\'fix\', \'flexible\', \'flexultra\')' ); } @@ -2180,9 +2208,9 @@ public function testSingleTableInheritanceLeftJoinWithCondition() public function testSingleTableInheritanceLeftJoinWithConditionAndWhere() { // Ensure other WHERE predicates are passed through to the main WHERE clause - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyEmployee e LEFT JOIN Doctrine\Tests\Models\Company\CompanyContract c WITH c.salesPerson = e.id WHERE e.salary > 1000', - "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.fixPrice AS fixPrice_2, c0_.hoursWorked AS hoursWorked_3, c0_.pricePerHour AS pricePerHour_4, c0_.maxPrice AS maxPrice_5, c0_.discr AS discr_6 FROM company_employees c1_ INNER JOIN company_persons c2_ ON c1_.id = c2_.id LEFT JOIN company_contracts c0_ ON (c0_.salesPerson_id = c2_.id) AND c0_.discr IN ('fix', 'flexible', 'flexultra') WHERE c1_.salary > 1000" + 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."fixPrice" AS fixPrice_2, c0_."hoursWorked" AS hoursWorked_3, c0_."pricePerHour" AS pricePerHour_4, c0_."maxPrice" AS maxPrice_5, c0_."discr" AS discr_6 FROM "company_employees" c1_ INNER JOIN "company_persons" c2_ ON c1_."id" = c2_."id" LEFT JOIN "company_contracts" c0_ ON (c0_."salesPerson_id" = c2_."id") AND c0_."discr" IN (\'fix\', \'flexible\', \'flexultra\') WHERE c1_."salary" > 1000' ); } @@ -2192,9 +2220,9 @@ public function testSingleTableInheritanceLeftJoinWithConditionAndWhere() public function testSingleTableInheritanceInnerJoinWithCondition() { // Test inner joins too - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyEmployee e INNER JOIN Doctrine\Tests\Models\Company\CompanyContract c WITH c.salesPerson = e.id', - "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.fixPrice AS fixPrice_2, c0_.hoursWorked AS hoursWorked_3, c0_.pricePerHour AS pricePerHour_4, c0_.maxPrice AS maxPrice_5, c0_.discr AS discr_6 FROM company_employees c1_ INNER JOIN company_persons c2_ ON c1_.id = c2_.id INNER JOIN company_contracts c0_ ON (c0_.salesPerson_id = c2_.id) AND c0_.discr IN ('fix', 'flexible', 'flexultra')" + 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."fixPrice" AS fixPrice_2, c0_."hoursWorked" AS hoursWorked_3, c0_."pricePerHour" AS pricePerHour_4, c0_."maxPrice" AS maxPrice_5, c0_."discr" AS discr_6 FROM "company_employees" c1_ INNER JOIN "company_persons" c2_ ON c1_."id" = c2_."id" INNER JOIN "company_contracts" c0_ ON (c0_."salesPerson_id" = c2_."id") AND c0_."discr" IN (\'fix\', \'flexible\', \'flexultra\')' ); } @@ -2205,9 +2233,9 @@ public function testSingleTableInheritanceLeftJoinNonAssociationWithConditionAnd { // Test that the discriminator IN() predicate is still added into // the where clause when not joining onto that table - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c LEFT JOIN Doctrine\Tests\Models\Company\CompanyEmployee e WITH e.id = c.salesPerson WHERE c.completed = true', - "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.fixPrice AS fixPrice_2, c0_.hoursWorked AS hoursWorked_3, c0_.pricePerHour AS pricePerHour_4, c0_.maxPrice AS maxPrice_5, c0_.discr AS discr_6 FROM company_contracts c0_ LEFT JOIN company_employees c1_ INNER JOIN company_persons c2_ ON c1_.id = c2_.id ON (c2_.id = c0_.salesPerson_id) WHERE (c0_.completed = 1) AND c0_.discr IN ('fix', 'flexible', 'flexultra')" + 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."fixPrice" AS fixPrice_2, c0_."hoursWorked" AS hoursWorked_3, c0_."pricePerHour" AS pricePerHour_4, c0_."maxPrice" AS maxPrice_5, c0_."discr" AS discr_6 FROM "company_contracts" c0_ LEFT JOIN "company_employees" c1_ INNER JOIN "company_persons" c2_ ON c1_."id" = c2_."id" ON (c2_."id" = c0_."salesPerson_id") WHERE (c0_."completed" = 1) AND c0_."discr" IN (\'fix\', \'flexible\', \'flexultra\')' ); } @@ -2219,9 +2247,9 @@ public function testSingleTableInheritanceJoinCreatesOnCondition() // Test that the discriminator IN() predicate is still added // into the where clause when not joining onto a single table inheritance entity // via a join association - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c JOIN c.salesPerson s WHERE c.completed = true', - "SELECT c0_.id AS id_0, c0_.completed AS completed_1, c0_.fixPrice AS fixPrice_2, c0_.hoursWorked AS hoursWorked_3, c0_.pricePerHour AS pricePerHour_4, c0_.maxPrice AS maxPrice_5, c0_.discr AS discr_6 FROM company_contracts c0_ INNER JOIN company_employees c1_ ON c0_.salesPerson_id = c1_.id LEFT JOIN company_persons c2_ ON c1_.id = c2_.id WHERE (c0_.completed = 1) AND c0_.discr IN ('fix', 'flexible', 'flexultra')" + 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."fixPrice" AS fixPrice_2, c0_."hoursWorked" AS hoursWorked_3, c0_."pricePerHour" AS pricePerHour_4, c0_."maxPrice" AS maxPrice_5, c0_."discr" AS discr_6 FROM "company_contracts" c0_ INNER JOIN "company_employees" c1_ ON c0_."salesPerson_id" = c1_."id" LEFT JOIN "company_persons" c2_ ON c1_."id" = c2_."id" WHERE (c0_."completed" = 1) AND c0_."discr" IN (\'fix\', \'flexible\', \'flexultra\')' ); } @@ -2233,9 +2261,9 @@ public function testSingleTableInheritanceCreatesOnConditionAndWhere() // Test that when joining onto an entity using single table inheritance via // a join association that the discriminator IN() predicate is placed // into the ON clause of the join - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT e, COUNT(c) FROM Doctrine\Tests\Models\Company\CompanyEmployee e JOIN e.contracts c WHERE e.department = :department', - "SELECT c0_.id AS id_0, c0_.name AS name_1, c1_.salary AS salary_2, c1_.department AS department_3, c1_.startDate AS startDate_4, COUNT(c2_.id) AS sclr_5, c0_.discr AS discr_6 FROM company_employees c1_ INNER JOIN company_persons c0_ ON c1_.id = c0_.id INNER JOIN company_contract_employees c3_ ON c1_.id = c3_.employee_id INNER JOIN company_contracts c2_ ON c2_.id = c3_.contract_id AND c2_.discr IN ('fix', 'flexible', 'flexultra') WHERE c1_.department = ?", + 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, COUNT(c2_."id") AS sclr_5, c0_."discr" AS discr_6 FROM "company_employees" c1_ INNER JOIN "company_persons" c0_ ON c1_."id" = c0_."id" INNER JOIN "company_contract_employees" c3_ ON c1_."id" = c3_."employee_id" INNER JOIN "company_contracts" c2_ ON c2_."id" = c3_."contract_id" AND c2_."discr" IN (\'fix\', \'flexible\', \'flexultra\') WHERE c1_."department" = ?', [], ['department' => 'foobar'] ); @@ -2246,9 +2274,9 @@ public function testSingleTableInheritanceCreatesOnConditionAndWhere() */ public function testHavingSupportResultVariableInExpression() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT u.name AS foo FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING foo IN (?1)', - 'SELECT c0_.name AS name_0 FROM cms_users c0_ HAVING name_0 IN (?)' + 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ HAVING name_0 IN (?)' ); } @@ -2257,9 +2285,9 @@ public function testHavingSupportResultVariableInExpression() */ public function testHavingSupportResultVariableLikeExpression() { - self::assertSqlGeneration( - "SELECT u.name AS foo FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING foo LIKE '3'", - "SELECT c0_.name AS name_0 FROM cms_users c0_ HAVING name_0 LIKE '3'" + $this->assertSqlGeneration( + 'SELECT u.name AS foo FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING foo LIKE \'3\'', + 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ HAVING name_0 LIKE \'3\'' ); } @@ -2268,9 +2296,9 @@ public function testHavingSupportResultVariableLikeExpression() */ public function testHavingSupportResultVariableNullComparisonExpression() { - self::assertSqlGeneration( - "SELECT u AS user, SUM(a.id) AS score FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN Doctrine\Tests\Models\CMS\CmsAddress a WITH a.user = u GROUP BY u HAVING score IS NOT NULL AND score >= 5", - "SELECT c0_.id AS id_0, c0_.status AS status_1, c0_.username AS username_2, c0_.name AS name_3, SUM(c1_.id) AS sclr_4 FROM cms_users c0_ LEFT JOIN cms_addresses c1_ ON (c1_.user_id = c0_.id) GROUP BY c0_.id, c0_.status, c0_.username, c0_.name, c0_.email_id HAVING sclr_4 IS NOT NULL AND sclr_4 >= 5" + $this->assertSqlGeneration( + 'SELECT u AS user, SUM(a.id) AS score FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN Doctrine\Tests\Models\CMS\CmsAddress a WITH a.user = u GROUP BY u HAVING score IS NOT NULL AND score >= 5', + 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, SUM(c1_."id") AS sclr_4 FROM "cms_users" c0_ LEFT JOIN "cms_addresses" c1_ ON (c1_."user_id" = c0_."id") GROUP BY c0_."id", c0_."status", c0_."username", c0_."name", c0_."email_id" HAVING sclr_4 IS NOT NULL AND sclr_4 >= 5' ); } @@ -2279,22 +2307,23 @@ public function testHavingSupportResultVariableNullComparisonExpression() */ public function testHavingSupportResultVariableInAggregateFunction() { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT COUNT(u.name) AS countName FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING countName IS NULL', - 'SELECT COUNT(c0_.name) AS sclr_0 FROM cms_users c0_ HAVING sclr_0 IS NULL' + 'SELECT COUNT(c0_."name") AS sclr_0 FROM "cms_users" c0_ HAVING sclr_0 IS NULL' ); } /** * GitHub issue #4764: https://github.com/doctrine/doctrine2/issues/4764 + * * @group DDC-3907 * @dataProvider mathematicOperatorsProvider */ public function testHavingRegressionUsingVariableWithMathOperatorsExpression($operator) { - self::assertSqlGeneration( + $this->assertSqlGeneration( 'SELECT COUNT(u.name) AS countName FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING 1 ' . $operator . ' countName > 0', - 'SELECT COUNT(c0_.name) AS sclr_0 FROM cms_users c0_ HAVING 1 ' . $operator . ' sclr_0 > 0' + 'SELECT COUNT(c0_."name") AS sclr_0 FROM "cms_users" c0_ HAVING 1 ' . $operator . ' sclr_0 > 0' ); } diff --git a/tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php index 327b7ec6dc5..a8c0c3f0791 100644 --- a/tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php @@ -9,16 +9,10 @@ /** * Test case for testing the saving and referencing of query identifiers. * - * @author Guilherme Blanco - * @author Janne Vanhala - * @author Konsta Vesterinen - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link http://www.phpdoctrine.org - * @since 2.0 - * @version $Revision$ - * @todo 1) [romanb] We might want to split the SQL generation tests into multiple - * testcases later since we'll have a lot of them and we might want to have special SQL - * generation tests for some dbms specific SQL syntaxes. + * @author Guilherme Blanco + * @author Janne Vanhala + * @author Konsta Vesterinen + * @since 2.0 */ class UpdateSqlGenerationTest extends OrmTestCase { @@ -52,7 +46,7 @@ public function testSupportsQueriesWithoutWhere() { self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = ?1', - 'UPDATE cms_users SET name = ?' + 'UPDATE "cms_users" SET "name" = ?' ); } @@ -60,7 +54,7 @@ public function testSupportsMultipleFieldsWithoutWhere() { self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = ?1, u.username = ?2', - 'UPDATE cms_users SET name = ?, username = ?' + 'UPDATE "cms_users" SET "name" = ?, "username" = ?' ); } @@ -68,7 +62,7 @@ public function testSupportsWhereClauses() { self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = ?1 WHERE u.id = ?2', - 'UPDATE cms_users SET name = ? WHERE id = ?' + 'UPDATE "cms_users" SET "name" = ? WHERE "id" = ?' ); } @@ -76,7 +70,7 @@ public function testSupportsWhereClausesOnTheUpdatedField() { self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = ?1 WHERE u.name = ?2', - 'UPDATE cms_users SET name = ? WHERE name = ?' + 'UPDATE "cms_users" SET "name" = ? WHERE "name" = ?' ); } @@ -84,7 +78,7 @@ public function testSupportsMultipleWhereClause() { self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = ?1 WHERE u.name = ?2 AND u.status = ?3', - 'UPDATE cms_users SET name = ? WHERE name = ? AND status = ?' + 'UPDATE "cms_users" SET "name" = ? WHERE "name" = ? AND "status" = ?' ); } @@ -92,7 +86,7 @@ public function testSupportsInClause() { self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = ?1 WHERE u.id IN (1, 3, 4)', - 'UPDATE cms_users SET name = ? WHERE id IN (1, 3, 4)' + 'UPDATE "cms_users" SET "name" = ? WHERE "id" IN (1, 3, 4)' ); } @@ -100,7 +94,7 @@ public function testSupportsParametrizedInClause() { self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = ?1 WHERE u.id IN (?2, ?3, ?4)', - 'UPDATE cms_users SET name = ? WHERE id IN (?, ?, ?)' + 'UPDATE "cms_users" SET "name" = ? WHERE "id" IN (?, ?, ?)' ); } @@ -108,7 +102,7 @@ public function testSupportsNotInClause() { self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.name = ?1 WHERE u.id NOT IN (1, 3, 4)', - 'UPDATE cms_users SET name = ? WHERE id NOT IN (1, 3, 4)' + 'UPDATE "cms_users" SET "name" = ? WHERE "id" NOT IN (1, 3, 4)' ); } @@ -116,7 +110,7 @@ public function testSupportsGreaterThanClause() { self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.status = ?1 WHERE u.id > ?2', - 'UPDATE cms_users SET status = ? WHERE id > ?' + 'UPDATE "cms_users" SET "status" = ? WHERE "id" > ?' ); } @@ -124,7 +118,7 @@ public function testSupportsGreaterThanOrEqualToClause() { self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.status = ?1 WHERE u.id >= ?2', - 'UPDATE cms_users SET status = ? WHERE id >= ?' + 'UPDATE "cms_users" SET "status" = ? WHERE "id" >= ?' ); } @@ -132,7 +126,7 @@ public function testSupportsLessThanClause() { self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.status = ?1 WHERE u.id < ?2', - 'UPDATE cms_users SET status = ? WHERE id < ?' + 'UPDATE "cms_users" SET "status" = ? WHERE "id" < ?' ); } @@ -140,7 +134,7 @@ public function testSupportsLessThanOrEqualToClause() { self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.status = ?1 WHERE u.id <= ?2', - 'UPDATE cms_users SET status = ? WHERE id <= ?' + 'UPDATE "cms_users" SET "status" = ? WHERE "id" <= ?' ); } @@ -148,23 +142,23 @@ public function testSupportsBetweenClause() { self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.status = ?1 WHERE u.id BETWEEN :from AND :to', - 'UPDATE cms_users SET status = ? WHERE id BETWEEN ? AND ?' + 'UPDATE "cms_users" SET "status" = ? WHERE "id" BETWEEN ? AND ?' ); } public function testSingleValuedAssociationFieldInWhere() { self::assertSqlGeneration( - "UPDATE Doctrine\Tests\Models\CMS\CmsPhonenumber p SET p.phonenumber = 1234 WHERE p.user = ?1", - "UPDATE cms_phonenumbers SET phonenumber = 1234 WHERE user_id = ?" + 'UPDATE Doctrine\Tests\Models\CMS\CmsPhonenumber p SET p.phonenumber = 1234 WHERE p.user = ?1', + 'UPDATE "cms_phonenumbers" SET "phonenumber" = 1234 WHERE "user_id" = ?' ); } public function testSingleValuedAssociationFieldInSetClause() { self::assertSqlGeneration( - "update Doctrine\Tests\Models\CMS\CmsComment c set c.article = null where c.article=?1", - "UPDATE cms_comments SET article_id = NULL WHERE article_id = ?" + 'UPDATE Doctrine\Tests\Models\CMS\CmsComment c SET c.article = null WHERE c.article = ?1', + 'UPDATE "cms_comments" SET "article_id" = NULL WHERE "article_id" = ?' ); } @@ -174,8 +168,8 @@ public function testSingleValuedAssociationFieldInSetClause() public function testSubselectTableAliasReferencing() { self::assertSqlGeneration( - "UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.status = 'inactive' WHERE SIZE(u.groups) = 10", - "UPDATE cms_users SET status = 'inactive' WHERE (SELECT COUNT(*) FROM cms_users_groups c0_ WHERE c0_.user_id = cms_users.id) = 10" + 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.status = \'inactive\' WHERE SIZE(u.groups) = 10', + 'UPDATE "cms_users" SET "status" = \'inactive\' WHERE (SELECT COUNT(*) FROM "cms_users_groups" c0_ WHERE c0_."user_id" = "cms_users"."id") = 10' ); } @@ -183,15 +177,15 @@ public function testCustomTypeValueSqlCompletelyIgnoredInUpdateStatements() { self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CustomType\CustomTypeParent p SET p.customInteger = 1 WHERE p.id = 1', - 'UPDATE customtype_parents SET customInteger = 1 WHERE id = 1' + 'UPDATE "customtype_parents" SET "customInteger" = 1 WHERE "id" = 1' ); } public function testUpdateWithSubselectAsNewValue() { self::assertSqlGeneration( - "UPDATE Doctrine\Tests\Models\Company\CompanyFixContract fc SET fc.fixPrice = (SELECT ce2.salary FROM Doctrine\Tests\Models\Company\CompanyEmployee ce2 WHERE ce2.id = 2) WHERE fc.id = 1", - "UPDATE company_contracts SET fixPrice = (SELECT c0_.salary FROM company_employees c0_ INNER JOIN company_persons c1_ ON c0_.id = c1_.id LEFT JOIN company_managers c2_ ON c0_.id = c2_.id WHERE c1_.id = 2) WHERE (id = 1) AND discr IN ('fix')" + 'UPDATE Doctrine\Tests\Models\Company\CompanyFixContract fc SET fc.fixPrice = (SELECT ce2.salary FROM Doctrine\Tests\Models\Company\CompanyEmployee ce2 WHERE ce2.id = 2) WHERE fc.id = 1', + 'UPDATE "company_contracts" SET "fixPrice" = (SELECT c0_."salary" FROM "company_employees" c0_ INNER JOIN "company_persons" c1_ ON c0_."id" = c1_."id" LEFT JOIN "company_managers" c2_ ON c0_."id" = c2_."id" WHERE c1_."id" = 2) WHERE ("id" = 1) AND "discr" IN (\'fix\')' ); } } diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index a3a4abb6f28..3b7143d9480 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -509,8 +509,8 @@ public function testMethodDocBlockShouldStartWithBackSlash() self::assertPhpDocReturnType('boolean', new \ReflectionMethod($book, 'removeComment')); self::assertPhpDocVarType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor', new \ReflectionProperty($book, 'author')); - self::assertPhpDocReturnType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor', new \ReflectionMethod($book, 'getAuthor')); - self::assertPhpDocParamType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor', new \ReflectionMethod($book, 'setAuthor')); + self::assertPhpDocReturnType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor|null', new \ReflectionMethod($book, 'getAuthor')); + self::assertPhpDocParamType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor|null', new \ReflectionMethod($book, 'setAuthor')); // $expectedClassName = '\\' . $embeddedMetadata->name; // self::assertPhpDocVarType($expectedClassName, new \ReflectionProperty($book, 'isbn')); diff --git a/tests/Doctrine/Tests/ORM/Tools/Pagination/CountOutputWalkerTest.php b/tests/Doctrine/Tests/ORM/Tools/Pagination/CountOutputWalkerTest.php index af829a22a14..aecba5925e6 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Pagination/CountOutputWalkerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/CountOutputWalkerTest.php @@ -7,55 +7,43 @@ class CountOutputWalkerTest extends PaginationTestCase { - public function testCountQuery() + /** + * @dataProvider provideDataForCountQuery + */ + public function testCountQuery($dql, $sql) { - $query = $this->entityManager->createQuery( - 'SELECT p, c, a FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p JOIN p.category c JOIN p.author a'); - $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, CountOutputWalker::class); - $query->setFirstResult(null)->setMaxResults(null); - - self::assertEquals( - "SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_0 FROM (SELECT b0_.id AS id_0, c1_.id AS id_1, a2_.id AS id_2, a2_.name AS name_3, b0_.author_id AS author_id_4, b0_.category_id AS category_id_5 FROM BlogPost b0_ INNER JOIN Category c1_ ON b0_.category_id = c1_.id INNER JOIN Author a2_ ON b0_.author_id = a2_.id) dctrn_result) dctrn_table", - $query->getSQL() - ); - } + $query = $this->entityManager->createQuery($dql); - public function testCountQuery_MixedResultsWithName() - { - $query = $this->entityManager->createQuery( - 'SELECT a, sum(a.name) as foo FROM Doctrine\Tests\ORM\Tools\Pagination\Author a'); $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, CountOutputWalker::class); $query->setFirstResult(null)->setMaxResults(null); - self::assertEquals( - "SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_0 FROM (SELECT a0_.id AS id_0, a0_.name AS name_1, sum(a0_.name) AS sclr_2 FROM Author a0_) dctrn_result) dctrn_table", - $query->getSQL() - ); + self::assertEquals($sql, $query->getSQL()); } - public function testCountQuery_GroupBy(): void + public function provideDataForCountQuery() { - $query = $this->entityManager->createQuery( - 'SELECT p.name FROM Doctrine\Tests\ORM\Tools\Pagination\Person p GROUP BY p.name'); - $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, CountOutputWalker::class); - $query->setFirstResult(null)->setMaxResults(null); - - $this->assertSame( - "SELECT COUNT(*) AS dctrn_count FROM (SELECT p0_.name AS name_0 FROM Person p0_ GROUP BY p0_.name) dctrn_table", $query->getSQL() - ); - } - - public function testCountQuery_Having(): void - { - $query = $this->entityManager->createQuery( - 'SELECT g, u, count(u.id) AS userCount FROM Doctrine\Tests\ORM\Tools\Pagination\Group g LEFT JOIN g.users u GROUP BY g.id HAVING userCount > 0'); - $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, CountOutputWalker::class); - $query->setFirstResult(null)->setMaxResults(null); - - self::assertEquals( - "SELECT COUNT(*) AS dctrn_count FROM (SELECT count(u0_.id) AS sclr_0, g1_.id AS id_1, u0_.id AS id_2 FROM groups g1_ LEFT JOIN user_group u2_ ON g1_.id = u2_.group_id LEFT JOIN User u0_ ON u0_.id = u2_.user_id GROUP BY g1_.id HAVING sclr_0 > 0) dctrn_table", - $query->getSQL() - ); + return [ + // Multiple results and joins + [ + 'SELECT p, c, a FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p JOIN p.category c JOIN p.author a', + 'SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_0 FROM (SELECT b0_."id" AS id_0, c1_."id" AS id_1, a2_."id" AS id_2, a2_."name" AS name_3, b0_."author_id" AS author_id_4, b0_."category_id" AS category_id_5 FROM "BlogPost" b0_ INNER JOIN "Category" c1_ ON b0_."category_id" = c1_."id" INNER JOIN "Author" a2_ ON b0_."author_id" = a2_."id") dctrn_result) dctrn_table' + ], + // Mixed results with name + [ + 'SELECT a, sum(a.name) as foo FROM Doctrine\Tests\ORM\Tools\Pagination\Author a', + 'SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_0 FROM (SELECT a0_."id" AS id_0, a0_."name" AS name_1, sum(a0_."name") AS sclr_2 FROM "Author" a0_) dctrn_result) dctrn_table' + ], + // Grouping support + [ + 'SELECT p.name FROM Doctrine\Tests\ORM\Tools\Pagination\Person p GROUP BY p.name', + 'SELECT COUNT(*) AS dctrn_count FROM (SELECT p0_."name" AS name_0 FROM "Person" p0_ GROUP BY p0_."name") dctrn_table' + ], + // Having support + [ + 'SELECT g, u, count(u.id) AS userCount FROM Doctrine\Tests\ORM\Tools\Pagination\Group g LEFT JOIN g.users u GROUP BY g.id HAVING userCount > 0', + 'SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_1 FROM (SELECT count(u0_."id") AS sclr_0, g1_."id" AS id_1, u0_."id" AS id_2 FROM "groups" g1_ LEFT JOIN "user_group" u2_ ON g1_."id" = u2_."group_id" LEFT JOIN "User" u0_ ON u0_."id" = u2_."user_id" GROUP BY g1_."id" HAVING sclr_0 > 0) dctrn_result) dctrn_table' + ], + ]; } public function testCountQueryOrderBySqlServer() @@ -64,14 +52,9 @@ public function testCountQueryOrderBySqlServer() $this->markTestSkipped('SQLServer only test.'); } - $query = $this->entityManager->createQuery( - 'SELECT p FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p ORDER BY p.id'); - $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, CountOutputWalker::class); - $query->setFirstResult(null)->setMaxResults(null); - - self::assertEquals( - "SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_0 FROM (SELECT b0_.id AS id_0, b0_.author_id AS author_id_1, b0_.category_id AS category_id_2 FROM BlogPost b0_) dctrn_result) dctrn_table", - $query->getSQL() + $this->testCountQuery( + 'SELECT p FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p ORDER BY p.id', + 'SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_0 FROM (SELECT b0_.[id] AS id_0, b0_.[author_id] AS author_id_1, b0_.[category_id] AS category_id_2 FROM [BlogPost] b0_) dctrn_result) dctrn_table' ); } } diff --git a/tests/Doctrine/Tests/ORM/Tools/Pagination/CountWalkerTest.php b/tests/Doctrine/Tests/ORM/Tools/Pagination/CountWalkerTest.php index 958f42048bc..6620409928d 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Pagination/CountWalkerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/CountWalkerTest.php @@ -10,105 +10,66 @@ */ class CountWalkerTest extends PaginationTestCase { - public function testCountQuery() + /** + * @dataProvider provideDataForCountQuery + */ + public function testCountQuery($dql, $sql) { - $query = $this->entityManager->createQuery( - 'SELECT p, c, a FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p JOIN p.category c JOIN p.author a'); - $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [CountWalker::class]); - $query->setHint(CountWalker::HINT_DISTINCT, true); - $query->setFirstResult(null)->setMaxResults(null); + $query = $this->entityManager->createQuery($dql); - self::assertEquals( - "SELECT count(DISTINCT b0_.id) AS sclr_0 FROM BlogPost b0_ INNER JOIN Category c1_ ON b0_.category_id = c1_.id INNER JOIN Author a2_ ON b0_.author_id = a2_.id", - $query->getSQL() - ); - } - - public function testCountQuery_MixedResultsWithName() - { - $query = $this->entityManager->createQuery( - 'SELECT a, sum(a.name) as foo FROM Doctrine\Tests\ORM\Tools\Pagination\Author a'); $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [CountWalker::class]); $query->setHint(CountWalker::HINT_DISTINCT, true); - $query->setFirstResult(null)->setMaxResults(null); - self::assertEquals( - "SELECT count(DISTINCT a0_.id) AS sclr_0 FROM Author a0_", - $query->getSQL() - ); - } - - public function testCountQuery_KeepsGroupBy() - { - $query = $this->entityManager->createQuery( - 'SELECT b FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost b GROUP BY b.id'); - $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [CountWalker::class]); - $query->setHint(CountWalker::HINT_DISTINCT, true); - $query->setFirstResult(null)->setMaxResults(null); - - self::assertEquals( - "SELECT count(DISTINCT b0_.id) AS sclr_0 FROM BlogPost b0_ GROUP BY b0_.id", - $query->getSQL() - ); - } - - public function testCountQuery_RemovesOrderBy() - { - $query = $this->entityManager->createQuery( - 'SELECT p, c, a FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p JOIN p.category c JOIN p.author a ORDER BY a.name'); - $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [CountWalker::class]); - $query->setHint(CountWalker::HINT_DISTINCT, true); $query->setFirstResult(null)->setMaxResults(null); - self::assertEquals( - "SELECT count(DISTINCT b0_.id) AS sclr_0 FROM BlogPost b0_ INNER JOIN Category c1_ ON b0_.category_id = c1_.id INNER JOIN Author a2_ ON b0_.author_id = a2_.id", - $query->getSQL() - ); + self::assertEquals($sql, $query->getSQL()); } - public function testCountQuery_RemovesLimits() + public function provideDataForCountQuery() { - $query = $this->entityManager->createQuery( - 'SELECT p, c, a FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p JOIN p.category c JOIN p.author a'); - $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [CountWalker::class]); - $query->setHint(CountWalker::HINT_DISTINCT, true); - $query->setFirstResult(null)->setMaxResults(null); - - self::assertEquals( - "SELECT count(DISTINCT b0_.id) AS sclr_0 FROM BlogPost b0_ INNER JOIN Category c1_ ON b0_.category_id = c1_.id INNER JOIN Author a2_ ON b0_.author_id = a2_.id", - $query->getSQL() - ); + return [ + // Multiple results and joins + [ + 'SELECT p, c, a FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p JOIN p.category c JOIN p.author a', + 'SELECT count(DISTINCT b0_."id") AS sclr_0 FROM "BlogPost" b0_ INNER JOIN "Category" c1_ ON b0_."category_id" = c1_."id" INNER JOIN "Author" a2_ ON b0_."author_id" = a2_."id"' + ], + // Mixed results with name + [ + 'SELECT a, sum(a.name) as foo FROM Doctrine\Tests\ORM\Tools\Pagination\Author a', + 'SELECT count(DISTINCT a0_."id") AS sclr_0 FROM "Author" a0_' + ], + // Keeps group by + [ + 'SELECT b FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost b GROUP BY b.id', + 'SELECT count(DISTINCT b0_."id") AS sclr_0 FROM "BlogPost" b0_ GROUP BY b0_."id"' + ], + // Removes order by + [ + 'SELECT p, c, a FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p JOIN p.category c JOIN p.author a ORDER BY a.name', + 'SELECT count(DISTINCT b0_."id") AS sclr_0 FROM "BlogPost" b0_ INNER JOIN "Category" c1_ ON b0_."category_id" = c1_."id" INNER JOIN "Author" a2_ ON b0_."author_id" = a2_."id"' + ], + // Arbitrary join + [ + 'SELECT p FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p LEFT JOIN Doctrine\Tests\ORM\Tools\Pagination\Category c WITH p.category = c', + 'SELECT count(DISTINCT b0_."id") AS sclr_0 FROM "BlogPost" b0_ LEFT JOIN "Category" c1_ ON (b0_."category_id" = c1_."id")' + ], + ]; } + /** + * @expectedException \RuntimeException + * @expectedExceptionMessage Cannot count query that uses a HAVING clause. Use the output walkers for pagination + */ public function testCountQuery_HavingException() { $query = $this->entityManager->createQuery( - "SELECT g, COUNT(u.id) AS userCount FROM Doctrine\Tests\Models\CMS\CmsGroup g LEFT JOIN g.users u GROUP BY g.id HAVING userCount > 0" + 'SELECT g, COUNT(u.id) AS userCount FROM Doctrine\Tests\Models\CMS\CmsGroup g LEFT JOIN g.users u GROUP BY g.id HAVING userCount > 0' ); - $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [CountWalker::class]); - $query->setFirstResult(null)->setMaxResults(null); - - $this->expectException(\RuntimeException::class); - $this->expectExceptionMessage('Cannot count query that uses a HAVING clause. Use the output walkers for pagination'); - - $query->getSQL(); - } - /** - * Arbitrary Join - */ - public function testCountQueryWithArbitraryJoin() - { - $query = $this->entityManager->createQuery( - 'SELECT p FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p LEFT JOIN Doctrine\Tests\ORM\Tools\Pagination\Category c WITH p.category = c'); $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [CountWalker::class]); - $query->setHint(CountWalker::HINT_DISTINCT, true); $query->setFirstResult(null)->setMaxResults(null); - self::assertEquals( - "SELECT count(DISTINCT b0_.id) AS sclr_0 FROM BlogPost b0_ LEFT JOIN Category c1_ ON (b0_.category_id = c1_.id)", - $query->getSQL() - ); + $query->getSQL(); } } diff --git a/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryOutputWalkerTest.php b/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryOutputWalkerTest.php index 9a5dff4b8c5..c4b7fa730df 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryOutputWalkerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryOutputWalkerTest.php @@ -19,7 +19,7 @@ public function testLimitSubquery() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - "SELECT DISTINCT id_0 FROM (SELECT m0_.id AS id_0, m0_.title AS title_1, c1_.id AS id_2, a2_.id AS id_3, a2_.name AS name_4, m0_.author_id AS author_id_5, m0_.category_id AS category_id_6 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON m0_.category_id = c1_.id INNER JOIN Author a2_ ON m0_.author_id = a2_.id) dctrn_result", + 'SELECT DISTINCT id_0 FROM (SELECT m0_."id" AS id_0, m0_."title" AS title_1, c1_."id" AS id_2, a2_."id" AS id_3, a2_."name" AS name_4, m0_."author_id" AS author_id_5, m0_."category_id" AS category_id_6 FROM "MyBlogPost" m0_ INNER JOIN "Category" c1_ ON m0_."category_id" = c1_."id" INNER JOIN "Author" a2_ ON m0_."author_id" = a2_."id") dctrn_result', $limitQuery->getSQL() ); } @@ -35,7 +35,7 @@ public function testLimitSubqueryWithSortPg() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - "SELECT DISTINCT id_0, MIN(sclr_5) AS dctrn_minrownum FROM (SELECT m0_.id AS id_0, m0_.title AS title_1, c1_.id AS id_2, a2_.id AS id_3, a2_.name AS name_4, ROW_NUMBER() OVER(ORDER BY m0_.title ASC) AS sclr_5, m0_.author_id AS author_id_6, m0_.category_id AS category_id_7 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON m0_.category_id = c1_.id INNER JOIN Author a2_ ON m0_.author_id = a2_.id) dctrn_result GROUP BY id_0 ORDER BY dctrn_minrownum ASC", + 'SELECT DISTINCT id_0, MIN(sclr_5) AS dctrn_minrownum FROM (SELECT m0_."id" AS id_0, m0_."title" AS title_1, c1_."id" AS id_2, a2_."id" AS id_3, a2_."name" AS name_4, ROW_NUMBER() OVER(ORDER BY m0_."title" ASC) AS sclr_5, m0_."author_id" AS author_id_6, m0_."category_id" AS category_id_7 FROM "MyBlogPost" m0_ INNER JOIN "Category" c1_ ON m0_."category_id" = c1_."id" INNER JOIN "Author" a2_ ON m0_."author_id" = a2_."id") dctrn_result GROUP BY id_0 ORDER BY dctrn_minrownum ASC', $limitQuery->getSQL() ); @@ -54,7 +54,7 @@ public function testLimitSubqueryWithScalarSortPg() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - "SELECT DISTINCT id_1, MIN(sclr_3) AS dctrn_minrownum FROM (SELECT COUNT(g0_.id) AS sclr_0, u1_.id AS id_1, g0_.id AS id_2, ROW_NUMBER() OVER(ORDER BY COUNT(g0_.id) ASC) AS sclr_3 FROM User u1_ INNER JOIN user_group u2_ ON u1_.id = u2_.user_id INNER JOIN groups g0_ ON g0_.id = u2_.group_id) dctrn_result GROUP BY id_1 ORDER BY dctrn_minrownum ASC", + 'SELECT DISTINCT id_1, MIN(sclr_3) AS dctrn_minrownum FROM (SELECT COUNT(g0_."id") AS sclr_0, u1_."id" AS id_1, g0_."id" AS id_2, ROW_NUMBER() OVER(ORDER BY COUNT(g0_."id") ASC) AS sclr_3 FROM "User" u1_ INNER JOIN "user_group" u2_ ON u1_."id" = u2_."user_id" INNER JOIN "groups" g0_ ON g0_."id" = u2_."group_id") dctrn_result GROUP BY id_1 ORDER BY dctrn_minrownum ASC', $limitQuery->getSQL() ); @@ -73,7 +73,7 @@ public function testLimitSubqueryWithMixedSortPg() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - "SELECT DISTINCT id_1, MIN(sclr_3) AS dctrn_minrownum FROM (SELECT COUNT(g0_.id) AS sclr_0, u1_.id AS id_1, g0_.id AS id_2, ROW_NUMBER() OVER(ORDER BY COUNT(g0_.id) ASC, u1_.id DESC) AS sclr_3 FROM User u1_ INNER JOIN user_group u2_ ON u1_.id = u2_.user_id INNER JOIN groups g0_ ON g0_.id = u2_.group_id) dctrn_result GROUP BY id_1 ORDER BY dctrn_minrownum ASC", + 'SELECT DISTINCT id_1, MIN(sclr_3) AS dctrn_minrownum FROM (SELECT COUNT(g0_."id") AS sclr_0, u1_."id" AS id_1, g0_."id" AS id_2, ROW_NUMBER() OVER(ORDER BY COUNT(g0_."id") ASC, u1_."id" DESC) AS sclr_3 FROM "User" u1_ INNER JOIN "user_group" u2_ ON u1_."id" = u2_."user_id" INNER JOIN "groups" g0_ ON g0_."id" = u2_."group_id") dctrn_result GROUP BY id_1 ORDER BY dctrn_minrownum ASC', $limitQuery->getSQL() ); @@ -92,7 +92,7 @@ public function testLimitSubqueryWithHiddenScalarSortPg() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - "SELECT DISTINCT id_1, MIN(sclr_3) AS dctrn_minrownum FROM (SELECT COUNT(g0_.id) AS sclr_0, u1_.id AS id_1, g0_.id AS id_2, ROW_NUMBER() OVER(ORDER BY COUNT(g0_.id) ASC, u1_.id DESC) AS sclr_3 FROM User u1_ INNER JOIN user_group u2_ ON u1_.id = u2_.user_id INNER JOIN groups g0_ ON g0_.id = u2_.group_id) dctrn_result GROUP BY id_1 ORDER BY dctrn_minrownum ASC", + 'SELECT DISTINCT id_1, MIN(sclr_3) AS dctrn_minrownum FROM (SELECT COUNT(g0_."id") AS sclr_0, u1_."id" AS id_1, g0_."id" AS id_2, ROW_NUMBER() OVER(ORDER BY COUNT(g0_."id") ASC, u1_."id" DESC) AS sclr_3 FROM "User" u1_ INNER JOIN "user_group" u2_ ON u1_."id" = u2_."user_id" INNER JOIN "groups" g0_ ON g0_."id" = u2_."group_id") dctrn_result GROUP BY id_1 ORDER BY dctrn_minrownum ASC', $limitQuery->getSQL() ); @@ -121,7 +121,7 @@ public function testLimitSubqueryWithSortOracle() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - "SELECT DISTINCT ID_0, MIN(SCLR_5) AS dctrn_minrownum FROM (SELECT m0_.id AS ID_0, m0_.title AS TITLE_1, c1_.id AS ID_2, a2_.id AS ID_3, a2_.name AS NAME_4, ROW_NUMBER() OVER(ORDER BY m0_.title ASC) AS SCLR_5, m0_.author_id AS AUTHOR_ID_6, m0_.category_id AS CATEGORY_ID_7 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON m0_.category_id = c1_.id INNER JOIN Author a2_ ON m0_.author_id = a2_.id) dctrn_result GROUP BY ID_0 ORDER BY dctrn_minrownum ASC", + 'SELECT DISTINCT ID_0, MIN(SCLR_5) AS dctrn_minrownum FROM (SELECT m0_."id" AS ID_0, m0_."title" AS TITLE_1, c1_."id" AS ID_2, a2_."id" AS ID_3, a2_."name" AS NAME_4, ROW_NUMBER() OVER(ORDER BY m0_."title" ASC) AS SCLR_5, m0_."author_id" AS AUTHOR_ID_6, m0_."category_id" AS CATEGORY_ID_7 FROM "MyBlogPost" m0_ INNER JOIN "Category" c1_ ON m0_."category_id" = c1_."id" INNER JOIN "Author" a2_ ON m0_."author_id" = a2_."id") dctrn_result GROUP BY ID_0 ORDER BY dctrn_minrownum ASC', $limitQuery->getSQL() ); @@ -141,7 +141,7 @@ public function testLimitSubqueryWithScalarSortOracle() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - "SELECT DISTINCT ID_1, MIN(SCLR_3) AS dctrn_minrownum FROM (SELECT COUNT(g0_.id) AS SCLR_0, u1_.id AS ID_1, g0_.id AS ID_2, ROW_NUMBER() OVER(ORDER BY COUNT(g0_.id) ASC) AS SCLR_3 FROM User u1_ INNER JOIN user_group u2_ ON u1_.id = u2_.user_id INNER JOIN groups g0_ ON g0_.id = u2_.group_id) dctrn_result GROUP BY ID_1 ORDER BY dctrn_minrownum ASC", + 'SELECT DISTINCT ID_1, MIN(SCLR_3) AS dctrn_minrownum FROM (SELECT COUNT(g0_."id") AS SCLR_0, u1_."id" AS ID_1, g0_."id" AS ID_2, ROW_NUMBER() OVER(ORDER BY COUNT(g0_."id") ASC) AS SCLR_3 FROM "User" u1_ INNER JOIN "user_group" u2_ ON u1_."id" = u2_."user_id" INNER JOIN "groups" g0_ ON g0_."id" = u2_."group_id") dctrn_result GROUP BY ID_1 ORDER BY dctrn_minrownum ASC', $limitQuery->getSQL() ); @@ -161,7 +161,7 @@ public function testLimitSubqueryWithMixedSortOracle() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - "SELECT DISTINCT ID_1, MIN(SCLR_3) AS dctrn_minrownum FROM (SELECT COUNT(g0_.id) AS SCLR_0, u1_.id AS ID_1, g0_.id AS ID_2, ROW_NUMBER() OVER(ORDER BY COUNT(g0_.id) ASC, u1_.id DESC) AS SCLR_3 FROM User u1_ INNER JOIN user_group u2_ ON u1_.id = u2_.user_id INNER JOIN groups g0_ ON g0_.id = u2_.group_id) dctrn_result GROUP BY ID_1 ORDER BY dctrn_minrownum ASC", + 'SELECT DISTINCT ID_1, MIN(SCLR_3) AS dctrn_minrownum FROM (SELECT COUNT(g0_."id") AS SCLR_0, u1_."id" AS ID_1, g0_."id" AS ID_2, ROW_NUMBER() OVER(ORDER BY COUNT(g0_."id") ASC, u1_."id" DESC) AS SCLR_3 FROM "User" u1_ INNER JOIN "user_group" u2_ ON u1_."id" = u2_."user_id" INNER JOIN "groups" g0_ ON g0_."id" = u2_."group_id") dctrn_result GROUP BY ID_1 ORDER BY dctrn_minrownum ASC', $limitQuery->getSQL() ); @@ -180,7 +180,7 @@ public function testLimitSubqueryOracle() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - "SELECT DISTINCT ID_0 FROM (SELECT m0_.id AS ID_0, m0_.title AS TITLE_1, c1_.id AS ID_2, a2_.id AS ID_3, a2_.name AS NAME_4, m0_.author_id AS AUTHOR_ID_5, m0_.category_id AS CATEGORY_ID_6 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON m0_.category_id = c1_.id INNER JOIN Author a2_ ON m0_.author_id = a2_.id) dctrn_result", + 'SELECT DISTINCT ID_0 FROM (SELECT m0_."id" AS ID_0, m0_."title" AS TITLE_1, c1_."id" AS ID_2, a2_."id" AS ID_3, a2_."name" AS NAME_4, m0_."author_id" AS AUTHOR_ID_5, m0_."category_id" AS CATEGORY_ID_6 FROM "MyBlogPost" m0_ INNER JOIN "Category" c1_ ON m0_."category_id" = c1_."id" INNER JOIN "Author" a2_ ON m0_."author_id" = a2_."id") dctrn_result', $limitQuery->getSQL() ); @@ -195,7 +195,7 @@ public function testCountQueryMixedResultsWithName() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - "SELECT DISTINCT id_0 FROM (SELECT a0_.id AS id_0, a0_.name AS name_1, sum(a0_.name) AS sclr_2 FROM Author a0_) dctrn_result", + 'SELECT DISTINCT id_0 FROM (SELECT a0_."id" AS id_0, a0_."name" AS name_1, sum(a0_."name") AS sclr_2 FROM "Author" a0_) dctrn_result', $limitQuery->getSQL() ); } @@ -213,7 +213,7 @@ public function testCountQueryWithArithmeticOrderByCondition() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, (1 - 1000) * 1 FROM (SELECT a0_.id AS id_0, a0_.name AS name_1 FROM Author a0_) dctrn_result_inner ORDER BY (1 - 1000) * 1 DESC) dctrn_result', + 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, (1 - 1000) * 1 FROM (SELECT a0_.`id` AS id_0, a0_.`name` AS name_1 FROM `Author` a0_) dctrn_result_inner ORDER BY (1 - 1000) * 1 DESC) dctrn_result', $query->getSQL() ); } @@ -228,7 +228,7 @@ public function testCountQueryWithComplexScalarOrderByItem() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, image_height_2 * image_width_3 FROM (SELECT a0_.id AS id_0, a0_.image AS image_1, a0_.image_height AS image_height_2, a0_.image_width AS image_width_3, a0_.image_alt_desc AS image_alt_desc_4, a0_.user_id AS user_id_5 FROM Avatar a0_) dctrn_result_inner ORDER BY image_height_2 * image_width_3 DESC) dctrn_result', + 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, image_height_2 * image_width_3 FROM (SELECT a0_.`id` AS id_0, a0_.`image` AS image_1, a0_.`image_height` AS image_height_2, a0_.`image_width` AS image_width_3, a0_.`image_alt_desc` AS image_alt_desc_4, a0_.`user_id` AS user_id_5 FROM `Avatar` a0_) dctrn_result_inner ORDER BY image_height_2 * image_width_3 DESC) dctrn_result', $query->getSQL() ); } @@ -243,7 +243,7 @@ public function testCountQueryWithComplexScalarOrderByItemJoined() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, image_height_1 * image_width_2 FROM (SELECT u0_.id AS id_0, a1_.image_height AS image_height_1, a1_.image_width AS image_width_2, a1_.user_id AS user_id_3 FROM User u0_ INNER JOIN Avatar a1_ ON u0_.id = a1_.user_id) dctrn_result_inner ORDER BY image_height_1 * image_width_2 DESC) dctrn_result', + 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, image_height_1 * image_width_2 FROM (SELECT u0_.`id` AS id_0, a1_.`image_height` AS image_height_1, a1_.`image_width` AS image_width_2, a1_.`user_id` AS user_id_3 FROM `User` u0_ INNER JOIN `Avatar` a1_ ON u0_.`id` = a1_.`user_id`) dctrn_result_inner ORDER BY image_height_1 * image_width_2 DESC) dctrn_result', $query->getSQL() ); } @@ -258,7 +258,7 @@ public function testCountQueryWithComplexScalarOrderByItemJoinedWithPartial() : $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, image_height_3 * image_width_4 FROM (SELECT u0_.id AS id_0, a1_.id AS id_1, a1_.image_alt_desc AS image_alt_desc_2, a1_.image_height AS image_height_3, a1_.image_width AS image_width_4, a1_.user_id AS user_id_5 FROM User u0_ INNER JOIN Avatar a1_ ON u0_.id = a1_.user_id) dctrn_result_inner ORDER BY image_height_3 * image_width_4 DESC) dctrn_result', + 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, image_height_3 * image_width_4 FROM (SELECT u0_.`id` AS id_0, a1_.`id` AS id_1, a1_.`image_alt_desc` AS image_alt_desc_2, a1_.`image_height` AS image_height_3, a1_.`image_width` AS image_width_4, a1_.`user_id` AS user_id_5 FROM `User` u0_ INNER JOIN `Avatar` a1_ ON u0_.`id` = a1_.`user_id`) dctrn_result_inner ORDER BY image_height_3 * image_width_4 DESC) dctrn_result', $query->getSQL() ); } @@ -273,7 +273,7 @@ public function testCountQueryWithComplexScalarOrderByItemOracle() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT ID_0, MIN(SCLR_5) AS dctrn_minrownum FROM (SELECT a0_.id AS ID_0, a0_.image AS IMAGE_1, a0_.image_height AS IMAGE_HEIGHT_2, a0_.image_width AS IMAGE_WIDTH_3, a0_.image_alt_desc AS IMAGE_ALT_DESC_4, ROW_NUMBER() OVER(ORDER BY a0_.image_height * a0_.image_width DESC) AS SCLR_5, a0_.user_id AS USER_ID_6 FROM Avatar a0_) dctrn_result GROUP BY ID_0 ORDER BY dctrn_minrownum ASC', + 'SELECT DISTINCT ID_0, MIN(SCLR_5) AS dctrn_minrownum FROM (SELECT a0_."id" AS ID_0, a0_."image" AS IMAGE_1, a0_."image_height" AS IMAGE_HEIGHT_2, a0_."image_width" AS IMAGE_WIDTH_3, a0_."image_alt_desc" AS IMAGE_ALT_DESC_4, ROW_NUMBER() OVER(ORDER BY a0_."image_height" * a0_."image_width" DESC) AS SCLR_5, a0_."user_id" AS USER_ID_6 FROM "Avatar" a0_) dctrn_result GROUP BY ID_0 ORDER BY dctrn_minrownum ASC', $query->getSQL() ); } @@ -290,12 +290,12 @@ public function testLimitSubqueryWithHiddenSelectionInOrderBy() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, name_2 FROM (SELECT a0_.id AS id_0, a0_.name AS name_1, a0_.name AS name_2 FROM Author a0_) dctrn_result_inner ORDER BY name_2 DESC) dctrn_result', + 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, name_2 FROM (SELECT a0_."id" AS id_0, a0_."name" AS name_1, a0_."name" AS name_2 FROM "Author" a0_) dctrn_result_inner ORDER BY name_2 DESC) dctrn_result', $query->getSQL() ); } - public function testLimitSubqueryWithColumnWithSortDirectionInName() : void + public function testLimitSubqueryWithColumnWithSortDirectionInNameMySql() : void { $query = $this->entityManager->createQuery( 'SELECT a FROM Doctrine\Tests\ORM\Tools\Pagination\Avatar a ORDER BY a.image_alt_desc DESC' @@ -305,7 +305,7 @@ public function testLimitSubqueryWithColumnWithSortDirectionInName() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, image_alt_desc_4 FROM (SELECT a0_.id AS id_0, a0_.image AS image_1, a0_.image_height AS image_height_2, a0_.image_width AS image_width_3, a0_.image_alt_desc AS image_alt_desc_4, a0_.user_id AS user_id_5 FROM Avatar a0_) dctrn_result_inner ORDER BY image_alt_desc_4 DESC) dctrn_result', + 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, image_alt_desc_4 FROM (SELECT a0_.`id` AS id_0, a0_.`image` AS image_1, a0_.`image_height` AS image_height_2, a0_.`image_width` AS image_width_3, a0_.`image_alt_desc` AS image_alt_desc_4, a0_.`user_id` AS user_id_5 FROM `Avatar` a0_) dctrn_result_inner ORDER BY image_alt_desc_4 DESC) dctrn_result', $query->getSQL() ); } @@ -319,7 +319,7 @@ public function testLimitSubqueryWithOrderByInnerJoined() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, name_1 FROM (SELECT b0_.id AS id_0, a1_.name AS name_1, b0_.author_id AS author_id_2, b0_.category_id AS category_id_3 FROM BlogPost b0_ INNER JOIN Author a1_ ON b0_.author_id = a1_.id) dctrn_result_inner ORDER BY name_1 ASC) dctrn_result', + 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, name_1 FROM (SELECT b0_."id" AS id_0, a1_."name" AS name_1, b0_."author_id" AS author_id_2, b0_."category_id" AS category_id_3 FROM "BlogPost" b0_ INNER JOIN "Author" a1_ ON b0_."author_id" = a1_."id") dctrn_result_inner ORDER BY name_1 ASC) dctrn_result', $query->getSQL() ); } @@ -335,7 +335,7 @@ public function testLimitSubqueryWithOrderByAndSubSelectInWhereClauseMySql() : v $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0 FROM (SELECT b0_.id AS id_0, b0_.author_id AS author_id_1, b0_.category_id AS category_id_2 FROM BlogPost b0_ WHERE ((SELECT COUNT(b1_.id) AS sclr_3 FROM BlogPost b1_) = 1)) dctrn_result_inner ORDER BY id_0 DESC) dctrn_result', + 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0 FROM (SELECT b0_.`id` AS id_0, b0_.`author_id` AS author_id_1, b0_.`category_id` AS category_id_2 FROM `BlogPost` b0_ WHERE ((SELECT COUNT(b1_.`id`) AS sclr_3 FROM `BlogPost` b1_) = 1)) dctrn_result_inner ORDER BY id_0 DESC) dctrn_result', $query->getSQL() ); } @@ -351,7 +351,7 @@ public function testLimitSubqueryWithOrderByAndSubSelectInWhereClausePgSql() : v $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0, MIN(sclr_1) AS dctrn_minrownum FROM (SELECT b0_.id AS id_0, ROW_NUMBER() OVER(ORDER BY b0_.id DESC) AS sclr_1, b0_.author_id AS author_id_2, b0_.category_id AS category_id_3 FROM BlogPost b0_ WHERE ((SELECT COUNT(b1_.id) AS sclr_4 FROM BlogPost b1_) = 1)) dctrn_result GROUP BY id_0 ORDER BY dctrn_minrownum ASC', + 'SELECT DISTINCT id_0, MIN(sclr_1) AS dctrn_minrownum FROM (SELECT b0_."id" AS id_0, ROW_NUMBER() OVER(ORDER BY b0_."id" DESC) AS sclr_1, b0_."author_id" AS author_id_2, b0_."category_id" AS category_id_3 FROM "BlogPost" b0_ WHERE ((SELECT COUNT(b1_."id") AS sclr_4 FROM "BlogPost" b1_) = 1)) dctrn_result GROUP BY id_0 ORDER BY dctrn_minrownum ASC', $query->getSQL() ); } @@ -359,7 +359,7 @@ public function testLimitSubqueryWithOrderByAndSubSelectInWhereClausePgSql() : v /** * This tests ordering by property that has the 'declared' field. */ - public function testLimitSubqueryOrderByFieldFromMappedSuperclass() : void + public function testLimitSubqueryOrderByFieldFromMappedSuperclassMySql() : void { $this->entityManager->getConnection()->setDatabasePlatform(new MySqlPlatform()); @@ -370,7 +370,7 @@ public function testLimitSubqueryOrderByFieldFromMappedSuperclass() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0 FROM (SELECT b0_.id AS id_0, b0_.name AS name_1 FROM Banner b0_) dctrn_result_inner ORDER BY id_0 DESC) dctrn_result', + 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0 FROM (SELECT b0_.`id` AS id_0, b0_.`name` AS name_1 FROM `Banner` b0_) dctrn_result_inner ORDER BY id_0 DESC) dctrn_result', $query->getSQL() ); } @@ -378,7 +378,7 @@ public function testLimitSubqueryOrderByFieldFromMappedSuperclass() : void /** * Tests order by on a subselect expression (mysql). */ - public function testLimitSubqueryOrderBySubSelectOrderByExpression() : void + public function testLimitSubqueryOrderBySubSelectOrderByExpressionMySql() : void { $this->entityManager->getConnection()->setDatabasePlatform(new MySqlPlatform()); @@ -395,7 +395,7 @@ public function testLimitSubqueryOrderBySubSelectOrderByExpression() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, sclr_2 FROM (SELECT a0_.id AS id_0, a0_.name AS name_1, (SELECT MIN(m1_.title) AS sclr_3 FROM MyBlogPost m1_ WHERE m1_.author_id = a0_.id) AS sclr_2 FROM Author a0_) dctrn_result_inner ORDER BY sclr_2 DESC) dctrn_result', + 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, sclr_2 FROM (SELECT a0_.`id` AS id_0, a0_.`name` AS name_1, (SELECT MIN(m1_.`title`) AS sclr_3 FROM `MyBlogPost` m1_ WHERE m1_.`author_id` = a0_.`id`) AS sclr_2 FROM `Author` a0_) dctrn_result_inner ORDER BY sclr_2 DESC) dctrn_result', $query->getSQL() ); } @@ -403,7 +403,7 @@ public function testLimitSubqueryOrderBySubSelectOrderByExpression() : void /** * Tests order by on a subselect expression invoking RowNumberOverFunction (postgres). */ - public function testLimitSubqueryOrderBySubSelectOrderByExpressionPg() : void + public function testLimitSubqueryOrderBySubSelectOrderByExpressionPgSql() : void { $this->entityManager->getConnection()->setDatabasePlatform(new PostgreSqlPlatform()); @@ -420,7 +420,7 @@ public function testLimitSubqueryOrderBySubSelectOrderByExpressionPg() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0, MIN(sclr_4) AS dctrn_minrownum FROM (SELECT a0_.id AS id_0, a0_.name AS name_1, (SELECT MIN(m1_.title) AS sclr_3 FROM MyBlogPost m1_ WHERE m1_.author_id = a0_.id) AS sclr_2, ROW_NUMBER() OVER(ORDER BY (SELECT MIN(m1_.title) AS sclr_5 FROM MyBlogPost m1_ WHERE m1_.author_id = a0_.id) DESC) AS sclr_4 FROM Author a0_) dctrn_result GROUP BY id_0 ORDER BY dctrn_minrownum ASC', + 'SELECT DISTINCT id_0, MIN(sclr_4) AS dctrn_minrownum FROM (SELECT a0_."id" AS id_0, a0_."name" AS name_1, (SELECT MIN(m1_."title") AS sclr_3 FROM "MyBlogPost" m1_ WHERE m1_."author_id" = a0_."id") AS sclr_2, ROW_NUMBER() OVER(ORDER BY (SELECT MIN(m1_."title") AS sclr_5 FROM "MyBlogPost" m1_ WHERE m1_."author_id" = a0_."id") DESC) AS sclr_4 FROM "Author" a0_) dctrn_result GROUP BY id_0 ORDER BY dctrn_minrownum ASC', $query->getSQL() ); } @@ -445,7 +445,7 @@ public function testLimitSubqueryOrderBySubSelectOrderByExpressionOracle() : voi $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT ID_0, MIN(SCLR_4) AS dctrn_minrownum FROM (SELECT a0_.id AS ID_0, a0_.name AS NAME_1, (SELECT MIN(m1_.title) AS SCLR_3 FROM MyBlogPost m1_ WHERE m1_.author_id = a0_.id) AS SCLR_2, ROW_NUMBER() OVER(ORDER BY (SELECT MIN(m1_.title) AS SCLR_5 FROM MyBlogPost m1_ WHERE m1_.author_id = a0_.id) DESC) AS SCLR_4 FROM Author a0_) dctrn_result GROUP BY ID_0 ORDER BY dctrn_minrownum ASC', + 'SELECT DISTINCT ID_0, MIN(SCLR_4) AS dctrn_minrownum FROM (SELECT a0_."id" AS ID_0, a0_."name" AS NAME_1, (SELECT MIN(m1_."title") AS SCLR_3 FROM "MyBlogPost" m1_ WHERE m1_."author_id" = a0_."id") AS SCLR_2, ROW_NUMBER() OVER(ORDER BY (SELECT MIN(m1_."title") AS SCLR_5 FROM "MyBlogPost" m1_ WHERE m1_."author_id" = a0_."id") DESC) AS SCLR_4 FROM "Author" a0_) dctrn_result GROUP BY ID_0 ORDER BY dctrn_minrownum ASC', $query->getSQL() ); } diff --git a/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryWalkerTest.php b/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryWalkerTest.php index c665694298a..3828a392802 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryWalkerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryWalkerTest.php @@ -19,7 +19,7 @@ public function testLimitSubquery() $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]); self::assertEquals( - "SELECT DISTINCT m0_.id AS id_0 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON m0_.category_id = c1_.id INNER JOIN Author a2_ ON m0_.author_id = a2_.id", + 'SELECT DISTINCT m0_."id" AS id_0 FROM "MyBlogPost" m0_ INNER JOIN "Category" c1_ ON m0_."category_id" = c1_."id" INNER JOIN "Author" a2_ ON m0_."author_id" = a2_."id"', $limitQuery->getSQL() ); } @@ -33,7 +33,7 @@ public function testLimitSubqueryWithSort() $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]); self::assertEquals( - "SELECT DISTINCT m0_.id AS id_0, m0_.title AS title_1 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON m0_.category_id = c1_.id INNER JOIN Author a2_ ON m0_.author_id = a2_.id ORDER BY m0_.title ASC", + 'SELECT DISTINCT m0_."id" AS id_0, m0_."title" AS title_1 FROM "MyBlogPost" m0_ INNER JOIN "Category" c1_ ON m0_."category_id" = c1_."id" INNER JOIN "Author" a2_ ON m0_."author_id" = a2_."id" ORDER BY m0_."title" ASC', $limitQuery->getSQL() ); } @@ -47,7 +47,7 @@ public function testCountQuery_MixedResultsWithName() $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]); self::assertEquals( - "SELECT DISTINCT a0_.id AS id_0, sum(a0_.name) AS sclr_1 FROM Author a0_", + 'SELECT DISTINCT a0_."id" AS id_0, sum(a0_."name") AS sclr_1 FROM "Author" a0_', $limitQuery->getSQL() ); } @@ -64,7 +64,7 @@ public function testLimitSubqueryWithSortOnAssociation() $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]); self::assertEquals( - "SELECT DISTINCT m0_.id AS id_0, m0_.author_id AS sclr_1 FROM MyBlogPost m0_ ORDER BY m0_.author_id ASC", + 'SELECT DISTINCT m0_."id" AS id_0, m0_."author_id" AS sclr_1 FROM "MyBlogPost" m0_ ORDER BY m0_."author_id" ASC', $limitQuery->getSQL() ); } @@ -81,7 +81,7 @@ public function testLimitSubqueryWithArbitraryJoin() $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]); self::assertEquals( - "SELECT DISTINCT m0_.id AS id_0 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON (m0_.category_id = c1_.id)", + 'SELECT DISTINCT m0_."id" AS id_0 FROM "MyBlogPost" m0_ INNER JOIN "Category" c1_ ON (m0_."category_id" = c1_."id")', $limitQuery->getSQL() ); } @@ -95,7 +95,7 @@ public function testLimitSubqueryWithSortWithArbitraryJoin() $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]); self::assertEquals( - "SELECT DISTINCT m0_.id AS id_0, m0_.title AS title_1 FROM MyBlogPost m0_ INNER JOIN Category c1_ ON (m0_.category_id = c1_.id) ORDER BY m0_.title ASC", + 'SELECT DISTINCT m0_."id" AS id_0, m0_."title" AS title_1 FROM "MyBlogPost" m0_ INNER JOIN "Category" c1_ ON (m0_."category_id" = c1_."id") ORDER BY m0_."title" ASC', $limitQuery->getSQL() ); } diff --git a/tests/Doctrine/Tests/ORM/Tools/Pagination/PaginationTestCase.php b/tests/Doctrine/Tests/ORM/Tools/Pagination/PaginationTestCase.php index fe8ee0f8252..471e86b5505 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Pagination/PaginationTestCase.php +++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/PaginationTestCase.php @@ -15,6 +15,11 @@ public function setUp() { $this->entityManager = $this->_getTestEntityManager(); } + + public function tearDown() + { + $this->entityManager = null; + } } diff --git a/tests/Doctrine/Tests/ORM/Tools/Pagination/WhereInWalkerTest.php b/tests/Doctrine/Tests/ORM/Tools/Pagination/WhereInWalkerTest.php index 12f38ffbdae..98964f3ad3c 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Pagination/WhereInWalkerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/WhereInWalkerTest.php @@ -20,7 +20,8 @@ public function testWhereInQuery_NoWhere() $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); self::assertEquals( - "SELECT u0_.id AS id_0, g1_.id AS id_1 FROM User u0_ INNER JOIN user_group u2_ ON u0_.id = u2_.user_id INNER JOIN groups g1_ ON g1_.id = u2_.group_id WHERE u0_.id IN (?)", $whereInQuery->getSQL() + 'SELECT u0_."id" AS id_0, g1_."id" AS id_1 FROM "User" u0_ INNER JOIN "user_group" u2_ ON u0_."id" = u2_."user_id" INNER JOIN "groups" g1_ ON g1_."id" = u2_."group_id" WHERE u0_."id" IN (?)', + $whereInQuery->getSQL() ); } @@ -34,7 +35,8 @@ public function testCountQuery_MixedResultsWithName() $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); self::assertEquals( - "SELECT a0_.id AS id_0, a0_.name AS name_1, sum(a0_.name) AS sclr_2 FROM Author a0_ WHERE a0_.id IN (?)", $whereInQuery->getSQL() + 'SELECT a0_."id" AS id_0, a0_."name" AS name_1, sum(a0_."name") AS sclr_2 FROM "Author" a0_ WHERE a0_."id" IN (?)', + $whereInQuery->getSQL() ); } @@ -48,7 +50,8 @@ public function testWhereInQuery_SingleWhere() $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); self::assertEquals( - "SELECT u0_.id AS id_0, g1_.id AS id_1 FROM User u0_ INNER JOIN user_group u2_ ON u0_.id = u2_.user_id INNER JOIN groups g1_ ON g1_.id = u2_.group_id WHERE 1 = 1 AND u0_.id IN (?)", $whereInQuery->getSQL() + 'SELECT u0_."id" AS id_0, g1_."id" AS id_1 FROM "User" u0_ INNER JOIN "user_group" u2_ ON u0_."id" = u2_."user_id" INNER JOIN "groups" g1_ ON g1_."id" = u2_."group_id" WHERE 1 = 1 AND u0_."id" IN (?)', + $whereInQuery->getSQL() ); } @@ -62,7 +65,8 @@ public function testWhereInQuery_MultipleWhereWithAnd() $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); self::assertEquals( - "SELECT u0_.id AS id_0, g1_.id AS id_1 FROM User u0_ INNER JOIN user_group u2_ ON u0_.id = u2_.user_id INNER JOIN groups g1_ ON g1_.id = u2_.group_id WHERE 1 = 1 AND 2 = 2 AND u0_.id IN (?)", $whereInQuery->getSQL() + 'SELECT u0_."id" AS id_0, g1_."id" AS id_1 FROM "User" u0_ INNER JOIN "user_group" u2_ ON u0_."id" = u2_."user_id" INNER JOIN "groups" g1_ ON g1_."id" = u2_."group_id" WHERE 1 = 1 AND 2 = 2 AND u0_."id" IN (?)', + $whereInQuery->getSQL() ); } @@ -76,7 +80,8 @@ public function testWhereInQuery_MultipleWhereWithOr() $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); self::assertEquals( - "SELECT u0_.id AS id_0, g1_.id AS id_1 FROM User u0_ INNER JOIN user_group u2_ ON u0_.id = u2_.user_id INNER JOIN groups g1_ ON g1_.id = u2_.group_id WHERE (1 = 1 OR 2 = 2) AND u0_.id IN (?)", $whereInQuery->getSQL() + 'SELECT u0_."id" AS id_0, g1_."id" AS id_1 FROM "User" u0_ INNER JOIN "user_group" u2_ ON u0_."id" = u2_."user_id" INNER JOIN "groups" g1_ ON g1_."id" = u2_."group_id" WHERE (1 = 1 OR 2 = 2) AND u0_."id" IN (?)', + $whereInQuery->getSQL() ); } @@ -90,7 +95,8 @@ public function testWhereInQuery_MultipleWhereWithMixed_1() $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); self::assertEquals( - "SELECT u0_.id AS id_0, g1_.id AS id_1 FROM User u0_ INNER JOIN user_group u2_ ON u0_.id = u2_.user_id INNER JOIN groups g1_ ON g1_.id = u2_.group_id WHERE (1 = 1 OR 2 = 2) AND 3 = 3 AND u0_.id IN (?)", $whereInQuery->getSQL() + 'SELECT u0_."id" AS id_0, g1_."id" AS id_1 FROM "User" u0_ INNER JOIN "user_group" u2_ ON u0_."id" = u2_."user_id" INNER JOIN "groups" g1_ ON g1_."id" = u2_."group_id" WHERE (1 = 1 OR 2 = 2) AND 3 = 3 AND u0_."id" IN (?)', + $whereInQuery->getSQL() ); } @@ -104,7 +110,8 @@ public function testWhereInQuery_MultipleWhereWithMixed_2() $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); self::assertEquals( - "SELECT u0_.id AS id_0, g1_.id AS id_1 FROM User u0_ INNER JOIN user_group u2_ ON u0_.id = u2_.user_id INNER JOIN groups g1_ ON g1_.id = u2_.group_id WHERE (1 = 1 AND 2 = 2 OR 3 = 3) AND u0_.id IN (?)", $whereInQuery->getSQL() + 'SELECT u0_."id" AS id_0, g1_."id" AS id_1 FROM "User" u0_ INNER JOIN "user_group" u2_ ON u0_."id" = u2_."user_id" INNER JOIN "groups" g1_ ON g1_."id" = u2_."group_id" WHERE (1 = 1 AND 2 = 2 OR 3 = 3) AND u0_."id" IN (?)', + $whereInQuery->getSQL() ); } @@ -118,7 +125,8 @@ public function testWhereInQuery_WhereNot() $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); self::assertEquals( - "SELECT u0_.id AS id_0, g1_.id AS id_1 FROM User u0_ INNER JOIN user_group u2_ ON u0_.id = u2_.user_id INNER JOIN groups g1_ ON g1_.id = u2_.group_id WHERE (NOT 1 = 2) AND u0_.id IN (?)", $whereInQuery->getSQL() + 'SELECT u0_."id" AS id_0, g1_."id" AS id_1 FROM "User" u0_ INNER JOIN "user_group" u2_ ON u0_."id" = u2_."user_id" INNER JOIN "groups" g1_ ON g1_."id" = u2_."group_id" WHERE (NOT 1 = 2) AND u0_."id" IN (?)', + $whereInQuery->getSQL() ); } @@ -134,7 +142,8 @@ public function testWhereInQueryWithArbitraryJoin_NoWhere() $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); self::assertEquals( - "SELECT b0_.id AS id_0, b0_.author_id AS author_id_1, b0_.category_id AS category_id_2 FROM BlogPost b0_ INNER JOIN Category c1_ ON (b0_.category_id = c1_.id) WHERE b0_.id IN (?)", $whereInQuery->getSQL() + 'SELECT b0_."id" AS id_0, b0_."author_id" AS author_id_1, b0_."category_id" AS category_id_2 FROM "BlogPost" b0_ INNER JOIN "Category" c1_ ON (b0_."category_id" = c1_."id") WHERE b0_."id" IN (?)', + $whereInQuery->getSQL() ); } @@ -147,7 +156,8 @@ public function testWhereInQueryWithArbitraryJoin_SingleWhere() $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); self::assertEquals( - "SELECT b0_.id AS id_0, b0_.author_id AS author_id_1, b0_.category_id AS category_id_2 FROM BlogPost b0_ INNER JOIN Category c1_ ON (b0_.category_id = c1_.id) WHERE 1 = 1 AND b0_.id IN (?)", $whereInQuery->getSQL() + 'SELECT b0_."id" AS id_0, b0_."author_id" AS author_id_1, b0_."category_id" AS category_id_2 FROM "BlogPost" b0_ INNER JOIN "Category" c1_ ON (b0_."category_id" = c1_."id") WHERE 1 = 1 AND b0_."id" IN (?)', + $whereInQuery->getSQL() ); } } diff --git a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php index 7d9a2f46733..7b30f428011 100644 --- a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php @@ -104,7 +104,7 @@ public function testDoesResolveTargetEntitiesInDQLAlsoWithInterfaces() $evm->addEventSubscriber($this->listener); self::assertStringMatchesFormat( - 'SELECT%AFROM ResolveTargetEntity%A', + 'SELECT %A FROM "ResolveTargetEntity" %A', $this ->em ->createQuery('SELECT f FROM Doctrine\Tests\ORM\Tools\ResolveTargetInterface f') diff --git a/tests/Doctrine/Tests/OrmFunctionalTestCase.php b/tests/Doctrine/Tests/OrmFunctionalTestCase.php index 153d6d23759..4a32b27e184 100644 --- a/tests/Doctrine/Tests/OrmFunctionalTestCase.php +++ b/tests/Doctrine/Tests/OrmFunctionalTestCase.php @@ -813,9 +813,13 @@ protected function onNotSuccessfulTest(\Throwable $e) throw $e; } - public function assertSQLEquals($expectedSql, $actualSql) + public static function assertSQLEquals($expectedSql, $actualSql) { - return self::assertEquals(strtolower($expectedSql), strtolower($actualSql), "Lowercase comparison of SQL statements failed."); + return self::assertEquals( + strtolower($expectedSql), + strtolower($actualSql), + "Lowercase comparison of SQL statements failed." + ); } /** From 9314d0e3dd44a2cd3d67e9b90447417631295917 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 27 Aug 2016 02:06:40 +0000 Subject: [PATCH 061/275] Fixing remaining possible to be fixed unit tests --- .../ORM/Functional/Ticket/DDC2138Test.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 55 ++++++++++--------- .../Tests/ORM/Mapping/ClassMetadataTest.php | 4 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 2 + 4 files changed, 35 insertions(+), 28 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php index 75b55cb4130..fe82d4722b7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php @@ -42,7 +42,7 @@ public function testForeignKeyOnSTIWithMultipleMapping() $localColumns = $fk->getLocalColumns(); - self::assertContains('user_id', $localColumns); + self::assertContains('"user_id"', $localColumns); self::assertCount(1, $localColumns); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 69ed7e53a47..5a7f7ad43df 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -122,11 +122,19 @@ public function testEntityIndexFlagsAndPartialIndexes() */ public function testEntityUniqueConstraints($class) { - self::assertArrayHasKey('uniqueConstraints', $class->table, - 'ClassMetadata should have uniqueConstraints key in table property when Unique Constraints are set.'); + self::assertArrayHasKey( + 'uniqueConstraints', + $class->table, + 'ClassMetadata should have uniqueConstraints key in table property when Unique Constraints are set.' + ); self::assertEquals( - ["search_idx" => ["columns" => ["name", "user_email"], 'options' => ['where' => 'name IS NOT NULL']]], + [ + 'search_idx' => [ + 'columns' => ['name', 'user_email'], + 'options' => ['where' => 'name IS NOT NULL'] + ] + ], $class->table['uniqueConstraints'] ); @@ -142,7 +150,10 @@ public function testEntityOptions($class) self::assertArrayHasKey('options', $class->table, 'ClassMetadata should have options key in table property.'); self::assertEquals( - ['foo' => 'bar', 'baz' => ['key' => 'val']], + [ + 'foo' => 'bar', + 'baz' => ['key' => 'val'] + ], $class->table['options'] ); @@ -171,10 +182,7 @@ public function testEntityCustomGenerator() $class = $this->createClassMetadata(Animal::class); self::assertEquals(ClassMetadata::GENERATOR_TYPE_CUSTOM, $class->generatorType, "Generator Type"); - self::assertEquals( - ["class" => "stdClass"], - $class->customGeneratorDefinition, - "Custom Generator Definition"); + self::assertEquals(["class" => "stdClass"], $class->customGeneratorDefinition, "Custom Generator Definition"); } @@ -545,8 +553,8 @@ public function testIdentifierColumnDefinition() */ public function testNamingStrategy() { - $em = $this->_getTestEntityManager(); - $factory = $this->createClassMetadataFactory($em); + $em = $this->_getTestEntityManager(); + $factory = $this->createClassMetadataFactory($em); self::assertInstanceOf(DefaultNamingStrategy::class, $em->getConfiguration()->getNamingStrategy()); $em->getConfiguration()->setNamingStrategy(new UnderscoreNamingStrategy(CASE_UPPER)); @@ -891,12 +899,10 @@ public function testAttributeOverridesMapping() */ public function testEntityListeners() { - $em = $this->_getTestEntityManager(); - $factory = $this->createClassMetadataFactory($em); + $factory = $this->createClassMetadataFactory(); $superClass = $factory->getMetadataFor(CompanyContract::class); $flexClass = $factory->getMetadataFor(CompanyFixContract::class); $fixClass = $factory->getMetadataFor(CompanyFlexContract::class); - $ultraClass = $factory->getMetadataFor(CompanyFlexUltraContract::class); self::assertArrayHasKey(Events::prePersist, $superClass->entityListeners); self::assertArrayHasKey(Events::postPersist, $superClass->entityListeners); @@ -922,8 +928,7 @@ public function testEntityListeners() */ public function testEntityListenersOverride() { - $em = $this->_getTestEntityManager(); - $factory = $this->createClassMetadataFactory($em); + $factory = $this->createClassMetadataFactory(); $ultraClass = $factory->getMetadataFor(CompanyFlexUltraContract::class); //overridden listeners @@ -956,9 +961,8 @@ public function testEntityListenersOverride() */ public function testEntityListenersNamingConvention() { - $em = $this->_getTestEntityManager(); - $factory = $this->createClassMetadataFactory($em); - $metadata = $factory->getMetadataFor(CmsAddress::class); + $factory = $this->createClassMetadataFactory(); + $metadata = $factory->getMetadataFor(CmsAddress::class); self::assertArrayHasKey(Events::postPersist, $metadata->entityListeners); self::assertArrayHasKey(Events::prePersist, $metadata->entityListeners); @@ -987,7 +991,6 @@ public function testEntityListenersNamingConvention() $postLoad = $metadata->entityListeners[Events::postLoad][0]; $preFlush = $metadata->entityListeners[Events::preFlush][0]; - self::assertEquals(CmsAddressListener::class, $postPersist['class']); self::assertEquals(CmsAddressListener::class, $prePersist['class']); self::assertEquals(CmsAddressListener::class, $postUpdate['class']); @@ -1012,8 +1015,7 @@ public function testEntityListenersNamingConvention() */ public function testSecondLevelCacheMapping() { - $em = $this->_getTestEntityManager(); - $factory = $this->createClassMetadataFactory($em); + $factory = $this->createClassMetadataFactory(); $class = $factory->getMetadataFor(City::class); self::assertArrayHasKey('usage', $class->cache); @@ -1042,8 +1044,8 @@ public function testSecondLevelCacheMapping() */ public function testSchemaDefinitionViaExplicitTableSchemaAnnotationProperty() { - /* @var $metadata \Doctrine\ORM\Mapping\ClassMetadata */ - $metadata = $this->createClassMetadataFactory()->getMetadataFor(ExplicitSchemaAndTable::class); + $factory = $this->createClassMetadataFactory(); + $metadata = $factory->getMetadataFor(ExplicitSchemaAndTable::class); self::assertSame('explicit_schema', $metadata->getSchemaName()); self::assertSame('explicit_table', $metadata->getTableName()); @@ -1055,8 +1057,8 @@ public function testSchemaDefinitionViaExplicitTableSchemaAnnotationProperty() */ public function testSchemaDefinitionViaSchemaDefinedInTableNameInTableAnnotationProperty() { - /* @var $metadata \Doctrine\ORM\Mapping\ClassMetadata */ - $metadata = $this->createClassMetadataFactory()->getMetadataFor(SchemaAndTableInTableName::class); + $factory = $this->createClassMetadataFactory(); + $metadata = $factory->getMetadataFor(SchemaAndTableInTableName::class); self::assertSame('implicit_schema', $metadata->getSchemaName()); self::assertSame('implicit_table', $metadata->getTableName()); @@ -1118,7 +1120,6 @@ public function testDiscriminatorColumnDefaultName() self::assertEquals('dtype', $class->discriminatorColumn->getColumnName()); } - } /** @@ -1296,6 +1297,8 @@ public static function loadMetadata(ClassMetadata $metadata) $joinColumn->setColumnName('user_id'); $joinColumn->setReferencedColumnName('id'); + $joinColumn->setNullable(false); + $joinColumn->setUnique(false); $joinColumns[] = $joinColumn; diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 5a90df827df..5517d68c9cf 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -263,9 +263,11 @@ public function testSetSubClassesInGlobalNamespace() public function testSetInvalidVersionMapping_ThrowsException() { $metadata = new ClassMetadata(CMS\CmsUser::class); - $property = new FieldMetadata('foo', 'foo', Type::getType('string')); + $property = new FieldMetadata('foo'); //new FieldMetadata('foo', 'foo', Type::getType('string')); $property->setDeclaringClass($metadata); + $property->setColumnName('foo'); + $property->setType(Type::getType('string')); $metadata->initializeReflection(new RuntimeReflectionService()); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index e71c3f88a4f..3860abbe8f7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -97,6 +97,8 @@ $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName("user_id"); $joinColumn->setReferencedColumnName("id"); +$joinColumn->setNullable(false); +$joinColumn->setUnique(false); $joinColumns[] = $joinColumn; From 252b0fecd4a7d55c87935c3a0fffaa035e05802d Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 27 Aug 2016 02:30:54 +0000 Subject: [PATCH 062/275] Strict types --- lib/Doctrine/ORM/Mapping/ColumnMetadata.php | 9 +++++++-- .../ORM/Mapping/DiscriminatorColumnMetadata.php | 3 +++ .../ORM/Mapping/Driver/AnnotationDriver.php | 16 +++++++++++++--- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 3 +++ lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php | 16 +++++++++++----- lib/Doctrine/ORM/Mapping/JoinTableMetadata.php | 1 + .../Doctrine/Tests/Models/DDC964/DDC964Admin.php | 2 +- .../Doctrine.Tests.Models.DDC964.DDC964Admin.php | 2 +- 8 files changed, 40 insertions(+), 12 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ColumnMetadata.php b/lib/Doctrine/ORM/Mapping/ColumnMetadata.php index 54aaa7ed1e9..40f0f9cae14 100644 --- a/lib/Doctrine/ORM/Mapping/ColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ColumnMetadata.php @@ -1,4 +1,7 @@ tableName = $tableName; } @@ -119,7 +124,7 @@ public function getColumnName() /** * @param string $columnName */ - public function setColumnName($columnName) + public function setColumnName(string $columnName) { $this->columnName = $columnName; } diff --git a/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php b/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php index f6fbd3bdf99..ad847188594 100644 --- a/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php @@ -1,4 +1,7 @@ setColumnName($joinColumnAnnot->name); - $joinColumn->setReferencedColumnName($joinColumnAnnot->referencedColumnName); - $joinColumn->setAliasedName($joinColumnAnnot->fieldName); + // @todo Remove conditionals for name and referencedColumnName once naming strategy is brought into drivers + if (! empty($joinColumnAnnot->name)) { + $joinColumn->setColumnName($joinColumnAnnot->name); + } + + if (! empty($joinColumnAnnot->referencedColumnName)) { + $joinColumn->setReferencedColumnName($joinColumnAnnot->referencedColumnName); + } + $joinColumn->setNullable($joinColumnAnnot->nullable); $joinColumn->setUnique($joinColumnAnnot->unique); + if (! empty($joinColumnAnnot->fieldName)) { + $joinColumn->setAliasedName($joinColumnAnnot->fieldName); + } + if (! empty($joinColumnAnnot->columnDefinition)) { $joinColumn->setColumnDefinition($joinColumnAnnot->columnDefinition); } diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index 9e9812c0db9..9343179565d 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -1,4 +1,7 @@ referencedColumnName = $referencedColumnName; } @@ -60,7 +63,7 @@ public function getAliasedName() /** * @param string $aliasedName */ - public function setAliasedName($aliasedName) + public function setAliasedName(string $aliasedName) { $this->aliasedName = $aliasedName; } @@ -76,11 +79,14 @@ public function getOnDelete() /** * @param string $onDelete */ - public function setOnDelete($onDelete) + public function setOnDelete(string $onDelete) { - $this->onDelete = $onDelete ? strtoupper($onDelete) : $onDelete; + $this->onDelete = strtoupper($onDelete); } + /** + * @return bool + */ public function isOnDeleteCascade() { return $this->onDelete === 'CASCADE'; diff --git a/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php b/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php index 1d11c2c746d..44d8e0a4f54 100644 --- a/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php +++ b/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php @@ -1,4 +1,5 @@ setColumnName('adminaddress_id'); $joinColumn->setReferencedColumnName('id'); - $joinColumn->setOnDelete(null); + $joinColumn->setOnDelete(''); $joinColumns[] = $joinColumn; diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php index 285d477fdd9..5aef22ccd5a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php @@ -8,7 +8,7 @@ $joinColumn->setColumnName('adminaddress_id'); $joinColumn->setReferencedColumnName('id'); -$joinColumn->setOnDelete(null); +$joinColumn->setOnDelete(''); $joinColumns[] = $joinColumn; From db6c7040445f755bbb1f6baa5b27229820d42289 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Tue, 30 Aug 2016 19:59:19 +0000 Subject: [PATCH 063/275] Merged sequenceGeneratorDefinition and customGeneratorDefinition into a single, unified structure generatorDefinition --- .../ORM/Annotation/CustomIdGenerator.php | 5 + .../ORM/Annotation/SequenceGenerator.php | 5 - .../ORM/Mapping/Builder/FieldBuilder.php | 33 ++--- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 124 +++++++----------- .../ORM/Mapping/ClassMetadataFactory.php | 29 ++-- .../ORM/Mapping/Driver/AnnotationDriver.php | 12 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 12 +- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 43 ++++++ .../ORM/Sequencing/AssignedGenerator.php | 12 +- .../BigIntegerIdentityGenerator.php | 6 +- .../{AbstractGenerator.php => Generator.php} | 12 +- .../ORM/Sequencing/IdentityGenerator.php | 2 +- .../ORM/Sequencing/SequenceGenerator.php | 12 +- .../ORM/Sequencing/TableGenerator.php | 12 +- lib/Doctrine/ORM/Sequencing/UuidGenerator.php | 12 +- .../Command/MappingDescribeCommand.php | 3 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 18 +-- .../ORM/Tools/Export/Driver/XmlExporter.php | 3 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 4 +- .../SchemaTool/PostgreSqlSchemaToolTest.php | 2 +- .../ORM/Functional/Ticket/DDC2415Test.php | 20 ++- .../ORM/Functional/Ticket/GH5804Test.php | 12 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 41 +++--- .../Mapping/BasicInheritanceMappingTest.php | 16 +-- .../ORM/Mapping/ClassMetadataFactoryTest.php | 34 ++++- .../Tests/ORM/Mapping/ClassMetadataTest.php | 9 +- .../Tests/ORM/Mapping/FieldBuilderTest.php | 15 ++- .../php/Doctrine.Tests.ORM.Mapping.Animal.php | 7 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 5 +- .../Doctrine.Tests.ORM.Mapping.User.dcm.xml | 2 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 9 +- .../Export/XmlClassMetadataExporterTest.php | 10 +- 32 files changed, 320 insertions(+), 221 deletions(-) rename lib/Doctrine/ORM/Sequencing/{AbstractGenerator.php => Generator.php} (89%) diff --git a/lib/Doctrine/ORM/Annotation/CustomIdGenerator.php b/lib/Doctrine/ORM/Annotation/CustomIdGenerator.php index 6ef48d91320..c949457a71f 100644 --- a/lib/Doctrine/ORM/Annotation/CustomIdGenerator.php +++ b/lib/Doctrine/ORM/Annotation/CustomIdGenerator.php @@ -29,4 +29,9 @@ final class CustomIdGenerator implements Annotation * @var string */ public $class; + + /** + * @var array + */ + public $arguments = []; } diff --git a/lib/Doctrine/ORM/Annotation/SequenceGenerator.php b/lib/Doctrine/ORM/Annotation/SequenceGenerator.php index 8897a222ca1..0de0184af5f 100644 --- a/lib/Doctrine/ORM/Annotation/SequenceGenerator.php +++ b/lib/Doctrine/ORM/Annotation/SequenceGenerator.php @@ -34,9 +34,4 @@ final class SequenceGenerator implements Annotation * @var integer */ public $allocationSize = 1; - - /** - * @var integer - */ - public $initialValue = 1; } diff --git a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php index baf136fd30d..0a7f66ef647 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php @@ -63,12 +63,7 @@ class FieldBuilder /** * @var array */ - private $sequenceDef; - - /** - * @var string|null - */ - private $customIdGenerator; + private $generatorDefinition; /** * @param ClassMetadataBuilder $builder @@ -234,16 +229,14 @@ public function isVersionField() * * @param string $sequenceName * @param int $allocationSize - * @param int $initialValue * * @return FieldBuilder */ - public function setSequenceGenerator($sequenceName, $allocationSize = 1, $initialValue = 1) + public function setSequenceGenerator($sequenceName, $allocationSize = 1) { - $this->sequenceDef = [ - 'sequenceName' => $sequenceName, + $this->generatorDefinition = [ + 'sequenceName' => $sequenceName, 'allocationSize' => $allocationSize, - 'initialValue' => $initialValue, ]; return $this; @@ -265,15 +258,19 @@ public function columnDefinition($def) /** * Set the FQCN of the custom ID generator. - * This class must extend \Doctrine\ORM\Sequencing\AbstractGenerator. + * This class must extend \Doctrine\ORM\Sequencing\Generator. * * @param string $customIdGenerator + * @param array $arguments * * @return $this */ - public function setCustomIdGenerator($customIdGenerator) + public function setCustomIdGenerator($customIdGenerator, array $arguments = []) { - $this->customIdGenerator = (string) $customIdGenerator; + $this->generatorDefinition = [ + 'class' => (string) $customIdGenerator, + 'arguments' => $arguments, + ]; return $this; } @@ -300,13 +297,9 @@ public function build() if ($this->version) { $cm->setVersionProperty($property); } - - if ($this->sequenceDef) { - $cm->setSequenceGeneratorDefinition($this->sequenceDef); - } - if ($this->customIdGenerator) { - $cm->setCustomGeneratorDefinition(['class' => $this->customIdGenerator]); + if ($this->generatorDefinition) { + $cm->setGeneratorDefinition($this->generatorDefinition); } return $this->builder; diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 3759cf908a9..e7fe2a0945d 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -226,23 +226,6 @@ class ClassMetadata implements ClassMetadataInterface */ public $rootEntityName; - /** - * READ-ONLY: The definition of custom generator. Only used for CUSTOM - * generator type - * - * The definition has the following structure: - * - * array( - * 'class' => 'ClassName', - * ) - * - * - * @var array - * - * @todo Merge with tableGeneratorDefinition into generic generatorDefinition - */ - public $customGeneratorDefinition; - /** * The name of the custom repository class used for the entity class. * (Optional). @@ -348,6 +331,36 @@ class ClassMetadata implements ClassMetadataInterface */ public $generatorType = self::GENERATOR_TYPE_NONE; + /** + * READ-ONLY: The definition of the identity generator of this class. + * In case of SEQUENCE generation strategy, the definition has the following structure: + * + * array( + * 'sequenceName' => 'name', + * 'allocationSize' => 20, + * ) + * + * + * In case of CUSTOM generation strategy, the definition has the following structure: + * + * array( + * 'class' => 'ClassName', + * ) + * + * + * @var array + */ + public $generatorDefinition; + + /** + * READ-ONLY: The ID generator used for generating IDs for this class. + * + * @var \Doctrine\ORM\Sequencing\Generator + * + * @todo Remove! + */ + public $idGenerator; + /** * @var array */ @@ -493,34 +506,6 @@ class ClassMetadata implements ClassMetadataInterface */ public $containsForeignIdentifier = false; - /** - * READ-ONLY: The ID generator used for generating IDs for this class. - * - * @var \Doctrine\ORM\Sequencing\AbstractGenerator - * - * @todo Remove! - */ - public $idGenerator; - - /** - * READ-ONLY: The definition of the sequence generator of this class. Only used for the - * SEQUENCE generation strategy. - * - * The definition has the following structure: - * - * array( - * 'sequenceName' => 'name', - * 'allocationSize' => 20, - * 'initialValue' => 1 - * ) - * - * - * @var array - * - * @todo Merge with tableGeneratorDefinition into generic generatorDefinition - */ - public $sequenceGeneratorDefinition; - /** * READ-ONLY: The policy used for change-tracking on entities of this class. * @@ -767,11 +752,12 @@ public function __sleep() $serialized[] = 'subClasses'; } - if ($this->generatorType != self::GENERATOR_TYPE_NONE) { + if ($this->generatorType !== self::GENERATOR_TYPE_NONE) { $serialized[] = 'generatorType'; - if ($this->generatorType == self::GENERATOR_TYPE_SEQUENCE) { - $serialized[] = 'sequenceGeneratorDefinition'; - } + } + + if ($this->generatorDefinition) { + $serialized[] = "generatorDefinition"; } if ($this->isMappedSuperclass) { @@ -814,10 +800,6 @@ public function __sleep() $serialized[] = 'isReadOnly'; } - if ($this->customGeneratorDefinition) { - $serialized[] = "customGeneratorDefinition"; - } - if ($this->cache) { $serialized[] = 'cache'; } @@ -2812,7 +2794,7 @@ public function getFieldForColumn($columnName) /** * Sets the ID generator used to generate IDs for instances of this class. * - * @param \Doctrine\ORM\Sequencing\AbstractGenerator $generator + * @param \Doctrine\ORM\Sequencing\Generator $generator * * @return void */ @@ -2822,42 +2804,36 @@ public function setIdGenerator($generator) } /** - * Sets definition. + * Sets the generator definition for this class. + * For sequence definition, it must have the following structure: * - * @param array $definition - * - * @return void - */ - public function setCustomGeneratorDefinition(array $definition) - { - $this->customGeneratorDefinition = $definition; - } - - /** - * Sets the definition of the sequence ID generator for this class. - * - * The definition must have the following structure: * * array( * 'sequenceName' => 'name', * 'allocationSize' => 20, - * 'initialValue' => 1, + * ) + * + * + * For custom definition, it must have the following structure: + * + * + * array( + * 'class' => 'Path\To\ClassName', + * 'arguments' => [], * ) * * * @param array $definition * * @return void - * - * @throws MappingException */ - public function setSequenceGeneratorDefinition(array $definition) + public function setGeneratorDefinition(array $definition) { - if ( ! isset($definition['sequenceName'])) { + if ($this->generatorType === ClassMetadata::GENERATOR_TYPE_SEQUENCE && ! isset($definition['sequenceName'])) { throw MappingException::missingSequenceName($this->name); } - $this->sequenceGeneratorDefinition = $definition; + $this->generatorDefinition = $definition; } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 2a98bd649d2..4bde0975133 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -147,13 +147,11 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS $class->setLifecycleCallbacks($parent->lifecycleCallbacks); $class->setChangeTrackingPolicy($parent->changeTrackingPolicy); - if ( ! empty($parent->customGeneratorDefinition) && empty($class->customGeneratorDefinition)) { - $class->setCustomGeneratorDefinition($parent->customGeneratorDefinition); - } - if ($parent->isMappedSuperclass && empty($class->customRepositoryClassName)) { $class->setCustomRepositoryClass($parent->customRepositoryClassName); } + + $this->inheritIdGeneratorMapping($class, $parent); } // Invoke driver @@ -166,9 +164,7 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS // If this class has a parent the id generator strategy is inherited. // However this is only true if the hierarchy of parents contains the root entity, // if it consists of mapped superclasses these don't necessarily include the id field. - if ($parent && $rootEntityFound) { - $this->inheritIdGeneratorMapping($class, $parent); - } else { + if (! ($parent && $rootEntityFound)) { $this->completeIdGeneratorMapping($class); } @@ -726,7 +722,7 @@ private function completeIdGeneratorMapping(ClassMetadata $class) case ClassMetadata::GENERATOR_TYPE_SEQUENCE: // If there is no sequence definition yet, create a default definition - $definition = $class->sequenceGeneratorDefinition; + $definition = $class->generatorDefinition; if ( ! $definition) { $sequenceName = $class->getSequenceName($platform); @@ -734,10 +730,9 @@ private function completeIdGeneratorMapping(ClassMetadata $class) $definition = [ 'sequenceName' => $platform->fixSchemaElementName($sequenceName), 'allocationSize' => 1, - 'initialValue' => 1, ]; - $class->setSequenceGeneratorDefinition($definition); + $class->setGeneratorDefinition($definition); } $sequenceName = $platform->quoteIdentifier($definition['sequenceName']); @@ -759,10 +754,10 @@ private function completeIdGeneratorMapping(ClassMetadata $class) break; case ClassMetadata::GENERATOR_TYPE_CUSTOM: - $definition = $class->customGeneratorDefinition; + $definition = $class->generatorDefinition; if ( ! class_exists($definition['class'])) { - throw new ORMException("Can't instantiate custom generator : " . $definition['class']); + throw new ORMException(sprintf('Cannot instantiate custom generator : %s', var_export($definition, true))); //$definition['class'])); } $class->setIdGenerator(new $definition['class']); @@ -781,16 +776,14 @@ private function completeIdGeneratorMapping(ClassMetadata $class) */ private function inheritIdGeneratorMapping(ClassMetadata $class, ClassMetadata $parent) { - if ($parent->isIdGeneratorSequence()) { - $class->setSequenceGeneratorDefinition($parent->sequenceGeneratorDefinition); - } elseif ($parent->isIdGeneratorTable()) { - $class->tableGeneratorDefinition = $parent->tableGeneratorDefinition; - } - if ($parent->generatorType) { $class->setIdGeneratorType($parent->generatorType); } + if ($parent->generatorDefinition) { + $class->generatorDefinition = $parent->generatorDefinition; + } + if ($parent->idGenerator) { $class->setIdGenerator($parent->idGenerator); } diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index ed3b21d502a..06300ef878e 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -335,17 +335,21 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat // Check for SequenceGenerator/TableGenerator definition if ($seqGeneratorAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\SequenceGenerator::class)) { - $metadata->setSequenceGeneratorDefinition( + $metadata->setGeneratorDefinition( [ - 'sequenceName' => $seqGeneratorAnnot->sequenceName, + 'sequenceName' => $seqGeneratorAnnot->sequenceName, 'allocationSize' => $seqGeneratorAnnot->allocationSize, - 'initialValue' => $seqGeneratorAnnot->initialValue ] ); } else if ($this->reader->getPropertyAnnotation($reflProperty, 'Doctrine\ORM\Mapping\TableGenerator')) { throw MappingException::tableIdGeneratorNotImplemented($className); } else if ($customGeneratorAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\CustomIdGenerator::class)) { - $metadata->setCustomGeneratorDefinition(['class' => $customGeneratorAnnot->class]); + $metadata->setGeneratorDefinition( + [ + 'class' => $customGeneratorAnnot->class, + 'arguments' => $customGeneratorAnnot->arguments, + ] + ); } } else if ($oneToOneAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\OneToOne::class)) { if ($idAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Id::class)) { diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 6c934f44c05..627ccf56ec9 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -330,17 +330,21 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) if (isset($idElement->{'sequence-generator'})) { $seqGenerator = $idElement->{'sequence-generator'}; - $metadata->setSequenceGeneratorDefinition( + $metadata->setGeneratorDefinition( [ - 'sequenceName' => (string) $seqGenerator['sequence-name'], + 'sequenceName' => (string) $seqGenerator['sequence-name'], 'allocationSize' => (string) $seqGenerator['allocation-size'], - 'initialValue' => (string) $seqGenerator['initial-value'] ] ); } else if (isset($idElement->{'custom-id-generator'})) { $customGenerator = $idElement->{'custom-id-generator'}; - $metadata->setCustomGeneratorDefinition(['class' => (string) $customGenerator['class']]); + $metadata->setGeneratorDefinition( + [ + 'class' => (string) $customGenerator['class'], + 'arguments' => [], + ] + ); } else if (isset($idElement->{'table-generator'})) { throw MappingException::tableIdGeneratorNotImplemented($className); } diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index 9343179565d..ee3d814f525 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -24,6 +24,7 @@ use Doctrine\Common\Persistence\Mapping\ReflectionService; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Sequencing\Generator; class FieldMetadata extends ColumnMetadata implements Property { @@ -42,6 +43,16 @@ class FieldMetadata extends ColumnMetadata implements Property */ private $name; + /** + * @var int + */ + private $identifierGeneratorType = ClassMetadata::GENERATOR_TYPE_NONE; + + /** + * @var array + */ + private $identifierGeneratorDefinition = []; + /** * FieldMetadata constructor. * @@ -87,6 +98,38 @@ public function getName() return $this->name; } + /** + * @return int + */ + public function getIdentifierGeneratorType() + { + return $this->identifierGeneratorType; + } + + /** + * @param int $identifierGeneratorType + */ + public function setIdentifierGeneratorType(int $identifierGeneratorType) + { + $this->identifierGeneratorType = $identifierGeneratorType; + } + + /** + * @return array + */ + public function getIdentifierGeneratorDefinition() + { + return $this->identifierGeneratorDefinition; + } + + /** + * @param array $identifierGeneratorDefinition + */ + public function setIdentifierGeneratorDefinition(array $identifierGeneratorDefinition) + { + $this->identifierGeneratorDefinition = $identifierGeneratorDefinition; + } + /** * {@inheritdoc} */ diff --git a/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php b/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php index 5b8c1309490..6659dcb2c67 100644 --- a/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php @@ -31,12 +31,12 @@ * @author Jonathan Wage * @author Roman Borschel */ -class AssignedGenerator extends AbstractGenerator +class AssignedGenerator implements Generator { /** * Returns the identifier assigned to the given entity. * - * {@inheritDoc} + * {@inheritdoc} * * @throws \Doctrine\ORM\ORMException */ @@ -63,4 +63,12 @@ public function generate(EntityManager $em, $entity) return $identifier; } + + /** + * {@inheritdoc} + */ + public function isPostInsertGenerator() + { + return false; + } } diff --git a/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php b/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php index 1386781ebc9..b09038161d6 100644 --- a/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php @@ -26,7 +26,7 @@ * that automatically get a database-generated, auto-incremented identifier on INSERT. * This generator obtains the last insert id after such an insert. */ -class BigIntegerIdentityGenerator extends AbstractGenerator +class BigIntegerIdentityGenerator implements Generator { /** * The name of the sequence to pass to lastInsertId(), if any. @@ -48,7 +48,7 @@ public function __construct($sequenceName = null) } /** - * {@inheritDoc} + * {@inheritdoc} */ public function generate(EntityManager $em, $entity) { @@ -56,7 +56,7 @@ public function generate(EntityManager $em, $entity) } /** - * {@inheritDoc} + * {@inheritdoc} */ public function isPostInsertGenerator() { diff --git a/lib/Doctrine/ORM/Sequencing/AbstractGenerator.php b/lib/Doctrine/ORM/Sequencing/Generator.php similarity index 89% rename from lib/Doctrine/ORM/Sequencing/AbstractGenerator.php rename to lib/Doctrine/ORM/Sequencing/Generator.php index 6cc3ab658c0..9cbb5321ec5 100644 --- a/lib/Doctrine/ORM/Sequencing/AbstractGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/Generator.php @@ -1,4 +1,7 @@ */ -class SequenceGenerator extends AbstractGenerator implements Serializable +class SequenceGenerator implements Generator, Serializable { /** * The allocation size of the sequence. @@ -67,7 +67,7 @@ public function __construct($sequenceName, $allocationSize) } /** - * {@inheritDoc} + * {@inheritdoc} */ public function generate(EntityManager $em, $entity) { @@ -129,4 +129,12 @@ public function unserialize($serialized) $this->_sequenceName = $array['sequenceName']; $this->_allocationSize = $array['allocationSize']; } + + /** + * {@inheritdoc} + */ + public function isPostInsertGenerator() + { + return false; + } } diff --git a/lib/Doctrine/ORM/Sequencing/TableGenerator.php b/lib/Doctrine/ORM/Sequencing/TableGenerator.php index 17e5ca9d23c..6d28db8785b 100644 --- a/lib/Doctrine/ORM/Sequencing/TableGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/TableGenerator.php @@ -30,7 +30,7 @@ * @author Jonathan Wage * @author Roman Borschel */ -class TableGenerator extends AbstractGenerator +class TableGenerator implements Generator { /** * @var string @@ -70,7 +70,7 @@ public function __construct($tableName, $sequenceName = 'default', $allocationSi } /** - * {@inheritDoc} + * {@inheritdoc} */ public function generate( EntityManager $em, $entity) @@ -106,4 +106,12 @@ public function generate( return $this->_nextValue++; } + + /** + * {@inheritdoc} + */ + public function isPostInsertGenerator() + { + return false; + } } diff --git a/lib/Doctrine/ORM/Sequencing/UuidGenerator.php b/lib/Doctrine/ORM/Sequencing/UuidGenerator.php index 0e9b35b9853..46d6c3f6599 100644 --- a/lib/Doctrine/ORM/Sequencing/UuidGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/UuidGenerator.php @@ -27,10 +27,10 @@ * @since 2.3 * @author Maarten de Keizer */ -class UuidGenerator extends AbstractGenerator +class UuidGenerator implements Generator { /** - * {@inheritDoc} + * {@inheritdoc} */ public function generate(EntityManager $em, $entity) { @@ -39,4 +39,12 @@ public function generate(EntityManager $em, $entity) return $conn->query($sql)->fetchColumn(0); } + + /** + * {@inheritdoc} + */ + public function isPostInsertGenerator() + { + return false; + } } diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index 882c1c160e6..c652eb1a921 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -92,7 +92,6 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage [ $this->formatField('Name', $metadata->name), $this->formatField('Root entity name', $metadata->rootEntityName), - $this->formatField('Custom generator definition', $metadata->customGeneratorDefinition), $this->formatField('Custom repository class', $metadata->customRepositoryClassName), $this->formatField('Mapped super class?', $metadata->isMappedSuperclass), $this->formatField('Embedded class?', $metadata->isEmbeddedClass), @@ -111,10 +110,10 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage $this->formatField('Discriminator value', $metadata->discriminatorValue), $this->formatField('Discriminator map', $metadata->discriminatorMap), $this->formatField('Generator type', $metadata->generatorType), + $this->formatField('Generator definition', $metadata->generatorDefinition), $this->formatField('Table', $metadata->table), $this->formatField('Composite identifier?', $metadata->isIdentifierComposite), $this->formatField('Foreign identifier?', $metadata->containsForeignIdentifier), - $this->formatField('Sequence generator definition', $metadata->sequenceGeneratorDefinition), $this->formatField('Change tracking policy', $metadata->changeTrackingPolicy), $this->formatField('Versioned?', $metadata->isVersioned()), $this->formatField('Version field', ($metadata->isVersioned() ? $metadata->versionProperty->getName() : '')), diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 869bf5b2a27..47797b64b7e 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -1696,22 +1696,18 @@ protected function generateFieldMappingPropertyDocBlock(FieldMetadata $propertyM $lines[] = $this->spaces.' * @' . $this->annotationsPrefix . 'GeneratedValue(strategy="' . $generatorType . '")'; } - if ($metadata->sequenceGeneratorDefinition) { - $sequenceGenerator = []; + if ($metadata->generatorDefinition) { + $generator = []; - if (isset($metadata->sequenceGeneratorDefinition['sequenceName'])) { - $sequenceGenerator[] = 'sequenceName="' . $metadata->sequenceGeneratorDefinition['sequenceName'] . '"'; + if (isset($metadata->generatorDefinition['sequenceName'])) { + $generator[] = 'sequenceName="' . $metadata->generatorDefinition['sequenceName'] . '"'; } - if (isset($metadata->sequenceGeneratorDefinition['allocationSize'])) { - $sequenceGenerator[] = 'allocationSize=' . $metadata->sequenceGeneratorDefinition['allocationSize']; + if (isset($metadata->generatorDefinition['allocationSize'])) { + $generator[] = 'allocationSize=' . $metadata->generatorDefinition['allocationSize']; } - if (isset($metadata->sequenceGeneratorDefinition['initialValue'])) { - $sequenceGenerator[] = 'initialValue=' . $metadata->sequenceGeneratorDefinition['initialValue']; - } - - $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'SequenceGenerator(' . implode(', ', $sequenceGenerator) . ')'; + $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'SequenceGenerator(' . implode(', ', $generator) . ')'; } } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index d9feb2ed2ff..29a24abd926 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -462,7 +462,7 @@ private function exportTableOptions(\SimpleXMLElement $parentXml, array $options */ private function exportSequenceInformation(\SimpleXMLElement $identifierXmlNode, ClassMetadata $metadata) { - $sequenceDefinition = $metadata->sequenceGeneratorDefinition; + $sequenceDefinition = $metadata->generatorDefinition; if (! ($metadata->generatorType === ClassMetadata::GENERATOR_TYPE_SEQUENCE && $sequenceDefinition)) { return; @@ -472,7 +472,6 @@ private function exportSequenceInformation(\SimpleXMLElement $identifierXmlNode, $sequenceGeneratorXml->addAttribute('sequence-name', $sequenceDefinition['sequenceName']); $sequenceGeneratorXml->addAttribute('allocation-size', $sequenceDefinition['allocationSize']); - $sequenceGeneratorXml->addAttribute('initial-value', $sequenceDefinition['initialValue']); } /** diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 2980b9c1fb1..5c3f1a15910 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -316,11 +316,11 @@ public function getSchemaFromMetadata(array $classes) $processedClasses[$class->name] = true; if ($class->isIdGeneratorSequence() && $class->name === $class->rootEntityName) { - $definition = $class->sequenceGeneratorDefinition; + $definition = $class->generatorDefinition; $quotedName = $this->platform->quoteIdentifier($definition['sequenceName']); if ( ! $schema->hasSequence($quotedName)) { - $schema->createSequence($quotedName, $definition['allocationSize'], $definition['initialValue']); + $schema->createSequence($quotedName, $definition['allocationSize']); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php index f165661aa18..e2b976eb3c6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php @@ -21,7 +21,7 @@ public function testPostgresMetadataSequenceIncrementedBy10() { $address = $this->_em->getClassMetadata(Models\CMS\CmsAddress::class); - self::assertEquals(1, $address->sequenceGeneratorDefinition['allocationSize']); + self::assertEquals(1, $address->generatorDefinition['allocationSize']); } public function testGetCreateSchemaSql() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php index 8e012b937f4..38d5c105094 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php @@ -7,6 +7,7 @@ use Doctrine\ORM\Sequencing\AbstractGenerator; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\Driver\StaticPHPDriver; +use Doctrine\ORM\Sequencing\Generator; /** * @group DDC-2415 @@ -33,8 +34,8 @@ public function testTicket() $childMetadata = $this->_em->getClassMetadata(DDC2415ChildEntity::class); self::assertEquals($parentMetadata->generatorType, $childMetadata->generatorType); - self::assertEquals($parentMetadata->customGeneratorDefinition, $childMetadata->customGeneratorDefinition); - self::assertEquals(DDC2415Generator::class, $parentMetadata->customGeneratorDefinition['class']); + self::assertEquals($parentMetadata->generatorDefinition, $childMetadata->generatorDefinition); + self::assertEquals(DDC2415Generator::class, $parentMetadata->generatorDefinition['class']); $e1 = new DDC2415ChildEntity("ChildEntity 1"); $e2 = new DDC2415ChildEntity("ChildEntity 2"); @@ -63,7 +64,13 @@ public static function loadMetadata(ClassMetadata $metadata) $metadata->addProperty('id', Type::getType('string'), ['id' => true]); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); - $metadata->setCustomGeneratorDefinition(['class' => DDC2415Generator::class]); + + $metadata->setGeneratorDefinition( + [ + 'class' => DDC2415Generator::class, + 'arguments' => [], + ] + ); $metadata->isMappedSuperclass = true; } @@ -89,10 +96,15 @@ public static function loadMetadata(ClassMetadata $metadata) } } -class DDC2415Generator extends AbstractGenerator +class DDC2415Generator implements Generator { public function generate(EntityManager $em, $entity) { return md5($entity->getName()); } + + public function isPostInsertGenerator() + { + return false; + } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5804Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5804Test.php index 77d4fbc878e..f503ce31453 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5804Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5804Test.php @@ -5,7 +5,7 @@ use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\EntityManager; -use Doctrine\ORM\Id\AbstractIdGenerator; +use Doctrine\ORM\Sequencing\Generator; use Doctrine\Tests\OrmFunctionalTestCase; /** @@ -41,7 +41,7 @@ public function testTextColumnSaveAndRetrieve2() } } -final class GH5804Generator extends AbstractIdGenerator +final class GH5804Generator implements Generator { /** * {@inheritdoc} @@ -50,6 +50,14 @@ public function generate(EntityManager $em, $entity) { return 'test5804'; } + + /** + * {@inheritdoc} + */ + public function isPostInsertGenerator() + { + return false; + } } final class GH5804Type extends Type diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 5a7f7ad43df..06e628a3a56 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -166,14 +166,13 @@ public function testEntityOptions($class) */ public function testEntitySequence($class) { - self::assertInternalType('array', $class->sequenceGeneratorDefinition, 'No Sequence Definition set on this driver.'); + self::assertInternalType('array', $class->generatorDefinition, 'No Sequence Definition set on this driver.'); self::assertEquals( [ - 'sequenceName' => 'tablename_seq', + 'sequenceName' => 'tablename_seq', 'allocationSize' => 100, - 'initialValue' => 1, ], - $class->sequenceGeneratorDefinition + $class->generatorDefinition ); } @@ -182,7 +181,14 @@ public function testEntityCustomGenerator() $class = $this->createClassMetadata(Animal::class); self::assertEquals(ClassMetadata::GENERATOR_TYPE_CUSTOM, $class->generatorType, "Generator Type"); - self::assertEquals(["class" => "stdClass"], $class->customGeneratorDefinition, "Custom Generator Definition"); + self::assertEquals( + [ + 'class' => 'stdClass', + 'arguments' => [], + ], + $class->generatorDefinition, + "Generator Definition" + ); } @@ -1138,8 +1144,8 @@ class User /** * @Id * @Column(type="integer", options={"foo": "bar", "unsigned": false}) - * @generatedValue(strategy="AUTO") - * @SequenceGenerator(sequenceName="tablename_seq", initialValue=1, allocationSize=100) + * @GeneratedValue(strategy="AUTO") + * @SequenceGenerator(sequenceName="tablename_seq", allocationSize=100) **/ public $id; @@ -1333,20 +1339,10 @@ public static function loadMetadata(ClassMetadata $metadata) ], ]; - $metadata->table['indexes'] = [ - 'name_idx' => [ - 'columns' => ['name'] - ], - 0 => [ // Unnamed index - 'columns' => ['user_email'] - ], - ]; - - $metadata->setSequenceGeneratorDefinition( + $metadata->setGeneratorDefinition( [ - 'sequenceName' => 'tablename_seq', + 'sequenceName' => 'tablename_seq', 'allocationSize' => 100, - 'initialValue' => 1, ] ); @@ -1376,7 +1372,12 @@ abstract class Animal public static function loadMetadata(ClassMetadata $metadata) { $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); - $metadata->setCustomGeneratorDefinition(["class" => "stdClass"]); + $metadata->setGeneratorDefinition( + [ + 'class' => 'stdClass', + 'arguments' => [], + ] + ); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index 7337c89771d..e6ac8ce8107 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -164,8 +164,8 @@ public function testGeneratedValueFromMappedSuperclass() self::assertInstanceOf(SequenceGenerator::class, $class->idGenerator); self::assertEquals( - ['allocationSize' => 1, 'initialValue' => 10, 'sequenceName' => 'foo'], - $class->sequenceGeneratorDefinition + ['allocationSize' => 1, 'sequenceName' => 'foo'], + $class->generatorDefinition ); } @@ -180,8 +180,8 @@ public function testSequenceDefinitionInHierarchyWithSandwichMappedSuperclass() self::assertInstanceOf(SequenceGenerator::class, $class->idGenerator); self::assertEquals( - ['allocationSize' => 1, 'initialValue' => 10, 'sequenceName' => 'foo'], - $class->sequenceGeneratorDefinition + ['allocationSize' => 1, 'sequenceName' => 'foo'], + $class->generatorDefinition ); } @@ -196,8 +196,8 @@ public function testMultipleMappedSuperclasses() self::assertInstanceOf(SequenceGenerator::class, $class->idGenerator); self::assertEquals( - ['allocationSize' => 1, 'initialValue' => 10, 'sequenceName' => 'foo'], - $class->sequenceGeneratorDefinition + ['allocationSize' => 1, 'sequenceName' => 'foo'], + $class->generatorDefinition ); } @@ -292,7 +292,7 @@ abstract class HierarchyBase { /** * @Column(type="integer") @Id @GeneratedValue(strategy="SEQUENCE") - * @SequenceGenerator(sequenceName="foo", initialValue=10) + * @SequenceGenerator(sequenceName="foo") * @var int */ public $id; @@ -343,7 +343,7 @@ abstract class SuperclassBase { /** * @Column(type="integer") @Id @GeneratedValue(strategy="SEQUENCE") - * @SequenceGenerator(sequenceName="foo", initialValue=10) + * @SequenceGenerator(sequenceName="foo") */ public $id; } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index a376e34ce4d..27bd498e240 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -13,7 +13,7 @@ use Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs; use Doctrine\ORM\Events; use Doctrine\ORM\Mapping\JoinColumnMetadata; -use Doctrine\ORM\Sequencing\AbstractGenerator; +use Doctrine\ORM\Sequencing\Generator; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\MappingException; @@ -71,9 +71,16 @@ public function testGetMetadataForSingleClass() public function testGetMetadataFor_ReturnsLoadedCustomIdGenerator() { $cm1 = $this->_createValidClassMetadata(); + $cm1->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); - $cm1->customGeneratorDefinition = ['class' => CustomIdGenerator::class]; + + $cm1->generatorDefinition = [ + 'class' => CustomIdGenerator::class, + 'arguments' => [], + ]; + $cmf = $this->_createTestFactory(); + $cmf->setMetadataForClass($cm1->name, $cm1); $actual = $cmf->getMetadataFor($cm1->name); @@ -85,10 +92,18 @@ public function testGetMetadataFor_ReturnsLoadedCustomIdGenerator() public function testGetMetadataFor_ThrowsExceptionOnUnknownCustomGeneratorClass() { $cm1 = $this->_createValidClassMetadata(); + $cm1->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); - $cm1->customGeneratorDefinition = ["class" => "NotExistingGenerator"]; + + $cm1->generatorDefinition = [ + 'class' => 'NotExistingGenerator', + 'arguments' => [], + ]; + $cmf = $this->_createTestFactory(); + $cmf->setMetadataForClass($cm1->name, $cm1); + $this->expectException(ORMException::class); $actual = $cmf->getMetadataFor($cm1->name); @@ -494,9 +509,20 @@ class TestEntity1 private $embedded; } -class CustomIdGenerator extends AbstractGenerator +class CustomIdGenerator implements Generator { + /** + * {@inheritdoc} + */ public function generate(EntityManager $em, $entity) { } + + /** + * {@inheritdoc} + */ + public function isPostInsertGenerator() + { + return false; + } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 5517d68c9cf..2211cee5346 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -1329,10 +1329,13 @@ public function testManyToManySelfReferencingNamingStrategyDefaults() public function testSetSequenceGeneratorThrowsExceptionWhenSequenceNameIsMissing() { $cm = new ClassMetadata(CMS\CmsUser::class); + + $cm->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); $cm->initializeReflection(new RuntimeReflectionService()); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - $cm->setSequenceGeneratorDefinition([]); + + $cm->setGeneratorDefinition([]); } /** @@ -1343,9 +1346,9 @@ public function testQuotedSequenceName() $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->setSequenceGeneratorDefinition(['sequenceName' => 'foo']); + $cm->setGeneratorDefinition(['sequenceName' => 'foo', 'allocationSize' => 1]); - self::assertEquals(['sequenceName' => 'foo'], $cm->sequenceGeneratorDefinition); + self::assertEquals(['sequenceName' => 'foo', 'allocationSize' => 1], $cm->generatorDefinition); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/FieldBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/FieldBuilderTest.php index 4d73c8f910f..54ec4b7e8aa 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/FieldBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/FieldBuilderTest.php @@ -11,8 +11,7 @@ class FieldBuilderTest extends OrmTestCase { public function testCustomIdGeneratorCanBeSet() { - $cmBuilder = new ClassMetadataBuilder(new ClassMetadata(CmsUser::class)); - + $cmBuilder = new ClassMetadataBuilder(new ClassMetadata(CmsUser::class)); $fieldBuilder = $cmBuilder->createField('aField', 'string'); $fieldBuilder->generatedValue('CUSTOM'); @@ -20,7 +19,15 @@ public function testCustomIdGeneratorCanBeSet() $fieldBuilder->build(); - self::assertEquals(ClassMetadata::GENERATOR_TYPE_CUSTOM, $cmBuilder->getClassMetadata()->generatorType); - self::assertEquals(['class' => 'stdClass'], $cmBuilder->getClassMetadata()->customGeneratorDefinition); + $metadata = $cmBuilder->getClassMetadata(); + + self::assertEquals(ClassMetadata::GENERATOR_TYPE_CUSTOM, $metadata->generatorType); + self::assertEquals( + [ + 'class' => 'stdClass', + 'arguments' => [], + ], + $metadata->generatorDefinition + ); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php index 074ba2a8618..0c05f4fa1f7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php @@ -40,4 +40,9 @@ $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); -$metadata->setCustomGeneratorDefinition(["class" => "stdClass"]); +$metadata->setGeneratorDefinition( + [ + 'class' => 'stdClass', + 'arguments' => [], + ] +); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index 3860abbe8f7..ea92d507228 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -146,10 +146,9 @@ 0 => ['columns' => ['user_email']] ]; -$metadata->setSequenceGeneratorDefinition( +$metadata->setGeneratorDefinition( [ - 'sequenceName' => 'tablename_seq', + 'sequenceName' => 'tablename_seq', 'allocationSize' => 100, - 'initialValue' => 1, ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml index bbf29aeaf70..49686f48ea9 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml +++ b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml @@ -38,7 +38,7 @@ - + diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 3b7143d9480..6de775b83db 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -662,11 +662,10 @@ public function testGenerateEntityWithSequenceGenerator() $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); - $metadata->setSequenceGeneratorDefinition( + $metadata->setGeneratorDefinition( [ - 'sequenceName' => 'DDC1784_ID_SEQ', - 'allocationSize' => 1, - 'initialValue' => 2 + 'sequenceName' => 'DDC1784_ID_SEQ', + 'allocationSize' => 1, ] ); @@ -685,7 +684,7 @@ public function testGenerateEntityWithSequenceGenerator() self::assertContains('@Id', $docComment); self::assertContains('@Column(name="id", type="integer")', $docComment); self::assertContains('@GeneratedValue(strategy="SEQUENCE")', $docComment); - self::assertContains('@SequenceGenerator(sequenceName="DDC1784_ID_SEQ", allocationSize=1, initialValue=2)', $docComment); + self::assertContains('@SequenceGenerator(sequenceName="DDC1784_ID_SEQ", allocationSize=1)', $docComment); } /** diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php index c5f80f073c4..68ceda51e9d 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php @@ -49,11 +49,11 @@ public function testSequenceGenerator() { $metadata->addProperty('id', Type::getType('integer'), ["id" => true]); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); - $metadata->setSequenceGeneratorDefinition( + + $metadata->setGeneratorDefinition( [ - 'sequenceName' => 'seq_entity_test_id', - 'allocationSize' => 5, - 'initialValue' => 1 + 'sequenceName' => 'seq_entity_test_id', + 'allocationSize' => 5, ] ); @@ -67,7 +67,7 @@ public function testSequenceGenerator() { - + From a84399199a1a1f80648419979d6fa330c2a4736d Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Tue, 30 Aug 2016 20:52:38 +0000 Subject: [PATCH 064/275] Checks for references, proxies and retrievals on EM. Removed todo from UnitOfWork --- lib/Doctrine/ORM/EntityManager.php | 59 ++++++++++++++++--- lib/Doctrine/ORM/PersistentCollection.php | 2 +- .../ORM/Tools/Export/Driver/XmlExporter.php | 13 ++-- .../ORM/Tools/Pagination/WhereInWalker.php | 1 + lib/Doctrine/ORM/UnitOfWork.php | 12 ++-- 5 files changed, 62 insertions(+), 25 deletions(-) diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index c954276c7c3..78f18ffdd73 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -472,9 +472,23 @@ public function getReference($entityName, $id) $class = $this->metadataFactory->getMetadataFor(ltrim($entityName, '\\')); if ( ! is_array($id)) { + if ($class->isIdentifierComposite) { + throw ORMInvalidArgumentException::invalidCompositeIdentifier(); + } + $id = [$class->identifier[0] => $id]; } + foreach ($id as $i => $value) { + if (is_object($value) && $this->metadataFactory->hasMetadataFor(ClassUtils::getClass($value))) { + $id[$i] = $this->unitOfWork->getSingleIdentifierValue($value); + + if ($id[$i] === null) { + throw ORMInvalidArgumentException::invalidIdentifierBindingEntity(); + } + } + } + $sortedId = []; foreach ($class->identifier as $identifier) { @@ -509,24 +523,53 @@ public function getReference($entityName, $id) /** * {@inheritDoc} */ - public function getPartialReference($entityName, $identifier) + public function getPartialReference($entityName, $id) { $class = $this->metadataFactory->getMetadataFor(ltrim($entityName, '\\')); - // Check identity map first, if its already in there just return it. - if (($entity = $this->unitOfWork->tryGetById($identifier, $class->rootEntityName)) !== false) { - return ($entity instanceof $class->name) ? $entity : null; + if ( ! is_array($id)) { + if ($class->isIdentifierComposite) { + throw ORMInvalidArgumentException::invalidCompositeIdentifier(); + } + + $id = [$class->identifier[0] => $id]; } - if ( ! is_array($identifier)) { - $identifier = [$class->identifier[0] => $identifier]; + foreach ($id as $i => $value) { + if (is_object($value) && $this->metadataFactory->hasMetadataFor(ClassUtils::getClass($value))) { + $id[$i] = $this->unitOfWork->getSingleIdentifierValue($value); + + if ($id[$i] === null) { + throw ORMInvalidArgumentException::invalidIdentifierBindingEntity(); + } + } + } + + $sortedId = []; + + foreach ($class->identifier as $identifier) { + if ( ! isset($id[$identifier])) { + throw ORMException::missingIdentifierField($class->name, $identifier); + } + + $sortedId[$identifier] = $id[$identifier]; + unset($id[$identifier]); + } + + if ($id) { + throw ORMException::unrecognizedIdentifierFields($class->name, array_keys($id)); + } + + // Check identity map first, if its already in there just return it. + if (($entity = $this->unitOfWork->tryGetById($sortedId, $class->rootEntityName)) !== false) { + return ($entity instanceof $class->name) ? $entity : null; } $entity = $class->newInstance(); - $class->assignIdentifier($entity, $identifier); + $class->assignIdentifier($entity, $sortedId); - $this->unitOfWork->registerManaged($entity, $identifier, []); + $this->unitOfWork->registerManaged($entity, $sortedId, []); $this->unitOfWork->markReadOnly($entity); return $entity; diff --git a/lib/Doctrine/ORM/PersistentCollection.php b/lib/Doctrine/ORM/PersistentCollection.php index 2210c3c310c..2eaebaa142e 100644 --- a/lib/Doctrine/ORM/PersistentCollection.php +++ b/lib/Doctrine/ORM/PersistentCollection.php @@ -295,7 +295,7 @@ private function changed() $this->association['type'] === ClassMetadata::MANY_TO_MANY && $this->owner && $this->em->getClassMetadata(get_class($this->owner))->isChangeTrackingNotify()) { - $this->em->getUnitOfWork()->scheduleForDirtyCheck($this->owner); + $this->em->getUnitOfWork()->scheduleForSynchronization($this->owner); } } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 29a24abd926..0c58c17c05a 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -142,7 +142,7 @@ public function exportClassMetadata(ClassMetadata $metadata) foreach ($properties as $name => $property) { if ($property->isPrimaryKey()) { - $id[$name]['property'] = $property; + $id[$name] = $property; unset($properties[$name]); } @@ -150,20 +150,15 @@ public function exportClassMetadata(ClassMetadata $metadata) /*foreach ($metadata->associationMappings as $name => $assoc) { if (isset($assoc['id']) && $assoc['id']) { - $id[$name]['associations'] = [ + $id[$name] = [ 'fieldName' => $name, 'associationKey' => true, ]; } }*/ - if ( ! $metadata->isIdentifierComposite && $idGeneratorType = $this->_getIdGeneratorTypeString($metadata->generatorType)) { - $id[$metadata->getSingleIdentifierFieldName()]['generator']['strategy'] = $idGeneratorType; - } - if ($id) { - foreach ($id as $field) { - $property = $field['property']; + foreach ($id as $property) { $idXml = $root->addChild('id'); $idXml->addAttribute('name', $property->getName()); $idXml->addAttribute('type', $property->getTypeName()); @@ -173,7 +168,7 @@ public function exportClassMetadata(ClassMetadata $metadata) $idXml->addAttribute('length', $property->getLength()); } - /*if (isset($field['associationKey']) && $field['associationKey']) { + /*if (isset($property['associationKey']) && $property['associationKey']) { $idXml->addAttribute('association-key', 'true'); }*/ diff --git a/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php b/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php index 5fa4e2d94c4..356e5167baf 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php @@ -111,6 +111,7 @@ public function walkSelectStatement(SelectStatement $AST) $conditionalPrimary = new ConditionalPrimary; $conditionalPrimary->simpleConditionalExpression = $expression; + if ($AST->whereClause) { if ($AST->whereClause->conditionalExpression instanceof ConditionalTerm) { $AST->whereClause->conditionalExpression->conditionalFactors[] = $conditionalPrimary; diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index d6de80f92b0..ccf8bce4aa3 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -1664,7 +1664,7 @@ private function doPersist($entity, array &$visited) case self::STATE_MANAGED: // Nothing to do, except if policy is "deferred explicit" if ($class->isChangeTrackingDeferredExplicit()) { - $this->scheduleForDirtyCheck($entity); + $this->scheduleForSynchronization($entity); } break; @@ -1867,7 +1867,7 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, arra $visited[$oid] = $managedCopy; // mark visited if ($class->isChangeTrackingDeferredExplicit()) { - $this->scheduleForDirtyCheck($entity); + $this->scheduleForSynchronization($entity); } } @@ -2961,10 +2961,8 @@ public function tryGetById($id, $rootClassName) * @param object $entity The entity to schedule for dirty-checking. * * @return void - * - * @todo Rename: scheduleForSynchronization */ - public function scheduleForDirtyCheck($entity) + public function scheduleForSynchronization($entity) { $rootClassName = $this->em->getClassMetadata(get_class($entity))->rootEntityName; @@ -3135,7 +3133,7 @@ public function propertyChanged($entity, $propertyName, $oldValue, $newValue) $this->entityChangeSets[$oid][$propertyName] = [$oldValue, $newValue]; if ( ! isset($this->scheduledForSynchronization[$class->rootEntityName][$oid])) { - $this->scheduleForDirtyCheck($entity); + $this->scheduleForSynchronization($entity); } } @@ -3439,7 +3437,7 @@ private function mergeEntityStateIntoManagedCopy($entity, $managedCopy) && $assoc2['type'] == ClassMetadata::MANY_TO_MANY && $class->isChangeTrackingNotify() ) { - $this->scheduleForDirtyCheck($managedCopy); + $this->scheduleForSynchronization($managedCopy); } } } From f9ad31abb68cb947bfa0c5b633aa9d53f8878d24 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Tue, 30 Aug 2016 23:41:13 +0000 Subject: [PATCH 065/275] Simplified property inheritance logic when loading class metadata --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 24 ------------------- .../ORM/Mapping/Driver/AnnotationDriver.php | 9 +------ .../ORM/Functional/Ticket/DDC719Test.php | 2 +- .../ORM/Query/SelectSqlGenerationTest.php | 2 +- 4 files changed, 3 insertions(+), 34 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index e7fe2a0945d..215ed4be8a4 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1999,30 +1999,6 @@ public function isInheritedProperty($fieldName) return ! ($declaringClass->name === $this->name); } - /** - * Checks whether a mapped association field is inherited from a superclass. - * - * @param string $fieldName - * - * @return boolean TRUE if the field is inherited, FALSE otherwise. - */ - public function isInheritedAssociation($fieldName) - { - return isset($this->associationMappings[$fieldName]['inherited']); - } - - /** - * Checks whether a mapped embedded field is inherited from a superclass. - * - * @param string $fieldName - * - * @return boolean TRUE if the field is inherited, FALSE otherwise. - */ - public function isInheritedEmbeddedClass($fieldName) - { - //return isset($this->embeddedClasses[$fieldName]['inherited']); - } - /** * Sets the primary table definition. The provided array supports the * following structure: diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 06300ef878e..2617f5b83fb 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -273,14 +273,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat // Evaluate annotations on properties/fields /* @var $reflProperty \ReflectionProperty */ foreach ($class->getProperties() as $reflProperty) { - /*if ($reflProperty->getDeclaringClass()->name !== $class->name) { - continue; - }*/ - - if (($metadata->isMappedSuperclass && ! $reflProperty->isPrivate()) - || (($property = $metadata->getProperty($reflProperty->name)) !== null && $metadata->isInheritedProperty($property->getName())) - || $metadata->isInheritedAssociation($reflProperty->name) - || $metadata->isInheritedEmbeddedClass($reflProperty->name)) { + if ($reflProperty->getDeclaringClass()->name !== $class->name) { continue; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php index b04ef7b292e..881acf302f1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php @@ -22,7 +22,7 @@ public function testIsEmptySqlGeneration() ); self::assertSQLEquals( - 'SELECT g0_."name" AS name_0, g0_."description" AS description_1, g0_."id" AS id_2, g1_."name" AS name_3, g1_."description" AS description_4, g1_."id" AS id_5 FROM "groups" g0_ LEFT JOIN "groups_groups" g2_ ON g0_."id" = g2_."parent_id" LEFT JOIN "groups" g1_ ON g1_."id" = g2_."child_id" WHERE (SELECT COUNT(*) FROM "groups_groups" g3_ WHERE g3_."child_id" = g0_."id") = 0', + 'SELECT g0_."id" AS id_0, g0_."name" AS name_1, g0_."description" AS description_2, g1_."id" AS id_3, g1_."name" AS name_4, g1_."description" AS description_5 FROM "groups" g0_ LEFT JOIN "groups_groups" g2_ ON g0_."id" = g2_."parent_id" LEFT JOIN "groups" g1_ ON g1_."id" = g2_."child_id" WHERE (SELECT COUNT(*) FROM "groups_groups" g3_ WHERE g3_."child_id" = g0_."id") = 0', $q->getSQL() ); } diff --git a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php index 066e6fcb7eb..e50e8715da3 100644 --- a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php @@ -1159,7 +1159,7 @@ public function testMappedSuperclassAssociationJoin() { $this->assertSqlGeneration( 'SELECT f FROM Doctrine\Tests\Models\DirectoryTree\File f JOIN f.parentDirectory d WHERE f.id = ?1', - 'SELECT f0_."id" AS id_0, f0_."extension" AS extension_1, f0_."name" AS name_2 FROM "file" f0_ INNER JOIN "Directory" d1_ ON f0_."parentDirectory_id" = d1_."id" WHERE f0_."id" = ?' + 'SELECT f0_."id" AS id_0, f0_."name" AS name_1, f0_."extension" AS extension_2 FROM "file" f0_ INNER JOIN "Directory" d1_ ON f0_."parentDirectory_id" = d1_."id" WHERE f0_."id" = ?' ); } From 96b90a555d9e0da5c18dc208911696d9f6b68ddf Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 7 Sep 2016 01:36:39 +0000 Subject: [PATCH 066/275] Moved FieldMetadata creation out of ClassMetadata --- lib/Doctrine/ORM/Annotation/Column.php | 4 +- .../Mapping/Builder/ClassMetadataBuilder.php | 47 +++- .../ORM/Mapping/Builder/FieldBuilder.php | 13 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 121 ++++------ .../ORM/Mapping/Driver/AnnotationDriver.php | 165 +++++++++---- .../ORM/Mapping/Driver/DatabaseDriver.php | 58 +++-- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 185 +++++++------- lib/Doctrine/ORM/Mapping/MappingException.php | 13 + .../ORM/Tools/Export/Driver/PhpExporter.php | 60 ++++- .../Doctrine/Tests/Models/CMS/CmsAddress.php | 43 ++-- .../Tests/Models/Company/CompanyContract.php | 20 +- .../Models/Company/CompanyFixContract.php | 12 +- .../Models/Company/CompanyFlexContract.php | 24 +- .../Company/CompanyFlexUltraContract.php | 11 +- .../DDC1476EntityWithDefaultFieldType.php | 13 +- .../Models/DDC2825/ExplicitSchemaAndTable.php | 10 +- .../DDC2825/SchemaAndTableInTableName.php | 10 +- .../Tests/Models/DDC3579/DDC3579User.php | 35 ++- .../Models/DDC869/DDC869ChequePayment.php | 7 +- .../Models/DDC869/DDC869CreditCardPayment.php | 7 +- .../Tests/Models/DDC869/DDC869Payment.php | 13 +- .../Tests/Models/DDC889/DDC889Class.php | 8 +- .../Tests/Models/DDC889/DDC889Entity.php | 2 - .../Tests/Models/DDC889/DDC889SuperClass.php | 7 +- .../Tests/Models/DDC964/DDC964Guest.php | 42 +++- .../Tests/Models/DDC964/DDC964User.php | 40 ++- .../ORM/Functional/Ticket/DDC2415Test.php | 14 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 147 ++++++------ .../ORM/Mapping/ClassMetadataFactoryTest.php | 17 +- .../Mapping/ClassMetadataLoadEventTest.php | 29 ++- .../Tests/ORM/Mapping/ClassMetadataTest.php | 223 ++++++++++++----- .../Doctrine.Tests.Models.CMS.CmsAddress.php | 20 +- .../php/Doctrine.Tests.Models.Cache.City.php | 12 +- ...e.Tests.Models.Company.CompanyContract.php | 12 +- ...ests.Models.Company.CompanyFixContract.php | 8 +- ...sts.Models.Company.CompanyFlexContract.php | 16 +- ...odels.Company.CompanyFlexUltraContract.php | 8 +- ...1476.DDC1476EntityWithDefaultFieldType.php | 13 +- ....Models.DDC2825.ExplicitSchemaAndTable.php | 8 +- ...dels.DDC2825.SchemaAndTableInTableName.php | 7 +- ...trine.Tests.Models.DDC3579.DDC3579User.php | 37 ++- ...ests.Models.DDC869.DDC869ChequePayment.php | 6 +- ....Models.DDC869.DDC869CreditCardPayment.php | 6 +- ...rine.Tests.Models.DDC869.DDC869Payment.php | 13 +- ...ctrine.Tests.Models.DDC889.DDC889Class.php | 7 +- ...e.Tests.Models.DDC889.DDC889SuperClass.php | 6 +- ...ctrine.Tests.Models.DDC964.DDC964Guest.php | 30 ++- ...octrine.Tests.Models.DDC964.DDC964User.php | 34 ++- .../php/Doctrine.Tests.ORM.Mapping.Animal.php | 18 +- .../Doctrine.Tests.ORM.Mapping.Comment.php | 17 +- ...ctrine.Tests.ORM.Mapping.DDC1170Entity.php | 25 +- ...octrine.Tests.ORM.Mapping.DDC807Entity.php | 6 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 62 ++--- .../Tests/ORM/Tools/EntityGeneratorTest.php | 227 +++++++++--------- .../Export/XmlClassMetadataExporterTest.php | 23 +- .../Doctrine.Tests.ORM.Tools.Export.User.php | 52 ++-- 56 files changed, 1259 insertions(+), 814 deletions(-) diff --git a/lib/Doctrine/ORM/Annotation/Column.php b/lib/Doctrine/ORM/Annotation/Column.php index cb5e0ddae92..15816275c43 100644 --- a/lib/Doctrine/ORM/Annotation/Column.php +++ b/lib/Doctrine/ORM/Annotation/Column.php @@ -36,9 +36,11 @@ final class Column implements Annotation public $type = 'string'; /** + * The length for a string column (Applied only for string-based column). + * * @var integer */ - public $length; + public $length = 255; /** * The precision for a decimal (exact numeric) column (Applies only for decimal column). diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php index 995d93550b7..2c4cab55ce6 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php @@ -22,6 +22,8 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\VersionFieldMetadata; /** * Builder Object for ClassMetadata @@ -361,7 +363,50 @@ public function addLifecycleEvent($methodName, $event) */ public function addProperty($name, $type, array $mapping = []) { - $this->cm->addProperty($name, Type::getType($type), $mapping); + $fieldMetadata = isset($mapping['version']) && $mapping['version'] + ? new VersionFieldMetadata($name) + : new FieldMetadata($name) + ; + + $fieldMetadata->setType(Type::getType($type)); + + if (isset($mapping['columnName'])) { + $fieldMetadata->setColumnName($mapping['columnName']); + } + + if (isset($mapping['length'])) { + $fieldMetadata->setLength((int) $mapping['length']); + } + + if (isset($mapping['precision'])) { + $fieldMetadata->setPrecision((int) $mapping['precision']); + } + + if (isset($mapping['scale'])) { + $fieldMetadata->setScale((int) $mapping['scale']); + } + + if (isset($mapping['id'])) { + $fieldMetadata->setPrimaryKey($mapping['id']); + } + + if (isset($mapping['unique'])) { + $fieldMetadata->setUnique($mapping['unique']); + } + + if (isset($mapping['nullable'])) { + $fieldMetadata->setNullable($mapping['nullable']); + } + + if (isset($mapping['columnDefinition'])) { + $fieldMetadata->setColumnDefinition($mapping['columnDefinition']); + } + + if (isset($mapping['options'])) { + $fieldMetadata->setOptions($mapping['options']); + } + + $this->cm->addProperty($fieldMetadata); return $this; } diff --git a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php index 0a7f66ef647..188c7219087 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php @@ -50,11 +50,6 @@ class FieldBuilder */ private $mapping; - /** - * @var bool - */ - private $version; - /** * @var string */ @@ -219,7 +214,7 @@ public function generatedValue($strategy = 'AUTO') */ public function isVersionField() { - $this->version = true; + $this->mapping['version'] = true; return $this; } @@ -292,9 +287,11 @@ public function build() ); } - $property = $cm->addProperty($this->name, $this->type, $this->mapping); + $this->builder->addProperty($this->name, $this->type->getName(), $this->mapping); + + $property = $cm->getProperty($this->name); - if ($this->version) { + if (isset($this->mapping['version']) && $this->mapping['version']) { $cm->setVersionProperty($property); } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 215ed4be8a4..a6278f04a96 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1921,42 +1921,30 @@ public function setAssociationOverride($fieldName, array $overrideMapping) /** * Sets the override for a mapped field. * - * @param string $fieldName - * @param array $overrideMapping + * @param FieldMetadata $fieldMetadata * * @return void * * @throws MappingException */ - public function setAttributeOverride($fieldName, array $overrideMapping) + public function setAttributeOverride(FieldMetadata $fieldMetadata) { - $property = $this->getProperty($fieldName); + $originalProperty = $this->getProperty($fieldMetadata->getName()); - if ( ! $property) { - throw MappingException::invalidOverrideFieldName($this->name, $fieldName); + if ( ! $originalProperty) { + throw MappingException::invalidOverrideFieldName($this->name, $fieldMetadata->getName()); } - $originalMapping = array( - 'tableName' => $property->getTableName(), - 'columnName' => $property->getColumnName(), - 'columnDefinition' => $property->getColumnDefinition(), - 'length' => $property->getLength(), - 'scale' => $property->getScale(), - 'precision' => $property->getPrecision(), - 'options' => $property->getOptions(), - 'id' => $property->isPrimaryKey(), - 'nullable' => $property->isNullable(), - 'unique' => $property->isUnique(), - ); - - $overrideMapping = array_replace_recursive($originalMapping, $overrideMapping); + if ($originalProperty instanceof VersionFieldMetadata) { + throw MappingException::invalidOverrideVersionField($this->name, $fieldMetadata->getName()); + } - $overrideMapping['id'] = $property->isPrimaryKey(); + $fieldMetadata->setPrimaryKey($originalProperty->isPrimaryKey()); - unset($this->properties[$fieldName]); - unset($this->fieldNames[$property->getColumnName()]); + unset($this->properties[$originalProperty->getName()]); + unset($this->fieldNames[$originalProperty->getColumnName()]); - $this->addProperty($fieldName, $property->getType(), $overrideMapping); + $this->addProperty($fieldMetadata); } /** @@ -2065,54 +2053,16 @@ public function getProperties() } /** - * @param string $fieldName - * - * @return Property|null - */ - public function getProperty($fieldName) - { - return $this->properties[$fieldName] ?? null; - } - - /** - * @param string $fieldName - * @param Type $type - * @param array $mapping + * @param FieldMetadata $property * * @throws MappingException */ - public function addProperty($fieldName, Type $type, array $mapping = []) + public function addProperty(FieldMetadata $property) { - $property = new FieldMetadata($fieldName); + $fieldName = $property->getName(); + $columnName = $property->getColumnName(); $property->setDeclaringClass($this); - $property->setColumnName($mapping['columnName'] ?? $this->namingStrategy->propertyToColumnName($fieldName, $this->name)); - $property->setType($type); - - if (! $this->isMappedSuperclass) { - $property->setTableName($this->getTableName()); - } - - if (isset($mapping['columnDefinition'])) { - $property->setColumnDefinition($mapping['columnDefinition']); - } - - if (isset($mapping['length'])) { - $property->setLength($mapping['length']); - } - - if (isset($mapping['scale'])) { - $property->setScale($mapping['scale']); - } - - if (isset($mapping['precision'])) { - $property->setPrecision($mapping['precision']); - } - - $property->setOptions($mapping['options'] ?? []); - $property->setPrimaryKey(isset($mapping['id']) && $mapping['id']); - $property->setNullable(isset($mapping['nullable']) && $mapping['nullable']); - $property->setUnique(isset($mapping['unique']) && $mapping['unique']); // Check for empty field name if (empty($fieldName)) { @@ -2124,19 +2074,32 @@ public function addProperty($fieldName, Type $type, array $mapping = []) throw MappingException::duplicateProperty($property); } + if (empty($columnName)) { + $columnName = $this->namingStrategy->propertyToColumnName($fieldName, $this->name); + + $property->setColumnName($columnName); + } + + if (! $this->isMappedSuperclass) { + $property->setTableName($this->getTableName()); + } + // Check for already declared column - if (isset($this->fieldNames[$property->getColumnName()]) || - ($this->discriminatorColumn != null && $this->discriminatorColumn->getColumnName() === $property->getColumnName())) { - throw MappingException::duplicateColumnName($this->name, $property->getColumnName()); + if (isset($this->fieldNames[$columnName]) || + ($this->discriminatorColumn !== null && $this->discriminatorColumn->getColumnName() === $columnName)) { + throw MappingException::duplicateColumnName($this->name, $columnName); } // Complete id mapping - if (isset($mapping['id']) && $mapping['id']) { + if ($property->isPrimaryKey()) { if ($this->versionProperty !== null && $this->versionProperty->getName() === $fieldName) { throw MappingException::cannotVersionIdField($this->name, $fieldName); } - assert(! $type->canRequireSQLConversion(), MappingException::sqlConversionNotAllowedForPrimaryKeyProperties($property)); + assert( + ! $property->getType()->canRequireSQLConversion(), + MappingException::sqlConversionNotAllowedForPrimaryKeyProperties($property) + ); if (! in_array($fieldName, $this->identifier)) { $this->identifier[] = $fieldName; @@ -2148,10 +2111,18 @@ public function addProperty($fieldName, Type $type, array $mapping = []) } } - $this->fieldNames[$property->getColumnName()] = $fieldName; + $this->fieldNames[$columnName] = $fieldName; $this->properties[$fieldName] = $property; + } - return $property; + /** + * @param string $fieldName + * + * @return Property|null + */ + public function getProperty($fieldName) + { + return $this->properties[$fieldName] ?? null; } /** @@ -2168,7 +2139,7 @@ public function addInheritedProperty(Property $property) $inheritedProperty = new FieldMetadata($property->getName()); $declaringClass = $property->getDeclaringClass(); - if ( ! $declaringClass->isMappedSuperclass) { + if (! $declaringClass->isMappedSuperclass) { $inheritedProperty->setTableName($property->getTableName()); } @@ -2822,7 +2793,7 @@ public function setGeneratorDefinition(array $definition) * * @throws MappingException */ - public function setVersionProperty(FieldMetadata $versionFieldMetadata) + public function setVersionProperty(VersionFieldMetadata $versionFieldMetadata) { $this->versionProperty = $versionFieldMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 2617f5b83fb..a55f9bf50fe 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -29,8 +29,10 @@ use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\MappingException; +use Doctrine\ORM\Mapping\VersionFieldMetadata; /** * The AnnotationDriver reads the mapping metadata from docblock annotations. @@ -277,56 +279,33 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat continue; } - $mapping = []; - $mapping['fieldName'] = $reflProperty->getName(); - - // Evaluate @Cache annotation - if (($cacheAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Cache::class)) !== null) { - $mapping['cache'] = $metadata->getAssociationCacheDefaults( - $mapping['fieldName'], - [ - 'usage' => constant(sprintf('%s::CACHE_USAGE_%s', ClassMetadata::class, $cacheAnnot->usage)), - 'region' => $cacheAnnot->region, - ] - ); - } - // Check for JoinColumn/JoinColumns annotations - $joinColumns = []; - - if ($joinColumnAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinColumn::class)) { - $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); - } else if ($joinColumnsAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinColumns::class)) { - foreach ($joinColumnsAnnot->value as $joinColumn) { - $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumn); - } - } - // Field can only be annotated with one of: // @Column, @OneToOne, @OneToMany, @ManyToOne, @ManyToMany + $fieldName = $reflProperty->getName(); + if ($columnAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Column::class)) { if ($columnAnnot->type == null) { - throw MappingException::propertyTypeIsRequired($className, $reflProperty->getName()); + throw MappingException::propertyTypeIsRequired($className, $fieldName); } - $mapping = $this->columnToArray($columnAnnot); + $isFieldVersioned = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Version::class) !== null; + $fieldMetadata = $this->convertColumnAnnotationToFieldMetadata($columnAnnot, $fieldName, $isFieldVersioned); + // Check for Id if ($idAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Id::class)) { - $mapping['id'] = true; + $fieldMetadata->setPrimaryKey(true); } + // Check for GeneratedValue strategy if ($generatedValueAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\GeneratedValue::class)) { - $metadata->setIdGeneratorType( - constant(sprintf('%s::GENERATOR_TYPE_%s', ClassMetadata::class, $generatedValueAnnot->strategy)) + $idGeneratorType = constant( + sprintf('%s::GENERATOR_TYPE_%s', ClassMetadata::class, $generatedValueAnnot->strategy) ); - } - - $property = $metadata->addProperty($reflProperty->getName(), Type::getType($columnAnnot->type), $mapping); - if ($this->reader->getPropertyAnnotation($reflProperty, Annotation\Version::class)) { - $metadata->setVersionProperty($property); + $metadata->setIdGeneratorType($idGeneratorType); } - // Check for SequenceGenerator/TableGenerator definition + // Check for CustomGenerator/SequenceGenerator/TableGenerator definition if ($seqGeneratorAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\SequenceGenerator::class)) { $metadata->setGeneratorDefinition( [ @@ -344,7 +323,43 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat ] ); } - } else if ($oneToOneAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\OneToOne::class)) { + + $metadata->addProperty($fieldMetadata); + + // Check for Version + if ($this->reader->getPropertyAnnotation($reflProperty, Annotation\Version::class)) { + $metadata->setVersionProperty($fieldMetadata); + } + + continue; + } + + $mapping = []; + $mapping['fieldName'] = $fieldName; + + // Evaluate @Cache annotation + if (($cacheAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Cache::class)) !== null) { + $mapping['cache'] = $metadata->getAssociationCacheDefaults( + $mapping['fieldName'], + [ + 'usage' => constant(sprintf('%s::CACHE_USAGE_%s', ClassMetadata::class, $cacheAnnot->usage)), + 'region' => $cacheAnnot->region, + ] + ); + } + + // Check for JoinColumn/JoinColumns annotations + $joinColumns = []; + + if ($joinColumnAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinColumn::class)) { + $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); + } else if ($joinColumnsAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinColumns::class)) { + foreach ($joinColumnsAnnot->value as $joinColumn) { + $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumn); + } + } + + if ($oneToOneAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\OneToOne::class)) { if ($idAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Id::class)) { $mapping['id'] = true; } @@ -358,7 +373,11 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $mapping['fetch'] = $this->getFetchMode($className, $oneToOneAnnot->fetch); $metadata->mapOneToOne($mapping); - } else if ($oneToManyAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\OneToMany::class)) { + + continue; + } + + if ($oneToManyAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\OneToMany::class)) { $mapping['mappedBy'] = $oneToManyAnnot->mappedBy; $mapping['targetEntity'] = $oneToManyAnnot->targetEntity; $mapping['cascade'] = $oneToManyAnnot->cascade; @@ -371,7 +390,11 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat } $metadata->mapOneToMany($mapping); - } else if ($manyToOneAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\ManyToOne::class)) { + + continue; + } + + if ($manyToOneAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\ManyToOne::class)) { if ($idAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Id::class)) { $mapping['id'] = true; } @@ -383,7 +406,11 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $mapping['fetch'] = $this->getFetchMode($className, $manyToOneAnnot->fetch); $metadata->mapManyToOne($mapping); - } else if ($manyToManyAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\ManyToMany::class)) { + + continue; + } + + if ($manyToManyAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\ManyToMany::class)) { $joinTable = []; if ($joinTableAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinTable::class)) { @@ -415,11 +442,17 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat } $metadata->mapManyToMany($mapping); - } else if ($embeddedAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Embedded::class)) { + + continue; + } + + if ($embeddedAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Embedded::class)) { $mapping['class'] = $embeddedAnnot->class; $mapping['columnPrefix'] = $embeddedAnnot->columnPrefix; $metadata->mapEmbedded($mapping); + + continue; } } @@ -480,9 +513,13 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $attributeOverridesAnnot = $classAnnotations[Annotation\AttributeOverrides::class]; foreach ($attributeOverridesAnnot->value as $attributeOverrideAnnot) { - $attributeOverride = $this->columnToArray($attributeOverrideAnnot->column); + $fieldMetadata = $this->convertColumnAnnotationToFieldMetadata( + $attributeOverrideAnnot->column, + $attributeOverrideAnnot->name, + false + ); - $metadata->setAttributeOverride($attributeOverrideAnnot->name, $attributeOverride); + $metadata->setAttributeOverride($fieldMetadata); } } @@ -600,7 +637,49 @@ private function getMethodCallbacks(\ReflectionMethod $method) } /** - * Parse the given JoinColumn as array + * Parse the given Column as FieldMetadata + * + * @param Annotation\Column $columnAnnot + * @param string $fieldName + * @param bool $isVersioned + * + * @return FieldMetadata + */ + private function convertColumnAnnotationToFieldMetadata(Annotation\Column $columnAnnot, string $fieldName, bool $isVersioned) + { + $fieldMetadata = $isVersioned + ? new VersionFieldMetadata($fieldName) + : new FieldMetadata($fieldName) + ; + + $fieldMetadata->setType(Type::getType($columnAnnot->type)); + + if (! empty($columnAnnot->name)) { + $fieldMetadata->setColumnName($columnAnnot->name); + } + + if (! empty($columnAnnot->columnDefinition)) { + $fieldMetadata->setColumnDefinition($columnAnnot->columnDefinition); + } + + if (! empty($columnAnnot->length)) { + $fieldMetadata->setLength($columnAnnot->length); + } + + if ($columnAnnot->options) { + $fieldMetadata->setOptions($columnAnnot->options); + } + + $fieldMetadata->setScale($columnAnnot->scale); + $fieldMetadata->setPrecision($columnAnnot->precision); + $fieldMetadata->setNullable($columnAnnot->nullable); + $fieldMetadata->setUnique($columnAnnot->unique); + + return $fieldMetadata; + } + + /** + * Parse the given JoinColumn as JoinColumnMetadata * * @param Annotation\JoinColumn $joinColumnAnnot * diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index f5ed6850280..3c806500b4d 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -28,6 +28,7 @@ use Doctrine\DBAL\Schema\Column; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\MappingException; @@ -217,7 +218,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $associationMapping['fieldName'] = $this->getFieldNameForColumn($manyTable->getName(), current($otherFk->getColumns()), true); $associationMapping['targetEntity'] = $this->getClassNameForTable($otherFk->getForeignTableName()); - if (current($manyTable->getColumns())->getName() == $localColumn) { + if (current($manyTable->getColumns())->getName() === $localColumn) { $associationMapping['inversedBy'] = $this->getFieldNameForColumn($manyTable->getName(), current($myFk->getColumns()), true); $associationMapping['joinTable'] = [ 'name' => strtolower($manyTable->getName()), @@ -363,39 +364,41 @@ private function buildFieldMappings(ClassMetadata $metadata) continue; } - $fieldName = $this->getFieldNameForColumn($tableName, $column->getName(), false); - $fieldMapping = $this->buildFieldMapping($tableName, $column); + $fieldName = $this->getFieldNameForColumn($tableName, $column->getName(), false); + $fieldMetadata = $this->convertColumnAnnotationToFieldMetadata($tableName, $column, $fieldName); if ($primaryKeys && in_array($column->getName(), $primaryKeys)) { - $fieldMapping['id'] = true; + $fieldMetadata->setPrimaryKey(true); - $ids[] = $fieldMapping; + $ids[] = $fieldMetadata; } - $metadata->addProperty($fieldName, $column->getType(), $fieldMapping); + $metadata->addProperty($fieldMetadata); } // We need to check for the columns here, because we might have associations as id as well. - if ($ids && count($primaryKeys) == 1) { + if ($ids && count($primaryKeys) === 1) { $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); } } /** - * Build field mapping from a schema column definition + * Parse the given Column as FieldMetadata * - * @param string $tableName - * @param \Doctrine\DBAL\Schema\Column $column + * @param string $tableName + * @param Column $column + * @param string $fieldName * - * @return array + * @return FieldMetadata */ - private function buildFieldMapping($tableName, Column $column) + private function convertColumnAnnotationToFieldMetadata(string $tableName, Column $column, string $fieldName) { - $fieldMapping = [ - 'columnName' => $column->getName(), - 'type' => $column->getType()->getName(), - 'nullable' => ( ! $column->getNotnull()), - ]; + $options = []; + $fieldMetadata = new FieldMetadata($fieldName); + + $fieldMetadata->setType($column->getType()); + $fieldMetadata->setTableName($tableName); + $fieldMetadata->setColumnName($column->getName()); // Type specific elements switch ($column->getType()->getName()) { @@ -407,34 +410,39 @@ private function buildFieldMapping($tableName, Column $column) case Type::SIMPLE_ARRAY: case Type::STRING: case Type::TEXT: - $fieldMapping['length'] = $column->getLength(); - $fieldMapping['options']['fixed'] = $column->getFixed(); + if ($column->getLength()) { + $fieldMetadata->setLength($column->getLength()); + } + + $options['fixed'] = $column->getFixed(); break; case Type::DECIMAL: case Type::FLOAT: - $fieldMapping['precision'] = $column->getPrecision(); - $fieldMapping['scale'] = $column->getScale(); + $fieldMetadata->setScale($column->getScale()); + $fieldMetadata->setPrecision($column->getPrecision()); break; case Type::INTEGER: case Type::BIGINT: case Type::SMALLINT: - $fieldMapping['options']['unsigned'] = $column->getUnsigned(); + $options['unsigned'] = $column->getUnsigned(); break; } // Comment if (($comment = $column->getComment()) !== null) { - $fieldMapping['options']['comment'] = $comment; + $options['comment'] = $comment; } // Default if (($default = $column->getDefault()) !== null) { - $fieldMapping['options']['default'] = $default; + $options['default'] = $default; } - return $fieldMapping; + $fieldMetadata->setOptions($options); + + return $fieldMetadata; } /** diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 627ccf56ec9..f609482162d 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -22,10 +22,12 @@ use Doctrine\Common\Persistence\Mapping\ClassMetadata; use Doctrine\Common\Persistence\Mapping\Driver\FileDriver; use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; +use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; +use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\MappingException; +use Doctrine\ORM\Mapping\VersionFieldMetadata; use SimpleXMLElement; /** @@ -165,8 +167,11 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } if (isset($xmlRoot['inheritance-type'])) { - $inheritanceType = (string) $xmlRoot['inheritance-type']; - $metadata->setInheritanceType(constant('Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_' . $inheritanceType)); + $inheritanceType = strtoupper((string) $xmlRoot['inheritance-type']); + + $metadata->setInheritanceType( + constant(sprintf('%s::INHERITANCE_TYPE_%s', ClassMetadata::class, $inheritanceType)) + ); if ($metadata->inheritanceType !== \Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_NONE) { $discriminatorColumnBuilder = new DiscriminatorColumnMetadataBuilder(); @@ -212,8 +217,10 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate if (isset($xmlRoot['change-tracking-policy'])) { + $changeTrackingPolicy = strtoupper((string) $xmlRoot['change-tracking-policy']); + $metadata->setChangeTrackingPolicy( - constant('Doctrine\ORM\Mapping\ClassMetadata::CHANGETRACKING_' . strtoupper((string) $xmlRoot['change-tracking-policy'])) + constant(sprintf('%s::CHANGETRACKING_%s', ClassMetadata::class, $changeTrackingPolicy)) ); } @@ -229,7 +236,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } if (isset($indexXml->options)) { - $index['options'] = $this->_parseOptions($indexXml->options->children()); + $index['options'] = $this->parseOptions($indexXml->options->children()); } if (isset($indexXml['name'])) { @@ -247,7 +254,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $unique = ['columns' => explode(',', (string) $uniqueXml['columns'])]; if (isset($uniqueXml->options)) { - $unique['options'] = $this->_parseOptions($uniqueXml->options->children()); + $unique['options'] = $this->parseOptions($uniqueXml->options->children()); } if (isset($uniqueXml['name'])) { @@ -259,21 +266,20 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } if (isset($xmlRoot->options)) { - $metadata->table['options'] = $this->_parseOptions($xmlRoot->options->children()); + $metadata->table['options'] = $this->parseOptions($xmlRoot->options->children()); } // Evaluate mappings if (isset($xmlRoot->field)) { - foreach ($xmlRoot->field as $mapping) { - $fieldMapping = $this->columnToArray($mapping); - $fieldName = (string) $mapping['name']; - $fieldType = Type::getType((string) $fieldMapping['type']); - $property = $metadata->addProperty($fieldName, $fieldType, $fieldMapping); + foreach ($xmlRoot->field as $fieldElement) { + $fieldName = (string) $fieldElement['name']; + $isFieldVersioned = isset($fieldElement['version']) && $fieldElement['version']; + $fieldMetadata = $this->convertFieldElementToFieldMetadata($fieldElement, $fieldName, $isFieldVersioned); - if (isset($fieldMapping['version'])) { - $metadata->setVersionProperty($property); + $metadata->addProperty($fieldMetadata); - unset($fieldMapping['version']); + if ($fieldMetadata instanceof VersionFieldMetadata) { + $metadata->setVersionProperty($fieldMetadata); } } } @@ -302,27 +308,26 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $associationIds = []; foreach ($xmlRoot->id as $idElement) { + $fieldName = (string) $idElement['name']; + if (isset($idElement['association-key']) && $this->evaluateBoolean($idElement['association-key'])) { - $associationIds[(string) $idElement['name']] = true; + $associationIds[$fieldName] = true; continue; } - $fieldName = (string) $idElement['name']; - $fieldMapping = $this->columnToArray($idElement); - $fieldType = Type::getType((string) $fieldMapping['type']); - - $fieldMapping['id'] = true; + $fieldMetadata = $this->convertFieldElementToFieldMetadata($idElement, $fieldName, false); - $metadata->addProperty($fieldName, $fieldType, $fieldMapping); + $fieldMetadata->setPrimaryKey(true); if (isset($idElement->generator)) { $strategy = isset($idElement->generator['strategy']) ? (string) $idElement->generator['strategy'] - : 'AUTO'; + : 'AUTO' + ; $metadata->setIdGeneratorType( - constant('Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_' . $strategy) + constant(sprintf('%s::GENERATOR_TYPE_%s', ClassMetadata::class, strtoupper($strategy))) ); } @@ -348,6 +353,8 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } else if (isset($idElement->{'table-generator'})) { throw MappingException::tableIdGeneratorNotImplemented($className); } + + $metadata->addProperty($fieldMetadata); } // Evaluate mappings @@ -570,10 +577,10 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) foreach ($xmlRoot->{'attribute-overrides'}->{'attribute-override'} as $overrideElement) { $fieldName = (string) $overrideElement['name']; - foreach ($overrideElement->field as $field) { - $mapping = $this->columnToArray($field); + foreach ($overrideElement->field as $fieldElement) { + $fieldMetadata = $this->convertFieldElementToFieldMetadata($fieldElement, $fieldName, false); - $metadata->setAttributeOverride($fieldName, $mapping); + $metadata->setAttributeOverride($fieldMetadata); } } } @@ -670,14 +677,14 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) * * @return array The options array. */ - private function _parseOptions(SimpleXMLElement $options) + private function parseOptions(SimpleXMLElement $options) { $array = []; /* @var $option SimpleXMLElement */ foreach ($options as $option) { if ($option->count()) { - $value = $this->_parseOptions($option->children()); + $value = $this->parseOptions($option->children()); } else { $value = (string) $option; } @@ -692,109 +699,103 @@ private function _parseOptions(SimpleXMLElement $options) } else { $array[] = $value; } + } return $array; } /** - * Constructs a joinColumn mapping array based on the information - * found in the given SimpleXMLElement. - * - * @param SimpleXMLElement $joinColumnElement The XML element. + * @param SimpleXMLElement $fieldElement + * @param string $fieldName + * @param bool $isVersioned * - * @return JoinColumnMetadata + * @return FieldMetadata */ - private function convertJoinColumnElementToJoinColumnMetadata(SimpleXMLElement $joinColumnElement) + private function convertFieldElementToFieldMetadata(SimpleXMLElement $fieldElement, string $fieldName, bool $isVersioned) { - $joinColumn = new JoinColumnMetadata(); + $fieldMetadata = $isVersioned + ? new VersionFieldMetadata($fieldName) + : new FieldMetadata($fieldName) + ; - $joinColumn->setColumnName((string) $joinColumnElement['name']); - $joinColumn->setReferencedColumnName((string) $joinColumnElement['referenced-column-name']); + $fieldMetadata->setType(Type::getType('string')); - if (isset($joinColumnElement['column-definition'])) { - $joinColumn->setColumnDefinition((string) $joinColumnElement['column-definition']); + if (isset($fieldElement['type'])) { + $fieldMetadata->setType(Type::getType((string) $fieldElement['type'])); } - if (isset($joinColumnElement['field-name'])) { - $joinColumn->setAliasedName((string) $joinColumnElement['field-name']); + if (isset($fieldElement['column'])) { + $fieldMetadata->setColumnName((string) $fieldElement['column']); } - if (isset($joinColumnElement['nullable'])) { - $joinColumn->setNullable($this->evaluateBoolean($joinColumnElement['nullable'])); + if (isset($fieldElement['length'])) { + $fieldMetadata->setLength((int) $fieldElement['length']); } - if (isset($joinColumnElement['unique'])) { - $joinColumn->setUnique($this->evaluateBoolean($joinColumnElement['unique'])); + if (isset($fieldElement['precision'])) { + $fieldMetadata->setPrecision((int) $fieldElement['precision']); } - if (isset($joinColumnElement['on-delete'])) { - $joinColumn->setOnDelete(strtoupper((string) $joinColumnElement['on-delete'])); + if (isset($fieldElement['scale'])) { + $fieldMetadata->setScale((int) $fieldElement['scale']); } - return $joinColumn; - } - - /** - * Parses the given field as array. - * - * @param SimpleXMLElement $fieldMapping - * - * @return array - */ - private function columnToArray(SimpleXMLElement $fieldMapping) - { - $mapping = [ - 'type' => 'string', - ]; - - if (isset($fieldMapping['type'])) { - $params = explode('(', (string) $fieldMapping['type']); - - if (isset($params[1])) { - $fieldMapping['length'] = (integer) substr($params[1], 0, strlen($params[1]) - 1); - } - - $mapping['type'] = trim($params[0]); + if (isset($fieldElement['unique'])) { + $fieldMetadata->setUnique($this->evaluateBoolean($fieldElement['unique'])); } - if (isset($fieldMapping['column'])) { - $mapping['columnName'] = (string) $fieldMapping['column']; + if (isset($fieldElement['nullable'])) { + $fieldMetadata->setNullable($this->evaluateBoolean($fieldElement['nullable'])); } - if (isset($fieldMapping['length'])) { - $mapping['length'] = (int) $fieldMapping['length']; + if (isset($fieldElement['column-definition'])) { + $fieldMetadata->setColumnDefinition((string) $fieldElement['column-definition']); } - if (isset($fieldMapping['precision'])) { - $mapping['precision'] = (int) $fieldMapping['precision']; + if (isset($fieldElement->options)) { + $fieldMetadata->setOptions($this->parseOptions($fieldElement->options->children())); } - if (isset($fieldMapping['scale'])) { - $mapping['scale'] = (int) $fieldMapping['scale']; - } + return $fieldMetadata; + } - if (isset($fieldMapping['unique'])) { - $mapping['unique'] = $this->evaluateBoolean($fieldMapping['unique']); + /** + * Constructs a joinColumn mapping array based on the information + * found in the given SimpleXMLElement. + * + * @param SimpleXMLElement $joinColumnElement The XML element. + * + * @return JoinColumnMetadata + */ + private function convertJoinColumnElementToJoinColumnMetadata(SimpleXMLElement $joinColumnElement) + { + $joinColumnMetadata = new JoinColumnMetadata(); + + $joinColumnMetadata->setColumnName((string) $joinColumnElement['name']); + $joinColumnMetadata->setReferencedColumnName((string) $joinColumnElement['referenced-column-name']); + + if (isset($joinColumnElement['column-definition'])) { + $joinColumnMetadata->setColumnDefinition((string) $joinColumnElement['column-definition']); } - if (isset($fieldMapping['nullable'])) { - $mapping['nullable'] = $this->evaluateBoolean($fieldMapping['nullable']); + if (isset($joinColumnElement['field-name'])) { + $joinColumnMetadata->setAliasedName((string) $joinColumnElement['field-name']); } - if (isset($fieldMapping['version']) && $fieldMapping['version']) { - $mapping['version'] = $this->evaluateBoolean($fieldMapping['version']); + if (isset($joinColumnElement['nullable'])) { + $joinColumnMetadata->setNullable($this->evaluateBoolean($joinColumnElement['nullable'])); } - if (isset($fieldMapping['column-definition'])) { - $mapping['columnDefinition'] = (string) $fieldMapping['column-definition']; + if (isset($joinColumnElement['unique'])) { + $joinColumnMetadata->setUnique($this->evaluateBoolean($joinColumnElement['unique'])); } - if (isset($fieldMapping->options)) { - $mapping['options'] = $this->_parseOptions($fieldMapping->options->children()); + if (isset($joinColumnElement['on-delete'])) { + $joinColumnMetadata->setOnDelete(strtoupper((string) $joinColumnElement['on-delete'])); } - return $mapping; + return $joinColumnMetadata; } /** diff --git a/lib/Doctrine/ORM/Mapping/MappingException.php b/lib/Doctrine/ORM/Mapping/MappingException.php index c77b1588f43..e86ef617405 100644 --- a/lib/Doctrine/ORM/Mapping/MappingException.php +++ b/lib/Doctrine/ORM/Mapping/MappingException.php @@ -139,6 +139,19 @@ public static function invalidOverrideFieldName($className, $fieldName) return new self("Invalid field override named '$fieldName' for class '$className'."); } + /** + * Exception for invalid version property override. + * + * @param string $className The entity's name. + * @param string $fieldName + * + * @return MappingException + */ + public static function invalidOverrideVersionField($className, $fieldName) + { + return new self("Invalid version field override named '$fieldName' for class '$className'."); + } + /** * Exception for invalid property type override. * diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index cf64726a3bf..5e9400d37c1 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Tools\Export\Driver; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; /** @@ -70,13 +71,26 @@ public function exportClassMetadata(ClassMetadata $metadata) $lines[] = '$discrColumn = new Mapping\DiscriminatorColumnMetadata();'; $lines[] = null; - $lines[] = '$discrColumn->setTableName("' . $discrColumn->getTableName() . '");'; $lines[] = '$discrColumn->setColumnName("' . $discrColumn->getColumnName() . '");'; - $lines[] = '$discrColumn->setColumnDefinition("' . $discrColumn->getColumnDefinition() . '");'; $lines[] = '$discrColumn->setType(Type::getType("' . $discrColumn->getTypeName() . '"));'; - $lines[] = '$discrColumn->setLength(' . $discrColumn->getLength() . ');'; - $lines[] = '$discrColumn->setScale(' . $discrColumn->getScale() . ');'; - $lines[] = '$discrColumn->setPrecision(' . $discrColumn->getPrecision() . ');'; + $lines[] = '$discrColumn->setTableName("' . $discrColumn->getTableName() . '");'; + + if (! empty($discrColumn->getColumnDefinition())) { + $lines[] = '$property->setColumnDefinition("' . $discrColumn->getColumnDefinition() . '");'; + } + + if (! empty($discrColumn->getLength())) { + $lines[] = '$property->setLength(' . $discrColumn->getLength() . ');'; + } + + if (! empty($discrColumn->getScale())) { + $lines[] = '$property->setScale(' . $discrColumn->getScale() . ');'; + } + + if (! empty($discrColumn->getPrecision())) { + $lines[] = '$property->setPrecision(' . $discrColumn->getPrecision() . ');'; + } + $lines[] = '$discrColumn->setOptions(' . $this->_varExport($discrColumn->getOptions()) . ');'; $lines[] = '$discrColumn->setNullable(' . $this->_varExport($discrColumn->isNullable()) . ');'; $lines[] = '$discrColumn->setUnique(' . $this->_varExport($discrColumn->isUnique()) . ');'; @@ -101,12 +115,40 @@ public function exportClassMetadata(ClassMetadata $metadata) } foreach ($metadata->getProperties() as $property) { + /** @var FieldMetadata $property */ $lines[] = sprintf( - '$metadata->addProperty("%s", Type::getType("%s"), %s);', - $property->getName(), - $property->getType()->getName(), - $this->_varExport($property->getMapping()) + '$property = new Mapping\%sFieldMetadata("%s");', + ($metadata->versionProperty === $property) ? 'Version' : '', + $property->getName() ); + + $lines[] = null; + $lines[] = '$property->setColumnName("' . $property->getColumnName() . '");'; + $lines[] = '$property->setType(Type::getType("' . $property->getTypeName() . '"));'; + $lines[] = '$property->setTableName("' . $property->getTableName() . '");'; + + if (! empty($property->getColumnDefinition())) { + $lines[] = '$property->setColumnDefinition("' . $property->getColumnDefinition() . '");'; + } + + if (! empty($property->getLength())) { + $lines[] = '$property->setLength(' . $property->getLength() . ');'; + } + + if (! empty($property->getScale())) { + $lines[] = '$property->setScale(' . $property->getScale() . ');'; + } + + if (! empty($property->getPrecision())) { + $lines[] = '$property->setPrecision(' . $property->getPrecision() . ');'; + } + + $lines[] = '$property->setOptions(' . $this->_varExport($property->getOptions()) . ');'; + $lines[] = '$property->setPrimaryKey(' . $this->_varExport($property->isPrimaryKey()) . ');'; + $lines[] = '$property->setNullable(' . $this->_varExport($property->isNullable()) . ');'; + $lines[] = '$property->setUnique(' . $this->_varExport($property->isUnique()) . ');'; + $lines[] = null; + $lines[] = '$metadata->addProperty($property);'; } if ( ! $metadata->isIdentifierComposite && $generatorType = $this->_getIdGeneratorTypeString($metadata->generatorType)) { diff --git a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php index c15a5ee8fea..315906f4e3b 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php @@ -3,7 +3,7 @@ namespace Doctrine\Tests\Models\CMS; use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Mapping\JoinColumnMetadata; +use Doctrine\ORM\Mapping; /** * CmsAddress @@ -127,33 +127,32 @@ public function setUser(CmsUser $user) { public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->setPrimaryTable( - [ - 'name' => 'company_person', - ] - ); + $metadata->setPrimaryTable(['name' => 'company_person']); - $metadata->addProperty( - 'id', - Type::getType('integer'), - ['id' => true] - ); + $fieldMetadata = new Mapping\FieldMetadata('id'); - $metadata->addProperty( - 'zip', - Type::getType('string'), - ['length' => 50] - ); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setPrimaryKey(true); - $metadata->addProperty( - 'city', - Type::getType('string'), - ['length' => 50] - ); + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('zip'); + + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setLength(50); + + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('city'); + + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setLength(50); + + $metadata->addProperty($fieldMetadata); $joinColumns = []; - $joinColumn = new JoinColumnMetadata(); + $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setReferencedColumnName('id'); diff --git a/tests/Doctrine/Tests/Models/Company/CompanyContract.php b/tests/Doctrine/Tests/Models/Company/CompanyContract.php index 7df1e4b5d2f..bea51a515ec 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyContract.php @@ -146,17 +146,17 @@ static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat $metadata->setDiscriminatorColumn($discrColumn); - $metadata->addProperty( - 'id', - Type::getType('integer'), - ['id' => true] - ); + $fieldMetadata = new Mapping\FieldMetadata('id'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setPrimaryKey(true); - $metadata->addProperty( - 'completed', - Type::getType('boolean'), - ['columnName' => 'completed'] - ); + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('completed'); + $fieldMetadata->setType(Type::getType('boolean')); + $fieldMetadata->setColumnName('completed'); + + $metadata->addProperty($fieldMetadata); $metadata->setDiscriminatorMap( [ diff --git a/tests/Doctrine/Tests/Models/Company/CompanyFixContract.php b/tests/Doctrine/Tests/Models/Company/CompanyFixContract.php index 3a3857c0c34..6853dc61861 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyFixContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyFixContract.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\Models\Company; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping; /** * @Entity @@ -32,10 +33,11 @@ public function setFixPrice($fixPrice) static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->addProperty( - 'fixPrice', - Type::getType('integer'), - ['columnName' => 'fixPrice'] - ); + $fieldMetadata = new Mapping\FieldMetadata('fixPrice'); + + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setColumnName('fixPrice'); + + $metadata->addProperty($fieldMetadata); } } diff --git a/tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php b/tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php index ca94c8454d9..62090324631 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php @@ -1,7 +1,9 @@ addProperty( - 'hoursWorked', - Type::getType('integer'), - ['columnName' => 'hoursWorked'] - ); - - $metadata->addProperty( - 'pricePerHour', - Type::getType('integer'), - ['columnName' => 'pricePerHour'] - ); + $fieldMetadata = new Mapping\FieldMetadata('hoursWorked'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setColumnName('hoursWorked'); + + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('pricePerHour'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setColumnName('pricePerHour'); + + $metadata->addProperty($fieldMetadata); } } diff --git a/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php b/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php index 075568b3029..31c23b23f35 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\Models\Company; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping; /** * @Entity @@ -33,11 +34,11 @@ public function setMaxPrice($maxPrice) static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->addProperty( - 'maxPrice', - Type::getType('integer'), - ['columnName' => 'maxPrice'] - ); + $fieldMetadata = new Mapping\FieldMetadata('maxPrice'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setColumnName('maxPrice'); + + $metadata->addProperty($fieldMetadata); $metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, 'CompanyContractListener', 'postPersistHandler'); $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, 'CompanyContractListener', 'prePersistHandler'); diff --git a/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php b/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php index 679f050f644..05c36cb72ad 100644 --- a/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php +++ b/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\Models\DDC1476; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping; /** * @Entity() @@ -45,8 +46,16 @@ public function setName($name) public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->addProperty('id', Type::getType('string'), ['id' => true]); - $metadata->addProperty('name', Type::getType('string')); + $fieldMetadata = new Mapping\FieldMetadata('id'); + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setPrimaryKey(true); + + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('name'); + $fieldMetadata->setType(Type::getType('string')); + + $metadata->addProperty($fieldMetadata); $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE); } diff --git a/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php b/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php index 77a18698d3d..d1caee880d0 100644 --- a/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php +++ b/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\Models\DDC2825; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping; /** @Entity @Table(name="explicit_table", schema="explicit_schema") */ class ExplicitSchemaAndTable @@ -17,8 +18,11 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat 'schema' => 'explicit_schema', )); - $metadata->addProperty('id', Type::getType('integer'), array ( - 'id' => true, - )); + $fieldMetadata = new Mapping\FieldMetadata('id'); + + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setPrimaryKey(true); + + $metadata->addProperty($fieldMetadata); } } diff --git a/tests/Doctrine/Tests/Models/DDC2825/SchemaAndTableInTableName.php b/tests/Doctrine/Tests/Models/DDC2825/SchemaAndTableInTableName.php index 57bbfa0724b..6e0b942f08a 100644 --- a/tests/Doctrine/Tests/Models/DDC2825/SchemaAndTableInTableName.php +++ b/tests/Doctrine/Tests/Models/DDC2825/SchemaAndTableInTableName.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\Models\DDC2825; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping; /** * Quoted column name to check that sequence names are @@ -21,8 +22,11 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat 'name' => 'implicit_schema.implicit_table', )); - $metadata->addProperty('id', Type::getType('integer'), array ( - 'id' => true, - )); + $fieldMetadata = new Mapping\FieldMetadata('id'); + + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setPrimaryKey(true); + + $metadata->addProperty($fieldMetadata); } } diff --git a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php index 126adb3a181..390de3e0614 100644 --- a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php +++ b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php @@ -4,6 +4,7 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping; /** * @MappedSuperclass @@ -82,25 +83,23 @@ public function getGroups() public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->addProperty( - 'id', - Type::getType('integer'), - [ - 'id' => true, - 'columnName' => 'user_id', - ] - ); + $fieldMetadata = new Mapping\FieldMetadata('id'); - $metadata->addProperty( - 'name', - Type::getType('string'), - [ - 'columnName'=> 'user_name', - 'nullable' => true, - 'unique' => false, - 'length' => 250, - ] - ); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setColumnName('user_id'); + $fieldMetadata->setPrimaryKey(true); + + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('name'); + + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setLength(250); + $fieldMetadata->setColumnName('user_name'); + $fieldMetadata->setNullable(true); + $fieldMetadata->setUnique(false); + + $metadata->addProperty($fieldMetadata); $metadata->mapManyToMany( [ diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php index e704ab195a4..6cf85dcc917 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\Models\DDC869; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping; /** * @Entity @@ -15,7 +16,11 @@ class DDC869ChequePayment extends DDC869Payment public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->addProperty('serialNumber', Type::getType('string')); + $fieldMetadata = new Mapping\FieldMetadata('serialNumber'); + + $fieldMetadata->setType(Type::getType('string')); + + $metadata->addProperty($fieldMetadata); } } diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869CreditCardPayment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869CreditCardPayment.php index da30da77398..28128725cb8 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869CreditCardPayment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869CreditCardPayment.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\Models\DDC869; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping; /** * @Entity @@ -14,7 +15,11 @@ class DDC869CreditCardPayment extends DDC869Payment public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->addProperty('creditCardNumber', Type::getType('string')); + $fieldMetadata = new Mapping\FieldMetadata('creditCardNumber'); + + $fieldMetadata->setType(Type::getType('string')); + + $metadata->addProperty($fieldMetadata); } } diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php index 3c0ffa98c3f..d2e6843c228 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\Models\DDC869; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping; /** * @MappedSuperclass(repositoryClass = "Doctrine\Tests\Models\DDC869\DDC869PaymentRepository") @@ -23,8 +24,16 @@ class DDC869Payment public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->addProperty('id', Type::getType('integer'), ['id' => true]); - $metadata->addProperty('value', Type::getType('float')); + $fieldMetadata = new Mapping\FieldMetadata('id'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setPrimaryKey(true); + + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('value'); + $fieldMetadata->setType(Type::getType('float')); + + $metadata->addProperty($fieldMetadata); $metadata->isMappedSuperclass = true; diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php b/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php index 022a1f197c9..ceb0bd81bed 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\Models\DDC889; +use Doctrine\ORM\Mapping; use Doctrine\DBAL\Types\Type; class DDC889Class extends DDC889SuperClass @@ -13,10 +14,13 @@ class DDC889Class extends DDC889SuperClass */ protected $id; - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->addProperty('id', Type::getType('integer'), ['id' => true]); + $fieldMetadata = new Mapping\FieldMetadata('id'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setPrimaryKey(true); + + $metadata->addProperty($fieldMetadata); $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_AUTO); } diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889Entity.php b/tests/Doctrine/Tests/Models/DDC889/DDC889Entity.php index 2a689eb7d37..577caf90456 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889Entity.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889Entity.php @@ -7,9 +7,7 @@ */ class DDC889Entity extends DDC889SuperClass { - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { } - } diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php b/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php index defe28efd11..44ff3eba2f3 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php @@ -3,22 +3,23 @@ namespace Doctrine\Tests\Models\DDC889; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping; /** * @MappedSuperclass */ class DDC889SuperClass { - /** @Column() */ protected $name; public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->addProperty('name', Type::getType('string')); + $fieldMetadata = new Mapping\FieldMetadata('name'); + $fieldMetadata->setType(Type::getType('string')); + $metadata->addProperty($fieldMetadata); $metadata->isMappedSuperclass = true; - $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE); } } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php b/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php index 15e5fe5829a..8a22639bcde 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php @@ -2,15 +2,24 @@ namespace Doctrine\Tests\Models\DDC964; +use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping; + /** * @Entity * @AttributeOverrides({ - * @AttributeOverride(name="id", - * column=@Column(name="guest_id") + * @AttributeOverride( + * name="id", + * column=@Column( + * name = "guest_id", + * type = "integer" + * ) * ), - * @AttributeOverride(name="name", + * @AttributeOverride( + * name="name", * column=@Column( * name = "guest_name", + * type = "string", * nullable = false, * unique = true, length = 240 @@ -22,15 +31,22 @@ class DDC964Guest extends DDC964User { public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->setAttributeOverride('id', ['columnName' => 'guest_id']); - - $metadata->setAttributeOverride('name', - [ - 'columnName' => 'guest_name', - 'nullable' => false, - 'unique' => true, - 'length' => 240, - ] - ); + $fieldMetadata = new Mapping\FieldMetadata('id'); + + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setColumnName('guest_id'); + $fieldMetadata->setPrimaryKey(true); + + $metadata->setAttributeOverride($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('name'); + + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setLength(240); + $fieldMetadata->setColumnName('guest_name'); + $fieldMetadata->setNullable(false); + $fieldMetadata->setUnique(true); + + $metadata->setAttributeOverride($fieldMetadata); } } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php index f6c976d247a..11af04fd0ab 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php @@ -4,7 +4,7 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Mapping\JoinColumnMetadata; +use Doctrine\ORM\Mapping; /** * @MappedSuperclass @@ -111,29 +111,25 @@ public function setAddress(DDC964Address $address) public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->addProperty( - 'id', - Type::getType('integer'), - [ - 'id' => true, - 'columnName' => 'user_id', - ] - ); + $fieldMetadata = new Mapping\FieldMetadata('id'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setColumnName('user_id'); + $fieldMetadata->setPrimaryKey(true); - $metadata->addProperty( - 'name', - Type::getType('string'), - [ - 'columnName'=> 'user_name', - 'nullable' => true, - 'unique' => false, - 'length' => 250, - ] - ); + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('name'); + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setLength(250); + $fieldMetadata->setColumnName('user_name'); + $fieldMetadata->setNullable(true); + $fieldMetadata->setUnique(false); + + $metadata->addProperty($fieldMetadata); $joinColumns = []; - $joinColumn = new JoinColumnMetadata(); + $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName('address_id'); $joinColumn->setReferencedColumnName('id'); @@ -151,14 +147,14 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat $joinColumns = $inverseJoinColumns = []; - $joinColumn = new JoinColumnMetadata(); + $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName('user_id'); $joinColumn->setReferencedColumnName('id'); $joinColumns[] = $joinColumn; - $joinColumn = new JoinColumnMetadata(); + $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName('group_id'); $joinColumn->setReferencedColumnName('id'); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php index 38d5c105094..7ce37d30a09 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php @@ -5,6 +5,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\EntityManager; use Doctrine\ORM\Sequencing\AbstractGenerator; +use Doctrine\ORM\Mapping; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\Driver\StaticPHPDriver; use Doctrine\ORM\Sequencing\Generator; @@ -61,7 +62,12 @@ public function getId() public static function loadMetadata(ClassMetadata $metadata) { - $metadata->addProperty('id', Type::getType('string'), ['id' => true]); + $fieldMetadata = new Mapping\FieldMetadata('id'); + + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setPrimaryKey(true); + + $metadata->addProperty($fieldMetadata); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); @@ -92,7 +98,11 @@ public function getName() public static function loadMetadata(ClassMetadata $metadata) { - $metadata->addProperty('name', Type::getType('string')); + $fieldMetadata = new Mapping\FieldMetadata('name'); + + $fieldMetadata->setType(Type::getType('string')); + + $metadata->addProperty($fieldMetadata); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 06e628a3a56..ae3ca13536f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -6,12 +6,10 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\EntityManager; use Doctrine\ORM\Events; +use Doctrine\ORM\Mapping; use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; -use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\DefaultNamingStrategy; -use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Mapping\UnderscoreNamingStrategy; use Doctrine\Tests\Models\Cache\City; @@ -525,8 +523,8 @@ public function testDefaultFieldType() $idProperty = $class->getProperty('id'); $nameProperty = $class->getProperty('name'); - self::assertInstanceOf(FieldMetadata::class, $idProperty); - self::assertInstanceOf(FieldMetadata::class, $nameProperty); + self::assertInstanceOf(Mapping\FieldMetadata::class, $idProperty); + self::assertInstanceOf(Mapping\FieldMetadata::class, $nameProperty); self::assertEquals('string', $idProperty->getTypeName()); self::assertEquals('string', $nameProperty->getTypeName()); @@ -831,6 +829,7 @@ public function testInversedByOverrideMapping() // assert groups association mappings self::assertArrayHasKey('groups', $adminMetadata->associationMappings); + $adminGroups = $adminMetadata->associationMappings['groups']; // assert override @@ -1227,47 +1226,49 @@ public static function loadMetadata(ClassMetadata $metadata) $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); $metadata->addLifecycleCallback('doStuffOnPostPersist', 'postPersist'); - $metadata->addProperty( - 'id', - Type::getType('integer'), - [ - 'id' => true, - 'options' => ['foo' => 'bar', 'unsigned' => false], - ] - ); + $fieldMetadata = new Mapping\FieldMetadata('id'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setOptions(['foo' => 'bar', 'unsigned' => false]); - $metadata->addProperty( - 'name', - Type::getType('string'), + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('name'); + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setLength(50); + $fieldMetadata->setNullable(true); + $fieldMetadata->setUnique(true); + $fieldMetadata->setOptions( [ - 'length' => 50, - 'unique' => true, - 'nullable' => true, - 'options' => [ - 'foo' => 'bar', - 'baz' => ['key' => 'val'], - 'fixed' => false + 'foo' => 'bar', + 'baz' => [ + 'key' => 'val', ], + 'fixed' => false, ] ); - $metadata->addProperty( - 'email', - Type::getType('string'), - [ - 'columnName' => 'user_email', - 'columnDefinition' => 'CHAR(32) NOT NULL', - ] - ); + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('email'); + + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setColumnName('user_email'); + $fieldMetadata->setColumnDefinition('CHAR(32) NOT NULL'); - $property = $metadata->addProperty('version', Type::getType('integer')); + $metadata->addProperty($fieldMetadata); - $metadata->setVersionProperty($property); + $fieldMetadata = new Mapping\VersionFieldMetadata('version'); + + $fieldMetadata->setType(Type::getType('integer')); + + $metadata->addProperty($fieldMetadata); + $metadata->setVersionProperty($fieldMetadata); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); $joinColumns = []; - $joinColumn = new JoinColumnMetadata(); + $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName('address_id'); $joinColumn->setReferencedColumnName('id'); @@ -1299,7 +1300,7 @@ public static function loadMetadata(ClassMetadata $metadata) $joinColumns = $inverseJoinColumns = []; - $joinColumn = new JoinColumnMetadata(); + $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName('user_id'); $joinColumn->setReferencedColumnName('id'); @@ -1308,7 +1309,7 @@ public static function loadMetadata(ClassMetadata $metadata) $joinColumns[] = $joinColumn; - $joinColumn = new JoinColumnMetadata(); + $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName('group_id'); $joinColumn->setReferencedColumnName('id'); @@ -1442,20 +1443,20 @@ public function getValue() public static function loadMetadata(ClassMetadata $metadata) { - $metadata->addProperty( - 'id', - Type::getType('integer'), - [ - 'id' => true, - 'columnDefinition' => 'INT unsigned NOT NULL', - ] - ); + $fieldMetadata = new Mapping\FieldMetadata('id'); - $metadata->addProperty( - 'value', - Type::getType('string'), - ['columnDefinition' => 'VARCHAR(255) NOT NULL'] - ); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setColumnDefinition('INT unsigned NOT NULL'); + $fieldMetadata->setPrimaryKey(true); + + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('value'); + + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setColumnDefinition('VARCHAR(255) NOT NULL'); + + $metadata->addProperty($fieldMetadata); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); } @@ -1479,13 +1480,14 @@ class DDC807Entity public static function loadMetadata(ClassMetadata $metadata) { - $metadata->addProperty( - 'id', - Type::getType('string'), - ['id' => true] - ); + $fieldMetadata = new Mapping\FieldMetadata('id'); + + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setPrimaryKey(true); + + $metadata->addProperty($fieldMetadata); - $discrColumn = new DiscriminatorColumnMetadata(); + $discrColumn = new Mapping\DiscriminatorColumnMetadata(); $discrColumn->setTableName($metadata->getTableName()); $discrColumn->setColumnName('dtype'); @@ -1532,15 +1534,12 @@ public static function loadMetadata(ClassMetadata $metadata) ] ); - $metadata->addProperty( - 'content', - Type::getType('text'), - [ - 'length' => null, - 'unique' => false, - 'nullable' => false, - ] - ); + $fieldMetadata = new Mapping\FieldMetadata('content'); + $fieldMetadata->setType(Type::getType('text')); + $fieldMetadata->setNullable(false); + $fieldMetadata->setUnique(false); + + $metadata->addProperty($fieldMetadata); } } @@ -1563,11 +1562,11 @@ class SingleTableEntityNoDiscriminatorColumnMapping public static function loadMetadata(ClassMetadata $metadata) { - $metadata->addProperty( - 'id', - Type::getType('string'), - ['id' => true] - ); + $fieldMetadata = new Mapping\FieldMetadata('id'); + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setPrimaryKey(true); + + $metadata->addProperty($fieldMetadata); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); } @@ -1597,11 +1596,11 @@ class SingleTableEntityIncompleteDiscriminatorColumnMapping public static function loadMetadata(ClassMetadata $metadata) { // @todo: String != Integer and this should not work - $metadata->addProperty( - 'id', - Type::getType('string'), - ['id' => true] - ); + $fieldMetadata = new Mapping\FieldMetadata('id'); + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setPrimaryKey(true); + + $metadata->addProperty($fieldMetadata); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 27bd498e240..361f19103bd 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -12,8 +12,8 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs; use Doctrine\ORM\Events; -use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Sequencing\Generator; +use Doctrine\ORM\Mapping; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\MappingException; @@ -282,10 +282,19 @@ protected function _createValidClassMetadata() $cm1->setPrimaryTable(['name' => 'group']); // Add a mapped field - $cm1->addProperty('id', Type::getType('integer'), ['id' => true]); + $fieldMetadata = new Mapping\FieldMetadata('id'); + + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setPrimaryKey(true); + + $cm1->addProperty($fieldMetadata); // Add a mapped field - $cm1->addProperty('name', Type::getType('string')); + $fieldMetadata = new Mapping\FieldMetadata('name'); + + $fieldMetadata->setType(Type::getType('string')); + + $cm1->addProperty($fieldMetadata); // and a mapped association $cm1->mapOneToOne(['fieldName' => 'other', 'targetEntity' => 'TestEntity1', 'mappedBy' => 'this']); @@ -293,7 +302,7 @@ protected function _createValidClassMetadata() // and an association on the owning side $joinColumns = []; - $joinColumn = new JoinColumnMetadata(); + $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName("other_id"); $joinColumn->setReferencedColumnName("id"); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php index df2b0749719..25efa24c397 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php @@ -5,6 +5,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Event\LoadClassMetadataEventArgs; use Doctrine\ORM\Events; +use Doctrine\ORM\Mapping; use Doctrine\Tests\OrmTestCase; class ClassMetadataLoadEventTest extends OrmTestCase @@ -14,20 +15,28 @@ class ClassMetadataLoadEventTest extends OrmTestCase */ public function testEvent() { - $em = $this->_getTestEntityManager(); - $metadataFactory = $em->getMetadataFactory(); - $evm = $em->getEventManager(); - $evm->addEventListener(Events::loadClassMetadata, $this); - $classMetadata = $metadataFactory->getMetadataFor(LoadEventTestEntity::class); - self::assertTrue($classMetadata->hasField('about')); - self::assertArrayHasKey('about', $classMetadata->reflFields); - self::assertInstanceOf('ReflectionProperty', $classMetadata->reflFields['about']); + $entityManager = $this->_getTestEntityManager(); + $metadataFactory = $entityManager->getMetadataFactory(); + $eventManager = $entityManager->getEventManager(); + + $eventManager->addEventListener(Events::loadClassMetadata, $this); + + $metadata = $metadataFactory->getMetadataFor(LoadEventTestEntity::class); + + self::assertTrue($metadata->hasField('about')); + self::assertArrayHasKey('about', $metadata->reflFields); + self::assertInstanceOf('ReflectionProperty', $metadata->reflFields['about']); } public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs) { - $classMetadata = $eventArgs->getClassMetadata(); - $classMetadata->addProperty('about', Type::getType('string'), ['length' => 255]); + $metadata = $eventArgs->getClassMetadata(); + $fieldMetadata = new Mapping\FieldMetadata('about'); + + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setLength(255); + + $metadata->addProperty($fieldMetadata); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 2211cee5346..7375004c0e9 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -98,27 +98,44 @@ public function testClassMetadataInstanceSerialization() public function testFieldIsNullable() { - $cm = new ClassMetadata(CMS\CmsUser::class); - $cm->initializeReflection(new RuntimeReflectionService()); + $metadata = new ClassMetadata(CMS\CmsUser::class); + $metadata->initializeReflection(new RuntimeReflectionService()); // Explicit Nullable - $property = $cm->addProperty('status', Type::getType('string'), [ - 'nullable' => true, - 'length' => 50, - ]); + $fieldMetadata = new Mapping\FieldMetadata('status'); + + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setLength(50); + $fieldMetadata->setNullable(true); + + $metadata->addProperty($fieldMetadata); + + $property = $metadata->getProperty('status'); self::assertTrue($property->isNullable()); // Explicit Not Nullable - $property = $cm->addProperty('username', Type::getType('string'), [ - 'nullable' => false, - 'length' => 50, - ]); + $fieldMetadata = new Mapping\FieldMetadata('username'); + + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setLength(50); + $fieldMetadata->setNullable(false); + + $metadata->addProperty($fieldMetadata); + + $property = $metadata->getProperty('username'); self::assertFalse($property->isNullable()); // Implicit Not Nullable - $property = $cm->addProperty('name', Type::getType('string'), ['length' => 50]); + $fieldMetadata = new Mapping\FieldMetadata('name'); + + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setLength(50); + + $metadata->addProperty($fieldMetadata); + + $property = $metadata->getProperty('name'); self::assertFalse($property->isNullable(), "By default a field should not be nullable."); } @@ -263,7 +280,7 @@ public function testSetSubClassesInGlobalNamespace() public function testSetInvalidVersionMapping_ThrowsException() { $metadata = new ClassMetadata(CMS\CmsUser::class); - $property = new FieldMetadata('foo'); //new FieldMetadata('foo', 'foo', Type::getType('string')); + $property = new Mapping\VersionFieldMetadata('foo'); //new FieldMetadata('foo', 'foo', Type::getType('string')); $property->setDeclaringClass($metadata); $property->setColumnName('foo'); @@ -310,22 +327,35 @@ public function testDuplicateAssociationMappingException() public function testDuplicateColumnName_ThrowsMappingException() { - $cm = new ClassMetadata(CMS\CmsUser::class); - $cm->initializeReflection(new RuntimeReflectionService()); + $metadata = new ClassMetadata(CMS\CmsUser::class); + $metadata->initializeReflection(new RuntimeReflectionService()); + + $fieldMetadata = new Mapping\FieldMetadata('name'); + + $fieldMetadata->setType(Type::getType('string')); - $cm->addProperty('name', Type::getType('string')); + $metadata->addProperty($fieldMetadata); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - $cm->addProperty('username', Type::getType('string'), ['columnName' => 'name']); + $fieldMetadata = new Mapping\FieldMetadata('username'); + + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setColumnName('name'); + + $metadata->addProperty($fieldMetadata); } public function testDuplicateColumnName_DiscriminatorColumn_ThrowsMappingException() { - $cm = new ClassMetadata(CMS\CmsUser::class); - $cm->initializeReflection(new RuntimeReflectionService()); + $metadata = new ClassMetadata(CMS\CmsUser::class); + $metadata->initializeReflection(new RuntimeReflectionService()); + + $fieldMetadata = new Mapping\FieldMetadata('name'); + + $fieldMetadata->setType(Type::getType('string')); - $cm->addProperty('name', Type::getType('string')); + $metadata->addProperty($fieldMetadata); $discrColumn = new DiscriminatorColumnMetadata(); @@ -335,13 +365,13 @@ public function testDuplicateColumnName_DiscriminatorColumn_ThrowsMappingExcepti $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - $cm->setDiscriminatorColumn($discrColumn); + $metadata->setDiscriminatorColumn($discrColumn); } public function testDuplicateColumnName_DiscriminatorColumn2_ThrowsMappingException() { - $cm = new ClassMetadata(CMS\CmsUser::class); - $cm->initializeReflection(new RuntimeReflectionService()); + $metadata = new ClassMetadata(CMS\CmsUser::class); + $metadata->initializeReflection(new RuntimeReflectionService()); $discrColumn = new DiscriminatorColumnMetadata(); @@ -349,34 +379,46 @@ public function testDuplicateColumnName_DiscriminatorColumn2_ThrowsMappingExcept $discrColumn->setType(Type::getType('string')); $discrColumn->setLength(255); - $cm->setDiscriminatorColumn($discrColumn); + $metadata->setDiscriminatorColumn($discrColumn); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - $cm->addProperty('name', Type::getType('string')); + $fieldMetadata = new Mapping\FieldMetadata('name'); + + $fieldMetadata->setType(Type::getType('string')); + + $metadata->addProperty($fieldMetadata); } public function testDuplicateFieldAndAssociationMapping1_ThrowsException() { - $cm = new ClassMetadata(CMS\CmsUser::class); - $cm->initializeReflection(new RuntimeReflectionService()); + $metadata = new ClassMetadata(CMS\CmsUser::class); + $metadata->initializeReflection(new RuntimeReflectionService()); - $cm->addProperty('name', Type::getType('string')); + $fieldMetadata = new Mapping\FieldMetadata('name'); + + $fieldMetadata->setType(Type::getType('string')); + + $metadata->addProperty($fieldMetadata); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - $cm->mapOneToOne(['fieldName' => 'name', 'targetEntity' => 'CmsUser']); + $metadata->mapOneToOne(['fieldName' => 'name', 'targetEntity' => 'CmsUser']); } public function testDuplicateFieldAndAssociationMapping2_ThrowsException() { - $cm = new ClassMetadata(CMS\CmsUser::class); - $cm->initializeReflection(new RuntimeReflectionService()); + $metadata = new ClassMetadata(CMS\CmsUser::class); + $metadata->initializeReflection(new RuntimeReflectionService()); - $cm->mapOneToOne(['fieldName' => 'name', 'targetEntity' => 'CmsUser']); + $metadata->mapOneToOne(['fieldName' => 'name', 'targetEntity' => 'CmsUser']); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - $cm->addProperty('name', Type::getType('string')); + $fieldMetadata = new Mapping\FieldMetadata('name'); + + $fieldMetadata->setType(Type::getType('string')); + + $metadata->addProperty($fieldMetadata); } /** @@ -586,14 +628,21 @@ public function testManyToManyUnderscoreNamingStrategyDefaults() */ public function testSetMultipleIdentifierSetsComposite() { - $cm = new ClassMetadata(CMS\CmsUser::class); - $cm->initializeReflection(new RuntimeReflectionService()); + $metadata = new ClassMetadata(CMS\CmsUser::class); + $metadata->initializeReflection(new RuntimeReflectionService()); + + $fieldMetadata = new Mapping\FieldMetadata('name'); + $fieldMetadata->setType(Type::getType('string')); + + $metadata->addProperty($fieldMetadata); - $cm->addProperty('name', Type::getType('string')); - $cm->addProperty('username', Type::getType('string')); + $fieldMetadata = new Mapping\FieldMetadata('username'); + $fieldMetadata->setType(Type::getType('string')); - $cm->setIdentifier(['name', 'username']); - self::assertTrue($cm->isIdentifierComposite); + $metadata->addProperty($fieldMetadata); + + $metadata->setIdentifier(['name', 'username']); + self::assertTrue($metadata->isIdentifierComposite); } /** @@ -704,10 +753,14 @@ public function testEmptyFieldNameThrowsException() $this->expectException(MappingException::class); $this->expectExceptionMessage("The field or association mapping misses the 'fieldName' attribute in entity '" . CMS\CmsUser::class . "'."); - $cm = new ClassMetadata(CMS\CmsUser::class); - $cm->initializeReflection(new RuntimeReflectionService()); + $metadata = new ClassMetadata(CMS\CmsUser::class); + $metadata->initializeReflection(new RuntimeReflectionService()); + + $fieldMetadata = new Mapping\FieldMetadata(''); - $cm->addProperty('', Type::getType('string')); + $fieldMetadata->setType(Type::getType('string')); + + $metadata->addProperty($fieldMetadata); } public function testRetrievalOfNamedQueries() @@ -1196,14 +1249,23 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategyProperty $metadata->initializeReflection(new RuntimeReflectionService()); - $metadata->addProperty('country', Type::getType('string')); - $metadata->addProperty('city', Type::getType('string')); + $fieldMetadata = new Mapping\FieldMetadata('country'); + + $fieldMetadata->setType(Type::getType('string')); + + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('city'); + + $fieldMetadata->setType(Type::getType('string')); + + $metadata->addProperty($fieldMetadata); self::assertEquals( $metadata->fieldNames, [ - 'cmsaddress_country' => 'country', - 'cmsaddress_city' => 'city' + 'cmsaddress_country' => 'country', + 'cmsaddress_city' => 'city' ] ); } @@ -1243,12 +1305,18 @@ public function testInvalidPropertyAssociationOverrideNameException() */ public function testInvalidPropertyAttributeOverrideNameException() { - $cm = new ClassMetadata(DDC964Guest::class); - $cm->initializeReflection(new RuntimeReflectionService()); + $metadata = new ClassMetadata(DDC964Guest::class); + $metadata->initializeReflection(new RuntimeReflectionService()); - $cm->addProperty('name', Type::getType('string')); + $fieldMetadata = new Mapping\FieldMetadata('name'); + $fieldMetadata->setType(Type::getType('string')); - $cm->setAttributeOverride('invalidPropertyName', []); + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('invalidPropertyName'); + $fieldMetadata->setType(Type::getType('string')); + + $metadata->setAttributeOverride($fieldMetadata); } /** @@ -1389,27 +1457,40 @@ public function testCanInstantiateInternalPhpClassSubclassFromUnserializedMetada */ public function testWakeupReflectionWithEmbeddableAndStaticReflectionService() { - $classMetadata = new ClassMetadata(TestEntity1::class); + $metadata = new ClassMetadata(TestEntity1::class); - $classMetadata->mapEmbedded( + $metadata->mapEmbedded( [ - 'fieldName' => 'test', - 'class' => TestEntity1::class, - 'columnPrefix' => false, + 'fieldName' => 'test', + 'class' => TestEntity1::class, + 'columnPrefix' => false, ] ); + $fieldMetadata = new Mapping\FieldMetadata('test.embeddedProperty'); + $fieldMetadata->setType(Type::getType('string')); + + $metadata->addProperty($fieldMetadata); + + /* $mapping = [ 'originalClass' => TestEntity1::class, 'declaredField' => 'test', 'originalField' => 'embeddedProperty' ]; - $classMetadata->addProperty('test.embeddedProperty', Type::getType('string'), $mapping); + $metadata->addProperty('test.embeddedProperty', Type::getType('string'), $mapping); + */ - $classMetadata->wakeupReflection(new StaticReflectionService()); + $metadata->wakeupReflection(new StaticReflectionService()); - self::assertEquals(['test' => null, 'test.embeddedProperty' => null], $classMetadata->getReflectionProperties()); + self::assertEquals( + [ + 'test' => null, + 'test.embeddedProperty' => null + ], + $metadata->getReflectionProperties() + ); } public function testGetColumnNamesWithGivenFieldNames() @@ -1417,11 +1498,31 @@ public function testGetColumnNamesWithGivenFieldNames() $metadata = new ClassMetadata(CMS\CmsUser::class); $metadata->initializeReflection(new RuntimeReflectionService()); - $metadata->addProperty('status', Type::getType('string'), ['columnName' => 'foo']); - $metadata->addProperty('username', Type::getType('string'), ['columnName' => 'bar']); - $metadata->addProperty('name', Type::getType('string'), ['columnName' => 'baz']); + $fieldMetadata = new Mapping\FieldMetadata('status'); + + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setColumnName('foo'); + + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('username'); + + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setColumnName('bar'); - self::assertSame(['foo', 'baz'], $metadata->getColumnNames(['status', 'name'])); + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('name'); + + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setColumnName('baz'); + + $metadata->addProperty($fieldMetadata); + + self::assertSame( + ['foo', 'baz'], + $metadata->getColumnNames(['status', 'name']) + ); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php index bf01e97513d..9cac3a5466d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php @@ -9,9 +9,23 @@ /* @var $metadata ClassMetadata */ $metadata->setPrimaryTable(['name' => 'company_person']); -$metadata->addProperty('id', Type::getType('integer'), ['id' => true]); -$metadata->addProperty('zip', Type::getType('string'), ['length' => 50]); -$metadata->addProperty('city', Type::getType('string'), ['length' => 50]); +$fieldMetadata = new Mapping\FieldMetadata('id'); +$fieldMetadata->setType(Type::getType('integer')); +$fieldMetadata->setPrimaryKey(true); + +$metadata->addProperty($fieldMetadata); + +$fieldMetadata = new Mapping\FieldMetadata('zip'); +$fieldMetadata->setType(Type::getType('string')); +$fieldMetadata->setLength(50); + +$metadata->addProperty($fieldMetadata); + +$fieldMetadata = new Mapping\FieldMetadata('city'); +$fieldMetadata->setType(Type::getType('string')); +$fieldMetadata->setLength(50); + +$metadata->addProperty($fieldMetadata); $joinColumns = []; diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index cbce4217dc6..3f55b5c1006 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -14,8 +14,16 @@ $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); $metadata->enableCache(['usage' => ClassMetadata::CACHE_USAGE_READ_ONLY]); -$metadata->addProperty('id', Type::getType('integer'), ['id' => true]); -$metadata->addProperty('name', Type::getType('string')); +$fieldMetadata = new Mapping\FieldMetadata('id'); +$fieldMetadata->setType(Type::getType('integer')); +$fieldMetadata->setPrimaryKey(true); + +$metadata->addProperty($fieldMetadata); + +$fieldMetadata = new Mapping\FieldMetadata('name'); +$fieldMetadata->setType(Type::getType('string')); + +$metadata->addProperty($fieldMetadata); $joinColumns = []; diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php index 768111eac58..3876640387a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php @@ -23,8 +23,16 @@ ] ); -$metadata->addProperty('id', Type::getType('string'), ['id' => true]); -$metadata->addProperty('completed', Type::getType('boolean')); +$fieldMetadata = new Mapping\FieldMetadata('id'); +$fieldMetadata->setType(Type::getType('string')); +$fieldMetadata->setPrimaryKey(true); + +$metadata->addProperty($fieldMetadata); + +$fieldMetadata = new Mapping\FieldMetadata('completed'); +$fieldMetadata->setType(Type::getType('boolean')); + +$metadata->addProperty($fieldMetadata); $metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, 'CompanyContractListener', 'postPersistHandler'); $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, 'CompanyContractListener', 'prePersistHandler'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFixContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFixContract.php index ef18f34e5b9..6abf93cbae2 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFixContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFixContract.php @@ -1,7 +1,13 @@ addProperty('fixPrice', Type::getType('integer'), ['columnName' => 'fixPrice']); +$fieldMetadata = new Mapping\FieldMetadata('fixPrice'); + +$fieldMetadata->setType(Type::getType('integer')); +$fieldMetadata->setColumnName('fixPrice'); + +$metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexContract.php index f743708b77c..3771bba220b 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexContract.php @@ -1,8 +1,20 @@ addProperty('hoursWorked', Type::getType('integer'), ['columnName' => 'hoursWorked']); -$metadata->addProperty('pricePerHour', Type::getType('integer'), ['columnName' => 'pricePerHour']); +$fieldMetadata = new Mapping\FieldMetadata('hoursWorked'); + +$fieldMetadata->setType(Type::getType('integer')); +$fieldMetadata->setColumnName('hoursWorked'); + +$metadata->addProperty($fieldMetadata); + +$fieldMetadata = new Mapping\FieldMetadata('pricePerHour'); + +$fieldMetadata->setType(Type::getType('integer')); +$fieldMetadata->setColumnName('pricePerHour'); + +$metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexUltraContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexUltraContract.php index a2affcd792b..7ce527092cd 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexUltraContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexUltraContract.php @@ -1,10 +1,16 @@ addProperty('maxPrice', Type::getType('integer'), ['columnName' => 'maxPrice']); +$fieldMetadata = new Mapping\FieldMetadata('maxPrice'); + +$fieldMetadata->setType(Type::getType('integer')); +$fieldMetadata->setColumnName('maxPrice'); + +$metadata->addProperty($fieldMetadata); $metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, 'CompanyContractListener', 'postPersistHandler'); $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, 'CompanyContractListener', 'prePersistHandler'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php index a21dfbc19f1..68f1e4b2ce9 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php @@ -1,10 +1,19 @@ addProperty('id', Type::getType('string'), ['id' => true]); -$metadata->addProperty('name', Type::getType('string')); +$fieldMetadata = new Mapping\FieldMetadata('id'); +$fieldMetadata->setType(Type::getType('string')); +$fieldMetadata->setPrimaryKey(true); + +$metadata->addProperty($fieldMetadata); + +$fieldMetadata = new Mapping\FieldMetadata('name'); +$fieldMetadata->setType(Type::getType('string')); + +$metadata->addProperty($fieldMetadata); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php index 8bc1067cdf9..346a537e381 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php @@ -1,6 +1,7 @@ addProperty('id', Type::getType('integer'), ['id' => true]); +$fieldMetadata = new Mapping\FieldMetadata('id'); + +$fieldMetadata->setType(Type::getType('integer')); +$fieldMetadata->setPrimaryKey(true); + +$metadata->addProperty($fieldMetadata); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php index f7e77b2cc42..ee571b47fe6 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php @@ -1,11 +1,16 @@ setPrimaryTable(['name' => 'implicit_schema.implicit_table']); -$metadata->addProperty('id', Type::getType('integer'), ['id' => true]); +$fieldMetadata = new Mapping\FieldMetadata('id'); +$fieldMetadata->setType(Type::getType('integer')); +$fieldMetadata->setPrimaryKey(true); + +$metadata->addProperty($fieldMetadata); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php index a3f9a83db57..2e2c46cf1a0 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php @@ -1,33 +1,30 @@ addProperty( - 'id', - Type::getType('integer'), - [ - 'id' => true, - 'columnName' => 'user_id', - ] -); +$fieldMetadata = new Mapping\FieldMetadata('id'); +$fieldMetadata->setType(Type::getType('integer')); +$fieldMetadata->setColumnName('user_id'); +$fieldMetadata->setPrimaryKey(true); -$metadata->addProperty( - 'name', - Type::getType('string'), - [ - 'columnName' => 'user_name', - 'nullable' => true, - 'unique' => false, - 'length' => 250, - ] -); +$metadata->addProperty($fieldMetadata); + +$fieldMetadata = new Mapping\FieldMetadata('name'); +$fieldMetadata->setType(Type::getType('string')); +$fieldMetadata->setLength(250); +$fieldMetadata->setColumnName('user_name'); +$fieldMetadata->setNullable(true); +$fieldMetadata->setUnique(false); + +$metadata->addProperty($fieldMetadata); $metadata->mapManyToMany( [ - 'fieldName' => 'groups', - 'targetEntity' => 'DDC3579Group' + 'fieldName' => 'groups', + 'targetEntity' => 'DDC3579Group' ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869ChequePayment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869ChequePayment.php index 8cdc8aa0b0e..f096c970fa1 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869ChequePayment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869ChequePayment.php @@ -1,7 +1,11 @@ addProperty('serialNumber', Type::getType('integer')); +$fieldMetadata = new Mapping\FieldMetadata('serialNumber'); +$fieldMetadata->setType(Type::getType('integer')); + +$metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.php index f6f35971eae..1da0bdda84d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.php @@ -1,7 +1,11 @@ addProperty('creditCardNumber', Type::getType('string')); +$fieldMetadata = new Mapping\FieldMetadata('creditCardNumber'); +$fieldMetadata->setType(Type::getType('string')); + +$metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php index 24136c35294..d6c4cff1bdf 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php @@ -1,14 +1,23 @@ isMappedSuperclass = true; -$metadata->addProperty('id', Type::getType('integer'), ['id' => true]); -$metadata->addProperty('value', Type::getType('float')); +$fieldMetadata = new Mapping\FieldMetadata('id'); +$fieldMetadata->setType(Type::getType('integer')); +$fieldMetadata->setPrimaryKey(true); + +$metadata->addProperty($fieldMetadata); + +$fieldMetadata = new Mapping\FieldMetadata('value'); +$fieldMetadata->setType(Type::getType('float')); + +$metadata->addProperty($fieldMetadata); $metadata->setCustomRepositoryClass(DDC869PaymentRepository::class); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Class.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Class.php index f8d4bc391c9..c0dbd351c60 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Class.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Class.php @@ -1,7 +1,12 @@ addProperty('id', Type::getType('integer'), ['id' => true]); +$fieldMetadata = new Mapping\FieldMetadata('id'); +$fieldMetadata->setType(Type::getType('integer')); +$fieldMetadata->setPrimaryKey(true); + +$metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php index b2762a3555b..2c79f9d5c67 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php @@ -1,12 +1,16 @@ isMappedSuperclass = true; -$metadata->addProperty('name', Type::getType('string')); +$fieldMetadata = new Mapping\FieldMetadata('name'); +$fieldMetadata->setType(Type::getType('string')); + +$metadata->addProperty($fieldMetadata); $metadata->setCustomRepositoryClass(DDC889SuperClass::class); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Guest.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Guest.php index 732f6e3eb55..f3f4c6e9f0f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Guest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Guest.php @@ -1,12 +1,22 @@ setAttributeOverride('id', ['columnName' => 'guest_id']); - -$metadata->setAttributeOverride('name', - [ - 'columnName' => 'guest_name', - 'nullable' => false, - 'unique' => true, - 'length' => 240, - ] -); +use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping; + +$fieldMetadata = new Mapping\FieldMetadata('id'); + +$fieldMetadata->setType(Type::getType('integer')); +$fieldMetadata->setColumnName('guest_id'); +$fieldMetadata->setPrimaryKey(true); + +$metadata->setAttributeOverride($fieldMetadata); + +$fieldMetadata = new Mapping\FieldMetadata('name'); + +$fieldMetadata->setType(Type::getType('string')); +$fieldMetadata->setLength(240); +$fieldMetadata->setColumnName('guest_name'); +$fieldMetadata->setNullable(false); +$fieldMetadata->setUnique(true); + +$metadata->setAttributeOverride($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php index bf0c6933995..9bdc6a66790 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php @@ -5,25 +5,23 @@ use Doctrine\ORM\Mapping\ClassMetadata; /* @var $metadata ClassMetadata */ -$metadata->addProperty( - 'id', - Type::getType('integer'), - [ - 'id' => true, - 'columnName' => 'user_id', - ] -); +$fieldMetadata = new Mapping\FieldMetadata('id'); -$metadata->addProperty( - 'name', - Type::getType('string'), - [ - 'columnName'=> 'user_name', - 'nullable' => true, - 'unique' => false, - 'length' => 250, - ] -); +$fieldMetadata->setType(Type::getType('integer')); +$fieldMetadata->setColumnName('user_id'); +$fieldMetadata->setPrimaryKey(true); + +$metadata->addProperty($fieldMetadata); + +$fieldMetadata = new Mapping\FieldMetadata('name'); + +$fieldMetadata->setType(Type::getType('string')); +$fieldMetadata->setLength(250); +$fieldMetadata->setColumnName('user_name'); +$fieldMetadata->setNullable(true); +$fieldMetadata->setUnique(false); + +$metadata->addProperty($fieldMetadata); $joinColumns = []; diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php index 0c05f4fa1f7..1f0cd52711a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php @@ -27,16 +27,14 @@ $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); -$metadata->addProperty( - 'id', - Type::getType('integer'), - [ - 'length' => NULL, - 'nullable' => false, - 'unique' => false, - 'id' => true, - ] -); +$fieldMetadata = new Mapping\FieldMetadata('id'); + +$fieldMetadata->setType(Type::getType('integer')); +$fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setNullable(false); +$fieldMetadata->setUnique(false); + +$metadata->addProperty($fieldMetadata); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php index eefc3fe5964..6be098a888d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php @@ -1,6 +1,7 @@ addProperty( - 'content', - Type::getType('text'), - [ - 'length' => NULL, - 'unique' => false, - 'nullable' => false, - ] -); +$fieldMetadata = new Mapping\FieldMetadata('content'); + +$fieldMetadata->setType(Type::getType('text')); +$fieldMetadata->setNullable(false); +$fieldMetadata->setUnique(false); + +$metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php index 5c80bb8b5a6..7f97a971381 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php @@ -1,22 +1,21 @@ addProperty( - 'id', - Type::getType('string'), - [ - 'id' => true, - 'columnDefinition' => 'INT unsigned NOT NULL', - ] -); +$fieldMetadata = new Mapping\FieldMetadata('id'); +$fieldMetadata->setType(Type::getType('integer')); +$fieldMetadata->setColumnDefinition('INT unsigned NOT NULL'); +$fieldMetadata->setPrimaryKey(true); -$metadata->addProperty( - 'value', - Type::getType('string'), - ['columnDefinition' => 'VARCHAR(255) NOT NULL'] -); +$metadata->addProperty($fieldMetadata); + +$fieldMetadata = new Mapping\FieldMetadata('value'); +$fieldMetadata->setType(Type::getType('string')); +$fieldMetadata->setColumnDefinition('VARCHAR(255) NOT NULL'); + +$metadata->addProperty($fieldMetadata); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php index e3737e3c387..e6fab1b4c9a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php @@ -5,7 +5,11 @@ use Doctrine\ORM\Mapping\ClassMetadata; /* @var $metadata ClassMetadata */ -$metadata->addProperty('id', Type::getType('string'), ['id' => true]); +$fieldMetadata = new Mapping\FieldMetadata('id'); +$fieldMetadata->setType(Type::getType('string')); +$fieldMetadata->setPrimaryKey(true); + +$metadata->addProperty($fieldMetadata); $discrColumn = new Mapping\DiscriminatorColumnMetadata(); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index ea92d507228..ba8185038f2 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -22,41 +22,45 @@ ] ); -$metadata->addProperty( - 'id', - Type::getType('integer'), - [ - 'id' => true, - 'options' => ['foo' => 'bar', 'unsigned' => false], - ] -); +$fieldMetadata = new Mapping\FieldMetadata('id'); -$metadata->addProperty( - 'name', - Type::getType('string'), - [ - 'length' => 50, - 'unique' => true, - 'nullable' => true, - 'columnName' => 'name', - 'options' => [ - 'foo' => 'bar', - 'baz' => ['key' => 'val'], - 'fixed' => false - ], - ] -); +$fieldMetadata->setType(Type::getType('integer')); +$fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setOptions(['foo' => 'bar', 'unsigned' => false]); + +$metadata->addProperty($fieldMetadata); -$metadata->addProperty( - 'email', - Type::getType('string'), +$fieldMetadata = new Mapping\FieldMetadata('name'); + +$fieldMetadata->setType(Type::getType('string')); +$fieldMetadata->setLength(50); +$fieldMetadata->setColumnName('name'); +$fieldMetadata->setNullable(true); +$fieldMetadata->setUnique(true); +$fieldMetadata->setOptions( [ - 'columnName' => 'user_email', - 'columnDefinition' => 'CHAR(32) NOT NULL', + 'foo' => 'bar', + 'baz' => ['key' => 'val'], + 'fixed' => false, ] ); -$metadata->setVersionProperty($metadata->addProperty('version', Type::getType('integer'))); +$metadata->addProperty($fieldMetadata); + +$fieldMetadata = new Mapping\FieldMetadata('email'); + +$fieldMetadata->setType(Type::getType('string')); +$fieldMetadata->setColumnName('user_email'); +$fieldMetadata->setColumnDefinition('CHAR(32) NOT NULL'); + +$metadata->addProperty($fieldMetadata); + +$versionFieldMetadata = new Mapping\VersionFieldMetadata('version'); + +$versionFieldMetadata->setType(Type::getType('integer')); + +$metadata->addProperty($versionFieldMetadata); +$metadata->setVersionProperty($versionFieldMetadata); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 6de775b83db..7b80818abcb 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -69,36 +69,33 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $metadata->table['uniqueConstraints']['name_uniq'] = ['columns' => ['name']]; $metadata->table['indexes']['status_idx'] = ['columns' => ['status']]; - $metadata->addProperty( - 'name', - Type::getType('string'), - [ - 'length' => null, - 'nullable' => false, - 'unique' => false, - ] - ); + $fieldMetadata = new Mapping\FieldMetadata('name'); - $metadata->addProperty( - 'status', - Type::getType('string'), - [ - 'length' => null, - 'nullable' => false, - 'unique' => false, - 'options' => ['default' => 'published'], - ] - ); + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setNullable(false); + $fieldMetadata->setUnique(false); - $metadata->addProperty( - 'id', - Type::getType('integer'), - [ - 'id' => true, - 'nullable' => false, - 'unique' => false, - ] - ); + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('status'); + + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setNullable(false); + $fieldMetadata->setUnique(false); + $fieldMetadata->setOptions([ + 'default' => 'published', + ]); + + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('id'); + + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setNullable(false); + $fieldMetadata->setUnique(false); + + $metadata->addProperty($fieldMetadata); $joinColumns = []; @@ -172,24 +169,20 @@ private function generateEntityTypeFixture(array $field) $metadata = new ClassMetadata($this->_namespace . '\EntityType'); $metadata->table['name'] = 'entity_type'; - $metadata->addProperty( - 'id', - Type::getType('integer'), - [ - 'id' => true, - 'nullable' => false, - 'unique' => false, - ] - ); + $fieldMetadata = new Mapping\FieldMetadata('id'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setNullable(false); + $fieldMetadata->setUnique(false); - $metadata->addProperty( - $field['fieldName'], - Type::getType($field['dbType']), - [ - 'nullable' => false, - 'unique' => false, - ] - ); + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata($field['fieldName']); + $fieldMetadata->setType(Type::getType($field['dbType'])); + $fieldMetadata->setNullable(false); + $fieldMetadata->setUnique(false); + + $metadata->addProperty($fieldMetadata); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); @@ -206,50 +199,40 @@ private function generateIsbnEmbeddableFixture(array $embeddedClasses = [], $col $metadata = new ClassMetadata($this->_namespace . '\EntityGeneratorIsbn'); $metadata->isEmbeddedClass = true; - $metadata->addProperty( - 'prefix', - Type::getType('integer'), - [ - 'nullable' => false, - 'unique' => false, - ] - ); + $fieldMetadata = new Mapping\FieldMetadata('prefix'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setNullable(false); + $fieldMetadata->setUnique(false); - $metadata->addProperty( - 'groupNumber', - Type::getType('integer'), - [ - 'nullable' => false, - 'unique' => false, - ] - ); + $metadata->addProperty($fieldMetadata); - $metadata->addProperty( - 'publisherNumber', - Type::getType('integer'), - [ - 'nullable' => false, - 'unique' => false, - ] - ); + $fieldMetadata = new Mapping\FieldMetadata('groupNumber'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setNullable(false); + $fieldMetadata->setUnique(false); - $metadata->addProperty( - 'titleNumber', - Type::getType('integer'), - [ - 'nullable' => false, - 'unique' => false, - ] - ); + $metadata->addProperty($fieldMetadata); - $metadata->addProperty( - 'checkDigit', - Type::getType('integer'), - [ - 'nullable' => false, - 'unique' => false, - ] - ); + $fieldMetadata = new Mapping\FieldMetadata('publisherNumber'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setNullable(false); + $fieldMetadata->setUnique(false); + + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('titleNumber'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setNullable(false); + $fieldMetadata->setUnique(false); + + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('checkDigit'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setNullable(false); + $fieldMetadata->setUnique(false); + + $metadata->addProperty($fieldMetadata); foreach ($embeddedClasses as $fieldName => $embeddedClass) { $metadata->mapEmbedded( @@ -275,41 +258,33 @@ private function generateTestEmbeddableFixture() $metadata->isEmbeddedClass = true; - $metadata->addProperty( - 'field1', - Type::getType('integer'), - [ - 'nullable' => false, - 'unique' => false, - ] - ); + $fieldMetadata = new Mapping\FieldMetadata('field1'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setNullable(false); + $fieldMetadata->setUnique(false); - $metadata->addProperty( - 'field2', - Type::getType('integer'), - [ - 'nullable' => true, - 'unique' => false, - ] - ); + $metadata->addProperty($fieldMetadata); - $metadata->addProperty( - 'field3', - Type::getType('datetime'), - [ - 'nullable' => false, - 'unique' => false, - ] - ); + $fieldMetadata = new Mapping\FieldMetadata('field2'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setNullable(true); + $fieldMetadata->setUnique(false); - $metadata->addProperty( - 'field4', - Type::getType('datetime'), - [ - 'nullable' => true, - 'unique' => false, - ] - ); + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('field3'); + $fieldMetadata->setType(Type::getType('datetime')); + $fieldMetadata->setNullable(false); + $fieldMetadata->setUnique(false); + + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('field4'); + $fieldMetadata->setType(Type::getType('datetime')); + $fieldMetadata->setNullable(true); + $fieldMetadata->setUnique(false); + + $metadata->addProperty($fieldMetadata); $this->_generator->writeEntityClass($metadata, $this->_tmpDir); @@ -448,7 +423,11 @@ public function testEntityUpdatingWorks() { $metadata = $this->generateBookEntityFixture(['isbn' => $this->generateIsbnEmbeddableFixture()]); - $metadata->addProperty('test', Type::getType('string')); + $fieldMetadata = new Mapping\FieldMetadata('test'); + + $fieldMetadata->setType(Type::getType('string')); + + $metadata->addProperty($fieldMetadata); $testEmbeddableMetadata = $this->generateTestEmbeddableFixture(); @@ -658,7 +637,11 @@ public function testGenerateEntityWithSequenceGenerator() { $metadata = new ClassMetadata($this->_namespace . '\DDC1784Entity'); - $metadata->addProperty('id', Type::getType('integer'), ['id' => true]); + $fieldMetadata = new Mapping\FieldMetadata('id'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setPrimaryKey(true); + + $metadata->addProperty($fieldMetadata); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); @@ -694,7 +677,11 @@ public function testGenerateEntityWithMultipleInverseJoinColumns() { $metadata = new ClassMetadata($this->_namespace . '\DDC2079Entity'); - $metadata->addProperty('id', Type::getType('integer'), ['id' => true]); + $fieldMetadata = new Mapping\FieldMetadata('id'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setPrimaryKey(true); + + $metadata->addProperty($fieldMetadata); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php index 68ceda51e9d..18abc4eb199 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Tools\Export; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Tools\Export\Driver\XmlExporter; @@ -46,7 +47,11 @@ public function testSequenceGenerator() { $exporter = new XmlExporter(); $metadata = new ClassMetadata('entityTest'); - $metadata->addProperty('id', Type::getType('integer'), ["id" => true]); + $fieldMetadata = new Mapping\FieldMetadata('id'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setPrimaryKey(true); + + $metadata->addProperty($fieldMetadata); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); @@ -85,18 +90,18 @@ public function testFieldOptionsExport() { $exporter = new XmlExporter(); $metadata = new ClassMetadata('entityTest'); - $metadata->addProperty( - 'myField', - Type::getType('string'), + $fieldMetadata = new Mapping\FieldMetadata('myField'); + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setColumnName('my_field'); + $fieldMetadata->setOptions( [ - "columnName" => 'my_field', - "options" => [ - "default" => "default_string", - "comment" => "The comment for the field", - ], + 'default' => 'default_string', + 'comment' => 'The comment for the field', ] ); + $metadata->addProperty($fieldMetadata); + $expectedFileContent = <<<'XML' diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php index abb9189d35a..05197359176 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php @@ -22,33 +22,37 @@ $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); $metadata->addLifecycleCallback('doStuffOnPostPersist', 'postPersist'); -$metadata->addProperty('id', Type::getType('integer'), ['id' => true]); +$fieldMetadata = new Mapping\FieldMetadata('id'); -$metadata->addProperty( - 'name', - Type::getType('string'), - [ - 'length' => 50, - 'unique' => true, - 'nullable' => true, - 'columnName' => 'name', - ] -); +$fieldMetadata->setType(Type::getType('integer')); +$fieldMetadata->setPrimaryKey(true); -$metadata->addProperty( - 'email', - Type::getType('string'), - [ - 'columnName' => 'user_email', - 'columnDefinition' => 'CHAR(32) NOT NULL', - ] -); +$metadata->addProperty($fieldMetadata); -$metadata->addProperty( - 'age', - Type::getType('integer'), - ['options' => ['unsigned' => true]] -); +$fieldMetadata = new Mapping\FieldMetadata('name'); + +$fieldMetadata->setType(Type::getType('string')); +$fieldMetadata->setLength(50); +$fieldMetadata->setColumnName('name'); +$fieldMetadata->setNullable(true); +$fieldMetadata->setUnique(true); + +$metadata->addProperty($fieldMetadata); + +$fieldMetadata = new Mapping\FieldMetadata('email'); + +$fieldMetadata->setType(Type::getType('string')); +$fieldMetadata->setColumnName('user_email'); +$fieldMetadata->setColumnDefinition('CHAR(32) NOT NULL'); + +$metadata->addProperty($fieldMetadata); + +$fieldMetadata = new Mapping\FieldMetadata('age'); + +$fieldMetadata->setType(Type::getType('integer')); +$fieldMetadata->setOptions(['unsigned' => true]); + +$metadata->addProperty($fieldMetadata); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); From f15be6ccf1b3971317abc5b0c5f95780b67e24b9 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 14 Sep 2016 23:45:15 +0000 Subject: [PATCH 067/275] Allow unique index creation from ORM mapping --- doctrine-mapping.xsd | 1 + lib/Doctrine/ORM/Annotation/Index.php | 5 +++ .../Mapping/Builder/ClassMetadataBuilder.php | 8 +++-- .../ORM/Mapping/Driver/AnnotationDriver.php | 1 + .../ORM/Mapping/Driver/DatabaseDriver.php | 15 ++++---- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 5 ++- .../ORM/Tools/Export/Driver/XmlExporter.php | 25 ++++++++++++++ lib/Doctrine/ORM/Tools/SchemaTool.php | 22 +++++++++++- .../ORM/Mapping/AbstractMappingDriverTest.php | 32 ++++++++++++----- .../ORM/Mapping/ClassMetadataBuilderTest.php | 34 ++++++++++++++++--- .../Doctrine.Tests.ORM.Mapping.Comment.php | 1 + .../php/Doctrine.Tests.ORM.Mapping.User.php | 12 +++++-- 12 files changed, 134 insertions(+), 27 deletions(-) diff --git a/doctrine-mapping.xsd b/doctrine-mapping.xsd index 9524c79d1a3..7a63cade5e9 100644 --- a/doctrine-mapping.xsd +++ b/doctrine-mapping.xsd @@ -350,6 +350,7 @@ + diff --git a/lib/Doctrine/ORM/Annotation/Index.php b/lib/Doctrine/ORM/Annotation/Index.php index 6e808d9a51c..efd32c3a74a 100644 --- a/lib/Doctrine/ORM/Annotation/Index.php +++ b/lib/Doctrine/ORM/Annotation/Index.php @@ -35,6 +35,11 @@ final class Index implements Annotation */ public $columns; + /** + * @var bool + */ + public $unique = false; + /** * @var array */ diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php index 2c4cab55ce6..41d8bc49ade 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php @@ -174,18 +174,22 @@ public function setCache($usage, $region = null) * * @param array $columns * @param string|null $name + * @param bool $unique * @param array $options * @param array $flags * * @return ClassMetadataBuilder */ - public function addIndex(array $columns, $name, array $options = [], array $flags = []) + public function addIndex(array $columns, $name, $unique = false, array $options = [], array $flags = []) { if (!isset($this->cm->table['indexes'])) { $this->cm->table['indexes'] = []; } - $index = ['columns' => $columns]; + $index = [ + 'columns' => $columns, + 'unique' => $unique, + ]; if ( ! empty($options)) { $index['options'] = $options; diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index a55f9bf50fe..d4ca124c507 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -119,6 +119,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $builder->addIndex( $indexAnnot->columns, $indexAnnot->name, + $indexAnnot->unique, $indexAnnot->options, $indexAnnot->flags ); diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index 3c806500b4d..edb4c0d04cb 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -23,6 +23,7 @@ use Doctrine\Common\Persistence\Mapping\ClassMetadata as ClassMetadataInterface; use Doctrine\Common\Util\Inflector; use Doctrine\DBAL\Schema\AbstractSchemaManager; +use Doctrine\DBAL\Schema\Index; use Doctrine\DBAL\Schema\SchemaException; use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Schema\Column; @@ -326,17 +327,19 @@ private function buildIndexes(ClassMetadata $metadata) $indexes = $this->tables[$tableName]->getIndexes(); foreach ($indexes as $index) { + /** @var Index $index */ if ($index->isPrimary()) { continue; } - $indexName = $index->getName(); - $indexColumns = $index->getColumns(); - $constraintType = $index->isUnique() - ? 'uniqueConstraints' - : 'indexes'; + $indexName = $index->getName(); - $metadata->table[$constraintType][$indexName]['columns'] = $indexColumns; + $metadata->table['indexes'][$indexName] = [ + 'unique' => $index->isUnique(), + 'columns' => $index->getColumns(), + 'options' => $index->getOptions(), + 'flags' => $index->getFlags(), + ]; } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index f609482162d..7f88b36c7d5 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -229,7 +229,10 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $metadata->table['indexes'] = []; foreach ($xmlRoot->indexes->index as $indexXml) { - $index = ['columns' => explode(',', (string) $indexXml['columns'])]; + $index = [ + 'unique' => isset($indexXml['unique']) && $indexXml['unique'], + 'columns' => explode(',', (string) $indexXml['columns']) + ]; if (isset($indexXml['flags'])) { $index['flags'] = explode(',', (string) $indexXml['flags']); diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 0c58c17c05a..8b6cd9d4afb 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -118,11 +118,26 @@ public function exportClassMetadata(ClassMetadata $metadata) foreach ($metadata->table['indexes'] as $name => $index) { $indexXml = $indexesXml->addChild('index'); $indexXml->addAttribute('name', $name); + + if ($index['unique']) { + $indexXml->addAttribute('unique', 'true'); + } + $indexXml->addAttribute('columns', implode(',', $index['columns'])); if (isset($index['flags'])) { $indexXml->addAttribute('flags', implode(',', $index['flags'])); } + + if ($index['options']) { + $optionsXml = $indexXml->addChild('options'); + + foreach ($index['options'] as $key => $value) { + $optionXml = $optionsXml->addChild('option', $value); + + $optionXml->addAttribute('name', $key); + } + } } } @@ -134,6 +149,16 @@ public function exportClassMetadata(ClassMetadata $metadata) $uniqueConstraintXml->addAttribute('name', $name); $uniqueConstraintXml->addAttribute('columns', implode(',', $unique['columns'])); + + if ($unique['options']) { + $optionsXml = $uniqueConstraintXml->addChild('options'); + + foreach ($unique['options'] as $key => $value) { + $optionXml = $optionsXml->addChild('option', $value); + + $optionXml->addAttribute('name', $key); + } + } } } diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 5c3f1a15910..cf649c0831d 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -284,11 +284,31 @@ public function getSchemaFromMetadata(array $classes) if (isset($class->table['indexes'])) { foreach ($class->table['indexes'] as $indexName => $indexData) { + $indexName = is_numeric($indexName) ? null : $indexName; + if ( ! isset($indexData['flags'])) { $indexData['flags'] = []; } - $table->addIndex($indexData['columns'], is_numeric($indexName) ? null : $indexName, (array) $indexData['flags'], isset($indexData['options']) ? $indexData['options'] : []); + if ( ! isset($indexData['options'])) { + $indexData['options'] = []; + } + + $index = new Index($indexName, $indexData['columns'], $indexData['unique'], $indexData['flags'], $indexData['options']); + + foreach ($table->getIndexes() as $tableIndexName => $tableIndex) { + if ($tableIndex->isFullfilledBy($index)) { + $table->dropIndex($tableIndexName); + break; + } + } + + if ($indexData['unique']) { + $table->addUniqueIndex($indexData['columns'], $indexName, (array) $indexData['options']); + } else { + $table->addIndex($indexData['columns'], $indexName, (array) $indexData['flags'], (array) $indexData['options']); + } + } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index ae3ca13536f..b934a2b944b 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -81,16 +81,24 @@ public function testEntityTableNameAndInheritance() } /** - * @depends testEntityTableNameAndInheritance + * * @param ClassMetadata $class */ - public function testEntityIndexes($class) + public function testEntityIndexes() { + $class = $this->createClassMetadata('Doctrine\Tests\ORM\Mapping\User'); + self::assertArrayHasKey('indexes', $class->table, 'ClassMetadata should have indexes key in table property.'); self::assertEquals( [ - 'name_idx' => ['columns' => ['name']], - 0 => ['columns' => ['user_email']] + 'name_idx' => [ + 'columns' => ['name'], + 'unique' => false, + ], + 0 => [ + 'columns' => ['user_email'], + 'unique' => false, + ] ], $class->table['indexes'] ); @@ -105,8 +113,9 @@ public function testEntityIndexFlagsAndPartialIndexes() self::assertEquals( [ 0 => [ + 'unique' => false, 'columns' => ['content'], - 'flags' => ['fulltext'], + 'flags' => ['fulltext'], 'options' => ['where' => 'content IS NOT NULL'], ] ], @@ -1333,10 +1342,14 @@ public static function loadMetadata(ClassMetadata $metadata) ] ); - $metadata->table['uniqueConstraints'] = [ - 'search_idx' => [ - 'columns' => ['name', 'user_email'], - 'options'=> ['where' => 'name IS NOT NULL'] + $metadata->table['indexes'] = [ + 'name_idx' => [ + 'unique' => false, + 'columns' => ['name'], + ], + 0 => [ // Unnamed index + 'unique' => false, + 'columns' => ['user_email'], ], ]; @@ -1526,6 +1539,7 @@ public static function loadMetadata(ClassMetadata $metadata) [ 'indexes' => [ [ + 'unique' => false, 'columns' => ['content'], 'flags' => ['fulltext'], 'options' => ['where' => 'content IS NOT NULL'] diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php index c77229bc586..484e3bdee50 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php @@ -162,14 +162,29 @@ public function testSetTable() public function testAddIndex() { - self::assertIsFluent($this->builder->addIndex(['username', 'name'], 'users_idx')); - self::assertEquals(['users_idx' => ['columns' => ['username', 'name']]], $this->cm->table['indexes']); + self::assertIsFluent($this->builder->addIndex(array('username', 'name'), 'users_idx')); + self::assertEquals( + [ + 'users_idx' => [ + 'unique' => false, + 'columns' => ['username', 'name'] + ] + ], + $this->cm->table['indexes'] + ); } public function testAddUniqueConstraint() { self::assertIsFluent($this->builder->addUniqueConstraint(['username', 'name'], 'users_idx')); - self::assertEquals(['users_idx' => ['columns' => ['username', 'name']]], $this->cm->table['uniqueConstraints']); + self::assertEquals( + [ + 'users_idx' => [ + 'columns' => ['username', 'name'] + ] + ], + $this->cm->table['uniqueConstraints'] + ); } public function testSetPrimaryTableRelated() @@ -181,8 +196,17 @@ public function testSetPrimaryTableRelated() self::assertEquals( [ 'name' => 'users', - 'indexes' => ['users_idx' => ['columns' => ['username', 'name']]], - 'uniqueConstraints' => ['users_idx' => ['columns' => ['username', 'name']]], + 'indexes' => [ + 'users_idx' => [ + 'unique' => false, + 'columns' => ['username', 'name'] + ] + ], + 'uniqueConstraints' => [ + 'users_idx' => [ + 'columns' => ['username', 'name'] + ] + ], 'options' => [], ], $this->cm->table diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php index 6be098a888d..92a56df983f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php @@ -11,6 +11,7 @@ [ 'indexes' => [ [ + 'unique' => false, 'columns' => ['content'], 'flags' => ['fulltext'], 'options' => ['where' => 'content IS NOT NULL'], diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index ba8185038f2..f3f4282f1f9 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -141,13 +141,19 @@ $metadata->table['uniqueConstraints'] = [ 'search_idx' => [ 'columns' => ['name', 'user_email'], - 'options' => ['where' => 'name IS NOT NULL'] + 'options' => ['where' => 'name IS NOT NULL'], ], ]; $metadata->table['indexes'] = [ - 'name_idx' => ['columns' => ['name']], - 0 => ['columns' => ['user_email']] + 'name_idx' => [ + 'unique' => false, + 'columns' => ['name'], + ], + 0 => [ + 'unique' => false, + 'columns' => ['user_email'], + ] ]; $metadata->setGeneratorDefinition( From ea005517282bb419d58b911619786c92d3332c69 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Thu, 22 Sep 2016 22:58:11 +0000 Subject: [PATCH 068/275] Decoupled unique constraint from unique index --- doctrine-mapping.xsd | 1 + lib/Doctrine/ORM/Annotation/UniqueConstraint.php | 5 +++++ .../ORM/Mapping/Builder/ClassMetadataBuilder.php | 7 ++++++- .../ORM/Mapping/Driver/AnnotationDriver.php | 3 ++- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 4 ++++ lib/Doctrine/ORM/Tools/SchemaTool.php | 6 ++++-- tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php | 14 +++++++++----- 7 files changed, 31 insertions(+), 9 deletions(-) diff --git a/doctrine-mapping.xsd b/doctrine-mapping.xsd index 7a63cade5e9..610d261d8b2 100644 --- a/doctrine-mapping.xsd +++ b/doctrine-mapping.xsd @@ -333,6 +333,7 @@ + diff --git a/lib/Doctrine/ORM/Annotation/UniqueConstraint.php b/lib/Doctrine/ORM/Annotation/UniqueConstraint.php index c4238fc31e6..7dfcf2cc689 100644 --- a/lib/Doctrine/ORM/Annotation/UniqueConstraint.php +++ b/lib/Doctrine/ORM/Annotation/UniqueConstraint.php @@ -35,6 +35,11 @@ final class UniqueConstraint implements Annotation */ public $columns; + /** + * @var array + */ + public $flags = []; + /** * @var array */ diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php index 41d8bc49ade..5e07494796a 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php @@ -216,10 +216,11 @@ public function addIndex(array $columns, $name, $unique = false, array $options * @param array $columns * @param string|null $name * @param array $options + * @param array $flags * * @return ClassMetadataBuilder */ - public function addUniqueConstraint(array $columns, $name, array $options = []) + public function addUniqueConstraint(array $columns, $name, array $options = [], array $flags = []) { if ( ! isset($this->cm->table['uniqueConstraints'])) { $this->cm->table['uniqueConstraints'] = []; @@ -231,6 +232,10 @@ public function addUniqueConstraint(array $columns, $name, array $options = []) $index['options'] = $options; } + if ( ! empty($flags)) { + $index['flags'] = $flags; + } + if (!$name) { $this->cm->table['uniqueConstraints'][] = $index; diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index d4ca124c507..a04267a8328 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -129,7 +129,8 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $builder->addUniqueConstraint( $uniqueConstraintAnnot->columns, $uniqueConstraintAnnot->name, - $uniqueConstraintAnnot->options + $uniqueConstraintAnnot->options, + $uniqueConstraintAnnot->flags ); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 7f88b36c7d5..75f892640e9 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -260,6 +260,10 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $unique['options'] = $this->parseOptions($uniqueXml->options->children()); } + if (isset($uniqueXml['flags'])) { + $unique['flags'] = explode(',', (string) $uniqueXml['flags']); + } + if (isset($uniqueXml['name'])) { $metadata->table['uniqueConstraints'][(string) $uniqueXml['name']] = $unique; } else { diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index cf649c0831d..b5b38880da7 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -314,7 +314,9 @@ public function getSchemaFromMetadata(array $classes) if (isset($class->table['uniqueConstraints'])) { foreach ($class->table['uniqueConstraints'] as $indexName => $indexData) { - $uniqIndex = new Index($indexName, $indexData['columns'], true, false, [], isset($indexData['options']) ? $indexData['options'] : []); + $flags = isset($indexData['flags']) ? $indexData['flags'] : []; + $options = isset($indexData['options']) ? $indexData['options'] : []; + $uniqIndex = new Index($indexName, $indexData['columns'], true, false, $flags, $options); foreach ($table->getIndexes() as $tableIndexName => $tableIndex) { if ($tableIndex->isFullfilledBy($uniqIndex)) { @@ -323,7 +325,7 @@ public function getSchemaFromMetadata(array $classes) } } - $table->addUniqueIndex($indexData['columns'], is_numeric($indexName) ? null : $indexName, isset($indexData['options']) ? $indexData['options'] : []); + $table->addUniqueConstraint($indexData['columns'], is_numeric($indexName) ? null : $indexName, $flags, $options); } } diff --git a/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php b/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php index 07972cfa55a..11aef7b4c9e 100644 --- a/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php @@ -144,9 +144,10 @@ public function testSchemaHasProperIndexesFromUniqueConstraintAnnotation() self::assertTrue($schema->hasTable('unique_constraint_annotation_table')); $table = $schema->getTable('unique_constraint_annotation_table'); - self::assertEquals(2, count($table->getIndexes())); + self::assertEquals(1, count($table->getIndexes())); + self::assertEquals(1, count($table->getUniqueConstraints())); self::assertTrue($table->hasIndex('primary')); - self::assertTrue($table->hasIndex('uniq_hash')); + self::assertTrue($table->hasUniqueConstraint('uniq_hash')); } public function testRemoveUniqueIndexOverruledByPrimaryKey() @@ -222,9 +223,12 @@ public function postGenerateSchema(GenerateSchemaEventArgs $eventArgs) /** * @Entity - * @Table(name="unique_constraint_annotation_table", uniqueConstraints={ - * @UniqueConstraint(name="uniq_hash", columns={"hash"}) - * }) + * @Table( + * name="unique_constraint_annotation_table", + * uniqueConstraints={ + * @UniqueConstraint(name="uniq_hash", columns={"hash"}) + * } + * ) */ class UniqueConstraintAnnotationModel { From 24c29f6c4196af0c666478882661860cd0984cb7 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Tue, 4 Oct 2016 19:38:14 +0000 Subject: [PATCH 069/275] Introduced concept of TableMetadata. Still a few tests to finish fixing --- .../Mapping/Builder/ClassMetadataBuilder.php | 97 +-------- .../Mapping/Builder/TableMetadataBuilder.php | 173 +++++++++++++++ lib/Doctrine/ORM/Mapping/ClassMetadata.php | 68 ++---- .../ORM/Mapping/ClassMetadataFactory.php | 16 +- .../ORM/Mapping/Driver/AnnotationDriver.php | 29 ++- .../ORM/Mapping/Driver/DatabaseDriver.php | 56 ++--- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 98 ++++----- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 10 +- .../ORM/Mapping/JoinColumnMetadata.php | 6 +- .../ORM/Mapping/JoinTableMetadata.php | 4 +- lib/Doctrine/ORM/Mapping/TableMetadata.php | 202 ++++++++++++++++++ .../ORM/Mapping/VersionFieldMetadata.php | 3 + .../Command/MappingDescribeCommand.php | 31 ++- lib/Doctrine/ORM/Tools/EntityGenerator.php | 20 +- .../ORM/Tools/Export/Driver/PhpExporter.php | 23 +- .../ORM/Tools/Export/Driver/XmlExporter.php | 36 ++-- lib/Doctrine/ORM/Tools/SchemaTool.php | 34 ++- .../Doctrine/Tests/Models/CMS/CmsAddress.php | 5 +- tests/Doctrine/Tests/Models/CMS/CmsUser.php | 10 +- .../Tests/Models/Company/CompanyContract.php | 7 +- .../Tests/Models/Company/CompanyPerson.php | 10 +- .../Models/DDC2825/ExplicitSchemaAndTable.php | 10 +- .../DDC2825/SchemaAndTableInTableName.php | 17 +- .../ORM/Functional/DatabaseDriverTest.php | 15 +- .../ORM/Functional/Ticket/DDC2825Test.php | 4 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 115 +++++----- .../Mapping/BasicInheritanceMappingTest.php | 6 +- .../ClassMetadataBuilderTest.php | 61 +----- .../Builder/TableMetadataBuilderTest.php | 143 +++++++++++++ .../ORM/Mapping/ClassMetadataFactoryTest.php | 10 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 17 +- .../Doctrine.Tests.Models.CMS.CmsAddress.php | 5 +- .../php/Doctrine.Tests.Models.CMS.CmsUser.php | 14 +- .../php/Doctrine.Tests.Models.Cache.City.php | 6 +- ...e.Tests.Models.Company.CompanyContract.php | 5 +- ...ine.Tests.Models.Company.CompanyPerson.php | 8 +- ....Models.DDC2825.ExplicitSchemaAndTable.php | 14 +- .../Doctrine.Tests.ORM.Mapping.Comment.php | 22 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 72 ++++--- ....DDC2825.SchemaAndTableInTableName.dcm.xml | 2 +- .../Doctrine.Tests.ORM.Mapping.User.dcm.xml | 6 +- .../Command/MappingDescribeCommandTest.php | 4 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 32 ++- .../AbstractClassMetadataExporterTest.php | 4 +- .../Doctrine.Tests.ORM.Tools.Export.User.php | 16 +- 45 files changed, 1016 insertions(+), 530 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/Builder/TableMetadataBuilder.php create mode 100644 lib/Doctrine/ORM/Mapping/TableMetadata.php rename tests/Doctrine/Tests/ORM/Mapping/{ => Builder}/ClassMetadataBuilderTest.php (94%) create mode 100644 tests/Doctrine/Tests/ORM/Mapping/Builder/TableMetadataBuilderTest.php diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php index 5e07494796a..8a92a21d7ae 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php @@ -23,6 +23,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\TableMetadata; use Doctrine\ORM\Mapping\VersionFieldMetadata; /** @@ -132,23 +133,15 @@ public function setReadOnly() } /** - * Sets the table name. + * Sets the table metadata. * - * @param string $name - * @param string|null $schema - * @param array $options + * @param TableMetadata $tableMetadata * * @return ClassMetadataBuilder */ - public function setTable($name, $schema = null, array $options = []) + public function withTable(TableMetadata $tableMetadata) { - $this->cm->setPrimaryTable( - [ - 'name' => $name, - 'schema' => $schema, - 'options' => $options, - ] - ); + $this->cm->setPrimaryTable($tableMetadata); return $this; } @@ -169,86 +162,6 @@ public function setCache($usage, $region = null) ); } - /** - * Adds Index. - * - * @param array $columns - * @param string|null $name - * @param bool $unique - * @param array $options - * @param array $flags - * - * @return ClassMetadataBuilder - */ - public function addIndex(array $columns, $name, $unique = false, array $options = [], array $flags = []) - { - if (!isset($this->cm->table['indexes'])) { - $this->cm->table['indexes'] = []; - } - - $index = [ - 'columns' => $columns, - 'unique' => $unique, - ]; - - if ( ! empty($options)) { - $index['options'] = $options; - } - - if ( ! empty($flags)) { - $index['flags'] = $flags; - } - - if (!$name) { - $this->cm->table['indexes'][] = $index; - - return $this; - } - - $this->cm->table['indexes'][$name] = $index; - - return $this; - } - - /** - * Adds Unique Constraint. - * - * @param array $columns - * @param string|null $name - * @param array $options - * @param array $flags - * - * @return ClassMetadataBuilder - */ - public function addUniqueConstraint(array $columns, $name, array $options = [], array $flags = []) - { - if ( ! isset($this->cm->table['uniqueConstraints'])) { - $this->cm->table['uniqueConstraints'] = []; - } - - $index = ['columns' => $columns]; - - if ( ! empty($options)) { - $index['options'] = $options; - } - - if ( ! empty($flags)) { - $index['flags'] = $flags; - } - - if (!$name) { - $this->cm->table['uniqueConstraints'][] = $index; - - return $this; - } - - $this->cm->table['uniqueConstraints'][$name] = $index; - - return $this; - - - } - /** * Adds named query. * diff --git a/lib/Doctrine/ORM/Mapping/Builder/TableMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/TableMetadataBuilder.php new file mode 100644 index 00000000000..56627817943 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Builder/TableMetadataBuilder.php @@ -0,0 +1,173 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\NamingStrategy; +use Doctrine\ORM\Mapping\TableMetadata; + +class TableMetadataBuilder implements Builder +{ + /** @var string */ + protected $schema; + + /** @var string */ + protected $name; + + /** @var array */ + protected $options = []; + + /** @var array */ + protected $indexes = []; + + /** @var array */ + protected $uniqueConstraints = []; + + /** + * @param string $name + * + * @return self + */ + public function withName(string $name) + { + $this->name = $name; + + return $this; + } + + /** + * @param string $schema + * + * @return self + */ + public function withSchema(string $schema) + { + $this->schema = $schema; + + return $this; + } + + /** + * @param array $options + * + * @return self + */ + public function withOptions(array $options) + { + $this->options = $options; + + return $this; + } + + /** + * @param string $name + * @param mixed $value + * + * @return self + */ + public function withOption(string $name, $value) + { + $this->options[$name] = $value; + + return $this; + } + + /** + * @param string|null $name + * @param array $columns + * @param bool $unique + * @param array $options + * @param array $flags + * + * @return self + */ + public function withIndex($name, array $columns, bool $unique = false, array $options = [], array $flags = []) + { + $this->indexes[] = [ + 'name' => $name, + 'columns' => $columns, + 'unique' => $unique, + 'options' => $options, + 'flags' => $flags, + ]; + + return $this; + } + + /** + * @param string|null $name + * @param array $columns + * @param array $options + * @param array $flags + * + * @return self + */ + public function withUniqueConstraint($name, array $columns, array $options = [], array $flags = []) + { + $this->uniqueConstraints[] = [ + 'name' => $name, + 'columns' => $columns, + 'options' => $options, + 'flags' => $flags, + ]; + + return $this; + } + + /** + * @return TableMetadata + */ + public function build() + { + $tableMetadata = $this->createMetadataObject(); + + if ($this->name !== null) { + $tableMetadata->setName($this->name); + } + + if ($this->schema !== null) { + $tableMetadata->setSchema($this->schema); + } + + $tableMetadata->setOptions($this->options); + + foreach ($this->indexes as $index) { + $tableMetadata->addIndex($index); + } + + foreach ($this->uniqueConstraints as $constraint) { + $tableMetadata->addUniqueConstraint($constraint); + } + + return $tableMetadata; + } + + /** + * @return TableMetadata + */ + protected function createMetadataObject() + { + return new TableMetadata(); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index a6278f04a96..86e5c10c7f2 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -407,15 +407,9 @@ class ClassMetadata implements ClassMetadataInterface public $discriminatorColumn; /** - * READ-ONLY: The primary table definition. The definition is an array with the - * following entries: + * READ-ONLY: The primary table metadata. * - * name => - * schema => - * indexes => array - * uniqueConstraints => array - * - * @var array + * @var TableMetadata */ public $table; @@ -573,6 +567,7 @@ public function __construct($entityName, NamingStrategy $namingStrategy = null) { $this->name = $entityName; $this->rootEntityName = $entityName; + $this->table = new TableMetadata(); $this->namingStrategy = $namingStrategy ?: new DefaultNamingStrategy(); $this->instantiator = new Instantiator(); } @@ -891,8 +886,8 @@ public function initializeReflection($reflService) $this->name = $this->rootEntityName = $this->reflClass->getName(); } - if ( ! isset($this->table['name'])) { - $this->table['name'] = $this->namingStrategy->classToTableName($this->name); + if (empty($this->table->getName())) { + $this->table->setName($this->namingStrategy->classToTableName($this->name)); } } @@ -1401,9 +1396,14 @@ protected function validateAndCompleteOneToOneMapping(array $mapping) throw new RuntimeException("ClassMetadata::setTable() has to be called before defining a one to one relationship."); } - $this->table['uniqueConstraints'][$mapping['fieldName'] . "_uniq"] = [ - 'columns' => $uniqueConstraintColumns - ]; + $this->table->addUniqueConstraint( + [ + 'name' => sprintf('%s_uniq', $mapping['fieldName']), + 'columns' => $uniqueConstraintColumns, + 'options' => [], + 'flags' => [], + ] + ); } $mapping['targetToSourceKeyColumns'] = array_flip($mapping['sourceToTargetKeyColumns']); @@ -1786,7 +1786,7 @@ public function isIdentifierUuid() */ public function getTableName() { - return $this->table['name']; + return $this->table->getName(); } /** @@ -1796,7 +1796,7 @@ public function getTableName() */ public function getSchemaName() { - return isset($this->table['schema']) ? $this->table['schema'] : null; + return $this->table->getSchema() ?? null; } /** @@ -1988,45 +1988,15 @@ public function isInheritedProperty($fieldName) } /** - * Sets the primary table definition. The provided array supports the - * following structure: - * - * name => (optional, defaults to class name) - * indexes => array of indexes (optional) - * uniqueConstraints => array of constraints (optional) + * Sets the primary table metadata. * - * If a key is omitted, the current value is kept. - * - * @param array $table The table description. + * @param TableMetadata $tableMetadata * * @return void */ - public function setPrimaryTable(array $table) + public function setPrimaryTable(TableMetadata $tableMetadata) { - if (isset($table['name'])) { - // Split schema and table name from a table name like "myschema.mytable" - if (strpos($table['name'], '.') !== false) { - list($this->table['schema'], $table['name']) = explode('.', $table['name'], 2); - } - - $this->table['name'] = $table['name']; - } - - if (isset($table['schema'])) { - $this->table['schema'] = $table['schema']; - } - - if (isset($table['indexes'])) { - $this->table['indexes'] = $table['indexes']; - } - - if (isset($table['uniqueConstraints'])) { - $this->table['uniqueConstraints'] = $table['uniqueConstraints']; - } - - if (isset($table['options'])) { - $this->table['options'] = $table['options']; - } + $this->table = $tableMetadata; } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 4bde0975133..3ca2860dc96 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -563,18 +563,20 @@ private function addInheritedIndexes(ClassMetadata $subClass, ClassMetadata $par return; } - foreach (['uniqueConstraints', 'indexes'] as $indexType) { - if ( ! isset($parentClass->table[$indexType])) { + foreach ($parentClass->table->getIndexes() as $indexName => $index) { + if ($subClass->table->hasIndex($indexName)) { continue; } - foreach ($parentClass->table[$indexType] as $indexName => $index) { - if (isset($subClass->table[$indexType][$indexName])) { - continue; // Let the inheriting table override indices - } + $subClass->table->addIndex($index); + } - $subClass->table[$indexType][$indexName] = $index; + foreach ($parentClass->table->getUniqueConstraints() as $constraintName => $constraint) { + if ($subClass->table->hasUniqueConstraint($constraintName)) { + continue; } + + $subClass->table->addUniqueConstraint($constraint); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index a04267a8328..addf206b277 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -28,6 +28,7 @@ use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; +use Doctrine\ORM\Mapping\Builder\TableMetadataBuilder; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; @@ -111,14 +112,28 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat // Evaluate Table annotation if (isset($classAnnotations[Annotation\Table::class])) { - $tableAnnot = $classAnnotations[Annotation\Table::class]; + $tableAnnot = $classAnnotations[Annotation\Table::class]; + $tableBuilder = new TableMetadataBuilder(); - $builder->setTable($tableAnnot->name, $tableAnnot->schema, $tableAnnot->options); + if (! empty($tableAnnot->name)) { + $metadata->table->setName($tableAnnot->name); + } + + if (! empty($tableAnnot->schema)) { + $metadata->table->setSchema($tableAnnot->schema); + } + + if (! empty($metadata->table->getSchema())) { + $tableBuilder->withSchema($metadata->table->getSchema()); + } + + $tableBuilder->withName($metadata->table->getName()); + $tableBuilder->withOptions($tableAnnot->options); foreach ($tableAnnot->indexes as $indexAnnot) { - $builder->addIndex( - $indexAnnot->columns, + $tableBuilder->withIndex( $indexAnnot->name, + $indexAnnot->columns, $indexAnnot->unique, $indexAnnot->options, $indexAnnot->flags @@ -126,13 +141,15 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat } foreach ($tableAnnot->uniqueConstraints as $uniqueConstraintAnnot) { - $builder->addUniqueConstraint( - $uniqueConstraintAnnot->columns, + $tableBuilder->withUniqueConstraint( $uniqueConstraintAnnot->name, + $uniqueConstraintAnnot->columns, $uniqueConstraintAnnot->options, $uniqueConstraintAnnot->flags ); } + + $builder->withTable($tableBuilder->build()); } // Evaluate @Cache annotation diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index edb4c0d04cb..1e25878c8ff 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -28,10 +28,12 @@ use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Schema\Column; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\Builder\TableMetadataBuilder; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\MappingException; +use Doctrine\ORM\Mapping\TableMetadata; /** * The DatabaseDriver reverse engineers the mapping metadata from a database. @@ -181,28 +183,28 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat throw new \InvalidArgumentException("Unknown class " . $className); } - $tableName = $this->classToTableNames[$className]; + $metadata->name = $className; + $metadata->table = $this->buildTable($metadata); - $metadata->name = $className; - $metadata->table['name'] = $tableName; - - $this->buildIndexes($metadata); $this->buildFieldMappings($metadata); $this->buildToOneAssociationMappings($metadata); + $loweredTableName = strtolower($metadata->table->getName()); + foreach ($this->manyToManyTables as $manyTable) { foreach ($manyTable->getForeignKeys() as $foreignKey) { // foreign key maps to the table of the current entity, many to many association probably exists - if ( ! (strtolower($tableName) === strtolower($foreignKey->getForeignTableName()))) { + if ( ! ($loweredTableName === strtolower($foreignKey->getForeignTableName()))) { continue; } $myFk = $foreignKey; $otherFk = null; - foreach ($manyTable->getForeignKeys() as $foreignKey) { - if ($foreignKey != $myFk) { - $otherFk = $foreignKey; + foreach ($manyTable->getForeignKeys() as $manyTableForeignKey) { + if ($manyTableForeignKey !== $myFk) { + $otherFk = $manyTableForeignKey; + break; } } @@ -222,13 +224,13 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat if (current($manyTable->getColumns())->getName() === $localColumn) { $associationMapping['inversedBy'] = $this->getFieldNameForColumn($manyTable->getName(), current($myFk->getColumns()), true); $associationMapping['joinTable'] = [ - 'name' => strtolower($manyTable->getName()), - 'joinColumns' => [], + 'name' => strtolower($manyTable->getName()), + 'joinColumns' => [], 'inverseJoinColumns' => [], ]; $fkCols = $myFk->getForeignColumns(); - $cols = $myFk->getColumns(); + $cols = $myFk->getColumns(); for ($i = 0, $l = count($cols); $i < $l; $i++) { $joinColumn = new JoinColumnMetadata(); @@ -317,14 +319,19 @@ private function reverseEngineerMappingFromDatabase() } /** - * Build indexes from a class metadata. + * Build table from a class metadata. * * @param ClassMetadata $metadata + * + * @return TableMetadata */ - private function buildIndexes(ClassMetadata $metadata) + private function buildTable(ClassMetadata $metadata) { - $tableName = $metadata->getTableName(); - $indexes = $this->tables[$tableName]->getIndexes(); + $tableName = $this->classToTableNames[$metadata->name]; + $indexes = $this->tables[$tableName]->getIndexes(); + $tableBuilder = new TableMetadataBuilder(); + + $tableBuilder->withName($this->classToTableNames[$metadata->name]); foreach ($indexes as $index) { /** @var Index $index */ @@ -332,15 +339,16 @@ private function buildIndexes(ClassMetadata $metadata) continue; } - $indexName = $index->getName(); - - $metadata->table['indexes'][$indexName] = [ - 'unique' => $index->isUnique(), - 'columns' => $index->getColumns(), - 'options' => $index->getOptions(), - 'flags' => $index->getFlags(), - ]; + $tableBuilder->withIndex( + $index->getName(), + $index->getColumns(), + $index->isUnique(), + $index->getOptions(), + $index->getFlags() + ); } + + return $tableBuilder->build(); } /** diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 75f892640e9..990644dd80e 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -23,6 +23,7 @@ use Doctrine\Common\Persistence\Mapping\Driver\FileDriver; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; +use Doctrine\ORM\Mapping\Builder\TableMetadataBuilder; use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; @@ -81,17 +82,54 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } // Evaluate attributes - $primaryTable = []; + $tableBuilder = new TableMetadataBuilder(); if (isset($xmlRoot['table'])) { - $primaryTable['name'] = (string) $xmlRoot['table']; + $metadata->table->setName((string) $xmlRoot['table']); } if (isset($xmlRoot['schema'])) { - $primaryTable['schema'] = (string) $xmlRoot['schema']; + $metadata->table->setSchema((string) $xmlRoot['schema']); } - $metadata->setPrimaryTable($primaryTable); + if (isset($xmlRoot->options)) { + $options = $this->parseOptions($xmlRoot->options->children()); + + $tableBuilder->withOptions($options); + } + + if (! empty($metadata->table->getSchema())) { + $tableBuilder->withSchema($metadata->table->getSchema()); + } + + $tableBuilder->withName($metadata->table->getName()); + + // Evaluate + if (isset($xmlRoot->indexes)) { + foreach ($xmlRoot->indexes->index as $indexXml) { + $indexName = isset($indexXml['name']) ? (string) $indexXml['name'] : null; + $columns = explode(',', (string) $indexXml['columns']); + $isUnique = isset($indexXml['unique']) && $indexXml['unique']; + $options = isset($indexXml->options) ? $this->parseOptions($indexXml->options->children()) : []; + $flags = isset($indexXml['flags']) ? explode(',', (string) $indexXml['flags']) : []; + + $tableBuilder->withIndex($indexName, $columns, $isUnique, $options, $flags); + } + } + + // Evaluate + if (isset($xmlRoot->{'unique-constraints'})) { + foreach ($xmlRoot->{'unique-constraints'}->{'unique-constraint'} as $uniqueXml) { + $indexName = isset($uniqueXml['name']) ? (string) $uniqueXml['name'] : null; + $columns = explode(',', (string) $uniqueXml['columns']); + $options = isset($uniqueXml->options) ? $this->parseOptions($uniqueXml->options->children()) : []; + $flags = isset($uniqueXml['flags']) ? explode(',', (string) $uniqueXml['flags']) : []; + + $tableBuilder->withUniqueConstraint($indexName, $columns, $options, $flags); + } + } + + $metadata->setPrimaryTable($tableBuilder->build()); // Evaluate second level cache if (isset($xmlRoot->cache)) { @@ -224,58 +262,6 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) ); } - // Evaluate - if (isset($xmlRoot->indexes)) { - $metadata->table['indexes'] = []; - - foreach ($xmlRoot->indexes->index as $indexXml) { - $index = [ - 'unique' => isset($indexXml['unique']) && $indexXml['unique'], - 'columns' => explode(',', (string) $indexXml['columns']) - ]; - - if (isset($indexXml['flags'])) { - $index['flags'] = explode(',', (string) $indexXml['flags']); - } - - if (isset($indexXml->options)) { - $index['options'] = $this->parseOptions($indexXml->options->children()); - } - - if (isset($indexXml['name'])) { - $metadata->table['indexes'][(string) $indexXml['name']] = $index; - } else { - $metadata->table['indexes'][] = $index; - } - } - } - - // Evaluate - if (isset($xmlRoot->{'unique-constraints'})) { - $metadata->table['uniqueConstraints'] = []; - foreach ($xmlRoot->{'unique-constraints'}->{'unique-constraint'} as $uniqueXml) { - $unique = ['columns' => explode(',', (string) $uniqueXml['columns'])]; - - if (isset($uniqueXml->options)) { - $unique['options'] = $this->parseOptions($uniqueXml->options->children()); - } - - if (isset($uniqueXml['flags'])) { - $unique['flags'] = explode(',', (string) $uniqueXml['flags']); - } - - if (isset($uniqueXml['name'])) { - $metadata->table['uniqueConstraints'][(string) $uniqueXml['name']] = $unique; - } else { - $metadata->table['uniqueConstraints'][] = $unique; - } - } - } - - if (isset($xmlRoot->options)) { - $metadata->table['options'] = $this->parseOptions($xmlRoot->options->children()); - } - // Evaluate mappings if (isset($xmlRoot->field)) { foreach ($xmlRoot->field as $fieldElement) { diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index ee3d814f525..cc2549ec245 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -31,27 +31,27 @@ class FieldMetadata extends ColumnMetadata implements Property /** * @var ClassMetadata */ - private $declaringClass; + protected $declaringClass; /** * @var \ReflectionProperty */ - private $reflection; + protected $reflection; /** * @var string */ - private $name; + protected $name; /** * @var int */ - private $identifierGeneratorType = ClassMetadata::GENERATOR_TYPE_NONE; + protected $identifierGeneratorType = ClassMetadata::GENERATOR_TYPE_NONE; /** * @var array */ - private $identifierGeneratorDefinition = []; + protected $identifierGeneratorDefinition = []; /** * FieldMetadata constructor. diff --git a/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php b/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php index 3349b56b7b9..588e0d0de30 100644 --- a/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php @@ -25,16 +25,16 @@ class JoinColumnMetadata extends ColumnMetadata { /** @var string */ - private $referencedColumnName; + protected $referencedColumnName; /** @var string */ - private $aliasedName; + protected $aliasedName; /** @var boolean */ protected $nullable = true; /** @var string */ - private $onDelete = ''; + protected $onDelete = ''; /** * @return string diff --git a/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php b/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php index 44d8e0a4f54..3587e937d59 100644 --- a/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php +++ b/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php @@ -1,5 +1,7 @@ . + */ + +namespace Doctrine\ORM\Mapping; + +class TableMetadata +{ + /** @var string */ + protected $schema; + + /** @var string */ + protected $name; + + /** @var array */ + protected $options = []; + + /** @var array */ + protected $indexes = []; + + /** @var array */ + protected $uniqueConstraints = []; + + /** + * @param string $name + */ + public function setName(string $name) + { + $this->name = $name; + } + + /** + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * @return string + */ + public function getSchema() + { + return $this->schema; + } + + /** + * @param string $schema + */ + public function setSchema(string $schema) + { + $this->schema = $schema; + } + + /** + * @return array + */ + public function getOptions() + { + return $this->options; + } + + /** + * @param array $options + */ + public function setOptions(array $options) + { + $this->options = $options; + } + + /** + * @param string $name + * + * @return mixed + */ + public function getOption(string $name) + { + return $this->options[$name]; + } + + /** + * @param string $name + * + * @return bool + */ + public function hasOption(string $name) + { + return isset($this->options[$name]); + } + + /** + * @param string $name + * @param mixed $value + */ + public function addOption(string $name, $value) + { + $this->options[$name] = $value; + } + + /** + * @return array + */ + public function getIndexes() + { + return $this->indexes; + } + + /** + * @param string $name + * + * @return array + */ + public function getIndex(string $name) + { + return $this->indexes[$name]; + } + + /** + * @param string $name + * + * @return bool + */ + public function hasIndex(string $name) + { + return isset($this->indexes[$name]); + } + + /** + * @param array $index + */ + public function addIndex(array $index) + { + if (! isset($index['name'])) { + $this->indexes[] = $index; + + return; + } + + $this->indexes[$index['name']] = $index; + } + + /** + * @return array + */ + public function getUniqueConstraints() + { + return $this->uniqueConstraints; + } + + /** + * @param string $name + * + * @return array + */ + public function getUniqueConstraint(string $name) + { + return $this->uniqueConstraints[$name]; + } + + /** + * @param string $name + * + * @return bool + */ + public function hasUniqueConstraint(string $name) + { + return isset($this->uniqueConstraints[$name]); + } + + /** + * @param array $constraint + */ + public function addUniqueConstraint(array $constraint) + { + if (! isset($constraint['name'])) { + $this->uniqueConstraints[] = $constraint; + + return; + } + + $this->uniqueConstraints[$constraint['name']] = $constraint; + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php b/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php index 2194dcb6ae6..c70313940e1 100644 --- a/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php @@ -1,4 +1,7 @@ formatField('Discriminator map', $metadata->discriminatorMap), $this->formatField('Generator type', $metadata->generatorType), $this->formatField('Generator definition', $metadata->generatorDefinition), - $this->formatField('Table', $metadata->table), + $this->formatField('Table', ''), + ], + $this->formatTable($metadata->table), + [ $this->formatField('Composite identifier?', $metadata->isIdentifierComposite), $this->formatField('Foreign identifier?', $metadata->containsForeignIdentifier), $this->formatField('Change tracking policy', $metadata->changeTrackingPolicy), @@ -321,6 +325,7 @@ private function formatColumn(ColumnMetadata $columnMetadata = null) $output[] = $this->formatField(' isPrimaryKey', $this->formatValue($columnMetadata->isPrimaryKey())); $output[] = $this->formatField(' isNullable', $this->formatValue($columnMetadata->isNullable())); $output[] = $this->formatField(' isUnique', $this->formatValue($columnMetadata->isUnique())); + $output[] = $this->formatField(' options', $this->formatValue($columnMetadata->getOptions())); return $output; } @@ -344,4 +349,28 @@ function ($entityListener) { ) ); } + + /** + * @param TableMetadata|null $tableMetadata + * + * @return array|string + */ + private function formatTable(TableMetadata $tableMetadata = null) + { + $output = []; + + if (null === $tableMetadata) { + $output[] = 'Null'; + + return $output; + } + + $output[] = $this->formatField(' schema', $this->formatValue($tableMetadata->getSchema())); + $output[] = $this->formatField(' name', $this->formatValue($tableMetadata->getName())); + $output[] = $this->formatField(' indexes', $this->formatValue($tableMetadata->getIndexes())); + $output[] = $this->formatField(' uniqueConstaints', $this->formatValue($tableMetadata->getUniqueConstraints())); + $output[] = $this->formatField(' options', $this->formatValue($tableMetadata->getOptions())); + + return $output; + } } diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 47797b64b7e..d0688de4b96 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -1065,25 +1065,25 @@ protected function generateTableAnnotation(ClassMetadata $metadata) $table = []; - if (isset($metadata->table['schema'])) { - $table[] = 'schema="' . $metadata->table['schema'] . '"'; + if ($metadata->table->getSchema()) { + $table[] = 'schema="' . $metadata->table->getSchema() . '"'; } - if (isset($metadata->table['name'])) { - $table[] = 'name="' . $metadata->table['name'] . '"'; + if ($metadata->table->getName()) { + $table[] = 'name="' . $metadata->table->getName() . '"'; } - if (isset($metadata->table['options']) && $metadata->table['options']) { - $table[] = 'options={' . $this->exportTableOptions((array) $metadata->table['options']) . '}'; + if ($metadata->table->getOptions()) { + $table[] = 'options={' . $this->exportTableOptions($metadata->table->getOptions()) . '}'; } - if (isset($metadata->table['uniqueConstraints']) && $metadata->table['uniqueConstraints']) { - $constraints = $this->generateTableConstraints('UniqueConstraint', $metadata->table['uniqueConstraints']); + if ($metadata->table->getUniqueConstraints()) { + $constraints = $this->generateTableConstraints('UniqueConstraint', $metadata->table->getUniqueConstraints()); $table[] = 'uniqueConstraints={' . $constraints . '}'; } - if (isset($metadata->table['indexes']) && $metadata->table['indexes']) { - $constraints = $this->generateTableConstraints('Index', $metadata->table['indexes']); + if ($metadata->table->getIndexes()) { + $constraints = $this->generateTableConstraints('Index', $metadata->table->getIndexes()); $table[] = 'indexes={' . $constraints . '}'; } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 5e9400d37c1..44f417f1969 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -63,7 +63,28 @@ public function exportClassMetadata(ClassMetadata $metadata) } if ($metadata->table) { - $lines[] = '$metadata->setPrimaryTable(' . $this->_varExport($metadata->table) . ');'; + $table = $metadata->table; + + $lines[] = '$table = new Mapping\TableMetadata();'; + $lines[] = null; + + if (! empty($table->getSchema())) { + $lines[] = '$table->setSchema(' . $table->getSchema() . ');'; + } + + $lines[] = '$table->setName("' . $table->getName() . '");'; + $lines[] = '$table->setOptions(' . $this->_varExport($table->getOptions()) . ');'; + + foreach ($table->getIndexes() as $index) { + $lines[] = '$table->addIndex(' . $this->_varExport($index) . ');'; + } + + foreach ($table->getUniqueConstraints() as $constraint) { + $lines[] = '$table->addUniqueConstraint(' . $this->_varExport($constraint) . ');'; + } + + $lines[] = null; + $lines[] = '$metadata->setPrimaryTable($table);'; } if ($metadata->discriminatorColumn) { diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 8b6cd9d4afb..8a71034e63f 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -58,22 +58,22 @@ public function exportClassMetadata(ClassMetadata $metadata) $root->addAttribute('name', $metadata->name); - if (isset($metadata->table['name'])) { - $root->addAttribute('table', $metadata->table['name']); + if ($metadata->table->getName()) { + $root->addAttribute('table', $metadata->table->getName()); } - if (isset($metadata->table['schema'])) { - $root->addAttribute('schema', $metadata->table['schema']); + if ($metadata->table->getSchema()) { + $root->addAttribute('schema', $metadata->table->getSchema()); } if ($metadata->inheritanceType && $metadata->inheritanceType !== ClassMetadata::INHERITANCE_TYPE_NONE) { $root->addAttribute('inheritance-type', $this->_getInheritanceTypeString($metadata->inheritanceType)); } - if (isset($metadata->table['options'])) { + if ($metadata->table->getOptions()) { $optionsXml = $root->addChild('options'); - $this->exportTableOptions($optionsXml, $metadata->table['options']); + $this->exportTableOptions($optionsXml, $metadata->table->getOptions()); } if ($metadata->discriminatorColumn) { @@ -112,20 +112,20 @@ public function exportClassMetadata(ClassMetadata $metadata) $root->addChild('change-tracking-policy', $trackingPolicy); } - if (isset($metadata->table['indexes'])) { + if ($metadata->table->getIndexes()) { $indexesXml = $root->addChild('indexes'); - foreach ($metadata->table['indexes'] as $name => $index) { + foreach ($metadata->table->getIndexes() as $name => $index) { $indexXml = $indexesXml->addChild('index'); + $indexXml->addAttribute('name', $name); + $indexXml->addAttribute('columns', implode(',', $index['columns'])); if ($index['unique']) { $indexXml->addAttribute('unique', 'true'); } - $indexXml->addAttribute('columns', implode(',', $index['columns'])); - - if (isset($index['flags'])) { + if ($index['flags']) { $indexXml->addAttribute('flags', implode(',', $index['flags'])); } @@ -141,19 +141,23 @@ public function exportClassMetadata(ClassMetadata $metadata) } } - if (isset($metadata->table['uniqueConstraints'])) { + if ($metadata->table->getUniqueConstraints()) { $uniqueConstraintsXml = $root->addChild('unique-constraints'); - foreach ($metadata->table['uniqueConstraints'] as $name => $unique) { + foreach ($metadata->table->getUniqueConstraints() as $name => $constraint) { $uniqueConstraintXml = $uniqueConstraintsXml->addChild('unique-constraint'); $uniqueConstraintXml->addAttribute('name', $name); - $uniqueConstraintXml->addAttribute('columns', implode(',', $unique['columns'])); + $uniqueConstraintXml->addAttribute('columns', implode(',', $constraint['columns'])); + + if ($constraint['flags']) { + $uniqueConstraintXml->addAttribute('flags', implode(',', $constraint['flags'])); + } - if ($unique['options']) { + if ($constraint['options']) { $optionsXml = $uniqueConstraintXml->addChild('options'); - foreach ($unique['options'] as $key => $value) { + foreach ($constraint['options'] as $key => $value) { $optionXml = $optionsXml->addChild('option', $value); $optionXml->addAttribute('name', $key); diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index b5b38880da7..60bd451f50a 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -282,19 +282,10 @@ public function getSchemaFromMetadata(array $classes) } } - if (isset($class->table['indexes'])) { - foreach ($class->table['indexes'] as $indexName => $indexData) { + if ($class->table->getIndexes()) { + foreach ($class->table->getIndexes() as $indexName => $indexData) { $indexName = is_numeric($indexName) ? null : $indexName; - - if ( ! isset($indexData['flags'])) { - $indexData['flags'] = []; - } - - if ( ! isset($indexData['options'])) { - $indexData['options'] = []; - } - - $index = new Index($indexName, $indexData['columns'], $indexData['unique'], $indexData['flags'], $indexData['options']); + $index = new Index($indexName, $indexData['columns'], $indexData['unique'], $indexData['flags'], $indexData['options']); foreach ($table->getIndexes() as $tableIndexName => $tableIndex) { if ($tableIndex->isFullfilledBy($index)) { @@ -304,19 +295,18 @@ public function getSchemaFromMetadata(array $classes) } if ($indexData['unique']) { - $table->addUniqueIndex($indexData['columns'], $indexName, (array) $indexData['options']); + $table->addUniqueIndex($indexData['columns'], $indexName, $indexData['options']); } else { - $table->addIndex($indexData['columns'], $indexName, (array) $indexData['flags'], (array) $indexData['options']); + $table->addIndex($indexData['columns'], $indexName, $indexData['flags'], $indexData['options']); } } } - if (isset($class->table['uniqueConstraints'])) { - foreach ($class->table['uniqueConstraints'] as $indexName => $indexData) { - $flags = isset($indexData['flags']) ? $indexData['flags'] : []; - $options = isset($indexData['options']) ? $indexData['options'] : []; - $uniqIndex = new Index($indexName, $indexData['columns'], true, false, $flags, $options); + if ($class->table->getUniqueConstraints()) { + foreach ($class->table->getUniqueConstraints() as $indexName => $indexData) { + $indexName = is_numeric($indexName) ? null : $indexName; + $uniqIndex = new Index($indexName, $indexData['columns'], true, false, $indexData['flags'], $indexData['options']); foreach ($table->getIndexes() as $tableIndexName => $tableIndex) { if ($tableIndex->isFullfilledBy($uniqIndex)) { @@ -325,12 +315,12 @@ public function getSchemaFromMetadata(array $classes) } } - $table->addUniqueConstraint($indexData['columns'], is_numeric($indexName) ? null : $indexName, $flags, $options); + $table->addUniqueConstraint($indexData['columns'], $indexName, $indexData['flags'], $indexData['options']); } } - if (isset($class->table['options'])) { - foreach ($class->table['options'] as $key => $val) { + if ($class->table->getOptions()) { + foreach ($class->table->getOptions() as $key => $val) { $table->addOption($key, $val); } } diff --git a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php index 315906f4e3b..50a2770c5c5 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php @@ -127,7 +127,10 @@ public function setUser(CmsUser $user) { public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->setPrimaryTable(['name' => 'company_person']); + $tableMetadata = new Mapping\TableMetadata(); + $tableMetadata->setName('company_person'); + + $metadata->setPrimaryTable($tableMetadata); $fieldMetadata = new Mapping\FieldMetadata('id'); diff --git a/tests/Doctrine/Tests/Models/CMS/CmsUser.php b/tests/Doctrine/Tests/Models/CMS/CmsUser.php index 95fa71e17af..aa019698781 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsUser.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsUser.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\Models\CMS; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Mapping; /** * @Entity @@ -271,11 +272,10 @@ public function setEmail(CmsEmail $email = null) { public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->setPrimaryTable( - [ - 'name' => 'cms_users', - ] - ); + $tableMetadata = new Mapping\TableMetadata(); + $tableMetadata->setName('cms_users'); + + $metadata->setPrimaryTable($tableMetadata); $metadata->addNamedNativeQuery( [ diff --git a/tests/Doctrine/Tests/Models/Company/CompanyContract.php b/tests/Doctrine/Tests/Models/Company/CompanyContract.php index bea51a515ec..91589495488 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyContract.php @@ -135,8 +135,11 @@ abstract public function calculatePrice(); static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->setInheritanceType(\Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_JOINED); - $metadata->setPrimaryTable(['name' => 'company_contracts']); + $tableMetadata = new Mapping\TableMetadata(); + $tableMetadata->setName('company_contracts'); + + $metadata->setPrimaryTable($tableMetadata); + $metadata->setInheritanceType(Mapping\ClassMetadata::INHERITANCE_TYPE_JOINED); $discrColumn = new Mapping\DiscriminatorColumnMetadata(); diff --git a/tests/Doctrine/Tests/Models/Company/CompanyPerson.php b/tests/Doctrine/Tests/Models/Company/CompanyPerson.php index 8592e375150..e720d7aaff2 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyPerson.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyPerson.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\Models\Company; +use Doctrine\ORM\Mapping; + /** * Description of CompanyPerson * @@ -119,12 +121,10 @@ public function setSpouse(CompanyPerson $spouse) { public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { + $tableMetadata = new Mapping\TableMetadata(); + $tableMetadata->setName('company_person'); - $metadata->setPrimaryTable( - [ - 'name' => 'company_person', - ] - ); + $metadata->setPrimaryTable($tableMetadata); $metadata->addNamedNativeQuery( [ diff --git a/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php b/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php index d1caee880d0..d9ec1ee4f46 100644 --- a/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php +++ b/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php @@ -13,10 +13,12 @@ class ExplicitSchemaAndTable public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->setPrimaryTable(array( - 'name' => 'explicit_table', - 'schema' => 'explicit_schema', - )); + $tableMetadata = new Mapping\TableMetadata(); + + $tableMetadata->setSchema('explicit_schema'); + $tableMetadata->setName('explicit_table'); + + $metadata->setPrimaryTable($tableMetadata); $fieldMetadata = new Mapping\FieldMetadata('id'); diff --git a/tests/Doctrine/Tests/Models/DDC2825/SchemaAndTableInTableName.php b/tests/Doctrine/Tests/Models/DDC2825/SchemaAndTableInTableName.php index 6e0b942f08a..cbc486c4d67 100644 --- a/tests/Doctrine/Tests/Models/DDC2825/SchemaAndTableInTableName.php +++ b/tests/Doctrine/Tests/Models/DDC2825/SchemaAndTableInTableName.php @@ -9,18 +9,25 @@ * Quoted column name to check that sequence names are * correctly handled * - * @Entity @Table(name="implicit_schema.implicit_table") + * @Entity + * @Table(name="implicit_table", schema="implicit_schema") */ class SchemaAndTableInTableName { - /** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */ + /** + * @Id @Column(type="integer") + * @GeneratedValue(strategy="AUTO") + */ public $id; public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) { - $metadata->setPrimaryTable(array( - 'name' => 'implicit_schema.implicit_table', - )); + $tableMetadata = new Mapping\TableMetadata(); + + $tableMetadata->setName('implicit_table'); + $tableMetadata->setSchema('implicit_schema'); + + $metadata->setPrimaryTable($tableMetadata); $fieldMetadata = new Mapping\FieldMetadata('id'); diff --git a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php index 28b0e74cb11..26459733779 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php @@ -215,7 +215,7 @@ public function testLoadMetadataFromDatabaseDetail() // Check comment self::assertNotNull($metadata->getProperty('columnComment')); - + $columnCommentProperty = $metadata->getProperty('columnComment'); $columnCommentOptions = $columnCommentProperty->getOptions(); @@ -240,16 +240,21 @@ public function testLoadMetadataFromDatabaseDetail() self::assertEquals(3, $columnDecimalProperty->getScale()); // Check indexes - self::assertTrue( ! empty($metadata->table['indexes']['index1']['columns'])); + $indexes = $metadata->table->getIndexes(); + + self::assertTrue( ! empty($indexes['index1']['columns'])); self::assertEquals( ['column_index1','column_index2'], - $metadata->table['indexes']['index1']['columns'] + $indexes['index1']['columns'] ); - self::assertTrue( ! empty($metadata->table['uniqueConstraints']['unique_index1']['columns'])); + // Check unique constraints + $uniqueConstraints = $metadata->table->getUniqueConstraints(); + + self::assertTrue( ! empty($uniqueConstraints['unique_index1']['columns'])); self::assertEquals( ['column_unique_index1', 'column_unique_index2'], - $metadata->table['uniqueConstraints']['unique_index1']['columns'] + $uniqueConstraints['unique_index1']['columns'] ); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php index 7fade168ac8..f35f74a6f4c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php @@ -41,8 +41,8 @@ public function testClassSchemaMappingsValidity($className, $expectedSchemaName, $quotedTableName = $this->_em->getConfiguration()->getQuoteStrategy()->getTableName($classMetadata, $platform); // Check if table name and schema properties are defined in the class metadata - self::assertEquals($expectedTableName, $classMetadata->table['name']); - self::assertEquals($expectedSchemaName, $classMetadata->table['schema']); + self::assertEquals($expectedTableName, $classMetadata->table->getName()); + self::assertEquals($expectedSchemaName, $classMetadata->table->getSchema()); if ($platform->supportsSchemas()) { $fullTableName = sprintf('"%s"."%s"', $expectedSchemaName, $expectedTableName); diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index b934a2b944b..994d4451ffe 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -88,19 +88,25 @@ public function testEntityIndexes() { $class = $this->createClassMetadata('Doctrine\Tests\ORM\Mapping\User'); - self::assertArrayHasKey('indexes', $class->table, 'ClassMetadata should have indexes key in table property.'); + self::assertCount(2, $class->table->getIndexes()); self::assertEquals( [ 'name_idx' => [ + 'name' => 'name_idx', 'columns' => ['name'], 'unique' => false, + 'options' => [], + 'flags' => [], ], 0 => [ + 'name' => null, 'columns' => ['user_email'], 'unique' => false, + 'options' => [], + 'flags' => [], ] ], - $class->table['indexes'] + $class->table->getIndexes() ); return $class; @@ -113,13 +119,14 @@ public function testEntityIndexFlagsAndPartialIndexes() self::assertEquals( [ 0 => [ - 'unique' => false, + 'name' => null, 'columns' => ['content'], + 'unique' => false, 'flags' => ['fulltext'], 'options' => ['where' => 'content IS NOT NULL'], ] ], - $class->table['indexes'] + $class->table->getIndexes() ); } @@ -129,20 +136,17 @@ public function testEntityIndexFlagsAndPartialIndexes() */ public function testEntityUniqueConstraints($class) { - self::assertArrayHasKey( - 'uniqueConstraints', - $class->table, - 'ClassMetadata should have uniqueConstraints key in table property when Unique Constraints are set.' - ); - + self::assertCount(1, $class->table->getUniqueConstraints()); self::assertEquals( [ 'search_idx' => [ + 'name' => 'search_idx', 'columns' => ['name', 'user_email'], - 'options' => ['where' => 'name IS NOT NULL'] + 'options' => [], + 'flags' => [], ] ], - $class->table['uniqueConstraints'] + $class->table->getUniqueConstraints() ); return $class; @@ -154,14 +158,13 @@ public function testEntityUniqueConstraints($class) */ public function testEntityOptions($class) { - self::assertArrayHasKey('options', $class->table, 'ClassMetadata should have options key in table property.'); - + self::assertCount(2, $class->table->getOptions()); self::assertEquals( [ 'foo' => 'bar', 'baz' => ['key' => 'val'] ], - $class->table['options'] + $class->table->getOptions() ); return $class; @@ -577,7 +580,7 @@ public function testNamingStrategy() self::assertEquals('ID', $class->getColumnName('id')); self::assertEquals('NAME', $class->getColumnName('name')); - self::assertEquals('DDC1476ENTITY_WITH_DEFAULT_FIELD_TYPE', $class->table['name']); + self::assertEquals('DDC1476ENTITY_WITH_DEFAULT_FIELD_TYPE', $class->table->getName()); } /** @@ -1141,7 +1144,7 @@ public function testDiscriminatorColumnDefaultName() * @HasLifecycleCallbacks * @Table( * name="cms_users", - * uniqueConstraints={@UniqueConstraint(name="search_idx", columns={"name", "user_email"}, options={"where": "name IS NOT NULL"})}, + * uniqueConstraints={@UniqueConstraint(name="search_idx", columns={"name", "user_email"})}, * indexes={@Index(name="name_idx", columns={"name"}), @Index(name="0", columns={"user_email"})}, * options={"foo": "bar", "baz": {"key": "val"}} * ) @@ -1218,23 +1221,62 @@ public function doStuffOnPostPersist() public static function loadMetadata(ClassMetadata $metadata) { - $metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); - $metadata->setPrimaryTable( + $tableMetadata = new Mapping\TableMetadata(); + + $tableMetadata->setName('cms_users'); + $tableMetadata->addIndex( [ - 'name' => 'cms_users', - 'options' => [ - 'foo' => 'bar', - 'baz' => ['key' => 'val'] - ], + 'name' => 'name_idx', + 'columns' => ['name'], + 'unique' => false, + 'options' => [], + 'flags' => [], ] ); + $tableMetadata->addIndex( + [ + 'name' => null, + 'columns' => ['user_email'], + 'unique' => false, + 'options' => [], + 'flags' => [], + ] + ); + + $tableMetadata->addUniqueConstraint( + [ + 'name' => 'search_idx', + 'columns' => ['name', 'user_email'], + 'options' => [], + 'flags' => [], + ] + ); + $tableMetadata->addOption('foo', 'bar'); + $tableMetadata->addOption('baz', ['key' => 'val']); + + $metadata->setPrimaryTable($tableMetadata); + $metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); $metadata->addLifecycleCallback('doStuffOnPrePersist', 'prePersist'); $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); $metadata->addLifecycleCallback('doStuffOnPostPersist', 'postPersist'); + $metadata->setGeneratorDefinition( + [ + 'sequenceName' => 'tablename_seq', + 'allocationSize' => 100, + ] + ); + + $metadata->addNamedQuery( + [ + 'name' => 'all', + 'query' => 'SELECT u FROM __CLASS__ u' + ] + ); + $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); @@ -1341,31 +1383,6 @@ public static function loadMetadata(ClassMetadata $metadata) 'orderBy' => NULL, ] ); - - $metadata->table['indexes'] = [ - 'name_idx' => [ - 'unique' => false, - 'columns' => ['name'], - ], - 0 => [ // Unnamed index - 'unique' => false, - 'columns' => ['user_email'], - ], - ]; - - $metadata->setGeneratorDefinition( - [ - 'sequenceName' => 'tablename_seq', - 'allocationSize' => 100, - ] - ); - - $metadata->addNamedQuery( - [ - 'name' => 'all', - 'query' => 'SELECT u FROM __CLASS__ u' - ] - ); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index e6ac8ce8107..498d01d3d03 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -212,9 +212,9 @@ public function testMappedSuperclassIndex() $class = $this->cmf->getMetadataFor(EntityIndexSubClass::class); self::assertNotNull($class->getProperty('mapped1')); - self::assertArrayHasKey('IDX_NAME_INDEX', $class->table['uniqueConstraints']); - self::assertArrayHasKey('IDX_MAPPED1_INDEX', $class->table['uniqueConstraints']); - self::assertArrayHasKey('IDX_MAPPED2_INDEX', $class->table['indexes']); + self::assertArrayHasKey('IDX_NAME_INDEX', $class->table->getUniqueConstraints()); + self::assertArrayHasKey('IDX_MAPPED1_INDEX', $class->table->getUniqueConstraints()); + self::assertArrayHasKey('IDX_MAPPED2_INDEX', $class->table->getIndexes()); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php similarity index 94% rename from tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php rename to tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php index 484e3bdee50..3be823496ac 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php @@ -1,6 +1,6 @@ cm->isReadOnly); } - public function testSetTable() - { - self::assertIsFluent($this->builder->setTable('users')); - self::assertEquals('users', $this->cm->table['name']); - } - - public function testAddIndex() - { - self::assertIsFluent($this->builder->addIndex(array('username', 'name'), 'users_idx')); - self::assertEquals( - [ - 'users_idx' => [ - 'unique' => false, - 'columns' => ['username', 'name'] - ] - ], - $this->cm->table['indexes'] - ); - } - - public function testAddUniqueConstraint() - { - self::assertIsFluent($this->builder->addUniqueConstraint(['username', 'name'], 'users_idx')); - self::assertEquals( - [ - 'users_idx' => [ - 'columns' => ['username', 'name'] - ] - ], - $this->cm->table['uniqueConstraints'] - ); - } - - public function testSetPrimaryTableRelated() - { - $this->builder->addUniqueConstraint(['username', 'name'], 'users_idx'); - $this->builder->addIndex(['username', 'name'], 'users_idx'); - $this->builder->setTable('users'); - - self::assertEquals( - [ - 'name' => 'users', - 'indexes' => [ - 'users_idx' => [ - 'unique' => false, - 'columns' => ['username', 'name'] - ] - ], - 'uniqueConstraints' => [ - 'users_idx' => [ - 'columns' => ['username', 'name'] - ] - ], - 'options' => [], - ], - $this->cm->table - ); - } - public function testSetInheritanceJoined() { self::assertIsFluent($this->builder->setJoinedTableInheritance()); diff --git a/tests/Doctrine/Tests/ORM/Mapping/Builder/TableMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/TableMetadataBuilderTest.php new file mode 100644 index 00000000000..ba47aeb61e3 --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Mapping/Builder/TableMetadataBuilderTest.php @@ -0,0 +1,143 @@ +. + */ + +namespace Doctrine\Tests\ORM\Mapping\Builder; + +use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; +use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; +use Doctrine\ORM\Mapping\Builder\TableMetadataBuilder; +use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; +use Doctrine\Tests\OrmTestCase; + +/** + * @group DDC-659 + */ +class TableMetadataBuilderTest extends OrmTestCase +{ + /** + * @var TableMetadataBuilder + */ + private $builder; + + public function setUp() + { + $this->builder = new TableMetadataBuilder(); + } + + public function testWithSchema() + { + self::assertIsFluent($this->builder->withSchema('public')); + + $tableMetadata = $this->builder->build(); + + self::assertEquals('public', $tableMetadata->getSchema()); + } + + + public function testWithName() + { + self::assertIsFluent($this->builder->withName('users')); + + $tableMetadata = $this->builder->build(); + + self::assertEquals('users', $tableMetadata->getName()); + } + + public function testWithIndex() + { + self::assertIsFluent($this->builder->withIndex('users_idx', ['username', 'name'])); + + $tableMetadata = $this->builder->build(); + + self::assertEquals( + [ + 'users_idx' => [ + 'name' => 'users_idx', + 'columns' => ['username', 'name'], + 'unique' => false, + 'options' => [], + 'flags' => [], + ] + ], + $tableMetadata->getIndexes() + ); + } + + public function testAddUniqueConstraint() + { + self::assertIsFluent($this->builder->withUniqueConstraint('users_idx', ['username', 'name'])); + + $tableMetadata = $this->builder->build(); + + self::assertEquals( + [ + 'users_idx' => [ + 'name' => 'users_idx', + 'columns' => ['username', 'name'], + 'options' => [], + 'flags' => [], + ] + ], + $tableMetadata->getUniqueConstraints() + ); + } + + public function testSetPrimaryTableRelated() + { + $this->builder->withUniqueConstraint('users_idx', ['username', 'name']); + $this->builder->withIndex('users_idx', ['username', 'name']); + $this->builder->withSchema('public'); + $this->builder->withName('users'); + + $tableMetadata = $this->builder->build(); + + self::assertEquals('public', $tableMetadata->getSchema()); + self::assertEquals('users', $tableMetadata->getName()); + self::assertEquals( + [ + 'users_idx' => [ + 'name' => 'users_idx', + 'columns' => ['username', 'name'], + 'unique' => false, + 'options' => [], + 'flags' => [], + ] + ], + $tableMetadata->getIndexes() + ); + self::assertEquals( + [ + 'users_idx' => [ + 'name' => 'users_idx', + 'columns' => ['username', 'name'], + 'options' => [], + 'flags' => [], + ] + ], + $tableMetadata->getUniqueConstraints() + ); + } + + protected function assertIsFluent($ret) + { + self::assertSame($this->builder, $ret, "Return Value has to be same instance as used builder"); + } +} diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 361f19103bd..99f88f5cdd8 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -57,13 +57,13 @@ public function testGetMetadataForSingleClass() self::assertTrue($cm1->hasField('name')); self::assertEquals(2, count($cm1->associationMappings)); self::assertEquals(ClassMetadata::GENERATOR_TYPE_AUTO, $cm1->generatorType); - self::assertEquals('group', $cm1->table['name']); + self::assertEquals('group', $cm1->table->getName()); // Go $cmMap1 = $cmf->getMetadataFor($cm1->name); self::assertSame($cm1, $cmMap1); - self::assertEquals('group', $cmMap1->table['name']); + self::assertEquals('group', $cmMap1->table->getName()); self::assertEquals([], $cmMap1->parentClasses); self::assertTrue($cmMap1->hasField('name')); } @@ -279,7 +279,11 @@ protected function _createValidClassMetadata() // Self-made metadata $cm1 = new ClassMetadata(TestEntity1::class); $cm1->initializeReflection(new RuntimeReflectionService()); - $cm1->setPrimaryTable(['name' => 'group']); + + $tableMetadata = new Mapping\TableMetadata(); + $tableMetadata->setName('group'); + + $cm1->setPrimaryTable($tableMetadata); // Add a mapped field $fieldMetadata = new Mapping\FieldMetadata('id'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 7375004c0e9..d5cb82226b5 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -429,10 +429,12 @@ public function testGetTemporaryTableNameSchema() $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->setPrimaryTable([ - 'schema' => 'foo', - 'name' => 'bar', - ]); + $tableMetadata = new Mapping\TableMetadata(); + + $tableMetadata->setSchema('foo'); + $tableMetadata->setName('bar'); + + $cm->setPrimaryTable($tableMetadata); self::assertEquals('foo_bar_id_tmp', $cm->getTemporaryIdTableName()); } @@ -443,11 +445,10 @@ public function testDefaultTableName() $cm->initializeReflection(new RuntimeReflectionService()); // When table's name is not given - $primaryTable = []; - $cm->setPrimaryTable($primaryTable); + $cm->setPrimaryTable(new Mapping\TableMetadata()); self::assertEquals('CmsUser', $cm->getTableName()); - self::assertEquals('CmsUser', $cm->table['name']); + self::assertEquals('CmsUser', $cm->table->getName()); $cm = new ClassMetadata(CMS\CmsAddress::class); $cm->initializeReflection(new RuntimeReflectionService()); @@ -1233,7 +1234,7 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategy() ] ); - self::assertEquals('routing_routingleg', $routingMetadata->table['name']); + self::assertEquals('routing_routingleg', $routingMetadata->table->getName()); self::assertEquals('cms_cmsaddress_cms_cmsuser', $addressMetadata->associationMappings['user']['joinTable']['name']); self::assertEquals('doctrineglobal_article_cms_cmsuser', $articleMetadata->associationMappings['author']['joinTable']['name']); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php index 9cac3a5466d..dd51bd33de2 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php @@ -6,8 +6,11 @@ use Doctrine\ORM\Events; use Doctrine\Tests\Models\CMS\CmsAddress; +$tableMetadata = new Mapping\TableMetadata(); +$tableMetadata->setName('company_person'); + /* @var $metadata ClassMetadata */ -$metadata->setPrimaryTable(['name' => 'company_person']); +$metadata->setPrimaryTable($tableMetadata); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php index 4b0075ecfe4..6d64e050d79 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php @@ -1,13 +1,13 @@ setPrimaryTable( - [ - 'name' => 'cms_users', - ] -); +$tableMetadata = new Mapping\TableMetadata(); +$tableMetadata->setName('cms_users'); + +/* @var $metadata ClassMetadata */ +$metadata->setPrimaryTable($tableMetadata); $metadata->addNamedNativeQuery( [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index 3f55b5c1006..ff1cdf98357 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -8,8 +8,12 @@ use Doctrine\Tests\Models\Cache\Travel; /* @var $metadata ClassMetadata */ +$tableMetadata = new Mapping\TableMetadata(); + +$tableMetadata->setName('cache_city'); + +$metadata->setPrimaryTable($tableMetadata); $metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); -$metadata->setPrimaryTable(['name' => 'cache_city']); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_IDENTITY); $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); $metadata->enableCache(['usage' => ClassMetadata::CACHE_USAGE_READ_ONLY]); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php index 3876640387a..7fcb2e50f11 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php @@ -4,9 +4,12 @@ use Doctrine\ORM\Mapping; use Doctrine\ORM\Mapping\ClassMetadata; +$tableMetadata = new Mapping\TableMetadata(); +$tableMetadata->setName('company_contracts'); + /* @var $metadata ClassMetadata */ +$metadata->setPrimaryTable($tableMetadata); $metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_JOINED); -$metadata->setPrimaryTable(['name' => 'company_contracts']); $discrColumn = new Mapping\DiscriminatorColumnMetadata(); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php index 95ab1c4e808..cdc897485a7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php @@ -1,8 +1,14 @@ setName('company_person'); + +/* @var $metadata ClassMetadata */ +$metadata->setPrimaryTable($tableMetadata); + /** @var ClassMetadata $metadata */ $metadata->setPrimaryTable(['name' => 'company_person']); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php index 346a537e381..defc2208e2e 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php @@ -4,13 +4,13 @@ use Doctrine\ORM\Mapping; use Doctrine\ORM\Mapping\ClassMetadata; +$tableMetadata = new Mapping\TableMetadata(); +$tableMetadata->setSchema('explicit_schema'); +$tableMetadata->setName('explicit_table'); + /* @var $metadata ClassMetadata */ -$metadata->setPrimaryTable( - [ - 'name' => 'explicit_table', - 'schema' => 'explicit_schema', - ] -); +$metadata->setPrimaryTable($tableMetadata); +$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); $fieldMetadata = new Mapping\FieldMetadata('id'); @@ -18,5 +18,3 @@ $fieldMetadata->setPrimaryKey(true); $metadata->addProperty($fieldMetadata); - -$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php index 92a56df983f..62fd65aa76d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php @@ -4,22 +4,22 @@ use Doctrine\ORM\Mapping; use Doctrine\ORM\Mapping\ClassMetadata; -/* @var $metadata ClassMetadata */ -$metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); +$tableMetadata = new Mapping\TableMetadata(); -$metadata->setPrimaryTable( +$tableMetadata->addIndex( [ - 'indexes' => [ - [ - 'unique' => false, - 'columns' => ['content'], - 'flags' => ['fulltext'], - 'options' => ['where' => 'content IS NOT NULL'], - ], - ] + 'name' => null, + 'columns' => ['content'], + 'unique' => false, + 'flags' => ['fulltext'], + 'options' => ['where' => 'content IS NOT NULL'], ] ); +/* @var $metadata ClassMetadata */ +$metadata->setPrimaryTable($tableMetadata); +$metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); + $fieldMetadata = new Mapping\FieldMetadata('content'); $fieldMetadata->setType(Type::getType('text')); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index f3f4282f1f9..3bd630677d8 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -7,8 +7,41 @@ use Doctrine\Tests\ORM\Mapping\Group; use Doctrine\Tests\ORM\Mapping\Phonenumber; +/* @var $metadata ClassMetadata */ +$tableMetadata = new Mapping\TableMetadata(); + +$tableMetadata->setName('cms_users'); +$tableMetadata->addIndex( + [ + 'name' => 'name_idx', + 'columns' => ['name'], + 'unique' => false, + 'options' => [], + 'flags' => [], + ] +); +$tableMetadata->addIndex( + [ + 'name' => null, + 'columns' => ['user_email'], + 'unique' => false, + 'options' => [], + 'flags' => [], + ] +); +$tableMetadata->addUniqueConstraint( + [ + 'name' => 'search_idx', + 'columns' => ['name', 'user_email'], + 'options' => [], + 'flags' => [], + ] +); +$tableMetadata->addOption('foo', 'bar'); +$tableMetadata->addOption('baz', ['key' => 'val']); + +$metadata->setPrimaryTable($tableMetadata); $metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); -$metadata->setPrimaryTable(['name' => 'cms_users']); $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); $metadata->addLifecycleCallback('doStuffOnPrePersist', 'prePersist'); @@ -22,6 +55,13 @@ ] ); +$metadata->setGeneratorDefinition( + [ + 'sequenceName' => 'tablename_seq', + 'allocationSize' => 100, + ] +); + $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); @@ -132,33 +172,3 @@ 'orderBy' => null, ] ); - -$metadata->table['options'] = [ - 'foo' => 'bar', - 'baz' => ['key' => 'val'] -]; - -$metadata->table['uniqueConstraints'] = [ - 'search_idx' => [ - 'columns' => ['name', 'user_email'], - 'options' => ['where' => 'name IS NOT NULL'], - ], -]; - -$metadata->table['indexes'] = [ - 'name_idx' => [ - 'unique' => false, - 'columns' => ['name'], - ], - 0 => [ - 'unique' => false, - 'columns' => ['user_email'], - ] -]; - -$metadata->setGeneratorDefinition( - [ - 'sequenceName' => 'tablename_seq', - 'allocationSize' => 100, - ] -); diff --git a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.dcm.xml b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.dcm.xml index 3a89dd97369..3b378f5206e 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.dcm.xml +++ b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.dcm.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://raw.github.com/doctrine/doctrine2/master/doctrine-mapping.xsd" > - + diff --git a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml index 49686f48ea9..e39093c5203 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml +++ b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml @@ -19,11 +19,7 @@ - - - - - + diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/Command/MappingDescribeCommandTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/Command/MappingDescribeCommandTest.php index d83e17005e7..c8137dbf949 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Console/Command/MappingDescribeCommandTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Console/Command/MappingDescribeCommandTest.php @@ -55,8 +55,8 @@ public function testShowSpecificFuzzySingle() { $this->tester->execute( [ - 'command' => $this->command->getName(), - 'entityName' => 'AttractionInfo', + 'command' => $this->command->getName(), + 'entityName' => 'AttractionInfo', ] ); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 7b80818abcb..58eb7e1ec40 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -65,9 +65,29 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $metadata = new ClassMetadata($this->_namespace . '\EntityGeneratorBook'); $metadata->customRepositoryClassName = $this->_namespace . '\EntityGeneratorBookRepository'; - $metadata->table['name'] = 'book'; - $metadata->table['uniqueConstraints']['name_uniq'] = ['columns' => ['name']]; - $metadata->table['indexes']['status_idx'] = ['columns' => ['status']]; + $tableMetadata = new Mapping\TableMetadata(); + + $tableMetadata->setName('book'); + $tableMetadata->addUniqueConstraint( + [ + 'name' => 'name_uniq', + 'columns' => ['name'], + 'options' => [], + 'flags' => [], + ] + ); + + $tableMetadata->addIndex( + [ + 'name' => 'status_idx', + 'columns' => ['status'], + 'unique' => false, + 'options' => [], + 'flags' => [], + ] + ); + + $metadata->setPrimaryTable($tableMetadata); $fieldMetadata = new Mapping\FieldMetadata('name'); @@ -167,7 +187,11 @@ public function generateBookEntityFixture(array $embeddedClasses = []) private function generateEntityTypeFixture(array $field) { $metadata = new ClassMetadata($this->_namespace . '\EntityType'); - $metadata->table['name'] = 'entity_type'; + + $tableMetadata = new Mapping\TableMetadata(); + $tableMetadata->setName('entity_type'); + + $metadata->setPrimaryTable($tableMetadata); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index ccf1a5eb8eb..9b74807547c 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -144,10 +144,10 @@ public function testExportedMetadataCanBeReadBackIn() */ public function testTableIsExported($class) { - self::assertEquals('cms_users', $class->table['name']); + self::assertEquals('cms_users', $class->table->getName()); self::assertEquals( ['engine' => 'MyISAM', 'foo' => ['bar' => 'baz']], - $class->table['options'] + $class->table->getOptions() ); return $class; diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php index 05197359176..96a342ff8c4 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php @@ -5,17 +5,13 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Tests\ORM\Tools\Export; -$metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); +$tableMetadata = new Mapping\TableMetadata(); +$tableMetadata->setName('cms_users'); +$tableMetadata->addOption('engine', 'MyISAM'); +$tableMetadata->addOption('foo', ['bar' => 'baz']); -$metadata->setPrimaryTable( - [ - 'name' => 'cms_users', - 'options' => [ - 'engine' => 'MyISAM', - 'foo' => ['bar' => 'baz'] - ], - ] -); +$metadata->setPrimaryTable($tableMetadata); +$metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); $metadata->addLifecycleCallback('doStuffOnPrePersist', 'prePersist'); From 603161dddc6d32522ad7f0c0fac54960383f9e19 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 5 Oct 2016 03:40:08 +0000 Subject: [PATCH 070/275] Finalized TableMetadata implementation --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 2 +- .../ORM/Mapping/Driver/AnnotationDriver.php | 38 ++++++++----------- .../ORM/Mapping/Driver/DatabaseDriver.php | 23 +++++------ lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 30 ++++++++------- .../ORM/Functional/Ticket/DDC1595Test.php | 2 - .../ORM/Functional/Ticket/DDC2825Test.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 22 +++++------ .../Tests/ORM/Mapping/ClassMetadataTest.php | 2 - ...dels.DDC2825.SchemaAndTableInTableName.php | 9 +++-- 9 files changed, 61 insertions(+), 69 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 86e5c10c7f2..0cf6e1cb184 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1796,7 +1796,7 @@ public function getTableName() */ public function getSchemaName() { - return $this->table->getSchema() ?? null; + return $this->table->getSchema(); } /** diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index addf206b277..f74eb6d7a10 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -112,8 +112,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat // Evaluate Table annotation if (isset($classAnnotations[Annotation\Table::class])) { - $tableAnnot = $classAnnotations[Annotation\Table::class]; - $tableBuilder = new TableMetadataBuilder(); + $tableAnnot = $classAnnotations[Annotation\Table::class]; if (! empty($tableAnnot->name)) { $metadata->table->setName($tableAnnot->name); @@ -123,33 +122,28 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $metadata->table->setSchema($tableAnnot->schema); } - if (! empty($metadata->table->getSchema())) { - $tableBuilder->withSchema($metadata->table->getSchema()); + foreach ($tableAnnot->options as $optionName => $optionValue) { + $metadata->table->addOption($optionName, $optionValue); } - $tableBuilder->withName($metadata->table->getName()); - $tableBuilder->withOptions($tableAnnot->options); - foreach ($tableAnnot->indexes as $indexAnnot) { - $tableBuilder->withIndex( - $indexAnnot->name, - $indexAnnot->columns, - $indexAnnot->unique, - $indexAnnot->options, - $indexAnnot->flags - ); + $metadata->table->addIndex([ + 'name' => $indexAnnot->name, + 'columns' => $indexAnnot->columns, + 'unique' => $indexAnnot->unique, + 'options' => $indexAnnot->options, + 'flags' => $indexAnnot->flags, + ]); } foreach ($tableAnnot->uniqueConstraints as $uniqueConstraintAnnot) { - $tableBuilder->withUniqueConstraint( - $uniqueConstraintAnnot->name, - $uniqueConstraintAnnot->columns, - $uniqueConstraintAnnot->options, - $uniqueConstraintAnnot->flags - ); + $metadata->table->addUniqueConstraint([ + 'name' => $uniqueConstraintAnnot->name, + 'columns' => $uniqueConstraintAnnot->columns, + 'options' => $uniqueConstraintAnnot->options, + 'flags' => $uniqueConstraintAnnot->flags, + ]); } - - $builder->withTable($tableBuilder->build()); } // Evaluate @Cache annotation diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index 1e25878c8ff..1a7124ae1f2 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -184,8 +184,8 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat } $metadata->name = $className; - $metadata->table = $this->buildTable($metadata); + $this->buildTable($metadata); $this->buildFieldMappings($metadata); $this->buildToOneAssociationMappings($metadata); @@ -322,16 +322,13 @@ private function reverseEngineerMappingFromDatabase() * Build table from a class metadata. * * @param ClassMetadata $metadata - * - * @return TableMetadata */ private function buildTable(ClassMetadata $metadata) { $tableName = $this->classToTableNames[$metadata->name]; $indexes = $this->tables[$tableName]->getIndexes(); - $tableBuilder = new TableMetadataBuilder(); - $tableBuilder->withName($this->classToTableNames[$metadata->name]); + $metadata->table->setName($this->classToTableNames[$metadata->name]); foreach ($indexes as $index) { /** @var Index $index */ @@ -339,16 +336,14 @@ private function buildTable(ClassMetadata $metadata) continue; } - $tableBuilder->withIndex( - $index->getName(), - $index->getColumns(), - $index->isUnique(), - $index->getOptions(), - $index->getFlags() - ); + $metadata->table->addIndex([ + 'name' => $index->getName(), + 'columns' => $index->getColumns(), + 'unique' => $index->isUnique(), + 'options' => $index->getOptions(), + 'flags' => $index->getFlags(), + ]); } - - return $tableBuilder->build(); } /** diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 990644dd80e..d1ca9294094 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -82,8 +82,6 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } // Evaluate attributes - $tableBuilder = new TableMetadataBuilder(); - if (isset($xmlRoot['table'])) { $metadata->table->setName((string) $xmlRoot['table']); } @@ -95,15 +93,11 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) if (isset($xmlRoot->options)) { $options = $this->parseOptions($xmlRoot->options->children()); - $tableBuilder->withOptions($options); - } - - if (! empty($metadata->table->getSchema())) { - $tableBuilder->withSchema($metadata->table->getSchema()); + foreach ($options as $optionName => $optionValue) { + $metadata->table->addOption($optionName, $optionValue); + } } - $tableBuilder->withName($metadata->table->getName()); - // Evaluate if (isset($xmlRoot->indexes)) { foreach ($xmlRoot->indexes->index as $indexXml) { @@ -113,11 +107,18 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $options = isset($indexXml->options) ? $this->parseOptions($indexXml->options->children()) : []; $flags = isset($indexXml['flags']) ? explode(',', (string) $indexXml['flags']) : []; - $tableBuilder->withIndex($indexName, $columns, $isUnique, $options, $flags); + $metadata->table->addIndex([ + 'name' => $indexName, + 'columns' => $columns, + 'unique' => $isUnique, + 'options' => $options, + 'flags' => $flags, + ]); } } // Evaluate + if (isset($xmlRoot->{'unique-constraints'})) { foreach ($xmlRoot->{'unique-constraints'}->{'unique-constraint'} as $uniqueXml) { $indexName = isset($uniqueXml['name']) ? (string) $uniqueXml['name'] : null; @@ -125,12 +126,15 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $options = isset($uniqueXml->options) ? $this->parseOptions($uniqueXml->options->children()) : []; $flags = isset($uniqueXml['flags']) ? explode(',', (string) $uniqueXml['flags']) : []; - $tableBuilder->withUniqueConstraint($indexName, $columns, $options, $flags); + $metadata->table->addUniqueConstraint([ + 'name' => $indexName, + 'columns' => $columns, + 'options' => $options, + 'flags' => $flags, + ]); } } - $metadata->setPrimaryTable($tableBuilder->build()); - // Evaluate second level cache if (isset($xmlRoot->cache)) { $metadata->enableCache($this->cacheToArray($xmlRoot->cache)); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php index e369aa64e0d..c867ec3a62d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php @@ -87,7 +87,6 @@ abstract class DDC1595BaseInheritance /** * @Entity - * @Table(name="entity1") */ class DDC1595InheritedEntity1 extends DDC1595BaseInheritance { @@ -108,7 +107,6 @@ public function getEntities() /** * @Entity - * @Table(name="entity2") */ class DDC1595InheritedEntity2 extends DDC1595BaseInheritance { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php index f35f74a6f4c..a34d6bb07e1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php @@ -99,7 +99,7 @@ public function getTestedClasses() /** * @Entity - * @Table(name="myschema.order") + * @Table(name="order", schema="myschema") */ class DDC2825ClassWithImplicitlyDefinedSchemaAndQuotedTableName { diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 994d4451ffe..bc33e18c8b0 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -1145,7 +1145,7 @@ public function testDiscriminatorColumnDefaultName() * @Table( * name="cms_users", * uniqueConstraints={@UniqueConstraint(name="search_idx", columns={"name", "user_email"})}, - * indexes={@Index(name="name_idx", columns={"name"}), @Index(name="0", columns={"user_email"})}, + * indexes={@Index(name="name_idx", columns={"name"}), @Index(columns={"user_email"})}, * options={"foo": "bar", "baz": {"key": "val"}} * ) * @NamedQueries({@NamedQuery(name="all", query="SELECT u FROM __CLASS__ u")}) @@ -1550,21 +1550,21 @@ class Comment public static function loadMetadata(ClassMetadata $metadata) { - $metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); + $tableMetadata = new Mapping\TableMetadata(); - $metadata->setPrimaryTable( + $tableMetadata->addIndex( [ - 'indexes' => [ - [ - 'unique' => false, - 'columns' => ['content'], - 'flags' => ['fulltext'], - 'options' => ['where' => 'content IS NOT NULL'] - ], - ] + 'name' => null, + 'unique' => false, + 'columns' => ['content'], + 'flags' => ['fulltext'], + 'options' => ['where' => 'content IS NOT NULL'], ] ); + $metadata->setPrimaryTable($tableMetadata); + $metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); + $fieldMetadata = new Mapping\FieldMetadata('content'); $fieldMetadata->setType(Type::getType('text')); $fieldMetadata->setNullable(false); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index d5cb82226b5..cbb3b63686e 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -445,8 +445,6 @@ public function testDefaultTableName() $cm->initializeReflection(new RuntimeReflectionService()); // When table's name is not given - $cm->setPrimaryTable(new Mapping\TableMetadata()); - self::assertEquals('CmsUser', $cm->getTableName()); self::assertEquals('CmsUser', $cm->table->getName()); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php index ee571b47fe6..b04cc5e6db7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php @@ -4,13 +4,16 @@ use Doctrine\ORM\Mapping; use Doctrine\ORM\Mapping\ClassMetadata; +$tableMetadata = new Mapping\TableMetadata(); +$tableMetadata->setSchema('implicit_schema'); +$tableMetadata->setName('implicit_table'); + /* @var $metadata ClassMetadata */ -$metadata->setPrimaryTable(['name' => 'implicit_schema.implicit_table']); +$metadata->setPrimaryTable($tableMetadata); +$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); $metadata->addProperty($fieldMetadata); - -$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); From 310a90e0ecc880a675b97ee7c0977c8e588e04c0 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Thu, 6 Oct 2016 04:24:33 +0000 Subject: [PATCH 071/275] Removed QuoteStrategy::getTableName() --- .../ORM/Mapping/DefaultQuoteStrategy.php | 21 ---------- .../ORM/Mapping/JoinTableMetadata.php | 42 +++++++++++++++++++ lib/Doctrine/ORM/Mapping/QuoteStrategy.php | 10 ----- lib/Doctrine/ORM/Mapping/TableMetadata.php | 36 ++++++++++++---- .../Collection/ManyToManyPersister.php | 8 ++-- .../Collection/OneToManyPersister.php | 9 ++-- .../Entity/BasicEntityPersister.php | 20 ++++----- .../Entity/JoinedSubclassPersister.php | 23 +++++----- .../ORM/Query/AST/Functions/SizeFunction.php | 19 +++++---- .../Query/Exec/MultiTableDeleteExecutor.php | 7 +++- .../Query/Exec/MultiTableUpdateExecutor.php | 7 ++-- lib/Doctrine/ORM/Query/SqlWalker.php | 27 +++++++----- lib/Doctrine/ORM/Tools/SchemaTool.php | 11 +++-- lib/Doctrine/ORM/Utility/PersisterHelper.php | 16 +++---- .../ORM/Functional/Ticket/DDC2825Test.php | 2 +- 15 files changed, 149 insertions(+), 109 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php index 250a3838ddf..f88f51d03cb 100644 --- a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php @@ -29,27 +29,6 @@ */ class DefaultQuoteStrategy implements QuoteStrategy { - /** - * {@inheritdoc} - * - * @todo Table names should be computed in DBAL depending on the platform - */ - public function getTableName(ClassMetadata $class, AbstractPlatform $platform) - { - $schemaName = $class->getSchemaName(); - $tableName = $class->getTableName(); - - if ( ! empty($schemaName)) { - $tableName = $schemaName . '.' . $tableName; - - if ( ! $platform->supportsSchemas() && $platform->canEmulateSchemas()) { - $tableName = $schemaName . '__' . $class->getTableName(); - } - } - - return $platform->quoteIdentifier($tableName); - } - /** * {@inheritdoc} */ diff --git a/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php b/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php index 3587e937d59..49f9dac1b3c 100644 --- a/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php +++ b/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php @@ -24,4 +24,46 @@ class JoinTableMetadata extends TableMetadata { + /** @var array */ + protected $joinColumns = []; + + /** @var array */ + protected $inverseJoinColumns = []; + + /** + * @return array + */ + public function getJoinColumns() + { + return $this->joinColumns; + } + + /** + * @param string $name + * + * @return JoinColumnMetadata + */ + public function getJoinColumn(string $name) + { + return $this->joinColumns[$name]; + } + + /** + * @param string $name + * + * @return bool + */ + public function hasOption(string $name) + { + return isset($this->options[$name]); + } + + /** + * @param string $name + * @param mixed $value + */ + public function addOption(string $name, $value) + { + $this->options[$name] = $value; + } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/QuoteStrategy.php b/lib/Doctrine/ORM/Mapping/QuoteStrategy.php index bfdfd65a3c8..ff2687db432 100644 --- a/lib/Doctrine/ORM/Mapping/QuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/QuoteStrategy.php @@ -29,16 +29,6 @@ */ interface QuoteStrategy { - /** - * Gets the (possibly quoted) primary table name for safe use in an SQL statement. - * - * @param ClassMetadata $class - * @param AbstractPlatform $platform - * - * @return string - */ - public function getTableName(ClassMetadata $class, AbstractPlatform $platform); - /** * Gets the (possibly quoted) name of the join table. * diff --git a/lib/Doctrine/ORM/Mapping/TableMetadata.php b/lib/Doctrine/ORM/Mapping/TableMetadata.php index c0f36815ce8..6487bce7c12 100644 --- a/lib/Doctrine/ORM/Mapping/TableMetadata.php +++ b/lib/Doctrine/ORM/Mapping/TableMetadata.php @@ -22,6 +22,8 @@ namespace Doctrine\ORM\Mapping; +use Doctrine\DBAL\Platforms\AbstractPlatform; + class TableMetadata { /** @var string */ @@ -39,6 +41,22 @@ class TableMetadata /** @var array */ protected $uniqueConstraints = []; + /** + * @return string + */ + public function getSchema() + { + return $this->schema; + } + + /** + * @param string $schema + */ + public function setSchema(string $schema) + { + $this->schema = $schema; + } + /** * @param string $name */ @@ -56,19 +74,19 @@ public function getName() } /** + * @param AbstractPlatform $platform + * * @return string */ - public function getSchema() + public function getQuotedQualifiedName(AbstractPlatform $platform) { - return $this->schema; - } + if (!$this->schema) { + return $platform->quoteIdentifier($this->name); + } - /** - * @param string $schema - */ - public function setSchema(string $schema) - { - $this->schema = $schema; + $separator = ( ! $platform->supportsSchemas() && $platform->canEmulateSchemas()) ? '__' : '.'; + + return $platform->quoteIdentifier(sprintf('%s%s%s', $this->schema, $separator, $this->name)); } /** diff --git a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php index f471a8d2e26..18726f02867 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php @@ -148,7 +148,7 @@ public function count(PersistentCollection $collection) // /*if ($criteria && ($expression = $criteria->getWhereExpression()) !== null) { // A join is needed on the target entity - $targetTableName = $this->quoteStrategy->getTableName($targetClass, $this->platform); + $targetTableName = $targetClass->table->getQuotedQualifiedName($this->platform); $targetJoinSql = ' JOIN ' . $targetTableName . ' te' . ' ON' . implode(' AND ', $this->getOnConditionSQL($association)); @@ -267,7 +267,7 @@ public function loadCriteria(PersistentCollection $collection, Criteria $criteri $params[] = $value; } - $tableName = $this->quoteStrategy->getTableName($targetClass, $this->platform); + $tableName = $targetClass->table->getQuotedQualifiedName($this->platform); $joinTable = $this->quoteStrategy->getJoinTableName($mapping, $associationSourceClass, $this->platform); $rsm = new Query\ResultSetMappingBuilder($this->em); @@ -317,7 +317,7 @@ public function getFilterSql($mapping) } // A join is needed if there is filtering on the target entity - $tableName = $this->quoteStrategy->getTableName($rootClass, $this->platform); + $tableName = $rootClass->table->getQuotedQualifiedName($this->platform); $joinSql = ' JOIN ' . $tableName . ' te' . ' ON' . implode(' AND ', $this->getOnConditionSQL($mapping)); @@ -609,7 +609,7 @@ private function getJoinTableRestrictionsWithKey(PersistentCollection $collectio $joinConditions[] = ' t.' . $quotedColumnName . ' = ' . 'tr.' . $quotedReferencedColumnName; } - $tableName = $this->quoteStrategy->getTableName($targetClass, $this->platform); + $tableName = $targetClass->table->getQuotedQualifiedName($this->platform); $quotedJoinTable .= ' JOIN ' . $tableName . ' tr ON ' . implode(' AND ', $joinConditions); $columnName = $targetClass->getColumnName($indexBy); diff --git a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php index 99deee158e3..a214c59f4dd 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php @@ -217,8 +217,8 @@ private function deleteEntityCollection(PersistentCollection $collection) $parameters[] = $identifier[$sourceClass->getFieldForColumn($joinColumn->getReferencedColumnName())]; } - $statement = 'DELETE FROM ' . $this->quoteStrategy->getTableName($targetClass, $this->platform) - . ' WHERE ' . implode(' = ? AND ', $columns) . ' = ?'; + $tableName = $targetClass->table->getQuotedQualifiedName($this->platform); + $statement = 'DELETE FROM ' . $tableName . ' WHERE ' . implode(' = ? AND ', $columns) . ' = ?'; return $this->conn->executeUpdate($statement, $parameters); } @@ -279,8 +279,9 @@ private function deleteJoinedEntityCollection(PersistentCollection $collection) $classNames = array_merge($targetClass->parentClasses, [$targetClass->name], $targetClass->subClasses); foreach (array_reverse($classNames) as $className) { - $tableName = $this->quoteStrategy->getTableName($this->em->getClassMetadata($className), $this->platform); - $statement = 'DELETE FROM ' . $tableName . ' WHERE (' . $idColumnNameList . ')' + $parentClass = $this->em->getClassMetadata($className); + $tableName = $parentClass->table->getQuotedQualifiedName($this->platform); + $statement = 'DELETE FROM ' . $tableName . ' WHERE (' . $idColumnNameList . ')' . ' IN (SELECT ' . $idColumnNameList . ' FROM ' . $tempTable . ')'; $this->conn->executeUpdate($statement); diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 1e9568639ca..1fce8a4c953 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -327,7 +327,7 @@ protected function assignDefaultVersionValue($entity, array $id) protected function fetchVersionValue(FieldMetadata $versionProperty, array $id) { $versionedClass = $versionProperty->getDeclaringClass(); - $tableName = $this->quoteStrategy->getTableName($versionedClass, $this->platform); + $tableName = $versionedClass->table->getQuotedQualifiedName($this->platform); $columnName = $this->platform->quoteIdentifier($versionProperty->getColumnName()); $identifier = $this->quoteStrategy->getIdentifierColumnNames($versionedClass, $this->platform); @@ -374,7 +374,7 @@ public function update($entity) } $isVersioned = $this->class->isVersioned(); - $quotedTableName = $this->quoteStrategy->getTableName($this->class, $this->platform); + $quotedTableName = $this->class->table->getQuotedQualifiedName($this->platform); $this->updateTable($entity, $quotedTableName, $data, $isVersioned); @@ -551,7 +551,7 @@ public function delete($entity) $self = $this; $class = $this->class; $identifier = $this->em->getUnitOfWork()->getEntityIdentifier($entity); - $tableName = $this->quoteStrategy->getTableName($class, $this->platform); + $tableName = $class->table->getQuotedQualifiedName($this->platform); $idColumns = $this->quoteStrategy->getIdentifierColumnNames($class, $this->platform); $id = array_combine($idColumns, $identifier); $types = array_map(function ($identifier) use ($class, $self) { @@ -1077,7 +1077,7 @@ public function getSelectSQL($criteria, $assoc = null, $lockMode = null, $limit $columnList = $this->getSelectColumnsSQL(); $tableAlias = $this->getSQLTableAlias($this->class->getTableName()); $filterSql = $this->generateFilterConditionSQL($this->class, $tableAlias); - $tableName = $this->quoteStrategy->getTableName($this->class, $this->platform); + $tableName = $this->class->table->getQuotedQualifiedName($this->platform); if ('' !== $filterSql) { $conditionSql = $conditionSql @@ -1104,7 +1104,7 @@ public function getSelectSQL($criteria, $assoc = null, $lockMode = null, $limit */ public function getCountSQL($criteria = []) { - $tableName = $this->quoteStrategy->getTableName($this->class, $this->platform); + $tableName = $this->class->table->getQuotedQualifiedName($this->platform); $tableAlias = $this->getSQLTableAlias($this->class->getTableName()); $conditionSql = ($criteria instanceof Criteria) @@ -1263,7 +1263,7 @@ protected function getSelectColumnsSQL() } $joinTableAlias = $this->getSQLTableAlias($eagerEntity->getTableName(), $assocAlias); - $joinTableName = $this->quoteStrategy->getTableName($eagerEntity, $this->platform); + $joinTableName = $eagerEntity->table->getQuotedQualifiedName($this->platform); if ($assoc['isOwningSide']) { $this->currentPersisterContext->selectJoinSql .= ' ' . $this->getJoinSQLForJoinColumns($association['joinColumns']); @@ -1396,7 +1396,7 @@ public function getInsertSQL() } $columns = $this->getInsertColumnList(); - $tableName = $this->quoteStrategy->getTableName($this->class, $this->platform); + $tableName = $this->class->table->getQuotedQualifiedName($this->platform); if (empty($columns)) { $property = $this->class->getProperty($this->class->identifier[0]); @@ -1581,10 +1581,10 @@ public function lock(array $criteria, $lockMode) */ protected function getLockTablesSql($lockMode) { + $tableName = $this->class->table->getQuotedQualifiedName($this->platform); + return $this->platform->appendLockHint( - 'FROM ' - . $this->quoteStrategy->getTableName($this->class, $this->platform) . ' ' - . $this->getSQLTableAlias($this->class->getTableName()), + 'FROM ' . $tableName . ' ' . $this->getSQLTableAlias($this->class->getTableName()), $lockMode ); } diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index f13fb8629d7..486d670a9ce 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -73,7 +73,7 @@ public function getOwningTable($fieldName) } $tableName = $cm->getTableName(); - $quotedTableName = $this->quoteStrategy->getTableName($cm, $this->platform); + $quotedTableName = $cm->table->getQuotedQualifiedName($this->platform); $this->quotedTableMap[$tableName] = $quotedTableName; @@ -221,7 +221,7 @@ public function update($entity) $versionedTable = $versionedClass->getTableName(); if ( ! isset($updateData[$versionedTable])) { - $tableName = $this->quoteStrategy->getTableName($versionedClass, $this->platform); + $tableName = $versionedClass->table->getQuotedQualifiedName($this->platform); $this->updateTable($entity, $tableName, [], true); } @@ -246,19 +246,19 @@ public function delete($entity) // delete the row from the root table. Cascades do the rest. if ($this->platform->supportsForeignKeyConstraints()) { $rootClass = $this->em->getClassMetadata($this->class->rootEntityName); - $rootTable = $this->quoteStrategy->getTableName($rootClass, $this->platform); + $rootTable = $rootClass->table->getQuotedQualifiedName($this->platform); return (bool) $this->conn->delete($rootTable, $id); } // Delete from all tables individually, starting from this class' table up to the root table. - $rootTable = $this->quoteStrategy->getTableName($this->class, $this->platform); + $rootTable = $this->class->table->getQuotedQualifiedName($this->platform); $affectedRows = $this->conn->delete($rootTable, $id); foreach ($this->class->parentClasses as $parentClass) { $parentMetadata = $this->em->getClassMetadata($parentClass); - $parentTable = $this->quoteStrategy->getTableName($parentMetadata, $this->platform); + $parentTable = $parentMetadata->table->getQuotedQualifiedName($this->platform); $this->conn->delete($parentTable, $id); } @@ -320,7 +320,7 @@ public function getSelectSQL($criteria, $assoc = null, $lockMode = null, $limit break; } - $tableName = $this->quoteStrategy->getTableName($this->class, $this->platform); + $tableName = $this->class->table->getQuotedQualifiedName($this->platform); $from = ' FROM ' . $tableName . ' ' . $baseTableAlias; $where = $conditionSql != '' ? ' WHERE ' . $conditionSql : ''; $lock = $this->platform->appendLockHint($from, $lockMode); @@ -339,7 +339,7 @@ public function getSelectSQL($criteria, $assoc = null, $lockMode = null, $limit */ public function getCountSQL($criteria = []) { - $tableName = $this->quoteStrategy->getTableName($this->class, $this->platform); + $tableName = $this->class->table->getQuotedQualifiedName($this->platform); $baseTableAlias = $this->getSQLTableAlias($this->class->getTableName()); $joinSql = $this->getJoinSql($baseTableAlias); @@ -378,8 +378,9 @@ protected function getLockTablesSql($lockMode) foreach ($this->class->parentClasses as $parentClassName) { $conditions = []; $parentClass = $this->em->getClassMetadata($parentClassName); + $tableName = $parentClass->table->getQuotedQualifiedName($this->platform); $tableAlias = $this->getSQLTableAlias($parentClass->getTableName()); - $joinSql .= ' INNER JOIN ' . $this->quoteStrategy->getTableName($parentClass, $this->platform) . ' ' . $tableAlias . ' ON '; + $joinSql .= ' INNER JOIN ' . $tableName . ' ' . $tableAlias . ' ON '; foreach ($identifierColumns as $idColumn) { $quotedColumnName = $idColumn instanceof ColumnMetadata @@ -576,8 +577,9 @@ private function getJoinSql($baseTableAlias) foreach ($this->class->parentClasses as $parentClassName) { $conditions = []; $parentClass = $this->em->getClassMetadata($parentClassName); + $tableName = $parentClass->table->getQuotedQualifiedName($this->platform); $tableAlias = $this->getSQLTableAlias($parentClass->getTableName()); - $joinSql .= ' INNER JOIN ' . $this->quoteStrategy->getTableName($parentClass, $this->platform) . ' ' . $tableAlias . ' ON '; + $joinSql .= ' INNER JOIN ' . $tableName . ' ' . $tableAlias . ' ON '; foreach ($identifierColumns as $idColumn) { $quotedColumnName = $idColumn instanceof ColumnMetadata @@ -595,8 +597,9 @@ private function getJoinSql($baseTableAlias) foreach ($this->class->subClasses as $subClassName) { $conditions = []; $subClass = $this->em->getClassMetadata($subClassName); + $tableName = $subClass->table->getQuotedQualifiedName($this->platform); $tableAlias = $this->getSQLTableAlias($subClass->getTableName()); - $joinSql .= ' LEFT JOIN ' . $this->quoteStrategy->getTableName($subClass, $this->platform) . ' ' . $tableAlias . ' ON '; + $joinSql .= ' LEFT JOIN ' . $tableName . ' ' . $tableAlias . ' ON '; foreach ($identifierColumns as $idColumn) { $quotedColumnName = $idColumn instanceof ColumnMetadata diff --git a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php index 347de2f73ab..da04cd7ed72 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php @@ -58,25 +58,26 @@ public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) if ($assoc['type'] == \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY) { $targetClass = $sqlWalker->getEntityManager()->getClassMetadata($assoc['targetEntity']); + $targetTableName = $targetClass->table->getQuotedQualifiedName($platform); $targetTableAlias = $sqlWalker->getSQLTableAlias($targetClass->getTableName()); $sourceTableAlias = $sqlWalker->getSQLTableAlias($class->getTableName(), $dqlAlias); - $sql .= $quoteStrategy->getTableName($targetClass, $platform) . ' ' . $targetTableAlias . ' WHERE '; + $sql .= $targetTableName . ' ' . $targetTableAlias . ' WHERE '; $owningAssoc = $targetClass->associationMappings[$assoc['mappedBy']]; - - $first = true; + $first = true; foreach ($owningAssoc['targetToSourceKeyColumns'] as $targetColumn => $sourceColumn) { if ($first) $first = false; else $sql .= ' AND '; - $property = $class->getProperty($class->fieldNames[$targetColumn]); - $sourceColumnName = $platform->quoteIdentifier($property->getColumnName()); - $targetColumnName = $platform->quoteIdentifier($sourceColumn); + $property = $class->getProperty($class->fieldNames[$targetColumn]); - $sql .= $targetTableAlias . '.' . $targetColumnName - . ' = ' - . $sourceTableAlias . '.' . $sourceColumnName; + $sql .= sprintf('%s.%s = %s.%s', + $targetTableAlias, + $platform->quoteIdentifier($sourceColumn), + $sourceTableAlias, + $platform->quoteIdentifier($property->getColumnName()) + ); } } else { // many-to-many $targetClass = $sqlWalker->getEntityManager()->getClassMetadata($assoc['targetEntity']); diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php index ae166a58751..28edc19c2e6 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php @@ -94,10 +94,13 @@ public function __construct(AST\Node $AST, $sqlWalker) // 3. Create and store DELETE statements $classNames = array_merge($primaryClass->parentClasses, [$primaryClass->name], $primaryClass->subClasses); + foreach (array_reverse($classNames) as $className) { - $tableName = $quoteStrategy->getTableName($em->getClassMetadata($className), $platform); + $parentClass = $em->getClassMetadata($className); + $tableName = $parentClass->table->getQuotedQualifiedName($platform); + $this->_sqlStatements[] = 'DELETE FROM ' . $tableName - . ' WHERE (' . $idColumnNameList . ') IN (' . $idSubselect . ')'; + . ' WHERE (' . $idColumnNameList . ') IN (' . $idSubselect . ')'; } // 4. Store DDL for temporary identifier table. diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php index 7db07a59b1e..28c5683574b 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php @@ -104,9 +104,10 @@ public function __construct(AST\Node $AST, $sqlWalker) $i = -1; foreach (array_reverse($classNames) as $className) { - $affected = false; - $class = $em->getClassMetadata($className); - $updateSql = 'UPDATE ' . $quoteStrategy->getTableName($class, $platform) . ' SET '; + $affected = false; + $class = $em->getClassMetadata($className); + $tableName = $class->table->getQuotedQualifiedName($platform); + $updateSql = 'UPDATE ' . $tableName . ' SET '; foreach ($updateItems as $updateItem) { $field = $updateItem->pathExpression->field; diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 0fae60b879e..30572002395 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -348,11 +348,12 @@ private function _generateClassTableInheritanceJoins($class, $dqlAlias) // INNER JOIN parent class tables foreach ($class->parentClasses as $parentClassName) { $parentClass = $this->em->getClassMetadata($parentClassName); + $tableName = $parentClass->table->getQuotedQualifiedName($this->platform); $tableAlias = $this->getSQLTableAlias($parentClass->getTableName(), $dqlAlias); // If this is a joined association we must use left joins to preserve the correct result. $sql .= isset($this->queryComponents[$dqlAlias]['relation']) ? ' LEFT ' : ' INNER '; - $sql .= 'JOIN ' . $this->quoteStrategy->getTableName($parentClass, $this->platform) . ' ' . $tableAlias . ' ON '; + $sql .= 'JOIN ' . $tableName . ' ' . $tableAlias . ' ON '; $sqlParts = []; @@ -376,9 +377,10 @@ private function _generateClassTableInheritanceJoins($class, $dqlAlias) // LEFT JOIN child class tables foreach ($class->subClasses as $subClassName) { $subClass = $this->em->getClassMetadata($subClassName); + $tableName = $subClass->table->getQuotedQualifiedName($this->platform); $tableAlias = $this->getSQLTableAlias($subClass->getTableName(), $dqlAlias); - $sql .= ' LEFT JOIN ' . $this->quoteStrategy->getTableName($subClass, $this->platform) . ' ' . $tableAlias . ' ON '; + $sql .= ' LEFT JOIN ' . $tableName . ' ' . $tableAlias . ' ON '; $sqlParts = []; @@ -911,9 +913,11 @@ public function walkRangeVariableDeclaration($rangeVariableDeclaration) $this->rootAliases[] = $dqlAlias; } + $tableName = $class->table->getQuotedQualifiedName($this->platform); + $tableAlias = $this->getSQLTableAlias($class->getTableName(), $dqlAlias); + $sql = $this->platform->appendLockHint( - $this->quoteStrategy->getTableName($class, $this->platform) . ' ' . - $this->getSQLTableAlias($class->getTableName(), $dqlAlias), + $tableName . ' ' . $tableAlias, $this->query->getHint(Query::HINT_LOCK_MODE) ); @@ -946,7 +950,7 @@ public function walkJoinAssociationDeclaration($joinAssociationDeclaration, $joi $relation = $this->queryComponents[$joinedDqlAlias]['relation']; $targetClass = $this->em->getClassMetadata($relation['targetEntity']); $sourceClass = $this->em->getClassMetadata($relation['sourceEntity']); - $targetTableName = $this->quoteStrategy->getTableName($targetClass, $this->platform); + $targetTableName = $targetClass->table->getQuotedQualifiedName($this->platform); $targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName(), $joinedDqlAlias); $sourceTableAlias = $this->getSQLTableAlias($sourceClass->getTableName(), $associationPathExpression->identificationVariable); @@ -1723,9 +1727,10 @@ public function walkDeleteClause(AST\DeleteClause $deleteClause) { $class = $this->em->getClassMetadata($deleteClause->abstractSchemaName); $tableName = $class->getTableName(); - $sql = 'DELETE FROM ' . $this->quoteStrategy->getTableName($class, $this->platform); + $sql = 'DELETE FROM ' . $class->table->getQuotedQualifiedName($this->platform); $this->setSQLTableAlias($tableName, $tableName, $deleteClause->aliasIdentificationVariable); + $this->rootAliases[] = $deleteClause->aliasIdentificationVariable; return $sql; @@ -1738,7 +1743,7 @@ public function walkUpdateClause($updateClause) { $class = $this->em->getClassMetadata($updateClause->abstractSchemaName); $tableName = $class->getTableName(); - $sql = 'UPDATE ' . $this->quoteStrategy->getTableName($class, $this->platform); + $sql = 'UPDATE ' . $class->table->getQuotedQualifiedName($this->platform); $this->setSQLTableAlias($tableName, $tableName, $updateClause->aliasIdentificationVariable); $this->rootAliases[] = $updateClause->aliasIdentificationVariable; @@ -1921,10 +1926,11 @@ public function walkCollectionMemberExpression($collMemberExpr) if ($assoc['type'] == ClassMetadata::ONE_TO_MANY) { $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); + $targetTableName = $targetClass->table->getQuotedQualifiedName($this->platform); $targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName()); $sourceTableAlias = $this->getSQLTableAlias($class->getTableName(), $dqlAlias); - $sql .= $this->quoteStrategy->getTableName($targetClass, $this->platform) . ' ' . $targetTableAlias . ' WHERE '; + $sql .= $targetTableName . ' ' . $targetTableAlias . ' WHERE '; $owningAssoc = $targetClass->associationMappings[$assoc['mappedBy']]; $sqlParts = []; @@ -1959,13 +1965,14 @@ public function walkCollectionMemberExpression($collMemberExpr) $joinTable = $owningAssoc['joinTable']; // SQL table aliases + $joinTableName = $this->quoteStrategy->getJoinTableName($owningAssoc, $targetClass, $this->platform); $joinTableAlias = $this->getSQLTableAlias($joinTable['name']); + $targetTableName = $targetClass->table->getQuotedQualifiedName($this->platform); $targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName()); $sourceTableAlias = $this->getSQLTableAlias($class->getTableName(), $dqlAlias); // join to target table - $sql .= $this->quoteStrategy->getJoinTableName($owningAssoc, $targetClass, $this->platform) . ' ' . $joinTableAlias - . ' INNER JOIN ' . $this->quoteStrategy->getTableName($targetClass, $this->platform) . ' ' . $targetTableAlias . ' ON '; + $sql .= $joinTableName . ' ' . $joinTableAlias . ' INNER JOIN ' . $targetTableName . ' ' . $targetTableAlias . ' ON '; // join conditions $joinColumns = $assoc['isOwningSide'] ? $joinTable['inverseJoinColumns'] : $joinTable['joinColumns']; diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 60bd451f50a..0fb5c53c5b9 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -162,7 +162,7 @@ public function getSchemaFromMetadata(array $classes) continue; } - $table = $schema->createTable($this->quoteStrategy->getTableName($class, $this->platform)); + $table = $schema->createTable($class->table->getQuotedQualifiedName($this->platform)); if ($class->isInheritanceTypeSingleTable()) { $this->gatherColumns($class, $table); @@ -227,11 +227,10 @@ public function getSchemaFromMetadata(array $classes) if ( ! empty($inheritedKeyColumns)) { // Add a FK constraint on the ID column + $rootClass = $this->em->getClassMetadata($class->rootEntityName); + $table->addForeignKeyConstraint( - $this->quoteStrategy->getTableName( - $this->em->getClassMetadata($class->rootEntityName), - $this->platform - ), + $rootClass->table->getQuotedQualifiedName($this->platform), $inheritedKeyColumns, $inheritedKeyColumns, ['onDelete' => 'CASCADE'] @@ -648,7 +647,7 @@ private function gatherRelationJoinColumns( $localColumns = []; $foreignColumns = []; $fkOptions = []; - $foreignTableName = $this->quoteStrategy->getTableName($class, $this->platform); + $foreignTableName = $class->table->getQuotedQualifiedName($this->platform); $uniqueConstraints = []; foreach ($joinColumns as $joinColumn) { diff --git a/lib/Doctrine/ORM/Utility/PersisterHelper.php b/lib/Doctrine/ORM/Utility/PersisterHelper.php index c4d2238b760..cdc3230018a 100644 --- a/lib/Doctrine/ORM/Utility/PersisterHelper.php +++ b/lib/Doctrine/ORM/Utility/PersisterHelper.php @@ -60,16 +60,13 @@ public static function getTypeOfField($fieldName, ClassMetadata $class, EntityMa return self::getTypeOfField($assoc['mappedBy'], $em->getClassMetadata($assoc['targetEntity']), $em); } - if ($assoc['type'] & ClassMetadata::MANY_TO_MANY) { - $joinData = $assoc['joinTable']; - } else { - $joinData = $assoc; - } - $types = []; $targetClass = $em->getClassMetadata($assoc['targetEntity']); + $joinColumns = ($assoc['type'] & ClassMetadata::MANY_TO_MANY) + ? $assoc['joinTable']['joinColumns'] + : $assoc['joinColumns']; - foreach ($joinData['joinColumns'] as $joinColumn) { + foreach ($joinColumns as $joinColumn) { $types[] = self::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $em); } @@ -96,7 +93,8 @@ public static function getTypeOfColumn($columnName, ClassMetadata $class, Entity // iterate over association mappings foreach ($class->associationMappings as $assoc) { // resolve join columns over to-one or to-many - $joinColumns = (isset($assoc['joinTable']) && isset($assoc['joinTable']['joinColumns'])) + $targetClass = $em->getClassMetadata($assoc['targetEntity']); + $joinColumns = ($assoc['type'] & ClassMetadata::MANY_TO_MANY) ? $assoc['joinTable']['joinColumns'] : $assoc['joinColumns']; @@ -105,8 +103,6 @@ public static function getTypeOfColumn($columnName, ClassMetadata $class, Entity continue; } - $targetClass = $em->getClassMetadata($assoc['targetEntity']); - return self::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $em); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php index a34d6bb07e1..7e5fdf54365 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php @@ -38,7 +38,7 @@ public function testClassSchemaMappingsValidity($className, $expectedSchemaName, { $classMetadata = $this->_em->getClassMetadata($className); $platform = $this->_em->getConnection()->getDatabasePlatform(); - $quotedTableName = $this->_em->getConfiguration()->getQuoteStrategy()->getTableName($classMetadata, $platform); + $quotedTableName = $classMetadata->table->getQuotedQualifiedName($platform); // Check if table name and schema properties are defined in the class metadata self::assertEquals($expectedTableName, $classMetadata->table->getName()); From 70437f542240a58afb14a49c43ff9ad2c3210e52 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 8 Oct 2016 03:06:34 +0000 Subject: [PATCH 072/275] Implemented JoinTableMetadata --- .../Mapping/Builder/AssociationBuilder.php | 7 +- .../Builder/ManyToManyAssociationBuilder.php | 24 +++-- .../Builder/OneToManyAssociationBuilder.php | 3 + lib/Doctrine/ORM/Mapping/ClassMetadata.php | 25 +++-- .../ORM/Mapping/DefaultQuoteStrategy.php | 14 --- .../ORM/Mapping/Driver/AnnotationDriver.php | 51 ++++++---- .../ORM/Mapping/Driver/DatabaseDriver.php | 14 +-- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 49 +++++++--- .../ORM/Mapping/JoinTableMetadata.php | 31 +++--- lib/Doctrine/ORM/Mapping/NamingStrategy.php | 19 ++-- lib/Doctrine/ORM/Mapping/QuoteStrategy.php | 11 --- .../Collection/ManyToManyPersister.php | 79 +++++++-------- .../Entity/BasicEntityPersister.php | 44 ++++----- .../ORM/Query/AST/Functions/SizeFunction.php | 14 +-- lib/Doctrine/ORM/Query/SqlWalker.php | 25 +++-- lib/Doctrine/ORM/Tools/EntityGenerator.php | 12 +-- .../ORM/Tools/Export/Driver/PhpExporter.php | 36 ++++--- .../ORM/Tools/Export/Driver/XmlExporter.php | 8 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 12 +-- lib/Doctrine/ORM/Tools/SchemaValidator.php | 12 +-- lib/Doctrine/ORM/Utility/PersisterHelper.php | 4 +- .../Tests/Models/DDC964/DDC964Admin.php | 15 +-- .../Tests/Models/DDC964/DDC964User.php | 13 +-- .../ORM/Mapping/AbstractMappingDriverTest.php | 47 ++++----- .../ORM/Mapping/ClassMetadataFactoryTest.php | 10 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 97 +++++++------------ ...ctrine.Tests.Models.DDC964.DDC964Admin.php | 15 +-- ...octrine.Tests.Models.DDC964.DDC964User.php | 13 +-- .../php/Doctrine.Tests.ORM.Mapping.User.php | 15 +-- .../Tests/ORM/Tools/EntityGeneratorTest.php | 34 ++----- .../AbstractClassMetadataExporterTest.php | 10 +- .../Doctrine.Tests.ORM.Tools.Export.User.php | 19 ++-- 32 files changed, 379 insertions(+), 403 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php index fac05279278..df148d877bf 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php @@ -35,9 +35,9 @@ class AssociationBuilder protected $mapping; /** - * @var array|null + * @var array */ - protected $joinColumns; + protected $joinColumns = []; /** * @var int @@ -236,10 +236,13 @@ public function orphanRemoval() public function build() { $mapping = $this->mapping; + if ($this->joinColumns) { $mapping['joinColumns'] = $this->joinColumns; } + $cm = $this->builder->getClassMetadata(); + if ($this->type == ClassMetadata::MANY_TO_ONE) { $cm->mapManyToOne($mapping); } else if ($this->type == ClassMetadata::ONE_TO_ONE) { diff --git a/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php index ff350201186..afa0716b90c 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php @@ -19,6 +19,7 @@ namespace Doctrine\ORM\Mapping\Builder; use Doctrine\ORM\Mapping\JoinColumnMetadata; +use Doctrine\ORM\Mapping\JoinTableMetadata; /** * ManyToMany Association Builder @@ -91,18 +92,25 @@ public function addInverseJoinColumn($columnName, $referencedColumnName, $nullab */ public function build() { - $mapping = $this->mapping; - $mapping['joinTable'] = []; - if ($this->joinColumns) { - $mapping['joinTable']['joinColumns'] = $this->joinColumns; + $mapping = $this->mapping; + $joinTable = new JoinTableMetadata(); + + if ($this->joinTableName) { + $joinTable->setName($this->joinTableName); } - if ($this->inverseJoinColumns) { - $mapping['joinTable']['inverseJoinColumns'] = $this->inverseJoinColumns; + + foreach ($this->joinColumns as $joinColumn) { + $joinTable->addJoinColumn($joinColumn); } - if ($this->joinTableName) { - $mapping['joinTable']['name'] = $this->joinTableName; + + foreach ($this->inverseJoinColumns as $joinColumn) { + $joinTable->addInverseJoinColumn($joinColumn); } + + $mapping['joinTable'] = $joinTable; + $cm = $this->builder->getClassMetadata(); + $cm->mapManyToMany($mapping); return $this->builder; diff --git a/lib/Doctrine/ORM/Mapping/Builder/OneToManyAssociationBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/OneToManyAssociationBuilder.php index 347dfd04d89..ab95d41f4a9 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/OneToManyAssociationBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/OneToManyAssociationBuilder.php @@ -59,10 +59,13 @@ public function setIndexBy($fieldName) public function build() { $mapping = $this->mapping; + if ($this->joinColumns) { $mapping['joinColumns'] = $this->joinColumns; } + $cm = $this->builder->getClassMetadata(); + $cm->mapOneToMany($mapping); return $this->builder; diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 0cf6e1cb184..0ad5e17962a 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1471,14 +1471,19 @@ protected function validateAndCompleteManyToManyMapping(array $mapping) if ($mapping['isOwningSide']) { // owning side MUST have a join table - if ( ! isset($mapping['joinTable']['name'])) { - $mapping['joinTable']['name'] = $this->namingStrategy->joinTableName($mapping['sourceEntity'], $mapping['targetEntity'], $mapping['fieldName']); + if (! isset($mapping['joinTable'])) { + $mapping['joinTable'] = new JoinTableMetadata(); } - $selfReferencingEntityWithoutJoinColumns = $mapping['sourceEntity'] == $mapping['targetEntity'] - && (! (isset($mapping['joinTable']['joinColumns']) || isset($mapping['joinTable']['inverseJoinColumns']))); + if (empty($mapping['joinTable']->getName())) { + $joinTableName = $this->namingStrategy->joinTableName($mapping['sourceEntity'], $mapping['targetEntity'], $mapping['fieldName']); - if ( ! isset($mapping['joinTable']['joinColumns'])) { + $mapping['joinTable']->setName($joinTableName); + } + + $selfReferencingEntityWithoutJoinColumns = $mapping['sourceEntity'] == $mapping['targetEntity'] && ! $mapping['joinTable']->hasColumns(); + + if (! $mapping['joinTable']->getJoinColumns()) { $referencedColumnName = $this->namingStrategy->referenceColumnName(); $sourceReferenceName = $selfReferencingEntityWithoutJoinColumns ? 'source' : $referencedColumnName; $columnName = $this->namingStrategy->joinKeyColumnName($mapping['sourceEntity'], $sourceReferenceName); @@ -1488,10 +1493,10 @@ protected function validateAndCompleteManyToManyMapping(array $mapping) $joinColumn->setReferencedColumnName($referencedColumnName); $joinColumn->setOnDelete('CASCADE'); - $mapping['joinTable']['joinColumns'][] = $joinColumn; + $mapping['joinTable']->addJoinColumn($joinColumn); } - if ( ! isset($mapping['joinTable']['inverseJoinColumns'])) { + if (! $mapping['joinTable']->getInverseJoinColumns()) { $referencedColumnName = $this->namingStrategy->referenceColumnName(); $targetReferenceName = $selfReferencingEntityWithoutJoinColumns ? 'target' : $referencedColumnName; $columnName = $this->namingStrategy->joinKeyColumnName($mapping['targetEntity'], $targetReferenceName); @@ -1501,10 +1506,10 @@ protected function validateAndCompleteManyToManyMapping(array $mapping) $joinColumn->setReferencedColumnName($referencedColumnName); $joinColumn->setOnDelete('CASCADE'); - $mapping['joinTable']['inverseJoinColumns'][] = $joinColumn; + $mapping['joinTable']->addInverseJoinColumn($joinColumn); } - foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) { + foreach ($mapping['joinTable']->getJoinColumns() as $joinColumn) { if (! $joinColumn->getReferencedColumnName()) { $joinColumn->setReferencedColumnName($this->namingStrategy->referenceColumnName()); } @@ -1522,7 +1527,7 @@ protected function validateAndCompleteManyToManyMapping(array $mapping) $mapping['relationToSourceKeyColumns'][$columnName] = $referencedColumnName; } - foreach ($mapping['joinTable']['inverseJoinColumns'] as $inverseJoinColumn) { + foreach ($mapping['joinTable']->getInverseJoinColumns() as $inverseJoinColumn) { if (! $inverseJoinColumn->getReferencedColumnName()) { $inverseJoinColumn->setReferencedColumnName($this->namingStrategy->referenceColumnName()); } diff --git a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php index f88f51d03cb..b8f25d3e079 100644 --- a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php @@ -29,20 +29,6 @@ */ class DefaultQuoteStrategy implements QuoteStrategy { - /** - * {@inheritdoc} - */ - public function getJoinTableName(array $association, ClassMetadata $class, AbstractPlatform $platform) - { - $schema = ''; - - if (isset($association['joinTable']['schema'])) { - $schema = $association['joinTable']['schema'] . '.'; - } - - return $schema . $platform->quoteIdentifier($association['joinTable']['name']); - } - /** * {@inheritdoc} */ diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index f74eb6d7a10..54c42b62329 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -32,6 +32,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; +use Doctrine\ORM\Mapping\JoinTableMetadata; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Mapping\VersionFieldMetadata; @@ -424,20 +425,27 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat } if ($manyToManyAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\ManyToMany::class)) { - $joinTable = []; + $joinTable = new JoinTableMetadata(); if ($joinTableAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinTable::class)) { - $joinTable = [ - 'name' => $joinTableAnnot->name, - 'schema' => $joinTableAnnot->schema - ]; + if (! empty($joinTableAnnot->name)) { + $joinTable->setName($joinTableAnnot->name); + } - foreach ($joinTableAnnot->joinColumns as $joinColumn) { - $joinTable['joinColumns'][] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumn); + if (! empty($joinTableAnnot->schema)) { + $joinTable->setSchema($joinTableAnnot->schema); } - foreach ($joinTableAnnot->inverseJoinColumns as $joinColumn) { - $joinTable['inverseJoinColumns'][] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumn); + foreach ($joinTableAnnot->joinColumns as $joinColumnAnnot) { + $joinColumn = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); + + $joinTable->addJoinColumn($joinColumn); + } + + foreach ($joinTableAnnot->inverseJoinColumns as $joinColumnAnnot) { + $joinColumn = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); + + $joinTable->addInverseJoinColumn($joinColumn); } } @@ -491,17 +499,26 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat // Check for JoinTable annotations if ($associationOverride->joinTable) { $joinTableAnnot = $associationOverride->joinTable; - $joinTable = [ - 'name' => $joinTableAnnot->name, - 'schema' => $joinTableAnnot->schema - ]; + $joinTable = new JoinTableMetadata(); - foreach ($joinTableAnnot->joinColumns as $joinColumn) { - $joinTable['joinColumns'][] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumn); + if (!empty($joinTableAnnot->name)) { + $joinTable->setName($joinTableAnnot->name); } - foreach ($joinTableAnnot->inverseJoinColumns as $joinColumn) { - $joinTable['inverseJoinColumns'][] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumn); + if (!empty($joinTableAnnot->schema)) { + $joinTable->setSchema($joinTableAnnot->schema); + } + + foreach ($joinTableAnnot->joinColumns as $joinColumnAnnot) { + $joinColumn = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); + + $joinTable->addJoinColumn($joinColumn); + } + + foreach ($joinTableAnnot->inverseJoinColumns as $joinColumnAnnot) { + $joinColumn = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); + + $joinTable->addInverseJoinColumn($joinColumn); } $override['joinTable'] = $joinTable; diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index 1a7124ae1f2..6f6e8f27b6d 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -32,6 +32,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; +use Doctrine\ORM\Mapping\JoinTableMetadata; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Mapping\TableMetadata; @@ -223,11 +224,10 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat if (current($manyTable->getColumns())->getName() === $localColumn) { $associationMapping['inversedBy'] = $this->getFieldNameForColumn($manyTable->getName(), current($myFk->getColumns()), true); - $associationMapping['joinTable'] = [ - 'name' => strtolower($manyTable->getName()), - 'joinColumns' => [], - 'inverseJoinColumns' => [], - ]; + $associationMapping['joinTable'] = new JoinTableMetadata(); + + $joinTable = $associationMapping['joinTable']; + $joinTable->setName(strtolower($manyTable->getName())); $fkCols = $myFk->getForeignColumns(); $cols = $myFk->getColumns(); @@ -238,7 +238,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $joinColumn->setColumnName($cols[$i]); $joinColumn->setReferencedColumnName($fkCols[$i]); - $associationMapping['joinTable']['joinColumns'][] = $joinColumn; + $joinTable->addJoinColumn($joinColumn); } $fkCols = $otherFk->getForeignColumns(); @@ -250,7 +250,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $joinColumn->setColumnName($cols[$i]); $joinColumn->setReferencedColumnName($fkCols[$i]); - $associationMapping['joinTable']['inverseJoinColumns'][] = $joinColumn; + $joinTable->addInverseJoinColumn($joinColumn); } } else { $associationMapping['mappedBy'] = $this->getFieldNameForColumn($manyTable->getName(), current($myFk->getColumns()), true); diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index d1ca9294094..6ab56df78c3 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -23,10 +23,10 @@ use Doctrine\Common\Persistence\Mapping\Driver\FileDriver; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; -use Doctrine\ORM\Mapping\Builder\TableMetadataBuilder; use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; +use Doctrine\ORM\Mapping\JoinTableMetadata; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Mapping\VersionFieldMetadata; use SimpleXMLElement; @@ -521,20 +521,30 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } $joinTableElement = $manyToManyElement->{'join-table'}; - $joinTable = [ - 'name' => (string) $joinTableElement['name'] - ]; + $joinTable = new JoinTableMetadata(); + + if (isset($joinTableElement['name'])) { + $joinTable->setName((string) $joinTableElement['name']); + } if (isset($joinTableElement['schema'])) { - $joinTable['schema'] = (string) $joinTableElement['schema']; + $joinTable->setSchema((string) $joinTableElement['schema']); } - foreach ($joinTableElement->{'join-columns'}->{'join-column'} as $joinColumnElement) { - $joinTable['joinColumns'][] = $this->convertJoinColumnElementToJoinColumnMetadata($joinColumnElement); + if (isset($joinTableElement->{'join-columns'})) { + foreach ($joinTableElement->{'join-columns'}->{'join-column'} as $joinColumnElement) { + $joinColumn = $this->convertJoinColumnElementToJoinColumnMetadata($joinColumnElement); + + $joinTable->addJoinColumn($joinColumn); + } } - foreach ($joinTableElement->{'inverse-join-columns'}->{'join-column'} as $joinColumnElement) { - $joinTable['inverseJoinColumns'][] = $this->convertJoinColumnElementToJoinColumnMetadata($joinColumnElement); + if (isset($joinTableElement->{'inverse-join-columns'})) { + foreach ($joinTableElement->{'inverse-join-columns'}->{'join-column'} as $joinColumnElement) { + $joinColumn = $this->convertJoinColumnElementToJoinColumnMetadata($joinColumnElement); + + $joinTable->addInverseJoinColumn($joinColumn); + } } $mapping['joinTable'] = $joinTable; @@ -601,23 +611,30 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Check for join-table if ($overrideElement->{'join-table'}) { - $joinTable = null; $joinTableElement = $overrideElement->{'join-table'}; + $joinTable = new JoinTableMetadata(); + + if (isset($joinTableElement['name'])) { + $joinTable->setName((string) $joinTableElement['name']); + } - $joinTable = [ - 'name' => (string) $joinTableElement['name'], - 'schema' => (string) $joinTableElement['schema'] - ]; + if (isset($joinTableElement['schema'])) { + $joinTable->setSchema((string) $joinTableElement['schema']); + } if (isset($joinTableElement->{'join-columns'})) { foreach ($joinTableElement->{'join-columns'}->{'join-column'} as $joinColumnElement) { - $joinTable['joinColumns'][] = $this->convertJoinColumnElementToJoinColumnMetadata($joinColumnElement); + $joinColumn = $this->convertJoinColumnElementToJoinColumnMetadata($joinColumnElement); + + $joinTable->addJoinColumn($joinColumn); } } if (isset($joinTableElement->{'inverse-join-columns'})) { foreach ($joinTableElement->{'inverse-join-columns'}->{'join-column'} as $joinColumnElement) { - $joinTable['inverseJoinColumns'][] = $this->convertJoinColumnElementToJoinColumnMetadata($joinColumnElement); + $joinColumn = $this->convertJoinColumnElementToJoinColumnMetadata($joinColumnElement); + + $joinTable->addInverseJoinColumn($joinColumn); } } diff --git a/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php b/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php index 49f9dac1b3c..46e78174481 100644 --- a/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php +++ b/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php @@ -30,6 +30,14 @@ class JoinTableMetadata extends TableMetadata /** @var array */ protected $inverseJoinColumns = []; + /** + * @return bool + */ + public function hasColumns() + { + return $this->joinColumns || $this->inverseJoinColumns; + } + /** * @return array */ @@ -39,31 +47,26 @@ public function getJoinColumns() } /** - * @param string $name - * - * @return JoinColumnMetadata + * @param JoinColumnMetadata $joinColumn */ - public function getJoinColumn(string $name) + public function addJoinColumn(JoinColumnMetadata $joinColumn) { - return $this->joinColumns[$name]; + $this->joinColumns[] = $joinColumn; } /** - * @param string $name - * - * @return bool + * @return array */ - public function hasOption(string $name) + public function getInverseJoinColumns() { - return isset($this->options[$name]); + return $this->inverseJoinColumns; } /** - * @param string $name - * @param mixed $value + * @param JoinColumnMetadata $joinColumn */ - public function addOption(string $name, $value) + public function addInverseJoinColumn(JoinColumnMetadata $joinColumn) { - $this->options[$name] = $value; + $this->inverseJoinColumns[] = $joinColumn; } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/NamingStrategy.php b/lib/Doctrine/ORM/Mapping/NamingStrategy.php index 9960f949f16..a70eee86695 100644 --- a/lib/Doctrine/ORM/Mapping/NamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/NamingStrategy.php @@ -23,7 +23,7 @@ /** * A set of rules for determining the physical column and table names * - * + * * @link www.doctrine-project.org * @since 2.3 * @author Fabio B. Silva @@ -37,7 +37,7 @@ interface NamingStrategy * * @return string A table name. */ - function classToTableName($className); + public function classToTableName($className); /** * Returns a column name for a property. @@ -47,7 +47,7 @@ function classToTableName($className); * * @return string A column name. */ - function propertyToColumnName($propertyName, $className = null); + public function propertyToColumnName($propertyName, $className = null); /** * Returns a column name for an embedded property. @@ -59,23 +59,24 @@ function propertyToColumnName($propertyName, $className = null); * * @return string */ - function embeddedFieldToColumnName($propertyName, $embeddedColumnName, $className = null, $embeddedClassName = null); + public function embeddedFieldToColumnName($propertyName, $embeddedColumnName, $className = null, $embeddedClassName = null); /** * Returns the default reference column name. * * @return string A column name. */ - function referenceColumnName(); + public function referenceColumnName(); /** * Returns a join column name for a property. * - * @param string $propertyName A property name. + * @param string $propertyName A property name. + * @param string|null $className The fully-qualified class name. * * @return string A join column name. */ - function joinColumnName($propertyName); + public function joinColumnName($propertyName, $className = null); /** * Returns a join table name. @@ -86,7 +87,7 @@ function joinColumnName($propertyName); * * @return string A join table name. */ - function joinTableName($sourceEntity, $targetEntity, $propertyName = null); + public function joinTableName($sourceEntity, $targetEntity, $propertyName = null); /** * Returns the foreign key column name for the given parameters. @@ -96,5 +97,5 @@ function joinTableName($sourceEntity, $targetEntity, $propertyName = null); * * @return string A join column name. */ - function joinKeyColumnName($entityName, $referencedColumnName = null); + public function joinKeyColumnName($entityName, $referencedColumnName = null); } diff --git a/lib/Doctrine/ORM/Mapping/QuoteStrategy.php b/lib/Doctrine/ORM/Mapping/QuoteStrategy.php index ff2687db432..654b82ba72a 100644 --- a/lib/Doctrine/ORM/Mapping/QuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/QuoteStrategy.php @@ -29,17 +29,6 @@ */ interface QuoteStrategy { - /** - * Gets the (possibly quoted) name of the join table. - * - * @param array $association - * @param ClassMetadata $class - * @param AbstractPlatform $platform - * - * @return string - */ - public function getJoinTableName(array $association, ClassMetadata $class, AbstractPlatform $platform); - /** * Gets the (possibly quoted) identifier column names for safe use in an SQL statement. * diff --git a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php index 18726f02867..ee4b5152953 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Persisters\Collection; use Doctrine\Common\Collections\Criteria; +use Doctrine\Common\Util\Debug; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Persisters\SqlValueVisitor; use Doctrine\ORM\PersistentCollection; @@ -50,7 +51,7 @@ public function delete(PersistentCollection $collection) $types = []; $class = $this->em->getClassMetadata($mapping['sourceEntity']); - foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) { + foreach ($mapping['joinTable']->getJoinColumns() as $joinColumn) { $types[] = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $class, $this->em); } @@ -123,10 +124,9 @@ public function count(PersistentCollection $collection) ? $targetClass->associationMappings[$mapping['mappedBy']] : $mapping; - $joinTableName = $this->quoteStrategy->getJoinTableName($association, $sourceClass, $this->platform); - $joinColumns = ( ! $mapping['isOwningSide']) - ? $association['joinTable']['inverseJoinColumns'] - : $association['joinTable']['joinColumns']; + $joinTable = $association['joinTable']; + $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); + $joinColumns = ( ! $mapping['isOwningSide']) ? $joinTable->getInverseJoinColumns() : $joinTable->getJoinColumns(); foreach ($joinColumns as $joinColumn) { $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); @@ -267,20 +267,19 @@ public function loadCriteria(PersistentCollection $collection, Criteria $criteri $params[] = $value; } - $tableName = $targetClass->table->getQuotedQualifiedName($this->platform); - $joinTable = $this->quoteStrategy->getJoinTableName($mapping, $associationSourceClass, $this->platform); + $tableName = $targetClass->table->getQuotedQualifiedName($this->platform); + $joinTableName = $mapping['joinTable']->getQuotedQualifiedName($this->platform); $rsm = new Query\ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata($targetClass->name, 'te'); $sql = 'SELECT ' . $rsm->generateSelectClause() . ' FROM ' . $tableName . ' te' - . ' JOIN ' . $joinTable . ' t ON' + . ' JOIN ' . $joinTableName . ' t ON' . implode(' AND ', $onConditions) . ' WHERE ' . implode(' AND ', $whereClauses); $sql .= $this->getOrderingSql($criteria, $targetClass); - $sql .= $this->getLimitSql($criteria); $stmt = $this->conn->executeQuery($sql, $params); @@ -362,8 +361,8 @@ protected function getOnConditionSQL($mapping) : $mapping; $joinColumns = $mapping['isOwningSide'] - ? $association['joinTable']['inverseJoinColumns'] - : $association['joinTable']['joinColumns']; + ? $association['joinTable']->getInverseJoinColumns() + : $association['joinTable']->getJoinColumns(); $conditions = []; @@ -384,17 +383,16 @@ protected function getOnConditionSQL($mapping) */ protected function getDeleteSQL(PersistentCollection $collection) { - $columns = []; - $mapping = $collection->getMapping(); - $class = $this->em->getClassMetadata(get_class($collection->getOwner())); - $joinTable = $this->quoteStrategy->getJoinTableName($mapping, $class, $this->platform); + $mapping = $collection->getMapping(); + $joinTable = $mapping['joinTable']; + $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); + $columns = []; - foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) { + foreach ($mapping['joinTable']->getJoinColumns() as $joinColumn) { $columns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); } - return 'DELETE FROM ' . $joinTable - . ' WHERE ' . implode(' = ? AND ', $columns) . ' = ?'; + return 'DELETE FROM ' . $joinTableName . ' WHERE ' . implode(' = ? AND ', $columns) . ' = ?'; } /** @@ -440,20 +438,21 @@ protected function getDeleteRowSQL(PersistentCollection $collection) $columns = []; $types = []; - foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) { + $joinTable = $mapping['joinTable']; + $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); + + foreach ($joinTable->getJoinColumns() as $joinColumn) { $columns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $types[] = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $class, $this->em); } - foreach ($mapping['joinTable']['inverseJoinColumns'] as $joinColumn) { + foreach ($joinTable->getInverseJoinColumns() as $joinColumn) { $columns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $types[] = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); } - $quotedJoinTableName = $this->quoteStrategy->getJoinTableName($mapping, $class, $this->platform); - return [ - 'DELETE FROM ' . $quotedJoinTableName . ' WHERE ' . implode(' = ? AND ', $columns) . ' = ?', + 'DELETE FROM ' . $joinTableName . ' WHERE ' . implode(' = ? AND ', $columns) . ' = ?', $types, ]; } @@ -490,22 +489,24 @@ protected function getInsertRowSQL(PersistentCollection $collection) $columns = []; $types = []; - foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) { + $joinTable = $mapping['joinTable']; + $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); + + foreach ($joinTable->getJoinColumns() as $joinColumn) { $columns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $types[] = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $class, $this->em); } - foreach ($mapping['joinTable']['inverseJoinColumns'] as $joinColumn) { + foreach ($joinTable->getInverseJoinColumns() as $joinColumn) { $columns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $types[] = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); } - $quotedJoinTableName = $this->quoteStrategy->getJoinTableName($mapping, $class, $this->platform); $columnNamesAsString = implode(', ', $columns); $columnValuesAsString = implode(', ', array_fill(0, count($columns), '?')); return [ - sprintf('INSERT INTO %s (%s) VALUES (%s)', $quotedJoinTableName, $columnNamesAsString, $columnValuesAsString), + sprintf('INSERT INTO %s (%s) VALUES (%s)', $joinTableName, $columnNamesAsString, $columnValuesAsString), $types, ]; } @@ -544,13 +545,13 @@ private function collectJoinTableColumnParameters(PersistentCollection $collecti $owningIdentifier = $this->uow->getEntityIdentifier($collection->getOwner()); $targetIdentifier = $this->uow->getEntityIdentifier($element); - foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) { + foreach ($mapping['joinTable']->getJoinColumns() as $joinColumn) { $fieldName = $owningClass->getFieldForColumn($joinColumn->getReferencedColumnName()); $params[] = $owningIdentifier[$fieldName]; } - foreach ($mapping['joinTable']['inverseJoinColumns'] as $joinColumn) { + foreach ($mapping['joinTable']->getInverseJoinColumns() as $joinColumn) { $fieldName = $targetClass->getFieldForColumn($joinColumn->getReferencedColumnName()); $params[] = $targetIdentifier[$fieldName]; @@ -582,22 +583,22 @@ private function getJoinTableRestrictionsWithKey(PersistentCollection $collectio if (! $mapping['isOwningSide']) { $associationSourceClass = $this->em->getClassMetadata($mapping['targetEntity']); $mapping = $associationSourceClass->associationMappings[$mapping['mappedBy']]; - $joinColumns = $mapping['joinTable']['joinColumns']; + $joinColumns = $mapping['joinTable']->getJoinColumns(); $sourceRelationMode = 'relationToTargetKeyColumns'; $targetRelationMode = 'relationToSourceKeyColumns'; } else { - $associationSourceClass = $this->em->getClassMetadata($mapping['sourceEntity']); - $joinColumns = $mapping['joinTable']['inverseJoinColumns']; + $joinColumns = $mapping['joinTable']->getInverseJoinColumns(); $sourceRelationMode = 'relationToSourceKeyColumns'; $targetRelationMode = 'relationToTargetKeyColumns'; } - $quotedJoinTable = $this->quoteStrategy->getJoinTableName($mapping, $associationSourceClass, $this->platform). ' t'; + $joinTable = $mapping['joinTable']; + $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); + $quotedJoinTable = $joinTableName . ' t'; $whereClauses = []; $params = []; $types = []; - - $joinNeeded = ! in_array($indexBy, $targetClass->identifier); + $joinNeeded = ! in_array($indexBy, $targetClass->identifier); if ($joinNeeded) { // extra join needed if indexBy is not a @id $joinConditions = []; @@ -674,12 +675,14 @@ private function getJoinTableRestrictions(PersistentCollection $collection, $ele $targetId = $this->uow->getEntityIdentifier($element); } - $quotedJoinTable = $this->quoteStrategy->getJoinTableName($mapping, $sourceClass, $this->platform); + $joinTable = $mapping['joinTable']; + $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); + $quotedJoinTable = $joinTableName; $whereClauses = []; $params = []; $types = []; - foreach ($mapping['joinTable']['joinColumns'] as $joinColumn) { + foreach ($joinTable->getJoinColumns() as $joinColumn) { $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $referencedColumnName = $joinColumn->getReferencedColumnName(); @@ -688,7 +691,7 @@ private function getJoinTableRestrictions(PersistentCollection $collection, $ele $types[] = PersisterHelper::getTypeOfColumn($referencedColumnName, $sourceClass, $this->em); } - foreach ($mapping['joinTable']['inverseJoinColumns'] as $joinColumn) { + foreach ($joinTable->getInverseJoinColumns() as $joinColumn) { $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $referencedColumnName = $joinColumn->getReferencedColumnName(); diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 1fce8a4c953..f6e4067290b 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -500,15 +500,13 @@ protected function deleteJoinTableRecords($identifier) $association = $class->associationMappings[$mapping['mappedBy']]; } - $joinColumns = $mapping['isOwningSide'] - ? $association['joinTable']['joinColumns'] - : $association['joinTable']['inverseJoinColumns']; + $joinTable = $association['joinTable']; + $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); + $joinColumns = $mapping['isOwningSide'] ? $joinTable->getJoinColumns() : $joinTable->getInverseJoinColumns(); if ($selfReferential) { - $otherColumns = (! $mapping['isOwningSide']) - ? $association['joinTable']['joinColumns'] - : $association['joinTable']['inverseJoinColumns']; + $otherColumns = (! $mapping['isOwningSide']) ? $joinTable->getJoinColumns() : $joinTable->getInverseJoinColumns(); } $isOnDeleteCascade = false; @@ -533,12 +531,10 @@ protected function deleteJoinTableRecords($identifier) continue; } - $quotedJoinTableName = $this->quoteStrategy->getJoinTableName($association, $this->class, $this->platform); - - $this->conn->delete($quotedJoinTableName, array_combine($keys, $identifier)); + $this->conn->delete($joinTableName, array_combine($keys, $identifier)); if ($selfReferential) { - $this->conn->delete($quotedJoinTableName, array_combine($otherKeys, $identifier)); + $this->conn->delete($joinTableName, array_combine($otherKeys, $identifier)); } } } @@ -985,11 +981,9 @@ private function getManyToManyStatement(array $assoc, $sourceEntity, $offset = n $association = $class->associationMappings[$assoc['mappedBy']]; } - $joinColumns = $assoc['isOwningSide'] - ? $association['joinTable']['joinColumns'] - : $association['joinTable']['inverseJoinColumns']; - - $quotedJoinTable = $this->quoteStrategy->getJoinTableName($association, $class, $this->platform); + $joinTable = $association['joinTable']; + $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); + $joinColumns = $assoc['isOwningSide'] ? $joinTable->getJoinColumns() : $joinTable->getInverseJoinColumns(); foreach ($joinColumns as $joinColumn) { $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); @@ -1021,7 +1015,7 @@ private function getManyToManyStatement(array $assoc, $sourceEntity, $offset = n ); } - $criteria[$quotedJoinTable . '.' . $quotedColumnName] = $value; + $criteria[$joinTableName . '.' . $quotedColumnName] = $value; $parameters[] = [ 'value' => $value, @@ -1368,10 +1362,9 @@ protected function getSelectManyToManyJoinSQL(array $manyToMany) $association = $targetEntity->associationMappings[$manyToMany['mappedBy']]; } - $joinTableName = $this->quoteStrategy->getJoinTableName($association, $this->class, $this->platform); - $joinColumns = ($manyToMany['isOwningSide']) - ? $association['joinTable']['inverseJoinColumns'] - : $association['joinTable']['joinColumns']; + $joinTable = $association['joinTable']; + $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); + $joinColumns = $manyToMany['isOwningSide'] ? $joinTable->getInverseJoinColumns() : $joinTable->getJoinColumns(); foreach ($joinColumns as $joinColumn) { $conditions[] = sprintf( @@ -1698,6 +1691,7 @@ private function getSelectConditionStatementColumnSQL($field, $assoc = null) if (isset($this->class->associationMappings[$field])) { $association = $this->class->associationMappings[$field]; + // Many-To-Many requires join table check for joinColumn $columns = []; $class = $this->class; @@ -1707,16 +1701,14 @@ private function getSelectConditionStatementColumnSQL($field, $assoc = null) $association = $assoc; } - $quotedJoinTableName = $this->quoteStrategy->getJoinTableName($association, $class, $this->platform); - $joinColumns = $assoc['isOwningSide'] - ? $association['joinTable']['joinColumns'] - : $association['joinTable']['inverseJoinColumns']; - + $joinTable = $association['joinTable']; + $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); + $joinColumns = $assoc['isOwningSide'] ? $joinTable->getJoinColumns() : $joinTable->getInverseJoinColumns(); foreach ($joinColumns as $joinColumn) { $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); - $columns[] = $quotedJoinTableName . '.' . $quotedColumnName; + $columns[] = $joinTableName . '.' . $quotedColumnName; } } else { diff --git a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php index da04cd7ed72..f30fd4b1b58 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php @@ -82,11 +82,12 @@ public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) } else { // many-to-many $targetClass = $sqlWalker->getEntityManager()->getClassMetadata($assoc['targetEntity']); - $owningAssoc = $assoc['isOwningSide'] ? $assoc : $targetClass->associationMappings[$assoc['mappedBy']]; - $joinTable = $owningAssoc['joinTable']; + $owningAssoc = $assoc['isOwningSide'] ? $assoc : $targetClass->associationMappings[$assoc['mappedBy']]; + $joinTable = $owningAssoc['joinTable']; + $joinTableName = $joinTable->getQuotedQualifiedName($platform); // SQL table aliases - $joinTableAlias = $sqlWalker->getSQLTableAlias($joinTable['name']); + $joinTableAlias = $sqlWalker->getSQLTableAlias($joinTable->getName()); $sourceTableAlias = $sqlWalker->getSQLTableAlias($class->getTableName(), $dqlAlias); // Quote in case source table alias matches class table name (happens in an UPDATE statement) @@ -95,11 +96,12 @@ public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) } // join to target table - $sql .= $quoteStrategy->getJoinTableName($owningAssoc, $targetClass, $platform) . ' ' . $joinTableAlias . ' WHERE '; + $sql .= $joinTableName . ' ' . $joinTableAlias . ' WHERE '; $joinColumns = $assoc['isOwningSide'] - ? $joinTable['joinColumns'] - : $joinTable['inverseJoinColumns']; + ? $joinTable->getJoinColumns() + : $joinTable->getInverseJoinColumns() + ; $first = true; diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 30572002395..92c9e6c9bdf 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -1009,11 +1009,14 @@ public function walkJoinAssociationDeclaration($joinAssociationDeclaration, $joi case ($assoc['type'] === ClassMetadata::MANY_TO_MANY): // Join relation table $joinTable = $assoc['joinTable']; - $joinTableAlias = $this->getSQLTableAlias($joinTable['name'], $joinedDqlAlias); - $joinTableName = $this->quoteStrategy->getJoinTableName($assoc, $sourceClass, $this->platform); + $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); + $joinTableAlias = $this->getSQLTableAlias($joinTable->getName(), $joinedDqlAlias); $conditions = []; - $joinColumns = ($relation['isOwningSide']) ? $joinTable['joinColumns'] : $joinTable['inverseJoinColumns']; + $joinColumns = ($relation['isOwningSide']) + ? $joinTable->getJoinColumns() + : $joinTable->getInverseJoinColumns() + ; foreach ($joinColumns as $joinColumn) { $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); @@ -1034,7 +1037,10 @@ public function walkJoinAssociationDeclaration($joinAssociationDeclaration, $joi $sql .= ($joinType == AST\Join::JOIN_TYPE_LEFT || $joinType == AST\Join::JOIN_TYPE_LEFTOUTER) ? ' LEFT JOIN ' : ' INNER JOIN '; $conditions = []; - $joinColumns = ($relation['isOwningSide']) ? $joinTable['inverseJoinColumns'] : $joinTable['joinColumns']; + $joinColumns = ($relation['isOwningSide']) + ? $joinTable->getInverseJoinColumns() + : $joinTable->getJoinColumns() + ; foreach ($joinColumns as $joinColumn) { $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); @@ -1960,13 +1966,12 @@ public function walkCollectionMemberExpression($collMemberExpr) $sql .= implode(' AND ', $sqlParts); } else { // many-to-many $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); - $owningAssoc = $assoc['isOwningSide'] ? $assoc : $targetClass->associationMappings[$assoc['mappedBy']]; - $joinTable = $owningAssoc['joinTable']; + $joinTable = $owningAssoc['joinTable']; // SQL table aliases - $joinTableName = $this->quoteStrategy->getJoinTableName($owningAssoc, $targetClass, $this->platform); - $joinTableAlias = $this->getSQLTableAlias($joinTable['name']); + $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); + $joinTableAlias = $this->getSQLTableAlias($joinTable->getName()); $targetTableName = $targetClass->table->getQuotedQualifiedName($this->platform); $targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName()); $sourceTableAlias = $this->getSQLTableAlias($class->getTableName(), $dqlAlias); @@ -1975,7 +1980,7 @@ public function walkCollectionMemberExpression($collMemberExpr) $sql .= $joinTableName . ' ' . $joinTableAlias . ' INNER JOIN ' . $targetTableName . ' ' . $targetTableAlias . ' ON '; // join conditions - $joinColumns = $assoc['isOwningSide'] ? $joinTable['inverseJoinColumns'] : $joinTable['joinColumns']; + $joinColumns = $assoc['isOwningSide'] ? $joinTable->getInverseJoinColumns() : $joinTable->getJoinColumns(); $joinSqlParts = []; foreach ($joinColumns as $joinColumn) { @@ -1994,7 +1999,7 @@ public function walkCollectionMemberExpression($collMemberExpr) $sql .= implode(' AND ', $joinSqlParts); $sql .= ' WHERE '; - $joinColumns = $assoc['isOwningSide'] ? $joinTable['joinColumns'] : $joinTable['inverseJoinColumns']; + $joinColumns = $assoc['isOwningSide'] ? $joinTable->getJoinColumns() : $joinTable->getInverseJoinColumns(); $sqlParts = []; foreach ($joinColumns as $joinColumn) { diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index d0688de4b96..3533e30eca8 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -1575,12 +1575,12 @@ protected function generateAssociationMappingPropertyDocBlock(array $association $lines[] = $this->spaces . ' * })'; } - if (isset($associationMapping['joinTable']) && $associationMapping['joinTable']) { + if (isset($associationMapping['joinTable'])) { $joinTable = []; - $joinTable[] = 'name="' . $associationMapping['joinTable']['name'] . '"'; + $joinTable[] = 'name="' . $associationMapping['joinTable']->getName() . '"'; - if (isset($associationMapping['joinTable']['schema'])) { - $joinTable[] = 'schema="' . $associationMapping['joinTable']['schema'] . '"'; + if (!empty($associationMapping['joinTable']->getSchema())) { + $joinTable[] = 'schema="' . $associationMapping['joinTable']->getSchema() . '"'; } $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'JoinTable(' . implode(', ', $joinTable) . ','; @@ -1588,7 +1588,7 @@ protected function generateAssociationMappingPropertyDocBlock(array $association $joinColumnsLines = []; - foreach ($associationMapping['joinTable']['joinColumns'] as $joinColumn) { + foreach ($associationMapping['joinTable']->getJoinColumns() as $joinColumn) { $joinColumnsLines[] = $this->spaces . ' * ' . $this->generateJoinColumnAnnotation($joinColumn); } @@ -1598,7 +1598,7 @@ protected function generateAssociationMappingPropertyDocBlock(array $association $inverseJoinColumnsLines = []; - foreach ($associationMapping['joinTable']['inverseJoinColumns'] as $joinColumn) { + foreach ($associationMapping['joinTable']->getInverseJoinColumns() as $joinColumn) { $inverseJoinColumnsLines[] = $this->spaces . ' * ' . $this->generateJoinColumnAnnotation($joinColumn); } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 44f417f1969..7ace71fedbf 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -22,6 +22,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; +use Doctrine\ORM\Mapping\JoinTableMetadata; /** * ClassMetadata exporter for PHP code. @@ -69,7 +70,7 @@ public function exportClassMetadata(ClassMetadata $metadata) $lines[] = null; if (! empty($table->getSchema())) { - $lines[] = '$table->setSchema(' . $table->getSchema() . ');'; + $lines[] = '$table->setSchema("' . $table->getSchema() . '");'; } $lines[] = '$table->setName("' . $table->getName() . '");'; @@ -130,7 +131,7 @@ public function exportClassMetadata(ClassMetadata $metadata) if ($metadata->lifecycleCallbacks) { foreach ($metadata->lifecycleCallbacks as $event => $callbacks) { foreach ($callbacks as $callback) { - $lines[] = "\$metadata->addLifecycleCallback('$callback', '$event');"; + $lines[] = '$metadata->addLifecycleCallback("' . $callback . '", "' . $event . '");'; } } } @@ -215,7 +216,7 @@ public function exportClassMetadata(ClassMetadata $metadata) if ($associationMapping['type'] === ClassMetadata::MANY_TO_MANY) { $method = 'mapManyToMany'; - $this->exportJoinTable($associationMapping['joinTable'], $lines, 'joinTable'); + $this->exportJoinTable($associationMapping['joinTable'], $lines); } else { $method = 'mapOneToMany'; } @@ -243,20 +244,33 @@ public function exportClassMetadata(ClassMetadata $metadata) return implode("\n", $lines); } - private function exportJoinTable(array $joinTable, array &$lines, $variableName) + private function exportJoinTable(JoinTableMetadata $joinTable, array &$lines) { - $this->exportJoinColumns($joinTable['joinColumns'], $lines, 'joinColumns'); + $lines[] = null; + $lines[] = '$joinTable = new Mapping\JoinTableMetadata();'; + $lines[] = null; + $lines[] = '$joinTable->setName("' . $joinTable->getName() . '");'; + + if (! empty($joinTable->getSchema())) { + $lines[] = '$joinTable->setSchema("' . $joinTable->getSchema() . '");'; + } + $lines[] = '$joinTable->setOptions(' . $this->_varExport($joinTable->getOptions()) . ');'; + + $this->exportJoinColumns($joinTable->getJoinColumns(), $lines, 'joinColumns'); + + $lines[] = null; + $lines[] = 'foreach ($joinColumns as $joinColumn) {'; + $lines[] = ' $joinTable->addJoinColumn($joinColumn);'; + $lines[] = '}'; $lines[] = null; - $this->exportJoinColumns($joinTable['inverseJoinColumns'], $lines, 'inverseJoinColumns'); + $this->exportJoinColumns($joinTable->getInverseJoinColumns(), $lines, 'inverseJoinColumns'); $lines[] = null; - $lines[] = '$' . $variableName . ' = array('; - $lines[] = ' "name" => "' . $joinTable['name'] . '",'; - $lines[] = ' "joinColumns" => $joinColumns,'; - $lines[] = ' "inverseJoinColumns" => $inverseJoinColumns,'; - $lines[] = ');'; + $lines[] = 'foreach ($inverseJoinColumns as $inverseJoinColumn) {'; + $lines[] = ' $joinTable->addInverseJoinColumn($inverseJoinColumn);'; + $lines[] = '}'; } private function exportJoinColumns(array $joinColumns, array &$lines, $variableName) diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 8a71034e63f..b3738d1a02c 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -328,14 +328,14 @@ public function exportClassMetadata(ClassMetadata $metadata) } } - if (isset($associationMapping['joinTable']) && $associationMapping['joinTable']) { + if (isset($associationMapping['joinTable'])) { $joinTableXml = $associationMappingXml->addChild('join-table'); - $joinTableXml->addAttribute('name', $associationMapping['joinTable']['name']); + $joinTableXml->addAttribute('name', $associationMapping['joinTable']->getName()); $joinColumnsXml = $joinTableXml->addChild('join-columns'); - foreach ($associationMapping['joinTable']['joinColumns'] as $joinColumn) { + foreach ($associationMapping['joinTable']->getJoinColumns() as $joinColumn) { /** @var JoinColumnMetadata $joinColumn */ $joinColumnXml = $joinColumnsXml->addChild('join-column'); @@ -365,7 +365,7 @@ public function exportClassMetadata(ClassMetadata $metadata) $inverseJoinColumnsXml = $joinTableXml->addChild('inverse-join-columns'); - foreach ($associationMapping['joinTable']['inverseJoinColumns'] as $joinColumn) { + foreach ($associationMapping['joinTable']->getInverseJoinColumns() as $joinColumn) { /** @var JoinColumnMetadata $joinColumn */ $joinColumnXml = $inverseJoinColumnsXml->addChild('join-column'); diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 0fb5c53c5b9..3516c4bea60 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -543,17 +543,15 @@ private function gatherRelationsSql($class, $table, $schema, &$addedFks, &$black throw ORMException::notSupported(); } elseif ($mapping['type'] == ClassMetadata::MANY_TO_MANY && $mapping['isOwningSide']) { // create join table - $joinTable = $mapping['joinTable']; - - $theJoinTable = $schema->createTable( - $this->quoteStrategy->getJoinTableName($mapping, $foreignClass, $this->platform) - ); + $joinTable = $mapping['joinTable']; + $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); + $theJoinTable = $schema->createTable($joinTableName); $primaryKeyColumns = []; // Build first FK constraint (relation table => source table) $this->gatherRelationJoinColumns( - $joinTable['joinColumns'], + $joinTable->getJoinColumns(), $theJoinTable, $class, $mapping, @@ -564,7 +562,7 @@ private function gatherRelationsSql($class, $table, $schema, &$addedFks, &$black // Build second FK constraint (relation table => target table) $this->gatherRelationJoinColumns( - $joinTable['inverseJoinColumns'], + $joinTable->getInverseJoinColumns(), $theJoinTable, $foreignClass, $mapping, diff --git a/lib/Doctrine/ORM/Tools/SchemaValidator.php b/lib/Doctrine/ORM/Tools/SchemaValidator.php index cb7ee1b8a6e..ef1407fa130 100644 --- a/lib/Doctrine/ORM/Tools/SchemaValidator.php +++ b/lib/Doctrine/ORM/Tools/SchemaValidator.php @@ -167,7 +167,7 @@ public function validateClass(ClassMetadata $class) $classIdentifierColumns = array_keys($class->getIdentifierColumns($this->em)); $targetIdentifierColumns = array_keys($targetMetadata->getIdentifierColumns($this->em)); - foreach ($assoc['joinTable']['joinColumns'] as $joinColumn) { + foreach ($assoc['joinTable']->getJoinColumns() as $joinColumn) { if (!in_array($joinColumn->getReferencedColumnName(), $classIdentifierColumns)) { $ce[] = "The referenced column name '" . $joinColumn->getReferencedColumnName() . "' " . "has to be a primary key column on the target entity class '".$class->name."'."; @@ -175,7 +175,7 @@ public function validateClass(ClassMetadata $class) } } - foreach ($assoc['joinTable']['inverseJoinColumns'] as $inverseJoinColumn) { + foreach ($assoc['joinTable']->getInverseJoinColumns() as $inverseJoinColumn) { if (!in_array($inverseJoinColumn->getReferencedColumnName(), $targetIdentifierColumns)) { $ce[] = "The referenced column name '" . $joinColumn->getReferencedColumnName() . "' " . "has to be a primary key column on the target entity class '".$targetMetadata->name."'."; @@ -183,15 +183,15 @@ public function validateClass(ClassMetadata $class) } } - if (count($targetIdentifierColumns) !== count($assoc['joinTable']['inverseJoinColumns'])) { - $ce[] = "The inverse join columns of the many-to-many table '" . $assoc['joinTable']['name'] . "' " . + if (count($targetIdentifierColumns) !== count($assoc['joinTable']->getInverseJoinColumns())) { + $ce[] = "The inverse join columns of the many-to-many table '" . $assoc['joinTable']->getName() . "' " . "have to contain to ALL identifier columns of the target entity '". $targetMetadata->name . "', " . "however '" . implode(", ", array_diff($targetIdentifierColumns, array_values($assoc['relationToTargetKeyColumns']))) . "' are missing."; } - if (count($classIdentifierColumns) !== count($assoc['joinTable']['joinColumns'])) { - $ce[] = "The join columns of the many-to-many table '" . $assoc['joinTable']['name'] . "' " . + if (count($classIdentifierColumns) !== count($assoc['joinTable']->getJoinColumns())) { + $ce[] = "The join columns of the many-to-many table '" . $assoc['joinTable']->getName() . "' " . "have to contain to ALL identifier columns of the source entity '". $class->name . "', " . "however '" . implode(", ", array_diff($classIdentifierColumns, array_values($assoc['relationToSourceKeyColumns']))) . "' are missing."; diff --git a/lib/Doctrine/ORM/Utility/PersisterHelper.php b/lib/Doctrine/ORM/Utility/PersisterHelper.php index cdc3230018a..8965d3475e4 100644 --- a/lib/Doctrine/ORM/Utility/PersisterHelper.php +++ b/lib/Doctrine/ORM/Utility/PersisterHelper.php @@ -63,7 +63,7 @@ public static function getTypeOfField($fieldName, ClassMetadata $class, EntityMa $types = []; $targetClass = $em->getClassMetadata($assoc['targetEntity']); $joinColumns = ($assoc['type'] & ClassMetadata::MANY_TO_MANY) - ? $assoc['joinTable']['joinColumns'] + ? $assoc['joinTable']->getJoinColumns() : $assoc['joinColumns']; foreach ($joinColumns as $joinColumn) { @@ -95,7 +95,7 @@ public static function getTypeOfColumn($columnName, ClassMetadata $class, Entity // resolve join columns over to-one or to-many $targetClass = $em->getClassMetadata($assoc['targetEntity']); $joinColumns = ($assoc['type'] & ClassMetadata::MANY_TO_MANY) - ? $assoc['joinTable']['joinColumns'] + ? $assoc['joinTable']->getJoinColumns() : $assoc['joinColumns']; foreach ($joinColumns as $joinColumn) { diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php b/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php index 90ee4a27e93..772b7f6e9ea 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php @@ -37,25 +37,18 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat $metadata->setAssociationOverride('address', ['joinColumns' => $joinColumns]); - $joinColumns = []; + $joinTable = new Mapping\JoinTableMetadata(); + $joinTable->setName('ddc964_users_admingroups'); $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName('adminuser_id'); - $joinColumns[] = $joinColumn; - - $inverseJoinColumns = []; + $joinTable->addJoinColumn($joinColumn); $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName('admingroup_id'); - $inverseJoinColumns[] = $joinColumn; - - $joinTable = [ - 'name' => 'ddc964_users_admingroups', - 'joinColumns' => $joinColumns, - 'inverseJoinColumns' => $inverseJoinColumns, - ]; + $joinTable->addInverseJoinColumn($joinColumn); $metadata->setAssociationOverride('groups', ['joinTable' => $joinTable]); } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php index 11af04fd0ab..41b75e095c1 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php @@ -145,27 +145,22 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat ] ); - $joinColumns = $inverseJoinColumns = []; + $joinTable = new Mapping\JoinTableMetadata(); + $joinTable->setName('ddc964_users_groups'); $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName('user_id'); $joinColumn->setReferencedColumnName('id'); - $joinColumns[] = $joinColumn; + $joinTable->addJoinColumn($joinColumn); $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName('group_id'); $joinColumn->setReferencedColumnName('id'); - $inverseJoinColumns[] = $joinColumn; - - $joinTable = [ - 'name' => 'ddc964_users_groups', - 'joinColumns' => $joinColumns, - 'inverseJoinColumns' => $inverseJoinColumns, - ]; + $joinTable->addInverseJoinColumn($joinColumn); $metadata->mapManyToMany( [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index bc33e18c8b0..c124ad0a5e3 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -433,7 +433,8 @@ public function testJoinColumnUniqueAndNullable($class) { // Non-Nullability of Join Column $association = $class->associationMappings['groups']; - $joinColumn = reset($association['joinTable']['joinColumns']); + $joinColumns = $association['joinTable']->getJoinColumns(); + $joinColumn = reset($joinColumns); self::assertFalse($joinColumn->isNullable()); self::assertFalse($joinColumn->isUnique()); @@ -449,12 +450,13 @@ public function testColumnDefinition($class) { self::assertNotNull($class->getProperty('email')); - $property = $class->getProperty('email'); - $association = $class->associationMappings['groups']; - $joinColumn = reset($association['joinTable']['inverseJoinColumns']); + $property = $class->getProperty('email'); + $association = $class->associationMappings['groups']; + $inverseJoinColumns = $association['joinTable']->getInverseJoinColumns(); + $inverseJoinColumn = reset($inverseJoinColumns); self::assertEquals("CHAR(32) NOT NULL", $property->getColumnDefinition()); - self::assertEquals("INT NULL", $joinColumn->getColumnDefinition()); + self::assertEquals("INT NULL", $inverseJoinColumn->getColumnDefinition()); return $class; } @@ -779,22 +781,26 @@ public function testAssociationOverridesMapping() self::assertEquals($guestGroups['cascade'], $adminGroups['cascade']); // assert not override attributes - $guestGroupsJoinColumn = reset($guestGroups['joinTable']['joinColumns']); - $guestGroupsInverseJoinColumn = reset($guestGroups['joinTable']['inverseJoinColumns']); + $guestGroupsJoinColumns = $guestGroups['joinTable']->getJoinColumns(); + $guestGroupsJoinColumn = reset($guestGroupsJoinColumns); + $guestGroupsInverseJoinColumns = $guestGroups['joinTable']->getInverseJoinColumns(); + $guestGroupsInverseJoinColumn = reset($guestGroupsInverseJoinColumns); - self::assertEquals('ddc964_users_groups', $guestGroups['joinTable']['name']); + self::assertEquals('ddc964_users_groups', $guestGroups['joinTable']->getName()); self::assertEquals('user_id', $guestGroupsJoinColumn->getColumnName()); self::assertEquals('group_id', $guestGroupsInverseJoinColumn->getColumnName()); self::assertEquals(['user_id'=>'id'], $guestGroups['relationToSourceKeyColumns']); self::assertEquals(['group_id'=>'id'], $guestGroups['relationToTargetKeyColumns']); - $adminGroupsJoinColumn = reset($adminGroups['joinTable']['joinColumns']); - $adminGroupsInverseJoinColumn = reset($adminGroups['joinTable']['inverseJoinColumns']); + $adminGroupsJoinColumns = $adminGroups['joinTable']->getJoinColumns(); + $adminGroupsJoinColumn = reset($adminGroupsJoinColumns); + $adminGroupsInverseJoinColumns = $adminGroups['joinTable']->getInverseJoinColumns(); + $adminGroupsInverseJoinColumn = reset($adminGroupsInverseJoinColumns); - self::assertEquals('ddc964_users_admingroups', $adminGroups['joinTable']['name']); - self::assertEquals('adminuser_id', $guestGroupsJoinColumn->getColumnName()); - self::assertEquals('admingroup_id', $guestGroupsInverseJoinColumn->getColumnName()); + self::assertEquals('ddc964_users_admingroups', $adminGroups['joinTable']->getName()); + self::assertEquals('adminuser_id', $adminGroupsJoinColumn->getColumnName()); + self::assertEquals('admingroup_id', $adminGroupsInverseJoinColumn->getColumnName()); self::assertEquals(['adminuser_id'=>'id'], $adminGroups['relationToSourceKeyColumns']); self::assertEquals(['admingroup_id'=>'id'], $adminGroups['relationToTargetKeyColumns']); @@ -1349,7 +1355,8 @@ public static function loadMetadata(ClassMetadata $metadata) ] ); - $joinColumns = $inverseJoinColumns = []; + $joinTable = new Mapping\JoinTableMetadata(); + $joinTable->setName('cms_users_groups'); $joinColumn = new Mapping\JoinColumnMetadata(); @@ -1358,7 +1365,7 @@ public static function loadMetadata(ClassMetadata $metadata) $joinColumn->setNullable(false); $joinColumn->setUnique(false); - $joinColumns[] = $joinColumn; + $joinTable->addJoinColumn($joinColumn); $joinColumn = new Mapping\JoinColumnMetadata(); @@ -1366,13 +1373,7 @@ public static function loadMetadata(ClassMetadata $metadata) $joinColumn->setReferencedColumnName('id'); $joinColumn->setColumnDefinition('INT NULL'); - $inverseJoinColumns[] = $joinColumn; - - $joinTable = [ - 'name' => 'cms_users_groups', - 'joinColumns' => $joinColumns, - 'inverseJoinColumns' => $inverseJoinColumns, - ]; + $joinTable->addInverseJoinColumn($joinColumn); $metadata->mapManyToMany( [ @@ -1380,7 +1381,7 @@ public static function loadMetadata(ClassMetadata $metadata) 'targetEntity' => Group::class, 'cascade' => ['remove', 'persist', 'refresh', 'merge', 'detach'], 'joinTable' => $joinTable, - 'orderBy' => NULL, + 'orderBy' => NULL, ] ); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 99f88f5cdd8..840aeb2fb2f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -382,11 +382,13 @@ public function testQuoteMetadata() self::assertEquals('address-id', $userAddressJoinColumn->getColumnName()); self::assertEquals('address-id', $userAddressJoinColumn->getReferencedColumnName()); - $groups = $userMetadata->associationMappings['groups']; - $userGroupsJoinColumn = reset($groups['joinTable']['joinColumns']); - $userGroupsInverseJoinColumn = reset($groups['joinTable']['inverseJoinColumns']); + $groups = $userMetadata->associationMappings['groups']; + $userGroupsJoinColumns = $groups['joinTable']->getJoinColumns(); + $userGroupsJoinColumn = reset($userGroupsJoinColumns); + $userGroupsInverseJoinColumns = $groups['joinTable']->getInverseJoinColumns(); + $userGroupsInverseJoinColumn = reset($userGroupsInverseJoinColumns); - self::assertEquals('quote-users-groups', $groups['joinTable']['name']); + self::assertEquals('quote-users-groups', $groups['joinTable']->getName()); self::assertEquals('user-id', $userGroupsJoinColumn->getColumnName()); self::assertEquals('user-id', $userGroupsJoinColumn->getReferencedColumnName()); self::assertEquals('group-id', $userGroupsInverseJoinColumn->getColumnName()); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index cbb3b63686e..b85a57f5e9c 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -151,27 +151,20 @@ public function testMapAssociationInGlobalNamespace() $cm->initializeReflection(new RuntimeReflectionService()); - $joinColumns = []; + $joinTable = new Mapping\JoinTableMetadata(); + $joinTable->setName('bar'); $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName("bar_id"); $joinColumn->setReferencedColumnName("id"); - $joinColumns[] = $joinColumn; - - $inverseJoinColumns = []; + $joinTable->addJoinColumn($joinColumn); $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName("baz_id"); $joinColumn->setReferencedColumnName("id"); - $inverseJoinColumns[] = $joinColumn; - - $joinTable = [ - 'name' => 'bar', - 'joinColumns' => $joinColumns, - 'inverseJoinColumns' => $inverseJoinColumns, - ]; + $joinTable->addInverseJoinColumn($joinColumn); $cm->mapManyToMany( [ @@ -217,13 +210,9 @@ public function testMapManyToManyJoinTableDefaults() $inverseJoinColumns[] = $joinColumn; - $joinTable = [ - 'name' => 'cmsuser_cmsgroup', - 'joinColumns' => $joinColumns, - 'inverseJoinColumns' => $inverseJoinColumns, - ]; - - self::assertEquals($joinTable, $assoc['joinTable']); + self::assertEquals('cmsuser_cmsgroup', $assoc['joinTable']->getName()); + self::assertEquals($joinColumns, $assoc['joinTable']->getJoinColumns()); + self::assertEquals($inverseJoinColumns, $assoc['joinTable']->getInverseJoinColumns()); } public function testSerializeManyToManyJoinTableCascade() @@ -240,7 +229,7 @@ public function testSerializeManyToManyJoinTableCascade() $assoc = $cm->associationMappings['groups']; $assoc = unserialize(serialize($assoc)); - foreach ($assoc['joinTable']['joinColumns'] as $joinColumn) { + foreach ($assoc['joinTable']->getJoinColumns() as $joinColumn) { self::assertEquals('CASCADE', $joinColumn->getOnDelete()); } } @@ -452,24 +441,17 @@ public function testDefaultTableName() $cm->initializeReflection(new RuntimeReflectionService()); // When joinTable's name is not given - $joinColumns = []; + $joinTable = new Mapping\JoinTableMetadata(); $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setReferencedColumnName("id"); - $joinColumns[] = $joinColumn; - - $inverseJoinColumns = []; + $joinTable->addJoinColumn($joinColumn); $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setReferencedColumnName("id"); - $inverseJoinColumns[] = $joinColumn; - - $joinTable = [ - 'joinColumns' => $joinColumns, - 'inverseJoinColumns' => $inverseJoinColumns, - ]; + $joinTable->addInverseJoinColumn($joinColumn); $cm->mapManyToMany( [ @@ -480,7 +462,7 @@ public function testDefaultTableName() ] ); - self::assertEquals('cmsaddress_cmsuser', $cm->associationMappings['user']['joinTable']['name']); + self::assertEquals('cmsaddress_cmsuser', $cm->associationMappings['user']['joinTable']->getName()); } public function testDefaultJoinColumnName() @@ -514,27 +496,18 @@ public function testDefaultJoinColumnName() $cm = new ClassMetadata(CMS\CmsAddress::class); $cm->initializeReflection(new RuntimeReflectionService()); - $joinColumns = []; + $joinTable = new Mapping\JoinTableMetadata(); + $joinTable->setName('user_CmsUser'); $joinColumn = new JoinColumnMetadata(); - $joinColumn->setReferencedColumnName('id'); - $joinColumns[] = $joinColumn; - - $inverseJoinColumns = []; + $joinTable->addJoinColumn($joinColumn); $joinColumn = new JoinColumnMetadata(); - $joinColumn->setReferencedColumnName('id'); - $inverseJoinColumns[] = $joinColumn; - - $joinTable = [ - 'name' => 'user_CmsUser', - 'joinColumns' => $joinColumns, - 'inverseJoinColumns' => $inverseJoinColumns, - ]; + $joinTable->addInverseJoinColumn($joinColumn); $cm->mapManyToMany( [ @@ -545,10 +518,11 @@ public function testDefaultJoinColumnName() ] ); - $association = $cm->associationMappings['user']; - $joinTable = $association['joinTable']; - $joinColumn = reset($joinTable['joinColumns']); - $inverseJoinColumn = reset($joinTable['joinColumns']); + $association = $cm->associationMappings['user']; + $joinColumns = $association['joinTable']->getJoinColumns(); + $joinColumn = reset($joinColumns); + $inverseJoinColumns = $association['joinTable']->getInverseJoinColumns(); + $inverseJoinColumn = reset($inverseJoinColumns); self::assertEquals('cmsaddress_id', $joinColumn->getColumnName()); self::assertEquals('cmsuser_id', $inverseJoinColumn->getColumnName()); @@ -595,12 +569,13 @@ public function testManyToManyUnderscoreNamingStrategyDefaults() ] ); - $association = $metadata->associationMappings['user']; - $joinColumn = reset($association['joinTable']['joinColumns']); - $inverseJoinColumn = reset($association['joinTable']['inverseJoinColumns']); - - self::assertEquals('CMS_ADDRESS_CMS_USER', $association['joinTable']['name']); + $association = $metadata->associationMappings['user']; + $joinColumns = $association['joinTable']->getJoinColumns(); + $joinColumn = reset($joinColumns); + $inverseJoinColumns = $association['joinTable']->getInverseJoinColumns(); + $inverseJoinColumn = reset($inverseJoinColumns); + self::assertEquals('CMS_ADDRESS_CMS_USER', $association['joinTable']->getName()); self::assertEquals(['CMS_ADDRESS_ID' => 'ID'], $association['relationToSourceKeyColumns']); self::assertEquals(['CMS_USER_ID' => 'ID'], $association['relationToTargetKeyColumns']); @@ -619,7 +594,7 @@ public function testManyToManyUnderscoreNamingStrategyDefaults() ] ); - self::assertEquals('DOCTRINE_GLOBAL_ARTICLE_CMS_USER', $cm->associationMappings['author']['joinTable']['name']); + self::assertEquals('DOCTRINE_GLOBAL_ARTICLE_CMS_USER', $cm->associationMappings['author']['joinTable']->getName()); } /** @@ -655,7 +630,7 @@ public function testJoinTableMappingDefaults() $cm->mapManyToMany(['fieldName' => 'author', 'targetEntity' => CMS\CmsUser::class]); - self::assertEquals('doctrineglobal_article_cmsuser', $cm->associationMappings['author']['joinTable']['name']); + self::assertEquals('doctrineglobal_article_cmsuser', $cm->associationMappings['author']['joinTable']->getName()); } /** @@ -1233,8 +1208,8 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategy() ); self::assertEquals('routing_routingleg', $routingMetadata->table->getName()); - self::assertEquals('cms_cmsaddress_cms_cmsuser', $addressMetadata->associationMappings['user']['joinTable']['name']); - self::assertEquals('doctrineglobal_article_cms_cmsuser', $articleMetadata->associationMappings['author']['joinTable']['name']); + self::assertEquals('cms_cmsaddress_cms_cmsuser', $addressMetadata->associationMappings['user']['joinTable']->getName()); + self::assertEquals('doctrineglobal_article_cms_cmsuser', $articleMetadata->associationMappings['author']['joinTable']->getName()); } /** @@ -1379,13 +1354,9 @@ public function testManyToManySelfReferencingNamingStrategyDefaults() $inverseJoinColumns[] = $joinColumn; - $joinTable = [ - 'name' => 'customtypeparent_customtypeparent', - 'joinColumns' => $joinColumns, - 'inverseJoinColumns' => $inverseJoinColumns, - ]; - - self::assertEquals($joinTable, $association['joinTable']); + self::assertEquals('customtypeparent_customtypeparent', $association['joinTable']->getName()); + self::assertEquals($joinColumns, $association['joinTable']->getJoinColumns()); + self::assertEquals($inverseJoinColumns, $association['joinTable']->getInverseJoinColumns()); self::assertEquals(['customtypeparent_source' => 'id'], $association['relationToSourceKeyColumns']); self::assertEquals(['customtypeparent_target' => 'id'], $association['relationToTargetKeyColumns']); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php index 5aef22ccd5a..ddb014748df 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php @@ -14,24 +14,17 @@ $metadata->setAssociationOverride('address', ['joinColumns' => $joinColumns]); -$joinColumns = []; +$joinTable = new Mapping\JoinTableMetadata(); +$joinTable->setName('ddc964_users_admingroups'); $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName('adminuser_id'); -$joinColumns[] = $joinColumn; - -$inverseJoinColumns = []; +$joinTable->addJoinColumn($joinColumn); $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName('admingroup_id'); -$inverseJoinColumns[] = $joinColumn; - -$joinTable = [ - 'name' => 'ddc964_users_admingroups', - 'joinColumns' => $joinColumns, - 'inverseJoinColumns' => $inverseJoinColumns, -]; +$joinTable->addInverseJoinColumn($joinColumn); $metadata->setAssociationOverride('groups', ['joinTable' => $joinTable]); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php index 9bdc6a66790..2df8ca59688 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php @@ -40,13 +40,14 @@ ] ); -$joinColumns = []; +$joinTable = new Mapping\JoinTableMetadata(); +$joinTable->setName('ddc964_users_groups'); $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName("user_id"); $joinColumn->setReferencedColumnName("id"); -$joinColumns[] = $joinColumn; +$joinTable->addJoinColumn($joinColumn); $inverseJoinColumns = []; @@ -54,13 +55,7 @@ $joinColumn->setColumnName("group_id"); $joinColumn->setReferencedColumnName("id"); -$inverseJoinColumns[] = $joinColumn; - -$joinTable = [ - 'name' => 'ddc964_users_groups', - 'joinColumns' => $joinColumns, - 'inverseJoinColumns' => $inverseJoinColumns, -]; +$joinTable->addInverseJoinColumn($joinColumn); $metadata->mapManyToMany( [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index 3bd630677d8..f2d46f57520 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -136,7 +136,8 @@ ] ); -$joinColumns = []; +$joinTable = new Mapping\JoinTableMetadata(); +$joinTable->setName('cms_users_groups'); $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName("user_id"); @@ -144,9 +145,7 @@ $joinColumn->setNullable(false); $joinColumn->setUnique(false); -$joinColumns[] = $joinColumn; - -$inverseJoinColumns = []; +$joinTable->addJoinColumn($joinColumn); $joinColumn = new Mapping\JoinColumnMetadata(); @@ -154,13 +153,7 @@ $joinColumn->setReferencedColumnName("id"); $joinColumn->setColumnDefinition("INT NULL"); -$inverseJoinColumns[] = $joinColumn; - -$joinTable = [ - 'name' => 'cms_users_groups', - 'joinColumns' => $joinColumns, - 'inverseJoinColumns' => $inverseJoinColumns, -]; +$joinTable->addInverseJoinColumn($joinColumn); $metadata->mapManyToMany( [ diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 58eb7e1ec40..737351d4bad 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -134,27 +134,20 @@ public function generateBookEntityFixture(array $embeddedClasses = []) ] ); - $joinColumns = []; + $joinTable = new Mapping\JoinTableMetadata(); + $joinTable->setName('book_comment'); $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName("book_id"); $joinColumn->setReferencedColumnName("id"); - $joinColumns[] = $joinColumn; - - $inverseJoinColumns = []; + $joinTable->addJoinColumn($joinColumn); $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName("comment_id"); $joinColumn->setReferencedColumnName("id"); - $inverseJoinColumns[] = $joinColumn; - - $joinTable = array( - 'name' => 'book_comment', - 'joinColumns' => $joinColumns, - 'inverseJoinColumns' => $inverseJoinColumns, - ); + $joinTable->addInverseJoinColumn($joinColumn); $metadata->mapManyToMany( [ @@ -709,39 +702,32 @@ public function testGenerateEntityWithMultipleInverseJoinColumns() $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); - $joinColumns = []; + $joinTable = new Mapping\JoinTableMetadata(); + $joinTable->setName('unidade_centro_custo'); $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName("idorcamento"); $joinColumn->setReferencedColumnName("idorcamento"); - $joinColumns[] = $joinColumn; + $joinTable->addJoinColumn($joinColumn); $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName("idunidade"); $joinColumn->setReferencedColumnName("idunidade"); - $joinColumns[] = $joinColumn; - - $inverseJoinColumns = []; + $joinTable->addJoinColumn($joinColumn); $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName("idcentrocusto"); $joinColumn->setReferencedColumnName("idcentrocusto"); - $inverseJoinColumns[] = $joinColumn; + $joinTable->addInverseJoinColumn($joinColumn); $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName("idpais"); $joinColumn->setReferencedColumnName("idpais"); - $inverseJoinColumns[] = $joinColumn; - - $joinTable = [ - 'name' => 'unidade_centro_custo', - 'joinColumns' => $joinColumns, - 'inverseJoinColumns' => $inverseJoinColumns, - ]; + $joinTable->addInverseJoinColumn($joinColumn); $metadata->mapManyToMany( [ diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index 9b74807547c..34d0d00397f 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -288,13 +288,15 @@ public function testManyToManyAssociationsAreExported($class) { self::assertTrue(isset($class->associationMappings['groups'])); - $association = $class->associationMappings['groups']; - $joinColumn = reset($association['joinTable']['joinColumns']); - $inverseJoinColumn = reset($association['joinTable']['inverseJoinColumns']); + $association = $class->associationMappings['groups']; + $joinColumns = $association['joinTable']->getJoinColumns(); + $joinColumn = reset($joinColumns); + $inverseJoinColumns = $association['joinTable']->getInverseJoinColumns(); + $inverseJoinColumn = reset($inverseJoinColumns); //self::assertInstanceOf('Doctrine\ORM\Mapping\ManyToManyMapping', $class->associationMappings['groups']); self::assertEquals(Group::class, $association['targetEntity']); - self::assertEquals('cms_users_groups', $association['joinTable']['name']); + self::assertEquals('cms_users_groups', $association['joinTable']->getName()); self::assertEquals('user_id', $joinColumn->getColumnName()); self::assertEquals('id', $joinColumn->getReferencedColumnName()); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php index 96a342ff8c4..96c7584361b 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php @@ -11,6 +11,7 @@ $tableMetadata->addOption('foo', ['bar' => 'baz']); $metadata->setPrimaryTable($tableMetadata); +$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); $metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); @@ -18,6 +19,7 @@ $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); $metadata->addLifecycleCallback('doStuffOnPostPersist', 'postPersist'); + $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); @@ -25,6 +27,7 @@ $metadata->addProperty($fieldMetadata); + $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); @@ -35,6 +38,7 @@ $metadata->addProperty($fieldMetadata); + $fieldMetadata = new Mapping\FieldMetadata('email'); $fieldMetadata->setType(Type::getType('string')); @@ -43,6 +47,7 @@ $metadata->addProperty($fieldMetadata); + $fieldMetadata = new Mapping\FieldMetadata('age'); $fieldMetadata->setType(Type::getType('integer')); @@ -50,7 +55,6 @@ $metadata->addProperty($fieldMetadata); -$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); $metadata->mapManyToOne( [ @@ -106,13 +110,14 @@ ] ); -$joinColumns = []; +$joinTable = new Mapping\JoinTableMetadata(); +$joinTable->setName('cms_users_groups'); $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName("user_id"); $joinColumn->setReferencedColumnName("id"); -$joinColumns[] = $joinColumn; +$joinTable->addJoinColumn($joinColumn); $inverseJoinColumns = []; @@ -121,13 +126,7 @@ $joinColumn->setReferencedColumnName("id"); $joinColumn->setColumnDefinition("INT NULL"); -$inverseJoinColumns[] = $joinColumn; - -$joinTable = [ - 'name' => 'cms_users_groups', - 'joinColumns' => $joinColumns, - 'inverseJoinColumns' => $inverseJoinColumns, -]; +$joinTable->addInverseJoinColumn($joinColumn); $metadata->mapManyToMany( [ From 1a42e004a8abadb47f8145243146a6b055d260d7 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Thu, 13 Oct 2016 18:28:12 +0000 Subject: [PATCH 073/275] Removed support for joinColumnFieldNames --- lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php | 5 ++++- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 2 -- .../Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php | 9 ++++++--- tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php | 5 ++--- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php index c5e92249730..d59e9320b44 100644 --- a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php @@ -132,7 +132,10 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e // @TODO - fix it ! handle UnitOfWork#createEntity hash generation if ( ! is_array($targetId)) { - $data[reset($assoc['joinColumnFieldNames'])] = $targetId; + $joinColumns = $assoc['joinColumns']; + $columnName = $joinColumns[0]->getAliasedName() ?? $joinColumns[0]->getColumnName(); + + $data[$columnName] = $targetId; $targetEntity = $this->em->getClassMetadata($assoc['targetEntity']); $targetId = [$targetEntity->identifier[0] => $targetId]; diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 0ad5e17962a..3eba54f2fea 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1388,7 +1388,6 @@ protected function validateAndCompleteOneToOneMapping(array $mapping) $columnName = $joinColumn->getColumnName(); $mapping['sourceToTargetKeyColumns'][$columnName] = $joinColumn->getReferencedColumnName(); - $mapping['joinColumnFieldNames'][$columnName] = $joinColumn->getAliasedName() ?? $columnName; } if ($uniqueConstraintColumns) { @@ -1900,7 +1899,6 @@ public function setAssociationOverride($fieldName, array $overrideMapping) $mapping['joinTable'] = $overrideMapping['joinTable']; } - $mapping['joinColumnFieldNames'] = null; $mapping['sourceToTargetKeyColumns'] = null; $mapping['relationToSourceKeyColumns'] = null; $mapping['relationToTargetKeyColumns'] = null; diff --git a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php index 68d12ad6e44..0df664dc343 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php @@ -250,7 +250,7 @@ public function testInvalidFetchOptionThrowsException() public function testAttributeOverridesMappingWithTrait() { - $factory = $this->createClassMetadataFactory(); + $factory = $this->createClassMetadataFactory(); $metadataWithoutOverride = $factory->getMetadataFor(DDC1872ExampleEntityWithoutOverride::class); $metadataWithOverride = $factory->getMetadataFor(DDC1872ExampleEntityWithOverride::class); @@ -264,8 +264,11 @@ public function testAttributeOverridesMappingWithTrait() self::assertEquals('trait_foo', $fooPropertyWithoutOverride->getColumnName()); self::assertEquals('foo_overridden', $fooPropertyWithOverride->getColumnName()); - self::assertArrayHasKey('example_trait_bar_id', $metadataWithoutOverride->associationMappings['bar']['joinColumnFieldNames']); - self::assertArrayHasKey('example_entity_overridden_bar_id', $metadataWithOverride->associationMappings['bar']['joinColumnFieldNames']); + $barPropertyWithoutOverride = $metadataWithoutOverride->associationMappings['bar']; + $barPropertyWithOverride = $metadataWithOverride->associationMappings['bar']; + + self::assertEquals('example_trait_bar_id', $barPropertyWithoutOverride['joinColumns'][0]->getColumnName()); + self::assertEquals('example_entity_overridden_bar_id', $barPropertyWithOverride['joinColumns'][0]->getColumnName()); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index b85a57f5e9c..3670d593b18 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -546,9 +546,8 @@ public function testOneToOneUnderscoreNamingStrategyDefaults() $association = $metadata->associationMappings['user']; $joinColumn = reset($association['joinColumns']); - self::assertEquals(['USER_ID'=>'ID'], $association['sourceToTargetKeyColumns']); - self::assertEquals(['USER_ID'=>'USER_ID'], $association['joinColumnFieldNames']); - self::assertEquals(['ID'=>'USER_ID'], $association['targetToSourceKeyColumns']); + self::assertEquals(['USER_ID' => 'ID'], $association['sourceToTargetKeyColumns']); + self::assertEquals(['ID' => 'USER_ID'], $association['targetToSourceKeyColumns']); self::assertEquals('USER_ID', $joinColumn->getColumnName()); self::assertEquals('ID', $joinColumn->getReferencedColumnName()); From 96f4dd65c0da9c86a059d67e39f77f4f927c7d53 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 21 Oct 2016 00:50:43 +0000 Subject: [PATCH 074/275] Removed most of targetToSourceKeyColumns usages --- .../ORM/Cache/DefaultEntityHydrator.php | 4 +- .../Entity/BasicEntityPersister.php | 51 ++++++++----------- .../ORM/Query/AST/Functions/SizeFunction.php | 8 ++- lib/Doctrine/ORM/Query/SqlWalker.php | 10 ++-- lib/Doctrine/ORM/UnitOfWork.php | 7 +-- 5 files changed, 34 insertions(+), 46 deletions(-) diff --git a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php index d59e9320b44..9c1939ad54e 100644 --- a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php @@ -100,7 +100,9 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e foreach ($associationIds as $fieldName => $fieldValue) { if (($property = $targetClassMetadata->getProperty($fieldName)) !== null) { - $data[$owningAssociation['targetToSourceKeyColumns'][$property->getColumnName()]] = $fieldValue; + $localColumn = $owningAssociation['targetToSourceKeyColumns'][$property->getColumnName()]; + + $data[$localColumn] = $fieldValue; continue; } diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index f6e4067290b..930688a3dd9 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -766,21 +766,26 @@ public function loadOneToOneEntity(array $assoc, $sourceEntity, array $identifie return $targetEntity; } - $sourceClass = $this->em->getClassMetadata($assoc['sourceEntity']); - $owningAssoc = $targetClass->getAssociationMapping($assoc['mappedBy']); + $sourceClass = $this->em->getClassMetadata($assoc['sourceEntity']); + $owningAssoc = $targetClass->getAssociationMapping($assoc['mappedBy']); + $targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName()); + + foreach ($owningAssoc['joinColumns'] as $joinColumn) { + $sourceKeyColumn = $joinColumn->getReferencedColumnName(); + $targetKeyColumn = $joinColumn->getColumnName(); - // TRICKY: since the association is specular source and target are flipped - foreach ($owningAssoc['targetToSourceKeyColumns'] as $sourceKeyColumn => $targetKeyColumn) { if ( ! isset($sourceClass->fieldNames[$sourceKeyColumn])) { throw MappingException::joinColumnMustPointToMappedField( $sourceClass->name, $sourceKeyColumn ); } + $field = $sourceClass->fieldNames[$sourceKeyColumn]; + $value = $sourceClass->reflFields[$field]->getValue($sourceEntity); + // unset the old value and set the new sql aliased value here. By definition // unset($identifier[$targetKeyColumn] works here with how UnitOfWork::createEntity() calls this method. - $identifier[$this->getSQLTableAlias($targetClass->getTableName()) . "." . $targetKeyColumn] = - $sourceClass->reflFields[$sourceClass->fieldNames[$sourceKeyColumn]]->getValue($sourceEntity); + $identifier[$targetTableAlias . "." . $targetKeyColumn] = $value; unset($identifier[$targetKeyColumn]); } @@ -1810,38 +1815,23 @@ private function getOneToManyStatement(array $assoc, $sourceEntity, $offset = nu : $this->class; $tableAlias = $this->getSQLTableAlias($class->getTableName()); - foreach ($owningAssoc['targetToSourceKeyColumns'] as $sourceKeyColumn => $targetKeyColumn) { - if ($sourceClass->containsForeignIdentifier) { - $field = $sourceClass->getFieldForColumn($sourceKeyColumn); - $value = $sourceClass->reflFields[$field]->getValue($sourceEntity); - - if (isset($sourceClass->associationMappings[$field])) { - $targetClass = $this->em->getClassMetadata($sourceClass->associationMappings[$field]['targetEntity']); - - $value = $this->em->getUnitOfWork()->getEntityIdentifier($value); - $value = $value[$targetClass->identifier[0]]; - } + foreach ($owningAssoc['joinColumns'] as $joinColumn) { + $field = $sourceClass->getFieldForColumn($joinColumn->getReferencedColumnName()); + $value = $sourceClass->reflFields[$field]->getValue($sourceEntity); - $criteria[$tableAlias . "." . $targetKeyColumn] = $value; - $parameters[] = [ - 'value' => $value, - 'field' => $field, - 'class' => $sourceClass, - ]; + if ($sourceClass->containsForeignIdentifier && isset($sourceClass->associationMappings[$field])) { + $targetClass = $this->em->getClassMetadata($sourceClass->associationMappings[$field]['targetEntity']); - continue; + $value = $this->em->getUnitOfWork()->getEntityIdentifier($value); + $value = $value[$targetClass->identifier[0]]; } - $field = $sourceClass->fieldNames[$sourceKeyColumn]; - $value = $sourceClass->reflFields[$field]->getValue($sourceEntity); - - $criteria[$tableAlias . "." . $targetKeyColumn] = $value; + $criteria[$tableAlias . "." . $joinColumn->getColumnName()] = $value; $parameters[] = [ 'value' => $value, 'field' => $field, 'class' => $sourceClass, ]; - } $sql = $this->getSelectSQL($criteria, $assoc, null, $limit, $offset); @@ -1934,9 +1924,10 @@ private function getTypes($field, $value, ClassMetadata $class) ? $assoc['relationToTargetKeyColumns'] : $assoc['sourceToTargetKeyColumns']; - foreach ($columns as $column){ + foreach ($columns as $column) { $types[] = PersisterHelper::getTypeOfColumn($column, $class, $this->em); } + break; default: diff --git a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php index f30fd4b1b58..3f2ae07bfd6 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php @@ -67,16 +67,14 @@ public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) $owningAssoc = $targetClass->associationMappings[$assoc['mappedBy']]; $first = true; - foreach ($owningAssoc['targetToSourceKeyColumns'] as $targetColumn => $sourceColumn) { + foreach ($owningAssoc['joinColumns'] as $joinColumn) { if ($first) $first = false; else $sql .= ' AND '; - $property = $class->getProperty($class->fieldNames[$targetColumn]); - $sql .= sprintf('%s.%s = %s.%s', $targetTableAlias, - $platform->quoteIdentifier($sourceColumn), + $platform->quoteIdentifier($joinColumn->getColumnName()), $sourceTableAlias, - $platform->quoteIdentifier($property->getColumnName()) + $platform->quoteIdentifier($joinColumn->getReferencedColumnName()) ); } } else { // many-to-many diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 92c9e6c9bdf..fd0601755de 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -1941,17 +1941,13 @@ public function walkCollectionMemberExpression($collMemberExpr) $owningAssoc = $targetClass->associationMappings[$assoc['mappedBy']]; $sqlParts = []; - foreach ($owningAssoc['targetToSourceKeyColumns'] as $targetColumn => $sourceColumn) { - $property = $class->getProperty($class->fieldNames[$targetColumn]); - $sourceColumnName = $this->platform->quoteIdentifier($property->getColumnName()); - $targetColumnName = $this->platform->quoteIdentifier($sourceColumn); - + foreach ($owningAssoc['joinColumns'] as $joinColumn) { $sqlParts[] = sprintf( '%s.%s = %s.%s', $sourceTableAlias, - $sourceColumnName, + $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()), $targetTableAlias, - $targetColumnName + $this->platform->quoteIdentifier($joinColumn->getColumnName()) ); } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index ccf8bce4aa3..4ee4c7d5570 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -2641,9 +2641,10 @@ public function createEntity($className, array $data, &$hints = []) $associatedId = []; // TODO: Is this even computed right in all cases of composite keys? - foreach ($assoc['targetToSourceKeyColumns'] as $targetColumn => $srcColumn) { - $joinColumnValue = isset($data[$srcColumn]) ? $data[$srcColumn] : null; - $targetField = $targetClass->getFieldForColumn($targetColumn); + foreach ($assoc['joinColumns'] as $joinColumn) { + $joinColumnName = $joinColumn->getColumnName(); + $joinColumnValue = isset($data[$joinColumnName]) ? $data[$joinColumnName] : null; + $targetField = $targetClass->getFieldForColumn($joinColumn->getReferencedColumnName()); if ($joinColumnValue === null && in_array($targetField, $targetClass->identifier, true)) { // the missing key is part of target's entity primary key From 5e529877cce884a5905e7553b432d436aecc0b98 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 21 Oct 2016 03:08:02 +0000 Subject: [PATCH 075/275] Eliminated targetToSourceKeyColumns from association mapping --- .../ORM/Cache/DefaultEntityHydrator.php | 24 +++++++++++++---- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 2 -- .../ORM/Mapping/AbstractMappingDriverTest.php | 4 --- .../Builder/ClassMetadataBuilderTest.php | 26 +++++-------------- .../Tests/ORM/Mapping/ClassMetadataTest.php | 1 - 5 files changed, 25 insertions(+), 32 deletions(-) diff --git a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php index 9c1939ad54e..c56cb474767 100644 --- a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php @@ -99,19 +99,33 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e unset($data[$name]); foreach ($associationIds as $fieldName => $fieldValue) { + // $fieldName = "name" + // $fieldColumnName = "custom_name" if (($property = $targetClassMetadata->getProperty($fieldName)) !== null) { - $localColumn = $owningAssociation['targetToSourceKeyColumns'][$property->getColumnName()]; + foreach ($owningAssociation['joinColumns'] as $joinColumn) { + // $joinColumnName = "custom_name" + // $joinColumnReferencedColumnName = "other_side_of_assoc_column_name" + if ($joinColumn->getReferencedColumnName() !== $property->getColumnName()) { + continue; + } - $data[$localColumn] = $fieldValue; + $data[$joinColumn->getColumnName()] = $fieldValue; + + break; + } continue; } $targetAssoc = $targetClassMetadata->associationMappings[$fieldName]; - foreach($assoc['targetToSourceKeyColumns'] as $referencedColumn => $localColumn) { - if (isset($targetAssoc['sourceToTargetKeyColumns'][$referencedColumn])) { - $data[$localColumn] = $fieldValue; + foreach ($assoc['joinColumns'] as $assocJoinColumn) { + foreach ($targetAssoc['joinColumns'] as $targetAssocJoinColumn) { + if ($assocJoinColumn->getReferencedColumnName() !== $targetAssocJoinColumn->getColumnName()) { + continue; + } + + $data[$assocJoinColumn->getColumnName()] = $fieldValue; } } } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 3eba54f2fea..eac01072fb3 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1404,8 +1404,6 @@ protected function validateAndCompleteOneToOneMapping(array $mapping) ] ); } - - $mapping['targetToSourceKeyColumns'] = array_flip($mapping['sourceToTargetKeyColumns']); } $mapping['orphanRemoval'] = isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']; diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index c124ad0a5e3..975e486dd15 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -826,15 +826,11 @@ public function testAssociationOverridesMapping() self::assertEquals('address_id', $guestAddressJoinColumn->getColumnName()); self::assertEquals(['address_id'=>'id'], $guestAddress['sourceToTargetKeyColumns']); - self::assertEquals(['address_id'=>'address_id'], $guestAddress['joinColumnFieldNames']); - self::assertEquals(['id'=>'address_id'], $guestAddress['targetToSourceKeyColumns']); $adminAddressJoinColumn = reset($adminAddress['joinColumns']); self::assertEquals('adminaddress_id', $adminAddressJoinColumn->getColumnName()); self::assertEquals(['adminaddress_id'=>'id'], $adminAddress['sourceToTargetKeyColumns']); - self::assertEquals(['adminaddress_id'=>'adminaddress_id'], $adminAddress['joinColumnFieldNames']); - self::assertEquals(['id'=>'adminaddress_id'], $adminAddress['targetToSourceKeyColumns']); } /* diff --git a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php index 3be823496ac..edf6b5e48f4 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php @@ -344,24 +344,18 @@ public function testCreateManyToOne() 'nullable' => true, 'unique' => false, 'onDelete' => 'CASCADE', - 'columnDefinition' => NULL, + 'columnDefinition' => null, 'tableName' => 'CmsUser', ], ], 'type' => 2, - 'mappedBy' => NULL, - 'inversedBy' => NULL, + 'mappedBy' => null, + 'inversedBy' => null, 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, 'sourceToTargetKeyColumns' => [ 'group_id' => 'id', ], - 'joinColumnFieldNames' => [ - 'group_id' => 'group_id', - ], - 'targetToSourceKeyColumns' => [ - 'id' => 'group_id', - ], 'orphanRemoval' => false, 'declaringClass' => $this->cm, ], @@ -413,8 +407,6 @@ public function testCreateManyToOneWithIdentity() 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, 'sourceToTargetKeyColumns' => ['group_id' => 'id'], - 'joinColumnFieldNames' => ['group_id' => 'group_id'], - 'targetToSourceKeyColumns' => ['id' => 'group_id'], 'orphanRemoval' => false, 'declaringClass' => $this->cm, 'id' => true, @@ -454,18 +446,16 @@ public function testCreateOneToOne() 'nullable' => true, 'unique' => true, 'onDelete' => 'CASCADE', - 'columnDefinition' => NULL, + 'columnDefinition' => null, 'tableName' => 'CmsUser', ], ], 'type' => 1, - 'mappedBy' => NULL, - 'inversedBy' => NULL, + 'mappedBy' => null, + 'inversedBy' => null, 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, 'sourceToTargetKeyColumns' => ['group_id' => 'id'], - 'joinColumnFieldNames' => ['group_id' => 'group_id'], - 'targetToSourceKeyColumns' => ['id' => 'group_id'], 'orphanRemoval' => false, 'declaringClass' => $this->cm, ], @@ -516,8 +506,6 @@ public function testCreateOneToOneWithIdentity() 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, 'sourceToTargetKeyColumns' => ['group_id' => 'id'], - 'joinColumnFieldNames' => ['group_id' => 'group_id'], - 'targetToSourceKeyColumns' => ['id' => 'group_id'], 'orphanRemoval' => false, 'declaringClass' => $this->cm, ], @@ -697,8 +685,6 @@ public function testOrphanRemovalOnCreateOneToOne() 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, 'sourceToTargetKeyColumns' => ['group_id' => 'id'], - 'joinColumnFieldNames' => ['group_id' => 'group_id'], - 'targetToSourceKeyColumns' => ['id' => 'group_id'], 'orphanRemoval' => true, 'declaringClass' => $this->cm, ], diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 3670d593b18..8a8c15b4a71 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -547,7 +547,6 @@ public function testOneToOneUnderscoreNamingStrategyDefaults() $joinColumn = reset($association['joinColumns']); self::assertEquals(['USER_ID' => 'ID'], $association['sourceToTargetKeyColumns']); - self::assertEquals(['ID' => 'USER_ID'], $association['targetToSourceKeyColumns']); self::assertEquals('USER_ID', $joinColumn->getColumnName()); self::assertEquals('ID', $joinColumn->getReferencedColumnName()); From 1765c2ce0762afad12dbbdf4b03b01023df57532 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 21 Oct 2016 03:27:57 +0000 Subject: [PATCH 076/275] Eliminated sourceToTargetKeyColumns from association mapping --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 5 ----- .../Persisters/Entity/BasicEntityPersister.php | 16 +++++++++++----- .../ORM/Mapping/AbstractMappingDriverTest.php | 2 -- .../Mapping/Builder/ClassMetadataBuilderTest.php | 7 ------- .../Tests/ORM/Mapping/ClassMetadataTest.php | 2 -- 5 files changed, 11 insertions(+), 21 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index eac01072fb3..ad70632b847 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1384,10 +1384,6 @@ protected function validateAndCompleteOneToOneMapping(array $mapping) if (! $joinColumn->getReferencedColumnName()) { $joinColumn->setReferencedColumnName($this->namingStrategy->referenceColumnName()); } - - $columnName = $joinColumn->getColumnName(); - - $mapping['sourceToTargetKeyColumns'][$columnName] = $joinColumn->getReferencedColumnName(); } if ($uniqueConstraintColumns) { @@ -1897,7 +1893,6 @@ public function setAssociationOverride($fieldName, array $overrideMapping) $mapping['joinTable'] = $overrideMapping['joinTable']; } - $mapping['sourceToTargetKeyColumns'] = null; $mapping['relationToSourceKeyColumns'] = null; $mapping['relationToTargetKeyColumns'] = null; diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 930688a3dd9..b6f545b9c42 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -1920,12 +1920,18 @@ private function getTypes($field, $value, ClassMetadata $class) $class = $this->em->getClassMetadata($assoc['targetEntity']); } - $columns = $assoc['type'] === ClassMetadata::MANY_TO_MANY - ? $assoc['relationToTargetKeyColumns'] - : $assoc['sourceToTargetKeyColumns']; + $joinColumns = $assoc['type'] === ClassMetadata::MANY_TO_MANY + ? $assoc['joinTable']->getInverseJoinColumns() + : $assoc['joinColumns']; - foreach ($columns as $column) { - $types[] = PersisterHelper::getTypeOfColumn($column, $class, $this->em); + foreach ($joinColumns as $joinColumn) { + if (! $joinColumn->getType()) { + $type = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $class, $this->em); + + $joinColumn->setType($type); + } + + $types[] = $joinColumn->getType(); } break; diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 975e486dd15..50c220ed77b 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -825,12 +825,10 @@ public function testAssociationOverridesMapping() $guestAddressJoinColumn = reset($guestAddress['joinColumns']); self::assertEquals('address_id', $guestAddressJoinColumn->getColumnName()); - self::assertEquals(['address_id'=>'id'], $guestAddress['sourceToTargetKeyColumns']); $adminAddressJoinColumn = reset($adminAddress['joinColumns']); self::assertEquals('adminaddress_id', $adminAddressJoinColumn->getColumnName()); - self::assertEquals(['adminaddress_id'=>'id'], $adminAddress['sourceToTargetKeyColumns']); } /* diff --git a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php index edf6b5e48f4..1ba6840f6de 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php @@ -353,9 +353,6 @@ public function testCreateManyToOne() 'inversedBy' => null, 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, - 'sourceToTargetKeyColumns' => [ - 'group_id' => 'id', - ], 'orphanRemoval' => false, 'declaringClass' => $this->cm, ], @@ -406,7 +403,6 @@ public function testCreateManyToOneWithIdentity() 'inversedBy' => NULL, 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, - 'sourceToTargetKeyColumns' => ['group_id' => 'id'], 'orphanRemoval' => false, 'declaringClass' => $this->cm, 'id' => true, @@ -455,7 +451,6 @@ public function testCreateOneToOne() 'inversedBy' => null, 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, - 'sourceToTargetKeyColumns' => ['group_id' => 'id'], 'orphanRemoval' => false, 'declaringClass' => $this->cm, ], @@ -505,7 +500,6 @@ public function testCreateOneToOneWithIdentity() 'inversedBy' => NULL, 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, - 'sourceToTargetKeyColumns' => ['group_id' => 'id'], 'orphanRemoval' => false, 'declaringClass' => $this->cm, ], @@ -684,7 +678,6 @@ public function testOrphanRemovalOnCreateOneToOne() 'inversedBy' => NULL, 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, - 'sourceToTargetKeyColumns' => ['group_id' => 'id'], 'orphanRemoval' => true, 'declaringClass' => $this->cm, ], diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 8a8c15b4a71..70b9bc64eff 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -546,8 +546,6 @@ public function testOneToOneUnderscoreNamingStrategyDefaults() $association = $metadata->associationMappings['user']; $joinColumn = reset($association['joinColumns']); - self::assertEquals(['USER_ID' => 'ID'], $association['sourceToTargetKeyColumns']); - self::assertEquals('USER_ID', $joinColumn->getColumnName()); self::assertEquals('ID', $joinColumn->getReferencedColumnName()); } From cafddb21ad1727570672ad0b060e9842350cc58e Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 22 Oct 2016 00:27:16 +0000 Subject: [PATCH 077/275] Removed relationToTargetKeyColumns and relationToSourceKeyColumns from association mapping --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 11 --- .../Collection/ManyToManyPersister.php | 89 +++++++++++-------- lib/Doctrine/ORM/Tools/SchemaValidator.php | 19 +++- .../ORM/Mapping/AbstractMappingDriverTest.php | 6 -- .../Builder/ClassMetadataBuilderTest.php | 4 - .../Tests/ORM/Mapping/ClassMetadataTest.php | 4 - .../Tools/ResolveTargetEntityListenerTest.php | 3 - 7 files changed, 68 insertions(+), 68 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index ad70632b847..058d1f6ddd1 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1514,10 +1514,6 @@ protected function validateAndCompleteManyToManyMapping(array $mapping) $joinColumn->setColumnName($columnName); } - - $columnName = $joinColumn->getColumnName(); - - $mapping['relationToSourceKeyColumns'][$columnName] = $referencedColumnName; } foreach ($mapping['joinTable']->getInverseJoinColumns() as $inverseJoinColumn) { @@ -1532,10 +1528,6 @@ protected function validateAndCompleteManyToManyMapping(array $mapping) $inverseJoinColumn->setColumnName($columnName); } - - $columnName = $inverseJoinColumn->getColumnName(); - - $mapping['relationToTargetKeyColumns'][$columnName] = $referencedColumnName; } } @@ -1893,9 +1885,6 @@ public function setAssociationOverride($fieldName, array $overrideMapping) $mapping['joinTable'] = $overrideMapping['joinTable']; } - $mapping['relationToSourceKeyColumns'] = null; - $mapping['relationToTargetKeyColumns'] = null; - switch ($mapping['type']) { case self::ONE_TO_ONE: $mapping = $this->validateAndCompleteOneToOneMapping($mapping); diff --git a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php index ee4b5152953..ab3af54cba8 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php @@ -239,20 +239,25 @@ public function loadCriteria(PersistentCollection $collection, Criteria $criteri $id = $this->uow->getEntityIdentifier($owner); $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); $onConditions = $this->getOnConditionSQL($mapping); - $whereClauses = $params = []; + $whereClauses = $params = $types = []; if ( ! $mapping['isOwningSide']) { - $associationSourceClass = $targetClass; $mapping = $targetClass->associationMappings[$mapping['mappedBy']]; - $sourceRelationMode = 'relationToTargetKeyColumns'; + $joinColumns = $mapping['joinTable']->getInverseJoinColumns(); } else { - $associationSourceClass = $ownerMetadata; - $sourceRelationMode = 'relationToSourceKeyColumns'; + $joinColumns = $mapping['joinTable']->getJoinColumns(); } - foreach ($mapping[$sourceRelationMode] as $key => $value) { - $whereClauses[] = sprintf('t.%s = ?', $key); - $params[] = $id[$ownerMetadata->getFieldForColumn($value)]; + foreach ($joinColumns as $joinColumn) { + if (! $joinColumn->getType()) { + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $ownerMetadata, $this->em) + ); + } + + $whereClauses[] = sprintf('t.%s = ?', $this->platform->quoteIdentifier($joinColumn->getColumnName())); + $params[] = $id[$ownerMetadata->getFieldForColumn($joinColumn->getReferencedColumnName())]; + $types[] = $joinColumn->getType(); } $parameters = $this->expandCriteriaParameters($criteria); @@ -265,15 +270,16 @@ public function loadCriteria(PersistentCollection $collection, Criteria $criteri $whereClauses[] = sprintf('te.%s = ?', $columnName); $params[] = $value; + $types[] = $property->getType(); } - $tableName = $targetClass->table->getQuotedQualifiedName($this->platform); - $joinTableName = $mapping['joinTable']->getQuotedQualifiedName($this->platform); + $tableName = $targetClass->table->getQuotedQualifiedName($this->platform); + $joinTableName = $mapping['joinTable']->getQuotedQualifiedName($this->platform); + $resultSetMapping = new Query\ResultSetMappingBuilder($this->em); - $rsm = new Query\ResultSetMappingBuilder($this->em); - $rsm->addRootEntityFromClassMetadata($targetClass->name, 'te'); + $resultSetMapping->addRootEntityFromClassMetadata($targetClass->name, 'te'); - $sql = 'SELECT ' . $rsm->generateSelectClause() + $sql = 'SELECT ' . $resultSetMapping->generateSelectClause() . ' FROM ' . $tableName . ' te' . ' JOIN ' . $joinTableName . ' t ON' . implode(' AND ', $onConditions) @@ -282,12 +288,9 @@ public function loadCriteria(PersistentCollection $collection, Criteria $criteri $sql .= $this->getOrderingSql($criteria, $targetClass); $sql .= $this->getLimitSql($criteria); - $stmt = $this->conn->executeQuery($sql, $params); + $stmt = $this->conn->executeQuery($sql, $params, $types); - return $this - ->em - ->newHydrator(Query::HYDRATE_OBJECT) - ->hydrateAll($stmt, $rsm); + return $this->em->newHydrator(Query::HYDRATE_OBJECT)->hydrateAll($stmt, $resultSetMapping); } /** @@ -403,11 +406,12 @@ protected function getDeleteSQL(PersistentCollection $collection) */ protected function getDeleteSQLParameters(PersistentCollection $collection) { - $mapping = $collection->getMapping(); - $identifier = $this->uow->getEntityIdentifier($collection->getOwner()); + $mapping = $collection->getMapping(); + $identifier = $this->uow->getEntityIdentifier($collection->getOwner()); + $joinColumns = $mapping['joinTable']->getJoinColumns(); // Optimization for single column identifier - if (count($mapping['relationToSourceKeyColumns']) === 1) { + if (count($joinColumns) === 1) { return [reset($identifier)]; } @@ -415,8 +419,8 @@ protected function getDeleteSQLParameters(PersistentCollection $collection) $sourceClass = $this->em->getClassMetadata($mapping['sourceEntity']); $params = []; - foreach ($mapping['relationToSourceKeyColumns'] as $columnName => $refColumnName) { - $params[] = $identifier[$sourceClass->getFieldForColumn($refColumnName)]; + foreach ($joinColumns as $joinColumn) { + $params[] = $identifier[$sourceClass->getFieldForColumn($joinColumn->getReferencedColumnName())]; } return $params; @@ -581,15 +585,12 @@ private function getJoinTableRestrictionsWithKey(PersistentCollection $collectio $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); if (! $mapping['isOwningSide']) { - $associationSourceClass = $this->em->getClassMetadata($mapping['targetEntity']); - $mapping = $associationSourceClass->associationMappings[$mapping['mappedBy']]; - $joinColumns = $mapping['joinTable']->getJoinColumns(); - $sourceRelationMode = 'relationToTargetKeyColumns'; - $targetRelationMode = 'relationToSourceKeyColumns'; + $mapping = $targetClass->associationMappings[$mapping['mappedBy']]; + $joinColumns = $mapping['joinTable']->getJoinColumns(); + $inverseJoinColumns = $mapping['joinTable']->getInverseJoinColumns(); } else { - $joinColumns = $mapping['joinTable']->getInverseJoinColumns(); - $sourceRelationMode = 'relationToSourceKeyColumns'; - $targetRelationMode = 'relationToTargetKeyColumns'; + $joinColumns = $mapping['joinTable']->getInverseJoinColumns(); + $inverseJoinColumns = $mapping['joinTable']->getJoinColumns(); } $joinTable = $mapping['joinTable']; @@ -619,17 +620,29 @@ private function getJoinTableRestrictionsWithKey(PersistentCollection $collectio $types[] = PersisterHelper::getTypeOfColumn($columnName, $targetClass, $this->em); } - foreach ($mapping[$sourceRelationMode] as $joinTableColumn => $column) { - $whereClauses[] = 't.' . $this->platform->quoteIdentifier($joinTableColumn) . ' = ?'; - $params[] = $id[$sourceClass->getFieldForColumn($column)]; - $types[] = PersisterHelper::getTypeOfColumn($column, $sourceClass, $this->em); + foreach ($inverseJoinColumns as $joinColumn) { + if (! $joinColumn->getType()) { + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $sourceClass, $this->em) + ); + } + + $whereClauses[] = 't.' . $this->platform->quoteIdentifier($joinColumn->getColumnName()) . ' = ?'; + $params[] = $id[$sourceClass->getFieldForColumn($joinColumn->getReferencedColumnName())]; + $types[] = $joinColumn->getType(); } if ( ! $joinNeeded) { - foreach ($mapping[$targetRelationMode] as $joinTableColumn => $column) { - $whereClauses[] = 't.' . $this->platform->quoteIdentifier($joinTableColumn) . ' = ?'; + foreach ($joinColumns as $joinColumn) { + if (! $joinColumn->getType()) { + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) + ); + } + + $whereClauses[] = 't.' . $this->platform->quoteIdentifier($joinColumn->getColumnName()) . ' = ?'; $params[] = $key; - $types[] = PersisterHelper::getTypeOfColumn($column, $targetClass, $this->em); + $types[] = $joinColumn->getType(); } } diff --git a/lib/Doctrine/ORM/Tools/SchemaValidator.php b/lib/Doctrine/ORM/Tools/SchemaValidator.php index ef1407fa130..b206f429cac 100644 --- a/lib/Doctrine/ORM/Tools/SchemaValidator.php +++ b/lib/Doctrine/ORM/Tools/SchemaValidator.php @@ -22,6 +22,7 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\JoinColumnMetadata; /** * Performs strict validation of the mapping schema @@ -184,16 +185,30 @@ public function validateClass(ClassMetadata $class) } if (count($targetIdentifierColumns) !== count($assoc['joinTable']->getInverseJoinColumns())) { + $columnNames = array_map( + function (JoinColumnMetadata $joinColumn) { + return $joinColumn->getReferencedColumnName(); + }, + $assoc['joinTable']->getInverseJoinColumns() + ); + $ce[] = "The inverse join columns of the many-to-many table '" . $assoc['joinTable']->getName() . "' " . "have to contain to ALL identifier columns of the target entity '". $targetMetadata->name . "', " . - "however '" . implode(", ", array_diff($targetIdentifierColumns, array_values($assoc['relationToTargetKeyColumns']))) . + "however '" . implode(", ", array_diff($targetIdentifierColumns, $columnNames)) . "' are missing."; } if (count($classIdentifierColumns) !== count($assoc['joinTable']->getJoinColumns())) { + $columnNames = array_map( + function (JoinColumnMetadata $joinColumn) { + return $joinColumn->getReferencedColumnName(); + }, + $assoc['joinTable']->getJoinColumns() + ); + $ce[] = "The join columns of the many-to-many table '" . $assoc['joinTable']->getName() . "' " . "have to contain to ALL identifier columns of the source entity '". $class->name . "', " . - "however '" . implode(", ", array_diff($classIdentifierColumns, array_values($assoc['relationToSourceKeyColumns']))) . + "however '" . implode(", ", array_diff($classIdentifierColumns, $columnNames)) . "' are missing."; } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 50c220ed77b..be96d64dc34 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -790,9 +790,6 @@ public function testAssociationOverridesMapping() self::assertEquals('user_id', $guestGroupsJoinColumn->getColumnName()); self::assertEquals('group_id', $guestGroupsInverseJoinColumn->getColumnName()); - self::assertEquals(['user_id'=>'id'], $guestGroups['relationToSourceKeyColumns']); - self::assertEquals(['group_id'=>'id'], $guestGroups['relationToTargetKeyColumns']); - $adminGroupsJoinColumns = $adminGroups['joinTable']->getJoinColumns(); $adminGroupsJoinColumn = reset($adminGroupsJoinColumns); $adminGroupsInverseJoinColumns = $adminGroups['joinTable']->getInverseJoinColumns(); @@ -802,9 +799,6 @@ public function testAssociationOverridesMapping() self::assertEquals('adminuser_id', $adminGroupsJoinColumn->getColumnName()); self::assertEquals('admingroup_id', $adminGroupsInverseJoinColumn->getColumnName()); - self::assertEquals(['adminuser_id'=>'id'], $adminGroups['relationToSourceKeyColumns']); - self::assertEquals(['admingroup_id'=>'id'], $adminGroups['relationToTargetKeyColumns']); - // assert address association mappings self::assertArrayHasKey('address', $guestMetadata->associationMappings); self::assertArrayHasKey('address', $adminMetadata->associationMappings); diff --git a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php index 1ba6840f6de..bb039dcc9ca 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php @@ -575,8 +575,6 @@ public function testCreateManyToMany() 'inversedBy' => NULL, 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, - 'relationToSourceKeyColumns' => ['group_id' => 'id'], - 'relationToTargetKeyColumns' => ['user_id' => 'id'], 'orphanRemoval' => false, 'declaringClass' => $this->cm, ], @@ -767,8 +765,6 @@ public function testOrphanRemovalOnManyToMany() 'inversedBy' => NULL, 'isOwningSide' => true, 'sourceEntity' => CmsUser::class, - 'relationToSourceKeyColumns' => ['group_id' => 'id'], - 'relationToTargetKeyColumns' => ['cmsgroup_id' => 'id'], 'orphanRemoval' => true, 'declaringClass' => $this->cm, ], diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 70b9bc64eff..6c00c615bf3 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -572,8 +572,6 @@ public function testManyToManyUnderscoreNamingStrategyDefaults() $inverseJoinColumn = reset($inverseJoinColumns); self::assertEquals('CMS_ADDRESS_CMS_USER', $association['joinTable']->getName()); - self::assertEquals(['CMS_ADDRESS_ID' => 'ID'], $association['relationToSourceKeyColumns']); - self::assertEquals(['CMS_USER_ID' => 'ID'], $association['relationToTargetKeyColumns']); self::assertEquals('CMS_ADDRESS_ID', $joinColumn->getColumnName()); self::assertEquals('ID', $joinColumn->getReferencedColumnName()); @@ -1353,8 +1351,6 @@ public function testManyToManySelfReferencingNamingStrategyDefaults() self::assertEquals('customtypeparent_customtypeparent', $association['joinTable']->getName()); self::assertEquals($joinColumns, $association['joinTable']->getJoinColumns()); self::assertEquals($inverseJoinColumns, $association['joinTable']->getInverseJoinColumns()); - self::assertEquals(['customtypeparent_source' => 'id'], $association['relationToSourceKeyColumns']); - self::assertEquals(['customtypeparent_target' => 'id'], $association['relationToTargetKeyColumns']); } /** diff --git a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php index 7b30f428011..04ee6e412e8 100644 --- a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php @@ -85,9 +85,6 @@ public function testAssertTableColumnsAreNotAddedInManyToMany() $meta = $cm->associationMappings['manyToMany']; self::assertSame(TargetEntity::class, $meta['targetEntity']); - - self::assertEquals(['resolvetargetentity_id' => 'id'], $meta['relationToSourceKeyColumns']); - self::assertEquals(['targetinterface_id' => 'id'], $meta['relationToTargetKeyColumns']); } /** From df5cd6a0c10d02b68001249f035137a11f2320d1 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 22 Oct 2016 06:53:21 +0000 Subject: [PATCH 078/275] Removed ClassMetadata::FETCH_* constants and created FetchMode::* --- .../reference/dql-doctrine-query-language.rst | 2 +- lib/Doctrine/ORM/AbstractQuery.php | 6 +-- lib/Doctrine/ORM/Annotation/OneToMany.php | 3 +- .../ORM/Cache/DefaultEntityHydrator.php | 3 +- .../Entity/AbstractEntityPersister.php | 5 +- .../ORM/Mapping/AssociationMetadata.php | 35 +++++++------ .../Mapping/Builder/AssociationBuilder.php | 7 +-- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 24 ++------- .../Mapping/DiscriminatorColumnMetadata.php | 2 +- .../ORM/Mapping/Driver/AnnotationDriver.php | 3 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 8 +-- lib/Doctrine/ORM/Mapping/FetchMode.php | 52 +++++++++++++++++++ lib/Doctrine/ORM/Mapping/FieldMetadata.php | 20 ++----- .../ORM/Mapping/JoinTableMetadata.php | 2 +- .../ORM/Mapping/VersionFieldMetadata.php | 2 +- lib/Doctrine/ORM/PersistentCollection.php | 18 +++---- .../Entity/BasicEntityPersister.php | 3 +- .../Entity/CachedPersisterContext.php | 2 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 10 ++-- .../Tools/Export/Driver/AbstractExporter.php | 19 ------- .../ORM/Tools/Export/Driver/XmlExporter.php | 2 +- lib/Doctrine/ORM/UnitOfWork.php | 7 +-- .../ORM/Functional/BasicFunctionalTest.php | 11 ++-- .../Functional/ExtraLazyCollectionTest.php | 17 +++--- ...nyToManySelfReferentialAssociationTest.php | 3 +- ...anyToManyUnidirectionalAssociationTest.php | 3 +- ...neToManySelfReferentialAssociationTest.php | 3 +- .../OneToOneBidirectionalAssociationTest.php | 5 +- ...OneToOneSelfReferentialAssociationTest.php | 3 +- .../OneToOneUnidirectionalAssociationTest.php | 3 +- .../Functional/PersistentCollectionTest.php | 2 +- .../Tests/ORM/Functional/QueryTest.php | 14 +++-- .../Tests/ORM/Functional/SQLFilterTest.php | 9 ++-- ...econdLevelCacheExtraLazyCollectionTest.php | 9 ++-- .../Functional/SingleTableInheritanceTest.php | 10 ++-- .../ORM/Functional/Ticket/DDC1301Test.php | 13 ++--- .../ORM/Hydration/ObjectHydratorTest.php | 5 +- .../Builder/ClassMetadataBuilderTest.php | 19 +++---- .../Tests/ORM/Mapping/ClassMetadataTest.php | 2 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 4 +- .../AbstractClassMetadataExporterTest.php | 7 +-- .../Doctrine.Tests.ORM.Tools.Export.User.php | 8 +-- 42 files changed, 211 insertions(+), 174 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/FetchMode.php diff --git a/docs/en/reference/dql-doctrine-query-language.rst b/docs/en/reference/dql-doctrine-query-language.rst index b0d19e8e089..c114a159eeb 100644 --- a/docs/en/reference/dql-doctrine-query-language.rst +++ b/docs/en/reference/dql-doctrine-query-language.rst @@ -1369,7 +1369,7 @@ can mark a many-to-one or one-to-one association as fetched temporarily to batch createQuery("SELECT u FROM MyProject\User u"); - $query->setFetchMode("MyProject\User", "address", \Doctrine\ORM\Mapping\ClassMetadata::FETCH_EAGER); + $query->setFetchMode("MyProject\User", "address", \Doctrine\ORM\Mapping\FetchMode::EAGER); $query->execute(); Given that there are 10 users and corresponding addresses in the database the executed queries will look something like: diff --git a/lib/Doctrine/ORM/AbstractQuery.php b/lib/Doctrine/ORM/AbstractQuery.php index ba013bbbb69..01483c84cb0 100644 --- a/lib/Doctrine/ORM/AbstractQuery.php +++ b/lib/Doctrine/ORM/AbstractQuery.php @@ -665,7 +665,7 @@ public function getQueryCacheProfile() /** * Change the default fetch mode of an association for this query. * - * $fetchMode can be one of ClassMetadata::FETCH_EAGER or ClassMetadata::FETCH_LAZY + * $fetchMode can be one of FetchMode::EAGER, FetchMode::LAZY or FetchMode::EXTRA_LAZY * * @param string $class * @param string $assocName @@ -675,8 +675,8 @@ public function getQueryCacheProfile() */ public function setFetchMode($class, $assocName, $fetchMode) { - if ($fetchMode !== Mapping\ClassMetadata::FETCH_EAGER) { - $fetchMode = Mapping\ClassMetadata::FETCH_LAZY; + if ($fetchMode !== Mapping\FetchMode::EAGER) { + $fetchMode = Mapping\FetchMode::LAZY; } $this->_hints['fetchMode'][$class][$assocName] = $fetchMode; diff --git a/lib/Doctrine/ORM/Annotation/OneToMany.php b/lib/Doctrine/ORM/Annotation/OneToMany.php index 2d30b611baf..3ef9d38338d 100644 --- a/lib/Doctrine/ORM/Annotation/OneToMany.php +++ b/lib/Doctrine/ORM/Annotation/OneToMany.php @@ -18,6 +18,7 @@ */ namespace Doctrine\ORM\Annotation; +use Doctrine\ORM\Mapping\FetchMode; /** * @Annotation @@ -47,7 +48,7 @@ final class OneToMany implements Annotation * * @Enum({"LAZY", "EAGER", "EXTRA_LAZY"}) */ - public $fetch = 'LAZY'; + public $fetch = FetchMode::LAZY; /** * @var boolean diff --git a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php index c56cb474767..8560238f12d 100644 --- a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php @@ -22,6 +22,7 @@ use Doctrine\Common\Util\ClassUtils; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Query; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\EntityManagerInterface; @@ -183,7 +184,7 @@ public function loadCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, Ent $assocClass = $data[$name]->class; $assocId = $data[$name]->identifier; - $isEagerLoad = ($assoc['fetch'] === ClassMetadata::FETCH_EAGER || ($assoc['type'] === ClassMetadata::ONE_TO_ONE && ! $assoc['isOwningSide'])); + $isEagerLoad = ($assoc['fetch'] === FetchMode::EAGER || ($assoc['type'] === ClassMetadata::ONE_TO_ONE && ! $assoc['isOwningSide'])); if ( ! $isEagerLoad) { $data[$name] = $this->em->getReference($assocClass, $assocId); diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php index 53ea6a6fded..ef9ecef426e 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php @@ -28,6 +28,7 @@ use Doctrine\ORM\Cache\QueryCacheKey; use Doctrine\ORM\Cache\Persister\CachedPersister; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Persisters\Entity\EntityPersister; @@ -102,7 +103,7 @@ abstract class AbstractEntityPersister implements CachedEntityPersister protected $regionName; /** - * Associations configured as FETCH_EAGER, as well as all inverse one-to-one associations. + * Associations configured as FetchMode::EAGER, as well as all inverse one-to-one associations. * * @var array|null */ @@ -254,7 +255,7 @@ private function storeJoinedAssociations($entity) foreach ($this->class->associationMappings as $name => $assoc) { if (isset($assoc['cache']) && ($assoc['type'] & ClassMetadata::TO_ONE) && - ($assoc['fetch'] === ClassMetadata::FETCH_EAGER || ! $assoc['isOwningSide'])) { + ($assoc['fetch'] === FetchMode::EAGER || ! $assoc['isOwningSide'])) { $associations[] = $name; } diff --git a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php index 143e8cf60a4..6ea9cf1d793 100644 --- a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php @@ -1,4 +1,7 @@ */ private $cascade = []; + /** @var string */ + private $fetchMode = FetchMode::LAZY; + + /** @var string */ + private $mappedBy; + + /** @var null|string */ + private $inversedBy; + + /** @var bool */ + private $orphanRemoval = false; + /** * {@inheritdoc} */ diff --git a/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php index df148d877bf..47772a4ef4a 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Mapping\Builder; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\JoinColumnMetadata; class AssociationBuilder @@ -145,7 +146,7 @@ public function cascadeRefresh() */ public function fetchExtraLazy() { - $this->mapping['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; + $this->mapping['fetch'] = FetchMode::EXTRA_LAZY; return $this; } @@ -155,7 +156,7 @@ public function fetchExtraLazy() */ public function fetchEager() { - $this->mapping['fetch'] = ClassMetadata::FETCH_EAGER; + $this->mapping['fetch'] = FetchMode::EAGER; return $this; } @@ -165,7 +166,7 @@ public function fetchEager() */ public function fetchLazy() { - $this->mapping['fetch'] = ClassMetadata::FETCH_LAZY; + $this->mapping['fetch'] = FetchMode::LAZY; return $this; } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 058d1f6ddd1..cb91bacae2c 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -147,24 +147,6 @@ class ClassMetadata implements ClassMetadataInterface */ const CHANGETRACKING_NOTIFY = 3; - /** - * Specifies that an association is to be fetched when it is first accessed. - */ - const FETCH_LAZY = 2; - - /** - * Specifies that an association is to be fetched when the owner of the - * association is fetched. - */ - const FETCH_EAGER = 3; - - /** - * Specifies that an association is to be fetched lazy (on first access) and that - * commands such as Collection#count, Collection#slice are issued directly against - * the database if the collection is not yet initialized. - */ - const FETCH_EXTRA_LAZY = 4; - /** * Identifies a one-to-one association. */ @@ -457,8 +439,8 @@ class ClassMetadata implements ClassMetadataInterface * Example: array('priority' => 'desc') * * - fetch (integer, optional) - * The fetching strategy to use for the association, usually defaults to FETCH_LAZY. - * Possible values are: ClassMetadata::FETCH_EAGER, ClassMetadata::FETCH_LAZY. + * The fetching strategy to use for the association, usually defaults to LAZY. + * Possible values are: FetchMode::EAGER, FetchMode::LAZY, FetchMode::EXTRA_LAZY. * * - joinTable (array, optional, many-to-many only) * Specification of the join table and its join columns (foreign keys). @@ -1314,7 +1296,7 @@ protected function validateAndCompleteAssociationMapping(array $mapping) // Fetch mode. Default fetch mode to LAZY, if not set. if ( ! isset($mapping['fetch'])) { - $mapping['fetch'] = self::FETCH_LAZY; + $mapping['fetch'] = FetchMode::LAZY; } // Cascades diff --git a/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php b/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php index ad847188594..904143c77bc 100644 --- a/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php @@ -22,6 +22,6 @@ namespace Doctrine\ORM\Mapping; -class DiscriminatorColumnMetadata extends ColumnMetadata +final class DiscriminatorColumnMetadata extends ColumnMetadata { } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 54c42b62329..f284321eba8 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -30,6 +30,7 @@ use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; use Doctrine\ORM\Mapping\Builder\TableMetadataBuilder; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\JoinTableMetadata; @@ -608,7 +609,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat */ private function getFetchMode($className, $fetchMode) { - $fetchModeConstant = sprintf('%s::FETCH_%s', ClassMetadata::class, $fetchMode); + $fetchModeConstant = sprintf('%s::%s', FetchMode::class, $fetchMode); if ( ! defined($fetchModeConstant)) { throw MappingException::invalidFetchMode($className, $fetchMode); diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 6ab56df78c3..b72d3def142 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -367,7 +367,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } if (isset($oneToOneElement['fetch'])) { - $mapping['fetch'] = constant('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . (string) $oneToOneElement['fetch']); + $mapping['fetch'] = constant('Doctrine\ORM\Mapping\FetchMode::' . (string) $oneToOneElement['fetch']); } if (isset($oneToOneElement['mapped-by'])) { @@ -417,7 +417,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) ]; if (isset($oneToManyElement['fetch'])) { - $mapping['fetch'] = constant('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . (string) $oneToManyElement['fetch']); + $mapping['fetch'] = constant('Doctrine\ORM\Mapping\FetchMode::' . (string) $oneToManyElement['fetch']); } if (isset($oneToManyElement->cascade)) { @@ -464,7 +464,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } if (isset($manyToOneElement['fetch'])) { - $mapping['fetch'] = constant('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . (string) $manyToOneElement['fetch']); + $mapping['fetch'] = constant('Doctrine\ORM\Mapping\FetchMode::' . (string) $manyToOneElement['fetch']); } if (isset($manyToOneElement['inversed-by'])) { @@ -506,7 +506,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) ]; if (isset($manyToManyElement['fetch'])) { - $mapping['fetch'] = constant('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . (string) $manyToManyElement['fetch']); + $mapping['fetch'] = constant('Doctrine\ORM\Mapping\FetchMode::' . (string) $manyToManyElement['fetch']); } if (isset($manyToManyElement['orphan-removal'])) { diff --git a/lib/Doctrine/ORM/Mapping/FetchMode.php b/lib/Doctrine/ORM/Mapping/FetchMode.php new file mode 100644 index 00000000000..e6ea54b8421 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/FetchMode.php @@ -0,0 +1,52 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +final class FetchMode +{ + /** + * Specifies that an association is to be fetched when it is first accessed. + */ + const LAZY = 'LAZY'; + + /** + * Specifies that an association is to be fetched when the owner of the + * association is fetched. + */ + const EAGER = 'EAGER'; + + /** + * Specifies that an association is to be fetched lazy (on first access) and that + * commands such as Collection#count, Collection#slice are issued directly against + * the database if the collection is not yet initialized. + */ + const EXTRA_LAZY = 'EXTRA_LAZY'; + + /** + * Will break upon instantiation. + * + */ + private function __construct() + { + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index cc2549ec245..4a52c31a667 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -28,29 +28,19 @@ class FieldMetadata extends ColumnMetadata implements Property { - /** - * @var ClassMetadata - */ + /** @var ClassMetadata */ protected $declaringClass; - /** - * @var \ReflectionProperty - */ + /** @var \ReflectionProperty */ protected $reflection; - /** - * @var string - */ + /** @var string */ protected $name; - /** - * @var int - */ + /** @var int */ protected $identifierGeneratorType = ClassMetadata::GENERATOR_TYPE_NONE; - /** - * @var array - */ + /** @var array */ protected $identifierGeneratorDefinition = []; /** diff --git a/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php b/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php index 46e78174481..9232a84543d 100644 --- a/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php +++ b/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php @@ -22,7 +22,7 @@ namespace Doctrine\ORM\Mapping; -class JoinTableMetadata extends TableMetadata +final class JoinTableMetadata extends TableMetadata { /** @var array */ protected $joinColumns = []; diff --git a/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php b/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php index c70313940e1..bb1c8d2a1de 100644 --- a/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php @@ -22,6 +22,6 @@ namespace Doctrine\ORM\Mapping; -class VersionFieldMetadata extends FieldMetadata +final class VersionFieldMetadata extends FieldMetadata { } \ No newline at end of file diff --git a/lib/Doctrine/ORM/PersistentCollection.php b/lib/Doctrine/ORM/PersistentCollection.php index 2eaebaa142e..cd74a3299dd 100644 --- a/lib/Doctrine/ORM/PersistentCollection.php +++ b/lib/Doctrine/ORM/PersistentCollection.php @@ -25,6 +25,7 @@ use Doctrine\Common\Collections\Selectable; use Doctrine\Common\Collections\Criteria; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FetchMode; /** * A PersistentCollection represents a collection of elements that have persistent state. @@ -366,7 +367,7 @@ public function remove($key) */ public function removeElement($element) { - if ( ! $this->initialized && $this->association['fetch'] === ClassMetadata::FETCH_EXTRA_LAZY) { + if ( ! $this->initialized && $this->association['fetch'] === FetchMode::EXTRA_LAZY) { if ($this->collection->contains($element)) { return $this->collection->removeElement($element); } @@ -399,7 +400,7 @@ public function removeElement($element) */ public function containsKey($key) { - if (! $this->initialized && $this->association['fetch'] === ClassMetadata::FETCH_EXTRA_LAZY + if (! $this->initialized && $this->association['fetch'] === FetchMode::EXTRA_LAZY && isset($this->association['indexBy'])) { $persister = $this->em->getUnitOfWork()->getCollectionPersister($this->association); @@ -414,7 +415,7 @@ public function containsKey($key) */ public function contains($element) { - if ( ! $this->initialized && $this->association['fetch'] === ClassMetadata::FETCH_EXTRA_LAZY) { + if ( ! $this->initialized && $this->association['fetch'] === FetchMode::EXTRA_LAZY) { $persister = $this->em->getUnitOfWork()->getCollectionPersister($this->association); return $this->collection->contains($element) || $persister->contains($this, $element); @@ -428,10 +429,7 @@ public function contains($element) */ public function get($key) { - if ( ! $this->initialized - && $this->association['fetch'] === ClassMetadata::FETCH_EXTRA_LAZY - && isset($this->association['indexBy']) - ) { + if ( ! $this->initialized && $this->association['fetch'] === FetchMode::EXTRA_LAZY && isset($this->association['indexBy'])) { if (!$this->typeClass->isIdentifierComposite && $this->typeClass->isIdentifier($this->association['indexBy'])) { return $this->em->find($this->typeClass->name, $key); } @@ -447,7 +445,7 @@ public function get($key) */ public function count() { - if ( ! $this->initialized && $this->association['fetch'] === ClassMetadata::FETCH_EXTRA_LAZY) { + if ( ! $this->initialized && $this->association['fetch'] === FetchMode::EXTRA_LAZY) { $persister = $this->em->getUnitOfWork()->getCollectionPersister($this->association); return $persister->count($this) + ($this->isDirty ? $this->collection->count() : 0); @@ -599,7 +597,7 @@ public function __sleep() */ public function slice($offset, $length = null) { - if ( ! $this->initialized && ! $this->isDirty && $this->association['fetch'] === ClassMetadata::FETCH_EXTRA_LAZY) { + if ( ! $this->initialized && ! $this->isDirty && $this->association['fetch'] === FetchMode::EXTRA_LAZY) { $persister = $this->em->getUnitOfWork()->getCollectionPersister($this->association); return $persister->slice($this, $offset, $length); @@ -671,7 +669,7 @@ public function matching(Criteria $criteria) $persister = $this->em->getUnitOfWork()->getEntityPersister($this->association['targetEntity']); - return ($this->association['fetch'] === ClassMetadata::FETCH_EXTRA_LAZY) + return ($this->association['fetch'] === FetchMode::EXTRA_LAZY) ? new LazyCriteriaCollection($persister, $criteria) : new ArrayCollection($persister->loadCriteria($criteria)); } diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index b6f545b9c42..a4392173df8 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -28,6 +28,7 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ColumnMetadata; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\OptimisticLockException; @@ -1216,7 +1217,7 @@ protected function getSelectColumnsSQL() } $isAssocToOneInverseSide = $assoc['type'] & ClassMetadata::TO_ONE && ! $assoc['isOwningSide']; - $isAssocFromOneEager = $assoc['type'] !== ClassMetadata::MANY_TO_MANY && $assoc['fetch'] === ClassMetadata::FETCH_EAGER; + $isAssocFromOneEager = $assoc['type'] !== ClassMetadata::MANY_TO_MANY && $assoc['fetch'] === FetchMode::EAGER; if ( ! ($isAssocFromOneEager || $isAssocToOneInverseSide)) { continue; diff --git a/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php b/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php index 132dac7e4de..a02103f91f4 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php +++ b/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php @@ -58,7 +58,7 @@ class CachedPersisterContext /** * The JOIN SQL fragment used to eagerly load all many-to-one and one-to-one - * associations configured as FETCH_EAGER, as well as all inverse one-to-one associations. + * associations configured as FetchMode::EAGER, as well as all inverse one-to-one associations. * * @var string */ diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 3533e30eca8..5e3e79d67f6 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -23,6 +23,7 @@ use Doctrine\Common\Util\Inflector; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; @@ -1549,13 +1550,8 @@ protected function generateAssociationMappingPropertyDocBlock(array $association $typeOptions[] = 'orphanRemoval=' . ($associationMapping['orphanRemoval'] ? 'true' : 'false'); } - if (isset($associationMapping['fetch']) && $associationMapping['fetch'] !== ClassMetadata::FETCH_LAZY) { - $fetchMap = [ - ClassMetadata::FETCH_EXTRA_LAZY => 'EXTRA_LAZY', - ClassMetadata::FETCH_EAGER => 'EAGER', - ]; - - $typeOptions[] = 'fetch="' . $fetchMap[$associationMapping['fetch']] . '"'; + if (isset($associationMapping['fetch']) && $associationMapping['fetch'] !== FetchMode::LAZY) { + $typeOptions[] = 'fetch="' . $associationMapping['fetch'] . '"'; } $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . '' . $type . '(' . implode(', ', $typeOptions) . ')'; diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php index d2eb0408dd9..30e0c5af2d8 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php @@ -201,25 +201,6 @@ protected function _getInheritanceTypeString($type) } } - /** - * @param int $mode - * - * @return string - */ - protected function _getFetchModeString($mode) - { - switch ($mode) { - case ClassMetadata::FETCH_EAGER: - return 'EAGER'; - - case ClassMetadata::FETCH_EXTRA_LAZY: - return 'EXTRA_LAZY'; - - case ClassMetadata::FETCH_LAZY: - return 'LAZY'; - } - } - /** * @param int $policy * diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index b3738d1a02c..93d4eb25908 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -305,7 +305,7 @@ public function exportClassMetadata(ClassMetadata $metadata) } if (isset($associationMapping['fetch'])) { - $associationMappingXml->addAttribute('fetch', $this->_getFetchModeString($associationMapping['fetch'])); + $associationMappingXml->addAttribute('fetch', $associationMapping['fetch']); } $cascades = []; diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 4ee4c7d5570..589764a87ed 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -35,6 +35,7 @@ use Doctrine\ORM\Event\PreUpdateEventArgs; use Doctrine\ORM\Internal\HydrationCompleteHandler; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\Reflection\ReflectionPropertiesGetter; use Doctrine\ORM\Persisters\Collection\ManyToManyPersister; use Doctrine\ORM\Persisters\Collection\OneToManyPersister; @@ -2680,7 +2681,7 @@ public function createEntity($className, array $data, &$hints = []) // If this is an uninitialized proxy, we are deferring eager loads, // this association is marked as eager fetch, and its an uninitialized proxy (wtf!) // then we can append this entity for eager loading! - if ($hints['fetchMode'][$class->name][$field] == ClassMetadata::FETCH_EAGER && + if ($hints['fetchMode'][$class->name][$field] == FetchMode::EAGER && isset($hints[self::HINT_DEFEREAGERLOAD]) && !$targetClass->isIdentifierComposite && $newValue instanceof Proxy && @@ -2701,7 +2702,7 @@ public function createEntity($className, array $data, &$hints = []) default: switch (true) { // We are negating the condition here. Other cases will assume it is valid! - case ($hints['fetchMode'][$class->name][$field] !== ClassMetadata::FETCH_EAGER): + case ($hints['fetchMode'][$class->name][$field] !== FetchMode::EAGER): $newValue = $this->em->getProxyFactory()->getProxy($assoc['targetEntity'], $associatedId); break; @@ -2770,7 +2771,7 @@ public function createEntity($className, array $data, &$hints = []) $reflField = $class->reflFields[$field]; $reflField->setValue($entity, $pColl); - if ($assoc['fetch'] == ClassMetadata::FETCH_EAGER) { + if ($assoc['fetch'] == FetchMode::EAGER) { $this->loadCollection($pColl); $pColl->takeSnapshot(); } diff --git a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php index 864bc781461..42e54feba20 100644 --- a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php @@ -5,6 +5,7 @@ use Doctrine\DBAL\Logging\DebugStack; use Doctrine\ORM\EntityNotFoundException; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\ORMInvalidArgumentException; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\Proxy\Proxy; @@ -986,10 +987,12 @@ public function testManyToOneFetchModeQuery() $qc = $this->getCurrentQueryCount(); $dql = "SELECT a FROM Doctrine\Tests\Models\CMS\CmsArticle a WHERE a.id = ?1"; - $article = $this->_em->createQuery($dql) - ->setParameter(1, $article->id) - ->setFetchMode(CmsArticle::class, 'user', ClassMetadata::FETCH_EAGER) - ->getSingleResult(); + $article = $this->_em + ->createQuery($dql) + ->setParameter(1, $article->id) + ->setFetchMode(CmsArticle::class, 'user', FetchMode::EAGER) + ->getSingleResult(); + self::assertInstanceOf(Proxy::class, $article->user, "It IS a proxy, ..."); self::assertTrue($article->user->__isInitialized__, "...but its initialized!"); self::assertEquals($qc+2, $this->getCurrentQueryCount()); diff --git a/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php index ec943d261fa..3fb55ea019b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Functional; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\Tests\Models\CMS\CmsArticle; use Doctrine\Tests\Models\CMS\CmsGroup; use Doctrine\Tests\Models\CMS\CmsPhonenumber; @@ -41,11 +42,11 @@ public function setUp() parent::setUp(); $class = $this->_em->getClassMetadata(CmsUser::class); - $class->associationMappings['groups']['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; + $class->associationMappings['groups']['fetch'] = FetchMode::EXTRA_LAZY; $class->associationMappings['groups']['indexBy'] = 'name'; - $class->associationMappings['articles']['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; + $class->associationMappings['articles']['fetch'] = FetchMode::EXTRA_LAZY; $class->associationMappings['articles']['indexBy'] = 'topic'; - $class->associationMappings['phonenumbers']['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; + $class->associationMappings['phonenumbers']['fetch'] = FetchMode::EXTRA_LAZY; $class->associationMappings['phonenumbers']['indexBy'] = 'phonenumber'; unset($class->associationMappings['phonenumbers']['cache']); @@ -53,7 +54,7 @@ public function setUp() unset($class->associationMappings['users']['cache']); $class = $this->_em->getClassMetadata(CmsGroup::class); - $class->associationMappings['users']['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; + $class->associationMappings['users']['fetch'] = FetchMode::EXTRA_LAZY; $class->associationMappings['users']['indexBy'] = 'username'; $this->loadFixture(); @@ -64,16 +65,16 @@ public function tearDown() parent::tearDown(); $class = $this->_em->getClassMetadata(CmsUser::class); - $class->associationMappings['groups']['fetch'] = ClassMetadata::FETCH_LAZY; - $class->associationMappings['articles']['fetch'] = ClassMetadata::FETCH_LAZY; - $class->associationMappings['phonenumbers']['fetch'] = ClassMetadata::FETCH_LAZY; + $class->associationMappings['groups']['fetch'] = FetchMode::LAZY; + $class->associationMappings['articles']['fetch'] = FetchMode::LAZY; + $class->associationMappings['phonenumbers']['fetch'] = FetchMode::LAZY; unset($class->associationMappings['groups']['indexBy']); unset($class->associationMappings['articles']['indexBy']); unset($class->associationMappings['phonenumbers']['indexBy']); $class = $this->_em->getClassMetadata(CmsGroup::class); - $class->associationMappings['users']['fetch'] = ClassMetadata::FETCH_LAZY; + $class->associationMappings['users']['fetch'] = FetchMode::LAZY; unset($class->associationMappings['users']['indexBy']); } diff --git a/tests/Doctrine/Tests/ORM/Functional/ManyToManySelfReferentialAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/ManyToManySelfReferentialAssociationTest.php index 5b7364f36cf..e0c1335db5a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ManyToManySelfReferentialAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ManyToManySelfReferentialAssociationTest.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\Tests\Models\ECommerce\ECommerceProduct; use Doctrine\ORM\Mapping\AssociationMapping; use Doctrine\ORM\Mapping\ClassMetadata; @@ -73,7 +74,7 @@ public function testLazyLoadsOwningSide() $this->_createLoadingFixture(); $metadata = $this->_em->getClassMetadata(ECommerceProduct::class); - $metadata->associationMappings['related']['fetch'] = ClassMetadata::FETCH_LAZY; + $metadata->associationMappings['related']['fetch'] = FetchMode::LAZY; $query = $this->_em->createQuery('SELECT p FROM Doctrine\Tests\Models\ECommerce\ECommerceProduct p'); $products = $query->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php index 663d62cfef1..7d866f18781 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\Tests\Models\ECommerce\ECommerceCart; use Doctrine\Tests\Models\ECommerce\ECommerceProduct; use Doctrine\ORM\Mapping\AssociationMapping; @@ -78,7 +79,7 @@ public function testLazyLoadsCollection() { $this->_createFixture(); $metadata = $this->_em->getClassMetadata(ECommerceCart::class); - $metadata->associationMappings['products']['fetch'] = ClassMetadata::FETCH_LAZY; + $metadata->associationMappings['products']['fetch'] = FetchMode::LAZY; $query = $this->_em->createQuery('SELECT c FROM Doctrine\Tests\Models\ECommerce\ECommerceCart c'); $result = $query->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToManySelfReferentialAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToManySelfReferentialAssociationTest.php index fbe7591d902..5d9a5832081 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToManySelfReferentialAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToManySelfReferentialAssociationTest.php @@ -4,6 +4,7 @@ use Doctrine\ORM\Mapping\AssociationMapping; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\Tests\Models\ECommerce\ECommerceCategory; use Doctrine\Tests\OrmFunctionalTestCase; @@ -90,7 +91,7 @@ public function testLazyLoadsOneToManyAssociation() { $this->_createFixture(); $metadata = $this->_em->getClassMetadata(ECommerceCategory::class); - $metadata->associationMappings['children']['fetch'] = ClassMetadata::FETCH_LAZY; + $metadata->associationMappings['children']['fetch'] = FetchMode::LAZY; $query = $this->_em->createQuery('select c from Doctrine\Tests\Models\ECommerce\ECommerceCategory c order by c.id asc'); $result = $query->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneBidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneBidirectionalAssociationTest.php index a6c989b3a8f..4e12f88c40d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneBidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneBidirectionalAssociationTest.php @@ -4,6 +4,7 @@ use Doctrine\ORM\Mapping\AssociationMapping; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Proxy\Proxy; use Doctrine\Tests\Models\ECommerce\ECommerceCart; use Doctrine\Tests\Models\ECommerce\ECommerceCustomer; @@ -69,7 +70,7 @@ public function testEagerLoad() public function testLazyLoadsObjectsOnTheOwningSide() { $this->_createFixture(); $metadata = $this->_em->getClassMetadata(ECommerceCart::class); - $metadata->associationMappings['customer']['fetchMode'] = ClassMetadata::FETCH_LAZY; + $metadata->associationMappings['customer']['fetchMode'] = FetchMode::LAZY; $query = $this->_em->createQuery('select c from Doctrine\Tests\Models\ECommerce\ECommerceCart c'); $result = $query->getResult(); @@ -83,7 +84,7 @@ public function testInverseSideIsNeverLazy() { $this->_createFixture(); $metadata = $this->_em->getClassMetadata(ECommerceCustomer::class); - $metadata->associationMappings['mentor']['fetch'] = ClassMetadata::FETCH_EAGER; + $metadata->associationMappings['mentor']['fetch'] = FetchMode::EAGER; $query = $this->_em->createQuery('select c from Doctrine\Tests\Models\ECommerce\ECommerceCustomer c'); $result = $query->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneSelfReferentialAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneSelfReferentialAssociationTest.php index f15196b6d22..668aee967e1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneSelfReferentialAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneSelfReferentialAssociationTest.php @@ -4,6 +4,7 @@ use Doctrine\ORM\Mapping\AssociationMapping; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Proxy\Proxy; use Doctrine\Tests\Models\ECommerce\ECommerceCustomer; use Doctrine\Tests\OrmFunctionalTestCase; @@ -76,7 +77,7 @@ public function testLazyLoadsAssociation() $this->_createFixture(); $metadata = $this->_em->getClassMetadata(ECommerceCustomer::class); - $metadata->associationMappings['mentor']['fetch'] = ClassMetadata::FETCH_LAZY; + $metadata->associationMappings['mentor']['fetch'] = FetchMode::LAZY; $query = $this->_em->createQuery("select c from Doctrine\Tests\Models\ECommerce\ECommerceCustomer c where c.name='Luke Skywalker'"); $result = $query->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php index 1e6a17d9e18..992a58af54d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php @@ -4,6 +4,7 @@ use Doctrine\ORM\Mapping\AssociationMapping; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Query; use Doctrine\Tests\Models\ECommerce\ECommerceProduct; use Doctrine\Tests\Models\ECommerce\ECommerceShipping; @@ -62,7 +63,7 @@ public function _testEagerLoad() public function testLazyLoadsObjects() { $this->_createFixture(); $metadata = $this->_em->getClassMetadata(ECommerceProduct::class); - $metadata->associationMappings['shipping']['fetch'] = ClassMetadata::FETCH_LAZY; + $metadata->associationMappings['shipping']['fetch'] = FetchMode::LAZY; $query = $this->_em->createQuery('select p from Doctrine\Tests\Models\ECommerce\ECommerceProduct p'); $result = $query->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionTest.php index e4537695a8c..5a70681046b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionTest.php @@ -45,7 +45,7 @@ public function testPersist() } /** - * Tests that PersistentCollection::isEmpty() does not initialize the collection when FETCH_EXTRA_LAZY is used. + * Tests that PersistentCollection::isEmpty() does not initialize the collection when FetchMode::EXTRA_LAZY is used. */ public function testExtraLazyIsEmptyDoesNotInitializeCollection() { diff --git a/tests/Doctrine/Tests/ORM/Functional/QueryTest.php b/tests/Doctrine/Tests/ORM/Functional/QueryTest.php index 90cf7c661d7..bf2c2ae7bcc 100644 --- a/tests/Doctrine/Tests/ORM/Functional/QueryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/QueryTest.php @@ -4,6 +4,7 @@ use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\NonUniqueResultException; use Doctrine\ORM\Proxy\Proxy; use Doctrine\ORM\Query\QueryException; @@ -464,24 +465,31 @@ public function testEnableFetchEagerMode() { for ($i = 0; $i < 10; $i++) { $article = new CmsArticle; + $article->topic = "dr. dolittle"; $article->text = "Once upon a time ..."; + $author = new CmsUser; + $author->name = "anonymous"; $author->username = "anon".$i; $author->status = "here"; $article->user = $author; + $this->_em->persist($author); $this->_em->persist($article); } + $this->_em->flush(); $this->_em->clear(); - $articles = $this->_em->createQuery('select a from Doctrine\Tests\Models\CMS\CmsArticle a') - ->setFetchMode(CmsArticle::class, 'user', ClassMetadata::FETCH_EAGER) - ->getResult(); + $articles = $this->_em + ->createQuery('select a from Doctrine\Tests\Models\CMS\CmsArticle a') + ->setFetchMode(CmsArticle::class, 'user', FetchMode::EAGER) + ->getResult(); self::assertEquals(10, count($articles)); + foreach ($articles AS $article) { self::assertNotInstanceOf(Proxy::class, $article); } diff --git a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php index 90d84e9ba2e..52bf4604211 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php @@ -8,6 +8,7 @@ use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManager; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Query\Filter\SQLFilter; use Doctrine\ORM\Query\FilterCollection; use Doctrine\Tests\Models\CMS\CmsAddress; @@ -50,8 +51,8 @@ public function tearDown() parent::tearDown(); $class = $this->_em->getClassMetadata(CmsUser::class); - $class->associationMappings['groups']['fetch'] = ClassMetadata::FETCH_LAZY; - $class->associationMappings['articles']['fetch'] = ClassMetadata::FETCH_LAZY; + $class->associationMappings['groups']['fetch'] = FetchMode::LAZY; + $class->associationMappings['articles']['fetch'] = FetchMode::LAZY; } public function testConfigureFilter() @@ -522,8 +523,8 @@ public function testWhereOrFilter() private function loadLazyFixtureData() { $class = $this->_em->getClassMetadata(CmsUser::class); - $class->associationMappings['articles']['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; - $class->associationMappings['groups']['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; + $class->associationMappings['articles']['fetch'] = FetchMode::EXTRA_LAZY; + $class->associationMappings['groups']['fetch'] = FetchMode::EXTRA_LAZY; $this->loadFixtureData(); } diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheExtraLazyCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheExtraLazyCollectionTest.php index b0ff34c91eb..7c204a1de96 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheExtraLazyCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheExtraLazyCollectionTest.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\Tests\Models\Cache\City; use Doctrine\Tests\Models\Cache\State; use Doctrine\Tests\Models\Cache\Travel; @@ -19,8 +20,8 @@ public function setUp() $sourceEntity = $this->_em->getClassMetadata(Travel::class); $targetEntity = $this->_em->getClassMetadata(City::class); - $sourceEntity->associationMappings['visitedCities']['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; - $targetEntity->associationMappings['travels']['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; + $sourceEntity->associationMappings['visitedCities']['fetch'] = FetchMode::EXTRA_LAZY; + $targetEntity->associationMappings['travels']['fetch'] = FetchMode::EXTRA_LAZY; } public function tearDown() @@ -30,8 +31,8 @@ public function tearDown() $sourceEntity = $this->_em->getClassMetadata(Travel::class); $targetEntity = $this->_em->getClassMetadata(City::class); - $sourceEntity->associationMappings['visitedCities']['fetch'] = ClassMetadata::FETCH_LAZY; - $targetEntity->associationMappings['travels']['fetch'] = ClassMetadata::FETCH_LAZY; + $sourceEntity->associationMappings['visitedCities']['fetch'] = FetchMode::LAZY; + $targetEntity->associationMappings['travels']['fetch'] = FetchMode::LAZY; } public function testCacheCountAfterAddThenFlush() diff --git a/tests/Doctrine/Tests/ORM/Functional/SingleTableInheritanceTest.php b/tests/Doctrine/Tests/ORM/Functional/SingleTableInheritanceTest.php index d3ba9ed74f3..e6d3f8d7fb6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SingleTableInheritanceTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SingleTableInheritanceTest.php @@ -4,6 +4,7 @@ use Doctrine\Common\Collections\Criteria; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Persisters\PersisterException; use Doctrine\ORM\Proxy\Proxy; use Doctrine\Tests\Models\Company\CompanyContract; @@ -410,10 +411,11 @@ public function testEagerLoadInheritanceHierarchy() $this->loadFullFixture(); $dql = 'SELECT f FROM Doctrine\Tests\Models\Company\CompanyFixContract f WHERE f.id = ?1'; - $contract = $this->_em->createQuery($dql) - ->setFetchMode(CompanyFixContract::class, 'salesPerson', ClassMetadata::FETCH_EAGER) - ->setParameter(1, $this->fix->getId()) - ->getSingleResult(); + $contract = $this->_em + ->createQuery($dql) + ->setFetchMode(CompanyFixContract::class, 'salesPerson', FetchMode::EAGER) + ->setParameter(1, $this->fix->getId()) + ->getSingleResult(); self::assertNotInstanceOf(Proxy::class, $contract->getSalesPerson()); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php index 6637347133a..d08a81b6c97 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\Tests\Models; /** @@ -21,9 +22,9 @@ public function setUp() parent::setUp(); $class = $this->_em->getClassMetadata(Models\Legacy\LegacyUser::class); - $class->associationMappings['_articles']['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; - $class->associationMappings['_references']['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; - $class->associationMappings['_cars']['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; + $class->associationMappings['_articles']['fetch'] = FetchMode::EXTRA_LAZY; + $class->associationMappings['_references']['fetch'] = FetchMode::EXTRA_LAZY; + $class->associationMappings['_cars']['fetch'] = FetchMode::EXTRA_LAZY; $this->loadFixture(); } @@ -33,9 +34,9 @@ public function tearDown() parent::tearDown(); $class = $this->_em->getClassMetadata(Models\Legacy\LegacyUser::class); - $class->associationMappings['_articles']['fetch'] = ClassMetadata::FETCH_LAZY; - $class->associationMappings['_references']['fetch'] = ClassMetadata::FETCH_LAZY; - $class->associationMappings['_cars']['fetch'] = ClassMetadata::FETCH_LAZY; + $class->associationMappings['_articles']['fetch'] = FetchMode::LAZY; + $class->associationMappings['_references']['fetch'] = FetchMode::LAZY; + $class->associationMappings['_cars']['fetch'] = FetchMode::LAZY; } public function testCountNotInitializesLegacyCollection() diff --git a/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php index a338bda8fb1..226c0c01922 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php @@ -4,6 +4,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\Proxy\ProxyFactory; use Doctrine\ORM\Query; @@ -1034,7 +1035,7 @@ public function testCreatesProxyForLazyLoadingWithForeignKeys() // configuring lazy loading $metadata = $this->_em->getClassMetadata(ECommerceProduct::class); - $metadata->associationMappings['shipping']['fetch'] = ClassMetadata::FETCH_LAZY; + $metadata->associationMappings['shipping']['fetch'] = FetchMode::LAZY; $stmt = new HydratorMockStatement($resultSet); $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); @@ -1083,7 +1084,7 @@ public function testCreatesProxyForLazyLoadingWithForeignKeysWithAliasedProductE // configuring lazy loading $metadata = $this->_em->getClassMetadata(ECommerceProduct::class); - $metadata->associationMappings['shipping']['fetch'] = ClassMetadata::FETCH_LAZY; + $metadata->associationMappings['shipping']['fetch'] = FetchMode::LAZY; $stmt = new HydratorMockStatement($resultSet); $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); diff --git a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php index bb039dcc9ca..b91158f559d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php @@ -12,6 +12,7 @@ use Doctrine\Tests\Models\CMS\CmsGroup; use Doctrine\Tests\Models\CMS\CmsUser; use Doctrine\Tests\Models\ValueObjects\Name; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\Tests\OrmTestCase; /** @@ -336,7 +337,7 @@ public function testCreateManyToOne() 3 => 'merge', 4 => 'detach', ], - 'fetch' => 4, + 'fetch' => FetchMode::EXTRA_LAZY, 'joinColumns' => [ 0 => [ 'name' => 'group_id', @@ -386,7 +387,7 @@ public function testCreateManyToOneWithIdentity() 3 => 'merge', 4 => 'detach', ], - 'fetch' => 4, + 'fetch' => FetchMode::EXTRA_LAZY, 'joinColumns' => [ 0 => [ 'name' => 'group_id', @@ -434,7 +435,7 @@ public function testCreateOneToOne() 3 => 'merge', 4 => 'detach', ], - 'fetch' => 4, + 'fetch' => FetchMode::EXTRA_LAZY, 'joinColumns' => [ 0 => [ 'name' => 'group_id', @@ -482,7 +483,7 @@ public function testCreateOneToOneWithIdentity() 3 => 'merge', 4 => 'detach', ], - 'fetch' => 4, + 'fetch' => FetchMode::EXTRA_LAZY, 'id' => true, 'joinColumns' => [ 0 => [ @@ -546,7 +547,7 @@ public function testCreateManyToMany() 3 => 'merge', 4 => 'detach', ], - 'fetch' => 4, + 'fetch' => FetchMode::EXTRA_LAZY, 'joinTable' => [ 'joinColumns' =>[ 0 => [ @@ -621,7 +622,7 @@ public function testCreateOneToMany() 'inversedBy' => NULL, 'isOwningSide' => false, 'sourceEntity' => CmsUser::class, - 'fetch' => 2, + 'fetch' => FetchMode::LAZY, 'cascade' => [], 'orphanRemoval' => false, 'declaringClass' => $this->cm, @@ -659,7 +660,7 @@ public function testOrphanRemovalOnCreateOneToOne() 'fieldName' => 'groups', 'targetEntity' => CmsGroup::class, 'cascade' => [0 => 'remove'], - 'fetch' => 2, + 'fetch' => FetchMode::LAZY, 'joinColumns' => [ 0 => [ 'name' => 'group_id', @@ -704,7 +705,7 @@ public function testOrphanRemovalOnCreateOneToMany() 'inversedBy' => NULL, 'isOwningSide' => false, 'sourceEntity' => CmsUser::class, - 'fetch' => 2, + 'fetch' => FetchMode::LAZY, 'cascade' => [0 => 'remove'], 'orphanRemoval' => true, 'declaringClass' => $this->cm, @@ -739,7 +740,7 @@ public function testOrphanRemovalOnManyToMany() 'fieldName' => 'groups', 'targetEntity' => CmsGroup::class, 'cascade' => [], - 'fetch' => 2, + 'fetch' => FetchMode::LAZY, 'joinTable' => [ 'joinColumns' => [ 0 => [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 6c00c615bf3..fcb5961b58e 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -89,7 +89,7 @@ public function testClassMetadataInstanceSerialization() $oneOneMapping = $cm->getAssociationMapping('phonenumbers'); - self::assertTrue($oneOneMapping['fetch'] == ClassMetadata::FETCH_LAZY); + self::assertTrue($oneOneMapping['fetch'] == Mapping\FetchMode::LAZY); self::assertEquals('phonenumbers', $oneOneMapping['fieldName']); self::assertEquals(CMS\CmsAddress::class, $oneOneMapping['targetEntity']); self::assertTrue($cm->isReadOnly); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 737351d4bad..63d1cba4bc4 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -153,7 +153,7 @@ public function generateBookEntityFixture(array $embeddedClasses = []) [ 'fieldName' => 'comments', 'targetEntity' => 'Doctrine\Tests\ORM\Tools\EntityGeneratorComment', - 'fetch' => ClassMetadata::FETCH_EXTRA_LAZY, + 'fetch' => Mapping\FetchMode::EXTRA_LAZY, 'joinTable' => $joinTable, ] ); @@ -562,7 +562,7 @@ public function testLoadMetadata() // self::assertEquals($cm->embeddedClasses, $metadata->embeddedClasses); // self::assertEquals($cm->isEmbeddedClass, $metadata->isEmbeddedClass); - self::assertEquals(ClassMetadata::FETCH_EXTRA_LAZY, $cm->associationMappings['comments']['fetch']); + self::assertEquals(Mapping\FetchMode::EXTRA_LAZY, $cm->associationMappings['comments']['fetch']); // $isbn = $this->newInstance($embeddedMetadata); // diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index 34d0d00397f..6258025c6e5 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -5,6 +5,7 @@ use Doctrine\Common\EventManager; use Doctrine\Common\Persistence\Mapping\Driver\PHPDriver; use Doctrine\ORM\Configuration; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; @@ -243,7 +244,7 @@ public function testOneToOneAssociationsAreExported($class) self::assertNotContains('merge', $association['cascade']); self::assertNotContains('detach', $association['cascade']); self::assertTrue($association['orphanRemoval']); - self::assertEquals(ClassMetadata::FETCH_EAGER, $association['fetch']); + self::assertEquals(FetchMode::EAGER, $association['fetch']); return $class; } @@ -275,7 +276,7 @@ public function testOneToManyAssociationsAreExported($class) self::assertContains('merge', $class->associationMappings['phonenumbers']['cascade']); self::assertNotContains('detach', $class->associationMappings['phonenumbers']['cascade']); self::assertTrue($class->associationMappings['phonenumbers']['orphanRemoval']); - self::assertEquals(ClassMetadata::FETCH_LAZY, $class->associationMappings['phonenumbers']['fetch']); + self::assertEquals(FetchMode::LAZY, $class->associationMappings['phonenumbers']['fetch']); return $class; } @@ -311,7 +312,7 @@ public function testManyToManyAssociationsAreExported($class) self::assertContains('merge', $association['cascade']); self::assertContains('detach', $association['cascade']); - self::assertEquals(ClassMetadata::FETCH_EXTRA_LAZY, $association['fetch']); + self::assertEquals(FetchMode::EXTRA_LAZY, $association['fetch']); return $class; } diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php index 96c7584361b..601f40ccd42 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php @@ -82,7 +82,7 @@ 'mappedBy' => null, 'joinColumns' => $joinColumns, 'orphanRemoval' => true, - 'fetch' => ClassMetadata::FETCH_EAGER, + 'fetch' => Mapping\FetchMode::EAGER, ] ); @@ -94,7 +94,7 @@ 'cascade' => ['persist'], 'inversedBy' => null, 'orphanRemoval' => false, - 'fetch' => ClassMetadata::FETCH_EAGER, + 'fetch' => Mapping\FetchMode::EAGER, ] ); @@ -105,7 +105,7 @@ 'cascade' => ['persist', 'merge'], 'mappedBy' => 'user', 'orphanRemoval' => true, - 'fetch' => ClassMetadata::FETCH_LAZY, + 'fetch' => Mapping\FetchMode::LAZY, 'orderBy' => ['number' => 'ASC'], ] ); @@ -136,6 +136,6 @@ 'mappedBy' => null, 'orderBy' => null, 'joinTable' => $joinTable, - 'fetch' => ClassMetadata::FETCH_EXTRA_LAZY, + 'fetch' => Mapping\FetchMode::EXTRA_LAZY, ] ); From 337e4187e4873fdd9a74188ca9caf6e48183acbf Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 22 Oct 2016 10:13:16 +0000 Subject: [PATCH 079/275] Removed ClassMetadata::CACHE_USAGE_* constants and created CacheUsage::* --- .../ORM/Cache/DefaultCacheFactory.php | 54 +++++++++---------- lib/Doctrine/ORM/Mapping/CacheUsage.php | 49 +++++++++++++++++ lib/Doctrine/ORM/Mapping/ClassMetadata.php | 19 +------ .../ORM/Mapping/Driver/AnnotationDriver.php | 5 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 7 +-- .../EventListener/CacheMetadataListener.php | 3 +- .../ORM/Cache/DefaultCacheFactoryTest.php | 26 ++++----- .../SecondLevelCacheConcurrentTest.php | 3 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 6 +-- .../php/Doctrine.Tests.Models.Cache.City.php | 6 +-- .../php/Doctrine.Tests.ORM.Mapping.PHPSLC.php | 6 +-- 11 files changed, 111 insertions(+), 73 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/CacheUsage.php diff --git a/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php b/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php index 77a773a53c8..9d23fd23161 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php +++ b/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php @@ -35,6 +35,7 @@ use Doctrine\ORM\Cache\Region\FileLockRegion; use Doctrine\ORM\Cache\Region\UpdateTimestampCache; use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\CacheUsage; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Persisters\Collection\CollectionPersister; use Doctrine\ORM\Persisters\Entity\EntityPersister; @@ -117,22 +118,22 @@ public function setTimestampRegion(TimestampRegion $region) */ public function buildCachedEntityPersister(EntityManagerInterface $em, EntityPersister $persister, ClassMetadata $metadata) { - $region = $this->getRegion($metadata->cache); - $usage = $metadata->cache['usage']; + $region = $this->getRegion($metadata->cache); + $usage = $metadata->cache['usage']; - if ($usage === ClassMetadata::CACHE_USAGE_READ_ONLY) { - return new ReadOnlyCachedEntityPersister($persister, $region, $em, $metadata); - } + switch ($usage) { + case CacheUsage::READ_ONLY: + return new ReadOnlyCachedEntityPersister($persister, $region, $em, $metadata); - if ($usage === ClassMetadata::CACHE_USAGE_NONSTRICT_READ_WRITE) { - return new NonStrictReadWriteCachedEntityPersister($persister, $region, $em, $metadata); - } + case CacheUsage::READ_WRITE: + return new ReadWriteCachedEntityPersister($persister, $region, $em, $metadata); - if ($usage === ClassMetadata::CACHE_USAGE_READ_WRITE) { - return new ReadWriteCachedEntityPersister($persister, $region, $em, $metadata); - } + case CacheUsage::NONSTRICT_READ_WRITE: + return new NonStrictReadWriteCachedEntityPersister($persister, $region, $em, $metadata); - throw new \InvalidArgumentException(sprintf("Unrecognized access strategy type [%s]", $usage)); + default: + throw new \InvalidArgumentException(sprintf("Unrecognized access strategy type [%s]", $usage)); + } } /** @@ -140,22 +141,22 @@ public function buildCachedEntityPersister(EntityManagerInterface $em, EntityPer */ public function buildCachedCollectionPersister(EntityManagerInterface $em, CollectionPersister $persister, array $mapping) { - $usage = $mapping['cache']['usage']; - $region = $this->getRegion($mapping['cache']); + $region = $this->getRegion($mapping['cache']); + $usage = $mapping['cache']['usage']; - if ($usage === ClassMetadata::CACHE_USAGE_READ_ONLY) { - return new ReadOnlyCachedCollectionPersister($persister, $region, $em, $mapping); - } + switch ($usage) { + case CacheUsage::READ_ONLY: + return new ReadOnlyCachedCollectionPersister($persister, $region, $em, $mapping); - if ($usage === ClassMetadata::CACHE_USAGE_NONSTRICT_READ_WRITE) { - return new NonStrictReadWriteCachedCollectionPersister($persister, $region, $em, $mapping); - } + case CacheUsage::READ_WRITE: + return new ReadWriteCachedCollectionPersister($persister, $region, $em, $mapping); - if ($usage === ClassMetadata::CACHE_USAGE_READ_WRITE) { - return new ReadWriteCachedCollectionPersister($persister, $region, $em, $mapping); - } + case CacheUsage::NONSTRICT_READ_WRITE: + return new NonStrictReadWriteCachedCollectionPersister($persister, $region, $em, $mapping); - throw new \InvalidArgumentException(sprintf("Unrecognized access strategy type [%s]", $usage)); + default: + throw new \InvalidArgumentException(sprintf("Unrecognized access strategy type [%s]", $usage)); + } } /** @@ -168,7 +169,7 @@ public function buildQueryCache(EntityManagerInterface $em, $regionName = null) $this->getRegion( [ 'region' => $regionName ?: Cache::DEFAULT_QUERY_REGION_NAME, - 'usage' => ClassMetadata::CACHE_USAGE_NONSTRICT_READ_WRITE + 'usage' => CacheUsage::NONSTRICT_READ_WRITE, ] ) ); @@ -207,8 +208,7 @@ public function getRegion(array $cache) ? new DefaultMultiGetRegion($name, $cacheAdapter, $lifetime) : new DefaultRegion($name, $cacheAdapter, $lifetime); - if ($cache['usage'] === ClassMetadata::CACHE_USAGE_READ_WRITE) { - + if ($cache['usage'] === CacheUsage::READ_WRITE) { if ( ! $this->fileLockRegionDirectory) { throw new \LogicException( 'If you want to use a "READ_WRITE" cache an implementation of "Doctrine\ORM\Cache\ConcurrentRegion" is required, ' . diff --git a/lib/Doctrine/ORM/Mapping/CacheUsage.php b/lib/Doctrine/ORM/Mapping/CacheUsage.php new file mode 100644 index 00000000000..10d5cc54252 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/CacheUsage.php @@ -0,0 +1,49 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +final class CacheUsage +{ + /** + * ReadOnly cache can do reads, inserts and deletes, cannot perform updates or employ any locks, + */ + const READ_ONLY = 'READ_ONLY'; + + /** + * Read Write Attempts to lock the entity before update/delete. + */ + const READ_WRITE = 'READ_WRITE'; + + /** + * Nonstrict Read Write Cache doesn’t employ any locks but can do inserts, update and deletes. + */ + const NONSTRICT_READ_WRITE = 'NONSTRICT_READ_WRITE'; + + /** + * Will break upon instantiation. + * + */ + private function __construct() + { + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index cb91bacae2c..274a651889e 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -177,21 +177,6 @@ class ClassMetadata implements ClassMetadataInterface */ const TO_MANY = 12; - /** - * ReadOnly cache can do reads, inserts and deletes, cannot perform updates or employ any locks, - */ - const CACHE_USAGE_READ_ONLY = 1; - - /** - * Nonstrict Read Write Cache doesn’t employ any locks but can do inserts, update and deletes. - */ - const CACHE_USAGE_NONSTRICT_READ_WRITE = 2; - - /** - * Read Write Attempts to lock the entity before update/delete. - */ - const CACHE_USAGE_READ_WRITE = 3; - /** * READ-ONLY: The name of the entity class. * @@ -948,7 +933,7 @@ public function getReflectionClass() public function enableCache(array $cache) { if ( ! isset($cache['usage'])) { - $cache['usage'] = self::CACHE_USAGE_READ_ONLY; + $cache['usage'] = CacheUsage::READ_ONLY; } if ( ! isset($cache['region'])) { @@ -980,7 +965,7 @@ public function getAssociationCacheDefaults($fieldName, array $cache) if ( ! isset($cache['usage'])) { $cache['usage'] = isset($this->cache['usage']) ? $this->cache['usage'] - : self::CACHE_USAGE_READ_ONLY; + : CacheUsage::READ_ONLY; } if ( ! isset($cache['region'])) { diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index f284321eba8..5b91f54b0f4 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -29,6 +29,7 @@ use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; use Doctrine\ORM\Mapping\Builder\TableMetadataBuilder; +use Doctrine\ORM\Mapping\CacheUsage; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\FieldMetadata; @@ -153,7 +154,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $cacheAnnot = $classAnnotations[Annotation\Cache::class]; $builder->setCache( - constant(sprintf('%s::CACHE_USAGE_%s', ClassMetadata::class, $cacheAnnot->usage)), + constant(sprintf('%s::%s', CacheUsage::class, $cacheAnnot->usage)), $cacheAnnot->region ); } @@ -357,7 +358,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $mapping['cache'] = $metadata->getAssociationCacheDefaults( $mapping['fieldName'], [ - 'usage' => constant(sprintf('%s::CACHE_USAGE_%s', ClassMetadata::class, $cacheAnnot->usage)), + 'usage' => constant(sprintf('%s::%s', CacheUsage::class, $cacheAnnot->usage)), 'region' => $cacheAnnot->region, ] ); diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index b72d3def142..b3420fc4330 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -19,11 +19,12 @@ namespace Doctrine\ORM\Mapping\Driver; -use Doctrine\Common\Persistence\Mapping\ClassMetadata; use Doctrine\Common\Persistence\Mapping\Driver\FileDriver; +use Doctrine\Common\Persistence\Mapping\ClassMetadata; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; +use Doctrine\ORM\Mapping\CacheUsage; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\JoinTableMetadata; @@ -824,12 +825,12 @@ private function cacheToArray(SimpleXMLElement $cacheMapping) $region = isset($cacheMapping['region']) ? (string) $cacheMapping['region'] : null; $usage = isset($cacheMapping['usage']) ? strtoupper($cacheMapping['usage']) : null; - if ($usage && ! defined('Doctrine\ORM\Mapping\ClassMetadata::CACHE_USAGE_' . $usage)) { + if ($usage && ! defined(sprintf('%s::%s', CacheUsage::class, $usage))) { throw new \InvalidArgumentException(sprintf('Invalid cache usage "%s"', $usage)); } if ($usage) { - $usage = constant('Doctrine\ORM\Mapping\ClassMetadata::CACHE_USAGE_' . $usage); + $usage = constant(sprintf('%s::%s', CacheUsage::class, $usage)); } return [ diff --git a/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php b/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php index 814c7b70375..a6aa127616a 100644 --- a/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php +++ b/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php @@ -4,6 +4,7 @@ use Doctrine\Common\Persistence\Event\LoadClassMetadataEventArgs; use Doctrine\ORM\EntityManager; +use Doctrine\ORM\Mapping\CacheUsage; use Doctrine\ORM\Mapping\ClassMetadata; class CacheMetadataListener @@ -64,7 +65,7 @@ protected function enableCaching(ClassMetadata $metadata, EntityManager $em) } $cache = [ - 'usage' => ClassMetadata::CACHE_USAGE_NONSTRICT_READ_WRITE + 'usage' => CacheUsage::NONSTRICT_READ_WRITE, ]; if ($metadata->isVersioned()) { diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php index 74abef696cd..0894e89dd74 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php @@ -17,7 +17,7 @@ use Doctrine\ORM\Cache\Region\DefaultMultiGetRegion; use Doctrine\ORM\Cache\Region\DefaultRegion; use Doctrine\ORM\Cache\RegionsConfiguration; -use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\CacheUsage; use Doctrine\ORM\Persisters\Collection\OneToManyPersister; use Doctrine\ORM\Persisters\Entity\BasicEntityPersister; use Doctrine\Tests\Mocks\ConcurrentRegionMock; @@ -73,7 +73,7 @@ public function testBuildCachedEntityPersisterReadOnly() $persister = new BasicEntityPersister($em, $metadata); $region = new ConcurrentRegionMock(new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl())); - $metadata->cache['usage'] = ClassMetadata::CACHE_USAGE_READ_ONLY; + $metadata->cache['usage'] = CacheUsage::READ_ONLY; $this->factory->expects($this->once()) ->method('getRegion') @@ -93,7 +93,7 @@ public function testBuildCachedEntityPersisterReadWrite() $persister = new BasicEntityPersister($em, $metadata); $region = new ConcurrentRegionMock(new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl())); - $metadata->cache['usage'] = ClassMetadata::CACHE_USAGE_READ_WRITE; + $metadata->cache['usage'] = CacheUsage::READ_WRITE; $this->factory->expects($this->once()) ->method('getRegion') @@ -113,7 +113,7 @@ public function testBuildCachedEntityPersisterNonStrictReadWrite() $persister = new BasicEntityPersister($em, $metadata); $region = new ConcurrentRegionMock(new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl())); - $metadata->cache['usage'] = ClassMetadata::CACHE_USAGE_NONSTRICT_READ_WRITE; + $metadata->cache['usage'] = CacheUsage::NONSTRICT_READ_WRITE; $this->factory->expects($this->once()) ->method('getRegion') @@ -134,7 +134,7 @@ public function testBuildCachedCollectionPersisterReadOnly() $persister = new OneToManyPersister($em); $region = new ConcurrentRegionMock(new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl())); - $mapping['cache']['usage'] = ClassMetadata::CACHE_USAGE_READ_ONLY; + $mapping['cache']['usage'] = CacheUsage::READ_ONLY; $this->factory->expects($this->once()) ->method('getRegion') @@ -156,7 +156,7 @@ public function testBuildCachedCollectionPersisterReadWrite() $persister = new OneToManyPersister($em); $region = new ConcurrentRegionMock(new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl())); - $mapping['cache']['usage'] = ClassMetadata::CACHE_USAGE_READ_WRITE; + $mapping['cache']['usage'] = CacheUsage::READ_WRITE; $this->factory->expects($this->once()) ->method('getRegion') @@ -177,7 +177,7 @@ public function testBuildCachedCollectionPersisterNonStrictReadWrite() $persister = new OneToManyPersister($em); $region = new ConcurrentRegionMock(new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl())); - $mapping['cache']['usage'] = ClassMetadata::CACHE_USAGE_NONSTRICT_READ_WRITE; + $mapping['cache']['usage'] = CacheUsage::NONSTRICT_READ_WRITE; $this->factory->expects($this->once()) ->method('getRegion') @@ -269,8 +269,8 @@ public function testInvalidFileLockRegionDirectoryException() $factory->getRegion( [ - 'usage' => ClassMetadata::CACHE_USAGE_READ_WRITE, - 'region' => 'foo' + 'region' => 'foo', + 'usage' => CacheUsage::READ_WRITE, ] ); } @@ -282,13 +282,13 @@ public function testBuildsNewNamespacedCacheInstancePerRegionInstance() $fooRegion = $factory->getRegion( [ 'region' => 'foo', - 'usage' => ClassMetadata::CACHE_USAGE_READ_ONLY, + 'usage' => CacheUsage::READ_ONLY, ] ); $barRegion = $factory->getRegion( [ 'region' => 'bar', - 'usage' => ClassMetadata::CACHE_USAGE_READ_ONLY, + 'usage' => CacheUsage::READ_ONLY, ] ); @@ -332,7 +332,7 @@ public function testBuildsDefaultCacheRegionFromGenericCacheRegion() $factory->getRegion( [ 'region' => 'bar', - 'usage' => ClassMetadata::CACHE_USAGE_READ_ONLY, + 'usage' => CacheUsage::READ_ONLY, ] ) ); @@ -350,7 +350,7 @@ public function testBuildsMultiGetCacheRegionFromGenericCacheRegion() $factory->getRegion( [ 'region' => 'bar', - 'usage' => ClassMetadata::CACHE_USAGE_READ_ONLY, + 'usage' => CacheUsage::READ_ONLY, ] ) ); diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php index 3f607676fbe..bb061cf27b7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Functional; use Doctrine\ORM\Cache\DefaultCacheFactory; +use Doctrine\ORM\Mapping\CacheUsage; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Tests\Mocks\ConcurrentRegionMock; use Doctrine\ORM\Cache\Region\DefaultRegion; @@ -40,7 +41,7 @@ protected function setUp() $this->countryMetadata = $this->_em->getClassMetadata(Country::class); $countryMetadata = clone $this->countryMetadata; - $countryMetadata->cache['usage'] = ClassMetadata::CACHE_USAGE_NONSTRICT_READ_WRITE; + $countryMetadata->cache['usage'] = CacheUsage::NONSTRICT_READ_WRITE; $this->_em->getMetadataFactory()->setMetadataFor(Country::class, $countryMetadata); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index be96d64dc34..33046c8cb21 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -1031,21 +1031,21 @@ public function testSecondLevelCacheMapping() self::assertArrayHasKey('usage', $class->cache); self::assertArrayHasKey('region', $class->cache); - self::assertEquals(ClassMetadata::CACHE_USAGE_READ_ONLY, $class->cache['usage']); + self::assertEquals(Mapping\CacheUsage::READ_ONLY, $class->cache['usage']); self::assertEquals('doctrine_tests_models_cache_city', $class->cache['region']); self::assertArrayHasKey('state', $class->associationMappings); self::assertArrayHasKey('cache', $class->associationMappings['state']); self::assertArrayHasKey('usage', $class->associationMappings['state']['cache']); self::assertArrayHasKey('region', $class->associationMappings['state']['cache']); - self::assertEquals(ClassMetadata::CACHE_USAGE_READ_ONLY, $class->associationMappings['state']['cache']['usage']); + self::assertEquals(Mapping\CacheUsage::READ_ONLY, $class->associationMappings['state']['cache']['usage']); self::assertEquals('doctrine_tests_models_cache_city__state', $class->associationMappings['state']['cache']['region']); self::assertArrayHasKey('attractions', $class->associationMappings); self::assertArrayHasKey('cache', $class->associationMappings['attractions']); self::assertArrayHasKey('usage', $class->associationMappings['attractions']['cache']); self::assertArrayHasKey('region', $class->associationMappings['attractions']['cache']); - self::assertEquals(ClassMetadata::CACHE_USAGE_READ_ONLY, $class->associationMappings['attractions']['cache']['usage']); + self::assertEquals(Mapping\CacheUsage::READ_ONLY, $class->associationMappings['attractions']['cache']['usage']); self::assertEquals('doctrine_tests_models_cache_city__attractions', $class->associationMappings['attractions']['cache']['region']); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index ff1cdf98357..44898c2b7db 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -16,7 +16,7 @@ $metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_IDENTITY); $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); -$metadata->enableCache(['usage' => ClassMetadata::CACHE_USAGE_READ_ONLY]); +$metadata->enableCache(['usage' => Mapping\CacheUsage::READ_ONLY]); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); @@ -47,7 +47,7 @@ ] ); -$metadata->enableAssociationCache('state', ['usage' => ClassMetadata::CACHE_USAGE_READ_ONLY]); +$metadata->enableAssociationCache('state', ['usage' => Mapping\CacheUsage::READ_ONLY]); $metadata->mapManyToMany( [ @@ -66,4 +66,4 @@ ] ); -$metadata->enableAssociationCache('attractions', ['usage' => ClassMetadata::CACHE_USAGE_READ_ONLY]); +$metadata->enableAssociationCache('attractions', ['usage' => Mapping\CacheUsage::READ_ONLY]); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php index 255c32c5c48..ca43ce34a15 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php @@ -1,13 +1,13 @@ enableCache(['usage' => ClassMetadata::CACHE_USAGE_READ_ONLY]); +$metadata->enableCache(['usage' => Mapping\CacheUsage::READ_ONLY]); $metadata->mapManyToOne( [ 'fieldName' => 'foo', 'id' => true, - 'targetEntity' => 'PHPSLCFoo' + 'targetEntity' => 'PHPSLCFoo', ] ); From 3658d24fc437a006a882204486a06e256aecf54c Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 22 Oct 2016 10:34:57 +0000 Subject: [PATCH 080/275] Removed ClassMetadata::INHERITANCE_TYPE_* constants and created InheritanceType::* --- UPGRADE.md | 2 +- .../Hydration/SimpleObjectHydrator.php | 3 +- .../Mapping/Builder/ClassMetadataBuilder.php | 5 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 45 ++++---------- .../ORM/Mapping/Driver/AnnotationDriver.php | 5 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 5 +- lib/Doctrine/ORM/Mapping/InheritanceType.php | 58 +++++++++++++++++++ .../Entity/BasicEntityPersister.php | 3 +- lib/Doctrine/ORM/Query/SqlWalker.php | 14 +++-- lib/Doctrine/ORM/Tools/EntityGenerator.php | 23 ++------ .../Tools/Export/Driver/AbstractExporter.php | 22 ------- .../ORM/Tools/Export/Driver/PhpExporter.php | 2 +- .../ORM/Tools/Export/Driver/XmlExporter.php | 5 +- .../Tests/Models/Company/CompanyContract.php | 2 +- .../SecondLevelCacheConcurrentTest.php | 2 + .../ORM/Mapping/AbstractMappingDriverTest.php | 6 +- .../Builder/ClassMetadataBuilderTest.php | 5 +- .../ORM/Mapping/ClassMetadataFactoryTest.php | 2 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 5 +- .../php/Doctrine.Tests.Models.Cache.City.php | 2 +- ...e.Tests.Models.Company.CompanyContract.php | 2 +- .../php/Doctrine.Tests.ORM.Mapping.Animal.php | 4 +- .../Doctrine.Tests.ORM.Mapping.Comment.php | 2 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 2 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 2 +- .../Doctrine.Tests.ORM.Tools.Export.User.php | 2 +- 26 files changed, 120 insertions(+), 110 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/InheritanceType.php diff --git a/UPGRADE.md b/UPGRADE.md index e2e5182eea3..4c8a27ad549 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -710,7 +710,7 @@ you need to use the following, explicit syntax: ## XML Mapping Driver The 'inheritance-type' attribute changed to take last bit of ClassMetadata constant names, i.e. -NONE, SINGLE_TABLE, INHERITANCE_TYPE_JOINED +NONE, SINGLE_TABLE, JOINED ## YAML Mapping Driver diff --git a/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php index c6e160a148c..9c76c4fdfc6 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php @@ -19,6 +19,7 @@ namespace Doctrine\ORM\Internal\Hydration; +use Doctrine\ORM\Mapping\InheritanceType; use PDO; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Query; @@ -82,7 +83,7 @@ protected function hydrateRowData(array $sqlResult, array &$result) $data = []; // We need to find the correct entity class name if we have inheritance in resultset - if ($this->class->inheritanceType !== ClassMetadata::INHERITANCE_TYPE_NONE) { + if ($this->class->inheritanceType !== InheritanceType::NONE) { $discrColumnName = $this->_platform->getSQLResultCasing($this->class->discriminatorColumn->getColumnName()); // Find mapped discriminator column from the result set. diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php index 8a92a21d7ae..38ba4f84855 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php @@ -23,6 +23,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\TableMetadata; use Doctrine\ORM\Mapping\VersionFieldMetadata; @@ -189,7 +190,7 @@ public function addNamedQuery($name, $dqlQuery) */ public function setJoinedTableInheritance() { - $this->cm->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_JOINED); + $this->cm->setInheritanceType(InheritanceType::JOINED); return $this; } @@ -201,7 +202,7 @@ public function setJoinedTableInheritance() */ public function setSingleTableInheritance() { - $this->cm->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE); + $this->cm->setInheritanceType(InheritanceType::SINGLE_TABLE); return $this; } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 274a651889e..5c39828fe51 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -54,31 +54,6 @@ */ class ClassMetadata implements ClassMetadataInterface { - /* The inheritance mapping types */ - /** - * NONE means the class does not participate in an inheritance hierarchy - * and therefore does not need an inheritance mapping type. - */ - const INHERITANCE_TYPE_NONE = 1; - - /** - * JOINED means the class will be persisted according to the rules of - * Class Table Inheritance. - */ - const INHERITANCE_TYPE_JOINED = 2; - - /** - * SINGLE_TABLE means the class will be persisted according to the rules of - * Single Table Inheritance. - */ - const INHERITANCE_TYPE_SINGLE_TABLE = 3; - - /** - * TABLE_PER_CLASS means the class will be persisted according to the rules - * of Concrete Table Inheritance. - */ - const INHERITANCE_TYPE_TABLE_PER_CLASS = 4; - /* The Id generator types. */ /** * AUTO means the generator type will depend on what the used platform prefers. @@ -289,7 +264,7 @@ class ClassMetadata implements ClassMetadataInterface * * @var integer */ - public $inheritanceType = self::INHERITANCE_TYPE_NONE; + public $inheritanceType = InheritanceType::NONE; /** * READ-ONLY: The Id generator type used by the class. @@ -705,7 +680,7 @@ public function __sleep() $serialized[] = 'customRepositoryClassName'; } - if ($this->inheritanceType != self::INHERITANCE_TYPE_NONE) { + if ($this->inheritanceType != InheritanceType::NONE) { $serialized[] = 'inheritanceType'; $serialized[] = 'discriminatorColumn'; $serialized[] = 'discriminatorValue'; @@ -1649,7 +1624,7 @@ public function usesIdGenerator() */ public function isInheritanceTypeNone() { - return $this->inheritanceType == self::INHERITANCE_TYPE_NONE; + return $this->inheritanceType == InheritanceType::NONE; } /** @@ -1660,7 +1635,7 @@ public function isInheritanceTypeNone() */ public function isInheritanceTypeJoined() { - return $this->inheritanceType == self::INHERITANCE_TYPE_JOINED; + return $this->inheritanceType == InheritanceType::JOINED; } /** @@ -1671,7 +1646,7 @@ public function isInheritanceTypeJoined() */ public function isInheritanceTypeSingleTable() { - return $this->inheritanceType == self::INHERITANCE_TYPE_SINGLE_TABLE; + return $this->inheritanceType == InheritanceType::SINGLE_TABLE; } /** @@ -1682,7 +1657,7 @@ public function isInheritanceTypeSingleTable() */ public function isInheritanceTypeTablePerClass() { - return $this->inheritanceType == self::INHERITANCE_TYPE_TABLE_PER_CLASS; + return $this->inheritanceType == InheritanceType::TABLE_PER_CLASS; } /** @@ -1960,10 +1935,10 @@ public function setPrimaryTable(TableMetadata $tableMetadata) */ private function isInheritanceType($type) { - return $type == self::INHERITANCE_TYPE_NONE - || $type == self::INHERITANCE_TYPE_SINGLE_TABLE - || $type == self::INHERITANCE_TYPE_JOINED - || $type == self::INHERITANCE_TYPE_TABLE_PER_CLASS; + return $type == InheritanceType::NONE + || $type == InheritanceType::SINGLE_TABLE + || $type == InheritanceType::JOINED + || $type == InheritanceType::TABLE_PER_CLASS; } /** diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 5b91f54b0f4..7a7a825bf66 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -33,6 +33,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\JoinTableMetadata; use Doctrine\ORM\Mapping\MappingException; @@ -238,10 +239,10 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $inheritanceTypeAnnot = $classAnnotations[Annotation\InheritanceType::class]; $metadata->setInheritanceType( - constant(sprintf('%s::INHERITANCE_TYPE_%s', ClassMetadata::class, $inheritanceTypeAnnot->value)) + constant(sprintf('%s::%s', InheritanceType::class, $inheritanceTypeAnnot->value)) ); - if ($metadata->inheritanceType !== ClassMetadata::INHERITANCE_TYPE_NONE) { + if ($metadata->inheritanceType !== InheritanceType::NONE) { $discriminatorColumnBuilder = new DiscriminatorColumnMetadataBuilder(); $discriminatorColumnBuilder->withTableName($metadata->getTableName()); diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index b3420fc4330..b8aca0d7e0f 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -26,6 +26,7 @@ use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; use Doctrine\ORM\Mapping\CacheUsage; use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\JoinTableMetadata; use Doctrine\ORM\Mapping\MappingException; @@ -213,10 +214,10 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $inheritanceType = strtoupper((string) $xmlRoot['inheritance-type']); $metadata->setInheritanceType( - constant(sprintf('%s::INHERITANCE_TYPE_%s', ClassMetadata::class, $inheritanceType)) + constant(sprintf('%s::%s', InheritanceType::class, $inheritanceType)) ); - if ($metadata->inheritanceType !== \Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_NONE) { + if ($metadata->inheritanceType !== InheritanceType::NONE) { $discriminatorColumnBuilder = new DiscriminatorColumnMetadataBuilder(); $discriminatorColumnBuilder->withTableName($metadata->getTableName()); diff --git a/lib/Doctrine/ORM/Mapping/InheritanceType.php b/lib/Doctrine/ORM/Mapping/InheritanceType.php new file mode 100644 index 00000000000..d662180d769 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/InheritanceType.php @@ -0,0 +1,58 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +final class InheritanceType +{ + /** + * NONE means the class does not participate in an inheritance hierarchy + * and therefore does not need an inheritance mapping type. + */ + const NONE = 'NONE'; + + /** + * JOINED means the class will be persisted according to the rules of + * Class Table Inheritance. + */ + const JOINED = 'JOINED'; + + /** + * SINGLE_TABLE means the class will be persisted according to the rules of + * Single Table Inheritance. + */ + const SINGLE_TABLE = 'SINGLE_TABLE'; + + /** + * TABLE_PER_CLASS means the class will be persisted according to the rules + * of Concrete Table Inheritance. + */ + const TABLE_PER_CLASS = 'TABLE_PER_CLASS'; + + /** + * Will break upon instantiation. + * + */ + private function __construct() + { + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index a4392173df8..a529195a522 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -30,6 +30,7 @@ use Doctrine\ORM\Mapping\ColumnMetadata; use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\OptimisticLockException; use Doctrine\ORM\ORMException; @@ -1229,7 +1230,7 @@ protected function getSelectColumnsSQL() $eagerEntity = $this->em->getClassMetadata($assoc['targetEntity']); - if ($eagerEntity->inheritanceType != ClassMetadata::INHERITANCE_TYPE_NONE) { + if ($eagerEntity->inheritanceType !== InheritanceType::NONE) { continue; // now this is why you shouldn't use inheritance } diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index fd0601755de..b877833e77c 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -22,6 +22,7 @@ use Doctrine\DBAL\LockMode; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\OptimisticLockException; use Doctrine\ORM\Query; use Doctrine\ORM\Utility\PersisterHelper; @@ -484,25 +485,28 @@ private function _generateDiscriminatorColumnConditionSQL(array $dqlAliases) */ private function generateFilterConditionSQL(ClassMetadata $targetEntity, $targetTableAlias) { - if (!$this->em->hasFilters()) { + if (! $this->em->hasFilters()) { return ''; } - switch($targetEntity->inheritanceType) { - case ClassMetadata::INHERITANCE_TYPE_NONE: + switch ($targetEntity->inheritanceType) { + case InheritanceType::NONE: break; - case ClassMetadata::INHERITANCE_TYPE_JOINED: + + case InheritanceType::JOINED: // The classes in the inheritance will be added to the query one by one, // but only the root node is getting filtered if ($targetEntity->name !== $targetEntity->rootEntityName) { return ''; } break; - case ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE: + + case InheritanceType::SINGLE_TABLE: // With STI the table will only be queried once, make sure that the filters // are added to the root entity $targetEntity = $this->em->getClassMetadata($targetEntity->rootEntityName); break; + default: //@todo: throw exception? return ''; diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 5e3e79d67f6..e9c7e7e2732 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -25,6 +25,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\JoinColumnMetadata; /** @@ -198,18 +199,6 @@ class EntityGenerator ClassMetadata::CHANGETRACKING_NOTIFY => 'NOTIFY', ]; - /** - * Hash-map to handle the inheritance type string. - * - * @var array - */ - protected static $inheritanceTypeMap = [ - ClassMetadata::INHERITANCE_TYPE_NONE => 'NONE', - ClassMetadata::INHERITANCE_TYPE_JOINED => 'JOINED', - ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE => 'SINGLE_TABLE', - ClassMetadata::INHERITANCE_TYPE_TABLE_PER_CLASS => 'TABLE_PER_CLASS', - ]; - /** * @var string */ @@ -1121,7 +1110,7 @@ protected function generateTableConstraints($constraintName, array $constraints) */ protected function generateInheritanceAnnotation(ClassMetadata $metadata) { - if ($metadata->inheritanceType != ClassMetadata::INHERITANCE_TYPE_NONE) { + if ($metadata->inheritanceType !== InheritanceType::NONE) { return '@' . $this->annotationsPrefix . 'InheritanceType("'.$this->getInheritanceTypeString($metadata->inheritanceType).'")'; } } @@ -1133,7 +1122,7 @@ protected function generateInheritanceAnnotation(ClassMetadata $metadata) */ protected function generateDiscriminatorColumnAnnotation(ClassMetadata $metadata) { - if ($metadata->inheritanceType != ClassMetadata::INHERITANCE_TYPE_NONE) { + if ($metadata->inheritanceType !== InheritanceType::NONE) { $discrColumn = $metadata->discriminatorColumn; $columnDefinition = sprintf( @@ -1154,7 +1143,7 @@ protected function generateDiscriminatorColumnAnnotation(ClassMetadata $metadata */ protected function generateDiscriminatorMapAnnotation(ClassMetadata $metadata) { - if ($metadata->inheritanceType != ClassMetadata::INHERITANCE_TYPE_NONE) { + if ($metadata->inheritanceType !== InheritanceType::NONE) { $inheritanceClassMap = []; foreach ($metadata->discriminatorMap as $type => $class) { @@ -1778,11 +1767,11 @@ protected function prefixCodeWithSpaces($code, $num = 1) */ protected function getInheritanceTypeString($type) { - if ( ! isset(static::$inheritanceTypeMap[$type])) { + if ( ! defined(sprintf('%s::%s', InheritanceType::class, $type))) { throw new \InvalidArgumentException(sprintf('Invalid provided InheritanceType: %s', $type)); } - return static::$inheritanceTypeMap[$type]; + return $type; } /** diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php index 30e0c5af2d8..6b0c1a56c36 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php @@ -179,28 +179,6 @@ public function setExtension($extension) $this->_extension = $extension; } - /** - * @param int $type - * - * @return string - */ - protected function _getInheritanceTypeString($type) - { - switch ($type) { - case ClassMetadata::INHERITANCE_TYPE_NONE: - return 'NONE'; - - case ClassMetadata::INHERITANCE_TYPE_JOINED: - return 'JOINED'; - - case ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE: - return 'SINGLE_TABLE'; - - case ClassMetadata::INHERITANCE_TYPE_TABLE_PER_CLASS: - return 'PER_CLASS'; - } - } - /** * @param int $policy * diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 7ace71fedbf..16af9841fc0 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -56,7 +56,7 @@ public function exportClassMetadata(ClassMetadata $metadata) } if ($metadata->inheritanceType) { - $lines[] = '$metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_' . $this->_getInheritanceTypeString($metadata->inheritanceType) . ');'; + $lines[] = '$metadata->setInheritanceType(Mapping\InheritanceType::' . $metadata->inheritanceType . ');'; } if ($metadata->customRepositoryClassName) { diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 93d4eb25908..d1bcf5960bc 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Tools\Export\Driver; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\JoinColumnMetadata; /** @@ -66,8 +67,8 @@ public function exportClassMetadata(ClassMetadata $metadata) $root->addAttribute('schema', $metadata->table->getSchema()); } - if ($metadata->inheritanceType && $metadata->inheritanceType !== ClassMetadata::INHERITANCE_TYPE_NONE) { - $root->addAttribute('inheritance-type', $this->_getInheritanceTypeString($metadata->inheritanceType)); + if ($metadata->inheritanceType && $metadata->inheritanceType !== InheritanceType::NONE) { + $root->addAttribute('inheritance-type', $metadata->inheritanceType); } if ($metadata->table->getOptions()) { diff --git a/tests/Doctrine/Tests/Models/Company/CompanyContract.php b/tests/Doctrine/Tests/Models/Company/CompanyContract.php index 91589495488..b63e2143ca0 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyContract.php @@ -139,7 +139,7 @@ static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat $tableMetadata->setName('company_contracts'); $metadata->setPrimaryTable($tableMetadata); - $metadata->setInheritanceType(Mapping\ClassMetadata::INHERITANCE_TYPE_JOINED); + $metadata->setInheritanceType(Mapping\InheritanceType::JOINED); $discrColumn = new Mapping\DiscriminatorColumnMetadata(); diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php index bb061cf27b7..74b965d9639 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php @@ -131,6 +131,8 @@ public function testBasicConcurrentCollectionReadLock() class CacheFactorySecondLevelCacheConcurrentTest extends DefaultCacheFactory { + private $cache; + public function __construct(Cache $cache) { $this->cache = $cache; diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 33046c8cb21..cf444efc31e 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -75,7 +75,7 @@ public function testEntityTableNameAndInheritance() $class = $this->createClassMetadata(User::class); self::assertEquals('cms_users', $class->getTableName()); - self::assertEquals(ClassMetadata::INHERITANCE_TYPE_NONE, $class->inheritanceType); + self::assertEquals(Mapping\InheritanceType::NONE, $class->inheritanceType); return $class; } @@ -1250,7 +1250,7 @@ public static function loadMetadata(ClassMetadata $metadata) $tableMetadata->addOption('baz', ['key' => 'val']); $metadata->setPrimaryTable($tableMetadata); - $metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); + $metadata->setInheritanceType(Mapping\InheritanceType::NONE); $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); $metadata->addLifecycleCallback('doStuffOnPrePersist', 'prePersist'); @@ -1552,7 +1552,7 @@ public static function loadMetadata(ClassMetadata $metadata) ); $metadata->setPrimaryTable($tableMetadata); - $metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); + $metadata->setInheritanceType(Mapping\InheritanceType::NONE); $fieldMetadata = new Mapping\FieldMetadata('content'); $fieldMetadata->setType(Type::getType('text')); diff --git a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php index b91158f559d..c4aa7be3fdb 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php @@ -13,6 +13,7 @@ use Doctrine\Tests\Models\CMS\CmsUser; use Doctrine\Tests\Models\ValueObjects\Name; use Doctrine\ORM\Mapping\FetchMode; +use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\Tests\OrmTestCase; /** @@ -158,13 +159,13 @@ public function testSetReadOnly() public function testSetInheritanceJoined() { self::assertIsFluent($this->builder->setJoinedTableInheritance()); - self::assertEquals(ClassMetadata::INHERITANCE_TYPE_JOINED, $this->cm->inheritanceType); + self::assertEquals(InheritanceType::JOINED, $this->cm->inheritanceType); } public function testSetInheritanceSingleTable() { self::assertIsFluent($this->builder->setSingleTableInheritance()); - self::assertEquals(ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE, $this->cm->inheritanceType); + self::assertEquals(InheritanceType::SINGLE_TABLE, $this->cm->inheritanceType); } public function testSetDiscriminatorColumn() diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 840aeb2fb2f..fa770dc6ccb 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -53,7 +53,7 @@ public function testGetMetadataForSingleClass() // Prechecks self::assertEquals([], $cm1->parentClasses); - self::assertEquals(ClassMetadata::INHERITANCE_TYPE_NONE, $cm1->inheritanceType); + self::assertEquals(Mapping\InheritanceType::NONE, $cm1->inheritanceType); self::assertTrue($cm1->hasField('name')); self::assertEquals(2, count($cm1->associationMappings)); self::assertEquals(ClassMetadata::GENERATOR_TYPE_AUTO, $cm1->generatorType); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index fcb5961b58e..3b43d09d4c7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -10,7 +10,6 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DefaultNamingStrategy; use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; -use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Mapping\UnderscoreNamingStrategy; @@ -42,7 +41,7 @@ public function testClassMetadataInstanceSerialization() self::assertEquals(CMS\CmsUser::class, $cm->rootEntityName); self::assertEquals([], $cm->subClasses); self::assertEquals([], $cm->parentClasses); - self::assertEquals(ClassMetadata::INHERITANCE_TYPE_NONE, $cm->inheritanceType); + self::assertEquals(Mapping\InheritanceType::NONE, $cm->inheritanceType); // Customize state $discrColumn = new DiscriminatorColumnMetadata(); @@ -50,7 +49,7 @@ public function testClassMetadataInstanceSerialization() $discrColumn->setColumnName('disc'); $discrColumn->setType(Type::getType('integer')); - $cm->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE); + $cm->setInheritanceType(Mapping\InheritanceType::SINGLE_TABLE); $cm->setSubclasses(["One", "Two", "Three"]); $cm->setParentClasses(["UserParent"]); $cm->setCustomRepositoryClass("UserRepository"); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index 44898c2b7db..71ddaaf532a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -13,7 +13,7 @@ $tableMetadata->setName('cache_city'); $metadata->setPrimaryTable($tableMetadata); -$metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); +$metadata->setInheritanceType(Mapping\InheritanceType::NONE); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_IDENTITY); $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); $metadata->enableCache(['usage' => Mapping\CacheUsage::READ_ONLY]); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php index 7fcb2e50f11..9dc271d26c0 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php @@ -9,7 +9,7 @@ /* @var $metadata ClassMetadata */ $metadata->setPrimaryTable($tableMetadata); -$metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_JOINED); +$metadata->setInheritanceType(Mapping\InheritanceType::JOINED); $discrColumn = new Mapping\DiscriminatorColumnMetadata(); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php index 1f0cd52711a..f791db3cba2 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php @@ -7,10 +7,7 @@ use Doctrine\Tests\ORM\Mapping\Dog; /* @var $metadata ClassMetadata */ -$metadata->setInheritanceType(Mapping\ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE); - $discrColumn = new Mapping\DiscriminatorColumnMetadata(); - $discrColumn->setTableName($metadata->getTableName()); $discrColumn->setColumnName('dtype'); $discrColumn->setType(Type::getType('string')); @@ -25,6 +22,7 @@ ] ); +$metadata->setInheritanceType(Mapping\InheritanceType::NONE); $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); $fieldMetadata = new Mapping\FieldMetadata('id'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php index 62fd65aa76d..868aaf542e6 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php @@ -18,7 +18,7 @@ /* @var $metadata ClassMetadata */ $metadata->setPrimaryTable($tableMetadata); -$metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); +$metadata->setInheritanceType(Mapping\InheritanceType::NONE); $fieldMetadata = new Mapping\FieldMetadata('content'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index f2d46f57520..70a2e466f9b 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -41,7 +41,7 @@ $tableMetadata->addOption('baz', ['key' => 'val']); $metadata->setPrimaryTable($tableMetadata); -$metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); +$metadata->setInheritanceType(Mapping\InheritanceType::NONE); $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); $metadata->addLifecycleCallback('doStuffOnPrePersist', 'prePersist'); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 63d1cba4bc4..7af1469558c 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -766,7 +766,7 @@ public function testGetInheritanceTypeString() $reflection = new \ReflectionClass('\Doctrine\ORM\Mapping\ClassMetadata'); $method = new \ReflectionMethod($this->_generator, 'getInheritanceTypeString'); $constants = $reflection->getConstants(); - $pattern = '/^INHERITANCE_TYPE_/'; + $pattern = '/^InheritanceType::/'; $method->setAccessible(true); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php index 601f40ccd42..d080ed9176d 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php @@ -12,7 +12,7 @@ $metadata->setPrimaryTable($tableMetadata); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); -$metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_NONE); +$metadata->setInheritanceType(Mapping\InheritanceType::NONE); $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); $metadata->addLifecycleCallback('doStuffOnPrePersist', 'prePersist'); From f489f75839ae23ba6d32edd3ac6eb5b27c993bd3 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 22 Oct 2016 10:47:53 +0000 Subject: [PATCH 081/275] Removed ClassMetadata::CHANGETRACKING_* constants and created ChangeTrackingPolicy::* --- .../Mapping/Builder/ClassMetadataBuilder.php | 5 +- .../ORM/Mapping/ChangeTrackingPolicy.php | 57 +++++++++++++++++++ lib/Doctrine/ORM/Mapping/ClassMetadata.php | 33 ++--------- .../ORM/Mapping/Driver/AnnotationDriver.php | 3 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 3 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 16 +----- .../Tools/Export/Driver/AbstractExporter.php | 19 ------- .../ORM/Tools/Export/Driver/PhpExporter.php | 2 +- .../ORM/Tools/Export/Driver/XmlExporter.php | 7 +-- .../ORM/Mapping/AbstractMappingDriverTest.php | 2 +- .../Builder/ClassMetadataBuilderTest.php | 6 +- .../php/Doctrine.Tests.Models.Cache.City.php | 3 +- .../php/Doctrine.Tests.ORM.Mapping.Animal.php | 2 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 2 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 2 +- .../Doctrine.Tests.ORM.Tools.Export.User.php | 2 +- 16 files changed, 85 insertions(+), 79 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php index 38ba4f84855..96f144223f7 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Mapping\Builder; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\ChangeTrackingPolicy; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; use Doctrine\ORM\Mapping\FieldMetadata; @@ -243,7 +244,7 @@ public function addDiscriminatorMapClass($name, $class) */ public function setChangeTrackingPolicyDeferredExplicit() { - $this->cm->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_EXPLICIT); + $this->cm->setChangeTrackingPolicy(ChangeTrackingPolicy::DEFERRED_EXPLICIT); return $this; } @@ -255,7 +256,7 @@ public function setChangeTrackingPolicyDeferredExplicit() */ public function setChangeTrackingPolicyNotify() { - $this->cm->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_NOTIFY); + $this->cm->setChangeTrackingPolicy(ChangeTrackingPolicy::NOTIFY); return $this; } diff --git a/lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php b/lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php new file mode 100644 index 00000000000..5dd520ac956 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php @@ -0,0 +1,57 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +final class ChangeTrackingPolicy +{ + /** + * DEFERRED_IMPLICIT means that changes of entities are calculated at commit-time + * by doing a property-by-property comparison with the original data. This will + * be done for all entities that are in MANAGED state at commit-time. + * + * This is the default change tracking policy. + */ + const DEFERRED_IMPLICIT = 'DEFERRED_IMPLICIT'; + + /** + * DEFERRED_EXPLICIT means that changes of entities are calculated at commit-time + * by doing a property-by-property comparison with the original data. This will + * be done only for entities that were explicitly saved (through persist() or a cascade). + */ + const DEFERRED_EXPLICIT = 'DEFERRED_EXPLICIT'; + + /** + * NOTIFY means that Doctrine relies on the entities sending out notifications when their + * properties change. Such entity classes must implement the NotifyPropertyChanged + * interface. + */ + const NOTIFY = 'NOTIFY'; + + /** + * Will break upon instantiation. + * + */ + private function __construct() + { + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 5c39828fe51..ac1540c80b1 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -99,29 +99,6 @@ class ClassMetadata implements ClassMetadataInterface */ const GENERATOR_TYPE_CUSTOM = 7; - /** - * DEFERRED_IMPLICIT means that changes of entities are calculated at commit-time - * by doing a property-by-property comparison with the original data. This will - * be done for all entities that are in MANAGED state at commit-time. - * - * This is the default change tracking policy. - */ - const CHANGETRACKING_DEFERRED_IMPLICIT = 1; - - /** - * DEFERRED_EXPLICIT means that changes of entities are calculated at commit-time - * by doing a property-by-property comparison with the original data. This will - * be done only for entities that were explicitly saved (through persist() or a cascade). - */ - const CHANGETRACKING_DEFERRED_EXPLICIT = 2; - - /** - * NOTIFY means that Doctrine relies on the entities sending out notifications - * when their properties change. Such entity classes must implement - * the NotifyPropertyChanged interface. - */ - const CHANGETRACKING_NOTIFY = 3; - /** * Identifies a one-to-one association. */ @@ -447,7 +424,7 @@ class ClassMetadata implements ClassMetadataInterface * * @var integer */ - public $changeTrackingPolicy = self::CHANGETRACKING_DEFERRED_IMPLICIT; + public $changeTrackingPolicy = ChangeTrackingPolicy::DEFERRED_IMPLICIT; /** * READ-ONLY: The field which is used for versioning in optimistic locking (if any). @@ -672,7 +649,7 @@ public function __sleep() ]; // The rest of the metadata is only serialized if necessary. - if ($this->changeTrackingPolicy != self::CHANGETRACKING_DEFERRED_IMPLICIT) { + if ($this->changeTrackingPolicy != ChangeTrackingPolicy::DEFERRED_IMPLICIT) { $serialized[] = 'changeTrackingPolicy'; } @@ -969,7 +946,7 @@ public function setChangeTrackingPolicy($policy) */ public function isChangeTrackingDeferredExplicit() { - return self::CHANGETRACKING_DEFERRED_EXPLICIT === $this->changeTrackingPolicy; + return ChangeTrackingPolicy::DEFERRED_EXPLICIT === $this->changeTrackingPolicy; } /** @@ -979,7 +956,7 @@ public function isChangeTrackingDeferredExplicit() */ public function isChangeTrackingDeferredImplicit() { - return self::CHANGETRACKING_DEFERRED_IMPLICIT === $this->changeTrackingPolicy; + return ChangeTrackingPolicy::DEFERRED_IMPLICIT === $this->changeTrackingPolicy; } /** @@ -989,7 +966,7 @@ public function isChangeTrackingDeferredImplicit() */ public function isChangeTrackingNotify() { - return self::CHANGETRACKING_NOTIFY === $this->changeTrackingPolicy; + return ChangeTrackingPolicy::NOTIFY === $this->changeTrackingPolicy; } /** diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 7a7a825bf66..0100a0d8cb6 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -30,6 +30,7 @@ use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; use Doctrine\ORM\Mapping\Builder\TableMetadataBuilder; use Doctrine\ORM\Mapping\CacheUsage; +use Doctrine\ORM\Mapping\ChangeTrackingPolicy; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\FieldMetadata; @@ -285,7 +286,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $changeTrackingAnnot = $classAnnotations[Annotation\ChangeTrackingPolicy::class]; $metadata->setChangeTrackingPolicy( - constant(sprintf('%s::CHANGETRACKING_%s', ClassMetadata::class, $changeTrackingAnnot->value)) + constant(sprintf('%s::%s', ChangeTrackingPolicy::class, $changeTrackingAnnot->value)) ); } diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index b8aca0d7e0f..a4e5f863890 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -25,6 +25,7 @@ use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; use Doctrine\ORM\Mapping\CacheUsage; +use Doctrine\ORM\Mapping\ChangeTrackingPolicy; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\JoinColumnMetadata; @@ -264,7 +265,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $changeTrackingPolicy = strtoupper((string) $xmlRoot['change-tracking-policy']); $metadata->setChangeTrackingPolicy( - constant(sprintf('%s::CHANGETRACKING_%s', ClassMetadata::class, $changeTrackingPolicy)) + constant(sprintf('%s::%s', ChangeTrackingPolicy::class, $changeTrackingPolicy)) ); } diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index e9c7e7e2732..bae4a6a383b 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -19,6 +19,7 @@ namespace Doctrine\ORM\Tools; +use Doctrine\ORM\Mapping\ChangeTrackingPolicy; use Doctrine\Common\Collections\Collection; use Doctrine\Common\Util\Inflector; use Doctrine\DBAL\Types\Type; @@ -188,17 +189,6 @@ class EntityGenerator ClassMetadata::GENERATOR_TYPE_CUSTOM => 'CUSTOM' ]; - /** - * Hash-map to handle the change tracking policy string. - * - * @var array - */ - protected static $changeTrackingPolicyMap = [ - ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT => 'DEFERRED_IMPLICIT', - ClassMetadata::CHANGETRACKING_DEFERRED_EXPLICIT => 'DEFERRED_EXPLICIT', - ClassMetadata::CHANGETRACKING_NOTIFY => 'NOTIFY', - ]; - /** * @var string */ @@ -1783,11 +1773,11 @@ protected function getInheritanceTypeString($type) */ protected function getChangeTrackingPolicyString($type) { - if ( ! isset(static::$changeTrackingPolicyMap[$type])) { + if ( ! defined(sprintf('%s::%s', ChangeTrackingPolicy::class, $type))) { throw new \InvalidArgumentException(sprintf('Invalid provided ChangeTrackingPolicy: %s', $type)); } - return static::$changeTrackingPolicyMap[$type]; + return $type; } /** diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php index 6b0c1a56c36..c63f7145475 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php @@ -179,25 +179,6 @@ public function setExtension($extension) $this->_extension = $extension; } - /** - * @param int $policy - * - * @return string - */ - protected function _getChangeTrackingPolicyString($policy) - { - switch ($policy) { - case ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT: - return 'DEFERRED_IMPLICIT'; - - case ClassMetadata::CHANGETRACKING_DEFERRED_EXPLICIT: - return 'DEFERRED_EXPLICIT'; - - case ClassMetadata::CHANGETRACKING_NOTIFY: - return 'NOTIFY'; - } - } - /** * @param int $type * diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 16af9841fc0..1ce96db0b6a 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -125,7 +125,7 @@ public function exportClassMetadata(ClassMetadata $metadata) } if ($metadata->changeTrackingPolicy) { - $lines[] = '$metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_' . $this->_getChangeTrackingPolicyString($metadata->changeTrackingPolicy) . ');'; + $lines[] = '$metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::' . $metadata->changeTrackingPolicy . ');'; } if ($metadata->lifecycleCallbacks) { diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index d1bcf5960bc..31f6e784a28 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -19,6 +19,7 @@ namespace Doctrine\ORM\Tools\Export\Driver; +use Doctrine\ORM\Mapping\ChangeTrackingPolicy; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\JoinColumnMetadata; @@ -107,10 +108,8 @@ public function exportClassMetadata(ClassMetadata $metadata) } } - $trackingPolicy = $this->_getChangeTrackingPolicyString($metadata->changeTrackingPolicy); - - if ( $trackingPolicy !== 'DEFERRED_IMPLICIT') { - $root->addChild('change-tracking-policy', $trackingPolicy); + if ($metadata->changeTrackingPolicy !== ChangeTrackingPolicy::DEFERRED_IMPLICIT) { + $root->addChild('change-tracking-policy', $metadata->changeTrackingPolicy); } if ($metadata->table->getIndexes()) { diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index cf444efc31e..62fccf1edbf 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -1251,7 +1251,7 @@ public static function loadMetadata(ClassMetadata $metadata) $metadata->setPrimaryTable($tableMetadata); $metadata->setInheritanceType(Mapping\InheritanceType::NONE); - $metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); + $metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); $metadata->addLifecycleCallback('doStuffOnPrePersist', 'prePersist'); $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php index c4aa7be3fdb..1edd7c2a0bf 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php @@ -3,11 +3,11 @@ namespace Doctrine\Tests\ORM\Mapping\Builder; use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; -use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; use Doctrine\ORM\Mapping\Builder\EmbeddedBuilder; use Doctrine\ORM\Mapping\Builder\FieldBuilder; +use Doctrine\ORM\Mapping\ChangeTrackingPolicy; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Tests\Models\CMS\CmsGroup; use Doctrine\Tests\Models\CMS\CmsUser; @@ -198,13 +198,13 @@ public function testAddDiscriminatorMapClass() public function testChangeTrackingPolicyExplicit() { self::assertIsFluent($this->builder->setChangeTrackingPolicyDeferredExplicit()); - self::assertEquals(ClassMetadata::CHANGETRACKING_DEFERRED_EXPLICIT, $this->cm->changeTrackingPolicy); + self::assertEquals(ChangeTrackingPolicy::DEFERRED_EXPLICIT, $this->cm->changeTrackingPolicy); } public function testChangeTrackingPolicyNotify() { self::assertIsFluent($this->builder->setChangeTrackingPolicyNotify()); - self::assertEquals(ClassMetadata::CHANGETRACKING_NOTIFY, $this->cm->changeTrackingPolicy); + self::assertEquals(ChangeTrackingPolicy::NOTIFY, $this->cm->changeTrackingPolicy); } public function testAddField() diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index 71ddaaf532a..dfc0c9db54c 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -9,13 +9,12 @@ /* @var $metadata ClassMetadata */ $tableMetadata = new Mapping\TableMetadata(); - $tableMetadata->setName('cache_city'); $metadata->setPrimaryTable($tableMetadata); $metadata->setInheritanceType(Mapping\InheritanceType::NONE); +$metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_IDENTITY); -$metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); $metadata->enableCache(['usage' => Mapping\CacheUsage::READ_ONLY]); $fieldMetadata = new Mapping\FieldMetadata('id'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php index f791db3cba2..57afcfed843 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php @@ -23,7 +23,7 @@ ); $metadata->setInheritanceType(Mapping\InheritanceType::NONE); -$metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); +$metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); $fieldMetadata = new Mapping\FieldMetadata('id'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index 70a2e466f9b..844aa02f1f3 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -42,7 +42,7 @@ $metadata->setPrimaryTable($tableMetadata); $metadata->setInheritanceType(Mapping\InheritanceType::NONE); -$metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); +$metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); $metadata->addLifecycleCallback('doStuffOnPrePersist', 'prePersist'); $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 7af1469558c..10cedee9ff9 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -795,7 +795,7 @@ public function testGetChangeTrackingPolicyString() $reflection = new \ReflectionClass('\Doctrine\ORM\Mapping\ClassMetadata'); $method = new \ReflectionMethod($this->_generator, 'getChangeTrackingPolicyString'); $constants = $reflection->getConstants(); - $pattern = '/^CHANGETRACKING_/'; + $pattern = '/^ChangeTrackingPolicy::/'; $method->setAccessible(true); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php index d080ed9176d..c480e1af055 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php @@ -13,7 +13,7 @@ $metadata->setPrimaryTable($tableMetadata); $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); $metadata->setInheritanceType(Mapping\InheritanceType::NONE); -$metadata->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_IMPLICIT); +$metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); $metadata->addLifecycleCallback('doStuffOnPrePersist', 'prePersist'); $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); From 8e7548b72b31f54632888bcf106bc15f61594931 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sun, 23 Oct 2016 05:23:45 +0000 Subject: [PATCH 082/275] Removed ClassMetadata::GENERATOR_TYPE_* constants and created GeneratorType::* --- .../ORM/Mapping/Builder/FieldBuilder.php | 5 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 89 +++++-------------- .../ORM/Mapping/ClassMetadataFactory.php | 20 ++--- .../ORM/Mapping/Driver/AnnotationDriver.php | 7 +- .../ORM/Mapping/Driver/DatabaseDriver.php | 3 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 5 +- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 2 +- lib/Doctrine/ORM/Mapping/GeneratorType.php | 78 ++++++++++++++++ .../Entity/BasicEntityPersister.php | 3 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 24 ++--- .../Tools/Export/Driver/AbstractExporter.php | 28 ------ .../ORM/Tools/Export/Driver/PhpExporter.php | 4 +- .../ORM/Tools/Export/Driver/XmlExporter.php | 7 +- .../Tests/Mocks/EntityPersisterMock.php | 9 +- .../DDC1476EntityWithDefaultFieldType.php | 4 +- .../Tests/Models/DDC3579/DDC3579User.php | 4 +- .../Tests/Models/DDC869/DDC869Payment.php | 4 +- .../Tests/Models/DDC889/DDC889Class.php | 4 +- .../Tests/Models/DDC889/DDC889SuperClass.php | 4 +- .../Tests/Models/DDC964/DDC964User.php | 4 +- .../ORM/Functional/Ticket/DDC2387Test.php | 5 +- .../ORM/Functional/Ticket/DDC2415Test.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 18 ++-- .../ORM/Mapping/ClassMetadataFactoryTest.php | 12 +-- .../Tests/ORM/Mapping/ClassMetadataTest.php | 4 +- .../Tests/ORM/Mapping/FieldBuilderTest.php | 3 +- .../php/Doctrine.Tests.Models.Cache.City.php | 2 +- ...ine.Tests.Models.Company.CompanyPerson.php | 15 ++-- ...1476.DDC1476EntityWithDefaultFieldType.php | 2 +- ....Models.DDC2825.ExplicitSchemaAndTable.php | 2 +- ...dels.DDC2825.SchemaAndTableInTableName.php | 2 +- ...trine.Tests.Models.DDC3579.DDC3579User.php | 2 +- ...rine.Tests.Models.DDC869.DDC869Payment.php | 2 +- ...e.Tests.Models.DDC889.DDC889SuperClass.php | 2 +- ...octrine.Tests.Models.DDC964.DDC964User.php | 2 +- .../php/Doctrine.Tests.ORM.Mapping.Animal.php | 2 +- ...ctrine.Tests.ORM.Mapping.DDC1170Entity.php | 2 +- ...octrine.Tests.ORM.Mapping.DDC807Entity.php | 2 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 2 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 10 +-- .../AbstractClassMetadataExporterTest.php | 3 +- .../Export/XmlClassMetadataExporterTest.php | 2 +- .../Doctrine.Tests.ORM.Tools.Export.User.php | 2 +- tests/Doctrine/Tests/ORM/UnitOfWorkTest.php | 9 +- 44 files changed, 206 insertions(+), 211 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/GeneratorType.php diff --git a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php index 188c7219087..1806eb4e4e5 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php @@ -19,6 +19,7 @@ namespace Doctrine\ORM\Mapping\Builder; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\GeneratorType; /** * Field Builder @@ -282,9 +283,7 @@ public function build() $cm = $this->builder->getClassMetadata(); if ($this->generatedValue) { - $cm->setIdGeneratorType( - constant('Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_' . $this->generatedValue) - ); + $cm->setIdGeneratorType(constant(sprintf('%s::%s', GeneratorType::class, strtoupper($this->generatedValue)))); } $this->builder->addProperty($this->name, $this->type->getName(), $this->mapping); diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index ac1540c80b1..8f9d18e50bd 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -54,51 +54,6 @@ */ class ClassMetadata implements ClassMetadataInterface { - /* The Id generator types. */ - /** - * AUTO means the generator type will depend on what the used platform prefers. - * Offers full portability. - */ - const GENERATOR_TYPE_AUTO = 1; - - /** - * SEQUENCE means a separate sequence object will be used. Platforms that do - * not have native sequence support may emulate it. Full portability is currently - * not guaranteed. - */ - const GENERATOR_TYPE_SEQUENCE = 2; - - /** - * TABLE means a separate table is used for id generation. - * Offers full portability. - */ - const GENERATOR_TYPE_TABLE = 3; - - /** - * IDENTITY means an identity column is used for id generation. The database - * will fill in the id column on insertion. Platforms that do not support - * native identity columns may emulate them. Full portability is currently - * not guaranteed. - */ - const GENERATOR_TYPE_IDENTITY = 4; - - /** - * NONE means the class does not have a generated id. That means the class - * must have a natural, manually assigned id. - */ - const GENERATOR_TYPE_NONE = 5; - - /** - * UUID means that a UUID/GUID expression is used for id generation. Full - * portability is currently not guaranteed. - */ - const GENERATOR_TYPE_UUID = 6; - - /** - * CUSTOM means that customer will use own ID generator that supposedly work - */ - const GENERATOR_TYPE_CUSTOM = 7; - /** * Identifies a one-to-one association. */ @@ -239,16 +194,23 @@ class ClassMetadata implements ClassMetadataInterface /** * READ-ONLY: The inheritance mapping type used by the class. * - * @var integer + * @var string */ public $inheritanceType = InheritanceType::NONE; /** * READ-ONLY: The Id generator type used by the class. * - * @var int + * @var string + */ + public $generatorType = GeneratorType::NONE; + + /** + * READ-ONLY: The policy used for change-tracking on entities of this class. + * + * @var string */ - public $generatorType = self::GENERATOR_TYPE_NONE; + public $changeTrackingPolicy = ChangeTrackingPolicy::DEFERRED_IMPLICIT; /** * READ-ONLY: The definition of the identity generator of this class. @@ -419,13 +381,6 @@ class ClassMetadata implements ClassMetadataInterface */ public $containsForeignIdentifier = false; - /** - * READ-ONLY: The policy used for change-tracking on entities of this class. - * - * @var integer - */ - public $changeTrackingPolicy = ChangeTrackingPolicy::DEFERRED_IMPLICIT; - /** * READ-ONLY: The field which is used for versioning in optimistic locking (if any). * @@ -666,7 +621,7 @@ public function __sleep() $serialized[] = 'subClasses'; } - if ($this->generatorType !== self::GENERATOR_TYPE_NONE) { + if ($this->generatorType !== GeneratorType::NONE) { $serialized[] = 'generatorType'; } @@ -1593,7 +1548,7 @@ public function setIdGeneratorType($generatorType) */ public function usesIdGenerator() { - return $this->generatorType != self::GENERATOR_TYPE_NONE; + return $this->generatorType !== GeneratorType::NONE; } /** @@ -1601,7 +1556,7 @@ public function usesIdGenerator() */ public function isInheritanceTypeNone() { - return $this->inheritanceType == InheritanceType::NONE; + return $this->inheritanceType === InheritanceType::NONE; } /** @@ -1612,7 +1567,7 @@ public function isInheritanceTypeNone() */ public function isInheritanceTypeJoined() { - return $this->inheritanceType == InheritanceType::JOINED; + return $this->inheritanceType === InheritanceType::JOINED; } /** @@ -1623,7 +1578,7 @@ public function isInheritanceTypeJoined() */ public function isInheritanceTypeSingleTable() { - return $this->inheritanceType == InheritanceType::SINGLE_TABLE; + return $this->inheritanceType === InheritanceType::SINGLE_TABLE; } /** @@ -1634,7 +1589,7 @@ public function isInheritanceTypeSingleTable() */ public function isInheritanceTypeTablePerClass() { - return $this->inheritanceType == InheritanceType::TABLE_PER_CLASS; + return $this->inheritanceType === InheritanceType::TABLE_PER_CLASS; } /** @@ -1644,7 +1599,7 @@ public function isInheritanceTypeTablePerClass() */ public function isIdGeneratorIdentity() { - return $this->generatorType == self::GENERATOR_TYPE_IDENTITY; + return $this->generatorType === GeneratorType::IDENTITY; } /** @@ -1654,7 +1609,7 @@ public function isIdGeneratorIdentity() */ public function isIdGeneratorSequence() { - return $this->generatorType == self::GENERATOR_TYPE_SEQUENCE; + return $this->generatorType === GeneratorType::SEQUENCE; } /** @@ -1664,7 +1619,7 @@ public function isIdGeneratorSequence() */ public function isIdGeneratorTable() { - return $this->generatorType == self::GENERATOR_TYPE_TABLE; + return $this->generatorType === GeneratorType::TABLE; } /** @@ -1675,7 +1630,7 @@ public function isIdGeneratorTable() */ public function isIdentifierNatural() { - return $this->generatorType == self::GENERATOR_TYPE_NONE; + return $this->generatorType === GeneratorType::NONE; } /** @@ -1685,7 +1640,7 @@ public function isIdentifierNatural() */ public function isIdentifierUuid() { - return $this->generatorType == self::GENERATOR_TYPE_UUID; + return $this->generatorType === GeneratorType::UUID; } /** @@ -2650,7 +2605,7 @@ public function setIdGenerator($generator) */ public function setGeneratorDefinition(array $definition) { - if ($this->generatorType === ClassMetadata::GENERATOR_TYPE_SEQUENCE && ! isset($definition['sequenceName'])) { + if ($this->generatorType === GeneratorType::SEQUENCE && ! isset($definition['sequenceName'])) { throw MappingException::missingSequenceName($this->name); } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 3ca2860dc96..3dcabf8ca7b 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -688,12 +688,12 @@ private function completeIdGeneratorMapping(ClassMetadata $class) $idGenType = $class->generatorType; $platform = $this->getTargetPlatform(); - if ($idGenType === ClassMetadata::GENERATOR_TYPE_AUTO) { + if ($idGenType === GeneratorType::AUTO) { $idGenType = $platform->prefersSequences() - ? ClassMetadata::GENERATOR_TYPE_SEQUENCE + ? GeneratorType::SEQUENCE : ($platform->prefersIdentityColumns() - ? ClassMetadata::GENERATOR_TYPE_IDENTITY - : ClassMetadata::GENERATOR_TYPE_TABLE + ? GeneratorType::IDENTITY + : GeneratorType::TABLE ); $class->setIdGeneratorType($idGenType); @@ -701,7 +701,7 @@ private function completeIdGeneratorMapping(ClassMetadata $class) // Create & assign an appropriate ID generator instance switch ($class->generatorType) { - case ClassMetadata::GENERATOR_TYPE_IDENTITY: + case GeneratorType::IDENTITY: $sequenceName = null; $fieldName = $class->identifier ? $class->getSingleIdentifierFieldName() : null; @@ -722,7 +722,7 @@ private function completeIdGeneratorMapping(ClassMetadata $class) break; - case ClassMetadata::GENERATOR_TYPE_SEQUENCE: + case GeneratorType::SEQUENCE: // If there is no sequence definition yet, create a default definition $definition = $class->generatorDefinition; @@ -743,19 +743,19 @@ private function completeIdGeneratorMapping(ClassMetadata $class) $class->setIdGenerator($sequenceGenerator); break; - case ClassMetadata::GENERATOR_TYPE_NONE: + case GeneratorType::NONE: $class->setIdGenerator(new Sequencing\AssignedGenerator()); break; - case ClassMetadata::GENERATOR_TYPE_UUID: + case GeneratorType::UUID: $class->setIdGenerator(new Sequencing\UuidGenerator()); break; - case ClassMetadata::GENERATOR_TYPE_TABLE: + case GeneratorType::TABLE: throw new ORMException("TableGenerator not yet implemented."); break; - case ClassMetadata::GENERATOR_TYPE_CUSTOM: + case GeneratorType::CUSTOM: $definition = $class->generatorDefinition; if ( ! class_exists($definition['class'])) { diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 0100a0d8cb6..fdb544df3f4 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -34,6 +34,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\JoinTableMetadata; @@ -316,11 +317,9 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat // Check for GeneratedValue strategy if ($generatedValueAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\GeneratedValue::class)) { - $idGeneratorType = constant( - sprintf('%s::GENERATOR_TYPE_%s', ClassMetadata::class, $generatedValueAnnot->strategy) - ); + $strategy = strtoupper($generatedValueAnnot->strategy); - $metadata->setIdGeneratorType($idGeneratorType); + $metadata->setIdGeneratorType(constant(sprintf('%s::%s', GeneratorType::class, $strategy))); } // Check for CustomGenerator/SequenceGenerator/TableGenerator definition diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index 6f6e8f27b6d..87e8781895e 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -31,6 +31,7 @@ use Doctrine\ORM\Mapping\Builder\TableMetadataBuilder; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\JoinTableMetadata; use Doctrine\ORM\Mapping\MappingException; @@ -384,7 +385,7 @@ private function buildFieldMappings(ClassMetadata $metadata) // We need to check for the columns here, because we might have associations as id as well. if ($ids && count($primaryKeys) === 1) { - $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); + $metadata->setIdGeneratorType(GeneratorType::AUTO); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index a4e5f863890..55f074ee731 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -27,6 +27,7 @@ use Doctrine\ORM\Mapping\CacheUsage; use Doctrine\ORM\Mapping\ChangeTrackingPolicy; use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\JoinTableMetadata; @@ -326,9 +327,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) : 'AUTO' ; - $metadata->setIdGeneratorType( - constant(sprintf('%s::GENERATOR_TYPE_%s', ClassMetadata::class, strtoupper($strategy))) - ); + $metadata->setIdGeneratorType(constant(sprintf('%s::%s', GeneratorType::class, strtoupper($strategy)))); } // Check for SequenceGenerator/TableGenerator definition diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index 4a52c31a667..b9ac8c731df 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -38,7 +38,7 @@ class FieldMetadata extends ColumnMetadata implements Property protected $name; /** @var int */ - protected $identifierGeneratorType = ClassMetadata::GENERATOR_TYPE_NONE; + protected $identifierGeneratorType = GeneratorType::NONE; /** @var array */ protected $identifierGeneratorDefinition = []; diff --git a/lib/Doctrine/ORM/Mapping/GeneratorType.php b/lib/Doctrine/ORM/Mapping/GeneratorType.php new file mode 100644 index 00000000000..c393651488c --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/GeneratorType.php @@ -0,0 +1,78 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +final class GeneratorType +{ + /** + * NONE means the class does not have a generated id. That means the class + * must have a natural, manually assigned id. + */ + const NONE = 'NONE'; + + /** + * AUTO means the generator type will depend on what the used platform prefers. + * Offers full portability. + */ + const AUTO = 'AUTO'; + + /** + * SEQUENCE means a separate sequence object will be used. Platforms that do + * not have native sequence support may emulate it. Full portability is currently + * not guaranteed. + */ + const SEQUENCE = 'SEQUENCE'; + + /** + * TABLE means a separate table is used for id generation. + * Offers full portability. + */ + const TABLE = 'TABLE'; + + /** + * IDENTITY means an identity column is used for id generation. The database + * will fill in the id column on insertion. Platforms that do not support + * native identity columns may emulate them. Full portability is currently + * not guaranteed. + */ + const IDENTITY = 'IDENTITY'; + + /** + * UUID means that a UUID/GUID expression is used for id generation. Full + * portability is currently not guaranteed. + */ + const UUID = 'UUID'; + + /** + * CUSTOM means that customer will use own ID generator that supposedly work + */ + const CUSTOM = 'CUSTOM'; + + /** + * Will break upon instantiation. + * + */ + private function __construct() + { + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index a529195a522..be1350810dd 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -30,6 +30,7 @@ use Doctrine\ORM\Mapping\ColumnMetadata; use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\OptimisticLockException; @@ -1478,7 +1479,7 @@ protected function getInsertColumnList() continue; } - if (! $this->class->isIdGeneratorIdentity() || $this->class->identifier[0] !== $name) { + if ($this->class->generatorType !== GeneratorType::IDENTITY || $this->class->identifier[0] !== $name) { $property = $this->class->getProperty($name); $columnName = $property->getColumnName(); diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index bae4a6a383b..a2b03f5f9d3 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -26,6 +26,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\JoinColumnMetadata; @@ -174,21 +175,6 @@ class EntityGenerator Type::BOOLEAN => 'bool', ]; - /** - * Hash-map to handle generator types string. - * - * @var array - */ - protected static $generatorStrategyMap = [ - ClassMetadata::GENERATOR_TYPE_AUTO => 'AUTO', - ClassMetadata::GENERATOR_TYPE_SEQUENCE => 'SEQUENCE', - ClassMetadata::GENERATOR_TYPE_TABLE => 'TABLE', - ClassMetadata::GENERATOR_TYPE_IDENTITY => 'IDENTITY', - ClassMetadata::GENERATOR_TYPE_NONE => 'NONE', - ClassMetadata::GENERATOR_TYPE_UUID => 'UUID', - ClassMetadata::GENERATOR_TYPE_CUSTOM => 'CUSTOM' - ]; - /** * @var string */ @@ -1161,7 +1147,7 @@ protected function generateEntityStubMethods(ClassMetadata $metadata) $fieldType = $property->getTypeName(); $nullable = $this->nullableFieldExpression($property); - if (( ! $property->isPrimaryKey() || $metadata->generatorType == ClassMetadata::GENERATOR_TYPE_NONE) && + if (( ! $property->isPrimaryKey() || $metadata->generatorType == GeneratorType::NONE) && ( ! $metadata->isEmbeddedClass || ! $this->embeddablesImmutable) && $code = $this->generateEntityStubMethod($metadata, 'set', $fieldName, $fieldType, $nullable)) { $methods[] = $code; @@ -1785,15 +1771,15 @@ protected function getChangeTrackingPolicyString($type) * * @return string The literal string for the generator type. * - * @throws \InvalidArgumentException When the generator type does not exist. + * @throws \InvalidArgumentException When the generator type does not exist. */ protected function getIdGeneratorTypeString($type) { - if ( ! isset(static::$generatorStrategyMap[$type])) { + if ( ! defined(sprintf('%s::%s', GeneratorType::class, $type))) { throw new \InvalidArgumentException(sprintf('Invalid provided IdGeneratorType: %s', $type)); } - return static::$generatorStrategyMap[$type]; + return $type; } /** diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php index c63f7145475..745df08b66c 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php @@ -178,32 +178,4 @@ public function setExtension($extension) { $this->_extension = $extension; } - - /** - * @param int $type - * - * @return string - */ - protected function _getIdGeneratorTypeString($type) - { - switch ($type) { - case ClassMetadata::GENERATOR_TYPE_AUTO: - return 'AUTO'; - - case ClassMetadata::GENERATOR_TYPE_SEQUENCE: - return 'SEQUENCE'; - - case ClassMetadata::GENERATOR_TYPE_TABLE: - return 'TABLE'; - - case ClassMetadata::GENERATOR_TYPE_IDENTITY: - return 'IDENTITY'; - - case ClassMetadata::GENERATOR_TYPE_UUID: - return 'UUID'; - - case ClassMetadata::GENERATOR_TYPE_CUSTOM: - return 'CUSTOM'; - } - } } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 1ce96db0b6a..ccbc65285ea 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -173,8 +173,8 @@ public function exportClassMetadata(ClassMetadata $metadata) $lines[] = '$metadata->addProperty($property);'; } - if ( ! $metadata->isIdentifierComposite && $generatorType = $this->_getIdGeneratorTypeString($metadata->generatorType)) { - $lines[] = '$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_' . $generatorType . ');'; + if ( ! $metadata->isIdentifierComposite) { + $lines[] = '$metadata->setIdGeneratorType(Mapping\GeneratorType::' . $metadata->generatorType . ');'; } foreach ($metadata->associationMappings as $associationMapping) { diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 31f6e784a28..a0ece4a4a8e 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -21,6 +21,7 @@ use Doctrine\ORM\Mapping\ChangeTrackingPolicy; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\JoinColumnMetadata; @@ -201,10 +202,10 @@ public function exportClassMetadata(ClassMetadata $metadata) $idXml->addAttribute('association-key', 'true'); }*/ - if ($idGeneratorType = $this->_getIdGeneratorTypeString($metadata->generatorType)) { + if ($metadata->generatorType) { $generatorXml = $idXml->addChild('generator'); - $generatorXml->addAttribute('strategy', $idGeneratorType); + $generatorXml->addAttribute('strategy', $metadata->generatorType); $this->exportSequenceInformation($idXml, $metadata); } @@ -488,7 +489,7 @@ private function exportSequenceInformation(\SimpleXMLElement $identifierXmlNode, { $sequenceDefinition = $metadata->generatorDefinition; - if (! ($metadata->generatorType === ClassMetadata::GENERATOR_TYPE_SEQUENCE && $sequenceDefinition)) { + if (! ($metadata->generatorType === GeneratorType::SEQUENCE && $sequenceDefinition)) { return; } diff --git a/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php b/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php index 63be3397e68..a39ac4f21ce 100644 --- a/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php +++ b/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php @@ -4,6 +4,7 @@ use Doctrine\Common\Collections\Criteria; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Persisters\Entity\BasicEntityPersister; /** @@ -32,7 +33,7 @@ class EntityPersisterMock extends BasicEntityPersister private $identityColumnValueCounter = 0; /** - * @var int|null + * @var string|null */ private $mockIdGeneratorType; @@ -54,15 +55,17 @@ class EntityPersisterMock extends BasicEntityPersister public function addInsert($entity) { $this->inserts[] = $entity; - if ( ! is_null($this->mockIdGeneratorType) && $this->mockIdGeneratorType == ClassMetadata::GENERATOR_TYPE_IDENTITY - || $this->class->isIdGeneratorIdentity()) { + + if ($this->mockIdGeneratorType === GeneratorType::IDENTITY || $this->class->isIdGeneratorIdentity()) { $id = $this->identityColumnValueCounter++; + $this->postInsertIds[] = [ 'generatedId' => $id, 'entity' => $entity, ]; return $id; } + return null; } diff --git a/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php b/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php index 05c36cb72ad..15a8803cb86 100644 --- a/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php +++ b/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php @@ -44,7 +44,7 @@ public function setName($name) $this->name = $name; } - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) + public static function loadMetadata(Mapping\ClassMetadata $metadata) { $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); @@ -57,7 +57,7 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat $metadata->addProperty($fieldMetadata); - $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE); + $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } diff --git a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php index 390de3e0614..a47045cd2a6 100644 --- a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php +++ b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php @@ -81,7 +81,7 @@ public function getGroups() return $this->groups; } - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) + public static function loadMetadata(Mapping\ClassMetadata $metadata) { $fieldMetadata = new Mapping\FieldMetadata('id'); @@ -108,6 +108,6 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat ] ); - $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_AUTO); + $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } } diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php index d2e6843c228..317c5826ca7 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php @@ -22,7 +22,7 @@ class DDC869Payment protected $value; - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) + public static function loadMetadata(Mapping\ClassMetadata $metadata) { $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); @@ -38,7 +38,7 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat $metadata->isMappedSuperclass = true; $metadata->setCustomRepositoryClass(DDC869PaymentRepository::class); - $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_AUTO); + $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } } diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php b/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php index ceb0bd81bed..c2359936298 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php @@ -14,7 +14,7 @@ class DDC889Class extends DDC889SuperClass */ protected $id; - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) + public static function loadMetadata(Mapping\ClassMetadata $metadata) { $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); @@ -22,7 +22,7 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat $metadata->addProperty($fieldMetadata); - $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_AUTO); + $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } } diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php b/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php index 44ff3eba2f3..6b06a7b3d7a 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php @@ -13,13 +13,13 @@ class DDC889SuperClass /** @Column() */ protected $name; - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) + public static function loadMetadata(Mapping\ClassMetadata $metadata) { $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); $metadata->addProperty($fieldMetadata); $metadata->isMappedSuperclass = true; - $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_NONE); + $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php index 41b75e095c1..a18b5b670a4 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php @@ -109,7 +109,7 @@ public function setAddress(DDC964Address $address) $this->address = $address; } - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) + public static function loadMetadata(Mapping\ClassMetadata $metadata) { $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); @@ -172,6 +172,6 @@ public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat ] ); - $metadata->setIdGeneratorType(\Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_AUTO); + $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php index d21ec16b781..4d924c06fe1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\Tests\ORM\Functional\DatabaseDriverTestCase; use Doctrine\ORM\Mapping\ClassMetadata; @@ -24,7 +25,7 @@ public function testCompositeAssociationKeyDetection() $metadata = $this->convertToClassMetadata([$product, $attributes], []); - self::assertEquals(ClassMetadata::GENERATOR_TYPE_NONE, $metadata['Ddc2387Attributes']->generatorType); - self::assertEquals(ClassMetadata::GENERATOR_TYPE_AUTO, $metadata['Ddc2387Product']->generatorType); + self::assertEquals(GeneratorType::NONE, $metadata['Ddc2387Attributes']->generatorType); + self::assertEquals(GeneratorType::AUTO, $metadata['Ddc2387Product']->generatorType); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php index 7ce37d30a09..4828731da8c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php @@ -69,7 +69,7 @@ public static function loadMetadata(ClassMetadata $metadata) $metadata->addProperty($fieldMetadata); - $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); + $metadata->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); $metadata->setGeneratorDefinition( [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 62fccf1edbf..877837dae3b 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -190,7 +190,7 @@ public function testEntityCustomGenerator() { $class = $this->createClassMetadata(Animal::class); - self::assertEquals(ClassMetadata::GENERATOR_TYPE_CUSTOM, $class->generatorType, "Generator Type"); + self::assertEquals(Mapping\GeneratorType::CUSTOM, $class->generatorType, "Generator Type"); self::assertEquals( [ 'class' => 'stdClass', @@ -315,7 +315,7 @@ public function testIdentifier($class) self::assertEquals('integer', $property->getTypeName()); self::assertEquals(['id'], $class->identifier); - self::assertEquals(ClassMetadata::GENERATOR_TYPE_AUTO, $class->generatorType, "ID-Generator is not ClassMetadata::GENERATOR_TYPE_AUTO"); + self::assertEquals(Mapping\GeneratorType::AUTO, $class->generatorType, "ID-Generator is not GeneratorType::AUTO"); return $class; } @@ -549,7 +549,7 @@ public function testDefaultFieldType() self::assertEquals('id', $idProperty->getColumnName()); self::assertEquals('name', $nameProperty->getColumnName()); - self::assertEquals(ClassMetadata::GENERATOR_TYPE_NONE, $class->generatorType); + self::assertEquals(Mapping\GeneratorType::NONE, $class->generatorType); } /** @@ -1309,7 +1309,7 @@ public static function loadMetadata(ClassMetadata $metadata) $metadata->addProperty($fieldMetadata); $metadata->setVersionProperty($fieldMetadata); - $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); + $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $joinColumns = []; @@ -1391,7 +1391,7 @@ abstract class Animal public static function loadMetadata(ClassMetadata $metadata) { - $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); + $metadata->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); $metadata->setGeneratorDefinition( [ 'class' => 'stdClass', @@ -1477,7 +1477,7 @@ public static function loadMetadata(ClassMetadata $metadata) $metadata->addProperty($fieldMetadata); - $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); + $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } @@ -1515,7 +1515,7 @@ public static function loadMetadata(ClassMetadata $metadata) $metadata->setDiscriminatorColumn($discrColumn); - $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); + $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } @@ -1588,7 +1588,7 @@ public static function loadMetadata(ClassMetadata $metadata) $metadata->addProperty($fieldMetadata); - $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); + $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } @@ -1622,7 +1622,7 @@ public static function loadMetadata(ClassMetadata $metadata) $metadata->addProperty($fieldMetadata); - $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); + $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index fa770dc6ccb..f280b048ff8 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -54,9 +54,9 @@ public function testGetMetadataForSingleClass() // Prechecks self::assertEquals([], $cm1->parentClasses); self::assertEquals(Mapping\InheritanceType::NONE, $cm1->inheritanceType); + self::assertEquals(Mapping\GeneratorType::AUTO, $cm1->generatorType); self::assertTrue($cm1->hasField('name')); self::assertEquals(2, count($cm1->associationMappings)); - self::assertEquals(ClassMetadata::GENERATOR_TYPE_AUTO, $cm1->generatorType); self::assertEquals('group', $cm1->table->getName()); // Go @@ -72,7 +72,7 @@ public function testGetMetadataFor_ReturnsLoadedCustomIdGenerator() { $cm1 = $this->_createValidClassMetadata(); - $cm1->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); + $cm1->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); $cm1->generatorDefinition = [ 'class' => CustomIdGenerator::class, @@ -85,7 +85,7 @@ public function testGetMetadataFor_ReturnsLoadedCustomIdGenerator() $actual = $cmf->getMetadataFor($cm1->name); - self::assertEquals(ClassMetadata::GENERATOR_TYPE_CUSTOM, $actual->generatorType); + self::assertEquals(Mapping\GeneratorType::CUSTOM, $actual->generatorType); self::assertInstanceOf(CustomIdGenerator::class, $actual->idGenerator); } @@ -93,7 +93,7 @@ public function testGetMetadataFor_ThrowsExceptionOnUnknownCustomGeneratorClass( { $cm1 = $this->_createValidClassMetadata(); - $cm1->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); + $cm1->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); $cm1->generatorDefinition = [ 'class' => 'NotExistingGenerator', @@ -112,7 +112,7 @@ public function testGetMetadataFor_ThrowsExceptionOnUnknownCustomGeneratorClass( public function testGetMetadataFor_ThrowsExceptionOnMissingCustomGeneratorDefinition() { $cm1 = $this->_createValidClassMetadata(); - $cm1->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); + $cm1->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); $cmf = $this->_createTestFactory(); $cmf->setMetadataForClass($cm1->name, $cm1); $this->expectException(ORMException::class); @@ -322,7 +322,7 @@ protected function _createValidClassMetadata() ); // and an id generator type - $cm1->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); + $cm1->setIdGeneratorType(Mapping\GeneratorType::AUTO); return $cm1; } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 3b43d09d4c7..8e7e8c4fcd9 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -1359,10 +1359,10 @@ public function testSetSequenceGeneratorThrowsExceptionWhenSequenceNameIsMissing { $cm = new ClassMetadata(CMS\CmsUser::class); - $cm->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); + $cm->setIdGeneratorType(Mapping\GeneratorType::SEQUENCE); $cm->initializeReflection(new RuntimeReflectionService()); - $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); + $this->expectException(Mapping\MappingException::class); $cm->setGeneratorDefinition([]); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/FieldBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/FieldBuilderTest.php index 54ec4b7e8aa..47fa4a29062 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/FieldBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/FieldBuilderTest.php @@ -4,6 +4,7 @@ use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\Tests\Models\CMS\CmsUser; use Doctrine\Tests\OrmTestCase; @@ -21,7 +22,7 @@ public function testCustomIdGeneratorCanBeSet() $metadata = $cmBuilder->getClassMetadata(); - self::assertEquals(ClassMetadata::GENERATOR_TYPE_CUSTOM, $metadata->generatorType); + self::assertEquals(GeneratorType::CUSTOM, $metadata->generatorType); self::assertEquals( [ 'class' => 'stdClass', diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index dfc0c9db54c..7413fcfc636 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -14,7 +14,7 @@ $metadata->setPrimaryTable($tableMetadata); $metadata->setInheritanceType(Mapping\InheritanceType::NONE); $metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); -$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_IDENTITY); +$metadata->setIdGeneratorType(Mapping\GeneratorType::IDENTITY); $metadata->enableCache(['usage' => Mapping\CacheUsage::READ_ONLY]); $fieldMetadata = new Mapping\FieldMetadata('id'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php index cdc897485a7..b32ccf8e2ac 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php @@ -9,22 +9,19 @@ /* @var $metadata ClassMetadata */ $metadata->setPrimaryTable($tableMetadata); -/** @var ClassMetadata $metadata */ -$metadata->setPrimaryTable(['name' => 'company_person']); - $metadata->addNamedNativeQuery( [ - 'name' => 'fetchAllWithResultClass', - 'query' => 'SELECT id, name, discr FROM company_persons ORDER BY name', - 'resultClass' => CompanyPerson::class, + 'name' => 'fetchAllWithResultClass', + 'query' => 'SELECT id, name, discr FROM company_persons ORDER BY name', + 'resultClass' => CompanyPerson::class, ] ); $metadata->addNamedNativeQuery( [ - 'name' => 'fetchAllWithSqlResultSetMapping', - 'query' => 'SELECT id, name, discr AS discriminator FROM company_persons ORDER BY name', - 'resultSetMapping' => 'mappingFetchAll', + 'name' => 'fetchAllWithSqlResultSetMapping', + 'query' => 'SELECT id, name, discr AS discriminator FROM company_persons ORDER BY name', + 'resultSetMapping' => 'mappingFetchAll', ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php index 68f1e4b2ce9..017681606e5 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php @@ -16,4 +16,4 @@ $metadata->addProperty($fieldMetadata); -$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); +$metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php index defc2208e2e..8f4f31ec253 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php @@ -10,7 +10,7 @@ /* @var $metadata ClassMetadata */ $metadata->setPrimaryTable($tableMetadata); -$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); +$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $fieldMetadata = new Mapping\FieldMetadata('id'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php index b04cc5e6db7..939acb67f12 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php @@ -10,7 +10,7 @@ /* @var $metadata ClassMetadata */ $metadata->setPrimaryTable($tableMetadata); -$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); +$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php index 2e2c46cf1a0..ae2eb797601 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php @@ -28,4 +28,4 @@ ] ); -$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); +$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php index d6c4cff1bdf..90342944a1e 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php @@ -20,4 +20,4 @@ $metadata->addProperty($fieldMetadata); $metadata->setCustomRepositoryClass(DDC869PaymentRepository::class); -$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); +$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php index 2c79f9d5c67..830afd69118 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php @@ -13,4 +13,4 @@ $metadata->addProperty($fieldMetadata); $metadata->setCustomRepositoryClass(DDC889SuperClass::class); -$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); +$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php index 2df8ca59688..1ef6a06bc49 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php @@ -67,4 +67,4 @@ ] ); -$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); +$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php index 57afcfed843..9376e238300 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php @@ -34,7 +34,7 @@ $metadata->addProperty($fieldMetadata); -$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); +$metadata->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); $metadata->setGeneratorDefinition( [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php index 7f97a971381..19c20284962 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php @@ -18,4 +18,4 @@ $metadata->addProperty($fieldMetadata); -$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); +$metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php index e6fab1b4c9a..cb80eaa79e8 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php @@ -19,4 +19,4 @@ $metadata->setDiscriminatorColumn($discrColumn); -$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE); +$metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index 844aa02f1f3..eea9e015aaa 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -102,7 +102,7 @@ $metadata->addProperty($versionFieldMetadata); $metadata->setVersionProperty($versionFieldMetadata); -$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); +$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $joinColumns = []; diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 10cedee9ff9..c593d3197b6 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -160,7 +160,7 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $metadata->addLifecycleCallback('loading', 'postLoad'); $metadata->addLifecycleCallback('willBeRemoved', 'preRemove'); - $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); + $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); foreach ($embeddedClasses as $fieldName => $embeddedClass) { $metadata->mapEmbedded( @@ -201,7 +201,7 @@ private function generateEntityTypeFixture(array $field) $metadata->addProperty($fieldMetadata); - $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); + $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $this->_generator->writeEntityClass($metadata, $this->_tmpDir); @@ -660,7 +660,7 @@ public function testGenerateEntityWithSequenceGenerator() $metadata->addProperty($fieldMetadata); - $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); + $metadata->setIdGeneratorType(Mapping\GeneratorType::SEQUENCE); $metadata->setGeneratorDefinition( [ @@ -700,7 +700,7 @@ public function testGenerateEntityWithMultipleInverseJoinColumns() $metadata->addProperty($fieldMetadata); - $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); + $metadata->setIdGeneratorType(Mapping\GeneratorType::SEQUENCE); $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('unidade_centro_custo'); @@ -824,7 +824,7 @@ public function testGetIdGeneratorTypeString() $reflection = new \ReflectionClass('\Doctrine\ORM\Mapping\ClassMetadata'); $method = new \ReflectionMethod($this->_generator, 'getIdGeneratorTypeString'); $constants = $reflection->getConstants(); - $pattern = '/^GENERATOR_TYPE_/'; + $pattern = '/^GeneratorType::/'; $method->setAccessible(true); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index 6258025c6e5..f1759089728 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -6,6 +6,7 @@ use Doctrine\Common\Persistence\Mapping\Driver\PHPDriver; use Doctrine\ORM\Configuration; use Doctrine\ORM\Mapping\FetchMode; +use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; @@ -177,7 +178,7 @@ public function testIdentifierIsExported($class) self::assertTrue($property->isPrimaryKey()); self::assertEquals(['id'], $class->identifier); - self::assertEquals(ClassMetadata::GENERATOR_TYPE_IDENTITY, $class->generatorType, "Generator Type wrong"); + self::assertEquals(GeneratorType::IDENTITY, $class->generatorType, "Generator Type wrong"); return $class; } diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php index 18abc4eb199..30adb457dd8 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php @@ -53,7 +53,7 @@ public function testSequenceGenerator() { $metadata->addProperty($fieldMetadata); - $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_SEQUENCE); + $metadata->setIdGeneratorType(Mapping\GeneratorType::SEQUENCE); $metadata->setGeneratorDefinition( [ diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php index c480e1af055..264088b7a50 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php @@ -11,7 +11,7 @@ $tableMetadata->addOption('foo', ['bar' => 'baz']); $metadata->setPrimaryTable($tableMetadata); -$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); +$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $metadata->setInheritanceType(Mapping\InheritanceType::NONE); $metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); diff --git a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php index 207bf326e2f..0806d18eecb 100644 --- a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php +++ b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php @@ -9,6 +9,7 @@ use Doctrine\Common\PropertyChangedListener; use Doctrine\ORM\Events; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\ORMInvalidArgumentException; use Doctrine\ORM\UnitOfWork; use Doctrine\Tests\Mocks\ConnectionMock; @@ -84,7 +85,7 @@ public function testSavingSingleEntityWithIdentityColumnForcesInsert() // Setup fake persister and id generator for identity generation $userPersister = new EntityPersisterMock($this->_emMock, $this->_emMock->getClassMetadata(ForumUser::class)); $this->_unitOfWork->setEntityPersister(ForumUser::class, $userPersister); - $userPersister->setMockIdGeneratorType(ClassMetadata::GENERATOR_TYPE_IDENTITY); + $userPersister->setMockIdGeneratorType(GeneratorType::IDENTITY); // Test $user = new ForumUser(); @@ -124,11 +125,11 @@ public function testCascadedIdentityColumnInsert() //ForumUser $userPersister = new EntityPersisterMock($this->_emMock, $this->_emMock->getClassMetadata(ForumUser::class)); $this->_unitOfWork->setEntityPersister(ForumUser::class, $userPersister); - $userPersister->setMockIdGeneratorType(ClassMetadata::GENERATOR_TYPE_IDENTITY); + $userPersister->setMockIdGeneratorType(GeneratorType::IDENTITY); // ForumAvatar $avatarPersister = new EntityPersisterMock($this->_emMock, $this->_emMock->getClassMetadata(ForumAvatar::class)); $this->_unitOfWork->setEntityPersister(ForumAvatar::class, $avatarPersister); - $avatarPersister->setMockIdGeneratorType(ClassMetadata::GENERATOR_TYPE_IDENTITY); + $avatarPersister->setMockIdGeneratorType(GeneratorType::IDENTITY); // Test $user = new ForumUser(); @@ -236,7 +237,7 @@ public function testNoUndefinedIndexNoticeOnScheduleForUpdateWithoutChanges() { // Setup fake persister and id generator $userPersister = new EntityPersisterMock($this->_emMock, $this->_emMock->getClassMetadata(ForumUser::class)); - $userPersister->setMockIdGeneratorType(ClassMetadata::GENERATOR_TYPE_IDENTITY); + $userPersister->setMockIdGeneratorType(GeneratorType::IDENTITY); $this->_unitOfWork->setEntityPersister(ForumUser::class, $userPersister); // Create a test user From 6299fb2900360be1c26758a2d412c558c08df9bf Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sun, 23 Oct 2016 05:55:44 +0000 Subject: [PATCH 083/275] Removed code duplication of helper methods, inlining calls. --- docs/en/cookbook/sql-table-prefixes.rst | 9 +- docs/en/reference/php-mapping.rst | 17 --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 106 +------------- .../ORM/Mapping/ClassMetadataFactory.php | 8 +- .../Collection/OneToManyPersister.php | 3 +- .../Entity/JoinedSubclassPersister.php | 8 +- .../ORM/Query/ResultSetMappingBuilder.php | 9 +- lib/Doctrine/ORM/Query/SqlWalker.php | 21 +-- lib/Doctrine/ORM/Tools/SchemaTool.php | 130 ++++++++++-------- lib/Doctrine/ORM/UnitOfWork.php | 22 +-- .../Tests/Mocks/EntityPersisterMock.php | 2 +- 11 files changed, 121 insertions(+), 214 deletions(-) diff --git a/docs/en/cookbook/sql-table-prefixes.rst b/docs/en/cookbook/sql-table-prefixes.rst index 73ee78a1be6..c8bdb220c5e 100644 --- a/docs/en/cookbook/sql-table-prefixes.rst +++ b/docs/en/cookbook/sql-table-prefixes.rst @@ -25,7 +25,9 @@ appropriate autoloaders. getClassMetadata(); - if (!$classMetadata->isInheritanceTypeSingleTable() || $classMetadata->getName() === $classMetadata->rootEntityName) { + if ($classMetadata->inheritanceType !== Mapping\InheritanceType::SINGLE_TABLE || + $classMetadata->getName() === $classMetadata->rootEntityName) { $classMetadata->setTableName($this->prefix . $classMetadata->getTableName()); } foreach ($classMetadata->getAssociationMappings() as $fieldName => $mapping) { - if ($mapping['type'] == \Doctrine\ORM\Mapping\ClassMetadata::MANY_TO_MANY && $mapping['isOwningSide']) { + if ($mapping['type'] == Mapping\ClassMetadata::MANY_TO_MANY && $mapping['isOwningSide']) { $mappedTableName = $mapping['joinTable']['name']; $classMetadata->associationMappings[$fieldName]['joinTable']['name'] = $this->prefix . $mappedTableName; } diff --git a/docs/en/reference/php-mapping.rst b/docs/en/reference/php-mapping.rst index fafd9a20676..2cd346b86d9 100644 --- a/docs/en/reference/php-mapping.rst +++ b/docs/en/reference/php-mapping.rst @@ -261,12 +261,7 @@ Identifier Getters - ``getIdentifierColumnNames()`` -- ``usesIdGenerator()`` - ``isIdentifier($fieldName)`` -- ``isIdGeneratorIdentity()`` -- ``isIdGeneratorSequence()`` -- ``isIdGeneratorTable()`` -- ``isIdentifierNatural()`` - ``getIdentifierFieldNames()`` - ``getSingleIdentifierFieldName()`` - ``getSingleIdentifierColumnName()`` @@ -275,21 +270,9 @@ Inheritance Getters ~~~~~~~~~~~~~~~~~~~ -- ``isInheritanceTypeNone()`` -- ``isInheritanceTypeJoined()`` -- ``isInheritanceTypeSingleTable()`` -- ``isInheritanceTypeTablePerClass()`` - ``isInheritedField($fieldName)`` - ``isInheritedAssociation($fieldName)`` -Change Tracking Getters -~~~~~~~~~~~~~~~~~~~~~~~ - - -- ``isChangeTrackingDeferredExplicit()`` -- ``isChangeTrackingDeferredImplicit()`` -- ``isChangeTrackingNotify()`` - Field & Association Getters ~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 8f9d18e50bd..5a26b477fb5 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -783,7 +783,7 @@ public function validateIdentifier() throw MappingException::identifierRequired($this->name); } - if ($this->usesIdGenerator() && $this->isIdentifierComposite) { + if ($this->generatorType !== GeneratorType::NONE && $this->isIdentifierComposite) { throw MappingException::compositeKeyAssignedIdGeneratorRequired($this->name); } } @@ -1239,7 +1239,7 @@ protected function validateAndCompleteOneToOneMapping(array $mapping) $uniqueConstraintColumns = []; foreach ($mapping['joinColumns'] as $joinColumn) { - if ($mapping['type'] === self::ONE_TO_ONE && ! $this->isInheritanceTypeSingleTable()) { + if ($mapping['type'] === self::ONE_TO_ONE && $this->inheritanceType !== InheritanceType::SINGLE_TABLE) { if (1 === count($mapping['joinColumns'])) { if (empty($mapping['id'])) { $joinColumn->setUnique(true); @@ -1541,108 +1541,6 @@ public function setIdGeneratorType($generatorType) $this->generatorType = $generatorType; } - /** - * Checks whether the mapped class uses an Id generator. - * - * @return boolean TRUE if the mapped class uses an Id generator, FALSE otherwise. - */ - public function usesIdGenerator() - { - return $this->generatorType !== GeneratorType::NONE; - } - - /** - * @return boolean - */ - public function isInheritanceTypeNone() - { - return $this->inheritanceType === InheritanceType::NONE; - } - - /** - * Checks whether the mapped class uses the JOINED inheritance mapping strategy. - * - * @return boolean TRUE if the class participates in a JOINED inheritance mapping, - * FALSE otherwise. - */ - public function isInheritanceTypeJoined() - { - return $this->inheritanceType === InheritanceType::JOINED; - } - - /** - * Checks whether the mapped class uses the SINGLE_TABLE inheritance mapping strategy. - * - * @return boolean TRUE if the class participates in a SINGLE_TABLE inheritance mapping, - * FALSE otherwise. - */ - public function isInheritanceTypeSingleTable() - { - return $this->inheritanceType === InheritanceType::SINGLE_TABLE; - } - - /** - * Checks whether the mapped class uses the TABLE_PER_CLASS inheritance mapping strategy. - * - * @return boolean TRUE if the class participates in a TABLE_PER_CLASS inheritance mapping, - * FALSE otherwise. - */ - public function isInheritanceTypeTablePerClass() - { - return $this->inheritanceType === InheritanceType::TABLE_PER_CLASS; - } - - /** - * Checks whether the class uses an identity column for the Id generation. - * - * @return boolean TRUE if the class uses the IDENTITY generator, FALSE otherwise. - */ - public function isIdGeneratorIdentity() - { - return $this->generatorType === GeneratorType::IDENTITY; - } - - /** - * Checks whether the class uses a sequence for id generation. - * - * @return boolean TRUE if the class uses the SEQUENCE generator, FALSE otherwise. - */ - public function isIdGeneratorSequence() - { - return $this->generatorType === GeneratorType::SEQUENCE; - } - - /** - * Checks whether the class uses a table for id generation. - * - * @return boolean TRUE if the class uses the TABLE generator, FALSE otherwise. - */ - public function isIdGeneratorTable() - { - return $this->generatorType === GeneratorType::TABLE; - } - - /** - * Checks whether the class has a natural identifier/pk (which means it does - * not use any Id generator. - * - * @return boolean - */ - public function isIdentifierNatural() - { - return $this->generatorType === GeneratorType::NONE; - } - - /** - * Checks whether the class use a UUID for id generation. - * - * @return boolean - */ - public function isIdentifierUuid() - { - return $this->generatorType === GeneratorType::UUID; - } - /** * Gets the name of the primary table. * diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 3dcabf8ca7b..bfb50e27c14 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -123,7 +123,7 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS /* @var $class ClassMetadata */ /* @var $parent ClassMetadata */ if ($parent) { - if ($parent->isInheritanceTypeSingleTable()) { + if ($parent->inheritanceType === InheritanceType::SINGLE_TABLE) { $class->setPrimaryTable($parent->table); } @@ -203,7 +203,7 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS }*/ if ($parent) { - if ($parent->isInheritanceTypeSingleTable()) { + if ($parent->inheritanceType === InheritanceType::SINGLE_TABLE) { $class->setPrimaryTable($parent->table); } @@ -236,7 +236,7 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS $class->setParentClasses($nonSuperclassParents); - if ($class->isRootEntity() && ! $class->isInheritanceTypeNone() && ! $class->discriminatorMap) { + if ($class->isRootEntity() && $class->inheritanceType !== InheritanceType::NONE && ! $class->discriminatorMap) { $this->addDefaultDiscriminatorMap($class); } @@ -317,7 +317,7 @@ protected function validateRuntimeMetadata($class, $parent) $class->validateLifecycleCallbacks($this->getReflectionService()); // verify inheritance - if ( ! $class->isMappedSuperclass && ! $class->isInheritanceTypeNone()) { + if ( ! $class->isMappedSuperclass && $class->inheritanceType !== InheritanceType::NONE) { if ( ! $parent) { if (count($class->discriminatorMap) === 0) { throw MappingException::missingDiscriminatorMap($class->name); diff --git a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php index a214c59f4dd..b86e3debd47 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php @@ -21,6 +21,7 @@ use Doctrine\Common\Collections\Criteria; use Doctrine\ORM\Mapping\ColumnMetadata; +use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\Utility\PersisterHelper; @@ -53,7 +54,7 @@ public function delete(PersistentCollection $collection) $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); - return $targetClass->isInheritanceTypeJoined() + return $targetClass->inheritanceType === InheritanceType::JOINED ? $this->deleteJoinedEntityCollection($collection) : $this->deleteEntityCollection($collection); } diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index 486d670a9ce..03092f2eba6 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -24,6 +24,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ColumnMetadata; +use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Utility\PersisterHelper; /** @@ -540,8 +541,11 @@ protected function getInsertColumnList() continue; } - if ($this->class->name != $this->class->rootEntityName - || ! $this->class->isIdGeneratorIdentity() || $this->class->identifier[0] !== $name) { + if ( + $this->class->name !== $this->class->rootEntityName || + $this->class->generatorType !== GeneratorType::IDENTITY || + $this->class->identifier[0] !== $name + ) { $columnName = $property->getColumnName(); $columns[] = $columnName; diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index 61758929b83..a5edf682e2b 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -22,6 +22,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Utility\PersisterHelper; @@ -181,14 +182,14 @@ protected function addAllClassFields($class, $alias, $columnAliasMap = []) } } - private function isInheritanceSupported(ClassMetadata $classMetadata) + private function isInheritanceSupported(ClassMetadata $metadata) { - if ($classMetadata->isInheritanceTypeSingleTable() - && in_array($classMetadata->name, $classMetadata->discriminatorMap, true)) { + if ($metadata->inheritanceType === InheritanceType::SINGLE_TABLE + && in_array($metadata->name, $metadata->discriminatorMap, true)) { return true; } - return ! ($classMetadata->isInheritanceTypeSingleTable() || $classMetadata->isInheritanceTypeJoined()); + return ! in_array($metadata->inheritanceType, [InheritanceType::SINGLE_TABLE, InheritanceType::JOINED]); } /** diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index b877833e77c..31f34b8651e 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -263,14 +263,14 @@ public function getExecutor($AST) case ($AST instanceof AST\DeleteStatement): $primaryClass = $this->em->getClassMetadata($AST->deleteClause->abstractSchemaName); - return ($primaryClass->isInheritanceTypeJoined()) + return ($primaryClass->inheritanceType === InheritanceType::JOINED) ? new Exec\MultiTableDeleteExecutor($AST, $this) : new Exec\SingleTableDeleteUpdateExecutor($AST, $this); case ($AST instanceof AST\UpdateStatement): $primaryClass = $this->em->getClassMetadata($AST->updateClause->abstractSchemaName); - return ($primaryClass->isInheritanceTypeJoined()) + return ($primaryClass->inheritanceType === InheritanceType::JOINED) ? new Exec\MultiTableUpdateExecutor($AST, $this) : new Exec\SingleTableDeleteUpdateExecutor($AST, $this); @@ -443,7 +443,9 @@ private function _generateDiscriminatorColumnConditionSQL(array $dqlAliases) foreach ($dqlAliases as $dqlAlias) { $class = $this->queryComponents[$dqlAlias]['metadata']; - if ( ! $class->isInheritanceTypeSingleTable()) continue; + if ($class->inheritanceType !== InheritanceType::SINGLE_TABLE) { + continue; + } $conn = $this->em->getConnection(); $values = []; @@ -643,7 +645,7 @@ public function walkIdentificationVariable($identificationVariable, $fieldName = $property = $class->getProperty($fieldName); - if ($class->isInheritanceTypeJoined() && $class->isInheritedProperty($fieldName)) { + if ($class->inheritanceType === InheritanceType::JOINED && $class->isInheritedProperty($fieldName)) { $class = $property->getDeclaringClass(); } @@ -746,7 +748,7 @@ public function walkSelectClause($selectClause) ); } - if ($class->isInheritanceTypeSingleTable() || $class->isInheritanceTypeJoined()) { + if ($class->inheritanceType === InheritanceType::SINGLE_TABLE || $class->inheritanceType === InheritanceType::JOINED) { // Add discriminator columns to SQL $discrColumn = $class->discriminatorColumn; $discrColumnName = $discrColumn->getColumnName(); @@ -925,7 +927,7 @@ public function walkRangeVariableDeclaration($rangeVariableDeclaration) $this->query->getHint(Query::HINT_LOCK_MODE) ); - if ($class->isInheritanceTypeJoined()) { + if ($class->inheritanceType === InheritanceType::JOINED) { $sql .= $this->_generateClassTableInheritanceJoins($class, $dqlAlias); } @@ -1086,8 +1088,9 @@ public function walkJoinAssociationDeclaration($joinAssociationDeclaration, $joi // Handle WITH clause $withCondition = (null === $condExpr) ? '' : ('(' . $this->walkConditionalExpression($condExpr) . ')'); - if ($targetClass->isInheritanceTypeJoined()) { + if ($targetClass->inheritanceType === InheritanceType::JOINED) { $ctiJoins = $this->_generateClassTableInheritanceJoins($targetClass, $joinedDqlAlias); + // If we have WITH condition, we need to build nested joins for target class table and cti joins if ($withCondition) { $sql .= '(' . $targetTableJoin['table'] . $ctiJoins . ') ON ' . $targetTableJoin['condition']; @@ -1186,7 +1189,7 @@ public function walkJoin($join) $conditions[] = '(' . $this->walkConditionalExpression($join->conditionalExpression) . ')'; } - $condExprConjunction = ($class->isInheritanceTypeJoined() && $joinType != AST\Join::JOIN_TYPE_LEFT && $joinType != AST\Join::JOIN_TYPE_LEFTOUTER) + $condExprConjunction = ($class->inheritanceType === InheritanceType::JOINED && $joinType !== AST\Join::JOIN_TYPE_LEFT && $joinType !== AST\Join::JOIN_TYPE_LEFTOUTER) ? ' AND ' : ' ON '; @@ -1442,7 +1445,7 @@ public function walkSelectExpression($selectExpression) // 1) on Single Table Inheritance: always, since its marginal overhead // 2) on Class Table Inheritance only if partial objects are disallowed, // since it requires outer joining subtables. - if ($class->isInheritanceTypeSingleTable() || ! $this->query->getHint(Query::HINT_FORCE_PARTIAL_LOAD)) { + if ($class->inheritanceType === InheritanceType::SINGLE_TABLE || ! $this->query->getHint(Query::HINT_FORCE_PARTIAL_LOAD)) { foreach ($class->subClasses as $subClassName) { $subClass = $this->em->getClassMetadata($subClassName); diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 3516c4bea60..558101f9331 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -29,6 +29,8 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\GeneratorType; +use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\ORMException; use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs; use Doctrine\ORM\Tools\Event\GenerateSchemaTableEventArgs; @@ -129,7 +131,7 @@ private function processingNotRequired($class, array $processedClasses) isset($processedClasses[$class->name]) || $class->isMappedSuperclass || $class->isEmbeddedClass || - ($class->isInheritanceTypeSingleTable() && $class->name !== $class->rootEntityName) + ($class->inheritanceType === InheritanceType::SINGLE_TABLE && $class->name !== $class->rootEntityName) ); } @@ -164,70 +166,74 @@ public function getSchemaFromMetadata(array $classes) $table = $schema->createTable($class->table->getQuotedQualifiedName($this->platform)); - if ($class->isInheritanceTypeSingleTable()) { - $this->gatherColumns($class, $table); - $this->gatherRelationsSql($class, $table, $schema, $addedFks, $blacklistedFks); + switch ($class->inheritanceType) { + case InheritanceType::SINGLE_TABLE: + $this->gatherColumns($class, $table); + $this->gatherRelationsSql($class, $table, $schema, $addedFks, $blacklistedFks); - // Add the discriminator column - $this->addDiscriminatorColumnDefinition($class, $table); + // Add the discriminator column + $this->addDiscriminatorColumnDefinition($class, $table); - // Aggregate all the information from all classes in the hierarchy - foreach ($class->parentClasses as $parentClassName) { - // Parent class information is already contained in this class - $processedClasses[$parentClassName] = true; - } + // Aggregate all the information from all classes in the hierarchy + foreach ($class->parentClasses as $parentClassName) { + // Parent class information is already contained in this class + $processedClasses[$parentClassName] = true; + } - foreach ($class->subClasses as $subClassName) { - $subClass = $this->em->getClassMetadata($subClassName); + foreach ($class->subClasses as $subClassName) { + $subClass = $this->em->getClassMetadata($subClassName); - $this->gatherColumns($subClass, $table); - $this->gatherRelationsSql($subClass, $table, $schema, $addedFks, $blacklistedFks); + $this->gatherColumns($subClass, $table); + $this->gatherRelationsSql($subClass, $table, $schema, $addedFks, $blacklistedFks); - $processedClasses[$subClassName] = true; - } - } elseif ($class->isInheritanceTypeJoined()) { - // Add all non-inherited fields as columns - $pkColumns = []; + $processedClasses[$subClassName] = true; + } + + break; + + case InheritanceType::JOINED: + // Add all non-inherited fields as columns + $pkColumns = []; - foreach ($class->getProperties() as $fieldName => $property) { - if (! $class->isInheritedProperty($fieldName)) { - $columnName = $this->platform->quoteIdentifier($property->getColumnName()); + foreach ($class->getProperties() as $fieldName => $property) { + if (! $class->isInheritedProperty($fieldName)) { + $columnName = $this->platform->quoteIdentifier($property->getColumnName()); - $this->gatherColumn($class, $property, $table); + $this->gatherColumn($class, $property, $table); - if ($class->isIdentifier($fieldName)) { - $pkColumns[] = $columnName; + if ($class->isIdentifier($fieldName)) { + $pkColumns[] = $columnName; + } } } - } - $this->gatherRelationsSql($class, $table, $schema, $addedFks, $blacklistedFks); + $this->gatherRelationsSql($class, $table, $schema, $addedFks, $blacklistedFks); - // Add the discriminator column only to the root table - if ($class->name === $class->rootEntityName) { - $this->addDiscriminatorColumnDefinition($class, $table); - } else { - // Add an ID FK column to child tables - $inheritedKeyColumns = []; + // Add the discriminator column only to the root table + if ($class->name === $class->rootEntityName) { + $this->addDiscriminatorColumnDefinition($class, $table); + } else { + // Add an ID FK column to child tables + $inheritedKeyColumns = []; - foreach ($class->identifier as $identifierField) { - $idProperty = $class->getProperty($identifierField); + foreach ($class->identifier as $identifierField) { + $idProperty = $class->getProperty($identifierField); - if ($class->isInheritedProperty($identifierField)) { - $column = $this->gatherColumn($class, $idProperty, $table); - $columnName = $column->getQuotedName($this->platform); + if ($class->isInheritedProperty($identifierField)) { + $column = $this->gatherColumn($class, $idProperty, $table); + $columnName = $column->getQuotedName($this->platform); - // TODO: This seems rather hackish, can we optimize it? - $column->setAutoincrement(false); + // TODO: This seems rather hackish, can we optimize it? + $column->setAutoincrement(false); - $pkColumns[] = $columnName; - $inheritedKeyColumns[] = $columnName; + $pkColumns[] = $columnName; + $inheritedKeyColumns[] = $columnName; + } } - } - if ( ! empty($inheritedKeyColumns)) { - // Add a FK constraint on the ID column - $rootClass = $this->em->getClassMetadata($class->rootEntityName); + if ( ! empty($inheritedKeyColumns)) { + // Add a FK constraint on the ID column + $rootClass = $this->em->getClassMetadata($class->rootEntityName); $table->addForeignKeyConstraint( $rootClass->table->getQuotedQualifiedName($this->platform), @@ -237,14 +243,20 @@ public function getSchemaFromMetadata(array $classes) ); } - } + } - $table->setPrimaryKey($pkColumns); - } elseif ($class->isInheritanceTypeTablePerClass()) { - throw ORMException::notSupported(); - } else { - $this->gatherColumns($class, $table); - $this->gatherRelationsSql($class, $table, $schema, $addedFks, $blacklistedFks); + $table->setPrimaryKey($pkColumns); + + break; + + case InheritanceType::TABLE_PER_CLASS: + throw ORMException::notSupported(); + + default: + $this->gatherColumns($class, $table); + $this->gatherRelationsSql($class, $table, $schema, $addedFks, $blacklistedFks); + + break; } $pkColumns = []; @@ -326,7 +338,7 @@ public function getSchemaFromMetadata(array $classes) $processedClasses[$class->name] = true; - if ($class->isIdGeneratorSequence() && $class->name === $class->rootEntityName) { + if ($class->generatorType === GeneratorType::SEQUENCE && $class->name === $class->rootEntityName) { $definition = $class->generatorDefinition; $quotedName = $this->platform->quoteIdentifier($definition['sequenceName']); @@ -406,7 +418,7 @@ private function gatherColumns($class, Table $table) $pkColumns = []; foreach ($class->getProperties() as $fieldName => $property) { - if ($class->isInheritanceTypeSingleTable() && $class->isInheritedProperty($fieldName)) { + if ($class->inheritanceType === InheritanceType::SINGLE_TABLE && $class->isInheritedProperty($fieldName)) { continue; } @@ -441,7 +453,7 @@ private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Tabl ], ]; - if ($classMetadata->isInheritanceTypeSingleTable() && count($classMetadata->parentClasses) > 0) { + if ($classMetadata->inheritanceType === InheritanceType::SINGLE_TABLE && count($classMetadata->parentClasses) > 0) { $options['notnull'] = false; } @@ -477,11 +489,11 @@ private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Tabl $options['customSchemaOptions'] = $fieldOptions; } - if ($classMetadata->isIdGeneratorIdentity() && $classMetadata->getIdentifierFieldNames() == [$fieldName]) { + if ($classMetadata->generatorType === GeneratorType::IDENTITY && $classMetadata->getIdentifierFieldNames() == [$fieldName]) { $options['autoincrement'] = true; } - if ($classMetadata->isInheritanceTypeJoined() && $classMetadata->name !== $classMetadata->rootEntityName) { + if ($classMetadata->inheritanceType === InheritanceType::JOINED && $classMetadata->name !== $classMetadata->rootEntityName) { $options['autoincrement'] = false; } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 589764a87ed..85855ab2777 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -36,6 +36,8 @@ use Doctrine\ORM\Internal\HydrationCompleteHandler; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FetchMode; +use Doctrine\ORM\Mapping\GeneratorType; +use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\Reflection\ReflectionPropertiesGetter; use Doctrine\ORM\Persisters\Collection\ManyToManyPersister; use Doctrine\ORM\Persisters\Collection\OneToManyPersister; @@ -570,7 +572,7 @@ public function computeChangeSet(ClassMetadata $class, $entity) return; } - if ( ! $class->isInheritanceTypeNone()) { + if ($class->inheritanceType !== InheritanceType::NONE) { $class = $this->em->getClassMetadata(get_class($entity)); } @@ -615,7 +617,7 @@ public function computeChangeSet(ClassMetadata $class, $entity) continue; } - if (( ! $class->isIdentifier($name) || ! $class->isIdGeneratorIdentity()) + if (( ! $class->isIdentifier($name) || $class->generatorType !== GeneratorType::IDENTITY) && (! $class->isVersioned() || $name !== $class->versionProperty->getName())) { $actualData[$name] = $value; } @@ -937,14 +939,14 @@ public function recomputeSingleEntityChangeSet(ClassMetadata $class, $entity) return; } - if ( ! $class->isInheritanceTypeNone()) { + if ($class->inheritanceType !== InheritanceType::NONE) { $class = $this->em->getClassMetadata(get_class($entity)); } $actualData = []; foreach ($class->reflFields as $name => $refProp) { - if (( ! $class->isIdentifier($name) || ! $class->isIdGeneratorIdentity()) + if (( ! $class->isIdentifier($name) || $class->generatorType !== GeneratorType::IDENTITY) && ($class->versionProperty === null || $name !== $class->versionProperty->getName()) && ! $class->isCollectionValuedAssociation($name)) { $actualData[$name] = $refProp->getValue($entity); @@ -1102,7 +1104,7 @@ private function executeDeletions($class) // Entity with this $oid after deletion treated as NEW, even if the $oid // is obtained by a new entity because the old one went out of scope. //$this->entityStates[$oid] = self::STATE_NEW; - if ( ! $class->isIdentifierNatural()) { + if ($class->generatorType !== GeneratorType::NONE) { $class->reflFields[$class->identifier[0]]->setValue($entity, null); } @@ -1462,7 +1464,7 @@ public function getEntityState($entity, $assume = null) } switch (true) { - case ($class->isIdentifierNatural()): + case ($class->generatorType === GeneratorType::NONE): // Check for a version field, if available, to avoid a db lookup. if ($class->isVersioned()) { return $class->versionProperty->getValue($entity) @@ -1847,7 +1849,7 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, arra if ($managedCopy === null) { // If the identifier is ASSIGNED, it is NEW, otherwise an error // since the managed entity was not found. - if ( ! $class->isIdentifierNatural()) { + if ($class->generatorType !== GeneratorType::NONE) { throw EntityNotFoundException::fromClassNameAndIdentifier( $class->getName(), $this->identifierFlattener->flattenIdentifier($class, $id) @@ -3010,15 +3012,15 @@ public function getEntityPersister($entityName) $class = $this->em->getClassMetadata($entityName); switch (true) { - case ($class->isInheritanceTypeNone()): + case ($class->inheritanceType === InheritanceType::NONE): $persister = new BasicEntityPersister($this->em, $class); break; - case ($class->isInheritanceTypeSingleTable()): + case ($class->inheritanceType === InheritanceType::SINGLE_TABLE): $persister = new SingleTablePersister($this->em, $class); break; - case ($class->isInheritanceTypeJoined()): + case ($class->inheritanceType === InheritanceType::JOINED): $persister = new JoinedSubclassPersister($this->em, $class); break; diff --git a/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php b/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php index a39ac4f21ce..aa6911f7b1d 100644 --- a/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php +++ b/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php @@ -56,7 +56,7 @@ public function addInsert($entity) { $this->inserts[] = $entity; - if ($this->mockIdGeneratorType === GeneratorType::IDENTITY || $this->class->isIdGeneratorIdentity()) { + if ($this->mockIdGeneratorType === GeneratorType::IDENTITY || $this->class->generatorType === GeneratorType::IDENTITY) { $id = $this->identityColumnValueCounter++; $this->postInsertIds[] = [ From 2a9a3b493cc177253fc0211bf885dc43340e7c58 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sun, 23 Oct 2016 09:10:01 +0000 Subject: [PATCH 084/275] More optimizations and cleanup --- docs/en/reference/php-mapping.rst | 1 - .../ORM/Mapping/AssociationMetadata.php | 69 +++++- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 195 +++++------------ .../ORM/Mapping/Driver/AnnotationDriver.php | 205 +++++++++++------- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 25 +-- .../ORM/Mapping/ToOneAssociationMetadata.php | 2 +- lib/Doctrine/ORM/PersistentCollection.php | 3 +- .../ORM/Query/ResultSetMappingBuilder.php | 20 +- .../ORM/Sequencing/TableGenerator.php | 14 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 22 +- lib/Doctrine/ORM/UnitOfWork.php | 85 ++++---- .../Tests/ORM/Mapping/ClassMetadataTest.php | 6 +- 12 files changed, 332 insertions(+), 315 deletions(-) diff --git a/docs/en/reference/php-mapping.rst b/docs/en/reference/php-mapping.rst index 2cd346b86d9..dd78991f71b 100644 --- a/docs/en/reference/php-mapping.rst +++ b/docs/en/reference/php-mapping.rst @@ -285,7 +285,6 @@ Field & Association Getters - ``getAssociationMappings()`` - ``getFieldName($columnName)`` - ``hasField($fieldName)`` -- ``getColumnNames(array $fieldNames = null)`` - ``getTypeOfField($fieldName)`` - ``getTypeOfColumn($columnName)`` - ``hasAssociation($fieldName)`` diff --git a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php index 6ea9cf1d793..c165ed01fb4 100644 --- a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php @@ -117,6 +117,70 @@ public function setCascade(array $cascade) $this->cascade = $cascade; } + /** + * @return string + */ + public function getFetchMode() + { + return $this->fetchMode; + } + + /** + * @param string $fetchMode + */ + public function setFetchMode(string $fetchMode) + { + $this->fetchMode = $fetchMode; + } + + /** + * @return string + */ + public function getMappedBy() + { + return $this->mappedBy; + } + + /** + * @param string $mappedBy + */ + public function setMappedBy(string $mappedBy) + { + $this->mappedBy = $mappedBy; + } + + /** + * @return null|string + */ + public function getInversedBy() + { + return $this->inversedBy; + } + + /** + * @param null|string $inversedBy + */ + public function setInversedBy($inversedBy) + { + $this->inversedBy = $inversedBy; + } + + /** + * @param bool $orphanRemoval + */ + public function setOrphanRemoval(bool $orphanRemoval) + { + $this->orphanRemoval = $orphanRemoval; + } + + /** + * @return bool + */ + public function isOrphanRemoval() + { + return $this->orphanRemoval; + } + /** * {@inheritdoc} */ @@ -154,9 +218,6 @@ public function isField() */ public function wakeupReflection(ReflectionService $reflectionService) { - $this->reflection = $reflectionService->getAccessibleProperty( - $this->getDeclaringClass()->name, - $this->name - ); + $this->reflection = $reflectionService->getAccessibleProperty($this->declaringClass->name, $this->name); } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 5a26b477fb5..5fb66b978e3 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -122,6 +122,17 @@ class ClassMetadata implements ClassMetadataInterface */ public $isEmbeddedClass = false; + /** + * READ-ONLY: Whether this class describes the mapping of a read-only class. + * That means it is never considered for change-tracking in the UnitOfWork. + * It is a very helpful performance optimization for entities that are immutable, + * either in your domain or through the relation database (coming from a view, + * or a history table for example). + * + * @var boolean + */ + public $isReadOnly = false; + /** * READ-ONLY: The names of the parent classes (ancestors). * @@ -183,6 +194,20 @@ class ClassMetadata implements ClassMetadataInterface */ public $sqlResultSetMappings = []; + /** + * READ-ONLY: The registered lifecycle callbacks for entities of this class. + * + * @var array + */ + public $lifecycleCallbacks = []; + + /** + * READ-ONLY: The registered entity listeners. + * + * @var array + */ + public $entityListeners = []; + /** * READ-ONLY: The field names of all fields that are part of the identifier/primary key * of the mapped entity class. @@ -191,6 +216,22 @@ class ClassMetadata implements ClassMetadataInterface */ public $identifier = []; + /** + * READ-ONLY: Flag indicating whether the identifier/primary key of the class is composite. + * + * @var boolean + */ + public $isIdentifierComposite = false; + + /** + * READ-ONLY: Flag indicating whether the identifier/primary key contains at least one foreign key association. + * + * This flag is necessary because some code blocks require special treatment of this cases. + * + * @var boolean + */ + public $containsForeignIdentifier = false; + /** * READ-ONLY: The inheritance mapping type used by the class. * @@ -230,6 +271,8 @@ class ClassMetadata implements ClassMetadataInterface * * * @var array + * + * @todo Remove! */ public $generatorDefinition; @@ -242,19 +285,6 @@ class ClassMetadata implements ClassMetadataInterface */ public $idGenerator; - /** - * @var array - */ - protected $properties = []; - - /** - * READ-ONLY: An array of field names. Used to look up field names from column names. - * Keys are column names and values are field names. - * - * @var array - */ - public $fieldNames = []; - /** * READ-ONLY: The discriminator value of this class. * @@ -295,18 +325,17 @@ class ClassMetadata implements ClassMetadataInterface public $table; /** - * READ-ONLY: The registered lifecycle callbacks for entities of this class. + * READ-ONLY: An array of field names. Used to look up field names from column names. + * Keys are column names and values are field names. * * @var array */ - public $lifecycleCallbacks = []; + public $fieldNames = []; /** - * READ-ONLY: The registered entity listeners. - * * @var array */ - public $entityListeners = []; + protected $properties = []; /** * READ-ONLY: The association mappings of this class. @@ -365,22 +394,6 @@ class ClassMetadata implements ClassMetadataInterface */ public $associationMappings = []; - /** - * READ-ONLY: Flag indicating whether the identifier/primary key of the class is composite. - * - * @var boolean - */ - public $isIdentifierComposite = false; - - /** - * READ-ONLY: Flag indicating whether the identifier/primary key contains at least one foreign key association. - * - * This flag is necessary because some code blocks require special treatment of this cases. - * - * @var boolean - */ - public $containsForeignIdentifier = false; - /** * READ-ONLY: The field which is used for versioning in optimistic locking (if any). * @@ -400,17 +413,6 @@ class ClassMetadata implements ClassMetadataInterface */ public $reflClass; - /** - * Is this entity marked as "read-only"? - * - * That means it is never considered for change-tracking in the UnitOfWork. It is a very helpful performance - * optimization for entities that are immutable, either in your domain or through the relation database - * (coming from a view, or a history table for example). - * - * @var bool - */ - public $isReadOnly = false; - /** * NamingStrategy determining the default column and table names. * @@ -894,36 +896,6 @@ public function setChangeTrackingPolicy($policy) $this->changeTrackingPolicy = $policy; } - /** - * Whether the change tracking policy of this class is "deferred explicit". - * - * @return boolean - */ - public function isChangeTrackingDeferredExplicit() - { - return ChangeTrackingPolicy::DEFERRED_EXPLICIT === $this->changeTrackingPolicy; - } - - /** - * Whether the change tracking policy of this class is "deferred implicit". - * - * @return boolean - */ - public function isChangeTrackingDeferredImplicit() - { - return ChangeTrackingPolicy::DEFERRED_IMPLICIT === $this->changeTrackingPolicy; - } - - /** - * Whether the change tracking policy of this class is "notify". - * - * @return boolean - */ - public function isChangeTrackingNotify() - { - return ChangeTrackingPolicy::NOTIFY === $this->changeTrackingPolicy; - } - /** * Checks whether a field is part of the identifier/primary key field(s). * @@ -1484,17 +1456,11 @@ public function hasField($fieldName) /** * Gets an array containing all the column names. * - * @param array|null $fieldNames - * * @return array */ - public function getColumnNames(array $fieldNames = null) + public function getColumnNames() { - if (null === $fieldNames) { - return array_keys($this->fieldNames); - } - - return array_values(array_map([$this, 'getColumnName'], $fieldNames)); + return array_keys($this->fieldNames); } /** @@ -2383,60 +2349,6 @@ public function isCollectionValuedAssociation($fieldName) && ! ($this->associationMappings[$fieldName]['type'] & self::TO_ONE); } - /** - * Is this an association that only has a single join column? - * - * @param string $fieldName - * - * @return bool - */ - public function isAssociationWithSingleJoinColumn($fieldName) - { - return isset($this->associationMappings[$fieldName]) - && isset($this->associationMappings[$fieldName]['joinColumns'][0]) - && ! isset($this->associationMappings[$fieldName]['joinColumns'][1]); - } - - /** - * Returns the single association join column (if any). - * - * @param string $fieldName - * - * @return string - * - * @throws MappingException - */ - public function getSingleAssociationJoinColumnName($fieldName) - { - if ( ! $this->isAssociationWithSingleJoinColumn($fieldName)) { - throw MappingException::noSingleAssociationJoinColumnFound($this->name, $fieldName); - } - - $joinColumn = reset($this->associationMappings[$fieldName]['joinColumns']); - - return $joinColumn->getColumnName(); - } - - /** - * Returns the single association referenced join column name (if any). - * - * @param string $fieldName - * - * @return string - * - * @throws MappingException - */ - public function getSingleAssociationReferencedJoinColumnName($fieldName) - { - if ( ! $this->isAssociationWithSingleJoinColumn($fieldName)) { - throw MappingException::noSingleAssociationJoinColumnFound($this->name, $fieldName); - } - - $joinColumn = reset($this->associationMappings[$fieldName]['joinColumns']); - - return $joinColumn->getReferencedColumnName(); - } - /** * Used to retrieve a fieldname for either field or association from a given column. * @@ -2455,10 +2367,12 @@ public function getFieldForColumn($columnName) } foreach ($this->associationMappings as $assocName => $mapping) { - if ($this->isAssociationWithSingleJoinColumn($assocName) && - $this->associationMappings[$assocName]['joinColumns'][0]->getColumnName() === $columnName) { + foreach ($mapping['joinColumns'] as $joinColumn) { + if ($joinColumn->getColumnName() === $columnName) { + //$this->fieldNames[$columnName] = $assocName; - return $assocName; + return $assocName; + } } } @@ -2663,7 +2577,6 @@ public function fullyQualifiedClassName($className) */ public function getMetadataValue($name) { - if (isset($this->$name)) { return $this->$name; } diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index fdb544df3f4..46e46562929 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -39,6 +39,7 @@ use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\JoinTableMetadata; use Doctrine\ORM\Mapping\MappingException; +use Doctrine\ORM\Mapping\Property; use Doctrine\ORM\Mapping\VersionFieldMetadata; /** @@ -183,39 +184,9 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $sqlResultSetMappingsAnnot = $classAnnotations[Annotation\SqlResultSetMappings::class]; foreach ($sqlResultSetMappingsAnnot->value as $resultSetMapping) { - $entities = []; - $columns = []; - - foreach ($resultSetMapping->entities as $entityResultAnnot) { - $entityResult = [ - 'fields' => [], - 'entityClass' => $entityResultAnnot->entityClass, - 'discriminatorColumn' => $entityResultAnnot->discriminatorColumn, - ]; - - foreach ($entityResultAnnot->fields as $fieldResultAnnot) { - $entityResult['fields'][] = [ - 'name' => $fieldResultAnnot->name, - 'column' => $fieldResultAnnot->column - ]; - } - - $entities[] = $entityResult; - } + $sqlResultSetMapping = $this->convertSqlResultSetMapping($resultSetMapping); - foreach ($resultSetMapping->columns as $columnResultAnnot) { - $columns[] = [ - 'name' => $columnResultAnnot->name, - ]; - } - - $metadata->addSqlResultSetMapping( - [ - 'name' => $resultSetMapping->name, - 'entities' => $entities, - 'columns' => $columns - ] - ); + $metadata->addSqlResultSetMapping($sqlResultSetMapping); } } @@ -298,6 +269,10 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat continue; } +// $property = $this->convertProperty($reflProperty); +// +// $metadata->addProperty($property); + // Field can only be annotated with one of: // @Column, @OneToOne, @OneToMany, @ManyToOne, @ManyToMany $fieldName = $reflProperty->getName(); @@ -365,22 +340,22 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat ); } - // Check for JoinColumn/JoinColumns annotations - $joinColumns = []; - - if ($joinColumnAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinColumn::class)) { - $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); - } else if ($joinColumnsAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinColumns::class)) { - foreach ($joinColumnsAnnot->value as $joinColumn) { - $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumn); - } - } - if ($oneToOneAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\OneToOne::class)) { if ($idAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Id::class)) { $mapping['id'] = true; } + // Check for JoinColumn/JoinColumns annotations + $joinColumns = []; + + if ($joinColumnAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinColumn::class)) { + $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); + } else if ($joinColumnsAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinColumns::class)) { + foreach ($joinColumnsAnnot->value as $joinColumn) { + $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumn); + } + } + $mapping['targetEntity'] = $oneToOneAnnot->targetEntity; $mapping['joinColumns'] = $joinColumns; $mapping['mappedBy'] = $oneToOneAnnot->mappedBy; @@ -416,6 +391,17 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $mapping['id'] = true; } + // Check for JoinColumn/JoinColumns annotations + $joinColumns = []; + + if ($joinColumnAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinColumn::class)) { + $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); + } else if ($joinColumnsAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinColumns::class)) { + foreach ($joinColumnsAnnot->value as $joinColumn) { + $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumn); + } + } + $mapping['joinColumns'] = $joinColumns; $mapping['cascade'] = $manyToOneAnnot->cascade; $mapping['inversedBy'] = $manyToOneAnnot->inversedBy; @@ -669,6 +655,106 @@ private function getMethodCallbacks(\ReflectionMethod $method) return $callbacks; } + /** + * @param Annotation\SqlResultSetMapping $resultSetMapping + * + * @return array + */ + private function convertSqlResultSetMapping(Annotation\SqlResultSetMapping $resultSetMapping) + { + $entities = []; + + foreach ($resultSetMapping->entities as $entityResultAnnot) { + $entityResult = [ + 'fields' => [], + 'entityClass' => $entityResultAnnot->entityClass, + 'discriminatorColumn' => $entityResultAnnot->discriminatorColumn, + ]; + + foreach ($entityResultAnnot->fields as $fieldResultAnnot) { + $entityResult['fields'][] = [ + 'name' => $fieldResultAnnot->name, + 'column' => $fieldResultAnnot->column + ]; + } + + $entities[] = $entityResult; + } + + $columns = []; + + foreach ($resultSetMapping->columns as $columnResultAnnot) { + $columns[] = [ + 'name' => $columnResultAnnot->name, + ]; + } + + return [ + 'name' => $resultSetMapping->name, + 'entities' => $entities, + 'columns' => $columns + ]; + } + + /** + * @param \ReflectionProperty $reflProperty + * + * @return Property + */ + private function convertProperty(\ReflectionProperty $reflProperty) + { + if ($columnAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Column::class)) { + $className = $reflProperty->getDeclaringClass()->name; + + if ($columnAnnot->type == null) { + throw MappingException::propertyTypeIsRequired($className, $reflProperty->getName()); + } + + $isFieldVersioned = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Version::class) !== null; + $fieldMetadata = $this->convertColumnAnnotationToFieldMetadata($columnAnnot, $reflProperty->getName(), $isFieldVersioned); + + // Check for Id + if ($idAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Id::class)) { + $fieldMetadata->setPrimaryKey(true); + } + + // Check for GeneratedValue strategy + if ($generatedValueAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\GeneratedValue::class)) { + $strategy = strtoupper($generatedValueAnnot->strategy); + + $metadata->setIdGeneratorType(constant(sprintf('%s::%s', GeneratorType::class, $strategy))); + } + + // Check for CustomGenerator/SequenceGenerator/TableGenerator definition + if ($seqGeneratorAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\SequenceGenerator::class)) { + $metadata->setGeneratorDefinition( + [ + 'sequenceName' => $seqGeneratorAnnot->sequenceName, + 'allocationSize' => $seqGeneratorAnnot->allocationSize, + ] + ); + } else if ($this->reader->getPropertyAnnotation($reflProperty, 'Doctrine\ORM\Mapping\TableGenerator')) { + throw MappingException::tableIdGeneratorNotImplemented($className); + } else if ($customGeneratorAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\CustomIdGenerator::class)) { + $metadata->setGeneratorDefinition( + [ + 'class' => $customGeneratorAnnot->class, + 'arguments' => $customGeneratorAnnot->arguments, + ] + ); + } + + $metadata->addProperty($fieldMetadata); + + // Check for Version + if ($this->reader->getPropertyAnnotation($reflProperty, Annotation\Version::class)) { + $metadata->setVersionProperty($fieldMetadata); + } + + return $fieldMetadata; + } + } + /** * Parse the given Column as FieldMetadata * @@ -749,39 +835,6 @@ private function convertJoinColumnAnnotationToJoinColumnMetadata(Annotation\Join return $joinColumn; } - /** - * Parse the given Column as array - * - * @param string $fieldName - * @param Annotation\Column $column - * - * @return array - */ - private function columnToArray(Annotation\Column $column) - { - $mapping = [ - 'scale' => $column->scale, - 'length' => $column->length, - 'unique' => $column->unique, - 'nullable' => $column->nullable, - 'precision' => $column->precision - ]; - - if ($column->options) { - $mapping['options'] = $column->options; - } - - if (isset($column->name)) { - $mapping['columnName'] = $column->name; - } - - if (isset($column->columnDefinition)) { - $mapping['columnDefinition'] = $column->columnDefinition; - } - - return $mapping; - } - /** * Factory method for the Annotation Driver. * diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index b9ac8c731df..625fc9cfeb0 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -157,29 +157,6 @@ public function isField() */ public function wakeupReflection(ReflectionService $reflectionService) { - $this->reflection = $reflectionService->getAccessibleProperty( - $this->getDeclaringClass()->name, - $this->name - ); - } - - /** - * @return array - */ - public function getMapping() - { - return [ - 'declaringClass' => $this->declaringClass->name, - 'tableName' => $this->tableName, - 'columnName' => $this->columnName, - 'columnDefinition' => $this->columnDefinition, - 'length' => $this->length, - 'scale' => $this->scale, - 'precision' => $this->precision, - 'options' => $this->options, - 'id' => $this->primaryKey, - 'nullable' => $this->nullable, - 'unique' => $this->unique, - ]; + $this->reflection = $reflectionService->getAccessibleProperty($this->declaringClass->name, $this->name); } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php index 2986d14fbd7..4d404fcad1e 100644 --- a/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php @@ -37,7 +37,7 @@ public function getJoinColumns() /** * @param JoinColumnMetadata $joinColumn */ - public function addJoinColumns(JoinColumnMetadata $joinColumn) + public function addJoinColumn(JoinColumnMetadata $joinColumn) { $this->joinColumns[] = $joinColumn; } diff --git a/lib/Doctrine/ORM/PersistentCollection.php b/lib/Doctrine/ORM/PersistentCollection.php index cd74a3299dd..523cdf8891f 100644 --- a/lib/Doctrine/ORM/PersistentCollection.php +++ b/lib/Doctrine/ORM/PersistentCollection.php @@ -24,6 +24,7 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Selectable; use Doctrine\Common\Collections\Criteria; +use Doctrine\ORM\Mapping\ChangeTrackingPolicy; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FetchMode; @@ -295,7 +296,7 @@ private function changed() $this->association['isOwningSide'] && $this->association['type'] === ClassMetadata::MANY_TO_MANY && $this->owner && - $this->em->getClassMetadata(get_class($this->owner))->isChangeTrackingNotify()) { + $this->em->getClassMetadata(get_class($this->owner))->changeTrackingPolicy === ChangeTrackingPolicy::NOTIFY) { $this->em->getUnitOfWork()->scheduleForSynchronization($this->owner); } } diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index a5edf682e2b..25e85506d32 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -234,19 +234,21 @@ private function getColumnAliasMap($className, $mode, array $customRenameColumns $mode = self::COLUMN_RENAMING_CUSTOM; } - $columnAlias = []; - $class = $this->em->getClassMetadata($className); + $columnAlias = []; + $classMetadata = $this->em->getClassMetadata($className); - foreach ($class->getColumnNames() as $columnName) { + foreach ($classMetadata->getColumnNames() as $columnName) { $columnAlias[$columnName] = $this->getColumnAlias($columnName, $mode, $customRenameColumns); } - foreach ($class->associationMappings as $associationMapping) { - if ($associationMapping['isOwningSide'] && $associationMapping['type'] & ClassMetadata::TO_ONE) { - foreach ($associationMapping['joinColumns'] as $joinColumn) { - $columnName = $joinColumn->getColumnName(); - $columnAlias[$columnName] = $this->getColumnAlias($columnName, $mode, $customRenameColumns); - } + foreach ($classMetadata->associationMappings as $associationMapping) { + if (! ($associationMapping['isOwningSide'] && $associationMapping['type'] & ClassMetadata::TO_ONE)) { + continue; + } + + foreach ($associationMapping['joinColumns'] as $joinColumn) { + $columnName = $joinColumn->getColumnName(); + $columnAlias[$columnName] = $this->getColumnAlias($columnName, $mode, $customRenameColumns); } } diff --git a/lib/Doctrine/ORM/Sequencing/TableGenerator.php b/lib/Doctrine/ORM/Sequencing/TableGenerator.php index 6d28db8785b..dde8e47585f 100644 --- a/lib/Doctrine/ORM/Sequencing/TableGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/TableGenerator.php @@ -72,23 +72,23 @@ public function __construct($tableName, $sequenceName = 'default', $allocationSi /** * {@inheritdoc} */ - public function generate( - EntityManager $em, $entity) + public function generate(EntityManager $em, $entity) { - if ($this->_maxValue === null || $this->_nextValue == $this->_maxValue) { + if ($this->_maxValue === null || $this->_nextValue === $this->_maxValue) { // Allocate new values $conn = $em->getConnection(); if ($conn->getTransactionNestingLevel() === 0) { // use select for update - $sql = $conn->getDatabasePlatform()->getTableHiLoCurrentValSql($this->_tableName, $this->_sequenceName); + $platform = $conn->getDatabasePlatform(); + $sql = $platform->getTableHiLoCurrentValSql($this->_tableName, $this->_sequenceName); $currentLevel = $conn->fetchColumn($sql); - if ($currentLevel != null) { + if ($currentLevel !== null) { $this->_nextValue = $currentLevel; - $this->_maxValue = $this->_nextValue + $this->_allocationSize; + $this->_maxValue = $this->_nextValue + $this->_allocationSize; - $updateSql = $conn->getDatabasePlatform()->getTableHiLoUpdateNextValSql( + $updateSql = $platform->getTableHiLoUpdateNextValSql( $this->_tableName, $this->_sequenceName, $this->_allocationSize ); diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 558101f9331..9f77c4b2a84 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -616,12 +616,22 @@ private function getDefiningClass($class, $referencedColumnName) if (in_array($referencedColumnName, $idColumnNameList)) { // it seems to be an entity as foreign key foreach ($class->getIdentifierFieldNames() as $fieldName) { - if ($class->hasAssociation($fieldName) - && $class->getSingleAssociationJoinColumnName($fieldName) === $referencedColumnName) { - return $this->getDefiningClass( - $this->em->getClassMetadata($class->associationMappings[$fieldName]['targetEntity']), - $class->getSingleAssociationReferencedJoinColumnName($fieldName) - ); + if (! $class->hasAssociation($fieldName)) { + continue; + } + + $association = $class->getAssociationMapping($fieldName); + + if (count($association['joinColumns']) > 1) { + throw MappingException::noSingleAssociationJoinColumnFound($class->name, $fieldName); + } + + $joinColumn = reset($association['joinColumns']); + + if ($joinColumn->getColumnName() === $referencedColumnName) { + $targetEntity = $this->em->getClassMetadata($association['targetEntity']); + + return $this->getDefiningClass($targetEntity, $joinColumn->getReferencedColumnName()); } } } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 85855ab2777..2f97c3e4704 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -34,6 +34,7 @@ use Doctrine\ORM\Event\PreFlushEventArgs; use Doctrine\ORM\Event\PreUpdateEventArgs; use Doctrine\ORM\Internal\HydrationCompleteHandler; +use Doctrine\ORM\Mapping\ChangeTrackingPolicy; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\GeneratorType; @@ -45,6 +46,7 @@ use Doctrine\ORM\Persisters\Entity\JoinedSubclassPersister; use Doctrine\ORM\Persisters\Entity\SingleTablePersister; use Doctrine\ORM\Proxy\Proxy; +use Doctrine\ORM\Sequencing\AssignedGenerator; use Doctrine\ORM\Utility\IdentifierFlattener; use Exception; use InvalidArgumentException; @@ -468,7 +470,7 @@ private function computeSingleEntityChangeSet($entity) $class = $this->em->getClassMetadata(get_class($entity)); - if ($state === self::STATE_MANAGED && $class->isChangeTrackingDeferredImplicit()) { + if ($state === self::STATE_MANAGED && $class->changeTrackingPolicy === ChangeTrackingPolicy::DEFERRED_IMPLICIT) { $this->persist($entity); } @@ -648,7 +650,7 @@ public function computeChangeSet(ClassMetadata $class, $entity) // Entity is "fully" MANAGED: it was already fully persisted before // and we have a copy of the original data $originalData = $this->originalEntityData[$oid]; - $isChangeTrackingNotify = $class->isChangeTrackingNotify(); + $isChangeTrackingNotify = $class->changeTrackingPolicy === ChangeTrackingPolicy::NOTIFY; $changeSet = ($isChangeTrackingNotify && isset($this->entityChangeSets[$oid])) ? $this->entityChangeSets[$oid] : []; @@ -773,7 +775,7 @@ public function computeChangeSets() // If change tracking is explicit or happens through notification, then only compute // changes on entities of that type that are explicitly marked for synchronization. switch (true) { - case ($class->isChangeTrackingDeferredImplicit()): + case ($class->changeTrackingPolicy === ChangeTrackingPolicy::DEFERRED_IMPLICIT): $entitiesToProcess = $entities; break; @@ -894,7 +896,7 @@ private function persistNew($class, $entity) if ( ! $idGen->isPostInsertGenerator()) { $idValue = $idGen->generate($this->em, $entity); - if ( ! $idGen instanceof \Doctrine\ORM\Sequencing\AssignedGenerator) { + if ( ! $idGen instanceof AssignedGenerator) { $idValue = [$class->getSingleIdentifierFieldName() => $this->convertSingleFieldIdentifierToPHPValue($class, $idValue)]; $class->assignIdentifier($entity, $idValue); @@ -935,7 +937,7 @@ public function recomputeSingleEntityChangeSet(ClassMetadata $class, $entity) } // skip if change tracking is "NOTIFY" - if ($class->isChangeTrackingNotify()) { + if ($class->changeTrackingPolicy === ChangeTrackingPolicy::NOTIFY) { return; } @@ -1463,47 +1465,46 @@ public function getEntityState($entity, $assume = null) $id = $this->identifierFlattener->flattenIdentifier($class, $id); } - switch (true) { - case ($class->generatorType === GeneratorType::NONE): - // Check for a version field, if available, to avoid a db lookup. - if ($class->isVersioned()) { - return $class->versionProperty->getValue($entity) - ? self::STATE_DETACHED - : self::STATE_NEW; - } - - // Last try before db lookup: check the identity map. - if ($this->tryGetById($id, $class->rootEntityName)) { - return self::STATE_DETACHED; - } - - // db lookup - if ($this->getEntityPersister($class->name)->exists($entity)) { - return self::STATE_DETACHED; - } + if ($class->generatorType === GeneratorType::NONE) { + // Check for a version field, if available, to avoid a db lookup. + if ($class->isVersioned()) { + return $class->versionProperty->getValue($entity) + ? self::STATE_DETACHED + : self::STATE_NEW; + } - return self::STATE_NEW; + // Last try before db lookup: check the identity map. + if ($this->tryGetById($id, $class->rootEntityName)) { + return self::STATE_DETACHED; + } - case ( ! $class->idGenerator->isPostInsertGenerator()): - // if we have a pre insert generator we can't be sure that having an id - // really means that the entity exists. We have to verify this through - // the last resort: a db lookup + // db lookup + if ($this->getEntityPersister($class->name)->exists($entity)) { + return self::STATE_DETACHED; + } - // Last try before db lookup: check the identity map. - if ($this->tryGetById($id, $class->rootEntityName)) { - return self::STATE_DETACHED; - } + return self::STATE_NEW; + } - // db lookup - if ($this->getEntityPersister($class->name)->exists($entity)) { - return self::STATE_DETACHED; - } + if ( ! $class->idGenerator->isPostInsertGenerator()) { + // if we have a pre insert generator we can't be sure that having an id + // really means that the entity exists. We have to verify this through + // the last resort: a db lookup - return self::STATE_NEW; + // Last try before db lookup: check the identity map. + if ($this->tryGetById($id, $class->rootEntityName)) { + return self::STATE_DETACHED; + } - default: + // db lookup + if ($this->getEntityPersister($class->name)->exists($entity)) { return self::STATE_DETACHED; + } + + return self::STATE_NEW; } + + return self::STATE_DETACHED; } /** @@ -1666,7 +1667,7 @@ private function doPersist($entity, array &$visited) switch ($entityState) { case self::STATE_MANAGED: // Nothing to do, except if policy is "deferred explicit" - if ($class->isChangeTrackingDeferredExplicit()) { + if ($class->changeTrackingPolicy === ChangeTrackingPolicy::DEFERRED_EXPLICIT) { $this->scheduleForSynchronization($entity); } break; @@ -1869,7 +1870,7 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, arra $visited[$oid] = $managedCopy; // mark visited - if ($class->isChangeTrackingDeferredExplicit()) { + if ($class->changeTrackingPolicy === ChangeTrackingPolicy::DEFERRED_EXPLICIT) { $this->scheduleForSynchronization($entity); } } @@ -3439,7 +3440,7 @@ private function mergeEntityStateIntoManagedCopy($entity, $managedCopy) if ($assoc2['isOwningSide'] && $assoc2['type'] == ClassMetadata::MANY_TO_MANY - && $class->isChangeTrackingNotify() + && $class->changeTrackingPolicy === ChangeTrackingPolicy::NOTIFY ) { $this->scheduleForSynchronization($managedCopy); } @@ -3448,7 +3449,7 @@ private function mergeEntityStateIntoManagedCopy($entity, $managedCopy) } } - if ($class->isChangeTrackingNotify()) { + if ($class->changeTrackingPolicy === ChangeTrackingPolicy::NOTIFY) { // Just treat all properties as changed, there is no other choice. $this->propertyChanged($managedCopy, $name, null, $prop->getValue($managedCopy)); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 8e7e8c4fcd9..1606918fdf0 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -1454,7 +1454,7 @@ public function testWakeupReflectionWithEmbeddableAndStaticReflectionService() ); } - public function testGetColumnNamesWithGivenFieldNames() + public function testGetColumnNames() { $metadata = new ClassMetadata(CMS\CmsUser::class); $metadata->initializeReflection(new RuntimeReflectionService()); @@ -1481,8 +1481,8 @@ public function testGetColumnNamesWithGivenFieldNames() $metadata->addProperty($fieldMetadata); self::assertSame( - ['foo', 'baz'], - $metadata->getColumnNames(['status', 'name']) + ['foo', 'bar', 'baz'], + $metadata->getColumnNames() ); } From 1168316b6e5108d68683bead1a7d0a9f10264253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1chym=20Tou=C5=A1ek?= Date: Thu, 24 Nov 2016 17:38:21 +0100 Subject: [PATCH 085/275] EntityManager::transactional() returns value returned by the closure --- .../transactions-and-concurrency.rst | 29 +++++++------------ lib/Doctrine/ORM/EntityManager.php | 2 +- lib/Doctrine/ORM/EntityManagerInterface.php | 2 +- .../Doctrine/Tests/ORM/EntityManagerTest.php | 9 ++++++ 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/docs/en/reference/transactions-and-concurrency.rst b/docs/en/reference/transactions-and-concurrency.rst index 5ce0852b2a7..22ad20eb183 100644 --- a/docs/en/reference/transactions-and-concurrency.rst +++ b/docs/en/reference/transactions-and-concurrency.rst @@ -104,18 +104,11 @@ functionally equivalent to the previously shown code looks as follows: $em->persist($user); }); -.. warning:: - - For historical reasons, ``EntityManager#transactional($func)`` will return - ``true`` whenever the return value of ``$func`` is loosely false. - Some examples of this include ``array()``, ``"0"``, ``""``, ``0``, and - ``null``. The difference between ``Connection#transactional($func)`` and ``EntityManager#transactional($func)`` is that the latter abstraction flushes the ``EntityManager`` prior to transaction -commit and rolls back the transaction when an -exception occurs. +commit. .. _transactions-and-concurrency_exception-handling: @@ -279,15 +272,15 @@ either when calling ``EntityManager#find()``: find('User', $theEntityId, LockMode::OPTIMISTIC, $expectedVersion); - + // do the work - + $em->flush(); } catch(OptimisticLockException $e) { echo "Sorry, but someone else has already changed this entity. Please apply the changes again!"; @@ -300,16 +293,16 @@ Or you can use ``EntityManager#lock()`` to find out: find('User', $theEntityId); - + try { // assert version $em->lock($entity, LockMode::OPTIMISTIC, $expectedVersion); - + } catch(OptimisticLockException $e) { echo "Sorry, but someone else has already changed this entity. Please apply the changes again!"; } @@ -348,7 +341,7 @@ See the example code, The form (GET Request): find('BlogPost', 123456); - + echo ''; echo ''; @@ -359,7 +352,7 @@ And the change headline action (POST Request): find('BlogPost', $postId, \Doctrine\DBAL\LockMode::OPTIMISTIC, $postVersion); .. _transactions-and-concurrency_pessimistic-locking: diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 78f18ffdd73..1915d545025 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -236,7 +236,7 @@ public function transactional($func) $this->flush(); $this->conn->commit(); - return $return ?: true; + return $return; } catch (Exception $e) { $this->close(); $this->conn->rollBack(); diff --git a/lib/Doctrine/ORM/EntityManagerInterface.php b/lib/Doctrine/ORM/EntityManagerInterface.php index 09c7efdf9d2..19a54bfa82a 100644 --- a/lib/Doctrine/ORM/EntityManagerInterface.php +++ b/lib/Doctrine/ORM/EntityManagerInterface.php @@ -81,7 +81,7 @@ public function beginTransaction(); * * @param callable $func The function to execute transactionally. * - * @return mixed The non-empty value returned from the closure or true instead. + * @return mixed The value returned from the closure. */ public function transactional($func); diff --git a/tests/Doctrine/Tests/ORM/EntityManagerTest.php b/tests/Doctrine/Tests/ORM/EntityManagerTest.php index 0d3bf0e3c93..d7cf5032a37 100644 --- a/tests/Doctrine/Tests/ORM/EntityManagerTest.php +++ b/tests/Doctrine/Tests/ORM/EntityManagerTest.php @@ -216,6 +216,15 @@ public function testTransactionalThrowsInvalidArgumentExceptionIfNonCallablePass $this->_em->transactional($this); } + public function testTransactionalAcceptsReturnFalse() + { + $return = $this->_em->transactional(function ($em) { + return false; + }); + + self::assertEquals(false, $return); + } + public function transactionalCallback($em) { self::assertSame($this->_em, $em); From a4330b082a109c2d857073918383cd9bca297106 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1chym=20Tou=C5=A1ek?= Date: Thu, 24 Nov 2016 17:59:32 +0100 Subject: [PATCH 086/275] EntityManager::transactional() uses callable type-hint --- lib/Doctrine/ORM/EntityManager.php | 6 +----- lib/Doctrine/ORM/EntityManagerInterface.php | 2 +- tests/Doctrine/Tests/ORM/EntityManagerTest.php | 8 -------- 3 files changed, 2 insertions(+), 14 deletions(-) diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 1915d545025..09e63f385b1 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -222,12 +222,8 @@ public function getCache() /** * {@inheritDoc} */ - public function transactional($func) + public function transactional(callable $func) { - if (!is_callable($func)) { - throw new \InvalidArgumentException('Expected argument of type "callable", got "' . gettype($func) . '"'); - } - $this->conn->beginTransaction(); try { diff --git a/lib/Doctrine/ORM/EntityManagerInterface.php b/lib/Doctrine/ORM/EntityManagerInterface.php index 19a54bfa82a..1a9ae221cdd 100644 --- a/lib/Doctrine/ORM/EntityManagerInterface.php +++ b/lib/Doctrine/ORM/EntityManagerInterface.php @@ -83,7 +83,7 @@ public function beginTransaction(); * * @return mixed The value returned from the closure. */ - public function transactional($func); + public function transactional(callable $func); /** * Commits a transaction on the underlying database connection. diff --git a/tests/Doctrine/Tests/ORM/EntityManagerTest.php b/tests/Doctrine/Tests/ORM/EntityManagerTest.php index d7cf5032a37..df84a008129 100644 --- a/tests/Doctrine/Tests/ORM/EntityManagerTest.php +++ b/tests/Doctrine/Tests/ORM/EntityManagerTest.php @@ -208,14 +208,6 @@ public function testTransactionalAcceptsVariousCallables() self::assertSame('callback', $this->_em->transactional([$this, 'transactionalCallback'])); } - public function testTransactionalThrowsInvalidArgumentExceptionIfNonCallablePassed() - { - $this->expectException(\InvalidArgumentException::class); - $this->expectExceptionMessage('Expected argument of type "callable", got "object"'); - - $this->_em->transactional($this); - } - public function testTransactionalAcceptsReturnFalse() { $return = $this->_em->transactional(function ($em) { From b432b16308283736dc58e753647041b5524159fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1chym=20Tou=C5=A1ek?= Date: Thu, 24 Nov 2016 20:40:20 +0100 Subject: [PATCH 087/275] EntityManager::transactional() catches Throwable --- lib/Doctrine/ORM/EntityManager.php | 2 +- lib/Doctrine/ORM/EntityManagerInterface.php | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 09e63f385b1..3d1bf056001 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -233,7 +233,7 @@ public function transactional(callable $func) $this->conn->commit(); return $return; - } catch (Exception $e) { + } catch (\Throwable $e) { $this->close(); $this->conn->rollBack(); diff --git a/lib/Doctrine/ORM/EntityManagerInterface.php b/lib/Doctrine/ORM/EntityManagerInterface.php index 1a9ae221cdd..8d64eded708 100644 --- a/lib/Doctrine/ORM/EntityManagerInterface.php +++ b/lib/Doctrine/ORM/EntityManagerInterface.php @@ -82,6 +82,8 @@ public function beginTransaction(); * @param callable $func The function to execute transactionally. * * @return mixed The value returned from the closure. + * + * @throws \Throwable */ public function transactional(callable $func); From f81f0db21314b88933fa0e20fe4e11a82a4c127c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1chym=20Tou=C5=A1ek?= Date: Thu, 24 Nov 2016 20:40:46 +0100 Subject: [PATCH 088/275] Refactor EntityManagerTest --- .../Doctrine/Tests/ORM/EntityManagerTest.php | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/EntityManagerTest.php b/tests/Doctrine/Tests/ORM/EntityManagerTest.php index df84a008129..5f8887ea621 100644 --- a/tests/Doctrine/Tests/ORM/EntityManagerTest.php +++ b/tests/Doctrine/Tests/ORM/EntityManagerTest.php @@ -191,16 +191,26 @@ public function testAffectedByErrorIfClosedException($methodName) $this->_em->$methodName(new \stdClass()); } + public function dataToBeReturnedByTransactional() + { + return [ + [null], + [false], + ['foo'], + ]; + } + /** - * @group DDC-1125 + * @dataProvider dataToBeReturnedByTransactional */ - public function testTransactionalAcceptsReturn() + public function testTransactionalAcceptsReturn($value) { - $return = $this->_em->transactional(function ($em) { - return 'foo'; - }); - - self::assertEquals('foo', $return); + self::assertSame( + $value, + $this->_em->transactional(function ($em) use ($value) { + return $value; + }) + ); } public function testTransactionalAcceptsVariousCallables() @@ -208,15 +218,6 @@ public function testTransactionalAcceptsVariousCallables() self::assertSame('callback', $this->_em->transactional([$this, 'transactionalCallback'])); } - public function testTransactionalAcceptsReturnFalse() - { - $return = $this->_em->transactional(function ($em) { - return false; - }); - - self::assertEquals(false, $return); - } - public function transactionalCallback($em) { self::assertSame($this->_em, $em); From 0d1b0b4ab0b3bcf000d97f59a78c1d889f82be7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1chym=20Tou=C5=A1ek?= Date: Thu, 24 Nov 2016 20:45:38 +0100 Subject: [PATCH 089/275] EntityManager::transactional() doesn't use call_user_func --- lib/Doctrine/ORM/EntityManager.php | 2 +- .../Tests/ORM/Decorator/EntityManagerDecoratorTest.php | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 3d1bf056001..25fa34a66c7 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -227,7 +227,7 @@ public function transactional(callable $func) $this->conn->beginTransaction(); try { - $return = call_user_func($func, $this); + $return = $func($this); $this->flush(); $this->conn->commit(); diff --git a/tests/Doctrine/Tests/ORM/Decorator/EntityManagerDecoratorTest.php b/tests/Doctrine/Tests/ORM/Decorator/EntityManagerDecoratorTest.php index b8688d871db..57bf4246c79 100644 --- a/tests/Doctrine/Tests/ORM/Decorator/EntityManagerDecoratorTest.php +++ b/tests/Doctrine/Tests/ORM/Decorator/EntityManagerDecoratorTest.php @@ -52,6 +52,11 @@ private function getParameters(\ReflectionMethod $method) return [$method->getName(), ['name', new ResultSetMapping()]]; } + /** Special case EntityManager::transactional() */ + if ($method->getName() === 'transactional') { + return [$method->getName(), [function () {}]]; + } + if ($method->getNumberOfRequiredParameters() === 0) { return [$method->getName(), []]; } @@ -60,7 +65,7 @@ private function getParameters(\ReflectionMethod $method) return [$method->getName(), array_fill(0, $method->getNumberOfRequiredParameters(), 'req') ?: []]; } - if ($method->getNumberOfParameters() != $method->getNumberOfRequiredParameters()) { + if ($method->getNumberOfParameters() !== $method->getNumberOfRequiredParameters()) { return [$method->getName(), array_fill(0, $method->getNumberOfParameters(), 'all') ?: []]; } From 916cb230b34bf137fcd4c0d6a4858f975d3e8e2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1chym=20Tou=C5=A1ek?= Date: Thu, 24 Nov 2016 23:09:16 +0100 Subject: [PATCH 090/275] Fix typehints in EntityManagerInterface implementations --- lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php | 2 +- .../Performance/Mock/NonProxyLoadingEntityManager.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php b/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php index 69cc6f50739..7c28ed75fdc 100644 --- a/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php +++ b/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php @@ -71,7 +71,7 @@ public function beginTransaction() /** * {@inheritdoc} */ - public function transactional($func) + public function transactional(callable $func) { return $this->wrapped->transactional($func); } diff --git a/tests/Doctrine/Performance/Mock/NonProxyLoadingEntityManager.php b/tests/Doctrine/Performance/Mock/NonProxyLoadingEntityManager.php index e25224ec2bf..cb3444a0c7c 100644 --- a/tests/Doctrine/Performance/Mock/NonProxyLoadingEntityManager.php +++ b/tests/Doctrine/Performance/Mock/NonProxyLoadingEntityManager.php @@ -97,7 +97,7 @@ public function beginTransaction() /** * {@inheritDoc} */ - public function transactional($func) + public function transactional(callable $func) { return $this->realEntityManager->transactional($func); } @@ -349,4 +349,4 @@ public function contains($object) { return $this->realEntityManager->contains($object); } -} \ No newline at end of file +} From 96a95bba1e8c000bd6d2156d170d5e37cac4e858 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Cobucci?= Date: Fri, 9 Dec 2016 12:37:43 +0100 Subject: [PATCH 091/275] Required development version of DBAL --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index d6fc98f60dc..b9d49a24ede 100644 --- a/composer.json +++ b/composer.json @@ -17,7 +17,7 @@ "php": "^7.1", "ext-pdo": "*", "doctrine/collections": "^1.4", - "doctrine/dbal": ">=2.5-dev,<2.7-dev", + "doctrine/dbal": "dev-develop as 3.x-dev", "doctrine/instantiator": "~1.1", "doctrine/common": "^2.7.1", "doctrine/cache": "~1.6", From 0978742707d8f5dc2a93d7baf1514280850d47b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Cobucci?= Date: Fri, 9 Dec 2016 16:01:26 +0100 Subject: [PATCH 092/275] Use objects instead of arrays for join tables and columns --- .../Builder/ClassMetadataBuilderTest.php | 168 ++++++++---------- 1 file changed, 70 insertions(+), 98 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php index 1edd7c2a0bf..0531547ce78 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php @@ -14,6 +14,8 @@ use Doctrine\Tests\Models\ValueObjects\Name; use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\InheritanceType; +use Doctrine\ORM\Mapping\JoinColumnMetadata; +use Doctrine\ORM\Mapping\JoinTableMetadata; use Doctrine\Tests\OrmTestCase; /** @@ -326,6 +328,12 @@ public function testCreateManyToOne() ->build() ); + $joinColumn = new JoinColumnMetadata(); + $joinColumn->setTableName('CmsUser'); + $joinColumn->setColumnName('group_id'); + $joinColumn->setReferencedColumnName('id'); + $joinColumn->setOnDelete('CASCADE'); + self::assertEquals( [ 'groups' => [ @@ -339,17 +347,7 @@ public function testCreateManyToOne() 4 => 'detach', ], 'fetch' => FetchMode::EXTRA_LAZY, - 'joinColumns' => [ - 0 => [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => false, - 'onDelete' => 'CASCADE', - 'columnDefinition' => null, - 'tableName' => 'CmsUser', - ], - ], + 'joinColumns' => [$joinColumn], 'type' => 2, 'mappedBy' => null, 'inversedBy' => null, @@ -376,6 +374,12 @@ public function testCreateManyToOneWithIdentity() ->build() ); + $joinColumn = new JoinColumnMetadata(); + $joinColumn->setTableName('CmsUser'); + $joinColumn->setColumnName('group_id'); + $joinColumn->setReferencedColumnName('id'); + $joinColumn->setOnDelete('CASCADE'); + self::assertEquals( [ 'groups' => [ @@ -389,17 +393,7 @@ public function testCreateManyToOneWithIdentity() 4 => 'detach', ], 'fetch' => FetchMode::EXTRA_LAZY, - 'joinColumns' => [ - 0 => [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => false, - 'onDelete' => 'CASCADE', - 'columnDefinition' => NULL, - 'tableName' => 'CmsUser', - ], - ], + 'joinColumns' => [$joinColumn], 'type' => 2, 'mappedBy' => NULL, 'inversedBy' => NULL, @@ -424,6 +418,13 @@ public function testCreateOneToOne() ->build() ); + $joinColumn = new JoinColumnMetadata(); + $joinColumn->setTableName('CmsUser'); + $joinColumn->setColumnName('group_id'); + $joinColumn->setReferencedColumnName('id'); + $joinColumn->setOnDelete('CASCADE'); + $joinColumn->setUnique(true); + self::assertEquals( [ 'groups' => [ @@ -437,17 +438,7 @@ public function testCreateOneToOne() 4 => 'detach', ], 'fetch' => FetchMode::EXTRA_LAZY, - 'joinColumns' => [ - 0 => [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => true, - 'onDelete' => 'CASCADE', - 'columnDefinition' => null, - 'tableName' => 'CmsUser', - ], - ], + 'joinColumns' => [$joinColumn], 'type' => 1, 'mappedBy' => null, 'inversedBy' => null, @@ -472,6 +463,12 @@ public function testCreateOneToOneWithIdentity() ->build() ); + $joinColumn = new JoinColumnMetadata(); + $joinColumn->setTableName('CmsUser'); + $joinColumn->setColumnName('group_id'); + $joinColumn->setReferencedColumnName('id'); + $joinColumn->setOnDelete('CASCADE'); + self::assertEquals( [ 'groups' => [ @@ -486,17 +483,7 @@ public function testCreateOneToOneWithIdentity() ], 'fetch' => FetchMode::EXTRA_LAZY, 'id' => true, - 'joinColumns' => [ - 0 => [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => false, - 'onDelete' => 'CASCADE', - 'columnDefinition' => NULL, - 'tableName' => 'CmsUser', - ], - ], + 'joinColumns' => [$joinColumn], 'type' => 1, 'mappedBy' => NULL, 'inversedBy' => NULL, @@ -535,6 +522,20 @@ public function testCreateManyToMany() ->build() ); + $joinColumn = new JoinColumnMetadata(); + $joinColumn->setColumnName('group_id'); + $joinColumn->setReferencedColumnName('id'); + $joinColumn->setOnDelete('CASCADE'); + + $inverseJoinColumn = new JoinColumnMetadata(); + $inverseJoinColumn->setColumnName('user_id'); + $inverseJoinColumn->setReferencedColumnName('id'); + + $joinTable = new JoinTableMetadata(); + $joinTable->setName('groups_users'); + $joinTable->addJoinColumn($joinColumn); + $joinTable->addInverseJoinColumn($inverseJoinColumn); + self::assertEquals( [ 'groups' => [ @@ -549,29 +550,7 @@ public function testCreateManyToMany() 4 => 'detach', ], 'fetch' => FetchMode::EXTRA_LAZY, - 'joinTable' => [ - 'joinColumns' =>[ - 0 => [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => false, - 'onDelete' => 'CASCADE', - 'columnDefinition' => NULL, - ], - ], - 'inverseJoinColumns' => [ - 0 => [ - 'name' => 'user_id', - 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => false, - 'onDelete' => NULL, - 'columnDefinition' => NULL, - ], - ], - 'name' => 'groups_users', - ], + 'joinTable' => $joinTable, 'type' => 8, 'mappedBy' => NULL, 'inversedBy' => NULL, @@ -655,6 +634,13 @@ public function testOrphanRemovalOnCreateOneToOne() ->build() ); + $joinColumn = new JoinColumnMetadata(); + $joinColumn->setTableName('CmsUser'); + $joinColumn->setColumnName('group_id'); + $joinColumn->setReferencedColumnName('id'); + $joinColumn->setOnDelete('CASCADE'); + $joinColumn->setUnique(true); + self::assertEquals( [ 'groups' => [ @@ -662,17 +648,7 @@ public function testOrphanRemovalOnCreateOneToOne() 'targetEntity' => CmsGroup::class, 'cascade' => [0 => 'remove'], 'fetch' => FetchMode::LAZY, - 'joinColumns' => [ - 0 => [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => true, - 'onDelete' => 'CASCADE', - 'columnDefinition' => NULL, - 'tableName' => 'CmsUser', - ], - ], + 'joinColumns' => [$joinColumn], 'type' => 1, 'mappedBy' => NULL, 'inversedBy' => NULL, @@ -735,6 +711,21 @@ public function testOrphanRemovalOnManyToMany() ->orphanRemoval() ->build(); + $joinColumn = new JoinColumnMetadata(); + $joinColumn->setColumnName('group_id'); + $joinColumn->setReferencedColumnName('id'); + $joinColumn->setOnDelete('CASCADE'); + + $inverseJoinColumn = new JoinColumnMetadata(); + $inverseJoinColumn->setColumnName('cmsgroup_id'); + $inverseJoinColumn->setReferencedColumnName('id'); + $inverseJoinColumn->setOnDelete('CASCADE'); + + $joinTable = new JoinTableMetadata(); + $joinTable->setName('cmsuser_cmsgroup'); + $joinTable->addJoinColumn($joinColumn); + $joinTable->addInverseJoinColumn($inverseJoinColumn); + self::assertEquals( [ 'groups' => [ @@ -742,26 +733,7 @@ public function testOrphanRemovalOnManyToMany() 'targetEntity' => CmsGroup::class, 'cascade' => [], 'fetch' => FetchMode::LAZY, - 'joinTable' => [ - 'joinColumns' => [ - 0 => [ - 'name' => 'group_id', - 'referencedColumnName' => 'id', - 'nullable' => true, - 'unique' => false, - 'onDelete' => 'CASCADE', - 'columnDefinition' => NULL, - ], - ], - 'inverseJoinColumns' => [ - 0 => [ - 'name' => 'cmsgroup_id', - 'referencedColumnName' => 'id', - 'onDelete' => 'CASCADE' - ] - ], - 'name' => 'cmsuser_cmsgroup', - ], + 'joinTable' => $joinTable, 'type' => 8, 'mappedBy' => NULL, 'inversedBy' => NULL, From 8bce13552bd4315e9f95f0f04d641667ddefcc44 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 9 Jan 2017 22:55:25 -0200 Subject: [PATCH 093/275] Fixed DDC-536 (GH #5044). Remove the _ prefix from private and protected members --- lib/Doctrine/ORM/AbstractQuery.php | 122 ++--- lib/Doctrine/ORM/Configuration.php | 166 +++--- lib/Doctrine/ORM/EntityRepository.php | 52 +- .../Internal/Hydration/AbstractHydrator.php | 119 ++-- .../ORM/Internal/Hydration/ArrayHydrator.php | 100 ++-- .../ORM/Internal/Hydration/IterableResult.php | 28 +- .../ORM/Internal/Hydration/ObjectHydrator.php | 118 ++-- .../ORM/Internal/Hydration/ScalarHydrator.php | 2 +- .../Hydration/SimpleObjectHydrator.php | 38 +- .../Hydration/SingleScalarHydrator.php | 2 +- .../ORM/Mapping/Driver/DatabaseDriver.php | 12 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 10 +- lib/Doctrine/ORM/NativeQuery.php | 12 +- lib/Doctrine/ORM/Query.php | 146 ++--- .../ORM/Query/Exec/AbstractSqlExecutor.php | 4 +- .../Query/Exec/MultiTableDeleteExecutor.php | 28 +- .../Query/Exec/MultiTableUpdateExecutor.php | 44 +- .../ORM/Query/Exec/SingleSelectExecutor.php | 4 +- .../Exec/SingleTableDeleteUpdateExecutor.php | 6 +- lib/Doctrine/ORM/Query/Expr.php | 8 +- lib/Doctrine/ORM/Query/ParserResult.php | 22 +- lib/Doctrine/ORM/Query/Printer.php | 14 +- lib/Doctrine/ORM/Query/SqlWalker.php | 22 +- lib/Doctrine/ORM/Query/TreeWalkerAdapter.php | 32 +- lib/Doctrine/ORM/Query/TreeWalkerChain.php | 116 ++-- lib/Doctrine/ORM/QueryBuilder.php | 134 ++--- .../ORM/Sequencing/SequenceGenerator.php | 34 +- .../ORM/Sequencing/TableGenerator.php | 28 +- .../Console/Helper/EntityManagerHelper.php | 6 +- .../Tools/Export/Driver/AbstractExporter.php | 34 +- .../Export/Driver/AnnotationExporter.php | 22 +- .../ORM/Tools/Export/Driver/PhpExporter.php | 40 +- .../ORM/Tools/Export/Driver/XmlExporter.php | 6 +- .../ORM/Tools/Pagination/CountWalker.php | 4 +- .../Tools/Pagination/LimitSubqueryWalker.php | 10 +- .../ORM/Tools/Pagination/WhereInWalker.php | 4 +- .../Doctrine/Tests/DbalFunctionalTestCase.php | 22 +- .../Tests/DbalTypes/CustomIdObjectType.php | 2 +- tests/Doctrine/Tests/Mocks/CacheKeyMock.php | 2 +- .../Tests/Mocks/ClassMetadataMock.php | 2 +- tests/Doctrine/Tests/Mocks/ConnectionMock.php | 52 +- .../Tests/Mocks/DatabasePlatformMock.php | 18 +- tests/Doctrine/Tests/Mocks/DriverMock.php | 18 +- .../Tests/Mocks/EntityManagerMock.php | 12 +- .../Tests/Mocks/HydratorMockStatement.php | 14 +- tests/Doctrine/Tests/Mocks/SequenceMock.php | 6 +- .../Tests/Mocks/StatementArrayMock.php | 20 +- tests/Doctrine/Tests/Mocks/UnitOfWorkMock.php | 16 +- .../Tests/Models/DDC3597/DDC3597Root.php | 4 +- .../Tests/Models/Legacy/LegacyArticle.php | 16 +- .../Tests/Models/Legacy/LegacyCar.php | 14 +- .../Tests/Models/Legacy/LegacyUser.php | 42 +- .../Models/Legacy/LegacyUserReference.php | 26 +- .../ORM/Cache/DefaultCacheFactoryTest.php | 14 +- .../Tests/ORM/Cache/DefaultCacheTest.php | 2 +- .../Cache/DefaultCollectionHydratorTest.php | 16 +- .../ORM/Cache/DefaultEntityHydratorTest.php | 4 +- .../Tests/ORM/Cache/DefaultQueryCacheTest.php | 2 +- .../AbstractCollectionPersisterTest.php | 2 +- .../Entity/AbstractEntityPersisterTest.php | 2 +- .../Tests/ORM/CommitOrderCalculatorTest.php | 34 +- .../Doctrine/Tests/ORM/EntityManagerTest.php | 78 +-- .../AbstractManyToManyAssociationTestCase.php | 22 +- .../Functional/AdvancedAssociationTest.php | 491 +++++++++-------- .../ORM/Functional/AdvancedDqlQueryTest.php | 36 +- .../ORM/Functional/BasicFunctionalTest.php | 516 +++++++++--------- .../ORM/Functional/CascadeRemoveOrderTest.php | 42 +- .../Functional/ClassTableInheritanceTest.php | 167 +++--- .../Functional/ClassTableInheritanceTest2.php | 32 +- .../Tests/ORM/Functional/ClearEventTest.php | 4 +- .../Functional/CompositePrimaryKeyTest.php | 58 +- ...ompositePrimaryKeyWithAssociationsTest.php | 22 +- .../ORM/Functional/CustomFunctionsTest.php | 10 +- .../ORM/Functional/CustomIdObjectTypeTest.php | 18 +- .../ORM/Functional/DatabaseDriverTest.php | 26 +- .../ORM/Functional/DatabaseDriverTestCase.php | 4 +- .../ORM/Functional/DefaultValuesTest.php | 40 +- .../ORM/Functional/DetachedEntityTest.php | 92 ++-- .../ORM/Functional/EntityListenersTest.php | 54 +- .../EntityRepositoryCriteriaTest.php | 44 +- .../ORM/Functional/EntityRepositoryTest.php | 240 ++++---- .../Functional/ExtraLazyCollectionTest.php | 274 +++++----- .../Tests/ORM/Functional/FlushEventTest.php | 22 +- .../ORM/Functional/HydrationCacheTest.php | 20 +- .../Tests/ORM/Functional/IdentityMapTest.php | 62 +-- .../ORM/Functional/IndexByAssociationTest.php | 22 +- .../JoinedTableCompositeKeyTest.php | 20 +- .../ORM/Functional/LifecycleCallbackTest.php | 138 ++--- .../Functional/Locking/GearmanLockTest.php | 6 +- .../Tests/ORM/Functional/Locking/LockTest.php | 70 +-- .../ORM/Functional/Locking/OptimisticTest.php | 72 +-- .../ManyToManyBasicAssociationTest.php | 169 +++--- ...ManyToManyBidirectionalAssociationTest.php | 70 ++- .../ORM/Functional/ManyToManyEventTest.php | 10 +- ...nyToManySelfReferentialAssociationTest.php | 38 +- ...anyToManyUnidirectionalAssociationTest.php | 34 +- .../ORM/Functional/MappedSuperclassTest.php | 12 +- .../Functional/MergeCompositeToOneKeyTest.php | 8 +- .../Tests/ORM/Functional/MergeProxiesTest.php | 30 +- .../Functional/MergeSharedEntitiesTest.php | 32 +- .../MergeVersionedManyToOneTest.php | 10 +- .../Tests/ORM/Functional/NativeQueryTest.php | 173 +++--- .../Tests/ORM/Functional/NewOperatorTest.php | 60 +- .../Tests/ORM/Functional/NotifyPolicyTest.php | 30 +- .../OneToManyBidirectionalAssociationTest.php | 60 +- .../Functional/OneToManyOrphanRemovalTest.php | 44 +- ...neToManySelfReferentialAssociationTest.php | 36 +- ...OneToManyUnidirectionalAssociationTest.php | 18 +- .../OneToOneBidirectionalAssociationTest.php | 52 +- .../Functional/OneToOneEagerLoadingTest.php | 116 ++-- .../Functional/OneToOneOrphanRemovalTest.php | 34 +- ...OneToOneSelfReferentialAssociationTest.php | 44 +- .../OneToOneSingleTableInheritanceTest.php | 18 +- .../OneToOneUnidirectionalAssociationTest.php | 38 +- .../ORM/Functional/OrderedCollectionTest.php | 28 +- ...edJoinedTableInheritanceCollectionTest.php | 24 +- .../Tests/ORM/Functional/PaginationTest.php | 60 +- .../PersistentCollectionCriteriaTest.php | 18 +- .../Functional/PersistentCollectionTest.php | 38 +- .../ORM/Functional/PersistentObjectTest.php | 36 +- .../ORM/Functional/PostFlushEventTest.php | 16 +- .../ORM/Functional/PostLoadEventTest.php | 46 +- .../Functional/ProxiesLikeEntitiesTest.php | 97 ++-- .../Tests/ORM/Functional/QueryCacheTest.php | 10 +- .../ORM/Functional/QueryDqlFunctionTest.php | 70 +-- .../Tests/ORM/Functional/QueryTest.php | 276 +++++----- .../Tests/ORM/Functional/ReadOnlyTest.php | 34 +- .../ORM/Functional/ReferenceProxyTest.php | 66 +-- .../Tests/ORM/Functional/ResultCacheTest.php | 42 +- .../Tests/ORM/Functional/SQLFilterTest.php | 252 ++++----- .../SchemaTool/CompanySchemaTest.php | 8 +- .../ORM/Functional/SchemaTool/DBAL483Test.php | 6 +- .../ORM/Functional/SchemaTool/DDC214Test.php | 10 +- .../SchemaTool/MySqlSchemaToolTest.php | 28 +- .../SchemaTool/PostgreSqlSchemaToolTest.php | 34 +- .../ORM/Functional/SchemaValidatorTest.php | 10 +- .../SecondLevelCacheAbstractTest.php | 76 +-- ...econdLevelCacheCompositePrimaryKeyTest.php | 54 +- ...ompositePrimaryKeyWithAssociationsTest.php | 24 +- .../SecondLevelCacheConcurrentTest.php | 24 +- .../SecondLevelCacheCriteriaTest.php | 20 +- ...econdLevelCacheExtraLazyCollectionTest.php | 24 +- ...condLevelCacheJoinTableInheritanceTest.php | 46 +- .../SecondLevelCacheManyToManyTest.php | 40 +- .../SecondLevelCacheManyToOneTest.php | 52 +- .../SecondLevelCacheOneToManyTest.php | 98 ++-- .../SecondLevelCacheOneToOneTest.php | 50 +- .../SecondLevelCacheQueryCacheTest.php | 166 +++--- .../SecondLevelCacheRepositoryTest.php | 42 +- ...ndLevelCacheSingleTableInheritanceTest.php | 48 +- .../ORM/Functional/SecondLevelCacheTest.php | 86 +-- .../SequenceEmulatedIdentityStrategyTest.php | 14 +- .../ORM/Functional/SequenceGeneratorTest.php | 12 +- .../SingleTableCompositeKeyTest.php | 20 +- .../Functional/SingleTableInheritanceTest.php | 120 ++-- .../StandardEntityPersisterTest.php | 24 +- .../ORM/Functional/Ticket/DDC1040Test.php | 20 +- .../ORM/Functional/Ticket/DDC1041Test.php | 10 +- .../ORM/Functional/Ticket/DDC1043Test.php | 10 +- .../ORM/Functional/Ticket/DDC1080Test.php | 117 ++-- .../ORM/Functional/Ticket/DDC1113Test.php | 30 +- .../ORM/Functional/Ticket/DDC1129Test.php | 10 +- .../ORM/Functional/Ticket/DDC1151Test.php | 8 +- .../ORM/Functional/Ticket/DDC1163Test.php | 30 +- .../ORM/Functional/Ticket/DDC117Test.php | 194 +++---- .../ORM/Functional/Ticket/DDC1181Test.php | 28 +- .../ORM/Functional/Ticket/DDC1193Test.php | 28 +- .../ORM/Functional/Ticket/DDC1209Test.php | 24 +- .../ORM/Functional/Ticket/DDC1225Test.php | 8 +- .../ORM/Functional/Ticket/DDC1228Test.php | 42 +- .../ORM/Functional/Ticket/DDC1238Test.php | 30 +- .../ORM/Functional/Ticket/DDC1250Test.php | 14 +- .../ORM/Functional/Ticket/DDC1276Test.php | 14 +- .../ORM/Functional/Ticket/DDC1300Test.php | 41 +- .../ORM/Functional/Ticket/DDC1301Test.php | 107 ++-- .../ORM/Functional/Ticket/DDC1306Test.php | 20 +- .../ORM/Functional/Ticket/DDC1335Test.php | 26 +- .../ORM/Functional/Ticket/DDC1360Test.php | 6 +- .../ORM/Functional/Ticket/DDC1383Test.php | 16 +- .../ORM/Functional/Ticket/DDC1392Test.php | 10 +- .../ORM/Functional/Ticket/DDC1400Test.php | 30 +- .../ORM/Functional/Ticket/DDC1404Test.php | 14 +- .../ORM/Functional/Ticket/DDC142Test.php | 42 +- .../ORM/Functional/Ticket/DDC1430Test.php | 18 +- .../ORM/Functional/Ticket/DDC1436Test.php | 14 +- .../ORM/Functional/Ticket/DDC144Test.php | 15 +- .../ORM/Functional/Ticket/DDC1452Test.php | 32 +- .../ORM/Functional/Ticket/DDC1454Test.php | 8 +- .../ORM/Functional/Ticket/DDC1458Test.php | 14 +- .../ORM/Functional/Ticket/DDC1461Test.php | 20 +- .../ORM/Functional/Ticket/DDC1509Test.php | 10 +- .../ORM/Functional/Ticket/DDC1514Test.php | 24 +- .../ORM/Functional/Ticket/DDC1515Test.php | 18 +- .../ORM/Functional/Ticket/DDC1526Test.php | 12 +- .../ORM/Functional/Ticket/DDC1545Test.php | 66 +-- .../ORM/Functional/Ticket/DDC1548Test.php | 20 +- .../ORM/Functional/Ticket/DDC1594Test.php | 10 +- .../ORM/Functional/Ticket/DDC1595Test.php | 22 +- .../ORM/Functional/Ticket/DDC163Test.php | 14 +- .../ORM/Functional/Ticket/DDC1643Test.php | 52 +- .../ORM/Functional/Ticket/DDC1654Test.php | 52 +- .../ORM/Functional/Ticket/DDC1655Test.php | 44 +- .../ORM/Functional/Ticket/DDC1666Test.php | 10 +- .../ORM/Functional/Ticket/DDC1685Test.php | 12 +- .../ORM/Functional/Ticket/DDC168Test.php | 18 +- .../ORM/Functional/Ticket/DDC1690Test.php | 22 +- .../ORM/Functional/Ticket/DDC1695Test.php | 4 +- .../ORM/Functional/Ticket/DDC1707Test.php | 12 +- .../ORM/Functional/Ticket/DDC1719Test.php | 36 +- .../ORM/Functional/Ticket/DDC1734Test.php | 28 +- .../ORM/Functional/Ticket/DDC1757Test.php | 2 +- .../ORM/Functional/Ticket/DDC1778Test.php | 30 +- .../ORM/Functional/Ticket/DDC1787Test.php | 12 +- .../ORM/Functional/Ticket/DDC1843Test.php | 62 +-- .../ORM/Functional/Ticket/DDC1884Test.php | 38 +- .../ORM/Functional/Ticket/DDC1885Test.php | 58 +- .../ORM/Functional/Ticket/DDC1918Test.php | 8 +- .../ORM/Functional/Ticket/DDC1925Test.php | 22 +- .../ORM/Functional/Ticket/DDC192Test.php | 8 +- .../ORM/Functional/Ticket/DDC1995Test.php | 28 +- .../ORM/Functional/Ticket/DDC1998Test.php | 22 +- .../ORM/Functional/Ticket/DDC199Test.php | 20 +- .../ORM/Functional/Ticket/DDC2012Test.php | 22 +- .../ORM/Functional/Ticket/DDC2074Test.php | 22 +- .../ORM/Functional/Ticket/DDC2084Test.php | 20 +- .../ORM/Functional/Ticket/DDC2090Test.php | 28 +- .../ORM/Functional/Ticket/DDC2106Test.php | 14 +- .../ORM/Functional/Ticket/DDC211Test.php | 18 +- .../ORM/Functional/Ticket/DDC2138Test.php | 12 +- .../ORM/Functional/Ticket/DDC2175Test.php | 16 +- .../ORM/Functional/Ticket/DDC2182Test.php | 8 +- .../ORM/Functional/Ticket/DDC2214Test.php | 20 +- .../ORM/Functional/Ticket/DDC2224Test.php | 2 +- .../ORM/Functional/Ticket/DDC2230Test.php | 30 +- .../ORM/Functional/Ticket/DDC2231Test.php | 14 +- .../ORM/Functional/Ticket/DDC2252Test.php | 56 +- .../ORM/Functional/Ticket/DDC2256Test.php | 22 +- .../ORM/Functional/Ticket/DDC2306Test.php | 24 +- .../ORM/Functional/Ticket/DDC2346Test.php | 24 +- .../ORM/Functional/Ticket/DDC2350Test.php | 18 +- .../ORM/Functional/Ticket/DDC237Test.php | 22 +- .../ORM/Functional/Ticket/DDC2409Test.php | 2 +- .../ORM/Functional/Ticket/DDC2415Test.php | 20 +- .../ORM/Functional/Ticket/DDC2494Test.php | 18 +- .../ORM/Functional/Ticket/DDC2519Test.php | 38 +- .../ORM/Functional/Ticket/DDC2575Test.php | 26 +- .../ORM/Functional/Ticket/DDC2579Test.php | 30 +- .../ORM/Functional/Ticket/DDC258Test.php | 26 +- .../ORM/Functional/Ticket/DDC2645Test.php | 6 +- .../ORM/Functional/Ticket/DDC2655Test.php | 2 +- .../ORM/Functional/Ticket/DDC2660Test.php | 28 +- .../ORM/Functional/Ticket/DDC2692Test.php | 16 +- .../ORM/Functional/Ticket/DDC2759Test.php | 28 +- .../ORM/Functional/Ticket/DDC2775Test.php | 14 +- .../ORM/Functional/Ticket/DDC2790Test.php | 14 +- .../ORM/Functional/Ticket/DDC279Test.php | 22 +- .../ORM/Functional/Ticket/DDC2825Test.php | 18 +- .../ORM/Functional/Ticket/DDC2862Test.php | 58 +- .../ORM/Functional/Ticket/DDC2895Test.php | 14 +- .../ORM/Functional/Ticket/DDC2931Test.php | 26 +- .../ORM/Functional/Ticket/DDC2943Test.php | 24 +- .../ORM/Functional/Ticket/DDC2984Test.php | 12 +- .../ORM/Functional/Ticket/DDC2996Test.php | 18 +- .../ORM/Functional/Ticket/DDC3033Test.php | 18 +- .../ORM/Functional/Ticket/DDC3042Test.php | 8 +- .../ORM/Functional/Ticket/DDC3068Test.php | 14 +- .../ORM/Functional/Ticket/DDC309Test.php | 22 +- .../ORM/Functional/Ticket/DDC3123Test.php | 8 +- .../ORM/Functional/Ticket/DDC3160Test.php | 8 +- .../ORM/Functional/Ticket/DDC3170Test.php | 22 +- .../ORM/Functional/Ticket/DDC3192Test.php | 22 +- .../ORM/Functional/Ticket/DDC3223Test.php | 10 +- .../ORM/Functional/Ticket/DDC3300Test.php | 18 +- .../ORM/Functional/Ticket/DDC3303Test.php | 10 +- .../ORM/Functional/Ticket/DDC331Test.php | 2 +- .../ORM/Functional/Ticket/DDC3330Test.php | 8 +- .../ORM/Functional/Ticket/DDC3346Test.php | 16 +- .../ORM/Functional/Ticket/DDC345Test.php | 18 +- .../ORM/Functional/Ticket/DDC353Test.php | 10 +- .../ORM/Functional/Ticket/DDC3582Test.php | 10 +- .../ORM/Functional/Ticket/DDC3597Test.php | 24 +- .../ORM/Functional/Ticket/DDC3634Test.php | 22 +- .../ORM/Functional/Ticket/DDC3644Test.php | 50 +- .../ORM/Functional/Ticket/DDC3699Test.php | 32 +- .../ORM/Functional/Ticket/DDC3719Test.php | 10 +- .../ORM/Functional/Ticket/DDC371Test.php | 18 +- .../ORM/Functional/Ticket/DDC3785Test.php | 18 +- .../ORM/Functional/Ticket/DDC381Test.php | 12 +- .../ORM/Functional/Ticket/DDC3967Test.php | 10 +- .../ORM/Functional/Ticket/DDC4003Test.php | 8 +- .../ORM/Functional/Ticket/DDC422Test.php | 22 +- .../ORM/Functional/Ticket/DDC425Test.php | 8 +- .../ORM/Functional/Ticket/DDC440Test.php | 16 +- .../ORM/Functional/Ticket/DDC444Test.php | 26 +- .../ORM/Functional/Ticket/DDC448Test.php | 10 +- .../ORM/Functional/Ticket/DDC493Test.php | 10 +- .../ORM/Functional/Ticket/DDC501Test.php | 26 +- .../ORM/Functional/Ticket/DDC512Test.php | 18 +- .../ORM/Functional/Ticket/DDC513Test.php | 10 +- .../ORM/Functional/Ticket/DDC518Test.php | 12 +- .../ORM/Functional/Ticket/DDC522Test.php | 37 +- .../ORM/Functional/Ticket/DDC531Test.php | 18 +- .../ORM/Functional/Ticket/DDC5684Test.php | 16 +- .../ORM/Functional/Ticket/DDC588Test.php | 11 +- .../ORM/Functional/Ticket/DDC599Test.php | 48 +- .../ORM/Functional/Ticket/DDC618Test.php | 36 +- .../ORM/Functional/Ticket/DDC633Test.php | 28 +- .../ORM/Functional/Ticket/DDC656Test.php | 20 +- .../ORM/Functional/Ticket/DDC657Test.php | 16 +- .../ORM/Functional/Ticket/DDC698Test.php | 8 +- .../ORM/Functional/Ticket/DDC719Test.php | 8 +- .../ORM/Functional/Ticket/DDC729Test.php | 92 ++-- .../ORM/Functional/Ticket/DDC735Test.php | 16 +- .../ORM/Functional/Ticket/DDC736Test.php | 20 +- .../ORM/Functional/Ticket/DDC742Test.php | 31 +- .../ORM/Functional/Ticket/DDC748Test.php | 16 +- .../ORM/Functional/Ticket/DDC758Test.php | 42 +- .../ORM/Functional/Ticket/DDC767Test.php | 26 +- .../ORM/Functional/Ticket/DDC809Test.php | 10 +- .../ORM/Functional/Ticket/DDC812Test.php | 14 +- .../ORM/Functional/Ticket/DDC832Test.php | 100 ++-- .../ORM/Functional/Ticket/DDC837Test.php | 34 +- .../ORM/Functional/Ticket/DDC849Test.php | 12 +- .../ORM/Functional/Ticket/DDC881Test.php | 34 +- .../ORM/Functional/Ticket/DDC933Test.php | 14 +- .../ORM/Functional/Ticket/DDC949Test.php | 12 +- .../ORM/Functional/Ticket/DDC960Test.php | 12 +- .../ORM/Functional/Ticket/DDC992Test.php | 34 +- .../ORM/Functional/Ticket/GH5762Test.php | 36 +- .../ORM/Functional/Ticket/GH5804Test.php | 12 +- .../ORM/Functional/Ticket/GH6141Test.php | 18 +- .../ORM/Functional/Ticket/Issue5989Test.php | 10 +- .../ORM/Functional/Ticket/Ticket2481Test.php | 10 +- .../Tests/ORM/Functional/Ticket/Ticket69.php | 28 +- .../Tests/ORM/Functional/TypeTest.php | 76 +-- .../Tests/ORM/Functional/TypeValueSqlTest.php | 52 +- .../ORM/Functional/UUIDGeneratorTest.php | 8 +- .../Functional/UnitOfWorkLifecycleTest.php | 22 +- .../ManyToManyCompositeIdForeignKeyTest.php | 42 +- .../ManyToManyCompositeIdTest.php | 32 +- .../ManyToManyExtraLazyTest.php | 34 +- .../ValueConversionType/ManyToManyTest.php | 32 +- .../OneToManyCompositeIdForeignKeyTest.php | 34 +- .../OneToManyCompositeIdTest.php | 24 +- .../OneToManyExtraLazyTest.php | 24 +- .../ValueConversionType/OneToManyTest.php | 24 +- .../OneToOneCompositeIdForeignKeyTest.php | 34 +- .../OneToOneCompositeIdTest.php | 24 +- .../ValueConversionType/OneToOneTest.php | 24 +- .../Tests/ORM/Functional/ValueObjectsTest.php | 102 ++-- .../ORM/Functional/VersionedOneToOneTest.php | 18 +- .../ORM/Hydration/AbstractHydratorTest.php | 10 +- .../Tests/ORM/Hydration/ArrayHydratorTest.php | 38 +- .../ORM/Hydration/CustomHydratorTest.php | 4 +- .../Tests/ORM/Hydration/HydrationTestCase.php | 6 +- .../ORM/Hydration/ObjectHydratorTest.php | 72 +-- .../ORM/Hydration/ResultSetMappingTest.php | 92 ++-- .../ORM/Hydration/ScalarHydratorTest.php | 6 +- .../Hydration/SimpleObjectHydratorTest.php | 8 +- .../Hydration/SingleScalarHydratorTest.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 14 +- .../ORM/Mapping/AnnotationDriverTest.php | 52 +- .../Mapping/BasicInheritanceMappingTest.php | 2 +- .../ORM/Mapping/ClassMetadataFactoryTest.php | 44 +- .../Mapping/ClassMetadataLoadEventTest.php | 2 +- .../ORM/Mapping/PHPMappingDriverTest.php | 4 +- .../Mapping/StaticPHPMappingDriverTest.php | 2 +- .../ORM/Mapping/XmlMappingDriverTest.php | 18 +- .../Tests/ORM/Performance/DDC2602Test.php | 36 +- .../ORM/Performance/SecondLevelCacheTest.php | 2 +- .../Tests/ORM/PersistentCollectionTest.php | 12 +- ...tyPersisterCompositeTypeParametersTest.php | 18 +- ...sicEntityPersisterCompositeTypeSqlTest.php | 16 +- .../BasicEntityPersisterTypeValueSqlTest.php | 50 +- .../JoinedSubclassPersisterTest.php | 2 +- .../ORM/Query/CustomTreeWalkersJoinTest.php | 4 +- .../Tests/ORM/Query/CustomTreeWalkersTest.php | 10 +- .../ORM/Query/DeleteSqlGenerationTest.php | 6 +- tests/Doctrine/Tests/ORM/Query/ExprTest.php | 152 +++--- .../Tests/ORM/Query/FilterCollectionTest.php | 2 +- .../ORM/Query/LanguageRecognitionTest.php | 10 +- tests/Doctrine/Tests/ORM/Query/LexerTest.php | 2 +- tests/Doctrine/Tests/ORM/Query/ParserTest.php | 2 +- tests/Doctrine/Tests/ORM/Query/QueryTest.php | 54 +- .../ORM/Query/SelectSqlGenerationTest.php | 60 +- .../Tests/ORM/Query/SqlWalkerTest.php | 2 +- .../ORM/Query/UpdateSqlGenerationTest.php | 6 +- tests/Doctrine/Tests/ORM/QueryBuilderTest.php | 192 +++---- .../ORM/Sequencing/AssignedGeneratorTest.php | 14 +- .../ORM/Sequencing/SequenceGeneratorTest.php | 6 +- .../AttachEntityListenersListenerTest.php | 2 +- .../ClearCacheCollectionRegionCommandTest.php | 2 +- .../ClearCacheEntityRegionCommandTest.php | 2 +- .../ClearCacheQueryRegionCommandTest.php | 2 +- .../GenerateRepositoriesCommandTest.php | 6 +- .../Tools/Console/Command/InfoCommandTest.php | 2 +- .../Command/MappingDescribeCommandTest.php | 2 +- .../Console/Command/RunDqlCommandTest.php | 10 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 170 +++--- .../Tools/EntityRepositoryGeneratorTest.php | 58 +- .../AbstractClassMetadataExporterTest.php | 44 +- .../AnnotationClassMetadataExporterTest.php | 2 +- .../Export/PhpClassMetadataExporterTest.php | 2 +- .../Export/XmlClassMetadataExporterTest.php | 2 +- .../Tools/Pagination/PaginationTestCase.php | 2 +- .../Tools/ResolveTargetEntityListenerTest.php | 2 +- .../Tests/ORM/Tools/SchemaToolTest.php | 14 +- .../Tests/ORM/Tools/SchemaValidatorTest.php | 2 +- tests/Doctrine/Tests/ORM/UnitOfWorkTest.php | 189 +++---- .../ORM/Utility/IdentifierFlattenerTest.php | 38 +- .../Doctrine/Tests/OrmFunctionalTestCase.php | 180 +++--- tests/Doctrine/Tests/OrmTestCase.php | 24 +- 412 files changed, 7337 insertions(+), 7221 deletions(-) diff --git a/lib/Doctrine/ORM/AbstractQuery.php b/lib/Doctrine/ORM/AbstractQuery.php index 01483c84cb0..2d64b8e64b6 100644 --- a/lib/Doctrine/ORM/AbstractQuery.php +++ b/lib/Doctrine/ORM/AbstractQuery.php @@ -79,45 +79,45 @@ abstract class AbstractQuery * * @var \Doctrine\ORM\Query\ResultSetMapping */ - protected $_resultSetMapping; + protected $resultSetMapping; /** * The entity manager used by this query object. * * @var EntityManagerInterface */ - protected $_em; + protected $em; /** * The map of query hints. * * @var array */ - protected $_hints = []; + protected $hints = []; /** * The hydration mode. * * @var integer */ - protected $_hydrationMode = self::HYDRATE_OBJECT; + protected $hydrationMode = self::HYDRATE_OBJECT; /** * @var \Doctrine\DBAL\Cache\QueryCacheProfile */ - protected $_queryCacheProfile; + protected $queryCacheProfile; /** * Whether or not expire the result cache. * * @var boolean */ - protected $_expireResultCache = false; + protected $expireResultCache = false; /** * @var \Doctrine\DBAL\Cache\QueryCacheProfile */ - protected $_hydrationCacheProfile; + protected $hydrationCacheProfile; /** * Whether to use second level cache, if available. @@ -162,10 +162,10 @@ abstract class AbstractQuery */ public function __construct(EntityManagerInterface $em) { - $this->_em = $em; + $this->em = $em; $this->parameters = new ArrayCollection(); - $this->_hints = $em->getConfiguration()->getDefaultQueryHints(); - $this->hasCache = $this->_em->getConfiguration()->isSecondLevelCacheEnabled(); + $this->hints = $em->getConfiguration()->getDefaultQueryHints(); + $this->hasCache = $this->em->getConfiguration()->isSecondLevelCacheEnabled(); if ($this->hasCache) { $this->cacheLogger = $em->getConfiguration() @@ -284,7 +284,7 @@ abstract public function getSQL(); */ public function getEntityManager() { - return $this->_em; + return $this->em; } /** @@ -298,7 +298,7 @@ public function free() { $this->parameters = new ArrayCollection(); - $this->_hints = $this->_em->getConfiguration()->getDefaultQueryHints(); + $this->hints = $this->em->getConfiguration()->getDefaultQueryHints(); } /** @@ -417,8 +417,8 @@ public function processParameterValue($value) return $value; } - if (is_object($value) && $this->_em->getMetadataFactory()->hasMetadataFor(ClassUtils::getClass($value))) { - $value = $this->_em->getUnitOfWork()->getSingleIdentifierValue($value); + if (is_object($value) && $this->em->getMetadataFactory()->hasMetadataFor(ClassUtils::getClass($value))) { + $value = $this->em->getUnitOfWork()->getSingleIdentifierValue($value); if ($value === null) { throw ORMInvalidArgumentException::invalidIdentifierBindingEntity(); @@ -442,7 +442,7 @@ public function processParameterValue($value) public function setResultSetMapping(Query\ResultSetMapping $rsm) { $this->translateNamespaces($rsm); - $this->_resultSetMapping = $rsm; + $this->resultSetMapping = $rsm; return $this; } @@ -454,7 +454,7 @@ public function setResultSetMapping(Query\ResultSetMapping $rsm) */ protected function getResultSetMapping() { - return $this->_resultSetMapping; + return $this->resultSetMapping; } /** @@ -467,7 +467,7 @@ protected function getResultSetMapping() private function translateNamespaces(Query\ResultSetMapping $rsm) { $translate = function ($alias) { - return $this->_em->getClassMetadata($alias)->getName(); + return $this->em->getClassMetadata($alias)->getName(); }; $rsm->aliasMap = array_map($translate, $rsm->aliasMap); @@ -499,11 +499,11 @@ private function translateNamespaces(Query\ResultSetMapping $rsm) public function setHydrationCacheProfile(QueryCacheProfile $profile = null) { if ($profile !== null && ! $profile->getResultCacheDriver()) { - $resultCacheDriver = $this->_em->getConfiguration()->getHydrationCacheImpl(); + $resultCacheDriver = $this->em->getConfiguration()->getHydrationCacheImpl(); $profile = $profile->setResultCacheDriver($resultCacheDriver); } - $this->_hydrationCacheProfile = $profile; + $this->hydrationCacheProfile = $profile; return $this; } @@ -513,7 +513,7 @@ public function setHydrationCacheProfile(QueryCacheProfile $profile = null) */ public function getHydrationCacheProfile() { - return $this->_hydrationCacheProfile; + return $this->hydrationCacheProfile; } /** @@ -529,11 +529,11 @@ public function getHydrationCacheProfile() public function setResultCacheProfile(QueryCacheProfile $profile = null) { if ( ! $profile->getResultCacheDriver()) { - $resultCacheDriver = $this->_em->getConfiguration()->getResultCacheImpl(); + $resultCacheDriver = $this->em->getConfiguration()->getResultCacheImpl(); $profile = $profile->setResultCacheDriver($resultCacheDriver); } - $this->_queryCacheProfile = $profile; + $this->queryCacheProfile = $profile; return $this; } @@ -553,8 +553,8 @@ public function setResultCacheDriver($resultCacheDriver = null) throw ORMException::invalidResultCacheDriver(); } - $this->_queryCacheProfile = $this->_queryCacheProfile - ? $this->_queryCacheProfile->setResultCacheDriver($resultCacheDriver) + $this->queryCacheProfile = $this->queryCacheProfile + ? $this->queryCacheProfile->setResultCacheDriver($resultCacheDriver) : new QueryCacheProfile(0, null, $resultCacheDriver); return $this; @@ -569,11 +569,11 @@ public function setResultCacheDriver($resultCacheDriver = null) */ public function getResultCacheDriver() { - if ($this->_queryCacheProfile && $this->_queryCacheProfile->getResultCacheDriver()) { - return $this->_queryCacheProfile->getResultCacheDriver(); + if ($this->queryCacheProfile && $this->queryCacheProfile->getResultCacheDriver()) { + return $this->queryCacheProfile->getResultCacheDriver(); } - return $this->_em->getConfiguration()->getResultCacheImpl(); + return $this->em->getConfiguration()->getResultCacheImpl(); } /** @@ -595,7 +595,7 @@ public function useResultCache($bool, $lifetime = null, $resultCacheId = null) return $this; } - $this->_queryCacheProfile = null; + $this->queryCacheProfile = null; return $this; } @@ -611,9 +611,9 @@ public function setResultCacheLifetime($lifetime) { $lifetime = ($lifetime !== null) ? (int) $lifetime : 0; - $this->_queryCacheProfile = $this->_queryCacheProfile - ? $this->_queryCacheProfile->setLifetime($lifetime) - : new QueryCacheProfile($lifetime, null, $this->_em->getConfiguration()->getResultCacheImpl()); + $this->queryCacheProfile = $this->queryCacheProfile + ? $this->queryCacheProfile->setLifetime($lifetime) + : new QueryCacheProfile($lifetime, null, $this->em->getConfiguration()->getResultCacheImpl()); return $this; } @@ -627,7 +627,7 @@ public function setResultCacheLifetime($lifetime) */ public function getResultCacheLifetime() { - return $this->_queryCacheProfile ? $this->_queryCacheProfile->getLifetime() : 0; + return $this->queryCacheProfile ? $this->queryCacheProfile->getLifetime() : 0; } /** @@ -639,7 +639,7 @@ public function getResultCacheLifetime() */ public function expireResultCache($expire = true) { - $this->_expireResultCache = $expire; + $this->expireResultCache = $expire; return $this; } @@ -651,7 +651,7 @@ public function expireResultCache($expire = true) */ public function getExpireResultCache() { - return $this->_expireResultCache; + return $this->expireResultCache; } /** @@ -659,7 +659,7 @@ public function getExpireResultCache() */ public function getQueryCacheProfile() { - return $this->_queryCacheProfile; + return $this->queryCacheProfile; } /** @@ -679,7 +679,7 @@ public function setFetchMode($class, $assocName, $fetchMode) $fetchMode = Mapping\FetchMode::LAZY; } - $this->_hints['fetchMode'][$class][$assocName] = $fetchMode; + $this->hints['fetchMode'][$class][$assocName] = $fetchMode; return $this; } @@ -694,7 +694,7 @@ public function setFetchMode($class, $assocName, $fetchMode) */ public function setHydrationMode($hydrationMode) { - $this->_hydrationMode = $hydrationMode; + $this->hydrationMode = $hydrationMode; return $this; } @@ -706,7 +706,7 @@ public function setHydrationMode($hydrationMode) */ public function getHydrationMode() { - return $this->_hydrationMode; + return $this->hydrationMode; } /** @@ -765,7 +765,7 @@ public function getOneOrNullResult($hydrationMode = null) } - if ($this->_hydrationMode !== self::HYDRATE_SINGLE_SCALAR && ! $result) { + if ($this->hydrationMode !== self::HYDRATE_SINGLE_SCALAR && ! $result) { return null; } @@ -799,7 +799,7 @@ public function getSingleResult($hydrationMode = null) { $result = $this->execute(null, $hydrationMode); - if ($this->_hydrationMode !== self::HYDRATE_SINGLE_SCALAR && ! $result) { + if ($this->hydrationMode !== self::HYDRATE_SINGLE_SCALAR && ! $result) { throw new NoResultException; } @@ -838,7 +838,7 @@ public function getSingleScalarResult() */ public function setHint($name, $value) { - $this->_hints[$name] = $value; + $this->hints[$name] = $value; return $this; } @@ -852,7 +852,7 @@ public function setHint($name, $value) */ public function getHint($name) { - return isset($this->_hints[$name]) ? $this->_hints[$name] : false; + return isset($this->hints[$name]) ? $this->hints[$name] : false; } /** @@ -864,7 +864,7 @@ public function getHint($name) */ public function hasHint($name) { - return isset($this->_hints[$name]); + return isset($this->hints[$name]); } /** @@ -874,7 +874,7 @@ public function hasHint($name) */ public function getHints() { - return $this->_hints; + return $this->hints; } /** @@ -897,9 +897,9 @@ public function iterate($parameters = null, $hydrationMode = null) } $rsm = $this->getResultSetMapping(); - $stmt = $this->_doExecute(); + $stmt = $this->doExecute(); - return $this->_em->newHydrator($this->_hydrationMode)->iterate($stmt, $rsm, $this->_hints); + return $this->em->newHydrator($this->hydrationMode)->iterate($stmt, $rsm, $this->hints); } /** @@ -939,7 +939,7 @@ private function executeIgnoreQueryCache($parameters = null, $hydrationMode = nu $setCacheEntry = function() {}; - if ($this->_hydrationCacheProfile !== null) { + if ($this->hydrationCacheProfile !== null) { list($cacheKey, $realCacheKey) = $this->getHydrationCacheId(); $queryCacheProfile = $this->getHydrationCacheProfile(); @@ -961,7 +961,7 @@ private function executeIgnoreQueryCache($parameters = null, $hydrationMode = nu }; } - $stmt = $this->_doExecute(); + $stmt = $this->doExecute(); if (is_numeric($stmt)) { $setCacheEntry($stmt); @@ -970,7 +970,7 @@ private function executeIgnoreQueryCache($parameters = null, $hydrationMode = nu } $rsm = $this->getResultSetMapping(); - $data = $this->_em->newHydrator($this->_hydrationMode)->hydrateAll($stmt, $rsm, $this->_hints); + $data = $this->em->newHydrator($this->hydrationMode)->hydrateAll($stmt, $rsm, $this->hints); $setCacheEntry($data); @@ -988,7 +988,7 @@ private function executeIgnoreQueryCache($parameters = null, $hydrationMode = nu private function executeUsingQueryCache($parameters = null, $hydrationMode = null) { $rsm = $this->getResultSetMapping(); - $queryCache = $this->_em->getCache()->getQueryCache($this->cacheRegion); + $queryCache = $this->em->getCache()->getQueryCache($this->cacheRegion); $queryKey = new QueryCacheKey( $this->getHash(), $this->lifetime, @@ -996,7 +996,7 @@ private function executeUsingQueryCache($parameters = null, $hydrationMode = nul $this->getTimestampKey() ); - $result = $queryCache->get($queryKey, $rsm, $this->_hints); + $result = $queryCache->get($queryKey, $rsm, $this->hints); if ($result !== null) { if ($this->cacheLogger) { @@ -1007,7 +1007,7 @@ private function executeUsingQueryCache($parameters = null, $hydrationMode = nul } $result = $this->executeIgnoreQueryCache($parameters, $hydrationMode); - $cached = $queryCache->put($queryKey, $rsm, $result, $this->_hints); + $cached = $queryCache->put($queryKey, $rsm, $result, $this->hints); if ($this->cacheLogger) { $this->cacheLogger->queryCacheMiss($queryCache->getRegion()->getName(), $queryKey); @@ -1025,13 +1025,13 @@ private function executeUsingQueryCache($parameters = null, $hydrationMode = nul */ private function getTimestampKey() { - $entityName = reset($this->_resultSetMapping->aliasMap); + $entityName = reset($this->resultSetMapping->aliasMap); if (empty($entityName)) { return null; } - $metadata = $this->_em->getClassMetadata($entityName); + $metadata = $this->em->getClassMetadata($entityName); return new Cache\TimestampCacheKey($metadata->rootEntityName); } @@ -1072,9 +1072,9 @@ protected function getHydrationCacheId() */ public function setResultCacheId($id) { - $this->_queryCacheProfile = $this->_queryCacheProfile - ? $this->_queryCacheProfile->setCacheKey($id) - : new QueryCacheProfile(0, $id, $this->_em->getConfiguration()->getResultCacheImpl()); + $this->queryCacheProfile = $this->queryCacheProfile + ? $this->queryCacheProfile->setCacheKey($id) + : new QueryCacheProfile(0, $id, $this->em->getConfiguration()->getResultCacheImpl()); return $this; } @@ -1088,7 +1088,7 @@ public function setResultCacheId($id) */ public function getResultCacheId() { - return $this->_queryCacheProfile ? $this->_queryCacheProfile->getCacheKey() : null; + return $this->queryCacheProfile ? $this->queryCacheProfile->getCacheKey() : null; } /** @@ -1096,7 +1096,7 @@ public function getResultCacheId() * * @return \Doctrine\DBAL\Driver\Statement The executed database statement that holds the results. */ - abstract protected function _doExecute(); + abstract protected function doExecute(); /** * Cleanup Query resource when clone is called. @@ -1107,8 +1107,8 @@ public function __clone() { $this->parameters = new ArrayCollection(); - $this->_hints = []; - $this->_hints = $this->_em->getConfiguration()->getDefaultQueryHints(); + $this->hints = []; + $this->hints = $this->em->getConfiguration()->getDefaultQueryHints(); } /** diff --git a/lib/Doctrine/ORM/Configuration.php b/lib/Doctrine/ORM/Configuration.php index ba42a81387e..bd1b4324d93 100644 --- a/lib/Doctrine/ORM/Configuration.php +++ b/lib/Doctrine/ORM/Configuration.php @@ -63,7 +63,7 @@ class Configuration extends \Doctrine\DBAL\Configuration */ public function setProxyDir($dir) { - $this->_attributes['proxyDir'] = $dir; + $this->attributes['proxyDir'] = $dir; } /** @@ -73,8 +73,8 @@ public function setProxyDir($dir) */ public function getProxyDir() { - return isset($this->_attributes['proxyDir']) - ? $this->_attributes['proxyDir'] + return isset($this->attributes['proxyDir']) + ? $this->attributes['proxyDir'] : null; } @@ -85,8 +85,8 @@ public function getProxyDir() */ public function getAutoGenerateProxyClasses() { - return isset($this->_attributes['autoGenerateProxyClasses']) - ? $this->_attributes['autoGenerateProxyClasses'] + return isset($this->attributes['autoGenerateProxyClasses']) + ? $this->attributes['autoGenerateProxyClasses'] : AbstractProxyFactory::AUTOGENERATE_ALWAYS; } @@ -100,7 +100,7 @@ public function getAutoGenerateProxyClasses() */ public function setAutoGenerateProxyClasses($autoGenerate) { - $this->_attributes['autoGenerateProxyClasses'] = (int) $autoGenerate; + $this->attributes['autoGenerateProxyClasses'] = (int) $autoGenerate; } /** @@ -110,8 +110,8 @@ public function setAutoGenerateProxyClasses($autoGenerate) */ public function getProxyNamespace() { - return isset($this->_attributes['proxyNamespace']) - ? $this->_attributes['proxyNamespace'] + return isset($this->attributes['proxyNamespace']) + ? $this->attributes['proxyNamespace'] : null; } @@ -124,7 +124,7 @@ public function getProxyNamespace() */ public function setProxyNamespace($ns) { - $this->_attributes['proxyNamespace'] = $ns; + $this->attributes['proxyNamespace'] = $ns; } /** @@ -139,7 +139,7 @@ public function setProxyNamespace($ns) */ public function setMetadataDriverImpl(MappingDriver $driverImpl) { - $this->_attributes['metadataDriverImpl'] = $driverImpl; + $this->attributes['metadataDriverImpl'] = $driverImpl; } /** @@ -180,7 +180,7 @@ public function newDefaultAnnotationDriver($paths = [], $useSimpleAnnotationRead */ public function addEntityNamespace($alias, $namespace) { - $this->_attributes['entityNamespaces'][$alias] = $namespace; + $this->attributes['entityNamespaces'][$alias] = $namespace; } /** @@ -194,11 +194,11 @@ public function addEntityNamespace($alias, $namespace) */ public function getEntityNamespace($entityNamespaceAlias) { - if ( ! isset($this->_attributes['entityNamespaces'][$entityNamespaceAlias])) { + if ( ! isset($this->attributes['entityNamespaces'][$entityNamespaceAlias])) { throw ORMException::unknownEntityNamespace($entityNamespaceAlias); } - return trim($this->_attributes['entityNamespaces'][$entityNamespaceAlias], '\\'); + return trim($this->attributes['entityNamespaces'][$entityNamespaceAlias], '\\'); } /** @@ -210,7 +210,7 @@ public function getEntityNamespace($entityNamespaceAlias) */ public function setEntityNamespaces(array $entityNamespaces) { - $this->_attributes['entityNamespaces'] = $entityNamespaces; + $this->attributes['entityNamespaces'] = $entityNamespaces; } /** @@ -220,7 +220,7 @@ public function setEntityNamespaces(array $entityNamespaces) */ public function getEntityNamespaces() { - return $this->_attributes['entityNamespaces']; + return $this->attributes['entityNamespaces']; } /** @@ -232,8 +232,8 @@ public function getEntityNamespaces() */ public function getMetadataDriverImpl() { - return isset($this->_attributes['metadataDriverImpl']) - ? $this->_attributes['metadataDriverImpl'] + return isset($this->attributes['metadataDriverImpl']) + ? $this->attributes['metadataDriverImpl'] : null; } @@ -244,8 +244,8 @@ public function getMetadataDriverImpl() */ public function getQueryCacheImpl() { - return isset($this->_attributes['queryCacheImpl']) - ? $this->_attributes['queryCacheImpl'] + return isset($this->attributes['queryCacheImpl']) + ? $this->attributes['queryCacheImpl'] : null; } @@ -258,7 +258,7 @@ public function getQueryCacheImpl() */ public function setQueryCacheImpl(CacheDriver $cacheImpl) { - $this->_attributes['queryCacheImpl'] = $cacheImpl; + $this->attributes['queryCacheImpl'] = $cacheImpl; } /** @@ -268,8 +268,8 @@ public function setQueryCacheImpl(CacheDriver $cacheImpl) */ public function getHydrationCacheImpl() { - return isset($this->_attributes['hydrationCacheImpl']) - ? $this->_attributes['hydrationCacheImpl'] + return isset($this->attributes['hydrationCacheImpl']) + ? $this->attributes['hydrationCacheImpl'] : null; } @@ -282,7 +282,7 @@ public function getHydrationCacheImpl() */ public function setHydrationCacheImpl(CacheDriver $cacheImpl) { - $this->_attributes['hydrationCacheImpl'] = $cacheImpl; + $this->attributes['hydrationCacheImpl'] = $cacheImpl; } /** @@ -292,8 +292,8 @@ public function setHydrationCacheImpl(CacheDriver $cacheImpl) */ public function getMetadataCacheImpl() { - return isset($this->_attributes['metadataCacheImpl']) - ? $this->_attributes['metadataCacheImpl'] + return isset($this->attributes['metadataCacheImpl']) + ? $this->attributes['metadataCacheImpl'] : null; } @@ -306,7 +306,7 @@ public function getMetadataCacheImpl() */ public function setMetadataCacheImpl(CacheDriver $cacheImpl) { - $this->_attributes['metadataCacheImpl'] = $cacheImpl; + $this->attributes['metadataCacheImpl'] = $cacheImpl; } /** @@ -319,7 +319,7 @@ public function setMetadataCacheImpl(CacheDriver $cacheImpl) */ public function addNamedQuery($name, $dql) { - $this->_attributes['namedQueries'][$name] = $dql; + $this->attributes['namedQueries'][$name] = $dql; } /** @@ -333,11 +333,11 @@ public function addNamedQuery($name, $dql) */ public function getNamedQuery($name) { - if ( ! isset($this->_attributes['namedQueries'][$name])) { + if ( ! isset($this->attributes['namedQueries'][$name])) { throw ORMException::namedQueryNotFound($name); } - return $this->_attributes['namedQueries'][$name]; + return $this->attributes['namedQueries'][$name]; } /** @@ -351,7 +351,7 @@ public function getNamedQuery($name) */ public function addNamedNativeQuery($name, $sql, Query\ResultSetMapping $rsm) { - $this->_attributes['namedNativeQueries'][$name] = [$sql, $rsm]; + $this->attributes['namedNativeQueries'][$name] = [$sql, $rsm]; } /** @@ -366,11 +366,11 @@ public function addNamedNativeQuery($name, $sql, Query\ResultSetMapping $rsm) */ public function getNamedNativeQuery($name) { - if ( ! isset($this->_attributes['namedNativeQueries'][$name])) { + if ( ! isset($this->attributes['namedNativeQueries'][$name])) { throw ORMException::namedNativeQueryNotFound($name); } - return $this->_attributes['namedNativeQueries'][$name]; + return $this->attributes['namedNativeQueries'][$name]; } /** @@ -423,7 +423,7 @@ public function ensureProductionSettings() */ public function addCustomStringFunction($name, $className) { - $this->_attributes['customStringFunctions'][strtolower($name)] = $className; + $this->attributes['customStringFunctions'][strtolower($name)] = $className; } /** @@ -437,8 +437,8 @@ public function getCustomStringFunction($name) { $name = strtolower($name); - return isset($this->_attributes['customStringFunctions'][$name]) - ? $this->_attributes['customStringFunctions'][$name] + return isset($this->attributes['customStringFunctions'][$name]) + ? $this->attributes['customStringFunctions'][$name] : null; } @@ -475,7 +475,7 @@ public function setCustomStringFunctions(array $functions) */ public function addCustomNumericFunction($name, $className) { - $this->_attributes['customNumericFunctions'][strtolower($name)] = $className; + $this->attributes['customNumericFunctions'][strtolower($name)] = $className; } /** @@ -489,8 +489,8 @@ public function getCustomNumericFunction($name) { $name = strtolower($name); - return isset($this->_attributes['customNumericFunctions'][$name]) - ? $this->_attributes['customNumericFunctions'][$name] + return isset($this->attributes['customNumericFunctions'][$name]) + ? $this->attributes['customNumericFunctions'][$name] : null; } @@ -527,7 +527,7 @@ public function setCustomNumericFunctions(array $functions) */ public function addCustomDatetimeFunction($name, $className) { - $this->_attributes['customDatetimeFunctions'][strtolower($name)] = $className; + $this->attributes['customDatetimeFunctions'][strtolower($name)] = $className; } /** @@ -541,8 +541,8 @@ public function getCustomDatetimeFunction($name) { $name = strtolower($name); - return isset($this->_attributes['customDatetimeFunctions'][$name]) - ? $this->_attributes['customDatetimeFunctions'][$name] + return isset($this->attributes['customDatetimeFunctions'][$name]) + ? $this->attributes['customDatetimeFunctions'][$name] : null; } @@ -574,7 +574,7 @@ public function setCustomDatetimeFunctions(array $functions) */ public function setCustomHydrationModes($modes) { - $this->_attributes['customHydrationModes'] = []; + $this->attributes['customHydrationModes'] = []; foreach ($modes as $modeName => $hydrator) { $this->addCustomHydrationMode($modeName, $hydrator); @@ -590,8 +590,8 @@ public function setCustomHydrationModes($modes) */ public function getCustomHydrationMode($modeName) { - return isset($this->_attributes['customHydrationModes'][$modeName]) - ? $this->_attributes['customHydrationModes'][$modeName] + return isset($this->attributes['customHydrationModes'][$modeName]) + ? $this->attributes['customHydrationModes'][$modeName] : null; } @@ -605,7 +605,7 @@ public function getCustomHydrationMode($modeName) */ public function addCustomHydrationMode($modeName, $hydrator) { - $this->_attributes['customHydrationModes'][$modeName] = $hydrator; + $this->attributes['customHydrationModes'][$modeName] = $hydrator; } /** @@ -617,7 +617,7 @@ public function addCustomHydrationMode($modeName, $hydrator) */ public function setClassMetadataFactoryName($cmfName) { - $this->_attributes['classMetadataFactoryName'] = $cmfName; + $this->attributes['classMetadataFactoryName'] = $cmfName; } /** @@ -625,11 +625,11 @@ public function setClassMetadataFactoryName($cmfName) */ public function getClassMetadataFactoryName() { - if ( ! isset($this->_attributes['classMetadataFactoryName'])) { - $this->_attributes['classMetadataFactoryName'] = ClassMetadataFactory::class; + if ( ! isset($this->attributes['classMetadataFactoryName'])) { + $this->attributes['classMetadataFactoryName'] = ClassMetadataFactory::class; } - return $this->_attributes['classMetadataFactoryName']; + return $this->attributes['classMetadataFactoryName']; } /** @@ -640,7 +640,7 @@ public function getClassMetadataFactoryName() */ public function addFilter($name, $className) { - $this->_attributes['filters'][$name] = $className; + $this->attributes['filters'][$name] = $className; } /** @@ -653,8 +653,8 @@ public function addFilter($name, $className) */ public function getFilterClassName($name) { - return isset($this->_attributes['filters'][$name]) - ? $this->_attributes['filters'][$name] + return isset($this->attributes['filters'][$name]) + ? $this->attributes['filters'][$name] : null; } @@ -677,7 +677,7 @@ public function setDefaultRepositoryClassName($className) throw ORMException::invalidEntityRepository($className); } - $this->_attributes['defaultRepositoryClassName'] = $className; + $this->attributes['defaultRepositoryClassName'] = $className; } /** @@ -689,8 +689,8 @@ public function setDefaultRepositoryClassName($className) */ public function getDefaultRepositoryClassName() { - return isset($this->_attributes['defaultRepositoryClassName']) - ? $this->_attributes['defaultRepositoryClassName'] + return isset($this->attributes['defaultRepositoryClassName']) + ? $this->attributes['defaultRepositoryClassName'] : EntityRepository::class; } @@ -705,7 +705,7 @@ public function getDefaultRepositoryClassName() */ public function setNamingStrategy(NamingStrategy $namingStrategy) { - $this->_attributes['namingStrategy'] = $namingStrategy; + $this->attributes['namingStrategy'] = $namingStrategy; } /** @@ -717,11 +717,11 @@ public function setNamingStrategy(NamingStrategy $namingStrategy) */ public function getNamingStrategy() { - if ( ! isset($this->_attributes['namingStrategy'])) { - $this->_attributes['namingStrategy'] = new DefaultNamingStrategy(); + if ( ! isset($this->attributes['namingStrategy'])) { + $this->attributes['namingStrategy'] = new DefaultNamingStrategy(); } - return $this->_attributes['namingStrategy']; + return $this->attributes['namingStrategy']; } /** @@ -735,7 +735,7 @@ public function getNamingStrategy() */ public function setQuoteStrategy(QuoteStrategy $quoteStrategy) { - $this->_attributes['quoteStrategy'] = $quoteStrategy; + $this->attributes['quoteStrategy'] = $quoteStrategy; } /** @@ -747,11 +747,11 @@ public function setQuoteStrategy(QuoteStrategy $quoteStrategy) */ public function getQuoteStrategy() { - if ( ! isset($this->_attributes['quoteStrategy'])) { - $this->_attributes['quoteStrategy'] = new DefaultQuoteStrategy(); + if ( ! isset($this->attributes['quoteStrategy'])) { + $this->attributes['quoteStrategy'] = new DefaultQuoteStrategy(); } - return $this->_attributes['quoteStrategy']; + return $this->attributes['quoteStrategy']; } /** @@ -762,7 +762,7 @@ public function getQuoteStrategy() */ public function setEntityListenerResolver(EntityListenerResolver $resolver) { - $this->_attributes['entityListenerResolver'] = $resolver; + $this->attributes['entityListenerResolver'] = $resolver; } /** @@ -773,11 +773,11 @@ public function setEntityListenerResolver(EntityListenerResolver $resolver) */ public function getEntityListenerResolver() { - if ( ! isset($this->_attributes['entityListenerResolver'])) { - $this->_attributes['entityListenerResolver'] = new DefaultEntityListenerResolver(); + if ( ! isset($this->attributes['entityListenerResolver'])) { + $this->attributes['entityListenerResolver'] = new DefaultEntityListenerResolver(); } - return $this->_attributes['entityListenerResolver']; + return $this->attributes['entityListenerResolver']; } /** @@ -788,7 +788,7 @@ public function getEntityListenerResolver() */ public function setRepositoryFactory(RepositoryFactory $repositoryFactory) { - $this->_attributes['repositoryFactory'] = $repositoryFactory; + $this->attributes['repositoryFactory'] = $repositoryFactory; } /** @@ -799,8 +799,8 @@ public function setRepositoryFactory(RepositoryFactory $repositoryFactory) */ public function getRepositoryFactory() { - return isset($this->_attributes['repositoryFactory']) - ? $this->_attributes['repositoryFactory'] + return isset($this->attributes['repositoryFactory']) + ? $this->attributes['repositoryFactory'] : new DefaultRepositoryFactory(); } @@ -811,8 +811,8 @@ public function getRepositoryFactory() */ public function isSecondLevelCacheEnabled() { - return isset($this->_attributes['isSecondLevelCacheEnabled']) - ? $this->_attributes['isSecondLevelCacheEnabled'] + return isset($this->attributes['isSecondLevelCacheEnabled']) + ? $this->attributes['isSecondLevelCacheEnabled'] : false; } @@ -825,7 +825,7 @@ public function isSecondLevelCacheEnabled() */ public function setSecondLevelCacheEnabled($flag = true) { - $this->_attributes['isSecondLevelCacheEnabled'] = (boolean) $flag; + $this->attributes['isSecondLevelCacheEnabled'] = (boolean) $flag; } /** @@ -837,7 +837,7 @@ public function setSecondLevelCacheEnabled($flag = true) */ public function setSecondLevelCacheConfiguration(CacheConfiguration $cacheConfig) { - $this->_attributes['secondLevelCacheConfiguration'] = $cacheConfig; + $this->attributes['secondLevelCacheConfiguration'] = $cacheConfig; } /** @@ -847,12 +847,12 @@ public function setSecondLevelCacheConfiguration(CacheConfiguration $cacheConfig */ public function getSecondLevelCacheConfiguration() { - if ( ! isset($this->_attributes['secondLevelCacheConfiguration']) && $this->isSecondLevelCacheEnabled()) { - $this->_attributes['secondLevelCacheConfiguration'] = new CacheConfiguration(); + if ( ! isset($this->attributes['secondLevelCacheConfiguration']) && $this->isSecondLevelCacheEnabled()) { + $this->attributes['secondLevelCacheConfiguration'] = new CacheConfiguration(); } - return isset($this->_attributes['secondLevelCacheConfiguration']) - ? $this->_attributes['secondLevelCacheConfiguration'] + return isset($this->attributes['secondLevelCacheConfiguration']) + ? $this->attributes['secondLevelCacheConfiguration'] : null; } @@ -865,7 +865,7 @@ public function getSecondLevelCacheConfiguration() */ public function getDefaultQueryHints() { - return isset($this->_attributes['defaultQueryHints']) ? $this->_attributes['defaultQueryHints'] : []; + return isset($this->attributes['defaultQueryHints']) ? $this->attributes['defaultQueryHints'] : []; } /** @@ -877,7 +877,7 @@ public function getDefaultQueryHints() */ public function setDefaultQueryHints(array $defaultQueryHints) { - $this->_attributes['defaultQueryHints'] = $defaultQueryHints; + $this->attributes['defaultQueryHints'] = $defaultQueryHints; } /** @@ -891,8 +891,8 @@ public function setDefaultQueryHints(array $defaultQueryHints) */ public function getDefaultQueryHint($name) { - return isset($this->_attributes['defaultQueryHints'][$name]) - ? $this->_attributes['defaultQueryHints'][$name] + return isset($this->attributes['defaultQueryHints'][$name]) + ? $this->attributes['defaultQueryHints'][$name] : false; } @@ -906,6 +906,6 @@ public function getDefaultQueryHint($name) */ public function setDefaultQueryHint($name, $value) { - $this->_attributes['defaultQueryHints'][$name] = $value; + $this->attributes['defaultQueryHints'][$name] = $value; } } diff --git a/lib/Doctrine/ORM/EntityRepository.php b/lib/Doctrine/ORM/EntityRepository.php index 6be570ba3be..ecd85068d35 100644 --- a/lib/Doctrine/ORM/EntityRepository.php +++ b/lib/Doctrine/ORM/EntityRepository.php @@ -43,17 +43,17 @@ class EntityRepository implements ObjectRepository, Selectable /** * @var string */ - protected $_entityName; + protected $entityName; /** * @var EntityManager */ - protected $_em; + protected $em; /** * @var \Doctrine\ORM\Mapping\ClassMetadata */ - protected $_class; + protected $class; /** * Initializes a new EntityRepository. @@ -63,9 +63,9 @@ class EntityRepository implements ObjectRepository, Selectable */ public function __construct(EntityManagerInterface $em, Mapping\ClassMetadata $class) { - $this->_entityName = $class->name; - $this->_em = $em; - $this->_class = $class; + $this->entityName = $class->name; + $this->em = $em; + $this->class = $class; } /** @@ -78,9 +78,9 @@ public function __construct(EntityManagerInterface $em, Mapping\ClassMetadata $c */ public function createQueryBuilder($alias, $indexBy = null) { - return $this->_em->createQueryBuilder() + return $this->em->createQueryBuilder() ->select($alias) - ->from($this->_entityName, $alias, $indexBy); + ->from($this->entityName, $alias, $indexBy); } /** @@ -94,8 +94,8 @@ public function createQueryBuilder($alias, $indexBy = null) */ public function createResultSetMappingBuilder($alias) { - $rsm = new ResultSetMappingBuilder($this->_em, ResultSetMappingBuilder::COLUMN_RENAMING_INCREMENT); - $rsm->addRootEntityFromClassMetadata($this->_entityName, $alias); + $rsm = new ResultSetMappingBuilder($this->em, ResultSetMappingBuilder::COLUMN_RENAMING_INCREMENT); + $rsm->addRootEntityFromClassMetadata($this->entityName, $alias); return $rsm; } @@ -109,7 +109,7 @@ public function createResultSetMappingBuilder($alias) */ public function createNamedQuery($queryName) { - return $this->_em->createQuery($this->_class->getNamedQuery($queryName)); + return $this->em->createQuery($this->class->getNamedQuery($queryName)); } /** @@ -121,11 +121,11 @@ public function createNamedQuery($queryName) */ public function createNativeNamedQuery($queryName) { - $queryMapping = $this->_class->getNamedNativeQuery($queryName); - $rsm = new Query\ResultSetMappingBuilder($this->_em); - $rsm->addNamedNativeQueryMapping($this->_class, $queryMapping); + $queryMapping = $this->class->getNamedNativeQuery($queryName); + $rsm = new Query\ResultSetMappingBuilder($this->em); + $rsm->addNamedNativeQueryMapping($this->class, $queryMapping); - return $this->_em->createNativeQuery($queryMapping['query'], $rsm); + return $this->em->createNativeQuery($queryMapping['query'], $rsm); } /** @@ -135,7 +135,7 @@ public function createNativeNamedQuery($queryName) */ public function clear() { - $this->_em->clear($this->_class->rootEntityName); + $this->em->clear($this->class->rootEntityName); } /** @@ -151,7 +151,7 @@ public function clear() */ public function find($id, $lockMode = null, $lockVersion = null) { - return $this->_em->find($this->_entityName, $id, $lockMode, $lockVersion); + return $this->em->find($this->entityName, $id, $lockMode, $lockVersion); } /** @@ -176,7 +176,7 @@ public function findAll() */ public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) { - $persister = $this->_em->getUnitOfWork()->getEntityPersister($this->_entityName); + $persister = $this->em->getUnitOfWork()->getEntityPersister($this->entityName); return $persister->loadAll($criteria, $orderBy, $limit, $offset); } @@ -191,7 +191,7 @@ public function findBy(array $criteria, array $orderBy = null, $limit = null, $o */ public function findOneBy(array $criteria, array $orderBy = null) { - $persister = $this->_em->getUnitOfWork()->getEntityPersister($this->_entityName); + $persister = $this->em->getUnitOfWork()->getEntityPersister($this->entityName); return $persister->load($criteria, null, null, [], null, 1, $orderBy); } @@ -207,7 +207,7 @@ public function findOneBy(array $criteria, array $orderBy = null) */ public function count(array $criteria) { - return $this->_em->getUnitOfWork()->getEntityPersister($this->_entityName)->count($criteria); + return $this->em->getUnitOfWork()->getEntityPersister($this->entityName)->count($criteria); } /** @@ -246,7 +246,7 @@ public function __call($method, $arguments) */ protected function getEntityName() { - return $this->_entityName; + return $this->entityName; } /** @@ -262,7 +262,7 @@ public function getClassName() */ protected function getEntityManager() { - return $this->_em; + return $this->em; } /** @@ -270,7 +270,7 @@ protected function getEntityManager() */ protected function getClassMetadata() { - return $this->_class; + return $this->class; } /** @@ -283,7 +283,7 @@ protected function getClassMetadata() */ public function matching(Criteria $criteria) { - $persister = $this->_em->getUnitOfWork()->getEntityPersister($this->_entityName); + $persister = $this->em->getUnitOfWork()->getEntityPersister($this->entityName); return new LazyCriteriaCollection($persister, $criteria); } @@ -307,8 +307,8 @@ private function resolveMagicCall($method, $by, array $arguments) $fieldName = lcfirst(Inflector::classify($by)); - if (! ($this->_class->hasField($fieldName) || $this->_class->hasAssociation($fieldName))) { - throw ORMException::invalidMagicCall($this->_entityName, $fieldName, $method . $by); + if (! ($this->class->hasField($fieldName) || $this->class->hasAssociation($fieldName))) { + throw ORMException::invalidMagicCall($this->entityName, $fieldName, $method . $by); } return $this->$method([$fieldName => $arguments[0]], ...array_slice($arguments, 1)); diff --git a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php index cbe604f388e..d5207c9f42e 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php @@ -42,28 +42,28 @@ abstract class AbstractHydrator * * @var \Doctrine\ORM\Query\ResultSetMapping */ - protected $_rsm; + protected $rsm; /** * The EntityManager instance. * * @var EntityManagerInterface */ - protected $_em; + protected $em; /** * The dbms Platform instance. * * @var \Doctrine\DBAL\Platforms\AbstractPlatform */ - protected $_platform; + protected $platform; /** * The UnitOfWork of the associated EntityManager. * * @var \Doctrine\ORM\UnitOfWork */ - protected $_uow; + protected $uow; /** * The IdentifierFlattener used for manipulating identifiers @@ -77,28 +77,28 @@ abstract class AbstractHydrator * * @var array */ - protected $_metadataCache = []; + protected $metadataCache = []; /** * The cache used during row-by-row hydration. * * @var array */ - protected $_cache = []; + protected $cache = []; /** * The statement that provides the data to hydrate. * * @var \Doctrine\DBAL\Driver\Statement */ - protected $_stmt; + protected $stmt; /** * The query hints. * * @var array */ - protected $_hints; + protected $hints; /** * Initializes a new instance of a class derived from AbstractHydrator. @@ -107,10 +107,10 @@ abstract class AbstractHydrator */ public function __construct(EntityManagerInterface $em) { - $this->_em = $em; - $this->_platform = $em->getConnection()->getDatabasePlatform(); - $this->_uow = $em->getUnitOfWork(); - $this->identifierFlattener = new IdentifierFlattener($this->_uow, $em->getMetadataFactory()); + $this->em = $em; + $this->platform = $em->getConnection()->getDatabasePlatform(); + $this->uow = $em->getUnitOfWork(); + $this->identifierFlattener = new IdentifierFlattener($this->uow, $em->getMetadataFactory()); } /** @@ -124,11 +124,11 @@ public function __construct(EntityManagerInterface $em) */ public function iterate($stmt, $resultSetMapping, array $hints = []) { - $this->_stmt = $stmt; - $this->_rsm = $resultSetMapping; - $this->_hints = $hints; + $this->stmt = $stmt; + $this->rsm = $resultSetMapping; + $this->hints = $hints; - $evm = $this->_em->getEventManager(); + $evm = $this->em->getEventManager(); $evm->addEventListener([Events::onClear], $this); @@ -148,9 +148,9 @@ public function iterate($stmt, $resultSetMapping, array $hints = []) */ public function hydrateAll($stmt, $resultSetMapping, array $hints = []) { - $this->_stmt = $stmt; - $this->_rsm = $resultSetMapping; - $this->_hints = $hints; + $this->stmt = $stmt; + $this->rsm = $resultSetMapping; + $this->hints = $hints; $this->prepare(); @@ -169,7 +169,7 @@ public function hydrateAll($stmt, $resultSetMapping, array $hints = []) */ public function hydrateRow() { - $row = $this->_stmt->fetch(PDO::FETCH_ASSOC); + $row = $this->stmt->fetch(PDO::FETCH_ASSOC); if ( ! $row) { $this->cleanup(); @@ -214,17 +214,16 @@ protected function prepare() */ protected function cleanup() { - $this->_stmt->closeCursor(); + $this->stmt->closeCursor(); - $this->_stmt = null; - $this->_rsm = null; - $this->_cache = []; - $this->_metadataCache = []; + $this->stmt = null; + $this->rsm = null; + $this->cache = []; + $this->metadataCache = []; - $this - ->_em - ->getEventManager() - ->removeEventListener([Events::onClear], $this); + $this->em + ->getEventManager() + ->removeEventListener([Events::onClear], $this); } /** @@ -283,7 +282,7 @@ protected function gatherRowData(array $data, array &$id, array &$nonemptyCompon $argIndex = $cacheKeyInfo['argIndex']; $objIndex = $cacheKeyInfo['objIndex']; $type = $cacheKeyInfo['type']; - $value = $type->convertToPHPValue($value, $this->_platform); + $value = $type->convertToPHPValue($value, $this->platform); $rowData['newObjects'][$objIndex]['class'] = $cacheKeyInfo['class']; $rowData['newObjects'][$objIndex]['args'][$argIndex] = $value; @@ -291,7 +290,7 @@ protected function gatherRowData(array $data, array &$id, array &$nonemptyCompon case (isset($cacheKeyInfo['isScalar'])): $type = $cacheKeyInfo['type']; - $value = $type->convertToPHPValue($value, $this->_platform); + $value = $type->convertToPHPValue($value, $this->platform); $rowData['scalars'][$fieldName] = $value; break; @@ -309,7 +308,7 @@ protected function gatherRowData(array $data, array &$id, array &$nonemptyCompon } $rowData['data'][$dqlAlias][$fieldName] = $type - ? $type->convertToPHPValue($value, $this->_platform) + ? $type->convertToPHPValue($value, $this->platform) : $value; if ($cacheKeyInfo['isIdentifier'] && $value !== null) { @@ -353,7 +352,7 @@ protected function gatherScalarRowData(&$data) $type = $cacheKeyInfo['type']; $fieldName = $dqlAlias . '_' . $fieldName; $value = $type - ? $type->convertToPHPValue($value, $this->_platform) + ? $type->convertToPHPValue($value, $this->platform) : $value; } @@ -372,58 +371,58 @@ protected function gatherScalarRowData(&$data) */ protected function hydrateColumnInfo($key) { - if (isset($this->_cache[$key])) { - return $this->_cache[$key]; + if (isset($this->cache[$key])) { + return $this->cache[$key]; } switch (true) { // NOTE: Most of the times it's a field mapping, so keep it first!!! - case (isset($this->_rsm->fieldMappings[$key])): - $classMetadata = $this->getClassMetadata($this->_rsm->declaringClasses[$key]); - $fieldName = $this->_rsm->fieldMappings[$key]; + case (isset($this->rsm->fieldMappings[$key])): + $classMetadata = $this->getClassMetadata($this->rsm->declaringClasses[$key]); + $fieldName = $this->rsm->fieldMappings[$key]; $property = $classMetadata->getProperty($fieldName); - return $this->_cache[$key] = [ + return $this->cache[$key] = [ 'isIdentifier' => $property->isPrimaryKey(), 'fieldName' => $fieldName, 'type' => $property->getType(), - 'dqlAlias' => $this->_rsm->columnOwnerMap[$key], + 'dqlAlias' => $this->rsm->columnOwnerMap[$key], ]; - case (isset($this->_rsm->newObjectMappings[$key])): + case (isset($this->rsm->newObjectMappings[$key])): // WARNING: A NEW object is also a scalar, so it must be declared before! - $mapping = $this->_rsm->newObjectMappings[$key]; + $mapping = $this->rsm->newObjectMappings[$key]; - return $this->_cache[$key] = [ + return $this->cache[$key] = [ 'isScalar' => true, 'isNewObjectParameter' => true, - 'fieldName' => $this->_rsm->scalarMappings[$key], - 'type' => $this->_rsm->typeMappings[$key], + 'fieldName' => $this->rsm->scalarMappings[$key], + 'type' => $this->rsm->typeMappings[$key], 'argIndex' => $mapping['argIndex'], 'objIndex' => $mapping['objIndex'], 'class' => new \ReflectionClass($mapping['className']), ]; - case (isset($this->_rsm->scalarMappings[$key])): - return $this->_cache[$key] = [ + case (isset($this->rsm->scalarMappings[$key])): + return $this->cache[$key] = [ 'isScalar' => true, - 'fieldName' => $this->_rsm->scalarMappings[$key], - 'type' => $this->_rsm->typeMappings[$key], + 'fieldName' => $this->rsm->scalarMappings[$key], + 'type' => $this->rsm->typeMappings[$key], ]; - case (isset($this->_rsm->metaMappings[$key])): + case (isset($this->rsm->metaMappings[$key])): // Meta column (has meaning in relational schema only, i.e. foreign keys or discriminator columns). - $fieldName = $this->_rsm->metaMappings[$key]; - $dqlAlias = $this->_rsm->columnOwnerMap[$key]; + $fieldName = $this->rsm->metaMappings[$key]; + $dqlAlias = $this->rsm->columnOwnerMap[$key]; // Cache metadata fetch - $this->getClassMetadata($this->_rsm->aliasMap[$dqlAlias]); + $this->getClassMetadata($this->rsm->aliasMap[$dqlAlias]); - return $this->_cache[$key] = [ - 'isIdentifier' => isset($this->_rsm->isIdentifierColumn[$dqlAlias][$key]), + return $this->cache[$key] = [ + 'isIdentifier' => isset($this->rsm->isIdentifierColumn[$dqlAlias][$key]), 'isMetaColumn' => true, 'fieldName' => $fieldName, - 'type' => $this->_rsm->typeMappings[$key], + 'type' => $this->rsm->typeMappings[$key], 'dqlAlias' => $dqlAlias, ]; } @@ -442,11 +441,11 @@ protected function hydrateColumnInfo($key) */ protected function getClassMetadata($className) { - if ( ! isset($this->_metadataCache[$className])) { - $this->_metadataCache[$className] = $this->_em->getClassMetadata($className); + if ( ! isset($this->metadataCache[$className])) { + $this->metadataCache[$className] = $this->em->getClassMetadata($className); } - return $this->_metadataCache[$className]; + return $this->metadataCache[$className]; } /** @@ -478,6 +477,6 @@ protected function registerManaged(ClassMetadata $class, $entity, array $data) $id[$fieldName] = $data[$joinColumn->getColumnName()]; } - $this->_em->getUnitOfWork()->registerManaged($entity, $id, $data); + $this->em->getUnitOfWork()->registerManaged($entity, $id, $data); } } diff --git a/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php index c26b99be38c..e4a94c5377d 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php @@ -35,44 +35,44 @@ class ArrayHydrator extends AbstractHydrator /** * @var array */ - private $_rootAliases = []; + private $rootAliases = []; /** * @var bool */ - private $_isSimpleQuery = false; + private $isSimpleQuery = false; /** * @var array */ - private $_identifierMap = []; + private $identifierMap = []; /** * @var array */ - private $_resultPointers = []; + private $resultPointers = []; /** * @var array */ - private $_idTemplate = []; + private $idTemplate = []; /** * @var int */ - private $_resultCounter = 0; + private $resultCounter = 0; /** * {@inheritdoc} */ protected function prepare() { - $this->_isSimpleQuery = count($this->_rsm->aliasMap) <= 1; + $this->isSimpleQuery = count($this->rsm->aliasMap) <= 1; - foreach ($this->_rsm->aliasMap as $dqlAlias => $className) { - $this->_identifierMap[$dqlAlias] = []; - $this->_resultPointers[$dqlAlias] = []; - $this->_idTemplate[$dqlAlias] = ''; + foreach ($this->rsm->aliasMap as $dqlAlias => $className) { + $this->identifierMap[$dqlAlias] = []; + $this->resultPointers[$dqlAlias] = []; + $this->idTemplate[$dqlAlias] = ''; } } @@ -83,7 +83,7 @@ protected function hydrateAllData() { $result = []; - while ($data = $this->_stmt->fetch(PDO::FETCH_ASSOC)) { + while ($data = $this->stmt->fetch(PDO::FETCH_ASSOC)) { $this->hydrateRowData($data, $result); } @@ -96,7 +96,7 @@ protected function hydrateAllData() protected function hydrateRowData(array $row, array &$result) { // 1) Initialize - $id = $this->_idTemplate; // initialize the id-memory + $id = $this->idTemplate; // initialize the id-memory $nonemptyComponents = []; $rowData = $this->gatherRowData($row, $id, $nonemptyComponents); @@ -104,10 +104,10 @@ protected function hydrateRowData(array $row, array &$result) foreach ($rowData['data'] as $dqlAlias => $data) { $index = false; - if (isset($this->_rsm->parentAliasMap[$dqlAlias])) { + if (isset($this->rsm->parentAliasMap[$dqlAlias])) { // It's a joined result - $parent = $this->_rsm->parentAliasMap[$dqlAlias]; + $parent = $this->rsm->parentAliasMap[$dqlAlias]; $path = $parent . '.' . $dqlAlias; // missing parent data, skipping as RIGHT JOIN hydration is not supported. @@ -117,20 +117,20 @@ protected function hydrateRowData(array $row, array &$result) // Get a reference to the right element in the result tree. // This element will get the associated element attached. - if ($this->_rsm->isMixed && isset($this->_rootAliases[$parent])) { - $first = reset($this->_resultPointers); + if ($this->rsm->isMixed && isset($this->rootAliases[$parent])) { + $first = reset($this->resultPointers); // TODO: Exception if $key === null ? - $baseElement =& $this->_resultPointers[$parent][key($first)]; - } else if (isset($this->_resultPointers[$parent])) { - $baseElement =& $this->_resultPointers[$parent]; + $baseElement =& $this->resultPointers[$parent][key($first)]; + } else if (isset($this->resultPointers[$parent])) { + $baseElement =& $this->resultPointers[$parent]; } else { - unset($this->_resultPointers[$dqlAlias]); // Ticket #1228 + unset($this->resultPointers[$dqlAlias]); // Ticket #1228 continue; } - $relationAlias = $this->_rsm->relationMap[$dqlAlias]; - $parentClass = $this->_metadataCache[$this->_rsm->aliasMap[$parent]]; + $relationAlias = $this->rsm->relationMap[$dqlAlias]; + $parentClass = $this->metadataCache[$this->rsm->aliasMap[$parent]]; $relation = $parentClass->associationMappings[$relationAlias]; // Check the type of the relation (many or single-valued) @@ -142,22 +142,22 @@ protected function hydrateRowData(array $row, array &$result) } if (isset($nonemptyComponents[$dqlAlias])) { - $indexExists = isset($this->_identifierMap[$path][$id[$parent]][$id[$dqlAlias]]); - $index = $indexExists ? $this->_identifierMap[$path][$id[$parent]][$id[$dqlAlias]] : false; + $indexExists = isset($this->identifierMap[$path][$id[$parent]][$id[$dqlAlias]]); + $index = $indexExists ? $this->identifierMap[$path][$id[$parent]][$id[$dqlAlias]] : false; $indexIsValid = $index !== false ? isset($baseElement[$relationAlias][$index]) : false; if ( ! $indexExists || ! $indexIsValid) { $element = $data; - if (isset($this->_rsm->indexByMap[$dqlAlias])) { - $baseElement[$relationAlias][$row[$this->_rsm->indexByMap[$dqlAlias]]] = $element; + if (isset($this->rsm->indexByMap[$dqlAlias])) { + $baseElement[$relationAlias][$row[$this->rsm->indexByMap[$dqlAlias]]] = $element; } else { $baseElement[$relationAlias][] = $element; } end($baseElement[$relationAlias]); - $this->_identifierMap[$path][$id[$parent]][$id[$dqlAlias]] = key($baseElement[$relationAlias]); + $this->identifierMap[$path][$id[$parent]][$id[$dqlAlias]] = key($baseElement[$relationAlias]); } } } else { @@ -181,40 +181,40 @@ protected function hydrateRowData(array $row, array &$result) } else { // It's a root result element - $this->_rootAliases[$dqlAlias] = true; // Mark as root - $entityKey = $this->_rsm->entityMappings[$dqlAlias] ?: 0; + $this->rootAliases[$dqlAlias] = true; // Mark as root + $entityKey = $this->rsm->entityMappings[$dqlAlias] ?: 0; // if this row has a NULL value for the root result id then make it a null result. if ( ! isset($nonemptyComponents[$dqlAlias]) ) { - $result[] = $this->_rsm->isMixed + $result[] = $this->rsm->isMixed ? [$entityKey => null] : null; - $resultKey = $this->_resultCounter; - ++$this->_resultCounter; + $resultKey = $this->resultCounter; + ++$this->resultCounter; continue; } // Check for an existing element - if ($this->_isSimpleQuery || ! isset($this->_identifierMap[$dqlAlias][$id[$dqlAlias]])) { - $element = $this->_rsm->isMixed + if ($this->isSimpleQuery || ! isset($this->identifierMap[$dqlAlias][$id[$dqlAlias]])) { + $element = $this->rsm->isMixed ? [$entityKey => $data] : $data; - if (isset($this->_rsm->indexByMap[$dqlAlias])) { - $resultKey = $row[$this->_rsm->indexByMap[$dqlAlias]]; + if (isset($this->rsm->indexByMap[$dqlAlias])) { + $resultKey = $row[$this->rsm->indexByMap[$dqlAlias]]; $result[$resultKey] = $element; } else { - $resultKey = $this->_resultCounter; + $resultKey = $this->resultCounter; $result[] = $element; - ++$this->_resultCounter; + ++$this->resultCounter; } - $this->_identifierMap[$dqlAlias][$id[$dqlAlias]] = $resultKey; + $this->identifierMap[$dqlAlias][$id[$dqlAlias]] = $resultKey; } else { - $index = $this->_identifierMap[$dqlAlias][$id[$dqlAlias]]; + $index = $this->identifierMap[$dqlAlias][$id[$dqlAlias]]; $resultKey = $index; } @@ -223,16 +223,16 @@ protected function hydrateRowData(array $row, array &$result) } if ( ! isset($resultKey)) { - $this->_resultCounter++; + $this->resultCounter++; } // Append scalar values to mixed result sets if (isset($rowData['scalars'])) { if ( ! isset($resultKey)) { // this only ever happens when no object is fetched (scalar result only) - $resultKey = isset($this->_rsm->indexByMap['scalars']) - ? $row[$this->_rsm->indexByMap['scalars']] - : $this->_resultCounter - 1; + $resultKey = isset($this->rsm->indexByMap['scalars']) + ? $row[$this->rsm->indexByMap['scalars']] + : $this->resultCounter - 1; } foreach ($rowData['scalars'] as $name => $value) { @@ -243,7 +243,7 @@ protected function hydrateRowData(array $row, array &$result) // Append new object to mixed result sets if (isset($rowData['newObjects'])) { if ( ! isset($resultKey)) { - $resultKey = $this->_resultCounter - 1; + $resultKey = $this->resultCounter - 1; } $scalarCount = (isset($rowData['scalars'])? count($rowData['scalars']): 0); @@ -278,19 +278,19 @@ protected function hydrateRowData(array $row, array &$result) private function updateResultPointer(array &$coll, $index, $dqlAlias, $oneToOne) { if ($coll === null) { - unset($this->_resultPointers[$dqlAlias]); // Ticket #1228 + unset($this->resultPointers[$dqlAlias]); // Ticket #1228 return; } if ($oneToOne) { - $this->_resultPointers[$dqlAlias] =& $coll; + $this->resultPointers[$dqlAlias] =& $coll; return; } if ($index !== false) { - $this->_resultPointers[$dqlAlias] =& $coll[$index]; + $this->resultPointers[$dqlAlias] =& $coll[$index]; return; } @@ -300,7 +300,7 @@ private function updateResultPointer(array &$coll, $index, $dqlAlias, $oneToOne) } end($coll); - $this->_resultPointers[$dqlAlias] =& $coll[key($coll)]; + $this->resultPointers[$dqlAlias] =& $coll[key($coll)]; return; } diff --git a/lib/Doctrine/ORM/Internal/Hydration/IterableResult.php b/lib/Doctrine/ORM/Internal/Hydration/IterableResult.php index 1774ca0305b..94cf649c3ff 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/IterableResult.php +++ b/lib/Doctrine/ORM/Internal/Hydration/IterableResult.php @@ -31,29 +31,29 @@ class IterableResult implements \Iterator /** * @var \Doctrine\ORM\Internal\Hydration\AbstractHydrator */ - private $_hydrator; + private $hydrator; /** * @var boolean */ - private $_rewinded = false; + private $rewinded = false; /** * @var integer */ - private $_key = -1; + private $key = -1; /** * @var object|null */ - private $_current = null; + private $current = null; /** * @param \Doctrine\ORM\Internal\Hydration\AbstractHydrator $hydrator */ public function __construct($hydrator) { - $this->_hydrator = $hydrator; + $this->hydrator = $hydrator; } /** @@ -63,11 +63,11 @@ public function __construct($hydrator) */ public function rewind() { - if ($this->_rewinded == true) { + if ($this->rewinded == true) { throw new HydrationException("Can only iterate a Result once."); } else { - $this->_current = $this->next(); - $this->_rewinded = true; + $this->current = $this->next(); + $this->rewinded = true; } } @@ -78,10 +78,10 @@ public function rewind() */ public function next() { - $this->_current = $this->_hydrator->hydrateRow(); - $this->_key++; + $this->current = $this->hydrator->hydrateRow(); + $this->key++; - return $this->_current; + return $this->current; } /** @@ -89,7 +89,7 @@ public function next() */ public function current() { - return $this->_current; + return $this->current; } /** @@ -97,7 +97,7 @@ public function current() */ public function key() { - return $this->_key; + return $this->key; } /** @@ -105,6 +105,6 @@ public function key() */ public function valid() { - return ($this->_current!=false); + return ($this->current!=false); } } diff --git a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php index 2f54c8acddc..bb646f559f7 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php @@ -80,31 +80,31 @@ class ObjectHydrator extends AbstractHydrator */ protected function prepare() { - if ( ! isset($this->_hints[UnitOfWork::HINT_DEFEREAGERLOAD])) { - $this->_hints[UnitOfWork::HINT_DEFEREAGERLOAD] = true; + if ( ! isset($this->hints[UnitOfWork::HINT_DEFEREAGERLOAD])) { + $this->hints[UnitOfWork::HINT_DEFEREAGERLOAD] = true; } - foreach ($this->_rsm->aliasMap as $dqlAlias => $className) { + foreach ($this->rsm->aliasMap as $dqlAlias => $className) { $this->identifierMap[$dqlAlias] = []; $this->idTemplate[$dqlAlias] = ''; // Remember which associations are "fetch joined", so that we know where to inject // collection stubs or proxies and where not. - if ( ! isset($this->_rsm->relationMap[$dqlAlias])) { + if ( ! isset($this->rsm->relationMap[$dqlAlias])) { continue; } - $parent = $this->_rsm->parentAliasMap[$dqlAlias]; + $parent = $this->rsm->parentAliasMap[$dqlAlias]; - if ( ! isset($this->_rsm->aliasMap[$parent])) { + if ( ! isset($this->rsm->aliasMap[$parent])) { throw HydrationException::parentObjectOfRelationNotFound($dqlAlias, $parent); } - $sourceClassName = $this->_rsm->aliasMap[$parent]; + $sourceClassName = $this->rsm->aliasMap[$parent]; $sourceClass = $this->getClassMetadata($sourceClassName); - $assoc = $sourceClass->associationMappings[$this->_rsm->relationMap[$dqlAlias]]; + $assoc = $sourceClass->associationMappings[$this->rsm->relationMap[$dqlAlias]]; - $this->_hints['fetched'][$parent][$assoc['fieldName']] = true; + $this->hints['fetched'][$parent][$assoc['fieldName']] = true; if ($assoc['type'] === ClassMetadata::MANY_TO_MANY) { continue; @@ -112,7 +112,7 @@ protected function prepare() // Mark any non-collection opposite sides as fetched, too. if ($assoc['mappedBy']) { - $this->_hints['fetched'][$dqlAlias][$assoc['mappedBy']] = true; + $this->hints['fetched'][$dqlAlias][$assoc['mappedBy']] = true; continue; } @@ -126,7 +126,7 @@ protected function prepare() continue; } - $this->_hints['fetched'][$dqlAlias][$inverseAssoc['fieldName']] = true; + $this->hints['fetched'][$dqlAlias][$inverseAssoc['fieldName']] = true; } } } @@ -136,7 +136,7 @@ protected function prepare() */ protected function cleanup() { - $eagerLoad = (isset($this->_hints[UnitOfWork::HINT_DEFEREAGERLOAD])) && $this->_hints[UnitOfWork::HINT_DEFEREAGERLOAD] == true; + $eagerLoad = (isset($this->hints[UnitOfWork::HINT_DEFEREAGERLOAD])) && $this->hints[UnitOfWork::HINT_DEFEREAGERLOAD] == true; parent::cleanup(); @@ -146,10 +146,10 @@ protected function cleanup() $this->resultPointers = []; if ($eagerLoad) { - $this->_uow->triggerEagerLoads(); + $this->uow->triggerEagerLoads(); } - $this->_uow->hydrationComplete(); + $this->uow->hydrationComplete(); } /** @@ -159,7 +159,7 @@ protected function hydrateAllData() { $result = []; - while ($row = $this->_stmt->fetch(PDO::FETCH_ASSOC)) { + while ($row = $this->stmt->fetch(PDO::FETCH_ASSOC)) { $this->hydrateRowData($row, $result); } @@ -193,17 +193,17 @@ private function initRelatedCollection($entity, $class, $fieldName, $parentDqlAl if ( ! $value instanceof PersistentCollection) { $value = new PersistentCollection( - $this->_em, $this->_metadataCache[$relation['targetEntity']], $value + $this->em, $this->metadataCache[$relation['targetEntity']], $value ); $value->setOwner($entity, $relation); $class->reflFields[$fieldName]->setValue($entity, $value); - $this->_uow->setOriginalEntityProperty($oid, $fieldName, $value); + $this->uow->setOriginalEntityProperty($oid, $fieldName, $value); $this->initializedCollections[$oid . $fieldName] = $value; } else if ( - isset($this->_hints[Query::HINT_REFRESH]) || - isset($this->_hints['fetched'][$parentDqlAlias][$fieldName]) && + isset($this->hints[Query::HINT_REFRESH]) || + isset($this->hints['fetched'][$parentDqlAlias][$fieldName]) && ! $value->isInitialized() ) { // Is already PersistentCollection, but either REFRESH or FETCH-JOIN and UNINITIALIZED! @@ -232,16 +232,16 @@ private function initRelatedCollection($entity, $class, $fieldName, $parentDqlAl */ private function getEntity(array $data, $dqlAlias) { - $className = $this->_rsm->aliasMap[$dqlAlias]; + $className = $this->rsm->aliasMap[$dqlAlias]; - if (isset($this->_rsm->discriminatorColumns[$dqlAlias])) { - $fieldName = $this->_rsm->discriminatorColumns[$dqlAlias]; + if (isset($this->rsm->discriminatorColumns[$dqlAlias])) { + $fieldName = $this->rsm->discriminatorColumns[$dqlAlias]; - if ( ! isset($this->_rsm->metaMappings[$fieldName])) { + if ( ! isset($this->rsm->metaMappings[$fieldName])) { throw HydrationException::missingDiscriminatorMetaMappingColumn($className, $fieldName, $dqlAlias); } - $discrColumn = $this->_rsm->metaMappings[$fieldName]; + $discrColumn = $this->rsm->metaMappings[$fieldName]; if ( ! isset($data[$discrColumn])) { throw HydrationException::missingDiscriminatorColumn($className, $discrColumn, $dqlAlias); @@ -251,7 +251,7 @@ private function getEntity(array $data, $dqlAlias) throw HydrationException::emptyDiscriminatorValue($dqlAlias); } - $discrMap = $this->_metadataCache[$className]->discriminatorMap; + $discrMap = $this->metadataCache[$className]->discriminatorMap; $discriminatorValue = (string) $data[$discrColumn]; if ( ! isset($discrMap[$discriminatorValue])) { @@ -263,13 +263,13 @@ private function getEntity(array $data, $dqlAlias) unset($data[$discrColumn]); } - if (isset($this->_hints[Query::HINT_REFRESH_ENTITY]) && isset($this->rootAliases[$dqlAlias])) { - $this->registerManaged($this->_metadataCache[$className], $this->_hints[Query::HINT_REFRESH_ENTITY], $data); + if (isset($this->hints[Query::HINT_REFRESH_ENTITY]) && isset($this->rootAliases[$dqlAlias])) { + $this->registerManaged($this->metadataCache[$className], $this->hints[Query::HINT_REFRESH_ENTITY], $data); } - $this->_hints['fetchAlias'] = $dqlAlias; + $this->hints['fetchAlias'] = $dqlAlias; - return $this->_uow->createEntity($className, $data, $this->_hints); + return $this->uow->createEntity($className, $data, $this->hints); } /** @@ -284,7 +284,7 @@ private function getEntityFromIdentityMap($className, array $data) // ObjectHydrator::getEntityFromIdentityMap and UnitOfWork::createEntity(). // $id = $this->identifierFlattener->flattenIdentifier($class, $data); /* @var ClassMetadata $class */ - $class = $this->_metadataCache[$className]; + $class = $this->metadataCache[$className]; $id = []; foreach ($class->identifier as $fieldName) { @@ -300,7 +300,7 @@ private function getEntityFromIdentityMap($className, array $data) $id[$fieldName] = $data[$joinColumn->getColumnName()]; } - return $this->_uow->tryGetByIdHash(implode(' ', $id), $class->rootEntityName); + return $this->uow->tryGetByIdHash(implode(' ', $id), $class->rootEntityName); } /** @@ -338,12 +338,12 @@ protected function hydrateRowData(array $row, array &$result) // Hydrate the data chunks foreach ($rowData['data'] as $dqlAlias => $data) { - $entityName = $this->_rsm->aliasMap[$dqlAlias]; + $entityName = $this->rsm->aliasMap[$dqlAlias]; - if (isset($this->_rsm->parentAliasMap[$dqlAlias])) { + if (isset($this->rsm->parentAliasMap[$dqlAlias])) { // It's a joined result - $parentAlias = $this->_rsm->parentAliasMap[$dqlAlias]; + $parentAlias = $this->rsm->parentAliasMap[$dqlAlias]; // we need the $path to save into the identifier map which entities were already // seen for this parent-child relationship $path = $parentAlias . '.' . $dqlAlias; @@ -354,13 +354,13 @@ protected function hydrateRowData(array $row, array &$result) continue; } - $parentClass = $this->_metadataCache[$this->_rsm->aliasMap[$parentAlias]]; - $relationField = $this->_rsm->relationMap[$dqlAlias]; + $parentClass = $this->metadataCache[$this->rsm->aliasMap[$parentAlias]]; + $relationField = $this->rsm->relationMap[$dqlAlias]; $relation = $parentClass->associationMappings[$relationField]; $reflField = $parentClass->reflFields[$relationField]; // Get a reference to the parent object to which the joined element belongs. - if ($this->_rsm->isMixed && isset($this->rootAliases[$parentAlias])) { + if ($this->rsm->isMixed && isset($this->rootAliases[$parentAlias])) { $objectClass = $this->resultPointers[$parentAlias]; $parentObject = $objectClass[key($objectClass)]; } else if (isset($this->resultPointers[$parentAlias])) { @@ -374,7 +374,7 @@ protected function hydrateRowData(array $row, array &$result) $rowData['data'][$parentAlias][$relationField] = $element; // Mark as not-fetched again - unset($this->_hints['fetched'][$parentAlias][$relationField]); + unset($this->hints['fetched'][$parentAlias][$relationField]); continue; } @@ -408,8 +408,8 @@ protected function hydrateRowData(array $row, array &$result) } else { $element = $this->getEntity($data, $dqlAlias); - if (isset($this->_rsm->indexByMap[$dqlAlias])) { - $indexValue = $row[$this->_rsm->indexByMap[$dqlAlias]]; + if (isset($this->rsm->indexByMap[$dqlAlias])) { + $indexValue = $row[$this->rsm->indexByMap[$dqlAlias]]; $reflFieldValue->hydrateSet($indexValue, $element); $this->identifierMap[$path][$id[$parentAlias]][$id[$dqlAlias]] = $indexValue; } else { @@ -434,14 +434,14 @@ protected function hydrateRowData(array $row, array &$result) // PATH B: Single-valued association $reflFieldValue = $reflField->getValue($parentObject); - if ( ! $reflFieldValue || isset($this->_hints[Query::HINT_REFRESH]) || ($reflFieldValue instanceof Proxy && !$reflFieldValue->__isInitialized__)) { + if ( ! $reflFieldValue || isset($this->hints[Query::HINT_REFRESH]) || ($reflFieldValue instanceof Proxy && !$reflFieldValue->__isInitialized__)) { // we only need to take action if this value is null, // we refresh the entity or its an uninitialized proxy. if (isset($nonemptyComponents[$dqlAlias])) { $element = $this->getEntity($data, $dqlAlias); $reflField->setValue($parentObject, $element); - $this->_uow->setOriginalEntityProperty($oid, $relationField, $element); - $targetClass = $this->_metadataCache[$relation['targetEntity']]; + $this->uow->setOriginalEntityProperty($oid, $relationField, $element); + $targetClass = $this->metadataCache[$relation['targetEntity']]; if ($relation['isOwningSide']) { // TODO: Just check hints['fetched'] here? @@ -450,7 +450,7 @@ protected function hydrateRowData(array $row, array &$result) $inverseAssoc = $targetClass->associationMappings[$relation['inversedBy']]; if ($inverseAssoc['type'] & ClassMetadata::TO_ONE) { $targetClass->reflFields[$inverseAssoc['fieldName']]->setValue($element, $parentObject); - $this->_uow->setOriginalEntityProperty(spl_object_hash($element), $inverseAssoc['fieldName'], $parentObject); + $this->uow->setOriginalEntityProperty(spl_object_hash($element), $inverseAssoc['fieldName'], $parentObject); } } else if ($parentClass === $targetClass && $relation['mappedBy']) { // Special case: bi-directional self-referencing one-one on the same class @@ -459,12 +459,12 @@ protected function hydrateRowData(array $row, array &$result) } else { // For sure bidirectional, as there is no inverse side in unidirectional mappings $targetClass->reflFields[$relation['mappedBy']]->setValue($element, $parentObject); - $this->_uow->setOriginalEntityProperty(spl_object_hash($element), $relation['mappedBy'], $parentObject); + $this->uow->setOriginalEntityProperty(spl_object_hash($element), $relation['mappedBy'], $parentObject); } // Update result pointer $this->resultPointers[$dqlAlias] = $element; } else { - $this->_uow->setOriginalEntityProperty($oid, $relationField, null); + $this->uow->setOriginalEntityProperty($oid, $relationField, null); $reflField->setValue($parentObject, null); } // else leave $reflFieldValue null for single-valued associations @@ -476,11 +476,11 @@ protected function hydrateRowData(array $row, array &$result) } else { // PATH C: Its a root result element $this->rootAliases[$dqlAlias] = true; // Mark as root alias - $entityKey = $this->_rsm->entityMappings[$dqlAlias] ?: 0; + $entityKey = $this->rsm->entityMappings[$dqlAlias] ?: 0; // if this row has a NULL value for the root result id then make it a null result. if ( ! isset($nonemptyComponents[$dqlAlias]) ) { - if ($this->_rsm->isMixed) { + if ($this->rsm->isMixed) { $result[] = [$entityKey => null]; } else { $result[] = null; @@ -494,15 +494,15 @@ protected function hydrateRowData(array $row, array &$result) if ( ! isset($this->identifierMap[$dqlAlias][$id[$dqlAlias]])) { $element = $this->getEntity($data, $dqlAlias); - if ($this->_rsm->isMixed) { + if ($this->rsm->isMixed) { $element = [$entityKey => $element]; } - if (isset($this->_rsm->indexByMap[$dqlAlias])) { - $resultKey = $row[$this->_rsm->indexByMap[$dqlAlias]]; + if (isset($this->rsm->indexByMap[$dqlAlias])) { + $resultKey = $row[$this->rsm->indexByMap[$dqlAlias]]; - if (isset($this->_hints['collection'])) { - $this->_hints['collection']->hydrateSet($resultKey, $element); + if (isset($this->hints['collection'])) { + $this->hints['collection']->hydrateSet($resultKey, $element); } $result[$resultKey] = $element; @@ -510,8 +510,8 @@ protected function hydrateRowData(array $row, array &$result) $resultKey = $this->resultCounter; ++$this->resultCounter; - if (isset($this->_hints['collection'])) { - $this->_hints['collection']->hydrateAdd($element); + if (isset($this->hints['collection'])) { + $this->hints['collection']->hydrateAdd($element); } $result[] = $element; @@ -530,8 +530,8 @@ protected function hydrateRowData(array $row, array &$result) } } - if (isset($this->_hints[Query::HINT_INTERNAL_ITERATION]) && $this->_hints[Query::HINT_INTERNAL_ITERATION]) { - $this->_uow->hydrationComplete(); + if (isset($this->hints[Query::HINT_INTERNAL_ITERATION]) && $this->hints[Query::HINT_INTERNAL_ITERATION]) { + $this->uow->hydrationComplete(); } } @@ -542,8 +542,8 @@ protected function hydrateRowData(array $row, array &$result) // Append scalar values to mixed result sets if (isset($rowData['scalars'])) { if ( ! isset($resultKey) ) { - $resultKey = (isset($this->_rsm->indexByMap['scalars'])) - ? $row[$this->_rsm->indexByMap['scalars']] + $resultKey = (isset($this->rsm->indexByMap['scalars'])) + ? $row[$this->rsm->indexByMap['scalars']] : $this->resultCounter - 1; } diff --git a/lib/Doctrine/ORM/Internal/Hydration/ScalarHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ScalarHydrator.php index 093e89c4e13..eae7f144913 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ScalarHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ScalarHydrator.php @@ -37,7 +37,7 @@ protected function hydrateAllData() { $result = []; - while ($data = $this->_stmt->fetch(\PDO::FETCH_ASSOC)) { + while ($data = $this->stmt->fetch(\PDO::FETCH_ASSOC)) { $this->hydrateRowData($data, $result); } diff --git a/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php index 9c76c4fdfc6..d2855bd8819 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php @@ -36,15 +36,15 @@ class SimpleObjectHydrator extends AbstractHydrator */ protected function prepare() { - if (count($this->_rsm->aliasMap) !== 1) { + if (count($this->rsm->aliasMap) !== 1) { throw new \RuntimeException("Cannot use SimpleObjectHydrator with a ResultSetMapping that contains more than one object result."); } - if ($this->_rsm->scalarMappings) { + if ($this->rsm->scalarMappings) { throw new \RuntimeException("Cannot use SimpleObjectHydrator with a ResultSetMapping that contains scalar mappings."); } - $this->class = $this->getClassMetadata(reset($this->_rsm->aliasMap)); + $this->class = $this->getClassMetadata(reset($this->rsm->aliasMap)); } /** @@ -54,8 +54,8 @@ protected function cleanup() { parent::cleanup(); - $this->_uow->triggerEagerLoads(); - $this->_uow->hydrationComplete(); + $this->uow->triggerEagerLoads(); + $this->uow->hydrationComplete(); } /** @@ -65,11 +65,11 @@ protected function hydrateAllData() { $result = []; - while ($row = $this->_stmt->fetch(PDO::FETCH_ASSOC)) { + while ($row = $this->stmt->fetch(PDO::FETCH_ASSOC)) { $this->hydrateRowData($row, $result); } - $this->_em->getUnitOfWork()->triggerEagerLoads(); + $this->em->getUnitOfWork()->triggerEagerLoads(); return $result; } @@ -84,19 +84,19 @@ protected function hydrateRowData(array $sqlResult, array &$result) // We need to find the correct entity class name if we have inheritance in resultset if ($this->class->inheritanceType !== InheritanceType::NONE) { - $discrColumnName = $this->_platform->getSQLResultCasing($this->class->discriminatorColumn->getColumnName()); + $discrColumnName = $this->platform->getSQLResultCasing($this->class->discriminatorColumn->getColumnName()); // Find mapped discriminator column from the result set. - if ($metaMappingDiscrColumnName = array_search($discrColumnName, $this->_rsm->metaMappings)) { + if ($metaMappingDiscrColumnName = array_search($discrColumnName, $this->rsm->metaMappings)) { $discrColumnName = $metaMappingDiscrColumnName; } if ( ! isset($sqlResult[$discrColumnName])) { - throw HydrationException::missingDiscriminatorColumn($entityName, $discrColumnName, key($this->_rsm->aliasMap)); + throw HydrationException::missingDiscriminatorColumn($entityName, $discrColumnName, key($this->rsm->aliasMap)); } if ($sqlResult[$discrColumnName] === '') { - throw HydrationException::emptyDiscriminatorValue(key($this->_rsm->aliasMap)); + throw HydrationException::emptyDiscriminatorValue(key($this->rsm->aliasMap)); } $discrMap = $this->class->discriminatorMap; @@ -112,7 +112,7 @@ protected function hydrateRowData(array $sqlResult, array &$result) foreach ($sqlResult as $column => $value) { // An ObjectHydrator should be used instead of SimpleObjectHydrator - if (isset($this->_rsm->relationMap[$column])) { + if (isset($this->rsm->relationMap[$column])) { throw new \Exception(sprintf('Unable to retrieve association information for column "%s"', $column)); } @@ -128,7 +128,7 @@ protected function hydrateRowData(array $sqlResult, array &$result) // Convert field to a valid PHP value if (isset($cacheKeyInfo['type'])) { $type = $cacheKeyInfo['type']; - $value = $type->convertToPHPValue($value, $this->_platform); + $value = $type->convertToPHPValue($value, $this->platform); } $fieldName = $cacheKeyInfo['fieldName']; @@ -139,17 +139,17 @@ protected function hydrateRowData(array $sqlResult, array &$result) } } - if (isset($this->_hints[Query::HINT_REFRESH_ENTITY])) { - $this->registerManaged($this->class, $this->_hints[Query::HINT_REFRESH_ENTITY], $data); + if (isset($this->hints[Query::HINT_REFRESH_ENTITY])) { + $this->registerManaged($this->class, $this->hints[Query::HINT_REFRESH_ENTITY], $data); } - $uow = $this->_em->getUnitOfWork(); - $entity = $uow->createEntity($entityName, $data, $this->_hints); + $uow = $this->em->getUnitOfWork(); + $entity = $uow->createEntity($entityName, $data, $this->hints); $result[] = $entity; - if (isset($this->_hints[Query::HINT_INTERNAL_ITERATION]) && $this->_hints[Query::HINT_INTERNAL_ITERATION]) { - $this->_uow->hydrationComplete(); + if (isset($this->hints[Query::HINT_INTERNAL_ITERATION]) && $this->hints[Query::HINT_INTERNAL_ITERATION]) { + $this->uow->hydrationComplete(); } } } diff --git a/lib/Doctrine/ORM/Internal/Hydration/SingleScalarHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/SingleScalarHydrator.php index b9caeb11b83..b165cee36b1 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/SingleScalarHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/SingleScalarHydrator.php @@ -36,7 +36,7 @@ class SingleScalarHydrator extends AbstractHydrator */ protected function hydrateAllData() { - $data = $this->_stmt->fetchAll(\PDO::FETCH_ASSOC); + $data = $this->stmt->fetchAll(\PDO::FETCH_ASSOC); $numRows = count($data); if ($numRows === 0) { diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index 87e8781895e..f1285c50031 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -51,7 +51,7 @@ class DatabaseDriver implements MappingDriver /** * @var AbstractSchemaManager */ - private $_sm; + private $sm; /** * @var array|null @@ -90,7 +90,7 @@ class DatabaseDriver implements MappingDriver */ public function __construct(AbstractSchemaManager $schemaManager) { - $this->_sm = $schemaManager; + $this->sm = $schemaManager; } /** @@ -277,14 +277,14 @@ private function reverseEngineerMappingFromDatabase() $tables = []; - foreach ($this->_sm->listTableNames() as $tableName) { - $tables[$tableName] = $this->_sm->listTableDetails($tableName); + foreach ($this->sm->listTableNames() as $tableName) { + $tables[$tableName] = $this->sm->listTableDetails($tableName); } $this->tables = $this->manyToManyTables = $this->classToTableNames = []; foreach ($tables as $tableName => $table) { - $foreignKeys = ($this->_sm->getDatabasePlatform()->supportsForeignKeyConstraints()) + $foreignKeys = ($this->sm->getDatabasePlatform()->supportsForeignKeyConstraints()) ? $table->getForeignKeys() : []; @@ -508,7 +508,7 @@ private function buildToOneAssociationMappings(ClassMetadata $metadata) */ private function getTableForeignKeys(Table $table) { - return ($this->_sm->getDatabasePlatform()->supportsForeignKeyConstraints()) + return ($this->sm->getDatabasePlatform()->supportsForeignKeyConstraints()) ? $table->getForeignKeys() : []; } diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 55f074ee731..6723196ef6b 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -393,7 +393,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } if (isset($oneToOneElement->cascade)) { - $mapping['cascade'] = $this->_getCascadeMappings($oneToOneElement->cascade); + $mapping['cascade'] = $this->getCascadeMappings($oneToOneElement->cascade); } if (isset($oneToOneElement['orphan-removal'])) { @@ -423,7 +423,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } if (isset($oneToManyElement->cascade)) { - $mapping['cascade'] = $this->_getCascadeMappings($oneToManyElement->cascade); + $mapping['cascade'] = $this->getCascadeMappings($oneToManyElement->cascade); } if (isset($oneToManyElement['orphan-removal'])) { @@ -486,7 +486,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $mapping['joinColumns'] = $joinColumns; if (isset($manyToOneElement->cascade)) { - $mapping['cascade'] = $this->_getCascadeMappings($manyToOneElement->cascade); + $mapping['cascade'] = $this->getCascadeMappings($manyToOneElement->cascade); } // Evaluate second level cache @@ -553,7 +553,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } if (isset($manyToManyElement->cascade)) { - $mapping['cascade'] = $this->_getCascadeMappings($manyToManyElement->cascade); + $mapping['cascade'] = $this->getCascadeMappings($manyToManyElement->cascade); } if (isset($manyToManyElement->{'order-by'})) { @@ -847,7 +847,7 @@ private function cacheToArray(SimpleXMLElement $cacheMapping) * * @return array The list of cascade options. */ - private function _getCascadeMappings(SimpleXMLElement $cascadeElement) + private function getCascadeMappings(SimpleXMLElement $cascadeElement) { $cascades = []; diff --git a/lib/Doctrine/ORM/NativeQuery.php b/lib/Doctrine/ORM/NativeQuery.php index ddc5418d672..e99584c8186 100644 --- a/lib/Doctrine/ORM/NativeQuery.php +++ b/lib/Doctrine/ORM/NativeQuery.php @@ -30,7 +30,7 @@ final class NativeQuery extends AbstractQuery /** * @var string */ - private $_sql; + private $sql; /** * Sets the SQL of the query. @@ -41,7 +41,7 @@ final class NativeQuery extends AbstractQuery */ public function setSQL($sql) { - $this->_sql = $sql; + $this->sql = $sql; return $this; } @@ -55,13 +55,13 @@ public function setSQL($sql) */ public function getSQL() { - return $this->_sql; + return $this->sql; } /** * {@inheritdoc} */ - protected function _doExecute() + protected function doExecute() { $parameters = []; $types = []; @@ -85,8 +85,8 @@ protected function _doExecute() $types = array_values($types); } - return $this->_em->getConnection()->executeQuery( - $this->_sql, $parameters, $types, $this->_queryCacheProfile + return $this->em->getConnection()->executeQuery( + $this->sql, $parameters, $types, $this->queryCacheProfile ); } } diff --git a/lib/Doctrine/ORM/Query.php b/lib/Doctrine/ORM/Query.php index 385b8c8ea6b..bba99d544d7 100644 --- a/lib/Doctrine/ORM/Query.php +++ b/lib/Doctrine/ORM/Query.php @@ -129,70 +129,70 @@ final class Query extends AbstractQuery * * @var integer */ - private $_state = self::STATE_CLEAN; + private $state = self::STATE_CLEAN; /** * A snapshot of the parameter types the query was parsed with. * * @var array */ - private $_parsedTypes = []; + private $parsedTypes = []; /** * Cached DQL query. * * @var string */ - private $_dql = null; + private $dql = null; /** * The parser result that holds DQL => SQL information. * * @var \Doctrine\ORM\Query\ParserResult */ - private $_parserResult; + private $parserResult; /** * The first result to return (the "offset"). * * @var integer */ - private $_firstResult = null; + private $firstResult = null; /** * The maximum number of results to return (the "limit"). * * @var integer */ - private $_maxResults = null; + private $maxResults = null; /** * The cache driver used for caching queries. * * @var \Doctrine\Common\Cache\Cache|null */ - private $_queryCache; + private $queryCache; /** * Whether or not expire the query cache. * * @var boolean */ - private $_expireQueryCache = false; + private $expireQueryCache = false; /** * The query cache lifetime. * * @var int */ - private $_queryCacheTTL; + private $queryCacheTTL; /** * Whether to use a query cache, if available. Defaults to TRUE. * * @var boolean */ - private $_useQueryCache = true; + private $useQueryCache = true; /** * Gets the SQL query/queries that correspond to this DQL query. @@ -203,7 +203,7 @@ final class Query extends AbstractQuery */ public function getSQL() { - return $this->_parse()->getSqlExecutor()->getSqlStatements(); + return $this->parse()->getSQLExecutor()->getSQLStatements(); } /** @@ -226,21 +226,21 @@ public function getAST() protected function getResultSetMapping() { // parse query or load from cache - if ($this->_resultSetMapping === null) { - $this->_resultSetMapping = $this->_parse()->getResultSetMapping(); + if ($this->resultSetMapping === null) { + $this->resultSetMapping = $this->parse()->getResultSetMapping(); } - return $this->_resultSetMapping; + return $this->resultSetMapping; } /** * Parses the DQL query, if necessary, and stores the parser result. * - * Note: Populates $this->_parserResult as a side-effect. + * Note: Populates $this->parserResult as a side-effect. * * @return \Doctrine\ORM\Query\ParserResult */ - private function _parse() + private function parse() { $types = []; @@ -250,61 +250,61 @@ private function _parse() } // Return previous parser result if the query and the filter collection are both clean - if ($this->_state === self::STATE_CLEAN && $this->_parsedTypes === $types && $this->_em->isFiltersStateClean()) { - return $this->_parserResult; + if ($this->state === self::STATE_CLEAN && $this->parsedTypes === $types && $this->em->isFiltersStateClean()) { + return $this->parserResult; } - $this->_state = self::STATE_CLEAN; - $this->_parsedTypes = $types; + $this->state = self::STATE_CLEAN; + $this->parsedTypes = $types; // Check query cache. - if ( ! ($this->_useQueryCache && ($queryCache = $this->getQueryCacheDriver()))) { + if ( ! ($this->useQueryCache && ($queryCache = $this->getQueryCacheDriver()))) { $parser = new Parser($this); - $this->_parserResult = $parser->parse(); + $this->parserResult = $parser->parse(); - return $this->_parserResult; + return $this->parserResult; } - $hash = $this->_getQueryCacheId(); - $cached = $this->_expireQueryCache ? false : $queryCache->fetch($hash); + $hash = $this->getQueryCacheId(); + $cached = $this->expireQueryCache ? false : $queryCache->fetch($hash); if ($cached instanceof ParserResult) { // Cache hit. - $this->_parserResult = $cached; + $this->parserResult = $cached; - return $this->_parserResult; + return $this->parserResult; } // Cache miss. $parser = new Parser($this); - $this->_parserResult = $parser->parse(); + $this->parserResult = $parser->parse(); - $queryCache->save($hash, $this->_parserResult, $this->_queryCacheTTL); + $queryCache->save($hash, $this->parserResult, $this->queryCacheTTL); - return $this->_parserResult; + return $this->parserResult; } /** * {@inheritdoc} */ - protected function _doExecute() + protected function doExecute() { - $executor = $this->_parse()->getSqlExecutor(); + $executor = $this->parse()->getSqlExecutor(); - if ($this->_queryCacheProfile) { - $executor->setQueryCacheProfile($this->_queryCacheProfile); + if ($this->queryCacheProfile) { + $executor->setQueryCacheProfile($this->queryCacheProfile); } else { $executor->removeQueryCacheProfile(); } - if ($this->_resultSetMapping === null) { - $this->_resultSetMapping = $this->_parserResult->getResultSetMapping(); + if ($this->resultSetMapping === null) { + $this->resultSetMapping = $this->parserResult->getResultSetMapping(); } // Prepare parameters - $paramMappings = $this->_parserResult->getParameterMappings(); + $paramMappings = $this->parserResult->getParameterMappings(); $paramCount = count($this->parameters); $mappingCount = count($paramMappings); @@ -317,7 +317,7 @@ protected function _doExecute() } // evict all cache for the entity region - if ($this->hasCache && isset($this->_hints[self::HINT_CACHE_EVICT]) && $this->_hints[self::HINT_CACHE_EVICT]) { + if ($this->hasCache && isset($this->hints[self::HINT_CACHE_EVICT]) && $this->hints[self::HINT_CACHE_EVICT]) { $this->evictEntityCacheRegion(); } @@ -327,10 +327,10 @@ protected function _doExecute() $executor, $sqlParams, $types, - $this->_em->getConnection()->getParams() + $this->em->getConnection()->getParams() ); - return $executor->execute($this->_em->getConnection(), $sqlParams, $types); + return $executor->execute($this->em->getConnection(), $sqlParams, $types); } private function evictResultSetCache( @@ -368,7 +368,7 @@ private function evictEntityCacheRegion() ? $AST->deleteClause->abstractSchemaName : $AST->updateClause->abstractSchemaName; - $this->_em->getCache()->evictEntityRegion($className); + $this->em->getCache()->evictEntityRegion($className); } /** @@ -443,7 +443,7 @@ private function processParameterMappings($paramMappings) */ public function setQueryCacheDriver($queryCache) { - $this->_queryCache = $queryCache; + $this->queryCache = $queryCache; return $this; } @@ -457,7 +457,7 @@ public function setQueryCacheDriver($queryCache) */ public function useQueryCache($bool) { - $this->_useQueryCache = $bool; + $this->useQueryCache = $bool; return $this; } @@ -470,11 +470,11 @@ public function useQueryCache($bool) */ public function getQueryCacheDriver() { - if ($this->_queryCache) { - return $this->_queryCache; + if ($this->queryCache) { + return $this->queryCache; } - return $this->_em->getConfiguration()->getQueryCacheImpl(); + return $this->em->getConfiguration()->getQueryCacheImpl(); } /** @@ -490,7 +490,7 @@ public function setQueryCacheLifetime($timeToLive) $timeToLive = (int) $timeToLive; } - $this->_queryCacheTTL = $timeToLive; + $this->queryCacheTTL = $timeToLive; return $this; } @@ -502,7 +502,7 @@ public function setQueryCacheLifetime($timeToLive) */ public function getQueryCacheLifetime() { - return $this->_queryCacheTTL; + return $this->queryCacheTTL; } /** @@ -514,7 +514,7 @@ public function getQueryCacheLifetime() */ public function expireQueryCache($expire = true) { - $this->_expireQueryCache = $expire; + $this->expireQueryCache = $expire; return $this; } @@ -526,7 +526,7 @@ public function expireQueryCache($expire = true) */ public function getExpireQueryCache() { - return $this->_expireQueryCache; + return $this->expireQueryCache; } /** @@ -536,8 +536,8 @@ public function free() { parent::free(); - $this->_dql = null; - $this->_state = self::STATE_CLEAN; + $this->dql = null; + $this->state = self::STATE_CLEAN; } /** @@ -550,8 +550,8 @@ public function free() public function setDQL($dqlQuery) { if ($dqlQuery !== null) { - $this->_dql = $dqlQuery; - $this->_state = self::STATE_DIRTY; + $this->dql = $dqlQuery; + $this->state = self::STATE_DIRTY; } return $this; @@ -564,7 +564,7 @@ public function setDQL($dqlQuery) */ public function getDQL() { - return $this->_dql; + return $this->dql; } /** @@ -579,7 +579,7 @@ public function getDQL() */ public function getState() { - return $this->_state; + return $this->state; } /** @@ -603,8 +603,8 @@ public function contains($dql) */ public function setFirstResult($firstResult) { - $this->_firstResult = $firstResult; - $this->_state = self::STATE_DIRTY; + $this->firstResult = $firstResult; + $this->state = self::STATE_DIRTY; return $this; } @@ -617,7 +617,7 @@ public function setFirstResult($firstResult) */ public function getFirstResult() { - return $this->_firstResult; + return $this->firstResult; } /** @@ -629,8 +629,8 @@ public function getFirstResult() */ public function setMaxResults($maxResults) { - $this->_maxResults = $maxResults; - $this->_state = self::STATE_DIRTY; + $this->maxResults = $maxResults; + $this->state = self::STATE_DIRTY; return $this; } @@ -643,7 +643,7 @@ public function setMaxResults($maxResults) */ public function getMaxResults() { - return $this->_maxResults; + return $this->maxResults; } /** @@ -667,7 +667,7 @@ public function iterate($parameters = null, $hydrationMode = self::HYDRATE_OBJEC */ public function setHint($name, $value) { - $this->_state = self::STATE_DIRTY; + $this->state = self::STATE_DIRTY; return parent::setHint($name, $value); } @@ -677,7 +677,7 @@ public function setHint($name, $value) */ public function setHydrationMode($hydrationMode) { - $this->_state = self::STATE_DIRTY; + $this->state = self::STATE_DIRTY; return parent::setHydrationMode($hydrationMode); } @@ -696,7 +696,7 @@ public function setHydrationMode($hydrationMode) public function setLockMode($lockMode) { if (in_array($lockMode, [LockMode::NONE, LockMode::PESSIMISTIC_READ, LockMode::PESSIMISTIC_WRITE], true)) { - if ( ! $this->_em->getConnection()->isTransactionActive()) { + if ( ! $this->em->getConnection()->isTransactionActive()) { throw TransactionRequiredException::transactionRequired(); } } @@ -727,9 +727,9 @@ public function getLockMode() * * @return string */ - protected function _getQueryCacheId() + protected function getQueryCacheId() { - ksort($this->_hints); + ksort($this->hints); $platform = $this->getEntityManager() ->getConnection() @@ -737,11 +737,11 @@ protected function _getQueryCacheId() ->getName(); return md5( - $this->getDQL() . serialize($this->_hints) . + $this->getDQL() . serialize($this->hints) . '&platform=' . $platform . - ($this->_em->hasFilters() ? $this->_em->getFilters()->getHash() : '') . - '&firstResult=' . $this->_firstResult . '&maxResult=' . $this->_maxResults . - '&hydrationMode=' . $this->_hydrationMode . '&types=' . serialize($this->_parsedTypes) . 'DOCTRINE_QUERY_CACHE_SALT' + ($this->em->hasFilters() ? $this->em->getFilters()->getHash() : '') . + '&firstResult=' . $this->firstResult . '&maxResult=' . $this->maxResults . + '&hydrationMode=' . $this->hydrationMode . '&types=' . serialize($this->parsedTypes) . 'DOCTRINE_QUERY_CACHE_SALT' ); } @@ -750,7 +750,7 @@ protected function _getQueryCacheId() */ protected function getHash() { - return sha1(parent::getHash(). '-'. $this->_firstResult . '-' . $this->_maxResults); + return sha1(parent::getHash(). '-'. $this->firstResult . '-' . $this->maxResults); } /** @@ -762,6 +762,6 @@ public function __clone() { parent::__clone(); - $this->_state = self::STATE_DIRTY; + $this->state = self::STATE_DIRTY; } } diff --git a/lib/Doctrine/ORM/Query/Exec/AbstractSqlExecutor.php b/lib/Doctrine/ORM/Query/Exec/AbstractSqlExecutor.php index 8955b9215d5..ec932057fa4 100644 --- a/lib/Doctrine/ORM/Query/Exec/AbstractSqlExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/AbstractSqlExecutor.php @@ -36,7 +36,7 @@ abstract class AbstractSqlExecutor /** * @var array */ - protected $_sqlStatements; + protected $sqlStatements; /** * @var QueryCacheProfile @@ -50,7 +50,7 @@ abstract class AbstractSqlExecutor */ public function getSqlStatements() { - return $this->_sqlStatements; + return $this->sqlStatements; } /** diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php index 28edc19c2e6..b4ce50fcf2a 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php @@ -38,17 +38,17 @@ class MultiTableDeleteExecutor extends AbstractSqlExecutor /** * @var string */ - private $_createTempTableSql; + private $createTempTableSql; /** * @var string */ - private $_dropTempTableSql; + private $dropTempTableSql; /** * @var string */ - private $_insertSql; + private $insertSql; /** * Initializes a new MultiTableDeleteExecutor. @@ -77,16 +77,16 @@ public function __construct(AST\Node $AST, $sqlWalker) // 1. Create an INSERT INTO temptable ... SELECT identifiers WHERE $AST->getWhereClause() $sqlWalker->setSQLTableAlias($primaryClass->getTableName(), 't0', $primaryDqlAlias); - $this->_insertSql = 'INSERT INTO ' . $tempTable . ' (' . $idColumnNameList . ')' + $this->insertSql = 'INSERT INTO ' . $tempTable . ' (' . $idColumnNameList . ')' . ' SELECT t0.' . implode(', t0.', array_keys($idColumns)); $rangeDecl = new AST\RangeVariableDeclaration($primaryClass->name, $primaryDqlAlias); $fromClause = new AST\FromClause([new AST\IdentificationVariableDeclaration($rangeDecl, null, [])]); - $this->_insertSql .= $sqlWalker->walkFromClause($fromClause); + $this->insertSql .= $sqlWalker->walkFromClause($fromClause); // Append WHERE clause, if there is one. if ($AST->whereClause) { - $this->_insertSql .= $sqlWalker->walkWhereClause($AST->whereClause); + $this->insertSql .= $sqlWalker->walkWhereClause($AST->whereClause); } // 2. Create ID subselect statement used in DELETE ... WHERE ... IN (subselect) @@ -99,7 +99,7 @@ public function __construct(AST\Node $AST, $sqlWalker) $parentClass = $em->getClassMetadata($className); $tableName = $parentClass->table->getQuotedQualifiedName($platform); - $this->_sqlStatements[] = 'DELETE FROM ' . $tableName + $this->sqlStatements[] = 'DELETE FROM ' . $tableName . ' WHERE (' . $idColumnNameList . ') IN (' . $idSubselect . ')'; } @@ -118,9 +118,9 @@ public function __construct(AST\Node $AST, $sqlWalker) ]; } - $this->_createTempTableSql = $platform->getCreateTemporaryTableSnippetSQL() . ' ' . $tempTable . ' (' + $this->createTempTableSql = $platform->getCreateTemporaryTableSnippetSQL() . ' ' . $tempTable . ' (' . $platform->getColumnDeclarationListSQL($columnDefinitions) . ')'; - $this->_dropTempTableSql = $platform->getDropTemporaryTableSQL($tempTable); + $this->dropTempTableSql = $platform->getDropTemporaryTableSQL($tempTable); } /** @@ -129,26 +129,26 @@ public function __construct(AST\Node $AST, $sqlWalker) public function execute(Connection $conn, array $params, array $types) { // Create temporary id table - $conn->executeUpdate($this->_createTempTableSql); + $conn->executeUpdate($this->createTempTableSql); try { // Insert identifiers - $numDeleted = $conn->executeUpdate($this->_insertSql, $params, $types); + $numDeleted = $conn->executeUpdate($this->insertSql, $params, $types); // Execute DELETE statements - foreach ($this->_sqlStatements as $sql) { + foreach ($this->sqlStatements as $sql) { $conn->executeUpdate($sql); } } catch (\Exception $exception) { // FAILURE! Drop temporary table to avoid possible collisions - $conn->executeUpdate($this->_dropTempTableSql); + $conn->executeUpdate($this->dropTempTableSql); // Re-throw exception throw $exception; } // Drop temporary table - $conn->executeUpdate($this->_dropTempTableSql); + $conn->executeUpdate($this->dropTempTableSql); return $numDeleted; } diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php index 28c5683574b..98e627d3f82 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php @@ -37,27 +37,27 @@ class MultiTableUpdateExecutor extends AbstractSqlExecutor /** * @var string */ - private $_createTempTableSql; + private $createTempTableSql; /** * @var string */ - private $_dropTempTableSql; + private $dropTempTableSql; /** * @var string */ - private $_insertSql; + private $insertSql; /** * @var array */ - private $_sqlParameters = []; + private $sqlParameters = []; /** * @var int */ - private $_numParametersInUpdateClause = 0; + private $numParametersInUpdateClause = 0; /** * Initializes a new MultiTableUpdateExecutor. @@ -88,13 +88,13 @@ public function __construct(AST\Node $AST, $sqlWalker) // 1. Create an INSERT INTO temptable ... SELECT identifiers WHERE $AST->getWhereClause() $sqlWalker->setSQLTableAlias($primaryClass->getTableName(), 't0', $updateClause->aliasIdentificationVariable); - $this->_insertSql = 'INSERT INTO ' . $tempTable . ' (' . $idColumnNameList . ')' + $this->insertSql = 'INSERT INTO ' . $tempTable . ' (' . $idColumnNameList . ')' . ' SELECT t0.' . implode(', t0.', array_keys($idColumns)); $rangeDecl = new AST\RangeVariableDeclaration($primaryClass->name, $updateClause->aliasIdentificationVariable); $fromClause = new AST\FromClause([new AST\IdentificationVariableDeclaration($rangeDecl, null, [])]); - $this->_insertSql .= $sqlWalker->walkFromClause($fromClause); + $this->insertSql .= $sqlWalker->walkFromClause($fromClause); // 2. Create ID subselect statement used in UPDATE ... WHERE ... IN (subselect) $idSubselect = 'SELECT ' . $idColumnNameList . ' FROM ' . $tempTable; @@ -126,21 +126,21 @@ public function __construct(AST\Node $AST, $sqlWalker) $updateSql .= $sqlWalker->walkUpdateItem($updateItem); if ($newValue instanceof AST\InputParameter) { - $this->_sqlParameters[$i][] = $newValue->name; + $this->sqlParameters[$i][] = $newValue->name; - ++$this->_numParametersInUpdateClause; + ++$this->numParametersInUpdateClause; } } } if ($affected) { - $this->_sqlStatements[$i] = $updateSql . ' WHERE (' . $idColumnNameList . ') IN (' . $idSubselect . ')'; + $this->sqlStatements[$i] = $updateSql . ' WHERE (' . $idColumnNameList . ') IN (' . $idSubselect . ')'; } } // Append WHERE clause to insertSql, if there is one. if ($AST->whereClause) { - $this->_insertSql .= $sqlWalker->walkWhereClause($AST->whereClause); + $this->insertSql .= $sqlWalker->walkWhereClause($AST->whereClause); } // 4. Store DDL for temporary identifier table. @@ -158,10 +158,10 @@ public function __construct(AST\Node $AST, $sqlWalker) ]; } - $this->_createTempTableSql = $platform->getCreateTemporaryTableSnippetSQL() . ' ' . $tempTable . ' (' + $this->createTempTableSql = $platform->getCreateTemporaryTableSnippetSQL() . ' ' . $tempTable . ' (' . $platform->getColumnDeclarationListSQL($columnDefinitions) . ')'; - $this->_dropTempTableSql = $platform->getDropTemporaryTableSQL($tempTable); + $this->dropTempTableSql = $platform->getDropTemporaryTableSQL($tempTable); } /** @@ -170,23 +170,23 @@ public function __construct(AST\Node $AST, $sqlWalker) public function execute(Connection $conn, array $params, array $types) { // Create temporary id table - $conn->executeUpdate($this->_createTempTableSql); + $conn->executeUpdate($this->createTempTableSql); try { // Insert identifiers. Parameters from the update clause are cut off. $numUpdated = $conn->executeUpdate( - $this->_insertSql, - array_slice($params, $this->_numParametersInUpdateClause), - array_slice($types, $this->_numParametersInUpdateClause) + $this->insertSql, + array_slice($params, $this->numParametersInUpdateClause), + array_slice($types, $this->numParametersInUpdateClause) ); // Execute UPDATE statements - foreach ($this->_sqlStatements as $key => $statement) { + foreach ($this->sqlStatements as $key => $statement) { $paramValues = []; $paramTypes = []; - if (isset($this->_sqlParameters[$key])) { - foreach ($this->_sqlParameters[$key] as $parameterKey => $parameterName) { + if (isset($this->sqlParameters[$key])) { + foreach ($this->sqlParameters[$key] as $parameterKey => $parameterName) { $paramValues[] = $params[$parameterKey]; $paramTypes[] = isset($types[$parameterKey]) ? $types[$parameterKey] @@ -199,14 +199,14 @@ public function execute(Connection $conn, array $params, array $types) } } catch (\Exception $exception) { // FAILURE! Drop temporary table to avoid possible collisions - $conn->executeUpdate($this->_dropTempTableSql); + $conn->executeUpdate($this->dropTempTableSql); // Re-throw exception throw $exception; } // Drop temporary table - $conn->executeUpdate($this->_dropTempTableSql); + $conn->executeUpdate($this->dropTempTableSql); return $numUpdated; } diff --git a/lib/Doctrine/ORM/Query/Exec/SingleSelectExecutor.php b/lib/Doctrine/ORM/Query/Exec/SingleSelectExecutor.php index 91827ab1adc..1fb28d2b0bf 100644 --- a/lib/Doctrine/ORM/Query/Exec/SingleSelectExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/SingleSelectExecutor.php @@ -39,7 +39,7 @@ class SingleSelectExecutor extends AbstractSqlExecutor */ public function __construct(SelectStatement $AST, SqlWalker $sqlWalker) { - $this->_sqlStatements = $sqlWalker->walkSelectStatement($AST); + $this->sqlStatements = $sqlWalker->walkSelectStatement($AST); } /** @@ -47,6 +47,6 @@ public function __construct(SelectStatement $AST, SqlWalker $sqlWalker) */ public function execute(Connection $conn, array $params, array $types) { - return $conn->executeQuery($this->_sqlStatements, $params, $types, $this->queryCacheProfile); + return $conn->executeQuery($this->sqlStatements, $params, $types, $this->queryCacheProfile); } } diff --git a/lib/Doctrine/ORM/Query/Exec/SingleTableDeleteUpdateExecutor.php b/lib/Doctrine/ORM/Query/Exec/SingleTableDeleteUpdateExecutor.php index e0183dd6879..0ea373b27ae 100644 --- a/lib/Doctrine/ORM/Query/Exec/SingleTableDeleteUpdateExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/SingleTableDeleteUpdateExecutor.php @@ -41,9 +41,9 @@ class SingleTableDeleteUpdateExecutor extends AbstractSqlExecutor public function __construct(AST\Node $AST, $sqlWalker) { if ($AST instanceof AST\UpdateStatement) { - $this->_sqlStatements = $sqlWalker->walkUpdateStatement($AST); + $this->sqlStatements = $sqlWalker->walkUpdateStatement($AST); } else if ($AST instanceof AST\DeleteStatement) { - $this->_sqlStatements = $sqlWalker->walkDeleteStatement($AST); + $this->sqlStatements = $sqlWalker->walkDeleteStatement($AST); } } @@ -52,6 +52,6 @@ public function __construct(AST\Node $AST, $sqlWalker) */ public function execute(Connection $conn, array $params, array $types) { - return $conn->executeUpdate($this->_sqlStatements, $params, $types); + return $conn->executeUpdate($this->sqlStatements, $params, $types); } } diff --git a/lib/Doctrine/ORM/Query/Expr.php b/lib/Doctrine/ORM/Query/Expr.php index eada610580d..f60859456b5 100644 --- a/lib/Doctrine/ORM/Query/Expr.php +++ b/lib/Doctrine/ORM/Query/Expr.php @@ -445,7 +445,7 @@ public function in($x, $y) if (is_array($y)) { foreach ($y as &$literal) { if ( ! ($literal instanceof Expr\Literal)) { - $literal = $this->_quoteLiteral($literal); + $literal = $this->quoteLiteral($literal); } } } @@ -466,7 +466,7 @@ public function notIn($x, $y) if (is_array($y)) { foreach ($y as &$literal) { if ( ! ($literal instanceof Expr\Literal)) { - $literal = $this->_quoteLiteral($literal); + $literal = $this->quoteLiteral($literal); } } } @@ -601,7 +601,7 @@ public function length($x) */ public function literal($literal) { - return new Expr\Literal($this->_quoteLiteral($literal)); + return new Expr\Literal($this->quoteLiteral($literal)); } /** @@ -611,7 +611,7 @@ public function literal($literal) * * @return string */ - private function _quoteLiteral($literal) + private function quoteLiteral($literal) { if (is_numeric($literal) && !is_string($literal)) { return (string) $literal; diff --git a/lib/Doctrine/ORM/Query/ParserResult.php b/lib/Doctrine/ORM/Query/ParserResult.php index 84ad17822bc..8795f4d982d 100644 --- a/lib/Doctrine/ORM/Query/ParserResult.php +++ b/lib/Doctrine/ORM/Query/ParserResult.php @@ -37,21 +37,21 @@ class ParserResult * * @var \Doctrine\ORM\Query\Exec\AbstractSqlExecutor */ - private $_sqlExecutor; + private $sqlExecutor; /** * The ResultSetMapping that describes how to map the SQL result set. * * @var \Doctrine\ORM\Query\ResultSetMapping */ - private $_resultSetMapping; + private $resultSetMapping; /** * The mappings of DQL parameter names/positions to SQL parameter positions. * * @var array */ - private $_parameterMappings = []; + private $parameterMappings = []; /** * Initializes a new instance of the ParserResult class. @@ -59,7 +59,7 @@ class ParserResult */ public function __construct() { - $this->_resultSetMapping = new ResultSetMapping; + $this->resultSetMapping = new ResultSetMapping; } /** @@ -70,7 +70,7 @@ public function __construct() */ public function getResultSetMapping() { - return $this->_resultSetMapping; + return $this->resultSetMapping; } /** @@ -82,7 +82,7 @@ public function getResultSetMapping() */ public function setResultSetMapping(ResultSetMapping $rsm) { - $this->_resultSetMapping = $rsm; + $this->resultSetMapping = $rsm; } /** @@ -94,7 +94,7 @@ public function setResultSetMapping(ResultSetMapping $rsm) */ public function setSqlExecutor($executor) { - $this->_sqlExecutor = $executor; + $this->sqlExecutor = $executor; } /** @@ -104,7 +104,7 @@ public function setSqlExecutor($executor) */ public function getSqlExecutor() { - return $this->_sqlExecutor; + return $this->sqlExecutor; } /** @@ -118,7 +118,7 @@ public function getSqlExecutor() */ public function addParameterMapping($dqlPosition, $sqlPosition) { - $this->_parameterMappings[$dqlPosition][] = $sqlPosition; + $this->parameterMappings[$dqlPosition][] = $sqlPosition; } /** @@ -128,7 +128,7 @@ public function addParameterMapping($dqlPosition, $sqlPosition) */ public function getParameterMappings() { - return $this->_parameterMappings; + return $this->parameterMappings; } /** @@ -140,6 +140,6 @@ public function getParameterMappings() */ public function getSqlParameterPositions($dqlPosition) { - return $this->_parameterMappings[$dqlPosition]; + return $this->parameterMappings[$dqlPosition]; } } diff --git a/lib/Doctrine/ORM/Query/Printer.php b/lib/Doctrine/ORM/Query/Printer.php index d92ad850f5b..b004e1c767b 100644 --- a/lib/Doctrine/ORM/Query/Printer.php +++ b/lib/Doctrine/ORM/Query/Printer.php @@ -34,14 +34,14 @@ class Printer * * @var int */ - protected $_indent = 0; + protected $indent = 0; /** * Defines whether parse tree is printed (default, false) or not (true). * * @var bool */ - protected $_silent; + protected $silent; /** * Constructs a new parse tree printer. @@ -50,7 +50,7 @@ class Printer */ public function __construct($silent = false) { - $this->_silent = $silent; + $this->silent = $silent; } /** @@ -66,7 +66,7 @@ public function __construct($silent = false) public function startProduction($name) { $this->println('(' . $name); - $this->_indent++; + $this->indent++; } /** @@ -78,7 +78,7 @@ public function startProduction($name) */ public function endProduction() { - $this->_indent--; + $this->indent--; $this->println(')'); } @@ -91,8 +91,8 @@ public function endProduction() */ public function println($str) { - if ( ! $this->_silent) { - echo str_repeat(' ', $this->_indent), $str, "\n"; + if ( ! $this->silent) { + echo str_repeat(' ', $this->indent), $str, "\n"; } } } diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 31f34b8651e..608b6cf872f 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -340,7 +340,7 @@ public function getSQLColumnAlias($columnName) * * @return string The SQL. */ - private function _generateClassTableInheritanceJoins($class, $dqlAlias) + private function generateClassTableInheritanceJoins($class, $dqlAlias) { $sql = ''; @@ -398,7 +398,7 @@ private function _generateClassTableInheritanceJoins($class, $dqlAlias) /** * @return string */ - private function _generateOrderedCollectionOrderByItems() + private function generateOrderedCollectionOrderByItems() { $orderedColumns = []; @@ -436,7 +436,7 @@ private function _generateOrderedCollectionOrderByItems() * * @return string */ - private function _generateDiscriminatorColumnConditionSQL(array $dqlAliases) + private function generateDiscriminatorColumnConditionSQL(array $dqlAliases) { $sqlParts = []; @@ -549,7 +549,7 @@ public function walkSelectStatement(AST\SelectStatement $AST) $sql .= $this->walkOrderByClause($AST->orderByClause); } - if ( ! $AST->orderByClause && ($orderBySql = $this->_generateOrderedCollectionOrderByItems())) { + if ( ! $AST->orderByClause && ($orderBySql = $this->generateOrderedCollectionOrderByItems())) { $sql .= ' ORDER BY ' . $orderBySql; } @@ -928,7 +928,7 @@ public function walkRangeVariableDeclaration($rangeVariableDeclaration) ); if ($class->inheritanceType === InheritanceType::JOINED) { - $sql .= $this->_generateClassTableInheritanceJoins($class, $dqlAlias); + $sql .= $this->generateClassTableInheritanceJoins($class, $dqlAlias); } return $sql; @@ -993,7 +993,7 @@ public function walkJoinAssociationDeclaration($joinAssociationDeclaration, $joi } // Apply remaining inheritance restrictions - $discrSql = $this->_generateDiscriminatorColumnConditionSQL([$joinedDqlAlias]); + $discrSql = $this->generateDiscriminatorColumnConditionSQL([$joinedDqlAlias]); if ($discrSql) { $conditions[] = $discrSql; @@ -1062,7 +1062,7 @@ public function walkJoinAssociationDeclaration($joinAssociationDeclaration, $joi } // Apply remaining inheritance restrictions - $discrSql = $this->_generateDiscriminatorColumnConditionSQL([$joinedDqlAlias]); + $discrSql = $this->generateDiscriminatorColumnConditionSQL([$joinedDqlAlias]); if ($discrSql) { $conditions[] = $discrSql; @@ -1089,7 +1089,7 @@ public function walkJoinAssociationDeclaration($joinAssociationDeclaration, $joi $withCondition = (null === $condExpr) ? '' : ('(' . $this->walkConditionalExpression($condExpr) . ')'); if ($targetClass->inheritanceType === InheritanceType::JOINED) { - $ctiJoins = $this->_generateClassTableInheritanceJoins($targetClass, $joinedDqlAlias); + $ctiJoins = $this->generateClassTableInheritanceJoins($targetClass, $joinedDqlAlias); // If we have WITH condition, we need to build nested joins for target class table and cti joins if ($withCondition) { @@ -1131,7 +1131,7 @@ public function walkOrderByClause($orderByClause) { $orderByItems = array_map([$this, 'walkOrderByItem'], $orderByClause->orderByItems); - if (($collectionOrderByItems = $this->_generateOrderedCollectionOrderByItems()) !== '') { + if (($collectionOrderByItems = $this->generateOrderedCollectionOrderByItems()) !== '') { $orderByItems = array_merge($orderByItems, (array) $collectionOrderByItems); } @@ -1196,7 +1196,7 @@ public function walkJoin($join) $sql .= $this->walkRangeVariableDeclaration($joinDeclaration); // Apply remaining inheritance restrictions - $discrSql = $this->_generateDiscriminatorColumnConditionSQL([$dqlAlias]); + $discrSql = $this->generateDiscriminatorColumnConditionSQL([$dqlAlias]); if ($discrSql) { $conditions[] = $discrSql; @@ -1802,7 +1802,7 @@ public function walkUpdateItem($updateItem) public function walkWhereClause($whereClause) { $condSql = null !== $whereClause ? $this->walkConditionalExpression($whereClause->conditionalExpression) : ''; - $discrSql = $this->_generateDiscriminatorColumnConditionSQL($this->rootAliases); + $discrSql = $this->generateDiscriminatorColumnConditionSql($this->rootAliases); if ($this->em->hasFilters()) { $filterClauses = []; diff --git a/lib/Doctrine/ORM/Query/TreeWalkerAdapter.php b/lib/Doctrine/ORM/Query/TreeWalkerAdapter.php index deee03ab53d..438e180dc77 100644 --- a/lib/Doctrine/ORM/Query/TreeWalkerAdapter.php +++ b/lib/Doctrine/ORM/Query/TreeWalkerAdapter.php @@ -33,30 +33,30 @@ abstract class TreeWalkerAdapter implements TreeWalker * * @var \Doctrine\ORM\AbstractQuery */ - private $_query; + private $query; /** * The ParserResult of the original query that was produced by the Parser. * * @var \Doctrine\ORM\Query\ParserResult */ - private $_parserResult; + private $parserResult; /** * The query components of the original query (the "symbol table") that was produced by the Parser. * * @var array */ - private $_queryComponents; + private $queryComponents; /** * {@inheritdoc} */ public function __construct($query, $parserResult, array $queryComponents) { - $this->_query = $query; - $this->_parserResult = $parserResult; - $this->_queryComponents = $queryComponents; + $this->query = $query; + $this->parserResult = $parserResult; + $this->queryComponents = $queryComponents; } /** @@ -64,7 +64,7 @@ public function __construct($query, $parserResult, array $queryComponents) */ public function getQueryComponents() { - return $this->_queryComponents; + return $this->queryComponents; } /** @@ -78,15 +78,7 @@ public function setQueryComponent($dqlAlias, array $queryComponent) throw QueryException::invalidQueryComponent($dqlAlias); } - $this->_queryComponents[$dqlAlias] = $queryComponent; - } - - /** - * @return array - */ - protected function _getQueryComponents() - { - return $this->_queryComponents; + $this->queryComponents[$dqlAlias] = $queryComponent; } /** @@ -94,9 +86,9 @@ protected function _getQueryComponents() * * @return \Doctrine\ORM\AbstractQuery */ - protected function _getQuery() + protected function getQuery() { - return $this->_query; + return $this->query; } /** @@ -104,9 +96,9 @@ protected function _getQuery() * * @return \Doctrine\ORM\Query\ParserResult */ - protected function _getParserResult() + protected function getParserResult() { - return $this->_parserResult; + return $this->parserResult; } /** diff --git a/lib/Doctrine/ORM/Query/TreeWalkerChain.php b/lib/Doctrine/ORM/Query/TreeWalkerChain.php index 074aa938709..fe76fe654fc 100644 --- a/lib/Doctrine/ORM/Query/TreeWalkerChain.php +++ b/lib/Doctrine/ORM/Query/TreeWalkerChain.php @@ -34,28 +34,28 @@ class TreeWalkerChain implements TreeWalker * * @var TreeWalker[] */ - private $_walkers; + private $walkers; /** * The original Query. * * @var \Doctrine\ORM\AbstractQuery */ - private $_query; + private $query; /** * The ParserResult of the original query that was produced by the Parser. * * @var \Doctrine\ORM\Query\ParserResult */ - private $_parserResult; + private $parserResult; /** * The query components of the original query (the "symbol table") that was produced by the Parser. * * @var array */ - private $_queryComponents; + private $queryComponents; /** * Returns the internal queryComponents array. @@ -64,7 +64,7 @@ class TreeWalkerChain implements TreeWalker */ public function getQueryComponents() { - return $this->_queryComponents; + return $this->queryComponents; } /** @@ -78,7 +78,7 @@ public function setQueryComponent($dqlAlias, array $queryComponent) throw QueryException::invalidQueryComponent($dqlAlias); } - $this->_queryComponents[$dqlAlias] = $queryComponent; + $this->queryComponents[$dqlAlias] = $queryComponent; } /** @@ -86,10 +86,10 @@ public function setQueryComponent($dqlAlias, array $queryComponent) */ public function __construct($query, $parserResult, array $queryComponents) { - $this->_query = $query; - $this->_parserResult = $parserResult; - $this->_queryComponents = $queryComponents; - $this->_walkers = new TreeWalkerChainIterator($this, $query, $parserResult); + $this->query = $query; + $this->parserResult = $parserResult; + $this->queryComponents = $queryComponents; + $this->walkers = new TreeWalkerChainIterator($this, $query, $parserResult); } /** @@ -101,7 +101,7 @@ public function __construct($query, $parserResult, array $queryComponents) */ public function addTreeWalker($walkerClass) { - $this->_walkers[] = $walkerClass; + $this->walkers[] = $walkerClass; } /** @@ -109,10 +109,10 @@ public function addTreeWalker($walkerClass) */ public function walkSelectStatement(AST\SelectStatement $AST) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkSelectStatement($AST); - $this->_queryComponents = $walker->getQueryComponents(); + $this->queryComponents = $walker->getQueryComponents(); } } @@ -121,7 +121,7 @@ public function walkSelectStatement(AST\SelectStatement $AST) */ public function walkSelectClause($selectClause) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkSelectClause($selectClause); } } @@ -131,7 +131,7 @@ public function walkSelectClause($selectClause) */ public function walkFromClause($fromClause) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkFromClause($fromClause); } } @@ -141,7 +141,7 @@ public function walkFromClause($fromClause) */ public function walkFunction($function) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkFunction($function); } } @@ -151,7 +151,7 @@ public function walkFunction($function) */ public function walkOrderByClause($orderByClause) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkOrderByClause($orderByClause); } } @@ -161,7 +161,7 @@ public function walkOrderByClause($orderByClause) */ public function walkOrderByItem($orderByItem) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkOrderByItem($orderByItem); } } @@ -171,7 +171,7 @@ public function walkOrderByItem($orderByItem) */ public function walkHavingClause($havingClause) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkHavingClause($havingClause); } } @@ -181,7 +181,7 @@ public function walkHavingClause($havingClause) */ public function walkJoin($join) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkJoin($join); } } @@ -191,7 +191,7 @@ public function walkJoin($join) */ public function walkSelectExpression($selectExpression) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkSelectExpression($selectExpression); } } @@ -201,7 +201,7 @@ public function walkSelectExpression($selectExpression) */ public function walkQuantifiedExpression($qExpr) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkQuantifiedExpression($qExpr); } } @@ -211,7 +211,7 @@ public function walkQuantifiedExpression($qExpr) */ public function walkSubselect($subselect) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkSubselect($subselect); } } @@ -221,7 +221,7 @@ public function walkSubselect($subselect) */ public function walkSubselectFromClause($subselectFromClause) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkSubselectFromClause($subselectFromClause); } } @@ -231,7 +231,7 @@ public function walkSubselectFromClause($subselectFromClause) */ public function walkSimpleSelectClause($simpleSelectClause) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkSimpleSelectClause($simpleSelectClause); } } @@ -241,7 +241,7 @@ public function walkSimpleSelectClause($simpleSelectClause) */ public function walkSimpleSelectExpression($simpleSelectExpression) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkSimpleSelectExpression($simpleSelectExpression); } } @@ -251,7 +251,7 @@ public function walkSimpleSelectExpression($simpleSelectExpression) */ public function walkAggregateExpression($aggExpression) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkAggregateExpression($aggExpression); } } @@ -261,7 +261,7 @@ public function walkAggregateExpression($aggExpression) */ public function walkGroupByClause($groupByClause) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkGroupByClause($groupByClause); } } @@ -271,7 +271,7 @@ public function walkGroupByClause($groupByClause) */ public function walkGroupByItem($groupByItem) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkGroupByItem($groupByItem); } } @@ -281,7 +281,7 @@ public function walkGroupByItem($groupByItem) */ public function walkUpdateStatement(AST\UpdateStatement $AST) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkUpdateStatement($AST); } } @@ -291,7 +291,7 @@ public function walkUpdateStatement(AST\UpdateStatement $AST) */ public function walkDeleteStatement(AST\DeleteStatement $AST) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkDeleteStatement($AST); } } @@ -301,7 +301,7 @@ public function walkDeleteStatement(AST\DeleteStatement $AST) */ public function walkDeleteClause(AST\DeleteClause $deleteClause) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkDeleteClause($deleteClause); } } @@ -311,7 +311,7 @@ public function walkDeleteClause(AST\DeleteClause $deleteClause) */ public function walkUpdateClause($updateClause) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkUpdateClause($updateClause); } } @@ -321,7 +321,7 @@ public function walkUpdateClause($updateClause) */ public function walkUpdateItem($updateItem) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkUpdateItem($updateItem); } } @@ -331,7 +331,7 @@ public function walkUpdateItem($updateItem) */ public function walkWhereClause($whereClause) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkWhereClause($whereClause); } } @@ -341,7 +341,7 @@ public function walkWhereClause($whereClause) */ public function walkConditionalExpression($condExpr) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkConditionalExpression($condExpr); } } @@ -351,7 +351,7 @@ public function walkConditionalExpression($condExpr) */ public function walkConditionalTerm($condTerm) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkConditionalTerm($condTerm); } } @@ -361,7 +361,7 @@ public function walkConditionalTerm($condTerm) */ public function walkConditionalFactor($factor) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkConditionalFactor($factor); } } @@ -371,7 +371,7 @@ public function walkConditionalFactor($factor) */ public function walkConditionalPrimary($condPrimary) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkConditionalPrimary($condPrimary); } } @@ -381,7 +381,7 @@ public function walkConditionalPrimary($condPrimary) */ public function walkExistsExpression($existsExpr) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkExistsExpression($existsExpr); } } @@ -391,7 +391,7 @@ public function walkExistsExpression($existsExpr) */ public function walkCollectionMemberExpression($collMemberExpr) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkCollectionMemberExpression($collMemberExpr); } } @@ -401,7 +401,7 @@ public function walkCollectionMemberExpression($collMemberExpr) */ public function walkEmptyCollectionComparisonExpression($emptyCollCompExpr) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkEmptyCollectionComparisonExpression($emptyCollCompExpr); } } @@ -411,7 +411,7 @@ public function walkEmptyCollectionComparisonExpression($emptyCollCompExpr) */ public function walkNullComparisonExpression($nullCompExpr) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkNullComparisonExpression($nullCompExpr); } } @@ -421,7 +421,7 @@ public function walkNullComparisonExpression($nullCompExpr) */ public function walkInExpression($inExpr) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkInExpression($inExpr); } } @@ -431,7 +431,7 @@ public function walkInExpression($inExpr) */ public function walkInstanceOfExpression($instanceOfExpr) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkInstanceOfExpression($instanceOfExpr); } } @@ -441,7 +441,7 @@ public function walkInstanceOfExpression($instanceOfExpr) */ public function walkLiteral($literal) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkLiteral($literal); } } @@ -451,7 +451,7 @@ public function walkLiteral($literal) */ public function walkBetweenExpression($betweenExpr) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkBetweenExpression($betweenExpr); } } @@ -461,7 +461,7 @@ public function walkBetweenExpression($betweenExpr) */ public function walkLikeExpression($likeExpr) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkLikeExpression($likeExpr); } } @@ -471,7 +471,7 @@ public function walkLikeExpression($likeExpr) */ public function walkStateFieldPathExpression($stateFieldPathExpression) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkStateFieldPathExpression($stateFieldPathExpression); } } @@ -481,7 +481,7 @@ public function walkStateFieldPathExpression($stateFieldPathExpression) */ public function walkComparisonExpression($compExpr) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkComparisonExpression($compExpr); } } @@ -491,7 +491,7 @@ public function walkComparisonExpression($compExpr) */ public function walkInputParameter($inputParam) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkInputParameter($inputParam); } } @@ -501,7 +501,7 @@ public function walkInputParameter($inputParam) */ public function walkArithmeticExpression($arithmeticExpr) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkArithmeticExpression($arithmeticExpr); } } @@ -511,7 +511,7 @@ public function walkArithmeticExpression($arithmeticExpr) */ public function walkArithmeticTerm($term) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkArithmeticTerm($term); } } @@ -521,7 +521,7 @@ public function walkArithmeticTerm($term) */ public function walkStringPrimary($stringPrimary) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkStringPrimary($stringPrimary); } } @@ -531,7 +531,7 @@ public function walkStringPrimary($stringPrimary) */ public function walkArithmeticFactor($factor) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkArithmeticFactor($factor); } } @@ -541,7 +541,7 @@ public function walkArithmeticFactor($factor) */ public function walkSimpleArithmeticExpression($simpleArithmeticExpr) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkSimpleArithmeticExpression($simpleArithmeticExpr); } } @@ -551,7 +551,7 @@ public function walkSimpleArithmeticExpression($simpleArithmeticExpr) */ public function walkPathExpression($pathExpr) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkPathExpression($pathExpr); } } @@ -561,7 +561,7 @@ public function walkPathExpression($pathExpr) */ public function walkResultVariable($resultVariable) { - foreach ($this->_walkers as $walker) { + foreach ($this->walkers as $walker) { $walker->walkResultVariable($resultVariable); } } diff --git a/lib/Doctrine/ORM/QueryBuilder.php b/lib/Doctrine/ORM/QueryBuilder.php index 894fbc32f74..6ba7882d5aa 100644 --- a/lib/Doctrine/ORM/QueryBuilder.php +++ b/lib/Doctrine/ORM/QueryBuilder.php @@ -50,14 +50,14 @@ class QueryBuilder * * @var EntityManagerInterface */ - private $_em; + private $em; /** * The array of DQL parts collected. * * @var array */ - private $_dqlParts = [ + private $dqlParts = [ 'distinct' => false, 'select' => [], 'from' => [], @@ -74,21 +74,21 @@ class QueryBuilder * * @var integer */ - private $_type = self::SELECT; + private $type = self::SELECT; /** * The state of the query object. Can be dirty or clean. * * @var integer */ - private $_state = self::STATE_CLEAN; + private $state = self::STATE_CLEAN; /** * The complete DQL string for this query. * * @var string */ - private $_dql; + private $dql; /** * The query parameters. @@ -102,14 +102,14 @@ class QueryBuilder * * @var integer */ - private $_firstResult = null; + private $firstResult = null; /** * The maximum number of results to retrieve. * * @var integer */ - private $_maxResults = null; + private $maxResults = null; /** * Keeps root entity alias names for join entities. @@ -151,7 +151,7 @@ class QueryBuilder */ public function __construct(EntityManagerInterface $em) { - $this->_em = $em; + $this->em = $em; $this->parameters = new ArrayCollection(); } @@ -174,7 +174,7 @@ public function __construct(EntityManagerInterface $em) */ public function expr() { - return $this->_em->getExpressionBuilder(); + return $this->em->getExpressionBuilder(); } /** @@ -271,7 +271,7 @@ public function setCacheMode($cacheMode) */ public function getType() { - return $this->_type; + return $this->type; } /** @@ -281,7 +281,7 @@ public function getType() */ public function getEntityManager() { - return $this->_em; + return $this->em; } /** @@ -291,7 +291,7 @@ public function getEntityManager() */ public function getState() { - return $this->_state; + return $this->state; } /** @@ -308,27 +308,27 @@ public function getState() */ public function getDQL() { - if ($this->_dql !== null && $this->_state === self::STATE_CLEAN) { - return $this->_dql; + if ($this->dql !== null && $this->state === self::STATE_CLEAN) { + return $this->dql; } - switch ($this->_type) { + switch ($this->type) { case self::DELETE: - $dql = $this->_getDQLForDelete(); + $dql = $this->getDQLForDelete(); break; case self::UPDATE: - $dql = $this->_getDQLForUpdate(); + $dql = $this->getDQLForUpdate(); break; case self::SELECT: default: - $dql = $this->_getDQLForSelect(); + $dql = $this->getDQLForSelect(); break; } - $this->_state = self::STATE_CLEAN; - $this->_dql = $dql; + $this->state = self::STATE_CLEAN; + $this->dql = $dql; return $dql; } @@ -349,10 +349,10 @@ public function getDQL() public function getQuery() { $parameters = clone $this->parameters; - $query = $this->_em->createQuery($this->getDQL()) + $query = $this->em->createQuery($this->getDQL()) ->setParameters($parameters) - ->setFirstResult($this->_firstResult) - ->setMaxResults($this->_maxResults); + ->setFirstResult($this->firstResult) + ->setMaxResults($this->maxResults); if ($this->lifetime) { $query->setLifetime($this->lifetime); @@ -446,7 +446,7 @@ public function getRootAliases() { $aliases = []; - foreach ($this->_dqlParts['from'] as &$fromClause) { + foreach ($this->dqlParts['from'] as &$fromClause) { if (is_string($fromClause)) { $spacePos = strrpos($fromClause, ' '); $from = substr($fromClause, 0, $spacePos); @@ -498,7 +498,7 @@ public function getRootEntities() { $entities = []; - foreach ($this->_dqlParts['from'] as &$fromClause) { + foreach ($this->dqlParts['from'] as &$fromClause) { if (is_string($fromClause)) { $spacePos = strrpos($fromClause, ' '); $from = substr($fromClause, 0, $spacePos); @@ -634,7 +634,7 @@ function ($parameter) use ($key) */ public function setFirstResult($firstResult) { - $this->_firstResult = $firstResult; + $this->firstResult = $firstResult; return $this; } @@ -647,7 +647,7 @@ public function setFirstResult($firstResult) */ public function getFirstResult() { - return $this->_firstResult; + return $this->firstResult; } /** @@ -659,7 +659,7 @@ public function getFirstResult() */ public function setMaxResults($maxResults) { - $this->_maxResults = $maxResults; + $this->maxResults = $maxResults; return $this; } @@ -672,7 +672,7 @@ public function setMaxResults($maxResults) */ public function getMaxResults() { - return $this->_maxResults; + return $this->maxResults; } /** @@ -696,7 +696,7 @@ public function add($dqlPartName, $dqlPart, $append = false) ); } - $isMultiple = is_array($this->_dqlParts[$dqlPartName]) + $isMultiple = is_array($this->dqlParts[$dqlPartName]) && !($dqlPartName == 'join' && !$append); // Allow adding any part retrieved from self::getDQLParts(). @@ -722,15 +722,15 @@ public function add($dqlPartName, $dqlPart, $append = false) if (is_array($dqlPart)) { $key = key($dqlPart); - $this->_dqlParts[$dqlPartName][$key][] = $dqlPart[$key]; + $this->dqlParts[$dqlPartName][$key][] = $dqlPart[$key]; } else { - $this->_dqlParts[$dqlPartName][] = $dqlPart; + $this->dqlParts[$dqlPartName][] = $dqlPart; } } else { - $this->_dqlParts[$dqlPartName] = ($isMultiple) ? [$dqlPart] : $dqlPart; + $this->dqlParts[$dqlPartName] = ($isMultiple) ? [$dqlPart] : $dqlPart; } - $this->_state = self::STATE_DIRTY; + $this->state = self::STATE_DIRTY; return $this; } @@ -752,7 +752,7 @@ public function add($dqlPartName, $dqlPart, $append = false) */ public function select($select = null) { - $this->_type = self::SELECT; + $this->type = self::SELECT; if (empty($select)) { return $this; @@ -779,7 +779,7 @@ public function select($select = null) */ public function distinct($flag = true) { - $this->_dqlParts['distinct'] = (bool) $flag; + $this->dqlParts['distinct'] = (bool) $flag; return $this; } @@ -801,7 +801,7 @@ public function distinct($flag = true) */ public function addSelect($select = null) { - $this->_type = self::SELECT; + $this->type = self::SELECT; if (empty($select)) { return $this; @@ -830,7 +830,7 @@ public function addSelect($select = null) */ public function delete($delete = null, $alias = null) { - $this->_type = self::DELETE; + $this->type = self::DELETE; if ( ! $delete) { return $this; @@ -857,7 +857,7 @@ public function delete($delete = null, $alias = null) */ public function update($update = null, $alias = null) { - $this->_type = self::UPDATE; + $this->type = self::UPDATE; if ( ! $update) { return $this; @@ -920,7 +920,7 @@ public function indexBy($alias, $indexBy) ); } - foreach ($this->_dqlParts['from'] as &$fromClause) { + foreach ($this->dqlParts['from'] as &$fromClause) { /* @var Expr\From $fromClause */ if ($fromClause->getAlias() !== $alias) { continue; @@ -1353,7 +1353,7 @@ public function addCriteria(Criteria $criteria) */ public function getDQLPart($queryPartName) { - return $this->_dqlParts[$queryPartName]; + return $this->dqlParts[$queryPartName]; } /** @@ -1365,40 +1365,40 @@ public function getDQLPart($queryPartName) */ public function getDQLParts() { - return $this->_dqlParts; + return $this->dqlParts; } /** * @return string */ - private function _getDQLForDelete() + private function getDQLForDelete() { return 'DELETE' - . $this->_getReducedDQLQueryPart('from', ['pre' => ' ', 'separator' => ', ']) - . $this->_getReducedDQLQueryPart('where', ['pre' => ' WHERE ']) - . $this->_getReducedDQLQueryPart('orderBy', ['pre' => ' ORDER BY ', 'separator' => ', ']); + . $this->getReducedDQLQueryPart('from', ['pre' => ' ', 'separator' => ', ']) + . $this->getReducedDQLQueryPart('where', ['pre' => ' WHERE ']) + . $this->getReducedDQLQueryPart('orderBy', ['pre' => ' ORDER BY ', 'separator' => ', ']); } /** * @return string */ - private function _getDQLForUpdate() + private function getDQLForUpdate() { return 'UPDATE' - . $this->_getReducedDQLQueryPart('from', ['pre' => ' ', 'separator' => ', ']) - . $this->_getReducedDQLQueryPart('set', ['pre' => ' SET ', 'separator' => ', ']) - . $this->_getReducedDQLQueryPart('where', ['pre' => ' WHERE ']) - . $this->_getReducedDQLQueryPart('orderBy', ['pre' => ' ORDER BY ', 'separator' => ', ']); + . $this->getReducedDQLQueryPart('from', ['pre' => ' ', 'separator' => ', ']) + . $this->getReducedDQLQueryPart('set', ['pre' => ' SET ', 'separator' => ', ']) + . $this->getReducedDQLQueryPart('where', ['pre' => ' WHERE ']) + . $this->getReducedDQLQueryPart('orderBy', ['pre' => ' ORDER BY ', 'separator' => ', ']); } /** * @return string */ - private function _getDQLForSelect() + private function getDQLForSelect() { $dql = 'SELECT' - . ($this->_dqlParts['distinct']===true ? ' DISTINCT' : '') - . $this->_getReducedDQLQueryPart('select', ['pre' => ' ', 'separator' => ', ']); + . ($this->dqlParts['distinct']===true ? ' DISTINCT' : '') + . $this->getReducedDQLQueryPart('select', ['pre' => ' ', 'separator' => ', ']); $fromParts = $this->getDQLPart('from'); $joinParts = $this->getDQLPart('join'); @@ -1422,10 +1422,10 @@ private function _getDQLForSelect() } $dql .= implode(', ', $fromClauses) - . $this->_getReducedDQLQueryPart('where', ['pre' => ' WHERE ']) - . $this->_getReducedDQLQueryPart('groupBy', ['pre' => ' GROUP BY ', 'separator' => ', ']) - . $this->_getReducedDQLQueryPart('having', ['pre' => ' HAVING ']) - . $this->_getReducedDQLQueryPart('orderBy', ['pre' => ' ORDER BY ', 'separator' => ', ']); + . $this->getReducedDQLQueryPart('where', ['pre' => ' WHERE ']) + . $this->getReducedDQLQueryPart('groupBy', ['pre' => ' GROUP BY ', 'separator' => ', ']) + . $this->getReducedDQLQueryPart('having', ['pre' => ' HAVING ']) + . $this->getReducedDQLQueryPart('orderBy', ['pre' => ' ORDER BY ', 'separator' => ', ']); return $dql; } @@ -1436,7 +1436,7 @@ private function _getDQLForSelect() * * @return string */ - private function _getReducedDQLQueryPart($queryPartName, $options = []) + private function getReducedDQLQueryPart($queryPartName, $options = []) { $queryPart = $this->getDQLPart($queryPartName); @@ -1459,7 +1459,7 @@ private function _getReducedDQLQueryPart($queryPartName, $options = []) public function resetDQLParts($parts = null) { if (null === $parts) { - $parts = array_keys($this->_dqlParts); + $parts = array_keys($this->dqlParts); } foreach ($parts as $part) { @@ -1478,8 +1478,8 @@ public function resetDQLParts($parts = null) */ public function resetDQLPart($part) { - $this->_dqlParts[$part] = is_array($this->_dqlParts[$part]) ? [] : null; - $this->_state = self::STATE_DIRTY; + $this->dqlParts[$part] = is_array($this->dqlParts[$part]) ? [] : null; + $this->state = self::STATE_DIRTY; return $this; } @@ -1502,15 +1502,15 @@ public function __toString() */ public function __clone() { - foreach ($this->_dqlParts as $part => $elements) { - if (is_array($this->_dqlParts[$part])) { - foreach ($this->_dqlParts[$part] as $idx => $element) { + foreach ($this->dqlParts as $part => $elements) { + if (is_array($this->dqlParts[$part])) { + foreach ($this->dqlParts[$part] as $idx => $element) { if (is_object($element)) { - $this->_dqlParts[$part][$idx] = clone $element; + $this->dqlParts[$part][$idx] = clone $element; } } } else if (is_object($elements)) { - $this->_dqlParts[$part] = clone $elements; + $this->dqlParts[$part] = clone $elements; } } diff --git a/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php b/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php index 24752099b63..086973ab34e 100644 --- a/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php @@ -35,24 +35,24 @@ class SequenceGenerator implements Generator, Serializable * * @var int */ - private $_allocationSize; + private $allocationSize; /** * The name of the sequence. * * @var string */ - private $_sequenceName; + private $sequenceName; /** * @var int */ - private $_nextValue = 0; + private $nextValue = 0; /** * @var int|null */ - private $_maxValue = null; + private $maxValue = null; /** * Initializes a new sequence generator. @@ -62,8 +62,8 @@ class SequenceGenerator implements Generator, Serializable */ public function __construct($sequenceName, $allocationSize) { - $this->_sequenceName = $sequenceName; - $this->_allocationSize = $allocationSize; + $this->sequenceName = $sequenceName; + $this->allocationSize = $allocationSize; } /** @@ -71,17 +71,17 @@ public function __construct($sequenceName, $allocationSize) */ public function generate(EntityManager $em, $entity) { - if ($this->_maxValue === null || $this->_nextValue == $this->_maxValue) { + if ($this->maxValue === null || $this->nextValue == $this->maxValue) { // Allocate new values $conn = $em->getConnection(); - $sql = $conn->getDatabasePlatform()->getSequenceNextValSQL($this->_sequenceName); + $sql = $conn->getDatabasePlatform()->getSequenceNextValSQL($this->sequenceName); // Using `query` to force usage of the master server in MasterSlaveConnection - $this->_nextValue = (int) $conn->query($sql)->fetchColumn(); - $this->_maxValue = $this->_nextValue + $this->_allocationSize; + $this->nextValue = (int) $conn->query($sql)->fetchColumn(); + $this->maxValue = $this->nextValue + $this->allocationSize; } - return $this->_nextValue++; + return $this->nextValue++; } /** @@ -91,7 +91,7 @@ public function generate(EntityManager $em, $entity) */ public function getCurrentMaxValue() { - return $this->_maxValue; + return $this->maxValue; } /** @@ -101,7 +101,7 @@ public function getCurrentMaxValue() */ public function getNextValue() { - return $this->_nextValue; + return $this->nextValue; } /** @@ -111,8 +111,8 @@ public function serialize() { return serialize( [ - 'allocationSize' => $this->_allocationSize, - 'sequenceName' => $this->_sequenceName + 'allocationSize' => $this->allocationSize, + 'sequenceName' => $this->sequenceName ] ); } @@ -126,8 +126,8 @@ public function unserialize($serialized) { $array = unserialize($serialized); - $this->_sequenceName = $array['sequenceName']; - $this->_allocationSize = $array['allocationSize']; + $this->sequenceName = $array['sequenceName']; + $this->allocationSize = $array['allocationSize']; } /** diff --git a/lib/Doctrine/ORM/Sequencing/TableGenerator.php b/lib/Doctrine/ORM/Sequencing/TableGenerator.php index dde8e47585f..1f61b3af05f 100644 --- a/lib/Doctrine/ORM/Sequencing/TableGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/TableGenerator.php @@ -35,27 +35,27 @@ class TableGenerator implements Generator /** * @var string */ - private $_tableName; + private $tableName; /** * @var string */ - private $_sequenceName; + private $sequenceName; /** * @var int */ - private $_allocationSize; + private $allocationSize; /** * @var int|null */ - private $_nextValue; + private $nextValue; /** * @var int|null */ - private $_maxValue; + private $maxValue; /** * @param string $tableName @@ -64,9 +64,9 @@ class TableGenerator implements Generator */ public function __construct($tableName, $sequenceName = 'default', $allocationSize = 10) { - $this->_tableName = $tableName; - $this->_sequenceName = $sequenceName; - $this->_allocationSize = $allocationSize; + $this->tableName = $tableName; + $this->sequenceName = $sequenceName; + $this->allocationSize = $allocationSize; } /** @@ -74,22 +74,22 @@ public function __construct($tableName, $sequenceName = 'default', $allocationSi */ public function generate(EntityManager $em, $entity) { - if ($this->_maxValue === null || $this->_nextValue === $this->_maxValue) { + if ($this->maxValue === null || $this->nextValue === $this->maxValue) { // Allocate new values $conn = $em->getConnection(); if ($conn->getTransactionNestingLevel() === 0) { // use select for update $platform = $conn->getDatabasePlatform(); - $sql = $platform->getTableHiLoCurrentValSql($this->_tableName, $this->_sequenceName); + $sql = $platform->getTableHiLoCurrentValSql($this->tableName, $this->sequenceName); $currentLevel = $conn->fetchColumn($sql); if ($currentLevel !== null) { - $this->_nextValue = $currentLevel; - $this->_maxValue = $this->_nextValue + $this->_allocationSize; + $this->nextValue = $currentLevel; + $this->maxValue = $this->nextValue + $this->allocationSize; $updateSql = $platform->getTableHiLoUpdateNextValSql( - $this->_tableName, $this->_sequenceName, $this->_allocationSize + $this->tableName, $this->sequenceName, $this->allocationSize ); if ($conn->executeUpdate($updateSql, [1 => $currentLevel, 2 => $currentLevel+1]) !== 1) { @@ -104,7 +104,7 @@ public function generate(EntityManager $em, $entity) } } - return $this->_nextValue++; + return $this->nextValue++; } /** diff --git a/lib/Doctrine/ORM/Tools/Console/Helper/EntityManagerHelper.php b/lib/Doctrine/ORM/Tools/Console/Helper/EntityManagerHelper.php index 267304b984c..19d3129b902 100644 --- a/lib/Doctrine/ORM/Tools/Console/Helper/EntityManagerHelper.php +++ b/lib/Doctrine/ORM/Tools/Console/Helper/EntityManagerHelper.php @@ -39,7 +39,7 @@ class EntityManagerHelper extends Helper * * @var EntityManagerInterface */ - protected $_em; + protected $em; /** * Constructor. @@ -48,7 +48,7 @@ class EntityManagerHelper extends Helper */ public function __construct(EntityManagerInterface $em) { - $this->_em = $em; + $this->em = $em; } /** @@ -58,7 +58,7 @@ public function __construct(EntityManagerInterface $em) */ public function getEntityManager() { - return $this->_em; + return $this->em; } /** diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php index 745df08b66c..3c42d2d211f 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php @@ -35,29 +35,29 @@ abstract class AbstractExporter /** * @var array */ - protected $_metadata = []; + protected $metadata = []; /** * @var string|null */ - protected $_outputDir; + protected $outputDir; /** * @var string|null */ - protected $_extension; + protected $extension; /** * @var bool */ - protected $_overwriteExistingFiles = false; + protected $overwriteExistingFiles = false; /** * @param string|null $dir */ public function __construct($dir = null) { - $this->_outputDir = $dir; + $this->outputDir = $dir; } /** @@ -67,7 +67,7 @@ public function __construct($dir = null) */ public function setOverwriteExistingFiles($overwrite) { - $this->_overwriteExistingFiles = $overwrite; + $this->overwriteExistingFiles = $overwrite; } /** @@ -89,7 +89,7 @@ abstract public function exportClassMetadata(ClassMetadata $metadata); */ public function setMetadata(array $metadata) { - $this->_metadata = $metadata; + $this->metadata = $metadata; } /** @@ -99,7 +99,7 @@ public function setMetadata(array $metadata) */ public function getExtension() { - return $this->_extension; + return $this->extension; } /** @@ -116,7 +116,7 @@ public function getExtension() */ public function setOutputDir($dir) { - $this->_outputDir = $dir; + $this->outputDir = $dir; } /** @@ -129,19 +129,19 @@ public function setOutputDir($dir) */ public function export() { - if ( ! is_dir($this->_outputDir)) { - mkdir($this->_outputDir, 0775, true); + if ( ! is_dir($this->outputDir)) { + mkdir($this->outputDir, 0775, true); } - foreach ($this->_metadata as $metadata) { + foreach ($this->metadata as $metadata) { // In case output is returned, write it to a file, skip otherwise if ($output = $this->exportClassMetadata($metadata)) { - $path = $this->_generateOutputPath($metadata); + $path = $this->generateOutputPath($metadata); $dir = dirname($path); if ( ! is_dir($dir)) { mkdir($dir, 0775, true); } - if (file_exists($path) && !$this->_overwriteExistingFiles) { + if (file_exists($path) && !$this->overwriteExistingFiles) { throw ExportException::attemptOverwriteExistingFile($path); } file_put_contents($path, $output); @@ -157,9 +157,9 @@ public function export() * * @return string */ - protected function _generateOutputPath(ClassMetadata $metadata) + protected function generateOutputPath(ClassMetadata $metadata) { - return $this->_outputDir . '/' . str_replace('\\', '.', $metadata->name) . $this->_extension; + return $this->outputDir . '/' . str_replace('\\', '.', $metadata->name) . $this->extension; } /** @@ -176,6 +176,6 @@ protected function _generateOutputPath(ClassMetadata $metadata) */ public function setExtension($extension) { - $this->_extension = $extension; + $this->extension = $extension; } } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php index 0bfdf371da6..ad08eba4e65 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php @@ -34,28 +34,28 @@ class AnnotationExporter extends AbstractExporter /** * @var string */ - protected $_extension = '.php'; + protected $extension = '.php'; /** * @var EntityGenerator|null */ - private $_entityGenerator; + private $entityGenerator; /** * {@inheritdoc} */ public function exportClassMetadata(ClassMetadata $metadata) { - if ( ! $this->_entityGenerator) { + if ( ! $this->entityGenerator) { throw new \RuntimeException('For the AnnotationExporter you must set an EntityGenerator instance with the setEntityGenerator() method.'); } - $this->_entityGenerator->setGenerateAnnotations(true); - $this->_entityGenerator->setGenerateStubMethods(false); - $this->_entityGenerator->setRegenerateEntityIfExists(false); - $this->_entityGenerator->setUpdateEntityIfExists(false); + $this->entityGenerator->setGenerateAnnotations(true); + $this->entityGenerator->setGenerateStubMethods(false); + $this->entityGenerator->setRegenerateEntityIfExists(false); + $this->entityGenerator->setUpdateEntityIfExists(false); - return $this->_entityGenerator->generateEntityClass($metadata); + return $this->entityGenerator->generateEntityClass($metadata); } /** @@ -63,9 +63,9 @@ public function exportClassMetadata(ClassMetadata $metadata) * * @return string */ - protected function _generateOutputPath(ClassMetadata $metadata) + protected function generateOutputPath(ClassMetadata $metadata) { - return $this->_outputDir . '/' . str_replace('\\', '/', $metadata->name) . $this->_extension; + return $this->outputDir . '/' . str_replace('\\', '/', $metadata->name) . $this->extension; } /** @@ -75,6 +75,6 @@ protected function _generateOutputPath(ClassMetadata $metadata) */ public function setEntityGenerator(EntityGenerator $entityGenerator) { - $this->_entityGenerator = $entityGenerator; + $this->entityGenerator = $entityGenerator; } } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index ccbc65285ea..2485d9fa4c1 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -36,7 +36,7 @@ class PhpExporter extends AbstractExporter /** * @var string */ - protected $_extension = '.php'; + protected $extension = '.php'; /** * {@inheritdoc} @@ -74,14 +74,14 @@ public function exportClassMetadata(ClassMetadata $metadata) } $lines[] = '$table->setName("' . $table->getName() . '");'; - $lines[] = '$table->setOptions(' . $this->_varExport($table->getOptions()) . ');'; + $lines[] = '$table->setOptions(' . $this->varExport($table->getOptions()) . ');'; foreach ($table->getIndexes() as $index) { - $lines[] = '$table->addIndex(' . $this->_varExport($index) . ');'; + $lines[] = '$table->addIndex(' . $this->varExport($index) . ');'; } foreach ($table->getUniqueConstraints() as $constraint) { - $lines[] = '$table->addUniqueConstraint(' . $this->_varExport($constraint) . ');'; + $lines[] = '$table->addUniqueConstraint(' . $this->varExport($constraint) . ');'; } $lines[] = null; @@ -113,15 +113,15 @@ public function exportClassMetadata(ClassMetadata $metadata) $lines[] = '$property->setPrecision(' . $discrColumn->getPrecision() . ');'; } - $lines[] = '$discrColumn->setOptions(' . $this->_varExport($discrColumn->getOptions()) . ');'; - $lines[] = '$discrColumn->setNullable(' . $this->_varExport($discrColumn->isNullable()) . ');'; - $lines[] = '$discrColumn->setUnique(' . $this->_varExport($discrColumn->isUnique()) . ');'; + $lines[] = '$discrColumn->setOptions(' . $this->varExport($discrColumn->getOptions()) . ');'; + $lines[] = '$discrColumn->setNullable(' . $this->varExport($discrColumn->isNullable()) . ');'; + $lines[] = '$discrColumn->setUnique(' . $this->varExport($discrColumn->isUnique()) . ');'; $lines[] = null; $lines[] = '$metadata->setDiscriminatorColumn($discrColumn);'; } if ($metadata->discriminatorMap) { - $lines[] = '$metadata->setDiscriminatorMap(' . $this->_varExport($metadata->discriminatorMap) . ');'; + $lines[] = '$metadata->setDiscriminatorMap(' . $this->varExport($metadata->discriminatorMap) . ');'; } if ($metadata->changeTrackingPolicy) { @@ -165,10 +165,10 @@ public function exportClassMetadata(ClassMetadata $metadata) $lines[] = '$property->setPrecision(' . $property->getPrecision() . ');'; } - $lines[] = '$property->setOptions(' . $this->_varExport($property->getOptions()) . ');'; - $lines[] = '$property->setPrimaryKey(' . $this->_varExport($property->isPrimaryKey()) . ');'; - $lines[] = '$property->setNullable(' . $this->_varExport($property->isNullable()) . ');'; - $lines[] = '$property->setUnique(' . $this->_varExport($property->isUnique()) . ');'; + $lines[] = '$property->setOptions(' . $this->varExport($property->getOptions()) . ');'; + $lines[] = '$property->setPrimaryKey(' . $this->varExport($property->isPrimaryKey()) . ');'; + $lines[] = '$property->setNullable(' . $this->varExport($property->isNullable()) . ');'; + $lines[] = '$property->setUnique(' . $this->varExport($property->isUnique()) . ');'; $lines[] = null; $lines[] = '$metadata->addProperty($property);'; } @@ -207,8 +207,8 @@ public function exportClassMetadata(ClassMetadata $metadata) $lines[] = ' "mappedBy" => "' . $associationMapping['mappedBy'] . '",'; $lines[] = ' "inversedBy" => "' . $associationMapping['inversedBy'] . '",'; $lines[] = ' "joinColumns" => $joinColumns,'; - $lines[] = ' "cascade" => ' . $this->_varExport($cascade) . ','; - $lines[] = ' "orphanRemoval" => ' . $this->_varExport($associationMapping['orphanRemoval']) . ','; + $lines[] = ' "cascade" => ' . $this->varExport($cascade) . ','; + $lines[] = ' "orphanRemoval" => ' . $this->varExport($associationMapping['orphanRemoval']) . ','; $lines[] = '));'; break; @@ -228,14 +228,14 @@ public function exportClassMetadata(ClassMetadata $metadata) $lines[] = ' "fetch" => "' . $associationMapping['fetch'] . '",'; $lines[] = ' "mappedBy" => "' . $associationMapping['mappedBy'] . '",'; $lines[] = ' "inversedBy" => "' . $associationMapping['inversedBy'] . '",'; - $lines[] = ' "orderBy" => ' . $this->_varExport($associationMapping['orderBy']) . ','; + $lines[] = ' "orderBy" => ' . $this->varExport($associationMapping['orderBy']) . ','; if ($associationMapping['type'] === ClassMetadata::MANY_TO_MANY) { $lines[] = ' "joinTable" => $joinTable,'; } - $lines[] = ' "cascade" => ' . $this->_varExport($cascade) . ','; - $lines[] = ' "orphanRemoval" => ' . $this->_varExport($associationMapping['orphanRemoval']) . ','; + $lines[] = ' "cascade" => ' . $this->varExport($cascade) . ','; + $lines[] = ' "orphanRemoval" => ' . $this->varExport($associationMapping['orphanRemoval']) . ','; $lines[] = '));'; break; } @@ -255,7 +255,7 @@ private function exportJoinTable(JoinTableMetadata $joinTable, array &$lines) $lines[] = '$joinTable->setSchema("' . $joinTable->getSchema() . '");'; } - $lines[] = '$joinTable->setOptions(' . $this->_varExport($joinTable->getOptions()) . ');'; + $lines[] = '$joinTable->setOptions(' . $this->varExport($joinTable->getOptions()) . ');'; $this->exportJoinColumns($joinTable->getJoinColumns(), $lines, 'joinColumns'); @@ -287,7 +287,7 @@ private function exportJoinColumns(array $joinColumns, array &$lines, $variableN $lines[] = '$joinColumn->setAliasedName("' . $joinColumn->getAliasedName() . '");'; $lines[] = '$joinColumn->setColumnDefinition("' . $joinColumn->getColumnDefinition() . '");'; $lines[] = '$joinColumn->setOnDelete("' . $joinColumn->getOnDelete() . '");'; - $lines[] = '$joinColumn->setOptions(' . $this->_varExport($joinColumn->getOptions()) . ');'; + $lines[] = '$joinColumn->setOptions(' . $this->varExport($joinColumn->getOptions()) . ');'; $lines[] = '$joinColumn->setNullable("' . $joinColumn->isNullable() . '");'; $lines[] = '$joinColumn->setUnique("' . $joinColumn->isUnique() . '");'; $lines[] = '$joinColumn->setPrimaryKey("' . $joinColumn->isPrimaryKey() . '");'; @@ -301,7 +301,7 @@ private function exportJoinColumns(array $joinColumns, array &$lines, $variableN * * @return string */ - protected function _varExport($var) + protected function varExport($var) { $export = var_export($var, true); $export = str_replace("\n", PHP_EOL . str_repeat(' ', 8), $export); diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index a0ece4a4a8e..ef13219f91b 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -37,7 +37,7 @@ class XmlExporter extends AbstractExporter /** * @var string */ - protected $_extension = '.dcm.xml'; + protected $extension = '.dcm.xml'; /** * {@inheritdoc} @@ -452,7 +452,7 @@ public function exportClassMetadata(ClassMetadata $metadata) } } - return $this->_asXml($xml); + return $this->asXml($xml); } /** @@ -504,7 +504,7 @@ private function exportSequenceInformation(\SimpleXMLElement $identifierXmlNode, * * @return string $xml */ - private function _asXml($simpleXml) + private function asXml($simpleXml) { $dom = new \DOMDocument('1.0', 'UTF-8'); diff --git a/lib/Doctrine/ORM/Tools/Pagination/CountWalker.php b/lib/Doctrine/ORM/Tools/Pagination/CountWalker.php index a8f26001aba..fd3d29cc2cb 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/CountWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/CountWalker.php @@ -56,7 +56,7 @@ public function walkSelectStatement(SelectStatement $AST) throw new \RuntimeException('Cannot count query that uses a HAVING clause. Use the output walkers for pagination'); } - $queryComponents = $this->_getQueryComponents(); + $queryComponents = $this->getQueryComponents(); // Get the root entity and alias from the AST fromClause $from = $AST->fromClause->identificationVariableDeclarations; @@ -80,7 +80,7 @@ public function walkSelectStatement(SelectStatement $AST) ); $pathExpression->type = $pathType; - $distinct = $this->_getQuery()->getHint(self::HINT_DISTINCT); + $distinct = $this->getQuery()->getHint(self::HINT_DISTINCT); $AST->selectClause->selectExpressions = [ new SelectExpression( new AggregateExpression('count', $pathExpression, $distinct), null diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php index 7cb5c8f5b30..a48ffc22ece 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php @@ -49,7 +49,7 @@ class LimitSubqueryWalker extends TreeWalkerAdapter * * @var int */ - private $_aliasCounter = 0; + private $aliasCounter = 0; /** * Walks down a SelectStatement AST node, modifying it to retrieve DISTINCT ids @@ -63,7 +63,7 @@ class LimitSubqueryWalker extends TreeWalkerAdapter */ public function walkSelectStatement(SelectStatement $AST) { - $queryComponents = $this->_getQueryComponents(); + $queryComponents = $this->getQueryComponents(); // Get the root entity and alias from the AST fromClause $from = $AST->fromClause->identificationVariableDeclarations; $fromRoot = reset($from); @@ -90,7 +90,7 @@ public function walkSelectStatement(SelectStatement $AST) ); } - $this->_getQuery()->setHint(self::IDENTIFIER_TYPE, $rootClass->getProperty($identifier)->getType()); + $this->getQuery()->setHint(self::IDENTIFIER_TYPE, $rootClass->getProperty($identifier)->getType()); $pathExpression = new PathExpression( PathExpression::TYPE_STATE_FIELD | PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION, @@ -112,7 +112,7 @@ public function walkSelectStatement(SelectStatement $AST) $AST->selectClause->selectExpressions[] = new SelectExpression( $this->createSelectExpressionItem($item->expression), - '_dctrn_ord' . $this->_aliasCounter++ + '_dctrn_ord' . $this->aliasCounter++ ); } } @@ -131,7 +131,7 @@ private function validate(SelectStatement $AST) // a limit, a fetched to-many join, and an order by condition that // references a column from the fetch joined table. $queryComponents = $this->getQueryComponents(); - $query = $this->_getQuery(); + $query = $this->getQuery(); $from = $AST->fromClause->identificationVariableDeclarations; $fromRoot = reset($from); diff --git a/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php b/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php index 356e5167baf..138829c0605 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php @@ -73,7 +73,7 @@ class WhereInWalker extends TreeWalkerAdapter */ public function walkSelectStatement(SelectStatement $AST) { - $queryComponents = $this->_getQueryComponents(); + $queryComponents = $this->getQueryComponents(); // Get the root entity and alias from the AST fromClause $from = $AST->fromClause->identificationVariableDeclarations; @@ -94,7 +94,7 @@ public function walkSelectStatement(SelectStatement $AST) $pathExpression = new PathExpression(PathExpression::TYPE_STATE_FIELD | PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION, $rootAlias, $identifierFieldName); $pathExpression->type = $pathType; - $count = $this->_getQuery()->getHint(self::HINT_PAGINATOR_ID_COUNT); + $count = $this->getQuery()->getHint(self::HINT_PAGINATOR_ID_COUNT); if ($count > 0) { $arithmeticExpression = new ArithmeticExpression(); diff --git a/tests/Doctrine/Tests/DbalFunctionalTestCase.php b/tests/Doctrine/Tests/DbalFunctionalTestCase.php index 0be58edf342..1775af153e3 100644 --- a/tests/Doctrine/Tests/DbalFunctionalTestCase.php +++ b/tests/Doctrine/Tests/DbalFunctionalTestCase.php @@ -9,12 +9,12 @@ class DbalFunctionalTestCase extends DbalTestCase * * @var \Doctrine\DBAL\Connection|null */ - private static $_sharedConn; + private static $sharedConn; /** * @var \Doctrine\DBAL\Connection */ - protected $_conn; + protected $conn; /** * @return void @@ -22,7 +22,8 @@ class DbalFunctionalTestCase extends DbalTestCase protected function resetSharedConn() { $this->sharedFixture['conn'] = null; - self::$_sharedConn = null; + + self::$sharedConn = null; } /** @@ -31,12 +32,15 @@ protected function resetSharedConn() protected function setUp() { if (isset($this->sharedFixture['conn'])) { - $this->_conn = $this->sharedFixture['conn']; - } else { - if ( ! isset(self::$_sharedConn)) { - self::$_sharedConn = TestUtil::getConnection(); - } - $this->_conn = self::$_sharedConn; + $this->conn = $this->sharedFixture['conn']; + + return; } + + if (! isset(self::$sharedConn)) { + self::$sharedConn = TestUtil::getConnection(); + } + + $this->conn = self::$sharedConn; } } diff --git a/tests/Doctrine/Tests/DbalTypes/CustomIdObjectType.php b/tests/Doctrine/Tests/DbalTypes/CustomIdObjectType.php index 0ebae5dff0e..5985a3d05e6 100644 --- a/tests/Doctrine/Tests/DbalTypes/CustomIdObjectType.php +++ b/tests/Doctrine/Tests/DbalTypes/CustomIdObjectType.php @@ -7,7 +7,7 @@ class CustomIdObjectType extends Type { - const NAME = 'CustomIdObject'; + const NAME = 'CustomIdObject'; /** * {@inheritdoc} diff --git a/tests/Doctrine/Tests/Mocks/CacheKeyMock.php b/tests/Doctrine/Tests/Mocks/CacheKeyMock.php index f87bc38b174..ceef866ae27 100644 --- a/tests/Doctrine/Tests/Mocks/CacheKeyMock.php +++ b/tests/Doctrine/Tests/Mocks/CacheKeyMock.php @@ -12,7 +12,7 @@ class CacheKeyMock extends CacheKey { /** - * @param string $hash The string hash that represend this cache key + * @param string $hash The string hash that represent this cache key */ function __construct($hash) { diff --git a/tests/Doctrine/Tests/Mocks/ClassMetadataMock.php b/tests/Doctrine/Tests/Mocks/ClassMetadataMock.php index 599c4996f98..d1703539a81 100644 --- a/tests/Doctrine/Tests/Mocks/ClassMetadataMock.php +++ b/tests/Doctrine/Tests/Mocks/ClassMetadataMock.php @@ -16,6 +16,6 @@ class ClassMetadataMock extends ClassMetadata */ public function setIdGeneratorType($type) { - $this->_generatorType = $type; + $this->generatorType = $type; } } diff --git a/tests/Doctrine/Tests/Mocks/ConnectionMock.php b/tests/Doctrine/Tests/Mocks/ConnectionMock.php index af8fc252e99..0b300b601f7 100644 --- a/tests/Doctrine/Tests/Mocks/ConnectionMock.php +++ b/tests/Doctrine/Tests/Mocks/ConnectionMock.php @@ -13,37 +13,37 @@ class ConnectionMock extends Connection /** * @var mixed */ - private $_fetchOneResult; + private $fetchOneResult; /** * @var \Exception|null */ - private $_fetchOneException; + private $fetchOneException; /** * @var Statement|null */ - private $_queryResult; + private $queryResult; /** * @var DatabasePlatformMock */ - private $_platformMock; + private $platformMock; /** * @var int */ - private $_lastInsertId = 0; + private $lastInsertId = 0; /** * @var array */ - private $_inserts = []; + private $inserts = []; /** * @var array */ - private $_executeUpdates = []; + private $executeUpdates = []; /** * @param array $params @@ -53,12 +53,12 @@ class ConnectionMock extends Connection */ public function __construct(array $params, $driver, $config = null, $eventManager = null) { - $this->_platformMock = new DatabasePlatformMock(); + $this->platformMock = new DatabasePlatformMock(); parent::__construct($params, $driver, $config, $eventManager); // Override possible assignment of platform to database platform mock - $this->_platform = $this->_platformMock; + $this->platform = $this->platformMock; } /** @@ -66,7 +66,7 @@ public function __construct(array $params, $driver, $config = null, $eventManage */ public function getDatabasePlatform() { - return $this->_platformMock; + return $this->platformMock; } /** @@ -74,7 +74,7 @@ public function getDatabasePlatform() */ public function insert($tableName, array $data, array $types = []) { - $this->_inserts[$tableName][] = $data; + $this->inserts[$tableName][] = $data; } /** @@ -82,7 +82,7 @@ public function insert($tableName, array $data, array $types = []) */ public function executeUpdate($query, array $params = [], array $types = []) { - $this->_executeUpdates[] = ['query' => $query, 'params' => $params, 'types' => $types]; + $this->executeUpdates[] = ['query' => $query, 'params' => $params, 'types' => $types]; } /** @@ -90,7 +90,7 @@ public function executeUpdate($query, array $params = [], array $types = []) */ public function lastInsertId($seqName = null) { - return $this->_lastInsertId; + return $this->lastInsertId; } /** @@ -98,11 +98,11 @@ public function lastInsertId($seqName = null) */ public function fetchColumn($statement, array $params = [], $colnum = 0, array $types = []) { - if (null !== $this->_fetchOneException) { - throw $this->_fetchOneException; + if (null !== $this->fetchOneException) { + throw $this->fetchOneException; } - return $this->_fetchOneResult; + return $this->fetchOneResult; } /** @@ -110,7 +110,7 @@ public function fetchColumn($statement, array $params = [], $colnum = 0, array $ */ public function query() : Statement { - return $this->_queryResult; + return $this->queryResult; } /** @@ -133,7 +133,7 @@ public function quote($input, $type = null) */ public function setFetchOneResult($fetchOneResult) { - $this->_fetchOneResult = $fetchOneResult; + $this->fetchOneResult = $fetchOneResult; } /** @@ -143,7 +143,7 @@ public function setFetchOneResult($fetchOneResult) */ public function setFetchOneException(\Exception $exception = null) { - $this->_fetchOneException = $exception; + $this->fetchOneException = $exception; } /** @@ -153,7 +153,7 @@ public function setFetchOneException(\Exception $exception = null) */ public function setDatabasePlatform($platform) { - $this->_platformMock = $platform; + $this->platformMock = $platform; } /** @@ -163,7 +163,7 @@ public function setDatabasePlatform($platform) */ public function setLastInsertId($id) { - $this->_lastInsertId = $id; + $this->lastInsertId = $id; } /** @@ -171,7 +171,7 @@ public function setLastInsertId($id) */ public function setQueryResult(Statement $result) { - $this->_queryResult = $result; + $this->queryResult = $result; } /** @@ -179,7 +179,7 @@ public function setQueryResult(Statement $result) */ public function getInserts() { - return $this->_inserts; + return $this->inserts; } /** @@ -187,7 +187,7 @@ public function getInserts() */ public function getExecuteUpdates() { - return $this->_executeUpdates; + return $this->executeUpdates; } /** @@ -195,7 +195,7 @@ public function getExecuteUpdates() */ public function reset() { - $this->_inserts = []; - $this->_lastInsertId = 0; + $this->inserts = []; + $this->lastInsertId = 0; } } diff --git a/tests/Doctrine/Tests/Mocks/DatabasePlatformMock.php b/tests/Doctrine/Tests/Mocks/DatabasePlatformMock.php index 60807af5ba4..6a8bfc007e5 100644 --- a/tests/Doctrine/Tests/Mocks/DatabasePlatformMock.php +++ b/tests/Doctrine/Tests/Mocks/DatabasePlatformMock.php @@ -12,24 +12,24 @@ class DatabasePlatformMock extends AbstractPlatform /** * @var string */ - private $_sequenceNextValSql = ""; + private $sequenceNextValSql = ""; /** * @var bool */ - private $_prefersIdentityColumns = true; + private $prefersIdentityColumns = true; /** * @var bool */ - private $_prefersSequences = false; + private $prefersSequences = false; /** * {@inheritdoc} */ public function prefersIdentityColumns() { - return $this->_prefersIdentityColumns; + return $this->prefersIdentityColumns; } /** @@ -37,7 +37,7 @@ public function prefersIdentityColumns() */ public function prefersSequences() { - return $this->_prefersSequences; + return $this->prefersSequences; } /** @@ -45,7 +45,7 @@ public function prefersSequences() */ public function getSequenceNextValSQL($sequenceName) { - return $this->_sequenceNextValSql; + return $this->sequenceNextValSql; } /** @@ -106,7 +106,7 @@ public function getClobTypeDeclarationSQL(array $field) */ public function setPrefersIdentityColumns($bool) { - $this->_prefersIdentityColumns = $bool; + $this->prefersIdentityColumns = $bool; } /** @@ -116,7 +116,7 @@ public function setPrefersIdentityColumns($bool) */ public function setPrefersSequences($bool) { - $this->_prefersSequences = $bool; + $this->prefersSequences = $bool; } /** @@ -126,7 +126,7 @@ public function setPrefersSequences($bool) */ public function setSequenceNextValSql($sql) { - $this->_sequenceNextValSql = $sql; + $this->sequenceNextValSql = $sql; } /** diff --git a/tests/Doctrine/Tests/Mocks/DriverMock.php b/tests/Doctrine/Tests/Mocks/DriverMock.php index c805f0bf9ff..f98cbf93e97 100644 --- a/tests/Doctrine/Tests/Mocks/DriverMock.php +++ b/tests/Doctrine/Tests/Mocks/DriverMock.php @@ -15,12 +15,12 @@ class DriverMock implements Driver /** * @var \Doctrine\DBAL\Platforms\AbstractPlatform|null */ - private $_platformMock; + private $platformMock; /** * @var \Doctrine\DBAL\Schema\AbstractSchemaManager|null */ - private $_schemaManagerMock; + private $schemaManagerMock; /** * {@inheritdoc} @@ -35,10 +35,10 @@ public function connect(array $params, $username = null, $password = null, array */ public function getDatabasePlatform() { - if ( ! $this->_platformMock) { - $this->_platformMock = new DatabasePlatformMock; + if ( ! $this->platformMock) { + $this->platformMock = new DatabasePlatformMock; } - return $this->_platformMock; + return $this->platformMock; } /** @@ -46,10 +46,10 @@ public function getDatabasePlatform() */ public function getSchemaManager(Connection $conn) { - if ($this->_schemaManagerMock == null) { + if ($this->schemaManagerMock == null) { return new SchemaManagerMock($conn); } else { - return $this->_schemaManagerMock; + return $this->schemaManagerMock; } } @@ -62,7 +62,7 @@ public function getSchemaManager(Connection $conn) */ public function setDatabasePlatform(AbstractPlatform $platform) { - $this->_platformMock = $platform; + $this->platformMock = $platform; } /** @@ -72,7 +72,7 @@ public function setDatabasePlatform(AbstractPlatform $platform) */ public function setSchemaManager(AbstractSchemaManager $sm) { - $this->_schemaManagerMock = $sm; + $this->schemaManagerMock = $sm; } /** diff --git a/tests/Doctrine/Tests/Mocks/EntityManagerMock.php b/tests/Doctrine/Tests/Mocks/EntityManagerMock.php index f7af70227dd..cc165793399 100644 --- a/tests/Doctrine/Tests/Mocks/EntityManagerMock.php +++ b/tests/Doctrine/Tests/Mocks/EntityManagerMock.php @@ -14,19 +14,19 @@ class EntityManagerMock extends EntityManager /** * @var \Doctrine\ORM\UnitOfWork|null */ - private $_uowMock; + private $uowMock; /** * @var \Doctrine\ORM\Proxy\ProxyFactory|null */ - private $_proxyFactoryMock; + private $proxyFactoryMock; /** * {@inheritdoc} */ public function getUnitOfWork() { - return isset($this->_uowMock) ? $this->_uowMock : parent::getUnitOfWork(); + return isset($this->uowMock) ? $this->uowMock : parent::getUnitOfWork(); } /* Mock API */ @@ -40,7 +40,7 @@ public function getUnitOfWork() */ public function setUnitOfWork($uow) { - $this->_uowMock = $uow; + $this->uowMock = $uow; } /** @@ -50,7 +50,7 @@ public function setUnitOfWork($uow) */ public function setProxyFactory($proxyFactory) { - $this->_proxyFactoryMock = $proxyFactory; + $this->proxyFactoryMock = $proxyFactory; } /** @@ -58,7 +58,7 @@ public function setProxyFactory($proxyFactory) */ public function getProxyFactory() { - return isset($this->_proxyFactoryMock) ? $this->_proxyFactoryMock : parent::getProxyFactory(); + return isset($this->proxyFactoryMock) ? $this->proxyFactoryMock : parent::getProxyFactory(); } /** diff --git a/tests/Doctrine/Tests/Mocks/HydratorMockStatement.php b/tests/Doctrine/Tests/Mocks/HydratorMockStatement.php index 4f6df40e59d..f425d5f8347 100644 --- a/tests/Doctrine/Tests/Mocks/HydratorMockStatement.php +++ b/tests/Doctrine/Tests/Mocks/HydratorMockStatement.php @@ -15,7 +15,7 @@ class HydratorMockStatement implements \IteratorAggregate, Statement /** * @var array */ - private $_resultSet; + private $resultSet; /** * Creates a new mock statement that will serve the provided fake result set to clients. @@ -24,7 +24,7 @@ class HydratorMockStatement implements \IteratorAggregate, Statement */ public function __construct(array $resultSet) { - $this->_resultSet = $resultSet; + $this->resultSet = $resultSet; } /** @@ -37,7 +37,7 @@ public function __construct(array $resultSet) */ public function fetchAll($fetchMode = null, $fetchArgument = null, $ctorArgs = null) { - return $this->_resultSet; + return $this->resultSet; } /** @@ -45,7 +45,7 @@ public function fetchAll($fetchMode = null, $fetchArgument = null, $ctorArgs = n */ public function fetchColumn($columnNumber = 0) { - $row = current($this->_resultSet); + $row = current($this->resultSet); if ( ! is_array($row)) return false; $val = array_shift($row); return $val !== null ? $val : false; @@ -56,8 +56,8 @@ public function fetchColumn($columnNumber = 0) */ public function fetch($fetchStyle = null, $cursorOrientation = \PDO::FETCH_ORI_NEXT, $cursorOffset = 0) { - $current = current($this->_resultSet); - next($this->_resultSet); + $current = current($this->resultSet); + next($this->resultSet); return $current; } @@ -123,7 +123,7 @@ public function rowCount() */ public function getIterator() { - return $this->_resultSet; + return $this->resultSet; } /** diff --git a/tests/Doctrine/Tests/Mocks/SequenceMock.php b/tests/Doctrine/Tests/Mocks/SequenceMock.php index e8dda12b5a7..59931f720e3 100644 --- a/tests/Doctrine/Tests/Mocks/SequenceMock.php +++ b/tests/Doctrine/Tests/Mocks/SequenceMock.php @@ -13,14 +13,14 @@ class SequenceMock extends SequenceGenerator /** * @var int */ - private $_sequenceNumber = 0; + private $sequenceNumber = 0; /** * {@inheritdoc} */ public function generate(EntityManager $em, $entity) { - return $this->_sequenceNumber++; + return $this->sequenceNumber++; } /* Mock API */ @@ -30,6 +30,6 @@ public function generate(EntityManager $em, $entity) */ public function reset() { - $this->_sequenceNumber = 0; + $this->sequenceNumber = 0; } } diff --git a/tests/Doctrine/Tests/Mocks/StatementArrayMock.php b/tests/Doctrine/Tests/Mocks/StatementArrayMock.php index ed6ea4fdf6c..73af76c8d94 100644 --- a/tests/Doctrine/Tests/Mocks/StatementArrayMock.php +++ b/tests/Doctrine/Tests/Mocks/StatementArrayMock.php @@ -12,21 +12,21 @@ class StatementArrayMock extends StatementMock /** * @var array */ - private $_result; + private $result; public function __construct($result) { - $this->_result = $result; + $this->result = $result; } public function getIterator() { - return new \ArrayIterator($this->_result); + return new \ArrayIterator($this->result); } public function columnCount() { - $row = reset($this->_result); + $row = reset($this->result); if ($row) { return count($row); } else { @@ -36,22 +36,22 @@ public function columnCount() public function fetchAll($fetchMode = null, $fetchArgument = null, $ctorArgs = null) { - return $this->_result; + return $this->result; } public function fetch($fetchMode = null, $cursorOrientation = \PDO::FETCH_ORI_NEXT, $cursorOffset = 0) { - $current = current($this->_result); - next($this->_result); + $current = current($this->result); + next($this->result); return $current; } public function fetchColumn($columnIndex = 0) { - $current = current($this->_result); + $current = current($this->result); if ($current) { - next($this->_result); + next($this->result); return reset($current); } else { return false; @@ -60,6 +60,6 @@ public function fetchColumn($columnIndex = 0) public function rowCount() { - return count($this->_result); + return count($this->result); } } diff --git a/tests/Doctrine/Tests/Mocks/UnitOfWorkMock.php b/tests/Doctrine/Tests/Mocks/UnitOfWorkMock.php index f11f7152322..0cf63ed859a 100644 --- a/tests/Doctrine/Tests/Mocks/UnitOfWorkMock.php +++ b/tests/Doctrine/Tests/Mocks/UnitOfWorkMock.php @@ -12,20 +12,20 @@ class UnitOfWorkMock extends UnitOfWork /** * @var array */ - private $_mockDataChangeSets = []; + private $mockDataChangeSets = []; /** * @var array|null */ - private $_persisterMock; + private $persisterMock; /** * {@inheritdoc} */ public function getEntityPersister($entityName) { - return isset($this->_persisterMock[$entityName]) - ? $this->_persisterMock[$entityName] + return isset($this->persisterMock[$entityName]) + ? $this->persisterMock[$entityName] : parent::getEntityPersister($entityName); } @@ -36,8 +36,8 @@ public function & getEntityChangeSet($entity) { $oid = spl_object_hash($entity); - if (isset($this->_mockDataChangeSets[$oid])) { - return $this->_mockDataChangeSets[$oid]; + if (isset($this->mockDataChangeSets[$oid])) { + return $this->mockDataChangeSets[$oid]; } $data = parent::getEntityChangeSet($entity); @@ -58,7 +58,7 @@ public function & getEntityChangeSet($entity) */ public function setEntityPersister($entityName, $persister) { - $this->_persisterMock[$entityName] = $persister; + $this->persisterMock[$entityName] = $persister; } /** @@ -66,6 +66,6 @@ public function setEntityPersister($entityName, $persister) */ public function setOriginalEntityData($entity, array $originalData) { - $this->_originalEntityData[spl_object_hash($entity)] = $originalData; + $this->originalEntityData[spl_object_hash($entity)] = $originalData; } } diff --git a/tests/Doctrine/Tests/Models/DDC3597/DDC3597Root.php b/tests/Doctrine/Tests/Models/DDC3597/DDC3597Root.php index 3bdb67f13d7..ba918789fff 100644 --- a/tests/Doctrine/Tests/Models/DDC3597/DDC3597Root.php +++ b/tests/Doctrine/Tests/Models/DDC3597/DDC3597Root.php @@ -41,7 +41,7 @@ abstract class DDC3597Root { * * @PrePersist */ - public function _prePersist() { + public function prePersist() { $this->updatedAt = $this->createdAt = new \DateTime(); } @@ -50,7 +50,7 @@ public function _prePersist() { * * @PreUpdate */ - public function _preUpdate() { + public function preUpdate() { $this->updatedAt = new \DateTime(); } diff --git a/tests/Doctrine/Tests/Models/Legacy/LegacyArticle.php b/tests/Doctrine/Tests/Models/Legacy/LegacyArticle.php index fb754462e7c..a40c7219c87 100644 --- a/tests/Doctrine/Tests/Models/Legacy/LegacyArticle.php +++ b/tests/Doctrine/Tests/Models/Legacy/LegacyArticle.php @@ -13,21 +13,23 @@ class LegacyArticle * @Column(name="iArticleId", type="integer") * @GeneratedValue(strategy="AUTO") */ - public $_id; + public $id; /** * @Column(name="sTopic", type="string", length=255) */ - public $_topic; + public $topic; /** * @Column(name="sText", type="text") */ - public $_text; + public $text; /** - * @ManyToOne(targetEntity="LegacyUser", inversedBy="_articles") + * @ManyToOne(targetEntity="LegacyUser", inversedBy="articles") * @JoinColumn(name="iUserId", referencedColumnName="iUserId") */ - public $_user; - public function setAuthor(LegacyUser $author) { - $this->_user = $author; + public $user; + + public function setAuthor(LegacyUser $author) + { + $this->user = $author; } } diff --git a/tests/Doctrine/Tests/Models/Legacy/LegacyCar.php b/tests/Doctrine/Tests/Models/Legacy/LegacyCar.php index 4b955be914b..46637367e72 100644 --- a/tests/Doctrine/Tests/Models/Legacy/LegacyCar.php +++ b/tests/Doctrine/Tests/Models/Legacy/LegacyCar.php @@ -13,27 +13,27 @@ class LegacyCar * @GeneratedValue * @Column(name="iCarId", type="integer", nullable=false) */ - public $_id; + public $id; /** - * @ManyToMany(targetEntity="LegacyUser", mappedBy="_cars") + * @ManyToMany(targetEntity="LegacyUser", mappedBy="cars") */ - public $_users; + public $users; /** * @Column(name="sDescription", type="string", length=255, unique=true) */ - public $_description; + public $description; function getDescription() { - return $this->_description; + return $this->description; } public function addUser(LegacyUser $user) { - $this->_users[] = $user; + $this->users[] = $user; } public function getUsers() { - return $this->_users; + return $this->users; } } diff --git a/tests/Doctrine/Tests/Models/Legacy/LegacyUser.php b/tests/Doctrine/Tests/Models/Legacy/LegacyUser.php index 3e3deedb153..d4f35bf3a74 100644 --- a/tests/Doctrine/Tests/Models/Legacy/LegacyUser.php +++ b/tests/Doctrine/Tests/Models/Legacy/LegacyUser.php @@ -15,66 +15,68 @@ class LegacyUser * @GeneratedValue * @Column(name="iUserId", type="integer", nullable=false) */ - public $_id; + public $id; /** * @Column(name="sUsername", type="string", length=255, unique=true) */ - public $_username; + public $username; /** * @Column(type="string", length=255, name="name") */ - public $_name; + public $name; /** - * @OneToMany(targetEntity="LegacyArticle", mappedBy="_user") + * @OneToMany(targetEntity="LegacyArticle", mappedBy="user") */ - public $_articles; + public $articles; /** - * @OneToMany(targetEntity="LegacyUserReference", mappedBy="_source", cascade={"remove"}) + * @OneToMany(targetEntity="LegacyUserReference", mappedBy="source", cascade={"remove"}) */ - public $_references; + public $references; /** - * @ManyToMany(targetEntity="LegacyCar", inversedBy="_users", cascade={"persist", "merge"}) + * @ManyToMany(targetEntity="LegacyCar", inversedBy="users", cascade={"persist", "merge"}) * @JoinTable(name="legacy_users_cars", * joinColumns={@JoinColumn(name="iUserId", referencedColumnName="iUserId")}, * inverseJoinColumns={@JoinColumn(name="iCarId", referencedColumnName="iCarId")} * ) */ - public $_cars; - public function __construct() { - $this->_articles = new ArrayCollection; - $this->_references = new ArrayCollection; - $this->_cars = new ArrayCollection; + public $cars; + + public function __construct() + { + $this->articles = new ArrayCollection; + $this->references = new ArrayCollection; + $this->cars = new ArrayCollection; } public function getId() { - return $this->_id; + return $this->id; } public function getUsername() { - return $this->_username; + return $this->username; } public function addArticle(LegacyArticle $article) { - $this->_articles[] = $article; + $this->articles[] = $article; $article->setAuthor($this); } public function addReference($reference) { - $this->_references[] = $reference; + $this->references[] = $reference; } public function references() { - return $this->_references; + return $this->references; } public function addCar(LegacyCar $car) { - $this->_cars[] = $car; + $this->cars[] = $car; $car->addUser($this); } public function getCars() { - return $this->_cars; + return $this->cars; } } diff --git a/tests/Doctrine/Tests/Models/Legacy/LegacyUserReference.php b/tests/Doctrine/Tests/Models/Legacy/LegacyUserReference.php index 8dc20db2323..f06a990ff87 100644 --- a/tests/Doctrine/Tests/Models/Legacy/LegacyUserReference.php +++ b/tests/Doctrine/Tests/Models/Legacy/LegacyUserReference.php @@ -10,56 +10,56 @@ class LegacyUserReference { /** * @Id - * @ManyToOne(targetEntity="LegacyUser", inversedBy="_references") + * @ManyToOne(targetEntity="LegacyUser", inversedBy="references") * @JoinColumn(name="iUserIdSource", referencedColumnName="iUserId") */ - private $_source; + private $source; /** * @Id * @ManyToOne(targetEntity="LegacyUser") * @JoinColumn(name="iUserIdTarget", referencedColumnName="iUserId") */ - private $_target; + private $target; /** * @column(type="string", name="description") */ - private $_description; + private $description; /** * @column(type="datetime", name="created") */ - private $_created; + private $created; public function __construct($source, $target, $description) { $source->addReference($this); $target->addReference($this); - $this->_source = $source; - $this->_target = $target; - $this->_description = $description; - $this->_created = new \DateTime("now"); + $this->source = $source; + $this->target = $target; + $this->description = $description; + $this->created = new \DateTime("now"); } public function source() { - return $this->_source; + return $this->source; } public function target() { - return $this->_target; + return $this->target; } public function setDescription($desc) { - $this->_description = $desc; + $this->description = $desc; } public function getDescription() { - return $this->_description; + return $this->description; } } diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php index 0894e89dd74..f181193633e 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php @@ -52,13 +52,13 @@ protected function setUp() $this->enableSecondLevelCache(); parent::setUp(); - $this->em = $this->_getTestEntityManager(); - $this->regionsConfig = new RegionsConfiguration; - $arguments = [$this->regionsConfig, $this->getSharedSecondLevelCacheDriverImpl()]; - $this->factory = $this->getMockBuilder(DefaultCacheFactory::class) - ->setMethods(['getRegion']) - ->setConstructorArgs($arguments) - ->getMock(); + $this->em = $this->getTestEntityManager(); + $this->regionsConfig = new RegionsConfiguration; + $arguments = [$this->regionsConfig, $this->getSharedSecondLevelCacheDriverImpl()]; + $this->factory = $this->getMockBuilder(DefaultCacheFactory::class) + ->setMethods(['getRegion']) + ->setConstructorArgs($arguments) + ->getMock(); } public function testImplementsCacheFactory() diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php index ecbb7fa45a4..71d7630b119 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php @@ -33,7 +33,7 @@ protected function setUp() parent::enableSecondLevelCache(); parent::setUp(); - $this->em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); $this->cache = new DefaultCache($this->em); } diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCollectionHydratorTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCollectionHydratorTest.php index 2a11972b69a..6e3c5082e2f 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCollectionHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCollectionHydratorTest.php @@ -29,8 +29,8 @@ protected function setUp() $this->enableSecondLevelCache(); parent::setUp(); - $targetPersister = $this->_em->getUnitOfWork()->getEntityPersister(City::class); - $this->structure = new DefaultCollectionHydrator($this->_em, $targetPersister); + $targetPersister = $this->em->getUnitOfWork()->getEntityPersister(City::class); + $this->structure = new DefaultCollectionHydrator($this->em, $targetPersister); } public function testImplementsCollectionEntryStructure() @@ -40,7 +40,7 @@ public function testImplementsCollectionEntryStructure() public function testLoadCacheCollection() { - $targetRegion = $this->_em->getCache()->getEntityCacheRegion(City::class); + $targetRegion = $this->em->getCache()->getEntityCacheRegion(City::class); $entry = new CollectionCacheEntry( [ new EntityCacheKey(City::class, ['id'=>31]), @@ -53,10 +53,10 @@ public function testLoadCacheCollection() $targetRegion->put(new EntityCacheKey(City::class, ['id'=>32]), new EntityCacheEntry(City::class, ['id'=>32, 'name'=>'Bar'] )); - $sourceClass = $this->_em->getClassMetadata(State::class); - $targetClass = $this->_em->getClassMetadata(City::class); + $sourceClass = $this->em->getClassMetadata(State::class); + $targetClass = $this->em->getClassMetadata(City::class); $key = new CollectionCacheKey($sourceClass->name, 'cities', ['id'=>21]); - $collection = new PersistentCollection($this->_em, $targetClass, new ArrayCollection()); + $collection = new PersistentCollection($this->em, $targetClass, new ArrayCollection()); $list = $this->structure->loadCacheEntry($sourceClass, $key, $entry, $collection); self::assertNotNull($list); @@ -75,8 +75,8 @@ public function testLoadCacheCollection() self::assertEquals(32, $list[1]->getId()); self::assertEquals($list[0]->getId(), $collection[0]->getId()); self::assertEquals($list[1]->getId(), $collection[1]->getId()); - self::assertEquals(UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($collection[0])); - self::assertEquals(UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($collection[1])); + self::assertEquals(UnitOfWork::STATE_MANAGED, $this->em->getUnitOfWork()->getEntityState($collection[0])); + self::assertEquals(UnitOfWork::STATE_MANAGED, $this->em->getUnitOfWork()->getEntityState($collection[1])); } } diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php index b9e518cd265..2bfce6d4eac 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php @@ -31,13 +31,13 @@ protected function setUp() { parent::setUp(); - $this->em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); $this->structure = new DefaultEntityHydrator($this->em); } public function testImplementsEntityEntryStructure() { - self::assertInstanceOf('\Doctrine\ORM\Cache\EntityHydrator', $this->structure); + self::assertInstanceOf('Doctrine\ORM\Cache\EntityHydrator', $this->structure); } public function testCreateEntity() diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php index f1f2e3f947e..ed6b66568c7 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php @@ -53,7 +53,7 @@ protected function setUp() $this->enableSecondLevelCache(); - $this->em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); $this->region = new CacheRegionMock(); $this->queryCache = new DefaultQueryCache($this->em, $this->region); $this->cacheFactory = new CacheFactoryDefaultQueryCacheTest($this->queryCache, $this->region); diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php index 68d84bb2edb..c4d3b444389 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php @@ -80,7 +80,7 @@ protected function setUp() $this->enableSecondLevelCache(); parent::setUp(); - $this->em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); $this->region = $this->createRegion(); $this->collectionPersister = $this->getMockBuilder(CollectionPersister::class) ->setMethods($this->collectionPersisterMockMethods) diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php index e3311828fd6..aa857be60cb 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php @@ -97,7 +97,7 @@ protected function setUp() $this->enableSecondLevelCache(); parent::setUp(); - $this->em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); $this->region = $this->createRegion(); $this->entityPersister = $this->getMockBuilder(EntityPersister::class) ->setMethods($this->entityPersisterMockMethods) diff --git a/tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php b/tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php index 256fdd3d6ab..b658b846633 100644 --- a/tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php +++ b/tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php @@ -15,11 +15,11 @@ */ class CommitOrderCalculatorTest extends OrmTestCase { - private $_calc; + private $calc; protected function setUp() { - $this->_calc = new CommitOrderCalculator(); + $this->calc = new CommitOrderCalculator(); } public function testCommitOrdering1() @@ -30,18 +30,18 @@ public function testCommitOrdering1() $class4 = new ClassMetadata(NodeClass4::class); $class5 = new ClassMetadata(NodeClass5::class); - $this->_calc->addNode($class1->name, $class1); - $this->_calc->addNode($class2->name, $class2); - $this->_calc->addNode($class3->name, $class3); - $this->_calc->addNode($class4->name, $class4); - $this->_calc->addNode($class5->name, $class5); + $this->calc->addNode($class1->name, $class1); + $this->calc->addNode($class2->name, $class2); + $this->calc->addNode($class3->name, $class3); + $this->calc->addNode($class4->name, $class4); + $this->calc->addNode($class5->name, $class5); - $this->_calc->addDependency($class1->name, $class2->name, 1); - $this->_calc->addDependency($class2->name, $class3->name, 1); - $this->_calc->addDependency($class3->name, $class4->name, 1); - $this->_calc->addDependency($class5->name, $class1->name, 1); + $this->calc->addDependency($class1->name, $class2->name, 1); + $this->calc->addDependency($class2->name, $class3->name, 1); + $this->calc->addDependency($class3->name, $class4->name, 1); + $this->calc->addDependency($class5->name, $class1->name, 1); - $sorted = $this->_calc->sort(); + $sorted = $this->calc->sort(); // There is only 1 valid ordering for this constellation $correctOrder = [$class5, $class1, $class2, $class3, $class4]; @@ -54,13 +54,13 @@ public function testCommitOrdering2() $class1 = new ClassMetadata(NodeClass1::class); $class2 = new ClassMetadata(NodeClass2::class); - $this->_calc->addNode($class1->name, $class1); - $this->_calc->addNode($class2->name, $class2); + $this->calc->addNode($class1->name, $class1); + $this->calc->addNode($class2->name, $class2); - $this->_calc->addDependency($class1->name, $class2->name, 0); - $this->_calc->addDependency($class2->name, $class1->name, 1); + $this->calc->addDependency($class1->name, $class2->name, 0); + $this->calc->addDependency($class2->name, $class1->name, 1); - $sorted = $this->_calc->sort(); + $sorted = $this->calc->sort(); // There is only 1 valid ordering for this constellation $correctOrder = [$class2, $class1]; diff --git a/tests/Doctrine/Tests/ORM/EntityManagerTest.php b/tests/Doctrine/Tests/ORM/EntityManagerTest.php index 5f8887ea621..0986e16491d 100644 --- a/tests/Doctrine/Tests/ORM/EntityManagerTest.php +++ b/tests/Doctrine/Tests/ORM/EntityManagerTest.php @@ -26,12 +26,12 @@ class EntityManagerTest extends OrmTestCase /** * @var EntityManager */ - private $_em; + private $em; function setUp() { parent::setUp(); - $this->_em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); } /** @@ -39,45 +39,45 @@ function setUp() */ public function testIsOpen() { - self::assertTrue($this->_em->isOpen()); - $this->_em->close(); - self::assertFalse($this->_em->isOpen()); + self::assertTrue($this->em->isOpen()); + $this->em->close(); + self::assertFalse($this->em->isOpen()); } public function testGetConnection() { - self::assertInstanceOf(Connection::class, $this->_em->getConnection()); + self::assertInstanceOf(Connection::class, $this->em->getConnection()); } public function testGetMetadataFactory() { - self::assertInstanceOf(ClassMetadataFactory::class, $this->_em->getMetadataFactory()); + self::assertInstanceOf(ClassMetadataFactory::class, $this->em->getMetadataFactory()); } public function testGetConfiguration() { - self::assertInstanceOf(Configuration::class, $this->_em->getConfiguration()); + self::assertInstanceOf(Configuration::class, $this->em->getConfiguration()); } public function testGetUnitOfWork() { - self::assertInstanceOf(UnitOfWork::class, $this->_em->getUnitOfWork()); + self::assertInstanceOf(UnitOfWork::class, $this->em->getUnitOfWork()); } public function testGetProxyFactory() { - self::assertInstanceOf(ProxyFactory::class, $this->_em->getProxyFactory()); + self::assertInstanceOf(ProxyFactory::class, $this->em->getProxyFactory()); } public function testGetEventManager() { - self::assertInstanceOf(EventManager::class, $this->_em->getEventManager()); + self::assertInstanceOf(EventManager::class, $this->em->getEventManager()); } public function testCreateNativeQuery() { $rsm = new ResultSetMapping(); - $query = $this->_em->createNativeQuery('SELECT foo', $rsm); + $query = $this->em->createNativeQuery('SELECT foo', $rsm); self::assertSame('SELECT foo', $query->getSql()); } @@ -88,21 +88,21 @@ public function testCreateNativeQuery() public function testCreateNamedNativeQuery() { $rsm = new ResultSetMapping(); - $this->_em->getConfiguration()->addNamedNativeQuery('foo', 'SELECT foo', $rsm); + $this->em->getConfiguration()->addNamedNativeQuery('foo', 'SELECT foo', $rsm); - $query = $this->_em->createNamedNativeQuery('foo'); + $query = $this->em->createNamedNativeQuery('foo'); self::assertInstanceOf(NativeQuery::class, $query); } public function testCreateQueryBuilder() { - self::assertInstanceOf(QueryBuilder::class, $this->_em->createQueryBuilder()); + self::assertInstanceOf(QueryBuilder::class, $this->em->createQueryBuilder()); } public function testCreateQueryBuilderAliasValid() { - $q = $this->_em->createQueryBuilder() + $q = $this->em->createQueryBuilder() ->select('u')->from(CmsUser::class, 'u'); $q2 = clone $q; @@ -116,20 +116,20 @@ public function testCreateQueryBuilderAliasValid() public function testCreateQuery_DqlIsOptional() { - self::assertInstanceOf(Query::class, $this->_em->createQuery()); + self::assertInstanceOf(Query::class, $this->em->createQuery()); } public function testGetPartialReference() { - $user = $this->_em->getPartialReference(CmsUser::class, 42); - self::assertTrue($this->_em->contains($user)); + $user = $this->em->getPartialReference(CmsUser::class, 42); + self::assertTrue($this->em->contains($user)); self::assertEquals(42, $user->id); self::assertNull($user->getName()); } public function testCreateQuery() { - $q = $this->_em->createQuery('SELECT 1'); + $q = $this->em->createQuery('SELECT 1'); self::assertInstanceOf(Query::class, $q); self::assertEquals('SELECT 1', $q->getDql()); } @@ -139,9 +139,9 @@ public function testCreateQuery() */ public function testCreateNamedQuery() { - $this->_em->getConfiguration()->addNamedQuery('foo', 'SELECT 1'); + $this->em->getConfiguration()->addNamedQuery('foo', 'SELECT 1'); - $query = $this->_em->createNamedQuery('foo'); + $query = $this->em->createNamedQuery('foo'); self::assertInstanceOf(Query::class, $query); self::assertEquals('SELECT 1', $query->getDql()); } @@ -164,7 +164,7 @@ public function testThrowsExceptionOnNonObjectValues($methodName) { $this->expectException(ORMInvalidArgumentException::class); $this->expectExceptionMessage('EntityManager#' . $methodName . '() expects parameter 1 to be an entity object, NULL given.'); - $this->_em->$methodName(null); + $this->em->$methodName(null); } static public function dataAffectedByErrorIfClosedException() @@ -187,8 +187,8 @@ public function testAffectedByErrorIfClosedException($methodName) $this->expectException(ORMException::class); $this->expectExceptionMessage('closed'); - $this->_em->close(); - $this->_em->$methodName(new \stdClass()); + $this->em->close(); + $this->em->$methodName(new \stdClass()); } public function dataToBeReturnedByTransactional() @@ -207,7 +207,7 @@ public function testTransactionalAcceptsReturn($value) { self::assertSame( $value, - $this->_em->transactional(function ($em) use ($value) { + $this->em->transactional(function ($em) use ($value) { return $value; }) ); @@ -215,12 +215,12 @@ public function testTransactionalAcceptsReturn($value) public function testTransactionalAcceptsVariousCallables() { - self::assertSame('callback', $this->_em->transactional([$this, 'transactionalCallback'])); + self::assertSame('callback', $this->em->transactional([$this, 'transactionalCallback'])); } public function transactionalCallback($em) { - self::assertSame($this->_em, $em); + self::assertSame($this->em, $em); return 'callback'; } @@ -243,7 +243,7 @@ public function testClearManagerWithObject() $this->expectException(ORMInvalidArgumentException::class); - $this->_em->clear($entity); + $this->em->clear($entity); } /** @@ -253,7 +253,7 @@ public function testClearManagerWithUnknownEntityName() { $this->expectException(MappingException::class); - $this->_em->clear(uniqid('nonExisting', true)); + $this->em->clear(uniqid('nonExisting', true)); } /** @@ -261,17 +261,17 @@ public function testClearManagerWithUnknownEntityName() */ public function testClearManagerWithProxyClassName() { - $proxy = $this->_em->getReference(Country::class, ['id' => rand(457, 100000)]); + $proxy = $this->em->getReference(Country::class, ['id' => rand(457, 100000)]); $entity = new Country(456, 'United Kingdom'); - $this->_em->persist($entity); + $this->em->persist($entity); - $this->assertTrue($this->_em->contains($entity)); + $this->assertTrue($this->em->contains($entity)); - $this->_em->clear(get_class($proxy)); + $this->em->clear(get_class($proxy)); - $this->assertFalse($this->_em->contains($entity)); + $this->assertFalse($this->em->contains($entity)); } /** @@ -281,12 +281,12 @@ public function testClearManagerWithNullValue() { $entity = new Country(456, 'United Kingdom'); - $this->_em->persist($entity); + $this->em->persist($entity); - $this->assertTrue($this->_em->contains($entity)); + $this->assertTrue($this->em->contains($entity)); - $this->_em->clear(null); + $this->em->clear(null); - $this->assertFalse($this->_em->contains($entity)); + $this->assertFalse($this->em->contains($entity)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/AbstractManyToManyAssociationTestCase.php b/tests/Doctrine/Tests/ORM/Functional/AbstractManyToManyAssociationTestCase.php index f2eabe4d68d..ab7a1584ef0 100644 --- a/tests/Doctrine/Tests/ORM/Functional/AbstractManyToManyAssociationTestCase.php +++ b/tests/Doctrine/Tests/ORM/Functional/AbstractManyToManyAssociationTestCase.php @@ -10,27 +10,27 @@ */ class AbstractManyToManyAssociationTestCase extends OrmFunctionalTestCase { - protected $_firstField; - protected $_secondField; - protected $_table; + protected $firstField; + protected $secondField; + protected $table; public function assertForeignKeysContain($firstId, $secondId) { - self::assertEquals(1, $this->_countForeignKeys($firstId, $secondId)); + self::assertEquals(1, $this->countForeignKeys($firstId, $secondId)); } public function assertForeignKeysNotContain($firstId, $secondId) { - self::assertEquals(0, $this->_countForeignKeys($firstId, $secondId)); + self::assertEquals(0, $this->countForeignKeys($firstId, $secondId)); } - protected function _countForeignKeys($firstId, $secondId) + protected function countForeignKeys($firstId, $secondId) { - return count($this->_em->getConnection()->executeQuery(" - SELECT {$this->_firstField} - FROM {$this->_table} - WHERE {$this->_firstField} = ? - AND {$this->_secondField} = ? + return count($this->em->getConnection()->executeQuery(" + SELECT {$this->firstField} + FROM {$this->table} + WHERE {$this->firstField} = ? + AND {$this->secondField} = ? ", [$firstId, $secondId] )->fetchAll()); } diff --git a/tests/Doctrine/Tests/ORM/Functional/AdvancedAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/AdvancedAssociationTest.php index 2700eb4704e..dd2ecca784e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/AdvancedAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/AdvancedAssociationTest.php @@ -17,13 +17,13 @@ protected function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(Phrase::class), - $this->_em->getClassMetadata(PhraseType::class), - $this->_em->getClassMetadata(Definition::class), - $this->_em->getClassMetadata(Lemma::class), - $this->_em->getClassMetadata(Type::class) + $this->em->getClassMetadata(Phrase::class), + $this->em->getClassMetadata(PhraseType::class), + $this->em->getClassMetadata(Definition::class), + $this->em->getClassMetadata(Lemma::class), + $this->em->getClassMetadata(Type::class) ] ); } catch (\Exception $e) { @@ -37,13 +37,13 @@ protected function tearDown() parent::tearDown(); try { - $this->_schemaTool->dropSchema( + $this->schemaTool->dropSchema( [ - $this->_em->getClassMetadata(Phrase::class), - $this->_em->getClassMetadata(PhraseType::class), - $this->_em->getClassMetadata(Definition::class), - $this->_em->getClassMetadata(Lemma::class), - $this->_em->getClassMetadata(Type::class) + $this->em->getClassMetadata(Phrase::class), + $this->em->getClassMetadata(PhraseType::class), + $this->em->getClassMetadata(Definition::class), + $this->em->getClassMetadata(Lemma::class), + $this->em->getClassMetadata(Type::class) ] ); } catch (\Exception $e) { @@ -71,49 +71,49 @@ public function testIssue() $phrase->addDefinition($def1); $phrase->addDefinition($def2); - $this->_em->persist($phrase); - $this->_em->persist($type); + $this->em->persist($phrase); + $this->em->persist($type); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); //end setup // test1 - lazy-loading many-to-one after find() - $phrase2 = $this->_em->find(Phrase::class, $phrase->getId()); + $phrase2 = $this->em->find(Phrase::class, $phrase->getId()); self::assertTrue(is_numeric($phrase2->getType()->getId())); - $this->_em->clear(); + $this->em->clear(); // test2 - eager load in DQL query - $query = $this->_em->createQuery("SELECT p,t FROM Doctrine\Tests\ORM\Functional\Phrase p JOIN p.type t"); + $query = $this->em->createQuery("SELECT p,t FROM Doctrine\Tests\ORM\Functional\Phrase p JOIN p.type t"); $res = $query->getResult(); self::assertEquals(1, count($res)); self::assertInstanceOf(PhraseType::class, $res[0]->getType()); self::assertInstanceOf(PersistentCollection::class, $res[0]->getType()->getPhrases()); self::assertFalse($res[0]->getType()->getPhrases()->isInitialized()); - $this->_em->clear(); + $this->em->clear(); // test2 - eager load in DQL query with double-join back and forth - $query = $this->_em->createQuery("SELECT p,t,pp FROM Doctrine\Tests\ORM\Functional\Phrase p JOIN p.type t JOIN t.phrases pp"); + $query = $this->em->createQuery("SELECT p,t,pp FROM Doctrine\Tests\ORM\Functional\Phrase p JOIN p.type t JOIN t.phrases pp"); $res = $query->getResult(); self::assertEquals(1, count($res)); self::assertInstanceOf(PhraseType::class, $res[0]->getType()); self::assertInstanceOf(PersistentCollection::class, $res[0]->getType()->getPhrases()); self::assertTrue($res[0]->getType()->getPhrases()->isInitialized()); - $this->_em->clear(); + $this->em->clear(); // test3 - lazy-loading one-to-many after find() - $phrase3 = $this->_em->find(Phrase::class, $phrase->getId()); + $phrase3 = $this->em->find(Phrase::class, $phrase->getId()); $definitions = $phrase3->getDefinitions(); self::assertInstanceOf(PersistentCollection::class, $definitions); self::assertInstanceOf(Definition::class, $definitions[0]); - $this->_em->clear(); + $this->em->clear(); // test4 - lazy-loading after DQL query - $query = $this->_em->createQuery("SELECT p FROM Doctrine\Tests\ORM\Functional\Phrase p"); + $query = $this->em->createQuery("SELECT p FROM Doctrine\Tests\ORM\Functional\Phrase p"); $res = $query->getResult(); $definitions = $res[0]->getDefinitions(); @@ -134,12 +134,12 @@ public function testManyToMany() $lemma->addType($type); - $this->_em->persist($lemma); - $this->_em->persist($type); - $this->_em->flush(); + $this->em->persist($lemma); + $this->em->persist($type); + $this->em->flush(); // test5 ManyToMany - $query = $this->_em->createQuery("SELECT l FROM Doctrine\Tests\ORM\Functional\Lemma l"); + $query = $this->em->createQuery("SELECT l FROM Doctrine\Tests\ORM\Functional\Lemma l"); $res = $query->getResult(); $types = $res[0]->getTypes(); @@ -151,63 +151,67 @@ public function testManyToMany() * @Entity * @Table(name="lemma") */ -class Lemma { - - const CLASS_NAME = __CLASS__; - - /** - * @var int - * @Id - * @Column(type="integer", name="lemma_id") - * @GeneratedValue(strategy="AUTO") - */ - private $id; - - /** - * - * @var string - * @Column(type="string", name="lemma_name", unique=true, length=255) - */ - private $lemma; - - /** - * @ManyToMany(targetEntity="Type", mappedBy="lemmas", cascade={"persist"}) - */ - private $types; - - public function __construct() { - $this->types = new ArrayCollection(); - } - - /** - * - * @return int - */ - public function getId(){ - return $this->id; - } - - /** - * - * @param string $lemma - * @return void - */ - public function setLemma($lemma){ - $this->lemma = $lemma; - } - - /** - * - * @return string - */ - public function getLemma(){ - return $this->lemma; - } - - /** +class Lemma +{ + const CLASS_NAME = __CLASS__; + + /** + * @var int + * @Id + * @Column(type="integer", name="lemma_id") + * @GeneratedValue(strategy="AUTO") + */ + private $id; + + /** + * + * @var string + * @Column(type="string", name="lemma_name", unique=true, length=255) + */ + private $lemma; + + /** + * @ManyToMany(targetEntity="Type", mappedBy="lemmas", cascade={"persist"}) + */ + private $types; + + public function __construct() + { + $this->types = new ArrayCollection(); + } + + /** + * + * @return int + */ + public function getId() + { + return $this->id; + } + + /** + * + * @param string $lemma + * @return void + */ + public function setLemma($lemma) + { + $this->lemma = $lemma; + } + + /** + * + * @return string + */ + public function getLemma(){ + return $this->lemma; + } + + /** * @return void */ - public function addType(Type $type){ + public function addType(Type $type) + { if (!$this->types->contains($type)) { $this->types[] = $type; $type->addLemma($this); @@ -239,133 +243,138 @@ public function getTypes() * @Entity * @Table(name="type") */ -class Type { - - const CLASS_NAME = __CLASS__; - - /** - * - * @var int - * @Id - * @Column(type="integer", name="type_id") - * @GeneratedValue(strategy="AUTO") - */ - private $id; - - /** - * - * @var string - * @Column(type="string", name="type_name", unique=true) - */ - private $type; - - /** - * - * @var string - * @Column(type="string", name="type_abbreviation", unique=true) - */ - private $abbreviation; - - /** - * @var kateglo\application\helpers\collections\ArrayCollection - * @ManyToMany(targetEntity="Lemma") - * @JoinTable(name="lemma_type", - * joinColumns={@JoinColumn(name="type_id", referencedColumnName="type_id")}, - * inverseJoinColumns={@JoinColumn(name="lemma_id", referencedColumnName="lemma_id")} - * ) - */ - private $lemmas; - - public function __construct(){ - $this->lemmas = new ArrayCollection(); - } - - /** - * - * @return int - */ - public function getId(){ - return $this->id; - } - - /** - * - * @param string $type - * @return void - */ - public function setType($type){ - $this->type = $type; - } - - /** - * - * @return string - */ - public function getType(){ - return $this->type; - } - - /** - * - * @param string $abbreviation - * @return void - */ - public function setAbbreviation($abbreviation){ - $this->abbreviation = $abbreviation; - } - - /** - * - * @return string - */ - public function getAbbreviation(){ - return $this->abbreviation; - } - - /** - * - * @param kateglo\application\models\Lemma $lemma - * @return void - */ - public function addLemma(Lemma $lemma) - { - if (!$this->lemmas->contains($lemma)) { - $this->lemmas[] = $lemma; - $lemma->addType($this); - } - } - - /** - * - * @param kateglo\application\models\Lemma $lemma - * @return void - */ - public function removeLEmma(Lemma $lemma) - { - $removed = $this->lemmas->removeElement($lemma); - if ($removed !== null) { - $removed->removeType($this); - } - } - - /** - * - * @return kateglo\application\helpers\collections\ArrayCollection - */ - public function getCategories() - { - return $this->categories; - } +class Type +{ + const CLASS_NAME = __CLASS__; -} + /** + * + * @var int + * @Id + * @Column(type="integer", name="type_id") + * @GeneratedValue(strategy="AUTO") + */ + private $id; + + /** + * + * @var string + * @Column(type="string", name="type_name", unique=true) + */ + private $type; + + /** + * + * @var string + * @Column(type="string", name="type_abbreviation", unique=true) + */ + private $abbreviation; + /** + * @var kateglo\application\helpers\collections\ArrayCollection + * @ManyToMany(targetEntity="Lemma") + * @JoinTable(name="lemma_type", + * joinColumns={@JoinColumn(name="type_id", referencedColumnName="type_id")}, + * inverseJoinColumns={@JoinColumn(name="lemma_id", referencedColumnName="lemma_id")} + * ) + */ + private $lemmas; + + public function __construct() + { + $this->lemmas = new ArrayCollection(); + } + + /** + * + * @return int + */ + public function getId() + { + return $this->id; + } + + /** + * + * @param string $type + * @return void + */ + public function setType($type) + { + $this->type = $type; + } + + /** + * + * @return string + */ + public function getType() + { + return $this->type; + } + + /** + * + * @param string $abbreviation + * @return void + */ + public function setAbbreviation($abbreviation) + { + $this->abbreviation = $abbreviation; + } + + /** + * + * @return string + */ + public function getAbbreviation() + { + return $this->abbreviation; + } + + /** + * + * @param kateglo\application\models\Lemma $lemma + * @return void + */ + public function addLemma(Lemma $lemma) + { + if (!$this->lemmas->contains($lemma)) { + $this->lemmas[] = $lemma; + $lemma->addType($this); + } + } + + /** + * + * @param kateglo\application\models\Lemma $lemma + * @return void + */ + public function removeLEmma(Lemma $lemma) + { + $removed = $this->lemmas->removeElement($lemma); + + if ($removed !== null) { + $removed->removeType($this); + } + } + + /** + * + * @return kateglo\application\helpers\collections\ArrayCollection + */ + public function getCategories() + { + return $this->categories; + } +} /** * @Entity * @Table(name="phrase") */ -class Phrase { - +class Phrase +{ const CLASS_NAME = __CLASS__; /** @@ -391,7 +400,8 @@ class Phrase { */ private $definitions; - public function __construct() { + public function __construct() + { $this->definitions = new ArrayCollection; } @@ -400,7 +410,8 @@ public function __construct() { * @param Definition $definition * @return void */ - public function addDefinition(Definition $definition){ + public function addDefinition(Definition $definition) + { $this->definitions[] = $definition; $definition->setPhrase($this); } @@ -408,7 +419,8 @@ public function addDefinition(Definition $definition){ /** * @return int */ - public function getId(){ + public function getId() + { return $this->id; } @@ -416,14 +428,16 @@ public function getId(){ * @param string $phrase * @return void */ - public function setPhrase($phrase){ + public function setPhrase($phrase) + { $this->phrase = $phrase; } /** * @return string */ - public function getPhrase(){ + public function getPhrase() + { return $this->phrase; } @@ -432,7 +446,8 @@ public function getPhrase(){ * @param PhraseType $type * @return void */ - public function setType(PhraseType $type){ + public function setType(PhraseType $type) + { $this->type = $type; } @@ -440,7 +455,8 @@ public function setType(PhraseType $type){ * * @return PhraseType */ - public function getType(){ + public function getType() + { return $this->type; } @@ -448,7 +464,8 @@ public function getType(){ * * @return ArrayCollection */ - public function getDefinitions(){ + public function getDefinitions() + { return $this->definitions; } } @@ -457,8 +474,8 @@ public function getDefinitions(){ * @Entity * @Table(name="phrase_type") */ -class PhraseType { - +class PhraseType +{ const CLASS_NAME = __CLASS__; /** @@ -483,14 +500,16 @@ class PhraseType { */ private $phrases; - public function __construct() { + public function __construct() + { $this->phrases = new ArrayCollection; } /** * @return int */ - public function getId(){ + public function getId() + { return $this->id; } @@ -498,14 +517,16 @@ public function getId(){ * @param string $type * @return void */ - public function setType($type){ + public function setType($type) + { $this->type = $type; } /** * @return string */ - public function getType(){ + public function getType() + { return $this->type; } @@ -513,14 +534,16 @@ public function getType(){ * @param string $abbreviation * @return void */ - public function setAbbreviation($abbreviation){ + public function setAbbreviation($abbreviation) + { $this->abbreviation = $abbreviation; } /** * @return string */ - public function getAbbreviation(){ + public function getAbbreviation() + { return $this->abbreviation; } @@ -528,7 +551,8 @@ public function getAbbreviation(){ * @param ArrayCollection $phrases * @return void */ - public function setPhrases($phrases){ + public function setPhrases($phrases) + { $this->phrases = $phrases; } @@ -536,7 +560,8 @@ public function setPhrases($phrases){ * * @return ArrayCollection */ - public function getPhrases(){ + public function getPhrases() + { return $this->phrases; } @@ -546,8 +571,8 @@ public function getPhrases(){ * @Entity * @Table(name="definition") */ -class Definition { - +class Definition +{ const CLASS_NAME = __CLASS__; /** @@ -571,7 +596,8 @@ class Definition { /** * @return int */ - public function getId(){ + public function getId() + { return $this->id; } @@ -579,18 +605,21 @@ public function getId(){ * @param Phrase $phrase * @return void */ - public function setPhrase(Phrase $phrase){ + public function setPhrase(Phrase $phrase) + { $this->phrase = $phrase; } /** * @return Phrase */ - public function getPhrase(){ + public function getPhrase() + { return $this->phrase; } - public function removePhrase() { + public function removePhrase() + { if ($this->phrase !== null) { /*@var $phrase kateglo\application\models\Phrase */ $phrase = $this->phrase; @@ -603,14 +632,16 @@ public function removePhrase() { * @param string $definition * @return void */ - public function setDefinition($definition){ + public function setDefinition($definition) + { $this->definition = $definition; } /** * @return string */ - public function getDefinition(){ + public function getDefinition() + { return $this->definition; } } diff --git a/tests/Doctrine/Tests/ORM/Functional/AdvancedDqlQueryTest.php b/tests/Doctrine/Tests/ORM/Functional/AdvancedDqlQueryTest.php index fc86bad29a0..2b921bb1e37 100644 --- a/tests/Doctrine/Tests/ORM/Functional/AdvancedDqlQueryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/AdvancedDqlQueryTest.php @@ -29,7 +29,7 @@ public function testAggregateWithHavingClause() 'FROM Doctrine\Tests\Models\Company\CompanyEmployee p '. 'GROUP BY p.department HAVING SUM(p.salary) > 200000 ORDER BY p.department'; - $result = $this->_em->createQuery($dql)->getScalarResult(); + $result = $this->em->createQuery($dql)->getScalarResult(); self::assertEquals(2, count($result)); self::assertEquals('IT', $result[0]['department']); @@ -44,7 +44,7 @@ public function testUnnamedScalarResultsAreOneBased() 'FROM Doctrine\Tests\Models\Company\CompanyEmployee p '. 'GROUP BY p.department HAVING SUM(p.salary) > 200000 ORDER BY p.department'; - $result = $this->_em->createQuery($dql)->getScalarResult(); + $result = $this->em->createQuery($dql)->getScalarResult(); self::assertEquals(2, count($result)); self::assertEquals(150000, $result[0][1]); @@ -58,7 +58,7 @@ public function testOrderByResultVariableCollectionSize() 'WHERE p.friends IS NOT EMPTY ' . 'ORDER BY friends DESC, p.name DESC'; - $result = $this->_em->createQuery($dql)->getScalarResult(); + $result = $this->em->createQuery($dql)->getScalarResult(); self::assertEquals(4, count($result)); @@ -79,7 +79,7 @@ public function testIsNullAssociation() { $dql = 'SELECT p FROM Doctrine\Tests\Models\Company\CompanyPerson p '. 'WHERE p.spouse IS NULL'; - $result = $this->_em->createQuery($dql)->getResult(); + $result = $this->em->createQuery($dql)->getResult(); self::assertEquals(2, count($result)); self::assertTrue($result[0]->getId() > 0); @@ -93,7 +93,7 @@ public function testSelectSubselect() { $dql = 'SELECT p, (SELECT c.brand FROM Doctrine\Tests\Models\Company\CompanyCar c WHERE p.car = c) brandName '. 'FROM Doctrine\Tests\Models\Company\CompanyManager p'; - $result = $this->_em->createQuery($dql)->getArrayResult(); + $result = $this->em->createQuery($dql)->getArrayResult(); self::assertEquals(1, count($result)); self::assertEquals("Caramba", $result[0]['brandName']); @@ -103,7 +103,7 @@ public function testInSubselect() { $dql = "SELECT p.name FROM Doctrine\Tests\Models\Company\CompanyPerson p ". "WHERE p.name IN (SELECT n.name FROM Doctrine\Tests\Models\Company\CompanyPerson n WHERE n.name = 'Roman B.')"; - $result = $this->_em->createQuery($dql)->getScalarResult(); + $result = $this->em->createQuery($dql)->getScalarResult(); self::assertEquals(1, count($result)); self::assertEquals('Roman B.', $result[0]['name']); @@ -113,7 +113,7 @@ public function testGroupByMultipleFields() { $dql = 'SELECT p.department, p.name, count(p.id) FROM Doctrine\Tests\Models\Company\CompanyEmployee p '. 'GROUP BY p.department, p.name'; - $result = $this->_em->createQuery($dql)->getResult(); + $result = $this->em->createQuery($dql)->getResult(); self::assertEquals(4, count($result)); } @@ -121,19 +121,19 @@ public function testGroupByMultipleFields() public function testUpdateAs() { $dql = 'UPDATE Doctrine\Tests\Models\Company\CompanyEmployee AS p SET p.salary = 1'; - $this->_em->createQuery($dql)->execute(); + $this->em->createQuery($dql)->execute(); - self::assertTrue(count($this->_em->createQuery( + self::assertTrue(count($this->em->createQuery( 'SELECT count(p.id) FROM Doctrine\Tests\Models\Company\CompanyEmployee p WHERE p.salary = 1')->getResult()) > 0); } public function testDeleteAs() { $dql = 'DELETE Doctrine\Tests\Models\Company\CompanyEmployee AS p'; - $this->_em->createQuery($dql)->getResult(); + $this->em->createQuery($dql)->getResult(); $dql = 'SELECT count(p) FROM Doctrine\Tests\Models\Company\CompanyEmployee p'; - $result = $this->_em->createQuery($dql)->getSingleScalarResult(); + $result = $this->em->createQuery($dql)->getSingleScalarResult(); self::assertEquals(0, $result); } @@ -171,12 +171,12 @@ public function generateFixture() $person2->addFriend($person4); $person3->addFriend($person4); - $this->_em->persist($car); - $this->_em->persist($manager1); - $this->_em->persist($person2); - $this->_em->persist($person3); - $this->_em->persist($person4); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($car); + $this->em->persist($manager1); + $this->em->persist($person2); + $this->em->persist($person3); + $this->em->persist($person4); + $this->em->flush(); + $this->em->clear(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php index 42e54feba20..3d6718872da 100644 --- a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php @@ -33,49 +33,49 @@ public function testBasicUnitsOfWorkWithOneToManyAssociation() $user->name = 'Roman'; $user->username = 'romanb'; $user->status = 'developer'; - $this->_em->persist($user); + $this->em->persist($user); - $this->_em->flush(); + $this->em->flush(); self::assertTrue(is_numeric($user->id)); - self::assertTrue($this->_em->contains($user)); + self::assertTrue($this->em->contains($user)); // Read - $user2 = $this->_em->find(CmsUser::class, $user->id); + $user2 = $this->em->find(CmsUser::class, $user->id); self::assertTrue($user === $user2); // Add a phonenumber $ph = new CmsPhonenumber; $ph->phonenumber = "12345"; $user->addPhonenumber($ph); - $this->_em->flush(); - self::assertTrue($this->_em->contains($ph)); - self::assertTrue($this->_em->contains($user)); + $this->em->flush(); + self::assertTrue($this->em->contains($ph)); + self::assertTrue($this->em->contains($user)); // Update name $user->name = 'guilherme'; - $this->_em->flush(); + $this->em->flush(); self::assertEquals('guilherme', $user->name); // Add another phonenumber $ph2 = new CmsPhonenumber; $ph2->phonenumber = "6789"; $user->addPhonenumber($ph2); - $this->_em->flush(); - self::assertTrue($this->_em->contains($ph2)); + $this->em->flush(); + self::assertTrue($this->em->contains($ph2)); // Delete - $this->_em->remove($user); - self::assertTrue($this->_em->getUnitOfWork()->isScheduledForDelete($user)); - self::assertTrue($this->_em->getUnitOfWork()->isScheduledForDelete($ph)); - self::assertTrue($this->_em->getUnitOfWork()->isScheduledForDelete($ph2)); - $this->_em->flush(); - self::assertFalse($this->_em->getUnitOfWork()->isScheduledForDelete($user)); - self::assertFalse($this->_em->getUnitOfWork()->isScheduledForDelete($ph)); - self::assertFalse($this->_em->getUnitOfWork()->isScheduledForDelete($ph2)); - self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($user)); - self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($ph)); - self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($ph2)); + $this->em->remove($user); + self::assertTrue($this->em->getUnitOfWork()->isScheduledForDelete($user)); + self::assertTrue($this->em->getUnitOfWork()->isScheduledForDelete($ph)); + self::assertTrue($this->em->getUnitOfWork()->isScheduledForDelete($ph2)); + $this->em->flush(); + self::assertFalse($this->em->getUnitOfWork()->isScheduledForDelete($user)); + self::assertFalse($this->em->getUnitOfWork()->isScheduledForDelete($ph)); + self::assertFalse($this->em->getUnitOfWork()->isScheduledForDelete($ph2)); + self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_NEW, $this->em->getUnitOfWork()->getEntityState($user)); + self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_NEW, $this->em->getUnitOfWork()->getEntityState($ph)); + self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_NEW, $this->em->getUnitOfWork()->getEntityState($ph2)); } public function testOneToManyAssociationModification() @@ -93,14 +93,14 @@ public function testOneToManyAssociationModification() $user->addPhonenumber($ph1); $user->addPhonenumber($ph2); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); // Remove the first element from the collection unset($user->phonenumbers[0]); $ph1->user = null; // owning side! - $this->_em->flush(); + $this->em->flush(); self::assertEquals(1, count($user->phonenumbers)); self::assertNull($ph1->user); @@ -108,7 +108,7 @@ public function testOneToManyAssociationModification() public function testBasicOneToOne() { - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); $user = new CmsUser; $user->name = 'Roman'; $user->username = 'romanb'; @@ -122,18 +122,18 @@ public function testBasicOneToOne() $user->address = $address; // inverse side $address->user = $user; // owning side! - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); // Check that the foreign key has been set - $userId = $this->_em->getConnection()->executeQuery( + $userId = $this->em->getConnection()->executeQuery( "SELECT user_id FROM cms_addresses WHERE id=?", [$address->id] )->fetchColumn(); self::assertTrue(is_numeric($userId)); - $this->_em->clear(); + $this->em->clear(); - $user2 = $this->_em->createQuery('select u from \Doctrine\Tests\Models\CMS\CmsUser u where u.id=?1') + $user2 = $this->em->createQuery('select u from \Doctrine\Tests\Models\CMS\CmsUser u where u.id=?1') ->setParameter(1, $userId) ->getSingleResult(); @@ -152,28 +152,28 @@ public function testRemove() $user->username = 'gblanco'; $user->status = 'developer'; - self::assertEquals(UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($user), "State should be UnitOfWork::STATE_NEW"); + self::assertEquals(UnitOfWork::STATE_NEW, $this->em->getUnitOfWork()->getEntityState($user), "State should be UnitOfWork::STATE_NEW"); - $this->_em->persist($user); + $this->em->persist($user); - self::assertEquals(UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($user), "State should be UnitOfWork::STATE_MANAGED"); + self::assertEquals(UnitOfWork::STATE_MANAGED, $this->em->getUnitOfWork()->getEntityState($user), "State should be UnitOfWork::STATE_MANAGED"); - $this->_em->remove($user); + $this->em->remove($user); - self::assertEquals(UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($user), "State should be UnitOfWork::STATE_NEW"); + self::assertEquals(UnitOfWork::STATE_NEW, $this->em->getUnitOfWork()->getEntityState($user), "State should be UnitOfWork::STATE_NEW"); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); $id = $user->getId(); - $this->_em->remove($user); + $this->em->remove($user); - self::assertEquals(UnitOfWork::STATE_REMOVED, $this->_em->getUnitOfWork()->getEntityState($user), "State should be UnitOfWork::STATE_REMOVED"); - $this->_em->flush(); + self::assertEquals(UnitOfWork::STATE_REMOVED, $this->em->getUnitOfWork()->getEntityState($user), "State should be UnitOfWork::STATE_REMOVED"); + $this->em->flush(); - self::assertEquals(UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($user), "State should be UnitOfWork::STATE_NEW"); + self::assertEquals(UnitOfWork::STATE_NEW, $this->em->getUnitOfWork()->getEntityState($user), "State should be UnitOfWork::STATE_NEW"); - self::assertNull($this->_em->find(CmsUser::class, $id)); + self::assertNull($this->em->find(CmsUser::class, $id)); } public function testOneToManyOrphanRemoval() @@ -189,23 +189,23 @@ public function testOneToManyOrphanRemoval() $user->addPhonenumber($phone); } - $this->_em->persist($user); + $this->em->persist($user); - $this->_em->flush(); + $this->em->flush(); $user->getPhonenumbers()->remove(0); self::assertEquals(2, count($user->getPhonenumbers())); - $this->_em->flush(); + $this->em->flush(); // Check that there are just 2 phonenumbers left - $count = $this->_em->getConnection()->fetchColumn("SELECT COUNT(*) FROM cms_phonenumbers"); + $count = $this->em->getConnection()->fetchColumn("SELECT COUNT(*) FROM cms_phonenumbers"); self::assertEquals(2, $count); // only 2 remaining // check that clear() removes the others via orphan removal $user->getPhonenumbers()->clear(); - $this->_em->flush(); - self::assertEquals(0, $this->_em->getConnection()->fetchColumn("select count(*) from cms_phonenumbers")); + $this->em->flush(); + self::assertEquals(0, $this->em->getConnection()->fetchColumn("select count(*) from cms_phonenumbers")); } public function testBasicQuery() @@ -214,10 +214,10 @@ public function testBasicQuery() $user->name = 'Guilherme'; $user->username = 'gblanco'; $user->status = 'developer'; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); - $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u"); + $query = $this->em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u"); $users = $query->getResult(); @@ -251,10 +251,10 @@ public function testBasicOneToManyInnerJoin() $user->name = 'Guilherme'; $user->username = 'gblanco'; $user->status = 'developer'; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); - $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u join u.phonenumbers p"); + $query = $this->em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u join u.phonenumbers p"); $users = $query->getResult(); @@ -267,10 +267,10 @@ public function testBasicOneToManyLeftJoin() $user->name = 'Guilherme'; $user->username = 'gblanco'; $user->status = 'developer'; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); - $query = $this->_em->createQuery("select u,p from Doctrine\Tests\Models\CMS\CmsUser u left join u.phonenumbers p"); + $query = $this->em->createQuery("select u,p from Doctrine\Tests\Models\CMS\CmsUser u left join u.phonenumbers p"); $users = $query->getResult(); @@ -290,13 +290,13 @@ public function testBasicRefresh() $user->username = 'gblanco'; $user->status = 'developer'; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); $user->status = 'mascot'; self::assertEquals('mascot', $user->status); - $this->_em->refresh($user); + $this->em->refresh($user); self::assertEquals('developer', $user->status); } @@ -319,15 +319,15 @@ public function testRefreshResetsCollection() $ph2 = new CmsPhonenumber; $ph2->phonenumber = "54321"; - $this->_em->persist($user); - $this->_em->persist($ph1); - $this->_em->persist($ph2); - $this->_em->flush(); + $this->em->persist($user); + $this->em->persist($ph1); + $this->em->persist($ph2); + $this->em->flush(); $user->addPhonenumber($ph2); self::assertEquals(2, count($user->phonenumbers)); - $this->_em->refresh($user); + $this->em->refresh($user); self::assertEquals(1, count($user->phonenumbers)); } @@ -351,16 +351,16 @@ public function testDqlRefreshResetsCollection() $ph2 = new CmsPhonenumber; $ph2->phonenumber = "54321"; - $this->_em->persist($user); - $this->_em->persist($ph1); - $this->_em->persist($ph2); - $this->_em->flush(); + $this->em->persist($user); + $this->em->persist($ph1); + $this->em->persist($ph2); + $this->em->flush(); $user->addPhonenumber($ph2); self::assertEquals(2, count($user->phonenumbers)); $dql = "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1"; - $user = $this->_em->createQuery($dql) + $user = $this->em->createQuery($dql) ->setParameter(1, $user->id) ->setHint(Query::HINT_REFRESH, true) ->getSingleResult(); @@ -387,17 +387,17 @@ public function testCreateEntityOfProxy() $ph2 = new CmsPhonenumber; $ph2->phonenumber = "54321"; - $this->_em->persist($user); - $this->_em->persist($ph1); - $this->_em->persist($ph2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->persist($ph1); + $this->em->persist($ph2); + $this->em->flush(); + $this->em->clear(); $userId = $user->id; - $user = $this->_em->getReference(CmsUser::class, $user->id); + $user = $this->em->getReference(CmsUser::class, $user->id); $dql = "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1"; - $user = $this->_em->createQuery($dql) + $user = $this->em->createQuery($dql) ->setParameter(1, $userId) ->getSingleResult(); @@ -417,13 +417,13 @@ public function testAddToCollectionDoesNotInitialize() $user->addPhonenumber($phone); } - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); self::assertEquals(3, $user->getPhonenumbers()->count()); - $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username='gblanco'"); + $query = $this->em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username='gblanco'"); $gblanco = $query->getSingleResult(); @@ -434,12 +434,12 @@ public function testAddToCollectionDoesNotInitialize() $gblanco->addPhonenumber($newPhone); self::assertFalse($gblanco->getPhonenumbers()->isInitialized()); - $this->_em->persist($gblanco); + $this->em->persist($gblanco); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery("select u, p from Doctrine\Tests\Models\CMS\CmsUser u join u.phonenumbers p where u.username='gblanco'"); + $query = $this->em->createQuery("select u, p from Doctrine\Tests\Models\CMS\CmsUser u join u.phonenumbers p where u.username='gblanco'"); $gblanco2 = $query->getSingleResult(); self::assertEquals(4, $gblanco2->getPhonenumbers()->count()); } @@ -457,13 +457,13 @@ public function testInitializeCollectionWithNewObjectsRetainsNewObjects() $user->addPhonenumber($phone); } - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); self::assertEquals(3, $user->getPhonenumbers()->count()); - $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username='gblanco'"); + $query = $this->em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username='gblanco'"); $gblanco = $query->getSingleResult(); @@ -477,10 +477,10 @@ public function testInitializeCollectionWithNewObjectsRetainsNewObjects() self::assertEquals(4, $gblanco->getPhonenumbers()->count()); self::assertTrue($gblanco->getPhonenumbers()->isInitialized()); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery("select u, p from Doctrine\Tests\Models\CMS\CmsUser u join u.phonenumbers p where u.username='gblanco'"); + $query = $this->em->createQuery("select u, p from Doctrine\Tests\Models\CMS\CmsUser u join u.phonenumbers p where u.username='gblanco'"); $gblanco2 = $query->getSingleResult(); self::assertEquals(4, $gblanco2->getPhonenumbers()->count()); } @@ -491,31 +491,31 @@ public function testSetSetAssociationWithGetReference() $user->name = 'Guilherme'; $user->username = 'gblanco'; $user->status = 'developer'; - $this->_em->persist($user); + $this->em->persist($user); $address = new CmsAddress; $address->country = 'Germany'; $address->city = 'Berlin'; $address->zip = '12345'; - $this->_em->persist($address); + $this->em->persist($address); - $this->_em->flush(); - $this->_em->detach($address); + $this->em->flush(); + $this->em->detach($address); - self::assertFalse($this->_em->contains($address)); - self::assertTrue($this->_em->contains($user)); + self::assertFalse($this->em->contains($address)); + self::assertTrue($this->em->contains($user)); // Assume we only got the identifier of the address and now want to attach // that address to the user without actually loading it, using getReference(). - $addressRef = $this->_em->getReference(CmsAddress::class, $address->getId()); + $addressRef = $this->em->getReference(CmsAddress::class, $address->getId()); $user->setAddress($addressRef); // Ugh! Initializes address 'cause of $address->setUser($user)! - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); // Check with a fresh load that the association is indeed there - $query = $this->_em->createQuery("select u, a from Doctrine\Tests\Models\CMS\CmsUser u join u.address a where u.username='gblanco'"); + $query = $this->em->createQuery("select u, a from Doctrine\Tests\Models\CMS\CmsUser u join u.address a where u.username='gblanco'"); $gblanco = $query->getSingleResult(); self::assertInstanceOf(CmsUser::class, $gblanco); @@ -537,23 +537,23 @@ public function testOneToManyCascadeRemove() $user->addPhonenumber($phone); } - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username='gblanco'"); + $query = $this->em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username='gblanco'"); $gblanco = $query->getSingleResult(); - $this->_em->remove($gblanco); - $this->_em->flush(); + $this->em->remove($gblanco); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); - self::assertEquals(0, $this->_em->createQuery( + self::assertEquals(0, $this->em->createQuery( "select count(p.phonenumber) from Doctrine\Tests\Models\CMS\CmsPhonenumber p") ->getSingleScalarResult()); - self::assertEquals(0, $this->_em->createQuery( + self::assertEquals(0, $this->em->createQuery( "select count(u.id) from Doctrine\Tests\Models\CMS\CmsUser u") ->getSingleScalarResult()); } @@ -565,34 +565,34 @@ public function testTextColumnSaveAndRetrieve() $user->username = 'gblanco'; $user->status = 'developer'; - $this->_em->persist($user); + $this->em->persist($user); $article = new CmsArticle(); $article->text = "Lorem ipsum dolor sunt."; $article->topic = "A Test Article!"; $article->setAuthor($user); - $this->_em->persist($article); - $this->_em->flush(); + $this->em->persist($article); + $this->em->flush(); $articleId = $article->id; - $this->_em->clear(); + $this->em->clear(); // test find() with leading backslash at the same time - $articleNew = $this->_em->find('\Doctrine\Tests\Models\CMS\CmsArticle', $articleId); - self::assertTrue($this->_em->contains($articleNew)); + $articleNew = $this->em->find('\Doctrine\Tests\Models\CMS\CmsArticle', $articleId); + self::assertTrue($this->em->contains($articleNew)); self::assertEquals("Lorem ipsum dolor sunt.", $articleNew->text); self::assertNotSame($article, $articleNew); $articleNew->text = "Lorem ipsum dolor sunt. And stuff!"; - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $articleNew = $this->_em->find(CmsArticle::class, $articleId); + $articleNew = $this->em->find(CmsArticle::class, $articleId); self::assertEquals("Lorem ipsum dolor sunt. And stuff!", $articleNew->text); - self::assertTrue($this->_em->contains($articleNew)); + self::assertTrue($this->em->contains($articleNew)); } public function testFlushDoesNotIssueUnnecessaryUpdates() @@ -615,28 +615,28 @@ public function testFlushDoesNotIssueUnnecessaryUpdates() $article->topic = "A Test Article!"; $article->setAuthor($user); - $this->_em->persist($article); - $this->_em->persist($user); + $this->em->persist($article); + $this->em->persist($user); - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery('select u,a,ad from Doctrine\Tests\Models\CMS\CmsUser u join u.articles a join u.address ad'); + $query = $this->em->createQuery('select u,a,ad from Doctrine\Tests\Models\CMS\CmsUser u join u.articles a join u.address ad'); $user2 = $query->getSingleResult(); self::assertEquals(1, count($user2->articles)); self::assertInstanceOf(CmsAddress::class, $user2->address); - $oldLogger = $this->_em->getConnection()->getConfiguration()->getSQLLogger(); + $oldLogger = $this->em->getConnection()->getConfiguration()->getSQLLogger(); $debugStack = new DebugStack(); - $this->_em->getConnection()->getConfiguration()->setSQLLogger($debugStack); + $this->em->getConnection()->getConfiguration()->setSQLLogger($debugStack); - $this->_em->flush(); + $this->em->flush(); self::assertEquals(0, count($debugStack->queries)); - $this->_em->getConnection()->getConfiguration()->setSQLLogger($oldLogger); + $this->em->getConnection()->getConfiguration()->setSQLLogger($oldLogger); } public function testRemoveEntityByReference() @@ -646,20 +646,20 @@ public function testRemoveEntityByReference() $user->username = 'gblanco'; $user->status = 'developer'; - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); - $userRef = $this->_em->getReference(CmsUser::class, $user->getId()); - $this->_em->remove($userRef); - $this->_em->flush(); - $this->_em->clear(); + $userRef = $this->em->getReference(CmsUser::class, $user->getId()); + $this->em->remove($userRef); + $this->em->flush(); + $this->em->clear(); - self::assertEquals(0, $this->_em->getConnection()->fetchColumn("select count(*) from cms_users")); + self::assertEquals(0, $this->em->getConnection()->fetchColumn("select count(*) from cms_users")); - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(null); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(null); } public function testQueryEntityByReference() @@ -676,15 +676,15 @@ public function testQueryEntityByReference() $user->setAddress($address); - $this->_em->transactional(function($em) use($user) { + $this->em->transactional(function($em) use($user) { $em->persist($user); }); - $this->_em->clear(); + $this->em->clear(); - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); - $userRef = $this->_em->getReference(CmsUser::class, $user->getId()); - $address2 = $this->_em->createQuery('select a from Doctrine\Tests\Models\CMS\CmsAddress a where a.user = :user') + $userRef = $this->em->getReference(CmsUser::class, $user->getId()); + $address2 = $this->em->createQuery('select a from Doctrine\Tests\Models\CMS\CmsAddress a where a.user = :user') ->setParameter('user', $userRef) ->getSingleResult(); @@ -710,16 +710,16 @@ public function testOneToOneNullUpdate() $address->street = "somestreet"; $address->user = $user; - $this->_em->persist($address); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($address); + $this->em->persist($user); + $this->em->flush(); - self::assertEquals(1, $this->_em->getConnection()->fetchColumn("select 1 from cms_addresses where user_id = ".$user->id)); + self::assertEquals(1, $this->em->getConnection()->fetchColumn("select 1 from cms_addresses where user_id = ".$user->id)); $address->user = null; - $this->_em->flush(); + $this->em->flush(); - self::assertNotEquals(1, $this->_em->getConnection()->fetchColumn("select 1 from cms_addresses where user_id = ".$user->id)); + self::assertNotEquals(1, $this->em->getConnection()->fetchColumn("select 1 from cms_addresses where user_id = ".$user->id)); } /** @@ -740,11 +740,12 @@ public function testNewAssociatedEntityDuringFlushThrowsException() $address->street = "somestreet"; $address->user = $user; - $this->_em->persist($address); + $this->em->persist($address); // flushing without persisting $user should raise an exception $this->expectException(\InvalidArgumentException::class); - $this->_em->flush(); + + $this->em->flush(); } /** @@ -765,9 +766,9 @@ public function testNewAssociatedEntityDuringFlushThrowsException2() $address->street = "somestreet"; $address->user = $user; - $this->_em->persist($address); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($address); + $this->em->persist($user); + $this->em->flush(); $u2 = new CmsUser; $u2->username = "beberlei"; @@ -777,7 +778,8 @@ public function testNewAssociatedEntityDuringFlushThrowsException2() // flushing without persisting $u2 should raise an exception $this->expectException(\InvalidArgumentException::class); - $this->_em->flush(); + + $this->em->flush(); } /** @@ -795,11 +797,12 @@ public function testNewAssociatedEntityDuringFlushThrowsException3() $com->text = 'Really good!'; $art->addComment($com); - $this->_em->persist($art); + $this->em->persist($art); // flushing without persisting $com should raise an exception $this->expectException(\InvalidArgumentException::class); - $this->_em->flush(); + + $this->em->flush(); } public function testOneToOneOrphanRemoval() @@ -817,27 +820,27 @@ public function testOneToOneOrphanRemoval() $address->user = $user; $user->address = $address; - $this->_em->persist($address); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($address); + $this->em->persist($user); + $this->em->flush(); $addressId = $address->getId(); $user->address = null; - $this->_em->flush(); + $this->em->flush(); - self::assertEquals(0, $this->_em->getConnection()->fetchColumn("select count(*) from cms_addresses")); + self::assertEquals(0, $this->em->getConnection()->fetchColumn("select count(*) from cms_addresses")); // check orphan removal through replacement $user->address = $address; $address->user = $user; - $this->_em->flush(); - self::assertEquals(1, $this->_em->getConnection()->fetchColumn("select count(*) from cms_addresses")); + $this->em->flush(); + self::assertEquals(1, $this->em->getConnection()->fetchColumn("select count(*) from cms_addresses")); // remove $address to free up unique key id - $this->_em->remove($address); - $this->_em->flush(); + $this->em->remove($address); + $this->em->flush(); $newAddress = new CmsAddress(); $newAddress->city = "NewBonn"; @@ -847,8 +850,8 @@ public function testOneToOneOrphanRemoval() $newAddress->user = $user; $user->address = $newAddress; - $this->_em->flush(); - self::assertEquals(1, $this->_em->getConnection()->fetchColumn("select count(*) from cms_addresses")); + $this->em->flush(); + self::assertEquals(1, $this->em->getConnection()->fetchColumn("select count(*) from cms_addresses")); } public function testGetPartialReferenceToUpdateObjectWithoutLoadingIt() @@ -857,21 +860,21 @@ public function testGetPartialReferenceToUpdateObjectWithoutLoadingIt() $user->username = "beberlei"; $user->name = "Benjamin E."; $user->status = 'active'; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); $userId = $user->id; - $this->_em->clear(); + $this->em->clear(); - $user = $this->_em->getPartialReference(CmsUser::class, $userId); - self::assertTrue($this->_em->contains($user)); + $user = $this->em->getPartialReference(CmsUser::class, $userId); + self::assertTrue($this->em->contains($user)); self::assertNull($user->getName()); self::assertEquals($userId, $user->id); $user->name = 'Stephan'; - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - self::assertEquals('Benjamin E.', $this->_em->find(get_class($user), $userId)->name); + self::assertEquals('Benjamin E.', $this->em->find(get_class($user), $userId)->name); } public function testMergePersistsNewEntities() @@ -881,19 +884,19 @@ public function testMergePersistsNewEntities() $user->name = "Benjamin E."; $user->status = 'active'; - $managedUser = $this->_em->merge($user); + $managedUser = $this->em->merge($user); self::assertEquals('beberlei', $managedUser->username); self::assertEquals('Benjamin E.', $managedUser->name); self::assertEquals('active', $managedUser->status); self::assertTrue($user !== $managedUser); - self::assertTrue($this->_em->contains($managedUser)); + self::assertTrue($this->em->contains($managedUser)); - $this->_em->flush(); + $this->em->flush(); $userId = $managedUser->id; - $this->_em->clear(); + $this->em->clear(); - $user2 = $this->_em->find(get_class($managedUser), $userId); + $user2 = $this->em->find(get_class($managedUser), $userId); self::assertInstanceOf(CmsUser::class, $user2); } @@ -906,19 +909,19 @@ public function testMergeNonPersistedProperties() $user->nonPersistedProperty = 'test'; $user->nonPersistedPropertyObject = new CmsPhonenumber(); - $managedUser = $this->_em->merge($user); + $managedUser = $this->em->merge($user); self::assertEquals('test', $managedUser->nonPersistedProperty); self::assertSame($user->nonPersistedProperty, $managedUser->nonPersistedProperty); self::assertSame($user->nonPersistedPropertyObject, $managedUser->nonPersistedPropertyObject); self::assertTrue($user !== $managedUser); - self::assertTrue($this->_em->contains($managedUser)); + self::assertTrue($this->em->contains($managedUser)); - $this->_em->flush(); + $this->em->flush(); $userId = $managedUser->id; - $this->_em->clear(); + $this->em->clear(); - $user2 = $this->_em->find(get_class($managedUser), $userId); + $user2 = $this->em->find(get_class($managedUser), $userId); self::assertNull($user2->nonPersistedProperty); self::assertNull($user2->nonPersistedPropertyObject); self::assertEquals('active', $user2->status); @@ -933,7 +936,8 @@ public function testMergeThrowsExceptionIfEntityWithGeneratedIdentifierDoesNotEx $user->id = 42; $this->expectException(EntityNotFoundException::class); - $this->_em->merge($user); + + $this->em->merge($user); } /** @@ -950,19 +954,19 @@ public function testOneToOneMergeSetNull() $ph->phonenumber = "12345"; $user->addPhonenumber($ph); - $this->_em->persist($user); - $this->_em->persist($ph); - $this->_em->flush(); + $this->em->persist($user); + $this->em->persist($ph); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); $ph->user = null; - $managedPh = $this->_em->merge($ph); + $managedPh = $this->em->merge($ph); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - self::assertNull($this->_em->find(get_class($ph), $ph->phonenumber)->getUser()); + self::assertNull($this->em->find(get_class($ph), $ph->phonenumber)->getUser()); } /** @@ -980,14 +984,14 @@ public function testManyToOneFetchModeQuery() $article->text = "bar"; $article->user = $user; - $this->_em->persist($article); - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($article); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); $qc = $this->getCurrentQueryCount(); $dql = "SELECT a FROM Doctrine\Tests\Models\CMS\CmsArticle a WHERE a.id = ?1"; - $article = $this->_em + $article = $this->em ->createQuery($dql) ->setParameter(1, $article->id) ->setFetchMode(CmsArticle::class, 'user', FetchMode::EAGER) @@ -1027,22 +1031,22 @@ public function testClearWithEntityName() $user->addArticle($article1); $user->addArticle($article2); - $this->_em->persist($article1); - $this->_em->persist($article2); - $this->_em->persist($address); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($article1); + $this->em->persist($article2); + $this->em->persist($address); + $this->em->persist($user); + $this->em->flush(); - $unitOfWork = $this->_em->getUnitOfWork(); + $unitOfWork = $this->em->getUnitOfWork(); - $this->_em->clear(CmsUser::class); + $this->em->clear(CmsUser::class); self::assertEquals(UnitOfWork::STATE_DETACHED, $unitOfWork->getEntityState($user)); self::assertEquals(UnitOfWork::STATE_DETACHED, $unitOfWork->getEntityState($article1)); self::assertEquals(UnitOfWork::STATE_DETACHED, $unitOfWork->getEntityState($article2)); self::assertEquals(UnitOfWork::STATE_MANAGED, $unitOfWork->getEntityState($address)); - $this->_em->clear(); + $this->em->clear(); self::assertEquals(UnitOfWork::STATE_DETACHED, $unitOfWork->getEntityState($address)); } @@ -1061,16 +1065,16 @@ public function testFlushManyExplicitEntities() $userC->username = 'UserC'; $userC->name = 'UserC'; - $this->_em->persist($userA); - $this->_em->persist($userB); - $this->_em->persist($userC); + $this->em->persist($userA); + $this->em->persist($userB); + $this->em->persist($userC); - $this->_em->flush([$userA, $userB, $userB]); + $this->em->flush([$userA, $userB, $userB]); $userC->name = 'changed name'; - $this->_em->flush([$userA, $userB]); - $this->_em->refresh($userC); + $this->em->flush([$userA, $userB]); + $this->em->refresh($userC); self::assertTrue($userA->id > 0, 'user a has an id'); self::assertTrue($userB->id > 0, 'user b has an id'); @@ -1088,14 +1092,14 @@ public function testFlushSingleManagedEntity() $user->username = 'domnikl'; $user->status = 'developer'; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); $user->status = 'administrator'; - $this->_em->flush($user); - $this->_em->clear(); + $this->em->flush($user); + $this->em->clear(); - $user = $this->_em->find(get_class($user), $user->id); + $user = $this->em->find(get_class($user), $user->id); self::assertEquals('administrator', $user->status); } @@ -1112,7 +1116,7 @@ public function testFlushSingleUnmanagedEntity() $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage('Entity has to be managed or scheduled for removal for single computation'); - $this->_em->flush($user); + $this->em->flush($user); } /** @@ -1125,8 +1129,8 @@ public function testFlushSingleAndNewEntity() $user->username = 'domnikl'; $user->status = 'developer'; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); $otherUser = new CmsUser; $otherUser->name = 'Dominik2'; @@ -1135,10 +1139,10 @@ public function testFlushSingleAndNewEntity() $user->status = 'administrator'; - $this->_em->persist($otherUser); - $this->_em->flush($user); + $this->em->persist($otherUser); + $this->em->flush($user); - self::assertTrue($this->_em->contains($otherUser), "Other user is contained in EntityManager"); + self::assertTrue($this->em->contains($otherUser), "Other user is contained in EntityManager"); self::assertTrue($otherUser->id > 0, "other user has an id"); } @@ -1152,8 +1156,8 @@ public function testFlushAndCascadePersist() $user->username = 'domnikl'; $user->status = 'developer'; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); $address = new CmsAddress(); $address->city = "Springfield"; @@ -1163,9 +1167,9 @@ public function testFlushAndCascadePersist() $address->user = $user; $user->address = $address; - $this->_em->flush($user); + $this->em->flush($user); - self::assertTrue($this->_em->contains($address), "Other user is contained in EntityManager"); + self::assertTrue($this->em->contains($address), "Other user is contained in EntityManager"); self::assertTrue($address->id > 0, "other user has an id"); } @@ -1179,8 +1183,8 @@ public function testFlushSingleAndNoCascade() $user->username = 'domnikl'; $user->status = 'developer'; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); $article1 = new CmsArticle(); $article1->topic = 'Foo'; @@ -1191,7 +1195,7 @@ public function testFlushSingleAndNoCascade() $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage("A new entity was found through the relationship 'Doctrine\Tests\Models\CMS\CmsUser#articles'"); - $this->_em->flush($user); + $this->em->flush($user); } /** @@ -1206,16 +1210,16 @@ public function testFlushSingleNewEntityThenRemove() $user->username = 'domnikl'; $user->status = 'developer'; - $this->_em->persist($user); - $this->_em->flush($user); + $this->em->persist($user); + $this->em->flush($user); $userId = $user->id; - $this->_em->remove($user); - $this->_em->flush($user); - $this->_em->clear(); + $this->em->remove($user); + $this->em->flush($user); + $this->em->clear(); - self::assertNull($this->_em->find(get_class($user), $userId)); + self::assertNull($this->em->find(get_class($user), $userId)); } /** @@ -1228,21 +1232,21 @@ public function testProxyIsIgnored() $user->username = 'domnikl'; $user->status = 'developer'; - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); - $user = $this->_em->getReference(get_class($user), $user->id); + $user = $this->em->getReference(get_class($user), $user->id); $otherUser = new CmsUser; $otherUser->name = 'Dominik2'; $otherUser->username = 'domnikl2'; $otherUser->status = 'developer'; - $this->_em->persist($otherUser); - $this->_em->flush($user); + $this->em->persist($otherUser); + $this->em->flush($user); - self::assertTrue($this->_em->contains($otherUser), "Other user is contained in EntityManager"); + self::assertTrue($this->em->contains($otherUser), "Other user is contained in EntityManager"); self::assertTrue($otherUser->id > 0, "other user has an id"); } @@ -1255,23 +1259,23 @@ public function testFlushSingleSaveOnlySingle() $user->name = 'Dominik'; $user->username = 'domnikl'; $user->status = 'developer'; - $this->_em->persist($user); + $this->em->persist($user); $user2 = new CmsUser; $user2->name = 'Dominik'; $user2->username = 'domnikl2'; $user2->status = 'developer'; - $this->_em->persist($user2); + $this->em->persist($user2); - $this->_em->flush(); + $this->em->flush(); $user->status = 'admin'; $user2->status = 'admin'; - $this->_em->flush($user); - $this->_em->clear(); + $this->em->flush($user); + $this->em->clear(); - $user2 = $this->_em->find(get_class($user2), $user2->id); + $user2 = $this->em->find(get_class($user2), $user2->id); self::assertEquals('developer', $user2->status); } @@ -1292,8 +1296,8 @@ public function testWrongAssociationInstance() '"Doctrine\Tests\Models\CMS\CmsUser#$address", got "Doctrine\Tests\Models\CMS\CmsUser" instead.' ); - $this->_em->persist($user); + $this->em->persist($user); - $this->_em->flush(); + $this->em->flush(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/CascadeRemoveOrderTest.php b/tests/Doctrine/Tests/ORM/Functional/CascadeRemoveOrderTest.php index 8908e51e009..cf05520e57d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/CascadeRemoveOrderTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/CascadeRemoveOrderTest.php @@ -14,10 +14,10 @@ protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(CascadeRemoveOrderEntityO::class), - $this->_em->getClassMetadata(CascadeRemoveOrderEntityG::class), + $this->em->getClassMetadata(CascadeRemoveOrderEntityO::class), + $this->em->getClassMetadata(CascadeRemoveOrderEntityG::class), ] ); } @@ -26,10 +26,10 @@ protected function tearDown() { parent::tearDown(); - $this->_schemaTool->dropSchema( + $this->schemaTool->dropSchema( [ - $this->_em->getClassMetadata(CascadeRemoveOrderEntityO::class), - $this->_em->getClassMetadata(CascadeRemoveOrderEntityG::class), + $this->em->getClassMetadata(CascadeRemoveOrderEntityO::class), + $this->em->getClassMetadata(CascadeRemoveOrderEntityG::class), ] ); } @@ -39,14 +39,14 @@ public function testSingle() $eO = new CascadeRemoveOrderEntityO(); $eG = new CascadeRemoveOrderEntityG($eO); - $this->_em->persist($eO); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($eO); + $this->em->flush(); + $this->em->clear(); - $eOloaded = $this->_em->find(CascadeRemoveOrderEntityO::class, $eO->getId()); + $eOloaded = $this->em->find(CascadeRemoveOrderEntityO::class, $eO->getId()); - $this->_em->remove($eOloaded); - $this->_em->flush(); + $this->em->remove($eOloaded); + $this->em->flush(); self::assertNull($this->_em->find(CascadeRemoveOrderEntityG::class, $eG->getId())); } @@ -60,18 +60,18 @@ public function testMany() $eO->setOneToOneG($eG2); - $this->_em->persist($eO); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($eO); + $this->em->flush(); + $this->em->clear(); - $eOloaded = $this->_em->find(CascadeRemoveOrderEntityO::class, $eO->getId()); + $eOloaded = $this->em->find(CascadeRemoveOrderEntityO::class, $eO->getId()); - $this->_em->remove($eOloaded); - $this->_em->flush(); + $this->em->remove($eOloaded); + $this->em->flush(); - self::assertNull($this->_em->find(CascadeRemoveOrderEntityG::class, $eG1->getId())); - self::assertNull($this->_em->find(CascadeRemoveOrderEntityG::class, $eG2->getId())); - self::assertNull($this->_em->find(CascadeRemoveOrderEntityG::class, $eG3->getId())); + self::assertNull($this->em->find(CascadeRemoveOrderEntityG::class, $eG1->getId())); + self::assertNull($this->em->find(CascadeRemoveOrderEntityG::class, $eG2->getId())); + self::assertNull($this->em->find(CascadeRemoveOrderEntityG::class, $eG3->getId())); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest.php b/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest.php index f5608d33a41..3f32a9adcf8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest.php @@ -33,21 +33,21 @@ public function testCRUD() $person = new CompanyPerson; $person->setName('Roman S. Borschel'); - $this->_em->persist($person); + $this->em->persist($person); $employee = new CompanyEmployee; $employee->setName('Roman S. Borschel'); $employee->setSalary(100000); $employee->setDepartment('IT'); - $this->_em->persist($employee); + $this->em->persist($employee); $employee->setName('Guilherme Blanco'); - $this->_em->flush(); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); - $query = $this->_em->createQuery('select p from ' . CompanyPerson::class . ' p order by p.name desc'); + $query = $this->em->createQuery('select p from ' . CompanyPerson::class . ' p order by p.name desc'); $entities = $query->getResult(); @@ -60,9 +60,9 @@ public function testCRUD() self::assertEquals('Guilherme Blanco', $entities[1]->getName()); self::assertEquals(100000, $entities[1]->getSalary()); - $this->_em->clear(); + $this->em->clear(); - $query = $this->_em->createQuery('select p from ' . CompanyEmployee::class . ' p'); + $query = $this->em->createQuery('select p from ' . CompanyEmployee::class . ' p'); $entities = $query->getResult(); @@ -72,16 +72,17 @@ public function testCRUD() self::assertEquals('Guilherme Blanco', $entities[0]->getName()); self::assertEquals(100000, $entities[0]->getSalary()); - $this->_em->clear(); + $this->em->clear(); - $guilherme = $this->_em->getRepository(get_class($employee))->findOneBy(['name' => 'Guilherme Blanco']); + $guilherme = $this->em->getRepository(get_class($employee))->findOneBy(['name' => 'Guilherme Blanco']); self::assertInstanceOf(CompanyEmployee::class, $guilherme); self::assertEquals('Guilherme Blanco', $guilherme->getName()); - $this->_em->clear(); + $this->em->clear(); + + $query = $this->em->createQuery("update " . CompanyEmployee::class . " p set p.name = ?1, p.department = ?2 where p.name='Guilherme Blanco' and p.salary = ?3"); - $query = $this->_em->createQuery("update " . CompanyEmployee::class . " p set p.name = ?1, p.department = ?2 where p.name='Guilherme Blanco' and p.salary = ?3"); $query->setParameter(1, 'NewName', 'string'); $query->setParameter(2, 'NewDepartment'); $query->setParameter(3, 100000); @@ -91,7 +92,8 @@ public function testCRUD() self::assertEquals(1, $numUpdated); - $query = $this->_em->createQuery('delete from ' . CompanyPerson::class . ' p'); + $query = $this->em->createQuery('delete from ' . CompanyPerson::class . ' p'); + $numDeleted = $query->execute(); self::assertEquals(2, $numDeleted); @@ -104,18 +106,18 @@ public function testMultiLevelUpdateAndFind() $manager->setSalary(100000); $manager->setDepartment('IT'); $manager->setTitle('CTO'); - $this->_em->persist($manager); - $this->_em->flush(); + $this->em->persist($manager); + $this->em->flush(); $manager->setName('Roman B.'); $manager->setSalary(119000); $manager->setTitle('CEO'); - $this->_em->persist($manager); - $this->_em->flush(); + $this->em->persist($manager); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); - $manager = $this->_em->find(CompanyManager::class, $manager->getId()); + $manager = $this->em->find(CompanyManager::class, $manager->getId()); self::assertInstanceOf(CompanyManager::class, $manager); self::assertEquals('Roman B.', $manager->getName()); @@ -131,12 +133,12 @@ public function testFindOnBaseClass() $manager->setSalary(100000); $manager->setDepartment('IT'); $manager->setTitle('CTO'); - $this->_em->persist($manager); - $this->_em->flush(); + $this->em->persist($manager); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); - $person = $this->_em->find(CompanyPerson::class, $manager->getId()); + $person = $this->em->find(CompanyPerson::class, $manager->getId()); self::assertInstanceOf(CompanyManager::class, $person); self::assertEquals('Roman S. Borschel', $person->getName()); @@ -160,12 +162,12 @@ public function testSelfReferencingOneToOne() self::assertSame($manager, $wife->getSpouse()); self::assertSame($wife, $manager->getSpouse()); - $this->_em->persist($manager); - $this->_em->persist($wife); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($manager); + $this->em->persist($wife); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery('select p, s from ' . CompanyPerson::class . ' p join p.spouse s where p.name=\'Mary Smith\''); + $query = $this->em->createQuery('select p, s from ' . CompanyPerson::class . ' p join p.spouse s where p.name=\'Mary Smith\''); $result = $query->getResult(); @@ -190,14 +192,15 @@ public function testSelfReferencingManyToMany() self::assertCount(1, $person1->getFriends()); self::assertCount(1, $person2->getFriends()); - $this->_em->persist($person1); - $this->_em->persist($person2); + $this->em->persist($person1); + $this->em->persist($person2); + + $this->em->flush(); - $this->_em->flush(); + $this->em->clear(); - $this->_em->clear(); + $query = $this->em->createQuery('select p, f from ' . CompanyPerson::class . ' p join p.friends f where p.name=?1'); - $query = $this->_em->createQuery('select p, f from ' . CompanyPerson::class . ' p join p.friends f where p.name=?1'); $query->setParameter(1, 'Roman'); $result = $query->getResult(); @@ -221,13 +224,13 @@ public function testLazyLoading1() $event2->setData('raffle'); $org->addEvent($event2); - $this->_em->persist($org); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($org); + $this->em->flush(); + $this->em->clear(); $orgId = $org->getId(); - $q = $this->_em->createQuery('select a from Doctrine\Tests\Models\Company\CompanyOrganization a where a.id = ?1'); + $q = $this->em->createQuery('select a from Doctrine\Tests\Models\Company\CompanyOrganization a where a.id = ?1'); $q->setParameter(1, $orgId); $result = $q->getResult(); @@ -258,11 +261,12 @@ public function testLazyLoading2() $event1->setData('auction'); $org->setMainEvent($event1); - $this->_em->persist($org); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($org); + $this->em->flush(); + $this->em->clear(); + + $q = $this->em->createQuery('select a from ' . CompanyEvent::class . ' a where a.id = ?1'); - $q = $this->_em->createQuery('select a from ' . CompanyEvent::class . ' a where a.id = ?1'); $q->setParameter(1, $event1->getId()); $result = $q->getResult(); @@ -270,9 +274,10 @@ public function testLazyLoading2() self::assertCount(1, $result); self::assertInstanceOf(CompanyAuction::class, $result[0], sprintf("Is of class %s",get_class($result[0]))); - $this->_em->clear(); + $this->em->clear(); + + $q = $this->em->createQuery('select a from ' . CompanyOrganization::class . ' a where a.id = ?1'); - $q = $this->_em->createQuery('select a from ' . CompanyOrganization::class . ' a where a.id = ?1'); $q->setParameter(1, $org->getId()); $result = $q->getResult(); @@ -292,10 +297,10 @@ public function testLazyLoading2() */ public function testBulkUpdateIssueDDC368() { - $this->_em->createQuery('UPDATE ' . CompanyEmployee::class . ' AS p SET p.salary = 1') + $this->em->createQuery('UPDATE ' . CompanyEmployee::class . ' AS p SET p.salary = 1') ->execute(); - $result = $this->_em->createQuery('SELECT count(p.id) FROM ' . CompanyEmployee::class . ' p WHERE p.salary = 1') + $result = $this->em->createQuery('SELECT count(p.id) FROM ' . CompanyEmployee::class . ' p WHERE p.salary = 1') ->getResult(); self::assertGreaterThan(0, count($result)); @@ -306,7 +311,7 @@ public function testBulkUpdateIssueDDC368() */ public function testBulkUpdateNonScalarParameterDDC1341() { - $this->_em->createQuery('UPDATE ' . CompanyEmployee::class . ' AS p SET p.startDate = ?0 WHERE p.department = ?1') + $this->em->createQuery('UPDATE ' . CompanyEmployee::class . ' AS p SET p.startDate = ?0 WHERE p.department = ?1') ->setParameter(0, new \DateTime()) ->setParameter(1, 'IT') ->execute(); @@ -331,16 +336,16 @@ public function testDeleteJoinTableRecords() $employee1->addFriend($employee2); - $this->_em->persist($employee1); - $this->_em->persist($employee2); - $this->_em->flush(); + $this->em->persist($employee1); + $this->em->persist($employee2); + $this->em->flush(); $employee1Id = $employee1->getId(); - $this->_em->remove($employee1); - $this->_em->flush(); + $this->em->remove($employee1); + $this->em->flush(); - self::assertNull($this->_em->find(get_class($employee1), $employee1Id)); + self::assertNull($this->em->find(get_class($employee1), $employee1Id)); } /** @@ -359,12 +364,12 @@ public function testQueryForInheritedSingleValuedAssociation() $manager->setSpouse($person); - $this->_em->persist($manager); - $this->_em->persist($person); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($manager); + $this->em->persist($person); + $this->em->flush(); + $this->em->clear(); - $dqlManager = $this->_em->createQuery('SELECT m FROM ' . CompanyManager::class . ' m WHERE m.spouse = ?1') + $dqlManager = $this->em->createQuery('SELECT m FROM ' . CompanyManager::class . ' m WHERE m.spouse = ?1') ->setParameter(1, $person->getId()) ->getSingleResult(); @@ -388,17 +393,17 @@ public function testFindByAssociation() $manager->setSpouse($person); - $this->_em->persist($manager); - $this->_em->persist($person); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($manager); + $this->em->persist($person); + $this->em->flush(); + $this->em->clear(); - $repos = $this->_em->getRepository(CompanyManager::class); + $repos = $this->em->getRepository(CompanyManager::class); $pmanager = $repos->findOneBy(['spouse' => $person->getId()]); self::assertEquals($manager->getId(), $pmanager->getId()); - $repos = $this->_em->getRepository(CompanyPerson::class); + $repos = $this->em->getRepository(CompanyPerson::class); $pmanager = $repos->findOneBy(['spouse' => $person->getId()]); self::assertEquals($manager->getId(), $pmanager->getId()); @@ -415,17 +420,17 @@ public function testGetReferenceEntityWithSubclasses() $manager->setTitle('Awesome!'); $manager->setDepartment('IT'); - $this->_em->persist($manager); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($manager); + $this->em->flush(); + $this->em->clear(); - $ref = $this->_em->getReference(CompanyPerson::class, $manager->getId()); + $ref = $this->em->getReference(CompanyPerson::class, $manager->getId()); self::assertNotInstanceOf(Proxy::class, $ref, "Cannot Request a proxy from a class that has subclasses."); self::assertInstanceOf(CompanyPerson::class, $ref); self::assertInstanceOf(CompanyEmployee::class, $ref, "Direct fetch of the reference has to load the child class Employee directly."); - $this->_em->clear(); + $this->em->clear(); - $ref = $this->_em->getReference(CompanyManager::class, $manager->getId()); + $ref = $this->em->getReference(CompanyManager::class, $manager->getId()); self::assertInstanceOf(Proxy::class, $ref, "A proxy can be generated only if no subclasses exists for the requested reference."); } @@ -445,12 +450,12 @@ public function testGetSubClassManyToManyCollection() $manager->addFriend($person); - $this->_em->persist($manager); - $this->_em->persist($person); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($manager); + $this->em->persist($person); + $this->em->flush(); + $this->em->clear(); - $manager = $this->_em->find(CompanyManager::class, $manager->getId()); + $manager = $this->em->find(CompanyManager::class, $manager->getId()); self::assertCount(1, $manager->getFriends()); } @@ -466,12 +471,12 @@ public function testExistsSubclass() $manager->setTitle('Awesome!'); $manager->setDepartment('IT'); - self::assertFalse($this->_em->getUnitOfWork()->getEntityPersister(get_class($manager))->exists($manager)); + self::assertFalse($this->em->getUnitOfWork()->getEntityPersister(get_class($manager))->exists($manager)); - $this->_em->persist($manager); - $this->_em->flush(); + $this->em->persist($manager); + $this->em->flush(); - self::assertTrue($this->_em->getUnitOfWork()->getEntityPersister(get_class($manager))->exists($manager)); + self::assertTrue($this->em->getUnitOfWork()->getEntityPersister(get_class($manager))->exists($manager)); } /** @@ -485,17 +490,17 @@ public function testMatching() $manager->setTitle('Awesome!'); $manager->setDepartment('IT'); - $this->_em->persist($manager); - $this->_em->flush(); + $this->em->persist($manager); + $this->em->flush(); - $repository = $this->_em->getRepository(CompanyEmployee::class); + $repository = $this->em->getRepository(CompanyEmployee::class); $users = $repository->matching(new Criteria( Criteria::expr()->eq('department', 'IT') )); self::assertCount(1, $users); - $repository = $this->_em->getRepository(CompanyManager::class); + $repository = $this->em->getRepository(CompanyManager::class); $users = $repository->matching(new Criteria( Criteria::expr()->eq('department', 'IT') )); diff --git a/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest2.php b/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest2.php index 2a8d863ebe1..cb23c878f2b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest2.php +++ b/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest2.php @@ -16,12 +16,12 @@ protected function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(CTIParent::class), - $this->_em->getClassMetadata(CTIChild::class), - $this->_em->getClassMetadata(CTIRelated::class), - $this->_em->getClassMetadata(CTIRelated2::class) + $this->em->getClassMetadata(CTIParent::class), + $this->em->getClassMetadata(CTIChild::class), + $this->em->getClassMetadata(CTIRelated::class), + $this->em->getClassMetadata(CTIRelated2::class) ] ); } catch (\Exception $ignored) { @@ -37,15 +37,15 @@ public function testOneToOneAssocToBaseTypeBidirectional() $related = new CTIRelated; $related->setCTIParent($child); - $this->_em->persist($related); - $this->_em->persist($child); + $this->em->persist($related); + $this->em->persist($child); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); $relatedId = $related->getId(); - $related2 = $this->_em->find(CTIRelated::class, $relatedId); + $related2 = $this->em->find(CTIRelated::class, $relatedId); self::assertInstanceOf(CTIRelated::class, $related2); self::assertInstanceOf(CTIChild::class, $related2->getCTIParent()); @@ -57,19 +57,19 @@ public function testOneToOneAssocToBaseTypeBidirectional() public function testManyToManyToCTIHierarchy() { - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger()); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger()); $mmrel = new CTIRelated2; $child = new CTIChild; $child->setData('child'); $mmrel->addCTIChild($child); - $this->_em->persist($mmrel); - $this->_em->persist($child); + $this->em->persist($mmrel); + $this->em->persist($child); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $mmrel2 = $this->_em->find(get_class($mmrel), $mmrel->getId()); + $mmrel2 = $this->em->find(get_class($mmrel), $mmrel->getId()); self::assertFalse($mmrel2->getCTIChildren()->isInitialized()); self::assertEquals(1, count($mmrel2->getCTIChildren())); self::assertTrue($mmrel2->getCTIChildren()->isInitialized()); diff --git a/tests/Doctrine/Tests/ORM/Functional/ClearEventTest.php b/tests/Doctrine/Tests/ORM/Functional/ClearEventTest.php index 18fb5814419..0863db90f80 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ClearEventTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ClearEventTest.php @@ -16,9 +16,9 @@ class ClearEventTest extends OrmFunctionalTestCase public function testEventIsCalledOnClear() { $listener = new OnClearListener; - $this->_em->getEventManager()->addEventListener(Events::onClear, $listener); + $this->em->getEventManager()->addEventListener(Events::onClear, $listener); - $this->_em->clear(); + $this->em->clear(); self::assertTrue($listener->called); } diff --git a/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyTest.php index 2f2de36be5c..8633ec084a2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyTest.php @@ -22,23 +22,23 @@ public function setUp() public function putGermanysBrandenburderTor() { $country = new NavCountry("Germany"); - $this->_em->persist($country); + $this->em->persist($country); $poi = new NavPointOfInterest(100, 200, "Brandenburger Tor", $country); - $this->_em->persist($poi); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($poi); + $this->em->flush(); + $this->em->clear(); } public function putTripAroundEurope() { - $poi = $this->_em->find(NavPointOfInterest::class, ['lat' => 100, 'long' => 200]); + $poi = $this->em->find(NavPointOfInterest::class, ['lat' => 100, 'long' => 200]); $tour = new NavTour("Trip around Europe"); $tour->addPointOfInterest($poi); - $this->_em->persist($tour); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($tour); + $this->em->flush(); + $this->em->clear(); return $tour; } @@ -47,7 +47,7 @@ public function testPersistCompositePkEntity() { $this->putGermanysBrandenburderTor(); - $poi = $this->_em->find(NavPointOfInterest::class, ['lat' => 100, 'long' => 200]); + $poi = $this->em->find(NavPointOfInterest::class, ['lat' => 100, 'long' => 200]); self::assertInstanceOf(NavPointOfInterest::class, $poi); self::assertEquals(100, $poi->getLat()); @@ -62,32 +62,32 @@ public function testSetParameterCompositeKeyObject() { $this->putGermanysBrandenburderTor(); - $poi = $this->_em->find(NavPointOfInterest::class, ['lat' => 100, 'long' => 200]); + $poi = $this->em->find(NavPointOfInterest::class, ['lat' => 100, 'long' => 200]); $photo = new NavPhotos($poi, "asdf"); - $this->_em->persist($photo); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($photo); + $this->em->flush(); + $this->em->clear(); $dql = 'SELECT t FROM Doctrine\Tests\Models\Navigation\NavPhotos t WHERE t.poi = ?1'; $this->expectException(QueryException::class); $this->expectExceptionMessage('A single-valued association path expression to an entity with a composite primary key is not supported.'); - $sql = $this->_em->createQuery($dql)->getSQL(); + $sql = $this->em->createQuery($dql)->getSQL(); } public function testIdentityFunctionWithCompositePrimaryKey() { $this->putGermanysBrandenburderTor(); - $poi = $this->_em->find(NavPointOfInterest::class, ['lat' => 100, 'long' => 200]); + $poi = $this->em->find(NavPointOfInterest::class, ['lat' => 100, 'long' => 200]); $photo = new NavPhotos($poi, "asdf"); - $this->_em->persist($photo); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($photo); + $this->em->flush(); + $this->em->clear(); $dql = "SELECT IDENTITY(p.poi, 'long') AS long, IDENTITY(p.poi, 'lat') AS lat FROM Doctrine\Tests\Models\Navigation\NavPhotos p"; - $result = $this->_em->createQuery($dql)->getResult(); + $result = $this->em->createQuery($dql)->getResult(); self::assertCount(1, $result); self::assertEquals(200, $result[0]['long']); @@ -99,7 +99,7 @@ public function testManyToManyCompositeRelation() $this->putGermanysBrandenburderTor(); $tour = $this->putTripAroundEurope(); - $tour = $this->_em->find(NavTour::class, $tour->getId()); + $tour = $this->em->find(NavTour::class, $tour->getId()); self::assertEquals(1, count($tour->getPointOfInterests())); } @@ -115,7 +115,7 @@ public function testCompositeDqlEagerFetching() . 'INNER JOIN p.country c' ; - $tours = $this->_em->createQuery($dql)->getResult(); + $tours = $this->em->createQuery($dql)->getResult(); self::assertEquals(1, count($tours)); @@ -137,7 +137,7 @@ public function testCompositeCollectionMemberExpression() . 'WHERE p MEMBER OF t.pois' ; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $tours = $query->getResult(); self::assertEquals(0, count($tours)); @@ -148,7 +148,7 @@ public function testSpecifyUnknownIdentifierPrimaryKeyFails() $this->expectException(ORMException::class); $this->expectExceptionMessage('The identifier long is missing for a query of Doctrine\Tests\Models\Navigation\NavPointOfInterest'); - $poi = $this->_em->find(NavPointOfInterest::class, ['key1' => 100]); + $poi = $this->em->find(NavPointOfInterest::class, ['key1' => 100]); } public function testUnrecognizedIdentifierFieldsOnGetReference() @@ -156,7 +156,7 @@ public function testUnrecognizedIdentifierFieldsOnGetReference() $this->expectException(ORMException::class); $this->expectExceptionMessage("Unrecognized identifier fields: 'key1'"); - $poi = $this->_em->getReference(NavPointOfInterest::class, ['lat' => 10, 'long' => 20, 'key1' => 100] + $poi = $this->em->getReference(NavPointOfInterest::class, ['lat' => 10, 'long' => 20, 'key1' => 100] ); } @@ -167,18 +167,18 @@ public function testDeleteCompositePersistentCollection() { $this->putGermanysBrandenburderTor(); - $poi = $this->_em->find(NavPointOfInterest::class, ['lat' => 100, 'long' => 200]); + $poi = $this->em->find(NavPointOfInterest::class, ['lat' => 100, 'long' => 200]); $poi->addVisitor(new NavUser("test1")); $poi->addVisitor(new NavUser("test2")); - $this->_em->flush(); + $this->em->flush(); $poi->getVisitors()->clear(); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $poi = $this->_em->find(NavPointOfInterest::class, ['lat' => 100, 'long' => 200]); + $poi = $this->em->find(NavPointOfInterest::class, ['lat' => 100, 'long' => 200]); self::assertEquals(0, count($poi->getVisitors())); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyWithAssociationsTest.php b/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyWithAssociationsTest.php index dd6019da9c8..35802d2a6f4 100644 --- a/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyWithAssociationsTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyWithAssociationsTest.php @@ -16,13 +16,13 @@ public function setUp() $it = new Country("IT", "Italy"); - $this->_em->persist($it); - $this->_em->flush(); + $this->em->persist($it); + $this->em->flush(); $admin1 = new Admin1(1, "Rome", $it); - $this->_em->persist($admin1); - $this->_em->flush(); + $this->em->persist($admin1); + $this->em->flush(); $name1 = new Admin1AlternateName(1, "Roma", $admin1); $name2 = new Admin1AlternateName(2, "Rome", $admin1); @@ -30,19 +30,19 @@ public function setUp() $admin1->names[] = $name1; $admin1->names[] = $name2; - $this->_em->persist($admin1); - $this->_em->persist($name1); - $this->_em->persist($name2); + $this->em->persist($admin1); + $this->em->persist($name1); + $this->em->persist($name2); - $this->_em->flush(); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); } public function testFindByAbleToGetCompositeEntitiesWithMixedTypeIdentifiers() { - $admin1Repo = $this->_em->getRepository(Admin1::class); - $admin1NamesRepo = $this->_em->getRepository(Admin1AlternateName::class); + $admin1Repo = $this->em->getRepository(Admin1::class); + $admin1NamesRepo = $this->em->getRepository(Admin1AlternateName::class); $admin1Rome = $admin1Repo->findOneBy(['country' => 'IT', 'id' => 1]); diff --git a/tests/Doctrine/Tests/ORM/Functional/CustomFunctionsTest.php b/tests/Doctrine/Tests/ORM/Functional/CustomFunctionsTest.php index 1aebb983e1b..a42fd90e3a1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/CustomFunctionsTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/CustomFunctionsTest.php @@ -27,18 +27,18 @@ public function testCustomFunctionDefinedWithCallback() $user = new CmsUser(); $user->name = 'Bob'; $user->username = 'Dylan'; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); // Instead of defining the function with the class name, we use a callback - $this->_em->getConfiguration()->addCustomStringFunction('FOO', function($funcName) { + $this->em->getConfiguration()->addCustomStringFunction('FOO', function($funcName) { return new NoOp($funcName); }); - $this->_em->getConfiguration()->addCustomNumericFunction('BAR', function($funcName) { + $this->em->getConfiguration()->addCustomNumericFunction('BAR', function($funcName) { return new NoOp($funcName); }); - $query = $this->_em->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u' + $query = $this->em->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u' . ' WHERE FOO(u.name) = \'Bob\'' . ' AND BAR(1) = 1'); diff --git a/tests/Doctrine/Tests/ORM/Functional/CustomIdObjectTypeTest.php b/tests/Doctrine/Tests/ORM/Functional/CustomIdObjectTypeTest.php index c9e9e6da2fd..65b4ed43449 100644 --- a/tests/Doctrine/Tests/ORM/Functional/CustomIdObjectTypeTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/CustomIdObjectTypeTest.php @@ -28,10 +28,10 @@ public function testFindByCustomIdObject() { $parent = new CustomIdObjectTypeParent(new CustomIdObject('foo')); - $this->_em->persist($parent); - $this->_em->flush(); + $this->em->persist($parent); + $this->em->flush(); - $result = $this->_em->find(CustomIdObjectTypeParent::class, $parent->id); + $result = $this->em->find(CustomIdObjectTypeParent::class, $parent->id); self::assertSame($parent, $result); } @@ -46,11 +46,11 @@ public function testFetchJoinCustomIdObject() $parent->children->add(new CustomIdObjectTypeChild(new CustomIdObject('bar'), $parent)); - $this->_em->persist($parent); - $this->_em->flush(); + $this->em->persist($parent); + $this->em->flush(); $result = $this - ->_em + ->em ->createQuery( 'SELECT parent, children FROM ' . CustomIdObjectTypeParent::class @@ -72,12 +72,12 @@ public function testFetchJoinWhereCustomIdObject() $parent->children->add(new CustomIdObjectTypeChild(new CustomIdObject('bar'), $parent)); - $this->_em->persist($parent); - $this->_em->flush(); + $this->em->persist($parent); + $this->em->flush(); // note: hydration is willingly broken in this example: $result = $this - ->_em + ->em ->createQuery( 'SELECT parent, children FROM ' . CustomIdObjectTypeParent::class diff --git a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php index 26459733779..26cb901832d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php @@ -12,7 +12,7 @@ class DatabaseDriverTest extends DatabaseDriverTestCase /** * @var \Doctrine\DBAL\Schema\AbstractSchemaManager */ - protected $_sm = null; + protected $sm = null; public function setUp() { @@ -20,7 +20,7 @@ public function setUp() parent::setUp(); - $this->_sm = $this->_em->getConnection()->getSchemaManager(); + $this->sm = $this->em->getConnection()->getSchemaManager(); } /** @@ -28,7 +28,7 @@ public function setUp() */ public function testIssue2059() { - if (!$this->_em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) { + if (!$this->em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) { $this->markTestSkipped('Platform does not support foreign keys.'); } @@ -50,7 +50,7 @@ public function testIssue2059() public function testLoadMetadataFromDatabase() { - if (!$this->_em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) { + if (!$this->em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) { $this->markTestSkipped('Platform does not support foreign keys.'); } @@ -59,7 +59,7 @@ public function testLoadMetadataFromDatabase() $table->setPrimaryKey(['id']); $table->addColumn('bar', 'string', ['notnull' => false, 'length' => 200]); - $this->_sm->dropAndCreateTable($table); + $this->sm->dropAndCreateTable($table); $metadatas = $this->extractClassMetadata(["DbdriverFoo"]); @@ -88,7 +88,7 @@ public function testLoadMetadataFromDatabase() public function testLoadMetadataWithForeignKeyFromDatabase() { - if (!$this->_em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) { + if (!$this->em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) { $this->markTestSkipped('Platform does not support foreign keys.'); } @@ -96,7 +96,7 @@ public function testLoadMetadataWithForeignKeyFromDatabase() $tableB->addColumn('id', 'integer'); $tableB->setPrimaryKey(['id']); - $this->_sm->dropAndCreateTable($tableB); + $this->sm->dropAndCreateTable($tableB); $tableA = new Table("dbdriver_baz"); $tableA->addColumn('id', 'integer'); @@ -104,7 +104,7 @@ public function testLoadMetadataWithForeignKeyFromDatabase() $tableA->addColumn('bar_id', 'integer'); $tableA->addForeignKeyConstraint('dbdriver_bar', ['bar_id'], ['id']); - $this->_sm->dropAndCreateTable($tableA); + $this->sm->dropAndCreateTable($tableA); $metadatas = $this->extractClassMetadata(["DbdriverBar", "DbdriverBaz"]); @@ -123,7 +123,7 @@ public function testLoadMetadataWithForeignKeyFromDatabase() public function testDetectManyToManyTables() { - if (!$this->_em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) { + if (!$this->em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) { $this->markTestSkipped('Platform does not support foreign keys.'); } @@ -163,7 +163,7 @@ public function testIgnoreManyToManyTableWithoutFurtherForeignKeyDetails() public function testLoadMetadataFromDatabaseDetail() { - if ( ! $this->_em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) { + if ( ! $this->em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) { $this->markTestSkipped('Platform does not support foreign keys.'); } @@ -184,7 +184,7 @@ public function testLoadMetadataFromDatabaseDetail() $table->addColumn('column_unique_index2', 'string'); $table->addUniqueIndex(['column_unique_index1', 'column_unique_index2'], 'unique_index1'); - $this->_sm->dropAndCreateTable($table); + $this->sm->dropAndCreateTable($table); $metadatas = $this->extractClassMetadata(["DbdriverFoo"]); @@ -202,8 +202,8 @@ public function testLoadMetadataFromDatabaseDetail() // FIXME: Condition here is fugly. // NOTE: PostgreSQL and SQL SERVER do not support UNSIGNED integer - if ( ! $this->_em->getConnection()->getDatabasePlatform() instanceof PostgreSqlPlatform AND - ! $this->_em->getConnection()->getDatabasePlatform() instanceof SQLServerPlatform) { + if ( ! $this->em->getConnection()->getDatabasePlatform() instanceof PostgreSqlPlatform AND + ! $this->em->getConnection()->getDatabasePlatform() instanceof SQLServerPlatform) { self::assertNotNull($metadata->getProperty('columnUnsigned')); $columnUnsignedProperty = $metadata->getProperty('columnUnsigned'); diff --git a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTestCase.php b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTestCase.php index 0a4672dfc72..efe6d30193d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTestCase.php +++ b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTestCase.php @@ -13,7 +13,7 @@ abstract class DatabaseDriverTestCase extends OrmFunctionalTestCase { protected function convertToClassMetadata(array $entityTables, array $manyTables = []) { - $sm = $this->_em->getConnection()->getSchemaManager(); + $sm = $this->em->getConnection()->getSchemaManager(); $driver = new DatabaseDriver($sm); $driver->setTables($entityTables, $manyTables); @@ -36,7 +36,7 @@ protected function extractClassMetadata(array $classNames) $classNames = array_map('strtolower', $classNames); $metadatas = []; - $sm = $this->_em->getConnection()->getSchemaManager(); + $sm = $this->em->getConnection()->getSchemaManager(); $driver = new DatabaseDriver($sm); foreach ($driver->getAllClassNames() as $className) { diff --git a/tests/Doctrine/Tests/ORM/Functional/DefaultValuesTest.php b/tests/Doctrine/Tests/ORM/Functional/DefaultValuesTest.php index 05dea616ca7..d98bcda6ff4 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DefaultValuesTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DefaultValuesTest.php @@ -15,10 +15,10 @@ protected function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DefaultValueUser::class), - $this->_em->getClassMetadata(DefaultValueAddress::class) + $this->em->getClassMetadata(DefaultValueUser::class), + $this->em->getClassMetadata(DefaultValueAddress::class) ] ); } catch (\Exception $e) { @@ -32,14 +32,14 @@ protected function setUp() public function testSimpleDetachMerge() { $user = new DefaultValueUser; $user->name = 'romanb'; - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); $userId = $user->id; // e.g. from $_REQUEST - $user2 = $this->_em->getReference(get_class($user), $userId); + $user2 = $this->em->getReference(get_class($user), $userId); - $this->_em->flush(); + $this->em->flush(); self::assertFalse($user2->__isInitialized__); $a = new DefaultValueAddress; @@ -49,13 +49,13 @@ public function testSimpleDetachMerge() { $a->street = 'Sesamestreet'; $a->user = $user2; - $this->_em->persist($a); - $this->_em->flush(); + $this->em->persist($a); + $this->em->flush(); self::assertFalse($user2->__isInitialized__); - $this->_em->clear(); + $this->em->clear(); - $a2 = $this->_em->find(get_class($a), $a->id); + $a2 = $this->em->find(get_class($a), $a->id); self::assertInstanceOf(DefaultValueUser::class, $a2->getUser()); self::assertEquals($userId, $a2->getUser()->getId()); self::assertEquals('Poweruser', $a2->getUser()->type); @@ -70,17 +70,17 @@ public function testGetPartialReferenceWithDefaultValueNotEvaluatedInFlush() $user->name = 'romanb'; $user->type = 'Normaluser'; - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); - $user = $this->_em->getPartialReference(DefaultValueUser::class, $user->id); - self::assertTrue($this->_em->getUnitOfWork()->isReadOnly($user)); + $user = $this->em->getPartialReference(DefaultValueUser::class, $user->id); + self::assertTrue($this->em->getUnitOfWork()->isReadOnly($user)); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $user = $this->_em->find(DefaultValueUser::class, $user->id); + $user = $this->em->find(DefaultValueUser::class, $user->id); self::assertEquals('Normaluser', $user->type); } diff --git a/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php b/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php index 62dd28ebb8b..279c6dd2d35 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php @@ -30,19 +30,19 @@ public function testSimpleDetachMerge() $user->name = 'Roman'; $user->username = 'romanb'; $user->status = 'dev'; - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); // $user is now detached - self::assertFalse($this->_em->contains($user)); + self::assertFalse($this->em->contains($user)); $user->name = 'Roman B.'; - $user2 = $this->_em->merge($user); + $user2 = $this->em->merge($user); self::assertFalse($user === $user2); - self::assertTrue($this->_em->contains($user2)); + self::assertTrue($this->em->contains($user2)); self::assertEquals('Roman B.', $user2->name); } @@ -57,17 +57,17 @@ public function testSerializeUnserializeModifyMerge() $ph1->phonenumber = "1234"; $user->addPhonenumber($ph1); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); - self::assertTrue($this->_em->contains($user)); + self::assertTrue($this->em->contains($user)); self::assertTrue($user->phonenumbers->isInitialized()); $serialized = serialize($user); - $this->_em->clear(); + $this->em->clear(); - self::assertFalse($this->_em->contains($user)); + self::assertFalse($this->em->contains($user)); unset($user); @@ -83,28 +83,28 @@ public function testSerializeUnserializeModifyMerge() $oldPhonenumbers = $user->getPhonenumbers(); self::assertEquals(2, count($oldPhonenumbers), "Pre-Condition: 2 Phonenumbers"); - self::assertFalse($this->_em->contains($user)); + self::assertFalse($this->em->contains($user)); - $this->_em->persist($ph2); + $this->em->persist($ph2); // Merge back in - $user = $this->_em->merge($user); // merge cascaded to phonenumbers + $user = $this->em->merge($user); // merge cascaded to phonenumbers self::assertInstanceOf(CmsUser::class, $user->phonenumbers[0]->user); self::assertInstanceOf(CmsUser::class, $user->phonenumbers[1]->user); - $im = $this->_em->getUnitOfWork()->getIdentityMap(); - $this->_em->flush(); + $im = $this->em->getUnitOfWork()->getIdentityMap(); + $this->em->flush(); - self::assertTrue($this->_em->contains($user), "Failed to assert that merged user is contained inside EntityManager persistence context."); + self::assertTrue($this->em->contains($user), "Failed to assert that merged user is contained inside EntityManager persistence context."); $phonenumbers = $user->getPhonenumbers(); self::assertNotSame($oldPhonenumbers, $phonenumbers, "Merge should replace the Detached Collection with a new PersistentCollection."); self::assertEquals(2, count($phonenumbers), "Failed to assert that two phonenumbers are contained in the merged users phonenumber collection."); self::assertInstanceOf(CmsPhonenumber::class, $phonenumbers[1]); - self::assertTrue($this->_em->contains($phonenumbers[1]), "Failed to assert that second phonenumber in collection is contained inside EntityManager persistence context."); + self::assertTrue($this->em->contains($phonenumbers[1]), "Failed to assert that second phonenumber in collection is contained inside EntityManager persistence context."); self::assertInstanceOf(CmsPhonenumber::class, $phonenumbers[0]); - self::assertTrue($this->_em->getUnitOfWork()->isInIdentityMap($phonenumbers[0])); - self::assertTrue($this->_em->contains($phonenumbers[0]), "Failed to assert that first phonenumber in collection is contained inside EntityManager persistence context."); + self::assertTrue($this->em->getUnitOfWork()->isInIdentityMap($phonenumbers[0])); + self::assertTrue($this->em->contains($phonenumbers[0]), "Failed to assert that first phonenumber in collection is contained inside EntityManager persistence context."); } /** @@ -115,15 +115,16 @@ public function testDetachedEntityThrowsExceptionOnFlush() $ph = new CmsPhonenumber(); $ph->phonenumber = '12345'; - $this->_em->persist($ph); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($ph); + $this->em->flush(); + $this->em->clear(); - $this->_em->persist($ph); + $this->em->persist($ph); // since it tries to insert the object twice (with the same PK) $this->expectException(UniqueConstraintViolationException::class); - $this->_em->flush(); + + $this->em->flush(); } public function testUninitializedLazyAssociationsAreIgnoredOnMerge() @@ -139,20 +140,20 @@ public function testUninitializedLazyAssociationsAreIgnoredOnMerge() $address->street = 'Sesamestreet'; $address->zip = 12345; $address->setUser($user); - $this->_em->persist($address); - $this->_em->persist($user); + $this->em->persist($address); + $this->em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $address2 = $this->_em->find(get_class($address), $address->id); + $address2 = $this->em->find(get_class($address), $address->id); self::assertInstanceOf(Proxy::class, $address2->user); self::assertFalse($address2->user->__isInitialized__); $detachedAddress2 = unserialize(serialize($address2)); self::assertInstanceOf(Proxy::class, $detachedAddress2->user); self::assertFalse($detachedAddress2->user->__isInitialized__); - $managedAddress2 = $this->_em->merge($detachedAddress2); + $managedAddress2 = $this->em->merge($detachedAddress2); self::assertInstanceOf(Proxy::class, $managedAddress2->user); self::assertFalse($managedAddress2->user === $detachedAddress2->user); self::assertFalse($managedAddress2->user->__isInitialized__); @@ -168,13 +169,14 @@ public function testUseDetachedEntityAsQueryParameter() $user->username = 'gblanco'; $user->status = 'developer'; - $this->_em->persist($user); + $this->em->persist($user); - $this->_em->flush(); - $this->_em->detach($user); + $this->em->flush(); + $this->em->detach($user); $dql = 'SELECT u FROM ' . CmsUser::class . ' u WHERE u.id = ?1'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); + $query->setParameter(1, $user); $newUser = $query->getSingleResult(); @@ -193,13 +195,13 @@ public function testDetachManagedUnpersistedEntity() $user->username = 'gblanco'; $user->status = 'developer'; - $this->_em->persist($user); - $this->_em->detach($user); + $this->em->persist($user); + $this->em->detach($user); - $this->_em->flush(); + $this->em->flush(); - self::assertFalse($this->_em->contains($user)); - self::assertFalse($this->_em->getUnitOfWork()->isInIdentityMap($user)); + self::assertFalse($this->em->contains($user)); + self::assertFalse($this->em->getUnitOfWork()->isInIdentityMap($user)); } /** @@ -211,18 +213,18 @@ public function testMergeArticleWrongVersion() $article->topic = "test"; $article->text = "test"; - $this->_em->persist($article); - $this->_em->flush(); + $this->em->persist($article); + $this->em->flush(); - $this->_em->detach($article); + $this->em->detach($article); $sql = 'UPDATE cms_articles SET version = version + 1 WHERE id = ' . $article->id; - $this->_em->getConnection()->executeUpdate($sql); + $this->em->getConnection()->executeUpdate($sql); $this->expectException(OptimisticLockException::class); $this->expectExceptionMessage('The optimistic lock failed, version 1 was expected, but is actually 2'); - $this->_em->merge($article); + $this->em->merge($article); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/EntityListenersTest.php b/tests/Doctrine/Tests/ORM/Functional/EntityListenersTest.php index 8e1610e4bd0..6d823a069c7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/EntityListenersTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/EntityListenersTest.php @@ -25,7 +25,7 @@ protected function setUp() $this->useModelSet('company'); parent::setUp(); - $this->listener = $this->_em->getConfiguration() + $this->listener = $this->em->getConfiguration() ->getEntityListenerResolver() ->resolve(CompanyContractListener::class); } @@ -37,8 +37,8 @@ public function testPreFlushListeners() $this->listener->preFlushCalls = []; - $this->_em->persist($fix); - $this->_em->flush(); + $this->em->persist($fix); + $this->em->flush(); self::assertCount(1,$this->listener->preFlushCalls); self::assertSame($fix, $this->listener->preFlushCalls[0][0]); @@ -51,14 +51,14 @@ public function testPostLoadListeners() $fix = new CompanyFixContract(); $fix->setFixPrice(2000); - $this->_em->persist($fix); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($fix); + $this->em->flush(); + $this->em->clear(); $this->listener->postLoadCalls = []; $dql = "SELECT f FROM Doctrine\Tests\Models\Company\CompanyFixContract f WHERE f.id = ?1"; - $fix = $this->_em->createQuery($dql)->setParameter(1, $fix->getId())->getSingleResult(); + $fix = $this->em->createQuery($dql)->setParameter(1, $fix->getId())->getSingleResult(); self::assertCount(1,$this->listener->postLoadCalls); self::assertSame($fix, $this->listener->postLoadCalls[0][0]); @@ -73,8 +73,8 @@ public function testPrePersistListeners() $this->listener->prePersistCalls = []; - $this->_em->persist($fix); - $this->_em->flush(); + $this->em->persist($fix); + $this->em->flush(); self::assertCount(1,$this->listener->prePersistCalls); self::assertSame($fix, $this->listener->prePersistCalls[0][0]); @@ -89,8 +89,8 @@ public function testPostPersistListeners() $this->listener->postPersistCalls = []; - $this->_em->persist($fix); - $this->_em->flush(); + $this->em->persist($fix); + $this->em->flush(); self::assertCount(1,$this->listener->postPersistCalls); self::assertSame($fix, $this->listener->postPersistCalls[0][0]); @@ -103,15 +103,15 @@ public function testPreUpdateListeners() $fix = new CompanyFixContract(); $fix->setFixPrice(1000); - $this->_em->persist($fix); - $this->_em->flush(); + $this->em->persist($fix); + $this->em->flush(); $this->listener->preUpdateCalls = []; $fix->setFixPrice(2000); - $this->_em->persist($fix); - $this->_em->flush(); + $this->em->persist($fix); + $this->em->flush(); self::assertCount(1,$this->listener->preUpdateCalls); self::assertSame($fix, $this->listener->preUpdateCalls[0][0]); @@ -124,15 +124,15 @@ public function testPostUpdateListeners() $fix = new CompanyFixContract(); $fix->setFixPrice(1000); - $this->_em->persist($fix); - $this->_em->flush(); + $this->em->persist($fix); + $this->em->flush(); $this->listener->postUpdateCalls = []; $fix->setFixPrice(2000); - $this->_em->persist($fix); - $this->_em->flush(); + $this->em->persist($fix); + $this->em->flush(); self::assertCount(1,$this->listener->postUpdateCalls); self::assertSame($fix, $this->listener->postUpdateCalls[0][0]); @@ -145,13 +145,13 @@ public function testPreRemoveListeners() $fix = new CompanyFixContract(); $fix->setFixPrice(1000); - $this->_em->persist($fix); - $this->_em->flush(); + $this->em->persist($fix); + $this->em->flush(); $this->listener->preRemoveCalls = []; - $this->_em->remove($fix); - $this->_em->flush(); + $this->em->remove($fix); + $this->em->flush(); self::assertCount(1,$this->listener->preRemoveCalls); self::assertSame($fix, $this->listener->preRemoveCalls[0][0]); @@ -164,13 +164,13 @@ public function testPostRemoveListeners() $fix = new CompanyFixContract(); $fix->setFixPrice(1000); - $this->_em->persist($fix); - $this->_em->flush(); + $this->em->persist($fix); + $this->em->flush(); $this->listener->postRemoveCalls = []; - $this->_em->remove($fix); - $this->_em->flush(); + $this->em->remove($fix); + $this->em->flush(); self::assertCount(1,$this->listener->postRemoveCalls); self::assertSame($fix, $this->listener->postRemoveCalls[0][0]); diff --git a/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryCriteriaTest.php b/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryCriteriaTest.php index f5dd1ed4b03..0d3d7eac829 100644 --- a/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryCriteriaTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryCriteriaTest.php @@ -23,8 +23,8 @@ protected function setUp() public function tearDown() { - if ($this->_em) { - $this->_em->getConfiguration()->setEntityNamespaces([]); + if ($this->em) { + $this->em->getConfiguration()->setEntityNamespaces([]); } parent::tearDown(); } @@ -36,36 +36,36 @@ public function loadFixture() $today->date = $today->time = new \DateTime('today'); - $this->_em->persist($today); + $this->em->persist($today); $tomorrow = new DateTimeModel(); $tomorrow->datetime = $tomorrow->date = $tomorrow->time = new \DateTime('tomorrow'); - $this->_em->persist($tomorrow); + $this->em->persist($tomorrow); $yesterday = new DateTimeModel(); $yesterday->datetime = $yesterday->date = $yesterday->time = new \DateTime('yesterday'); - $this->_em->persist($yesterday); + $this->em->persist($yesterday); - $this->_em->flush(); + $this->em->flush(); unset($today); unset($tomorrow); unset($yesterday); - $this->_em->clear(); + $this->em->clear(); } public function testLteDateComparison() { $this->loadFixture(); - $repository = $this->_em->getRepository(DateTimeModel::class); + $repository = $this->em->getRepository(DateTimeModel::class); $dates = $repository->matching(new Criteria( Criteria::expr()->lte('datetime', new \DateTime('today')) )); @@ -80,23 +80,23 @@ private function loadNullFieldFixtures() $today->date = new \DateTime('today'); - $this->_em->persist($today); + $this->em->persist($today); $tomorrow = new DateTimeModel(); $tomorrow->datetime = $tomorrow->date = $tomorrow->time = new \DateTime('tomorrow'); - $this->_em->persist($tomorrow); + $this->em->persist($tomorrow); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } public function testIsNullComparison() { $this->loadNullFieldFixtures(); - $repository = $this->_em->getRepository(DateTimeModel::class); + $repository = $this->em->getRepository(DateTimeModel::class); $dates = $repository->matching(new Criteria( Criteria::expr()->isNull('time') @@ -108,7 +108,7 @@ public function testIsNullComparison() public function testEqNullComparison() { $this->loadNullFieldFixtures(); - $repository = $this->_em->getRepository(DateTimeModel::class); + $repository = $this->em->getRepository(DateTimeModel::class); $dates = $repository->matching(new Criteria( Criteria::expr()->eq('time', null) @@ -120,7 +120,7 @@ public function testEqNullComparison() public function testNotEqNullComparison() { $this->loadNullFieldFixtures(); - $repository = $this->_em->getRepository(DateTimeModel::class); + $repository = $this->em->getRepository(DateTimeModel::class); $dates = $repository->matching(new Criteria( Criteria::expr()->neq('time', null) @@ -132,7 +132,7 @@ public function testNotEqNullComparison() public function testCanCountWithoutLoadingCollection() { $this->loadFixture(); - $repository = $this->_em->getRepository(DateTimeModel::class); + $repository = $this->em->getRepository(DateTimeModel::class); $dates = $repository->matching(new Criteria()); @@ -158,21 +158,21 @@ public function testCanContainsWithoutLoadingCollection() { $user = new User(); $user->name = 'Marco'; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); $tweet = new Tweet(); $tweet->author = $user; $tweet->content = 'Criteria is awesome'; - $this->_em->persist($tweet); - $this->_em->flush(); + $this->em->persist($tweet); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); $criteria = new Criteria(); $criteria->andWhere($criteria->expr()->contains('content', 'Criteria')); - $user = $this->_em->find(User::class, $user->id); + $user = $this->em->find(User::class, $user->id); $tweets = $user->tweets->matching($criteria); self::assertInstanceOf(LazyCriteriaCollection::class, $tweets); diff --git a/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryTest.php b/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryTest.php index 33daa15cc00..dfe81250ce9 100644 --- a/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryTest.php @@ -34,8 +34,8 @@ protected function setUp() public function tearDown() { - if ($this->_em) { - $this->_em->getConfiguration()->setEntityNamespaces([]); + if ($this->em) { + $this->em->getConfiguration()->setEntityNamespaces([]); } parent::tearDown(); } @@ -46,27 +46,27 @@ public function loadFixture() $user->name = 'Roman'; $user->username = 'romanb'; $user->status = 'freak'; - $this->_em->persist($user); + $this->em->persist($user); $user2 = new CmsUser; $user2->name = 'Guilherme'; $user2->username = 'gblanco'; $user2->status = 'dev'; - $this->_em->persist($user2); + $this->em->persist($user2); $user3 = new CmsUser; $user3->name = 'Benjamin'; $user3->username = 'beberlei'; $user3->status = null; - $this->_em->persist($user3); + $this->em->persist($user3); $user4 = new CmsUser; $user4->name = 'Alexander'; $user4->username = 'asm89'; $user4->status = 'dev'; - $this->_em->persist($user4); + $this->em->persist($user4); - $this->_em->flush(); + $this->em->flush(); $user1Id = $user->getId(); @@ -75,7 +75,7 @@ public function loadFixture() unset($user3); unset($user4); - $this->_em->clear(); + $this->em->clear(); return $user1Id; } @@ -94,10 +94,10 @@ public function loadAssociatedFixture() $user->status = 'freak'; $user->setAddress($address); - $this->_em->persist($user); - $this->_em->persist($address); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->persist($address); + $this->em->flush(); + $this->em->clear(); return [$user->id, $address->id]; } @@ -132,16 +132,16 @@ public function loadFixtureUserEmail() $user2->setEmail($email2); $user3->setEmail($email3); - $this->_em->persist($user1); - $this->_em->persist($user2); - $this->_em->persist($user3); + $this->em->persist($user1); + $this->em->persist($user2); + $this->em->persist($user3); - $this->_em->persist($email1); - $this->_em->persist($email2); - $this->_em->persist($email3); + $this->em->persist($email1); + $this->em->persist($email2); + $this->em->persist($email3); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); return [$user1, $user2, $user3]; } @@ -154,8 +154,8 @@ public function buildUser($name, $username, $status, $address) $user->status = $status; $user->setAddress($address); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); return $user; } @@ -168,8 +168,8 @@ public function buildAddress($country, $city, $street, $zip) $address->street = $street; $address->zip = $zip; - $this->_em->persist($address); - $this->_em->flush(); + $this->em->persist($address); + $this->em->flush(); return $address; } @@ -177,7 +177,7 @@ public function buildAddress($country, $city, $street, $zip) public function testBasicFind() { $user1Id = $this->loadFixture(); - $repos = $this->_em->getRepository(CmsUser::class); + $repos = $this->em->getRepository(CmsUser::class); $user = $repos->find($user1Id); self::assertInstanceOf(CmsUser::class,$user); @@ -188,7 +188,7 @@ public function testBasicFind() public function testFindByField() { $user1Id = $this->loadFixture(); - $repos = $this->_em->getRepository(CmsUser::class); + $repos = $this->em->getRepository(CmsUser::class); $users = $repos->findBy(['status' => 'dev']); self::assertEquals(2, count($users)); @@ -212,9 +212,9 @@ public function testFindByAssociationWithIntegerAsParameter() unset($address2); unset($address3); - $this->_em->clear(); + $this->em->clear(); - $repository = $this->_em->getRepository(CmsAddress::class); + $repository = $this->em->getRepository(CmsAddress::class); $addresses = $repository->findBy(['user' => [$user1->getId(), $user2->getId()]]); self::assertEquals(2, count($addresses)); @@ -236,9 +236,9 @@ public function testFindByAssociationWithObjectAsParameter() unset($address2); unset($address3); - $this->_em->clear(); + $this->em->clear(); - $repository = $this->_em->getRepository(CmsAddress::class); + $repository = $this->em->getRepository(CmsAddress::class); $addresses = $repository->findBy(['user' => [$user1, $user2]]); self::assertEquals(2, count($addresses)); @@ -248,7 +248,7 @@ public function testFindByAssociationWithObjectAsParameter() public function testFindFieldByMagicCall() { $user1Id = $this->loadFixture(); - $repos = $this->_em->getRepository(CmsUser::class); + $repos = $this->em->getRepository(CmsUser::class); $users = $repos->findByStatus('dev'); self::assertEquals(2, count($users)); @@ -260,7 +260,7 @@ public function testFindFieldByMagicCall() public function testFindAll() { $user1Id = $this->loadFixture(); - $repos = $this->_em->getRepository(CmsUser::class); + $repos = $this->em->getRepository(CmsUser::class); $users = $repos->findAll(); self::assertEquals(4, count($users)); @@ -269,11 +269,11 @@ public function testFindAll() public function testFindByAlias() { $user1Id = $this->loadFixture(); - $repos = $this->_em->getRepository(CmsUser::class); + $repos = $this->em->getRepository(CmsUser::class); - $this->_em->getConfiguration()->addEntityNamespace('CMS', 'Doctrine\Tests\Models\CMS'); + $this->em->getConfiguration()->addEntityNamespace('CMS', 'Doctrine\Tests\Models\CMS'); - $repos = $this->_em->getRepository('CMS:CmsUser'); + $repos = $this->em->getRepository('CMS:CmsUser'); $users = $repos->findAll(); self::assertEquals(4, count($users)); @@ -282,7 +282,7 @@ public function testFindByAlias() public function testCount() { $this->loadFixture(); - $repos = $this->_em->getRepository(CmsUser::class); + $repos = $this->em->getRepository(CmsUser::class); $userCount = $repos->count([]); $this->assertSame(4, $userCount); @@ -297,7 +297,7 @@ public function testCount() public function testCountBy() { $this->loadFixture(); - $repos = $this->_em->getRepository(CmsUser::class); + $repos = $this->em->getRepository(CmsUser::class); $userCount = $repos->countByStatus('dev'); $this->assertSame(2, $userCount); @@ -307,7 +307,7 @@ public function testCountBy() * @expectedException \Doctrine\ORM\ORMException */ public function testExceptionIsThrownWhenCallingFindByWithoutParameter() { - $this->_em->getRepository(CmsUser::class) + $this->em->getRepository(CmsUser::class) ->findByStatus(); } @@ -315,7 +315,7 @@ public function testExceptionIsThrownWhenCallingFindByWithoutParameter() { * @expectedException \Doctrine\ORM\ORMException */ public function testExceptionIsThrownWhenUsingInvalidFieldName() { - $this->_em->getRepository(CmsUser::class) + $this->em->getRepository(CmsUser::class) ->findByThisFieldDoesNotExist('testvalue'); } @@ -327,7 +327,7 @@ public function testPessimisticReadLockWithoutTransaction_ThrowsException() { $this->expectException(TransactionRequiredException::class); - $this->_em->getRepository(CmsUser::class) + $this->em->getRepository(CmsUser::class) ->find(1, LockMode::PESSIMISTIC_READ); } @@ -339,7 +339,7 @@ public function testPessimisticWriteLockWithoutTransaction_ThrowsException() { $this->expectException(TransactionRequiredException::class); - $this->_em->getRepository(CmsUser::class) + $this->em->getRepository(CmsUser::class) ->find(1, LockMode::PESSIMISTIC_WRITE); } @@ -351,7 +351,7 @@ public function testOptimisticLockUnversionedEntity_ThrowsException() { $this->expectException(OptimisticLockException::class); - $this->_em->getRepository(CmsUser::class) + $this->em->getRepository(CmsUser::class) ->find(1, LockMode::OPTIMISTIC); } @@ -365,16 +365,16 @@ public function testIdentityMappedOptimisticLockUnversionedEntity_ThrowsExceptio $user->name = 'Roman'; $user->username = 'romanb'; $user->status = 'freak'; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); $userId = $user->id; - $this->_em->find(CmsUser::class, $userId); + $this->em->find(CmsUser::class, $userId); $this->expectException(OptimisticLockException::class); - $this->_em->find(CmsUser::class, $userId, LockMode::OPTIMISTIC); + $this->em->find(CmsUser::class, $userId, LockMode::OPTIMISTIC); } /** @@ -384,7 +384,7 @@ public function testFindMagicCallByNullValue() { $this->loadFixture(); - $repos = $this->_em->getRepository(CmsUser::class); + $repos = $this->em->getRepository(CmsUser::class); $users = $repos->findByStatus(null); self::assertEquals(1, count($users)); @@ -397,7 +397,7 @@ public function testInvalidMagicCall() { $this->expectException(\BadMethodCallException::class); - $repos = $this->_em->getRepository(CmsUser::class); + $repos = $this->em->getRepository(CmsUser::class); $repos->foo(); } @@ -407,7 +407,7 @@ public function testInvalidMagicCall() public function testFindByAssociationKey_ExceptionOnInverseSide() { list($userId, $addressId) = $this->loadAssociatedFixture(); - $repos = $this->_em->getRepository(CmsUser::class); + $repos = $this->em->getRepository(CmsUser::class); $this->expectException(ORMException::class); $this->expectExceptionMessage("You cannot search for the association field 'Doctrine\Tests\Models\CMS\CmsUser#address', because it is the inverse side of an association. Find methods only work on owning side associations."); @@ -421,7 +421,7 @@ public function testFindByAssociationKey_ExceptionOnInverseSide() public function testFindOneByAssociationKey() { list($userId, $addressId) = $this->loadAssociatedFixture(); - $repos = $this->_em->getRepository(CmsAddress::class); + $repos = $this->em->getRepository(CmsAddress::class); $address = $repos->findOneBy(['user' => $userId]); self::assertInstanceOf(CmsAddress::class, $address); @@ -435,7 +435,7 @@ public function testFindOneByOrderBy() { $this->loadFixture(); - $repos = $this->_em->getRepository(CmsUser::class); + $repos = $this->em->getRepository(CmsUser::class); $userAsc = $repos->findOneBy([], ["username" => "ASC"]); $userDesc = $repos->findOneBy([], ["username" => "DESC"]); @@ -448,7 +448,7 @@ public function testFindOneByOrderBy() public function testFindByAssociationKey() { list($userId, $addressId) = $this->loadAssociatedFixture(); - $repos = $this->_em->getRepository(CmsAddress::class); + $repos = $this->em->getRepository(CmsAddress::class); $addresses = $repos->findBy(['user' => $userId]); self::assertContainsOnly(CmsAddress::class, $addresses); @@ -462,7 +462,7 @@ public function testFindByAssociationKey() public function testFindAssociationByMagicCall() { list($userId, $addressId) = $this->loadAssociatedFixture(); - $repos = $this->_em->getRepository(CmsAddress::class); + $repos = $this->em->getRepository(CmsAddress::class); $addresses = $repos->findByUser($userId); self::assertContainsOnly(CmsAddress::class, $addresses); @@ -476,7 +476,7 @@ public function testFindAssociationByMagicCall() public function testFindOneAssociationByMagicCall() { list($userId, $addressId) = $this->loadAssociatedFixture(); - $repos = $this->_em->getRepository(CmsAddress::class); + $repos = $this->em->getRepository(CmsAddress::class); $address = $repos->findOneByUser($userId); self::assertInstanceOf(CmsAddress::class, $address); @@ -485,7 +485,7 @@ public function testFindOneAssociationByMagicCall() public function testValidNamedQueryRetrieval() { - $repos = $this->_em->getRepository(CmsUser::class); + $repos = $this->em->getRepository(CmsUser::class); $query = $repos->createNamedQuery('all'); @@ -495,7 +495,7 @@ public function testValidNamedQueryRetrieval() public function testInvalidNamedQueryRetrieval() { - $repos = $this->_em->getRepository(CmsUser::class); + $repos = $this->em->getRepository(CmsUser::class); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); @@ -507,10 +507,10 @@ public function testInvalidNamedQueryRetrieval() */ public function testIsNullCriteriaDoesNotGenerateAParameter() { - $repos = $this->_em->getRepository(CmsUser::class); + $repos = $this->em->getRepository(CmsUser::class); $users = $repos->findBy(['status' => null, 'username' => 'romanb']); - $params = $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery]['params']; + $params = $this->sqlLoggerStack->queries[$this->sqlLoggerStack->currentQuery]['params']; self::assertEquals(1, count($params), "Should only execute with one parameter."); self::assertEquals(['romanb'], $params); } @@ -519,7 +519,7 @@ public function testIsNullCriteria() { $this->loadFixture(); - $repos = $this->_em->getRepository(CmsUser::class); + $repos = $this->em->getRepository(CmsUser::class); $users = $repos->findBy(['status' => null]); self::assertEquals(1, count($users)); @@ -532,7 +532,7 @@ public function testFindByLimitOffset() { $this->loadFixture(); - $repos = $this->_em->getRepository(CmsUser::class); + $repos = $this->em->getRepository(CmsUser::class); $users1 = $repos->findBy([], null, 1, 0); $users2 = $repos->findBy([], null, 1, 1); @@ -550,7 +550,7 @@ public function testFindByOrderBy() { $this->loadFixture(); - $repos = $this->_em->getRepository(CmsUser::class); + $repos = $this->em->getRepository(CmsUser::class); $usersAsc = $repos->findBy([], ["username" => "ASC"]); $usersDesc = $repos->findBy([], ["username" => "DESC"]); @@ -567,7 +567,7 @@ public function testFindByOrderByAssociation() { $this->loadFixtureUserEmail(); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $resultAsc = $repository->findBy([], ['email' => 'ASC']); $resultDesc = $repository->findBy([], ['email' => 'DESC']); @@ -584,7 +584,7 @@ public function testFindByOrderByAssociation() public function testFindFieldByMagicCallOrderBy() { $this->loadFixture(); - $repos = $this->_em->getRepository(CmsUser::class); + $repos = $this->em->getRepository(CmsUser::class); $usersAsc = $repos->findByStatus('dev', ['username' => "ASC"]); $usersDesc = $repos->findByStatus('dev', ['username' => "DESC"]); @@ -606,7 +606,7 @@ public function testFindFieldByMagicCallOrderBy() public function testFindFieldByMagicCallLimitOffset() { $this->loadFixture(); - $repos = $this->_em->getRepository(CmsUser::class); + $repos = $this->em->getRepository(CmsUser::class); $users1 = $repos->findByStatus('dev', [], 1, 0); $users2 = $repos->findByStatus('dev', [], 1, 1); @@ -621,22 +621,22 @@ public function testFindFieldByMagicCallLimitOffset() */ public function testDefaultRepositoryClassName() { - self::assertEquals($this->_em->getConfiguration()->getDefaultRepositoryClassName(), EntityRepository::class); - $this->_em->getConfiguration()->setDefaultRepositoryClassName(DDC753DefaultRepository::class); - self::assertEquals($this->_em->getConfiguration()->getDefaultRepositoryClassName(), DDC753DefaultRepository::class); + self::assertEquals($this->em->getConfiguration()->getDefaultRepositoryClassName(), EntityRepository::class); + $this->em->getConfiguration()->setDefaultRepositoryClassName(DDC753DefaultRepository::class); + self::assertEquals($this->em->getConfiguration()->getDefaultRepositoryClassName(), DDC753DefaultRepository::class); - $repos = $this->_em->getRepository(DDC753EntityWithDefaultCustomRepository::class); + $repos = $this->em->getRepository(DDC753EntityWithDefaultCustomRepository::class); self::assertInstanceOf(DDC753DefaultRepository::class, $repos); self::assertTrue($repos->isDefaultRepository()); - $repos = $this->_em->getRepository(DDC753EntityWithCustomRepository::class); + $repos = $this->em->getRepository(DDC753EntityWithCustomRepository::class); self::assertInstanceOf(DDC753CustomRepository::class, $repos); self::assertTrue($repos->isCustomRepository()); - self::assertEquals($this->_em->getConfiguration()->getDefaultRepositoryClassName(), DDC753DefaultRepository::class); - $this->_em->getConfiguration()->setDefaultRepositoryClassName(EntityRepository::class); - self::assertEquals($this->_em->getConfiguration()->getDefaultRepositoryClassName(), EntityRepository::class); + self::assertEquals($this->em->getConfiguration()->getDefaultRepositoryClassName(), DDC753DefaultRepository::class); + $this->em->getConfiguration()->setDefaultRepositoryClassName(EntityRepository::class); + self::assertEquals($this->em->getConfiguration()->getDefaultRepositoryClassName(), EntityRepository::class); } @@ -647,8 +647,8 @@ public function testDefaultRepositoryClassName() */ public function testSetDefaultRepositoryInvalidClassError() { - self::assertEquals($this->_em->getConfiguration()->getDefaultRepositoryClassName(), EntityRepository::class); - $this->_em->getConfiguration()->setDefaultRepositoryClassName(DDC753InvalidRepository::class); + self::assertEquals($this->em->getConfiguration()->getDefaultRepositoryClassName(), EntityRepository::class); + $this->em->getConfiguration()->setDefaultRepositoryClassName(DDC753InvalidRepository::class); } /** @@ -656,15 +656,15 @@ public function testSetDefaultRepositoryInvalidClassError() */ public function testSingleRepositoryInstanceForDifferentEntityAliases() { - $config = $this->_em->getConfiguration(); + $config = $this->em->getConfiguration(); $config->addEntityNamespace('Aliased', 'Doctrine\Tests\Models\CMS'); $config->addEntityNamespace('AliasedAgain', 'Doctrine\Tests\Models\CMS'); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); - self::assertSame($repository, $this->_em->getRepository('Aliased:CmsUser')); - self::assertSame($repository, $this->_em->getRepository('AliasedAgain:CmsUser')); + self::assertSame($repository, $this->em->getRepository('Aliased:CmsUser')); + self::assertSame($repository, $this->em->getRepository('AliasedAgain:CmsUser')); } /** @@ -673,8 +673,8 @@ public function testSingleRepositoryInstanceForDifferentEntityAliases() public function testCanRetrieveRepositoryFromClassNameWithLeadingBackslash() { self::assertSame( - $this->_em->getRepository('\\' . CmsUser::class), - $this->_em->getRepository(CmsUser::class) + $this->em->getRepository('\\' . CmsUser::class), + $this->em->getRepository(CmsUser::class) ); } @@ -686,7 +686,7 @@ public function testCanRetrieveRepositoryFromClassNameWithLeadingBackslash() */ public function testInvalidOrderByAssociation() { - $this->_em->getRepository(CmsUser::class) + $this->em->getRepository(CmsUser::class) ->findBy(['status' => 'test'], ['address' => 'ASC']); } @@ -698,7 +698,7 @@ public function testInvalidOrientation() $this->expectException(ORMException::class); $this->expectExceptionMessage('Invalid order by orientation specified for Doctrine\Tests\Models\CMS\CmsUser#username'); - $repo = $this->_em->getRepository(CmsUser::class); + $repo = $this->em->getRepository(CmsUser::class); $repo->findBy(['status' => 'test'], ['username' => 'INVALID']); } @@ -707,10 +707,10 @@ public function testInvalidOrientation() */ public function testFindByAssociationArray() { - $repo = $this->_em->getRepository(CmsAddress::class); + $repo = $this->em->getRepository(CmsAddress::class); $data = $repo->findBy(['user' => [1, 2, 3]]); - $query = array_pop($this->_sqlLoggerStack->queries); + $query = array_pop($this->sqlLoggerStack->queries); self::assertEquals([1,2,3], $query['params'][0]); self::assertEquals(Connection::PARAM_INT_ARRAY, $query['types'][0]); } @@ -722,7 +722,7 @@ public function testMatchingEmptyCriteria() { $this->loadFixture(); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $users = $repository->matching(new Criteria()); self::assertEquals(4, count($users)); @@ -735,7 +735,7 @@ public function testMatchingCriteriaEqComparison() { $this->loadFixture(); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $users = $repository->matching(new Criteria( Criteria::expr()->eq('username', 'beberlei') )); @@ -750,7 +750,7 @@ public function testMatchingCriteriaNeqComparison() { $this->loadFixture(); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $users = $repository->matching(new Criteria( Criteria::expr()->neq('username', 'beberlei') )); @@ -765,7 +765,7 @@ public function testMatchingCriteriaInComparison() { $this->loadFixture(); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $users = $repository->matching(new Criteria( Criteria::expr()->in('username', ['beberlei', 'gblanco']) )); @@ -780,7 +780,7 @@ public function testMatchingCriteriaNotInComparison() { $this->loadFixture(); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $users = $repository->matching(new Criteria( Criteria::expr()->notIn('username', ['beberlei', 'gblanco', 'asm89']) )); @@ -795,7 +795,7 @@ public function testMatchingCriteriaLtComparison() { $firstUserId = $this->loadFixture(); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $users = $repository->matching(new Criteria( Criteria::expr()->lt('id', $firstUserId + 1) )); @@ -810,7 +810,7 @@ public function testMatchingCriteriaLeComparison() { $firstUserId = $this->loadFixture(); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $users = $repository->matching(new Criteria( Criteria::expr()->lte('id', $firstUserId + 1) )); @@ -825,7 +825,7 @@ public function testMatchingCriteriaGtComparison() { $firstUserId = $this->loadFixture(); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $users = $repository->matching(new Criteria( Criteria::expr()->gt('id', $firstUserId) )); @@ -840,7 +840,7 @@ public function testMatchingCriteriaGteComparison() { $firstUserId = $this->loadFixture(); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $users = $repository->matching(new Criteria( Criteria::expr()->gte('id', $firstUserId) )); @@ -855,13 +855,13 @@ public function testMatchingCriteriaAssocationByObjectInMemory() { list($userId, $addressId) = $this->loadAssociatedFixture(); - $user = $this->_em->find(CmsUser::class, $userId); + $user = $this->em->find(CmsUser::class, $userId); $criteria = new Criteria( Criteria::expr()->eq('user', $user) ); - $repository = $this->_em->getRepository(CmsAddress::class); + $repository = $this->em->getRepository(CmsAddress::class); $addresses = $repository->matching($criteria); self::assertEquals(1, count($addresses)); @@ -878,13 +878,13 @@ public function testMatchingCriteriaAssocationInWithArray() { list($userId, $addressId) = $this->loadAssociatedFixture(); - $user = $this->_em->find(CmsUser::class, $userId); + $user = $this->em->find(CmsUser::class, $userId); $criteria = new Criteria( Criteria::expr()->in('user', [$user]) ); - $repository = $this->_em->getRepository(CmsAddress::class); + $repository = $this->em->getRepository(CmsAddress::class); $addresses = $repository->matching($criteria); self::assertEquals(1, count($addresses)); @@ -898,7 +898,7 @@ public function testMatchingCriteriaContainsComparison() { $this->loadFixture(); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $users = $repository->matching(new Criteria(Criteria::expr()->contains('name', 'Foobar'))); self::assertEquals(0, count($users)); @@ -948,15 +948,15 @@ public function testMatchingCriteriaEndsWithComparison() public function testMatchingCriteriaNullAssocComparison() { $fixtures = $this->loadFixtureUserEmail(); - $user = $this->_em->merge($fixtures[0]); - $repository = $this->_em->getRepository(CmsUser::class); + $user = $this->em->merge($fixtures[0]); + $repository = $this->em->getRepository(CmsUser::class); $criteriaIsNull = Criteria::create()->where(Criteria::expr()->isNull('email')); $criteriaEqNull = Criteria::create()->where(Criteria::expr()->eq('email', null)); $user->setEmail(null); - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); $usersIsNull = $repository->matching($criteriaIsNull); $usersEqNull = $repository->matching($criteriaEqNull); @@ -976,7 +976,7 @@ public function testMatchingCriteriaNullAssocComparison() */ public function testCreateResultSetMappingBuilder() { - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $rsm = $repository->createResultSetMappingBuilder('u'); self::assertInstanceOf(Query\ResultSetMappingBuilder::class, $rsm); @@ -991,7 +991,7 @@ public function testFindByFieldInjectionPrevented() $this->expectException(ORMException::class); $this->expectExceptionMessage('Unrecognized field: '); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $repository->findBy(['username = ?; DELETE FROM cms_users; SELECT 1 WHERE 1' => 'test']); } @@ -1003,7 +1003,7 @@ public function testFindOneByFieldInjectionPrevented() $this->expectException(ORMException::class); $this->expectExceptionMessage('Unrecognized field: '); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $repository->findOneBy(['username = ?; DELETE FROM cms_users; SELECT 1 WHERE 1' => 'test']); } @@ -1015,7 +1015,7 @@ public function testMatchingInjectionPrevented() $this->expectException(ORMException::class); $this->expectExceptionMessage('Unrecognized field: '); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $result = $repository->matching(new Criteria( Criteria::expr()->eq('username = ?; DELETE FROM cms_users; SELECT 1 WHERE 1', 'beberlei') )); @@ -1032,7 +1032,7 @@ public function testFindInjectionPrevented() $this->expectException(ORMException::class); $this->expectExceptionMessage('Unrecognized identifier fields: '); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $repository->find(['username = ?; DELETE FROM cms_users; SELECT 1 WHERE 1' => 'test', 'id' => 1]); } @@ -1051,11 +1051,11 @@ public function testFindByNullValueInInCondition() $user2->name = 'Steve'; $user2->status = 'dbal maintainer'; - $this->_em->persist($user1); - $this->_em->persist($user2); - $this->_em->flush(); + $this->em->persist($user1); + $this->em->persist($user2); + $this->em->flush(); - $users = $this->_em->getRepository(CmsUser::class)->findBy(['status' => [null]]); + $users = $this->em->getRepository(CmsUser::class)->findBy(['status' => [null]]); self::assertCount(1, $users); self::assertSame($user1, reset($users)); @@ -1076,12 +1076,12 @@ public function testFindByNullValueInMultipleInCriteriaValues() $user2->name = 'Steve'; $user2->status = 'dbal maintainer'; - $this->_em->persist($user1); - $this->_em->persist($user2); - $this->_em->flush(); + $this->em->persist($user1); + $this->em->persist($user2); + $this->em->flush(); $users = $this - ->_em + ->em ->getRepository(CmsUser::class) ->findBy(['status' => ['foo', null]]); @@ -1104,12 +1104,12 @@ public function testFindMultipleByNullValueInMultipleInCriteriaValues() $user2->name = 'Steve'; $user2->status = 'dbal maintainer'; - $this->_em->persist($user1); - $this->_em->persist($user2); - $this->_em->flush(); + $this->em->persist($user1); + $this->em->persist($user2); + $this->em->flush(); $users = $this - ->_em + ->em ->getRepository(CmsUser::class) ->findBy(['status' => ['dbal maintainer', null]]); diff --git a/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php index 3fb55ea019b..f581fc1a178 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php @@ -41,7 +41,7 @@ public function setUp() $this->useModelSet('ddc2504'); parent::setUp(); - $class = $this->_em->getClassMetadata(CmsUser::class); + $class = $this->em->getClassMetadata(CmsUser::class); $class->associationMappings['groups']['fetch'] = FetchMode::EXTRA_LAZY; $class->associationMappings['groups']['indexBy'] = 'name'; $class->associationMappings['articles']['fetch'] = FetchMode::EXTRA_LAZY; @@ -53,7 +53,7 @@ public function setUp() unset($class->associationMappings['articles']['cache']); unset($class->associationMappings['users']['cache']); - $class = $this->_em->getClassMetadata(CmsGroup::class); + $class = $this->em->getClassMetadata(CmsGroup::class); $class->associationMappings['users']['fetch'] = FetchMode::EXTRA_LAZY; $class->associationMappings['users']['indexBy'] = 'username'; @@ -64,7 +64,7 @@ public function tearDown() { parent::tearDown(); - $class = $this->_em->getClassMetadata(CmsUser::class); + $class = $this->em->getClassMetadata(CmsUser::class); $class->associationMappings['groups']['fetch'] = FetchMode::LAZY; $class->associationMappings['articles']['fetch'] = FetchMode::LAZY; $class->associationMappings['phonenumbers']['fetch'] = FetchMode::LAZY; @@ -73,7 +73,7 @@ public function tearDown() unset($class->associationMappings['articles']['indexBy']); unset($class->associationMappings['phonenumbers']['indexBy']); - $class = $this->_em->getClassMetadata(CmsGroup::class); + $class = $this->em->getClassMetadata(CmsGroup::class); $class->associationMappings['users']['fetch'] = FetchMode::LAZY; unset($class->associationMappings['users']['indexBy']); @@ -85,7 +85,7 @@ public function tearDown() */ public function testCountNotInitializesCollection() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); $queryCount = $this->getCurrentQueryCount(); self::assertFalse($user->groups->isInitialized()); @@ -102,13 +102,13 @@ public function testCountNotInitializesCollection() */ public function testCountWhenNewEntityPresent() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); $newGroup = new CmsGroup(); $newGroup->name = "Test4"; $user->addGroup($newGroup); - $this->_em->persist($newGroup); + $this->em->persist($newGroup); self::assertFalse($user->groups->isInitialized()); self::assertEquals(4, count($user->groups)); @@ -121,7 +121,7 @@ public function testCountWhenNewEntityPresent() */ public function testCountWhenInitialized() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); $queryCount = $this->getCurrentQueryCount(); foreach ($user->groups AS $group) { } @@ -136,7 +136,7 @@ public function testCountWhenInitialized() */ public function testCountInverseCollection() { - $group = $this->_em->find(CmsGroup::class, $this->groupId); + $group = $this->em->find(CmsGroup::class, $this->groupId); self::assertFalse($group->users->isInitialized(), "Pre-Condition"); self::assertEquals(4, count($group->users)); @@ -148,7 +148,7 @@ public function testCountInverseCollection() */ public function testCountOneToMany() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); self::assertFalse($user->groups->isInitialized(), "Pre-Condition"); self::assertEquals(2, count($user->articles)); @@ -159,7 +159,7 @@ public function testCountOneToMany() */ public function testCountOneToManyJoinedInheritance() { - $otherClass = $this->_em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); + $otherClass = $this->em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); self::assertFalse($otherClass->childClasses->isInitialized(), "Pre-Condition"); self::assertEquals(2, count($otherClass->childClasses)); @@ -170,7 +170,7 @@ public function testCountOneToManyJoinedInheritance() */ public function testFullSlice() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); self::assertFalse($user->groups->isInitialized(), "Pre-Condition: Collection is not initialized."); $someGroups = $user->groups->slice(null); @@ -183,7 +183,7 @@ public function testFullSlice() */ public function testSlice() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); self::assertFalse($user->groups->isInitialized(), "Pre-Condition: Collection is not initialized."); $queryCount = $this->getCurrentQueryCount(); @@ -214,7 +214,7 @@ public function testSlice() */ public function testSliceInitializedCollection() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); $queryCount = $this->getCurrentQueryCount(); foreach ($user->groups AS $group) { } @@ -233,7 +233,7 @@ public function testSliceInitializedCollection() */ public function testSliceInverseCollection() { - $group = $this->_em->find(CmsGroup::class, $this->groupId); + $group = $this->em->find(CmsGroup::class, $this->groupId); self::assertFalse($group->users->isInitialized(), "Pre-Condition"); $queryCount = $this->getCurrentQueryCount(); @@ -254,7 +254,7 @@ public function testSliceInverseCollection() */ public function testSliceOneToMany() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); self::assertFalse($user->articles->isInitialized(), "Pre-Condition: Collection is not initialized."); $queryCount = $this->getCurrentQueryCount(); @@ -270,11 +270,11 @@ public function testSliceOneToMany() */ public function testContainsOneToMany() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); self::assertFalse($user->articles->isInitialized(), "Pre-Condition: Collection is not initialized."); // Test One to Many existence retrieved from DB - $article = $this->_em->find(CmsArticle::class, $this->articleId); + $article = $this->em->find(CmsArticle::class, $this->articleId); $queryCount = $this->getCurrentQueryCount(); self::assertTrue($user->articles->contains($article)); @@ -291,8 +291,8 @@ public function testContainsOneToMany() self::assertEquals($queryCount, $this->getCurrentQueryCount(), "Checking for contains of new entity should cause no query to be executed."); // Test One to Many existence with state clear - $this->_em->persist($article); - $this->_em->flush(); + $this->em->persist($article); + $this->em->flush(); $queryCount = $this->getCurrentQueryCount(); self::assertFalse($user->articles->contains($article)); @@ -304,7 +304,7 @@ public function testContainsOneToMany() $article->topic = "How to not fail anymore on tests"; $article->text = "That is simple! Just write more tests!"; - $this->_em->persist($article); + $this->em->persist($article); $queryCount = $this->getCurrentQueryCount(); @@ -318,7 +318,7 @@ public function testContainsOneToMany() */ public function testLazyOneToManyJoinedInheritanceIsLazilyInitialized() { - $otherClass = $this->_em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); + $otherClass = $this->em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); self::assertFalse($otherClass->childClasses->isInitialized(), 'Collection is not initialized.'); } @@ -328,10 +328,10 @@ public function testLazyOneToManyJoinedInheritanceIsLazilyInitialized() */ public function testContainsOnOneToManyJoinedInheritanceWillNotInitializeCollectionWhenMatchingItemIsFound() { - $otherClass = $this->_em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); + $otherClass = $this->em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); // Test One to Many existence retrieved from DB - $childClass = $this->_em->find(DDC2504ChildClass::class, $this->ddc2504ChildClassId); + $childClass = $this->em->find(DDC2504ChildClass::class, $this->ddc2504ChildClassId); $queryCount = $this->getCurrentQueryCount(); self::assertTrue($otherClass->childClasses->contains($childClass)); @@ -344,7 +344,7 @@ public function testContainsOnOneToManyJoinedInheritanceWillNotInitializeCollect */ public function testContainsOnOneToManyJoinedInheritanceWillNotCauseQueriesWhenNonPersistentItemIsMatched() { - $otherClass = $this->_em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); + $otherClass = $this->em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); $queryCount = $this->getCurrentQueryCount(); self::assertFalse($otherClass->childClasses->contains(new DDC2504ChildClass())); @@ -360,12 +360,12 @@ public function testContainsOnOneToManyJoinedInheritanceWillNotCauseQueriesWhenN */ public function testContainsOnOneToManyJoinedInheritanceWillNotInitializeCollectionWithClearStateMatchingItem() { - $otherClass = $this->_em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); + $otherClass = $this->em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); $childClass = new DDC2504ChildClass(); // Test One to Many existence with state clear - $this->_em->persist($childClass); - $this->_em->flush(); + $this->em->persist($childClass); + $this->em->flush(); $queryCount = $this->getCurrentQueryCount(); self::assertFalse($otherClass->childClasses->contains($childClass)); @@ -378,10 +378,10 @@ public function testContainsOnOneToManyJoinedInheritanceWillNotInitializeCollect */ public function testContainsOnOneToManyJoinedInheritanceWillNotInitializeCollectionWithNewStateNotMatchingItem() { - $otherClass = $this->_em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); + $otherClass = $this->em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); $childClass = new DDC2504ChildClass(); - $this->_em->persist($childClass); + $this->em->persist($childClass); $queryCount = $this->getCurrentQueryCount(); @@ -395,7 +395,7 @@ public function testContainsOnOneToManyJoinedInheritanceWillNotInitializeCollect */ public function testCountingOnOneToManyJoinedInheritanceWillNotInitializeCollection() { - $otherClass = $this->_em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); + $otherClass = $this->em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); self::assertEquals(2, count($otherClass->childClasses)); @@ -407,11 +407,11 @@ public function testCountingOnOneToManyJoinedInheritanceWillNotInitializeCollect */ public function testContainsManyToMany() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); self::assertFalse($user->groups->isInitialized(), "Pre-Condition: Collection is not initialized."); // Test Many to Many existence retrieved from DB - $group = $this->_em->find(CmsGroup::class, $this->groupId); + $group = $this->em->find(CmsGroup::class, $this->groupId); $queryCount = $this->getCurrentQueryCount(); self::assertTrue($user->groups->contains($group)); @@ -429,8 +429,8 @@ public function testContainsManyToMany() self::assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); // Test Many to Many existence with state clear - $this->_em->persist($group); - $this->_em->flush(); + $this->em->persist($group); + $this->em->flush(); $queryCount = $this->getCurrentQueryCount(); @@ -442,7 +442,7 @@ public function testContainsManyToMany() $group = new CmsGroup(); $group->name = "My managed group"; - $this->_em->persist($group); + $this->em->persist($group); $queryCount = $this->getCurrentQueryCount(); @@ -456,10 +456,10 @@ public function testContainsManyToMany() */ public function testContainsManyToManyInverse() { - $group = $this->_em->find(CmsGroup::class, $this->groupId); + $group = $this->em->find(CmsGroup::class, $this->groupId); self::assertFalse($group->users->isInitialized(), "Pre-Condition: Collection is not initialized."); - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); $queryCount = $this->getCurrentQueryCount(); self::assertTrue($group->users->contains($user)); @@ -480,11 +480,11 @@ public function testContainsManyToManyInverse() */ public function testRemoveElementOneToMany() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); self::assertFalse($user->articles->isInitialized(), "Pre-Condition: Collection is not initialized."); // Test One to Many removal with Entity retrieved from DB - $article = $this->_em->find(CmsArticle::class, $this->articleId); + $article = $this->em->find(CmsArticle::class, $this->articleId); $queryCount = $this->getCurrentQueryCount(); $user->articles->removeElement($article); @@ -504,8 +504,8 @@ public function testRemoveElementOneToMany() self::assertEquals($queryCount, $this->getCurrentQueryCount(), "Removing a new entity should cause no query to be executed."); // Test One to Many removal with Entity state as clean - $this->_em->persist($article); - $this->_em->flush(); + $this->em->persist($article); + $this->em->flush(); $queryCount = $this->getCurrentQueryCount(); @@ -519,7 +519,7 @@ public function testRemoveElementOneToMany() $article->topic = "How to not fail anymore on tests"; $article->text = "That is simple! Just write more tests!"; - $this->_em->persist($article); + $this->em->persist($article); $queryCount = $this->getCurrentQueryCount(); @@ -534,9 +534,9 @@ public function testRemoveElementOneToMany() public function testRemovalOfManagedElementFromOneToManyJoinedInheritanceCollectionDoesNotInitializeIt() { /* @var $otherClass DDC2504OtherClass */ - $otherClass = $this->_em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); + $otherClass = $this->em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); /* @var $childClass DDC2504ChildClass */ - $childClass = $this->_em->find(DDC2504ChildClass::class, $this->ddc2504ChildClassId); + $childClass = $this->em->find(DDC2504ChildClass::class, $this->ddc2504ChildClassId); $queryCount = $this->getCurrentQueryCount(); @@ -556,7 +556,7 @@ public function testRemovalOfManagedElementFromOneToManyJoinedInheritanceCollect 'Collection item still not updated (needs flushing)' ); - $this->_em->flush(); + $this->em->flush(); self::assertFalse( $otherClass->childClasses->contains($childClass), @@ -572,7 +572,7 @@ public function testRemovalOfManagedElementFromOneToManyJoinedInheritanceCollect public function testRemovalOfNonManagedElementFromOneToManyJoinedInheritanceCollectionDoesNotInitializeIt() { /* @var $otherClass DDC2504OtherClass */ - $otherClass = $this->_em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); + $otherClass = $this->em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); $queryCount = $this->getCurrentQueryCount(); $otherClass->childClasses->removeElement(new DDC2504ChildClass()); @@ -590,10 +590,10 @@ public function testRemovalOfNonManagedElementFromOneToManyJoinedInheritanceColl public function testRemovalOfNewElementFromOneToManyJoinedInheritanceCollectionDoesNotInitializeIt() { /* @var $otherClass DDC2504OtherClass */ - $otherClass = $this->_em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); + $otherClass = $this->em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); $childClass = new DDC2504ChildClass(); - $this->_em->persist($childClass); + $this->em->persist($childClass); $queryCount = $this->getCurrentQueryCount(); @@ -611,11 +611,11 @@ public function testRemovalOfNewElementFromOneToManyJoinedInheritanceCollectionD */ public function testRemovalOfNewManagedElementFromOneToManyJoinedInheritanceCollectionDoesNotInitializeIt() { - $otherClass = $this->_em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); + $otherClass = $this->em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); $childClass = new DDC2504ChildClass(); - $this->_em->persist($childClass); - $this->_em->flush(); + $this->em->persist($childClass); + $this->em->flush(); $queryCount = $this->getCurrentQueryCount(); @@ -634,11 +634,11 @@ public function testRemovalOfNewManagedElementFromOneToManyJoinedInheritanceColl */ public function testRemoveElementManyToMany() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); self::assertFalse($user->groups->isInitialized(), "Pre-Condition: Collection is not initialized."); // Test Many to Many removal with Entity retrieved from DB - $group = $this->_em->find(CmsGroup::class, $this->groupId); + $group = $this->em->find(CmsGroup::class, $this->groupId); $queryCount = $this->getCurrentQueryCount(); $this->assertTrue($user->groups->removeElement($group)); @@ -660,8 +660,8 @@ public function testRemoveElementManyToMany() self::assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); // Test Many to Many removal with Entity state as clean - $this->_em->persist($group); - $this->_em->flush(); + $this->em->persist($group); + $this->em->flush(); $queryCount = $this->getCurrentQueryCount(); @@ -674,7 +674,7 @@ public function testRemoveElementManyToMany() $group = new CmsGroup(); $group->name = "A New group!"; - $this->_em->persist($group); + $this->em->persist($group); $queryCount = $this->getCurrentQueryCount(); @@ -689,10 +689,10 @@ public function testRemoveElementManyToMany() */ public function testRemoveElementManyToManyInverse() { - $group = $this->_em->find(CmsGroup::class, $this->groupId); + $group = $this->em->find(CmsGroup::class, $this->groupId); self::assertFalse($group->users->isInitialized(), "Pre-Condition: Collection is not initialized."); - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); $queryCount = $this->getCurrentQueryCount(); $group->users->removeElement($user); @@ -716,19 +716,19 @@ public function testRemoveElementManyToManyInverse() */ public function testCountAfterAddThenFlush() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); $newGroup = new CmsGroup(); $newGroup->name = "Test4"; $user->addGroup($newGroup); - $this->_em->persist($newGroup); + $this->em->persist($newGroup); self::assertFalse($user->groups->isInitialized()); self::assertEquals(4, count($user->groups)); self::assertFalse($user->groups->isInitialized()); - $this->_em->flush(); + $this->em->flush(); self::assertEquals(4, count($user->groups)); } @@ -739,14 +739,14 @@ public function testCountAfterAddThenFlush() */ public function testSliceOnDirtyCollection() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); /* @var $user CmsUser */ $newGroup = new CmsGroup(); $newGroup->name = "Test4"; $user->addGroup($newGroup); - $this->_em->persist($newGroup); + $this->em->persist($newGroup); $qc = $this->getCurrentQueryCount(); $groups = $user->groups->slice(0, 10); @@ -761,7 +761,7 @@ public function testSliceOnDirtyCollection() */ public function testGetIndexByIdentifier() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); /* @var $user CmsUser */ $queryCount = $this->getCurrentQueryCount(); @@ -769,7 +769,7 @@ public function testGetIndexByIdentifier() self::assertFalse($user->phonenumbers->isInitialized()); self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - self::assertSame($phonenumber, $this->_em->find(CmsPhonenumber::class, $this->phonenumber)); + self::assertSame($phonenumber, $this->em->find(CmsPhonenumber::class, $this->phonenumber)); $article = $user->phonenumbers->get($this->phonenumber); self::assertEquals($queryCount + 1, $this->getCurrentQueryCount(), "Getting the same entity should not cause an extra query to be executed"); @@ -780,7 +780,7 @@ public function testGetIndexByIdentifier() */ public function testGetIndexByOneToMany() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); /* @var $user CmsUser */ $queryCount = $this->getCurrentQueryCount(); @@ -789,7 +789,7 @@ public function testGetIndexByOneToMany() self::assertFalse($user->articles->isInitialized()); self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - self::assertSame($article, $this->_em->find(CmsArticle::class, $this->articleId)); + self::assertSame($article, $this->em->find(CmsArticle::class, $this->articleId)); } /** @@ -797,7 +797,7 @@ public function testGetIndexByOneToMany() */ public function testGetIndexByManyToManyInverseSide() { - $group = $this->_em->find(CmsGroup::class, $this->groupId); + $group = $this->em->find(CmsGroup::class, $this->groupId); /* @var $group CmsGroup */ $queryCount = $this->getCurrentQueryCount(); @@ -806,7 +806,7 @@ public function testGetIndexByManyToManyInverseSide() self::assertFalse($group->users->isInitialized()); self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - self::assertSame($user, $this->_em->find(CmsUser::class, $this->userId)); + self::assertSame($user, $this->em->find(CmsUser::class, $this->userId)); } /** @@ -814,7 +814,7 @@ public function testGetIndexByManyToManyInverseSide() */ public function testGetIndexByManyToManyOwningSide() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); /* @var $user CmsUser */ $queryCount = $this->getCurrentQueryCount(); @@ -823,7 +823,7 @@ public function testGetIndexByManyToManyOwningSide() self::assertFalse($user->groups->isInitialized()); self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - self::assertSame($group, $this->_em->find(CmsGroup::class, $this->groupId)); + self::assertSame($group, $this->em->find(CmsGroup::class, $this->groupId)); } /** @@ -831,14 +831,14 @@ public function testGetIndexByManyToManyOwningSide() */ public function testGetNonExistentIndexBy() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); self::assertNull($user->articles->get(-1)); self::assertNull($user->groups->get(-1)); } public function testContainsKeyIndexByOneToMany() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); /* @var $user CmsUser */ $queryCount = $this->getCurrentQueryCount(); @@ -852,10 +852,10 @@ public function testContainsKeyIndexByOneToMany() public function testContainsKeyIndexByOneToManyJoinedInheritance() { - $class = $this->_em->getClassMetadata(DDC2504OtherClass::class); + $class = $this->em->getClassMetadata(DDC2504OtherClass::class); $class->associationMappings['childClasses']['indexBy'] = 'id'; - $otherClass = $this->_em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); + $otherClass = $this->em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); $queryCount = $this->getCurrentQueryCount(); @@ -868,9 +868,9 @@ public function testContainsKeyIndexByOneToManyJoinedInheritance() public function testContainsKeyIndexByManyToMany() { - $user = $this->_em->find(CmsUser::class, $this->userId2); + $user = $this->em->find(CmsUser::class, $this->userId2); - $group = $this->_em->find(CmsGroup::class, $this->groupId); + $group = $this->em->find(CmsGroup::class, $this->groupId); $queryCount = $this->getCurrentQueryCount(); @@ -882,8 +882,8 @@ public function testContainsKeyIndexByManyToMany() } public function testContainsKeyIndexByManyToManyNonOwning() { - $user = $this->_em->find(CmsUser::class, $this->userId2); - $group = $this->_em->find(CmsGroup::class, $this->groupId); + $user = $this->em->find(CmsUser::class, $this->userId2); + $group = $this->em->find(CmsGroup::class, $this->groupId); $queryCount = $this->getCurrentQueryCount(); @@ -896,10 +896,10 @@ public function testContainsKeyIndexByManyToManyNonOwning() public function testContainsKeyIndexByWithPkManyToMany() { - $class = $this->_em->getClassMetadata(CmsUser::class); + $class = $this->em->getClassMetadata(CmsUser::class); $class->associationMappings['groups']['indexBy'] = 'id'; - $user = $this->_em->find(CmsUser::class, $this->userId2); + $user = $this->em->find(CmsUser::class, $this->userId2); $queryCount = $this->getCurrentQueryCount(); @@ -911,10 +911,10 @@ public function testContainsKeyIndexByWithPkManyToMany() } public function testContainsKeyIndexByWithPkManyToManyNonOwning() { - $class = $this->_em->getClassMetadata(CmsGroup::class); + $class = $this->em->getClassMetadata(CmsGroup::class); $class->associationMappings['users']['indexBy'] = 'id'; - $group = $this->_em->find(CmsGroup::class, $this->groupId); + $group = $this->em->find(CmsGroup::class, $this->groupId); $queryCount = $this->getCurrentQueryCount(); @@ -927,7 +927,7 @@ public function testContainsKeyIndexByWithPkManyToManyNonOwning() public function testContainsKeyNonExistentIndexByOneToMany() { - $user = $this->_em->find(CmsUser::class, $this->userId2); + $user = $this->em->find(CmsUser::class, $this->userId2); $queryCount = $this->getCurrentQueryCount(); @@ -940,7 +940,7 @@ public function testContainsKeyNonExistentIndexByOneToMany() public function testContainsKeyNonExistentIndexByManyToMany() { - $user = $this->_em->find(CmsUser::class, $this->userId2); + $user = $this->em->find(CmsUser::class, $this->userId2); $queryCount = $this->getCurrentQueryCount(); @@ -974,10 +974,10 @@ private function loadFixture() $user4->name = "Guilherme"; $user4->status = "active"; - $this->_em->persist($user1); - $this->_em->persist($user2); - $this->_em->persist($user3); - $this->_em->persist($user4); + $this->em->persist($user1); + $this->em->persist($user2); + $this->em->persist($user3); + $this->em->persist($user4); $group1 = new CmsGroup(); $group1->name = "Test1"; @@ -996,9 +996,9 @@ private function loadFixture() $user3->addGroup($group1); $user4->addGroup($group1); - $this->_em->persist($group1); - $this->_em->persist($group2); - $this->_em->persist($group3); + $this->em->persist($group1); + $this->em->persist($group2); + $this->em->persist($group3); $article1 = new CmsArticle(); $article1->topic = "Test1"; @@ -1010,8 +1010,8 @@ private function loadFixture() $article2->text = "Test2"; $article2->setAuthor($user1); - $this->_em->persist($article1); - $this->_em->persist($article2); + $this->em->persist($article1); + $this->em->persist($article2); $phonenumber1 = new CmsPhonenumber(); $phonenumber1->phonenumber = '12345'; @@ -1019,8 +1019,8 @@ private function loadFixture() $phonenumber2 = new CmsPhonenumber(); $phonenumber2->phonenumber = '67890'; - $this->_em->persist($phonenumber1); - $this->_em->persist($phonenumber2); + $this->em->persist($phonenumber1); + $this->em->persist($phonenumber2); $user1->addPhonenumber($phonenumber1); @@ -1035,12 +1035,12 @@ private function loadFixture() $otherClass->childClasses[] = $childClass1; $otherClass->childClasses[] = $childClass2; - $this->_em->persist($childClass1); - $this->_em->persist($childClass2); - $this->_em->persist($otherClass); + $this->em->persist($childClass1); + $this->em->persist($childClass2); + $this->em->persist($otherClass); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); $this->articleId = $article1->id; $this->userId = $user1->getId(); @@ -1064,14 +1064,14 @@ public function testRemoveManagedElementFromOneToManyExtraLazyCollectionIsNoOp() list($userId, $tweetId) = $this->loadTweetFixture(); /* @var $user User */ - $user = $this->_em->find(User::class, $userId); + $user = $this->em->find(User::class, $userId); - $user->tweets->removeElement($this->_em->find(Tweet::class, $tweetId)); + $user->tweets->removeElement($this->em->find(Tweet::class, $tweetId)); - $this->_em->clear(); + $this->em->clear(); /* @var $user User */ - $user = $this->_em->find(User::class, $userId); + $user = $this->em->find(User::class, $userId); self::assertCount(1, $user->tweets, 'Element was not removed - need to update the owning side first'); } @@ -1084,15 +1084,15 @@ public function testRemoveManagedElementFromOneToManyExtraLazyCollectionWithoutD list($userId, $tweetId) = $this->loadTweetFixture(); /* @var $user User */ - $user = $this->_em->find(User::class, $userId); - $tweet = $this->_em->find(Tweet::class, $tweetId); + $user = $this->em->find(User::class, $userId); + $tweet = $this->em->find(Tweet::class, $tweetId); $user->tweets->removeElement($tweet); - $this->_em->clear(); + $this->em->clear(); /* @var $tweet Tweet */ - $tweet = $this->_em->find(Tweet::class, $tweetId); + $tweet = $this->em->find(Tweet::class, $tweetId); self::assertInstanceOf( Tweet::class, $tweet, @@ -1114,15 +1114,15 @@ public function testRemovingManagedLazyProxyFromExtraLazyOneToManyDoesRemoveTheA list($userId, $tweetId) = $this->loadTweetFixture(); /* @var $user User */ - $user = $this->_em->find(User::class, $userId); - $tweet = $this->_em->getReference(Tweet::class, $tweetId); + $user = $this->em->find(User::class, $userId); + $tweet = $this->em->getReference(Tweet::class, $tweetId); - $user->tweets->removeElement($this->_em->getReference(Tweet::class, $tweetId)); + $user->tweets->removeElement($this->em->getReference(Tweet::class, $tweetId)); - $this->_em->clear(); + $this->em->clear(); /* @var $tweet Tweet */ - $tweet = $this->_em->find(Tweet::class, $tweet->id); + $tweet = $this->em->find(Tweet::class, $tweet->id); self::assertInstanceOf( Tweet::class, $tweet, @@ -1132,7 +1132,7 @@ public function testRemovingManagedLazyProxyFromExtraLazyOneToManyDoesRemoveTheA self::assertInstanceOf(User::class, $tweet->author); /* @var $user User */ - $user = $this->_em->find(User::class, $userId); + $user = $this->em->find(User::class, $userId); self::assertCount(1, $user->tweets, 'Element was not removed - need to update the owning side first'); } @@ -1145,18 +1145,18 @@ public function testRemoveOrphanedManagedElementFromOneToManyExtraLazyCollection list($userId, $userListId) = $this->loadUserListFixture(); /* @var $user User */ - $user = $this->_em->find(User::class, $userId); + $user = $this->em->find(User::class, $userId); - $user->userLists->removeElement($this->_em->find(UserList::class, $userListId)); + $user->userLists->removeElement($this->em->find(UserList::class, $userListId)); - $this->_em->clear(); + $this->em->clear(); /* @var $user User */ - $user = $this->_em->find(User::class, $userId); + $user = $this->em->find(User::class, $userId); self::assertCount(0, $user->userLists, 'Element was removed from association due to orphan removal'); self::assertNull( - $this->_em->find(UserList::class, $userListId), + $this->em->find(UserList::class, $userListId), 'Element was deleted due to orphan removal' ); } @@ -1169,14 +1169,14 @@ public function testRemoveOrphanedUnManagedElementFromOneToManyExtraLazyCollecti list($userId, $userListId) = $this->loadUserListFixture(); /* @var $user User */ - $user = $this->_em->find(User::class, $userId); + $user = $this->em->find(User::class, $userId); $user->userLists->removeElement(new UserList()); - $this->_em->clear(); + $this->em->clear(); /* @var $userList UserList */ - $userList = $this->_em->find(UserList::class, $userListId); + $userList = $this->em->find(UserList::class, $userListId); self::assertInstanceOf( UserList::class, $userList, @@ -1198,18 +1198,18 @@ public function testRemoveOrphanedManagedLazyProxyFromExtraLazyOneToMany() list($userId, $userListId) = $this->loadUserListFixture(); /* @var $user User */ - $user = $this->_em->find(User::class, $userId); + $user = $this->em->find(User::class, $userId); - $user->userLists->removeElement($this->_em->getReference(UserList::class, $userListId)); + $user->userLists->removeElement($this->em->getReference(UserList::class, $userListId)); - $this->_em->clear(); + $this->em->clear(); /* @var $user User */ - $user = $this->_em->find(User::class, $userId); + $user = $this->em->find(User::class, $userId); self::assertCount(0, $user->userLists, 'Element was removed from association due to orphan removal'); self::assertNull( - $this->_em->find(UserList::class, $userListId), + $this->em->find(UserList::class, $userListId), 'Element was deleted due to orphan removal' ); } @@ -1227,10 +1227,10 @@ private function loadTweetFixture() $user->addTweet($tweet); - $this->_em->persist($user); - $this->_em->persist($tweet); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->persist($tweet); + $this->em->flush(); + $this->em->clear(); return [$user->id, $tweet->id]; } @@ -1248,10 +1248,10 @@ private function loadUserListFixture() $user->addUserList($userList); - $this->_em->persist($user); - $this->_em->persist($userList); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->persist($userList); + $this->em->flush(); + $this->em->clear(); return [$user->id, $userList->id]; } diff --git a/tests/Doctrine/Tests/ORM/Functional/FlushEventTest.php b/tests/Doctrine/Tests/ORM/Functional/FlushEventTest.php index 3fad8784c3e..1ba2dc21248 100644 --- a/tests/Doctrine/Tests/ORM/Functional/FlushEventTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/FlushEventTest.php @@ -23,22 +23,22 @@ protected function setUp() public function testPersistNewEntitiesOnPreFlush() { - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); - $this->_em->getEventManager()->addEventListener(Events::onFlush, new OnFlushListener); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + $this->em->getEventManager()->addEventListener(Events::onFlush, new OnFlushListener); $user = new CmsUser; $user->username = 'romanb'; $user->name = 'Roman'; $user->status = 'Dev'; - $this->_em->persist($user); + $this->em->persist($user); self::assertEquals(0, $user->phonenumbers->count()); - $this->_em->flush(); + $this->em->flush(); self::assertEquals(1, $user->phonenumbers->count()); - self::assertTrue($this->_em->contains($user->phonenumbers->get(0))); + self::assertTrue($this->em->contains($user->phonenumbers->get(0))); self::assertTrue($user->phonenumbers->get(0)->getUser() === $user); self::assertFalse($user->phonenumbers->isDirty()); @@ -46,7 +46,7 @@ public function testPersistNewEntitiesOnPreFlush() // Can be used together with SQL Logging to check that a subsequent flush has // nothing to do. This proofs the correctness of the changes that happened in onFlush. //echo "SECOND FLUSH"; - //$this->_em->flush(); + //$this->em->flush(); } /** @@ -55,16 +55,16 @@ public function testPersistNewEntitiesOnPreFlush() public function testPreAndOnFlushCalledAlways() { $listener = new OnFlushCalledListener(); - $this->_em->getEventManager()->addEventListener(Events::onFlush, $listener); - $this->_em->getEventManager()->addEventListener(Events::preFlush, $listener); - $this->_em->getEventManager()->addEventListener(Events::postFlush, $listener); + $this->em->getEventManager()->addEventListener(Events::onFlush, $listener); + $this->em->getEventManager()->addEventListener(Events::preFlush, $listener); + $this->em->getEventManager()->addEventListener(Events::postFlush, $listener); - $this->_em->flush(); + $this->em->flush(); self::assertEquals(1, $listener->preFlush); self::assertEquals(1, $listener->onFlush); - $this->_em->flush(); + $this->em->flush(); self::assertEquals(2, $listener->preFlush); self::assertEquals(2, $listener->onFlush); diff --git a/tests/Doctrine/Tests/ORM/Functional/HydrationCacheTest.php b/tests/Doctrine/Tests/ORM/Functional/HydrationCacheTest.php index 220f2ba3bab..3a943568b01 100644 --- a/tests/Doctrine/Tests/ORM/Functional/HydrationCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/HydrationCacheTest.php @@ -23,9 +23,9 @@ public function setUp() $user->username = "beberlei"; $user->status = 'active'; - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); } public function testHydrationCache() @@ -33,36 +33,36 @@ public function testHydrationCache() $cache = new ArrayCache(); $dql = "SELECT u FROM Doctrine\Tests\Models\Cms\CmsUser u"; - $users = $this->_em->createQuery($dql) + $users = $this->em->createQuery($dql) ->setHydrationCacheProfile(new QueryCacheProfile(null, null, $cache)) ->getResult(); $c = $this->getCurrentQueryCount(); - $users = $this->_em->createQuery($dql) + $users = $this->em->createQuery($dql) ->setHydrationCacheProfile(new QueryCacheProfile(null, null, $cache)) ->getResult(); self::assertEquals($c, $this->getCurrentQueryCount(), "Should not execute query. Its cached!"); - $users = $this->_em->createQuery($dql) + $users = $this->em->createQuery($dql) ->setHydrationCacheProfile(new QueryCacheProfile(null, null, $cache)) ->getArrayResult(); self::assertEquals($c + 1, $this->getCurrentQueryCount(), "Hydration is part of cache key."); - $users = $this->_em->createQuery($dql) + $users = $this->em->createQuery($dql) ->setHydrationCacheProfile(new QueryCacheProfile(null, null, $cache)) ->getArrayResult(); self::assertEquals($c + 1, $this->getCurrentQueryCount(), "Hydration now cached"); - $users = $this->_em->createQuery($dql) + $users = $this->em->createQuery($dql) ->setHydrationCacheProfile(new QueryCacheProfile(null, 'cachekey', $cache)) ->getArrayResult(); self::assertTrue($cache->contains('cachekey'), 'Explicit cache key'); - $users = $this->_em->createQuery($dql) + $users = $this->em->createQuery($dql) ->setHydrationCacheProfile(new QueryCacheProfile(null, 'cachekey', $cache)) ->getArrayResult(); self::assertEquals($c + 2, $this->getCurrentQueryCount(), "Hydration now cached"); @@ -73,7 +73,7 @@ public function testHydrationParametersSerialization() $cache = new ArrayCache(); $dql = "SELECT u FROM Doctrine\Tests\Models\Cms\CmsUser u WHERE u.id = ?1"; - $query = $this->_em->createQuery($dql) + $query = $this->em->createQuery($dql) ->setParameter(1, $userId = 1) ->setHydrationCacheProfile(new QueryCacheProfile(null, null, $cache)); diff --git a/tests/Doctrine/Tests/ORM/Functional/IdentityMapTest.php b/tests/Doctrine/Tests/ORM/Functional/IdentityMapTest.php index 0fe8d84a900..5abe865bd14 100644 --- a/tests/Doctrine/Tests/ORM/Functional/IdentityMapTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/IdentityMapTest.php @@ -38,18 +38,18 @@ public function testBasicIdentityManagement() $user->setAddress($address); - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); - $user2 = $this->_em->find(get_class($user), $user->getId()); + $user2 = $this->em->find(get_class($user), $user->getId()); self::assertTrue($user2 !== $user); - $user3 = $this->_em->find(get_class($user), $user->getId()); + $user3 = $this->em->find(get_class($user), $user->getId()); self::assertTrue($user2 === $user3); - $address2 = $this->_em->find(get_class($address), $address->getId()); + $address2 = $this->em->find(get_class($address), $address->getId()); self::assertTrue($address2 !== $address); - $address3 = $this->_em->find(get_class($address), $address->getId()); + $address3 = $this->em->find(get_class($address), $address->getId()); self::assertTrue($address2 === $address3); self::assertTrue($user2->getAddress() === $address2); // !!! @@ -74,19 +74,19 @@ public function testSingleValuedAssociationIdentityMapBehaviorWithRefresh() $address->setUser($user1); - $this->_em->persist($address); - $this->_em->persist($user1); - $this->_em->persist($user2); - $this->_em->flush(); + $this->em->persist($address); + $this->em->persist($user1); + $this->em->persist($user2); + $this->em->flush(); self::assertSame($user1, $address->user); //external update to CmsAddress - $this->_em->getConnection()->executeUpdate('update cms_addresses set user_id = ?', [$user2->getId()]); + $this->em->getConnection()->executeUpdate('update cms_addresses set user_id = ?', [$user2->getId()]); // But we want to have this external change! // Solution 1: refresh(), broken atm! - $this->_em->refresh($address); + $this->em->refresh($address); // Now the association should be "correct", referencing $user2 self::assertSame($user2, $address->user); @@ -116,19 +116,19 @@ public function testSingleValuedAssociationIdentityMapBehaviorWithRefreshQuery() $address->setUser($user1); - $this->_em->persist($address); - $this->_em->persist($user1); - $this->_em->persist($user2); - $this->_em->flush(); + $this->em->persist($address); + $this->em->persist($user1); + $this->em->persist($user2); + $this->em->flush(); self::assertSame($user1, $address->user); //external update to CmsAddress - $this->_em->getConnection()->executeUpdate('update cms_addresses set user_id = ?', [$user2->getId()]); + $this->em->getConnection()->executeUpdate('update cms_addresses set user_id = ?', [$user2->getId()]); //select - $q = $this->_em->createQuery('select a, u from Doctrine\Tests\Models\CMS\CmsAddress a join a.user u'); + $q = $this->em->createQuery('select a, u from Doctrine\Tests\Models\CMS\CmsAddress a join a.user u'); $address2 = $q->getSingleResult(); self::assertSame($address, $address2); @@ -139,7 +139,7 @@ public function testSingleValuedAssociationIdentityMapBehaviorWithRefreshQuery() // But we want to have this external change! // Solution 2: Alternatively, a refresh query should work - $q = $this->_em->createQuery('select a, u from Doctrine\Tests\Models\CMS\CmsAddress a join a.user u'); + $q = $this->em->createQuery('select a, u from Doctrine\Tests\Models\CMS\CmsAddress a join a.user u'); $q->setHint(Query::HINT_REFRESH, true); $address3 = $q->getSingleResult(); @@ -174,18 +174,18 @@ public function testCollectionValuedAssociationIdentityMapBehaviorWithRefreshQue $user->addPhonenumber($phone2); $user->addPhonenumber($phone3); - $this->_em->persist($user); // cascaded to phone numbers - $this->_em->flush(); + $this->em->persist($user); // cascaded to phone numbers + $this->em->flush(); self::assertEquals(3, count($user->getPhonenumbers())); self::assertFalse($user->getPhonenumbers()->isDirty()); //external update to CmsAddress - $this->_em->getConnection()->executeUpdate('insert into cms_phonenumbers (phonenumber, user_id) VALUES (?,?)', [999, $user->getId()] + $this->em->getConnection()->executeUpdate('insert into cms_phonenumbers (phonenumber, user_id) VALUES (?,?)', [999, $user->getId()] ); //select - $q = $this->_em->createQuery('select u, p from Doctrine\Tests\Models\CMS\CmsUser u join u.phonenumbers p'); + $q = $this->em->createQuery('select u, p from Doctrine\Tests\Models\CMS\CmsUser u join u.phonenumbers p'); $user2 = $q->getSingleResult(); self::assertSame($user, $user2); @@ -195,9 +195,9 @@ public function testCollectionValuedAssociationIdentityMapBehaviorWithRefreshQue // But we want to have this external change! // Solution 1: refresh(). - //$this->_em->refresh($user2); broken atm! + //$this->em->refresh($user2); broken atm! // Solution 2: Alternatively, a refresh query should work - $q = $this->_em->createQuery('select u, p from Doctrine\Tests\Models\CMS\CmsUser u join u.phonenumbers p'); + $q = $this->em->createQuery('select u, p from Doctrine\Tests\Models\CMS\CmsUser u join u.phonenumbers p'); $q->setHint(Query::HINT_REFRESH, true); $user3 = $q->getSingleResult(); @@ -227,17 +227,17 @@ public function testCollectionValuedAssociationIdentityMapBehaviorWithRefresh() $user->addPhonenumber($phone2); $user->addPhonenumber($phone3); - $this->_em->persist($user); // cascaded to phone numbers - $this->_em->flush(); + $this->em->persist($user); // cascaded to phone numbers + $this->em->flush(); self::assertEquals(3, count($user->getPhonenumbers())); //external update to CmsAddress - $this->_em->getConnection()->executeUpdate('insert into cms_phonenumbers (phonenumber, user_id) VALUES (?,?)', [999, $user->getId()] + $this->em->getConnection()->executeUpdate('insert into cms_phonenumbers (phonenumber, user_id) VALUES (?,?)', [999, $user->getId()] ); //select - $q = $this->_em->createQuery('select u, p from Doctrine\Tests\Models\CMS\CmsUser u join u.phonenumbers p'); + $q = $this->em->createQuery('select u, p from Doctrine\Tests\Models\CMS\CmsUser u join u.phonenumbers p'); $user2 = $q->getSingleResult(); self::assertSame($user, $user2); @@ -247,7 +247,7 @@ public function testCollectionValuedAssociationIdentityMapBehaviorWithRefresh() // But we want to have this external change! // Solution 1: refresh(). - $this->_em->refresh($user2); + $this->em->refresh($user2); self::assertSame($user, $user2); // should still be the same, always from identity map diff --git a/tests/Doctrine/Tests/ORM/Functional/IndexByAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/IndexByAssociationTest.php index f9d02955f31..9687a9d35b2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/IndexByAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/IndexByAssociationTest.php @@ -36,18 +36,18 @@ public function loadFixture() $this->bond->addStock($stock1); $this->bond->addStock($stock2); - $this->_em->persist($this->market); - $this->_em->persist($stock1); - $this->_em->persist($stock2); - $this->_em->persist($this->bond); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($this->market); + $this->em->persist($stock1); + $this->em->persist($stock2); + $this->em->persist($this->bond); + $this->em->flush(); + $this->em->clear(); } public function testManyToOneFinder() { /* @var $market Market */ - $market = $this->_em->find(Market::class, $this->market->getId()); + $market = $this->em->find(Market::class, $this->market->getId()); self::assertEquals(2, count($market->stocks)); self::assertTrue(isset($market->stocks['AAPL']), "AAPL symbol has to be key in indexed association."); @@ -59,7 +59,7 @@ public function testManyToOneFinder() public function testManyToOneDQL() { $dql = "SELECT m, s FROM Doctrine\Tests\Models\StockExchange\Market m JOIN m.stocks s WHERE m.id = ?1"; - $market = $this->_em->createQuery($dql)->setParameter(1, $this->market->getId())->getSingleResult(); + $market = $this->em->createQuery($dql)->setParameter(1, $this->market->getId())->getSingleResult(); self::assertEquals(2, count($market->stocks)); self::assertTrue(isset($market->stocks['AAPL']), "AAPL symbol has to be key in indexed association."); @@ -70,7 +70,7 @@ public function testManyToOneDQL() public function testManyToMany() { - $bond = $this->_em->find(Bond::class, $this->bond->getId()); + $bond = $this->em->find(Bond::class, $this->bond->getId()); self::assertEquals(2, count($bond->stocks)); self::assertTrue(isset($bond->stocks['AAPL']), "AAPL symbol has to be key in indexed association."); @@ -82,7 +82,7 @@ public function testManyToMany() public function testManytoManyDQL() { $dql = "SELECT b, s FROM Doctrine\Tests\Models\StockExchange\Bond b JOIN b.stocks s WHERE b.id = ?1"; - $bond = $this->_em->createQuery($dql)->setParameter(1, $this->bond->getId())->getSingleResult(); + $bond = $this->em->createQuery($dql)->setParameter(1, $this->bond->getId())->getSingleResult(); self::assertEquals(2, count($bond->stocks)); self::assertTrue(isset($bond->stocks['AAPL']), "AAPL symbol has to be key in indexed association."); @@ -94,7 +94,7 @@ public function testManytoManyDQL() public function testDqlOverrideIndexBy() { $dql = "SELECT b, s FROM Doctrine\Tests\Models\StockExchange\Bond b JOIN b.stocks s INDEX BY s.id WHERE b.id = ?1"; - $bond = $this->_em->createQuery($dql)->setParameter(1, $this->bond->getId())->getSingleResult(); + $bond = $this->em->createQuery($dql)->setParameter(1, $this->bond->getId())->getSingleResult(); self::assertEquals(2, count($bond->stocks)); self::assertFalse(isset($bond->stocks['AAPL']), "AAPL symbol not exists in re-indexed association."); diff --git a/tests/Doctrine/Tests/ORM/Functional/JoinedTableCompositeKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/JoinedTableCompositeKeyTest.php index fada8630f3b..4f8cc9552b3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/JoinedTableCompositeKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/JoinedTableCompositeKeyTest.php @@ -21,10 +21,10 @@ public function setUp() public function testInsertWithCompositeKey() { $childEntity = new JoinedChildClass(); - $this->_em->persist($childEntity); - $this->_em->flush(); + $this->em->persist($childEntity); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); $entity = $this->findEntity(); self::assertEquals($childEntity, $entity); @@ -36,17 +36,17 @@ public function testInsertWithCompositeKey() public function testUpdateWithCompositeKey() { $childEntity = new JoinedChildClass(); - $this->_em->persist($childEntity); - $this->_em->flush(); + $this->em->persist($childEntity); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); $entity = $this->findEntity(); $entity->extension = 'ext-new'; - $this->_em->persist($entity); - $this->_em->flush(); + $this->em->persist($entity); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); $persistedEntity = $this->findEntity(); self::assertEquals($entity, $persistedEntity); @@ -57,7 +57,7 @@ public function testUpdateWithCompositeKey() */ private function findEntity() { - return $this->_em->find( + return $this->em->find( JoinedRootClass::class, ['keyPart1' => 'part-1', 'keyPart2' => 'part-2'] ); diff --git a/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php b/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php index 97adae461d7..0f84c624ee2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php @@ -15,12 +15,12 @@ protected function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(LifecycleCallbackEventArgEntity::class), - $this->_em->getClassMetadata(LifecycleCallbackTestEntity::class), - $this->_em->getClassMetadata(LifecycleCallbackTestUser::class), - $this->_em->getClassMetadata(LifecycleCallbackCascader::class), + $this->em->getClassMetadata(LifecycleCallbackEventArgEntity::class), + $this->em->getClassMetadata(LifecycleCallbackTestEntity::class), + $this->em->getClassMetadata(LifecycleCallbackTestUser::class), + $this->em->getClassMetadata(LifecycleCallbackCascader::class), ] ); } catch (\Exception $e) { @@ -32,21 +32,21 @@ public function testPreSavePostSaveCallbacksAreInvoked() { $entity = new LifecycleCallbackTestEntity; $entity->value = 'hello'; - $this->_em->persist($entity); - $this->_em->flush(); + $this->em->persist($entity); + $this->em->flush(); self::assertTrue($entity->prePersistCallbackInvoked); self::assertTrue($entity->postPersistCallbackInvoked); - $this->_em->clear(); + $this->em->clear(); - $query = $this->_em->createQuery("select e from Doctrine\Tests\ORM\Functional\LifecycleCallbackTestEntity e"); + $query = $this->em->createQuery("select e from Doctrine\Tests\ORM\Functional\LifecycleCallbackTestEntity e"); $result = $query->getResult(); self::assertTrue($result[0]->postLoadCallbackInvoked); $result[0]->value = 'hello again'; - $this->_em->flush(); + $this->em->flush(); self::assertEquals('changed from preUpdate callback!', $result[0]->value); } @@ -55,21 +55,21 @@ public function testPreFlushCallbacksAreInvoked() { $entity = new LifecycleCallbackTestEntity; $entity->value = 'hello'; - $this->_em->persist($entity); + $this->em->persist($entity); - $this->_em->flush(); + $this->em->flush(); self::assertTrue($entity->prePersistCallbackInvoked); self::assertTrue($entity->preFlushCallbackInvoked); $entity->preFlushCallbackInvoked = false; - $this->_em->flush(); + $this->em->flush(); self::assertTrue($entity->preFlushCallbackInvoked); $entity->value = 'bye'; $entity->preFlushCallbackInvoked = false; - $this->_em->flush(); + $this->em->flush(); self::assertTrue($entity->preFlushCallbackInvoked); } @@ -79,15 +79,15 @@ public function testChangesDontGetLost() $user = new LifecycleCallbackTestUser; $user->setName('Bob'); $user->setValue('value'); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); $user->setName('Alice'); - $this->_em->flush(); // Triggers preUpdate + $this->em->flush(); // Triggers preUpdate - $this->_em->clear(); + $this->em->clear(); - $user2 = $this->_em->find(get_class($user), $user->getId()); + $user2 = $this->em->find(get_class($user), $user->getId()); self::assertEquals('Alice', $user2->getName()); self::assertEquals('Hello World', $user2->getValue()); @@ -100,13 +100,13 @@ public function testGetReferenceWithPostLoadEventIsDelayedUntilProxyTrigger() { $entity = new LifecycleCallbackTestEntity; $entity->value = 'hello'; - $this->_em->persist($entity); - $this->_em->flush(); + $this->em->persist($entity); + $this->em->flush(); $id = $entity->getId(); - $this->_em->clear(); + $this->em->clear(); - $reference = $this->_em->getReference(LifecycleCallbackTestEntity::class, $id); + $reference = $this->em->getReference(LifecycleCallbackTestEntity::class, $id); self::assertFalse($reference->postLoadCallbackInvoked); $reference->getValue(); // trigger proxy load @@ -120,17 +120,17 @@ public function testPostLoadTriggeredOnRefresh() { $entity = new LifecycleCallbackTestEntity; $entity->value = 'hello'; - $this->_em->persist($entity); - $this->_em->flush(); + $this->em->persist($entity); + $this->em->flush(); $id = $entity->getId(); - $this->_em->clear(); + $this->em->clear(); - $reference = $this->_em->find(LifecycleCallbackTestEntity::class, $id); + $reference = $this->em->find(LifecycleCallbackTestEntity::class, $id); self::assertTrue($reference->postLoadCallbackInvoked); $reference->postLoadCallbackInvoked = false; - $this->_em->refresh($reference); + $this->em->refresh($reference); self::assertTrue($reference->postLoadCallbackInvoked, "postLoad should be invoked when refresh() is called."); } @@ -139,21 +139,21 @@ public function testPostLoadTriggeredOnRefresh() */ public function testCascadedEntitiesCallsPrePersist() { - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); $e1 = new LifecycleCallbackTestEntity; $e2 = new LifecycleCallbackTestEntity; $c = new LifecycleCallbackCascader(); - $this->_em->persist($c); + $this->em->persist($c); $c->entities[] = $e1; $c->entities[] = $e2; $e1->cascader = $c; $e2->cascader = $c; - //$this->_em->persist($c); - $this->_em->flush(); + //$this->em->persist($c); + $this->em->flush(); self::assertTrue($e1->prePersistCallbackInvoked); self::assertTrue($e2->prePersistCallbackInvoked); @@ -169,15 +169,15 @@ public function testCascadedEntitiesLoadedInPostLoad() $e2 = new LifecycleCallbackTestEntity(); $c = new LifecycleCallbackCascader(); - $this->_em->persist($c); + $this->em->persist($c); $c->entities[] = $e1; $c->entities[] = $e2; $e1->cascader = $c; $e2->cascader = $c; - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); $dql = <<<'DQL' SELECT @@ -191,7 +191,7 @@ public function testCascadedEntitiesLoadedInPostLoad() DQL; $entities = $this - ->_em + ->em ->createQuery(sprintf($dql, $e1->getId(), $e2->getId())) ->getResult(); @@ -211,15 +211,15 @@ public function testCascadedEntitiesNotLoadedInPostLoadDuringIteration() $e2 = new LifecycleCallbackTestEntity(); $c = new LifecycleCallbackCascader(); - $this->_em->persist($c); + $this->em->persist($c); $c->entities[] = $e1; $c->entities[] = $e2; $e1->cascader = $c; $e2->cascader = $c; - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); $dql = <<<'DQL' SELECT @@ -233,7 +233,7 @@ public function testCascadedEntitiesNotLoadedInPostLoadDuringIteration() DQL; $result = $this - ->_em + ->em ->createQuery(sprintf($dql, $e1->getId(), $e2->getId())) ->iterate(); @@ -250,14 +250,14 @@ public function testCascadedEntitiesNotLoadedInPostLoadDuringIteration() */ public function testCascadedEntitiesNotLoadedInPostLoadDuringIterationWithSimpleObjectHydrator() { - $this->_em->persist(new LifecycleCallbackTestEntity()); - $this->_em->persist(new LifecycleCallbackTestEntity()); + $this->em->persist(new LifecycleCallbackTestEntity()); + $this->em->persist(new LifecycleCallbackTestEntity()); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); $result = $this - ->_em + ->em ->createQuery('SELECT e FROM Doctrine\Tests\ORM\Functional\LifecycleCallbackTestEntity AS e') ->iterate(null, Query::HYDRATE_SIMPLEOBJECT); @@ -268,15 +268,15 @@ public function testCascadedEntitiesNotLoadedInPostLoadDuringIterationWithSimple break; } } - + /** * https://github.com/doctrine/doctrine2/issues/6568 */ public function testPostLoadIsInvokedOnFetchJoinedEntities() { $entA = new LifecycleCallbackCascader(); - $this->_em->persist($entA); - + $this->em->persist($entA); + $entB_1 = new LifecycleCallbackTestEntity(); $entB_2 = new LifecycleCallbackTestEntity(); @@ -285,8 +285,8 @@ public function testPostLoadIsInvokedOnFetchJoinedEntities() $entB_1->cascader = $entA; $entB_2->cascader = $entA; - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); $dql = <<<'DQL' SELECT @@ -300,7 +300,7 @@ public function testPostLoadIsInvokedOnFetchJoinedEntities() DQL; $fetchedA = $this - ->_em + ->em ->createQuery($dql)->setParameter('entA_id', $entA->getId()) ->getOneOrNullResult(); @@ -312,32 +312,32 @@ public function testPostLoadIsInvokedOnFetchJoinedEntities() public function testLifecycleCallbacksGetInherited() { - $childMeta = $this->_em->getClassMetadata(LifecycleCallbackChildEntity::class); + $childMeta = $this->em->getClassMetadata(LifecycleCallbackChildEntity::class); self::assertEquals(['prePersist' => [0 => 'doStuff']], $childMeta->lifecycleCallbacks); } public function testLifecycleListener_ChangeUpdateChangeSet() { $listener = new LifecycleListenerPreUpdate; - $this->_em->getEventManager()->addEventListener(['preUpdate'], $listener); + $this->em->getEventManager()->addEventListener(['preUpdate'], $listener); $user = new LifecycleCallbackTestUser; $user->setName('Bob'); $user->setValue('value'); - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); $dql = "SELECT u FROM Doctrine\Tests\ORM\Functional\LifecycleCallbackTestUser u WHERE u.name = 'Bob'"; - $bob = $this->_em->createQuery($dql)->getSingleResult(); + $bob = $this->em->createQuery($dql)->getSingleResult(); $bob->setName('Alice'); - $this->_em->flush(); // preUpdate reverts Alice to Bob - $this->_em->clear(); + $this->em->flush(); // preUpdate reverts Alice to Bob + $this->em->clear(); - $this->_em->getEventManager()->removeEventListener(['preUpdate'], $listener); + $this->em->getEventManager()->removeEventListener(['preUpdate'], $listener); - $bob = $this->_em->createQuery($dql)->getSingleResult(); + $bob = $this->em->createQuery($dql)->getSingleResult(); self::assertEquals('Bob', $bob->getName()); } @@ -350,17 +350,17 @@ public function testLifecycleCallbackEventArgs() $e = new LifecycleCallbackEventArgEntity; $e->value = 'foo'; - $this->_em->persist($e); - $this->_em->flush(); + $this->em->persist($e); + $this->em->flush(); $e->value = 'var'; - $this->_em->persist($e); - $this->_em->flush(); + $this->em->persist($e); + $this->em->flush(); - $this->_em->refresh($e); + $this->em->refresh($e); - $this->_em->remove($e); - $this->_em->flush(); + $this->em->remove($e); + $this->em->flush(); self::assertArrayHasKey('preFlushHandler', $e->calls); @@ -496,7 +496,7 @@ public function doStuffOnPostLoad() { $this->postLoadCallbackInvoked = true; $this->postLoadEntitiesCount = count($this->entities); } - + public function getId() { return $this->id; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Locking/GearmanLockTest.php b/tests/Doctrine/Tests/ORM/Functional/Locking/GearmanLockTest.php index 712e2e91338..0b9383b700d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Locking/GearmanLockTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/Locking/GearmanLockTest.php @@ -36,8 +36,8 @@ protected function setUp() $article->text = "my article"; $article->topic = "Hello"; - $this->_em->persist($article); - $this->_em->flush(); + $this->em->persist($article); + $this->em->flush(); $this->articleId = $article->id; } @@ -175,7 +175,7 @@ protected function startJob($fn, $fixture) { $this->gearman->addTask($fn, serialize( [ - 'conn' => $this->_em->getConnection()->getParams(), + 'conn' => $this->em->getConnection()->getParams(), 'fixture' => $fixture ] )); diff --git a/tests/Doctrine/Tests/ORM/Functional/Locking/LockTest.php b/tests/Doctrine/Tests/ORM/Functional/Locking/LockTest.php index b6b9dc1b6ca..13c56293d54 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Locking/LockTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/Locking/LockTest.php @@ -33,10 +33,10 @@ public function testLockVersionedEntity() $article->text = "my article"; $article->topic = "Hello"; - $this->_em->persist($article); - $this->_em->flush(); + $this->em->persist($article); + $this->em->flush(); - $this->_em->lock($article, LockMode::OPTIMISTIC, $article->version); + $this->em->lock($article, LockMode::OPTIMISTIC, $article->version); $this->addToAssertionCount(1); } @@ -51,12 +51,12 @@ public function testLockVersionedEntity_MismatchThrowsException() $article->text = "my article"; $article->topic = "Hello"; - $this->_em->persist($article); - $this->_em->flush(); + $this->em->persist($article); + $this->em->flush(); $this->expectException(OptimisticLockException::class); - $this->_em->lock($article, LockMode::OPTIMISTIC, $article->version + 1); + $this->em->lock($article, LockMode::OPTIMISTIC, $article->version + 1); } /** @@ -70,12 +70,12 @@ public function testLockUnversionedEntity_ThrowsException() $user->status = "active"; $user->username = "foo"; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); $this->expectException(OptimisticLockException::class); - $this->_em->lock($user, LockMode::OPTIMISTIC); + $this->em->lock($user, LockMode::OPTIMISTIC); } /** @@ -89,7 +89,7 @@ public function testLockUnmanagedEntity_ThrowsException() $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage('Entity ' . CmsArticle::class); - $this->_em->lock($article, LockMode::OPTIMISTIC, $article->version + 1); + $this->em->lock($article, LockMode::OPTIMISTIC, $article->version + 1); } /** @@ -102,12 +102,12 @@ public function testLockPessimisticRead_NoTransaction_ThrowsException() $article->text = "my article"; $article->topic = "Hello"; - $this->_em->persist($article); - $this->_em->flush(); + $this->em->persist($article); + $this->em->flush(); $this->expectException(TransactionRequiredException::class); - $this->_em->lock($article, LockMode::PESSIMISTIC_READ); + $this->em->lock($article, LockMode::PESSIMISTIC_READ); } /** @@ -120,12 +120,12 @@ public function testLockPessimisticWrite_NoTransaction_ThrowsException() $article->text = "my article"; $article->topic = "Hello"; - $this->_em->persist($article); - $this->_em->flush(); + $this->em->persist($article); + $this->em->flush(); $this->expectException(TransactionRequiredException::class); - $this->_em->lock($article, LockMode::PESSIMISTIC_WRITE); + $this->em->lock($article, LockMode::PESSIMISTIC_WRITE); } /** @@ -134,7 +134,7 @@ public function testLockPessimisticWrite_NoTransaction_ThrowsException() */ public function testLockPessimisticWrite() { - $writeLockSql = $this->_em->getConnection()->getDatabasePlatform()->getWriteLockSQL(); + $writeLockSql = $this->em->getConnection()->getDatabasePlatform()->getWriteLockSQL(); if (! $writeLockSql) { $this->markTestSkipped('Database Driver has no Write Lock support.'); @@ -144,22 +144,22 @@ public function testLockPessimisticWrite() $article->text = "my article"; $article->topic = "Hello"; - $this->_em->persist($article); - $this->_em->flush(); + $this->em->persist($article); + $this->em->flush(); - $this->_em->beginTransaction(); + $this->em->beginTransaction(); try { - $this->_em->lock($article, LockMode::PESSIMISTIC_WRITE); - $this->_em->commit(); + $this->em->lock($article, LockMode::PESSIMISTIC_WRITE); + $this->em->commit(); } catch (\Exception $e) { - $this->_em->rollback(); + $this->em->rollback(); throw $e; } - array_pop($this->_sqlLoggerStack->queries); + array_pop($this->sqlLoggerStack->queries); - $query = array_pop($this->_sqlLoggerStack->queries); + $query = array_pop($this->sqlLoggerStack->queries); self::assertContains($writeLockSql, $query['sql']); } @@ -169,7 +169,7 @@ public function testLockPessimisticWrite() */ public function testLockPessimisticRead() { - $readLockSql = $this->_em->getConnection()->getDatabasePlatform()->getReadLockSQL(); + $readLockSql = $this->em->getConnection()->getDatabasePlatform()->getReadLockSQL(); if (! $readLockSql) { $this->markTestSkipped('Database Driver has no Write Lock support.'); @@ -179,22 +179,22 @@ public function testLockPessimisticRead() $article->text = "my article"; $article->topic = "Hello"; - $this->_em->persist($article); - $this->_em->flush(); + $this->em->persist($article); + $this->em->flush(); - $this->_em->beginTransaction(); + $this->em->beginTransaction(); try { - $this->_em->lock($article, LockMode::PESSIMISTIC_READ); - $this->_em->commit(); + $this->em->lock($article, LockMode::PESSIMISTIC_READ); + $this->em->commit(); } catch (\Exception $e) { - $this->_em->rollback(); + $this->em->rollback(); throw $e; } - array_pop($this->_sqlLoggerStack->queries); + array_pop($this->sqlLoggerStack->queries); - $query = array_pop($this->_sqlLoggerStack->queries); + $query = array_pop($this->sqlLoggerStack->queries); self::assertContains($readLockSql, $query['sql']); } @@ -209,7 +209,7 @@ public function testLockOptimisticNonVersionedThrowsExceptionInDQL() $this->expectException(OptimisticLockException::class); $this->expectExceptionMessage('The optimistic lock on an entity failed.'); - $this->_em->createQuery($dql) + $this->em->createQuery($dql) ->setHint(Query::HINT_LOCK_MODE, LockMode::OPTIMISTIC) ->getSQL(); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Locking/OptimisticTest.php b/tests/Doctrine/Tests/ORM/Functional/Locking/OptimisticTest.php index 424d69473b4..6163b4864ab 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Locking/OptimisticTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/Locking/OptimisticTest.php @@ -14,19 +14,19 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(OptimisticJoinedParent::class), - $this->_em->getClassMetadata(OptimisticJoinedChild::class), - $this->_em->getClassMetadata(OptimisticStandard::class), - $this->_em->getClassMetadata(OptimisticTimestamp::class) + $this->em->getClassMetadata(OptimisticJoinedParent::class), + $this->em->getClassMetadata(OptimisticJoinedChild::class), + $this->em->getClassMetadata(OptimisticStandard::class), + $this->em->getClassMetadata(OptimisticTimestamp::class) ] ); } catch (\Exception $e) { // Swallow all exceptions. We do not test the schema tool here. } - $this->_conn = $this->_em->getConnection(); + $this->conn = $this->em->getConnection(); } public function testJoinedChildInsertSetsInitialVersionValue() @@ -36,8 +36,8 @@ public function testJoinedChildInsertSetsInitialVersionValue() $test->name = 'child'; $test->whatever = 'whatever'; - $this->_em->persist($test); - $this->_em->flush(); + $this->em->persist($test); + $this->em->flush(); self::assertEquals(1, $test->version); @@ -49,7 +49,7 @@ public function testJoinedChildInsertSetsInitialVersionValue() */ public function testJoinedChildFailureThrowsException(OptimisticJoinedChild $child) { - $q = $this->_em->createQuery('SELECT t FROM Doctrine\Tests\ORM\Functional\Locking\OptimisticJoinedChild t WHERE t.id = :id'); + $q = $this->em->createQuery('SELECT t FROM Doctrine\Tests\ORM\Functional\Locking\OptimisticJoinedChild t WHERE t.id = :id'); $q->setParameter('id', $child->id); @@ -58,13 +58,13 @@ public function testJoinedChildFailureThrowsException(OptimisticJoinedChild $chi // Manually update/increment the version so we can try and save the same // $test and make sure the exception is thrown saying the record was // changed or updated since you read it - $this->_conn->executeQuery('UPDATE optimistic_joined_parent SET version = ? WHERE id = ?', [2, $test->id]); + $this->conn->executeQuery('UPDATE optimistic_joined_parent SET version = ? WHERE id = ?', [2, $test->id]); // Now lets change a property and try and save it again $test->whatever = 'ok'; try { - $this->_em->flush(); + $this->em->flush(); } catch (OptimisticLockException $e) { self::assertSame($test, $e->getEntity()); } @@ -76,8 +76,8 @@ public function testJoinedParentInsertSetsInitialVersionValue() $test->name = 'parent'; - $this->_em->persist($test); - $this->_em->flush(); + $this->em->persist($test); + $this->em->flush(); self::assertEquals(1, $test->version); @@ -89,7 +89,7 @@ public function testJoinedParentInsertSetsInitialVersionValue() */ public function testJoinedParentFailureThrowsException(OptimisticJoinedParent $parent) { - $q = $this->_em->createQuery('SELECT t FROM Doctrine\Tests\ORM\Functional\Locking\OptimisticJoinedParent t WHERE t.id = :id'); + $q = $this->em->createQuery('SELECT t FROM Doctrine\Tests\ORM\Functional\Locking\OptimisticJoinedParent t WHERE t.id = :id'); $q->setParameter('id', $parent->id); @@ -98,13 +98,13 @@ public function testJoinedParentFailureThrowsException(OptimisticJoinedParent $p // Manually update/increment the version so we can try and save the same // $test and make sure the exception is thrown saying the record was // changed or updated since you read it - $this->_conn->executeQuery('UPDATE optimistic_joined_parent SET version = ? WHERE id = ?', [2, $test->id]); + $this->conn->executeQuery('UPDATE optimistic_joined_parent SET version = ? WHERE id = ?', [2, $test->id]); // Now lets change a property and try and save it again $test->name = 'WHATT???'; try { - $this->_em->flush(); + $this->em->flush(); } catch (OptimisticLockException $e) { self::assertSame($test, $e->getEntity()); } @@ -117,8 +117,8 @@ public function testMultipleFlushesDoIncrementalUpdates() for ($i = 0; $i < 5; $i++) { $test->name = 'test' . $i; - $this->_em->persist($test); - $this->_em->flush(); + $this->em->persist($test); + $this->em->flush(); self::assertInternalType('int', $test->getVersion()); self::assertEquals($i + 1, $test->getVersion()); @@ -131,8 +131,8 @@ public function testStandardInsertSetsInitialVersionValue() $test->name = 'test'; - $this->_em->persist($test); - $this->_em->flush(); + $this->em->persist($test); + $this->em->flush(); self::assertInternalType('int', $test->getVersion()); self::assertEquals(1, $test->getVersion()); @@ -145,7 +145,7 @@ public function testStandardInsertSetsInitialVersionValue() */ public function testStandardFailureThrowsException(OptimisticStandard $entity) { - $q = $this->_em->createQuery('SELECT t FROM Doctrine\Tests\ORM\Functional\Locking\OptimisticStandard t WHERE t.id = :id'); + $q = $this->em->createQuery('SELECT t FROM Doctrine\Tests\ORM\Functional\Locking\OptimisticStandard t WHERE t.id = :id'); $q->setParameter('id', $entity->id); @@ -154,13 +154,13 @@ public function testStandardFailureThrowsException(OptimisticStandard $entity) // Manually update/increment the version so we can try and save the same // $test and make sure the exception is thrown saying the record was // changed or updated since you read it - $this->_conn->executeQuery('UPDATE optimistic_standard SET version = ? WHERE id = ?', [2, $test->id]); + $this->conn->executeQuery('UPDATE optimistic_standard SET version = ? WHERE id = ?', [2, $test->id]); // Now lets change a property and try and save it again $test->name = 'WHATT???'; try { - $this->_em->flush(); + $this->em->flush(); } catch (OptimisticLockException $e) { self::assertSame($test, $e->getEntity()); } @@ -171,13 +171,13 @@ public function testLockWorksWithProxy() $test = new OptimisticStandard(); $test->name = 'test'; - $this->_em->persist($test); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($test); + $this->em->flush(); + $this->em->clear(); - $proxy = $this->_em->getReference(OptimisticStandard::class, $test->id); + $proxy = $this->em->getReference(OptimisticStandard::class, $test->id); - $this->_em->lock($proxy, LockMode::OPTIMISTIC, 1); + $this->em->lock($proxy, LockMode::OPTIMISTIC, 1); $this->addToAssertionCount(1); } @@ -190,8 +190,8 @@ public function testOptimisticTimestampSetsDefaultValue() self::assertNull($test->version, "Pre-Condition"); - $this->_em->persist($test); - $this->_em->flush(); + $this->em->persist($test); + $this->em->flush(); self::assertInstanceOf('DateTime', $test->version); @@ -203,7 +203,7 @@ public function testOptimisticTimestampSetsDefaultValue() */ public function testOptimisticTimestampFailureThrowsException(OptimisticTimestamp $entity) { - $q = $this->_em->createQuery('SELECT t FROM Doctrine\Tests\ORM\Functional\Locking\OptimisticTimestamp t WHERE t.id = :id'); + $q = $this->em->createQuery('SELECT t FROM Doctrine\Tests\ORM\Functional\Locking\OptimisticTimestamp t WHERE t.id = :id'); $q->setParameter('id', $entity->id); @@ -212,9 +212,9 @@ public function testOptimisticTimestampFailureThrowsException(OptimisticTimestam self::assertInstanceOf('DateTime', $test->version); // Manually increment the version datetime column - $format = $this->_em->getConnection()->getDatabasePlatform()->getDateTimeFormatString(); + $format = $this->em->getConnection()->getDatabasePlatform()->getDateTimeFormatString(); - $this->_conn->executeQuery('UPDATE optimistic_timestamp SET version = ? WHERE id = ?', [date($format, strtotime($test->version->format($format)) + 3600), $test->id] + $this->conn->executeQuery('UPDATE optimistic_timestamp SET version = ? WHERE id = ?', [date($format, strtotime($test->version->format($format)) + 3600), $test->id] ); // Try and update the record and it should throw an exception @@ -222,7 +222,7 @@ public function testOptimisticTimestampFailureThrowsException(OptimisticTimestam $test->name = 'Testing again'; try { - $this->_em->flush(); + $this->em->flush(); } catch (OptimisticLockException $e) { $caughtException = $e; } @@ -237,7 +237,7 @@ public function testOptimisticTimestampFailureThrowsException(OptimisticTimestam */ public function testOptimisticTimestampLockFailureThrowsException(OptimisticTimestamp $entity) { - $q = $this->_em->createQuery('SELECT t FROM Doctrine\Tests\ORM\Functional\Locking\OptimisticTimestamp t WHERE t.id = :id'); + $q = $this->em->createQuery('SELECT t FROM Doctrine\Tests\ORM\Functional\Locking\OptimisticTimestamp t WHERE t.id = :id'); $q->setParameter('id', $entity->id); @@ -251,7 +251,7 @@ public function testOptimisticTimestampLockFailureThrowsException(OptimisticTime try { $expectedVersionExpired = DateTime::createFromFormat('U', $test->version->getTimestamp()-3600); - $this->_em->lock($test, LockMode::OPTIMISTIC, $expectedVersionExpired); + $this->em->lock($test, LockMode::OPTIMISTIC, $expectedVersionExpired); } catch (OptimisticLockException $e) { $caughtException = $e; } diff --git a/tests/Doctrine/Tests/ORM/Functional/ManyToManyBasicAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/ManyToManyBasicAssociationTest.php index 0ed3a80564c..4481a92a389 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ManyToManyBasicAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ManyToManyBasicAssociationTest.php @@ -32,7 +32,7 @@ public function testUnsetManyToMany() unset($user->groups[0]->users[0]); // inverse side unset($user->groups[0]); // owning side! - $this->_em->flush(); + $this->em->flush(); // Check that the link in the association table has been deleted self::assertGblancoGroupCountIs(0); @@ -41,23 +41,23 @@ public function testUnsetManyToMany() public function testBasicManyToManyJoin() { $user = $this->addCmsUserGblancoWithGroups(1); - $this->_em->clear(); + $this->em->clear(); - self::assertEquals(0, $this->_em->getUnitOfWork()->size()); + self::assertEquals(0, $this->em->getUnitOfWork()->size()); - $query = $this->_em->createQuery("select u, g from Doctrine\Tests\Models\CMS\CmsUser u join u.groups g"); + $query = $this->em->createQuery("select u, g from Doctrine\Tests\Models\CMS\CmsUser u join u.groups g"); $result = $query->getResult(); - self::assertEquals(2, $this->_em->getUnitOfWork()->size()); + self::assertEquals(2, $this->em->getUnitOfWork()->size()); self::assertInstanceOf(CmsUser::class, $result[0]); self::assertEquals('Guilherme', $result[0]->name); self::assertEquals(1, $result[0]->getGroups()->count()); $groups = $result[0]->getGroups(); self::assertEquals('Developers_0', $groups[0]->getName()); - self::assertEquals(UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($result[0])); - self::assertEquals(UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($groups[0])); + self::assertEquals(UnitOfWork::STATE_MANAGED, $this->em->getUnitOfWork()->getEntityState($result[0])); + self::assertEquals(UnitOfWork::STATE_MANAGED, $this->em->getUnitOfWork()->getEntityState($groups[0])); self::assertInstanceOf(PersistentCollection::class, $groups); self::assertInstanceOf(PersistentCollection::class, $groups[0]->getUsers()); @@ -65,19 +65,19 @@ public function testBasicManyToManyJoin() $groups[0]->getUsers()->clear(); $groups->clear(); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery("select u, g from Doctrine\Tests\Models\CMS\CmsUser u join u.groups g"); + $query = $this->em->createQuery("select u, g from Doctrine\Tests\Models\CMS\CmsUser u join u.groups g"); self::assertEquals(0, count($query->getResult())); } public function testManyToManyAddRemove() { $user = $this->addCmsUserGblancoWithGroups(2); - $this->_em->clear(); + $this->em->clear(); - $uRep = $this->_em->getRepository(get_class($user)); + $uRep = $this->em->getRepository(get_class($user)); // Get user $user = $uRep->findOneById($user->getId()); @@ -95,8 +95,8 @@ public function testManyToManyAddRemove() unset($user->groups[0]); //$user->getGroups()->remove(0); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); // Reload same user $user2 = $uRep->findOneById($user->getId()); @@ -115,13 +115,13 @@ public function testManyToManyInverseSideIgnored() // modify directly, addUser() would also (properly) set the owning side $group->users[] = $user; - $this->_em->persist($user); - $this->_em->persist($group); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->persist($group); + $this->em->flush(); + $this->em->clear(); // Association should not exist - $user2 = $this->_em->find(get_class($user), $user->getId()); + $user2 = $this->em->find(get_class($user), $user->getId()); self::assertNotNull($user2, "Has to return exactly one entry."); self::assertEquals(0, $user2->getGroups()->count()); @@ -136,7 +136,7 @@ public function testManyToManyCollectionClearing() $user->groups->clear(); - $this->_em->flush(); + $this->em->flush(); // Check that the links in the association table have been deleted self::assertGblancoGroupCountIs(0); @@ -158,7 +158,7 @@ public function testManyToManyCollectionClearAndAdd() self::assertEquals($groupCount, count($user->groups), "There should be 10 groups in the collection."); - $this->_em->flush(); + $this->em->flush(); self::assertGblancoGroupCountIs($groupCount); } @@ -171,7 +171,7 @@ public function assertGblancoGroupCountIs($expectedGroupCount) $countDql = "SELECT count(g.id) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.groups g WHERE u.username = 'gblanco'"; self::assertEquals( $expectedGroupCount, - $this->_em->createQuery($countDql)->getSingleScalarResult(), + $this->em->createQuery($countDql)->getSingleScalarResult(), "Failed to verify that CmsUser with username 'gblanco' has a group count of 10 with a DQL count query." ); } @@ -182,28 +182,28 @@ public function testRetrieveManyToManyAndAddMore() $group = new CmsGroup(); $group->name = 'Developers_Fresh'; - $this->_em->persist($group); - $this->_em->flush(); + $this->em->persist($group); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); /* @var $freshUser CmsUser */ - $freshUser = $this->_em->find(CmsUser::class, $user->getId()); + $freshUser = $this->em->find(CmsUser::class, $user->getId()); $newGroup = new CmsGroup(); $newGroup->setName('12Monkeys'); $freshUser->addGroup($newGroup); self::assertFalse($freshUser->groups->isInitialized(), "CmsUser::groups Collection has to be uninitialized for this test."); - $this->_em->flush(); + $this->em->flush(); self::assertFalse($freshUser->groups->isInitialized(), "CmsUser::groups Collection has to be uninitialized for this test."); self::assertEquals(3, count($freshUser->getGroups())); self::assertEquals(3, count($freshUser->getGroups()->getSnapshot()), "Snapshot of CmsUser::groups should contain 3 entries."); - $this->_em->clear(); + $this->em->clear(); - $freshUser = $this->_em->find(CmsUser::class, $user->getId()); + $freshUser = $this->em->find(CmsUser::class, $user->getId()); self::assertEquals(3, count($freshUser->getGroups())); } @@ -215,10 +215,10 @@ public function testRemoveUserWithManyGroups() $user = $this->addCmsUserGblancoWithGroups(2); $userId = $user->getId(); - $this->_em->remove($user); - $this->_em->flush(); + $this->em->remove($user); + $this->em->flush(); - $newUser = $this->_em->find(get_class($user), $userId); + $newUser = $this->em->find(get_class($user), $userId); self::assertNull($newUser); } @@ -230,12 +230,12 @@ public function testRemoveGroupWithUser() $user = $this->addCmsUserGblancoWithGroups(2); foreach ($user->getGroups() AS $group) { - $this->_em->remove($group); + $this->em->remove($group); } - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $newUser = $this->_em->find(get_class($user), $user->getId()); + $newUser = $this->em->find(get_class($user), $user->getId()); self::assertEquals(0, count($newUser->getGroups())); } @@ -244,10 +244,10 @@ public function testDereferenceCollectionDelete() $user = $this->addCmsUserGblancoWithGroups(2); $user->groups = null; - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $newUser = $this->_em->find(get_class($user), $user->getId()); + $newUser = $this->em->find(get_class($user), $user->getId()); self::assertEquals(0, count($newUser->getGroups())); } @@ -259,12 +259,12 @@ public function testWorkWithDqlHydratedEmptyCollection() $user = $this->addCmsUserGblancoWithGroups(0); $group = new CmsGroup(); $group->name = "Developers0"; - $this->_em->persist($group); + $this->em->persist($group); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $newUser = $this->_em->createQuery('SELECT u, g FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.groups g WHERE u.id = ?1') + $newUser = $this->em->createQuery('SELECT u, g FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.groups g WHERE u.id = ?1') ->setParameter(1, $user->getId()) ->getSingleResult(); self::assertEquals(0, count($newUser->groups)); @@ -272,10 +272,10 @@ public function testWorkWithDqlHydratedEmptyCollection() $newUser->addGroup($group); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $newUser = $this->_em->find(get_class($user), $user->getId()); + $newUser = $this->em->find(get_class($user), $user->getId()); self::assertEquals(1, count($newUser->groups)); } @@ -296,14 +296,23 @@ public function addCmsUserGblancoWithGroups($groupCount = 1) $user->addGroup($group); } - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); self::assertNotNull($user->getId(), "User 'gblanco' should have an ID assigned after the persist()/flush() operation."); return $user; } + /** + * @group DDC-980 + */ + public function testUpdateDeleteSizeSubselectQueries() + { + $this->em->createQuery("DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE SIZE(u.groups) = 10")->execute(); + $this->em->createQuery("UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.status = 'inactive' WHERE SIZE(u.groups) = 10")->execute(); + } + /** * @group DDC-978 */ @@ -315,23 +324,23 @@ public function testClearAndResetCollection() $group2 = new CmsGroup; $group2->name = 'Developers_New2'; - $this->_em->persist($group1); - $this->_em->persist($group2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($group1); + $this->em->persist($group2); + $this->em->flush(); + $this->em->clear(); - $user = $this->_em->find(get_class($user), $user->id); + $user = $this->em->find(get_class($user), $user->id); $coll = new ArrayCollection([$group1, $group2]); $user->groups = $coll; - $this->_em->flush(); + $this->em->flush(); self::assertInstanceOf(PersistentCollection::class, $user->groups, "UnitOfWork should have replaced ArrayCollection with PersistentCollection."); - $this->_em->flush(); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); - $user = $this->_em->find(get_class($user), $user->id); + $user = $this->em->find(get_class($user), $user->id); self::assertEquals(2, count($user->groups)); self::assertEquals('Developers_New1', $user->groups[0]->name); self::assertEquals('Developers_New2', $user->groups[1]->name); @@ -343,12 +352,12 @@ public function testClearAndResetCollection() public function testInitializePersistentCollection() { $user = $this->addCmsUserGblancoWithGroups(2); - $this->_em->clear(); + $this->em->clear(); - $user = $this->_em->find(get_class($user), $user->id); + $user = $this->em->find(get_class($user), $user->id); self::assertFalse($user->groups->isInitialized(), "Pre-condition: lazy collection"); - $this->_em->getUnitOfWork()->initializeObject($user->groups); + $this->em->getUnitOfWork()->initializeObject($user->groups); self::assertTrue($user->groups->isInitialized(), "Collection should be initialized after calling UnitOfWork::initializeObject()"); } @@ -360,15 +369,15 @@ public function testClearBeforeLazyLoad() { $user = $this->addCmsUserGblancoWithGroups(4); - $this->_em->clear(); + $this->em->clear(); - $user = $this->_em->find(get_class($user), $user->id); + $user = $this->em->find(get_class($user), $user->id); $user->groups->clear(); self::assertEquals(0, count($user->groups)); - $this->_em->flush(); + $this->em->flush(); - $user = $this->_em->find(get_class($user), $user->id); + $user = $this->em->find(get_class($user), $user->id); self::assertEquals(0, count($user->groups)); } @@ -391,12 +400,12 @@ public function testManyToManyOrderByIsNotIgnored() $user->addGroup($group2); $user->addGroup($group3); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); - $user = $this->_em->find(get_class($user), $user->id); + $user = $this->em->find(get_class($user), $user->id); $criteria = Criteria::create() ->orderBy(['name' => Criteria::ASC]); @@ -435,12 +444,12 @@ public function testManyToManyOrderByHonorsFieldNameColumnNameAliases() $user->addTag($tag2); $user->addTag($tag3); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); - $user = $this->_em->find(get_class($user), $user->id); + $user = $this->em->find(get_class($user), $user->id); $criteria = Criteria::create() ->orderBy(['name' => Criteria::ASC]); @@ -460,9 +469,9 @@ public function testManyToManyOrderByHonorsFieldNameColumnNameAliases() public function testMatchingWithLimit() { $user = $this->addCmsUserGblancoWithGroups(2); - $this->_em->clear(); + $this->em->clear(); - $user = $this->_em->find(get_class($user), $user->id); + $user = $this->em->find(get_class($user), $user->id); $groups = $user->groups; self::assertFalse($user->groups->isInitialized(), "Pre-condition: lazy collection"); @@ -478,9 +487,9 @@ public function testMatchingWithLimit() public function testMatchingWithOffset() { $user = $this->addCmsUserGblancoWithGroups(2); - $this->_em->clear(); + $this->em->clear(); - $user = $this->_em->find(get_class($user), $user->id); + $user = $this->em->find(get_class($user), $user->id); $groups = $user->groups; self::assertFalse($user->groups->isInitialized(), "Pre-condition: lazy collection"); @@ -499,9 +508,9 @@ public function testMatchingWithOffset() public function testMatchingWithLimitAndOffset() { $user = $this->addCmsUserGblancoWithGroups(5); - $this->_em->clear(); + $this->em->clear(); - $user = $this->_em->find(get_class($user), $user->id); + $user = $this->em->find(get_class($user), $user->id); $groups = $user->groups; self::assertFalse($user->groups->isInitialized(), "Pre-condition: lazy collection"); @@ -523,9 +532,9 @@ public function testMatchingWithLimitAndOffset() public function testMatching() { $user = $this->addCmsUserGblancoWithGroups(2); - $this->_em->clear(); + $this->em->clear(); - $user = $this->_em->find(get_class($user), $user->id); + $user = $this->em->find(get_class($user), $user->id); $groups = $user->groups; self::assertFalse($user->groups->isInitialized(), "Pre-condition: lazy collection"); diff --git a/tests/Doctrine/Tests/ORM/Functional/ManyToManyBidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/ManyToManyBidirectionalAssociationTest.php index f00376db0fd..82bc92639e2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ManyToManyBidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ManyToManyBidirectionalAssociationTest.php @@ -13,9 +13,9 @@ */ class ManyToManyBidirectionalAssociationTest extends AbstractManyToManyAssociationTestCase { - protected $_firstField = 'product_id'; - protected $_secondField = 'category_id'; - protected $_table = 'ecommerce_products_categories'; + protected $firstField = 'product_id'; + protected $secondField = 'category_id'; + protected $table = 'ecommerce_products_categories'; private $firstProduct; private $secondProduct; private $firstCategory; @@ -24,13 +24,18 @@ class ManyToManyBidirectionalAssociationTest extends AbstractManyToManyAssociati protected function setUp() { $this->useModelSet('ecommerce'); + parent::setUp(); + $this->firstProduct = new ECommerceProduct(); $this->firstProduct->setName("First Product"); + $this->secondProduct = new ECommerceProduct(); $this->secondProduct->setName("Second Product"); + $this->firstCategory = new ECommerceCategory(); $this->firstCategory->setName("Business"); + $this->secondCategory = new ECommerceCategory(); $this->secondCategory->setName("Home"); } @@ -39,8 +44,9 @@ public function testSavesAManyToManyAssociationWithCascadeSaveSet() { $this->firstProduct->addCategory($this->firstCategory); $this->firstProduct->addCategory($this->secondCategory); - $this->_em->persist($this->firstProduct); - $this->_em->flush(); + + $this->em->persist($this->firstProduct); + $this->em->flush(); self::assertForeignKeysContain($this->firstProduct->getId(), $this->firstCategory->getId()); self::assertForeignKeysContain($this->firstProduct->getId(), $this->secondCategory->getId()); @@ -50,75 +56,93 @@ public function testRemovesAManyToManyAssociation() { $this->firstProduct->addCategory($this->firstCategory); $this->firstProduct->addCategory($this->secondCategory); - $this->_em->persist($this->firstProduct); + + $this->em->persist($this->firstProduct); + $this->firstProduct->removeCategory($this->firstCategory); - $this->_em->flush(); + $this->em->flush(); self::assertForeignKeysNotContain($this->firstProduct->getId(), $this->firstCategory->getId()); self::assertForeignKeysContain($this->firstProduct->getId(), $this->secondCategory->getId()); $this->firstProduct->getCategories()->remove(1); - $this->_em->flush(); + + $this->em->flush(); self::assertForeignKeysNotContain($this->firstProduct->getId(), $this->secondCategory->getId()); } public function testEagerLoadFromInverseSideAndLazyLoadFromOwningSide() { - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); - $this->_createLoadingFixture(); - $categories = $this->_findCategories(); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + $this->createLoadingFixture(); + + $categories = $this->findCategories(); + self::assertLazyLoadFromOwningSide($categories); } public function testEagerLoadFromOwningSideAndLazyLoadFromInverseSide() { - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); - $this->_createLoadingFixture(); - $products = $this->_findProducts(); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + $this->createLoadingFixture(); + + $products = $this->findProducts(); + self::assertLazyLoadFromInverseSide($products); } - private function _createLoadingFixture() + private function createLoadingFixture() { $this->firstProduct->addCategory($this->firstCategory); $this->firstProduct->addCategory($this->secondCategory); + $this->secondProduct->addCategory($this->firstCategory); $this->secondProduct->addCategory($this->secondCategory); - $this->_em->persist($this->firstProduct); - $this->_em->persist($this->secondProduct); + + $this->em->persist($this->firstProduct); + $this->em->persist($this->secondProduct); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } - protected function _findProducts() + protected function findProducts() { - $query = $this->_em->createQuery('SELECT p, c FROM Doctrine\Tests\Models\ECommerce\ECommerceProduct p LEFT JOIN p.categories c ORDER BY p.id, c.id'); + $query = $this->em->createQuery('SELECT p, c FROM Doctrine\Tests\Models\ECommerce\ECommerceProduct p LEFT JOIN p.categories c ORDER BY p.id, c.id'); //$query->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true); + $result = $query->getResult(); + self::assertEquals(2, count($result)); + $cats1 = $result[0]->getCategories(); $cats2 = $result[1]->getCategories(); + self::assertTrue($cats1->isInitialized()); self::assertTrue($cats2->isInitialized()); + self::assertFalse($cats1[0]->getProducts()->isInitialized()); self::assertFalse($cats2[0]->getProducts()->isInitialized()); return $result; } - protected function _findCategories() + protected function findCategories() { - $query = $this->_em->createQuery('SELECT c, p FROM Doctrine\Tests\Models\ECommerce\ECommerceCategory c LEFT JOIN c.products p ORDER BY c.id, p.id'); + $query = $this->em->createQuery('SELECT c, p FROM Doctrine\Tests\Models\ECommerce\ECommerceCategory c LEFT JOIN c.products p ORDER BY c.id, p.id'); //$query->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true); + $result = $query->getResult(); + self::assertEquals(2, count($result)); self::assertInstanceOf(ECommerceCategory::class, $result[0]); self::assertInstanceOf(ECommerceCategory::class, $result[1]); + $prods1 = $result[0]->getProducts(); $prods2 = $result[1]->getProducts(); + self::assertTrue($prods1->isInitialized()); self::assertTrue($prods2->isInitialized()); diff --git a/tests/Doctrine/Tests/ORM/Functional/ManyToManyEventTest.php b/tests/Doctrine/Tests/ORM/Functional/ManyToManyEventTest.php index cd348c5adbb..e7ed7c80fd4 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ManyToManyEventTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ManyToManyEventTest.php @@ -24,22 +24,22 @@ protected function setUp() $this->useModelSet('cms'); parent::setUp(); $this->listener = new PostUpdateListener(); - $evm = $this->_em->getEventManager(); + $evm = $this->em->getEventManager(); $evm->addEventListener(Events::postUpdate, $this->listener); } public function testListenerShouldBeNotifiedOnlyWhenUpdating() { $user = $this->createNewValidUser(); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); self::assertFalse($this->listener->wasNotified); $group = new CmsGroup(); $group->name = "admins"; $user->addGroup($group); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); self::assertTrue($this->listener->wasNotified); } diff --git a/tests/Doctrine/Tests/ORM/Functional/ManyToManySelfReferentialAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/ManyToManySelfReferentialAssociationTest.php index e0c1335db5a..518187fd498 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ManyToManySelfReferentialAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ManyToManySelfReferentialAssociationTest.php @@ -14,9 +14,9 @@ */ class ManyToManySelfReferentialAssociationTest extends AbstractManyToManyAssociationTestCase { - protected $_firstField = 'product_id'; - protected $_secondField = 'related_id'; - protected $_table = 'ecommerce_products_related'; + protected $firstField = 'product_id'; + protected $secondField = 'related_id'; + protected $table = 'ecommerce_products_related'; private $firstProduct; private $secondProduct; private $firstRelated; @@ -38,8 +38,8 @@ public function testSavesAManyToManyAssociationWithCascadeSaveSet() { $this->firstProduct->addRelated($this->firstRelated); $this->firstProduct->addRelated($this->secondRelated); - $this->_em->persist($this->firstProduct); - $this->_em->flush(); + $this->em->persist($this->firstProduct); + $this->em->flush(); self::assertForeignKeysContain($this->firstProduct->getId(), $this->firstRelated->getId()); @@ -51,10 +51,10 @@ public function testRemovesAManyToManyAssociation() { $this->firstProduct->addRelated($this->firstRelated); $this->firstProduct->addRelated($this->secondRelated); - $this->_em->persist($this->firstProduct); + $this->em->persist($this->firstProduct); $this->firstProduct->removeRelated($this->firstRelated); - $this->_em->flush(); + $this->em->flush(); self::assertForeignKeysNotContain($this->firstProduct->getId(), $this->firstRelated->getId()); @@ -64,19 +64,19 @@ public function testRemovesAManyToManyAssociation() public function testEagerLoadsOwningSide() { - $this->_createLoadingFixture(); - $products = $this->_findProducts(); + $this->createLoadingFixture(); + $products = $this->findProducts(); self::assertLoadingOfOwningSide($products); } public function testLazyLoadsOwningSide() { - $this->_createLoadingFixture(); + $this->createLoadingFixture(); - $metadata = $this->_em->getClassMetadata(ECommerceProduct::class); + $metadata = $this->em->getClassMetadata(ECommerceProduct::class); $metadata->associationMappings['related']['fetch'] = FetchMode::LAZY; - $query = $this->_em->createQuery('SELECT p FROM Doctrine\Tests\Models\ECommerce\ECommerceProduct p'); + $query = $this->em->createQuery('SELECT p FROM Doctrine\Tests\Models\ECommerce\ECommerceProduct p'); $products = $query->getResult(); self::assertLoadingOfOwningSide($products); } @@ -102,22 +102,22 @@ public function assertLoadingOfOwningSide($products) self::assertCollectionEquals($firstRelatedBy, $secondRelatedBy); } - protected function _createLoadingFixture() + protected function createLoadingFixture() { $this->firstProduct->addRelated($this->firstRelated); $this->firstProduct->addRelated($this->secondRelated); $this->secondProduct->addRelated($this->firstRelated); $this->secondProduct->addRelated($this->secondRelated); - $this->_em->persist($this->firstProduct); - $this->_em->persist($this->secondProduct); + $this->em->persist($this->firstProduct); + $this->em->persist($this->secondProduct); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } - protected function _findProducts() + protected function findProducts() { - $query = $this->_em->createQuery('SELECT p, r FROM Doctrine\Tests\Models\ECommerce\ECommerceProduct p LEFT JOIN p.related r ORDER BY p.id, r.id'); + $query = $this->em->createQuery('SELECT p, r FROM Doctrine\Tests\Models\ECommerce\ECommerceProduct p LEFT JOIN p.related r ORDER BY p.id, r.id'); return $query->getResult(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php index 7d866f18781..f7d8f8e0d4e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php @@ -14,9 +14,9 @@ */ class ManyToManyUnidirectionalAssociationTest extends AbstractManyToManyAssociationTestCase { - protected $_firstField = 'cart_id'; - protected $_secondField = 'product_id'; - protected $_table = 'ecommerce_carts_products'; + protected $firstField = 'cart_id'; + protected $secondField = 'product_id'; + protected $table = 'ecommerce_carts_products'; private $firstProduct; private $secondProduct; private $firstCart; @@ -38,8 +38,8 @@ public function testSavesAManyToManyAssociationWithCascadeSaveSet() { $this->firstCart->addProduct($this->firstProduct); $this->firstCart->addProduct($this->secondProduct); - $this->_em->persist($this->firstCart); - $this->_em->flush(); + $this->em->persist($this->firstCart); + $this->em->flush(); self::assertForeignKeysContain($this->firstCart->getId(), $this->firstProduct->getId()); self::assertForeignKeysContain($this->firstCart->getId(), $this->secondProduct->getId()); @@ -49,10 +49,10 @@ public function testRemovesAManyToManyAssociation() { $this->firstCart->addProduct($this->firstProduct); $this->firstCart->addProduct($this->secondProduct); - $this->_em->persist($this->firstCart); + $this->em->persist($this->firstCart); $this->firstCart->removeProduct($this->firstProduct); - $this->_em->flush(); + $this->em->flush(); self::assertForeignKeysNotContain($this->firstCart->getId(), $this->firstProduct->getId()); self::assertForeignKeysContain($this->firstCart->getId(), $this->secondProduct->getId()); @@ -60,9 +60,9 @@ public function testRemovesAManyToManyAssociation() public function testEagerLoad() { - $this->_createFixture(); + $this->createFixture(); - $query = $this->_em->createQuery('SELECT c, p FROM Doctrine\Tests\Models\ECommerce\ECommerceCart c LEFT JOIN c.products p ORDER BY c.id, p.id'); + $query = $this->em->createQuery('SELECT c, p FROM Doctrine\Tests\Models\ECommerce\ECommerceCart c LEFT JOIN c.products p ORDER BY c.id, p.id'); $result = $query->getResult(); $firstCart = $result[0]; $products = $firstCart->getProducts(); @@ -77,11 +77,11 @@ public function testEagerLoad() public function testLazyLoadsCollection() { - $this->_createFixture(); - $metadata = $this->_em->getClassMetadata(ECommerceCart::class); + $this->createFixture(); + $metadata = $this->em->getClassMetadata(ECommerceCart::class); $metadata->associationMappings['products']['fetch'] = FetchMode::LAZY; - $query = $this->_em->createQuery('SELECT c FROM Doctrine\Tests\Models\ECommerce\ECommerceCart c'); + $query = $this->em->createQuery('SELECT c FROM Doctrine\Tests\Models\ECommerce\ECommerceCart c'); $result = $query->getResult(); $firstCart = $result[0]; $products = $firstCart->getProducts(); @@ -92,16 +92,16 @@ public function testLazyLoadsCollection() self::assertCollectionEquals($products, $secondCart->getProducts()); } - private function _createFixture() + private function createFixture() { $this->firstCart->addProduct($this->firstProduct); $this->firstCart->addProduct($this->secondProduct); $this->secondCart->addProduct($this->firstProduct); $this->secondCart->addProduct($this->secondProduct); - $this->_em->persist($this->firstCart); - $this->_em->persist($this->secondCart); + $this->em->persist($this->firstCart); + $this->em->persist($this->secondCart); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/MappedSuperclassTest.php b/tests/Doctrine/Tests/ORM/Functional/MappedSuperclassTest.php index 44f84bc07eb..07e0876cb66 100644 --- a/tests/Doctrine/Tests/ORM/Functional/MappedSuperclassTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/MappedSuperclassTest.php @@ -34,14 +34,14 @@ public function testCRUD() $file = new File($directory); $file->setName('test-b.html'); - $this->_em->persist($root); - $this->_em->persist($directory); - $this->_em->persist($file); + $this->em->persist($root); + $this->em->persist($directory); + $this->em->persist($file); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $cleanFile = $this->_em->find(File::class, $file->getId()); + $cleanFile = $this->em->find(File::class, $file->getId()); self::assertInstanceOf(Directory::class, $cleanFile->getParent()); self::assertInstanceOf(Proxy::class, $cleanFile->getParent()); diff --git a/tests/Doctrine/Tests/ORM/Functional/MergeCompositeToOneKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/MergeCompositeToOneKeyTest.php index 6e479dedee5..a8f61791349 100644 --- a/tests/Doctrine/Tests/ORM/Functional/MergeCompositeToOneKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/MergeCompositeToOneKeyTest.php @@ -15,10 +15,10 @@ protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(Country::class), - $this->_em->getClassMetadata(CompositeToOneKeyState::class), + $this->em->getClassMetadata(Country::class), + $this->em->getClassMetadata(CompositeToOneKeyState::class), ] ); } @@ -37,7 +37,7 @@ public function testMergingOfEntityWithCompositeIdentifierContainingToOneAssocia $state->country = $country; /* @var $merged CompositeToOneKeyState */ - $merged = $this->_em->merge($state); + $merged = $this->em->merge($state); self::assertInstanceOf(CompositeToOneKeyState::class, $state); self::assertNotSame($state, $merged); diff --git a/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php b/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php index 19de0b6ac30..fcdb6a7ae64 100644 --- a/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php @@ -32,13 +32,13 @@ protected function setUp() */ public function testMergeDetachedUnInitializedProxy() { - $detachedUninitialized = $this->_em->getReference(DateTimeModel::class, 123); + $detachedUninitialized = $this->em->getReference(DateTimeModel::class, 123); - $this->_em->clear(); + $this->em->clear(); - $managed = $this->_em->getReference(DateTimeModel::class, 123); + $managed = $this->em->getReference(DateTimeModel::class, 123); - self::assertSame($managed, $this->_em->merge($detachedUninitialized)); + self::assertSame($managed, $this->em->merge($detachedUninitialized)); self::assertFalse($managed->__isInitialized()); self::assertFalse($detachedUninitialized->__isInitialized()); @@ -52,15 +52,15 @@ public function testMergeDetachedUnInitializedProxy() */ public function testMergeUnserializedUnInitializedProxy() { - $detachedUninitialized = $this->_em->getReference(DateTimeModel::class, 123); + $detachedUninitialized = $this->em->getReference(DateTimeModel::class, 123); - $this->_em->clear(); + $this->em->clear(); - $managed = $this->_em->getReference(DateTimeModel::class, 123); + $managed = $this->em->getReference(DateTimeModel::class, 123); self::assertSame( $managed, - $this->_em->merge(unserialize(serialize($this->_em->merge($detachedUninitialized)))) + $this->em->merge(unserialize(serialize($this->em->merge($detachedUninitialized)))) ); self::assertFalse($managed->__isInitialized()); @@ -75,9 +75,9 @@ public function testMergeUnserializedUnInitializedProxy() */ public function testMergeManagedProxy() { - $managed = $this->_em->getReference(DateTimeModel::class, 123); + $managed = $this->em->getReference(DateTimeModel::class, 123); - self::assertSame($managed, $this->_em->merge($managed)); + self::assertSame($managed, $this->em->merge($managed)); self::assertFalse($managed->__isInitialized()); } @@ -95,18 +95,18 @@ public function testMergeWithExistingUninitializedManagedProxy() { $date = new DateTimeModel(); - $this->_em->persist($date); - $this->_em->flush($date); - $this->_em->clear(); + $this->em->persist($date); + $this->em->flush($date); + $this->em->clear(); - $managed = $this->_em->getReference(DateTimeModel::class, $date->id); + $managed = $this->em->getReference(DateTimeModel::class, $date->id); self::assertInstanceOf(Proxy::class, $managed); self::assertFalse($managed->__isInitialized()); $date->date = $dateTime = new \DateTime(); - self::assertSame($managed, $this->_em->merge($date)); + self::assertSame($managed, $this->em->merge($date)); self::assertTrue($managed->__isInitialized()); self::assertSame($dateTime, $managed->date, 'Data was merged into the proxy after initialization'); } diff --git a/tests/Doctrine/Tests/ORM/Functional/MergeSharedEntitiesTest.php b/tests/Doctrine/Tests/ORM/Functional/MergeSharedEntitiesTest.php index 49921df6563..72dc5a1b855 100644 --- a/tests/Doctrine/Tests/ORM/Functional/MergeSharedEntitiesTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/MergeSharedEntitiesTest.php @@ -15,10 +15,10 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(MSEFile::class), - $this->_em->getClassMetadata(MSEPicture::class), + $this->em->getClassMetadata(MSEFile::class), + $this->em->getClassMetadata(MSEPicture::class), ] ); } catch (ToolsException $ignored) { @@ -33,7 +33,7 @@ public function testMergeSharedNewEntities() $picture->file = $file; $picture->otherFile = $file; - $picture = $this->_em->merge($picture); + $picture = $this->em->merge($picture); self::assertEquals($picture->file, $picture->otherFile, 'Identical entities must remain identical'); } @@ -46,12 +46,12 @@ public function testMergeSharedManagedEntities() $picture->file = $file; $picture->otherFile = $file; - $this->_em->persist($file); - $this->_em->persist($picture); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($file); + $this->em->persist($picture); + $this->em->flush(); + $this->em->clear(); - $picture = $this->_em->merge($picture); + $picture = $this->em->merge($picture); self::assertEquals($picture->file, $picture->otherFile, 'Identical entities must remain identical'); } @@ -66,12 +66,12 @@ public function testMergeSharedDetachedSerializedEntities() $serializedPicture = serialize($picture); - $this->_em->persist($file); - $this->_em->persist($picture); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($file); + $this->em->persist($picture); + $this->em->flush(); + $this->em->clear(); - $picture = $this->_em->merge(unserialize($serializedPicture)); + $picture = $this->em->merge(unserialize($serializedPicture)); self::assertEquals($picture->file, $picture->otherFile, 'Identical entities must remain identical'); } @@ -87,11 +87,11 @@ public function testMergeInheritedTransientPrivateProperties() $admin1->id = 123; $admin2->id = 123; - $this->_em->persist($admin1); + $this->em->persist($admin1); $admin2->setSession('zeh current session data'); - self::assertSame($admin1, $this->_em->merge($admin2)); + self::assertSame($admin1, $this->em->merge($admin2)); self::assertSame('zeh current session data', $admin1->getSession()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/MergeVersionedManyToOneTest.php b/tests/Doctrine/Tests/ORM/Functional/MergeVersionedManyToOneTest.php index 82b9c207591..89790a43940 100644 --- a/tests/Doctrine/Tests/ORM/Functional/MergeVersionedManyToOneTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/MergeVersionedManyToOneTest.php @@ -30,15 +30,15 @@ public function testSetVersionOnCreate() $article->name = 'Article'; $article->category = $category; - $this->_em->persist($article); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($article); + $this->em->flush(); + $this->em->clear(); - $articleMerged = $this->_em->merge($article); + $articleMerged = $this->em->merge($article); $articleMerged->name = 'Article Merged'; - $this->_em->flush(); + $this->em->flush(); self::assertEquals(2, $articleMerged->version); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php b/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php index 3578460a984..67db17f38db 100644 --- a/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php @@ -35,9 +35,10 @@ protected function setUp() { $this->useModelSet('cms'); $this->useModelSet('company'); + parent::setUp(); - $this->platform = $this->_em->getConnection()->getDatabasePlatform(); + $this->platform = $this->em->getConnection()->getDatabasePlatform(); } public function testBasicNativeQuery() @@ -48,9 +49,9 @@ public function testBasicNativeQuery() $user->username = 'romanb'; $user->status = 'dev'; - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); $rsm = new ResultSetMapping; @@ -58,7 +59,7 @@ public function testBasicNativeQuery() $rsm->addFieldResult('u', $this->platform->getSQLResultCasing('id'), 'id'); $rsm->addFieldResult('u', $this->platform->getSQLResultCasing('name'), 'name'); - $query = $this->_em->createNativeQuery('SELECT id, name FROM cms_users WHERE username = ?', $rsm); + $query = $this->em->createNativeQuery('SELECT id, name FROM cms_users WHERE username = ?', $rsm); $query->setParameter(1, 'romanb'); @@ -85,9 +86,9 @@ public function testBasicNativeQueryWithMetaResult() $user->setAddress($addr); - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); $rsm = new ResultSetMapping; @@ -98,7 +99,7 @@ public function testBasicNativeQueryWithMetaResult() $rsm->addFieldResult('a', $this->platform->getSQLResultCasing('city'), 'city'); $rsm->addMetaResult('a', $this->platform->getSQLResultCasing('user_id'), 'user_id', false, DBALType::getType('integer')); - $query = $this->_em->createNativeQuery('SELECT a.id, a.country, a.zip, a.city, a.user_id FROM cms_addresses a WHERE a.id = ?', $rsm); + $query = $this->em->createNativeQuery('SELECT a.id, a.country, a.zip, a.city, a.user_id FROM cms_addresses a WHERE a.id = ?', $rsm); $query->setParameter(1, $addr->id); @@ -127,9 +128,9 @@ public function testJoinedOneToManyNativeQuery() $user->addPhonenumber($phone); - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); $rsm = new ResultSetMapping; @@ -140,7 +141,7 @@ public function testJoinedOneToManyNativeQuery() $rsm->addJoinedEntityResult(CmsPhonenumber::class, 'p', 'u', 'phonenumbers'); $rsm->addFieldResult('p', $this->platform->getSQLResultCasing('phonenumber'), 'phonenumber'); - $query = $this->_em->createNativeQuery('SELECT id, name, status, phonenumber FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ?', $rsm); + $query = $this->em->createNativeQuery('SELECT id, name, status, phonenumber FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ?', $rsm); $query->setParameter(1, 'romanb'); @@ -175,9 +176,9 @@ public function testJoinedOneToOneNativeQuery() $user->setAddress($addr); - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); $rsm = new ResultSetMapping; @@ -191,7 +192,7 @@ public function testJoinedOneToOneNativeQuery() $rsm->addFieldResult('a', $this->platform->getSQLResultCasing('zip'), 'zip'); $rsm->addFieldResult('a', $this->platform->getSQLResultCasing('city'), 'city'); - $query = $this->_em->createNativeQuery('SELECT u.id, u.name, u.status, a.id AS a_id, a.country, a.zip, a.city FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?', $rsm); + $query = $this->em->createNativeQuery('SELECT u.id, u.name, u.status, a.id AS a_id, a.country, a.zip, a.city FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?', $rsm); $query->setParameter(1, 'romanb'); @@ -218,7 +219,7 @@ public function testFluentInterface() $rsm = new ResultSetMapping; - $q = $this->_em->createNativeQuery('SELECT id, name, status, phonenumber FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ?', $rsm); + $q = $this->em->createNativeQuery('SELECT id, name, status, phonenumber FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ?', $rsm); $q2 = $q->setSQL('foo') ->setResultSetMapping($rsm) ->expireResultCache(true) @@ -245,15 +246,15 @@ public function testJoinedOneToManyNativeQueryWithRSMBuilder() $user->addPhonenumber($phone); - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); - $rsm = new ResultSetMappingBuilder($this->_em); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata(CmsUser::class, 'u'); $rsm->addJoinedEntityFromClassMetadata(CmsPhonenumber::class, 'p', 'u', 'phonenumbers'); - $query = $this->_em->createNativeQuery('SELECT u.*, p.* FROM cms_users u LEFT JOIN cms_phonenumbers p ON u.id = p.user_id WHERE username = ?', $rsm); + $query = $this->em->createNativeQuery('SELECT u.*, p.* FROM cms_users u LEFT JOIN cms_phonenumbers p ON u.id = p.user_id WHERE username = ?', $rsm); $query->setParameter(1, 'romanb'); @@ -271,13 +272,13 @@ public function testJoinedOneToManyNativeQueryWithRSMBuilder() self::assertEquals(424242, $phones[0]->phonenumber); self::assertTrue($phones[0]->getUser() === $users[0]); - $this->_em->clear(); + $this->em->clear(); - $rsm = new ResultSetMappingBuilder($this->_em); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata(CmsPhonenumber::class, 'p'); - $query = $this->_em->createNativeQuery('SELECT p.* FROM cms_phonenumbers p WHERE p.phonenumber = ?', $rsm); + $query = $this->em->createNativeQuery('SELECT p.* FROM cms_phonenumbers p WHERE p.phonenumber = ?', $rsm); $query->setParameter(1, $phone->phonenumber); @@ -303,16 +304,16 @@ public function testJoinedOneToOneNativeQueryWithRSMBuilder() $user->setAddress($addr); - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); - $rsm = new ResultSetMappingBuilder($this->_em); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata(CmsUser::class, 'u'); $rsm->addJoinedEntityFromClassMetadata(CmsAddress::class, 'a', 'u', 'address', ['id' => 'a_id']); - $query = $this->_em->createNativeQuery('SELECT u.*, a.*, a.id AS a_id FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?', $rsm); + $query = $this->em->createNativeQuery('SELECT u.*, a.*, a.id AS a_id FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?', $rsm); $query->setParameter(1, 'romanb'); @@ -329,13 +330,13 @@ public function testJoinedOneToOneNativeQueryWithRSMBuilder() self::assertEquals(10827, $users[0]->getAddress()->getZipCode()); self::assertEquals('Berlin', $users[0]->getAddress()->getCity()); - $this->_em->clear(); + $this->em->clear(); - $rsm = new ResultSetMappingBuilder($this->_em); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata(CmsAddress::class, 'a'); - $query = $this->_em->createNativeQuery('SELECT a.* FROM cms_addresses a WHERE a.id = ?', $rsm); + $query = $this->em->createNativeQuery('SELECT a.* FROM cms_addresses a WHERE a.id = ?', $rsm); $query->setParameter(1, $addr->getId()); @@ -350,7 +351,7 @@ public function testJoinedOneToOneNativeQueryWithRSMBuilder() */ public function testConcreteClassInSingleTableInheritanceSchemaWithRSMBuilderIsFine() { - $rsm = new ResultSetMappingBuilder($this->_em); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata(CompanyFixContract::class, 'c'); @@ -365,7 +366,7 @@ public function testAbstractClassInSingleTableInheritanceSchemaWithRSMBuilderThr $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage('ResultSetMapping builder does not currently support your inheritance scheme.'); - $rsm = new ResultSetMappingBuilder($this->_em); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata(CompanyContract::class, 'c'); } @@ -375,7 +376,7 @@ public function testAbstractClassInSingleTableInheritanceSchemaWithRSMBuilderThr */ public function testRSMBuilderThrowsExceptionOnColumnConflict() { - $rsm = new ResultSetMappingBuilder($this->_em); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata(CmsUser::class, 'u'); $rsm->addJoinedEntityFromClassMetadata(CmsAddress::class, 'a', 'u', 'address'); @@ -386,12 +387,12 @@ public function testRSMBuilderThrowsExceptionOnColumnConflict() */ public function testUnknownParentAliasThrowsException() { - $rsm = new ResultSetMappingBuilder($this->_em); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata(CmsUser::class, 'u'); $rsm->addJoinedEntityFromClassMetadata(CmsAddress::class, 'a', 'un', 'address', ['id' => 'a_id']); - $query = $this->_em->createNativeQuery('SELECT u.*, a.*, a.id AS a_id FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?', $rsm); + $query = $this->em->createNativeQuery('SELECT u.*, a.*, a.id AS a_id FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?', $rsm); $query->setParameter(1, 'romanb'); @@ -421,12 +422,12 @@ public function testBasicNativeNamedQueryWithSqlResultSetMapping() $user->setAddress($addr); - $this->_em->clear(); - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); - $repository = $this->_em->getRepository(CmsAddress::class); + $repository = $this->em->getRepository(CmsAddress::class); $query = $repository->createNativeNamedQuery('find-all'); $result = $query->getResult(); @@ -454,12 +455,12 @@ public function testBasicNativeNamedQueryWithResultClass() $user->setEmail($email); - $this->_em->clear(); - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $result = $repository ->createNativeNamedQuery('fetchIdAndUsernameWithResultClass') ->setParameter(1, 'FabioBatSilva') @@ -472,7 +473,7 @@ public function testBasicNativeNamedQueryWithResultClass() self::assertEquals($user->id, $result[0]->id); self::assertEquals('FabioBatSilva', $result[0]->username); - $this->_em->clear(); + $this->em->clear(); $result = $repository ->createNativeNamedQuery('fetchAllColumns') @@ -505,14 +506,16 @@ public function testJoinedOneToOneNativeNamedQueryWithResultSetMapping() $user->setAddress($addr); - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); + + $repository = $this->em->getRepository(CmsUser::class); - $result = $this->_em->getRepository(CmsUser::class) - ->createNativeNamedQuery('fetchJoinedAddress') - ->setParameter(1, 'FabioBatSilva') - ->getResult(); + $result = $repository + ->createNativeNamedQuery('fetchJoinedAddress') + ->setParameter(1, 'FabioBatSilva') + ->getResult(); self::assertEquals(1, count($result)); self::assertInstanceOf(CmsUser::class, $result[0]); @@ -541,12 +544,12 @@ public function testJoinedOneToManyNativeNamedQueryWithResultSetMapping() $user->addPhonenumber($phone); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $result = $repository->createNativeNamedQuery('fetchJoinedPhonenumber') ->setParameter(1, 'FabioBatSilva')->getResult(); @@ -591,12 +594,12 @@ public function testMixedNativeNamedQueryNormalJoin() $user1->addPhonenumber($phone2); $user2->addPhonenumber($phone3); - $this->_em->persist($user1); - $this->_em->persist($user2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user1); + $this->em->persist($user2); + $this->em->flush(); + $this->em->clear(); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $result = $repository ->createNativeNamedQuery('fetchUserPhonenumberCount') ->setParameter(1, ['test','FabioBatSilva'])->getResult(); @@ -631,12 +634,12 @@ public function testNativeNamedQueryInheritance() $employee->setSalary(100000); $employee->setDepartment('IT'); - $this->_em->persist($person); - $this->_em->persist($employee); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($person); + $this->em->persist($employee); + $this->em->flush(); + $this->em->clear(); - $repository = $this->_em->getRepository(CompanyPerson::class); + $repository = $this->em->getRepository(CompanyPerson::class); $result = $repository ->createNativeNamedQuery('fetchAllWithSqlResultSetMapping') ->getResult(); @@ -649,7 +652,7 @@ public function testNativeNamedQueryInheritance() self::assertEquals('Fabio B. Silva', $result[0]->getName()); self::assertEquals('Fabio Silva', $result[1]->getName()); - $this->_em->clear(); + $this->em->clear(); $result = $repository ->createNativeNamedQuery('fetchAllWithResultClass') @@ -689,13 +692,13 @@ public function testMultipleEntityResults() $user->setAddress($addr); $user->addPhonenumber($phone); - $this->_em->clear(); - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $query = $repository->createNativeNamedQuery('fetchMultipleJoinsEntityResults'); $result = $query->getResult(); @@ -716,8 +719,8 @@ public function testMultipleEntityResults() */ public function testNamedNativeQueryInheritance() { - $contractMetadata = $this->_em->getClassMetadata(CompanyContract::class); - $flexMetadata = $this->_em->getClassMetadata(CompanyFlexContract::class); + $contractMetadata = $this->em->getClassMetadata(CompanyContract::class); + $flexMetadata = $this->em->getClassMetadata(CompanyFlexContract::class); $contractQueries = $contractMetadata->getNamedNativeQueries(); $flexQueries = $flexMetadata->getNamedNativeQueries(); @@ -768,7 +771,7 @@ public function testNamedNativeQueryInheritance() */ public function testGenerateSelectClauseNoRenameSingleEntity() { - $rsm = new ResultSetMappingBuilder($this->_em); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata(CmsUser::class, 'u'); @@ -782,7 +785,7 @@ public function testGenerateSelectClauseNoRenameSingleEntity() */ public function testGenerateSelectClauseCustomRenames() { - $rsm = new ResultSetMappingBuilder($this->_em); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata( CmsUser::class, @@ -803,7 +806,7 @@ public function testGenerateSelectClauseCustomRenames() */ public function testGenerateSelectClauseRenameTableAlias() { - $rsm = new ResultSetMappingBuilder($this->_em); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata(CmsUser::class, 'u'); @@ -817,7 +820,7 @@ public function testGenerateSelectClauseRenameTableAlias() */ public function testGenerateSelectClauseIncrement() { - $rsm = new ResultSetMappingBuilder($this->_em, ResultSetMappingBuilder::COLUMN_RENAMING_INCREMENT); + $rsm = new ResultSetMappingBuilder($this->em, ResultSetMappingBuilder::COLUMN_RENAMING_INCREMENT); $rsm->addRootEntityFromClassMetadata(CmsUser::class, 'u'); @@ -831,7 +834,7 @@ public function testGenerateSelectClauseIncrement() */ public function testGenerateSelectClauseToString() { - $rsm = new ResultSetMappingBuilder($this->_em, ResultSetMappingBuilder::COLUMN_RENAMING_INCREMENT); + $rsm = new ResultSetMappingBuilder($this->em, ResultSetMappingBuilder::COLUMN_RENAMING_INCREMENT); $rsm->addRootEntityFromClassMetadata(CmsUser::class, 'u'); @@ -843,7 +846,7 @@ public function testGenerateSelectClauseToString() */ public function testGenerateSelectClauseWithDiscriminatorColumn() { - $rsm = new ResultSetMappingBuilder($this->_em, ResultSetMappingBuilder::COLUMN_RENAMING_INCREMENT); + $rsm = new ResultSetMappingBuilder($this->em, ResultSetMappingBuilder::COLUMN_RENAMING_INCREMENT); $rsm->addEntityResult(DDC3899User::class, 'u'); $rsm->addJoinedEntityResult(DDC3899FixContract::class, 'c', 'u', 'contracts'); diff --git a/tests/Doctrine/Tests/ORM/Functional/NewOperatorTest.php b/tests/Doctrine/Tests/ORM/Functional/NewOperatorTest.php index 1a418525e94..8f32837d2b3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/NewOperatorTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/NewOperatorTest.php @@ -88,12 +88,12 @@ private function loadFixtures() $u3->phonenumbers[1]->phonenumber = "(33) 2222-2222"; $u3->phonenumbers[2]->phonenumber = "(33) 3333-3333"; - $this->_em->persist($u1); - $this->_em->persist($u2); - $this->_em->persist($u3); + $this->em->persist($u1); + $this->em->persist($u2); + $this->em->persist($u3); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); $this->fixtures = [$u1, $u2, $u3]; } @@ -119,7 +119,7 @@ public function testShouldSupportsBasicUsage($hydrationMode) ORDER BY u.name"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult($hydrationMode); self::assertCount(3, $result); @@ -162,7 +162,7 @@ public function testShouldIgnoreAliasesForSingleObject($hydrationMode) ORDER BY u.name"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult($hydrationMode); self::assertCount(3, $result); @@ -198,7 +198,7 @@ public function testShouldAssumeFromEntityNamespaceWhenNotGiven() ORDER BY u.name"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult(); self::assertCount(3, $result); @@ -223,10 +223,10 @@ public function testShouldSupportFromEntityNamespaceAlias() u.name"; - $this->_em->getConfiguration() + $this->em->getConfiguration() ->addEntityNamespace('cms', 'Doctrine\Tests\Models\CMS'); - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult(); self::assertCount(3, $result); @@ -251,10 +251,10 @@ public function testShouldSupportValueObjectNamespaceAlias() u.name"; - $this->_em->getConfiguration() + $this->em->getConfiguration() ->addEntityNamespace('cms', 'Doctrine\Tests\Models\CMS'); - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult(); self::assertCount(3, $result); @@ -287,7 +287,7 @@ public function testShouldSupportLiteralExpression() ORDER BY u.name"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult(); self::assertCount(3, $result); @@ -335,7 +335,7 @@ public function testShouldSupportCaseExpression() ORDER BY u.name"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult(); self::assertCount(3, $result); @@ -377,7 +377,7 @@ public function testShouldSupportSimpleArithmeticExpression() ORDER BY u.name"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult(); self::assertCount(3, $result); @@ -437,7 +437,7 @@ public function testShouldSupportAggregateFunctions() ORDER BY u.name"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult(); self::assertCount(3, $result); @@ -497,7 +497,7 @@ public function testShouldSupportArithmeticExpression() ORDER BY u.name"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult(); self::assertCount(3, $result); @@ -555,7 +555,7 @@ public function testShouldSupportMultipleNewOperators() ORDER BY u.name"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult(); self::assertCount(3, $result); @@ -607,7 +607,7 @@ public function testShouldSupportMultipleNewOperatorsWithAliases() ORDER BY u.name"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult(); self::assertCount(3, $result); @@ -659,7 +659,7 @@ public function testShouldSupportMultipleNewOperatorsWithAndWithoutAliases() ORDER BY u.name"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult(); self::assertCount(3, $result); @@ -712,7 +712,7 @@ public function testShouldSupportMultipleNewOperatorsAndSingleScalar() ORDER BY u.name"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult(); self::assertCount(3, $result); @@ -769,7 +769,7 @@ public function testShouldSupportMultipleNewOperatorsAndSingleScalarWithAliases( ORDER BY u.name"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult(); self::assertCount(3, $result); @@ -826,7 +826,7 @@ public function testShouldSupportMultipleNewOperatorsAndSingleScalarWithAndWitho ORDER BY u.name"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult(); self::assertCount(3, $result); @@ -884,7 +884,7 @@ public function testShouldSupportMultipleNewOperatorsAndMultipleScalars() ORDER BY u.name"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult(); self::assertCount(3, $result); @@ -946,7 +946,7 @@ public function testShouldSupportMultipleNewOperatorsAndMultipleScalarsWithAlias ORDER BY u.name"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult(); self::assertCount(3, $result); @@ -1008,7 +1008,7 @@ public function testShouldSupportMultipleNewOperatorsAndMultipleScalarsWithAndWi ORDER BY u.name"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult(); self::assertCount(3, $result); @@ -1054,7 +1054,7 @@ public function testShouldSupportMultipleNewOperatorsAndMultipleScalarsWithAndWi public function testInvalidClassException() { $dql = "SELECT new \InvalidClass(u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u"; - $this->_em->createQuery($dql)->getResult(); + $this->em->createQuery($dql)->getResult(); } /** @@ -1064,7 +1064,7 @@ public function testInvalidClassException() public function testInvalidClassConstructorException() { $dql = "SELECT new \stdClass(u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u"; - $this->_em->createQuery($dql)->getResult(); + $this->em->createQuery($dql)->getResult(); } /** @@ -1074,7 +1074,7 @@ public function testInvalidClassConstructorException() public function testInvalidClassWithoutConstructorException() { $dql = "SELECT new Doctrine\Tests\ORM\Functional\ClassWithTooMuchArgs(u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u"; - $this->_em->createQuery($dql)->getResult(); + $this->em->createQuery($dql)->getResult(); } /** @@ -1084,7 +1084,7 @@ public function testInvalidClassWithoutConstructorException() public function testClassCantBeInstantiatedException() { $dql = "SELECT new Doctrine\Tests\ORM\Functional\ClassWithPrivateConstructor(u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u"; - $this->_em->createQuery($dql)->getResult(); + $this->em->createQuery($dql)->getResult(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/NotifyPolicyTest.php b/tests/Doctrine/Tests/ORM/Functional/NotifyPolicyTest.php index fe5cf580b09..0fd2342c5a6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/NotifyPolicyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/NotifyPolicyTest.php @@ -18,10 +18,10 @@ protected function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(NotifyUser::class), - $this->_em->getClassMetadata(NotifyGroup::class) + $this->em->getClassMetadata(NotifyUser::class), + $this->em->getClassMetadata(NotifyGroup::class) ] ); } catch (\Exception $e) { @@ -39,14 +39,14 @@ public function testChangeTracking() $user->getGroups()->add($group); $group->getUsers()->add($user); - $this->_em->persist($user); - $this->_em->persist($group); + $this->em->persist($user); + $this->em->persist($group); self::assertEquals(1, count($user->listeners)); self::assertEquals(1, count($group->listeners)); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); self::assertEquals(1, count($user->listeners)); self::assertEquals(1, count($group->listeners)); @@ -55,9 +55,9 @@ public function testChangeTracking() $groupId = $group->getId(); unset($user, $group); - $user = $this->_em->find(NotifyUser::class, $userId); + $user = $this->em->find(NotifyUser::class, $userId); self::assertEquals(1, $user->getGroups()->count()); - $group = $this->_em->find(NotifyGroup::class, $groupId); + $group = $this->em->find(NotifyGroup::class, $groupId); self::assertEquals(1, $group->getUsers()->count()); self::assertEquals(1, count($user->listeners)); @@ -65,14 +65,14 @@ public function testChangeTracking() $group2 = new NotifyGroup(); $group2->setName('nerds'); - $this->_em->persist($group2); + $this->em->persist($group2); $user->getGroups()->add($group2); $group2->getUsers()->add($user); $group->setName('geeks'); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); self::assertEquals(1, count($user->listeners)); self::assertEquals(1, count($group->listeners)); @@ -80,11 +80,11 @@ public function testChangeTracking() $group2Id = $group2->getId(); unset($group2, $user); - $user = $this->_em->find(NotifyUser::class, $userId); + $user = $this->em->find(NotifyUser::class, $userId); self::assertEquals(2, $user->getGroups()->count()); - $group2 = $this->_em->find(NotifyGroup::class, $group2Id); + $group2 = $this->em->find(NotifyGroup::class, $group2Id); self::assertEquals(1, $group2->getUsers()->count()); - $group = $this->_em->find(NotifyGroup::class, $groupId); + $group = $this->em->find(NotifyGroup::class, $groupId); self::assertEquals(1, $group->getUsers()->count()); self::assertEquals('geeks', $group->getName()); } diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToManyBidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToManyBidirectionalAssociationTest.php index 3a33f57abb7..6d893cdaf04 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToManyBidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToManyBidirectionalAssociationTest.php @@ -33,8 +33,8 @@ protected function setUp() public function testSavesAOneToManyAssociationWithCascadeSaveSet() { $this->product->addFeature($this->firstFeature); $this->product->addFeature($this->secondFeature); - $this->_em->persist($this->product); - $this->_em->flush(); + $this->em->persist($this->product); + $this->em->flush(); self::assertFeatureForeignKeyIs($this->product->getId(), $this->firstFeature); self::assertFeatureForeignKeyIs($this->product->getId(), $this->secondFeature); @@ -42,16 +42,16 @@ public function testSavesAOneToManyAssociationWithCascadeSaveSet() { public function testSavesAnEmptyCollection() { - $this->_em->persist($this->product); - $this->_em->flush(); + $this->em->persist($this->product); + $this->em->flush(); self::assertEquals(0, count($this->product->getFeatures())); } public function testDoesNotSaveAnInverseSideSet() { $this->product->brokenAddFeature($this->firstFeature); - $this->_em->persist($this->product); - $this->_em->flush(); + $this->em->persist($this->product); + $this->em->flush(); self::assertFeatureForeignKeyIs(null, $this->firstFeature); } @@ -60,10 +60,10 @@ public function testRemovesOneToOneAssociation() { $this->product->addFeature($this->firstFeature); $this->product->addFeature($this->secondFeature); - $this->_em->persist($this->product); + $this->em->persist($this->product); $this->product->removeFeature($this->firstFeature); - $this->_em->flush(); + $this->em->flush(); self::assertFeatureForeignKeyIs(null, $this->firstFeature); self::assertFeatureForeignKeyIs($this->product->getId(), $this->secondFeature); @@ -71,8 +71,8 @@ public function testRemovesOneToOneAssociation() public function testEagerLoadsOneToManyAssociation() { - $this->_createFixture(); - $query = $this->_em->createQuery('select p, f from Doctrine\Tests\Models\ECommerce\ECommerceProduct p join p.features f'); + $this->createFixture(); + $query = $this->em->createQuery('select p, f from Doctrine\Tests\Models\ECommerce\ECommerceProduct p join p.features f'); $result = $query->getResult(); $product = $result[0]; @@ -90,9 +90,9 @@ public function testEagerLoadsOneToManyAssociation() public function testLazyLoadsObjectsOnTheOwningSide() { - $this->_createFixture(); + $this->createFixture(); - $query = $this->_em->createQuery('select p from Doctrine\Tests\Models\ECommerce\ECommerceProduct p'); + $query = $this->em->createQuery('select p from Doctrine\Tests\Models\ECommerce\ECommerceProduct p'); $result = $query->getResult(); $product = $result[0]; $features = $product->getFeatures(); @@ -109,9 +109,9 @@ public function testLazyLoadsObjectsOnTheOwningSide() public function testLazyLoadsObjectsOnTheInverseSide() { - $this->_createFixture(); + $this->createFixture(); - $query = $this->_em->createQuery('select f from Doctrine\Tests\Models\ECommerce\ECommerceFeature f'); + $query = $this->em->createQuery('select f from Doctrine\Tests\Models\ECommerce\ECommerceFeature f'); $features = $query->getResult(); $product = $features[0]->getProduct(); @@ -124,10 +124,10 @@ public function testLazyLoadsObjectsOnTheInverseSide() public function testLazyLoadsObjectsOnTheInverseSide2() { - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); - $this->_createFixture(); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + $this->createFixture(); - $query = $this->_em->createQuery('select f,p from Doctrine\Tests\Models\ECommerce\ECommerceFeature f join f.product p'); + $query = $this->em->createQuery('select f,p from Doctrine\Tests\Models\ECommerce\ECommerceFeature f join f.product p'); $features = $query->getResult(); $product = $features[0]->getProduct(); @@ -142,12 +142,12 @@ public function testLazyLoadsObjectsOnTheInverseSide2() //self::assertTrue($product->getFeatures()->contains($features[0])); //self::assertTrue($product->getFeatures()->contains($features[1])); - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(null); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(null); } public function testJoinFromOwningSide() { - $query = $this->_em->createQuery('select f,p from Doctrine\Tests\Models\ECommerce\ECommerceFeature f join f.product p'); + $query = $this->em->createQuery('select f,p from Doctrine\Tests\Models\ECommerce\ECommerceFeature f join f.product p'); $features = $query->getResult(); self::assertEquals(0, count($features)); } @@ -157,9 +157,9 @@ public function testJoinFromOwningSide() */ public function testMatching() { - $this->_createFixture(); + $this->createFixture(); - $product = $this->_em->find(ECommerceProduct::class, $this->product->getId()); + $product = $this->em->find(ECommerceProduct::class, $this->product->getId()); $features = $product->getFeatures(); $results = $features->matching(new Criteria( @@ -180,9 +180,9 @@ public function testMatching() */ public function testMatchingOnDirtyCollection() { - $this->_createFixture(); + $this->createFixture(); - $product = $this->_em->find(ECommerceProduct::class, $this->product->getId()); + $product = $this->em->find(ECommerceProduct::class, $this->product->getId()); $thirdFeature = new ECommerceFeature(); $thirdFeature->setDescription('Model writing tutorial'); @@ -199,9 +199,9 @@ public function testMatchingOnDirtyCollection() public function testMatchingBis() { - $this->_createFixture(); + $this->createFixture(); - $product = $this->_em->find(ECommerceProduct::class, $this->product->getId()); + $product = $this->em->find(ECommerceProduct::class, $this->product->getId()); $features = $product->getFeatures(); $thirdFeature = new ECommerceFeature(); @@ -221,18 +221,18 @@ public function testMatchingBis() self::assertCount(3, $results); } - private function _createFixture() + private function createFixture() { $this->product->addFeature($this->firstFeature); $this->product->addFeature($this->secondFeature); - $this->_em->persist($this->product); + $this->em->persist($this->product); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } public function assertFeatureForeignKeyIs($value, ECommerceFeature $feature) { - $foreignKey = $this->_em->getConnection()->executeQuery( + $foreignKey = $this->em->getConnection()->executeQuery( 'SELECT product_id FROM ecommerce_features WHERE id=?', [$feature->getId()] )->fetchColumn(); diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToManyOrphanRemovalTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToManyOrphanRemovalTest.php index e12c93e446f..878fea27797 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToManyOrphanRemovalTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToManyOrphanRemovalTest.php @@ -33,27 +33,27 @@ protected function setUp() $user->addPhonenumber($phone1); $user->addPhonenumber($phone2); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); $this->userId = $user->getId(); - $this->_em->clear(); + $this->em->clear(); } public function testOrphanRemoval() { - $userProxy = $this->_em->getReference(CmsUser::class, $this->userId); + $userProxy = $this->em->getReference(CmsUser::class, $this->userId); - $this->_em->remove($userProxy); - $this->_em->flush(); - $this->_em->clear(); + $this->em->remove($userProxy); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u'); + $query = $this->em->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u'); $result = $query->getResult(); self::assertEquals(0, count($result), 'CmsUser should be removed by EntityManager'); - $query = $this->_em->createQuery('SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p'); + $query = $this->em->createQuery('SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p'); $result = $query->getResult(); self::assertEquals(0, count($result), 'CmsPhonenumber should be removed by orphanRemoval'); @@ -64,14 +64,14 @@ public function testOrphanRemoval() */ public function testOrphanRemovalRemoveFromCollection() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); $phonenumber = $user->getPhonenumbers()->remove(0); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery('SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p'); + $query = $this->em->createQuery('SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p'); $result = $query->getResult(); self::assertEquals(1, count($result), 'CmsPhonenumber should be removed by orphanRemoval'); @@ -82,16 +82,16 @@ public function testOrphanRemovalRemoveFromCollection() */ public function testOrphanRemovalClearCollectionAndReAdd() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); $phone1 = $user->getPhonenumbers()->first(); $user->getPhonenumbers()->clear(); $user->addPhonenumber($phone1); - $this->_em->flush(); + $this->em->flush(); - $query = $this->_em->createQuery('SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p'); + $query = $this->em->createQuery('SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p'); $result = $query->getResult(); self::assertEquals(1, count($result), 'CmsPhonenumber should be removed by orphanRemoval'); @@ -102,7 +102,7 @@ public function testOrphanRemovalClearCollectionAndReAdd() */ public function testOrphanRemovalClearCollectionAndAddNew() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); $newPhone = new CmsPhonenumber(); $newPhone->phonenumber = '654321'; @@ -110,9 +110,9 @@ public function testOrphanRemovalClearCollectionAndAddNew() $user->getPhonenumbers()->clear(); $user->addPhonenumber($newPhone); - $this->_em->flush(); + $this->em->flush(); - $query = $this->_em->createQuery('SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p'); + $query = $this->em->createQuery('SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p'); $result = $query->getResult(); self::assertEquals(1, count($result), 'Old CmsPhonenumbers should be removed by orphanRemoval and new one added'); @@ -123,12 +123,12 @@ public function testOrphanRemovalClearCollectionAndAddNew() */ public function testOrphanRemovalUnitializedCollection() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); $user->phonenumbers->clear(); - $this->_em->flush(); + $this->em->flush(); - $query = $this->_em->createQuery('SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p'); + $query = $this->em->createQuery('SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p'); $result = $query->getResult(); self::assertEquals(0, count($result), 'CmsPhonenumber should be removed by orphanRemoval'); diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToManySelfReferentialAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToManySelfReferentialAssociationTest.php index 5d9a5832081..70a7f5222e7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToManySelfReferentialAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToManySelfReferentialAssociationTest.php @@ -32,9 +32,9 @@ protected function setUp() public function testSavesAOneToManyAssociationWithCascadeSaveSet() { $this->parent->addChild($this->firstChild); $this->parent->addChild($this->secondChild); - $this->_em->persist($this->parent); + $this->em->persist($this->parent); - $this->_em->flush(); + $this->em->flush(); self::assertForeignKeyIs($this->parent->getId(), $this->firstChild); self::assertForeignKeyIs($this->parent->getId(), $this->secondChild); @@ -42,16 +42,16 @@ public function testSavesAOneToManyAssociationWithCascadeSaveSet() { public function testSavesAnEmptyCollection() { - $this->_em->persist($this->parent); - $this->_em->flush(); + $this->em->persist($this->parent); + $this->em->flush(); self::assertEquals(0, count($this->parent->getChildren())); } public function testDoesNotSaveAnInverseSideSet() { $this->parent->brokenAddChild($this->firstChild); - $this->_em->persist($this->parent); - $this->_em->flush(); + $this->em->persist($this->parent); + $this->em->flush(); self::assertForeignKeyIs(null, $this->firstChild); } @@ -60,10 +60,10 @@ public function testRemovesOneToManyAssociation() { $this->parent->addChild($this->firstChild); $this->parent->addChild($this->secondChild); - $this->_em->persist($this->parent); + $this->em->persist($this->parent); $this->parent->removeChild($this->firstChild); - $this->_em->flush(); + $this->em->flush(); self::assertForeignKeyIs(null, $this->firstChild); self::assertForeignKeyIs($this->parent->getId(), $this->secondChild); @@ -71,9 +71,9 @@ public function testRemovesOneToManyAssociation() public function testEagerLoadsOneToManyAssociation() { - $this->_createFixture(); + $this->createFixture(); - $query = $this->_em->createQuery('select c1, c2 from Doctrine\Tests\Models\ECommerce\ECommerceCategory c1 join c1.children c2'); + $query = $this->em->createQuery('select c1, c2 from Doctrine\Tests\Models\ECommerce\ECommerceCategory c1 join c1.children c2'); $result = $query->getResult(); self::assertEquals(1, count($result)); $parent = $result[0]; @@ -89,11 +89,11 @@ public function testEagerLoadsOneToManyAssociation() public function testLazyLoadsOneToManyAssociation() { - $this->_createFixture(); - $metadata = $this->_em->getClassMetadata(ECommerceCategory::class); + $this->createFixture(); + $metadata = $this->em->getClassMetadata(ECommerceCategory::class); $metadata->associationMappings['children']['fetch'] = FetchMode::LAZY; - $query = $this->_em->createQuery('select c from Doctrine\Tests\Models\ECommerce\ECommerceCategory c order by c.id asc'); + $query = $this->em->createQuery('select c from Doctrine\Tests\Models\ECommerce\ECommerceCategory c order by c.id asc'); $result = $query->getResult(); $parent = $result[0]; $children = $parent->getChildren(); @@ -106,18 +106,18 @@ public function testLazyLoadsOneToManyAssociation() self::assertEquals(' books', strstr($children[1]->getName(), ' books')); } - private function _createFixture() + private function createFixture() { $this->parent->addChild($this->firstChild); $this->parent->addChild($this->secondChild); - $this->_em->persist($this->parent); + $this->em->persist($this->parent); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } public function assertForeignKeyIs($value, ECommerceCategory $child) { - $foreignKey = $this->_em->getConnection()->executeQuery('SELECT parent_id FROM ecommerce_categories WHERE id=?', [$child->getId()])->fetchColumn(); + $foreignKey = $this->em->getConnection()->executeQuery('SELECT parent_id FROM ecommerce_categories WHERE id=?', [$child->getId()])->fetchColumn(); self::assertEquals($value, $foreignKey); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToManyUnidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToManyUnidirectionalAssociationTest.php index 7167e111f94..505f94243ec 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToManyUnidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToManyUnidirectionalAssociationTest.php @@ -24,10 +24,10 @@ public function setUp() foreach ($locations AS $locationName) { $location = new RoutingLocation(); $location->name = $locationName; - $this->_em->persist($location); + $this->em->persist($location); $this->locations[$locationName] = $location; } - $this->_em->flush(); + $this->em->flush(); } public function testPersistOwning_InverseCascade() @@ -41,11 +41,11 @@ public function testPersistOwning_InverseCascade() $route = new RoutingRoute(); $route->legs[] = $leg; - $this->_em->persist($route); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($route); + $this->em->flush(); + $this->em->clear(); - $routes = $this->_em->createQuery( + $routes = $this->em->createQuery( "SELECT r, l, f, t FROM Doctrine\Tests\Models\Routing\RoutingRoute r ". "JOIN r.legs l JOIN l.fromLocation f JOIN l.toLocation t" )->getSingleResult(); @@ -69,13 +69,13 @@ public function testLegsAreUniqueToRoutes() $routeB = new RoutingRoute(); $routeB->legs[] = $leg; - $this->_em->persist($routeA); - $this->_em->persist($routeB); + $this->em->persist($routeA); + $this->em->persist($routeB); $exceptionThrown = false; try { // exception depending on the underlying Database Driver - $this->_em->flush(); + $this->em->flush(); } catch(\Exception $e) { $exceptionThrown = true; } diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneBidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneBidirectionalAssociationTest.php index 4e12f88c40d..332dcd47b63 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneBidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneBidirectionalAssociationTest.php @@ -30,16 +30,16 @@ protected function setUp() public function testSavesAOneToOneAssociationWithCascadeSaveSet() { $this->customer->setCart($this->cart); - $this->_em->persist($this->customer); - $this->_em->flush(); + $this->em->persist($this->customer); + $this->em->flush(); self::assertCartForeignKeyIs($this->customer->getId()); } public function testDoesNotSaveAnInverseSideSet() { $this->customer->brokenSetCart($this->cart); - $this->_em->persist($this->customer); - $this->_em->flush(); + $this->em->persist($this->customer); + $this->em->flush(); self::assertCartForeignKeyIs(null); } @@ -47,19 +47,19 @@ public function testDoesNotSaveAnInverseSideSet() { public function testRemovesOneToOneAssociation() { $this->customer->setCart($this->cart); - $this->_em->persist($this->customer); + $this->em->persist($this->customer); $this->customer->removeCart(); - $this->_em->flush(); + $this->em->flush(); self::assertCartForeignKeyIs(null); } public function testEagerLoad() { - $this->_createFixture(); + $this->createFixture(); - $query = $this->_em->createQuery('select c, ca from Doctrine\Tests\Models\ECommerce\ECommerceCustomer c join c.cart ca'); + $query = $this->em->createQuery('select c, ca from Doctrine\Tests\Models\ECommerce\ECommerceCustomer c join c.cart ca'); $result = $query->getResult(); $customer = $result[0]; @@ -68,11 +68,11 @@ public function testEagerLoad() } public function testLazyLoadsObjectsOnTheOwningSide() { - $this->_createFixture(); - $metadata = $this->_em->getClassMetadata(ECommerceCart::class); + $this->createFixture(); + $metadata = $this->em->getClassMetadata(ECommerceCart::class); $metadata->associationMappings['customer']['fetchMode'] = FetchMode::LAZY; - $query = $this->_em->createQuery('select c from Doctrine\Tests\Models\ECommerce\ECommerceCart c'); + $query = $this->em->createQuery('select c from Doctrine\Tests\Models\ECommerce\ECommerceCart c'); $result = $query->getResult(); $cart = $result[0]; @@ -82,11 +82,11 @@ public function testLazyLoadsObjectsOnTheOwningSide() { public function testInverseSideIsNeverLazy() { - $this->_createFixture(); - $metadata = $this->_em->getClassMetadata(ECommerceCustomer::class); + $this->createFixture(); + $metadata = $this->em->getClassMetadata(ECommerceCustomer::class); $metadata->associationMappings['mentor']['fetch'] = FetchMode::EAGER; - $query = $this->_em->createQuery('select c from Doctrine\Tests\Models\ECommerce\ECommerceCustomer c'); + $query = $this->em->createQuery('select c from Doctrine\Tests\Models\ECommerce\ECommerceCustomer c'); $result = $query->getResult(); $customer = $result[0]; @@ -104,25 +104,25 @@ public function testUpdateWithProxyObject() $cart->setPayment('CARD'); $cust->setCart($cart); - $this->_em->persist($cust); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($cust); + $this->em->flush(); + $this->em->clear(); self::assertInstanceOf(ECommerceCart::class, $cust->getCart()); self::assertEquals('Roman', $cust->getName()); self::assertSame($cust, $cart->getCustomer()); - $query = $this->_em->createQuery('select ca from Doctrine\Tests\Models\ECommerce\ECommerceCart ca where ca.id =?1'); + $query = $this->em->createQuery('select ca from Doctrine\Tests\Models\ECommerce\ECommerceCart ca where ca.id =?1'); $query->setParameter(1, $cart->getId()); $cart2 = $query->getSingleResult(); $cart2->setPayment('CHEQUE'); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $query2 = $this->_em->createQuery('select ca, c from Doctrine\Tests\Models\ECommerce\ECommerceCart ca left join ca.customer c where ca.id =?1'); + $query2 = $this->em->createQuery('select ca, c from Doctrine\Tests\Models\ECommerce\ECommerceCart ca left join ca.customer c where ca.id =?1'); $query2->setParameter(1, $cart->getId()); $cart3 = $query2->getSingleResult(); @@ -131,7 +131,7 @@ public function testUpdateWithProxyObject() self::assertEquals('Roman', $cart3->getCustomer()->getName()); } - protected function _createFixture() + protected function createFixture() { $customer = new ECommerceCustomer; $customer->setName('Giorgio'); @@ -139,14 +139,14 @@ protected function _createFixture() $cart->setPayment('paypal'); $customer->setCart($cart); - $this->_em->persist($customer); + $this->em->persist($customer); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } public function assertCartForeignKeyIs($value) { - $foreignKey = $this->_em->getConnection()->executeQuery('SELECT customer_id FROM ecommerce_carts WHERE id=?', [$this->cart->getId()])->fetchColumn(); + $foreignKey = $this->em->getConnection()->executeQuery('SELECT customer_id FROM ecommerce_carts WHERE id=?', [$this->cart->getId()])->fetchColumn(); self::assertEquals($value, $foreignKey); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php index 9655f4325d2..5a77257b567 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php @@ -14,15 +14,15 @@ class OneToOneEagerLoadingTest extends OrmFunctionalTestCase protected function setUp() { parent::setUp(); - $schemaTool = new SchemaTool($this->_em); + $schemaTool = new SchemaTool($this->em); try { $schemaTool->createSchema( [ - $this->_em->getClassMetadata(Train::class), - $this->_em->getClassMetadata(TrainDriver::class), - $this->_em->getClassMetadata(TrainOwner::class), - $this->_em->getClassMetadata(Waggon::class), - $this->_em->getClassMetadata(TrainOrder::class), + $this->em->getClassMetadata(Train::class), + $this->em->getClassMetadata(TrainDriver::class), + $this->em->getClassMetadata(TrainOwner::class), + $this->em->getClassMetadata(Waggon::class), + $this->em->getClassMetadata(TrainOrder::class), ] ); } catch(\Exception $e) {} @@ -40,17 +40,17 @@ public function testEagerLoadOneToOneOwningSide() $train->setDriver($driver); $train->addWaggon($waggon); - $this->_em->persist($train); // cascades - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($train); // cascades + $this->em->flush(); + $this->em->clear(); - $sqlCount = count($this->_sqlLoggerStack->queries); + $sqlCount = count($this->sqlLoggerStack->queries); - $train = $this->_em->find(get_class($train), $train->id); + $train = $this->em->find(get_class($train), $train->id); self::assertNotInstanceOf(Proxy::class, $train->driver); self::assertEquals("Benjamin", $train->driver->name); - self::assertEquals($sqlCount + 1, count($this->_sqlLoggerStack->queries)); + self::assertEquals($sqlCount + 1, count($this->sqlLoggerStack->queries)); } /** @@ -60,17 +60,17 @@ public function testEagerLoadOneToOneNullOwningSide() { $train = new Train(new TrainOwner("Alexander")); - $this->_em->persist($train); // cascades - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($train); // cascades + $this->em->flush(); + $this->em->clear(); - $sqlCount = count($this->_sqlLoggerStack->queries); + $sqlCount = count($this->sqlLoggerStack->queries); - $train = $this->_em->find(get_class($train), $train->id); + $train = $this->em->find(get_class($train), $train->id); self::assertNotInstanceOf(Proxy::class, $train->driver); self::assertNull($train->driver); - self::assertEquals($sqlCount + 1, count($this->_sqlLoggerStack->queries)); + self::assertEquals($sqlCount + 1, count($this->sqlLoggerStack->queries)); } /** @@ -81,17 +81,17 @@ public function testEagerLoadOneToOneInverseSide() $owner = new TrainOwner("Alexander"); $train = new Train($owner); - $this->_em->persist($train); // cascades - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($train); // cascades + $this->em->flush(); + $this->em->clear(); - $sqlCount = count($this->_sqlLoggerStack->queries); + $sqlCount = count($this->sqlLoggerStack->queries); - $driver = $this->_em->find(get_class($owner), $owner->id); + $driver = $this->em->find(get_class($owner), $owner->id); self::assertNotInstanceOf(Proxy::class, $owner->train); self::assertNotNull($owner->train); - self::assertEquals($sqlCount + 1, count($this->_sqlLoggerStack->queries)); + self::assertEquals($sqlCount + 1, count($this->sqlLoggerStack->queries)); } /** @@ -101,19 +101,19 @@ public function testEagerLoadOneToOneNullInverseSide() { $driver = new TrainDriver("Dagny Taggert"); - $this->_em->persist($driver); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($driver); + $this->em->flush(); + $this->em->clear(); self::assertNull($driver->train); - $sqlCount = count($this->_sqlLoggerStack->queries); + $sqlCount = count($this->sqlLoggerStack->queries); - $driver = $this->_em->find(get_class($driver), $driver->id); + $driver = $this->em->find(get_class($driver), $driver->id); self::assertNotInstanceOf(Proxy::class, $driver->train); self::assertNull($driver->train); - self::assertEquals($sqlCount + 1, count($this->_sqlLoggerStack->queries)); + self::assertEquals($sqlCount + 1, count($this->sqlLoggerStack->queries)); } public function testEagerLoadManyToOne() @@ -122,11 +122,11 @@ public function testEagerLoadManyToOne() $waggon = new Waggon(); $train->addWaggon($waggon); - $this->_em->persist($train); // cascades - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($train); // cascades + $this->em->flush(); + $this->em->clear(); - $waggon = $this->_em->find(get_class($waggon), $waggon->id); + $waggon = $this->em->find(get_class($waggon), $waggon->id); self::assertNotInstanceOf(Proxy::class, $waggon->train); self::assertNotNull($waggon->train); } @@ -140,24 +140,24 @@ public function testEagerLoadWithNullableColumnsGeneratesLeftJoinOnBothSides() $driver = new TrainDriver("Benjamin"); $train->setDriver($driver); - $this->_em->persist($train); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($train); + $this->em->flush(); + $this->em->clear(); - $this->_em->find(get_class($train), $train->id); + $this->em->find(get_class($train), $train->id); self::assertSQLEquals( 'SELECT t0."id" AS id_1, t0."driver_id" AS driver_id_2, t4."id" AS id_3, t4."name" AS name_5, t0."owner_id" AS owner_id_6, t8."id" AS id_7, t8."name" AS name_9 FROM "Train" t0 LEFT JOIN "TrainDriver" t4 ON t0."driver_id" = t4."id" INNER JOIN "TrainOwner" t8 ON t0."owner_id" = t8."id" WHERE t0."id" = ?', - $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery]['sql'] + $this->sqlLoggerStack->queries[$this->sqlLoggerStack->currentQuery]['sql'] ); - $this->_em->clear(); + $this->em->clear(); - $this->_em->find(get_class($driver), $driver->id); + $this->em->find(get_class($driver), $driver->id); self::assertSQLEquals( 'SELECT t0."id" AS id_1, t0."name" AS name_2, t4."id" AS id_3, t4."driver_id" AS driver_id_5, t4."owner_id" AS owner_id_6 FROM "TrainOwner" t0 LEFT JOIN "Train" t4 ON t4."owner_id" = t0."id" WHERE t0."id" IN (?)', - $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery]['sql'] + $this->sqlLoggerStack->queries[$this->sqlLoggerStack->currentQuery]['sql'] ); } @@ -172,22 +172,22 @@ public function testEagerLoadWithNonNullableColumnsGeneratesInnerJoinOnOwningSid $train = new Train(new TrainOwner("Alexander")); $train->addWaggon($waggon); - $this->_em->persist($train); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($train); + $this->em->flush(); + $this->em->clear(); - $this->_em->find(get_class($waggon), $waggon->id); + $this->em->find(get_class($waggon), $waggon->id); // The last query is the eager loading of the owner of the train self::assertSQLEquals( 'SELECT t0."id" AS id_1, t0."name" AS name_2, t4."id" AS id_3, t4."driver_id" AS driver_id_5, t4."owner_id" AS owner_id_6 FROM "TrainOwner" t0 LEFT JOIN "Train" t4 ON t4."owner_id" = t0."id" WHERE t0."id" IN (?)', - $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery]['sql'] + $this->sqlLoggerStack->queries[$this->sqlLoggerStack->currentQuery]['sql'] ); // The one before is the fetching of the waggon and train self::assertSQLEquals( 'SELECT t0."id" AS id_1, t0."train_id" AS train_id_2, t4."id" AS id_3, t4."driver_id" AS driver_id_5, t4."owner_id" AS owner_id_6 FROM "Waggon" t0 INNER JOIN "Train" t4 ON t0."train_id" = t4."id" WHERE t0."id" = ?', - $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery - 1]['sql'] + $this->sqlLoggerStack->queries[$this->sqlLoggerStack->currentQuery - 1]['sql'] ); } @@ -199,15 +199,15 @@ public function testEagerLoadWithNonNullableColumnsGeneratesLeftJoinOnNonOwningS $owner = new TrainOwner('Alexander'); $train = new Train($owner); - $this->_em->persist($train); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($train); + $this->em->flush(); + $this->em->clear(); - $this->_em->find(get_class($owner), $owner->id); + $this->em->find(get_class($owner), $owner->id); self::assertSQLEquals( 'SELECT t0."id" AS id_1, t0."name" AS name_2, t4."id" AS id_3, t4."driver_id" AS driver_id_5, t4."owner_id" AS owner_id_6 FROM "TrainOwner" t0 LEFT JOIN "Train" t4 ON t4."owner_id" = t0."id" WHERE t0."id" = ?', - $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery]['sql'] + $this->sqlLoggerStack->queries[$this->sqlLoggerStack->currentQuery]['sql'] ); } @@ -219,15 +219,15 @@ public function testEagerLoadingDoesNotBreakRefresh() $train = new Train(new TrainOwner('Johannes')); $order = new TrainOrder($train); - $this->_em->persist($train); - $this->_em->persist($order); - $this->_em->flush(); + $this->em->persist($train); + $this->em->persist($order); + $this->em->flush(); - $this->_em->getConnection()->exec("UPDATE TrainOrder SET train_id = NULL"); + $this->em->getConnection()->exec("UPDATE TrainOrder SET train_id = NULL"); self::assertSame($train, $order->train); - $this->_em->refresh($order); + $this->em->refresh($order); self::assertTrue($order->train === null, "Train reference was not refreshed to NULL."); } diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneOrphanRemovalTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneOrphanRemovalTest.php index b470cb77ec0..74d72342844 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneOrphanRemovalTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneOrphanRemovalTest.php @@ -33,25 +33,25 @@ public function testOrphanRemoval() $user->setAddress($address); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); $userId = $user->getId(); - $this->_em->clear(); + $this->em->clear(); - $userProxy = $this->_em->getReference(CmsUser::class, $userId); + $userProxy = $this->em->getReference(CmsUser::class, $userId); - $this->_em->remove($userProxy); - $this->_em->flush(); - $this->_em->clear(); + $this->em->remove($userProxy); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u'); + $query = $this->em->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u'); $result = $query->getResult(); self::assertEquals(0, count($result), 'CmsUser should be removed by EntityManager'); - $query = $this->_em->createQuery('SELECT a FROM Doctrine\Tests\Models\CMS\CmsAddress a'); + $query = $this->em->createQuery('SELECT a FROM Doctrine\Tests\Models\CMS\CmsAddress a'); $result = $query->getResult(); self::assertEquals(0, count($result), 'CmsAddress should be removed by orphanRemoval'); @@ -69,22 +69,22 @@ public function testOrphanRemovalWhenUnlink() $user->setEmail($email); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); $userId = $user->getId(); - $this->_em->clear(); + $this->em->clear(); - $user = $this->_em->find(CmsUser::class, $userId); + $user = $this->em->find(CmsUser::class, $userId); $user->setEmail(null); - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery('SELECT e FROM Doctrine\Tests\Models\CMS\CmsEmail e'); + $query = $this->em->createQuery('SELECT e FROM Doctrine\Tests\Models\CMS\CmsEmail e'); $result = $query->getResult(); self::assertEquals(0, count($result), 'CmsEmail should be removed by orphanRemoval'); diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneSelfReferentialAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneSelfReferentialAssociationTest.php index 668aee967e1..0cc9d4d4f72 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneSelfReferentialAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneSelfReferentialAssociationTest.php @@ -33,8 +33,8 @@ protected function setUp() public function testSavesAOneToOneAssociationWithCascadeSaveSet() { $this->customer->setMentor($this->mentor); - $this->_em->persist($this->customer); - $this->_em->flush(); + $this->em->persist($this->customer); + $this->em->flush(); self::assertForeignKeyIs($this->mentor->getId()); } @@ -42,27 +42,27 @@ public function testSavesAOneToOneAssociationWithCascadeSaveSet() { public function testRemovesOneToOneAssociation() { $this->customer->setMentor($this->mentor); - $this->_em->persist($this->customer); + $this->em->persist($this->customer); $this->customer->removeMentor(); - $this->_em->flush(); + $this->em->flush(); self::assertForeignKeyIs(null); } public function testFind() { - $id = $this->_createFixture(); + $id = $this->createFixture(); - $customer = $this->_em->find(ECommerceCustomer::class, $id); + $customer = $this->em->find(ECommerceCustomer::class, $id); self::assertNotInstanceOf(Proxy::class, $customer->getMentor()); } public function testEagerLoadsAssociation() { - $this->_createFixture(); + $this->createFixture(); - $query = $this->_em->createQuery('select c, m from Doctrine\Tests\Models\ECommerce\ECommerceCustomer c left join c.mentor m order by c.id asc'); + $query = $this->em->createQuery('select c, m from Doctrine\Tests\Models\ECommerce\ECommerceCustomer c left join c.mentor m order by c.id asc'); $result = $query->getResult(); $customer = $result[0]; self::assertLoadingOfAssociation($customer); @@ -74,12 +74,12 @@ public function testEagerLoadsAssociation() */ public function testLazyLoadsAssociation() { - $this->_createFixture(); + $this->createFixture(); - $metadata = $this->_em->getClassMetadata(ECommerceCustomer::class); + $metadata = $this->em->getClassMetadata(ECommerceCustomer::class); $metadata->associationMappings['mentor']['fetch'] = FetchMode::LAZY; - $query = $this->_em->createQuery("select c from Doctrine\Tests\Models\ECommerce\ECommerceCustomer c where c.name='Luke Skywalker'"); + $query = $this->em->createQuery("select c from Doctrine\Tests\Models\ECommerce\ECommerceCustomer c where c.name='Luke Skywalker'"); $result = $query->getResult(); $customer = $result[0]; self::assertLoadingOfAssociation($customer); @@ -88,9 +88,9 @@ public function testLazyLoadsAssociation() public function testMultiSelfReference() { try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(MultiSelfReference::class) + $this->em->getClassMetadata(MultiSelfReference::class) ] ); } catch (\Exception $e) { @@ -98,14 +98,14 @@ public function testMultiSelfReference() } $entity1 = new MultiSelfReference(); - $this->_em->persist($entity1); + $this->em->persist($entity1); $entity1->setOther1($entity2 = new MultiSelfReference); $entity1->setOther2($entity3 = new MultiSelfReference); - $this->_em->flush(); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); - $entity2 = $this->_em->find(get_class($entity1), $entity1->getId()); + $entity2 = $this->em->find(get_class($entity1), $entity1->getId()); self::assertInstanceOf(MultiSelfReference::class, $entity2->getOther1()); self::assertInstanceOf(MultiSelfReference::class, $entity2->getOther2()); @@ -122,11 +122,11 @@ public function assertLoadingOfAssociation($customer) } public function assertForeignKeyIs($value) { - $foreignKey = $this->_em->getConnection()->executeQuery('SELECT mentor_id FROM ecommerce_customers WHERE id=?', [$this->customer->getId()])->fetchColumn(); + $foreignKey = $this->em->getConnection()->executeQuery('SELECT mentor_id FROM ecommerce_customers WHERE id=?', [$this->customer->getId()])->fetchColumn(); self::assertEquals($value, $foreignKey); } - private function _createFixture() + private function createFixture() { $customer = new ECommerceCustomer; $customer->setName('Luke Skywalker'); @@ -134,10 +134,10 @@ private function _createFixture() $mentor->setName('Obi-wan Kenobi'); $customer->setMentor($mentor); - $this->_em->persist($customer); + $this->em->persist($customer); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); return $customer->getId(); } diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneSingleTableInheritanceTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneSingleTableInheritanceTest.php index 785c7c6a45b..f79ba996751 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneSingleTableInheritanceTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneSingleTableInheritanceTest.php @@ -14,10 +14,10 @@ protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema([ - $this->_em->getClassMetadata(Pet::class), - $this->_em->getClassMetadata(Cat::class), - $this->_em->getClassMetadata(LitterBox::class), + $this->schemaTool->createSchema([ + $this->em->getClassMetadata(Pet::class), + $this->em->getClassMetadata(Cat::class), + $this->em->getClassMetadata(LitterBox::class), ]); } @@ -32,13 +32,13 @@ public function testFindFromOneToOneOwningSideJoinedTableInheritance() $cat = new Cat(); $cat->litterBox = new LitterBox(); - $this->_em->persist($cat); - $this->_em->persist($cat->litterBox); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($cat); + $this->em->persist($cat->litterBox); + $this->em->flush(); + $this->em->clear(); /* @var $foundCat Cat */ - $foundCat = $this->_em->find(Pet::class, $cat->id); + $foundCat = $this->em->find(Pet::class, $cat->id); self::assertInstanceOf(Cat::class, $foundCat); self::assertSame($cat->id, $foundCat->id); diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php index 992a58af54d..007c27f6d46 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php @@ -31,8 +31,8 @@ protected function setUp() public function testSavesAOneToOneAssociationWithCascadeSaveSet() { $this->product->setShipping($this->shipping); - $this->_em->persist($this->product); - $this->_em->flush(); + $this->em->persist($this->product); + $this->em->flush(); self::assertForeignKeyIs($this->shipping->getId()); } @@ -40,19 +40,19 @@ public function testSavesAOneToOneAssociationWithCascadeSaveSet() { public function testRemovesOneToOneAssociation() { $this->product->setShipping($this->shipping); - $this->_em->persist($this->product); + $this->em->persist($this->product); $this->product->removeShipping(); - $this->_em->flush(); + $this->em->flush(); self::assertForeignKeyIs(null); } public function _testEagerLoad() { - $this->_createFixture(); + $this->createFixture(); - $query = $this->_em->createQuery('select p, s from Doctrine\Tests\Models\ECommerce\ECommerceProduct p left join p.shipping s'); + $query = $this->em->createQuery('select p, s from Doctrine\Tests\Models\ECommerce\ECommerceProduct p left join p.shipping s'); $result = $query->getResult(); $product = $result[0]; @@ -61,11 +61,11 @@ public function _testEagerLoad() } public function testLazyLoadsObjects() { - $this->_createFixture(); - $metadata = $this->_em->getClassMetadata(ECommerceProduct::class); + $this->createFixture(); + $metadata = $this->em->getClassMetadata(ECommerceProduct::class); $metadata->associationMappings['shipping']['fetch'] = FetchMode::LAZY; - $query = $this->_em->createQuery('select p from Doctrine\Tests\Models\ECommerce\ECommerceProduct p'); + $query = $this->em->createQuery('select p from Doctrine\Tests\Models\ECommerce\ECommerceProduct p'); $result = $query->getResult(); $product = $result[0]; @@ -74,9 +74,9 @@ public function testLazyLoadsObjects() { } public function testDoesNotLazyLoadObjectsIfConfigurationDoesNotAllowIt() { - $this->_createFixture(); + $this->createFixture(); - $query = $this->_em->createQuery('select p from Doctrine\Tests\Models\ECommerce\ECommerceProduct p'); + $query = $this->em->createQuery('select p from Doctrine\Tests\Models\ECommerce\ECommerceProduct p'); $query->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true); $result = $query->getResult(); @@ -85,7 +85,7 @@ public function testDoesNotLazyLoadObjectsIfConfigurationDoesNotAllowIt() { self::assertNull($product->getShipping()); } - protected function _createFixture() + protected function createFixture() { $product = new ECommerceProduct; $product->setName('Php manual'); @@ -93,14 +93,14 @@ protected function _createFixture() $shipping->setDays('1'); $product->setShipping($shipping); - $this->_em->persist($product); + $this->em->persist($product); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } public function assertForeignKeyIs($value) { - $foreignKey = $this->_em->getConnection()->executeQuery( + $foreignKey = $this->em->getConnection()->executeQuery( 'SELECT shipping_id FROM ecommerce_products WHERE id=?', [$this->product->getId()] )->fetchColumn(); @@ -115,10 +115,10 @@ public function testNullForeignKey() $product = new ECommerceProduct(); $product->setName('Doctrine 2 Manual'); - $this->_em->persist($product); - $this->_em->flush(); + $this->em->persist($product); + $this->em->flush(); - $product = $this->_em->find(get_class($product), $product->getId()); + $product = $this->em->find(get_class($product), $product->getId()); self::assertNull($product->getShipping()); } diff --git a/tests/Doctrine/Tests/ORM/Functional/OrderedCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/OrderedCollectionTest.php index f8130e1fa53..ff50320da08 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OrderedCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OrderedCollectionTest.php @@ -22,10 +22,10 @@ public function setUp() foreach ($locations AS $locationName) { $location = new RoutingLocation(); $location->name = $locationName; - $this->_em->persist($location); + $this->em->persist($location); $this->locations[$locationName] = $location; } - $this->_em->flush(); + $this->em->flush(); } public function createPersistedRouteWithLegs() @@ -47,10 +47,10 @@ public function createPersistedRouteWithLegs() $route->legs[] = $leg2; $route->legs[] = $leg1; - $this->_em->persist($route); - $this->_em->flush(); + $this->em->persist($route); + $this->em->flush(); $routeId = $route->id; - $this->_em->clear(); + $this->em->clear(); return $routeId; } @@ -59,7 +59,7 @@ public function testLazyManyToManyCollection_IsRetrievedWithOrderByClause() { $routeId = $this->createPersistedRouteWithLegs(); - $route = $this->_em->find(RoutingRoute::class, $routeId); + $route = $this->em->find(RoutingRoute::class, $routeId); self::assertEquals(2, count($route->legs)); self::assertEquals("Berlin", $route->legs[0]->fromLocation->getName()); @@ -70,8 +70,8 @@ public function testLazyOneToManyCollection_IsRetrievedWithOrderByClause() { $route = new RoutingRoute(); - $this->_em->persist($route); - $this->_em->flush(); + $this->em->persist($route); + $this->em->flush(); $routeId = $route->id; $booking1 = new RoutingRouteBooking(); @@ -84,13 +84,13 @@ public function testLazyOneToManyCollection_IsRetrievedWithOrderByClause() $route->bookings[] = $booking2; $booking2->route = $route; - $this->_em->persist($booking1); - $this->_em->persist($booking2); + $this->em->persist($booking1); + $this->em->persist($booking2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $route = $this->_em->find(RoutingRoute::class, $routeId); + $route = $this->em->find(RoutingRoute::class, $routeId); self::assertEquals(2, count($route->bookings)); self::assertEquals('Benjamin', $route->bookings[0]->getPassengerName()); @@ -101,7 +101,7 @@ public function testOrderedResultFromDqlQuery() { $routeId = $this->createPersistedRouteWithLegs(); - $route = $this->_em->createQuery("SELECT r, l FROM Doctrine\Tests\Models\Routing\RoutingRoute r JOIN r.legs l WHERE r.id = ?1") + $route = $this->em->createQuery("SELECT r, l FROM Doctrine\Tests\Models\Routing\RoutingRoute r JOIN r.legs l WHERE r.id = ?1") ->setParameter(1, $routeId) ->getSingleResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/OrderedJoinedTableInheritanceCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/OrderedJoinedTableInheritanceCollectionTest.php index 491464b2017..a06abeb7858 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OrderedJoinedTableInheritanceCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OrderedJoinedTableInheritanceCollectionTest.php @@ -16,11 +16,11 @@ protected function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(OJTIC_Pet::class), - $this->_em->getClassMetadata(OJTIC_Cat::class), - $this->_em->getClassMetadata(OJTIC_Dog::class), + $this->em->getClassMetadata(OJTIC_Pet::class), + $this->em->getClassMetadata(OJTIC_Cat::class), + $this->em->getClassMetadata(OJTIC_Dog::class), ] ); } catch (\Exception $e) { @@ -41,23 +41,23 @@ protected function setUp() $dog->children[] = $dog1; $dog->children[] = $dog2; - $this->_em->persist($dog); - $this->_em->persist($dog1); - $this->_em->persist($dog2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($dog); + $this->em->persist($dog1); + $this->em->persist($dog2); + $this->em->flush(); + $this->em->clear(); } public function testOrderdOneToManyCollection() { - $poofy = $this->_em->createQuery("SELECT p FROM Doctrine\Tests\ORM\Functional\OJTIC_Pet p WHERE p.name = 'Poofy'")->getSingleResult(); + $poofy = $this->em->createQuery("SELECT p FROM Doctrine\Tests\ORM\Functional\OJTIC_Pet p WHERE p.name = 'Poofy'")->getSingleResult(); self::assertEquals('Aari', $poofy->children[0]->getName()); self::assertEquals('Zampa', $poofy->children[1]->getName()); - $this->_em->clear(); + $this->em->clear(); - $result = $this->_em->createQuery( + $result = $this->em->createQuery( "SELECT p, c FROM Doctrine\Tests\ORM\Functional\OJTIC_Pet p JOIN p.children c WHERE p.name = 'Poofy'") ->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/PaginationTest.php b/tests/Doctrine/Tests/ORM/Functional/PaginationTest.php index 1c23641a8bb..dda6dc8ee31 100644 --- a/tests/Doctrine/Tests/ORM/Functional/PaginationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/PaginationTest.php @@ -36,7 +36,7 @@ protected function setUp() public function testCountSimpleWithoutJoin($useOutputWalkers) { $dql = 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $paginator = new Paginator($query); $paginator->setUseOutputWalkers($useOutputWalkers); @@ -49,7 +49,7 @@ public function testCountSimpleWithoutJoin($useOutputWalkers) public function testCountWithFetchJoin($useOutputWalkers) { $dql = 'SELECT u,g FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.groups g'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $paginator = new Paginator($query); $paginator->setUseOutputWalkers($useOutputWalkers); @@ -59,7 +59,7 @@ public function testCountWithFetchJoin($useOutputWalkers) public function testCountComplexWithOutputWalker() { $dql = 'SELECT g, COUNT(u.id) AS userCount FROM Doctrine\Tests\Models\CMS\CmsGroup g LEFT JOIN g.users u GROUP BY g HAVING COUNT(u.id) > 0'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $paginator = new Paginator($query); $paginator->setUseOutputWalkers(true); @@ -69,7 +69,7 @@ public function testCountComplexWithOutputWalker() public function testCountComplexWithoutOutputWalker() { $dql = 'SELECT g, COUNT(u.id) AS userCount FROM Doctrine\Tests\Models\CMS\CmsGroup g LEFT JOIN g.users u GROUP BY g HAVING COUNT(u.id) > 0'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $paginator = new Paginator($query); $paginator->setUseOutputWalkers(false); @@ -86,7 +86,7 @@ public function testCountComplexWithoutOutputWalker() public function testCountWithComplexScalarOrderBy($useOutputWalkers) { $dql = 'SELECT l FROM Doctrine\Tests\Models\Pagination\Logo l ORDER BY l.image_width * l.image_height DESC'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $paginator = new Paginator($query); $paginator->setUseOutputWalkers($useOutputWalkers); @@ -99,7 +99,7 @@ public function testCountWithComplexScalarOrderBy($useOutputWalkers) public function testIterateSimpleWithoutJoin($useOutputWalkers, $fetchJoinCollection) { $dql = 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $paginator = new Paginator($query, $fetchJoinCollection); $paginator->setUseOutputWalkers($useOutputWalkers); @@ -122,7 +122,7 @@ private function iterateWithOrderAsc($useOutputWalkers, $fetchJoinCollection, $b { // Ascending $dql = "$baseDql ASC"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $paginator = new Paginator($query, $fetchJoinCollection); $paginator->setUseOutputWalkers($useOutputWalkers); @@ -136,7 +136,7 @@ private function iterateWithOrderAscWithLimit($useOutputWalkers, $fetchJoinColle { // Ascending $dql = "$baseDql ASC"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); // With limit $query->setMaxResults(3); @@ -152,7 +152,7 @@ private function iterateWithOrderAscWithLimitAndOffset($useOutputWalkers, $fetch { // Ascending $dql = "$baseDql ASC"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); // With offset $query->setMaxResults(3)->setFirstResult(3); @@ -167,7 +167,7 @@ private function iterateWithOrderAscWithLimitAndOffset($useOutputWalkers, $fetch private function iterateWithOrderDesc($useOutputWalkers, $fetchJoinCollection, $baseDql, $checkField) { $dql = "$baseDql DESC"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $paginator = new Paginator($query, $fetchJoinCollection); $paginator->setUseOutputWalkers($useOutputWalkers); @@ -180,7 +180,7 @@ private function iterateWithOrderDesc($useOutputWalkers, $fetchJoinCollection, $ private function iterateWithOrderDescWithLimit($useOutputWalkers, $fetchJoinCollection, $baseDql, $checkField) { $dql = "$baseDql DESC"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); // With limit $query->setMaxResults(3); @@ -195,7 +195,7 @@ private function iterateWithOrderDescWithLimit($useOutputWalkers, $fetchJoinColl private function iterateWithOrderDescWithLimitAndOffset($useOutputWalkers, $fetchJoinCollection, $baseDql, $checkField) { $dql = "$baseDql DESC"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); // With offset $query->setMaxResults(3)->setFirstResult(3); @@ -279,7 +279,7 @@ public function testIterateSimpleWithOutputWalkerWithoutJoinWithComplexOrderAndL public function testIterateWithFetchJoin($useOutputWalkers) { $dql = 'SELECT u,g FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.groups g'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $paginator = new Paginator($query, true); $paginator->setUseOutputWalkers($useOutputWalkers); @@ -455,7 +455,7 @@ public function testIterateWithOutputWalkersWithFetchJoinWithComplexOrderByRefer public function testIterateComplexWithOutputWalker() { $dql = 'SELECT g, COUNT(u.id) AS userCount FROM Doctrine\Tests\Models\CMS\CmsGroup g LEFT JOIN g.users u GROUP BY g HAVING COUNT(u.id) > 0'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $paginator = new Paginator($query); $paginator->setUseOutputWalkers(true); @@ -465,7 +465,7 @@ public function testIterateComplexWithOutputWalker() public function testJoinedClassTableInheritance() { $dql = 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyManager c ORDER BY c.startDate'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $paginator = new Paginator($query); self::assertCount(1, $paginator->getIterator()); @@ -565,7 +565,7 @@ public function testIterateWithFetchJoinOneToManyWithOrderByColumnFromJoinedWith public function testCountWithCountSubqueryInWhereClauseWithOutputWalker() { $dql = "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE ((SELECT COUNT(s.id) FROM Doctrine\Tests\Models\CMS\CmsUser s) = 9) ORDER BY u.id desc"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $paginator = new Paginator($query, true); $paginator->setUseOutputWalkers(true); @@ -575,7 +575,7 @@ public function testCountWithCountSubqueryInWhereClauseWithOutputWalker() public function testIterateWithCountSubqueryInWhereClause() { $dql = "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE ((SELECT COUNT(s.id) FROM Doctrine\Tests\Models\CMS\CmsUser s) = 9) ORDER BY u.id desc"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $paginator = new Paginator($query, true); $paginator->setUseOutputWalkers(true); @@ -591,7 +591,7 @@ public function testDetectOutputWalker() { // This query works using the output walkers but causes an exception using the TreeWalker $dql = 'SELECT g, COUNT(u.id) AS userCount FROM Doctrine\Tests\Models\CMS\CmsGroup g LEFT JOIN g.users u GROUP BY g HAVING COUNT(u.id) > 0'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); // If the Paginator detects the custom output walker it should fall back to using the // Tree walkers for pagination, which leads to an exception. If the query works, the output walkers were used @@ -610,7 +610,7 @@ public function testDetectOutputWalker() public function testPaginationWithColumnAttributeNameDifference() { $dql = 'SELECT c FROM Doctrine\Tests\Models\Pagination\Company c ORDER BY c.id'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $paginator = new Paginator($query); $paginator->getIterator(); @@ -621,7 +621,7 @@ public function testPaginationWithColumnAttributeNameDifference() public function testCloneQuery() { $dql = 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $paginator = new Paginator($query); $paginator->getIterator(); @@ -632,7 +632,7 @@ public function testCloneQuery() public function testQueryWalkerIsKept() { $dql = 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [CustomPaginationTestTreeWalker::class]); $paginator = new Paginator($query, true); @@ -643,7 +643,7 @@ public function testQueryWalkerIsKept() public function testCountQueryStripsParametersInSelect() { - $query = $this->_em->createQuery( + $query = $this->em->createQuery( 'SELECT u, (CASE WHEN u.id < :vipMaxId THEN 1 ELSE 0 END) AS hidden promotedFirst FROM Doctrine\\Tests\\Models\\CMS\\CmsUser u WHERE u.id < :id or 1=1' @@ -676,7 +676,7 @@ public function testCountQueryStripsParametersInSelect() */ public function testPaginationWithSubSelectOrderByExpression($useOutputWalker, $fetchJoinCollection) { - $query = $this->_em->createQuery( + $query = $this->em->createQuery( "SELECT u, ( SELECT MAX(a.version) @@ -700,7 +700,7 @@ public function populate() $group = new CmsGroup(); $group->name = "group$j"; $groups[] = $group; - $this->_em->persist($group); + $this->em->persist($group); } for ($i = 0; $i < 9; $i++) { @@ -714,14 +714,14 @@ public function populate() for ($j = 0; $j < 3; $j++) { $user->addGroup($groups[$j]); } - $this->_em->persist($user); + $this->em->persist($user); for ($j = 0; $j < $i + 1; $j++) { $article = new CmsArticle(); $article->topic = "topic$i$j"; $article->text = "text$i$j"; $article->setAuthor($user); $article->version = 0; - $this->_em->persist($article); + $this->em->persist($article); } } @@ -739,14 +739,14 @@ public function populate() $department->company = $company; $company->departments[] = $department; } - $this->_em->persist($company); + $this->em->persist($company); } for ($i = 0; $i < 9; $i++) { $user = new User1(); $user->name = "name$i"; $user->email = "email$i"; - $this->_em->persist($user); + $this->em->persist($user); } $manager = new CompanyManager(); @@ -755,9 +755,9 @@ public function populate() $manager->setDepartment('IT'); $manager->setSalary(100000); - $this->_em->persist($manager); + $this->em->persist($manager); - $this->_em->flush(); + $this->em->flush(); } public function useOutputWalkers() diff --git a/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionCriteriaTest.php b/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionCriteriaTest.php index e19442a0070..68c83a752c8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionCriteriaTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionCriteriaTest.php @@ -27,8 +27,8 @@ protected function setUp() public function tearDown() { - if ($this->_em) { - $this->_em->getConfiguration()->setEntityNamespaces([]); + if ($this->em) { + $this->em->getConfiguration()->setEntityNamespaces([]); } parent::tearDown(); } @@ -37,7 +37,7 @@ public function loadTweetFixture() { $author = new TweetUser(); $author->name = 'ngal'; - $this->_em->persist($author); + $this->em->persist($author); $tweet1 = new Tweet(); $tweet1->content = 'Foo'; @@ -47,20 +47,20 @@ public function loadTweetFixture() $tweet2->content = 'Bar'; $author->addTweet($tweet2); - $this->_em->flush(); + $this->em->flush(); unset($author); unset($tweet1); unset($tweet2); - $this->_em->clear(); + $this->em->clear(); } public function loadQuoteFixture() { $user = new QuoteUser(); $user->name = 'mgal'; - $this->_em->persist($user); + $this->em->persist($user); $quote1 = new Group('quote1'); $user->groups->add($quote1); @@ -68,16 +68,16 @@ public function loadQuoteFixture() $quote2 = new Group('quote2'); $user->groups->add($quote2); - $this->_em->flush(); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); } public function testCanCountWithoutLoadingPersistentCollection() { $this->loadTweetFixture(); - $repository = $this->_em->getRepository(User::class); + $repository = $this->em->getRepository(User::class); $user = $repository->findOneBy(['name' => 'ngal']); $tweets = $user->tweets->matching(new Criteria()); diff --git a/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionTest.php index 5a70681046b..cbf3af0c839 100644 --- a/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionTest.php @@ -13,16 +13,16 @@ protected function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(PersistentCollectionHolder::class), - $this->_em->getClassMetadata(PersistentCollectionContent::class), + $this->em->getClassMetadata(PersistentCollectionHolder::class), + $this->em->getClassMetadata(PersistentCollectionContent::class), ] ); } catch (\Exception $e) { } - PersistentObject::setObjectManager($this->_em); + PersistentObject::setObjectManager($this->em); } public function testPersist() @@ -31,11 +31,11 @@ public function testPersist() $content = new PersistentCollectionContent('first element'); $collectionHolder->addElement($content); - $this->_em->persist($collectionHolder); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($collectionHolder); + $this->em->flush(); + $this->em->clear(); - $collectionHolder = $this->_em->find(PersistentCollectionHolder::class, $collectionHolder->getId()); + $collectionHolder = $this->em->find(PersistentCollectionHolder::class, $collectionHolder->getId()); $collectionHolder->getCollection(); $content = new PersistentCollectionContent('second element'); @@ -51,11 +51,11 @@ public function testExtraLazyIsEmptyDoesNotInitializeCollection() { $collectionHolder = new PersistentCollectionHolder(); - $this->_em->persist($collectionHolder); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($collectionHolder); + $this->em->flush(); + $this->em->clear(); - $collectionHolder = $this->_em->find(PersistentCollectionHolder::class, $collectionHolder->getId()); + $collectionHolder = $this->em->find(PersistentCollectionHolder::class, $collectionHolder->getId()); $collection = $collectionHolder->getRawCollection(); self::assertTrue($collection->isEmpty()); @@ -63,10 +63,10 @@ public function testExtraLazyIsEmptyDoesNotInitializeCollection() $collectionHolder->addElement(new PersistentCollectionContent()); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $collectionHolder = $this->_em->find(PersistentCollectionHolder::class, $collectionHolder->getId()); + $collectionHolder = $this->em->find(PersistentCollectionHolder::class, $collectionHolder->getId()); $collection = $collectionHolder->getRawCollection(); self::assertFalse($collection->isEmpty()); @@ -81,13 +81,13 @@ public function testMatchingDoesNotModifyTheGivenCriteria() { $collectionHolder = new PersistentCollectionHolder(); - $this->_em->persist($collectionHolder); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($collectionHolder); + $this->em->flush(); + $this->em->clear(); $criteria = new Criteria(); - $collectionHolder = $this->_em->find(PersistentCollectionHolder::class, $collectionHolder->getId()); + $collectionHolder = $this->em->find(PersistentCollectionHolder::class, $collectionHolder->getId()); $collectionHolder->getCollection()->matching($criteria); self::assertEmpty($criteria->getWhereExpression()); diff --git a/tests/Doctrine/Tests/ORM/Functional/PersistentObjectTest.php b/tests/Doctrine/Tests/ORM/Functional/PersistentObjectTest.php index 16e284732cc..eb3f0decff5 100644 --- a/tests/Doctrine/Tests/ORM/Functional/PersistentObjectTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/PersistentObjectTest.php @@ -18,15 +18,15 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(PersistentEntity::class), + $this->em->getClassMetadata(PersistentEntity::class), ] ); } catch (\Exception $e) { } - PersistentObject::setObjectManager($this->_em); + PersistentObject::setObjectManager($this->em); } public function testPersist() @@ -34,8 +34,8 @@ public function testPersist() $entity = new PersistentEntity(); $entity->setName("test"); - $this->_em->persist($entity); - $this->_em->flush(); + $this->em->persist($entity); + $this->em->flush(); $this->addToAssertionCount(1); } @@ -45,16 +45,16 @@ public function testFind() $entity = new PersistentEntity(); $entity->setName("test"); - $this->_em->persist($entity); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($entity); + $this->em->flush(); + $this->em->clear(); - $entity = $this->_em->find(PersistentEntity::class, $entity->getId()); + $entity = $this->em->find(PersistentEntity::class, $entity->getId()); self::assertEquals('test', $entity->getName()); $entity->setName('foobar'); - $this->_em->flush(); + $this->em->flush(); } public function testGetReference() @@ -62,11 +62,11 @@ public function testGetReference() $entity = new PersistentEntity(); $entity->setName("test"); - $this->_em->persist($entity); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($entity); + $this->em->flush(); + $this->em->clear(); - $entity = $this->_em->getReference(PersistentEntity::class, $entity->getId()); + $entity = $this->em->getReference(PersistentEntity::class, $entity->getId()); self::assertEquals('test', $entity->getName()); } @@ -77,11 +77,11 @@ public function testSetAssociation() $entity->setName("test"); $entity->setParent($entity); - $this->_em->persist($entity); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($entity); + $this->em->flush(); + $this->em->clear(); - $entity = $this->_em->getReference(PersistentEntity::class, $entity->getId()); + $entity = $this->em->getReference(PersistentEntity::class, $entity->getId()); self::assertSame($entity, $entity->getParent()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/PostFlushEventTest.php b/tests/Doctrine/Tests/ORM/Functional/PostFlushEventTest.php index e58bd129b45..3c76ae3209e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/PostFlushEventTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/PostFlushEventTest.php @@ -24,14 +24,14 @@ protected function setUp() $this->useModelSet('cms'); parent::setUp(); $this->listener = new PostFlushListener(); - $evm = $this->_em->getEventManager(); + $evm = $this->em->getEventManager(); $evm->addEventListener(Events::postFlush, $this->listener); } public function testListenerShouldBeNotified() { - $this->_em->persist($this->createNewValidUser()); - $this->_em->flush(); + $this->em->persist($this->createNewValidUser()); + $this->em->flush(); self::assertTrue($this->listener->wasNotified); } @@ -39,11 +39,11 @@ public function testListenerShouldNotBeNotifiedWhenFlushThrowsException() { $user = new CmsUser(); $user->username = 'dfreudenberger'; - $this->_em->persist($user); + $this->em->persist($user); $exceptionRaised = false; try { - $this->_em->flush(); + $this->em->flush(); } catch (\Exception $ex) { $exceptionRaised = true; } @@ -54,10 +54,10 @@ public function testListenerShouldNotBeNotifiedWhenFlushThrowsException() public function testListenerShouldReceiveEntityManagerThroughArgs() { - $this->_em->persist($this->createNewValidUser()); - $this->_em->flush(); + $this->em->persist($this->createNewValidUser()); + $this->em->flush(); $receivedEm = $this->listener->receivedArgs->getEntityManager(); - self::assertSame($this->_em, $receivedEm); + self::assertSame($this->em, $receivedEm); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/PostLoadEventTest.php b/tests/Doctrine/Tests/ORM/Functional/PostLoadEventTest.php index bd3228e05e5..10c0d869a35 100644 --- a/tests/Doctrine/Tests/ORM/Functional/PostLoadEventTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/PostLoadEventTest.php @@ -44,11 +44,11 @@ public function testLoadedEntityUsingFindShouldTriggerEvent() ->method('postLoad') ->will($this->returnValue(true)); - $eventManager = $this->_em->getEventManager(); + $eventManager = $this->em->getEventManager(); $eventManager->addEventListener([Events::postLoad], $mockListener); - $this->_em->find(CmsUser::class, $this->userId); + $this->em->find(CmsUser::class, $this->userId); } public function testLoadedEntityUsingQueryShouldTriggerEvent() @@ -61,11 +61,11 @@ public function testLoadedEntityUsingQueryShouldTriggerEvent() ->method('postLoad') ->will($this->returnValue(true)); - $eventManager = $this->_em->getEventManager(); + $eventManager = $this->em->getEventManager(); $eventManager->addEventListener([Events::postLoad], $mockListener); - $query = $this->_em->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :id'); + $query = $this->em->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = :id'); $query->setParameter('id', $this->userId); $query->getResult(); @@ -81,11 +81,11 @@ public function testLoadedAssociationToOneShouldTriggerEvent() ->method('postLoad') ->will($this->returnValue(true)); - $eventManager = $this->_em->getEventManager(); + $eventManager = $this->em->getEventManager(); $eventManager->addEventListener([Events::postLoad], $mockListener); - $query = $this->_em->createQuery('SELECT u, e FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e WHERE u.id = :id'); + $query = $this->em->createQuery('SELECT u, e FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e WHERE u.id = :id'); $query->setParameter('id', $this->userId); $query->getResult(); @@ -101,11 +101,11 @@ public function testLoadedAssociationToManyShouldTriggerEvent() ->method('postLoad') ->will($this->returnValue(true)); - $eventManager = $this->_em->getEventManager(); + $eventManager = $this->em->getEventManager(); $eventManager->addEventListener([Events::postLoad], $mockListener); - $query = $this->_em->createQuery('SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.phonenumbers p WHERE u.id = :id'); + $query = $this->em->createQuery('SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.phonenumbers p WHERE u.id = :id'); $query->setParameter('id', $this->userId); $query->getResult(); @@ -113,7 +113,7 @@ public function testLoadedAssociationToManyShouldTriggerEvent() public function testLoadedProxyEntityShouldTriggerEvent() { - $eventManager = $this->_em->getEventManager(); + $eventManager = $this->em->getEventManager(); // Should not be invoked during getReference call $mockListener = $this->createMock(PostLoadListener::class); @@ -125,7 +125,7 @@ public function testLoadedProxyEntityShouldTriggerEvent() $eventManager->addEventListener([Events::postLoad], $mockListener); - $userProxy = $this->_em->getReference(CmsUser::class, $this->userId); + $userProxy = $this->em->getReference(CmsUser::class, $this->userId); // Now deactivate original listener and attach new one $eventManager->removeEventListener([Events::postLoad], $mockListener); @@ -144,7 +144,7 @@ public function testLoadedProxyEntityShouldTriggerEvent() public function testLoadedProxyPartialShouldTriggerEvent() { - $eventManager = $this->_em->getEventManager(); + $eventManager = $this->em->getEventManager(); // Should not be invoked during getReference call $mockListener = $this->createMock(PostLoadListener::class); @@ -157,7 +157,7 @@ public function testLoadedProxyPartialShouldTriggerEvent() $eventManager->addEventListener([Events::postLoad], $mockListener); - $query = $this->_em->createQuery('SELECT PARTIAL u.{id, name}, p FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.phonenumbers p WHERE u.id = :id'); + $query = $this->em->createQuery('SELECT PARTIAL u.{id, name}, p FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.phonenumbers p WHERE u.id = :id'); $query->setParameter('id', $this->userId); $query->getResult(); @@ -165,7 +165,7 @@ public function testLoadedProxyPartialShouldTriggerEvent() public function testLoadedProxyAssociationToOneShouldTriggerEvent() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); $mockListener = $this->createMock(PostLoadListener::class); @@ -175,7 +175,7 @@ public function testLoadedProxyAssociationToOneShouldTriggerEvent() ->method('postLoad') ->will($this->returnValue(true)); - $eventManager = $this->_em->getEventManager(); + $eventManager = $this->em->getEventManager(); $eventManager->addEventListener([Events::postLoad], $mockListener); @@ -186,7 +186,7 @@ public function testLoadedProxyAssociationToOneShouldTriggerEvent() public function testLoadedProxyAssociationToManyShouldTriggerEvent() { - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); $mockListener = $this->createMock(PostLoadListener::class); @@ -196,7 +196,7 @@ public function testLoadedProxyAssociationToManyShouldTriggerEvent() ->method('postLoad') ->will($this->returnValue(true)); - $eventManager = $this->_em->getEventManager(); + $eventManager = $this->em->getEventManager(); $eventManager->addEventListener([Events::postLoad], $mockListener); @@ -211,9 +211,9 @@ public function testLoadedProxyAssociationToManyShouldTriggerEvent() public function testAssociationsArePopulatedWhenEventIsFired() { $checkerListener = new PostLoadListenerCheckAssociationsArePopulated(); - $this->_em->getEventManager()->addEventListener([Events::postLoad], $checkerListener); + $this->em->getEventManager()->addEventListener([Events::postLoad], $checkerListener); - $qb = $this->_em->getRepository(CmsUser::class)->createQueryBuilder('u'); + $qb = $this->em->getRepository(CmsUser::class)->createQueryBuilder('u'); $qb->leftJoin('u.email', 'email'); $qb->addSelect('email'); $qb->getQuery()->getSingleResult(); @@ -227,11 +227,11 @@ public function testAssociationsArePopulatedWhenEventIsFired() */ public function testEventRaisedCorrectTimesWhenOtherEntityLoadedInEventHandler() { - $eventManager = $this->_em->getEventManager(); + $eventManager = $this->em->getEventManager(); $listener = new PostLoadListenerLoadEntityInEventHandler(); $eventManager->addEventListener([Events::postLoad], $listener); - $this->_em->find(CmsUser::class, $this->userId); + $this->em->find(CmsUser::class, $this->userId); self::assertSame(1, $listener->countHandledEvents(CmsUser::class), CmsUser::class . ' should be handled once!'); self::assertSame(1, $listener->countHandledEvents(CmsEmail::class), CmsEmail::class . ' should be handled once!'); } @@ -264,12 +264,12 @@ private function loadFixture() $user->addPhonenumber($ph1); $user->addPhonenumber($ph2); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); $this->userId = $user->getId(); - $this->_em->clear(); + $this->em->clear(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php b/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php index 8532e00b56b..6657f183352 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php @@ -31,15 +31,15 @@ protected function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(CmsUser::class), - $this->_em->getClassMetadata(CmsTag::class), - $this->_em->getClassMetadata(CmsPhonenumber::class), - $this->_em->getClassMetadata(CmsArticle::class), - $this->_em->getClassMetadata(CmsAddress::class), - $this->_em->getClassMetadata(CmsEmail::class), - $this->_em->getClassMetadata(CmsGroup::class), + $this->em->getClassMetadata(CmsUser::class), + $this->em->getClassMetadata(CmsTag::class), + $this->em->getClassMetadata(CmsPhonenumber::class), + $this->em->getClassMetadata(CmsArticle::class), + $this->em->getClassMetadata(CmsAddress::class), + $this->em->getClassMetadata(CmsEmail::class), + $this->em->getClassMetadata(CmsGroup::class), ] ); } catch (\Exception $e) { @@ -47,9 +47,9 @@ protected function setUp() $this->user = new CmsUser(); $this->user->username = 'ocramius'; $this->user->name = 'Marco'; - $this->_em->persist($this->user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($this->user); + $this->em->flush(); + $this->em->clear(); } /** @@ -58,36 +58,42 @@ protected function setUp() public function testPersistUpdate() { // Considering case (a) - $proxy = $this->_em->getProxyFactory()->getProxy(CmsUser::class, ['id' => 123]); + $proxy = $this->em->getProxyFactory()->getProxy(CmsUser::class, ['id' => 123]); + $proxy->__isInitialized__ = true; $proxy->id = null; $proxy->username = 'ocra'; $proxy->name = 'Marco'; - $this->_em->persist($proxy); - $this->_em->flush(); + + $this->em->persist($proxy); + $this->em->flush(); + self::assertNotNull($proxy->getId()); + $proxy->name = 'Marco Pivetta'; - $this->_em->getUnitOfWork() - ->computeChangeSet($this->_em->getClassMetadata(CmsUser::class), $proxy); - self::assertNotEmpty($this->_em->getUnitOfWork()->getEntityChangeSet($proxy)); - self::assertEquals('Marco Pivetta', $this->_em->find(CmsUser::class, $proxy->getId())->name); - $this->_em->remove($proxy); - $this->_em->flush(); + + $this->em->getUnitOfWork() + ->computeChangeSet($this->em->getClassMetadata(CmsUser::class), $proxy); + self::assertNotEmpty($this->em->getUnitOfWork()->getEntityChangeSet($proxy)); + self::assertEquals('Marco Pivetta', $this->em->find(CmsUser::class, $proxy->getId())->name); + + $this->em->remove($proxy); + $this->em->flush(); } public function testEntityWithIdentifier() { $userId = $this->user->getId(); /* @var $uninitializedProxy CmsUserProxy */ - $uninitializedProxy = $this->_em->getReference(CmsUser::class, $userId); + $uninitializedProxy = $this->em->getReference(CmsUser::class, $userId); self::assertInstanceOf(CmsUserProxy::class, $uninitializedProxy); - $this->_em->persist($uninitializedProxy); - $this->_em->flush($uninitializedProxy); + $this->em->persist($uninitializedProxy); + $this->em->flush($uninitializedProxy); self::assertFalse($uninitializedProxy->__isInitialized(), 'Proxy didn\'t get initialized during flush operations'); self::assertEquals($userId, $uninitializedProxy->getId()); - $this->_em->remove($uninitializedProxy); - $this->_em->flush(); + $this->em->remove($uninitializedProxy); + $this->em->flush(); } /** @@ -95,17 +101,20 @@ public function testEntityWithIdentifier() */ public function testProxyAsDqlParameterPersist() { - $proxy = $this->_em->getProxyFactory()->getProxy(CmsUser::class, ['id' => $this->user->getId()] - ); + $proxy = $this->em->getProxyFactory()->getProxy(CmsUser::class, ['id' => $this->user->getId()]); + $proxy->id = $this->user->getId(); + $result = $this - ->_em + ->em ->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u = ?1') ->setParameter(1, $proxy) ->getSingleResult(); + self::assertSame($this->user->getId(), $result->getId()); - $this->_em->remove($proxy); - $this->_em->flush(); + + $this->em->remove($proxy); + $this->em->flush(); } /** @@ -113,28 +122,38 @@ public function testProxyAsDqlParameterPersist() */ public function testFindWithProxyName() { - $result = $this->_em->find(CmsUserProxy::class, $this->user->getId()); + $result = $this->em->find(CmsUserProxy::class, $this->user->getId()); + self::assertSame($this->user->getId(), $result->getId()); - $this->_em->clear(); + + $this->em->clear(); - $result = $this->_em->getReference(CmsUserProxy::class, $this->user->getId()); + $result = $this->em->getReference(CmsUserProxy::class, $this->user->getId()); + self::assertSame($this->user->getId(), $result->getId()); - $this->_em->clear(); + + $this->em->clear(); - $result = $this->_em->getRepository(CmsUserProxy::class)->findOneBy(['username' => $this->user->username]); + $result = $this->em->getRepository(CmsUserProxy::class)->findOneBy([ + 'username' => $this->user->username + ]); + self::assertSame($this->user->getId(), $result->getId()); - $this->_em->clear(); + + $this->em->clear(); - $result = $this->_em + $result = $this->em ->createQuery('SELECT u FROM Doctrine\Tests\Proxies\__CG__\Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1') ->setParameter(1, $this->user->getId()) ->getSingleResult(); + self::assertSame($this->user->getId(), $result->getId()); - $this->_em->clear(); + + $this->em->clear(); } protected function tearDown() { - $this->_em->createQuery('DELETE FROM Doctrine\Tests\Models\CMS\CmsUser u')->execute(); + $this->em->createQuery('DELETE FROM Doctrine\Tests\Models\CMS\CmsUser u')->execute(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/QueryCacheTest.php b/tests/Doctrine/Tests/ORM/Functional/QueryCacheTest.php index 596c58028ac..cbc6b657894 100644 --- a/tests/Doctrine/Tests/ORM/Functional/QueryCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/QueryCacheTest.php @@ -43,7 +43,7 @@ private function getCacheSize(ArrayCache $cache) public function testQueryCache_DependsOnHints() { - $query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux'); + $query = $this->em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux'); $cache = new ArrayCache(); $query->setQueryCacheDriver($cache); @@ -105,9 +105,9 @@ public function testQueryCache_DependsOnHydrationMode($query) public function testQueryCache_NoHitSaveParserResult() { - $this->_em->getConfiguration()->setQueryCacheImpl(new ArrayCache()); + $this->em->getConfiguration()->setQueryCacheImpl(new ArrayCache()); - $query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux'); + $query = $this->em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux'); $cache = $this->createMock(Cache::class); @@ -123,9 +123,9 @@ public function testQueryCache_NoHitSaveParserResult() public function testQueryCache_HitDoesNotSaveParserResult() { - $this->_em->getConfiguration()->setQueryCacheImpl(new ArrayCache()); + $this->em->getConfiguration()->setQueryCacheImpl(new ArrayCache()); - $query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux'); + $query = $this->em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux'); $sqlExecMock = $this->getMockBuilder(AbstractSqlExecutor::class) ->setMethods(['execute']) diff --git a/tests/Doctrine/Tests/ORM/Functional/QueryDqlFunctionTest.php b/tests/Doctrine/Tests/ORM/Functional/QueryDqlFunctionTest.php index b7f4fe0484c..a47a1a0073d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/QueryDqlFunctionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/QueryDqlFunctionTest.php @@ -22,7 +22,7 @@ protected function setUp() public function testAggregateSum() { - $salarySum = $this->_em->createQuery('SELECT SUM(m.salary) AS salary FROM Doctrine\Tests\Models\Company\CompanyManager m') + $salarySum = $this->em->createQuery('SELECT SUM(m.salary) AS salary FROM Doctrine\Tests\Models\Company\CompanyManager m') ->getSingleResult(); self::assertEquals(1500000, $salarySum['salary']); @@ -30,7 +30,7 @@ public function testAggregateSum() public function testAggregateAvg() { - $salaryAvg = $this->_em->createQuery('SELECT AVG(m.salary) AS salary FROM Doctrine\Tests\Models\Company\CompanyManager m') + $salaryAvg = $this->em->createQuery('SELECT AVG(m.salary) AS salary FROM Doctrine\Tests\Models\Company\CompanyManager m') ->getSingleResult(); self::assertEquals(375000, round($salaryAvg['salary'], 0)); @@ -38,7 +38,7 @@ public function testAggregateAvg() public function testAggregateMin() { - $salary = $this->_em->createQuery('SELECT MIN(m.salary) AS salary FROM Doctrine\Tests\Models\Company\CompanyManager m') + $salary = $this->em->createQuery('SELECT MIN(m.salary) AS salary FROM Doctrine\Tests\Models\Company\CompanyManager m') ->getSingleResult(); self::assertEquals(100000, $salary['salary']); @@ -46,7 +46,7 @@ public function testAggregateMin() public function testAggregateMax() { - $salary = $this->_em->createQuery('SELECT MAX(m.salary) AS salary FROM Doctrine\Tests\Models\Company\CompanyManager m') + $salary = $this->em->createQuery('SELECT MAX(m.salary) AS salary FROM Doctrine\Tests\Models\Company\CompanyManager m') ->getSingleResult(); self::assertEquals(800000, $salary['salary']); @@ -54,7 +54,7 @@ public function testAggregateMax() public function testAggregateCount() { - $managerCount = $this->_em->createQuery('SELECT COUNT(m.id) AS managers FROM Doctrine\Tests\Models\Company\CompanyManager m') + $managerCount = $this->em->createQuery('SELECT COUNT(m.id) AS managers FROM Doctrine\Tests\Models\Company\CompanyManager m') ->getSingleResult(); self::assertEquals(4, $managerCount['managers']); @@ -62,7 +62,7 @@ public function testAggregateCount() public function testFunctionAbs() { - $result = $this->_em->createQuery('SELECT m, ABS(m.salary * -1) AS abs FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') + $result = $this->em->createQuery('SELECT m, ABS(m.salary * -1) AS abs FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') ->getResult(); self::assertEquals(4, count($result)); @@ -74,7 +74,7 @@ public function testFunctionAbs() public function testFunctionConcat() { - $arg = $this->_em->createQuery('SELECT m, CONCAT(m.name, m.department) AS namedep FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') + $arg = $this->em->createQuery('SELECT m, CONCAT(m.name, m.department) AS namedep FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') ->getArrayResult(); self::assertEquals(4, count($arg)); @@ -86,7 +86,7 @@ public function testFunctionConcat() public function testFunctionLength() { - $result = $this->_em->createQuery('SELECT m, LENGTH(CONCAT(m.name, m.department)) AS namedeplength FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') + $result = $this->em->createQuery('SELECT m, LENGTH(CONCAT(m.name, m.department)) AS namedeplength FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') ->getArrayResult(); self::assertEquals(4, count($result)); @@ -101,7 +101,7 @@ public function testFunctionLocate() $dql = "SELECT m, LOCATE('e', LOWER(m.name)) AS loc, LOCATE('e', LOWER(m.name), 7) AS loc2 ". "FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC"; - $result = $this->_em->createQuery($dql) + $result = $this->em->createQuery($dql) ->getArrayResult(); self::assertEquals(4, count($result)); @@ -117,7 +117,7 @@ public function testFunctionLocate() public function testFunctionLower() { - $result = $this->_em->createQuery("SELECT m, LOWER(m.name) AS lowername FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC") + $result = $this->em->createQuery("SELECT m, LOWER(m.name) AS lowername FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC") ->getArrayResult(); self::assertEquals(4, count($result)); @@ -129,7 +129,7 @@ public function testFunctionLower() public function testFunctionMod() { - $result = $this->_em->createQuery("SELECT m, MOD(m.salary, 3500) AS amod FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC") + $result = $this->em->createQuery("SELECT m, MOD(m.salary, 3500) AS amod FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC") ->getArrayResult(); self::assertEquals(4, count($result)); @@ -141,7 +141,7 @@ public function testFunctionMod() public function testFunctionSqrt() { - $result = $this->_em->createQuery("SELECT m, SQRT(m.salary) AS sqrtsalary FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC") + $result = $this->em->createQuery("SELECT m, SQRT(m.salary) AS sqrtsalary FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC") ->getArrayResult(); self::assertEquals(4, count($result)); @@ -153,7 +153,7 @@ public function testFunctionSqrt() public function testFunctionUpper() { - $result = $this->_em->createQuery("SELECT m, UPPER(m.name) AS uppername FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC") + $result = $this->em->createQuery("SELECT m, UPPER(m.name) AS uppername FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC") ->getArrayResult(); self::assertEquals(4, count($result)); @@ -168,7 +168,7 @@ public function testFunctionSubstring() $dql = "SELECT m, SUBSTRING(m.name, 1, 3) AS str1, SUBSTRING(m.name, 5) AS str2 ". "FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.name"; - $result = $this->_em->createQuery($dql) + $result = $this->em->createQuery($dql) ->getArrayResult(); self::assertEquals(4, count($result)); @@ -189,7 +189,7 @@ public function testFunctionTrim() " TRIM(LEADING '.' FROM m.name) AS str2, TRIM(CONCAT(' ', CONCAT(m.name, ' '))) AS str3 ". "FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC"; - $result = $this->_em->createQuery($dql)->getArrayResult(); + $result = $this->em->createQuery($dql)->getArrayResult(); self::assertEquals(4, count($result)); self::assertEquals('Roman B', $result[0]['str1']); @@ -208,7 +208,7 @@ public function testFunctionTrim() public function testOperatorAdd() { - $result = $this->_em->createQuery('SELECT m, m.salary+2500 AS add FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') + $result = $this->em->createQuery('SELECT m, m.salary+2500 AS add FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') ->getResult(); self::assertEquals(4, count($result)); @@ -220,7 +220,7 @@ public function testOperatorAdd() public function testOperatorSub() { - $result = $this->_em->createQuery('SELECT m, m.salary-2500 AS sub FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') + $result = $this->em->createQuery('SELECT m, m.salary-2500 AS sub FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') ->getResult(); self::assertEquals(4, count($result)); @@ -232,7 +232,7 @@ public function testOperatorSub() public function testOperatorMultiply() { - $result = $this->_em->createQuery('SELECT m, m.salary*2 AS op FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') + $result = $this->em->createQuery('SELECT m, m.salary*2 AS op FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') ->getResult(); self::assertEquals(4, count($result)); @@ -247,7 +247,7 @@ public function testOperatorMultiply() */ public function testOperatorDiv() { - $result = $this->_em->createQuery('SELECT m, (m.salary/0.5) AS op FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') + $result = $this->em->createQuery('SELECT m, (m.salary/0.5) AS op FROM Doctrine\Tests\Models\Company\CompanyManager m ORDER BY m.salary ASC') ->getResult(); self::assertEquals(4, count($result)); @@ -259,7 +259,7 @@ public function testOperatorDiv() public function testConcatFunction() { - $arg = $this->_em->createQuery('SELECT CONCAT(m.name, m.department) AS namedep FROM Doctrine\Tests\Models\Company\CompanyManager m order by namedep desc') + $arg = $this->em->createQuery('SELECT CONCAT(m.name, m.department) AS namedep FROM Doctrine\Tests\Models\Company\CompanyManager m order by namedep desc') ->getArrayResult(); self::assertEquals(4, count($arg)); @@ -274,12 +274,12 @@ public function testConcatFunction() */ public function testDateDiff() { - $query = $this->_em->createQuery("SELECT DATE_DIFF(CURRENT_TIMESTAMP(), DATE_ADD(CURRENT_TIMESTAMP(), 10, 'day')) AS diff FROM Doctrine\Tests\Models\Company\CompanyManager m"); + $query = $this->em->createQuery("SELECT DATE_DIFF(CURRENT_TIMESTAMP(), DATE_ADD(CURRENT_TIMESTAMP(), 10, 'day')) AS diff FROM Doctrine\Tests\Models\Company\CompanyManager m"); $arg = $query->getArrayResult(); self::assertEquals(-10, $arg[0]['diff'], "Should be roughly -10 (or -9)", 1); - $query = $this->_em->createQuery("SELECT DATE_DIFF(DATE_ADD(CURRENT_TIMESTAMP(), 10, 'day'), CURRENT_TIMESTAMP()) AS diff FROM Doctrine\Tests\Models\Company\CompanyManager m"); + $query = $this->em->createQuery("SELECT DATE_DIFF(DATE_ADD(CURRENT_TIMESTAMP(), 10, 'day'), CURRENT_TIMESTAMP()) AS diff FROM Doctrine\Tests\Models\Company\CompanyManager m"); $arg = $query->getArrayResult(); self::assertEquals(10, $arg[0]['diff'], "Should be roughly 10 (or 9)", 1); @@ -290,12 +290,12 @@ public function testDateDiff() */ public function testDateAdd() { - $arg = $this->_em->createQuery("SELECT DATE_ADD(CURRENT_TIMESTAMP(), 10, 'day') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m") + $arg = $this->em->createQuery("SELECT DATE_ADD(CURRENT_TIMESTAMP(), 10, 'day') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m") ->getArrayResult(); self::assertTrue(strtotime($arg[0]['add']) > 0); - $arg = $this->_em->createQuery("SELECT DATE_ADD(CURRENT_TIMESTAMP(), 10, 'month') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m") + $arg = $this->em->createQuery("SELECT DATE_ADD(CURRENT_TIMESTAMP(), 10, 'month') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m") ->getArrayResult(); self::assertTrue(strtotime($arg[0]['add']) > 0); @@ -304,7 +304,7 @@ public function testDateAdd() public function testDateAddSecond() { $dql = "SELECT CURRENT_TIMESTAMP() now, DATE_ADD(CURRENT_TIMESTAMP(), 10, 'second') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m"; - $query = $this->_em->createQuery($dql)->setMaxResults(1); + $query = $this->em->createQuery($dql)->setMaxResults(1); $result = $query->getArrayResult(); self::assertCount(1, $result); @@ -323,12 +323,12 @@ public function testDateAddSecond() */ public function testDateSub() { - $arg = $this->_em->createQuery("SELECT DATE_SUB(CURRENT_TIMESTAMP(), 10, 'day') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m") + $arg = $this->em->createQuery("SELECT DATE_SUB(CURRENT_TIMESTAMP(), 10, 'day') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m") ->getArrayResult(); self::assertTrue(strtotime($arg[0]['add']) > 0); - $arg = $this->_em->createQuery("SELECT DATE_SUB(CURRENT_TIMESTAMP(), 10, 'month') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m") + $arg = $this->em->createQuery("SELECT DATE_SUB(CURRENT_TIMESTAMP(), 10, 'month') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m") ->getArrayResult(); self::assertTrue(strtotime($arg[0]['add']) > 0); @@ -345,7 +345,7 @@ public function testBitOrComparison() 'FROM Doctrine\Tests\Models\Company\CompanyManager m ' . 'ORDER BY ' . 'm.id ' ; - $result = $this->_em->createQuery($dql)->getArrayResult(); + $result = $this->em->createQuery($dql)->getArrayResult(); self::assertEquals(4 | 2, $result[0]['bit_or']); self::assertEquals(4 | 2, $result[1]['bit_or']); @@ -369,7 +369,7 @@ public function testBitAndComparison() 'FROM Doctrine\Tests\Models\Company\CompanyManager m ' . 'ORDER BY ' . 'm.id ' ; - $result = $this->_em->createQuery($dql)->getArrayResult(); + $result = $this->em->createQuery($dql)->getArrayResult(); self::assertEquals(4 & 2, $result[0]['bit_and']); self::assertEquals(4 & 2, $result[1]['bit_and']); @@ -408,11 +408,11 @@ protected function generateFixture() $manager4->setDepartment('Administration'); $manager4->setSalary(800000); - $this->_em->persist($manager1); - $this->_em->persist($manager2); - $this->_em->persist($manager3); - $this->_em->persist($manager4); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($manager1); + $this->em->persist($manager2); + $this->em->persist($manager3); + $this->em->persist($manager4); + $this->em->flush(); + $this->em->clear(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/QueryTest.php b/tests/Doctrine/Tests/ORM/Functional/QueryTest.php index bf2c2ae7bcc..443f50b4457 100644 --- a/tests/Doctrine/Tests/ORM/Functional/QueryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/QueryTest.php @@ -37,11 +37,11 @@ public function testSimpleQueries() $user->name = 'Guilherme'; $user->username = 'gblanco'; $user->status = 'developer'; - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery("select u, upper(u.name) from Doctrine\Tests\Models\CMS\CmsUser u where u.username = 'gblanco'"); + $query = $this->em->createQuery("select u, upper(u.name) from Doctrine\Tests\Models\CMS\CmsUser u where u.username = 'gblanco'"); $result = $query->getResult(); @@ -67,7 +67,7 @@ public function testSimpleQueries() self::assertEquals('developer', $scalarResult[0]['u_status']); self::assertEquals('GUILHERME', $scalarResult[0][1]); - $query = $this->_em->createQuery("select upper(u.name) from Doctrine\Tests\Models\CMS\CmsUser u where u.username = 'gblanco'"); + $query = $this->em->createQuery("select upper(u.name) from Doctrine\Tests\Models\CMS\CmsUser u where u.username = 'gblanco'"); self::assertEquals('GUILHERME', $query->getSingleScalarResult()); } @@ -88,15 +88,16 @@ public function testJoinQueries() $article2->text = "This is an introduction to Symfony 2."; $user->addArticle($article2); - $this->_em->persist($user); - $this->_em->persist($article1); - $this->_em->persist($article2); + $this->em->persist($user); + $this->em->persist($article1); + $this->em->persist($article2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery('select u, a from ' . CmsUser::class . ' u join u.articles a ORDER BY a.topic'); + $query = $this->em->createQuery('select u, a from ' . CmsUser::class . ' u join u.articles a ORDER BY a.topic'); $users = $query->getResult(); + self::assertEquals(1, count($users)); self::assertInstanceOf(CmsUser::class, $users[0]); self::assertEquals(2, count($users[0]->articles)); @@ -110,11 +111,11 @@ public function testUsingZeroBasedQueryParameterShouldWork() $user->name = 'Jonathan'; $user->username = 'jwage'; $user->status = 'developer'; - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); - $q = $this->_em->createQuery('SELECT u FROM ' . CmsUser::class . ' u WHERE u.username = ?0'); + $q = $this->em->createQuery('SELECT u FROM ' . CmsUser::class . ' u WHERE u.username = ?0'); $q->setParameter(0, 'jwage'); $user = $q->getSingleResult(); @@ -126,7 +127,7 @@ public function testUsingUnknownQueryParameterShouldThrowException() $this->expectException(QueryException::class); $this->expectExceptionMessage('Invalid parameter: token 2 is not defined in the query.'); - $q = $this->_em->createQuery('SELECT u FROM ' . CmsUser::class . ' u WHERE u.name = ?1'); + $q = $this->em->createQuery('SELECT u FROM ' . CmsUser::class . ' u WHERE u.name = ?1'); $q->setParameter(2, 'jwage'); $user = $q->getSingleResult(); } @@ -136,7 +137,7 @@ public function testTooManyParametersShouldThrowException() $this->expectException(QueryException::class); $this->expectExceptionMessage('Too many parameters: the query defines 1 parameters and you bound 2'); - $q = $this->_em->createQuery('SELECT u FROM ' . CmsUser::class . ' u WHERE u.name = ?1'); + $q = $this->em->createQuery('SELECT u FROM ' . CmsUser::class . ' u WHERE u.name = ?1'); $q->setParameter(1, 'jwage'); $q->setParameter(2, 'jwage'); @@ -148,7 +149,7 @@ public function testTooFewParametersShouldThrowException() $this->expectException(QueryException::class); $this->expectExceptionMessage('Too few parameters: the query defines 1 parameters but you only bound 0'); - $this->_em->createQuery('SELECT u FROM ' . CmsUser::class . ' u WHERE u.name = ?1') + $this->em->createQuery('SELECT u FROM ' . CmsUser::class . ' u WHERE u.name = ?1') ->getSingleResult(); } @@ -156,7 +157,7 @@ public function testInvalidInputParameterThrowsException() { $this->expectException(QueryException::class); - $this->_em->createQuery('SELECT u FROM ' . CmsUser::class . ' u WHERE u.name = ?') + $this->em->createQuery('SELECT u FROM ' . CmsUser::class . ' u WHERE u.name = ?') ->setParameter(1, 'jwage') ->getSingleResult(); } @@ -167,7 +168,7 @@ public function testSetParameters() $parameters->add(new Parameter(1, 'jwage')); $parameters->add(new Parameter(2, 'active')); - $this->_em->createQuery('SELECT u FROM ' . CmsUser::class . ' u WHERE u.name = ?1 AND u.status = ?2') + $this->em->createQuery('SELECT u FROM ' . CmsUser::class . ' u WHERE u.name = ?1 AND u.status = ?2') ->setParameters($parameters) ->getResult(); @@ -177,7 +178,7 @@ public function testSetParameters() self::assertSame( $parameters->map($extractValue)->toArray(), - $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery]['params'] + $this->sqlLoggerStack->queries[$this->sqlLoggerStack->currentQuery]['params'] ); } @@ -185,13 +186,13 @@ public function testSetParametersBackwardsCompatible() { $parameters = [1 => 'jwage', 2 => 'active']; - $this->_em->createQuery('SELECT u FROM ' . CmsUser::class . ' u WHERE u.name = ?1 AND u.status = ?2') + $this->em->createQuery('SELECT u FROM ' . CmsUser::class . ' u WHERE u.name = ?1 AND u.status = ?2') ->setParameters($parameters) ->getResult(); self::assertSame( array_values($parameters), - $this->_sqlLoggerStack->queries[$this->_sqlLoggerStack->currentQuery]['params'] + $this->sqlLoggerStack->queries[$this->sqlLoggerStack->currentQuery]['params'] ); } @@ -208,14 +209,14 @@ public function testIterateResultAsArrayAndParams() $article2->topic = "Symfony 2"; $article2->text = "This is an introduction to Symfony 2."; - $this->_em->persist($article1); - $this->_em->persist($article2); + $this->em->persist($article1); + $this->em->persist($article2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); $articleId = $article1->id; - $query = $this->_em->createQuery('select a from ' . CmsArticle::class . ' a WHERE a.topic = ?1'); + $query = $this->em->createQuery('select a from ' . CmsArticle::class . ' a WHERE a.topic = ?1'); $articles = $query->iterate(new ArrayCollection([new Parameter(1, 'Doctrine 2')]), Query::HYDRATE_ARRAY); $found = []; @@ -250,13 +251,13 @@ public function testIterateResult_IterativelyBuildUpUnitOfWork() $article2->topic = "Symfony 2"; $article2->text = "This is an introduction to Symfony 2."; - $this->_em->persist($article1); - $this->_em->persist($article2); + $this->em->persist($article1); + $this->em->persist($article2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery('select a from ' . CmsArticle::class . ' a'); + $query = $this->em->createQuery('select a from ' . CmsArticle::class . ' a'); $articles = $query->iterate(); $iteratedCount = 0; @@ -266,7 +267,7 @@ public function testIterateResult_IterativelyBuildUpUnitOfWork() $article = $row[0]; $topics[] = $article->topic; - $identityMap = $this->_em->getUnitOfWork()->getIdentityMap(); + $identityMap = $this->em->getUnitOfWork()->getIdentityMap(); $identityMapCount = count($identityMap[CmsArticle::class]); self::assertTrue($identityMapCount>$iteratedCount); @@ -276,8 +277,8 @@ public function testIterateResult_IterativelyBuildUpUnitOfWork() self::assertSame(["Doctrine 2", "Symfony 2"], $topics); self::assertSame(2, $iteratedCount); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } public function testIterateResultClearEveryCycle() @@ -290,13 +291,13 @@ public function testIterateResultClearEveryCycle() $article2->topic = "Symfony 2"; $article2->text = "This is an introduction to Symfony 2."; - $this->_em->persist($article1); - $this->_em->persist($article2); + $this->em->persist($article1); + $this->em->persist($article2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a"); + $query = $this->em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a"); $articles = $query->iterate(); $iteratedCount = 0; @@ -305,7 +306,7 @@ public function testIterateResultClearEveryCycle() $article = $row[0]; $topics[] = $article->topic; - $this->_em->clear(); + $this->em->clear(); $iteratedCount++; } @@ -313,7 +314,7 @@ public function testIterateResultClearEveryCycle() self::assertSame(["Doctrine 2", "Symfony 2"], $topics); self::assertSame(2, $iteratedCount); - $this->_em->flush(); + $this->em->flush(); } /** @@ -321,7 +322,7 @@ public function testIterateResultClearEveryCycle() */ public function testIterateResult_FetchJoinedCollection_ThrowsException() { - $query = $this->_em->createQuery("SELECT u, a FROM ' . CmsUser::class . ' u JOIN u.articles a"); + $query = $this->em->createQuery("SELECT u, a FROM ' . CmsUser::class . ' u JOIN u.articles a"); $articles = $query->iterate(); } @@ -330,7 +331,7 @@ public function testIterateResult_FetchJoinedCollection_ThrowsException() */ public function testGetSingleResultThrowsExceptionOnNoResult() { - $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a") + $this->em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a") ->getSingleResult(); } @@ -339,7 +340,7 @@ public function testGetSingleResultThrowsExceptionOnNoResult() */ public function testGetSingleScalarResultThrowsExceptionOnNoResult() { - $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a") + $this->em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a") ->getSingleScalarResult(); } @@ -363,14 +364,14 @@ public function testGetSingleScalarResultThrowsExceptionOnNonUniqueResult() $article2->text = "This is an introduction to Symfony 2."; $user->addArticle($article2); - $this->_em->persist($user); - $this->_em->persist($article1); - $this->_em->persist($article2); + $this->em->persist($user); + $this->em->persist($article1); + $this->em->persist($article2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a") + $this->em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a") ->getSingleScalarResult(); } @@ -381,13 +382,13 @@ public function testModifiedLimitQuery() $user->name = 'Guilherme' . $i; $user->username = 'gblanco' . $i; $user->status = 'developer'; - $this->_em->persist($user); + $this->em->persist($user); } - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $data = $this->_em->createQuery('SELECT u FROM ' . CmsUser::class . ' u') + $data = $this->em->createQuery('SELECT u FROM ' . CmsUser::class . ' u') ->setFirstResult(1) ->setMaxResults(2) ->getResult(); @@ -396,7 +397,7 @@ public function testModifiedLimitQuery() self::assertEquals('gblanco1', $data[0]->username); self::assertEquals('gblanco2', $data[1]->username); - $data = $this->_em->createQuery('SELECT u FROM ' . CmsUser::class . ' u') + $data = $this->em->createQuery('SELECT u FROM ' . CmsUser::class . ' u') ->setFirstResult(3) ->setMaxResults(2) ->getResult(); @@ -405,7 +406,7 @@ public function testModifiedLimitQuery() self::assertEquals('gblanco3', $data[0]->username); self::assertEquals('gblanco4', $data[1]->username); - $data = $this->_em->createQuery('SELECT u FROM ' . CmsUser::class . ' u') + $data = $this->em->createQuery('SELECT u FROM ' . CmsUser::class . ' u') ->setFirstResult(3) ->setMaxResults(2) ->getScalarResult(); @@ -413,10 +414,10 @@ public function testModifiedLimitQuery() public function testSupportsQueriesWithEntityNamespaces() { - $this->_em->getConfiguration()->addEntityNamespace('CMS', 'Doctrine\Tests\Models\CMS'); + $this->em->getConfiguration()->addEntityNamespace('CMS', 'Doctrine\Tests\Models\CMS'); try { - $query = $this->_em->createQuery('UPDATE CMS:CmsUser u SET u.name = ?1'); + $query = $this->em->createQuery('UPDATE CMS:CmsUser u SET u.name = ?1'); self::assertEquals('UPDATE "cms_users" SET "name" = ?', $query->getSQL()); @@ -425,7 +426,7 @@ public function testSupportsQueriesWithEntityNamespaces() $this->fail($e->getMessage()); } - $this->_em->getConfiguration()->setEntityNamespaces([]); + $this->em->getConfiguration()->setEntityNamespaces([]); } /** @@ -441,13 +442,13 @@ public function testEntityParameters() $author->username = "anon"; $author->status = "here"; $article->user = $author; - $this->_em->persist($author); - $this->_em->persist($article); - $this->_em->flush(); - $this->_em->clear(); - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); - $q = $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a where a.topic = :topic and a.user = :user") - ->setParameter("user", $this->_em->getReference(CmsUser::class, $author->id)) + $this->em->persist($author); + $this->em->persist($article); + $this->em->flush(); + $this->em->clear(); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + $q = $this->em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a where a.topic = :topic and a.user = :user") + ->setParameter("user", $this->em->getReference(CmsUser::class, $author->id)) ->setParameter("topic", "dr. dolittle"); $result = $q->getResult(); @@ -476,14 +477,14 @@ public function testEnableFetchEagerMode() $author->status = "here"; $article->user = $author; - $this->_em->persist($author); - $this->_em->persist($article); + $this->em->persist($author); + $this->em->persist($article); } - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $articles = $this->_em + $articles = $this->em ->createQuery('select a from Doctrine\Tests\Models\CMS\CmsArticle a') ->setFetchMode(CmsArticle::class, 'user', FetchMode::EAGER) ->getResult(); @@ -504,18 +505,19 @@ public function testgetOneOrNullResult() $user->name = 'Guilherme'; $user->username = 'gblanco'; $user->status = 'developer'; - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); - - $query = $this->_em->createQuery("select u from " . CmsUser::class . " u where u.username = 'gblanco'"); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); + $query = $this->em->createQuery("select u from " . CmsUser::class . " u where u.username = 'gblanco'"); $fetchedUser = $query->getOneOrNullResult(); + self::assertInstanceOf(CmsUser::class, $fetchedUser); self::assertEquals('gblanco', $fetchedUser->username); - $query = $this->_em->createQuery("select u.username from " . CmsUser::class . " u where u.username = 'gblanco'"); + $query = $this->em->createQuery("select u.username from " . CmsUser::class . " u where u.username = 'gblanco'"); $fetchedUsername = $query->getOneOrNullResult(Query::HYDRATE_SINGLE_SCALAR); + self::assertEquals('gblanco', $fetchedUsername); } @@ -528,16 +530,16 @@ public function testgetOneOrNullResultSeveralRows() $user->name = 'Guilherme'; $user->username = 'gblanco'; $user->status = 'developer'; - $this->_em->persist($user); + $this->em->persist($user); $user = new CmsUser; $user->name = 'Roman'; $user->username = 'romanb'; $user->status = 'developer'; - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u"); + $query = $this->em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u"); $this->expectException(NonUniqueResultException::class); @@ -549,10 +551,10 @@ public function testgetOneOrNullResultSeveralRows() */ public function testgetOneOrNullResultNoRows() { - $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u"); + $query = $this->em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u"); self::assertNull($query->getOneOrNullResult()); - $query = $this->_em->createQuery("select u.username from Doctrine\Tests\Models\CMS\CmsUser u where u.username = 'gblanco'"); + $query = $this->em->createQuery("select u.username from Doctrine\Tests\Models\CMS\CmsUser u where u.username = 'gblanco'"); self::assertNull($query->getOneOrNullResult(Query::HYDRATE_SCALAR)); } @@ -565,24 +567,24 @@ public function testParameterOrder() $user1->name = 'Benjamin'; $user1->username = 'beberlei'; $user1->status = 'developer'; - $this->_em->persist($user1); + $this->em->persist($user1); $user2 = new CmsUser; $user2->name = 'Roman'; $user2->username = 'romanb'; $user2->status = 'developer'; - $this->_em->persist($user2); + $this->em->persist($user2); $user3 = new CmsUser; $user3->name = 'Jonathan'; $user3->username = 'jwage'; $user3->status = 'developer'; - $this->_em->persist($user3); + $this->em->persist($user3); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.status = :a AND u.id IN (:b)"); + $query = $this->em->createQuery("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.status = :a AND u.id IN (:b)"); $query->setParameters(new ArrayCollection( [ new Parameter('b', [$user1->id, $user2->id, $user3->id]), @@ -600,24 +602,24 @@ public function testDqlWithAutoInferOfParameters() $user->name = 'Benjamin'; $user->username = 'beberlei'; $user->status = 'developer'; - $this->_em->persist($user); + $this->em->persist($user); $user = new CmsUser; $user->name = 'Roman'; $user->username = 'romanb'; $user->status = 'developer'; - $this->_em->persist($user); + $this->em->persist($user); $user = new CmsUser; $user->name = 'Jonathan'; $user->username = 'jwage'; $user->status = 'developer'; - $this->_em->persist($user); + $this->em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username IN (?0)"); + $query = $this->em->createQuery("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username IN (?0)"); $query->setParameter(0, ['beberlei', 'jwage']); $users = $query->execute(); @@ -627,7 +629,7 @@ public function testDqlWithAutoInferOfParameters() public function testQueryBuilderWithStringWhereClauseContainingOrAndConditionalPrimary() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u') ->from(CmsUser::class, 'u') ->innerJoin('u.articles', 'a') @@ -645,24 +647,24 @@ public function testQueryWithArrayOfEntitiesAsParameter() $userA->name = 'Benjamin'; $userA->username = 'beberlei'; $userA->status = 'developer'; - $this->_em->persist($userA); + $this->em->persist($userA); $userB = new CmsUser; $userB->name = 'Roman'; $userB->username = 'romanb'; $userB->status = 'developer'; - $this->_em->persist($userB); + $this->em->persist($userB); $userC = new CmsUser; $userC->name = 'Jonathan'; $userC->username = 'jwage'; $userC->status = 'developer'; - $this->_em->persist($userC); + $this->em->persist($userC); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u IN (?0) OR u.username = ?1"); + $query = $this->em->createQuery("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u IN (?0) OR u.username = ?1"); $query->setParameter(0, [$userA, $userC]); $query->setParameter(1, 'beberlei'); @@ -677,24 +679,24 @@ public function testQueryWithHiddenAsSelectExpression() $userA->name = 'Benjamin'; $userA->username = 'beberlei'; $userA->status = 'developer'; - $this->_em->persist($userA); + $this->em->persist($userA); $userB = new CmsUser; $userB->name = 'Roman'; $userB->username = 'romanb'; $userB->status = 'developer'; - $this->_em->persist($userB); + $this->em->persist($userB); $userC = new CmsUser; $userC->name = 'Jonathan'; $userC->username = 'jwage'; $userC->status = 'developer'; - $this->_em->persist($userC); + $this->em->persist($userC); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery("SELECT u, (SELECT COUNT(u2.id) FROM Doctrine\Tests\Models\CMS\CmsUser u2) AS HIDDEN total FROM Doctrine\Tests\Models\CMS\CmsUser u"); + $query = $this->em->createQuery("SELECT u, (SELECT COUNT(u2.id) FROM Doctrine\Tests\Models\CMS\CmsUser u2) AS HIDDEN total FROM Doctrine\Tests\Models\CMS\CmsUser u"); $users = $query->execute(); self::assertEquals(3, count($users)); @@ -710,12 +712,12 @@ public function testSetParameterBindingSingleIdentifierObject() $userC->name = 'Jonathan'; $userC->username = 'jwage'; $userC->status = 'developer'; - $this->_em->persist($userC); + $this->em->persist($userC); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $q = $this->_em->createQuery("SELECT DISTINCT u from Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1"); + $q = $this->em->createQuery("SELECT DISTINCT u from Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1"); $q->setParameter(1, $userC); self::assertEquals($userC, $q->getParameter(1)->getValue()); @@ -733,22 +735,22 @@ public function testSetCollectionParameterBindingSingleIdentifierObject() $u1->name = 'Name1'; $u1->username = 'username1'; $u1->status = 'developer'; - $this->_em->persist($u1); + $this->em->persist($u1); $u2 = new CmsUser; $u2->name = 'Name2'; $u2->username = 'username2'; $u2->status = 'tester'; - $this->_em->persist($u2); + $this->em->persist($u2); $u3 = new CmsUser; $u3->name = 'Name3'; $u3->username = 'username3'; $u3->status = 'tester'; - $this->_em->persist($u3); + $this->em->persist($u3); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); $userCollection = new ArrayCollection(); @@ -756,7 +758,7 @@ public function testSetCollectionParameterBindingSingleIdentifierObject() $userCollection->add($u2); $userCollection->add($u3->getId()); - $q = $this->_em->createQuery("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u IN (:users) ORDER BY u.id"); + $q = $this->em->createQuery("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u IN (:users) ORDER BY u.id"); $q->setParameter('users', $userCollection); $users = $q->execute(); @@ -790,20 +792,20 @@ public function testUnexpectedResultException() $u2->status = 'tester'; try { - $this->_em->createQuery($dql)->getSingleResult(); + $this->em->createQuery($dql)->getSingleResult(); $this->fail('Expected exception "\Doctrine\ORM\NoResultException".'); } catch (UnexpectedResultException $exc) { self::assertInstanceOf('\Doctrine\ORM\NoResultException', $exc); } - $this->_em->persist($u1); - $this->_em->persist($u2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($u1); + $this->em->persist($u2); + $this->em->flush(); + $this->em->clear(); try { - $this->_em->createQuery($dql)->getSingleResult(); + $this->em->createQuery($dql)->getSingleResult(); $this->fail('Expected exception "\Doctrine\ORM\NonUniqueResultException".'); } catch (UnexpectedResultException $exc) { self::assertInstanceOf('\Doctrine\ORM\NonUniqueResultException', $exc); @@ -826,12 +828,12 @@ public function testMultipleJoinComponentsUsingInnerJoin() $userB->username = 'asm89'; $userB->status = 'developer'; - $this->_em->persist($userA); - $this->_em->persist($userB); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($userA); + $this->em->persist($userB); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery(" + $query = $this->em->createQuery(" SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN Doctrine\Tests\Models\CMS\CmsPhonenumber p WITH u = p.user @@ -859,12 +861,12 @@ public function testMultipleJoinComponentsUsingLeftJoin() $userB->username = 'asm89'; $userB->status = 'developer'; - $this->_em->persist($userA); - $this->_em->persist($userB); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($userA); + $this->em->persist($userB); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery(" + $query = $this->em->createQuery(" SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN Doctrine\Tests\Models\CMS\CmsPhonenumber p WITH u = p.user diff --git a/tests/Doctrine/Tests/ORM/Functional/ReadOnlyTest.php b/tests/Doctrine/Tests/ORM/Functional/ReadOnlyTest.php index 9107076f62e..89fdc10f55d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ReadOnlyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ReadOnlyTest.php @@ -16,9 +16,9 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(ReadOnlyEntity::class), + $this->em->getClassMetadata(ReadOnlyEntity::class), ] ); } catch(\Exception $e) { @@ -28,16 +28,16 @@ protected function setUp() public function testReadOnlyEntityNeverChangeTracked() { $readOnly = new ReadOnlyEntity("Test1", 1234); - $this->_em->persist($readOnly); - $this->_em->flush(); + $this->em->persist($readOnly); + $this->em->flush(); $readOnly->name = "Test2"; $readOnly->numericValue = 4321; - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $dbReadOnly = $this->_em->find(ReadOnlyEntity::class, $readOnly->id); + $dbReadOnly = $this->em->find(ReadOnlyEntity::class, $readOnly->id); self::assertEquals("Test1", $dbReadOnly->name); self::assertEquals(1234, $dbReadOnly->numericValue); } @@ -48,13 +48,13 @@ public function testReadOnlyEntityNeverChangeTracked() public function testClearReadOnly() { $readOnly = new ReadOnlyEntity("Test1", 1234); - $this->_em->persist($readOnly); - $this->_em->flush(); - $this->_em->getUnitOfWork()->markReadOnly($readOnly); + $this->em->persist($readOnly); + $this->em->flush(); + $this->em->getUnitOfWork()->markReadOnly($readOnly); - $this->_em->clear(); + $this->em->clear(); - self::assertFalse($this->_em->getUnitOfWork()->isReadOnly($readOnly)); + self::assertFalse($this->em->getUnitOfWork()->isReadOnly($readOnly)); } /** @@ -63,13 +63,13 @@ public function testClearReadOnly() public function testClearEntitiesReadOnly() { $readOnly = new ReadOnlyEntity("Test1", 1234); - $this->_em->persist($readOnly); - $this->_em->flush(); - $this->_em->getUnitOfWork()->markReadOnly($readOnly); + $this->em->persist($readOnly); + $this->em->flush(); + $this->em->getUnitOfWork()->markReadOnly($readOnly); - $this->_em->clear(get_class($readOnly)); + $this->em->clear(get_class($readOnly)); - self::assertFalse($this->_em->getUnitOfWork()->isReadOnly($readOnly)); + self::assertFalse($this->em->getUnitOfWork()->isReadOnly($readOnly)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php b/tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php index 1578fb2b728..c6d6d219623 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php @@ -22,8 +22,8 @@ protected function setUp() $this->useModelSet('ecommerce'); $this->useModelSet('company'); parent::setUp(); - $this->_factory = new ProxyFactory( - $this->_em, + $this->factory = new ProxyFactory( + $this->em, __DIR__ . '/../../Proxies', 'Doctrine\Tests\Proxies', true); @@ -33,10 +33,10 @@ public function createProduct() { $product = new ECommerceProduct(); $product->setName('Doctrine Cookbook'); - $this->_em->persist($product); + $this->em->persist($product); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); return $product->getId(); } @@ -45,10 +45,10 @@ public function createAuction() { $event = new CompanyAuction(); $event->setData('Doctrine Cookbook'); - $this->_em->persist($event); + $this->em->persist($event); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); return $event->getId(); } @@ -57,7 +57,7 @@ public function testLazyLoadsFieldValuesFromDatabase() { $id = $this->createProduct(); - $productProxy = $this->_em->getReference(ECommerceProduct::class, ['id' => $id]); + $productProxy = $this->em->getReference(ECommerceProduct::class, ['id' => $id]); self::assertEquals('Doctrine Cookbook', $productProxy->getName()); } @@ -68,8 +68,8 @@ public function testAccessMetatadaForProxy() { $id = $this->createProduct(); - $entity = $this->_em->getReference(ECommerceProduct::class , $id); - $class = $this->_em->getClassMetadata(get_class($entity)); + $entity = $this->em->getReference(ECommerceProduct::class , $id); + $class = $this->em->getClassMetadata(get_class($entity)); self::assertEquals(ECommerceProduct::class, $class->name); } @@ -81,8 +81,8 @@ public function testReferenceFind() { $id = $this->createProduct(); - $entity = $this->_em->getReference(ECommerceProduct::class , $id); - $entity2 = $this->_em->find(ECommerceProduct::class , $id); + $entity = $this->em->getReference(ECommerceProduct::class , $id); + $entity2 = $this->em->find(ECommerceProduct::class , $id); self::assertSame($entity, $entity2); self::assertEquals('Doctrine Cookbook', $entity2->getName()); @@ -96,7 +96,7 @@ public function testCloneProxy() $id = $this->createProduct(); /* @var $entity ECommerceProduct */ - $entity = $this->_em->getReference(ECommerceProduct::class , $id); + $entity = $this->em->getReference(ECommerceProduct::class , $id); /* @var $clone ECommerceProduct */ $clone = clone $entity; @@ -104,7 +104,7 @@ public function testCloneProxy() self::assertEquals($id, $entity->getId()); self::assertEquals('Doctrine Cookbook', $entity->getName()); - self::assertFalse($this->_em->contains($clone), "Cloning a reference proxy should return an unmanaged/detached entity."); + self::assertFalse($this->em->contains($clone), "Cloning a reference proxy should return an unmanaged/detached entity."); self::assertEquals($id, $clone->getId(), "Cloning a reference proxy should return same id."); self::assertEquals('Doctrine Cookbook', $clone->getName(), "Cloning a reference proxy should return same product name."); @@ -121,10 +121,10 @@ public function testInitializeProxy() $id = $this->createProduct(); /* @var $entity ECommerceProduct */ - $entity = $this->_em->getReference(ECommerceProduct::class , $id); + $entity = $this->em->getReference(ECommerceProduct::class , $id); self::assertFalse($entity->__isInitialized__, "Pre-Condition: Object is unitialized proxy."); - $this->_em->getUnitOfWork()->initializeObject($entity); + $this->em->getUnitOfWork()->initializeObject($entity); self::assertTrue($entity->__isInitialized__, "Should be initialized after called UnitOfWork::initializeObject()"); } @@ -136,13 +136,13 @@ public function testInitializeChangeAndFlushProxy() $id = $this->createProduct(); /* @var $entity ECommerceProduct */ - $entity = $this->_em->getReference(ECommerceProduct::class , $id); + $entity = $this->em->getReference(ECommerceProduct::class , $id); $entity->setName('Doctrine 2 Cookbook'); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $entity = $this->_em->getReference(ECommerceProduct::class , $id); + $entity = $this->em->getReference(ECommerceProduct::class , $id); self::assertEquals('Doctrine 2 Cookbook', $entity->getName()); } @@ -154,7 +154,7 @@ public function testWakeupCalledOnProxy() $id = $this->createProduct(); /* @var $entity ECommerceProduct */ - $entity = $this->_em->getReference(ECommerceProduct::class , $id); + $entity = $this->em->getReference(ECommerceProduct::class , $id); self::assertFalse($entity->wakeUp); @@ -168,7 +168,7 @@ public function testDoNotInitializeProxyOnGettingTheIdentifier() $id = $this->createProduct(); /* @var $entity ECommerceProduct */ - $entity = $this->_em->getReference(ECommerceProduct::class , $id); + $entity = $this->em->getReference(ECommerceProduct::class , $id); self::assertFalse($entity->__isInitialized__, "Pre-Condition: Object is unitialized proxy."); self::assertEquals($id, $entity->getId()); @@ -183,7 +183,7 @@ public function testDoNotInitializeProxyOnGettingTheIdentifier_DDC_1625() $id = $this->createAuction(); /* @var $entity CompanyAuction */ - $entity = $this->_em->getReference(CompanyAuction::class , $id); + $entity = $this->em->getReference(CompanyAuction::class , $id); self::assertFalse($entity->__isInitialized__, "Pre-Condition: Object is unitialized proxy."); self::assertEquals($id, $entity->getId()); @@ -198,13 +198,13 @@ public function testDoNotInitializeProxyOnGettingTheIdentifierAndReturnTheRightT $shipping = new ECommerceShipping(); $shipping->setDays(1); $product->setShipping($shipping); - $this->_em->persist($product); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($product); + $this->em->flush(); + $this->em->clear(); $id = $shipping->getId(); - $product = $this->_em->getRepository(ECommerceProduct::class)->find($product->getId()); + $product = $this->em->getRepository(ECommerceProduct::class)->find($product->getId()); $entity = $product->getShipping(); self::assertFalse($entity->__isInitialized__, "Pre-Condition: Object is unitialized proxy."); @@ -218,7 +218,7 @@ public function testInitializeProxyOnGettingSomethingOtherThanTheIdentifier() $id = $this->createProduct(); /* @var $entity ECommerceProduct */ - $entity = $this->_em->getReference(ECommerceProduct::class , $id); + $entity = $this->em->getReference(ECommerceProduct::class , $id); self::assertFalse($entity->__isInitialized__, "Pre-Condition: Object is unitialized proxy."); self::assertEquals('Doctrine Cookbook', $entity->getName()); @@ -233,16 +233,16 @@ public function testCommonPersistenceProxy() $id = $this->createProduct(); /* @var $entity ECommerceProduct */ - $entity = $this->_em->getReference(ECommerceProduct::class , $id); + $entity = $this->em->getReference(ECommerceProduct::class , $id); $className = ClassUtils::getClass($entity); self::assertInstanceOf(Proxy::class, $entity); self::assertFalse($entity->__isInitialized()); self::assertEquals(ECommerceProduct::class, $className); - $restName = str_replace($this->_em->getConfiguration()->getProxyNamespace(), "", get_class($entity)); - $restName = substr(get_class($entity), strlen($this->_em->getConfiguration()->getProxyNamespace()) +1); - $proxyFileName = $this->_em->getConfiguration()->getProxyDir() . DIRECTORY_SEPARATOR . str_replace("\\", "", $restName) . ".php"; + $restName = str_replace($this->em->getConfiguration()->getProxyNamespace(), "", get_class($entity)); + $restName = substr(get_class($entity), strlen($this->em->getConfiguration()->getProxyNamespace()) +1); + $proxyFileName = $this->em->getConfiguration()->getProxyDir() . DIRECTORY_SEPARATOR . str_replace("\\", "", $restName) . ".php"; self::assertTrue(file_exists($proxyFileName), "Proxy file name cannot be found generically."); $entity->__load(); diff --git a/tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php b/tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php index 56c3ffaa121..6b06304dae2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php @@ -48,10 +48,10 @@ public function testResultCache() $user->username = 'romanb'; $user->status = 'dev'; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); - $query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux'); + $query = $this->em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux'); $cache = new ArrayCache(); $query->setResultCacheDriver($cache)->setResultCacheId('my_cache_id'); @@ -64,9 +64,9 @@ public function testResultCache() self::assertEquals(1, count($users)); self::assertEquals('Roman', $users[0]->name); - $this->_em->clear(); + $this->em->clear(); - $query2 = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux'); + $query2 = $this->em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux'); $query2->setResultCacheDriver($cache)->setResultCacheId('my_cache_id'); $users = $query2->getResult(); @@ -79,7 +79,7 @@ public function testResultCache() public function testSetResultCacheId() { $cache = new ArrayCache; - $query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux'); + $query = $this->em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux'); $query->setResultCacheDriver($cache); $query->setResultCacheId('testing_result_cache_id'); @@ -94,7 +94,7 @@ public function testSetResultCacheId() public function testUseResultCache() { $cache = new ArrayCache(); - $query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux'); + $query = $this->em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux'); $query->useResultCache(true); $query->setResultCacheDriver($cache); @@ -104,7 +104,7 @@ public function testUseResultCache() self::assertTrue($cache->contains('testing_result_cache_id')); - $this->_em->getConfiguration()->setResultCacheImpl(new ArrayCache()); + $this->em->getConfiguration()->setResultCacheImpl(new ArrayCache()); } /** @@ -113,8 +113,8 @@ public function testUseResultCache() public function testUseResultCacheParams() { $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'); + $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); @@ -124,7 +124,7 @@ public function testUseResultCacheParams() $query->setParameter(1, 2); $query->getResult(); - self::assertEquals($sqlCount + 2, count($this->_sqlLoggerStack->queries), "Two non-cached queries."); + self::assertEquals($sqlCount + 2, count($this->sqlLoggerStack->queries), "Two non-cached queries."); $query->setParameter(1, 1); $query->useResultCache(true); @@ -133,7 +133,7 @@ public function testUseResultCacheParams() $query->setParameter(1, 2); $query->getResult(); - self::assertEquals($sqlCount + 2, count($this->_sqlLoggerStack->queries), "The next two sql should have been cached, but were not."); + self::assertEquals($sqlCount + 2, count($this->sqlLoggerStack->queries), "The next two sql should have been cached, but were not."); } /** @@ -148,7 +148,7 @@ public function testNativeQueryResultCaching() $rsm->addScalarResult('id', 'u', DBALType::getType('integer')); - $query = $this->_em->createNativeQuery('select u.id FROM cms_users u WHERE u.id = ?', $rsm); + $query = $this->em->createNativeQuery('select u.id FROM cms_users u WHERE u.id = ?', $rsm); $query->setParameter(1, 10); $query->setResultCacheDriver($cache)->useResultCache(true); @@ -227,12 +227,12 @@ public function testResultCacheWithObjectParameter() $article->topic = "baz"; $article->user = $user1; - $this->_em->persist($article); - $this->_em->persist($user1); - $this->_em->persist($user2); - $this->_em->flush(); + $this->em->persist($article); + $this->em->persist($user1); + $this->em->persist($user2); + $this->em->flush(); - $query = $this->_em->createQuery('select a from Doctrine\Tests\Models\CMS\CmsArticle a WHERE a.user = ?1'); + $query = $this->em->createQuery('select a from Doctrine\Tests\Models\CMS\CmsArticle a WHERE a.user = ?1'); $query->setParameter(1, $user1); $cache = new ArrayCache(); @@ -244,9 +244,9 @@ public function testResultCacheWithObjectParameter() self::assertEquals(1, count($articles)); self::assertEquals('baz', $articles[0]->topic); - $this->_em->clear(); + $this->em->clear(); - $query2 = $this->_em->createQuery('select a from Doctrine\Tests\Models\CMS\CmsArticle a WHERE a.user = ?1'); + $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); @@ -256,7 +256,7 @@ public function testResultCacheWithObjectParameter() self::assertEquals(1, count($articles)); self::assertEquals('baz', $articles[0]->topic); - $query3 = $this->_em->createQuery('select a from Doctrine\Tests\Models\CMS\CmsArticle a WHERE a.user = ?1'); + $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); diff --git a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php index 52bf4604211..b2fdca7419e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php @@ -50,7 +50,7 @@ public function tearDown() { parent::tearDown(); - $class = $this->_em->getClassMetadata(CmsUser::class); + $class = $this->em->getClassMetadata(CmsUser::class); $class->associationMappings['groups']['fetch'] = FetchMode::LAZY; $class->associationMappings['articles']['fetch'] = FetchMode::LAZY; } @@ -67,7 +67,7 @@ public function testConfigureFilter() public function testEntityManagerEnableFilter() { - $em = $this->_getEntityManager(); + $em = $this->getEntityManager(); $this->configureFilters($em); // Enable an existing filter @@ -90,7 +90,7 @@ public function testEntityManagerEnableFilter() public function testEntityManagerEnabledFilters() { - $em = $this->_getEntityManager(); + $em = $this->getEntityManager(); // No enabled filters self::assertEquals([], $em->getFilters()->getEnabledFilters()); @@ -106,7 +106,7 @@ public function testEntityManagerEnabledFilters() public function testEntityManagerDisableFilter() { - $em = $this->_getEntityManager(); + $em = $this->getEntityManager(); $this->configureFilters($em); // Enable the filter @@ -137,7 +137,7 @@ public function testEntityManagerDisableFilter() public function testEntityManagerGetFilter() { - $em = $this->_getEntityManager(); + $em = $this->getEntityManager(); $this->configureFilters($em); // Enable the filter @@ -161,7 +161,7 @@ public function testEntityManagerGetFilter() */ public function testEntityManagerIsFilterEnabled() { - $em = $this->_getEntityManager(); + $em = $this->getEntityManager(); $this->configureFilters($em); // Check for an enabled filter @@ -337,7 +337,7 @@ public function testQueryCache_DependsOnFilters() $cacheDataReflection = new \ReflectionProperty(ArrayCache::class, "data"); $cacheDataReflection->setAccessible(true); - $query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux'); + $query = $this->em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux'); $cache = new ArrayCache(); $query->setQueryCacheDriver($cache); @@ -345,9 +345,9 @@ public function testQueryCache_DependsOnFilters() $query->getResult(); self::assertEquals(1, sizeof($cacheDataReflection->getValue($cache))); - $conf = $this->_em->getConfiguration(); + $conf = $this->em->getConfiguration(); $conf->addFilter("locale", "\Doctrine\Tests\ORM\Functional\MyLocaleFilter"); - $this->_em->getFilters()->enable("locale"); + $this->em->getFilters()->enable("locale"); $query->getResult(); self::assertEquals(2, sizeof($cacheDataReflection->getValue($cache))); @@ -359,12 +359,12 @@ public function testQueryCache_DependsOnFilters() public function testQueryGeneration_DependsOnFilters() { - $query = $this->_em->createQuery('select a from Doctrine\Tests\Models\CMS\CmsAddress a'); + $query = $this->em->createQuery('select a from Doctrine\Tests\Models\CMS\CmsAddress a'); $firstSQLQuery = $query->getSQL(); - $conf = $this->_em->getConfiguration(); + $conf = $this->em->getConfiguration(); $conf->addFilter("country", "\Doctrine\Tests\ORM\Functional\CMSCountryFilter"); - $this->_em->getFilters()->enable("country") + $this->em->getFilters()->enable("country") ->setParameter("country", "en", DBALType::STRING); self::assertNotEquals($firstSQLQuery, $query->getSQL()); @@ -374,40 +374,40 @@ public function testRepositoryFind() { $this->loadFixtureData(); - self::assertNotNull($this->_em->getRepository(CmsGroup::class)->find($this->groupId)); - self::assertNotNull($this->_em->getRepository(CmsGroup::class)->find($this->groupId2)); + self::assertNotNull($this->em->getRepository(CmsGroup::class)->find($this->groupId)); + self::assertNotNull($this->em->getRepository(CmsGroup::class)->find($this->groupId2)); $this->useCMSGroupPrefixFilter(); - $this->_em->clear(); + $this->em->clear(); - self::assertNotNull($this->_em->getRepository(CmsGroup::class)->find($this->groupId)); - self::assertNull($this->_em->getRepository(CmsGroup::class)->find($this->groupId2)); + self::assertNotNull($this->em->getRepository(CmsGroup::class)->find($this->groupId)); + self::assertNull($this->em->getRepository(CmsGroup::class)->find($this->groupId2)); } public function testRepositoryFindAll() { $this->loadFixtureData(); - self::assertCount(2, $this->_em->getRepository(CmsGroup::class)->findAll()); + self::assertCount(2, $this->em->getRepository(CmsGroup::class)->findAll()); $this->useCMSGroupPrefixFilter(); - $this->_em->clear(); + $this->em->clear(); - self::assertCount(1, $this->_em->getRepository(CmsGroup::class)->findAll()); + self::assertCount(1, $this->em->getRepository(CmsGroup::class)->findAll()); } public function testRepositoryFindBy() { $this->loadFixtureData(); - self::assertCount(1, $this->_em->getRepository(CmsGroup::class)->findBy( + self::assertCount(1, $this->em->getRepository(CmsGroup::class)->findBy( ['id' => $this->groupId2] )); $this->useCMSGroupPrefixFilter(); - $this->_em->clear(); + $this->em->clear(); - self::assertCount(0, $this->_em->getRepository(CmsGroup::class)->findBy( + self::assertCount(0, $this->em->getRepository(CmsGroup::class)->findBy( ['id' => $this->groupId2] )); } @@ -416,26 +416,26 @@ public function testRepositoryFindByX() { $this->loadFixtureData(); - self::assertCount(1, $this->_em->getRepository(CmsGroup::class)->findById($this->groupId2)); + self::assertCount(1, $this->em->getRepository(CmsGroup::class)->findById($this->groupId2)); $this->useCMSGroupPrefixFilter(); - $this->_em->clear(); + $this->em->clear(); - self::assertCount(0, $this->_em->getRepository(CmsGroup::class)->findById($this->groupId2)); + self::assertCount(0, $this->em->getRepository(CmsGroup::class)->findById($this->groupId2)); } public function testRepositoryFindOneBy() { $this->loadFixtureData(); - self::assertNotNull($this->_em->getRepository(CmsGroup::class)->findOneBy( + self::assertNotNull($this->em->getRepository(CmsGroup::class)->findOneBy( ['id' => $this->groupId2] )); $this->useCMSGroupPrefixFilter(); - $this->_em->clear(); + $this->em->clear(); - self::assertNull($this->_em->getRepository(CmsGroup::class)->findOneBy( + self::assertNull($this->em->getRepository(CmsGroup::class)->findOneBy( ['id' => $this->groupId2] )); } @@ -444,27 +444,27 @@ public function testRepositoryFindOneByX() { $this->loadFixtureData(); - self::assertNotNull($this->_em->getRepository(CmsGroup::class)->findOneById($this->groupId2)); + self::assertNotNull($this->em->getRepository(CmsGroup::class)->findOneById($this->groupId2)); $this->useCMSGroupPrefixFilter(); - $this->_em->clear(); + $this->em->clear(); - self::assertNull($this->_em->getRepository(CmsGroup::class)->findOneById($this->groupId2)); + self::assertNull($this->em->getRepository(CmsGroup::class)->findOneById($this->groupId2)); } public function testToOneFilter() { - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); $this->loadFixtureData(); - $query = $this->_em->createQuery('select ux, ua from Doctrine\Tests\Models\CMS\CmsUser ux JOIN ux.address ua'); + $query = $this->em->createQuery('select ux, ua from Doctrine\Tests\Models\CMS\CmsUser ux JOIN ux.address ua'); // We get two users before enabling the filter self::assertEquals(2, count($query->getResult())); - $conf = $this->_em->getConfiguration(); + $conf = $this->em->getConfiguration(); $conf->addFilter("country", "\Doctrine\Tests\ORM\Functional\CMSCountryFilter"); - $this->_em->getFilters()->enable("country")->setParameter("country", "Germany", DBALType::STRING); + $this->em->getFilters()->enable("country")->setParameter("country", "Germany", DBALType::STRING); // We get one user after enabling the filter self::assertEquals(1, count($query->getResult())); @@ -473,14 +473,14 @@ public function testToOneFilter() public function testManyToManyFilter() { $this->loadFixtureData(); - $query = $this->_em->createQuery('select ux, ug from Doctrine\Tests\Models\CMS\CmsUser ux JOIN ux.groups ug'); + $query = $this->em->createQuery('select ux, ug from Doctrine\Tests\Models\CMS\CmsUser ux JOIN ux.groups ug'); // We get two users before enabling the filter self::assertEquals(2, count($query->getResult())); - $conf = $this->_em->getConfiguration(); + $conf = $this->em->getConfiguration(); $conf->addFilter("group_prefix", "\Doctrine\Tests\ORM\Functional\CMSGroupPrefixFilter"); - $this->_em->getFilters()->enable("group_prefix")->setParameter("prefix", "bar_%", DBALType::STRING); + $this->em->getFilters()->enable("group_prefix")->setParameter("prefix", "bar_%", DBALType::STRING); // We get one user after enabling the filter self::assertEquals(1, count($query->getResult())); @@ -490,14 +490,14 @@ public function testManyToManyFilter() public function testWhereFilter() { $this->loadFixtureData(); - $query = $this->_em->createQuery('select ug from Doctrine\Tests\Models\CMS\CmsGroup ug WHERE 1=1'); + $query = $this->em->createQuery('select ug from Doctrine\Tests\Models\CMS\CmsGroup ug WHERE 1=1'); // We get two users before enabling the filter self::assertEquals(2, count($query->getResult())); - $conf = $this->_em->getConfiguration(); + $conf = $this->em->getConfiguration(); $conf->addFilter("group_prefix", "\Doctrine\Tests\ORM\Functional\CMSGroupPrefixFilter"); - $this->_em->getFilters()->enable("group_prefix")->setParameter("prefix", "bar_%", DBALType::STRING); + $this->em->getFilters()->enable("group_prefix")->setParameter("prefix", "bar_%", DBALType::STRING); // We get one user after enabling the filter self::assertEquals(1, count($query->getResult())); @@ -506,14 +506,14 @@ public function testWhereFilter() public function testWhereOrFilter() { $this->loadFixtureData(); - $query = $this->_em->createQuery('select ug from Doctrine\Tests\Models\CMS\CmsGroup ug WHERE 1=1 OR 1=1'); + $query = $this->em->createQuery('select ug from Doctrine\Tests\Models\CMS\CmsGroup ug WHERE 1=1 OR 1=1'); // We get two users before enabling the filter self::assertEquals(2, count($query->getResult())); - $conf = $this->_em->getConfiguration(); + $conf = $this->em->getConfiguration(); $conf->addFilter("group_prefix", "\Doctrine\Tests\ORM\Functional\CMSGroupPrefixFilter"); - $this->_em->getFilters()->enable("group_prefix")->setParameter("prefix", "bar_%", DBALType::STRING); + $this->em->getFilters()->enable("group_prefix")->setParameter("prefix", "bar_%", DBALType::STRING); // We get one user after enabling the filter self::assertEquals(1, count($query->getResult())); @@ -522,7 +522,7 @@ public function testWhereOrFilter() private function loadLazyFixtureData() { - $class = $this->_em->getClassMetadata(CmsUser::class); + $class = $this->em->getClassMetadata(CmsUser::class); $class->associationMappings['articles']['fetch'] = FetchMode::EXTRA_LAZY; $class->associationMappings['groups']['fetch'] = FetchMode::EXTRA_LAZY; $this->loadFixtureData(); @@ -530,15 +530,15 @@ private function loadLazyFixtureData() private function useCMSArticleTopicFilter() { - $conf = $this->_em->getConfiguration(); + $conf = $this->em->getConfiguration(); $conf->addFilter("article_topic", "\Doctrine\Tests\ORM\Functional\CMSArticleTopicFilter"); - $this->_em->getFilters()->enable("article_topic")->setParameter("topic", "Test1", DBALType::STRING); + $this->em->getFilters()->enable("article_topic")->setParameter("topic", "Test1", DBALType::STRING); } public function testOneToMany_ExtraLazyCountWithFilter() { $this->loadLazyFixtureData(); - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); self::assertFalse($user->articles->isInitialized()); self::assertEquals(2, count($user->articles)); @@ -551,8 +551,8 @@ public function testOneToMany_ExtraLazyCountWithFilter() public function testOneToMany_ExtraLazyContainsWithFilter() { $this->loadLazyFixtureData(); - $user = $this->_em->find(CmsUser::class, $this->userId); - $filteredArticle = $this->_em->find(CmsArticle::class, $this->articleId2); + $user = $this->em->find(CmsUser::class, $this->userId); + $filteredArticle = $this->em->find(CmsArticle::class, $this->articleId2); self::assertFalse($user->articles->isInitialized()); self::assertTrue($user->articles->contains($filteredArticle)); @@ -565,7 +565,7 @@ public function testOneToMany_ExtraLazyContainsWithFilter() public function testOneToMany_ExtraLazySliceWithFilter() { $this->loadLazyFixtureData(); - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); self::assertFalse($user->articles->isInitialized()); self::assertEquals(2, count($user->articles->slice(0,10))); @@ -577,16 +577,16 @@ public function testOneToMany_ExtraLazySliceWithFilter() private function useCMSGroupPrefixFilter() { - $conf = $this->_em->getConfiguration(); + $conf = $this->em->getConfiguration(); $conf->addFilter("group_prefix", "\Doctrine\Tests\ORM\Functional\CMSGroupPrefixFilter"); - $this->_em->getFilters()->enable("group_prefix")->setParameter("prefix", "foo%", DBALType::STRING); + $this->em->getFilters()->enable("group_prefix")->setParameter("prefix", "foo%", DBALType::STRING); } public function testManyToMany_ExtraLazyCountWithFilter() { $this->loadLazyFixtureData(); - $user = $this->_em->find(CmsUser::class, $this->userId2); + $user = $this->em->find(CmsUser::class, $this->userId2); self::assertFalse($user->groups->isInitialized()); self::assertEquals(2, count($user->groups)); @@ -599,8 +599,8 @@ public function testManyToMany_ExtraLazyCountWithFilter() public function testManyToMany_ExtraLazyContainsWithFilter() { $this->loadLazyFixtureData(); - $user = $this->_em->find(CmsUser::class, $this->userId2); - $filteredArticle = $this->_em->find(CmsGroup::class, $this->groupId2); + $user = $this->em->find(CmsUser::class, $this->userId2); + $filteredArticle = $this->em->find(CmsGroup::class, $this->groupId2); self::assertFalse($user->groups->isInitialized()); self::assertTrue($user->groups->contains($filteredArticle)); @@ -613,7 +613,7 @@ public function testManyToMany_ExtraLazyContainsWithFilter() public function testManyToMany_ExtraLazySliceWithFilter() { $this->loadLazyFixtureData(); - $user = $this->_em->find(CmsUser::class, $this->userId2); + $user = $this->em->find(CmsUser::class, $this->userId2); self::assertFalse($user->groups->isInitialized()); self::assertEquals(2, count($user->groups->slice(0,10))); @@ -652,10 +652,10 @@ private function loadFixtureData() $article2->text = "Test"; $article2->setAuthor($user); - $this->_em->persist($article1); - $this->_em->persist($article2); + $this->em->persist($article1); + $this->em->persist($article2); - $this->_em->persist($user); + $this->em->persist($user); $user2 = new CmsUser; $user2->name = 'Guilherme'; @@ -675,9 +675,9 @@ private function loadFixtureData() $group2->name = 'bar_group'; $user2->addGroup($group2); - $this->_em->persist($user2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user2); + $this->em->flush(); + $this->em->clear(); $this->userId = $user->getId(); $this->userId2 = $user2->getId(); @@ -691,34 +691,34 @@ public function testJoinSubclassPersister_FilterOnlyOnRootTableWhenFetchingSubEn { $this->loadCompanyJoinedSubclassFixtureData(); // Persister - self::assertEquals(2, count($this->_em->getRepository(CompanyManager::class)->findAll())); + self::assertEquals(2, count($this->em->getRepository(CompanyManager::class)->findAll())); // SQLWalker - self::assertEquals(2, count($this->_em->createQuery("SELECT cm FROM Doctrine\Tests\Models\Company\CompanyManager cm")->getResult())); + self::assertEquals(2, count($this->em->createQuery("SELECT cm FROM Doctrine\Tests\Models\Company\CompanyManager cm")->getResult())); // Enable the filter $this->usePersonNameFilter('Guilh%'); - $managers = $this->_em->getRepository(CompanyManager::class)->findAll(); + $managers = $this->em->getRepository(CompanyManager::class)->findAll(); self::assertEquals(1, count($managers)); self::assertEquals("Guilherme", $managers[0]->getName()); - self::assertEquals(1, count($this->_em->createQuery("SELECT cm FROM Doctrine\Tests\Models\Company\CompanyManager cm")->getResult())); + self::assertEquals(1, count($this->em->createQuery("SELECT cm FROM Doctrine\Tests\Models\Company\CompanyManager cm")->getResult())); } public function testJoinSubclassPersister_FilterOnlyOnRootTableWhenFetchingRootEntity() { $this->loadCompanyJoinedSubclassFixtureData(); - self::assertEquals(3, count($this->_em->getRepository(CompanyPerson::class)->findAll())); - self::assertEquals(3, count($this->_em->createQuery("SELECT cp FROM Doctrine\Tests\Models\Company\CompanyPerson cp")->getResult())); + self::assertEquals(3, count($this->em->getRepository(CompanyPerson::class)->findAll())); + self::assertEquals(3, count($this->em->createQuery("SELECT cp FROM Doctrine\Tests\Models\Company\CompanyPerson cp")->getResult())); // Enable the filter $this->usePersonNameFilter('Guilh%'); - $persons = $this->_em->getRepository(CompanyPerson::class)->findAll(); + $persons = $this->em->getRepository(CompanyPerson::class)->findAll(); self::assertEquals(1, count($persons)); self::assertEquals("Guilherme", $persons[0]->getName()); - self::assertEquals(1, count($this->_em->createQuery("SELECT cp FROM Doctrine\Tests\Models\Company\CompanyPerson cp")->getResult())); + self::assertEquals(1, count($this->em->createQuery("SELECT cp FROM Doctrine\Tests\Models\Company\CompanyPerson cp")->getResult())); } private function loadCompanyJoinedSubclassFixtureData() @@ -738,47 +738,47 @@ private function loadCompanyJoinedSubclassFixtureData() $person = new CompanyPerson; $person->setName('Benjamin'); - $this->_em->persist($manager); - $this->_em->persist($manager2); - $this->_em->persist($person); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($manager); + $this->em->persist($manager2); + $this->em->persist($person); + $this->em->flush(); + $this->em->clear(); } public function testSingleTableInheritance_FilterOnlyOnRootTableWhenFetchingSubEntity() { $this->loadCompanySingleTableInheritanceFixtureData(); // Persister - self::assertEquals(2, count($this->_em->getRepository(CompanyFlexUltraContract::class)->findAll())); + self::assertEquals(2, count($this->em->getRepository(CompanyFlexUltraContract::class)->findAll())); // SQLWalker - self::assertEquals(2, count($this->_em->createQuery("SELECT cfc FROM Doctrine\Tests\Models\Company\CompanyFlexUltraContract cfc")->getResult())); + self::assertEquals(2, count($this->em->createQuery("SELECT cfc FROM Doctrine\Tests\Models\Company\CompanyFlexUltraContract cfc")->getResult())); // Enable the filter - $conf = $this->_em->getConfiguration(); + $conf = $this->em->getConfiguration(); $conf->addFilter("completed_contract", "\Doctrine\Tests\ORM\Functional\CompletedContractFilter"); - $this->_em->getFilters() + $this->em->getFilters() ->enable("completed_contract") ->setParameter("completed", true, DBALType::BOOLEAN); - self::assertEquals(1, count($this->_em->getRepository(CompanyFlexUltraContract::class)->findAll())); - self::assertEquals(1, count($this->_em->createQuery("SELECT cfc FROM Doctrine\Tests\Models\Company\CompanyFlexUltraContract cfc")->getResult())); + self::assertEquals(1, count($this->em->getRepository(CompanyFlexUltraContract::class)->findAll())); + self::assertEquals(1, count($this->em->createQuery("SELECT cfc FROM Doctrine\Tests\Models\Company\CompanyFlexUltraContract cfc")->getResult())); } public function testSingleTableInheritance_FilterOnlyOnRootTableWhenFetchingRootEntity() { $this->loadCompanySingleTableInheritanceFixtureData(); - self::assertEquals(4, count($this->_em->getRepository(CompanyFlexContract::class)->findAll())); - self::assertEquals(4, count($this->_em->createQuery("SELECT cfc FROM Doctrine\Tests\Models\Company\CompanyFlexContract cfc")->getResult())); + self::assertEquals(4, count($this->em->getRepository(CompanyFlexContract::class)->findAll())); + self::assertEquals(4, count($this->em->createQuery("SELECT cfc FROM Doctrine\Tests\Models\Company\CompanyFlexContract cfc")->getResult())); // Enable the filter - $conf = $this->_em->getConfiguration(); + $conf = $this->em->getConfiguration(); $conf->addFilter("completed_contract", "\Doctrine\Tests\ORM\Functional\CompletedContractFilter"); - $this->_em->getFilters() + $this->em->getFilters() ->enable("completed_contract") ->setParameter("completed", true, DBALType::BOOLEAN); - self::assertEquals(2, count($this->_em->getRepository(CompanyFlexContract::class)->findAll())); - self::assertEquals(2, count($this->_em->createQuery("SELECT cfc FROM Doctrine\Tests\Models\Company\CompanyFlexContract cfc")->getResult())); + self::assertEquals(2, count($this->em->getRepository(CompanyFlexContract::class)->findAll())); + self::assertEquals(2, count($this->em->createQuery("SELECT cfc FROM Doctrine\Tests\Models\Company\CompanyFlexContract cfc")->getResult())); } private function loadCompanySingleTableInheritanceFixtureData() @@ -813,14 +813,14 @@ private function loadCompanySingleTableInheritanceFixtureData() $contract1->setSalesPerson($manager); $contract2->setSalesPerson($manager); - $this->_em->persist($manager); - $this->_em->persist($manager2); - $this->_em->persist($contract1); - $this->_em->persist($contract2); - $this->_em->persist($contract3); - $this->_em->persist($contract4); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($manager); + $this->em->persist($manager2); + $this->em->persist($contract1); + $this->em->persist($contract2); + $this->em->persist($contract3); + $this->em->persist($contract4); + $this->em->flush(); + $this->em->clear(); $this->managerId = $manager->getId(); $this->managerId2 = $manager2->getId(); @@ -830,9 +830,9 @@ private function loadCompanySingleTableInheritanceFixtureData() private function useCompletedContractFilter() { - $conf = $this->_em->getConfiguration(); + $conf = $this->em->getConfiguration(); $conf->addFilter("completed_contract", "\Doctrine\Tests\ORM\Functional\CompletedContractFilter"); - $this->_em->getFilters() + $this->em->getFilters() ->enable("completed_contract") ->setParameter("completed", true, DBALType::BOOLEAN); } @@ -841,7 +841,7 @@ public function testManyToMany_ExtraLazyCountWithFilterOnSTI() { $this->loadCompanySingleTableInheritanceFixtureData(); - $manager = $this->_em->find(CompanyManager::class, $this->managerId); + $manager = $this->em->find(CompanyManager::class, $this->managerId); self::assertFalse($manager->managedContracts->isInitialized()); self::assertEquals(4, count($manager->managedContracts)); @@ -857,9 +857,9 @@ public function testManyToMany_ExtraLazyContainsWithFilterOnSTI() { $this->loadCompanySingleTableInheritanceFixtureData(); - $manager = $this->_em->find(CompanyManager::class, $this->managerId); - $contract1 = $this->_em->find(CompanyContract::class, $this->contractId1); - $contract2 = $this->_em->find(CompanyContract::class, $this->contractId2); + $manager = $this->em->find(CompanyManager::class, $this->managerId); + $contract1 = $this->em->find(CompanyContract::class, $this->contractId1); + $contract2 = $this->em->find(CompanyContract::class, $this->contractId2); self::assertFalse($manager->managedContracts->isInitialized()); self::assertTrue($manager->managedContracts->contains($contract1)); @@ -877,7 +877,7 @@ public function testManyToMany_ExtraLazySliceWithFilterOnSTI() { $this->loadCompanySingleTableInheritanceFixtureData(); - $manager = $this->_em->find(CompanyManager::class, $this->managerId); + $manager = $this->em->find(CompanyManager::class, $this->managerId); self::assertFalse($manager->managedContracts->isInitialized()); self::assertEquals(4, count($manager->managedContracts->slice(0, 10))); @@ -892,9 +892,9 @@ public function testManyToMany_ExtraLazySliceWithFilterOnSTI() private function usePersonNameFilter($name) { // Enable the filter - $conf = $this->_em->getConfiguration(); + $conf = $this->em->getConfiguration(); $conf->addFilter("person_name", "\Doctrine\Tests\ORM\Functional\CompanyPersonNameFilter"); - $this->_em->getFilters() + $this->em->getFilters() ->enable("person_name") ->setParameter("name", $name, DBALType::STRING); } @@ -903,7 +903,7 @@ public function testManyToMany_ExtraLazyCountWithFilterOnCTI() { $this->loadCompanySingleTableInheritanceFixtureData(); - $contract = $this->_em->find(CompanyFlexUltraContract::class, $this->contractId1); + $contract = $this->em->find(CompanyFlexUltraContract::class, $this->contractId1); self::assertFalse($contract->managers->isInitialized()); self::assertEquals(2, count($contract->managers)); @@ -919,9 +919,9 @@ public function testManyToMany_ExtraLazyContainsWithFilterOnCTI() { $this->loadCompanySingleTableInheritanceFixtureData(); - $contract = $this->_em->find(CompanyFlexUltraContract::class, $this->contractId1); - $manager1 = $this->_em->find(CompanyManager::class, $this->managerId); - $manager2 = $this->_em->find(CompanyManager::class, $this->managerId2); + $contract = $this->em->find(CompanyFlexUltraContract::class, $this->contractId1); + $manager1 = $this->em->find(CompanyManager::class, $this->managerId); + $manager2 = $this->em->find(CompanyManager::class, $this->managerId2); self::assertFalse($contract->managers->isInitialized()); self::assertTrue($contract->managers->contains($manager1)); @@ -939,7 +939,7 @@ public function testManyToMany_ExtraLazySliceWithFilterOnCTI() { $this->loadCompanySingleTableInheritanceFixtureData(); - $contract = $this->_em->find(CompanyFlexUltraContract::class, $this->contractId1); + $contract = $this->em->find(CompanyFlexUltraContract::class, $this->contractId1); self::assertFalse($contract->managers->isInitialized()); self::assertEquals(2, count($contract->managers->slice(0, 10))); @@ -955,7 +955,7 @@ public function testOneToMany_ExtraLazyCountWithFilterOnSTI() { $this->loadCompanySingleTableInheritanceFixtureData(); - $manager = $this->_em->find(CompanyManager::class, $this->managerId); + $manager = $this->em->find(CompanyManager::class, $this->managerId); self::assertFalse($manager->soldContracts->isInitialized()); self::assertEquals(2, count($manager->soldContracts)); @@ -971,9 +971,9 @@ public function testOneToMany_ExtraLazyContainsWithFilterOnSTI() { $this->loadCompanySingleTableInheritanceFixtureData(); - $manager = $this->_em->find(CompanyManager::class, $this->managerId); - $contract1 = $this->_em->find(CompanyContract::class, $this->contractId1); - $contract2 = $this->_em->find(CompanyContract::class, $this->contractId2); + $manager = $this->em->find(CompanyManager::class, $this->managerId); + $contract1 = $this->em->find(CompanyContract::class, $this->contractId1); + $contract2 = $this->em->find(CompanyContract::class, $this->contractId2); self::assertFalse($manager->soldContracts->isInitialized()); self::assertTrue($manager->soldContracts->contains($contract1)); @@ -992,7 +992,7 @@ public function testOneToMany_ExtraLazySliceWithFilterOnSTI() $this->loadCompanySingleTableInheritanceFixtureData(); - $manager = $this->_em->find(CompanyManager::class, $this->managerId); + $manager = $this->em->find(CompanyManager::class, $this->managerId); self::assertFalse($manager->soldContracts->isInitialized()); self::assertEquals(2, count($manager->soldContracts->slice(0, 10))); @@ -1016,9 +1016,9 @@ private function loadCompanyOrganizationEventJoinedSubclassFixtureData() $organization->addEvent($event1); $organization->addEvent($event2); - $this->_em->persist($organization); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($organization); + $this->em->flush(); + $this->em->clear(); $this->organizationId = $organization->getId(); $this->eventId1 = $event1->getId(); @@ -1028,9 +1028,9 @@ private function loadCompanyOrganizationEventJoinedSubclassFixtureData() private function useCompanyEventIdFilter() { // Enable the filter - $conf = $this->_em->getConfiguration(); + $conf = $this->em->getConfiguration(); $conf->addFilter("event_id", CompanyEventFilter::class); - $this->_em->getFilters() + $this->em->getFilters() ->enable("event_id") ->setParameter("id", $this->eventId2); } @@ -1040,7 +1040,7 @@ public function testOneToMany_ExtraLazyCountWithFilterOnCTI() { $this->loadCompanyOrganizationEventJoinedSubclassFixtureData(); - $organization = $this->_em->find(CompanyOrganization::class, $this->organizationId); + $organization = $this->em->find(CompanyOrganization::class, $this->organizationId); self::assertFalse($organization->events->isInitialized()); self::assertEquals(2, count($organization->events)); @@ -1056,10 +1056,10 @@ public function testOneToMany_ExtraLazyContainsWithFilterOnCTI() { $this->loadCompanyOrganizationEventJoinedSubclassFixtureData(); - $organization = $this->_em->find(CompanyOrganization::class, $this->organizationId); + $organization = $this->em->find(CompanyOrganization::class, $this->organizationId); - $event1 = $this->_em->find(CompanyEvent::class, $this->eventId1); - $event2 = $this->_em->find(CompanyEvent::class, $this->eventId2); + $event1 = $this->em->find(CompanyEvent::class, $this->eventId1); + $event2 = $this->em->find(CompanyEvent::class, $this->eventId2); self::assertFalse($organization->events->isInitialized()); self::assertTrue($organization->events->contains($event1)); @@ -1077,7 +1077,7 @@ public function testOneToMany_ExtraLazySliceWithFilterOnCTI() { $this->loadCompanyOrganizationEventJoinedSubclassFixtureData(); - $organization = $this->_em->find(CompanyOrganization::class, $this->organizationId); + $organization = $this->em->find(CompanyOrganization::class, $this->organizationId); self::assertFalse($organization->events->isInitialized()); self::assertEquals(2, count($organization->events->slice(0, 10))); diff --git a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/CompanySchemaTest.php b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/CompanySchemaTest.php index 74ea46df75c..eacb4bb754b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/CompanySchemaTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/CompanySchemaTest.php @@ -25,7 +25,7 @@ protected function setUp() */ public function testGeneratedSchema() { - $schema = $this->_em->getConnection()->getSchemaManager()->createSchema(); + $schema = $this->em->getConnection()->getSchemaManager()->createSchema(); self::assertTrue($schema->hasTable('company_contracts')); @@ -56,13 +56,13 @@ public function testSingleTableInheritance(Schema $schema) */ public function testDropPartSchemaWithForeignKeys() { - if (!$this->_em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) { + if (!$this->em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) { $this->markTestSkipped("Foreign Key test"); } - $sql = $this->_schemaTool->getDropSchemaSQL( + $sql = $this->schemaTool->getDropSchemaSQL( [ - $this->_em->getClassMetadata(CompanyManager::class), + $this->em->getClassMetadata(CompanyManager::class), ] ); self::assertEquals(4, count($sql)); diff --git a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/DBAL483Test.php b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/DBAL483Test.php index 705f9b2ad30..4e9656fbdb8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/DBAL483Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/DBAL483Test.php @@ -11,9 +11,9 @@ public function setUp() { parent::setUp(); - $this->_em->getConnection(); + $this->em->getConnection(); - $this->schemaTool = new Tools\SchemaTool($this->_em); + $this->schemaTool = new Tools\SchemaTool($this->em); } /** @@ -21,7 +21,7 @@ public function setUp() */ public function testDefaultValueIsComparedCorrectly() { - $class = $this->_em->getClassMetadata(DBAL483Default::class); + $class = $this->em->getClassMetadata(DBAL483Default::class); $this->schemaTool->createSchema([$class]); diff --git a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/DDC214Test.php b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/DDC214Test.php index 72f1213aac6..231e92c7f47 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/DDC214Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/DDC214Test.php @@ -13,18 +13,16 @@ class DDC214Test extends OrmFunctionalTestCase { private $classes = []; - private $schemaTool = null; public function setUp() { parent::setUp(); - $conn = $this->_em->getConnection(); + $conn = $this->em->getConnection(); if (strpos($conn->getDriver()->getName(), "sqlite") !== false) { $this->markTestSkipped('SQLite does not support ALTER TABLE statements.'); } - $this->schemaTool = new Tools\SchemaTool($this->_em); } /** @@ -67,7 +65,7 @@ public function assertCreatedSchemaNeedsNoUpdates($classes) { $classMetadata = []; foreach ($classes AS $class) { - $classMetadata[] = $this->_em->getClassMetadata($class); + $classMetadata[] = $this->em->getClassMetadata($class); } try { @@ -76,7 +74,7 @@ public function assertCreatedSchemaNeedsNoUpdates($classes) // was already created } - $sm = $this->_em->getConnection()->getSchemaManager(); + $sm = $this->em->getConnection()->getSchemaManager(); $fromSchema = $sm->createSchema(); $toSchema = $this->schemaTool->getSchemaFromMetadata($classMetadata); @@ -84,7 +82,7 @@ public function assertCreatedSchemaNeedsNoUpdates($classes) $comparator = new Comparator(); $schemaDiff = $comparator->compare($fromSchema, $toSchema); - $sql = $schemaDiff->toSql($this->_em->getConnection()->getDatabasePlatform()); + $sql = $schemaDiff->toSql($this->em->getConnection()->getDatabasePlatform()); $sql = array_filter($sql, function($sql) { return strpos($sql, 'DROP') === false; }); self::assertEquals(0, count($sql), "SQL: " . implode(PHP_EOL, $sql)); diff --git a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/MySqlSchemaToolTest.php b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/MySqlSchemaToolTest.php index 1ca25b2cf63..c34057e39bf 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/MySqlSchemaToolTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/MySqlSchemaToolTest.php @@ -10,7 +10,7 @@ class MySqlSchemaToolTest extends OrmFunctionalTestCase { protected function setUp() { parent::setUp(); - if ($this->_em->getConnection()->getDatabasePlatform()->getName() !== 'mysql') { + if ($this->em->getConnection()->getDatabasePlatform()->getName() !== 'mysql') { $this->markTestSkipped('The ' . __CLASS__ .' requires the use of mysql.'); } } @@ -18,15 +18,15 @@ protected function setUp() { public function testGetCreateSchemaSql() { $classes = [ - $this->_em->getClassMetadata(Models\CMS\CmsGroup::class), - $this->_em->getClassMetadata(Models\CMS\CmsUser::class), - $this->_em->getClassMetadata(Models\CMS\CmsTag::class), - $this->_em->getClassMetadata(Models\CMS\CmsAddress::class), - $this->_em->getClassMetadata(Models\CMS\CmsEmail::class), - $this->_em->getClassMetadata(Models\CMS\CmsPhonenumber::class), + $this->em->getClassMetadata(Models\CMS\CmsGroup::class), + $this->em->getClassMetadata(Models\CMS\CmsUser::class), + $this->em->getClassMetadata(Models\CMS\CmsTag::class), + $this->em->getClassMetadata(Models\CMS\CmsAddress::class), + $this->em->getClassMetadata(Models\CMS\CmsEmail::class), + $this->em->getClassMetadata(Models\CMS\CmsPhonenumber::class), ]; - $tool = new SchemaTool($this->_em); + $tool = new SchemaTool($this->em); $sql = $tool->getCreateSchemaSql($classes); self::assertEquals("CREATE TABLE cms_groups (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(50) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB", $sql[0]); @@ -51,10 +51,10 @@ public function testGetCreateSchemaSql() public function testGetCreateSchemaSql2() { $classes = [ - $this->_em->getClassMetadata(Models\Generic\DecimalModel::class) + $this->em->getClassMetadata(Models\Generic\DecimalModel::class) ]; - $tool = new SchemaTool($this->_em); + $tool = new SchemaTool($this->em); $sql = $tool->getCreateSchemaSql($classes); self::assertEquals(1, count($sql)); @@ -64,10 +64,10 @@ public function testGetCreateSchemaSql2() public function testGetCreateSchemaSql3() { $classes = [ - $this->_em->getClassMetadata(Models\Generic\BooleanModel::class) + $this->em->getClassMetadata(Models\Generic\BooleanModel::class) ]; - $tool = new SchemaTool($this->_em); + $tool = new SchemaTool($this->em); $sql = $tool->getCreateSchemaSql($classes); self::assertEquals(1, count($sql)); @@ -80,10 +80,10 @@ public function testGetCreateSchemaSql3() public function testGetCreateSchemaSql4() { $classes = [ - $this->_em->getClassMetadata(MysqlSchemaNamespacedEntity::class) + $this->em->getClassMetadata(MysqlSchemaNamespacedEntity::class) ]; - $tool = new SchemaTool($this->_em); + $tool = new SchemaTool($this->em); $sql = $tool->getCreateSchemaSql($classes); self::assertEquals(0, count($sql)); diff --git a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php index e2b976eb3c6..06dbf4a260d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php @@ -12,14 +12,14 @@ protected function setUp() { parent::setUp(); - if ($this->_em->getConnection()->getDatabasePlatform()->getName() !== 'postgresql') { + if ($this->em->getConnection()->getDatabasePlatform()->getName() !== 'postgresql') { $this->markTestSkipped('The ' . __CLASS__ .' requires the use of postgresql.'); } } public function testPostgresMetadataSequenceIncrementedBy10() { - $address = $this->_em->getClassMetadata(Models\CMS\CmsAddress::class); + $address = $this->em->getClassMetadata(Models\CMS\CmsAddress::class); self::assertEquals(1, $address->generatorDefinition['allocationSize']); } @@ -27,12 +27,12 @@ public function testPostgresMetadataSequenceIncrementedBy10() public function testGetCreateSchemaSql() { $classes = [ - $this->_em->getClassMetadata(Models\CMS\CmsAddress::class), - $this->_em->getClassMetadata(Models\CMS\CmsUser::class), - $this->_em->getClassMetadata(Models\CMS\CmsPhonenumber::class), + $this->em->getClassMetadata(Models\CMS\CmsAddress::class), + $this->em->getClassMetadata(Models\CMS\CmsUser::class), + $this->em->getClassMetadata(Models\CMS\CmsPhonenumber::class), ]; - $tool = new SchemaTool($this->_em); + $tool = new SchemaTool($this->em); $sql = $tool->getCreateSchemaSql($classes); $sqlCount = count($sql); @@ -66,10 +66,10 @@ public function testGetCreateSchemaSql() public function testGetCreateSchemaSql2() { $classes = [ - $this->_em->getClassMetadata(Models\Generic\DecimalModel::class) + $this->em->getClassMetadata(Models\Generic\DecimalModel::class) ]; - $tool = new SchemaTool($this->_em); + $tool = new SchemaTool($this->em); $sql = $tool->getCreateSchemaSql($classes); self::assertEquals(2, count($sql)); @@ -81,10 +81,10 @@ public function testGetCreateSchemaSql2() public function testGetCreateSchemaSql3() { $classes = [ - $this->_em->getClassMetadata(Models\Generic\BooleanModel::class) + $this->em->getClassMetadata(Models\Generic\BooleanModel::class) ]; - $tool = new SchemaTool($this->_em); + $tool = new SchemaTool($this->em); $sql = $tool->getCreateSchemaSql($classes); self::assertEquals(2, count($sql)); @@ -95,12 +95,12 @@ public function testGetCreateSchemaSql3() public function testGetDropSchemaSql() { $classes = [ - $this->_em->getClassMetadata(Models\CMS\CmsAddress::class), - $this->_em->getClassMetadata(Models\CMS\CmsUser::class), - $this->_em->getClassMetadata(Models\CMS\CmsPhonenumber::class), + $this->em->getClassMetadata(Models\CMS\CmsAddress::class), + $this->em->getClassMetadata(Models\CMS\CmsUser::class), + $this->em->getClassMetadata(Models\CMS\CmsPhonenumber::class), ]; - $tool = new SchemaTool($this->_em); + $tool = new SchemaTool($this->em); $sql = $tool->getDropSchemaSQL($classes); self::assertEquals(17, count($sql)); @@ -121,11 +121,11 @@ public function testGetDropSchemaSql() public function testUpdateSchemaWithPostgreSQLSchema() { $classes = [ - $this->_em->getClassMetadata(DDC1657Screen::class), - $this->_em->getClassMetadata(DDC1657Avatar::class), + $this->em->getClassMetadata(DDC1657Screen::class), + $this->em->getClassMetadata(DDC1657Avatar::class), ]; - $tool = new SchemaTool($this->_em); + $tool = new SchemaTool($this->em); $tool->createSchema($classes); $sql = $tool->getUpdateSchemaSql($classes); diff --git a/tests/Doctrine/Tests/ORM/Functional/SchemaValidatorTest.php b/tests/Doctrine/Tests/ORM/Functional/SchemaValidatorTest.php index c4314fe28bb..3a3808b175b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SchemaValidatorTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SchemaValidatorTest.php @@ -48,7 +48,7 @@ public static function dataValidateModelSets(): array { $modelSets = []; - foreach (array_keys(self::$_modelSets) as $modelSet) { + foreach (array_keys(self::$modelSets) as $modelSet) { $modelSets[$modelSet] = [$modelSet]; } @@ -60,11 +60,11 @@ public static function dataValidateModelSets(): array */ public function testValidateModelSets(string $modelSet) { - $validator = new SchemaValidator($this->_em); - $classes = []; + $validator = new SchemaValidator($this->em); + $classes = []; - foreach (self::$_modelSets[$modelSet] as $className) { - $classes[] = $this->_em->getClassMetadata($className); + foreach (self::$modelSets[$modelSet] as $className) { + $classes[] = $this->em->getClassMetadata($className); } foreach ($classes as $class) { diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheAbstractTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheAbstractTest.php index becf7edbb4d..70b9f45f22b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheAbstractTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheAbstractTest.php @@ -51,7 +51,7 @@ protected function setUp() parent::setUp(); - $this->cache = $this->_em->getCache(); + $this->cache = $this->em->getCache(); } protected function loadFixturesCountries() @@ -62,9 +62,9 @@ protected function loadFixturesCountries() $this->countries[] = $brazil; $this->countries[] = $germany; - $this->_em->persist($brazil); - $this->_em->persist($germany); - $this->_em->flush(); + $this->em->persist($brazil); + $this->em->persist($germany); + $this->em->flush(); } protected function loadFixturesStates() @@ -79,12 +79,12 @@ protected function loadFixturesStates() $this->states[] = $bavaria; $this->states[] = $berlin; - $this->_em->persist($saopaulo); - $this->_em->persist($rio); - $this->_em->persist($bavaria); - $this->_em->persist($berlin); + $this->em->persist($saopaulo); + $this->em->persist($rio); + $this->em->persist($bavaria); + $this->em->persist($berlin); - $this->_em->flush(); + $this->em->flush(); } protected function loadFixturesCities() @@ -104,12 +104,12 @@ protected function loadFixturesCities() $this->cities[] = $munich; $this->cities[] = $berlin; - $this->_em->persist($saopaulo); - $this->_em->persist($rio); - $this->_em->persist($munich); - $this->_em->persist($berlin); + $this->em->persist($saopaulo); + $this->em->persist($rio); + $this->em->persist($munich); + $this->em->persist($berlin); - $this->_em->flush(); + $this->em->flush(); } protected function loadFixturesTraveler() @@ -117,13 +117,13 @@ protected function loadFixturesTraveler() $t1 = new Traveler("Fabio Silva"); $t2 = new Traveler("Doctrine Bot"); - $this->_em->persist($t1); - $this->_em->persist($t2); + $this->em->persist($t1); + $this->em->persist($t2); $this->travelers[] = $t1; $this->travelers[] = $t2; - $this->_em->flush(); + $this->em->flush(); } protected function loadFixturesTravelersWithProfile() @@ -136,15 +136,15 @@ protected function loadFixturesTravelersWithProfile() $t1->setProfile($p1); $t2->setProfile($p2); - $this->_em->persist($p1); - $this->_em->persist($p2); - $this->_em->persist($t1); - $this->_em->persist($t2); + $this->em->persist($p1); + $this->em->persist($p2); + $this->em->persist($t1); + $this->em->persist($t2); $this->travelersWithProfile[] = $t1; $this->travelersWithProfile[] = $t2; - $this->_em->flush(); + $this->em->flush(); } protected function loadFixturesTravelersProfileInfo() @@ -157,12 +157,12 @@ protected function loadFixturesTravelersProfileInfo() $p1->setInfo($i1); $p2->setInfo($i2); - $this->_em->persist($i1); - $this->_em->persist($i2); - $this->_em->persist($p1); - $this->_em->persist($p2); + $this->em->persist($i1); + $this->em->persist($i2); + $this->em->persist($p1); + $this->em->persist($p2); - $this->_em->flush(); + $this->em->flush(); } protected function loadFixturesTravels() @@ -178,15 +178,15 @@ protected function loadFixturesTravels() $t2->addVisitedCity($this->cities[1]); $t2->addVisitedCity($this->cities[3]); - $this->_em->persist($t1); - $this->_em->persist($t2); - $this->_em->persist($t3); + $this->em->persist($t1); + $this->em->persist($t2); + $this->em->persist($t3); $this->travels[] = $t1; $this->travels[] = $t2; $this->travels[] = $t3; - $this->_em->flush(); + $this->em->flush(); } protected function loadFixturesAttractions() @@ -208,10 +208,10 @@ protected function loadFixturesAttractions() $this->cities[3]->addAttraction($this->attractions[6]); foreach ($this->attractions as $attraction) { - $this->_em->persist($attraction); + $this->em->persist($attraction); } - $this->_em->flush(); + $this->em->flush(); } protected function loadFixturesAttractionsInfo() @@ -222,10 +222,10 @@ protected function loadFixturesAttractionsInfo() $this->attractionsInfo[] = new AttractionLocationInfo('Some St 2', $this->attractions[3]); foreach ($this->attractionsInfo as $info) { - $this->_em->persist($info); + $this->em->persist($info); } - $this->_em->flush(); + $this->em->flush(); } protected function loadFixturesPersonWithAddress() @@ -249,14 +249,14 @@ protected function loadFixturesPersonWithAddress() $this->addresses[] = $address2; foreach ($this->people as $person) { - $this->_em->persist($person); + $this->em->persist($person); } foreach ($this->addresses as $address) { - $this->_em->persist($address); + $this->em->persist($address); } - $this->_em->flush(); + $this->em->flush(); } protected function getEntityRegion($className) diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCompositePrimaryKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCompositePrimaryKeyTest.php index f17098f85e5..48f3dca8388 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCompositePrimaryKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCompositePrimaryKeyTest.php @@ -16,13 +16,13 @@ public function testPutAndLoadCompositPrimaryKeyEntities() $this->loadFixturesStates(); $this->loadFixturesCities(); - $this->_em->clear(); + $this->em->clear(); $this->evictRegions(); $leavingFromId = $this->cities[0]->getId(); $goingToId = $this->cities[1]->getId(); - $leavingFrom = $this->_em->find(City::class, $leavingFromId); - $goingTo = $this->_em->find(City::class, $goingToId); + $leavingFrom = $this->em->find(City::class, $leavingFromId); + $goingTo = $this->em->find(City::class, $goingToId); $flight = new Flight($leavingFrom, $goingTo); $id = [ 'leavingFrom' => $leavingFromId, @@ -34,16 +34,16 @@ public function testPutAndLoadCompositPrimaryKeyEntities() self::assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); self::assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); - $this->_em->persist($flight); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($flight); + $this->em->flush(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(Flight::class, $id)); self::assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); self::assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); $queryCount = $this->getCurrentQueryCount(); - $flight = $this->_em->find(Flight::class, $id); + $flight = $this->em->find(Flight::class, $id); $leavingFrom = $flight->getLeavingFrom(); $goingTo = $flight->getGoingTo(); @@ -62,13 +62,13 @@ public function testRemoveCompositPrimaryKeyEntities() $this->loadFixturesStates(); $this->loadFixturesCities(); - $this->_em->clear(); + $this->em->clear(); $this->evictRegions(); $leavingFromId = $this->cities[0]->getId(); $goingToId = $this->cities[1]->getId(); - $leavingFrom = $this->_em->find(City::class, $leavingFromId); - $goingTo = $this->_em->find(City::class, $goingToId); + $leavingFrom = $this->em->find(City::class, $leavingFromId); + $goingTo = $this->em->find(City::class, $goingToId); $flight = new Flight($leavingFrom, $goingTo); $id = [ 'leavingFrom' => $leavingFromId, @@ -80,22 +80,22 @@ public function testRemoveCompositPrimaryKeyEntities() self::assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); self::assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); - $this->_em->persist($flight); - $this->_em->flush(); + $this->em->persist($flight); + $this->em->flush(); self::assertTrue($this->cache->containsEntity(Flight::class, $id)); self::assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); self::assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); - $this->_em->remove($flight); - $this->_em->flush(); - $this->_em->clear(); + $this->em->remove($flight); + $this->em->flush(); + $this->em->clear(); self::assertFalse($this->cache->containsEntity(Flight::class, $id)); self::assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); self::assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); - self::assertNull($this->_em->find(Flight::class, $id)); + self::assertNull($this->em->find(Flight::class, $id)); } public function testUpdateCompositPrimaryKeyEntities() @@ -104,15 +104,15 @@ public function testUpdateCompositPrimaryKeyEntities() $this->loadFixturesStates(); $this->loadFixturesCities(); - $this->_em->clear(); + $this->em->clear(); $this->evictRegions(); $now = new \DateTime('now'); $tomorrow = new \DateTime('tomorrow'); $leavingFromId = $this->cities[0]->getId(); $goingToId = $this->cities[1]->getId(); - $leavingFrom = $this->_em->find(City::class, $leavingFromId); - $goingTo = $this->_em->find(City::class, $goingToId); + $leavingFrom = $this->em->find(City::class, $leavingFromId); + $goingTo = $this->em->find(City::class, $goingToId); $flight = new Flight($leavingFrom, $goingTo); $id = [ 'leavingFrom' => $leavingFromId, @@ -124,16 +124,16 @@ public function testUpdateCompositPrimaryKeyEntities() self::assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); self::assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); - $this->_em->persist($flight); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($flight); + $this->em->flush(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(Flight::class, $id)); self::assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); self::assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); $queryCount = $this->getCurrentQueryCount(); - $flight = $this->_em->find(Flight::class, $id); + $flight = $this->em->find(Flight::class, $id); $leavingFrom = $flight->getLeavingFrom(); $goingTo = $flight->getGoingTo(); @@ -149,16 +149,16 @@ public function testUpdateCompositPrimaryKeyEntities() $flight->setDeparture($tomorrow); - $this->_em->persist($flight); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($flight); + $this->em->flush(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(Flight::class, $id)); self::assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); self::assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); $queryCount = $this->getCurrentQueryCount(); - $flight = $this->_em->find(Flight::class, $id); + $flight = $this->em->find(Flight::class, $id); $leavingFrom = $flight->getLeavingFrom(); $goingTo = $flight->getGoingTo(); diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCompositePrimaryKeyWithAssociationsTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCompositePrimaryKeyWithAssociationsTest.php index 9f82b3cd7c8..135994095f2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCompositePrimaryKeyWithAssociationsTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCompositePrimaryKeyWithAssociationsTest.php @@ -21,17 +21,17 @@ public function setUp() $this->useModelSet('geonames'); parent::setUp(); - $this->cache = $this->_em->getCache(); + $this->cache = $this->em->getCache(); $it = new Country("IT", "Italy"); - $this->_em->persist($it); - $this->_em->flush(); + $this->em->persist($it); + $this->em->flush(); $admin1 = new Admin1(1, "Rome", $it); - $this->_em->persist($admin1); - $this->_em->flush(); + $this->em->persist($admin1); + $this->em->flush(); $name1 = new Admin1AlternateName(1, "Roma", $admin1); $name2 = new Admin1AlternateName(2, "Rome", $admin1); @@ -39,19 +39,19 @@ public function setUp() $admin1->names[] = $name1; $admin1->names[] = $name2; - $this->_em->persist($admin1); - $this->_em->persist($name1); - $this->_em->persist($name2); + $this->em->persist($admin1); + $this->em->persist($name1); + $this->em->persist($name2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); $this->evictRegions(); } public function testFindByReturnsCachedEntity() { - $admin1Repo = $this->_em->getRepository(Admin1::class); + $admin1Repo = $this->em->getRepository(Admin1::class); $queries = $this->getCurrentQueryCount(); @@ -61,7 +61,7 @@ public function testFindByReturnsCachedEntity() self::assertEquals(2, count($admin1Rome->names)); self::assertEquals($queries + 3, $this->getCurrentQueryCount()); - $this->_em->clear(); + $this->em->clear(); $queries = $this->getCurrentQueryCount(); diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php index 74b965d9639..07f26ca200a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php @@ -34,33 +34,33 @@ protected function setUp() $this->cacheFactory = new CacheFactorySecondLevelCacheConcurrentTest($this->getSharedSecondLevelCacheDriverImpl()); - $this->_em->getConfiguration() + $this->em->getConfiguration() ->getSecondLevelCacheConfiguration() ->setCacheFactory($this->cacheFactory); - $this->countryMetadata = $this->_em->getClassMetadata(Country::class); + $this->countryMetadata = $this->em->getClassMetadata(Country::class); $countryMetadata = clone $this->countryMetadata; $countryMetadata->cache['usage'] = CacheUsage::NONSTRICT_READ_WRITE; - $this->_em->getMetadataFactory()->setMetadataFor(Country::class, $countryMetadata); + $this->em->getMetadataFactory()->setMetadataFor(Country::class, $countryMetadata); } protected function tearDown() { parent::tearDown(); - $this->_em->getMetadataFactory()->setMetadataFor(Country::class, $this->countryMetadata); + $this->em->getMetadataFactory()->setMetadataFor(Country::class, $this->countryMetadata); } public function testBasicConcurrentEntityReadLock() { $this->loadFixturesCountries(); - $this->_em->clear(); + $this->em->clear(); $countryId = $this->countries[0]->getId(); $cacheId = new EntityCacheKey(Country::class, ['id'=>$countryId]); - $region = $this->_em->getCache()->getEntityCacheRegion(Country::class); + $region = $this->em->getCache()->getEntityCacheRegion(Country::class); self::assertTrue($this->cache->containsEntity(Country::class, $countryId)); @@ -70,7 +70,7 @@ public function testBasicConcurrentEntityReadLock() self::assertFalse($this->cache->containsEntity(Country::class, $countryId)); $queryCount = $this->getCurrentQueryCount(); - $country = $this->_em->find(Country::class, $countryId); + $country = $this->em->find(Country::class, $countryId); self::assertInstanceOf(Country::class, $country); self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); @@ -83,23 +83,23 @@ public function testBasicConcurrentCollectionReadLock() $this->loadFixturesStates(); $this->loadFixturesCities(); - $this->_em->clear(); + $this->em->clear(); $this->evictRegions(); $stateId = $this->states[0]->getId(); - $state = $this->_em->find(State::class, $stateId); + $state = $this->em->find(State::class, $stateId); self::assertInstanceOf(State::class, $state); self::assertInstanceOf(Country::class, $state->getCountry()); self::assertNotNull($state->getCountry()->getName()); self::assertCount(2, $state->getCities()); - $this->_em->clear(); + $this->em->clear(); $this->secondLevelCacheLogger->clearStats(); $stateId = $this->states[0]->getId(); $cacheId = new CollectionCacheKey(State::class, 'cities', ['id'=>$stateId]); - $region = $this->_em->getCache()->getCollectionCacheRegion(State::class, 'cities'); + $region = $this->em->getCache()->getCollectionCacheRegion(State::class, 'cities'); self::assertTrue($this->cache->containsCollection(State::class, 'cities', $stateId)); @@ -109,7 +109,7 @@ public function testBasicConcurrentCollectionReadLock() self::assertFalse($this->cache->containsCollection(State::class, 'cities', $stateId)); $queryCount = $this->getCurrentQueryCount(); - $state = $this->_em->find(State::class, $stateId); + $state = $this->em->find(State::class, $stateId); self::assertEquals(0, $this->secondLevelCacheLogger->getMissCount()); self::assertEquals(1, $this->secondLevelCacheLogger->getHitCount()); diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCriteriaTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCriteriaTest.php index 78b2777dc62..58428ac2859 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCriteriaTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheCriteriaTest.php @@ -18,11 +18,11 @@ public function testMatchingPut() $this->loadFixturesCountries(); $this->evictRegions(); - $this->_em->clear(); + $this->em->clear(); self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $repository = $this->_em->getRepository(Country::class); + $repository = $this->em->getRepository(Country::class); $queryCount = $this->getCurrentQueryCount(); $name = $this->countries[0]->getName(); $result1 = $repository->matching(new Criteria( @@ -38,7 +38,7 @@ public function testMatchingPut() self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $this->_em->clear(); + $this->em->clear(); $result2 = $repository->matching(new Criteria( Criteria::expr()->eq('name', $name) @@ -58,11 +58,11 @@ public function testRepositoryMatching() $this->evictRegions(); $this->loadFixturesCountries(); - $this->_em->clear(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); - $repository = $this->_em->getRepository(Country::class); + $repository = $this->em->getRepository(Country::class); $queryCount = $this->getCurrentQueryCount(); $result1 = $repository->matching(new Criteria( Criteria::expr()->eq('name', $this->countries[0]->getName()) @@ -76,7 +76,7 @@ public function testRepositoryMatching() self::assertEquals($this->countries[0]->getId(), $result1[0]->getId()); self::assertEquals($this->countries[0]->getName(), $result1[0]->getName()); - $this->_em->clear(); + $this->em->clear(); $result2 = $repository->matching(new Criteria( Criteria::expr()->eq('name', $this->countries[0]->getName()) @@ -126,10 +126,10 @@ public function testCollectionMatching() $this->loadFixturesCountries(); $this->loadFixturesStates(); $this->loadFixturesCities(); - $this->_em->clear(); + $this->em->clear(); $this->secondLevelCacheLogger->clearStats(); - $entity = $this->_em->find(State::class, $this->states[0]->getId()); + $entity = $this->em->find(State::class, $this->states[0]->getId()); $itemName = $this->states[0]->getCities()->get(0)->getName(); $queryCount = $this->getCurrentQueryCount(); $collection = $entity->getCities(); @@ -141,9 +141,9 @@ public function testCollectionMatching() self::assertInstanceOf(Collection::class, $matching); self::assertCount(1, $matching); - $this->_em->clear(); + $this->em->clear(); - $entity = $this->_em->find(State::class, $this->states[0]->getId()); + $entity = $this->em->find(State::class, $this->states[0]->getId()); $queryCount = $this->getCurrentQueryCount(); $collection = $entity->getCities(); $matching = $collection->matching(new Criteria( diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheExtraLazyCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheExtraLazyCollectionTest.php index 7c204a1de96..9fc349c30b9 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheExtraLazyCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheExtraLazyCollectionTest.php @@ -17,8 +17,8 @@ public function setUp() { parent::setUp(); - $sourceEntity = $this->_em->getClassMetadata(Travel::class); - $targetEntity = $this->_em->getClassMetadata(City::class); + $sourceEntity = $this->em->getClassMetadata(Travel::class); + $targetEntity = $this->em->getClassMetadata(City::class); $sourceEntity->associationMappings['visitedCities']['fetch'] = FetchMode::EXTRA_LAZY; $targetEntity->associationMappings['travels']['fetch'] = FetchMode::EXTRA_LAZY; @@ -28,8 +28,8 @@ public function tearDown() { parent::tearDown(); - $sourceEntity = $this->_em->getClassMetadata(Travel::class); - $targetEntity = $this->_em->getClassMetadata(City::class); + $sourceEntity = $this->em->getClassMetadata(Travel::class); + $targetEntity = $this->em->getClassMetadata(City::class); $sourceEntity->associationMappings['visitedCities']['fetch'] = FetchMode::LAZY; $targetEntity->associationMappings['travels']['fetch'] = FetchMode::LAZY; @@ -43,11 +43,11 @@ public function testCacheCountAfterAddThenFlush() $this->loadFixturesTraveler(); $this->loadFixturesTravels(); - $this->_em->clear(); + $this->em->clear(); $ownerId = $this->travels[0]->getId(); - $owner = $this->_em->find(Travel::class, $ownerId); - $ref = $this->_em->find(State::class, $this->states[1]->getId()); + $owner = $this->em->find(Travel::class, $ownerId); + $ref = $this->em->find(State::class, $this->states[1]->getId()); self::assertTrue($this->cache->containsEntity(Travel::class, $ownerId)); self::assertTrue($this->cache->containsCollection(Travel::class, 'visitedCities', $ownerId)); @@ -55,8 +55,8 @@ public function testCacheCountAfterAddThenFlush() $newItem = new City("New City", $ref); $owner->getVisitedCities()->add($newItem); - $this->_em->persist($newItem); - $this->_em->persist($owner); + $this->em->persist($newItem); + $this->em->persist($owner); $queryCount = $this->getCurrentQueryCount(); @@ -65,15 +65,15 @@ public function testCacheCountAfterAddThenFlush() self::assertFalse($owner->getVisitedCities()->isInitialized()); self::assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->_em->flush(); + $this->em->flush(); self::assertFalse($owner->getVisitedCities()->isInitialized()); self::assertFalse($this->cache->containsCollection(Travel::class, 'visitedCities', $ownerId)); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); - $owner = $this->_em->find(Travel::class, $ownerId); + $owner = $this->em->find(Travel::class, $ownerId); self::assertEquals(4, $owner->getVisitedCities()->count()); self::assertFalse($owner->getVisitedCities()->isInitialized()); diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheJoinTableInheritanceTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheJoinTableInheritanceTest.php index 8157eb280b0..fe2c389a601 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheJoinTableInheritanceTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheJoinTableInheritanceTest.php @@ -31,7 +31,7 @@ public function testPutOnPersistJoinTableInheritance() $this->loadFixturesAttractions(); $this->loadFixturesAttractionsInfo(); - $this->_em->clear(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(AttractionInfo::class, $this->attractionsInfo[0]->getId())); self::assertTrue($this->cache->containsEntity(AttractionInfo::class, $this->attractionsInfo[1]->getId())); @@ -47,7 +47,7 @@ public function testJoinTableCountaisRootClass() $this->loadFixturesAttractions(); $this->loadFixturesAttractionsInfo(); - $this->_em->clear(); + $this->em->clear(); foreach ($this->attractionsInfo as $info) { self::assertTrue($this->cache->containsEntity(AttractionInfo::class, $info->getId())); @@ -63,7 +63,7 @@ public function testPutAndLoadJoinTableEntities() $this->loadFixturesAttractions(); $this->loadFixturesAttractionsInfo(); - $this->_em->clear(); + $this->em->clear(); $this->cache->evictEntityRegion(AttractionInfo::class); @@ -76,8 +76,8 @@ public function testPutAndLoadJoinTableEntities() self::assertFalse($this->cache->containsEntity(AttractionContactInfo::class, $entityId2)); $queryCount = $this->getCurrentQueryCount(); - $entity1 = $this->_em->find(AttractionInfo::class, $entityId1); - $entity2 = $this->_em->find(AttractionInfo::class, $entityId2); + $entity1 = $this->em->find(AttractionInfo::class, $entityId1); + $entity2 = $this->em->find(AttractionInfo::class, $entityId2); //load entity and relation whit sub classes self::assertEquals($queryCount + 4, $this->getCurrentQueryCount()); @@ -98,11 +98,11 @@ public function testPutAndLoadJoinTableEntities() self::assertEquals($this->attractionsInfo[1]->getId(), $entity2->getId()); self::assertEquals($this->attractionsInfo[1]->getFone(), $entity2->getFone()); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); - $entity3 = $this->_em->find(AttractionInfo::class, $entityId1); - $entity4 = $this->_em->find(AttractionInfo::class, $entityId2); + $entity3 = $this->em->find(AttractionInfo::class, $entityId1); + $entity4 = $this->em->find(AttractionInfo::class, $entityId2); self::assertEquals($queryCount, $this->getCurrentQueryCount()); @@ -128,20 +128,20 @@ public function testQueryCacheFindAllJoinTableEntities() $this->loadFixturesAttractions(); $this->loadFixturesAttractionsInfo(); $this->evictRegions(); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT i, a FROM Doctrine\Tests\Models\Cache\AttractionInfo i JOIN i.attraction a'; - $result1 = $this->_em->createQuery($dql) + $result1 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); self::assertCount(count($this->attractionsInfo), $result1); self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->_em->clear(); + $this->em->clear(); - $result2 = $this->_em->createQuery($dql) + $result2 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -161,9 +161,9 @@ public function testOneToManyRelationJoinTable() $this->loadFixturesAttractions(); $this->loadFixturesAttractionsInfo(); $this->evictRegions(); - $this->_em->clear(); + $this->em->clear(); - $entity = $this->_em->find(Attraction::class, $this->attractions[0]->getId()); + $entity = $this->em->find(Attraction::class, $this->attractions[0]->getId()); self::assertInstanceOf(Attraction::class, $entity); self::assertInstanceOf(PersistentCollection::class, $entity->getInfos()); @@ -178,9 +178,9 @@ public function testOneToManyRelationJoinTable() self::assertInstanceOf(AttractionContactInfo::class, $entity->getInfos()->get(0)); self::assertEquals($this->attractionsInfo[0]->getFone(), $entity->getInfos()->get(0)->getFone()); - $this->_em->clear(); + $this->em->clear(); - $entity = $this->_em->find(Attraction::class, $this->attractions[0]->getId()); + $entity = $this->em->find(Attraction::class, $this->attractions[0]->getId()); self::assertInstanceOf(Attraction::class, $entity); self::assertInstanceOf(PersistentCollection::class, $entity->getInfos()); @@ -198,12 +198,12 @@ public function testQueryCacheShouldBeEvictedOnTimestampUpdate() $this->loadFixturesAttractions(); $this->loadFixturesAttractionsInfo(); $this->evictRegions(); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT attractionInfo FROM Doctrine\Tests\Models\Cache\AttractionInfo attractionInfo'; - $result1 = $this->_em->createQuery($dql) + $result1 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -212,16 +212,16 @@ public function testQueryCacheShouldBeEvictedOnTimestampUpdate() $contact = new AttractionContactInfo( '1234-1234', - $this->_em->find(Attraction::class, $this->attractions[5]->getId()) + $this->em->find(Attraction::class, $this->attractions[5]->getId()) ); - $this->_em->persist($contact); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($contact); + $this->em->flush(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); - $result2 = $this->_em->createQuery($dql) + $result2 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheManyToManyTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheManyToManyTest.php index b7f6bc77adc..4d3898a4c24 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheManyToManyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheManyToManyTest.php @@ -21,7 +21,7 @@ public function testShouldPutManyToManyCollectionOwningSideOnPersist() $this->loadFixturesCities(); $this->loadFixturesTraveler(); $this->loadFixturesTravels(); - $this->_em->clear(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(Travel::class, $this->travels[0]->getId())); self::assertTrue($this->cache->containsEntity(Travel::class, $this->travels[1]->getId())); @@ -45,7 +45,7 @@ public function testPutAndLoadManyToManyRelation() $this->loadFixturesTraveler(); $this->loadFixturesTravels(); - $this->_em->clear(); + $this->em->clear(); $this->cache->evictEntityRegion(City::class); $this->cache->evictEntityRegion(Travel::class); $this->cache->evictCollectionRegion(Travel::class, 'visitedCities'); @@ -63,8 +63,8 @@ public function testPutAndLoadManyToManyRelation() self::assertFalse($this->cache->containsEntity(City::class, $this->cities[2]->getId())); self::assertFalse($this->cache->containsEntity(City::class, $this->cities[3]->getId())); - $t1 = $this->_em->find(Travel::class, $this->travels[0]->getId()); - $t2 = $this->_em->find(Travel::class, $this->travels[1]->getId()); + $t1 = $this->em->find(Travel::class, $this->travels[0]->getId()); + $t2 = $this->em->find(Travel::class, $this->travels[1]->getId()); self::assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); self::assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); @@ -98,13 +98,13 @@ public function testPutAndLoadManyToManyRelation() self::assertTrue($this->cache->containsEntity(City::class, $this->cities[2]->getId())); self::assertTrue($this->cache->containsEntity(City::class, $this->cities[3]->getId())); - $this->_em->clear(); + $this->em->clear(); $this->secondLevelCacheLogger->clearStats(); $queryCount = $this->getCurrentQueryCount(); - $t3 = $this->_em->find(Travel::class, $this->travels[0]->getId()); - $t4 = $this->_em->find(Travel::class, $this->travels[1]->getId()); + $t3 = $this->em->find(Travel::class, $this->travels[0]->getId()); + $t4 = $this->em->find(Travel::class, $this->travels[1]->getId()); //trigger lazy load from cache self::assertCount(3, $t3->getVisitedCities()); @@ -166,10 +166,10 @@ public function testStoreManyToManyAssociationWhitCascade() $travel->addVisitedCity($this->cities[1]); $travel->addVisitedCity($this->cities[3]); - $this->_em->persist($traveler); - $this->_em->persist($travel); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($traveler); + $this->em->persist($travel); + $this->em->flush(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(Travel::class, $travel->getId())); self::assertTrue($this->cache->containsEntity(Traveler::class, $traveler->getId())); @@ -179,7 +179,7 @@ public function testStoreManyToManyAssociationWhitCascade() self::assertTrue($this->cache->containsCollection(Travel::class, 'visitedCities', $travel->getId())); $queryCount1 = $this->getCurrentQueryCount(); - $t1 = $this->_em->find(Travel::class, $travel->getId()); + $t1 = $this->em->find(Travel::class, $travel->getId()); self::assertInstanceOf(Travel::class, $t1); self::assertCount(3, $t1->getVisitedCities()); @@ -200,19 +200,19 @@ public function testReadOnlyCollection() $this->loadFixturesTraveler(); $this->loadFixturesTravels(); - $this->_em->clear(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(Travel::class, $this->travels[0]->getId())); self::assertTrue($this->cache->containsCollection(Travel::class, 'visitedCities', $this->travels[0]->getId())); - $travel = $this->_em->find(Travel::class, $this->travels[0]->getId()); + $travel = $this->em->find(Travel::class, $this->travels[0]->getId()); self::assertCount(3, $travel->getVisitedCities()); $travel->getVisitedCities()->remove(0); - $this->_em->persist($travel); - $this->_em->flush(); + $this->em->persist($travel); + $this->em->flush(); } public function testManyToManyWithEmptyRelation() @@ -222,21 +222,21 @@ public function testManyToManyWithEmptyRelation() $this->loadFixturesCities(); $this->loadFixturesTraveler(); $this->loadFixturesTravels(); - $this->_em->clear(); + $this->em->clear(); $this->evictRegions(); $queryCount = $this->getCurrentQueryCount(); $entitiId = $this->travels[2]->getId(); //empty travel - $entity = $this->_em->find(Travel::class, $entitiId); + $entity = $this->em->find(Travel::class, $entitiId); self::assertEquals(0, $entity->getVisitedCities()->count()); self::assertEquals($queryCount+2, $this->getCurrentQueryCount()); - $this->_em->clear(); + $this->em->clear(); - $entity = $this->_em->find(Travel::class, $entitiId); + $entity = $this->em->find(Travel::class, $entitiId); $queryCount = $this->getCurrentQueryCount(); self::assertEquals(0, $entity->getVisitedCities()->count()); diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheManyToOneTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheManyToOneTest.php index ae702652eca..50b651c81a2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheManyToOneTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheManyToOneTest.php @@ -19,7 +19,7 @@ public function testPutOnPersist() { $this->loadFixturesCountries(); $this->loadFixturesStates(); - $this->_em->clear(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(Country::class, $this->states[0]->getCountry()->getId())); self::assertTrue($this->cache->containsEntity(Country::class, $this->states[1]->getCountry()->getId())); @@ -31,7 +31,7 @@ public function testPutAndLoadManyToOneRelation() { $this->loadFixturesCountries(); $this->loadFixturesStates(); - $this->_em->clear(); + $this->em->clear(); $this->cache->evictEntityRegion(State::class); $this->cache->evictEntityRegion(Country::class); @@ -41,8 +41,8 @@ public function testPutAndLoadManyToOneRelation() self::assertFalse($this->cache->containsEntity(Country::class, $this->states[0]->getCountry()->getId())); self::assertFalse($this->cache->containsEntity(Country::class, $this->states[1]->getCountry()->getId())); - $c1 = $this->_em->find(State::class, $this->states[0]->getId()); - $c2 = $this->_em->find(State::class, $this->states[1]->getId()); + $c1 = $this->em->find(State::class, $this->states[0]->getId()); + $c2 = $this->em->find(State::class, $this->states[1]->getId()); //trigger lazy load self::assertNotNull($c1->getCountry()->getName()); @@ -68,12 +68,12 @@ public function testPutAndLoadManyToOneRelation() self::assertEquals($this->states[1]->getCountry()->getId(), $c2->getCountry()->getId()); self::assertEquals($this->states[1]->getCountry()->getName(), $c2->getCountry()->getName()); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); - $c3 = $this->_em->find(State::class, $this->states[0]->getId()); - $c4 = $this->_em->find(State::class, $this->states[1]->getId()); + $c3 = $this->em->find(State::class, $this->states[0]->getId()); + $c4 = $this->em->find(State::class, $this->states[1]->getId()); self::assertEquals($queryCount, $this->getCurrentQueryCount()); @@ -104,25 +104,25 @@ public function testInverseSidePutShouldEvictCollection() $this->loadFixturesCountries(); $this->loadFixturesStates(); - $this->_em->clear(); + $this->em->clear(); $this->cache->evictEntityRegion(State::class); $this->cache->evictEntityRegion(Country::class); //evict collection on add - $c3 = $this->_em->find(State::class, $this->states[0]->getId()); + $c3 = $this->em->find(State::class, $this->states[0]->getId()); $prev = $c3->getCities(); $count = $prev->count(); $city = new City("Buenos Aires", $c3); $c3->addCity($city); - $this->_em->persist($city); - $this->_em->persist($c3); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($city); + $this->em->persist($c3); + $this->em->flush(); + $this->em->clear(); - $state = $this->_em->find(State::class, $c3->getId()); + $state = $this->em->find(State::class, $c3->getId()); $queryCount = $this->getCurrentQueryCount(); // Association was cleared from EM @@ -137,7 +137,7 @@ public function testShouldNotReloadWhenAssociationIsMissing() { $this->loadFixturesCountries(); $this->loadFixturesStates(); - $this->_em->clear(); + $this->em->clear(); $stateId1 = $this->states[0]->getId(); $stateId2 = $this->states[3]->getId(); @@ -155,12 +155,12 @@ public function testShouldNotReloadWhenAssociationIsMissing() self::assertFalse($this->cache->containsEntity(Country::class, $countryId1)); self::assertFalse($this->cache->containsEntity(Country::class, $countryId2)); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); - $state1 = $this->_em->find(State::class, $stateId1); - $state2 = $this->_em->find(State::class, $stateId2); + $state1 = $this->em->find(State::class, $stateId1); + $state2 = $this->em->find(State::class, $stateId2); self::assertEquals($queryCount, $this->getCurrentQueryCount()); @@ -188,16 +188,16 @@ public function testPutAndLoadNonCacheableManyToOne() $action = new Action('exec'); $action->addToken($token); - $this->_em->persist($token); + $this->em->persist($token); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(Token::class, $token->token)); self::assertFalse($this->cache->containsEntity(Token::class, $action->name)); $queryCount = $this->getCurrentQueryCount(); - $entity = $this->_em->find(Token::class, $token->token); + $entity = $this->em->find(Token::class, $token->token); self::assertInstanceOf(Token::class, $entity); self::assertEquals('token-hash', $entity->token); @@ -226,10 +226,10 @@ public function testPutAndLoadNonCacheableCompositeManyToOne() $token->action = $action2; - $this->_em->persist($token); + $this->em->persist($token); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(Token::class, $token->token)); self::assertFalse($this->cache->containsEntity(Action::class, $action1->name)); @@ -240,7 +240,7 @@ public function testPutAndLoadNonCacheableCompositeManyToOne() /** * @var $entity Token */ - $entity = $this->_em->find(Token::class, $token->token); + $entity = $this->em->find(Token::class, $token->token); self::assertInstanceOf(Token::class, $entity); self::assertEquals('token-hash', $entity->token); diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheOneToManyTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheOneToManyTest.php index d8d51078c7f..7112e0cc24d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheOneToManyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheOneToManyTest.php @@ -21,7 +21,7 @@ public function testShouldPutCollectionInverseSideOnPersist() $this->loadFixturesStates(); $this->loadFixturesCities(); - $this->_em->clear(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); self::assertTrue($this->cache->containsEntity(State::class, $this->states[1]->getId())); @@ -34,7 +34,7 @@ public function testPutAndLoadOneToManyRelation() $this->loadFixturesCountries(); $this->loadFixturesStates(); $this->loadFixturesCities(); - $this->_em->clear(); + $this->em->clear(); $this->secondLevelCacheLogger->clearStats(); $this->cache->evictEntityRegion(State::class); @@ -52,8 +52,8 @@ public function testPutAndLoadOneToManyRelation() self::assertFalse($this->cache->containsEntity(City::class, $this->states[1]->getCities()->get(0)->getId())); self::assertFalse($this->cache->containsEntity(City::class, $this->states[1]->getCities()->get(1)->getId())); - $s1 = $this->_em->find(State::class, $this->states[0]->getId()); - $s2 = $this->_em->find(State::class, $this->states[1]->getId()); + $s1 = $this->em->find(State::class, $this->states[0]->getId()); + $s2 = $this->em->find(State::class, $this->states[1]->getId()); self::assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); self::assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); @@ -86,13 +86,13 @@ public function testPutAndLoadOneToManyRelation() self::assertTrue($this->cache->containsEntity(City::class, $this->states[1]->getCities()->get(0)->getId())); self::assertTrue($this->cache->containsEntity(City::class, $this->states[1]->getCities()->get(1)->getId())); - $this->_em->clear(); + $this->em->clear(); $this->secondLevelCacheLogger->clearStats(); $queryCount = $this->getCurrentQueryCount(); - $s3 = $this->_em->find(State::class, $this->states[0]->getId()); - $s4 = $this->_em->find(State::class, $this->states[1]->getId()); + $s3 = $this->em->find(State::class, $this->states[0]->getId()); + $s4 = $this->em->find(State::class, $this->states[1]->getId()); //trigger lazy load from cache self::assertCount(2, $s3->getCities()); @@ -132,10 +132,10 @@ public function testLoadOneToManyCollectionFromDatabaseWhenEntityMissing() $this->loadFixturesCountries(); $this->loadFixturesStates(); $this->loadFixturesCities(); - $this->_em->clear(); + $this->em->clear(); //trigger lazy load from database - self::assertCount(2, $this->_em->find(State::class, $this->states[0]->getId())->getCities()); + self::assertCount(2, $this->em->find(State::class, $this->states[0]->getId())->getCities()); self::assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); self::assertTrue($this->cache->containsCollection(State::class, 'cities', $this->states[0]->getId())); @@ -144,7 +144,7 @@ public function testLoadOneToManyCollectionFromDatabaseWhenEntityMissing() $queryCount = $this->getCurrentQueryCount(); $stateId = $this->states[0]->getId(); - $state = $this->_em->find(State::class, $stateId); + $state = $this->em->find(State::class, $stateId); $cityId = $this->states[0]->getCities()->get(1)->getId(); //trigger lazy load from cache @@ -158,9 +158,9 @@ public function testLoadOneToManyCollectionFromDatabaseWhenEntityMissing() self::assertTrue($this->cache->containsEntity(State::class, $stateId)); self::assertTrue($this->cache->containsCollection(State::class, 'cities', $stateId)); - $this->_em->clear(); + $this->em->clear(); - $state = $this->_em->find(State::class, $stateId); + $state = $this->em->find(State::class, $stateId); //trigger lazy load from database self::assertCount(2, $state->getCities()); @@ -175,9 +175,9 @@ public function testShoudNotPutOneToManyRelationOnPersist() $state = new State("State Foo", $this->countries[0]); - $this->_em->persist($state); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($state); + $this->em->flush(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(State::class, $state->getId())); self::assertFalse($this->cache->containsCollection(State::class, 'cities', $state->getId())); @@ -189,7 +189,7 @@ public function testOneToManyRemove() $this->loadFixturesStates(); $this->loadFixturesCities(); - $this->_em->clear(); + $this->em->clear(); $this->secondLevelCacheLogger->clearStats(); $this->cache->evictEntityRegion(State::class); @@ -201,7 +201,7 @@ public function testOneToManyRemove() self::assertFalse($this->cache->containsEntity(City::class, $this->states[0]->getCities()->get(0)->getId())); self::assertFalse($this->cache->containsEntity(City::class, $this->states[0]->getCities()->get(1)->getId())); - $entity = $this->_em->find(State::class, $this->states[0]->getId()); + $entity = $this->em->find(State::class, $this->states[0]->getId()); self::assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); @@ -219,11 +219,11 @@ public function testOneToManyRemove() self::assertInstanceOf(City::class, $entity->getCities()->get(0)); self::assertInstanceOf(City::class, $entity->getCities()->get(1)); - $this->_em->clear(); + $this->em->clear(); $this->secondLevelCacheLogger->clearStats(); $queryCount = $this->getCurrentQueryCount(); - $state = $this->_em->find(State::class, $this->states[0]->getId()); + $state = $this->em->find(State::class, $this->states[0]->getId()); //trigger lazy load from cache self::assertCount(2, $state->getCities()); @@ -246,15 +246,15 @@ public function testOneToManyRemove() $state->getCities()->removeElement($city0); - $this->_em->remove($city0); - $this->_em->persist($state); - $this->_em->flush(); - $this->_em->clear(); + $this->em->remove($city0); + $this->em->persist($state); + $this->em->flush(); + $this->em->clear(); $this->secondLevelCacheLogger->clearStats(); $queryCount = $this->getCurrentQueryCount(); - $state = $this->_em->find(State::class, $this->states[0]->getId()); + $state = $this->em->find(State::class, $this->states[0]->getId()); //trigger lazy load from cache self::assertCount(1, $state->getCities()); @@ -271,15 +271,15 @@ public function testOneToManyRemove() $state->getCities()->remove(0); - $this->_em->remove($city1); - $this->_em->persist($state); - $this->_em->flush(); - $this->_em->clear(); + $this->em->remove($city1); + $this->em->persist($state); + $this->em->flush(); + $this->em->clear(); $this->secondLevelCacheLogger->clearStats(); $queryCount = $this->getCurrentQueryCount(); - $state = $this->_em->find(State::class, $this->states[0]->getId()); + $state = $this->em->find(State::class, $this->states[0]->getId()); self::assertCount(0, $state->getCities()); @@ -298,19 +298,19 @@ public function testOneToManyWithEmptyRelation() $this->cache->evictEntityRegion(City::class); $this->cache->evictEntityRegion(State::class); $this->cache->evictCollectionRegion(State::class, 'cities'); - $this->_em->clear(); + $this->em->clear(); $entitiId = $this->states[2]->getId(); // bavaria (cities count = 0) $queryCount = $this->getCurrentQueryCount(); - $entity = $this->_em->find(State::class, $entitiId); + $entity = $this->em->find(State::class, $entitiId); self::assertEquals(0, $entity->getCities()->count()); self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); - $entity = $this->_em->find(State::class, $entitiId); + $entity = $this->em->find(State::class, $entitiId); self::assertEquals(0, $entity->getCities()->count()); self::assertEquals($queryCount, $this->getCurrentQueryCount()); @@ -327,19 +327,19 @@ public function testOneToManyCount() $this->cache->evictEntityRegion(City::class); $this->cache->evictEntityRegion(State::class); $this->cache->evictCollectionRegion(State::class, 'cities'); - $this->_em->clear(); + $this->em->clear(); $entityId = $this->states[0]->getId(); $queryCount = $this->getCurrentQueryCount(); - $entity = $this->_em->find(State::class, $entityId); + $entity = $this->em->find(State::class, $entityId); self::assertEquals(2, $entity->getCities()->count()); self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); - $entity = $this->_em->find(State::class, $entityId); + $entity = $this->em->find(State::class, $entityId); self::assertEquals(2, $entity->getCities()->count()); self::assertEquals($queryCount, $this->getCurrentQueryCount()); @@ -347,7 +347,7 @@ public function testOneToManyCount() public function testCacheInitializeCollectionWithNewObjects() { - $this->_em->clear(); + $this->em->clear(); $this->evictRegions(); @@ -357,15 +357,15 @@ public function testCacheInitializeCollectionWithNewObjects() $traveler->getTravels()->add(new Travel($traveler)); } - $this->_em->persist($traveler); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($traveler); + $this->em->flush(); + $this->em->clear(); self::assertCount(3, $traveler->getTravels()); $travelerId = $traveler->getId(); $queryCount = $this->getCurrentQueryCount(); - $entity = $this->_em->find(Traveler::class, $travelerId); + $entity = $this->em->find(Traveler::class, $travelerId); self::assertEquals($queryCount, $this->getCurrentQueryCount()); self::assertFalse($entity->getTravels()->isInitialized()); @@ -378,11 +378,11 @@ public function testCacheInitializeCollectionWithNewObjects() self::assertTrue($entity->getTravels()->isInitialized()); self::assertEquals($queryCount, $this->getCurrentQueryCount()); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); $query = "SELECT t, tt FROM Doctrine\Tests\Models\Cache\Traveler t JOIN t.travels tt WHERE t.id = $travelerId"; - $result = $this->_em->createQuery($query)->getSingleResult(); + $result = $this->em->createQuery($query)->getSingleResult(); self::assertEquals(4, $result->getTravels()->count()); } @@ -398,15 +398,15 @@ public function testPutAndLoadNonCacheableOneToMany() $token->addLogin($l1); $token->addLogin($l2); - $this->_em->persist($token); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($token); + $this->em->flush(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(Token::class, $token->token)); $queryCount = $this->getCurrentQueryCount(); - $entity = $this->_em->find(Token::class, $token->token); + $entity = $this->em->find(Token::class, $token->token); self::assertInstanceOf(Token::class, $entity); self::assertEquals('token-hash', $entity->token); diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheOneToOneTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheOneToOneTest.php index afb5fd4ca2b..a40ee5802fc 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheOneToOneTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheOneToOneTest.php @@ -23,7 +23,7 @@ public function testPutOneToOneOnUnidirectionalPersist() $this->loadFixturesCities(); $this->loadFixturesTravelersWithProfile(); - $this->_em->clear(); + $this->em->clear(); $entity1 = $this->travelersWithProfile[0]; $entity2 = $this->travelersWithProfile[1]; @@ -42,7 +42,7 @@ public function testPutOneToOneOnBidirectionalPersist() $this->loadFixturesTravelersWithProfile(); $this->loadFixturesTravelersProfileInfo(); - $this->_em->clear(); + $this->em->clear(); $entity1 = $this->travelersWithProfile[0]; $entity2 = $this->travelersWithProfile[1]; @@ -63,7 +63,7 @@ public function testPutAndLoadOneToOneUnidirectionalRelation() $this->loadFixturesTravelersWithProfile(); $this->loadFixturesTravelersProfileInfo(); - $this->_em->clear(); + $this->em->clear(); $this->cache->evictEntityRegion(Traveler::class); $this->cache->evictEntityRegion(TravelerProfile::class); @@ -76,8 +76,8 @@ public function testPutAndLoadOneToOneUnidirectionalRelation() self::assertFalse($this->cache->containsEntity(TravelerProfile::class, $entity1->getProfile()->getId())); self::assertFalse($this->cache->containsEntity(TravelerProfile::class, $entity2->getProfile()->getId())); - $t1 = $this->_em->find(Traveler::class, $entity1->getId()); - $t2 = $this->_em->find(Traveler::class, $entity2->getId()); + $t1 = $this->em->find(Traveler::class, $entity1->getId()); + $t2 = $this->em->find(Traveler::class, $entity2->getId()); self::assertTrue($this->cache->containsEntity(Traveler::class, $entity1->getId())); self::assertTrue($this->cache->containsEntity(Traveler::class, $entity2->getId())); @@ -106,12 +106,12 @@ public function testPutAndLoadOneToOneUnidirectionalRelation() self::assertTrue($this->cache->containsEntity(TravelerProfile::class, $entity1->getProfile()->getId())); self::assertTrue($this->cache->containsEntity(TravelerProfile::class, $entity1->getProfile()->getId())); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); // load from cache - $t3 = $this->_em->find(Traveler::class, $entity1->getId()); - $t4 = $this->_em->find(Traveler::class, $entity2->getId()); + $t3 = $this->em->find(Traveler::class, $entity1->getId()); + $t4 = $this->em->find(Traveler::class, $entity2->getId()); self::assertInstanceOf(Traveler::class, $t3); self::assertInstanceOf(Traveler::class, $t4); @@ -135,7 +135,7 @@ public function testPutAndLoadOneToOneBidirectionalRelation() $this->loadFixturesTravelersWithProfile(); $this->loadFixturesTravelersProfileInfo(); - $this->_em->clear(); + $this->em->clear(); $this->cache->evictEntityRegion(Traveler::class); $this->cache->evictEntityRegion(TravelerProfile::class); @@ -149,8 +149,8 @@ public function testPutAndLoadOneToOneBidirectionalRelation() self::assertFalse($this->cache->containsEntity(TravelerProfileInfo::class, $entity1->getInfo()->getId())); self::assertFalse($this->cache->containsEntity(TravelerProfileInfo::class, $entity2->getInfo()->getId())); - $p1 = $this->_em->find(TravelerProfile::class, $entity1->getId()); - $p2 = $this->_em->find(TravelerProfile::class, $entity2->getId()); + $p1 = $this->em->find(TravelerProfile::class, $entity1->getId()); + $p2 = $this->em->find(TravelerProfile::class, $entity2->getId()); self::assertEquals($entity1->getId(), $p1->getId()); self::assertEquals($entity1->getName(), $p1->getName()); @@ -167,12 +167,12 @@ public function testPutAndLoadOneToOneBidirectionalRelation() self::assertTrue($this->cache->containsEntity(TravelerProfileInfo::class, $entity1->getInfo()->getId())); self::assertTrue($this->cache->containsEntity(TravelerProfileInfo::class, $entity2->getInfo()->getId())); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); - $p3 = $this->_em->find(TravelerProfile::class, $entity1->getId()); - $p4 = $this->_em->find(TravelerProfile::class, $entity2->getId()); + $p3 = $this->em->find(TravelerProfile::class, $entity1->getId()); + $p4 = $this->em->find(TravelerProfile::class, $entity2->getId()); self::assertInstanceOf(TravelerProfile::class, $p3); self::assertInstanceOf(TravelerProfile::class, $p4); @@ -196,7 +196,7 @@ public function testInverseSidePutAndLoadOneToOneBidirectionalRelation() { $this->loadFixturesPersonWithAddress(); - $this->_em->clear(); + $this->em->clear(); $this->cache->evictEntityRegion(Person::class); $this->cache->evictEntityRegion(Address::class); @@ -209,8 +209,8 @@ public function testInverseSidePutAndLoadOneToOneBidirectionalRelation() self::assertFalse($this->cache->containsEntity(Address::class, $entity1->address->id)); self::assertFalse($this->cache->containsEntity(Address::class, $entity2->address->id)); - $p1 = $this->_em->find(Person::class, $entity1->id); - $p2 = $this->_em->find(Person::class, $entity2->id); + $p1 = $this->em->find(Person::class, $entity1->id); + $p2 = $this->em->find(Person::class, $entity2->id); self::assertEquals($entity1->id, $p1->id); self::assertEquals($entity1->name, $p1->name); @@ -228,12 +228,12 @@ public function testInverseSidePutAndLoadOneToOneBidirectionalRelation() self::assertFalse($this->cache->containsEntity(Address::class, $entity1->address->id)); self::assertFalse($this->cache->containsEntity(Address::class, $entity2->address->id)); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); - $p3 = $this->_em->find(Person::class, $entity1->id); - $p4 = $this->_em->find(Person::class, $entity2->id); + $p3 = $this->em->find(Person::class, $entity1->id); + $p4 = $this->em->find(Person::class, $entity2->id); self::assertInstanceOf(Person::class, $p3); self::assertInstanceOf(Person::class, $p4); @@ -261,17 +261,17 @@ public function testPutAndLoadNonCacheableOneToOne() $client = new Client('FabioBatSilva'); $token = new Token('token-hash', $client); - $this->_em->persist($client); - $this->_em->persist($token); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($client); + $this->em->persist($token); + $this->em->flush(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); self::assertTrue($this->cache->containsEntity(Token::class, $token->token)); self::assertFalse($this->cache->containsEntity(Client::class, $client->id)); - $entity = $this->_em->find(Token::class, $token->token); + $entity = $this->em->find(Token::class, $token->token); self::assertInstanceOf(Token::class, $entity); self::assertInstanceOf(Client::class, $entity->getClient()); diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheQueryCacheTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheQueryCacheTest.php index c14e67ec438..e45070cb9c0 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheQueryCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheQueryCacheTest.php @@ -26,14 +26,14 @@ public function testBasicQueryCache() $this->loadFixturesCountries(); $this->secondLevelCacheLogger->clearStats(); - $this->_em->clear(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT c FROM Doctrine\Tests\Models\Cache\Country c'; - $result1 = $this->_em->createQuery($dql)->setCacheable(true)->getResult(); + $result1 = $this->em->createQuery($dql)->setCacheable(true)->getResult(); self::assertCount(2, $result1); self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); @@ -47,9 +47,9 @@ public function testBasicQueryCache() self::assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); - $this->_em->clear(); + $this->em->clear(); - $result2 = $this->_em->createQuery($dql) + $result2 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -89,14 +89,14 @@ public function testQueryCacheModeGet() $this->evictRegions(); $this->secondLevelCacheLogger->clearStats(); - $this->_em->clear(); + $this->em->clear(); self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT c FROM Doctrine\Tests\Models\Cache\Country c'; - $queryGet = $this->_em->createQuery($dql) + $queryGet = $this->em->createQuery($dql) ->setCacheMode(Cache::MODE_GET) ->setCacheable(true); @@ -107,7 +107,7 @@ public function testQueryCacheModeGet() self::assertCount(2, $queryGet->getResult()); self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); - $result = $this->_em->createQuery($dql) + $result = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -129,14 +129,14 @@ public function testQueryCacheModePut() $this->evictRegions(); $this->secondLevelCacheLogger->clearStats(); - $this->_em->clear(); + $this->em->clear(); self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT c FROM Doctrine\Tests\Models\Cache\Country c'; - $result = $this->_em->createQuery($dql) + $result = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -146,7 +146,7 @@ public function testQueryCacheModePut() self::assertCount(2, $result); self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $queryPut = $this->_em->createQuery($dql) + $queryPut = $this->em->createQuery($dql) ->setCacheMode(Cache::MODE_PUT) ->setCacheable(true); @@ -169,7 +169,7 @@ public function testQueryCacheModeRefresh() $this->evictRegions(); $this->secondLevelCacheLogger->clearStats(); - $this->_em->clear(); + $this->em->clear(); self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); @@ -177,7 +177,7 @@ public function testQueryCacheModeRefresh() $region = $this->cache->getEntityCacheRegion(Country::class); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT c FROM Doctrine\Tests\Models\Cache\Country c'; - $result = $this->_em->createQuery($dql) + $result = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -199,9 +199,9 @@ public function testQueryCacheModeRefresh() $region->put($key1, $entry1); $region->put($key2, $entry2); - $this->_em->clear(); + $this->em->clear(); - $queryRefresh = $this->_em->createQuery($dql) + $queryRefresh = $this->em->createQuery($dql) ->setCacheMode(Cache::MODE_REFRESH) ->setCacheable(true); @@ -212,7 +212,7 @@ public function testQueryCacheModeRefresh() self::assertEquals($countryName2, $result1[1]->getName()); self::assertEquals($queryCount + 2, $this->getCurrentQueryCount()); - $this->_em->clear(); + $this->em->clear(); $result2 = $queryRefresh->getResult(); self::assertCount(2, $result2); @@ -228,11 +228,11 @@ public function testBasicQueryCachePutEntityCache() $this->evictRegions(); $this->secondLevelCacheLogger->clearStats(); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT c FROM Doctrine\Tests\Models\Cache\Country c'; - $result1 = $this->_em->createQuery($dql)->setCacheable(true)->getResult(); + $result1 = $this->em->createQuery($dql)->setCacheable(true)->getResult(); self::assertCount(2, $result1); self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); @@ -250,9 +250,9 @@ public function testBasicQueryCachePutEntityCache() self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); self::assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(Country::class))); - $this->_em->clear(); + $this->em->clear(); - $result2 = $this->_em->createQuery($dql) + $result2 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -302,11 +302,11 @@ public function testMultipleNestedDQLAliases() $this->secondLevelCacheLogger->clearStats(); $this->evictRegions(); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT s, c, a FROM Doctrine\Tests\Models\Cache\State s JOIN s.cities c JOIN c.attractions a'; - $result1 = $this->_em->createQuery($dql) + $result1 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -342,9 +342,9 @@ public function testMultipleNestedDQLAliases() $this->assertCount(2, $result1[1]->getCities()->get(0)->getAttractions()); $this->assertCount(1, $result1[1]->getCities()->get(1)->getAttractions()); - $this->_em->clear(); + $this->em->clear(); - $result2 = $this->_em->createQuery($dql) + $result2 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -373,7 +373,7 @@ public function testBasicQueryParams() $this->evictRegions(); $this->loadFixturesCountries(); - $this->_em->clear(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); @@ -381,7 +381,7 @@ public function testBasicQueryParams() $queryCount = $this->getCurrentQueryCount(); $name = $this->countries[0]->getName(); $dql = 'SELECT c FROM Doctrine\Tests\Models\Cache\Country c WHERE c.name = :name'; - $result1 = $this->_em->createQuery($dql) + $result1 = $this->em->createQuery($dql) ->setCacheable(true) ->setParameter('name', $name) ->getResult(); @@ -390,9 +390,9 @@ public function testBasicQueryParams() self::assertEquals($this->countries[0]->getId(), $result1[0]->getId()); self::assertEquals($this->countries[0]->getName(), $result1[0]->getName()); - $this->_em->clear(); + $this->em->clear(); - $result2 = $this->_em->createQuery($dql)->setCacheable(true) + $result2 = $this->em->createQuery($dql)->setCacheable(true) ->setParameter('name', $name) ->getResult(); @@ -410,14 +410,14 @@ public function testLoadFromDatabaseWhenEntityMissing() $this->evictRegions(); $this->loadFixturesCountries(); - $this->_em->clear(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT c FROM Doctrine\Tests\Models\Cache\Country c'; - $result1 = $this->_em->createQuery($dql)->setCacheable(true)->getResult(); + $result1 = $this->em->createQuery($dql)->setCacheable(true)->getResult(); self::assertCount(2, $result1); self::assertEquals($queryCount + 1 , $this->getCurrentQueryCount()); @@ -434,9 +434,9 @@ public function testLoadFromDatabaseWhenEntityMissing() $this->cache->evictEntity(Country::class, $result1[0]->getId()); self::assertFalse($this->cache->containsEntity(Country::class, $result1[0]->getId())); - $this->_em->clear(); + $this->em->clear(); - $result2 = $this->_em->createQuery($dql) + $result2 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -467,11 +467,11 @@ public function testBasicQueryFetchJoinsOneToMany() $this->loadFixturesCities(); $this->evictRegions(); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT s, c FROM Doctrine\Tests\Models\Cache\State s JOIN s.cities c'; - $result1 = $this->_em->createQuery($dql) + $result1 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -496,9 +496,9 @@ public function testBasicQueryFetchJoinsOneToMany() self::assertNotNull($result1[1]->getCities()->get(0)->getName()); self::assertNotNull($result1[1]->getCities()->get(1)->getName()); - $this->_em->clear(); + $this->em->clear(); - $result2 = $this->_em->createQuery($dql) + $result2 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -530,14 +530,14 @@ public function testBasicQueryFetchJoinsManyToOne() $this->loadFixturesCountries(); $this->loadFixturesStates(); $this->loadFixturesCities(); - $this->_em->clear(); + $this->em->clear(); $this->evictRegions(); $this->secondLevelCacheLogger->clearStats(); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT c, s FROM Doctrine\Tests\Models\Cache\City c JOIN c.state s'; - $result1 = $this->_em->createQuery($dql) + $result1 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -561,10 +561,10 @@ public function testBasicQueryFetchJoinsManyToOne() self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->_em->clear(); + $this->em->clear(); $this->secondLevelCacheLogger->clearStats(); - $result2 = $this->_em->createQuery($dql) + $result2 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -597,14 +597,14 @@ public function testReloadQueryIfToOneIsNotFound() $this->loadFixturesCountries(); $this->loadFixturesStates(); $this->loadFixturesCities(); - $this->_em->clear(); + $this->em->clear(); $this->evictRegions(); $this->secondLevelCacheLogger->clearStats(); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT c, s FROM Doctrine\Tests\Models\Cache\City c JOIN c.state s'; - $result1 = $this->_em->createQuery($dql) + $result1 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -620,11 +620,11 @@ public function testReloadQueryIfToOneIsNotFound() self::assertTrue($this->cache->containsEntity(State::class, $result1[1]->getState()->getId())); self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->_em->clear(); + $this->em->clear(); $this->cache->evictEntityRegion(State::class); - $result2 = $this->_em->createQuery($dql) + $result2 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -644,11 +644,11 @@ public function testReloadQueryIfToManyAssociationItemIsNotFound() $this->loadFixturesCities(); $this->evictRegions(); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT s, c FROM Doctrine\Tests\Models\Cache\State s JOIN s.cities c'; - $result1 = $this->_em->createQuery($dql) + $result1 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -663,11 +663,11 @@ public function testReloadQueryIfToManyAssociationItemIsNotFound() self::assertInstanceOf(City::class, $result1[1]->getCities()->get(0)); self::assertInstanceOf(City::class, $result1[1]->getCities()->get(1)); - $this->_em->clear(); + $this->em->clear(); $this->cache->evictEntityRegion(City::class); - $result2 = $this->_em->createQuery($dql) + $result2 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -690,7 +690,7 @@ public function testBasicNativeQueryCache() $this->loadFixturesCountries(); $this->secondLevelCacheLogger->clearStats(); - $this->_em->clear(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); @@ -702,7 +702,7 @@ public function testBasicNativeQueryCache() $queryCount = $this->getCurrentQueryCount(); $sql = 'SELECT id, name FROM cache_country'; - $result1 = $this->_em->createNativeQuery($sql, $rsm)->setCacheable(true)->getResult(); + $result1 = $this->em->createNativeQuery($sql, $rsm)->setCacheable(true)->getResult(); self::assertCount(2, $result1); self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); @@ -716,9 +716,9 @@ public function testBasicNativeQueryCache() self::assertEquals(1, $this->secondLevelCacheLogger->getRegionPutCount($this->getDefaultQueryRegionName())); self::assertEquals(1, $this->secondLevelCacheLogger->getRegionMissCount($this->getDefaultQueryRegionName())); - $this->_em->clear(); + $this->em->clear(); - $result2 = $this->_em->createNativeQuery($sql, $rsm) + $result2 = $this->em->createNativeQuery($sql, $rsm) ->setCacheable(true) ->getResult(); @@ -757,11 +757,11 @@ public function testQueryDependsOnFirstAndMaxResultResult() $this->loadFixturesCountries(); $this->secondLevelCacheLogger->clearStats(); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT c FROM Doctrine\Tests\Models\Cache\Country c'; - $result1 = $this->_em->createQuery($dql) + $result1 = $this->em->createQuery($dql) ->setCacheable(true) ->setFirstResult(1) ->setMaxResults(1) @@ -771,9 +771,9 @@ public function testQueryDependsOnFirstAndMaxResultResult() self::assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); - $this->_em->clear(); + $this->em->clear(); - $result2 = $this->_em->createQuery($dql) + $result2 = $this->em->createQuery($dql) ->setCacheable(true) ->setFirstResult(2) ->setMaxResults(1) @@ -783,9 +783,9 @@ public function testQueryDependsOnFirstAndMaxResultResult() self::assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); self::assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); - $this->_em->clear(); + $this->em->clear(); - $result3 = $this->_em->createQuery($dql) + $result3 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -800,7 +800,7 @@ public function testQueryCacheLifetime() $this->loadFixturesCountries(); $this->secondLevelCacheLogger->clearStats(); - $this->_em->clear(); + $this->em->clear(); $getHash = function(AbstractQuery $query){ $method = new \ReflectionMethod($query, 'getHash'); @@ -811,7 +811,7 @@ public function testQueryCacheLifetime() $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT c FROM Doctrine\Tests\Models\Cache\Country c'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result1 = $query->setCacheable(true) ->setLifetime(3600) ->getResult(); @@ -821,7 +821,7 @@ public function testQueryCacheLifetime() self::assertEquals(1, $this->secondLevelCacheLogger->getPutCount()); self::assertEquals(1, $this->secondLevelCacheLogger->getMissCount()); - $this->_em->clear(); + $this->em->clear(); $key = new QueryCacheKey($getHash($query), 3600); $entry = $this->cache->getQueryCache() @@ -835,7 +835,7 @@ public function testQueryCacheLifetime() ->getRegion() ->put($key, $entry); - $result2 = $this->_em->createQuery($dql) + $result2 = $this->em->createQuery($dql) ->setCacheable(true) ->setLifetime(3600) ->getResult(); @@ -852,11 +852,11 @@ public function testQueryCacheRegion() $this->loadFixturesCountries(); $this->secondLevelCacheLogger->clearStats(); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT c FROM Doctrine\Tests\Models\Cache\Country c'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $query1 = clone $query; $result1 = $query1->setCacheable(true) @@ -919,12 +919,12 @@ public function testResolveAssociationCacheEntry() $this->loadFixturesCountries(); $this->loadFixturesStates(); - $this->_em->clear(); + $this->em->clear(); $stateId = $this->states[0]->getId(); $countryName = $this->states[0]->getCountry()->getName(); $dql = 'SELECT s FROM Doctrine\Tests\Models\Cache\State s WHERE s.id = :id'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $queryCount = $this->getCurrentQueryCount(); $query1 = clone $query; @@ -942,7 +942,7 @@ public function testResolveAssociationCacheEntry() self::assertEquals($countryName, $state1->getCountry()->getName()); self::assertEquals($stateId, $state1->getId()); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); $query2 = clone $query; @@ -969,11 +969,11 @@ public function testResolveToOneAssociationCacheEntry() $this->loadFixturesCities(); $this->evictRegions(); - $this->_em->clear(); + $this->em->clear(); $cityId = $this->cities[0]->getId(); $dql = 'SELECT c, s FROM Doctrine\Tests\Models\Cache\City c JOIN c.state s WHERE c.id = :id'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $queryCount = $this->getCurrentQueryCount(); $query1 = clone $query; @@ -989,7 +989,7 @@ public function testResolveToOneAssociationCacheEntry() self::assertInstanceOf(City::class, $city1->getState()->getCities()->get(0)); self::assertInstanceOf(State::class, $city1->getState()->getCities()->get(0)->getState()); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); $query2 = clone $query; @@ -1014,11 +1014,11 @@ public function testResolveToManyAssociationCacheEntry() $this->loadFixturesCities(); $this->evictRegions(); - $this->_em->clear(); + $this->em->clear(); $stateId = $this->states[0]->getId(); $dql = 'SELECT s, c FROM Doctrine\Tests\Models\Cache\State s JOIN s.cities c WHERE s.id = :id'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $queryCount = $this->getCurrentQueryCount(); $query1 = clone $query; @@ -1035,7 +1035,7 @@ public function testResolveToManyAssociationCacheEntry() self::assertInstanceOf(State::class, $state1->getCities()->get(0)->getState()); self::assertSame($state1, $state1->getCities()->get(0)->getState()); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); $query2 = clone $query; @@ -1061,7 +1061,7 @@ public function testHintClearEntityRegionUpdateStatement() self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); - $this->_em->createQuery('DELETE Doctrine\Tests\Models\Cache\Country u WHERE u.id = 4') + $this->em->createQuery('DELETE Doctrine\Tests\Models\Cache\Country u WHERE u.id = 4') ->setHint(Query::HINT_CACHE_EVICT, true) ->execute(); @@ -1077,7 +1077,7 @@ public function testHintClearEntityRegionDeleteStatement() self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); - $this->_em->createQuery("UPDATE Doctrine\Tests\Models\Cache\Country u SET u.name = 'foo' WHERE u.id = 1") + $this->em->createQuery("UPDATE Doctrine\Tests\Models\Cache\Country u SET u.name = 'foo' WHERE u.id = 1") ->setHint(Query::HINT_CACHE_EVICT, true) ->execute(); @@ -1094,7 +1094,7 @@ public function testCacheablePartialQueryException() $this->evictRegions(); $this->loadFixturesCountries(); - $this->_em->createQuery("SELECT PARTIAL c.{id} FROM Doctrine\Tests\Models\Cache\Country c") + $this->em->createQuery("SELECT PARTIAL c.{id} FROM Doctrine\Tests\Models\Cache\Country c") ->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true) ->setCacheable(true) ->getResult(); @@ -1106,7 +1106,7 @@ public function testCacheablePartialQueryException() */ public function testNonCacheableQueryDeleteStatementException() { - $this->_em->createQuery("DELETE Doctrine\Tests\Models\Cache\Country u WHERE u.id = 4") + $this->em->createQuery("DELETE Doctrine\Tests\Models\Cache\Country u WHERE u.id = 4") ->setCacheable(true) ->getResult(); } @@ -1117,7 +1117,7 @@ public function testNonCacheableQueryDeleteStatementException() */ public function testNonCacheableQueryUpdateStatementException() { - $this->_em->createQuery("UPDATE Doctrine\Tests\Models\Cache\Country u SET u.name = 'foo' WHERE u.id = 4") + $this->em->createQuery("UPDATE Doctrine\Tests\Models\Cache\Country u SET u.name = 'foo' WHERE u.id = 4") ->setCacheable(true) ->getResult(); } @@ -1125,25 +1125,25 @@ public function testNonCacheableQueryUpdateStatementException() public function testQueryCacheShouldBeEvictedOnTimestampUpdate() { $this->loadFixturesCountries(); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT country FROM Doctrine\Tests\Models\Cache\Country country'; - $result1 = $this->_em->createQuery($dql) + $result1 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); $this->assertCount(2, $result1); $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->_em->persist(new Country('France')); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist(new Country('France')); + $this->em->flush(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); - $result2 = $this->_em->createQuery($dql) + $result2 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheRepositoryTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheRepositoryTest.php index 6ef61ba95d2..5b9c86c9aa4 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheRepositoryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheRepositoryTest.php @@ -17,13 +17,13 @@ public function testRepositoryCacheFind() $this->loadFixturesCountries(); $this->secondLevelCacheLogger->clearStats(); - $this->_em->clear(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); $queryCount = $this->getCurrentQueryCount(); - $repository = $this->_em->getRepository(Country::class); + $repository = $this->em->getRepository(Country::class); $country1 = $repository->find($this->countries[0]->getId()); $country2 = $repository->find($this->countries[1]->getId()); @@ -43,12 +43,12 @@ public function testRepositoryCacheFindAll() $this->loadFixturesCountries(); $this->evictRegions(); $this->secondLevelCacheLogger->clearStats(); - $this->_em->clear(); + $this->em->clear(); self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); - $repository = $this->_em->getRepository(Country::class); + $repository = $this->em->getRepository(Country::class); $queryCount = $this->getCurrentQueryCount(); self::assertCount(2, $repository->findAll()); @@ -74,12 +74,12 @@ public function testRepositoryCacheFindAllInvalidation() $this->loadFixturesCountries(); $this->evictRegions(); $this->secondLevelCacheLogger->clearStats(); - $this->_em->clear(); + $this->em->clear(); self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); - $repository = $this->_em->getRepository(Country::class); + $repository = $this->em->getRepository(Country::class); $queryCount = $this->getCurrentQueryCount(); self::assertCount(2, $repository->findAll()); @@ -95,9 +95,9 @@ public function testRepositoryCacheFindAllInvalidation() self::assertInstanceOf(Country::class, $countries[1]); $country = new Country('foo'); - $this->_em->persist($country); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($country); + $this->em->flush(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); @@ -106,9 +106,9 @@ public function testRepositoryCacheFindAllInvalidation() $country = $repository->find($country->getId()); - $this->_em->remove($country); - $this->_em->flush(); - $this->_em->clear(); + $this->em->remove($country); + $this->em->flush(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); @@ -121,12 +121,12 @@ public function testRepositoryCacheFindBy() $this->loadFixturesCountries(); $this->evictRegions(); $this->secondLevelCacheLogger->clearStats(); - $this->_em->clear(); + $this->em->clear(); self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); $criteria = ['name'=>$this->countries[0]->getName()]; - $repository = $this->_em->getRepository(Country::class); + $repository = $this->em->getRepository(Country::class); $queryCount = $this->getCurrentQueryCount(); self::assertCount(1, $repository->findBy($criteria)); @@ -151,12 +151,12 @@ public function testRepositoryCacheFindOneBy() $this->loadFixturesCountries(); $this->evictRegions(); $this->secondLevelCacheLogger->clearStats(); - $this->_em->clear(); + $this->em->clear(); self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); $criteria = ['name'=>$this->countries[0]->getName()]; - $repository = $this->_em->getRepository(Country::class); + $repository = $this->em->getRepository(Country::class); $queryCount = $this->getCurrentQueryCount(); self::assertNotNull($repository->findOneBy($criteria)); @@ -183,10 +183,10 @@ public function testRepositoryCacheFindAllToOneAssociation() $this->evictRegions(); $this->secondLevelCacheLogger->clearStats(); - $this->_em->clear(); + $this->em->clear(); // load from database - $repository = $this->_em->getRepository(State::class); + $repository = $this->em->getRepository(State::class); $queryCount = $this->getCurrentQueryCount(); $entities = $repository->findAll(); @@ -215,9 +215,9 @@ public function testRepositoryCacheFindAllToOneAssociation() self::assertInstanceOf(Proxy::class, $entities[1]->getCountry()); // invalidate cache - $this->_em->persist(new State('foo', $this->_em->find(Country::class, $this->countries[0]->getId()))); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist(new State('foo', $this->em->find(Country::class, $this->countries[0]->getId()))); + $this->em->flush(); + $this->em->clear(); // load from database $queryCount = $this->getCurrentQueryCount(); diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheSingleTableInheritanceTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheSingleTableInheritanceTest.php index c2449a9dc08..0176a916d6a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheSingleTableInheritanceTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheSingleTableInheritanceTest.php @@ -33,7 +33,7 @@ public function testPutOnPersistSingleTableInheritance() $this->loadFixturesCities(); $this->loadFixturesAttractions(); - $this->_em->clear(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(Bar::class, $this->attractions[0]->getId())); self::assertTrue($this->cache->containsEntity(Bar::class, $this->attractions[1]->getId())); @@ -46,7 +46,7 @@ public function testCountaisRootClass() $this->loadFixturesCities(); $this->loadFixturesAttractions(); - $this->_em->clear(); + $this->em->clear(); foreach ($this->attractions as $attraction) { self::assertTrue($this->cache->containsEntity(Attraction::class, $attraction->getId())); @@ -61,7 +61,7 @@ public function testPutAndLoadEntities() $this->loadFixturesCities(); $this->loadFixturesAttractions(); - $this->_em->clear(); + $this->em->clear(); $this->cache->evictEntityRegion(Attraction::class); @@ -73,8 +73,8 @@ public function testPutAndLoadEntities() self::assertFalse($this->cache->containsEntity(Bar::class, $entityId1)); self::assertFalse($this->cache->containsEntity(Bar::class, $entityId2)); - $entity1 = $this->_em->find(Attraction::class, $entityId1); - $entity2 = $this->_em->find(Attraction::class, $entityId2); + $entity1 = $this->em->find(Attraction::class, $entityId1); + $entity2 = $this->em->find(Attraction::class, $entityId2); self::assertTrue($this->cache->containsEntity(Attraction::class, $entityId1)); self::assertTrue($this->cache->containsEntity(Attraction::class, $entityId2)); @@ -92,12 +92,12 @@ public function testPutAndLoadEntities() self::assertEquals($this->attractions[1]->getId(), $entity2->getId()); self::assertEquals($this->attractions[1]->getName(), $entity2->getName()); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); - $entity3 = $this->_em->find(Attraction::class, $entityId1); - $entity4 = $this->_em->find(Attraction::class, $entityId2); + $entity3 = $this->em->find(Attraction::class, $entityId1); + $entity4 = $this->em->find(Attraction::class, $entityId2); self::assertEquals($queryCount, $this->getCurrentQueryCount()); @@ -122,20 +122,20 @@ public function testQueryCacheFindAll() $this->loadFixturesCities(); $this->loadFixturesAttractions(); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT a FROM Doctrine\Tests\Models\Cache\Attraction a'; - $result1 = $this->_em->createQuery($dql) + $result1 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); self::assertCount(count($this->attractions), $result1); self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->_em->clear(); + $this->em->clear(); - $result2 = $this->_em->createQuery($dql) + $result2 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -154,7 +154,7 @@ public function testShouldNotPutOneToManyRelationOnPersist() $this->loadFixturesCities(); $this->loadFixturesAttractions(); - $this->_em->clear(); + $this->em->clear(); foreach ($this->cities as $city) { self::assertTrue($this->cache->containsEntity(City::class, $city->getId())); @@ -177,9 +177,9 @@ public function testOneToManyRelationSingleTable() $this->cache->evictEntityRegion(Attraction::class); $this->cache->evictCollectionRegion(City::class, 'attractions'); - $this->_em->clear(); + $this->em->clear(); - $entity = $this->_em->find(City::class, $this->cities[0]->getId()); + $entity = $this->em->find(City::class, $this->cities[0]->getId()); self::assertInstanceOf(City::class, $entity); self::assertInstanceOf(PersistentCollection::class, $entity->getAttractions()); @@ -196,9 +196,9 @@ public function testOneToManyRelationSingleTable() self::assertEquals($this->attractions[0]->getName(), $entity->getAttractions()->get(0)->getName()); self::assertEquals($this->attractions[1]->getName(), $entity->getAttractions()->get(1)->getName()); - $this->_em->clear(); + $this->em->clear(); - $entity = $this->_em->find(City::class, $ownerId); + $entity = $this->em->find(City::class, $ownerId); self::assertInstanceOf(City::class, $entity); self::assertInstanceOf(PersistentCollection::class, $entity->getAttractions()); @@ -218,12 +218,12 @@ public function testQueryCacheShouldBeEvictedOnTimestampUpdate() $this->loadFixturesStates(); $this->loadFixturesCities(); $this->loadFixturesAttractions(); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); $dql = 'SELECT attraction FROM Doctrine\Tests\Models\Cache\Attraction attraction'; - $result1 = $this->_em->createQuery($dql) + $result1 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); @@ -232,16 +232,16 @@ public function testQueryCacheShouldBeEvictedOnTimestampUpdate() $contact = new Beach( 'Botafogo', - $this->_em->find(City::class, $this->cities[1]->getId()) + $this->em->find(City::class, $this->cities[1]->getId()) ); - $this->_em->persist($contact); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($contact); + $this->em->flush(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); - $result2 = $this->_em->createQuery($dql) + $result2 = $this->em->createQuery($dql) ->setCacheable(true) ->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheTest.php index 26d9098e50e..8e4c503a1a3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheTest.php @@ -14,7 +14,7 @@ class SecondLevelCacheTest extends SecondLevelCacheAbstractTest public function testPutOnPersist() { $this->loadFixturesCountries(); - $this->_em->clear(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); @@ -25,7 +25,7 @@ public function testPutOnPersist() public function testPutAndLoadEntities() { $this->loadFixturesCountries(); - $this->_em->clear(); + $this->em->clear(); self::assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); self::assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(Country::class))); @@ -35,8 +35,8 @@ public function testPutAndLoadEntities() self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); - $c1 = $this->_em->find(Country::class, $this->countries[0]->getId()); - $c2 = $this->_em->find(Country::class, $this->countries[1]->getId()); + $c1 = $this->em->find(Country::class, $this->countries[0]->getId()); + $c2 = $this->em->find(Country::class, $this->countries[1]->getId()); self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); self::assertTrue($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); @@ -50,12 +50,12 @@ public function testPutAndLoadEntities() self::assertEquals($this->countries[1]->getId(), $c2->getId()); self::assertEquals($this->countries[1]->getName(), $c2->getName()); - $this->_em->clear(); + $this->em->clear(); $queryCount = $this->getCurrentQueryCount(); - $c3 = $this->_em->find(Country::class, $this->countries[0]->getId()); - $c4 = $this->_em->find(Country::class, $this->countries[1]->getId()); + $c3 = $this->em->find(Country::class, $this->countries[0]->getId()); + $c4 = $this->em->find(Country::class, $this->countries[1]->getId()); self::assertEquals($queryCount, $this->getCurrentQueryCount()); self::assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); @@ -74,7 +74,7 @@ public function testPutAndLoadEntities() public function testRemoveEntities() { $this->loadFixturesCountries(); - $this->_em->clear(); + $this->em->clear(); self::assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); @@ -84,8 +84,8 @@ public function testRemoveEntities() self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); - $c1 = $this->_em->find(Country::class, $this->countries[0]->getId()); - $c2 = $this->_em->find(Country::class, $this->countries[1]->getId()); + $c1 = $this->em->find(Country::class, $this->countries[0]->getId()); + $c2 = $this->em->find(Country::class, $this->countries[1]->getId()); self::assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); self::assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); @@ -102,16 +102,16 @@ public function testRemoveEntities() self::assertEquals($this->countries[1]->getId(), $c2->getId()); self::assertEquals($this->countries[1]->getName(), $c2->getName()); - $this->_em->remove($c1); - $this->_em->remove($c2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->remove($c1); + $this->em->remove($c2); + $this->em->flush(); + $this->em->clear(); self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[0]->getId())); self::assertFalse($this->cache->containsEntity(Country::class, $this->countries[1]->getId())); - self::assertNull($this->_em->find(Country::class, $this->countries[0]->getId())); - self::assertNull($this->_em->find(Country::class, $this->countries[1]->getId())); + self::assertNull($this->em->find(Country::class, $this->countries[0]->getId())); + self::assertNull($this->em->find(Country::class, $this->countries[1]->getId())); self::assertEquals(2, $this->secondLevelCacheLogger->getPutCount()); self::assertEquals(2, $this->secondLevelCacheLogger->getMissCount()); @@ -121,7 +121,7 @@ public function testUpdateEntities() { $this->loadFixturesCountries(); $this->loadFixturesStates(); - $this->_em->clear(); + $this->em->clear(); self::assertEquals(6, $this->secondLevelCacheLogger->getPutCount()); self::assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(Country::class))); @@ -133,8 +133,8 @@ public function testUpdateEntities() self::assertFalse($this->cache->containsEntity(State::class, $this->states[0]->getId())); self::assertFalse($this->cache->containsEntity(State::class, $this->states[1]->getId())); - $s1 = $this->_em->find(State::class, $this->states[0]->getId()); - $s2 = $this->_em->find(State::class, $this->states[1]->getId()); + $s1 = $this->em->find(State::class, $this->states[0]->getId()); + $s2 = $this->em->find(State::class, $this->states[1]->getId()); self::assertEquals(4, $this->secondLevelCacheLogger->getPutCount()); self::assertEquals(2, $this->secondLevelCacheLogger->getRegionPutCount($this->getEntityRegion(Country::class))); @@ -155,10 +155,10 @@ public function testUpdateEntities() $s1->setName("NEW NAME 1"); $s2->setName("NEW NAME 2"); - $this->_em->persist($s1); - $this->_em->persist($s2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($s1); + $this->em->persist($s2); + $this->em->flush(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); self::assertTrue($this->cache->containsEntity(State::class, $this->states[1]->getId())); @@ -169,8 +169,8 @@ public function testUpdateEntities() $queryCount = $this->getCurrentQueryCount(); - $c3 = $this->_em->find(State::class, $this->states[0]->getId()); - $c4 = $this->_em->find(State::class, $this->states[1]->getId()); + $c3 = $this->em->find(State::class, $this->states[0]->getId()); + $c4 = $this->em->find(State::class, $this->states[1]->getId()); self::assertEquals(2, $this->secondLevelCacheLogger->getHitCount()); self::assertEquals(2, $this->secondLevelCacheLogger->getRegionHitCount($this->getEntityRegion(State::class))); @@ -203,7 +203,7 @@ public function testPostFlushFailure() ] ); - $this->_em->getEventManager() + $this->em->getEventManager() ->addEventListener(Events::postFlush, $listener); $country = new Country("Brazil"); @@ -212,8 +212,8 @@ public function testPostFlushFailure() try { - $this->_em->persist($country); - $this->_em->flush(); + $this->em->persist($country); + $this->em->flush(); $this->fail('Should throw exception'); } catch (\RuntimeException $exc) { @@ -227,7 +227,7 @@ public function testPostUpdateFailure() { $this->loadFixturesCountries(); $this->loadFixturesStates(); - $this->_em->clear(); + $this->em->clear(); $listener = new ListenerSecondLevelCacheTest( [ @@ -237,14 +237,14 @@ public function testPostUpdateFailure() ] ); - $this->_em->getEventManager() + $this->em->getEventManager() ->addEventListener(Events::postUpdate, $listener); $this->cache->evictEntityRegion(State::class); $stateId = $this->states[0]->getId(); $stateName = $this->states[0]->getName(); - $state = $this->_em->find(State::class, $stateId); + $state = $this->em->find(State::class, $stateId); self::assertTrue($this->cache->containsEntity(State::class, $stateId)); self::assertInstanceOf(State::class, $state); @@ -252,21 +252,21 @@ public function testPostUpdateFailure() $state->setName($stateName . uniqid()); - $this->_em->persist($state); + $this->em->persist($state); try { - $this->_em->flush(); + $this->em->flush(); $this->fail('Should throw exception'); } catch (\Exception $exc) { self::assertEquals('post update failure', $exc->getMessage()); } - $this->_em->clear(); + $this->em->clear(); self::assertTrue($this->cache->containsEntity(State::class, $stateId)); - $state = $this->_em->find(State::class, $stateId); + $state = $this->em->find(State::class, $stateId); self::assertInstanceOf(State::class, $state); self::assertEquals($stateName, $state->getName()); @@ -275,7 +275,7 @@ public function testPostUpdateFailure() public function testPostRemoveFailure() { $this->loadFixturesCountries(); - $this->_em->clear(); + $this->em->clear(); $listener = new ListenerSecondLevelCacheTest( [ @@ -285,42 +285,42 @@ public function testPostRemoveFailure() ] ); - $this->_em->getEventManager() + $this->em->getEventManager() ->addEventListener(Events::postRemove, $listener); $this->cache->evictEntityRegion(Country::class); $countryId = $this->countries[0]->getId(); - $country = $this->_em->find(Country::class, $countryId); + $country = $this->em->find(Country::class, $countryId); self::assertTrue($this->cache->containsEntity(Country::class, $countryId)); self::assertInstanceOf(Country::class, $country); - $this->_em->remove($country); + $this->em->remove($country); try { - $this->_em->flush(); + $this->em->flush(); $this->fail('Should throw exception'); } catch (\Exception $exc) { self::assertEquals('post remove failure', $exc->getMessage()); } - $this->_em->clear(); + $this->em->clear(); self::assertFalse( $this->cache->containsEntity(Country::class, $countryId), 'Removal attempts should clear the cache entry corresponding to the entity' ); - self::assertInstanceOf(Country::class, $this->_em->find(Country::class, $countryId)); + self::assertInstanceOf(Country::class, $this->em->find(Country::class, $countryId)); } public function testCachedNewEntityExists() { $this->loadFixturesCountries(); - $persister = $this->_em->getUnitOfWork()->getEntityPersister(Country::class); + $persister = $this->em->getUnitOfWork()->getEntityPersister(Country::class); $queryCount = $this->getCurrentQueryCount(); self::assertTrue($persister->exists($this->countries[0])); diff --git a/tests/Doctrine/Tests/ORM/Functional/SequenceEmulatedIdentityStrategyTest.php b/tests/Doctrine/Tests/ORM/Functional/SequenceEmulatedIdentityStrategyTest.php index e7050cca725..aeca82fd198 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SequenceEmulatedIdentityStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SequenceEmulatedIdentityStrategyTest.php @@ -14,14 +14,14 @@ protected function setUp() { parent::setUp(); - if ( ! $this->_em->getConnection()->getDatabasePlatform()->usesSequenceEmulatedIdentityColumns()) { + if ( ! $this->em->getConnection()->getDatabasePlatform()->usesSequenceEmulatedIdentityColumns()) { $this->markTestSkipped( 'This test is special to platforms emulating IDENTITY key generation strategy through sequences.' ); } else { try { - $this->_schemaTool->createSchema( - [$this->_em->getClassMetadata(SequenceEmulatedIdentityEntity::class)] + $this->schemaTool->createSchema( + [$this->em->getClassMetadata(SequenceEmulatedIdentityEntity::class)] ); } catch (\Exception $e) { // Swallow all exceptions. We do not test the schema tool here. @@ -36,7 +36,7 @@ protected function tearDown() { parent::tearDown(); - $connection = $this->_em->getConnection(); + $connection = $this->em->getConnection(); $platform = $connection->getDatabasePlatform(); // drop sequence manually due to dependency @@ -51,11 +51,11 @@ public function testPreSavePostSaveCallbacksAreInvoked() { $entity = new SequenceEmulatedIdentityEntity(); $entity->setValue('hello'); - $this->_em->persist($entity); - $this->_em->flush(); + $this->em->persist($entity); + $this->em->flush(); self::assertTrue(is_numeric($entity->getId())); self::assertTrue($entity->getId() > 0); - self::assertTrue($this->_em->contains($entity)); + self::assertTrue($this->em->contains($entity)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SequenceGeneratorTest.php b/tests/Doctrine/Tests/ORM/Functional/SequenceGeneratorTest.php index 290984f3584..08d4154eba2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SequenceGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SequenceGeneratorTest.php @@ -14,14 +14,14 @@ public function setUp() { parent::setUp(); - if ( ! $this->_em->getConnection()->getDatabasePlatform()->supportsSequences()) { + if (! $this->em->getConnection()->getDatabasePlatform()->supportsSequences()) { $this->markTestSkipped('Only working for Databases that support sequences.'); } try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(SequenceEntity::class), + $this->em->getClassMetadata(SequenceEntity::class), ] ); } catch(\Exception $e) { @@ -31,12 +31,12 @@ public function setUp() public function testHighAllocationSizeSequence() { for ($i = 0; $i < 11; ++$i) { - $this->_em->persist(new SequenceEntity()); + $this->em->persist(new SequenceEntity()); } - $this->_em->flush(); + $this->em->flush(); - self::assertCount(11, $this->_em->getRepository(SequenceEntity::class)->findAll()); + self::assertCount(11, $this->em->getRepository(SequenceEntity::class)->findAll()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SingleTableCompositeKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/SingleTableCompositeKeyTest.php index 1d999e2f64d..0a160894da2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SingleTableCompositeKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SingleTableCompositeKeyTest.php @@ -21,10 +21,10 @@ public function setUp() public function testInsertWithCompositeKey() { $childEntity = new SingleChildClass(); - $this->_em->persist($childEntity); - $this->_em->flush(); + $this->em->persist($childEntity); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); $entity = $this->findEntity(); self::assertEquals($childEntity, $entity); @@ -36,17 +36,17 @@ public function testInsertWithCompositeKey() public function testUpdateWithCompositeKey() { $childEntity = new SingleChildClass(); - $this->_em->persist($childEntity); - $this->_em->flush(); + $this->em->persist($childEntity); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); $entity = $this->findEntity(); $entity->extension = 'ext-new'; - $this->_em->persist($entity); - $this->_em->flush(); + $this->em->persist($entity); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); $persistedEntity = $this->findEntity(); self::assertEquals($entity, $persistedEntity); @@ -57,6 +57,6 @@ public function testUpdateWithCompositeKey() */ private function findEntity() { - return $this->_em->find(SingleRootClass::class, ['keyPart1' => 'part-1', 'keyPart2' => 'part-2']); + return $this->em->find(SingleRootClass::class, ['keyPart1' => 'part-1', 'keyPart2' => 'part-2']); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SingleTableInheritanceTest.php b/tests/Doctrine/Tests/ORM/Functional/SingleTableInheritanceTest.php index e6d3f8d7fb6..9f16c91aa9f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SingleTableInheritanceTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SingleTableInheritanceTest.php @@ -59,11 +59,11 @@ public function persistRelatedEmployees() $engineer4->setSalary(100); $this->engineers[] = $engineer4; - $this->_em->persist($this->salesPerson); - $this->_em->persist($engineer1); - $this->_em->persist($engineer2); - $this->_em->persist($engineer3); - $this->_em->persist($engineer4); + $this->em->persist($this->salesPerson); + $this->em->persist($engineer1); + $this->em->persist($engineer2); + $this->em->persist($engineer3); + $this->em->persist($engineer4); } public function loadFullFixture() @@ -94,11 +94,11 @@ public function loadFullFixture() $this->ultra->addEngineer($this->engineers[3]); $this->ultra->addEngineer($this->engineers[0]); - $this->_em->persist($this->fix); - $this->_em->persist($this->flex); - $this->_em->persist($this->ultra); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($this->fix); + $this->em->persist($this->flex); + $this->em->persist($this->ultra); + $this->em->flush(); + $this->em->clear(); } public function testPersistChildOfBaseClass() @@ -109,11 +109,11 @@ public function testPersistChildOfBaseClass() $fixContract->setFixPrice(1000); $fixContract->setSalesPerson($this->salesPerson); - $this->_em->persist($fixContract); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($fixContract); + $this->em->flush(); + $this->em->clear(); - $contract = $this->_em->find(CompanyFixContract::class, $fixContract->getId()); + $contract = $this->em->find(CompanyFixContract::class, $fixContract->getId()); self::assertInstanceOf(CompanyFixContract::class, $contract); self::assertEquals(1000, $contract->getFixPrice()); @@ -130,11 +130,11 @@ public function testPersistDeepChildOfBaseClass() $ultraContract->setPricePerHour(50); $ultraContract->setMaxPrice(7000); - $this->_em->persist($ultraContract); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($ultraContract); + $this->em->flush(); + $this->em->clear(); - $contract = $this->_em->find(CompanyFlexUltraContract::class, $ultraContract->getId()); + $contract = $this->em->find(CompanyFlexUltraContract::class, $ultraContract->getId()); self::assertInstanceOf(CompanyFlexUltraContract::class, $contract); self::assertEquals(7000, $contract->getMaxPrice()); @@ -146,13 +146,13 @@ public function testChildClassLifecycleUpdate() { $this->loadFullFixture(); - $fix = $this->_em->find(CompanyContract::class, $this->fix->getId()); + $fix = $this->em->find(CompanyContract::class, $this->fix->getId()); $fix->setFixPrice(2500); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $newFix = $this->_em->find(CompanyContract::class, $this->fix->getId()); + $newFix = $this->em->find(CompanyContract::class, $this->fix->getId()); self::assertEquals(2500, $newFix->getFixPrice()); } @@ -160,17 +160,17 @@ public function testChildClassLifecycleRemove() { $this->loadFullFixture(); - $fix = $this->_em->find(CompanyContract::class, $this->fix->getId()); - $this->_em->remove($fix); - $this->_em->flush(); + $fix = $this->em->find(CompanyContract::class, $this->fix->getId()); + $this->em->remove($fix); + $this->em->flush(); - self::assertNull($this->_em->find(CompanyContract::class, $this->fix->getId())); + self::assertNull($this->em->find(CompanyContract::class, $this->fix->getId())); } public function testFindAllForAbstractBaseClass() { $this->loadFullFixture(); - $contracts = $this->_em->getRepository(CompanyContract::class)->findAll(); + $contracts = $this->em->getRepository(CompanyContract::class)->findAll(); self::assertEquals(3, count($contracts)); self::assertContainsOnly(CompanyContract::class, $contracts); @@ -180,16 +180,16 @@ public function testFindAllForChildClass() { $this->loadFullFixture(); - self::assertEquals(1, count($this->_em->getRepository(CompanyFixContract::class)->findAll())); - self::assertEquals(2, count($this->_em->getRepository(CompanyFlexContract::class)->findAll())); - self::assertEquals(1, count($this->_em->getRepository(CompanyFlexUltraContract::class)->findAll())); + self::assertEquals(1, count($this->em->getRepository(CompanyFixContract::class)->findAll())); + self::assertEquals(2, count($this->em->getRepository(CompanyFlexContract::class)->findAll())); + self::assertEquals(1, count($this->em->getRepository(CompanyFlexUltraContract::class)->findAll())); } public function testFindForAbstractBaseClass() { $this->loadFullFixture(); - $contract = $this->_em->find(CompanyContract::class, $this->fix->getId()); + $contract = $this->em->find(CompanyContract::class, $this->fix->getId()); self::assertInstanceOf(CompanyFixContract::class, $contract); self::assertEquals(1000, $contract->getFixPrice()); @@ -199,7 +199,7 @@ public function testQueryForAbstractBaseClass() { $this->loadFullFixture(); - $contracts = $this->_em->createQuery('SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c')->getResult(); + $contracts = $this->em->createQuery('SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c')->getResult(); self::assertEquals(3, count($contracts)); self::assertContainsOnly(CompanyContract::class, $contracts); @@ -209,16 +209,16 @@ public function testQueryForChildClass() { $this->loadFullFixture(); - self::assertEquals(1, count($this->_em->createQuery('SELECT c FROM Doctrine\Tests\Models\Company\CompanyFixContract c')->getResult())); - self::assertEquals(2, count($this->_em->createQuery('SELECT c FROM Doctrine\Tests\Models\Company\CompanyFlexContract c')->getResult())); - self::assertEquals(1, count($this->_em->createQuery('SELECT c FROM Doctrine\Tests\Models\Company\CompanyFlexUltraContract c')->getResult())); + self::assertEquals(1, count($this->em->createQuery('SELECT c FROM Doctrine\Tests\Models\Company\CompanyFixContract c')->getResult())); + self::assertEquals(2, count($this->em->createQuery('SELECT c FROM Doctrine\Tests\Models\Company\CompanyFlexContract c')->getResult())); + self::assertEquals(1, count($this->em->createQuery('SELECT c FROM Doctrine\Tests\Models\Company\CompanyFlexUltraContract c')->getResult())); } public function testQueryBaseClassWithJoin() { $this->loadFullFixture(); - $contracts = $this->_em->createQuery('SELECT c, p FROM Doctrine\Tests\Models\Company\CompanyContract c JOIN c.salesPerson p')->getResult(); + $contracts = $this->em->createQuery('SELECT c, p FROM Doctrine\Tests\Models\Company\CompanyContract c JOIN c.salesPerson p')->getResult(); self::assertEquals(3, count($contracts)); self::assertContainsOnly(CompanyContract::class, $contracts); } @@ -227,7 +227,7 @@ public function testQueryScalarWithDiscriminatorValue() { $this->loadFullFixture(); - $contracts = $this->_em->createQuery('SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c ORDER BY c.id')->getScalarResult(); + $contracts = $this->em->createQuery('SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c ORDER BY c.id')->getScalarResult(); $discrValues = \array_map(function($a) { return $a['c_discr']; @@ -243,7 +243,7 @@ public function testQueryChildClassWithCondition() $this->loadFullFixture(); $dql = 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyFixContract c WHERE c.fixPrice = ?1'; - $contract = $this->_em->createQuery($dql)->setParameter(1, 1000)->getSingleResult(); + $contract = $this->em->createQuery($dql)->setParameter(1, 1000)->getSingleResult(); self::assertInstanceOf(CompanyFixContract::class, $contract); self::assertEquals(1000, $contract->getFixPrice()); @@ -257,12 +257,12 @@ public function testUpdateChildClassWithCondition() $this->loadFullFixture(); $dql = 'UPDATE Doctrine\Tests\Models\Company\CompanyFlexContract c SET c.hoursWorked = c.hoursWorked * 2 WHERE c.hoursWorked = 150'; - $affected = $this->_em->createQuery($dql)->execute(); + $affected = $this->em->createQuery($dql)->execute(); self::assertEquals(1, $affected); - $flexContract = $this->_em->find(CompanyContract::class, $this->flex->getId()); - $ultraContract = $this->_em->find(CompanyContract::class, $this->ultra->getId()); + $flexContract = $this->em->find(CompanyContract::class, $this->flex->getId()); + $ultraContract = $this->em->find(CompanyContract::class, $this->ultra->getId()); self::assertEquals(300, $ultraContract->getHoursWorked()); self::assertEquals(100, $flexContract->getHoursWorked()); @@ -273,12 +273,12 @@ public function testUpdateBaseClassWithCondition() $this->loadFullFixture(); $dql = 'UPDATE Doctrine\Tests\Models\Company\CompanyContract c SET c.completed = true WHERE c.completed = false'; - $affected = $this->_em->createQuery($dql)->execute(); + $affected = $this->em->createQuery($dql)->execute(); self::assertEquals(1, $affected); $dql = 'UPDATE Doctrine\Tests\Models\Company\CompanyContract c SET c.completed = false'; - $affected = $this->_em->createQuery($dql)->execute(); + $affected = $this->em->createQuery($dql)->execute(); self::assertEquals(3, $affected); } @@ -288,7 +288,7 @@ public function testDeleteByChildClassCondition() $this->loadFullFixture(); $dql = 'DELETE Doctrine\Tests\Models\Company\CompanyFlexContract c'; - $affected = $this->_em->createQuery($dql)->execute(); + $affected = $this->em->createQuery($dql)->execute(); self::assertEquals(2, $affected); } @@ -298,11 +298,11 @@ public function testDeleteByBaseClassCondition() $this->loadFullFixture(); $dql = "DELETE Doctrine\Tests\Models\Company\CompanyContract c WHERE c.completed = true"; - $affected = $this->_em->createQuery($dql)->execute(); + $affected = $this->em->createQuery($dql)->execute(); self::assertEquals(2, $affected); - $contracts = $this->_em->createQuery('SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c')->getResult(); + $contracts = $this->em->createQuery('SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c')->getResult(); self::assertEquals(1, count($contracts)); self::assertFalse($contracts[0]->isCompleted(), "Only non completed contracts should be left."); @@ -316,10 +316,10 @@ public function testDeleteJoinTableRecords() $this->loadFullFixture(); // remove managed copy of the fix contract - $this->_em->remove($this->_em->find(get_class($this->fix), $this->fix->getId())); - $this->_em->flush(); + $this->em->remove($this->em->find(get_class($this->fix), $this->fix->getId())); + $this->em->flush(); - self::assertNull($this->_em->find(get_class($this->fix), $this->fix->getId()), "Contract should not be present in the database anymore."); + self::assertNull($this->em->find(get_class($this->fix), $this->fix->getId()), "Contract should not be present in the database anymore."); } /** @@ -329,19 +329,19 @@ public function testFindByAssociation() { $this->loadFullFixture(); - $repos = $this->_em->getRepository(CompanyContract::class); + $repos = $this->em->getRepository(CompanyContract::class); $contracts = $repos->findBy(['salesPerson' => $this->salesPerson->getId()]); self::assertEquals(3, count($contracts), "There should be 3 entities related to " . $this->salesPerson->getId() . " for 'Doctrine\Tests\Models\Company\CompanyContract'"); - $repos = $this->_em->getRepository(CompanyFixContract::class); + $repos = $this->em->getRepository(CompanyFixContract::class); $contracts = $repos->findBy(['salesPerson' => $this->salesPerson->getId()]); self::assertEquals(1, count($contracts), "There should be 1 entities related to " . $this->salesPerson->getId() . " for 'Doctrine\Tests\Models\Company\CompanyFixContract'"); - $repos = $this->_em->getRepository(CompanyFlexContract::class); + $repos = $this->em->getRepository(CompanyFlexContract::class); $contracts = $repos->findBy(['salesPerson' => $this->salesPerson->getId()]); self::assertEquals(2, count($contracts), "There should be 2 entities related to " . $this->salesPerson->getId() . " for 'Doctrine\Tests\Models\Company\CompanyFlexContract'"); - $repos = $this->_em->getRepository(CompanyFlexUltraContract::class); + $repos = $this->em->getRepository(CompanyFlexUltraContract::class); $contracts = $repos->findBy(['salesPerson' => $this->salesPerson->getId()]); self::assertEquals(1, count($contracts), "There should be 1 entities related to " . $this->salesPerson->getId() . " for 'Doctrine\Tests\Models\Company\CompanyFlexUltraContract'"); } @@ -353,13 +353,13 @@ public function testInheritanceMatching() { $this->loadFullFixture(); - $repository = $this->_em->getRepository(CompanyContract::class); + $repository = $this->em->getRepository(CompanyContract::class); $contracts = $repository->matching(new Criteria( Criteria::expr()->eq('salesPerson', $this->salesPerson) )); self::assertEquals(3, count($contracts)); - $repository = $this->_em->getRepository(CompanyFixContract::class); + $repository = $this->em->getRepository(CompanyFixContract::class); $contracts = $repository->matching(new Criteria( Criteria::expr()->eq('salesPerson', $this->salesPerson) )); @@ -373,7 +373,7 @@ public function testMatchingNonObjectOnAssocationThrowsException() { $this->loadFullFixture(); - $repository = $this->_em->getRepository(CompanyContract::class); + $repository = $this->em->getRepository(CompanyContract::class); $this->expectException(PersisterException::class); $this->expectExceptionMessage('annot match on Doctrine\Tests\Models\Company\CompanyContract::salesPerson with a non-object value.'); @@ -393,13 +393,13 @@ public function testGetReferenceEntityWithSubclasses() { $this->loadFullFixture(); - $ref = $this->_em->getReference(CompanyContract::class, $this->fix->getId()); + $ref = $this->em->getReference(CompanyContract::class, $this->fix->getId()); self::assertNotInstanceOf(Proxy::class, $ref, "Cannot Request a proxy from a class that has subclasses."); self::assertInstanceOf(CompanyContract::class, $ref); self::assertInstanceOf(CompanyFixContract::class, $ref, "Direct fetch of the reference has to load the child class Employee directly."); - $this->_em->clear(); + $this->em->clear(); - $ref = $this->_em->getReference(CompanyFixContract::class, $this->fix->getId()); + $ref = $this->em->getReference(CompanyFixContract::class, $this->fix->getId()); self::assertInstanceOf(Proxy::class, $ref, "A proxy can be generated only if no subclasses exists for the requested reference."); } @@ -411,7 +411,7 @@ public function testEagerLoadInheritanceHierarchy() $this->loadFullFixture(); $dql = 'SELECT f FROM Doctrine\Tests\Models\Company\CompanyFixContract f WHERE f.id = ?1'; - $contract = $this->_em + $contract = $this->em ->createQuery($dql) ->setFetchMode(CompanyFixContract::class, 'salesPerson', FetchMode::EAGER) ->setParameter(1, $this->fix->getId()) diff --git a/tests/Doctrine/Tests/ORM/Functional/StandardEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Functional/StandardEntityPersisterTest.php index 25d53778645..526a8cd8301 100644 --- a/tests/Doctrine/Tests/ORM/Functional/StandardEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/StandardEntityPersisterTest.php @@ -28,17 +28,17 @@ public function testAcceptsForeignKeysAsCriteria() $cart = new ECommerceCart(); $cart->setPayment('Credit card'); $customer->setCart($cart); - $this->_em->persist($customer); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($customer); + $this->em->flush(); + $this->em->clear(); $cardId = $cart->getId(); unset($cart); - $class = $this->_em->getClassMetadata(ECommerceCart::class); + $class = $this->em->getClassMetadata(ECommerceCart::class); - $persister = $this->_em->getUnitOfWork()->getEntityPersister(ECommerceCart::class); + $persister = $this->em->getUnitOfWork()->getEntityPersister(ECommerceCart::class); $newCart = new ECommerceCart(); - $this->_em->getUnitOfWork()->registerManaged($newCart, ['id' => $cardId], []); + $this->em->getUnitOfWork()->registerManaged($newCart, ['id' => $cardId], []); $persister->load(['customer_id' => $customer->getId()], $newCart, $class->associationMappings['customer']); self::assertEquals('Credit card', $newCart->getPayment()); } @@ -57,14 +57,14 @@ public function testAddPersistRetrieve() $p = new ECommerceProduct; $p->addFeature($f1); $p->addFeature($f2); - $this->_em->persist($p); + $this->em->persist($p); - $this->_em->flush(); + $this->em->flush(); self::assertEquals(2, count($p->getFeatures())); self::assertInstanceOf(PersistentCollection::class, $p->getFeatures()); - $q = $this->_em->createQuery( + $q = $this->em->createQuery( 'SELECT p, f FROM Doctrine\Tests\Models\ECommerce\ECommerceProduct p JOIN p.features f' @@ -91,10 +91,10 @@ public function testAddPersistRetrieve() $p->addFeature($f3); // Now we persist the Feature #3 - $this->_em->persist($p); - $this->_em->flush(); + $this->em->persist($p); + $this->em->flush(); - $q = $this->_em->createQuery( + $q = $this->em->createQuery( 'SELECT p, f FROM Doctrine\Tests\Models\ECommerce\ECommerceProduct p JOIN p.features f' diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1040Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1040Test.php index f96c77ea4ec..86118bf0dc3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1040Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1040Test.php @@ -29,22 +29,22 @@ public function testReuseNamedEntityParameter() $article->text = "Yadda Yadda!"; $article->setAuthor($user); - $this->_em->persist($user); - $this->_em->persist($article); - $this->_em->flush(); + $this->em->persist($user); + $this->em->persist($article); + $this->em->flush(); $dql = "SELECT a FROM Doctrine\Tests\Models\CMS\CmsArticle a WHERE a.user = :author"; - $this->_em->createQuery($dql) + $this->em->createQuery($dql) ->setParameter('author', $user) ->getResult(); $dql = "SELECT a FROM Doctrine\Tests\Models\CMS\CmsArticle a WHERE a.user = :author AND a.user = :author"; - $this->_em->createQuery($dql) + $this->em->createQuery($dql) ->setParameter('author', $user) ->getResult(); $dql = "SELECT a FROM Doctrine\Tests\Models\CMS\CmsArticle a WHERE a.topic = :topic AND a.user = :author AND a.user = :author"; - $farticle = $this->_em->createQuery($dql) + $farticle = $this->em->createQuery($dql) ->setParameter('author', $user) ->setParameter('topic', 'This is John Galt speaking!') ->getSingleResult(); @@ -64,12 +64,12 @@ public function testUseMultiplePositionalParameters() $article->text = "Yadda Yadda!"; $article->setAuthor($user); - $this->_em->persist($user); - $this->_em->persist($article); - $this->_em->flush(); + $this->em->persist($user); + $this->em->persist($article); + $this->em->flush(); $dql = "SELECT a FROM Doctrine\Tests\Models\CMS\CmsArticle a WHERE a.topic = ?1 AND a.user = ?2 AND a.user = ?3"; - $farticle = $this->_em->createQuery($dql) + $farticle = $this->em->createQuery($dql) ->setParameter(1, 'This is John Galt speaking!') ->setParameter(2, $user) ->setParameter(3, $user) diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1041Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1041Test.php index 9f388662076..c9b9b0a52df 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1041Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1041Test.php @@ -21,13 +21,13 @@ public function testGrabWrongSubtypeReturnsNull() $fix = new Models\Company\CompanyFixContract(); $fix->setFixPrice(2000); - $this->_em->persist($fix); - $this->_em->flush(); + $this->em->persist($fix); + $this->em->flush(); $id = $fix->getId(); - self::assertNull($this->_em->find(Models\Company\CompanyFlexContract::class, $id)); - self::assertNull($this->_em->getReference(Models\Company\CompanyFlexContract::class, $id)); - self::assertNull($this->_em->getPartialReference(Models\Company\CompanyFlexContract::class, $id)); + self::assertNull($this->em->find(Models\Company\CompanyFlexContract::class, $id)); + self::assertNull($this->em->getReference(Models\Company\CompanyFlexContract::class, $id)); + self::assertNull($this->em->getPartialReference(Models\Company\CompanyFlexContract::class, $id)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1043Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1043Test.php index 3520723741b..0eb821a8728 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1043Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1043Test.php @@ -23,14 +23,14 @@ public function testChangeSetPlusWeirdPHPCastingIntCastingRule() $user->username = "jgalt"; $user->status = "+44"; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); $user->status = "44"; - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $user = $this->_em->find(CmsUser::class, $user->id); + $user = $this->em->find(CmsUser::class, $user->id); self::assertSame("44", $user->status); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1080Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1080Test.php index 3eee24396dc..838ce9be411 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1080Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1080Test.php @@ -11,11 +11,11 @@ class DDC1080Test extends OrmFunctionalTestCase { public function testHydration() { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1080Foo::class), - $this->_em->getClassMetadata(DDC1080Bar::class), - $this->_em->getClassMetadata(DDC1080FooBar::class), + $this->em->getClassMetadata(DDC1080Foo::class), + $this->em->getClassMetadata(DDC1080Bar::class), + $this->em->getClassMetadata(DDC1080FooBar::class), ] ); @@ -46,54 +46,54 @@ public function testHydration() $foobar3->setBar($bar3); $foobar3->setOrderNr(0); - $this->_em->persist($foo1); - $this->_em->persist($foo2); - $this->_em->persist($bar1); - $this->_em->persist($bar2); - $this->_em->persist($bar3); - $this->_em->flush(); - - $this->_em->persist($foobar1); - $this->_em->persist($foobar2); - $this->_em->persist($foobar3); - $this->_em->flush(); - $this->_em->clear(); - - $foo = $this->_em->find(DDC1080Foo::class, $foo1->getFooID()); + $this->em->persist($foo1); + $this->em->persist($foo2); + $this->em->persist($bar1); + $this->em->persist($bar2); + $this->em->persist($bar3); + $this->em->flush(); + + $this->em->persist($foobar1); + $this->em->persist($foobar2); + $this->em->persist($foobar3); + $this->em->flush(); + $this->em->clear(); + + $foo = $this->em->find(DDC1080Foo::class, $foo1->getFooID()); + $fooBars = $foo->getFooBars(); self::assertEquals(3, count($fooBars), "Should return three foobars."); } } - /** * @Entity * @Table(name="foo") */ class DDC1080Foo { - /** * @Id * @Column(name="fooID", type="integer") * @GeneratedValue(strategy="AUTO") */ - protected $_fooID; + protected $fooID; + /** * @Column(name="fooTitle", type="string") */ - protected $_fooTitle; + + protected $fooTitle; /** - * @OneToMany(targetEntity="DDC1080FooBar", mappedBy="_foo", - * cascade={"persist"}) - * @OrderBy({"_orderNr"="ASC"}) + * @OneToMany(targetEntity="DDC1080FooBar", mappedBy="foo", cascade={"persist"}) + * @OrderBy({"orderNr"="ASC"}) */ - protected $_fooBars; + protected $fooBars; public function __construct() { - $this->_fooBars = new \Doctrine\Common\Collections\ArrayCollection(); + $this->fooBars = new \Doctrine\Common\Collections\ArrayCollection(); } /** @@ -101,7 +101,7 @@ public function __construct() */ public function getFooID() { - return $this->_fooID; + return $this->fooID; } /** @@ -109,7 +109,7 @@ public function getFooID() */ public function getFooTitle() { - return $this->_fooTitle; + return $this->fooTitle; } /** @@ -117,7 +117,7 @@ public function getFooTitle() */ public function getFooBars() { - return $this->_fooBars; + return $this->fooBars; } /** @@ -125,7 +125,7 @@ public function getFooBars() */ public function setFooID($fooID) { - $this->_fooID = $fooID; + $this->fooID = $fooID; } /** @@ -133,7 +133,7 @@ public function setFooID($fooID) */ public function setFooTitle($fooTitle) { - $this->_fooTitle = $fooTitle; + $this->fooTitle = $fooTitle; } /** @@ -141,7 +141,7 @@ public function setFooTitle($fooTitle) */ public function setFooBars($fooBars) { - $this->_fooBars = $fooBars; + $this->fooBars = $fooBars; } } @@ -151,27 +151,27 @@ public function setFooBars($fooBars) */ class DDC1080Bar { - /** * @Id * @Column(name="barID", type="integer") * @GeneratedValue(strategy="AUTO") */ - protected $_barID; + protected $barID; + /** * @Column(name="barTitle", type="string") */ - protected $_barTitle; + protected $barTitle; + /** - * @OneToMany(targetEntity="DDC1080FooBar", mappedBy="_bar", - * cascade={"persist"}) - * @OrderBy({"_orderNr"="ASC"}) + * @OneToMany(targetEntity="DDC1080FooBar", mappedBy="bar", cascade={"persist"}) + * @OrderBy({"orderNr"="ASC"}) */ - protected $_fooBars; + protected $fooBars; public function __construct() { - $this->_fooBars = new \Doctrine\Common\Collections\ArrayCollection(); + $this->fooBars = new \Doctrine\Common\Collections\ArrayCollection(); } /** @@ -179,7 +179,7 @@ public function __construct() */ public function getBarID() { - return $this->_barID; + return $this->barID; } /** @@ -187,7 +187,7 @@ public function getBarID() */ public function getBarTitle() { - return $this->_barTitle; + return $this->barTitle; } /** @@ -195,7 +195,7 @@ public function getBarTitle() */ public function getFooBars() { - return $this->_fooBars; + return $this->fooBars; } /** @@ -203,7 +203,7 @@ public function getFooBars() */ public function setBarID($barID) { - $this->_barID = $barID; + $this->barID = $barID; } /** @@ -211,7 +211,7 @@ public function setBarID($barID) */ public function setBarTitle($barTitle) { - $this->_barTitle = $barTitle; + $this->barTitle = $barTitle; } /** @@ -219,7 +219,7 @@ public function setBarTitle($barTitle) */ public function setFooBars($fooBars) { - $this->_fooBars = $fooBars; + $this->fooBars = $fooBars; } } @@ -230,24 +230,23 @@ public function setFooBars($fooBars) */ class DDC1080FooBar { - /** * @ManyToOne(targetEntity="DDC1080Foo") * @JoinColumn(name="fooID", referencedColumnName="fooID") * @Id */ - protected $_foo = null; + protected $foo = null; /** * @ManyToOne(targetEntity="DDC1080Bar") * @JoinColumn(name="barID", referencedColumnName="barID") * @Id */ - protected $_bar = null; + protected $bar = null; /** * @var int orderNr * @Column(name="orderNr", type="integer", nullable=false) */ - protected $_orderNr = null; + protected $orderNr = null; /** * Retrieve the foo property @@ -256,7 +255,7 @@ class DDC1080FooBar */ public function getFoo() { - return $this->_foo; + return $this->foo; } /** @@ -267,7 +266,8 @@ public function getFoo() */ public function setFoo($foo) { - $this->_foo = $foo; + $this->foo = $foo; + return $this; } @@ -278,7 +278,7 @@ public function setFoo($foo) */ public function getBar() { - return $this->_bar; + return $this->bar; } /** @@ -289,7 +289,8 @@ public function getBar() */ public function setBar($bar) { - $this->_bar = $bar; + $this->bar = $bar; + return $this; } @@ -300,7 +301,7 @@ public function setBar($bar) */ public function getOrderNr() { - return $this->_orderNr; + return $this->orderNr; } /** @@ -311,9 +312,9 @@ public function getOrderNr() */ public function setOrderNr($orderNr) { - $this->_orderNr = $orderNr; + $this->orderNr = $orderNr; + return $this; } - } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1113Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1113Test.php index 324e8481219..fa8565d48d9 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1113Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1113Test.php @@ -13,12 +13,12 @@ public function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1113Engine::class), - $this->_em->getClassMetadata(DDC1113Vehicle::class), - $this->_em->getClassMetadata(DDC1113Car::class), - $this->_em->getClassMetadata(DDC1113Bus::class), + $this->em->getClassMetadata(DDC1113Engine::class), + $this->em->getClassMetadata(DDC1113Vehicle::class), + $this->em->getClassMetadata(DDC1113Car::class), + $this->em->getClassMetadata(DDC1113Bus::class), ] ); } catch (\Exception $e) { @@ -33,19 +33,19 @@ public function testIssue() $bus = new DDC1113Bus(); $bus->engine = new DDC1113Engine(); - $this->_em->persist($car); - $this->_em->flush(); + $this->em->persist($car); + $this->em->flush(); - $this->_em->persist($bus); - $this->_em->flush(); + $this->em->persist($bus); + $this->em->flush(); - $this->_em->remove($bus); - $this->_em->remove($car); - $this->_em->flush(); + $this->em->remove($bus); + $this->em->remove($car); + $this->em->flush(); - self::assertEmpty($this->_em->getRepository(DDC1113Car::class)->findAll()); - self::assertEmpty($this->_em->getRepository(DDC1113Bus::class)->findAll()); - self::assertEmpty($this->_em->getRepository(DDC1113Engine::class)->findAll()); + self::assertEmpty($this->em->getRepository(DDC1113Car::class)->findAll()); + self::assertEmpty($this->em->getRepository(DDC1113Bus::class)->findAll()); + self::assertEmpty($this->em->getRepository(DDC1113Engine::class)->findAll()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1129Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1129Test.php index fc9f1566d6b..10f29ab4e61 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1129Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1129Test.php @@ -21,20 +21,20 @@ public function testVersionFieldIgnoredInChangesetComputation() $article->text = "I don't know."; $article->topic = "Who is John Galt?"; - $this->_em->persist($article); - $this->_em->flush(); + $this->em->persist($article); + $this->em->flush(); self::assertEquals(1, $article->version); - $class = $this->_em->getClassMetadata(CmsArticle::class); - $uow = $this->_em->getUnitOfWork(); + $class = $this->em->getClassMetadata(CmsArticle::class); + $uow = $this->em->getUnitOfWork(); $uow->computeChangeSet($class, $article); $changeSet = $uow->getEntityChangeSet($article); self::assertEquals(0, count($changeSet), "No changesets should be computed."); $article->text = "This is John Galt speaking."; - $this->_em->flush(); + $this->em->flush(); self::assertEquals(2, $article->version); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1151Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1151Test.php index 6289d42921e..96189d74a5b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1151Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1151Test.php @@ -9,14 +9,14 @@ class DDC1151Test extends \Doctrine\Tests\OrmFunctionalTestCase { public function testQuoteForeignKey() { - if ($this->_em->getConnection()->getDatabasePlatform()->getName() != 'postgresql') { + if ($this->em->getConnection()->getDatabasePlatform()->getName() != 'postgresql') { $this->markTestSkipped("This test is useful for all databases, but designed only for postgresql."); } - $sql = $this->_schemaTool->getCreateSchemaSql( + $sql = $this->schemaTool->getCreateSchemaSql( [ - $this->_em->getClassMetadata(DDC1151User::class), - $this->_em->getClassMetadata(DDC1151Group::class), + $this->em->getClassMetadata(DDC1151User::class), + $this->em->getClassMetadata(DDC1151Group::class), ] ); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1163Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1163Test.php index cab871b1441..cd920bd70a3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1163Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1163Test.php @@ -12,13 +12,13 @@ class DDC1163Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { parent::setUp(); - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); - $this->_schemaTool->createSchema( + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1163Product::class), - $this->_em->getClassMetadata(DDC1163SpecialProduct::class), - $this->_em->getClassMetadata(DDC1163ProxyHolder::class), - $this->_em->getClassMetadata(DDC1163Tag::class), + $this->em->getClassMetadata(DDC1163Product::class), + $this->em->getClassMetadata(DDC1163SpecialProduct::class), + $this->em->getClassMetadata(DDC1163ProxyHolder::class), + $this->em->getClassMetadata(DDC1163Tag::class), ] ); } @@ -26,27 +26,27 @@ protected function setUp() public function testIssue() { $this->createSpecialProductAndProxyHolderReferencingIt(); - $this->_em->clear(); + $this->em->clear(); $this->createProxyForSpecialProduct(); $this->setPropertyAndAssignTagToSpecialProduct(); // fails - $this->_em->flush(); + $this->em->flush(); } private function createSpecialProductAndProxyHolderReferencingIt() { $specialProduct = new DDC1163SpecialProduct(); - $this->_em->persist($specialProduct); + $this->em->persist($specialProduct); $proxyHolder = new DDC1163ProxyHolder(); - $this->_em->persist($proxyHolder); + $this->em->persist($proxyHolder); $proxyHolder->setSpecialProduct($specialProduct); - $this->_em->flush(); + $this->em->flush(); $this->productId = $specialProduct->getId(); $this->proxyHolderId = $proxyHolder->getId(); @@ -62,7 +62,7 @@ private function createSpecialProductAndProxyHolderReferencingIt() private function createProxyForSpecialProduct() { /* @var $proxyHolder DDC1163ProxyHolder */ - $proxyHolder = $this->_em->find(DDC1163ProxyHolder::class, $this->proxyHolderId); + $proxyHolder = $this->em->find(DDC1163ProxyHolder::class, $this->proxyHolderId); self::assertInstanceOf(DDC1163SpecialProduct::class, $proxyHolder->getSpecialProduct()); } @@ -70,7 +70,7 @@ private function createProxyForSpecialProduct() private function setPropertyAndAssignTagToSpecialProduct() { /* @var $specialProduct DDC1163SpecialProduct */ - $specialProduct = $this->_em->find(DDC1163SpecialProduct::class, $this->productId); + $specialProduct = $this->em->find(DDC1163SpecialProduct::class, $this->productId); self::assertInstanceOf(DDC1163SpecialProduct::class, $specialProduct); self::assertInstanceOf(Proxy::class, $specialProduct); @@ -80,11 +80,11 @@ private function setPropertyAndAssignTagToSpecialProduct() // this screams violation of law of demeter ;) self::assertEquals( DDC1163SpecialProduct::class, - $this->_em->getUnitOfWork()->getEntityPersister(get_class($specialProduct))->getClassMetadata()->name + $this->em->getUnitOfWork()->getEntityPersister(get_class($specialProduct))->getClassMetadata()->name ); $tag = new DDC1163Tag('Foo'); - $this->_em->persist($tag); + $this->em->persist($tag); $tag->setProduct($specialProduct); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC117Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC117Test.php index c42265ddde4..ba6f75c98c1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC117Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC117Test.php @@ -29,24 +29,24 @@ protected function setUp() $this->article1 = new DDC117Article("Foo"); $this->article2 = new DDC117Article("Bar"); - $this->_em->persist($this->article1); - $this->_em->persist($this->article2); - $this->_em->flush(); + $this->em->persist($this->article1); + $this->em->persist($this->article2); + $this->em->flush(); $link = new DDC117Link($this->article1, $this->article2, "Link-Description"); - $this->_em->persist($link); + $this->em->persist($link); $this->reference = new DDC117Reference($this->article1, $this->article2, "Test-Description"); - $this->_em->persist($this->reference); + $this->em->persist($this->reference); $this->translation = new DDC117Translation($this->article1, "en", "Bar"); - $this->_em->persist($this->translation); + $this->em->persist($this->translation); $this->articleDetails = new DDC117ArticleDetails($this->article1, "Very long text"); - $this->_em->persist($this->articleDetails); - $this->_em->flush(); + $this->em->persist($this->articleDetails); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); } /** @@ -56,36 +56,36 @@ public function testAssociationOnlyCompositeKey() { $idCriteria = ['source' => $this->article1->id(), 'target' => $this->article2->id()]; - $mapRef = $this->_em->find(DDC117Reference::class, $idCriteria); + $mapRef = $this->em->find(DDC117Reference::class, $idCriteria); self::assertInstanceOf(DDC117Reference::class, $mapRef); self::assertInstanceOf(DDC117Article::class, $mapRef->target()); self::assertInstanceOf(DDC117Article::class, $mapRef->source()); - self::assertSame($mapRef, $this->_em->find(DDC117Reference::class, $idCriteria)); + self::assertSame($mapRef, $this->em->find(DDC117Reference::class, $idCriteria)); - $this->_em->clear(); + $this->em->clear(); $dql = 'SELECT r, s FROM ' . DDC117Reference::class . ' r JOIN r.source s WHERE r.source = ?1'; - $dqlRef = $this->_em->createQuery($dql)->setParameter(1, 1)->getSingleResult(); + $dqlRef = $this->em->createQuery($dql)->setParameter(1, 1)->getSingleResult(); self::assertInstanceOf(DDC117Reference::class, $mapRef); self::assertInstanceOf(DDC117Article::class, $mapRef->target()); self::assertInstanceOf(DDC117Article::class, $mapRef->source()); - self::assertSame($dqlRef, $this->_em->find(DDC117Reference::class, $idCriteria)); + self::assertSame($dqlRef, $this->em->find(DDC117Reference::class, $idCriteria)); - $this->_em->clear(); + $this->em->clear(); $dql = 'SELECT r, s FROM ' . DDC117Reference::class . ' r JOIN r.source s WHERE s.title = ?1'; - $dqlRef = $this->_em->createQuery($dql)->setParameter(1, 'Foo')->getSingleResult(); + $dqlRef = $this->em->createQuery($dql)->setParameter(1, 'Foo')->getSingleResult(); self::assertInstanceOf(DDC117Reference::class, $dqlRef); self::assertInstanceOf(DDC117Article::class, $dqlRef->target()); self::assertInstanceOf(DDC117Article::class, $dqlRef->source()); - self::assertSame($dqlRef, $this->_em->find(DDC117Reference::class, $idCriteria)); + self::assertSame($dqlRef, $this->em->find(DDC117Reference::class, $idCriteria)); $dql = 'SELECT r, s FROM ' . DDC117Reference::class . ' r JOIN r.source s WHERE s.title = ?1'; - $dqlRef = $this->_em->createQuery($dql)->setParameter(1, 'Foo')->getSingleResult(); + $dqlRef = $this->em->createQuery($dql)->setParameter(1, 'Foo')->getSingleResult(); - $this->_em->contains($dqlRef); + $this->em->contains($dqlRef); } /** @@ -95,13 +95,13 @@ public function testUpdateAssociationEntity() { $idCriteria = ['source' => $this->article1->id(), 'target' => $this->article2->id()]; - $mapRef = $this->_em->find(DDC117Reference::class, $idCriteria); + $mapRef = $this->em->find(DDC117Reference::class, $idCriteria); self::assertNotNull($mapRef); $mapRef->setDescription("New Description!!"); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $mapRef = $this->_em->find(DDC117Reference::class, $idCriteria); + $mapRef = $this->em->find(DDC117Reference::class, $idCriteria); self::assertEquals('New Description!!', $mapRef->getDescription()); } @@ -112,13 +112,13 @@ public function testUpdateAssociationEntity() public function testFetchDql() { $dql = "SELECT r, s FROM Doctrine\Tests\Models\DDC117\DDC117Reference r JOIN r.source s WHERE s.title = ?1"; - $refs = $this->_em->createQuery($dql)->setParameter(1, 'Foo')->getResult(); + $refs = $this->em->createQuery($dql)->setParameter(1, 'Foo')->getResult(); self::assertTrue(count($refs) > 0, "Has to contain at least one Reference."); foreach ($refs AS $ref) { self::assertInstanceOf(DDC117Reference::class, $ref, "Contains only Reference instances."); - self::assertTrue($this->_em->contains($ref), "Contains Reference in the IdentityMap."); + self::assertTrue($this->em->contains($ref), "Contains Reference in the IdentityMap."); } } @@ -129,13 +129,13 @@ public function testRemoveCompositeElement() { $idCriteria = ['source' => $this->article1->id(), 'target' => $this->article2->id()]; - $refRep = $this->_em->find(DDC117Reference::class, $idCriteria); + $refRep = $this->em->find(DDC117Reference::class, $idCriteria); - $this->_em->remove($refRep); - $this->_em->flush(); - $this->_em->clear(); + $this->em->remove($refRep); + $this->em->flush(); + $this->em->clear(); - self::assertNull($this->_em->find(DDC117Reference::class, $idCriteria)); + self::assertNull($this->em->find(DDC117Reference::class, $idCriteria)); } /** @@ -147,12 +147,12 @@ public function testDqlRemoveCompositeElement() $idCriteria = ['source' => $this->article1->id(), 'target' => $this->article2->id()]; $dql = "DELETE Doctrine\Tests\Models\DDC117\DDC117Reference r WHERE r.source = ?1 AND r.target = ?2"; - $this->_em->createQuery($dql) + $this->em->createQuery($dql) ->setParameter(1, $this->article1->id()) ->setParameter(2, $this->article2->id()) ->execute(); - self::assertNull($this->_em->find(DDC117Reference::class, $idCriteria)); + self::assertNull($this->em->find(DDC117Reference::class, $idCriteria)); } /** @@ -160,7 +160,7 @@ public function testDqlRemoveCompositeElement() */ public function testInverseSideAccess() { - $this->article1 = $this->_em->find(DDC117Article::class, $this->article1->id()); + $this->article1 = $this->em->find(DDC117Article::class, $this->article1->id()); self::assertEquals(1, count($this->article1->references())); @@ -169,10 +169,10 @@ public function testInverseSideAccess() self::assertSame($this->article1, $this->reference->source()); } - $this->_em->clear(); + $this->em->clear(); $dql = 'SELECT a, r FROM Doctrine\Tests\Models\DDC117\DDC117Article a INNER JOIN a.references r WHERE a.id = ?1'; - $articleDql = $this->_em->createQuery($dql) + $articleDql = $this->em->createQuery($dql) ->setParameter(1, $this->article1->id()) ->getSingleResult(); @@ -191,15 +191,15 @@ public function testMixedCompositeKey() { $idCriteria = ['article' => $this->article1->id(), 'language' => 'en']; - $this->translation = $this->_em->find(DDC117Translation::class, $idCriteria); + $this->translation = $this->em->find(DDC117Translation::class, $idCriteria); self::assertInstanceOf(DDC117Translation::class, $this->translation); - self::assertSame($this->translation, $this->_em->find(DDC117Translation::class, $idCriteria)); + self::assertSame($this->translation, $this->em->find(DDC117Translation::class, $idCriteria)); - $this->_em->clear(); + $this->em->clear(); $dql = 'SELECT t, a FROM Doctrine\Tests\Models\DDC117\DDC117Translation t JOIN t.article a WHERE t.article = ?1 AND t.language = ?2'; - $dqlTrans = $this->_em->createQuery($dql) + $dqlTrans = $this->em->createQuery($dql) ->setParameter(1, $this->article1->id()) ->setParameter(2, 'en') ->getSingleResult(); @@ -212,14 +212,14 @@ public function testMixedCompositeKey() */ public function testMixedCompositeKeyViolateUniqueness() { - $this->article1 = $this->_em->find(DDC117Article::class, $this->article1->id()); + $this->article1 = $this->em->find(DDC117Article::class, $this->article1->id()); $this->article1->addTranslation('en', 'Bar'); $this->article1->addTranslation('en', 'Baz'); $exceptionThrown = false; try { // exception depending on the underlying Database Driver - $this->_em->flush(); + $this->em->flush(); } catch(\Exception $e) { $exceptionThrown = true; } @@ -233,19 +233,19 @@ public function testMixedCompositeKeyViolateUniqueness() public function testOneToOneForeignObjectId() { $this->article1 = new DDC117Article("Foo"); - $this->_em->persist($this->article1); - $this->_em->flush(); + $this->em->persist($this->article1); + $this->em->flush(); $this->articleDetails = new DDC117ArticleDetails($this->article1, "Very long text"); - $this->_em->persist($this->articleDetails); - $this->_em->flush(); + $this->em->persist($this->articleDetails); + $this->em->flush(); $this->articleDetails->update("not so very long text!"); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); /* @var $article DDC117Article */ - $article = $this->_em->find(get_class($this->article1), $this->article1->id()); + $article = $this->em->find(get_class($this->article1), $this->article1->id()); self::assertEquals('not so very long text!', $article->getText()); } @@ -254,11 +254,11 @@ public function testOneToOneForeignObjectId() */ public function testOneToOneCascadeRemove() { - $article = $this->_em->find(get_class($this->article1), $this->article1->id()); - $this->_em->remove($article); - $this->_em->flush(); + $article = $this->em->find(get_class($this->article1), $this->article1->id()); + $this->em->remove($article); + $this->em->flush(); - self::assertFalse($this->_em->contains($article->getDetails())); + self::assertFalse($this->em->contains($article->getDetails())); } /** @@ -266,17 +266,17 @@ public function testOneToOneCascadeRemove() */ public function testOneToOneCascadePersist() { - if ( ! $this->_em->getConnection()->getDatabasePlatform()->prefersSequences()) { + if (! $this->em->getConnection()->getDatabasePlatform()->prefersSequences()) { $this->markTestSkipped('Test only works with databases that prefer sequences as ID strategy.'); } $this->article1 = new DDC117Article("Foo"); $this->articleDetails = new DDC117ArticleDetails($this->article1, "Very long text"); - $this->_em->persist($this->article1); - $this->_em->flush(); + $this->em->persist($this->article1); + $this->em->flush(); - self::assertSame($this->articleDetails, $this->_em->find(DDC117ArticleDetails::class, $this->article1)); + self::assertSame($this->articleDetails, $this->em->find(DDC117ArticleDetails::class, $this->article1)); } /** @@ -285,17 +285,17 @@ public function testOneToOneCascadePersist() public function testReferencesToForeignKeyEntities() { $idCriteria = ['source' => $this->article1->id(), 'target' => $this->article2->id()]; - $reference = $this->_em->find(DDC117Reference::class, $idCriteria); + $reference = $this->em->find(DDC117Reference::class, $idCriteria); $idCriteria = ['article' => $this->article1->id(), 'language' => 'en']; - $translation = $this->_em->find(DDC117Translation::class, $idCriteria); + $translation = $this->em->find(DDC117Translation::class, $idCriteria); $approveChanges = new DDC117ApproveChanges($reference->source()->getDetails(), $reference, $translation); - $this->_em->persist($approveChanges); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($approveChanges); + $this->em->flush(); + $this->em->clear(); - $approveChanges = $this->_em->find(DDC117ApproveChanges::class, $approveChanges->getId()); + $approveChanges = $this->em->find(DDC117ApproveChanges::class, $approveChanges->getId()); self::assertInstanceOf(DDC117ArticleDetails::class, $approveChanges->getArticleDetails()); self::assertInstanceOf(DDC117Reference::class, $approveChanges->getReference()); @@ -308,7 +308,7 @@ public function testReferencesToForeignKeyEntities() public function testLoadOneToManyCollectionOfForeignKeyEntities() { /* @var $article DDC117Article */ - $article = $this->_em->find(get_class($this->article1), $this->article1->id()); + $article = $this->em->find(get_class($this->article1), $this->article1->id()); $translations = $article->getTranslations(); self::assertFalse($translations->isInitialized()); @@ -327,10 +327,10 @@ public function testLoadManyToManyCollectionOfForeignKeyEntities() self::assertContainsOnly(DDC117Translation::class, $editor->reviewingTranslations); self::assertTrue($editor->reviewingTranslations->isInitialized()); - $this->_em->clear(); + $this->em->clear(); $dql = "SELECT e, t FROM Doctrine\Tests\Models\DDC117\DDC117Editor e JOIN e.reviewingTranslations t WHERE e.id = ?1"; - $editor = $this->_em->createQuery($dql)->setParameter(1, $editor->id)->getSingleResult(); + $editor = $this->em->createQuery($dql)->setParameter(1, $editor->id)->getSingleResult(); self::assertTrue($editor->reviewingTranslations->isInitialized()); self::assertContainsOnly(DDC117Translation::class, $editor->reviewingTranslations); } @@ -344,10 +344,10 @@ public function testClearManyToManyCollectionOfForeignKeyEntities() self::assertEquals(3, count($editor->reviewingTranslations)); $editor->reviewingTranslations->clear(); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $editor = $this->_em->find(get_class($editor), $editor->id); + $editor = $this->em->find(get_class($editor), $editor->id); self::assertEquals(0, count($editor->reviewingTranslations)); } @@ -364,11 +364,11 @@ public function testLoadInverseManyToManyCollection() self::assertEquals(1, count($reviewedBy)); self::assertSame($editor, $reviewedBy[0]); - $this->_em->clear(); + $this->em->clear(); $dql = "SELECT t, e FROM Doctrine\Tests\Models\DDC117\DDC117Translation t ". "JOIN t.reviewedByEditors e WHERE t.article = ?1 AND t.language = ?2"; - $trans = $this->_em->createQuery($dql) + $trans = $this->em->createQuery($dql) ->setParameter(1, $this->translation->getArticleId()) ->setParameter(2, $this->translation->getLanguage()) ->getSingleResult(); @@ -386,10 +386,10 @@ public function testLoadOneToManyOfSourceEntityWithAssociationIdentifier() $editor = $this->loadEditorFixture(); $editor->addLastTranslation($editor->reviewingTranslations[0]); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $editor = $this->_em->find(get_class($editor), $editor->id); + $editor = $this->em->find(get_class($editor), $editor->id); $lastTranslatedBy = $editor->reviewingTranslations[0]->getLastTranslatedBy(); $lastTranslatedBy->count(); @@ -404,26 +404,26 @@ private function loadEditorFixture() $editor = new DDC117Editor("beberlei"); /* @var $article1 DDC117Article */ - $article1 = $this->_em->find(get_class($this->article1), $this->article1->id()); + $article1 = $this->em->find(get_class($this->article1), $this->article1->id()); foreach ($article1->getTranslations() AS $translation) { $editor->reviewingTranslations[] = $translation; } /* @var $article2 DDC117Article */ - $article2 = $this->_em->find(get_class($this->article2), $this->article2->id()); + $article2 = $this->em->find(get_class($this->article2), $this->article2->id()); $article2->addTranslation("de", "Vanille-Krapferl"); // omnomnom $article2->addTranslation("fr", "Sorry can't speak french!"); foreach ($article2->getTranslations() AS $translation) { - $this->_em->persist($translation); // otherwise persisting the editor won't work, reachability! + $this->em->persist($translation); // otherwise persisting the editor won't work, reachability! $editor->reviewingTranslations[] = $translation; } - $this->_em->persist($editor); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($editor); + $this->em->flush(); + $this->em->clear(); - return $this->_em->find(get_class($editor), $editor->id); + return $this->em->find(get_class($editor), $editor->id); } /** @@ -433,10 +433,10 @@ public function testMergeForeignKeyIdentifierEntity() { $idCriteria = ['source' => $this->article1->id(), 'target' => $this->article2->id()]; - $refRep = $this->_em->find(DDC117Reference::class, $idCriteria); + $refRep = $this->em->find(DDC117Reference::class, $idCriteria); - $this->_em->detach($refRep); - $refRep = $this->_em->merge($refRep); + $this->em->detach($refRep); + $refRep = $this->em->merge($refRep); self::assertEquals($this->article1->id(), $refRep->source()->id()); self::assertEquals($this->article2->id(), $refRep->target()->id()); @@ -448,24 +448,24 @@ public function testMergeForeignKeyIdentifierEntity() public function testArrayHydrationWithCompositeKey() { $dql = "SELECT r,s,t FROM Doctrine\Tests\Models\DDC117\DDC117Reference r INNER JOIN r.source s INNER JOIN r.target t"; - $before = count($this->_em->createQuery($dql)->getResult()); + $before = count($this->em->createQuery($dql)->getResult()); - $this->article1 = $this->_em->find(DDC117Article::class, $this->article1->id()); - $this->article2 = $this->_em->find(DDC117Article::class, $this->article2->id()); + $this->article1 = $this->em->find(DDC117Article::class, $this->article1->id()); + $this->article2 = $this->em->find(DDC117Article::class, $this->article2->id()); $this->reference = new DDC117Reference($this->article2, $this->article1, "Test-Description"); - $this->_em->persist($this->reference); + $this->em->persist($this->reference); $this->reference = new DDC117Reference($this->article1, $this->article1, "Test-Description"); - $this->_em->persist($this->reference); + $this->em->persist($this->reference); $this->reference = new DDC117Reference($this->article2, $this->article2, "Test-Description"); - $this->_em->persist($this->reference); + $this->em->persist($this->reference); - $this->_em->flush(); + $this->em->flush(); $dql = "SELECT r,s,t FROM Doctrine\Tests\Models\DDC117\DDC117Reference r INNER JOIN r.source s INNER JOIN r.target t"; - $data = $this->_em->createQuery($dql)->getArrayResult(); + $data = $this->em->createQuery($dql)->getArrayResult(); self::assertEquals($before + 3, count($data)); } @@ -479,24 +479,24 @@ public function testGetEntityState() $this->markTestIncomplete('Second level cache - not supported yet'); } - $this->article1 = $this->_em->find(DDC117Article::class, $this->article1->id()); - $this->article2 = $this->_em->find(DDC117Article::class, $this->article2->id()); + $this->article1 = $this->em->find(DDC117Article::class, $this->article1->id()); + $this->article2 = $this->em->find(DDC117Article::class, $this->article2->id()); $this->reference = new DDC117Reference($this->article2, $this->article1, "Test-Description"); - self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($this->reference)); + self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_NEW, $this->em->getUnitOfWork()->getEntityState($this->reference)); $idCriteria = ['source' => $this->article1->id(), 'target' => $this->article2->id()]; - $reference = $this->_em->find(DDC117Reference::class, $idCriteria); + $reference = $this->em->find(DDC117Reference::class, $idCriteria); - self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($reference)); + self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_MANAGED, $this->em->getUnitOfWork()->getEntityState($reference)); } /** * @group DDC-117 */ public function testIndexByOnCompositeKeyField() { - $article = $this->_em->find(DDC117Article::class, $this->article1->id()); + $article = $this->em->find(DDC117Article::class, $this->article1->id()); self::assertInstanceOf(DDC117Article::class, $article); self::assertEquals(1, count($article->getLinks())); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1181Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1181Test.php index 564e046e7d3..100f659827e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1181Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1181Test.php @@ -9,11 +9,11 @@ class DDC1181Test extends OrmFunctionalTestCase public function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1181Hotel::class), - $this->_em->getClassMetadata(DDC1181Booking::class), - $this->_em->getClassMetadata(DDC1181Room::class), + $this->em->getClassMetadata(DDC1181Hotel::class), + $this->em->getClassMetadata(DDC1181Booking::class), + $this->em->getClassMetadata(DDC1181Room::class), ] ); } @@ -27,10 +27,10 @@ public function testIssue() $room1 = new DDC1181Room(); $room2 = new DDC1181Room(); - $this->_em->persist($hotel); - $this->_em->persist($room1); - $this->_em->persist($room2); - $this->_em->flush(); + $this->em->persist($hotel); + $this->em->persist($room1); + $this->em->persist($room2); + $this->em->flush(); $booking1 = new DDC1181Booking; $booking1->hotel = $hotel; @@ -41,14 +41,14 @@ public function testIssue() $hotel->bookings[] = $booking1; $hotel->bookings[] = $booking2; - $this->_em->persist($booking1); - $this->_em->persist($booking2); - $this->_em->flush(); + $this->em->persist($booking1); + $this->em->persist($booking2); + $this->em->flush(); - $this->_em->remove($hotel); - $this->_em->flush(); + $this->em->remove($hotel); + $this->em->flush(); - self::assertEmpty($this->_em->getRepository(DDC1181Booking::class)->findAll()); + self::assertEmpty($this->em->getRepository(DDC1181Booking::class)->findAll()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1193Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1193Test.php index 9cf28ed4e12..6c91ac05974 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1193Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1193Test.php @@ -9,12 +9,12 @@ class DDC1193Test extends OrmFunctionalTestCase protected function setUp() { parent::setUp(); - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); - $this->_schemaTool->createSchema( + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1193Company::class), - $this->_em->getClassMetadata(DDC1193Person::class), - $this->_em->getClassMetadata(DDC1193Account::class) + $this->em->getClassMetadata(DDC1193Company::class), + $this->em->getClassMetadata(DDC1193Person::class), + $this->em->getClassMetadata(DDC1193Account::class) ] ); } @@ -33,24 +33,24 @@ public function testIssue() $company->member = $person; - $this->_em->persist($company); + $this->em->persist($company); - $this->_em->flush(); + $this->em->flush(); $companyId = $company->id; $accountId = $account->id; - $this->_em->clear(); + $this->em->clear(); - $company = $this->_em->find(get_class($company), $companyId); + $company = $this->em->find(get_class($company), $companyId); - self::assertTrue($this->_em->getUnitOfWork()->isInIdentityMap($company), "Company is in identity map."); + self::assertTrue($this->em->getUnitOfWork()->isInIdentityMap($company), "Company is in identity map."); self::assertFalse($company->member->__isInitialized__, "Pre-Condition"); - self::assertTrue($this->_em->getUnitOfWork()->isInIdentityMap($company->member), "Member is in identity map."); + self::assertTrue($this->em->getUnitOfWork()->isInIdentityMap($company->member), "Member is in identity map."); - $this->_em->remove($company); - $this->_em->flush(); + $this->em->remove($company); + $this->em->flush(); - self::assertEquals(count($this->_em->getRepository(get_class($account))->findAll()), 0); + self::assertEquals(count($this->em->getRepository(get_class($account))->findAll()), 0); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1209Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1209Test.php index 6c54da296be..04255c788af 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1209Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1209Test.php @@ -10,11 +10,11 @@ protected function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1209_1::class), - $this->_em->getClassMetadata(DDC1209_2::class), - $this->_em->getClassMetadata(DDC1209_3::class) + $this->em->getClassMetadata(DDC1209_1::class), + $this->em->getClassMetadata(DDC1209_2::class), + $this->em->getClassMetadata(DDC1209_3::class) ] ); } catch(\Exception $e) { @@ -28,10 +28,10 @@ public function testIdentifierCanHaveCustomType() { $entity = new DDC1209_3(); - $this->_em->persist($entity); - $this->_em->flush(); + $this->em->persist($entity); + $this->em->flush(); - self::assertSame($entity, $this->_em->find(DDC1209_3::class, $entity->date)); + self::assertSame($entity, $this->em->find(DDC1209_3::class, $entity->date)); } /** @@ -41,17 +41,17 @@ public function testCompositeIdentifierCanHaveCustomType() { $future1 = new DDC1209_1(); - $this->_em->persist($future1); - $this->_em->flush(); + $this->em->persist($future1); + $this->em->flush(); $future2 = new DDC1209_2($future1); - $this->_em->persist($future2); - $this->_em->flush(); + $this->em->persist($future2); + $this->em->flush(); self::assertSame( $future2, - $this->_em->find( + $this->em->find( DDC1209_2::class, [ 'future1' => $future1, diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1225Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1225Test.php index 99d7a0138e8..d43404ede9e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1225Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1225Test.php @@ -11,10 +11,10 @@ public function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1225_TestEntity1::class), - $this->_em->getClassMetadata(DDC1225_TestEntity2::class), + $this->em->getClassMetadata(DDC1225_TestEntity1::class), + $this->em->getClassMetadata(DDC1225_TestEntity2::class), ] ); } catch(\PDOException $e) { @@ -24,7 +24,7 @@ public function setUp() public function testIssue() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->from(DDC1225_TestEntity1::class, 'te1') ->select('te1') ->where('te1.testEntity2 = ?1') diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1228Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1228Test.php index ebfbd0b16dc..8cf94179ed6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1228Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1228Test.php @@ -12,10 +12,10 @@ public function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1228User::class), - $this->_em->getClassMetadata(DDC1228Profile::class), + $this->em->getClassMetadata(DDC1228User::class), + $this->em->getClassMetadata(DDC1228Profile::class), ] ); } catch(\Exception $e) { @@ -30,24 +30,24 @@ public function testOneToOnePersist() $profile->name = "Foo"; $user->profile = $profile; - $this->_em->persist($user); - $this->_em->persist($profile); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->persist($profile); + $this->em->flush(); + $this->em->clear(); - $user = $this->_em->find(DDC1228User::class, $user->id); + $user = $this->em->find(DDC1228User::class, $user->id); self::assertFalse($user->getProfile()->__isInitialized__, "Proxy is not initialized"); $user->getProfile()->setName("Bar"); self::assertTrue($user->getProfile()->__isInitialized__, "Proxy is not initialized"); self::assertEquals("Bar", $user->getProfile()->getName()); - self::assertEquals(["id" => 1, "name" => "Foo"], $this->_em->getUnitOfWork()->getOriginalEntityData($user->getProfile())); + self::assertEquals(["id" => 1, "name" => "Foo"], $this->em->getUnitOfWork()->getOriginalEntityData($user->getProfile())); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $user = $this->_em->find(DDC1228User::class, $user->id); + $user = $this->em->find(DDC1228User::class, $user->id); self::assertEquals("Bar", $user->getProfile()->getName()); } @@ -58,19 +58,19 @@ public function testRefresh() $profile->name = "Foo"; $user->profile = $profile; - $this->_em->persist($user); - $this->_em->persist($profile); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->persist($profile); + $this->em->flush(); + $this->em->clear(); - $user = $this->_em->getReference(DDC1228User::class, $user->id); + $user = $this->em->getReference(DDC1228User::class, $user->id); - $this->_em->refresh($user); + $this->em->refresh($user); $user->name = "Baz"; - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $user = $this->_em->find(DDC1228User::class, $user->id); + $user = $this->em->find(DDC1228User::class, $user->id); self::assertEquals("Baz", $user->name); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1238Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1238Test.php index 450996179b8..057aa5e35c2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1238Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1238Test.php @@ -11,9 +11,9 @@ public function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1238User::class), + $this->em->getClassMetadata(DDC1238User::class), ] ); } catch(\Exception $e) { @@ -26,15 +26,15 @@ public function testIssue() $user = new DDC1238User; $user->setName("test"); - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); $userId = $user->getId(); - $this->_em->clear(); + $this->em->clear(); - $user = $this->_em->getReference(DDC1238User::class, $userId); - $this->_em->clear(); + $user = $this->em->getReference(DDC1238User::class, $userId); + $this->em->clear(); $userId2 = $user->getId(); self::assertEquals($userId, $userId2, "This proxy can still be initialized."); @@ -45,19 +45,19 @@ public function testIssueProxyClear() $user = new DDC1238User; $user->setName("test"); - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); // force proxy load, getId() doesn't work anymore $user->getName(); $userId = $user->getId(); - $this->_em->clear(); + $this->em->clear(); - $user = $this->_em->getReference(DDC1238User::class, $userId); - $this->_em->clear(); + $user = $this->em->getReference(DDC1238User::class, $userId); + $this->em->clear(); - $user2 = $this->_em->getReference(DDC1238User::class, $userId); + $user2 = $this->em->getReference(DDC1238User::class, $userId); // force proxy load, getId() doesn't work anymore $user->getName(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1250Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1250Test.php index 3a5c38b1a03..28e776ea81f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1250Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1250Test.php @@ -11,9 +11,9 @@ public function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1250ClientHistory::class), + $this->em->getClassMetadata(DDC1250ClientHistory::class), ] ); } catch(\PDOException $e) { @@ -30,12 +30,12 @@ public function testIssue() $c2->declinedBy = $c1; $c2->declinedClientsHistory= $c1; - $this->_em->persist($c1); - $this->_em->persist($c2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($c1); + $this->em->persist($c2); + $this->em->flush(); + $this->em->clear(); - $history = $this->_em->createQuery('SELECT h FROM ' . __NAMESPACE__ . '\\DDC1250ClientHistory h WHERE h.id = ?1') + $history = $this->em->createQuery('SELECT h FROM ' . __NAMESPACE__ . '\\DDC1250ClientHistory h WHERE h.id = ?1') ->setParameter(1, $c2->id)->getSingleResult(); self::assertInstanceOf(DDC1250ClientHistory::class, $history); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1276Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1276Test.php index 100440a3dfc..d8f3430d73d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1276Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1276Test.php @@ -22,26 +22,26 @@ public function testIssue() $user->name = "Benjamin"; $user->username = "beberlei"; $user->status = "active"; - $this->_em->persist($user); + $this->em->persist($user); for ($i = 0; $i < 2; $i++) { $group = new CmsGroup(); $group->name = "group".$i; $user->groups[] = $group; - $this->_em->persist($group); + $this->em->persist($group); } - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $user = $this->_em->find(CmsUser::class, $user->id); + $user = $this->em->find(CmsUser::class, $user->id); $cloned = clone $user; self::assertSame($user->groups, $cloned->groups); self::assertEquals(2, count($user->groups)); - $this->_em->merge($cloned); + $this->em->merge($cloned); self::assertEquals(2, count($user->groups)); - $this->_em->flush(); + $this->em->flush(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1300Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1300Test.php index 2deb7852fd7..59c9ae6044c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1300Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1300Test.php @@ -10,10 +10,11 @@ class DDC1300Test extends \Doctrine\Tests\OrmFunctionalTestCase public function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1300Foo::class), - $this->_em->getClassMetadata(DDC1300FooLocale::class), + $this->em->getClassMetadata(DDC1300Foo::class), + $this->em->getClassMetadata(DDC1300FooLocale::class), ] ); } @@ -21,20 +22,20 @@ public function setUp() public function testIssue() { $foo = new DDC1300Foo(); - $foo->_fooReference = "foo"; + $foo->fooReference = "foo"; - $this->_em->persist($foo); - $this->_em->flush(); + $this->em->persist($foo); + $this->em->flush(); $locale = new DDC1300FooLocale(); - $locale->_foo = $foo; - $locale->_locale = "en"; - $locale->_title = "blub"; + $locale->foo = $foo; + $locale->locale = "en"; + $locale->title = "blub"; - $this->_em->persist($locale); - $this->_em->flush(); + $this->em->persist($locale); + $this->em->flush(); - $query = $this->_em->createQuery('SELECT f, fl FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1300Foo f JOIN f._fooLocaleRefFoo fl'); + $query = $this->em->createQuery('SELECT f, fl FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1300Foo f JOIN f.fooLocaleRefFoo fl'); $result = $query->getResult(); self::assertEquals(1, count($result)); @@ -52,19 +53,19 @@ class DDC1300Foo * @GeneratedValue(strategy="AUTO") * @Id */ - public $_fooID = null; + public $fooID = null; /** * @var string fooReference * @Column(name="fooReference", type="string", nullable=true, length=45) */ - public $_fooReference = null; + public $fooReference = null; /** - * @OneToMany(targetEntity="DDC1300FooLocale", mappedBy="_foo", + * @OneToMany(targetEntity="DDC1300FooLocale", mappedBy="foo", * cascade={"persist"}) */ - public $_fooLocaleRefFoo = null; + public $fooLocaleRefFoo = null; /** * Constructor @@ -74,7 +75,7 @@ class DDC1300Foo */ public function __construct($options = null) { - $this->_fooLocaleRefFoo = new \Doctrine\Common\Collections\ArrayCollection(); + $this->fooLocaleRefFoo = new \Doctrine\Common\Collections\ArrayCollection(); } } @@ -90,19 +91,19 @@ class DDC1300FooLocale * @JoinColumn(name="fooID", referencedColumnName="fooID") * @Id */ - public $_foo = null; + public $foo = null; /** * @var string locale * @Column(name="locale", type="string", nullable=false, length=5) * @Id */ - public $_locale = null; + public $locale = null; /** * @var string title * @Column(name="title", type="string", nullable=true, length=150) */ - public $_title = null; + public $title = null; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php index d08a81b6c97..f48b8328b37 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php @@ -19,12 +19,14 @@ class DDC1301Test extends \Doctrine\Tests\OrmFunctionalTestCase public function setUp() { $this->useModelSet('legacy'); + parent::setUp(); - $class = $this->_em->getClassMetadata(Models\Legacy\LegacyUser::class); - $class->associationMappings['_articles']['fetch'] = FetchMode::EXTRA_LAZY; - $class->associationMappings['_references']['fetch'] = FetchMode::EXTRA_LAZY; - $class->associationMappings['_cars']['fetch'] = FetchMode::EXTRA_LAZY; + $class = $this->em->getClassMetadata(Models\Legacy\LegacyUser::class); + + $class->associationMappings['articles']['fetch'] = FetchMode::EXTRA_LAZY; + $class->associationMappings['references']['fetch'] = FetchMode::EXTRA_LAZY; + $class->associationMappings['cars']['fetch'] = FetchMode::EXTRA_LAZY; $this->loadFixture(); } @@ -33,50 +35,51 @@ public function tearDown() { parent::tearDown(); - $class = $this->_em->getClassMetadata(Models\Legacy\LegacyUser::class); - $class->associationMappings['_articles']['fetch'] = FetchMode::LAZY; - $class->associationMappings['_references']['fetch'] = FetchMode::LAZY; - $class->associationMappings['_cars']['fetch'] = FetchMode::LAZY; + $class = $this->em->getClassMetadata(Models\Legacy\LegacyUser::class); + + $class->associationMappings['articles']['fetch'] = FetchMode::LAZY; + $class->associationMappings['references']['fetch'] = FetchMode::LAZY; + $class->associationMappings['cars']['fetch'] = FetchMode::LAZY; } public function testCountNotInitializesLegacyCollection() { - $user = $this->_em->find(Models\Legacy\LegacyUser::class, $this->userId); + $user = $this->em->find(Models\Legacy\LegacyUser::class, $this->userId); $queryCount = $this->getCurrentQueryCount(); - self::assertFalse($user->_articles->isInitialized()); - self::assertEquals(2, count($user->_articles)); - self::assertFalse($user->_articles->isInitialized()); + self::assertFalse($user->articles->isInitialized()); + self::assertEquals(2, count($user->articles)); + self::assertFalse($user->articles->isInitialized()); - foreach ($user->_articles AS $article) { } + foreach ($user->articles AS $article) { } self::assertEquals($queryCount + 2, $this->getCurrentQueryCount(), "Expecting two queries to be fired for count, then iteration."); } public function testCountNotInitializesLegacyCollectionWithForeignIdentifier() { - $user = $this->_em->find(Models\Legacy\LegacyUser::class, $this->userId); + $user = $this->em->find(Models\Legacy\LegacyUser::class, $this->userId); $queryCount = $this->getCurrentQueryCount(); - self::assertFalse($user->_references->isInitialized()); - self::assertEquals(2, count($user->_references)); - self::assertFalse($user->_references->isInitialized()); + self::assertFalse($user->references->isInitialized()); + self::assertEquals(2, count($user->references)); + self::assertFalse($user->references->isInitialized()); - foreach ($user->_references AS $reference) { } + foreach ($user->references AS $reference) { } self::assertEquals($queryCount + 2, $this->getCurrentQueryCount(), "Expecting two queries to be fired for count, then iteration."); } public function testCountNotInitializesLegacyManyToManyCollection() { - $user = $this->_em->find(Models\Legacy\LegacyUser::class, $this->userId); + $user = $this->em->find(Models\Legacy\LegacyUser::class, $this->userId); $queryCount = $this->getCurrentQueryCount(); - self::assertFalse($user->_cars->isInitialized()); - self::assertEquals(3, count($user->_cars)); - self::assertFalse($user->_cars->isInitialized()); + self::assertFalse($user->cars->isInitialized()); + self::assertEquals(3, count($user->cars)); + self::assertFalse($user->cars->isInitialized()); - foreach ($user->_cars AS $reference) { } + foreach ($user->cars AS $reference) { } self::assertEquals($queryCount + 2, $this->getCurrentQueryCount(), "Expecting two queries to be fired for count, then iteration."); } @@ -84,45 +87,45 @@ public function testCountNotInitializesLegacyManyToManyCollection() public function loadFixture() { $user1 = new Models\Legacy\LegacyUser(); - $user1->_username = "beberlei"; - $user1->_name = "Benjamin"; - $user1->_status = "active"; + $user1->username = "beberlei"; + $user1->name = "Benjamin"; + $user1->status = "active"; $user2 = new Models\Legacy\LegacyUser(); - $user2->_username = "jwage"; - $user2->_name = "Jonathan"; - $user2->_status = "active"; + $user2->username = "jwage"; + $user2->name = "Jonathan"; + $user2->status = "active"; $user3 = new Models\Legacy\LegacyUser(); - $user3->_username = "romanb"; - $user3->_name = "Roman"; - $user3->_status = "active"; + $user3->username = "romanb"; + $user3->name = "Roman"; + $user3->status = "active"; - $this->_em->persist($user1); - $this->_em->persist($user2); - $this->_em->persist($user3); + $this->em->persist($user1); + $this->em->persist($user2); + $this->em->persist($user3); $article1 = new Models\Legacy\LegacyArticle(); - $article1->_topic = "Test"; - $article1->_text = "Test"; + $article1->topic = "Test"; + $article1->text = "Test"; $article1->setAuthor($user1); $article2 = new Models\Legacy\LegacyArticle(); - $article2->_topic = "Test"; - $article2->_text = "Test"; + $article2->topic = "Test"; + $article2->text = "Test"; $article2->setAuthor($user1); - $this->_em->persist($article1); - $this->_em->persist($article2); + $this->em->persist($article1); + $this->em->persist($article2); $car1 = new Models\Legacy\LegacyCar(); - $car1->_description = "Test1"; + $car1->description = "Test1"; $car2 = new Models\Legacy\LegacyCar(); - $car2->_description = "Test2"; + $car2->description = "Test2"; $car3 = new Models\Legacy\LegacyCar(); - $car3->_description = "Test3"; + $car3->description = "Test3"; $user1->addCar($car1); $user1->addCar($car2); @@ -131,20 +134,20 @@ public function loadFixture() $user2->addCar($car1); $user3->addCar($car1); - $this->_em->persist($car1); - $this->_em->persist($car2); - $this->_em->persist($car3); + $this->em->persist($car1); + $this->em->persist($car2); + $this->em->persist($car3); - $this->_em->flush(); + $this->em->flush(); $detail1 = new Models\Legacy\LegacyUserReference($user1, $user2, "foo"); $detail2 = new Models\Legacy\LegacyUserReference($user1, $user3, "bar"); - $this->_em->persist($detail1); - $this->_em->persist($detail2); + $this->em->persist($detail1); + $this->em->persist($detail2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); $this->userId = $user1->getId(); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1306Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1306Test.php index 03c761a959c..5b400e21466 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1306Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1306Test.php @@ -24,8 +24,8 @@ public function testIssue() $phone->phonenumber = "1234"; // puts user and phone into commit order calculator - $this->_em->persist($phone); - $this->_em->flush(); + $this->em->persist($phone); + $this->em->flush(); $address = new CmsAddress(); $address->city = "bonn"; @@ -33,7 +33,7 @@ public function testIssue() $address->street = "somestreet!"; $address->zip = 12345; - $this->_em->persist($address); + $this->em->persist($address); $user = new CmsUser(); $user->username = "beberlei"; @@ -42,14 +42,14 @@ public function testIssue() $user->setAddress($address); // puts user and address into commit order calculator, but does not calculate user dependencies new - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); - $this->_em->remove($user->getAddress()); - $this->_em->remove($user); - $this->_em->flush(); + $this->em->remove($user->getAddress()); + $this->em->remove($user); + $this->em->flush(); - self::assertEmpty($this->_em->getRepository(CmsAddress::class)->findAll()); - self::assertEmpty($this->_em->getRepository(CmsUser::class)->findAll()); + self::assertEmpty($this->em->getRepository(CmsAddress::class)->findAll()); + self::assertEmpty($this->em->getRepository(CmsUser::class)->findAll()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1335Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1335Test.php index 7d0cb956fcd..6817a9341ce 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1335Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1335Test.php @@ -11,10 +11,10 @@ protected function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1335User::class), - $this->_em->getClassMetadata(DDC1335Phone::class), + $this->em->getClassMetadata(DDC1335User::class), + $this->em->getClassMetadata(DDC1335Phone::class), ] ); $this->loadFixture(); @@ -26,7 +26,7 @@ protected function setUp() public function testDql() { $dql = 'SELECT u FROM ' . __NAMESPACE__ . '\DDC1335User u INDEX BY u.id'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult(); self::assertEquals(sizeof($result), 3); @@ -35,7 +35,7 @@ public function testDql() self::assertArrayHasKey(3, $result); $dql = 'SELECT u, p FROM '.__NAMESPACE__ . '\DDC1335User u INDEX BY u.email INNER JOIN u.phones p INDEX BY p.id'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $result = $query->getResult(); self::assertEquals(sizeof($result), 3); @@ -66,7 +66,7 @@ public function testDql() public function testTicket() { - $builder = $this->_em->createQueryBuilder(); + $builder = $this->em->createQueryBuilder(); $builder->select('u')->from(DDC1335User::class, 'u', 'u.id'); $dql = $builder->getQuery()->getDQL(); @@ -81,7 +81,7 @@ public function testTicket() public function testIndexByUnique() { - $builder = $this->_em->createQueryBuilder(); + $builder = $this->em->createQueryBuilder(); $builder->select('u')->from(DDC1335User::class, 'u', 'u.email'); $dql = $builder->getQuery()->getDQL(); @@ -96,7 +96,7 @@ public function testIndexByUnique() public function testIndexWithJoin() { - $builder = $this->_em->createQueryBuilder(); + $builder = $this->em->createQueryBuilder(); $builder->select('u','p') ->from(DDC1335User::class, 'u', 'u.email') ->join('u.phones', 'p', null, null, 'p.id'); @@ -138,11 +138,11 @@ private function loadFixture() $u2 = new DDC1335User("bar@bar.com", "Bar",$p2); $u3 = new DDC1335User("foobar@foobar.com", "Foo Bar",$p3); - $this->_em->persist($u1); - $this->_em->persist($u2); - $this->_em->persist($u3); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($u1); + $this->em->persist($u2); + $this->em->persist($u3); + $this->em->flush(); + $this->em->clear(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1360Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1360Test.php index 7f9a6478335..883f9efe900 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1360Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1360Test.php @@ -11,13 +11,13 @@ class DDC1360Test extends OrmFunctionalTestCase { public function testSchemaDoubleQuotedCreate() { - if ($this->_em->getConnection()->getDatabasePlatform()->getName() != "postgresql") { + if ($this->em->getConnection()->getDatabasePlatform()->getName() != "postgresql") { $this->markTestSkipped("PostgreSQL only test."); } - $sql = $this->_schemaTool->getCreateSchemaSql( + $sql = $this->schemaTool->getCreateSchemaSql( [ - $this->_em->getClassMetadata(DDC1360DoubleQuote::class) + $this->em->getClassMetadata(DDC1360DoubleQuote::class) ] ); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1383Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1383Test.php index 7a13d7ac9bc..94647d239ea 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1383Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1383Test.php @@ -12,10 +12,10 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1383AbstractEntity::class), - $this->_em->getClassMetadata(DDC1383Entity::class), + $this->em->getClassMetadata(DDC1383AbstractEntity::class), + $this->em->getClassMetadata(DDC1383Entity::class), ] ); } catch(\Exception $ignored) {} @@ -28,16 +28,16 @@ public function testFailingCase() $child->setReference($parent); - $this->_em->persist($parent); - $this->_em->persist($child); + $this->em->persist($parent); + $this->em->persist($child); $id = $child->getId(); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); // Try merging the parent entity - $child = $this->_em->merge($child); + $child = $this->em->merge($child); $parent = $child->getReference(); // Parent is not instance of the abstract class diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1392Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1392Test.php index 6dee7affe35..1d11057d486 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1392Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1392Test.php @@ -14,10 +14,10 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1392File::class), - $this->_em->getClassMetadata(DDC1392Picture::class), + $this->em->getClassMetadata(DDC1392File::class), + $this->em->getClassMetadata(DDC1392Picture::class), ] ); } catch (\Exception $ignored) { @@ -31,7 +31,7 @@ public function testFailingCase() $picture = new DDC1392Picture; $picture->setFile($file); - $em = $this->_em; + $em = $this->em; $em->persist($picture); $em->flush(); $em->clear(); @@ -57,7 +57,7 @@ public function testFailingCase() $em->flush(); - $q = $this->_em->createQuery("SELECT COUNT(e) FROM " . __NAMESPACE__ . '\DDC1392File e'); + $q = $this->em->createQuery("SELECT COUNT(e) FROM " . __NAMESPACE__ . '\DDC1392File e'); $result = $q->getSingleScalarResult(); self::assertEquals(1, $result); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1400Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1400Test.php index 1248fe8412d..a3c10079f5c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1400Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1400Test.php @@ -12,11 +12,11 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1400Article::class), - $this->_em->getClassMetadata(DDC1400User::class), - $this->_em->getClassMetadata(DDC1400UserState::class), + $this->em->getClassMetadata(DDC1400Article::class), + $this->em->getClassMetadata(DDC1400User::class), + $this->em->getClassMetadata(DDC1400UserState::class), ] ); } catch (\Exception $ignored) { @@ -29,10 +29,10 @@ public function testFailingCase() $user1 = new DDC1400User; $user2 = new DDC1400User; - $this->_em->persist($article); - $this->_em->persist($user1); - $this->_em->persist($user2); - $this->_em->flush(); + $this->em->persist($article); + $this->em->persist($user1); + $this->em->persist($user2); + $this->em->flush(); $userState1 = new DDC1400UserState; $userState1->article = $article; @@ -46,20 +46,20 @@ public function testFailingCase() $userState2->user = $user2; $userState2->userId = $user2->id; - $this->_em->persist($userState1); - $this->_em->persist($userState2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($userState1); + $this->em->persist($userState2); + $this->em->flush(); + $this->em->clear(); - $user1 = $this->_em->getReference(DDC1400User::class, $user1->id); + $user1 = $this->em->getReference(DDC1400User::class, $user1->id); - $this->_em->createQuery('SELECT a, s FROM ' . DDC1400Article::class . ' a JOIN a.userStates s WITH s.user = :activeUser') + $this->em->createQuery('SELECT a, s FROM ' . DDC1400Article::class . ' a JOIN a.userStates s WITH s.user = :activeUser') ->setParameter('activeUser', $user1) ->getResult(); $queryCount = $this->getCurrentQueryCount(); - $this->_em->flush(); + $this->em->flush(); self::assertSame($queryCount, $this->getCurrentQueryCount(), 'No query should be executed during flush in this case'); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1404Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1404Test.php index 953591e9626..cefee9e8ca6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1404Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1404Test.php @@ -13,10 +13,10 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1404ParentEntity::class), - $this->_em->getClassMetadata(DDC1404ChildEntity::class), + $this->em->getClassMetadata(DDC1404ParentEntity::class), + $this->em->getClassMetadata(DDC1404ChildEntity::class), ] ); @@ -28,7 +28,7 @@ protected function setUp() public function testTicket() { - $repository = $this->_em->getRepository(DDC1404ChildEntity::class); + $repository = $this->em->getRepository(DDC1404ChildEntity::class); $queryAll = $repository->createNamedQuery('all'); $queryFirst = $repository->createNamedQuery('first'); $querySecond = $repository->createNamedQuery('second'); @@ -50,10 +50,10 @@ public function loadFixtures() $c1 = new DDC1404ChildEntity("ChildEntity 1"); $c2 = new DDC1404ChildEntity("ChildEntity 2"); - $this->_em->persist($c1); - $this->_em->persist($c2); + $this->em->persist($c1); + $this->em->persist($c2); - $this->_em->flush(); + $this->em->flush(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC142Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC142Test.php index 27dcb38f133..3e39dbf4903 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC142Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC142Test.php @@ -18,12 +18,12 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(User::class), - $this->_em->getClassMetadata(Group::class), - $this->_em->getClassMetadata(Phone::class), - $this->_em->getClassMetadata(Address::class), + $this->em->getClassMetadata(User::class), + $this->em->getClassMetadata(Group::class), + $this->em->getClassMetadata(Phone::class), + $this->em->getClassMetadata(Address::class), ] ); } catch(\Exception $e) { @@ -35,26 +35,26 @@ public function testCreateRetrieveUpdateDelete() $user = new User; $user->name = 'FabioBatSilva'; - $this->_em->persist($user); + $this->em->persist($user); $address = new Address; $address->zip = '12345'; - $this->_em->persist($address); + $this->em->persist($address); - $this->_em->flush(); + $this->em->flush(); - $addressRef = $this->_em->getReference(Address::class, $address->getId()); + $addressRef = $this->em->getReference(Address::class, $address->getId()); $user->setAddress($addressRef); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); $id = $user->id; self::assertNotNull($id); - $user = $this->_em->find(User::class, $id); + $user = $this->em->find(User::class, $id); $address = $user->getAddress(); self::assertInstanceOf(User::class, $user); @@ -67,23 +67,23 @@ public function testCreateRetrieveUpdateDelete() $user->name = 'FabioBatSilva1'; $user->address = null; - $this->_em->persist($user); - $this->_em->remove($address); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->remove($address); + $this->em->flush(); + $this->em->clear(); - $user = $this->_em->find(User::class, $id); + $user = $this->em->find(User::class, $id); self::assertInstanceOf(User::class, $user); self::assertNull($user->getAddress()); self::assertEquals('FabioBatSilva1', $user->name); - $this->_em->remove($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->remove($user); + $this->em->flush(); + $this->em->clear(); - self::assertNull($this->_em->find(User::class, $id)); + self::assertNull($this->em->find(User::class, $id)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1430Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1430Test.php index b623264d9bb..aa96e4c5168 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1430Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1430Test.php @@ -13,10 +13,10 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1430Order::class), - $this->_em->getClassMetadata(DDC1430OrderProduct::class), + $this->em->getClassMetadata(DDC1430Order::class), + $this->em->getClassMetadata(DDC1430OrderProduct::class), ] ); $this->loadFixtures(); @@ -27,7 +27,7 @@ protected function setUp() public function testOrderByFields() { - $repository = $this->_em->getRepository(DDC1430Order::class); + $repository = $this->em->getRepository(DDC1430Order::class); $builder = $repository->createQueryBuilder('o'); $query = $builder->select('o.id, o.date, COUNT(p.id) AS p_count') ->leftJoin('o.products', 'p') @@ -64,7 +64,7 @@ public function testOrderByFields() public function testOrderByAllObjectFields() { - $repository = $this->_em->getRepository(DDC1430Order::class); + $repository = $this->em->getRepository(DDC1430Order::class); $builder = $repository->createQueryBuilder('o'); $query = $builder->select('o, COUNT(p.id) AS p_count') ->leftJoin('o.products', 'p') @@ -99,7 +99,7 @@ public function testOrderByAllObjectFields() public function testTicket() { - $repository = $this->_em->getRepository(DDC1430Order::class); + $repository = $this->em->getRepository(DDC1430Order::class); $builder = $repository->createQueryBuilder('o'); $query = $builder->select('o, COUNT(p.id) AS p_count') ->leftJoin('o.products', 'p') @@ -144,10 +144,10 @@ public function loadFixtures() $o2->addProduct(new DDC1430OrderProduct(2.2)); $o2->addProduct(new DDC1430OrderProduct(2.3)); - $this->_em->persist($o1); - $this->_em->persist($o2); + $this->em->persist($o1); + $this->em->persist($o2); - $this->_em->flush(); + $this->em->flush(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1436Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1436Test.php index b7fd4f13e13..564f9d5df15 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1436Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1436Test.php @@ -12,9 +12,9 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1436Page::class), + $this->em->getClassMetadata(DDC1436Page::class), ] ); } catch (\Exception $ignored) { @@ -28,16 +28,16 @@ public function testIdentityMap() for ($i = 0; $i < 3; $i++) { $page = new DDC1436Page(); $page->setParent($parent); - $this->_em->persist($page); + $this->em->persist($page); $parent = $page; } - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); $id = $parent->getId(); // step 1 - $page = $this->_em + $page = $this->em ->createQuery('SELECT p, parent FROM ' . __NAMESPACE__ . '\DDC1436Page p LEFT JOIN p.parent parent WHERE p.id = :id') ->setParameter('id', $id) ->getOneOrNullResult(); @@ -45,7 +45,7 @@ public function testIdentityMap() self::assertInstanceOf(DDC1436Page::class, $page); // step 2 - $page = $this->_em->find(DDC1436Page::class, $id); + $page = $this->em->find(DDC1436Page::class, $id); self::assertInstanceOf(DDC1436Page::class, $page); self::assertInstanceOf(DDC1436Page::class, $page->getParent()); self::assertInstanceOf(DDC1436Page::class, $page->getParent()->getParent()); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC144Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC144Test.php index 3866c588db0..3009ce66076 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC144Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC144Test.php @@ -6,13 +6,14 @@ class DDC144Test extends OrmFunctionalTestCase { - protected function setUp() { + protected function setUp() + { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC144FlowElement::class), - $this->_em->getClassMetadata(DDC144Operand::class), + $this->em->getClassMetadata(DDC144FlowElement::class), + $this->em->getClassMetadata(DDC144Operand::class), ] ); @@ -27,10 +28,10 @@ public function testIssue() $operand->property = 'flowValue'; $operand->operandProperty = 'operandValue'; - $this->_em->persist($operand); - $this->_em->flush(); + $this->em->persist($operand); + $this->em->flush(); - self::assertSame($operand, $this->_em->find(DDC144Operand::class, $operand->id)); + self::assertSame($operand, $this->em->find(DDC144Operand::class, $operand->id)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1452Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1452Test.php index 574ca4cf693..6528ca52ac2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1452Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1452Test.php @@ -18,10 +18,10 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1452EntityA::class), - $this->_em->getClassMetadata(DDC1452EntityB::class), + $this->em->getClassMetadata(DDC1452EntityA::class), + $this->em->getClassMetadata(DDC1452EntityB::class), ] ); } catch (\Exception $ignored) { @@ -40,14 +40,14 @@ public function testIssue() $b->entityAFrom = $a1; $b->entityATo = $a2; - $this->_em->persist($a1); - $this->_em->persist($a2); - $this->_em->persist($b); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($a1); + $this->em->persist($a2); + $this->em->persist($b); + $this->em->flush(); + $this->em->clear(); $dql = "SELECT a, b, ba FROM " . __NAMESPACE__ . "\DDC1452EntityA AS a LEFT JOIN a.entitiesB AS b LEFT JOIN b.entityATo AS ba"; - $results = $this->_em->createQuery($dql)->setMaxResults(1)->getResult(); + $results = $this->em->createQuery($dql)->setMaxResults(1)->getResult(); self::assertSame($results[0], $results[0]->entitiesB[0]->entityAFrom); self::assertFalse( $results[0]->entitiesB[0]->entityATo instanceof Proxy); @@ -69,19 +69,19 @@ public function testFetchJoinOneToOneFromInverse() $user->address = $address; $address->user = $user; - $this->_em->persist($address); - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($address); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); $dql = "SELECT a, u FROM Doctrine\Tests\Models\CMS\CmsAddress a INNER JOIN a.user u"; - $data = $this->_em->createQuery($dql)->getResult(); - $this->_em->clear(); + $data = $this->em->createQuery($dql)->getResult(); + $this->em->clear(); self::assertFalse($data[0]->user instanceof Proxy); $dql = "SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.address a"; - $data = $this->_em->createQuery($dql)->getResult(); + $data = $this->em->createQuery($dql)->getResult(); self::assertFalse($data[0]->address instanceof Proxy); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1454Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1454Test.php index 86aba511372..f201977815a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1454Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1454Test.php @@ -14,10 +14,10 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1454File::class), - $this->_em->getClassMetadata(DDC1454Picture::class), + $this->em->getClassMetadata(DDC1454File::class), + $this->em->getClassMetadata(DDC1454Picture::class), ] ); } catch (\Exception $ignored) { @@ -28,7 +28,7 @@ public function testFailingCase() { $pic = new DDC1454Picture(); - self::assertSame(UnitOfWork::STATE_NEW, $this->_em->getUnitOfWork()->getEntityState($pic)); + self::assertSame(UnitOfWork::STATE_NEW, $this->em->getUnitOfWork()->getEntityState($pic)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1458Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1458Test.php index 03ecc1f3245..c042ffecc29 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1458Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1458Test.php @@ -9,10 +9,10 @@ class DDC1258Test extends OrmFunctionalTestCase public function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(TestEntity::class), - $this->_em->getClassMetadata(TestAdditionalEntity::class) + $this->em->getClassMetadata(TestEntity::class), + $this->em->getClassMetadata(TestAdditionalEntity::class) ] ); } @@ -22,14 +22,14 @@ public function testIssue() $testEntity = new TestEntity(); $testEntity->setValue(3); $testEntity->setAdditional(new TestAdditionalEntity()); - $this->_em->persist($testEntity); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($testEntity); + $this->em->flush(); + $this->em->clear(); // So here the value is 3 self::assertEquals(3, $testEntity->getValue()); - $test = $this->_em->getRepository(TestEntity::class)->find(1); + $test = $this->em->getRepository(TestEntity::class)->find(1); // New value is set $test->setValue(5); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1461Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1461Test.php index ac5230fae1b..d12d6e0e9a7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1461Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1461Test.php @@ -12,10 +12,10 @@ public function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1461TwitterAccount::class), - $this->_em->getClassMetadata(DDC1461User::class) + $this->em->getClassMetadata(DDC1461TwitterAccount::class), + $this->em->getClassMetadata(DDC1461User::class) ] ); } catch(\Exception $e) { @@ -26,19 +26,19 @@ public function setUp() public function testChangeDetectionDeferredExplicit() { $user = new DDC1461User; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); - self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($user, \Doctrine\ORM\UnitOfWork::STATE_NEW), "Entity should be managed."); - self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_MANAGED, $this->_em->getUnitOfWork()->getEntityState($user), "Entity should be managed."); + self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_MANAGED, $this->em->getUnitOfWork()->getEntityState($user, \Doctrine\ORM\UnitOfWork::STATE_NEW), "Entity should be managed."); + self::assertEquals(\Doctrine\ORM\UnitOfWork::STATE_MANAGED, $this->em->getUnitOfWork()->getEntityState($user), "Entity should be managed."); $acc = new DDC1461TwitterAccount; $user->twitterAccount = $acc; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); - $user = $this->_em->find(get_class($user), $user->id); + $user = $this->em->find(get_class($user), $user->id); self::assertNotNull($user->twitterAccount); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php index 50c6347b540..de131e86eb3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php @@ -13,11 +13,11 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1509AbstractFile::class), - $this->_em->getClassMetadata(DDC1509File::class), - $this->_em->getClassMetadata(DDC1509Picture::class), + $this->em->getClassMetadata(DDC1509AbstractFile::class), + $this->em->getClassMetadata(DDC1509File::class), + $this->em->getClassMetadata(DDC1509Picture::class), ] ); } catch (\Exception $ignored) { @@ -36,7 +36,7 @@ public function testFailingCase() /* @var $em \Doctrine\ORM\EntityManager */ - $em = $this->_em; + $em = $this->em; $em->persist($picture); $em->flush(); $em->clear(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1514Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1514Test.php index 1de21f1f7eb..1a861ad9e52 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1514Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1514Test.php @@ -14,11 +14,11 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1514EntityA::class), - $this->_em->getClassMetadata(DDC1514EntityB::class), - $this->_em->getClassMetadata(DDC1514EntityC::class), + $this->em->getClassMetadata(DDC1514EntityA::class), + $this->em->getClassMetadata(DDC1514EntityB::class), + $this->em->getClassMetadata(DDC1514EntityC::class), ] ); } catch (\Exception $ignored) { @@ -45,16 +45,16 @@ public function testIssue() $c->title = "baz"; $a2->entityC = $c; - $this->_em->persist($a1); - $this->_em->persist($a2); - $this->_em->persist($b1); - $this->_em->persist($b2); - $this->_em->persist($c); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($a1); + $this->em->persist($a2); + $this->em->persist($b1); + $this->em->persist($b2); + $this->em->persist($c); + $this->em->flush(); + $this->em->clear(); $dql = "SELECT a, b, ba, c FROM " . __NAMESPACE__ . "\DDC1514EntityA AS a LEFT JOIN a.entitiesB AS b LEFT JOIN b.entityATo AS ba LEFT JOIN a.entityC AS c ORDER BY a.title"; - $results = $this->_em->createQuery($dql)->getResult(); + $results = $this->em->createQuery($dql)->getResult(); self::assertEquals($a1->id, $results[0]->id); self::assertNull($results[0]->entityC); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1515Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1515Test.php index cb04206955d..8572a7132e3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1515Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1515Test.php @@ -11,10 +11,10 @@ class DDC1515Test extends \Doctrine\Tests\OrmFunctionalTestCase public function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1515Foo::class), - $this->_em->getClassMetadata(DDC1515Bar::class), + $this->em->getClassMetadata(DDC1515Foo::class), + $this->em->getClassMetadata(DDC1515Bar::class), ] ); } @@ -22,16 +22,16 @@ public function setUp() public function testIssue() { $bar = new DDC1515Bar(); - $this->_em->persist($bar); - $this->_em->flush(); + $this->em->persist($bar); + $this->em->flush(); $foo = new DDC1515Foo(); $foo->bar = $bar; - $this->_em->persist($foo); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($foo); + $this->em->flush(); + $this->em->clear(); - $bar = $this->_em->find(DDC1515Bar::class, $bar->id); + $bar = $this->em->find(DDC1515Bar::class, $bar->id); self::assertInstanceOf(DDC1515Foo::class, $bar->foo); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1526Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1526Test.php index 32a5f58c7ae..c26542085a4 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1526Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1526Test.php @@ -10,9 +10,9 @@ class DDC1526Test extends \Doctrine\Tests\OrmFunctionalTestCase public function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1526Menu::class), + $this->em->getClassMetadata(DDC1526Menu::class), ] ); } @@ -27,17 +27,17 @@ public function testIssue() $entity->parent = $parents[($i%3)]; } - $this->_em->persist($entity); + $this->em->persist($entity); $parents[$i] = $entity; } - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); $dql = "SELECT m, c FROM " . __NAMESPACE__ . "\DDC1526Menu m LEFT JOIN m.children c"; - $menus = $this->_em->createQuery($dql)->getResult(); + $menus = $this->em->createQuery($dql)->getResult(); // All Children collection now have to be initialized foreach ($menus as $menu) { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1545Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1545Test.php index b0bdbe542e4..bc10234541a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1545Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1545Test.php @@ -42,11 +42,11 @@ private function initDb($link) $article->user = $user; } - $this->_em->persist($article); - $this->_em->persist($user); - $this->_em->persist($user2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($article); + $this->em->persist($user); + $this->em->persist($user2); + $this->em->flush(); + $this->em->clear(); $this->articleId = $article->id; $this->userId = $user->id; @@ -58,16 +58,16 @@ public function testLinkObjects() $this->initDb(false); // don't join association - $article = $this->_em->find(CmsArticle::class, $this->articleId); + $article = $this->em->find(CmsArticle::class, $this->articleId); - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); $article->user = $user; - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $article = $this->_em + $article = $this->em ->createQuery('SELECT a, u FROM Doctrine\Tests\Models\Cms\CmsArticle a LEFT JOIN a.user u WHERE a.id = :id') ->setParameter('id', $this->articleId) ->getOneOrNullResult(); @@ -81,19 +81,19 @@ public function testLinkObjectsWithAssociationLoaded() $this->initDb(false); // join association - $article = $this->_em + $article = $this->em ->createQuery('SELECT a, u FROM Doctrine\Tests\Models\Cms\CmsArticle a LEFT JOIN a.user u WHERE a.id = :id') ->setParameter('id', $this->articleId) ->getOneOrNullResult(); - $user = $this->_em->find(CmsUser::class, $this->userId); + $user = $this->em->find(CmsUser::class, $this->userId); $article->user = $user; - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $article = $this->_em + $article = $this->em ->createQuery('SELECT a, u FROM Doctrine\Tests\Models\Cms\CmsArticle a LEFT JOIN a.user u WHERE a.id = :id') ->setParameter('id', $this->articleId) ->getOneOrNullResult(); @@ -107,14 +107,14 @@ public function testUnlinkObjects() $this->initDb(true); // don't join association - $article = $this->_em->find(CmsArticle::class, $this->articleId); + $article = $this->em->find(CmsArticle::class, $this->articleId); $article->user = null; - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $article = $this->_em + $article = $this->em ->createQuery('SELECT a, u FROM Doctrine\Tests\Models\Cms\CmsArticle a LEFT JOIN a.user u WHERE a.id = :id') ->setParameter('id', $this->articleId) ->getOneOrNullResult(); @@ -127,17 +127,17 @@ public function testUnlinkObjectsWithAssociationLoaded() $this->initDb(true); // join association - $article = $this->_em + $article = $this->em ->createQuery('SELECT a, u FROM Doctrine\Tests\Models\Cms\CmsArticle a LEFT JOIN a.user u WHERE a.id = :id') ->setParameter('id', $this->articleId) ->getOneOrNullResult(); $article->user = null; - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $article = $this->_em + $article = $this->em ->createQuery('SELECT a, u FROM Doctrine\Tests\Models\Cms\CmsArticle a LEFT JOIN a.user u WHERE a.id = :id') ->setParameter('id', $this->articleId) ->getOneOrNullResult(); @@ -150,16 +150,16 @@ public function testChangeLink() $this->initDb(false); // don't join association - $article = $this->_em->find(CmsArticle::class, $this->articleId); + $article = $this->em->find(CmsArticle::class, $this->articleId); - $user2 = $this->_em->find(CmsUser::class, $this->user2Id); + $user2 = $this->em->find(CmsUser::class, $this->user2Id); $article->user = $user2; - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $article = $this->_em + $article = $this->em ->createQuery('SELECT a, u FROM Doctrine\Tests\Models\Cms\CmsArticle a LEFT JOIN a.user u WHERE a.id = :id') ->setParameter('id', $this->articleId) ->getOneOrNullResult(); @@ -173,19 +173,19 @@ public function testChangeLinkWithAssociationLoaded() $this->initDb(false); // join association - $article = $this->_em + $article = $this->em ->createQuery('SELECT a, u FROM Doctrine\Tests\Models\Cms\CmsArticle a LEFT JOIN a.user u WHERE a.id = :id') ->setParameter('id', $this->articleId) ->getOneOrNullResult(); - $user2 = $this->_em->find(CmsUser::class, $this->user2Id); + $user2 = $this->em->find(CmsUser::class, $this->user2Id); $article->user = $user2; - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $article = $this->_em + $article = $this->em ->createQuery('SELECT a, u FROM Doctrine\Tests\Models\Cms\CmsArticle a LEFT JOIN a.user u WHERE a.id = :id') ->setParameter('id', $this->articleId) ->getOneOrNullResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1548Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1548Test.php index 7be8812cde4..caf67d5ad06 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1548Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1548Test.php @@ -10,11 +10,11 @@ class DDC1548Test extends \Doctrine\Tests\OrmFunctionalTestCase public function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1548E1::class), - $this->_em->getClassMetadata(DDC1548E2::class), - $this->_em->getClassMetadata(DDC1548Rel::class), + $this->em->getClassMetadata(DDC1548E1::class), + $this->em->getClassMetadata(DDC1548E2::class), + $this->em->getClassMetadata(DDC1548Rel::class), ] ); } @@ -22,16 +22,16 @@ public function setUp() public function testIssue() { $rel = new DDC1548Rel(); - $this->_em->persist($rel); - $this->_em->flush(); + $this->em->persist($rel); + $this->em->flush(); $e1 = new DDC1548E1(); $e1->rel = $rel; - $this->_em->persist($e1); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($e1); + $this->em->flush(); + $this->em->clear(); - $obt = $this->_em->find(DDC1548Rel::class, $rel->id); + $obt = $this->em->find(DDC1548Rel::class, $rel->id); self::assertNull($obt->e2); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1594Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1594Test.php index 538cb0ca85e..804e38d25f8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1594Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1594Test.php @@ -22,17 +22,17 @@ public function testIssue() $user->username = 'foo'; $user->name = 'foo'; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); $detachedUser = clone $user; $detachedUser->name = 'bar'; $detachedUser->status = 'bar'; - $newUser = $this->_em->getReference(get_class($user), $user->id); + $newUser = $this->em->getReference(get_class($user), $user->id); - $mergedUser = $this->_em->merge($detachedUser); + $mergedUser = $this->em->merge($detachedUser); self::assertNotSame($mergedUser, $detachedUser); self::assertEquals('bar', $detachedUser->getName()); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php index c867ec3a62d..4fce4a7b547 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php @@ -13,13 +13,13 @@ public function setUp() { parent::setUp(); - $this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\DebugStack); + $this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\DebugStack); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1595BaseInheritance::class), - $this->_em->getClassMetadata(DDC1595InheritedEntity1::class), - $this->_em->getClassMetadata(DDC1595InheritedEntity2::class), + $this->em->getClassMetadata(DDC1595BaseInheritance::class), + $this->em->getClassMetadata(DDC1595InheritedEntity1::class), + $this->em->getClassMetadata(DDC1595InheritedEntity2::class), ] ); } @@ -28,12 +28,12 @@ public function testIssue() { $e1 = new DDC1595InheritedEntity1(); - $this->_em->persist($e1); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($e1); + $this->em->flush(); + $this->em->clear(); - $sqlLogger = $this->_em->getConnection()->getConfiguration()->getSQLLogger(); - $repository = $this->_em->getRepository(DDC1595InheritedEntity1::class); + $sqlLogger = $this->em->getConnection()->getConfiguration()->getSQLLogger(); + $repository = $this->em->getRepository(DDC1595InheritedEntity1::class); $entity1 = $repository->find($e1->id); @@ -50,7 +50,7 @@ public function testIssue() $sqlLogger->queries[count($sqlLogger->queries)]['sql'] ); - $this->_em->clear(); + $this->em->clear(); $entity1 = $repository->find($e1->id); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC163Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC163Test.php index 9a57d03dcf3..57f1a7982e0 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC163Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC163Test.php @@ -35,13 +35,13 @@ public function testQueryWithOrConditionUsingTwoRelationOnSameEntity() $p3->addFriend($p4); - $this->_em->persist($p1); - $this->_em->persist($p2); - $this->_em->persist($p3); - $this->_em->persist($p4); + $this->em->persist($p1); + $this->em->persist($p2); + $this->em->persist($p3); + $this->em->persist($p4); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); $dql = 'SELECT PARTIAL person.{id,name}, PARTIAL spouse.{id,name}, PARTIAL friend.{id,name} FROM Doctrine\Tests\Models\Company\CompanyPerson person @@ -51,7 +51,7 @@ public function testQueryWithOrConditionUsingTwoRelationOnSameEntity() LEFT JOIN friend.friends friend_friend WHERE person.name=:name AND (spouse_friend.name=:name2 OR friend_friend.name=:name2)'; - $q = $this->_em->createQuery($dql); + $q = $this->em->createQuery($dql); $q->setParameter('name', "p1"); $q->setParameter('name2', "p4"); $result = $q->getScalarResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1643Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1643Test.php index c5636714491..8ff45e768ea 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1643Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1643Test.php @@ -32,15 +32,15 @@ public function setUp() $user2->name = "Roman"; $user2->status = "active"; - $this->_em->persist($user1); - $this->_em->persist($user2); - $this->_em->persist($group1); - $this->_em->persist($group2); - $this->_em->flush(); - $this->_em->clear(); - - $this->user1 = $this->_em->find(get_class($user1), $user1->id); - $this->user2 = $this->_em->find(get_class($user1), $user2->id); + $this->em->persist($user1); + $this->em->persist($user2); + $this->em->persist($group1); + $this->em->persist($group2); + $this->em->flush(); + $this->em->clear(); + + $this->user1 = $this->em->find(get_class($user1), $user1->id); + $this->user2 = $this->em->find(get_class($user1), $user2->id); } public function testClonePersistentCollectionAndReuse() @@ -49,10 +49,10 @@ public function testClonePersistentCollectionAndReuse() $user1->groups = clone $user1->groups; - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $user1 = $this->_em->find(get_class($user1), $user1->id); + $user1 = $this->em->find(get_class($user1), $user1->id); self::assertEquals(2, count($user1->groups)); } @@ -64,11 +64,11 @@ public function testClonePersistentCollectionAndShare() $user2->groups = clone $user1->groups; - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $user1 = $this->_em->find(get_class($user1), $user1->id); - $user2 = $this->_em->find(get_class($user1), $user2->id); + $user1 = $this->em->find(get_class($user1), $user1->id); + $user2 = $this->em->find(get_class($user1), $user2->id); self::assertEquals(2, count($user1->groups)); self::assertEquals(2, count($user2->groups)); @@ -84,12 +84,12 @@ public function testCloneThenDirtyPersistentCollection() $user2->groups = clone $user1->groups; $user2->groups->add($group3); - $this->_em->persist($group3); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($group3); + $this->em->flush(); + $this->em->clear(); - $user1 = $this->_em->find(get_class($user1), $user1->id); - $user2 = $this->_em->find(get_class($user1), $user2->id); + $user1 = $this->em->find(get_class($user1), $user1->id); + $user2 = $this->em->find(get_class($user1), $user2->id); self::assertEquals(3, count($user2->groups)); self::assertEquals(2, count($user1->groups)); @@ -107,12 +107,12 @@ public function testNotCloneAndPassAroundFlush() self::assertCount(1, $user1->groups->getInsertDiff()); - $this->_em->persist($group3); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($group3); + $this->em->flush(); + $this->em->clear(); - $user1 = $this->_em->find(get_class($user1), $user1->id); - $user2 = $this->_em->find(get_class($user1), $user2->id); + $user1 = $this->em->find(get_class($user1), $user1->id); + $user2 = $this->em->find(get_class($user1), $user2->id); self::assertEquals(3, count($user2->groups)); self::assertEquals(3, count($user1->groups)); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1654Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1654Test.php index 3093f48f7c9..26c019417d3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1654Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1654Test.php @@ -20,7 +20,7 @@ public function setUp() public function tearDown() { - $conn = static::$_sharedConn; + $conn = static::$sharedConn; $conn->executeUpdate('DELETE FROM ddc1654post_ddc1654comment'); $conn->executeUpdate('DELETE FROM DDC1654Comment'); $conn->executeUpdate('DELETE FROM DDC1654Post'); @@ -32,16 +32,16 @@ public function testManyToManyRemoveFromCollectionOrphanRemoval() $post->comments[] = new DDC1654Comment(); $post->comments[] = new DDC1654Comment(); - $this->_em->persist($post); - $this->_em->flush(); + $this->em->persist($post); + $this->em->flush(); $post->comments->remove(0); $post->comments->remove(1); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $comments = $this->_em->getRepository(DDC1654Comment::class)->findAll(); + $comments = $this->em->getRepository(DDC1654Comment::class)->findAll(); self::assertEquals(0, count($comments)); } @@ -51,16 +51,16 @@ public function testManyToManyRemoveElementFromCollectionOrphanRemoval() $post->comments[] = new DDC1654Comment(); $post->comments[] = new DDC1654Comment(); - $this->_em->persist($post); - $this->_em->flush(); + $this->em->persist($post); + $this->em->flush(); $post->comments->removeElement($post->comments[0]); $post->comments->removeElement($post->comments[1]); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $comments = $this->_em->getRepository(DDC1654Comment::class)->findAll(); + $comments = $this->em->getRepository(DDC1654Comment::class)->findAll(); self::assertEquals(0, count($comments)); } @@ -73,17 +73,17 @@ public function testManyToManyRemoveElementFromReAddToCollectionOrphanRemoval() $post->comments[] = new DDC1654Comment(); $post->comments[] = new DDC1654Comment(); - $this->_em->persist($post); - $this->_em->flush(); + $this->em->persist($post); + $this->em->flush(); $comment = $post->comments[0]; $post->comments->removeElement($comment); $post->comments->add($comment); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $comments = $this->_em->getRepository(DDC1654Comment::class)->findAll(); + $comments = $this->em->getRepository(DDC1654Comment::class)->findAll(); self::assertEquals(2, count($comments)); } @@ -93,15 +93,15 @@ public function testManyToManyClearCollectionOrphanRemoval() $post->comments[] = new DDC1654Comment(); $post->comments[] = new DDC1654Comment(); - $this->_em->persist($post); - $this->_em->flush(); + $this->em->persist($post); + $this->em->flush(); $post->comments->clear(); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $comments = $this->_em->getRepository(DDC1654Comment::class)->findAll(); + $comments = $this->em->getRepository(DDC1654Comment::class)->findAll(); self::assertEquals(0, count($comments)); } @@ -115,17 +115,17 @@ public function testManyToManyClearCollectionReAddOrphanRemoval() $post->comments[] = new DDC1654Comment(); $post->comments[] = new DDC1654Comment(); - $this->_em->persist($post); - $this->_em->flush(); + $this->em->persist($post); + $this->em->flush(); $comment = $post->comments[0]; $post->comments->clear(); $post->comments->add($comment); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $comments = $this->_em->getRepository(DDC1654Comment::class)->findAll(); + $comments = $this->em->getRepository(DDC1654Comment::class)->findAll(); self::assertEquals(1, count($comments)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1655Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1655Test.php index 1a8f07fb735..6040abf2a3a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1655Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1655Test.php @@ -14,11 +14,11 @@ public function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1655Foo::class), - $this->_em->getClassMetadata(DDC1655Bar::class), - $this->_em->getClassMetadata(DDC1655Baz::class), + $this->em->getClassMetadata(DDC1655Foo::class), + $this->em->getClassMetadata(DDC1655Bar::class), + $this->em->getClassMetadata(DDC1655Baz::class), ] ); } catch(\Exception $e) { @@ -28,7 +28,7 @@ public function setUp() protected function tearDown() { - $conn = static::$_sharedConn; + $conn = static::$sharedConn; // In case test is skipped, tearDown is called, but no setup may have run if (!$conn) { @@ -37,7 +37,7 @@ protected function tearDown() $platform = $conn->getDatabasePlatform(); - $this->_sqlLoggerStack->enabled = false; + $this->sqlLoggerStack->enabled = false; $conn->executeUpdate('DROP TABLE DDC1655Foo'); $conn->executeUpdate('DROP TABLE DDC1655Baz'); @@ -48,15 +48,15 @@ protected function tearDown() $conn->executeUpdate('DROP SEQUENCE DDC1655Baz_id_seq'); } - $this->_em->clear(); + $this->em->clear(); } public function testPostLoadOneToManyInheritance() { - $cm = $this->_em->getClassMetadata(DDC1655Foo::class); + $cm = $this->em->getClassMetadata(DDC1655Foo::class); self::assertEquals(["postLoad" => ["postLoad"]], $cm->lifecycleCallbacks); - $cm = $this->_em->getClassMetadata(DDC1655Bar::class); + $cm = $this->em->getClassMetadata(DDC1655Bar::class); self::assertEquals(["postLoad" => ["postLoad", "postSubLoaded"]], $cm->lifecycleCallbacks); $baz = new DDC1655Baz(); @@ -65,13 +65,13 @@ public function testPostLoadOneToManyInheritance() $bar = new DDC1655Bar(); $bar->baz = $baz; - $this->_em->persist($foo); - $this->_em->persist($bar); - $this->_em->persist($baz); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($foo); + $this->em->persist($bar); + $this->em->persist($baz); + $this->em->flush(); + $this->em->clear(); - $baz = $this->_em->find(get_class($baz), $baz->id); + $baz = $this->em->find(get_class($baz), $baz->id); foreach ($baz->foos as $foo) { self::assertEquals(1, $foo->loaded, "should have loaded callback counter incremented for " . get_class($foo)); } @@ -85,25 +85,25 @@ public function testPostLoadInheritanceChild() { $bar = new DDC1655Bar(); - $this->_em->persist($bar); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($bar); + $this->em->flush(); + $this->em->clear(); - $bar = $this->_em->find(get_class($bar), $bar->id); + $bar = $this->em->find(get_class($bar), $bar->id); self::assertEquals(1, $bar->loaded); self::assertEquals(1, $bar->subLoaded); - $bar = $this->_em->find(get_class($bar), $bar->id); + $bar = $this->em->find(get_class($bar), $bar->id); self::assertEquals(1, $bar->loaded); self::assertEquals(1, $bar->subLoaded); $dql = "SELECT b FROM " . __NAMESPACE__ . "\DDC1655Bar b WHERE b.id = ?1"; - $bar = $this->_em->createQuery($dql)->setParameter(1, $bar->id)->getSingleResult(); + $bar = $this->em->createQuery($dql)->setParameter(1, $bar->id)->getSingleResult(); self::assertEquals(1, $bar->loaded); self::assertEquals(1, $bar->subLoaded); - $this->_em->refresh($bar); + $this->em->refresh($bar); self::assertEquals(2, $bar->loaded); self::assertEquals(2, $bar->subLoaded); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1666Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1666Test.php index e82ea130f8d..d4e828a2d00 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1666Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1666Test.php @@ -25,16 +25,16 @@ public function testGivenOrphanRemovalOneToOne_WhenReplacing_ThenNoUniqueConstra $user->setEmail($email = new CmsEmail()); $email->setEmail("kontakt@beberlei.de"); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); - self::assertTrue($this->_em->contains($email)); + self::assertTrue($this->em->contains($email)); $user->setEmail($newEmail = new CmsEmail()); $newEmail->setEmail("benjamin.eberlei@googlemail.com"); - $this->_em->flush(); + $this->em->flush(); - self::assertFalse($this->_em->contains($email)); + self::assertFalse($this->em->contains($email)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1685Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1685Test.php index 0eedb326ce5..27877939460 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1685Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1685Test.php @@ -18,18 +18,18 @@ protected function setUp() parent::setUp(); - $this->_em->createQuery('DELETE FROM Doctrine\Tests\Models\DDC117\DDC117ArticleDetails ad')->execute(); + $this->em->createQuery('DELETE FROM Doctrine\Tests\Models\DDC117\DDC117ArticleDetails ad')->execute(); $article = new DDC117Article("Foo"); - $this->_em->persist($article); - $this->_em->flush(); + $this->em->persist($article); + $this->em->flush(); $articleDetails = new DDC117ArticleDetails($article, "Very long text"); - $this->_em->persist($articleDetails); - $this->_em->flush(); + $this->em->persist($articleDetails); + $this->em->flush(); $dql = "SELECT ad FROM Doctrine\Tests\Models\DDC117\DDC117ArticleDetails ad"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $this->paginator = new Paginator($query); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php index fde657f1202..e0ffafe9578 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php @@ -12,16 +12,16 @@ protected function setUp() { $this->useModelSet('company'); parent::setUp(); - $this->oldMetadata = $this->_em->getClassMetadata(CompanyEmployee::class); + $this->oldMetadata = $this->em->getClassMetadata(CompanyEmployee::class); $metadata = clone $this->oldMetadata; ksort($metadata->reflFields); - $this->_em->getMetadataFactory()->setMetadataFor(CompanyEmployee::class, $metadata); + $this->em->getMetadataFactory()->setMetadataFor(CompanyEmployee::class, $metadata); } public function tearDown() { - $this->_em->getMetadataFactory()->setMetadataFor(CompanyEmployee::class, $this->oldMetadata); + $this->em->getMetadataFactory()->setMetadataFor(CompanyEmployee::class, $this->oldMetadata); parent::tearDown(); } @@ -30,7 +30,7 @@ public function tearDown() */ public function testJoinedSubclassPersisterRequiresSpecificOrderOfMetadataReflFieldsArray() { - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); $spouse = new CompanyEmployee; $spouse->setName("Blub"); @@ -43,13 +43,13 @@ public function testJoinedSubclassPersisterRequiresSpecificOrderOfMetadataReflFi $employee->setSalary(1000); $employee->setSpouse($spouse); - $this->_em->persist($spouse); - $this->_em->persist($employee); + $this->em->persist($spouse); + $this->em->persist($employee); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $q = $this->_em->createQuery("SELECT e FROM Doctrine\Tests\Models\Company\CompanyEmployee e WHERE e.name = ?1"); + $q = $this->em->createQuery("SELECT e FROM Doctrine\Tests\Models\Company\CompanyEmployee e WHERE e.name = ?1"); $q->setParameter(1, "Foo"); $theEmployee = $q->getSingleResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1690Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1690Test.php index 64b5375d1b9..f9877301e87 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1690Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1690Test.php @@ -11,10 +11,10 @@ class DDC1690Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1690Parent::class), - $this->_em->getClassMetadata(DDC1690Child::class) + $this->em->getClassMetadata(DDC1690Parent::class), + $this->em->getClassMetadata(DDC1690Child::class) ] ); } catch (\Exception $e) { @@ -32,14 +32,14 @@ public function testChangeTracking() $parent->setChild($child); $child->setParent($parent); - $this->_em->persist($parent); - $this->_em->persist($child); + $this->em->persist($parent); + $this->em->persist($child); self::assertEquals(1, count($parent->listeners)); self::assertEquals(1, count($child->listeners)); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); self::assertEquals(1, count($parent->listeners)); self::assertEquals(1, count($child->listeners)); @@ -48,8 +48,8 @@ public function testChangeTracking() $childId = $child->getId(); unset($parent, $child); - $parent = $this->_em->find(DDC1690Parent::class, $parentId); - $child = $this->_em->find(DDC1690Child::class, $childId); + $parent = $this->em->find(DDC1690Parent::class, $parentId); + $child = $this->em->find(DDC1690Child::class, $childId); self::assertEquals(1, count($parent->listeners)); self::assertInstanceOf(Proxy::class, $child, 'Verifying that $child is a proxy before using proxy API'); @@ -58,14 +58,14 @@ public function testChangeTracking() self::assertCount(1, $child->listeners); unset($parent, $child); - $parent = $this->_em->find(DDC1690Parent::class, $parentId); + $parent = $this->em->find(DDC1690Parent::class, $parentId); $child = $parent->getChild(); self::assertEquals(1, count($parent->listeners)); self::assertEquals(1, count($child->listeners)); unset($parent, $child); - $child = $this->_em->find(DDC1690Child::class, $childId); + $child = $this->em->find(DDC1690Child::class, $childId); $parent = $child->getParent(); self::assertEquals(1, count($parent->listeners)); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php index d1ebc669cb1..0ee518c4c6c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php @@ -11,7 +11,7 @@ public function setUp() { parent::setUp(); - if ($this->_em->getConnection()->getDatabasePlatform()->getName() != "sqlite") { + if ($this->em->getConnection()->getDatabasePlatform()->getName() != "sqlite") { $this->markTestSkipped("Only with sqlite"); } } @@ -19,7 +19,7 @@ public function setUp() public function testIssue() { $dql = "SELECT n.smallText, n.publishDate FROM " . __NAMESPACE__ . "\\DDC1695News n"; - $sql = $this->_em->createQuery($dql)->getSQL(); + $sql = $this->em->createQuery($dql)->getSQL(); self::assertEquals( 'SELECT d0_."SmallText" AS SmallText_0, d0_."PublishDate" AS PublishDate_1 FROM "DDC1695News" d0_', diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1707Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1707Test.php index 3b16ecd0018..946332ff161 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1707Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1707Test.php @@ -17,10 +17,10 @@ public function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1509File::class), - $this->_em->getClassMetadata(DDC1509Picture::class), + $this->em->getClassMetadata(DDC1509File::class), + $this->em->getClassMetadata(DDC1509Picture::class), ] ); } catch (\Exception $ignored) { @@ -30,10 +30,10 @@ public function setUp() public function testPostLoadOnChild() { - $class = $this->_em->getClassMetadata(DDC1707Child::class); + $class = $this->em->getClassMetadata(DDC1707Child::class); $entity = new DDC1707Child(); - $event = new LifecycleEventArgs($entity, $this->_em); - $invoker = new ListenersInvoker($this->_em); + $event = new LifecycleEventArgs($entity, $this->em); + $invoker = new ListenersInvoker($this->em); $invoke = $invoker->getSubscribedSystems($class, \Doctrine\ORM\Events::postLoad); $invoker->invoke($class, \Doctrine\ORM\Events::postLoad, $entity, $event, $invoke); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php index 6eb544bd73b..0c778138dd6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php @@ -11,9 +11,9 @@ protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1719SimpleEntity::class), + $this->em->getClassMetadata(DDC1719SimpleEntity::class), ] ); } @@ -22,9 +22,9 @@ protected function tearDown() { parent::tearDown(); - $this->_schemaTool->dropSchema( + $this->schemaTool->dropSchema( [ - $this->_em->getClassMetadata(DDC1719SimpleEntity::class), + $this->em->getClassMetadata(DDC1719SimpleEntity::class), ] ); } @@ -35,17 +35,17 @@ public function testCreateRetrieveUpdateDelete() $e2 = new DDC1719SimpleEntity('Foo 1'); // Create - $this->_em->persist($e1); - $this->_em->persist($e2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($e1); + $this->em->persist($e2); + $this->em->flush(); + $this->em->clear(); $e1Id = $e1->id; $e2Id = $e2->id; // Retrieve - $e1 = $this->_em->find(DDC1719SimpleEntity::class, $e1Id); - $e2 = $this->_em->find(DDC1719SimpleEntity::class, $e2Id); + $e1 = $this->em->find(DDC1719SimpleEntity::class, $e1Id); + $e2 = $this->em->find(DDC1719SimpleEntity::class, $e2Id); self::assertInstanceOf(DDC1719SimpleEntity::class, $e1); self::assertInstanceOf(DDC1719SimpleEntity::class, $e2); @@ -60,9 +60,9 @@ public function testCreateRetrieveUpdateDelete() $e2->value = 'Foo 2'; // Update - $this->_em->persist($e1); - $this->_em->persist($e2); - $this->_em->flush(); + $this->em->persist($e1); + $this->em->persist($e2); + $this->em->flush(); self::assertEquals('Bar 2', $e1->value); self::assertEquals('Foo 2', $e2->value); @@ -77,13 +77,13 @@ public function testCreateRetrieveUpdateDelete() self::assertEquals('Foo 2', $e2->value); // Delete - $this->_em->remove($e1); - $this->_em->remove($e2); - $this->_em->flush(); + $this->em->remove($e1); + $this->em->remove($e2); + $this->em->flush(); - $e1 = $this->_em->find(DDC1719SimpleEntity::class, $e1Id); - $e2 = $this->_em->find(DDC1719SimpleEntity::class, $e2Id); + $e1 = $this->em->find(DDC1719SimpleEntity::class, $e1Id); + $e2 = $this->em->find(DDC1719SimpleEntity::class, $e2Id); self::assertNull($e1); self::assertNull($e2); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php index 0753c234ff1..a5059ef056b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php @@ -26,19 +26,19 @@ public function testMergeWorksOnNonSerializedProxies() $group = new CmsGroup(); $group->setName('Foo'); - $this->_em->persist($group); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($group); + $this->em->flush(); + $this->em->clear(); $proxy = $this->getProxy($group); self::assertInstanceOf(Proxy::class, $proxy); self::assertFalse($proxy->__isInitialized()); - $this->_em->detach($proxy); - $this->_em->clear(); + $this->em->detach($proxy); + $this->em->clear(); - $proxy = $this->_em->merge($proxy); + $proxy = $this->em->merge($proxy); self::assertEquals('Foo', $proxy->getName(), 'The entity is broken'); } @@ -56,20 +56,20 @@ public function testMergeWorksOnSerializedProxies() $group = new CmsGroup(); $group->setName('Foo'); - $this->_em->persist($group); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($group); + $this->em->flush(); + $this->em->clear(); $proxy = $this->getProxy($group); self::assertInstanceOf(Proxy::class, $proxy); self::assertFalse($proxy->__isInitialized()); - $this->_em->detach($proxy); + $this->em->detach($proxy); $serializedProxy = serialize($proxy); - $this->_em->clear(); + $this->em->clear(); - $unserializedProxy = $this->_em->merge(unserialize($serializedProxy)); + $unserializedProxy = $this->em->merge(unserialize($serializedProxy)); self::assertEquals('Foo', $unserializedProxy->getName(), 'The entity is broken'); } @@ -80,11 +80,11 @@ public function testMergeWorksOnSerializedProxies() */ private function getProxy($object) { - $metadataFactory = $this->_em->getMetadataFactory(); + $metadataFactory = $this->em->getMetadataFactory(); $className = get_class($object); $identifier = $metadataFactory->getMetadataFor($className)->getIdentifierValues($object); - return $this->_em->getProxyFactory()->getProxy($className, $identifier); + return $this->em->getProxyFactory()->getProxy($className, $identifier); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1757Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1757Test.php index 54245368a26..8e736054844 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1757Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1757Test.php @@ -8,7 +8,7 @@ class DDC1757Test extends OrmFunctionalTestCase { public function testFailingCase() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); /* @var $qb \Doctrine\ORM\QueryBuilder */ $qb->select('_a') diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1778Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1778Test.php index 913b33ce9f5..b1d77a04cde 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1778Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1778Test.php @@ -27,23 +27,23 @@ public function setUp() $this->phone->phonenumber = '0123456789'; $this->user->addPhonenumber($this->phone); - $this->_em->persist($this->user); - $this->_em->persist($this->phone); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($this->user); + $this->em->persist($this->phone); + $this->em->flush(); + $this->em->clear(); - $this->user = $this->_em->find(CmsUser::class, $this->user->getId()); - $this->phone = $this->_em->find(CmsPhonenumber::class, $this->phone->phonenumber); + $this->user = $this->em->find(CmsUser::class, $this->user->getId()); + $this->phone = $this->em->find(CmsPhonenumber::class, $this->phone->phonenumber); } public function testClear() { $clonedNumbers = clone $this->user->getPhonenumbers(); $clonedNumbers->clear(); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $this->user = $this->_em->find(CmsUser::class, $this->user->getId()); + $this->user = $this->em->find(CmsUser::class, $this->user->getId()); self::assertCount(1, $this->user->getPhonenumbers()); } @@ -52,10 +52,10 @@ public function testRemove() { $clonedNumbers = clone $this->user->getPhonenumbers(); $clonedNumbers->remove(0); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $this->user = $this->_em->find(CmsUser::class, $this->user->getId()); + $this->user = $this->em->find(CmsUser::class, $this->user->getId()); self::assertCount(1, $this->user->getPhonenumbers()); } @@ -64,10 +64,10 @@ public function testRemoveElement() { $clonedNumbers = clone $this->user->getPhonenumbers(); $clonedNumbers->removeElement($this->phone); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $this->user = $this->_em->find(CmsUser::class, $this->user->getId()); + $this->user = $this->em->find(CmsUser::class, $this->user->getId()); self::assertCount(1, $this->user->getPhonenumbers()); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1787Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1787Test.php index 0a5f8fcd554..6058743dcd1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1787Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1787Test.php @@ -10,10 +10,10 @@ class DDC1787Test extends \Doctrine\Tests\OrmFunctionalTestCase public function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1787Foo::class), - $this->_em->getClassMetadata(DDC1787Bar::class), + $this->em->getClassMetadata(DDC1787Foo::class), + $this->em->getClassMetadata(DDC1787Bar::class), ] ); } @@ -23,9 +23,9 @@ public function testIssue() $bar = new DDC1787Bar; $bar2 = new DDC1787Bar; - $this->_em->persist($bar); - $this->_em->persist($bar2); - $this->_em->flush(); + $this->em->persist($bar); + $this->em->persist($bar2); + $this->em->flush(); self::assertSame(1, $bar->getVersion()); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1843Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1843Test.php index e546784dac0..0082dd74654 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1843Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1843Test.php @@ -18,12 +18,12 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(User::class), - $this->_em->getClassMetadata(Group::class), - $this->_em->getClassMetadata(Phone::class), - $this->_em->getClassMetadata(Address::class), + $this->em->getClassMetadata(User::class), + $this->em->getClassMetadata(Group::class), + $this->em->getClassMetadata(Phone::class), + $this->em->getClassMetadata(Address::class), ] ); } catch(\Exception $e) { @@ -36,18 +36,18 @@ public function testCreateRetrieveUpdateDelete() $e1 = new Group('Parent Bar 1'); $e2 = new Group('Parent Foo 2'); - $this->_em->persist($e1); - $this->_em->persist($e2); - $this->_em->flush(); + $this->em->persist($e1); + $this->em->persist($e2); + $this->em->flush(); $e3 = new Group('Bar 3', $e1); $e4 = new Group('Foo 4', $e2); // Create - $this->_em->persist($e3); - $this->_em->persist($e4); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($e3); + $this->em->persist($e4); + $this->em->flush(); + $this->em->clear(); $e1Id = $e1->id; $e2Id = $e2->id; @@ -55,10 +55,10 @@ public function testCreateRetrieveUpdateDelete() $e4Id = $e4->id; // Retrieve - $e1 = $this->_em->find(Group::class, $e1Id); - $e2 = $this->_em->find(Group::class, $e2Id); - $e3 = $this->_em->find(Group::class, $e3Id); - $e4 = $this->_em->find(Group::class, $e4Id); + $e1 = $this->em->find(Group::class, $e1Id); + $e2 = $this->em->find(Group::class, $e2Id); + $e3 = $this->em->find(Group::class, $e3Id); + $e4 = $this->em->find(Group::class, $e4Id); self::assertInstanceOf(Group::class, $e1); self::assertInstanceOf(Group::class, $e2); @@ -82,11 +82,11 @@ public function testCreateRetrieveUpdateDelete() $e4->name = 'Foo 44'; // Update - $this->_em->persist($e1); - $this->_em->persist($e2); - $this->_em->persist($e3); - $this->_em->persist($e4); - $this->_em->flush(); + $this->em->persist($e1); + $this->em->persist($e2); + $this->em->persist($e3); + $this->em->persist($e4); + $this->em->flush(); self::assertEquals('Parent Bar 11', $e1->name); self::assertEquals('Parent Foo 22', $e2->name); @@ -109,13 +109,13 @@ public function testCreateRetrieveUpdateDelete() self::assertEquals('Foo 44', $e4->name); // Delete - $this->_em->remove($e4); - $this->_em->remove($e3); - $this->_em->remove($e2); - $this->_em->remove($e1); + $this->em->remove($e4); + $this->em->remove($e3); + $this->em->remove($e2); + $this->em->remove($e1); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); self::assertInstanceOf(Group::class, $e1); @@ -124,10 +124,10 @@ public function testCreateRetrieveUpdateDelete() self::assertInstanceOf(Group::class, $e4); // Retrieve - $e1 = $this->_em->find(Group::class, $e1Id); - $e2 = $this->_em->find(Group::class, $e2Id); - $e3 = $this->_em->find(Group::class, $e3Id); - $e4 = $this->_em->find(Group::class, $e4Id); + $e1 = $this->em->find(Group::class, $e1Id); + $e2 = $this->em->find(Group::class, $e2Id); + $e3 = $this->em->find(Group::class, $e3Id); + $e4 = $this->em->find(Group::class, $e4Id); self::assertNull($e1); self::assertNull($e2); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1884Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1884Test.php index db353a55fee..b07e932e2e8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1884Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1884Test.php @@ -19,17 +19,17 @@ protected function setUp() list($bimmer, $crysler, $merc, $volvo) = $this->createCars(Car::class); list($john, $foo) = $this->createDrivers(Driver::class); - $this->_em->flush(); + $this->em->flush(); $ride1 = new Ride($john, $bimmer); $ride2 = new Ride($john, $merc); $ride3 = new Ride($john, $volvo); $ride4 = new Ride($foo, $merc); - $this->_em->persist($ride1); - $this->_em->persist($ride2); - $this->_em->persist($ride3); - $this->_em->persist($ride4); + $this->em->persist($ride1); + $this->em->persist($ride2); + $this->em->persist($ride3); + $this->em->persist($ride4); $ride5 = new PaidRide($john, $bimmer); $ride5->setFare(10.50); @@ -43,12 +43,12 @@ protected function setUp() $ride8 = new PaidRide($foo, $merc); $ride8->setFare(32.15); - $this->_em->persist($ride5); - $this->_em->persist($ride6); - $this->_em->persist($ride7); - $this->_em->persist($ride8); + $this->em->persist($ride5); + $this->em->persist($ride6); + $this->em->persist($ride7); + $this->em->persist($ride8); - $this->_em->flush(); + $this->em->flush(); } private function createCars($class) @@ -69,10 +69,10 @@ private function createCars($class) $volvo->setBrand('Volvo'); $volvo->setModel('XC90'); - $this->_em->persist($bimmer); - $this->_em->persist($crysler); - $this->_em->persist($merc); - $this->_em->persist($volvo); + $this->em->persist($bimmer); + $this->em->persist($crysler); + $this->em->persist($merc); + $this->em->persist($volvo); return [$bimmer, $crysler, $merc, $volvo]; } @@ -85,8 +85,8 @@ private function createDrivers($class) $foo = new $class; $foo->setName('Foo Bar'); - $this->_em->persist($foo); - $this->_em->persist($john); + $this->em->persist($foo); + $this->em->persist($john); return [$john, $foo]; } @@ -97,7 +97,7 @@ private function createDrivers($class) */ public function testSelectFromInverseSideWithCompositePkAndSolelyIdentifierColumnsUsingFetchJoins() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $result = $qb->select('d, dr, c') ->from(Driver::class, 'd') @@ -119,7 +119,7 @@ public function testSelectFromInverseSideWithCompositePkAndSolelyIdentifierColum */ public function testSelectFromInverseSideWithCompositePkUsingFetchJoins() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $result = $qb->select('d, dr, c') ->from(Driver::class, 'd') @@ -139,7 +139,7 @@ public function testSelectFromInverseSideWithCompositePkUsingFetchJoins() */ public function testSelectFromOwningSideUsingFetchJoins() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $result = $qb->select('r, d, c') ->from(PaidRide::class, 'r') diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1885Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1885Test.php index 8af12f4c434..21fc0ea1189 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1885Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1885Test.php @@ -22,11 +22,11 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(User::class), - $this->_em->getClassMetadata(Group::class), - $this->_em->getClassMetadata(Address::class), + $this->em->getClassMetadata(User::class), + $this->em->getClassMetadata(Group::class), + $this->em->getClassMetadata(Address::class), ] ); } catch(\Exception $e) { @@ -40,9 +40,9 @@ protected function setUp() $this->user = $user; // Create - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); } @@ -57,7 +57,7 @@ public function testCreateRetrieveUpdateDelete() $g2Id = $g2->id; // Retrieve - $user = $this->_em->find(User::class, $u1Id); + $user = $this->em->find(User::class, $u1Id); self::assertInstanceOf(User::class, $user); self::assertEquals('FabioBatSilva', $user->name); @@ -75,32 +75,32 @@ public function testCreateRetrieveUpdateDelete() $g2->name = 'Foo 22'; // Update - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); - $user = $this->_em->find(User::class, $u1Id); + $user = $this->em->find(User::class, $u1Id); self::assertInstanceOf(User::class, $user); self::assertEquals('FabioBatSilva', $user->name); self::assertEquals($u1Id, $user->id); // Delete - $this->_em->remove($user); + $this->em->remove($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - self::assertNull($this->_em->find(User::class, $u1Id)); - self::assertNull($this->_em->find(Group::class, $g1Id)); - self::assertNull($this->_em->find(Group::class, $g2Id)); + self::assertNull($this->em->find(User::class, $u1Id)); + self::assertNull($this->em->find(Group::class, $g1Id)); + self::assertNull($this->em->find(Group::class, $g2Id)); } public function testRemoveItem() { $user = $this->user; $u1Id = $user->id; - $user = $this->_em->find(User::class, $u1Id); + $user = $this->em->find(User::class, $u1Id); self::assertInstanceOf(User::class, $user); self::assertEquals('FabioBatSilva', $user->name); @@ -113,11 +113,11 @@ public function testRemoveItem() $user->getGroups()->remove(0); // Update - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); - $user = $this->_em->find(User::class, $u1Id); + $user = $this->em->find(User::class, $u1Id); self::assertInstanceOf(User::class, $user); self::assertEquals('FabioBatSilva', $user->name); @@ -130,7 +130,7 @@ public function testClearAll() { $user = $this->user; $u1Id = $user->id; - $user = $this->_em->find(User::class, $u1Id); + $user = $this->em->find(User::class, $u1Id); self::assertInstanceOf(User::class, $user); self::assertEquals('FabioBatSilva', $user->name); @@ -143,11 +143,11 @@ public function testClearAll() $user->getGroups()->clear(); // Update - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); - $user = $this->_em->find(User::class, $u1Id); + $user = $this->em->find(User::class, $u1Id); self::assertInstanceOf(User::class, $user); self::assertEquals('FabioBatSilva', $user->name); @@ -160,7 +160,7 @@ public function testCountExtraLazy() { $user = $this->user; $u1Id = $user->id; - $user = $this->_em->find(User::class, $u1Id); + $user = $this->em->find(User::class, $u1Id); self::assertInstanceOf(User::class, $user); self::assertEquals('FabioBatSilva', $user->name); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1918Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1918Test.php index d6c4839b0e8..7db672ade76 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1918Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1918Test.php @@ -23,7 +23,7 @@ public function testLastPageCorrect() for ($i = 0; $i < 3; $i++) { $group = new CmsGroup(); $group->name = "test"; - $this->_em->persist($group); + $this->em->persist($group); $groups[] = $group; } @@ -35,12 +35,12 @@ public function testLastPageCorrect() $user->status = "active"; $user->groups = $groups; - $this->_em->persist($user); + $this->em->persist($user); } - $this->_em->flush(); + $this->em->flush(); - $query = $this->_em->createQuery('SELECT u, g FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.groups g'); + $query = $this->em->createQuery('SELECT u, g FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.groups g'); $query->setFirstResult(6); $query->setMaxResults(3); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1925Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1925Test.php index ef7d6014bf6..77ffe25371c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1925Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1925Test.php @@ -12,10 +12,10 @@ class DDC1925Test extends \Doctrine\Tests\OrmFunctionalTestCase { public function testIssue() { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1925User::class), - $this->_em->getClassMetadata(DDC1925Product::class), + $this->em->getClassMetadata(DDC1925User::class), + $this->em->getClassMetadata(DDC1925Product::class), ] ); @@ -25,21 +25,21 @@ public function testIssue() $product = new DDC1925Product(); $product->setTitle("Test product"); - $this->_em->persist($user); - $this->_em->persist($product); - $this->_em->flush(); + $this->em->persist($user); + $this->em->persist($product); + $this->em->flush(); $product->addBuyer($user); - $this->_em->getUnitOfWork() + $this->em->getUnitOfWork() ->computeChangeSets(); - $this->_em->persist($product); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($product); + $this->em->flush(); + $this->em->clear(); /** @var DDC1925Product $persistedProduct */ - $persistedProduct = $this->_em->find(DDC1925Product::class, $product->getId()); + $persistedProduct = $this->em->find(DDC1925Product::class, $product->getId()); self::assertEquals($user, $persistedProduct->getBuyers()->first()); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC192Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC192Test.php index 532e0edfeb4..50251d44609 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC192Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC192Test.php @@ -13,13 +13,13 @@ class DDC192Test extends OrmFunctionalTestCase public function testSchemaCreation() { $classes = [ - $this->_em->getClassMetadata(DDC192User::class), - $this->_em->getClassMetadata(DDC192Phonenumber::class), + $this->em->getClassMetadata(DDC192User::class), + $this->em->getClassMetadata(DDC192Phonenumber::class), ]; - $this->_schemaTool->createSchema($classes); + $this->schemaTool->createSchema($classes); - $tables = $this->_em->getConnection() + $tables = $this->em->getConnection() ->getSchemaManager() ->listTableNames(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1995Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1995Test.php index d93a72885e6..59e1b2873a4 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1995Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1995Test.php @@ -26,15 +26,15 @@ public function testIssue() $employee->setDepartment('bar'); $employee->setSalary(1000); - $this->_em->persist($person); - $this->_em->persist($employee); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($person); + $this->em->persist($employee); + $this->em->flush(); + $this->em->clear(); $dql = 'SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF ?1'; - $class = $this->_em->getClassMetadata(CompanyEmployee::class); + $class = $this->em->getClassMetadata(CompanyEmployee::class); - $result = $this->_em->createQuery($dql) + $result = $this->em->createQuery($dql) ->setParameter(1, $class) ->getResult(); @@ -52,21 +52,21 @@ public function testQueryCache() $employee->setDepartment('bar'); $employee->setSalary(1000); - $this->_em->persist($person); - $this->_em->persist($employee); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($person); + $this->em->persist($employee); + $this->em->flush(); + $this->em->clear(); $dql = 'SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF :type'; - $class1 = $this->_em->getClassMetadata(CompanyEmployee::class); - $class2 = $this->_em->getClassMetadata(CompanyPerson::class); + $class1 = $this->em->getClassMetadata(CompanyEmployee::class); + $class2 = $this->em->getClassMetadata(CompanyPerson::class); - $result1 = $this->_em->createQuery($dql) + $result1 = $this->em->createQuery($dql) ->setParameter('type', $class1) ->useQueryCache(true) ->getResult(); - $result2 = $this->_em->createQuery($dql) + $result2 = $this->em->createQuery($dql) ->setParameter('type', $class2) ->useQueryCache(true) ->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1998Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1998Test.php index 74c9a71cebb..6bae5396aba 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1998Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1998Test.php @@ -15,34 +15,34 @@ public function testSqlConversionAsIdentifier() { Type::addType('ddc1998', DDC1998Type::class); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC1998Entity::class), + $this->em->getClassMetadata(DDC1998Entity::class), ] ); $entity = new DDC1998Entity(); $entity->id = new DDC1998Id("foo"); - $this->_em->persist($entity); - $this->_em->flush(); + $this->em->persist($entity); + $this->em->flush(); $entity->num++; - $this->_em->flush(); + $this->em->flush(); - $this->_em->remove($entity); - $this->_em->flush(); - $this->_em->clear(); + $this->em->remove($entity); + $this->em->flush(); + $this->em->clear(); - $found = $this->_em->find(DDC1998Entity::class, $entity->id); + $found = $this->em->find(DDC1998Entity::class, $entity->id); self::assertNull($found); - $found = $this->_em->find(DDC1998Entity::class, "foo"); + $found = $this->em->find(DDC1998Entity::class, "foo"); self::assertNull($found); - self::assertEquals(0, count($this->_em->getRepository(DDC1998Entity::class)->findAll())); + self::assertEquals(0, count($this->em->getRepository(DDC1998Entity::class)->findAll())); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC199Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC199Test.php index 2daadcf8c94..10da9d40c8c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC199Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC199Test.php @@ -9,11 +9,11 @@ class DDC199Test extends OrmFunctionalTestCase protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC199ParentClass::class), - $this->_em->getClassMetadata(DDC199ChildClass::class), - $this->_em->getClassMetadata(DDC199RelatedClass::class) + $this->em->getClassMetadata(DDC199ParentClass::class), + $this->em->getClassMetadata(DDC199ChildClass::class), + $this->em->getClassMetadata(DDC199RelatedClass::class) ] ); } @@ -23,22 +23,22 @@ public function testPolymorphicLoading() $child = new DDC199ChildClass; $child->parentData = 'parentData'; $child->childData = 'childData'; - $this->_em->persist($child); + $this->em->persist($child); $related1 = new DDC199RelatedClass; $related1->relatedData = 'related1'; $related1->parent = $child; - $this->_em->persist($related1); + $this->em->persist($related1); $related2 = new DDC199RelatedClass; $related2->relatedData = 'related2'; $related2->parent = $child; - $this->_em->persist($related2); + $this->em->persist($related2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery('select e,r from Doctrine\Tests\ORM\Functional\Ticket\DDC199ParentClass e join e.relatedEntities r'); + $query = $this->em->createQuery('select e,r from Doctrine\Tests\ORM\Functional\Ticket\DDC199ParentClass e join e.relatedEntities r'); $result = $query->getResult(); self::assertEquals(1, count($result)); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2012Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2012Test.php index 008ba12c637..df3ee185ea5 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2012Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2012Test.php @@ -19,10 +19,10 @@ protected function setUp() DDC2012TsVectorType::$calls = []; - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2012Item::class), - $this->_em->getClassMetadata(DDC2012ItemPerson::class), + $this->em->getClassMetadata(DDC2012Item::class), + $this->em->getClassMetadata(DDC2012ItemPerson::class), ] ); } @@ -32,11 +32,11 @@ public function testIssue() $item = new DDC2012ItemPerson(); $item->tsv = ['word1', 'word2', 'word3']; - $this->_em->persist($item); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($item); + $this->em->flush(); + $this->em->clear(); - $item = $this->_em->find(get_class($item), $item->id); + $item = $this->em->find(get_class($item), $item->id); self::assertArrayHasKey('convertToDatabaseValueSQL', DDC2012TsVectorType::$calls); self::assertArrayHasKey('convertToDatabaseValue', DDC2012TsVectorType::$calls); @@ -52,11 +52,11 @@ public function testIssue() $item->tsv = ['word1', 'word2']; - $this->_em->persist($item); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($item); + $this->em->flush(); + $this->em->clear(); - $item = $this->_em->find(get_class($item), $item->id); + $item = $this->em->find(get_class($item), $item->id); self::assertCount(2, DDC2012TsVectorType::$calls['convertToDatabaseValueSQL']); self::assertCount(2, DDC2012TsVectorType::$calls['convertToDatabaseValue']); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2074Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2074Test.php index 32dcfe9699a..49176de388f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2074Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2074Test.php @@ -20,13 +20,13 @@ public function setUp() public function testShouldNotScheduleDeletionOnClonedInstances() { - $class = $this->_em->getClassMetadata(ECommerceProduct::class); + $class = $this->em->getClassMetadata(ECommerceProduct::class); $product = new ECommerceProduct(); $category = new ECommerceCategory(); - $collection = new PersistentCollection($this->_em, $class, new ArrayCollection([$category])); + $collection = new PersistentCollection($this->em, $class, new ArrayCollection([$category])); $collection->setOwner($product, $class->associationMappings['categories']); - $uow = $this->_em->getUnitOfWork(); + $uow = $this->em->getUnitOfWork(); $clonedCollection = clone $collection; $clonedCollection->clear(); @@ -40,18 +40,18 @@ public function testSavingClonedPersistentCollection() $category->setName('foo'); $product->addCategory($category); - $this->_em->persist($product); - $this->_em->persist($category); - $this->_em->flush(); + $this->em->persist($product); + $this->em->persist($category); + $this->em->flush(); $newProduct = clone $product; - $this->_em->persist($newProduct); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($newProduct); + $this->em->flush(); + $this->em->clear(); - $product1 = $this->_em->find(ECommerceProduct::class, $product->getId()); - $product2 = $this->_em->find(ECommerceProduct::class, $newProduct->getId()); + $product1 = $this->em->find(ECommerceProduct::class, $product->getId()); + $product2 = $this->em->find(ECommerceProduct::class, $newProduct->getId()); self::assertCount(1, $product1->getCategories()); self::assertCount(1, $product2->getCategories()); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2084Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2084Test.php index afc2f5e502e..dad013e0faa 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2084Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2084Test.php @@ -12,10 +12,10 @@ public function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC2084\MyEntity1'), - $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC2084\MyEntity2'), + $this->em->getClassMetadata(__NAMESPACE__ . '\DDC2084\MyEntity1'), + $this->em->getClassMetadata(__NAMESPACE__ . '\DDC2084\MyEntity2'), ] ); } catch (\Exception $exc) { @@ -27,13 +27,13 @@ public function loadFixture() $e2 = new DDC2084\MyEntity2('Foo'); $e1 = new DDC2084\MyEntity1($e2); - $this->_em->persist($e2); - $this->_em->flush(); + $this->em->persist($e2); + $this->em->flush(); - $this->_em->persist($e1); - $this->_em->flush(); + $this->em->persist($e1); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); return $e1; } @@ -42,7 +42,7 @@ public function testIssue() { $e1 = $this->loadFixture(); $e2 = $e1->getMyEntity2(); - $e = $this->_em->find(__NAMESPACE__ . '\DDC2084\MyEntity1', $e2); + $e = $this->em->find(__NAMESPACE__ . '\DDC2084\MyEntity1', $e2); self::assertInstanceOf(__NAMESPACE__ . '\DDC2084\MyEntity1', $e); self::assertInstanceOf(__NAMESPACE__ . '\DDC2084\MyEntity2', $e->getMyEntity2()); @@ -55,7 +55,7 @@ public function testIssue() */ public function testinvalidIdentifierBindingEntityException() { - $this->_em->find(__NAMESPACE__ . '\DDC2084\MyEntity1', new DDC2084\MyEntity2('Foo')); + $this->em->find(__NAMESPACE__ . '\DDC2084\MyEntity1', new DDC2084\MyEntity2('Foo')); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2090Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2090Test.php index 78a13af1287..d43302ea5d8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2090Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2090Test.php @@ -33,12 +33,12 @@ public function testIssue() $employee2->setDepartment("QA"); $employee2->setSalary(100); - $this->_em->persist($employee1); - $this->_em->persist($employee2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($employee1); + $this->em->persist($employee2); + $this->em->flush(); + $this->em->clear(); - $this->_em->createQueryBuilder() + $this->em->createQueryBuilder() ->update(CompanyEmployee::class, 'e') ->set('e.startDate', ':date') ->set('e.salary', ':salary') @@ -54,7 +54,7 @@ public function testIssue() ->useQueryCache(true) ->execute(); - $this->_em->createQueryBuilder() + $this->em->createQueryBuilder() ->update(CompanyEmployee::class, 'e') ->set('e.startDate', ':date') ->set('e.salary', ':salary') @@ -70,17 +70,17 @@ public function testIssue() ->useQueryCache(true) ->execute(); - $this->_em->clear(); + $this->em->clear(); - $e1 = $this->_em->find(CompanyEmployee::class, $employee1->getId()); - $e2 = $this->_em->find(CompanyEmployee::class, $employee2->getId()); + $e1 = $this->em->find(CompanyEmployee::class, $employee1->getId()); + $e2 = $this->em->find(CompanyEmployee::class, $employee2->getId()); self::assertEquals(101, $e1->getSalary()); self::assertEquals(102, $e2->getSalary()); self::assertEquals($date1, $e1->getStartDate()); self::assertEquals($date2, $e2->getStartDate()); - $this->_em->createQueryBuilder() + $this->em->createQueryBuilder() ->update(CompanyEmployee::class, 'e') ->set('e.startDate', '?1') ->set('e.salary', '?2') @@ -90,7 +90,7 @@ public function testIssue() ->useQueryCache(true) ->execute(); - $this->_em->createQueryBuilder() + $this->em->createQueryBuilder() ->update(CompanyEmployee::class, 'e') ->set('e.startDate', '?1') ->set('e.salary', '?2') @@ -101,10 +101,10 @@ public function testIssue() ->execute(); - $this->_em->clear(); + $this->em->clear(); - $e1 = $this->_em->find(CompanyEmployee::class, $employee1->getId()); - $e2 = $this->_em->find(CompanyEmployee::class, $employee2->getId()); + $e1 = $this->em->find(CompanyEmployee::class, $employee1->getId()); + $e2 = $this->em->find(CompanyEmployee::class, $employee2->getId()); self::assertEquals(101, $e1->getSalary()); self::assertEquals(102, $e2->getSalary()); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2106Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2106Test.php index 4856852ecaa..490550d31f9 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2106Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2106Test.php @@ -13,9 +13,9 @@ protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2106Entity::class), + $this->em->getClassMetadata(DDC2106Entity::class), ] ); } @@ -24,14 +24,14 @@ public function testDetachedEntityAsId() { // We want an uninitialized PersistentCollection $entity->children $entity = new DDC2106Entity(); - $this->_em->persist($entity); - $this->_em->flush(); - $this->_em->detach($entity); - $entity = $this->_em->getRepository(DDC2106Entity::class)->findOneBy([]); + $this->em->persist($entity); + $this->em->flush(); + $this->em->detach($entity); + $entity = $this->em->getRepository(DDC2106Entity::class)->findOneBy([]); // ... and a managed entity without id $entityWithoutId = new DDC2106Entity(); - $this->_em->persist($entityWithoutId); + $this->em->persist($entityWithoutId); $criteria = Criteria::create()->where(Criteria::expr()->eq('parent', $entityWithoutId)); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC211Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC211Test.php index d2bd2c11636..93c9896fc93 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC211Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC211Test.php @@ -9,36 +9,36 @@ class DDC211Test extends OrmFunctionalTestCase protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC211User::class), - $this->_em->getClassMetadata(DDC211Group::class) + $this->em->getClassMetadata(DDC211User::class), + $this->em->getClassMetadata(DDC211Group::class) ] ); } public function testIssue() { - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); $user = new DDC211User; $user->setName('John Doe'); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); $groupNames = ['group 1', 'group 2', 'group 3', 'group 4']; foreach ($groupNames as $name) { $group = new DDC211Group; $group->setName($name); - $this->_em->persist($group); - $this->_em->flush(); + $this->em->persist($group); + $this->em->flush(); if (!$user->getGroups()->contains($group)) { $user->getGroups()->add($group); $group->getUsers()->add($user); - $this->_em->flush(); + $this->em->flush(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php index fe82d4722b7..3a352d22d48 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php @@ -13,13 +13,13 @@ class DDC2138Test extends OrmFunctionalTestCase */ public function testForeignKeyOnSTIWithMultipleMapping() { - $schema = $this->_schemaTool->getSchemaFromMetadata( + $schema = $this->schemaTool->getSchemaFromMetadata( [ - $this->_em->getClassMetadata(DDC2138User::class), - $this->_em->getClassMetadata(DDC2138Structure::class), - $this->_em->getClassMetadata(DDC2138UserFollowedObject::class), - $this->_em->getClassMetadata(DDC2138UserFollowedStructure::class), - $this->_em->getClassMetadata(DDC2138UserFollowedUser::class) + $this->em->getClassMetadata(DDC2138User::class), + $this->em->getClassMetadata(DDC2138Structure::class), + $this->em->getClassMetadata(DDC2138UserFollowedObject::class), + $this->em->getClassMetadata(DDC2138UserFollowedStructure::class), + $this->em->getClassMetadata(DDC2138UserFollowedUser::class) ] ); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2175Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2175Test.php index 1fe6f42fb77..7d7ca6d41fe 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2175Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2175Test.php @@ -11,8 +11,8 @@ protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( - [$this->_em->getClassMetadata(DDC2175Entity::class)] + $this->schemaTool->createSchema( + [$this->em->getClassMetadata(DDC2175Entity::class)] ); } @@ -20,8 +20,8 @@ protected function tearDown() { parent::tearDown(); - $this->_schemaTool->dropSchema( - [$this->_em->getClassMetadata(DDC2175Entity::class)] + $this->schemaTool->dropSchema( + [$this->em->getClassMetadata(DDC2175Entity::class)] ); } @@ -30,18 +30,18 @@ public function testIssue() $entity = new DDC2175Entity(); $entity->field = "foo"; - $this->_em->persist($entity); - $this->_em->flush(); + $this->em->persist($entity); + $this->em->flush(); self::assertEquals(1, $entity->version); $entity->field = "bar"; - $this->_em->flush(); + $this->em->flush(); self::assertEquals(2, $entity->version); $entity->field = "baz"; - $this->_em->flush(); + $this->em->flush(); self::assertEquals(3, $entity->version); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2182Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2182Test.php index 28699679eab..01fb0805805 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2182Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2182Test.php @@ -6,14 +6,14 @@ class DDC2182Test extends \Doctrine\Tests\OrmFunctionalTestCase { public function testPassColumnOptionsToJoinColumns() { - if ($this->_em->getConnection()->getDatabasePlatform()->getName() != 'mysql') { + if ($this->em->getConnection()->getDatabasePlatform()->getName() != 'mysql') { $this->markTestSkipped("This test is useful for all databases, but designed only for mysql."); } - $sql = $this->_schemaTool->getCreateSchemaSql( + $sql = $this->schemaTool->getCreateSchemaSql( [ - $this->_em->getClassMetadata(DDC2182OptionParent::class), - $this->_em->getClassMetadata(DDC2182OptionChild::class), + $this->em->getClassMetadata(DDC2182OptionParent::class), + $this->em->getClassMetadata(DDC2182OptionChild::class), ] ); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2214Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2214Test.php index 2c8e6966749..8f1ace9c416 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2214Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2214Test.php @@ -17,10 +17,10 @@ protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2214Foo::class), - $this->_em->getClassMetadata(DDC2214Bar::class), + $this->em->getClassMetadata(DDC2214Foo::class), + $this->em->getClassMetadata(DDC2214Bar::class), ] ); } @@ -32,19 +32,19 @@ public function testIssue() $foo->bar = $bar; - $this->_em->persist($foo); - $this->_em->persist($bar); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($foo); + $this->em->persist($bar); + $this->em->flush(); + $this->em->clear(); /* @var $foo \Doctrine\Tests\ORM\Functional\Ticket\DDC2214Foo */ - $foo = $this->_em->find(DDC2214Foo::class, $foo->id); + $foo = $this->em->find(DDC2214Foo::class, $foo->id); $bar = $foo->bar; - $logger = $this->_em->getConnection()->getConfiguration()->getSQLLogger(); + $logger = $this->em->getConnection()->getConfiguration()->getSQLLogger(); $related = $this - ->_em + ->em ->createQuery('SELECT b FROM '.__NAMESPACE__ . '\DDC2214Bar b WHERE b.id IN(:ids)') ->setParameter('ids', [$bar]) ->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2224Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2224Test.php index 4033f925c3d..2de05ff3222 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2224Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2224Test.php @@ -20,7 +20,7 @@ public static function setUpBeforeClass() public function testIssue() { $dql = 'SELECT e FROM ' . __NAMESPACE__ . '\DDC2224Entity e WHERE e.field = :field'; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $query->setQueryCacheDriver(new ArrayCache()); $query->setParameter('field', 'test', 'DDC2224Type'); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php index d02c79a1c38..a27d9538a1a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php @@ -18,10 +18,10 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2230User::class), - $this->_em->getClassMetadata(DDC2230Address::class), + $this->em->getClassMetadata(DDC2230User::class), + $this->em->getClassMetadata(DDC2230Address::class), ] ); } catch (ToolsException $e) {} @@ -32,16 +32,16 @@ public function testNotifyTrackingNotCalledOnUninitializedProxies() $insertedUser = new DDC2230User(); $insertedUser->address = new DDC2230Address(); - $this->_em->persist($insertedUser); - $this->_em->persist($insertedUser->address); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($insertedUser); + $this->em->persist($insertedUser->address); + $this->em->flush(); + $this->em->clear(); - $user = $this->_em->find(DDC2230User::class, $insertedUser->id); + $user = $this->em->find(DDC2230User::class, $insertedUser->id); - $this->_em->clear(); + $this->em->clear(); - $mergedUser = $this->_em->merge($user); + $mergedUser = $this->em->merge($user); /* @var $address Proxy */ $address = $mergedUser->address; @@ -54,11 +54,11 @@ public function testNotifyTrackingCalledOnProxyInitialization() { $insertedAddress = new DDC2230Address(); - $this->_em->persist($insertedAddress); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($insertedAddress); + $this->em->flush(); + $this->em->clear(); - $addressProxy = $this->_em->getReference(DDC2230Address::class, $insertedAddress->id); + $addressProxy = $this->em->getReference(DDC2230Address::class, $insertedAddress->id); /* @var $addressProxy Proxy|\Doctrine\Tests\ORM\Functional\Ticket\DDC2230Address */ self::assertFalse($addressProxy->__isInitialized()); @@ -66,7 +66,7 @@ public function testNotifyTrackingCalledOnProxyInitialization() $addressProxy->__load(); - self::assertSame($this->_em->getUnitOfWork(), $addressProxy->listener); + self::assertSame($this->em->getUnitOfWork(), $addressProxy->listener); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php index 620601bcd6a..f11397915ec 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php @@ -15,9 +15,9 @@ class DDC2231Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2231EntityY::class), + $this->em->getClassMetadata(DDC2231EntityY::class), ] ); } @@ -26,12 +26,12 @@ public function testInjectObjectManagerInProxyIfInitializedInUow() { $y1 = new DDC2231EntityY; - $this->_em->persist($y1); + $this->em->persist($y1); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $y1ref = $this->_em->getReference(get_class($y1), $y1->id); + $y1ref = $this->em->getReference(get_class($y1), $y1->id); self::assertInstanceOf(Proxy::class, $y1ref); self::assertFalse($y1ref->__isInitialized__); @@ -39,7 +39,7 @@ public function testInjectObjectManagerInProxyIfInitializedInUow() $id = $y1ref->doSomething(); self::assertTrue($y1ref->__isInitialized__); - self::assertEquals($this->_em, $y1ref->om); + self::assertEquals($this->em, $y1ref->om); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2252Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2252Test.php index 1e732f6eeae..06e03e873cd 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2252Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2252Test.php @@ -18,12 +18,12 @@ protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2252User::class), - $this->_em->getClassMetadata(DDC2252Privilege::class), - $this->_em->getClassMetadata(DDC2252Membership::class), - $this->_em->getClassMetadata(DDC2252MerchantAccount::class), + $this->em->getClassMetadata(DDC2252User::class), + $this->em->getClassMetadata(DDC2252Privilege::class), + $this->em->getClassMetadata(DDC2252Membership::class), + $this->em->getClassMetadata(DDC2252MerchantAccount::class), ] ); @@ -44,16 +44,16 @@ public function loadFixtures() $this->membership->addPrivilege($this->privileges[1]); $this->membership->addPrivilege($this->privileges[2]); - $this->_em->persist($this->user); - $this->_em->persist($this->merchant); - $this->_em->persist($this->privileges[0]); - $this->_em->persist($this->privileges[1]); - $this->_em->persist($this->privileges[2]); - $this->_em->flush(); + $this->em->persist($this->user); + $this->em->persist($this->merchant); + $this->em->persist($this->privileges[0]); + $this->em->persist($this->privileges[1]); + $this->em->persist($this->privileges[2]); + $this->em->flush(); - $this->_em->persist($this->membership); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($this->membership); + $this->em->flush(); + $this->em->clear(); } public function testIssue() @@ -63,38 +63,38 @@ public function testIssue() 'userAccount' => $this->user->getUid(), ]; - $membership = $this->_em->find(DDC2252Membership::class, $identifier); + $membership = $this->em->find(DDC2252Membership::class, $identifier); self::assertInstanceOf(DDC2252Membership::class, $membership); self::assertCount(3, $membership->getPrivileges()); $membership->getPrivileges()->remove(2); - $this->_em->persist($membership); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($membership); + $this->em->flush(); + $this->em->clear(); - $membership = $this->_em->find(DDC2252Membership::class, $identifier); + $membership = $this->em->find(DDC2252Membership::class, $identifier); self::assertInstanceOf(DDC2252Membership::class, $membership); self::assertCount(2, $membership->getPrivileges()); $membership->getPrivileges()->clear(); - $this->_em->persist($membership); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($membership); + $this->em->flush(); + $this->em->clear(); - $membership = $this->_em->find(DDC2252Membership::class, $identifier); + $membership = $this->em->find(DDC2252Membership::class, $identifier); self::assertInstanceOf(DDC2252Membership::class, $membership); self::assertCount(0, $membership->getPrivileges()); $membership->addPrivilege($privilege3 = new DDC2252Privilege); - $this->_em->persist($privilege3); - $this->_em->persist($membership); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($privilege3); + $this->em->persist($membership); + $this->em->flush(); + $this->em->clear(); - $membership = $this->_em->find(DDC2252Membership::class, $identifier); + $membership = $this->em->find(DDC2252Membership::class, $identifier); self::assertInstanceOf(DDC2252Membership::class, $membership); self::assertCount(1, $membership->getPrivileges()); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2256Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2256Test.php index 02281a5e3a0..145143ed672 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2256Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2256Test.php @@ -14,17 +14,17 @@ protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2256User::class), - $this->_em->getClassMetadata(DDC2256Group::class) + $this->em->getClassMetadata(DDC2256User::class), + $this->em->getClassMetadata(DDC2256Group::class) ] ); } public function testIssue() { - $config = $this->_em->getConfiguration(); + $config = $this->em->getConfiguration(); $config->addEntityNamespace('MyNamespace', __NAMESPACE__); $user = new DDC2256User(); @@ -33,10 +33,10 @@ public function testIssue() $group->name = 'group'; $user->group = $group; - $this->_em->persist($user); - $this->_em->persist($group); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->persist($group); + $this->em->flush(); + $this->em->clear(); $sql = 'SELECT u.id, u.name, g.id as group_id, g.name as group_name FROM ddc2256_users u LEFT JOIN ddc2256_groups g ON u.group_id = g.id'; @@ -51,14 +51,14 @@ public function testIssue() $rsm->addFieldResult('g', 'group_id', 'id'); $rsm->addFieldResult('g', 'group_name', 'name'); - self::assertCount(1, $this->_em->createNativeQuery($sql, $rsm)->getResult()); + self::assertCount(1, $this->em->createNativeQuery($sql, $rsm)->getResult()); // Test ResultSetMappingBuilder. - $rsm = new ResultSetMappingBuilder($this->_em); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata('MyNamespace:DDC2256User', 'u'); $rsm->addJoinedEntityFromClassMetadata('MyNamespace:DDC2256Group', 'g', 'u', 'group', ['id' => 'group_id', 'name' => 'group_name']); - self::assertCount(1, $this->_em->createNativeQuery($sql, $rsm)->getResult()); + self::assertCount(1, $this->em->createNativeQuery($sql, $rsm)->getResult()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2306Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2306Test.php index 2bf7141d1a9..1cb1cbd8553 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2306Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2306Test.php @@ -17,12 +17,12 @@ protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2306Zone::class), - $this->_em->getClassMetadata(DDC2306User::class), - $this->_em->getClassMetadata(DDC2306Address::class), - $this->_em->getClassMetadata(DDC2306UserAddress::class), + $this->em->getClassMetadata(DDC2306Zone::class), + $this->em->getClassMetadata(DDC2306User::class), + $this->em->getClassMetadata(DDC2306Address::class), + $this->em->getClassMetadata(DDC2306UserAddress::class), ] ); } @@ -48,15 +48,15 @@ public function testIssue() $user->zone = $zone; $address->zone = $zone; - $this->_em->persist($zone); - $this->_em->persist($user); - $this->_em->persist($address); - $this->_em->persist($userAddress); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($zone); + $this->em->persist($user); + $this->em->persist($address); + $this->em->persist($userAddress); + $this->em->flush(); + $this->em->clear(); /* @var $address DDC2306Address */ - $address = $this->_em->find(DDC2306Address::class, $address->id); + $address = $this->em->find(DDC2306Address::class, $address->id); /* @var $user DDC2306User|Proxy */ $user = $address->users->first()->user; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2346Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2346Test.php index 722b51a4dec..b64f0850d43 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2346Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2346Test.php @@ -22,11 +22,11 @@ protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2346Foo::class), - $this->_em->getClassMetadata(DDC2346Bar::class), - $this->_em->getClassMetadata(DDC2346Baz::class), + $this->em->getClassMetadata(DDC2346Foo::class), + $this->em->getClassMetadata(DDC2346Bar::class), + $this->em->getClassMetadata(DDC2346Baz::class), ] ); @@ -50,17 +50,17 @@ public function testIssue() $foo1->bars[] = $baz1; $foo1->bars[] = $baz2; - $this->_em->persist($foo1); - $this->_em->persist($foo2); - $this->_em->persist($baz1); - $this->_em->persist($baz2); + $this->em->persist($foo1); + $this->em->persist($foo2); + $this->em->persist($baz1); + $this->em->persist($baz2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $this->_em->getConnection()->getConfiguration()->setSQLLogger($this->logger); + $this->em->getConnection()->getConfiguration()->setSQLLogger($this->logger); - $fetchedBazs = $this->_em->getRepository(DDC2346Baz::class)->findAll(); + $fetchedBazs = $this->em->getRepository(DDC2346Baz::class)->findAll(); self::assertCount(2, $fetchedBazs); self::assertCount(2, $this->logger->queries, 'The total number of executed queries is 2, and not n+1'); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2350Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2350Test.php index 3b612bdaa48..3115e1724b8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2350Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2350Test.php @@ -14,10 +14,10 @@ protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2350User::class), - $this->_em->getClassMetadata(DDC2350Bug::class), + $this->em->getClassMetadata(DDC2350User::class), + $this->em->getClassMetadata(DDC2350Bug::class), ] ); } @@ -30,15 +30,15 @@ public function testEagerCollectionsAreOnlyRetrievedOnce() $bug2 = new DDC2350Bug(); $bug2->user = $user; - $this->_em->persist($user); - $this->_em->persist($bug1); - $this->_em->persist($bug2); - $this->_em->flush(); + $this->em->persist($user); + $this->em->persist($bug1); + $this->em->persist($bug2); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); $cnt = $this->getCurrentQueryCount(); - $user = $this->_em->find(DDC2350User::class, $user->id); + $user = $this->em->find(DDC2350User::class, $user->id); self::assertEquals($cnt + 1, $this->getCurrentQueryCount()); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php index 5d3ea60a84d..c2c60d7b1ff 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php @@ -9,11 +9,11 @@ class DDC237Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC237EntityX::class), - $this->_em->getClassMetadata(DDC237EntityY::class), - $this->_em->getClassMetadata(DDC237EntityZ::class) + $this->em->getClassMetadata(DDC237EntityX::class), + $this->em->getClassMetadata(DDC237EntityY::class), + $this->em->getClassMetadata(DDC237EntityZ::class) ] ); } @@ -31,20 +31,20 @@ public function testUninitializedProxyIsInitializedOnFetchJoin() $x->y = $y; $z->y = $y; - $this->_em->persist($x); - $this->_em->persist($y); - $this->_em->persist($z); + $this->em->persist($x); + $this->em->persist($y); + $this->em->persist($z); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $x2 = $this->_em->find(get_class($x), $x->id); // proxy injected for Y + $x2 = $this->em->find(get_class($x), $x->id); // proxy injected for Y self::assertInstanceOf(Proxy::class, $x2->y); self::assertFalse($x2->y->__isInitialized__); // proxy for Y is in identity map - $z2 = $this->_em->createQuery('select z,y from ' . get_class($z) . ' z join z.y y where z.id = ?1') + $z2 = $this->em->createQuery('select z,y from ' . get_class($z) . ' z join z.y y where z.id = ?1') ->setParameter(1, $z->id) ->getSingleResult(); self::assertInstanceOf(Proxy::class, $z2->y); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2409Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2409Test.php index cee4859a679..792c692c136 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2409Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2409Test.php @@ -19,7 +19,7 @@ public function setUp() public function testIssue() { - $em = $this->_em; + $em = $this->em; $uow = $em->getUnitOfWork(); $originalArticle = new CmsArticle(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php index 4828731da8c..12a6a05efc9 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php @@ -19,20 +19,20 @@ protected function setUp() { parent::setUp(); - $this->_em->getConfiguration()->setMetadataDriverImpl(new StaticPHPDriver([])); + $this->em->getConfiguration()->setMetadataDriverImpl(new StaticPHPDriver([])); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2415ParentEntity::class), - $this->_em->getClassMetadata(DDC2415ChildEntity::class), + $this->em->getClassMetadata(DDC2415ParentEntity::class), + $this->em->getClassMetadata(DDC2415ChildEntity::class), ] ); } public function testTicket() { - $parentMetadata = $this->_em->getClassMetadata(DDC2415ParentEntity::class); - $childMetadata = $this->_em->getClassMetadata(DDC2415ChildEntity::class); + $parentMetadata = $this->em->getClassMetadata(DDC2415ParentEntity::class); + $childMetadata = $this->em->getClassMetadata(DDC2415ChildEntity::class); self::assertEquals($parentMetadata->generatorType, $childMetadata->generatorType); self::assertEquals($parentMetadata->generatorDefinition, $childMetadata->generatorDefinition); @@ -41,10 +41,10 @@ public function testTicket() $e1 = new DDC2415ChildEntity("ChildEntity 1"); $e2 = new DDC2415ChildEntity("ChildEntity 2"); - $this->_em->persist($e1); - $this->_em->persist($e2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($e1); + $this->em->persist($e2); + $this->em->flush(); + $this->em->clear(); self::assertEquals(md5($e1->getName()), $e1->getId()); self::assertEquals(md5($e2->getName()), $e2->getId()); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2494Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2494Test.php index f2e2267434d..6de21083fe0 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2494Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2494Test.php @@ -19,10 +19,10 @@ protected function setUp() Type::addType('ddc2494_tinyint', DDC2494TinyIntType::class); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2494Currency::class), - $this->_em->getClassMetadata(DDC2494Campaign::class), + $this->em->getClassMetadata(DDC2494Currency::class), + $this->em->getClassMetadata(DDC2494Campaign::class), ] ); } @@ -31,19 +31,19 @@ public function testIssue() { $currency = new DDC2494Currency(1, 2); - $this->_em->persist($currency); - $this->_em->flush(); + $this->em->persist($currency); + $this->em->flush(); $campaign = new DDC2494Campaign($currency); - $this->_em->persist($campaign); - $this->_em->flush(); - $this->_em->close(); + $this->em->persist($campaign); + $this->em->flush(); + $this->em->close(); self::assertArrayHasKey('convertToDatabaseValue', DDC2494TinyIntType::$calls); self::assertCount(3, DDC2494TinyIntType::$calls['convertToDatabaseValue']); - $item = $this->_em->find(DDC2494Campaign::class, $campaign->getId()); + $item = $this->em->find(DDC2494Campaign::class, $campaign->getId()); self::assertInstanceOf(DDC2494Campaign::class, $item); self::assertInstanceOf(DDC2494Currency::class, $item->getCurrency()); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2519Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2519Test.php index 36fc4918056..63ef5d16fcd 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2519Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2519Test.php @@ -26,8 +26,8 @@ public function setUp() */ public function testIssue() { - $dql = 'SELECT PARTIAL l.{_source, _target} FROM Doctrine\Tests\Models\Legacy\LegacyUserReference l'; - $result = $this->_em->createQuery($dql)->getResult(); + $dql = 'SELECT PARTIAL l.{source, target} FROM Doctrine\Tests\Models\Legacy\LegacyUserReference l'; + $result = $this->em->createQuery($dql)->getResult(); self::assertCount(2, $result); self::assertInstanceOf(LegacyUserReference::class, $result[0]); @@ -57,30 +57,30 @@ public function testIssue() public function loadFixture() { $user1 = new LegacyUser(); - $user1->_username = 'FabioBatSilva'; - $user1->_name = 'Fabio B. Silva'; - $user1->_status = 'active'; + $user1->username = 'FabioBatSilva'; + $user1->name = 'Fabio B. Silva'; + $user1->status = 'active'; $user2 = new LegacyUser(); - $user2->_username = 'doctrinebot'; - $user2->_name = 'Doctrine Bot'; - $user2->_status = 'active'; + $user2->username = 'doctrinebot'; + $user2->name = 'Doctrine Bot'; + $user2->status = 'active'; $user3 = new LegacyUser(); - $user3->_username = 'test'; - $user3->_name = 'Tester'; - $user3->_status = 'active'; + $user3->username = 'test'; + $user3->name = 'Tester'; + $user3->status = 'active'; - $this->_em->persist($user1); - $this->_em->persist($user2); - $this->_em->persist($user3); + $this->em->persist($user1); + $this->em->persist($user2); + $this->em->persist($user3); - $this->_em->flush(); + $this->em->flush(); - $this->_em->persist(new LegacyUserReference($user1, $user2, 'foo')); - $this->_em->persist(new LegacyUserReference($user1, $user3, 'bar')); + $this->em->persist(new LegacyUserReference($user1, $user2, 'foo')); + $this->em->persist(new LegacyUserReference($user1, $user3, 'bar')); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2575Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2575Test.php index b464cb392a7..1ea9a51d7a8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2575Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2575Test.php @@ -15,11 +15,11 @@ protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2575Root::class), - $this->_em->getClassMetadata(DDC2575A::class), - $this->_em->getClassMetadata(DDC2575B::class), + $this->em->getClassMetadata(DDC2575Root::class), + $this->em->getClassMetadata(DDC2575A::class), + $this->em->getClassMetadata(DDC2575B::class), ] ); @@ -27,19 +27,19 @@ protected function setUp() $entityB1 = new DDC2575B(2); $entityA1 = new DDC2575A($entityRoot1, $entityB1); - $this->_em->persist($entityRoot1); - $this->_em->persist($entityA1); - $this->_em->persist($entityB1); + $this->em->persist($entityRoot1); + $this->em->persist($entityA1); + $this->em->persist($entityB1); $entityRoot2 = new DDC2575Root(3); $entityB2 = new DDC2575B(4); $entityA2 = new DDC2575A($entityRoot2, $entityB2); - $this->_em->persist($entityRoot2); - $this->_em->persist($entityA2); - $this->_em->persist($entityB2); + $this->em->persist($entityRoot2); + $this->em->persist($entityA2); + $this->em->persist($entityB2); - $this->_em->flush(); + $this->em->flush(); $this->rootsEntities[] = $entityRoot1; $this->rootsEntities[] = $entityRoot2; @@ -50,12 +50,12 @@ protected function setUp() $this->bEntities[] = $entityB1; $this->bEntities[] = $entityB2; - $this->_em->clear(); + $this->em->clear(); } public function testHydrationIssue() { - $repository = $this->_em->getRepository(DDC2575Root::class); + $repository = $this->em->getRepository(DDC2575Root::class); $qb = $repository->createQueryBuilder('r') ->select('r, a, b') ->leftJoin('r.aRelation', 'a') diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2579Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2579Test.php index df17406457e..26b6f1948fa 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2579Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2579Test.php @@ -17,11 +17,11 @@ protected function setUp() Type::addType(DDC2579Type::NAME, DDC2579Type::class); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2579Entity::class), - $this->_em->getClassMetadata(DDC2579EntityAssoc::class), - $this->_em->getClassMetadata(DDC2579AssocAssoc::class), + $this->em->getClassMetadata(DDC2579Entity::class), + $this->em->getClassMetadata(DDC2579EntityAssoc::class), + $this->em->getClassMetadata(DDC2579AssocAssoc::class), ] ); } @@ -32,18 +32,18 @@ public function testIssue() $assoc = new DDC2579AssocAssoc($id); $assocAssoc = new DDC2579EntityAssoc($assoc); $entity = new DDC2579Entity($assocAssoc); - $repository = $this->_em->getRepository(DDC2579Entity::class); + $repository = $this->em->getRepository(DDC2579Entity::class); - $this->_em->persist($assoc); - $this->_em->persist($assocAssoc); - $this->_em->persist($entity); - $this->_em->flush(); + $this->em->persist($assoc); + $this->em->persist($assocAssoc); + $this->em->persist($entity); + $this->em->flush(); $entity->value++; - $this->_em->persist($entity); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($entity); + $this->em->flush(); + $this->em->clear(); $id = $entity->id; $value = $entity->value; @@ -53,9 +53,9 @@ public function testIssue() self::assertInstanceOf(DDC2579Entity::class, $entity); self::assertEquals($value, $entity->value); - $this->_em->remove($entity); - $this->_em->flush(); - $this->_em->clear(); + $this->em->remove($entity); + $this->em->flush(); + $this->em->clear(); self::assertNull($repository->findOneBy($criteria)); self::assertCount(0, $repository->findAll()); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC258Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC258Test.php index 1cfb340fd2e..150c818cad1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC258Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC258Test.php @@ -9,12 +9,12 @@ class DDC258Test extends OrmFunctionalTestCase protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC258Super::class), - $this->_em->getClassMetadata(DDC258Class1::class), - $this->_em->getClassMetadata(DDC258Class2::class), - $this->_em->getClassMetadata(DDC258Class3::class), + $this->em->getClassMetadata(DDC258Super::class), + $this->em->getClassMetadata(DDC258Class1::class), + $this->em->getClassMetadata(DDC258Class2::class), + $this->em->getClassMetadata(DDC258Class3::class), ] ); } @@ -24,7 +24,7 @@ protected function setUp() */ public function testIssue() { - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); $c1 = new DDC258Class1(); $c1->title = "Foo"; @@ -39,20 +39,20 @@ public function testIssue() $c3->apples = "Baz"; $c3->bananas = "Baz"; - $this->_em->persist($c1); - $this->_em->persist($c2); - $this->_em->persist($c3); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($c1); + $this->em->persist($c2); + $this->em->persist($c3); + $this->em->flush(); + $this->em->clear(); - $e2 = $this->_em->find(DDC258Super::class, $c2->id); + $e2 = $this->em->find(DDC258Super::class, $c2->id); self::assertInstanceOf(DDC258Class2::class, $e2); self::assertEquals('Bar', $e2->title); self::assertEquals('Bar', $e2->description); self::assertEquals('Bar', $e2->text); - $all = $this->_em->getRepository(DDC258Super::class)->findAll(); + $all = $this->em->getRepository(DDC258Super::class)->findAll(); foreach ($all as $obj) { if ($obj instanceof DDC258Class1) { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2645Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2645Test.php index 088930cb487..1ba328f1a38 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2645Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2645Test.php @@ -15,10 +15,10 @@ public function testIssue() $foo = new DDC2645Foo(1, $bar, 'Foo'); $foo2 = new DDC2645Foo(1, $bar, 'Bar'); - $this->_em->persist($bar); - $this->_em->persist($foo); + $this->em->persist($bar); + $this->em->persist($foo); - $foo3 = $this->_em->merge($foo2); + $foo3 = $this->em->merge($foo2); self::assertSame($foo, $foo3); self::assertEquals('Bar', $foo->name); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2655Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2655Test.php index 715e26d5276..f79bed05c29 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2655Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2655Test.php @@ -17,7 +17,7 @@ public function setUp() public function testSingleScalarOneOrNullResult() { - $query = $this->_em->createQuery("SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = 'happy_doctrine_user'"); + $query = $this->em->createQuery("SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = 'happy_doctrine_user'"); self::assertNull($query->getOneOrNullResult(Query::HYDRATE_SINGLE_SCALAR)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2660Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2660Test.php index 6e4373ff8d1..ab48caac5e6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2660Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2660Test.php @@ -17,11 +17,11 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2660Product::class), - $this->_em->getClassMetadata(DDC2660Customer::class), - $this->_em->getClassMetadata(DDC2660CustomerOrder::class) + $this->em->getClassMetadata(DDC2660Product::class), + $this->em->getClassMetadata(DDC2660Customer::class), + $this->em->getClassMetadata(DDC2660CustomerOrder::class) ] ); } catch(\Exception $e) { @@ -33,25 +33,25 @@ protected function setUp() $customer = new DDC2660Customer(); $order = new DDC2660CustomerOrder($product, $customer, 'name' . $i); - $this->_em->persist($product); - $this->_em->persist($customer); - $this->_em->flush(); + $this->em->persist($product); + $this->em->persist($customer); + $this->em->flush(); - $this->_em->persist($order); - $this->_em->flush(); + $this->em->persist($order); + $this->em->flush(); } - $this->_em->clear(); + $this->em->clear(); } public function testIssueWithExtraColumn() { $sql = "SELECT o.product_id, o.customer_id, o.name FROM ddc_2660_customer_order o"; - $rsm = new ResultSetMappingBuilder($this->_getEntityManager()); + $rsm = new ResultSetMappingBuilder($this->getEntityManager()); $rsm->addRootEntityFromClassMetadata(DDC2660CustomerOrder::class, 'c'); - $query = $this->_em->createNativeQuery($sql, $rsm); + $query = $this->em->createNativeQuery($sql, $rsm); $result = $query->getResult(); self::assertCount(5, $result); @@ -66,10 +66,10 @@ public function testIssueWithoutExtraColumn() { $sql = "SELECT o.product_id, o.customer_id FROM ddc_2660_customer_order o"; - $rsm = new ResultSetMappingBuilder($this->_getEntityManager()); + $rsm = new ResultSetMappingBuilder($this->getEntityManager()); $rsm->addRootEntityFromClassMetadata(DDC2660CustomerOrder::class, 'c'); - $query = $this->_em->createNativeQuery($sql, $rsm); + $query = $this->em->createNativeQuery($sql, $rsm); $result = $query->getResult(); self::assertCount(5, $result); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2692Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2692Test.php index 1e9f05e4768..62e5344316a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2692Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2692Test.php @@ -18,15 +18,15 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2692Foo::class), + $this->em->getClassMetadata(DDC2692Foo::class), ] ); } catch(\Exception $e) { return; } - $this->_em->clear(); + $this->em->clear(); } public function testIsListenerCalledOnlyOnceOnPreFlush() @@ -37,13 +37,13 @@ public function testIsListenerCalledOnlyOnceOnPreFlush() $listener->expects($this->once())->method('preFlush'); - $this->_em->getEventManager()->addEventSubscriber($listener); + $this->em->getEventManager()->addEventSubscriber($listener); - $this->_em->persist(new DDC2692Foo); - $this->_em->persist(new DDC2692Foo); + $this->em->persist(new DDC2692Foo); + $this->em->persist(new DDC2692Foo); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2759Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2759Test.php index 357a8ed3c28..ada16a190ea 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2759Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2759Test.php @@ -15,12 +15,12 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2759Qualification::class), - $this->_em->getClassMetadata(DDC2759Category::class), - $this->_em->getClassMetadata(DDC2759QualificationMetadata::class), - $this->_em->getClassMetadata(DDC2759MetadataCategory::class), + $this->em->getClassMetadata(DDC2759Qualification::class), + $this->em->getClassMetadata(DDC2759Category::class), + $this->em->getClassMetadata(DDC2759QualificationMetadata::class), + $this->em->getClassMetadata(DDC2759MetadataCategory::class), ] ); } catch(\Exception $e) { @@ -36,22 +36,22 @@ protected function setUp() $metadataCategory1 = new DDC2759MetadataCategory($qualificationMetadata, $category1); $metadataCategory2 = new DDC2759MetadataCategory($qualificationMetadata, $category2); - $this->_em->persist($qualification); - $this->_em->persist($qualificationMetadata); + $this->em->persist($qualification); + $this->em->persist($qualificationMetadata); - $this->_em->persist($category1); - $this->_em->persist($category2); + $this->em->persist($category1); + $this->em->persist($category2); - $this->_em->persist($metadataCategory1); - $this->_em->persist($metadataCategory2); + $this->em->persist($metadataCategory1); + $this->em->persist($metadataCategory2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } public function testCorrectNumberOfAssociationsIsReturned() { - $repository = $this->_em->getRepository(DDC2759Qualification::class); + $repository = $this->em->getRepository(DDC2759Qualification::class); $builder = $repository->createQueryBuilder('q') ->select('q, qm, qmc') diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2775Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2775Test.php index b84024f048d..cae5c0a07fd 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2775Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2775Test.php @@ -38,21 +38,21 @@ public function testIssueCascadeRemove() $user->addAuthorization($authorization); $role->addAuthorization($authorization); - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); // Need to clear so that associations are lazy-loaded - $this->_em->clear(); + $this->em->clear(); - $user = $this->_em->find(User::class, $user->id); + $user = $this->em->find(User::class, $user->id); - $this->_em->remove($user); - $this->_em->flush(); + $this->em->remove($user); + $this->em->flush(); self::assertEmpty($this->_em->getRepository(Authorization::class)->findAll()); // With the bug, the second flush throws an error because the cascade remove didn't work correctly - $this->_em->flush(); + $this->em->flush(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2790Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2790Test.php index 907a7e081e0..0e708aeaac7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2790Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2790Test.php @@ -26,28 +26,28 @@ protected function setUp() */ public function testIssue() { - $this->_em->getEventManager()->addEventListener(Events::onFlush, new OnFlushListener); + $this->em->getEventManager()->addEventListener(Events::onFlush, new OnFlushListener); $entity = new CmsUser; $entity->username = 'romanb'; $entity->name = 'Roman'; - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->from(get_class($entity), 'c'); $qb->select("count(c)"); $initial = intval($qb->getQuery()->getSingleScalarResult()); - $this->_em->persist($entity); - $this->_em->flush(); + $this->em->persist($entity); + $this->em->flush(); - $this->_em->remove($entity); + $this->em->remove($entity); // in Doctrine <2.5, this causes an UPDATE statement to be added before the DELETE statement // (and consequently also triggers preUpdate/postUpdate for the entity in question) $entity->name = 'Robin'; - $this->_em->flush($entity); + $this->em->flush($entity); - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->from(get_class($entity), 'c'); $qb->select("count(c)"); $count = intval($qb->getQuery()->getSingleScalarResult()); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC279Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC279Test.php index 5e67be72574..b3d0240db05 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC279Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC279Test.php @@ -7,12 +7,12 @@ class DDC279Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC279EntityXAbstract::class), - $this->_em->getClassMetadata(DDC279EntityX::class), - $this->_em->getClassMetadata(DDC279EntityY::class), - $this->_em->getClassMetadata(DDC279EntityZ::class), + $this->em->getClassMetadata(DDC279EntityXAbstract::class), + $this->em->getClassMetadata(DDC279EntityX::class), + $this->em->getClassMetadata(DDC279EntityY::class), + $this->em->getClassMetadata(DDC279EntityZ::class), ] ); } @@ -33,14 +33,14 @@ public function testDDC279() $x->y = $y; $y->z = $z; - $this->_em->persist($x); - $this->_em->persist($y); - $this->_em->persist($z); + $this->em->persist($x); + $this->em->persist($y); + $this->em->persist($z); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $query = $this->_em->createQuery( + $query = $this->em->createQuery( 'SELECT x, y, z FROM Doctrine\Tests\ORM\Functional\Ticket\DDC279EntityX x '. 'INNER JOIN x.y y INNER JOIN y.z z WHERE x.id = ?1' )->setParameter(1, $x->id); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php index 7e5fdf54365..41d2de27545 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php @@ -20,7 +20,7 @@ protected function setUp() { parent::setUp(); - $platform = $this->_em->getConnection()->getDatabasePlatform(); + $platform = $this->em->getConnection()->getDatabasePlatform(); if ( ! $platform->supportsSchemas() && ! $platform->canEmulateSchemas()) { $this->markTestSkipped("This test is only useful for databases that support schemas or can emulate them."); @@ -36,8 +36,8 @@ protected function setUp() */ public function testClassSchemaMappingsValidity($className, $expectedSchemaName, $expectedTableName) { - $classMetadata = $this->_em->getClassMetadata($className); - $platform = $this->_em->getConnection()->getDatabasePlatform(); + $classMetadata = $this->em->getClassMetadata($className); + $platform = $this->em->getConnection()->getDatabasePlatform(); $quotedTableName = $classMetadata->table->getQuotedQualifiedName($platform); // Check if table name and schema properties are defined in the class metadata @@ -66,18 +66,18 @@ public function testClassSchemaMappingsValidity($className, $expectedSchemaName, */ public function testPersistenceOfEntityWithSchemaMapping($className) { - $classMetadata = $this->_em->getClassMetadata($className); - $repository = $this->_em->getRepository($className); + $classMetadata = $this->em->getClassMetadata($className); + $repository = $this->em->getRepository($className); try { - $this->_schemaTool->createSchema([$classMetadata]); + $this->schemaTool->createSchema([$classMetadata]); } catch (ToolsException $e) { // table already exists } - $this->_em->persist(new $className()); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist(new $className()); + $this->em->flush(); + $this->em->clear(); self::assertCount(1, $repository->findAll()); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2862Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2862Test.php index 726df35ec1c..a4e401c66b6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2862Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2862Test.php @@ -16,10 +16,10 @@ public function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2862User::class), - $this->_em->getClassMetadata(DDC2862Driver::class), + $this->em->getClassMetadata(DDC2862User::class), + $this->em->getClassMetadata(DDC2862Driver::class), ] ); } catch (ToolsException $exc) { @@ -31,16 +31,16 @@ public function testIssue() $user1 = new DDC2862User('Foo'); $driver1 = new DDC2862Driver('Bar' , $user1); - $this->_em->persist($user1); - $this->_em->persist($driver1); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user1); + $this->em->persist($driver1); + $this->em->flush(); + $this->em->clear(); - self::assertTrue($this->_em->getCache()->containsEntity(DDC2862User::class, ['id' => $user1->getId()])); - self::assertTrue($this->_em->getCache()->containsEntity(DDC2862Driver::class, ['id' => $driver1->getId()])); + self::assertTrue($this->em->getCache()->containsEntity(DDC2862User::class, ['id' => $user1->getId()])); + self::assertTrue($this->em->getCache()->containsEntity(DDC2862Driver::class, ['id' => $driver1->getId()])); $queryCount = $this->getCurrentQueryCount(); - $driver2 = $this->_em->find(DDC2862Driver::class, $driver1->getId()); + $driver2 = $this->em->find(DDC2862Driver::class, $driver1->getId()); self::assertEquals($queryCount, $this->getCurrentQueryCount()); self::assertInstanceOf(DDC2862Driver::class, $driver2); @@ -48,14 +48,14 @@ public function testIssue() $driver2->setName('Franta'); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - self::assertTrue($this->_em->getCache()->containsEntity(DDC2862User::class, ['id' => $user1->getId()])); - self::assertTrue($this->_em->getCache()->containsEntity(DDC2862Driver::class, ['id' => $driver1->getId()])); + self::assertTrue($this->em->getCache()->containsEntity(DDC2862User::class, ['id' => $user1->getId()])); + self::assertTrue($this->em->getCache()->containsEntity(DDC2862Driver::class, ['id' => $driver1->getId()])); $queryCount = $this->getCurrentQueryCount(); - $driver3 = $this->_em->find(DDC2862Driver::class, $driver1->getId()); + $driver3 = $this->em->find(DDC2862Driver::class, $driver1->getId()); self::assertEquals($queryCount, $this->getCurrentQueryCount()); self::assertInstanceOf(DDC2862Driver::class, $driver3); @@ -69,31 +69,31 @@ public function testIssueReopened() $user1 = new DDC2862User('Foo'); $driver1 = new DDC2862Driver('Bar' , $user1); - $this->_em->persist($user1); - $this->_em->persist($driver1); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user1); + $this->em->persist($driver1); + $this->em->flush(); + $this->em->clear(); - $this->_em->getCache()->evictEntityRegion(DDC2862User::class); - $this->_em->getCache()->evictEntityRegion(DDC2862Driver::class); + $this->em->getCache()->evictEntityRegion(DDC2862User::class); + $this->em->getCache()->evictEntityRegion(DDC2862Driver::class); - self::assertFalse($this->_em->getCache()->containsEntity(DDC2862User::class, ['id' => $user1->getId()])); - self::assertFalse($this->_em->getCache()->containsEntity(DDC2862Driver::class, ['id' => $driver1->getId()])); + self::assertFalse($this->em->getCache()->containsEntity(DDC2862User::class, ['id' => $user1->getId()])); + self::assertFalse($this->em->getCache()->containsEntity(DDC2862Driver::class, ['id' => $driver1->getId()])); $queryCount = $this->getCurrentQueryCount(); - $driver2 = $this->_em->find(DDC2862Driver::class, $driver1->getId()); + $driver2 = $this->em->find(DDC2862Driver::class, $driver1->getId()); self::assertInstanceOf(DDC2862Driver::class, $driver2); self::assertInstanceOf(DDC2862User::class, $driver2->getUserProfile()); self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->_em->clear(); + $this->em->clear(); - self::assertFalse($this->_em->getCache()->containsEntity(DDC2862User::class, ['id' => $user1->getId()])); - self::assertTrue($this->_em->getCache()->containsEntity(DDC2862Driver::class, ['id' => $driver1->getId()])); + self::assertFalse($this->em->getCache()->containsEntity(DDC2862User::class, ['id' => $user1->getId()])); + self::assertTrue($this->em->getCache()->containsEntity(DDC2862Driver::class, ['id' => $driver1->getId()])); $queryCount = $this->getCurrentQueryCount(); - $driver3 = $this->_em->find(DDC2862Driver::class, $driver1->getId()); + $driver3 = $this->em->find(DDC2862Driver::class, $driver1->getId()); self::assertInstanceOf(DDC2862Driver::class, $driver3); self::assertInstanceOf(DDC2862User::class, $driver3->getUserProfile()); @@ -102,7 +102,7 @@ public function testIssueReopened() self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); $queryCount = $this->getCurrentQueryCount(); - $driver4 = $this->_em->find(DDC2862Driver::class, $driver1->getId()); + $driver4 = $this->em->find(DDC2862Driver::class, $driver1->getId()); self::assertInstanceOf(DDC2862Driver::class, $driver4); self::assertInstanceOf(DDC2862User::class, $driver4->getUserProfile()); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2895Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2895Test.php index 20f1f5ba993..9e6155ecb5e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2895Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2895Test.php @@ -13,9 +13,9 @@ public function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2895::class), + $this->em->getClassMetadata(DDC2895::class), ] ); } catch(\Exception $e) { @@ -25,7 +25,7 @@ public function setUp() public function testPostLoadOneToManyInheritance() { - $cm = $this->_em->getClassMetadata(DDC2895::class); + $cm = $this->em->getClassMetadata(DDC2895::class); self::assertEquals( [ @@ -37,12 +37,12 @@ public function testPostLoadOneToManyInheritance() $ddc2895 = new DDC2895(); - $this->_em->persist($ddc2895); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($ddc2895); + $this->em->flush(); + $this->em->clear(); /** @var DDC2895 $ddc2895 */ - $ddc2895 = $this->_em->find(get_class($ddc2895), $ddc2895->id); + $ddc2895 = $this->em->find(get_class($ddc2895), $ddc2895->id); self::assertNotNull($ddc2895->getLastModified()); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2931Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2931Test.php index 97b6798c815..798e6fc6d15 100755 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2931Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2931Test.php @@ -14,9 +14,9 @@ public function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2931User::class), + $this->em->getClassMetadata(DDC2931User::class), ] ); } catch (\Exception $e) { @@ -33,14 +33,14 @@ public function testIssue() $second->parent = $first; $third->parent = $second; - $this->_em->persist($first); - $this->_em->persist($second); - $this->_em->persist($third); + $this->em->persist($first); + $this->em->persist($second); + $this->em->persist($third); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $second = $this->_em->find(DDC2931User::class, $second->id); + $second = $this->em->find(DDC2931User::class, $second->id); self::assertSame(2, $second->getRank()); } @@ -58,18 +58,18 @@ public function testFetchJoinedEntitiesCanBeRefreshed() $second->value = 2; $third->value = 3; - $this->_em->persist($first); - $this->_em->persist($second); - $this->_em->persist($third); + $this->em->persist($first); + $this->em->persist($second); + $this->em->persist($third); - $this->_em->flush(); + $this->em->flush(); $first->value = 4; $second->value = 5; $third->value = 6; $refreshedSecond = $this - ->_em + ->em ->createQuery( 'SELECT e, p, c FROM ' . __NAMESPACE__ . '\\DDC2931User e LEFT JOIN e.parent p LEFT JOIN e.child c WHERE e = :id' diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2943Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2943Test.php index 2feb78c65d7..b270b5ad264 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2943Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2943Test.php @@ -21,28 +21,28 @@ public function setUp() private function loadFixtures() { - $this->_em->persist(new Country("Brazil")); - $this->_em->persist(new Country("Canada")); - $this->_em->persist(new Country("Germany")); - $this->_em->persist(new Country("France")); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist(new Country("Brazil")); + $this->em->persist(new Country("Canada")); + $this->em->persist(new Country("Germany")); + $this->em->persist(new Country("France")); + $this->em->flush(); + $this->em->clear(); } public function testIssue() { $this->loadFixtures(); - $region = $this->_em->getCache()->getEntityCacheRegion(Country::class); + $region = $this->em->getCache()->getEntityCacheRegion(Country::class); $dql = 'SELECT c FROM Doctrine\Tests\Models\Cache\Country c'; - $query = $this->_em->createQuery($dql) + $query = $this->em->createQuery($dql) ->setCacheable(true) ->setFirstResult(0) ->setMaxResults(2); self::assertPaginatorQueryPut(new Paginator(clone $query), $region->getName(), 4, 2); - $this->_em->clear(); + $this->em->clear(); $this->secondLevelCacheLogger->clearStats(); self::assertPaginatorQueryHit(new Paginator(clone $query), $region->getName(), 4, 2); @@ -52,16 +52,16 @@ public function testIssueNonFetchJoin() { $this->loadFixtures(); - $region = $this->_em->getCache()->getEntityCacheRegion(Country::class); + $region = $this->em->getCache()->getEntityCacheRegion(Country::class); $dql = 'SELECT c FROM Doctrine\Tests\Models\Cache\Country c'; - $query = $this->_em->createQuery($dql) + $query = $this->em->createQuery($dql) ->setCacheable(true) ->setFirstResult(0) ->setMaxResults(2); self::assertPaginatorQueryPut(new Paginator(clone $query, false), $region->getName(), 4, 2); - $this->_em->clear(); + $this->em->clear(); $this->secondLevelCacheLogger->clearStats(); self::assertPaginatorQueryHit(new Paginator(clone $query, false), $region->getName(), 4, 2); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2984Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2984Test.php index 0724b493e39..7a3b0abca96 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2984Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2984Test.php @@ -24,9 +24,9 @@ public function setUp() } try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2984User::class), + $this->em->getClassMetadata(DDC2984User::class), ] ); } catch (\Exception $e) { @@ -39,17 +39,17 @@ public function testIssue() $user = new DDC2984User(new DDC2984DomainUserId('unique_id_within_a_vo')); $user->applyName('Alex'); - $this->_em->persist($user); - $this->_em->flush($user); + $this->em->persist($user); + $this->em->flush($user); - $repository = $this->_em->getRepository(__NAMESPACE__ . "\DDC2984User"); + $repository = $this->em->getRepository(__NAMESPACE__ . "\DDC2984User"); $sameUser = $repository->find(new DDC2984DomainUserId('unique_id_within_a_vo')); //Until know, everything works as expected self::assertTrue($user->sameIdentityAs($sameUser)); - $this->_em->clear(); + $this->em->clear(); //After clearing the identity map, the UnitOfWork produces the warning described in DDC-2984 $equalUser = $repository->find(new DDC2984DomainUserId('unique_id_within_a_vo')); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2996Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2996Test.php index ab996486301..c8e38edb5f5 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2996Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2996Test.php @@ -9,10 +9,10 @@ class DDC2996Test extends \Doctrine\Tests\OrmFunctionalTestCase { public function testIssue() { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2996User::class), - $this->_em->getClassMetadata(DDC2996UserPreference::class), + $this->em->getClassMetadata(DDC2996User::class), + $this->em->getClassMetadata(DDC2996UserPreference::class), ] ); @@ -20,18 +20,18 @@ public function testIssue() $pref->user = new DDC2996User(); $pref->value = "foo"; - $this->_em->persist($pref); - $this->_em->persist($pref->user); - $this->_em->flush(); + $this->em->persist($pref); + $this->em->persist($pref->user); + $this->em->flush(); $pref->value = "bar"; - $this->_em->flush(); + $this->em->flush(); self::assertEquals(1, $pref->user->counter); - $this->_em->clear(); + $this->em->clear(); - $pref = $this->_em->find(DDC2996UserPreference::class, $pref->id); + $pref = $this->em->find(DDC2996UserPreference::class, $pref->id); self::assertEquals(1, $pref->user->counter); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3033Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3033Test.php index 0f926258280..70faf1c1d74 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3033Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3033Test.php @@ -12,33 +12,33 @@ class DDC3033Test extends \Doctrine\Tests\OrmFunctionalTestCase { public function testIssue() { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC3033User::class), - $this->_em->getClassMetadata(DDC3033Product::class), + $this->em->getClassMetadata(DDC3033User::class), + $this->em->getClassMetadata(DDC3033Product::class), ] ); $user = new DDC3033User(); $user->name = "Test User"; - $this->_em->persist($user); + $this->em->persist($user); $user2 = new DDC3033User(); $user2->name = "Test User 2"; - $this->_em->persist($user2); + $this->em->persist($user2); $product = new DDC3033Product(); $product->title = "Test product"; $product->buyers[] = $user; - $this->_em->persist($product); - $this->_em->flush(); + $this->em->persist($product); + $this->em->flush(); $product->title = "Test Change title"; $product->buyers[] = $user2; - $this->_em->persist($product); - $this->_em->flush(); + $this->em->persist($product); + $this->em->flush(); $expect = [ 'title' => [ diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3042Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3042Test.php index 000a10b466a..3e3a6fb407d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3042Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3042Test.php @@ -13,10 +13,10 @@ protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC3042Foo::class), - $this->_em->getClassMetadata(DDC3042Bar::class), + $this->em->getClassMetadata(DDC3042Foo::class), + $this->em->getClassMetadata(DDC3042Bar::class), ] ); } @@ -26,7 +26,7 @@ public function testSQLGenerationDoesNotProvokeAliasCollisions() self::assertStringNotMatchesFormat( '%sfield11%sfield11%s', $this - ->_em + ->em ->createQuery( 'SELECT f, b FROM ' . __NAMESPACE__ . '\DDC3042Foo f JOIN ' . __NAMESPACE__ . '\DDC3042Bar b WITH 1 = 1' ) diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3068Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3068Test.php index fc4d7c8b7ba..d9187a81293 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3068Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3068Test.php @@ -23,24 +23,24 @@ protected function setUp() $this->foo = new Driver(); $this->foo->setName('Foo Bar'); - $this->_em->persist($this->foo); + $this->em->persist($this->foo); $this->merc = new Car(); $this->merc->setBrand('Mercedes'); $this->merc->setModel('C-Class'); - $this->_em->persist($this->merc); + $this->em->persist($this->merc); - $this->_em->flush(); + $this->em->flush(); $ride = new Ride($this->foo, $this->merc); - $this->_em->persist($ride); + $this->em->persist($ride); - $this->_em->flush(); + $this->em->flush(); } public function testFindUsingAnArrayOfObjectAsPrimaryKey() { - $ride1 = $this->_em->find(Ride::class, [ + $ride1 = $this->em->find(Ride::class, [ 'driver' => $this->foo->getId(), 'car' => $this->merc->getBrand() ] @@ -48,7 +48,7 @@ public function testFindUsingAnArrayOfObjectAsPrimaryKey() self::assertInstanceOf(Ride::class, $ride1); - $ride2 = $this->_em->find(Ride::class, [ + $ride2 = $this->em->find(Ride::class, [ 'driver' => $this->foo, 'car' => $this->merc ] diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC309Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC309Test.php index dae25dfdec8..a600ffea938 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC309Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC309Test.php @@ -9,10 +9,10 @@ class DDC309Test extends OrmFunctionalTestCase protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC309Country::class), - $this->_em->getClassMetadata(DDC309User::class), + $this->em->getClassMetadata(DDC309Country::class), + $this->em->getClassMetadata(DDC309User::class), ] ); } @@ -24,19 +24,19 @@ public function testTwoIterateHydrations() $u1 = new DDC309User(); $u2 = new DDC309User(); - $this->_em->persist($c1); - $this->_em->persist($c2); - $this->_em->persist($u1); - $this->_em->persist($u2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($c1); + $this->em->persist($c2); + $this->em->persist($u1); + $this->em->persist($u2); + $this->em->flush(); + $this->em->clear(); - $q = $this->_em->createQuery('SELECT c FROM Doctrine\Tests\ORM\Functional\Ticket\DDC309Country c')->iterate(); + $q = $this->em->createQuery('SELECT c FROM Doctrine\Tests\ORM\Functional\Ticket\DDC309Country c')->iterate(); $c = $q->next(); self::assertEquals(1, $c[0]->id); - $r = $this->_em->createQuery('SELECT u FROM Doctrine\Tests\ORM\Functional\Ticket\DDC309User u')->iterate(); + $r = $this->em->createQuery('SELECT u FROM Doctrine\Tests\ORM\Functional\Ticket\DDC309User u')->iterate(); $u = $r->next(); // This line breaks self::assertEquals(1, $u[0]->id); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3123Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3123Test.php index 515aa9febc7..ef046847a54 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3123Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3123Test.php @@ -20,12 +20,12 @@ public function testIssue() { $test = $this; $user = new CmsUser(); - $uow = $this->_em->getUnitOfWork(); + $uow = $this->em->getUnitOfWork(); $user->name = 'Marco'; $user->username = 'ocramius'; - $this->_em->persist($user); + $this->em->persist($user); $uow->scheduleExtraUpdate($user, ['name' => 'changed name']); $listener = $this->getMockBuilder(\stdClass::class) @@ -39,8 +39,8 @@ public function testIssue() $test->assertAttributeEmpty('extraUpdates', $uow, 'ExtraUpdates are reset before postFlush'); })); - $this->_em->getEventManager()->addEventListener(Events::postFlush, $listener); + $this->em->getEventManager()->addEventListener(Events::postFlush, $listener); - $this->_em->flush(); + $this->em->flush(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3160Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3160Test.php index 3869ed718d8..1ceb6312487 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3160Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3160Test.php @@ -25,17 +25,17 @@ protected function setUp() { public function testNoUpdateOnInsert() { $listener = new DDC3160OnFlushListener(); - $this->_em->getEventManager()->addEventListener(Events::onFlush, $listener); + $this->em->getEventManager()->addEventListener(Events::onFlush, $listener); $user = new CmsUser; $user->username = 'romanb'; $user->name = 'Roman'; $user->status = 'Dev'; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); - $this->_em->refresh($user); + $this->em->refresh($user); self::assertEquals('romanc', $user->username); self::assertEquals(1, $listener->inserts); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3170Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3170Test.php index 45a49b7a6d0..b8f04126300 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3170Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3170Test.php @@ -17,12 +17,12 @@ protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC3170AbstractEntityJoined::class), - $this->_em->getClassMetadata(DDC3170ProductJoined::class), - $this->_em->getClassMetadata(DDC3170AbstractEntitySingleTable::class), - $this->_em->getClassMetadata(DDC3170ProductSingleTable::class), + $this->em->getClassMetadata(DDC3170AbstractEntityJoined::class), + $this->em->getClassMetadata(DDC3170ProductJoined::class), + $this->em->getClassMetadata(DDC3170AbstractEntitySingleTable::class), + $this->em->getClassMetadata(DDC3170ProductSingleTable::class), ] ); } @@ -41,12 +41,12 @@ public function testIssue() $productJoined = new DDC3170ProductJoined(); $productSingleTable = new DDC3170ProductSingleTable(); - $this->_em->persist($productJoined); - $this->_em->persist($productSingleTable); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($productJoined); + $this->em->persist($productSingleTable); + $this->em->flush(); + $this->em->clear(); - $result = $this->_em->createQueryBuilder() + $result = $this->em->createQueryBuilder() ->select('p') ->from(DDC3170ProductJoined::class, 'p') ->getQuery() @@ -55,7 +55,7 @@ public function testIssue() self::assertCount(1, $result); self::assertContainsOnly(DDC3170ProductJoined::class, $result); - $result = $this->_em->createQueryBuilder() + $result = $this->em->createQueryBuilder() ->select('p') ->from(DDC3170ProductSingleTable::class, 'p') ->getQuery() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3192Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3192Test.php index 31b1e012c1f..1b98423a622 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3192Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3192Test.php @@ -25,10 +25,10 @@ protected function setUp() Type::addType('ddc3192_currency_code', DDC3192CurrencyCode::class); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC3192Currency::class), - $this->_em->getClassMetadata(DDC3192Transaction::class), + $this->em->getClassMetadata(DDC3192Currency::class), + $this->em->getClassMetadata(DDC3192Transaction::class), ] ); } @@ -37,24 +37,24 @@ public function testIssue() { $currency = new DDC3192Currency('BYR'); - $this->_em->persist($currency); - $this->_em->flush(); + $this->em->persist($currency); + $this->em->flush(); $amount = 50; $transaction = new DDC3192Transaction($amount, $currency); - $this->_em->persist($transaction); - $this->_em->flush(); - $this->_em->close(); + $this->em->persist($transaction); + $this->em->flush(); + $this->em->close(); - $resultByPersister = $this->_em->find(DDC3192Transaction::class, $transaction->id); + $resultByPersister = $this->em->find(DDC3192Transaction::class, $transaction->id); // This works: DDC2494 makes persister set type mapping info to ResultSetMapping self::assertEquals('BYR', $resultByPersister->currency->code); - $this->_em->close(); + $this->em->close(); - $query = $this->_em->createQuery(); + $query = $this->em->createQuery(); $query->setDQL('SELECT t FROM ' . DDC3192Transaction::class . ' t WHERE t.id = ?1'); $query->setParameter(1, $transaction->id); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3223Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3223Test.php index 95687602a7e..b3341540855 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3223Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3223Test.php @@ -32,12 +32,12 @@ public function testIssueGetId() $participant = new Journalist(); $participant->profileStatus = $profileStatus; - $this->_em->persist($profileStatus); - $this->_em->persist($participant); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($profileStatus); + $this->em->persist($participant); + $this->em->flush(); + $this->em->clear(); - $participant = $this->_em->find(Participant::class, $participant->id); + $participant = $this->em->find(Participant::class, $participant->id); $profileStatus = clone $participant->profileStatus; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3300Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3300Test.php index 273431ce423..7999dd29558 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3300Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3300Test.php @@ -25,25 +25,25 @@ public function testResolveTargetEntitiesChangesDiscriminatorMapValues() [] ); - $this->_em->getEventManager()->addEventSubscriber($resolveTargetEntity); + $this->em->getEventManager()->addEventSubscriber($resolveTargetEntity); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC3300Person::class), + $this->em->getClassMetadata(DDC3300Person::class), ] ); $boss = new DDC3300Boss(); $employee = new DDC3300Employee(); - $this->_em->persist($boss); - $this->_em->persist($employee); + $this->em->persist($boss); + $this->em->persist($employee); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - self::assertEquals($boss, $this->_em->find(DDC3300BossInterface::class, $boss->id)); - self::assertEquals($employee, $this->_em->find(DDC3300EmployeeInterface::class, $employee->id)); + self::assertEquals($boss, $this->em->find(DDC3300BossInterface::class, $boss->id)); + self::assertEquals($employee, $this->em->find(DDC3300EmployeeInterface::class, $employee->id)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3303Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3303Test.php index b40f99ff9d6..f071ef8fb1d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3303Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3303Test.php @@ -9,7 +9,7 @@ protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema([$this->_em->getClassMetadata(DDC3303Employee::class)]); + $this->schemaTool->createSchema([$this->em->getClassMetadata(DDC3303Employee::class)]); } /** @@ -27,11 +27,11 @@ public function testEmbeddedObjectsAreAlsoInherited() 'Doctrine Inc' ); - $this->_em->persist($employee); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($employee); + $this->em->flush(); + $this->em->clear(); - self::assertEquals($employee, $this->_em->find(DDC3303Employee::class, 'John Doe')); + self::assertEquals($employee, $this->em->find(DDC3303Employee::class, 'John Doe')); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC331Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC331Test.php index c10c2864a2e..b6b3f619d1a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC331Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC331Test.php @@ -19,7 +19,7 @@ protected function setUp() { */ public function testSelectFieldOnRootEntity() { - $q = $this->_em->createQuery('SELECT e.name FROM Doctrine\Tests\Models\Company\CompanyEmployee e'); + $q = $this->em->createQuery('SELECT e.name FROM Doctrine\Tests\Models\Company\CompanyEmployee e'); self::assertSQLEquals( 'SELECT c0_."name" AS name_0 FROM "company_employees" c1_ INNER JOIN "company_persons" c0_ ON c1_."id" = c0_."id" LEFT JOIN "company_managers" c2_ ON c1_."id" = c2_."id"', diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3330Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3330Test.php index 6414febd122..10e3b4cbcf5 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3330Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3330Test.php @@ -30,9 +30,9 @@ public function testIssueCollectionOrderWithPaginator() $this->createBuildingAndHalls(); $this->createBuildingAndHalls(); - $this->_em->clear(); + $this->em->clear(); - $query = $this->_em->createQuery( + $query = $this->em->createQuery( 'SELECT b, h'. ' FROM Doctrine\Tests\ORM\Functional\Ticket\DDC3330_Building b'. ' LEFT JOIN b.halls h'. @@ -58,8 +58,8 @@ private function createBuildingAndHalls() $building->addHall($hall); } - $this->_em->persist($building); - $this->_em->flush(); + $this->em->persist($building); + $this->em->flush(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3346Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3346Test.php index 786b438010d..df6591c5c8f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3346Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3346Test.php @@ -22,7 +22,7 @@ public function setUp() public function testFindOneWithEagerFetchWillNotHydrateLimitedCollection() { /* @var DDC3346Author $author */ - $author = $this->_em->getRepository(DDC3346Author::class)->findOneBy( + $author = $this->em->getRepository(DDC3346Author::class)->findOneBy( ['username' => 'bwoogy'] ); @@ -32,7 +32,7 @@ public function testFindOneWithEagerFetchWillNotHydrateLimitedCollection() public function testFindLimitedWithEagerFetchWillNotHydrateLimitedCollection() { /* @var DDC3346Author[] $authors */ - $authors = $this->_em->getRepository(DDC3346Author::class)->findBy( + $authors = $this->em->getRepository(DDC3346Author::class)->findBy( ['username' => 'bwoogy'], null, 1 @@ -45,7 +45,7 @@ public function testFindLimitedWithEagerFetchWillNotHydrateLimitedCollection() public function testFindWithEagerFetchAndOffsetWillNotHydrateLimitedCollection() { /* @var DDC3346Author[] $authors */ - $authors = $this->_em->getRepository(DDC3346Author::class)->findBy( + $authors = $this->em->getRepository(DDC3346Author::class)->findBy( ['username' => 'bwoogy'], null, null, @@ -68,10 +68,10 @@ private function loadAuthorFixture() $user->articles[] = $article1; $user->articles[] = $article2; - $this->_em->persist($user); - $this->_em->persist($article1); - $this->_em->persist($article2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->persist($article1); + $this->em->persist($article2); + $this->em->flush(); + $this->em->clear(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC345Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC345Test.php index 168055f7cda..7d95d4b7a22 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC345Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC345Test.php @@ -7,12 +7,12 @@ class DDC345Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { parent::setUp(); - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); - $this->_schemaTool->createSchema( + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC345User::class), - $this->_em->getClassMetadata(DDC345Group::class), - $this->_em->getClassMetadata(DDC345Membership::class), + $this->em->getClassMetadata(DDC345User::class), + $this->em->getClassMetadata(DDC345Group::class), + $this->em->getClassMetadata(DDC345Membership::class), ] ); } @@ -22,19 +22,19 @@ public function testTwoIterateHydrations() // Create User $user = new DDC345User; $user->name = 'Test User'; - $this->_em->persist($user); // $em->flush() does not change much here + $this->em->persist($user); // $em->flush() does not change much here // Create Group $group = new DDC345Group; $group->name = 'Test Group'; - $this->_em->persist($group); // $em->flush() does not change much here + $this->em->persist($group); // $em->flush() does not change much here $membership = new DDC345Membership; $membership->group = $group; $membership->user = $user; $membership->state = 'active'; - //$this->_em->persist($membership); // COMMENT OUT TO SEE BUG + //$this->em->persist($membership); // COMMENT OUT TO SEE BUG /* This should be not necessary, but without, its PrePersist is called twice, $membership seems to be persisted twice, but all properties but the @@ -44,7 +44,7 @@ public function testTwoIterateHydrations() $user->Memberships->add($membership); $group->Memberships->add($membership); - $this->_em->flush(); + $this->em->flush(); self::assertEquals(1, $membership->prePersistCallCount); self::assertEquals(0, $membership->preUpdateCallCount); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php index caabe1856e2..dd26cf26ee1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php @@ -10,10 +10,10 @@ protected function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC353File::class), - $this->_em->getClassMetadata(DDC353Picture::class), + $this->em->getClassMetadata(DDC353File::class), + $this->em->getClassMetadata(DDC353Picture::class), ] ); } catch(\Exception $ignored) {} @@ -26,7 +26,7 @@ public function testWorkingCase() $picture = new DDC353Picture; $picture->setFile($file); - $em = $this->_em; + $em = $this->em; $em->persist($picture); $em->flush(); $em->clear(); @@ -51,7 +51,7 @@ public function testFailingCase() $picture = new DDC353Picture; $picture->setFile($file); - $em = $this->_em; + $em = $this->em; $em->persist($picture); $em->flush(); $em->clear(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3582Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3582Test.php index e825e4d8d20..07b3671a15b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3582Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3582Test.php @@ -9,13 +9,13 @@ class DDC3582Test extends \Doctrine\Tests\OrmFunctionalTestCase { function testNestedEmbeddablesAreHydratedWithProperClass() { - $this->_schemaTool->createSchema([$this->_em->getClassMetadata(DDC3582Entity::class)]); - $this->_em->persist(new DDC3582Entity('foo')); - $this->_em->flush(); - $this->_em->clear(); + $this->schemaTool->createSchema([$this->em->getClassMetadata(DDC3582Entity::class)]); + $this->em->persist(new DDC3582Entity('foo')); + $this->em->flush(); + $this->em->clear(); /** @var DDC3582Entity $entity */ - $entity = $this->_em->find(DDC3582Entity::class, 'foo'); + $entity = $this->em->find(DDC3582Entity::class, 'foo'); self::assertInstanceOf(DDC3582Embeddable1::class, $entity->embeddable1); self::assertInstanceOf(DDC3582Embeddable2::class, $entity->embeddable1->embeddable2); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3597Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3597Test.php index 32c5e87bb2c..5f2fe3e681d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3597Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3597Test.php @@ -13,11 +13,11 @@ class DDC3597Test extends \Doctrine\Tests\OrmFunctionalTestCase { protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC3597Root::class), - $this->_em->getClassMetadata(DDC3597Media::class), - $this->_em->getClassMetadata(DDC3597Image::class) + $this->em->getClassMetadata(DDC3597Root::class), + $this->em->getClassMetadata(DDC3597Media::class), + $this->em->getClassMetadata(DDC3597Image::class) ] ); } @@ -32,22 +32,22 @@ public function testSaveImageEntity() { $imageEntity->getDimension()->setWidth(300); $imageEntity->getDimension()->setHeight(500); - $this->_em->persist($imageEntity); - $this->_em->flush(); //before this fix, it will fail with a exception + $this->em->persist($imageEntity); + $this->em->flush(); //before this fix, it will fail with a exception - $this->_em->clear(); + $this->em->clear(); //request entity - $imageEntity = $this->_em->find(DDC3597Image::class, $imageEntity->getId()); + $imageEntity = $this->em->find(DDC3597Image::class, $imageEntity->getId()); self::assertInstanceOf(DDC3597Image::class, $imageEntity); //cleanup - $this->_em->remove($imageEntity); - $this->_em->flush(); - $this->_em->clear(); + $this->em->remove($imageEntity); + $this->em->flush(); + $this->em->clear(); //check delete - $imageEntity = $this->_em->find(DDC3597Image::class, $imageEntity->getId()); + $imageEntity = $this->em->find(DDC3597Image::class, $imageEntity->getId()); self::assertNull($imageEntity); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php index 00b7275366b..d522c25631f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php @@ -17,17 +17,17 @@ protected function setUp() { parent::setUp(); - $metadata = $this->_em->getClassMetadata(DDC3634Entity::class); + $metadata = $this->em->getClassMetadata(DDC3634Entity::class); if ( ! $metadata->idGenerator->isPostInsertGenerator()) { $this->markTestSkipped('Need a post-insert ID generator in order to make this test work correctly'); } try { - $this->_schemaTool->createSchema([ + $this->schemaTool->createSchema([ $metadata, - $this->_em->getClassMetadata(DDC3634JTIBaseEntity::class), - $this->_em->getClassMetadata(DDC3634JTIChildEntity::class), + $this->em->getClassMetadata(DDC3634JTIBaseEntity::class), + $this->em->getClassMetadata(DDC3634JTIChildEntity::class), ]); } catch (ToolsException $e) { // schema already in place @@ -39,8 +39,8 @@ public function testSavesVeryLargeIntegerAutoGeneratedValue() $veryLargeId = PHP_INT_MAX . PHP_INT_MAX; $entityManager = EntityManager::create( - new DDC3634LastInsertIdMockingConnection($veryLargeId, $this->_em->getConnection()), - $this->_em->getConfiguration() + new DDC3634LastInsertIdMockingConnection($veryLargeId, $this->em->getConnection()), + $this->em->getConfiguration() ); $entity = new DDC3634Entity(); @@ -55,8 +55,8 @@ public function testSavesIntegerAutoGeneratedValueAsString() { $entity = new DDC3634Entity(); - $this->_em->persist($entity); - $this->_em->flush(); + $this->em->persist($entity); + $this->em->flush(); self::assertInternalType('string', $entity->id); } @@ -65,8 +65,8 @@ public function testSavesIntegerAutoGeneratedValueAsStringWithJoinedInheritance( { $entity = new DDC3634JTIChildEntity(); - $this->_em->persist($entity); - $this->_em->flush(); + $this->em->persist($entity); + $this->em->flush(); self::assertInternalType('string', $entity->id); } @@ -342,7 +342,7 @@ public function getNestTransactionsWithSavepoints() return $this->forwardCall(); } - protected function _getNestedTransactionSavePointName() + protected function getNestedTransactionSavePointName() { return $this->forwardCall(); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3644Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3644Test.php index bfee95f2149..5a41581c948 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3644Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3644Test.php @@ -41,38 +41,38 @@ public function testIssueWithRegularEntity() $user->name = 'Guilherme Blanco'; $user->setAddresses($addresses); - $this->_em->persist($user); - $this->_em->persist($current); - $this->_em->persist($previous); - $this->_em->persist($initial); + $this->em->persist($user); + $this->em->persist($current); + $this->em->persist($previous); + $this->em->persist($initial); - $this->_em->flush(); + $this->em->flush(); $userId = $user->id; unset($current, $previous, $initial, $addresses, $user); - $this->_em->clear(); + $this->em->clear(); // Replace entire collection (this should trigger OneToManyPersister::remove()) $current = new DDC3644Address('Toronto, ON, Canada'); $addresses = new ArrayCollection([$current]); - $user = $this->_em->find(DDC3644User::class, $userId); + $user = $this->em->find(DDC3644User::class, $userId); $user->setAddresses($addresses); - $this->_em->persist($user); - $this->_em->persist($current); + $this->em->persist($user); + $this->em->persist($current); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); // We should only have 1 item in the collection list now - $user = $this->_em->find(DDC3644User::class, $userId); + $user = $this->em->find(DDC3644User::class, $userId); self::assertCount(1, $user->addresses); // We should only have 1 item in the addresses table too - $repository = $this->_em->getRepository(DDC3644Address::class); + $repository = $this->em->getRepository(DDC3644Address::class); $addresses = $repository->findAll(); self::assertCount(1, $addresses); @@ -92,37 +92,37 @@ public function testIssueWithJoinedEntity() $user->name = 'Guilherme Blanco'; $user->setPets($pets); - $this->_em->persist($user); - $this->_em->persist($actual); - $this->_em->persist($past); + $this->em->persist($user); + $this->em->persist($actual); + $this->em->persist($past); - $this->_em->flush(); + $this->em->flush(); $userId = $user->id; unset($actual, $past, $pets, $user); - $this->_em->clear(); + $this->em->clear(); // Replace entire collection (this should trigger OneToManyPersister::remove()) $actual = new DDC3644Pet('Valentina'); $pets = new ArrayCollection([$actual]); - $user = $this->_em->find(DDC3644User::class, $userId); + $user = $this->em->find(DDC3644User::class, $userId); $user->setPets($pets); - $this->_em->persist($user); - $this->_em->persist($actual); + $this->em->persist($user); + $this->em->persist($actual); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); // We should only have 1 item in the collection list now - $user = $this->_em->find(DDC3644User::class, $userId); + $user = $this->em->find(DDC3644User::class, $userId); self::assertCount(1, $user->pets); // We should only have 1 item in the pets table too - $repository = $this->_em->getRepository(DDC3644Pet::class); + $repository = $this->em->getRepository(DDC3644Pet::class); $pets = $repository->findAll(); self::assertCount(1, $pets); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3699Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3699Test.php index 61237055a0e..fabd28b1e30 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3699Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3699Test.php @@ -35,25 +35,25 @@ public function testMergingParentClassFieldsDoesNotStopMergingScalarFieldsForToO $relation->child = $child ; $child->oneRelation = $relation; - $this->_em->persist($relation); - $this->_em->persist($child); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($relation); + $this->em->persist($child); + $this->em->flush(); + $this->em->clear(); // fixtures loaded /* @var $unManagedChild DDC3699Child */ - $unManagedChild = $this->_em->find(DDC3699Child::class, $id); + $unManagedChild = $this->em->find(DDC3699Child::class, $id); - $this->_em->detach($unManagedChild); + $this->em->detach($unManagedChild); // make it managed again - $this->_em->find(DDC3699Child::class, $id); + $this->em->find(DDC3699Child::class, $id); $unManagedChild->childField = 'modifiedChildValue'; $unManagedChild->parentField = 'modifiedParentValue'; /* @var $mergedChild DDC3699Child */ - $mergedChild = $this->_em->merge($unManagedChild); + $mergedChild = $this->em->merge($unManagedChild); self::assertSame($mergedChild->childField, 'modifiedChildValue'); self::assertSame($mergedChild->parentField, 'modifiedParentValue'); @@ -78,23 +78,23 @@ public function testMergingParentClassFieldsDoesNotStopMergingScalarFieldsForToM $relation->child = $child ; $child->relations[] = $relation; - $this->_em->persist($relation); - $this->_em->persist($child); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($relation); + $this->em->persist($child); + $this->em->flush(); + $this->em->clear(); /* @var $unmanagedChild DDC3699Child */ - $unmanagedChild = $this->_em->find(DDC3699Child::class, $id); - $this->_em->detach($unmanagedChild); + $unmanagedChild = $this->em->find(DDC3699Child::class, $id); + $this->em->detach($unmanagedChild); // make it managed again - $this->_em->find(DDC3699Child::class, $id); + $this->em->find(DDC3699Child::class, $id); $unmanagedChild->childField = 'modifiedChildValue'; $unmanagedChild->parentField = 'modifiedParentValue'; /* @var $mergedChild DDC3699Child */ - $mergedChild = $this->_em->merge($unmanagedChild); + $mergedChild = $this->em->merge($unmanagedChild); self::assertSame($mergedChild->childField, 'modifiedChildValue'); self::assertSame($mergedChild->parentField, 'modifiedParentValue'); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3719Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3719Test.php index f5f60c0b0d3..ad7a3b2f79f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3719Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3719Test.php @@ -28,19 +28,19 @@ public function testCriteriaOnNotOwningSide() $manager->setSalary(666); $manager->setTitle('Boss'); $manager->setDepartment('Marketing'); - $this->_em->persist($manager); + $this->em->persist($manager); $contractA = new CompanyFlexContract(); $contractA->markCompleted(); $contractA->addManager($manager); - $this->_em->persist($contractA); + $this->em->persist($contractA); $contractB = new CompanyFlexContract(); $contractB->addManager($manager); - $this->_em->persist($contractB); + $this->em->persist($contractB); - $this->_em->flush(); - $this->_em->refresh($manager); + $this->em->flush(); + $this->em->refresh($manager); $contracts = $manager->managedContracts; static::assertCount(2, $contracts); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC371Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC371Test.php index 3e8e791f755..a339367ace8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC371Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC371Test.php @@ -12,11 +12,11 @@ class DDC371Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { parent::setUp(); - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); - $this->_schemaTool->createSchema( + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC371Parent::class), - $this->_em->getClassMetadata(DDC371Child::class) + $this->em->getClassMetadata(DDC371Parent::class), + $this->em->getClassMetadata(DDC371Child::class) ] ); } @@ -33,13 +33,13 @@ public function testIssue() $child->parent = $parent; $parent->children->add($child); - $this->_em->persist($parent); - $this->_em->persist($child); + $this->em->persist($parent); + $this->em->persist($child); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $children = $this->_em->createQuery('select c,p from '.__NAMESPACE__.'\DDC371Child c ' + $children = $this->em->createQuery('select c,p from '.__NAMESPACE__.'\DDC371Child c ' . 'left join c.parent p where c.id = 1 and p.id = 1') ->setHint(Query::HINT_REFRESH, true) ->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3785Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3785Test.php index 984cda551ba..fa9f3c03310 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3785Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3785Test.php @@ -15,11 +15,11 @@ protected function setUp() Type::addType('ddc3785_asset_id', DDC3785_AssetIdType::class); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC3785_Asset::class), - $this->_em->getClassMetadata(DDC3785_AssetId::class), - $this->_em->getClassMetadata(DDC3785_Attribute::class) + $this->em->getClassMetadata(DDC3785_Asset::class), + $this->em->getClassMetadata(DDC3785_AssetId::class), + $this->em->getClassMetadata(DDC3785_Attribute::class) ] ); } catch(\Exception $e) { @@ -38,16 +38,16 @@ public function testOwningValueObjectIdIsCorrectlyTransformedWhenRemovingOrphane $attribute2 = new DDC3785_Attribute('foo2', 'bar2') ]; - $this->_em->persist($asset = new DDC3785_Asset($id, $attributes)); - $this->_em->flush(); + $this->em->persist($asset = new DDC3785_Asset($id, $attributes)); + $this->em->flush(); $asset->getAttributes() ->removeElement($attribute1); $idToBeRemoved = $attribute1->id; - $this->_em->persist($asset); - $this->_em->flush(); + $this->em->persist($asset); + $this->em->flush(); self::assertNull($this->_em->find(DDC3785_Attribute::class, $idToBeRemoved)); self::assertNotNull($this->_em->find(DDC3785_Attribute::class, $attribute2->id)); @@ -133,7 +133,7 @@ public function __construct($id) public function __toString() { - return $this->id; + return (string) $this->id; } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC381Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC381Test.php index 753409deff5..65873c4dba6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC381Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC381Test.php @@ -9,9 +9,9 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC381Entity::class), + $this->em->getClassMetadata(DDC381Entity::class), ] ); } catch(\Exception $e) { @@ -23,12 +23,12 @@ public function testCallUnserializedProxyMethods() { $entity = new DDC381Entity(); - $this->_em->persist($entity); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($entity); + $this->em->flush(); + $this->em->clear(); $persistedId = $entity->getId(); - $entity = $this->_em->getReference(DDC381Entity::class, $persistedId); + $entity = $this->em->getReference(DDC381Entity::class, $persistedId); // explicitly load proxy (getId() does not trigger reload of proxy) $id = $entity->getOtherMethod(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3967Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3967Test.php index 87627bc92ba..e0310204c62 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3967Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3967Test.php @@ -12,8 +12,8 @@ protected function setUp() parent::setUp(); $this->loadFixturesCountries(); - $this->_em->getCache()->evictEntityRegion(Country::class); - $this->_em->clear(); + $this->em->getCache()->evictEntityRegion(Country::class); + $this->em->clear(); } public function testIdentifierCachedWithProperType() @@ -22,12 +22,12 @@ public function testIdentifierCachedWithProperType() $id = $country->getId(); // First time, loaded from database - $this->_em->find(Country::class, "$id"); - $this->_em->clear(); + $this->em->find(Country::class, "$id"); + $this->em->clear(); // Second time, loaded from cache /** @var Country $country */ - $country = $this->_em->find(Country::class, "$id"); + $country = $this->em->find(Country::class, "$id"); // Identifier type should be integer self::assertSame($country->getId(), $id); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC4003Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC4003Test.php index d879a6f673f..39b29a02b3e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC4003Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC4003Test.php @@ -17,7 +17,7 @@ public function test_reads_through_repository_same_data_that_it_wrote_in_cache() // Get the id of the first bar $id = $this->attractions[0]->getId(); - $repository = $this->_em->getRepository(Bar::class); + $repository = $this->em->getRepository(Bar::class); /** * This instance is fresh new, no QueryCache, so the full entity gets loaded from DB. @@ -30,8 +30,8 @@ public function test_reads_through_repository_same_data_that_it_wrote_in_cache() // Let's change it so that we can compare its state $bar->setName($newName = uniqid()); - $this->_em->persist($bar); - $this->_em->flush(); + $this->em->persist($bar); + $this->em->flush(); /** * Flush did 2 important things for us: @@ -44,7 +44,7 @@ public function test_reads_through_repository_same_data_that_it_wrote_in_cache() $repository->findOneBy(['id' => $id]); // Lets clear EM so that we don't hit IdentityMap at all. - $this->_em->clear(); + $this->em->clear(); /** * Here's the failing step: diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC422Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC422Test.php index 04c0a7efa33..e8a015da8c7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC422Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC422Test.php @@ -9,12 +9,12 @@ class DDC422Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { parent::setUp(); - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); - $this->_schemaTool->createSchema( + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC422Guest::class), - $this->_em->getClassMetadata(DDC422Customer::class), - $this->_em->getClassMetadata(DDC422Contact::class) + $this->em->getClassMetadata(DDC422Guest::class), + $this->em->getClassMetadata(DDC422Customer::class), + $this->em->getClassMetadata(DDC422Contact::class) ] ); } @@ -25,11 +25,11 @@ protected function setUp() public function testIssue() { $customer = new DDC422Customer; - $this->_em->persist($customer); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($customer); + $this->em->flush(); + $this->em->clear(); - $customer = $this->_em->find(get_class($customer), $customer->id); + $customer = $this->em->find(get_class($customer), $customer->id); self::assertInstanceOf(PersistentCollection::class, $customer->contacts); self::assertFalse($customer->contacts->isInitialized()); @@ -37,9 +37,9 @@ public function testIssue() $customer->contacts->add($contact); self::assertTrue($customer->contacts->isDirty()); self::assertFalse($customer->contacts->isInitialized()); - $this->_em->flush(); + $this->em->flush(); - self::assertEquals(1, $this->_em->getConnection()->fetchColumn("select count(*) from ddc422_customers_contacts")); + self::assertEquals(1, $this->em->getConnection()->fetchColumn("select count(*) from ddc422_customers_contacts")); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC425Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC425Test.php index aae40be39bb..de4ba453017 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC425Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC425Test.php @@ -8,9 +8,9 @@ class DDC425Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC425Entity::class), + $this->em->getClassMetadata(DDC425Entity::class), ] ); } @@ -20,9 +20,9 @@ protected function setUp() */ public function testIssue() { - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); - $num = $this->_em->createQuery('DELETE '.__NAMESPACE__.'\DDC425Entity e WHERE e.someDatetimeField > ?1') + $num = $this->em->createQuery('DELETE '.__NAMESPACE__.'\DDC425Entity e WHERE e.someDatetimeField > ?1') ->setParameter(1, new DateTime, Type::DATETIME) ->getResult(); self::assertEquals(0, $num); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC440Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC440Test.php index ebf4c93a883..446941359b7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC440Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC440Test.php @@ -9,10 +9,10 @@ protected function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC440Phone::class), - $this->_em->getClassMetadata(DDC440Client::class) + $this->em->getClassMetadata(DDC440Phone::class), + $this->em->getClassMetadata(DDC440Client::class) ] ); } catch (\Exception $e) { @@ -52,13 +52,13 @@ public function testOriginalEntityDataEmptyWhenProxyLoadedFromTwoAssociations() $client->setMainPhone($phone); - $this->_em->persist($client); - $this->_em->flush(); + $this->em->persist($client); + $this->em->flush(); $id = $client->getId(); - $this->_em->clear(); + $this->em->clear(); - $uw = $this->_em->getUnitOfWork(); - $client = $this->_em->find(DDC440Client::class, $id); + $uw = $this->em->getUnitOfWork(); + $client = $this->em->find(DDC440Client::class, $id); $clientPhones = $client->getPhones(); $p1 = $clientPhones[1]; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC444Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC444Test.php index 2ee9faaccd9..e977a20713e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC444Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC444Test.php @@ -7,10 +7,10 @@ class DDC444Test extends \Doctrine\Tests\OrmFunctionalTestCase public function setUp() { parent::setUp(); - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); - $this->_schemaTool->createSchema( + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC444User::class), + $this->em->getClassMetadata(DDC444User::class), ] ); } @@ -22,33 +22,33 @@ public function testExplicitPolicy() $u = new $classname; $u->name = "Initial value"; - $this->_em->persist($u); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($u); + $this->em->flush(); + $this->em->clear(); - $q = $this->_em->createQuery("SELECT u FROM $classname u"); + $q = $this->em->createQuery("SELECT u FROM $classname u"); $u = $q->getSingleResult(); self::assertEquals("Initial value", $u->name); $u->name = "Modified value"; // This should be NOOP as the change hasn't been persisted - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $u = $this->_em->createQuery("SELECT u FROM $classname u"); + $u = $this->em->createQuery("SELECT u FROM $classname u"); $u = $q->getSingleResult(); self::assertEquals("Initial value", $u->name); $u->name = "Modified value"; - $this->_em->persist($u); + $this->em->persist($u); // Now we however persisted it, and this should have updated our friend - $this->_em->flush(); + $this->em->flush(); - $q = $this->_em->createQuery("SELECT u FROM $classname u"); + $q = $this->em->createQuery("SELECT u FROM $classname u"); $u = $q->getSingleResult(); self::assertEquals("Modified value", $u->name); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC448Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC448Test.php index ffab784b792..a13587cbfc2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC448Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC448Test.php @@ -9,18 +9,18 @@ class DDC448Test extends OrmFunctionalTestCase protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC448MainTable::class), - $this->_em->getClassMetadata(DDC448ConnectedClass::class), - $this->_em->getClassMetadata(DDC448SubTable::class), + $this->em->getClassMetadata(DDC448MainTable::class), + $this->em->getClassMetadata(DDC448ConnectedClass::class), + $this->em->getClassMetadata(DDC448SubTable::class), ] ); } public function testIssue() { - $q = $this->_em->createQuery("select b from ".__NAMESPACE__."\\DDC448SubTable b where b.connectedClassId = ?1"); + $q = $this->em->createQuery("select b from ".__NAMESPACE__."\\DDC448SubTable b where b.connectedClassId = ?1"); self::assertSQLEquals( 'SELECT d0_."id" AS id_0, d0_."discr" AS discr_1, d0_."connectedClassId" AS connectedClassId_2 FROM "SubTable" s1_ INNER JOIN "DDC448MainTable" d0_ ON s1_."id" = d0_."id" WHERE d0_."connectedClassId" = ?', diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC493Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC493Test.php index 92b2d45a5ed..b5a5c5fc68b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC493Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC493Test.php @@ -7,18 +7,18 @@ class DDC493Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC493Customer::class), - $this->_em->getClassMetadata(DDC493Distributor::class), - $this->_em->getClassMetadata(DDC493Contact::class) + $this->em->getClassMetadata(DDC493Customer::class), + $this->em->getClassMetadata(DDC493Distributor::class), + $this->em->getClassMetadata(DDC493Contact::class) ] ); } public function testIssue() { - $q = $this->_em->createQuery("select u, c.data from ".__NAMESPACE__."\\DDC493Distributor u JOIN u.contact c"); + $q = $this->em->createQuery("select u, c.data from ".__NAMESPACE__."\\DDC493Distributor u JOIN u.contact c"); self::assertSQLEquals( 'SELECT d0_."id" AS id_0, d1_."data" AS data_1, d0_."discr" AS discr_2, d0_."contact" AS contact_3 FROM "DDC493Distributor" d2_ INNER JOIN "DDC493Customer" d0_ ON d2_."id" = d0_."id" INNER JOIN "DDC493Contact" d1_ ON d0_."contact" = d1_."id"', diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC501Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC501Test.php index a7040741424..dd3383ad3dc 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC501Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC501Test.php @@ -29,20 +29,20 @@ public function testMergeUnitializedManyToManyAndOneToManyCollections() { // Create User $user = $this->createAndPersistUser(); - $this->_em->flush(); + $this->em->flush(); - self::assertTrue($this->_em->contains($user)); - $this->_em->clear(); - self::assertFalse($this->_em->contains($user)); + self::assertTrue($this->em->contains($user)); + $this->em->clear(); + self::assertFalse($this->em->contains($user)); unset($user); // Reload User from DB *without* any associations (i.e. an uninitialized PersistantCollection) $userReloaded = $this->loadUserFromEntityManager(); - self::assertTrue($this->_em->contains($userReloaded)); - $this->_em->clear(); - self::assertFalse($this->_em->contains($userReloaded)); + self::assertTrue($this->em->contains($userReloaded)); + $this->em->clear(); + self::assertFalse($this->em->contains($userReloaded)); // freeze and unfreeze $userClone = unserialize(serialize($userReloaded)); @@ -57,7 +57,7 @@ public function testMergeUnitializedManyToManyAndOneToManyCollections() self::assertFalse($userClone->getGroups()->isInitialized(), "User::groups should not be marked initialized."); // Merge back and flush - $userClone = $this->_em->merge($userClone); + $userClone = $this->em->merge($userClone); // Back in managed world I would expect to have my phonenumbers back but they aren't! // Remember I didn't touch (and probably didn't need) them at all while in detached mode. @@ -66,10 +66,10 @@ public function testMergeUnitializedManyToManyAndOneToManyCollections() // This works fine as long as cmUser::groups doesn't cascade "merge" self::assertEquals(2, count($userClone->getGroups())); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - self::assertFalse($this->_em->contains($userClone)); + self::assertFalse($this->em->contains($userClone)); // Reload user from DB $userFromEntityManager = $this->loadUserFromEntityManager(); @@ -101,7 +101,7 @@ protected function createAndPersistUser() $user->addGroup($group); } - $this->_em->persist($user); + $this->em->persist($user); return $user; } @@ -111,7 +111,7 @@ protected function createAndPersistUser() */ protected function loadUserFromEntityManager() { - return $this->_em + return $this->em ->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name like :name') ->setParameter('name', 'Luka') ->getSingleResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC512Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC512Test.php index b1af3bd9981..1a96b38c397 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC512Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC512Test.php @@ -9,11 +9,11 @@ class DDC512Test extends OrmFunctionalTestCase protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC512Customer::class), - $this->_em->getClassMetadata(DDC512OfferItem::class), - $this->_em->getClassMetadata(DDC512Item::class), + $this->em->getClassMetadata(DDC512Customer::class), + $this->em->getClassMetadata(DDC512OfferItem::class), + $this->em->getClassMetadata(DDC512Item::class), ] ); } @@ -23,15 +23,15 @@ public function testIssue() $customer1 = new DDC512Customer(); $item = new DDC512OfferItem(); $customer1->item = $item; - $this->_em->persist($customer1); + $this->em->persist($customer1); $customer2 = new DDC512Customer(); - $this->_em->persist($customer2); + $this->em->persist($customer2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $q = $this->_em->createQuery("select u,i from ".__NAMESPACE__."\\DDC512Customer u left join u.item i"); + $q = $this->em->createQuery("select u,i from ".__NAMESPACE__."\\DDC512Customer u left join u.item i"); $result = $q->getResult(); self::assertEquals(2, count($result)); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC513Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC513Test.php index e3c7aadfc5c..bbc4069c3ec 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC513Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC513Test.php @@ -7,18 +7,18 @@ class DDC513Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC513OfferItem::class), - $this->_em->getClassMetadata(DDC513Item::class), - $this->_em->getClassMetadata(DDC513Price::class), + $this->em->getClassMetadata(DDC513OfferItem::class), + $this->em->getClassMetadata(DDC513Item::class), + $this->em->getClassMetadata(DDC513Price::class), ] ); } public function testIssue() { - $q = $this->_em->createQuery("select u from ".__NAMESPACE__."\\DDC513OfferItem u left join u.price p"); + $q = $this->em->createQuery("select u from ".__NAMESPACE__."\\DDC513OfferItem u left join u.price p"); self::assertSQLEquals( 'SELECT d0_."id" AS id_0, d0_."discr" AS discr_1, d0_."price" AS price_2 FROM "DDC513OfferItem" d1_ INNER JOIN "DDC513Item" d0_ ON d1_."id" = d0_."id" LEFT JOIN "DDC513Price" d2_ ON d0_."price" = d2_."id"', diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC518Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC518Test.php index 56174b80e0e..0d74c51e595 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC518Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC518Test.php @@ -16,10 +16,10 @@ public function testMergeWithRelatedNew() $article->text = "foo"; $article->topic = "bar"; - $this->_em->persist($article); - $this->_em->flush(); - $this->_em->detach($article); - $this->_em->clear(); + $this->em->persist($article); + $this->em->flush(); + $this->em->detach($article); + $this->em->clear(); $user = new \Doctrine\Tests\Models\CMS\CmsUser(); $user->username = "beberlei"; @@ -27,8 +27,8 @@ public function testMergeWithRelatedNew() $user->status = "active"; $article->user = $user; - $this->_em->persist($user); - $managedArticle = $this->_em->merge($article); + $this->em->persist($user); + $managedArticle = $this->em->merge($article); self::assertSame($article->user, $managedArticle->user); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC522Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC522Test.php index bcde4d6ff2f..871aad29e98 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC522Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC522Test.php @@ -15,11 +15,11 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC522Customer::class), - $this->_em->getClassMetadata(DDC522Cart::class), - $this->_em->getClassMetadata(DDC522ForeignKeyTest::class) + $this->em->getClassMetadata(DDC522Customer::class), + $this->em->getClassMetadata(DDC522Cart::class), + $this->em->getClassMetadata(DDC522ForeignKeyTest::class) ] ); } catch(\Exception $e) { @@ -37,14 +37,14 @@ public function testJoinColumnWithSameNameAsAssociationField() $cart->total = 0; $cust->cart = $cart; $cart->customer = $cust; - $this->_em->persist($cust); - $this->_em->persist($cart); - $this->_em->flush(); + $this->em->persist($cust); + $this->em->persist($cart); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); - $r = $this->_em->createQuery('select ca,c from ' . DDC522Cart::class . ' ca join ca.customer c') - ->getResult(); + $r = $this->em->createQuery('select ca,c from ' . DDC522Cart::class . ' ca join ca.customer c') + ->getResult(); self::assertInstanceOf(DDC522Cart::class, $r[0]); self::assertInstanceOf(DDC522Customer::class, $r[0]->customer); @@ -54,11 +54,11 @@ public function testJoinColumnWithSameNameAsAssociationField() $fkt = new DDC522ForeignKeyTest(); $fkt->cartId = $r[0]->id; // ignored for persistence $fkt->cart = $r[0]; // must be set properly - $this->_em->persist($fkt); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($fkt); + $this->em->flush(); + $this->em->clear(); - $fkt2 = $this->_em->find(get_class($fkt), $fkt->id); + $fkt2 = $this->em->find(get_class($fkt), $fkt->id); self::assertEquals($fkt->cart->id, $fkt2->cartId); self::assertInstanceOf(Proxy::class, $fkt2->cart); self::assertFalse($fkt2->cart->__isInitialized__); @@ -74,15 +74,16 @@ public function testJoinColumnWithNullSameNameAssociationField() $fkCust->name = 'name'; $fkCust->cart = null; - $this->_em->persist($fkCust); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($fkCust); + $this->em->flush(); + $this->em->clear(); $expected = clone $fkCust; + // removing dynamic field (which is not persisted) unset($expected->name); - self::assertEquals($expected, $this->_em->find(DDC522ForeignKeyTest::class, $fkCust->id)); + self::assertEquals($expected, $this->em->find(DDC522ForeignKeyTest::class, $fkCust->id)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC531Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC531Test.php index 0fe0f7b6e93..3793b870130 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC531Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC531Test.php @@ -9,10 +9,10 @@ class DDC531Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC531Item::class), - $this->_em->getClassMetadata(DDC531SubItem::class), + $this->em->getClassMetadata(DDC531Item::class), + $this->em->getClassMetadata(DDC531SubItem::class), ] ); } @@ -23,17 +23,17 @@ public function testIssue() $item2 = new DDC531Item; $item2->parent = $item1; $item1->getChildren()->add($item2); - $this->_em->persist($item1); - $this->_em->persist($item2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($item1); + $this->em->persist($item2); + $this->em->flush(); + $this->em->clear(); - $item3 = $this->_em->find(DDC531Item::class, $item2->id); // Load child item first (id 2) + $item3 = $this->em->find(DDC531Item::class, $item2->id); // Load child item first (id 2) // parent will already be loaded, cannot be lazy because it has mapped subclasses and we would not // know which proxy type to put in. self::assertInstanceOf(DDC531Item::class, $item3->parent); self::assertNotInstanceOf(Proxy::class, $item3->parent); - $item4 = $this->_em->find(DDC531Item::class, $item1->id); // Load parent item (id 1) + $item4 = $this->em->find(DDC531Item::class, $item1->id); // Load parent item (id 1) self::assertNull($item4->parent); self::assertNotNull($item4->getChildren()); self::assertTrue($item4->getChildren()->contains($item3)); // lazy-loads children diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC5684Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC5684Test.php index e525ae1342b..3be4c4d1911 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC5684Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC5684Test.php @@ -24,12 +24,12 @@ protected function setUp() DBALTypes\Type::addType(DDC5684ObjectIdType::class, DDC5684ObjectIdType::class); } - $this->_schemaTool->createSchema([$this->_em->getClassMetadata(DDC5684Object::class)]); + $this->schemaTool->createSchema([$this->em->getClassMetadata(DDC5684Object::class)]); } protected function tearDown() { - $this->_schemaTool->dropSchema([$this->_em->getClassMetadata(DDC5684Object::class)]); + $this->schemaTool->dropSchema([$this->em->getClassMetadata(DDC5684Object::class)]); parent::tearDown(); } @@ -37,8 +37,8 @@ protected function tearDown() public function testAutoIncrementIdWithCustomType() { $object = new DDC5684Object(); - $this->_em->persist($object); - $this->_em->flush(); + $this->em->persist($object); + $this->em->flush(); $this->assertInstanceOf(DDC5684ObjectId::class, $object->id); } @@ -46,12 +46,12 @@ public function testAutoIncrementIdWithCustomType() public function testFetchObjectWithAutoIncrementedCustomType() { $object = new DDC5684Object(); - $this->_em->persist($object); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($object); + $this->em->flush(); + $this->em->clear(); $rawId = $object->id->value; - $object = $this->_em->find(DDC5684Object::class, new DDC5684ObjectId($rawId)); + $object = $this->em->find(DDC5684Object::class, new DDC5684ObjectId($rawId)); $this->assertInstanceOf(DDC5684ObjectId::class, $object->id); $this->assertEquals($rawId, $object->id->value); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC588Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC588Test.php index 7361bc4f403..83320fcbc82 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC588Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC588Test.php @@ -8,9 +8,9 @@ protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC588Site::class), + $this->em->getClassMetadata(DDC588Site::class), ] ); } @@ -19,10 +19,11 @@ public function testIssue() { $site = new DDC588Site('Foo'); - $this->_em->persist($site); - $this->_em->flush(); + $this->em->persist($site); + $this->em->flush(); + // Following should not result in exception - $this->_em->refresh($site); + $this->em->refresh($site); $this->addToAssertionCount(1); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php index 20c4ab34135..573fd030396 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php @@ -7,13 +7,13 @@ class DDC599Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { parent::setUp(); - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC599Item::class), - $this->_em->getClassMetadata(DDC599Subitem::class), - $this->_em->getClassMetadata(DDC599Child::class), + $this->em->getClassMetadata(DDC599Item::class), + $this->em->getClassMetadata(DDC599Subitem::class), + $this->em->getClassMetadata(DDC599Child::class), ] ); } catch (\Exception $ignored) {} @@ -26,45 +26,45 @@ public function testCascadeRemoveOnInheritanceHierarchy() $child = new DDC599Child; $child->parent = $item; $item->getChildren()->add($child); - $this->_em->persist($item); - $this->_em->persist($child); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($item); + $this->em->persist($child); + $this->em->flush(); + $this->em->clear(); - $item = $this->_em->find(DDC599Item::class, $item->id); + $item = $this->em->find(DDC599Item::class, $item->id); - $this->_em->remove($item); - $this->_em->flush(); // Should not fail + $this->em->remove($item); + $this->em->flush(); // Should not fail - self::assertFalse($this->_em->contains($item)); + self::assertFalse($this->em->contains($item)); $children = $item->getChildren(); - self::assertFalse($this->_em->contains($children[0])); + self::assertFalse($this->em->contains($children[0])); - $this->_em->clear(); + $this->em->clear(); $item2 = new DDC599Subitem; $item2->elem = "bar"; - $this->_em->persist($item2); - $this->_em->flush(); + $this->em->persist($item2); + $this->em->flush(); $child2 = new DDC599Child; $child2->parent = $item2; $item2->getChildren()->add($child2); - $this->_em->persist($child2); - $this->_em->flush(); + $this->em->persist($child2); + $this->em->flush(); - $this->_em->remove($item2); - $this->_em->flush(); // should not fail + $this->em->remove($item2); + $this->em->flush(); // should not fail - self::assertFalse($this->_em->contains($item)); + self::assertFalse($this->em->contains($item)); $children = $item->getChildren(); - self::assertFalse($this->_em->contains($children[0])); + self::assertFalse($this->em->contains($children[0])); } public function testCascadeRemoveOnChildren() { - $class = $this->_em->getClassMetadata(DDC599Subitem::class); + $class = $this->em->getClassMetadata(DDC599Subitem::class); self::assertArrayHasKey('children', $class->associationMappings); self::assertContains('remove', $class->associationMappings['children']['cascade']); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC618Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC618Test.php index 9954f18d621..61e379df504 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC618Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC618Test.php @@ -11,10 +11,10 @@ protected function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC618Author::class), - $this->_em->getClassMetadata(DDC618Book::class) + $this->em->getClassMetadata(DDC618Author::class), + $this->em->getClassMetadata(DDC618Book::class) ] ); @@ -22,7 +22,7 @@ protected function setUp() $author = new DDC618Author(); $author->id = 10; $author->name = 'Joe'; - $this->_em->persist($author); + $this->em->persist($author); // Create author 11/Alice with two books 21/AliceA and 23/AliceB $author = new DDC618Author(); @@ -32,10 +32,10 @@ protected function setUp() $author->addBook('Reloaded'); $author->addBook('Test'); - $this->_em->persist($author); + $this->em->persist($author); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } catch(\Exception $e) { } @@ -44,10 +44,10 @@ protected function setUp() public function testIndexByHydrateObject() { $dql = 'SELECT A FROM Doctrine\Tests\ORM\Functional\Ticket\DDC618Author A INDEX BY A.name ORDER BY A.name ASC'; - $result = $this->_em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_OBJECT); + $result = $this->em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_OBJECT); - $joe = $this->_em->find(DDC618Author::class, 10); - $alice = $this->_em->find(DDC618Author::class, 11); + $joe = $this->em->find(DDC618Author::class, 10); + $alice = $this->em->find(DDC618Author::class, 11); self::assertArrayHasKey('Joe', $result, "INDEX BY A.name should return an index by the name of 'Joe'."); self::assertArrayHasKey('Alice', $result, "INDEX BY A.name should return an index by the name of 'Alice'."); @@ -56,10 +56,10 @@ public function testIndexByHydrateObject() public function testIndexByHydrateArray() { $dql = 'SELECT A FROM Doctrine\Tests\ORM\Functional\Ticket\DDC618Author A INDEX BY A.name ORDER BY A.name ASC'; - $result = $this->_em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY); + $result = $this->em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY); - $joe = $this->_em->find(DDC618Author::class, 10); - $alice = $this->_em->find(DDC618Author::class, 11); + $joe = $this->em->find(DDC618Author::class, 10); + $alice = $this->em->find(DDC618Author::class, 11); self::assertArrayHasKey('Joe', $result, "INDEX BY A.name should return an index by the name of 'Joe'."); self::assertArrayHasKey('Alice', $result, "INDEX BY A.name should return an index by the name of 'Alice'."); @@ -72,7 +72,7 @@ public function testIndexByJoin() { $dql = 'SELECT A, B FROM Doctrine\Tests\ORM\Functional\Ticket\DDC618Author A '. 'INNER JOIN A.books B INDEX BY B.title ORDER BY A.name ASC'; - $result = $this->_em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_OBJECT); + $result = $this->em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_OBJECT); self::assertEquals(3, count($result[0]->books)); // Alice, Joe doesn't appear because he has no books. self::assertEquals('Alice', $result[0]->name); @@ -80,7 +80,7 @@ public function testIndexByJoin() self::assertTrue( isset($result[0]->books["Reloaded"] ), "Indexing by title should have books by title."); self::assertTrue( isset($result[0]->books["Test"] ), "Indexing by title should have books by title."); - $result = $this->_em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY); + $result = $this->em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY); self::assertEquals(3, count($result[0]['books'])); // Alice, Joe doesn't appear because he has no books. self::assertEquals('Alice', $result[0]['name']); @@ -96,14 +96,14 @@ public function testIndexByToOneJoinSilentlyIgnored() { $dql = 'SELECT B, A FROM Doctrine\Tests\ORM\Functional\Ticket\DDC618Book B '. 'INNER JOIN B.author A INDEX BY A.name ORDER BY A.name ASC'; - $result = $this->_em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_OBJECT); + $result = $this->em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_OBJECT); self::assertInstanceOf(DDC618Book::class, $result[0]); self::assertInstanceOf(DDC618Author::class, $result[0]->author); $dql = 'SELECT B, A FROM Doctrine\Tests\ORM\Functional\Ticket\DDC618Book B '. 'INNER JOIN B.author A INDEX BY A.name ORDER BY A.name ASC'; - $result = $this->_em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY); + $result = $this->em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY); self::assertEquals("Alice", $result[0]['author']['name']); } @@ -115,7 +115,7 @@ public function testCombineIndexBy() { $dql = 'SELECT A, B FROM Doctrine\Tests\ORM\Functional\Ticket\DDC618Author A INDEX BY A.id '. 'INNER JOIN A.books B INDEX BY B.title ORDER BY A.name ASC'; - $result = $this->_em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_OBJECT); + $result = $this->em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_OBJECT); self::assertArrayHasKey(11, $result); // Alice diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC633Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC633Test.php index 426adb82eba..2ef219596c2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC633Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC633Test.php @@ -10,10 +10,10 @@ protected function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC633Patient::class), - $this->_em->getClassMetadata(DDC633Appointment::class), + $this->em->getClassMetadata(DDC633Patient::class), + $this->em->getClassMetadata(DDC633Appointment::class), ] ); } catch(\Exception $e) { @@ -33,16 +33,16 @@ public function testOneToOneEager() $app->patient = $pat; $pat->appointment = $app; - $this->_em->persist($app); - $this->_em->persist($pat); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($app); + $this->em->persist($pat); + $this->em->flush(); + $this->em->clear(); - $eagerAppointment = $this->_em->find(DDC633Appointment::class, $app->id); + $eagerAppointment = $this->em->find(DDC633Appointment::class, $app->id); // Eager loading of one to one leads to fetch-join self::assertNotInstanceOf(Proxy::class, $eagerAppointment->patient); - self::assertTrue($this->_em->contains($eagerAppointment->patient)); + self::assertTrue($this->em->contains($eagerAppointment->patient)); } /** @@ -57,13 +57,13 @@ public function testDQLDeferredEagerLoad() $app->patient = $pat; $pat->appointment = $app; - $this->_em->persist($app); - $this->_em->persist($pat); + $this->em->persist($app); + $this->em->persist($pat); } - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $appointments = $this->_em->createQuery("SELECT a FROM " . __NAMESPACE__ . "\DDC633Appointment a")->getResult(); + $appointments = $this->em->createQuery("SELECT a FROM " . __NAMESPACE__ . "\DDC633Appointment a")->getResult(); foreach ($appointments AS $eagerAppointment) { self::assertInstanceOf(Proxy::class, $eagerAppointment->patient); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC656Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC656Test.php index 997d7909b19..b7d4e165334 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC656Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC656Test.php @@ -8,9 +8,9 @@ protected function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC656Entity::class) + $this->em->getClassMetadata(DDC656Entity::class) ] ); } catch(\Exception $e) { @@ -23,20 +23,20 @@ public function testRecomputeSingleEntityChangeSet_PreservesFieldOrder() $entity = new DDC656Entity(); $entity->setName('test1'); $entity->setType('type1'); - $this->_em->persist($entity); + $this->em->persist($entity); - $this->_em->getUnitOfWork()->computeChangeSet($this->_em->getClassMetadata(get_class($entity)), $entity); - $data1 = $this->_em->getUnitOfWork()->getEntityChangeSet($entity); + $this->em->getUnitOfWork()->computeChangeSet($this->em->getClassMetadata(get_class($entity)), $entity); + $data1 = $this->em->getUnitOfWork()->getEntityChangeSet($entity); $entity->setType('type2'); - $this->_em->getUnitOfWork()->recomputeSingleEntityChangeSet($this->_em->getClassMetadata(get_class($entity)), $entity); - $data2 = $this->_em->getUnitOfWork()->getEntityChangeSet($entity); + $this->em->getUnitOfWork()->recomputeSingleEntityChangeSet($this->em->getClassMetadata(get_class($entity)), $entity); + $data2 = $this->em->getUnitOfWork()->getEntityChangeSet($entity); self::assertEquals(array_keys($data1), array_keys($data2)); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $persistedEntity = $this->_em->find(get_class($entity), $entity->specificationId); + $persistedEntity = $this->em->find(get_class($entity), $entity->specificationId); self::assertEquals('type2', $persistedEntity->getType()); self::assertEquals('test1', $persistedEntity->getName()); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC657Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC657Test.php index 9baee47c969..e790143e7f9 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC657Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC657Test.php @@ -19,7 +19,7 @@ protected function setUp() public function testEntitySingleResult() { - $query = $this->_em->createQuery('SELECT d FROM ' . DateTimeModel::class . ' d'); + $query = $this->em->createQuery('SELECT d FROM ' . DateTimeModel::class . ' d'); $datetime = $query->setMaxResults(1)->getSingleResult(); self::assertInstanceOf(DateTimeModel::class, $datetime); @@ -31,7 +31,7 @@ public function testEntitySingleResult() public function testScalarResult() { - $query = $this->_em->createQuery('SELECT d.id, d.time, d.date, d.datetime FROM ' . DateTimeModel::class . ' d ORDER BY d.date ASC'); + $query = $this->em->createQuery('SELECT d.id, d.time, d.date, d.datetime FROM ' . DateTimeModel::class . ' d ORDER BY d.date ASC'); $result = $query->getScalarResult(); self::assertCount(2,$result); @@ -47,7 +47,7 @@ public function testScalarResult() public function testaTicketEntityArrayResult() { - $query = $this->_em->createQuery('SELECT d FROM ' . DateTimeModel::class . ' d ORDER BY d.date ASC'); + $query = $this->em->createQuery('SELECT d FROM ' . DateTimeModel::class . ' d ORDER BY d.date ASC'); $result = $query->getArrayResult(); self::assertCount(2,$result); @@ -63,7 +63,7 @@ public function testaTicketEntityArrayResult() public function testTicketSingleResult() { - $query = $this->_em->createQuery('SELECT d.id, d.time, d.date, d.datetime FROM ' . DateTimeModel::class . ' d ORDER BY d.date ASC'); + $query = $this->em->createQuery('SELECT d.id, d.time, d.date, d.datetime FROM ' . DateTimeModel::class . ' d ORDER BY d.date ASC'); $datetime = $query->setMaxResults(1)->getSingleResult(); self::assertTrue(is_array($datetime)); @@ -75,7 +75,7 @@ public function testTicketSingleResult() public function testTicketResult() { - $query = $this->_em->createQuery('SELECT d.id, d.time, d.date, d.datetime FROM ' . DateTimeModel::class . ' d ORDER BY d.date ASC'); + $query = $this->em->createQuery('SELECT d.id, d.time, d.date, d.datetime FROM ' . DateTimeModel::class . ' d ORDER BY d.date ASC'); $result = $query->getResult(); self::assertCount(2,$result); @@ -108,9 +108,9 @@ public function loadFixtures() $dateTime2->time = new \DateTime('2010-02-02 12:12:12', $timezone); $dateTime2->datetime= new \DateTime('2010-02-02 12:12:12', $timezone); - $this->_em->persist($dateTime1); - $this->_em->persist($dateTime2); + $this->em->persist($dateTime1); + $this->em->persist($dateTime2); - $this->_em->flush(); + $this->em->flush(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC698Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC698Test.php index 892e7a355db..98ca1bea278 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC698Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC698Test.php @@ -8,10 +8,10 @@ protected function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC698Role::class), - $this->_em->getClassMetadata(DDC698Privilege::class) + $this->em->getClassMetadata(DDC698Role::class), + $this->em->getClassMetadata(DDC698Privilege::class) ] ); } catch(\Exception $e) { @@ -21,7 +21,7 @@ protected function setUp() public function testTicket() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('p', 'r') ->from(__NAMESPACE__ . '\DDC698Privilege', 'p') ->leftJoin('p.roles', 'r'); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php index 881acf302f1..7787dd491e3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php @@ -7,17 +7,17 @@ class DDC719Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { parent::setUp(); - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); - $this->_schemaTool->createSchema( + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC719Group::class), + $this->em->getClassMetadata(DDC719Group::class), ] ); } public function testIsEmptySqlGeneration() { - $q = $this->_em->createQuery( + $q = $this->em->createQuery( 'SELECT g, c FROM Doctrine\Tests\ORM\Functional\Ticket\DDC719Group g LEFT JOIN g.children c WHERE g.parents IS EMPTY' ); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC729Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC729Test.php index 4b1ac0e120d..e587cc839dc 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC729Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC729Test.php @@ -12,11 +12,11 @@ public function setUp() parent::setUp(); try { - $schemaTool = new \Doctrine\ORM\Tools\SchemaTool($this->_em); + $schemaTool = new \Doctrine\ORM\Tools\SchemaTool($this->em); $schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC729A::class), - $this->_em->getClassMetadata(DDC729B::class), + $this->em->getClassMetadata(DDC729A::class), + $this->em->getClassMetadata(DDC729B::class), ] ); } catch(\Exception $e) { @@ -30,10 +30,10 @@ public function testMergeManyToMany() $b = new DDC729B(); $a->related[] = $b; - $this->_em->persist($a); - $this->_em->persist($b); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($a); + $this->em->persist($b); + $this->em->flush(); + $this->em->clear(); $aId = $a->id; $a = new DDC729A(); @@ -41,17 +41,17 @@ public function testMergeManyToMany() self::assertInstanceOf(ArrayCollection::class, $a->related); - $a = $this->_em->merge($a); + $a = $this->em->merge($a); self::assertInstanceOf(PersistentCollection::class, $a->related); self::assertFalse($a->related->isInitialized(), "Collection should not be marked initialized."); self::assertFalse($a->related->isDirty(), "Collection should not be marked as dirty."); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $a = $this->_em->find(DDC729A::class, $aId); + $a = $this->em->find(DDC729A::class, $aId); self::assertEquals(1, count($a->related)); } @@ -62,26 +62,26 @@ public function testUnidirectionalMergeManyToMany() $b2 = new DDC729B(); $a->related[] = $b1; - $this->_em->persist($a); - $this->_em->persist($b1); - $this->_em->persist($b2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($a); + $this->em->persist($b1); + $this->em->persist($b2); + $this->em->flush(); + $this->em->clear(); $aId = $a->id; $a = new DDC729A(); $a->id = $aId; - $a = $this->_em->merge($a); + $a = $this->em->merge($a); - $a->related->set(0, $this->_em->merge($b1)); + $a->related->set(0, $this->em->merge($b1)); - $a->related->set(1, $this->_em->merge($b2)); + $a->related->set(1, $this->em->merge($b2)); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $a = $this->_em->find(DDC729A::class, $aId); + $a = $this->em->find(DDC729A::class, $aId); self::assertEquals(2, count($a->related)); } @@ -92,28 +92,28 @@ public function testBidirectionalMergeManyToMany() $b2 = new DDC729B(); $a->related[] = $b1; - $this->_em->persist($a); - $this->_em->persist($b1); - $this->_em->persist($b2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($a); + $this->em->persist($b1); + $this->em->persist($b2); + $this->em->flush(); + $this->em->clear(); $aId = $a->id; $a = new DDC729A(); $a->id = $aId; - $a = $this->_em->merge($a); + $a = $this->em->merge($a); - $a->related->set(0, $this->_em->merge($b1)); + $a->related->set(0, $this->em->merge($b1)); $b1->related->set(0, $a); - $a->related->set(1, $this->_em->merge($b2)); + $a->related->set(1, $this->em->merge($b2)); $b2->related->set(0, $a); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $a = $this->_em->find(DDC729A::class, $aId); + $a = $this->em->find(DDC729A::class, $aId); self::assertEquals(2, count($a->related)); } @@ -124,28 +124,28 @@ public function testBidirectionalMultiMergeManyToMany() $b2 = new DDC729B(); $a->related[] = $b1; - $this->_em->persist($a); - $this->_em->persist($b1); - $this->_em->persist($b2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($a); + $this->em->persist($b1); + $this->em->persist($b2); + $this->em->flush(); + $this->em->clear(); $aId = $a->id; $a = new DDC729A(); $a->id = $aId; - $a = $this->_em->merge($a); + $a = $this->em->merge($a); - $a->related->set(0, $this->_em->merge($b1)); - $b1->related->set(0, $this->_em->merge($a)); + $a->related->set(0, $this->em->merge($b1)); + $b1->related->set(0, $this->em->merge($a)); - $a->related->set(1, $this->_em->merge($b2)); - $b2->related->set(0, $this->_em->merge($a)); + $a->related->set(1, $this->em->merge($b2)); + $b2->related->set(0, $this->em->merge($a)); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $a = $this->_em->find(DDC729A::class, $aId); + $a = $this->em->find(DDC729A::class, $aId); self::assertEquals(2, count($a->related)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC735Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC735Test.php index 3b07f3a9a4f..9ee7cb495e0 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC735Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC735Test.php @@ -10,10 +10,10 @@ protected function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC735Product::class), - $this->_em->getClassMetadata(DDC735Review::class) + $this->em->getClassMetadata(DDC735Product::class), + $this->em->getClassMetadata(DDC735Review::class) ] ); } catch(\Exception $e) { @@ -28,8 +28,8 @@ public function testRemoveElement_AppliesOrphanRemoval() $review = new DDC735Review($product); // Persist and flush - $this->_em->persist($product); - $this->_em->flush(); + $this->em->persist($product); + $this->em->flush(); // Now you see it self::assertEquals(1, count($product->getReviews())); @@ -37,19 +37,19 @@ public function testRemoveElement_AppliesOrphanRemoval() // Remove the review $reviewId = $review->getId(); $product->removeReview($review); - $this->_em->flush(); + $this->em->flush(); // Now you don't self::assertEquals(0, count($product->getReviews()), 'count($reviews) should be 0 after removing its only Review'); // Refresh - $this->_em->refresh($product); + $this->em->refresh($product); // It should still be 0 self::assertEquals(0, count($product->getReviews()), 'count($reviews) should still be 0 after the refresh'); // Review should also not be available anymore - self::assertNull($this->_em->find(DDC735Review::class, $reviewId)); + self::assertNull($this->em->find(DDC735Review::class, $reviewId)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC736Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC736Test.php index ce8b2c45410..6d704d4dbe7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC736Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC736Test.php @@ -28,12 +28,12 @@ public function testReorderEntityFetchJoinForHydration() $cart->setPayment('cash'); $cart->setCustomer($cust); - $this->_em->persist($cust); - $this->_em->persist($cart); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($cust); + $this->em->persist($cart); + $this->em->flush(); + $this->em->clear(); - $result = $this->_em->createQuery("select c, c.name, ca, ca.payment from Doctrine\Tests\Models\ECommerce\ECommerceCart ca join ca.customer c") + $result = $this->em->createQuery("select c, c.name, ca, ca.payment from Doctrine\Tests\Models\ECommerce\ECommerceCart ca join ca.customer c") ->getSingleResult(/*\Doctrine\ORM\Query::HYDRATE_ARRAY*/); $cart2 = $result[0]; @@ -59,13 +59,13 @@ public function testDqlTreeWalkerReordering() $cart->setPayment('cash'); $cart->setCustomer($cust); - $this->_em->persist($cust); - $this->_em->persist($cart); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($cust); + $this->em->persist($cart); + $this->em->flush(); + $this->em->clear(); $dql = "select c, c.name, ca, ca.payment from Doctrine\Tests\Models\ECommerce\ECommerceCart ca join ca.customer c"; - $result = $this->_em->createQuery($dql) + $result = $this->em->createQuery($dql) ->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [DisableFetchJoinTreeWalker::class]) ->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC742Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC742Test.php index 8adcb08795e..815cd10c5c3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC742Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC742Test.php @@ -22,21 +22,21 @@ protected function setUp() mkdir($testDir); // using a Filesystemcache to ensure that the cached data is serialized - $this->_em->getMetadataFactory()->setCacheDriver(new FilesystemCache($testDir)); + $this->em->getMetadataFactory()->setCacheDriver(new FilesystemCache($testDir)); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC742User::class), - $this->_em->getClassMetadata(DDC742Comment::class) + $this->em->getClassMetadata(DDC742User::class), + $this->em->getClassMetadata(DDC742Comment::class) ] ); } catch(\Exception $e) { } // make sure classes will be deserialized from caches - $this->_em->getMetadataFactory()->setMetadataFor(DDC742User::class, null); - $this->_em->getMetadataFactory()->setMetadataFor(DDC742Comment::class, null); + $this->em->getMetadataFactory()->setMetadataFor(DDC742User::class, null); + $this->em->getMetadataFactory()->setMetadataFor(DDC742Comment::class, null); } public function testIssue() @@ -57,17 +57,18 @@ public function testIssue() $user->favoriteComments->add($comment1); $user->favoriteComments->add($comment2); - $this->_em->persist($user); - $this->_em->persist($comment1); - $this->_em->persist($comment2); - $this->_em->persist($comment3); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->persist($comment1); + $this->em->persist($comment2); + $this->em->persist($comment3); + $this->em->flush(); + $this->em->clear(); - $user = $this->_em->find(DDC742User::class, $user->id); - $user->favoriteComments->add($this->_em->find(DDC742Comment::class, $comment3->id)); + $user = $this->em->find(DDC742User::class, $user->id); + $user->favoriteComments->add($this->em->find(DDC742Comment::class, $comment3->id)); + + $this->em->flush(); - $this->_em->flush(); $this->addToAssertionCount(1); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC748Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC748Test.php index f596a02735c..9b66816e233 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC748Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC748Test.php @@ -27,12 +27,12 @@ public function testRefreshWithManyToOne() $article->text = "foo"; $article->topic = "bar"; - $this->_em->persist($user); - $this->_em->persist($article); - $this->_em->flush(); + $this->em->persist($user); + $this->em->persist($article); + $this->em->flush(); self::assertInstanceOf(Collection::class, $user->articles); - $this->_em->refresh($article); + $this->em->refresh($article); self::assertTrue($article !== $user->articles, "The article should not be replaced on the inverse side of the relation."); self::assertInstanceOf(Collection::class, $user->articles); } @@ -51,11 +51,11 @@ public function testRefreshOneToOne() $address->zip = 12345; $address->setUser($user); - $this->_em->persist($user); - $this->_em->persist($address); - $this->_em->flush(); + $this->em->persist($user); + $this->em->persist($address); + $this->em->flush(); - $this->_em->refresh($address); + $this->em->refresh($address); self::assertSame($user, $address->user); self::assertSame($user->address, $address); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php index 8898f006b23..33774b0f899 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php @@ -22,7 +22,7 @@ public function setUp() */ private function setCascadeMergeFor($class) { - $metadata = $this->_em->getMetadataFactory()->getMetaDataFor($class); + $metadata = $this->em->getMetadataFactory()->getMetaDataFor($class); foreach ($metadata->associationMappings as $key => &$associationMapping) { $associationMapping['cascade'] = ['merge']; @@ -51,16 +51,16 @@ public function testManyToManyMergeAssociationAdds() $group2 = new CmsGroup(); $group2->name = "Group 2"; - $this->_em->persist($cmsUser); - $this->_em->persist($group1); - $this->_em->persist($group2); - $this->_em->flush(); + $this->em->persist($cmsUser); + $this->em->persist($group1); + $this->em->persist($group2); + $this->em->flush(); $cmsUserId = $cmsUser->id; $group1Id = $group1->id; $group2Id = $group2->id; - $this->_em->clear(); + $this->em->clear(); // Now create detached versions of the entities with some new associations. $cmsUser = new CmsUser(); @@ -84,13 +84,13 @@ public function testManyToManyMergeAssociationAdds() $cmsUser->addGroup($group2); // Cascade merge of cmsUser followed by a flush should add in the bidirectional new many-to-many associations between the user and the groups - $this->_em->merge($cmsUser); - $this->_em->flush(); + $this->em->merge($cmsUser); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); - $cmsUsers = $this->_em->getRepository(CmsUser::class)->findAll(); - $cmsGroups = $this->_em->getRepository(CmsGroup::class)->findAll(); + $cmsUsers = $this->em->getRepository(CmsUser::class)->findAll(); + $cmsGroups = $this->em->getRepository(CmsGroup::class)->findAll(); // Check the entities are in the database self::assertEquals(1, sizeof($cmsUsers)); @@ -130,16 +130,16 @@ public function testManyToManyMergeAssociationRemoves() $cmsUser->addGroup($group1); $cmsUser->addGroup($group2); - $this->_em->persist($cmsUser); - $this->_em->persist($group1); - $this->_em->persist($group2); - $this->_em->flush(); + $this->em->persist($cmsUser); + $this->em->persist($group1); + $this->em->persist($group2); + $this->em->flush(); $cmsUserId = $cmsUser->id; $group1Id = $group1->id; $group2Id = $group2->id; - $this->_em->clear(); + $this->em->clear(); // Now create detached versions of the entities with NO associations. $cmsUser = new CmsUser(); @@ -160,13 +160,13 @@ public function testManyToManyMergeAssociationRemoves() $group2->users = new ArrayCollection(); // Cascade merge of cmsUser followed by a flush should result in the association array collection being empty - $this->_em->merge($cmsUser); - $this->_em->flush(); + $this->em->merge($cmsUser); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); - $cmsUsers = $this->_em->getRepository(CmsUser::class)->findAll(); - $cmsGroups = $this->_em->getRepository(CmsGroup::class)->findAll(); + $cmsUsers = $this->em->getRepository(CmsUser::class)->findAll(); + $cmsGroups = $this->em->getRepository(CmsGroup::class)->findAll(); // Check the entities are in the database self::assertEquals(1, sizeof($cmsUsers)); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC767Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC767Test.php index eee5f11e481..d814633b574 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC767Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC767Test.php @@ -35,37 +35,37 @@ public function testCollectionChangesInsideTransaction() $user->addGroup($group1); $user->addGroup($group2); - $this->_em->persist($user); - $this->_em->persist($group1); - $this->_em->persist($group2); - $this->_em->persist($group3); + $this->em->persist($user); + $this->em->persist($group1); + $this->em->persist($group2); + $this->em->persist($group3); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); /* @var $pUser CmsUser */ - $pUser = $this->_em->find(get_class($user), $user->id); + $pUser = $this->em->find(get_class($user), $user->id); self::assertNotNull($pUser, "User not retrieved from database."); $groups = [$group2->id, $group3->id]; try { - $this->_em->beginTransaction(); + $this->em->beginTransaction(); $pUser->groups->clear(); - $this->_em->flush(); + $this->em->flush(); // Add new foreach ($groups as $groupId) { - $pUser->addGroup($this->_em->find(get_class($group1), $groupId)); + $pUser->addGroup($this->em->find(get_class($group1), $groupId)); } - $this->_em->flush(); - $this->_em->commit(); + $this->em->flush(); + $this->em->commit(); } catch(\Exception $e) { - $this->_em->rollback(); + $this->em->rollback(); } } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC809Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC809Test.php index 8a09afa8a01..4644fbc9628 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC809Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC809Test.php @@ -7,14 +7,14 @@ class DDC809Test extends \Doctrine\Tests\OrmFunctionalTestCase public function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC809Variant::class), - $this->_em->getClassMetadata(DDC809SpecificationValue::class) + $this->em->getClassMetadata(DDC809Variant::class), + $this->em->getClassMetadata(DDC809SpecificationValue::class) ] ); - $conn = $this->_em->getConnection(); + $conn = $this->em->getConnection(); $conn->insert('specification_value_test', ['specification_value_id' => 94589]); $conn->insert('specification_value_test', ['specification_value_id' => 94593]); $conn->insert('specification_value_test', ['specification_value_id' => 94606]); @@ -41,7 +41,7 @@ public function setUp() */ public function testIssue() { - $result = $this->_em->createQueryBuilder() + $result = $this->em->createQueryBuilder() ->select('Variant, SpecificationValue') ->from(DDC809Variant::class, 'Variant') ->leftJoin('Variant.SpecificationValues', 'SpecificationValue') diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC812Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC812Test.php index 60e2c033f87..38c395552cb 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC812Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC812Test.php @@ -18,7 +18,7 @@ protected function setUp() */ public function testFetchJoinInitializesPreviouslyUninitializedCollectionOfManagedEntity() { - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); $article = new CmsArticle; $article->topic = "hello"; $article->text = "talk talk talk"; @@ -28,14 +28,14 @@ public function testFetchJoinInitializesPreviouslyUninitializedCollectionOfManag $comment->text = "stuff!"; $comment->article = $article; - $this->_em->persist($article); - $this->_em->persist($comment); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($article); + $this->em->persist($comment); + $this->em->flush(); + $this->em->clear(); - $article2 = $this->_em->find(get_class($article), $article->id); + $article2 = $this->em->find(get_class($article), $article->id); - $article2Again = $this->_em->createQuery( + $article2Again = $this->em->createQuery( "select a, c from Doctrine\Tests\Models\CMS\CmsArticle a join a.comments c where a.id = ?1") ->setParameter(1, $article->id) ->getSingleResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php index 5c962bf85bd..641f72cca09 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php @@ -8,20 +8,20 @@ public function setUp() { parent::setUp(); - $platform = $this->_em->getConnection()->getDatabasePlatform(); + $platform = $this->em->getConnection()->getDatabasePlatform(); if ($platform->getName() === 'oracle') { $this->markTestSkipped('Doesnt run on Oracle.'); } - $this->_em->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger()); + $this->em->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger()); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC832JoinedIndex::class), - $this->_em->getClassMetadata(DDC832JoinedTreeIndex::class), - $this->_em->getClassMetadata(DDC832Like::class), + $this->em->getClassMetadata(DDC832JoinedIndex::class), + $this->em->getClassMetadata(DDC832JoinedTreeIndex::class), + $this->em->getClassMetadata(DDC832Like::class), ] ); } catch(\Exception $e) { @@ -31,9 +31,9 @@ public function setUp() public function tearDown() { /* @var $sm \Doctrine\DBAL\Schema\AbstractSchemaManager */ - $platform = $this->_em->getConnection()->getDatabasePlatform(); + $platform = $this->em->getConnection()->getDatabasePlatform(); - $sm = $this->_em->getConnection()->getSchemaManager(); + $sm = $this->em->getConnection()->getSchemaManager(); $sm->dropTable($platform->quoteIdentifier('TREE_INDEX')); $sm->dropTable($platform->quoteIdentifier('INDEX')); @@ -45,15 +45,15 @@ public function tearDown() */ public function testQuotedTableBasicUpdate() { - $like = new DDC832Like('test'); - $this->_em->persist($like); - $this->_em->flush(); + $like = new DDC832Like("test"); + $this->em->persist($like); + $this->em->flush(); - $like->word = 'test2'; - $this->_em->flush(); - $this->_em->clear(); + $like->word = "test2"; + $this->em->flush(); + $this->em->clear(); - self::assertEquals($like, $this->_em->find(DDC832Like::class, $like->id)); + self::assertEquals($like, $this->em->find(DDC832Like::class, $like->id)); } /** @@ -61,17 +61,17 @@ public function testQuotedTableBasicUpdate() */ public function testQuotedTableBasicRemove() { - $like = new DDC832Like('test'); - $this->_em->persist($like); - $this->_em->flush(); + $like = new DDC832Like("test"); + $this->em->persist($like); + $this->em->flush(); $idToBeRemoved = $like->id; - $this->_em->remove($like); - $this->_em->flush(); - $this->_em->clear(); + $this->em->remove($like); + $this->em->flush(); + $this->em->clear(); - self::assertNull($this->_em->find(DDC832Like::class, $idToBeRemoved)); + self::assertNull($this->em->find(DDC832Like::class, $idToBeRemoved)); } /** @@ -79,15 +79,15 @@ public function testQuotedTableBasicRemove() */ public function testQuotedTableJoinedUpdate() { - $index = new DDC832JoinedIndex('test'); - $this->_em->persist($index); - $this->_em->flush(); + $index = new DDC832JoinedIndex("test"); + $this->em->persist($index); + $this->em->flush(); - $index->name = 'asdf'; - $this->_em->flush(); - $this->_em->clear(); + $index->name = "asdf"; + $this->em->flush(); + $this->em->clear(); - self::assertEquals($index, $this->_em->find(DDC832JoinedIndex::class, $index->id)); + self::assertEquals($index, $this->em->find(DDC832JoinedIndex::class, $index->id)); } /** @@ -95,17 +95,17 @@ public function testQuotedTableJoinedUpdate() */ public function testQuotedTableJoinedRemove() { - $index = new DDC832JoinedIndex('test'); - $this->_em->persist($index); - $this->_em->flush(); + $index = new DDC832JoinedIndex("test"); + $this->em->persist($index); + $this->em->flush(); $idToBeRemoved = $index->id; - $this->_em->remove($index); - $this->_em->flush(); - $this->_em->clear(); + $this->em->remove($index); + $this->em->flush(); + $this->em->clear(); - self::assertNull($this->_em->find(DDC832JoinedIndex::class, $idToBeRemoved)); + self::assertNull($this->em->find(DDC832JoinedIndex::class, $idToBeRemoved)); } /** @@ -113,15 +113,15 @@ public function testQuotedTableJoinedRemove() */ public function testQuotedTableJoinedChildUpdate() { - $index = new DDC832JoinedTreeIndex('test', 1, 2); - $this->_em->persist($index); - $this->_em->flush(); + $index = new DDC832JoinedTreeIndex("test", 1, 2); + $this->em->persist($index); + $this->em->flush(); - $index->name = 'asdf'; - $this->_em->flush(); - $this->_em->clear(); + $index->name = "asdf"; + $this->em->flush(); + $this->em->clear(); - self::assertEquals($index, $this->_em->find(DDC832JoinedTreeIndex::class, $index->id)); + self::assertEquals($index, $this->em->find(DDC832JoinedTreeIndex::class, $index->id)); } /** @@ -129,17 +129,17 @@ public function testQuotedTableJoinedChildUpdate() */ public function testQuotedTableJoinedChildRemove() { - $index = new DDC832JoinedTreeIndex('test', 1, 2); - $this->_em->persist($index); - $this->_em->flush(); + $index = new DDC832JoinedTreeIndex("test", 1, 2); + $this->em->persist($index); + $this->em->flush(); $idToBeRemoved = $index->id; - $this->_em->remove($index); - $this->_em->flush(); - $this->_em->clear(); + $this->em->remove($index); + $this->em->flush(); + $this->em->clear(); - self::assertNull($this->_em->find(DDC832JoinedTreeIndex::class, $idToBeRemoved)); + self::assertNull($this->em->find(DDC832JoinedTreeIndex::class, $idToBeRemoved)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC837Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC837Test.php index c7c281ba054..0e9538fce6e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC837Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC837Test.php @@ -7,13 +7,13 @@ class DDC837Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC837Super::class), - $this->_em->getClassMetadata(DDC837Class1::class), - $this->_em->getClassMetadata(DDC837Class2::class), - $this->_em->getClassMetadata(DDC837Class3::class), - $this->_em->getClassMetadata(DDC837Aggregate::class), + $this->em->getClassMetadata(DDC837Super::class), + $this->em->getClassMetadata(DDC837Class1::class), + $this->em->getClassMetadata(DDC837Class2::class), + $this->em->getClassMetadata(DDC837Class3::class), + $this->em->getClassMetadata(DDC837Aggregate::class), ] ); } @@ -23,7 +23,7 @@ protected function setUp() */ public function testIssue() { - //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); + //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); $c1 = new DDC837Class1(); $c1->title = "Foo"; @@ -42,16 +42,16 @@ public function testIssue() $c3->apples = "Baz"; $c3->bananas = "Baz"; - $this->_em->persist($c1); - $this->_em->persist($aggregate1); - $this->_em->persist($c2); - $this->_em->persist($aggregate2); - $this->_em->persist($c3); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($c1); + $this->em->persist($aggregate1); + $this->em->persist($c2); + $this->em->persist($aggregate2); + $this->em->persist($c3); + $this->em->flush(); + $this->em->clear(); // Test Class1 - $e1 = $this->_em->find(DDC837Super::class, $c1->id); + $e1 = $this->em->find(DDC837Super::class, $c1->id); self::assertInstanceOf(DDC837Class1::class, $e1); self::assertEquals('Foo', $e1->title); @@ -60,7 +60,7 @@ public function testIssue() self::assertEquals('test1', $e1->aggregate->getSysname()); // Test Class 2 - $e2 = $this->_em->find(DDC837Super::class, $c2->id); + $e2 = $this->em->find(DDC837Super::class, $c2->id); self::assertInstanceOf(DDC837Class2::class, $e2); self::assertEquals('Bar', $e2->title); @@ -69,7 +69,7 @@ public function testIssue() self::assertInstanceOf(DDC837Aggregate::class, $e2->aggregate); self::assertEquals('test2', $e2->aggregate->getSysname()); - $all = $this->_em->getRepository(DDC837Super::class)->findAll(); + $all = $this->em->getRepository(DDC837Super::class)->findAll(); foreach ($all as $obj) { if ($obj instanceof DDC837Class1) { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC849Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC849Test.php index 476389c751f..fb87168383f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC849Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC849Test.php @@ -29,14 +29,14 @@ public function setUp() $this->user->addGroup($this->group1); $this->user->addGroup($this->group2); - $this->_em->persist($this->user); - $this->_em->persist($this->group1); - $this->_em->persist($this->group2); + $this->em->persist($this->user); + $this->em->persist($this->group1); + $this->em->persist($this->group2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $this->user = $this->_em->find(CmsUser::class, $this->user->getId()); + $this->user = $this->em->find(CmsUser::class, $this->user->getId()); } public function testRemoveContains() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC881Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC881Test.php index 41e40ab3377..3430facecbf 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC881Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC881Test.php @@ -13,11 +13,11 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC881User::class), - $this->_em->getClassMetadata(DDC881Phonenumber::class), - $this->_em->getClassMetadata(DDC881Phonecall::class), + $this->em->getClassMetadata(DDC881User::class), + $this->em->getClassMetadata(DDC881Phonenumber::class), + $this->em->getClassMetadata(DDC881Phonecall::class), ] ); } catch (\Exception $e) { @@ -34,61 +34,61 @@ public function testIssue() /* Create two test users: albert and alfons */ $albert = new DDC881User; $albert->setName("albert"); - $this->_em->persist($albert); + $this->em->persist($albert); $alfons = new DDC881User; $alfons->setName("alfons"); - $this->_em->persist($alfons); + $this->em->persist($alfons); - $this->_em->flush(); + $this->em->flush(); /* Assign two phone numbers to each user */ $phoneAlbert1 = new DDC881PhoneNumber(); $phoneAlbert1->setUser($albert); $phoneAlbert1->setId(1); $phoneAlbert1->setPhoneNumber("albert home: 012345"); - $this->_em->persist($phoneAlbert1); + $this->em->persist($phoneAlbert1); $phoneAlbert2 = new DDC881PhoneNumber(); $phoneAlbert2->setUser($albert); $phoneAlbert2->setId(2); $phoneAlbert2->setPhoneNumber("albert mobile: 67890"); - $this->_em->persist($phoneAlbert2); + $this->em->persist($phoneAlbert2); $phoneAlfons1 = new DDC881PhoneNumber(); $phoneAlfons1->setId(1); $phoneAlfons1->setUser($alfons); $phoneAlfons1->setPhoneNumber("alfons home: 012345"); - $this->_em->persist($phoneAlfons1); + $this->em->persist($phoneAlfons1); $phoneAlfons2 = new DDC881PhoneNumber(); $phoneAlfons2->setId(2); $phoneAlfons2->setUser($alfons); $phoneAlfons2->setPhoneNumber("alfons mobile: 67890"); - $this->_em->persist($phoneAlfons2); + $this->em->persist($phoneAlfons2); /* We call alfons and albert once on their mobile numbers */ $call1 = new DDC881PhoneCall(); $call1->setPhoneNumber($phoneAlfons2); - $this->_em->persist($call1); + $this->em->persist($call1); $call2 = new DDC881PhoneCall(); $call2->setPhoneNumber($phoneAlbert2); - $this->_em->persist($call2); + $this->em->persist($call2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); // fetch-join that foreign-key/primary-key entity association $dql = "SELECT c, p FROM " . DDC881PhoneCall::class . " c JOIN c.phonenumber p"; - $calls = $this->_em->createQuery($dql)->getResult(); + $calls = $this->em->createQuery($dql)->getResult(); self::assertEquals(2, count($calls)); self::assertNotInstanceOf(Proxy::class, $calls[0]->getPhoneNumber()); self::assertNotInstanceOf(Proxy::class, $calls[1]->getPhoneNumber()); $dql = "SELECT p, c FROM " . DDC881PhoneNumber::class . " p JOIN p.calls c"; - $numbers = $this->_em->createQuery($dql)->getResult(); + $numbers = $this->em->createQuery($dql)->getResult(); self::assertEquals(2, count($numbers)); self::assertInstanceOf(PersistentCollection::class, $numbers[0]->getCalls()); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC933Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC933Test.php index f6216a16237..db112fe6de7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC933Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC933Test.php @@ -21,7 +21,7 @@ public function setUp() */ public function testLockCTIClass() { - if ($this->_em->getConnection()->getDatabasePlatform()->getName() === 'sqlite') { + if ($this->em->getConnection()->getDatabasePlatform()->getName() === 'sqlite') { self::markTestSkipped('It should not run on in-memory databases'); } @@ -31,12 +31,12 @@ public function testLockCTIClass() $manager->setTitle('Vice President of This Test'); $manager->setDepartment("Foo"); - $this->_em->persist($manager); - $this->_em->flush(); + $this->em->persist($manager); + $this->em->flush(); - $this->_em->beginTransaction(); - $this->_em->lock($manager, LockMode::PESSIMISTIC_READ); - $this->_em->rollback(); + $this->em->beginTransaction(); + $this->em->lock($manager, LockMode::PESSIMISTIC_READ); + $this->em->rollback(); // if lock hasn't been released we'd have an exception here $this->assertManagerCanBeUpdatedOnAnotherConnection($manager->getId(), 'Master of This Test'); @@ -55,7 +55,7 @@ public function testLockCTIClass() */ private function assertManagerCanBeUpdatedOnAnotherConnection(int $id, string $newName) { - $em = $this->_getEntityManager(TestUtil::getConnection()); + $em = $this->getEntityManager(TestUtil::getConnection()); /** @var CompanyManager $manager */ $manager = $em->find(CompanyManager::class, $id); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC949Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC949Test.php index 56df4c20cbd..88b6241a749 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC949Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC949Test.php @@ -24,13 +24,13 @@ public function testBooleanThroughRepository() $false = new BooleanModel(); $false->booleanField = false; - $this->_em->persist($true); - $this->_em->persist($false); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($true); + $this->em->persist($false); + $this->em->flush(); + $this->em->clear(); - $true = $this->_em->getRepository(BooleanModel::class)->findOneBy(['booleanField' => true]); - $false = $this->_em->getRepository(BooleanModel::class)->findOneBy(['booleanField' => false]); + $true = $this->em->getRepository(BooleanModel::class)->findOneBy(['booleanField' => true]); + $false = $this->em->getRepository(BooleanModel::class)->findOneBy(['booleanField' => false]); self::assertInstanceOf(BooleanModel::class, $true, "True model not found"); self::assertTrue($true->booleanField, "True Boolean Model should be true."); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC960Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC960Test.php index 5c781fe24c8..e4bed6e269c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC960Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC960Test.php @@ -10,10 +10,10 @@ protected function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC960Root::class), - $this->_em->getClassMetadata(DDC960Child::class) + $this->em->getClassMetadata(DDC960Root::class), + $this->em->getClassMetadata(DDC960Child::class) ] ); } catch(\Exception $e) { @@ -27,12 +27,12 @@ protected function setUp() public function testUpdateRootVersion() { $child = new DDC960Child('Test'); - $this->_em->persist($child); - $this->_em->flush(); + $this->em->persist($child); + $this->em->flush(); $child->setName("Test2"); - $this->_em->flush(); + $this->em->flush(); self::assertEquals(2, $child->getVersion()); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC992Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC992Test.php index c9bf9fc812d..e8d79d966d1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC992Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC992Test.php @@ -13,11 +13,11 @@ public function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC992Role::class), - $this->_em->getClassMetadata(DDC992Parent::class), - $this->_em->getClassMetadata(DDC992Child::class), + $this->em->getClassMetadata(DDC992Role::class), + $this->em->getClassMetadata(DDC992Parent::class), + $this->em->getClassMetadata(DDC992Child::class), ] ); } catch(\Exception $e) { @@ -35,12 +35,12 @@ public function testIssue() $role->extendedBy[] = $child; $child->extends[] = $role; - $this->_em->persist($role); - $this->_em->persist($child); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($role); + $this->em->persist($child); + $this->em->flush(); + $this->em->clear(); - $child = $this->_em->getRepository(get_class($role))->find($child->roleID); + $child = $this->em->getRepository(get_class($role))->find($child->roleID); $parents = count($child->extends); self::assertEquals(1, $parents); foreach ($child->extends AS $parent) { @@ -55,13 +55,13 @@ public function testOneToManyChild() $child->parent = $parent; $parent->childs[] = $child; - $this->_em->persist($parent); - $this->_em->persist($child); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($parent); + $this->em->persist($child); + $this->em->flush(); + $this->em->clear(); - $parentRepository = $this->_em->getRepository(get_class($parent)); - $childRepository = $this->_em->getRepository(get_class($child)); + $parentRepository = $this->em->getRepository(get_class($parent)); + $childRepository = $this->em->getRepository(get_class($child)); $parent = $parentRepository->find($parent->id); self::assertEquals(1, count($parent->childs)); @@ -70,12 +70,12 @@ public function testOneToManyChild() $child = $parentRepository->findOneBy(["id" => $child->id]); self::assertSame($parent->childs[0], $child); - $this->_em->clear(); + $this->em->clear(); $child = $parentRepository->find($child->id); self::assertEquals(0, count($child->childs)); - $this->_em->clear(); + $this->em->clear(); $child = $childRepository->find($child->id); self::assertEquals(0, count($child->childs)); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5762Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5762Test.php index b7a748ddc46..a930a780800 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5762Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5762Test.php @@ -15,11 +15,11 @@ protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(GH5762Driver::class), - $this->_em->getClassMetadata(GH5762DriverRide::class), - $this->_em->getClassMetadata(GH5762Car::class), + $this->em->getClassMetadata(GH5762Driver::class), + $this->em->getClassMetadata(GH5762DriverRide::class), + $this->em->getClassMetadata(GH5762Car::class), ] ); } @@ -51,7 +51,7 @@ private function fetchData() { $this->createData(); - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('d, dr, c') ->from(GH5762Driver::class, 'd') ->leftJoin('d.driverRides', 'dr') @@ -77,22 +77,22 @@ private function createData() $ride4 = new GH5762DriverRide($driver, $car4); $ride5 = new GH5762DriverRide($driver, $car5); - $this->_em->persist($car1); - $this->_em->persist($car2); - $this->_em->persist($car3); - $this->_em->persist($car4); - $this->_em->persist($car5); + $this->em->persist($car1); + $this->em->persist($car2); + $this->em->persist($car3); + $this->em->persist($car4); + $this->em->persist($car5); - $this->_em->persist($driver); + $this->em->persist($driver); - $this->_em->persist($ride1); - $this->_em->persist($ride2); - $this->_em->persist($ride3); - $this->_em->persist($ride4); - $this->_em->persist($ride5); + $this->em->persist($ride1); + $this->em->persist($ride2); + $this->em->persist($ride3); + $this->em->persist($ride4); + $this->em->persist($ride5); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5804Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5804Test.php index f503ce31453..20f07f3ba07 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5804Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5804Test.php @@ -19,8 +19,8 @@ protected function setUp() Type::addType(GH5804Type::NAME, GH5804Type::class); - $this->_schemaTool->createSchema( - [$this->_em->getClassMetadata(GH5804Article::class)] + $this->schemaTool->createSchema( + [$this->em->getClassMetadata(GH5804Article::class)] ); } @@ -28,14 +28,14 @@ public function testTextColumnSaveAndRetrieve2() { $firstArticle = new GH5804Article; $firstArticle->text = 'Max'; - $this->_em->persist($firstArticle); - $this->_em->flush(); + $this->em->persist($firstArticle); + $this->em->flush(); self::assertSame(1, $firstArticle->version); $firstArticle->text = 'Moritz'; - $this->_em->persist($firstArticle); - $this->_em->flush(); + $this->em->persist($firstArticle); + $this->em->flush(); self::assertSame(2, $firstArticle->version); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH6141Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH6141Test.php index 00ae936a4b1..5a78525ec3a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH6141Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH6141Test.php @@ -15,11 +15,11 @@ protected function setUp() Type::addType(GH6141PeopleType::NAME, GH6141PeopleType::class); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(GH6141Person::class), - $this->_em->getClassMetadata(GH6141Boss::class), - $this->_em->getClassMetadata(GH6141Employee::class), + $this->em->getClassMetadata(GH6141Person::class), + $this->em->getClassMetadata(GH6141Boss::class), + $this->em->getClassMetadata(GH6141Employee::class), ] ); } @@ -36,13 +36,13 @@ public function testEnumDiscriminatorsShouldBeConvertedToString() $boss = new GH6141Boss('John'); $employee = new GH6141Employee('Bob'); - $this->_em->persist($boss); - $this->_em->persist($employee); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($boss); + $this->em->persist($employee); + $this->em->flush(); + $this->em->clear(); // Using DQL here to make sure that we'll use ObjectHydrator instead of SimpleObjectHydrator - $query = $this->_em->createQueryBuilder() + $query = $this->em->createQueryBuilder() ->select('person') ->from(GH6141Person::class, 'person') ->where('person.name = :name') diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/Issue5989Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/Issue5989Test.php index cf601b99aed..c31dd05d8d9 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/Issue5989Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/Issue5989Test.php @@ -23,24 +23,24 @@ public function testSimpleArrayTypeHydratedCorrectlyInJoinedInheritance() $managerTags = ['tag1', 'tag2']; $manager->tags = $managerTags; - $this->_em->persist($manager); + $this->em->persist($manager); $employee = new Issue5989Employee(); $employeeTags =['tag2', 'tag3']; $employee->tags = $employeeTags; - $this->_em->persist($employee); + $this->em->persist($employee); - $this->_em->flush(); + $this->em->flush(); $managerId = $manager->id; $employeeId = $employee->id; // clear entity manager so that $repository->find actually fetches them and uses the hydrator // instead of just returning the existing managed entities - $this->_em->clear(); + $this->em->clear(); - $repository = $this->_em->getRepository(Issue5989Person::class); + $repository = $this->em->getRepository(Issue5989Person::class); $manager = $repository->find($managerId); $employee = $repository->find($employeeId); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket2481Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket2481Test.php index 47b7a31734a..f511215bde7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket2481Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket2481Test.php @@ -9,22 +9,22 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(Ticket2481Product::class) + $this->em->getClassMetadata(Ticket2481Product::class) ] ); } catch (\Exception $e) { // Swallow all exceptions. We do not test the schema tool here. } - $this->_conn = $this->_em->getConnection(); + $this->conn = $this->em->getConnection(); } public function testEmptyInsert() { $test = new Ticket2481Product(); - $this->_em->persist($test); - $this->_em->flush(); + $this->em->persist($test); + $this->em->flush(); self::assertTrue($test->id > 0); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket69.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket69.php index 71f117cbf63..7bcd5b1adfb 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket69.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket69.php @@ -12,11 +12,11 @@ protected function setUp() { parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(Lemma::class), - $this->_em->getClassMetadata(Relation::class), - $this->_em->getClassMetadata(RelationType::class) + $this->em->getClassMetadata(Lemma::class), + $this->em->getClassMetadata(Relation::class), + $this->em->getClassMetadata(RelationType::class) ] ); } catch (\Exception $e) { @@ -66,19 +66,19 @@ public function testIssue() $lemma1->addRelation($relation2); $lemma1->addRelation($relation3); - $this->_em->persist($type1); - $this->_em->persist($type2); - $this->_em->persist($lemma1); - $this->_em->persist($lemma2); - $this->_em->persist($lemma3); - $this->_em->persist($lemma4); + $this->em->persist($type1); + $this->em->persist($type2); + $this->em->persist($lemma1); + $this->em->persist($lemma2); + $this->em->persist($lemma3); + $this->em->persist($lemma4); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); //end setup // test One To Many - $query = $this->_em->createQuery("SELECT l FROM Doctrine\Tests\ORM\Functional\Ticket\Lemma l Where l.lemma = 'foo'"); + $query = $this->em->createQuery("SELECT l FROM Doctrine\Tests\ORM\Functional\Ticket\Lemma l Where l.lemma = 'foo'"); $res = $query->getResult(); $lemma = $res[0]; @@ -91,7 +91,7 @@ public function testIssue() self::assertTrue($relation->getType()->getType() != ''); } - $this->_em->clear(); + $this->em->clear(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/TypeTest.php b/tests/Doctrine/Tests/ORM/Functional/TypeTest.php index d2af16c879c..980de205e5f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/TypeTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/TypeTest.php @@ -25,12 +25,12 @@ public function testDecimal() $decimal->decimal = 0.15; $decimal->highScale = 0.1515; - $this->_em->persist($decimal); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($decimal); + $this->em->flush(); + $this->em->clear(); $dql = 'SELECT d FROM ' . DecimalModel::class . ' d'; - $decimal = $this->_em->createQuery($dql)->getSingleResult(); + $decimal = $this->em->createQuery($dql)->getSingleResult(); self::assertSame('0.15', $decimal->decimal); self::assertSame('0.1515', $decimal->highScale); @@ -45,22 +45,22 @@ public function testBoolean() $bool = new BooleanModel(); $bool->booleanField = true; - $this->_em->persist($bool); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($bool); + $this->em->flush(); + $this->em->clear(); $dql = 'SELECT b FROM ' . BooleanModel::class . ' b WHERE b.booleanField = true'; - $bool = $this->_em->createQuery($dql)->getSingleResult(); + $bool = $this->em->createQuery($dql)->getSingleResult(); self::assertTrue($bool->booleanField); $bool->booleanField = false; - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); $dql = 'SELECT b FROM ' . BooleanModel::class . ' b WHERE b.booleanField = false'; - $bool = $this->_em->createQuery($dql)->getSingleResult(); + $bool = $this->em->createQuery($dql)->getSingleResult(); self::assertFalse($bool->booleanField); } @@ -71,12 +71,12 @@ public function testArray() $serialize->array["foo"] = "bar"; $serialize->array["bar"] = "baz"; - $this->_em->persist($serialize); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($serialize); + $this->em->flush(); + $this->em->clear(); $dql = 'SELECT s FROM ' . SerializationModel::class . ' s'; - $serialize = $this->_em->createQuery($dql)->getSingleResult(); + $serialize = $this->em->createQuery($dql)->getSingleResult(); self::assertSame(["foo" => "bar", "bar" => "baz"], $serialize->array); } @@ -86,12 +86,12 @@ public function testObject() $serialize = new SerializationModel(); $serialize->object = new \stdClass(); - $this->_em->persist($serialize); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($serialize); + $this->em->flush(); + $this->em->clear(); $dql = 'SELECT s FROM ' . SerializationModel::class . ' s'; - $serialize = $this->_em->createQuery($dql)->getSingleResult(); + $serialize = $this->em->createQuery($dql)->getSingleResult(); self::assertInstanceOf('stdClass', $serialize->object); } @@ -101,11 +101,11 @@ public function testDate() $dateTime = new DateTimeModel(); $dateTime->date = new \DateTime('2009-10-01', new \DateTimeZone('Europe/Berlin')); - $this->_em->persist($dateTime); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($dateTime); + $this->em->flush(); + $this->em->clear(); - $dateTimeDb = $this->_em->find(DateTimeModel::class, $dateTime->id); + $dateTimeDb = $this->em->find(DateTimeModel::class, $dateTime->id); self::assertInstanceOf(\DateTime::class, $dateTimeDb->date); self::assertEquals('2009-10-01', $dateTimeDb->date->format('Y-m-d')); @@ -116,18 +116,18 @@ public function testDateTime() $dateTime = new DateTimeModel(); $dateTime->datetime = new \DateTime('2009-10-02 20:10:52', new \DateTimeZone('Europe/Berlin')); - $this->_em->persist($dateTime); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($dateTime); + $this->em->flush(); + $this->em->clear(); - $dateTimeDb = $this->_em->find(DateTimeModel::class, $dateTime->id); + $dateTimeDb = $this->em->find(DateTimeModel::class, $dateTime->id); self::assertInstanceOf(\DateTime::class, $dateTimeDb->datetime); self::assertEquals('2009-10-02 20:10:52', $dateTimeDb->datetime->format('Y-m-d H:i:s')); $articles = $this->_em ->getRepository(DateTimeModel::class) - ->findBy(['datetime' => new \DateTime( "now" )]) + ->findBy(['datetime' => new \DateTime("now")]) ; self::assertEmpty($articles); @@ -140,9 +140,9 @@ public function testDqlQueryBindDateTimeInstance() $dateTime = new DateTimeModel(); $dateTime->datetime = $date; - $this->_em->persist($dateTime); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($dateTime); + $this->em->flush(); + $this->em->clear(); $dateTimeDb = $this->_em ->createQuery('SELECT d FROM Doctrine\Tests\Models\Generic\DateTimeModel d WHERE d.datetime = ?1') @@ -160,9 +160,9 @@ public function testDqlQueryBuilderBindDateTimeInstance() $dateTime = new DateTimeModel(); $dateTime->datetime = $date; - $this->_em->persist($dateTime); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($dateTime); + $this->em->flush(); + $this->em->clear(); $dateTimeDb = $this->_em->createQueryBuilder() ->select('d') @@ -181,11 +181,11 @@ public function testTime() $dateTime = new DateTimeModel(); $dateTime->time = new \DateTime('2010-01-01 19:27:20'); - $this->_em->persist($dateTime); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($dateTime); + $this->em->flush(); + $this->em->clear(); - $dateTimeDb = $this->_em->find(DateTimeModel::class, $dateTime->id); + $dateTimeDb = $this->em->find(DateTimeModel::class, $dateTime->id); self::assertInstanceOf(\DateTime::class, $dateTime->time); self::assertSame('19:27:20', $dateTime->time->format('H:i:s')); diff --git a/tests/Doctrine/Tests/ORM/Functional/TypeValueSqlTest.php b/tests/Doctrine/Tests/ORM/Functional/TypeValueSqlTest.php index b8a2744f8d0..4cb29ed8546 100644 --- a/tests/Doctrine/Tests/ORM/Functional/TypeValueSqlTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/TypeValueSqlTest.php @@ -35,17 +35,17 @@ public function testUpperCaseStringType() $entity = new CustomTypeUpperCase(); $entity->lowerCaseString = 'foo'; - $this->_em->persist($entity); - $this->_em->flush(); + $this->em->persist($entity); + $this->em->flush(); $id = $entity->id; - $this->_em->clear(); + $this->em->clear(); - $entity = $this->_em->find('\Doctrine\Tests\Models\CustomType\CustomTypeUpperCase', $id); + $entity = $this->em->find('\Doctrine\Tests\Models\CustomType\CustomTypeUpperCase', $id); self::assertEquals('foo', $entity->lowerCaseString, 'Entity holds lowercase string'); - self::assertEquals('FOO', $this->_em->getConnection()->fetchColumn("select lowerCaseString from customtype_uppercases where id=".$entity->id.""), 'Database holds uppercase string'); + self::assertEquals('FOO', $this->em->getConnection()->fetchColumn("select lowerCaseString from customtype_uppercases where id=".$entity->id.""), 'Database holds uppercase string'); } /** @@ -58,31 +58,31 @@ public function testUpperCaseStringTypeWhenColumnNameIsDefined() $entity->lowerCaseString = 'Some Value'; $entity->namedLowerCaseString = 'foo'; - $this->_em->persist($entity); - $this->_em->flush(); + $this->em->persist($entity); + $this->em->flush(); $id = $entity->id; - $this->_em->clear(); + $this->em->clear(); - $entity = $this->_em->find('\Doctrine\Tests\Models\CustomType\CustomTypeUpperCase', $id); + $entity = $this->em->find('\Doctrine\Tests\Models\CustomType\CustomTypeUpperCase', $id); self::assertEquals('foo', $entity->namedLowerCaseString, 'Entity holds lowercase string'); - self::assertEquals('FOO', $this->_em->getConnection()->fetchColumn("select named_lower_case_string from customtype_uppercases where id=".$entity->id.""), 'Database holds uppercase string'); + self::assertEquals('FOO', $this->em->getConnection()->fetchColumn("select named_lower_case_string from customtype_uppercases where id=".$entity->id.""), 'Database holds uppercase string'); $entity->namedLowerCaseString = 'bar'; - $this->_em->persist($entity); - $this->_em->flush(); + $this->em->persist($entity); + $this->em->flush(); $id = $entity->id; - $this->_em->clear(); + $this->em->clear(); - $entity = $this->_em->find('\Doctrine\Tests\Models\CustomType\CustomTypeUpperCase', $id); + $entity = $this->em->find('\Doctrine\Tests\Models\CustomType\CustomTypeUpperCase', $id); self::assertEquals('bar', $entity->namedLowerCaseString, 'Entity holds lowercase string'); - self::assertEquals('BAR', $this->_em->getConnection()->fetchColumn("select named_lower_case_string from customtype_uppercases where id=".$entity->id.""), 'Database holds uppercase string'); + self::assertEquals('BAR', $this->em->getConnection()->fetchColumn("select named_lower_case_string from customtype_uppercases where id=".$entity->id.""), 'Database holds uppercase string'); } public function testTypeValueSqlWithAssociations() @@ -97,19 +97,19 @@ public function testTypeValueSqlWithAssociations() $parent->addMyFriend($friend1); $parent->addMyFriend($friend2); - $this->_em->persist($parent); - $this->_em->persist($friend1); - $this->_em->persist($friend2); - $this->_em->flush(); + $this->em->persist($parent); + $this->em->persist($friend1); + $this->em->persist($friend2); + $this->em->flush(); $parentId = $parent->id; - $this->_em->clear(); + $this->em->clear(); - $entity = $this->_em->find(CustomTypeParent::class, $parentId); + $entity = $this->em->find(CustomTypeParent::class, $parentId); self::assertTrue($entity->customInteger < 0, 'Fetched customInteger negative'); - self::assertEquals(1, $this->_em->getConnection()->fetchColumn("select customInteger from customtype_parents where id=".$entity->id.""), 'Database has stored customInteger positive'); + self::assertEquals(1, $this->em->getConnection()->fetchColumn("select customInteger from customtype_parents where id=".$entity->id.""), 'Database has stored customInteger positive'); self::assertNotNull($parent->child, 'Child attached'); self::assertCount(2, $entity->getMyFriends(), '2 friends attached'); @@ -121,14 +121,14 @@ public function testSelectDQL() $parent->customInteger = -1; $parent->child = new CustomTypeChild(); - $this->_em->persist($parent); - $this->_em->flush(); + $this->em->persist($parent); + $this->em->flush(); $parentId = $parent->id; - $this->_em->clear(); + $this->em->clear(); - $query = $this->_em->createQuery("SELECT p, p.customInteger, c from Doctrine\Tests\Models\CustomType\CustomTypeParent p JOIN p.child c where p.id = " . $parentId); + $query = $this->em->createQuery("SELECT p, p.customInteger, c from Doctrine\Tests\Models\CustomType\CustomTypeParent p JOIN p.child c where p.id = " . $parentId); $result = $query->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/UUIDGeneratorTest.php b/tests/Doctrine/Tests/ORM/Functional/UUIDGeneratorTest.php index 6c2341de638..73e0e61c771 100644 --- a/tests/Doctrine/Tests/ORM/Functional/UUIDGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/UUIDGeneratorTest.php @@ -11,13 +11,13 @@ public function setUp() { parent::setUp(); - if ($this->_em->getConnection()->getDatabasePlatform()->getName() != 'mysql') { + if ($this->em->getConnection()->getDatabasePlatform()->getName() != 'mysql') { $this->markTestSkipped('Currently restricted to MySQL platform.'); } - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(UUIDEntity::class) + $this->em->getClassMetadata(UUIDEntity::class) ] ); } @@ -26,7 +26,7 @@ public function testGenerateUUID() { $entity = new UUIDEntity(); - $this->_em->persist($entity); + $this->em->persist($entity); self::assertNotNull($entity->getId()); self::assertTrue(strlen($entity->getId()) > 0); } diff --git a/tests/Doctrine/Tests/ORM/Functional/UnitOfWorkLifecycleTest.php b/tests/Doctrine/Tests/ORM/Functional/UnitOfWorkLifecycleTest.php index 8c4c500e728..922cd54639e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/UnitOfWorkLifecycleTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/UnitOfWorkLifecycleTest.php @@ -20,13 +20,13 @@ public function testScheduleInsertManaged() $user->username = "beberlei"; $user->name = "Benjamin"; $user->status = "active"; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); $this->expectException(ORMInvalidArgumentException::class); $this->expectExceptionMessage('A managed+dirty entity Doctrine\Tests\Models\CMS\CmsUser'); - $this->_em->getUnitOfWork()->scheduleForInsert($user); + $this->em->getUnitOfWork()->scheduleForInsert($user); } public function testScheduleInsertDeleted() @@ -35,15 +35,15 @@ public function testScheduleInsertDeleted() $user->username = "beberlei"; $user->name = "Benjamin"; $user->status = "active"; - $this->_em->persist($user); - $this->_em->flush(); + $this->em->persist($user); + $this->em->flush(); - $this->_em->remove($user); + $this->em->remove($user); $this->expectException(ORMInvalidArgumentException::class); $this->expectExceptionMessage('Removed entity Doctrine\Tests\Models\CMS\CmsUser'); - $this->_em->getUnitOfWork()->scheduleForInsert($user); + $this->em->getUnitOfWork()->scheduleForInsert($user); } public function testScheduleInsertTwice() @@ -53,12 +53,12 @@ public function testScheduleInsertTwice() $user->name = "Benjamin"; $user->status = "active"; - $this->_em->getUnitOfWork()->scheduleForInsert($user); + $this->em->getUnitOfWork()->scheduleForInsert($user); $this->expectException(ORMInvalidArgumentException::class); $this->expectExceptionMessage('Entity Doctrine\Tests\Models\CMS\CmsUser'); - $this->_em->getUnitOfWork()->scheduleForInsert($user); + $this->em->getUnitOfWork()->scheduleForInsert($user); } public function testAddToIdentityMapWithoutIdentity() @@ -68,7 +68,7 @@ public function testAddToIdentityMapWithoutIdentity() $this->expectException(ORMInvalidArgumentException::class); $this->expectExceptionMessage("The given entity of type 'Doctrine\Tests\Models\CMS\CmsUser' (Doctrine\Tests\Models\CMS\CmsUser@"); - $this->_em->getUnitOfWork()->registerManaged($user, [], []); + $this->em->getUnitOfWork()->registerManaged($user, [], []); } public function testMarkReadOnlyNonManaged() @@ -78,6 +78,6 @@ public function testMarkReadOnlyNonManaged() $this->expectException(ORMInvalidArgumentException::class); $this->expectExceptionMessage('Only managed entities can be marked or checked as read only. But Doctrine\Tests\Models\CMS\CmsUser@'); - $this->_em->getUnitOfWork()->markReadOnly($user); + $this->em->getUnitOfWork()->markReadOnly($user); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdForeignKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdForeignKeyTest.php index 6dd3e3361cb..7d99753d31d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdForeignKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdForeignKeyTest.php @@ -36,17 +36,17 @@ public function setUp() $inversed->associatedEntities->add($owning); $owning->associatedEntities->add($inversed); - $this->_em->persist($auxiliary); - $this->_em->persist($inversed); - $this->_em->persist($owning); + $this->em->persist($auxiliary); + $this->em->persist($inversed); + $this->em->persist($owning); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } public static function tearDownAfterClass() { - $conn = static::$_sharedConn; + $conn = static::$sharedConn; $conn->executeUpdate('DROP TABLE vct_xref_manytomany_compositeid_foreignkey'); $conn->executeUpdate('DROP TABLE vct_owning_manytomany_compositeid_foreignkey'); @@ -56,7 +56,7 @@ public static function tearDownAfterClass() public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { - $conn = $this->_em->getConnection(); + $conn = $this->em->getConnection(); self::assertEquals('nop', $conn->fetchColumn('SELECT id4 FROM vct_auxiliary LIMIT 1')); @@ -75,17 +75,17 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() */ public function testThatEntitiesAreFetchedFromTheDatabase() { - $auxiliary = $this->_em->find( + $auxiliary = $this->em->find( Models\ValueConversionType\AuxiliaryEntity::class, 'abc' ); - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedManyToManyCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => 'abc'] ); - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToManyCompositeIdForeignKeyEntity::class, 'ghi' ); @@ -100,17 +100,17 @@ public function testThatEntitiesAreFetchedFromTheDatabase() */ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase() { - $auxiliary = $this->_em->find( + $auxiliary = $this->em->find( Models\ValueConversionType\AuxiliaryEntity::class, 'abc' ); - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedManyToManyCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => 'abc'] ); - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToManyCompositeIdForeignKeyEntity::class, 'ghi' ); @@ -126,12 +126,12 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr */ public function testThatInversedEntityIsFetchedFromTheDatabaseUsingAuxiliaryEntityAsId() { - $auxiliary = $this->_em->find( + $auxiliary = $this->em->find( Models\ValueConversionType\AuxiliaryEntity::class, 'abc' ); - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedManyToManyCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => $auxiliary] ); @@ -144,7 +144,7 @@ public function testThatInversedEntityIsFetchedFromTheDatabaseUsingAuxiliaryEnti */ public function testThatTheCollectionFromOwningToInversedIsLoaded() { - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToManyCompositeIdForeignKeyEntity::class, 'ghi' ); @@ -157,7 +157,7 @@ public function testThatTheCollectionFromOwningToInversedIsLoaded() */ public function testThatTheCollectionFromInversedToOwningIsLoaded() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedManyToManyCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => 'abc'] ); @@ -171,11 +171,11 @@ public function testThatTheCollectionFromInversedToOwningIsLoaded() */ public function testThatTheJoinTableRowsAreRemovedWhenRemovingTheAssociation() { - $conn = $this->_em->getConnection(); + $conn = $this->em->getConnection(); // remove association - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedManyToManyCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => 'abc'] ); @@ -185,8 +185,8 @@ public function testThatTheJoinTableRowsAreRemovedWhenRemovingTheAssociation() $owning->associatedEntities->removeElement($inversed); } - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); // test association is removed diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdTest.php index 84d7ac115c0..39367dbc427 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdTest.php @@ -32,16 +32,16 @@ public function setUp() $inversed->associatedEntities->add($owning); $owning->associatedEntities->add($inversed); - $this->_em->persist($inversed); - $this->_em->persist($owning); + $this->em->persist($inversed); + $this->em->persist($owning); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } public static function tearDownAfterClass() { - $conn = static::$_sharedConn; + $conn = static::$sharedConn; $conn->executeUpdate('DROP TABLE vct_xref_manytomany_compositeid'); $conn->executeUpdate('DROP TABLE vct_owning_manytomany_compositeid'); @@ -50,7 +50,7 @@ public static function tearDownAfterClass() public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { - $conn = $this->_em->getConnection(); + $conn = $this->em->getConnection(); self::assertEquals('nop', $conn->fetchColumn('SELECT id1 FROM vct_inversed_manytomany_compositeid LIMIT 1')); self::assertEquals('qrs', $conn->fetchColumn('SELECT id2 FROM vct_inversed_manytomany_compositeid LIMIT 1')); @@ -67,12 +67,12 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() */ public function testThatEntitiesAreFetchedFromTheDatabase() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedManyToManyCompositeIdEntity::class, ['id1' => 'abc', 'id2' => 'def'] ); - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToManyCompositeIdEntity::class, 'ghi' ); @@ -86,12 +86,12 @@ public function testThatEntitiesAreFetchedFromTheDatabase() */ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedManyToManyCompositeIdEntity::class, ['id1' => 'abc', 'id2' => 'def'] ); - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToManyCompositeIdEntity::class, 'ghi' ); @@ -106,7 +106,7 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr */ public function testThatTheCollectionFromOwningToInversedIsLoaded() { - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToManyCompositeIdEntity::class, 'ghi' ); @@ -119,7 +119,7 @@ public function testThatTheCollectionFromOwningToInversedIsLoaded() */ public function testThatTheCollectionFromInversedToOwningIsLoaded() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedManyToManyCompositeIdEntity::class, ['id1' => 'abc', 'id2' => 'def'] ); @@ -133,11 +133,11 @@ public function testThatTheCollectionFromInversedToOwningIsLoaded() */ public function testThatTheJoinTableRowsAreRemovedWhenRemovingTheAssociation() { - $conn = $this->_em->getConnection(); + $conn = $this->em->getConnection(); // remove association - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedManyToManyCompositeIdEntity::class, ['id1' => 'abc', 'id2' => 'def'] ); @@ -147,8 +147,8 @@ public function testThatTheJoinTableRowsAreRemovedWhenRemovingTheAssociation() $owning->associatedEntities->removeElement($inversed); } - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); // test association is removed diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyExtraLazyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyExtraLazyTest.php index 7d3b4266912..e51edb91b7b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyExtraLazyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyExtraLazyTest.php @@ -44,18 +44,18 @@ public function setUp() $inversed2->associatedEntities->add($owning2); $owning2->associatedEntities->add($inversed2); - $this->_em->persist($inversed1); - $this->_em->persist($inversed2); - $this->_em->persist($owning1); - $this->_em->persist($owning2); + $this->em->persist($inversed1); + $this->em->persist($inversed2); + $this->em->persist($owning1); + $this->em->persist($owning2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } public static function tearDownAfterClass() { - $conn = static::$_sharedConn; + $conn = static::$sharedConn; $conn->executeUpdate('DROP TABLE vct_xref_manytomany_extralazy'); $conn->executeUpdate('DROP TABLE vct_owning_manytomany_extralazy'); @@ -64,7 +64,7 @@ public static function tearDownAfterClass() public function testThatTheExtraLazyCollectionFromOwningToInversedIsCounted() { - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToManyExtraLazyEntity::class, 'ghi' ); @@ -74,7 +74,7 @@ public function testThatTheExtraLazyCollectionFromOwningToInversedIsCounted() public function testThatTheExtraLazyCollectionFromInversedToOwningIsCounted() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedManyToManyExtraLazyEntity::class, 'abc' ); @@ -84,12 +84,12 @@ public function testThatTheExtraLazyCollectionFromInversedToOwningIsCounted() public function testThatTheExtraLazyCollectionFromOwningToInversedContainsAnEntity() { - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToManyExtraLazyEntity::class, 'ghi' ); - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedManyToManyExtraLazyEntity::class, 'abc' ); @@ -99,12 +99,12 @@ public function testThatTheExtraLazyCollectionFromOwningToInversedContainsAnEnti public function testThatTheExtraLazyCollectionFromInversedToOwningContainsAnEntity() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedManyToManyExtraLazyEntity::class, 'abc' ); - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToManyExtraLazyEntity::class, 'ghi' ); @@ -114,7 +114,7 @@ public function testThatTheExtraLazyCollectionFromInversedToOwningContainsAnEnti public function testThatTheExtraLazyCollectionFromOwningToInversedContainsAnIndexByKey() { - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToManyExtraLazyEntity::class, 'ghi' ); @@ -124,7 +124,7 @@ public function testThatTheExtraLazyCollectionFromOwningToInversedContainsAnInde public function testThatTheExtraLazyCollectionFromInversedToOwningContainsAnIndexByKey() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedManyToManyExtraLazyEntity::class, 'abc' ); @@ -134,7 +134,7 @@ public function testThatTheExtraLazyCollectionFromInversedToOwningContainsAnInde public function testThatASliceOfTheExtraLazyCollectionFromOwningToInversedIsLoaded() { - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToManyExtraLazyEntity::class, 'ghi' ); @@ -144,7 +144,7 @@ public function testThatASliceOfTheExtraLazyCollectionFromOwningToInversedIsLoad public function testThatASliceOfTheExtraLazyCollectionFromInversedToOwningIsLoaded() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedManyToManyExtraLazyEntity::class, 'abc' ); diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyTest.php index 2b8541d7aaa..438803c0d75 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyTest.php @@ -31,16 +31,16 @@ public function setUp() $inversed->associatedEntities->add($owning); $owning->associatedEntities->add($inversed); - $this->_em->persist($inversed); - $this->_em->persist($owning); + $this->em->persist($inversed); + $this->em->persist($owning); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } public static function tearDownAfterClass() { - $conn = static::$_sharedConn; + $conn = static::$sharedConn; $conn->executeUpdate('DROP TABLE vct_xref_manytomany'); $conn->executeUpdate('DROP TABLE vct_owning_manytomany'); @@ -49,7 +49,7 @@ public static function tearDownAfterClass() public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { - $conn = $this->_em->getConnection(); + $conn = $this->em->getConnection(); self::assertEquals('nop', $conn->fetchColumn('SELECT id1 FROM vct_inversed_manytomany LIMIT 1')); @@ -64,12 +64,12 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() */ public function testThatEntitiesAreFetchedFromTheDatabase() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedManyToManyEntity::class, 'abc' ); - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToManyEntity::class, 'def' ); @@ -83,12 +83,12 @@ public function testThatEntitiesAreFetchedFromTheDatabase() */ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedManyToManyEntity::class, 'abc' ); - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToManyEntity::class, 'def' ); @@ -102,7 +102,7 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr */ public function testThatTheCollectionFromOwningToInversedIsLoaded() { - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToManyEntity::class, 'def' ); @@ -115,7 +115,7 @@ public function testThatTheCollectionFromOwningToInversedIsLoaded() */ public function testThatTheCollectionFromInversedToOwningIsLoaded() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedManyToManyEntity::class, 'abc' ); @@ -129,11 +129,11 @@ public function testThatTheCollectionFromInversedToOwningIsLoaded() */ public function testThatTheJoinTableRowsAreRemovedWhenRemovingTheAssociation() { - $conn = $this->_em->getConnection(); + $conn = $this->em->getConnection(); // remove association - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedManyToManyEntity::class, 'abc' ); @@ -143,8 +143,8 @@ public function testThatTheJoinTableRowsAreRemovedWhenRemovingTheAssociation() $owning->associatedEntities->removeElement($inversed); } - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); // test association is removed diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdForeignKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdForeignKeyTest.php index 3c19fd5ff41..1664009f00b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdForeignKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdForeignKeyTest.php @@ -37,17 +37,17 @@ public function setUp() $inversed->associatedEntities->add($owning); $owning->associatedEntity = $inversed; - $this->_em->persist($auxiliary); - $this->_em->persist($inversed); - $this->_em->persist($owning); + $this->em->persist($auxiliary); + $this->em->persist($inversed); + $this->em->persist($owning); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } public static function tearDownAfterClass() { - $conn = static::$_sharedConn; + $conn = static::$sharedConn; $conn->executeUpdate('DROP TABLE vct_owning_manytoone_compositeid_foreignkey'); $conn->executeUpdate('DROP TABLE vct_inversed_onetomany_compositeid_foreignkey'); @@ -56,7 +56,7 @@ public static function tearDownAfterClass() public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { - $conn = $this->_em->getConnection(); + $conn = $this->em->getConnection(); self::assertEquals('nop', $conn->fetchColumn('SELECT id4 FROM vct_auxiliary LIMIT 1')); @@ -73,17 +73,17 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() */ public function testThatEntitiesAreFetchedFromTheDatabase() { - $auxiliary = $this->_em->find( + $auxiliary = $this->em->find( Models\ValueConversionType\AuxiliaryEntity::class, 'abc' ); - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToManyCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => 'abc'] ); - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToOneCompositeIdForeignKeyEntity::class, 'ghi' ); @@ -98,17 +98,17 @@ public function testThatEntitiesAreFetchedFromTheDatabase() */ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase() { - $auxiliary = $this->_em->find( + $auxiliary = $this->em->find( Models\ValueConversionType\AuxiliaryEntity::class, 'abc' ); - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToManyCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => 'abc'] ); - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToOneCompositeIdForeignKeyEntity::class, 'ghi' ); @@ -124,12 +124,12 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr */ public function testThatInversedEntityIsFetchedFromTheDatabaseUsingAuxiliaryEntityAsId() { - $auxiliary = $this->_em->find( + $auxiliary = $this->em->find( Models\ValueConversionType\AuxiliaryEntity::class, 'abc' ); - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToManyCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => $auxiliary] ); @@ -142,7 +142,7 @@ public function testThatInversedEntityIsFetchedFromTheDatabaseUsingAuxiliaryEnti */ public function testThatTheProxyFromOwningToInversedIsLoaded() { - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToOneCompositeIdForeignKeyEntity::class, 'ghi' ); @@ -159,7 +159,7 @@ public function testThatTheProxyFromOwningToInversedIsLoaded() */ public function testThatTheCollectionFromInversedToOwningIsLoaded() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToManyCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => 'abc'] ); diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdTest.php index a7dcf972b4f..83920b09012 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdTest.php @@ -33,16 +33,16 @@ public function setUp() $inversed->associatedEntities->add($owning); $owning->associatedEntity = $inversed; - $this->_em->persist($inversed); - $this->_em->persist($owning); + $this->em->persist($inversed); + $this->em->persist($owning); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } public static function tearDownAfterClass() { - $conn = static::$_sharedConn; + $conn = static::$sharedConn; $conn->executeUpdate('DROP TABLE vct_owning_manytoone_compositeid'); $conn->executeUpdate('DROP TABLE vct_inversed_onetomany_compositeid'); @@ -50,7 +50,7 @@ public static function tearDownAfterClass() public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { - $conn = $this->_em->getConnection(); + $conn = $this->em->getConnection(); self::assertEquals('nop', $conn->fetchColumn('SELECT id1 FROM vct_inversed_onetomany_compositeid LIMIT 1')); self::assertEquals('qrs', $conn->fetchColumn('SELECT id2 FROM vct_inversed_onetomany_compositeid LIMIT 1')); @@ -65,12 +65,12 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() */ public function testThatEntitiesAreFetchedFromTheDatabase() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToManyCompositeIdEntity::class, ['id1' => 'abc', 'id2' => 'def'] ); - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToOneCompositeIdEntity::class, 'ghi' ); @@ -84,12 +84,12 @@ public function testThatEntitiesAreFetchedFromTheDatabase() */ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToManyCompositeIdEntity::class, ['id1' => 'abc', 'id2' => 'def'] ); - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToOneCompositeIdEntity::class, 'ghi' ); @@ -104,7 +104,7 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr */ public function testThatTheProxyFromOwningToInversedIsLoaded() { - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToOneCompositeIdEntity::class, 'ghi' ); @@ -119,7 +119,7 @@ public function testThatTheProxyFromOwningToInversedIsLoaded() */ public function testThatTheCollectionFromInversedToOwningIsLoaded() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToManyCompositeIdEntity::class, ['id1' => 'abc', 'id2' => 'def'] ); diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyExtraLazyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyExtraLazyTest.php index ea50a2b06ff..c0afb2aa3d1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyExtraLazyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyExtraLazyTest.php @@ -42,18 +42,18 @@ public function setUp() $inversed->associatedEntities->add($owning3); $owning3->associatedEntity = $inversed; - $this->_em->persist($inversed); - $this->_em->persist($owning1); - $this->_em->persist($owning2); - $this->_em->persist($owning3); + $this->em->persist($inversed); + $this->em->persist($owning1); + $this->em->persist($owning2); + $this->em->persist($owning3); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } public static function tearDownAfterClass() { - $conn = static::$_sharedConn; + $conn = static::$sharedConn; $conn->executeUpdate('DROP TABLE vct_owning_manytoone_extralazy'); $conn->executeUpdate('DROP TABLE vct_inversed_onetomany_extralazy'); @@ -61,7 +61,7 @@ public static function tearDownAfterClass() public function testThatExtraLazyCollectionIsCounted() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToManyExtraLazyEntity::class, 'abc' ); @@ -71,12 +71,12 @@ public function testThatExtraLazyCollectionIsCounted() public function testThatExtraLazyCollectionContainsAnEntity() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToManyExtraLazyEntity::class, 'abc' ); - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToOneExtraLazyEntity::class, 'def' ); @@ -86,7 +86,7 @@ public function testThatExtraLazyCollectionContainsAnEntity() public function testThatExtraLazyCollectionContainsAnIndexbyKey() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToManyExtraLazyEntity::class, 'abc' ); @@ -96,7 +96,7 @@ public function testThatExtraLazyCollectionContainsAnIndexbyKey() public function testThatASliceOfTheExtraLazyCollectionIsLoaded() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToManyExtraLazyEntity::class, 'abc' ); diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyTest.php index e671bb85cfa..af4d65491d8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyTest.php @@ -32,16 +32,16 @@ public function setUp() $inversed->associatedEntities->add($owning); $owning->associatedEntity = $inversed; - $this->_em->persist($inversed); - $this->_em->persist($owning); + $this->em->persist($inversed); + $this->em->persist($owning); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } public static function tearDownAfterClass() { - $conn = static::$_sharedConn; + $conn = static::$sharedConn; $conn->executeUpdate('DROP TABLE vct_owning_manytoone'); $conn->executeUpdate('DROP TABLE vct_inversed_onetomany'); @@ -49,7 +49,7 @@ public static function tearDownAfterClass() public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { - $conn = $this->_em->getConnection(); + $conn = $this->em->getConnection(); self::assertEquals('nop', $conn->fetchColumn('SELECT id1 FROM vct_inversed_onetomany LIMIT 1')); @@ -62,12 +62,12 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() */ public function testThatEntitiesAreFetchedFromTheDatabase() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToManyEntity::class, 'abc' ); - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToOneEntity::class, 'def' ); @@ -81,12 +81,12 @@ public function testThatEntitiesAreFetchedFromTheDatabase() */ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToManyEntity::class, 'abc' ); - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToOneEntity::class, 'def' ); @@ -100,7 +100,7 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr */ public function testThatTheProxyFromOwningToInversedIsLoaded() { - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningManyToOneEntity::class, 'def' ); @@ -115,7 +115,7 @@ public function testThatTheProxyFromOwningToInversedIsLoaded() */ public function testThatTheCollectionFromInversedToOwningIsLoaded() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToManyEntity::class, 'abc' ); diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdForeignKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdForeignKeyTest.php index 544d8e2eab6..028a86de413 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdForeignKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdForeignKeyTest.php @@ -36,17 +36,17 @@ public function setUp() $inversed->associatedEntity = $owning; $owning->associatedEntity = $inversed; - $this->_em->persist($auxiliary); - $this->_em->persist($inversed); - $this->_em->persist($owning); + $this->em->persist($auxiliary); + $this->em->persist($inversed); + $this->em->persist($owning); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } public static function tearDownAfterClass() { - $conn = static::$_sharedConn; + $conn = static::$sharedConn; $conn->executeUpdate('DROP TABLE vct_owning_onetoone_compositeid_foreignkey'); $conn->executeUpdate('DROP TABLE vct_inversed_onetoone_compositeid_foreignkey'); @@ -55,7 +55,7 @@ public static function tearDownAfterClass() public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { - $conn = $this->_em->getConnection(); + $conn = $this->em->getConnection(); self::assertEquals('nop', $conn->fetchColumn('SELECT id4 FROM vct_auxiliary LIMIT 1')); @@ -72,17 +72,17 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() */ public function testThatEntitiesAreFetchedFromTheDatabase() { - $auxiliary = $this->_em->find( + $auxiliary = $this->em->find( Models\ValueConversionType\AuxiliaryEntity::class, 'abc' ); - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToOneCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => 'abc'] ); - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningOneToOneCompositeIdForeignKeyEntity::class, 'ghi' ); @@ -97,17 +97,17 @@ public function testThatEntitiesAreFetchedFromTheDatabase() */ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase() { - $auxiliary = $this->_em->find( + $auxiliary = $this->em->find( Models\ValueConversionType\AuxiliaryEntity::class, 'abc' ); - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToOneCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => 'abc'] ); - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningOneToOneCompositeIdForeignKeyEntity::class, 'ghi' ); @@ -123,12 +123,12 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr */ public function testThatInversedEntityIsFetchedFromTheDatabaseUsingAuxiliaryEntityAsId() { - $auxiliary = $this->_em->find( + $auxiliary = $this->em->find( Models\ValueConversionType\AuxiliaryEntity::class, 'abc' ); - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToOneCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => $auxiliary] ); @@ -141,7 +141,7 @@ public function testThatInversedEntityIsFetchedFromTheDatabaseUsingAuxiliaryEnti */ public function testThatTheProxyFromOwningToInversedIsLoaded() { - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningOneToOneCompositeIdForeignKeyEntity::class, 'ghi' ); @@ -156,7 +156,7 @@ public function testThatTheProxyFromOwningToInversedIsLoaded() */ public function testThatTheEntityFromInversedToOwningIsEagerLoaded() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToOneCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => 'abc'] ); diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdTest.php index ef52774976f..43038680a3c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdTest.php @@ -32,16 +32,16 @@ public function setUp() $inversed->associatedEntity = $owning; $owning->associatedEntity = $inversed; - $this->_em->persist($inversed); - $this->_em->persist($owning); + $this->em->persist($inversed); + $this->em->persist($owning); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } public static function tearDownAfterClass() { - $conn = static::$_sharedConn; + $conn = static::$sharedConn; $conn->executeUpdate('DROP TABLE vct_owning_onetoone_compositeid'); $conn->executeUpdate('DROP TABLE vct_inversed_onetoone_compositeid'); @@ -49,7 +49,7 @@ public static function tearDownAfterClass() public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { - $conn = $this->_em->getConnection(); + $conn = $this->em->getConnection(); self::assertEquals('nop', $conn->fetchColumn('SELECT id1 FROM vct_inversed_onetoone_compositeid LIMIT 1')); self::assertEquals('qrs', $conn->fetchColumn('SELECT id2 FROM vct_inversed_onetoone_compositeid LIMIT 1')); @@ -64,12 +64,12 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() */ public function testThatEntitiesAreFetchedFromTheDatabase() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToOneCompositeIdEntity::class, ['id1' => 'abc', 'id2' => 'def'] ); - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningOneToOneCompositeIdEntity::class, 'ghi' ); @@ -83,12 +83,12 @@ public function testThatEntitiesAreFetchedFromTheDatabase() */ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToOneCompositeIdEntity::class, ['id1' => 'abc', 'id2' => 'def'] ); - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningOneToOneCompositeIdEntity::class, 'ghi' ); @@ -103,7 +103,7 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr */ public function testThatTheProxyFromOwningToInversedIsLoaded() { - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningOneToOneCompositeIdEntity::class, 'ghi' ); @@ -118,7 +118,7 @@ public function testThatTheProxyFromOwningToInversedIsLoaded() */ public function testThatTheEntityFromInversedToOwningIsEagerLoaded() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToOneCompositeIdEntity::class, ['id1' => 'abc', 'id2' => 'def'] ); diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneTest.php index 5c39cc17f3c..281814bb3c4 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneTest.php @@ -32,16 +32,16 @@ public function setUp() $inversed->associatedEntity = $owning; $owning->associatedEntity = $inversed; - $this->_em->persist($inversed); - $this->_em->persist($owning); + $this->em->persist($inversed); + $this->em->persist($owning); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } public static function tearDownAfterClass() { - $conn = static::$_sharedConn; + $conn = static::$sharedConn; $conn->executeUpdate('DROP TABLE vct_owning_onetoone'); $conn->executeUpdate('DROP TABLE vct_inversed_onetoone'); @@ -49,7 +49,7 @@ public static function tearDownAfterClass() public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { - $conn = $this->_em->getConnection(); + $conn = $this->em->getConnection(); self::assertEquals('nop', $conn->fetchColumn('SELECT id1 FROM vct_inversed_onetoone LIMIT 1')); @@ -62,12 +62,12 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() */ public function testThatEntitiesAreFetchedFromTheDatabase() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToOneEntity::class, 'abc' ); - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningOneToOneEntity::class, 'def' ); @@ -81,12 +81,12 @@ public function testThatEntitiesAreFetchedFromTheDatabase() */ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToOneEntity::class, 'abc' ); - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningOneToOneEntity::class, 'def' ); @@ -100,7 +100,7 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr */ public function testThatTheProxyFromOwningToInversedIsLoaded() { - $owning = $this->_em->find( + $owning = $this->em->find( Models\ValueConversionType\OwningOneToOneEntity::class, 'def' ); @@ -115,7 +115,7 @@ public function testThatTheProxyFromOwningToInversedIsLoaded() */ public function testThatTheEntityFromInversedToOwningIsEagerLoaded() { - $inversed = $this->_em->find( + $inversed = $this->em->find( Models\ValueConversionType\InversedOneToOneEntity::class, 'abc' ); diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueObjectsTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueObjectsTest.php index 75313837e1f..ed9f921b011 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueObjectsTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueObjectsTest.php @@ -18,14 +18,14 @@ public function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC93Person::class), - $this->_em->getClassMetadata(DDC93Address::class), - $this->_em->getClassMetadata(DDC93Vehicle::class), - $this->_em->getClassMetadata(DDC93Car::class), - $this->_em->getClassMetadata(DDC3027Animal::class), - $this->_em->getClassMetadata(DDC3027Dog::class), + $this->em->getClassMetadata(DDC93Person::class), + $this->em->getClassMetadata(DDC93Address::class), + $this->em->getClassMetadata(DDC93Vehicle::class), + $this->em->getClassMetadata(DDC93Car::class), + $this->em->getClassMetadata(DDC3027Animal::class), + $this->em->getClassMetadata(DDC3027Dog::class), ] ); } catch(\Exception $e) { @@ -34,7 +34,7 @@ public function setUp() public function testMetadataHasReflectionEmbeddablesAccessible() { - $classMetadata = $this->_em->getClassMetadata(DDC93Person::class); + $classMetadata = $this->em->getClassMetadata(DDC93Person::class); self::assertInstanceOf(RuntimePublicReflectionProperty::class, $classMetadata->getReflectionProperty('address')); self::assertInstanceOf(ReflectionEmbeddedProperty::class, $classMetadata->getReflectionProperty('address.street')); @@ -51,13 +51,13 @@ public function testCRUD() $person->address->country = new DDC93Country('Germany'); // 1. check saving value objects works - $this->_em->persist($person); - $this->_em->flush(); + $this->em->persist($person); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); // 2. check loading value objects works - $person = $this->_em->find(DDC93Person::class, $person->id); + $person = $this->em->find(DDC93Person::class, $person->id); self::assertInstanceOf(DDC93Address::class, $person->address); self::assertEquals('United States of Tara Street', $person->address->street); @@ -71,11 +71,11 @@ public function testCRUD() $person->address->zip = "54321"; $person->address->city = "another town"; $person->address->country->name = "United States of America"; - $this->_em->flush(); + $this->em->flush(); - $this->_em->clear(); + $this->em->clear(); - $person = $this->_em->find(DDC93Person::class, $person->id); + $person = $this->em->find(DDC93Person::class, $person->id); self::assertEquals('Street', $person->address->street); self::assertEquals('54321', $person->address->zip); @@ -84,10 +84,10 @@ public function testCRUD() // 4. check deleting works $personId = $person->id;; - $this->_em->remove($person); - $this->_em->flush(); + $this->em->remove($person); + $this->em->flush(); - self::assertNull($this->_em->find(DDC93Person::class, $personId)); + self::assertNull($this->em->find(DDC93Person::class, $personId)); } public function testLoadDql() @@ -101,14 +101,14 @@ public function testLoadDql() $person->address->city = "funkytown"; $person->address->country = new DDC93Country('United States of America'); - $this->_em->persist($person); + $this->em->persist($person); } - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); $dql = "SELECT p FROM " . __NAMESPACE__ . "\DDC93Person p"; - $persons = $this->_em->createQuery($dql)->getResult(); + $persons = $this->em->createQuery($dql)->getResult(); self::assertCount(3, $persons); foreach ($persons as $person) { @@ -121,7 +121,7 @@ public function testLoadDql() } $dql = "SELECT p FROM " . __NAMESPACE__ . "\DDC93Person p"; - $persons = $this->_em->createQuery($dql)->getArrayResult(); + $persons = $this->em->createQuery($dql)->getArrayResult(); foreach ($persons as $person) { self::assertEquals('Tree', $person['address.street']); @@ -141,19 +141,19 @@ public function testDqlOnEmbeddedObjectsField() } $person = new DDC93Person('Johannes', new DDC93Address('Moo', '12345', 'Karlsruhe', new DDC93Country('Germany'))); - $this->_em->persist($person); - $this->_em->flush($person); + $this->em->persist($person); + $this->em->flush($person); // SELECT $selectDql = "SELECT p FROM " . __NAMESPACE__ ."\\DDC93Person p WHERE p.address.city = :city AND p.address.country.name = :country"; - $loadedPerson = $this->_em->createQuery($selectDql) + $loadedPerson = $this->em->createQuery($selectDql) ->setParameter('city', 'Karlsruhe') ->setParameter('country', 'Germany') ->getSingleResult(); self::assertEquals($person, $loadedPerson); self::assertNull( - $this->_em->createQuery($selectDql) + $this->em->createQuery($selectDql) ->setParameter('city', 'asdf') ->setParameter('country', 'Germany') ->getOneOrNullResult() @@ -161,37 +161,37 @@ public function testDqlOnEmbeddedObjectsField() // UPDATE $updateDql = "UPDATE " . __NAMESPACE__ . "\\DDC93Person p SET p.address.street = :street, p.address.country.name = :country WHERE p.address.city = :city"; - $this->_em->createQuery($updateDql) + $this->em->createQuery($updateDql) ->setParameter('street', 'Boo') ->setParameter('country', 'DE') ->setParameter('city', 'Karlsruhe') ->execute(); - $this->_em->refresh($person); + $this->em->refresh($person); self::assertEquals('Boo', $person->address->street); self::assertEquals('DE', $person->address->country->name); // DELETE - $this->_em->createQuery("DELETE " . __NAMESPACE__ . "\\DDC93Person p WHERE p.address.city = :city AND p.address.country.name = :country") + $this->em->createQuery("DELETE " . __NAMESPACE__ . "\\DDC93Person p WHERE p.address.city = :city AND p.address.country.name = :country") ->setParameter('city', 'Karlsruhe') ->setParameter('country', 'DE') ->execute(); - $this->_em->clear(); - self::assertNull($this->_em->find(DDC93Person::class, $person->id)); + $this->em->clear(); + self::assertNull($this->em->find(DDC93Person::class, $person->id)); } public function testPartialDqlOnEmbeddedObjectsField() { $person = new DDC93Person('Karl', new DDC93Address('Foo', '12345', 'Gosport', new DDC93Country('England'))); - $this->_em->persist($person); - $this->_em->flush($person); - $this->_em->clear(); + $this->em->persist($person); + $this->em->flush($person); + $this->em->clear(); // Prove that the entity was persisted correctly. $dql = "SELECT p FROM " . __NAMESPACE__ ."\\DDC93Person p WHERE p.name = :name"; - $person = $this->_em->createQuery($dql) + $person = $this->em->createQuery($dql) ->setParameter('name', 'Karl') ->getSingleResult(); @@ -201,11 +201,11 @@ public function testPartialDqlOnEmbeddedObjectsField() self::assertEquals('England', $person->address->country->name); // Clear the EM and prove that the embeddable can be the subject of a partial query. - $this->_em->clear(); + $this->em->clear(); $dql = "SELECT PARTIAL p.{id,address.city} FROM " . __NAMESPACE__ ."\\DDC93Person p WHERE p.name = :name"; - $person = $this->_em->createQuery($dql) + $person = $this->em->createQuery($dql) ->setParameter('name', 'Karl') ->getSingleResult(); @@ -217,11 +217,11 @@ public function testPartialDqlOnEmbeddedObjectsField() self::assertNull($person->name); // Clear the EM and prove that the embeddable can be the subject of a partial query regardless of attributes positions. - $this->_em->clear(); + $this->em->clear(); $dql = "SELECT PARTIAL p.{address.city, id} FROM " . __NAMESPACE__ ."\\DDC93Person p WHERE p.name = :name"; - $person = $this->_em->createQuery($dql) + $person = $this->em->createQuery($dql) ->setParameter('name', 'Karl') ->getSingleResult(); @@ -238,7 +238,7 @@ public function testDqlWithNonExistentEmbeddableField() $this->expectException(QueryException::class); $this->expectExceptionMessage('no field or association named address.asdfasdf'); - $this->_em->createQuery("SELECT p FROM " . __NAMESPACE__ . "\\DDC93Person p WHERE p.address.asdfasdf IS NULL") + $this->em->createQuery("SELECT p FROM " . __NAMESPACE__ . "\\DDC93Person p WHERE p.address.asdfasdf IS NULL") ->execute(); } @@ -247,23 +247,23 @@ public function testPartialDqlWithNonExistentEmbeddableField() $this->expectException(QueryException::class); $this->expectExceptionMessage("no mapped field named 'address.asdfasdf'"); - $this->_em->createQuery("SELECT PARTIAL p.{id,address.asdfasdf} FROM " . __NAMESPACE__ . "\\DDC93Person p") + $this->em->createQuery("SELECT PARTIAL p.{id,address.asdfasdf} FROM " . __NAMESPACE__ . "\\DDC93Person p") ->execute(); } public function testEmbeddableWithInheritance() { $car = new DDC93Car(new DDC93Address('Foo', '12345', 'Asdf')); - $this->_em->persist($car); - $this->_em->flush($car); + $this->em->persist($car); + $this->em->flush($car); - $reloadedCar = $this->_em->find(DDC93Car::class, $car->id); + $reloadedCar = $this->em->find(DDC93Car::class, $car->id); self::assertEquals($car, $reloadedCar); } public function testInlineEmbeddableWithPrefix() { - $metadata = $this->_em->getClassMetadata(DDC3028PersonWithPrefix::class); + $metadata = $this->em->getClassMetadata(DDC3028PersonWithPrefix::class); self::assertEquals('foobar_id', $metadata->getColumnName('id.id')); self::assertEquals('bloo_foo_id', $metadata->getColumnName('nested.nestedWithPrefix.id')); @@ -273,7 +273,7 @@ public function testInlineEmbeddableWithPrefix() public function testInlineEmbeddableEmptyPrefix() { - $metadata = $this->_em->getClassMetadata(DDC3028PersonEmptyPrefix::class); + $metadata = $this->em->getClassMetadata(DDC3028PersonEmptyPrefix::class); self::assertEquals('id_id', $metadata->getColumnName('id.id')); self::assertEquals('nested_foo_id', $metadata->getColumnName('nested.nestedWithPrefix.id')); @@ -285,7 +285,7 @@ public function testInlineEmbeddablePrefixFalse() { $expectedColumnName = 'id'; - $actualColumnName = $this->_em + $actualColumnName = $this->em ->getClassMetadata(DDC3028PersonPrefixFalse::class) ->getColumnName('id.id'); @@ -294,7 +294,7 @@ public function testInlineEmbeddablePrefixFalse() public function testInlineEmbeddableInMappedSuperClass() { - $isFieldMapped = $this->_em + $isFieldMapped = $this->em ->getClassMetadata(DDC3027Dog::class) ->hasField('address.street'); @@ -315,9 +315,9 @@ public function testThrowsExceptionOnInfiniteEmbeddableNesting($embeddableClassN ) ); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(__NAMESPACE__ . '\\' . $embeddableClassName), + $this->em->getClassMetadata(__NAMESPACE__ . '\\' . $embeddableClassName), ] ); } diff --git a/tests/Doctrine/Tests/ORM/Functional/VersionedOneToOneTest.php b/tests/Doctrine/Tests/ORM/Functional/VersionedOneToOneTest.php index 918a2366764..80e0a9f3745 100644 --- a/tests/Doctrine/Tests/ORM/Functional/VersionedOneToOneTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/VersionedOneToOneTest.php @@ -21,10 +21,10 @@ protected function setUp() parent::setUp(); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(FirstRelatedEntity::class), - $this->_em->getClassMetadata(SecondRelatedEntity::class) + $this->em->getClassMetadata(FirstRelatedEntity::class), + $this->em->getClassMetadata(SecondRelatedEntity::class) ] ); } catch (ORMException $e) { @@ -40,20 +40,20 @@ public function testSetVersionOnCreate() $secondRelatedEntity = new SecondRelatedEntity(); $secondRelatedEntity->name = 'Bob'; - $this->_em->persist($secondRelatedEntity); - $this->_em->flush(); + $this->em->persist($secondRelatedEntity); + $this->em->flush(); $firstRelatedEntity = new FirstRelatedEntity(); $firstRelatedEntity->name = 'Fred'; $firstRelatedEntity->secondEntity = $secondRelatedEntity; - $this->_em->persist($firstRelatedEntity); - $this->_em->flush(); + $this->em->persist($firstRelatedEntity); + $this->em->flush(); - $firstEntity = $this->_em->getRepository(FirstRelatedEntity::class) + $firstEntity = $this->em->getRepository(FirstRelatedEntity::class) ->findOneBy(['name' => 'Fred']); - $secondEntity = $this->_em->getRepository(SecondRelatedEntity::class) + $secondEntity = $this->em->getRepository(SecondRelatedEntity::class) ->findOneBy(['name' => 'Bob']); self::assertSame($firstRelatedEntity, $firstEntity); diff --git a/tests/Doctrine/Tests/ORM/Hydration/AbstractHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/AbstractHydratorTest.php index 1cd49d5ca7e..bf699d104c2 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/AbstractHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/AbstractHydratorTest.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\Common\Persistence\Mapping\ClassMetadataFactory; use Doctrine\DBAL\Connection; use Doctrine\ORM\EntityManagerInterface; use Doctrine\Common\EventManager; @@ -9,6 +10,7 @@ use Doctrine\ORM\Events; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\ORM\Internal\Hydration\AbstractHydrator; +use Doctrine\ORM\UnitOfWork; use Doctrine\Tests\OrmFunctionalTestCase; /** @@ -29,10 +31,14 @@ public function testOnClearEventListenerIsDetachedOnCleanup() $mockEntityManagerInterface = $this->createMock(EntityManagerInterface::class); $mockEventManager = $this->createMock(EventManager::class); $mockStatement = $this->createMock(Statement::class); + $mockUow = $this->createMock(UnitOfWork::class); + $mockMetadataFactory = $this->createMock(ClassMetadataFactory::class); $mockResultMapping = $this->getMockBuilder(ResultSetMapping::class); - $mockEntityManagerInterface->expects(self::any())->method('getEventManager')->willReturn($mockEventManager); - $mockEntityManagerInterface->expects(self::any())->method('getConnection')->willReturn($mockConnection); + $mockEntityManagerInterface->method('getEventManager')->willReturn($mockEventManager); + $mockEntityManagerInterface->method('getConnection')->willReturn($mockConnection); + $mockEntityManagerInterface->method('getUnitOfWork')->willReturn($mockUow); + $mockEntityManagerInterface->method('getMetadataFactory')->willReturn($mockMetadataFactory); $mockStatement->expects(self::once())->method('fetch')->willReturn(false); /* @var $mockAbstractHydrator AbstractHydrator */ diff --git a/tests/Doctrine/Tests/ORM/Hydration/ArrayHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/ArrayHydratorTest.php index e8bec62d507..343197df4c7 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ArrayHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ArrayHydratorTest.php @@ -49,7 +49,7 @@ public function testSimpleEntityQuery() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertEquals(2, count($result)); @@ -93,7 +93,7 @@ public function testSimpleEntityWithScalarQuery($userEntityKey) ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertEquals(2, count($result)); @@ -141,7 +141,7 @@ public function testSimpleEntityQueryWithAliasedUserEntity() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertEquals(2, count($result)); @@ -188,7 +188,7 @@ public function testSimpleMultipleRootEntityQuery() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertEquals(4, count($result)); @@ -238,7 +238,7 @@ public function testSimpleMultipleRootEntityQueryWithAliasedUserEntity() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertEquals(4, count($result)); @@ -292,7 +292,7 @@ public function testSimpleMultipleRootEntityQueryWithAliasedArticleEntity() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertEquals(4, count($result)); @@ -346,7 +346,7 @@ public function testSimpleMultipleRootEntityQueryWithAliasedEntities() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertEquals(4, count($result)); @@ -401,7 +401,7 @@ public function testMixedQueryNormalJoin($userEntityKey) ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertEquals(2, count($result)); @@ -465,7 +465,7 @@ public function testMixedQueryFetchJoin($userEntityKey) ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertEquals(2, count($result)); @@ -539,7 +539,7 @@ public function testMixedQueryFetchJoinCustomIndex($userEntityKey) $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertEquals(2, count($result)); @@ -653,7 +653,7 @@ public function testMixedQueryMultipleFetchJoin() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertEquals(2, count($result)); @@ -792,7 +792,7 @@ public function testMixedQueryMultipleDeepMixedFetchJoin() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertEquals(2, count($result)); @@ -906,7 +906,7 @@ public function testEntityQueryCustomResultSetOrder() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertEquals(2, count($result)); @@ -969,7 +969,7 @@ public function testChainedJoinWithScalars($entityKey) ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertEquals(3, count($result)); @@ -1018,7 +1018,7 @@ public function testResultIteration() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->em); $iterator = $hydrator->iterate($stmt, $rsm); $rowNum = 0; @@ -1063,7 +1063,7 @@ public function testResultIterationWithAliasedUserEntity() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->em); $iterator = $hydrator->iterate($stmt, $rsm); $rowNum = 0; @@ -1108,7 +1108,7 @@ public function testSkipUnknownColumns() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertEquals(1, count($result)); @@ -1159,7 +1159,7 @@ public function testMissingIdForRootEntity($userEntityKey) ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertEquals(4, count($result), "Should hydrate four results."); @@ -1209,7 +1209,7 @@ public function testIndexByAndMixedResult($userEntityKey) ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ArrayHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertEquals(2, count($result)); diff --git a/tests/Doctrine/Tests/ORM/Hydration/CustomHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/CustomHydratorTest.php index 4b79483f1e7..019b5bd120d 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/CustomHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/CustomHydratorTest.php @@ -9,7 +9,7 @@ class CustomHydratorTest extends HydrationTestCase { public function testCustomHydrator() { - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $config = $em->getConfiguration(); $config->addCustomHydrationMode('CustomHydrator', CustomHydrator::class); @@ -23,6 +23,6 @@ class CustomHydrator extends AbstractHydrator { protected function hydrateAllData() { - return $this->_stmt->fetchAll(PDO::FETCH_ASSOC); + return $this->stmt->fetchAll(PDO::FETCH_ASSOC); } } diff --git a/tests/Doctrine/Tests/ORM/Hydration/HydrationTestCase.php b/tests/Doctrine/Tests/ORM/Hydration/HydrationTestCase.php index a2b099162be..89bb8bf6a43 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/HydrationTestCase.php +++ b/tests/Doctrine/Tests/ORM/Hydration/HydrationTestCase.php @@ -6,16 +6,16 @@ class HydrationTestCase extends \Doctrine\Tests\OrmTestCase { - protected $_em; + protected $em; protected function setUp() { parent::setUp(); - $this->_em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); } /** Helper method */ - protected function _createParserResult($resultSetMapping, $isMixedQuery = false) + protected function createParserResult($resultSetMapping, $isMixedQuery = false) { $parserResult = new ParserResult; $parserResult->setResultSetMapping($resultSetMapping); diff --git a/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php index 226c0c01922..9041e4a567e 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php @@ -78,7 +78,7 @@ public function testSimpleEntityQuery() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(2, count($result)); @@ -117,7 +117,7 @@ public function testSimpleEntityQueryWithAliasedUserEntity() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(2, count($result)); @@ -166,7 +166,7 @@ public function testSimpleMultipleRootEntityQuery() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(4, count($result)); @@ -220,7 +220,7 @@ public function testSimpleMultipleRootEntityQueryWithAliasedUserEntity() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(4, count($result)); @@ -281,7 +281,7 @@ public function testSimpleMultipleRootEntityQueryWithAliasedArticleEntity() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(4, count($result)); @@ -342,7 +342,7 @@ public function testSimpleMultipleRootEntityQueryWithAliasedEntities() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(4, count($result)); @@ -404,7 +404,7 @@ public function testMixedQueryNormalJoin($userEntityKey) ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(2, count($result)); @@ -468,7 +468,7 @@ public function testMixedQueryFetchJoin($userEntityKey) ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(2, count($result)); @@ -549,7 +549,7 @@ public function testMixedQueryFetchJoinCustomIndex($userEntityKey) $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(2, count($result)); @@ -663,7 +663,7 @@ public function testMixedQueryMultipleFetchJoin($userEntityKey) ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(2, count($result)); @@ -793,7 +793,7 @@ public function testMixedQueryMultipleDeepMixedFetchJoin($userEntityKey) ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(2, count($result)); @@ -906,7 +906,7 @@ public function testEntityQueryCustomResultSetOrder() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(2, count($result)); @@ -949,7 +949,7 @@ public function testSkipUnknownColumns() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(1, count($result)); @@ -982,7 +982,7 @@ public function testScalarQueryWithoutResultVariables($userEntityKey) ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(2, count($result)); @@ -1031,14 +1031,14 @@ public function testCreatesProxyForLazyLoadingWithForeignKeys() ->with($this->equalTo(ECommerceShipping::class), ['id' => 42]) ->will($this->returnValue($proxyInstance)); - $this->_em->setProxyFactory($proxyFactory); + $this->em->setProxyFactory($proxyFactory); // configuring lazy loading - $metadata = $this->_em->getClassMetadata(ECommerceProduct::class); + $metadata = $this->em->getClassMetadata(ECommerceProduct::class); $metadata->associationMappings['shipping']['fetch'] = FetchMode::LAZY; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertEquals(1, count($result)); @@ -1080,14 +1080,14 @@ public function testCreatesProxyForLazyLoadingWithForeignKeysWithAliasedProductE ->with($this->equalTo(ECommerceShipping::class), ['id' => 42]) ->will($this->returnValue($proxyInstance)); - $this->_em->setProxyFactory($proxyFactory); + $this->em->setProxyFactory($proxyFactory); // configuring lazy loading - $metadata = $this->_em->getClassMetadata(ECommerceProduct::class); + $metadata = $this->em->getClassMetadata(ECommerceProduct::class); $metadata->associationMappings['shipping']['fetch'] = FetchMode::LAZY; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertEquals(1, count($result)); @@ -1147,7 +1147,7 @@ public function testChainedJoinWithEmptyCollections() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(2, count($result)); @@ -1210,7 +1210,7 @@ public function testChainedJoinWithEmptyCollectionsWithAliasedUserEntity() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(2, count($result)); @@ -1277,7 +1277,7 @@ public function testChainedJoinWithEmptyCollectionsWithAliasedUserEntity() ); $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, array(Query::HINT_FORCE_PARTIAL_LOAD => true)); \Doctrine\Common\Util\Debug::dump($result, 3); @@ -1315,7 +1315,7 @@ public function testResultIteration() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $iterableResult = $hydrator->iterate($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); $rowNum = 0; @@ -1359,7 +1359,7 @@ public function testResultIterationWithAliasedUserEntity() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $iterableResult = $hydrator->iterate($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); $rowNum = 0; @@ -1490,7 +1490,7 @@ public function testManyToManyHydration() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(2, count($result)); @@ -1613,7 +1613,7 @@ public function testManyToManyHydrationWithAliasedUserEntity() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(2, count($result)); @@ -1671,7 +1671,7 @@ public function testMissingIdForRootEntity($userEntityKey) ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(4, count($result), "Should hydrate four results."); @@ -1741,7 +1741,7 @@ public function testMissingIdForCollectionValuedChildEntity($userEntityKey) ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(2, count($result)); @@ -1795,7 +1795,7 @@ public function testMissingIdForSingleValuedChildEntity($userEntityKey) ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(2, count($result)); @@ -1837,7 +1837,7 @@ public function testIndexByAndMixedResult($userEntityKey) ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals(2, count($result)); @@ -1875,7 +1875,7 @@ public function testIndexByScalarsOnly($userEntityKey) ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); self::assertEquals( @@ -1911,7 +1911,7 @@ public function testMissingMetaMappingException() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $hydrator->hydrateAll($stmt, $rsm); } @@ -1945,7 +1945,7 @@ public function testMissingDiscriminatorColumnException() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $hydrator->hydrateAll($stmt, $rsm); } @@ -1974,7 +1974,7 @@ public function testInvalidDiscriminatorValueException() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $hydrator->hydrateAll($stmt, $rsm); } @@ -1995,7 +1995,7 @@ public function testFetchJoinCollectionValuedAssociationWithDefaultArrayValue() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertCount(1, $result); diff --git a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php index 9c24b42abb4..6cfa8760606 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php @@ -23,19 +23,19 @@ class ResultSetMappingTest extends \Doctrine\Tests\OrmTestCase /** * @var \Doctrine\ORM\EntityManager */ - private $_em; + private $em; /** * @var ResultSetMapping */ - private $_rsm; + private $rsm; protected function setUp() { parent::setUp(); - $this->_em = $this->_getTestEntityManager(); - $this->_rsm = new ResultSetMapping; + $this->em = $this->getTestEntityManager(); + $this->rsm = new ResultSetMapping; } /** @@ -43,33 +43,33 @@ protected function setUp() */ public function testBasicResultSetMapping() { - $this->_rsm->addEntityResult( + $this->rsm->addEntityResult( CmsUser::class, 'u' ); - $this->_rsm->addFieldResult('u', 'id', 'id'); - $this->_rsm->addFieldResult('u', 'status', 'status'); - $this->_rsm->addFieldResult('u', 'username', 'username'); - $this->_rsm->addFieldResult('u', 'name', 'name'); - - self::assertFalse($this->_rsm->isScalarResult('id')); - self::assertFalse($this->_rsm->isScalarResult('status')); - self::assertFalse($this->_rsm->isScalarResult('username')); - self::assertFalse($this->_rsm->isScalarResult('name')); - - self::assertTrue($this->_rsm->getClassName('u') == CmsUser::class); - $class = $this->_rsm->getDeclaringClass('id'); + $this->rsm->addFieldResult('u', 'id', 'id'); + $this->rsm->addFieldResult('u', 'status', 'status'); + $this->rsm->addFieldResult('u', 'username', 'username'); + $this->rsm->addFieldResult('u', 'name', 'name'); + + self::assertFalse($this->rsm->isScalarResult('id')); + self::assertFalse($this->rsm->isScalarResult('status')); + self::assertFalse($this->rsm->isScalarResult('username')); + self::assertFalse($this->rsm->isScalarResult('name')); + + self::assertTrue($this->rsm->getClassName('u') == CmsUser::class); + $class = $this->rsm->getDeclaringClass('id'); self::assertTrue($class == CmsUser::class); - self::assertEquals('u', $this->_rsm->getEntityAlias('id')); - self::assertEquals('u', $this->_rsm->getEntityAlias('status')); - self::assertEquals('u', $this->_rsm->getEntityAlias('username')); - self::assertEquals('u', $this->_rsm->getEntityAlias('name')); + self::assertEquals('u', $this->rsm->getEntityAlias('id')); + self::assertEquals('u', $this->rsm->getEntityAlias('status')); + self::assertEquals('u', $this->rsm->getEntityAlias('username')); + self::assertEquals('u', $this->rsm->getEntityAlias('name')); - self::assertEquals('id', $this->_rsm->getFieldName('id')); - self::assertEquals('status', $this->_rsm->getFieldName('status')); - self::assertEquals('username', $this->_rsm->getFieldName('username')); - self::assertEquals('name', $this->_rsm->getFieldName('name')); + self::assertEquals('id', $this->rsm->getFieldName('id')); + self::assertEquals('status', $this->rsm->getFieldName('status')); + self::assertEquals('username', $this->rsm->getFieldName('username')); + self::assertEquals('name', $this->rsm->getFieldName('name')); } /** @@ -79,18 +79,18 @@ public function testBasicResultSetMapping() */ public function testFluentInterface() { - $rms = $this->_rsm; - - $this->_rsm->addEntityResult(CmsUser::class,'u'); - $this->_rsm->addJoinedEntityResult(CmsPhonenumber::class,'p','u','phonenumbers'); - $this->_rsm->addFieldResult('u', 'id', 'id'); - $this->_rsm->addFieldResult('u', 'name', 'name'); - $this->_rsm->setDiscriminatorColumn('name', 'name'); - $this->_rsm->addIndexByColumn('id', 'id'); - $this->_rsm->addIndexBy('username', 'username'); - $this->_rsm->addIndexByScalar('sclr0'); - $this->_rsm->addScalarResult('sclr0', 'numPhones', Type::getType('integer')); - $this->_rsm->addMetaResult('a', 'user_id', 'user_id', false, Type::getType('integer')); + $rms = $this->rsm; + + $this->rsm->addEntityResult(CmsUser::class,'u'); + $this->rsm->addJoinedEntityResult(CmsPhonenumber::class,'p','u','phonenumbers'); + $this->rsm->addFieldResult('u', 'id', 'id'); + $this->rsm->addFieldResult('u', 'name', 'name'); + $this->rsm->setDiscriminatorColumn('name', 'name'); + $this->rsm->addIndexByColumn('id', 'id'); + $this->rsm->addIndexBy('username', 'username'); + $this->rsm->addIndexByScalar('sclr0'); + $this->rsm->addScalarResult('sclr0', 'numPhones', Type::getType('integer')); + $this->rsm->addMetaResult('a', 'user_id', 'user_id', false, Type::getType('integer')); self::assertTrue($rms->hasIndexBy('id')); self::assertTrue($rms->isFieldResult('id')); @@ -177,7 +177,7 @@ public function testAddNamedNativeQueryResultSetMapping() $queryMapping = $cm->getNamedNativeQuery('find-all'); - $rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->_em); + $rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->em); $rsm->addNamedNativeQueryMapping($cm, $queryMapping); self::assertEquals('scalarColumn', $rsm->getScalarAlias('scalarColumn')); @@ -229,7 +229,7 @@ public function testAddNamedNativeQueryResultSetMappingWithoutFields() ); $queryMapping = $cm->getNamedNativeQuery('find-all'); - $rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->_em); + $rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->em); $rsm->addNamedNativeQueryMapping($cm, $queryMapping); @@ -263,7 +263,7 @@ public function testAddNamedNativeQueryResultClass() ); $queryMapping = $cm->getNamedNativeQuery('find-all'); - $rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->_em); + $rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->em); $rsm->addNamedNativeQueryMapping($cm, $queryMapping); @@ -282,13 +282,13 @@ public function testAddNamedNativeQueryResultClass() */ public function testIndexByMetadataColumn() { - $this->_rsm->addEntityResult(LegacyUser::class, 'u'); - $this->_rsm->addJoinedEntityResult(LegacyUserReference::class, 'lu', 'u', '_references'); - $this->_rsm->addMetaResult('lu', '_source', '_source', true, Type::getType('integer')); - $this->_rsm->addMetaResult('lu', '_target', '_target', true, Type::getType('integer')); - $this->_rsm->addIndexBy('lu', '_source'); + $this->rsm->addEntityResult(LegacyUser::class, 'u'); + $this->rsm->addJoinedEntityResult(LegacyUserReference::class, 'lu', 'u', '_references'); + $this->rsm->addMetaResult('lu', '_source', '_source', true, Type::getType('integer')); + $this->rsm->addMetaResult('lu', '_target', '_target', true, Type::getType('integer')); + $this->rsm->addIndexBy('lu', '_source'); - self::assertTrue($this->_rsm->hasIndexBy('lu')); + self::assertTrue($this->rsm->hasIndexBy('lu')); } } diff --git a/tests/Doctrine/Tests/ORM/Hydration/ScalarHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/ScalarHydratorTest.php index b1d76bd2421..8e671d2116d 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ScalarHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ScalarHydratorTest.php @@ -34,7 +34,7 @@ public function testNewHydrationSimpleEntityQuery() $stmt = new HydratorMockStatement($resultSet); - $hydrator = new ScalarHydrator($this->_em); + $hydrator = new ScalarHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); @@ -65,7 +65,7 @@ public function testHydrateScalarResults() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new ScalarHydrator($this->_em); + $hydrator = new ScalarHydrator($this->em); self::assertCount(1, $hydrator->hydrateAll($stmt, $rsm)); } @@ -95,7 +95,7 @@ public function testSkipUnknownColumns() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new ScalarHydrator($this->_em); + $hydrator = new ScalarHydrator($this->em); self::assertCount(1, $hydrator->hydrateAll($stmt, $rsm)); } diff --git a/tests/Doctrine/Tests/ORM/Hydration/SimpleObjectHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/SimpleObjectHydratorTest.php index b68cdb21249..cd9190b54b9 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/SimpleObjectHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/SimpleObjectHydratorTest.php @@ -38,7 +38,7 @@ public function testMissingDiscriminatorColumnException() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new SimpleObjectHydrator($this->_em); + $hydrator = new SimpleObjectHydrator($this->em); $hydrator->hydrateAll($stmt, $rsm); } @@ -64,7 +64,7 @@ public function testExtraFieldInResultSetShouldBeIgnore() $expectedEntity->city = 'Cracow'; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new SimpleObjectHydrator($this->_em); + $hydrator = new SimpleObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); self::assertEquals($result[0], $expectedEntity); @@ -95,7 +95,7 @@ public function testInvalidDiscriminatorValueException() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new SimpleObjectHydrator($this->_em); + $hydrator = new SimpleObjectHydrator($this->em); $hydrator->hydrateAll($stmt, $rsm); } @@ -125,7 +125,7 @@ public function testNullValueShouldNotOverwriteFieldWithSameNameInJoinedInherita $expectedEntity->tags = ['tag1', 'tag2']; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\SimpleObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\SimpleObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm); $this->assertEquals($result[0], $expectedEntity); } diff --git a/tests/Doctrine/Tests/ORM/Hydration/SingleScalarHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/SingleScalarHydratorTest.php index 1313ca08958..8234ff98d36 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/SingleScalarHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/SingleScalarHydratorTest.php @@ -70,7 +70,7 @@ public function testHydrateSingleScalar($name, $resultSet) $rsm->addFieldResult('u', 'u__name', 'name'); $stmt = new HydratorMockStatement($resultSet); - $hydrator = new SingleScalarHydrator($this->_em); + $hydrator = new SingleScalarHydrator($this->em); if ($name === 'result1') { $result = $hydrator->hydrateAll($stmt, $rsm); diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 877837dae3b..e37dbdd586b 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -39,11 +39,11 @@ abstract class AbstractMappingDriverTest extends OrmTestCase { - abstract protected function _loadDriver(); + abstract protected function loadDriver(); public function createClassMetadata($entityClassName) { - $mappingDriver = $this->_loadDriver(); + $mappingDriver = $this->loadDriver(); $class = new ClassMetadata($entityClassName); $class->initializeReflection(new RuntimeReflectionService()); @@ -58,8 +58,8 @@ public function createClassMetadata($entityClassName) */ protected function createClassMetadataFactory(EntityManager $em = null) { - $driver = $this->_loadDriver(); - $em = $em ?: $this->_getTestEntityManager(); + $driver = $this->loadDriver(); + $em = $em ?: $this->getTestEntityManager(); $factory = new ClassMetadataFactory(); $em->getConfiguration()->setMetadataDriverImpl($driver); $factory->setEntityManager($em); @@ -502,7 +502,7 @@ public function testDiscriminatorColumnDefaults() */ public function testMappedSuperclassWithRepository() { - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $factory = $this->createClassMetadataFactory($em); $class = $factory->getMetadataFor(DDC869CreditCardPayment::class); @@ -571,7 +571,7 @@ public function testIdentifierColumnDefinition() */ public function testNamingStrategy() { - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $factory = $this->createClassMetadataFactory($em); self::assertInstanceOf(DefaultNamingStrategy::class, $em->getConfiguration()->getNamingStrategy()); @@ -627,7 +627,7 @@ public function testIdentifierRequiredShouldMentionParentClasses() public function testNamedQuery() { - $driver = $this->_loadDriver(); + $driver = $this->loadDriver(); $class = $this->createClassMetadata(User::class); self::assertCount(1, $class->getNamedQueries(), sprintf("Named queries not processed correctly by driver %s", get_class($driver))); diff --git a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php index 0df664dc343..a47cd6d8ad2 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php @@ -39,7 +39,7 @@ public function testLoadMetadataForNonEntityThrowsException() */ public function testFailingSecondLevelCacheAssociation() { - $mappingDriver = $this->_loadDriver(); + $mappingDriver = $this->loadDriver(); $class = new ClassMetadata(AnnotationSLC::class); $mappingDriver->loadMetadataForClass(AnnotationSLC::class, $class); @@ -52,7 +52,7 @@ public function testColumnWithMissingTypeDefaultsToString() { $cm = new ClassMetadata(ColumnWithoutType::class); $cm->initializeReflection(new RuntimeReflectionService()); - $annotationDriver = $this->_loadDriver(); + $annotationDriver = $this->loadDriver(); $annotationDriver->loadMetadataForClass(Annotation\InvalidColumn::class, $cm); @@ -68,10 +68,10 @@ public function testColumnWithMissingTypeDefaultsToString() */ public function testGetAllClassNamesIsIdempotent() { - $annotationDriver = $this->_loadDriverForCMSModels(); + $annotationDriver = $this->loadDriverForCMSModels(); $original = $annotationDriver->getAllClassNames(); - $annotationDriver = $this->_loadDriverForCMSModels(); + $annotationDriver = $this->loadDriverForCMSModels(); $afterTestReset = $annotationDriver->getAllClassNames(); self::assertEquals($original, $afterTestReset); @@ -82,10 +82,10 @@ public function testGetAllClassNamesIsIdempotent() */ public function testGetAllClassNamesIsIdempotentEvenWithDifferentDriverInstances() { - $annotationDriver = $this->_loadDriverForCMSModels(); + $annotationDriver = $this->loadDriverForCMSModels(); $original = $annotationDriver->getAllClassNames(); - $annotationDriver = $this->_loadDriverForCMSModels(); + $annotationDriver = $this->loadDriverForCMSModels(); $afterTestReset = $annotationDriver->getAllClassNames(); self::assertEquals($original, $afterTestReset); @@ -96,9 +96,9 @@ public function testGetAllClassNamesIsIdempotentEvenWithDifferentDriverInstances */ public function testGetAllClassNamesReturnsAlreadyLoadedClassesIfAppropriate() { - $this->_ensureIsLoaded(CmsUser::class); + $this->ensureIsLoaded(CmsUser::class); - $annotationDriver = $this->_loadDriverForCMSModels(); + $annotationDriver = $this->loadDriverForCMSModels(); $classes = $annotationDriver->getAllClassNames(); self::assertContains(CmsUser::class, $classes); @@ -109,27 +109,27 @@ public function testGetAllClassNamesReturnsAlreadyLoadedClassesIfAppropriate() */ public function testGetClassNamesReturnsOnlyTheAppropriateClasses() { - $this->_ensureIsLoaded(ECommerceCart::class); + $this->ensureIsLoaded(ECommerceCart::class); - $annotationDriver = $this->_loadDriverForCMSModels(); + $annotationDriver = $this->loadDriverForCMSModels(); $classes = $annotationDriver->getAllClassNames(); self::assertNotContains(ECommerceCart::class, $classes); } - protected function _loadDriverForCMSModels() + protected function loadDriverForCMSModels() { - $annotationDriver = $this->_loadDriver(); + $annotationDriver = $this->loadDriver(); $annotationDriver->addPaths([__DIR__ . '/../../Models/CMS/']); return $annotationDriver; } - protected function _loadDriver() + protected function loadDriver() { return $this->createAnnotationDriver(); } - protected function _ensureIsLoaded($entityClassName) + protected function ensureIsLoaded($entityClassName) { new $entityClassName; } @@ -141,10 +141,10 @@ protected function _ensureIsLoaded($entityClassName) */ public function testJoinTablesWithMappedSuperclassForAnnotationDriver() { - $annotationDriver = $this->_loadDriver(); + $annotationDriver = $this->loadDriver(); $annotationDriver->addPaths([__DIR__ . '/../../Models/DirectoryTree/']); - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $em->getConfiguration()->setMetadataDriverImpl($annotationDriver); $factory = new ClassMetadataFactory(); $factory->setEntityManager($em); @@ -161,9 +161,9 @@ public function testJoinTablesWithMappedSuperclassForAnnotationDriver() */ public function testInvalidMappedSuperClassWithManyToManyAssociation() { - $annotationDriver = $this->_loadDriver(); + $annotationDriver = $this->loadDriver(); - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $em->getConfiguration()->setMetadataDriverImpl($annotationDriver); $factory = new ClassMetadataFactory(); $factory->setEntityManager($em); @@ -182,9 +182,9 @@ public function testInvalidMappedSuperClassWithManyToManyAssociation() */ public function testInvalidMappedSuperClassWithInheritanceInformation() { - $annotationDriver = $this->_loadDriver(); + $annotationDriver = $this->loadDriver(); - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $em->getConfiguration()->setMetadataDriverImpl($annotationDriver); $factory = new ClassMetadataFactory(); $factory->setEntityManager($em); @@ -203,9 +203,9 @@ public function testInvalidMappedSuperClassWithInheritanceInformation() */ public function testInheritanceSkipsParentLifecycleCallbacks() { - $annotationDriver = $this->_loadDriver(); + $annotationDriver = $this->loadDriver(); - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $em->getConfiguration()->setMetadataDriverImpl($annotationDriver); $factory = new ClassMetadataFactory(); $factory->setEntityManager($em); @@ -222,9 +222,9 @@ public function testInheritanceSkipsParentLifecycleCallbacks() */ public function testMappedSuperclassInMiddleOfInheritanceHierarchy() { - $annotationDriver = $this->_loadDriver(); + $annotationDriver = $this->loadDriver(); - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $em->getConfiguration()->setMetadataDriverImpl($annotationDriver); $factory = new ClassMetadataFactory(); @@ -235,9 +235,9 @@ public function testMappedSuperclassInMiddleOfInheritanceHierarchy() public function testInvalidFetchOptionThrowsException() { - $annotationDriver = $this->_loadDriver(); + $annotationDriver = $this->loadDriver(); - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $em->getConfiguration()->setMetadataDriverImpl($annotationDriver); $factory = new ClassMetadataFactory(); $factory->setEntityManager($em); diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index 498d01d3d03..9a201a9ab55 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -27,7 +27,7 @@ class BasicInheritanceMappingTest extends OrmTestCase protected function setUp() { $this->cmf = new ClassMetadataFactory(); - $this->cmf->setEntityManager($this->_getTestEntityManager()); + $this->cmf->setEntityManager($this->getTestEntityManager()); } public function testGetMetadataForTransientClassThrowsException() diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index f280b048ff8..523b80c0fde 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -37,14 +37,14 @@ class ClassMetadataFactoryTest extends OrmTestCase public function testGetMetadataForSingleClass() { $mockDriver = new MetadataDriverMock(); - $entityManager = $this->_createEntityManager($mockDriver); + $entityManager = $this->createEntityManager($mockDriver); $conn = $entityManager->getConnection(); $mockPlatform = $conn->getDatabasePlatform(); $mockPlatform->setPrefersSequences(true); $mockPlatform->setPrefersIdentityColumns(false); - $cm1 = $this->_createValidClassMetadata(); + $cm1 = $this->createValidClassMetadata(); // SUT $cmf = new ClassMetadataFactory(); @@ -70,7 +70,7 @@ public function testGetMetadataForSingleClass() public function testGetMetadataFor_ReturnsLoadedCustomIdGenerator() { - $cm1 = $this->_createValidClassMetadata(); + $cm1 = $this->createValidClassMetadata(); $cm1->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); @@ -79,7 +79,7 @@ public function testGetMetadataFor_ReturnsLoadedCustomIdGenerator() 'arguments' => [], ]; - $cmf = $this->_createTestFactory(); + $cmf = $this->createTestFactory(); $cmf->setMetadataForClass($cm1->name, $cm1); @@ -91,7 +91,7 @@ public function testGetMetadataFor_ReturnsLoadedCustomIdGenerator() public function testGetMetadataFor_ThrowsExceptionOnUnknownCustomGeneratorClass() { - $cm1 = $this->_createValidClassMetadata(); + $cm1 = $this->createValidClassMetadata(); $cm1->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); @@ -100,7 +100,7 @@ public function testGetMetadataFor_ThrowsExceptionOnUnknownCustomGeneratorClass( 'arguments' => [], ]; - $cmf = $this->_createTestFactory(); + $cmf = $this->createTestFactory(); $cmf->setMetadataForClass($cm1->name, $cm1); @@ -111,9 +111,9 @@ public function testGetMetadataFor_ThrowsExceptionOnUnknownCustomGeneratorClass( public function testGetMetadataFor_ThrowsExceptionOnMissingCustomGeneratorDefinition() { - $cm1 = $this->_createValidClassMetadata(); + $cm1 = $this->createValidClassMetadata(); $cm1->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); - $cmf = $this->_createTestFactory(); + $cmf = $this->createTestFactory(); $cmf->setMetadataForClass($cm1->name, $cm1); $this->expectException(ORMException::class); @@ -126,7 +126,7 @@ public function testHasGetMetadata_NamespaceSeparatorIsNotNormalized() $metadataDriver = $this->createAnnotationDriver([__DIR__ . '/../../Models/Global/']); - $entityManager = $this->_createEntityManager($metadataDriver); + $entityManager = $this->createEntityManager($metadataDriver); $mf = $entityManager->getMetadataFactory(); $m1 = $mf->getMetadataFor(DoctrineGlobal_Article::class); @@ -155,7 +155,7 @@ public function testIsTransient() ->with($this->equalTo(CmsArticle::class)) ->will($this->returnValue(false)); - $em = $this->_createEntityManager($driver); + $em = $this->createEntityManager($driver); self::assertTrue($em->getMetadataFactory()->isTransient(CmsUser::class)); self::assertFalse($em->getMetadataFactory()->isTransient(CmsArticle::class)); @@ -177,7 +177,7 @@ public function testIsTransientEntityNamespace() ->with($this->equalTo(CmsArticle::class)) ->will($this->returnValue(false)); - $em = $this->_createEntityManager($driver); + $em = $this->createEntityManager($driver); $em->getConfiguration()->addEntityNamespace('CMS', 'Doctrine\Tests\Models\CMS'); self::assertTrue($em->getMetadataFactory()->isTransient('CMS:CmsUser')); @@ -188,7 +188,7 @@ public function testAddDefaultDiscriminatorMap() { $cmf = new ClassMetadataFactory(); $driver = $this->createAnnotationDriver([__DIR__ . '/../../Models/JoinedInheritanceType/']); - $em = $this->_createEntityManager($driver); + $em = $this->createEntityManager($driver); $cmf->setEntityManager($em); $rootMetadata = $cmf->getMetadataFor(RootClass::class); @@ -228,7 +228,7 @@ public function testGetAllMetadataWorksWithBadConnection() // DDC-3551 $conn = $this->createMock(Connection::class); $mockDriver = new MetadataDriverMock(); - $em = $this->_createEntityManager($mockDriver, $conn); + $em = $this->createEntityManager($mockDriver, $conn); $conn->expects($this->any()) ->method('getDatabasePlatform') @@ -243,7 +243,7 @@ public function testGetAllMetadataWorksWithBadConnection() self::assertEquals([], $metadata); } - protected function _createEntityManager($metadataDriver, $conn = null) + protected function createEntityManager($metadataDriver, $conn = null) { $driverMock = new DriverMock(); $config = new Configuration(); @@ -261,10 +261,10 @@ protected function _createEntityManager($metadataDriver, $conn = null) /** * @return ClassMetadataFactoryTestSubject */ - protected function _createTestFactory() + protected function createTestFactory() { $mockDriver = new MetadataDriverMock(); - $entityManager = $this->_createEntityManager($mockDriver); + $entityManager = $this->createEntityManager($mockDriver); $cmf = new ClassMetadataFactoryTestSubject(); $cmf->setEntityManager($entityManager); return $cmf; @@ -274,7 +274,7 @@ protected function _createTestFactory() * @param string $class * @return ClassMetadata */ - protected function _createValidClassMetadata() + protected function createValidClassMetadata() { // Self-made metadata $cm1 = new ClassMetadata(TestEntity1::class); @@ -334,7 +334,7 @@ public function testQuoteMetadata() { $cmf = new ClassMetadataFactory(); $driver = $this->createAnnotationDriver([__DIR__ . '/../../Models/Quote/']); - $em = $this->_createEntityManager($driver); + $em = $this->createEntityManager($driver); $cmf->setEntityManager($em); $userMetadata = $cmf->getMetadataFor(Quote\User::class); @@ -407,7 +407,7 @@ public function testFallbackLoadingCausesEventTriggeringThatCanModifyFetchedMeta $metadata = $this->createMock(ClassMetadata::class); $cmf = new ClassMetadataFactory(); $mockDriver = new MetadataDriverMock(); - $em = $this->_createEntityManager($mockDriver); + $em = $this->createEntityManager($mockDriver); $listener = $this->getMockBuilder(\stdClass::class)->setMethods(['onClassMetadataNotFound'])->getMock(); $eventManager = $em->getEventManager(); @@ -451,7 +451,7 @@ public function testAcceptsEntityManagerInterfaceInstances() */ public function testRejectsEmbeddableWithoutValidClassName() { - $metadata = $this->_createValidClassMetadata(); + $metadata = $this->createValidClassMetadata(); $metadata->mapEmbedded( [ @@ -461,7 +461,7 @@ public function testRejectsEmbeddableWithoutValidClassName() ] ); - $cmf = $this->_createTestFactory(); + $cmf = $this->createTestFactory(); $cmf->setMetadataForClass($metadata->name, $metadata); @@ -479,7 +479,7 @@ public function testInheritsIdGeneratorMappingFromEmbeddable() { $cmf = new ClassMetadataFactory(); $driver = $this->createAnnotationDriver([__DIR__ . '/../../Models/DDC4006/']); - $em = $this->_createEntityManager($driver); + $em = $this->createEntityManager($driver); $cmf->setEntityManager($em); $userMetadata = $cmf->getMetadataFor(DDC4006User::class); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php index 25efa24c397..2aa6f33d404 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php @@ -15,7 +15,7 @@ class ClassMetadataLoadEventTest extends OrmTestCase */ public function testEvent() { - $entityManager = $this->_getTestEntityManager(); + $entityManager = $this->getTestEntityManager(); $metadataFactory = $entityManager->getMetadataFactory(); $eventManager = $entityManager->getEventManager(); diff --git a/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php index e352149e3ec..7da078565cc 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php @@ -9,7 +9,7 @@ class PHPMappingDriverTest extends AbstractMappingDriverTest { - protected function _loadDriver() + protected function loadDriver() { $path = __DIR__ . DIRECTORY_SEPARATOR . 'php'; @@ -41,7 +41,7 @@ public function testinvalidEntityOrMappedSuperClassShouldMentionParentClasses() */ public function testFailingSecondLevelCacheAssociation() { - $mappingDriver = $this->_loadDriver(); + $mappingDriver = $this->loadDriver(); $class = new ClassMetadata(Mapping\PHPSLC::class); $mappingDriver->loadMetadataForClass(Mapping\PHPSLC::class, $class); diff --git a/tests/Doctrine/Tests/ORM/Mapping/StaticPHPMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/StaticPHPMappingDriverTest.php index 8779f6f1942..66c95216d10 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/StaticPHPMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/StaticPHPMappingDriverTest.php @@ -8,7 +8,7 @@ class StaticPHPMappingDriverTest extends AbstractMappingDriverTest { - protected function _loadDriver() + protected function loadDriver() { return new StaticPHPDriver(__DIR__ . DIRECTORY_SEPARATOR . 'php'); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php index 1a5b241ba9b..e5ab3635772 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php @@ -16,14 +16,14 @@ class XmlMappingDriverTest extends AbstractMappingDriverTest { - protected function _loadDriver() + protected function loadDriver() { return new XmlDriver(__DIR__ . DIRECTORY_SEPARATOR . 'xml'); } public function testClassTableInheritanceDiscriminatorMap() { - $mappingDriver = $this->_loadDriver(); + $mappingDriver = $this->loadDriver(); $class = new ClassMetadata(CTI::class); $class->initializeReflection(new RuntimeReflectionService()); @@ -45,7 +45,7 @@ public function testClassTableInheritanceDiscriminatorMap() */ public function testFailingSecondLevelCacheAssociation() { - $mappingDriver = $this->_loadDriver(); + $mappingDriver = $this->loadDriver(); $class = new ClassMetadata(XMLSLC::class); $mappingDriver->loadMetadataForClass(XMLSLC::class, $class); @@ -53,8 +53,8 @@ public function testFailingSecondLevelCacheAssociation() public function testIdentifierWithAssociationKey() { - $driver = $this->_loadDriver(); - $em = $this->_getTestEntityManager(); + $driver = $this->loadDriver(); + $em = $this->getTestEntityManager(); $factory = new ClassMetadataFactory(); $em->getConfiguration()->setMetadataDriverImpl($driver); @@ -88,9 +88,9 @@ public function testEmbeddableMapping() public function testEmbeddedMappingsWithUseColumnPrefix() { $factory = new ClassMetadataFactory(); - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); - $em->getConfiguration()->setMetadataDriverImpl($this->_loadDriver()); + $em->getConfiguration()->setMetadataDriverImpl($this->loadDriver()); $factory->setEntityManager($em); self::assertEquals( @@ -109,9 +109,9 @@ public function testEmbeddedMappingsWithUseColumnPrefix() public function testEmbeddedMappingsWithFalseUseColumnPrefix() { $factory = new ClassMetadataFactory(); - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); - $em->getConfiguration()->setMetadataDriverImpl($this->_loadDriver()); + $em->getConfiguration()->setMetadataDriverImpl($this->loadDriver()); $factory->setEntityManager($em); self::assertFalse( diff --git a/tests/Doctrine/Tests/ORM/Performance/DDC2602Test.php b/tests/Doctrine/Tests/ORM/Performance/DDC2602Test.php index 85f3981f0af..5f62f98c4b5 100644 --- a/tests/Doctrine/Tests/ORM/Performance/DDC2602Test.php +++ b/tests/Doctrine/Tests/ORM/Performance/DDC2602Test.php @@ -17,12 +17,12 @@ protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2602User::class), - $this->_em->getClassMetadata(DDC2602Biography::class), - $this->_em->getClassMetadata(DDC2602BiographyField::class), - $this->_em->getClassMetadata(DDC2602BiographyFieldChoice::class), + $this->em->getClassMetadata(DDC2602User::class), + $this->em->getClassMetadata(DDC2602Biography::class), + $this->em->getClassMetadata(DDC2602BiographyField::class), + $this->em->getClassMetadata(DDC2602BiographyFieldChoice::class), ] ); @@ -33,26 +33,26 @@ protected function tearDown() { parent::tearDown(); - $this->_schemaTool->dropSchema( + $this->schemaTool->dropSchema( [ - $this->_em->getClassMetadata(DDC2602User::class), - $this->_em->getClassMetadata(DDC2602Biography::class), - $this->_em->getClassMetadata(DDC2602BiographyField::class), - $this->_em->getClassMetadata(DDC2602BiographyFieldChoice::class), + $this->em->getClassMetadata(DDC2602User::class), + $this->em->getClassMetadata(DDC2602Biography::class), + $this->em->getClassMetadata(DDC2602BiographyField::class), + $this->em->getClassMetadata(DDC2602BiographyFieldChoice::class), ] ); } public function testIssue() { - $eventManager = $this->_em->getEventManager(); + $eventManager = $this->em->getEventManager(); $eventManager->addEventListener([Events::postLoad], new DDC2602PostLoadListener()); // Set maximum seconds this can run $this->setMaxRunningTime(1); $this - ->_em + ->em ->createQuery('SELECT u, b FROM Doctrine\Tests\ORM\Performance\DDC2602User u JOIN u.biography b') ->getResult(); } @@ -114,14 +114,14 @@ private function loadFixture() $biographyFieldChoice6->field = $biographyField2; $biographyFieldChoice6->label = 'Answer 2.2'; - $this->_em->persist($user1); - $this->_em->persist($user2); + $this->em->persist($user1); + $this->em->persist($user2); - $this->_em->persist($biographyField1); - $this->_em->persist($biographyField2); + $this->em->persist($biographyField1); + $this->em->persist($biographyField2); - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); } } diff --git a/tests/Doctrine/Tests/ORM/Performance/SecondLevelCacheTest.php b/tests/Doctrine/Tests/ORM/Performance/SecondLevelCacheTest.php index e54b8413a98..0695edfbe15 100644 --- a/tests/Doctrine/Tests/ORM/Performance/SecondLevelCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Performance/SecondLevelCacheTest.php @@ -28,7 +28,7 @@ protected function setUp() public function createEntityManager() { $logger = new DebugStack(); - $em = $this->_getEntityManager(); + $em = $this->getEntityManager(); $em->getConnection()->getConfiguration()->setSQLLogger($logger); $em->getConfiguration()->setSQLLogger($logger); diff --git a/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php b/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php index 5918e1a6df0..662c328ad97 100644 --- a/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php @@ -26,13 +26,13 @@ class PersistentCollectionTest extends OrmTestCase /** * @var \Doctrine\ORM\EntityManagerInterface */ - private $_emMock; + private $emMock; protected function setUp() { parent::setUp(); - $this->_emMock = EntityManagerMock::create(new ConnectionMock([], new DriverMock())); + $this->emMock = EntityManagerMock::create(new ConnectionMock([], new DriverMock())); } /** @@ -40,16 +40,16 @@ protected function setUp() */ public function setUpPersistentCollection() { - $classMetaData = $this->_emMock->getClassMetadata(ECommerceCart::class); - $this->collection = new PersistentCollection($this->_emMock, $classMetaData, new ArrayCollection); + $classMetaData = $this->emMock->getClassMetadata(ECommerceCart::class); + $this->collection = new PersistentCollection($this->emMock, $classMetaData, new ArrayCollection); $this->collection->setInitialized(false); $this->collection->setOwner(new ECommerceCart(), $classMetaData->getAssociationMapping('products')); } public function testCanBePutInLazyLoadingMode() { - $class = $this->_emMock->getClassMetadata(ECommerceProduct::class); - $collection = new PersistentCollection($this->_emMock, $class, new ArrayCollection); + $class = $this->emMock->getClassMetadata(ECommerceProduct::class); + $collection = new PersistentCollection($this->emMock, $class, new ArrayCollection); $collection->setInitialized(false); self::assertFalse($collection->isInitialized()); } diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php index 9ec72666d1f..1889bfeef58 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php @@ -15,12 +15,12 @@ class BasicEntityPersisterCompositeTypeParametersTest extends OrmTestCase /** * @var BasicEntityPersister */ - protected $_persister; + protected $persister; /** * @var \Doctrine\ORM\EntityManager */ - protected $_em; + protected $em; /** * {@inheritDoc} @@ -29,13 +29,13 @@ protected function setUp() { parent::setUp(); - $this->_em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); - $this->_em->getClassMetadata(Country::class); - $this->_em->getClassMetadata(Admin1::class); - $this->_em->getClassMetadata(Admin1AlternateName::class); + $this->em->getClassMetadata(Country::class); + $this->em->getClassMetadata(Admin1::class); + $this->em->getClassMetadata(Admin1AlternateName::class); - $this->_persister = new BasicEntityPersister($this->_em, $this->_em->getClassMetadata(Admin1AlternateName::class)); + $this->persister = new BasicEntityPersister($this->em, $this->em->getClassMetadata(Admin1AlternateName::class)); } @@ -44,7 +44,7 @@ public function testExpandParametersWillExpandCompositeEntityKeys() $country = new Country("IT", "Italy"); $admin1 = new Admin1(10, "Rome", $country); - list ($values, $types) = $this->_persister->expandParameters(['admin1' => $admin1]); + list ($values, $types) = $this->persister->expandParameters(['admin1' => $admin1]); self::assertEquals([Type::getType('integer'), Type::getType('string')], $types); self::assertEquals([10, 'IT'], $values); @@ -58,7 +58,7 @@ public function testExpandCriteriaParametersWillExpandCompositeEntityKeys() $criteria = Criteria::create(); $criteria->andWhere(Criteria::expr()->eq("admin1", $admin1)); - list ($values, $types) = $this->_persister->expandCriteriaParameters($criteria); + list ($values, $types) = $this->persister->expandCriteriaParameters($criteria); self::assertEquals([Type::getType('integer'), Type::getType('string')], $types); self::assertEquals([10, 'IT'], $values); diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php index 91fcf5ca403..1240156c6b6 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php @@ -12,12 +12,12 @@ class BasicEntityPersisterCompositeTypeSqlTest extends OrmTestCase /** * @var BasicEntityPersister */ - protected $_persister; + protected $persister; /** * @var \Doctrine\ORM\EntityManager */ - protected $_em; + protected $em; /** * {@inheritDoc} @@ -26,25 +26,25 @@ protected function setUp() { parent::setUp(); - $this->_em = $this->_getTestEntityManager(); - $this->_persister = new BasicEntityPersister($this->_em, $this->_em->getClassMetadata(Admin1AlternateName::class)); + $this->em = $this->getTestEntityManager(); + $this->persister = new BasicEntityPersister($this->em, $this->em->getClassMetadata(Admin1AlternateName::class)); } public function testSelectConditionStatementEq() { - $statement = $this->_persister->getSelectConditionStatementSQL('admin1', 1, [], Comparison::EQ); + $statement = $this->persister->getSelectConditionStatementSQL('admin1', 1, [], Comparison::EQ); self::assertEquals('t0."admin1" = ? AND t0."country" = ?', $statement); } public function testSelectConditionStatementEqNull() { - $statement = $this->_persister->getSelectConditionStatementSQL('admin1', null, [], Comparison::IS); + $statement = $this->persister->getSelectConditionStatementSQL('admin1', null, [], Comparison::IS); self::assertEquals('t0."admin1" IS NULL AND t0."country" IS NULL', $statement); } public function testSelectConditionStatementNeqNull() { - $statement = $this->_persister->getSelectConditionStatementSQL('admin1', null, [], Comparison::NEQ); + $statement = $this->persister->getSelectConditionStatementSQL('admin1', null, [], Comparison::NEQ); self::assertEquals('t0."admin1" IS NOT NULL AND t0."country" IS NOT NULL', $statement); } @@ -53,6 +53,6 @@ public function testSelectConditionStatementNeqNull() */ public function testSelectConditionStatementIn() { - $this->_persister->getSelectConditionStatementSQL('admin1', [], [], Comparison::IN); + $this->persister->getSelectConditionStatementSQL('admin1', [], [], Comparison::IN); } } diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php index bbb62a6e264..6b056406460 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php @@ -17,12 +17,12 @@ class BasicEntityPersisterTypeValueSqlTest extends OrmTestCase /** * @var BasicEntityPersister */ - protected $_persister; + protected $persister; /** * @var \Doctrine\ORM\EntityManager */ - protected $_em; + protected $em; /** * {@inheritDoc} @@ -43,20 +43,20 @@ protected function setUp() DBALType::addType('upper_case_string', '\Doctrine\Tests\DbalTypes\UpperCaseStringType'); } - $this->_em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); - $this->_persister = new BasicEntityPersister( - $this->_em, - $this->_em->getClassMetadata(CustomTypeParent::class) + $this->persister = new BasicEntityPersister( + $this->em, + $this->em->getClassMetadata(CustomTypeParent::class) ); } public function testGetInsertSQLUsesTypeValuesSQL() { - $method = new \ReflectionMethod($this->_persister, 'getInsertSQL'); + $method = new \ReflectionMethod($this->persister, 'getInsertSQL'); $method->setAccessible(true); - $sql = $method->invoke($this->_persister); + $sql = $method->invoke($this->persister); self::assertEquals('INSERT INTO "customtype_parents" ("customInteger", "child_id") VALUES (ABS(?), ?)', $sql); } @@ -69,15 +69,15 @@ public function testUpdateUsesTypeValuesSQL() $parent->customInteger = 1; $parent->child = $child; - $this->_em->getUnitOfWork()->registerManaged($parent, ['id' => 1], ['customInteger' => 0, 'child' => null]); - $this->_em->getUnitOfWork()->registerManaged($child, ['id' => 1], []); + $this->em->getUnitOfWork()->registerManaged($parent, ['id' => 1], ['customInteger' => 0, 'child' => null]); + $this->em->getUnitOfWork()->registerManaged($child, ['id' => 1], []); - $this->_em->getUnitOfWork()->propertyChanged($parent, 'customInteger', 0, 1); - $this->_em->getUnitOfWork()->propertyChanged($parent, 'child', null, $child); + $this->em->getUnitOfWork()->propertyChanged($parent, 'customInteger', 0, 1); + $this->em->getUnitOfWork()->propertyChanged($parent, 'child', null, $child); - $this->_persister->update($parent); + $this->persister->update($parent); - $executeUpdates = $this->_em->getConnection()->getExecuteUpdates(); + $executeUpdates = $this->em->getConnection()->getExecuteUpdates(); self::assertEquals( 'UPDATE "customtype_parents" SET "customInteger" = ABS(?), "child_id" = ? WHERE "id" = ?', @@ -87,10 +87,10 @@ public function testUpdateUsesTypeValuesSQL() public function testGetSelectConditionSQLUsesTypeValuesSQL() { - $method = new \ReflectionMethod($this->_persister, 'getSelectConditionSQL'); + $method = new \ReflectionMethod($this->persister, 'getSelectConditionSQL'); $method->setAccessible(true); - $sql = $method->invoke($this->_persister, ['customInteger' => 1, 'child' => 1]); + $sql = $method->invoke($this->persister, ['customInteger' => 1, 'child' => 1]); self::assertEquals('t0."customInteger" = ABS(?) AND t0."child_id" = ?', $sql); } @@ -100,7 +100,7 @@ public function testGetSelectConditionSQLUsesTypeValuesSQL() */ public function testStripNonAlphanumericCharactersFromSelectColumnListSQL() { - $persister = new BasicEntityPersister($this->_em, $this->_em->getClassMetadata(NonAlphaColumnsEntity::class)); + $persister = new BasicEntityPersister($this->em, $this->em->getClassMetadata(NonAlphaColumnsEntity::class)); $method = new \ReflectionMethod($persister, 'getSelectColumnsSQL'); $method->setAccessible(true); @@ -112,19 +112,19 @@ public function testStripNonAlphanumericCharactersFromSelectColumnListSQL() */ public function testSelectConditionStatementIsNull() { - $statement = $this->_persister->getSelectConditionStatementSQL('test', null, [], Comparison::IS); + $statement = $this->persister->getSelectConditionStatementSQL('test', null, [], Comparison::IS); self::assertEquals('test IS NULL', $statement); } public function testSelectConditionStatementEqNull() { - $statement = $this->_persister->getSelectConditionStatementSQL('test', null, [], Comparison::EQ); + $statement = $this->persister->getSelectConditionStatementSQL('test', null, [], Comparison::EQ); self::assertEquals('test IS NULL', $statement); } public function testSelectConditionStatementNeqNull() { - $statement = $this->_persister->getSelectConditionStatementSQL('test', null, [], Comparison::NEQ); + $statement = $this->persister->getSelectConditionStatementSQL('test', null, [], Comparison::NEQ); self::assertEquals('test IS NOT NULL', $statement); } @@ -135,23 +135,23 @@ public function testSelectConditionStatementWithMultipleValuesContainingNull() { self::assertEquals( '(t0."id" IN (?) OR t0."id" IS NULL)', - $this->_persister->getSelectConditionStatementSQL('id', [null]) + $this->persister->getSelectConditionStatementSQL('id', [null]) ); self::assertEquals( '(t0."id" IN (?) OR t0."id" IS NULL)', - $this->_persister->getSelectConditionStatementSQL('id', [null, 123]) + $this->persister->getSelectConditionStatementSQL('id', [null, 123]) ); self::assertEquals( '(t0."id" IN (?) OR t0."id" IS NULL)', - $this->_persister->getSelectConditionStatementSQL('id', [123, null]) + $this->persister->getSelectConditionStatementSQL('id', [123, null]) ); } public function testCountCondition() { - $persister = new BasicEntityPersister($this->_em, $this->_em->getClassMetadata(NonAlphaColumnsEntity::class)); + $persister = new BasicEntityPersister($this->em, $this->em->getClassMetadata(NonAlphaColumnsEntity::class)); // Using a criteria as array $statement = $persister->getCountSQL(['value' => 'bar']); @@ -166,6 +166,6 @@ public function testCountCondition() public function testCountEntities() { - self::assertEquals(0, $this->_persister->count()); + self::assertEquals(0, $this->persister->count()); } } diff --git a/tests/Doctrine/Tests/ORM/Persisters/JoinedSubclassPersisterTest.php b/tests/Doctrine/Tests/ORM/Persisters/JoinedSubclassPersisterTest.php index cdf281a7af3..652e52cb24c 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/JoinedSubclassPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/JoinedSubclassPersisterTest.php @@ -30,7 +30,7 @@ protected function setUp() { parent::setUp(); - $this->em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); $this->persister = new JoinedSubclassPersister($this->em, $this->em->getClassMetadata(RootClass::class)); } diff --git a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php index 7eb87c5ac06..34ae6dc8608 100644 --- a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php +++ b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php @@ -20,7 +20,7 @@ class CustomTreeWalkersJoinTest extends OrmTestCase protected function setUp() { - $this->em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); } public function assertSqlGeneration($dqlToBeTested, $sqlToBeConfirmed) @@ -83,7 +83,7 @@ private function modifySelectStatement(Query\AST\SelectStatement $selectStatemen $identificationVariableDecl->joins[] = $join; $selectStatement->selectClause->selectExpressions[] = $selectExpression; - $entityManager = $this->_getQuery()->getEntityManager(); + $entityManager = $this->getQuery()->getEntityManager(); $userMetadata = $entityManager->getClassMetadata(CmsUser::class); $addressMetadata = $entityManager->getClassMetadata(CmsAddress::class); diff --git a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php index 044760f8e9e..fb33c48d27b 100644 --- a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php +++ b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php @@ -18,16 +18,16 @@ */ class CustomTreeWalkersTest extends OrmTestCase { - private $_em; + private $em; protected function setUp() { - $this->_em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); } public function generateSql($dqlToBeTested, $treeWalkers, $outputWalker) { - $query = $this->_em->createQuery($dqlToBeTested); + $query = $this->em->createQuery($dqlToBeTested); $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, $treeWalkers) ->useQueryCache(false); @@ -115,7 +115,7 @@ public function walkSelectStatement(Query\AST\SelectStatement $selectStatement) // Get the DQL aliases of all the classes we want to modify $dqlAliases = []; - foreach ($this->_getQueryComponents() as $dqlAlias => $comp) { + foreach ($this->getQueryComponents() as $dqlAlias => $comp) { // Hard-coded check just for demonstration: We want to modify the query if // it involves the CmsUser class. if ($comp['metadata']->name == CmsUser::class) { @@ -210,7 +210,7 @@ private function modifySelectStatement(Query\AST\SelectStatement $selectStatemen $identificationVariableDecl->joins[] = $join; $selectStatement->selectClause->selectExpressions[] = $selectExpression; - $entityManager = $this->_getQuery()->getEntityManager(); + $entityManager = $this->getQuery()->getEntityManager(); $userMetadata = $entityManager->getClassMetadata(CmsUser::class); $addressMetadata = $entityManager->getClassMetadata(CmsAddress::class); diff --git a/tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php index eb4730e39ca..b65e3cf7b98 100644 --- a/tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php @@ -19,16 +19,16 @@ */ class DeleteSqlGenerationTest extends OrmTestCase { - private $_em; + private $em; protected function setUp() { - $this->_em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); } public function assertSqlGeneration($dqlToBeTested, $sqlToBeConfirmed) { try { - $query = $this->_em->createQuery($dqlToBeTested); + $query = $this->em->createQuery($dqlToBeTested); $sqlGenerated = $query->getSql(); diff --git a/tests/Doctrine/Tests/ORM/Query/ExprTest.php b/tests/Doctrine/Tests/ORM/Query/ExprTest.php index 0a99e8dc1cc..22a3c980814 100644 --- a/tests/Doctrine/Tests/ORM/Query/ExprTest.php +++ b/tests/Doctrine/Tests/ORM/Query/ExprTest.php @@ -18,167 +18,167 @@ */ class ExprTest extends OrmTestCase { - private $_em; + private $em; /** * @var Expr */ - private $_expr; + private $expr; protected function setUp() { - $this->_em = $this->_getTestEntityManager(); - $this->_expr = new Expr; + $this->em = $this->getTestEntityManager(); + $this->expr = new Expr; } public function testAvgExpr() { - self::assertEquals('AVG(u.id)', (string) $this->_expr->avg('u.id')); + self::assertEquals('AVG(u.id)', (string) $this->expr->avg('u.id')); } public function testMaxExpr() { - self::assertEquals('MAX(u.id)', (string) $this->_expr->max('u.id')); + self::assertEquals('MAX(u.id)', (string) $this->expr->max('u.id')); } public function testMinExpr() { - self::assertEquals('MIN(u.id)', (string) $this->_expr->min('u.id')); + self::assertEquals('MIN(u.id)', (string) $this->expr->min('u.id')); } public function testCountExpr() { - self::assertEquals('MAX(u.id)', (string) $this->_expr->max('u.id')); + self::assertEquals('MAX(u.id)', (string) $this->expr->max('u.id')); } public function testCountDistinctExpr() { - self::assertEquals('COUNT(DISTINCT u.id)', (string) $this->_expr->countDistinct('u.id')); + self::assertEquals('COUNT(DISTINCT u.id)', (string) $this->expr->countDistinct('u.id')); } public function testCountDistinctExprMulti() { - self::assertEquals('COUNT(DISTINCT u.id, u.name)', (string) $this->_expr->countDistinct('u.id', 'u.name')); + self::assertEquals('COUNT(DISTINCT u.id, u.name)', (string) $this->expr->countDistinct('u.id', 'u.name')); } public function testExistsExpr() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u')->from('User', 'u')->where('u.name = ?1'); - self::assertEquals('EXISTS(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->_expr->exists($qb)); + self::assertEquals('EXISTS(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->expr->exists($qb)); } public function testAllExpr() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u')->from('User', 'u')->where('u.name = ?1'); - self::assertEquals('ALL(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->_expr->all($qb)); + self::assertEquals('ALL(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->expr->all($qb)); } public function testSomeExpr() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u')->from('User', 'u')->where('u.name = ?1'); - self::assertEquals('SOME(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->_expr->some($qb)); + self::assertEquals('SOME(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->expr->some($qb)); } public function testAnyExpr() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u')->from('User', 'u')->where('u.name = ?1'); - self::assertEquals('ANY(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->_expr->any($qb)); + self::assertEquals('ANY(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->expr->any($qb)); } public function testNotExpr() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u')->from('User', 'u')->where('u.name = ?1'); - self::assertEquals('NOT(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->_expr->not($qb)); + self::assertEquals('NOT(SELECT u FROM User u WHERE u.name = ?1)', (string) $this->expr->not($qb)); } public function testAndExpr() { - self::assertEquals('1 = 1 AND 2 = 2', (string) $this->_expr->andX((string) $this->_expr->eq(1, 1), (string) $this->_expr->eq(2, 2))); + self::assertEquals('1 = 1 AND 2 = 2', (string) $this->expr->andX((string) $this->expr->eq(1, 1), (string) $this->expr->eq(2, 2))); } public function testIntelligentParenthesisPreventionAndExpr() { self::assertEquals( '1 = 1 AND 2 = 2', - (string) $this->_expr->andX($this->_expr->orX($this->_expr->andX($this->_expr->eq(1, 1))), (string) $this->_expr->eq(2, 2)) + (string) $this->expr->andX($this->expr->orX($this->expr->andX($this->expr->eq(1, 1))), (string) $this->expr->eq(2, 2)) ); } public function testOrExpr() { - self::assertEquals('1 = 1 OR 2 = 2', (string) $this->_expr->orX((string) $this->_expr->eq(1, 1), (string) $this->_expr->eq(2, 2))); + self::assertEquals('1 = 1 OR 2 = 2', (string) $this->expr->orX((string) $this->expr->eq(1, 1), (string) $this->expr->eq(2, 2))); } public function testAbsExpr() { - self::assertEquals('ABS(1)', (string) $this->_expr->abs(1)); + self::assertEquals('ABS(1)', (string) $this->expr->abs(1)); } public function testProdExpr() { - self::assertEquals('1 * 2', (string) $this->_expr->prod(1, 2)); + self::assertEquals('1 * 2', (string) $this->expr->prod(1, 2)); } public function testDiffExpr() { - self::assertEquals('1 - 2', (string) $this->_expr->diff(1, 2)); + self::assertEquals('1 - 2', (string) $this->expr->diff(1, 2)); } public function testSumExpr() { - self::assertEquals('1 + 2', (string) $this->_expr->sum(1, 2)); + self::assertEquals('1 + 2', (string) $this->expr->sum(1, 2)); } public function testQuotientExpr() { - self::assertEquals('10 / 2', (string) $this->_expr->quot(10, 2)); + self::assertEquals('10 / 2', (string) $this->expr->quot(10, 2)); } public function testScopeInArithmeticExpr() { - self::assertEquals('(100 - 20) / 2', (string) $this->_expr->quot($this->_expr->diff(100, 20), 2)); - self::assertEquals('100 - (20 / 2)', (string) $this->_expr->diff(100, $this->_expr->quot(20, 2))); + self::assertEquals('(100 - 20) / 2', (string) $this->expr->quot($this->expr->diff(100, 20), 2)); + self::assertEquals('100 - (20 / 2)', (string) $this->expr->diff(100, $this->expr->quot(20, 2))); } public function testSquareRootExpr() { - self::assertEquals('SQRT(1)', (string) $this->_expr->sqrt(1)); + self::assertEquals('SQRT(1)', (string) $this->expr->sqrt(1)); } public function testEqualExpr() { - self::assertEquals('1 = 1', (string) $this->_expr->eq(1, 1)); + self::assertEquals('1 = 1', (string) $this->expr->eq(1, 1)); } public function testLikeExpr() { - self::assertEquals('a.description LIKE :description', (string) $this->_expr->like('a.description', ':description')); + self::assertEquals('a.description LIKE :description', (string) $this->expr->like('a.description', ':description')); } public function testNotLikeExpr() { - self::assertEquals('a.description NOT LIKE :description', (string) $this->_expr->notLike('a.description', ':description')); + self::assertEquals('a.description NOT LIKE :description', (string) $this->expr->notLike('a.description', ':description')); } public function testConcatExpr() { - self::assertEquals('CONCAT(u.first_name, u.last_name)', (string) $this->_expr->concat('u.first_name', 'u.last_name')); - self::assertEquals('CONCAT(u.first_name, u.middle_name, u.last_name)', (string) $this->_expr->concat('u.first_name', 'u.middle_name', 'u.last_name')); + self::assertEquals('CONCAT(u.first_name, u.last_name)', (string) $this->expr->concat('u.first_name', 'u.last_name')); + self::assertEquals('CONCAT(u.first_name, u.middle_name, u.last_name)', (string) $this->expr->concat('u.first_name', 'u.middle_name', 'u.last_name')); } public function testSubstringExpr() { - self::assertEquals('SUBSTRING(a.title, 0, 25)', (string) $this->_expr->substring('a.title', 0, 25)); + self::assertEquals('SUBSTRING(a.title, 0, 25)', (string) $this->expr->substring('a.title', 0, 25)); } /** @@ -187,42 +187,42 @@ public function testSubstringExpr() */ public function testSubstringExprAcceptsTwoArguments() { - self::assertEquals('SUBSTRING(a.title, 5)', (string) $this->_expr->substring('a.title', 5)); + self::assertEquals('SUBSTRING(a.title, 5)', (string) $this->expr->substring('a.title', 5)); } public function testLowerExpr() { - self::assertEquals('LOWER(u.first_name)', (string) $this->_expr->lower('u.first_name')); + self::assertEquals('LOWER(u.first_name)', (string) $this->expr->lower('u.first_name')); } public function testUpperExpr() { - self::assertEquals('UPPER(u.first_name)', (string) $this->_expr->upper('u.first_name')); + self::assertEquals('UPPER(u.first_name)', (string) $this->expr->upper('u.first_name')); } public function testLengthExpr() { - self::assertEquals('LENGTH(u.first_name)', (string) $this->_expr->length('u.first_name')); + self::assertEquals('LENGTH(u.first_name)', (string) $this->expr->length('u.first_name')); } public function testGreaterThanExpr() { - self::assertEquals('5 > 2', (string) $this->_expr->gt(5, 2)); + self::assertEquals('5 > 2', (string) $this->expr->gt(5, 2)); } public function testLessThanExpr() { - self::assertEquals('2 < 5', (string) $this->_expr->lt(2, 5)); + self::assertEquals('2 < 5', (string) $this->expr->lt(2, 5)); } public function testStringLiteralExpr() { - self::assertEquals("'word'", (string) $this->_expr->literal('word')); + self::assertEquals("'word'", (string) $this->expr->literal('word')); } public function testNumericLiteralExpr() { - self::assertEquals(5, (string) $this->_expr->literal(5)); + self::assertEquals(5, (string) $this->expr->literal(5)); } /** @@ -231,92 +231,92 @@ public function testNumericLiteralExpr() */ public function testLiteralExprProperlyQuotesStrings() { - self::assertEquals("'00010001'", (string) $this->_expr->literal('00010001')); + self::assertEquals("'00010001'", (string) $this->expr->literal('00010001')); } public function testGreaterThanOrEqualToExpr() { - self::assertEquals('5 >= 2', (string) $this->_expr->gte(5, 2)); + self::assertEquals('5 >= 2', (string) $this->expr->gte(5, 2)); } public function testLessThanOrEqualTo() { - self::assertEquals('2 <= 5', (string) $this->_expr->lte(2, 5)); + self::assertEquals('2 <= 5', (string) $this->expr->lte(2, 5)); } public function testBetweenExpr() { - self::assertEquals('u.id BETWEEN 3 AND 6', (string) $this->_expr->between('u.id', 3, 6)); + self::assertEquals('u.id BETWEEN 3 AND 6', (string) $this->expr->between('u.id', 3, 6)); } public function testTrimExpr() { - self::assertEquals('TRIM(u.id)', (string) $this->_expr->trim('u.id')); + self::assertEquals('TRIM(u.id)', (string) $this->expr->trim('u.id')); } public function testIsNullExpr() { - self::assertEquals('u.id IS NULL', (string) $this->_expr->isNull('u.id')); + self::assertEquals('u.id IS NULL', (string) $this->expr->isNull('u.id')); } public function testIsNotNullExpr() { - self::assertEquals('u.id IS NOT NULL', (string) $this->_expr->isNotNull('u.id')); + self::assertEquals('u.id IS NOT NULL', (string) $this->expr->isNotNull('u.id')); } public function testIsInstanceOfExpr() { - self::assertEquals('u INSTANCE OF Doctrine\Tests\Models\Company\CompanyEmployee', (string) $this->_expr->isInstanceOf('u', CompanyEmployee::class)); + self::assertEquals('u INSTANCE OF Doctrine\Tests\Models\Company\CompanyEmployee', (string) $this->expr->isInstanceOf('u', CompanyEmployee::class)); } public function testIsMemberOfExpr() { - self::assertEquals(':groupId MEMBER OF u.groups', (string) $this->_expr->isMemberOf(':groupId', 'u.groups')); + self::assertEquals(':groupId MEMBER OF u.groups', (string) $this->expr->isMemberOf(':groupId', 'u.groups')); } public function testInExpr() { - self::assertEquals('u.id IN(1, 2, 3)', (string) $this->_expr->in('u.id', [1, 2, 3])); + self::assertEquals('u.id IN(1, 2, 3)', (string) $this->expr->in('u.id', [1, 2, 3])); } public function testInLiteralExpr() { - self::assertEquals("u.type IN('foo', 'bar')", (string) $this->_expr->in('u.type', ['foo', 'bar'])); + self::assertEquals("u.type IN('foo', 'bar')", (string) $this->expr->in('u.type', ['foo', 'bar'])); } public function testNotInExpr() { - self::assertEquals('u.id NOT IN(1, 2, 3)', (string) $this->_expr->notIn('u.id', [1, 2, 3])); + self::assertEquals('u.id NOT IN(1, 2, 3)', (string) $this->expr->notIn('u.id', [1, 2, 3])); } public function testNotInLiteralExpr() { - self::assertEquals("u.type NOT IN('foo', 'bar')", (string) $this->_expr->notIn('u.type', ['foo', 'bar'])); + self::assertEquals("u.type NOT IN('foo', 'bar')", (string) $this->expr->notIn('u.type', ['foo', 'bar'])); } public function testAndxOrxExpr() { - $andExpr = $this->_expr->andX(); - $andExpr->add($this->_expr->eq(1, 1)); - $andExpr->add($this->_expr->lt(1, 5)); + $andExpr = $this->expr->andX(); + $andExpr->add($this->expr->eq(1, 1)); + $andExpr->add($this->expr->lt(1, 5)); - $orExpr = $this->_expr->orX(); + $orExpr = $this->expr->orX(); $orExpr->add($andExpr); - $orExpr->add($this->_expr->eq(1, 1)); + $orExpr->add($this->expr->eq(1, 1)); self::assertEquals('(1 = 1 AND 1 < 5) OR 1 = 1', (string) $orExpr); } public function testOrxExpr() { - $orExpr = $this->_expr->orX(); - $orExpr->add($this->_expr->eq(1, 1)); - $orExpr->add($this->_expr->lt(1, 5)); + $orExpr = $this->expr->orX(); + $orExpr->add($this->expr->eq(1, 1)); + $orExpr->add($this->expr->lt(1, 5)); self::assertEquals('1 = 1 OR 1 < 5', (string) $orExpr); } public function testOrderByCountExpr() { - $orderExpr = $this->_expr->desc('u.username'); + $orderExpr = $this->expr->desc('u.username'); self::assertEquals($orderExpr->count(), 1); self::assertEquals('u.username DESC', (string) $orderExpr); @@ -324,13 +324,13 @@ public function testOrderByCountExpr() public function testOrderByOrder() { - $orderExpr = $this->_expr->desc('u.username'); + $orderExpr = $this->expr->desc('u.username'); self::assertEquals('u.username DESC', (string) $orderExpr); } public function testOrderByAsc() { - $orderExpr = $this->_expr->asc('u.username'); + $orderExpr = $this->expr->asc('u.username'); self::assertEquals('u.username ASC', (string) $orderExpr); } @@ -339,8 +339,8 @@ public function testOrderByAsc() */ public function testAddThrowsException() { - $orExpr = $this->_expr->orX(); - $orExpr->add($this->_expr->quot(5, 2)); + $orExpr = $this->expr->orX(); + $orExpr->add($this->expr->quot(5, 2)); } /** @@ -348,8 +348,8 @@ public function testAddThrowsException() */ public function testBooleanLiteral() { - self::assertEquals('true', $this->_expr->literal(true)); - self::assertEquals('false', $this->_expr->literal(false)); + self::assertEquals('true', $this->expr->literal(true)); + self::assertEquals('false', $this->expr->literal(false)); } @@ -418,15 +418,15 @@ public function testExpressionGetter() public function testAddEmpty() { - $andExpr = $this->_expr->andX(); - $andExpr->add($this->_expr->andX()); + $andExpr = $this->expr->andX(); + $andExpr->add($this->expr->andX()); self::assertEquals(0, $andExpr->count()); } public function testAddNull() { - $andExpr = $this->_expr->andX(); + $andExpr = $this->expr->andX(); $andExpr->add(null); self::assertEquals(0, $andExpr->count()); diff --git a/tests/Doctrine/Tests/ORM/Query/FilterCollectionTest.php b/tests/Doctrine/Tests/ORM/Query/FilterCollectionTest.php index 995784198df..53b324568e4 100644 --- a/tests/Doctrine/Tests/ORM/Query/FilterCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Query/FilterCollectionTest.php @@ -20,7 +20,7 @@ class FilterCollectionTest extends OrmTestCase protected function setUp() { - $this->em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); $this->em->getConfiguration()->addFilter('testFilter', MyFilter::class); } diff --git a/tests/Doctrine/Tests/ORM/Query/LanguageRecognitionTest.php b/tests/Doctrine/Tests/ORM/Query/LanguageRecognitionTest.php index 31bb6d337c6..7a8394e74c1 100644 --- a/tests/Doctrine/Tests/ORM/Query/LanguageRecognitionTest.php +++ b/tests/Doctrine/Tests/ORM/Query/LanguageRecognitionTest.php @@ -13,11 +13,11 @@ class LanguageRecognitionTest extends OrmTestCase /** * @var EntityManagerInterface */ - private $_em; + private $em; protected function setUp() { - $this->_em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); } public function assertValidDQL($dql, $debug = false) @@ -51,7 +51,7 @@ public function assertInvalidDQL($dql, $debug = false) public function parseDql($dql, $hints = []) { - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $query->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true); $query->setDQL($dql); @@ -89,7 +89,7 @@ public function testRejectsInvalidDQL($dql) { $this->expectException(QueryException::class); - $this->_em->getConfiguration()->setEntityNamespaces( + $this->em->getConfiguration()->setEntityNamespaces( [ 'Unknown' => 'Unknown', 'CMS' => 'Doctrine\Tests\Models\CMS' @@ -575,7 +575,7 @@ public function testInputParameterInSelect() */ public function testCustomFunctionsReturningStringInStringPrimary() { - $this->_em->getConfiguration()->addCustomStringFunction('CC', Query\AST\Functions\ConcatFunction::class); + $this->em->getConfiguration()->addCustomStringFunction('CC', Query\AST\Functions\ConcatFunction::class); self::assertValidDQL("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CC('%', u.name) LIKE '%foo%'", true); } diff --git a/tests/Doctrine/Tests/ORM/Query/LexerTest.php b/tests/Doctrine/Tests/ORM/Query/LexerTest.php index cfa49c0d848..105f85ecebd 100644 --- a/tests/Doctrine/Tests/ORM/Query/LexerTest.php +++ b/tests/Doctrine/Tests/ORM/Query/LexerTest.php @@ -7,7 +7,7 @@ class LexerTest extends OrmTestCase { - //private $_lexer; + //private $lexer; protected function setUp() { } diff --git a/tests/Doctrine/Tests/ORM/Query/ParserTest.php b/tests/Doctrine/Tests/ORM/Query/ParserTest.php index c28c54c5aeb..22346302c06 100644 --- a/tests/Doctrine/Tests/ORM/Query/ParserTest.php +++ b/tests/Doctrine/Tests/ORM/Query/ParserTest.php @@ -136,7 +136,7 @@ public function invalidMatches() private function createParser($dql) { - $query = new Query($this->_getTestEntityManager()); + $query = new Query($this->getTestEntityManager()); $query->setDQL($dql); $parser = new Parser($query); diff --git a/tests/Doctrine/Tests/ORM/Query/QueryTest.php b/tests/Doctrine/Tests/ORM/Query/QueryTest.php index 19dd5b5cd5f..2bd4b33d28c 100644 --- a/tests/Doctrine/Tests/ORM/Query/QueryTest.php +++ b/tests/Doctrine/Tests/ORM/Query/QueryTest.php @@ -17,16 +17,16 @@ class QueryTest extends OrmTestCase { /** @var EntityManager */ - protected $_em = null; + protected $em = null; protected function setUp() { - $this->_em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); } public function testGetParameters() { - $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1"); + $query = $this->em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1"); $parameters = new ArrayCollection(); @@ -35,7 +35,7 @@ public function testGetParameters() public function testGetParameters_HasSomeAlready() { - $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1"); + $query = $this->em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1"); $query->setParameter(2, 84); $parameters = new ArrayCollection(); @@ -46,7 +46,7 @@ public function testGetParameters_HasSomeAlready() public function testSetParameters() { - $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1"); + $query = $this->em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1"); $parameters = new ArrayCollection(); $parameters->add(new Parameter(1, 'foo')); @@ -59,7 +59,7 @@ public function testSetParameters() public function testFree() { - $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1"); + $query = $this->em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1"); $query->setParameter(2, 84, \PDO::PARAM_INT); $query->free(); @@ -71,7 +71,7 @@ public function testClone() { $dql = "select u from Doctrine\Tests\Models\CMS\CmsUser u where u.username = ?1"; - $query = $this->_em->createQuery($dql); + $query = $this->em->createQuery($dql); $query->setParameter(2, 84, \PDO::PARAM_INT); $query->setHint('foo', 'bar'); @@ -84,7 +84,7 @@ public function testClone() public function testFluentQueryInterface() { - $q = $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a"); + $q = $this->em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a"); $q2 = $q->expireQueryCache(true) ->setQueryCacheLifetime(3600) ->setQueryCacheDriver(null) @@ -107,7 +107,7 @@ public function testFluentQueryInterface() */ public function testHints() { - $q = $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a"); + $q = $this->em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a"); $q->setHint('foo', 'bar')->setHint('bar', 'baz'); self::assertEquals('bar', $q->getHint('foo')); @@ -122,10 +122,10 @@ public function testHints() */ public function testQueryDefaultResultCache() { - $this->_em->getConfiguration()->setResultCacheImpl(new ArrayCache()); - $q = $this->_em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a"); + $this->em->getConfiguration()->setResultCacheImpl(new ArrayCache()); + $q = $this->em->createQuery("select a from Doctrine\Tests\Models\CMS\CmsArticle a"); $q->useResultCache(true); - self::assertSame($this->_em->getConfiguration()->getResultCacheImpl(), $q->getQueryCacheProfile()->getResultCacheDriver()); + self::assertSame($this->em->getConfiguration()->getResultCacheImpl(), $q->getQueryCacheProfile()->getResultCacheDriver()); } /** @@ -133,7 +133,7 @@ public function testQueryDefaultResultCache() **/ public function testIterateWithNoDistinctAndWrongSelectClause() { - $q = $this->_em->createQuery("select u, a from Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a"); + $q = $this->em->createQuery("select u, a from Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a"); $q->iterate(); } @@ -142,13 +142,13 @@ public function testIterateWithNoDistinctAndWrongSelectClause() **/ public function testIterateWithNoDistinctAndWithValidSelectClause() { - $q = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a"); + $q = $this->em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a"); $q->iterate(); } public function testIterateWithDistinct() { - $q = $this->_em->createQuery("SELECT DISTINCT u from Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a"); + $q = $this->em->createQuery("SELECT DISTINCT u from Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a"); self::assertInstanceOf(IterableResult::class, $q->iterate()); } @@ -164,7 +164,7 @@ public function testCollectionParameters() 9 => "St Julien" ]; - $query = $this->_em + $query = $this->em ->createQuery("SELECT a FROM Doctrine\Tests\Models\CMS\CmsAddress a WHERE a.city IN (:cities)") ->setParameter('cities', $cities); @@ -180,16 +180,16 @@ public function testCollectionParameters() */ public function testProcessParameterValueClassMetadata() { - $query = $this->_em->createQuery("SELECT a FROM Doctrine\Tests\Models\CMS\CmsAddress a WHERE a.city IN (:cities)"); + $query = $this->em->createQuery("SELECT a FROM Doctrine\Tests\Models\CMS\CmsAddress a WHERE a.city IN (:cities)"); self::assertEquals( CmsAddress::class, - $query->processParameterValue($this->_em->getClassMetadata(CmsAddress::class)) + $query->processParameterValue($this->em->getClassMetadata(CmsAddress::class)) ); } public function testDefaultQueryHints() { - $config = $this->_em->getConfiguration(); + $config = $this->em->getConfiguration(); $defaultHints = [ 'hint_name_1' => 'hint_value_1', 'hint_name_2' => 'hint_value_2', @@ -197,9 +197,9 @@ public function testDefaultQueryHints() ]; $config->setDefaultQueryHints($defaultHints); - $query = $this->_em->createQuery(); + $query = $this->em->createQuery(); self::assertSame($config->getDefaultQueryHints(), $query->getHints()); - $this->_em->getConfiguration()->setDefaultQueryHint('hint_name_1', 'hint_another_value_1'); + $this->em->getConfiguration()->setDefaultQueryHint('hint_name_1', 'hint_another_value_1'); self::assertNotSame($config->getDefaultQueryHints(), $query->getHints()); $q2 = clone $query; self::assertSame($config->getDefaultQueryHints(), $q2->getHints()); @@ -210,17 +210,17 @@ public function testDefaultQueryHints() */ public function testResultCacheCaching() { - $this->_em->getConfiguration()->setResultCacheImpl(new ArrayCache()); - $this->_em->getConfiguration()->setQueryCacheImpl(new ArrayCache()); + $this->em->getConfiguration()->setResultCacheImpl(new ArrayCache()); + $this->em->getConfiguration()->setQueryCacheImpl(new ArrayCache()); /** @var DriverConnectionMock $driverConnectionMock */ - $driverConnectionMock = $this->_em->getConnection()->getWrappedConnection(); + $driverConnectionMock = $this->em->getConnection()->getWrappedConnection(); $stmt = new StatementArrayMock([ [ 'id_0' => 1, ] ]); $driverConnectionMock->setStatementMock($stmt); - $res = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u") + $res = $this->em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u") ->useQueryCache(true) ->useResultCache(true, 60) //let it cache @@ -230,7 +230,7 @@ public function testResultCacheCaching() $driverConnectionMock->setStatementMock(null); - $res = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u") + $res = $this->em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u") ->useQueryCache(true) ->useResultCache(false) ->getResult(); @@ -242,7 +242,7 @@ public function testResultCacheCaching() */ public function testSetHydrationCacheProfileNull() { - $query = $this->_em->createQuery(); + $query = $this->em->createQuery(); $query->setHydrationCacheProfile(null); self::assertNull($query->getHydrationCacheProfile()); } diff --git a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php index e50e8715da3..d1e45dfd3cb 100644 --- a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php @@ -24,11 +24,11 @@ class SelectSqlGenerationTest extends OrmTestCase { - private $_em; + private $em; protected function setUp() { - $this->_em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); } /** @@ -42,7 +42,7 @@ protected function setUp() public function assertSqlGeneration($dqlToBeTested, $sqlToBeConfirmed, array $queryHints = [], array $queryParams = []) { try { - $query = $this->_em->createQuery($dqlToBeTested); + $query = $this->em->createQuery($dqlToBeTested); foreach ($queryParams AS $name => $value) { $query->setParameter($name, $value); @@ -79,7 +79,7 @@ public function assertInvalidSqlGeneration($dqlToBeTested, $expectedException, a { $this->expectException($expectedException); - $query = $this->_em->createQuery($dqlToBeTested); + $query = $this->em->createQuery($dqlToBeTested); foreach ($queryParams AS $name => $value) { $query->setParameter($name, $value); @@ -313,7 +313,7 @@ public function testSupportsAggregateFunctionWithSimpleArithmetic() */ public function testSupportsAggregateCountFunctionWithSimpleArithmeticMySql() { - $this->_em->getConnection()->setDatabasePlatform(new MySqlPlatform()); + $this->em->getConnection()->setDatabasePlatform(new MySqlPlatform()); $this->assertSqlGeneration( 'SELECT COUNT(CONCAT(u.id, u.name)) FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY u.id', @@ -437,7 +437,7 @@ public function testJoinOnClause_NotYetSupported_ThrowsException() { $this->expectException(QueryException::class); - $query = $this->_em->createQuery( + $query = $this->em->createQuery( 'SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a ON a.topic LIKE \'%foo%\'' ); @@ -561,7 +561,7 @@ public function testSupportsInstanceOfExpressionsUsingInputParameterInWherePart( $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF ?1', 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c0_."discr" AS discr_2 FROM "company_persons" c0_ WHERE c0_."discr" IN (?)', - [], [1 => $this->_em->getClassMetadata(CompanyEmployee::class)] + [], [1 => $this->em->getClassMetadata(CompanyEmployee::class)] ); } @@ -620,7 +620,7 @@ public function testInvalidInExpressionWithSingleValuedAssociationPathExpression public function testSupportsConcatFunctionMysql() { - $this->_em->getConnection()->setDatabasePlatform(new MySqlPlatform()); + $this->em->getConnection()->setDatabasePlatform(new MySqlPlatform()); $this->assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, \'s\') = ?1', @@ -635,7 +635,7 @@ public function testSupportsConcatFunctionMysql() public function testSupportsConcatFunctionPgSql() { - $this->_em->getConnection()->setDatabasePlatform(new PostgreSqlPlatform()); + $this->em->getConnection()->setDatabasePlatform(new PostgreSqlPlatform()); $this->assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, \'s\') = ?1', @@ -670,7 +670,7 @@ public function testSubqueriesInComparisonExpression() public function testSupportsMemberOfExpressionOneToMany() { // "Get all users who have $phone as a phonenumber." (*cough* doesnt really make sense...) - $q = $this->_em->createQuery('SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE :param MEMBER OF u.phonenumbers'); + $q = $this->em->createQuery('SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE :param MEMBER OF u.phonenumbers'); $q->setHint(ORMQuery::HINT_FORCE_PARTIAL_LOAD, true); @@ -687,7 +687,7 @@ public function testSupportsMemberOfExpressionOneToMany() public function testSupportsMemberOfExpressionManyToMany() { // "Get all users who are members of $group." - $q = $this->_em->createQuery('SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE :param MEMBER OF u.groups'); + $q = $this->em->createQuery('SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE :param MEMBER OF u.groups'); $q->setHint(ORMQuery::HINT_FORCE_PARTIAL_LOAD, true); @@ -703,7 +703,7 @@ public function testSupportsMemberOfExpressionManyToMany() public function testSupportsMemberOfExpressionManyToManyParameterArray() { - $q = $this->_em->createQuery('SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE :param MEMBER OF u.groups'); + $q = $this->em->createQuery('SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE :param MEMBER OF u.groups'); $q->setHint(ORMQuery::HINT_FORCE_PARTIAL_LOAD, true); $group = new CmsGroup(); @@ -722,11 +722,11 @@ public function testSupportsMemberOfExpressionSelfReferencing() { // "Get all persons who have $person as a friend." // Tough one: Many-many self-referencing ("friends") with class table inheritance - $q = $this->_em->createQuery('SELECT p FROM Doctrine\Tests\Models\Company\CompanyPerson p WHERE :param MEMBER OF p.friends'); + $q = $this->em->createQuery('SELECT p FROM Doctrine\Tests\Models\Company\CompanyPerson p WHERE :param MEMBER OF p.friends'); $person = new CompanyPerson(); - $this->_em->getClassMetadata(get_class($person))->assignIdentifier($person, ['id' => 101]); + $this->em->getClassMetadata(get_class($person))->assignIdentifier($person, ['id' => 101]); $q->setParameter('param', $person); @@ -819,7 +819,7 @@ public function testExistsExpressionWithSimpleSelectReturningScalar() public function testLimitFromQueryClass() { - $q = $this->_em + $q = $this->em ->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u') ->setMaxResults(10); @@ -831,7 +831,7 @@ public function testLimitFromQueryClass() public function testLimitAndOffsetFromQueryClass() { - $q = $this->_em + $q = $this->em ->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u') ->setMaxResults(10) ->setFirstResult(0); @@ -915,14 +915,14 @@ public function testOrderBySupportsSingleValuedPathExpressionOwningSide() */ public function testOrderBySupportsSingleValuedPathExpressionInverseSide() { - $q = $this->_em->createQuery('select u from Doctrine\Tests\Models\CMS\CmsUser u order by u.address'); + $q = $this->em->createQuery('select u from Doctrine\Tests\Models\CMS\CmsUser u order by u.address'); $q->getSQL(); } public function testBooleanLiteralInWhereOnSqlite() { - $this->_em->getConnection()->setDatabasePlatform(new SqlitePlatform()); + $this->em->getConnection()->setDatabasePlatform(new SqlitePlatform()); $this->assertSqlGeneration( 'SELECT b FROM Doctrine\Tests\Models\Generic\BooleanModel b WHERE b.booleanField = true', @@ -937,7 +937,7 @@ public function testBooleanLiteralInWhereOnSqlite() public function testBooleanLiteralInWhereOnPostgres() { - $this->_em->getConnection()->setDatabasePlatform(new PostgreSqlPlatform()); + $this->em->getConnection()->setDatabasePlatform(new PostgreSqlPlatform()); $this->assertSqlGeneration( 'SELECT b FROM Doctrine\Tests\Models\Generic\BooleanModel b WHERE b.booleanField = true', @@ -1056,7 +1056,7 @@ public function testSubselectInSelect() */ public function testPessimisticWriteLockQueryHint() { - if ($this->_em->getConnection()->getDatabasePlatform() instanceof SqlitePlatform) { + if ($this->em->getConnection()->getDatabasePlatform() instanceof SqlitePlatform) { $this->markTestSkipped('SqLite does not support Row locking at all.'); } @@ -1073,7 +1073,7 @@ public function testPessimisticWriteLockQueryHint() */ public function testPessimisticReadLockQueryHintPostgreSql() { - $this->_em->getConnection()->setDatabasePlatform(new PostgreSqlPlatform()); + $this->em->getConnection()->setDatabasePlatform(new PostgreSqlPlatform()); $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = \'gblanco\'', @@ -1112,7 +1112,7 @@ public function testSupportSelectWithMoreThan10InputParameters() */ public function testPessimisticReadLockQueryHintMySql() { - $this->_em->getConnection()->setDatabasePlatform(new MySqlPlatform()); + $this->em->getConnection()->setDatabasePlatform(new MySqlPlatform()); $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = \'gblanco\'', @@ -1127,7 +1127,7 @@ public function testPessimisticReadLockQueryHintMySql() */ public function testPessimisticReadLockQueryHintOracle() { - $this->_em->getConnection()->setDatabasePlatform(new OraclePlatform()); + $this->em->getConnection()->setDatabasePlatform(new OraclePlatform()); $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = \'gblanco\'', @@ -1141,7 +1141,7 @@ public function testPessimisticReadLockQueryHintOracle() */ public function testSupportToCustomDQLFunctions() { - $config = $this->_em->getConfiguration(); + $config = $this->em->getConfiguration(); $config->addCustomNumericFunction('MYABS', MyAbsFunction::class); $this->assertSqlGeneration( @@ -1217,7 +1217,7 @@ public function testIdVariableResultVariableReuse() $exceptionThrown = false; try { - $query = $this->_em->createQuery('SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name IN (SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u)'); + $query = $this->em->createQuery('SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name IN (SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u)'); $query->getSql(); $query->free(); @@ -1399,12 +1399,12 @@ public function testIdentityFunctionWithCompositePrimaryKey() public function testPartialWithAssociationIdentifier() { $this->assertSqlGeneration( - 'SELECT PARTIAL l.{_source, _target} FROM Doctrine\Tests\Models\Legacy\LegacyUserReference l', + 'SELECT PARTIAL l.{source, target} FROM Doctrine\Tests\Models\Legacy\LegacyUserReference l', 'SELECT l0_."iUserIdSource" AS iUserIdSource_0, l0_."iUserIdTarget" AS iUserIdTarget_1 FROM "legacy_users_reference" l0_' ); $this->assertSqlGeneration( - 'SELECT PARTIAL l.{_description, _source, _target} FROM Doctrine\Tests\Models\Legacy\LegacyUserReference l', + 'SELECT PARTIAL l.{description, source, target} FROM Doctrine\Tests\Models\Legacy\LegacyUserReference l', 'SELECT l0_."description" AS description_0, l0_."iUserIdSource" AS iUserIdSource_1, l0_."iUserIdTarget" AS iUserIdTarget_2 FROM "legacy_users_reference" l0_' ); } @@ -2076,7 +2076,7 @@ public function testCaseThenFunction() */ public function testSupportsMoreThanTwoParametersInConcatFunctionMySql() { - $this->_em->getConnection()->setDatabasePlatform(new MySqlPlatform()); + $this->em->getConnection()->setDatabasePlatform(new MySqlPlatform()); $this->assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, u.status, \'s\') = ?1', @@ -2094,7 +2094,7 @@ public function testSupportsMoreThanTwoParametersInConcatFunctionMySql() */ public function testSupportsMoreThanTwoParametersInConcatFunctionPgSql() { - $this->_em->getConnection()->setDatabasePlatform(new PostgreSqlPlatform()); + $this->em->getConnection()->setDatabasePlatform(new PostgreSqlPlatform()); $this->assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, u.status, \'s\') = ?1', @@ -2112,7 +2112,7 @@ public function testSupportsMoreThanTwoParametersInConcatFunctionPgSql() */ public function testSupportsMoreThanTwoParametersInConcatFunctionSqlServer() { - $this->_em->getConnection()->setDatabasePlatform(new SQLServerPlatform()); + $this->em->getConnection()->setDatabasePlatform(new SQLServerPlatform()); $this->assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, u.status, \'s\') = ?1', diff --git a/tests/Doctrine/Tests/ORM/Query/SqlWalkerTest.php b/tests/Doctrine/Tests/ORM/Query/SqlWalkerTest.php index 96a081c2dae..3758a227aa8 100644 --- a/tests/Doctrine/Tests/ORM/Query/SqlWalkerTest.php +++ b/tests/Doctrine/Tests/ORM/Query/SqlWalkerTest.php @@ -24,7 +24,7 @@ class SqlWalkerTest extends OrmTestCase */ protected function setUp() { - $this->sqlWalker = new SqlWalker(new Query($this->_getTestEntityManager()), new ParserResult(), []); + $this->sqlWalker = new SqlWalker(new Query($this->getTestEntityManager()), new ParserResult(), []); } /** diff --git a/tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php index a8c0c3f0791..19033741347 100644 --- a/tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php @@ -16,7 +16,7 @@ */ class UpdateSqlGenerationTest extends OrmTestCase { - private $_em; + private $em; protected function setUp() { if (DBALType::hasType('negative_to_positive')) { @@ -25,13 +25,13 @@ protected function setUp() { DBALType::addType('negative_to_positive', NegativeToPositiveType::class); } - $this->_em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); } public function assertSqlGeneration($dqlToBeTested, $sqlToBeConfirmed) { try { - $query = $this->_em->createQuery($dqlToBeTested); + $query = $this->em->createQuery($dqlToBeTested); $sqlGenerated = $query->getSql(); $query->free(); diff --git a/tests/Doctrine/Tests/ORM/QueryBuilderTest.php b/tests/Doctrine/Tests/ORM/QueryBuilderTest.php index c8f3b9f798b..d289d84fc3d 100644 --- a/tests/Doctrine/Tests/ORM/QueryBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/QueryBuilderTest.php @@ -28,11 +28,11 @@ class QueryBuilderTest extends OrmTestCase /** * @var \Doctrine\ORM\EntityManager */ - private $_em; + private $em; protected function setUp() { - $this->_em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); } protected function assertValidQueryBuilder(QueryBuilder $qb, $expectedDql) @@ -45,7 +45,7 @@ protected function assertValidQueryBuilder(QueryBuilder $qb, $expectedDql) public function testSelectSetsType() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->delete(CmsUser::class, 'u') ->select('u.id', 'u.username'); @@ -54,7 +54,7 @@ public function testSelectSetsType() public function testEmptySelectSetsType() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->delete(CmsUser::class, 'u') ->select(); @@ -63,7 +63,7 @@ public function testEmptySelectSetsType() public function testDeleteSetsType() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->from(CmsUser::class, 'u') ->delete(); @@ -72,7 +72,7 @@ public function testDeleteSetsType() public function testUpdateSetsType() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->from(CmsUser::class, 'u') ->update(); @@ -81,7 +81,7 @@ public function testUpdateSetsType() public function testSimpleSelect() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->from(CmsUser::class, 'u') ->select('u.id', 'u.username'); @@ -90,7 +90,7 @@ public function testSimpleSelect() public function testSimpleDelete() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->delete(CmsUser::class, 'u'); self::assertValidQueryBuilder($qb, 'DELETE Doctrine\Tests\Models\CMS\CmsUser u'); @@ -98,7 +98,7 @@ public function testSimpleDelete() public function testSimpleSelectWithFromIndexBy() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->from(CmsUser::class, 'u', 'u.id') ->select('u.id', 'u.username'); @@ -107,7 +107,7 @@ public function testSimpleSelectWithFromIndexBy() public function testSimpleSelectWithIndexBy() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->from(CmsUser::class, 'u') ->indexBy('u', 'u.id') ->select('u.id', 'u.username'); @@ -117,7 +117,7 @@ public function testSimpleSelectWithIndexBy() public function testSimpleUpdate() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->update(CmsUser::class, 'u') ->set('u.username', ':username'); @@ -126,7 +126,7 @@ public function testSimpleUpdate() public function testInnerJoin() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u', 'a') ->from(CmsUser::class, 'u') ->innerJoin('u.articles', 'a'); @@ -136,7 +136,7 @@ public function testInnerJoin() public function testComplexInnerJoin() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u', 'a') ->from(CmsUser::class, 'u') ->innerJoin('u.articles', 'a', 'ON', 'u.id = a.author_id'); @@ -149,7 +149,7 @@ public function testComplexInnerJoin() public function testComplexInnerJoinWithIndexBy() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u', 'a') ->from(CmsUser::class, 'u') ->innerJoin('u.articles', 'a', 'ON', 'u.id = a.author_id', 'a.name'); @@ -162,7 +162,7 @@ public function testComplexInnerJoinWithIndexBy() public function testLeftJoin() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u', 'a') ->from(CmsUser::class, 'u') ->leftJoin('u.articles', 'a'); @@ -172,7 +172,7 @@ public function testLeftJoin() public function testLeftJoinWithIndexBy() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u', 'a') ->from(CmsUser::class, 'u') ->leftJoin('u.articles', 'a', null, null, 'a.name'); @@ -182,7 +182,7 @@ public function testLeftJoinWithIndexBy() public function testMultipleFrom() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u', 'g') ->from(CmsUser::class, 'u') ->from(CmsGroup::class, 'g'); @@ -192,7 +192,7 @@ public function testMultipleFrom() public function testMultipleFromWithIndexBy() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u', 'g') ->from(CmsUser::class, 'u') ->from(CmsGroup::class, 'g') @@ -203,7 +203,7 @@ public function testMultipleFromWithIndexBy() public function testMultipleFromWithJoin() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u', 'g') ->from(CmsUser::class, 'u') ->from(CmsGroup::class, 'g') @@ -214,7 +214,7 @@ public function testMultipleFromWithJoin() public function testMultipleFromWithMultipleJoin() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u', 'g') ->from(CmsUser::class, 'u') ->from(CmsArticle::class, 'a') @@ -227,7 +227,7 @@ public function testMultipleFromWithMultipleJoin() public function testWhere() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->where('u.id = :uid'); @@ -237,7 +237,7 @@ public function testWhere() public function testComplexAndWhere() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->where('u.id = :uid OR u.id = :uid2 OR u.id = :uid3') @@ -248,7 +248,7 @@ public function testComplexAndWhere() public function testAndWhere() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->where('u.id = :uid') @@ -259,7 +259,7 @@ public function testAndWhere() public function testOrWhere() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->where('u.id = :uid') @@ -270,7 +270,7 @@ public function testOrWhere() public function testComplexAndWhereOrWhereNesting() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u') ->from(CmsUser::class, 'u') ->where('u.id = :uid') @@ -284,7 +284,7 @@ public function testComplexAndWhereOrWhereNesting() public function testAndWhereIn() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u') ->from(CmsUser::class, 'u') ->where('u.id = :uid') @@ -295,7 +295,7 @@ public function testAndWhereIn() public function testOrWhereIn() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u') ->from(CmsUser::class, 'u') ->where('u.id = :uid') @@ -306,7 +306,7 @@ public function testOrWhereIn() public function testAndWhereNotIn() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u') ->from(CmsUser::class, 'u') ->where('u.id = :uid') @@ -317,7 +317,7 @@ public function testAndWhereNotIn() public function testOrWhereNotIn() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u') ->from(CmsUser::class, 'u') ->where('u.id = :uid') @@ -328,7 +328,7 @@ public function testOrWhereNotIn() public function testGroupBy() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->groupBy('u.id') @@ -339,7 +339,7 @@ public function testGroupBy() public function testHaving() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->groupBy('u.id') @@ -350,7 +350,7 @@ public function testHaving() public function testAndHaving() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->groupBy('u.id') @@ -362,7 +362,7 @@ public function testAndHaving() public function testOrHaving() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->groupBy('u.id') @@ -375,7 +375,7 @@ public function testOrHaving() public function testOrderBy() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->orderBy('u.username', 'ASC'); @@ -385,7 +385,7 @@ public function testOrderBy() public function testOrderByWithExpression() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u') ->from(CmsUser::class, 'u') ->orderBy($qb->expr()->asc('u.username')); @@ -395,7 +395,7 @@ public function testOrderByWithExpression() public function testAddOrderBy() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->orderBy('u.username', 'ASC') @@ -406,7 +406,7 @@ public function testAddOrderBy() public function testAddOrderByWithExpression() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u') ->from(CmsUser::class, 'u') ->orderBy('u.username', 'ASC') @@ -417,7 +417,7 @@ public function testAddOrderByWithExpression() public function testAddCriteriaWhere() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u') ->from(CmsUser::class, 'u'); @@ -432,7 +432,7 @@ public function testAddCriteriaWhere() public function testAddMultipleSameCriteriaWhere() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('alias1')->from(CmsUser::class, 'alias1'); $criteria = new Criteria(); @@ -453,7 +453,7 @@ public function testAddMultipleSameCriteriaWhere() */ public function testAddCriteriaWhereWithMultipleParametersWithSameField() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('alias1')->from(CmsUser::class, 'alias1'); $criteria = new Criteria(); @@ -472,7 +472,7 @@ public function testAddCriteriaWhereWithMultipleParametersWithSameField() */ public function testAddCriteriaWhereWithMultipleParametersWithDifferentFields() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('alias1')->from(CmsUser::class, 'alias1'); $criteria = new Criteria(); @@ -491,7 +491,7 @@ public function testAddCriteriaWhereWithMultipleParametersWithDifferentFields() */ public function testAddCriteriaWhereWithMultipleParametersWithSubpathsAndDifferentProperties() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('alias1')->from(CmsUser::class, 'alias1'); $criteria = new Criteria(); @@ -510,7 +510,7 @@ public function testAddCriteriaWhereWithMultipleParametersWithSubpathsAndDiffere */ public function testAddCriteriaWhereWithMultipleParametersWithSubpathsAndSameProperty() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('alias1')->from(CmsUser::class, 'alias1'); $criteria = new Criteria(); @@ -526,7 +526,7 @@ public function testAddCriteriaWhereWithMultipleParametersWithSubpathsAndSamePro public function testAddCriteriaOrder() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u') ->from(CmsUser::class, 'u'); @@ -544,7 +544,7 @@ public function testAddCriteriaOrder() */ public function testAddCriteriaOrderOnJoinAlias() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u') ->from(CmsUser::class, 'u') ->join('u.article','a'); @@ -560,7 +560,7 @@ public function testAddCriteriaOrderOnJoinAlias() public function testAddCriteriaLimit() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u') ->from(CmsUser::class, 'u'); @@ -576,7 +576,7 @@ public function testAddCriteriaLimit() public function testAddCriteriaUndefinedLimit() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u') ->from(CmsUser::class, 'u') ->setFirstResult(2) @@ -592,7 +592,7 @@ public function testAddCriteriaUndefinedLimit() public function testGetQuery() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u'); $q = $qb->getQuery(); @@ -602,7 +602,7 @@ public function testGetQuery() public function testSetParameter() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->where('u.id = :id') @@ -615,7 +615,7 @@ public function testSetParameter() public function testSetParameters() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u') ->from(CmsUser::class, 'u') ->where($qb->expr()->orX('u.username = :username', 'u.username = :username2')); @@ -632,7 +632,7 @@ public function testSetParameters() public function testGetParameters() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u') ->from(CmsUser::class, 'u') ->where('u.id = :id'); @@ -647,7 +647,7 @@ public function testGetParameters() public function testGetParameter() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->where('u.id = :id'); @@ -662,7 +662,7 @@ public function testGetParameter() public function testMultipleWhere() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->where('u.id = :uid', 'u.id = :uid2'); @@ -672,7 +672,7 @@ public function testMultipleWhere() public function testMultipleAndWhere() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->andWhere('u.id = :uid', 'u.id = :uid2'); @@ -682,7 +682,7 @@ public function testMultipleAndWhere() public function testMultipleOrWhere() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u') ->from(CmsUser::class, 'u') ->orWhere('u.id = :uid', $qb->expr()->eq('u.id', ':uid2')); @@ -692,7 +692,7 @@ public function testMultipleOrWhere() public function testComplexWhere() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $orExpr = $qb->expr()->orX(); $orExpr->add($qb->expr()->eq('u.id', ':uid3')); $orExpr->add($qb->expr()->in('u.id', [1])); @@ -706,7 +706,7 @@ public function testComplexWhere() public function testWhereInWithStringLiterals() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u') ->from(CmsUser::class, 'u') ->where($qb->expr()->in('u.name', ['one', 'two', 'three'])); @@ -720,8 +720,8 @@ public function testWhereInWithStringLiterals() public function testWhereInWithObjectLiterals() { - $qb = $this->_em->createQueryBuilder(); - $expr = $this->_em->getExpressionBuilder(); + $qb = $this->em->createQueryBuilder(); + $expr = $this->em->getExpressionBuilder(); $qb->select('u') ->from(CmsUser::class, 'u') ->where($expr->in('u.name', [$expr->literal('one'), $expr->literal('two'), $expr->literal('three')])); @@ -735,12 +735,12 @@ public function testWhereInWithObjectLiterals() public function testNegation() { - $expr = $this->_em->getExpressionBuilder(); + $expr = $this->em->getExpressionBuilder(); $orExpr = $expr->orX(); $orExpr->add($expr->eq('u.id', ':uid3')); $orExpr->add($expr->not($expr->in('u.id', [1]))); - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u') ->from(CmsUser::class, 'u') ->where($orExpr); @@ -750,8 +750,8 @@ public function testNegation() public function testSomeAllAny() { - $qb = $this->_em->createQueryBuilder(); - $expr = $this->_em->getExpressionBuilder(); + $qb = $this->em->createQueryBuilder(); + $expr = $this->em->getExpressionBuilder(); $qb->select('u') ->from(CmsUser::class, 'u') @@ -763,8 +763,8 @@ public function testSomeAllAny() public function testMultipleIsolatedQueryConstruction() { - $qb = $this->_em->createQueryBuilder(); - $expr = $this->_em->getExpressionBuilder(); + $qb = $this->em->createQueryBuilder(); + $expr = $this->em->getExpressionBuilder(); $qb->select('u')->from(CmsUser::class, 'u'); $qb->where($expr->eq('u.name', ':name')); @@ -789,19 +789,19 @@ public function testMultipleIsolatedQueryConstruction() public function testGetEntityManager() { - $qb = $this->_em->createQueryBuilder(); - self::assertEquals($this->_em, $qb->getEntityManager()); + $qb = $this->em->createQueryBuilder(); + self::assertEquals($this->em, $qb->getEntityManager()); } public function testInitialStateIsClean() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); self::assertEquals(QueryBuilder::STATE_CLEAN, $qb->getState()); } public function testAlteringQueryChangesStateToDirty() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u'); @@ -810,7 +810,7 @@ public function testAlteringQueryChangesStateToDirty() public function testSelectWithFuncExpression() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $expr = $qb->expr(); $qb->select($expr->count('e.id')); @@ -819,7 +819,7 @@ public function testSelectWithFuncExpression() public function testResetDQLPart() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->where('u.username = ?1')->orderBy('u.username'); @@ -835,7 +835,7 @@ public function testResetDQLPart() public function testResetDQLParts() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->where('u.username = ?1')->orderBy('u.username'); @@ -849,7 +849,7 @@ public function testResetDQLParts() public function testResetAllDQLParts() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->where('u.username = ?1')->orderBy('u.username'); @@ -866,7 +866,7 @@ public function testResetAllDQLParts() */ public function testDeepClone() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->andWhere('u.username = ?1') @@ -886,7 +886,7 @@ public function testDeepClone() */ public function testAddCriteriaWhereWithJoinAlias() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('alias1')->from(CmsUser::class, 'alias1'); $qb->join('alias1.articles','alias2'); @@ -906,7 +906,7 @@ public function testAddCriteriaWhereWithJoinAlias() */ public function testAddCriteriaWhereWithDefaultAndJoinAlias() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('alias1')->from(CmsUser::class, 'alias1'); $qb->join('alias1.articles','alias2'); @@ -926,7 +926,7 @@ public function testAddCriteriaWhereWithDefaultAndJoinAlias() */ public function testAddCriteriaWhereOnJoinAliasWithDuplicateFields() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('alias1')->from(CmsUser::class, 'alias1'); $qb->join('alias1.articles','alias2'); @@ -949,7 +949,7 @@ public function testAddCriteriaWhereOnJoinAliasWithDuplicateFields() */ public function testParametersAreCloned() { - $originalQb = new QueryBuilder($this->_em); + $originalQb = new QueryBuilder($this->em); $originalQb->setParameter('parameter1', 'value1'); @@ -963,7 +963,7 @@ public function testParametersAreCloned() public function testGetRootAlias() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u'); @@ -972,7 +972,7 @@ public function testGetRootAlias() public function testGetRootAliases() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u'); @@ -981,7 +981,7 @@ public function testGetRootAliases() public function testGetRootEntities() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u'); @@ -990,7 +990,7 @@ public function testGetRootEntities() public function testGetSeveralRootAliases() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->from(CmsUser::class, 'u2'); @@ -1001,7 +1001,7 @@ public function testGetSeveralRootAliases() public function testBCAddJoinWithoutRootAlias() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->add('join', ['INNER JOIN u.groups g'], true); @@ -1014,8 +1014,8 @@ public function testBCAddJoinWithoutRootAlias() */ public function testEmptyStringLiteral() { - $expr = $this->_em->getExpressionBuilder(); - $qb = $this->_em->createQueryBuilder() + $expr = $this->em->getExpressionBuilder(); + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->where($expr->eq('u.username', $expr->literal(""))); @@ -1028,8 +1028,8 @@ public function testEmptyStringLiteral() */ public function testEmptyNumericLiteral() { - $expr = $this->_em->getExpressionBuilder(); - $qb = $this->_em->createQueryBuilder() + $expr = $this->em->getExpressionBuilder(); + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->where($expr->eq('u.username', $expr->literal(0))); @@ -1042,7 +1042,7 @@ public function testEmptyNumericLiteral() */ public function testAddFromString() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->add('select', 'u') ->add('from', CmsUser::class . ' u'); @@ -1054,7 +1054,7 @@ public function testAddFromString() */ public function testAddDistinct() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->distinct() ->from(CmsUser::class, 'u'); @@ -1070,7 +1070,7 @@ public function testWhereAppend() $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage("Using \$append = true does not have an effect with 'where' or 'having' parts. See QueryBuilder#andWhere() for an example for correct usage."); - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->add('where', 'u.foo = ?1') ->add('where', 'u.bar = ?2', true) ; @@ -1078,7 +1078,7 @@ public function testWhereAppend() public function testSecondLevelCacheQueryBuilderOptions() { - $defaultQueryBuilder = $this->_em->createQueryBuilder() + $defaultQueryBuilder = $this->em->createQueryBuilder() ->select('s') ->from(State::class, 's'); @@ -1094,7 +1094,7 @@ public function testSecondLevelCacheQueryBuilderOptions() self::assertNull($defaultQuery->getCacheRegion()); self::assertNull($defaultQuery->getCacheMode()); - $builder = $this->_em->createQueryBuilder() + $builder = $this->em->createQueryBuilder() ->select('s') ->setLifetime(123) ->setCacheable(true) @@ -1120,7 +1120,7 @@ public function testSecondLevelCacheQueryBuilderOptions() */ public function testRebuildsFromParts() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->join('u.article', 'a'); @@ -1128,7 +1128,7 @@ public function testRebuildsFromParts() $dqlParts = $qb->getDQLParts(); $dql = $qb->getDQL(); - $qb2 = $this->_em->createQueryBuilder(); + $qb2 = $this->em->createQueryBuilder(); foreach (array_filter($dqlParts) as $name => $part) { $qb2->add($name, $part); } @@ -1139,7 +1139,7 @@ public function testRebuildsFromParts() public function testGetAllAliasesWithNoJoins() { - $qb = $this->_em->createQueryBuilder(); + $qb = $this->em->createQueryBuilder(); $qb->select('u')->from(CmsUser::class, 'u'); $aliases = $qb->getAllAliases(); @@ -1149,7 +1149,7 @@ public function testGetAllAliasesWithNoJoins() public function testGetAllAliasesWithJoins() { - $qb = $this->_em->createQueryBuilder() + $qb = $this->em->createQueryBuilder() ->select('u') ->from(CmsUser::class, 'u') ->join('u.groups', 'g'); diff --git a/tests/Doctrine/Tests/ORM/Sequencing/AssignedGeneratorTest.php b/tests/Doctrine/Tests/ORM/Sequencing/AssignedGeneratorTest.php index 841dd17bd40..e95c8843603 100644 --- a/tests/Doctrine/Tests/ORM/Sequencing/AssignedGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Sequencing/AssignedGeneratorTest.php @@ -13,13 +13,13 @@ */ class AssignedGeneratorTest extends OrmTestCase { - private $_em; - private $_assignedGen; + private $em; + private $assignedGen; protected function setUp() { - $this->_em = $this->_getTestEntityManager(); - $this->_assignedGen = new AssignedGenerator; + $this->em = $this->getTestEntityManager(); + $this->assignedGen = new AssignedGenerator; } /** @@ -29,7 +29,7 @@ public function testThrowsExceptionIfIdNotAssigned($entity) { $this->expectException(ORMException::class); - $this->_assignedGen->generate($this->_em, $entity); + $this->assignedGen->generate($this->em, $entity); } public function entitiesWithoutId(): array @@ -44,13 +44,13 @@ public function testCorrectIdGeneration() { $entity = new AssignedSingleIdEntity; $entity->myId = 1; - $id = $this->_assignedGen->generate($this->_em, $entity); + $id = $this->assignedGen->generate($this->em, $entity); self::assertEquals(['myId' => 1], $id); $entity = new AssignedCompositeIdEntity; $entity->myId2 = 2; $entity->myId1 = 4; - $id = $this->_assignedGen->generate($this->_em, $entity); + $id = $this->assignedGen->generate($this->em, $entity); self::assertEquals(['myId1' => 4, 'myId2' => 2], $id); } } diff --git a/tests/Doctrine/Tests/ORM/Sequencing/SequenceGeneratorTest.php b/tests/Doctrine/Tests/ORM/Sequencing/SequenceGeneratorTest.php index 1335deb4b9c..a4ebb9590e6 100644 --- a/tests/Doctrine/Tests/ORM/Sequencing/SequenceGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Sequencing/SequenceGeneratorTest.php @@ -29,11 +29,9 @@ protected function setUp() : void { parent::setUp(); - $this->entityManager = $this->_getTestEntityManager(); + $this->entityManager = $this->getTestEntityManager(); $this->sequenceGenerator = new SequenceGenerator('seq', 10); $this->connection = $this->entityManager->getConnection(); - - self::assertInstanceOf(ConnectionMock::class, $this->connection); } public function testGeneration() : void @@ -44,7 +42,7 @@ public function testGeneration() : void )); for ($i = 0; $i < 42; ++$i) { - if ($i % 10 == 0) { + if ($i % 10 === 0) { $this->connection->setQueryResult(new StatementArrayMock([[(int)($i / 10) * 10]])); } diff --git a/tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php b/tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php index 516b2890091..7eda7f4d008 100644 --- a/tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php @@ -28,7 +28,7 @@ public function setUp() { $this->listener = new AttachEntityListenersListener(); $driver = $this->createAnnotationDriver(); - $this->em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); $evm = $this->em->getEventManager(); $this->factory = new ClassMetadataFactory; diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheCollectionRegionCommandTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheCollectionRegionCommandTest.php index c0d4a3d1267..4a8973249a7 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheCollectionRegionCommandTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheCollectionRegionCommandTest.php @@ -35,7 +35,7 @@ protected function setUp() $this->application->setHelperSet(new HelperSet( [ - 'em' => new EntityManagerHelper($this->_em) + 'em' => new EntityManagerHelper($this->em) ] )); diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheEntityRegionCommandTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheEntityRegionCommandTest.php index b2e2d85a5e7..372a45ec93f 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheEntityRegionCommandTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheEntityRegionCommandTest.php @@ -35,7 +35,7 @@ protected function setUp() $this->application->setHelperSet(new HelperSet( [ - 'em' => new EntityManagerHelper($this->_em) + 'em' => new EntityManagerHelper($this->em) ] )); diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheQueryRegionCommandTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheQueryRegionCommandTest.php index 7f513d9e34e..36f47288f1d 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheQueryRegionCommandTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Console/Command/ClearCacheQueryRegionCommandTest.php @@ -34,7 +34,7 @@ protected function setUp() $this->application->setHelperSet(new HelperSet( [ - 'em' => new EntityManagerHelper($this->_em) + 'em' => new EntityManagerHelper($this->em) ] )); diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/Command/GenerateRepositoriesCommandTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/Command/GenerateRepositoriesCommandTest.php index 12cf2c144c3..77d5c890a18 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Console/Command/GenerateRepositoriesCommandTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Console/Command/GenerateRepositoriesCommandTest.php @@ -35,7 +35,7 @@ protected function setUp() \mkdir($this->path); - $metadataDriver = $this->_em->getConfiguration()->getMetadataDriverImpl(); + $metadataDriver = $this->em->getConfiguration()->getMetadataDriverImpl(); $metadataDriver->addPaths( [ @@ -47,7 +47,7 @@ protected function setUp() $this->application->setHelperSet(new HelperSet( [ - 'em' => new EntityManagerHelper($this->_em) + 'em' => new EntityManagerHelper($this->em) ] )); @@ -134,7 +134,7 @@ public function testGenerateRepositoriesCustomDefaultRepository() private function generateRepositories($filter, $defaultRepository = null) { if ($defaultRepository) { - $this->_em->getConfiguration()->setDefaultRepositoryClassName($defaultRepository); + $this->em->getConfiguration()->setDefaultRepositoryClassName($defaultRepository); } $command = $this->application->find('orm:generate-repositories'); diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/Command/InfoCommandTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/Command/InfoCommandTest.php index c12d06d9fee..1c31cf8aa69 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Console/Command/InfoCommandTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Console/Command/InfoCommandTest.php @@ -36,7 +36,7 @@ protected function setUp() $command = new InfoCommand(); $this->application->setHelperSet( - new HelperSet(['em' => new EntityManagerHelper($this->_em)]) + new HelperSet(['em' => new EntityManagerHelper($this->em)]) ); $this->application->add($command); diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/Command/MappingDescribeCommandTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/Command/MappingDescribeCommandTest.php index c8137dbf949..2ade50288ad 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Console/Command/MappingDescribeCommandTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Console/Command/MappingDescribeCommandTest.php @@ -41,7 +41,7 @@ protected function setUp() $this->application->setHelperSet(new HelperSet( [ - 'em' => new EntityManagerHelper($this->_em) + 'em' => new EntityManagerHelper($this->em) ] )); diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/Command/RunDqlCommandTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/Command/RunDqlCommandTest.php index c328f55368b..0749890ec5f 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Console/Command/RunDqlCommandTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Console/Command/RunDqlCommandTest.php @@ -43,7 +43,7 @@ protected function setUp() $this->application->setHelperSet(new HelperSet( [ - 'em' => new EntityManagerHelper($this->_em) + 'em' => new EntityManagerHelper($this->em) ] )); @@ -59,8 +59,8 @@ public function testCommandName() public function testWillRunQuery() { - $this->_em->persist(new DateTimeModel()); - $this->_em->flush(); + $this->em->persist(new DateTimeModel()); + $this->em->flush(); self::assertSame( 0, @@ -77,8 +77,8 @@ public function testWillRunQuery() public function testWillShowQuery() { - $this->_em->persist(new DateTimeModel()); - $this->_em->flush(); + $this->em->persist(new DateTimeModel()); + $this->em->flush(); self::assertSame( 0, diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index c593d3197b6..52c735e77a2 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -20,30 +20,30 @@ class EntityGeneratorTest extends OrmTestCase /** * @var EntityGenerator */ - private $_generator; - private $_tmpDir; - private $_namespace; + private $generator; + private $tmpDir; + private $namespace; public function setUp() { - $this->_namespace = uniqid("doctrine_"); - $this->_tmpDir = sys_get_temp_dir(); + $this->namespace = uniqid("doctrine_"); + $this->tmpDir = sys_get_temp_dir(); - mkdir($this->_tmpDir . \DIRECTORY_SEPARATOR . $this->_namespace); + mkdir($this->tmpDir . \DIRECTORY_SEPARATOR . $this->namespace); - $this->_generator = new EntityGenerator(); + $this->generator = new EntityGenerator(); - $this->_generator->setAnnotationPrefix(""); - $this->_generator->setGenerateAnnotations(true); - $this->_generator->setGenerateStubMethods(true); - $this->_generator->setRegenerateEntityIfExists(false); - $this->_generator->setUpdateEntityIfExists(true); - $this->_generator->setFieldVisibility(EntityGenerator::FIELD_VISIBLE_PROTECTED); + $this->generator->setAnnotationPrefix(""); + $this->generator->setGenerateAnnotations(true); + $this->generator->setGenerateStubMethods(true); + $this->generator->setRegenerateEntityIfExists(false); + $this->generator->setUpdateEntityIfExists(true); + $this->generator->setFieldVisibility(EntityGenerator::FIELD_VISIBLE_PROTECTED); } public function tearDown() { - $ri = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($this->_tmpDir . '/' . $this->_namespace)); + $ri = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($this->tmpDir . '/' . $this->namespace)); foreach ($ri AS $file) { /* @var $file \SplFileInfo */ @@ -52,7 +52,7 @@ public function tearDown() } } - rmdir($this->_tmpDir . '/' . $this->_namespace); + rmdir($this->tmpDir . '/' . $this->namespace); } /** @@ -62,8 +62,8 @@ public function tearDown() */ public function generateBookEntityFixture(array $embeddedClasses = []) { - $metadata = new ClassMetadata($this->_namespace . '\EntityGeneratorBook'); - $metadata->customRepositoryClassName = $this->_namespace . '\EntityGeneratorBookRepository'; + $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorBook'); + $metadata->customRepositoryClassName = $this->namespace . '\EntityGeneratorBookRepository'; $tableMetadata = new Mapping\TableMetadata(); @@ -172,14 +172,14 @@ public function generateBookEntityFixture(array $embeddedClasses = []) ); } - $this->_generator->writeEntityClass($metadata, $this->_tmpDir); + $this->generator->writeEntityClass($metadata, $this->tmpDir); return $metadata; } private function generateEntityTypeFixture(array $field) { - $metadata = new ClassMetadata($this->_namespace . '\EntityType'); + $metadata = new ClassMetadata($this->namespace . '\EntityType'); $tableMetadata = new Mapping\TableMetadata(); $tableMetadata->setName('entity_type'); @@ -203,7 +203,7 @@ private function generateEntityTypeFixture(array $field) $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); - $this->_generator->writeEntityClass($metadata, $this->_tmpDir); + $this->generator->writeEntityClass($metadata, $this->tmpDir); return $metadata; } @@ -213,7 +213,7 @@ private function generateEntityTypeFixture(array $field) */ private function generateIsbnEmbeddableFixture(array $embeddedClasses = [], $columnPrefix = null) { - $metadata = new ClassMetadata($this->_namespace . '\EntityGeneratorIsbn'); + $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorIsbn'); $metadata->isEmbeddedClass = true; $fieldMetadata = new Mapping\FieldMetadata('prefix'); @@ -261,7 +261,7 @@ private function generateIsbnEmbeddableFixture(array $embeddedClasses = [], $col ); } - $this->_generator->writeEntityClass($metadata, $this->_tmpDir); + $this->generator->writeEntityClass($metadata, $this->tmpDir); return $metadata; } @@ -271,7 +271,7 @@ private function generateIsbnEmbeddableFixture(array $embeddedClasses = [], $col */ private function generateTestEmbeddableFixture() { - $metadata = new ClassMetadata($this->_namespace . '\EntityGeneratorTestEmbeddable'); + $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorTestEmbeddable'); $metadata->isEmbeddedClass = true; @@ -303,7 +303,7 @@ private function generateTestEmbeddableFixture() $metadata->addProperty($fieldMetadata); - $this->_generator->writeEntityClass($metadata, $this->_tmpDir); + $this->generator->writeEntityClass($metadata, $this->tmpDir); return $metadata; } @@ -314,7 +314,7 @@ private function generateTestEmbeddableFixture() private function loadEntityClass(ClassMetadata $metadata) { $className = basename(str_replace('\\', '/', $metadata->name)); - $path = $this->_tmpDir . '/' . $this->_namespace . '/' . $className . '.php'; + $path = $this->tmpDir . '/' . $this->namespace . '/' . $className . '.php'; self::assertFileExists($path); @@ -379,19 +379,19 @@ public function testGeneratedEntityClass() $book = $this->newInstance($metadata); self::assertTrue(class_exists($metadata->name), "Class does not exist."); - self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', '__construct'), "EntityGeneratorBook::__construct() missing."); - self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'getId'), "EntityGeneratorBook::getId() missing."); - self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'setName'), "EntityGeneratorBook::setName() missing."); - self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'getName'), "EntityGeneratorBook::getName() missing."); - self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'setStatus'), "EntityGeneratorBook::setStatus() missing."); - self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'getStatus'), "EntityGeneratorBook::getStatus() missing."); - self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'setAuthor'), "EntityGeneratorBook::setAuthor() missing."); - self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'getAuthor'), "EntityGeneratorBook::getAuthor() missing."); - self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'getComments'), "EntityGeneratorBook::getComments() missing."); - self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'addComment'), "EntityGeneratorBook::addComment() missing."); - self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'removeComment'), "EntityGeneratorBook::removeComment() missing."); - self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'setIsbn'), "EntityGeneratorBook::setIsbn() missing."); - self::assertTrue(method_exists($this->_namespace . '\EntityGeneratorBook', 'getIsbn'), "EntityGeneratorBook::getIsbn() missing."); + self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', '__construct'), "EntityGeneratorBook::__construct() missing."); + self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'getId'), "EntityGeneratorBook::getId() missing."); + self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'setName'), "EntityGeneratorBook::setName() missing."); + self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'getName'), "EntityGeneratorBook::getName() missing."); + self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'setStatus'), "EntityGeneratorBook::setStatus() missing."); + self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'getStatus'), "EntityGeneratorBook::getStatus() missing."); + self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'setAuthor'), "EntityGeneratorBook::setAuthor() missing."); + self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'getAuthor'), "EntityGeneratorBook::getAuthor() missing."); + self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'getComments'), "EntityGeneratorBook::getComments() missing."); + self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'addComment'), "EntityGeneratorBook::addComment() missing."); + self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'removeComment'), "EntityGeneratorBook::removeComment() missing."); + self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'setIsbn'), "EntityGeneratorBook::setIsbn() missing."); + self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'getIsbn'), "EntityGeneratorBook::getIsbn() missing."); $reflClass = new \ReflectionClass($metadata->name); @@ -456,9 +456,9 @@ public function testEntityUpdatingWorks() ] ); - $this->_generator->writeEntityClass($metadata, $this->_tmpDir); + $this->generator->writeEntityClass($metadata, $this->tmpDir); - self::assertFileExists($this->_tmpDir . "/" . $this->_namespace . "/EntityGeneratorBook.php~"); + self::assertFileExists($this->tmpDir . "/" . $this->namespace . "/EntityGeneratorBook.php~"); $book = $this->newInstance($metadata); $reflClass = new \ReflectionClass($metadata->name); @@ -516,7 +516,7 @@ public function testMethodDocBlockShouldStartWithBackSlash() public function testEntityExtendsStdClass() { - $this->_generator->setClassToExtend('stdClass'); + $this->generator->setClassToExtend('stdClass'); $metadata = $this->generateBookEntityFixture(); $book = $this->newInstance($metadata); @@ -577,7 +577,7 @@ public function testLoadMetadata() public function testLoadPrefixedMetadata() { - $this->_generator->setAnnotationPrefix('ORM\\'); + $this->generator->setAnnotationPrefix('ORM\\'); $embeddedMetadata = $this->generateIsbnEmbeddableFixture(); $metadata = $this->generateBookEntityFixture(['isbn' => $embeddedMetadata]); @@ -613,12 +613,12 @@ public function testLoadPrefixedMetadata() */ public function testMappedSuperclassAnnotationGeneration() { - $metadata = new ClassMetadata($this->_namespace . '\EntityGeneratorBook'); + $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorBook'); $metadata->isMappedSuperclass = true; - $this->_generator->setAnnotationPrefix('ORM\\'); - $this->_generator->writeEntityClass($metadata, $this->_tmpDir); + $this->generator->setAnnotationPrefix('ORM\\'); + $this->generator->writeEntityClass($metadata, $this->tmpDir); $this->newInstance($metadata); // force instantiation (causes autoloading to kick in) @@ -636,15 +636,15 @@ public function testMappedSuperclassAnnotationGeneration() */ public function testParseTokensInEntityFile($php, $classes) { - $r = new \ReflectionObject($this->_generator); + $r = new \ReflectionObject($this->generator); $m = $r->getMethod('parseTokensInEntityFile'); $m->setAccessible(true); $p = $r->getProperty('staticReflection'); $p->setAccessible(true); - $ret = $m->invoke($this->_generator, $php); - self::assertEquals($classes, array_keys($p->getValue($this->_generator))); + $ret = $m->invoke($this->generator, $php); + self::assertEquals($classes, array_keys($p->getValue($this->generator))); } /** @@ -652,7 +652,7 @@ public function testParseTokensInEntityFile($php, $classes) */ public function testGenerateEntityWithSequenceGenerator() { - $metadata = new ClassMetadata($this->_namespace . '\DDC1784Entity'); + $metadata = new ClassMetadata($this->namespace . '\DDC1784Entity'); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); @@ -669,10 +669,10 @@ public function testGenerateEntityWithSequenceGenerator() ] ); - $this->_generator->writeEntityClass($metadata, $this->_tmpDir); + $this->generator->writeEntityClass($metadata, $this->tmpDir); - $filename = $this->_tmpDir . DIRECTORY_SEPARATOR - . $this->_namespace . DIRECTORY_SEPARATOR . 'DDC1784Entity.php'; + $filename = $this->tmpDir . DIRECTORY_SEPARATOR + . $this->namespace . DIRECTORY_SEPARATOR . 'DDC1784Entity.php'; self::assertFileExists($filename); @@ -692,7 +692,7 @@ public function testGenerateEntityWithSequenceGenerator() */ public function testGenerateEntityWithMultipleInverseJoinColumns() { - $metadata = new ClassMetadata($this->_namespace . '\DDC2079Entity'); + $metadata = new ClassMetadata($this->namespace . '\DDC2079Entity'); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); @@ -737,10 +737,10 @@ public function testGenerateEntityWithMultipleInverseJoinColumns() ] ); - $this->_generator->writeEntityClass($metadata, $this->_tmpDir); + $this->generator->writeEntityClass($metadata, $this->tmpDir); - $filename = $this->_tmpDir . DIRECTORY_SEPARATOR - . $this->_namespace . DIRECTORY_SEPARATOR . 'DDC2079Entity.php'; + $filename = $this->tmpDir . DIRECTORY_SEPARATOR + . $this->namespace . DIRECTORY_SEPARATOR . 'DDC2079Entity.php'; self::assertFileExists($filename); @@ -764,7 +764,7 @@ public function testGenerateEntityWithMultipleInverseJoinColumns() public function testGetInheritanceTypeString() { $reflection = new \ReflectionClass('\Doctrine\ORM\Mapping\ClassMetadata'); - $method = new \ReflectionMethod($this->_generator, 'getInheritanceTypeString'); + $method = new \ReflectionMethod($this->generator, 'getInheritanceTypeString'); $constants = $reflection->getConstants(); $pattern = '/^InheritanceType::/'; @@ -776,7 +776,7 @@ public function testGetInheritanceTypeString() } $expected = preg_replace($pattern, '', $name); - $actual = $method->invoke($this->_generator, $value); + $actual = $method->invoke($this->generator, $value); self::assertEquals($expected, $actual); } @@ -784,7 +784,7 @@ public function testGetInheritanceTypeString() $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage('Invalid provided InheritanceType: INVALID'); - $method->invoke($this->_generator, 'INVALID'); + $method->invoke($this->generator, 'INVALID'); } /** @@ -793,7 +793,7 @@ public function testGetInheritanceTypeString() public function testGetChangeTrackingPolicyString() { $reflection = new \ReflectionClass('\Doctrine\ORM\Mapping\ClassMetadata'); - $method = new \ReflectionMethod($this->_generator, 'getChangeTrackingPolicyString'); + $method = new \ReflectionMethod($this->generator, 'getChangeTrackingPolicyString'); $constants = $reflection->getConstants(); $pattern = '/^ChangeTrackingPolicy::/'; @@ -805,7 +805,7 @@ public function testGetChangeTrackingPolicyString() } $expected = preg_replace($pattern, '', $name); - $actual = $method->invoke($this->_generator, $value); + $actual = $method->invoke($this->generator, $value); self::assertEquals($expected, $actual); } @@ -813,7 +813,7 @@ public function testGetChangeTrackingPolicyString() $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage('Invalid provided ChangeTrackingPolicy: INVALID'); - $method->invoke($this->_generator, 'INVALID'); + $method->invoke($this->generator, 'INVALID'); } /** @@ -822,7 +822,7 @@ public function testGetChangeTrackingPolicyString() public function testGetIdGeneratorTypeString() { $reflection = new \ReflectionClass('\Doctrine\ORM\Mapping\ClassMetadata'); - $method = new \ReflectionMethod($this->_generator, 'getIdGeneratorTypeString'); + $method = new \ReflectionMethod($this->generator, 'getIdGeneratorTypeString'); $constants = $reflection->getConstants(); $pattern = '/^GeneratorType::/'; @@ -834,7 +834,7 @@ public function testGetIdGeneratorTypeString() } $expected = preg_replace($pattern, '', $name); - $actual = $method->invoke($this->_generator, $value); + $actual = $method->invoke($this->generator, $value); self::assertEquals($expected, $actual); } @@ -842,7 +842,7 @@ public function testGetIdGeneratorTypeString() $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage('Invalid provided IdGeneratorType: INVALID'); - $method->invoke($this->_generator, 'INVALID'); + $method->invoke($this->generator, 'INVALID'); } /** @@ -853,7 +853,7 @@ public function testGetIdGeneratorTypeString() public function testEntityTypeAlias(array $field) { $metadata = $this->generateEntityTypeFixture($field); - $path = $this->_tmpDir . '/'. $this->_namespace . '/EntityType.php'; + $path = $this->tmpDir . '/'. $this->namespace . '/EntityType.php'; self::assertFileExists($path); require_once $path; @@ -881,18 +881,18 @@ public function testEntityTypeAlias(array $field) public function testTraitPropertiesAndMethodsAreNotDuplicated() { $cmf = new ClassMetadataFactory(); - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $cmf->setEntityManager($em); $user = new DDC2372User(); $metadata = $cmf->getMetadataFor(get_class($user)); - $metadata->name = $this->_namespace . "\DDC2372User"; + $metadata->name = $this->namespace . "\DDC2372User"; - $this->_generator->writeEntityClass($metadata, $this->_tmpDir); + $this->generator->writeEntityClass($metadata, $this->tmpDir); - self::assertFileExists($this->_tmpDir . "/" . $this->_namespace . "/DDC2372User.php"); + self::assertFileExists($this->tmpDir . "/" . $this->namespace . "/DDC2372User.php"); - require $this->_tmpDir . "/" . $this->_namespace . "/DDC2372User.php"; + require $this->tmpDir . "/" . $this->namespace . "/DDC2372User.php"; $reflClass = new \ReflectionClass($metadata->name); @@ -907,17 +907,17 @@ public function testTraitPropertiesAndMethodsAreNotDuplicated() public function testTraitPropertiesAndMethodsAreNotDuplicatedInChildClasses() { $cmf = new ClassMetadataFactory(); - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $cmf->setEntityManager($em); $user = new DDC2372Admin(); $metadata = $cmf->getMetadataFor(get_class($user)); - $metadata->name = $this->_namespace . "\DDC2372Admin"; + $metadata->name = $this->namespace . "\DDC2372Admin"; - $this->_generator->writeEntityClass($metadata, $this->_tmpDir); + $this->generator->writeEntityClass($metadata, $this->tmpDir); - self::assertFileExists($this->_tmpDir . "/" . $this->_namespace . "/DDC2372Admin.php"); - require $this->_tmpDir . "/" . $this->_namespace . "/DDC2372Admin.php"; + self::assertFileExists($this->tmpDir . "/" . $this->namespace . "/DDC2372Admin.php"); + require $this->tmpDir . "/" . $this->namespace . "/DDC2372Admin.php"; $reflClass = new \ReflectionClass($metadata->name); @@ -932,12 +932,12 @@ public function testTraitPropertiesAndMethodsAreNotDuplicatedInChildClasses() public function testMethodsAndPropertiesAreNotDuplicatedInChildClasses() { $cmf = new ClassMetadataFactory(); - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $cmf->setEntityManager($em); - $ns = $this->_namespace; - $nsdir = $this->_tmpDir . '/' . $ns; + $ns = $this->namespace; + $nsdir = $this->tmpDir . '/' . $ns; $content = str_replace( 'namespace Doctrine\Tests\Models\DDC1590', @@ -951,7 +951,7 @@ public function testMethodsAndPropertiesAreNotDuplicatedInChildClasses() $metadata = $cmf->getMetadataFor($ns . '\DDC1590User'); - $this->_generator->writeEntityClass($metadata, $this->_tmpDir); + $this->generator->writeEntityClass($metadata, $this->tmpDir); // class DDC1590User extends DDC1590Entity { ... } $source = file_get_contents($fname); @@ -1045,7 +1045,7 @@ public function testGeneratedMutableEmbeddablesClass() */ public function testGeneratedImmutableEmbeddablesClass() { - $this->_generator->setEmbeddablesImmutable(true); + $this->generator->setEmbeddablesImmutable(true); $embeddedMetadata = $this->generateTestEmbeddableFixture(); $metadata = $this->generateIsbnEmbeddableFixture(['test' => $embeddedMetadata]); @@ -1120,13 +1120,13 @@ public function testRegenerateEntityClass() $this->loadEntityClass($metadata); $className = basename(str_replace('\\', '/', $metadata->name)); - $path = $this->_tmpDir . '/' . $this->_namespace . '/' . $className . '.php'; + $path = $this->tmpDir . '/' . $this->namespace . '/' . $className . '.php'; $classTest = file_get_contents($path); - $this->_generator->setRegenerateEntityIfExists(true); - $this->_generator->setBackupExisting(false); + $this->generator->setRegenerateEntityIfExists(true); + $this->generator->setBackupExisting(false); - $this->_generator->writeEntityClass($metadata, $this->_tmpDir); + $this->generator->writeEntityClass($metadata, $this->tmpDir); $classNew = file_get_contents($path); self::assertSame($classTest,$classNew); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php index ea19d4b34e6..f553156d3dd 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php @@ -16,34 +16,34 @@ class EntityRepositoryGeneratorTest extends OrmTestCase /** * @var EntityGenerator */ - private $_generator; + private $generator; /** * @var EntityRepositoryGenerator */ - private $_repositoryGenerator; + private $repositoryGenerator; - private $_tmpDir; - private $_namespace; + private $tmpDir; + private $namespace; /** * @inheritdoc */ public function setUp() { - $this->_namespace = uniqid('doctrine_'); - $this->_tmpDir = \sys_get_temp_dir() . DIRECTORY_SEPARATOR . $this->_namespace; - \mkdir($this->_tmpDir); - - $this->_generator = new EntityGenerator(); - $this->_generator->setAnnotationPrefix(""); - $this->_generator->setGenerateAnnotations(true); - $this->_generator->setGenerateStubMethods(true); - $this->_generator->setRegenerateEntityIfExists(false); - $this->_generator->setUpdateEntityIfExists(true); - $this->_generator->setFieldVisibility(EntityGenerator::FIELD_VISIBLE_PROTECTED); - - $this->_repositoryGenerator = new EntityRepositoryGenerator(); + $this->namespace = uniqid('doctrine_'); + $this->tmpDir = \sys_get_temp_dir() . DIRECTORY_SEPARATOR . $this->namespace; + \mkdir($this->tmpDir); + + $this->generator = new EntityGenerator(); + $this->generator->setAnnotationPrefix(""); + $this->generator->setGenerateAnnotations(true); + $this->generator->setGenerateStubMethods(true); + $this->generator->setRegenerateEntityIfExists(false); + $this->generator->setUpdateEntityIfExists(true); + $this->generator->setFieldVisibility(EntityGenerator::FIELD_VISIBLE_PROTECTED); + + $this->repositoryGenerator = new EntityRepositoryGenerator(); } /** @@ -53,7 +53,7 @@ public function tearDown() { $dirs = []; - $ri = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($this->_tmpDir)); + $ri = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($this->tmpDir)); foreach ($ri AS $file) { /* @var $file \SplFileInfo */ if ($file->isFile()) { @@ -75,8 +75,8 @@ public function tearDown() */ public function testGeneratedEntityRepositoryClass() { - $em = $this->_getTestEntityManager(); - $ns = $this->_namespace; + $em = $this->getTestEntityManager(); + $ns = $this->namespace; $className = $ns . '\DDC3231User1Tmp'; $this->writeEntityClass(DDC3231User1::class, $className); @@ -116,8 +116,8 @@ public function testGeneratedEntityRepositoryClass() */ public function testGeneratedEntityRepositoryClassCustomDefaultRepository() { - $em = $this->_getTestEntityManager(); - $ns = $this->_namespace; + $em = $this->getTestEntityManager(); + $ns = $this->namespace; $className = $ns . '\DDC3231User2Tmp'; $this->writeEntityClass(DDC3231User2::class, $className); @@ -162,18 +162,18 @@ public function testGeneratedEntityRepositoryClassCustomDefaultRepository() private function writeEntityClass($className, $newClassName) { $cmf = new ClassMetadataFactory(); - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $cmf->setEntityManager($em); $metadata = $cmf->getMetadataFor($className); - $metadata->namespace = $this->_namespace; + $metadata->namespace = $this->namespace; $metadata->name = $newClassName; $metadata->customRepositoryClassName = $newClassName . "Repository"; - $this->_generator->writeEntityClass($metadata, $this->_tmpDir); + $this->generator->writeEntityClass($metadata, $this->tmpDir); - require $this->_tmpDir . DIRECTORY_SEPARATOR . str_replace('\\', DIRECTORY_SEPARATOR, $newClassName) . ".php"; + require $this->tmpDir . DIRECTORY_SEPARATOR . str_replace('\\', DIRECTORY_SEPARATOR, $newClassName) . ".php"; } /** @@ -183,11 +183,11 @@ private function writeEntityClass($className, $newClassName) */ private function writeRepositoryClass($className, $defaultRepository = null) { - $this->_repositoryGenerator->setDefaultRepositoryName($defaultRepository); + $this->repositoryGenerator->setDefaultRepositoryName($defaultRepository); - $this->_repositoryGenerator->writeEntityRepositoryClass($className . 'Repository', $this->_tmpDir); + $this->repositoryGenerator->writeEntityRepositoryClass($className . 'Repository', $this->tmpDir); - return $this->_tmpDir . DIRECTORY_SEPARATOR . str_replace('\\', DIRECTORY_SEPARATOR, $className) . 'Repository.php'; + return $this->tmpDir . DIRECTORY_SEPARATOR . str_replace('\\', DIRECTORY_SEPARATOR, $className) . 'Repository.php'; } } diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index f1759089728..60b02f0b329 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -31,11 +31,11 @@ */ abstract class AbstractClassMetadataExporterTest extends OrmTestCase { - protected $_extension; + protected $extension; - abstract protected function _getType(); + abstract protected function getType(); - protected function _createEntityManager($metadataDriver) + protected function createEntityManager($metadataDriver) { $driverMock = new DriverMock(); $config = new Configuration(); @@ -53,7 +53,7 @@ protected function _createEntityManager($metadataDriver) return EntityManagerMock::create($connection, $config, $eventManager); } - protected function _createMetadataDriver($type, $path) + protected function createMetadataDriver($type, $path) { $mappingDriver = [ 'php' => PHPDriver::class, @@ -71,7 +71,7 @@ protected function _createMetadataDriver($type, $path) return $driver; } - protected function _createClassMetadataFactory($em, $type) + protected function createClassMetadataFactory($em, $type) { $factory = ($type === 'annotation') ? new ClassMetadataFactory() @@ -84,19 +84,19 @@ protected function _createClassMetadataFactory($em, $type) public function testExportDirectoryAndFilesAreCreated() { - $this->_deleteDirectory(__DIR__ . '/export/'.$this->_getType()); + $this->deleteDirectory(__DIR__ . '/export/'.$this->getType()); - $type = $this->_getType(); - $metadataDriver = $this->_createMetadataDriver($type, __DIR__ . '/' . $type); - $em = $this->_createEntityManager($metadataDriver); - $cmf = $this->_createClassMetadataFactory($em, $type); + $type = $this->getType(); + $metadataDriver = $this->createMetadataDriver($type, __DIR__ . '/' . $type); + $em = $this->createEntityManager($metadataDriver); + $cmf = $this->createClassMetadataFactory($em, $type); $metadata = $cmf->getAllMetadata(); $metadata[0]->name = ExportedUser::class; self::assertEquals(ExportedUser::class, $metadata[0]->name); - $type = $this->_getType(); + $type = $this->getType(); $cme = new ClassMetadataExporter(); $exporter = $cme->getExporter($type, __DIR__ . '/export/' . $type); @@ -107,15 +107,15 @@ public function testExportDirectoryAndFilesAreCreated() $exporter->setEntityGenerator($entityGenerator); } - $this->_extension = $exporter->getExtension(); + $this->extension = $exporter->getExtension(); $exporter->setMetadata($metadata); $exporter->export(); if ($type == 'annotation') { - self::assertTrue(file_exists(__DIR__ . '/export/' . $type . '/'.str_replace('\\', '/', ExportedUser::class).$this->_extension)); + self::assertTrue(file_exists(__DIR__ . '/export/' . $type . '/'.str_replace('\\', '/', ExportedUser::class).$this->extension)); } else { - self::assertTrue(file_exists(__DIR__ . '/export/' . $type . '/Doctrine.Tests.ORM.Tools.Export.ExportedUser'.$this->_extension)); + self::assertTrue(file_exists(__DIR__ . '/export/' . $type . '/Doctrine.Tests.ORM.Tools.Export.ExportedUser'.$this->extension)); } } @@ -124,11 +124,11 @@ public function testExportDirectoryAndFilesAreCreated() */ public function testExportedMetadataCanBeReadBackIn() { - $type = $this->_getType(); + $type = $this->getType(); - $metadataDriver = $this->_createMetadataDriver($type, __DIR__ . '/export/' . $type); - $em = $this->_createEntityManager($metadataDriver); - $cmf = $this->_createClassMetadataFactory($em, $type); + $metadataDriver = $this->createMetadataDriver($type, __DIR__ . '/export/' . $type); + $em = $this->createEntityManager($metadataDriver); + $cmf = $this->createClassMetadataFactory($em, $type); $metadata = $cmf->getAllMetadata(); self::assertEquals(1, count($metadata)); @@ -365,7 +365,7 @@ public function testInversedByIsExported($class) */ public function testCascadeAllCollapsed() { - $type = $this->_getType(); + $type = $this->getType(); if ($type == 'xml') { $xml = simplexml_load_file(__DIR__ . '/export/'.$type.'/Doctrine.Tests.ORM.Tools.Export.ExportedUser.dcm.xml'); @@ -382,10 +382,10 @@ public function testCascadeAllCollapsed() public function __destruct() { -# $this->_deleteDirectory(__DIR__ . '/export/'.$this->_getType()); +# $this->deleteDirectory(__DIR__ . '/export/'.$this->getType()); } - protected function _deleteDirectory($path) + protected function deleteDirectory($path) { if (is_file($path)) { return unlink($path); @@ -394,7 +394,7 @@ protected function _deleteDirectory($path) if (is_array($files)) { foreach ($files as $file){ - $this->_deleteDirectory($file); + $this->deleteDirectory($file); } } diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AnnotationClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AnnotationClassMetadataExporterTest.php index a432ec45187..56d93de9e75 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AnnotationClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AnnotationClassMetadataExporterTest.php @@ -14,7 +14,7 @@ */ class AnnotationClassMetadataExporterTest extends AbstractClassMetadataExporterTest { - protected function _getType() + protected function getType() { return 'annotation'; } diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/PhpClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/PhpClassMetadataExporterTest.php index 6ca3cf94830..d6f9f85f4bc 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/PhpClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/PhpClassMetadataExporterTest.php @@ -14,7 +14,7 @@ */ class PhpClassMetadataExporterTest extends AbstractClassMetadataExporterTest { - protected function _getType() + protected function getType() { return 'php'; } diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php index 30adb457dd8..6a1b6027b92 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php @@ -19,7 +19,7 @@ */ class XmlClassMetadataExporterTest extends AbstractClassMetadataExporterTest { - protected function _getType() + protected function getType() { return 'xml'; } diff --git a/tests/Doctrine/Tests/ORM/Tools/Pagination/PaginationTestCase.php b/tests/Doctrine/Tests/ORM/Tools/Pagination/PaginationTestCase.php index 471e86b5505..7f0114ec4fb 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Pagination/PaginationTestCase.php +++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/PaginationTestCase.php @@ -13,7 +13,7 @@ abstract class PaginationTestCase extends OrmTestCase public function setUp() { - $this->entityManager = $this->_getTestEntityManager(); + $this->entityManager = $this->getTestEntityManager(); } public function tearDown() diff --git a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php index 04ee6e412e8..7899565595e 100644 --- a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php @@ -28,7 +28,7 @@ public function setUp() { $annotationDriver = $this->createAnnotationDriver(); - $this->em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); $this->em->getConfiguration()->setMetadataDriverImpl($annotationDriver); $this->factory = $this->em->getMetadataFactory(); $this->listener = new ResolveTargetEntityListener(); diff --git a/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php b/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php index 11aef7b4c9e..ae2a3b35959 100644 --- a/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php @@ -23,7 +23,7 @@ class SchemaToolTest extends OrmTestCase { public function testAddUniqueIndexForUniqueFieldAnnotation() { - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $schemaTool = new SchemaTool($em); $classes = [ @@ -44,7 +44,7 @@ public function testAddUniqueIndexForUniqueFieldAnnotation() public function testAnnotationOptionsAttribute() { - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $schemaTool = new SchemaTool($em); $classes = [ @@ -66,7 +66,7 @@ public function testPassColumnDefinitionToJoinColumn() { $customColumnDef = "MEDIUMINT(6) UNSIGNED NOT NULL"; - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $schemaTool = new SchemaTool($em); $avatar = $em->getClassMetadata(ForumAvatar::class); @@ -93,7 +93,7 @@ public function testPostGenerateEvents() { $listener = new GenerateSchemaEventListener(); - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $em->getEventManager()->addEventListener( [ToolEvents::postGenerateSchemaTable, ToolEvents::postGenerateSchema], $listener ); @@ -117,7 +117,7 @@ public function testPostGenerateEvents() public function testNullDefaultNotAddedToCustomSchemaOptions() { - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $schemaTool = new SchemaTool($em); $customSchemaOptions = $schemaTool->getSchemaFromMetadata([$em->getClassMetadata(NullDefaultColumn::class)]) @@ -133,7 +133,7 @@ public function testNullDefaultNotAddedToCustomSchemaOptions() */ public function testSchemaHasProperIndexesFromUniqueConstraintAnnotation() { - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $schemaTool = new SchemaTool($em); $classes = [ $em->getClassMetadata(UniqueConstraintAnnotationModel::class), @@ -152,7 +152,7 @@ public function testSchemaHasProperIndexesFromUniqueConstraintAnnotation() public function testRemoveUniqueIndexOverruledByPrimaryKey() { - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $schemaTool = new SchemaTool($em); $classes = [ $em->getClassMetadata(FirstEntity::class), diff --git a/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php b/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php index d901b399fda..bfaddc85328 100644 --- a/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php @@ -20,7 +20,7 @@ class SchemaValidatorTest extends OrmTestCase public function setUp() { - $this->em = $this->_getTestEntityManager(); + $this->em = $this->getTestEntityManager(); $this->validator = new SchemaValidator($this->em); } diff --git a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php index 0806d18eecb..ecd232dc1ae 100644 --- a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php +++ b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php @@ -36,21 +36,21 @@ class UnitOfWorkTest extends OrmTestCase * * @var UnitOfWorkMock */ - private $_unitOfWork; + private $unitOfWork; /** * Provides a sequence mock to the UnitOfWork * * @var ConnectionMock */ - private $_connectionMock; + private $connectionMock; /** * The EntityManager mock that provides the mock persisters * * @var EntityManagerMock */ - private $_emMock; + private $emMock; /** * @var EventManager|\PHPUnit_Framework_MockObject_MockObject @@ -60,21 +60,22 @@ class UnitOfWorkTest extends OrmTestCase protected function setUp() { parent::setUp(); - $this->_connectionMock = new ConnectionMock([], new DriverMock()); - $this->eventManager = $this->getMockBuilder(EventManager::class)->getMock(); - $this->_emMock = EntityManagerMock::create($this->_connectionMock, null, $this->eventManager); - // SUT - $this->_unitOfWork = new UnitOfWorkMock($this->_emMock); - $this->_emMock->setUnitOfWork($this->_unitOfWork); + + $this->connectionMock = new ConnectionMock([], new DriverMock()); + $this->eventManager = $this->getMockBuilder(EventManager::class)->getMock(); + $this->emMock = EntityManagerMock::create($this->connectionMock, null, $this->eventManager); + $this->unitOfWork = new UnitOfWorkMock($this->emMock); + + $this->emMock->setUnitOfWork($this->unitOfWork); } public function testRegisterRemovedOnNewEntityIsIgnored() { $user = new ForumUser(); $user->username = 'romanb'; - self::assertFalse($this->_unitOfWork->isScheduledForDelete($user)); - $this->_unitOfWork->scheduleForDelete($user); - self::assertFalse($this->_unitOfWork->isScheduledForDelete($user)); + self::assertFalse($this->unitOfWork->isScheduledForDelete($user)); + $this->unitOfWork->scheduleForDelete($user); + self::assertFalse($this->unitOfWork->isScheduledForDelete($user)); } @@ -83,28 +84,28 @@ public function testRegisterRemovedOnNewEntityIsIgnored() public function testSavingSingleEntityWithIdentityColumnForcesInsert() { // Setup fake persister and id generator for identity generation - $userPersister = new EntityPersisterMock($this->_emMock, $this->_emMock->getClassMetadata(ForumUser::class)); - $this->_unitOfWork->setEntityPersister(ForumUser::class, $userPersister); + $userPersister = new EntityPersisterMock($this->emMock, $this->emMock->getClassMetadata(ForumUser::class)); + $this->unitOfWork->setEntityPersister(ForumUser::class, $userPersister); $userPersister->setMockIdGeneratorType(GeneratorType::IDENTITY); // Test $user = new ForumUser(); $user->username = 'romanb'; - $this->_unitOfWork->persist($user); + $this->unitOfWork->persist($user); // Check self::assertEquals(0, count($userPersister->getInserts())); self::assertEquals(0, count($userPersister->getUpdates())); self::assertEquals(0, count($userPersister->getDeletes())); - self::assertFalse($this->_unitOfWork->isInIdentityMap($user)); + self::assertFalse($this->unitOfWork->isInIdentityMap($user)); // should no longer be scheduled for insert - self::assertTrue($this->_unitOfWork->isScheduledForInsert($user)); + self::assertTrue($this->unitOfWork->isScheduledForInsert($user)); // Now lets check whether a subsequent commit() does anything $userPersister->reset(); // Test - $this->_unitOfWork->commit(); + $this->unitOfWork->commit(); // Check. self::assertEquals(1, count($userPersister->getInserts())); @@ -123,12 +124,12 @@ public function testCascadedIdentityColumnInsert() { // Setup fake persister and id generator for identity generation //ForumUser - $userPersister = new EntityPersisterMock($this->_emMock, $this->_emMock->getClassMetadata(ForumUser::class)); - $this->_unitOfWork->setEntityPersister(ForumUser::class, $userPersister); + $userPersister = new EntityPersisterMock($this->emMock, $this->emMock->getClassMetadata(ForumUser::class)); + $this->unitOfWork->setEntityPersister(ForumUser::class, $userPersister); $userPersister->setMockIdGeneratorType(GeneratorType::IDENTITY); // ForumAvatar - $avatarPersister = new EntityPersisterMock($this->_emMock, $this->_emMock->getClassMetadata(ForumAvatar::class)); - $this->_unitOfWork->setEntityPersister(ForumAvatar::class, $avatarPersister); + $avatarPersister = new EntityPersisterMock($this->emMock, $this->emMock->getClassMetadata(ForumAvatar::class)); + $this->unitOfWork->setEntityPersister(ForumAvatar::class, $avatarPersister); $avatarPersister->setMockIdGeneratorType(GeneratorType::IDENTITY); // Test @@ -136,9 +137,9 @@ public function testCascadedIdentityColumnInsert() $user->username = 'romanb'; $avatar = new ForumAvatar(); $user->avatar = $avatar; - $this->_unitOfWork->persist($user); // save cascaded to avatar + $this->unitOfWork->persist($user); // save cascaded to avatar - $this->_unitOfWork->commit(); + $this->unitOfWork->commit(); self::assertTrue(is_numeric($user->id)); self::assertTrue(is_numeric($avatar->id)); @@ -154,34 +155,34 @@ public function testCascadedIdentityColumnInsert() public function testChangeTrackingNotify() { - $persister = new EntityPersisterMock($this->_emMock, $this->_emMock->getClassMetadata(NotifyChangedEntity::class)); - $this->_unitOfWork->setEntityPersister(NotifyChangedEntity::class, $persister); - $itemPersister = new EntityPersisterMock($this->_emMock, $this->_emMock->getClassMetadata(NotifyChangedRelatedItem::class)); - $this->_unitOfWork->setEntityPersister(NotifyChangedRelatedItem::class, $itemPersister); + $persister = new EntityPersisterMock($this->emMock, $this->emMock->getClassMetadata(NotifyChangedEntity::class)); + $this->unitOfWork->setEntityPersister(NotifyChangedEntity::class, $persister); + $itemPersister = new EntityPersisterMock($this->emMock, $this->emMock->getClassMetadata(NotifyChangedRelatedItem::class)); + $this->unitOfWork->setEntityPersister(NotifyChangedRelatedItem::class, $itemPersister); $entity = new NotifyChangedEntity; $entity->setData('thedata'); - $this->_unitOfWork->persist($entity); + $this->unitOfWork->persist($entity); - $this->_unitOfWork->commit(); + $this->unitOfWork->commit(); self::assertEquals(1, count($persister->getInserts())); $persister->reset(); - self::assertTrue($this->_unitOfWork->isInIdentityMap($entity)); + self::assertTrue($this->unitOfWork->isInIdentityMap($entity)); $entity->setData('newdata'); $entity->setTransient('newtransientvalue'); - self::assertTrue($this->_unitOfWork->isScheduledForDirtyCheck($entity)); + self::assertTrue($this->unitOfWork->isScheduledForDirtyCheck($entity)); - self::assertEquals(['data' => ['thedata', 'newdata']], $this->_unitOfWork->getEntityChangeSet($entity)); + self::assertEquals(['data' => ['thedata', 'newdata']], $this->unitOfWork->getEntityChangeSet($entity)); $item = new NotifyChangedRelatedItem(); $entity->getItems()->add($item); $item->setOwner($entity); - $this->_unitOfWork->persist($item); + $this->unitOfWork->persist($item); - $this->_unitOfWork->commit(); + $this->unitOfWork->commit(); self::assertEquals(1, count($itemPersister->getInserts())); $persister->reset(); $itemPersister->reset(); @@ -190,7 +191,7 @@ public function testChangeTrackingNotify() $entity->getItems()->removeElement($item); $item->setOwner(null); self::assertTrue($entity->getItems()->isDirty()); - $this->_unitOfWork->commit(); + $this->unitOfWork->commit(); $updates = $itemPersister->getUpdates(); self::assertEquals(1, count($updates)); self::assertTrue($updates[0] === $item); @@ -198,35 +199,35 @@ public function testChangeTrackingNotify() public function testGetEntityStateOnVersionedEntityWithAssignedIdentifier() { - $persister = new EntityPersisterMock($this->_emMock, $this->_emMock->getClassMetadata(VersionedAssignedIdentifierEntity::class)); - $this->_unitOfWork->setEntityPersister(VersionedAssignedIdentifierEntity::class, $persister); + $persister = new EntityPersisterMock($this->emMock, $this->emMock->getClassMetadata(VersionedAssignedIdentifierEntity::class)); + $this->unitOfWork->setEntityPersister(VersionedAssignedIdentifierEntity::class, $persister); $e = new VersionedAssignedIdentifierEntity(); $e->id = 42; - self::assertEquals(UnitOfWork::STATE_NEW, $this->_unitOfWork->getEntityState($e)); + self::assertEquals(UnitOfWork::STATE_NEW, $this->unitOfWork->getEntityState($e)); self::assertFalse($persister->isExistsCalled()); } public function testGetEntityStateWithAssignedIdentity() { - $persister = new EntityPersisterMock($this->_emMock, $this->_emMock->getClassMetadata(CmsPhonenumber::class)); - $this->_unitOfWork->setEntityPersister(CmsPhonenumber::class, $persister); + $persister = new EntityPersisterMock($this->emMock, $this->emMock->getClassMetadata(CmsPhonenumber::class)); + $this->unitOfWork->setEntityPersister(CmsPhonenumber::class, $persister); $ph = new CmsPhonenumber(); $ph->phonenumber = '12345'; - self::assertEquals(UnitOfWork::STATE_NEW, $this->_unitOfWork->getEntityState($ph)); + self::assertEquals(UnitOfWork::STATE_NEW, $this->unitOfWork->getEntityState($ph)); self::assertTrue($persister->isExistsCalled()); $persister->reset(); // if the entity is already managed the exists() check should be skipped - $this->_unitOfWork->registerManaged($ph, ['phonenumber' => '12345'], []); - self::assertEquals(UnitOfWork::STATE_MANAGED, $this->_unitOfWork->getEntityState($ph)); + $this->unitOfWork->registerManaged($ph, ['phonenumber' => '12345'], []); + self::assertEquals(UnitOfWork::STATE_MANAGED, $this->unitOfWork->getEntityState($ph)); self::assertFalse($persister->isExistsCalled()); $ph2 = new CmsPhonenumber(); $ph2->phonenumber = '12345'; - self::assertEquals(UnitOfWork::STATE_DETACHED, $this->_unitOfWork->getEntityState($ph2)); + self::assertEquals(UnitOfWork::STATE_DETACHED, $this->unitOfWork->getEntityState($ph2)); self::assertFalse($persister->isExistsCalled()); } @@ -236,25 +237,25 @@ public function testGetEntityStateWithAssignedIdentity() public function testNoUndefinedIndexNoticeOnScheduleForUpdateWithoutChanges() { // Setup fake persister and id generator - $userPersister = new EntityPersisterMock($this->_emMock, $this->_emMock->getClassMetadata(ForumUser::class)); + $userPersister = new EntityPersisterMock($this->emMock, $this->emMock->getClassMetadata(ForumUser::class)); $userPersister->setMockIdGeneratorType(GeneratorType::IDENTITY); - $this->_unitOfWork->setEntityPersister(ForumUser::class, $userPersister); + $this->unitOfWork->setEntityPersister(ForumUser::class, $userPersister); // Create a test user $user = new ForumUser(); $user->name = 'Jasper'; - $this->_unitOfWork->persist($user); - $this->_unitOfWork->commit(); + $this->unitOfWork->persist($user); + $this->unitOfWork->commit(); // Schedule user for update without changes - $this->_unitOfWork->scheduleForUpdate($user); + $this->unitOfWork->scheduleForUpdate($user); self::assertNotEmpty($this->_unitOfWork->getScheduledEntityUpdates()); // This commit should not raise an E_NOTICE - $this->_unitOfWork->commit(); + $this->unitOfWork->commit(); - self::assertEmpty($this->_unitOfWork->getScheduledEntityUpdates()); + self::assertEmpty($this->unitOfWork->getScheduledEntityUpdates()); } /** @@ -263,7 +264,7 @@ public function testNoUndefinedIndexNoticeOnScheduleForUpdateWithoutChanges() public function testLockWithoutEntityThrowsException() { $this->expectException(\InvalidArgumentException::class); - $this->_unitOfWork->lock(null, null, null); + $this->unitOfWork->lock(null, null, null); } /** @@ -275,11 +276,11 @@ public function testLockWithoutEntityThrowsException() */ public function testRejectsPersistenceOfObjectsWithInvalidAssociationValue($invalidValue) { - $this->_unitOfWork->setEntityPersister( + $this->unitOfWork->setEntityPersister( ForumUser::class, new EntityPersisterMock( - $this->_emMock, - $this->_emMock->getClassMetadata(ForumUser::class) + $this->emMock, + $this->emMock->getClassMetadata(ForumUser::class) ) ); @@ -289,7 +290,7 @@ public function testRejectsPersistenceOfObjectsWithInvalidAssociationValue($inva $this->expectException(\Doctrine\ORM\ORMInvalidArgumentException::class); - $this->_unitOfWork->persist($user); + $this->unitOfWork->persist($user); } /** @@ -301,23 +302,23 @@ public function testRejectsPersistenceOfObjectsWithInvalidAssociationValue($inva */ public function testRejectsChangeSetComputationForObjectsWithInvalidAssociationValue($invalidValue) { - $metadata = $this->_emMock->getClassMetadata(ForumUser::class); + $metadata = $this->emMock->getClassMetadata(ForumUser::class); - $this->_unitOfWork->setEntityPersister( + $this->unitOfWork->setEntityPersister( ForumUser::class, - new EntityPersisterMock($this->_emMock, $metadata) + new EntityPersisterMock($this->emMock, $metadata) ); $user = new ForumUser(); - $this->_unitOfWork->persist($user); + $this->unitOfWork->persist($user); $user->username = 'John'; $user->avatar = $invalidValue; $this->expectException(\Doctrine\ORM\ORMInvalidArgumentException::class); - $this->_unitOfWork->computeChangeSet($metadata, $user); + $this->unitOfWork->computeChangeSet($metadata, $user); } /** @@ -329,14 +330,14 @@ public function testRemovedAndRePersistedEntitiesAreInTheIdentityMapAndAreNotGar $entity = new ForumUser(); $entity->id = 123; - $this->_unitOfWork->registerManaged($entity, ['id' => 123], []); - self::assertTrue($this->_unitOfWork->isInIdentityMap($entity)); + $this->unitOfWork->registerManaged($entity, ['id' => 123], []); + self::assertTrue($this->unitOfWork->isInIdentityMap($entity)); - $this->_unitOfWork->remove($entity); - self::assertFalse($this->_unitOfWork->isInIdentityMap($entity)); + $this->unitOfWork->remove($entity); + self::assertFalse($this->unitOfWork->isInIdentityMap($entity)); - $this->_unitOfWork->persist($entity); - self::assertTrue($this->_unitOfWork->isInIdentityMap($entity)); + $this->unitOfWork->persist($entity); + self::assertTrue($this->unitOfWork->isInIdentityMap($entity)); } /** @@ -348,17 +349,17 @@ public function testPersistedEntityAndClearManager() $entity1 = new City(123, 'London'); $entity2 = new Country(456, 'United Kingdom'); - $this->_unitOfWork->persist($entity1); - $this->assertTrue($this->_unitOfWork->isInIdentityMap($entity1)); + $this->unitOfWork->persist($entity1); + $this->assertTrue($this->unitOfWork->isInIdentityMap($entity1)); - $this->_unitOfWork->persist($entity2); - $this->assertTrue($this->_unitOfWork->isInIdentityMap($entity2)); + $this->unitOfWork->persist($entity2); + $this->assertTrue($this->unitOfWork->isInIdentityMap($entity2)); - $this->_unitOfWork->clear(Country::class); - $this->assertTrue($this->_unitOfWork->isInIdentityMap($entity1)); - $this->assertFalse($this->_unitOfWork->isInIdentityMap($entity2)); - $this->assertTrue($this->_unitOfWork->isScheduledForInsert($entity1)); - $this->assertFalse($this->_unitOfWork->isScheduledForInsert($entity2)); + $this->unitOfWork->clear(Country::class); + $this->assertTrue($this->unitOfWork->isInIdentityMap($entity1)); + $this->assertFalse($this->unitOfWork->isInIdentityMap($entity2)); + $this->assertTrue($this->unitOfWork->isScheduledForInsert($entity1)); + $this->assertFalse($this->unitOfWork->isScheduledForInsert($entity2)); } /** @@ -388,10 +389,10 @@ public function invalidAssociationValuesDataProvider() */ public function testAddToIdentityMapValidIdentifiers($entity, $idHash) { - $this->_unitOfWork->persist($entity); - $this->_unitOfWork->addToIdentityMap($entity); + $this->unitOfWork->persist($entity); + $this->unitOfWork->addToIdentityMap($entity); - self::assertSame($entity, $this->_unitOfWork->getByIdHash($idHash, get_class($entity))); + self::assertSame($entity, $this->unitOfWork->getByIdHash($idHash, get_class($entity))); } public function entitiesWithValidIdentifiersProvider() @@ -436,7 +437,7 @@ public function testRegisteringAManagedInstanceRequiresANonEmptyIdentifier() { $this->expectException(ORMInvalidArgumentException::class); - $this->_unitOfWork->registerManaged(new EntityWithBooleanIdentifier(), [], []); + $this->unitOfWork->registerManaged(new EntityWithBooleanIdentifier(), [], []); } /** @@ -451,7 +452,7 @@ public function testAddToIdentityMapInvalidIdentifiers($entity, array $identifie { $this->expectException(ORMInvalidArgumentException::class); - $this->_unitOfWork->registerManaged($entity, $identifier, []); + $this->unitOfWork->registerManaged($entity, $identifier, []); } @@ -481,10 +482,10 @@ public function testObjectHashesOfMergedEntitiesAreNotUsedInOriginalEntityDataMa { $user = new CmsUser(); $user->name = 'ocramius'; - $mergedUser = $this->_unitOfWork->merge($user); + $mergedUser = $this->unitOfWork->merge($user); - self::assertSame([], $this->_unitOfWork->getOriginalEntityData($user), 'No original data was stored'); - self::assertSame([], $this->_unitOfWork->getOriginalEntityData($mergedUser), 'No original data was stored'); + self::assertSame([], $this->unitOfWork->getOriginalEntityData($user), 'No original data was stored'); + self::assertSame([], $this->unitOfWork->getOriginalEntityData($mergedUser), 'No original data was stored'); $user = null; @@ -496,9 +497,9 @@ public function testObjectHashesOfMergedEntitiesAreNotUsedInOriginalEntityDataMa $newUser = new CmsUser(); $newUser->name = 'ocramius'; - $this->_unitOfWork->persist($newUser); + $this->unitOfWork->persist($newUser); - self::assertSame([], $this->_unitOfWork->getOriginalEntityData($newUser), 'No original data was stored'); + self::assertSame([], $this->unitOfWork->getOriginalEntityData($newUser), 'No original data was stored'); } /** @@ -589,7 +590,7 @@ public function testMergeWithExistingEntityWillNotPersistItNorTriggerPrePersistL */ class NotifyChangedEntity implements NotifyPropertyChanged { - private $_listeners = []; + private $listeners = []; /** * @Id * @Column(type="integer") @@ -620,7 +621,7 @@ public function getItems() { public function setTransient($value) { if ($value != $this->transient) { - $this->_onPropertyChanged('transient', $this->transient, $value); + $this->onPropertyChanged('transient', $this->transient, $value); $this->transient = $value; } } @@ -631,19 +632,19 @@ public function getData() { public function setData($data) { if ($data != $this->data) { - $this->_onPropertyChanged('data', $this->data, $data); + $this->onPropertyChanged('data', $this->data, $data); $this->data = $data; } } public function addPropertyChangedListener(PropertyChangedListener $listener) { - $this->_listeners[] = $listener; + $this->listeners[] = $listener; } - protected function _onPropertyChanged($propName, $oldValue, $newValue) { - if ($this->_listeners) { - foreach ($this->_listeners as $listener) { + protected function onPropertyChanged($propName, $oldValue, $newValue) { + if ($this->listeners) { + foreach ($this->listeners as $listener) { $listener->propertyChanged($this, $propName, $oldValue, $newValue); } } diff --git a/tests/Doctrine/Tests/ORM/Utility/IdentifierFlattenerTest.php b/tests/Doctrine/Tests/ORM/Utility/IdentifierFlattenerTest.php index 35cf244a339..2aca0df48bc 100644 --- a/tests/Doctrine/Tests/ORM/Utility/IdentifierFlattenerTest.php +++ b/tests/Doctrine/Tests/ORM/Utility/IdentifierFlattenerTest.php @@ -30,17 +30,17 @@ protected function setUp() parent::setUp(); $this->identifierFlattener = new IdentifierFlattener( - $this->_em->getUnitOfWork(), - $this->_em->getMetadataFactory() + $this->em->getUnitOfWork(), + $this->em->getMetadataFactory() ); try { - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(FirstRelatedEntity::class), - $this->_em->getClassMetadata(SecondRelatedEntity::class), - $this->_em->getClassMetadata(Flight::class), - $this->_em->getClassMetadata(City::class) + $this->em->getClassMetadata(FirstRelatedEntity::class), + $this->em->getClassMetadata(SecondRelatedEntity::class), + $this->em->getClassMetadata(Flight::class), + $this->em->getClassMetadata(City::class) ] ); } catch (ORMException $e) { @@ -55,20 +55,20 @@ public function testFlattenIdentifierWithOneToOneId() $secondRelatedEntity = new SecondRelatedEntity(); $secondRelatedEntity->name = 'Bob'; - $this->_em->persist($secondRelatedEntity); - $this->_em->flush(); + $this->em->persist($secondRelatedEntity); + $this->em->flush(); $firstRelatedEntity = new FirstRelatedEntity(); $firstRelatedEntity->name = 'Fred'; $firstRelatedEntity->secondEntity = $secondRelatedEntity; - $this->_em->persist($firstRelatedEntity); - $this->_em->flush(); + $this->em->persist($firstRelatedEntity); + $this->em->flush(); - $firstEntity = $this->_em->getRepository(FirstRelatedEntity::class) + $firstEntity = $this->em->getRepository(FirstRelatedEntity::class) ->findOneBy(['name' => 'Fred']); - $class = $this->_em->getClassMetadata(FirstRelatedEntity::class); + $class = $this->em->getClassMetadata(FirstRelatedEntity::class); $id = $class->getIdentifierValues($firstEntity); @@ -99,16 +99,16 @@ public function testFlattenIdentifierWithMutlipleIds() $leeds = new City('Leeds'); $london = new City('London'); - $this->_em->persist($leeds); - $this->_em->persist($london); - $this->_em->flush(); + $this->em->persist($leeds); + $this->em->persist($london); + $this->em->flush(); $flight = new Flight($leeds, $london); - $this->_em->persist($flight); - $this->_em->flush(); + $this->em->persist($flight); + $this->em->flush(); - $class = $this->_em->getClassMetadata(Flight::class); + $class = $this->em->getClassMetadata(Flight::class); $id = $class->getIdentifierValues($flight); self::assertCount(2, $id); diff --git a/tests/Doctrine/Tests/OrmFunctionalTestCase.php b/tests/Doctrine/Tests/OrmFunctionalTestCase.php index 4a32b27e184..e25484fa991 100644 --- a/tests/Doctrine/Tests/OrmFunctionalTestCase.php +++ b/tests/Doctrine/Tests/OrmFunctionalTestCase.php @@ -31,43 +31,43 @@ abstract class OrmFunctionalTestCase extends OrmTestCase * * @var \Doctrine\Common\Cache\Cache|null */ - private static $_metadataCacheImpl = null; + private static $metadataCacheImpl = null; /** * The query cache shared between all functional tests. * * @var \Doctrine\Common\Cache\Cache|null */ - private static $_queryCacheImpl = null; + private static $queryCacheImpl = null; /** * Shared connection when a TestCase is run alone (outside of its functional suite). * * @var \Doctrine\DBAL\Connection|null */ - protected static $_sharedConn; + protected static $sharedConn; /** * @var \Doctrine\ORM\EntityManager */ - protected $_em; + protected $em; /** * @var \Doctrine\ORM\Tools\SchemaTool */ - protected $_schemaTool; + protected $schemaTool; /** * @var \Doctrine\DBAL\Logging\DebugStack */ - protected $_sqlLoggerStack; + protected $sqlLoggerStack; /** * The names of the model sets used in this testcase. * * @var array */ - protected $_usedModelSets = []; + protected $usedModelSets = []; /** * To be configured by the test that uses result set cache @@ -81,21 +81,21 @@ abstract class OrmFunctionalTestCase extends OrmTestCase * * @var array */ - protected static $_tablesCreated = []; + protected static $tablesCreated = []; /** * Array of entity class name to their tables that were created. * * @var array */ - protected static $_entityTablesCreated = []; + protected static $entityTablesCreated = []; /** * List of model sets and their classes. * * @var array */ - protected static $_modelSets = [ + protected static $modelSets = [ 'cms' => [ Models\CMS\CmsUser::class, Models\CMS\CmsPhonenumber::class, @@ -321,7 +321,7 @@ abstract class OrmFunctionalTestCase extends OrmTestCase */ protected function useModelSet($setName) { - $this->_usedModelSets[$setName] = true; + $this->usedModelSets[$setName] = true; } /** @@ -331,7 +331,7 @@ protected function useModelSet($setName) */ protected function tearDown() { - $conn = static::$_sharedConn; + $conn = static::$sharedConn; // In case test is skipped, tearDown is called, but no setup may have run if ( ! $conn) { @@ -340,9 +340,9 @@ protected function tearDown() $platform = $conn->getDatabasePlatform(); - $this->_sqlLoggerStack->enabled = false; + $this->sqlLoggerStack->enabled = false; - if (isset($this->_usedModelSets['cms'])) { + if (isset($this->usedModelSets['cms'])) { $conn->executeUpdate('DELETE FROM cms_users_groups'); $conn->executeUpdate('DELETE FROM cms_groups'); $conn->executeUpdate('DELETE FROM cms_users_tags'); @@ -355,7 +355,7 @@ protected function tearDown() $conn->executeUpdate('DELETE FROM cms_emails'); } - if (isset($this->_usedModelSets['ecommerce'])) { + if (isset($this->usedModelSets['ecommerce'])) { $conn->executeUpdate('DELETE FROM ecommerce_carts_products'); $conn->executeUpdate('DELETE FROM ecommerce_products_categories'); $conn->executeUpdate('DELETE FROM ecommerce_products_related'); @@ -368,7 +368,7 @@ protected function tearDown() $conn->executeUpdate('DELETE FROM ecommerce_categories'); } - if (isset($this->_usedModelSets['company'])) { + if (isset($this->usedModelSets['company'])) { $conn->executeUpdate('DELETE FROM company_contract_employees'); $conn->executeUpdate('DELETE FROM company_contract_managers'); $conn->executeUpdate('DELETE FROM company_contracts'); @@ -384,14 +384,14 @@ protected function tearDown() $conn->executeUpdate('DELETE FROM company_organizations'); } - if (isset($this->_usedModelSets['generic'])) { + if (isset($this->usedModelSets['generic'])) { $conn->executeUpdate('DELETE FROM boolean_model'); $conn->executeUpdate('DELETE FROM date_time_model'); $conn->executeUpdate('DELETE FROM decimal_model'); $conn->executeUpdate('DELETE FROM serialize_model'); } - if (isset($this->_usedModelSets['routing'])) { + if (isset($this->usedModelSets['routing'])) { $conn->executeUpdate('DELETE FROM RoutingRouteLegs'); $conn->executeUpdate('DELETE FROM RoutingRouteBooking'); $conn->executeUpdate('DELETE FROM RoutingRoute'); @@ -399,20 +399,20 @@ protected function tearDown() $conn->executeUpdate('DELETE FROM RoutingLocation'); } - if(isset($this->_usedModelSets['navigation'])) { + if(isset($this->usedModelSets['navigation'])) { $conn->executeUpdate('DELETE FROM navigation_tour_pois'); $conn->executeUpdate('DELETE FROM navigation_photos'); $conn->executeUpdate('DELETE FROM navigation_pois'); $conn->executeUpdate('DELETE FROM navigation_tours'); $conn->executeUpdate('DELETE FROM navigation_countries'); } - if (isset($this->_usedModelSets['directorytree'])) { + if (isset($this->usedModelSets['directorytree'])) { $conn->executeUpdate('DELETE FROM ' . $platform->quoteIdentifier("file")); // MySQL doesn't know deferred deletions therefore only executing the second query gives errors. $conn->executeUpdate('DELETE FROM Directory WHERE parentDirectory_id IS NOT NULL'); $conn->executeUpdate('DELETE FROM Directory'); } - if (isset($this->_usedModelSets['ddc117'])) { + if (isset($this->usedModelSets['ddc117'])) { $conn->executeUpdate('DELETE FROM ddc117editor_ddc117translation'); $conn->executeUpdate('DELETE FROM DDC117Editor'); $conn->executeUpdate('DELETE FROM DDC117ApproveChanges'); @@ -422,13 +422,13 @@ protected function tearDown() $conn->executeUpdate('DELETE FROM DDC117Translation'); $conn->executeUpdate('DELETE FROM DDC117Article'); } - if (isset($this->_usedModelSets['stockexchange'])) { + if (isset($this->usedModelSets['stockexchange'])) { $conn->executeUpdate('DELETE FROM exchange_bonds_stocks'); $conn->executeUpdate('DELETE FROM exchange_bonds'); $conn->executeUpdate('DELETE FROM exchange_stocks'); $conn->executeUpdate('DELETE FROM exchange_markets'); } - if (isset($this->_usedModelSets['legacy'])) { + if (isset($this->usedModelSets['legacy'])) { $conn->executeUpdate('DELETE FROM legacy_users_cars'); $conn->executeUpdate('DELETE FROM legacy_users_reference'); $conn->executeUpdate('DELETE FROM legacy_articles'); @@ -436,33 +436,33 @@ protected function tearDown() $conn->executeUpdate('DELETE FROM legacy_users'); } - if (isset($this->_usedModelSets['customtype'])) { + if (isset($this->usedModelSets['customtype'])) { $conn->executeUpdate('DELETE FROM customtype_parent_friends'); $conn->executeUpdate('DELETE FROM customtype_parents'); $conn->executeUpdate('DELETE FROM customtype_children'); $conn->executeUpdate('DELETE FROM customtype_uppercases'); } - if (isset($this->_usedModelSets['compositekeyinheritance'])) { + if (isset($this->usedModelSets['compositekeyinheritance'])) { $conn->executeUpdate('DELETE FROM JoinedChildClass'); $conn->executeUpdate('DELETE FROM JoinedRootClass'); $conn->executeUpdate('DELETE FROM SingleRootClass'); } - if (isset($this->_usedModelSets['taxi'])) { + if (isset($this->usedModelSets['taxi'])) { $conn->executeUpdate('DELETE FROM taxi_paid_ride'); $conn->executeUpdate('DELETE FROM taxi_ride'); $conn->executeUpdate('DELETE FROM taxi_car'); $conn->executeUpdate('DELETE FROM taxi_driver'); } - if (isset($this->_usedModelSets['tweet'])) { + if (isset($this->usedModelSets['tweet'])) { $conn->executeUpdate('DELETE FROM tweet_tweet'); $conn->executeUpdate('DELETE FROM tweet_user_list'); $conn->executeUpdate('DELETE FROM tweet_user'); } - if (isset($this->_usedModelSets['cache'])) { + if (isset($this->usedModelSets['cache'])) { $conn->executeUpdate('DELETE FROM cache_attraction_location_info'); $conn->executeUpdate('DELETE FROM cache_attraction_contact_info'); $conn->executeUpdate('DELETE FROM cache_attraction_info'); @@ -483,12 +483,12 @@ protected function tearDown() $conn->executeUpdate('DELETE FROM cache_client'); } - if (isset($this->_usedModelSets['ddc3346'])) { + if (isset($this->usedModelSets['ddc3346'])) { $conn->executeUpdate('DELETE FROM ddc3346_articles'); $conn->executeUpdate('DELETE FROM ddc3346_users'); } - if (isset($this->_usedModelSets['quote'])) { + if (isset($this->usedModelSets['quote'])) { $conn->executeUpdate( sprintf( 'UPDATE %s SET %s = NULL', @@ -498,105 +498,105 @@ protected function tearDown() ); $conn->executeUpdate('DELETE FROM ' . $platform->quoteIdentifier('quote-users-groups')); - $conn->executeUpdate('DELETE FROM ' . $platform->quoteIdentifier('quote-group')); - $conn->executeUpdate('DELETE FROM ' . $platform->quoteIdentifier('quote-phone')); - $conn->executeUpdate('DELETE FROM ' . $platform->quoteIdentifier('quote-user')); - $conn->executeUpdate('DELETE FROM ' . $platform->quoteIdentifier('quote-address')); + $conn->executeUpdate('DELETE FROM ' . $platform->quoteIdentifier("quote-group")); + $conn->executeUpdate('DELETE FROM ' . $platform->quoteIdentifier("quote-phone")); + $conn->executeUpdate('DELETE FROM ' . $platform->quoteIdentifier("quote-user")); + $conn->executeUpdate('DELETE FROM ' . $platform->quoteIdentifier("quote-address")); $conn->executeUpdate('DELETE FROM ' . $platform->quoteIdentifier('quote-city')); } - if (isset($this->_usedModelSets['vct_onetoone'])) { + if (isset($this->usedModelSets['vct_onetoone'])) { $conn->executeUpdate('DELETE FROM vct_owning_onetoone'); $conn->executeUpdate('DELETE FROM vct_inversed_onetoone'); } - if (isset($this->_usedModelSets['vct_onetoone_compositeid'])) { + if (isset($this->usedModelSets['vct_onetoone_compositeid'])) { $conn->executeUpdate('DELETE FROM vct_owning_onetoone_compositeid'); $conn->executeUpdate('DELETE FROM vct_inversed_onetoone_compositeid'); } - if (isset($this->_usedModelSets['vct_onetoone_compositeid_foreignkey'])) { + if (isset($this->usedModelSets['vct_onetoone_compositeid_foreignkey'])) { $conn->executeUpdate('DELETE FROM vct_owning_onetoone_compositeid_foreignkey'); $conn->executeUpdate('DELETE FROM vct_inversed_onetoone_compositeid_foreignkey'); $conn->executeUpdate('DELETE FROM vct_auxiliary'); } - if (isset($this->_usedModelSets['vct_onetomany'])) { + if (isset($this->usedModelSets['vct_onetomany'])) { $conn->executeUpdate('DELETE FROM vct_owning_manytoone'); $conn->executeUpdate('DELETE FROM vct_inversed_onetomany'); } - if (isset($this->_usedModelSets['vct_onetomany_compositeid'])) { + if (isset($this->usedModelSets['vct_onetomany_compositeid'])) { $conn->executeUpdate('DELETE FROM vct_owning_manytoone_compositeid'); $conn->executeUpdate('DELETE FROM vct_inversed_onetomany_compositeid'); } - if (isset($this->_usedModelSets['vct_onetomany_compositeid_foreignkey'])) { + if (isset($this->usedModelSets['vct_onetomany_compositeid_foreignkey'])) { $conn->executeUpdate('DELETE FROM vct_owning_manytoone_compositeid_foreignkey'); $conn->executeUpdate('DELETE FROM vct_inversed_onetomany_compositeid_foreignkey'); $conn->executeUpdate('DELETE FROM vct_auxiliary'); } - if (isset($this->_usedModelSets['vct_onetomany_extralazy'])) { + if (isset($this->usedModelSets['vct_onetomany_extralazy'])) { $conn->executeUpdate('DELETE FROM vct_owning_manytoone_extralazy'); $conn->executeUpdate('DELETE FROM vct_inversed_onetomany_extralazy'); } - if (isset($this->_usedModelSets['vct_manytomany'])) { + if (isset($this->usedModelSets['vct_manytomany'])) { $conn->executeUpdate('DELETE FROM vct_xref_manytomany'); $conn->executeUpdate('DELETE FROM vct_owning_manytomany'); $conn->executeUpdate('DELETE FROM vct_inversed_manytomany'); } - if (isset($this->_usedModelSets['vct_manytomany_compositeid'])) { + if (isset($this->usedModelSets['vct_manytomany_compositeid'])) { $conn->executeUpdate('DELETE FROM vct_xref_manytomany_compositeid'); $conn->executeUpdate('DELETE FROM vct_owning_manytomany_compositeid'); $conn->executeUpdate('DELETE FROM vct_inversed_manytomany_compositeid'); } - if (isset($this->_usedModelSets['vct_manytomany_compositeid_foreignkey'])) { + if (isset($this->usedModelSets['vct_manytomany_compositeid_foreignkey'])) { $conn->executeUpdate('DELETE FROM vct_xref_manytomany_compositeid_foreignkey'); $conn->executeUpdate('DELETE FROM vct_owning_manytomany_compositeid_foreignkey'); $conn->executeUpdate('DELETE FROM vct_inversed_manytomany_compositeid_foreignkey'); $conn->executeUpdate('DELETE FROM vct_auxiliary'); } - if (isset($this->_usedModelSets['vct_manytomany_extralazy'])) { + if (isset($this->usedModelSets['vct_manytomany_extralazy'])) { $conn->executeUpdate('DELETE FROM vct_xref_manytomany_extralazy'); $conn->executeUpdate('DELETE FROM vct_owning_manytomany_extralazy'); $conn->executeUpdate('DELETE FROM vct_inversed_manytomany_extralazy'); } - if (isset($this->_usedModelSets['geonames'])) { + if (isset($this->usedModelSets['geonames'])) { $conn->executeUpdate('DELETE FROM geonames_admin1_alternate_name'); $conn->executeUpdate('DELETE FROM geonames_admin1'); $conn->executeUpdate('DELETE FROM geonames_city'); $conn->executeUpdate('DELETE FROM geonames_country'); } - if (isset($this->_usedModelSets['custom_id_object_type'])) { + if (isset($this->usedModelSets['custom_id_object_type'])) { $conn->executeUpdate('DELETE FROM custom_id_type_child'); $conn->executeUpdate('DELETE FROM custom_id_type_parent'); } - if (isset($this->_usedModelSets['pagination'])) { + if (isset($this->usedModelSets['pagination'])) { $conn->executeUpdate('DELETE FROM pagination_logo'); $conn->executeUpdate('DELETE FROM pagination_department'); $conn->executeUpdate('DELETE FROM pagination_company'); $conn->executeUpdate('DELETE FROM pagination_user'); } - if (isset($this->_usedModelSets['versioned_many_to_one'])) { + if (isset($this->usedModelSets['versioned_many_to_one'])) { $conn->executeUpdate('DELETE FROM versioned_many_to_one_article'); $conn->executeUpdate('DELETE FROM versioned_many_to_one_category'); } - if (isset($this->_usedModelSets['issue5989'])) { + if (isset($this->usedModelSets['issue5989'])) { $conn->executeUpdate('DELETE FROM issue5989_persons'); $conn->executeUpdate('DELETE FROM issue5989_employees'); $conn->executeUpdate('DELETE FROM issue5989_managers'); } - $this->_em->clear(); + $this->em->clear(); } /** @@ -608,20 +608,21 @@ protected function tearDown() */ protected function setUpEntitySchema(array $classNames) { - if ($this->_em === null) { + if ($this->em === null) { throw new \RuntimeException("EntityManager not set, you have to call parent::setUp() before invoking this method."); } $classes = []; + foreach ($classNames as $className) { - if ( ! isset(static::$_entityTablesCreated[$className])) { - static::$_entityTablesCreated[$className] = true; - $classes[] = $this->_em->getClassMetadata($className); + if ( ! isset(static::$entityTablesCreated[$className])) { + static::$entityTablesCreated[$className] = true; + $classes[] = $this->em->getClassMetadata($className); } } if ($classes) { - $this->_schemaTool->createSchema($classes); + $this->schemaTool->createSchema($classes); } } @@ -635,40 +636,40 @@ protected function setUp() { $this->setUpDBALTypes(); - if ( ! isset(static::$_sharedConn)) { - static::$_sharedConn = TestUtil::getConnection(); + if (! isset(static::$sharedConn)) { + static::$sharedConn = TestUtil::getConnection(); } if (isset($GLOBALS['DOCTRINE_MARK_SQL_LOGS'])) { - if (in_array(static::$_sharedConn->getDatabasePlatform()->getName(), ["mysql", "postgresql"])) { - static::$_sharedConn->executeQuery('SELECT 1 /*' . get_class($this) . '*/'); - } else if (static::$_sharedConn->getDatabasePlatform()->getName() == "oracle") { - static::$_sharedConn->executeQuery('SELECT 1 /*' . get_class($this) . '*/ FROM dual'); + if (in_array(static::$sharedConn->getDatabasePlatform()->getName(), ["mysql", "postgresql"])) { + static::$sharedConn->executeQuery('SELECT 1 /*' . get_class($this) . '*/'); + } else if (static::$sharedConn->getDatabasePlatform()->getName() == "oracle") { + static::$sharedConn->executeQuery('SELECT 1 /*' . get_class($this) . '*/ FROM dual'); } } - if ( ! $this->_em) { - $this->_em = $this->_getEntityManager(); - $this->_schemaTool = new SchemaTool($this->_em); + if ( ! $this->em) { + $this->em = $this->getEntityManager(); + $this->schemaTool = new SchemaTool($this->em); } $classes = []; - foreach ($this->_usedModelSets as $setName => $bool) { - if ( ! isset(static::$_tablesCreated[$setName])) { - foreach (static::$_modelSets[$setName] as $className) { - $classes[] = $this->_em->getClassMetadata($className); + foreach ($this->usedModelSets as $setName => $bool) { + if (! isset(static::$tablesCreated[$setName])) { + foreach (static::$modelSets[$setName] as $className) { + $classes[] = $this->em->getClassMetadata($className); } - static::$_tablesCreated[$setName] = true; + static::$tablesCreated[$setName] = true; } } if ($classes) { - $this->_schemaTool->createSchema($classes); + $this->schemaTool->createSchema($classes); } - $this->_sqlLoggerStack->enabled = true; + $this->sqlLoggerStack->enabled = true; } /** @@ -678,31 +679,32 @@ protected function setUp() * * @throws \Doctrine\ORM\ORMException */ - protected function _getEntityManager(Connection $connection = null) { + protected function getEntityManager(Connection $connection = null) + { // NOTE: Functional tests use their own shared metadata cache, because // the actual database platform used during execution has effect on some // metadata mapping behaviors (like the choice of the ID generation). - if (is_null(self::$_metadataCacheImpl)) { + if (is_null(self::$metadataCacheImpl)) { if (isset($GLOBALS['DOCTRINE_CACHE_IMPL'])) { - self::$_metadataCacheImpl = new $GLOBALS['DOCTRINE_CACHE_IMPL']; + self::$metadataCacheImpl = new $GLOBALS['DOCTRINE_CACHE_IMPL']; } else { - self::$_metadataCacheImpl = new ArrayCache(); + self::$metadataCacheImpl = new ArrayCache(); } } - if (is_null(self::$_queryCacheImpl)) { - self::$_queryCacheImpl = new ArrayCache(); + if (is_null(self::$queryCacheImpl)) { + self::$queryCacheImpl = new ArrayCache(); } - $this->_sqlLoggerStack = new DebugStack(); - $this->_sqlLoggerStack->enabled = false; + $this->sqlLoggerStack = new DebugStack(); + $this->sqlLoggerStack->enabled = false; //FIXME: two different configs! $conn and the created entity manager have // different configs. - $config = new Configuration(); $config = new \Doctrine\ORM\Configuration(); - $config->setMetadataCacheImpl(self::$_metadataCacheImpl); - $config->setQueryCacheImpl(self::$_queryCacheImpl); + + $config->setMetadataCacheImpl(self::$metadataCacheImpl); + $config->setQueryCacheImpl(self::$queryCacheImpl); $config->setProxyDir(__DIR__ . '/Proxies'); $config->setProxyNamespace('Doctrine\Tests\Proxies'); @@ -742,11 +744,13 @@ protected function _getEntityManager(Connection $connection = null) { ) ); - $conn = $connection ?: static::$_sharedConn; - $conn->getConfiguration()->setSQLLogger($this->_sqlLoggerStack); + $conn = $connection ?: static::$sharedConn; + + $conn->getConfiguration()->setSQLLogger($this->sqlLoggerStack); // get rid of more global state $evm = $conn->getEventManager(); + foreach ($evm->getListeners() AS $event => $listeners) { foreach ($listeners AS $listener) { $evm->removeEventListener([$event], $listener); @@ -784,9 +788,9 @@ protected function onNotSuccessfulTest(\Throwable $e) throw $e; } - if(isset($this->_sqlLoggerStack->queries) && count($this->_sqlLoggerStack->queries)) { + if(isset($this->sqlLoggerStack->queries) && count($this->sqlLoggerStack->queries)) { $queries = ""; - $last25queries = array_slice(array_reverse($this->_sqlLoggerStack->queries, true), 0, 25, true); + $last25queries = array_slice(array_reverse($this->sqlLoggerStack->queries, true), 0, 25, true); foreach ($last25queries as $i => $query) { $params = array_map(function($p) { if (is_object($p)) return get_class($p); else return var_export($p, true); }, $query['params'] ?: [] ); @@ -829,7 +833,7 @@ public static function assertSQLEquals($expectedSql, $actualSql) */ protected function getCurrentQueryCount() { - return count($this->_sqlLoggerStack->queries); + return count($this->sqlLoggerStack->queries); } /** diff --git a/tests/Doctrine/Tests/OrmTestCase.php b/tests/Doctrine/Tests/OrmTestCase.php index 4b767ab5f00..987909172f6 100644 --- a/tests/Doctrine/Tests/OrmTestCase.php +++ b/tests/Doctrine/Tests/OrmTestCase.php @@ -22,14 +22,14 @@ abstract class OrmTestCase extends DoctrineTestCase * * @var \Doctrine\Common\Cache\Cache|null */ - private static $_metadataCacheImpl = null; + private static $metadataCacheImpl = null; /** * The query cache that is shared between all ORM tests (except functional tests). * * @var \Doctrine\Common\Cache\Cache|null */ - private static $_queryCacheImpl = null; + private static $queryCacheImpl = null; /** * @var bool @@ -116,7 +116,7 @@ protected function createAnnotationDriver($paths = [], $alias = null) * * @return \Doctrine\ORM\EntityManager */ - protected function _getTestEntityManager($conn = null, $conf = null, $eventManager = null, $withSharedMetadata = true) + protected function getTestEntityManager($conn = null, $conf = null, $eventManager = null, $withSharedMetadata = true) { $metadataCache = $withSharedMetadata ? self::getSharedMetadataCacheImpl() @@ -131,8 +131,10 @@ protected function _getTestEntityManager($conn = null, $conf = null, $eventManag $config->setProxyNamespace('Doctrine\Tests\Proxies'); $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver( [ - realpath(__DIR__ . '/Models/Cache') - ], true)); + realpath(__DIR__ . '/Models/Cache') + ], + true + )); if ($this->isSecondLevelCacheEnabled) { @@ -174,11 +176,11 @@ protected function enableSecondLevelCache($log = true) */ private static function getSharedMetadataCacheImpl() { - if (self::$_metadataCacheImpl === null) { - self::$_metadataCacheImpl = new ArrayCache(); + if (self::$metadataCacheImpl === null) { + self::$metadataCacheImpl = new ArrayCache(); } - return self::$_metadataCacheImpl; + return self::$metadataCacheImpl; } /** @@ -186,11 +188,11 @@ private static function getSharedMetadataCacheImpl() */ private static function getSharedQueryCacheImpl() { - if (self::$_queryCacheImpl === null) { - self::$_queryCacheImpl = new ArrayCache(); + if (self::$queryCacheImpl === null) { + self::$queryCacheImpl = new ArrayCache(); } - return self::$_queryCacheImpl; + return self::$queryCacheImpl; } /** From d5c6f75b8de35527ff4786df672b6af346b46634 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 9 Jan 2017 23:12:49 -0200 Subject: [PATCH 094/275] Fixes #5855. Removed ability to EntityManager::clear($entityName), clear($entityClass), clear($proxyClass), clear($rootOfInheritance) --- lib/Doctrine/ORM/EntityManager.php | 13 +--- lib/Doctrine/ORM/Event/OnClearEventArgs.php | 31 +------- .../ORM/ORMInvalidArgumentException.php | 12 --- lib/Doctrine/ORM/UnitOfWork.php | 76 +++++-------------- .../Doctrine/Tests/ORM/EntityManagerTest.php | 42 +--------- .../ORM/Functional/BasicFunctionalTest.php | 8 +- .../ORM/ORMInvalidArgumentExceptionTest.php | 61 --------------- tests/Doctrine/Tests/ORM/UnitOfWorkTest.php | 8 +- 8 files changed, 31 insertions(+), 220 deletions(-) delete mode 100644 tests/Doctrine/Tests/ORM/ORMInvalidArgumentExceptionTest.php diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 25fa34a66c7..501288c2119 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -575,25 +575,16 @@ public function getPartialReference($entityName, $id) * Clears the EntityManager. All entities that are currently managed * by this EntityManager become detached. * - * @param string|null $entityName if given, only entities of this type will get detached + * @param null $entityName Unused. @todo Remove from ObjectManager. * * @return void * - * @throws ORMInvalidArgumentException if a non-null non-string value is given * @throws \Doctrine\Common\Persistence\Mapping\MappingException if a $entityName is given, but that entity is not * found in the mappings */ public function clear($entityName = null) { - if (null !== $entityName && ! is_string($entityName)) { - throw ORMInvalidArgumentException::invalidEntityName($entityName); - } - - $this->unitOfWork->clear( - null === $entityName - ? null - : $this->metadataFactory->getMetadataFor($entityName)->getName() - ); + $this->unitOfWork->clear(null); } /** diff --git a/lib/Doctrine/ORM/Event/OnClearEventArgs.php b/lib/Doctrine/ORM/Event/OnClearEventArgs.php index dd827c72568..d5ec22c171e 100644 --- a/lib/Doctrine/ORM/Event/OnClearEventArgs.php +++ b/lib/Doctrine/ORM/Event/OnClearEventArgs.php @@ -37,21 +37,14 @@ class OnClearEventArgs extends \Doctrine\Common\EventArgs */ private $em; - /** - * @var string - */ - private $entityClass; - /** * Constructor. * * @param EntityManagerInterface $em - * @param string|null $entityClass Optional entity class. */ - public function __construct(EntityManagerInterface $em, $entityClass = null) + public function __construct(EntityManagerInterface $em) { - $this->em = $em; - $this->entityClass = $entityClass; + $this->em = $em; } /** @@ -63,24 +56,4 @@ public function getEntityManager() { return $this->em; } - - /** - * Name of the entity class that is cleared, or empty if all are cleared. - * - * @return string|null - */ - public function getEntityClass() - { - return $this->entityClass; - } - - /** - * Checks if event clears all entities. - * - * @return bool - */ - public function clearsAllEntities() - { - return ($this->entityClass === null); - } } diff --git a/lib/Doctrine/ORM/ORMInvalidArgumentException.php b/lib/Doctrine/ORM/ORMInvalidArgumentException.php index accf1cc1517..81466a0fed0 100644 --- a/lib/Doctrine/ORM/ORMInvalidArgumentException.php +++ b/lib/Doctrine/ORM/ORMInvalidArgumentException.php @@ -210,18 +210,6 @@ public static function invalidAssociation(ClassMetadata $targetClass, $assoc, $a )); } - /** - * Used when a given entityName hasn't the good type - * - * @param mixed $entityName The given entity (which shouldn't be a string) - * - * @return self - */ - public static function invalidEntityName($entityName) - { - return new self(sprintf('Entity name must be a string, %s given', gettype($entityName))); - } - /** * Helper method to show an object as string. * diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 2f97c3e4704..25d6413ac14 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -2382,37 +2382,28 @@ public function getCommitOrderCalculator() /** * Clears the UnitOfWork. * - * @param string|null $entityName if given, only entities of this type will get detached. - * * @return void - * - * @throws ORMInvalidArgumentException if an invalid entity name is given - */ - public function clear($entityName = null) - { - if ($entityName === null) { - $this->identityMap = - $this->entityIdentifiers = - $this->originalEntityData = - $this->entityChangeSets = - $this->entityStates = - $this->scheduledForSynchronization = - $this->entityInsertions = - $this->entityUpdates = - $this->entityDeletions = - $this->collectionDeletions = - $this->collectionUpdates = - $this->extraUpdates = - $this->readOnlyObjects = - $this->visitedCollections = - $this->orphanRemovals = []; - } else { - $this->clearIdentityMapForEntityName($entityName); - $this->clearEntityInsertionsForEntityName($entityName); - } + */ + public function clear() + { + $this->identityMap = + $this->entityIdentifiers = + $this->originalEntityData = + $this->entityChangeSets = + $this->entityStates = + $this->scheduledForSynchronization = + $this->entityInsertions = + $this->entityUpdates = + $this->entityDeletions = + $this->collectionDeletions = + $this->collectionUpdates = + $this->extraUpdates = + $this->readOnlyObjects = + $this->visitedCollections = + $this->orphanRemovals = []; if ($this->evm->hasListeners(Events::onClear)) { - $this->evm->dispatchEvent(Events::onClear, new Event\OnClearEventArgs($this->em, $entityName)); + $this->evm->dispatchEvent(Events::onClear, new Event\OnClearEventArgs($this->em)); } } @@ -3467,35 +3458,6 @@ public function hydrationComplete() $this->hydrationCompleteHandler->hydrationComplete(); } - /** - * @param string $entityName - */ - private function clearIdentityMapForEntityName($entityName) - { - if (! isset($this->identityMap[$entityName])) { - return; - } - - $visited = []; - - foreach ($this->identityMap[$entityName] as $entity) { - $this->doDetach($entity, $visited, false); - } - } - - /** - * @param string $entityName - */ - private function clearEntityInsertionsForEntityName($entityName) - { - foreach ($this->entityInsertions as $hash => $entity) { - // note: performance optimization - `instanceof` is much faster than a function call - if ($entity instanceof $entityName && get_class($entity) === $entityName) { - unset($this->entityInsertions[$hash]); - } - } - } - /** * @param ClassMetadata $class * @param mixed $identifierValue diff --git a/tests/Doctrine/Tests/ORM/EntityManagerTest.php b/tests/Doctrine/Tests/ORM/EntityManagerTest.php index 0986e16491d..ac41c65d6dd 100644 --- a/tests/Doctrine/Tests/ORM/EntityManagerTest.php +++ b/tests/Doctrine/Tests/ORM/EntityManagerTest.php @@ -237,47 +237,7 @@ public function testCreateInvalidConnection() /** * @group 6017 */ - public function testClearManagerWithObject() - { - $entity = new Country(456, 'United Kingdom'); - - $this->expectException(ORMInvalidArgumentException::class); - - $this->em->clear($entity); - } - - /** - * @group 6017 - */ - public function testClearManagerWithUnknownEntityName() - { - $this->expectException(MappingException::class); - - $this->em->clear(uniqid('nonExisting', true)); - } - - /** - * @group 6017 - */ - public function testClearManagerWithProxyClassName() - { - $proxy = $this->em->getReference(Country::class, ['id' => rand(457, 100000)]); - - $entity = new Country(456, 'United Kingdom'); - - $this->em->persist($entity); - - $this->assertTrue($this->em->contains($entity)); - - $this->em->clear(get_class($proxy)); - - $this->assertFalse($this->em->contains($entity)); - } - - /** - * @group 6017 - */ - public function testClearManagerWithNullValue() + public function testClearManager() { $entity = new Country(456, 'United Kingdom'); diff --git a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php index 3d6718872da..a9acf277843 100644 --- a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php @@ -1005,7 +1005,7 @@ public function testManyToOneFetchModeQuery() /** * @group DDC-1278 */ - public function testClearWithEntityName() + public function testClear() { $user = new CmsUser; $user->name = 'Dominik'; @@ -1039,15 +1039,11 @@ public function testClearWithEntityName() $unitOfWork = $this->em->getUnitOfWork(); - $this->em->clear(CmsUser::class); + $this->em->clear(); self::assertEquals(UnitOfWork::STATE_DETACHED, $unitOfWork->getEntityState($user)); self::assertEquals(UnitOfWork::STATE_DETACHED, $unitOfWork->getEntityState($article1)); self::assertEquals(UnitOfWork::STATE_DETACHED, $unitOfWork->getEntityState($article2)); - self::assertEquals(UnitOfWork::STATE_MANAGED, $unitOfWork->getEntityState($address)); - - $this->em->clear(); - self::assertEquals(UnitOfWork::STATE_DETACHED, $unitOfWork->getEntityState($address)); } diff --git a/tests/Doctrine/Tests/ORM/ORMInvalidArgumentExceptionTest.php b/tests/Doctrine/Tests/ORM/ORMInvalidArgumentExceptionTest.php deleted file mode 100644 index b4d26907854..00000000000 --- a/tests/Doctrine/Tests/ORM/ORMInvalidArgumentExceptionTest.php +++ /dev/null @@ -1,61 +0,0 @@ -getMessage()); - } - - /** - * @return string[][] - */ - public function invalidEntityNames() - { - return [ - [null, 'Entity name must be a string, NULL given'], - [true, 'Entity name must be a string, boolean given'], - [123, 'Entity name must be a string, integer given'], - [123.45, 'Entity name must be a string, double given'], - [new \stdClass(), 'Entity name must be a string, object given'], - ]; - } -} diff --git a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php index ecd232dc1ae..62cbeec34eb 100644 --- a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php +++ b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php @@ -355,10 +355,12 @@ public function testPersistedEntityAndClearManager() $this->unitOfWork->persist($entity2); $this->assertTrue($this->unitOfWork->isInIdentityMap($entity2)); - $this->unitOfWork->clear(Country::class); - $this->assertTrue($this->unitOfWork->isInIdentityMap($entity1)); + $this->unitOfWork->clear(); + + $this->assertFalse($this->unitOfWork->isInIdentityMap($entity1)); $this->assertFalse($this->unitOfWork->isInIdentityMap($entity2)); - $this->assertTrue($this->unitOfWork->isScheduledForInsert($entity1)); + + $this->assertFalse($this->unitOfWork->isScheduledForInsert($entity1)); $this->assertFalse($this->unitOfWork->isScheduledForInsert($entity2)); } From 3d03fd3f1b1118766699bf2d32e777d1d2d3fa4c Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Thu, 12 Jan 2017 17:11:35 -0500 Subject: [PATCH 095/275] Optimizations improvement over clear() --- lib/Doctrine/ORM/EntityManager.php | 5 +-- .../Entity/BasicEntityPersister.php | 39 +++++++++++-------- lib/Doctrine/ORM/UnitOfWork.php | 22 ++++++----- 3 files changed, 36 insertions(+), 30 deletions(-) diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 501288c2119..b95baed76bc 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -578,13 +578,10 @@ public function getPartialReference($entityName, $id) * @param null $entityName Unused. @todo Remove from ObjectManager. * * @return void - * - * @throws \Doctrine\Common\Persistence\Mapping\MappingException if a $entityName is given, but that entity is not - * found in the mappings */ public function clear($entityName = null) { - $this->unitOfWork->clear(null); + $this->unitOfWork->clear(); } /** diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index be1350810dd..3e099306204 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -841,11 +841,12 @@ public function loadCriteria(Criteria $criteria) list($params, $types) = $this->expandCriteriaParameters($criteria); - $stmt = $this->conn->executeQuery($query, $params, $types); - $hydrator = $this->em->newHydrator(($this->currentPersisterContext->selectJoinSql) ? Query::HYDRATE_OBJECT : Query::HYDRATE_SIMPLEOBJECT); + $stmt = $this->conn->executeQuery($query, $params, $types); + $rsm = $this->currentPersisterContext->rsm; + $hydrator = $this->em->newHydrator(($this->currentPersisterContext->selectJoinSql) ? Query::HYDRATE_OBJECT : Query::HYDRATE_SIMPLEOBJECT); + $hints = [UnitOfWork::HINT_DEFEREAGERLOAD => true]; - return $hydrator->hydrateAll($stmt, $this->currentPersisterContext->rsm, [UnitOfWork::HINT_DEFEREAGERLOAD => true] - ); + return $hydrator->hydrateAll($stmt, $rsm, $hints); } /** @@ -887,13 +888,15 @@ public function loadAll(array $criteria = [], array $orderBy = null, $limit = nu $this->switchPersisterContext($offset, $limit); $sql = $this->getSelectSQL($criteria, null, null, $limit, $offset, $orderBy); + list($params, $types) = $this->expandParameters($criteria); - $stmt = $this->conn->executeQuery($sql, $params, $types); + $stmt = $this->conn->executeQuery($sql, $params, $types); + $rsm = $this->currentPersisterContext->rsm; $hydrator = $this->em->newHydrator(($this->currentPersisterContext->selectJoinSql) ? Query::HYDRATE_OBJECT : Query::HYDRATE_SIMPLEOBJECT); + $hints = [UnitOfWork::HINT_DEFEREAGERLOAD => true]; - return $hydrator->hydrateAll($stmt, $this->currentPersisterContext->rsm, [UnitOfWork::HINT_DEFEREAGERLOAD => true] - ); + return $hydrator->hydrateAll($stmt, $rsm, $hints); } /** @@ -918,15 +921,17 @@ public function getManyToManyCollection(array $assoc, $sourceEntity, $offset = n */ private function loadArrayFromStatement($assoc, $stmt) { - $rsm = $this->currentPersisterContext->rsm; - $hints = [UnitOfWork::HINT_DEFEREAGERLOAD => true]; + $rsm = $this->currentPersisterContext->rsm; if (isset($assoc['indexBy'])) { $rsm = clone ($this->currentPersisterContext->rsm); // this is necessary because the "default rsm" should be changed. $rsm->addIndexBy('r', $assoc['indexBy']); } - return $this->em->newHydrator(Query::HYDRATE_OBJECT)->hydrateAll($stmt, $rsm, $hints); + $hydrator = $this->em->newHydrator(Query::HYDRATE_OBJECT); + $hints = [UnitOfWork::HINT_DEFEREAGERLOAD => true]; + + return $hydrator->hydrateAll($stmt, $rsm, $hints); } /** @@ -940,18 +945,20 @@ private function loadArrayFromStatement($assoc, $stmt) */ private function loadCollectionFromStatement($assoc, $stmt, $coll) { - $rsm = $this->currentPersisterContext->rsm; - $hints = [ - UnitOfWork::HINT_DEFEREAGERLOAD => true, - 'collection' => $coll - ]; + $rsm = $this->currentPersisterContext->rsm; if (isset($assoc['indexBy'])) { $rsm = clone ($this->currentPersisterContext->rsm); // this is necessary because the "default rsm" should be changed. $rsm->addIndexBy('r', $assoc['indexBy']); } - return $this->em->newHydrator(Query::HYDRATE_OBJECT)->hydrateAll($stmt, $rsm, $hints); + $hydrator = $this->em->newHydrator(Query::HYDRATE_OBJECT); + $hints = [ + UnitOfWork::HINT_DEFEREAGERLOAD => true, + 'collection' => $coll + ]; + + return $hydrator->hydrateAll($stmt, $rsm, $hints); } /** diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 25d6413ac14..a999dcab651 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -232,7 +232,7 @@ class UnitOfWork implements PropertyChangedListener * * @var \Doctrine\Common\EventManager */ - private $evm; + private $eventManager; /** * The ListenersInvoker used for dispatching events. @@ -294,7 +294,7 @@ class UnitOfWork implements PropertyChangedListener public function __construct(EntityManagerInterface $em) { $this->em = $em; - $this->evm = $em->getEventManager(); + $this->eventManager = $em->getEventManager(); $this->listenersInvoker = new ListenersInvoker($em); $this->hasCache = $em->getConfiguration()->isSecondLevelCacheEnabled(); $this->identifierFlattener = new IdentifierFlattener($this, $em->getMetadataFactory()); @@ -324,8 +324,8 @@ public function __construct(EntityManagerInterface $em) public function commit($entity = null) { // Raise preFlush - if ($this->evm->hasListeners(Events::preFlush)) { - $this->evm->dispatchEvent(Events::preFlush, new PreFlushEventArgs($this->em)); + if ($this->eventManager->hasListeners(Events::preFlush)) { + $this->eventManager->dispatchEvent(Events::preFlush, new PreFlushEventArgs($this->em)); } // Compute changes done since last commit. @@ -2386,6 +2386,8 @@ public function getCommitOrderCalculator() */ public function clear() { + $this->persisters = + $this->eagerLoadingEntities = $this->identityMap = $this->entityIdentifiers = $this->originalEntityData = @@ -2402,8 +2404,8 @@ public function clear() $this->visitedCollections = $this->orphanRemovals = []; - if ($this->evm->hasListeners(Events::onClear)) { - $this->evm->dispatchEvent(Events::onClear, new Event\OnClearEventArgs($this->em)); + if ($this->eventManager->hasListeners(Events::onClear)) { + $this->eventManager->dispatchEvent(Events::onClear, new Event\OnClearEventArgs($this->em)); } } @@ -3294,15 +3296,15 @@ private function performCallbackOnCachedPersister(callable $callback) private function dispatchOnFlushEvent() { - if ($this->evm->hasListeners(Events::onFlush)) { - $this->evm->dispatchEvent(Events::onFlush, new OnFlushEventArgs($this->em)); + if ($this->eventManager->hasListeners(Events::onFlush)) { + $this->eventManager->dispatchEvent(Events::onFlush, new OnFlushEventArgs($this->em)); } } private function dispatchPostFlushEvent() { - if ($this->evm->hasListeners(Events::postFlush)) { - $this->evm->dispatchEvent(Events::postFlush, new PostFlushEventArgs($this->em)); + if ($this->eventManager->hasListeners(Events::postFlush)) { + $this->eventManager->dispatchEvent(Events::postFlush, new PostFlushEventArgs($this->em)); } } From defa6a46614d691b15c633633f268cccfc7f8015 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 13 Jan 2017 16:21:16 -0500 Subject: [PATCH 096/275] Introduced CacheMetadata --- lib/Doctrine/ORM/Cache/CacheFactory.php | 5 +- .../ORM/Cache/DefaultCacheFactory.php | 60 +++--- .../ORM/Cache/DefaultEntityHydrator.php | 6 +- .../ORM/Mapping/AssociationMetadata.php | 65 +++++- .../Mapping/Builder/CacheMetadataBuilder.php | 74 +++++++ lib/Doctrine/ORM/Mapping/CacheMetadata.php | 76 +++++++ lib/Doctrine/ORM/Mapping/ClassMetadata.php | 121 +++++++---- .../ORM/Mapping/ClassMetadataFactory.php | 2 +- .../ORM/Mapping/Driver/AnnotationDriver.php | 37 +++- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 66 +++++- .../ORM/Mapping/ToManyAssociationMetadata.php | 6 +- .../ORM/Mapping/ToOneAssociationMetadata.php | 3 + .../ORM/Cache/DefaultCacheFactoryTest.php | 201 +++++++++--------- .../Tests/ORM/Cache/DefaultCacheTest.php | 63 +++--- .../Tests/ORM/Cache/DefaultQueryCacheTest.php | 21 +- .../SecondLevelCacheConcurrentTest.php | 8 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 21 +- 17 files changed, 574 insertions(+), 261 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/Builder/CacheMetadataBuilder.php create mode 100644 lib/Doctrine/ORM/Mapping/CacheMetadata.php diff --git a/lib/Doctrine/ORM/Cache/CacheFactory.php b/lib/Doctrine/ORM/Cache/CacheFactory.php index b915100623a..047a1bee1ff 100644 --- a/lib/Doctrine/ORM/Cache/CacheFactory.php +++ b/lib/Doctrine/ORM/Cache/CacheFactory.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Cache; +use Doctrine\ORM\Mapping\CacheMetadata; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Persisters\Collection\CollectionPersister; @@ -88,11 +89,11 @@ public function buildCollectionHydrator(EntityManagerInterface $em, array $mappi /** * Build a cache region * - * @param array $cache The cache configuration. + * @param \Doctrine\ORM\Mapping\CacheMetadata $cache The cache configuration. * * @return \Doctrine\ORM\Cache\Region The cache region. */ - public function getRegion(array $cache); + public function getRegion(CacheMetadata $cache); /** * Build timestamp cache region diff --git a/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php b/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php index 9d23fd23161..3a6200570bb 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php +++ b/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php @@ -35,6 +35,8 @@ use Doctrine\ORM\Cache\Region\FileLockRegion; use Doctrine\ORM\Cache\Region\UpdateTimestampCache; use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\Builder\CacheMetadataBuilder; +use Doctrine\ORM\Mapping\CacheMetadata; use Doctrine\ORM\Mapping\CacheUsage; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Persisters\Collection\CollectionPersister; @@ -77,8 +79,8 @@ class DefaultCacheFactory implements CacheFactory */ public function __construct(RegionsConfiguration $cacheConfig, CacheAdapter $cache) { - $this->cache = $cache; $this->regionsConfig = $cacheConfig; + $this->cache = $cache; } /** @@ -118,8 +120,9 @@ public function setTimestampRegion(TimestampRegion $region) */ public function buildCachedEntityPersister(EntityManagerInterface $em, EntityPersister $persister, ClassMetadata $metadata) { - $region = $this->getRegion($metadata->cache); - $usage = $metadata->cache['usage']; + $cache = $metadata->cache; + $region = $this->getRegion($cache); + $usage = $cache->getUsage(); switch ($usage) { case CacheUsage::READ_ONLY: @@ -141,8 +144,9 @@ public function buildCachedEntityPersister(EntityManagerInterface $em, EntityPer */ public function buildCachedCollectionPersister(EntityManagerInterface $em, CollectionPersister $persister, array $mapping) { - $region = $this->getRegion($mapping['cache']); - $usage = $mapping['cache']['usage']; + $cache = $mapping['cache']; + $region = $this->getRegion($cache); + $usage = $cache->getUsage(); switch ($usage) { case CacheUsage::READ_ONLY: @@ -164,15 +168,14 @@ public function buildCachedCollectionPersister(EntityManagerInterface $em, Colle */ public function buildQueryCache(EntityManagerInterface $em, $regionName = null) { - return new DefaultQueryCache( - $em, - $this->getRegion( - [ - 'region' => $regionName ?: Cache::DEFAULT_QUERY_REGION_NAME, - 'usage' => CacheUsage::NONSTRICT_READ_WRITE, - ] - ) - ); + $builder = new CacheMetadataBuilder(); + + $builder + ->withRegion($regionName ?: Cache::DEFAULT_QUERY_REGION_NAME) + ->withUsage(CacheUsage::NONSTRICT_READ_WRITE) + ; + + return new DefaultQueryCache($em, $this->getRegion($builder->build())); } /** @@ -194,21 +197,22 @@ public function buildEntityHydrator(EntityManagerInterface $em, ClassMetadata $m /** * {@inheritdoc} */ - public function getRegion(array $cache) + public function getRegion(CacheMetadata $cache) { - if (isset($this->regions[$cache['region']])) { - return $this->regions[$cache['region']]; + $regionName = $cache->getRegion(); + + if (isset($this->regions[$regionName])) { + return $this->regions[$regionName]; } - $name = $cache['region']; - $cacheAdapter = $this->createRegionCache($name); - $lifetime = $this->regionsConfig->getLifetime($cache['region']); - - $region = ($cacheAdapter instanceof MultiGetCache) - ? new DefaultMultiGetRegion($name, $cacheAdapter, $lifetime) - : new DefaultRegion($name, $cacheAdapter, $lifetime); + $cacheAdapter = $this->createRegionCache($regionName); + $lifetime = $this->regionsConfig->getLifetime($regionName); + $region = ($cacheAdapter instanceof MultiGetCache) + ? new DefaultMultiGetRegion($regionName, $cacheAdapter, $lifetime) + : new DefaultRegion($regionName, $cacheAdapter, $lifetime) + ; - if ($cache['usage'] === CacheUsage::READ_WRITE) { + if ($cache->getUsage() === CacheUsage::READ_WRITE) { if ( ! $this->fileLockRegionDirectory) { throw new \LogicException( 'If you want to use a "READ_WRITE" cache an implementation of "Doctrine\ORM\Cache\ConcurrentRegion" is required, ' . @@ -216,11 +220,11 @@ public function getRegion(array $cache) ); } - $directory = $this->fileLockRegionDirectory . DIRECTORY_SEPARATOR . $cache['region']; - $region = new FileLockRegion($region, $directory, $this->regionsConfig->getLockLifetime($cache['region'])); + $directory = $this->fileLockRegionDirectory . DIRECTORY_SEPARATOR . $regionName; + $region = new FileLockRegion($region, $directory, $this->regionsConfig->getLockLifetime($regionName)); } - return $this->regions[$cache['region']] = $region; + return $this->regions[$regionName] = $region; } /** diff --git a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php index 8560238f12d..79f4891b620 100644 --- a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php @@ -81,13 +81,13 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e continue; } - if ( ! ($assoc['type'] & ClassMetadata::TO_ONE)) { + if (! ($assoc['type'] & ClassMetadata::TO_ONE)) { unset($data[$name]); continue; } - if ( ! isset($assoc['cache'])) { + if (! isset($assoc['cache'])) { $targetClassMetadata = $this->em->getClassMetadata($assoc['targetEntity']); $owningAssociation = ( ! $assoc['isOwningSide']) ? $targetClassMetadata->associationMappings[$assoc['mappedBy']] @@ -178,7 +178,7 @@ public function loadCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, Ent } foreach ($metadata->associationMappings as $name => $assoc) { - if ( ! isset($assoc['cache']) || ! isset($data[$name])) { + if (! isset($assoc['cache']) || ! isset($data[$name])) { continue; } diff --git a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php index c165ed01fb4..9bf55f4a294 100644 --- a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php @@ -36,13 +36,13 @@ class AssociationMetadata implements Property private $name; /** @var string */ - private $targetEntity; + private $fetchMode = FetchMode::LAZY; - /** @var array */ - private $cascade = []; + /** @var string */ + private $targetEntity; /** @var string */ - private $fetchMode = FetchMode::LAZY; + private $sourceEntity; /** @var string */ private $mappedBy; @@ -50,8 +50,17 @@ class AssociationMetadata implements Property /** @var null|string */ private $inversedBy; + /** @var array */ + private $cascade = []; + + /** @var bool */ + private $owningSide = true; + /** @var bool */ private $orphanRemoval = false; + + /** @var null|CacheMetadata */ + private $cache = null; /** * {@inheritdoc} @@ -101,6 +110,22 @@ public function setTargetEntity($targetEntity) $this->targetEntity = $targetEntity; } + /** + * @return string + */ + public function getSourceEntity() + { + return $this->sourceEntity; + } + + /** + * @param string $sourceEntity + */ + public function setSourceEntity($sourceEntity) + { + $this->sourceEntity = $sourceEntity; + } + /** * @return array */ @@ -116,6 +141,22 @@ public function setCascade(array $cascade) { $this->cascade = $cascade; } + + /** + * @param bool $owningSide + */ + public function setOwningSide(bool $owningSide) + { + $this->owningSide = $owningSide; + } + + /** + * @return bool + */ + public function isOwningSide() + { + return $this->owningSide; + } /** * @return string @@ -180,6 +221,22 @@ public function isOrphanRemoval() { return $this->orphanRemoval; } + + /** + * @return null|CacheMetadata + */ + public function getCache() + { + return $this->cache; + } + + /** + * @param null|CacheMetadata $cache + */ + public function setCache(CacheMetadata $cache = null) + { + $this->cache = $cache; + } /** * {@inheritdoc} diff --git a/lib/Doctrine/ORM/Mapping/Builder/CacheMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/CacheMetadataBuilder.php new file mode 100644 index 00000000000..9d5828328cc --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Builder/CacheMetadataBuilder.php @@ -0,0 +1,74 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\CacheMetadata; + +class CacheMetadataBuilder implements Builder +{ + /** @var string */ + protected $usage; + + /** @var string */ + protected $region; + + /** + * @param string $usage + * + * @return self + */ + public function withUsage(string $usage) + { + $this->usage = $usage; + + return $this; + } + + /** + * @param string $region + * + * @return self + */ + public function withRegion(string $region) + { + $this->region = $region; + + return $this; + } + + /** + * @return CacheMetadata + */ + public function build() + { + return $this->createMetadataObject(); + } + + /** + * @return CacheMetadata + */ + protected function createMetadataObject() + { + return new CacheMetadata($this->usage, $this->region); + } +} diff --git a/lib/Doctrine/ORM/Mapping/CacheMetadata.php b/lib/Doctrine/ORM/Mapping/CacheMetadata.php new file mode 100644 index 00000000000..354673b9fb3 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/CacheMetadata.php @@ -0,0 +1,76 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +class CacheMetadata +{ + /** @var string */ + private $usage; + + /** @var string */ + private $region; + + /** + * Constructor. + * + * @param string $usage + * @param string $region + */ + public function __construct(string $usage, string $region) + { + $this->usage = $usage; + $this->region = $region; + } + + /** + * @return string + */ + public function getUsage() + { + return $this->usage; + } + + /** + * @param string $usage + */ + public function setUsage(string $usage) + { + $this->usage = $usage; + } + + /** + * @return string + */ + public function getRegion() + { + return $this->region; + } + + /** + * @param string $region + */ + public function setRegion(string $region) + { + $this->region = $region; + } +} diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 5fb66b978e3..f0ca44bc200 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -341,14 +341,29 @@ class ClassMetadata implements ClassMetadataInterface * READ-ONLY: The association mappings of this class. * * The mapping definition array supports the following keys: + * + * - type (integer) + * Association type: ONE_TO_ONE, ONE_TO_MANY, MANY_TO_ONE, MANY_TO_MANY * * - fieldName (string) * The name of the field in the entity the association is mapped to. * + * - fetch (integer, optional) + * The fetching strategy to use for the association, usually defaults to LAZY. + * Possible values are: FetchMode::EAGER, FetchMode::LAZY, FetchMode::EXTRA_LAZY. + * * - targetEntity (string) * The class name of the target entity. If it is fully-qualified it is used as is. * If it is a simple, unqualified class name the namespace is assumed to be the same * as the namespace of the source entity. + * + * - sourceEntity (string) + * The class name of the source entity. If it is fully-qualified it is used as is. + * If it is a simple, unqualified class name the namespace is assumed to be the same + * as the namespace of the source entity. + * + * - isOwningSide (boolean) + * Whether the association is the owning side or the inverse side. * * - mappedBy (string, required for bidirectional associations) * The name of the field that completes the bidirectional association on the owning side. @@ -358,38 +373,35 @@ class ClassMetadata implements ClassMetadataInterface * The name of the field that completes the bidirectional association on the inverse side. * This key must be specified on the owning side of a bidirectional association. * - * - cascade (array, optional) + * - cascade (array, optional) * The names of persistence operations to cascade on the association. The set of possible * values are: "persist", "remove", "detach", "merge", "refresh", "all" (implies all others). * - * - orderBy (array, one-to-many/many-to-many only) + * - orderBy (array, one-to-many/many-to-many only) * A map of field names (of the target entity) to sorting directions (ASC/DESC). * Example: array('priority' => 'desc') - * - * - fetch (integer, optional) - * The fetching strategy to use for the association, usually defaults to LAZY. - * Possible values are: FetchMode::EAGER, FetchMode::LAZY, FetchMode::EXTRA_LAZY. - * - * - joinTable (array, optional, many-to-many only) - * Specification of the join table and its join columns (foreign keys). - * Only valid for many-to-many mappings. Note that one-to-many associations can be mapped - * through a join table by simply mapping the association as many-to-many with a unique - * constraint on the join table. - * + * * - indexBy (string, optional, to-many only) * Specification of a field on target-entity that is used to index the collection by. * This field HAS to be either the primary key or a unique column. Otherwise the collection * does not contain all the entities that are actually related. * - * A join table definition has the following structure: - *
-     * array(
-     *     'name' => ,
-     *      'joinColumns' => array(),
-     *      'inverseJoinColumns' => array()
-     * )
-     * 
- * + * - joinTable (JoinTableMetadata, optional, many-to-many only) + * Specification of the join table and its join columns (foreign keys). + * Only valid for many-to-many mappings. Note that one-to-many associations can be mapped + * through a join table by simply mapping the association as many-to-many with a unique + * constraint on the join table. + * + * - joinColumns (array, optional, to-one only) + * Specification of the join columns (foreign keys). + * + * - id (boolean, optional) + * Whether the association is the entity identifier + * + * - orphanRemoval (boolean, optional, all association types, except many-to-one) + * + * - cache (CacheMetadata, optional) + * * @var array */ public $associationMappings = []; @@ -402,7 +414,7 @@ class ClassMetadata implements ClassMetadataInterface public $versionProperty = null; /** - * @var array + * @var null|CacheMetadata */ public $cache = null; @@ -563,6 +575,16 @@ public function getFieldValue($entity, $field) { return $this->reflFields[$field]->getValue($entity); } + + /** + * Handles metadata cloning nicely. + */ + public function __clone() + { + if ($this->cache) { + $this->cache = clone $this->cache; + } + } /** * Creates a string representation of this instance. @@ -836,25 +858,29 @@ public function getReflectionClass() /** * @param array $cache + * + * @todo Consider using CacheMetadata instead * * @return void */ public function enableCache(array $cache) { - if ( ! isset($cache['usage'])) { - $cache['usage'] = CacheUsage::READ_ONLY; - } - - if ( ! isset($cache['region'])) { - $cache['region'] = strtolower(str_replace('\\', '_', $this->rootEntityName)); - } - - $this->cache = $cache; + $defaultRegion = strtolower(str_replace('\\', '_', $this->rootEntityName)); + $builder = new Builder\CacheMetadataBuilder(); + + $builder + ->withUsage($cache['usage'] ?? CacheUsage::READ_ONLY) + ->withRegion($cache['region'] ?? $defaultRegion) + ; + + $this->cache = $builder->build(); } /** * @param string $fieldName * @param array $cache + * + * @todo Remove me once Association is OOed * * @return void */ @@ -866,22 +892,31 @@ public function enableAssociationCache($fieldName, array $cache) /** * @param string $fieldName * @param array $cache + * + * @todo Remove me once Association is OOed * * @return array */ public function getAssociationCacheDefaults($fieldName, array $cache) { - if ( ! isset($cache['usage'])) { - $cache['usage'] = isset($this->cache['usage']) - ? $this->cache['usage'] - : CacheUsage::READ_ONLY; - } - - if ( ! isset($cache['region'])) { - $cache['region'] = strtolower(str_replace('\\', '_', $this->rootEntityName)) . '__' . $fieldName; - } - - return $cache; + $region = $cache['region'] ?? strtolower(str_replace('\\', '_', $this->rootEntityName)) . '__' . $fieldName; + $usage = $cache['usage'] ?? null; + + if (! $usage) { + $usage = $this->cache->getUsage() !== null + ? $this->cache->getUsage() + : CacheUsage::READ_ONLY + ; + } + + $builder = new Builder\CacheMetadataBuilder(); + + $builder + ->withRegion($region) + ->withUsage($usage) + ; + + return $builder->build(); } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index bfb50e27c14..2eb8069a834 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -210,7 +210,7 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS $this->addInheritedIndexes($class, $parent); if ($parent->cache) { - $class->cache = $parent->cache; + $class->cache = clone $parent->cache; } if ($parent->containsForeignIdentifier) { diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 46e46562929..dc1c6e74bc2 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -25,10 +25,12 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Annotation; use Doctrine\ORM\Events; -use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; +use Doctrine\ORM\Mapping\Builder\CacheMetadataBuilder; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; +use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; use Doctrine\ORM\Mapping\Builder\TableMetadataBuilder; +use Doctrine\ORM\Mapping\CacheMetadata; use Doctrine\ORM\Mapping\CacheUsage; use Doctrine\ORM\Mapping\ChangeTrackingPolicy; use Doctrine\ORM\Mapping\ClassMetadata; @@ -331,12 +333,10 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat // Evaluate @Cache annotation if (($cacheAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Cache::class)) !== null) { - $mapping['cache'] = $metadata->getAssociationCacheDefaults( - $mapping['fieldName'], - [ - 'usage' => constant(sprintf('%s::%s', CacheUsage::class, $cacheAnnot->usage)), - 'region' => $cacheAnnot->region, - ] + $mapping['cache'] = $this->convertCacheAnnotationToCacheMetadata( + $cacheAnnot, + $metadata, + $fieldName ); } @@ -834,6 +834,29 @@ private function convertJoinColumnAnnotationToJoinColumnMetadata(Annotation\Join return $joinColumn; } + + /** + * Parse the given Cache as CacheMetadata + * + * @param Annotation\Cache $cacheAnnot + * @param ClassMetadata $metadata + * @param null|string $fieldName + * + * @return CacheMetadata + */ + private function convertCacheAnnotationToCacheMetadata(Annotation\Cache $cacheAnnot, ClassMetadata $metadata, $fieldName = null) + { + $baseRegion = strtolower(str_replace('\\', '_', $metadata->rootEntityName)); + $defaultRegion = $baseRegion . ($fieldName ? '__' . $fieldName : ''); + $cacheBuilder = new CacheMetadataBuilder(); + + $cacheBuilder + ->withUsage(constant(sprintf('%s::%s', CacheUsage::class, $cacheAnnot->usage))) + ->withRegion($cacheAnnot->region ?: $defaultRegion) + ; + + return $cacheBuilder->build(); + } /** * Factory method for the Annotation Driver. diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 6723196ef6b..baf2096d152 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -24,6 +24,8 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; +use Doctrine\ORM\Mapping\Builder\CacheMetadataBuilder; +use Doctrine\ORM\Mapping\CacheMetadata; use Doctrine\ORM\Mapping\CacheUsage; use Doctrine\ORM\Mapping\ChangeTrackingPolicy; use Doctrine\ORM\Mapping\FieldMetadata; @@ -141,7 +143,12 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate second level cache if (isset($xmlRoot->cache)) { - $metadata->enableCache($this->cacheToArray($xmlRoot->cache)); + $cache = $this->convertCacheElementToCacheMetadata($xmlRoot->cache, $metadata); + + $metadata->enableCache([ + 'usage' => $cache->getUsage(), + 'region' => $cache->getRegion(), + ]); } // Evaluate named queries @@ -402,7 +409,11 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate second level cache if (isset($oneToOneElement->cache)) { - $mapping['cache'] = $metadata->getAssociationCacheDefaults($mapping['fieldName'], $this->cacheToArray($oneToOneElement->cache)); + $mapping['cache'] = $this->convertCacheElementToCacheMetadata( + $oneToOneElement->cache, + $metadata, + $mapping['fieldName'] + ); } $metadata->mapOneToOne($mapping); @@ -446,7 +457,11 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate second level cache if (isset($oneToManyElement->cache)) { - $mapping['cache'] = $metadata->getAssociationCacheDefaults($mapping['fieldName'], $this->cacheToArray($oneToManyElement->cache)); + $mapping['cache'] = $this->convertCacheElementToCacheMetadata( + $oneToManyElement->cache, + $metadata, + $mapping['fieldName'] + ); } $metadata->mapOneToMany($mapping); @@ -491,7 +506,11 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate second level cache if (isset($manyToOneElement->cache)) { - $mapping['cache'] = $metadata->getAssociationCacheDefaults($mapping['fieldName'], $this->cacheToArray($manyToOneElement->cache)); + $mapping['cache'] = $this->convertCacheElementToCacheMetadata( + $manyToOneElement->cache, + $metadata, + $mapping['fieldName'] + ); } $metadata->mapManyToOne($mapping); @@ -574,7 +593,11 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate second level cache if (isset($manyToManyElement->cache)) { - $mapping['cache'] = $metadata->getAssociationCacheDefaults($mapping['fieldName'], $this->cacheToArray($manyToManyElement->cache)); + $mapping['cache'] = $this->convertCacheElementToCacheMetadata( + $manyToManyElement->cache, + $metadata, + $mapping['fieldName'] + ); } $metadata->mapManyToMany($mapping); @@ -813,6 +836,35 @@ private function convertJoinColumnElementToJoinColumnMetadata(SimpleXMLElement $ return $joinColumnMetadata; } + + /** + * Parse the given Cache as CacheMetadata + * + * @param \SimpleXMLElement $cacheMapping + * @param ClassMetadata $metadata + * @param null|string $fieldName + * + * @return CacheMetadata + */ + private function convertCacheElementToCacheMetadata(SimpleXMLElement $cacheMapping, ClassMetadata $metadata, $fieldName = null) + { + $baseRegion = strtolower(str_replace('\\', '_', $metadata->rootEntityName)); + $defaultRegion = $baseRegion . ($fieldName ? '__' . $fieldName : ''); + $cacheBuilder = new CacheMetadataBuilder(); + + $region = isset($cacheMapping['region']) ? (string) $cacheMapping['region'] : $defaultRegion; + $usage = isset($cacheMapping['usage']) + ? constant(sprintf('%s::%s', CacheUsage::class, strtoupper($cacheMapping['usage']))) + : CacheUsage::READ_ONLY + ; + + $cacheBuilder + ->withUsage($usage) + ->withRegion($region) + ; + + return $cacheBuilder->build(); + } /** * Parse / Normalize the cache configuration @@ -826,10 +878,6 @@ private function cacheToArray(SimpleXMLElement $cacheMapping) $region = isset($cacheMapping['region']) ? (string) $cacheMapping['region'] : null; $usage = isset($cacheMapping['usage']) ? strtoupper($cacheMapping['usage']) : null; - if ($usage && ! defined(sprintf('%s::%s', CacheUsage::class, $usage))) { - throw new \InvalidArgumentException(sprintf('Invalid cache usage "%s"', $usage)); - } - if ($usage) { $usage = constant(sprintf('%s::%s', CacheUsage::class, $usage)); } diff --git a/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php index 7aecdd9ba5e..cd8866ad27e 100644 --- a/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php @@ -21,5 +21,9 @@ class ToManyAssociationMetadata extends AssociationMetadata { - + /** @var array */ + private $orderBy = []; + + /** @var array */ + private $indexedBy = []; } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php index 4d404fcad1e..b5a7502ea02 100644 --- a/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php @@ -21,6 +21,9 @@ class ToOneAssociationMetadata extends AssociationMetadata { + /** @var bool */ + private $id = false; + /** * @var array */ diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php index f181193633e..74056fe5bef 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php @@ -17,6 +17,7 @@ use Doctrine\ORM\Cache\Region\DefaultMultiGetRegion; use Doctrine\ORM\Cache\Region\DefaultRegion; use Doctrine\ORM\Cache\RegionsConfiguration; +use Doctrine\ORM\Mapping\CacheMetadata; use Doctrine\ORM\Mapping\CacheUsage; use Doctrine\ORM\Persisters\Collection\OneToManyPersister; use Doctrine\ORM\Persisters\Entity\BasicEntityPersister; @@ -50,15 +51,22 @@ class DefaultCacheFactoryTest extends OrmTestCase protected function setUp() { $this->enableSecondLevelCache(); + parent::setUp(); - $this->em = $this->getTestEntityManager(); - $this->regionsConfig = new RegionsConfiguration; - $arguments = [$this->regionsConfig, $this->getSharedSecondLevelCacheDriverImpl()]; - $this->factory = $this->getMockBuilder(DefaultCacheFactory::class) - ->setMethods(['getRegion']) - ->setConstructorArgs($arguments) - ->getMock(); + $this->em = $this->getTestEntityManager(); + $this->regionsConfig = new RegionsConfiguration; + + $arguments = [ + $this->regionsConfig, + $this->getSharedSecondLevelCacheDriverImpl() + ]; + + $this->factory = $this->getMockBuilder(DefaultCacheFactory::class) + ->setMethods(['getRegion']) + ->setConstructorArgs($arguments) + ->getMock() + ; } public function testImplementsCacheFactory() @@ -68,12 +76,14 @@ public function testImplementsCacheFactory() public function testBuildCachedEntityPersisterReadOnly() { - $em = $this->em; - $metadata = clone $em->getClassMetadata(State::class); - $persister = new BasicEntityPersister($em, $metadata); - $region = new ConcurrentRegionMock(new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl())); + $em = $this->em; + $metadata = clone $em->getClassMetadata(State::class); + $persister = new BasicEntityPersister($em, $metadata); + $region = new ConcurrentRegionMock( + new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl()) + ); - $metadata->cache['usage'] = CacheUsage::READ_ONLY; + $metadata->cache->setUsage(CacheUsage::READ_ONLY); $this->factory->expects($this->once()) ->method('getRegion') @@ -91,9 +101,11 @@ public function testBuildCachedEntityPersisterReadWrite() $em = $this->em; $metadata = clone $em->getClassMetadata(State::class); $persister = new BasicEntityPersister($em, $metadata); - $region = new ConcurrentRegionMock(new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl())); + $region = new ConcurrentRegionMock( + new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl()) + ); - $metadata->cache['usage'] = CacheUsage::READ_WRITE; + $metadata->cache->setUsage(CacheUsage::READ_WRITE); $this->factory->expects($this->once()) ->method('getRegion') @@ -108,12 +120,14 @@ public function testBuildCachedEntityPersisterReadWrite() public function testBuildCachedEntityPersisterNonStrictReadWrite() { - $em = $this->em; - $metadata = clone $em->getClassMetadata(State::class); - $persister = new BasicEntityPersister($em, $metadata); - $region = new ConcurrentRegionMock(new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl())); + $em = $this->em; + $metadata = clone $em->getClassMetadata(State::class); + $persister = new BasicEntityPersister($em, $metadata); + $region = new ConcurrentRegionMock( + new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl()) + ); - $metadata->cache['usage'] = CacheUsage::NONSTRICT_READ_WRITE; + $metadata->cache->setUsage(CacheUsage::NONSTRICT_READ_WRITE); $this->factory->expects($this->once()) ->method('getRegion') @@ -128,13 +142,15 @@ public function testBuildCachedEntityPersisterNonStrictReadWrite() public function testBuildCachedCollectionPersisterReadOnly() { - $em = $this->em; - $metadata = $em->getClassMetadata(State::class); - $mapping = $metadata->associationMappings['cities']; - $persister = new OneToManyPersister($em); - $region = new ConcurrentRegionMock(new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl())); + $em = $this->em; + $metadata = clone $em->getClassMetadata(State::class); + $mapping = $metadata->associationMappings['cities']; + $persister = new OneToManyPersister($em); + $region = new ConcurrentRegionMock( + new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl()) + ); - $mapping['cache']['usage'] = CacheUsage::READ_ONLY; + $mapping['cache']->setUsage(CacheUsage::READ_ONLY); $this->factory->expects($this->once()) ->method('getRegion') @@ -150,13 +166,15 @@ public function testBuildCachedCollectionPersisterReadOnly() public function testBuildCachedCollectionPersisterReadWrite() { - $em = $this->em; - $metadata = $em->getClassMetadata(State::class); - $mapping = $metadata->associationMappings['cities']; - $persister = new OneToManyPersister($em); - $region = new ConcurrentRegionMock(new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl())); + $em = $this->em; + $metadata = clone $em->getClassMetadata(State::class); + $mapping = $metadata->associationMappings['cities']; + $persister = new OneToManyPersister($em); + $region = new ConcurrentRegionMock( + new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl()) + ); - $mapping['cache']['usage'] = CacheUsage::READ_WRITE; + $mapping['cache']->setUsage(CacheUsage::READ_WRITE); $this->factory->expects($this->once()) ->method('getRegion') @@ -171,13 +189,15 @@ public function testBuildCachedCollectionPersisterReadWrite() public function testBuildCachedCollectionPersisterNonStrictReadWrite() { - $em = $this->em; - $metadata = $em->getClassMetadata(State::class); - $mapping = $metadata->associationMappings['cities']; - $persister = new OneToManyPersister($em); - $region = new ConcurrentRegionMock(new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl())); + $em = $this->em; + $metadata = clone $em->getClassMetadata(State::class); + $mapping = $metadata->associationMappings['cities']; + $persister = new OneToManyPersister($em); + $region = new ConcurrentRegionMock( + new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl()) + ); - $mapping['cache']['usage'] = CacheUsage::NONSTRICT_READ_WRITE; + $mapping['cache']->setUsage(CacheUsage::NONSTRICT_READ_WRITE); $this->factory->expects($this->once()) ->method('getRegion') @@ -229,68 +249,62 @@ public function testCreateNewCacheDriver() } /** - * @expectedException InvalidArgumentException + * @expectedException \InvalidArgumentException * @expectedExceptionMessage Unrecognized access strategy type [-1] */ public function testBuildCachedEntityPersisterNonStrictException() { - $em = $this->em; - $metadata = clone $em->getClassMetadata(State::class); - $persister = new BasicEntityPersister($em, $metadata); - - $metadata->cache['usage'] = -1; + $em = $this->em; + $metadata = clone $em->getClassMetadata(State::class); + $persister = new BasicEntityPersister($em, $metadata); + + $metadata->cache->setUsage(-1); $this->factory->buildCachedEntityPersister($em, $persister, $metadata); } /** - * @expectedException InvalidArgumentException + * @expectedException \InvalidArgumentException * @expectedExceptionMessage Unrecognized access strategy type [-1] */ public function testBuildCachedCollectionPersisterException() { - $em = $this->em; - $metadata = $em->getClassMetadata(State::class); - $mapping = $metadata->associationMappings['cities']; - $persister = new OneToManyPersister($em); + $em = $this->em; + $metadata = clone $em->getClassMetadata(State::class); + $mapping = $metadata->getAssociationMapping('cities'); + $persister = new OneToManyPersister($em); - $mapping['cache']['usage'] = -1; + $cache = clone $mapping['cache']; + + $cache->setUsage(-1); + + $mapping['cache'] = $cache; $this->factory->buildCachedCollectionPersister($em, $persister, $mapping); } /** - * @expectedException LogicException + * @expectedException \LogicException * @expectedExceptionMessage If you want to use a "READ_WRITE" cache an implementation of "Doctrine\ORM\Cache\ConcurrentRegion" is required, The default implementation provided by doctrine is "Doctrine\ORM\Cache\Region\FileLockRegion" if you want to use it please provide a valid directory */ public function testInvalidFileLockRegionDirectoryException() { $factory = new DefaultCacheFactory($this->regionsConfig, $this->getSharedSecondLevelCacheDriverImpl()); - $factory->getRegion( - [ - 'region' => 'foo', - 'usage' => CacheUsage::READ_WRITE, - ] - ); + $fooCache = new CacheMetadata(CacheUsage::READ_WRITE, 'foo'); + + $factory->getRegion($fooCache); } public function testBuildsNewNamespacedCacheInstancePerRegionInstance() { $factory = new DefaultCacheFactory($this->regionsConfig, $this->getSharedSecondLevelCacheDriverImpl()); - $fooRegion = $factory->getRegion( - [ - 'region' => 'foo', - 'usage' => CacheUsage::READ_ONLY, - ] - ); - $barRegion = $factory->getRegion( - [ - 'region' => 'bar', - 'usage' => CacheUsage::READ_ONLY, - ] - ); + $fooCache = new CacheMetadata(CacheUsage::READ_ONLY, 'foo'); + $fooRegion = $factory->getRegion($fooCache); + + $barCache = new CacheMetadata(CacheUsage::READ_ONLY, 'bar'); + $barRegion = $factory->getRegion($barCache); self::assertSame('foo', $fooRegion->getCache()->getNamespace()); self::assertSame('bar', $barRegion->getCache()->getNamespace()); @@ -303,18 +317,11 @@ public function testAppendsNamespacedCacheInstancePerRegionInstanceWhenItsAlread $factory = new DefaultCacheFactory($this->regionsConfig, $cache); - $fooRegion = $factory->getRegion( - [ - 'region' => 'foo', - 'usage' => ClassMetadata::CACHE_USAGE_READ_ONLY, - ] - ); - $barRegion = $factory->getRegion( - [ - 'region' => 'bar', - 'usage' => ClassMetadata::CACHE_USAGE_READ_ONLY, - ] - ); + $fooCache = new CacheMetadata(CacheUsage::READ_ONLY, 'foo'); + $fooRegion = $factory->getRegion($fooCache); + + $barCache = new CacheMetadata(CacheUsage::READ_ONLY, 'bar'); + $barRegion = $factory->getRegion($barCache); $this->assertSame('testing:foo', $fooRegion->getCache()->getNamespace()); $this->assertSame('testing:bar', $barRegion->getCache()->getNamespace()); @@ -323,37 +330,25 @@ public function testAppendsNamespacedCacheInstancePerRegionInstanceWhenItsAlread public function testBuildsDefaultCacheRegionFromGenericCacheRegion() { /* @var $cache \Doctrine\Common\Cache\Cache */ - $cache = $this->createMock(Cache::class); - + $cache = $this->createMock(Cache::class); $factory = new DefaultCacheFactory($this->regionsConfig, $cache); - - self::assertInstanceOf( - DefaultRegion::class, - $factory->getRegion( - [ - 'region' => 'bar', - 'usage' => CacheUsage::READ_ONLY, - ] - ) - ); + + $barCache = new CacheMetadata(CacheUsage::READ_ONLY, 'bar'); + $barRegion = $factory->getRegion($barCache); + + self::assertInstanceOf(DefaultRegion::class, $barRegion); } public function testBuildsMultiGetCacheRegionFromGenericCacheRegion() { /* @var $cache \Doctrine\Common\Cache\CacheProvider */ - $cache = $this->getMockForAbstractClass(CacheProvider::class); - + $cache = $this->getMockForAbstractClass(CacheProvider::class); $factory = new DefaultCacheFactory($this->regionsConfig, $cache); + + $barCache = new CacheMetadata(CacheUsage::READ_ONLY, 'bar'); + $barRegion = $factory->getRegion($barCache); - self::assertInstanceOf( - DefaultMultiGetRegion::class, - $factory->getRegion( - [ - 'region' => 'bar', - 'usage' => CacheUsage::READ_ONLY, - ] - ) - ); + self::assertInstanceOf(DefaultMultiGetRegion::class, $barRegion); } } diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php index 71d7630b119..45229ac57ab 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php @@ -30,7 +30,8 @@ class DefaultCacheTest extends OrmTestCase protected function setUp() { - parent::enableSecondLevelCache(); + $this->enableSecondLevelCache(); + parent::setUp(); $this->em = $this->getTestEntityManager(); @@ -87,13 +88,12 @@ public function testGetCollectionCacheRegionAccess() public function testContainsEntity() { - $identifier = ['id'=>1]; - $className = Country::class; + $identifier = ['id' => 1]; $cacheEntry = array_merge($identifier, ['name' => 'Brazil']); self::assertFalse($this->cache->containsEntity(Country::class, 1)); - $this->putEntityCacheEntry($className, $identifier, $cacheEntry); + $this->putEntityCacheEntry(Country::class, $identifier, $cacheEntry); self::assertTrue($this->cache->containsEntity(Country::class, 1)); self::assertFalse($this->cache->containsEntity(CmsUser::class, 1)); @@ -101,11 +101,10 @@ public function testContainsEntity() public function testEvictEntity() { - $identifier = ['id'=>1]; - $className = Country::class; + $identifier = ['id' => 1]; $cacheEntry = array_merge($identifier, ['name' => 'Brazil']); - $this->putEntityCacheEntry($className, $identifier, $cacheEntry); + $this->putEntityCacheEntry(Country::class, $identifier, $cacheEntry); self::assertTrue($this->cache->containsEntity(Country::class, 1)); @@ -117,11 +116,10 @@ public function testEvictEntity() public function testEvictEntityRegion() { - $identifier = ['id'=>1]; - $className = Country::class; + $identifier = ['id' => 1]; $cacheEntry = array_merge($identifier, ['name' => 'Brazil']); - $this->putEntityCacheEntry($className, $identifier, $cacheEntry); + $this->putEntityCacheEntry(Country::class, $identifier, $cacheEntry); self::assertTrue($this->cache->containsEntity(Country::class, 1)); @@ -133,11 +131,10 @@ public function testEvictEntityRegion() public function testEvictEntityRegions() { - $identifier = ['id'=>1]; - $className = Country::class; + $identifier = ['id' => 1]; $cacheEntry = array_merge($identifier, ['name' => 'Brazil']); - $this->putEntityCacheEntry($className, $identifier, $cacheEntry); + $this->putEntityCacheEntry(Country::class, $identifier, $cacheEntry); self::assertTrue($this->cache->containsEntity(Country::class, 1)); @@ -148,17 +145,16 @@ public function testEvictEntityRegions() public function testContainsCollection() { - $ownerId = ['id'=>1]; - $className = State::class; - $association = 'cities'; - $cacheEntry = [ + $ownerId = ['id' => 1]; + $association = 'cities'; + $cacheEntry = [ ['id' => 11], ['id' => 12], ]; self::assertFalse($this->cache->containsCollection(State::class, $association, 1)); - $this->putCollectionCacheEntry($className, $association, $ownerId, $cacheEntry); + $this->putCollectionCacheEntry(State::class, $association, $ownerId, $cacheEntry); self::assertTrue($this->cache->containsCollection(State::class, $association, 1)); self::assertFalse($this->cache->containsCollection(CmsUser::class, 'phonenumbers', 1)); @@ -166,19 +162,18 @@ public function testContainsCollection() public function testEvictCollection() { - $ownerId = ['id'=>1]; - $className = State::class; - $association = 'cities'; - $cacheEntry = [ + $ownerId = ['id' => 1]; + $association = 'cities'; + $cacheEntry = [ ['id' => 11], ['id' => 12], ]; - $this->putCollectionCacheEntry($className, $association, $ownerId, $cacheEntry); + $this->putCollectionCacheEntry(State::class, $association, $ownerId, $cacheEntry); self::assertTrue($this->cache->containsCollection(State::class, $association, 1)); - $this->cache->evictCollection($className, $association, $ownerId); + $this->cache->evictCollection(State::class, $association, $ownerId); $this->cache->evictCollection(CmsUser::class, 'phonenumbers', 1); self::assertFalse($this->cache->containsCollection(State::class, $association, 1)); @@ -186,19 +181,18 @@ public function testEvictCollection() public function testEvictCollectionRegion() { - $ownerId = ['id'=>1]; - $className = State::class; - $association = 'cities'; - $cacheEntry = [ + $ownerId = ['id' => 1]; + $association = 'cities'; + $cacheEntry = [ ['id' => 11], ['id' => 12], ]; - $this->putCollectionCacheEntry($className, $association, $ownerId, $cacheEntry); + $this->putCollectionCacheEntry(State::class, $association, $ownerId, $cacheEntry); self::assertTrue($this->cache->containsCollection(State::class, $association, 1)); - $this->cache->evictCollectionRegion($className, $association); + $this->cache->evictCollectionRegion(State::class, $association); $this->cache->evictCollectionRegion(CmsUser::class, 'phonenumbers'); self::assertFalse($this->cache->containsCollection(State::class, $association, 1)); @@ -206,15 +200,14 @@ public function testEvictCollectionRegion() public function testEvictCollectionRegions() { - $ownerId = ['id'=>1]; - $className = State::class; - $association = 'cities'; - $cacheEntry = [ + $ownerId = ['id' => 1]; + $association = 'cities'; + $cacheEntry = [ ['id' => 11], ['id' => 12], ]; - $this->putCollectionCacheEntry($className, $association, $ownerId, $cacheEntry); + $this->putCollectionCacheEntry(State::class, $association, $ownerId, $cacheEntry); self::assertTrue($this->cache->containsCollection(State::class, $association, 1)); diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php index ed6b66568c7..d931ae31fee 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php @@ -3,24 +3,25 @@ namespace Doctrine\Tests\ORM\Cache; use Doctrine\Common\Collections\Collection; -use Doctrine\ORM\Cache\EntityCacheKey; -use Doctrine\ORM\Cache\QueryCache; -use Doctrine\Tests\Mocks\TimestampRegionMock; use Doctrine\DBAL\Types\Type; -use Doctrine\Tests\OrmTestCase; -use Doctrine\Tests\Mocks\CacheRegionMock; use Doctrine\ORM\Cache\DefaultQueryCache; +use Doctrine\ORM\Cache\EntityCacheEntry; +use Doctrine\ORM\Cache\EntityCacheKey; +use Doctrine\ORM\Cache\QueryCache; use Doctrine\ORM\Cache\QueryCacheKey; use Doctrine\ORM\Cache\QueryCacheEntry; +use Doctrine\ORM\Cache; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\CacheMetadata; use Doctrine\ORM\Query\ResultSetMappingBuilder; -use Doctrine\Tests\Models\Cache\Country; +use Doctrine\Tests\Mocks\TimestampRegionMock; +use Doctrine\Tests\Mocks\CacheRegionMock; use Doctrine\Tests\Models\Cache\City; +use Doctrine\Tests\Models\Cache\Country; use Doctrine\Tests\Models\Cache\State; use Doctrine\Tests\Models\Cache\Restaurant; -use Doctrine\ORM\EntityManagerInterface; use Doctrine\Tests\Models\Generic\BooleanModel; -use Doctrine\ORM\Cache\EntityCacheEntry; -use Doctrine\ORM\Cache; +use Doctrine\Tests\OrmTestCase; /** * @group DDC-2183 @@ -687,7 +688,7 @@ public function buildQueryCache(EntityManagerInterface $em, $regionName = null) return $this->queryCache; } - public function getRegion(array $cache) + public function getRegion(CacheMetadata $cache) { return $this->region; } diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php index 07f26ca200a..43ddd57287f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Functional; use Doctrine\ORM\Cache\DefaultCacheFactory; +use Doctrine\ORM\Mapping\CacheMetadata; use Doctrine\ORM\Mapping\CacheUsage; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Tests\Mocks\ConcurrentRegionMock; @@ -30,6 +31,7 @@ class SecondLevelCacheConcurrentTest extends SecondLevelCacheAbstractTest protected function setUp() { $this->enableSecondLevelCache(); + parent::setUp(); $this->cacheFactory = new CacheFactorySecondLevelCacheConcurrentTest($this->getSharedSecondLevelCacheDriverImpl()); @@ -41,7 +43,7 @@ protected function setUp() $this->countryMetadata = $this->em->getClassMetadata(Country::class); $countryMetadata = clone $this->countryMetadata; - $countryMetadata->cache['usage'] = CacheUsage::NONSTRICT_READ_WRITE; + $countryMetadata->cache->setUsage(CacheUsage::NONSTRICT_READ_WRITE); $this->em->getMetadataFactory()->setMetadataFor(Country::class, $countryMetadata); } @@ -138,9 +140,9 @@ public function __construct(Cache $cache) $this->cache = $cache; } - public function getRegion(array $cache) + public function getRegion(CacheMetadata $cache) { - $region = new DefaultRegion($cache['region'], $this->cache); + $region = new DefaultRegion($cache->getRegion(), $this->cache); $mock = new ConcurrentRegionMock($region); return $mock; diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index e37dbdd586b..3b3831a7314 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -1029,24 +1029,21 @@ public function testSecondLevelCacheMapping() $factory = $this->createClassMetadataFactory(); $class = $factory->getMetadataFor(City::class); - self::assertArrayHasKey('usage', $class->cache); - self::assertArrayHasKey('region', $class->cache); - self::assertEquals(Mapping\CacheUsage::READ_ONLY, $class->cache['usage']); - self::assertEquals('doctrine_tests_models_cache_city', $class->cache['region']); + self::assertNotNull($class->cache); + self::assertEquals(Mapping\CacheUsage::READ_ONLY, $class->cache->getUsage()); + self::assertEquals('doctrine_tests_models_cache_city', $class->cache->getRegion()); self::assertArrayHasKey('state', $class->associationMappings); self::assertArrayHasKey('cache', $class->associationMappings['state']); - self::assertArrayHasKey('usage', $class->associationMappings['state']['cache']); - self::assertArrayHasKey('region', $class->associationMappings['state']['cache']); - self::assertEquals(Mapping\CacheUsage::READ_ONLY, $class->associationMappings['state']['cache']['usage']); - self::assertEquals('doctrine_tests_models_cache_city__state', $class->associationMappings['state']['cache']['region']); + self::assertNotNull($class->associationMappings['state']['cache']); + self::assertEquals(Mapping\CacheUsage::READ_ONLY, $class->associationMappings['state']['cache']->getUsage()); + self::assertEquals('doctrine_tests_models_cache_city__state', $class->associationMappings['state']['cache']->getRegion()); self::assertArrayHasKey('attractions', $class->associationMappings); self::assertArrayHasKey('cache', $class->associationMappings['attractions']); - self::assertArrayHasKey('usage', $class->associationMappings['attractions']['cache']); - self::assertArrayHasKey('region', $class->associationMappings['attractions']['cache']); - self::assertEquals(Mapping\CacheUsage::READ_ONLY, $class->associationMappings['attractions']['cache']['usage']); - self::assertEquals('doctrine_tests_models_cache_city__attractions', $class->associationMappings['attractions']['cache']['region']); + self::assertNotNull($class->associationMappings['attractions']['cache']); + self::assertEquals(Mapping\CacheUsage::READ_ONLY, $class->associationMappings['attractions']['cache']->getUsage()); + self::assertEquals('doctrine_tests_models_cache_city__attractions', $class->associationMappings['attractions']['cache']->getRegion()); } /** From 13d6d9c3e1bc9fc9ec420fbfd621a7dd606f5623 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 13 Jan 2017 23:59:26 -0500 Subject: [PATCH 097/275] Renamed ClassMetadata->enableCache to ClasMetadata->setCache --- .../Mapping/Builder/CacheMetadataBuilder.php | 4 ++-- .../Mapping/Builder/ClassMetadataBuilder.php | 16 ++++++++-------- lib/Doctrine/ORM/Mapping/CacheMetadata.php | 10 +++++----- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 18 ++++++------------ .../ORM/Mapping/Driver/AnnotationDriver.php | 2 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 6 ++---- .../EventListener/CacheMetadataListener.php | 11 ++++------- .../php/Doctrine.Tests.Models.Cache.City.php | 2 +- .../php/Doctrine.Tests.ORM.Mapping.PHPSLC.php | 2 +- 9 files changed, 30 insertions(+), 41 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/Builder/CacheMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/CacheMetadataBuilder.php index 9d5828328cc..48a883d3367 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/CacheMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/CacheMetadataBuilder.php @@ -45,11 +45,11 @@ public function withUsage(string $usage) } /** - * @param string $region + * @param string|null $region * * @return self */ - public function withRegion(string $region) + public function withRegion(string $region = null) { $this->region = $region; diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php index 96f144223f7..532a7df5ccb 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php @@ -152,16 +152,16 @@ public function withTable(TableMetadata $tableMetadata) * @param string $usage * @param string|null $region */ - public function setCache($usage, $region = null) + public function withCache(string $usage, string $region = null) { - $region = $region ?: strtolower(str_replace('\\', '_', $this->cm->rootEntityName)); + $cacheBuilder = new CacheMetadataBuilder(); - $this->cm->enableCache( - [ - 'usage' => $usage, - 'region' => $region, - ] - ); + $cacheBuilder + ->withUsage(strtoupper($usage)) + ->withRegion($region) + ; + + $this->cm->setCache($cacheBuilder->build()); } /** diff --git a/lib/Doctrine/ORM/Mapping/CacheMetadata.php b/lib/Doctrine/ORM/Mapping/CacheMetadata.php index 354673b9fb3..343c9712af1 100644 --- a/lib/Doctrine/ORM/Mapping/CacheMetadata.php +++ b/lib/Doctrine/ORM/Mapping/CacheMetadata.php @@ -27,16 +27,16 @@ class CacheMetadata /** @var string */ private $usage; - /** @var string */ + /** @var string|null */ private $region; /** * Constructor. * - * @param string $usage - * @param string $region + * @param string $usage + * @param string|null $region */ - public function __construct(string $usage, string $region) + public function __construct(string $usage, string $region = null) { $this->usage = $usage; $this->region = $region; @@ -59,7 +59,7 @@ public function setUsage(string $usage) } /** - * @return string + * @return string|null */ public function getRegion() { diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index f0ca44bc200..768fba1ad11 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -857,23 +857,17 @@ public function getReflectionClass() } /** - * @param array $cache - * - * @todo Consider using CacheMetadata instead + * @param null|CacheMetadata $cache * * @return void */ - public function enableCache(array $cache) + public function setCache(CacheMetadata $cache = null) { - $defaultRegion = strtolower(str_replace('\\', '_', $this->rootEntityName)); - $builder = new Builder\CacheMetadataBuilder(); - - $builder - ->withUsage($cache['usage'] ?? CacheUsage::READ_ONLY) - ->withRegion($cache['region'] ?? $defaultRegion) - ; + if ($cache && ! $cache->getRegion()) { + $cache->setRegion(strtolower(str_replace('\\', '_', $this->rootEntityName))); + } - $this->cache = $builder->build(); + $this->cache = $cache; } /** diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index dc1c6e74bc2..fe54a7e7613 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -159,7 +159,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat if (isset($classAnnotations[Annotation\Cache::class])) { $cacheAnnot = $classAnnotations[Annotation\Cache::class]; - $builder->setCache( + $builder->withCache( constant(sprintf('%s::%s', CacheUsage::class, $cacheAnnot->usage)), $cacheAnnot->region ); diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index baf2096d152..24d14e094df 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -145,10 +145,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) if (isset($xmlRoot->cache)) { $cache = $this->convertCacheElementToCacheMetadata($xmlRoot->cache, $metadata); - $metadata->enableCache([ - 'usage' => $cache->getUsage(), - 'region' => $cache->getRegion(), - ]); + $metadata->setCache($cache); } // Evaluate named queries @@ -182,6 +179,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) foreach ($xmlRoot->{'sql-result-set-mappings'}->{'sql-result-set-mapping'} as $rsmElement) { $entities = []; $columns = []; + foreach ($rsmElement as $entityElement) { // if (isset($entityElement['entity-class'])) { diff --git a/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php b/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php index a6aa127616a..fba3eaf600e 100644 --- a/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php +++ b/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php @@ -4,12 +4,12 @@ use Doctrine\Common\Persistence\Event\LoadClassMetadataEventArgs; use Doctrine\ORM\EntityManager; +use Doctrine\ORM\Mapping\CacheMetadata; use Doctrine\ORM\Mapping\CacheUsage; use Doctrine\ORM\Mapping\ClassMetadata; class CacheMetadataListener { - /** * Tracks which entities we have already forced caching enabled on. This is * important to avoid some potential infinite-recursion issues. @@ -64,15 +64,11 @@ protected function enableCaching(ClassMetadata $metadata, EntityManager $em) return; // Already handled in the past } - $cache = [ - 'usage' => CacheUsage::NONSTRICT_READ_WRITE, - ]; - if ($metadata->isVersioned()) { return; } - $metadata->enableCache($cache); + $metadata->setCache(new CacheMetadata(CacheUsage::NONSTRICT_READ_WRITE)); $this->recordVisit($metadata); @@ -80,10 +76,11 @@ protected function enableCaching(ClassMetadata $metadata, EntityManager $em) // given caching settings foreach ($metadata->associationMappings as $mapping) { $targetMeta = $em->getClassMetadata($mapping['targetEntity']); + $this->enableCaching($targetMeta, $em); if ($this->isVisited($targetMeta)) { - $metadata->enableAssociationCache($mapping['fieldName'], $cache); + $metadata->enableAssociationCache($mapping['fieldName'], []); } } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index 7413fcfc636..1bcf0fea9b3 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -15,7 +15,7 @@ $metadata->setInheritanceType(Mapping\InheritanceType::NONE); $metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); $metadata->setIdGeneratorType(Mapping\GeneratorType::IDENTITY); -$metadata->enableCache(['usage' => Mapping\CacheUsage::READ_ONLY]); +$metadata->setCache(new Mapping\CacheMetadata(Mapping\CacheUsage::READ_ONLY)); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php index ca43ce34a15..579c7194879 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php @@ -2,7 +2,7 @@ use Doctrine\ORM\Mapping; -$metadata->enableCache(['usage' => Mapping\CacheUsage::READ_ONLY]); +$metadata->setCache(new Mapping\CacheMetadata(Mapping\CacheUsage::READ_ONLY)); $metadata->mapManyToOne( [ From 0c00994075190322c65564d6ece41e4b04340646 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 14 Jan 2017 00:11:38 -0500 Subject: [PATCH 098/275] Improvement over last commit --- .../ORM/Mapping/Builder/CacheMetadataBuilder.php | 4 ++-- .../ORM/Mapping/Builder/ClassMetadataBuilder.php | 6 +++--- lib/Doctrine/ORM/Mapping/CacheMetadata.php | 10 +++++----- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 4 ---- lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php | 6 ++---- .../Tests/EventListener/CacheMetadataListener.php | 7 ++++++- .../Mapping/php/Doctrine.Tests.Models.Cache.City.php | 7 ++++++- .../Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php | 7 ++++++- 8 files changed, 30 insertions(+), 21 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/Builder/CacheMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/CacheMetadataBuilder.php index 48a883d3367..9d5828328cc 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/CacheMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/CacheMetadataBuilder.php @@ -45,11 +45,11 @@ public function withUsage(string $usage) } /** - * @param string|null $region + * @param string $region * * @return self */ - public function withRegion(string $region = null) + public function withRegion(string $region) { $this->region = $region; diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php index 532a7df5ccb..f9d4f9127de 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php @@ -149,10 +149,10 @@ public function withTable(TableMetadata $tableMetadata) } /** - * @param string $usage - * @param string|null $region + * @param string $usage + * @param string $region */ - public function withCache(string $usage, string $region = null) + public function withCache(string $usage, string $region) { $cacheBuilder = new CacheMetadataBuilder(); diff --git a/lib/Doctrine/ORM/Mapping/CacheMetadata.php b/lib/Doctrine/ORM/Mapping/CacheMetadata.php index 343c9712af1..354673b9fb3 100644 --- a/lib/Doctrine/ORM/Mapping/CacheMetadata.php +++ b/lib/Doctrine/ORM/Mapping/CacheMetadata.php @@ -27,16 +27,16 @@ class CacheMetadata /** @var string */ private $usage; - /** @var string|null */ + /** @var string */ private $region; /** * Constructor. * - * @param string $usage - * @param string|null $region + * @param string $usage + * @param string $region */ - public function __construct(string $usage, string $region = null) + public function __construct(string $usage, string $region) { $this->usage = $usage; $this->region = $region; @@ -59,7 +59,7 @@ public function setUsage(string $usage) } /** - * @return string|null + * @return string */ public function getRegion() { diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 768fba1ad11..7b6e6cd9899 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -863,10 +863,6 @@ public function getReflectionClass() */ public function setCache(CacheMetadata $cache = null) { - if ($cache && ! $cache->getRegion()) { - $cache->setRegion(strtolower(str_replace('\\', '_', $this->rootEntityName))); - } - $this->cache = $cache; } diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index fe54a7e7613..cfb201d882d 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -158,11 +158,9 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat // Evaluate @Cache annotation if (isset($classAnnotations[Annotation\Cache::class])) { $cacheAnnot = $classAnnotations[Annotation\Cache::class]; + $cache = $this->convertCacheAnnotationToCacheMetadata($cacheAnnot, $metadata); - $builder->withCache( - constant(sprintf('%s::%s', CacheUsage::class, $cacheAnnot->usage)), - $cacheAnnot->region - ); + $metadata->setCache($cache); } // Evaluate NamedNativeQueries annotation diff --git a/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php b/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php index fba3eaf600e..9444bcf20dd 100644 --- a/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php +++ b/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php @@ -68,7 +68,12 @@ protected function enableCaching(ClassMetadata $metadata, EntityManager $em) return; } - $metadata->setCache(new CacheMetadata(CacheUsage::NONSTRICT_READ_WRITE)); + $metadata->setCache( + new CacheMetadata( + CacheUsage::NONSTRICT_READ_WRITE, + strtolower(str_replace('\\', '_', $metadata->rootEntityName)) + ) + ); $this->recordVisit($metadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index 1bcf0fea9b3..66ea269d98c 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -15,7 +15,12 @@ $metadata->setInheritanceType(Mapping\InheritanceType::NONE); $metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); $metadata->setIdGeneratorType(Mapping\GeneratorType::IDENTITY); -$metadata->setCache(new Mapping\CacheMetadata(Mapping\CacheUsage::READ_ONLY)); +$metadata->setCache( + new Mapping\CacheMetadata( + Mapping\CacheUsage::READ_ONLY, + 'doctrine_tests_models_cache_city' + ) +); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php index 579c7194879..02d384d5ae0 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php @@ -2,7 +2,12 @@ use Doctrine\ORM\Mapping; -$metadata->setCache(new Mapping\CacheMetadata(Mapping\CacheUsage::READ_ONLY)); +$metadata->setCache( + new Mapping\CacheMetadata( + Mapping\CacheUsage::READ_ONLY, + 'doctrine_tests_orm_mapping_phpslc' + ) +); $metadata->mapManyToOne( [ From f66e65ac58d632e0ac92630e76c891e0812e7003 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 14 Jan 2017 00:23:50 -0500 Subject: [PATCH 099/275] CacheMetadata is now immutable --- lib/Doctrine/ORM/Mapping/CacheMetadata.php | 16 ------ .../ORM/Cache/DefaultCacheFactoryTest.php | 54 ++++++++++++++----- .../SecondLevelCacheConcurrentTest.php | 21 +++----- 3 files changed, 49 insertions(+), 42 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/CacheMetadata.php b/lib/Doctrine/ORM/Mapping/CacheMetadata.php index 354673b9fb3..cdd77dd8241 100644 --- a/lib/Doctrine/ORM/Mapping/CacheMetadata.php +++ b/lib/Doctrine/ORM/Mapping/CacheMetadata.php @@ -50,14 +50,6 @@ public function getUsage() return $this->usage; } - /** - * @param string $usage - */ - public function setUsage(string $usage) - { - $this->usage = $usage; - } - /** * @return string */ @@ -65,12 +57,4 @@ public function getRegion() { return $this->region; } - - /** - * @param string $region - */ - public function setRegion(string $region) - { - $this->region = $region; - } } diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php index 74056fe5bef..209250c26cc 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php @@ -83,7 +83,12 @@ public function testBuildCachedEntityPersisterReadOnly() new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl()) ); - $metadata->cache->setUsage(CacheUsage::READ_ONLY); + $metadata->setCache( + new CacheMetadata( + CacheUsage::READ_ONLY, + 'doctrine_tests_models_cache_state' + ) + ); $this->factory->expects($this->once()) ->method('getRegion') @@ -105,7 +110,12 @@ public function testBuildCachedEntityPersisterReadWrite() new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl()) ); - $metadata->cache->setUsage(CacheUsage::READ_WRITE); + $metadata->setCache( + new CacheMetadata( + CacheUsage::READ_WRITE, + 'doctrine_tests_models_cache_state' + ) + ); $this->factory->expects($this->once()) ->method('getRegion') @@ -127,7 +137,12 @@ public function testBuildCachedEntityPersisterNonStrictReadWrite() new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl()) ); - $metadata->cache->setUsage(CacheUsage::NONSTRICT_READ_WRITE); + $metadata->setCache( + new CacheMetadata( + CacheUsage::NONSTRICT_READ_WRITE, + 'doctrine_tests_models_cache_state' + ) + ); $this->factory->expects($this->once()) ->method('getRegion') @@ -149,8 +164,11 @@ public function testBuildCachedCollectionPersisterReadOnly() $region = new ConcurrentRegionMock( new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl()) ); - - $mapping['cache']->setUsage(CacheUsage::READ_ONLY); + + $mapping['cache'] = new CacheMetadata( + CacheUsage::READ_ONLY, + 'doctrine_tests_models_cache_state__cities' + ); $this->factory->expects($this->once()) ->method('getRegion') @@ -174,7 +192,10 @@ public function testBuildCachedCollectionPersisterReadWrite() new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl()) ); - $mapping['cache']->setUsage(CacheUsage::READ_WRITE); + $mapping['cache'] = new CacheMetadata( + CacheUsage::READ_WRITE, + 'doctrine_tests_models_cache_state__cities' + ); $this->factory->expects($this->once()) ->method('getRegion') @@ -197,7 +218,10 @@ public function testBuildCachedCollectionPersisterNonStrictReadWrite() new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl()) ); - $mapping['cache']->setUsage(CacheUsage::NONSTRICT_READ_WRITE); + $mapping['cache'] = new CacheMetadata( + CacheUsage::NONSTRICT_READ_WRITE, + 'doctrine_tests_models_cache_state__cities' + ); $this->factory->expects($this->once()) ->method('getRegion') @@ -258,7 +282,12 @@ public function testBuildCachedEntityPersisterNonStrictException() $metadata = clone $em->getClassMetadata(State::class); $persister = new BasicEntityPersister($em, $metadata); - $metadata->cache->setUsage(-1); + $metadata->setCache( + new CacheMetadata( + -1, + 'doctrine_tests_models_cache_state' + ) + ); $this->factory->buildCachedEntityPersister($em, $persister, $metadata); } @@ -274,11 +303,10 @@ public function testBuildCachedCollectionPersisterException() $mapping = $metadata->getAssociationMapping('cities'); $persister = new OneToManyPersister($em); - $cache = clone $mapping['cache']; - - $cache->setUsage(-1); - - $mapping['cache'] = $cache; + $mapping['cache'] = new CacheMetadata( + -1, + 'doctrine_tests_models_cache_state__cities' + ); $this->factory->buildCachedCollectionPersister($em, $persister, $mapping); } diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php index 43ddd57287f..380f86ed1a6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php @@ -40,19 +40,14 @@ protected function setUp() ->getSecondLevelCacheConfiguration() ->setCacheFactory($this->cacheFactory); - $this->countryMetadata = $this->em->getClassMetadata(Country::class); - $countryMetadata = clone $this->countryMetadata; - - $countryMetadata->cache->setUsage(CacheUsage::NONSTRICT_READ_WRITE); - - $this->em->getMetadataFactory()->setMetadataFor(Country::class, $countryMetadata); - } - - protected function tearDown() - { - parent::tearDown(); - - $this->em->getMetadataFactory()->setMetadataFor(Country::class, $this->countryMetadata); + $this->countryMetadata = clone $this->em->getClassMetadata(Country::class); + + $this->countryMetadata->setCache( + new CacheMetadata( + CacheUsage::NONSTRICT_READ_WRITE, + 'doctrine_tests_models_cache_country' + ) + ); } public function testBasicConcurrentEntityReadLock() From d40e1034baaad382f74915cf410f381400a73b88 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 14 Jan 2017 11:10:23 -0500 Subject: [PATCH 100/275] Removed ClassMetadata->containsForeignIdentifier --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 14 -------- .../ORM/Mapping/ClassMetadataFactory.php | 4 --- .../Entity/BasicEntityPersister.php | 35 ++++++------------- lib/Doctrine/ORM/Query/SqlWalker.php | 5 --- .../Command/MappingDescribeCommand.php | 1 - lib/Doctrine/ORM/Tools/SchemaValidator.php | 9 +++-- lib/Doctrine/ORM/UnitOfWork.php | 15 +++----- .../Tests/ORM/Mapping/ClassMetadataTest.php | 1 - 8 files changed, 21 insertions(+), 63 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 7b6e6cd9899..710c08d737f 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -223,15 +223,6 @@ class ClassMetadata implements ClassMetadataInterface */ public $isIdentifierComposite = false; - /** - * READ-ONLY: Flag indicating whether the identifier/primary key contains at least one foreign key association. - * - * This flag is necessary because some code blocks require special treatment of this cases. - * - * @var boolean - */ - public $containsForeignIdentifier = false; - /** * READ-ONLY: The inheritance mapping type used by the class. * @@ -661,10 +652,6 @@ public function __sleep() $serialized[] = 'isEmbeddedClass'; } - if ($this->containsForeignIdentifier) { - $serialized[] = 'containsForeignIdentifier'; - } - if ($this->isVersioned()) { $serialized[] = 'versionProperty'; } @@ -1151,7 +1138,6 @@ protected function validateAndCompleteAssociationMapping(array $mapping) } $this->identifier[] = $mapping['fieldName']; - $this->containsForeignIdentifier = true; } // Check for composite key diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 2eb8069a834..15b4169d14a 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -213,10 +213,6 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS $class->cache = clone $parent->cache; } - if ($parent->containsForeignIdentifier) { - $class->containsForeignIdentifier = true; - } - if ( ! empty($parent->namedQueries)) { $this->addInheritedNamedQueries($class, $parent); } diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 3e099306204..27924147238 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -985,6 +985,7 @@ private function getManyToManyStatement(array $assoc, $sourceEntity, $offset = n { $this->switchPersisterContext($offset, $limit); + /** @var ClassMetadata $sourceClass */ $sourceClass = $this->em->getClassMetadata($assoc['sourceEntity']); $class = $sourceClass; $association = $assoc; @@ -1003,38 +1004,22 @@ private function getManyToManyStatement(array $assoc, $sourceEntity, $offset = n foreach ($joinColumns as $joinColumn) { $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $referencedColumnName = $joinColumn->getReferencedColumnName(); + $fieldName = $sourceClass->getFieldForColumn($referencedColumnName); + $value = $sourceClass->reflFields[$fieldName]->getValue($sourceEntity); - switch (true) { - case $sourceClass->containsForeignIdentifier: - $field = $sourceClass->getFieldForColumn($referencedColumnName); - $value = $sourceClass->reflFields[$field]->getValue($sourceEntity); + if (isset($sourceClass->associationMappings[$fieldName])) { + $targetMapping = $sourceClass->associationMappings[$fieldName]; + $targetClass = $this->em->getClassMetadata($targetMapping['targetEntity']); - if (isset($sourceClass->associationMappings[$field])) { - $targetClass = $this->em->getClassMetadata($sourceClass->associationMappings[$field]['targetEntity']); - - $value = $this->em->getUnitOfWork()->getEntityIdentifier($value); - $value = $value[$targetClass->identifier[0]]; - } - - break; - - case isset($sourceClass->fieldNames[$referencedColumnName]): - $field = $sourceClass->fieldNames[$referencedColumnName]; - $value = $sourceClass->reflFields[$field]->getValue($sourceEntity); - - break; - - default: - throw MappingException::joinColumnMustPointToMappedField( - $sourceClass->name, $referencedColumnName - ); + $id = $this->em->getUnitOfWork()->getEntityIdentifier($value); + $value = $id[$targetClass->identifier[0]]; } $criteria[$joinTableName . '.' . $quotedColumnName] = $value; $parameters[] = [ 'value' => $value, - 'field' => $field, + 'field' => $fieldName, 'class' => $sourceClass, ]; } @@ -1829,7 +1814,7 @@ private function getOneToManyStatement(array $assoc, $sourceEntity, $offset = nu $field = $sourceClass->getFieldForColumn($joinColumn->getReferencedColumnName()); $value = $sourceClass->reflFields[$field]->getValue($sourceEntity); - if ($sourceClass->containsForeignIdentifier && isset($sourceClass->associationMappings[$field])) { + if (isset($sourceClass->associationMappings[$field])) { $targetClass = $this->em->getClassMetadata($sourceClass->associationMappings[$field]['targetEntity']); $value = $this->em->getUnitOfWork()->getEntityIdentifier($value); diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 608b6cf872f..5ab86abc116 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -767,11 +767,6 @@ public function walkSelectClause($selectClause) $this->rsm->addMetaResult($dqlAlias, $sqlColumnAlias, $discrColumnName, false, $discrColumnType); } - // Add foreign key columns to SQL, if necessary - if ( ! $addMetaColumns && ! $class->containsForeignIdentifier) { - continue; - } - // Add foreign key columns of class and also parent classes foreach ($class->associationMappings as $assoc) { if ( ! ($assoc['isOwningSide'] && $assoc['type'] & ClassMetadata::TO_ONE)) { diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index 9fb01efa831..006ce792932 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -117,7 +117,6 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage $this->formatTable($metadata->table), [ $this->formatField('Composite identifier?', $metadata->isIdentifierComposite), - $this->formatField('Foreign identifier?', $metadata->containsForeignIdentifier), $this->formatField('Change tracking policy', $metadata->changeTrackingPolicy), $this->formatField('Versioned?', $metadata->isVersioned()), $this->formatField('Version field', ($metadata->isVersioned() ? $metadata->versionProperty->getName() : '')), diff --git a/lib/Doctrine/ORM/Tools/SchemaValidator.php b/lib/Doctrine/ORM/Tools/SchemaValidator.php index b206f429cac..57adac827ae 100644 --- a/lib/Doctrine/ORM/Tools/SchemaValidator.php +++ b/lib/Doctrine/ORM/Tools/SchemaValidator.php @@ -21,7 +21,6 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\JoinColumnMetadata; /** @@ -100,9 +99,13 @@ public function validateClass(ClassMetadata $class) $ce[] = "The association " . $class . "#" . $fieldName . " cannot be defined as both inverse and owning."; } - $targetMetadata = $cmf->getMetadataFor($assoc['targetEntity']); + /** @var ClassMetadata $targetmetadata */ + $targetMetadata = $cmf->getMetadataFor($assoc['targetEntity']); + $containsForeignId = array_filter($targetMetadata->identifier, function ($identifier) use ($targetMetadata) { + return isset($targetMetadata->associationMappings[$identifier]); + }); - if (isset($assoc['id']) && $targetMetadata->containsForeignIdentifier) { + if (isset($assoc['id']) && count($containsForeignId)) { $ce[] = "Cannot map association '" . $class->name. "#". $fieldName ." as identifier, because " . "the target entity '". $targetMetadata->name . "' also maps an association as identifier."; } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index a999dcab651..95a796db5b4 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -1457,13 +1457,11 @@ public function getEntityState($entity, $assume = null) $class = $this->em->getClassMetadata(get_class($entity)); $id = $class->getIdentifierValues($entity); - if ( ! $id) { + if (! $id) { return self::STATE_NEW; } - if ($class->containsForeignIdentifier) { - $id = $this->identifierFlattener->flattenIdentifier($class, $id); - } + $flatId = $this->identifierFlattener->flattenIdentifier($class, $id); if ($class->generatorType === GeneratorType::NONE) { // Check for a version field, if available, to avoid a db lookup. @@ -1474,7 +1472,7 @@ public function getEntityState($entity, $assume = null) } // Last try before db lookup: check the identity map. - if ($this->tryGetById($id, $class->rootEntityName)) { + if ($this->tryGetById($flatId, $class->rootEntityName)) { return self::STATE_DETACHED; } @@ -1492,7 +1490,7 @@ public function getEntityState($entity, $assume = null) // the last resort: a db lookup // Last try before db lookup: check the identity map. - if ($this->tryGetById($id, $class->rootEntityName)) { + if ($this->tryGetById($flatId, $class->rootEntityName)) { return self::STATE_DETACHED; } @@ -1831,10 +1829,7 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, arra $this->mergeEntityStateIntoManagedCopy($entity, $managedCopy); $this->persistNew($class, $managedCopy); } else { - $flatId = ($class->containsForeignIdentifier) - ? $this->identifierFlattener->flattenIdentifier($class, $id) - : $id; - + $flatId = $this->identifierFlattener->flattenIdentifier($class, $id); $managedCopy = $this->tryGetById($flatId, $class->rootEntityName); if ($managedCopy) { diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 1606918fdf0..25de38ff997 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -643,7 +643,6 @@ public function testMapIdentifierAssociation() ] ); - self::assertTrue($cm->containsForeignIdentifier, "Identifier Association should set 'containsForeignIdentifier' boolean flag."); self::assertEquals(["article"], $cm->identifier); } From 361ad074551a3ee826b6f7e819051f65465f673c Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 16 Jan 2017 23:52:50 -0500 Subject: [PATCH 101/275] Added foreign key columns to the maps of columns to property names. --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 64 ++---------- .../Collection/ManyToManyPersister.php | 24 ++--- .../Collection/OneToManyPersister.php | 3 +- .../Entity/BasicEntityPersister.php | 41 ++++---- .../ORM/Query/ResultSetMappingBuilder.php | 99 +++++++++---------- lib/Doctrine/ORM/Query/SqlWalker.php | 23 ++--- lib/Doctrine/ORM/Tools/SchemaTool.php | 40 ++++---- lib/Doctrine/ORM/UnitOfWork.php | 2 +- lib/Doctrine/ORM/Utility/PersisterHelper.php | 8 +- .../ORM/Functional/Ticket/DDC1400Test.php | 20 +--- .../ORM/Functional/Ticket/DDC522Test.php | 29 +++--- .../ORM/Mapping/AbstractMappingDriverTest.php | 17 +++- .../Tests/ORM/Mapping/ClassMetadataTest.php | 50 ---------- 13 files changed, 160 insertions(+), 260 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 710c08d737f..b0fe8ef9963 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -978,21 +978,6 @@ public function getAssociationMappings() return $this->associationMappings; } - /** - * Gets the field name for a column name. - * If no field name can be found the column name is returned. - * - * @param string $columnName The column name. - * - * @return string The column alias. - */ - public function getFieldName($columnName) - { - return isset($this->fieldNames[$columnName]) - ? $this->fieldNames[$columnName] - : $columnName; - } - /** * Gets the named query. * @@ -1241,6 +1226,8 @@ protected function validateAndCompleteOneToOneMapping(array $mapping) if (! $joinColumn->getReferencedColumnName()) { $joinColumn->setReferencedColumnName($this->namingStrategy->referenceColumnName()); } + + $this->fieldNames[$joinColumn->getColumnName()] = $mapping['fieldName']; } if ($uniqueConstraintColumns) { @@ -1464,16 +1451,6 @@ public function hasField($fieldName) return isset($this->properties[$fieldName]); } - /** - * Gets an array containing all the column names. - * - * @return array - */ - public function getColumnNames() - { - return array_keys($this->fieldNames); - } - /** * Returns an array with identifier column names and their corresponding ColumnMetadata. * @@ -1622,6 +1599,13 @@ public function setAssociationOverride($fieldName, array $overrideMapping) $mapping = $this->associationMappings[$fieldName]; + // Unset all defined fieldNames prior to override + if (isset($mapping['joinColumns'])) { + foreach ($mapping['joinColumns'] as $joinColumn) { + unset($this->fieldNames[$joinColumn->getColumnName()]); + } + } + if (isset($overrideMapping['joinColumns'])) { $mapping['joinColumns'] = $overrideMapping['joinColumns']; } @@ -2360,36 +2344,6 @@ public function isCollectionValuedAssociation($fieldName) && ! ($this->associationMappings[$fieldName]['type'] & self::TO_ONE); } - /** - * Used to retrieve a fieldname for either field or association from a given column. - * - * This method is used in foreign-key as primary-key contexts. - * - * @param string $columnName - * - * @return string - * - * @throws MappingException - */ - public function getFieldForColumn($columnName) - { - if (isset($this->fieldNames[$columnName])) { - return $this->fieldNames[$columnName]; - } - - foreach ($this->associationMappings as $assocName => $mapping) { - foreach ($mapping['joinColumns'] as $joinColumn) { - if ($joinColumn->getColumnName() === $columnName) { - //$this->fieldNames[$columnName] = $assocName; - - return $assocName; - } - } - } - - throw MappingException::noFieldNameFoundForColumn($this->name, $columnName); - } - /** * Sets the ID generator used to generate IDs for instances of this class. * diff --git a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php index ab3af54cba8..7bb4d8dfb45 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php @@ -20,7 +20,6 @@ namespace Doctrine\ORM\Persisters\Collection; use Doctrine\Common\Collections\Criteria; -use Doctrine\Common\Util\Debug; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Persisters\SqlValueVisitor; use Doctrine\ORM\PersistentCollection; @@ -133,7 +132,7 @@ public function count(PersistentCollection $collection) $referencedName = $joinColumn->getReferencedColumnName(); $conditions[] = 't.' . $quotedColumnName . ' = ?'; - $params[] = $id[$sourceClass->getFieldForColumn($referencedName)]; + $params[] = $id[$sourceClass->fieldNames[$referencedName]]; $types[] = PersisterHelper::getTypeOfColumn($referencedName, $sourceClass, $this->em); } @@ -249,14 +248,17 @@ public function loadCriteria(PersistentCollection $collection, Criteria $criteri } foreach ($joinColumns as $joinColumn) { + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $referencedName = $joinColumn->getReferencedColumnName(); + if (! $joinColumn->getType()) { $joinColumn->setType( - PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $ownerMetadata, $this->em) + PersisterHelper::getTypeOfColumn($referencedName, $ownerMetadata, $this->em) ); } - $whereClauses[] = sprintf('t.%s = ?', $this->platform->quoteIdentifier($joinColumn->getColumnName())); - $params[] = $id[$ownerMetadata->getFieldForColumn($joinColumn->getReferencedColumnName())]; + $whereClauses[] = sprintf('t.%s = ?', $quotedColumnName); + $params[] = $id[$ownerMetadata->fieldNames[$referencedName]]; $types[] = $joinColumn->getType(); } @@ -420,7 +422,7 @@ protected function getDeleteSQLParameters(PersistentCollection $collection) $params = []; foreach ($joinColumns as $joinColumn) { - $params[] = $identifier[$sourceClass->getFieldForColumn($joinColumn->getReferencedColumnName())]; + $params[] = $identifier[$sourceClass->fieldNames[$joinColumn->getReferencedColumnName()]]; } return $params; @@ -550,13 +552,13 @@ private function collectJoinTableColumnParameters(PersistentCollection $collecti $targetIdentifier = $this->uow->getEntityIdentifier($element); foreach ($mapping['joinTable']->getJoinColumns() as $joinColumn) { - $fieldName = $owningClass->getFieldForColumn($joinColumn->getReferencedColumnName()); + $fieldName = $owningClass->fieldNames[$joinColumn->getReferencedColumnName()]; $params[] = $owningIdentifier[$fieldName]; } foreach ($mapping['joinTable']->getInverseJoinColumns() as $joinColumn) { - $fieldName = $targetClass->getFieldForColumn($joinColumn->getReferencedColumnName()); + $fieldName = $targetClass->fieldNames[$joinColumn->getReferencedColumnName()]; $params[] = $targetIdentifier[$fieldName]; } @@ -628,7 +630,7 @@ private function getJoinTableRestrictionsWithKey(PersistentCollection $collectio } $whereClauses[] = 't.' . $this->platform->quoteIdentifier($joinColumn->getColumnName()) . ' = ?'; - $params[] = $id[$sourceClass->getFieldForColumn($joinColumn->getReferencedColumnName())]; + $params[] = $id[$sourceClass->fieldNames[$joinColumn->getReferencedColumnName()]]; $types[] = $joinColumn->getType(); } @@ -700,7 +702,7 @@ private function getJoinTableRestrictions(PersistentCollection $collection, $ele $referencedColumnName = $joinColumn->getReferencedColumnName(); $whereClauses[] = ($addFilters ? 't.' : '') . $quotedColumnName . ' = ?'; - $params[] = $sourceId[$sourceClass->getFieldForColumn($referencedColumnName)]; + $params[] = $sourceId[$sourceClass->fieldNames[$referencedColumnName]]; $types[] = PersisterHelper::getTypeOfColumn($referencedColumnName, $sourceClass, $this->em); } @@ -709,7 +711,7 @@ private function getJoinTableRestrictions(PersistentCollection $collection, $ele $referencedColumnName = $joinColumn->getReferencedColumnName(); $whereClauses[] = ($addFilters ? 't.' : '') . $quotedColumnName . ' = ?'; - $params[] = $targetId[$targetClass->getFieldForColumn($referencedColumnName)]; + $params[] = $targetId[$targetClass->fieldNames[$referencedColumnName]]; $types[] = PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em); } diff --git a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php index b86e3debd47..b756ea082b0 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php @@ -23,7 +23,6 @@ use Doctrine\ORM\Mapping\ColumnMetadata; use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\PersistentCollection; -use Doctrine\ORM\Utility\PersisterHelper; /** * Persister for one-to-many collections. @@ -215,7 +214,7 @@ private function deleteEntityCollection(PersistentCollection $collection) foreach ($targetClass->associationMappings[$mapping['mappedBy']]['joinColumns'] as $joinColumn) { $columns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); - $parameters[] = $identifier[$sourceClass->getFieldForColumn($joinColumn->getReferencedColumnName())]; + $parameters[] = $identifier[$sourceClass->fieldNames[$joinColumn->getReferencedColumnName()]]; } $tableName = $targetClass->table->getQuotedQualifiedName($this->platform); diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 27924147238..bfbfbee8d1a 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -661,7 +661,7 @@ protected function prepareUpdateData($entity) foreach ($assoc['joinColumns'] as $joinColumn) { $columnName = $joinColumn->getColumnName(); $referencedColumnName = $joinColumn->getReferencedColumnName(); - $targetField = $targetClass->getFieldForColumn($referencedColumnName); + $targetField = $targetClass->fieldNames[$referencedColumnName]; $joinColumn->setType( PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) @@ -1002,10 +1002,9 @@ private function getManyToManyStatement(array $assoc, $sourceEntity, $offset = n $joinColumns = $assoc['isOwningSide'] ? $joinTable->getJoinColumns() : $joinTable->getInverseJoinColumns(); foreach ($joinColumns as $joinColumn) { - $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); - $referencedColumnName = $joinColumn->getReferencedColumnName(); - $fieldName = $sourceClass->getFieldForColumn($referencedColumnName); - $value = $sourceClass->reflFields[$fieldName]->getValue($sourceEntity); + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $fieldName = $sourceClass->fieldNames[$joinColumn->getReferencedColumnName()]; + $value = $sourceClass->reflFields[$fieldName]->getValue($sourceEntity); if (isset($sourceClass->associationMappings[$fieldName])) { $targetMapping = $sourceClass->associationMappings[$fieldName]; @@ -1195,14 +1194,17 @@ protected function getSelectColumnsSQL() $columnList = []; $this->currentPersisterContext->rsm->addEntityResult($this->class->name, 'r'); // r for root - // Add regular columns to select list + $this->currentPersisterContext->selectJoinSql = ''; + $eagerAliasCounter = 0; + foreach ($this->class->fieldNames as $field) { + if (! $this->class->hasField($field)) { + continue; + } + $columnList[] = $this->getSelectColumnSQL($field, $this->class); } - $this->currentPersisterContext->selectJoinSql = ''; - $eagerAliasCounter = 0; - foreach ($this->class->associationMappings as $assocField => $assoc) { $assocColumnSQL = $this->getSelectColumnAssociationSQL($assocField, $assoc, $this->class); @@ -1231,16 +1233,15 @@ protected function getSelectColumnsSQL() $this->currentPersisterContext->rsm->addJoinedEntityResult($assoc['targetEntity'], $assocAlias, 'r', $assocField); foreach ($eagerEntity->fieldNames as $field) { - $columnList[] = $this->getSelectColumnSQL($field, $eagerEntity, $assocAlias); - } - - foreach ($eagerEntity->associationMappings as $eagerAssocField => $eagerAssoc) { - $eagerAssocColumnSQL = $this->getSelectColumnAssociationSQL( - $eagerAssocField, $eagerAssoc, $eagerEntity, $assocAlias - ); - - if ($eagerAssocColumnSQL) { - $columnList[] = $eagerAssocColumnSQL; + $columnSQL = $eagerEntity->hasField($field) + ? $this->getSelectColumnSQL($field, $eagerEntity, $assocAlias) + : $this->getSelectColumnAssociationSQL( + $field, $eagerEntity->associationMappings[$field], $eagerEntity, $assocAlias + ) + ; + + if ($columnSQL) { + $columnList[] = $columnSQL; } } @@ -1811,7 +1812,7 @@ private function getOneToManyStatement(array $assoc, $sourceEntity, $offset = nu $tableAlias = $this->getSQLTableAlias($class->getTableName()); foreach ($owningAssoc['joinColumns'] as $joinColumn) { - $field = $sourceClass->getFieldForColumn($joinColumn->getReferencedColumnName()); + $field = $sourceClass->fieldNames[$joinColumn->getReferencedColumnName()]; $value = $sourceClass->reflFields[$field]->getValue($sourceEntity); if (isset($sourceClass->associationMappings[$field])) { diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index 25e85506d32..2eb9f26037c 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -143,45 +143,50 @@ public function addJoinedEntityFromClassMetadata($class, $alias, $parentAlias, $ */ protected function addAllClassFields($class, $alias, $columnAliasMap = []) { + /** @var ClassMetadata $classMetadata */ $classMetadata = $this->em->getClassMetadata($class); $platform = $this->em->getConnection()->getDatabasePlatform(); if ( ! $this->isInheritanceSupported($classMetadata)) { - throw new \InvalidArgumentException('ResultSetMapping builder does not currently support your inheritance scheme.'); + throw new \InvalidArgumentException( + 'ResultSetMapping builder does not currently support your inheritance scheme.' + ); } + foreach ($classMetadata->fieldNames as $columnName => $propertyName) { + $columnAlias = $platform->getSQLResultCasing($columnAliasMap[$columnName]); - foreach ($classMetadata->getColumnNames() as $columnName) { - $propertyName = $classMetadata->getFieldName($columnName); - $columnAlias = $platform->getSQLResultCasing($columnAliasMap[$columnName]); - - if (isset($this->fieldMappings[$columnAlias])) { - throw new \InvalidArgumentException("The column '$columnName' conflicts with another column in the mapper."); - } + if ($classMetadata->hasField($propertyName)) { + if (isset($this->fieldMappings[$columnAlias])) { + throw new \InvalidArgumentException( + "The column '$columnName' conflicts with another column in the mapper." + ); + } - $this->addFieldResult($alias, $columnAlias, $propertyName); - } + $this->addFieldResult($alias, $columnAlias, $propertyName); - foreach ($classMetadata->associationMappings as $associationMapping) { - if ($associationMapping['isOwningSide'] && $associationMapping['type'] & ClassMetadata::TO_ONE) { - $targetClass = $this->em->getClassMetadata($associationMapping['targetEntity']); - $isIdentifier = isset($associationMapping['id']) && $associationMapping['id'] === true; + continue; + } - foreach ($associationMapping['joinColumns'] as $joinColumn) { - $columnName = $joinColumn->getColumnName(); - $columnAlias = $platform->getSQLResultCasing($columnAliasMap[$columnName]); - $columnType = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); + if (isset($this->metaMappings[$columnAlias])) { + throw new \InvalidArgumentException("The column '$columnAlias' conflicts with another column in the mapper."); + } - if (isset($this->metaMappings[$columnAlias])) { - throw new \InvalidArgumentException("The column '$columnAlias' conflicts with another column in the mapper."); - } + $associationMapping = $classMetadata->associationMappings[$propertyName]; + $isIdentifier = isset($associationMapping['id']) && $associationMapping['id'] === true; + $columnType = PersisterHelper::getTypeOfColumn($columnName, $classMetadata, $this->em); - $this->addMetaResult($alias, $columnAlias, $columnName, $isIdentifier, $columnType); - } - } + $this->addMetaResult($alias, $columnAlias, $columnName, $isIdentifier, $columnType); } } + /** + * Checks if inheritance if supported. + * + * @param ClassMetadata $metadata + * + * @return boolean + */ private function isInheritanceSupported(ClassMetadata $metadata) { if ($metadata->inheritanceType === InheritanceType::SINGLE_TABLE @@ -237,21 +242,10 @@ private function getColumnAliasMap($className, $mode, array $customRenameColumns $columnAlias = []; $classMetadata = $this->em->getClassMetadata($className); - foreach ($classMetadata->getColumnNames() as $columnName) { + foreach ($classMetadata->fieldNames as $columnName => $propertyName) { $columnAlias[$columnName] = $this->getColumnAlias($columnName, $mode, $customRenameColumns); } - foreach ($classMetadata->associationMappings as $associationMapping) { - if (! ($associationMapping['isOwningSide'] && $associationMapping['type'] & ClassMetadata::TO_ONE)) { - continue; - } - - foreach ($associationMapping['joinColumns'] as $joinColumn) { - $columnName = $joinColumn->getColumnName(); - $columnAlias[$columnName] = $this->getColumnAlias($columnName, $mode, $customRenameColumns); - } - } - return $columnAlias; } @@ -297,24 +291,18 @@ public function addNamedNativeQueryResultClassMapping(ClassMetadata $class, $res $this->addMetaResult($alias, $discrColumnName, $discrColumnName, false, $discrColumnType); } - foreach ($classMetadata->getColumnNames() as $key => $columnName) { - $propertyName = $classMetadata->getFieldName($columnName); - - $this->addFieldResult($alias, $columnName, $propertyName); - } + foreach ($classMetadata->fieldNames as $columnName => $propertyName) { + if ($classMetadata->hasField($propertyName)) { + $this->addFieldResult($alias, $columnName, $propertyName); - foreach ($classMetadata->associationMappings as $associationMapping) { - if ($associationMapping['isOwningSide'] && $associationMapping['type'] & ClassMetadata::TO_ONE) { - $targetClass = $this->em->getClassMetadata($associationMapping['targetEntity']); - $isIdentifier = (isset($associationMapping['id']) && $associationMapping['id'] === true); + continue; + } - foreach ($associationMapping['joinColumns'] as $joinColumn) { - $columnName = $joinColumn->getColumnName(); - $columnType = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); + $associationMapping = $classMetadata->associationMappings[$propertyName]; + $isIdentifier = (isset($associationMapping['id']) && $associationMapping['id'] === true); + $columnType = PersisterHelper::getTypeOfColumn($columnName, $classMetadata, $this->em); - $this->addMetaResult($alias, $columnName, $columnName, $isIdentifier, $columnType); - } - } + $this->addMetaResult($alias, $columnName, $columnName, $isIdentifier, $columnType); } return $this; @@ -423,8 +411,10 @@ public function addNamedNativeQueryEntityResultMapping(ClassMetadata $classMetad } } else { - foreach ($classMetadata->getColumnNames() as $columnName) { - $propertyName = $classMetadata->getFieldName($columnName); + foreach ($classMetadata->fieldNames as $columnName => $propertyName) { + if (! $classMetadata->hasField($propertyName)) { + continue; + } $this->addFieldResult($alias, $columnName, $propertyName); } @@ -459,7 +449,8 @@ public function generateSelectClause($tableAliases = []) if (isset($this->fieldMappings[$columnName])) { $class = $this->em->getClassMetadata($this->declaringClasses[$columnName]); - $sql .= $class->getProperty($this->fieldMappings[$columnName])->getColumnName(); + $field = $this->fieldMappings[$columnName]; + $sql .= $class->getProperty($field)->getColumnName(); } else if (isset($this->metaMappings[$columnName])) { $sql .= $this->metaMappings[$columnName]; } else if (isset($this->discriminatorColumns[$dqlAlias])) { diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 5ab86abc116..ec8c5c59d00 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -1707,22 +1707,19 @@ public function walkGroupByItem($groupByItem) } // IdentificationVariable - $sqlParts = []; - - foreach ($this->queryComponents[$groupByItem]['metadata']->fieldNames as $field) { - $item = new AST\PathExpression(AST\PathExpression::TYPE_STATE_FIELD, $groupByItem, $field); - $item->type = AST\PathExpression::TYPE_STATE_FIELD; + $classMetadata = $this->queryComponents[$groupByItem]['metadata']; + $sqlParts = []; - $sqlParts[] = $this->walkPathExpression($item); - } + foreach ($classMetadata->fieldNames as $fieldName) { + $type = $classMetadata->hasField($fieldName) + ? AST\PathExpression::TYPE_STATE_FIELD + : AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION + ; - foreach ($this->queryComponents[$groupByItem]['metadata']->associationMappings as $mapping) { - if ($mapping['isOwningSide'] && $mapping['type'] & ClassMetadata::TO_ONE) { - $item = new AST\PathExpression(AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION, $groupByItem, $mapping['fieldName']); - $item->type = AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION; + $item = new AST\PathExpression($type, $groupByItem, $fieldName); + $item->type = $type; - $sqlParts[] = $this->walkPathExpression($item); - } + $sqlParts[] = $this->walkPathExpression($item); } return implode(', ', $sqlParts); diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 9f77c4b2a84..8f7a4f0999d 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -604,35 +604,39 @@ private function gatherRelationsSql($class, $table, $schema, &$addedFks, &$black */ private function getDefiningClass($class, $referencedColumnName) { - $referencedFieldName = $class->getFieldName($referencedColumnName); + if (isset($class->fieldNames[$referencedColumnName])) { + $referencedFieldName = $class->fieldNames[$referencedColumnName]; - if ($class->hasField($referencedFieldName)) { - return [$class, $referencedFieldName]; + if ($class->hasField($referencedFieldName)) { + return [$class, $referencedFieldName]; + } } $idColumns = $class->getIdentifierColumns($this->em); $idColumnNameList = array_keys($idColumns); - if (in_array($referencedColumnName, $idColumnNameList)) { - // it seems to be an entity as foreign key - foreach ($class->getIdentifierFieldNames() as $fieldName) { - if (! $class->hasAssociation($fieldName)) { - continue; - } + if (! in_array($referencedColumnName, $idColumnNameList)) { + return null; + } + + // it seems to be an entity as foreign key + foreach ($class->getIdentifierFieldNames() as $fieldName) { + if (! $class->hasAssociation($fieldName)) { + continue; + } - $association = $class->getAssociationMapping($fieldName); + $association = $class->getAssociationMapping($fieldName); - if (count($association['joinColumns']) > 1) { - throw MappingException::noSingleAssociationJoinColumnFound($class->name, $fieldName); - } + if (count($association['joinColumns']) > 1) { + throw MappingException::noSingleAssociationJoinColumnFound($class->name, $fieldName); + } - $joinColumn = reset($association['joinColumns']); + $joinColumn = reset($association['joinColumns']); - if ($joinColumn->getColumnName() === $referencedColumnName) { - $targetEntity = $this->em->getClassMetadata($association['targetEntity']); + if ($joinColumn->getColumnName() === $referencedColumnName) { + $targetEntity = $this->em->getClassMetadata($association['targetEntity']); - return $this->getDefiningClass($targetEntity, $joinColumn->getReferencedColumnName()); - } + return $this->getDefiningClass($targetEntity, $joinColumn->getReferencedColumnName()); } } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 95a796db5b4..f7fe5f317da 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -2636,7 +2636,7 @@ public function createEntity($className, array $data, &$hints = []) foreach ($assoc['joinColumns'] as $joinColumn) { $joinColumnName = $joinColumn->getColumnName(); $joinColumnValue = isset($data[$joinColumnName]) ? $data[$joinColumnName] : null; - $targetField = $targetClass->getFieldForColumn($joinColumn->getReferencedColumnName()); + $targetField = $targetClass->fieldNames[$joinColumn->getReferencedColumnName()]; if ($joinColumnValue === null && in_array($targetField, $targetClass->identifier, true)) { // the missing key is part of target's entity primary key diff --git a/lib/Doctrine/ORM/Utility/PersisterHelper.php b/lib/Doctrine/ORM/Utility/PersisterHelper.php index 8965d3475e4..c0393b97607 100644 --- a/lib/Doctrine/ORM/Utility/PersisterHelper.php +++ b/lib/Doctrine/ORM/Utility/PersisterHelper.php @@ -67,7 +67,7 @@ public static function getTypeOfField($fieldName, ClassMetadata $class, EntityMa : $assoc['joinColumns']; foreach ($joinColumns as $joinColumn) { - $types[] = self::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $em); + $types[] = self::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $em); } return $types; @@ -87,7 +87,9 @@ public static function getTypeOfColumn($columnName, ClassMetadata $class, Entity if (isset($class->fieldNames[$columnName])) { $fieldName = $class->fieldNames[$columnName]; - return $class->getProperty($fieldName)->getType(); + if (($property = $class->getProperty($fieldName)) !== null) { + return $property->getType(); + } } // iterate over association mappings @@ -96,7 +98,7 @@ public static function getTypeOfColumn($columnName, ClassMetadata $class, Entity $targetClass = $em->getClassMetadata($assoc['targetEntity']); $joinColumns = ($assoc['type'] & ClassMetadata::MANY_TO_MANY) ? $assoc['joinTable']->getJoinColumns() - : $assoc['joinColumns']; + : ($assoc['joinColumns'] ?? []); foreach ($joinColumns as $joinColumn) { if ($joinColumn->getColumnName() !== $columnName) { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1400Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1400Test.php index a3c10079f5c..3c1e0ac513b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1400Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1400Test.php @@ -36,15 +36,11 @@ public function testFailingCase() $userState1 = new DDC1400UserState; $userState1->article = $article; - $userState1->articleId = $article->id; $userState1->user = $user1; - $userState1->userId = $user1->id; $userState2 = new DDC1400UserState; $userState2->article = $article; - $userState2->articleId = $article->id; $userState2->user = $user2; - $userState2->userId = $user2->id; $this->em->persist($userState1); $this->em->persist($userState2); @@ -78,7 +74,7 @@ class DDC1400Article public $id; /** - * @OneToMany(targetEntity="DDC1400UserState", mappedBy="article", indexBy="userId", fetch="EXTRA_LAZY") + * @OneToMany(targetEntity="DDC1400UserState", mappedBy="article", indexBy="user", fetch="EXTRA_LAZY") */ public $userStates; } @@ -97,7 +93,7 @@ class DDC1400User public $id; /** - * @OneToMany(targetEntity="DDC1400UserState", mappedBy="user", indexBy="articleId", fetch="EXTRA_LAZY") + * @OneToMany(targetEntity="DDC1400UserState", mappedBy="user", indexBy="article", fetch="EXTRA_LAZY") */ public $userStates; } @@ -107,7 +103,6 @@ class DDC1400User */ class DDC1400UserState { - /** * @Id * @ManyToOne(targetEntity="DDC1400Article", inversedBy="userStates") @@ -119,15 +114,4 @@ class DDC1400UserState * @ManyToOne(targetEntity="DDC1400User", inversedBy="userStates") */ public $user; - - /** - * @Column(name="user_id", type="integer") - */ - public $userId; - - /** - * @Column(name="article_id", type="integer") - */ - public $articleId; - } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC522Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC522Test.php index 871aad29e98..5fdf6b4cefe 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC522Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC522Test.php @@ -33,33 +33,39 @@ public function testJoinColumnWithSameNameAsAssociationField() { $cust = new DDC522Customer; $cust->name = "name"; + $cart = new DDC522Cart; $cart->total = 0; $cust->cart = $cart; $cart->customer = $cust; + $this->em->persist($cust); $this->em->persist($cart); $this->em->flush(); - $this->em->clear(); - $r = $this->em->createQuery('select ca,c from ' . DDC522Cart::class . ' ca join ca.customer c') - ->getResult(); + $cart = $this->em + ->createQuery('select ca, c from ' . DDC522Cart::class . ' ca join ca.customer c') + ->getSingleResult() + ; + + self::assertInstanceOf(DDC522Cart::class, $cart); + self::assertInstanceOf(DDC522Customer::class, $cart->customer); + self::assertNotInstanceOf(Proxy::class, $cart->customer); + self::assertEquals('name', $cart->customer->name); - self::assertInstanceOf(DDC522Cart::class, $r[0]); - self::assertInstanceOf(DDC522Customer::class, $r[0]->customer); - self::assertNotInstanceOf(Proxy::class, $r[0]->customer); - self::assertEquals('name', $r[0]->customer->name); + $cartId = $cart->id; $fkt = new DDC522ForeignKeyTest(); - $fkt->cartId = $r[0]->id; // ignored for persistence - $fkt->cart = $r[0]; // must be set properly + $fkt->cart = $cart; // must be set properly + $this->em->persist($fkt); $this->em->flush(); $this->em->clear(); $fkt2 = $this->em->find(get_class($fkt), $fkt->id); - self::assertEquals($fkt->cart->id, $fkt2->cartId); + + self::assertEquals($fkt->cart->id, $cartId); self::assertInstanceOf(Proxy::class, $fkt2->cart); self::assertFalse($fkt2->cart->__isInitialized__); } @@ -122,9 +128,6 @@ class DDC522ForeignKeyTest /** @Id @Column(type="integer") @GeneratedValue */ public $id; - /** @Column(type="integer", name="cart_id", nullable=true) */ - public $cartId; - /** * @OneToOne(targetEntity="DDC522Cart") * @JoinColumn(name="cart_id", referencedColumnName="id") diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 3b3831a7314..1e0100a7084 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -862,7 +862,14 @@ public function testAttributeOverridesMapping() $factory = $this->createClassMetadataFactory(); $adminMetadata = $factory->getMetadataFor(DDC964Admin::class); - self::assertEquals(['user_id'=>'id', 'user_name'=>'name'], $adminMetadata->fieldNames); + self::assertEquals( + [ + 'user_id' => 'id', + 'user_name' => 'name', + 'adminaddress_id' => 'address', + ], + $adminMetadata->fieldNames + ); self::assertNotNull($adminMetadata->getProperty('id')); @@ -884,7 +891,13 @@ public function testAttributeOverridesMapping() $guestMetadata = $factory->getMetadataFor(DDC964Guest::class); - self::assertEquals(['guest_id'=>'id','guest_name'=>'name'], $guestMetadata->fieldNames); + self::assertEquals( + [ + 'guest_id' => 'id', + 'guest_name' => 'name', + ], + $guestMetadata->fieldNames + ); self::assertNotNull($guestMetadata->getProperty('id')); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 25de38ff997..c1e65b2ddc5 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -1452,56 +1452,6 @@ public function testWakeupReflectionWithEmbeddableAndStaticReflectionService() $metadata->getReflectionProperties() ); } - - public function testGetColumnNames() - { - $metadata = new ClassMetadata(CMS\CmsUser::class); - $metadata->initializeReflection(new RuntimeReflectionService()); - - $fieldMetadata = new Mapping\FieldMetadata('status'); - - $fieldMetadata->setType(Type::getType('string')); - $fieldMetadata->setColumnName('foo'); - - $metadata->addProperty($fieldMetadata); - - $fieldMetadata = new Mapping\FieldMetadata('username'); - - $fieldMetadata->setType(Type::getType('string')); - $fieldMetadata->setColumnName('bar'); - - $metadata->addProperty($fieldMetadata); - - $fieldMetadata = new Mapping\FieldMetadata('name'); - - $fieldMetadata->setType(Type::getType('string')); - $fieldMetadata->setColumnName('baz'); - - $metadata->addProperty($fieldMetadata); - - self::assertSame( - ['foo', 'bar', 'baz'], - $metadata->getColumnNames() - ); - } - - /** - * @group DDC-6460 - */ - public function testInlineEmbeddable() - { - $classMetadata = new ClassMetadata(TestEntity1::class); - - $classMetadata->mapEmbedded( - [ - 'fieldName' => 'test', - 'class' => TestEntity1::class, - 'columnPrefix' => false, - ] - ); - - $this->assertTrue($classMetadata->hasField('test')); - } } /** From 182c56f372a1670f01a68803d124a797583bd915 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 6 Feb 2017 23:48:37 -0500 Subject: [PATCH 102/275] PHPUnit 6 WIP --- composer.json | 2 +- phpunit.xml.dist | 26 +++++++++------- .../Doctrine/Tests/ORM/ConfigurationTest.php | 6 ++-- .../Decorator/EntityManagerDecoratorTest.php | 30 ++++++------------- .../Tests/ORM/EntityNotFoundExceptionTest.php | 4 +-- .../OnClassMetadataNotFoundEventArgsTest.php | 4 +-- .../ORM/Functional/BasicFunctionalTest.php | 18 +++++------ .../Functional/ClassTableInheritanceTest.php | 2 +- .../ORM/Functional/DetachedEntityTest.php | 7 ++--- .../Tests/ORM/Functional/Locking/LockTest.php | 2 +- .../ORM/Functional/Locking/OptimisticTest.php | 2 +- .../ORM/Functional/Ticket/DDC2359Test.php | 5 ++-- .../Internal/HydrationCompleteHandlerTest.php | 4 +-- .../Tests/ORM/LazyCriteriaCollectionTest.php | 22 +++++++------- .../ReflectionPropertiesGetterTest.php | 4 +-- .../ReflectionEmbeddedPropertyTest.php | 5 ++-- .../Mapping/Symfony/AbstractDriverTest.php | 5 ++-- .../Tests/ORM/Query/ParserResultTest.php | 4 +-- .../ORM/Query/QueryExpressionVisitorTest.php | 4 +-- .../DefaultRepositoryFactoryTest.php | 4 +-- .../Doctrine/Tests/OrmPerformanceTestCase.php | 6 ++-- 21 files changed, 80 insertions(+), 86 deletions(-) diff --git a/composer.json b/composer.json index b9d49a24ede..ba881df2d3c 100644 --- a/composer.json +++ b/composer.json @@ -39,7 +39,7 @@ "bin": ["bin/doctrine"], "extra": { "branch-alias": { - "dev-master": "2.6.x-dev" + "dev-master": "3.0.x-dev" } }, "archive": { diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 1d9d2ce162e..e5c46973ec8 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -11,16 +11,22 @@ tests/ folder: phpunit -c ... Example: phpunit -c mysqlconf.xml AllTests --> - diff --git a/tests/Doctrine/Tests/ORM/ConfigurationTest.php b/tests/Doctrine/Tests/ORM/ConfigurationTest.php index 3c93d648fa4..82f858606fd 100644 --- a/tests/Doctrine/Tests/ORM/ConfigurationTest.php +++ b/tests/Doctrine/Tests/ORM/ConfigurationTest.php @@ -17,15 +17,15 @@ use Doctrine\ORM\Mapping\QuoteStrategy; use Doctrine\ORM\ORMException; use Doctrine\ORM\Query\ResultSetMapping; +use Doctrine\Tests\DoctrineTestCase; use Doctrine\Tests\Models\DDC753\DDC753CustomRepository; -use PHPUnit_Framework_TestCase; use ReflectionClass; /** * Tests for the Configuration object * @author Marco Pivetta */ -class ConfigurationTest extends TestCase +class ConfigurationTest extends DoctrineTestCase { /** * @var Configuration @@ -182,7 +182,7 @@ public function testEnsureProductionSettings() $this->setProductionSettings(); $this->configuration->ensureProductionSettings(); - $this->addToAssertionCount(1); + self::addToAssertionCount(1); } public function testEnsureProductionSettingsQueryCache() diff --git a/tests/Doctrine/Tests/ORM/Decorator/EntityManagerDecoratorTest.php b/tests/Doctrine/Tests/ORM/Decorator/EntityManagerDecoratorTest.php index 57bf4246c79..88db7d20792 100644 --- a/tests/Doctrine/Tests/ORM/Decorator/EntityManagerDecoratorTest.php +++ b/tests/Doctrine/Tests/ORM/Decorator/EntityManagerDecoratorTest.php @@ -5,28 +5,20 @@ use Doctrine\ORM\Decorator\EntityManagerDecorator; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Query\ResultSetMapping; -use PHPUnit\Framework\TestCase; +use Doctrine\Tests\DoctrineTestCase; -class EntityManagerDecoratorTest extends TestCase +class EntityManagerDecoratorTest extends DoctrineTestCase { - const VOID_METHODS = [ - 'persist', - 'remove', - 'clear', - 'detach', - 'refresh', - 'flush', - 'initializeObject', - ]; - /** * @var EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ private $wrapped; + private $decorator; public function setUp() { $this->wrapped = $this->createMock(EntityManagerInterface::class); + $this->decorator = new class($this->wrapped) extends EntityManagerDecorator {}; } public function getMethodParameters() @@ -77,16 +69,12 @@ private function getParameters(\ReflectionMethod $method) */ public function testAllMethodCallsAreDelegatedToTheWrappedInstance($method, array $parameters) { - $return = !in_array($method, self::VOID_METHODS) ? 'INNER VALUE FROM ' . $method : null; - - $this->wrapped->expects($this->once()) + $stub = $this->wrapped + ->expects(self::once()) ->method($method) - ->with(...$parameters) - ->willReturn($return); - - $decorator = new class ($this->wrapped) extends EntityManagerDecorator { - }; + ; - $this->assertSame($return, $decorator->$method(...$parameters)); + call_user_func_array([$stub, 'with'], $parameters); + call_user_func_array([$this->decorator, $method], $parameters); } } diff --git a/tests/Doctrine/Tests/ORM/EntityNotFoundExceptionTest.php b/tests/Doctrine/Tests/ORM/EntityNotFoundExceptionTest.php index f1908142f0f..b0c6215e1a6 100644 --- a/tests/Doctrine/Tests/ORM/EntityNotFoundExceptionTest.php +++ b/tests/Doctrine/Tests/ORM/EntityNotFoundExceptionTest.php @@ -3,14 +3,14 @@ namespace Doctrine\Tests\ORM; use Doctrine\ORM\EntityNotFoundException; -use PHPUnit\Framework\TestCase; +use Doctrine\Tests\DoctrineTestCase; /** * Tests for {@see \Doctrine\ORM\EntityNotFoundException} * * @covers \Doctrine\ORM\EntityNotFoundException */ -class EntityNotFoundExceptionTest extends TestCase +class EntityNotFoundExceptionTest extends DoctrineTestCase { public function testFromClassNameAndIdentifier() { diff --git a/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php b/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php index 7cc025049b6..158280cb0d1 100644 --- a/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php +++ b/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php @@ -5,14 +5,14 @@ use Doctrine\Common\Persistence\Mapping\ClassMetadata; use Doctrine\Common\Persistence\ObjectManager; use Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs; -use PHPUnit\Framework\TestCase; +use Doctrine\Tests\DoctrineTestCase; /** * Tests for {@see \Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs} * * @covers \Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs */ -class OnClassMetadataNotFoundEventArgsTest extends TestCase +class OnClassMetadataNotFoundEventArgsTest extends DoctrineTestCase { public function testEventArgsMutability() { diff --git a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php index a9acf277843..9ea8941f095 100644 --- a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php @@ -728,6 +728,8 @@ public function testOneToOneNullUpdate() */ public function testNewAssociatedEntityDuringFlushThrowsException() { + $this->expectException(\InvalidArgumentException::class); + $user = new CmsUser(); $user->username = "beberlei"; $user->name = "Benjamin E."; @@ -743,8 +745,6 @@ public function testNewAssociatedEntityDuringFlushThrowsException() $this->em->persist($address); // flushing without persisting $user should raise an exception - $this->expectException(\InvalidArgumentException::class); - $this->em->flush(); } @@ -754,6 +754,8 @@ public function testNewAssociatedEntityDuringFlushThrowsException() */ public function testNewAssociatedEntityDuringFlushThrowsException2() { + $this->expectException(\InvalidArgumentException::class); + $user = new CmsUser(); $user->username = "beberlei"; $user->name = "Benjamin E."; @@ -777,8 +779,6 @@ public function testNewAssociatedEntityDuringFlushThrowsException2() $address->user = $u2; // flushing without persisting $u2 should raise an exception - $this->expectException(\InvalidArgumentException::class); - $this->em->flush(); } @@ -788,6 +788,8 @@ public function testNewAssociatedEntityDuringFlushThrowsException2() */ public function testNewAssociatedEntityDuringFlushThrowsException3() { + $this->expectException(\InvalidArgumentException::class); + $art = new CmsArticle(); $art->topic = 'topic'; $art->text = 'the text'; @@ -800,8 +802,6 @@ public function testNewAssociatedEntityDuringFlushThrowsException3() $this->em->persist($art); // flushing without persisting $com should raise an exception - $this->expectException(\InvalidArgumentException::class); - $this->em->flush(); } @@ -929,14 +929,15 @@ public function testMergeNonPersistedProperties() public function testMergeThrowsExceptionIfEntityWithGeneratedIdentifierDoesNotExist() { + $this->expectException(EntityNotFoundException::class); + $user = new CmsUser(); + $user->username = "beberlei"; $user->name = "Benjamin E."; $user->status = 'active'; $user->id = 42; - $this->expectException(EntityNotFoundException::class); - $this->em->merge($user); } @@ -1293,7 +1294,6 @@ public function testWrongAssociationInstance() ); $this->em->persist($user); - $this->em->flush(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest.php b/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest.php index 3f32a9adcf8..1f13e4e6812 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest.php @@ -316,7 +316,7 @@ public function testBulkUpdateNonScalarParameterDDC1341() ->setParameter(1, 'IT') ->execute(); - $this->addToAssertionCount(1); + self::addToAssertionCount(1); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php b/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php index 279c6dd2d35..26a1d734544 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php @@ -4,6 +4,7 @@ use Doctrine\DBAL\Exception\UniqueConstraintViolationException; use Doctrine\ORM\OptimisticLockException; +use Doctrine\ORM\ORMException; use Doctrine\ORM\Proxy\Proxy; use Doctrine\Tests\Models\CMS\CmsUser; use Doctrine\Tests\Models\CMS\CmsPhonenumber; @@ -112,6 +113,8 @@ public function testSerializeUnserializeModifyMerge() */ public function testDetachedEntityThrowsExceptionOnFlush() { + $this->expectException(UniqueConstraintViolationException::class); + $ph = new CmsPhonenumber(); $ph->phonenumber = '12345'; @@ -120,10 +123,6 @@ public function testDetachedEntityThrowsExceptionOnFlush() $this->em->clear(); $this->em->persist($ph); - - // since it tries to insert the object twice (with the same PK) - $this->expectException(UniqueConstraintViolationException::class); - $this->em->flush(); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Locking/LockTest.php b/tests/Doctrine/Tests/ORM/Functional/Locking/LockTest.php index 13c56293d54..f8c93ffa54e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Locking/LockTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/Locking/LockTest.php @@ -38,7 +38,7 @@ public function testLockVersionedEntity() $this->em->lock($article, LockMode::OPTIMISTIC, $article->version); - $this->addToAssertionCount(1); + self::addToAssertionCount(1); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/Locking/OptimisticTest.php b/tests/Doctrine/Tests/ORM/Functional/Locking/OptimisticTest.php index 6163b4864ab..d1d4dde350e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Locking/OptimisticTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/Locking/OptimisticTest.php @@ -179,7 +179,7 @@ public function testLockWorksWithProxy() $this->em->lock($proxy, LockMode::OPTIMISTIC, 1); - $this->addToAssertionCount(1); + self::addToAssertionCount(1); } public function testOptimisticTimestampSetsDefaultValue() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php index 9c2d2e2b1f1..69dbcff599d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php @@ -1,6 +1,7 @@ persister->expects($this->once())->method('count')->with($this->criteria)->will($this->returnValue(10)); + $this->persister->expects(self::once())->method('count')->with($this->criteria)->will($this->returnValue(10)); self::assertSame(10, $this->lazyCriteriaCollection->count()); self::assertSame(10, $this->lazyCriteriaCollection->count()); @@ -52,7 +52,7 @@ public function testCountIsCached() public function testCountIsCachedEvenWithZeroResult() { - $this->persister->expects($this->once())->method('count')->with($this->criteria)->will($this->returnValue(0)); + $this->persister->expects(self::once())->method('count')->with($this->criteria)->will($this->returnValue(0)); self::assertSame(0, $this->lazyCriteriaCollection->count()); self::assertSame(0, $this->lazyCriteriaCollection->count()); @@ -63,13 +63,13 @@ public function testCountUsesWrappedCollectionWhenInitialized() { $this ->persister - ->expects($this->once()) + ->expects(self::once()) ->method('loadCriteria') ->with($this->criteria) ->will($this->returnValue(['foo', 'bar', 'baz'])); // should never call the persister's count - $this->persister->expects($this->never())->method('count'); + $this->persister->expects(self::never())->method('count'); self::assertSame(['foo', 'bar', 'baz'], $this->lazyCriteriaCollection->toArray()); @@ -88,7 +88,7 @@ public function testMatchingUsesThePersisterOnlyOnce() $this ->persister - ->expects($this->once()) + ->expects(self::once()) ->method('loadCriteria') ->with($this->criteria) ->will($this->returnValue([$foo, $bar, $baz])); @@ -107,14 +107,14 @@ public function testMatchingUsesThePersisterOnlyOnce() public function testIsEmptyUsesCountWhenNotInitialized() { - $this->persister->expects($this->once())->method('count')->with($this->criteria)->will($this->returnValue(0)); + $this->persister->expects(self::once())->method('count')->with($this->criteria)->will($this->returnValue(0)); self::assertTrue($this->lazyCriteriaCollection->isEmpty()); } public function testIsEmptyIsFalseIfCountIsNotZero() { - $this->persister->expects($this->once())->method('count')->with($this->criteria)->will($this->returnValue(1)); + $this->persister->expects(self::once())->method('count')->with($this->criteria)->will($this->returnValue(1)); self::assertFalse($this->lazyCriteriaCollection->isEmpty()); } @@ -123,13 +123,13 @@ public function testIsEmptyUsesWrappedCollectionWhenInitialized() { $this ->persister - ->expects($this->once()) + ->expects(self::once()) ->method('loadCriteria') ->with($this->criteria) ->will($this->returnValue(['foo', 'bar', 'baz'])); // should never call the persister's count - $this->persister->expects($this->never())->method('count'); + $this->persister->expects(self::never())->method('count'); self::assertSame(['foo', 'bar', 'baz'], $this->lazyCriteriaCollection->toArray()); diff --git a/tests/Doctrine/Tests/ORM/Mapping/Reflection/ReflectionPropertiesGetterTest.php b/tests/Doctrine/Tests/ORM/Mapping/Reflection/ReflectionPropertiesGetterTest.php index 764998ef56c..a36de5339a0 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Reflection/ReflectionPropertiesGetterTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Reflection/ReflectionPropertiesGetterTest.php @@ -5,9 +5,9 @@ use Doctrine\Common\Persistence\Mapping\ReflectionService; use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\ORM\Mapping\Reflection\ReflectionPropertiesGetter; +use Doctrine\Tests\DoctrineTestCase; use Doctrine\Tests\Models\Reflection\ClassWithMixedProperties; use Doctrine\Tests\Models\Reflection\ParentClass; -use PHPUnit\Framework\TestCase; use ReflectionClass; /** @@ -15,7 +15,7 @@ * * @covers \Doctrine\ORM\Mapping\Reflection\ReflectionPropertiesGetter */ -class ReflectionPropertiesGetterTest extends TestCase +class ReflectionPropertiesGetterTest extends DoctrineTestCase { public function testRetrievesProperties() { diff --git a/tests/Doctrine/Tests/ORM/Mapping/ReflectionEmbeddedPropertyTest.php b/tests/Doctrine/Tests/ORM/Mapping/ReflectionEmbeddedPropertyTest.php index 5fde9cf2962..71ea07e0191 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ReflectionEmbeddedPropertyTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ReflectionEmbeddedPropertyTest.php @@ -4,12 +4,11 @@ use Doctrine\Instantiator\Instantiator; use Doctrine\ORM\Mapping\ReflectionEmbeddedProperty; +use Doctrine\Tests\DoctrineTestCase; use Doctrine\Tests\Models\Generic\BooleanModel; -use Doctrine\Tests\Models\Mapping\Entity; use Doctrine\Tests\Models\Reflection\AbstractEmbeddable; use Doctrine\Tests\Models\Reflection\ArrayObjectExtendingClass; use Doctrine\Tests\Models\Reflection\ConcreteEmbeddable; -use PHPUnit\Framework\TestCase; use ReflectionProperty; /** @@ -17,7 +16,7 @@ * * @covers \Doctrine\ORM\Mapping\ReflectionEmbeddedProperty */ -class ReflectionEmbeddedPropertyTest extends TestCase +class ReflectionEmbeddedPropertyTest extends DoctrineTestCase { /** * @param ReflectionProperty $parentProperty property of the embeddable/entity where to write the embeddable to diff --git a/tests/Doctrine/Tests/ORM/Mapping/Symfony/AbstractDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/Symfony/AbstractDriverTest.php index 03b650a8d21..b0f431ec188 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Symfony/AbstractDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Symfony/AbstractDriverTest.php @@ -1,13 +1,14 @@ */ -class QueryExpressionVisitorTest extends TestCase +class QueryExpressionVisitorTest extends DoctrineTestCase { /** * @var QueryExpressionVisitor diff --git a/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php b/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php index 9a237bdd695..b9d9fb58fb4 100644 --- a/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php @@ -6,16 +6,16 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Repository\DefaultRepositoryFactory; +use Doctrine\Tests\DoctrineTestCase; use Doctrine\Tests\Models\DDC753\DDC753DefaultRepository; use Doctrine\Tests\Models\DDC869\DDC869PaymentRepository; -use PHPUnit\Framework\TestCase; /** * Tests for {@see \Doctrine\ORM\Repository\DefaultRepositoryFactory} * * @covers \Doctrine\ORM\Repository\DefaultRepositoryFactory */ -class DefaultRepositoryFactoryTest extends TestCase +class DefaultRepositoryFactoryTest extends DoctrineTestCase { /** * @var \Doctrine\ORM\EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject diff --git a/tests/Doctrine/Tests/OrmPerformanceTestCase.php b/tests/Doctrine/Tests/OrmPerformanceTestCase.php index b58390ac909..b53f5575817 100644 --- a/tests/Doctrine/Tests/OrmPerformanceTestCase.php +++ b/tests/Doctrine/Tests/OrmPerformanceTestCase.php @@ -46,11 +46,11 @@ protected function runTest() */ public function setMaxRunningTime($maxRunningTime) { - if (is_integer($maxRunningTime) && $maxRunningTime >= 0) { - $this->maxRunningTime = $maxRunningTime; - } else { + if (! (is_int($maxRunningTime) && $maxRunningTime >= 0)) { throw new \InvalidArgumentException; } + + $this->maxRunningTime = $maxRunningTime; } /** From ce41dda951a2ebeb1984e777bd1aa629e1d548fa Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Tue, 7 Feb 2017 16:57:32 -0500 Subject: [PATCH 103/275] Fixed issue with EntityManagerDecoratorTest --- phpunit.xml.dist | 4 ++-- tests/Doctrine/Tests/Mocks/UnitOfWorkMock.php | 8 -------- .../Tests/ORM/Decorator/EntityManagerDecoratorTest.php | 4 ++++ 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/phpunit.xml.dist b/phpunit.xml.dist index e5c46973ec8..3b3ad1c7673 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -14,18 +14,18 @@ diff --git a/tests/Doctrine/Tests/Mocks/UnitOfWorkMock.php b/tests/Doctrine/Tests/Mocks/UnitOfWorkMock.php index 0cf63ed859a..52b107e69ff 100644 --- a/tests/Doctrine/Tests/Mocks/UnitOfWorkMock.php +++ b/tests/Doctrine/Tests/Mocks/UnitOfWorkMock.php @@ -60,12 +60,4 @@ public function setEntityPersister($entityName, $persister) { $this->persisterMock[$entityName] = $persister; } - - /** - * {@inheritdoc} - */ - public function setOriginalEntityData($entity, array $originalData) - { - $this->originalEntityData[spl_object_hash($entity)] = $originalData; - } } diff --git a/tests/Doctrine/Tests/ORM/Decorator/EntityManagerDecoratorTest.php b/tests/Doctrine/Tests/ORM/Decorator/EntityManagerDecoratorTest.php index 88db7d20792..55e98a579e6 100644 --- a/tests/Doctrine/Tests/ORM/Decorator/EntityManagerDecoratorTest.php +++ b/tests/Doctrine/Tests/ORM/Decorator/EntityManagerDecoratorTest.php @@ -13,6 +13,10 @@ class EntityManagerDecoratorTest extends DoctrineTestCase * @var EntityManagerInterface|\PHPUnit_Framework_MockObject_MockObject */ private $wrapped; + + /** + * @var EntityManagerDecorator|\PHPUnit_Framework_MockObject_MockObject + */ private $decorator; public function setUp() From d56ff0c6bb495833854796917ff12508e28427f0 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 8 Feb 2017 23:04:52 -0500 Subject: [PATCH 104/275] Fixed remaining bits of rebase --- lib/Doctrine/ORM/UnitOfWork.php | 2 +- .../ORM/Functional/Ticket/GH5562Test.php | 24 +++++++++---------- tests/Doctrine/Tests/ORM/UnitOfWorkTest.php | 8 +++---- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index f7fe5f317da..286bddd988f 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -1893,7 +1893,7 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, arra */ private function ensureVersionMatch(ClassMetadata $class, $entity, $managedCopy) { - if (! ($class->isVersioned && $this->isLoaded($managedCopy) && $this->isLoaded($entity))) { + if (! ($class->isVersioned() && $this->isLoaded($managedCopy) && $this->isLoaded($entity))) { return; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5562Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5562Test.php index 824c4378add..84b59ba23fb 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5562Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5562Test.php @@ -15,11 +15,11 @@ protected function setUp() parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(GH5562User::class), - $this->_em->getClassMetadata(GH5562Manager::class), - $this->_em->getClassMetadata(GH5562Merchant::class), + $this->em->getClassMetadata(GH5562User::class), + $this->em->getClassMetadata(GH5562Manager::class), + $this->em->getClassMetadata(GH5562Merchant::class), ] ); } @@ -38,20 +38,20 @@ public function testCacheShouldBeUpdatedWhenAssociationChanges() $merchant->name = 'Merchant'; - $this->_em->persist($merchant); - $this->_em->persist($manager); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($merchant); + $this->em->persist($manager); + $this->em->flush(); + $this->em->clear(); - $merchant = $this->_em->find(GH5562Merchant::class, $merchant->id); + $merchant = $this->em->find(GH5562Merchant::class, $merchant->id); $merchant->name = mt_rand(); $merchant->manager->username = 'usernameUPDATE'; - $this->_em->flush(); - $this->_em->clear(); + $this->em->flush(); + $this->em->clear(); - $merchant = $this->_em->find(GH5562Merchant::class, $merchant->id); + $merchant = $this->em->find(GH5562Merchant::class, $merchant->id); self::assertEquals('usernameUPDATE', $merchant->manager->username); } diff --git a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php index 62cbeec34eb..7d9b4e3644e 100644 --- a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php +++ b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php @@ -541,7 +541,7 @@ public function testMergeWithNewEntityWillPersistItAndTriggerPrePersistListeners ); /* @var $object EntityWithRandomlyGeneratedField */ - $object = $this->_unitOfWork->merge($entity); + $object = $this->unitOfWork->merge($entity); self::assertNotSame($object, $entity); self::assertInstanceOf(EntityWithRandomlyGeneratedField::class, $object); @@ -559,7 +559,7 @@ public function testMergeWithExistingEntityWillNotPersistItNorTriggerPrePersistL $mergedEntity = new EntityWithRandomlyGeneratedField(); $mergedEntity->id = $persistedEntity->id; - $mergedEntity->generatedField = mt_rand( + $mergedEntity->generatedField = random_int( $persistedEntity->generatedField + 1, $persistedEntity->generatedField + 1000 ); @@ -573,14 +573,14 @@ public function testMergeWithExistingEntityWillNotPersistItNorTriggerPrePersistL }); $this->eventManager->expects(self::never())->method('dispatchEvent'); - $this->_unitOfWork->registerManaged( + $this->unitOfWork->registerManaged( $persistedEntity, ['id' => $persistedEntity->id], ['generatedField' => $persistedEntity->generatedField] ); /* @var $merged EntityWithRandomlyGeneratedField */ - $merged = $this->_unitOfWork->merge($mergedEntity); + $merged = $this->unitOfWork->merge($mergedEntity); self::assertSame($merged, $persistedEntity); self::assertSame($persistedEntity->generatedField, $mergedEntity->generatedField); From 6a59bb4a48ffac2c1e8a10906b27d34acd392ca1 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 11 Feb 2017 14:25:09 -0500 Subject: [PATCH 105/275] Small code optimization --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 12 +++++++++++- .../Persisters/Collection/OneToManyPersister.php | 5 +---- .../Persisters/Entity/BasicEntityPersister.php | 10 +++------- .../Persisters/Entity/JoinedSubclassPersister.php | 15 +++------------ .../ORM/Query/Exec/MultiTableDeleteExecutor.php | 8 ++------ .../ORM/Query/Exec/MultiTableUpdateExecutor.php | 7 +------ 6 files changed, 21 insertions(+), 36 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index b0fe8ef9963..459a6c8bfdb 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1471,7 +1471,17 @@ public function getIdentifierColumns(EntityManagerInterface $em) $assoc = $this->associationMappings[$idProperty]; $targetClass = $em->getClassMetadata($assoc['targetEntity']); - foreach ($assoc['joinColumns'] as $joinColumn) { + if (! $assoc['isOwningSide']) { + $assoc = $targetClass->associationMappings[$assoc['mappedBy']]; + $targetClass = $em->getClassMetadata($assoc['targetEntity']); + } + + $joinColumns = $assoc['type'] === ClassMetadata::MANY_TO_MANY + ? $assoc['joinTable']->getInverseJoinColumns() + : $assoc['joinColumns'] + ; + + foreach ($joinColumns as $joinColumn) { $joinColumn->setType( PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $em) ); diff --git a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php index b756ea082b0..6c180b3c6fa 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php @@ -249,10 +249,7 @@ private function deleteJoinedEntityCollection(PersistentCollection $collection) $columnDefinitions = []; foreach ($idColumns as $columnName => $column) { - $type = $column instanceof ColumnMetadata - ? $column->getType() - : $column['type'] - ; + $type = $column->getType(); $columnDefinitions[$columnName] = [ 'notnull' => true, diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index bfbfbee8d1a..af1d9470e98 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -1407,13 +1407,8 @@ public function getInsertSQL() foreach ($columns as $columnName) { $column = $this->columns[$columnName]; - if ($column instanceof ColumnMetadata) { - $quotedColumns[] = $this->platform->quoteIdentifier($column->getColumnName()); - $values[] = $column->getType()->convertToDatabaseValueSQL('?', $this->platform); - } else { - $quotedColumns[] = $this->platform->quoteIdentifier($column['name']); - $values[] = $column['type']->convertToDatabaseValueSQL('?', $this->platform); - } + $quotedColumns[] = $this->platform->quoteIdentifier($column->getColumnName()); + $values[] = $column->getType()->convertToDatabaseValueSQL('?', $this->platform); } $quotedColumns = implode(', ', $quotedColumns); @@ -1967,6 +1962,7 @@ private function getValues($value) if (is_object($value) && $this->em->getMetadataFactory()->hasMetadataFor(ClassUtils::getClass($value))) { $class = $this->em->getClassMetadata(get_class($value)); + if ($class->isIdentifierComposite) { $newValue = []; diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index 03092f2eba6..10280cbd64f 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -384,10 +384,7 @@ protected function getLockTablesSql($lockMode) $joinSql .= ' INNER JOIN ' . $tableName . ' ' . $tableAlias . ' ON '; foreach ($identifierColumns as $idColumn) { - $quotedColumnName = $idColumn instanceof ColumnMetadata - ? $this->platform->quoteIdentifier($idColumn->getColumnName()) - : $this->platform->quoteIdentifier($idColumn['name']) - ; + $quotedColumnName = $this->platform->quoteIdentifier($idColumn->getColumnName()); $conditions[] = $baseTableAlias . '.' . $quotedColumnName . ' = ' . $tableAlias . '.' . $quotedColumnName; } @@ -586,10 +583,7 @@ private function getJoinSql($baseTableAlias) $joinSql .= ' INNER JOIN ' . $tableName . ' ' . $tableAlias . ' ON '; foreach ($identifierColumns as $idColumn) { - $quotedColumnName = $idColumn instanceof ColumnMetadata - ? $this->platform->quoteIdentifier($idColumn->getColumnName()) - : $this->platform->quoteIdentifier($idColumn['name']) - ; + $quotedColumnName = $this->platform->quoteIdentifier($idColumn->getColumnName()); $conditions[] = $baseTableAlias . '.' . $quotedColumnName . ' = ' . $tableAlias . '.' . $quotedColumnName; } @@ -606,10 +600,7 @@ private function getJoinSql($baseTableAlias) $joinSql .= ' LEFT JOIN ' . $tableName . ' ' . $tableAlias . ' ON '; foreach ($identifierColumns as $idColumn) { - $quotedColumnName = $idColumn instanceof ColumnMetadata - ? $this->platform->quoteIdentifier($idColumn->getColumnName()) - : $this->platform->quoteIdentifier($idColumn['name']) - ; + $quotedColumnName = $this->platform->quoteIdentifier($idColumn->getColumnName()); $conditions[] = $baseTableAlias . '.' . $quotedColumnName . ' = ' . $tableAlias . '.' . $quotedColumnName; } diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php index b4ce50fcf2a..94507102a42 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php @@ -107,19 +107,15 @@ public function __construct(AST\Node $AST, $sqlWalker) $columnDefinitions = []; foreach ($idColumns as $columnName => $column) { - $type = $column instanceof ColumnMetadata - ? $column->getType() - : $column['type'] - ; - $columnDefinitions[$columnName] = [ 'notnull' => true, - 'type' => $type, + 'type' => $column->getType(), ]; } $this->createTempTableSql = $platform->getCreateTemporaryTableSnippetSQL() . ' ' . $tempTable . ' (' . $platform->getColumnDeclarationListSQL($columnDefinitions) . ')'; + $this->dropTempTableSql = $platform->getDropTemporaryTableSQL($tempTable); } diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php index 98e627d3f82..8b2ac7564d4 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php @@ -147,14 +147,9 @@ public function __construct(AST\Node $AST, $sqlWalker) $columnDefinitions = []; foreach ($idColumns as $columnName => $column) { - $type = $column instanceof ColumnMetadata - ? $column->getType() - : $column['type'] - ; - $columnDefinitions[$columnName] = [ 'notnull' => true, - 'type' => $type, + 'type' => $column->getType(), ]; } From cb4a556356a3a7c8d2df9f70d154e9fbdf847cf9 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 13 Feb 2017 23:40:25 -0500 Subject: [PATCH 106/275] Adios SimpleAnnotationReader! --- lib/Doctrine/ORM/Configuration.php | 20 +-- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 22 +-- .../ORM/Mapping/Driver/AnnotationDriver.php | 155 ++++++------------ lib/Doctrine/ORM/Tools/Setup.php | 5 +- lib/Doctrine/ORM/UnitOfWork.php | 6 +- .../Performance/EntityManagerFactory.php | 10 +- .../Tests/Mocks/EntityManagerMock.php | 2 +- .../Doctrine/Tests/Models/CMS/CmsAddress.php | 52 +++--- .../Doctrine/Tests/Models/CMS/CmsArticle.php | 25 +-- .../Doctrine/Tests/Models/CMS/CmsComment.php | 20 ++- tests/Doctrine/Tests/Models/CMS/CmsEmail.php | 14 +- .../Doctrine/Tests/Models/CMS/CmsEmployee.php | 19 ++- tests/Doctrine/Tests/Models/CMS/CmsGroup.php | 17 +- .../Tests/Models/CMS/CmsPhonenumber.php | 12 +- tests/Doctrine/Tests/Models/CMS/CmsTag.php | 16 +- tests/Doctrine/Tests/Models/CMS/CmsUser.php | 125 +++++++------- tests/Doctrine/Tests/Models/Cache/Action.php | 13 +- tests/Doctrine/Tests/Models/Cache/Address.php | 18 +- .../Tests/Models/Cache/Attraction.php | 29 ++-- .../Models/Cache/AttractionContactInfo.php | 8 +- .../Tests/Models/Cache/AttractionInfo.php | 24 +-- .../Models/Cache/AttractionLocationInfo.php | 8 +- tests/Doctrine/Tests/Models/Cache/Bar.php | 4 +- tests/Doctrine/Tests/Models/Cache/Beach.php | 4 +- tests/Doctrine/Tests/Models/Cache/City.php | 32 ++-- tests/Doctrine/Tests/Models/Cache/Client.php | 14 +- .../Tests/Models/Cache/ComplexAction.php | 21 +-- tests/Doctrine/Tests/Models/Cache/Country.php | 16 +- tests/Doctrine/Tests/Models/Cache/Flight.php | 26 +-- tests/Doctrine/Tests/Models/Cache/Login.php | 18 +- tests/Doctrine/Tests/Models/Cache/Person.php | 18 +- .../Tests/Models/Cache/Restaurant.php | 4 +- tests/Doctrine/Tests/Models/Cache/State.php | 25 +-- tests/Doctrine/Tests/Models/Cache/Token.php | 33 ++-- tests/Doctrine/Tests/Models/Cache/Travel.php | 32 ++-- .../Doctrine/Tests/Models/Cache/Traveler.php | 23 +-- .../Tests/Models/Cache/TravelerProfile.php | 20 ++- .../Models/Cache/TravelerProfileInfo.php | 22 +-- .../Tests/Models/Company/CompanyAuction.php | 14 +- .../Tests/Models/Company/CompanyCar.php | 12 +- .../Tests/Models/Company/CompanyContract.php | 52 +++--- .../Company/CompanyContractListener.php | 18 +- .../Tests/Models/Company/CompanyEmployee.php | 16 +- .../Tests/Models/Company/CompanyEvent.php | 18 +- .../Models/Company/CompanyFixContract.php | 5 +- .../Models/Company/CompanyFlexContract.php | 41 ++--- .../Company/CompanyFlexUltraContract.php | 10 +- .../CompanyFlexUltraContractListener.php | 5 +- .../Tests/Models/Company/CompanyManager.php | 14 +- .../Models/Company/CompanyOrganization.php | 17 +- .../Tests/Models/Company/CompanyPerson.php | 50 +++--- .../Tests/Models/Company/CompanyRaffle.php | 12 +- .../JoinedChildClass.php | 11 +- .../JoinedRootClass.php | 19 ++- .../SingleChildClass.php | 11 +- .../SingleRootClass.php | 19 ++- .../CustomType/CustomIdObjectTypeChild.php | 9 +- .../CustomType/CustomIdObjectTypeParent.php | 11 +- .../Models/CustomType/CustomTypeChild.php | 12 +- .../Models/CustomType/CustomTypeParent.php | 24 +-- .../Models/CustomType/CustomTypeUpperCase.php | 14 +- .../Models/DDC117/DDC117ApproveChanges.php | 26 +-- .../Tests/Models/DDC117/DDC117Article.php | 16 +- .../Models/DDC117/DDC117ArticleDetails.php | 12 +- .../Tests/Models/DDC117/DDC117Editor.php | 26 +-- .../Tests/Models/DDC117/DDC117Link.php | 16 +- .../Tests/Models/DDC117/DDC117Reference.php | 20 ++- .../Tests/Models/DDC117/DDC117Translation.php | 18 +- .../DDC1476EntityWithDefaultFieldType.php | 11 +- .../Tests/Models/DDC1590/DDC1590Entity.php | 14 +- .../Tests/Models/DDC1590/DDC1590User.php | 7 +- .../Tests/Models/DDC1872/DDC1872Bar.php | 6 +- .../DDC1872ExampleEntityWithOverride.php | 16 +- .../DDC1872ExampleEntityWithoutOverride.php | 4 +- .../Models/DDC1872/DDC1872ExampleTrait.php | 10 +- .../Tests/Models/DDC2372/DDC2372Address.php | 14 +- .../Tests/Models/DDC2372/DDC2372Admin.php | 4 +- .../Tests/Models/DDC2372/DDC2372User.php | 13 +- .../DDC2372/Traits/DDC2372AddressTrait.php | 6 +- .../Models/DDC2504/DDC2504ChildClass.php | 4 +- .../Models/DDC2504/DDC2504OtherClass.php | 11 +- .../Tests/Models/DDC2504/DDC2504RootClass.php | 16 +- .../Models/DDC2825/ExplicitSchemaAndTable.php | 7 +- .../DDC2825/SchemaAndTableInTableName.php | 11 +- .../Tests/Models/DDC3231/DDC3231User1.php | 14 +- .../DDC3231/DDC3231User1NoNamespace.php | 14 +- .../Tests/Models/DDC3231/DDC3231User2.php | 14 +- .../DDC3231/DDC3231User2NoNamespace.php | 14 +- .../Tests/Models/DDC3346/DDC3346Article.php | 16 +- .../Tests/Models/DDC3346/DDC3346Author.php | 14 +- .../Tests/Models/DDC3579/DDC3579Admin.php | 11 +- .../Tests/Models/DDC3579/DDC3579Group.php | 14 +- .../Tests/Models/DDC3579/DDC3579User.php | 14 +- .../Tests/Models/DDC3597/DDC3597Image.php | 11 +- .../Tests/Models/DDC3597/DDC3597Media.php | 19 +-- .../Tests/Models/DDC3597/DDC3597Root.php | 31 ++-- .../DDC3597/Embeddable/DDC3597Dimension.php | 14 +- .../Tests/Models/DDC3699/DDC3699Child.php | 12 +- .../Tests/Models/DDC3699/DDC3699Parent.php | 6 +- .../Models/DDC3699/DDC3699RelationMany.php | 10 +- .../Models/DDC3699/DDC3699RelationOne.php | 10 +- .../Tests/Models/DDC3899/DDC3899Contract.php | 18 +- .../Models/DDC3899/DDC3899FixContract.php | 6 +- .../Models/DDC3899/DDC3899FlexContract.php | 8 +- .../Tests/Models/DDC3899/DDC3899User.php | 10 +- .../Tests/Models/DDC4006/DDC4006User.php | 6 +- .../Tests/Models/DDC4006/DDC4006UserId.php | 10 +- .../Models/DDC753/DDC753CustomRepository.php | 2 - .../DDC753EntityWithCustomRepository.php | 12 +- ...DC753EntityWithDefaultCustomRepository.php | 13 +- .../DDC753EntityWithInvalidRepository.php | 13 +- .../Models/DDC869/DDC869ChequePayment.php | 7 +- .../Models/DDC869/DDC869CreditCardPayment.php | 7 +- .../Tests/Models/DDC869/DDC869Payment.php | 14 +- .../Models/DDC869/DDC869PaymentRepository.php | 1 - .../Tests/Models/DDC889/DDC889Class.php | 7 +- .../Tests/Models/DDC889/DDC889Entity.php | 7 +- .../Tests/Models/DDC889/DDC889SuperClass.php | 5 +- .../Tests/Models/DDC964/DDC964Address.php | 17 +- .../Tests/Models/DDC964/DDC964Admin.php | 19 ++- .../Tests/Models/DDC964/DDC964Group.php | 14 +- .../Tests/Models/DDC964/DDC964Guest.php | 15 +- .../Tests/Models/DDC964/DDC964User.php | 24 +-- .../DirectoryTree/AbstractContentItem.php | 10 +- .../Tests/Models/DirectoryTree/Directory.php | 6 +- .../Tests/Models/DirectoryTree/File.php | 13 +- .../Tests/Models/ECommerce/ECommerceCart.php | 25 +-- .../Models/ECommerce/ECommerceCategory.php | 19 ++- .../Models/ECommerce/ECommerceCustomer.php | 20 ++- .../Models/ECommerce/ECommerceFeature.php | 18 +- .../Models/ECommerce/ECommerceProduct.php | 35 ++-- .../Models/ECommerce/ECommerceShipping.php | 12 +- .../Tests/Models/Forum/ForumAdministrator.php | 6 +- .../Tests/Models/Forum/ForumAvatar.php | 12 +- .../Tests/Models/Forum/ForumBoard.php | 16 +- .../Tests/Models/Forum/ForumCategory.php | 16 +- .../Tests/Models/Forum/ForumEntry.php | 14 +- .../Doctrine/Tests/Models/Forum/ForumUser.php | 18 +- .../Tests/Models/Generic/BooleanModel.php | 12 +- .../Tests/Models/Generic/DateTimeModel.php | 16 +- .../Tests/Models/Generic/DecimalModel.php | 14 +- .../Models/Generic/NonAlphaColumnsEntity.php | 14 +- .../Models/Generic/SerializationModel.php | 14 +- .../Doctrine/Tests/Models/GeoNames/Admin1.php | 28 ++-- .../Models/GeoNames/Admin1AlternateName.php | 27 +-- tests/Doctrine/Tests/Models/GeoNames/City.php | 33 ++-- .../Tests/Models/GeoNames/Country.php | 16 +- .../Models/Global/GlobalNamespaceModel.php | 42 ++--- .../EntityWithArrayDefaultArrayValueM2M.php | 8 +- .../Tests/Models/Hydration/SimpleEntity.php | 6 +- .../Models/Issue5989/Issue5989Employee.php | 8 +- .../Models/Issue5989/Issue5989Manager.php | 8 +- .../Models/Issue5989/Issue5989Person.php | 18 +- .../AnotherChildClass.php | 4 +- .../JoinedInheritanceType/ChildClass.php | 4 +- .../JoinedInheritanceType/RootClass.php | 10 +- .../Tests/Models/Legacy/LegacyArticle.php | 23 ++- .../Tests/Models/Legacy/LegacyCar.php | 19 ++- .../Tests/Models/Legacy/LegacyUser.php | 32 ++-- .../Models/Legacy/LegacyUserReference.php | 24 +-- .../CompositeToOneKeyState.php | 16 +- .../Models/MixedToOneIdentity/Country.php | 6 +- .../Tests/Models/Navigation/NavCountry.php | 18 +- .../Tests/Models/Navigation/NavPhotos.php | 24 +-- .../Models/Navigation/NavPointOfInterest.php | 28 ++-- .../Tests/Models/Navigation/NavTour.php | 24 +-- .../Tests/Models/Navigation/NavUser.php | 14 +- .../Models/NonPublicSchemaJoins/User.php | 20 ++- .../Models/NullDefault/NullDefaultColumn.php | 8 +- .../OneToOneSingleTableInheritance/Cat.php | 6 +- .../LitterBox.php | 8 +- .../OneToOneSingleTableInheritance/Pet.php | 12 +- .../Tests/Models/Pagination/Company.php | 21 ++- .../Tests/Models/Pagination/Department.php | 17 +- .../Doctrine/Tests/Models/Pagination/Logo.php | 23 +-- .../Doctrine/Tests/Models/Pagination/User.php | 17 +- .../Tests/Models/Pagination/User1.php | 7 +- tests/Doctrine/Tests/Models/Quote/Address.php | 26 +-- tests/Doctrine/Tests/Models/Quote/Group.php | 21 +-- .../Tests/Models/Quote/NumericEntity.php | 15 +- tests/Doctrine/Tests/Models/Quote/Phone.php | 16 +- tests/Doctrine/Tests/Models/Quote/User.php | 27 +-- .../Tests/Models/Routing/RoutingLeg.php | 20 ++- .../Tests/Models/Routing/RoutingLocation.php | 10 +- .../Tests/Models/Routing/RoutingRoute.php | 23 +-- .../Models/Routing/RoutingRouteBooking.php | 16 +- .../Tests/Models/StockExchange/Bond.php | 14 +- .../Tests/Models/StockExchange/Market.php | 11 +- .../Tests/Models/StockExchange/Stock.php | 14 +- tests/Doctrine/Tests/Models/Taxi/Car.php | 18 +- tests/Doctrine/Tests/Models/Taxi/Driver.php | 18 +- tests/Doctrine/Tests/Models/Taxi/PaidRide.php | 20 ++- tests/Doctrine/Tests/Models/Taxi/Ride.php | 18 +- tests/Doctrine/Tests/Models/Tweet/Tweet.php | 16 +- tests/Doctrine/Tests/Models/Tweet/User.php | 17 +- .../Doctrine/Tests/Models/Tweet/UserList.php | 16 +- .../ValueConversionType/AuxiliaryEntity.php | 10 +- .../InversedManyToManyCompositeIdEntity.php | 15 +- ...dManyToManyCompositeIdForeignKeyEntity.php | 17 +- .../InversedManyToManyEntity.php | 11 +- .../InversedManyToManyExtraLazyEntity.php | 11 +- .../InversedOneToManyCompositeIdEntity.php | 17 +- ...edOneToManyCompositeIdForeignKeyEntity.php | 19 ++- .../InversedOneToManyEntity.php | 13 +- .../InversedOneToManyExtraLazyEntity.php | 11 +- .../InversedOneToOneCompositeIdEntity.php | 18 +- ...sedOneToOneCompositeIdForeignKeyEntity.php | 20 ++- .../InversedOneToOneEntity.php | 14 +- .../OwningManyToManyCompositeIdEntity.php | 19 ++- ...gManyToManyCompositeIdForeignKeyEntity.php | 19 ++- .../OwningManyToManyEntity.php | 17 +- .../OwningManyToManyExtraLazyEntity.php | 17 +- .../OwningManyToOneCompositeIdEntity.php | 18 +- ...ngManyToOneCompositeIdForeignKeyEntity.php | 18 +- .../OwningManyToOneEntity.php | 14 +- .../OwningManyToOneExtraLazyEntity.php | 14 +- .../OwningOneToOneCompositeIdEntity.php | 18 +- ...ingOneToOneCompositeIdForeignKeyEntity.php | 20 ++- .../OwningOneToOneEntity.php | 14 +- .../Models/VersionedManyToOne/Article.php | 20 ++- .../Models/VersionedManyToOne/Category.php | 16 +- .../VersionedOneToOne/FirstRelatedEntity.php | 18 +- .../VersionedOneToOne/SecondRelatedEntity.php | 18 +- .../Doctrine/Tests/ORM/ConfigurationTest.php | 18 +- .../Functional/AdvancedAssociationTest.php | 87 +++++----- .../ORM/Functional/CascadeRemoveOrderTest.php | 21 +-- .../Functional/ClassTableInheritanceTest2.php | 34 ++-- .../ORM/Functional/DefaultValuesTest.php | 29 ++-- .../ORM/Functional/LifecycleCallbackTest.php | 79 ++++----- .../Functional/Locking/LockAgentWorker.php | 2 +- .../ORM/Functional/Locking/OptimisticTest.php | 49 +++--- .../Tests/ORM/Functional/MergeProxiesTest.php | 9 +- .../Functional/MergeSharedEntitiesTest.php | 19 ++- .../Tests/ORM/Functional/NotifyPolicyTest.php | 37 +++-- .../Functional/OneToOneEagerLoadingTest.php | 46 +++--- ...OneToOneSelfReferentialAssociationTest.php | 15 +- ...edJoinedTableInheritanceCollectionTest.php | 38 ++--- .../Functional/PersistentCollectionTest.php | 11 +- .../ORM/Functional/PersistentObjectTest.php | 9 +- .../Tests/ORM/Functional/ReadOnlyTest.php | 9 +- .../ORM/Functional/SchemaTool/DBAL483Test.php | 9 +- .../SchemaTool/MySqlSchemaToolTest.php | 7 +- .../SchemaTool/PostgreSqlSchemaToolTest.php | 35 ++-- .../SequenceEmulatedIdentityStrategyTest.php | 7 +- .../ORM/Functional/SequenceGeneratorTest.php | 12 +- .../ORM/Functional/Ticket/DDC1080Test.php | 51 +++--- .../ORM/Functional/Ticket/DDC1113Test.php | 22 +-- .../ORM/Functional/Ticket/DDC1151Test.php | 16 +- .../ORM/Functional/Ticket/DDC1163Test.php | 45 ++--- .../ORM/Functional/Ticket/DDC1181Test.php | 29 ++-- .../ORM/Functional/Ticket/DDC1193Test.php | 23 +-- .../ORM/Functional/Ticket/DDC1209Test.php | 31 ++-- .../ORM/Functional/Ticket/DDC1225Test.php | 22 +-- .../ORM/Functional/Ticket/DDC1228Test.php | 16 +- .../ORM/Functional/Ticket/DDC1238Test.php | 8 +- .../ORM/Functional/Ticket/DDC1250Test.php | 12 +- .../ORM/Functional/Ticket/DDC1300Test.php | 28 ++-- .../ORM/Functional/Ticket/DDC1335Test.php | 28 ++-- .../ORM/Functional/Ticket/DDC1360Test.php | 5 +- .../ORM/Functional/Ticket/DDC1383Test.php | 20 ++- .../ORM/Functional/Ticket/DDC1392Test.php | 19 ++- .../ORM/Functional/Ticket/DDC1400Test.php | 32 ++-- .../ORM/Functional/Ticket/DDC1404Test.php | 26 +-- .../ORM/Functional/Ticket/DDC1430Test.php | 30 ++-- .../ORM/Functional/Ticket/DDC1436Test.php | 14 +- .../ORM/Functional/Ticket/DDC144Test.php | 25 +-- .../ORM/Functional/Ticket/DDC1452Test.php | 17 +- .../ORM/Functional/Ticket/DDC1454Test.php | 15 +- .../ORM/Functional/Ticket/DDC1458Test.php | 25 +-- .../ORM/Functional/Ticket/DDC1461Test.php | 26 +-- .../ORM/Functional/Ticket/DDC1509Test.php | 30 ++-- .../ORM/Functional/Ticket/DDC1514Test.php | 25 +-- .../ORM/Functional/Ticket/DDC1515Test.php | 11 +- .../ORM/Functional/Ticket/DDC1526Test.php | 14 +- .../ORM/Functional/Ticket/DDC1548Test.php | 24 +-- .../ORM/Functional/Ticket/DDC1595Test.php | 28 ++-- .../ORM/Functional/Ticket/DDC1654Test.php | 12 +- .../ORM/Functional/Ticket/DDC1655Test.php | 28 ++-- .../ORM/Functional/Ticket/DDC1690Test.php | 17 +- .../ORM/Functional/Ticket/DDC1695Test.php | 46 +++--- .../ORM/Functional/Ticket/DDC1707Test.php | 16 +- .../ORM/Functional/Ticket/DDC1719Test.php | 14 +- .../ORM/Functional/Ticket/DDC1757Test.php | 37 +++-- .../ORM/Functional/Ticket/DDC1787Test.php | 16 +- .../ORM/Functional/Ticket/DDC1925Test.php | 33 ++-- .../ORM/Functional/Ticket/DDC192Test.php | 27 ++- .../ORM/Functional/Ticket/DDC1998Test.php | 7 +- .../ORM/Functional/Ticket/DDC199Test.php | 31 ++-- .../ORM/Functional/Ticket/DDC2012Test.php | 23 +-- .../ORM/Functional/Ticket/DDC2084Test.php | 24 +-- .../ORM/Functional/Ticket/DDC2106Test.php | 13 +- .../ORM/Functional/Ticket/DDC211Test.php | 35 ++-- .../ORM/Functional/Ticket/DDC2138Test.php | 66 ++++---- .../ORM/Functional/Ticket/DDC2175Test.php | 16 +- .../ORM/Functional/Ticket/DDC2182Test.php | 21 ++- .../ORM/Functional/Ticket/DDC2214Test.php | 12 +- .../ORM/Functional/Ticket/DDC2224Test.php | 9 +- .../ORM/Functional/Ticket/DDC2230Test.php | 13 +- .../ORM/Functional/Ticket/DDC2231Test.php | 5 +- .../ORM/Functional/Ticket/DDC2252Test.php | 59 +++---- .../ORM/Functional/Ticket/DDC2256Test.php | 31 ++-- .../ORM/Functional/Ticket/DDC2306Test.php | 29 ++-- .../ORM/Functional/Ticket/DDC2346Test.php | 21 +-- .../ORM/Functional/Ticket/DDC2350Test.php | 13 +- .../ORM/Functional/Ticket/DDC2359Test.php | 5 +- .../ORM/Functional/Ticket/DDC237Test.php | 27 +-- .../ORM/Functional/Ticket/DDC2387Test.php | 1 - .../ORM/Functional/Ticket/DDC2494Test.php | 27 +-- .../ORM/Functional/Ticket/DDC2575Test.php | 32 ++-- .../ORM/Functional/Ticket/DDC2579Test.php | 29 ++-- .../ORM/Functional/Ticket/DDC258Test.php | 35 ++-- .../ORM/Functional/Ticket/DDC2645Test.php | 14 +- .../ORM/Functional/Ticket/DDC2660Test.php | 17 +- .../ORM/Functional/Ticket/DDC2692Test.php | 5 +- .../ORM/Functional/Ticket/DDC2759Test.php | 30 ++-- .../ORM/Functional/Ticket/DDC2775Test.php | 39 ++--- .../ORM/Functional/Ticket/DDC279Test.php | 44 ++--- .../ORM/Functional/Ticket/DDC2825Test.php | 9 +- .../ORM/Functional/Ticket/DDC2862Test.php | 33 ++-- .../ORM/Functional/Ticket/DDC2895Test.php | 18 +- .../ORM/Functional/Ticket/DDC2931Test.php | 11 +- .../ORM/Functional/Ticket/DDC2984Test.php | 9 +- .../ORM/Functional/Ticket/DDC2996Test.php | 18 +- .../ORM/Functional/Ticket/DDC3033Test.php | 37 +++-- .../ORM/Functional/Ticket/DDC3042Test.php | 29 ++-- .../ORM/Functional/Ticket/DDC309Test.php | 17 +- .../ORM/Functional/Ticket/DDC3103Test.php | 7 +- .../ORM/Functional/Ticket/DDC3170Test.php | 25 +-- .../ORM/Functional/Ticket/DDC3192Test.php | 28 ++-- .../ORM/Functional/Ticket/DDC3223Test.php | 27 +-- .../ORM/Functional/Ticket/DDC3300Test.php | 15 +- .../ORM/Functional/Ticket/DDC3303Test.php | 22 +-- .../ORM/Functional/Ticket/DDC3330Test.php | 21 +-- .../ORM/Functional/Ticket/DDC345Test.php | 56 ++++--- .../ORM/Functional/Ticket/DDC353Test.php | 21 +-- .../ORM/Functional/Ticket/DDC3582Test.php | 22 +-- .../ORM/Functional/Ticket/DDC3634Test.php | 15 +- .../ORM/Functional/Ticket/DDC3644Test.php | 52 +++--- .../ORM/Functional/Ticket/DDC371Test.php | 18 +- .../ORM/Functional/Ticket/DDC3785Test.php | 46 +++--- .../ORM/Functional/Ticket/DDC381Test.php | 6 +- .../ORM/Functional/Ticket/DDC422Test.php | 25 +-- .../ORM/Functional/Ticket/DDC425Test.php | 10 +- .../ORM/Functional/Ticket/DDC440Test.php | 44 ++--- .../ORM/Functional/Ticket/DDC444Test.php | 12 +- .../ORM/Functional/Ticket/DDC448Test.php | 35 ++-- .../ORM/Functional/Ticket/DDC493Test.php | 32 ++-- .../ORM/Functional/Ticket/DDC512Test.php | 29 ++-- .../ORM/Functional/Ticket/DDC513Test.php | 32 ++-- .../ORM/Functional/Ticket/DDC522Test.php | 45 +++-- .../ORM/Functional/Ticket/DDC531Test.php | 23 +-- .../ORM/Functional/Ticket/DDC5684Test.php | 11 +- .../ORM/Functional/Ticket/DDC588Test.php | 12 +- .../ORM/Functional/Ticket/DDC599Test.php | 34 ++-- .../ORM/Functional/Ticket/DDC618Test.php | 22 +-- .../ORM/Functional/Ticket/DDC633Test.php | 13 +- .../ORM/Functional/Ticket/DDC656Test.php | 10 +- .../ORM/Functional/Ticket/DDC698Test.php | 34 ++-- .../ORM/Functional/Ticket/DDC719Test.php | 26 +-- .../ORM/Functional/Ticket/DDC729Test.php | 13 +- .../ORM/Functional/Ticket/DDC735Test.php | 13 +- .../ORM/Functional/Ticket/DDC742Test.php | 33 ++-- .../ORM/Functional/Ticket/DDC809Test.php | 30 ++-- .../ORM/Functional/Ticket/DDC832Test.php | 40 ++--- .../ORM/Functional/Ticket/DDC837Test.php | 48 +++--- .../ORM/Functional/Ticket/DDC881Test.php | 50 +++--- .../ORM/Functional/Ticket/DDC960Test.php | 15 +- .../ORM/Functional/Ticket/DDC992Test.php | 33 ++-- .../ORM/Functional/Ticket/GH5562Test.php | 42 +++-- .../ORM/Functional/Ticket/GH5762Test.php | 45 ++--- .../ORM/Functional/Ticket/GH5804Test.php | 17 +- .../ORM/Functional/Ticket/GH6141Test.php | 22 +-- .../ORM/Functional/Ticket/Ticket2481Test.php | 10 +- .../Tests/ORM/Functional/Ticket/Ticket69.php | 54 +++--- .../ORM/Functional/UUIDGeneratorTest.php | 6 +- .../Tests/ORM/Functional/ValueObjectsTest.php | 128 ++++++++------- .../ORM/Mapping/AbstractMappingDriverTest.php | 130 ++++++++------- .../ORM/Mapping/AnnotationDriverTest.php | 94 +++++------ .../Mapping/BasicInheritanceMappingTest.php | 87 +++++----- .../ORM/Mapping/ClassMetadataFactoryTest.php | 2 +- .../Mapping/ClassMetadataLoadEventTest.php | 11 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 4 +- .../Tests/ORM/Performance/DDC2602Test.php | 47 +++--- .../ORM/Query/LanguageRecognitionTest.php | 17 +- .../ORM/Query/SelectSqlGenerationTest.php | 19 ++- .../ORM/Sequencing/AssignedGeneratorTest.php | 11 +- .../AttachEntityListenersListenerTest.php | 21 +-- .../Tests/ORM/Tools/EntityGeneratorTest.php | 24 ++- .../Tools/EntityRepositoryGeneratorTest.php | 2 +- .../AbstractClassMetadataExporterTest.php | 5 +- .../Doctrine.Tests.ORM.Tools.Export.User.php | 40 ++--- .../Tools/Pagination/PaginationTestCase.php | 106 +++++------- .../Tools/ResolveTargetEntityListenerTest.php | 27 +-- .../Tests/ORM/Tools/SchemaToolTest.php | 43 ++--- .../Tests/ORM/Tools/SchemaValidatorTest.php | 145 ++++++++-------- tests/Doctrine/Tests/ORM/UnitOfWorkTest.php | 50 +++--- .../Doctrine/Tests/OrmFunctionalTestCase.php | 15 +- tests/Doctrine/Tests/OrmTestCase.php | 13 +- 398 files changed, 4532 insertions(+), 4037 deletions(-) diff --git a/lib/Doctrine/ORM/Configuration.php b/lib/Doctrine/ORM/Configuration.php index bd1b4324d93..0dc1670bcd2 100644 --- a/lib/Doctrine/ORM/Configuration.php +++ b/lib/Doctrine/ORM/Configuration.php @@ -143,31 +143,19 @@ public function setMetadataDriverImpl(MappingDriver $driverImpl) } /** - * Adds a new default annotation driver with a correctly configured annotation reader. If $useSimpleAnnotationReader - * is true, the notation `@Entity` will work, otherwise, the notation `@ORM\Entity` will be supported. + * Adds a new default annotation driver with a correctly configured annotation reader. * * @param array $paths - * @param bool $useSimpleAnnotationReader * * @return AnnotationDriver */ - public function newDefaultAnnotationDriver($paths = [], $useSimpleAnnotationReader = true) + public function newDefaultAnnotationDriver($paths = []) { AnnotationRegistry::registerFile(__DIR__ . '/Annotation/DoctrineAnnotations.php'); - if ($useSimpleAnnotationReader) { - // Register the ORM Annotations in the AnnotationRegistry - $reader = new SimpleAnnotationReader(); - $reader->addNamespace('Doctrine\ORM\Annotation'); - $cachedReader = new CachedReader($reader, new ArrayCache()); + $reader = new CachedReader(new AnnotationReader(), new ArrayCache()); - return new AnnotationDriver($cachedReader, (array) $paths); - } - - return new AnnotationDriver( - new CachedReader(new AnnotationReader(), new ArrayCache()), - (array) $paths - ); + return new AnnotationDriver($reader, (array) $paths); } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 459a6c8bfdb..3a55521af9f 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -473,22 +473,6 @@ public function getReflectionProperty($name) return $this->reflFields[$name]; } - /** - * Gets the ReflectionProperty for the single identifier field. - * - * @return \ReflectionProperty - * - * @throws BadMethodCallException If the class has a composite identifier. - */ - public function getSingleIdReflectionProperty() - { - if ($this->isIdentifierComposite) { - throw new BadMethodCallException("Class " . $this->name . " has a composite identifier."); - } - - return $this->reflFields[$this->identifier[0]]; - } - /** * Extracts the identifier values of an entity of this class. * @@ -1232,7 +1216,9 @@ protected function validateAndCompleteOneToOneMapping(array $mapping) if ($uniqueConstraintColumns) { if ( ! $this->table) { - throw new RuntimeException("ClassMetadata::setTable() has to be called before defining a one to one relationship."); + throw new RuntimeException( + "ClassMetadata::setTable() has to be called before defining a one to one relationship." + ); } $this->table->addUniqueConstraint( @@ -1432,7 +1418,7 @@ public function getSingleIdentifierColumnName() public function setIdentifier(array $identifier) { $this->identifier = $identifier; - $this->isIdentifierComposite = (count($this->identifier) > 1); + $this->isIdentifierComposite = count($this->identifier) > 1; } /** diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index cfb201d882d..42c7e5f15a0 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -79,14 +79,12 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $classAnnotations = $this->reader->getClassAnnotations($class); - if ($classAnnotations) { - foreach ($classAnnotations as $key => $annot) { - if ( ! is_numeric($key)) { - continue; - } - - $classAnnotations[get_class($annot)] = $annot; + foreach ($classAnnotations as $key => $annot) { + if ( ! is_numeric($key)) { + continue; } + + $classAnnotations[get_class($annot)] = $annot; } // Evaluate Entity annotation @@ -262,6 +260,48 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat ); } + // Evaluate EntityListeners annotation + if (isset($classAnnotations[Annotation\EntityListeners::class])) { + $entityListenersAnnot = $classAnnotations[Annotation\EntityListeners::class]; + + foreach ($entityListenersAnnot->value as $item) { + $listenerClassName = $metadata->fullyQualifiedClassName($item); + + if ( ! class_exists($listenerClassName)) { + throw MappingException::entityListenerClassNotFound($listenerClassName, $className); + } + + $hasMapping = false; + $listenerClass = new \ReflectionClass($listenerClassName); + + /* @var $method \ReflectionMethod */ + foreach ($listenerClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { + // find method callbacks. + $callbacks = $this->getMethodCallbacks($method); + $hasMapping = $hasMapping ?: ( ! empty($callbacks)); + + foreach ($callbacks as $value) { + $metadata->addEntityListener($value[1], $listenerClassName, $value[0]); + } + } + + // Evaluate the listener using naming convention. + if ( ! $hasMapping ) { + EntityListenerBuilder::bindEntityListener($metadata, $listenerClassName); + } + } + } + + // Evaluate @HasLifecycleCallbacks annotation + if (isset($classAnnotations[Annotation\HasLifecycleCallbacks::class])) { + /* @var $method \ReflectionMethod */ + foreach ($class->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { + foreach ($this->getMethodCallbacks($method) as $value) { + $metadata->addLifecycleCallback($value[0], $value[1]); + } + } + } + // Evaluate annotations on properties/fields /* @var $reflProperty \ReflectionProperty */ foreach ($class->getProperties() as $reflProperty) { @@ -539,48 +579,6 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $metadata->setAttributeOverride($fieldMetadata); } } - - // Evaluate EntityListeners annotation - if (isset($classAnnotations[Annotation\EntityListeners::class])) { - $entityListenersAnnot = $classAnnotations[Annotation\EntityListeners::class]; - - foreach ($entityListenersAnnot->value as $item) { - $listenerClassName = $metadata->fullyQualifiedClassName($item); - - if ( ! class_exists($listenerClassName)) { - throw MappingException::entityListenerClassNotFound($listenerClassName, $className); - } - - $hasMapping = false; - $listenerClass = new \ReflectionClass($listenerClassName); - - /* @var $method \ReflectionMethod */ - foreach ($listenerClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { - // find method callbacks. - $callbacks = $this->getMethodCallbacks($method); - $hasMapping = $hasMapping ?: ( ! empty($callbacks)); - - foreach ($callbacks as $value) { - $metadata->addEntityListener($value[1], $listenerClassName, $value[0]); - } - } - - // Evaluate the listener using naming convention. - if ( ! $hasMapping ) { - EntityListenerBuilder::bindEntityListener($metadata, $listenerClassName); - } - } - } - - // Evaluate @HasLifecycleCallbacks annotation - if (isset($classAnnotations[Annotation\HasLifecycleCallbacks::class])) { - /* @var $method \ReflectionMethod */ - foreach ($class->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { - foreach ($this->getMethodCallbacks($method) as $value) { - $metadata->addLifecycleCallback($value[0], $value[1]); - } - } - } } /** @@ -694,65 +692,6 @@ private function convertSqlResultSetMapping(Annotation\SqlResultSetMapping $resu ]; } - /** - * @param \ReflectionProperty $reflProperty - * - * @return Property - */ - private function convertProperty(\ReflectionProperty $reflProperty) - { - if ($columnAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Column::class)) { - $className = $reflProperty->getDeclaringClass()->name; - - if ($columnAnnot->type == null) { - throw MappingException::propertyTypeIsRequired($className, $reflProperty->getName()); - } - - $isFieldVersioned = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Version::class) !== null; - $fieldMetadata = $this->convertColumnAnnotationToFieldMetadata($columnAnnot, $reflProperty->getName(), $isFieldVersioned); - - // Check for Id - if ($idAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Id::class)) { - $fieldMetadata->setPrimaryKey(true); - } - - // Check for GeneratedValue strategy - if ($generatedValueAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\GeneratedValue::class)) { - $strategy = strtoupper($generatedValueAnnot->strategy); - - $metadata->setIdGeneratorType(constant(sprintf('%s::%s', GeneratorType::class, $strategy))); - } - - // Check for CustomGenerator/SequenceGenerator/TableGenerator definition - if ($seqGeneratorAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\SequenceGenerator::class)) { - $metadata->setGeneratorDefinition( - [ - 'sequenceName' => $seqGeneratorAnnot->sequenceName, - 'allocationSize' => $seqGeneratorAnnot->allocationSize, - ] - ); - } else if ($this->reader->getPropertyAnnotation($reflProperty, 'Doctrine\ORM\Mapping\TableGenerator')) { - throw MappingException::tableIdGeneratorNotImplemented($className); - } else if ($customGeneratorAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\CustomIdGenerator::class)) { - $metadata->setGeneratorDefinition( - [ - 'class' => $customGeneratorAnnot->class, - 'arguments' => $customGeneratorAnnot->arguments, - ] - ); - } - - $metadata->addProperty($fieldMetadata); - - // Check for Version - if ($this->reader->getPropertyAnnotation($reflProperty, Annotation\Version::class)) { - $metadata->setVersionProperty($fieldMetadata); - } - - return $fieldMetadata; - } - } - /** * Parse the given Column as FieldMetadata * diff --git a/lib/Doctrine/ORM/Tools/Setup.php b/lib/Doctrine/ORM/Tools/Setup.php index 8b1fda77dbd..5a4dd990ac2 100644 --- a/lib/Doctrine/ORM/Tools/Setup.php +++ b/lib/Doctrine/ORM/Tools/Setup.php @@ -61,14 +61,13 @@ public static function registerAutoloadDirectory($directory) * @param boolean $isDevMode * @param string $proxyDir * @param Cache $cache - * @param bool $useSimpleAnnotationReader * * @return Configuration */ - public static function createAnnotationMetadataConfiguration(array $paths, $isDevMode = false, $proxyDir = null, Cache $cache = null, $useSimpleAnnotationReader = true) + public static function createAnnotationMetadataConfiguration(array $paths, $isDevMode = false, $proxyDir = null, Cache $cache = null) { $config = self::createConfiguration($isDevMode, $proxyDir, $cache); - $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver($paths, $useSimpleAnnotationReader)); + $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver($paths)); return $config; } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 286bddd988f..890ff4c7514 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -3465,7 +3465,9 @@ public function hydrationComplete() */ private function convertSingleFieldIdentifierToPHPValue(ClassMetadata $class, $identifierValue) { - return $class->getTypeOfField($class->getSingleIdentifierFieldName()) - ->convertToPHPValue($identifierValue, $this->em->getConnection()->getDatabasePlatform()); + $platform = $this->em->getConnection()->getDatabasePlatform(); + $type = $class->getTypeOfField($class->getSingleIdentifierFieldName()); + + return $type->convertToPHPValue($identifierValue, $platform); } } diff --git a/tests/Doctrine/Performance/EntityManagerFactory.php b/tests/Doctrine/Performance/EntityManagerFactory.php index fab5eba767c..d856f9e2948 100644 --- a/tests/Doctrine/Performance/EntityManagerFactory.php +++ b/tests/Doctrine/Performance/EntityManagerFactory.php @@ -18,10 +18,12 @@ public static function getEntityManager(array $schemaClassNames) : EntityManager $config->setProxyDir(__DIR__ . '/../Tests/Proxies'); $config->setProxyNamespace('Doctrine\Tests\Proxies'); $config->setAutoGenerateProxyClasses(ProxyFactory::AUTOGENERATE_EVAL); - $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver([ - realpath(__DIR__ . '/Models/Cache'), - realpath(__DIR__ . '/Models/GeoNames') - ], true)); + $config->setMetadataDriverImpl( + $config->newDefaultAnnotationDriver([ + realpath(__DIR__ . '/Models/Cache'), + realpath(__DIR__ . '/Models/GeoNames') + ]) + ); $entityManager = EntityManager::create( [ diff --git a/tests/Doctrine/Tests/Mocks/EntityManagerMock.php b/tests/Doctrine/Tests/Mocks/EntityManagerMock.php index cc165793399..01b4ed26f39 100644 --- a/tests/Doctrine/Tests/Mocks/EntityManagerMock.php +++ b/tests/Doctrine/Tests/Mocks/EntityManagerMock.php @@ -72,7 +72,7 @@ public static function create($conn, Configuration $config = null, EventManager $config = new Configuration(); $config->setProxyDir(__DIR__ . '/../Proxies'); $config->setProxyNamespace('Doctrine\Tests\Proxies'); - $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver([], true)); + $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver([])); } if (null === $eventManager) { $eventManager = new EventManager(); diff --git a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php index 50a2770c5c5..bf96159d72a 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php @@ -3,87 +3,89 @@ namespace Doctrine\Tests\Models\CMS; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping; /** * CmsAddress * * @author Roman S. Borschel - * @Entity - * @Table(name="cms_addresses") * - * @NamedNativeQueries({ - * @NamedNativeQuery( + * @ORM\Entity + * @ORM\Table(name="cms_addresses") + * + * @ORM\NamedNativeQueries({ + * @ORM\NamedNativeQuery( * name = "find-all", * resultSetMapping = "mapping-find-all", * query = "SELECT id, country, city FROM cms_addresses" * ), - * @NamedNativeQuery( + * @ORM\NamedNativeQuery( * name = "find-by-id", * resultClass = "CmsAddress", * query = "SELECT * FROM cms_addresses WHERE id = ?" * ), - * @NamedNativeQuery( + * @ORM\NamedNativeQuery( * name = "count", * resultSetMapping= "mapping-count", * query = "SELECT COUNT(*) AS count FROM cms_addresses" * ) * }) * - * @SqlResultSetMappings({ - * @SqlResultSetMapping( + * @ORM\SqlResultSetMappings({ + * @ORM\SqlResultSetMapping( * name = "mapping-find-all", * entities= { - * @EntityResult( + * @ORM\EntityResult( * entityClass = "CmsAddress", * fields = { - * @FieldResult(name = "id", column="id"), - * @FieldResult(name = "city", column="city"), - * @FieldResult(name = "country", column="country") + * @ORM\FieldResult(name = "id", column="id"), + * @ORM\FieldResult(name = "city", column="city"), + * @ORM\FieldResult(name = "country", column="country") * } * ) * } * ), - * @SqlResultSetMapping( + * @ORM\SqlResultSetMapping( * name = "mapping-without-fields", * entities= { - * @EntityResult( + * @ORM\EntityResult( * entityClass = "__CLASS__" * ) * } * ), - * @SqlResultSetMapping( + * @ORM\SqlResultSetMapping( * name = "mapping-count", * columns = { - * @ColumnResult( + * @ORM\ColumnResult( * name = "count" * ) * } * ) * }) * - * @EntityListeners({"CmsAddressListener"}) + * @ORM\EntityListeners({"CmsAddressListener"}) */ class CmsAddress { /** - * @Column(type="integer") - * @Id @GeneratedValue + * @ORM\Column(type="integer") + * @ORM\Id @ORM\GeneratedValue */ public $id; /** - * @Column(length=50) + * @ORM\Column(length=50) */ public $country; /** - * @Column(length=50) + * @ORM\Column(length=50) */ public $zip; /** - * @Column(length=50) + * @ORM\Column(length=50) */ public $city; @@ -93,8 +95,8 @@ class CmsAddress public $street; /** - * @OneToOne(targetEntity="CmsUser", inversedBy="address") - * @JoinColumn(referencedColumnName="id") + * @ORM\OneToOne(targetEntity="CmsUser", inversedBy="address") + * @ORM\JoinColumn(referencedColumnName="id") */ public $user; @@ -125,7 +127,7 @@ public function setUser(CmsUser $user) { } } - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) + public static function loadMetadata(Mapping\ClassMetadata $metadata) { $tableMetadata = new Mapping\TableMetadata(); $tableMetadata->setName('company_person'); diff --git a/tests/Doctrine/Tests/Models/CMS/CmsArticle.php b/tests/Doctrine/Tests/Models/CMS/CmsArticle.php index 266cbc6622f..5a116bec19d 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsArticle.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsArticle.php @@ -2,38 +2,41 @@ namespace Doctrine\Tests\Models\CMS; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="cms_articles") + * @ORM\Entity + * @ORM\Table(name="cms_articles") */ class CmsArticle { /** - * @Id - * @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(type="string", length=255) + * @ORM\Column(type="string", length=255) */ public $topic; /** - * @Column(type="text") + * @ORM\Column(type="text") */ public $text; /** - * @ManyToOne(targetEntity="CmsUser", inversedBy="articles") - * @JoinColumn(name="user_id", referencedColumnName="id") + * @ORM\ManyToOne(targetEntity="CmsUser", inversedBy="articles") + * @ORM\JoinColumn(name="user_id", referencedColumnName="id") */ public $user; /** - * @OneToMany(targetEntity="CmsComment", mappedBy="article") + * @ORM\OneToMany(targetEntity="CmsComment", mappedBy="article") */ public $comments; /** - * @Version @column(type="integer") + * @ORM\Version + * @ORM\Column(type="integer") */ public $version; diff --git a/tests/Doctrine/Tests/Models/CMS/CmsComment.php b/tests/Doctrine/Tests/Models/CMS/CmsComment.php index 3e238210b7f..d94398962ed 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsComment.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsComment.php @@ -2,29 +2,31 @@ namespace Doctrine\Tests\Models\CMS; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="cms_comments") + * @ORM\Entity + * @ORM\Table(name="cms_comments") */ class CmsComment { /** - * @Column(type="integer") - * @Id - * @GeneratedValue(strategy="AUTO") + * @ORM\Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(type="string", length=255) + * @ORM\Column(type="string", length=255) */ public $topic; /** - * @Column(type="string") + * @ORM\Column(type="string") */ public $text; /** - * @ManyToOne(targetEntity="CmsArticle", inversedBy="comments") - * @JoinColumn(name="article_id", referencedColumnName="id") + * @ORM\ManyToOne(targetEntity="CmsArticle", inversedBy="comments") + * @ORM\JoinColumn(name="article_id", referencedColumnName="id") */ public $article; diff --git a/tests/Doctrine/Tests/Models/CMS/CmsEmail.php b/tests/Doctrine/Tests/Models/CMS/CmsEmail.php index c79c30036ab..d390ab42996 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsEmail.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsEmail.php @@ -2,27 +2,29 @@ namespace Doctrine\Tests\Models\CMS; +use Doctrine\ORM\Annotation as ORM; + /** * CmsEmail * - * @Entity - * @Table(name="cms_emails") + * @ORM\Entity + * @ORM\Table(name="cms_emails") */ class CmsEmail { /** - * @Column(type="integer") - * @Id @GeneratedValue + * @ORM\Column(type="integer") + * @ORM\Id @ORM\GeneratedValue */ public $id; /** - * @Column(length=250) + * @ORM\Column(length=250) */ public $email; /** - * @OneToOne(targetEntity="CmsUser", mappedBy="email") + * @ORM\OneToOne(targetEntity="CmsUser", mappedBy="email") */ public $user; diff --git a/tests/Doctrine/Tests/Models/CMS/CmsEmployee.php b/tests/Doctrine/Tests/Models/CMS/CmsEmployee.php index c1697150fc4..e13f1836350 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsEmployee.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsEmployee.php @@ -2,30 +2,33 @@ namespace Doctrine\Tests\Models\CMS; +use Doctrine\ORM\Annotation as ORM; + /** * Description of CmsEmployee * * @author robo - * @Entity - * @Table(name="cms_employees") + * + * @ORM\Entity + * @ORM\Table(name="cms_employees") */ class CmsEmployee { /** - * @Id - * @Column(type="integer") - * @GeneratedValue + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue */ private $id; /** - * @Column + * @ORM\Column */ private $name; /** - * @OneToOne(targetEntity="CmsEmployee") - * @JoinColumn(name="spouse_id", referencedColumnName="id") + * @ORM\OneToOne(targetEntity="CmsEmployee") + * @ORM\JoinColumn(name="spouse_id", referencedColumnName="id") */ private $spouse; diff --git a/tests/Doctrine/Tests/Models/CMS/CmsGroup.php b/tests/Doctrine/Tests/Models/CMS/CmsGroup.php index 9707d8cc280..a9f76fa9afc 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsGroup.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsGroup.php @@ -2,27 +2,30 @@ namespace Doctrine\Tests\Models\CMS; +use Doctrine\ORM\Annotation as ORM; + /** * Description of CmsGroup * * @author robo - * @Entity - * @Table(name="cms_groups") + * + * @ORM\Entity + * @ORM\Table(name="cms_groups") */ class CmsGroup { /** - * @Id - * @Column(type="integer") - * @GeneratedValue + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue */ public $id; /** - * @Column(length=50) + * @ORM\Column(length=50) */ public $name; /** - * @ManyToMany(targetEntity="CmsUser", mappedBy="groups") + * @ORM\ManyToMany(targetEntity="CmsUser", mappedBy="groups") */ public $users; diff --git a/tests/Doctrine/Tests/Models/CMS/CmsPhonenumber.php b/tests/Doctrine/Tests/Models/CMS/CmsPhonenumber.php index ff28dfd9bff..169dff43b1d 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsPhonenumber.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsPhonenumber.php @@ -2,19 +2,21 @@ namespace Doctrine\Tests\Models\CMS; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="cms_phonenumbers") + * @ORM\Entity + * @ORM\Table(name="cms_phonenumbers") */ class CmsPhonenumber { /** - * @Id @Column(length=50) + * @ORM\Id @ORM\Column(length=50) */ public $phonenumber; /** - * @ManyToOne(targetEntity="CmsUser", inversedBy="phonenumbers", cascade={"merge"}) - * @JoinColumn(name="user_id", referencedColumnName="id") + * @ORM\ManyToOne(targetEntity="CmsUser", inversedBy="phonenumbers", cascade={"merge"}) + * @ORM\JoinColumn(name="user_id", referencedColumnName="id") */ public $user; diff --git a/tests/Doctrine/Tests/Models/CMS/CmsTag.php b/tests/Doctrine/Tests/Models/CMS/CmsTag.php index 2d443b4543b..77716932b21 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsTag.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsTag.php @@ -2,26 +2,28 @@ namespace Doctrine\Tests\Models\CMS; +use Doctrine\ORM\Annotation as ORM; + /** * Description of CmsTag * - * @Entity - * @Table(name="cms_tags") + * @ORM\Entity + * @ORM\Table(name="cms_tags") */ class CmsTag { /** - * @Id - * @Column(type="integer") - * @GeneratedValue + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue */ public $id; /** - * @Column(length=50, name="tag_name", nullable=true) + * @ORM\Column(length=50, name="tag_name", nullable=true) */ public $name; /** - * @ManyToMany(targetEntity="CmsUser", mappedBy="tags") + * @ORM\ManyToMany(targetEntity="CmsUser", mappedBy="tags") */ public $users; diff --git a/tests/Doctrine/Tests/Models/CMS/CmsUser.php b/tests/Doctrine/Tests/Models/CMS/CmsUser.php index aa019698781..1f6a1ba4237 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsUser.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsUser.php @@ -3,118 +3,119 @@ namespace Doctrine\Tests\Models\CMS; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping; /** - * @Entity - * @Table(name="cms_users") - * @NamedQueries({ - * @NamedQuery(name="all", query="SELECT u FROM __CLASS__ u") + * @ORM\Entity + * @ORM\Table(name="cms_users") + * @ORM\NamedQueries({ + * @ORM\NamedQuery(name="all", query="SELECT u FROM __CLASS__ u") * }) * - * @NamedNativeQueries({ - * @NamedNativeQuery( + * @ORM\NamedNativeQueries({ + * @ORM\NamedNativeQuery( * name = "fetchIdAndUsernameWithResultClass", * resultClass = "CmsUser", * query = "SELECT id, username FROM cms_users WHERE username = ?" * ), - * @NamedNativeQuery( + * @ORM\NamedNativeQuery( * name = "fetchAllColumns", * resultClass = "CmsUser", * query = "SELECT * FROM cms_users WHERE username = ?" * ), - * @NamedNativeQuery( + * @ORM\NamedNativeQuery( * name = "fetchJoinedAddress", * resultSetMapping= "mappingJoinedAddress", * query = "SELECT u.id, u.name, u.status, a.id AS a_id, a.country, a.zip, a.city FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?" * ), - * @NamedNativeQuery( + * @ORM\NamedNativeQuery( * name = "fetchJoinedPhonenumber", * resultSetMapping= "mappingJoinedPhonenumber", * query = "SELECT id, name, status, phonenumber AS number FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ?" * ), - * @NamedNativeQuery( + * @ORM\NamedNativeQuery( * name = "fetchUserPhonenumberCount", * resultSetMapping= "mappingUserPhonenumberCount", * query = "SELECT id, name, status, COUNT(phonenumber) AS numphones FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username IN (?) GROUP BY id, name, status, username ORDER BY username" * ), - * @NamedNativeQuery( + * @ORM\NamedNativeQuery( * name = "fetchMultipleJoinsEntityResults", * resultSetMapping= "mappingMultipleJoinsEntityResults", * query = "SELECT u.id AS u_id, u.name AS u_name, u.status AS u_status, a.id AS a_id, a.zip AS a_zip, a.country AS a_country, COUNT(p.phonenumber) AS numphones FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id INNER JOIN cms_phonenumbers p ON u.id = p.user_id GROUP BY u.id, u.name, u.status, u.username, a.id, a.zip, a.country ORDER BY u.username" * ), * }) * - * @SqlResultSetMappings({ - * @SqlResultSetMapping( + * @ORM\SqlResultSetMappings({ + * @ORM\SqlResultSetMapping( * name = "mappingJoinedAddress", * entities= { - * @EntityResult( + * @ORM\EntityResult( * entityClass = "__CLASS__", * fields = { - * @FieldResult(name = "id"), - * @FieldResult(name = "name"), - * @FieldResult(name = "status"), - * @FieldResult(name = "address.zip"), - * @FieldResult(name = "address.city"), - * @FieldResult(name = "address.country"), - * @FieldResult(name = "address.id", column = "a_id"), + * @ORM\FieldResult(name = "id"), + * @ORM\FieldResult(name = "name"), + * @ORM\FieldResult(name = "status"), + * @ORM\FieldResult(name = "address.zip"), + * @ORM\FieldResult(name = "address.city"), + * @ORM\FieldResult(name = "address.country"), + * @ORM\FieldResult(name = "address.id", column = "a_id"), * } * ) * } * ), - * @SqlResultSetMapping( + * @ORM\SqlResultSetMapping( * name = "mappingJoinedPhonenumber", * entities= { - * @EntityResult( + * @ORM\EntityResult( * entityClass = "CmsUser", * fields = { - * @FieldResult("id"), - * @FieldResult("name"), - * @FieldResult("status"), - * @FieldResult("phonenumbers.phonenumber" , column = "number"), + * @ORM\FieldResult("id"), + * @ORM\FieldResult("name"), + * @ORM\FieldResult("status"), + * @ORM\FieldResult("phonenumbers.phonenumber" , column = "number"), * } * ) * } * ), - * @SqlResultSetMapping( + * @ORM\SqlResultSetMapping( * name = "mappingUserPhonenumberCount", * entities= { - * @EntityResult( + * @ORM\EntityResult( * entityClass = "CmsUser", * fields = { - * @FieldResult(name = "id"), - * @FieldResult(name = "name"), - * @FieldResult(name = "status"), + * @ORM\FieldResult(name = "id"), + * @ORM\FieldResult(name = "name"), + * @ORM\FieldResult(name = "status"), * } * ) * }, * columns = { - * @ColumnResult("numphones") + * @ORM\ColumnResult("numphones") * } * ), - * @SqlResultSetMapping( + * @ORM\SqlResultSetMapping( * name = "mappingMultipleJoinsEntityResults", * entities= { - * @EntityResult( + * @ORM\EntityResult( * entityClass = "__CLASS__", * fields = { - * @FieldResult(name = "id", column="u_id"), - * @FieldResult(name = "name", column="u_name"), - * @FieldResult(name = "status", column="u_status"), + * @ORM\FieldResult(name = "id", column="u_id"), + * @ORM\FieldResult(name = "name", column="u_name"), + * @ORM\FieldResult(name = "status", column="u_status"), * } * ), - * @EntityResult( + * @ORM\EntityResult( * entityClass = "CmsAddress", * fields = { - * @FieldResult(name = "id", column="a_id"), - * @FieldResult(name = "zip", column="a_zip"), - * @FieldResult(name = "country", column="a_country"), + * @ORM\FieldResult(name = "id", column="a_id"), + * @ORM\FieldResult(name = "zip", column="a_zip"), + * @ORM\FieldResult(name = "country", column="a_country"), * } * ) * }, * columns = { - * @ColumnResult("numphones") + * @ORM\ColumnResult("numphones") * } * ) * }) @@ -122,52 +123,52 @@ class CmsUser { /** - * @Id @Column(type="integer") - * @GeneratedValue + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue */ public $id; /** - * @Column(type="string", length=50, nullable=true) + * @ORM\Column(type="string", length=50, nullable=true) */ public $status; /** - * @Column(type="string", length=255, unique=true) + * @ORM\Column(type="string", length=255, unique=true) */ public $username; /** - * @Column(type="string", length=255) + * @ORM\Column(type="string", length=255) */ public $name; /** - * @OneToMany(targetEntity="CmsPhonenumber", mappedBy="user", cascade={"persist", "merge"}, orphanRemoval=true) + * @ORM\OneToMany(targetEntity="CmsPhonenumber", mappedBy="user", cascade={"persist", "merge"}, orphanRemoval=true) */ public $phonenumbers; /** - * @OneToMany(targetEntity="CmsArticle", mappedBy="user", cascade={"detach"}) + * @ORM\OneToMany(targetEntity="CmsArticle", mappedBy="user", cascade={"detach"}) */ public $articles; /** - * @OneToOne(targetEntity="CmsAddress", mappedBy="user", cascade={"persist"}, orphanRemoval=true) + * @ORM\OneToOne(targetEntity="CmsAddress", mappedBy="user", cascade={"persist"}, orphanRemoval=true) */ public $address; /** - * @OneToOne(targetEntity="CmsEmail", inversedBy="user", cascade={"persist"}, orphanRemoval=true) - * @JoinColumn(referencedColumnName="id", nullable=true) + * @ORM\OneToOne(targetEntity="CmsEmail", inversedBy="user", cascade={"persist"}, orphanRemoval=true) + * @ORM\JoinColumn(referencedColumnName="id", nullable=true) */ public $email; /** - * @ManyToMany(targetEntity="CmsGroup", inversedBy="users", cascade={"persist", "merge", "detach"}) - * @JoinTable(name="cms_users_groups", - * joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")}, - * inverseJoinColumns={@JoinColumn(name="group_id", referencedColumnName="id")} + * @ORM\ManyToMany(targetEntity="CmsGroup", inversedBy="users", cascade={"persist", "merge", "detach"}) + * @ORM\JoinTable(name="cms_users_groups", + * joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, + * inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")} * ) */ public $groups; /** - * @ManyToMany(targetEntity="CmsTag", inversedBy="users", cascade={"all"}) - * @JoinTable(name="cms_users_tags", - * joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")}, - * inverseJoinColumns={@JoinColumn(name="tag_id", referencedColumnName="id")} + * @ORM\ManyToMany(targetEntity="CmsTag", inversedBy="users", cascade={"all"}) + * @ORM\JoinTable(name="cms_users_tags", + * joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, + * inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")} * ) */ public $tags; @@ -270,7 +271,7 @@ public function setEmail(CmsEmail $email = null) { } } - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) + public static function loadMetadata(Mapping\ClassMetadata $metadata) { $tableMetadata = new Mapping\TableMetadata(); $tableMetadata->setName('cms_users'); diff --git a/tests/Doctrine/Tests/Models/Cache/Action.php b/tests/Doctrine/Tests/Models/Cache/Action.php index 72bbba4c173..05ea8c4684e 100644 --- a/tests/Doctrine/Tests/Models/Cache/Action.php +++ b/tests/Doctrine/Tests/Models/Cache/Action.php @@ -3,22 +3,23 @@ namespace Doctrine\Tests\Models\Cache; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity - * @Table("cache_action") + * @ORM\Entity + * @ORM\Table("cache_action") */ class Action { /** - * @Id - * @Column(type="string") - * @GeneratedValue(strategy="NONE") + * @ORM\Id + * @ORM\Column(type="string") + * @ORM\GeneratedValue(strategy="NONE") */ public $name; /** - * @OneToMany(targetEntity="Token", cascade={"persist", "remove"}, mappedBy="action") + * @ORM\OneToMany(targetEntity="Token", cascade={"persist", "remove"}, mappedBy="action") */ public $tokens; diff --git a/tests/Doctrine/Tests/Models/Cache/Address.php b/tests/Doctrine/Tests/Models/Cache/Address.php index 5ccb349d0a0..cfa7f603535 100644 --- a/tests/Doctrine/Tests/Models/Cache/Address.php +++ b/tests/Doctrine/Tests/Models/Cache/Address.php @@ -2,27 +2,29 @@ namespace Doctrine\Tests\Models\Cache; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table("cache_client_address") + * @ORM\Entity + * @ORM\Table("cache_client_address") */ class Address { /** - * @Id - * @GeneratedValue - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ public $id; /** - * @JoinColumn(name="person_id", referencedColumnName="id") - * @OneToOne(targetEntity="Person", inversedBy="address") + * @ORM\JoinColumn(name="person_id", referencedColumnName="id") + * @ORM\OneToOne(targetEntity="Person", inversedBy="address") */ public $person; /** - * @Column + * @ORM\Column */ public $location; diff --git a/tests/Doctrine/Tests/Models/Cache/Attraction.php b/tests/Doctrine/Tests/Models/Cache/Attraction.php index f53786dde7a..6d6b94280eb 100644 --- a/tests/Doctrine/Tests/Models/Cache/Attraction.php +++ b/tests/Doctrine/Tests/Models/Cache/Attraction.php @@ -3,13 +3,14 @@ namespace Doctrine\Tests\Models\Cache; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Cache("NONSTRICT_READ_WRITE") - * @Entity - * @Table("cache_attraction") - * @InheritanceType("SINGLE_TABLE") - * @DiscriminatorMap({ + * @ORM\Cache("NONSTRICT_READ_WRITE") + * @ORM\Entity + * @ORM\Table("cache_attraction") + * @ORM\InheritanceType("SINGLE_TABLE") + * @ORM\DiscriminatorMap({ * 1 = "Restaurant", * 2 = "Beach", * 3 = "Bar" @@ -18,27 +19,27 @@ abstract class Attraction { /** - * @Id - * @GeneratedValue - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ protected $id; /** - * @Column(unique=true) + * @ORM\Column(unique=true) */ protected $name; /** - * @Cache - * @ManyToOne(targetEntity="City", inversedBy="attractions") - * @JoinColumn(name="city_id", referencedColumnName="id") + * @ORM\Cache + * @ORM\ManyToOne(targetEntity="City", inversedBy="attractions") + * @ORM\JoinColumn(name="city_id", referencedColumnName="id") */ protected $city; /** - * @Cache - * @OneToMany(targetEntity="AttractionInfo", mappedBy="attraction") + * @ORM\Cache + * @ORM\OneToMany(targetEntity="AttractionInfo", mappedBy="attraction") */ protected $infos; diff --git a/tests/Doctrine/Tests/Models/Cache/AttractionContactInfo.php b/tests/Doctrine/Tests/Models/Cache/AttractionContactInfo.php index e25665528ad..25e5509541a 100644 --- a/tests/Doctrine/Tests/Models/Cache/AttractionContactInfo.php +++ b/tests/Doctrine/Tests/Models/Cache/AttractionContactInfo.php @@ -2,14 +2,16 @@ namespace Doctrine\Tests\Models\Cache; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table("cache_attraction_contact_info") + * @ORM\Entity + * @ORM\Table("cache_attraction_contact_info") */ class AttractionContactInfo extends AttractionInfo { /** - * @Column(unique=true) + * @ORM\Column(unique=true) */ protected $fone; diff --git a/tests/Doctrine/Tests/Models/Cache/AttractionInfo.php b/tests/Doctrine/Tests/Models/Cache/AttractionInfo.php index 978d8587e25..111bda9ad4e 100644 --- a/tests/Doctrine/Tests/Models/Cache/AttractionInfo.php +++ b/tests/Doctrine/Tests/Models/Cache/AttractionInfo.php @@ -2,12 +2,14 @@ namespace Doctrine\Tests\Models\Cache; +use Doctrine\ORM\Annotation as ORM; + /** - * @Cache - * @Entity - * @Table("cache_attraction_info") - * @InheritanceType("JOINED") - * @DiscriminatorMap({ + * @ORM\Cache + * @ORM\Entity + * @ORM\Table("cache_attraction_info") + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorMap({ * 1 = "AttractionContactInfo", * 2 = "AttractionLocationInfo", * }) @@ -15,16 +17,16 @@ abstract class AttractionInfo { /** - * @Id - * @GeneratedValue - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ protected $id; /** - * @Cache - * @ManyToOne(targetEntity="Attraction", inversedBy="infos") - * @JoinColumn(name="attraction_id", referencedColumnName="id") + * @ORM\Cache + * @ORM\ManyToOne(targetEntity="Attraction", inversedBy="infos") + * @ORM\JoinColumn(name="attraction_id", referencedColumnName="id") */ protected $attraction; diff --git a/tests/Doctrine/Tests/Models/Cache/AttractionLocationInfo.php b/tests/Doctrine/Tests/Models/Cache/AttractionLocationInfo.php index e7419fb4a67..bd08456d04b 100644 --- a/tests/Doctrine/Tests/Models/Cache/AttractionLocationInfo.php +++ b/tests/Doctrine/Tests/Models/Cache/AttractionLocationInfo.php @@ -2,14 +2,16 @@ namespace Doctrine\Tests\Models\Cache; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table("cache_attraction_location_info") + * @ORM\Entity + * @ORM\Table("cache_attraction_location_info") */ class AttractionLocationInfo extends AttractionInfo { /** - * @Column(unique=true) + * @ORM\Column(unique=true) */ protected $address; diff --git a/tests/Doctrine/Tests/Models/Cache/Bar.php b/tests/Doctrine/Tests/Models/Cache/Bar.php index cc54d547c90..8e334de7e9e 100644 --- a/tests/Doctrine/Tests/Models/Cache/Bar.php +++ b/tests/Doctrine/Tests/Models/Cache/Bar.php @@ -2,8 +2,10 @@ namespace Doctrine\Tests\Models\Cache; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity + * @ORM\Entity */ class Bar extends Attraction { diff --git a/tests/Doctrine/Tests/Models/Cache/Beach.php b/tests/Doctrine/Tests/Models/Cache/Beach.php index dcabe5935ab..f932537493d 100644 --- a/tests/Doctrine/Tests/Models/Cache/Beach.php +++ b/tests/Doctrine/Tests/Models/Cache/Beach.php @@ -2,8 +2,10 @@ namespace Doctrine\Tests\Models\Cache; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity + * @ORM\Entity */ class Beach extends Attraction { diff --git a/tests/Doctrine/Tests/Models/Cache/City.php b/tests/Doctrine/Tests/Models/Cache/City.php index e4e59a7d7a0..130c8f23d01 100644 --- a/tests/Doctrine/Tests/Models/Cache/City.php +++ b/tests/Doctrine/Tests/Models/Cache/City.php @@ -3,42 +3,44 @@ namespace Doctrine\Tests\Models\Cache; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; +use Doctrine\ORM\Mapping; /** - * @Cache - * @Entity - * @Table("cache_city") + * @ORM\Cache + * @ORM\Entity + * @ORM\Table("cache_city") */ class City { /** - * @Id - * @GeneratedValue - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ protected $id; /** - * @Column(unique=true) + * @ORM\Column(unique=true) */ protected $name; /** - * @Cache - * @ManyToOne(targetEntity="State", inversedBy="cities") - * @JoinColumn(name="state_id", referencedColumnName="id") + * @ORM\Cache + * @ORM\ManyToOne(targetEntity="State", inversedBy="cities") + * @ORM\JoinColumn(name="state_id", referencedColumnName="id") */ protected $state; /** - * @ManyToMany(targetEntity="Travel", mappedBy="visitedCities") + * @ORM\ManyToMany(targetEntity="Travel", mappedBy="visitedCities") */ public $travels; /** - * @Cache - * @OrderBy({"name" = "ASC"}) - * @OneToMany(targetEntity="Attraction", mappedBy="city") + * @ORM\Cache + * @ORM\OrderBy({"name" = "ASC"}) + * @ORM\OneToMany(targetEntity="Attraction", mappedBy="city") */ public $attractions; @@ -100,7 +102,7 @@ public function getAttractions() return $this->attractions; } - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) + public static function loadMetadata(Mapping\ClassMetadata $metadata) { include __DIR__ . '/../../ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php'; } diff --git a/tests/Doctrine/Tests/Models/Cache/Client.php b/tests/Doctrine/Tests/Models/Cache/Client.php index dfbc60e30cf..3de6f83c83f 100644 --- a/tests/Doctrine/Tests/Models/Cache/Client.php +++ b/tests/Doctrine/Tests/Models/Cache/Client.php @@ -2,21 +2,23 @@ namespace Doctrine\Tests\Models\Cache; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table("cache_client") + * @ORM\Entity + * @ORM\Table("cache_client") */ class Client { /** - * @Id - * @GeneratedValue - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ public $id; /** - * @Column(unique=true) + * @ORM\Column(unique=true) */ public $name; diff --git a/tests/Doctrine/Tests/Models/Cache/ComplexAction.php b/tests/Doctrine/Tests/Models/Cache/ComplexAction.php index 9c0a0abd9fb..7d9712445fb 100644 --- a/tests/Doctrine/Tests/Models/Cache/ComplexAction.php +++ b/tests/Doctrine/Tests/Models/Cache/ComplexAction.php @@ -3,34 +3,35 @@ namespace Doctrine\Tests\Models\Cache; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity - * @Table("cache_complex_action") + * @ORM\Entity + * @ORM\Table("cache_complex_action") */ class ComplexAction { /** - * @Column + * @ORM\Column */ public $name; /** - * @Id - * @OneToOne(targetEntity="Action", cascade={"persist", "remove"}) - * @JoinColumn(name="action1_name", referencedColumnName="name") + * @ORM\Id + * @ORM\OneToOne(targetEntity="Action", cascade={"persist", "remove"}) + * @ORM\JoinColumn(name="action1_name", referencedColumnName="name") */ public $action1; /** - * @Id - * @OneToOne(targetEntity="Action", cascade={"persist", "remove"}) - * @JoinColumn(name="action2_name", referencedColumnName="name") + * @ORM\Id + * @ORM\OneToOne(targetEntity="Action", cascade={"persist", "remove"}) + * @ORM\JoinColumn(name="action2_name", referencedColumnName="name") */ public $action2; /** - * @OneToMany(targetEntity="Token", cascade={"persist", "remove"}, mappedBy="complexAction") + * @ORM\OneToMany(targetEntity="Token", cascade={"persist", "remove"}, mappedBy="complexAction") */ public $tokens; diff --git a/tests/Doctrine/Tests/Models/Cache/Country.php b/tests/Doctrine/Tests/Models/Cache/Country.php index f4179f63e75..6f4166e5ee2 100644 --- a/tests/Doctrine/Tests/Models/Cache/Country.php +++ b/tests/Doctrine/Tests/Models/Cache/Country.php @@ -2,22 +2,24 @@ namespace Doctrine\Tests\Models\Cache; +use Doctrine\ORM\Annotation as ORM; + /** - * @Cache - * @Entity - * @Table("cache_country") + * @ORM\Cache + * @ORM\Entity + * @ORM\Table("cache_country") */ class Country { /** - * @Id - * @GeneratedValue - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ protected $id; /** - * @Column(unique=true) + * @ORM\Column(unique=true) */ protected $name; diff --git a/tests/Doctrine/Tests/Models/Cache/Flight.php b/tests/Doctrine/Tests/Models/Cache/Flight.php index f109c34da38..d27db4e52c2 100644 --- a/tests/Doctrine/Tests/Models/Cache/Flight.php +++ b/tests/Doctrine/Tests/Models/Cache/Flight.php @@ -2,31 +2,33 @@ namespace Doctrine\Tests\Models\Cache; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table("cache_flight") - * @Cache("NONSTRICT_READ_WRITE") + * @ORM\Entity + * @ORM\Table("cache_flight") + * @ORM\Cache("NONSTRICT_READ_WRITE") */ class Flight { /** - * @Id - * @Cache - * @ManyToOne(targetEntity="City") - * @JoinColumn(name="leaving_from_city_id", referencedColumnName="id") + * @ORM\Id + * @ORM\Cache + * @ORM\ManyToOne(targetEntity="City") + * @ORM\JoinColumn(name="leaving_from_city_id", referencedColumnName="id") */ protected $leavingFrom; /** - * @Id - * @Cache - * @ManyToOne(targetEntity="City") - * @JoinColumn(name="going_to_city_id", referencedColumnName="id") + * @ORM\Id + * @ORM\Cache + * @ORM\ManyToOne(targetEntity="City") + * @ORM\JoinColumn(name="going_to_city_id", referencedColumnName="id") */ protected $goingTo; /** - * @Column(type="date") + * @ORM\Column(type="date") */ protected $departure; diff --git a/tests/Doctrine/Tests/Models/Cache/Login.php b/tests/Doctrine/Tests/Models/Cache/Login.php index 24e5b133dac..8f29bb7f8e2 100644 --- a/tests/Doctrine/Tests/Models/Cache/Login.php +++ b/tests/Doctrine/Tests/Models/Cache/Login.php @@ -2,27 +2,29 @@ namespace Doctrine\Tests\Models\Cache; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table("cache_login") + * @ORM\Entity + * @ORM\Table("cache_login") */ class Login { /** - * @Id - * @GeneratedValue - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ public $id; /** - * @Column + * @ORM\Column */ public $name; /** - * @ManyToOne(targetEntity="Token", cascade={"persist", "remove"}, inversedBy="logins") - * @JoinColumn(name="token_id", referencedColumnName="token") + * @ORM\ManyToOne(targetEntity="Token", cascade={"persist", "remove"}, inversedBy="logins") + * @ORM\JoinColumn(name="token_id", referencedColumnName="token") */ public $token; diff --git a/tests/Doctrine/Tests/Models/Cache/Person.php b/tests/Doctrine/Tests/Models/Cache/Person.php index 01ab416aac4..0cc1a02b55d 100644 --- a/tests/Doctrine/Tests/Models/Cache/Person.php +++ b/tests/Doctrine/Tests/Models/Cache/Person.php @@ -2,27 +2,29 @@ namespace Doctrine\Tests\Models\Cache; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table("cache_person") - * @Cache("NONSTRICT_READ_WRITE") + * @ORM\Entity + * @ORM\Table("cache_person") + * @ORM\Cache("NONSTRICT_READ_WRITE") */ class Person { /** - * @Id - * @GeneratedValue - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ public $id; /** - * @Column(unique=true) + * @ORM\Column(unique=true) */ public $name; /** - * @OneToOne(targetEntity="Address", mappedBy="person") + * @ORM\OneToOne(targetEntity="Address", mappedBy="person") */ public $address; diff --git a/tests/Doctrine/Tests/Models/Cache/Restaurant.php b/tests/Doctrine/Tests/Models/Cache/Restaurant.php index c4bf94cbc7d..c071745eeb9 100644 --- a/tests/Doctrine/Tests/Models/Cache/Restaurant.php +++ b/tests/Doctrine/Tests/Models/Cache/Restaurant.php @@ -2,8 +2,10 @@ namespace Doctrine\Tests\Models\Cache; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity + * @ORM\Entity */ class Restaurant extends Attraction { diff --git a/tests/Doctrine/Tests/Models/Cache/State.php b/tests/Doctrine/Tests/Models/Cache/State.php index 77dd0122c13..603f2a3a3f0 100644 --- a/tests/Doctrine/Tests/Models/Cache/State.php +++ b/tests/Doctrine/Tests/Models/Cache/State.php @@ -3,36 +3,37 @@ namespace Doctrine\Tests\Models\Cache; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity - * @Table("cache_state") - * @Cache("NONSTRICT_READ_WRITE") + * @ORM\Entity + * @ORM\Table("cache_state") + * @ORM\Cache("NONSTRICT_READ_WRITE") */ class State { /** - * @Id - * @GeneratedValue - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ protected $id; /** - * @Column(unique=true) + * @ORM\Column(unique=true) */ protected $name; /** - * @Cache - * @ManyToOne(targetEntity="Country") - * @JoinColumn(name="country_id", referencedColumnName="id") + * @ORM\Cache + * @ORM\ManyToOne(targetEntity="Country") + * @ORM\JoinColumn(name="country_id", referencedColumnName="id") */ protected $country; /** - * @Cache("NONSTRICT_READ_WRITE") - * @OneToMany(targetEntity="City", mappedBy="state") + * @ORM\Cache("NONSTRICT_READ_WRITE") + * @ORM\OneToMany(targetEntity="City", mappedBy="state") */ protected $cities; diff --git a/tests/Doctrine/Tests/Models/Cache/Token.php b/tests/Doctrine/Tests/Models/Cache/Token.php index bcfbb1b9121..8764f8cd187 100644 --- a/tests/Doctrine/Tests/Models/Cache/Token.php +++ b/tests/Doctrine/Tests/Models/Cache/Token.php @@ -1,50 +1,55 @@ managers->removeElement($manager); } - static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) + static public function loadMetadata(Mapping\ClassMetadata $metadata) { $fieldMetadata = new Mapping\FieldMetadata('hoursWorked'); $fieldMetadata->setType(Type::getType('integer')); diff --git a/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php b/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php index 31c23b23f35..955f551e0d8 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php @@ -3,17 +3,17 @@ namespace Doctrine\Tests\Models\Company; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping; /** - * @Entity - * @EntityListeners({"CompanyContractListener","CompanyFlexUltraContractListener"}) + * @ORM\Entity + * @ORM\EntityListeners({"CompanyContractListener","CompanyFlexUltraContractListener"}) */ class CompanyFlexUltraContract extends CompanyFlexContract { /** - * @column(type="integer") - * @var int + * @ORM\Column(type="integer") */ private $maxPrice = 0; @@ -32,7 +32,7 @@ public function setMaxPrice($maxPrice) $this->maxPrice = $maxPrice; } - static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) + static public function loadMetadata(Mapping\ClassMetadata $metadata) { $fieldMetadata = new Mapping\FieldMetadata('maxPrice'); $fieldMetadata->setType(Type::getType('integer')); diff --git a/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContractListener.php b/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContractListener.php index 2f028e35f0f..82124941963 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContractListener.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContractListener.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\Models\Company; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Event\LifecycleEventArgs; class CompanyFlexUltraContractListener @@ -9,7 +10,7 @@ class CompanyFlexUltraContractListener public $prePersistCalls; /** - * @PrePersist + * @ORM\PrePersist */ public function prePersistHandler1(CompanyContract $contract, LifecycleEventArgs $args) { @@ -17,7 +18,7 @@ public function prePersistHandler1(CompanyContract $contract, LifecycleEventArgs } /** - * @PrePersist + * @ORM\PrePersist */ public function prePersistHandler2(CompanyContract $contract, LifecycleEventArgs $args) { diff --git a/tests/Doctrine/Tests/Models/Company/CompanyManager.php b/tests/Doctrine/Tests/Models/Company/CompanyManager.php index aec9a77ae9e..e7d2d51cab9 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyManager.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyManager.php @@ -2,25 +2,27 @@ namespace Doctrine\Tests\Models\Company; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="company_managers") + * @ORM\Entity + * @ORM\Table(name="company_managers") */ class CompanyManager extends CompanyEmployee { /** - * @Column(type="string", length=250) + * @ORM\Column(type="string", length=250) */ private $title; /** - * @OneToOne(targetEntity="CompanyCar", cascade={"persist"}) - * @JoinColumn(name="car_id", referencedColumnName="id") + * @ORM\OneToOne(targetEntity="CompanyCar", cascade={"persist"}) + * @ORM\JoinColumn(name="car_id", referencedColumnName="id") */ private $car; /** - * @ManyToMany(targetEntity="CompanyFlexContract", mappedBy="managers", fetch="EXTRA_LAZY") + * @ORM\ManyToMany(targetEntity="CompanyFlexContract", mappedBy="managers", fetch="EXTRA_LAZY") */ public $managedContracts; diff --git a/tests/Doctrine/Tests/Models/Company/CompanyOrganization.php b/tests/Doctrine/Tests/Models/Company/CompanyOrganization.php index ca9941062d5..8b4359280ae 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyOrganization.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyOrganization.php @@ -2,16 +2,21 @@ namespace Doctrine\Tests\Models\Company; -/** @Entity @Table(name="company_organizations") */ +use Doctrine\ORM\Annotation as ORM; + +/** + * @ORM\Entity + * @ORM\Table(name="company_organizations") + */ class CompanyOrganization { /** - * @Id @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** - * @OneToMany(targetEntity="CompanyEvent", mappedBy="organization", cascade={"persist"}, fetch="EXTRA_LAZY") + * @ORM\OneToMany(targetEntity="CompanyEvent", mappedBy="organization", cascade={"persist"}, fetch="EXTRA_LAZY") */ public $events; @@ -29,8 +34,8 @@ public function addEvent(CompanyEvent $event) { } /** - * @OneToOne(targetEntity="CompanyEvent", cascade={"persist"}) - * @JoinColumn(name="main_event_id", referencedColumnName="id", nullable=true) + * @ORM\OneToOne(targetEntity="CompanyEvent", cascade={"persist"}) + * @ORM\JoinColumn(name="main_event_id", referencedColumnName="id", nullable=true) */ private $mainevent; diff --git a/tests/Doctrine/Tests/Models/Company/CompanyPerson.php b/tests/Doctrine/Tests/Models/Company/CompanyPerson.php index e720d7aaff2..b994ad7a408 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyPerson.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyPerson.php @@ -2,45 +2,47 @@ namespace Doctrine\Tests\Models\Company; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping; /** * Description of CompanyPerson * * @author robo - * @Entity - * @Table(name="company_persons") - * @InheritanceType("JOINED") - * @DiscriminatorColumn(name="discr", type="string") - * @DiscriminatorMap({ + * + * @ORM\Entity + * @ORM\Table(name="company_persons") + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorColumn(name="discr", type="string") + * @ORM\DiscriminatorMap({ * "person" = "CompanyPerson", * "manager" = "CompanyManager", * "employee" = "CompanyEmployee" * }) * - * @NamedNativeQueries({ - * @NamedNativeQuery( + * @ORM\NamedNativeQueries({ + * @ORM\NamedNativeQuery( * name = "fetchAllWithResultClass", * resultClass = "__CLASS__", * query = "SELECT id, name, discr FROM company_persons ORDER BY name" * ), - * @NamedNativeQuery( + * @ORM\NamedNativeQuery( * name = "fetchAllWithSqlResultSetMapping", * resultSetMapping= "mappingFetchAll", * query = "SELECT id, name, discr AS discriminator FROM company_persons ORDER BY name" * ) * }) * - * @SqlResultSetMappings({ - * @SqlResultSetMapping( + * @ORM\SqlResultSetMappings({ + * @ORM\SqlResultSetMapping( * name = "mappingFetchAll", * entities= { - * @EntityResult( + * @ORM\EntityResult( * entityClass = "__CLASS__", * discriminatorColumn = "discriminator", * fields = { - * @FieldResult("id"), - * @FieldResult("name"), + * @ORM\FieldResult("id"), + * @ORM\FieldResult("name"), * } * ) * } @@ -50,32 +52,32 @@ class CompanyPerson { /** - * @Id - * @Column(type="integer") - * @GeneratedValue + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue */ private $id; /** - * @Column + * @ORM\Column */ private $name; /** - * @OneToOne(targetEntity="CompanyPerson") - * @JoinColumn(name="spouse_id", referencedColumnName="id", onDelete="CASCADE") + * @ORM\OneToOne(targetEntity="CompanyPerson") + * @ORM\JoinColumn(name="spouse_id", referencedColumnName="id", onDelete="CASCADE") */ private $spouse; /** - * @ManyToMany(targetEntity="CompanyPerson") - * @JoinTable( + * @ORM\ManyToMany(targetEntity="CompanyPerson") + * @ORM\JoinTable( * name="company_persons_friends", * joinColumns={ - * @JoinColumn(name="person_id", referencedColumnName="id", onDelete="CASCADE") + * @ORM\JoinColumn(name="person_id", referencedColumnName="id", onDelete="CASCADE") * }, * inverseJoinColumns={ - * @JoinColumn(name="friend_id", referencedColumnName="id", onDelete="CASCADE") + * @ORM\JoinColumn(name="friend_id", referencedColumnName="id", onDelete="CASCADE") * } * ) */ @@ -119,7 +121,7 @@ public function setSpouse(CompanyPerson $spouse) { } } - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) + public static function loadMetadata(Mapping\ClassMetadata $metadata) { $tableMetadata = new Mapping\TableMetadata(); $tableMetadata->setName('company_person'); diff --git a/tests/Doctrine/Tests/Models/Company/CompanyRaffle.php b/tests/Doctrine/Tests/Models/Company/CompanyRaffle.php index 733190d5845..8d45f9108c2 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyRaffle.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyRaffle.php @@ -2,9 +2,15 @@ namespace Doctrine\Tests\Models\Company; -/** @Entity @Table(name="company_raffles") */ -class CompanyRaffle extends CompanyEvent { - /** @Column */ +use Doctrine\ORM\Annotation as ORM; + +/** + * @ORM\Entity + * @ORM\Table(name="company_raffles") + */ +class CompanyRaffle extends CompanyEvent +{ + /** @ORM\Column */ private $data; public function setData($data) { diff --git a/tests/Doctrine/Tests/Models/CompositeKeyInheritance/JoinedChildClass.php b/tests/Doctrine/Tests/Models/CompositeKeyInheritance/JoinedChildClass.php index ba59736470d..46b4a093e67 100644 --- a/tests/Doctrine/Tests/Models/CompositeKeyInheritance/JoinedChildClass.php +++ b/tests/Doctrine/Tests/Models/CompositeKeyInheritance/JoinedChildClass.php @@ -1,21 +1,24 @@ setAssociationOverride('groups', [ 'inversedBy' => 'admins' diff --git a/tests/Doctrine/Tests/Models/DDC3579/DDC3579Group.php b/tests/Doctrine/Tests/Models/DDC3579/DDC3579Group.php index 821c06b57ce..2455054c051 100644 --- a/tests/Doctrine/Tests/Models/DDC3579/DDC3579Group.php +++ b/tests/Doctrine/Tests/Models/DDC3579/DDC3579Group.php @@ -3,28 +3,26 @@ namespace Doctrine\Tests\Models\DDC3579; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity + * @ORM\Entity */ class DDC3579Group { - /** - * @GeneratedValue - * @Id @Column(type="integer") + * @ORM\GeneratedValue + * @ORM\Id @ORM\Column(type="integer") */ private $id; /** - * @Column + * @ORM\Column */ private $name; /** - * @ArrayCollection - * - * @ManyToMany(targetEntity="DDC3579Admin", mappedBy="groups") + * @ORM\ManyToMany(targetEntity="DDC3579Admin", mappedBy="groups") */ private $admins; diff --git a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php index a47045cd2a6..78ede1f2a1d 100644 --- a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php +++ b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php @@ -4,30 +4,30 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping; /** - * @MappedSuperclass + * @ORM\MappedSuperClass */ class DDC3579User { - /** - * @Id - * @GeneratedValue - * @Column(type="integer", name="user_id", length=150) + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer", name="user_id", length=150) */ protected $id; /** - * @Column(name="user_name", nullable=true, unique=false, length=250) + * @ORM\Column(name="user_name", nullable=true, unique=false, length=250) */ protected $name; /** * @var ArrayCollection * - * @ManyToMany(targetEntity="DDC3579Group") + * @ORM\ManyToMany(targetEntity="DDC3579Group") */ protected $groups; diff --git a/tests/Doctrine/Tests/Models/DDC3597/DDC3597Image.php b/tests/Doctrine/Tests/Models/DDC3597/DDC3597Image.php index 5d1acfeb6ad..4398902abf9 100644 --- a/tests/Doctrine/Tests/Models/DDC3597/DDC3597Image.php +++ b/tests/Doctrine/Tests/Models/DDC3597/DDC3597Image.php @@ -3,25 +3,26 @@ namespace Doctrine\Tests\Models\DDC3597; use Doctrine\Tests\Models\DDC3597\Embeddable\DDC3597Dimension; +use Doctrine\ORM\Annotation as ORM; /** * Description of Image * * @author Volker von Hoesslin - * @Entity + * @ORM\Entity */ -class DDC3597Image extends DDC3597Media { - +class DDC3597Image extends DDC3597Media +{ /** * @var DDC3597Dimension - * @Embedded(class = "Doctrine\Tests\Models\DDC3597\Embeddable\DDC3597Dimension", columnPrefix = false) + * @ORM\Embedded(class = "Doctrine\Tests\Models\DDC3597\Embeddable\DDC3597Dimension", columnPrefix = false) */ private $dimension; /** * @param string $distributionHash */ - function __construct($distributionHash) { + public function __construct($distributionHash) { parent::__construct($distributionHash); $this->dimension = new DDC3597Dimension(); } diff --git a/tests/Doctrine/Tests/Models/DDC3597/DDC3597Media.php b/tests/Doctrine/Tests/Models/DDC3597/DDC3597Media.php index c285b3c40e6..ac48a95fe40 100644 --- a/tests/Doctrine/Tests/Models/DDC3597/DDC3597Media.php +++ b/tests/Doctrine/Tests/Models/DDC3597/DDC3597Media.php @@ -2,35 +2,37 @@ namespace Doctrine\Tests\Models\DDC3597; +use Doctrine\ORM\Annotation as ORM; + /** * Description of Media * * @author Volker von Hoesslin - * @Entity + * @ORM\Entity */ -abstract class DDC3597Media extends DDC3597Root { - +abstract class DDC3597Media extends DDC3597Root +{ /** * @var string * - * @Column + * @ORM\Column */ private $distributionHash; /** * @var integer * - * @Column + * @ORM\Column */ private $size = 0; /** * @var string - * @Column + * @ORM\Column */ private $format; - function __construct($distributionHash) { + public function __construct($distributionHash) { $this->distributionHash = $distributionHash; } @@ -68,7 +70,4 @@ public function getFormat() { public function setFormat($format) { $this->format = $format; } - - - } diff --git a/tests/Doctrine/Tests/Models/DDC3597/DDC3597Root.php b/tests/Doctrine/Tests/Models/DDC3597/DDC3597Root.php index ba918789fff..586f223f32f 100644 --- a/tests/Doctrine/Tests/Models/DDC3597/DDC3597Root.php +++ b/tests/Doctrine/Tests/Models/DDC3597/DDC3597Root.php @@ -1,45 +1,46 @@ updatedAt = $this->createdAt = new \DateTime(); @@ -48,7 +49,7 @@ public function prePersist() { /** * Set updatedAt * - * @PreUpdate + * @ORM\PreUpdate */ public function preUpdate() { $this->updatedAt = new \DateTime(); diff --git a/tests/Doctrine/Tests/Models/DDC3597/Embeddable/DDC3597Dimension.php b/tests/Doctrine/Tests/Models/DDC3597/Embeddable/DDC3597Dimension.php index cd5dc70a232..909277a7243 100644 --- a/tests/Doctrine/Tests/Models/DDC3597/Embeddable/DDC3597Dimension.php +++ b/tests/Doctrine/Tests/Models/DDC3597/Embeddable/DDC3597Dimension.php @@ -2,26 +2,28 @@ namespace Doctrine\Tests\Models\DDC3597\Embeddable; +use Doctrine\ORM\Annotation as ORM; + /** * Description of DDC3597Dimension * - * @Embeddable + * @ORM\Embeddable */ -class DDC3597Dimension { - +class DDC3597Dimension +{ /** * @var int - * @Column(type="integer", name="width") + * @ORM\Column(type="integer", name="width") */ private $width; /** * @var int - * @Column(type="integer", name="height") + * @ORM\Column(type="integer", name="height") */ private $height; - function __construct($width = 0, $height = 0) { + public function __construct($width = 0, $height = 0) { $this->setWidth($width); $this->setHeight($height); } diff --git a/tests/Doctrine/Tests/Models/DDC3699/DDC3699Child.php b/tests/Doctrine/Tests/Models/DDC3699/DDC3699Child.php index dc2ccfddde1..2fa8623c5da 100644 --- a/tests/Doctrine/Tests/Models/DDC3699/DDC3699Child.php +++ b/tests/Doctrine/Tests/Models/DDC3699/DDC3699Child.php @@ -2,18 +2,20 @@ namespace Doctrine\Tests\Models\DDC3699; -/** @Entity @Table(name="ddc3699_child") */ +use Doctrine\ORM\Annotation as ORM; + +/** @ORM\Entity @ORM\Table(name="ddc3699_child") */ class DDC3699Child extends DDC3699Parent { - /** @Id @Column(type="integer") */ + /** @ORM\Id @ORM\Column(type="integer") */ public $id; - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ public $childField; - /** @OneToOne(targetEntity="DDC3699RelationOne", inversedBy="child") */ + /** @ORM\OneToOne(targetEntity="DDC3699RelationOne", inversedBy="child") */ public $oneRelation; - /** @OneToMany(targetEntity="DDC3699RelationMany", mappedBy="child") */ + /** @ORM\OneToMany(targetEntity="DDC3699RelationMany", mappedBy="child") */ public $relations; } diff --git a/tests/Doctrine/Tests/Models/DDC3699/DDC3699Parent.php b/tests/Doctrine/Tests/Models/DDC3699/DDC3699Parent.php index 2e5e7ab363e..ef2d95f9b9c 100644 --- a/tests/Doctrine/Tests/Models/DDC3699/DDC3699Parent.php +++ b/tests/Doctrine/Tests/Models/DDC3699/DDC3699Parent.php @@ -2,9 +2,11 @@ namespace Doctrine\Tests\Models\DDC3699; -/** @MappedSuperclass */ +use Doctrine\ORM\Annotation as ORM; + +/** @ORM\MappedSuperClass */ abstract class DDC3699Parent { - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ public $parentField; } diff --git a/tests/Doctrine/Tests/Models/DDC3699/DDC3699RelationMany.php b/tests/Doctrine/Tests/Models/DDC3699/DDC3699RelationMany.php index 1b907bb9863..4e3b8be992a 100644 --- a/tests/Doctrine/Tests/Models/DDC3699/DDC3699RelationMany.php +++ b/tests/Doctrine/Tests/Models/DDC3699/DDC3699RelationMany.php @@ -2,15 +2,17 @@ namespace Doctrine\Tests\Models\DDC3699; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="ddc3699_relation_many") + * @ORM\Entity + * @ORM\Table(name="ddc3699_relation_many") */ class DDC3699RelationMany { - /** @Id @Column(type="integer") */ + /** @ORM\Id @ORM\Column(type="integer") */ public $id; - /** @ManyToOne(targetEntity="DDC3699Child", inversedBy="relations") */ + /** @ORM\ManyToOne(targetEntity="DDC3699Child", inversedBy="relations") */ public $child; } diff --git a/tests/Doctrine/Tests/Models/DDC3699/DDC3699RelationOne.php b/tests/Doctrine/Tests/Models/DDC3699/DDC3699RelationOne.php index 22807aafc82..cfa1b53999a 100644 --- a/tests/Doctrine/Tests/Models/DDC3699/DDC3699RelationOne.php +++ b/tests/Doctrine/Tests/Models/DDC3699/DDC3699RelationOne.php @@ -2,15 +2,17 @@ namespace Doctrine\Tests\Models\DDC3699; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="ddc3699_relation_one") + * @ORM\Entity + * @ORM\Table(name="ddc3699_relation_one") */ class DDC3699RelationOne { - /** @Id @Column(type="integer") */ + /** @ORM\Id @ORM\Column(type="integer") */ public $id; - /** @OneToOne(targetEntity="DDC3699Child", mappedBy="oneRelation") */ + /** @ORM\OneToOne(targetEntity="DDC3699Child", mappedBy="oneRelation") */ public $child; } diff --git a/tests/Doctrine/Tests/Models/DDC3899/DDC3899Contract.php b/tests/Doctrine/Tests/Models/DDC3899/DDC3899Contract.php index ddccd8c9a48..3ae5e80dee4 100644 --- a/tests/Doctrine/Tests/Models/DDC3899/DDC3899Contract.php +++ b/tests/Doctrine/Tests/Models/DDC3899/DDC3899Contract.php @@ -2,24 +2,26 @@ namespace Doctrine\Tests\Models\DDC3899; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="dc3899_contracts") - * @InheritanceType("SINGLE_TABLE") - * @DiscriminatorColumn(name="discr", type="string") - * @DiscriminatorMap({ + * @ORM\Entity + * @ORM\Table(name="dc3899_contracts") + * @ORM\InheritanceType("SINGLE_TABLE") + * @ORM\DiscriminatorColumn(name="discr", type="string") + * @ORM\DiscriminatorMap({ * "fix" = "DDC3899FixContract", * "flexible" = "DDC3899FlexContract" * }) */ abstract class DDC3899Contract { - /** @Id @Column(type="integer") */ + /** @ORM\Id @ORM\Column(type="integer") */ public $id; - /** @Column(type="boolean") */ + /** @ORM\Column(type="boolean") */ public $completed = false; - /** @ManyToOne(targetEntity="DDC3899User", inversedBy="contract") */ + /** @ORM\ManyToOne(targetEntity="DDC3899User", inversedBy="contract") */ public $user; } diff --git a/tests/Doctrine/Tests/Models/DDC3899/DDC3899FixContract.php b/tests/Doctrine/Tests/Models/DDC3899/DDC3899FixContract.php index 2295d798193..781d3978ce2 100644 --- a/tests/Doctrine/Tests/Models/DDC3899/DDC3899FixContract.php +++ b/tests/Doctrine/Tests/Models/DDC3899/DDC3899FixContract.php @@ -2,11 +2,13 @@ namespace Doctrine\Tests\Models\DDC3899; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity + * @ORM\Entity */ class DDC3899FixContract extends DDC3899Contract { - /** @column(type="integer") */ + /** @ORM\Column(type="integer") */ public $fixPrice = 0; } diff --git a/tests/Doctrine/Tests/Models/DDC3899/DDC3899FlexContract.php b/tests/Doctrine/Tests/Models/DDC3899/DDC3899FlexContract.php index a4ccc120c17..cfc9ca3a94e 100644 --- a/tests/Doctrine/Tests/Models/DDC3899/DDC3899FlexContract.php +++ b/tests/Doctrine/Tests/Models/DDC3899/DDC3899FlexContract.php @@ -2,14 +2,16 @@ namespace Doctrine\Tests\Models\DDC3899; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity + * @ORM\Entity */ class DDC3899FlexContract extends DDC3899Contract { - /** @column(type="integer") */ + /** @ORM\Column(type="integer") */ public $hoursWorked = 0; - /** @column(type="integer") */ + /** @ORM\Column(type="integer") */ public $pricePerHour = 0; } diff --git a/tests/Doctrine/Tests/Models/DDC3899/DDC3899User.php b/tests/Doctrine/Tests/Models/DDC3899/DDC3899User.php index 654a7a2b1b8..67c2c36feac 100644 --- a/tests/Doctrine/Tests/Models/DDC3899/DDC3899User.php +++ b/tests/Doctrine/Tests/Models/DDC3899/DDC3899User.php @@ -2,15 +2,17 @@ namespace Doctrine\Tests\Models\DDC3899; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="dc3899_users") + * @ORM\Entity + * @ORM\Table(name="dc3899_users") */ class DDC3899User { - /** @Id @Column(type="integer") */ + /** @ORM\Id @ORM\Column(type="integer") */ public $id; - /** @OneToMany(targetEntity="DDC3899Contract", mappedBy="user") */ + /** @ORM\OneToMany(targetEntity="DDC3899Contract", mappedBy="user") */ public $contracts; } diff --git a/tests/Doctrine/Tests/Models/DDC4006/DDC4006User.php b/tests/Doctrine/Tests/Models/DDC4006/DDC4006User.php index e5a9375266b..7ae799970a2 100644 --- a/tests/Doctrine/Tests/Models/DDC4006/DDC4006User.php +++ b/tests/Doctrine/Tests/Models/DDC4006/DDC4006User.php @@ -2,13 +2,15 @@ namespace Doctrine\Tests\Models\DDC4006; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity + * @ORM\Entity */ class DDC4006User { /** - * @Embedded(class="DDC4006UserId") + * @ORM\Embedded(class="DDC4006UserId") */ private $id; } diff --git a/tests/Doctrine/Tests/Models/DDC4006/DDC4006UserId.php b/tests/Doctrine/Tests/Models/DDC4006/DDC4006UserId.php index 1ba4580aeb5..ed0f57d112f 100644 --- a/tests/Doctrine/Tests/Models/DDC4006/DDC4006UserId.php +++ b/tests/Doctrine/Tests/Models/DDC4006/DDC4006UserId.php @@ -2,15 +2,17 @@ namespace Doctrine\Tests\Models\DDC4006; +use Doctrine\ORM\Annotation as ORM; + /** - * @Embeddable + * @ORM\Embeddable */ class DDC4006UserId { /** - * @Id - * @GeneratedValue("IDENTITY") - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue("IDENTITY") + * @ORM\Column(type="integer") */ private $id; } diff --git a/tests/Doctrine/Tests/Models/DDC753/DDC753CustomRepository.php b/tests/Doctrine/Tests/Models/DDC753/DDC753CustomRepository.php index 783faef61f0..bef123b591c 100644 --- a/tests/Doctrine/Tests/Models/DDC753/DDC753CustomRepository.php +++ b/tests/Doctrine/Tests/Models/DDC753/DDC753CustomRepository.php @@ -6,7 +6,6 @@ class DDC753CustomRepository extends EntityRepository { - /** * @return bool */ @@ -14,5 +13,4 @@ public function isCustomRepository() { return true; } - } diff --git a/tests/Doctrine/Tests/Models/DDC753/DDC753EntityWithCustomRepository.php b/tests/Doctrine/Tests/Models/DDC753/DDC753EntityWithCustomRepository.php index 7a9ce8d835b..8123cbbdd23 100644 --- a/tests/Doctrine/Tests/Models/DDC753/DDC753EntityWithCustomRepository.php +++ b/tests/Doctrine/Tests/Models/DDC753/DDC753EntityWithCustomRepository.php @@ -2,20 +2,22 @@ namespace Doctrine\Tests\Models\DDC753; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity(repositoryClass = "Doctrine\Tests\Models\DDC753\DDC753CustomRepository") + * @ORM\Entity(repositoryClass = "Doctrine\Tests\Models\DDC753\DDC753CustomRepository") */ class DDC753EntityWithCustomRepository { /** - * @Id - * @Column(type="integer") - * @GeneratedValue + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue */ protected $id; - /** @column(type="string") */ + /** @ORM\Column(type="string") */ protected $name; } diff --git a/tests/Doctrine/Tests/Models/DDC753/DDC753EntityWithDefaultCustomRepository.php b/tests/Doctrine/Tests/Models/DDC753/DDC753EntityWithDefaultCustomRepository.php index 6f448755fde..d56a37f88ab 100644 --- a/tests/Doctrine/Tests/Models/DDC753/DDC753EntityWithDefaultCustomRepository.php +++ b/tests/Doctrine/Tests/Models/DDC753/DDC753EntityWithDefaultCustomRepository.php @@ -2,20 +2,21 @@ namespace Doctrine\Tests\Models\DDC753; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity() + * @ORM\Entity() */ class DDC753EntityWithDefaultCustomRepository { - /** - * @Id - * @Column(type="integer") - * @GeneratedValue + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue */ protected $id; - /** @column(type="string") */ + /** @ORM\Column(type="string") */ protected $name; } diff --git a/tests/Doctrine/Tests/Models/DDC753/DDC753EntityWithInvalidRepository.php b/tests/Doctrine/Tests/Models/DDC753/DDC753EntityWithInvalidRepository.php index e480e912c4d..3881fcc4c97 100644 --- a/tests/Doctrine/Tests/Models/DDC753/DDC753EntityWithInvalidRepository.php +++ b/tests/Doctrine/Tests/Models/DDC753/DDC753EntityWithInvalidRepository.php @@ -2,20 +2,21 @@ namespace Doctrine\Tests\Models\DDC753; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity(repositoryClass = "\stdClass") + * @ORM\Entity(repositoryClass = "\stdClass") */ class DDC753EntityWithInvalidRepository { - /** - * @Id - * @Column(type="integer") - * @GeneratedValue + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue */ protected $id; - /** @column(type="string") */ + /** @ORM\Column(type="string") */ protected $name; } diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php index 6cf85dcc917..d5969b9fcd0 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php @@ -3,18 +3,19 @@ namespace Doctrine\Tests\Models\DDC869; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping; /** - * @Entity + * @ORM\Entity */ class DDC869ChequePayment extends DDC869Payment { - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ protected $serialNumber; - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) + public static function loadMetadata(Mapping\ClassMetadata $metadata) { $fieldMetadata = new Mapping\FieldMetadata('serialNumber'); diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869CreditCardPayment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869CreditCardPayment.php index 28128725cb8..8dcbdc3bb68 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869CreditCardPayment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869CreditCardPayment.php @@ -3,17 +3,18 @@ namespace Doctrine\Tests\Models\DDC869; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping; /** - * @Entity + * @ORM\Entity */ class DDC869CreditCardPayment extends DDC869Payment { - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ protected $creditCardNumber; - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) + public static function loadMetadata(Mapping\ClassMetadata $metadata) { $fieldMetadata = new Mapping\FieldMetadata('creditCardNumber'); diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php index 317c5826ca7..809fb5b217c 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php @@ -3,25 +3,24 @@ namespace Doctrine\Tests\Models\DDC869; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping; /** - * @MappedSuperclass(repositoryClass = "Doctrine\Tests\Models\DDC869\DDC869PaymentRepository") + * @ORM\MappedSuperclass(repositoryClass="Doctrine\Tests\Models\DDC869\DDC869PaymentRepository") */ class DDC869Payment { - /** - * @Id - * @Column(type="integer") - * @GeneratedValue + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue */ protected $id; - /** @Column(type="float") */ + /** @ORM\Column(type="float") */ protected $value; - public static function loadMetadata(Mapping\ClassMetadata $metadata) { $fieldMetadata = new Mapping\FieldMetadata('id'); @@ -40,5 +39,4 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $metadata->setCustomRepositoryClass(DDC869PaymentRepository::class); $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } - } diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869PaymentRepository.php b/tests/Doctrine/Tests/Models/DDC869/DDC869PaymentRepository.php index 3c11b154bce..aab5c045bf9 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869PaymentRepository.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869PaymentRepository.php @@ -6,7 +6,6 @@ class DDC869PaymentRepository extends EntityRepository { - /** * Very complex method * diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php b/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php index c2359936298..cf040ce3636 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php @@ -2,15 +2,16 @@ namespace Doctrine\Tests\Models\DDC889; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping; use Doctrine\DBAL\Types\Type; class DDC889Class extends DDC889SuperClass { /** - * @Id - * @Column(type="integer") - * @GeneratedValue + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue */ protected $id; diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889Entity.php b/tests/Doctrine/Tests/Models/DDC889/DDC889Entity.php index 577caf90456..152582c9f55 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889Entity.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889Entity.php @@ -2,12 +2,15 @@ namespace Doctrine\Tests\Models\DDC889; +use Doctrine\ORM\Annotation as ORM; +use Doctrine\ORM\Mapping; + /** - * @Entity + * @ORM\Entity */ class DDC889Entity extends DDC889SuperClass { - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) + public static function loadMetadata(Mapping\ClassMetadata $metadata) { } } diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php b/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php index 6b06a7b3d7a..0be4ecd7354 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php @@ -3,14 +3,15 @@ namespace Doctrine\Tests\Models\DDC889; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping; /** - * @MappedSuperclass + * @ORM\MappedSuperclass */ class DDC889SuperClass { - /** @Column() */ + /** @ORM\Column() */ protected $name; public static function loadMetadata(Mapping\ClassMetadata $metadata) diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964Address.php b/tests/Doctrine/Tests/Models/DDC964/DDC964Address.php index a549dc98cec..b0f42bc0470 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964Address.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964Address.php @@ -2,35 +2,36 @@ namespace Doctrine\Tests\Models\DDC964; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity + * @ORM\Entity */ class DDC964Address { - /** - * @GeneratedValue - * @Id @Column(type="integer") + * @ORM\GeneratedValue + * @ORM\Id @ORM\Column(type="integer") */ private $id; /** - * @Column + * @ORM\Column */ private $country; /** - * @Column + * @ORM\Column */ private $zip; /** - * @Column + * @ORM\Column */ private $city; /** - * @Column + * @ORM\Column */ private $street; diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php b/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php index 772b7f6e9ea..70bdc196d76 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php @@ -2,20 +2,21 @@ namespace Doctrine\Tests\Models\DDC964; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping; /** - * @Entity - * @AssociationOverrides({ - * @AssociationOverride(name="groups", - * joinTable=@JoinTable( + * @ORM\Entity + * @ORM\AssociationOverrides({ + * @ORM\AssociationOverride(name="groups", + * joinTable=@ORM\JoinTable( * name="ddc964_users_admingroups", - * joinColumns=@JoinColumn(name="adminuser_id"), - * inverseJoinColumns=@JoinColumn(name="admingroup_id") + * joinColumns=@ORM\JoinColumn(name="adminuser_id"), + * inverseJoinColumns=@ORM\JoinColumn(name="admingroup_id") * ) * ), - * @AssociationOverride(name="address", - * joinColumns=@JoinColumn( + * @ORM\AssociationOverride(name="address", + * joinColumns=@ORM\JoinColumn( * name="adminaddress_id", referencedColumnName="id" * ) * ) @@ -23,7 +24,7 @@ */ class DDC964Admin extends DDC964User { - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) + public static function loadMetadata(Mapping\ClassMetadata $metadata) { $joinColumns = []; diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964Group.php b/tests/Doctrine/Tests/Models/DDC964/DDC964Group.php index 52604099764..1455bf6ca2c 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964Group.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964Group.php @@ -3,28 +3,26 @@ namespace Doctrine\Tests\Models\DDC964; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity + * @ORM\Entity */ class DDC964Group { - /** - * @GeneratedValue - * @Id @Column(type="integer") + * @ORM\GeneratedValue + * @ORM\Id @ORM\Column(type="integer") */ private $id; /** - * @Column + * @ORM\Column */ private $name; /** - * @ArrayCollection - * - * @ManyToMany(targetEntity="DDC964User", mappedBy="groups") + * @ORM\ManyToMany(targetEntity="DDC964User", mappedBy="groups") */ private $users; diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php b/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php index 8a22639bcde..fd37c4f78c4 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php @@ -3,21 +3,22 @@ namespace Doctrine\Tests\Models\DDC964; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping; /** - * @Entity - * @AttributeOverrides({ - * @AttributeOverride( + * @ORM\Entity + * @ORM\AttributeOverrides({ + * @ORM\AttributeOverride( * name="id", - * column=@Column( + * column=@ORM\Column( * name = "guest_id", * type = "integer" * ) * ), - * @AttributeOverride( + * @ORM\AttributeOverride( * name="name", - * column=@Column( + * column=@ORM\Column( * name = "guest_name", * type = "string", * nullable = false, @@ -29,7 +30,7 @@ */ class DDC964Guest extends DDC964User { - public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) + public static function loadMetadata(Mapping\ClassMetadata $metadata) { $fieldMetadata = new Mapping\FieldMetadata('id'); diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php index a18b5b670a4..b5cb574a0e8 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php @@ -4,33 +4,33 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping; /** - * @MappedSuperclass + * @ORM\MappedSuperclass */ class DDC964User { - /** - * @Id - * @GeneratedValue - * @Column(type="integer", name="user_id") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer", name="user_id") */ protected $id; /** - * @Column(name="user_name", nullable=true, unique=false, length=250) + * @ORM\Column(name="user_name", nullable=true, unique=false, length=250) */ protected $name; /** * @var ArrayCollection * - * @ManyToMany(targetEntity="DDC964Group", inversedBy="users", cascade={"persist", "merge", "detach"}) - * @JoinTable(name="ddc964_users_groups", - * joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")}, - * inverseJoinColumns={@JoinColumn(name="group_id", referencedColumnName="id")} + * @ORM\ManyToMany(targetEntity="DDC964Group", inversedBy="users", cascade={"persist", "merge", "detach"}) + * @ORM\JoinTable(name="ddc964_users_groups", + * joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, + * inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")} * ) */ protected $groups; @@ -38,8 +38,8 @@ class DDC964User /** * @var DDC964Address * - * @ManyToOne(targetEntity="DDC964Address", cascade={"persist", "merge"}) - * @JoinColumn(name="address_id", referencedColumnName="id") + * @ORM\ManyToOne(targetEntity="DDC964Address", cascade={"persist", "merge"}) + * @ORM\JoinColumn(name="address_id", referencedColumnName="id") */ protected $address; diff --git a/tests/Doctrine/Tests/Models/DirectoryTree/AbstractContentItem.php b/tests/Doctrine/Tests/Models/DirectoryTree/AbstractContentItem.php index 41798724b20..6d0962c1e45 100644 --- a/tests/Doctrine/Tests/Models/DirectoryTree/AbstractContentItem.php +++ b/tests/Doctrine/Tests/Models/DirectoryTree/AbstractContentItem.php @@ -2,22 +2,24 @@ namespace Doctrine\Tests\Models\DirectoryTree; +use Doctrine\ORM\Annotation as ORM; + /** - * @MappedSuperclass + * @ORM\MappedSuperClass */ abstract class AbstractContentItem { /** - * @Id @Column(type="integer") @GeneratedValue + * @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ private $id; /** - * @ManyToOne(targetEntity="Directory") + * @ORM\ManyToOne(targetEntity="Directory") */ protected $parentDirectory; - /** @column(type="string") */ + /** @ORM\Column(type="string") */ protected $name; /** diff --git a/tests/Doctrine/Tests/Models/DirectoryTree/Directory.php b/tests/Doctrine/Tests/Models/DirectoryTree/Directory.php index cb3729974bc..0b1f1732db1 100644 --- a/tests/Doctrine/Tests/Models/DirectoryTree/Directory.php +++ b/tests/Doctrine/Tests/Models/DirectoryTree/Directory.php @@ -2,13 +2,15 @@ namespace Doctrine\Tests\Models\DirectoryTree; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity + * @ORM\Entity */ class Directory extends AbstractContentItem { /** - * @Column(type="string") + * @ORM\Column(type="string") */ protected $path; diff --git a/tests/Doctrine/Tests/Models/DirectoryTree/File.php b/tests/Doctrine/Tests/Models/DirectoryTree/File.php index 4f66091f972..fb728476a37 100644 --- a/tests/Doctrine/Tests/Models/DirectoryTree/File.php +++ b/tests/Doctrine/Tests/Models/DirectoryTree/File.php @@ -2,20 +2,17 @@ namespace Doctrine\Tests\Models\DirectoryTree; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="file") + * @ORM\Entity + * @ORM\Table(name="file") */ class File extends AbstractContentItem { - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ protected $extension = "html"; - public function __construct(Directory $parent = null) - { - parent::__construct($parent); - } - public function getExtension() { return $this->extension; diff --git a/tests/Doctrine/Tests/Models/ECommerce/ECommerceCart.php b/tests/Doctrine/Tests/Models/ECommerce/ECommerceCart.php index 3d9f6798f1c..be7875bb3dc 100644 --- a/tests/Doctrine/Tests/Models/ECommerce/ECommerceCart.php +++ b/tests/Doctrine/Tests/Models/ECommerce/ECommerceCart.php @@ -3,40 +3,41 @@ namespace Doctrine\Tests\Models\ECommerce; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** * ECommerceCart * Represents a typical cart of a shopping application. * * @author Giorgio Sironi - * @Entity - * @Table(name="ecommerce_carts") + * @ORM\Entity + * @ORM\Table(name="ecommerce_carts") */ class ECommerceCart { /** - * @Column(type="integer") - * @Id - * @GeneratedValue + * @ORM\Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue */ private $id; /** - * @Column(length=50, nullable=true) + * @ORM\Column(length=50, nullable=true) */ private $payment; /** - * @OneToOne(targetEntity="ECommerceCustomer", inversedBy="cart") - * @JoinColumn(name="customer_id", referencedColumnName="id") + * @ORM\OneToOne(targetEntity="ECommerceCustomer", inversedBy="cart") + * @ORM\JoinColumn(name="customer_id", referencedColumnName="id") */ private $customer; /** - * @ManyToMany(targetEntity="ECommerceProduct", cascade={"persist"}) - * @JoinTable(name="ecommerce_carts_products", - joinColumns={@JoinColumn(name="cart_id", referencedColumnName="id")}, - inverseJoinColumns={@JoinColumn(name="product_id", referencedColumnName="id")}) + * @ORM\ManyToMany(targetEntity="ECommerceProduct", cascade={"persist"}) + * @ORM\JoinTable(name="ecommerce_carts_products", + joinColumns={@ORM\JoinColumn(name="cart_id", referencedColumnName="id")}, + inverseJoinColumns={@ORM\JoinColumn(name="product_id", referencedColumnName="id")}) */ private $products; diff --git a/tests/Doctrine/Tests/Models/ECommerce/ECommerceCategory.php b/tests/Doctrine/Tests/Models/ECommerce/ECommerceCategory.php index a8d8dc6bbb1..b4fd5bf4170 100644 --- a/tests/Doctrine/Tests/Models/ECommerce/ECommerceCategory.php +++ b/tests/Doctrine/Tests/Models/ECommerce/ECommerceCategory.php @@ -3,41 +3,42 @@ namespace Doctrine\Tests\Models\ECommerce; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** * ECommerceCategory * Represents a tag applied on particular products. * * @author Giorgio Sironi - * @Entity - * @Table(name="ecommerce_categories") + * @ORM\Entity + * @ORM\Table(name="ecommerce_categories") */ class ECommerceCategory { /** - * @Id @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** - * @Column(type="string", length=50) + * @ORM\Column(type="string", length=50) */ private $name; /** - * @ManyToMany(targetEntity="ECommerceProduct", mappedBy="categories") + * @ORM\ManyToMany(targetEntity="ECommerceProduct", mappedBy="categories") */ private $products; /** - * @OneToMany(targetEntity="ECommerceCategory", mappedBy="parent", cascade={"persist"}) + * @ORM\OneToMany(targetEntity="ECommerceCategory", mappedBy="parent", cascade={"persist"}) */ private $children; /** - * @ManyToOne(targetEntity="ECommerceCategory", inversedBy="children") - * @JoinColumn(name="parent_id", referencedColumnName="id") + * @ORM\ManyToOne(targetEntity="ECommerceCategory", inversedBy="children") + * @ORM\JoinColumn(name="parent_id", referencedColumnName="id") */ private $parent; diff --git a/tests/Doctrine/Tests/Models/ECommerce/ECommerceCustomer.php b/tests/Doctrine/Tests/Models/ECommerce/ECommerceCustomer.php index a5de9e119c2..f7f77e99117 100644 --- a/tests/Doctrine/Tests/Models/ECommerce/ECommerceCustomer.php +++ b/tests/Doctrine/Tests/Models/ECommerce/ECommerceCustomer.php @@ -2,30 +2,32 @@ namespace Doctrine\Tests\Models\ECommerce; +use Doctrine\ORM\Annotation as ORM; + /** * ECommerceCustomer * Represents a registered user of a shopping application. * * @author Giorgio Sironi - * @Entity - * @Table(name="ecommerce_customers") + * @ORM\Entity + * @ORM\Table(name="ecommerce_customers") */ class ECommerceCustomer { /** - * @Column(type="integer") - * @Id - * @GeneratedValue(strategy="AUTO") + * @ORM\Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** - * @Column(type="string", length=50) + * @ORM\Column(type="string", length=50) */ private $name; /** - * @OneToOne(targetEntity="ECommerceCart", mappedBy="customer", cascade={"persist"}) + * @ORM\OneToOne(targetEntity="ECommerceCart", mappedBy="customer", cascade={"persist"}) */ private $cart; @@ -34,8 +36,8 @@ class ECommerceCustomer * only one customer at the time, while a customer can choose only one * mentor. Not properly appropriate but it works. * - * @OneToOne(targetEntity="ECommerceCustomer", cascade={"persist"}, fetch="EAGER") - * @JoinColumn(name="mentor_id", referencedColumnName="id") + * @ORM\OneToOne(targetEntity="ECommerceCustomer", cascade={"persist"}, fetch="EAGER") + * @ORM\JoinColumn(name="mentor_id", referencedColumnName="id") */ private $mentor; diff --git a/tests/Doctrine/Tests/Models/ECommerce/ECommerceFeature.php b/tests/Doctrine/Tests/Models/ECommerce/ECommerceFeature.php index 04fc2bed35d..ffeee539c9f 100644 --- a/tests/Doctrine/Tests/Models/ECommerce/ECommerceFeature.php +++ b/tests/Doctrine/Tests/Models/ECommerce/ECommerceFeature.php @@ -2,30 +2,32 @@ namespace Doctrine\Tests\Models\ECommerce; +use Doctrine\ORM\Annotation as ORM; + /** * Describes a product feature. * * @author Giorgio Sironi - * @Entity - * @Table(name="ecommerce_features") + * @ORM\Entity + * @ORM\Table(name="ecommerce_features") */ class ECommerceFeature { /** - * @Column(type="integer") - * @Id - * @GeneratedValue + * @ORM\Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue */ private $id; /** - * @Column(length=50) + * @ORM\Column(length=50) */ private $description; /** - * @ManyToOne(targetEntity="ECommerceProduct", inversedBy="features") - * @JoinColumn(name="product_id", referencedColumnName="id") + * @ORM\ManyToOne(targetEntity="ECommerceProduct", inversedBy="features") + * @ORM\JoinColumn(name="product_id", referencedColumnName="id") */ private $product; diff --git a/tests/Doctrine/Tests/Models/ECommerce/ECommerceProduct.php b/tests/Doctrine/Tests/Models/ECommerce/ECommerceProduct.php index ba4f2a53d20..ce49ae4b432 100644 --- a/tests/Doctrine/Tests/Models/ECommerce/ECommerceProduct.php +++ b/tests/Doctrine/Tests/Models/ECommerce/ECommerceProduct.php @@ -3,55 +3,56 @@ namespace Doctrine\Tests\Models\ECommerce; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** * ECommerceProduct * Represents a type of product of a shopping application. * * @author Giorgio Sironi - * @Entity - * @Table(name="ecommerce_products",indexes={@Index(name="name_idx", columns={"name"})}) + * @ORM\Entity + * @ORM\Table(name="ecommerce_products",indexes={@ORM\Index(name="name_idx", columns={"name"})}) */ class ECommerceProduct { /** - * @Column(type="integer") - * @Id - * @GeneratedValue + * @ORM\Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue */ private $id; /** - * @Column(type="string", length=50, nullable=true) + * @ORM\Column(type="string", length=50, nullable=true) */ private $name; /** - * @OneToOne(targetEntity="ECommerceShipping", cascade={"persist"}) - * @JoinColumn(name="shipping_id", referencedColumnName="id") + * @ORM\OneToOne(targetEntity="ECommerceShipping", cascade={"persist"}) + * @ORM\JoinColumn(name="shipping_id", referencedColumnName="id") */ private $shipping; /** - * @OneToMany(targetEntity="ECommerceFeature", mappedBy="product", cascade={"persist"}) + * @ORM\OneToMany(targetEntity="ECommerceFeature", mappedBy="product", cascade={"persist"}) */ private $features; /** - * @ManyToMany(targetEntity="ECommerceCategory", cascade={"persist"}, inversedBy="products") - * @JoinTable(name="ecommerce_products_categories", - * joinColumns={@JoinColumn(name="product_id", referencedColumnName="id")}, - * inverseJoinColumns={@JoinColumn(name="category_id", referencedColumnName="id")}) + * @ORM\ManyToMany(targetEntity="ECommerceCategory", cascade={"persist"}, inversedBy="products") + * @ORM\JoinTable(name="ecommerce_products_categories", + * joinColumns={@ORM\JoinColumn(name="product_id", referencedColumnName="id")}, + * inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")}) */ private $categories; /** * This relation is saved with two records in the association table for * simplicity. - * @ManyToMany(targetEntity="ECommerceProduct", cascade={"persist"}) - * @JoinTable(name="ecommerce_products_related", - * joinColumns={@JoinColumn(name="product_id", referencedColumnName="id")}, - * inverseJoinColumns={@JoinColumn(name="related_id", referencedColumnName="id")}) + * @ORM\ManyToMany(targetEntity="ECommerceProduct", cascade={"persist"}) + * @ORM\JoinTable(name="ecommerce_products_related", + * joinColumns={@ORM\JoinColumn(name="product_id", referencedColumnName="id")}, + * inverseJoinColumns={@ORM\JoinColumn(name="related_id", referencedColumnName="id")}) */ private $related; diff --git a/tests/Doctrine/Tests/Models/ECommerce/ECommerceShipping.php b/tests/Doctrine/Tests/Models/ECommerce/ECommerceShipping.php index a0f302cc22f..a2f44d64ea5 100644 --- a/tests/Doctrine/Tests/Models/ECommerce/ECommerceShipping.php +++ b/tests/Doctrine/Tests/Models/ECommerce/ECommerceShipping.php @@ -2,24 +2,26 @@ namespace Doctrine\Tests\Models\ECommerce; +use Doctrine\ORM\Annotation as ORM; + /** * ECommerceShipping * Represents a shipping method. * * @author Giorgio Sironi - * @Entity - * @Table(name="ecommerce_shippings") + * @ORM\Entity + * @ORM\Table(name="ecommerce_shippings") */ class ECommerceShipping { /** - * @Id @Column(type="integer") - * @GeneratedValue + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue */ private $id; /** - * @Column(type="integer") + * @ORM\Column(type="integer") */ private $days; diff --git a/tests/Doctrine/Tests/Models/Forum/ForumAdministrator.php b/tests/Doctrine/Tests/Models/Forum/ForumAdministrator.php index 13d78ab643a..f720c10e795 100644 --- a/tests/Doctrine/Tests/Models/Forum/ForumAdministrator.php +++ b/tests/Doctrine/Tests/Models/Forum/ForumAdministrator.php @@ -2,13 +2,15 @@ namespace Doctrine\Tests\Models\Forum; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity + * @ORM\Entity */ class ForumAdministrator extends ForumUser { /** - * @Column(type="integer", name="access_level") + * @ORM\Column(type="integer", name="access_level") */ public $accessLevel; } \ No newline at end of file diff --git a/tests/Doctrine/Tests/Models/Forum/ForumAvatar.php b/tests/Doctrine/Tests/Models/Forum/ForumAvatar.php index ce4e3c30d27..f5dc7310185 100644 --- a/tests/Doctrine/Tests/Models/Forum/ForumAvatar.php +++ b/tests/Doctrine/Tests/Models/Forum/ForumAvatar.php @@ -2,16 +2,18 @@ namespace Doctrine\Tests\Models\Forum; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="forum_avatars") + * @ORM\Entity + * @ORM\Table(name="forum_avatars") */ class ForumAvatar { /** - * @Id - * @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; } diff --git a/tests/Doctrine/Tests/Models/Forum/ForumBoard.php b/tests/Doctrine/Tests/Models/Forum/ForumBoard.php index 707d3630955..b8084d88199 100644 --- a/tests/Doctrine/Tests/Models/Forum/ForumBoard.php +++ b/tests/Doctrine/Tests/Models/Forum/ForumBoard.php @@ -2,27 +2,29 @@ namespace Doctrine\Tests\Models\Forum; +use Doctrine\ORM\Annotation as ORM; + /** * Represents a board in a forum. * * @author robo - * @Entity - * @Table(name="forum_boards") + * @ORM\Entity + * @ORM\Table(name="forum_boards") */ class ForumBoard { /** - * @Id - * @Column(type="integer") + * @ORM\Id + * @ORM\Column(type="integer") */ public $id; /** - * @Column(type="integer") + * @ORM\Column(type="integer") */ public $position; /** - * @ManyToOne(targetEntity="ForumCategory", inversedBy="boards") - * @JoinColumn(name="category_id", referencedColumnName="id") + * @ORM\ManyToOne(targetEntity="ForumCategory", inversedBy="boards") + * @ORM\JoinColumn(name="category_id", referencedColumnName="id") */ public $category; } diff --git a/tests/Doctrine/Tests/Models/Forum/ForumCategory.php b/tests/Doctrine/Tests/Models/Forum/ForumCategory.php index f04f128dce8..fc1013847b1 100644 --- a/tests/Doctrine/Tests/Models/Forum/ForumCategory.php +++ b/tests/Doctrine/Tests/Models/Forum/ForumCategory.php @@ -2,27 +2,29 @@ namespace Doctrine\Tests\Models\Forum; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="forum_categories") + * @ORM\Entity + * @ORM\Table(name="forum_categories") */ class ForumCategory { /** - * @Column(type="integer") - * @Id + * @ORM\Column(type="integer") + * @ORM\Id */ private $id; /** - * @Column(type="integer") + * @ORM\Column(type="integer") */ public $position; /** - * @Column(type="string", length=255) + * @ORM\Column(type="string", length=255) */ public $name; /** - * @OneToMany(targetEntity="ForumBoard", mappedBy="category") + * @ORM\OneToMany(targetEntity="ForumBoard", mappedBy="category") */ public $boards; diff --git a/tests/Doctrine/Tests/Models/Forum/ForumEntry.php b/tests/Doctrine/Tests/Models/Forum/ForumEntry.php index efa359b005d..a80626164e8 100644 --- a/tests/Doctrine/Tests/Models/Forum/ForumEntry.php +++ b/tests/Doctrine/Tests/Models/Forum/ForumEntry.php @@ -2,20 +2,22 @@ namespace Doctrine\Tests\Models\Forum; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="forum_entries") + * @ORM\Entity + * @ORM\Table(name="forum_entries") */ class ForumEntry { /** - * @Id - * @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(type="string", length=50) + * @ORM\Column(type="string", length=50) */ public $topic; diff --git a/tests/Doctrine/Tests/Models/Forum/ForumUser.php b/tests/Doctrine/Tests/Models/Forum/ForumUser.php index 3f3b5d9d2fe..6e76fae234e 100644 --- a/tests/Doctrine/Tests/Models/Forum/ForumUser.php +++ b/tests/Doctrine/Tests/Models/Forum/ForumUser.php @@ -2,24 +2,28 @@ namespace Doctrine\Tests\Models\Forum; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="forum_users") + * @ORM\Entity + * @ORM\Table(name="forum_users") */ class ForumUser { /** - * @Column(type="integer") - * @Id @GeneratedValue + * @ORM\Column(type="integer") + * @ORM\Id @ORM\GeneratedValue */ public $id; + /** - * @Column(type="string", length=50) + * @ORM\Column(type="string", length=50) */ public $username; + /** - * @OneToOne(targetEntity="ForumAvatar", cascade={"persist"}) - * @JoinColumn(name="avatar_id", referencedColumnName="id") + * @ORM\OneToOne(targetEntity="ForumAvatar", cascade={"persist"}) + * @ORM\JoinColumn(name="avatar_id", referencedColumnName="id") */ public $avatar; diff --git a/tests/Doctrine/Tests/Models/Generic/BooleanModel.php b/tests/Doctrine/Tests/Models/Generic/BooleanModel.php index 2c931563ee6..2e93f0ee13f 100644 --- a/tests/Doctrine/Tests/Models/Generic/BooleanModel.php +++ b/tests/Doctrine/Tests/Models/Generic/BooleanModel.php @@ -2,19 +2,21 @@ namespace Doctrine\Tests\Models\Generic; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="boolean_model") + * @ORM\Entity + * @ORM\Table(name="boolean_model") */ class BooleanModel { /** - * @Id @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(type="boolean") + * @ORM\Column(type="boolean") */ public $booleanField; } \ No newline at end of file diff --git a/tests/Doctrine/Tests/Models/Generic/DateTimeModel.php b/tests/Doctrine/Tests/Models/Generic/DateTimeModel.php index 7ef61ea278c..593706a45fb 100644 --- a/tests/Doctrine/Tests/Models/Generic/DateTimeModel.php +++ b/tests/Doctrine/Tests/Models/Generic/DateTimeModel.php @@ -2,27 +2,29 @@ namespace Doctrine\Tests\Models\Generic; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="date_time_model") + * @ORM\Entity + * @ORM\Table(name="date_time_model") */ class DateTimeModel { /** - * @Id @Column(type="integer") - * @GeneratedValue + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue */ public $id; /** - * @Column(name="col_datetime", type="datetime", nullable=true) + * @ORM\Column(name="col_datetime", type="datetime", nullable=true) */ public $datetime; /** - * @Column(name="col_date", type="date", nullable=true) + * @ORM\Column(name="col_date", type="date", nullable=true) */ public $date; /** - * @Column(name="col_time", type="time", nullable=true) + * @ORM\Column(name="col_time", type="time", nullable=true) */ public $time; } diff --git a/tests/Doctrine/Tests/Models/Generic/DecimalModel.php b/tests/Doctrine/Tests/Models/Generic/DecimalModel.php index c6944fc1abf..7a86b4d5209 100644 --- a/tests/Doctrine/Tests/Models/Generic/DecimalModel.php +++ b/tests/Doctrine/Tests/Models/Generic/DecimalModel.php @@ -2,24 +2,26 @@ namespace Doctrine\Tests\Models\Generic; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="decimal_model") + * @ORM\Entity + * @ORM\Table(name="decimal_model") */ class DecimalModel { /** - * @Id @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(name="decimal", type="decimal", scale=2, precision=5) + * @ORM\Column(name="decimal", type="decimal", scale=2, precision=5) */ public $decimal; /** - * @Column(name="high_scale", type="decimal", scale=4, precision=14) + * @ORM\Column(name="high_scale", type="decimal", scale=4, precision=14) */ public $highScale; } \ No newline at end of file diff --git a/tests/Doctrine/Tests/Models/Generic/NonAlphaColumnsEntity.php b/tests/Doctrine/Tests/Models/Generic/NonAlphaColumnsEntity.php index 05d9b3f9f41..ad02bb9608e 100644 --- a/tests/Doctrine/Tests/Models/Generic/NonAlphaColumnsEntity.php +++ b/tests/Doctrine/Tests/Models/Generic/NonAlphaColumnsEntity.php @@ -2,21 +2,23 @@ namespace Doctrine\Tests\Models\Generic; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="not-a-simple-entity") + * @ORM\Entity + * @ORM\Table(name="not-a-simple-entity") */ class NonAlphaColumnsEntity { /** - * @Id - * @Column(type="integer", name="simple-entity-id") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer", name="simple-entity-id") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(type="string", name="simple-entity-value") + * @ORM\Column(type="string", name="simple-entity-value") */ public $value; diff --git a/tests/Doctrine/Tests/Models/Generic/SerializationModel.php b/tests/Doctrine/Tests/Models/Generic/SerializationModel.php index 4f07d427aad..6339d141464 100644 --- a/tests/Doctrine/Tests/Models/Generic/SerializationModel.php +++ b/tests/Doctrine/Tests/Models/Generic/SerializationModel.php @@ -2,24 +2,26 @@ namespace Doctrine\Tests\Models\Generic; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="serialize_model") + * @ORM\Entity + * @ORM\Table(name="serialize_model") */ class SerializationModel { /** - * @Id @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(name="the_array", type="array", nullable=true) + * @ORM\Column(name="the_array", type="array", nullable=true) */ public $array; /** - * @Column(name="the_obj", type="object", nullable=true) + * @ORM\Column(name="the_obj", type="object", nullable=true) */ public $object; } \ No newline at end of file diff --git a/tests/Doctrine/Tests/Models/GeoNames/Admin1.php b/tests/Doctrine/Tests/Models/GeoNames/Admin1.php index 11b9d8e8582..82a6575e662 100644 --- a/tests/Doctrine/Tests/Models/GeoNames/Admin1.php +++ b/tests/Doctrine/Tests/Models/GeoNames/Admin1.php @@ -2,36 +2,38 @@ namespace Doctrine\Tests\Models\GeoNames; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="geonames_admin1") - * @Cache + * @ORM\Entity + * @ORM\Table(name="geonames_admin1") + * @ORM\Cache */ class Admin1 { /** - * @Id - * @Column(type="integer", length=25) - * @GeneratedValue(strategy="NONE") + * @ORM\Id + * @ORM\Column(type="integer", length=25) + * @ORM\GeneratedValue(strategy="NONE") */ public $id; /** - * @Id - * @ManyToOne(targetEntity="Country") - * @JoinColumn(name="country", referencedColumnName="id") - * @Cache + * @ORM\Id + * @ORM\ManyToOne(targetEntity="Country") + * @ORM\JoinColumn(name="country", referencedColumnName="id") + * @ORM\Cache */ public $country; /** - * @OneToMany(targetEntity="Admin1AlternateName", mappedBy="admin1") - * @Cache + * @ORM\OneToMany(targetEntity="Admin1AlternateName", mappedBy="admin1") + * @ORM\Cache */ public $names = []; /** - * @Column(type="string", length=255); + * @ORM\Column(type="string", length=255); */ public $name; diff --git a/tests/Doctrine/Tests/Models/GeoNames/Admin1AlternateName.php b/tests/Doctrine/Tests/Models/GeoNames/Admin1AlternateName.php index 49d9939bd6f..8c65de54c08 100644 --- a/tests/Doctrine/Tests/Models/GeoNames/Admin1AlternateName.php +++ b/tests/Doctrine/Tests/Models/GeoNames/Admin1AlternateName.php @@ -2,36 +2,37 @@ namespace Doctrine\Tests\Models\GeoNames; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="geonames_admin1_alternate_name") - * @Cache + * @ORM\Entity + * @ORM\Table(name="geonames_admin1_alternate_name") + * @ORM\Cache */ class Admin1AlternateName { /** - * @Id - * @Column(type="string", length=25) - * @GeneratedValue(strategy="NONE") + * @ORM\Id + * @ORM\Column(type="string", length=25) + * @ORM\GeneratedValue(strategy="NONE") */ public $id; /** - * @ManyToOne(targetEntity="Admin1", inversedBy="names") - * @JoinColumns({ - * @JoinColumn(name="admin1", referencedColumnName="id"), - * @JoinColumn(name="country", referencedColumnName="country") + * @ORM\ManyToOne(targetEntity="Admin1", inversedBy="names") + * @ORM\JoinColumns({ + * @ORM\JoinColumn(name="admin1", referencedColumnName="id"), + * @ORM\JoinColumn(name="country", referencedColumnName="country") * }) - * @Cache + * @ORM\Cache */ public $admin1; /** - * @Column(type="string", length=255); + * @ORM\Column(type="string", length=255); */ public $name; - public function __construct($id, $name, Admin1 $admin1) { $this->id = $id; diff --git a/tests/Doctrine/Tests/Models/GeoNames/City.php b/tests/Doctrine/Tests/Models/GeoNames/City.php index 411f4db9126..82391caa696 100644 --- a/tests/Doctrine/Tests/Models/GeoNames/City.php +++ b/tests/Doctrine/Tests/Models/GeoNames/City.php @@ -2,43 +2,44 @@ namespace Doctrine\Tests\Models\GeoNames; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="geonames_city") - * @Cache + * @ORM\Entity + * @ORM\Table(name="geonames_city") + * @ORM\Cache */ class City { /** - * @Id - * @Column(type="string", length=25) - * @GeneratedValue(strategy="NONE") + * @ORM\Id + * @ORM\Column(type="string", length=25) + * @ORM\GeneratedValue(strategy="NONE") */ public $id; /** - * @ManyToOne(targetEntity="Country") - * @JoinColumn(name="country", referencedColumnName="id") - * @Cache + * @ORM\ManyToOne(targetEntity="Country") + * @ORM\JoinColumn(name="country", referencedColumnName="id") + * @ORM\Cache */ public $country; /** - * @ManyToOne(targetEntity="Admin1") - * @JoinColumns({ - * @JoinColumn(name="admin1", referencedColumnName="id"), - * @JoinColumn(name="country", referencedColumnName="country") + * @ORM\ManyToOne(targetEntity="Admin1") + * @ORM\JoinColumns({ + * @ORM\JoinColumn(name="admin1", referencedColumnName="id"), + * @ORM\JoinColumn(name="country", referencedColumnName="country") * }) - * @Cache + * @ORM\Cache */ public $admin1; /** - * @Column(type="string", length=255); + * @ORM\Column(type="string", length=255) */ public $name; - public function __construct($id, $name) { $this->id = $id; diff --git a/tests/Doctrine/Tests/Models/GeoNames/Country.php b/tests/Doctrine/Tests/Models/GeoNames/Country.php index ebde305f805..a4c933d77b7 100644 --- a/tests/Doctrine/Tests/Models/GeoNames/Country.php +++ b/tests/Doctrine/Tests/Models/GeoNames/Country.php @@ -2,22 +2,24 @@ namespace Doctrine\Tests\Models\GeoNames; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="geonames_country") - * @Cache + * @ORM\Entity + * @ORM\Table(name="geonames_country") + * @ORM\Cache */ class Country { /** - * @Id - * @Column(type="string", length=2) - * @GeneratedValue(strategy="NONE") + * @ORM\Id + * @ORM\Column(type="string", length=2) + * @ORM\GeneratedValue(strategy="NONE") */ public $id; /** - * @Column(type="string", length=255); + * @ORM\Column(type="string", length=255) */ public $name; diff --git a/tests/Doctrine/Tests/Models/Global/GlobalNamespaceModel.php b/tests/Doctrine/Tests/Models/Global/GlobalNamespaceModel.php index b661d78be2f..426ff15d8d6 100644 --- a/tests/Doctrine/Tests/Models/Global/GlobalNamespaceModel.php +++ b/tests/Doctrine/Tests/Models/Global/GlobalNamespaceModel.php @@ -1,69 +1,71 @@ description; } diff --git a/tests/Doctrine/Tests/Models/Legacy/LegacyUser.php b/tests/Doctrine/Tests/Models/Legacy/LegacyUser.php index d4f35bf3a74..663acd07ad4 100644 --- a/tests/Doctrine/Tests/Models/Legacy/LegacyUser.php +++ b/tests/Doctrine/Tests/Models/Legacy/LegacyUser.php @@ -3,40 +3,46 @@ namespace Doctrine\Tests\Models\Legacy; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity - * @Table(name="legacy_users") + * @ORM\Entity + * @ORM\Table(name="legacy_users") */ class LegacyUser { /** - * @Id - * @GeneratedValue - * @Column(name="iUserId", type="integer", nullable=false) + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(name="iUserId", type="integer", nullable=false) */ public $id; + /** - * @Column(name="sUsername", type="string", length=255, unique=true) + * @ORM\Column(name="sUsername", type="string", length=255, unique=true) */ public $username; + /** - * @Column(type="string", length=255, name="name") + * @ORM\Column(type="string", length=255, name="name") */ public $name; + /** - * @OneToMany(targetEntity="LegacyArticle", mappedBy="user") + * @ORM\OneToMany(targetEntity="LegacyArticle", mappedBy="user") */ public $articles; + /** - * @OneToMany(targetEntity="LegacyUserReference", mappedBy="source", cascade={"remove"}) + * @ORM\OneToMany(targetEntity="LegacyUserReference", mappedBy="source", cascade={"remove"}) */ public $references; + /** - * @ManyToMany(targetEntity="LegacyCar", inversedBy="users", cascade={"persist", "merge"}) - * @JoinTable(name="legacy_users_cars", - * joinColumns={@JoinColumn(name="iUserId", referencedColumnName="iUserId")}, - * inverseJoinColumns={@JoinColumn(name="iCarId", referencedColumnName="iCarId")} + * @ORM\ManyToMany(targetEntity="LegacyCar", inversedBy="users", cascade={"persist", "merge"}) + * @ORM\JoinTable(name="legacy_users_cars", + * joinColumns={@ORM\JoinColumn(name="iUserId", referencedColumnName="iUserId")}, + * inverseJoinColumns={@ORM\JoinColumn(name="iCarId", referencedColumnName="iCarId")} * ) */ public $cars; diff --git a/tests/Doctrine/Tests/Models/Legacy/LegacyUserReference.php b/tests/Doctrine/Tests/Models/Legacy/LegacyUserReference.php index f06a990ff87..c16f0b0c6ef 100644 --- a/tests/Doctrine/Tests/Models/Legacy/LegacyUserReference.php +++ b/tests/Doctrine/Tests/Models/Legacy/LegacyUserReference.php @@ -2,37 +2,39 @@ namespace Doctrine\Tests\Models\Legacy; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="legacy_users_reference") + * @ORM\Entity + * @ORM\Table(name="legacy_users_reference") */ class LegacyUserReference { /** - * @Id - * @ManyToOne(targetEntity="LegacyUser", inversedBy="references") - * @JoinColumn(name="iUserIdSource", referencedColumnName="iUserId") + * @ORM\Id + * @ORM\ManyToOne(targetEntity="LegacyUser", inversedBy="references") + * @ORM\JoinColumn(name="iUserIdSource", referencedColumnName="iUserId") */ private $source; /** - * @Id - * @ManyToOne(targetEntity="LegacyUser") - * @JoinColumn(name="iUserIdTarget", referencedColumnName="iUserId") + * @ORM\Id + * @ORM\ManyToOne(targetEntity="LegacyUser") + * @ORM\JoinColumn(name="iUserIdTarget", referencedColumnName="iUserId") */ private $target; /** - * @column(type="string", name="description") + * @ORM\Column(type="string", name="description") */ private $description; /** - * @column(type="datetime", name="created") + * @ORM\Column(type="datetime", name="created") */ private $created; - public function __construct($source, $target, $description) + public function __construct(LegacyUser $source, LegacyUser $target, $description) { $source->addReference($this); $target->addReference($this); diff --git a/tests/Doctrine/Tests/Models/MixedToOneIdentity/CompositeToOneKeyState.php b/tests/Doctrine/Tests/Models/MixedToOneIdentity/CompositeToOneKeyState.php index 09bab229ef6..99fdcf3729c 100644 --- a/tests/Doctrine/Tests/Models/MixedToOneIdentity/CompositeToOneKeyState.php +++ b/tests/Doctrine/Tests/Models/MixedToOneIdentity/CompositeToOneKeyState.php @@ -2,20 +2,22 @@ namespace Doctrine\Tests\Models\MixedToOneIdentity; -/** @Entity */ +use Doctrine\ORM\Annotation as ORM; + +/** @ORM\Entity */ class CompositeToOneKeyState { /** - * @Id - * @Column(type="string") - * @GeneratedValue(strategy="NONE") + * @ORM\Id + * @ORM\Column(type="string") + * @ORM\GeneratedValue(strategy="NONE") */ public $state; /** - * @Id - * @ManyToOne(targetEntity="Country", cascade={"MERGE"}) - * @JoinColumn(referencedColumnName="country") + * @ORM\Id + * @ORM\ManyToOne(targetEntity="Country", cascade={"MERGE"}) + * @ORM\JoinColumn(referencedColumnName="country") */ public $country; } diff --git a/tests/Doctrine/Tests/Models/MixedToOneIdentity/Country.php b/tests/Doctrine/Tests/Models/MixedToOneIdentity/Country.php index 629cde160ec..3b5205f138c 100644 --- a/tests/Doctrine/Tests/Models/MixedToOneIdentity/Country.php +++ b/tests/Doctrine/Tests/Models/MixedToOneIdentity/Country.php @@ -2,9 +2,11 @@ namespace Doctrine\Tests\Models\MixedToOneIdentity; -/** @Entity */ +use Doctrine\ORM\Annotation as ORM; + +/** @ORM\Entity */ class Country { - /** @Id @Column(type="string") @GeneratedValue(strategy="NONE") */ + /** @ORM\Id @ORM\Column(type="string") @ORM\GeneratedValue(strategy="NONE") */ public $country; } diff --git a/tests/Doctrine/Tests/Models/Navigation/NavCountry.php b/tests/Doctrine/Tests/Models/Navigation/NavCountry.php index fd37552600c..812f70ae40e 100644 --- a/tests/Doctrine/Tests/Models/Navigation/NavCountry.php +++ b/tests/Doctrine/Tests/Models/Navigation/NavCountry.php @@ -2,30 +2,32 @@ namespace Doctrine\Tests\Models\Navigation; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity -* @Table(name="navigation_countries") + * @ORM\Entity + * @ORM\Table(name="navigation_countries") */ class NavCountry { /** - * @Id - * @Column(type="integer") - * @generatedValue + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue */ private $id; /** - * @Column(type="string") + * @ORM\Column(type="string") */ private $name; /** - * @OneToMany(targetEntity="NavPointOfInterest", mappedBy="country") + * @ORM\OneToMany(targetEntity="NavPointOfInterest", mappedBy="country") */ private $pois; - function __construct($name) { + public function __construct($name) { $this->name = $name; } diff --git a/tests/Doctrine/Tests/Models/Navigation/NavPhotos.php b/tests/Doctrine/Tests/Models/Navigation/NavPhotos.php index 25858d0b3eb..80a961420a6 100644 --- a/tests/Doctrine/Tests/Models/Navigation/NavPhotos.php +++ b/tests/Doctrine/Tests/Models/Navigation/NavPhotos.php @@ -2,34 +2,36 @@ namespace Doctrine\Tests\Models\Navigation; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="navigation_photos") + * @ORM\Entity + * @ORM\Table(name="navigation_photos") */ class NavPhotos { /** - * @Id - * @column(type="integer") - * @generatedValue + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue */ private $id; /** - * @ManyToOne(targetEntity="NavPointOfInterest") - * @JoinColumns({ - * @JoinColumn(name="poi_long", referencedColumnName="nav_long"), - * @JoinColumn(name="poi_lat", referencedColumnName="nav_lat") + * @ORM\ManyToOne(targetEntity="NavPointOfInterest") + * @ORM\JoinColumns({ + * @ORM\JoinColumn(name="poi_long", referencedColumnName="nav_long"), + * @ORM\JoinColumn(name="poi_lat", referencedColumnName="nav_lat") * }) */ private $poi; /** - * @column(type="string", name="file_name") + * @ORM\Column(type="string", name="file_name") */ private $file; - function __construct($poi, $file) { + public function __construct($poi, $file) { $this->poi = $poi; $this->file = $file; } diff --git a/tests/Doctrine/Tests/Models/Navigation/NavPointOfInterest.php b/tests/Doctrine/Tests/Models/Navigation/NavPointOfInterest.php index 33d0f70bdb2..80710d43782 100644 --- a/tests/Doctrine/Tests/Models/Navigation/NavPointOfInterest.php +++ b/tests/Doctrine/Tests/Models/Navigation/NavPointOfInterest.php @@ -2,41 +2,43 @@ namespace Doctrine\Tests\Models\Navigation; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="navigation_pois") + * @ORM\Entity + * @ORM\Table(name="navigation_pois") */ class NavPointOfInterest { /** - * @Id - * @Column(type="integer", name="nav_long") + * @ORM\Id + * @ORM\Column(type="integer", name="nav_long") */ private $long; /** - * @Id - * @Column(type="integer", name="nav_lat") + * @ORM\Id + * @ORM\Column(type="integer", name="nav_lat") */ private $lat; /** - * @Column(type="string") + * @ORM\Column(type="string") */ private $name; /** - * @ManyToOne(targetEntity="NavCountry", inversedBy="pois") + * @ORM\ManyToOne(targetEntity="NavCountry", inversedBy="pois") */ private $country; /** - * @ManyToMany(targetEntity="NavUser", cascade={"persist"}) - * @JoinTable(name="navigation_pois_visitors", - * inverseJoinColumns={@JoinColumn(name="user_id", referencedColumnName="id")}, + * @ORM\ManyToMany(targetEntity="NavUser", cascade={"persist"}) + * @ORM\JoinTable(name="navigation_pois_visitors", + * inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, * joinColumns={ - * @JoinColumn(name="poi_long", referencedColumnName="nav_long"), - * @JoinColumn(name="poi_lat", referencedColumnName="nav_lat") + * @ORM\JoinColumn(name="poi_long", referencedColumnName="nav_long"), + * @ORM\JoinColumn(name="poi_lat", referencedColumnName="nav_lat") * } * ) */ diff --git a/tests/Doctrine/Tests/Models/Navigation/NavTour.php b/tests/Doctrine/Tests/Models/Navigation/NavTour.php index 5a58017aa3e..982ad071fc7 100644 --- a/tests/Doctrine/Tests/Models/Navigation/NavTour.php +++ b/tests/Doctrine/Tests/Models/Navigation/NavTour.php @@ -2,31 +2,33 @@ namespace Doctrine\Tests\Models\Navigation; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="navigation_tours") + * @ORM\Entity + * @ORM\Table(name="navigation_tours") */ class NavTour { /** - * @Id - * @Column(type="integer") - * @generatedValue + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue */ private $id; /** - * @column(type="string") + * @ORM\Column(type="string") */ private $name; /** - * @ManyToMany(targetEntity="NavPointOfInterest") - * @JoinTable(name="navigation_tour_pois", - * joinColumns={@JoinColumn(name="tour_id", referencedColumnName="id")}, + * @ORM\ManyToMany(targetEntity="NavPointOfInterest") + * @ORM\JoinTable(name="navigation_tour_pois", + * joinColumns={@ORM\JoinColumn(name="tour_id", referencedColumnName="id")}, * inverseJoinColumns={ - * @JoinColumn(name="poi_long", referencedColumnName="nav_long"), - * @JoinColumn(name="poi_lat", referencedColumnName="nav_lat") + * @ORM\JoinColumn(name="poi_long", referencedColumnName="nav_long"), + * @ORM\JoinColumn(name="poi_lat", referencedColumnName="nav_lat") * } * ) * diff --git a/tests/Doctrine/Tests/Models/Navigation/NavUser.php b/tests/Doctrine/Tests/Models/Navigation/NavUser.php index 42117e46b89..4402809caa9 100644 --- a/tests/Doctrine/Tests/Models/Navigation/NavUser.php +++ b/tests/Doctrine/Tests/Models/Navigation/NavUser.php @@ -2,21 +2,23 @@ namespace Doctrine\Tests\Models\Navigation; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="navigation_users") + * @ORM\Entity + * @ORM\Table(name="navigation_users") */ class NavUser { /** - * @Id - * @Column(type="integer") - * @generatedValue + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue */ private $id; /** - * @column(type="string") + * @ORM\Column(type="string") */ private $name; diff --git a/tests/Doctrine/Tests/Models/NonPublicSchemaJoins/User.php b/tests/Doctrine/Tests/Models/NonPublicSchemaJoins/User.php index be80cea33c4..f954de7ccff 100644 --- a/tests/Doctrine/Tests/Models/NonPublicSchemaJoins/User.php +++ b/tests/Doctrine/Tests/Models/NonPublicSchemaJoins/User.php @@ -2,27 +2,29 @@ namespace Doctrine\Tests\Models\NonPublicSchemaJoins; +use Doctrine\ORM\Annotation as ORM; + /** * Doctrine\Tests\Models\NonPublicSchemaJoins\User * - * @Entity - * @Table(name="readers.user") + * @ORM\Entity + * @ORM\Table(name="readers.user") */ class User { /** - * @Column(type="integer") - * @Id + * @ORM\Column(type="integer") + * @ORM\Id */ public $id; /** - * @ManyToMany(targetEntity="Doctrine\Tests\Models\NonPublicSchemaJoins\User", inversedBy="authors") - * @JoinTable( + * @ORM\ManyToMany(targetEntity="Doctrine\Tests\Models\NonPublicSchemaJoins\User", inversedBy="authors") + * @ORM\JoinTable( * name="author_reader", * schema="readers", - * joinColumns={@JoinColumn(name="author_id", referencedColumnName="id")}, - * inverseJoinColumns={@JoinColumn(name="reader_id", referencedColumnName="id")} + * joinColumns={@ORM\JoinColumn(name="author_id", referencedColumnName="id")}, + * inverseJoinColumns={@ORM\JoinColumn(name="reader_id", referencedColumnName="id")} * ) * * @var User[] @@ -30,7 +32,7 @@ class User public $readers; /** - * @ManyToMany(targetEntity="Doctrine\Tests\Models\NonPublicSchemaJoins\User", mappedBy="readers") + * @ORM\ManyToMany(targetEntity="Doctrine\Tests\Models\NonPublicSchemaJoins\User", mappedBy="readers") * * @var User[] */ diff --git a/tests/Doctrine/Tests/Models/NullDefault/NullDefaultColumn.php b/tests/Doctrine/Tests/Models/NullDefault/NullDefaultColumn.php index 37545537f65..893e2796f1f 100644 --- a/tests/Doctrine/Tests/Models/NullDefault/NullDefaultColumn.php +++ b/tests/Doctrine/Tests/Models/NullDefault/NullDefaultColumn.php @@ -2,12 +2,14 @@ namespace Doctrine\Tests\Models\NullDefault; -/** @Entity */ +use Doctrine\ORM\Annotation as ORM; + +/** @ORM\Entity */ class NullDefaultColumn { - /** @Id @GeneratedValue @Column(type="integer") */ + /** @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") */ public $id; - /** @Column(options={"default":NULL}) */ + /** @ORM\Column(options={"default":NULL}) */ public $nullDefault; } diff --git a/tests/Doctrine/Tests/Models/OneToOneSingleTableInheritance/Cat.php b/tests/Doctrine/Tests/Models/OneToOneSingleTableInheritance/Cat.php index 993ae394949..6c8a7e4803b 100644 --- a/tests/Doctrine/Tests/Models/OneToOneSingleTableInheritance/Cat.php +++ b/tests/Doctrine/Tests/Models/OneToOneSingleTableInheritance/Cat.php @@ -2,11 +2,13 @@ namespace Doctrine\Tests\Models\OneToOneSingleTableInheritance; -/** @Entity */ +use Doctrine\ORM\Annotation as ORM; + +/** @ORM\Entity */ class Cat extends Pet { /** - * @OneToOne(targetEntity="LitterBox") + * @ORM\OneToOne(targetEntity="LitterBox") * * @var LitterBox */ diff --git a/tests/Doctrine/Tests/Models/OneToOneSingleTableInheritance/LitterBox.php b/tests/Doctrine/Tests/Models/OneToOneSingleTableInheritance/LitterBox.php index c347d2bed80..5e87cc6e6d3 100644 --- a/tests/Doctrine/Tests/Models/OneToOneSingleTableInheritance/LitterBox.php +++ b/tests/Doctrine/Tests/Models/OneToOneSingleTableInheritance/LitterBox.php @@ -2,12 +2,14 @@ namespace Doctrine\Tests\Models\OneToOneSingleTableInheritance; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="one_to_one_single_table_inheritance_litter_box") + * @ORM\Entity + * @ORM\Table(name="one_to_one_single_table_inheritance_litter_box") */ class LitterBox { - /** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue(strategy="AUTO") */ public $id; } diff --git a/tests/Doctrine/Tests/Models/OneToOneSingleTableInheritance/Pet.php b/tests/Doctrine/Tests/Models/OneToOneSingleTableInheritance/Pet.php index ed541b9836e..7121024ca67 100644 --- a/tests/Doctrine/Tests/Models/OneToOneSingleTableInheritance/Pet.php +++ b/tests/Doctrine/Tests/Models/OneToOneSingleTableInheritance/Pet.php @@ -2,14 +2,16 @@ namespace Doctrine\Tests\Models\OneToOneSingleTableInheritance; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="one_to_one_single_table_inheritance_pet") - * @InheritanceType("SINGLE_TABLE") - * @DiscriminatorMap({"cat" = "Cat"}) + * @ORM\Entity + * @ORM\Table(name="one_to_one_single_table_inheritance_pet") + * @ORM\InheritanceType("SINGLE_TABLE") + * @ORM\DiscriminatorMap({"cat" = "Cat"}) */ abstract class Pet { - /** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue(strategy="AUTO") */ public $id; } diff --git a/tests/Doctrine/Tests/Models/Pagination/Company.php b/tests/Doctrine/Tests/Models/Pagination/Company.php index 65f7e0c5366..3c214187502 100644 --- a/tests/Doctrine/Tests/Models/Pagination/Company.php +++ b/tests/Doctrine/Tests/Models/Pagination/Company.php @@ -1,40 +1,43 @@ user; } - } diff --git a/tests/Doctrine/Tests/Models/Quote/Group.php b/tests/Doctrine/Tests/Models/Quote/Group.php index c9da4d94a8e..21526548a33 100644 --- a/tests/Doctrine/Tests/Models/Quote/Group.php +++ b/tests/Doctrine/Tests/Models/Quote/Group.php @@ -2,35 +2,36 @@ namespace Doctrine\Tests\Models\Quote; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="quote-group") + * @ORM\Entity + * @ORM\Table(name="quote-group") */ class Group { - /** - * @Id - * @GeneratedValue - * @Column(type="integer", name="group-id") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer", name="group-id") */ public $id; /** - * @Column(name="group-name") + * @ORM\Column(name="group-name") */ public $name; /** * @var Group * - * @ManyToOne(targetEntity="Group", cascade={"persist"}) - * @JoinColumn(name="parent-id", referencedColumnName="group-id") + * @ORM\ManyToOne(targetEntity="Group", cascade={"persist"}) + * @ORM\JoinColumn(name="parent-id", referencedColumnName="group-id") */ public $parent; /** - * @ManyToMany(targetEntity="User", mappedBy="groups") + * @ORM\ManyToMany(targetEntity="User", mappedBy="groups") */ public $users; diff --git a/tests/Doctrine/Tests/Models/Quote/NumericEntity.php b/tests/Doctrine/Tests/Models/Quote/NumericEntity.php index 2e6404f7cbd..e99a630f9cb 100644 --- a/tests/Doctrine/Tests/Models/Quote/NumericEntity.php +++ b/tests/Doctrine/Tests/Models/Quote/NumericEntity.php @@ -2,21 +2,23 @@ namespace Doctrine\Tests\Models\Quote; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="table") + * @ORM\Entity + * @ORM\Table(name="table") */ class NumericEntity { /** - * @Id - * @Column(type="integer", name="1:1") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer", name="1:1") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(type="string", name="2:2") + * @ORM\Column(type="string", name="2:2") */ public $value; @@ -27,5 +29,4 @@ public function __construct($value) { $this->value = $value; } - } \ No newline at end of file diff --git a/tests/Doctrine/Tests/Models/Quote/Phone.php b/tests/Doctrine/Tests/Models/Quote/Phone.php index ab23cf2a3e9..4bac8a2bfea 100644 --- a/tests/Doctrine/Tests/Models/Quote/Phone.php +++ b/tests/Doctrine/Tests/Models/Quote/Phone.php @@ -2,23 +2,23 @@ namespace Doctrine\Tests\Models\Quote; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="quote-phone") + * @ORM\Entity + * @ORM\Table(name="quote-phone") */ class Phone { - /** - * @Id - * @Column(name="phone-number") + * @ORM\Id + * @ORM\Column(name="phone-number") */ public $number; /** - * @ManyToOne(targetEntity="User", inversedBy="phones") - * @JoinColumn(name="user-id", referencedColumnName="user-id") + * @ORM\ManyToOne(targetEntity="User", inversedBy="phones") + * @ORM\JoinColumn(name="user-id", referencedColumnName="user-id") */ public $user; - } diff --git a/tests/Doctrine/Tests/Models/Quote/User.php b/tests/Doctrine/Tests/Models/Quote/User.php index b82893d6d2b..0e9ee5593fc 100644 --- a/tests/Doctrine/Tests/Models/Quote/User.php +++ b/tests/Doctrine/Tests/Models/Quote/User.php @@ -3,47 +3,48 @@ namespace Doctrine\Tests\Models\Quote; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity - * @Table(name="quote-user") + * @ORM\Entity + * @ORM\Table(name="quote-user") */ class User { /** - * @Id - * @GeneratedValue - * @Column(type="integer", name="user-id") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer", name="user-id") */ public $id; /** - * @Column(type="string", name="user-name") + * @ORM\Column(type="string", name="user-name") */ public $name; /** - * @OneToMany(targetEntity="Phone", mappedBy="user", cascade={"persist"}) + * @ORM\OneToMany(targetEntity="Phone", mappedBy="user", cascade={"persist"}) */ public $phones; /** - * @JoinColumn(name="address-id", referencedColumnName="address-id") - * @OneToOne(targetEntity="Address", mappedBy="user", cascade={"persist"}, fetch="EAGER") + * @ORM\JoinColumn(name="address-id", referencedColumnName="address-id") + * @ORM\OneToOne(targetEntity="Address", mappedBy="user", cascade={"persist"}, fetch="EAGER") */ public $address; /** - * @ManyToMany(targetEntity="Group", inversedBy="users", cascade={"all"}, fetch="EXTRA_LAZY") - * @JoinTable(name="quote-users-groups", + * @ORM\ManyToMany(targetEntity="Group", inversedBy="users", cascade={"all"}, fetch="EXTRA_LAZY") + * @ORM\JoinTable(name="quote-users-groups", * joinColumns={ - * @JoinColumn( + * @ORM\JoinColumn( * name="user-id", * referencedColumnName="user-id" * ) * }, * inverseJoinColumns={ - * @JoinColumn( + * @ORM\JoinColumn( * name="group-id", * referencedColumnName="group-id" * ) diff --git a/tests/Doctrine/Tests/Models/Routing/RoutingLeg.php b/tests/Doctrine/Tests/Models/Routing/RoutingLeg.php index a130e7b0c4d..894bc577998 100644 --- a/tests/Doctrine/Tests/Models/Routing/RoutingLeg.php +++ b/tests/Doctrine/Tests/Models/Routing/RoutingLeg.php @@ -2,36 +2,38 @@ namespace Doctrine\Tests\Models\Routing; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity + * @ORM\Entity */ class RoutingLeg { /** - * @Id @generatedValue - * @column(type="integer") + * @ORM\Id @ORM\GeneratedValue + * @ORM\Column(type="integer") */ public $id; /** - * @ManyToOne(targetEntity="RoutingLocation") - * @JoinColumn(name="from_id", referencedColumnName="id") + * @ORM\ManyToOne(targetEntity="RoutingLocation") + * @ORM\JoinColumn(name="from_id", referencedColumnName="id") */ public $fromLocation; /** - * @ManyToOne(targetEntity="RoutingLocation") - * @JoinColumn(name="to_id", referencedColumnName="id") + * @ORM\ManyToOne(targetEntity="RoutingLocation") + * @ORM\JoinColumn(name="to_id", referencedColumnName="id") */ public $toLocation; /** - * @Column(type="datetime") + * @ORM\Column(type="datetime") */ public $departureDate; /** - * @Column(type="datetime") + * @ORM\Column(type="datetime") */ public $arrivalDate; } \ No newline at end of file diff --git a/tests/Doctrine/Tests/Models/Routing/RoutingLocation.php b/tests/Doctrine/Tests/Models/Routing/RoutingLocation.php index ea1ba55f787..32f97bf6db3 100644 --- a/tests/Doctrine/Tests/Models/Routing/RoutingLocation.php +++ b/tests/Doctrine/Tests/Models/Routing/RoutingLocation.php @@ -2,19 +2,21 @@ namespace Doctrine\Tests\Models\Routing; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity + * @ORM\Entity */ class RoutingLocation { /** - * @Id @GeneratedValue - * @Column(type="integer") + * @ORM\Id @ORM\GeneratedValue + * @ORM\Column(type="integer") */ public $id; /** - * @Column(type="string") + * @ORM\Column(type="string") */ public $name; diff --git a/tests/Doctrine/Tests/Models/Routing/RoutingRoute.php b/tests/Doctrine/Tests/Models/Routing/RoutingRoute.php index 7354e56ca25..41ec023d3a8 100644 --- a/tests/Doctrine/Tests/Models/Routing/RoutingRoute.php +++ b/tests/Doctrine/Tests/Models/Routing/RoutingRoute.php @@ -3,32 +3,33 @@ namespace Doctrine\Tests\Models\Routing; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity + * @ORM\Entity */ class RoutingRoute { /** - * @Id - * @GeneratedValue - * @column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ public $id; /** - * @ManyToMany(targetEntity="RoutingLeg", cascade={"all"}) - * @JoinTable(name="RoutingRouteLegs", - * joinColumns={@JoinColumn(name="route_id", referencedColumnName="id")}, - * inverseJoinColumns={@JoinColumn(name="leg_id", referencedColumnName="id", unique=true)} + * @ORM\ManyToMany(targetEntity="RoutingLeg", cascade={"all"}) + * @ORM\JoinTable(name="RoutingRouteLegs", + * joinColumns={@ORM\JoinColumn(name="route_id", referencedColumnName="id")}, + * inverseJoinColumns={@ORM\JoinColumn(name="leg_id", referencedColumnName="id", unique=true)} * ) - * @OrderBy({"departureDate" = "ASC"}) + * @ORM\OrderBy({"departureDate" = "ASC"}) */ public $legs; /** - * @OneToMany(targetEntity="RoutingRouteBooking", mappedBy="route") - * @OrderBy({"passengerName" = "ASC"}) + * @ORM\OneToMany(targetEntity="RoutingRouteBooking", mappedBy="route") + * @ORM\OrderBy({"passengerName" = "ASC"}) */ public $bookings = []; diff --git a/tests/Doctrine/Tests/Models/Routing/RoutingRouteBooking.php b/tests/Doctrine/Tests/Models/Routing/RoutingRouteBooking.php index 9b862fc3915..8d663f2e7a7 100644 --- a/tests/Doctrine/Tests/Models/Routing/RoutingRouteBooking.php +++ b/tests/Doctrine/Tests/Models/Routing/RoutingRouteBooking.php @@ -2,26 +2,28 @@ namespace Doctrine\Tests\Models\Routing; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity + * @ORM\Entity */ class RoutingRouteBooking { /** - * @Id - * @Column(type="integer") - * @GeneratedValue + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue */ public $id; /** - * @ManyToOne(targetEntity="RoutingRoute", inversedBy="bookings") - * @JoinColumn(name="route_id", referencedColumnName="id") + * @ORM\ManyToOne(targetEntity="RoutingRoute", inversedBy="bookings") + * @ORM\JoinColumn(name="route_id", referencedColumnName="id") */ public $route; /** - * @Column(type="string") + * @ORM\Column(type="string") */ public $passengerName = null; diff --git a/tests/Doctrine/Tests/Models/StockExchange/Bond.php b/tests/Doctrine/Tests/Models/StockExchange/Bond.php index a0d37bfe858..8f550496788 100644 --- a/tests/Doctrine/Tests/Models/StockExchange/Bond.php +++ b/tests/Doctrine/Tests/Models/StockExchange/Bond.php @@ -2,30 +2,32 @@ namespace Doctrine\Tests\Models\StockExchange; +use Doctrine\ORM\Annotation as ORM; + /** * Bonds have many stocks. This uses a many to many association and fails to model how many of a * particular stock a bond has. But i Need a many-to-many association, so please bear with my modelling skills ;) * - * @Entity - * @Table(name="exchange_bonds") + * @ORM\Entity + * @ORM\Table(name="exchange_bonds") */ class Bond { /** - * @Id @GeneratedValue @column(type="integer") + * @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") * @var int */ private $id; /** - * @column(type="string") + * @ORM\Column(type="string") * @var string */ private $name; /** - * @ManyToMany(targetEntity="Stock", indexBy="symbol") - * @JoinTable(name="exchange_bonds_stocks") + * @ORM\ManyToMany(targetEntity="Stock", indexBy="symbol") + * @ORM\JoinTable(name="exchange_bonds_stocks") * @var Stock[] */ public $stocks; diff --git a/tests/Doctrine/Tests/Models/StockExchange/Market.php b/tests/Doctrine/Tests/Models/StockExchange/Market.php index 87e12cab654..3b2eaeb5ded 100644 --- a/tests/Doctrine/Tests/Models/StockExchange/Market.php +++ b/tests/Doctrine/Tests/Models/StockExchange/Market.php @@ -3,27 +3,28 @@ namespace Doctrine\Tests\Models\StockExchange; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity - * @Table(name="exchange_markets") + * @ORM\Entity + * @ORM\Table(name="exchange_markets") */ class Market { /** - * @Id @Column(type="integer") @GeneratedValue + * @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue * @var int */ private $id; /** - * @Column(type="string") + * @ORM\Column(type="string") * @var string */ private $name; /** - * @OneToMany(targetEntity="Stock", mappedBy="market", indexBy="symbol") + * @ORM\OneToMany(targetEntity="Stock", mappedBy="market", indexBy="symbol") * @var Stock[] */ public $stocks; diff --git a/tests/Doctrine/Tests/Models/StockExchange/Stock.php b/tests/Doctrine/Tests/Models/StockExchange/Stock.php index 00e14e12ea8..7ce9c291a4f 100644 --- a/tests/Doctrine/Tests/Models/StockExchange/Stock.php +++ b/tests/Doctrine/Tests/Models/StockExchange/Stock.php @@ -2,14 +2,16 @@ namespace Doctrine\Tests\Models\StockExchange; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="exchange_stocks") + * @ORM\Entity + * @ORM\Table(name="exchange_stocks") */ class Stock { /** - * @Id @GeneratedValue @Column(type="integer") + * @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") * @var int */ private $id; @@ -17,17 +19,17 @@ class Stock /** * For real this column would have to be unique=true. But I want to test behavior of non-unique overrides. * - * @Column(type="string") + * @ORM\Column(type="string") */ private $symbol; /** - * @Column(type="decimal") + * @ORM\Column(type="decimal") */ private $price; /** - * @ManyToOne(targetEntity="Market", inversedBy="stocks") + * @ORM\ManyToOne(targetEntity="Market", inversedBy="stocks") * @var Market */ private $market; diff --git a/tests/Doctrine/Tests/Models/Taxi/Car.php b/tests/Doctrine/Tests/Models/Taxi/Car.php index 03cc74c96b8..543cf9273fe 100644 --- a/tests/Doctrine/Tests/Models/Taxi/Car.php +++ b/tests/Doctrine/Tests/Models/Taxi/Car.php @@ -2,31 +2,33 @@ namespace Doctrine\Tests\Models\Taxi; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="taxi_car") + * @ORM\Entity + * @ORM\Table(name="taxi_car") */ class Car { /** - * @Id - * @Column(type="string", length=25) - * @GeneratedValue(strategy="NONE") + * @ORM\Id + * @ORM\Column(type="string", length=25) + * @ORM\GeneratedValue(strategy="NONE") */ private $brand; /** - * @Column(type="string", length=255); + * @ORM\Column(type="string", length=255); */ private $model; /** - * @OneToMany(targetEntity="Ride", mappedBy="car") + * @ORM\OneToMany(targetEntity="Ride", mappedBy="car") */ private $freeCarRides; /** - * @OneToMany(targetEntity="PaidRide", mappedBy="car") + * @ORM\OneToMany(targetEntity="PaidRide", mappedBy="car") */ private $carRides; diff --git a/tests/Doctrine/Tests/Models/Taxi/Driver.php b/tests/Doctrine/Tests/Models/Taxi/Driver.php index ff0cb41a41e..80cc3708a64 100644 --- a/tests/Doctrine/Tests/Models/Taxi/Driver.php +++ b/tests/Doctrine/Tests/Models/Taxi/Driver.php @@ -2,31 +2,33 @@ namespace Doctrine\Tests\Models\Taxi; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="taxi_driver") + * @ORM\Entity + * @ORM\Table(name="taxi_driver") */ class Driver { /** - * @Id - * @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** - * @Column(type="string", length=255); + * @ORM\Column(type="string", length=255); */ private $name; /** - * @OneToMany(targetEntity="Ride", mappedBy="driver") + * @ORM\OneToMany(targetEntity="Ride", mappedBy="driver") */ private $freeDriverRides; /** - * @OneToMany(targetEntity="PaidRide", mappedBy="driver") + * @ORM\OneToMany(targetEntity="PaidRide", mappedBy="driver") */ private $driverRides; diff --git a/tests/Doctrine/Tests/Models/Taxi/PaidRide.php b/tests/Doctrine/Tests/Models/Taxi/PaidRide.php index 040e3917ec6..7f37d8a51ae 100644 --- a/tests/Doctrine/Tests/Models/Taxi/PaidRide.php +++ b/tests/Doctrine/Tests/Models/Taxi/PaidRide.php @@ -2,30 +2,32 @@ namespace Doctrine\Tests\Models\Taxi; +use Doctrine\ORM\Annotation as ORM; + /** * Same as Ride but with an extra column that is not part of the composite primary key * - * @Entity - * @Table(name="taxi_paid_ride") + * @ORM\Entity + * @ORM\Table(name="taxi_paid_ride") */ class PaidRide { /** - * @Id - * @ManyToOne(targetEntity="Driver", inversedBy="driverRides") - * @JoinColumn(name="driver_id", referencedColumnName="id") + * @ORM\Id + * @ORM\ManyToOne(targetEntity="Driver", inversedBy="driverRides") + * @ORM\JoinColumn(name="driver_id", referencedColumnName="id") */ private $driver; /** - * @Id - * @ManyToOne(targetEntity="Car", inversedBy="carRides") - * @JoinColumn(name="car", referencedColumnName="brand") + * @ORM\Id + * @ORM\ManyToOne(targetEntity="Car", inversedBy="carRides") + * @ORM\JoinColumn(name="car", referencedColumnName="brand") */ private $car; /** - * @Column(type="decimal", precision=6, scale=2) + * @ORM\Column(type="decimal", precision=6, scale=2) */ private $fare; diff --git a/tests/Doctrine/Tests/Models/Taxi/Ride.php b/tests/Doctrine/Tests/Models/Taxi/Ride.php index e90a382172a..63fff9ac0f7 100644 --- a/tests/Doctrine/Tests/Models/Taxi/Ride.php +++ b/tests/Doctrine/Tests/Models/Taxi/Ride.php @@ -2,25 +2,27 @@ namespace Doctrine\Tests\Models\Taxi; +use Doctrine\ORM\Annotation as ORM; + /** * Test model that contains only Id-columns * - * @Entity - * @Table(name="taxi_ride") + * @ORM\Entity + * @ORM\Table(name="taxi_ride") */ class Ride { /** - * @Id - * @ManyToOne(targetEntity="Driver", inversedBy="freeDriverRides") - * @JoinColumn(name="driver_id", referencedColumnName="id") + * @ORM\Id + * @ORM\ManyToOne(targetEntity="Driver", inversedBy="freeDriverRides") + * @ORM\JoinColumn(name="driver_id", referencedColumnName="id") */ private $driver; /** - * @Id - * @ManyToOne(targetEntity="Car", inversedBy="freeCarRides") - * @JoinColumn(name="car", referencedColumnName="brand") + * @ORM\Id + * @ORM\ManyToOne(targetEntity="Car", inversedBy="freeCarRides") + * @ORM\JoinColumn(name="car", referencedColumnName="brand") */ private $car; diff --git a/tests/Doctrine/Tests/Models/Tweet/Tweet.php b/tests/Doctrine/Tests/Models/Tweet/Tweet.php index 5455452c2b6..26ff998dca4 100644 --- a/tests/Doctrine/Tests/Models/Tweet/Tweet.php +++ b/tests/Doctrine/Tests/Models/Tweet/Tweet.php @@ -2,26 +2,28 @@ namespace Doctrine\Tests\Models\Tweet; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="tweet_tweet") + * @ORM\Entity + * @ORM\Table(name="tweet_tweet") */ class Tweet { /** - * @Id - * @GeneratedValue - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ public $id; /** - * @Column(type="string") + * @ORM\Column(type="string") */ public $content; /** - * @ManyToOne(targetEntity="User", inversedBy="tweets") + * @ORM\ManyToOne(targetEntity="User", inversedBy="tweets") */ public $author; diff --git a/tests/Doctrine/Tests/Models/Tweet/User.php b/tests/Doctrine/Tests/Models/Tweet/User.php index 4efd6193e4f..858ce9d756e 100644 --- a/tests/Doctrine/Tests/Models/Tweet/User.php +++ b/tests/Doctrine/Tests/Models/Tweet/User.php @@ -3,32 +3,33 @@ namespace Doctrine\Tests\Models\Tweet; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity - * @Table(name="tweet_user") + * @ORM\Entity + * @ORM\Table(name="tweet_user") */ class User { /** - * @Id - * @GeneratedValue - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ public $id; /** - * @Column(type="string") + * @ORM\Column(type="string") */ public $name; /** - * @OneToMany(targetEntity="Tweet", mappedBy="author", cascade={"persist"}, fetch="EXTRA_LAZY") + * @ORM\OneToMany(targetEntity="Tweet", mappedBy="author", cascade={"persist"}, fetch="EXTRA_LAZY") */ public $tweets; /** - * @OneToMany(targetEntity="UserList", mappedBy="owner", fetch="EXTRA_LAZY", orphanRemoval=true) + * @ORM\OneToMany(targetEntity="UserList", mappedBy="owner", fetch="EXTRA_LAZY", orphanRemoval=true) */ public $userLists; diff --git a/tests/Doctrine/Tests/Models/Tweet/UserList.php b/tests/Doctrine/Tests/Models/Tweet/UserList.php index 0f20f94b938..bfec399a896 100644 --- a/tests/Doctrine/Tests/Models/Tweet/UserList.php +++ b/tests/Doctrine/Tests/Models/Tweet/UserList.php @@ -2,26 +2,28 @@ namespace Doctrine\Tests\Models\Tweet; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="tweet_user_list") + * @ORM\Entity + * @ORM\Table(name="tweet_user_list") */ class UserList { /** - * @Id - * @GeneratedValue - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ public $id; /** - * @Column(type="string") + * @ORM\Column(type="string") */ public $listName; /** - * @ManyToOne(targetEntity="User", inversedBy="userLists") + * @ORM\ManyToOne(targetEntity="User", inversedBy="userLists") */ public $owner; } diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/AuxiliaryEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/AuxiliaryEntity.php index 89025605b5e..2f4596f9606 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/AuxiliaryEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/AuxiliaryEntity.php @@ -2,15 +2,17 @@ namespace Doctrine\Tests\Models\ValueConversionType; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="vct_auxiliary") + * @ORM\Entity + * @ORM\Table(name="vct_auxiliary") */ class AuxiliaryEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id4; } diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/InversedManyToManyCompositeIdEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/InversedManyToManyCompositeIdEntity.php index 8d0a56d01ce..8c537735d38 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/InversedManyToManyCompositeIdEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/InversedManyToManyCompositeIdEntity.php @@ -3,27 +3,28 @@ namespace Doctrine\Tests\Models\ValueConversionType; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity - * @Table(name="vct_inversed_manytomany_compositeid") + * @ORM\Entity + * @ORM\Table(name="vct_inversed_manytomany_compositeid") */ class InversedManyToManyCompositeIdEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id1; /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id2; /** - * @ManyToMany(targetEntity="OwningManyToManyCompositeIdEntity", mappedBy="associatedEntities") + * @ORM\ManyToMany(targetEntity="OwningManyToManyCompositeIdEntity", mappedBy="associatedEntities") */ public $associatedEntities; diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/InversedManyToManyCompositeIdForeignKeyEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/InversedManyToManyCompositeIdForeignKeyEntity.php index 9cc1a12070e..7f2804ccff1 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/InversedManyToManyCompositeIdForeignKeyEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/InversedManyToManyCompositeIdForeignKeyEntity.php @@ -3,28 +3,29 @@ namespace Doctrine\Tests\Models\ValueConversionType; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity - * @Table(name="vct_inversed_manytomany_compositeid_foreignkey") + * @ORM\Entity + * @ORM\Table(name="vct_inversed_manytomany_compositeid_foreignkey") */ class InversedManyToManyCompositeIdForeignKeyEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id1; /** - * @ManyToOne(targetEntity="AuxiliaryEntity") - * @JoinColumn(name="foreign_id", referencedColumnName="id4") - * @Id + * @ORM\ManyToOne(targetEntity="AuxiliaryEntity") + * @ORM\JoinColumn(name="foreign_id", referencedColumnName="id4") + * @ORM\Id */ public $foreignEntity; /** - * @ManyToMany(targetEntity="OwningManyToManyCompositeIdForeignKeyEntity", mappedBy="associatedEntities") + * @ORM\ManyToMany(targetEntity="OwningManyToManyCompositeIdForeignKeyEntity", mappedBy="associatedEntities") */ public $associatedEntities; diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/InversedManyToManyEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/InversedManyToManyEntity.php index 3b015765529..22b55fc9022 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/InversedManyToManyEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/InversedManyToManyEntity.php @@ -3,21 +3,22 @@ namespace Doctrine\Tests\Models\ValueConversionType; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity - * @Table(name="vct_inversed_manytomany") + * @ORM\Entity + * @ORM\Table(name="vct_inversed_manytomany") */ class InversedManyToManyEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id1; /** - * @ManyToMany(targetEntity="OwningManyToManyEntity", mappedBy="associatedEntities") + * @ORM\ManyToMany(targetEntity="OwningManyToManyEntity", mappedBy="associatedEntities") */ public $associatedEntities; diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/InversedManyToManyExtraLazyEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/InversedManyToManyExtraLazyEntity.php index b139fa407a8..d3966a30fc9 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/InversedManyToManyExtraLazyEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/InversedManyToManyExtraLazyEntity.php @@ -3,21 +3,22 @@ namespace Doctrine\Tests\Models\ValueConversionType; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity - * @Table(name="vct_inversed_manytomany_extralazy") + * @ORM\Entity + * @ORM\Table(name="vct_inversed_manytomany_extralazy") */ class InversedManyToManyExtraLazyEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id1; /** - * @ManyToMany( + * @ORM\ManyToMany( * targetEntity="OwningManyToManyExtraLazyEntity", * mappedBy="associatedEntities", * fetch="EXTRA_LAZY", diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToManyCompositeIdEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToManyCompositeIdEntity.php index 01892c1aa12..ef5b2dc5177 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToManyCompositeIdEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToManyCompositeIdEntity.php @@ -3,32 +3,33 @@ namespace Doctrine\Tests\Models\ValueConversionType; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity - * @Table(name="vct_inversed_onetomany_compositeid") + * @ORM\Entity + * @ORM\Table(name="vct_inversed_onetomany_compositeid") */ class InversedOneToManyCompositeIdEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id1; /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id2; /** - * @Column(type="string", name="some_property") + * @ORM\Column(type="string", name="some_property") */ public $someProperty; /** - * @OneToMany(targetEntity="OwningManyToOneCompositeIdEntity", mappedBy="associatedEntity") + * @ORM\OneToMany(targetEntity="OwningManyToOneCompositeIdEntity", mappedBy="associatedEntity") */ public $associatedEntities; diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToManyCompositeIdForeignKeyEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToManyCompositeIdForeignKeyEntity.php index e2212812e84..a3fb1eeb054 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToManyCompositeIdForeignKeyEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToManyCompositeIdForeignKeyEntity.php @@ -3,33 +3,34 @@ namespace Doctrine\Tests\Models\ValueConversionType; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity - * @Table(name="vct_inversed_onetomany_compositeid_foreignkey") + * @ORM\Entity + * @ORM\Table(name="vct_inversed_onetomany_compositeid_foreignkey") */ class InversedOneToManyCompositeIdForeignKeyEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id1; /** - * @ManyToOne(targetEntity="AuxiliaryEntity") - * @JoinColumn(name="foreign_id", referencedColumnName="id4") - * @Id + * @ORM\ManyToOne(targetEntity="AuxiliaryEntity") + * @ORM\JoinColumn(name="foreign_id", referencedColumnName="id4") + * @ORM\Id */ public $foreignEntity; /** - * @Column(type="string", name="some_property") + * @ORM\Column(type="string", name="some_property") */ public $someProperty; /** - * @OneToMany(targetEntity="OwningManyToOneCompositeIdForeignKeyEntity", mappedBy="associatedEntity") + * @ORM\OneToMany(targetEntity="OwningManyToOneCompositeIdForeignKeyEntity", mappedBy="associatedEntity") */ public $associatedEntities; diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToManyEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToManyEntity.php index ff8ec73a067..48695007771 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToManyEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToManyEntity.php @@ -3,26 +3,27 @@ namespace Doctrine\Tests\Models\ValueConversionType; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity - * @Table(name="vct_inversed_onetomany") + * @ORM\Entity + * @ORM\Table(name="vct_inversed_onetomany") */ class InversedOneToManyEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id1; /** - * @OneToMany(targetEntity="OwningManyToOneEntity", mappedBy="associatedEntity") + * @ORM\OneToMany(targetEntity="OwningManyToOneEntity", mappedBy="associatedEntity") */ public $associatedEntities; /** - * @Column(type="string", name="some_property") + * @ORM\Column(type="string", name="some_property") */ public $someProperty; diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToManyExtraLazyEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToManyExtraLazyEntity.php index 26d0a58d0cf..c1926b133e8 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToManyExtraLazyEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToManyExtraLazyEntity.php @@ -3,21 +3,22 @@ namespace Doctrine\Tests\Models\ValueConversionType; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity - * @Table(name="vct_inversed_onetomany_extralazy") + * @ORM\Entity + * @ORM\Table(name="vct_inversed_onetomany_extralazy") */ class InversedOneToManyExtraLazyEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id1; /** - * @OneToMany( + * @ORM\OneToMany( * targetEntity="OwningManyToOneExtraLazyEntity", * mappedBy="associatedEntity", * fetch="EXTRA_LAZY", diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToOneCompositeIdEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToOneCompositeIdEntity.php index 631b22b8b7e..210698dce04 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToOneCompositeIdEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToOneCompositeIdEntity.php @@ -2,31 +2,33 @@ namespace Doctrine\Tests\Models\ValueConversionType; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="vct_inversed_onetoone_compositeid") + * @ORM\Entity + * @ORM\Table(name="vct_inversed_onetoone_compositeid") */ class InversedOneToOneCompositeIdEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id1; /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id2; /** - * @Column(type="string", name="some_property") + * @ORM\Column(type="string", name="some_property") */ public $someProperty; /** - * @OneToOne(targetEntity="OwningOneToOneCompositeIdEntity", mappedBy="associatedEntity") + * @ORM\OneToOne(targetEntity="OwningOneToOneCompositeIdEntity", mappedBy="associatedEntity") */ public $associatedEntity; } diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToOneCompositeIdForeignKeyEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToOneCompositeIdForeignKeyEntity.php index fb6d4302638..8ccd2f19854 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToOneCompositeIdForeignKeyEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToOneCompositeIdForeignKeyEntity.php @@ -2,32 +2,34 @@ namespace Doctrine\Tests\Models\ValueConversionType; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="vct_inversed_onetoone_compositeid_foreignkey") + * @ORM\Entity + * @ORM\Table(name="vct_inversed_onetoone_compositeid_foreignkey") */ class InversedOneToOneCompositeIdForeignKeyEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id1; /** - * @ManyToOne(targetEntity="AuxiliaryEntity") - * @JoinColumn(name="foreign_id", referencedColumnName="id4") - * @Id + * @ORM\ManyToOne(targetEntity="AuxiliaryEntity") + * @ORM\JoinColumn(name="foreign_id", referencedColumnName="id4") + * @ORM\Id */ public $foreignEntity; /** - * @Column(type="string", name="some_property") + * @ORM\Column(type="string", name="some_property") */ public $someProperty; /** - * @OneToOne(targetEntity="OwningOneToOneCompositeIdForeignKeyEntity", mappedBy="associatedEntity") + * @ORM\OneToOne(targetEntity="OwningOneToOneCompositeIdForeignKeyEntity", mappedBy="associatedEntity") */ public $associatedEntity; } diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToOneEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToOneEntity.php index d652908e210..9bec781f72a 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToOneEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/InversedOneToOneEntity.php @@ -2,25 +2,27 @@ namespace Doctrine\Tests\Models\ValueConversionType; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="vct_inversed_onetoone") + * @ORM\Entity + * @ORM\Table(name="vct_inversed_onetoone") */ class InversedOneToOneEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id1; /** - * @Column(type="string", name="some_property") + * @ORM\Column(type="string", name="some_property") */ public $someProperty; /** - * @OneToOne(targetEntity="OwningOneToOneEntity", mappedBy="associatedEntity") + * @ORM\OneToOne(targetEntity="OwningOneToOneEntity", mappedBy="associatedEntity") */ public $associatedEntity; } diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToManyCompositeIdEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToManyCompositeIdEntity.php index 01c08776fa5..2c9bd916cb7 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToManyCompositeIdEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToManyCompositeIdEntity.php @@ -3,27 +3,28 @@ namespace Doctrine\Tests\Models\ValueConversionType; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity - * @Table(name="vct_owning_manytomany_compositeid") + * @ORM\Entity + * @ORM\Table(name="vct_owning_manytomany_compositeid") */ class OwningManyToManyCompositeIdEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id3; /** - * @ManyToMany(targetEntity="InversedManyToManyCompositeIdEntity", inversedBy="associatedEntities") - * @JoinTable( + * @ORM\ManyToMany(targetEntity="InversedManyToManyCompositeIdEntity", inversedBy="associatedEntities") + * @ORM\JoinTable( * name="vct_xref_manytomany_compositeid", - * joinColumns={@JoinColumn(name="owning_id", referencedColumnName="id3")}, + * joinColumns={@ORM\JoinColumn(name="owning_id", referencedColumnName="id3")}, * inverseJoinColumns={ - * @JoinColumn(name="inversed_id1", referencedColumnName="id1"), - * @JoinColumn(name="inversed_id2", referencedColumnName="id2") + * @ORM\JoinColumn(name="inversed_id1", referencedColumnName="id1"), + * @ORM\JoinColumn(name="inversed_id2", referencedColumnName="id2") * } * ) */ diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToManyCompositeIdForeignKeyEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToManyCompositeIdForeignKeyEntity.php index abbb32d8a35..bdf7d58c3af 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToManyCompositeIdForeignKeyEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToManyCompositeIdForeignKeyEntity.php @@ -3,27 +3,28 @@ namespace Doctrine\Tests\Models\ValueConversionType; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity - * @Table(name="vct_owning_manytomany_compositeid_foreignkey") + * @ORM\Entity + * @ORM\Table(name="vct_owning_manytomany_compositeid_foreignkey") */ class OwningManyToManyCompositeIdForeignKeyEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id2; /** - * @ManyToMany(targetEntity="InversedManyToManyCompositeIdForeignKeyEntity", inversedBy="associatedEntities") - * @JoinTable( + * @ORM\ManyToMany(targetEntity="InversedManyToManyCompositeIdForeignKeyEntity", inversedBy="associatedEntities") + * @ORM\JoinTable( * name="vct_xref_manytomany_compositeid_foreignkey", - * joinColumns={@JoinColumn(name="owning_id", referencedColumnName="id2")}, + * joinColumns={@ORM\JoinColumn(name="owning_id", referencedColumnName="id2")}, * inverseJoinColumns={ - * @JoinColumn(name="associated_id", referencedColumnName="id1"), - * @JoinColumn(name="associated_foreign_id", referencedColumnName="foreign_id") + * @ORM\JoinColumn(name="associated_id", referencedColumnName="id1"), + * @ORM\JoinColumn(name="associated_foreign_id", referencedColumnName="foreign_id") * } * ) */ diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToManyEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToManyEntity.php index 292ff7835ef..3f3e8130817 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToManyEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToManyEntity.php @@ -3,25 +3,26 @@ namespace Doctrine\Tests\Models\ValueConversionType; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity - * @Table(name="vct_owning_manytomany") + * @ORM\Entity + * @ORM\Table(name="vct_owning_manytomany") */ class OwningManyToManyEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id2; /** - * @ManyToMany(targetEntity="InversedManyToManyEntity", inversedBy="associatedEntities") - * @JoinTable( + * @ORM\ManyToMany(targetEntity="InversedManyToManyEntity", inversedBy="associatedEntities") + * @ORM\JoinTable( * name="vct_xref_manytomany", - * joinColumns={@JoinColumn(name="owning_id", referencedColumnName="id2")}, - * inverseJoinColumns={@JoinColumn(name="inversed_id", referencedColumnName="id1")} + * joinColumns={@ORM\JoinColumn(name="owning_id", referencedColumnName="id2")}, + * inverseJoinColumns={@ORM\JoinColumn(name="inversed_id", referencedColumnName="id1")} * ) */ public $associatedEntities; diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToManyExtraLazyEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToManyExtraLazyEntity.php index dda25b27d1d..865dc89734e 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToManyExtraLazyEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToManyExtraLazyEntity.php @@ -3,30 +3,31 @@ namespace Doctrine\Tests\Models\ValueConversionType; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** - * @Entity - * @Table(name="vct_owning_manytomany_extralazy") + * @ORM\Entity + * @ORM\Table(name="vct_owning_manytomany_extralazy") */ class OwningManyToManyExtraLazyEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id2; /** - * @ManyToMany( + * @ORM\ManyToMany( * targetEntity="InversedManyToManyExtraLazyEntity", * inversedBy="associatedEntities", * fetch="EXTRA_LAZY", * indexBy="id1" * ) - * @JoinTable( + * @ORM\JoinTable( * name="vct_xref_manytomany_extralazy", - * joinColumns={@JoinColumn(name="owning_id", referencedColumnName="id2")}, - * inverseJoinColumns={@JoinColumn(name="inversed_id", referencedColumnName="id1")} + * joinColumns={@ORM\JoinColumn(name="owning_id", referencedColumnName="id2")}, + * inverseJoinColumns={@ORM\JoinColumn(name="inversed_id", referencedColumnName="id1")} * ) */ public $associatedEntities; diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToOneCompositeIdEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToOneCompositeIdEntity.php index b06b2188ba8..05a3541309f 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToOneCompositeIdEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToOneCompositeIdEntity.php @@ -2,23 +2,25 @@ namespace Doctrine\Tests\Models\ValueConversionType; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="vct_owning_manytoone_compositeid") + * @ORM\Entity + * @ORM\Table(name="vct_owning_manytoone_compositeid") */ class OwningManyToOneCompositeIdEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id3; /** - * @ManyToOne(targetEntity="InversedOneToManyCompositeIdEntity", inversedBy="associatedEntities") - * @JoinColumns({ - * @JoinColumn(name="associated_id1", referencedColumnName="id1"), - * @JoinColumn(name="associated_id2", referencedColumnName="id2") + * @ORM\ManyToOne(targetEntity="InversedOneToManyCompositeIdEntity", inversedBy="associatedEntities") + * @ORM\JoinColumns({ + * @ORM\JoinColumn(name="associated_id1", referencedColumnName="id1"), + * @ORM\JoinColumn(name="associated_id2", referencedColumnName="id2") * }) */ public $associatedEntity; diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToOneCompositeIdForeignKeyEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToOneCompositeIdForeignKeyEntity.php index b6787a41854..f75a4f28cb8 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToOneCompositeIdForeignKeyEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToOneCompositeIdForeignKeyEntity.php @@ -2,23 +2,25 @@ namespace Doctrine\Tests\Models\ValueConversionType; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="vct_owning_manytoone_compositeid_foreignkey") + * @ORM\Entity + * @ORM\Table(name="vct_owning_manytoone_compositeid_foreignkey") */ class OwningManyToOneCompositeIdForeignKeyEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id2; /** - * @ManyToOne(targetEntity="InversedOneToManyCompositeIdForeignKeyEntity", inversedBy="associatedEntities") - * @JoinColumns({ - * @JoinColumn(name="associated_id", referencedColumnName="id1"), - * @JoinColumn(name="associated_foreign_id", referencedColumnName="foreign_id") + * @ORM\ManyToOne(targetEntity="InversedOneToManyCompositeIdForeignKeyEntity", inversedBy="associatedEntities") + * @ORM\JoinColumns({ + * @ORM\JoinColumn(name="associated_id", referencedColumnName="id1"), + * @ORM\JoinColumn(name="associated_foreign_id", referencedColumnName="foreign_id") * }) */ public $associatedEntity; diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToOneEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToOneEntity.php index b05a86b135e..4e6602a8d9d 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToOneEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToOneEntity.php @@ -2,21 +2,23 @@ namespace Doctrine\Tests\Models\ValueConversionType; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="vct_owning_manytoone") + * @ORM\Entity + * @ORM\Table(name="vct_owning_manytoone") */ class OwningManyToOneEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id2; /** - * @ManyToOne(targetEntity="InversedOneToManyEntity", inversedBy="associatedEntities") - * @JoinColumn(name="associated_id", referencedColumnName="id1") + * @ORM\ManyToOne(targetEntity="InversedOneToManyEntity", inversedBy="associatedEntities") + * @ORM\JoinColumn(name="associated_id", referencedColumnName="id1") */ public $associatedEntity; } diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToOneExtraLazyEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToOneExtraLazyEntity.php index aa4df0545ce..00b85d1f6ae 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToOneExtraLazyEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/OwningManyToOneExtraLazyEntity.php @@ -2,21 +2,23 @@ namespace Doctrine\Tests\Models\ValueConversionType; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="vct_owning_manytoone_extralazy") + * @ORM\Entity + * @ORM\Table(name="vct_owning_manytoone_extralazy") */ class OwningManyToOneExtraLazyEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id2; /** - * @ManyToOne(targetEntity="InversedOneToManyExtraLazyEntity", inversedBy="associatedEntities") - * @JoinColumn(name="associated_id", referencedColumnName="id1") + * @ORM\ManyToOne(targetEntity="InversedOneToManyExtraLazyEntity", inversedBy="associatedEntities") + * @ORM\JoinColumn(name="associated_id", referencedColumnName="id1") */ public $associatedEntity; } diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/OwningOneToOneCompositeIdEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/OwningOneToOneCompositeIdEntity.php index bf4282cc12d..bd04ba538ba 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/OwningOneToOneCompositeIdEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/OwningOneToOneCompositeIdEntity.php @@ -2,23 +2,25 @@ namespace Doctrine\Tests\Models\ValueConversionType; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="vct_owning_onetoone_compositeid") + * @ORM\Entity + * @ORM\Table(name="vct_owning_onetoone_compositeid") */ class OwningOneToOneCompositeIdEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id3; /** - * @OneToOne(targetEntity="InversedOneToOneCompositeIdEntity", inversedBy="associatedEntity") - * @JoinColumns({ - * @JoinColumn(name="associated_id1", referencedColumnName="id1"), - * @JoinColumn(name="associated_id2", referencedColumnName="id2") + * @ORM\OneToOne(targetEntity="InversedOneToOneCompositeIdEntity", inversedBy="associatedEntity") + * @ORM\JoinColumns({ + * @ORM\JoinColumn(name="associated_id1", referencedColumnName="id1"), + * @ORM\JoinColumn(name="associated_id2", referencedColumnName="id2") * }) */ public $associatedEntity; diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/OwningOneToOneCompositeIdForeignKeyEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/OwningOneToOneCompositeIdForeignKeyEntity.php index 708905b1af0..9f288d28137 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/OwningOneToOneCompositeIdForeignKeyEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/OwningOneToOneCompositeIdForeignKeyEntity.php @@ -2,28 +2,30 @@ namespace Doctrine\Tests\Models\ValueConversionType; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table( + * @ORM\Entity + * @ORM\Table( * name="vct_owning_onetoone_compositeid_foreignkey", * uniqueConstraints={ - * @UniqueConstraint(name="associated_entity_uniq", columns={"associated_id", "associated_foreign_id"}) + * @ORM\UniqueConstraint(name="associated_entity_uniq", columns={"associated_id", "associated_foreign_id"}) * } * ) */ class OwningOneToOneCompositeIdForeignKeyEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id2; /** - * @OneToOne(targetEntity="InversedOneToOneCompositeIdForeignKeyEntity", inversedBy="associatedEntity") - * @JoinColumns({ - * @JoinColumn(name="associated_id", referencedColumnName="id1"), - * @JoinColumn(name="associated_foreign_id", referencedColumnName="foreign_id") + * @ORM\OneToOne(targetEntity="InversedOneToOneCompositeIdForeignKeyEntity", inversedBy="associatedEntity") + * @ORM\JoinColumns({ + * @ORM\JoinColumn(name="associated_id", referencedColumnName="id1"), + * @ORM\JoinColumn(name="associated_foreign_id", referencedColumnName="foreign_id") * }) */ public $associatedEntity; diff --git a/tests/Doctrine/Tests/Models/ValueConversionType/OwningOneToOneEntity.php b/tests/Doctrine/Tests/Models/ValueConversionType/OwningOneToOneEntity.php index 338cd5ba7ea..a52e16424b2 100644 --- a/tests/Doctrine/Tests/Models/ValueConversionType/OwningOneToOneEntity.php +++ b/tests/Doctrine/Tests/Models/ValueConversionType/OwningOneToOneEntity.php @@ -2,21 +2,23 @@ namespace Doctrine\Tests\Models\ValueConversionType; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="vct_owning_onetoone") + * @ORM\Entity + * @ORM\Table(name="vct_owning_onetoone") */ class OwningOneToOneEntity { /** - * @Column(type="rot13") - * @Id + * @ORM\Column(type="rot13") + * @ORM\Id */ public $id2; /** - * @OneToOne(targetEntity="InversedOneToOneEntity", inversedBy="associatedEntity") - * @JoinColumn(name="associated_id", referencedColumnName="id1") + * @ORM\OneToOne(targetEntity="InversedOneToOneEntity", inversedBy="associatedEntity") + * @ORM\JoinColumn(name="associated_id", referencedColumnName="id1") */ public $associatedEntity; } diff --git a/tests/Doctrine/Tests/Models/VersionedManyToOne/Article.php b/tests/Doctrine/Tests/Models/VersionedManyToOne/Article.php index 16a5d743aab..16f65d34802 100644 --- a/tests/Doctrine/Tests/Models/VersionedManyToOne/Article.php +++ b/tests/Doctrine/Tests/Models/VersionedManyToOne/Article.php @@ -2,34 +2,36 @@ namespace Doctrine\Tests\Models\VersionedManyToOne; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="versioned_many_to_one_article") + * @ORM\Entity + * @ORM\Table(name="versioned_many_to_one_article") */ class Article { /** - * @Id - * @Column(name="id", type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(name="id", type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(name="name") + * @ORM\Column(name="name") */ public $name; /** - * @ManyToOne(targetEntity="Category", cascade={"merge", "persist"}) + * @ORM\ManyToOne(targetEntity="Category", cascade={"merge", "persist"}) */ public $category; /** * Version column * - * @Column(type="integer", name="version") - * @Version + * @ORM\Column(type="integer", name="version") + * @ORM\Version */ public $version; } diff --git a/tests/Doctrine/Tests/Models/VersionedManyToOne/Category.php b/tests/Doctrine/Tests/Models/VersionedManyToOne/Category.php index e29593a812d..7a18c154129 100644 --- a/tests/Doctrine/Tests/Models/VersionedManyToOne/Category.php +++ b/tests/Doctrine/Tests/Models/VersionedManyToOne/Category.php @@ -2,24 +2,26 @@ namespace Doctrine\Tests\Models\VersionedManyToOne; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="versioned_many_to_one_category") + * @ORM\Entity + * @ORM\Table(name="versioned_many_to_one_category") */ class Category { /** - * @Id - * @Column(name="id", type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(name="id", type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** * Version column * - * @Column(type="integer", name="version") - * @Version + * @ORM\Column(type="integer", name="version") + * @ORM\Version */ public $version; } diff --git a/tests/Doctrine/Tests/Models/VersionedOneToOne/FirstRelatedEntity.php b/tests/Doctrine/Tests/Models/VersionedOneToOne/FirstRelatedEntity.php index 19b0d2f886a..320193aaab5 100644 --- a/tests/Doctrine/Tests/Models/VersionedOneToOne/FirstRelatedEntity.php +++ b/tests/Doctrine/Tests/Models/VersionedOneToOne/FirstRelatedEntity.php @@ -2,31 +2,33 @@ namespace Doctrine\Tests\Models\VersionedOneToOne; +use Doctrine\ORM\Annotation as ORM; + /** * @author Rob Caiger * - * @Entity - * @Table(name="first_entity") + * @ORM\Entity + * @ORM\Table(name="first_entity") */ class FirstRelatedEntity { /** - * @Id - * @OneToOne(targetEntity="SecondRelatedEntity", fetch="EAGER") - * @JoinColumn(name="second_entity_id", referencedColumnName="id") + * @ORM\Id + * @ORM\OneToOne(targetEntity="SecondRelatedEntity", fetch="EAGER") + * @ORM\JoinColumn(name="second_entity_id", referencedColumnName="id") */ public $secondEntity; /** - * @Column(name="name") + * @ORM\Column(name="name") */ public $name; /** * Version column * - * @Column(type="integer", name="version") - * @Version + * @ORM\Column(type="integer", name="version") + * @ORM\Version */ public $version; } diff --git a/tests/Doctrine/Tests/Models/VersionedOneToOne/SecondRelatedEntity.php b/tests/Doctrine/Tests/Models/VersionedOneToOne/SecondRelatedEntity.php index cb5dcf66c67..22d95822d4e 100644 --- a/tests/Doctrine/Tests/Models/VersionedOneToOne/SecondRelatedEntity.php +++ b/tests/Doctrine/Tests/Models/VersionedOneToOne/SecondRelatedEntity.php @@ -2,31 +2,33 @@ namespace Doctrine\Tests\Models\VersionedOneToOne; +use Doctrine\ORM\Annotation as ORM; + /** * @author Rob Caiger * - * @Entity - * @Table(name="second_entity") + * @ORM\Entity + * @ORM\Table(name="second_entity") */ class SecondRelatedEntity { /** - * @Id - * @Column(name="id", type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(name="id", type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(name="name") + * @ORM\Column(name="name") */ public $name; /** * Version column * - * @Column(type="integer", name="version") - * @Version + * @ORM\Column(type="integer", name="version") + * @ORM\Version */ public $version; } diff --git a/tests/Doctrine/Tests/ORM/ConfigurationTest.php b/tests/Doctrine/Tests/ORM/ConfigurationTest.php index 82f858606fd..d53f34d2476 100644 --- a/tests/Doctrine/Tests/ORM/ConfigurationTest.php +++ b/tests/Doctrine/Tests/ORM/ConfigurationTest.php @@ -82,20 +82,13 @@ public function testNewDefaultAnnotationDriver() $paths = [__DIR__]; $reflectionClass = new ReflectionClass(ConfigurationTestAnnotationReaderChecker::class); - $annotationDriver = $this->configuration->newDefaultAnnotationDriver($paths, false); - $reader = $annotationDriver->getReader(); - $annotation = $reader->getMethodAnnotation( - $reflectionClass->getMethod('namespacedAnnotationMethod'), - AnnotationNamespace\PrePersist::class - ); - self::assertInstanceOf(AnnotationNamespace\PrePersist::class, $annotation); - $annotationDriver = $this->configuration->newDefaultAnnotationDriver($paths); $reader = $annotationDriver->getReader(); $annotation = $reader->getMethodAnnotation( - $reflectionClass->getMethod('simpleAnnotationMethod'), + $reflectionClass->getMethod('annotatedMethod'), AnnotationNamespace\PrePersist::class ); + self::assertInstanceOf(AnnotationNamespace\PrePersist::class, $annotation); } @@ -393,13 +386,8 @@ public function testSetGetSecondLevelCacheConfig() class ConfigurationTestAnnotationReaderChecker { - /** @PrePersist */ - public function simpleAnnotationMethod() - { - } - /** @AnnotationNamespace\PrePersist */ - public function namespacedAnnotationMethod() + public function annotatedMethod() { } } diff --git a/tests/Doctrine/Tests/ORM/Functional/AdvancedAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/AdvancedAssociationTest.php index dd2ecca784e..26e02aa502a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/AdvancedAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/AdvancedAssociationTest.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Functional; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\PersistentCollection; use Doctrine\Tests\OrmFunctionalTestCase; @@ -148,8 +149,8 @@ public function testManyToMany() } /** - * @Entity - * @Table(name="lemma") + * @ORM\Entity + * @ORM\Table(name="lemma") */ class Lemma { @@ -157,21 +158,21 @@ class Lemma /** * @var int - * @Id - * @Column(type="integer", name="lemma_id") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer", name="lemma_id") + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * * @var string - * @Column(type="string", name="lemma_name", unique=true, length=255) + * @ORM\Column(type="string", name="lemma_name", unique=true, length=255) */ private $lemma; /** - * @ManyToMany(targetEntity="Type", mappedBy="lemmas", cascade={"persist"}) + * @ORM\ManyToMany(targetEntity="Type", mappedBy="lemmas", cascade={"persist"}) */ private $types; @@ -240,8 +241,8 @@ public function getTypes() } /** - * @Entity - * @Table(name="type") + * @ORM\Entity + * @ORM\Table(name="type") */ class Type { @@ -250,32 +251,32 @@ class Type /** * * @var int - * @Id - * @Column(type="integer", name="type_id") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer", name="type_id") + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * * @var string - * @Column(type="string", name="type_name", unique=true) + * @ORM\Column(type="string", name="type_name", unique=true) */ private $type; /** * * @var string - * @Column(type="string", name="type_abbreviation", unique=true) + * @ORM\Column(type="string", name="type_abbreviation", unique=true) */ private $abbreviation; /** * @var kateglo\application\helpers\collections\ArrayCollection - * @ManyToMany(targetEntity="Lemma") - * @JoinTable(name="lemma_type", - * joinColumns={@JoinColumn(name="type_id", referencedColumnName="type_id")}, - * inverseJoinColumns={@JoinColumn(name="lemma_id", referencedColumnName="lemma_id")} + * @ORM\ManyToMany(targetEntity="Lemma") + * @ORM\JoinTable(name="lemma_type", + * joinColumns={@ORM\JoinColumn(name="type_id", referencedColumnName="type_id")}, + * inverseJoinColumns={@ORM\JoinColumn(name="lemma_id", referencedColumnName="lemma_id")} * ) */ private $lemmas; @@ -370,33 +371,33 @@ public function getCategories() } /** - * @Entity - * @Table(name="phrase") + * @ORM\Entity + * @ORM\Table(name="phrase") */ class Phrase { const CLASS_NAME = __CLASS__; /** - * @Id - * @Column(type="integer", name="phrase_id") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer", name="phrase_id") + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** - * @Column(type="string", name="phrase_name", unique=true, length=255) + * @ORM\Column(type="string", name="phrase_name", unique=true, length=255) */ private $phrase; /** - * @ManyToOne(targetEntity="PhraseType") - * @JoinColumn(name="phrase_type_id", referencedColumnName="phrase_type_id") + * @ORM\ManyToOne(targetEntity="PhraseType") + * @ORM\JoinColumn(name="phrase_type_id", referencedColumnName="phrase_type_id") */ private $type; /** - * @OneToMany(targetEntity="Definition", mappedBy="phrase", cascade={"persist"}) + * @ORM\OneToMany(targetEntity="Definition", mappedBy="phrase", cascade={"persist"}) */ private $definitions; @@ -471,32 +472,32 @@ public function getDefinitions() } /** - * @Entity - * @Table(name="phrase_type") + * @ORM\Entity + * @ORM\Table(name="phrase_type") */ class PhraseType { const CLASS_NAME = __CLASS__; /** - * @Id - * @Column(type="integer", name="phrase_type_id") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer", name="phrase_type_id") + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** - * @Column(type="string", name="phrase_type_name", unique=true) + * @ORM\Column(type="string", name="phrase_type_name", unique=true) */ private $type; /** - * @Column(type="string", name="phrase_type_abbreviation", unique=true) + * @ORM\Column(type="string", name="phrase_type_abbreviation", unique=true) */ private $abbreviation; /** - * @OneToMany(targetEntity="Phrase", mappedBy="type") + * @ORM\OneToMany(targetEntity="Phrase", mappedBy="type") */ private $phrases; @@ -568,28 +569,28 @@ public function getPhrases() } /** - * @Entity - * @Table(name="definition") + * @ORM\Entity + * @ORM\Table(name="definition") */ class Definition { const CLASS_NAME = __CLASS__; /** - * @Id - * @Column(type="integer", name="definition_id") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer", name="definition_id") + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** - * @ManyToOne(targetEntity="Phrase") - * @JoinColumn(name="definition_phrase_id", referencedColumnName="phrase_id") + * @ORM\ManyToOne(targetEntity="Phrase") + * @ORM\JoinColumn(name="definition_phrase_id", referencedColumnName="phrase_id") */ private $phrase; /** - * @Column(type="text", name="definition_text") + * @ORM\Column(type="text", name="definition_text") */ private $definition; diff --git a/tests/Doctrine/Tests/ORM/Functional/CascadeRemoveOrderTest.php b/tests/Doctrine/Tests/ORM/Functional/CascadeRemoveOrderTest.php index cf05520e57d..5b659b64838 100644 --- a/tests/Doctrine/Tests/ORM/Functional/CascadeRemoveOrderTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/CascadeRemoveOrderTest.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Functional; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; use Doctrine\Tests\OrmFunctionalTestCase; /** @@ -76,24 +77,24 @@ public function testMany() } /** - * @Entity + * @ORM\Entity */ class CascadeRemoveOrderEntityO { /** - * @Id @Column(type="integer") - * @GeneratedValue + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue */ private $id; /** - * @OneToOne(targetEntity="Doctrine\Tests\ORM\Functional\CascadeRemoveOrderEntityG") - * @JoinColumn(nullable=true, onDelete="SET NULL") + * @ORM\OneToOne(targetEntity="Doctrine\Tests\ORM\Functional\CascadeRemoveOrderEntityG") + * @ORM\JoinColumn(nullable=true, onDelete="SET NULL") */ private $oneToOneG; /** - * @OneToMany( + * @ORM\OneToMany( * targetEntity="Doctrine\Tests\ORM\Functional\CascadeRemoveOrderEntityG", * mappedBy="ownerO", * cascade={"persist", "remove"} @@ -134,18 +135,18 @@ public function getOneToManyGs() } /** - * @Entity + * @ORM\Entity */ class CascadeRemoveOrderEntityG { /** - * @Id @Column(type="integer") - * @GeneratedValue + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue */ private $id; /** - * @ManyToOne( + * @ORM\ManyToOne( * targetEntity="Doctrine\Tests\ORM\Functional\CascadeRemoveOrderEntityO", * inversedBy="oneToMany" * ) diff --git a/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest2.php b/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest2.php index cb23c878f2b..d1ef3579034 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest2.php +++ b/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest2.php @@ -78,19 +78,19 @@ public function testManyToManyToCTIHierarchy() } /** - * @Entity @Table(name="cti_parents") - * @InheritanceType("JOINED") - * @DiscriminatorColumn(name="type", type="string") - * @DiscriminatorMap({"parent" = "CTIParent", "child" = "CTIChild"}) + * @ORM\Entity @ORM\Table(name="cti_parents") + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorColumn(name="type", type="string") + * @ORM\DiscriminatorMap({"parent" = "CTIParent", "child" = "CTIChild"}) */ class CTIParent { /** - * @Id @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; - /** @OneToOne(targetEntity="CTIRelated", mappedBy="ctiParent") */ + /** @ORM\OneToOne(targetEntity="CTIRelated", mappedBy="ctiParent") */ private $related; public function getId() { @@ -108,11 +108,11 @@ public function setRelated($related) { } /** - * @Entity @Table(name="cti_children") + * @ORM\Entity @ORM\Table(name="cti_children") */ class CTIChild extends CTIParent { /** - * @Column(type="string") + * @ORM\Column(type="string") */ private $data; @@ -126,17 +126,17 @@ public function setData($data) { } -/** @Entity */ +/** @ORM\Entity */ class CTIRelated { /** - * @Id @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** - * @OneToOne(targetEntity="CTIParent") - * @JoinColumn(name="ctiparent_id", referencedColumnName="id") + * @ORM\OneToOne(targetEntity="CTIParent") + * @ORM\JoinColumn(name="ctiparent_id", referencedColumnName="id") */ private $ctiParent; @@ -153,12 +153,12 @@ public function setCTIParent($ctiParent) { } } -/** @Entity */ +/** @ORM\Entity */ class CTIRelated2 { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ private $id; - /** @ManyToMany(targetEntity="CTIChild") */ + /** @ORM\ManyToMany(targetEntity="CTIChild") */ private $ctiChildren; diff --git a/tests/Doctrine/Tests/ORM/Functional/DefaultValuesTest.php b/tests/Doctrine/Tests/ORM/Functional/DefaultValuesTest.php index d98bcda6ff4..22bc447e313 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DefaultValuesTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DefaultValuesTest.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional; +use Doctrine\ORM\Annotation as ORM; use Doctrine\Tests\OrmFunctionalTestCase; /** @@ -88,25 +89,25 @@ public function testGetPartialReferenceWithDefaultValueNotEvaluatedInFlush() /** - * @Entity @Table(name="defaultvalueuser") + * @ORM\Entity @ORM\Table(name="defaultvalueuser") */ class DefaultValueUser { /** - * @Id @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(type="string") + * @ORM\Column(type="string") */ public $name = ''; /** - * @Column(type="string") + * @ORM\Column(type="string") */ public $type = 'Poweruser'; /** - * @OneToOne(targetEntity="DefaultValueAddress", mappedBy="user", cascade={"persist"}) + * @ORM\OneToOne(targetEntity="DefaultValueAddress", mappedBy="user", cascade={"persist"}) */ public $address; @@ -116,28 +117,28 @@ public function getId() {return $this->id;} /** * CmsAddress * - * @Entity @Table(name="defaultvalueaddresses") + * @ORM\Entity @ORM\Table(name="defaultvalueaddresses") */ class DefaultValueAddress { /** - * @Column(type="integer") - * @Id @GeneratedValue(strategy="AUTO") + * @ORM\Column(type="integer") + * @ORM\Id @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(type="string", length=50) + * @ORM\Column(type="string", length=50) */ public $country; /** - * @Column(type="string", length=50) + * @ORM\Column(type="string", length=50) */ public $zip; /** - * @Column(type="string", length=50) + * @ORM\Column(type="string", length=50) */ public $city; @@ -147,8 +148,8 @@ class DefaultValueAddress public $street; /** - * @OneToOne(targetEntity="DefaultValueUser") - * @JoinColumn(name="user_id", referencedColumnName="id") + * @ORM\OneToOne(targetEntity="DefaultValueUser") + * @ORM\JoinColumn(name="user_id", referencedColumnName="id") */ public $user; diff --git a/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php b/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php index 0f84c624ee2..efd19ad9614 100644 --- a/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Functional; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Event\LifecycleEventArgs; use Doctrine\ORM\Event\PreFlushEventArgs; use Doctrine\ORM\Event\PreUpdateEventArgs; @@ -383,27 +384,27 @@ public function testLifecycleCallbackEventArgs() } } -/** @Entity @HasLifecycleCallbacks */ +/** @ORM\Entity @ORM\HasLifecycleCallbacks */ class LifecycleCallbackTestUser { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ private $id; - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ private $value; - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ private $name; public function getId() {return $this->id;} public function getValue() {return $this->value;} public function setValue($value) {$this->value = $value;} public function getName() {return $this->name;} public function setName($name) {$this->name = $name;} - /** @PreUpdate */ + /** @ORM\PreUpdate */ public function testCallback() {$this->value = 'Hello World';} } /** - * @Entity - * @HasLifecycleCallbacks - * @Table(name="lc_cb_test_entity") + * @ORM\Entity + * @ORM\HasLifecycleCallbacks + * @ORM\Table(name="lc_cb_test_entity") */ class LifecycleCallbackTestEntity { @@ -415,18 +416,18 @@ class LifecycleCallbackTestEntity public $preFlushCallbackInvoked = false; /** - * @Id @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** - * @Column(type="string", nullable=true) + * @ORM\Column(type="string", nullable=true) */ public $value; /** - * @ManyToOne(targetEntity="LifecycleCallbackCascader") - * @JoinColumn(name="cascader_id", referencedColumnName="id") + * @ORM\ManyToOne(targetEntity="LifecycleCallbackCascader") + * @ORM\JoinColumn(name="cascader_id", referencedColumnName="id") */ public $cascader; @@ -438,36 +439,36 @@ public function getValue() { return $this->value; } - /** @PrePersist */ + /** @ORM\PrePersist */ public function doStuffOnPrePersist() { $this->prePersistCallbackInvoked = true; } - /** @PostPersist */ + /** @ORM\PostPersist */ public function doStuffOnPostPersist() { $this->postPersistCallbackInvoked = true; } - /** @PostLoad */ + /** @ORM\PostLoad */ public function doStuffOnPostLoad() { $this->postLoadCallbackInvoked = true; $this->postLoadCascaderNotNull = isset($this->cascader); } - /** @PreUpdate */ + /** @ORM\PreUpdate */ public function doStuffOnPreUpdate() { $this->value = 'changed from preUpdate callback!'; } - /** @PreFlush */ + /** @ORM\PreFlush */ public function doStuffOnPreFlush() { $this->preFlushCallbackInvoked = true; } } /** - * @Entity @HasLifecycleCallbacks - * @Table(name="lc_cb_test_cascade") + * @ORM\Entity @ORM\HasLifecycleCallbacks + * @ORM\Table(name="lc_cb_test_cascade") */ class LifecycleCallbackCascader { @@ -476,13 +477,13 @@ class LifecycleCallbackCascader public $postLoadEntitiesCount = 0; /** - * @Id @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** - * @OneToMany(targetEntity="LifecycleCallbackTestEntity", mappedBy="cascader", cascade={"persist"}) + * @ORM\OneToMany(targetEntity="LifecycleCallbackTestEntity", mappedBy="cascader", cascade={"persist"}) */ public $entities; @@ -491,7 +492,7 @@ public function __construct() $this->entities = new ArrayCollection(); } - /** @PostLoad */ + /** @ORM\PostLoad */ public function doStuffOnPostLoad() { $this->postLoadCallbackInvoked = true; $this->postLoadEntitiesCount = count($this->entities); @@ -502,17 +503,17 @@ public function getId() { } } -/** @MappedSuperclass @HasLifecycleCallbacks */ +/** @ORM\MappedSuperclass @ORM\HasLifecycleCallbacks */ class LifecycleCallbackParentEntity { - /** @PrePersist */ + /** @ORM\PrePersist */ function doStuff() { } } -/** @Entity @Table(name="lc_cb_childentity") */ +/** @ORM\Entity @ORM\Table(name="lc_cb_childentity") */ class LifecycleCallbackChildEntity extends LifecycleCallbackParentEntity { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ private $id; } @@ -524,19 +525,19 @@ public function preUpdate(PreUpdateEventArgs $eventArgs) } } -/** @Entity @HasLifecycleCallbacks */ +/** @ORM\Entity @ORM\HasLifecycleCallbacks */ class LifecycleCallbackEventArgEntity { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; - /** @Column() */ + /** @ORM\Column() */ public $value; public $calls = []; /** - * @PostPersist + * @ORM\PostPersist */ public function postPersistHandler(LifecycleEventArgs $event) { @@ -544,7 +545,7 @@ public function postPersistHandler(LifecycleEventArgs $event) } /** - * @PrePersist + * @ORM\PrePersist */ public function prePersistHandler(LifecycleEventArgs $event) { @@ -552,7 +553,7 @@ public function prePersistHandler(LifecycleEventArgs $event) } /** - * @PostUpdate + * @ORM\PostUpdate */ public function postUpdateHandler(LifecycleEventArgs $event) { @@ -560,7 +561,7 @@ public function postUpdateHandler(LifecycleEventArgs $event) } /** - * @PreUpdate + * @ORM\PreUpdate */ public function preUpdateHandler(PreUpdateEventArgs $event) { @@ -568,7 +569,7 @@ public function preUpdateHandler(PreUpdateEventArgs $event) } /** - * @PostRemove + * @ORM\PostRemove */ public function postRemoveHandler(LifecycleEventArgs $event) { @@ -576,7 +577,7 @@ public function postRemoveHandler(LifecycleEventArgs $event) } /** - * @PreRemove + * @ORM\PreRemove */ public function preRemoveHandler(LifecycleEventArgs $event) { @@ -584,7 +585,7 @@ public function preRemoveHandler(LifecycleEventArgs $event) } /** - * @PreFlush + * @ORM\PreFlush */ public function preFlushHandler(PreFlushEventArgs $event) { @@ -592,7 +593,7 @@ public function preFlushHandler(PreFlushEventArgs $event) } /** - * @PostLoad + * @ORM\PostLoad */ public function postLoadHandler(LifecycleEventArgs $event) { diff --git a/tests/Doctrine/Tests/ORM/Functional/Locking/LockAgentWorker.php b/tests/Doctrine/Tests/ORM/Functional/Locking/LockAgentWorker.php index c7b82f7a87d..3efa43771d7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Locking/LockAgentWorker.php +++ b/tests/Doctrine/Tests/ORM/Functional/Locking/LockAgentWorker.php @@ -101,7 +101,7 @@ protected function createEntityManager($conn) $config->setProxyNamespace('MyProject\Proxies'); $config->setAutoGenerateProxyClasses(true); - $annotDriver = $config->newDefaultAnnotationDriver([__DIR__ . '/../../../Models/'], true); + $annotDriver = $config->newDefaultAnnotationDriver([__DIR__ . '/../../../Models/']); $config->setMetadataDriverImpl($annotDriver); $cache = new ArrayCache(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Locking/OptimisticTest.php b/tests/Doctrine/Tests/ORM/Functional/Locking/OptimisticTest.php index d1d4dde350e..e708ba6c0de 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Locking/OptimisticTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/Locking/OptimisticTest.php @@ -4,6 +4,7 @@ use DateTime; use Doctrine\DBAL\LockMode; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\OptimisticLockException; use Doctrine\Tests\OrmFunctionalTestCase; @@ -264,62 +265,62 @@ public function testOptimisticTimestampLockFailureThrowsException(OptimisticTime } /** - * @Entity - * @Table(name="optimistic_joined_parent") - * @InheritanceType("JOINED") - * @DiscriminatorColumn(name="discr", type="string") - * @DiscriminatorMap({"parent" = "OptimisticJoinedParent", "child" = "OptimisticJoinedChild"}) + * @ORM\Entity + * @ORM\Table(name="optimistic_joined_parent") + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorColumn(name="discr", type="string") + * @ORM\DiscriminatorMap({"parent" = "OptimisticJoinedParent", "child" = "OptimisticJoinedChild"}) */ class OptimisticJoinedParent { /** - * @Id @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(type="string", length=255) + * @ORM\Column(type="string", length=255) */ public $name; /** - * @Version @Column(type="integer") + * @ORM\Version @ORM\Column(type="integer") */ public $version; } /** - * @Entity - * @Table(name="optimistic_joined_child") + * @ORM\Entity + * @ORM\Table(name="optimistic_joined_child") */ class OptimisticJoinedChild extends OptimisticJoinedParent { /** - * @Column(type="string", length=255) + * @ORM\Column(type="string", length=255) */ public $whatever; } /** - * @Entity - * @Table(name="optimistic_standard") + * @ORM\Entity + * @ORM\Table(name="optimistic_standard") */ class OptimisticStandard { /** - * @Id @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(type="string", length=255) + * @ORM\Column(type="string", length=255) */ public $name; /** - * @Version @Column(type="integer") + * @ORM\Version @ORM\Column(type="integer") */ private $version; @@ -330,24 +331,24 @@ public function getVersion() } /** - * @Entity - * @Table(name="optimistic_timestamp") + * @ORM\Entity + * @ORM\Table(name="optimistic_timestamp") */ class OptimisticTimestamp { /** - * @Id @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(type="string", length=255) + * @ORM\Column(type="string", length=255) */ public $name; /** - * @Version @Column(type="datetime") + * @ORM\Version @ORM\Column(type="datetime") */ public $version; } diff --git a/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php b/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php index fcdb6a7ae64..b7c1757b039 100644 --- a/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php @@ -239,10 +239,11 @@ private function createEntityManager(SQLLogger $logger) $config->setProxyDir(realpath(__DIR__ . '/../../Proxies')); $config->setProxyNamespace('Doctrine\Tests\Proxies'); - $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver( - [realpath(__DIR__ . '/../../Models/Cache')], - true - )); + $config->setMetadataDriverImpl( + $config->newDefaultAnnotationDriver([ + realpath(__DIR__ . '/../../Models/Cache') + ]) + ); $config->setSQLLogger($logger); // always runs on sqlite to prevent multi-connection race-conditions with the test suite diff --git a/tests/Doctrine/Tests/ORM/Functional/MergeSharedEntitiesTest.php b/tests/Doctrine/Tests/ORM/Functional/MergeSharedEntitiesTest.php index 72dc5a1b855..bdf5ce08f2b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/MergeSharedEntitiesTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/MergeSharedEntitiesTest.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Tools\ToolsException; use Doctrine\Tests\OrmFunctionalTestCase; @@ -96,27 +97,27 @@ public function testMergeInheritedTransientPrivateProperties() } } -/** @Entity */ +/** @ORM\Entity */ class MSEPicture { - /** @Column(type="integer") @Id @GeneratedValue */ + /** @ORM\Column(type="integer") @ORM\Id @ORM\GeneratedValue */ public $id; - /** @ManyToOne(targetEntity="MSEFile", cascade={"merge"}) */ + /** @ORM\ManyToOne(targetEntity="MSEFile", cascade={"merge"}) */ public $file; - /** @ManyToOne(targetEntity="MSEFile", cascade={"merge"}) */ + /** @ORM\ManyToOne(targetEntity="MSEFile", cascade={"merge"}) */ public $otherFile; } -/** @Entity */ +/** @ORM\Entity */ class MSEFile { - /** @Column(type="integer") @Id @GeneratedValue(strategy="AUTO") */ + /** @ORM\Column(type="integer") @ORM\Id @ORM\GeneratedValue(strategy="AUTO") */ public $id; } -/** @MappedSuperclass */ +/** @ORM\MappedSuperclass */ abstract class MSEUser { private $session; // intentionally transient property @@ -132,9 +133,9 @@ public function setSession($session) } } -/** @Entity */ +/** @ORM\Entity */ class MSEAdmin extends MSEUser { - /** @Column(type="integer") @Id @GeneratedValue(strategy="NONE") */ + /** @ORM\Column(type="integer") @ORM\Id @ORM\GeneratedValue(strategy="NONE") */ public $id; } diff --git a/tests/Doctrine/Tests/ORM/Functional/NotifyPolicyTest.php b/tests/Doctrine/Tests/ORM/Functional/NotifyPolicyTest.php index 0fd2342c5a6..a409c5efefe 100644 --- a/tests/Doctrine/Tests/ORM/Functional/NotifyPolicyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/NotifyPolicyTest.php @@ -5,6 +5,7 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\NotifyPropertyChanged; use Doctrine\Common\PropertyChangedListener; +use Doctrine\ORM\Annotation as ORM; use Doctrine\Tests\OrmFunctionalTestCase; /** @@ -106,68 +107,68 @@ protected function onPropertyChanged($propName, $oldValue, $newValue) { } } -/** @Entity @ChangeTrackingPolicy("NOTIFY") */ +/** @ORM\Entity @ORM\ChangeTrackingPolicy("NOTIFY") */ class NotifyUser extends NotifyBaseEntity { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ private $id; - /** @Column */ + /** @ORM\Column */ private $name; - /** @ManyToMany(targetEntity="NotifyGroup") */ + /** @ORM\ManyToMany(targetEntity="NotifyGroup") */ private $groups; - function __construct() { + public function __construct() { $this->groups = new ArrayCollection; } - function getId() { + public function getId() { return $this->id; } - function getName() { + public function getName() { return $this->name; } - function setName($name) { + public function setName($name) { $this->onPropertyChanged('name', $this->name, $name); $this->name = $name; } - function getGroups() { + public function getGroups() { return $this->groups; } } -/** @Entity */ +/** @ORM\Entity */ class NotifyGroup extends NotifyBaseEntity { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ private $id; - /** @Column */ + /** @ORM\Column */ private $name; - /** @ManyToMany(targetEntity="NotifyUser", mappedBy="groups") */ + /** @ORM\ManyToMany(targetEntity="NotifyUser", mappedBy="groups") */ private $users; - function __construct() { + public function __construct() { $this->users = new ArrayCollection; } - function getId() { + public function getId() { return $this->id; } - function getName() { + public function getName() { return $this->name; } - function setName($name) { + public function setName($name) { $this->onPropertyChanged('name', $this->name, $name); $this->name = $name; } - function getUsers() { + public function getUsers() { return $this->users; } } diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php index 5a77257b567..dbd4f3a167b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php @@ -1,7 +1,9 @@ phone = $value; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1998Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1998Test.php index 6bae5396aba..dad31457c01 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1998Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1998Test.php @@ -5,6 +5,7 @@ use Doctrine\DBAL\Types\StringType; use Doctrine\DBAL\Types\Type; use Doctrine\DBAL\Platforms\AbstractPlatform; +use Doctrine\ORM\Annotation as ORM; /** * @group DDC-1998 @@ -47,17 +48,17 @@ public function testSqlConversionAsIdentifier() } /** - * @Entity + * @ORM\Entity */ class DDC1998Entity { /** - * @Id @Column(type="ddc1998") + * @ORM\Id @ORM\Column(type="ddc1998") */ public $id; /** - * @Column(type="integer") + * @ORM\Column(type="integer") */ public $num = 0; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC199Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC199Test.php index 10da9d40c8c..829ab467ab3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC199Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC199Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\Tests\OrmFunctionalTestCase; class DDC199Test extends OrmFunctionalTestCase @@ -52,51 +53,51 @@ public function testPolymorphicLoading() /** - * @Entity @Table(name="ddc199_entities") - * @InheritanceType("SINGLE_TABLE") - * @DiscriminatorColumn(name="discr", type="string") - * @DiscriminatorMap({"parent" = "DDC199ParentClass", "child" = "DDC199ChildClass"}) + * @ORM\Entity @ORM\Table(name="ddc199_entities") + * @ORM\InheritanceType("SINGLE_TABLE") + * @ORM\DiscriminatorColumn(name="discr", type="string") + * @ORM\DiscriminatorMap({"parent" = "DDC199ParentClass", "child" = "DDC199ChildClass"}) */ class DDC199ParentClass { /** - * @Id @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(type="string") + * @ORM\Column(type="string") */ public $parentData; /** - * @OneToMany(targetEntity="DDC199RelatedClass", mappedBy="parent") + * @ORM\OneToMany(targetEntity="DDC199RelatedClass", mappedBy="parent") */ public $relatedEntities; } -/** @Entity */ +/** @ORM\Entity */ class DDC199ChildClass extends DDC199ParentClass { /** - * @Column + * @ORM\Column */ public $childData; } -/** @Entity @Table(name="ddc199_relatedclass") */ +/** @ORM\Entity @ORM\Table(name="ddc199_relatedclass") */ class DDC199RelatedClass { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; - /** @Column */ + /** @ORM\Column */ public $relatedData; /** - * @ManyToOne(targetEntity="DDC199ParentClass", inversedBy="relatedEntities") - * @JoinColumn(name="parent_id", referencedColumnName="id") + * @ORM\ManyToOne(targetEntity="DDC199ParentClass", inversedBy="relatedEntities") + * @ORM\JoinColumn(name="parent_id", referencedColumnName="id") */ public $parent; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2012Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2012Test.php index df3ee185ea5..50dfe67a929 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2012Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2012Test.php @@ -4,6 +4,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\DBAL\Platforms\AbstractPlatform; +use Doctrine\ORM\Annotation as ORM; /** * @group DDC-2012 @@ -68,11 +69,11 @@ public function testIssue() } /** - * @Table(name="ddc2010_item") - * @Entity - * @InheritanceType("JOINED") - * @DiscriminatorColumn(name="type_id", type="smallint") - * @DiscriminatorMap({ + * @ORM\Table(name="ddc2010_item") + * @ORM\Entity + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorColumn(name="type_id", type="smallint") + * @ORM\DiscriminatorMap({ * 1 = "DDC2012ItemPerson", * 2 = "DDC2012Item" * }) @@ -80,21 +81,21 @@ public function testIssue() class DDC2012Item { /** - * @Id - * @GeneratedValue - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ public $id; /** - * @Column(name="tsv", type="tsvector", nullable=true) + * @ORM\Column(name="tsv", type="tsvector", nullable=true) */ public $tsv; } /** - * @Table(name="ddc2010_item_person") - * @Entity + * @ORM\Table(name="ddc2010_item_person") + * @ORM\Entity */ class DDC2012ItemPerson extends DDC2012Item { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2084Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2084Test.php index dad013e0faa..04cfc56d863 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2084Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2084Test.php @@ -61,16 +61,18 @@ public function testinvalidIdentifierBindingEntityException() namespace Doctrine\Tests\ORM\Functional\Ticket\DDC2084; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="DDC2084_ENTITY1") + * @ORM\Entity + * @ORM\Table(name="DDC2084_ENTITY1") */ class MyEntity1 { /** - * @Id - * @OneToOne(targetEntity="MyEntity2") - * @JoinColumn(name="entity2_id", referencedColumnName="id", nullable=false) + * @ORM\Id + * @ORM\OneToOne(targetEntity="MyEntity2") + * @ORM\JoinColumn(name="entity2_id", referencedColumnName="id", nullable=false) */ private $entity2; @@ -91,20 +93,20 @@ public function getMyEntity2() } /** - * @Entity - * @Table(name="DDC2084_ENTITY2") + * @ORM\Entity + * @ORM\Table(name="DDC2084_ENTITY2") */ class MyEntity2 { /** - * @Id - * @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** - * @Column + * @ORM\Column */ private $value; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2106Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2106Test.php index 490550d31f9..fa773889da9 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2106Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2106Test.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; use Doctrine\Common\Collections\Criteria; +use Doctrine\ORM\Annotation as ORM; /** * @group DDC-2106 @@ -40,22 +41,22 @@ public function testDetachedEntityAsId() } /** - * @Entity + * @ORM\Entity */ class DDC2106Entity { /** - * @Id - * @GeneratedValue(strategy="IDENTITY") - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue(strategy="IDENTITY") + * @ORM\Column(type="integer") */ public $id; - /** @ManyToOne(targetEntity="DDC2106Entity", inversedBy="children") */ + /** @ORM\ManyToOne(targetEntity="DDC2106Entity", inversedBy="children") */ public $parent; /** - * @OneToMany(targetEntity="DDC2106Entity", mappedBy="parent", cascade={"persist"}) + * @ORM\OneToMany(targetEntity="DDC2106Entity", mappedBy="parent", cascade={"persist"}) */ public $children; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC211Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC211Test.php index 93c9896fc93..3f14403503a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC211Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC211Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\Tests\OrmFunctionalTestCase; class DDC211Test extends OrmFunctionalTestCase @@ -49,28 +50,28 @@ public function testIssue() /** - * @Entity - * @Table(name="ddc211_users") + * @ORM\Entity + * @ORM\Table(name="ddc211_users") */ class DDC211User { /** - * @Id - * @Column(name="id", type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(name="id", type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** - * @Column(name="name", type="string") + * @ORM\Column(name="name", type="string") */ protected $name; /** - * @ManyToMany(targetEntity="DDC211Group", inversedBy="users") - * @JoinTable(name="user_groups", - * joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")}, - * inverseJoinColumns={@JoinColumn(name="group_id", referencedColumnName="id")} + * @ORM\ManyToMany(targetEntity="DDC211Group", inversedBy="users") + * @ORM\JoinTable(name="user_groups", + * joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, + * inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")} * ) */ protected $groups; @@ -85,25 +86,25 @@ public function getGroups() { return $this->groups; } } /** - * @Entity - * @Table(name="ddc211_groups") + * @ORM\Entity + * @ORM\Table(name="ddc211_groups") */ class DDC211Group { /** - * @Id - * @Column(name="id", type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(name="id", type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** - * @Column(name="name", type="string") + * @ORM\Column(name="name", type="string") */ protected $name; /** - * @ManyToMany(targetEntity="DDC211User", mappedBy="groups") + * @ORM\ManyToMany(targetEntity="DDC211User", mappedBy="groups") */ protected $users; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php index 3a352d22d48..1df11bf995c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php @@ -3,8 +3,8 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; use Doctrine\Tests\OrmFunctionalTestCase; -use Doctrine\ORM\Tools\SchemaTool; class DDC2138Test extends OrmFunctionalTestCase { @@ -50,39 +50,39 @@ public function testForeignKeyOnSTIWithMultipleMapping() /** - * @Table(name="structures") - * @Entity + * @ORM\Table(name="structures") + * @ORM\Entity */ class DDC2138Structure { /** - * @Id - * @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** - * @Column(type="string", length=32, nullable=true) + * @ORM\Column(type="string", length=32, nullable=true) */ protected $name; } /** - * @Entity - * @Table(name="users_followed_objects") - * @InheritanceType("SINGLE_TABLE") - * @DiscriminatorColumn(name="object_type", type="smallint") - * @DiscriminatorMap({4 = "DDC2138UserFollowedUser", 3 = "DDC2138UserFollowedStructure"}) + * @ORM\Entity + * @ORM\Table(name="users_followed_objects") + * @ORM\InheritanceType("SINGLE_TABLE") + * @ORM\DiscriminatorColumn(name="object_type", type="smallint") + * @ORM\DiscriminatorMap({4 = "DDC2138UserFollowedUser", 3 = "DDC2138UserFollowedStructure"}) */ abstract class DDC2138UserFollowedObject { /** * @var int $id * - * @Column(name="id", type="integer") - * @Id - * @GeneratedValue(strategy="AUTO") + * @ORM\Column(name="id", type="integer") + * @ORM\Id + * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; @@ -98,20 +98,20 @@ public function getId() } /** - * @Entity + * @ORM\Entity */ class DDC2138UserFollowedStructure extends DDC2138UserFollowedObject { /** - * @ManyToOne(targetEntity="DDC2138User", inversedBy="followedStructures") - * @JoinColumn(name="user_id", referencedColumnName="id", nullable=false) + * @ORM\ManyToOne(targetEntity="DDC2138User", inversedBy="followedStructures") + * @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false) * @var User $user */ protected $user; /** - * @ManyToOne(targetEntity="DDC2138Structure") - * @JoinColumn(name="object_id", referencedColumnName="id", nullable=false) + * @ORM\ManyToOne(targetEntity="DDC2138Structure") + * @ORM\JoinColumn(name="object_id", referencedColumnName="id", nullable=false) * @var Structure $followedStructure */ private $followedStructure; @@ -149,20 +149,20 @@ public function getFollowedStructure() } /** - * @Entity + * @ORM\Entity */ class DDC2138UserFollowedUser extends DDC2138UserFollowedObject { /** - * @ManyToOne(targetEntity="DDC2138User", inversedBy="followedUsers") - * @JoinColumn(name="user_id", referencedColumnName="id", nullable=false) + * @ORM\ManyToOne(targetEntity="DDC2138User", inversedBy="followedUsers") + * @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false) * @var User $user */ protected $user; /** - * @ManyToOne(targetEntity="DDC2138User") - * @JoinColumn(name="object_id", referencedColumnName="id", nullable=false) + * @ORM\ManyToOne(targetEntity="DDC2138User") + * @ORM\JoinColumn(name="object_id", referencedColumnName="id", nullable=false) * @var User $user */ private $followedUser; @@ -201,32 +201,32 @@ public function getFollowedUser() } /** - * @Table(name="users") - * @Entity + * @ORM\Table(name="users") + * @ORM\Entity */ class DDC2138User { /** - * @Id - * @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** - * @Column(type="string", length=32, nullable=true) + * @ORM\Column(type="string", length=32, nullable=true) */ protected $name; /** * @var ArrayCollection $followedUsers - * @OneToMany(targetEntity="DDC2138UserFollowedUser", mappedBy="user", cascade={"persist"}, orphanRemoval=true) + * @ORM\OneToMany(targetEntity="DDC2138UserFollowedUser", mappedBy="user", cascade={"persist"}, orphanRemoval=true) */ protected $followedUsers; /** * @var ArrayCollection $followedStructures - * @OneToMany(targetEntity="DDC2138UserFollowedStructure", mappedBy="user", cascade={"persist"}, orphanRemoval=true) + * @ORM\OneToMany(targetEntity="DDC2138UserFollowedStructure", mappedBy="user", cascade={"persist"}, orphanRemoval=true) */ protected $followedStructures; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2175Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2175Test.php index 7d7ca6d41fe..0edd71b0de7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2175Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2175Test.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; + /** * @group DDC-2175 */ @@ -48,25 +50,25 @@ public function testIssue() } /** - * @Entity - * @InheritanceType("JOINED") - * @DiscriminatorMap({"entity": "DDC2175Entity"}) + * @ORM\Entity + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorMap({"entity": "DDC2175Entity"}) */ class DDC2175Entity { /** - * @Id @GeneratedValue @Column(type="integer") + * @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") */ public $id; /** - * @Column(type="string") + * @ORM\Column(type="string") */ public $field; /** - * @Version - * @Column(type="integer") + * @ORM\Version + * @ORM\Column(type="integer") */ public $version; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2182Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2182Test.php index 01fb0805805..b90be170bd9 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2182Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2182Test.php @@ -2,7 +2,10 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; -class DDC2182Test extends \Doctrine\Tests\OrmFunctionalTestCase +use Doctrine\ORM\Annotation as ORM; +use Doctrine\Tests\OrmFunctionalTestCase; + +class DDC2182Test extends OrmFunctionalTestCase { public function testPassColumnOptionsToJoinColumns() { @@ -24,27 +27,27 @@ public function testPassColumnOptionsToJoinColumns() } /** - * @Entity - * @Table + * @ORM\Entity + * @ORM\Table */ class DDC2182OptionParent { - /** @Id @Column(type="integer", options={"unsigned": true}) */ + /** @ORM\Id @ORM\Column(type="integer", options={"unsigned": true}) */ private $id; } /** - * @Entity - * @Table + * @ORM\Entity + * @ORM\Table */ class DDC2182OptionChild { - /** @Id @Column */ + /** @ORM\Id @ORM\Column */ private $id; /** - * @ManyToOne(targetEntity="DDC2182OptionParent") - * @JoinColumn(referencedColumnName="id") + * @ORM\ManyToOne(targetEntity="DDC2182OptionParent") + * @ORM\JoinColumn(referencedColumnName="id") */ private $parent; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2214Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2214Test.php index 8f1ace9c416..5f0ce4a36cf 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2214Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2214Test.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; + /** * Verifies that the type of parameters being bound to an SQL query is the same * of the identifier of the entities used as parameters in the DQL query, even @@ -55,19 +57,19 @@ public function testIssue() } } -/** @Entity */ +/** @ORM\Entity */ class DDC2214Foo { - /** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue(strategy="AUTO") */ public $id; - /** @ManyToOne(targetEntity="DDC2214Bar") */ + /** @ORM\ManyToOne(targetEntity="DDC2214Bar") */ public $bar; } -/** @Entity */ +/** @ORM\Entity */ class DDC2214Bar { - /** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue(strategy="AUTO") */ public $id; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2224Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2224Test.php index 2de05ff3222..ece60122c42 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2224Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2224Test.php @@ -5,6 +5,7 @@ use Doctrine\Common\Cache\ArrayCache; use Doctrine\DBAL\Types\Type; use Doctrine\DBAL\Platforms\AbstractPlatform; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Query; /** @@ -14,7 +15,7 @@ class DDC2224Test extends \Doctrine\Tests\OrmFunctionalTestCase { public static function setUpBeforeClass() { - \Doctrine\DBAL\Types\Type::addType('DDC2224Type', DDC2224Type::class); + Type::addType('DDC2224Type', DDC2224Type::class); } public function testIssue() @@ -74,17 +75,17 @@ public function convertToDatabaseValueSQL($sqlExpr, AbstractPlatform $platform) } /** - * @Entity + * @ORM\Entity */ class DDC2224Entity { /** - * @Id @GeneratedValue @Column(type="integer") + * @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") */ public $id; /** - * @Column(type="DDC2224Type") + * @ORM\Column(type="DDC2224Type") */ public $field; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php index a27d9538a1a..2da6eab8185 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php @@ -5,6 +5,7 @@ use Doctrine\Common\NotifyPropertyChanged; use Doctrine\Common\PropertyChangedListener; use Doctrine\Common\Proxy\Proxy; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Tools\ToolsException; use Doctrine\Tests\OrmFunctionalTestCase; @@ -70,25 +71,25 @@ public function testNotifyTrackingCalledOnProxyInitialization() } } -/** @Entity */ +/** @ORM\Entity */ class DDC2230User { - /** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @OneToOne(targetEntity="DDC2230Address") + * @ORM\OneToOne(targetEntity="DDC2230Address") */ public $address; } /** - * @Entity - * @ChangeTrackingPolicy("NOTIFY") + * @ORM\Entity + * @ORM\ChangeTrackingPolicy("NOTIFY") */ class DDC2230Address implements NotifyPropertyChanged { - /** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php index f11397915ec..0cc0bc9da50 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php @@ -5,6 +5,7 @@ use Doctrine\Common\Persistence\Mapping\ClassMetadata; use Doctrine\Common\Persistence\ObjectManager; use Doctrine\Common\Persistence\ObjectManagerAware; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Proxy\Proxy; /** @@ -44,11 +45,11 @@ public function testInjectObjectManagerInProxyIfInitializedInUow() } -/** @Entity @Table(name="ddc2231_y") */ +/** @ORM\Entity @ORM\Table(name="ddc2231_y") */ class DDC2231EntityY implements ObjectManagerAware { /** - * @Id @Column(type="integer") @GeneratedValue + * @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2252Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2252Test.php index 06e03e873cd..d6be4f4d3f9 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2252Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2252Test.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** * @group DDC-2252 @@ -102,15 +103,15 @@ public function testIssue() } /** - * @Entity() - * @Table(name="ddc2252_acl_privilege") + * @ORM\Entity() + * @ORM\Table(name="ddc2252_acl_privilege") */ class DDC2252Privilege { /** - * @Id - * @GeneratedValue - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ protected $privilegeid; @@ -121,14 +122,14 @@ public function getPrivilegeid() } /** - * @Entity - * @Table(name="ddc2252_mch_account") + * @ORM\Entity + * @ORM\Table(name="ddc2252_mch_account") */ class DDC2252MerchantAccount { /** - * @Id - * @Column(type="integer") + * @ORM\Id + * @ORM\Column(type="integer") */ protected $accountid = 111; @@ -139,19 +140,19 @@ public function getAccountid() } /** - * @Entity - * @Table(name="ddc2252_user_account") + * @ORM\Entity + * @ORM\Table(name="ddc2252_user_account") */ class DDC2252User { /** - * @Id - * @Column(type="integer") + * @ORM\Id + * @ORM\Column(type="integer") */ protected $uid = 222; /** - * @OneToMany(targetEntity="DDC2252Membership", mappedBy="userAccount", cascade={"persist"}) - * @JoinColumn(name="uid", referencedColumnName="uid") + * @ORM\OneToMany(targetEntity="DDC2252Membership", mappedBy="userAccount", cascade={"persist"}) + * @ORM\JoinColumn(name="uid", referencedColumnName="uid") */ protected $memberships; @@ -177,35 +178,35 @@ public function addMembership(DDC2252Membership $membership) } /** - * @Entity - * @Table(name="ddc2252_mch_account_member") - * @HasLifecycleCallbacks + * @ORM\Entity + * @ORM\Table(name="ddc2252_mch_account_member") + * @ORM\HasLifecycleCallbacks */ class DDC2252Membership { /** - * @Id - * @ManyToOne(targetEntity="DDC2252User", inversedBy="memberships") - * @JoinColumn(name="uid", referencedColumnName="uid") + * @ORM\Id + * @ORM\ManyToOne(targetEntity="DDC2252User", inversedBy="memberships") + * @ORM\JoinColumn(name="uid", referencedColumnName="uid") */ protected $userAccount; /** - * @Id - * @ManyToOne(targetEntity="DDC2252MerchantAccount") - * @JoinColumn(name="mch_accountid", referencedColumnName="accountid") + * @ORM\Id + * @ORM\ManyToOne(targetEntity="DDC2252MerchantAccount") + * @ORM\JoinColumn(name="mch_accountid", referencedColumnName="accountid") */ protected $merchantAccount; /** - * @ManyToMany(targetEntity="DDC2252Privilege", indexBy="privilegeid") - * @JoinTable(name="ddc2252_user_mch_account_privilege", + * @ORM\ManyToMany(targetEntity="DDC2252Privilege", indexBy="privilegeid") + * @ORM\JoinTable(name="ddc2252_user_mch_account_privilege", * joinColumns={ - * @JoinColumn(name="mch_accountid", referencedColumnName="mch_accountid"), - * @JoinColumn(name="uid", referencedColumnName="uid") + * @ORM\JoinColumn(name="mch_accountid", referencedColumnName="mch_accountid"), + * @ORM\JoinColumn(name="uid", referencedColumnName="uid") * }, * inverseJoinColumns={ - * @JoinColumn(name="privilegeid", referencedColumnName="privilegeid") + * @ORM\JoinColumn(name="privilegeid", referencedColumnName="privilegeid") * } * ) */ diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2256Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2256Test.php index 145143ed672..48f614ad716 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2256Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2256Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\ORM\Query\ResultSetMappingBuilder; @@ -63,50 +64,50 @@ public function testIssue() } /** - * @Entity - * @Table(name="ddc2256_users") + * @ORM\Entity + * @ORM\Table(name="ddc2256_users") */ class DDC2256User { /** - * @Id - * @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(type="string") + * @ORM\Column(type="string") */ public $name; /** - * @ManyToOne(targetEntity="DDC2256Group", inversedBy="users")A - * @JoinColumn(name="group_id") + * @ORM\ManyToOne(targetEntity="DDC2256Group", inversedBy="users")A + * @ORM\JoinColumn(name="group_id") */ public $group; } /** - * @Entity - * @Table(name="ddc2256_groups") + * @ORM\Entity + * @ORM\Table(name="ddc2256_groups") */ class DDC2256Group { /** - * @Id - * @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(type="string") + * @ORM\Column(type="string") */ public $name; /** - * @OneToMany(targetEntity="DDC2256User", mappedBy="group") + * @ORM\OneToMany(targetEntity="DDC2256User", mappedBy="group") */ public $users; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2306Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2306Test.php index 1cb1cbd8553..12080e71da6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2306Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2306Test.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Proxy\Proxy; /** @@ -77,29 +78,29 @@ public function testIssue() } } -/** @Entity */ +/** @ORM\Entity */ class DDC2306Zone { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; } /** - * @Entity + * @ORM\Entity */ class DDC2306User { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; /** * @var DDC2306UserAddress[]|\Doctrine\Common\Collections\Collection * - * @OneToMany(targetEntity="DDC2306UserAddress", mappedBy="user") + * @ORM\OneToMany(targetEntity="DDC2306UserAddress", mappedBy="user") */ public $addresses; - /** @ManyToOne(targetEntity="DDC2306Zone", fetch="EAGER") */ + /** @ORM\ManyToOne(targetEntity="DDC2306Zone", fetch="EAGER") */ public $zone; /** Constructor */ @@ -108,20 +109,20 @@ public function __construct() { } } -/** @Entity */ +/** @ORM\Entity */ class DDC2306Address { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; /** * @var DDC2306UserAddress[]|\Doctrine\Common\Collections\Collection * - * @OneToMany(targetEntity="DDC2306UserAddress", mappedBy="address", orphanRemoval=true) + * @ORM\OneToMany(targetEntity="DDC2306UserAddress", mappedBy="address", orphanRemoval=true) */ public $users; - /** @ManyToOne(targetEntity="DDC2306Zone", fetch="EAGER") */ + /** @ORM\ManyToOne(targetEntity="DDC2306Zone", fetch="EAGER") */ public $zone; /** Constructor */ @@ -130,16 +131,16 @@ public function __construct() { } } -/** @Entity */ +/** @ORM\Entity */ class DDC2306UserAddress { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; - /** @ManyToOne(targetEntity="DDC2306User") */ + /** @ORM\ManyToOne(targetEntity="DDC2306User") */ public $user; - /** @ManyToOne(targetEntity="DDC2306Address", fetch="LAZY") */ + /** @ORM\ManyToOne(targetEntity="DDC2306Address", fetch="LAZY") */ public $address; /** Constructor */ diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2346Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2346Test.php index b64f0850d43..4ef6e893600 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2346Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2346Test.php @@ -4,6 +4,7 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\DBAL\Logging\DebugStack; +use Doctrine\ORM\Annotation as ORM; /** * @group DDC-2346 @@ -67,16 +68,16 @@ public function testIssue() } } -/** @Entity */ +/** @ORM\Entity */ class DDC2346Foo { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; /** * @var DDC2346Bar[]|\Doctrine\Common\Collections\Collection * - * @OneToMany(targetEntity="DDC2346Bar", mappedBy="foo") + * @ORM\OneToMany(targetEntity="DDC2346Bar", mappedBy="foo") */ public $bars; @@ -87,23 +88,23 @@ public function __construct() { } /** - * @Entity - * @InheritanceType("JOINED") - * @DiscriminatorColumn(name="discr", type="string") - * @DiscriminatorMap({"bar" = "DDC2346Bar", "baz" = "DDC2346Baz"}) + * @ORM\Entity + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorColumn(name="discr", type="string") + * @ORM\DiscriminatorMap({"bar" = "DDC2346Bar", "baz" = "DDC2346Baz"}) */ class DDC2346Bar { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; - /** @ManyToOne(targetEntity="DDC2346Foo", inversedBy="bars", fetch="EAGER") */ + /** @ORM\ManyToOne(targetEntity="DDC2346Foo", inversedBy="bars", fetch="EAGER") */ public $foo; } /** - * @Entity + * @ORM\Entity */ class DDC2346Baz extends DDC2346Bar { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2350Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2350Test.php index 3115e1724b8..63e49016e0b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2350Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2350Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\Tests\OrmFunctionalTestCase; /** @@ -49,23 +50,23 @@ public function testEagerCollectionsAreOnlyRetrievedOnce() } /** - * @Entity + * @ORM\Entity */ class DDC2350User { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; - /** @OneToMany(targetEntity="DDC2350Bug", mappedBy="user", fetch="EAGER") */ + /** @ORM\OneToMany(targetEntity="DDC2350Bug", mappedBy="user", fetch="EAGER") */ public $reportedBugs; } /** - * @Entity + * @ORM\Entity */ class DDC2350Bug { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; - /** @ManyToOne(targetEntity="DDC2350User", inversedBy="reportedBugs") */ + /** @ORM\ManyToOne(targetEntity="DDC2350User", inversedBy="reportedBugs") */ public $user; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php index 69dbcff599d..219dc017d38 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php @@ -5,6 +5,7 @@ use Doctrine\Common\EventManager; use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; use Doctrine\DBAL\Connection; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManager; use Doctrine\ORM\Mapping\ClassMetadata; @@ -59,9 +60,9 @@ public function testIssue() } } -/** @Entity */ +/** @ORM\Entity */ class DDC2359Foo { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php index c2c60d7b1ff..217d364e99e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Proxy\Proxy; class DDC237Test extends \Doctrine\Tests\OrmFunctionalTestCase @@ -65,50 +66,50 @@ public function testUninitializedProxyIsInitializedOnFetchJoin() /** - * @Entity @Table(name="ddc237_x") + * @ORM\Entity @ORM\Table(name="ddc237_x") */ class DDC237EntityX { /** - * @Id @Column(type="integer") @GeneratedValue + * @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; /** - * @Column(type="string") + * @ORM\Column(type="string") */ public $data; /** - * @OneToOne(targetEntity="DDC237EntityY") - * @JoinColumn(name="y_id", referencedColumnName="id") + * @ORM\OneToOne(targetEntity="DDC237EntityY") + * @ORM\JoinColumn(name="y_id", referencedColumnName="id") */ public $y; } -/** @Entity @Table(name="ddc237_y") */ +/** @ORM\Entity @ORM\Table(name="ddc237_y") */ class DDC237EntityY { /** - * @Id @Column(type="integer") @GeneratedValue + * @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; /** - * @Column(type="string") + * @ORM\Column(type="string") */ public $data; } -/** @Entity @Table(name="ddc237_z") */ +/** @ORM\Entity @ORM\Table(name="ddc237_z") */ class DDC237EntityZ { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ public $data; /** - * @OneToOne(targetEntity="DDC237EntityY") - * @JoinColumn(name="y_id", referencedColumnName="id") + * @ORM\OneToOne(targetEntity="DDC237EntityY") + * @ORM\JoinColumn(name="y_id", referencedColumnName="id") */ public $y; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php index 4d924c06fe1..ec624a1fa6a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php @@ -4,7 +4,6 @@ use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\Tests\ORM\Functional\DatabaseDriverTestCase; -use Doctrine\ORM\Mapping\ClassMetadata; class DDC2387Test extends DatabaseDriverTestCase { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2494Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2494Test.php index 6de21083fe0..c170dd988cd 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2494Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2494Test.php @@ -4,6 +4,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\DBAL\Platforms\AbstractPlatform; +use Doctrine\ORM\Annotation as ORM; /** * @group DDC-2494 @@ -71,26 +72,26 @@ public function testIssue() } /** - * @Table(name="ddc2494_currency") - * @Entity + * @ORM\Table(name="ddc2494_currency") + * @ORM\Entity */ class DDC2494Currency { /** - * @Id - * @Column(type="integer", type="ddc2494_tinyint") + * @ORM\Id + * @ORM\Column(type="integer", type="ddc2494_tinyint") */ protected $id; /** - * @Column(name="temp", type="ddc2494_tinyint", nullable=false) + * @ORM\Column(name="temp", type="ddc2494_tinyint", nullable=false) */ protected $temp; /** * @var \Doctrine\Common\Collections\Collection * - * @OneToMany(targetEntity="DDC2494Campaign", mappedBy="currency") + * @ORM\OneToMany(targetEntity="DDC2494Campaign", mappedBy="currency") */ protected $campaigns; @@ -117,23 +118,23 @@ public function getCampaigns() } /** - * @Table(name="ddc2494_campaign") - * @Entity + * @ORM\Table(name="ddc2494_campaign") + * @ORM\Entity */ class DDC2494Campaign { /** - * @Id - * @GeneratedValue - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ protected $id; /** * @var \Doctrine\Tests\ORM\Functional\Ticket\DDC2494Currency * - * @ManyToOne(targetEntity="DDC2494Currency", inversedBy="campaigns") - * @JoinColumn(name="currency_id", referencedColumnName="id", nullable=false) + * @ORM\ManyToOne(targetEntity="DDC2494Currency", inversedBy="campaigns") + * @ORM\JoinColumn(name="currency_id", referencedColumnName="id", nullable=false) */ protected $currency; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2575Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2575Test.php index 1ea9a51d7a8..471cd894ee3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2575Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2575Test.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; + /** * @group DDC-2575 */ @@ -85,23 +87,23 @@ public function testHydrationIssue() } /** - * @Entity + * @ORM\Entity */ class DDC2575Root { /** - * @Id - * @Column(type="integer") + * @ORM\Id + * @ORM\Column(type="integer") */ public $id; /** - * @Column(type="integer") + * @ORM\Column(type="integer") */ public $sampleField; /** - * @OneToOne(targetEntity="DDC2575A", mappedBy="rootRelation") + * @ORM\OneToOne(targetEntity="DDC2575A", mappedBy="rootRelation") **/ public $aRelation; @@ -114,20 +116,20 @@ public function __construct($id, $value = 0) } /** - * @Entity + * @ORM\Entity */ class DDC2575A { /** - * @Id - * @OneToOne(targetEntity="DDC2575Root", inversedBy="aRelation") - * @JoinColumn(name="root_id", referencedColumnName="id", nullable=FALSE, onDelete="CASCADE") + * @ORM\Id + * @ORM\OneToOne(targetEntity="DDC2575Root", inversedBy="aRelation") + * @ORM\JoinColumn(name="root_id", referencedColumnName="id", nullable=FALSE, onDelete="CASCADE") */ public $rootRelation; /** - * @ManyToOne(targetEntity="DDC2575B") - * @JoinColumn(name="b_id", referencedColumnName="id", nullable=FALSE, onDelete="CASCADE") + * @ORM\ManyToOne(targetEntity="DDC2575B") + * @ORM\JoinColumn(name="b_id", referencedColumnName="id", nullable=FALSE, onDelete="CASCADE") */ public $bRelation; @@ -139,18 +141,18 @@ public function __construct(DDC2575Root $rootRelation, DDC2575B $bRelation) } /** - * @Entity + * @ORM\Entity */ class DDC2575B { /** - * @Id - * @Column(type="integer") + * @ORM\Id + * @ORM\Column(type="integer") */ public $id; /** - * @Column(type="integer") + * @ORM\Column(type="integer") */ public $sampleField; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2579Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2579Test.php index 26b6f1948fa..13516da7a92 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2579Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2579Test.php @@ -5,6 +5,7 @@ use Doctrine\DBAL\Types\StringType; use Doctrine\DBAL\Types\Type; use Doctrine\DBAL\Platforms\AbstractPlatform; +use Doctrine\ORM\Annotation as ORM; /** * @group DDC-2579 @@ -63,25 +64,25 @@ public function testIssue() } /** - * @Entity + * @ORM\Entity */ class DDC2579Entity { /** - * @Id - * @Column(type="ddc2579") + * @ORM\Id + * @ORM\Column(type="ddc2579") */ public $id; /** - * @Id - * @ManyToOne(targetEntity="DDC2579EntityAssoc") - * @JoinColumn(name="relation_id", referencedColumnName="association_id") + * @ORM\Id + * @ORM\ManyToOne(targetEntity="DDC2579EntityAssoc") + * @ORM\JoinColumn(name="relation_id", referencedColumnName="association_id") */ public $assoc; /** - * @Column(type="integer") + * @ORM\Column(type="integer") */ public $value; @@ -95,14 +96,14 @@ public function __construct(DDC2579EntityAssoc $assoc, $value = 0) } /** - * @Entity + * @ORM\Entity */ class DDC2579EntityAssoc { /** - * @Id - * @ManyToOne(targetEntity="DDC2579AssocAssoc") - * @JoinColumn(name="association_id", referencedColumnName="associationId") + * @ORM\Id + * @ORM\ManyToOne(targetEntity="DDC2579AssocAssoc") + * @ORM\JoinColumn(name="association_id", referencedColumnName="associationId") */ public $assocAssoc; @@ -113,13 +114,13 @@ public function __construct(DDC2579AssocAssoc $assocAssoc) } /** - * @Entity + * @ORM\Entity */ class DDC2579AssocAssoc { /** - * @Id - * @Column(type="ddc2579") + * @ORM\Id + * @ORM\Column(type="ddc2579") */ public $associationId; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC258Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC258Test.php index 150c818cad1..1f3f418d6d7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC258Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC258Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\Tests\OrmFunctionalTestCase; class DDC258Test extends OrmFunctionalTestCase @@ -74,54 +75,54 @@ public function testIssue() } /** - * @Entity - * @Table(name="DDC258Super") - * @InheritanceType("JOINED") - * @DiscriminatorColumn(name="type", type="string") - * @DiscriminatorMap({"class1" = "DDC258Class1", "class2" = "DDC258Class2", "class3"="DDC258Class3"}) + * @ORM\Entity + * @ORM\Table(name="DDC258Super") + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorColumn(name="type", type="string") + * @ORM\DiscriminatorMap({"class1" = "DDC258Class1", "class2" = "DDC258Class2", "class3"="DDC258Class3"}) */ abstract class DDC258Super { /** - * @Id @Column(name="id", type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id @ORM\Column(name="id", type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; } /** - * @Entity + * @ORM\Entity */ class DDC258Class1 extends DDC258Super { /** - * @Column(name="title", type="string", length=150) + * @ORM\Column(name="title", type="string", length=150) */ public $title; /** - * @Column(name="content", type="string", length=500) + * @ORM\Column(name="content", type="string", length=500) */ public $description; } /** - * @Entity + * @ORM\Entity */ class DDC258Class2 extends DDC258Super { /** - * @Column(name="title", type="string", length=150) + * @ORM\Column(name="title", type="string", length=150) */ public $title; /** - * @Column(name="content", type="string", length=500) + * @ORM\Column(name="content", type="string", length=500) */ public $description; /** - * @Column(name="text", type="text") + * @ORM\Column(name="text", type="text") */ public $text; } @@ -129,17 +130,17 @@ class DDC258Class2 extends DDC258Super /** * An extra class to demonstrate why title and description aren't in Super * - * @Entity + * @ORM\Entity */ class DDC258Class3 extends DDC258Super { /** - * @Column(name="title", type="string", length=150) + * @ORM\Column(name="title", type="string", length=150) */ public $apples; /** - * @Column(name="content", type="string", length=500) + * @ORM\Column(name="content", type="string", length=500) */ public $bananas; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2645Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2645Test.php index 1ba328f1a38..7e72899058e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2645Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2645Test.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; + /** * @group DDC-2645 */ @@ -25,16 +27,16 @@ public function testIssue() } } -/** @Entity */ +/** @ORM\Entity */ class DDC2645Foo { - /** @Id @Column(type="integer") */ + /** @ORM\Id @ORM\Column(type="integer") */ private $id; - /** @Id @ManyToOne(targetEntity="DDC2645Bar") */ + /** @ORM\Id @ORM\ManyToOne(targetEntity="DDC2645Bar") */ private $bar; - /** @Column */ + /** @ORM\Column */ public $name; public function __construct($id, $bar, $name) @@ -45,9 +47,9 @@ public function __construct($id, $bar, $name) } } -/** @Entity */ +/** @ORM\Entity */ class DDC2645Bar { - /** @Id @Column(type="integer") @GeneratedValue(strategy="NONE") */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue(strategy="NONE") */ public $id; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2660Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2660Test.php index ab48caac5e6..6a42506e709 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2660Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2660Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Query\ResultSetMappingBuilder; /** @@ -81,36 +82,36 @@ public function testIssueWithoutExtraColumn() } } /** - * @Entity @Table(name="ddc_2660_product") + * @ORM\Entity @ORM\Table(name="ddc_2660_product") */ class DDC2660Product { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; } -/** @Entity @Table(name="ddc_2660_customer") */ +/** @ORM\Entity @ORM\Table(name="ddc_2660_customer") */ class DDC2660Customer { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; } -/** @Entity @Table(name="ddc_2660_customer_order") */ +/** @ORM\Entity @ORM\Table(name="ddc_2660_customer_order") */ class DDC2660CustomerOrder { /** - * @Id @ManyToOne(targetEntity="DDC2660Product") + * @ORM\Id @ORM\ManyToOne(targetEntity="DDC2660Product") */ public $product; /** - * @Id @ManyToOne(targetEntity="DDC2660Customer") + * @ORM\Id @ORM\ManyToOne(targetEntity="DDC2660Customer") */ public $customer; /** - * @Column(type="string") + * @ORM\Column(type="string") */ public $name; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2692Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2692Test.php index 62e5344316a..d021dcfa668 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2692Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2692Test.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; use Doctrine\Common\EventSubscriber; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Event\PreFlushEventArgs; /** @@ -47,11 +48,11 @@ public function testIsListenerCalledOnlyOnceOnPreFlush() } } /** - * @Entity @Table(name="ddc_2692_foo") + * @ORM\Entity @ORM\Table(name="ddc_2692_foo") */ class DDC2692Foo { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2759Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2759Test.php index ada16a190ea..1573c30a0c7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2759Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2759Test.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; + /** * @group DDC-2759 */ @@ -65,36 +67,36 @@ public function testCorrectNumberOfAssociationsIsReturned() } } -/** @Entity @Table(name="ddc_2759_qualification") */ +/** @ORM\Entity @ORM\Table(name="ddc_2759_qualification") */ class DDC2759Qualification { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; - /** @OneToOne(targetEntity="DDC2759QualificationMetadata", mappedBy="content") */ + /** @ORM\OneToOne(targetEntity="DDC2759QualificationMetadata", mappedBy="content") */ public $metadata; } -/** @Entity @Table(name="ddc_2759_category") */ +/** @ORM\Entity @ORM\Table(name="ddc_2759_category") */ class DDC2759Category { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; - /** @OneToMany(targetEntity="DDC2759MetadataCategory", mappedBy="category") */ + /** @ORM\OneToMany(targetEntity="DDC2759MetadataCategory", mappedBy="category") */ public $metadataCategories; } -/** @Entity @Table(name="ddc_2759_qualification_metadata") */ +/** @ORM\Entity @ORM\Table(name="ddc_2759_qualification_metadata") */ class DDC2759QualificationMetadata { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; - /** @OneToOne(targetEntity="DDC2759Qualification", inversedBy="metadata") */ + /** @ORM\OneToOne(targetEntity="DDC2759Qualification", inversedBy="metadata") */ public $content; - /** @OneToMany(targetEntity="DDC2759MetadataCategory", mappedBy="metadata") */ + /** @ORM\OneToMany(targetEntity="DDC2759MetadataCategory", mappedBy="metadata") */ protected $metadataCategories; public function __construct(DDC2759Qualification $content) @@ -103,16 +105,16 @@ public function __construct(DDC2759Qualification $content) } } -/** @Entity @Table(name="ddc_2759_metadata_category") */ +/** @ORM\Entity @ORM\Table(name="ddc_2759_metadata_category") */ class DDC2759MetadataCategory { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; - /** @ManyToOne(targetEntity="DDC2759QualificationMetadata", inversedBy="metadataCategories") */ + /** @ORM\ManyToOne(targetEntity="DDC2759QualificationMetadata", inversedBy="metadataCategories") */ public $metadata; - /** @ManyToOne(targetEntity="DDC2759Category", inversedBy="metadataCategories") */ + /** @ORM\ManyToOne(targetEntity="DDC2759Category", inversedBy="metadataCategories") */ public $category; public function __construct(DDC2759QualificationMetadata $metadata, DDC2759Category $category) diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2775Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2775Test.php index cae5c0a07fd..66401500cc9 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2775Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2775Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\Tests\OrmFunctionalTestCase; /** @@ -57,26 +58,26 @@ public function testIssueCascadeRemove() } /** - * @Entity @Table(name="ddc2775_role") - * @InheritanceType("JOINED") - * @DiscriminatorColumn(name="role_type", type="string") - * @DiscriminatorMap({"admin"="AdminRole"}) + * @ORM\Entity @ORM\Table(name="ddc2775_role") + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorColumn(name="role_type", type="string") + * @ORM\DiscriminatorMap({"admin"="AdminRole"}) */ abstract class Role { /** - * @Id @Column(type="integer") - * @GeneratedValue + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue */ public $id; /** - * @ManyToOne(targetEntity="User", inversedBy="roles") + * @ORM\ManyToOne(targetEntity="User", inversedBy="roles") */ public $user; /** - * @OneToMany(targetEntity="Authorization", mappedBy="role", cascade={"all"}, orphanRemoval=true) + * @ORM\OneToMany(targetEntity="Authorization", mappedBy="role", cascade={"all"}, orphanRemoval=true) */ public $authorizations; @@ -87,51 +88,51 @@ public function addAuthorization(Authorization $authorization) } } -/** @Entity @Table(name="ddc2775_admin_role") */ +/** @ORM\Entity @ORM\Table(name="ddc2775_admin_role") */ class AdminRole extends Role { } /** - * @Entity @Table(name="ddc2775_authorizations") + * @ORM\Entity @ORM\Table(name="ddc2775_authorizations") */ class Authorization { /** - * @Id @Column(type="integer") - * @GeneratedValue + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue */ public $id; /** - * @ManyToOne(targetEntity="User", inversedBy="authorizations") + * @ORM\ManyToOne(targetEntity="User", inversedBy="authorizations") */ public $user; /** - * @ManyToOne(targetEntity="Role", inversedBy="authorizations") + * @ORM\ManyToOne(targetEntity="Role", inversedBy="authorizations") */ public $role; } /** - * @Entity @Table(name="ddc2775_users") + * @ORM\Entity @ORM\Table(name="ddc2775_users") */ class User { /** - * @Id @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @OneToMany(targetEntity="Role", mappedBy="user", cascade={"all"}, orphanRemoval=true) + * @ORM\OneToMany(targetEntity="Role", mappedBy="user", cascade={"all"}, orphanRemoval=true) */ public $roles; /** - * @OneToMany(targetEntity="Authorization", mappedBy="user", cascade={"all"}, orphanRemoval=true) + * @ORM\OneToMany(targetEntity="Authorization", mappedBy="user", cascade={"all"}, orphanRemoval=true) */ public $authorizations; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC279Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC279Test.php index b3d0240db05..da117857081 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC279Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC279Test.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; + class DDC279Test extends \Doctrine\Tests\OrmFunctionalTestCase { protected function setUp() @@ -59,75 +61,75 @@ public function testDDC279() /** - * @Entity - * @InheritanceType("JOINED") - * @DiscriminatorColumn(name="discr", type="string") - * @DiscriminatorMap({"DDC279EntityX" = "DDC279EntityX"}) + * @ORM\Entity + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorColumn(name="discr", type="string") + * @ORM\DiscriminatorMap({"DDC279EntityX" = "DDC279EntityX"}) */ abstract class DDC279EntityXAbstract { /** - * @Id - * @GeneratedValue - * @Column(name="id", type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(name="id", type="integer") */ public $id; /** - * @column(type="string") + * @ORM\Column(type="string") */ public $data; } /** - * @Entity + * @ORM\Entity */ class DDC279EntityX extends DDC279EntityXAbstract { /** - * @OneToOne(targetEntity="DDC279EntityY") - * @JoinColumn(name="y_id", referencedColumnName="id") + * @ORM\OneToOne(targetEntity="DDC279EntityY") + * @ORM\JoinColumn(name="y_id", referencedColumnName="id") */ public $y; } /** - * @Entity + * @ORM\Entity */ class DDC279EntityY { /** - * @Id @GeneratedValue - * @Column(name="id", type="integer") + * @ORM\Id @ORM\GeneratedValue + * @ORM\Column(name="id", type="integer") */ public $id; /** - * @column(type="string") + * @ORM\Column(type="string") */ public $data; /** - * @OneToOne(targetEntity="DDC279EntityZ") - * @JoinColumn(name="z_id", referencedColumnName="id") + * @ORM\OneToOne(targetEntity="DDC279EntityZ") + * @ORM\JoinColumn(name="z_id", referencedColumnName="id") */ public $z; } /** - * @Entity + * @ORM\Entity */ class DDC279EntityZ { /** - * @Id @GeneratedValue - * @Column(name="id", type="integer") + * @ORM\Id @ORM\GeneratedValue + * @ORM\Column(name="id", type="integer") */ public $id; /** - * @column(type="string") + * @ORM\Column(type="string") */ public $data; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php index 41d2de27545..fa24f030a7b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Tools\ToolsException; use Doctrine\Tests\Models\DDC2825\ExplicitSchemaAndTable; use Doctrine\Tests\Models\DDC2825\SchemaAndTableInTableName; @@ -98,14 +99,14 @@ public function getTestedClasses() } /** - * @Entity - * @Table(name="order", schema="myschema") + * @ORM\Entity + * @ORM\Table(name="order", schema="myschema") */ class DDC2825ClassWithImplicitlyDefinedSchemaAndQuotedTableName { /** - * @Id @GeneratedValue - * @Column(type="integer") + * @ORM\Id @ORM\GeneratedValue + * @ORM\Column(type="integer") * * @var integer */ diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2862Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2862Test.php index a4e401c66b6..ca224637a16 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2862Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2862Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Tools\ToolsException; /** @@ -113,28 +114,28 @@ public function testIssueReopened() } /** - * @Entity - * @Table(name="ddc2862_drivers") - * @Cache("NONSTRICT_READ_WRITE") + * @ORM\Entity + * @ORM\Table(name="ddc2862_drivers") + * @ORM\Cache("NONSTRICT_READ_WRITE") */ class DDC2862Driver { /** - * @Id - * @GeneratedValue - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ protected $id; /** - * @Column(type="string") + * @ORM\Column(type="string") * @var string */ protected $name; /** - * @Cache() - * @OneToOne(targetEntity="DDC2862User") + * @ORM\Cache() + * @ORM\OneToOne(targetEntity="DDC2862User") * @var User */ protected $userProfile; @@ -188,21 +189,21 @@ public function getUserProfile() } /** - * @Entity - * @Table(name="ddc2862_users") - * @Cache("NONSTRICT_READ_WRITE") + * @ORM\Entity + * @ORM\Table(name="ddc2862_users") + * @ORM\Cache("NONSTRICT_READ_WRITE") */ class DDC2862User { /** - * @Id - * @GeneratedValue - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ protected $id; /** - * @Column(type="string") + * @ORM\Column(type="string") * @var string */ protected $name; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2895Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2895Test.php index 9e6155ecb5e..912f87eec5e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2895Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2895Test.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; + /** * Class DDC2895Test * @package Doctrine\Tests\ORM\Functional\Ticket @@ -50,20 +52,20 @@ public function testPostLoadOneToManyInheritance() } /** - * @MappedSuperclass - * @HasLifecycleCallbacks + * @ORM\MappedSuperclass + * @ORM\HasLifecycleCallbacks */ abstract class AbstractDDC2895 { /** - * @Column(name="last_modified", type="datetimetz", nullable=false) + * @ORM\Column(name="last_modified", type="datetimetz", nullable=false) * @var \DateTime */ protected $lastModified; /** - * @PrePersist - * @PreUpdate + * @ORM\PrePersist + * @ORM\PreUpdate */ public function setLastModifiedPreUpdate() { @@ -88,12 +90,12 @@ public function getLastModified() } /** - * @Entity - * @HasLifecycleCallbacks + * @ORM\Entity + * @ORM\HasLifecycleCallbacks */ class DDC2895 extends AbstractDDC2895 { - /** @Id @GeneratedValue @Column(type="integer") */ + /** @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") */ public $id; /** diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2931Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2931Test.php index 798e6fc6d15..55c43911b30 100755 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2931Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2931Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Query; /** @@ -86,20 +87,20 @@ public function testFetchJoinedEntitiesCanBeRefreshed() } -/** @Entity */ +/** @ORM\Entity */ class DDC2931User { - /** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue(strategy="AUTO") */ public $id; - /** @OneToOne(targetEntity="DDC2931User", inversedBy="child") */ + /** @ORM\OneToOne(targetEntity="DDC2931User", inversedBy="child") */ public $parent; - /** @OneToOne(targetEntity="DDC2931User", mappedBy="parent") */ + /** @ORM\OneToOne(targetEntity="DDC2931User", mappedBy="parent") */ public $child; - /** @Column(type="integer") */ + /** @ORM\Column(type="integer") */ public $value = 0; /** diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2984Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2984Test.php index 7a3b0abca96..112f572c2ce 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2984Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2984Test.php @@ -6,6 +6,7 @@ use Doctrine\DBAL\Types\ConversionException; use Doctrine\DBAL\Types\StringType; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Annotation as ORM; /** * @group DDC-2984 @@ -59,18 +60,18 @@ public function testIssue() } } -/** @Entity @Table(name="users") */ +/** @ORM\Entity @ORM\Table(name="users") */ class DDC2984User { /** - * @Id @Column(type="ddc2984_domain_user_id") - * @GeneratedValue(strategy="NONE") + * @ORM\Id @ORM\Column(type="ddc2984_domain_user_id") + * @ORM\GeneratedValue(strategy="NONE") * * @var DDC2984DomainUserId */ private $userId; - /** @Column(type="string", length=50) */ + /** @ORM\Column(type="string", length=50) */ private $name; public function __construct(DDC2984DomainUserId $aUserId) diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2996Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2996Test.php index c8e38edb5f5..cb3ac389cc0 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2996Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2996Test.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; + /** * @group DDC-2996 */ @@ -37,41 +39,41 @@ public function testIssue() } /** - * @Entity + * @ORM\Entity */ class DDC2996User { /** - * @Id @GeneratedValue @Column(type="integer") + * @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") */ public $id; /** - * @Column(type="integer") + * @ORM\Column(type="integer") */ public $counter = 0; } /** - * @Entity @HasLifecycleCallbacks + * @ORM\Entity @ORM\HasLifecycleCallbacks */ class DDC2996UserPreference { /** - * @Id @GeneratedValue @Column(type="integer") + * @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") */ public $id; /** - * @Column(type="string") + * @ORM\Column(type="string") */ public $value; /** - * @ManyToOne(targetEntity="DDC2996User") + * @ORM\ManyToOne(targetEntity="DDC2996User") */ public $user; /** - * @PreFlush + * @ORM\PreFlush */ public function preFlush($event) { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3033Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3033Test.php index 70faf1c1d74..69d397973c0 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3033Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3033Test.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Event\LifecycleEventArgs; /** @@ -52,8 +53,8 @@ public function testIssue() } /** - * @Table - * @Entity @HasLifecycleCallbacks + * @ORM\Table + * @ORM\Entity @ORM\HasLifecycleCallbacks */ class DDC3033Product { @@ -62,25 +63,25 @@ class DDC3033Product /** * @var int $id * - * @Column(name="id", type="integer") - * @Id - * @GeneratedValue(strategy="AUTO") + * @ORM\Column(name="id", type="integer") + * @ORM\Id + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** * @var string $title * - * @Column(name="title", type="string", length=255) + * @ORM\Column(name="title", type="string", length=255) */ public $title; /** - * @ManyToMany(targetEntity="DDC3033User") - * @JoinTable( + * @ORM\ManyToMany(targetEntity="DDC3033User") + * @ORM\JoinTable( * name="user_purchases_3033", - * joinColumns={@JoinColumn(name="product_id", referencedColumnName="id")}, - * inverseJoinColumns={@JoinColumn(name="user_id", referencedColumnName="id")} + * joinColumns={@ORM\JoinColumn(name="product_id", referencedColumnName="id")}, + * inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")} * ) */ public $buyers; @@ -94,14 +95,14 @@ public function __construct() } /** - * @PreUpdate + * @ORM\PreUpdate */ public function preUpdate(LifecycleEventArgs $eventArgs) { } /** - * @PostUpdate + * @ORM\PostUpdate */ public function postUpdate(LifecycleEventArgs $eventArgs) { @@ -116,24 +117,24 @@ public function postUpdate(LifecycleEventArgs $eventArgs) } /** - * @Table - * @Entity @HasLifecycleCallbacks + * @ORM\Table + * @ORM\Entity @ORM\HasLifecycleCallbacks */ class DDC3033User { /** * @var int * - * @Column(name="id", type="integer") - * @Id - * @GeneratedValue(strategy="AUTO") + * @ORM\Column(name="id", type="integer") + * @ORM\Id + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** * @var string * - * @Column(name="title", type="string", length=255) + * @ORM\Column(name="title", type="string", length=255) */ public $name; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3042Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3042Test.php index 3e3a6fb407d..dbbbaa055de 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3042Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3042Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\Tests\OrmFunctionalTestCase; /** @@ -36,39 +37,39 @@ public function testSQLGenerationDoesNotProvokeAliasCollisions() } /** - * @Entity + * @ORM\Entity */ class DDC3042Foo { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $field; - /** @Column(type="integer") */ + /** @ORM\Column(type="integer") */ public $field1; - /** @Column(type="integer") */ + /** @ORM\Column(type="integer") */ public $field2; - /** @Column(type="integer") */ + /** @ORM\Column(type="integer") */ public $field3; - /** @Column(type="integer") */ + /** @ORM\Column(type="integer") */ public $field4; - /** @Column(type="integer") */ + /** @ORM\Column(type="integer") */ public $field5; - /** @Column(type="integer") */ + /** @ORM\Column(type="integer") */ public $field6; - /** @Column(type="integer") */ + /** @ORM\Column(type="integer") */ public $field7; - /** @Column(type="integer") */ + /** @ORM\Column(type="integer") */ public $field8; - /** @Column(type="integer") */ + /** @ORM\Column(type="integer") */ public $field9; - /** @Column(type="integer") */ + /** @ORM\Column(type="integer") */ public $field10; } /** - * @Entity + * @ORM\Entity */ class DDC3042Bar { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $field; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC309Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC309Test.php index a600ffea938..139bbc8fea6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC309Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC309Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\Tests\OrmFunctionalTestCase; class DDC309Test extends OrmFunctionalTestCase @@ -50,27 +51,27 @@ public function testTwoIterateHydrations() } /** - * @Entity + * @ORM\Entity */ class DDC309Country { /** - * @Id - * @Column(name="id", type="integer") - * @GeneratedValue + * @ORM\Id + * @ORM\Column(name="id", type="integer") + * @ORM\GeneratedValue */ public $id; } /** - * @Entity + * @ORM\Entity */ class DDC309User { /** - * @Id - * @Column(name="id", type="integer") - * @GeneratedValue + * @ORM\Id + * @ORM\Column(name="id", type="integer") + * @ORM\GeneratedValue */ public $id; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php index 251bb86519a..6b92dca6ea2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping\ClassMetadata; /** @@ -14,6 +15,8 @@ class DDC3103Test extends \Doctrine\Tests\OrmFunctionalTestCase */ public function testIssue() { + $this->markTestSkipped('Embeddables are ommitted for now'); + $classMetadata = new ClassMetadata(DDC3103ArticleId::class); $this->createAnnotationDriver()->loadMetadataForClass(DDC3103ArticleId::class, $classMetadata); @@ -31,13 +34,13 @@ public function testIssue() } /** - * @Embeddable + * @ORM\Embeddable */ class DDC3103ArticleId { /** * @var string - * @Column(name="name", type="string", length=255) + * @ORM\Column(name="name", type="string", length=255) */ protected $nameValue; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3170Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3170Test.php index b8f04126300..dbd581d4321 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3170Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3170Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\AbstractQuery; use Doctrine\ORM\Internal\Hydration\HydrationException; @@ -67,38 +68,38 @@ public function testIssue() } /** - * @Entity - * @InheritanceType("JOINED") - * @DiscriminatorColumn(name="type", type="string") - * @DiscriminatorMap({"product" = "DDC3170ProductJoined"}) + * @ORM\Entity + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorColumn(name="type", type="string") + * @ORM\DiscriminatorMap({"product" = "DDC3170ProductJoined"}) */ abstract class DDC3170AbstractEntityJoined { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; } /** - * @Entity + * @ORM\Entity */ class DDC3170ProductJoined extends DDC3170AbstractEntityJoined { } /** - * @Entity - * @InheritanceType("SINGLE_TABLE") - * @DiscriminatorColumn(name="type", type="string") - * @DiscriminatorMap({"product" = "DDC3170ProductSingleTable"}) + * @ORM\Entity + * @ORM\InheritanceType("SINGLE_TABLE") + * @ORM\DiscriminatorColumn(name="type", type="string") + * @ORM\DiscriminatorMap({"product" = "DDC3170ProductSingleTable"}) */ abstract class DDC3170AbstractEntitySingleTable { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; } /** - * @Entity + * @ORM\Entity */ class DDC3170ProductSingleTable extends DDC3170AbstractEntitySingleTable { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3192Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3192Test.php index 1b98423a622..474bb92cbd8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3192Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3192Test.php @@ -4,7 +4,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\DBAL\Platforms\AbstractPlatform; -use Doctrine\ORM\Query; +use Doctrine\ORM\Annotation as ORM; /** * @group DDC-2494 @@ -67,21 +67,21 @@ public function testIssue() } /** - * @Table(name="ddc3192_currency") - * @Entity + * @ORM\Table(name="ddc3192_currency") + * @ORM\Entity */ class DDC3192Currency { /** - * @Id - * @Column(type="ddc3192_currency_code") + * @ORM\Id + * @ORM\Column(type="ddc3192_currency_code") */ public $code; /** * @var \Doctrine\Common\Collections\Collection * - * @OneToMany(targetEntity="DDC3192Transaction", mappedBy="currency") + * @ORM\OneToMany(targetEntity="DDC3192Transaction", mappedBy="currency") */ public $transactions; @@ -92,30 +92,30 @@ public function __construct($code) } /** - * @Table(name="ddc3192_transaction") - * @Entity + * @ORM\Table(name="ddc3192_transaction") + * @ORM\Entity */ class DDC3192Transaction { /** - * @Id - * @GeneratedValue - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ public $id; /** * @var int * - * @Column(type="integer") + * @ORM\Column(type="integer") */ public $amount; /** * @var \Doctrine\Tests\ORM\Functional\Ticket\DDC3192Currency * - * @ManyToOne(targetEntity="DDC3192Currency", inversedBy="transactions") - * @JoinColumn(name="currency_id", referencedColumnName="code", nullable=false) + * @ORM\ManyToOne(targetEntity="DDC3192Currency", inversedBy="transactions") + * @ORM\JoinColumn(name="currency_id", referencedColumnName="code", nullable=false) */ public $currency; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3223Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3223Test.php index b3341540855..2c70c7b9578 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3223Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3223Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\Tests\OrmFunctionalTestCase; /** @@ -45,41 +46,41 @@ public function testIssueGetId() } } -/** @Entity @Table(name="ddc3223_journalist") */ +/** @ORM\Entity @ORM\Table(name="ddc3223_journalist") */ class Journalist extends Participant { } /** - * @Entity @Table(name="ddc3223_participant") - * @InheritanceType("JOINED") - * @DiscriminatorColumn(name="discr", type="string") - * @DiscriminatorMap({ + * @ORM\Entity @ORM\Table(name="ddc3223_participant") + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorColumn(name="discr", type="string") + * @ORM\DiscriminatorMap({ * "journalist" = "Journalist", * "participant" = "Participant", * }) */ class Participant { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; - /** @ManyToOne(targetEntity="ProfileStatus") */ + /** @ORM\ManyToOne(targetEntity="ProfileStatus") */ public $profileStatus; } /** - * @Entity @Table(name="ddc3223_status") - * @InheritanceType("SINGLE_TABLE") - * @DiscriminatorColumn(name="discr", type="string") - * @DiscriminatorMap({ + * @ORM\Entity @ORM\Table(name="ddc3223_status") + * @ORM\InheritanceType("SINGLE_TABLE") + * @ORM\DiscriminatorColumn(name="discr", type="string") + * @ORM\DiscriminatorMap({ * "profile" = "ProfileStatus", * "status" = "Status", * }) */ class Status { - /** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue(strategy="AUTO") */ private $id; public function getId() @@ -89,7 +90,7 @@ public function getId() } /** - * @Entity + * @ORM\Entity */ class ProfileStatus extends Status { diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3300Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3300Test.php index 7999dd29558..0e82315ebd5 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3300Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3300Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Tools\ResolveTargetEntityListener; /** @@ -48,17 +49,17 @@ public function testResolveTargetEntitiesChangesDiscriminatorMapValues() } /** - * @Entity - * @InheritanceType("SINGLE_TABLE") - * @DdiscriminatorColumn(name="discr", type="string") - * @DiscriminatorMap({ + * @ORM\Entity + * @ORM\InheritanceType("SINGLE_TABLE") + * @ORM\DiscriminatorColumn(name="discr", type="string") + * @ORM\DiscriminatorMap({ * "boss" = "Doctrine\Tests\ORM\Functional\Ticket\DDC3300BossInterface", * "employee" = "Doctrine\Tests\ORM\Functional\Ticket\DDC3300EmployeeInterface" * }) */ abstract class DDC3300Person { - /** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue(strategy="AUTO") */ public $id; } @@ -66,7 +67,7 @@ interface DDC3300BossInterface { } -/** @Entity */ +/** @ORM\Entity */ class DDC3300Boss extends DDC3300Person implements DDC3300BossInterface { } @@ -75,7 +76,7 @@ interface DDC3300EmployeeInterface { } -/** @Entity */ +/** @ORM\Entity */ class DDC3300Employee extends DDC3300Person implements DDC3300EmployeeInterface { } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3303Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3303Test.php index f071ef8fb1d..aa08c9651ad 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3303Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3303Test.php @@ -1,6 +1,8 @@ updated = new \DateTime; } - /** @PreUpdate */ + /** @ORM\PreUpdate */ public function doStuffOnPreUpdate() { //echo "***** PreUpdate\n"; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php index dd26cf26ee1..80d3fcdf16f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\UnitOfWork; class DDC353Test extends \Doctrine\Tests\OrmFunctionalTestCase @@ -70,20 +71,20 @@ public function testFailingCase() } /** - * @Entity + * @ORM\Entity */ class DDC353Picture { /** - * @Column(name="picture_id", type="integer") - * @Id @GeneratedValue + * @ORM\Column(name="picture_id", type="integer") + * @ORM\Id @ORM\GeneratedValue */ private $pictureId; /** - * @ManyToOne(targetEntity="DDC353File", cascade={"persist", "remove"}) - * @JoinColumns({ - * @JoinColumn(name="file_id", referencedColumnName="file_id") + * @ORM\ManyToOne(targetEntity="DDC353File", cascade={"persist", "remove"}) + * @ORM\JoinColumns({ + * @ORM\JoinColumn(name="file_id", referencedColumnName="file_id") * }) */ private $file; @@ -130,14 +131,14 @@ public function getFile() } /** - * @Entity + * @ORM\Entity */ class DDC353File { /** - * @Column(name="file_id", type="integer") - * @Id - * @GeneratedValue(strategy="AUTO") + * @ORM\Column(name="file_id", type="integer") + * @ORM\Id + * @ORM\GeneratedValue(strategy="AUTO") */ public $fileId; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3582Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3582Test.php index 07b3671a15b..d178a738c89 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3582Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3582Test.php @@ -2,12 +2,14 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; + /** * @group embedded */ class DDC3582Test extends \Doctrine\Tests\OrmFunctionalTestCase { - function testNestedEmbeddablesAreHydratedWithProperClass() + public function testNestedEmbeddablesAreHydratedWithProperClass() { $this->schemaTool->createSchema([$this->em->getClassMetadata(DDC3582Entity::class)]); $this->em->persist(new DDC3582Entity('foo')); @@ -23,13 +25,13 @@ function testNestedEmbeddablesAreHydratedWithProperClass() } } -/** @Entity */ +/** @ORM\Entity */ class DDC3582Entity { - /** @Column @Id */ + /** @ORM\Column @ORM\Id */ private $id; - /** @Embedded(class="DDC3582Embeddable1") @var DDC3582Embeddable1 */ + /** @ORM\Embedded(class="DDC3582Embeddable1") @var DDC3582Embeddable1 */ public $embeddable1; public function __construct($id) @@ -39,27 +41,27 @@ public function __construct($id) } } -/** @Embeddable */ +/** @ORM\Embeddable */ class DDC3582Embeddable1 { - /** @Embedded(class="DDC3582Embeddable2") @var DDC3582Embeddable2 */ + /** @ORM\Embedded(class="DDC3582Embeddable2") @var DDC3582Embeddable2 */ public $embeddable2; public function __construct() { $this->embeddable2 = new DDC3582Embeddable2(); } } -/** @Embeddable */ +/** @ORM\Embeddable */ class DDC3582Embeddable2 { - /** @Embedded(class="DDC3582Embeddable3") @var DDC3582Embeddable3 */ + /** @ORM\Embedded(class="DDC3582Embeddable3") @var DDC3582Embeddable3 */ public $embeddable3; public function __construct() { $this->embeddable3 = new DDC3582Embeddable3(); } } -/** @Embeddable */ +/** @ORM\Embeddable */ class DDC3582Embeddable3 { - /** @Column */ + /** @ORM\Column */ public $embeddedValue = 'foo'; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php index d522c25631f..f8aa76238e6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php @@ -4,6 +4,7 @@ use Doctrine\DBAL\Cache\QueryCacheProfile; use Doctrine\DBAL\Connection; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\EntityManager; use Doctrine\ORM\Tools\ToolsException; use Doctrine\Tests\OrmFunctionalTestCase; @@ -72,28 +73,28 @@ public function testSavesIntegerAutoGeneratedValueAsStringWithJoinedInheritance( } } -/** @Entity */ +/** @ORM\Entity */ class DDC3634Entity { - /** @Id @Column(type="bigint") @GeneratedValue(strategy="AUTO") */ + /** @ORM\Id @ORM\Column(type="bigint") @ORM\GeneratedValue(strategy="AUTO") */ public $id; } /** - * @Entity - * @InheritanceType("JOINED") - * @DiscriminatorMap({ + * @ORM\Entity + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorMap({ * DDC3634JTIBaseEntity::class = DDC3634JTIBaseEntity::class, * DDC3634JTIChildEntity::class = DDC3634JTIChildEntity::class, * }) */ class DDC3634JTIBaseEntity { - /** @Id @Column(type="bigint") @GeneratedValue(strategy="AUTO") */ + /** @ORM\Id @ORM\Column(type="bigint") @ORM\GeneratedValue(strategy="AUTO") */ public $id; } -/** @Entity */ +/** @ORM\Entity */ class DDC3634JTIChildEntity extends DDC3634JTIBaseEntity { } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3644Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3644Test.php index 5a41581c948..b72ec5f6661 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3644Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3644Test.php @@ -4,7 +4,7 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; -use Doctrine\ORM\Mapping\JoinColumn; +use Doctrine\ORM\Annotation as ORM; use Doctrine\Tests\OrmFunctionalTestCase; /** @@ -130,29 +130,29 @@ public function testIssueWithJoinedEntity() } /** - * @Entity + * @ORM\Entity */ class DDC3644User { /** - * @Id - * @GeneratedValue - * @Column(type="integer", name="hash_id") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer", name="hash_id") */ public $id; /** - * @Column(type="string") + * @ORM\Column(type="string") */ public $name; /** - * @OneToMany(targetEntity="DDC3644Address", mappedBy="user", orphanRemoval=true) + * @ORM\OneToMany(targetEntity="DDC3644Address", mappedBy="user", orphanRemoval=true) */ public $addresses = []; /** - * @OneToMany(targetEntity="DDC3644Pet", mappedBy="owner", orphanRemoval=true) + * @ORM\OneToMany(targetEntity="DDC3644Pet", mappedBy="owner", orphanRemoval=true) */ public $pets = []; @@ -180,25 +180,25 @@ public function setPets(Collection $pets) } /** - * @Entity + * @ORM\Entity */ class DDC3644Address { /** - * @Id - * @GeneratedValue - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ public $id; /** - * @ManyToOne(targetEntity="DDC3644User", inversedBy="addresses") - * @JoinColumn(referencedColumnName="hash_id") + * @ORM\ManyToOne(targetEntity="DDC3644User", inversedBy="addresses") + * @ORM\JoinColumn(referencedColumnName="hash_id") */ public $user; /** - * @Column(type="string") + * @ORM\Column(type="string") */ public $address; @@ -209,22 +209,22 @@ public function __construct($address) } /** - * @Entity - * @InheritanceType("JOINED") - * @DiscriminatorColumn(name="discriminator", type="string") - * @DiscriminatorMap({"pet" = "DDC3644Pet"}) + * @ORM\Entity + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorColumn(name="discriminator", type="string") + * @ORM\DiscriminatorMap({"pet" = "DDC3644Pet"}) */ abstract class DDC3644Animal { /** - * @Id - * @GeneratedValue - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer") */ public $id; /** - * @Column(type="string") + * @ORM\Column(type="string") */ public $name; @@ -235,13 +235,13 @@ public function __construct($name) } /** - * @Entity + * @ORM\Entity */ class DDC3644Pet extends DDC3644Animal { /** - * @ManyToOne(targetEntity="DDC3644User", inversedBy="pets") - * @JoinColumn(referencedColumnName="hash_id") + * @ORM\ManyToOne(targetEntity="DDC3644User", inversedBy="pets") + * @ORM\JoinColumn(referencedColumnName="hash_id") */ public $owner; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC371Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC371Test.php index a339367ace8..20942a8ea89 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC371Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC371Test.php @@ -1,6 +1,8 @@ em->persist($asset); $this->em->flush(); - self::assertNull($this->_em->find(DDC3785_Attribute::class, $idToBeRemoved)); - self::assertNotNull($this->_em->find(DDC3785_Attribute::class, $attribute2->id)); + self::assertNull($this->em->find(DDC3785_Attribute::class, $idToBeRemoved)); + self::assertNotNull($this->em->find(DDC3785_Attribute::class, $attribute2->id)); } } /** - * @Entity - * @Table(name="asset") + * @ORM\Entity + * @ORM\Table(name="asset") */ class DDC3785_Asset { /** - * @Id @GeneratedValue(strategy="NONE") @Column(type="ddc3785_asset_id") + * @ORM\Id @ORM\GeneratedValue(strategy="NONE") @ORM\Column(type="ddc3785_asset_id") */ private $id; /** - * @ManyToMany(targetEntity="DDC3785_Attribute", cascade={"persist"}, orphanRemoval=true) - * @JoinTable(name="asset_attributes", - * joinColumns={@JoinColumn(name="asset_id", referencedColumnName="id")}, - * inverseJoinColumns={@JoinColumn(name="attribute_id", referencedColumnName="id")} - * ) - **/ + * @ORM\ManyToMany(targetEntity="DDC3785_Attribute", cascade={"persist"}, orphanRemoval=true) + * @ORM\JoinTable( + * name="asset_attributes", + * joinColumns={@ORM\JoinColumn(name="asset_id", referencedColumnName="id")}, + * inverseJoinColumns={@ORM\JoinColumn(name="attribute_id", referencedColumnName="id")} + * ) + */ private $attributes; public function __construct(DDC3785_AssetId $id, $attributes = []) @@ -96,22 +98,22 @@ public function getAttributes() } /** - * @Entity - * @Table(name="attribute") + * @ORM\Entity + * @ORM\Table(name="attribute") */ class DDC3785_Attribute { - /** - * @Id @Column(type="integer") - * @GeneratedValue + /** + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue */ public $id; - /** @Column(type = "string") */ - private $name; + /** @ORM\Column(type = "string") */ + private $name; - /** @Column(type = "string") */ - private $value; + /** @ORM\Column(type = "string") */ + private $value; public function __construct($name, $value) { @@ -120,10 +122,10 @@ public function __construct($name, $value) } } -/** @Embeddable */ +/** @ORM\Embeddable */ class DDC3785_AssetId { - /** @Column(type = "guid") */ + /** @ORM\Column(type = "guid") */ private $id; public function __construct($id) diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC381Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC381Test.php index 65873c4dba6..f24f3469f8e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC381Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC381Test.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; + class DDC381Test extends \Doctrine\Tests\OrmFunctionalTestCase { protected function setUp() @@ -41,12 +43,12 @@ public function testCallUnserializedProxyMethods() } /** - * @Entity + * @ORM\Entity */ class DDC381Entity { /** - * @Id @Column(type="integer") @GeneratedValue + * @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ protected $id; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC422Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC422Test.php index e8a015da8c7..34b1a77f7a3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC422Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC422Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\PersistentCollection; class DDC422Test extends \Doctrine\Tests\OrmFunctionalTestCase @@ -44,23 +45,23 @@ public function testIssue() } /** - * @Entity - * @InheritanceType("JOINED") - * @DiscriminatorColumn(name="discr", type="string") - * @DiscriminatorMap({"guest" = "DDC422Guest", "customer" = "DDC422Customer"}) + * @ORM\Entity + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorColumn(name="discr", type="string") + * @ORM\DiscriminatorMap({"guest" = "DDC422Guest", "customer" = "DDC422Customer"}) */ class DDC422Guest { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; } -/** @Entity */ +/** @ORM\Entity */ class DDC422Customer extends DDC422Guest { /** - * @ManyToMany(targetEntity="DDC422Contact", cascade={"persist","remove"}) - * @JoinTable(name="ddc422_customers_contacts", - * joinColumns={@JoinColumn(name="customer_id", referencedColumnName="id", onDelete="cascade" )}, - * inverseJoinColumns={@JoinColumn(name="contact_id", referencedColumnName="id", onDelete="cascade" )} + * @ORM\ManyToMany(targetEntity="DDC422Contact", cascade={"persist","remove"}) + * @ORM\JoinTable(name="ddc422_customers_contacts", + * joinColumns={@ORM\JoinColumn(name="customer_id", referencedColumnName="id", onDelete="cascade" )}, + * inverseJoinColumns={@ORM\JoinColumn(name="contact_id", referencedColumnName="id", onDelete="cascade" )} * ) */ public $contacts; @@ -70,9 +71,9 @@ public function __construct() { } } -/** @Entity */ +/** @ORM\Entity */ class DDC422Contact { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC425Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC425Test.php index de4ba453017..6b1d675a11d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC425Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC425Test.php @@ -1,7 +1,9 @@ id; } } /** - * @Entity - * @Table(name="groups") + * @ORM\Entity + * @ORM\Table(name="groups") */ class DDC719Group extends Entity { - /** @Column(type="string", nullable=false) */ + /** @ORM\Column(type="string", nullable=false) */ protected $name; - /** @Column(type="string", nullable=true) */ + /** @ORM\Column(type="string", nullable=true) */ protected $description; /** - * @ManyToMany(targetEntity="DDC719Group", inversedBy="parents") - * @JoinTable(name="groups_groups", - * joinColumns={@JoinColumn(name="parent_id", referencedColumnName="id")}, - * inverseJoinColumns={@JoinColumn(name="child_id", referencedColumnName="id")} + * @ORM\ManyToMany(targetEntity="DDC719Group", inversedBy="parents") + * @ORM\JoinTable(name="groups_groups", + * joinColumns={@ORM\JoinColumn(name="parent_id", referencedColumnName="id")}, + * inverseJoinColumns={@ORM\JoinColumn(name="child_id", referencedColumnName="id")} * ) */ protected $children = NULL; /** - * @ManyToMany(targetEntity="DDC719Group", mappedBy="children") + * @ORM\ManyToMany(targetEntity="DDC719Group", mappedBy="children") */ protected $parents = NULL; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC729Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC729Test.php index e587cc839dc..e344a63502f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC729Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC729Test.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\PersistentCollection; class DDC729Test extends \Doctrine\Tests\OrmFunctionalTestCase @@ -151,14 +152,14 @@ public function testBidirectionalMultiMergeManyToMany() } /** - * @Entity + * @ORM\Entity */ class DDC729A { - /** @Id @GeneratedValue @Column(type="integer") */ + /** @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") */ public $id; - /** @ManyToMany(targetEntity="DDC729B", inversedBy="related") */ + /** @ORM\ManyToMany(targetEntity="DDC729B", inversedBy="related") */ public $related; public function __construct() @@ -168,14 +169,14 @@ public function __construct() } /** - * @Entity + * @ORM\Entity */ class DDC729B { - /** @Id @GeneratedValue @Column(type="integer") */ + /** @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") */ public $id; - /** @ManyToMany(targetEntity="DDC729B", mappedBy="related") */ + /** @ORM\ManyToMany(targetEntity="DDC729B", mappedBy="related") */ public $related; public function __construct() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC735Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC735Test.php index 9ee7cb495e0..0dee5a4b74c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC735Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC735Test.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; class DDC735Test extends \Doctrine\Tests\OrmFunctionalTestCase { @@ -54,17 +55,17 @@ public function testRemoveElement_AppliesOrphanRemoval() } /** - * @Entity + * @ORM\Entity */ class DDC735Product { /** - * @Id @Column(type="integer") @GeneratedValue + * @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ protected $id; /** - * @OneToMany( + * @ORM\OneToMany( * targetEntity="DDC735Review", * mappedBy="product", * cascade={"persist"}, @@ -95,17 +96,17 @@ public function removeReview(DDC735Review $review) } /** - * @Entity + * @ORM\Entity */ class DDC735Review { /** - * @Id @Column(type="integer") @GeneratedValue + * @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ protected $id; /** - * @ManyToOne(targetEntity="DDC735Product", inversedBy="reviews") + * @ORM\ManyToOne(targetEntity="DDC735Product", inversedBy="reviews") */ protected $product; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC742Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC742Test.php index 815cd10c5c3..db222dd9008 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC742Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC742Test.php @@ -4,6 +4,7 @@ use Doctrine\Common\Cache\FilesystemCache; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** * @group non-cacheable @@ -74,33 +75,33 @@ public function testIssue() } /** - * @Entity - * @Table(name="ddc742_users") + * @ORM\Entity + * @ORM\Table(name="ddc742_users") */ class DDC742User { /** * User Id * - * @Id - * @GeneratedValue(strategy="AUTO") - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue(strategy="AUTO") + * @ORM\Column(type="integer") * @var int */ public $id; /** - * @Column(length=100, type="string") + * @ORM\Column(length=100, type="string") * @var string */ public $title; /** - * @ManyToMany(targetEntity="DDC742Comment", cascade={"persist"}, fetch="EAGER") - * @JoinTable( + * @ORM\ManyToMany(targetEntity="DDC742Comment", cascade={"persist"}, fetch="EAGER") + * @ORM\JoinTable( * name="user_comments", - * joinColumns={@JoinColumn(name="user_id",referencedColumnName="id")}, - * inverseJoinColumns={@JoinColumn(name="comment_id", referencedColumnName="id")} + * joinColumns={@ORM\JoinColumn(name="user_id",referencedColumnName="id")}, + * inverseJoinColumns={@ORM\JoinColumn(name="comment_id", referencedColumnName="id")} * ) * * @var \Doctrine\ORM\PersistentCollection @@ -109,23 +110,23 @@ class DDC742User } /** - * @Entity - * @Table(name="ddc742_comments") + * @ORM\Entity + * @ORM\Table(name="ddc742_comments") */ class DDC742Comment { /** * User Id * - * @Id - * @GeneratedValue(strategy="AUTO") - * @Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue(strategy="AUTO") + * @ORM\Column(type="integer") * @var int */ public $id; /** - * @Column(length=100, type="string") + * @ORM\Column(length=100, type="string") * @var string */ public $content; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC809Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC809Test.php index 4644fbc9628..137014a243a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC809Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC809Test.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; + class DDC809Test extends \Doctrine\Tests\OrmFunctionalTestCase { public function setUp() @@ -54,25 +56,25 @@ public function testIssue() } /** - * @Table(name="variant_test") - * @Entity + * @ORM\Table(name="variant_test") + * @ORM\Entity */ class DDC809Variant { /** - * @Column(name="variant_id", type="integer") - * @Id + * @ORM\Column(name="variant_id", type="integer") + * @ORM\Id */ protected $variantId; /** - * @ManyToMany(targetEntity="DDC809SpecificationValue", inversedBy="Variants") - * @JoinTable(name="var_spec_value_test", + * @ORM\ManyToMany(targetEntity="DDC809SpecificationValue", inversedBy="Variants") + * @ORM\JoinTable(name="var_spec_value_test", * joinColumns={ - * @JoinColumn(name="variant_id", referencedColumnName="variant_id") + * @ORM\JoinColumn(name="variant_id", referencedColumnName="variant_id") * }, * inverseJoinColumns={ - * @JoinColumn(name="specification_value_id", referencedColumnName="specification_value_id") + * @ORM\JoinColumn(name="specification_value_id", referencedColumnName="specification_value_id") * } * ) */ @@ -85,21 +87,21 @@ public function getSpecificationValues() } /** - * @Table(name="specification_value_test") - * @Entity + * @ORM\Table(name="specification_value_test") + * @ORM\Entity */ class DDC809SpecificationValue { /** - * @Column(name="specification_value_id", type="integer") - * @Id + * @ORM\Column(name="specification_value_id", type="integer") + * @ORM\Id */ protected $specificationValueId; /** - * @var Variant + * @var DDC809Variant * - * @ManyToMany(targetEntity="DDC809Variant", mappedBy="SpecificationValues") + * @ORM\ManyToMany(targetEntity="DDC809Variant", mappedBy="SpecificationValues") */ protected $Variants; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php index 641f72cca09..c9764d3dd30 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; + class DDC832Test extends \Doctrine\Tests\OrmFunctionalTestCase { public function setUp() @@ -144,22 +146,22 @@ public function testQuotedTableJoinedChildRemove() } /** - * @Entity - * @Table(name="LIKE") + * @ORM\Entity + * @ORM\Table(name="LIKE") */ class DDC832Like { /** - * @Id @Column(type="integer") @GeneratedValue + * @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ public $word; /** - * @version - * @Column(type="integer") + * @ORM\Version + * @ORM\Column(type="integer") */ public $version; @@ -170,25 +172,25 @@ public function __construct($word) } /** - * @Entity - * @Table(name="INDEX") - * @InheritanceType("JOINED") - * @DiscriminatorColumn(name="discr", type="string") - * @DiscriminatorMap({"like" = "DDC832JoinedIndex", "fuzzy" = "DDC832JoinedTreeIndex"}) + * @ORM\Entity + * @ORM\Table(name="INDEX") + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorColumn(name="discr", type="string") + * @ORM\DiscriminatorMap({"like" = "DDC832JoinedIndex", "fuzzy" = "DDC832JoinedTreeIndex"}) */ class DDC832JoinedIndex { /** - * @Id @Column(type="integer") @GeneratedValue + * @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ public $name; /** - * @version - * @Column(type="integer") + * @ORM\Version + * @ORM\Column(type="integer") */ public $version; @@ -199,15 +201,15 @@ public function __construct($name) } /** - * @Entity - * @Table(name="TREE_INDEX") + * @ORM\Entity + * @ORM\Table(name="TREE_INDEX") */ class DDC832JoinedTreeIndex extends DDC832JoinedIndex { - /** @Column(type="integer") */ + /** @ORM\Column(type="integer") */ public $lft; - /** @Column(type="integer") */ + /** @ORM\Column(type="integer") */ public $rgt; public function __construct($name, $lft, $rgt) diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC837Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC837Test.php index 0e9538fce6e..7d3cf4e0a4a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC837Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC837Test.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; + class DDC837Test extends \Doctrine\Tests\OrmFunctionalTestCase { protected function setUp() @@ -91,64 +93,64 @@ public function testIssue() } /** - * @Entity - * @Table(name="DDC837Super") - * @InheritanceType("JOINED") - * @DiscriminatorColumn(name="type", type="string") - * @DiscriminatorMap({"class1" = "DDC837Class1", "class2" = "DDC837Class2", "class3"="DDC837Class3"}) + * @ORM\Entity + * @ORM\Table(name="DDC837Super") + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorColumn(name="type", type="string") + * @ORM\DiscriminatorMap({"class1" = "DDC837Class1", "class2" = "DDC837Class2", "class3"="DDC837Class3"}) */ abstract class DDC837Super { /** - * @Id @Column(name="id", type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id @ORM\Column(name="id", type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; } /** - * @Entity + * @ORM\Entity */ class DDC837Class1 extends DDC837Super { /** - * @Column(name="title", type="string", length=150) + * @ORM\Column(name="title", type="string", length=150) */ public $title; /** - * @Column(name="content", type="string", length=500) + * @ORM\Column(name="content", type="string", length=500) */ public $description; /** - * @OneToOne(targetEntity="DDC837Aggregate") + * @ORM\OneToOne(targetEntity="DDC837Aggregate") */ public $aggregate; } /** - * @Entity + * @ORM\Entity */ class DDC837Class2 extends DDC837Super { /** - * @Column(name="title", type="string", length=150) + * @ORM\Column(name="title", type="string", length=150) */ public $title; /** - * @Column(name="content", type="string", length=500) + * @ORM\Column(name="content", type="string", length=500) */ public $description; /** - * @Column(name="text", type="text") + * @ORM\Column(name="text", type="text") */ public $text; /** - * @OneToOne(targetEntity="DDC837Aggregate") + * @ORM\OneToOne(targetEntity="DDC837Aggregate") */ public $aggregate; } @@ -156,34 +158,34 @@ class DDC837Class2 extends DDC837Super /** * An extra class to demonstrate why title and description aren't in Super * - * @Entity + * @ORM\Entity */ class DDC837Class3 extends DDC837Super { /** - * @Column(name="title", type="string", length=150) + * @ORM\Column(name="title", type="string", length=150) */ public $apples; /** - * @Column(name="content", type="string", length=500) + * @ORM\Column(name="content", type="string", length=500) */ public $bananas; } /** - * @Entity + * @ORM\Entity */ class DDC837Aggregate { /** - * @Id @Column(name="id", type="integer") - * @GeneratedValue + * @ORM\Id @ORM\Column(name="id", type="integer") + * @ORM\GeneratedValue */ public $id; /** - * @Column(name="sysname", type="string") + * @ORM\Column(name="sysname", type="string") */ protected $sysname; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC881Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC881Test.php index 3430facecbf..eccd2327422 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC881Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC881Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\Proxy\Proxy; @@ -98,23 +99,24 @@ public function testIssue() } /** - * @Entity + * @ORM\Entity */ class DDC881User { - /** - * @Id - * @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; + /** - * @Column(type="string") + * @ORM\Column(type="string") */ private $name; + /** - * @OneToMany(targetEntity="DDC881PhoneNumber",mappedBy="id") + * @ORM\OneToMany(targetEntity="DDC881PhoneNumber",mappedBy="id") */ private $phoneNumbers; @@ -130,28 +132,27 @@ public function setName($name) } /** - * @Entity + * @ORM\Entity */ class DDC881PhoneNumber { - /** - * @Id - * @Column(type="integer") + * @ORM\Id + * @ORM\Column(type="integer") */ private $id; /** - * @Id - * @ManyToOne(targetEntity="DDC881User",cascade={"all"}) + * @ORM\Id + * @ORM\ManyToOne(targetEntity="DDC881User",cascade={"all"}) */ private $user; /** - * @Column(type="string") + * @ORM\Column(type="string") */ private $phonenumber; /** - * @OneToMany(targetEntity="DDC881PhoneCall", mappedBy="phonenumber") + * @ORM\OneToMany(targetEntity="DDC881PhoneCall", mappedBy="phonenumber") */ private $calls; @@ -182,27 +183,26 @@ public function getCalls() } /** - * @Entity + * @ORM\Entity */ class DDC881PhoneCall { - /** - * @Id - * @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** - * @ManyToOne(targetEntity="DDC881PhoneNumber", inversedBy="calls", cascade={"all"}) - * @JoinColumns({ - * @JoinColumn(name="phonenumber_id", referencedColumnName="id"), - * @JoinColumn(name="user_id", referencedColumnName="user_id") + * @ORM\ManyToOne(targetEntity="DDC881PhoneNumber", inversedBy="calls", cascade={"all"}) + * @ORM\JoinColumns({ + * @ORM\JoinColumn(name="phonenumber_id", referencedColumnName="id"), + * @ORM\JoinColumn(name="user_id", referencedColumnName="user_id") * }) */ private $phonenumber; /** - * @Column(type="string",nullable=true) + * @ORM\Column(type="string",nullable=true) */ private $callDate; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC960Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC960Test.php index e4bed6e269c..f0529b1584c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC960Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC960Test.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Annotation as ORM; use Doctrine\Tests\OrmFunctionalTestCase; class DDC960Test extends OrmFunctionalTestCase @@ -39,9 +40,9 @@ public function testUpdateRootVersion() } /** - * @Entity - * @InheritanceType("JOINED") - * @DiscriminatorMap({ + * @ORM\Entity + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorMap({ * "root" = "DDC960Root", * "child" = "DDC960Child" * }) @@ -49,12 +50,12 @@ public function testUpdateRootVersion() class DDC960Root { /** - * @Id @GeneratedValue @Column(type="integer") + * @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") */ private $id; /** - * @Column(type="integer") @Version + * @ORM\Column(type="integer") @ORM\Version */ private $version; @@ -70,12 +71,12 @@ public function getVersion() } /** - * @Entity + * @ORM\Entity */ class DDC960Child extends DDC960Root { /** - * @column(type="string") + * @ORM\Column(type="string") * @var string */ private $name; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC992Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC992Test.php index e8d79d966d1..74c12a98566 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC992Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC992Test.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** * @group DDC-992 @@ -83,22 +84,22 @@ public function testOneToManyChild() } /** - * @Entity - * @InheritanceType("JOINED") - * @DiscriminatorMap({"child" = "DDC992Child", "parent" = "DDC992Parent"}) + * @ORM\Entity + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorMap({"child" = "DDC992Child", "parent" = "DDC992Parent"}) */ class DDC992Parent { - /** @Id @GeneratedValue @Column(type="integer") */ + /** @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") */ public $id; - /** @ManyToOne(targetEntity="DDC992Parent", inversedBy="childs") */ + /** @ORM\ManyToOne(targetEntity="DDC992Parent", inversedBy="childs") */ public $parent; - /** @OneToMany(targetEntity="DDC992Child", mappedBy="parent") */ + /** @ORM\OneToMany(targetEntity="DDC992Child", mappedBy="parent") */ public $childs; } /** - * @Entity + * @ORM\Entity */ class DDC992Child extends DDC992Parent { @@ -109,7 +110,7 @@ public function childs() } /** - * @Entity + * @ORM\Entity */ class DDC992Role { @@ -119,23 +120,23 @@ public function getRoleID() } /** - * @Id @Column(name="roleID", type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id @ORM\Column(name="roleID", type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $roleID; /** - * @Column (name="name", type="string", length=45) + * @ORM\Column (name="name", type="string", length=45) */ public $name; /** - * @ManyToMany (targetEntity="DDC992Role", mappedBy="extends") + * @ORM\ManyToMany (targetEntity="DDC992Role", mappedBy="extends") */ public $extendedBy; /** - * @ManyToMany (targetEntity="DDC992Role", inversedBy="extendedBy") - * @JoinTable (name="RoleRelations", - * joinColumns={@JoinColumn(name="roleID", referencedColumnName="roleID")}, - * inverseJoinColumns={@JoinColumn(name="extendsRoleID", referencedColumnName="roleID")} + * @ORM\ManyToMany (targetEntity="DDC992Role", inversedBy="extendedBy") + * @ORM\JoinTable (name="RoleRelations", + * joinColumns={@ORM\JoinColumn(name="roleID", referencedColumnName="roleID")}, + * inverseJoinColumns={@ORM\JoinColumn(name="extendsRoleID", referencedColumnName="roleID")} * ) */ public $extends; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5562Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5562Test.php index 84b59ba23fb..1ba1a58c62c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5562Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5562Test.php @@ -1,10 +1,8 @@ initializeReflection(new RuntimeReflectionService()); $annotationDriver = $this->loadDriver(); - $annotationDriver->loadMetadataForClass(Annotation\InvalidColumn::class, $cm); + $annotationDriver->loadMetadataForClass(ColumnWithoutType::class, $cm); self::assertNotNull($cm->getProperty('id')); @@ -192,10 +192,10 @@ public function testInvalidMappedSuperClassWithInheritanceInformation() $this->expectException(MappingException::class); $this->expectExceptionMessage( "It is not supported to define inheritance information on a mapped " . - "superclass '" . MappedSuperClassInheritence::class . "'." + "superclass '" . MappedSuperClassInheritance::class . "'." ); - $usingInvalidMsc = $factory->getMetadataFor(MappedSuperClassInheritence::class); + $usingInvalidMsc = $factory->getMetadataFor(MappedSuperClassInheritance::class); } /** @@ -273,61 +273,61 @@ public function testAttributeOverridesMappingWithTrait() } /** - * @Entity - */ -class ColumnWithoutType -{ - /** @Id @Column */ - public $id; -} - -/** - * @MappedSuperclass + * @ORM\MappedSuperclass */ class InvalidMappedSuperClass { /** - * @ManyToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", mappedBy="invalid") + * @ORM\ManyToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", mappedBy="invalid") */ private $users; } /** - * @Entity + * @ORM\Entity */ class UsingInvalidMappedSuperClass extends InvalidMappedSuperClass { /** - * @Id @Column(type="integer") @GeneratedValue + * @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ private $id; } /** - * @MappedSuperclass - * @InheritanceType("JOINED") - * @DiscriminatorMap({"test" = "ColumnWithoutType"}) + * @ORM\MappedSuperclass + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorMap({"test" = "ColumnWithoutType"}) */ -class MappedSuperClassInheritence +class MappedSuperClassInheritance { } /** - * @Entity - * @InheritanceType("JOINED") - * @DiscriminatorMap({"parent" = "AnnotationParent", "child" = "AnnotationChild"}) - * @HasLifecycleCallbacks + * @ORM\Entity + */ +class ColumnWithoutType extends MappedSuperClassInheritance +{ + /** @ORM\Id @ORM\Column */ + public $id; +} + +/** + * @ORM\Entity + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorMap({"parent" = "AnnotationParent", "child" = "AnnotationChild"}) + * @ORM\HasLifecycleCallbacks */ class AnnotationParent { /** - * @Id @Column(type="integer") @GeneratedValue + * @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ private $id; /** - * @PostLoad + * @ORM\PostLoad */ public function postLoad() { @@ -335,7 +335,7 @@ public function postLoad() } /** - * @PreUpdate + * @ORM\PreUpdate */ public function preUpdate() { @@ -344,8 +344,8 @@ public function preUpdate() } /** - * @Entity - * @HasLifecycleCallbacks + * @ORM\Entity + * @ORM\HasLifecycleCallbacks */ class AnnotationChild extends AnnotationParent { @@ -353,66 +353,66 @@ class AnnotationChild extends AnnotationParent } /** - * @Entity - * @InheritanceType("SINGLE_TABLE") - * @DiscriminatorMap({"s"="SuperEntity", "c"="ChildEntity"}) + * @ORM\Entity + * @ORM\InheritanceType("SINGLE_TABLE") + * @ORM\DiscriminatorMap({"s"="SuperEntity", "c"="ChildEntity"}) */ class SuperEntity { - /** @Id @Column(type="string") */ + /** @ORM\Id @ORM\Column(type="string") */ private $id; } /** - * @MappedSuperclass + * @ORM\MappedSuperclass */ class MiddleMappedSuperclass extends SuperEntity { - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ private $name; } /** - * @Entity + * @ORM\Entity */ class ChildEntity extends MiddleMappedSuperclass { /** - * @Column(type="string") + * @ORM\Column(type="string") */ private $text; } /** - * @Entity + * @ORM\Entity */ class InvalidFetchOption { /** - * @OneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", fetch="eager") + * @ORM\OneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", fetch="eager") */ private $collection; } /** - * @Entity - * @Cache + * @ORM\Entity + * @ORM\Cache */ class AnnotationSLC { /** - * @Id - * @ManyToOne(targetEntity="AnnotationSLCFoo") + * @ORM\Id + * @ORM\ManyToOne(targetEntity="AnnotationSLCFoo") */ public $foo; } /** - * @Entity + * @ORM\Entity */ class AnnotationSLCFoo { /** - * @Column(type="string") + * @ORM\Column(type="string") */ public $id; } diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index 9a201a9ab55..b077463db65 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Mapping; use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\EntityRepository; use Doctrine\ORM\Sequencing\SequenceGenerator; use Doctrine\ORM\Mapping\ClassMetadataFactory; @@ -223,66 +224,66 @@ class TransientBaseClass { private $transient2; } -/** @Entity */ +/** @ORM\Entity */ class EntitySubClass extends TransientBaseClass { - /** @Id @Column(type="integer") */ + /** @ORM\Id @ORM\Column(type="integer") */ private $id; - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ private $name; } -/** @MappedSuperclass */ +/** @ORM\MappedSuperclass */ class MappedSuperclassBase { - /** @Column(type="integer") */ + /** @ORM\Column(type="integer") */ private $mapped1; - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ private $mapped2; /** - * @OneToOne(targetEntity="MappedSuperclassRelated1") - * @JoinColumn(name="related1_id", referencedColumnName="id") + * @ORM\OneToOne(targetEntity="MappedSuperclassRelated1") + * @ORM\JoinColumn(name="related1_id", referencedColumnName="id") */ private $mappedRelated1; private $transient; } class MappedSuperclassRelated1 {} -/** @Entity */ +/** @ORM\Entity */ class EntitySubClass2 extends MappedSuperclassBase { - /** @Id @Column(type="integer") */ + /** @ORM\Id @ORM\Column(type="integer") */ private $id; - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ private $name; } /** - * @MappedSuperclass - * @Table( - * uniqueConstraints={@UniqueConstraint(name="IDX_MAPPED1_INDEX",columns={"mapped1"})}, - * indexes={@Index(name="IDX_MAPPED2_INDEX", columns={"mapped2"})} + * @ORM\MappedSuperclass + * @ORM\Table( + * uniqueConstraints={@ORM\UniqueConstraint(name="IDX_MAPPED1_INDEX",columns={"mapped1"})}, + * indexes={@ORM\Index(name="IDX_MAPPED2_INDEX", columns={"mapped2"})} * ) */ class MappedSuperclassBaseIndex { - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ private $mapped1; - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ private $mapped2; } -/** @Entity @Table(uniqueConstraints={@UniqueConstraint(name="IDX_NAME_INDEX",columns={"name"})}) */ +/** @ORM\Entity @ORM\Table(uniqueConstraints={@ORM\UniqueConstraint(name="IDX_NAME_INDEX",columns={"name"})}) */ class EntityIndexSubClass extends MappedSuperclassBaseIndex { - /** @Id @Column(type="integer") */ + /** @ORM\Id @ORM\Column(type="integer") */ private $id; - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ private $name; } /** - * @Entity - * @InheritanceType("SINGLE_TABLE") - * @DiscriminatorColumn(name="type", type="string", length=20) - * @DiscriminatorMap({ + * @ORM\Entity + * @ORM\InheritanceType("SINGLE_TABLE") + * @ORM\DiscriminatorColumn(name="type", type="string", length=20) + * @ORM\DiscriminatorMap({ * "c" = "HierarchyC", * "d" = "HierarchyD", * "e" = "HierarchyE" @@ -291,74 +292,74 @@ class EntityIndexSubClass extends MappedSuperclassBaseIndex abstract class HierarchyBase { /** - * @Column(type="integer") @Id @GeneratedValue(strategy="SEQUENCE") - * @SequenceGenerator(sequenceName="foo") + * @ORM\Column(type="integer") @ORM\Id @ORM\GeneratedValue(strategy="SEQUENCE") + * @ORM\SequenceGenerator(sequenceName="foo") * @var int */ public $id; } -/** @MappedSuperclass */ +/** @ORM\MappedSuperclass */ abstract class HierarchyASuperclass extends HierarchyBase { - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ public $a; } -/** @Entity */ +/** @ORM\Entity */ class HierarchyBEntity extends HierarchyBase { - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ public $b; } -/** @Entity */ +/** @ORM\Entity */ class HierarchyC extends HierarchyBase { - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ public $c; } -/** @Entity */ +/** @ORM\Entity */ class HierarchyD extends HierarchyASuperclass { - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ public $d; } -/** @Entity */ +/** @ORM\Entity */ class HierarchyE extends HierarchyBEntity { - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ public $e; } -/** @Entity */ +/** @ORM\Entity */ class SuperclassEntity extends SuperclassBase { } -/** @MappedSuperclass */ +/** @ORM\MappedSuperclass */ abstract class SuperclassBase { /** - * @Column(type="integer") @Id @GeneratedValue(strategy="SEQUENCE") - * @SequenceGenerator(sequenceName="foo") + * @ORM\Column(type="integer") @ORM\Id @ORM\GeneratedValue(strategy="SEQUENCE") + * @ORM\SequenceGenerator(sequenceName="foo") */ public $id; } -/** @MappedSuperclass */ +/** @ORM\MappedSuperclass */ abstract class MediumSuperclassBase extends SuperclassBase { } -/** @Entity */ +/** @ORM\Entity */ class MediumSuperclassEntity extends MediumSuperclassBase { } -/** @Entity(repositoryClass = "Doctrine\ORM\EntityRepository") */ +/** @ORM\Entity(repositoryClass = "Doctrine\ORM\EntityRepository") */ class SubclassWithRepository extends DDC869Payment { } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 523b80c0fde..c394c16e1a3 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -6,8 +6,8 @@ use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\DBAL\Connection; -use Doctrine\ORM\Configuration; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManager; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs; diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php index 2aa6f33d404..157e1fb6169 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Mapping; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Event\LoadClassMetadataEventArgs; use Doctrine\ORM\Events; use Doctrine\ORM\Mapping; @@ -41,18 +42,18 @@ public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs) } /** - * @Entity - * @Table(name="load_event_test_entity") + * @ORM\Entity + * @ORM\Table(name="load_event_test_entity") */ class LoadEventTestEntity { /** - * @Id @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** - * @Column(type="string", length=255) + * @ORM\Column(type="string", length=255) */ private $name; diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index c1e65b2ddc5..ec97662e7ae 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -1455,11 +1455,11 @@ public function testWakeupReflectionWithEmbeddableAndStaticReflectionService() } /** - * @MappedSuperclass + * @ORM\MappedSuperclass */ class DDC2700MappedSuperClass { - /** @Column */ + /** @ORM\Column */ private $foo; } diff --git a/tests/Doctrine/Tests/ORM/Performance/DDC2602Test.php b/tests/Doctrine/Tests/ORM/Performance/DDC2602Test.php index 5f62f98c4b5..5d9cd03fbfa 100644 --- a/tests/Doctrine/Tests/ORM/Performance/DDC2602Test.php +++ b/tests/Doctrine/Tests/ORM/Performance/DDC2602Test.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Performance; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Event\LifecycleEventArgs; use Doctrine\ORM\Events; use Doctrine\Tests\OrmPerformanceTestCase; @@ -166,32 +167,32 @@ public function postLoad(LifecycleEventArgs $event) /** - * @Entity + * @ORM\Entity */ class DDC2602User { /** - * @Id @GeneratedValue - * @Column(type="integer") + * @ORM\Id @ORM\GeneratedValue + * @ORM\Column(type="integer") * * @var integer */ public $id; /** - * @Column(type="string", length=15) + * @ORM\Column(type="string", length=15) * * @var string */ public $name; /** - * @OneToOne( + * @ORM\OneToOne( * targetEntity="DDC2602Biography", * inversedBy="user", * cascade={"persist", "merge", "refresh", "remove"} * ) - * @JoinColumn(nullable=false) + * @ORM\JoinColumn(nullable=false) * * @var DDC2602Biography */ @@ -199,20 +200,20 @@ class DDC2602User } /** - * @Entity + * @ORM\Entity */ class DDC2602Biography { /** - * @Id @GeneratedValue - * @Column(type="integer") + * @ORM\Id @ORM\GeneratedValue + * @ORM\Column(type="integer") * * @var integer */ public $id; /** - * @OneToOne( + * @ORM\OneToOne( * targetEntity="DDC2602User", * mappedBy="biography", * cascade={"persist", "merge", "refresh"} @@ -223,7 +224,7 @@ class DDC2602Biography public $user; /** - * @Column(type="text", nullable=true) + * @ORM\Column(type="text", nullable=true) * * @var string */ @@ -236,30 +237,30 @@ class DDC2602Biography } /** - * @Entity + * @ORM\Entity */ class DDC2602BiographyField { /** - * @Id @GeneratedValue - * @Column(type="integer") + * @ORM\Id @ORM\GeneratedValue + * @ORM\Column(type="integer") * * @var integer */ public $id; /** - * @Column(type="string", unique=true, length=100) + * @ORM\Column(type="string", unique=true, length=100) */ public $alias; /** - * @Column(type="string", length=100) + * @ORM\Column(type="string", length=100) */ public $label; /** - * @OneToMany( + * @ORM\OneToMany( * targetEntity="DDC2602BiographyFieldChoice", * mappedBy="field", * cascade={"persist", "merge", "refresh"} @@ -280,29 +281,29 @@ public function __construct() } /** - * @Entity + * @ORM\Entity */ class DDC2602BiographyFieldChoice { /** - * @Id @GeneratedValue - * @Column(type="integer") + * @ORM\Id @ORM\GeneratedValue + * @ORM\Column(type="integer") * * @var integer */ public $id; /** - * @Column(type="string", unique=true, length=100) + * @ORM\Column(type="string", unique=true, length=100) */ public $label; /** - * @ManyToOne( + * @ORM\ManyToOne( * targetEntity="DDC2602BiographyField", * inversedBy="choiceList" * ) - * @JoinColumn(onDelete="CASCADE") + * @ORM\JoinColumn(onDelete="CASCADE") * * @var DDC2602BiographyField */ diff --git a/tests/Doctrine/Tests/ORM/Query/LanguageRecognitionTest.php b/tests/Doctrine/Tests/ORM/Query/LanguageRecognitionTest.php index 7a8394e74c1..1263d1e3479 100644 --- a/tests/Doctrine/Tests/ORM/Query/LanguageRecognitionTest.php +++ b/tests/Doctrine/Tests/ORM/Query/LanguageRecognitionTest.php @@ -2,9 +2,10 @@ namespace Doctrine\Tests\ORM\Query; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\EntityManagerInterface; -use Doctrine\ORM\Query, - Doctrine\ORM\Query\QueryException; +use Doctrine\ORM\Query; +use Doctrine\ORM\Query\QueryException; use Doctrine\Tests\Mocks\MockTreeWalker; use Doctrine\Tests\OrmTestCase; @@ -710,21 +711,21 @@ public function testNewLiteralWithSubselectExpression() } } -/** @Entity */ +/** @ORM\Entity */ class DQLKeywordsModelUser { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ private $id; - /** @OneToOne(targetEntity="DQLKeywordsModelGroup") */ + /** @ORM\OneToOne(targetEntity="DQLKeywordsModelGroup") */ private $group; } -/** @Entity */ +/** @ORM\Entity */ class DQLKeywordsModelGroup { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ private $id; - /** @Column */ + /** @ORM\Column */ private $from; } diff --git a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php index d1e45dfd3cb..b614786589c 100644 --- a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php @@ -9,6 +9,7 @@ use Doctrine\DBAL\Platforms\SqlitePlatform; use Doctrine\DBAL\Platforms\SQLServerPlatform; use Doctrine\DBAL\Types\Type as DBALType; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Query as ORMQuery; use Doctrine\ORM\Query\AST\Functions\FunctionNode; use Doctrine\ORM\Query\Lexer; @@ -2364,34 +2365,34 @@ public function parse(Parser $parser) } } /** - * @Entity + * @ORM\Entity */ class DDC1384Model { /** - * @Id - * @Column(type="integer") - * @GeneratedValue + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue */ protected $aVeryLongIdentifierThatShouldBeShortenedByTheSQLWalker_fooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo; } /** - * @Entity + * @ORM\Entity */ class DDC1474Entity { /** - * @Id - * @Column(type="integer") - * @GeneratedValue() + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue() */ protected $id; /** - * @column(type="float") + * @ORM\Column(type="float") */ private $value; diff --git a/tests/Doctrine/Tests/ORM/Sequencing/AssignedGeneratorTest.php b/tests/Doctrine/Tests/ORM/Sequencing/AssignedGeneratorTest.php index e95c8843603..d0ce1b0c1a1 100644 --- a/tests/Doctrine/Tests/ORM/Sequencing/AssignedGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Sequencing/AssignedGeneratorTest.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Sequencing; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Sequencing\AssignedGenerator; use Doctrine\ORM\ORMException; use Doctrine\Tests\OrmTestCase; @@ -55,16 +56,16 @@ public function testCorrectIdGeneration() } } -/** @Entity */ +/** @ORM\Entity */ class AssignedSingleIdEntity { - /** @Id @Column(type="integer") */ + /** @ORM\Id @ORM\Column(type="integer") */ public $myId; } -/** @Entity */ +/** @ORM\Entity */ class AssignedCompositeIdEntity { - /** @Id @Column(type="integer") */ + /** @ORM\Id @ORM\Column(type="integer") */ public $myId1; - /** @Id @Column(type="integer") */ + /** @ORM\Id @ORM\Column(type="integer") */ public $myId2; } diff --git a/tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php b/tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php index 7eda7f4d008..e294bf84c3b 100644 --- a/tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php @@ -2,10 +2,11 @@ namespace Doctrine\Tests\ORM\Tools; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Events; -use Doctrine\Tests\OrmTestCase; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Tools\AttachEntityListenersListener; +use Doctrine\Tests\OrmTestCase; class AttachEntityListenersListenerTest extends OrmTestCase { @@ -113,28 +114,28 @@ public function testDuplicateEntityListenerException() } /** - * @Entity + * @ORM\Entity */ class AttachEntityListenersListenerTestFooEntity { /** - * @Id - * @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; } /** - * @Entity - * @EntityListeners({"AttachEntityListenersListenerTestListener"}) + * @ORM\Entity + * @ORM\EntityListeners({"AttachEntityListenersListenerTestListener"}) */ class AttachEntityListenersListenerTestBarEntity { /** - * @Id - * @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ public $id; } diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 52c735e77a2..c63790b8d5c 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -33,7 +33,6 @@ public function setUp() $this->generator = new EntityGenerator(); - $this->generator->setAnnotationPrefix(""); $this->generator->setGenerateAnnotations(true); $this->generator->setGenerateStubMethods(true); $this->generator->setRegenerateEntityIfExists(false); @@ -577,7 +576,6 @@ public function testLoadMetadata() public function testLoadPrefixedMetadata() { - $this->generator->setAnnotationPrefix('ORM\\'); $embeddedMetadata = $this->generateIsbnEmbeddableFixture(); $metadata = $this->generateBookEntityFixture(['isbn' => $embeddedMetadata]); @@ -617,7 +615,6 @@ public function testMappedSuperclassAnnotationGeneration() $metadata->isMappedSuperclass = true; - $this->generator->setAnnotationPrefix('ORM\\'); $this->generator->writeEntityClass($metadata, $this->tmpDir); $this->newInstance($metadata); // force instantiation (causes autoloading to kick in) @@ -681,10 +678,10 @@ public function testGenerateEntityWithSequenceGenerator() $reflection = new \ReflectionProperty($metadata->name, 'id'); $docComment = $reflection->getDocComment(); - self::assertContains('@Id', $docComment); - self::assertContains('@Column(name="id", type="integer")', $docComment); - self::assertContains('@GeneratedValue(strategy="SEQUENCE")', $docComment); - self::assertContains('@SequenceGenerator(sequenceName="DDC1784_ID_SEQ", allocationSize=1)', $docComment); + self::assertContains('@ORM\Id', $docComment); + self::assertContains('@ORM\Column(name="id", type="integer")', $docComment); + self::assertContains('@ORM\GeneratedValue(strategy="SEQUENCE")', $docComment); + self::assertContains('@ORM\SequenceGenerator(sequenceName="DDC1784_ID_SEQ", allocationSize=1)', $docComment); } /** @@ -750,11 +747,11 @@ public function testGenerateEntityWithMultipleInverseJoinColumns() $docComment = $property->getDocComment(); //joinColumns - self::assertContains('@JoinColumn(name="idorcamento", referencedColumnName="idorcamento"),', $docComment); - self::assertContains('@JoinColumn(name="idunidade", referencedColumnName="idunidade")', $docComment); + self::assertContains('@ORM\JoinColumn(name="idorcamento", referencedColumnName="idorcamento"),', $docComment); + self::assertContains('@ORM\JoinColumn(name="idunidade", referencedColumnName="idunidade")', $docComment); //inverseJoinColumns - self::assertContains('@JoinColumn(name="idcentrocusto", referencedColumnName="idcentrocusto"),', $docComment); - self::assertContains('@JoinColumn(name="idpais", referencedColumnName="idpais")', $docComment); + self::assertContains('@ORM\JoinColumn(name="idcentrocusto", referencedColumnName="idcentrocusto"),', $docComment); + self::assertContains('@ORM\JoinColumn(name="idpais", referencedColumnName="idpais")', $docComment); } @@ -939,6 +936,7 @@ public function testMethodsAndPropertiesAreNotDuplicatedInChildClasses() $ns = $this->namespace; $nsdir = $this->tmpDir . '/' . $ns; + // Dump DDC1590User into temp file $content = str_replace( 'namespace Doctrine\Tests\Models\DDC1590', 'namespace ' . $ns, @@ -947,8 +945,9 @@ public function testMethodsAndPropertiesAreNotDuplicatedInChildClasses() $fname = $nsdir . "/DDC1590User.php"; file_put_contents($fname, $content); - require $fname; + // Require DDC1590User + require $fname; $metadata = $cmf->getMetadataFor($ns . '\DDC1590User'); $this->generator->writeEntityClass($metadata, $this->tmpDir); @@ -983,7 +982,6 @@ public function testMethodsAndPropertiesAreNotDuplicatedInChildClasses() self::assertTrue($rc2->hasMethod('getCreatedAt')); self::assertTrue($rc2->hasMethod('setCreatedAt')); - // class __DDC1590User { ... } $rc3 = new \ReflectionClass($ns.'\__DDC1590User'); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php index f553156d3dd..97df82f38ad 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php @@ -36,7 +36,7 @@ public function setUp() \mkdir($this->tmpDir); $this->generator = new EntityGenerator(); - $this->generator->setAnnotationPrefix(""); + $this->generator->setGenerateAnnotations(true); $this->generator->setGenerateStubMethods(true); $this->generator->setRegenerateEntityIfExists(false); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index 60b02f0b329..9e8eb04b2bc 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -101,10 +101,7 @@ public function testExportDirectoryAndFilesAreCreated() $exporter = $cme->getExporter($type, __DIR__ . '/export/' . $type); if ($type === 'annotation') { - $entityGenerator = new EntityGenerator(); - - $entityGenerator->setAnnotationPrefix(""); - $exporter->setEntityGenerator($entityGenerator); + $exporter->setEntityGenerator(new EntityGenerator()); } $this->extension = $exporter->getExtension(); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/annotation/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/annotation/Doctrine.Tests.ORM.Tools.Export.User.php index 34470805953..bb291a7accb 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/annotation/Doctrine.Tests.ORM.Tools.Export.User.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/annotation/Doctrine.Tests.ORM.Tools.Export.User.php @@ -2,74 +2,76 @@ namespace Doctrine\Tests\ORM\Tools\Export; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @HasLifecycleCallbacks - * @Table(name="cms_users",options={"engine"="MyISAM","foo"={"bar"="baz"}}) + * @ORM\Entity + * @ORM\HasLifecycleCallbacks + * @ORM\Table(name="cms_users",options={"engine"="MyISAM","foo"={"bar"="baz"}}) */ class User { - /** @Id @Column(type="integer") @generatedValue(strategy="AUTO") */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue(strategy="AUTO") */ public $id; /** - * @Column(length=50, nullable=true, unique=true) + * @ORM\Column(length=50, nullable=true, unique=true) */ public $name; /** - * @Column(name="user_email", columnDefinition="CHAR(32) NOT NULL") + * @ORM\Column(name="user_email", columnDefinition="CHAR(32) NOT NULL") */ public $email; /** - * @Column(type="integer", options={"unsigned"=true}) + * @ORM\Column(type="integer", options={"unsigned"=true}) */ public $age; /** - * @OneToOne(targetEntity="Doctrine\Tests\ORM\Tools\Export\Address", inversedBy="user", cascade={"persist"}, orphanRemoval=true, fetch="EAGER") - * @JoinColumn(name="address_id", onDelete="CASCADE") + * @ORM\OneToOne(targetEntity="Doctrine\Tests\ORM\Tools\Export\Address", inversedBy="user", cascade={"persist"}, orphanRemoval=true, fetch="EAGER") + * @ORM\JoinColumn(name="address_id", onDelete="CASCADE") */ public $address; /** - * @ManyToOne(targetEntity="Doctrine\Tests\ORM\Tools\Export\Group") + * @ORM\ManyToOne(targetEntity="Doctrine\Tests\ORM\Tools\Export\Group") */ public $mainGroup; /** * - * @OneToMany(targetEntity="Doctrine\Tests\ORM\Tools\Export\Phonenumber", mappedBy="user", cascade={"persist", "merge"}, orphanRemoval=true) - * @OrderBy({"number"="ASC"}) + * @ORM\OneToMany(targetEntity="Doctrine\Tests\ORM\Tools\Export\Phonenumber", mappedBy="user", cascade={"persist", "merge"}, orphanRemoval=true) + * @ORM\OrderBy({"number"="ASC"}) */ public $phonenumbers; /** - * @ManyToMany(targetEntity="Doctrine\Tests\ORM\Tools\Export\Group", cascade={"all"}, fetch="EXTRA_LAZY") - * @JoinTable(name="cms_users_groups", - * joinColumns={@JoinColumn(name="user_id", referencedColumnName="id", nullable=false, unique=false)}, - * inverseJoinColumns={@JoinColumn(name="group_id", referencedColumnName="id", columnDefinition="INT NULL")} + * @ORM\ManyToMany(targetEntity="Doctrine\Tests\ORM\Tools\Export\Group", cascade={"all"}, fetch="EXTRA_LAZY") + * @ORM\JoinTable(name="cms_users_groups", + * joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false, unique=false)}, + * inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id", columnDefinition="INT NULL")} * ) */ public $groups; /** - * @PrePersist + * @ORM\PrePersist */ public function doStuffOnPrePersist() { } /** - * @PrePersist + * @ORM\PrePersist */ public function doOtherStuffOnPrePersistToo() { } /** - * @PostPersist + * @ORM\PostPersist */ public function doStuffOnPostPersist() { diff --git a/tests/Doctrine/Tests/ORM/Tools/Pagination/PaginationTestCase.php b/tests/Doctrine/Tests/ORM/Tools/Pagination/PaginationTestCase.php index 7f0114ec4fb..74e628e089c 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Pagination/PaginationTestCase.php +++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/PaginationTestCase.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Tools\Pagination; +use Doctrine\ORM\Annotation as ORM; use Doctrine\Tests\OrmTestCase; abstract class PaginationTestCase extends OrmTestCase @@ -22,163 +23,146 @@ public function tearDown() } } - /** -* @Entity +* @ORM\Entity */ class MyBlogPost { - - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; /** - * @ManyToOne(targetEntity="Author") + * @ORM\ManyToOne(targetEntity="Author") */ public $author; /** - * @ManyToOne(targetEntity="Category") + * @ORM\ManyToOne(targetEntity="Category") */ public $category; - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ public $title; } /** - * @Entity + * @ORM\Entity */ class MyAuthor { - - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; - } /** -* @Entity +* @ORM\Entity */ class MyCategory { - - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; - } - /** - * @Entity + * @ORM\Entity */ class BlogPost { - - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; /** - * @ManyToOne(targetEntity="Author") + * @ORM\ManyToOne(targetEntity="Author") */ public $author; /** - * @ManyToOne(targetEntity="Category") + * @ORM\ManyToOne(targetEntity="Category") */ public $category; } /** - * @Entity + * @ORM\Entity */ class Author { - - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ public $name; - } /** - * @Entity + * @ORM\Entity */ class Person { - - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ public $name; - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ public $biography; - } /** - * @Entity + * @ORM\Entity */ class Category { - - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; - } - -/** @Entity @Table(name="groups") */ +/** @ORM\Entity @ORM\Table(name="groups") */ class Group { - - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; - /** @ManyToMany(targetEntity="User", mappedBy="groups") */ + /** @ORM\ManyToMany(targetEntity="User", mappedBy="groups") */ public $users; } -/** @Entity */ +/** @ORM\Entity */ class User { - - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; /** - * @ManyToMany(targetEntity="Group", inversedBy="users") - * @JoinTable( + * @ORM\ManyToMany(targetEntity="Group", inversedBy="users") + * @ORM\JoinTable( * name="user_group", - * joinColumns = {@JoinColumn(name="user_id", referencedColumnName="id")}, - * inverseJoinColumns = {@JoinColumn(name="group_id", referencedColumnName="id")} + * joinColumns = {@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, + * inverseJoinColumns = {@ORM\JoinColumn(name="group_id", referencedColumnName="id")} * ) */ public $groups; /** - * @OneToOne(targetEntity="Avatar", mappedBy="user") + * @ORM\OneToOne(targetEntity="Avatar", mappedBy="user") */ public $avatar; } -/** @Entity */ +/** @ORM\Entity */ class Avatar { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ public $id; /** - * @OneToOne(targetEntity="User", inversedBy="avatar") - * @JoinColumn(name="user_id", referencedColumnName="id") + * @ORM\OneToOne(targetEntity="User", inversedBy="avatar") + * @ORM\JoinColumn(name="user_id", referencedColumnName="id") */ public $user; - /** @Column(type="string", length=255) */ + /** @ORM\Column(type="string", length=255) */ public $image; - /** @Column(type="integer") */ + /** @ORM\Column(type="integer") */ public $image_height; - /** @Column(type="integer") */ + /** @ORM\Column(type="integer") */ public $image_width; - /** @Column(type="string", length=255) */ + /** @ORM\Column(type="string", length=255) */ public $image_alt_desc; } -/** @MappedSuperclass */ +/** @ORM\MappedSuperclass */ abstract class Identified { - /** @Id @Column(type="integer") @GeneratedValue */ + /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */ private $id; public function getId() @@ -187,9 +171,9 @@ public function getId() } } -/** @Entity */ +/** @ORM\Entity */ class Banner extends Identified { - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ public $name; } diff --git a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php index 7899565595e..4496d732885 100644 --- a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Tools; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Tools\ResolveTargetEntityListener; use Doctrine\ORM\Events; @@ -120,35 +121,35 @@ interface TargetInterface extends ResolveTargetInterface } /** - * @Entity + * @ORM\Entity */ class ResolveTargetEntity implements ResolveTargetInterface { /** - * @Id - * @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** - * @ManyToMany(targetEntity="Doctrine\Tests\ORM\Tools\TargetInterface") + * @ORM\ManyToMany(targetEntity="Doctrine\Tests\ORM\Tools\TargetInterface") */ private $manyToMany; /** - * @ManyToOne(targetEntity="Doctrine\Tests\ORM\Tools\ResolveTargetInterface", inversedBy="oneToMany") + * @ORM\ManyToOne(targetEntity="Doctrine\Tests\ORM\Tools\ResolveTargetInterface", inversedBy="oneToMany") */ private $manyToOne; /** - * @OneToMany(targetEntity="Doctrine\Tests\ORM\Tools\ResolveTargetInterface", mappedBy="manyToOne") + * @ORM\OneToMany(targetEntity="Doctrine\Tests\ORM\Tools\ResolveTargetInterface", mappedBy="manyToOne") */ private $oneToMany; /** - * @OneToOne(targetEntity="Doctrine\Tests\ORM\Tools\TargetInterface") - * @JoinColumn(name="target_entity_id", referencedColumnName="id") + * @ORM\OneToOne(targetEntity="Doctrine\Tests\ORM\Tools\TargetInterface") + * @ORM\JoinColumn(name="target_entity_id", referencedColumnName="id") */ private $oneToOne; @@ -159,14 +160,14 @@ public function getId() } /** - * @Entity + * @ORM\Entity */ class TargetEntity implements TargetInterface { /** - * @Id - * @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") */ private $id; diff --git a/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php b/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php index ae2a3b35959..03073905d22 100644 --- a/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Tools; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs; use Doctrine\ORM\Tools\Event\GenerateSchemaTableEventArgs; use Doctrine\ORM\Tools\SchemaTool; @@ -191,16 +192,16 @@ public function testSetDiscriminatorColumnWithoutLength() : void } /** - * @Entity - * @Table(options={"foo": "bar", "baz": {"key": "val"}}) + * @ORM\Entity + * @ORM\Table(options={"foo": "bar", "baz": {"key": "val"}}) */ class TestEntityWithAnnotationOptionsAttribute { - /** @Id @Column */ + /** @ORM\Id @ORM\Column */ private $id; /** - * @Column(type="string", options={"foo": "bar", "baz": {"key": "val"}}) + * @ORM\Column(type="string", options={"foo": "bar", "baz": {"key": "val"}}) */ private $test; } @@ -222,63 +223,63 @@ public function postGenerateSchema(GenerateSchemaEventArgs $eventArgs) } /** - * @Entity - * @Table( + * @ORM\Entity + * @ORM\Table( * name="unique_constraint_annotation_table", * uniqueConstraints={ - * @UniqueConstraint(name="uniq_hash", columns={"hash"}) + * @ORM\UniqueConstraint(name="uniq_hash", columns={"hash"}) * } * ) */ class UniqueConstraintAnnotationModel { - /** @Id @Column */ + /** @ORM\Id @ORM\Column */ private $id; /** - * @Column(name="hash", type="string", length=8, nullable=false, unique=true) + * @ORM\Column(name="hash", type="string", length=8, nullable=false, unique=true) */ private $hash; } /** - * @Entity - * @Table(name="first_entity") + * @ORM\Entity + * @ORM\Table(name="first_entity") */ class FirstEntity { /** - * @Id - * @Column(name="id") + * @ORM\Id + * @ORM\Column(name="id") */ public $id; /** - * @OneToOne(targetEntity="SecondEntity") - * @JoinColumn(name="id", referencedColumnName="fist_entity_id") + * @ORM\OneToOne(targetEntity="SecondEntity") + * @ORM\JoinColumn(name="id", referencedColumnName="fist_entity_id") */ public $secondEntity; /** - * @Column(name="name") + * @ORM\Column(name="name") */ public $name; } /** - * @Entity - * @Table(name="second_entity") + * @ORM\Entity + * @ORM\Table(name="second_entity") */ class SecondEntity { /** - * @Id - * @Column(name="fist_entity_id") + * @ORM\Id + * @ORM\Column(name="fist_entity_id") */ public $fist_entity_id; /** - * @Column(name="name") + * @ORM\Column(name="name") */ public $name; } diff --git a/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php b/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php index bfaddc85328..b09e5bfee7e 100644 --- a/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Tools; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\EntityManager; use Doctrine\ORM\Tools\SchemaValidator; use Doctrine\Tests\OrmTestCase; @@ -187,317 +188,317 @@ public function testInvalidOrderByAssociationInverseSide() } /** - * @Entity + * @ORM\Entity */ class InvalidEntity1 { /** - * @Id @Column + * @ORM\Id @ORM\Column */ protected $key1; /** - * @Id @Column + * @ORM\Id @ORM\Column */ protected $key2; /** - * @ManyToMany (targetEntity="InvalidEntity2") - * @JoinTable (name="Entity1Entity2", - * joinColumns={@JoinColumn(name="key1", referencedColumnName="key1")}, - * inverseJoinColumns={@JoinColumn(name="key3", referencedColumnName="key3")} + * @ORM\ManyToMany (targetEntity="InvalidEntity2") + * @ORM\JoinTable (name="Entity1Entity2", + * joinColumns={@ORM\JoinColumn(name="key1", referencedColumnName="key1")}, + * inverseJoinColumns={@ORM\JoinColumn(name="key3", referencedColumnName="key3")} * ) */ protected $entity2; } /** - * @Entity + * @ORM\Entity */ class InvalidEntity2 { /** - * @Id @Column + * @ORM\Id @ORM\Column */ protected $key3; /** - * @Id @Column + * @ORM\Id @ORM\Column */ protected $key4; /** - * @ManyToOne(targetEntity="InvalidEntity1") + * @ORM\ManyToOne(targetEntity="InvalidEntity1") */ protected $assoc; } /** - * @Entity(repositoryClass="Entity\Repository\Agent") - * @Table(name="agent") + * @ORM\Entity(repositoryClass="Entity\Repository\Agent") + * @ORM\Table(name="agent") */ class DDC1587ValidEntity1 { /** * @var int * - * @Id @GeneratedValue - * @Column(name="pk", type="integer") + * @ORM\Id @ORM\GeneratedValue + * @ORM\Column(name="pk", type="integer") */ private $pk; /** * @var string * - * @Column(name="name", type="string", length=32) + * @ORM\Column(name="name", type="string", length=32) */ private $name; /** * @var Identifier * - * @OneToOne(targetEntity="DDC1587ValidEntity2", cascade={"all"}, mappedBy="agent") - * @JoinColumn(name="pk", referencedColumnName="pk_agent") + * @ORM\OneToOne(targetEntity="DDC1587ValidEntity2", cascade={"all"}, mappedBy="agent") + * @ORM\JoinColumn(name="pk", referencedColumnName="pk_agent") */ private $identifier; } /** - * @Entity - * @Table + * @ORM\Entity + * @ORM\Table */ class DDC1587ValidEntity2 { /** * @var DDC1587ValidEntity1 * - * @Id - * @OneToOne(targetEntity="DDC1587ValidEntity1", inversedBy="identifier") - * @JoinColumn(name="pk_agent", referencedColumnName="pk", nullable=false) + * @ORM\Id + * @ORM\OneToOne(targetEntity="DDC1587ValidEntity1", inversedBy="identifier") + * @ORM\JoinColumn(name="pk_agent", referencedColumnName="pk", nullable=false) */ private $agent; /** * @var string * - * @Column(name="num", type="string", length=16, nullable=true) + * @ORM\Column(name="num", type="string", length=16, nullable=true) */ private $num; } /** - * @Entity + * @ORM\Entity */ class DDC1649One { /** - * @Id @Column @GeneratedValue + * @ORM\Id @ORM\Column @ORM\GeneratedValue */ public $id; } /** - * @Entity + * @ORM\Entity */ class DDC1649Two { - /** @Id @ManyToOne(targetEntity="DDC1649One")@JoinColumn(name="id", referencedColumnName="id") */ + /** @ORM\Id @ORM\ManyToOne(targetEntity="DDC1649One")@ORM\JoinColumn(name="id", referencedColumnName="id") */ public $one; } /** - * @Entity + * @ORM\Entity */ class DDC1649Three { - /** @Id @ManyToOne(targetEntity="DDC1649Two") @JoinColumn(name="id", + /** @ORM\Id @ORM\ManyToOne(targetEntity="DDC1649Two") @ORM\JoinColumn(name="id", * referencedColumnName="id") */ private $two; } /** - * @Entity + * @ORM\Entity */ class DDC3274One { /** - * @Id @Column @GeneratedValue + * @ORM\Id @ORM\Column @ORM\GeneratedValue */ private $id; /** - * @OneToMany(targetEntity="DDC3274Two", mappedBy="one") + * @ORM\OneToMany(targetEntity="DDC3274Two", mappedBy="one") */ private $two; } /** - * @Entity + * @ORM\Entity */ class DDC3274Two { /** - * @Id - * @ManyToOne(targetEntity="DDC3274One") + * @ORM\Id + * @ORM\ManyToOne(targetEntity="DDC3274One") */ private $one; } /** - * @Entity + * @ORM\Entity */ class DDC3322ValidEntity1 { /** - * @Id @Column @GeneratedValue + * @ORM\Id @ORM\Column @ORM\GeneratedValue */ private $id; /** - * @ManyToOne(targetEntity="DDC3322One", inversedBy="validAssoc") + * @ORM\ManyToOne(targetEntity="DDC3322One", inversedBy="validAssoc") */ private $oneValid; /** - * @ManyToOne(targetEntity="DDC3322One", inversedBy="invalidAssoc") + * @ORM\ManyToOne(targetEntity="DDC3322One", inversedBy="invalidAssoc") */ private $oneInvalid; /** - * @ManyToOne(targetEntity="DDC3322Two", inversedBy="validAssoc") + * @ORM\ManyToOne(targetEntity="DDC3322Two", inversedBy="validAssoc") */ private $twoValid; /** - * @ManyToOne(targetEntity="DDC3322Two", inversedBy="invalidAssoc") + * @ORM\ManyToOne(targetEntity="DDC3322Two", inversedBy="invalidAssoc") */ private $twoInvalid; /** - * @ManyToOne(targetEntity="DDC3322Three", inversedBy="validAssoc") + * @ORM\ManyToOne(targetEntity="DDC3322Three", inversedBy="validAssoc") */ private $threeValid; /** - * @ManyToOne(targetEntity="DDC3322Three", inversedBy="invalidAssoc") + * @ORM\ManyToOne(targetEntity="DDC3322Three", inversedBy="invalidAssoc") */ private $threeInvalid; /** - * @OneToMany(targetEntity="DDC3322ValidEntity2", mappedBy="manyToOne") + * @ORM\OneToMany(targetEntity="DDC3322ValidEntity2", mappedBy="manyToOne") */ private $oneToMany; /** - * @ManyToOne(targetEntity="DDC3322ValidEntity2", inversedBy="oneToMany") + * @ORM\ManyToOne(targetEntity="DDC3322ValidEntity2", inversedBy="oneToMany") */ private $manyToOne; /** - * @OneToOne(targetEntity="DDC3322ValidEntity2", mappedBy="oneToOneOwning") + * @ORM\OneToOne(targetEntity="DDC3322ValidEntity2", mappedBy="oneToOneOwning") */ private $oneToOneInverse; /** - * @OneToOne(targetEntity="DDC3322ValidEntity2", inversedBy="oneToOneInverse") + * @ORM\OneToOne(targetEntity="DDC3322ValidEntity2", inversedBy="oneToOneInverse") */ private $oneToOneOwning; } /** - * @Entity + * @ORM\Entity */ class DDC3322ValidEntity2 { /** - * @Id @Column @GeneratedValue + * @ORM\Id @ORM\Column @ORM\GeneratedValue */ private $id; /** - * @ManyToOne(targetEntity="DDC3322ValidEntity1", inversedBy="oneToMany") + * @ORM\ManyToOne(targetEntity="DDC3322ValidEntity1", inversedBy="oneToMany") */ private $manyToOne; /** - * @OneToMany(targetEntity="DDC3322ValidEntity1", mappedBy="manyToOne") + * @ORM\OneToMany(targetEntity="DDC3322ValidEntity1", mappedBy="manyToOne") */ private $oneToMany; /** - * @OneToOne(targetEntity="DDC3322ValidEntity1", inversedBy="oneToOneInverse") + * @ORM\OneToOne(targetEntity="DDC3322ValidEntity1", inversedBy="oneToOneInverse") */ private $oneToOneOwning; /** - * @OneToOne(targetEntity="DDC3322ValidEntity1", mappedBy="oneToOneOwning") + * @ORM\OneToOne(targetEntity="DDC3322ValidEntity1", mappedBy="oneToOneOwning") */ private $oneToOneInverse; } /** - * @Entity + * @ORM\Entity */ class DDC3322One { /** - * @Id @Column @GeneratedValue + * @ORM\Id @ORM\Column @ORM\GeneratedValue */ private $id; /** - * @OneToMany(targetEntity="DDC3322ValidEntity1", mappedBy="oneValid") - * @OrderBy({"id" = "ASC"}) + * @ORM\OneToMany(targetEntity="DDC3322ValidEntity1", mappedBy="oneValid") + * @ORM\OrderBy({"id" = "ASC"}) */ private $validAssoc; /** - * @OneToMany(targetEntity="DDC3322ValidEntity1", mappedBy="oneInvalid") - * @OrderBy({"invalidField" = "ASC"}) + * @ORM\OneToMany(targetEntity="DDC3322ValidEntity1", mappedBy="oneInvalid") + * @ORM\OrderBy({"invalidField" = "ASC"}) */ private $invalidAssoc; } /** - * @Entity + * @ORM\Entity */ class DDC3322Two { /** - * @Id @Column @GeneratedValue + * @ORM\Id @ORM\Column @ORM\GeneratedValue */ private $id; /** - * @OneToMany(targetEntity="DDC3322ValidEntity1", mappedBy="twoValid") - * @OrderBy({"manyToOne" = "ASC"}) + * @ORM\OneToMany(targetEntity="DDC3322ValidEntity1", mappedBy="twoValid") + * @ORM\OrderBy({"manyToOne" = "ASC"}) */ private $validAssoc; /** - * @OneToMany(targetEntity="DDC3322ValidEntity1", mappedBy="twoInvalid") - * @OrderBy({"oneToMany" = "ASC"}) + * @ORM\OneToMany(targetEntity="DDC3322ValidEntity1", mappedBy="twoInvalid") + * @ORM\OrderBy({"oneToMany" = "ASC"}) */ private $invalidAssoc; } /** - * @Entity + * @ORM\Entity */ class DDC3322Three { /** - * @Id @Column @GeneratedValue + * @ORM\Id @ORM\Column @ORM\GeneratedValue */ private $id; /** - * @OneToMany(targetEntity="DDC3322ValidEntity1", mappedBy="threeValid") - * @OrderBy({"oneToOneOwning" = "ASC"}) + * @ORM\OneToMany(targetEntity="DDC3322ValidEntity1", mappedBy="threeValid") + * @ORM\OrderBy({"oneToOneOwning" = "ASC"}) */ private $validAssoc; /** - * @OneToMany(targetEntity="DDC3322ValidEntity1", mappedBy="threeInvalid") - * @OrderBy({"oneToOneInverse" = "ASC"}) + * @ORM\OneToMany(targetEntity="DDC3322ValidEntity1", mappedBy="threeInvalid") + * @ORM\OrderBy({"oneToOneInverse" = "ASC"}) */ private $invalidAssoc; } diff --git a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php index 7d9b4e3644e..5e0f87c6eb0 100644 --- a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php +++ b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php @@ -7,8 +7,8 @@ use Doctrine\Common\NotifyPropertyChanged; use Doctrine\Common\Persistence\Event\LifecycleEventArgs; use Doctrine\Common\PropertyChangedListener; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Events; -use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\ORMInvalidArgumentException; use Doctrine\ORM\UnitOfWork; @@ -588,25 +588,25 @@ public function testMergeWithExistingEntityWillNotPersistItNorTriggerPrePersistL } /** - * @Entity + * @ORM\Entity */ class NotifyChangedEntity implements NotifyPropertyChanged { private $listeners = []; /** - * @Id - * @Column(type="integer") - * @GeneratedValue + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue */ private $id; /** - * @Column(type="string") + * @ORM\Column(type="string") */ private $data; private $transient; // not persisted - /** @OneToMany(targetEntity="NotifyChangedRelatedItem", mappedBy="owner") */ + /** @ORM\OneToMany(targetEntity="NotifyChangedRelatedItem", mappedBy="owner") */ private $items; public function __construct() { @@ -653,17 +653,17 @@ protected function onPropertyChanged($propName, $oldValue, $newValue) { } } -/** @Entity */ +/** @ORM\Entity */ class NotifyChangedRelatedItem { /** - * @Id - * @Column(type="integer") - * @GeneratedValue + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue */ private $id; - /** @ManyToOne(targetEntity="NotifyChangedEntity", inversedBy="items") */ + /** @ORM\ManyToOne(targetEntity="NotifyChangedEntity", inversedBy="items") */ private $owner; public function getId() { @@ -679,67 +679,67 @@ public function setOwner($owner) { } } -/** @Entity */ +/** @ORM\Entity */ class VersionedAssignedIdentifierEntity { /** - * @Id @Column(type="integer") + * @ORM\Id @ORM\Column(type="integer") */ public $id; /** - * @Version @Column(type="integer") + * @ORM\Version @ORM\Column(type="integer") */ public $version; } -/** @Entity */ +/** @ORM\Entity */ class EntityWithStringIdentifier { /** - * @Id @Column(type="string") + * @ORM\Id @ORM\Column(type="string") * * @var string|null */ public $id; } -/** @Entity */ +/** @ORM\Entity */ class EntityWithBooleanIdentifier { /** - * @Id @Column(type="boolean") + * @ORM\Id @ORM\Column(type="boolean") * * @var bool|null */ public $id; } -/** @Entity */ +/** @ORM\Entity */ class EntityWithCompositeStringIdentifier { /** - * @Id @Column(type="string") + * @ORM\Id @ORM\Column(type="string") * * @var string|null */ public $id1; /** - * @Id @Column(type="string") + * @ORM\Id @ORM\Column(type="string") * * @var string|null */ public $id2; } -/** @Entity */ +/** @ORM\Entity */ class EntityWithRandomlyGeneratedField { - /** @Id @Column(type="string") */ + /** @ORM\Id @ORM\Column(type="string") */ public $id; /** - * @Column(type="integer") + * @ORM\Column(type="integer") */ public $generatedField; diff --git a/tests/Doctrine/Tests/OrmFunctionalTestCase.php b/tests/Doctrine/Tests/OrmFunctionalTestCase.php index e25484fa991..6d93b5ec442 100644 --- a/tests/Doctrine/Tests/OrmFunctionalTestCase.php +++ b/tests/Doctrine/Tests/OrmFunctionalTestCase.php @@ -734,18 +734,15 @@ protected function getEntityManager(Connection $connection = null) $this->isSecondLevelCacheEnabled = true; } + $conn = $connection ?: static::$sharedConn; + $config->setMetadataDriverImpl( - $config->newDefaultAnnotationDriver( - [ - realpath(__DIR__ . '/Models/Cache'), - realpath(__DIR__ . '/Models/GeoNames') - ], - true - ) + $config->newDefaultAnnotationDriver([ + realpath(__DIR__ . '/Models/Cache'), + realpath(__DIR__ . '/Models/GeoNames') + ]) ); - $conn = $connection ?: static::$sharedConn; - $conn->getConfiguration()->setSQLLogger($this->sqlLoggerStack); // get rid of more global state diff --git a/tests/Doctrine/Tests/OrmTestCase.php b/tests/Doctrine/Tests/OrmTestCase.php index 987909172f6..69c71e67a40 100644 --- a/tests/Doctrine/Tests/OrmTestCase.php +++ b/tests/Doctrine/Tests/OrmTestCase.php @@ -64,7 +64,7 @@ abstract class OrmTestCase extends DoctrineTestCase */ protected function createAnnotationDriver($paths = [], $alias = null) { - if (version_compare(Version::VERSION, '3.0.0', '>=')) { + if (version_compare(Version::VERSION, '3.0.0-DEV', '>=')) { $reader = new Annotations\CachedReader(new Annotations\AnnotationReader(), new ArrayCache()); } else if (version_compare(Version::VERSION, '2.2.0-DEV', '>=')) { // Register the ORM Annotations in the AnnotationRegistry @@ -125,16 +125,15 @@ protected function getTestEntityManager($conn = null, $conf = null, $eventManage $config = new Configuration(); $config->setMetadataCacheImpl($metadataCache); - $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver([], true)); + $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver([])); $config->setQueryCacheImpl(self::getSharedQueryCacheImpl()); $config->setProxyDir(__DIR__ . '/Proxies'); $config->setProxyNamespace('Doctrine\Tests\Proxies'); - $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver( - [ + $config->setMetadataDriverImpl( + $config->newDefaultAnnotationDriver([ realpath(__DIR__ . '/Models/Cache') - ], - true - )); + ]) + ); if ($this->isSecondLevelCacheEnabled) { From 75c18bb2fa37b17da4b1040bb1f813072ff043ca Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Tue, 14 Feb 2017 23:17:00 -0500 Subject: [PATCH 107/275] Docs update --- docs/en/changelog/migration_2_5.rst | 54 ++++--- ...-conversion-using-custom-mapping-types.rst | 8 +- docs/en/cookbook/aggregate-fields.rst | 35 ++--- docs/en/cookbook/custom-mapping-types.rst | 2 +- docs/en/cookbook/decorator-pattern.rst | 41 +++--- docs/en/cookbook/mysql-enums.rst | 21 ++- .../strategy-cookbook-introduction.rst | 4 +- docs/en/cookbook/validation-of-entities.rst | 14 +- docs/en/cookbook/working-with-datetime.rst | 16 +- docs/en/tutorials/composite-primary-keys.rst | 76 ++++++---- docs/en/tutorials/embeddables.rst | 30 ++-- docs/en/tutorials/extra-lazy-associations.rst | 7 +- docs/en/tutorials/getting-started.rst | 123 ++++++++++------ docs/en/tutorials/ordered-associations.rst | 19 ++- ...eld-association-mappings-in-subclasses.rst | 32 ++-- .../working-with-indexed-associations.rst | 25 ++-- .../ORM/Mapping/Driver/AnnotationDriver.php | 137 ++++++++++++------ 17 files changed, 399 insertions(+), 245 deletions(-) diff --git a/docs/en/changelog/migration_2_5.rst b/docs/en/changelog/migration_2_5.rst index 408776d03c3..b0757a49941 100644 --- a/docs/en/changelog/migration_2_5.rst +++ b/docs/en/changelog/migration_2_5.rst @@ -16,7 +16,7 @@ New Features and Improvements Events: PostLoad now triggered after associations are loaded ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Before Doctrine 2.5 if you had an entity with a ``@PostLoad`` event +Before Doctrine 2.5 if you had an entity with a ``@ORM\PostLoad`` event defined then Doctrine would trigger listeners after the fields were loaded, but before assocations are available. @@ -62,9 +62,9 @@ Embeddable Objects ~~~~~~~~~~~~~~~~~~ Doctrine now supports creating multiple PHP objects from one database table -implementing a feature called "Embeddable Objects". Next to an ``@Entity`` +implementing a feature called "Embeddable Objects". Next to an ``@ORM\Entity`` class you can now define a class that is embeddable into a database table of an -entity using the ``@Embeddable`` annotation. Embeddable objects can never be +entity using the ``@ORM\Embeddable`` annotation. Embeddable objects can never be saved, updated or deleted on their own, only as part of an entity (called "root-entity" or "aggregate"). Consequently embeddables don't have a primary key, they are identified only by their values. @@ -75,23 +75,25 @@ Example of defining and using embeddables classes: 'pdo_sqlite', 'path' => __DIR__ . '/db.sqlite', ); - + // obtaining the entity manager $entityManager = EntityManager::create($conn, $config); @@ -180,7 +180,7 @@ cli-config.php file must exist in the project root directory: convertProperty($reflProperty); -// -// $metadata->addProperty($property); - - // Field can only be annotated with one of: - // @Column, @OneToOne, @OneToMany, @ManyToOne, @ManyToMany - $fieldName = $reflProperty->getName(); + $propertyAnnotations = $this->reader->getPropertyAnnotations($reflProperty); - if ($columnAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Column::class)) { - if ($columnAnnot->type == null) { - throw MappingException::propertyTypeIsRequired($className, $fieldName); + foreach ($propertyAnnotations as $key => $annot) { + if ( ! is_numeric($key)) { + continue; } - $isFieldVersioned = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Version::class) !== null; - $fieldMetadata = $this->convertColumnAnnotationToFieldMetadata($columnAnnot, $fieldName, $isFieldVersioned); - - // Check for Id - if ($idAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Id::class)) { - $fieldMetadata->setPrimaryKey(true); - } + $propertyAnnotations[get_class($annot)] = $annot; + } - // Check for GeneratedValue strategy - if ($generatedValueAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\GeneratedValue::class)) { - $strategy = strtoupper($generatedValueAnnot->strategy); + // Field can only be annotated with one of: + // @Column, @OneToOne, @OneToMany, @ManyToOne, @ManyToMany + switch (true) { + case isset($propertyAnnotations[Annotation\Column::class]): + // Field found + $fieldMetadata = $this->convertReflectionPropertyToFieldMetadata( + $reflProperty, + $propertyAnnotations, + $metadata + ); - $metadata->setIdGeneratorType(constant(sprintf('%s::%s', GeneratorType::class, $strategy))); - } + $metadata->addProperty($fieldMetadata); - // Check for CustomGenerator/SequenceGenerator/TableGenerator definition - if ($seqGeneratorAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\SequenceGenerator::class)) { - $metadata->setGeneratorDefinition( - [ - 'sequenceName' => $seqGeneratorAnnot->sequenceName, - 'allocationSize' => $seqGeneratorAnnot->allocationSize, - ] - ); - } else if ($this->reader->getPropertyAnnotation($reflProperty, 'Doctrine\ORM\Mapping\TableGenerator')) { - throw MappingException::tableIdGeneratorNotImplemented($className); - } else if ($customGeneratorAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\CustomIdGenerator::class)) { - $metadata->setGeneratorDefinition( - [ - 'class' => $customGeneratorAnnot->class, - 'arguments' => $customGeneratorAnnot->arguments, - ] - ); - } + // Check for Version + if ($fieldMetadata instanceof VersionFieldMetadata) { + $metadata->setVersionProperty($fieldMetadata); + } - $metadata->addProperty($fieldMetadata); + break; - // Check for Version - if ($this->reader->getPropertyAnnotation($reflProperty, Annotation\Version::class)) { - $metadata->setVersionProperty($fieldMetadata); - } - continue; } +// $property = $this->convertProperty($reflProperty); +// +// $metadata->addProperty($property); + + // Field can only be annotated with one of: + // @Column, @OneToOne, @OneToMany, @ManyToOne, @ManyToMany + $fieldName = $reflProperty->getName(); + $mapping = []; $mapping['fieldName'] = $fieldName; @@ -692,6 +676,67 @@ private function convertSqlResultSetMapping(Annotation\SqlResultSetMapping $resu ]; } + private function convertReflectionPropertyToFieldMetadata( + \ReflectionProperty $reflProperty, + array $propertyAnnotations, + ClassMetadata $metadata /* @todo Should be removed once FieldMetadata owns Generator information */ + ) + { + $className = $reflProperty->getDeclaringClass()->getName(); + $fieldName = $reflProperty->getName(); + $isVersioned = isset($propertyAnnotations[Annotation\Version::class]); + $columnAnnot = $propertyAnnotations[Annotation\Column::class]; + + if ($columnAnnot->type == null) { + throw MappingException::propertyTypeIsRequired($className, $fieldName); + } + + $fieldMetadata = $this->convertColumnAnnotationToFieldMetadata($columnAnnot, $fieldName, $isVersioned); + + // Check for Id + if (isset($propertyAnnotations[Annotation\Id::class])) { + $fieldMetadata->setPrimaryKey(true); + } + + // Check for GeneratedValue strategy + if (isset($propertyAnnotations[Annotation\GeneratedValue::class])) { + $generatedValueAnnot = $propertyAnnotations[Annotation\GeneratedValue::class]; + $strategy = strtoupper($generatedValueAnnot->strategy); + $idGeneratorType = constant(sprintf('%s::%s', GeneratorType::class, $strategy)); + + $metadata->setIdGeneratorType($idGeneratorType); + } + + // Check for CustomGenerator/SequenceGenerator/TableGenerator definition + switch (true) { + case isset($propertyAnnotations[Annotation\SequenceGenerator::class]): + $seqGeneratorAnnot = $propertyAnnotations[Annotation\SequenceGenerator::class]; + + $metadata->setGeneratorDefinition([ + 'sequenceName' => $seqGeneratorAnnot->sequenceName, + 'allocationSize' => $seqGeneratorAnnot->allocationSize, + ]); + + break; + + case isset($propertyAnnotations[Annotation\CustomIdGenerator::class]): + $customGeneratorAnnot = $propertyAnnotations[Annotation\CustomIdGenerator::class]; + + $metadata->setGeneratorDefinition([ + 'class' => $customGeneratorAnnot->class, + 'arguments' => $customGeneratorAnnot->arguments, + ]); + + break; + + /* @todo If it is not supported, why does this exist? */ + case isset($propertyAnnotations['Doctrine\ORM\Mapping\TableGenerator']): + throw MappingException::tableIdGeneratorNotImplemented($className); + } + + return $fieldMetadata; + } + /** * Parse the given Column as FieldMetadata * From 443a7f3aba9de8f2945226da47ef9eaf97f65d26 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sun, 12 Mar 2017 20:36:48 -0400 Subject: [PATCH 108/275] Introduced AssociationMetadata and its subclasses as classes. \o/ --- .../Builder/AssociationMetadataBuilder.php | 217 ++++++++++++++++++ .../Builder/JoinTableMetadataBuilder.php | 84 +++++++ .../ManyToManyAssociationMetadataBuilder.php | 62 +++++ .../ManyToOneAssociationMetadataBuilder.php | 33 +++ .../OneToManyAssociationMetadataBuilder.php | 33 +++ .../OneToOneAssociationMetadataBuilder.php | 33 +++ .../ToManyAssociationMetadataBuilder.php | 70 ++++++ .../ToOneAssociationMetadataBuilder.php | 54 +++++ 8 files changed, 586 insertions(+) create mode 100644 lib/Doctrine/ORM/Mapping/Builder/AssociationMetadataBuilder.php create mode 100644 lib/Doctrine/ORM/Mapping/Builder/JoinTableMetadataBuilder.php create mode 100644 lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationMetadataBuilder.php create mode 100644 lib/Doctrine/ORM/Mapping/Builder/ManyToOneAssociationMetadataBuilder.php create mode 100644 lib/Doctrine/ORM/Mapping/Builder/OneToManyAssociationMetadataBuilder.php create mode 100644 lib/Doctrine/ORM/Mapping/Builder/OneToOneAssociationMetadataBuilder.php create mode 100644 lib/Doctrine/ORM/Mapping/Builder/ToManyAssociationMetadataBuilder.php create mode 100644 lib/Doctrine/ORM/Mapping/Builder/ToOneAssociationMetadataBuilder.php diff --git a/lib/Doctrine/ORM/Mapping/Builder/AssociationMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/AssociationMetadataBuilder.php new file mode 100644 index 00000000000..46b785ed75a --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Builder/AssociationMetadataBuilder.php @@ -0,0 +1,217 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\AssociationMetadata; +use Doctrine\ORM\Mapping\CacheMetadata; +use Doctrine\ORM\Mapping\FetchMode; + +abstract class AssociationMetadataBuilder implements Builder +{ + /** @var string */ + protected $name; + + /** @var string */ + protected $targetEntity; + + /** @var string */ + private $sourceEntity; + + /** @var string */ + private $mappedBy; + + /** @var null|string */ + private $inversedBy; + + /** @var string */ + private $fetchMode = FetchMode::LAZY; + + /** @var array */ + private $cascade = []; + + /** @var boolean */ + protected $primaryKey = false; + + /** @var bool */ + private $orphanRemoval = false; + + /** @var null|CacheMetadata */ + private $cache = null; + + public function __construct() + { + } + + /** + * @param string $name + * + * @return self + */ + public function withName(string $name) + { + $this->name = $name; + + return $this; + } + + /** + * @param string $targetEntity + * + * @return self + */ + public function withTargetEntity(string $targetEntity) + { + $this->targetEntity = $targetEntity; + + return $this; + } + + /** + * @param string $sourceEntity + * + * @return self + */ + public function withSourceEntity(string $sourceEntity) + { + $this->sourceEntity = $sourceEntity; + + return $this; + } + + /** + * @param string $mappedBy + * + * @return self + */ + public function withMappedBy(string $mappedBy) + { + $this->mappedBy = $mappedBy; + + return $this; + } + + /** + * @param null|string $inversedBy + * + * @return self + */ + public function withInversedBy(string $inversedBy = null) + { + $this->inversedBy = $inversedBy; + + return $this; + } + + /** + * @param string $fetchMode + * + * @return self + */ + public function withFetchMode(string $fetchMode) + { + $this->fetchMode = $fetchMode; + + return $this; + } + + /** + * @param array $cascade + * + * @return self + */ + public function withCascade(array $cascade) + { + $this->cascade = $cascade; + + return $this; + } + + /** + * @param bool $primaryKey + * + * @return self + */ + public function withPrimaryKey(bool $primaryKey) + { + $this->primaryKey = $primaryKey; + + return $this; + } + + /** + * @param bool $orphanRemoval + * + * @return self + */ + public function withOrphanRemoval(bool $orphanRemoval) + { + $this->orphanRemoval = $orphanRemoval; + + return $this; + } + + /** + * @param null|CacheMetadata $cache + * + * @return self + */ + public function withCache(CacheMetadata $cache = null) + { + $this->cache = $cache; + + return $this; + } + + /** + * @return AssociationMetadata + */ + public function build() + { + $associationMetadata = $this->createMetadataObject(); + + $associationMetadata->setName($this->name); + $associationMetadata->setTargetEntity($this->targetEntity); + + if ($this->sourceEntity !== null) { + $associationMetadata->setSourceEntity($this->sourceEntity); + } + + if ($this->mappedBy !== null) { + $associationMetadata->setMappedBy($this->mappedBy); + } + + if ($this->inversedBy !== null) { + $associationMetadata->setInversedBy($this->inversedBy); + } + + $associationMetadata->setFetchMode($this->fetchMode); + $associationMetadata->setCascade($this->cascade); + $associationMetadata->setPrimaryKey($this->primaryKey); + $associationMetadata->setOrphanRemoval($this->orphanRemoval); + $associationMetadata->setCache($this->cache); + + return $associationMetadata; + } + + /** + * @return AssociationMetadata + */ + abstract protected function createMetadataObject(); +} diff --git a/lib/Doctrine/ORM/Mapping/Builder/JoinTableMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/JoinTableMetadataBuilder.php new file mode 100644 index 00000000000..c109fc73d4c --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Builder/JoinTableMetadataBuilder.php @@ -0,0 +1,84 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\JoinColumnMetadata; +use Doctrine\ORM\Mapping\JoinTableMetadata; + +class JoinTableMetadataBuilder extends TableMetadataBuilder +{ + /** @var array */ + protected $joinColumns = []; + + /** @var array */ + protected $inverseJoinColumns = []; + + /** + * @param JoinColumnMetadata $joinColumn + * + * @return self + */ + public function withJoinColumn(JoinColumnMetadata $joinColumn) + { + $this->joinColumns[] = $joinColumn; + + return $this; + } + + /** + * @param JoinColumnMetadata $joinColumn + * + * @return self + */ + public function withInverseJoinColumn(JoinColumnMetadata $joinColumn) + { + $this->inverseJoinColumns[] = $joinColumn; + + return $this; + } + + /** + * @return JoinTableMetadata + */ + public function build() + { + /** @var JoinTableMetadata $joinTableMetadata */ + $joinTableMetadata = parent::build(); + + foreach ($this->joinColumns as $joinColumn) { + $joinTableMetadata->addJoinColumn($joinColumn); + } + + foreach ($this->inverseJoinColumns as $inverseJoinColumn) { + $joinTableMetadata->addInverseJoinColumn($inverseJoinColumn); + } + + return $joinTableMetadata; + } + + /** + * @return JoinTableMetadata + */ + protected function createMetadataObject() + { + return new JoinTableMetadata(); + } + +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationMetadataBuilder.php new file mode 100644 index 00000000000..e8b59266a98 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationMetadataBuilder.php @@ -0,0 +1,62 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\JoinTableMetadata; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; + +class ManyToManyAssociationMetadataBuilder extends ToManyAssociationMetadataBuilder +{ + /** @var null|JoinTableMetadata */ + private $joinTable; + + /** + * @param null|JoinTableMetadata $joinTable + * + * @return self + */ + public function withJoinTable(JoinTableMetadata $joinTable = null) + { + $this->joinTable = $joinTable; + + return $this; + } + + /** + * @return ManyToManyAssociationMetadata + */ + public function build() + { + /** @var ManyToManyAssociationMetadata $associationMetadata */ + $associationMetadata = parent::build(); + + $associationMetadata->setJoinTable($this->joinTable); + + return $associationMetadata; + } + + /** + * @return ManyToManyAssociationMetadata + */ + protected function createMetadataObject() + { + return new ManyToManyAssociationMetadata($this->name); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/ManyToOneAssociationMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ManyToOneAssociationMetadataBuilder.php new file mode 100644 index 00000000000..4200ab74f92 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Builder/ManyToOneAssociationMetadataBuilder.php @@ -0,0 +1,33 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\ManyToOneAssociationMetadata; + +class ManyToOneAssociationMetadataBuilder extends ToOneAssociationMetadataBuilder +{ + /** + * @return ManyToOneAssociationMetadata + */ + protected function createMetadataObject() + { + return new ManyToOneAssociationMetadata($this->name); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/OneToManyAssociationMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/OneToManyAssociationMetadataBuilder.php new file mode 100644 index 00000000000..7b672ebbfb4 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Builder/OneToManyAssociationMetadataBuilder.php @@ -0,0 +1,33 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; + +class OneToManyAssociationMetadataBuilder extends ToManyAssociationMetadataBuilder +{ + /** + * @return OneToManyAssociationMetadata + */ + protected function createMetadataObject() + { + return new OneToManyAssociationMetadata($this->name); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/OneToOneAssociationMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/OneToOneAssociationMetadataBuilder.php new file mode 100644 index 00000000000..eff7284ad71 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Builder/OneToOneAssociationMetadataBuilder.php @@ -0,0 +1,33 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; + +class OneToOneAssociationMetadataBuilder extends ToOneAssociationMetadataBuilder +{ + /** + * @return OneToOneAssociationMetadata + */ + protected function createMetadataObject() + { + return new OneToOneAssociationMetadata($this->name); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/ToManyAssociationMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ToManyAssociationMetadataBuilder.php new file mode 100644 index 00000000000..b212a2df93b --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Builder/ToManyAssociationMetadataBuilder.php @@ -0,0 +1,70 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\ToManyAssociationMetadata; + +abstract class ToManyAssociationMetadataBuilder extends AssociationMetadataBuilder +{ + /** @var array */ + private $orderBy = []; + + /** @var null|string */ + private $indexedBy; + + /** + * @param string $field + * @param string $direction + * + * @return self + */ + public function withOrderBy(string $field, string $direction) + { + $this->orderBy[$field] = $direction; + + return $this; + } + + /** + * @param null|string $indexedBy + * + * @return self + */ + public function withIndexedBy(string $indexedBy = null) + { + $this->indexedBy = $indexedBy; + + return $this; + } + + /** + * @return ToManyAssociationMetadata + */ + public function build() + { + /** @var ToManyAssociationMetadata $associationMetadata */ + $associationMetadata = parent::build(); + + $associationMetadata->setIndexedBy($this->indexedBy); + $associationMetadata->setOrderBy($this->orderBy); + + return $associationMetadata; + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/ToOneAssociationMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ToOneAssociationMetadataBuilder.php new file mode 100644 index 00000000000..4551a5e34ae --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Builder/ToOneAssociationMetadataBuilder.php @@ -0,0 +1,54 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\JoinColumnMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; + +abstract class ToOneAssociationMetadataBuilder extends AssociationMetadataBuilder +{ + /** @var array */ + private $joinColumns = []; + + /** + * @param JoinColumnMetadata $joinColumn + * + * @return self + */ + public function withJoinColumn(JoinColumnMetadata $joinColumn) + { + $this->joinColumns[] = $joinColumn; + + return $this; + } + + /** + * @return ToOneAssociationMetadata + */ + public function build() + { + /** @var ToOneAssociationMetadata $associationMetadata */ + $associationMetadata = parent::build(); + + $associationMetadata->setJoinColumns($this->joinColumns); + + return $associationMetadata; + } +} \ No newline at end of file From de04217192ff173a0432847dcb69728307eec880 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sun, 12 Mar 2017 20:37:24 -0400 Subject: [PATCH 109/275] Introduced AssociationMetadata and its subclasses as classes. \o/ --- lib/Doctrine/ORM/Annotation/ManyToMany.php | 2 +- lib/Doctrine/ORM/Annotation/ManyToOne.php | 2 +- lib/Doctrine/ORM/Annotation/OneToMany.php | 5 +- lib/Doctrine/ORM/Annotation/OneToOne.php | 2 +- lib/Doctrine/ORM/Cache/CacheFactory.php | 25 +- lib/Doctrine/ORM/Cache/DefaultCache.php | 5 +- .../ORM/Cache/DefaultCacheFactory.php | 27 +- .../ORM/Cache/DefaultCollectionHydrator.php | 4 +- .../ORM/Cache/DefaultEntityHydrator.php | 64 +- lib/Doctrine/ORM/Cache/DefaultQueryCache.php | 57 +- .../AbstractCollectionPersister.php | 42 +- ...rictReadWriteCachedCollectionPersister.php | 14 +- .../ReadOnlyCachedCollectionPersister.php | 5 +- .../ReadWriteCachedCollectionPersister.php | 25 +- .../Entity/AbstractEntityPersister.php | 136 ++-- lib/Doctrine/ORM/EntityRepository.php | 18 +- .../Internal/Hydration/AbstractHydrator.php | 3 +- .../ORM/Internal/Hydration/ArrayHydrator.php | 3 +- .../ORM/Internal/Hydration/ObjectHydrator.php | 70 +- .../ORM/Mapping/AssociationMetadata.php | 42 +- .../Mapping/Builder/AssociationBuilder.php | 257 ------- .../Mapping/Builder/ClassMetadataBuilder.php | 127 ++-- .../Mapping/Builder/ColumnMetadataBuilder.php | 2 +- .../Builder/ManyToManyAssociationBuilder.php | 118 ---- .../Builder/OneToManyAssociationBuilder.php | 73 -- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 574 ++++++++------- .../ORM/Mapping/ClassMetadataFactory.php | 50 +- .../ORM/Mapping/DefaultQuoteStrategy.php | 2 +- .../ORM/Mapping/Driver/AnnotationDriver.php | 554 +++++++++------ lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 179 +++-- .../ORM/Mapping/JoinTableMetadata.php | 11 + .../Mapping/ManyToManyAssociationMetadata.php | 27 + lib/Doctrine/ORM/Mapping/MappingException.php | 13 + .../ORM/Mapping/ToManyAssociationMetadata.php | 36 +- .../ORM/Mapping/ToOneAssociationMetadata.php | 18 +- .../ORM/ORMInvalidArgumentException.php | 59 +- lib/Doctrine/ORM/PersistentCollection.php | 78 ++- .../Collection/ManyToManyPersister.php | 257 ++++--- .../Collection/OneToManyPersister.php | 110 ++- .../Entity/BasicEntityPersister.php | 663 +++++++++++------- .../ORM/Persisters/Entity/EntityPersister.php | 220 +++--- .../Entity/JoinedSubclassPersister.php | 114 +-- .../Entity/SingleTablePersister.php | 25 +- lib/Doctrine/ORM/Query.php | 1 + .../Query/AST/Functions/IdentityFunction.php | 12 +- .../ORM/Query/AST/Functions/SizeFunction.php | 40 +- lib/Doctrine/ORM/Query/Parser.php | 17 +- lib/Doctrine/ORM/Query/QueryException.php | 12 +- .../ORM/Query/ResultSetMappingBuilder.php | 27 +- lib/Doctrine/ORM/Query/SqlWalker.php | 330 +++++---- .../ORM/Tools/DebugUnitOfWorkListener.php | 10 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 308 ++++---- .../ORM/Tools/Export/Driver/PhpExporter.php | 117 ++-- .../ORM/Tools/Export/Driver/XmlExporter.php | 274 ++++---- .../Tools/Pagination/CountOutputWalker.php | 3 +- .../Pagination/LimitSubqueryOutputWalker.php | 3 +- .../Tools/Pagination/LimitSubqueryWalker.php | 19 +- .../ORM/Tools/ResolveTargetEntityListener.php | 67 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 119 ++-- lib/Doctrine/ORM/Tools/SchemaValidator.php | 347 +++++---- lib/Doctrine/ORM/UnitOfWork.php | 526 +++++++------- .../ORM/Utility/IdentifierFlattener.php | 6 +- lib/Doctrine/ORM/Utility/PersisterHelper.php | 33 +- .../Doctrine/Tests/Models/CMS/CmsAddress.php | 13 +- .../DDC1872ExampleEntityWithOverride.php | 29 +- .../Tests/Models/DDC3579/DDC3579Admin.php | 9 +- .../Tests/Models/DDC3579/DDC3579User.php | 11 +- .../Tests/Models/DDC964/DDC964Admin.php | 12 +- .../Tests/Models/DDC964/DDC964User.php | 32 +- .../ORM/Cache/DefaultCacheFactoryTest.php | 86 +-- .../AbstractCollectionPersisterTest.php | 33 +- ...ReadWriteCachedCollectionPersisterTest.php | 10 +- .../ReadOnlyCachedCollectionPersisterTest.php | 10 +- ...ReadWriteCachedCollectionPersisterTest.php | 10 +- .../Entity/AbstractEntityPersisterTest.php | 57 +- .../Functional/ExtraLazyCollectionTest.php | 52 +- .../ManyToManyBasicAssociationTest.php | 3 +- ...nyToManySelfReferentialAssociationTest.php | 25 +- ...anyToManyUnidirectionalAssociationTest.php | 9 +- ...neToManySelfReferentialAssociationTest.php | 2 +- .../OneToOneBidirectionalAssociationTest.php | 4 +- ...OneToOneSelfReferentialAssociationTest.php | 2 +- .../OneToOneUnidirectionalAssociationTest.php | 2 +- .../Tests/ORM/Functional/SQLFilterTest.php | 21 +- ...econdLevelCacheExtraLazyCollectionTest.php | 8 +- .../ORM/Functional/Ticket/DDC1301Test.php | 12 +- .../ORM/Functional/Ticket/DDC1643Test.php | 2 + .../ORM/Functional/Ticket/DDC3300Test.php | 13 +- .../ORM/Functional/Ticket/DDC599Test.php | 8 +- .../ManyToManyCompositeIdForeignKeyTest.php | 77 +- .../ManyToManyCompositeIdTest.php | 49 +- .../ManyToManyExtraLazyTest.php | 62 +- .../ValueConversionType/ManyToManyTest.php | 68 +- .../OneToManyCompositeIdForeignKeyTest.php | 70 +- .../OneToManyCompositeIdTest.php | 45 +- .../OneToManyExtraLazyTest.php | 34 +- .../ValueConversionType/OneToManyTest.php | 58 +- .../OneToOneCompositeIdForeignKeyTest.php | 74 +- .../OneToOneCompositeIdTest.php | 42 +- .../ValueConversionType/OneToOneTest.php | 60 +- .../ORM/Hydration/ObjectHydratorTest.php | 4 +- .../ORM/Hydration/ResultSetMappingTest.php | 21 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 171 +++-- .../ORM/Mapping/AnnotationDriverTest.php | 13 +- .../Builder/ClassMetadataBuilderTest.php | 409 ++++------- .../ORM/Mapping/ClassMetadataFactoryTest.php | 39 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 373 +++++----- .../ORM/Mapping/XmlMappingDriverTest.php | 5 +- .../Doctrine.Tests.Models.CMS.CmsAddress.php | 13 +- .../php/Doctrine.Tests.Models.Cache.City.php | 43 +- ...rine.Tests.Models.DDC3579.DDC3579Admin.php | 11 +- ...trine.Tests.Models.DDC3579.DDC3579User.php | 11 +- ...ctrine.Tests.Models.DDC964.DDC964Admin.php | 12 +- ...octrine.Tests.Models.DDC964.DDC964User.php | 32 +- .../php/Doctrine.Tests.ORM.Mapping.PHPSLC.php | 13 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 56 +- ...sicEntityPersisterCompositeTypeSqlTest.php | 9 +- .../BasicEntityPersisterTypeValueSqlTest.php | 7 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 50 +- .../AbstractClassMetadataExporterTest.php | 92 +-- .../Doctrine.Tests.ORM.Tools.Export.User.php | 110 ++- ...ctrine.Tests.ORM.Tools.Export.User.dcm.xml | 2 +- .../Tools/ResolveTargetEntityListenerTest.php | 22 +- .../Tests/ORM/Tools/SchemaValidatorTest.php | 43 +- .../Doctrine/Tests/OrmFunctionalTestCase.php | 28 +- tests/Doctrine/Tests/TestUtil.php | 3 +- 126 files changed, 4597 insertions(+), 4498 deletions(-) delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/OneToManyAssociationBuilder.php diff --git a/lib/Doctrine/ORM/Annotation/ManyToMany.php b/lib/Doctrine/ORM/Annotation/ManyToMany.php index 6b2330fe0f1..916d448cc32 100644 --- a/lib/Doctrine/ORM/Annotation/ManyToMany.php +++ b/lib/Doctrine/ORM/Annotation/ManyToMany.php @@ -43,7 +43,7 @@ final class ManyToMany implements Annotation /** * @var array */ - public $cascade; + public $cascade = []; /** * The fetching strategy to use for the association. diff --git a/lib/Doctrine/ORM/Annotation/ManyToOne.php b/lib/Doctrine/ORM/Annotation/ManyToOne.php index 09acef71a19..2885253fdcd 100644 --- a/lib/Doctrine/ORM/Annotation/ManyToOne.php +++ b/lib/Doctrine/ORM/Annotation/ManyToOne.php @@ -33,7 +33,7 @@ final class ManyToOne implements Annotation /** * @var array */ - public $cascade; + public $cascade = []; /** * The fetching strategy to use for the association. diff --git a/lib/Doctrine/ORM/Annotation/OneToMany.php b/lib/Doctrine/ORM/Annotation/OneToMany.php index 3ef9d38338d..e1a764a5bf7 100644 --- a/lib/Doctrine/ORM/Annotation/OneToMany.php +++ b/lib/Doctrine/ORM/Annotation/OneToMany.php @@ -18,7 +18,6 @@ */ namespace Doctrine\ORM\Annotation; -use Doctrine\ORM\Mapping\FetchMode; /** * @Annotation @@ -39,7 +38,7 @@ final class OneToMany implements Annotation /** * @var array */ - public $cascade; + public $cascade = []; /** * The fetching strategy to use for the association. @@ -48,7 +47,7 @@ final class OneToMany implements Annotation * * @Enum({"LAZY", "EAGER", "EXTRA_LAZY"}) */ - public $fetch = FetchMode::LAZY; + public $fetch = 'LAZY'; /** * @var boolean diff --git a/lib/Doctrine/ORM/Annotation/OneToOne.php b/lib/Doctrine/ORM/Annotation/OneToOne.php index 8c70212bed5..a298a4ce3a3 100644 --- a/lib/Doctrine/ORM/Annotation/OneToOne.php +++ b/lib/Doctrine/ORM/Annotation/OneToOne.php @@ -43,7 +43,7 @@ final class OneToOne implements Annotation /** * @var array */ - public $cascade; + public $cascade = []; /** * The fetching strategy to use for the association. diff --git a/lib/Doctrine/ORM/Cache/CacheFactory.php b/lib/Doctrine/ORM/Cache/CacheFactory.php index 047a1bee1ff..f6a5a5c683d 100644 --- a/lib/Doctrine/ORM/Cache/CacheFactory.php +++ b/lib/Doctrine/ORM/Cache/CacheFactory.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Cache; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\CacheMetadata; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\EntityManagerInterface; @@ -43,18 +44,26 @@ interface CacheFactory * * @return \Doctrine\ORM\Cache\Persister\Entity\CachedEntityPersister */ - public function buildCachedEntityPersister(EntityManagerInterface $em, EntityPersister $persister, ClassMetadata $metadata); + public function buildCachedEntityPersister( + EntityManagerInterface $em, + EntityPersister $persister, + ClassMetadata $metadata + ); /** * Build a collection persister for the given relation mapping. * - * @param \Doctrine\ORM\EntityManagerInterface $em The entity manager. - * @param \Doctrine\ORM\Persisters\Collection\CollectionPersister $persister The collection persister that will be cached. - * @param array $mapping The association mapping. + * @param \Doctrine\ORM\EntityManagerInterface $em The entity manager. + * @param \Doctrine\ORM\Persisters\Collection\CollectionPersister $persister The collection persister that will be cached. + * @param \Doctrine\ORM\Mapping\AssociationMetadata $association The association mapping. * * @return \Doctrine\ORM\Cache\Persister\Collection\CachedCollectionPersister */ - public function buildCachedCollectionPersister(EntityManagerInterface $em, CollectionPersister $persister, array $mapping); + public function buildCachedCollectionPersister( + EntityManagerInterface $em, + CollectionPersister $persister, + AssociationMetadata $association + ); /** * Build a query cache based on the given region name @@ -79,12 +88,12 @@ public function buildEntityHydrator(EntityManagerInterface $em, ClassMetadata $m /** * Build a collection hydrator * - * @param \Doctrine\ORM\EntityManagerInterface $em The Entity manager. - * @param array $mapping The association mapping. + * @param \Doctrine\ORM\EntityManagerInterface $em The Entity manager. + * @param \Doctrine\ORM\Mapping\AssociationMetadata $association The association mapping. * * @return \Doctrine\ORM\Cache\CollectionHydrator The built collection hydrator. */ - public function buildCollectionHydrator(EntityManagerInterface $em, array $mapping); + public function buildCollectionHydrator(EntityManagerInterface $em, AssociationMetadata $association); /** * Build a cache region diff --git a/lib/Doctrine/ORM/Cache/DefaultCache.php b/lib/Doctrine/ORM/Cache/DefaultCache.php index 80fbd814388..f2c84636571 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCache.php +++ b/lib/Doctrine/ORM/Cache/DefaultCache.php @@ -25,6 +25,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Cache\Persister\CachedPersister; +use Doctrine\ORM\Mapping\ToManyAssociationMetadata; use Doctrine\ORM\ORMInvalidArgumentException; /** @@ -218,10 +219,8 @@ public function evictCollectionRegions() $metadatas = $this->em->getMetadataFactory()->getAllMetadata(); foreach ($metadatas as $metadata) { - foreach ($metadata->associationMappings as $association) { - - if ( ! $association['type'] & ClassMetadata::TO_MANY) { + if (! $association instanceof ToManyAssociationMetadata) { continue; } diff --git a/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php b/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php index 3a6200570bb..e2da5cf7c92 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php +++ b/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php @@ -35,6 +35,7 @@ use Doctrine\ORM\Cache\Region\FileLockRegion; use Doctrine\ORM\Cache\Region\UpdateTimestampCache; use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\Builder\CacheMetadataBuilder; use Doctrine\ORM\Mapping\CacheMetadata; use Doctrine\ORM\Mapping\CacheUsage; @@ -118,7 +119,11 @@ public function setTimestampRegion(TimestampRegion $region) /** * {@inheritdoc} */ - public function buildCachedEntityPersister(EntityManagerInterface $em, EntityPersister $persister, ClassMetadata $metadata) + public function buildCachedEntityPersister( + EntityManagerInterface $em, + EntityPersister $persister, + ClassMetadata $metadata + ) { $cache = $metadata->cache; $region = $this->getRegion($cache); @@ -142,24 +147,30 @@ public function buildCachedEntityPersister(EntityManagerInterface $em, EntityPer /** * {@inheritdoc} */ - public function buildCachedCollectionPersister(EntityManagerInterface $em, CollectionPersister $persister, array $mapping) + public function buildCachedCollectionPersister( + EntityManagerInterface $em, + CollectionPersister $persister, + AssociationMetadata $association + ) { - $cache = $mapping['cache']; + $cache = $association->getCache(); $region = $this->getRegion($cache); $usage = $cache->getUsage(); switch ($usage) { case CacheUsage::READ_ONLY: - return new ReadOnlyCachedCollectionPersister($persister, $region, $em, $mapping); + return new ReadOnlyCachedCollectionPersister($persister, $region, $em, $association); case CacheUsage::READ_WRITE: - return new ReadWriteCachedCollectionPersister($persister, $region, $em, $mapping); + return new ReadWriteCachedCollectionPersister($persister, $region, $em, $association); case CacheUsage::NONSTRICT_READ_WRITE: - return new NonStrictReadWriteCachedCollectionPersister($persister, $region, $em, $mapping); + return new NonStrictReadWriteCachedCollectionPersister($persister, $region, $em, $association); default: - throw new \InvalidArgumentException(sprintf("Unrecognized access strategy type [%s]", $usage)); + throw new \InvalidArgumentException( + sprintf("Unrecognized access strategy type [%s]", $usage) + ); } } @@ -181,7 +192,7 @@ public function buildQueryCache(EntityManagerInterface $em, $regionName = null) /** * {@inheritdoc} */ - public function buildCollectionHydrator(EntityManagerInterface $em, array $mapping) + public function buildCollectionHydrator(EntityManagerInterface $em, AssociationMetadata $association) { return new DefaultCollectionHydrator($em); } diff --git a/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php b/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php index f12ccf50a78..37ff4378f77 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php @@ -76,9 +76,9 @@ public function buildCacheEntry(ClassMetadata $metadata, CollectionCacheKey $key */ public function loadCacheEntry(ClassMetadata $metadata, CollectionCacheKey $key, CollectionCacheEntry $entry, PersistentCollection $collection) { - $assoc = $metadata->associationMappings[$key->association]; /* @var $targetPersister \Doctrine\ORM\Cache\Persister\CachedPersister */ - $targetPersister = $this->uow->getEntityPersister($assoc['targetEntity']); + $association = $metadata->associationMappings[$key->association]; + $targetPersister = $this->uow->getEntityPersister($association->getTargetEntity()); $targetRegion = $targetPersister->getCacheRegion(); $list = []; diff --git a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php index 79f4891b620..aed9337de81 100644 --- a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php @@ -23,6 +23,8 @@ use Doctrine\Common\Util\ClassUtils; use Doctrine\ORM\Mapping\FetchMode; +use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\Query; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\EntityManagerInterface; @@ -76,22 +78,24 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e $data = $this->uow->getOriginalEntityData($entity); $data = array_merge($data, $metadata->getIdentifierValues($entity)); // why update has no identifier values ? - foreach ($metadata->associationMappings as $name => $assoc) { + foreach ($metadata->associationMappings as $name => $association) { if ( ! isset($data[$name])) { continue; } - if (! ($assoc['type'] & ClassMetadata::TO_ONE)) { + if (! $association instanceof ToOneAssociationMetadata) { unset($data[$name]); continue; } - if (! isset($assoc['cache'])) { - $targetClassMetadata = $this->em->getClassMetadata($assoc['targetEntity']); - $owningAssociation = ( ! $assoc['isOwningSide']) - ? $targetClassMetadata->associationMappings[$assoc['mappedBy']] - : $assoc; + $targetEntity = $association->getTargetEntity(); + $targetClassMetadata = $this->em->getClassMetadata($targetEntity); + + if (! $association->getCache()) { + $owningAssociation = ! $association->isOwningSide() + ? $targetClassMetadata->associationMappings[$association->getMappedBy()] + : $association; $associationIds = $this->identifierFlattener->flattenIdentifier( $targetClassMetadata, $targetClassMetadata->getIdentifierValues($data[$name]) @@ -103,7 +107,7 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e // $fieldName = "name" // $fieldColumnName = "custom_name" if (($property = $targetClassMetadata->getProperty($fieldName)) !== null) { - foreach ($owningAssociation['joinColumns'] as $joinColumn) { + foreach ($owningAssociation->getJoinColumns() as $joinColumn) { // $joinColumnName = "custom_name" // $joinColumnReferencedColumnName = "other_side_of_assoc_column_name" if ($joinColumn->getReferencedColumnName() !== $property->getColumnName()) { @@ -118,10 +122,10 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e continue; } - $targetAssoc = $targetClassMetadata->associationMappings[$fieldName]; + $targetAssociation = $targetClassMetadata->associationMappings[$fieldName]; - foreach ($assoc['joinColumns'] as $assocJoinColumn) { - foreach ($targetAssoc['joinColumns'] as $targetAssocJoinColumn) { + foreach ($association->getJoinColumns() as $assocJoinColumn) { + foreach ($targetAssociation->getJoinColumns() as $targetAssocJoinColumn) { if ($assocJoinColumn->getReferencedColumnName() !== $targetAssocJoinColumn->getColumnName()) { continue; } @@ -134,7 +138,7 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e continue; } - if ( ! isset($assoc['id'])) { + if (! $association->isPrimaryKey()) { $targetClass = ClassUtils::getClass($data[$name]); $targetId = $this->uow->getEntityIdentifier($data[$name]); $data[$name] = new AssociationCacheEntry($targetClass, $targetId); @@ -147,18 +151,19 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e ? $this->uow->getEntityIdentifier($data[$name]) : $data[$name]; + // @todo guilhermeblanco From my initial research, we could move the Identifier Flattener to EM and consume + // @todo guilhermeblanco it here, unifying the hash generation that happens everywhere in the codebase. // @TODO - fix it ! handle UnitOfWork#createEntity hash generation if ( ! is_array($targetId)) { - $joinColumns = $assoc['joinColumns']; + $joinColumns = $association->getJoinColumns(); $columnName = $joinColumns[0]->getAliasedName() ?? $joinColumns[0]->getColumnName(); $data[$columnName] = $targetId; - $targetEntity = $this->em->getClassMetadata($assoc['targetEntity']); - $targetId = [$targetEntity->identifier[0] => $targetId]; + $targetId = [$targetClassMetadata->identifier[0] => $targetId]; } - $data[$name] = new AssociationCacheEntry($assoc['targetEntity'], $targetId); + $data[$name] = new AssociationCacheEntry($targetEntity, $targetId); } return new EntityCacheEntry($metadata->name, $data); @@ -167,7 +172,12 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e /** * {@inheritdoc} */ - public function loadCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, EntityCacheEntry $entry, $entity = null) + public function loadCacheEntry( + ClassMetadata $metadata, + EntityCacheKey $key, + EntityCacheEntry $entry, + $entity = null + ) { $data = $entry->data; $hints = self::$hints; @@ -177,14 +187,17 @@ public function loadCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, Ent $hints[Query::HINT_REFRESH_ENTITY] = $entity; } - foreach ($metadata->associationMappings as $name => $assoc) { - if (! isset($assoc['cache']) || ! isset($data[$name])) { + foreach ($metadata->associationMappings as $name => $association) { + if (! $association->getCache() || ! isset($data[$name])) { continue; } $assocClass = $data[$name]->class; $assocId = $data[$name]->identifier; - $isEagerLoad = ($assoc['fetch'] === FetchMode::EAGER || ($assoc['type'] === ClassMetadata::ONE_TO_ONE && ! $assoc['isOwningSide'])); + $isEagerLoad = ( + $association->getFetchMode() === FetchMode::EAGER || + ($association instanceof OneToOneAssociationMetadata && ! $association->isOwningSide()) + ); if ( ! $isEagerLoad) { $data[$name] = $this->em->getReference($assocClass, $assocId); @@ -192,9 +205,10 @@ public function loadCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, Ent continue; } - $assocMetadata = $this->em->getClassMetadata($assoc['targetEntity']); + $targetEntity = $association->getTargetEntity(); + $assocMetadata = $this->em->getClassMetadata($targetEntity); $assocKey = new EntityCacheKey($assocMetadata->rootEntityName, $assocId); - $assocPersister = $this->uow->getEntityPersister($assoc['targetEntity']); + $assocPersister = $this->uow->getEntityPersister($targetEntity); $assocRegion = $assocPersister->getCacheRegion(); $assocEntry = $assocRegion->get($assocKey); @@ -202,7 +216,11 @@ public function loadCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, Ent return null; } - $data[$name] = $this->uow->createEntity($assocEntry->class, $assocEntry->resolveAssociationEntries($this->em), $hints); + $data[$name] = $this->uow->createEntity( + $assocEntry->class, + $assocEntry->resolveAssociationEntries($this->em), + $hints + ); } if ($entity !== null) { diff --git a/lib/Doctrine/ORM/Cache/DefaultQueryCache.php b/lib/Doctrine/ORM/Cache/DefaultQueryCache.php index 3ac20654780..3ade298e68f 100644 --- a/lib/Doctrine/ORM/Cache/DefaultQueryCache.php +++ b/lib/Doctrine/ORM/Cache/DefaultQueryCache.php @@ -23,6 +23,8 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Cache\Persister\CachedPersister; use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\AssociationMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\PersistentCollection; @@ -137,7 +139,11 @@ public function get(QueryCacheKey $key, ResultSetMapping $rsm, array $hints = [] } if ( ! $hasRelation) { - $result[$index] = $this->uow->createEntity($entityEntry->class, $entityEntry->resolveAssociationEntries($this->em), self::$hints); + $result[$index] = $this->uow->createEntity( + $entityEntry->class, + $entityEntry->resolveAssociationEntries($this->em), + self::$hints + ); continue; } @@ -149,10 +155,11 @@ public function get(QueryCacheKey $key, ResultSetMapping $rsm, array $hints = [] $assocRegion = $assocPersister->getCacheRegion(); $assocMetadata = $this->em->getClassMetadata($assoc['targetEntity']); - if ($assoc['type'] & ClassMetadata::TO_ONE) { - - if (($assocEntry = $assocRegion->get($assocKey = new EntityCacheKey($assocMetadata->rootEntityName, $assoc['identifier']))) === null) { + // *-to-one association + if (isset($assoc['identifier'])) { + $assocKey = new EntityCacheKey($assocMetadata->rootEntityName, $assoc['identifier']); + if (($assocEntry = $assocRegion->get($assocKey)) === null) { if ($this->cacheLogger !== null) { $this->cacheLogger->entityCacheMiss($assocRegion->getName(), $assocKey); } @@ -162,7 +169,11 @@ public function get(QueryCacheKey $key, ResultSetMapping $rsm, array $hints = [] return null; } - $data[$name] = $this->uow->createEntity($assocEntry->class, $assocEntry->resolveAssociationEntries($this->em), self::$hints); + $data[$name] = $this->uow->createEntity( + $assocEntry->class, + $assocEntry->resolveAssociationEntries($this->em), + self::$hints + ); if ($this->cacheLogger !== null) { $this->cacheLogger->entityCacheHit($assocRegion->getName(), $assocKey); @@ -196,7 +207,11 @@ public function get(QueryCacheKey $key, ResultSetMapping $rsm, array $hints = [] return null; } - $element = $this->uow->createEntity($assocEntry->class, $assocEntry->resolveAssociationEntries($this->em), self::$hints); + $element = $this->uow->createEntity( + $assocEntry->class, + $assocEntry->resolveAssociationEntries($this->em), + self::$hints + ); $collection->hydrateSet($assocIndex, $element); @@ -287,7 +302,7 @@ public function put(QueryCacheKey $key, ResultSetMapping $rsm, $result, array $h // root entity association if ($rootAlias === $parentAlias) { // Cancel put result if association put fail - if ( ($assocInfo = $this->storeAssociationCache($key, $assoc, $assocValue)) === null) { + if (($assocInfo = $this->storeAssociationCache($key, $assoc, $assocValue)) === null) { return false; } @@ -321,25 +336,25 @@ public function put(QueryCacheKey $key, ResultSetMapping $rsm, $result, array $h /** * @param \Doctrine\ORM\Cache\QueryCacheKey $key - * @param array $assoc + * @param AssociationMetadata $assoc * @param mixed $assocValue * * @return array|null */ - private function storeAssociationCache(QueryCacheKey $key, array $assoc, $assocValue) + private function storeAssociationCache(QueryCacheKey $key, AssociationMetadata $association, $assocValue) { - $assocPersister = $this->uow->getEntityPersister($assoc['targetEntity']); + $assocPersister = $this->uow->getEntityPersister($association->getTargetEntity()); $assocMetadata = $assocPersister->getClassMetadata(); $assocRegion = $assocPersister->getCacheRegion(); // Handle *-to-one associations - if ($assoc['type'] & ClassMetadata::TO_ONE) { + if ($association instanceof ToOneAssociationMetadata) { $assocIdentifier = $this->uow->getEntityIdentifier($assocValue); $entityKey = new EntityCacheKey($assocMetadata->rootEntityName, $assocIdentifier); - if ( ! $assocValue instanceof Proxy && ($key->cacheMode & Cache::MODE_REFRESH) || ! $assocRegion->contains($entityKey)) { + if ((! $assocValue instanceof Proxy && ($key->cacheMode & Cache::MODE_REFRESH)) || ! $assocRegion->contains($entityKey)) { // Entity put fail - if ( ! $assocPersister->storeEntityCache($assocValue, $entityKey)) { + if (! $assocPersister->storeEntityCache($assocValue, $entityKey)) { return null; } } @@ -347,7 +362,6 @@ private function storeAssociationCache(QueryCacheKey $key, array $assoc, $assocV return [ 'targetEntity' => $assocMetadata->rootEntityName, 'identifier' => $assocIdentifier, - 'type' => $assoc['type'] ]; } @@ -369,9 +383,8 @@ private function storeAssociationCache(QueryCacheKey $key, array $assoc, $assocV } return [ - 'targetEntity' => $assocMetadata->rootEntityName, - 'type' => $assoc['type'], - 'list' => $list, + 'targetEntity' => $assocMetadata->rootEntityName, + 'list' => $list, ]; } @@ -412,10 +425,10 @@ private function getAssociationValue(ResultSetMapping $rsm, $assocAlias, $entity */ private function getAssociationPathValue($value, array $path) { - $mapping = array_shift($path); - $metadata = $this->em->getClassMetadata($mapping['class']); - $assoc = $metadata->associationMappings[$mapping['field']]; - $value = $metadata->getFieldValue($value, $mapping['field']); + $mapping = array_shift($path); + $metadata = $this->em->getClassMetadata($mapping['class']); + $association = $metadata->associationMappings[$mapping['field']]; + $value = $metadata->getFieldValue($value, $mapping['field']); if ($value === null) { return null; @@ -426,7 +439,7 @@ private function getAssociationPathValue($value, array $path) } // Handle *-to-one associations - if ($assoc['type'] & ClassMetadata::TO_ONE) { + if ($association instanceof ToOneAssociationMetadata) { return $this->getAssociationPathValue($value, $path); } diff --git a/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php b/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php index 7a10d17d932..4b1cf95be06 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php @@ -24,6 +24,8 @@ use Doctrine\ORM\Cache\EntityCacheKey; use Doctrine\ORM\Cache\CollectionCacheKey; use Doctrine\ORM\Cache\Persister\Entity\CachedEntityPersister; +use Doctrine\ORM\Mapping\AssociationMetadata; +use Doctrine\ORM\Mapping\ToManyAssociationMetadata; use Doctrine\ORM\Persisters\Collection\CollectionPersister; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\EntityManagerInterface; @@ -63,7 +65,7 @@ abstract class AbstractCollectionPersister implements CachedCollectionPersister protected $targetEntity; /** - * @var array + * @var \Doctrine\ORM\Mapping\AssociationMetadata */ protected $association; @@ -93,12 +95,17 @@ abstract class AbstractCollectionPersister implements CachedCollectionPersister protected $cacheLogger; /** - * @param \Doctrine\ORM\Persisters\Collection\CollectionPersister $persister The collection persister that will be cached. - * @param \Doctrine\ORM\Cache\Region $region The collection region. - * @param \Doctrine\ORM\EntityManagerInterface $em The entity manager. - * @param array $association The association mapping. + * @param CollectionPersister $persister The collection persister that will be cached. + * @param Region $region The collection region. + * @param EntityManagerInterface $em The entity manager. + * @param AssociationMetadata $association The association mapping. */ - public function __construct(CollectionPersister $persister, Region $region, EntityManagerInterface $em, array $association) + public function __construct( + CollectionPersister $persister, + Region $region, + EntityManagerInterface $em, + AssociationMetadata $association + ) { $configuration = $em->getConfiguration(); $cacheConfig = $configuration->getSecondLevelCacheConfiguration(); @@ -112,8 +119,8 @@ public function __construct(CollectionPersister $persister, Region $region, Enti $this->metadataFactory = $em->getMetadataFactory(); $this->cacheLogger = $cacheConfig->getCacheLogger(); $this->hydrator = $cacheFactory->buildCollectionHydrator($em, $association); - $this->sourceEntity = $em->getClassMetadata($association['sourceEntity']); - $this->targetEntity = $em->getClassMetadata($association['targetEntity']); + $this->sourceEntity = $em->getClassMetadata($association->getSourceEntity()); + $this->targetEntity = $em->getClassMetadata($association->getTargetEntity()); } /** @@ -165,13 +172,13 @@ public function loadCollectionCache(PersistentCollection $collection, Collection public function storeCollectionCache(CollectionCacheKey $key, $elements) { /* @var $targetPersister CachedEntityPersister */ - $associationMapping = $this->sourceEntity->associationMappings[$key->association]; - $targetPersister = $this->uow->getEntityPersister($this->targetEntity->rootEntityName); - $targetRegion = $targetPersister->getCacheRegion(); - $targetHydrator = $targetPersister->getEntityHydrator(); + $association = $this->sourceEntity->associationMappings[$key->association]; + $targetPersister = $this->uow->getEntityPersister($this->targetEntity->rootEntityName); + $targetRegion = $targetPersister->getCacheRegion(); + $targetHydrator = $targetPersister->getEntityHydrator(); // Only preserve ordering if association configured it - if ( ! (isset($associationMapping['indexBy']) && $associationMapping['indexBy'])) { + if (! ($association instanceof ToManyAssociationMetadata && $association->getIndexedBy())) { // Elements may be an array or a Collection $elements = array_values(is_array($elements) ? $elements : $elements->getValues()); } @@ -224,9 +231,10 @@ public function containsKey(PersistentCollection $collection, $key) */ public function count(PersistentCollection $collection) { - $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); - $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $this->association['fieldName'], $ownerId); - $entry = $this->region->get($key); + $fieldName = $this->association->getName(); + $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); + $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $fieldName, $ownerId); + $entry = $this->region->get($key); if ($entry !== null) { return count($entry->identifiers); @@ -282,7 +290,7 @@ protected function evictCollectionCache(PersistentCollection $collection) { $key = new CollectionCacheKey( $this->sourceEntity->rootEntityName, - $this->association['fieldName'], + $this->association->getName(), $this->uow->getEntityIdentifier($collection->getOwner()) ); diff --git a/lib/Doctrine/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php b/lib/Doctrine/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php index fbd46f6eafe..92c9d3cbaa4 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php @@ -21,6 +21,7 @@ namespace Doctrine\ORM\Cache\Persister\Collection; use Doctrine\ORM\Cache\CollectionCacheKey; +use Doctrine\ORM\Mapping\ToManyAssociationMetadata; use Doctrine\ORM\PersistentCollection; /** @@ -62,8 +63,9 @@ public function afterTransactionRolledBack() */ public function delete(PersistentCollection $collection) { - $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); - $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $this->association['fieldName'], $ownerId); + $fieldName = $this->association->getName(); + $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); + $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $fieldName, $ownerId); $this->persister->delete($collection); @@ -82,11 +84,13 @@ public function update(PersistentCollection $collection) return; } - $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); - $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $this->association['fieldName'], $ownerId); + $fieldName = $this->association->getName(); + $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); + $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $fieldName, $ownerId); // Invalidate non initialized collections OR ordered collection - if ($isDirty && ! $isInitialized || isset($this->association['orderBy'])) { + if (($isDirty && ! $isInitialized) || + ($this->association instanceof ToManyAssociationMetadata && $this->association->getOrderBy())) { $this->persister->update($collection); $this->queuedCache['delete'][spl_object_hash($collection)] = $key; diff --git a/lib/Doctrine/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php b/lib/Doctrine/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php index dfc816c5ab9..f2fc0309b75 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php @@ -36,7 +36,10 @@ class ReadOnlyCachedCollectionPersister extends NonStrictReadWriteCachedCollecti public function update(PersistentCollection $collection) { if ($collection->isDirty() && $collection->getSnapshot()) { - throw CacheException::updateReadOnlyCollection(ClassUtils::getClass($collection->getOwner()), $this->association['fieldName']); + throw CacheException::updateReadOnlyCollection( + ClassUtils::getClass($collection->getOwner()), + $this->association->getName() + ); } parent::update($collection); diff --git a/lib/Doctrine/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php b/lib/Doctrine/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php index 74bb044451b..cbccd9b0e79 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php @@ -20,25 +20,32 @@ namespace Doctrine\ORM\Cache\Persister\Collection; -use Doctrine\ORM\Persisters\Collection\CollectionPersister; -use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Cache\CollectionCacheKey; use Doctrine\ORM\Cache\ConcurrentRegion; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\PersistentCollection; +use Doctrine\ORM\Persisters\Collection\CollectionPersister; /** * @author Fabio B. Silva + * @author Guilherme Blanco * @since 2.5 */ class ReadWriteCachedCollectionPersister extends AbstractCollectionPersister { /** - * @param \Doctrine\ORM\Persisters\Collection\CollectionPersister $persister The collection persister that will be cached. - * @param \Doctrine\ORM\Cache\ConcurrentRegion $region The collection region. - * @param \Doctrine\ORM\EntityManagerInterface $em The entity manager. - * @param array $association The association mapping. + * @param CollectionPersister $persister The collection persister that will be cached. + * @param ConcurrentRegion $region The collection region. + * @param EntityManagerInterface $em The entity manager. + * @param AssociationMetadata $association The association mapping. */ - public function __construct(CollectionPersister $persister, ConcurrentRegion $region, EntityManagerInterface $em, array $association) + public function __construct( + CollectionPersister $persister, + ConcurrentRegion $region, + EntityManagerInterface $em, + AssociationMetadata $association + ) { parent::__construct($persister, $region, $em, $association); } @@ -89,7 +96,7 @@ public function afterTransactionRolledBack() public function delete(PersistentCollection $collection) { $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); - $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $this->association['fieldName'], $ownerId); + $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $this->association->getName(), $ownerId); $lock = $this->region->lock($key); $this->persister->delete($collection); @@ -119,7 +126,7 @@ public function update(PersistentCollection $collection) $this->persister->update($collection); $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); - $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $this->association['fieldName'], $ownerId); + $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $this->association->getName(), $ownerId); $lock = $this->region->lock($key); if ($lock === null) { diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php index ef9ecef426e..2bf1992fe10 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php @@ -27,8 +27,13 @@ use Doctrine\ORM\Cache\TimestampCacheKey; use Doctrine\ORM\Cache\QueryCacheKey; use Doctrine\ORM\Cache\Persister\CachedPersister; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FetchMode; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; +use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; +use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Persisters\Entity\EntityPersister; @@ -153,9 +158,15 @@ public function getInserts() /** * {@inheritdoc} */ - public function getSelectSQL($criteria, $assoc = null, $lockMode = null, $limit = null, $offset = null, array $orderBy = null) - { - return $this->persister->getSelectSQL($criteria, $assoc, $lockMode, $limit, $offset, $orderBy); + public function getSelectSQL( + $criteria, + AssociationMetadata $association = null, + $lockMode = null, + $limit = null, + $offset = null, + array $orderBy = [] + ) { + return $this->persister->getSelectSQL($criteria, $association, $lockMode, $limit, $offset, $orderBy); } /** @@ -185,9 +196,13 @@ public function getResultSetMapping() /** * {@inheritdoc} */ - public function getSelectConditionStatementSQL($field, $value, $assoc = null, $comparison = null) - { - return $this->persister->getSelectConditionStatementSQL($field, $value, $assoc, $comparison); + public function getSelectConditionStatementSQL( + $field, + $value, + AssociationMetadata $association = null, + $comparison = null + ) { + return $this->persister->getSelectConditionStatementSQL($field, $value, $association, $comparison); } /** @@ -252,12 +267,11 @@ private function storeJoinedAssociations($entity) if ($this->joinedAssociations === null) { $associations = []; - foreach ($this->class->associationMappings as $name => $assoc) { - if (isset($assoc['cache']) && - ($assoc['type'] & ClassMetadata::TO_ONE) && - ($assoc['fetch'] === FetchMode::EAGER || ! $assoc['isOwningSide'])) { - - $associations[] = $name; + foreach ($this->class->associationMappings as $association) { + if ($association->getCache() && + $association instanceof ToOneAssociationMetadata && + ($association->getFetchMode() === FetchMode::EAGER || ! $association->isOwningSide())) { + $associations[] = $association->getName(); } } @@ -265,17 +279,18 @@ private function storeJoinedAssociations($entity) } foreach ($this->joinedAssociations as $name) { - $assoc = $this->class->associationMappings[$name]; - $assocEntity = $this->class->getFieldValue($entity, $name); + $association = $this->class->associationMappings[$name]; + $assocEntity = $association->getValue($entity); + $targetEntity = $association->getTargetEntity(); if ($assocEntity === null) { continue; } $assocId = $this->uow->getEntityIdentifier($assocEntity); - $assocMetadata = $this->metadataFactory->getMetadataFor($assoc['targetEntity']); + $assocMetadata = $this->metadataFactory->getMetadataFor($targetEntity); $assocKey = new EntityCacheKey($assocMetadata->rootEntityName, $assocId); - $assocPersister = $this->uow->getEntityPersister($assoc['targetEntity']); + $assocPersister = $this->uow->getEntityPersister($targetEntity); $assocPersister->storeEntityCache($assocEntity, $assocKey); } @@ -328,17 +343,25 @@ public function getClassMetadata() /** * {@inheritdoc} */ - public function getManyToManyCollection(array $assoc, $sourceEntity, $offset = null, $limit = null) - { - return $this->persister->getManyToManyCollection($assoc, $sourceEntity, $offset, $limit); + public function getManyToManyCollection( + ManyToManyAssociationMetadata $association, + $sourceEntity, + $offset = null, + $limit = null + ) { + return $this->persister->getManyToManyCollection($association, $sourceEntity, $offset, $limit); } /** * {@inheritdoc} */ - public function getOneToManyCollection(array $assoc, $sourceEntity, $offset = null, $limit = null) - { - return $this->persister->getOneToManyCollection($assoc, $sourceEntity, $offset, $limit); + public function getOneToManyCollection( + OneToManyAssociationMetadata $association, + $sourceEntity, + $offset = null, + $limit = null + ) { + return $this->persister->getOneToManyCollection($association, $sourceEntity, $offset, $limit); } /** @@ -362,10 +385,17 @@ public function executeInserts() /** * {@inheritdoc} */ - public function load(array $criteria, $entity = null, $assoc = null, array $hints = [], $lockMode = null, $limit = null, array $orderBy = null) - { - if ($entity !== null || $assoc !== null || ! empty($hints) || $lockMode !== null) { - return $this->persister->load($criteria, $entity, $assoc, $hints, $lockMode, $limit, $orderBy); + public function load( + array $criteria, + $entity = null, + AssociationMetadata $association = null, + array $hints = [], + $lockMode = null, + $limit = null, + array $orderBy = null + ) { + if ($entity !== null || $association !== null || ! empty($hints) || $lockMode !== null) { + return $this->persister->load($criteria, $entity, $association, $hints, $lockMode, $limit, $orderBy); } //handle only EntityRepository#findOneBy @@ -384,7 +414,9 @@ public function load(array $criteria, $entity = null, $assoc = null, array $hint return $result[0]; } - if (($result = $this->persister->load($criteria, $entity, $assoc, $hints, $lockMode, $limit, $orderBy)) === null) { + $result = $this->persister->load($criteria, $entity, $association, $hints, $lockMode, $limit, $orderBy); + + if ($result === null) { return null; } @@ -406,7 +438,7 @@ public function load(array $criteria, $entity = null, $assoc = null, array $hint /** * {@inheritdoc} */ - public function loadAll(array $criteria = [], array $orderBy = null, $limit = null, $offset = null) + public function loadAll(array $criteria = [], array $orderBy = [], $limit = null, $offset = null) { $query = $this->persister->getSelectSQL($criteria, null, null, $limit, $offset, $orderBy); $hash = $this->getHash($query, $criteria, null, null, null); @@ -543,19 +575,22 @@ public function loadCriteria(Criteria $criteria) /** * {@inheritdoc} */ - public function loadManyToManyCollection(array $assoc, $sourceEntity, PersistentCollection $coll) - { - $persister = $this->uow->getCollectionPersister($assoc); + public function loadManyToManyCollection( + ManyToManyAssociationMetadata $association, + $sourceEntity, + PersistentCollection $collection + ) { + $persister = $this->uow->getCollectionPersister($association); $hasCache = ($persister instanceof CachedPersister); $key = null; if ( ! $hasCache) { - return $this->persister->loadManyToManyCollection($assoc, $sourceEntity, $coll); + return $this->persister->loadManyToManyCollection($association, $sourceEntity, $collection); } - $ownerId = $this->uow->getEntityIdentifier($coll->getOwner()); - $key = $this->buildCollectionCacheKey($assoc, $ownerId); - $list = $persister->loadCollectionCache($coll, $key); + $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); + $key = $this->buildCollectionCacheKey($association, $ownerId); + $list = $persister->loadCollectionCache($collection, $key); if ($list !== null) { if ($this->cacheLogger) { @@ -565,7 +600,7 @@ public function loadManyToManyCollection(array $assoc, $sourceEntity, Persistent return $list; } - $list = $this->persister->loadManyToManyCollection($assoc, $sourceEntity, $coll); + $list = $this->persister->loadManyToManyCollection($association, $sourceEntity, $collection); $persister->storeCollectionCache($key, $list); @@ -579,18 +614,21 @@ public function loadManyToManyCollection(array $assoc, $sourceEntity, Persistent /** * {@inheritdoc} */ - public function loadOneToManyCollection(array $assoc, $sourceEntity, PersistentCollection $coll) - { - $persister = $this->uow->getCollectionPersister($assoc); + public function loadOneToManyCollection( + OneToManyAssociationMetadata $association, + $sourceEntity, + PersistentCollection $collection + ) { + $persister = $this->uow->getCollectionPersister($association); $hasCache = ($persister instanceof CachedPersister); if ( ! $hasCache) { - return $this->persister->loadOneToManyCollection($assoc, $sourceEntity, $coll); + return $this->persister->loadOneToManyCollection($association, $sourceEntity, $collection); } - $ownerId = $this->uow->getEntityIdentifier($coll->getOwner()); - $key = $this->buildCollectionCacheKey($assoc, $ownerId); - $list = $persister->loadCollectionCache($coll, $key); + $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); + $key = $this->buildCollectionCacheKey($association, $ownerId); + $list = $persister->loadCollectionCache($collection, $key); if ($list !== null) { if ($this->cacheLogger) { @@ -600,7 +638,7 @@ public function loadOneToManyCollection(array $assoc, $sourceEntity, PersistentC return $list; } - $list = $this->persister->loadOneToManyCollection($assoc, $sourceEntity, $coll); + $list = $this->persister->loadOneToManyCollection($association, $sourceEntity, $collection); $persister->storeCollectionCache($key, $list); @@ -614,9 +652,9 @@ public function loadOneToManyCollection(array $assoc, $sourceEntity, PersistentC /** * {@inheritdoc} */ - public function loadOneToOneEntity(array $assoc, $sourceEntity, array $identifier = []) + public function loadToOneEntity(ToOneAssociationMetadata $association, $sourceEntity, array $identifier = []) { - return $this->persister->loadOneToOneEntity($assoc, $sourceEntity, $identifier); + return $this->persister->loadToOneEntity($association, $sourceEntity, $identifier); } /** @@ -641,11 +679,11 @@ public function refresh(array $id, $entity, $lockMode = null) * * @return CollectionCacheKey */ - protected function buildCollectionCacheKey(array $association, $ownerId) + protected function buildCollectionCacheKey(AssociationMetadata $association, $ownerId) { /** @var ClassMetadata $metadata */ - $metadata = $this->metadataFactory->getMetadataFor($association['sourceEntity']); + $metadata = $this->metadataFactory->getMetadataFor($association->getSourceEntity()); - return new CollectionCacheKey($metadata->rootEntityName, $association['fieldName'], $ownerId); + return new CollectionCacheKey($metadata->rootEntityName, $association->getName(), $ownerId); } } diff --git a/lib/Doctrine/ORM/EntityRepository.php b/lib/Doctrine/ORM/EntityRepository.php index ecd85068d35..c40525924b4 100644 --- a/lib/Doctrine/ORM/EntityRepository.php +++ b/lib/Doctrine/ORM/EntityRepository.php @@ -167,29 +167,31 @@ public function findAll() /** * Finds entities by a set of criteria. * - * @param array $criteria - * @param array|null $orderBy - * @param int|null $limit - * @param int|null $offset + * @param array $criteria + * @param array $orderBy + * @param int|null $limit + * @param int|null $offset * * @return array The objects. + * + * @todo guilhermeblanco Change orderBy to use a blank array by default (requires Common\Persistence change). */ public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) { $persister = $this->em->getUnitOfWork()->getEntityPersister($this->entityName); - return $persister->loadAll($criteria, $orderBy, $limit, $offset); + return $persister->loadAll($criteria, $orderBy !== null ? $orderBy : [], $limit, $offset); } /** * Finds a single entity by a set of criteria. * - * @param array $criteria - * @param array|null $orderBy + * @param array $criteria + * @param array $orderBy * * @return object|null The entity instance or NULL if the entity can not be found. */ - public function findOneBy(array $criteria, array $orderBy = null) + public function findOneBy(array $criteria, array $orderBy = []) { $persister = $this->em->getUnitOfWork()->getEntityPersister($this->entityName); diff --git a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php index d5207c9f42e..0e19bc9a765 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php @@ -472,7 +472,8 @@ protected function registerManaged(ClassMetadata $class, $entity, array $data) } $association = $class->associationMappings[$fieldName]; - $joinColumn = reset($association['joinColumns']); + $joinColumns = $association->getJoinColumns(); + $joinColumn = reset($joinColumns); $id[$fieldName] = $data[$joinColumn->getColumnName()]; } diff --git a/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php index e4a94c5377d..50cd47c6261 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php @@ -19,6 +19,7 @@ namespace Doctrine\ORM\Internal\Hydration; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use PDO; use Doctrine\ORM\Mapping\ClassMetadata; @@ -134,7 +135,7 @@ protected function hydrateRowData(array $row, array &$result) $relation = $parentClass->associationMappings[$relationAlias]; // Check the type of the relation (many or single-valued) - if ( ! ($relation['type'] & ClassMetadata::TO_ONE)) { + if (! $relation instanceof ToOneAssociationMetadata) { $oneToOne = false; if ( ! isset($baseElement[$relationAlias])) { diff --git a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php index bb646f559f7..36ee43f74d7 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php @@ -19,6 +19,8 @@ namespace Doctrine\ORM\Internal\Hydration; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use PDO; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Event\PostLoadEventDispatcher; @@ -80,7 +82,7 @@ class ObjectHydrator extends AbstractHydrator */ protected function prepare() { - if ( ! isset($this->hints[UnitOfWork::HINT_DEFEREAGERLOAD])) { + if (! isset($this->hints[UnitOfWork::HINT_DEFEREAGERLOAD])) { $this->hints[UnitOfWork::HINT_DEFEREAGERLOAD] = true; } @@ -90,43 +92,43 @@ protected function prepare() // Remember which associations are "fetch joined", so that we know where to inject // collection stubs or proxies and where not. - if ( ! isset($this->rsm->relationMap[$dqlAlias])) { + if (! isset($this->rsm->relationMap[$dqlAlias])) { continue; } $parent = $this->rsm->parentAliasMap[$dqlAlias]; - if ( ! isset($this->rsm->aliasMap[$parent])) { + if (! isset($this->rsm->aliasMap[$parent])) { throw HydrationException::parentObjectOfRelationNotFound($dqlAlias, $parent); } $sourceClassName = $this->rsm->aliasMap[$parent]; $sourceClass = $this->getClassMetadata($sourceClassName); - $assoc = $sourceClass->associationMappings[$this->rsm->relationMap[$dqlAlias]]; + $association = $sourceClass->associationMappings[$this->rsm->relationMap[$dqlAlias]]; - $this->hints['fetched'][$parent][$assoc['fieldName']] = true; + $this->hints['fetched'][$parent][$association->getName()] = true; - if ($assoc['type'] === ClassMetadata::MANY_TO_MANY) { + if ($association instanceof ManyToManyAssociationMetadata) { continue; } // Mark any non-collection opposite sides as fetched, too. - if ($assoc['mappedBy']) { - $this->hints['fetched'][$dqlAlias][$assoc['mappedBy']] = true; + if ($association->getMappedBy()) { + $this->hints['fetched'][$dqlAlias][$association->getMappedBy()] = true; continue; } // handle fetch-joined owning side bi-directional one-to-one associations - if ($assoc['inversedBy']) { + if ($association->getInversedBy()) { $class = $this->getClassMetadata($className); - $inverseAssoc = $class->associationMappings[$assoc['inversedBy']]; + $inverseAssoc = $class->associationMappings[$association->getInversedBy()]; - if ( ! ($inverseAssoc['type'] & ClassMetadata::TO_ONE)) { + if (! ($inverseAssoc instanceof ToOneAssociationMetadata)) { continue; } - $this->hints['fetched'][$dqlAlias][$inverseAssoc['fieldName']] = true; + $this->hints['fetched'][$dqlAlias][$inverseAssoc->getName()] = true; } } } @@ -191,10 +193,11 @@ private function initRelatedCollection($entity, $class, $fieldName, $parentDqlAl $value = new ArrayCollection((array) $value); } - if ( ! $value instanceof PersistentCollection) { + if (! $value instanceof PersistentCollection) { $value = new PersistentCollection( - $this->em, $this->metadataCache[$relation['targetEntity']], $value + $this->em, $this->metadataCache[$relation->getTargetEntity()], $value ); + $value->setOwner($entity, $relation); $class->reflFields[$fieldName]->setValue($entity, $value); @@ -203,8 +206,7 @@ private function initRelatedCollection($entity, $class, $fieldName, $parentDqlAl $this->initializedCollections[$oid . $fieldName] = $value; } else if ( isset($this->hints[Query::HINT_REFRESH]) || - isset($this->hints['fetched'][$parentDqlAlias][$fieldName]) && - ! $value->isInitialized() + (isset($this->hints['fetched'][$parentDqlAlias][$fieldName]) && ! $value->isInitialized()) ) { // Is already PersistentCollection, but either REFRESH or FETCH-JOIN and UNINITIALIZED! $value->setDirty(false); @@ -295,7 +297,8 @@ private function getEntityFromIdentityMap($className, array $data) } $association = $class->associationMappings[$fieldName]; - $joinColumn = reset($association['joinColumns']); + $joinColumns = $association->getJoinColumns(); + $joinColumn = reset($joinColumns); $id[$fieldName] = $data[$joinColumn->getColumnName()]; } @@ -381,7 +384,7 @@ protected function hydrateRowData(array $row, array &$result) $oid = spl_object_hash($parentObject); // Check the type of the relation (many or single-valued) - if ( ! ($relation['type'] & ClassMetadata::TO_ONE)) { + if (! ($relation instanceof ToOneAssociationMetadata)) { // PATH A: Collection-valued association $reflFieldValue = $reflField->getValue($parentObject); @@ -429,7 +432,6 @@ protected function hydrateRowData(array $row, array &$result) } else if ($reflFieldValue instanceof PersistentCollection && $reflFieldValue->isInitialized() === false) { $reflFieldValue->setInitialized(true); } - } else { // PATH B: Single-valued association $reflFieldValue = $reflField->getValue($parentObject); @@ -439,35 +441,41 @@ protected function hydrateRowData(array $row, array &$result) // we refresh the entity or its an uninitialized proxy. if (isset($nonemptyComponents[$dqlAlias])) { $element = $this->getEntity($data, $dqlAlias); + $reflField->setValue($parentObject, $element); $this->uow->setOriginalEntityProperty($oid, $relationField, $element); - $targetClass = $this->metadataCache[$relation['targetEntity']]; - if ($relation['isOwningSide']) { + $mappedBy = $relation->getMappedBy(); + $targetClass = $this->metadataCache[$relation->getTargetEntity()]; + + if ($relation->isOwningSide()) { // TODO: Just check hints['fetched'] here? // If there is an inverse mapping on the target class its bidirectional - if ($relation['inversedBy']) { - $inverseAssoc = $targetClass->associationMappings[$relation['inversedBy']]; - if ($inverseAssoc['type'] & ClassMetadata::TO_ONE) { - $targetClass->reflFields[$inverseAssoc['fieldName']]->setValue($element, $parentObject); - $this->uow->setOriginalEntityProperty(spl_object_hash($element), $inverseAssoc['fieldName'], $parentObject); + if ($relation->getInversedBy()) { + $inverseAssoc = $targetClass->associationMappings[$relation->getInversedBy()]; + + if ($inverseAssoc instanceof ToOneAssociationMetadata) { + $targetClass->reflFields[$inverseAssoc->getName()]->setValue($element, $parentObject); + $this->uow->setOriginalEntityProperty(spl_object_hash($element), $inverseAssoc->getName(), $parentObject); } - } else if ($parentClass === $targetClass && $relation['mappedBy']) { + } else if ($parentClass === $targetClass && $mappedBy) { // Special case: bi-directional self-referencing one-one on the same class $targetClass->reflFields[$relationField]->setValue($element, $parentObject); } } else { // For sure bidirectional, as there is no inverse side in unidirectional mappings - $targetClass->reflFields[$relation['mappedBy']]->setValue($element, $parentObject); - $this->uow->setOriginalEntityProperty(spl_object_hash($element), $relation['mappedBy'], $parentObject); + $targetClass->reflFields[$mappedBy]->setValue($element, $parentObject); + + $this->uow->setOriginalEntityProperty(spl_object_hash($element), $mappedBy, $parentObject); } + // Update result pointer $this->resultPointers[$dqlAlias] = $element; } else { $this->uow->setOriginalEntityProperty($oid, $relationField, null); $reflField->setValue($parentObject, null); } - // else leave $reflFieldValue null for single-valued associations + // else leave $reflFieldValue null for single-valued associations } else { // Update result pointer $this->resultPointers[$dqlAlias] = $reflFieldValue; @@ -589,7 +597,7 @@ public function onClear($eventArgs) { parent::onClear($eventArgs); - $aliases = array_keys($this->identifierMap); + $aliases = array_keys($this->identifierMap); $this->identifierMap = array_fill_keys($aliases, []); } diff --git a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php index 9bf55f4a294..efaefb052e4 100644 --- a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php @@ -35,6 +35,9 @@ class AssociationMetadata implements Property /** @var string */ private $name; + /** @var boolean */ + protected $primaryKey = false; + /** @var string */ private $fetchMode = FetchMode::LAZY; @@ -62,6 +65,16 @@ class AssociationMetadata implements Property /** @var null|CacheMetadata */ private $cache = null; + /** + * AssociationMetadata constructor. + * + * @param string $name + */ + public function __construct(string $name) + { + $this->name = $name; + } + /** * {@inheritdoc} */ @@ -94,6 +107,22 @@ public function setName($name) $this->name = $name; } + /** + * @param bool $isPrimaryKey + */ + public function setPrimaryKey(bool $isPrimaryKey) + { + $this->primaryKey = $isPrimaryKey; + } + + /** + * @return bool + */ + public function isPrimaryKey() + { + return $this->primaryKey; + } + /** * @return string */ @@ -105,7 +134,7 @@ public function getTargetEntity() /** * @param string $targetEntity */ - public function setTargetEntity($targetEntity) + public function setTargetEntity(string $targetEntity) { $this->targetEntity = $targetEntity; } @@ -121,7 +150,7 @@ public function getSourceEntity() /** * @param string $sourceEntity */ - public function setSourceEntity($sourceEntity) + public function setSourceEntity(string $sourceEntity) { $this->sourceEntity = $sourceEntity; } @@ -201,7 +230,7 @@ public function getInversedBy() /** * @param null|string $inversedBy */ - public function setInversedBy($inversedBy) + public function setInversedBy(string $inversedBy = null) { $this->inversedBy = $inversedBy; } @@ -277,4 +306,11 @@ public function wakeupReflection(ReflectionService $reflectionService) { $this->reflection = $reflectionService->getAccessibleProperty($this->declaringClass->name, $this->name); } + + public function __clone() + { + if ($this->cache) { + $this->cache = clone $this->cache; + } + } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php deleted file mode 100644 index 47772a4ef4a..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php +++ /dev/null @@ -1,257 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\FetchMode; -use Doctrine\ORM\Mapping\JoinColumnMetadata; - -class AssociationBuilder -{ - /** - * @var ClassMetadataBuilder - */ - protected $builder; - - /** - * @var array - */ - protected $mapping; - - /** - * @var array - */ - protected $joinColumns = []; - - /** - * @var int - */ - protected $type; - - /** - * @param ClassMetadataBuilder $builder - * @param array $mapping - * @param int $type - */ - public function __construct(ClassMetadataBuilder $builder, array $mapping, $type) - { - $this->builder = $builder; - $this->mapping = $mapping; - $this->type = $type; - } - - /** - * @param string $fieldName - * - * @return AssociationBuilder - */ - public function mappedBy($fieldName) - { - $this->mapping['mappedBy'] = $fieldName; - - return $this; - } - - /** - * @param string $fieldName - * - * @return AssociationBuilder - */ - public function inversedBy($fieldName) - { - $this->mapping['inversedBy'] = $fieldName; - - return $this; - } - - /** - * @return AssociationBuilder - */ - public function cascadeAll() - { - $this->mapping['cascade'] = ["ALL"]; - - return $this; - } - - /** - * @return AssociationBuilder - */ - public function cascadePersist() - { - $this->mapping['cascade'][] = "persist"; - - return $this; - } - - /** - * @return AssociationBuilder - */ - public function cascadeRemove() - { - $this->mapping['cascade'][] = "remove"; - - return $this; - } - - /** - * @return AssociationBuilder - */ - public function cascadeMerge() - { - $this->mapping['cascade'][] = "merge"; - - return $this; - } - - /** - * @return AssociationBuilder - */ - public function cascadeDetach() - { - $this->mapping['cascade'][] = "detach"; - - return $this; - } - - /** - * @return AssociationBuilder - */ - public function cascadeRefresh() - { - $this->mapping['cascade'][] = "refresh"; - - return $this; - } - - /** - * @return AssociationBuilder - */ - public function fetchExtraLazy() - { - $this->mapping['fetch'] = FetchMode::EXTRA_LAZY; - - return $this; - } - - /** - * @return AssociationBuilder - */ - public function fetchEager() - { - $this->mapping['fetch'] = FetchMode::EAGER; - - return $this; - } - - /** - * @return AssociationBuilder - */ - public function fetchLazy() - { - $this->mapping['fetch'] = FetchMode::LAZY; - - return $this; - } - - /** - * Add Join Columns. - * - * @param string $columnName - * @param string $referencedColumnName - * @param bool $nullable - * @param bool $unique - * @param string|null $onDelete - * @param string|null $columnDef - * - * @return AssociationBuilder - */ - public function addJoinColumn($columnName, $referencedColumnName, $nullable = true, $unique = false, $onDelete = null, $columnDef = null) - { - $joinColumn = new JoinColumnMetadata(); - - $joinColumn->setColumnName($columnName); - $joinColumn->setReferencedColumnName($referencedColumnName); - $joinColumn->setNullable($nullable); - $joinColumn->setUnique($unique); - - if ($columnDef) { - $joinColumn->setColumnDefinition($columnDef); - } - - if ($onDelete) { - $joinColumn->setOnDelete($onDelete); - } - - $this->joinColumns[] = $joinColumn; - - return $this; - } - - /** - * Sets field as primary key. - * - * @return self - */ - public function makePrimaryKey() - { - $this->mapping['id'] = true; - - return $this; - } - - /** - * Removes orphan entities when detached from their parent. - * - * @return self - */ - public function orphanRemoval() - { - $this->mapping['orphanRemoval'] = true; - - return $this; - } - - /** - * @return ClassMetadataBuilder - * - * @throws \InvalidArgumentException - */ - public function build() - { - $mapping = $this->mapping; - - if ($this->joinColumns) { - $mapping['joinColumns'] = $this->joinColumns; - } - - $cm = $this->builder->getClassMetadata(); - - if ($this->type == ClassMetadata::MANY_TO_ONE) { - $cm->mapManyToOne($mapping); - } else if ($this->type == ClassMetadata::ONE_TO_ONE) { - $cm->mapOneToOne($mapping); - } else { - throw new \InvalidArgumentException("Type should be a ToOne Association here"); - } - - return $this->builder; - } -} diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php index f9d4f9127de..b47397b077a 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php @@ -343,7 +343,7 @@ public function addProperty($name, $type, array $mapping = []) * * @return FieldBuilder */ - public function createField($name, $type) + public function createField(string $name, string $type) { return new FieldBuilder($this, $name, Type::getType($type)); } @@ -377,7 +377,7 @@ public function createEmbedded($fieldName, $class) * * @return ClassMetadataBuilder */ - public function addManyToOne($name, $targetEntity, $inversedBy = null) + public function addManyToOne(string $name, string $targetEntity, string $inversedBy = null) { $builder = $this->createManyToOne($name, $targetEntity); @@ -385,7 +385,9 @@ public function addManyToOne($name, $targetEntity, $inversedBy = null) $builder->inversedBy($inversedBy); } - return $builder->build(); + $this->cm->mapManyToOne($builder->build()); + + return $this; } /** @@ -396,18 +398,18 @@ public function addManyToOne($name, $targetEntity, $inversedBy = null) * @param string $name * @param string $targetEntity * - * @return AssociationBuilder + * @return ManyToOneAssociationMetadataBuilder */ - public function createManyToOne($name, $targetEntity) + public function createManyToOne(string $name, string $targetEntity) { - return new AssociationBuilder( - $this, - [ - 'fieldName' => $name, - 'targetEntity' => $targetEntity - ], - ClassMetadata::MANY_TO_ONE - ); + $builder = new ManyToOneAssociationMetadataBuilder(); + + $builder + ->withName($name) + ->withTargetEntity($targetEntity) + ; + + return $builder; } /** @@ -416,18 +418,18 @@ public function createManyToOne($name, $targetEntity) * @param string $name * @param string $targetEntity * - * @return AssociationBuilder + * @return OneToOneAssociationMetadataBuilder */ - public function createOneToOne($name, $targetEntity) + public function createOneToOne(string $name, string $targetEntity) { - return new AssociationBuilder( - $this, - [ - 'fieldName' => $name, - 'targetEntity' => $targetEntity - ], - ClassMetadata::ONE_TO_ONE - ); + $builder = new OneToOneAssociationMetadataBuilder(); + + $builder + ->withName($name) + ->withTargetEntity($targetEntity) + ; + + return $builder; } /** @@ -439,12 +441,15 @@ public function createOneToOne($name, $targetEntity) * * @return ClassMetadataBuilder */ - public function addInverseOneToOne($name, $targetEntity, $mappedBy) + public function addInverseOneToOne(string $name, string $targetEntity, string $mappedBy) { $builder = $this->createOneToOne($name, $targetEntity); - $builder->mappedBy($mappedBy); - return $builder->build(); + $builder->withMappedBy($mappedBy); + + $this->cm->mapOneToOne($builder->build()); + + return $this; } /** @@ -456,15 +461,17 @@ public function addInverseOneToOne($name, $targetEntity, $mappedBy) * * @return ClassMetadataBuilder */ - public function addOwningOneToOne($name, $targetEntity, $inversedBy = null) + public function addOwningOneToOne(string $name, string $targetEntity, string $inversedBy = null) { $builder = $this->createOneToOne($name, $targetEntity); if ($inversedBy) { - $builder->inversedBy($inversedBy); + $builder->withInversedBy($inversedBy); } - return $builder->build(); + $this->cm->mapManyToOne($builder->build()); + + return $this; } /** @@ -473,18 +480,18 @@ public function addOwningOneToOne($name, $targetEntity, $inversedBy = null) * @param string $name * @param string $targetEntity * - * @return ManyToManyAssociationBuilder + * @return ManyToManyAssociationMetadataBuilder */ - public function createManyToMany($name, $targetEntity) + public function createManyToMany(string $name, string $targetEntity) { - return new ManyToManyAssociationBuilder( - $this, - [ - 'fieldName' => $name, - 'targetEntity' => $targetEntity - ], - ClassMetadata::MANY_TO_MANY - ); + $builder = new ManyToManyAssociationMetadataBuilder(); + + $builder + ->withName($name) + ->withTargetEntity($targetEntity) + ; + + return $builder; } /** @@ -496,15 +503,17 @@ public function createManyToMany($name, $targetEntity) * * @return ClassMetadataBuilder */ - public function addOwningManyToMany($name, $targetEntity, $inversedBy = null) + public function addOwningManyToMany(string $name, string $targetEntity, string $inversedBy = null) { $builder = $this->createManyToMany($name, $targetEntity); if ($inversedBy) { - $builder->inversedBy($inversedBy); + $builder->withInversedBy($inversedBy); } - return $builder->build(); + $this->cm->mapManyToMany($builder->build()); + + return $this; } /** @@ -516,12 +525,15 @@ public function addOwningManyToMany($name, $targetEntity, $inversedBy = null) * * @return ClassMetadataBuilder */ - public function addInverseManyToMany($name, $targetEntity, $mappedBy) + public function addInverseManyToMany(string $name, string $targetEntity, string $mappedBy) { $builder = $this->createManyToMany($name, $targetEntity); - $builder->mappedBy($mappedBy); - return $builder->build(); + $builder->withMappedBy($mappedBy); + + $this->cm->mapManyToMany($builder->build()); + + return $this; } /** @@ -530,18 +542,18 @@ public function addInverseManyToMany($name, $targetEntity, $mappedBy) * @param string $name * @param string $targetEntity * - * @return OneToManyAssociationBuilder + * @return OneToManyAssociationMetadataBuilder */ public function createOneToMany($name, $targetEntity) { - return new OneToManyAssociationBuilder( - $this, - [ - 'fieldName' => $name, - 'targetEntity' => $targetEntity - ], - ClassMetadata::ONE_TO_MANY - ); + $builder = new OneToManyAssociationMetadataBuilder(); + + $builder + ->withName($name) + ->withTargetEntity($targetEntity) + ; + + return $builder; } /** @@ -556,8 +568,11 @@ public function createOneToMany($name, $targetEntity) public function addOneToMany($name, $targetEntity, $mappedBy) { $builder = $this->createOneToMany($name, $targetEntity); - $builder->mappedBy($mappedBy); - return $builder->build(); + $builder->withMappedBy($mappedBy); + + $this->cm->mapOneToMany($builder->build()); + + return $this; } } diff --git a/lib/Doctrine/ORM/Mapping/Builder/ColumnMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ColumnMetadataBuilder.php index f6cfd6ce732..e142dcf37fa 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ColumnMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ColumnMetadataBuilder.php @@ -228,7 +228,7 @@ public function build() $columnMetadata->setPrecision($this->precision); } - // @todo: Remove this once constructor arguments is in place + // @todo guilhermeblanco Remove this once constructor arguments is in place $columnMetadata->setColumnName($this->columnName); $columnMetadata->setType($this->type); diff --git a/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php deleted file mode 100644 index afa0716b90c..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php +++ /dev/null @@ -1,118 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; -use Doctrine\ORM\Mapping\JoinColumnMetadata; -use Doctrine\ORM\Mapping\JoinTableMetadata; - -/** - * ManyToMany Association Builder - * - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link www.doctrine-project.com - * @since 2.0 - * @author Benjamin Eberlei - */ -class ManyToManyAssociationBuilder extends OneToManyAssociationBuilder -{ - /** - * @var string|null - */ - private $joinTableName; - - /** - * @var array - */ - private $inverseJoinColumns = []; - - /** - * @param string $name - * - * @return ManyToManyAssociationBuilder - */ - public function setJoinTable($name) - { - $this->joinTableName = $name; - - return $this; - } - - /** - * Adds Inverse Join Columns. - * - * @param string $columnName - * @param string $referencedColumnName - * @param bool $nullable - * @param bool $unique - * @param string|null $onDelete - * @param string|null $columnDef - * - * @return ManyToManyAssociationBuilder - */ - public function addInverseJoinColumn($columnName, $referencedColumnName, $nullable = true, $unique = false, $onDelete = null, $columnDef = null) - { - $joinColumn = new JoinColumnMetadata(); - - $joinColumn->setColumnName($columnName); - $joinColumn->setReferencedColumnName($referencedColumnName); - $joinColumn->setNullable($nullable); - $joinColumn->setUnique($unique); - - if ($columnDef) { - $joinColumn->setColumnDefinition($columnDef); - } - - if ($onDelete) { - $joinColumn->setOnDelete($onDelete); - } - - $this->inverseJoinColumns[] = $joinColumn; - - return $this; - } - - /** - * @return ClassMetadataBuilder - */ - public function build() - { - $mapping = $this->mapping; - $joinTable = new JoinTableMetadata(); - - if ($this->joinTableName) { - $joinTable->setName($this->joinTableName); - } - - foreach ($this->joinColumns as $joinColumn) { - $joinTable->addJoinColumn($joinColumn); - } - - foreach ($this->inverseJoinColumns as $joinColumn) { - $joinTable->addInverseJoinColumn($joinColumn); - } - - $mapping['joinTable'] = $joinTable; - - $cm = $this->builder->getClassMetadata(); - - $cm->mapManyToMany($mapping); - - return $this->builder; - } -} diff --git a/lib/Doctrine/ORM/Mapping/Builder/OneToManyAssociationBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/OneToManyAssociationBuilder.php deleted file mode 100644 index ab95d41f4a9..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/OneToManyAssociationBuilder.php +++ /dev/null @@ -1,73 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -/** - * OneToMany Association Builder - * - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link www.doctrine-project.com - * @since 2.0 - * @author Benjamin Eberlei - */ -class OneToManyAssociationBuilder extends AssociationBuilder -{ - /** - * @param array $fieldNames - * - * @return OneToManyAssociationBuilder - */ - public function setOrderBy(array $fieldNames) - { - $this->mapping['orderBy'] = $fieldNames; - - return $this; - } - - /** - * @param string $fieldName - * - * @return OneToManyAssociationBuilder - */ - public function setIndexBy($fieldName) - { - $this->mapping['indexBy'] = $fieldName; - - return $this; - } - - /** - * @return ClassMetadataBuilder - */ - public function build() - { - $mapping = $this->mapping; - - if ($this->joinColumns) { - $mapping['joinColumns'] = $this->joinColumns; - } - - $cm = $this->builder->getClassMetadata(); - - $cm->mapOneToMany($mapping); - - return $this->builder; - } -} diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 3a55521af9f..bf1b614c9c1 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -559,6 +559,14 @@ public function __clone() if ($this->cache) { $this->cache = clone $this->cache; } + + foreach ($this->properties as $name => $property) { + $this->properties[$name] = clone $property; + } + + foreach ($this->associationMappings as $name => $association) { + $this->associationMappings[$name] = clone $association; + } } /** @@ -734,8 +742,10 @@ public function wakeupReflection($reflService) $this->reflFields[$field] = $reflService->getAccessibleProperty($property->getDeclaringClass()->name, $field); } - foreach ($this->associationMappings as $field => $mapping) { - $this->reflFields[$field] = $reflService->getAccessibleProperty($mapping['declaringClass']->name, $field); + foreach ($this->associationMappings as $field => $property) { + $property->wakeupReflection($reflService); + + $this->reflFields[$field] = $reflService->getAccessibleProperty($property->getDeclaringClass()->name, $field); } } @@ -792,9 +802,11 @@ public function validateIdentifier() */ public function validateAssociations() { - foreach ($this->associationMappings as $mapping) { - if ( ! class_exists($mapping['targetEntity'], true)) { - throw MappingException::invalidTargetEntityClass($mapping['targetEntity'], $this->name, $mapping['fieldName']); + foreach ($this->associationMappings as $fieldName => $property) { + $targetEntity = $property->getTargetEntity(); + + if ( ! class_exists($targetEntity, true)) { + throw MappingException::invalidTargetEntityClass($targetEntity, $this->name, $fieldName); } } } @@ -841,20 +853,20 @@ public function setCache(CacheMetadata $cache = null) * @param string $fieldName * @param array $cache * - * @todo Remove me once Association is OOed + * @todo guilhermeblanco Remove me once Association is OOed * * @return void */ public function enableAssociationCache($fieldName, array $cache) { - $this->associationMappings[$fieldName]['cache'] = $this->getAssociationCacheDefaults($fieldName, $cache); + $this->associationMappings[$fieldName]->setCache($this->getAssociationCacheDefaults($fieldName, $cache)); } /** * @param string $fieldName * @param array $cache * - * @todo Remove me once Association is OOed + * @todo guilhermeblanco Remove me once Association is OOed * * @return array */ @@ -1056,57 +1068,54 @@ public function getSqlResultSetMappings() * Validates & completes the basic mapping information that is common to all * association mappings (one-to-one, many-ot-one, one-to-many, many-to-many). * - * @param array $mapping The mapping. + * @param AssociationMetadata $property * * @return array The updated mapping. * * @throws MappingException If something is wrong with the mapping. */ - protected function validateAndCompleteAssociationMapping(array $mapping) + protected function validateAndCompleteAssociationMapping(AssociationMetadata $property) { - $mapping['declaringClass'] = $this; - - if ( ! isset($mapping['mappedBy'])) { - $mapping['mappedBy'] = null; - } + // Mandatory attributes for both sides: fieldName, targetEntity + $fieldName = $property->getName(); + $targetEntity = $property->getTargetEntity(); - if ( ! isset($mapping['inversedBy'])) { - $mapping['inversedBy'] = null; + if (! $fieldName) { + throw MappingException::missingFieldName($this->name); } - $mapping['isOwningSide'] = true; // assume owning side until we hit mappedBy - - if (empty($mapping['indexBy'])) { - unset($mapping['indexBy']); + if (! $targetEntity) { + throw MappingException::missingTargetEntity($fieldName); } - // If targetEntity is unqualified, assume it is in the same namespace as - // the sourceEntity. - $mapping['sourceEntity'] = $this->name; + $targetEntity = ltrim($this->fullyQualifiedClassName($targetEntity), '\\'); - if (isset($mapping['targetEntity'])) { - $mapping['targetEntity'] = $this->fullyQualifiedClassName($mapping['targetEntity']); - $mapping['targetEntity'] = ltrim($mapping['targetEntity'], '\\'); - } + $property->setDeclaringClass($this); + $property->setSourceEntity($this->name); + $property->setOwningSide($property->getMappedBy() === null); + $property->setTargetEntity($targetEntity); - if (($mapping['type'] & self::MANY_TO_ONE) > 0 && isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']) { - throw MappingException::illegalOrphanRemoval($this->name, $mapping['fieldName']); + // Mandatory and optional attributes for either side + if ($property->getMappedBy()) { + $property->setOwningSide(false); } // Complete id mapping - if (isset($mapping['id']) && true === $mapping['id']) { - if (isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']) { - throw MappingException::illegalOrphanRemovalOnIdentifierAssociation($this->name, $mapping['fieldName']); + if ($property->isPrimaryKey()) { + if ($property->isOrphanRemoval()) { + throw MappingException::illegalOrphanRemovalOnIdentifierAssociation($this->name, $fieldName); } - if ( ! in_array($mapping['fieldName'], $this->identifier)) { - if (isset($mapping['joinColumns']) && count($mapping['joinColumns']) >= 2) { + if ( ! in_array($property->getName(), $this->identifier)) { + if ($property instanceof ToOneAssociationMetadata && count($property->getJoinColumns()) >= 2) { throw MappingException::cannotMapCompositePrimaryKeyEntitiesAsForeignId( - $mapping['targetEntity'], $this->name, $mapping['fieldName'] + $property->getTargetEntity(), + $this->name, + $fieldName ); } - $this->identifier[] = $mapping['fieldName']; + $this->identifier[] = $property->getName(); } // Check for composite key @@ -1114,86 +1123,62 @@ protected function validateAndCompleteAssociationMapping(array $mapping) $this->isIdentifierComposite = true; } - if ($this->cache && !isset($mapping['cache'])) { - throw CacheException::nonCacheableEntityAssociation($this->name, $mapping['fieldName']); + if ($this->cache && !$property->getCache()) { + throw CacheException::nonCacheableEntityAssociation($this->name, $fieldName); } - } - // Mandatory attributes for both sides - // Mandatory: fieldName, targetEntity - if ( ! isset($mapping['fieldName']) || ! $mapping['fieldName']) { - throw MappingException::missingFieldName($this->name); - } - - if ( ! isset($mapping['targetEntity'])) { - throw MappingException::missingTargetEntity($mapping['fieldName']); - } - - // Mandatory and optional attributes for either side - if ($mapping['mappedBy']) { - $mapping['isOwningSide'] = false; - } - - if (isset($mapping['id']) && true === $mapping['id'] && $mapping['type'] & self::TO_MANY) { - throw MappingException::illegalToManyIdentifierAssociation($this->name, $mapping['fieldName']); - } - - // Fetch mode. Default fetch mode to LAZY, if not set. - if ( ! isset($mapping['fetch'])) { - $mapping['fetch'] = FetchMode::LAZY; + if ($property instanceof ToManyAssociationMetadata) { + throw MappingException::illegalToManyIdentifierAssociation($this->name, $property->getName()); + } } // Cascades $cascadeTypes = ['remove', 'persist', 'refresh', 'merge', 'detach']; - $cascades = isset($mapping['cascade']) ? array_map('strtolower', $mapping['cascade']) : []; + $cascades = array_map('strtolower', $property->getCascade()); if (in_array('all', $cascades)) { $cascades = $cascadeTypes; } if (count($cascades) !== count(array_intersect($cascades, $cascadeTypes))) { - throw MappingException::invalidCascadeOption( - array_diff($cascades, array_intersect($cascades, $cascadeTypes)), - $this->name, - $mapping['fieldName'] - ); - } + $diffCascades = array_diff($cascades, array_intersect($cascades, $cascadeTypes)); - $mapping['cascade'] = $cascades; + throw MappingException::invalidCascadeOption($diffCascades, $this->name, $fieldName); + } - return $mapping; + $property->setCascade($cascades); } /** - * Validates & completes a one-to-one association mapping. - * - * @param array $mapping The mapping to validate & complete. + * Validates & completes a to-one association mapping. * - * @return array The validated & completed mapping. + * @param ToOneAssociationMetadata $property The association mapping to validate & complete. * - * @throws RuntimeException + * @throws \RuntimeException * @throws MappingException */ - protected function validateAndCompleteOneToOneMapping(array $mapping) + protected function validateAndCompleteToOneAssociationMetadata(ToOneAssociationMetadata $property) { - $mapping = $this->validateAndCompleteAssociationMapping($mapping); + $this->validateAndCompleteAssociationMapping($property); + + $fieldName = $property->getName(); - if (isset($mapping['joinColumns']) && $mapping['joinColumns']) { - $mapping['isOwningSide'] = true; + if ($property->getJoinColumns()) { + $property->setOwningSide(true); } - if ($mapping['isOwningSide']) { - if (empty($mapping['joinColumns'])) { + if ($property->isOwningSide()) { + if (empty($property->getJoinColumns())) { // Apply default join column - $mapping['joinColumns'][] = new JoinColumnMetadata(); + $property->addJoinColumn(new JoinColumnMetadata()); } $uniqueConstraintColumns = []; - foreach ($mapping['joinColumns'] as $joinColumn) { - if ($mapping['type'] === self::ONE_TO_ONE && $this->inheritanceType !== InheritanceType::SINGLE_TABLE) { - if (1 === count($mapping['joinColumns'])) { - if (empty($mapping['id'])) { + foreach ($property->getJoinColumns() as $joinColumn) { + if ($property instanceof OneToOneAssociationMetadata && $this->inheritanceType !== InheritanceType::SINGLE_TABLE) { + if (1 === count($property->getJoinColumns())) { + if (! $property->isPrimaryKey()) { $joinColumn->setUnique(true); } } else { @@ -1204,14 +1189,14 @@ protected function validateAndCompleteOneToOneMapping(array $mapping) $joinColumn->setTableName(! $this->isMappedSuperclass ? $this->getTableName() : null); if (! $joinColumn->getColumnName()) { - $joinColumn->setColumnName($this->namingStrategy->joinColumnName($mapping['fieldName'], $this->name)); + $joinColumn->setColumnName($this->namingStrategy->joinColumnName($fieldName, $this->name)); } if (! $joinColumn->getReferencedColumnName()) { $joinColumn->setReferencedColumnName($this->namingStrategy->referenceColumnName()); } - $this->fieldNames[$joinColumn->getColumnName()] = $mapping['fieldName']; + $this->fieldNames[$joinColumn->getColumnName()] = $fieldName; } if ($uniqueConstraintColumns) { @@ -1223,7 +1208,7 @@ protected function validateAndCompleteOneToOneMapping(array $mapping) $this->table->addUniqueConstraint( [ - 'name' => sprintf('%s_uniq', $mapping['fieldName']), + 'name' => sprintf('%s_uniq', $fieldName), 'columns' => $uniqueConstraintColumns, 'options' => [], 'flags' => [], @@ -1232,107 +1217,162 @@ protected function validateAndCompleteOneToOneMapping(array $mapping) } } - $mapping['orphanRemoval'] = isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']; + if ($property->isOrphanRemoval()) { + $cascades = $property->getCascade(); - if ($mapping['orphanRemoval']) { - if (! in_array('remove', $mapping['cascade'])) { - $mapping['cascade'][] = 'remove'; + if (! in_array('remove', $cascades)) { + $cascades[] = 'remove'; + + $property->setCascade($cascades); } - unset($mapping['unique']); + // @todo guilhermeblanco where is this used? + // @todo guilhermeblanco Shouldnďżż't we iterate through JoinColumns to set non-uniqueness? + //$property->setUnique(false); } - if (isset($mapping['id']) && $mapping['id'] === true && !$mapping['isOwningSide']) { - throw MappingException::illegalInverseIdentifierAssociation($this->name, $mapping['fieldName']); + if ($property->isPrimaryKey() && ! $property->isOwningSide()) { + throw MappingException::illegalInverseIdentifierAssociation($this->name, $fieldName); } + } - return $mapping; + /** + * Validates & completes a to-many association mapping. + * + * @param ToManyAssociationMetadata $property The association mapping to validate & complete. + * + * @throws RuntimeException + * @throws MappingException + */ + protected function validateAndCompleteToManyAssociationMetadata(ToManyAssociationMetadata $property) + { + $this->validateAndCompleteAssociationMapping($property); + + if ($property->isPrimaryKey()) { + throw MappingException::illegalToManyIdentifierAssociation($this->name, $property->getName()); + } } /** - * Validates & completes a one-to-many association mapping. + * Validates & completes a one-to-one association mapping. + * + * @param OneToOneAssociationMetadata $property The association mapping to validate & complete. * - * @param array $mapping The mapping to validate and complete. + * @throws \RuntimeException + * @throws MappingException + */ + protected function validateAndCompleteOneToOneMapping(OneToOneAssociationMetadata $property) + { + $this->validateAndCompleteToOneAssociationMetadata($property); + } + + /** + * Validates & completes a many-to-one association mapping. * - * @return array The validated and completed mapping. + * @param ManyToOneAssociationMetadata $property The association mapping to validate & complete. * + * @throws \RuntimeException * @throws MappingException - * @throws InvalidArgumentException */ - protected function validateAndCompleteOneToManyMapping(array $mapping) + protected function validateAndCompleteManyToOneMapping(ManyToOneAssociationMetadata $property) { - $mapping = $this->validateAndCompleteAssociationMapping($mapping); + // A many-to-one mapping is essentially a one-one backreference + $this->validateAndCompleteToOneAssociationMetadata($property); - // OneToMany-side MUST be inverse (must have mappedBy) - if ( ! isset($mapping['mappedBy'])) { - throw MappingException::oneToManyRequiresMappedBy($mapping['fieldName']); + if ($property->isOrphanRemoval()) { + throw MappingException::illegalOrphanRemoval($this->name, $property->getName()); } + } + + /** + * Validates & completes a one-to-many association mapping. + * + * @param OneToManyAssociationMetadata $property The association mapping to validate & complete. + * + * @throws \RuntimeException + * @throws MappingException + * @throws InvalidArgumentException + */ + protected function validateAndCompleteOneToManyMapping(OneToManyAssociationMetadata $property) + { + $this->validateAndCompleteToManyAssociationMetadata($property); - $mapping['orphanRemoval'] = isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']; + // OneToMany MUST be inverse side + $property->setOwningSide(false); - if ($mapping['orphanRemoval'] && ! in_array('remove', $mapping['cascade'])) { - $mapping['cascade'][] = 'remove'; + // OneToMany MUST have mappedBy + if (! $property->getMappedBy()) { + throw MappingException::oneToManyRequiresMappedBy($property->getName()); } - $this->assertMappingOrderBy($mapping); + if ($property->isOrphanRemoval()) { + $cascades = $property->getCascade(); - return $mapping; + if (! in_array('remove', $cascades)) { + $cascades[] = 'remove'; + + $property->setCascade($cascades); + } + } } /** * Validates & completes a many-to-many association mapping. * - * @param array $mapping The mapping to validate & complete. - * - * @return array The validated & completed mapping. + * @param ManyToManyAssociationMetadata $property The association mapping to validate & complete. * + * @throws \RuntimeException * @throws \InvalidArgumentException */ - protected function validateAndCompleteManyToManyMapping(array $mapping) + protected function validateAndCompleteManyToManyMapping(ManyToManyAssociationMetadata $property) { - $mapping = $this->validateAndCompleteAssociationMapping($mapping); + $this->validateAndCompleteAssociationMapping($property); - if ($mapping['isOwningSide']) { + if ($property->isOwningSide()) { // owning side MUST have a join table - if (! isset($mapping['joinTable'])) { - $mapping['joinTable'] = new JoinTableMetadata(); - } + $joinTable = $property->getJoinTable() ?: new JoinTableMetadata(); - if (empty($mapping['joinTable']->getName())) { - $joinTableName = $this->namingStrategy->joinTableName($mapping['sourceEntity'], $mapping['targetEntity'], $mapping['fieldName']); + $property->setJoinTable($joinTable); - $mapping['joinTable']->setName($joinTableName); + if (! $joinTable->getName()) { + $joinTableName = $this->namingStrategy->joinTableName( + $property->getSourceEntity(), + $property->getTargetEntity(), + $property->getName() + ); + + $joinTable->setName($joinTableName); } - $selfReferencingEntityWithoutJoinColumns = $mapping['sourceEntity'] == $mapping['targetEntity'] && ! $mapping['joinTable']->hasColumns(); + $selfReferencingEntityWithoutJoinColumns = $property->getSourceEntity() == $property->getTargetEntity() && ! $joinTable->hasColumns(); - if (! $mapping['joinTable']->getJoinColumns()) { + if (! $joinTable->getJoinColumns()) { $referencedColumnName = $this->namingStrategy->referenceColumnName(); $sourceReferenceName = $selfReferencingEntityWithoutJoinColumns ? 'source' : $referencedColumnName; - $columnName = $this->namingStrategy->joinKeyColumnName($mapping['sourceEntity'], $sourceReferenceName); + $columnName = $this->namingStrategy->joinKeyColumnName($property->getSourceEntity(), $sourceReferenceName); $joinColumn = new JoinColumnMetadata(); $joinColumn->setColumnName($columnName); $joinColumn->setReferencedColumnName($referencedColumnName); $joinColumn->setOnDelete('CASCADE'); - $mapping['joinTable']->addJoinColumn($joinColumn); + $joinTable->addJoinColumn($joinColumn); } - if (! $mapping['joinTable']->getInverseJoinColumns()) { + if (! $joinTable->getInverseJoinColumns()) { $referencedColumnName = $this->namingStrategy->referenceColumnName(); $targetReferenceName = $selfReferencingEntityWithoutJoinColumns ? 'target' : $referencedColumnName; - $columnName = $this->namingStrategy->joinKeyColumnName($mapping['targetEntity'], $targetReferenceName); + $columnName = $this->namingStrategy->joinKeyColumnName($property->getTargetEntity(), $targetReferenceName); $joinColumn = new JoinColumnMetadata(); $joinColumn->setColumnName($columnName); $joinColumn->setReferencedColumnName($referencedColumnName); $joinColumn->setOnDelete('CASCADE'); - $mapping['joinTable']->addInverseJoinColumn($joinColumn); + $joinTable->addInverseJoinColumn($joinColumn); } - foreach ($mapping['joinTable']->getJoinColumns() as $joinColumn) { + foreach ($joinTable->getJoinColumns() as $joinColumn) { if (! $joinColumn->getReferencedColumnName()) { $joinColumn->setReferencedColumnName($this->namingStrategy->referenceColumnName()); } @@ -1340,13 +1380,16 @@ protected function validateAndCompleteManyToManyMapping(array $mapping) $referencedColumnName = $joinColumn->getReferencedColumnName(); if (! $joinColumn->getColumnName()) { - $columnName = $this->namingStrategy->joinKeyColumnName($mapping['sourceEntity'], $referencedColumnName); + $columnName = $this->namingStrategy->joinKeyColumnName( + $property->getSourceEntity(), + $referencedColumnName + ); $joinColumn->setColumnName($columnName); } } - foreach ($mapping['joinTable']->getInverseJoinColumns() as $inverseJoinColumn) { + foreach ($joinTable->getInverseJoinColumns() as $inverseJoinColumn) { if (! $inverseJoinColumn->getReferencedColumnName()) { $inverseJoinColumn->setReferencedColumnName($this->namingStrategy->referenceColumnName()); } @@ -1354,18 +1397,15 @@ protected function validateAndCompleteManyToManyMapping(array $mapping) $referencedColumnName = $inverseJoinColumn->getReferencedColumnName(); if (! $inverseJoinColumn->getColumnName()) { - $columnName = $this->namingStrategy->joinKeyColumnName($mapping['targetEntity'], $referencedColumnName); + $columnName = $this->namingStrategy->joinKeyColumnName( + $property->getTargetEntity(), + $referencedColumnName + ); $inverseJoinColumn->setColumnName($columnName); } } } - - $mapping['orphanRemoval'] = isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']; - - $this->assertMappingOrderBy($mapping); - - return $mapping; } /** @@ -1454,17 +1494,17 @@ public function getIdentifierColumns(EntityManagerInterface $em) } // Association defined as Id field - $assoc = $this->associationMappings[$idProperty]; - $targetClass = $em->getClassMetadata($assoc['targetEntity']); + $association = $this->associationMappings[$idProperty]; + $targetClass = $em->getClassMetadata($association->getTargetEntity()); - if (! $assoc['isOwningSide']) { - $assoc = $targetClass->associationMappings[$assoc['mappedBy']]; - $targetClass = $em->getClassMetadata($assoc['targetEntity']); + if (! $association->isOwningSide()) { + $association = $targetClass->associationMappings[$association->getMappedBy()]; + $targetClass = $em->getClassMetadata($association->getTargetEntity()); } - $joinColumns = $assoc['type'] === ClassMetadata::MANY_TO_MANY - ? $assoc['joinTable']->getInverseJoinColumns() - : $assoc['joinColumns'] + $joinColumns = $association instanceof ManyToManyAssociationMetadata + ? $association->getJoinTable()->getInverseJoinColumns() + : $association->getJoinColumns() ; foreach ($joinColumns as $joinColumn) { @@ -1580,56 +1620,58 @@ public function setInheritanceType($type) /** * Sets the association to override association mapping of property for an entity relationship. * - * @param string $fieldName - * @param array $overrideMapping + * @param AssociationMetadata $associationMetadata * * @return void * * @throws MappingException */ - public function setAssociationOverride($fieldName, array $overrideMapping) + public function setAssociationOverride(AssociationMetadata $associationMetadata) { + $fieldName = $associationMetadata->getName(); + if ( ! isset($this->associationMappings[$fieldName])) { throw MappingException::invalidOverrideFieldName($this->name, $fieldName); } - $mapping = $this->associationMappings[$fieldName]; + /** @var AssociationMetadata $originalAssociation */ + $originalAssociation = $this->associationMappings[$fieldName]; + + // Do not allow to change association type + if (get_class($originalAssociation) !== get_class($associationMetadata)) { + throw MappingException::invalidOverrideAssociationType($this->name, $fieldName); + } + + unset($this->associationMappings[$originalAssociation->getName()]); // Unset all defined fieldNames prior to override - if (isset($mapping['joinColumns'])) { - foreach ($mapping['joinColumns'] as $joinColumn) { + if ($originalAssociation instanceof ToOneAssociationMetadata && $originalAssociation->isOwningSide()) { + foreach ($originalAssociation->getJoinColumns() as $joinColumn) { unset($this->fieldNames[$joinColumn->getColumnName()]); } } - if (isset($overrideMapping['joinColumns'])) { - $mapping['joinColumns'] = $overrideMapping['joinColumns']; - } - - if (isset($overrideMapping['inversedBy'])) { - $mapping['inversedBy'] = $overrideMapping['inversedBy']; + // Override what it should be allowed + if ($associationMetadata->getInversedBy()) { + $originalAssociation->setInversedBy($associationMetadata->getInversedBy()); } - if (isset($overrideMapping['joinTable'])) { - $mapping['joinTable'] = $overrideMapping['joinTable']; + if ($originalAssociation instanceof ToOneAssociationMetadata && $associationMetadata->getJoinColumns()) { + $originalAssociation->setJoinColumns($associationMetadata->getJoinColumns()); + } else if ($originalAssociation instanceof ManyToManyAssociationMetadata && $associationMetadata->getJoinTable()) { + $originalAssociation->setJoinTable($associationMetadata->getJoinTable()); } - switch ($mapping['type']) { - case self::ONE_TO_ONE: - $mapping = $this->validateAndCompleteOneToOneMapping($mapping); - break; - case self::ONE_TO_MANY: - $mapping = $this->validateAndCompleteOneToManyMapping($mapping); - break; - case self::MANY_TO_ONE: - $mapping = $this->validateAndCompleteOneToOneMapping($mapping); - break; - case self::MANY_TO_MANY: - $mapping = $this->validateAndCompleteManyToManyMapping($mapping); - break; + // @todo guilhermeblanco Unify all mapXtoY methods + if ($originalAssociation instanceof OneToOneAssociationMetadata) { + $this->mapOneToOne($originalAssociation); + } else if ($originalAssociation instanceof OneToManyAssociationMetadata) { + $this->mapOneToMany($originalAssociation); + } else if ($originalAssociation instanceof ManyToOneAssociationMetadata) { + $this->mapManyToOne($originalAssociation); + } else if ($originalAssociation instanceof ManyToManyAssociationMetadata) { + $this->mapManyToMany($originalAssociation); } - - $this->associationMappings[$fieldName] = $mapping; } /** @@ -1653,6 +1695,7 @@ public function setAttributeOverride(FieldMetadata $fieldMetadata) throw MappingException::invalidOverrideVersionField($this->name, $fieldMetadata->getName()); } + $fieldMetadata->setDeclaringClass($originalProperty->getDeclaringClass()); $fieldMetadata->setPrimaryKey($originalProperty->isPrimaryKey()); unset($this->properties[$originalProperty->getName()]); @@ -1701,6 +1744,20 @@ public function isInheritedProperty($fieldName) return ! ($declaringClass->name === $this->name); } + /** + * Checks whether a mapped association is inherited from a superclass. + * + * @param string $fieldName + * + * @return boolean TRUE if the association is inherited, FALSE otherwise. + */ + public function isInheritedAssociation($fieldName) + { + $declaringClass = $this->associationMappings[$fieldName]->getDeclaringClass(); + + return ! ($declaringClass->name === $this->name); + } + /** * Sets the primary table metadata. * @@ -1820,38 +1877,13 @@ public function getProperty($fieldName) */ public function addInheritedProperty(Property $property) { - $inheritedProperty = new FieldMetadata($property->getName()); + $inheritedProperty = clone $property; $declaringClass = $property->getDeclaringClass(); if (! $declaringClass->isMappedSuperclass) { $inheritedProperty->setTableName($property->getTableName()); } - $inheritedProperty->setDeclaringClass($declaringClass); - - if ($property->getColumnDefinition()) { - $inheritedProperty->setColumnDefinition($property->getColumnDefinition()); - } - - if ($property->getLength()) { - $inheritedProperty->setLength($property->getLength()); - } - - if ($property->getScale()) { - $inheritedProperty->setScale($property->getScale()); - } - - if ($property->getPrecision()) { - $inheritedProperty->setPrecision($property->getPrecision()); - } - - $inheritedProperty->setColumnName($property->getColumnName()); - $inheritedProperty->setType($property->getType()); - $inheritedProperty->setOptions($property->getOptions()); - $inheritedProperty->setPrimaryKey($property->isPrimaryKey()); - $inheritedProperty->setNullable($property->isNullable()); - $inheritedProperty->setUnique($property->isUnique()); - $this->fieldNames[$property->getColumnName()] = $property->getName(); $this->properties[$property->getName()] = $inheritedProperty; } @@ -1861,19 +1893,27 @@ public function addInheritedProperty(Property $property) * Adds an association mapping without completing/validating it. * This is mainly used to add inherited association mappings to derived classes. * - * @param array $mapping + * @param AssociationMetadata $association * * @return void * * @throws MappingException */ - public function addInheritedAssociationMapping(array $mapping/*, $owningClassName = null*/) + public function addInheritedAssociation(AssociationMetadata $association) { - if (isset($this->associationMappings[$mapping['fieldName']])) { - throw MappingException::duplicateAssociationMapping($this->name, $mapping['fieldName']); + /* @var AssociationMetadata $inheritedAssociation */ + $inheritedAssociation = clone $association; + $declaringClass = $association->getDeclaringClass(); + + if ($declaringClass->isMappedSuperclass) { + $inheritedAssociation->setSourceEntity($this->name); } - $this->associationMappings[$mapping['fieldName']] = $mapping; + if (isset($this->associationMappings[$association->getName()])) { + throw MappingException::duplicateAssociationMapping($this->name, $association->getName()); + } + + $this->associationMappings[$association->getName()] = $inheritedAssociation; } /** @@ -2020,66 +2060,57 @@ public function addSqlResultSetMapping(array $resultMapping) /** * Adds a one-to-one mapping. * - * @param array $mapping The mapping. + * @param OneToOneAssociationMetadata $property * - * @return void + * @throws \RuntimeException + * @throws MappingException */ - public function mapOneToOne(array $mapping) + public function mapOneToOne(OneToOneAssociationMetadata $property) { - $mapping['type'] = self::ONE_TO_ONE; - - $mapping = $this->validateAndCompleteOneToOneMapping($mapping); - - $this->storeAssociationMapping($mapping); + $this->validateAndCompleteOneToOneMapping($property); + $this->storeAssociationMapping($property); } /** * Adds a one-to-many mapping. * - * @param array $mapping The mapping. + * @param OneToManyAssociationMetadata $property * - * @return void + * @throws \RuntimeException + * @throws MappingException */ - public function mapOneToMany(array $mapping) + public function mapOneToMany(OneToManyAssociationMetadata $property) { - $mapping['type'] = self::ONE_TO_MANY; - - $mapping = $this->validateAndCompleteOneToManyMapping($mapping); - - $this->storeAssociationMapping($mapping); + $this->validateAndCompleteOneToManyMapping($property); + $this->storeAssociationMapping($property); } /** * Adds a many-to-one mapping. * - * @param array $mapping The mapping. + * @param ManyToOneAssociationMetadata $property * - * @return void + * @throws \RuntimeException + * @throws MappingException */ - public function mapManyToOne(array $mapping) + public function mapManyToOne(ManyToOneAssociationMetadata $property) { - $mapping['type'] = self::MANY_TO_ONE; - - // A many-to-one mapping is essentially a one-one backreference - $mapping = $this->validateAndCompleteOneToOneMapping($mapping); - - $this->storeAssociationMapping($mapping); + $this->validateAndCompleteManyToOneMapping($property); + $this->storeAssociationMapping($property); } /** * Adds a many-to-many mapping. * - * @param array $mapping The mapping. + * @param ManyToManyAssociationMetadata $property * - * @return void + * @throws \RuntimeException + * @throws MappingException */ - public function mapManyToMany(array $mapping) + public function mapManyToMany(ManyToManyAssociationMetadata $property) { - $mapping['type'] = self::MANY_TO_MANY; - - $mapping = $this->validateAndCompleteManyToManyMapping($mapping); - - $this->storeAssociationMapping($mapping); + $this->validateAndCompleteManyToManyMapping($property); + $this->storeAssociationMapping($property); } /** @@ -2091,13 +2122,13 @@ public function mapManyToMany(array $mapping) * * @throws MappingException */ - protected function storeAssociationMapping(array $assocMapping) + protected function storeAssociationMapping(AssociationMetadata $property) { - $sourceFieldName = $assocMapping['fieldName']; + $sourceFieldName = $property->getName(); $this->assertFieldNotMapped($sourceFieldName); - $this->associationMappings[$sourceFieldName] = $assocMapping; + $this->associationMappings[$sourceFieldName] = $property; } /** @@ -2316,6 +2347,8 @@ public function hasSqlResultSetMapping($name) /** * {@inheritDoc} + * + * @todo guilhermeblanco Remove this method */ public function hasAssociation($fieldName) { @@ -2324,20 +2357,24 @@ public function hasAssociation($fieldName) /** * {@inheritDoc} + * + * @todo guilhermeblanco Remove this method */ public function isSingleValuedAssociation($fieldName) { return isset($this->associationMappings[$fieldName]) - && ($this->associationMappings[$fieldName]['type'] & self::TO_ONE); + && $this->associationMappings[$fieldName] instanceof ToOneAssociationMetadata; } /** * {@inheritDoc} + * + * @todo guilhermeblanco Remove this method */ public function isCollectionValuedAssociation($fieldName) { return isset($this->associationMappings[$fieldName]) - && ! ($this->associationMappings[$fieldName]['type'] & self::TO_ONE); + && $this->associationMappings[$fieldName] instanceof ToManyAssociationMetadata; } /** @@ -2450,6 +2487,8 @@ public function getAssociationNames() * {@inheritDoc} * * @throws InvalidArgumentException + * + * @todo guilhermeblanco Remove this method (it exists in Persistence repo) */ public function getAssociationTargetClass($assocName) { @@ -2457,7 +2496,7 @@ public function getAssociationTargetClass($assocName) throw new InvalidArgumentException("Association name expected, '" . $assocName ."' is not an association."); } - return $this->associationMappings[$assocName]['targetEntity']; + return $this->associationMappings[$assocName]->getTargetEntity(); } /** @@ -2478,37 +2517,45 @@ public function isVersioned() /** * {@inheritDoc} + * + * @todo guilhermeblanco Remove this method (it exists in Persistence repo) */ public function isAssociationInverseSide($fieldName) { return isset($this->associationMappings[$fieldName]) - && ! $this->associationMappings[$fieldName]['isOwningSide']; + && ! $this->associationMappings[$fieldName]->isOwningSide(); } /** * {@inheritDoc} + * + * @todo guilhermeblanco Remove this method (it exists in Persistence repo) */ public function getAssociationMappedByTargetField($fieldName) { - return $this->associationMappings[$fieldName]['mappedBy']; + return $this->associationMappings[$fieldName]->getMappedBy(); } /** * @param string $targetClass * * @return array + * + * @todo guilhermeblanco Remove this method (it exists in Persistence repo). One usage left. */ public function getAssociationsByTargetClass($targetClass) { - $relations = []; + $associations = []; - foreach ($this->associationMappings as $mapping) { - if ($mapping['targetEntity'] == $targetClass) { - $relations[$mapping['fieldName']] = $mapping; + foreach ($this->associationMappings as $association) { + if ($association->getTargetEntity() !== $targetClass) { + continue; } + + $associations[$association->getName()] = $association; } - return $relations; + return $associations; } /** @@ -2535,6 +2582,8 @@ public function fullyQualifiedClassName($className) * @param string $name * * @return mixed + * + * @todo guilhermeblanco Consider removing this method somehow */ public function getMetadataValue($name) { @@ -2599,6 +2648,7 @@ public function inlineEmbeddable($property, ClassMetadata $embeddable) /** * @param string $fieldName + * * @throws MappingException */ private function assertFieldNotMapped($fieldName) @@ -2616,7 +2666,7 @@ private function assertFieldNotMapped($fieldName) * @param AbstractPlatform $platform * @return string * - * @todo Sequence names should be computed in DBAL depending on the platform + * @todo guilhermeblanco Sequence names should be computed in DBAL depending on the platform */ public function getSequenceName(AbstractPlatform $platform) { @@ -2629,7 +2679,7 @@ public function getSequenceName(AbstractPlatform $platform) * @param AbstractPlatform $platform * @return string * - * @todo Sequence names should be computed in DBAL depending on the platform + * @todo guilhermeblanco Sequence names should be computed in DBAL depending on the platform */ public function getSequencePrefix(AbstractPlatform $platform) { @@ -2647,14 +2697,4 @@ public function getSequencePrefix(AbstractPlatform $platform) return $sequencePrefix; } - - /** - * @param array $mapping - */ - private function assertMappingOrderBy(array $mapping) - { - if (isset($mapping['orderBy']) && !is_array($mapping['orderBy'])) { - throw new InvalidArgumentException("'orderBy' is expected to be an array, not " . gettype($mapping['orderBy'])); - } - } } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 15b4169d14a..9fecc715175 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -127,8 +127,8 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS $class->setPrimaryTable($parent->table); } - $this->addInheritedFields($class, $parent); - $this->addInheritedRelations($class, $parent); + $this->addInheritedProperties($class, $parent); + $this->addInheritedAssociations($class, $parent); $this->addInheritedEmbeddedClasses($class, $parent); $class->setInheritanceType($parent->inheritanceType); @@ -275,11 +275,13 @@ protected function completeRuntimeMetadata($class, $parent) } // Resolve association join column table names - foreach ($class->associationMappings as $mapping) { - if (isset($mapping['joinColumns'])) { - foreach ($mapping['joinColumns'] as $joinColumn) { - $joinColumn->setTableName($joinColumn->getTableName() ?? $tableName); - } + foreach ($class->associationMappings as $association) { + if (! ($association instanceof ToOneAssociationMetadata)) { + continue; + } + + foreach ($association->getJoinColumns() as $joinColumn) { + $joinColumn->setTableName($joinColumn->getTableName() ?? $tableName); } } @@ -441,7 +443,7 @@ private function getShortName($className) * * @return void */ - private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $parentClass) + private function addInheritedProperties(ClassMetadata $subClass, ClassMetadata $parentClass) { foreach ($parentClass->getProperties() as $property) { $subClass->addInheritedProperty($property); @@ -462,33 +464,19 @@ private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $pare * * @throws MappingException */ - private function addInheritedRelations(ClassMetadata $subClass, ClassMetadata $parentClass) + private function addInheritedAssociations(ClassMetadata $subClass, ClassMetadata $parentClass) { - $tableName = $subClass->getTableName(); - - foreach ($parentClass->associationMappings as $field => $mapping) { - if ($parentClass->isMappedSuperclass) { - if ($mapping['type'] & ClassMetadata::TO_MANY && !$mapping['isOwningSide']) { - throw MappingException::illegalToManyAssociationOnMappedSuperclass($parentClass->name, $field); - } + $isAbstract = $parentClass->isMappedSuperclass; - $mapping['sourceEntity'] = $subClass->name; - } - - // Resolve which table owns the join columns in a to-one mapping - if (isset($mapping['joinColumns'])) { - foreach ($mapping['joinColumns'] as $joinColumn) { - if ( ! $joinColumn->getTableName()) { - $joinColumn->setTableName(! $parentClass->isMappedSuperclass ? $tableName : null); - } - } - } - - if ( ! isset($mapping['inherited']) && ! $parentClass->isMappedSuperclass) { - $mapping['inherited'] = $parentClass->name; + foreach ($parentClass->associationMappings as $association) { + if ($isAbstract && ! $association->isOwningSide() && $association instanceof ToManyAssociationMetadata) { + throw MappingException::illegalToManyAssociationOnMappedSuperclass( + $parentClass->name, + $association->getName() + ); } - $subClass->addInheritedAssociationMapping($mapping); + $subClass->addInheritedAssociation($association); } } diff --git a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php index b8f25d3e079..cdd159b66cc 100644 --- a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php +++ b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php @@ -44,7 +44,7 @@ public function getIdentifierColumnNames(ClassMetadata $class, AbstractPlatform } // Association defined as Id field - $joinColumns = $class->associationMappings[$fieldName]['joinColumns']; + $joinColumns = $class->associationMappings[$fieldName]->getJoinColumns(); $assocQuotedColumnNames = array_map( function (JoinColumnMetadata $joinColumn) use ($platform) { diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index aa98efc0619..8efd8a98cfd 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -29,20 +29,7 @@ use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; -use Doctrine\ORM\Mapping\Builder\TableMetadataBuilder; -use Doctrine\ORM\Mapping\CacheMetadata; -use Doctrine\ORM\Mapping\CacheUsage; -use Doctrine\ORM\Mapping\ChangeTrackingPolicy; -use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\FetchMode; -use Doctrine\ORM\Mapping\FieldMetadata; -use Doctrine\ORM\Mapping\GeneratorType; -use Doctrine\ORM\Mapping\InheritanceType; -use Doctrine\ORM\Mapping\JoinColumnMetadata; -use Doctrine\ORM\Mapping\JoinTableMetadata; -use Doctrine\ORM\Mapping\MappingException; -use Doctrine\ORM\Mapping\Property; -use Doctrine\ORM\Mapping\VersionFieldMetadata; +use Doctrine\ORM\Mapping; /** * The AnnotationDriver reads the mapping metadata from docblock annotations. @@ -114,7 +101,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat break; default: - throw MappingException::classIsNotAValidEntityOrMappedSuperClass($className); + throw Mapping\MappingException::classIsNotAValidEntityOrMappedSuperClass($className); } // Evaluate Table annotation @@ -210,10 +197,10 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $inheritanceTypeAnnot = $classAnnotations[Annotation\InheritanceType::class]; $metadata->setInheritanceType( - constant(sprintf('%s::%s', InheritanceType::class, $inheritanceTypeAnnot->value)) + constant(sprintf('%s::%s', Mapping\InheritanceType::class, $inheritanceTypeAnnot->value)) ); - if ($metadata->inheritanceType !== InheritanceType::NONE) { + if ($metadata->inheritanceType !== Mapping\InheritanceType::NONE) { $discriminatorColumnBuilder = new DiscriminatorColumnMetadataBuilder(); $discriminatorColumnBuilder->withTableName($metadata->getTableName()); @@ -256,7 +243,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $changeTrackingAnnot = $classAnnotations[Annotation\ChangeTrackingPolicy::class]; $metadata->setChangeTrackingPolicy( - constant(sprintf('%s::%s', ChangeTrackingPolicy::class, $changeTrackingAnnot->value)) + constant(sprintf('%s::%s', Mapping\ChangeTrackingPolicy::class, $changeTrackingAnnot->value)) ); } @@ -268,7 +255,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $listenerClassName = $metadata->fullyQualifiedClassName($item); if ( ! class_exists($listenerClassName)) { - throw MappingException::entityListenerClassNotFound($listenerClassName, $className); + throw Mapping\MappingException::entityListenerClassNotFound($listenerClassName, $className); } $hasMapping = false; @@ -312,7 +299,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $propertyAnnotations = $this->reader->getPropertyAnnotations($reflProperty); foreach ($propertyAnnotations as $key => $annot) { - if ( ! is_numeric($key)) { + if (!is_numeric($key)) { continue; } @@ -320,7 +307,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat } // Field can only be annotated with one of: - // @Column, @OneToOne, @OneToMany, @ManyToOne, @ManyToMany + // @Column, @OneToOne, @OneToMany, @ManyToOne, @ManyToMany, @Embedded switch (true) { case isset($propertyAnnotations[Annotation\Column::class]): // Field found @@ -333,158 +320,66 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $metadata->addProperty($fieldMetadata); // Check for Version - if ($fieldMetadata instanceof VersionFieldMetadata) { + if ($fieldMetadata instanceof Mapping\VersionFieldMetadata) { $metadata->setVersionProperty($fieldMetadata); } break; + case isset($propertyAnnotations[Annotation\OneToOne::class]): + $assocMetadata = $this->convertReflectionPropertyToOneToOneAssociationMetadata( + $reflProperty, + $propertyAnnotations, + $metadata + ); - } - -// $property = $this->convertProperty($reflProperty); -// -// $metadata->addProperty($property); - - // Field can only be annotated with one of: - // @Column, @OneToOne, @OneToMany, @ManyToOne, @ManyToMany - $fieldName = $reflProperty->getName(); - - $mapping = []; - $mapping['fieldName'] = $fieldName; - - // Evaluate @Cache annotation - if (($cacheAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Cache::class)) !== null) { - $mapping['cache'] = $this->convertCacheAnnotationToCacheMetadata( - $cacheAnnot, - $metadata, - $fieldName - ); - } - - if ($oneToOneAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\OneToOne::class)) { - if ($idAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Id::class)) { - $mapping['id'] = true; - } - - // Check for JoinColumn/JoinColumns annotations - $joinColumns = []; - - if ($joinColumnAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinColumn::class)) { - $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); - } else if ($joinColumnsAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinColumns::class)) { - foreach ($joinColumnsAnnot->value as $joinColumn) { - $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumn); - } - } - - $mapping['targetEntity'] = $oneToOneAnnot->targetEntity; - $mapping['joinColumns'] = $joinColumns; - $mapping['mappedBy'] = $oneToOneAnnot->mappedBy; - $mapping['inversedBy'] = $oneToOneAnnot->inversedBy; - $mapping['cascade'] = $oneToOneAnnot->cascade; - $mapping['orphanRemoval'] = $oneToOneAnnot->orphanRemoval; - $mapping['fetch'] = $this->getFetchMode($className, $oneToOneAnnot->fetch); - - $metadata->mapOneToOne($mapping); - - continue; - } - - if ($oneToManyAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\OneToMany::class)) { - $mapping['mappedBy'] = $oneToManyAnnot->mappedBy; - $mapping['targetEntity'] = $oneToManyAnnot->targetEntity; - $mapping['cascade'] = $oneToManyAnnot->cascade; - $mapping['indexBy'] = $oneToManyAnnot->indexBy; - $mapping['orphanRemoval'] = $oneToManyAnnot->orphanRemoval; - $mapping['fetch'] = $this->getFetchMode($className, $oneToManyAnnot->fetch); - - if ($orderByAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\OrderBy::class)) { - $mapping['orderBy'] = $orderByAnnot->value; - } - - $metadata->mapOneToMany($mapping); - - continue; - } - - if ($manyToOneAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\ManyToOne::class)) { - if ($idAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Id::class)) { - $mapping['id'] = true; - } - - // Check for JoinColumn/JoinColumns annotations - $joinColumns = []; - - if ($joinColumnAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinColumn::class)) { - $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); - } else if ($joinColumnsAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinColumns::class)) { - foreach ($joinColumnsAnnot->value as $joinColumn) { - $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumn); - } - } - - $mapping['joinColumns'] = $joinColumns; - $mapping['cascade'] = $manyToOneAnnot->cascade; - $mapping['inversedBy'] = $manyToOneAnnot->inversedBy; - $mapping['targetEntity'] = $manyToOneAnnot->targetEntity; - $mapping['fetch'] = $this->getFetchMode($className, $manyToOneAnnot->fetch); - - $metadata->mapManyToOne($mapping); + $metadata->mapOneToOne($assocMetadata); - continue; - } + break; - if ($manyToManyAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\ManyToMany::class)) { - $joinTable = new JoinTableMetadata(); + case isset($propertyAnnotations[Annotation\ManyToOne::class]): + $assocMetadata = $this->convertReflectionPropertyToManyToOneAssociationMetadata( + $reflProperty, + $propertyAnnotations, + $metadata + ); - if ($joinTableAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\JoinTable::class)) { - if (! empty($joinTableAnnot->name)) { - $joinTable->setName($joinTableAnnot->name); - } + $metadata->mapManyToOne($assocMetadata); - if (! empty($joinTableAnnot->schema)) { - $joinTable->setSchema($joinTableAnnot->schema); - } + break; - foreach ($joinTableAnnot->joinColumns as $joinColumnAnnot) { - $joinColumn = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); + case isset($propertyAnnotations[Annotation\OneToMany::class]): + $assocMetadata = $this->convertReflectionPropertyToOneToManyAssociationMetadata( + $reflProperty, + $propertyAnnotations, + $metadata + ); - $joinTable->addJoinColumn($joinColumn); - } + $metadata->mapOneToMany($assocMetadata); - foreach ($joinTableAnnot->inverseJoinColumns as $joinColumnAnnot) { - $joinColumn = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); + break; - $joinTable->addInverseJoinColumn($joinColumn); - } - } + case isset($propertyAnnotations[Annotation\ManyToMany::class]): + $assocMetadata = $this->convertReflectionPropertyToManyToManyAssociationMetadata( + $reflProperty, + $propertyAnnotations, + $metadata + ); - $mapping['joinTable'] = $joinTable; - $mapping['targetEntity'] = $manyToManyAnnot->targetEntity; - $mapping['mappedBy'] = $manyToManyAnnot->mappedBy; - $mapping['inversedBy'] = $manyToManyAnnot->inversedBy; - $mapping['cascade'] = $manyToManyAnnot->cascade; - $mapping['indexBy'] = $manyToManyAnnot->indexBy; - $mapping['orphanRemoval'] = $manyToManyAnnot->orphanRemoval; - $mapping['fetch'] = $this->getFetchMode($className, $manyToManyAnnot->fetch); - - if ($orderByAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\OrderBy::class)) { - $mapping['orderBy'] = $orderByAnnot->value; - } + $metadata->mapManyToMany($assocMetadata); - $metadata->mapManyToMany($mapping); + break; - continue; - } + case isset($propertyAnnotations[Annotation\Embedded::class]): + $embeddedAnnot = $propertyAnnotations[Annotation\Embedded::class]; - if ($embeddedAnnot = $this->reader->getPropertyAnnotation($reflProperty, Annotation\Embedded::class)) { - $mapping['class'] = $embeddedAnnot->class; - $mapping['columnPrefix'] = $embeddedAnnot->columnPrefix; + $mapping['fieldName'] = $reflProperty->getName(); + $mapping['class'] = $embeddedAnnot->class; + $mapping['columnPrefix'] = $embeddedAnnot->columnPrefix; - $metadata->mapEmbedded($mapping); + $metadata->mapEmbedded($mapping); - continue; + break; } } @@ -493,59 +388,47 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $associationOverridesAnnot = $classAnnotations[Annotation\AssociationOverrides::class]; foreach ($associationOverridesAnnot->value as $associationOverride) { - $override = []; - $fieldName = $associationOverride->name; + $fieldName = $associationOverride->name; + + if (! isset($metadata->associationMappings[$fieldName])) { + throw Mapping\MappingException::invalidOverrideFieldName($metadata->name, $fieldName); + } + + $existingClass = get_class($metadata->associationMappings[$fieldName]); + $override = new $existingClass($fieldName); // Check for JoinColumn/JoinColumns annotations if ($associationOverride->joinColumns) { $joinColumns = []; - foreach ($associationOverride->joinColumns as $joinColumn) { - $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumn); + foreach ($associationOverride->joinColumns as $joinColumnAnnot) { + $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); } - $override['joinColumns'] = $joinColumns; + $override->setJoinColumns($joinColumns); } // Check for JoinTable annotations if ($associationOverride->joinTable) { - $joinTableAnnot = $associationOverride->joinTable; - $joinTable = new JoinTableMetadata(); - - if (!empty($joinTableAnnot->name)) { - $joinTable->setName($joinTableAnnot->name); - } - - if (!empty($joinTableAnnot->schema)) { - $joinTable->setSchema($joinTableAnnot->schema); - } - - foreach ($joinTableAnnot->joinColumns as $joinColumnAnnot) { - $joinColumn = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); + $joinTableAnnot = $associationOverride->joinTable; + $joinTableMetadata = $this->convertJoinTableAnnotationToJoinTableMetadata($joinTableAnnot); - $joinTable->addJoinColumn($joinColumn); - } - - foreach ($joinTableAnnot->inverseJoinColumns as $joinColumnAnnot) { - $joinColumn = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); - - $joinTable->addInverseJoinColumn($joinColumn); - } - - $override['joinTable'] = $joinTable; + $override->setJoinTable($joinTableMetadata); } // Check for inversedBy if ($associationOverride->inversedBy) { - $override['inversedBy'] = $associationOverride->inversedBy; + $override->setInversedBy($associationOverride->inversedBy); } // Check for `fetch` if ($associationOverride->fetch) { - $override['fetch'] = constant(Mapping\ClassMetadata::class . '::FETCH_' . $associationOverride->fetch); + $override->setFetchMode( + constant(Mapping\ClassMetadata::class . '::FETCH_' . $associationOverride->fetch) + ); } - $metadata->setAssociationOverride($fieldName, $override); + $metadata->setAssociationOverride($override); } } @@ -573,14 +456,14 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat * * @return integer The fetch mode as defined in ClassMetadata. * - * @throws MappingException If the fetch mode is not valid. + * @throws Mapping\MappingException If the fetch mode is not valid. */ private function getFetchMode($className, $fetchMode) { - $fetchModeConstant = sprintf('%s::%s', FetchMode::class, $fetchMode); + $fetchModeConstant = sprintf('%s::%s', Mapping\FetchMode::class, $fetchMode); if ( ! defined($fetchModeConstant)) { - throw MappingException::invalidFetchMode($className, $fetchMode); + throw Mapping\MappingException::invalidFetchMode($className, $fetchMode); } return constant($fetchModeConstant); @@ -679,7 +562,7 @@ private function convertSqlResultSetMapping(Annotation\SqlResultSetMapping $resu private function convertReflectionPropertyToFieldMetadata( \ReflectionProperty $reflProperty, array $propertyAnnotations, - ClassMetadata $metadata /* @todo Should be removed once FieldMetadata owns Generator information */ + Mapping\ClassMetadata $metadata /* @todo Should be removed once FieldMetadata owns Generator information */ ) { $className = $reflProperty->getDeclaringClass()->getName(); @@ -688,7 +571,7 @@ private function convertReflectionPropertyToFieldMetadata( $columnAnnot = $propertyAnnotations[Annotation\Column::class]; if ($columnAnnot->type == null) { - throw MappingException::propertyTypeIsRequired($className, $fieldName); + throw Mapping\MappingException::propertyTypeIsRequired($className, $fieldName); } $fieldMetadata = $this->convertColumnAnnotationToFieldMetadata($columnAnnot, $fieldName, $isVersioned); @@ -702,7 +585,7 @@ private function convertReflectionPropertyToFieldMetadata( if (isset($propertyAnnotations[Annotation\GeneratedValue::class])) { $generatedValueAnnot = $propertyAnnotations[Annotation\GeneratedValue::class]; $strategy = strtoupper($generatedValueAnnot->strategy); - $idGeneratorType = constant(sprintf('%s::%s', GeneratorType::class, $strategy)); + $idGeneratorType = constant(sprintf('%s::%s', Mapping\GeneratorType::class, $strategy)); $metadata->setIdGeneratorType($idGeneratorType); } @@ -731,12 +614,239 @@ private function convertReflectionPropertyToFieldMetadata( /* @todo If it is not supported, why does this exist? */ case isset($propertyAnnotations['Doctrine\ORM\Mapping\TableGenerator']): - throw MappingException::tableIdGeneratorNotImplemented($className); + throw Mapping\MappingException::tableIdGeneratorNotImplemented($className); } return $fieldMetadata; } + private function convertReflectionPropertyToOneToOneAssociationMetadata( + \ReflectionProperty $reflProperty, + array $propertyAnnotations, + Mapping\ClassMetadata $metadata + ) + { + $className = $reflProperty->getDeclaringClass()->getName(); + $fieldName = $reflProperty->getName(); + $oneToOneAnnot = $propertyAnnotations[Annotation\OneToOne::class]; + $assocMetadata = new Mapping\OneToOneAssociationMetadata($fieldName); + + $assocMetadata->setTargetEntity($oneToOneAnnot->targetEntity); + $assocMetadata->setCascade($oneToOneAnnot->cascade); + $assocMetadata->setOrphanRemoval($oneToOneAnnot->orphanRemoval); + $assocMetadata->setFetchMode($this->getFetchMode($className, $oneToOneAnnot->fetch)); + + if (! empty($oneToOneAnnot->mappedBy)) { + $assocMetadata->setMappedBy($oneToOneAnnot->mappedBy); + } + + if (! empty($oneToOneAnnot->inversedBy)) { + $assocMetadata->setInversedBy($oneToOneAnnot->inversedBy); + } + + // Check for Id + if (isset($propertyAnnotations[Annotation\Id::class])) { + $assocMetadata->setPrimaryKey(true); + } + + // Check for Cache + if (isset($propertyAnnotations[Annotation\Cache::class])) { + $cacheAnnot = $propertyAnnotations[Annotation\Cache::class]; + $cacheMetadata = $this->convertCacheAnnotationToCacheMetadata($cacheAnnot, $metadata, $fieldName); + + $assocMetadata->setCache($cacheMetadata); + } + + // Check for JoinColumn/JoinColumns annotations + switch (true) { + case isset($propertyAnnotations[Annotation\JoinColumn::class]): + $joinColumnAnnot = $propertyAnnotations[Annotation\JoinColumn::class]; + + $assocMetadata->addJoinColumn( + $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot) + ); + + break; + + case isset($propertyAnnotations[Annotation\JoinColumns::class]): + $joinColumnsAnnot = $propertyAnnotations[Annotation\JoinColumns::class]; + + foreach ($joinColumnsAnnot->value as $joinColumnAnnot) { + $assocMetadata->addJoinColumn( + $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot) + ); + } + + break; + } + + return $assocMetadata; + } + + private function convertReflectionPropertyToManyToOneAssociationMetadata( + \ReflectionProperty $reflProperty, + array $propertyAnnotations, + Mapping\ClassMetadata $metadata + ) + { + $className = $reflProperty->getDeclaringClass()->getName(); + $fieldName = $reflProperty->getName(); + $manyToOneAnnot = $propertyAnnotations[Annotation\ManyToOne::class]; + $assocMetadata = new Mapping\ManyToOneAssociationMetadata($fieldName); + + $assocMetadata->setTargetEntity($manyToOneAnnot->targetEntity); + $assocMetadata->setCascade($manyToOneAnnot->cascade); + $assocMetadata->setFetchMode($this->getFetchMode($className, $manyToOneAnnot->fetch)); + + if (! empty($manyToOneAnnot->inversedBy)) { + $assocMetadata->setInversedBy($manyToOneAnnot->inversedBy); + } + + // Check for Id + if (isset($propertyAnnotations[Annotation\Id::class])) { + $assocMetadata->setPrimaryKey(true); + } + + // Check for Cache + if (isset($propertyAnnotations[Annotation\Cache::class])) { + $cacheAnnot = $propertyAnnotations[Annotation\Cache::class]; + $cacheMetadata = $this->convertCacheAnnotationToCacheMetadata($cacheAnnot, $metadata, $fieldName); + + $assocMetadata->setCache($cacheMetadata); + } + + // Check for JoinColumn/JoinColumns annotations + switch (true) { + case isset($propertyAnnotations[Annotation\JoinColumn::class]): + $joinColumnAnnot = $propertyAnnotations[Annotation\JoinColumn::class]; + + $assocMetadata->addJoinColumn( + $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot) + ); + + break; + + case isset($propertyAnnotations[Annotation\JoinColumns::class]): + $joinColumnsAnnot = $propertyAnnotations[Annotation\JoinColumns::class]; + + foreach ($joinColumnsAnnot->value as $joinColumnAnnot) { + $assocMetadata->addJoinColumn( + $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot) + ); + } + + break; + } + + return $assocMetadata; + } + + private function convertReflectionPropertyToOneToManyAssociationMetadata( + \ReflectionProperty $reflProperty, + array $propertyAnnotations, + Mapping\ClassMetadata $metadata + ) + { + $className = $reflProperty->getDeclaringClass()->getName(); + $fieldName = $reflProperty->getName(); + $oneToManyAnnot = $propertyAnnotations[Annotation\OneToMany::class]; + $assocMetadata = new Mapping\OneToManyAssociationMetadata($fieldName); + + $assocMetadata->setTargetEntity($oneToManyAnnot->targetEntity); + $assocMetadata->setCascade($oneToManyAnnot->cascade); + $assocMetadata->setOrphanRemoval($oneToManyAnnot->orphanRemoval); + $assocMetadata->setFetchMode($this->getFetchMode($className, $oneToManyAnnot->fetch)); + + if (! empty($oneToManyAnnot->mappedBy)) { + $assocMetadata->setMappedBy($oneToManyAnnot->mappedBy); + } + + if (! empty($oneToManyAnnot->indexBy)) { + $assocMetadata->setIndexedBy($oneToManyAnnot->indexBy); + } + + // Check for OrderBy + if (isset($propertyAnnotations[Annotation\OrderBy::class])) { + $orderByAnnot = $propertyAnnotations[Annotation\OrderBy::class]; + + $assocMetadata->setOrderBy($orderByAnnot->value); + } + + // Check for Id + if (isset($propertyAnnotations[Annotation\Id::class])) { + $assocMetadata->setPrimaryKey(true); + } + + // Check for Cache + if (isset($propertyAnnotations[Annotation\Cache::class])) { + $cacheAnnot = $propertyAnnotations[Annotation\Cache::class]; + $cacheMetadata = $this->convertCacheAnnotationToCacheMetadata($cacheAnnot, $metadata, $fieldName); + + $assocMetadata->setCache($cacheMetadata); + } + + return $assocMetadata; + } + + private function convertReflectionPropertyToManyToManyAssociationMetadata( + \ReflectionProperty $reflProperty, + array $propertyAnnotations, + Mapping\ClassMetadata $metadata + ) + { + $className = $reflProperty->getDeclaringClass()->getName(); + $fieldName = $reflProperty->getName(); + $manyToManyAnnot = $propertyAnnotations[Annotation\ManyToMany::class]; + $assocMetadata = new Mapping\ManyToManyAssociationMetadata($fieldName); + + $assocMetadata->setTargetEntity($manyToManyAnnot->targetEntity); + $assocMetadata->setCascade($manyToManyAnnot->cascade); + $assocMetadata->setOrphanRemoval($manyToManyAnnot->orphanRemoval); + $assocMetadata->setFetchMode($this->getFetchMode($className, $manyToManyAnnot->fetch)); + + if (! empty($manyToManyAnnot->mappedBy)) { + $assocMetadata->setMappedBy($manyToManyAnnot->mappedBy); + } + + if (! empty($manyToManyAnnot->inversedBy)) { + $assocMetadata->setInversedBy($manyToManyAnnot->inversedBy); + } + + if (! empty($manyToManyAnnot->indexBy)) { + $assocMetadata->setIndexedBy($manyToManyAnnot->indexBy); + } + + // Check for JoinTable + if (isset($propertyAnnotations[Annotation\JoinTable::class])) { + $joinTableAnnot = $propertyAnnotations[Annotation\JoinTable::class]; + $joinTableMetadata = $this->convertJoinTableAnnotationToJoinTableMetadata($joinTableAnnot); + + $assocMetadata->setJoinTable($joinTableMetadata); + } + + // Check for OrderBy + if (isset($propertyAnnotations[Annotation\OrderBy::class])) { + $orderByAnnot = $propertyAnnotations[Annotation\OrderBy::class]; + + $assocMetadata->setOrderBy($orderByAnnot->value); + } + + // Check for Id + if (isset($propertyAnnotations[Annotation\Id::class])) { + $assocMetadata->setPrimaryKey(true); + } + + // Check for Cache + if (isset($propertyAnnotations[Annotation\Cache::class])) { + $cacheAnnot = $propertyAnnotations[Annotation\Cache::class]; + $cacheMetadata = $this->convertCacheAnnotationToCacheMetadata($cacheAnnot, $metadata, $fieldName); + + $assocMetadata->setCache($cacheMetadata); + } + + return $assocMetadata; + } + /** * Parse the given Column as FieldMetadata * @@ -744,13 +854,13 @@ private function convertReflectionPropertyToFieldMetadata( * @param string $fieldName * @param bool $isVersioned * - * @return FieldMetadata + * @return Mapping\FieldMetadata */ private function convertColumnAnnotationToFieldMetadata(Annotation\Column $columnAnnot, string $fieldName, bool $isVersioned) { $fieldMetadata = $isVersioned - ? new VersionFieldMetadata($fieldName) - : new FieldMetadata($fieldName) + ? new Mapping\VersionFieldMetadata($fieldName) + : new Mapping\FieldMetadata($fieldName) ; $fieldMetadata->setType(Type::getType($columnAnnot->type)); @@ -779,16 +889,50 @@ private function convertColumnAnnotationToFieldMetadata(Annotation\Column $colum return $fieldMetadata; } + /** + * Parse the given JoinTable as JoinTableMetadata + * + * @param Annotation\JoinTable $joinTableAnnot + * + * @return Mapping\JoinTableMetadata + */ + private function convertJoinTableAnnotationToJoinTableMetadata(Annotation\JoinTable $joinTableAnnot) + { + $joinTable = new Mapping\JoinTableMetadata(); + + if (! empty($joinTableAnnot->name)) { + $joinTable->setName($joinTableAnnot->name); + } + + if (! empty($joinTableAnnot->schema)) { + $joinTable->setSchema($joinTableAnnot->schema); + } + + foreach ($joinTableAnnot->joinColumns as $joinColumnAnnot) { + $joinColumn = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); + + $joinTable->addJoinColumn($joinColumn); + } + + foreach ($joinTableAnnot->inverseJoinColumns as $joinColumnAnnot) { + $joinColumn = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); + + $joinTable->addInverseJoinColumn($joinColumn); + } + + return $joinTable; + } + /** * Parse the given JoinColumn as JoinColumnMetadata * * @param Annotation\JoinColumn $joinColumnAnnot * - * @return JoinColumnMetadata + * @return Mapping\JoinColumnMetadata */ private function convertJoinColumnAnnotationToJoinColumnMetadata(Annotation\JoinColumn $joinColumnAnnot) { - $joinColumn = new JoinColumnMetadata(); + $joinColumn = new Mapping\JoinColumnMetadata(); // @todo Remove conditionals for name and referencedColumnName once naming strategy is brought into drivers if (! empty($joinColumnAnnot->name)) { @@ -816,24 +960,28 @@ private function convertJoinColumnAnnotationToJoinColumnMetadata(Annotation\Join return $joinColumn; } - + /** * Parse the given Cache as CacheMetadata * - * @param Annotation\Cache $cacheAnnot - * @param ClassMetadata $metadata - * @param null|string $fieldName + * @param Annotation\Cache $cacheAnnot + * @param Mapping\ClassMetadata $metadata + * @param null|string $fieldName * - * @return CacheMetadata + * @return Mapping\CacheMetadata */ - private function convertCacheAnnotationToCacheMetadata(Annotation\Cache $cacheAnnot, ClassMetadata $metadata, $fieldName = null) + private function convertCacheAnnotationToCacheMetadata( + Annotation\Cache $cacheAnnot, + Mapping\ClassMetadata $metadata, + $fieldName = null + ) { $baseRegion = strtolower(str_replace('\\', '_', $metadata->rootEntityName)); $defaultRegion = $baseRegion . ($fieldName ? '__' . $fieldName : ''); $cacheBuilder = new CacheMetadataBuilder(); $cacheBuilder - ->withUsage(constant(sprintf('%s::%s', CacheUsage::class, $cacheAnnot->usage))) + ->withUsage(constant(sprintf('%s::%s', Mapping\CacheUsage::class, $cacheAnnot->usage))) ->withRegion($cacheAnnot->region ?: $defaultRegion) ; diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 24d14e094df..62cb8a18689 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -33,7 +33,11 @@ use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\JoinTableMetadata; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ManyToOneAssociationMetadata; use Doctrine\ORM\Mapping\MappingException; +use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; +use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; use Doctrine\ORM\Mapping\VersionFieldMetadata; use SimpleXMLElement; @@ -144,7 +148,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate second level cache if (isset($xmlRoot->cache)) { $cache = $this->convertCacheElementToCacheMetadata($xmlRoot->cache, $metadata); - + $metadata->setCache($cache); } @@ -179,7 +183,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) foreach ($xmlRoot->{'sql-result-set-mappings'}->{'sql-result-set-mapping'} as $rsmElement) { $entities = []; $columns = []; - + foreach ($rsmElement as $entityElement) { // if (isset($entityElement['entity-class'])) { @@ -364,24 +368,25 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate mappings if (isset($xmlRoot->{'one-to-one'})) { foreach ($xmlRoot->{'one-to-one'} as $oneToOneElement) { - $mapping = [ - 'fieldName' => (string) $oneToOneElement['field'], - 'targetEntity' => (string) $oneToOneElement['target-entity'] - ]; + $association = new OneToOneAssociationMetadata((string) $oneToOneElement['field']); - if (isset($associationIds[$mapping['fieldName']])) { - $mapping['id'] = true; + $association->setTargetEntity((string) $oneToOneElement['target-entity']); + + if (isset($associationIds[$association->getName()])) { + $association->setPrimaryKey(true); } if (isset($oneToOneElement['fetch'])) { - $mapping['fetch'] = constant('Doctrine\ORM\Mapping\FetchMode::' . (string) $oneToOneElement['fetch']); + $association->setFetchMode( + constant('Doctrine\ORM\Mapping\FetchMode::' . (string) $oneToOneElement['fetch']) + ); } if (isset($oneToOneElement['mapped-by'])) { - $mapping['mappedBy'] = (string) $oneToOneElement['mapped-by']; + $association->setMappedBy((string) $oneToOneElement['mapped-by']); } else { if (isset($oneToOneElement['inversed-by'])) { - $mapping['inversedBy'] = (string) $oneToOneElement['inversed-by']; + $association->setInversedBy((string) $oneToOneElement['inversed-by']); } $joinColumns = []; @@ -394,96 +399,104 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } } - $mapping['joinColumns'] = $joinColumns; + $association->setJoinColumns($joinColumns); } if (isset($oneToOneElement->cascade)) { - $mapping['cascade'] = $this->getCascadeMappings($oneToOneElement->cascade); + $association->setCascade($this->getCascadeMappings($oneToOneElement->cascade)); } if (isset($oneToOneElement['orphan-removal'])) { - $mapping['orphanRemoval'] = $this->evaluateBoolean($oneToOneElement['orphan-removal']); + $association->setOrphanRemoval($this->evaluateBoolean($oneToOneElement['orphan-removal'])); } // Evaluate second level cache if (isset($oneToOneElement->cache)) { - $mapping['cache'] = $this->convertCacheElementToCacheMetadata( - $oneToOneElement->cache, - $metadata, - $mapping['fieldName'] + $association->setCache( + $this->convertCacheElementToCacheMetadata( + $oneToOneElement->cache, + $metadata, + $association->getName() + ) ); } - $metadata->mapOneToOne($mapping); + $metadata->mapOneToOne($association); } } // Evaluate mappings if (isset($xmlRoot->{'one-to-many'})) { foreach ($xmlRoot->{'one-to-many'} as $oneToManyElement) { - $mapping = [ - 'fieldName' => (string) $oneToManyElement['field'], - 'targetEntity' => (string) $oneToManyElement['target-entity'], - 'mappedBy' => (string) $oneToManyElement['mapped-by'] - ]; + $association = new OneToManyAssociationMetadata((string) $oneToManyElement['field']); + + $association->setTargetEntity((string) $oneToManyElement['target-entity']); + $association->setMappedBy((string) $oneToManyElement['mapped-by']); if (isset($oneToManyElement['fetch'])) { - $mapping['fetch'] = constant('Doctrine\ORM\Mapping\FetchMode::' . (string) $oneToManyElement['fetch']); + $association->setFetchMode( + constant('Doctrine\ORM\Mapping\FetchMode::' . (string) $oneToManyElement['fetch']) + ); } if (isset($oneToManyElement->cascade)) { - $mapping['cascade'] = $this->getCascadeMappings($oneToManyElement->cascade); + $association->setCascade($this->getCascadeMappings($oneToManyElement->cascade)); } if (isset($oneToManyElement['orphan-removal'])) { - $mapping['orphanRemoval'] = $this->evaluateBoolean($oneToManyElement['orphan-removal']); + $association->setOrphanRemoval($this->evaluateBoolean($oneToManyElement['orphan-removal'])); } if (isset($oneToManyElement->{'order-by'})) { $orderBy = []; + foreach ($oneToManyElement->{'order-by'}->{'order-by-field'} as $orderByField) { $orderBy[(string) $orderByField['name']] = (string) $orderByField['direction']; } - $mapping['orderBy'] = $orderBy; + + $association->setOrderBy($orderBy); } if (isset($oneToManyElement['index-by'])) { - $mapping['indexBy'] = (string) $oneToManyElement['index-by']; + $association->setIndexedBy((string) $oneToManyElement['index-by']); } else if (isset($oneToManyElement->{'index-by'})) { throw new \InvalidArgumentException(" is not a valid tag"); } // Evaluate second level cache if (isset($oneToManyElement->cache)) { - $mapping['cache'] = $this->convertCacheElementToCacheMetadata( - $oneToManyElement->cache, - $metadata, - $mapping['fieldName'] + $association->setCache( + $this->convertCacheElementToCacheMetadata( + $oneToManyElement->cache, + $metadata, + $association->getName() + ) ); } - $metadata->mapOneToMany($mapping); + $metadata->mapOneToMany($association); } } // Evaluate mappings if (isset($xmlRoot->{'many-to-one'})) { foreach ($xmlRoot->{'many-to-one'} as $manyToOneElement) { - $mapping = [ - 'fieldName' => (string) $manyToOneElement['field'], - 'targetEntity' => (string) $manyToOneElement['target-entity'] - ]; + $association = new ManyToOneAssociationMetadata((string) $manyToOneElement['field']); - if (isset($associationIds[$mapping['fieldName']])) { - $mapping['id'] = true; + $association->setTargetEntity((string) $manyToOneElement['target-entity']); + + if (isset($associationIds[$association->getName()])) { + $association->setPrimaryKey(true); } if (isset($manyToOneElement['fetch'])) { - $mapping['fetch'] = constant('Doctrine\ORM\Mapping\FetchMode::' . (string) $manyToOneElement['fetch']); + $association->setFetchMode( + constant('Doctrine\ORM\Mapping\FetchMode::' . (string) $manyToOneElement['fetch']) + ); } if (isset($manyToOneElement['inversed-by'])) { - $mapping['inversedBy'] = (string) $manyToOneElement['inversed-by']; + $association->setInversedBy((string) $manyToOneElement['inversed-by']); } $joinColumns = []; @@ -496,47 +509,49 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } } - $mapping['joinColumns'] = $joinColumns; + $association->setJoinColumns($joinColumns); if (isset($manyToOneElement->cascade)) { - $mapping['cascade'] = $this->getCascadeMappings($manyToOneElement->cascade); + $association->setCascade($this->getCascadeMappings($manyToOneElement->cascade)); } // Evaluate second level cache if (isset($manyToOneElement->cache)) { - $mapping['cache'] = $this->convertCacheElementToCacheMetadata( - $manyToOneElement->cache, - $metadata, - $mapping['fieldName'] + $association->setCache( + $this->convertCacheElementToCacheMetadata( + $manyToOneElement->cache, + $metadata, + $association->getName() + ) ); } - $metadata->mapManyToOne($mapping); - + $metadata->mapManyToOne($association); } } // Evaluate mappings if (isset($xmlRoot->{'many-to-many'})) { foreach ($xmlRoot->{'many-to-many'} as $manyToManyElement) { - $mapping = [ - 'fieldName' => (string) $manyToManyElement['field'], - 'targetEntity' => (string) $manyToManyElement['target-entity'] - ]; + $association = new ManyToManyAssociationMetadata((string) $manyToManyElement['field']); + + $association->setTargetEntity((string) $manyToManyElement['target-entity']); if (isset($manyToManyElement['fetch'])) { - $mapping['fetch'] = constant('Doctrine\ORM\Mapping\FetchMode::' . (string) $manyToManyElement['fetch']); + $association->setFetchMode( + constant('Doctrine\ORM\Mapping\FetchMode::' . (string) $manyToManyElement['fetch']) + ); } if (isset($manyToManyElement['orphan-removal'])) { - $mapping['orphanRemoval'] = $this->evaluateBoolean($manyToManyElement['orphan-removal']); + $association->setOrphanRemoval($this->evaluateBoolean($manyToManyElement['orphan-removal'])); } if (isset($manyToManyElement['mapped-by'])) { - $mapping['mappedBy'] = (string) $manyToManyElement['mapped-by']; + $association->setMappedBy((string) $manyToManyElement['mapped-by']); } else if (isset($manyToManyElement->{'join-table'})) { if (isset($manyToManyElement['inversed-by'])) { - $mapping['inversedBy'] = (string) $manyToManyElement['inversed-by']; + $association->setInversedBy((string) $manyToManyElement['inversed-by']); } $joinTableElement = $manyToManyElement->{'join-table'}; @@ -566,11 +581,11 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } } - $mapping['joinTable'] = $joinTable; + $association->setJoinTable($joinTable); } if (isset($manyToManyElement->cascade)) { - $mapping['cascade'] = $this->getCascadeMappings($manyToManyElement->cascade); + $association->setCascade($this->getCascadeMappings($manyToManyElement->cascade)); } if (isset($manyToManyElement->{'order-by'})) { @@ -580,25 +595,27 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $orderBy[(string) $orderByField['name']] = (string) $orderByField['direction']; } - $mapping['orderBy'] = $orderBy; + $association->setOrderBy($orderBy); } if (isset($manyToManyElement['index-by'])) { - $mapping['indexBy'] = (string) $manyToManyElement['index-by']; + $association->setIndexedBy((string) $manyToManyElement['index-by']); } else if (isset($manyToManyElement->{'index-by'})) { throw new \InvalidArgumentException(" is not a valid tag"); } // Evaluate second level cache if (isset($manyToManyElement->cache)) { - $mapping['cache'] = $this->convertCacheElementToCacheMetadata( - $manyToManyElement->cache, - $metadata, - $mapping['fieldName'] + $association->setCache( + $this->convertCacheElementToCacheMetadata( + $manyToManyElement->cache, + $metadata, + $association->getName() + ) ); } - $metadata->mapManyToMany($mapping); + $metadata->mapManyToMany($association); } } @@ -618,8 +635,14 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate association-overrides if (isset($xmlRoot->{'association-overrides'})) { foreach ($xmlRoot->{'association-overrides'}->{'association-override'} as $overrideElement) { - $fieldName = (string) $overrideElement['name']; - $override = []; + $fieldName = (string) $overrideElement['name']; + + if (! isset($metadata->associationMappings[$fieldName])) { + throw MappingException::invalidOverrideFieldName($metadata->name, $fieldName); + } + + $existingClass = get_class($metadata->associationMappings[$fieldName]); + $override = new $existingClass($fieldName); // Check for join-columns if (isset($overrideElement->{'join-columns'})) { @@ -629,7 +652,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $joinColumns[] = $this->convertJoinColumnElementToJoinColumnMetadata($joinColumnElement); } - $override['joinColumns'] = $joinColumns; + $override->setJoinColumns($joinColumns); } // Check for join-table @@ -661,20 +684,22 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } } - $override['joinTable'] = $joinTable; + $override->setJoinTable($joinTable); } // Check for inversed-by if (isset($overrideElement->{'inversed-by'})) { - $override['inversedBy'] = (string) $overrideElement->{'inversed-by'}['name']; + $override->setInversedBy((string) $overrideElement->{'inversed-by'}['name']); } - // Check for `fetch` + // Check for fetch if (isset($overrideElement['fetch'])) { - $override['fetch'] = constant(Metadata::class . '::FETCH_' . (string) $overrideElement['fetch']); + $override->setFetchMode( + constant(Metadata::class . '::FETCH_' . (string) $overrideElement['fetch']) + ); } - $metadata->setAssociationOverride($fieldName, $override); + $metadata->setAssociationOverride($override); } } @@ -834,7 +859,7 @@ private function convertJoinColumnElementToJoinColumnMetadata(SimpleXMLElement $ return $joinColumnMetadata; } - + /** * Parse the given Cache as CacheMetadata * @@ -855,7 +880,7 @@ private function convertCacheElementToCacheMetadata(SimpleXMLElement $cacheMappi ? constant(sprintf('%s::%s', CacheUsage::class, strtoupper($cacheMapping['usage']))) : CacheUsage::READ_ONLY ; - + $cacheBuilder ->withUsage($usage) ->withRegion($region) diff --git a/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php b/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php index 9232a84543d..98523907a2a 100644 --- a/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php +++ b/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php @@ -69,4 +69,15 @@ public function addInverseJoinColumn(JoinColumnMetadata $joinColumn) { $this->inverseJoinColumns[] = $joinColumn; } + + public function __clone() + { + foreach ($this->joinColumns as $index => $joinColumn) { + $this->joinColumns[$index] = clone $joinColumn; + } + + foreach ($this->inverseJoinColumns as $index => $inverseJoinColumn) { + $this->inverseJoinColumns[$index] = clone $inverseJoinColumn; + } + } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php index 15997d605c1..751b58b2e1f 100644 --- a/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php @@ -21,4 +21,31 @@ class ManyToManyAssociationMetadata extends ToManyAssociationMetadata { + /** @var null|JoinTableMetadata */ + private $joinTable; + + /** + * @param null|JoinTableMetadata $joinTable + */ + public function setJoinTable(JoinTableMetadata $joinTable = null) + { + $this->joinTable = $joinTable; + } + + /** + * @return JoinTableMetadata + */ + public function getJoinTable() + { + return $this->joinTable; + } + + public function __clone() + { + parent::__clone(); + + if ($this->joinTable) { + $this->joinTable = clone $this->joinTable; + } + } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/MappingException.php b/lib/Doctrine/ORM/Mapping/MappingException.php index e86ef617405..112466e458c 100644 --- a/lib/Doctrine/ORM/Mapping/MappingException.php +++ b/lib/Doctrine/ORM/Mapping/MappingException.php @@ -139,6 +139,19 @@ public static function invalidOverrideFieldName($className, $fieldName) return new self("Invalid field override named '$fieldName' for class '$className'."); } + /** + * Exception for invalid association type override. + * + * @param string $className The entity's name. + * @param string $fieldName + * + * @return MappingException + */ + public static function invalidOverrideAssociationType($className, $fieldName) + { + return new self("Invalid association override named '$fieldName' for class '$className'."); + } + /** * Exception for invalid version property override. * diff --git a/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php index cd8866ad27e..16c719edf5e 100644 --- a/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php @@ -24,6 +24,38 @@ class ToManyAssociationMetadata extends AssociationMetadata /** @var array */ private $orderBy = []; - /** @var array */ - private $indexedBy = []; + /** @var null|string */ + private $indexedBy; + + /** + * @param array $orderBy + */ + public function setOrderBy(array $orderBy) + { + $this->orderBy = $orderBy; + } + + /** + * @return array + */ + public function getOrderBy() + { + return $this->orderBy; + } + + /** + * @param null|string $indexedBy + */ + public function setIndexedBy(string $indexedBy = null) + { + $this->indexedBy = $indexedBy; + } + + /** + * @return null|string + */ + public function getIndexedBy() + { + return $this->indexedBy; + } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php index b5a7502ea02..a0d74fdfb9b 100644 --- a/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php @@ -21,14 +21,19 @@ class ToOneAssociationMetadata extends AssociationMetadata { - /** @var bool */ - private $id = false; - /** * @var array */ private $joinColumns = []; + /** + * @param array $joinColumns + */ + public function setJoinColumns(array $joinColumns) + { + $this->joinColumns = $joinColumns; + } + /** * @return array */ @@ -45,5 +50,12 @@ public function addJoinColumn(JoinColumnMetadata $joinColumn) $this->joinColumns[] = $joinColumn; } + public function __clone() + { + parent::__clone(); + foreach ($this->joinColumns as $index => $joinColumn) { + $this->joinColumns[$index] = clone $joinColumn; + } + } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/ORMInvalidArgumentException.php b/lib/Doctrine/ORM/ORMInvalidArgumentException.php index 81466a0fed0..eddf2fc4309 100644 --- a/lib/Doctrine/ORM/ORMInvalidArgumentException.php +++ b/lib/Doctrine/ORM/ORMInvalidArgumentException.php @@ -18,7 +18,9 @@ */ namespace Doctrine\ORM; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; /** * Contains exception messages for all invalid lifecycle state exceptions inside UnitOfWork @@ -82,34 +84,49 @@ static public function readOnlyRequiresManagedEntity($entity) } /** - * @param array $assoc - * @param object $entry + * @param AssociationMetadata $association + * @param object $entry * * @return ORMInvalidArgumentException */ - static public function newEntityFoundThroughRelationship(array $assoc, $entry) + static public function newEntityFoundThroughRelationship(AssociationMetadata $association, $entry) { - return new self("A new entity was found through the relationship '" - . $assoc['sourceEntity'] . "#" . $assoc['fieldName'] . "' that was not" - . " configured to cascade persist operations for entity: " . self::objToStr($entry) . "." - . " To solve this issue: Either explicitly call EntityManager#persist()" - . " on this unknown entity or configure cascade persist " - . " this association in the mapping for example @ManyToOne(..,cascade={\"persist\"})." - . (method_exists($entry, '__toString') ? "": " If you cannot find out which entity causes the problem" - . " implement '" . $assoc['targetEntity'] . "#__toString()' to get a clue.")); + $message = "A new entity was found through the relationship '%s#%s' that was not configured to cascade " + . "persist operations for entity: %s. To solve this issue: Either explicitly call EntityManager#persist() " + . "on this unknown entity or configure cascade persist this association in the mapping for example " + . "@ManyToOne(..,cascade={\"persist\"}).%s"; + + $messageAppend = method_exists($entry, '__toString') + ? "" + : " If you cannot find out which entity causes the problem implement '%s#__toString()' to get a clue." + ; + + return new self(sprintf( + $message, + $association->getSourceEntity(), + $association->getName(), + self::objToStr($entry), + sprintf($messageAppend, $association->getTargetEntity()) + )); } /** - * @param array $assoc - * @param object $entry + * @param AssociationMetadata $association + * @param object $entry * * @return ORMInvalidArgumentException */ - static public function detachedEntityFoundThroughRelationship(array $assoc, $entry) + static public function detachedEntityFoundThroughRelationship(AssociationMetadata $association, $entry) { - return new self("A detached entity of type " . $assoc['targetEntity'] . " (" . self::objToStr($entry) . ") " - . " was found through the relationship '" . $assoc['sourceEntity'] . "#" . $assoc['fieldName'] . "' " - . "during cascading a persist operation."); + $messsage = "A detached entity of type %s (%s) was found through the relationship '%s#%s' during cascading a persist operation."; + + return new self(sprintf( + $messsage, + $association->getTargetEntity(), + self::objToStr($entry), + $association->getSourceEntity(), + $association->getName() + )); } /** @@ -193,19 +210,19 @@ public static function invalidIdentifierBindingEntity() * * @return self */ - public static function invalidAssociation(ClassMetadata $targetClass, $assoc, $actualValue) + public static function invalidAssociation(ClassMetadata $targetClass, AssociationMetadata $association, $actualValue) { $expectedType = 'Doctrine\Common\Collections\Collection|array'; - if (($assoc['type'] & ClassMetadata::TO_ONE) > 0) { + if ($association instanceof ToOneAssociationMetadata) { $expectedType = $targetClass->getName(); } return new self(sprintf( 'Expected value of type "%s" for association field "%s#$%s", got "%s" instead.', $expectedType, - $assoc['sourceEntity'], - $assoc['fieldName'], + $association->getSourceEntity(), + $association->getName(), is_object($actualValue) ? get_class($actualValue) : gettype($actualValue) )); } diff --git a/lib/Doctrine/ORM/PersistentCollection.php b/lib/Doctrine/ORM/PersistentCollection.php index 523cdf8891f..47074a1838a 100644 --- a/lib/Doctrine/ORM/PersistentCollection.php +++ b/lib/Doctrine/ORM/PersistentCollection.php @@ -24,9 +24,13 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Selectable; use Doctrine\Common\Collections\Criteria; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ChangeTrackingPolicy; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FetchMode; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; +use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ToManyAssociationMetadata; /** * A PersistentCollection represents a collection of elements that have persistent state. @@ -64,7 +68,7 @@ final class PersistentCollection extends AbstractLazyCollection implements Selec * The association mapping the collection belongs to. * This is currently either a OneToManyMapping or a ManyToManyMapping. * - * @var array + * @var ToManyAssociationMetadata */ private $association; @@ -118,16 +122,16 @@ public function __construct(EntityManagerInterface $em, $class, Collection $coll * Sets the collection's owning entity together with the AssociationMapping that * describes the association between the owner and the elements of the collection. * - * @param object $entity - * @param array $assoc + * @param object $entity + * @param ToManyAssociationMetadata $association * * @return void */ - public function setOwner($entity, array $assoc) + public function setOwner($entity, ToManyAssociationMetadata $association) { $this->owner = $entity; - $this->association = $assoc; - $this->backRefFieldName = $assoc['inversedBy'] ?: $assoc['mappedBy']; + $this->association = $association; + $this->backRefFieldName = $association->getInversedBy() ?: $association->getMappedBy(); } /** @@ -164,7 +168,7 @@ public function hydrateAdd($element) // If _backRefFieldName is set and its a one-to-many association, // we need to set the back reference. - if ($this->backRefFieldName && $this->association['type'] === ClassMetadata::ONE_TO_MANY) { + if ($this->backRefFieldName && $this->association instanceof OneToManyAssociationMetadata) { // Set back reference to owner $this->typeClass->reflFields[$this->backRefFieldName]->setValue( $element, $this->owner @@ -191,7 +195,7 @@ public function hydrateSet($key, $element) // If _backRefFieldName is set, then the association is bidirectional // and we need to set the back reference. - if ($this->backRefFieldName && $this->association['type'] === ClassMetadata::ONE_TO_MANY) { + if ($this->backRefFieldName && $this->association instanceof OneToManyAssociationMetadata) { // Set back reference to owner $this->typeClass->reflFields[$this->backRefFieldName]->setValue( $element, $this->owner @@ -272,7 +276,7 @@ function($a, $b) { return $a === $b ? 0 : 1; } /** * INTERNAL: Gets the association mapping of the collection. * - * @return array + * @return AssociationMetadata */ public function getMapping() { @@ -293,8 +297,8 @@ private function changed() $this->isDirty = true; if ($this->association !== null && - $this->association['isOwningSide'] && - $this->association['type'] === ClassMetadata::MANY_TO_MANY && + $this->association->isOwningSide() && + $this->association instanceof ManyToManyAssociationMetadata && $this->owner && $this->em->getClassMetadata(get_class($this->owner))->changeTrackingPolicy === ChangeTrackingPolicy::NOTIFY) { $this->em->getUnitOfWork()->scheduleForSynchronization($this->owner); @@ -354,9 +358,9 @@ public function remove($key) $this->changed(); if ($this->association !== null && - $this->association['type'] & ClassMetadata::TO_MANY && + $this->association instanceof ToManyAssociationMetadata && $this->owner && - $this->association['orphanRemoval']) { + $this->association->isOrphanRemoval()) { $this->em->getUnitOfWork()->scheduleOrphanRemoval($removed); } @@ -368,7 +372,9 @@ public function remove($key) */ public function removeElement($element) { - if ( ! $this->initialized && $this->association['fetch'] === FetchMode::EXTRA_LAZY) { + if ( ! $this->initialized && + $this->association !== null && + $this->association->getFetchMode() === FetchMode::EXTRA_LAZY) { if ($this->collection->contains($element)) { return $this->collection->removeElement($element); } @@ -387,9 +393,9 @@ public function removeElement($element) $this->changed(); if ($this->association !== null && - $this->association['type'] & ClassMetadata::TO_MANY && + $this->association instanceof ToManyAssociationMetadata && $this->owner && - $this->association['orphanRemoval']) { + $this->association->isOrphanRemoval()) { $this->em->getUnitOfWork()->scheduleOrphanRemoval($element); } @@ -401,8 +407,10 @@ public function removeElement($element) */ public function containsKey($key) { - if (! $this->initialized && $this->association['fetch'] === FetchMode::EXTRA_LAZY - && isset($this->association['indexBy'])) { + if (! $this->initialized && + $this->association !== null && + $this->association->getFetchMode() === FetchMode::EXTRA_LAZY && + $this->association->getIndexedBy()) { $persister = $this->em->getUnitOfWork()->getCollectionPersister($this->association); return $this->collection->containsKey($key) || $persister->containsKey($this, $key); @@ -416,7 +424,9 @@ public function containsKey($key) */ public function contains($element) { - if ( ! $this->initialized && $this->association['fetch'] === FetchMode::EXTRA_LAZY) { + if (! $this->initialized && + $this->association !== null && + $this->association->getFetchMode() === FetchMode::EXTRA_LAZY) { $persister = $this->em->getUnitOfWork()->getCollectionPersister($this->association); return $this->collection->contains($element) || $persister->contains($this, $element); @@ -430,8 +440,11 @@ public function contains($element) */ public function get($key) { - if ( ! $this->initialized && $this->association['fetch'] === FetchMode::EXTRA_LAZY && isset($this->association['indexBy'])) { - if (!$this->typeClass->isIdentifierComposite && $this->typeClass->isIdentifier($this->association['indexBy'])) { + if (! $this->initialized && + $this->association !== null && + $this->association->getFetchMode() === FetchMode::EXTRA_LAZY && + $this->association->getIndexedBy()) { + if (!$this->typeClass->isIdentifierComposite && $this->typeClass->isIdentifier($this->association->getIndexedBy())) { return $this->em->find($this->typeClass->name, $key); } @@ -446,7 +459,9 @@ public function get($key) */ public function count() { - if ( ! $this->initialized && $this->association['fetch'] === FetchMode::EXTRA_LAZY) { + if (! $this->initialized && + $this->association !== null && + $this->association->getFetchMode() === FetchMode::EXTRA_LAZY) { $persister = $this->em->getUnitOfWork()->getCollectionPersister($this->association); return $persister->count($this) + ($this->isDirty ? $this->collection->count() : 0); @@ -545,9 +560,9 @@ public function clear() $uow = $this->em->getUnitOfWork(); - if ($this->association['type'] & ClassMetadata::TO_MANY && - $this->association['orphanRemoval'] && - $this->owner) { + if ($this->owner !== null && + $this->association !== null && + $this->association->isOrphanRemoval()) { // we need to initialize here, as orphan removal acts like implicit cascadeRemove, // hence for event listeners we need the objects in memory. $this->initialize(); @@ -561,7 +576,7 @@ public function clear() $this->initialized = true; // direct call, {@link initialize()} is too expensive - if ($this->association['isOwningSide'] && $this->owner) { + if ($this->association->isOwningSide() && $this->owner) { $this->changed(); $uow->scheduleCollectionDeletion($this); @@ -598,7 +613,10 @@ public function __sleep() */ public function slice($offset, $length = null) { - if ( ! $this->initialized && ! $this->isDirty && $this->association['fetch'] === FetchMode::EXTRA_LAZY) { + if (! $this->initialized && + ! $this->isDirty && + $this->association !== null && + $this->association->getFetchMode() === FetchMode::EXTRA_LAZY) { $persister = $this->em->getUnitOfWork()->getCollectionPersister($this->association); return $persister->slice($this, $offset, $length); @@ -654,7 +672,7 @@ public function matching(Criteria $criteria) return $this->collection->matching($criteria); } - if ($this->association['type'] === ClassMetadata::MANY_TO_MANY) { + if ($this->association instanceof ManyToManyAssociationMetadata) { $persister = $this->em->getUnitOfWork()->getCollectionPersister($this->association); return new ArrayCollection($persister->loadCriteria($this, $criteria)); @@ -668,9 +686,9 @@ public function matching(Criteria $criteria) $criteria = clone $criteria; $criteria->where($expression); - $persister = $this->em->getUnitOfWork()->getEntityPersister($this->association['targetEntity']); + $persister = $this->em->getUnitOfWork()->getEntityPersister($this->association->getTargetEntity()); - return ($this->association['fetch'] === FetchMode::EXTRA_LAZY) + return ($this->association->getFetchMode() === FetchMode::EXTRA_LAZY) ? new LazyCriteriaCollection($persister, $criteria) : new ArrayCollection($persister->loadCriteria($criteria)); } diff --git a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php index 7bb4d8dfb45..8d6a3553650 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php @@ -20,7 +20,10 @@ namespace Doctrine\ORM\Persisters\Collection; use Doctrine\Common\Collections\Criteria; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ToManyAssociationMetadata; use Doctrine\ORM\Persisters\SqlValueVisitor; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\Query; @@ -41,20 +44,24 @@ class ManyToManyPersister extends AbstractCollectionPersister */ public function delete(PersistentCollection $collection) { - $mapping = $collection->getMapping(); + $association = $collection->getMapping(); - if ( ! $mapping['isOwningSide']) { + if (! $association->isOwningSide()) { return; // ignore inverse side } - $types = []; - $class = $this->em->getClassMetadata($mapping['sourceEntity']); + $class = $this->em->getClassMetadata($association->getSourceEntity()); + $joinTable = $association->getJoinTable(); + $types = []; - foreach ($mapping['joinTable']->getJoinColumns() as $joinColumn) { + foreach ($joinTable->getJoinColumns() as $joinColumn) { $types[] = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $class, $this->em); } - $this->conn->executeUpdate($this->getDeleteSQL($collection), $this->getDeleteSQLParameters($collection), $types); + $sql = $this->getDeleteSQL($collection); + $params = $this->getDeleteSQLParameters($collection); + + $this->conn->executeUpdate($sql, $params, $types); } /** @@ -62,9 +69,9 @@ public function delete(PersistentCollection $collection) */ public function update(PersistentCollection $collection) { - $mapping = $collection->getMapping(); + $association = $collection->getMapping(); - if ( ! $mapping['isOwningSide']) { + if (! $association->isOwningSide()) { return; // ignore inverse side } @@ -93,18 +100,24 @@ public function update(PersistentCollection $collection) */ public function get(PersistentCollection $collection, $index) { - $mapping = $collection->getMapping(); + $association = $collection->getMapping(); - if ( ! isset($mapping['indexBy'])) { + if (! ($association instanceof ToManyAssociationMetadata && $association->getIndexedBy())) { throw new \BadMethodCallException("Selecting a collection by index is only supported on indexed collections."); } - $persister = $this->uow->getEntityPersister($mapping['targetEntity']); - $mappedKey = $mapping['isOwningSide'] - ? $mapping['inversedBy'] - : $mapping['mappedBy']; + $persister = $this->uow->getEntityPersister($association->getTargetEntity()); + $mappedKey = $association->isOwningSide() + ? $association->getInversedBy() + : $association->getMappedBy() + ; + + $criteria = [ + $mappedKey => $collection->getOwner(), + $association->getIndexedBy() => $index, + ]; - return $persister->load([$mappedKey => $collection->getOwner(), $mapping['indexBy'] => $index], null, $mapping, [], 0, 1); + return $persister->load($criteria, null, $association, [], 0, 1); } /** @@ -112,31 +125,39 @@ public function get(PersistentCollection $collection, $index) */ public function count(PersistentCollection $collection) { - $conditions = []; - $params = []; - $types = []; - $mapping = $collection->getMapping(); - $id = $this->uow->getEntityIdentifier($collection->getOwner()); - $sourceClass = $this->em->getClassMetadata($mapping['sourceEntity']); - $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); - $association = ( ! $mapping['isOwningSide']) - ? $targetClass->associationMappings[$mapping['mappedBy']] - : $mapping; - - $joinTable = $association['joinTable']; + $conditions = []; + $params = []; + $types = []; + $association = $collection->getMapping(); + $id = $this->uow->getEntityIdentifier($collection->getOwner()); + $sourceClass = $this->em->getClassMetadata($association->getSourceEntity()); + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + $owningAssociation = ! $association->isOwningSide() + ? $targetClass->associationMappings[$association->getMappedBy()] + : $association + ; + + $joinTable = $owningAssociation->getJoinTable(); $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); - $joinColumns = ( ! $mapping['isOwningSide']) ? $joinTable->getInverseJoinColumns() : $joinTable->getJoinColumns(); + $joinColumns = $association->isOwningSide() + ? $joinTable->getJoinColumns() + : $joinTable->getInverseJoinColumns() + ; foreach ($joinColumns as $joinColumn) { $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $referencedName = $joinColumn->getReferencedColumnName(); + if (! $joinColumn->getType()) { + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedName, $sourceClass, $this->em)); + } + $conditions[] = 't.' . $quotedColumnName . ' = ?'; $params[] = $id[$sourceClass->fieldNames[$referencedName]]; - $types[] = PersisterHelper::getTypeOfColumn($referencedName, $sourceClass, $this->em); + $types[] = $joinColumn->getType(); } - list($joinTargetEntitySQL, $filterSql) = $this->getFilterSql($mapping); + list($joinTargetEntitySQL, $filterSql) = $this->getFilterSql($association); if ($filterSql) { $conditions[] = $filterSql; @@ -172,19 +193,19 @@ public function count(PersistentCollection $collection) */ public function slice(PersistentCollection $collection, $offset, $length = null) { - $mapping = $collection->getMapping(); - $persister = $this->uow->getEntityPersister($mapping['targetEntity']); + $association = $collection->getMapping(); + $persister = $this->uow->getEntityPersister($association->getTargetEntity()); - return $persister->getManyToManyCollection($mapping, $collection->getOwner(), $offset, $length); + return $persister->getManyToManyCollection($association, $collection->getOwner(), $offset, $length); } /** * {@inheritdoc} */ public function containsKey(PersistentCollection $collection, $key) { - $mapping = $collection->getMapping(); + $association = $collection->getMapping(); - if ( ! isset($mapping['indexBy'])) { + if (! ($association instanceof ToManyAssociationMetadata && $association->getIndexedBy())) { throw new \BadMethodCallException("Selecting a collection by index is only supported on indexed collections."); } @@ -232,19 +253,19 @@ public function removeElement(PersistentCollection $collection, $element) */ public function loadCriteria(PersistentCollection $collection, Criteria $criteria) { - $mapping = $collection->getMapping(); + $association = $collection->getMapping(); $owner = $collection->getOwner(); $ownerMetadata = $this->em->getClassMetadata(get_class($owner)); - $id = $this->uow->getEntityIdentifier($owner); - $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); - $onConditions = $this->getOnConditionSQL($mapping); + $identifier = $this->uow->getEntityIdentifier($owner); + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + $onConditions = $this->getOnConditionSQL($association); $whereClauses = $params = $types = []; - if ( ! $mapping['isOwningSide']) { - $mapping = $targetClass->associationMappings[$mapping['mappedBy']]; - $joinColumns = $mapping['joinTable']->getInverseJoinColumns(); + if (! $association->isOwningSide()) { + $association = $targetClass->associationMappings[$association->getMappedBy()]; + $joinColumns = $association->getJoinTable()->getInverseJoinColumns(); } else { - $joinColumns = $mapping['joinTable']->getJoinColumns(); + $joinColumns = $association->getJoinTable()->getJoinColumns(); } foreach ($joinColumns as $joinColumn) { @@ -258,7 +279,7 @@ public function loadCriteria(PersistentCollection $collection, Criteria $criteri } $whereClauses[] = sprintf('t.%s = ?', $quotedColumnName); - $params[] = $id[$ownerMetadata->fieldNames[$referencedName]]; + $params[] = $identifier[$ownerMetadata->fieldNames[$referencedName]]; $types[] = $joinColumn->getType(); } @@ -276,7 +297,7 @@ public function loadCriteria(PersistentCollection $collection, Criteria $criteri } $tableName = $targetClass->table->getQuotedQualifiedName($this->platform); - $joinTableName = $mapping['joinTable']->getQuotedQualifiedName($this->platform); + $joinTableName = $association->getJoinTable()->getQuotedQualifiedName($this->platform); $resultSetMapping = new Query\ResultSetMappingBuilder($this->em); $resultSetMapping->addRootEntityFromClassMetadata($targetClass->name, 'te'); @@ -304,15 +325,15 @@ public function loadCriteria(PersistentCollection $collection, Criteria $criteri * have to join in the actual entities table leading to additional * JOIN. * - * @param array $mapping Array containing mapping information. + * @param ManyToManyAssociationMetadata $association * * @return string[] ordered tuple: * - JOIN condition to add to the SQL * - WHERE condition to add to the SQL */ - public function getFilterSql($mapping) + public function getFilterSql(ManyToManyAssociationMetadata $association) { - $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); $rootClass = $this->em->getClassMetadata($targetClass->rootEntityName); $filterSql = $this->generateFilterConditionSQL($rootClass, 'te'); @@ -323,7 +344,7 @@ public function getFilterSql($mapping) // A join is needed if there is filtering on the target entity $tableName = $rootClass->table->getQuotedQualifiedName($this->platform); $joinSql = ' JOIN ' . $tableName . ' te' - . ' ON' . implode(' AND ', $this->getOnConditionSQL($mapping)); + . ' ON' . implode(' AND ', $this->getOnConditionSQL($association)); return [$joinSql, $filterSql]; } @@ -345,29 +366,38 @@ protected function generateFilterConditionSQL(ClassMetadata $targetEntity, $targ $filterClauses[] = '(' . $filterExpr . ')'; } } + + if (! $filterClauses) { + return ''; + } + + $filterSql = implode(' AND ', $filterClauses); - return $filterClauses - ? '(' . implode(' AND ', $filterClauses) . ')' - : ''; + return count($filterClauses) > 1 + ? '(' . $filterSql . ')' + : $filterSql + ; } /** * Generate ON condition * - * @param array $mapping + * @param ManyToManyAssociationMetadata $association * * @return array */ - protected function getOnConditionSQL($mapping) + protected function getOnConditionSQL(ManyToManyAssociationMetadata $association) { - $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); - $association = ( ! $mapping['isOwningSide']) - ? $targetClass->associationMappings[$mapping['mappedBy']] - : $mapping; + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + $owningAssociation = ! $association->isOwningSide() + ? $targetClass->associationMappings[$association->getMappedBy()] + : $association; - $joinColumns = $mapping['isOwningSide'] - ? $association['joinTable']->getInverseJoinColumns() - : $association['joinTable']->getJoinColumns(); + $joinTable = $owningAssociation->getJoinTable(); + $joinColumns = $association->isOwningSide() + ? $joinTable->getInverseJoinColumns() + : $joinTable->getJoinColumns() + ; $conditions = []; @@ -388,12 +418,12 @@ protected function getOnConditionSQL($mapping) */ protected function getDeleteSQL(PersistentCollection $collection) { - $mapping = $collection->getMapping(); - $joinTable = $mapping['joinTable']; + $association = $collection->getMapping(); + $joinTable = $association->getJoinTable(); $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); $columns = []; - foreach ($mapping['joinTable']->getJoinColumns() as $joinColumn) { + foreach ($joinTable->getJoinColumns() as $joinColumn) { $columns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); } @@ -408,9 +438,10 @@ protected function getDeleteSQL(PersistentCollection $collection) */ protected function getDeleteSQLParameters(PersistentCollection $collection) { - $mapping = $collection->getMapping(); + $association = $collection->getMapping(); $identifier = $this->uow->getEntityIdentifier($collection->getOwner()); - $joinColumns = $mapping['joinTable']->getJoinColumns(); + $joinTable = $association->getJoinTable(); + $joinColumns = $joinTable->getJoinColumns(); // Optimization for single column identifier if (count($joinColumns) === 1) { @@ -418,7 +449,7 @@ protected function getDeleteSQLParameters(PersistentCollection $collection) } // Composite identifier - $sourceClass = $this->em->getClassMetadata($mapping['sourceEntity']); + $sourceClass = $this->em->getClassMetadata($association->getSourceEntity()); $params = []; foreach ($joinColumns as $joinColumn) { @@ -438,13 +469,13 @@ protected function getDeleteSQLParameters(PersistentCollection $collection) */ protected function getDeleteRowSQL(PersistentCollection $collection) { - $mapping = $collection->getMapping(); - $class = $this->em->getClassMetadata($mapping['sourceEntity']); - $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); + $association = $collection->getMapping(); + $class = $this->em->getClassMetadata($association->getSourceEntity()); + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); $columns = []; $types = []; - $joinTable = $mapping['joinTable']; + $joinTable = $association->getJoinTable(); $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); foreach ($joinTable->getJoinColumns() as $joinColumn) { @@ -458,7 +489,7 @@ protected function getDeleteRowSQL(PersistentCollection $collection) } return [ - 'DELETE FROM ' . $joinTableName . ' WHERE ' . implode(' = ? AND ', $columns) . ' = ?', + sprintf('DELETE FROM %s WHERE %s = ?', $joinTableName, implode(' = ? AND ', $columns)), $types, ]; } @@ -489,13 +520,13 @@ protected function getDeleteRowSQLParameters(PersistentCollection $collection, $ */ protected function getInsertRowSQL(PersistentCollection $collection) { - $mapping = $collection->getMapping(); - $class = $this->em->getClassMetadata($mapping['sourceEntity']); - $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); + $association = $collection->getMapping(); + $class = $this->em->getClassMetadata($association->getSourceEntity()); + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); $columns = []; $types = []; - $joinTable = $mapping['joinTable']; + $joinTable = $association->getJoinTable(); $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); foreach ($joinTable->getJoinColumns() as $joinColumn) { @@ -545,19 +576,20 @@ protected function getInsertRowSQLParameters(PersistentCollection $collection, $ private function collectJoinTableColumnParameters(PersistentCollection $collection, $element) { $params = []; - $mapping = $collection->getMapping(); + $association = $collection->getMapping(); $owningClass = $this->em->getClassMetadata(get_class($collection->getOwner())); $targetClass = $collection->getTypeClass(); $owningIdentifier = $this->uow->getEntityIdentifier($collection->getOwner()); $targetIdentifier = $this->uow->getEntityIdentifier($element); + $joinTable = $association->getJoinTable(); - foreach ($mapping['joinTable']->getJoinColumns() as $joinColumn) { + foreach ($joinTable->getJoinColumns() as $joinColumn) { $fieldName = $owningClass->fieldNames[$joinColumn->getReferencedColumnName()]; $params[] = $owningIdentifier[$fieldName]; } - foreach ($mapping['joinTable']->getInverseJoinColumns() as $joinColumn) { + foreach ($joinTable->getInverseJoinColumns() as $joinColumn) { $fieldName = $targetClass->fieldNames[$joinColumn->getReferencedColumnName()]; $params[] = $targetIdentifier[$fieldName]; @@ -579,23 +611,24 @@ private function collectJoinTableColumnParameters(PersistentCollection $collecti */ private function getJoinTableRestrictionsWithKey(PersistentCollection $collection, $key, $addFilters) { - $filterMapping = $collection->getMapping(); - $mapping = $filterMapping; - $indexBy = $mapping['indexBy']; - $id = $this->uow->getEntityIdentifier($collection->getOwner()); - $sourceClass = $this->em->getClassMetadata($mapping['sourceEntity']); - $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); - - if (! $mapping['isOwningSide']) { - $mapping = $targetClass->associationMappings[$mapping['mappedBy']]; - $joinColumns = $mapping['joinTable']->getJoinColumns(); - $inverseJoinColumns = $mapping['joinTable']->getInverseJoinColumns(); + $association = $collection->getMapping(); + $owningAssociation = $association; + $indexBy = $owningAssociation->getIndexedBy(); + $id = $this->uow->getEntityIdentifier($collection->getOwner()); + $sourceClass = $this->em->getClassMetadata($owningAssociation->getSourceEntity()); + $targetClass = $this->em->getClassMetadata($owningAssociation->getTargetEntity()); + + if (! $owningAssociation->isOwningSide()) { + $owningAssociation = $targetClass->associationMappings[$owningAssociation->getMappedBy()]; + $joinTable = $owningAssociation->getJoinTable(); + $joinColumns = $joinTable->getJoinColumns(); + $inverseJoinColumns = $joinTable->getInverseJoinColumns(); } else { - $joinColumns = $mapping['joinTable']->getInverseJoinColumns(); - $inverseJoinColumns = $mapping['joinTable']->getJoinColumns(); + $joinTable = $owningAssociation->getJoinTable(); + $joinColumns = $joinTable->getInverseJoinColumns(); + $inverseJoinColumns = $joinTable->getJoinColumns(); } - $joinTable = $mapping['joinTable']; $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); $quotedJoinTable = $joinTableName . ' t'; $whereClauses = []; @@ -649,7 +682,7 @@ private function getJoinTableRestrictionsWithKey(PersistentCollection $collectio } if ($addFilters) { - list($joinTargetEntitySQL, $filterSql) = $this->getFilterSql($filterMapping); + list($joinTargetEntitySQL, $filterSql) = $this->getFilterSql($association); if ($filterSql) { $quotedJoinTable .= ' ' . $joinTargetEntitySQL; @@ -673,24 +706,24 @@ private function getJoinTableRestrictionsWithKey(PersistentCollection $collectio */ private function getJoinTableRestrictions(PersistentCollection $collection, $element, $addFilters) { - $filterMapping = $collection->getMapping(); - $mapping = $filterMapping; + $association = $collection->getMapping(); + $owningAssociation = $association; - if ( ! $mapping['isOwningSide']) { - $sourceClass = $this->em->getClassMetadata($mapping['targetEntity']); - $targetClass = $this->em->getClassMetadata($mapping['sourceEntity']); + if (! $association->isOwningSide()) { + $sourceClass = $this->em->getClassMetadata($association->getTargetEntity()); + $targetClass = $this->em->getClassMetadata($association->getSourceEntity()); $sourceId = $this->uow->getEntityIdentifier($element); $targetId = $this->uow->getEntityIdentifier($collection->getOwner()); - $mapping = $sourceClass->associationMappings[$mapping['mappedBy']]; + $owningAssociation = $sourceClass->associationMappings[$association->getMappedBy()]; } else { - $sourceClass = $this->em->getClassMetadata($mapping['sourceEntity']); - $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); + $sourceClass = $this->em->getClassMetadata($association->getSourceEntity()); + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); $sourceId = $this->uow->getEntityIdentifier($collection->getOwner()); $targetId = $this->uow->getEntityIdentifier($element); } - $joinTable = $mapping['joinTable']; + $joinTable = $owningAssociation->getJoinTable(); $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); $quotedJoinTable = $joinTableName; $whereClauses = []; @@ -701,24 +734,36 @@ private function getJoinTableRestrictions(PersistentCollection $collection, $ele $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $referencedColumnName = $joinColumn->getReferencedColumnName(); + if (! $joinColumn->getType()) { + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($referencedColumnName, $sourceClass, $this->em) + ); + } + $whereClauses[] = ($addFilters ? 't.' : '') . $quotedColumnName . ' = ?'; $params[] = $sourceId[$sourceClass->fieldNames[$referencedColumnName]]; - $types[] = PersisterHelper::getTypeOfColumn($referencedColumnName, $sourceClass, $this->em); + $types[] = $joinColumn->getType(); } foreach ($joinTable->getInverseJoinColumns() as $joinColumn) { $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $referencedColumnName = $joinColumn->getReferencedColumnName(); + if (! $joinColumn->getType()) { + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) + ); + } + $whereClauses[] = ($addFilters ? 't.' : '') . $quotedColumnName . ' = ?'; $params[] = $targetId[$targetClass->fieldNames[$referencedColumnName]]; - $types[] = PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em); + $types[] = $joinColumn->getType(); } if ($addFilters) { $quotedJoinTable .= ' t'; - list($joinTargetEntitySQL, $filterSql) = $this->getFilterSql($filterMapping); + list($joinTargetEntitySQL, $filterSql) = $this->getFilterSql($association); if ($filterSql) { $quotedJoinTable .= ' ' . $joinTargetEntitySQL; diff --git a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php index 6c180b3c6fa..675af0ef05d 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php @@ -22,6 +22,7 @@ use Doctrine\Common\Collections\Criteria; use Doctrine\ORM\Mapping\ColumnMetadata; use Doctrine\ORM\Mapping\InheritanceType; +use Doctrine\ORM\Mapping\ToManyAssociationMetadata; use Doctrine\ORM\PersistentCollection; /** @@ -42,16 +43,16 @@ public function delete(PersistentCollection $collection) // The only valid case here is when you have weak entities. In this // scenario, you have @OneToMany with orphanRemoval=true, and replacing // the entire collection with a new would trigger this operation. - $mapping = $collection->getMapping(); + $association = $collection->getMapping(); - if ( ! $mapping['orphanRemoval']) { + if (! $association->isOrphanRemoval()) { // Handling non-orphan removal should never happen, as @OneToMany // can only be inverse side. For owning side one to many, it is // required to have a join table, which would classify as a ManyToManyPersister. return; } - $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); return $targetClass->inheritanceType === InheritanceType::JOINED ? $this->deleteJoinedEntityCollection($collection) @@ -74,25 +75,19 @@ public function update(PersistentCollection $collection) */ public function get(PersistentCollection $collection, $index) { - $mapping = $collection->getMapping(); + $association = $collection->getMapping(); - if ( ! isset($mapping['indexBy'])) { + if (! ($association instanceof ToManyAssociationMetadata && $association->getIndexedBy())) { throw new \BadMethodCallException("Selecting a collection by index is only supported on indexed collections."); } - $persister = $this->uow->getEntityPersister($mapping['targetEntity']); - - return $persister->load( - [ - $mapping['mappedBy'] => $collection->getOwner(), - $mapping['indexBy'] => $index - ], - null, - $mapping, - [], - null, - 1 - ); + $persister = $this->uow->getEntityPersister($association->getTargetEntity()); + $criteria = [ + $association->getMappedBy() => $collection->getOwner(), + $association->getIndexedBy() => $index, + ]; + + return $persister->load($criteria, null, $association, [], null, 1); } /** @@ -100,13 +95,15 @@ public function get(PersistentCollection $collection, $index) */ public function count(PersistentCollection $collection) { - $mapping = $collection->getMapping(); - $persister = $this->uow->getEntityPersister($mapping['targetEntity']); + $association = $collection->getMapping(); + $persister = $this->uow->getEntityPersister($association->getTargetEntity()); // only works with single id identifier entities. Will throw an // exception in Entity Persisters if that is not the case for the // 'mappedBy' field. - $criteria = new Criteria(Criteria::expr()->eq($mapping['mappedBy'], $collection->getOwner())); + $criteria = [ + $association->getMappedBy() => $collection->getOwner(), + ]; return $persister->count($criteria); } @@ -116,10 +113,10 @@ public function count(PersistentCollection $collection) */ public function slice(PersistentCollection $collection, $offset, $length = null) { - $mapping = $collection->getMapping(); - $persister = $this->uow->getEntityPersister($mapping['targetEntity']); + $association = $collection->getMapping(); + $persister = $this->uow->getEntityPersister($association->getTargetEntity()); - return $persister->getOneToManyCollection($mapping, $collection->getOwner(), $offset, $length); + return $persister->getOneToManyCollection($association, $collection->getOwner(), $offset, $length); } /** @@ -127,21 +124,21 @@ public function slice(PersistentCollection $collection, $offset, $length = null) */ public function containsKey(PersistentCollection $collection, $key) { - $mapping = $collection->getMapping(); + $association = $collection->getMapping(); - if ( ! isset($mapping['indexBy'])) { + if (! ($association instanceof ToManyAssociationMetadata && $association->getIndexedBy())) { throw new \BadMethodCallException("Selecting a collection by index is only supported on indexed collections."); } - $persister = $this->uow->getEntityPersister($mapping['targetEntity']); + $persister = $this->uow->getEntityPersister($association->getTargetEntity()); // only works with single id identifier entities. Will throw an // exception in Entity Persisters if that is not the case for the // 'mappedBy' field. - $criteria = new Criteria(); - - $criteria->andWhere(Criteria::expr()->eq($mapping['mappedBy'], $collection->getOwner())); - $criteria->andWhere(Criteria::expr()->eq($mapping['indexBy'], $key)); + $criteria = [ + $association->getMappedBy() => $collection->getOwner(), + $association->getIndexedBy() => $key, + ]; return (bool) $persister->count($criteria); } @@ -155,13 +152,15 @@ public function contains(PersistentCollection $collection, $element) return false; } - $mapping = $collection->getMapping(); - $persister = $this->uow->getEntityPersister($mapping['targetEntity']); + $association = $collection->getMapping(); + $persister = $this->uow->getEntityPersister($association->getTargetEntity()); // only works with single id identifier entities. Will throw an // exception in Entity Persisters if that is not the case for the // 'mappedBy' field. - $criteria = new Criteria(Criteria::expr()->eq($mapping['mappedBy'], $collection->getOwner())); + $criteria = new Criteria( + Criteria::expr()->eq($association->getMappedBy(), $collection->getOwner()) + ); return $persister->exists($element, $criteria); } @@ -171,21 +170,20 @@ public function contains(PersistentCollection $collection, $element) */ public function removeElement(PersistentCollection $collection, $element) { - $mapping = $collection->getMapping(); + $association = $collection->getMapping(); - if ( ! $mapping['orphanRemoval']) { + if (! $association->isOrphanRemoval()) { // no-op: this is not the owning side, therefore no operations should be applied return false; } - if ( ! $this->isValidEntityState($element)) { + if (! $this->isValidEntityState($element)) { return false; } - return $this - ->uow - ->getEntityPersister($mapping['targetEntity']) - ->delete($element); + $persister = $this->uow->getEntityPersister($association->getTargetEntity()); + + return $persister->delete($element); } /** @@ -205,14 +203,15 @@ public function loadCriteria(PersistentCollection $collection, Criteria $criteri */ private function deleteEntityCollection(PersistentCollection $collection) { - $mapping = $collection->getMapping(); - $identifier = $this->uow->getEntityIdentifier($collection->getOwner()); - $sourceClass = $this->em->getClassMetadata($mapping['sourceEntity']); - $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); - $columns = []; - $parameters = []; - - foreach ($targetClass->associationMappings[$mapping['mappedBy']]['joinColumns'] as $joinColumn) { + $association = $collection->getMapping(); + $identifier = $this->uow->getEntityIdentifier($collection->getOwner()); + $sourceClass = $this->em->getClassMetadata($association->getSourceEntity()); + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + $inverseAssoc = $targetClass->associationMappings[$association->getMappedBy()]; + $columns = []; + $parameters = []; + + foreach ($inverseAssoc->getJoinColumns() as $joinColumn) { $columns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $parameters[] = $identifier[$sourceClass->fieldNames[$joinColumn->getReferencedColumnName()]]; } @@ -237,9 +236,9 @@ private function deleteEntityCollection(PersistentCollection $collection) */ private function deleteJoinedEntityCollection(PersistentCollection $collection) { - $mapping = $collection->getMapping(); - $sourceClass = $this->em->getClassMetadata($mapping['sourceEntity']); - $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); + $association = $collection->getMapping(); + $sourceClass = $this->em->getClassMetadata($association->getSourceEntity()); + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); $rootClass = $this->em->getClassMetadata($targetClass->rootEntityName); // 1) Build temporary table DDL @@ -263,10 +262,9 @@ private function deleteJoinedEntityCollection(PersistentCollection $collection) $this->conn->executeUpdate($statement); // 2) Build insert table records into temporary table - $query = $this->em->createQuery( - ' SELECT t0.' . implode(', t0.', $rootClass->getIdentifierFieldNames()) - . ' FROM ' . $targetClass->name . ' t0 WHERE t0.' . $mapping['mappedBy'] . ' = :owner' - )->setParameter('owner', $collection->getOwner()); + $dql = ' SELECT t0.' . implode(', t0.', $rootClass->getIdentifierFieldNames()) + . ' FROM ' . $targetClass->name . ' t0 WHERE t0.' . $association->getMappedBy() . ' = :owner'; + $query = $this->em->createQuery($dql)->setParameter('owner', $collection->getOwner()); $statement = 'INSERT INTO ' . $tempTable . ' (' . $idColumnNameList . ') ' . $query->getSQL(); $parameters = array_values($sourceClass->getIdentifierValues($collection->getOwner())); diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index af1d9470e98..1c021e9764b 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -26,13 +26,20 @@ use Doctrine\DBAL\LockMode; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ColumnMetadata; use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\InheritanceType; +use Doctrine\ORM\Mapping\JoinColumnMetadata; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; use Doctrine\ORM\Mapping\MappingException; +use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; +use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; +use Doctrine\ORM\Mapping\ToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\OptimisticLockException; use Doctrine\ORM\ORMException; use Doctrine\ORM\PersistentCollection; @@ -68,7 +75,7 @@ * * - {@link load} : Loads (the state of) a single, managed entity. * - {@link loadAll} : Loads multiple, managed entities. - * - {@link loadOneToOneEntity} : Loads a one/many-to-one entity association (lazy-loading). + * - {@link loadToOneEntity} : Loads a one/many-to-one entity association (lazy-loading). * - {@link loadOneToManyCollection} : Loads a one-to-many entity association (lazy-loading). * - {@link loadManyToManyCollection} : Loads a many-to-many entity association (lazy-loading). * @@ -78,6 +85,7 @@ * Subclasses can be created to provide custom persisting and querying strategies, * i.e. spanning multiple tables. * + * @author Guilherme Blanco * @author Roman Borschel * @author Giorgio Sironi * @author Benjamin Eberlei @@ -428,18 +436,25 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat if ( ! isset($this->class->associationMappings[$idField])) { $property = $this->class->getProperty($idField); - $types[] = $property->getType(); - $where[] = $this->platform->quoteIdentifier($property->getColumnName()); + $types[] = $property->getType(); + $where[] = $this->platform->quoteIdentifier($property->getColumnName()); continue; } $association = $this->class->associationMappings[$idField]; - $targetClass = $this->em->getClassMetadata($association['targetEntity']); - $joinColumn = reset($association['joinColumns']); + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + $joinColumns = $association->getJoinColumns(); + $joinColumn = reset($joinColumns); + + if (! $joinColumn->getType()) { + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) + ); + } $where[] = $joinColumn->getColumnName(); - $types[] = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); + $types[] = $joinColumn->getType(); } if ($versioned) { @@ -484,32 +499,36 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat */ protected function deleteJoinTableRecords($identifier) { - foreach ($this->class->associationMappings as $mapping) { - if ($mapping['type'] !== ClassMetadata::MANY_TO_MANY) { + foreach ($this->class->associationMappings as $association) { + if (! ($association instanceof ManyToManyAssociationMetadata)) { continue; } // @Todo this only covers scenarios with no inheritance or of the same level. Is there something // like self-referential relationship between different levels of an inheritance hierarchy? I hope not! - $selfReferential = ($mapping['targetEntity'] == $mapping['sourceEntity']); - $class = $this->class; - $association = $mapping; - $otherColumns = []; - $otherKeys = []; - $keys = []; - - if ( ! $mapping['isOwningSide']) { - $class = $this->em->getClassMetadata($mapping['targetEntity']); - $association = $class->associationMappings[$mapping['mappedBy']]; + $selfReferential = $association->getTargetEntity() === $association->getSourceEntity(); + $owningAssociation = $association; + $otherColumns = []; + $otherKeys = []; + $keys = []; + + if ( ! $owningAssociation->isOwningSide()) { + $class = $this->em->getClassMetadata($association->getTargetEntity()); + $owningAssociation = $class->associationMappings[$association->getMappedBy()]; } - $joinTable = $association['joinTable']; + $joinTable = $owningAssociation->getJoinTable(); $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); - $joinColumns = $mapping['isOwningSide'] ? $joinTable->getJoinColumns() : $joinTable->getInverseJoinColumns(); - + $joinColumns = $association->isOwningSide() + ? $joinTable->getJoinColumns() + : $joinTable->getInverseJoinColumns() + ; if ($selfReferential) { - $otherColumns = (! $mapping['isOwningSide']) ? $joinTable->getJoinColumns() : $joinTable->getInverseJoinColumns(); + $otherColumns = ! $association->isOwningSide() + ? $joinTable->getJoinColumns() + : $joinTable->getInverseJoinColumns() + ; } $isOnDeleteCascade = false; @@ -547,29 +566,59 @@ protected function deleteJoinTableRecords($identifier) */ public function delete($entity) { - $self = $this; $class = $this->class; - $identifier = $this->em->getUnitOfWork()->getEntityIdentifier($entity); + $unitOfWork = $this->em->getUnitOfWork(); + $identifier = $unitOfWork->getEntityIdentifier($entity); $tableName = $class->table->getQuotedQualifiedName($this->platform); - $idColumns = $this->quoteStrategy->getIdentifierColumnNames($class, $this->platform); - $id = array_combine($idColumns, $identifier); - $types = array_map(function ($identifier) use ($class, $self) { - if (($property = $class->getProperty($identifier)) !== null) { - return $property->getType(); - } - $targetMapping = $self->em->getClassMetadata($class->associationMappings[$identifier]['targetEntity']); + $types = []; + $id = []; + + foreach ($class->identifier as $field) { + if (($property = $class->getProperty($field)) !== null) { + $columnName = $property->getColumnName(); + $quotedColumnName = $this->platform->quoteIdentifier($columnName); - if (($property = $targetMapping->getProperty($targetMapping->identifier[0])) !== null) { - return $property->getType(); + $id[$quotedColumnName] = $identifier[$field]; + $types[] = $property->getType(); + + continue; } - if (isset($targetMapping->associationMappings[$targetMapping->identifier[0]])) { - return $targetMapping->associationMappings[$targetMapping->identifier[0]]['type']; + $association = $class->associationMappings[$field]; + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + $joinColumns = $association instanceof ManyToManyAssociationMetadata + ? $association->getTable()->getJoinColumns() + : $association->getJoinColumns() + ; + + $associationValue = null; + + if (($value = $identifier[$field]) !== null) { + // @todo guilhermeblanco Make sure we do not have flat association values. + if (! is_array($value)) { + $value = [$targetClass->identifier[0] => $value]; + } + + $associationValue = $value; } - throw ORMException::unrecognizedField($targetMapping->identifier[0]); - }, $class->identifier); + foreach ($joinColumns as $joinColumn) { + $joinColumnName = $joinColumn->getColumnName(); + $referencedColumnName = $joinColumn->getReferencedColumnName(); + $quotedJoinColumnName = $this->platform->quoteIdentifier($joinColumnName); + $targetField = $targetClass->fieldNames[$referencedColumnName]; + + if (! $joinColumn->getType()) { + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) + ); + } + + $id[$quotedJoinColumnName] = $associationValue ? $associationValue[$targetField] : null; + $types[] = $joinColumn->getType(); + } + } $this->deleteJoinTableRecords($identifier); @@ -630,10 +679,10 @@ protected function prepareUpdateData($entity) continue; } - $assoc = $this->class->associationMappings[$field]; + $association = $this->class->associationMappings[$field]; // Only owning side of x-1 associations can have a FK column. - if ( ! $assoc['isOwningSide'] || ! ($assoc['type'] & ClassMetadata::TO_ONE)) { + if (! $association->isOwningSide() || ! $association instanceof ToOneAssociationMetadata) { continue; } @@ -656,16 +705,18 @@ protected function prepareUpdateData($entity) $newValId = $uow->getEntityIdentifier($newVal); } - $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); - foreach ($assoc['joinColumns'] as $joinColumn) { + foreach ($association->getJoinColumns() as $joinColumn) { $columnName = $joinColumn->getColumnName(); $referencedColumnName = $joinColumn->getReferencedColumnName(); $targetField = $targetClass->fieldNames[$referencedColumnName]; - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) - ); + if (! $joinColumn->getType()) { + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) + ); + } $this->columns[$columnName] = $joinColumn; @@ -704,12 +755,22 @@ public function getOwningTable($fieldName) /** * {@inheritdoc} */ - public function load(array $criteria, $entity = null, $assoc = null, array $hints = [], $lockMode = null, $limit = null, array $orderBy = null) + public function load( + array $criteria, + $entity = null, + AssociationMetadata $association = null, + array $hints = [], + $lockMode = null, + $limit = null, + array $orderBy = [] + ) { $this->switchPersisterContext(null, $limit); - $sql = $this->getSelectSQL($criteria, $assoc, $lockMode, $limit, null, $orderBy); + $sql = $this->getSelectSQL($criteria, $association, $lockMode, $limit, null, $orderBy); + list($params, $types) = $this->expandParameters($criteria); + $stmt = $this->conn->executeQuery($sql, $params, $types); if ($entity !== null) { @@ -734,23 +795,27 @@ public function loadById(array $identifier, $entity = null) /** * {@inheritdoc} */ - public function loadOneToOneEntity(array $assoc, $sourceEntity, array $identifier = []) + public function loadToOneEntity(ToOneAssociationMetadata $association, $sourceEntity, array $identifier = []) { - if (($foundEntity = $this->em->getUnitOfWork()->tryGetById($identifier, $assoc['targetEntity'])) != false) { + $unitOfWork = $this->em->getUnitOfWork(); + $targetEntity = $association->getTargetEntity(); + + if (($foundEntity = $unitOfWork->tryGetById($identifier, $targetEntity)) != false) { return $foundEntity; } - $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); + $targetClass = $this->em->getClassMetadata($targetEntity); - if ($assoc['isOwningSide']) { - $isInverseSingleValued = $assoc['inversedBy'] && ! $targetClass->isCollectionValuedAssociation($assoc['inversedBy']); + if ($association->isOwningSide()) { + $inversedBy = $association->getInversedBy(); + $isInverseSingleValued = $inversedBy && ! $targetClass->isCollectionValuedAssociation($inversedBy); // Mark inverse side as fetched in the hints, otherwise the UoW would // try to load it in a separate query (remember: to-one inverse sides can not be lazy). $hints = []; if ($isInverseSingleValued) { - $hints['fetched']["r"][$assoc['inversedBy']] = true; + $hints['fetched']["r"][$inversedBy] = true; } /* cascade read-only status @@ -759,21 +824,23 @@ public function loadOneToOneEntity(array $assoc, $sourceEntity, array $identifie } */ - $targetEntity = $this->load($identifier, null, $assoc, $hints); + $entity = $this->load($identifier, null, $association, $hints); // Complete bidirectional association, if necessary - if ($targetEntity !== null && $isInverseSingleValued) { - $targetClass->reflFields[$assoc['inversedBy']]->setValue($targetEntity, $sourceEntity); + if ($entity !== null && $isInverseSingleValued) { + $targetClass->reflFields[$inversedBy]->setValue($entity, $sourceEntity); } - return $targetEntity; + return $entity; } - $sourceClass = $this->em->getClassMetadata($assoc['sourceEntity']); - $owningAssoc = $targetClass->getAssociationMapping($assoc['mappedBy']); + // @todo guilhermeblanco $association->getDeclaringClass()??? + $mappedBy = $association->getMappedBy(); + $sourceClass = $this->em->getClassMetadata($association->getSourceEntity()); + $owningAssoc = $targetClass->getAssociationMapping($mappedBy); $targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName()); - foreach ($owningAssoc['joinColumns'] as $joinColumn) { + foreach ($owningAssoc->getJoinColumns() as $joinColumn) { $sourceKeyColumn = $joinColumn->getReferencedColumnName(); $targetKeyColumn = $joinColumn->getColumnName(); @@ -793,13 +860,13 @@ public function loadOneToOneEntity(array $assoc, $sourceEntity, array $identifie unset($identifier[$targetKeyColumn]); } - $targetEntity = $this->load($identifier, null, $assoc); + $entity = $this->load($identifier, null, $association); - if ($targetEntity !== null) { - $targetClass->setFieldValue($targetEntity, $assoc['mappedBy'], $sourceEntity); + if ($entity !== null) { + $targetClass->reflFields[$mappedBy]->setValue($entity, $sourceEntity); } - return $targetEntity; + return $entity; } /** @@ -841,10 +908,11 @@ public function loadCriteria(Criteria $criteria) list($params, $types) = $this->expandCriteriaParameters($criteria); - $stmt = $this->conn->executeQuery($query, $params, $types); - $rsm = $this->currentPersisterContext->rsm; - $hydrator = $this->em->newHydrator(($this->currentPersisterContext->selectJoinSql) ? Query::HYDRATE_OBJECT : Query::HYDRATE_SIMPLEOBJECT); - $hints = [UnitOfWork::HINT_DEFEREAGERLOAD => true]; + $stmt = $this->conn->executeQuery($query, $params, $types); + $rsm = $this->currentPersisterContext->rsm; + $hints = [UnitOfWork::HINT_DEFEREAGERLOAD => true]; + $hydratorType = $this->currentPersisterContext->selectJoinSql ? Query::HYDRATE_OBJECT : Query::HYDRATE_SIMPLEOBJECT; + $hydrator = $this->em->newHydrator($hydratorType); return $hydrator->hydrateAll($stmt, $rsm, $hints); } @@ -883,7 +951,7 @@ public function expandCriteriaParameters(Criteria $criteria) /** * {@inheritdoc} */ - public function loadAll(array $criteria = [], array $orderBy = null, $limit = null, $offset = null) + public function loadAll(array $criteria = [], array $orderBy = [], $limit = null, $offset = null) { $this->switchPersisterContext($offset, $limit); @@ -891,10 +959,11 @@ public function loadAll(array $criteria = [], array $orderBy = null, $limit = nu list($params, $types) = $this->expandParameters($criteria); - $stmt = $this->conn->executeQuery($sql, $params, $types); - $rsm = $this->currentPersisterContext->rsm; - $hydrator = $this->em->newHydrator(($this->currentPersisterContext->selectJoinSql) ? Query::HYDRATE_OBJECT : Query::HYDRATE_SIMPLEOBJECT); - $hints = [UnitOfWork::HINT_DEFEREAGERLOAD => true]; + $stmt = $this->conn->executeQuery($sql, $params, $types); + $rsm = $this->currentPersisterContext->rsm; + $hints = [UnitOfWork::HINT_DEFEREAGERLOAD => true]; + $hydratorType = $this->currentPersisterContext->selectJoinSql ? Query::HYDRATE_OBJECT : Query::HYDRATE_SIMPLEOBJECT; + $hydrator = $this->em->newHydrator($hydratorType); return $hydrator->hydrateAll($stmt, $rsm, $hints); } @@ -902,30 +971,49 @@ public function loadAll(array $criteria = [], array $orderBy = null, $limit = nu /** * {@inheritdoc} */ - public function getManyToManyCollection(array $assoc, $sourceEntity, $offset = null, $limit = null) + public function getManyToManyCollection( + ManyToManyAssociationMetadata $association, + $sourceEntity, + $offset = null, + $limit = null + ) { $this->switchPersisterContext($offset, $limit); - $stmt = $this->getManyToManyStatement($assoc, $sourceEntity, $offset, $limit); + $stmt = $this->getManyToManyStatement($association, $sourceEntity, $offset, $limit); - return $this->loadArrayFromStatement($assoc, $stmt); + return $this->loadArrayFromStatement($association, $stmt); + } + + /** + * {@inheritdoc} + */ + public function loadManyToManyCollection( + ManyToManyAssociationMetadata $association, + $sourceEntity, + PersistentCollection $collection + ) + { + $stmt = $this->getManyToManyStatement($association, $sourceEntity); + + return $this->loadCollectionFromStatement($association, $stmt, $collection); } /** * Loads an array of entities from a given DBAL statement. * - * @param array $assoc - * @param \Doctrine\DBAL\Statement $stmt + * @param ToManyAssociationMetadata $association + * @param \Doctrine\DBAL\Statement $stmt * * @return array */ - private function loadArrayFromStatement($assoc, $stmt) + private function loadArrayFromStatement(ToManyAssociationMetadata $association, $stmt) { $rsm = $this->currentPersisterContext->rsm; - if (isset($assoc['indexBy'])) { + if ($association->getIndexedBy()) { $rsm = clone ($this->currentPersisterContext->rsm); // this is necessary because the "default rsm" should be changed. - $rsm->addIndexBy('r', $assoc['indexBy']); + $rsm->addIndexBy('r', $association->getIndexedBy()); } $hydrator = $this->em->newHydrator(Query::HYDRATE_OBJECT); @@ -937,69 +1025,67 @@ private function loadArrayFromStatement($assoc, $stmt) /** * Hydrates a collection from a given DBAL statement. * - * @param array $assoc - * @param \Doctrine\DBAL\Statement $stmt - * @param PersistentCollection $coll + * @param ToManyAssociationMetadata $association + * @param \Doctrine\DBAL\Statement $stmt + * @param PersistentCollection $collection * * @return array */ - private function loadCollectionFromStatement($assoc, $stmt, $coll) + private function loadCollectionFromStatement(ToManyAssociationMetadata $association, $stmt, $collection) { $rsm = $this->currentPersisterContext->rsm; - if (isset($assoc['indexBy'])) { + if ($association->getIndexedBy()) { $rsm = clone ($this->currentPersisterContext->rsm); // this is necessary because the "default rsm" should be changed. - $rsm->addIndexBy('r', $assoc['indexBy']); + $rsm->addIndexBy('r', $association->getIndexedBy()); } $hydrator = $this->em->newHydrator(Query::HYDRATE_OBJECT); $hints = [ UnitOfWork::HINT_DEFEREAGERLOAD => true, - 'collection' => $coll + 'collection' => $collection ]; return $hydrator->hydrateAll($stmt, $rsm, $hints); } /** - * {@inheritdoc} - */ - public function loadManyToManyCollection(array $assoc, $sourceEntity, PersistentCollection $coll) - { - $stmt = $this->getManyToManyStatement($assoc, $sourceEntity); - - return $this->loadCollectionFromStatement($assoc, $stmt, $coll); - } - - /** - * @param array $assoc - * @param object $sourceEntity - * @param int|null $offset - * @param int|null $limit + * @param ManyToManyAssociationMetadata $association + * @param object $sourceEntity + * @param int|null $offset + * @param int|null $limit * * @return \Doctrine\DBAL\Driver\Statement * * @throws \Doctrine\ORM\Mapping\MappingException */ - private function getManyToManyStatement(array $assoc, $sourceEntity, $offset = null, $limit = null) + private function getManyToManyStatement( + ManyToManyAssociationMetadata $association, + $sourceEntity, + $offset = null, + $limit = null + ) { $this->switchPersisterContext($offset, $limit); /** @var ClassMetadata $sourceClass */ - $sourceClass = $this->em->getClassMetadata($assoc['sourceEntity']); + $sourceClass = $this->em->getClassMetadata($association->getSourceEntity()); $class = $sourceClass; - $association = $assoc; + $owningAssoc = $association; $criteria = []; $parameters = []; - if ( ! $assoc['isOwningSide']) { - $class = $this->em->getClassMetadata($assoc['targetEntity']); - $association = $class->associationMappings[$assoc['mappedBy']]; + if (! $association->isOwningSide()) { + $class = $this->em->getClassMetadata($association->getTargetEntity()); + $owningAssoc = $class->associationMappings[$association->getMappedBy()]; } - $joinTable = $association['joinTable']; + $joinTable = $owningAssoc->getJoinTable(); $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); - $joinColumns = $assoc['isOwningSide'] ? $joinTable->getJoinColumns() : $joinTable->getInverseJoinColumns(); + $joinColumns = $association->isOwningSide() + ? $joinTable->getJoinColumns() + : $joinTable->getInverseJoinColumns() + ; foreach ($joinColumns as $joinColumn) { $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); @@ -1008,14 +1094,14 @@ private function getManyToManyStatement(array $assoc, $sourceEntity, $offset = n if (isset($sourceClass->associationMappings[$fieldName])) { $targetMapping = $sourceClass->associationMappings[$fieldName]; - $targetClass = $this->em->getClassMetadata($targetMapping['targetEntity']); + $targetClass = $this->em->getClassMetadata($targetMapping->getTargetEntity()); $id = $this->em->getUnitOfWork()->getEntityIdentifier($value); $value = $id[$targetClass->identifier[0]]; } + // @todo guilhermeblanco How could we handle composite primary keys here? $criteria[$joinTableName . '.' . $quotedColumnName] = $value; - $parameters[] = [ 'value' => $value, 'field' => $fieldName, @@ -1023,7 +1109,7 @@ private function getManyToManyStatement(array $assoc, $sourceEntity, $offset = n ]; } - $sql = $this->getSelectSQL($criteria, $assoc, null, $limit, $offset); + $sql = $this->getSelectSQL($criteria, $association, null, $limit, $offset); list($params, $types) = $this->expandToManyParameters($parameters); @@ -1033,7 +1119,14 @@ private function getManyToManyStatement(array $assoc, $sourceEntity, $offset = n /** * {@inheritdoc} */ - public function getSelectSQL($criteria, $assoc = null, $lockMode = null, $limit = null, $offset = null, array $orderBy = null) + public function getSelectSQL( + $criteria, + AssociationMetadata $association = null, + $lockMode = null, + $limit = null, + $offset = null, + array $orderBy = [] + ) { $this->switchPersisterContext($offset, $limit); @@ -1041,12 +1134,12 @@ public function getSelectSQL($criteria, $assoc = null, $lockMode = null, $limit $joinSql = ''; $orderBySql = ''; - if ($assoc != null && $assoc['type'] == ClassMetadata::MANY_TO_MANY) { - $joinSql = $this->getSelectManyToManyJoinSQL($assoc); + if ($association instanceof ManyToManyAssociationMetadata) { + $joinSql = $this->getSelectManyToManyJoinSQL($association); } - if (isset($assoc['orderBy'])) { - $orderBy = $assoc['orderBy']; + if ($association instanceof ToManyAssociationMetadata && $association->getOrderBy()) { + $orderBy = $association->getOrderBy(); } if ($orderBy) { @@ -1055,7 +1148,7 @@ public function getSelectSQL($criteria, $assoc = null, $lockMode = null, $limit $conditionSql = ($criteria instanceof Criteria) ? $this->getSelectConditionCriteriaSQL($criteria) - : $this->getSelectConditionSQL($criteria, $assoc); + : $this->getSelectConditionSQL($criteria, $association); switch ($lockMode) { case LockMode::PESSIMISTIC_READ: @@ -1131,12 +1224,16 @@ public function getCountSQL($criteria = []) */ protected final function getOrderBySQL(array $orderBy, $baseTableAlias) { + if (! $orderBy) { + return ''; + } + $orderByList = []; foreach ($orderBy as $fieldName => $orientation) { $orientation = strtoupper(trim($orientation)); - if ($orientation != 'ASC' && $orientation != 'DESC') { + if (! in_array($orientation, ['ASC', 'DESC'])) { throw ORMException::invalidOrientation($this->class->name, $fieldName); } @@ -1150,16 +1247,19 @@ protected final function getOrderBySQL(array $orderBy, $baseTableAlias) } if (isset($this->class->associationMappings[$fieldName])) { - if ( ! $this->class->associationMappings[$fieldName]['isOwningSide']) { + $association = $this->class->associationMappings[$fieldName]; + + if ( ! $association->isOwningSide()) { throw ORMException::invalidFindByInverseAssociation($this->class->name, $fieldName); } - $class = isset($this->class->associationMappings[$fieldName]['inherited']) - ? $this->em->getClassMetadata($this->class->associationMappings[$fieldName]['inherited']) + $class = $this->class->isInheritedAssociation($fieldName) + ? $association->getDeclaringClass() : $this->class; $tableAlias = $this->getSQLTableAlias($class->getTableName()); - foreach ($this->class->associationMappings[$fieldName]['joinColumns'] as $joinColumn) { + foreach ($association->getJoinColumns() as $joinColumn) { + /* @var JoinColumnMetadata $joinColumn */ $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $orderByList[] = $tableAlias . '.' . $quotedColumnName . ' ' . $orientation; @@ -1191,11 +1291,12 @@ protected function getSelectColumnsSQL() return $this->currentPersisterContext->selectColumnListSql; } - $columnList = []; - $this->currentPersisterContext->rsm->addEntityResult($this->class->name, 'r'); // r for root + $this->currentPersisterContext->rsm->addEntityResult($this->class->name, 'r'); // r for root $this->currentPersisterContext->selectJoinSql = ''; - $eagerAliasCounter = 0; + + $eagerAliasCounter = 0; + $columnList = []; foreach ($this->class->fieldNames as $field) { if (! $this->class->hasField($field)) { @@ -1205,32 +1306,32 @@ protected function getSelectColumnsSQL() $columnList[] = $this->getSelectColumnSQL($field, $this->class); } - foreach ($this->class->associationMappings as $assocField => $assoc) { - $assocColumnSQL = $this->getSelectColumnAssociationSQL($assocField, $assoc, $this->class); + foreach ($this->class->associationMappings as $assocField => $association) { + $assocColumnSQL = $this->getSelectColumnAssociationSQL($assocField, $association, $this->class); if ($assocColumnSQL) { $columnList[] = $assocColumnSQL; } - $isAssocToOneInverseSide = $assoc['type'] & ClassMetadata::TO_ONE && ! $assoc['isOwningSide']; - $isAssocFromOneEager = $assoc['type'] !== ClassMetadata::MANY_TO_MANY && $assoc['fetch'] === FetchMode::EAGER; + $isAssocToOneInverseSide = $association instanceof ToOneAssociationMetadata && ! $association->isOwningSide(); + $isAssocFromOneEager = ! $association instanceof ManyToManyAssociationMetadata && $association->getFetchMode() === FetchMode::EAGER; if ( ! ($isAssocFromOneEager || $isAssocToOneInverseSide)) { continue; } - if ((($assoc['type'] & ClassMetadata::TO_MANY) > 0) && $this->currentPersisterContext->handlesLimits) { + if ($association instanceof ToManyAssociationMetadata && $this->currentPersisterContext->handlesLimits) { continue; } - $eagerEntity = $this->em->getClassMetadata($assoc['targetEntity']); + $eagerEntity = $this->em->getClassMetadata($association->getTargetEntity()); if ($eagerEntity->inheritanceType !== InheritanceType::NONE) { continue; // now this is why you shouldn't use inheritance } $assocAlias = 'e' . ($eagerAliasCounter++); - $this->currentPersisterContext->rsm->addJoinedEntityResult($assoc['targetEntity'], $assocAlias, 'r', $assocField); + $this->currentPersisterContext->rsm->addJoinedEntityResult($association->getTargetEntity(), $assocAlias, 'r', $assocField); foreach ($eagerEntity->fieldNames as $field) { $columnSQL = $eagerEntity->hasField($field) @@ -1245,59 +1346,41 @@ protected function getSelectColumnsSQL() } } - $association = $assoc; - $joinCondition = []; + $owningAssociation = $association; + $joinCondition = []; - if (isset($assoc['indexBy'])) { - $this->currentPersisterContext->rsm->addIndexBy($assocAlias, $assoc['indexBy']); + if ($association instanceof ToManyAssociationMetadata && $association->getIndexedBy()) { + $this->currentPersisterContext->rsm->addIndexBy($assocAlias, $association->getIndexedBy()); } - if ( ! $assoc['isOwningSide']) { - $eagerEntity = $this->em->getClassMetadata($assoc['targetEntity']); - $association = $eagerEntity->getAssociationMapping($assoc['mappedBy']); + if (! $association->isOwningSide()) { + $eagerEntity = $this->em->getClassMetadata($association->getTargetEntity()); + $owningAssociation = $eagerEntity->getAssociationMapping($association->getMappedBy()); } $joinTableAlias = $this->getSQLTableAlias($eagerEntity->getTableName(), $assocAlias); $joinTableName = $eagerEntity->table->getQuotedQualifiedName($this->platform); - if ($assoc['isOwningSide']) { - $this->currentPersisterContext->selectJoinSql .= ' ' . $this->getJoinSQLForJoinColumns($association['joinColumns']); - - $sourceClass = $this->em->getClassMetadata($association['sourceEntity']); - $targetClass = $this->em->getClassMetadata($association['targetEntity']); - $tableAlias = $this->getSQLTableAlias($targetClass->getTableName(), $assocAlias); + $this->currentPersisterContext->selectJoinSql .= ' ' . $this->getJoinSQLForAssociation($association); - foreach ($association['joinColumns'] as $joinColumn) { - $joinCondition[] = sprintf( - '%s.%s = %s.%s', - $this->getSQLTableAlias($sourceClass->getTableName()), - $this->platform->quoteIdentifier($joinColumn->getColumnName()), - $tableAlias, - $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()) - ); - } + $sourceClass = $this->em->getClassMetadata($owningAssociation->getSourceEntity()); + $targetClass = $this->em->getClassMetadata($owningAssociation->getTargetEntity()); + $targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName(), $association->isOwningSide() ? $assocAlias : ''); + $sourceTableAlias = $this->getSQLTableAlias($sourceClass->getTableName(), $association->isOwningSide() ? '' : $assocAlias); - // Add filter SQL - if ($filterSql = $this->generateFilterConditionSQL($eagerEntity, $tableAlias)) { - $joinCondition[] = $filterSql; - } + foreach ($owningAssociation->getJoinColumns() as $joinColumn) { + $joinCondition[] = sprintf( + '%s.%s = %s.%s', + $sourceTableAlias, + $this->platform->quoteIdentifier($joinColumn->getColumnName()), + $targetTableAlias, + $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()) + ); + } - } else { - $this->currentPersisterContext->selectJoinSql .= ' LEFT JOIN'; - - $sourceClass = $this->em->getClassMetadata($association['sourceEntity']); - $targetClass = $this->em->getClassMetadata($association['targetEntity']); - $tableAlias = $this->getSQLTableAlias($targetClass->getTableName()); - - foreach ($association['joinColumns'] as $joinColumn) { - $joinCondition[] = sprintf( - '%s.%s = %s.%s', - $this->getSQLTableAlias($sourceClass->getTableName(), $assocAlias), - $this->platform->quoteIdentifier($joinColumn->getColumnName()), - $tableAlias, - $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()) - ); - } + // Add filter SQL + if ($filterSql = $this->generateFilterConditionSQL($eagerEntity, $targetTableAlias)) { + $joinCondition[] = $filterSql; } $this->currentPersisterContext->selectJoinSql .= ' ' . $joinTableName . ' ' . $joinTableAlias . ' ON '; @@ -1312,31 +1395,41 @@ protected function getSelectColumnsSQL() /** * Gets the SQL join fragment used when selecting entities from an association. * - * @param string $field - * @param array $assoc - * @param ClassMetadata $class - * @param string $alias + * @param string $field + * @param AssociationMetadata $association + * @param ClassMetadata $class + * @param string $alias * * @return string */ - protected function getSelectColumnAssociationSQL($field, $assoc, ClassMetadata $class, $alias = 'r') + protected function getSelectColumnAssociationSQL($field, AssociationMetadata $association, ClassMetadata $class, $alias = 'r') { - if ( ! ($assoc['isOwningSide'] && $assoc['type'] & ClassMetadata::TO_ONE) ) { + if (! ($association->isOwningSide() && $association instanceof ToOneAssociationMetadata)) { return ''; } $columnList = []; - $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); - $isIdentifier = isset($assoc['id']) && $assoc['id'] === true; + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); $sqlTableAlias = $this->getSQLTableAlias($class->getTableName(), ($alias == 'r' ? '' : $alias)); - foreach ($assoc['joinColumns'] as $joinColumn) { + foreach ($association->getJoinColumns() as $joinColumn) { $columnName = $joinColumn->getColumnName(); $quotedColumnName = $this->platform->quoteIdentifier($columnName); $resultColumnName = $this->getSQLColumnAlias($columnName); - $type = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); - $this->currentPersisterContext->rsm->addMetaResult($alias, $resultColumnName, $columnName, $isIdentifier, $type); + if (! $joinColumn->getType()) { + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) + ); + } + + $this->currentPersisterContext->rsm->addMetaResult( + $alias, + $resultColumnName, + $columnName, + $association->isPrimaryKey(), + $joinColumn->getType() + ); $columnList[] = sprintf('%s.%s AS %s', $sqlTableAlias, $quotedColumnName, $resultColumnName); } @@ -1348,24 +1441,24 @@ protected function getSelectColumnAssociationSQL($field, $assoc, ClassMetadata $ * Gets the SQL join fragment used when selecting entities from a * many-to-many association. * - * @param array $manyToMany + * @param ManyToManyAssociationMetadata $manyToMany * * @return string */ - protected function getSelectManyToManyJoinSQL(array $manyToMany) + protected function getSelectManyToManyJoinSQL(ManyToManyAssociationMetadata $association) { - $conditions = []; - $association = $manyToMany; - $sourceTableAlias = $this->getSQLTableAlias($this->class->getTableName()); + $conditions = []; + $owningAssociation = $association; + $sourceTableAlias = $this->getSQLTableAlias($this->class->getTableName()); - if ( ! $manyToMany['isOwningSide']) { - $targetEntity = $this->em->getClassMetadata($manyToMany['targetEntity']); - $association = $targetEntity->associationMappings[$manyToMany['mappedBy']]; + if (! $association->isOwningSide()) { + $targetEntity = $this->em->getClassMetadata($association->getTargetEntity()); + $owningAssociation = $targetEntity->associationMappings[$association->getMappedBy()]; } - $joinTable = $association['joinTable']; + $joinTable = $owningAssociation->getJoinTable(); $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); - $joinColumns = $manyToMany['isOwningSide'] ? $joinTable->getInverseJoinColumns() : $joinTable->getJoinColumns(); + $joinColumns = $association->isOwningSide() ? $joinTable->getInverseJoinColumns() : $joinTable->getJoinColumns(); foreach ($joinColumns as $joinColumn) { $conditions[] = sprintf( @@ -1445,20 +1538,22 @@ protected function getInsertColumnList() }*/ if (isset($this->class->associationMappings[$name])) { - $assoc = $this->class->associationMappings[$name]; + $association = $this->class->associationMappings[$name]; - if ($assoc['isOwningSide'] && $assoc['type'] & ClassMetadata::TO_ONE) { - $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); + if ($association->isOwningSide() && $association instanceof ToOneAssociationMetadata) { + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); - foreach ($assoc['joinColumns'] as $joinColumn) { + foreach ($association->getJoinColumns() as $joinColumn) { $columnName = $joinColumn->getColumnName(); $referencedColumnName = $joinColumn->getReferencedColumnName(); - $columns[] = $columnName; + if (! $joinColumn->getType()) { + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) + ); + } - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) - ); + $columns[] = $columnName; $this->columns[$columnName] = $joinColumn; } @@ -1601,16 +1696,18 @@ protected function getSelectConditionCriteriaSQL(Criteria $criteria) /** * {@inheritdoc} */ - public function getSelectConditionStatementSQL($field, $value, $assoc = null, $comparison = null) + public function getSelectConditionStatementSQL( + $field, + $value, + AssociationMetadata $association = null, + $comparison = null + ) { $selectedColumns = []; - $columns = $this->getSelectConditionStatementColumnSQL($field, $assoc); + $columns = $this->getSelectConditionStatementColumnSQL($field, $association); - if (count($columns) > 1 && $comparison === Comparison::IN) { - /* - * @todo try to support multi-column IN expressions. - * Example: (col1, col2) IN (('val1A', 'val2A'), ('val1B', 'val2B')) - */ + if (in_array($comparison, [Comparison::IN, Comparison::NIN]) && count($columns) > 1) { + // @todo try to support multi-column IN expressions. Example: (col1, col2) IN (('val1A', 'val2A'), ...) throw ORMException::cantUseInOperatorOnCompositeKeys(); } @@ -1669,14 +1766,14 @@ public function getSelectConditionStatementSQL($field, $value, $assoc = null, $c /** * Builds the left-hand-side of a where condition statement. * - * @param string $field - * @param array|null $assoc + * @param string $field + * @param AssociationMetadata|null $association * * @return string[] * * @throws \Doctrine\ORM\ORMException */ - private function getSelectConditionStatementColumnSQL($field, $assoc = null) + private function getSelectConditionStatementColumnSQL($field, AssociationMetadata $association = null) { if (($property = $this->class->getProperty($field)) !== null) { $tableAlias = $this->getSQLTableAlias($property->getTableName()); @@ -1686,20 +1783,21 @@ private function getSelectConditionStatementColumnSQL($field, $assoc = null) } if (isset($this->class->associationMappings[$field])) { - $association = $this->class->associationMappings[$field]; - - // Many-To-Many requires join table check for joinColumn + $owningAssociation = $this->class->associationMappings[$field]; $columns = []; - $class = $this->class; - if ($association['type'] === ClassMetadata::MANY_TO_MANY) { - if ( ! $association['isOwningSide']) { - $association = $assoc; + // Many-To-Many requires join table check for joinColumn + if ($owningAssociation instanceof ManyToManyAssociationMetadata) { + if (! $owningAssociation->isOwningSide()) { + $owningAssociation = $association; } - $joinTable = $association['joinTable']; + $joinTable = $owningAssociation->getJoinTable(); $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); - $joinColumns = $assoc['isOwningSide'] ? $joinTable->getJoinColumns() : $joinTable->getInverseJoinColumns(); + $joinColumns = $association->isOwningSide() + ? $joinTable->getJoinColumns() + : $joinTable->getInverseJoinColumns() + ; foreach ($joinColumns as $joinColumn) { $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); @@ -1708,16 +1806,17 @@ private function getSelectConditionStatementColumnSQL($field, $assoc = null) } } else { - if ( ! $association['isOwningSide']) { + if (! $owningAssociation->isOwningSide()) { throw ORMException::invalidFindByInverseAssociation($this->class->name, $field); } - $class = isset($association['inherited']) - ? $this->em->getClassMetadata($association['inherited']) - : $this->class; + $class = $this->class->isInheritedAssociation($field) + ? $owningAssociation->getDeclaringClass() + : $this->class + ; $tableAlias = $this->getSQLTableAlias($class->getTableName()); - foreach ($association['joinColumns'] as $joinColumn) { + foreach ($owningAssociation->getJoinColumns() as $joinColumn) { $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $columns[] = $tableAlias . '.' . $quotedColumnName; @@ -1727,7 +1826,7 @@ private function getSelectConditionStatementColumnSQL($field, $assoc = null) return $columns; } - if ($assoc !== null && strpos($field, ' ') === false && strpos($field, '(') === false) { + if ($association !== null && strpos($field, ' ') === false && strpos($field, '(') === false) { // very careless developers could potentially open up this normally hidden api for userland attacks, // therefore checking for spaces and function calls which are not allowed. @@ -1745,17 +1844,17 @@ private function getSelectConditionStatementColumnSQL($field, $assoc = null) * Subclasses are supposed to override this method if they intend to change * or alter the criteria by which entities are selected. * - * @param array $criteria - * @param array|null $assoc + * @param array $criteria + * @param AssociationMetadata|null $association * * @return string */ - protected function getSelectConditionSQL(array $criteria, $assoc = null) + protected function getSelectConditionSQL(array $criteria, AssociationMetadata $association = null) { $conditions = []; foreach ($criteria as $field => $value) { - $conditions[] = $this->getSelectConditionStatementSQL($field, $value, $assoc); + $conditions[] = $this->getSelectConditionStatementSQL($field, $value, $association); } return implode(' AND ', $conditions); @@ -1764,68 +1863,83 @@ protected function getSelectConditionSQL(array $criteria, $assoc = null) /** * {@inheritdoc} */ - public function getOneToManyCollection(array $assoc, $sourceEntity, $offset = null, $limit = null) + public function getOneToManyCollection( + OneToManyAssociationMetadata $association, + $sourceEntity, + $offset = null, + $limit = null + ) { $this->switchPersisterContext($offset, $limit); - $stmt = $this->getOneToManyStatement($assoc, $sourceEntity, $offset, $limit); + $stmt = $this->getOneToManyStatement($association, $sourceEntity, $offset, $limit); - return $this->loadArrayFromStatement($assoc, $stmt); + return $this->loadArrayFromStatement($association, $stmt); } /** * {@inheritdoc} */ - public function loadOneToManyCollection(array $assoc, $sourceEntity, PersistentCollection $coll) + public function loadOneToManyCollection( + OneToManyAssociationMetadata $association, + $sourceEntity, + PersistentCollection $collection + ) { - $stmt = $this->getOneToManyStatement($assoc, $sourceEntity); + $stmt = $this->getOneToManyStatement($association, $sourceEntity); - return $this->loadCollectionFromStatement($assoc, $stmt, $coll); + return $this->loadCollectionFromStatement($association, $stmt, $collection); } /** * Builds criteria and execute SQL statement to fetch the one to many entities from. * - * @param array $assoc - * @param object $sourceEntity - * @param int|null $offset - * @param int|null $limit + * @param OneToManyAssociationMetadata $association + * @param object $sourceEntity + * @param int|null $offset + * @param int|null $limit * * @return \Doctrine\DBAL\Statement */ - private function getOneToManyStatement(array $assoc, $sourceEntity, $offset = null, $limit = null) + private function getOneToManyStatement( + OneToManyAssociationMetadata $association, + $sourceEntity, + $offset = null, + $limit = null + ) { $this->switchPersisterContext($offset, $limit); $criteria = []; $parameters = []; - $owningAssoc = $this->class->associationMappings[$assoc['mappedBy']]; - $sourceClass = $this->em->getClassMetadata($assoc['sourceEntity']); - $class = isset($owningAssoc['inherited']) - ? $this->em->getClassMetadata($owningAssoc['inherited']) - : $this->class; + $owningAssoc = $this->class->associationMappings[$association->getMappedBy()]; + $sourceClass = $this->em->getClassMetadata($association->getSourceEntity()); + $class = $owningAssoc->getDeclaringClass(); $tableAlias = $this->getSQLTableAlias($class->getTableName()); - foreach ($owningAssoc['joinColumns'] as $joinColumn) { - $field = $sourceClass->fieldNames[$joinColumn->getReferencedColumnName()]; - $value = $sourceClass->reflFields[$field]->getValue($sourceEntity); + foreach ($owningAssoc->getJoinColumns() as $joinColumn) { + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $fieldName = $sourceClass->fieldNames[$joinColumn->getReferencedColumnName()]; + $value = $sourceClass->reflFields[$fieldName]->getValue($sourceEntity); - if (isset($sourceClass->associationMappings[$field])) { - $targetClass = $this->em->getClassMetadata($sourceClass->associationMappings[$field]['targetEntity']); + if (isset($sourceClass->associationMappings[$fieldName])) { + $targetMapping = $sourceClass->associationMappings[$fieldName]; + $targetClass = $this->em->getClassMetadata($targetMapping->getTargetEntity()); $value = $this->em->getUnitOfWork()->getEntityIdentifier($value); $value = $value[$targetClass->identifier[0]]; } - $criteria[$tableAlias . "." . $joinColumn->getColumnName()] = $value; + // @todo guilhermeblanco How could we handle composite primary keys here? + $criteria[$tableAlias . "." . $quotedColumnName] = $value; $parameters[] = [ 'value' => $value, - 'field' => $field, + 'field' => $fieldName, 'class' => $sourceClass, ]; } - $sql = $this->getSelectSQL($criteria, $assoc, null, $limit, $offset); + $sql = $this->getSelectSQL($criteria, $association, null, $limit, $offset); list($params, $types) = $this->expandToManyParameters($parameters); return $this->conn->executeQuery($sql, $params, $types); @@ -1903,23 +2017,24 @@ private function getTypes($field, $value, ClassMetadata $class) break; case (isset($class->associationMappings[$field])): - $assoc = $class->associationMappings[$field]; - $class = $this->em->getClassMetadata($assoc['targetEntity']); + $association = $class->associationMappings[$field]; + $class = $this->em->getClassMetadata($association->getTargetEntity()); - if (! $assoc['isOwningSide']) { - $assoc = $class->associationMappings[$assoc['mappedBy']]; - $class = $this->em->getClassMetadata($assoc['targetEntity']); + if (! $association->isOwningSide()) { + $association = $class->associationMappings[$association->getMappedBy()]; + $class = $this->em->getClassMetadata($association->getTargetEntity()); } - $joinColumns = $assoc['type'] === ClassMetadata::MANY_TO_MANY - ? $assoc['joinTable']->getInverseJoinColumns() - : $assoc['joinColumns']; + $joinColumns = $association instanceof ManyToManyAssociationMetadata + ? $association->getJoinTable()->getInverseJoinColumns() + : $association->getJoinColumns() + ; foreach ($joinColumns as $joinColumn) { if (! $joinColumn->getType()) { - $type = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $class, $this->em); - - $joinColumn->setType($type); + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $class, $this->em) + ); } $types[] = $joinColumn->getType(); @@ -2028,16 +2143,20 @@ public function exists($entity, Criteria $extraConditions = null) } /** - * Generates the appropriate join SQL for the given join column. + * Generates the appropriate join SQL for the given association. * - * @param array $joinColumns The join columns definition of an association. + * @param AssociationMetadata $association * * @return string LEFT JOIN if one of the columns is nullable, INNER JOIN otherwise. */ - protected function getJoinSQLForJoinColumns($joinColumns) + protected function getJoinSQLForAssociation(AssociationMetadata $association) { + if (! $association->isOwningSide()) { + return 'LEFT JOIN'; + } + // if one of the join columns is nullable, return left join - foreach ($joinColumns as $joinColumn) { + foreach ($association->getJoinColumns() as $joinColumn) { if (! $joinColumn->isNullable()) { continue; } diff --git a/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php index 9ac63166832..88281fce0d2 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php @@ -19,6 +19,11 @@ namespace Doctrine\ORM\Persisters\Entity; +use Doctrine\ORM\Mapping\AssociationMetadata; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; +use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; +use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\PersistentCollection; use Doctrine\Common\Collections\Criteria; @@ -64,15 +69,22 @@ public function getInsertSQL(); * Gets the SELECT SQL to select one or more entities by a set of field criteria. * * @param array|\Doctrine\Common\Collections\Criteria $criteria - * @param array|null $assoc + * @param AssociationMetadata|null $association * @param int|null $lockMode * @param int|null $limit * @param int|null $offset - * @param array|null $orderBy + * @param array $orderBy * * @return string */ - public function getSelectSQL($criteria, $assoc = null, $lockMode = null, $limit = null, $offset = null, array $orderBy = null); + public function getSelectSQL( + $criteria, + AssociationMetadata $association = null, + $lockMode = null, + $limit = null, + $offset = null, + array $orderBy = [] + ); /** * Get the COUNT SQL to count entities (optionally based on a criteria) @@ -104,14 +116,19 @@ public function expandCriteriaParameters(Criteria $criteria); /** * Gets the SQL WHERE condition for matching a field with a given value. * - * @param string $field - * @param mixed $value - * @param array|null $assoc - * @param string|null $comparison + * @param string $field + * @param mixed $value + * @param AssociationMetadata|null $association + * @param string|null $comparison * * @return string */ - public function getSelectConditionStatementSQL($field, $value, $assoc = null, $comparison = null); + public function getSelectConditionStatementSQL( + $field, + $value, + AssociationMetadata $association = null, + $comparison = null + ); /** * Adds an entity to the queued insertions. @@ -181,51 +198,24 @@ public function count($criteria = []); public function getOwningTable($fieldName); /** - * Loads an entity by a list of field criteria. - * - * @param array $criteria The criteria by which to load the entity. - * @param object|null $entity The entity to load the data into. If not specified, a new entity is created. - * @param array|null $assoc The association that connects the entity to load to another entity, if any. - * @param array $hints Hints for entity creation. - * @param int|null $lockMode One of the \Doctrine\DBAL\LockMode::* constants - * or NULL if no specific lock mode should be used - * for loading the entity. - * @param int|null $limit Limit number of results. - * @param array|null $orderBy Criteria to order by. - * - * @return object|null The loaded and managed entity instance or NULL if the entity can not be found. - * - * @todo Check identity map? loadById method? Try to guess whether $criteria is the id? - */ - public function load(array $criteria, $entity = null, $assoc = null, array $hints = [], $lockMode = null, $limit = null, array $orderBy = null); - - /** - * Loads an entity by identifier. - * - * @param array $identifier The entity identifier. - * @param object|null $entity The entity to load the data into. If not specified, a new entity is created. + * Locks all rows of this entity matching the given criteria with the specified pessimistic lock mode. * - * @return object The loaded and managed entity instance or NULL if the entity can not be found. + * @param array $criteria + * @param int $lockMode One of the Doctrine\DBAL\LockMode::* constants. * - * @todo Check parameters + * @return void */ - public function loadById(array $identifier, $entity = null); + public function lock(array $criteria, $lockMode); /** - * Loads an entity of this persister's mapped class as part of a single-valued - * association from another entity. - * - * @param array $assoc The association to load. - * @param object $sourceEntity The entity that owns the association (not necessarily the "owning side"). - * @param array $identifier The identifier of the entity to load. Must be provided if - * the association to load represents the owning side, otherwise - * the identifier is derived from the $sourceEntity. + * Checks whether the given managed entity exists in the database. * - * @return object The loaded and managed entity instance or NULL if the entity can not be found. + * @param object $entity + * @param Criteria|null $extraConditions * - * @throws \Doctrine\ORM\Mapping\MappingException + * @return boolean TRUE if the entity exists in the database, FALSE otherwise. */ - public function loadOneToOneEntity(array $assoc, $sourceEntity, array $identifier = []); + public function exists($entity, Criteria $extraConditions = null); /** * Refreshes a managed entity. @@ -242,89 +232,145 @@ public function loadOneToOneEntity(array $assoc, $sourceEntity, array $identifie public function refresh(array $id, $entity, $lockMode = null); /** - * Loads Entities matching the given Criteria object. + * Loads an entity by a list of field criteria. * - * @param \Doctrine\Common\Collections\Criteria $criteria + * @param array $criteria The criteria by which to load the entity. + * @param object|null $entity The entity to load the data into. If not specified, a new entity is created. + * @param AssociationMetadata|null $association The association that connects the entity to load to another entity, if any. + * @param array $hints Hints for entity creation. + * @param int|null $lockMode One of the \Doctrine\DBAL\LockMode::* constants or NULL if no specific lock mode + * should be used for loading the entity. + * @param int|null $limit Limit number of results. + * @param array $orderBy Criteria to order by. * - * @return array + * @return object|null The loaded and managed entity instance or NULL if the entity can not be found. + * + * @todo Check identity map? loadById method? Try to guess whether $criteria is the id? */ - public function loadCriteria(Criteria $criteria); + public function load( + array $criteria, + $entity = null, + AssociationMetadata $association = null, + array $hints = [], + $lockMode = null, + $limit = null, + array $orderBy = [] + ); /** - * Loads a list of entities by a list of field criteria. + * Loads an entity by identifier. * - * @param array $criteria - * @param array|null $orderBy - * @param int|null $limit - * @param int|null $offset + * @param array $identifier The entity identifier. + * @param object|null $entity The entity to load the data into. If not specified, a new entity is created. + * + * @return object The loaded and managed entity instance or NULL if the entity can not be found. + * + * @todo Check parameters + */ + public function loadById(array $identifier, $entity = null); + + /** + * Loads Entities matching the given Criteria object. + * + * @param \Doctrine\Common\Collections\Criteria $criteria * * @return array */ - public function loadAll(array $criteria = [], array $orderBy = null, $limit = null, $offset = null); + public function loadCriteria(Criteria $criteria); /** - * Gets (sliced or full) elements of the given collection. + * Loads a list of entities by a list of field criteria. * - * @param array $assoc - * @param object $sourceEntity + * @param array $criteria + * @param array $orderBy + * @param int|null $limit Limit number of results. * @param int|null $offset - * @param int|null $limit * * @return array */ - public function getManyToManyCollection(array $assoc, $sourceEntity, $offset = null, $limit = null); + public function loadAll(array $criteria = [], array $orderBy = [], $limit = null, $offset = null); /** - * Loads a collection of entities of a many-to-many association. + * Loads an entity of this persister's mapped class as part of a single-valued + * association from another entity. * - * @param array $assoc The association mapping of the association being loaded. - * @param object $sourceEntity The entity that owns the collection. - * @param PersistentCollection $collection The collection to fill. + * @param ToOneAssociationMetadata $association The association to load. + * @param object $sourceEntity The entity that owns the association (not necessarily the "owning side"). + * @param array $identifier The identifier of the entity to load. Must be provided if + * the association to load represents the owning side, otherwise + * the identifier is derived from the $sourceEntity. * - * @return array + * @return object The loaded and managed entity instance or NULL if the entity can not be found. + * + * @throws \Doctrine\ORM\Mapping\MappingException */ - public function loadManyToManyCollection(array $assoc, $sourceEntity, PersistentCollection $collection); + public function loadToOneEntity( + ToOneAssociationMetadata $association, + $sourceEntity, + array $identifier = [] + ); /** - * Loads a collection of entities in a one-to-many association. + * Returns an array with (sliced or full list) of elements in the specified collection. * - * @param array $assoc - * @param object $sourceEntity - * @param PersistentCollection $collection The collection to load/fill. + * @param OneToManyAssociationMetadata $association The association mapping of the association being loaded. + * @param object $sourceEntity The entity that owns the collection. + * @param int|null $offset + * @param int|null $limit Limit number of results. * * @return array */ - public function loadOneToManyCollection(array $assoc, $sourceEntity, PersistentCollection $collection); + public function getOneToManyCollection( + OneToManyAssociationMetadata $association, + $sourceEntity, + $offset = null, + $limit = null + ); /** - * Locks all rows of this entity matching the given criteria with the specified pessimistic lock mode. + * Loads a collection of entities in a one-to-many association. * - * @param array $criteria - * @param int $lockMode One of the Doctrine\DBAL\LockMode::* constants. + * @param OneToManyAssociationMetadata $association The association mapping of the association being loaded. + * @param object $sourceEntity The entity that owns the collection. + * @param PersistentCollection $collection The collection to load/fill. * - * @return void + * @return array */ - public function lock(array $criteria, $lockMode); + public function loadOneToManyCollection( + OneToManyAssociationMetadata $association, + $sourceEntity, + PersistentCollection $collection + ); /** - * Returns an array with (sliced or full list) of elements in the specified collection. + * Gets (sliced or full) elements of the given collection. * - * @param array $assoc - * @param object $sourceEntity - * @param int|null $offset - * @param int|null $limit + * @param ManyToManyAssociationMetadata $association The association mapping of the association being loaded. + * @param object $sourceEntity The entity that owns the collection. + * @param int|null $offset + * @param int|null $limit Limit number of results. * * @return array */ - public function getOneToManyCollection(array $assoc, $sourceEntity, $offset = null, $limit = null); + public function getManyToManyCollection( + ManyToManyAssociationMetadata $association, + $sourceEntity, + $offset = null, + $limit = null + ); /** - * Checks whether the given managed entity exists in the database. + * Loads a collection of entities of a many-to-many association. * - * @param object $entity - * @param Criteria|null $extraConditions + * @param ManyToManyAssociationMetadata $association The association mapping of the association being loaded. + * @param object $sourceEntity The entity that owns the collection. + * @param PersistentCollection $collection The collection to load/fill. * - * @return boolean TRUE if the entity exists in the database, FALSE otherwise. + * @return array */ - public function exists($entity, Criteria $extraConditions = null); + public function loadManyToManyCollection( + ManyToManyAssociationMetadata $association, + $sourceEntity, + PersistentCollection $collection + ); } diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index 10280cbd64f..9e6cf8d927b 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -22,9 +22,14 @@ use Doctrine\Common\Collections\Criteria; use Doctrine\DBAL\LockMode; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ColumnMetadata; use Doctrine\ORM\Mapping\GeneratorType; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; +use Doctrine\ORM\Mapping\VersionFieldMetadata; use Doctrine\ORM\Utility\PersisterHelper; /** @@ -60,8 +65,9 @@ public function getOwningTable($fieldName) $property = $this->class->getProperty($fieldName); switch (true) { - case isset($this->class->associationMappings[$fieldName]['inherited']): - $cm = $this->em->getClassMetadata($this->class->associationMappings[$fieldName]['inherited']); + case (isset($this->class->associationMappings[$fieldName]) && $this->class->isInheritedAssociation($fieldName)): + $association = $this->class->associationMappings[$fieldName]; + $cm = $association->getDeclaringClass(); break; case ($property && $this->class->isInheritedProperty($fieldName)): @@ -270,20 +276,32 @@ public function delete($entity) /** * {@inheritdoc} */ - public function getSelectSQL($criteria, $assoc = null, $lockMode = null, $limit = null, $offset = null, array $orderBy = null) + public function getSelectSQL( + $criteria, + AssociationMetadata $association = null, + $lockMode = null, + $limit = null, + $offset = null, + array $orderBy = [] + ) { $this->switchPersisterContext($offset, $limit); $baseTableAlias = $this->getSQLTableAlias($this->class->getTableName()); $joinSql = $this->getJoinSql($baseTableAlias); - if ($assoc != null && $assoc['type'] == ClassMetadata::MANY_TO_MANY) { - $joinSql .= $this->getSelectManyToManyJoinSQL($assoc); + if ($association instanceof ManyToManyAssociationMetadata) { + $joinSql .= $this->getSelectManyToManyJoinSQL($association); } + if ($association instanceof ToManyAssociationMetadata && $association->getOrderBy()) { + $orderBy = $association->getOrderBy(); + } + + $orderBySql = $this->getOrderBySQL($orderBy, $baseTableAlias); $conditionSql = ($criteria instanceof Criteria) ? $this->getSelectConditionCriteriaSQL($criteria) - : $this->getSelectConditionSQL($criteria, $assoc); + : $this->getSelectConditionSQL($criteria, $association); // If the current class in the root entity, add the filters $rootClass = $this->em->getClassMetadata($this->class->rootEntityName); @@ -295,35 +313,21 @@ public function getSelectSQL($criteria, $assoc = null, $lockMode = null, $limit : $filterSql; } - $orderBySql = ''; - - if ($assoc !== null && isset($assoc['orderBy'])) { - $orderBy = $assoc['orderBy']; - } - - if ($orderBy) { - $orderBySql = $this->getOrderBySQL($orderBy, $baseTableAlias); - } - $lockSql = ''; switch ($lockMode) { case LockMode::PESSIMISTIC_READ: - $lockSql = ' ' . $this->platform->getReadLockSQL(); - break; case LockMode::PESSIMISTIC_WRITE: - $lockSql = ' ' . $this->platform->getWriteLockSQL(); - break; } $tableName = $this->class->table->getQuotedQualifiedName($this->platform); $from = ' FROM ' . $tableName . ' ' . $baseTableAlias; - $where = $conditionSql != '' ? ' WHERE ' . $conditionSql : ''; + $where = $conditionSql !== '' ? ' WHERE ' . $conditionSql : ''; $lock = $this->platform->appendLockHint($from, $lockMode); $columnList = $this->getSelectColumnsSQL(); $query = 'SELECT ' . $columnList @@ -417,18 +421,24 @@ protected function getSelectColumnsSQL() } // Add foreign key columns - foreach ($this->class->associationMappings as $field => $mapping) { - if ( ! $mapping['isOwningSide'] || ! ($mapping['type'] & ClassMetadata::TO_ONE)) { + foreach ($this->class->associationMappings as $fieldName => $association) { + if (! $association->isOwningSide() || $association instanceof ToManyAssociationMetadata) { continue; } - $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + + foreach ($association->getJoinColumns() as $joinColumn) { + if (! $joinColumn->getType()) { + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) + ); + } - foreach ($mapping['joinColumns'] as $joinColumn) { $columnList[] = $this->getSelectJoinColumnSQL( $joinColumn->getTableName(), $joinColumn->getColumnName(), - PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) + $joinColumn->getType() ); } } @@ -461,18 +471,26 @@ protected function getSelectColumnsSQL() } // Add join columns (foreign keys) - foreach ($subClass->associationMappings as $mapping) { - if ( ! $mapping['isOwningSide'] || ! ($mapping['type'] & ClassMetadata::TO_ONE) || isset($mapping['inherited'])) { + foreach ($subClass->associationMappings as $fieldName => $association) { + if (! $association->isOwningSide() || + $subClass->isInheritedAssociation($fieldName) || + $association instanceof ToManyAssociationMetadata) { continue; } - $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + + foreach ($association->getJoinColumns() as $joinColumn) { + if (! $joinColumn->getType()) { + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) + ); + } - foreach ($mapping['joinColumns'] as $joinColumn) { $columnList[] = $this->getSelectJoinColumnSQL( $joinColumn->getTableName(), $joinColumn->getColumnName(), - PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) + $joinColumn->getType() ); } } @@ -500,34 +518,34 @@ protected function getInsertColumnList() $this->columns[$columnName] = $column; } - $versionPropertyName = $this->class->isVersioned() - ? $this->class->versionProperty->getName() - : null - ; - + // @todo guilhermeblanco Why can't we use: + // - array_unique(array_values($this->class->fieldNames)) + // - array_merge($this->class->properties, $this->class->associationMappings) foreach ($this->class->reflFields as $name => $field) { $property = $this->class->getProperty($name); + $association = isset($this->class->associationMappings[$name]) + ? $this->class->associationMappings[$name] + : null; - if (($property && $this->class->isInheritedProperty($name)) - || isset($this->class->associationMappings[$name]['inherited']) - || ($versionPropertyName === $name) + if (($property && ($property instanceof VersionFieldMetadata || $this->class->isInheritedProperty($name))) + || ($association && $this->class->isInheritedAssociation($name)) /*|| isset($this->class->embeddedClasses[$name])*/) { continue; } - if (isset($this->class->associationMappings[$name])) { - $assoc = $this->class->associationMappings[$name]; + if ($association) { + if ($association->isOwningSide() && $association instanceof ToOneAssociationMetadata) { + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); - if ($assoc['isOwningSide'] && $assoc['type'] & ClassMetadata::TO_ONE) { - $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); - - foreach ($assoc['joinColumns'] as $joinColumn) { + foreach ($association->getJoinColumns() as $joinColumn) { $columnName = $joinColumn->getColumnName(); $referencedColumnName = $joinColumn->getReferencedColumnName(); - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) - ); + if (! $joinColumn->getType()) { + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) + ); + } $columns[] = $columnName; diff --git a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php index db6856852f7..78ec57436f1 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php @@ -19,14 +19,17 @@ namespace Doctrine\ORM\Persisters\Entity; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Common\Collections\Criteria; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\Utility\PersisterHelper; /** * Persister for entities that participate in a hierarchy mapped with the * SINGLE_TABLE strategy. * + * @author Guilherme Blanco * @author Roman Borschel * @author Benjamin Eberlei * @author Alexander @@ -75,18 +78,26 @@ protected function getSelectColumnsSQL() } // Foreign key columns - foreach ($subClass->associationMappings as $mapping) { - if ( ! $mapping['isOwningSide'] || ! ($mapping['type'] & ClassMetadata::TO_ONE) || isset($mapping['inherited'])) { + foreach ($subClass->associationMappings as $association) { + if (! $association->isOwningSide() || + ! ($association instanceof ToOneAssociationMetadata) || + $subClass->isInheritedAssociation($association->getName())) { continue; } - $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + + foreach ($association->getJoinColumns() as $joinColumn) { + if (! $joinColumn->getType()) { + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) + ); + } - foreach ($mapping['joinColumns'] as $joinColumn) { $columnList[] = $this->getSelectJoinColumnSQL( $joinColumn->getTableName(), $joinColumn->getColumnName(), - PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) + $joinColumn->getType() ); } } @@ -126,9 +137,9 @@ protected function getSQLTableAlias($tableName, $assocName = '') /** * {@inheritdoc} */ - protected function getSelectConditionSQL(array $criteria, $assoc = null) + protected function getSelectConditionSQL(array $criteria, AssociationMetadata $association = null) { - $conditionSql = parent::getSelectConditionSQL($criteria, $assoc); + $conditionSql = parent::getSelectConditionSQL($criteria, $association); if ($conditionSql) { $conditionSql .= ' AND '; diff --git a/lib/Doctrine/ORM/Query.php b/lib/Doctrine/ORM/Query.php index bba99d544d7..5cf8b09e9f5 100644 --- a/lib/Doctrine/ORM/Query.php +++ b/lib/Doctrine/ORM/Query.php @@ -394,6 +394,7 @@ private function processParameterMappings($paramMappings) throw QueryException::unknownParameter($key); } + // @todo guilhermeblanco Why is this needed? if (isset($rsm->metadataParameterMapping[$key]) && $value instanceof ClassMetadata) { $value = $value->getMetadataValue($rsm->metadataParameterMapping[$key]); } diff --git a/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php index d62394e593b..31965f625f6 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php @@ -56,9 +56,10 @@ public function getSql(SqlWalker $sqlWalker) $assocField = $this->pathExpression->field; $qComp = $sqlWalker->getQueryComponent($dqlAlias); $class = $qComp['metadata']; - $assoc = $class->associationMappings[$assocField]; - $targetEntity = $sqlWalker->getEntityManager()->getClassMetadata($assoc['targetEntity']); - $joinColumn = reset($assoc['joinColumns']); + $association = $class->associationMappings[$assocField]; + $targetEntity = $sqlWalker->getEntityManager()->getClassMetadata($association->getTargetEntity()); + $joinColumns = $association->getJoinColumns(); + $joinColumn = reset($joinColumns); if ($this->fieldMapping !== null) { if (($property = $targetEntity->getProperty($this->fieldMapping)) === null) { @@ -67,7 +68,7 @@ public function getSql(SqlWalker $sqlWalker) $joinColumn = null; - foreach ($assoc['joinColumns'] as $mapping) { + foreach ($joinColumns as $mapping) { if ($mapping->getReferencedColumnName() === $property->getColumnName()) { $joinColumn = $mapping; @@ -81,7 +82,8 @@ public function getSql(SqlWalker $sqlWalker) } // The table with the relation may be a subclass, so get the table name from the association definition - $tableName = $sqlWalker->getEntityManager()->getClassMetadata($assoc['sourceEntity'])->getTableName(); + $sourceClass = $sqlWalker->getEntityManager()->getClassMetadata($association->getSourceEntity()); + $tableName = $sourceClass->getTableName(); $tableAlias = $sqlWalker->getSQLTableAlias($tableName, $dqlAlias); $quotedColumnName = $platform->quoteIdentifier($joinColumn->getColumnName()); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php index 3f2ae07bfd6..6abb0d0d1ee 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php @@ -19,6 +19,7 @@ namespace Doctrine\ORM\Query\AST\Functions; +use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; use Doctrine\ORM\Query\Lexer; /** @@ -46,28 +47,30 @@ class SizeFunction extends FunctionNode */ public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) { - $platform = $sqlWalker->getEntityManager()->getConnection()->getDatabasePlatform(); - $quoteStrategy = $sqlWalker->getEntityManager()->getConfiguration()->getQuoteStrategy(); - $dqlAlias = $this->collectionPathExpression->identificationVariable; - $assocField = $this->collectionPathExpression->field; - - $qComp = $sqlWalker->getQueryComponent($dqlAlias); - $class = $qComp['metadata']; - $assoc = $class->associationMappings[$assocField]; - $sql = 'SELECT COUNT(*) FROM '; - - if ($assoc['type'] == \Doctrine\ORM\Mapping\ClassMetadata::ONE_TO_MANY) { - $targetClass = $sqlWalker->getEntityManager()->getClassMetadata($assoc['targetEntity']); + $platform = $sqlWalker->getEntityManager()->getConnection()->getDatabasePlatform(); + $dqlAlias = $this->collectionPathExpression->identificationVariable; + $assocField = $this->collectionPathExpression->field; + $sql = 'SELECT COUNT(*) FROM '; + $qComp = $sqlWalker->getQueryComponent($dqlAlias); + $class = $qComp['metadata']; + $association = $class->associationMappings[$assocField]; + $targetClass = $sqlWalker->getEntityManager()->getClassMetadata($association->getTargetEntity()); + $owningAssociation = $association->isOwningSide() + ? $association + : $targetClass->associationMappings[$association->getMappedBy()] + ; + + if ($association instanceof OneToManyAssociationMetadata) { $targetTableName = $targetClass->table->getQuotedQualifiedName($platform); $targetTableAlias = $sqlWalker->getSQLTableAlias($targetClass->getTableName()); $sourceTableAlias = $sqlWalker->getSQLTableAlias($class->getTableName(), $dqlAlias); $sql .= $targetTableName . ' ' . $targetTableAlias . ' WHERE '; - $owningAssoc = $targetClass->associationMappings[$assoc['mappedBy']]; - $first = true; + $owningAssociation = $targetClass->associationMappings[$association->getMappedBy()]; + $first = true; - foreach ($owningAssoc['joinColumns'] as $joinColumn) { + foreach ($owningAssociation->getJoinColumns() as $joinColumn) { if ($first) $first = false; else $sql .= ' AND '; $sql .= sprintf('%s.%s = %s.%s', @@ -78,10 +81,7 @@ public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) ); } } else { // many-to-many - $targetClass = $sqlWalker->getEntityManager()->getClassMetadata($assoc['targetEntity']); - - $owningAssoc = $assoc['isOwningSide'] ? $assoc : $targetClass->associationMappings[$assoc['mappedBy']]; - $joinTable = $owningAssoc['joinTable']; + $joinTable = $owningAssociation->getJoinTable(); $joinTableName = $joinTable->getQuotedQualifiedName($platform); // SQL table aliases @@ -96,7 +96,7 @@ public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) // join to target table $sql .= $joinTableName . ' ' . $joinTableAlias . ' WHERE '; - $joinColumns = $assoc['isOwningSide'] + $joinColumns = $association->isOwningSide() ? $joinTable->getJoinColumns() : $joinTable->getInverseJoinColumns() ; diff --git a/lib/Doctrine/ORM/Query/Parser.php b/lib/Doctrine/ORM/Query/Parser.php index d39848d9ebc..5f6cfc0edc4 100644 --- a/lib/Doctrine/ORM/Query/Parser.php +++ b/lib/Doctrine/ORM/Query/Parser.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Query; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\Query; use Doctrine\ORM\Query\AST\Functions; @@ -675,8 +676,8 @@ private function processDeferredPartialObjectExpressions() } if (isset($class->associationMappings[$field]) && - $class->associationMappings[$field]['isOwningSide'] && - $class->associationMappings[$field]['type'] & ClassMetadata::TO_ONE) { + $class->associationMappings[$field]->isOwningSide() && + $class->associationMappings[$field] instanceof ToOneAssociationMetadata) { continue; } @@ -764,9 +765,9 @@ private function processDeferredPathExpressions() $fieldType = AST\PathExpression::TYPE_STATE_FIELD; if (isset($class->associationMappings[$field])) { - $assoc = $class->associationMappings[$field]; + $association = $class->associationMappings[$field]; - $fieldType = ($assoc['type'] & ClassMetadata::TO_ONE) + $fieldType = $association instanceof ToOneAssociationMetadata ? AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION : AST\PathExpression::TYPE_COLLECTION_VALUED_ASSOCIATION; } @@ -1629,7 +1630,8 @@ public function SubselectIdentificationVariableDeclaration() $field = $associationPathExpression->associationField; $class = $this->queryComponents[$identificationVariable]['metadata']; - $targetClass = $this->em->getClassMetadata($class->associationMappings[$field]['targetEntity']); + $association = $class->associationMappings[$field]; + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); // Building queryComponent $joinQueryComponent = array( @@ -1768,13 +1770,14 @@ public function JoinAssociationDeclaration() $field = $joinAssociationPathExpression->associationField; $class = $this->queryComponents[$identificationVariable]['metadata']; - $targetClass = $this->em->getClassMetadata($class->associationMappings[$field]['targetEntity']); + $association = $class->associationMappings[$field]; + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); // Building queryComponent $joinQueryComponent = [ 'metadata' => $targetClass, 'parent' => $joinAssociationPathExpression->identificationVariable, - 'relation' => $class->getAssociationMapping($field), + 'relation' => $association, 'map' => null, 'nestingLevel' => $this->nestingLevel, 'token' => $this->lexer->lookahead diff --git a/lib/Doctrine/ORM/Query/QueryException.php b/lib/Doctrine/ORM/Query/QueryException.php index b78e27bcfee..072bb8451ee 100644 --- a/lib/Doctrine/ORM/Query/QueryException.php +++ b/lib/Doctrine/ORM/Query/QueryException.php @@ -18,6 +18,7 @@ */ namespace Doctrine\ORM\Query; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Query\AST\PathExpression; @@ -219,15 +220,18 @@ public static function associationPathInverseSideNotSupported(PathExpression $pa } /** - * @param array $assoc + * @param AssociationMetadata $association * * @return QueryException */ - public static function iterateWithFetchJoinNotAllowed($assoc) + public static function iterateWithFetchJoinNotAllowed(AssociationMetadata $association) { return new self( - "Iterate with fetch join in class " . $assoc['sourceEntity'] . - " using association " . $assoc['fieldName'] . " not allowed." + sprintf( + 'Iterate with fetch join in class %s using association %s not allowed.', + $association->getSourceEntity(), + $association->getName() + ) ); } diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index 2eb9f26037c..67744f9c3b1 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -172,11 +172,10 @@ protected function addAllClassFields($class, $alias, $columnAliasMap = []) throw new \InvalidArgumentException("The column '$columnAlias' conflicts with another column in the mapper."); } - $associationMapping = $classMetadata->associationMappings[$propertyName]; - $isIdentifier = isset($associationMapping['id']) && $associationMapping['id'] === true; - $columnType = PersisterHelper::getTypeOfColumn($columnName, $classMetadata, $this->em); + $association = $classMetadata->associationMappings[$propertyName]; + $columnType = PersisterHelper::getTypeOfColumn($columnName, $classMetadata, $this->em); - $this->addMetaResult($alias, $columnAlias, $columnName, $isIdentifier, $columnType); + $this->addMetaResult($alias, $columnAlias, $columnName, $association->isPrimaryKey(), $columnType); } } @@ -298,11 +297,10 @@ public function addNamedNativeQueryResultClassMapping(ClassMetadata $class, $res continue; } - $associationMapping = $classMetadata->associationMappings[$propertyName]; - $isIdentifier = (isset($associationMapping['id']) && $associationMapping['id'] === true); - $columnType = PersisterHelper::getTypeOfColumn($columnName, $classMetadata, $this->em); + $association = $classMetadata->associationMappings[$propertyName]; + $columnType = PersisterHelper::getTypeOfColumn($columnName, $classMetadata, $this->em); - $this->addMetaResult($alias, $columnName, $columnName, $isIdentifier, $columnType); + $this->addMetaResult($alias, $columnName, $columnName, $association->isPrimaryKey(), $columnType); } return $this; @@ -337,8 +335,8 @@ public function addNamedNativeQueryResultSetMapping(ClassMetadata $class, $resul $this->addNamedNativeQueryEntityResultMapping($classMetadata, $entityMapping, $joinAlias); - foreach ($associations as $relation => $mapping) { - $this->addJoinedEntityResult($mapping['targetEntity'], $joinAlias, $rootAlias, $relation); + foreach ($associations as $relation => $association) { + $this->addJoinedEntityResult($association->getTargetEntity(), $joinAlias, $rootAlias, $relation); } } @@ -392,11 +390,11 @@ public function addNamedNativeQueryEntityResultMapping(ClassMetadata $classMetad if (isset($classMetadata->associationMappings[$relation])) { if ($relation) { - $associationMapping = $classMetadata->associationMappings[$relation]; - $joinAlias = $alias.$relation; - $parentAlias = $alias; + $association = $classMetadata->associationMappings[$relation]; + $joinAlias = $alias.$relation; + $parentAlias = $alias; - $this->addJoinedEntityResult($associationMapping['targetEntity'], $joinAlias, $parentAlias, $relation); + $this->addJoinedEntityResult($association->getTargetEntity(), $joinAlias, $parentAlias, $relation); $this->addFieldResult($joinAlias, $field['column'], $fieldName); } else { $this->addFieldResult($alias, $field['column'], $fieldName, $classMetadata->name); @@ -409,7 +407,6 @@ public function addNamedNativeQueryEntityResultMapping(ClassMetadata $classMetad $this->addFieldResult($alias, $field['column'], $fieldName, $classMetadata->name); } } - } else { foreach ($classMetadata->fieldNames as $columnName => $propertyName) { if (! $classMetadata->hasField($propertyName)) { diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index ec8c5c59d00..685f5c7001f 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -23,6 +23,10 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\InheritanceType; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; +use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\OptimisticLockException; use Doctrine\ORM\Query; use Doctrine\ORM\Utility\PersisterHelper; @@ -403,14 +407,15 @@ private function generateOrderedCollectionOrderByItems() $orderedColumns = []; foreach ($this->selectedClasses as $selectedClass) { - $dqlAlias = $selectedClass['dqlAlias']; - $qComp = $this->queryComponents[$dqlAlias]; + $dqlAlias = $selectedClass['dqlAlias']; + $qComp = $this->queryComponents[$dqlAlias]; + $association = $qComp['relation']; - if ( ! isset($qComp['relation']['orderBy'])) { + if (! ($association instanceof ToManyAssociationMetadata)) { continue; } - foreach ($qComp['relation']['orderBy'] as $fieldName => $orientation) { + foreach ($association->getOrderBy() as $fieldName => $orientation) { $property = $qComp['metadata']->getProperty($fieldName); $tableName = $property->getTableName(); $columnName = $this->platform->quoteIdentifier($property->getColumnName()); @@ -677,27 +682,23 @@ public function walkPathExpression($pathExpr) case AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION: // 1- the owning side: // Just use the foreign key, i.e. u.group_id - $fieldName = $pathExpr->field; - $dqlAlias = $pathExpr->identificationVariable; - $class = $this->queryComponents[$dqlAlias]['metadata']; - $mapping = $class->associationMappings[$fieldName]; - - if (isset($class->associationMappings[$fieldName]['inherited'])) { - $class = $this->em->getClassMetadata($class->associationMappings[$fieldName]['inherited']); - } - - $assoc = $class->associationMappings[$fieldName]; + $fieldName = $pathExpr->field; + $dqlAlias = $pathExpr->identificationVariable; + $class = $this->queryComponents[$dqlAlias]['metadata']; + $association = $class->associationMappings[$fieldName]; - if (! $assoc['isOwningSide']) { + if (! $association->isOwningSide()) { throw QueryException::associationPathInverseSideNotSupported($pathExpr); } + $joinColumns = $association->getJoinColumns(); + // COMPOSITE KEYS NOT (YET?) SUPPORTED - if (count($mapping['joinColumns']) > 1) { + if (count($joinColumns) > 1) { throw QueryException::associationPathCompositeKeyNotSupported(); } - $joinColumn = reset($mapping['joinColumns']); + $joinColumn = reset($joinColumns); if ($this->useSqlTableAliases) { $sql .= $this->getSQLTableAlias($joinColumn->getTableName(), $dqlAlias) . '.'; @@ -744,7 +745,7 @@ public function walkSelectClause($selectClause) $class->name, $dqlAlias, $this->queryComponents[$dqlAlias]['parent'], - $this->queryComponents[$dqlAlias]['relation']['fieldName'] + $this->queryComponents[$dqlAlias]['relation']->getName() ); } @@ -768,17 +769,16 @@ public function walkSelectClause($selectClause) } // Add foreign key columns of class and also parent classes - foreach ($class->associationMappings as $assoc) { - if ( ! ($assoc['isOwningSide'] && $assoc['type'] & ClassMetadata::TO_ONE)) { + foreach ($class->associationMappings as $association) { + if (! ($association->isOwningSide() && $association instanceof ToOneAssociationMetadata)) { continue; - } else if ( !$addMetaColumns && !isset($assoc['id'])) { + } else if (! $addMetaColumns && ! $association->isPrimaryKey()) { continue; } - $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); - $isIdentifier = (isset($assoc['id']) && $assoc['id'] === true); + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); - foreach ($assoc['joinColumns'] as $joinColumn) { + foreach ($association->getJoinColumns() as $joinColumn) { $columnName = $joinColumn->getColumnName(); $quotedColumnName = $this->platform->quoteIdentifier($columnName); $columnAlias = $this->getSQLColumnAlias($columnName); @@ -792,7 +792,7 @@ public function walkSelectClause($selectClause) $columnAlias ); - $this->rsm->addMetaResult($dqlAlias, $columnAlias, $columnName, $isIdentifier, $columnType); + $this->rsm->addMetaResult($dqlAlias, $columnAlias, $columnName, $association->isPrimaryKey(), $columnType); } } @@ -806,29 +806,32 @@ public function walkSelectClause($selectClause) $subClass = $this->em->getClassMetadata($subClassName); $sqlTableAlias = $this->getSQLTableAlias($subClass->getTableName(), $dqlAlias); - foreach ($subClass->associationMappings as $assoc) { + foreach ($subClass->associationMappings as $association) { // Skip if association is inherited - if (isset($assoc['inherited'])) continue; - - if ($assoc['isOwningSide'] && $assoc['type'] & ClassMetadata::TO_ONE) { - $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); - $isIdentifier = (isset($assoc['id']) && $assoc['id'] === true); - - foreach ($assoc['joinColumns'] as $joinColumn) { - $columnName = $joinColumn->getColumnName(); - $quotedColumnName = $this->platform->quoteIdentifier($columnName); - $columnAlias = $this->getSQLColumnAlias($columnName); - $columnType = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); - - $sqlSelectExpressions[] = sprintf( - '%s.%s AS %s', - $sqlTableAlias, - $quotedColumnName, - $columnAlias - ); + if ($subClass->isInheritedAssociation($association->getName())) { + continue; + } - $this->rsm->addMetaResult($dqlAlias, $columnAlias, $columnName, $isIdentifier, $columnType); - } + if (! ($association->isOwningSide() && $association instanceof ToOneAssociationMetadata)) { + continue; + } + + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + + foreach ($association->getJoinColumns() as $joinColumn) { + $columnName = $joinColumn->getColumnName(); + $quotedColumnName = $this->platform->quoteIdentifier($columnName); + $columnAlias = $this->getSQLColumnAlias($columnName); + $columnType = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); + + $sqlSelectExpressions[] = sprintf( + '%s.%s AS %s', + $sqlTableAlias, + $quotedColumnName, + $columnAlias + ); + + $this->rsm->addMetaResult($dqlAlias, $columnAlias, $columnName, $association->isPrimaryKey(), $columnType); } } } @@ -948,136 +951,147 @@ public function walkJoinAssociationDeclaration($joinAssociationDeclaration, $joi $joinedDqlAlias = $joinAssociationDeclaration->aliasIdentificationVariable; $indexBy = $joinAssociationDeclaration->indexBy; - $relation = $this->queryComponents[$joinedDqlAlias]['relation']; - $targetClass = $this->em->getClassMetadata($relation['targetEntity']); - $sourceClass = $this->em->getClassMetadata($relation['sourceEntity']); + $association = $this->queryComponents[$joinedDqlAlias]['relation']; + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + $sourceClass = $this->em->getClassMetadata($association->getSourceEntity()); $targetTableName = $targetClass->table->getQuotedQualifiedName($this->platform); $targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName(), $joinedDqlAlias); $sourceTableAlias = $this->getSQLTableAlias($sourceClass->getTableName(), $associationPathExpression->identificationVariable); // Ensure we got the owning side, since it has all mapping info - $assoc = ( ! $relation['isOwningSide']) ? $targetClass->associationMappings[$relation['mappedBy']] : $relation; - - if ($this->query->getHint(Query::HINT_INTERNAL_ITERATION) == true && (!$this->query->getHint(self::HINT_DISTINCT) || isset($this->selectedClasses[$joinedDqlAlias]))) { - if ($relation['type'] & ClassMetadata::TO_MANY) { - throw QueryException::iterateWithFetchJoinNotAllowed($assoc); + $owningAssociation = ! $association->isOwningSide() + ? $targetClass->associationMappings[$association->getMappedBy()] + : $association + ; + + if ($this->query->getHint(Query::HINT_INTERNAL_ITERATION) == true && + (!$this->query->getHint(self::HINT_DISTINCT) || isset($this->selectedClasses[$joinedDqlAlias]))) { + if ($association instanceof ToManyAssociationMetadata) { + throw QueryException::iterateWithFetchJoinNotAllowed($owningAssociation); } } $targetTableJoin = null; - // This condition is not checking ClassMetadata::MANY_TO_ONE, because by definition it cannot + // This condition is not checking ManyToOneAssociationMetadata, because by definition it cannot // be the owning side and previously we ensured that $assoc is always the owning side of the associations. // The owning side is necessary at this point because only it contains the JoinColumn information. - switch (true) { - case ($assoc['type'] & ClassMetadata::TO_ONE): - $conditions = []; - - foreach ($assoc['joinColumns'] as $joinColumn) { - $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); - $quotedReferencedColumnName = $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()); - - if ($relation['isOwningSide']) { - $conditions[] = $sourceTableAlias . '.' . $quotedColumnName . ' = ' . $targetTableAlias . '.' . $quotedReferencedColumnName; - - continue; - } + if ($owningAssociation instanceof ToOneAssociationMetadata) { + $conditions = []; - $conditions[] = $sourceTableAlias . '.' . $quotedReferencedColumnName . ' = ' . $targetTableAlias . '.' . $quotedColumnName; - } + foreach ($owningAssociation->getJoinColumns() as $joinColumn) { + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $quotedReferencedColumnName = $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()); - // Apply remaining inheritance restrictions - $discrSql = $this->generateDiscriminatorColumnConditionSQL([$joinedDqlAlias]); + if ($association->isOwningSide()) { + $conditions[] = sprintf( + '%s.%s = %s.%s', + $sourceTableAlias, + $quotedColumnName, + $targetTableAlias, + $quotedReferencedColumnName + ); - if ($discrSql) { - $conditions[] = $discrSql; + continue; } - // Apply the filters - $filterExpr = $this->generateFilterConditionSQL($targetClass, $targetTableAlias); + $conditions[] = sprintf( + '%s.%s = %s.%s', + $sourceTableAlias, + $quotedReferencedColumnName, + $targetTableAlias, + $quotedColumnName + ); + } - if ($filterExpr) { - $conditions[] = $filterExpr; - } + // Apply remaining inheritance restrictions + $discrSql = $this->generateDiscriminatorColumnConditionSQL([$joinedDqlAlias]); - $targetTableJoin = [ - 'table' => $targetTableName . ' ' . $targetTableAlias, - 'condition' => implode(' AND ', $conditions), - ]; - break; + if ($discrSql) { + $conditions[] = $discrSql; + } - case ($assoc['type'] === ClassMetadata::MANY_TO_MANY): - // Join relation table - $joinTable = $assoc['joinTable']; - $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); - $joinTableAlias = $this->getSQLTableAlias($joinTable->getName(), $joinedDqlAlias); + // Apply the filters + $filterExpr = $this->generateFilterConditionSQL($targetClass, $targetTableAlias); - $conditions = []; - $joinColumns = ($relation['isOwningSide']) - ? $joinTable->getJoinColumns() - : $joinTable->getInverseJoinColumns() - ; + if ($filterExpr) { + $conditions[] = $filterExpr; + } - foreach ($joinColumns as $joinColumn) { - $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); - $quotedReferencedColumnName = $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()); + $targetTableJoin = [ + 'table' => $targetTableName . ' ' . $targetTableAlias, + 'condition' => implode(' AND ', $conditions), + ]; + } else if ($owningAssociation instanceof ManyToManyAssociationMetadata) { + // Join relation table + $joinTable = $owningAssociation->getJoinTable(); + $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); + $joinTableAlias = $this->getSQLTableAlias($joinTable->getName(), $joinedDqlAlias); + + $conditions = []; + $joinColumns = $association->isOwningSide() + ? $joinTable->getJoinColumns() + : $joinTable->getInverseJoinColumns() + ; - $conditions[] = sprintf( - '%s.%s = %s.%s', - $sourceTableAlias, - $quotedReferencedColumnName, - $joinTableAlias, - $quotedColumnName - ); - } + foreach ($joinColumns as $joinColumn) { + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $quotedReferencedColumnName = $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()); - $sql .= $joinTableName . ' ' . $joinTableAlias . ' ON ' . implode(' AND ', $conditions); + $conditions[] = sprintf( + '%s.%s = %s.%s', + $sourceTableAlias, + $quotedReferencedColumnName, + $joinTableAlias, + $quotedColumnName + ); + } - // Join target table - $sql .= ($joinType == AST\Join::JOIN_TYPE_LEFT || $joinType == AST\Join::JOIN_TYPE_LEFTOUTER) ? ' LEFT JOIN ' : ' INNER JOIN '; + $sql .= $joinTableName . ' ' . $joinTableAlias . ' ON ' . implode(' AND ', $conditions); - $conditions = []; - $joinColumns = ($relation['isOwningSide']) - ? $joinTable->getInverseJoinColumns() - : $joinTable->getJoinColumns() - ; + // Join target table + $sql .= ($joinType == AST\Join::JOIN_TYPE_LEFT || $joinType == AST\Join::JOIN_TYPE_LEFTOUTER) ? ' LEFT JOIN ' : ' INNER JOIN '; - foreach ($joinColumns as $joinColumn) { - $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); - $quotedReferencedColumnName = $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()); + $conditions = []; + $joinColumns = $association->isOwningSide() + ? $joinTable->getInverseJoinColumns() + : $joinTable->getJoinColumns() + ; - $conditions[] = sprintf( - '%s.%s = %s.%s', - $targetTableAlias, - $quotedReferencedColumnName, - $joinTableAlias, - $quotedColumnName - ); - } + foreach ($joinColumns as $joinColumn) { + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $quotedReferencedColumnName = $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()); - // Apply remaining inheritance restrictions - $discrSql = $this->generateDiscriminatorColumnConditionSQL([$joinedDqlAlias]); + $conditions[] = sprintf( + '%s.%s = %s.%s', + $targetTableAlias, + $quotedReferencedColumnName, + $joinTableAlias, + $quotedColumnName + ); + } - if ($discrSql) { - $conditions[] = $discrSql; - } + // Apply remaining inheritance restrictions + $discrSql = $this->generateDiscriminatorColumnConditionSQL([$joinedDqlAlias]); - // Apply the filters - $filterExpr = $this->generateFilterConditionSQL($targetClass, $targetTableAlias); + if ($discrSql) { + $conditions[] = $discrSql; + } - if ($filterExpr) { - $conditions[] = $filterExpr; - } + // Apply the filters + $filterExpr = $this->generateFilterConditionSQL($targetClass, $targetTableAlias); - $targetTableJoin = [ - 'table' => $targetTableName . ' ' . $targetTableAlias, - 'condition' => implode(' AND ', $conditions), - ]; - break; + if ($filterExpr) { + $conditions[] = $filterExpr; + } - default: - throw new \BadMethodCallException('Type of association must be one of *_TO_ONE or MANY_TO_MANY'); + $targetTableJoin = [ + 'table' => $targetTableName . ' ' . $targetTableAlias, + 'condition' => implode(' AND ', $conditions), + ]; + } else { + throw new \BadMethodCallException('Type of association must be one of *_TO_ONE or MANY_TO_MANY'); } // Handle WITH clause @@ -1104,8 +1118,8 @@ public function walkJoinAssociationDeclaration($joinAssociationDeclaration, $joi if ($indexBy) { // For Many-To-One or One-To-One associations this obviously makes no sense, but is ignored silently. $this->walkIndexBy($indexBy); - } else if (isset($relation['indexBy'])) { - $this->rsm->addIndexBy($joinedDqlAlias, $relation['indexBy']); + } else if ($association instanceof ToManyAssociationMetadata && $association->getIndexedBy()) { + $this->rsm->addIndexBy($joinedDqlAlias, $association->getIndexedBy()); } return $sql; @@ -1927,20 +1941,23 @@ public function walkCollectionMemberExpression($collMemberExpr) throw new \BadMethodCallException("Not implemented"); } - $assoc = $class->associationMappings[$fieldName]; + $association = $class->associationMappings[$fieldName]; + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + $owningAssociation = $association->isOwningSide() + ? $association + : $targetClass->associationMappings[$association->getMappedBy()] + ; - if ($assoc['type'] == ClassMetadata::ONE_TO_MANY) { - $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); + if ($association instanceof OneToManyAssociationMetadata) { $targetTableName = $targetClass->table->getQuotedQualifiedName($this->platform); $targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName()); $sourceTableAlias = $this->getSQLTableAlias($class->getTableName(), $dqlAlias); $sql .= $targetTableName . ' ' . $targetTableAlias . ' WHERE '; - $owningAssoc = $targetClass->associationMappings[$assoc['mappedBy']]; - $sqlParts = []; + $sqlParts = []; - foreach ($owningAssoc['joinColumns'] as $joinColumn) { + foreach ($owningAssociation->getJoinColumns() as $joinColumn) { $sqlParts[] = sprintf( '%s.%s = %s.%s', $sourceTableAlias, @@ -1960,11 +1977,8 @@ public function walkCollectionMemberExpression($collMemberExpr) $sql .= implode(' AND ', $sqlParts); } else { // many-to-many - $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); - $owningAssoc = $assoc['isOwningSide'] ? $assoc : $targetClass->associationMappings[$assoc['mappedBy']]; - $joinTable = $owningAssoc['joinTable']; - // SQL table aliases + $joinTable = $owningAssociation->getJoinTable(); $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); $joinTableAlias = $this->getSQLTableAlias($joinTable->getName()); $targetTableName = $targetClass->table->getQuotedQualifiedName($this->platform); @@ -1975,8 +1989,11 @@ public function walkCollectionMemberExpression($collMemberExpr) $sql .= $joinTableName . ' ' . $joinTableAlias . ' INNER JOIN ' . $targetTableName . ' ' . $targetTableAlias . ' ON '; // join conditions - $joinColumns = $assoc['isOwningSide'] ? $joinTable->getInverseJoinColumns() : $joinTable->getJoinColumns(); $joinSqlParts = []; + $joinColumns = $association->isOwningSide() + ? $joinTable->getInverseJoinColumns() + : $joinTable->getJoinColumns() + ; foreach ($joinColumns as $joinColumn) { $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); @@ -1994,8 +2011,11 @@ public function walkCollectionMemberExpression($collMemberExpr) $sql .= implode(' AND ', $joinSqlParts); $sql .= ' WHERE '; - $joinColumns = $assoc['isOwningSide'] ? $joinTable->getJoinColumns() : $joinTable->getInverseJoinColumns(); $sqlParts = []; + $joinColumns = $association->isOwningSide() + ? $joinTable->getJoinColumns() + : $joinTable->getInverseJoinColumns() + ; foreach ($joinColumns as $joinColumn) { $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); diff --git a/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php b/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php index 50113826183..448adaa8f97 100644 --- a/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php +++ b/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php @@ -23,6 +23,7 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Event\OnFlushEventArgs; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\UnitOfWork; @@ -95,11 +96,12 @@ public function dumpIdentityMap(EntityManagerInterface $em) $cm = $em->getClassMetadata($className); - foreach ($cm->associationMappings as $field => $assoc) { + foreach ($cm->associationMappings as $field => $association) { fwrite($fh, " " . $field . " "); - $value = $cm->getFieldValue($entity, $field); - if ($assoc['type'] & ClassMetadata::TO_ONE) { + $value = $association->getValue($entity); + + if ($association instanceof ToOneAssociationMetadata) { if ($value === null) { fwrite($fh, " NULL\n"); } else { @@ -111,6 +113,7 @@ public function dumpIdentityMap(EntityManagerInterface $em) } } else { $initialized = !($value instanceof PersistentCollection) || $value->isInitialized(); + if ($value === null) { fwrite($fh, " NULL\n"); } elseif ($initialized) { @@ -121,6 +124,7 @@ public function dumpIdentityMap(EntityManagerInterface $em) } } else { fwrite($fh, "[PROXY] " . $this->getType($value) . " unknown element size\n"); + foreach ($value->unwrap() as $obj) { fwrite($fh, " " . $this->getIdString($obj, $uow) . " " . spl_object_hash($obj)."\n"); } diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index a2b03f5f9d3..9d435edcd63 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -19,6 +19,8 @@ namespace Doctrine\ORM\Tools; +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ChangeTrackingPolicy; use Doctrine\Common\Collections\Collection; use Doctrine\Common\Util\Inflector; @@ -29,6 +31,13 @@ use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\JoinColumnMetadata; +use Doctrine\ORM\Mapping\JoinTableMetadata; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ManyToOneAssociationMetadata; +use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; +use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; +use Doctrine\ORM\Mapping\ToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; /** * Generic class used to generate PHP5 entity classes from ClassMetadata instances. @@ -654,9 +663,9 @@ protected function generateEntityConstructor(ClassMetadata $metadata) $collections = []; - foreach ($metadata->associationMappings as $mapping) { - if ($mapping['type'] & ClassMetadata::TO_MANY) { - $collections[] = '$this->'.$mapping['fieldName'].' = new \Doctrine\Common\Collections\ArrayCollection();'; + foreach ($metadata->associationMappings as $association) { + if ($association instanceof ToManyAssociationMetadata) { + $collections[] = sprintf('$this->%s = new \%s();', $association->getName(), ArrayCollection::class); } } @@ -1145,7 +1154,7 @@ protected function generateEntityStubMethods(ClassMetadata $metadata) }*/ $fieldType = $property->getTypeName(); - $nullable = $this->nullableFieldExpression($property); + $nullable = $property->isNullable() ? 'null' : null; if (( ! $property->isPrimaryKey() || $metadata->generatorType == GeneratorType::NONE) && ( ! $metadata->isEmbeddedClass || ! $this->embeddablesImmutable) && @@ -1174,23 +1183,24 @@ protected function generateEntityStubMethods(ClassMetadata $metadata) } }*/ - foreach ($metadata->associationMappings as $associationMapping) { - if ($associationMapping['type'] & ClassMetadata::TO_ONE) { - $nullable = $this->isAssociationIsNullable($associationMapping) ? 'null' : null; - if ($code = $this->generateEntityStubMethod($metadata, 'set', $associationMapping['fieldName'], $associationMapping['targetEntity'], $nullable)) { + foreach ($metadata->associationMappings as $association) { + if ($association instanceof ToOneAssociationMetadata) { + $nullable = $this->isAssociationIsNullable($association) ? 'null' : null; + + if ($code = $this->generateEntityStubMethod($metadata, 'set', $association->getName(), $association->getTargetEntity(), $nullable)) { $methods[] = $code; } - if ($code = $this->generateEntityStubMethod($metadata, 'get', $associationMapping['fieldName'], $associationMapping['targetEntity'], $nullable)) { + if ($code = $this->generateEntityStubMethod($metadata, 'get', $association->getName(), $association->getTargetEntity(), $nullable)) { $methods[] = $code; } - } elseif ($associationMapping['type'] & ClassMetadata::TO_MANY) { - if ($code = $this->generateEntityStubMethod($metadata, 'add', $associationMapping['fieldName'], $associationMapping['targetEntity'])) { + } else if ($association instanceof ToManyAssociationMetadata) { + if ($code = $this->generateEntityStubMethod($metadata, 'add', $association->getName(), $association->getTargetEntity())) { $methods[] = $code; } - if ($code = $this->generateEntityStubMethod($metadata, 'remove', $associationMapping['fieldName'], $associationMapping['targetEntity'])) { + if ($code = $this->generateEntityStubMethod($metadata, 'remove', $association->getName(), $association->getTargetEntity())) { $methods[] = $code; } - if ($code = $this->generateEntityStubMethod($metadata, 'get', $associationMapping['fieldName'], Collection::class)) { + if ($code = $this->generateEntityStubMethod($metadata, 'get', $association->getName(), Collection::class)) { $methods[] = $code; } } @@ -1200,25 +1210,23 @@ protected function generateEntityStubMethods(ClassMetadata $metadata) } /** - * @param array $associationMapping + * @param AssociationMetadata $association * * @return bool */ - protected function isAssociationIsNullable(array $associationMapping) + protected function isAssociationIsNullable(AssociationMetadata $association) { - if (isset($associationMapping['id']) && $associationMapping['id']) { + if ($association->isPrimaryKey()) { return false; } - if (isset($associationMapping['joinColumns'])) { - $joinColumns = $associationMapping['joinColumns']; - } else { - //@todo there is no way to retrieve targetEntity metadata - $joinColumns = []; - } + $joinColumns = $association instanceof ToOneAssociationMetadata + ? $association->getJoinColumns() + : [] + ; foreach ($joinColumns as $joinColumn) { - if (!$joinColumn->isNullable()) { + if (! $joinColumn->isNullable()) { return false; } } @@ -1257,14 +1265,14 @@ protected function generateEntityAssociationMappingProperties(ClassMetadata $met { $lines = []; - foreach ($metadata->associationMappings as $associationMapping) { - if ($this->hasProperty($associationMapping['fieldName'], $metadata)) { + foreach ($metadata->associationMappings as $association) { + if ($this->hasProperty($association->getName(), $metadata)) { continue; } - $lines[] = $this->generateAssociationMappingPropertyDocBlock($associationMapping, $metadata); - $lines[] = $this->spaces . $this->fieldVisibility . ' $' . $associationMapping['fieldName'] - . ($associationMapping['type'] == 'manyToMany' ? ' = array()' : null) . ";\n"; + $lines[] = $this->generateAssociationMappingPropertyDocBlock($association, $metadata); + $lines[] = $this->spaces . $this->fieldVisibility . ' $' . $association->getName() + . ($association instanceof ManyToManyAssociationMetadata ? ' = array()' : null) . ";\n"; } return implode("\n", $lines); @@ -1405,6 +1413,77 @@ protected function generateLifecycleCallbackMethod($name, $methodName, ClassMeta return $this->prefixCodeWithSpaces($method); } + /** + * @param ClassMetadata $metadata + * + * @return string + */ + protected function generateIdentifierAnnotation(ClassMetadata $metadata) + { + $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'Id'; + + if ($generatorType = $this->getIdGeneratorTypeString($metadata->generatorType)) { + $lines[] = $this->spaces.' * @' . $this->annotationsPrefix . 'GeneratedValue(strategy="' . $generatorType . '")'; + } + + if ($metadata->generatorDefinition) { + $generator = []; + + if (isset($metadata->generatorDefinition['sequenceName'])) { + $generator[] = 'sequenceName="' . $metadata->generatorDefinition['sequenceName'] . '"'; + } + + if (isset($metadata->generatorDefinition['allocationSize'])) { + $generator[] = 'allocationSize=' . $metadata->generatorDefinition['allocationSize']; + } + + $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'SequenceGenerator(' . implode(', ', $generator) . ')'; + } + + return implode(PHP_EOL, $lines); + } + + /** + * @param JoinTableMetadata $joinTable + * + * @return string + */ + protected function generateJoinTableAnnotation(JoinTableMetadata $joinTable) + { + $lines = []; + $joinTableAnnot = []; + $joinTableAnnot[] = 'name="' . $joinTable->getName() . '"'; + + if (! empty($joinTable->getSchema())) { + $joinTableAnnot[] = 'schema="' . $joinTable->getSchema() . '"'; + } + + $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'JoinTable(' . implode(', ', $joinTableAnnot) . ','; + $lines[] = $this->spaces . ' * joinColumns={'; + + $joinColumnsLines = []; + + foreach ($joinTable->getJoinColumns() as $joinColumn) { + $joinColumnsLines[] = $this->spaces . ' * ' . $this->generateJoinColumnAnnotation($joinColumn); + } + + $lines[] = implode(",". PHP_EOL, $joinColumnsLines); + $lines[] = $this->spaces . ' * },'; + $lines[] = $this->spaces . ' * inverseJoinColumns={'; + + $inverseJoinColumnsLines = []; + + foreach ($joinTable->getInverseJoinColumns() as $joinColumn) { + $inverseJoinColumnsLines[] = $this->spaces . ' * ' . $this->generateJoinColumnAnnotation($joinColumn); + } + + $lines[] = implode(",". PHP_EOL, $inverseJoinColumnsLines); + $lines[] = $this->spaces . ' * }'; + $lines[] = $this->spaces . ' * )'; + + return implode(PHP_EOL, $lines); + } + /** * @param JoinColumnMetadata $joinColumn * @@ -1433,73 +1512,82 @@ protected function generateJoinColumnAnnotation(JoinColumnMetadata $joinColumn) $joinColumnAnnot[] = 'columnDefinition="' . $joinColumn->getColumnDefinition() . '"'; } + $options = []; + + if ($joinColumn->getOptions()) { + foreach ($joinColumn->getOptions() as $key => $value) { + $options[] = sprintf('"%s"=%s', $key, str_replace("'", '"', var_export($value, true))); + } + } + + if ($options) { + $joinColumnAnnot[] = 'options={'.implode(',', $options).'}'; + } + return '@' . $this->annotationsPrefix . 'JoinColumn(' . implode(', ', $joinColumnAnnot) . ')'; } /** - * @param array $associationMapping - * @param ClassMetadata $metadata + * @param AssociationMetadata $association + * @param ClassMetadata $metadata * * @return string */ - protected function generateAssociationMappingPropertyDocBlock(array $associationMapping, ClassMetadata $metadata) + protected function generateAssociationMappingPropertyDocBlock(AssociationMetadata $association, ClassMetadata $metadata) { $lines = []; $lines[] = $this->spaces . '/**'; - if ($associationMapping['type'] & ClassMetadata::TO_MANY) { + if ($association instanceof ToManyAssociationMetadata) { $lines[] = $this->spaces . ' * @var \Doctrine\Common\Collections\Collection'; } else { - $lines[] = $this->spaces . ' * @var \\' . ltrim($associationMapping['targetEntity'], '\\'); + $lines[] = $this->spaces . ' * @var \\' . ltrim($association->getTargetEntity(), '\\'); } if ($this->generateAnnotations) { $lines[] = $this->spaces . ' *'; - if (isset($associationMapping['id']) && $associationMapping['id']) { - $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'Id'; - - if ($generatorType = $this->getIdGeneratorTypeString($metadata->generatorType)) { - $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'GeneratedValue(strategy="' . $generatorType . '")'; - } + if ($association->isPrimaryKey()) { + $lines[] = $this->generateIdentifierAnnotation($metadata); } $type = null; - switch ($associationMapping['type']) { - case ClassMetadata::ONE_TO_ONE: - $type = 'OneToOne'; - break; - case ClassMetadata::MANY_TO_ONE: - $type = 'ManyToOne'; - break; - case ClassMetadata::ONE_TO_MANY: - $type = 'OneToMany'; - break; - case ClassMetadata::MANY_TO_MANY: - $type = 'ManyToMany'; - break; + if ($association instanceof OneToOneAssociationMetadata) { + $type = 'OneToOne'; + } else if ($association instanceof ManyToOneAssociationMetadata) { + $type = 'ManyToOne'; + } else if ($association instanceof OneToManyAssociationMetadata) { + $type = 'OneToMany'; + } else if ($association instanceof ManyToManyAssociationMetadata) { + $type = 'ManyToMany'; } $typeOptions = []; - if (isset($associationMapping['targetEntity'])) { - $typeOptions[] = 'targetEntity="' . $associationMapping['targetEntity'] . '"'; + $typeOptions[] = 'targetEntity="' . $association->getTargetEntity() . '"'; + + if ($association->getMappedBy()) { + $typeOptions[] = 'mappedBy="' . $association->getMappedBy() . '"'; + } + + if ($association->getInversedBy()) { + $typeOptions[] = 'inversedBy="' . $association->getInversedBy() . '"'; } - if (isset($associationMapping['inversedBy'])) { - $typeOptions[] = 'inversedBy="' . $associationMapping['inversedBy'] . '"'; + if ($association instanceof ToManyAssociationMetadata && $association->getIndexedBy()) { + $typeOptions[] = 'indexBy="' . $association->getIndexedBy() . '"'; } - if (isset($associationMapping['mappedBy'])) { - $typeOptions[] = 'mappedBy="' . $associationMapping['mappedBy'] . '"'; + if ($association->isOrphanRemoval()) { + $typeOptions[] = 'orphanRemoval=true'; } - if ($associationMapping['cascade']) { + if ($association->getCascade()) { $cascades = []; foreach (['remove', 'persist', 'refresh', 'merge', 'detach'] as $cascadeType) { - if (in_array($cascadeType, $associationMapping['cascade'])) { + if (in_array($cascadeType, $association->getCascade())) { $cascades[] = sprintf('"%s"', $cascadeType); } } @@ -1511,22 +1599,18 @@ protected function generateAssociationMappingPropertyDocBlock(array $association $typeOptions[] = 'cascade={' . implode(',', $cascades) . '}'; } - if (isset($associationMapping['orphanRemoval']) && $associationMapping['orphanRemoval']) { - $typeOptions[] = 'orphanRemoval=' . ($associationMapping['orphanRemoval'] ? 'true' : 'false'); - } - - if (isset($associationMapping['fetch']) && $associationMapping['fetch'] !== FetchMode::LAZY) { - $typeOptions[] = 'fetch="' . $associationMapping['fetch'] . '"'; + if ($association->getFetchMode() !== FetchMode::LAZY) { + $typeOptions[] = 'fetch="' . $association->getFetchMode() . '"'; } $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . '' . $type . '(' . implode(', ', $typeOptions) . ')'; - if (isset($associationMapping['joinColumns']) && $associationMapping['joinColumns']) { + if ($association instanceof ToOneAssociationMetadata && $association->getJoinColumns()) { $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'JoinColumns({'; $joinColumnsLines = []; - foreach ($associationMapping['joinColumns'] as $joinColumn) { + foreach ($association->getJoinColumns() as $joinColumn) { if ($joinColumnAnnot = $this->generateJoinColumnAnnotation($joinColumn)) { $joinColumnsLines[] = $this->spaces . ' * ' . $joinColumnAnnot; } @@ -1536,47 +1620,22 @@ protected function generateAssociationMappingPropertyDocBlock(array $association $lines[] = $this->spaces . ' * })'; } - if (isset($associationMapping['joinTable'])) { - $joinTable = []; - $joinTable[] = 'name="' . $associationMapping['joinTable']->getName() . '"'; - - if (!empty($associationMapping['joinTable']->getSchema())) { - $joinTable[] = 'schema="' . $associationMapping['joinTable']->getSchema() . '"'; - } - - $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'JoinTable(' . implode(', ', $joinTable) . ','; - $lines[] = $this->spaces . ' * joinColumns={'; - - $joinColumnsLines = []; - - foreach ($associationMapping['joinTable']->getJoinColumns() as $joinColumn) { - $joinColumnsLines[] = $this->spaces . ' * ' . $this->generateJoinColumnAnnotation($joinColumn); - } - - $lines[] = implode(",". PHP_EOL, $joinColumnsLines); - $lines[] = $this->spaces . ' * },'; - $lines[] = $this->spaces . ' * inverseJoinColumns={'; - - $inverseJoinColumnsLines = []; - - foreach ($associationMapping['joinTable']->getInverseJoinColumns() as $joinColumn) { - $inverseJoinColumnsLines[] = $this->spaces . ' * ' . $this->generateJoinColumnAnnotation($joinColumn); + if ($association instanceof ToManyAssociationMetadata) { + if ($association instanceof ManyToManyAssociationMetadata && $association->getJoinTable()) { + $lines[] = $this->generateJoinTableAnnotation($association->getJoinTable()); } - $lines[] = implode(",". PHP_EOL, $inverseJoinColumnsLines); - $lines[] = $this->spaces . ' * }'; - $lines[] = $this->spaces . ' * )'; - } + if ($association->getOrderBy()) { + $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'OrderBy({'; + $orderBy = []; - if (isset($associationMapping['orderBy'])) { - $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'OrderBy({'; + foreach ($association->getOrderBy() as $name => $direction) { + $orderBy[] = $this->spaces . ' * "' . $name . '"="' . $direction . '"'; + } - foreach ($associationMapping['orderBy'] as $name => $direction) { - $lines[] = $this->spaces . ' * "' . $name . '"="' . $direction . '",'; + $lines[] = implode(',' . PHP_EOL, $orderBy); + $lines[] = $this->spaces . ' * })'; } - - $lines[count($lines) - 1] = substr($lines[count($lines) - 1], 0, strlen($lines[count($lines) - 1]) - 1); - $lines[] = $this->spaces . ' * })'; } } @@ -1651,25 +1710,7 @@ protected function generateFieldMappingPropertyDocBlock(FieldMetadata $propertyM $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'Column(' . implode(', ', $column) . ')'; if ($propertyMetadata->isPrimaryKey()) { - $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'Id'; - - if ($generatorType = $this->getIdGeneratorTypeString($metadata->generatorType)) { - $lines[] = $this->spaces.' * @' . $this->annotationsPrefix . 'GeneratedValue(strategy="' . $generatorType . '")'; - } - - if ($metadata->generatorDefinition) { - $generator = []; - - if (isset($metadata->generatorDefinition['sequenceName'])) { - $generator[] = 'sequenceName="' . $metadata->generatorDefinition['sequenceName'] . '"'; - } - - if (isset($metadata->generatorDefinition['allocationSize'])) { - $generator[] = 'allocationSize=' . $metadata->generatorDefinition['allocationSize']; - } - - $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'SequenceGenerator(' . implode(', ', $generator) . ')'; - } + $lines[] = $this->generateIdentifierAnnotation($metadata); } if ($metadata->isVersioned() && $metadata->versionProperty->getName() === $propertyMetadata->getName()) { @@ -1782,16 +1823,6 @@ protected function getIdGeneratorTypeString($type) return $type; } - /** - * @param FieldMetadata $property - * - * @return string|null - */ - private function nullableFieldExpression(FieldMetadata $property) - { - return $property->isNullable() ? 'null' : null; - } - /** * Exports (nested) option elements. * @@ -1804,11 +1835,12 @@ private function exportTableOptions(array $options) $optionsStr = []; foreach ($options as $name => $option) { - if (is_array($option)) { - $optionsStr[] = '"' . $name . '"={' . $this->exportTableOptions($option) . '}'; - } else { - $optionsStr[] = '"' . $name . '"="' . (string) $option . '"'; - } + $optionValue = is_array($option) + ? '{' . $this->exportTableOptions($option) . '}' + : '"' . (string) $option . '"' + ; + + $optionsStr[] = sprintf('"%s"=%s', $name, $optionValue); } return implode(',', $optionsStr); diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 2485d9fa4c1..92a8e200ded 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -23,6 +23,11 @@ use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\JoinTableMetadata; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ManyToOneAssociationMetadata; +use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; +use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; /** * ClassMetadata exporter for PHP code. @@ -177,10 +182,11 @@ public function exportClassMetadata(ClassMetadata $metadata) $lines[] = '$metadata->setIdGeneratorType(Mapping\GeneratorType::' . $metadata->generatorType . ');'; } - foreach ($metadata->associationMappings as $associationMapping) { + foreach ($metadata->associationMappings as $association) { $cascade = ['remove', 'persist', 'refresh', 'merge', 'detach']; + foreach ($cascade as $key => $value) { - if ( ! in_array($value, $associationMapping['cascade'])) { + if ( ! in_array($value, $association->getCascade())) { unset($cascade[$key]); } } @@ -191,57 +197,68 @@ public function exportClassMetadata(ClassMetadata $metadata) $method = null; - switch (true) { - case ($associationMapping['type'] & ClassMetadata::TO_ONE): - $method = $associationMapping['type'] === ClassMetadata::ONE_TO_ONE - ? 'mapOneToOne' - : 'mapManyToOne'; - - $this->exportJoinColumns($associationMapping['joinColumns'] ?? [], $lines, 'joinColumns'); - - $lines[] = null; - $lines[] = '$metadata->' . $method . '(array('; - $lines[] = ' "fieldName" => "' . $associationMapping['fieldName'] . '",'; - $lines[] = ' "targetEntity" => "' . $associationMapping['targetEntity'] . '",'; - $lines[] = ' "fetch" => "' . $associationMapping['fetch'] . '",'; - $lines[] = ' "mappedBy" => "' . $associationMapping['mappedBy'] . '",'; - $lines[] = ' "inversedBy" => "' . $associationMapping['inversedBy'] . '",'; - $lines[] = ' "joinColumns" => $joinColumns,'; - $lines[] = ' "cascade" => ' . $this->varExport($cascade) . ','; - $lines[] = ' "orphanRemoval" => ' . $this->varExport($associationMapping['orphanRemoval']) . ','; - $lines[] = '));'; - break; - - case ($associationMapping['type'] & ClassMetadata::TO_MANY): - if ($associationMapping['type'] === ClassMetadata::MANY_TO_MANY) { - $method = 'mapManyToMany'; - - $this->exportJoinTable($associationMapping['joinTable'], $lines); - } else { - $method = 'mapOneToMany'; - } - - $lines[] = null; - $lines[] = '$metadata->' . $method . '(array('; - $lines[] = ' "fieldName" => "' . $associationMapping['fieldName'] . '",'; - $lines[] = ' "targetEntity" => "' . $associationMapping['targetEntity'] . '",'; - $lines[] = ' "fetch" => "' . $associationMapping['fetch'] . '",'; - $lines[] = ' "mappedBy" => "' . $associationMapping['mappedBy'] . '",'; - $lines[] = ' "inversedBy" => "' . $associationMapping['inversedBy'] . '",'; - $lines[] = ' "orderBy" => ' . $this->varExport($associationMapping['orderBy']) . ','; - - if ($associationMapping['type'] === ClassMetadata::MANY_TO_MANY) { - $lines[] = ' "joinTable" => $joinTable,'; - } - - $lines[] = ' "cascade" => ' . $this->varExport($cascade) . ','; - $lines[] = ' "orphanRemoval" => ' . $this->varExport($associationMapping['orphanRemoval']) . ','; - $lines[] = '));'; - break; + if ($association instanceof OneToOneAssociationMetadata) { + $method = 'mapOneToOne'; + + $this->exportJoinColumns($association->getJoinColumns(), $lines, 'joinColumns'); + + $lines[] = '$association = new Mapping\OneToOneAssociationMetadata("' . $association->getName() . '");'; + $lines[] = null; + $lines[] = '$association->setJoinColumns($joinColumns);'; + } else if ($association instanceof ManyToOneAssociationMetadata) { + $method = 'mapManyToOne'; + + $this->exportJoinColumns($association->getJoinColumns(), $lines, 'joinColumns'); + + $lines[] = '$association = new Mapping\ManyToOneAssociationMetadata("' . $association->getName() . '");'; + $lines[] = null; + $lines[] = '$association->setJoinColumns($joinColumns);'; + } else if ($association instanceof OneToManyAssociationMetadata) { + $method = 'mapOneToMany'; + + $lines[] = '$association = new Mapping\OneToManyAssociationMetadata("' . $association->getName() . '");'; + $lines[] = null; + $lines[] = '$association->setOrderBy(' . $this->varExport($association->getOrderBy()) . ');'; + } else if ($association instanceof ManyToManyAssociationMetadata) { + $method = 'mapManyToMany'; + + if ($association->getJoinTable()) { + $this->exportJoinTable($association->getJoinTable(), $lines); + } + + $lines[] = '$association = new Mapping\ManyToManyAssociationMetadata("' . $association->getName() . '");'; + $lines[] = null; + + if ($association->getJoinTable()) { + $lines[] = '$association->setJoinTable($joinTable);'; + } + + if ($association->getIndexedBy()) { + $lines[] = '$association->setIndexedBy("' . $association->getIndexedBy() . '");'; + } + + $lines[] = '$association->setOrderBy(' . $this->varExport($association->getOrderBy()) . ');'; + } + + $lines[] = '$association->setTargetEntity("' . $association->getTargetEntity() . '");'; + $lines[] = '$association->setFetchMode("' . $association->getFetchMode() . '");'; + + if ($association->getMappedBy()) { + $lines[] = '$association->setMappedBy("' . $association->getMappedBy() . '");'; + } + + if ($association->getInversedBy()) { + $lines[] = '$association->setInversedBy("' . $association->getInversedBy() . '");'; } + + $lines[] = '$association->setCascade(' . $this->varExport($cascade) . ');'; + $lines[] = '$association->setOrphanRemoval(' . $this->varExport($association->isOrphanRemoval()) . ');'; + $lines[] = '$association->setPrimaryKey(' . $this->varExport($association->isPrimaryKey()) . ');'; + $lines[] = null; + $lines[] = '$metadata->' . $method . '($association);'; } - return implode("\n", $lines); + return implode(PHP_EOL, $lines); } private function exportJoinTable(JoinTableMetadata $joinTable, array &$lines) diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index ef13219f91b..4d502344296 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -19,11 +19,18 @@ namespace Doctrine\ORM\Tools\Export\Driver; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ChangeTrackingPolicy; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\JoinColumnMetadata; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ManyToOneAssociationMetadata; +use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; +use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; +use Doctrine\ORM\Mapping\ToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; /** * ClassMetadata exporter for Doctrine XML mapping files. @@ -178,19 +185,24 @@ public function exportClassMetadata(ClassMetadata $metadata) } } - /*foreach ($metadata->associationMappings as $name => $assoc) { - if (isset($assoc['id']) && $assoc['id']) { - $id[$name] = [ - 'fieldName' => $name, - 'associationKey' => true, - ]; + foreach ($metadata->associationMappings as $name => $association) { + if ($association->isPrimaryKey()) { + $id[$name] = $association; } - }*/ + } if ($id) { foreach ($id as $property) { - $idXml = $root->addChild('id'); + $idXml = $root->addChild('id'); + $idXml->addAttribute('name', $property->getName()); + + if ($property instanceof AssociationMetadata) { + $idXml->addAttribute('association-key', 'true'); + + continue; + } + $idXml->addAttribute('type', $property->getTypeName()); $idXml->addAttribute('column', $property->getColumnName()); @@ -198,10 +210,6 @@ public function exportClassMetadata(ClassMetadata $metadata) $idXml->addAttribute('length', $property->getLength()); } - /*if (isset($property['associationKey']) && $property['associationKey']) { - $idXml->addAttribute('association-key', 'true'); - }*/ - if ($metadata->generatorType) { $generatorXml = $idXml->addChild('generator'); @@ -261,198 +269,176 @@ public function exportClassMetadata(ClassMetadata $metadata) } $orderMap = [ - ClassMetadata::ONE_TO_ONE, - ClassMetadata::ONE_TO_MANY, - ClassMetadata::MANY_TO_ONE, - ClassMetadata::MANY_TO_MANY, + OneToOneAssociationMetadata::class, + OneToManyAssociationMetadata::class, + ManyToOneAssociationMetadata::class, + ManyToManyAssociationMetadata::class, ]; uasort($metadata->associationMappings, function($m1, $m2) use (&$orderMap){ - $a1 = array_search($m1['type'], $orderMap); - $a2 = array_search($m2['type'], $orderMap); + $a1 = array_search(get_class($m1), $orderMap); + $a2 = array_search(get_class($m2), $orderMap); return strcmp($a1, $a2); }); - foreach ($metadata->associationMappings as $associationMapping) { + foreach ($metadata->associationMappings as $association) { $associationMappingXml = null; - if ($associationMapping['type'] == ClassMetadata::ONE_TO_ONE) { + if ($association instanceof OneToOneAssociationMetadata) { $associationMappingXml = $root->addChild('one-to-one'); - } elseif ($associationMapping['type'] == ClassMetadata::MANY_TO_ONE) { - $associationMappingXml = $root->addChild('many-to-one'); - } elseif ($associationMapping['type'] == ClassMetadata::ONE_TO_MANY) { + } elseif ($association instanceof OneToManyAssociationMetadata) { $associationMappingXml = $root->addChild('one-to-many'); - } elseif ($associationMapping['type'] == ClassMetadata::MANY_TO_MANY) { + } elseif ($association instanceof ManyToOneAssociationMetadata) { + $associationMappingXml = $root->addChild('many-to-one'); + } elseif ($association instanceof ManyToManyAssociationMetadata) { $associationMappingXml = $root->addChild('many-to-many'); } - $associationMappingXml->addAttribute('field', $associationMapping['fieldName']); - $associationMappingXml->addAttribute('target-entity', $associationMapping['targetEntity']); + $associationMappingXml->addAttribute('field', $association->getName()); + $associationMappingXml->addAttribute('target-entity', $association->getTargetEntity()); + $associationMappingXml->addAttribute('fetch', $association->getFetchMode()); - if (isset($associationMapping['mappedBy'])) { - $associationMappingXml->addAttribute('mapped-by', $associationMapping['mappedBy']); - } + $this->exportCascade($associationMappingXml, $association->getCascade()); - if (isset($associationMapping['inversedBy'])) { - $associationMappingXml->addAttribute('inversed-by', $associationMapping['inversedBy']); + if ($association->getMappedBy()) { + $associationMappingXml->addAttribute('mapped-by', $association->getMappedBy()); } - if (isset($associationMapping['indexBy'])) { - $associationMappingXml->addAttribute('index-by', $associationMapping['indexBy']); + if ($association->getInversedBy()) { + $associationMappingXml->addAttribute('inversed-by', $association->getInversedBy()); } - if (isset($associationMapping['orphanRemoval']) && $associationMapping['orphanRemoval'] !== false) { + if ($association->isOrphanRemoval()) { $associationMappingXml->addAttribute('orphan-removal', 'true'); } - if (isset($associationMapping['fetch'])) { - $associationMappingXml->addAttribute('fetch', $associationMapping['fetch']); - } + if ($association instanceof ToManyAssociationMetadata) { + if ($association instanceof ManyToManyAssociationMetadata && $association->getJoinTable()) { + $joinTableXml = $associationMappingXml->addChild('join-table'); + $joinTable = $association->getJoinTable(); - $cascades = []; + $joinTableXml->addAttribute('name', $joinTable->getName()); - foreach (['remove', 'persist', 'refresh', 'merge', 'detach'] as $type) { - if (in_array($type, $associationMapping['cascade'])) { - $cascades[] = 'cascade-' . $type; + $this->exportJoinColumns($joinTableXml, $joinTable->getJoinColumns(), 'join-columns'); + $this->exportJoinColumns($joinTableXml, $joinTable->getInverseJoinColumns(), 'inverse-join-columns'); } - } - - if (count($cascades) === 5) { - $cascades = ['cascade-all']; - } - if ($cascades) { - $cascadeXml = $associationMappingXml->addChild('cascade'); - - foreach ($cascades as $type) { - $cascadeXml->addChild($type); + if ($association->getIndexedBy()) { + $associationMappingXml->addAttribute('index-by', $association->getIndexedBy()); } - } - - if (isset($associationMapping['joinTable'])) { - $joinTableXml = $associationMappingXml->addChild('join-table'); - - $joinTableXml->addAttribute('name', $associationMapping['joinTable']->getName()); - - $joinColumnsXml = $joinTableXml->addChild('join-columns'); - foreach ($associationMapping['joinTable']->getJoinColumns() as $joinColumn) { - /** @var JoinColumnMetadata $joinColumn */ - $joinColumnXml = $joinColumnsXml->addChild('join-column'); + if ($association->getOrderBy()) { + $orderByXml = $associationMappingXml->addChild('order-by'); - $joinColumnXml->addAttribute('name', $joinColumn->getColumnName()); - $joinColumnXml->addAttribute('referenced-column-name', $joinColumn->getReferencedColumnName()); + foreach ($association->getOrderBy() as $name => $direction) { + $orderByFieldXml = $orderByXml->addChild('order-by-field'); - if (! empty($joinColumn->getAliasedName())) { - $joinColumnXml->addAttribute('field-name', $joinColumn->getAliasedName()); - } - - if (! empty($joinColumn->getOnDelete())) { - $joinColumnXml->addAttribute('on-delete', $joinColumn->getOnDelete()); - } - - if (! empty($joinColumn->getColumnDefinition())) { - $joinColumnXml->addAttribute('column-definition', $joinColumn->getColumnDefinition()); - } - - if ($joinColumn->isNullable()) { - $joinColumnXml->addAttribute('nullable', $joinColumn->isNullable()); + $orderByFieldXml->addAttribute('name', $name); + $orderByFieldXml->addAttribute('direction', $direction); } + } + } - if ($joinColumn->isUnique()) { - $joinColumnXml->addAttribute('unique', $joinColumn->isUnique()); - } + if ($association instanceof ToOneAssociationMetadata) { + if ($association->getJoinColumns()) { + $this->exportJoinColumns($associationMappingXml, $association->getJoinColumns()); } + } + } - $inverseJoinColumnsXml = $joinTableXml->addChild('inverse-join-columns'); + if (isset($metadata->lifecycleCallbacks) && count($metadata->lifecycleCallbacks)>0) { + $lifecycleCallbacksXml = $root->addChild('lifecycle-callbacks'); - foreach ($associationMapping['joinTable']->getInverseJoinColumns() as $joinColumn) { - /** @var JoinColumnMetadata $joinColumn */ - $joinColumnXml = $inverseJoinColumnsXml->addChild('join-column'); + foreach ($metadata->lifecycleCallbacks as $name => $methods) { + foreach ($methods as $method) { + $lifecycleCallbackXml = $lifecycleCallbacksXml->addChild('lifecycle-callback'); - $joinColumnXml->addAttribute('name', $joinColumn->getColumnName()); - $joinColumnXml->addAttribute('referenced-column-name', $joinColumn->getReferencedColumnName()); + $lifecycleCallbackXml->addAttribute('type', $name); + $lifecycleCallbackXml->addAttribute('method', $method); + } + } + } - if (! empty($joinColumn->getAliasedName())) { - $joinColumnXml->addAttribute('field-name', $joinColumn->getAliasedName()); - } + return $this->asXml($xml); + } - if (! empty($joinColumn->getOnDelete())) { - $joinColumnXml->addAttribute('on-delete', $joinColumn->getOnDelete()); - } + /** + * @param \SimpleXMLElement $associationXml + * @param array $joinColumns + * @param string $joinColumnsName + */ + private function exportJoinColumns( + \SimpleXMLElement $associationXml, + array $joinColumns, + $joinColumnsName = 'join-columns' + ) + { + $joinColumnsXml = $associationXml->addChild($joinColumnsName); - if (! empty($joinColumn->getColumnDefinition())) { - $joinColumnXml->addAttribute('column-definition', $joinColumn->getColumnDefinition()); - } + foreach ($joinColumns as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ + $joinColumnXml = $joinColumnsXml->addChild('join-column'); - if ($joinColumn->isNullable()) { - $joinColumnXml->addAttribute('nullable', $joinColumn->isNullable()); - } + $joinColumnXml->addAttribute('name', $joinColumn->getColumnName()); + $joinColumnXml->addAttribute('referenced-column-name', $joinColumn->getReferencedColumnName()); - if ($joinColumn->isUnique()) { - $joinColumnXml->addAttribute('unique', $joinColumn->isUnique()); - } - } + if (! empty($joinColumn->getAliasedName())) { + $joinColumnXml->addAttribute('field-name', $joinColumn->getAliasedName()); } - if (isset($associationMapping['joinColumns'])) { - $joinColumnsXml = $associationMappingXml->addChild('join-columns'); - - foreach ($associationMapping['joinColumns'] as $joinColumn) { - /** @var JoinColumnMetadata $joinColumn */ - $joinColumnXml = $joinColumnsXml->addChild('join-column'); + if (! empty($joinColumn->getOnDelete())) { + $joinColumnXml->addAttribute('on-delete', $joinColumn->getOnDelete()); + } - $joinColumnXml->addAttribute('name', $joinColumn->getColumnName()); - $joinColumnXml->addAttribute('referenced-column-name', $joinColumn->getReferencedColumnName()); + if (! empty($joinColumn->getColumnDefinition())) { + $joinColumnXml->addAttribute('column-definition', $joinColumn->getColumnDefinition()); + } - if (! empty($joinColumn->getAliasedName())) { - $joinColumnXml->addAttribute('field-name', $joinColumn->getAliasedName()); - } + if ($joinColumn->isNullable()) { + $joinColumnXml->addAttribute('nullable', $joinColumn->isNullable()); + } - if (! empty($joinColumn->getOnDelete())) { - $joinColumnXml->addAttribute('on-delete', $joinColumn->getOnDelete()); - } + if ($joinColumn->isUnique()) { + $joinColumnXml->addAttribute('unique', $joinColumn->isUnique()); + } - if (! empty($joinColumn->getColumnDefinition())) { - $joinColumnXml->addAttribute('column-definition', $joinColumn->getColumnDefinition()); - } + if ($joinColumn->getOptions()) { + $optionsXml = $joinColumnXml->addChild('options'); - if ($joinColumn->isNullable()) { - $joinColumnXml->addAttribute('nullable', $joinColumn->isNullable()); - } + foreach ($joinColumn->getOptions() as $key => $value) { + $optionXml = $optionsXml->addChild('option', $value); - if ($joinColumn->isUnique()) { - $joinColumnXml->addAttribute('unique', $joinColumn->isUnique()); - } + $optionXml->addAttribute('name', $key); } } + } + } - if (isset($associationMapping['orderBy'])) { - $orderByXml = $associationMappingXml->addChild('order-by'); - - foreach ($associationMapping['orderBy'] as $name => $direction) { - $orderByFieldXml = $orderByXml->addChild('order-by-field'); + /** + * @param \SimpleXMLElement $associationXml + * @param array $associationCascades + */ + private function exportCascade(\SimpleXMLElement $associationXml, array $associationCascades) + { + $cascades = []; - $orderByFieldXml->addAttribute('name', $name); - $orderByFieldXml->addAttribute('direction', $direction); - } + foreach (['remove', 'persist', 'refresh', 'merge', 'detach'] as $type) { + if (in_array($type, $associationCascades)) { + $cascades[] = 'cascade-' . $type; } } - if (isset($metadata->lifecycleCallbacks) && count($metadata->lifecycleCallbacks)>0) { - $lifecycleCallbacksXml = $root->addChild('lifecycle-callbacks'); + if (count($cascades) === 5) { + $cascades = ['cascade-all']; + } - foreach ($metadata->lifecycleCallbacks as $name => $methods) { - foreach ($methods as $method) { - $lifecycleCallbackXml = $lifecycleCallbacksXml->addChild('lifecycle-callback'); + if ($cascades) { + $cascadeXml = $associationXml->addChild('cascade'); - $lifecycleCallbackXml->addAttribute('type', $name); - $lifecycleCallbackXml->addAttribute('method', $method); - } + foreach ($cascades as $type) { + $cascadeXml->addChild($type); } } - - return $this->asXml($xml); } /** diff --git a/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php index 145bb2d720a..c7a9cff373c 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php @@ -128,7 +128,8 @@ public function walkSelectStatement(SelectStatement $AST) if (isset($rootClass->associationMappings[$identifier])) { $association = $rootClass->associationMappings[$identifier]; - $joinColumn = reset($association['joinColumns']); + $joinColumns = $association->getJoinColumns(); + $joinColumn = reset($joinColumns); foreach (array_keys($this->rsm->metaMappings, $joinColumn->getColumnName()) as $alias) { if ($this->rsm->columnOwnerMap[$alias] === $rootAlias) { diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php index 3588c2f6172..edd3d4058c6 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php @@ -547,7 +547,8 @@ private function getSQLIdentifier(SelectStatement $AST) if (isset($rootClass->associationMappings[$identifier])) { $association = $rootClass->associationMappings[$identifier]; - $joinColumn = reset($association['joinColumns']); + $joinColumns = $association->getJoinColumns(); + $joinColumn = reset($joinColumns); foreach (array_keys($this->rsm->metaMappings, $joinColumn->getColumnName()) as $alias) { if ($this->rsm->columnOwnerMap[$alias] === $rootAlias) { diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php index a48ffc22ece..b61d0266061 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php @@ -21,6 +21,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ToManyAssociationMetadata; use Doctrine\ORM\Query; use Doctrine\ORM\Query\TreeWalkerAdapter; use Doctrine\ORM\Query\AST\Functions\IdentityFunction; @@ -135,20 +136,20 @@ private function validate(SelectStatement $AST) $from = $AST->fromClause->identificationVariableDeclarations; $fromRoot = reset($from); - if ($query instanceof Query - && $query->getMaxResults() - && $AST->orderByClause - && count($fromRoot->joins)) { + if ($query instanceof Query && $query->getMaxResults() && $AST->orderByClause && count($fromRoot->joins)) { // Check each orderby item. // TODO: check complex orderby items too... foreach ($AST->orderByClause->orderByItems as $orderByItem) { $expression = $orderByItem->expression; - if ($orderByItem->expression instanceof PathExpression - && isset($queryComponents[$expression->identificationVariable])) { + + if ($expression instanceof PathExpression && isset($queryComponents[$expression->identificationVariable])) { $queryComponent = $queryComponents[$expression->identificationVariable]; - if (isset($queryComponent['parent']) - && $queryComponent['relation']['type'] & ClassMetadata::TO_MANY) { - throw new \RuntimeException("Cannot select distinct identifiers from query with LIMIT and ORDER BY on a column from a fetch joined to-many association. Use output walkers."); + + if (isset($queryComponent['parent']) && $queryComponent['relation'] instanceof ToManyAssociationMetadata) { + throw new \RuntimeException( + "Cannot select distinct identifiers from query with LIMIT and ORDER BY on a column from a " + . "fetch joined to-many association. Use output walkers." + ); } } } diff --git a/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php b/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php index f415ea128ce..c44233fe173 100644 --- a/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php +++ b/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php @@ -21,6 +21,7 @@ use Doctrine\ORM\Event\LoadClassMetadataEventArgs; use Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Common\EventSubscriber; use Doctrine\ORM\Events; @@ -57,14 +58,12 @@ public function getSubscribedEvents() * * @param string $originalEntity * @param string $newEntity - * @param array $mapping * * @return void */ - public function addResolveTargetEntity($originalEntity, $newEntity, array $mapping) + public function addResolveTargetEntity($originalEntity, $newEntity) { - $mapping['targetEntity'] = ltrim($newEntity, "\\"); - $this->resolveTargetEntities[ltrim($originalEntity, "\\")] = $mapping; + $this->resolveTargetEntities[ltrim($originalEntity, "\\")] = ltrim($newEntity, "\\"); } /** @@ -77,11 +76,10 @@ public function addResolveTargetEntity($originalEntity, $newEntity, array $mappi public function onClassMetadataNotFound(OnClassMetadataNotFoundEventArgs $args) { if (array_key_exists($args->getClassName(), $this->resolveTargetEntities)) { - $args->setFoundMetadata( - $args - ->getObjectManager() - ->getClassMetadata($this->resolveTargetEntities[$args->getClassName()]['targetEntity']) - ); + $resolvedClassName = $this->resolveTargetEntities[$args->getClassName()]; + $resolvedMetadata = $args->getObjectManager()->getClassMetadata($resolvedClassName); + + $args->setFoundMetadata($resolvedMetadata); } } @@ -97,48 +95,41 @@ public function onClassMetadataNotFound(OnClassMetadataNotFoundEventArgs $args) public function loadClassMetadata(LoadClassMetadataEventArgs $args) { /* @var $cm \Doctrine\ORM\Mapping\ClassMetadata */ - $cm = $args->getClassMetadata(); + $class = $args->getClassMetadata(); + + foreach ($class->discriminatorMap as $key => $className) { + if (isset($this->resolveTargetEntities[$className])) { + $targetEntity = $this->resolveTargetEntities[$className]; + + $class->discriminatorMap[$key] = $targetEntity; + } + } + + foreach ($class->associationMappings as $association) { + if (isset($this->resolveTargetEntities[$association->getTargetEntity()])) { + $targetEntity = $this->resolveTargetEntities[$association->getTargetEntity()]; - foreach ($cm->associationMappings as $mapping) { - if (isset($this->resolveTargetEntities[$mapping['targetEntity']])) { - $this->remapAssociation($cm, $mapping); + $association->setTargetEntity($targetEntity); } } - foreach ($this->resolveTargetEntities as $interface => $data) { - if ($data['targetEntity'] == $cm->getName()) { - $args->getEntityManager()->getMetadataFactory()->setMetadataFor($interface, $cm); + foreach ($this->resolveTargetEntities as $interface => $targetEntity) { + if ($targetEntity === $class->getName()) { + $args->getEntityManager()->getMetadataFactory()->setMetadataFor($interface, $class); } } } /** - * @param ClassMetadata $classMetadata - * @param array $mapping + * @param ClassMetadata $classMetadata + * @param AssociationMetadata $association * * @return void */ - private function remapAssociation(ClassMetadata $classMetadata, $mapping) + private function remapAssociation(ClassMetadata $classMetadata, AssociationMetadata $association) { - $newMapping = $this->resolveTargetEntities[$mapping['targetEntity']]; - $newMapping = array_replace_recursive($mapping, $newMapping); - $newMapping['fieldName'] = $mapping['fieldName']; + $associationOverride = $this->resolveTargetEntities[$association->getTargetEntity()]; - unset($classMetadata->associationMappings[$mapping['fieldName']]); - - switch ($mapping['type']) { - case ClassMetadata::MANY_TO_MANY: - $classMetadata->mapManyToMany($newMapping); - break; - case ClassMetadata::MANY_TO_ONE: - $classMetadata->mapManyToOne($newMapping); - break; - case ClassMetadata::ONE_TO_MANY: - $classMetadata->mapOneToMany($newMapping); - break; - case ClassMetadata::ONE_TO_ONE: - $classMetadata->mapOneToOne($newMapping); - break; - } + $classMetadata->setAssociationOverride($associationOverride); } } diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 8f7a4f0999d..2930dec6788 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -31,6 +31,9 @@ use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\InheritanceType; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; +use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\ORMException; use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs; use Doctrine\ORM\Tools\Event\GenerateSchemaTableEventArgs; @@ -270,9 +273,9 @@ public function getSchemaFromMetadata(array $classes) if (isset($class->associationMappings[$identifierField])) { /** @var array $assoc */ - $assoc = $class->associationMappings[$identifierField]; + $association = $class->associationMappings[$identifierField]; - foreach ($assoc['joinColumns'] as $joinColumn) { + foreach ($association->getJoinColumns() as $joinColumn) { $pkColumns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); } } @@ -531,59 +534,70 @@ private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Tabl */ private function gatherRelationsSql($class, $table, $schema, &$addedFks, &$blacklistedFks) { - foreach ($class->associationMappings as $mapping) { - if (isset($mapping['inherited'])) { + foreach ($class->associationMappings as $fieldName => $property) { + if ($class->isInheritedAssociation($fieldName) && ! $property->getDeclaringClass()->isMappedSuperclass) { continue; } - $foreignClass = $this->em->getClassMetadata($mapping['targetEntity']); + if (! $property->isOwningSide()) { + continue; + } - if ($mapping['type'] & ClassMetadata::TO_ONE && $mapping['isOwningSide']) { - $primaryKeyColumns = []; // PK is unnecessary for this relation-type + $foreignClass = $this->em->getClassMetadata($property->getTargetEntity()); - $this->gatherRelationJoinColumns( - $mapping['joinColumns'], - $table, - $foreignClass, - $mapping, - $primaryKeyColumns, - $addedFks, - $blacklistedFks - ); - } elseif ($mapping['type'] == ClassMetadata::ONE_TO_MANY && $mapping['isOwningSide']) { - //... create join table, one-many through join table supported later - throw ORMException::notSupported(); - } elseif ($mapping['type'] == ClassMetadata::MANY_TO_MANY && $mapping['isOwningSide']) { - // create join table - $joinTable = $mapping['joinTable']; - $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); - $theJoinTable = $schema->createTable($joinTableName); - - $primaryKeyColumns = []; - - // Build first FK constraint (relation table => source table) - $this->gatherRelationJoinColumns( - $joinTable->getJoinColumns(), - $theJoinTable, - $class, - $mapping, - $primaryKeyColumns, - $addedFks, - $blacklistedFks - ); + switch (true) { + case ($property instanceof ToOneAssociationMetadata): + $primaryKeyColumns = []; // PK is unnecessary for this relation-type - // Build second FK constraint (relation table => target table) - $this->gatherRelationJoinColumns( - $joinTable->getInverseJoinColumns(), - $theJoinTable, - $foreignClass, - $mapping, - $primaryKeyColumns, - $addedFks, - $blacklistedFks - ); + $this->gatherRelationJoinColumns( + $property->getJoinColumns(), + $table, + $foreignClass, + $property, + $primaryKeyColumns, + $addedFks, + $blacklistedFks + ); - $theJoinTable->setPrimaryKey($primaryKeyColumns); + break; + + case ($property instanceof OneToManyAssociationMetadata): + //... create join table, one-many through join table supported later + throw ORMException::notSupported(); + + case ($property instanceof ManyToManyAssociationMetadata): + // create join table + $joinTable = $property->getJoinTable(); + $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); + $theJoinTable = $schema->createTable($joinTableName); + + $primaryKeyColumns = []; + + // Build first FK constraint (relation table => source table) + $this->gatherRelationJoinColumns( + $joinTable->getJoinColumns(), + $theJoinTable, + $class, + $property, + $primaryKeyColumns, + $addedFks, + $blacklistedFks + ); + + // Build second FK constraint (relation table => target table) + $this->gatherRelationJoinColumns( + $joinTable->getInverseJoinColumns(), + $theJoinTable, + $foreignClass, + $property, + $primaryKeyColumns, + $addedFks, + $blacklistedFks + ); + + $theJoinTable->setPrimaryKey($primaryKeyColumns); + + break; } } } @@ -625,16 +639,17 @@ private function getDefiningClass($class, $referencedColumnName) continue; } - $association = $class->getAssociationMapping($fieldName); + $association = $class->associationMappings[$fieldName]; + $joinColumns = $association->getJoinColumns(); - if (count($association['joinColumns']) > 1) { + if (count($joinColumns) > 1) { throw MappingException::noSingleAssociationJoinColumnFound($class->name, $fieldName); } - $joinColumn = reset($association['joinColumns']); + $joinColumn = reset($joinColumns); if ($joinColumn->getColumnName() === $referencedColumnName) { - $targetEntity = $this->em->getClassMetadata($association['targetEntity']); + $targetEntity = $this->em->getClassMetadata($association->getTargetEntity()); return $this->getDefiningClass($targetEntity, $joinColumn->getReferencedColumnName()); } diff --git a/lib/Doctrine/ORM/Tools/SchemaValidator.php b/lib/Doctrine/ORM/Tools/SchemaValidator.php index 57adac827ae..229d30344c3 100644 --- a/lib/Doctrine/ORM/Tools/SchemaValidator.php +++ b/lib/Doctrine/ORM/Tools/SchemaValidator.php @@ -20,8 +20,15 @@ namespace Doctrine\ORM\Tools; use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ManyToOneAssociationMetadata; +use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; +use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; +use Doctrine\ORM\Mapping\ToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; /** * Performs strict validation of the mapping schema @@ -86,185 +93,235 @@ public function validateMapping() public function validateClass(ClassMetadata $class) { $ce = []; - $cmf = $this->em->getMetadataFactory(); - foreach ($class->associationMappings as $fieldName => $assoc) { - if (!class_exists($assoc['targetEntity']) || $cmf->isTransient($assoc['targetEntity'])) { - $ce[] = "The target entity '" . $assoc['targetEntity'] . "' specified on " . $class->name . '#' . $fieldName . ' is unknown or not an entity.'; + foreach ($class->associationMappings as $fieldName => $association) { + $ce = array_merge($ce, $this->validateAssociation($class, $association)); + } + + foreach ($class->subClasses as $subClass) { + if (!in_array($class->name, class_parents($subClass))) { + $message = "According to the discriminator map class, '%s' has to be a child of '%s', but these entities are not related through inheritance."; - return $ce; + $ce[] = sprintf($message, $subClass, $class->name); } + } + + return $ce; + } + + /** + * @param ClassMetadata $class + * @param AssociationMetadata $association + * + * @return array + */ + private function validateAssociation(ClassMetadata $class, AssociationMetadata $association) + { + $metadataFactory = $this->em->getMetadataFactory(); + $fieldName = $association->getName(); + $targetEntity = $association->getTargetEntity(); + + if (!class_exists($targetEntity) || $metadataFactory->isTransient($targetEntity)) { + $message = "The target entity '%s' specified on %s#%s is unknown or not an entity."; + + return [ + sprintf($message, $targetEntity, $class->name, $fieldName) + ]; + } - if ($assoc['mappedBy'] && $assoc['inversedBy']) { - $ce[] = "The association " . $class . "#" . $fieldName . " cannot be defined as both inverse and owning."; + $mappedBy = $association->getMappedBy(); + $inversedBy = $association->getInversedBy(); + + $ce = []; + + if ($mappedBy && $inversedBy) { + $message = 'The association %s#%s cannot be defined as both inverse and owning.'; + + $ce[] = sprintf($message, $class, $fieldName); + } + + /** @var ClassMetadata $targetMetadata */ + $targetMetadata = $metadataFactory->getMetadataFor($targetEntity); + $containsForeignId = array_filter($targetMetadata->identifier, function ($identifier) use ($targetMetadata) { + return isset($targetMetadata->associationMappings[$identifier]); + }); + + if ($association->isPrimaryKey() && count($containsForeignId)) { + $message = "Cannot map association %s#%s as identifier, because the target entity '%s' also maps an association as identifier."; + + $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity); + } + + if ($mappedBy) { + if ($targetMetadata->hasField($mappedBy)) { + $message = "The association %s#%s refers to the owning side property %s#%s which is not defined as association, but as field."; + + $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $mappedBy); + } else if (! $targetMetadata->hasAssociation($mappedBy)) { + $message = "The association %s#%s refers to the owning side property %s#%s which does not exist."; + + $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $mappedBy); + } else if ($targetMetadata->associationMappings[$mappedBy]->getInversedBy() === null) { + $message = "The property %s#%s is on the inverse side of a bi-directional relationship, but the " + . "specified mappedBy association on the target-entity %s#%s does not contain the required 'inversedBy=\"%s\"' attribute."; + + $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $mappedBy, $fieldName); + } else if ($targetMetadata->associationMappings[$mappedBy]->getInversedBy() !== $fieldName) { + $message = "The mapping between %s#%s and %s#%s are inconsistent with each other."; + + $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $mappedBy); } + } + + if ($inversedBy) { + if ($targetMetadata->hasField($inversedBy)) { + $message = "The association %s#%s refers to the inverse side property %s#%s which is not defined as association, but as field."; + + $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $inversedBy); + } else if (!$targetMetadata->hasAssociation($inversedBy)) { + $message = "The association %s#%s refers to the inverse side property %s#%s which does not exist."; + + $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $inversedBy); + } elseif ($targetMetadata->associationMappings[$inversedBy]->getMappedBy() === null) { + $message = "The property %s#%s is on the owning side of a bi-directional relationship, but the " + . "specified mappedBy association on the target-entity %s#%s does not contain the required 'inversedBy=\"%s\"' attribute."; - /** @var ClassMetadata $targetmetadata */ - $targetMetadata = $cmf->getMetadataFor($assoc['targetEntity']); - $containsForeignId = array_filter($targetMetadata->identifier, function ($identifier) use ($targetMetadata) { - return isset($targetMetadata->associationMappings[$identifier]); - }); + $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $mappedBy, $fieldName); + } elseif ($targetMetadata->associationMappings[$inversedBy]->getMappedBy() !== $fieldName) { + $message = "The mapping between %s#%s and %s#%s are inconsistent with each other."; - if (isset($assoc['id']) && count($containsForeignId)) { - $ce[] = "Cannot map association '" . $class->name. "#". $fieldName ." as identifier, because " . - "the target entity '". $targetMetadata->name . "' also maps an association as identifier."; + $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $inversedBy); } - if ($assoc['mappedBy']) { - if ($targetMetadata->hasField($assoc['mappedBy'])) { - $ce[] = "The association " . $class->name . "#" . $fieldName . " refers to the owning side ". - "field " . $assoc['targetEntity'] . "#" . $assoc['mappedBy'] . " which is not defined as association, but as field."; - } - if (!$targetMetadata->hasAssociation($assoc['mappedBy'])) { - $ce[] = "The association " . $class->name . "#" . $fieldName . " refers to the owning side ". - "field " . $assoc['targetEntity'] . "#" . $assoc['mappedBy'] . " which does not exist."; - } elseif ($targetMetadata->associationMappings[$assoc['mappedBy']]['inversedBy'] == null) { - $ce[] = "The field " . $class->name . "#" . $fieldName . " is on the inverse side of a ". - "bi-directional relationship, but the specified mappedBy association on the target-entity ". - $assoc['targetEntity'] . "#" . $assoc['mappedBy'] . " does not contain the required ". - "'inversedBy=\"" . $fieldName . "\"' attribute."; - } elseif ($targetMetadata->associationMappings[$assoc['mappedBy']]['inversedBy'] != $fieldName) { - $ce[] = "The mappings " . $class->name . "#" . $fieldName . " and " . - $assoc['targetEntity'] . "#" . $assoc['mappedBy'] . " are ". - "inconsistent with each other."; + // Verify inverse side/owning side match each other + if (array_key_exists($inversedBy, $targetMetadata->associationMappings)) { + $targetAssociation = $targetMetadata->associationMappings[$inversedBy]; + + if ($association instanceof OneToOneAssociationMetadata && ! $targetAssociation instanceof OneToOneAssociationMetadata) { + $message = "If association %s#%s is one-to-one, then the inversed side %s#%s has to be one-to-one as well."; + + $ce[] = sprintf($message, $class->name, $fieldName, $targetMetadata->name, $inversedBy); + } else if ($association instanceof ManyToOneAssociationMetadata && ! $targetAssociation instanceof OneToManyAssociationMetadata) { + $message = "If association %s#%s is many-to-one, then the inversed side %s#%s has to be one-to-many."; + + $ce[] = sprintf($message, $class->name, $fieldName, $targetMetadata->name, $inversedBy); + } else if ($association instanceof ManyToManyAssociationMetadata && ! $targetAssociation instanceof ManyToManyAssociationMetadata) { + $message = "If association %s#%s is many-to-many, then the inversed side %s#%s has to be many-to-many as well."; + + $ce[] = sprintf($message, $class->name, $fieldName, $targetMetadata->name, $inversedBy); } } + } - if ($assoc['inversedBy']) { - if ($targetMetadata->hasField($assoc['inversedBy'])) { - $ce[] = "The association " . $class->name . "#" . $fieldName . " refers to the inverse side ". - "field " . $assoc['targetEntity'] . "#" . $assoc['inversedBy'] . " which is not defined as association."; - } + if ($association->isOwningSide()) { + if ($association instanceof ManyToManyAssociationMetadata) { + $classIdentifierColumns = array_keys($class->getIdentifierColumns($this->em)); + $targetIdentifierColumns = array_keys($targetMetadata->getIdentifierColumns($this->em)); + $joinTable = $association->getJoinTable(); - if (!$targetMetadata->hasAssociation($assoc['inversedBy'])) { - $ce[] = "The association " . $class->name . "#" . $fieldName . " refers to the inverse side ". - "field " . $assoc['targetEntity'] . "#" . $assoc['inversedBy'] . " which does not exist."; - } elseif ($targetMetadata->associationMappings[$assoc['inversedBy']]['mappedBy'] == null) { - $ce[] = "The field " . $class->name . "#" . $fieldName . " is on the owning side of a ". - "bi-directional relationship, but the specified mappedBy association on the target-entity ". - $assoc['targetEntity'] . "#" . $assoc['mappedBy'] . " does not contain the required ". - "'inversedBy' attribute."; - } elseif ($targetMetadata->associationMappings[$assoc['inversedBy']]['mappedBy'] != $fieldName) { - $ce[] = "The mappings " . $class->name . "#" . $fieldName . " and " . - $assoc['targetEntity'] . "#" . $assoc['inversedBy'] . " are ". - "inconsistent with each other."; - } + foreach ($joinTable->getJoinColumns() as $joinColumn) { + if (! in_array($joinColumn->getReferencedColumnName(), $classIdentifierColumns)) { + $message = "The referenced column name '%s' has to be a primary key column on the target entity class '%s'."; - // Verify inverse side/owning side match each other - if (array_key_exists($assoc['inversedBy'], $targetMetadata->associationMappings)) { - $targetAssoc = $targetMetadata->associationMappings[$assoc['inversedBy']]; - if ($assoc['type'] == ClassMetadata::ONE_TO_ONE && $targetAssoc['type'] !== ClassMetadata::ONE_TO_ONE) { - $ce[] = "If association " . $class->name . "#" . $fieldName . " is one-to-one, then the inversed " . - "side " . $targetMetadata->name . "#" . $assoc['inversedBy'] . " has to be one-to-one as well."; - } elseif ($assoc['type'] == ClassMetadata::MANY_TO_ONE && $targetAssoc['type'] !== ClassMetadata::ONE_TO_MANY) { - $ce[] = "If association " . $class->name . "#" . $fieldName . " is many-to-one, then the inversed " . - "side " . $targetMetadata->name . "#" . $assoc['inversedBy'] . " has to be one-to-many."; - } elseif ($assoc['type'] == ClassMetadata::MANY_TO_MANY && $targetAssoc['type'] !== ClassMetadata::MANY_TO_MANY) { - $ce[] = "If association " . $class->name . "#" . $fieldName . " is many-to-many, then the inversed " . - "side " . $targetMetadata->name . "#" . $assoc['inversedBy'] . " has to be many-to-many as well."; + $ce[] = sprintf($message, $joinColumn->getReferencedColumnName(), $class->name); + break; } } - } - if ($assoc['isOwningSide']) { - if ($assoc['type'] == ClassMetadata::MANY_TO_MANY) { - $classIdentifierColumns = array_keys($class->getIdentifierColumns($this->em)); - $targetIdentifierColumns = array_keys($targetMetadata->getIdentifierColumns($this->em)); - - foreach ($assoc['joinTable']->getJoinColumns() as $joinColumn) { - if (!in_array($joinColumn->getReferencedColumnName(), $classIdentifierColumns)) { - $ce[] = "The referenced column name '" . $joinColumn->getReferencedColumnName() . "' " . - "has to be a primary key column on the target entity class '".$class->name."'."; - break; - } - } + foreach ($joinTable->getInverseJoinColumns() as $inverseJoinColumn) { + if (! in_array($inverseJoinColumn->getReferencedColumnName(), $targetIdentifierColumns)) { + $message = "The referenced column name '%s' has to be a primary key column on the target entity class '%s'."; - foreach ($assoc['joinTable']->getInverseJoinColumns() as $inverseJoinColumn) { - if (!in_array($inverseJoinColumn->getReferencedColumnName(), $targetIdentifierColumns)) { - $ce[] = "The referenced column name '" . $joinColumn->getReferencedColumnName() . "' " . - "has to be a primary key column on the target entity class '".$targetMetadata->name."'."; - break; - } + $ce[] = sprintf($message, $joinColumn->getReferencedColumnName(), $targetMetadata->name); + break; } + } - if (count($targetIdentifierColumns) !== count($assoc['joinTable']->getInverseJoinColumns())) { - $columnNames = array_map( - function (JoinColumnMetadata $joinColumn) { - return $joinColumn->getReferencedColumnName(); - }, - $assoc['joinTable']->getInverseJoinColumns() - ); - - $ce[] = "The inverse join columns of the many-to-many table '" . $assoc['joinTable']->getName() . "' " . - "have to contain to ALL identifier columns of the target entity '". $targetMetadata->name . "', " . - "however '" . implode(", ", array_diff($targetIdentifierColumns, $columnNames)) . - "' are missing."; - } + if (count($targetIdentifierColumns) !== count($joinTable->getInverseJoinColumns())) { + $columnNames = array_map( + function (JoinColumnMetadata $joinColumn) { + return $joinColumn->getReferencedColumnName(); + }, + $joinTable->getInverseJoinColumns() + ); - if (count($classIdentifierColumns) !== count($assoc['joinTable']->getJoinColumns())) { - $columnNames = array_map( - function (JoinColumnMetadata $joinColumn) { - return $joinColumn->getReferencedColumnName(); - }, - $assoc['joinTable']->getJoinColumns() - ); - - $ce[] = "The join columns of the many-to-many table '" . $assoc['joinTable']->getName() . "' " . - "have to contain to ALL identifier columns of the source entity '". $class->name . "', " . - "however '" . implode(", ", array_diff($classIdentifierColumns, $columnNames)) . - "' are missing."; - } + $columnString = implode("', '", array_diff($targetIdentifierColumns, $columnNames)); + $message = "The inverse join columns of the many-to-many table '%s' have to contain to ALL " + . "identifier columns of the target entity '%s', however '%s' are missing."; - } elseif ($assoc['type'] & ClassMetadata::TO_ONE) { - $identifierColumns = array_keys($targetMetadata->getIdentifierColumns($this->em)); + $ce[] = sprintf($message, $joinTable->getName(), $targetMetadata->name, $columnString); + } - foreach ($assoc['joinColumns'] as $joinColumn) { - if (!in_array($joinColumn->getReferencedColumnName(), $identifierColumns)) { - $ce[] = "The referenced column name '" . $joinColumn->getReferencedColumnName() . "' " . - "has to be a primary key column on the target entity class '".$targetMetadata->name."'."; - } - } + if (count($classIdentifierColumns) !== count($joinTable->getJoinColumns())) { + $columnNames = array_map( + function (JoinColumnMetadata $joinColumn) { + return $joinColumn->getReferencedColumnName(); + }, + $joinTable->getJoinColumns() + ); + + $columnString = implode("', '", array_diff($classIdentifierColumns, $columnNames)); + $message = "The join columns of the many-to-many table '%s' have to contain to ALL " + . "identifier columns of the source entity '%s', however '%s' are missing."; - if (count($identifierColumns) !== count($assoc['joinColumns'])) { - $ids = []; + $ce[] = sprintf($message, $joinTable->getName(), $class->name, $columnString); + } + } else if ($association instanceof ToOneAssociationMetadata) { + $identifierColumns = array_keys($targetMetadata->getIdentifierColumns($this->em)); + $joinColumns = $association->getJoinColumns(); - foreach ($assoc['joinColumns'] as $joinColumn) { - $ids[] = $joinColumn->getColumnName(); - } + foreach ($joinColumns as $joinColumn) { + if (!in_array($joinColumn->getReferencedColumnName(), $identifierColumns)) { + $message = "The referenced column name '%s' has to be a primary key column on the target entity class '%s'."; - $ce[] = "The join columns of the association '" . $assoc['fieldName'] . "' " . - "have to match to ALL identifier columns of the target entity '". $targetMetadata->name . "', " . - "however '" . implode(", ", array_diff($identifierColumns, $ids)) . - "' are missing."; + $ce[] = sprintf($message, $joinColumn->getReferencedColumnName(), $targetMetadata->name); } } - } - if (isset($assoc['orderBy']) && $assoc['orderBy'] !== null) { - foreach ($assoc['orderBy'] as $orderField => $orientation) { - if (!$targetMetadata->hasField($orderField) && !$targetMetadata->hasAssociation($orderField)) { - $ce[] = "The association " . $class->name."#".$fieldName." is ordered by a foreign field " . - $orderField . " that is not a field on the target entity " . $targetMetadata->name . "."; - continue; - } - if ($targetMetadata->isCollectionValuedAssociation($orderField)) { - $ce[] = "The association " . $class->name."#".$fieldName." is ordered by a field " . - $orderField . " on " . $targetMetadata->name . " that is a collection-valued association."; - continue; - } - if ($targetMetadata->isAssociationInverseSide($orderField)) { - $ce[] = "The association " . $class->name."#".$fieldName." is ordered by a field " . - $orderField . " on " . $targetMetadata->name . " that is the inverse side of an association."; - continue; + if (count($identifierColumns) !== count($joinColumns)) { + $ids = []; + + foreach ($joinColumns as $joinColumn) { + $ids[] = $joinColumn->getColumnName(); } + + $columnString = implode("', '", array_diff($identifierColumns, $ids)); + $message = "The join columns of the association '%s' have to match to ALL " + . "identifier columns of the target entity '%s', however '%s' are missing."; + + $ce[] = sprintf($message, $fieldName, $targetMetadata->name, $columnString); } } } - foreach ($class->subClasses as $subClass) { - if (!in_array($class->name, class_parents($subClass))) { - $ce[] = "According to the discriminator map class '" . $subClass . "' has to be a child ". - "of '" . $class->name . "' but these entities are not related through inheritance."; + if ($association instanceof ToManyAssociationMetadata && $association->getOrderBy()) { + foreach ($association->getOrderBy() as $orderField => $orientation) { + if ($targetMetadata->hasField($orderField)) { + continue; + } + + if (! $targetMetadata->hasAssociation($orderField)) { + $message = "The association %s#%s is ordered by a property '%s' that is non-existing field on the target entity '%s'."; + + $ce[] = sprintf($message, $class->name, $fieldName, $orderField, $targetMetadata->name); + continue; + } + + $targetAssociation = $targetMetadata->associationMappings[$orderField]; + + if ($targetAssociation instanceof ToManyAssociationMetadata) { + $message = "The association %s#%s is ordered by a property '%s' on '%s' that is a collection-valued association."; + + $ce[] = sprintf($message, $class->name, $fieldName, $orderField, $targetMetadata->name); + continue; + } + + if (! $targetAssociation->isOwningSide()) { + $message = "The association %s#%s is ordered by a property '%s' on '%s' that is the inverse side of an association."; + + $ce[] = sprintf($message, $class->name, $fieldName, $orderField, $targetMetadata->name); + continue; + } } } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 890ff4c7514..3cd54efb5d6 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -34,18 +34,26 @@ use Doctrine\ORM\Event\PreFlushEventArgs; use Doctrine\ORM\Event\PreUpdateEventArgs; use Doctrine\ORM\Internal\HydrationCompleteHandler; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ChangeTrackingPolicy; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\InheritanceType; +use Doctrine\ORM\Mapping\JoinColumnMetadata; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; +use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; +use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; use Doctrine\ORM\Mapping\Reflection\ReflectionPropertiesGetter; +use Doctrine\ORM\Mapping\ToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\Persisters\Collection\ManyToManyPersister; use Doctrine\ORM\Persisters\Collection\OneToManyPersister; use Doctrine\ORM\Persisters\Entity\BasicEntityPersister; use Doctrine\ORM\Persisters\Entity\JoinedSubclassPersister; use Doctrine\ORM\Persisters\Entity\SingleTablePersister; use Doctrine\ORM\Proxy\Proxy; +use Doctrine\ORM\Query\AST\Join; use Doctrine\ORM\Sequencing\AssignedGenerator; use Doctrine\ORM\Utility\IdentifierFlattener; use Exception; @@ -111,7 +119,8 @@ class UnitOfWork implements PropertyChangedListener /** * Map of all identifiers of managed entities. - * Keys are object ids (spl_object_hash). + * This is a 2-dimensional data structure (map of maps). Keys are object ids (spl_object_hash). + * Values are maps of entity identifiers, where its key is the column name and the value is the raw value. * * @var array */ @@ -119,12 +128,13 @@ class UnitOfWork implements PropertyChangedListener /** * Map of the original entity data of managed entities. - * Keys are object ids (spl_object_hash). This is used for calculating changesets - * at commit time. + * This is a 2-dimensional data structure (map of maps). Keys are object ids (spl_object_hash). + * Values are maps of entity data, where its key is the field name and the value is the converted + * (convertToPHPValue) value. + * This structure is used for calculating changesets at commit time. * - * Internal note: Note that PHPs "copy-on-write" behavior helps a lot with memory usage. - * A value will only really be copied if the value in the entity is modified - * by the user. + * Internal: Note that PHPs "copy-on-write" behavior helps a lot with memory usage. + * A value will only really be copied if the value in the entity is modified by the user. * * @var array */ @@ -537,23 +547,23 @@ public function & getEntityChangeSet($entity) * * Modifies/populates the following properties: * - * {@link _originalEntityData} + * {@link originalEntityData} * If the entity is NEW or MANAGED but not yet fully persisted (only has an id) * then it was not fetched from the database and therefore we have no original * entity data yet. All of the current entity data is stored as the original entity data. * - * {@link _entityChangeSets} + * {@link entityChangeSets} * The changes detected on all properties of the entity are stored there. * A change is a tuple array where the first entry is the old value and the second * entry is the new value of the property. Changesets are used by persisters * to INSERT/UPDATE the persistent entity state. * - * {@link _entityUpdates} + * {@link entityUpdates} * If the entity is already fully MANAGED (has been fetched from the database before) * and any changes to its properties are detected, then a reference to the entity is stored * there to mark it for an update. * - * {@link _collectionDeletions} + * {@link collectionDeletions} * If a PersistentCollection has been de-referenced in a fully MANAGED entity, * then this collection is marked for deletion. * @@ -603,13 +613,13 @@ public function computeChangeSet(ClassMetadata $class, $entity) $value = new ArrayCollection($value); } - $assoc = $class->associationMappings[$name]; + $association = $class->associationMappings[$name]; // Inject PersistentCollection $value = new PersistentCollection( - $this->em, $this->em->getClassMetadata($assoc['targetEntity']), $value + $this->em, $this->em->getClassMetadata($association->getTargetEntity()), $value ); - $value->setOwner($entity, $assoc); + $value->setOwner($entity, $association); $value->setDirty( ! $value->isEmpty()); $class->reflFields[$name]->setValue($entity, $value); @@ -638,9 +648,9 @@ public function computeChangeSet(ClassMetadata $class, $entity) continue; } - $assoc = $class->associationMappings[$propName]; + $association = $class->associationMappings[$propName]; - if ($assoc['isOwningSide'] && $assoc['type'] & ClassMetadata::TO_ONE) { + if ($association->isOwningSide() && $association instanceof ToOneAssociationMetadata) { $changeSet[$propName] = [null, $actualValue]; } } @@ -679,21 +689,25 @@ public function computeChangeSet(ClassMetadata $class, $entity) continue; } - $assoc = $class->associationMappings[$propName]; + $association = $class->associationMappings[$propName]; // Persistent collection was exchanged with the "originally" // created one. This can only mean it was cloned and replaced // on another entity. if ($actualValue instanceof PersistentCollection) { $owner = $actualValue->getOwner(); + if ($owner === null) { // cloned - $actualValue->setOwner($entity, $assoc); + $actualValue->setOwner($entity, $association); } else if ($owner !== $entity) { // no clone, we have to fix if (!$actualValue->isInitialized()) { $actualValue->initialize(); // we have to do this otherwise the cols share state } + $newValue = clone $actualValue; - $newValue->setOwner($entity, $assoc); + + $newValue->setOwner($entity, $association); + $class->reflFields[$propName]->setValue($entity, $newValue); } } @@ -712,12 +726,12 @@ public function computeChangeSet(ClassMetadata $class, $entity) continue; } - if ($assoc['type'] & ClassMetadata::TO_ONE) { - if ($assoc['isOwningSide']) { + if ($association instanceof ToOneAssociationMetadata) { + if ($association->isOwningSide()) { $changeSet[$propName] = [$orgValue, $actualValue]; } - if ($orgValue !== null && $assoc['orphanRemoval']) { + if ($orgValue !== null && $association->isOrphanRemoval()) { $this->scheduleOrphanRemoval($orgValue); } } @@ -731,17 +745,17 @@ public function computeChangeSet(ClassMetadata $class, $entity) } // Look for changes in associations of the entity - foreach ($class->associationMappings as $field => $assoc) { + foreach ($class->associationMappings as $field => $association) { if (($val = $class->reflFields[$field]->getValue($entity)) === null) { continue; } - $this->computeAssociationChanges($assoc, $val); + $this->computeAssociationChanges($association, $val); - if ( ! isset($this->entityChangeSets[$oid]) && - $assoc['isOwningSide'] && - $assoc['type'] == ClassMetadata::MANY_TO_MANY && + if ($association instanceof ManyToManyAssociationMetadata && $val instanceof PersistentCollection && + ! isset($this->entityChangeSets[$oid]) && + $association->isOwningSide() && $val->isDirty()) { $this->entityChangeSets[$oid] = []; @@ -807,15 +821,15 @@ public function computeChangeSets() /** * Computes the changes of an association. * - * @param array $assoc The association mapping. - * @param mixed $value The value of the association. + * @param AssociationMetadata $association The association mapping. + * @param mixed $value The value of the association. * * @throws ORMInvalidArgumentException * @throws ORMException * * @return void */ - private function computeAssociationChanges($assoc, $value) + private function computeAssociationChanges(AssociationMetadata $association, $value) { if ($value instanceof Proxy && ! $value->__isInitialized__) { return; @@ -831,24 +845,30 @@ private function computeAssociationChanges($assoc, $value) // Look through the entities, and in any of their associations, // for transient (new) entities, recursively. ("Persistence by reachability") // Unwrap. Uninitialized collections will simply be empty. - $unwrappedValue = ($assoc['type'] & ClassMetadata::TO_ONE) ? [$value] : $value->unwrap(); - $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); + $unwrappedValue = ($association instanceof ToOneAssociationMetadata) ? [$value] : $value->unwrap(); + $targetEntity = $association->getTargetEntity(); + $targetClass = $this->em->getClassMetadata($targetEntity); foreach ($unwrappedValue as $key => $entry) { if (! ($entry instanceof $targetClass->name)) { - throw ORMInvalidArgumentException::invalidAssociation($targetClass, $assoc, $entry); + throw ORMInvalidArgumentException::invalidAssociation($targetClass, $association, $entry); } $state = $this->getEntityState($entry, self::STATE_NEW); - if ( ! ($entry instanceof $assoc['targetEntity'])) { - throw ORMException::unexpectedAssociationValue($assoc['sourceEntity'], $assoc['fieldName'], get_class($entry), $assoc['targetEntity']); + if (! ($entry instanceof $targetEntity)) { + throw ORMException::unexpectedAssociationValue( + $association->getSourceEntity(), + $association->getName(), + get_class($entry), + $targetEntity + ); } switch ($state) { case self::STATE_NEW: - if ( ! in_array('persist', $assoc['cascade'])) { - throw ORMInvalidArgumentException::newEntityFoundThroughRelationship($assoc, $entry); + if ( ! in_array('persist', $association->getCascade())) { + throw ORMInvalidArgumentException::newEntityFoundThroughRelationship($association, $entry); } $this->persistNew($targetClass, $entry); @@ -858,7 +878,7 @@ private function computeAssociationChanges($assoc, $value) case self::STATE_REMOVED: // Consume the $value as array (it's either an array or an ArrayAccess) // and remove the element from Collection. - if ($assoc['type'] & ClassMetadata::TO_MANY) { + if ($association instanceof ToManyAssociationMetadata) { unset($value[$key]); } break; @@ -866,7 +886,7 @@ private function computeAssociationChanges($assoc, $value) case self::STATE_DETACHED: // Can actually not happen right now as we assume STATE_NEW, // so the exception will be raised from the DBAL layer (constraint violation). - throw ORMInvalidArgumentException::detachedEntityFoundThroughRelationship($assoc, $entry); + throw ORMInvalidArgumentException::detachedEntityFoundThroughRelationship($association, $entry); break; default: @@ -1152,12 +1172,12 @@ private function getCommitOrder(array $entityChangeSet = null) // Calculate dependencies for new nodes while ($class = array_pop($newNodes)) { - foreach ($class->associationMappings as $assoc) { - if ( ! ($assoc['isOwningSide'] && $assoc['type'] & ClassMetadata::TO_ONE)) { + foreach ($class->associationMappings as $association) { + if (! ($association->isOwningSide() && $association instanceof ToOneAssociationMetadata)) { continue; } - $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); if ( ! $calc->hasNode($targetClass->name)) { $calc->addNode($targetClass->name, $targetClass); @@ -1165,9 +1185,14 @@ private function getCommitOrder(array $entityChangeSet = null) $newNodes[] = $targetClass; } - $joinColumn = reset($assoc['joinColumns']); + $weight = count( + array_filter( + $association->getJoinColumns(), + function (JoinColumnMetadata $joinColumn) { return $joinColumn->isNullable(); } + ) + ) === 0; - $calc->addDependency($targetClass->name, $class->name, $joinColumn->isNullable() ? 0 : 1); + $calc->addDependency($targetClass->name, $class->name, $weight); // If the target class has mapped subclasses, these share the same dependency. if ( ! $targetClass->subClasses) { @@ -1784,10 +1809,10 @@ public function merge($entity) /** * Executes a merge operation on an entity. * - * @param object $entity - * @param array $visited - * @param object|null $prevManagedCopy - * @param array|null $assoc + * @param object $entity + * @param array $visited + * @param null|object $prevManagedCopy + * @param null|AssociationMetadata $association * * @return object The managed copy of the entity. * @@ -1796,7 +1821,7 @@ public function merge($entity) * @throws ORMInvalidArgumentException If the entity instance is NEW. * @throws EntityNotFoundException if an assigned identifier is used in the entity, but none is provided */ - private function doMerge($entity, array &$visited, $prevManagedCopy = null, array $assoc = []) + private function doMerge($entity, array &$visited, $prevManagedCopy = null, AssociationMetadata $association = null) { $oid = spl_object_hash($entity); @@ -1804,7 +1829,7 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, arra $managedCopy = $visited[$oid]; if ($prevManagedCopy !== null) { - $this->updateAssociationWithMergedEntity($entity, $assoc, $prevManagedCopy, $managedCopy); + $this->updateAssociationWithMergedEntity($entity, $association, $prevManagedCopy, $managedCopy); } return $managedCopy; @@ -1871,7 +1896,7 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, arra } if ($prevManagedCopy !== null) { - $this->updateAssociationWithMergedEntity($entity, $assoc, $prevManagedCopy, $managedCopy); + $this->updateAssociationWithMergedEntity($entity, $association, $prevManagedCopy, $managedCopy); } // Mark the managed copy visited as well @@ -1923,32 +1948,37 @@ private function isLoaded($entity) /** * Sets/adds associated managed copies into the previous entity's association field * - * @param object $entity - * @param array $association - * @param object $previousManagedCopy - * @param object $managedCopy + * @param object $entity + * @param AssociationMetadata $association + * @param object $previousManagedCopy + * @param object $managedCopy * * @return void */ - private function updateAssociationWithMergedEntity($entity, array $association, $previousManagedCopy, $managedCopy) + private function updateAssociationWithMergedEntity( + $entity, + AssociationMetadata $association, + $previousManagedCopy, + $managedCopy + ) { - $assocField = $association['fieldName']; $prevClass = $this->em->getClassMetadata(get_class($previousManagedCopy)); - if ($association['type'] & ClassMetadata::TO_ONE) { - $prevClass->reflFields[$assocField]->setValue($previousManagedCopy, $managedCopy); + if ($association instanceof ToOneAssociationMetadata) { + // @todo guilhermenblanco Why not $association->setValue()? + $prevClass->reflFields[$association->getName()]->setValue($previousManagedCopy, $managedCopy); return; } /** @var array|Collection $value */ - $value = $prevClass->reflFields[$assocField]->getValue($previousManagedCopy); + $value = $prevClass->reflFields[$association->getName()]->getValue($previousManagedCopy); $value[] = $managedCopy; - if ($association['type'] == ClassMetadata::ONE_TO_MANY) { + if ($association instanceof OneToManyAssociationMetadata) { $class = $this->em->getClassMetadata(get_class($entity)); - $class->reflFields[$association['mappedBy']]->setValue($managedCopy, $previousManagedCopy); + $class->reflFields[$association->getMappedBy()]->setValue($managedCopy, $previousManagedCopy); } } @@ -2076,11 +2106,11 @@ private function cascadeRefresh($entity, array &$visited) $associationMappings = array_filter( $class->associationMappings, - function ($assoc) { return in_array('refresh', $assoc['cascade']); } + function (AssociationMetadata $association) { return in_array('refresh', $association->getCascade()); } ); - foreach ($associationMappings as $assoc) { - $relatedEntities = $class->reflFields[$assoc['fieldName']]->getValue($entity); + foreach ($associationMappings as $association) { + $relatedEntities = $association->getValue($entity); switch (true) { case ($relatedEntities instanceof PersistentCollection): @@ -2119,11 +2149,11 @@ private function cascadeDetach($entity, array &$visited) $associationMappings = array_filter( $class->associationMappings, - function ($assoc) { return in_array('detach', $assoc['cascade']); } + function (AssociationMetadata $association) { return in_array('detach', $association->getCascade()); } ); - foreach ($associationMappings as $assoc) { - $relatedEntities = $class->reflFields[$assoc['fieldName']]->getValue($entity); + foreach ($associationMappings as $association) { + $relatedEntities = $association->getValue($entity); switch (true) { case ($relatedEntities instanceof PersistentCollection): @@ -2163,14 +2193,15 @@ private function cascadeMerge($entity, $managedCopy, array &$visited) $associationMappings = array_filter( $class->associationMappings, - function ($assoc) { return in_array('merge', $assoc['cascade']); } + function (AssociationMetadata $association) { return in_array('merge', $association->getCascade()); } ); - foreach ($associationMappings as $assoc) { - $relatedEntities = $class->reflFields[$assoc['fieldName']]->getValue($entity); + foreach ($associationMappings as $association) { + /** @var AssociationMetadata $association */ + $relatedEntities = $association->getValue($entity); if ($relatedEntities instanceof Collection) { - if ($relatedEntities === $class->reflFields[$assoc['fieldName']]->getValue($managedCopy)) { + if ($relatedEntities === $association->getValue($managedCopy)) { continue; } @@ -2180,10 +2211,10 @@ function ($assoc) { return in_array('merge', $assoc['cascade']); } } foreach ($relatedEntities as $relatedEntity) { - $this->doMerge($relatedEntity, $visited, $managedCopy, $assoc); + $this->doMerge($relatedEntity, $visited, $managedCopy, $association); } } else if ($relatedEntities !== null) { - $this->doMerge($relatedEntities, $visited, $managedCopy, $assoc); + $this->doMerge($relatedEntities, $visited, $managedCopy, $association); } } } @@ -2202,11 +2233,13 @@ private function cascadePersist($entity, array &$visited) $associationMappings = array_filter( $class->associationMappings, - function ($assoc) { return in_array('persist', $assoc['cascade']); } + function ($association) { return in_array('persist', $association->getCascade()); } ); - foreach ($associationMappings as $assoc) { - $relatedEntities = $class->reflFields[$assoc['fieldName']]->getValue($entity); + foreach ($associationMappings as $association) { + /** @var AssociationMetadata $association */ + $relatedEntities = $association->getValue($entity); + $targetEntity = $association->getTargetEntity(); switch (true) { case ($relatedEntities instanceof PersistentCollection): @@ -2216,10 +2249,10 @@ function ($assoc) { return in_array('persist', $assoc['cascade']); } case ($relatedEntities instanceof Collection): case (is_array($relatedEntities)): - if (($assoc['type'] & ClassMetadata::TO_MANY) <= 0) { + if (! ($association instanceof ToManyAssociationMetadata)) { throw ORMInvalidArgumentException::invalidAssociation( - $this->em->getClassMetadata($assoc['targetEntity']), - $assoc, + $this->em->getClassMetadata($targetEntity), + $association, $relatedEntities ); } @@ -2231,10 +2264,10 @@ function ($assoc) { return in_array('persist', $assoc['cascade']); } break; case ($relatedEntities !== null): - if (! $relatedEntities instanceof $assoc['targetEntity']) { + if (! $relatedEntities instanceof $targetEntity) { throw ORMInvalidArgumentException::invalidAssociation( - $this->em->getClassMetadata($assoc['targetEntity']), - $assoc, + $this->em->getClassMetadata($targetEntity), + $association, $relatedEntities ); } @@ -2262,17 +2295,17 @@ private function cascadeRemove($entity, array &$visited) $associationMappings = array_filter( $class->associationMappings, - function ($assoc) { return in_array('remove', $assoc['cascade']); } + function ($association) { return in_array('remove', $association->getCascade()); } ); $entitiesToCascade = []; - foreach ($associationMappings as $assoc) { + foreach ($associationMappings as $association) { if ($entity instanceof Proxy && !$entity->__isInitialized__) { $entity->__load(); } - $relatedEntities = $class->reflFields[$assoc['fieldName']]->getValue($entity); + $relatedEntities = $class->reflFields[$association->getName()]->getValue($entity); switch (true) { case ($relatedEntities instanceof Collection): @@ -2593,182 +2626,181 @@ public function createEntity($className, array $data, &$hints = []) return $entity; } - foreach ($class->associationMappings as $field => $assoc) { + foreach ($class->associationMappings as $field => $association) { // Check if the association is not among the fetch-joined associations already. if (isset($hints['fetchAlias']) && isset($hints['fetched'][$hints['fetchAlias']][$field])) { continue; } - $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); + $targetEntity = $association->getTargetEntity(); + $targetClass = $this->em->getClassMetadata($targetEntity); - switch (true) { - case ($assoc['type'] & ClassMetadata::TO_ONE): - if ( ! $assoc['isOwningSide']) { + if ($association instanceof ToManyAssociationMetadata) { + // Ignore if its a cached collection + if (isset($hints[Query::HINT_CACHE_ENABLED]) && + $class->getFieldValue($entity, $field) instanceof PersistentCollection) { + continue; + } - // use the given entity association - if (isset($data[$field]) && is_object($data[$field]) && isset($this->entityStates[spl_object_hash($data[$field])])) { + // use the given collection + if (isset($data[$field]) && $data[$field] instanceof PersistentCollection) { + $data[$field]->setOwner($entity, $association); - $this->originalEntityData[$oid][$field] = $data[$field]; + $class->reflFields[$field]->setValue($entity, $data[$field]); - $class->reflFields[$field]->setValue($entity, $data[$field]); - $targetClass->reflFields[$assoc['mappedBy']]->setValue($data[$field], $entity); + $this->originalEntityData[$oid][$field] = $data[$field]; - break; - } + continue; + } - // Inverse side of x-to-one can never be lazy - $class->reflFields[$field]->setValue($entity, $this->getEntityPersister($assoc['targetEntity'])->loadOneToOneEntity($assoc, $entity)); + // Inject collection + $pColl = new PersistentCollection($this->em, $targetClass, new ArrayCollection); + $pColl->setOwner($entity, $association); + $pColl->setInitialized(false); - break; - } + $reflField = $class->reflFields[$field]; + $reflField->setValue($entity, $pColl); - // use the entity association - if (isset($data[$field]) && is_object($data[$field]) && isset($this->entityStates[spl_object_hash($data[$field])])) { - $class->reflFields[$field]->setValue($entity, $data[$field]); - $this->originalEntityData[$oid][$field] = $data[$field]; + if ($association->getFetchMode() === FetchMode::EAGER) { + $this->loadCollection($pColl); + $pColl->takeSnapshot(); + } - break; - } + $this->originalEntityData[$oid][$field] = $pColl; - $associatedId = []; + continue; + } - // TODO: Is this even computed right in all cases of composite keys? - foreach ($assoc['joinColumns'] as $joinColumn) { - $joinColumnName = $joinColumn->getColumnName(); - $joinColumnValue = isset($data[$joinColumnName]) ? $data[$joinColumnName] : null; - $targetField = $targetClass->fieldNames[$joinColumn->getReferencedColumnName()]; + if (! $association->isOwningSide()) { + // use the given entity association + if (isset($data[$field]) && is_object($data[$field]) && + isset($this->entityStates[spl_object_hash($data[$field])])) { + $this->originalEntityData[$oid][$field] = $data[$field]; - if ($joinColumnValue === null && in_array($targetField, $targetClass->identifier, true)) { - // the missing key is part of target's entity primary key - $associatedId = []; - break; - } + $class->reflFields[$field]->setValue($entity, $data[$field]); + $targetClass->reflFields[$association->getMappedBy()]->setValue($data[$field], $entity); - $associatedId[$targetField] = $joinColumnValue; - } + continue; + } - if ( ! $associatedId) { - // Foreign key is NULL - $class->reflFields[$field]->setValue($entity, null); - $this->originalEntityData[$oid][$field] = null; + // Inverse side of x-to-one can never be lazy + $persister = $this->getEntityPersister($targetEntity); - break; - } + $class->reflFields[$field]->setValue($entity, $persister->loadToOneEntity($association, $entity)); - if ( ! isset($hints['fetchMode'][$class->name][$field])) { - $hints['fetchMode'][$class->name][$field] = $assoc['fetch']; - } + continue; + } - // Foreign key is set - // Check identity map first - // FIXME: Can break easily with composite keys if join column values are in - // wrong order. The correct order is the one in ClassMetadata#identifier. - $relatedIdHash = implode(' ', $associatedId); + // use the entity association + if (isset($data[$field]) && is_object($data[$field]) && isset($this->entityStates[spl_object_hash($data[$field])])) { + $class->reflFields[$field]->setValue($entity, $data[$field]); + $this->originalEntityData[$oid][$field] = $data[$field]; - switch (true) { - case (isset($this->identityMap[$targetClass->rootEntityName][$relatedIdHash])): - $newValue = $this->identityMap[$targetClass->rootEntityName][$relatedIdHash]; - - // If this is an uninitialized proxy, we are deferring eager loads, - // this association is marked as eager fetch, and its an uninitialized proxy (wtf!) - // then we can append this entity for eager loading! - if ($hints['fetchMode'][$class->name][$field] == FetchMode::EAGER && - isset($hints[self::HINT_DEFEREAGERLOAD]) && - !$targetClass->isIdentifierComposite && - $newValue instanceof Proxy && - $newValue->__isInitialized__ === false) { - - $this->eagerLoadingEntities[$targetClass->rootEntityName][$relatedIdHash] = current($associatedId); - } + continue; + } - break; + $associatedId = []; - case ($targetClass->subClasses): - // If it might be a subtype, it can not be lazy. There isn't even - // a way to solve this with deferred eager loading, which means putting - // an entity with subclasses at a *-to-one location is really bad! (performance-wise) - $newValue = $this->getEntityPersister($assoc['targetEntity'])->loadOneToOneEntity($assoc, $entity, $associatedId); - break; + // TODO: Is this even computed right in all cases of composite keys? + foreach ($association->getJoinColumns() as $joinColumn) { + $joinColumnName = $joinColumn->getColumnName(); + $joinColumnValue = isset($data[$joinColumnName]) ? $data[$joinColumnName] : null; + $targetField = $targetClass->fieldNames[$joinColumn->getReferencedColumnName()]; - default: - switch (true) { - // We are negating the condition here. Other cases will assume it is valid! - case ($hints['fetchMode'][$class->name][$field] !== FetchMode::EAGER): - $newValue = $this->em->getProxyFactory()->getProxy($assoc['targetEntity'], $associatedId); - break; - - // Deferred eager load only works for single identifier classes - case (isset($hints[self::HINT_DEFEREAGERLOAD]) && ! $targetClass->isIdentifierComposite): - // TODO: Is there a faster approach? - $this->eagerLoadingEntities[$targetClass->rootEntityName][$relatedIdHash] = current($associatedId); - - $newValue = $this->em->getProxyFactory()->getProxy($assoc['targetEntity'], $associatedId); - break; - - default: - // TODO: This is very imperformant, ignore it? - $newValue = $this->em->find($assoc['targetEntity'], $associatedId); - break; - } + if ($joinColumnValue === null && in_array($targetField, $targetClass->identifier, true)) { + // the missing key is part of target's entity primary key + $associatedId = []; - // PERF: Inlined & optimized code from UnitOfWork#registerManaged() - $newValueOid = spl_object_hash($newValue); - $this->entityIdentifiers[$newValueOid] = $associatedId; - $this->identityMap[$targetClass->rootEntityName][$relatedIdHash] = $newValue; + continue; + } - if ( - $newValue instanceof NotifyPropertyChanged && - ( ! $newValue instanceof Proxy || $newValue->__isInitialized()) - ) { - $newValue->addPropertyChangedListener($this); - } - $this->entityStates[$newValueOid] = self::STATE_MANAGED; - // make sure that when an proxy is then finally loaded, $this->originalEntityData is set also! - break; - } + $associatedId[$targetField] = $joinColumnValue; + } - $this->originalEntityData[$oid][$field] = $newValue; - $class->reflFields[$field]->setValue($entity, $newValue); + if (!$associatedId) { + // Foreign key is NULL + $class->reflFields[$field]->setValue($entity, null); + $this->originalEntityData[$oid][$field] = null; - if ($assoc['inversedBy'] && $assoc['type'] & ClassMetadata::ONE_TO_ONE) { - $inverseAssoc = $targetClass->associationMappings[$assoc['inversedBy']]; - $targetClass->reflFields[$inverseAssoc['fieldName']]->setValue($newValue, $entity); + continue; + } + + // @todo guilhermeblanco Can we remove the need of this somehow? + if (!isset($hints['fetchMode'][$class->name][$field])) { + $hints['fetchMode'][$class->name][$field] = $association->getFetchMode(); + } + + // Foreign key is set + // Check identity map first + // FIXME: Can break easily with composite keys if join column values are in + // wrong order. The correct order is the one in ClassMetadata#identifier. + $relatedIdHash = implode(' ', $associatedId); + + switch (true) { + case (isset($this->identityMap[$targetClass->rootEntityName][$relatedIdHash])): + $newValue = $this->identityMap[$targetClass->rootEntityName][$relatedIdHash]; + + // If this is an uninitialized proxy, we are deferring eager loads, + // this association is marked as eager fetch, and its an uninitialized proxy (wtf!) + // then we can append this entity for eager loading! + if (!$targetClass->isIdentifierComposite && + $newValue instanceof Proxy && + isset($hints[self::HINT_DEFEREAGERLOAD]) && + $hints['fetchMode'][$class->name][$field] === FetchMode::EAGER && + $newValue->__isInitialized__ === false + ) { + + $this->eagerLoadingEntities[$targetClass->rootEntityName][$relatedIdHash] = current($associatedId); } break; + case ($targetClass->subClasses): + // If it might be a subtype, it can not be lazy. There isn't even + // a way to solve this with deferred eager loading, which means putting + // an entity with subclasses at a *-to-one location is really bad! (performance-wise) + $persister = $this->getEntityPersister($targetEntity); + $newValue = $persister->loadToOneEntity($association, $entity, $associatedId); + break; + default: - // Ignore if its a cached collection - if (isset($hints[Query::HINT_CACHE_ENABLED]) && $class->getFieldValue($entity, $field) instanceof PersistentCollection) { - break; - } + // Proxies do not carry any kind of original entity data until they'e fully loaded/initialized + $managedData = []; - // use the given collection - if (isset($data[$field]) && $data[$field] instanceof PersistentCollection) { + switch (true) { + // We are negating the condition here. Other cases will assume it is valid! + case ($hints['fetchMode'][$class->name][$field] !== FetchMode::EAGER): + $newValue = $this->em->getProxyFactory()->getProxy($targetEntity, $associatedId); + break; - $data[$field]->setOwner($entity, $assoc); + // Deferred eager load only works for single identifier classes + case (isset($hints[self::HINT_DEFEREAGERLOAD]) && !$targetClass->isIdentifierComposite): + // TODO: Is there a faster approach? + $this->eagerLoadingEntities[$targetClass->rootEntityName][$relatedIdHash] = current($associatedId); - $class->reflFields[$field]->setValue($entity, $data[$field]); - $this->originalEntityData[$oid][$field] = $data[$field]; + $newValue = $this->em->getProxyFactory()->getProxy($targetEntity, $associatedId); + break; - break; + default: + // TODO: This is very imperformant, ignore it? + $newValue = $this->em->find($targetEntity, $associatedId); + // Needed to re-assign original entity data for freshly loaded entity + $managedData = $this->originalEntityData[spl_object_hash($newValue)]; + break; } - // Inject collection - $pColl = new PersistentCollection($this->em, $targetClass, new ArrayCollection); - $pColl->setOwner($entity, $assoc); - $pColl->setInitialized(false); + $this->registerManaged($newValue, $associatedId, $managedData); + + break; + } - $reflField = $class->reflFields[$field]; - $reflField->setValue($entity, $pColl); + $this->originalEntityData[$oid][$field] = $newValue; + $class->reflFields[$field]->setValue($entity, $newValue); - if ($assoc['fetch'] == FetchMode::EAGER) { - $this->loadCollection($pColl); - $pColl->takeSnapshot(); - } + if ($association->getInversedBy() && $association instanceof OneToOneAssociationMetadata) { + $inverseAssoc = $targetClass->associationMappings[$association->getInversedBy()]; - $this->originalEntityData[$oid][$field] = $pColl; - break; + $targetClass->reflFields[$inverseAssoc->getName()]->setValue($newValue, $entity); } } @@ -2817,17 +2849,13 @@ public function triggerEagerLoads() */ public function loadCollection(PersistentCollection $collection) { - $assoc = $collection->getMapping(); - $persister = $this->getEntityPersister($assoc['targetEntity']); - - switch ($assoc['type']) { - case ClassMetadata::ONE_TO_MANY: - $persister->loadOneToManyCollection($assoc, $collection->getOwner(), $collection); - break; + $association = $collection->getMapping(); + $persister = $this->getEntityPersister($association->getTargetEntity()); - case ClassMetadata::MANY_TO_MANY: - $persister->loadManyToManyCollection($assoc, $collection->getOwner(), $collection); - break; + if ($association instanceof OneToManyAssociationMetadata) { + $persister->loadOneToManyCollection($association, $collection->getOwner(), $collection); + } else { + $persister->loadManyToManyCollection($association, $collection->getOwner(), $collection); } $collection->setInitialized(true); @@ -3032,25 +3060,25 @@ public function getEntityPersister($entityName) /** * Gets a collection persister for a collection-valued association. * - * @param array $association + * @param ToManyAssociationMetadata $association * * @return \Doctrine\ORM\Persisters\Collection\CollectionPersister */ - public function getCollectionPersister(array $association) + public function getCollectionPersister(ToManyAssociationMetadata $association) { - $role = isset($association['cache']) - ? $association['sourceEntity'] . '::' . $association['fieldName'] - : $association['type']; + $role = $association->getCache() + ? sprintf('%s::%s', $association->getSourceEntity(), $association->getName()) + : get_class($association); if (isset($this->collectionPersisters[$role])) { return $this->collectionPersisters[$role]; } - $persister = ClassMetadata::ONE_TO_MANY === $association['type'] + $persister = $association instanceof OneToManyAssociationMetadata ? new OneToManyPersister($this->em) : new ManyToManyPersister($this->em); - if ($this->hasCache && isset($association['cache'])) { + if ($this->hasCache && $association->getCache()) { $persister = $this->em->getConfiguration() ->getSecondLevelCacheConfiguration() ->getCacheFactory() @@ -3067,14 +3095,15 @@ public function getCollectionPersister(array $association) * Registers an entity as managed. * * @param object $entity The entity. - * @param array $id The identifier values. + * @param array $id Map containing identifier field names as key and its associated values. * @param array $data The original entity data. * * @return void */ public function registerManaged($entity, array $id, array $data) { - $oid = spl_object_hash($entity); + $isProxy = ! $entity instanceof Proxy || $entity->__isInitialized(); + $oid = spl_object_hash($entity); $this->entityIdentifiers[$oid] = $id; $this->entityStates[$oid] = self::STATE_MANAGED; @@ -3082,7 +3111,7 @@ public function registerManaged($entity, array $id, array $data) $this->addToIdentityMap($entity); - if ($entity instanceof NotifyPropertyChanged && ( ! $entity instanceof Proxy || $entity->__isInitialized())) { + if ($entity instanceof NotifyPropertyChanged && $isProxy) { $entity->addPropertyChangedListener($this); } } @@ -3368,7 +3397,7 @@ private function mergeEntityStateIntoManagedCopy($entity, $managedCopy) } else { $assoc2 = $class->associationMappings[$name]; - if ($assoc2['type'] & ClassMetadata::TO_ONE) { + if ($assoc2 instanceof ToOneAssociationMetadata) { $other = $prop->getValue($entity); if ($other === null) { $prop->setValue($managedCopy, null); @@ -3378,18 +3407,17 @@ private function mergeEntityStateIntoManagedCopy($entity, $managedCopy) continue; } - if ( ! in_array('merge', $assoc2['cascade'])) { + if (! in_array('merge', $assoc2->getCascade())) { if ($this->getEntityState($other) === self::STATE_DETACHED) { - $targetClass = $this->em->getClassMetadata($assoc2['targetEntity']); - $relatedId = $targetClass->getIdentifierValues($other); + $targetEntity = $assoc2->getTargetEntity(); + $targetClass = $this->em->getClassMetadata($targetEntity); + $relatedId = $targetClass->getIdentifierValues($other); if ($targetClass->subClasses) { $other = $this->em->find($targetClass->name, $relatedId); } else { - $other = $this->em->getProxyFactory()->getProxy( - $assoc2['targetEntity'], - $relatedId - ); + $other = $this->em->getProxyFactory()->getProxy($targetEntity, $relatedId); + $this->registerManaged($other, $relatedId, []); } } @@ -3411,14 +3439,14 @@ private function mergeEntityStateIntoManagedCopy($entity, $managedCopy) if ( ! $managedCol) { $managedCol = new PersistentCollection( $this->em, - $this->em->getClassMetadata($assoc2['targetEntity']), + $this->em->getClassMetadata($assoc2->getTargetEntity()), new ArrayCollection ); $managedCol->setOwner($managedCopy, $assoc2); $prop->setValue($managedCopy, $managedCol); } - if (in_array('merge', $assoc2['cascade'])) { + if (in_array('merge', $assoc2->getCascade())) { $managedCol->initialize(); // clear and set dirty a managed collection if its not also the same collection to merge from. @@ -3426,8 +3454,8 @@ private function mergeEntityStateIntoManagedCopy($entity, $managedCopy) $managedCol->unwrap()->clear(); $managedCol->setDirty(true); - if ($assoc2['isOwningSide'] - && $assoc2['type'] == ClassMetadata::MANY_TO_MANY + if ($assoc2->isOwningSide() + && $assoc2 instanceof ManyToManyAssociationMetadata && $class->changeTrackingPolicy === ChangeTrackingPolicy::NOTIFY ) { $this->scheduleForSynchronization($managedCopy); diff --git a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php index 2c92672002c..33848dbf2bc 100644 --- a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php +++ b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php @@ -77,11 +77,11 @@ public function flattenIdentifier(ClassMetadata $class, array $id) continue; } - $assoc = $class->associationMappings[$field]; + $association = $class->associationMappings[$field]; if (isset($id[$field]) && is_object($id[$field])) { /* @var $targetClassMetadata ClassMetadata */ - $targetClassMetadata = $this->metadataFactory->getMetadataFor($assoc['targetEntity']); + $targetClassMetadata = $this->metadataFactory->getMetadataFor($association->getTargetEntity()); $identifiers = $this->unitOfWork->isInIdentityMap($id[$field]) ? $this->unitOfWork->getEntityIdentifier($id[$field]) : $targetClassMetadata->getIdentifierValues($id[$field]); @@ -94,7 +94,7 @@ public function flattenIdentifier(ClassMetadata $class, array $id) $associatedId = []; - foreach ($assoc['joinColumns'] as $joinColumn) { + foreach ($association->getJoinColumns() as $joinColumn) { $associatedId[] = $id[$joinColumn->getColumnName()]; } diff --git a/lib/Doctrine/ORM/Utility/PersisterHelper.php b/lib/Doctrine/ORM/Utility/PersisterHelper.php index c0393b97607..55ec895983e 100644 --- a/lib/Doctrine/ORM/Utility/PersisterHelper.php +++ b/lib/Doctrine/ORM/Utility/PersisterHelper.php @@ -23,6 +23,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; use Doctrine\ORM\Query\QueryException; /** @@ -54,17 +55,18 @@ public static function getTypeOfField($fieldName, ClassMetadata $class, EntityMa return []; } - $assoc = $class->associationMappings[$fieldName]; + $association = $class->associationMappings[$fieldName]; + $targetEntity = $association->getTargetEntity(); + $targetClass = $em->getClassMetadata($targetEntity); - if (! $assoc['isOwningSide']) { - return self::getTypeOfField($assoc['mappedBy'], $em->getClassMetadata($assoc['targetEntity']), $em); + if (! $association->isOwningSide()) { + return self::getTypeOfField($association->getMappedBy(), $targetClass, $em); } $types = []; - $targetClass = $em->getClassMetadata($assoc['targetEntity']); - $joinColumns = ($assoc['type'] & ClassMetadata::MANY_TO_MANY) - ? $assoc['joinTable']->getJoinColumns() - : $assoc['joinColumns']; + $joinColumns = $association instanceof ManyToManyAssociationMetadata + ? $association->getJoinTable()->getJoinColumns() + : $association->getJoinColumns(); foreach ($joinColumns as $joinColumn) { $types[] = self::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $em); @@ -93,12 +95,19 @@ public static function getTypeOfColumn($columnName, ClassMetadata $class, Entity } // iterate over association mappings - foreach ($class->associationMappings as $assoc) { + foreach ($class->associationMappings as $association) { // resolve join columns over to-one or to-many - $targetClass = $em->getClassMetadata($assoc['targetEntity']); - $joinColumns = ($assoc['type'] & ClassMetadata::MANY_TO_MANY) - ? $assoc['joinTable']->getJoinColumns() - : ($assoc['joinColumns'] ?? []); + $targetClass = $em->getClassMetadata($association->getTargetEntity()); + + if (! $association->isOwningSide()) { + $association = $targetClass->associationMappings[$association->getMappedBy()]; + $targetClass = $em->getClassMetadata($association->getTargetEntity()); + } + + $joinColumns = $association instanceof ManyToManyAssociationMetadata + ? $association->getJoinTable()->getInverseJoinColumns() + : $association->getJoinColumns() + ; foreach ($joinColumns as $joinColumn) { if ($joinColumn->getColumnName() !== $columnName) { diff --git a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php index bf96159d72a..26b8270d9b9 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php @@ -163,13 +163,12 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $joinColumns[] = $joinColumn; - $metadata->mapOneToOne( - [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser', - 'joinColumns' => $joinColumns, - ] - ); + $association = new Mapping\OneToOneAssociationMetadata('user'); + + $association->setJoinColumns($joinColumns); + $association->setTargetEntity('CmsUser'); + + $metadata->mapOneToOne($association); $metadata->addNamedNativeQuery( [ diff --git a/tests/Doctrine/Tests/Models/DDC1872/DDC1872ExampleEntityWithOverride.php b/tests/Doctrine/Tests/Models/DDC1872/DDC1872ExampleEntityWithOverride.php index 194dd6bd042..36928980895 100644 --- a/tests/Doctrine/Tests/Models/DDC1872/DDC1872ExampleEntityWithOverride.php +++ b/tests/Doctrine/Tests/Models/DDC1872/DDC1872ExampleEntityWithOverride.php @@ -8,23 +8,24 @@ * @ORM\Entity * * @ORM\AttributeOverrides({ - * @ORM\AttributeOverride(name="foo", - * column=@ORM\Column( - * name = "foo_overridden", - * type = "integer", - * length = 140, - * nullable = false, - * unique = false - * ) - * ) + * @ORM\AttributeOverride(name="foo", + * column=@ORM\Column( + * name = "foo_overridden", + * type = "integer", + * length = 140, + * nullable = false, + * unique = false + * ) + * ) * }) * * @ORM\AssociationOverrides({ - * @ORM\AssociationOverride(name="bar", - * joinColumns=@ORM\JoinColumn( - * name="example_entity_overridden_bar_id", referencedColumnName="id" - * ) - * ) + * @ORM\AssociationOverride( + * name="bar", + * joinColumns=@ORM\JoinColumn( + * name="example_entity_overridden_bar_id", referencedColumnName="id" + * ) + * ) * }) */ class DDC1872ExampleEntityWithOverride diff --git a/tests/Doctrine/Tests/Models/DDC3579/DDC3579Admin.php b/tests/Doctrine/Tests/Models/DDC3579/DDC3579Admin.php index 8476bdaee67..dee154391a5 100644 --- a/tests/Doctrine/Tests/Models/DDC3579/DDC3579Admin.php +++ b/tests/Doctrine/Tests/Models/DDC3579/DDC3579Admin.php @@ -18,9 +18,10 @@ class DDC3579Admin extends DDC3579User { public static function loadMetadata(Mapping\ClassMetadata $metadata) { - $metadata->setAssociationOverride('groups', [ - 'inversedBy' => 'admins' - ] - ); + $association = new Mapping\ManyToManyAssociationMetadata('groups'); + + $association->setInversedBy('admins'); + + $metadata->setAssociationOverride($association); } } diff --git a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php index 78ede1f2a1d..0d0c25634f7 100644 --- a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php +++ b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php @@ -101,12 +101,11 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $metadata->addProperty($fieldMetadata); - $metadata->mapManyToMany( - [ - 'fieldName' => 'groups', - 'targetEntity' => 'DDC3579Group' - ] - ); + $association = new Mapping\ManyToManyAssociationMetadata('groups'); + + $association->setTargetEntity('DDC3579Group'); + + $metadata->mapManyToMany($association); $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php b/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php index 70bdc196d76..9f7e41f586a 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php @@ -36,7 +36,11 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $joinColumns[] = $joinColumn; - $metadata->setAssociationOverride('address', ['joinColumns' => $joinColumns]); + $association = new Mapping\ManyToOneAssociationMetadata('address'); + + $association->setJoinColumns($joinColumns); + + $metadata->setAssociationOverride($association); $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('ddc964_users_admingroups'); @@ -51,6 +55,10 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $joinTable->addInverseJoinColumn($joinColumn); - $metadata->setAssociationOverride('groups', ['joinTable' => $joinTable]); + $association = new Mapping\ManyToManyAssociationMetadata('groups'); + + $association->setJoinTable($joinTable); + + $metadata->setAssociationOverride($association); } } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php index b5cb574a0e8..9655c1b3576 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php @@ -136,14 +136,13 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $joinColumns[] = $joinColumn; - $metadata->mapManyToOne( - [ - 'fieldName' => 'address', - 'targetEntity' => 'DDC964Address', - 'cascade' => ['persist','merge'], - 'joinColumns' => $joinColumns, - ] - ); + $association = new Mapping\ManyToOneAssociationMetadata('address'); + + $association->setJoinColumns($joinColumns); + $association->setTargetEntity('DDC964Address'); + $association->setCascade(['persist', 'merge']); + + $metadata->mapManyToOne($association); $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('ddc964_users_groups'); @@ -162,15 +161,14 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $joinTable->addInverseJoinColumn($joinColumn); - $metadata->mapManyToMany( - [ - 'fieldName' => 'groups', - 'targetEntity' => 'DDC964Group', - 'inversedBy' => 'users', - 'cascade' => ['persist','merge','detach'], - 'joinTable' => $joinTable, - ] - ); + $association = new Mapping\ManyToManyAssociationMetadata('groups'); + + $association->setJoinTable($joinTable); + $association->setTargetEntity('DDC964Group'); + $association->setInversedBy('users'); + $association->setCascade(['persist', 'merge', 'detach']); + + $metadata->mapManyToMany($association); $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php index 209250c26cc..8debca5eeca 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php @@ -84,10 +84,7 @@ public function testBuildCachedEntityPersisterReadOnly() ); $metadata->setCache( - new CacheMetadata( - CacheUsage::READ_ONLY, - 'doctrine_tests_models_cache_state' - ) + new CacheMetadata(CacheUsage::READ_ONLY, 'doctrine_tests_models_cache_state') ); $this->factory->expects($this->once()) @@ -111,10 +108,7 @@ public function testBuildCachedEntityPersisterReadWrite() ); $metadata->setCache( - new CacheMetadata( - CacheUsage::READ_WRITE, - 'doctrine_tests_models_cache_state' - ) + new CacheMetadata(CacheUsage::READ_WRITE, 'doctrine_tests_models_cache_state') ); $this->factory->expects($this->once()) @@ -138,10 +132,7 @@ public function testBuildCachedEntityPersisterNonStrictReadWrite() ); $metadata->setCache( - new CacheMetadata( - CacheUsage::NONSTRICT_READ_WRITE, - 'doctrine_tests_models_cache_state' - ) + new CacheMetadata(CacheUsage::NONSTRICT_READ_WRITE, 'doctrine_tests_models_cache_state') ); $this->factory->expects($this->once()) @@ -157,26 +148,25 @@ public function testBuildCachedEntityPersisterNonStrictReadWrite() public function testBuildCachedCollectionPersisterReadOnly() { - $em = $this->em; - $metadata = clone $em->getClassMetadata(State::class); - $mapping = $metadata->associationMappings['cities']; - $persister = new OneToManyPersister($em); - $region = new ConcurrentRegionMock( + $em = $this->em; + $metadata = clone $em->getClassMetadata(State::class); + $association = $metadata->associationMappings['cities']; + $persister = new OneToManyPersister($em); + $region = new ConcurrentRegionMock( new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl()) ); - - $mapping['cache'] = new CacheMetadata( - CacheUsage::READ_ONLY, - 'doctrine_tests_models_cache_state__cities' + + $association->setCache( + new CacheMetadata(CacheUsage::READ_ONLY, 'doctrine_tests_models_cache_state__cities') ); $this->factory->expects($this->once()) ->method('getRegion') - ->with($this->equalTo($mapping['cache'])) + ->with($this->equalTo($association->getCache())) ->will($this->returnValue($region)); - $cachedPersister = $this->factory->buildCachedCollectionPersister($em, $persister, $mapping); + $cachedPersister = $this->factory->buildCachedCollectionPersister($em, $persister, $association); self::assertInstanceOf(CachedCollectionPersister::class, $cachedPersister); self::assertInstanceOf(ReadOnlyCachedCollectionPersister::class, $cachedPersister); @@ -186,23 +176,22 @@ public function testBuildCachedCollectionPersisterReadWrite() { $em = $this->em; $metadata = clone $em->getClassMetadata(State::class); - $mapping = $metadata->associationMappings['cities']; + $association = $metadata->associationMappings['cities']; $persister = new OneToManyPersister($em); $region = new ConcurrentRegionMock( new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl()) ); - $mapping['cache'] = new CacheMetadata( - CacheUsage::READ_WRITE, - 'doctrine_tests_models_cache_state__cities' + $association->setCache( + new CacheMetadata(CacheUsage::READ_WRITE, 'doctrine_tests_models_cache_state__cities') ); $this->factory->expects($this->once()) ->method('getRegion') - ->with($this->equalTo($mapping['cache'])) + ->with($this->equalTo($association->getCache())) ->will($this->returnValue($region)); - $cachedPersister = $this->factory->buildCachedCollectionPersister($em, $persister, $mapping); + $cachedPersister = $this->factory->buildCachedCollectionPersister($em, $persister, $association); self::assertInstanceOf(CachedCollectionPersister::class, $cachedPersister); self::assertInstanceOf(ReadWriteCachedCollectionPersister::class, $cachedPersister); @@ -210,25 +199,24 @@ public function testBuildCachedCollectionPersisterReadWrite() public function testBuildCachedCollectionPersisterNonStrictReadWrite() { - $em = $this->em; - $metadata = clone $em->getClassMetadata(State::class); - $mapping = $metadata->associationMappings['cities']; - $persister = new OneToManyPersister($em); - $region = new ConcurrentRegionMock( + $em = $this->em; + $metadata = clone $em->getClassMetadata(State::class); + $association = $metadata->associationMappings['cities']; + $persister = new OneToManyPersister($em); + $region = new ConcurrentRegionMock( new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl()) ); - $mapping['cache'] = new CacheMetadata( - CacheUsage::NONSTRICT_READ_WRITE, - 'doctrine_tests_models_cache_state__cities' + $association->setCache( + new CacheMetadata(CacheUsage::NONSTRICT_READ_WRITE, 'doctrine_tests_models_cache_state__cities') ); $this->factory->expects($this->once()) ->method('getRegion') - ->with($this->equalTo($mapping['cache'])) + ->with($this->equalTo($association->getCache())) ->will($this->returnValue($region)); - $cachedPersister = $this->factory->buildCachedCollectionPersister($em, $persister, $mapping); + $cachedPersister = $this->factory->buildCachedCollectionPersister($em, $persister, $association); self::assertInstanceOf(CachedCollectionPersister::class, $cachedPersister); self::assertInstanceOf(NonStrictReadWriteCachedCollectionPersister::class, $cachedPersister); @@ -283,10 +271,7 @@ public function testBuildCachedEntityPersisterNonStrictException() $persister = new BasicEntityPersister($em, $metadata); $metadata->setCache( - new CacheMetadata( - -1, - 'doctrine_tests_models_cache_state' - ) + new CacheMetadata(-1, 'doctrine_tests_models_cache_state') ); $this->factory->buildCachedEntityPersister($em, $persister, $metadata); @@ -298,17 +283,16 @@ public function testBuildCachedEntityPersisterNonStrictException() */ public function testBuildCachedCollectionPersisterException() { - $em = $this->em; - $metadata = clone $em->getClassMetadata(State::class); - $mapping = $metadata->getAssociationMapping('cities'); - $persister = new OneToManyPersister($em); + $em = $this->em; + $metadata = clone $em->getClassMetadata(State::class); + $association = $metadata->associationMappings['cities']; + $persister = new OneToManyPersister($em); - $mapping['cache'] = new CacheMetadata( - -1, - 'doctrine_tests_models_cache_state__cities' + $association->setCache( + new CacheMetadata(-1, 'doctrine_tests_models_cache_state__cities') ); - $this->factory->buildCachedCollectionPersister($em, $persister, $mapping); + $this->factory->buildCachedCollectionPersister($em, $persister, $association); } /** diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php index c4d3b444389..21f7ff373a6 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php @@ -2,17 +2,17 @@ namespace Doctrine\Tests\ORM\Cache\Persister\Collection; +use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Cache\Persister\CachedPersister; +use Doctrine\ORM\Cache\Persister\Collection\AbstractCollectionPersister; use Doctrine\ORM\Cache\Persister\Collection\CachedCollectionPersister; -use Doctrine\ORM\PersistentCollection; -use Doctrine\Tests\OrmTestCase; - use Doctrine\ORM\Cache\Region; use Doctrine\ORM\EntityManager; +use Doctrine\ORM\Mapping\AssociationMetadata; +use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\Persisters\Collection\CollectionPersister; - +use Doctrine\Tests\OrmTestCase; use Doctrine\Tests\Models\Cache\State; -use Doctrine\Common\Collections\ArrayCollection; /** * @group DDC-2183 @@ -20,17 +20,17 @@ abstract class AbstractCollectionPersisterTest extends OrmTestCase { /** - * @var \Doctrine\ORM\Cache\Region + * @var Region */ protected $region; /** - * @var \Doctrine\ORM\Persisters\Collection\CollectionPersister + * @var CollectionPersister */ protected $collectionPersister; /** - * @var \Doctrine\ORM\EntityManager + * @var EntityManager */ protected $em; @@ -65,14 +65,19 @@ abstract class AbstractCollectionPersisterTest extends OrmTestCase ]; /** - * @param \Doctrine\ORM\EntityManager $em - * @param \Doctrine\ORM\Persisters\Collection\CollectionPersister $persister - * @param \Doctrine\ORM\Cache\Region $region - * @param array $mapping + * @param EntityManager $em + * @param CollectionPersister $persister + * @param Region $region + * @param AssociationMetadata $association * - * @return \Doctrine\ORM\Cache\Persister\Collection\AbstractCollectionPersister + * @return AbstractCollectionPersister */ - abstract protected function createPersister(EntityManager $em, CollectionPersister $persister, Region $region, array $mapping); + abstract protected function createPersister( + EntityManager $em, + CollectionPersister $persister, + Region $region, + AssociationMetadata $association + ); protected function setUp() { diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersisterTest.php index bd65c20777f..febd73e04a5 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersisterTest.php @@ -4,6 +4,7 @@ use Doctrine\ORM\Cache\Region; use Doctrine\ORM\EntityManager; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Persisters\Collection\CollectionPersister; use Doctrine\ORM\Cache\Persister\Collection\NonStrictReadWriteCachedCollectionPersister; @@ -15,9 +16,14 @@ class NonStrictReadWriteCachedCollectionPersisterTest extends AbstractCollection /** * {@inheritdoc} */ - protected function createPersister(EntityManager $em, CollectionPersister $persister, Region $region, array $mapping) + protected function createPersister( + EntityManager $em, + CollectionPersister $persister, + Region $region, + AssociationMetadata $association + ) { - return new NonStrictReadWriteCachedCollectionPersister($persister, $region, $em, $mapping); + return new NonStrictReadWriteCachedCollectionPersister($persister, $region, $em, $association); } } diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersisterTest.php index 662b2dc5a55..547cf55dfba 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersisterTest.php @@ -4,6 +4,7 @@ use Doctrine\ORM\Cache\Region; use Doctrine\ORM\EntityManager; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Persisters\Collection\CollectionPersister; use Doctrine\ORM\Cache\Persister\Collection\ReadOnlyCachedCollectionPersister; @@ -15,8 +16,13 @@ class ReadOnlyCachedCollectionPersisterTest extends AbstractCollectionPersisterT /** * {@inheritdoc} */ - protected function createPersister(EntityManager $em, CollectionPersister $persister, Region $region, array $mapping) + protected function createPersister( + EntityManager $em, + CollectionPersister $persister, + Region $region, + AssociationMetadata $association + ) { - return new ReadOnlyCachedCollectionPersister($persister, $region, $em, $mapping); + return new ReadOnlyCachedCollectionPersister($persister, $region, $em, $association); } } diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersisterTest.php index e27f83fea58..0f471260639 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersisterTest.php @@ -6,6 +6,7 @@ use Doctrine\ORM\Cache\Lock; use Doctrine\ORM\Cache\Region; use Doctrine\ORM\EntityManager; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\Tests\Models\Cache\State; use Doctrine\ORM\Cache\CollectionCacheKey; use Doctrine\ORM\Persisters\Collection\CollectionPersister; @@ -31,9 +32,14 @@ class ReadWriteCachedCollectionPersisterTest extends AbstractCollectionPersister /** * {@inheritdoc} */ - protected function createPersister(EntityManager $em, CollectionPersister $persister, Region $region, array $mapping) + protected function createPersister( + EntityManager $em, + CollectionPersister $persister, + Region $region, + AssociationMetadata $association + ) { - return new ReadWriteCachedCollectionPersister($persister, $region, $em, $mapping); + return new ReadWriteCachedCollectionPersister($persister, $region, $em, $association); } /** diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php index aa857be60cb..5e2736ca88b 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php @@ -9,6 +9,9 @@ use Doctrine\ORM\Cache\Region; use Doctrine\ORM\EntityManager; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; +use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; +use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\Persisters\Entity\EntityPersister; use Doctrine\ORM\Query\ResultSetMappingBuilder; @@ -68,7 +71,7 @@ abstract class AbstractEntityPersisterTest extends OrmTestCase 'getOwningTable', 'load', 'loadById', - 'loadOneToOneEntity', + 'loadToOneEntity', 'count', 'refresh', 'loadCriteria', @@ -115,7 +118,7 @@ protected function createRegion() } /** - * @return \Doctrine\ORM\Cache\Persister\AbstractEntityPersister + * @return \Doctrine\ORM\Cache\Persister\Entity\AbstractEntityPersister */ protected function createPersisterDefault() { @@ -158,15 +161,16 @@ public function testInvokeGetInserts() public function testInvokeGetSelectSQL() { $persister = $this->createPersisterDefault(); + $assoc = new OneToManyAssociationMetadata('name'); $this->entityPersister->expects($this->once()) ->method('getSelectSQL') - ->with($this->equalTo(['name'=>'Foo']), $this->equalTo([0]), $this->equalTo(1), $this->equalTo(2), $this->equalTo(3), $this->equalTo( + ->with($this->equalTo(['name'=>'Foo']), $this->equalTo($assoc), $this->equalTo(1), $this->equalTo(2), $this->equalTo(3), $this->equalTo( [4] )) ->will($this->returnValue('SELECT * FROM foo WERE name = ?')); - self::assertEquals('SELECT * FROM foo WERE name = ?', $persister->getSelectSQL(['name'=>'Foo'], [0], 1, 2, 3, [4])); + self::assertEquals('SELECT * FROM foo WERE name = ?', $persister->getSelectSQL(['name'=>'Foo'], $assoc, 1, 2, 3, [4])); } public function testInvokeGetInsertSQL() @@ -208,13 +212,14 @@ public function testInvokeExpandCriteriaParameters() public function testInvokeSelectConditionStatementSQL() { $persister = $this->createPersisterDefault(); + $assoc = new OneToOneAssociationMetadata('id'); $this->entityPersister->expects($this->once()) ->method('getSelectConditionStatementSQL') - ->with($this->equalTo('id'), $this->equalTo(1), $this->equalTo([]), $this->equalTo('=')) + ->with($this->equalTo('id'), $this->equalTo(1), $this->equalTo($assoc), $this->equalTo('=')) ->will($this->returnValue('name = 1')); - self::assertEquals('name = 1', $persister->getSelectConditionStatementSQL('id', 1, [], '=')); + self::assertEquals('name = 1', $persister->getSelectConditionStatementSQL('id', 1, $assoc, '=')); } public function testInvokeExecuteInserts() @@ -271,18 +276,23 @@ public function testInvokeGetOwningTable() public function testInvokeLoad() { $persister = $this->createPersisterDefault(); + $assoc = new OneToOneAssociationMetadata('id'); $entity = new Country("Foo"); $this->entityPersister->expects($this->once()) ->method('load') - ->with($this->equalTo(['id' => 1]), $this->equalTo($entity), $this->equalTo([0]), $this->equalTo( - [1] - ), $this->equalTo(2), $this->equalTo(3), $this->equalTo( - [4] - )) + ->with( + $this->equalTo(['id' => 1]), + $this->equalTo($entity), + $this->equalTo($assoc), + $this->equalTo([1]), + $this->equalTo(2), + $this->equalTo(3), + $this->equalTo([4]) + ) ->will($this->returnValue($entity)); - self::assertEquals($entity, $persister->load(['id' => 1], $entity, [0], [1], 2, 3, [4])); + self::assertEquals($entity, $persister->load(['id' => 1], $entity, $assoc, [1], 2, 3, [4])); } public function testInvokeLoadAll() @@ -320,17 +330,18 @@ public function testInvokeLoadById() self::assertEquals($entity, $persister->loadById(['id' => 1], $entity)); } - public function testInvokeLoadOneToOneEntity() + public function testInvokeLoadToOneEntity() { $persister = $this->createPersisterDefault(); + $assoc = new OneToOneAssociationMetadata('name'); $entity = new Country("Foo"); $this->entityPersister->expects($this->once()) - ->method('loadOneToOneEntity') - ->with($this->equalTo([]), $this->equalTo('foo'), $this->equalTo(['id' => 11])) + ->method('loadToOneEntity') + ->with($this->equalTo($assoc), $this->equalTo('foo'), $this->equalTo(['id' => 11])) ->will($this->returnValue($entity)); - self::assertEquals($entity, $persister->loadOneToOneEntity([], 'foo', ['id' => 11])); + self::assertEquals($entity, $persister->loadToOneEntity($assoc, 'foo', ['id' => 11])); } public function testInvokeRefresh() @@ -371,33 +382,35 @@ public function testInvokeLoadCriteria() public function testInvokeGetManyToManyCollection() { $persister = $this->createPersisterDefault(); + $assoc = new ManyToManyAssociationMetadata('name'); $entity = new Country("Foo"); $this->entityPersister->expects($this->once()) ->method('getManyToManyCollection') - ->with($this->equalTo([]), $this->equalTo('Foo'), $this->equalTo(1), $this->equalTo(2)) + ->with($this->equalTo($assoc), $this->equalTo('Foo'), $this->equalTo(1), $this->equalTo(2)) ->will($this->returnValue([$entity])); - self::assertEquals([$entity], $persister->getManyToManyCollection([], 'Foo', 1 ,2)); + self::assertEquals([$entity], $persister->getManyToManyCollection($assoc, 'Foo', 1 ,2)); } public function testInvokeGetOneToManyCollection() { $persister = $this->createPersisterDefault(); + $assoc = new OneToManyAssociationMetadata('name'); $entity = new Country("Foo"); $this->entityPersister->expects($this->once()) ->method('getOneToManyCollection') - ->with($this->equalTo([]), $this->equalTo('Foo'), $this->equalTo(1), $this->equalTo(2)) + ->with($this->equalTo($assoc), $this->equalTo('Foo'), $this->equalTo(1), $this->equalTo(2)) ->will($this->returnValue([$entity])); - self::assertEquals([$entity], $persister->getOneToManyCollection([], 'Foo', 1 ,2)); + self::assertEquals([$entity], $persister->getOneToManyCollection($assoc, 'Foo', 1 ,2)); } public function testInvokeLoadManyToManyCollection() { $mapping = $this->em->getClassMetadata(Country::class); - $assoc = ['type' => 1]; + $assoc = new ManyToManyAssociationMetadata('name'); $coll = new PersistentCollection($this->em, $mapping, new ArrayCollection()); $persister = $this->createPersisterDefault(); $entity = new Country("Foo"); @@ -413,7 +426,7 @@ public function testInvokeLoadManyToManyCollection() public function testInvokeLoadOneToManyCollection() { $mapping = $this->em->getClassMetadata(Country::class); - $assoc = ['type' => 1]; + $assoc = new OneToManyAssociationMetadata('name'); $coll = new PersistentCollection($this->em, $mapping, new ArrayCollection()); $persister = $this->createPersisterDefault(); $entity = new Country("Foo"); diff --git a/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php index f581fc1a178..42cbb466926 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php @@ -41,21 +41,25 @@ public function setUp() $this->useModelSet('ddc2504'); parent::setUp(); - $class = $this->em->getClassMetadata(CmsUser::class); - $class->associationMappings['groups']['fetch'] = FetchMode::EXTRA_LAZY; - $class->associationMappings['groups']['indexBy'] = 'name'; - $class->associationMappings['articles']['fetch'] = FetchMode::EXTRA_LAZY; - $class->associationMappings['articles']['indexBy'] = 'topic'; - $class->associationMappings['phonenumbers']['fetch'] = FetchMode::EXTRA_LAZY; - $class->associationMappings['phonenumbers']['indexBy'] = 'phonenumber'; + $class = $this->em->getClassMetadata(CmsUser::class); + + $class->associationMappings['groups']->setFetchMode(FetchMode::EXTRA_LAZY); + $class->associationMappings['articles']->setFetchMode(FetchMode::EXTRA_LAZY); + $class->associationMappings['phonenumbers']->setFetchMode(FetchMode::EXTRA_LAZY); - unset($class->associationMappings['phonenumbers']['cache']); - unset($class->associationMappings['articles']['cache']); - unset($class->associationMappings['users']['cache']); + $class->associationMappings['groups']->setIndexedBy('name'); + $class->associationMappings['articles']->setIndexedBy('topic'); + $class->associationMappings['phonenumbers']->setIndexedBy('phonenumber'); + + $class->associationMappings['groups']->setCache(null); + $class->associationMappings['articles']->setCache(null); + $class->associationMappings['phonenumbers']->setCache(null); $class = $this->em->getClassMetadata(CmsGroup::class); - $class->associationMappings['users']['fetch'] = FetchMode::EXTRA_LAZY; - $class->associationMappings['users']['indexBy'] = 'username'; + + $class->associationMappings['users']->setFetchMode(FetchMode::EXTRA_LAZY); + + $class->associationMappings['users']->setIndexedBy('username'); $this->loadFixture(); } @@ -65,18 +69,20 @@ public function tearDown() parent::tearDown(); $class = $this->em->getClassMetadata(CmsUser::class); - $class->associationMappings['groups']['fetch'] = FetchMode::LAZY; - $class->associationMappings['articles']['fetch'] = FetchMode::LAZY; - $class->associationMappings['phonenumbers']['fetch'] = FetchMode::LAZY; - unset($class->associationMappings['groups']['indexBy']); - unset($class->associationMappings['articles']['indexBy']); - unset($class->associationMappings['phonenumbers']['indexBy']); + $class->associationMappings['groups']->setFetchMode(FetchMode::LAZY); + $class->associationMappings['articles']->setFetchMode(FetchMode::LAZY); + $class->associationMappings['phonenumbers']->setFetchMode(FetchMode::LAZY); + + $class->associationMappings['groups']->setIndexedBy(null); + $class->associationMappings['articles']->setIndexedBy(null); + $class->associationMappings['phonenumbers']->setIndexedBy(null); $class = $this->em->getClassMetadata(CmsGroup::class); - $class->associationMappings['users']['fetch'] = FetchMode::LAZY; - unset($class->associationMappings['users']['indexBy']); + $class->associationMappings['users']->setFetchMode(FetchMode::LAZY); + + $class->associationMappings['users']->setIndexedBy(null); } /** @@ -853,7 +859,7 @@ public function testContainsKeyIndexByOneToMany() public function testContainsKeyIndexByOneToManyJoinedInheritance() { $class = $this->em->getClassMetadata(DDC2504OtherClass::class); - $class->associationMappings['childClasses']['indexBy'] = 'id'; + $class->associationMappings['childClasses']->setIndexedBy('id'); $otherClass = $this->em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); @@ -897,7 +903,7 @@ public function testContainsKeyIndexByManyToManyNonOwning() public function testContainsKeyIndexByWithPkManyToMany() { $class = $this->em->getClassMetadata(CmsUser::class); - $class->associationMappings['groups']['indexBy'] = 'id'; + $class->associationMappings['groups']->setIndexedBy('id'); $user = $this->em->find(CmsUser::class, $this->userId2); @@ -912,7 +918,7 @@ public function testContainsKeyIndexByWithPkManyToMany() public function testContainsKeyIndexByWithPkManyToManyNonOwning() { $class = $this->em->getClassMetadata(CmsGroup::class); - $class->associationMappings['users']['indexBy'] = 'id'; + $class->associationMappings['users']->setIndexedBy('id'); $group = $this->em->find(CmsGroup::class, $this->groupId); diff --git a/tests/Doctrine/Tests/ORM/Functional/ManyToManyBasicAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/ManyToManyBasicAssociationTest.php index 4481a92a389..97098e4854b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ManyToManyBasicAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ManyToManyBasicAssociationTest.php @@ -4,6 +4,7 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Criteria; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\UnitOfWork; use Doctrine\Tests\Models\CMS\CmsGroup; @@ -268,7 +269,7 @@ public function testWorkWithDqlHydratedEmptyCollection() ->setParameter(1, $user->getId()) ->getSingleResult(); self::assertEquals(0, count($newUser->groups)); - self::assertInternalType('array', $newUser->groups->getMapping()); + self::assertInstanceOf(ManyToManyAssociationMetadata::class, $newUser->groups->getMapping()); $newUser->addGroup($group); diff --git a/tests/Doctrine/Tests/ORM/Functional/ManyToManySelfReferentialAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/ManyToManySelfReferentialAssociationTest.php index 518187fd498..aae8d686607 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ManyToManySelfReferentialAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ManyToManySelfReferentialAssociationTest.php @@ -25,12 +25,17 @@ class ManyToManySelfReferentialAssociationTest extends AbstractManyToManyAssocia protected function setUp() { $this->useModelSet('ecommerce'); + parent::setUp(); + $this->firstProduct = new ECommerceProduct(); $this->secondProduct = new ECommerceProduct(); $this->firstRelated = new ECommerceProduct(); + $this->firstRelated->setName("Business"); + $this->secondRelated = new ECommerceProduct(); + $this->secondRelated->setName("Home"); } @@ -38,34 +43,35 @@ public function testSavesAManyToManyAssociationWithCascadeSaveSet() { $this->firstProduct->addRelated($this->firstRelated); $this->firstProduct->addRelated($this->secondRelated); + $this->em->persist($this->firstProduct); $this->em->flush(); - self::assertForeignKeysContain($this->firstProduct->getId(), - $this->firstRelated->getId()); - self::assertForeignKeysContain($this->firstProduct->getId(), - $this->secondRelated->getId()); + self::assertForeignKeysContain($this->firstProduct->getId(), $this->firstRelated->getId()); + self::assertForeignKeysContain($this->firstProduct->getId(), $this->secondRelated->getId()); } public function testRemovesAManyToManyAssociation() { $this->firstProduct->addRelated($this->firstRelated); $this->firstProduct->addRelated($this->secondRelated); + $this->em->persist($this->firstProduct); + $this->firstProduct->removeRelated($this->firstRelated); $this->em->flush(); - self::assertForeignKeysNotContain($this->firstProduct->getId(), - $this->firstRelated->getId()); - self::assertForeignKeysContain($this->firstProduct->getId(), - $this->secondRelated->getId()); + self::assertForeignKeysNotContain($this->firstProduct->getId(), $this->firstRelated->getId()); + self::assertForeignKeysContain($this->firstProduct->getId(), $this->secondRelated->getId()); } public function testEagerLoadsOwningSide() { $this->createLoadingFixture(); + $products = $this->findProducts(); + self::assertLoadingOfOwningSide($products); } @@ -74,10 +80,11 @@ public function testLazyLoadsOwningSide() $this->createLoadingFixture(); $metadata = $this->em->getClassMetadata(ECommerceProduct::class); - $metadata->associationMappings['related']['fetch'] = FetchMode::LAZY; + $metadata->associationMappings['related']->setFetchMode(FetchMode::LAZY); $query = $this->em->createQuery('SELECT p FROM Doctrine\Tests\Models\ECommerce\ECommerceProduct p'); $products = $query->getResult(); + self::assertLoadingOfOwningSide($products); } diff --git a/tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php index f7d8f8e0d4e..2d1c397d6a4 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php @@ -25,11 +25,17 @@ class ManyToManyUnidirectionalAssociationTest extends AbstractManyToManyAssociat protected function setUp() { $this->useModelSet('ecommerce'); + parent::setUp(); + $this->firstProduct = new ECommerceProduct(); + $this->firstProduct->setName('Doctrine 1.x Manual'); + $this->secondProduct = new ECommerceProduct(); + $this->secondProduct->setName('Doctrine 2.x Manual'); + $this->firstCart = new ECommerceCart(); $this->secondCart = new ECommerceCart(); } @@ -38,6 +44,7 @@ public function testSavesAManyToManyAssociationWithCascadeSaveSet() { $this->firstCart->addProduct($this->firstProduct); $this->firstCart->addProduct($this->secondProduct); + $this->em->persist($this->firstCart); $this->em->flush(); @@ -79,7 +86,7 @@ public function testLazyLoadsCollection() { $this->createFixture(); $metadata = $this->em->getClassMetadata(ECommerceCart::class); - $metadata->associationMappings['products']['fetch'] = FetchMode::LAZY; + $metadata->associationMappings['products']->setFetchMode(FetchMode::LAZY); $query = $this->em->createQuery('SELECT c FROM Doctrine\Tests\Models\ECommerce\ECommerceCart c'); $result = $query->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToManySelfReferentialAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToManySelfReferentialAssociationTest.php index 70a7f5222e7..f88d6610ed6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToManySelfReferentialAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToManySelfReferentialAssociationTest.php @@ -91,7 +91,7 @@ public function testLazyLoadsOneToManyAssociation() { $this->createFixture(); $metadata = $this->em->getClassMetadata(ECommerceCategory::class); - $metadata->associationMappings['children']['fetch'] = FetchMode::LAZY; + $metadata->associationMappings['children']->setFetchMode(FetchMode::LAZY); $query = $this->em->createQuery('select c from Doctrine\Tests\Models\ECommerce\ECommerceCategory c order by c.id asc'); $result = $query->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneBidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneBidirectionalAssociationTest.php index 332dcd47b63..7d7d782b4f7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneBidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneBidirectionalAssociationTest.php @@ -70,7 +70,7 @@ public function testEagerLoad() public function testLazyLoadsObjectsOnTheOwningSide() { $this->createFixture(); $metadata = $this->em->getClassMetadata(ECommerceCart::class); - $metadata->associationMappings['customer']['fetchMode'] = FetchMode::LAZY; + $metadata->associationMappings['customer']->setFetchMode(FetchMode::LAZY); $query = $this->em->createQuery('select c from Doctrine\Tests\Models\ECommerce\ECommerceCart c'); $result = $query->getResult(); @@ -84,7 +84,7 @@ public function testInverseSideIsNeverLazy() { $this->createFixture(); $metadata = $this->em->getClassMetadata(ECommerceCustomer::class); - $metadata->associationMappings['mentor']['fetch'] = FetchMode::EAGER; + $metadata->associationMappings['mentor']->setFetchMode(FetchMode::EAGER); $query = $this->em->createQuery('select c from Doctrine\Tests\Models\ECommerce\ECommerceCustomer c'); $result = $query->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneSelfReferentialAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneSelfReferentialAssociationTest.php index d4aeeda9505..45be7ad2ff7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneSelfReferentialAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneSelfReferentialAssociationTest.php @@ -76,7 +76,7 @@ public function testLazyLoadsAssociation() $this->createFixture(); $metadata = $this->em->getClassMetadata(ECommerceCustomer::class); - $metadata->associationMappings['mentor']['fetch'] = FetchMode::LAZY; + $metadata->associationMappings['mentor']->setFetchMode(FetchMode::LAZY); $query = $this->em->createQuery("select c from Doctrine\Tests\Models\ECommerce\ECommerceCustomer c where c.name='Luke Skywalker'"); $result = $query->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php index 007c27f6d46..bd693b11ef7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php @@ -63,7 +63,7 @@ public function _testEagerLoad() public function testLazyLoadsObjects() { $this->createFixture(); $metadata = $this->em->getClassMetadata(ECommerceProduct::class); - $metadata->associationMappings['shipping']['fetch'] = FetchMode::LAZY; + $metadata->associationMappings['shipping']->setFetchMode(FetchMode::LAZY); $query = $this->em->createQuery('select p from Doctrine\Tests\Models\ECommerce\ECommerceProduct p'); $result = $query->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php index b2fdca7419e..e30e3071aba 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php @@ -43,6 +43,7 @@ public function setUp() { $this->useModelSet('cms'); $this->useModelSet('company'); + parent::setUp(); } @@ -51,8 +52,8 @@ public function tearDown() parent::tearDown(); $class = $this->em->getClassMetadata(CmsUser::class); - $class->associationMappings['groups']['fetch'] = FetchMode::LAZY; - $class->associationMappings['articles']['fetch'] = FetchMode::LAZY; + $class->associationMappings['groups']->setFetchMode(FetchMode::LAZY); + $class->associationMappings['articles']->setFetchMode(FetchMode::LAZY); } public function testConfigureFilter() @@ -523,8 +524,8 @@ public function testWhereOrFilter() private function loadLazyFixtureData() { $class = $this->em->getClassMetadata(CmsUser::class); - $class->associationMappings['articles']['fetch'] = FetchMode::EXTRA_LAZY; - $class->associationMappings['groups']['fetch'] = FetchMode::EXTRA_LAZY; + $class->associationMappings['articles']->setFetchMode(FetchMode::EXTRA_LAZY); + $class->associationMappings['groups']->setFetchMode(FetchMode::EXTRA_LAZY); $this->loadFixtureData(); } @@ -831,10 +832,14 @@ private function loadCompanySingleTableInheritanceFixtureData() private function useCompletedContractFilter() { $conf = $this->em->getConfiguration(); - $conf->addFilter("completed_contract", "\Doctrine\Tests\ORM\Functional\CompletedContractFilter"); - $this->em->getFilters() + + $conf->addFilter("completed_contract", CompletedContractFilter::class); + + $this->em + ->getFilters() ->enable("completed_contract") - ->setParameter("completed", true, DBALType::BOOLEAN); + ->setParameter("completed", true, DBALType::BOOLEAN) + ; } public function testManyToMany_ExtraLazyCountWithFilterOnSTI() @@ -1170,7 +1175,7 @@ public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAli return ""; } - return $targetTableAlias.'.completed = ' . $this->getParameter('completed'); + return $targetTableAlias.'."completed" = ' . $this->getParameter('completed'); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheExtraLazyCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheExtraLazyCollectionTest.php index 9fc349c30b9..6f1a2b53d3b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheExtraLazyCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheExtraLazyCollectionTest.php @@ -20,8 +20,8 @@ public function setUp() $sourceEntity = $this->em->getClassMetadata(Travel::class); $targetEntity = $this->em->getClassMetadata(City::class); - $sourceEntity->associationMappings['visitedCities']['fetch'] = FetchMode::EXTRA_LAZY; - $targetEntity->associationMappings['travels']['fetch'] = FetchMode::EXTRA_LAZY; + $sourceEntity->associationMappings['visitedCities']->setFetchMode(FetchMode::EXTRA_LAZY); + $targetEntity->associationMappings['travels']->setFetchMode(FetchMode::EXTRA_LAZY); } public function tearDown() @@ -31,8 +31,8 @@ public function tearDown() $sourceEntity = $this->em->getClassMetadata(Travel::class); $targetEntity = $this->em->getClassMetadata(City::class); - $sourceEntity->associationMappings['visitedCities']['fetch'] = FetchMode::LAZY; - $targetEntity->associationMappings['travels']['fetch'] = FetchMode::LAZY; + $sourceEntity->associationMappings['visitedCities']->setFetchMode(FetchMode::LAZY); + $targetEntity->associationMappings['travels']->setFetchMode(FetchMode::LAZY); } public function testCacheCountAfterAddThenFlush() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php index f48b8328b37..d06eeea0923 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php @@ -24,9 +24,9 @@ public function setUp() $class = $this->em->getClassMetadata(Models\Legacy\LegacyUser::class); - $class->associationMappings['articles']['fetch'] = FetchMode::EXTRA_LAZY; - $class->associationMappings['references']['fetch'] = FetchMode::EXTRA_LAZY; - $class->associationMappings['cars']['fetch'] = FetchMode::EXTRA_LAZY; + $class->associationMappings['articles']->setFetchMode(FetchMode::EXTRA_LAZY); + $class->associationMappings['references']->setFetchMode(FetchMode::EXTRA_LAZY); + $class->associationMappings['cars']->setFetchMode(FetchMode::EXTRA_LAZY); $this->loadFixture(); } @@ -37,9 +37,9 @@ public function tearDown() $class = $this->em->getClassMetadata(Models\Legacy\LegacyUser::class); - $class->associationMappings['articles']['fetch'] = FetchMode::LAZY; - $class->associationMappings['references']['fetch'] = FetchMode::LAZY; - $class->associationMappings['cars']['fetch'] = FetchMode::LAZY; + $class->associationMappings['articles']->setFetchMode(FetchMode::LAZY); + $class->associationMappings['references']->setFetchMode(FetchMode::LAZY); + $class->associationMappings['cars']->setFetchMode(FetchMode::LAZY); } public function testCountNotInitializesLegacyCollection() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1643Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1643Test.php index 8ff45e768ea..07be75e5fbc 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1643Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1643Test.php @@ -1,6 +1,7 @@ useModelSet('cms'); + parent::setUp(); $user1 = new CmsUser(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3300Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3300Test.php index 0e82315ebd5..cec454e59aa 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3300Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3300Test.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; use Doctrine\ORM\Annotation as ORM; +use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; use Doctrine\ORM\Tools\ResolveTargetEntityListener; /** @@ -16,23 +17,19 @@ public function testResolveTargetEntitiesChangesDiscriminatorMapValues() $resolveTargetEntity->addResolveTargetEntity( DDC3300BossInterface::class, - DDC3300Boss::class, - [] + DDC3300Boss::class ); $resolveTargetEntity->addResolveTargetEntity( DDC3300EmployeeInterface::class, - DDC3300Employee::class, - [] + DDC3300Employee::class ); $this->em->getEventManager()->addEventSubscriber($resolveTargetEntity); - $this->schemaTool->createSchema( - [ + $this->schemaTool->createSchema([ $this->em->getClassMetadata(DDC3300Person::class), - ] - ); + ]); $boss = new DDC3300Boss(); $employee = new DDC3300Employee(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php index 54e57253301..5bd5af1e07b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php @@ -11,13 +11,11 @@ protected function setUp() parent::setUp(); //$this->em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger); try { - $this->schemaTool->createSchema( - [ + $this->schemaTool->createSchema([ $this->em->getClassMetadata(DDC599Item::class), $this->em->getClassMetadata(DDC599Subitem::class), $this->em->getClassMetadata(DDC599Child::class), - ] - ); + ]); } catch (\Exception $ignored) {} } @@ -69,7 +67,7 @@ public function testCascadeRemoveOnChildren() $class = $this->em->getClassMetadata(DDC599Subitem::class); self::assertArrayHasKey('children', $class->associationMappings); - self::assertContains('remove', $class->associationMappings['children']['cascade']); + self::assertContains('remove', $class->associationMappings['children']->getCascade()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdForeignKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdForeignKeyTest.php index 7d99753d31d..f59421b1be8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdForeignKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdForeignKeyTest.php @@ -44,16 +44,6 @@ public function setUp() $this->em->clear(); } - public static function tearDownAfterClass() - { - $conn = static::$sharedConn; - - $conn->executeUpdate('DROP TABLE vct_xref_manytomany_compositeid_foreignkey'); - $conn->executeUpdate('DROP TABLE vct_owning_manytomany_compositeid_foreignkey'); - $conn->executeUpdate('DROP TABLE vct_inversed_manytomany_compositeid_foreignkey'); - $conn->executeUpdate('DROP TABLE vct_auxiliary'); - } - public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { $conn = $this->em->getConnection(); @@ -70,50 +60,32 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() self::assertEquals('tuv', $conn->fetchColumn('SELECT owning_id FROM vct_xref_manytomany_compositeid_foreignkey LIMIT 1')); } - /** - * @depends testThatTheValueOfIdentifiersAreConvertedInTheDatabase - */ public function testThatEntitiesAreFetchedFromTheDatabase() { - $auxiliary = $this->em->find( - Models\ValueConversionType\AuxiliaryEntity::class, - 'abc' - ); + $auxiliary = $this->em->find(Entity\AuxiliaryEntity::class, 'abc'); $inversed = $this->em->find( - Models\ValueConversionType\InversedManyToManyCompositeIdForeignKeyEntity::class, + Entity\InversedManyToManyCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => 'abc'] ); - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToManyCompositeIdForeignKeyEntity::class, - 'ghi' - ); + $owning = $this->em->find(Entity\OwningManyToManyCompositeIdForeignKeyEntity::class, 'ghi'); - self::assertInstanceOf(Models\ValueConversionType\AuxiliaryEntity::class, $auxiliary); - self::assertInstanceOf(Models\ValueConversionType\InversedManyToManyCompositeIdForeignKeyEntity::class, $inversed); - self::assertInstanceOf(Models\ValueConversionType\OwningManyToManyCompositeIdForeignKeyEntity::class, $owning); + self::assertInstanceOf(Entity\AuxiliaryEntity::class, $auxiliary); + self::assertInstanceOf(Entity\InversedManyToManyCompositeIdForeignKeyEntity::class, $inversed); + self::assertInstanceOf(Entity\OwningManyToManyCompositeIdForeignKeyEntity::class, $owning); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase() { - $auxiliary = $this->em->find( - Models\ValueConversionType\AuxiliaryEntity::class, - 'abc' - ); + $auxiliary = $this->em->find(Entity\AuxiliaryEntity::class, 'abc'); $inversed = $this->em->find( - Models\ValueConversionType\InversedManyToManyCompositeIdForeignKeyEntity::class, + Entity\InversedManyToManyCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => 'abc'] ); - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToManyCompositeIdForeignKeyEntity::class, - 'ghi' - ); + $owning = $this->em->find(Entity\OwningManyToManyCompositeIdForeignKeyEntity::class, 'ghi'); self::assertEquals('abc', $auxiliary->id4); self::assertEquals('def', $inversed->id1); @@ -121,54 +93,35 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr self::assertEquals('ghi', $owning->id2); } - /** - * @depends testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase - */ public function testThatInversedEntityIsFetchedFromTheDatabaseUsingAuxiliaryEntityAsId() { - $auxiliary = $this->em->find( - Models\ValueConversionType\AuxiliaryEntity::class, - 'abc' - ); + $auxiliary = $this->em->find(Entity\AuxiliaryEntity::class, 'abc'); $inversed = $this->em->find( - Models\ValueConversionType\InversedManyToManyCompositeIdForeignKeyEntity::class, + Entity\InversedManyToManyCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => $auxiliary] ); - self::assertInstanceOf(Models\ValueConversionType\InversedManyToManyCompositeIdForeignKeyEntity::class, $inversed); + self::assertInstanceOf(Entity\InversedManyToManyCompositeIdForeignKeyEntity::class, $inversed); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheCollectionFromOwningToInversedIsLoaded() { - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToManyCompositeIdForeignKeyEntity::class, - 'ghi' - ); + $owning = $this->em->find(Entity\OwningManyToManyCompositeIdForeignKeyEntity::class, 'ghi'); self::assertCount(1, $owning->associatedEntities); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheCollectionFromInversedToOwningIsLoaded() { $inversed = $this->em->find( - Models\ValueConversionType\InversedManyToManyCompositeIdForeignKeyEntity::class, + Entity\InversedManyToManyCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => 'abc'] ); self::assertCount(1, $inversed->associatedEntities); } - /** - * @depends testThatTheCollectionFromOwningToInversedIsLoaded - * @depends testThatTheCollectionFromInversedToOwningIsLoaded - */ public function testThatTheJoinTableRowsAreRemovedWhenRemovingTheAssociation() { $conn = $this->em->getConnection(); @@ -176,7 +129,7 @@ public function testThatTheJoinTableRowsAreRemovedWhenRemovingTheAssociation() // remove association $inversed = $this->em->find( - Models\ValueConversionType\InversedManyToManyCompositeIdForeignKeyEntity::class, + Entity\InversedManyToManyCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => 'abc'] ); diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdTest.php index 39367dbc427..a3d39324202 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyCompositeIdTest.php @@ -39,15 +39,6 @@ public function setUp() $this->em->clear(); } - public static function tearDownAfterClass() - { - $conn = static::$sharedConn; - - $conn->executeUpdate('DROP TABLE vct_xref_manytomany_compositeid'); - $conn->executeUpdate('DROP TABLE vct_owning_manytomany_compositeid'); - $conn->executeUpdate('DROP TABLE vct_inversed_manytomany_compositeid'); - } - public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { $conn = $this->em->getConnection(); @@ -62,75 +53,53 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() self::assertEquals('tuv', $conn->fetchColumn('SELECT owning_id FROM vct_xref_manytomany_compositeid LIMIT 1')); } - /** - * @depends testThatTheValueOfIdentifiersAreConvertedInTheDatabase - */ public function testThatEntitiesAreFetchedFromTheDatabase() { $inversed = $this->em->find( - Models\ValueConversionType\InversedManyToManyCompositeIdEntity::class, + Entity\InversedManyToManyCompositeIdEntity::class, ['id1' => 'abc', 'id2' => 'def'] ); - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToManyCompositeIdEntity::class, - 'ghi' - ); + $owning = $this->em->find(Entity\OwningManyToManyCompositeIdEntity::class, 'ghi'); - self::assertInstanceOf(Models\ValueConversionType\InversedManyToManyCompositeIdEntity::class, $inversed); - self::assertInstanceOf(Models\ValueConversionType\OwningManyToManyCompositeIdEntity::class, $owning); + self::assertInstanceOf(Entity\InversedManyToManyCompositeIdEntity::class, $inversed); + self::assertInstanceOf(Entity\OwningManyToManyCompositeIdEntity::class, $owning); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase() { $inversed = $this->em->find( - Models\ValueConversionType\InversedManyToManyCompositeIdEntity::class, + Entity\InversedManyToManyCompositeIdEntity::class, ['id1' => 'abc', 'id2' => 'def'] ); - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToManyCompositeIdEntity::class, - 'ghi' - ); + $owning = $this->em->find(Entity\OwningManyToManyCompositeIdEntity::class, 'ghi'); self::assertEquals('abc', $inversed->id1); self::assertEquals('def', $inversed->id2); self::assertEquals('ghi', $owning->id3); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheCollectionFromOwningToInversedIsLoaded() { $owning = $this->em->find( - Models\ValueConversionType\OwningManyToManyCompositeIdEntity::class, + Entity\OwningManyToManyCompositeIdEntity::class, 'ghi' ); self::assertCount(1, $owning->associatedEntities); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheCollectionFromInversedToOwningIsLoaded() { $inversed = $this->em->find( - Models\ValueConversionType\InversedManyToManyCompositeIdEntity::class, + Entity\InversedManyToManyCompositeIdEntity::class, ['id1' => 'abc', 'id2' => 'def'] ); self::assertCount(1, $inversed->associatedEntities); } - /** - * @depends testThatTheCollectionFromOwningToInversedIsLoaded - * @depends testThatTheCollectionFromInversedToOwningIsLoaded - */ public function testThatTheJoinTableRowsAreRemovedWhenRemovingTheAssociation() { $conn = $this->em->getConnection(); @@ -138,7 +107,7 @@ public function testThatTheJoinTableRowsAreRemovedWhenRemovingTheAssociation() // remove association $inversed = $this->em->find( - Models\ValueConversionType\InversedManyToManyCompositeIdEntity::class, + Entity\InversedManyToManyCompositeIdEntity::class, ['id1' => 'abc', 'id2' => 'def'] ); diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyExtraLazyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyExtraLazyTest.php index e51edb91b7b..0b5f4d2c59c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyExtraLazyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyExtraLazyTest.php @@ -20,6 +20,7 @@ class ManyToManyExtraLazyTest extends OrmFunctionalTestCase public function setUp() { $this->useModelSet('vct_manytomany_extralazy'); + parent::setUp(); $inversed1 = new Entity\InversedManyToManyExtraLazyEntity(); @@ -53,101 +54,60 @@ public function setUp() $this->em->clear(); } - public static function tearDownAfterClass() - { - $conn = static::$sharedConn; - - $conn->executeUpdate('DROP TABLE vct_xref_manytomany_extralazy'); - $conn->executeUpdate('DROP TABLE vct_owning_manytomany_extralazy'); - $conn->executeUpdate('DROP TABLE vct_inversed_manytomany_extralazy'); - } - public function testThatTheExtraLazyCollectionFromOwningToInversedIsCounted() { - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToManyExtraLazyEntity::class, - 'ghi' - ); + $owning = $this->em->find(Entity\OwningManyToManyExtraLazyEntity::class, 'ghi'); self::assertEquals(2, $owning->associatedEntities->count()); } public function testThatTheExtraLazyCollectionFromInversedToOwningIsCounted() { - $inversed = $this->em->find( - Models\ValueConversionType\InversedManyToManyExtraLazyEntity::class, - 'abc' - ); + $inversed = $this->em->find(Entity\InversedManyToManyExtraLazyEntity::class, 'abc'); self::assertEquals(2, $inversed->associatedEntities->count()); } public function testThatTheExtraLazyCollectionFromOwningToInversedContainsAnEntity() { - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToManyExtraLazyEntity::class, - 'ghi' - ); - - $inversed = $this->em->find( - Models\ValueConversionType\InversedManyToManyExtraLazyEntity::class, - 'abc' - ); + $owning = $this->em->find(Entity\OwningManyToManyExtraLazyEntity::class, 'ghi'); + $inversed = $this->em->find(Entity\InversedManyToManyExtraLazyEntity::class, 'abc'); self::assertTrue($owning->associatedEntities->contains($inversed)); } public function testThatTheExtraLazyCollectionFromInversedToOwningContainsAnEntity() { - $inversed = $this->em->find( - Models\ValueConversionType\InversedManyToManyExtraLazyEntity::class, - 'abc' - ); - - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToManyExtraLazyEntity::class, - 'ghi' - ); + $inversed = $this->em->find(Entity\InversedManyToManyExtraLazyEntity::class, 'abc'); + $owning = $this->em->find(Entity\OwningManyToManyExtraLazyEntity::class, 'ghi'); self::assertTrue($inversed->associatedEntities->contains($owning)); } public function testThatTheExtraLazyCollectionFromOwningToInversedContainsAnIndexByKey() { - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToManyExtraLazyEntity::class, - 'ghi' - ); + $owning = $this->em->find(Entity\OwningManyToManyExtraLazyEntity::class, 'ghi'); self::assertTrue($owning->associatedEntities->containsKey('abc')); } public function testThatTheExtraLazyCollectionFromInversedToOwningContainsAnIndexByKey() { - $inversed = $this->em->find( - Models\ValueConversionType\InversedManyToManyExtraLazyEntity::class, - 'abc' - ); + $inversed = $this->em->find(Entity\InversedManyToManyExtraLazyEntity::class, 'abc'); self::assertTrue($inversed->associatedEntities->containsKey('ghi')); } public function testThatASliceOfTheExtraLazyCollectionFromOwningToInversedIsLoaded() { - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToManyExtraLazyEntity::class, - 'ghi' - ); + $owning = $this->em->find(Entity\OwningManyToManyExtraLazyEntity::class, 'ghi'); self::assertCount(1, $owning->associatedEntities->slice(0, 1)); } public function testThatASliceOfTheExtraLazyCollectionFromInversedToOwningIsLoaded() { - $inversed = $this->em->find( - Models\ValueConversionType\InversedManyToManyExtraLazyEntity::class, - 'abc' - ); + $inversed = $this->em->find(Entity\InversedManyToManyExtraLazyEntity::class, 'abc'); self::assertCount(1, $inversed->associatedEntities->slice(1, 1)); } diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyTest.php index 438803c0d75..7bcb56a1aa9 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/ManyToManyTest.php @@ -38,15 +38,6 @@ public function setUp() $this->em->clear(); } - public static function tearDownAfterClass() - { - $conn = static::$sharedConn; - - $conn->executeUpdate('DROP TABLE vct_xref_manytomany'); - $conn->executeUpdate('DROP TABLE vct_owning_manytomany'); - $conn->executeUpdate('DROP TABLE vct_inversed_manytomany'); - } - public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { $conn = $this->em->getConnection(); @@ -59,84 +50,45 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() self::assertEquals('qrs', $conn->fetchColumn('SELECT owning_id FROM vct_xref_manytomany LIMIT 1')); } - /** - * @depends testThatTheValueOfIdentifiersAreConvertedInTheDatabase - */ public function testThatEntitiesAreFetchedFromTheDatabase() { - $inversed = $this->em->find( - Models\ValueConversionType\InversedManyToManyEntity::class, - 'abc' - ); - - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToManyEntity::class, - 'def' - ); - - self::assertInstanceOf(Models\ValueConversionType\InversedManyToManyEntity::class, $inversed); - self::assertInstanceOf(Models\ValueConversionType\OwningManyToManyEntity::class, $owning); + $inversed = $this->em->find(Entity\InversedManyToManyEntity::class, 'abc'); + $owning = $this->em->find(Entity\OwningManyToManyEntity::class, 'def'); + + self::assertInstanceOf(Entity\InversedManyToManyEntity::class, $inversed); + self::assertInstanceOf(Entity\OwningManyToManyEntity::class, $owning); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase() { - $inversed = $this->em->find( - Models\ValueConversionType\InversedManyToManyEntity::class, - 'abc' - ); - - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToManyEntity::class, - 'def' - ); + $inversed = $this->em->find(Entity\InversedManyToManyEntity::class, 'abc'); + $owning = $this->em->find(Entity\OwningManyToManyEntity::class, 'def'); self::assertEquals('abc', $inversed->id1); self::assertEquals('def', $owning->id2); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheCollectionFromOwningToInversedIsLoaded() { - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToManyEntity::class, - 'def' - ); + $owning = $this->em->find(Entity\OwningManyToManyEntity::class, 'def'); self::assertCount(1, $owning->associatedEntities); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheCollectionFromInversedToOwningIsLoaded() { - $inversed = $this->em->find( - Models\ValueConversionType\InversedManyToManyEntity::class, - 'abc' - ); + $inversed = $this->em->find(Entity\InversedManyToManyEntity::class, 'abc'); self::assertCount(1, $inversed->associatedEntities); } - /** - * @depends testThatTheCollectionFromOwningToInversedIsLoaded - * @depends testThatTheCollectionFromInversedToOwningIsLoaded - */ public function testThatTheJoinTableRowsAreRemovedWhenRemovingTheAssociation() { $conn = $this->em->getConnection(); // remove association - $inversed = $this->em->find( - Models\ValueConversionType\InversedManyToManyEntity::class, - 'abc' - ); + $inversed = $this->em->find(Entity\InversedManyToManyEntity::class, 'abc'); foreach ($inversed->associatedEntities as $owning) { $inversed->associatedEntities->removeElement($owning); diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdForeignKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdForeignKeyTest.php index 1664009f00b..2b502ff547f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdForeignKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdForeignKeyTest.php @@ -45,15 +45,6 @@ public function setUp() $this->em->clear(); } - public static function tearDownAfterClass() - { - $conn = static::$sharedConn; - - $conn->executeUpdate('DROP TABLE vct_owning_manytoone_compositeid_foreignkey'); - $conn->executeUpdate('DROP TABLE vct_inversed_onetomany_compositeid_foreignkey'); - $conn->executeUpdate('DROP TABLE vct_auxiliary'); - } - public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { $conn = $this->em->getConnection(); @@ -68,50 +59,32 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() self::assertEquals('nop', $conn->fetchColumn('SELECT associated_foreign_id FROM vct_owning_manytoone_compositeid_foreignkey LIMIT 1')); } - /** - * @depends testThatTheValueOfIdentifiersAreConvertedInTheDatabase - */ public function testThatEntitiesAreFetchedFromTheDatabase() { - $auxiliary = $this->em->find( - Models\ValueConversionType\AuxiliaryEntity::class, - 'abc' - ); + $auxiliary = $this->em->find(Entity\AuxiliaryEntity::class, 'abc'); $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToManyCompositeIdForeignKeyEntity::class, + Entity\InversedOneToManyCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => 'abc'] ); - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToOneCompositeIdForeignKeyEntity::class, - 'ghi' - ); + $owning = $this->em->find(Entity\OwningManyToOneCompositeIdForeignKeyEntity::class, 'ghi'); - self::assertInstanceOf(Models\ValueConversionType\AuxiliaryEntity::class, $auxiliary); - self::assertInstanceOf(Models\ValueConversionType\InversedOneToManyCompositeIdForeignKeyEntity::class, $inversed); - self::assertInstanceOf(Models\ValueConversionType\OwningManyToOneCompositeIdForeignKeyEntity::class, $owning); + self::assertInstanceOf(Entity\AuxiliaryEntity::class, $auxiliary); + self::assertInstanceOf(Entity\InversedOneToManyCompositeIdForeignKeyEntity::class, $inversed); + self::assertInstanceOf(Entity\OwningManyToOneCompositeIdForeignKeyEntity::class, $owning); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase() { - $auxiliary = $this->em->find( - Models\ValueConversionType\AuxiliaryEntity::class, - 'abc' - ); + $auxiliary = $this->em->find(Entity\AuxiliaryEntity::class, 'abc'); $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToManyCompositeIdForeignKeyEntity::class, + Entity\InversedOneToManyCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => 'abc'] ); - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToOneCompositeIdForeignKeyEntity::class, - 'ghi' - ); + $owning = $this->em->find(Entity\OwningManyToOneCompositeIdForeignKeyEntity::class, 'ghi'); self::assertEquals('abc', $auxiliary->id4); self::assertEquals('def', $inversed->id1); @@ -119,33 +92,21 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr self::assertEquals('ghi', $owning->id2); } - /** - * @depends testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase - */ public function testThatInversedEntityIsFetchedFromTheDatabaseUsingAuxiliaryEntityAsId() { - $auxiliary = $this->em->find( - Models\ValueConversionType\AuxiliaryEntity::class, - 'abc' - ); + $auxiliary = $this->em->find(Entity\AuxiliaryEntity::class, 'abc'); $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToManyCompositeIdForeignKeyEntity::class, + Entity\InversedOneToManyCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => $auxiliary] ); - self::assertInstanceOf(Models\ValueConversionType\InversedOneToManyCompositeIdForeignKeyEntity::class, $inversed); + self::assertInstanceOf(Entity\InversedOneToManyCompositeIdForeignKeyEntity::class, $inversed); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheProxyFromOwningToInversedIsLoaded() { - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToOneCompositeIdForeignKeyEntity::class, - 'ghi' - ); + $owning = $this->em->find(Entity\OwningManyToOneCompositeIdForeignKeyEntity::class, 'ghi'); $inversedProxy = $owning->associatedEntity; @@ -154,13 +115,10 @@ public function testThatTheProxyFromOwningToInversedIsLoaded() self::assertEquals('some value to be loaded', $inversedProxy->someProperty); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheCollectionFromInversedToOwningIsLoaded() { $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToManyCompositeIdForeignKeyEntity::class, + Entity\InversedOneToManyCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => 'abc'] ); diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdTest.php index 83920b09012..afc8b497682 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyCompositeIdTest.php @@ -40,14 +40,6 @@ public function setUp() $this->em->clear(); } - public static function tearDownAfterClass() - { - $conn = static::$sharedConn; - - $conn->executeUpdate('DROP TABLE vct_owning_manytoone_compositeid'); - $conn->executeUpdate('DROP TABLE vct_inversed_onetomany_compositeid'); - } - public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { $conn = $this->em->getConnection(); @@ -60,67 +52,46 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() self::assertEquals('qrs', $conn->fetchColumn('SELECT associated_id2 FROM vct_owning_manytoone_compositeid LIMIT 1')); } - /** - * @depends testThatTheValueOfIdentifiersAreConvertedInTheDatabase - */ public function testThatEntitiesAreFetchedFromTheDatabase() { $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToManyCompositeIdEntity::class, + Entity\InversedOneToManyCompositeIdEntity::class, ['id1' => 'abc', 'id2' => 'def'] ); - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToOneCompositeIdEntity::class, - 'ghi' - ); + $owning = $this->em->find(Entity\OwningManyToOneCompositeIdEntity::class, 'ghi'); - self::assertInstanceOf(Models\ValueConversionType\InversedOneToManyCompositeIdEntity::class, $inversed); - self::assertInstanceOf(Models\ValueConversionType\OwningManyToOneCompositeIdEntity::class, $owning); + self::assertInstanceOf(Entity\InversedOneToManyCompositeIdEntity::class, $inversed); + self::assertInstanceOf(Entity\OwningManyToOneCompositeIdEntity::class, $owning); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase() { $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToManyCompositeIdEntity::class, + Entity\InversedOneToManyCompositeIdEntity::class, ['id1' => 'abc', 'id2' => 'def'] ); - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToOneCompositeIdEntity::class, - 'ghi' - ); + $owning = $this->em->find(Entity\OwningManyToOneCompositeIdEntity::class, 'ghi'); self::assertEquals('abc', $inversed->id1); self::assertEquals('def', $inversed->id2); self::assertEquals('ghi', $owning->id3); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheProxyFromOwningToInversedIsLoaded() { - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToOneCompositeIdEntity::class, - 'ghi' - ); + $owning = $this->em->find(Entity\OwningManyToOneCompositeIdEntity::class, 'ghi'); $inversedProxy = $owning->associatedEntity; self::assertEquals('some value to be loaded', $inversedProxy->someProperty); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheCollectionFromInversedToOwningIsLoaded() { $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToManyCompositeIdEntity::class, + Entity\InversedOneToManyCompositeIdEntity::class, ['id1' => 'abc', 'id2' => 'def'] ); diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyExtraLazyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyExtraLazyTest.php index c0afb2aa3d1..08f20d4d7d3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyExtraLazyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyExtraLazyTest.php @@ -51,55 +51,31 @@ public function setUp() $this->em->clear(); } - public static function tearDownAfterClass() - { - $conn = static::$sharedConn; - - $conn->executeUpdate('DROP TABLE vct_owning_manytoone_extralazy'); - $conn->executeUpdate('DROP TABLE vct_inversed_onetomany_extralazy'); - } - public function testThatExtraLazyCollectionIsCounted() { - $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToManyExtraLazyEntity::class, - 'abc' - ); + $inversed = $this->em->find(Entity\InversedOneToManyExtraLazyEntity::class, 'abc'); self::assertEquals(3, $inversed->associatedEntities->count()); } public function testThatExtraLazyCollectionContainsAnEntity() { - $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToManyExtraLazyEntity::class, - 'abc' - ); - - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToOneExtraLazyEntity::class, - 'def' - ); + $inversed = $this->em->find(Entity\InversedOneToManyExtraLazyEntity::class, 'abc'); + $owning = $this->em->find(Entity\OwningManyToOneExtraLazyEntity::class, 'def'); self::assertTrue($inversed->associatedEntities->contains($owning)); } public function testThatExtraLazyCollectionContainsAnIndexbyKey() { - $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToManyExtraLazyEntity::class, - 'abc' - ); + $inversed = $this->em->find(Entity\InversedOneToManyExtraLazyEntity::class, 'abc'); self::assertTrue($inversed->associatedEntities->containsKey('def')); } public function testThatASliceOfTheExtraLazyCollectionIsLoaded() { - $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToManyExtraLazyEntity::class, - 'abc' - ); + $inversed = $this->em->find(Entity\InversedOneToManyExtraLazyEntity::class, 'abc'); self::assertCount(2, $inversed->associatedEntities->slice(0, 2)); } diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyTest.php index af4d65491d8..b7a084c7605 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToManyTest.php @@ -39,14 +39,6 @@ public function setUp() $this->em->clear(); } - public static function tearDownAfterClass() - { - $conn = static::$sharedConn; - - $conn->executeUpdate('DROP TABLE vct_owning_manytoone'); - $conn->executeUpdate('DROP TABLE vct_inversed_onetomany'); - } - public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { $conn = $this->em->getConnection(); @@ -57,68 +49,36 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() self::assertEquals('nop', $conn->fetchColumn('SELECT associated_id FROM vct_owning_manytoone LIMIT 1')); } - /** - * @depends testThatTheValueOfIdentifiersAreConvertedInTheDatabase - */ public function testThatEntitiesAreFetchedFromTheDatabase() { - $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToManyEntity::class, - 'abc' - ); - - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToOneEntity::class, - 'def' - ); - - self::assertInstanceOf(Models\ValueConversionType\InversedOneToManyEntity::class, $inversed); - self::assertInstanceOf(Models\ValueConversionType\OwningManyToOneEntity::class, $owning); + $inversed = $this->em->find(Entity\InversedOneToManyEntity::class, 'abc'); + $owning = $this->em->find(Entity\OwningManyToOneEntity::class, 'def'); + + self::assertInstanceOf(Entity\InversedOneToManyEntity::class, $inversed); + self::assertInstanceOf(Entity\OwningManyToOneEntity::class, $owning); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase() { - $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToManyEntity::class, - 'abc' - ); - - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToOneEntity::class, - 'def' - ); + $inversed = $this->em->find(Entity\InversedOneToManyEntity::class, 'abc'); + $owning = $this->em->find(Entity\OwningManyToOneEntity::class, 'def'); self::assertEquals('abc', $inversed->id1); self::assertEquals('def', $owning->id2); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheProxyFromOwningToInversedIsLoaded() { - $owning = $this->em->find( - Models\ValueConversionType\OwningManyToOneEntity::class, - 'def' - ); + $owning = $this->em->find(Entity\OwningManyToOneEntity::class, 'def'); $inversedProxy = $owning->associatedEntity; self::assertEquals('some value to be loaded', $inversedProxy->someProperty); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheCollectionFromInversedToOwningIsLoaded() { - $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToManyEntity::class, - 'abc' - ); + $inversed = $this->em->find(Entity\InversedOneToManyEntity::class, 'abc'); self::assertCount(1, $inversed->associatedEntities); } diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdForeignKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdForeignKeyTest.php index 028a86de413..709e3e2fbf1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdForeignKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdForeignKeyTest.php @@ -20,6 +20,7 @@ class OneToOneCompositeIdForeignKeyTest extends OrmFunctionalTestCase public function setUp() { $this->useModelSet('vct_onetoone_compositeid_foreignkey'); + parent::setUp(); $auxiliary = new Entity\AuxiliaryEntity(); @@ -44,15 +45,6 @@ public function setUp() $this->em->clear(); } - public static function tearDownAfterClass() - { - $conn = static::$sharedConn; - - $conn->executeUpdate('DROP TABLE vct_owning_onetoone_compositeid_foreignkey'); - $conn->executeUpdate('DROP TABLE vct_inversed_onetoone_compositeid_foreignkey'); - $conn->executeUpdate('DROP TABLE vct_auxiliary'); - } - public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { $conn = $this->em->getConnection(); @@ -67,50 +59,32 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() self::assertEquals('nop', $conn->fetchColumn('SELECT associated_foreign_id FROM vct_owning_onetoone_compositeid_foreignkey LIMIT 1')); } - /** - * @depends testThatTheValueOfIdentifiersAreConvertedInTheDatabase - */ public function testThatEntitiesAreFetchedFromTheDatabase() { - $auxiliary = $this->em->find( - Models\ValueConversionType\AuxiliaryEntity::class, - 'abc' - ); + $auxiliary = $this->em->find(Entity\AuxiliaryEntity::class, 'abc'); $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToOneCompositeIdForeignKeyEntity::class, + Entity\InversedOneToOneCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => 'abc'] ); - $owning = $this->em->find( - Models\ValueConversionType\OwningOneToOneCompositeIdForeignKeyEntity::class, - 'ghi' - ); + $owning = $this->em->find(Entity\OwningOneToOneCompositeIdForeignKeyEntity::class, 'ghi'); - self::assertInstanceOf(Models\ValueConversionType\AuxiliaryEntity::class, $auxiliary); - self::assertInstanceOf(Models\ValueConversionType\InversedOneToOneCompositeIdForeignKeyEntity::class, $inversed); - self::assertInstanceOf(Models\ValueConversionType\OwningOneToOneCompositeIdForeignKeyEntity::class, $owning); + self::assertInstanceOf(Entity\AuxiliaryEntity::class, $auxiliary); + self::assertInstanceOf(Entity\InversedOneToOneCompositeIdForeignKeyEntity::class, $inversed); + self::assertInstanceOf(Entity\OwningOneToOneCompositeIdForeignKeyEntity::class, $owning); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase() { - $auxiliary = $this->em->find( - Models\ValueConversionType\AuxiliaryEntity::class, - 'abc' - ); + $auxiliary = $this->em->find(Entity\AuxiliaryEntity::class, 'abc'); $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToOneCompositeIdForeignKeyEntity::class, + Entity\InversedOneToOneCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => 'abc'] ); - $owning = $this->em->find( - Models\ValueConversionType\OwningOneToOneCompositeIdForeignKeyEntity::class, - 'ghi' - ); + $owning = $this->em->find(Entity\OwningOneToOneCompositeIdForeignKeyEntity::class, 'ghi'); self::assertEquals('abc', $auxiliary->id4); self::assertEquals('def', $inversed->id1); @@ -118,49 +92,33 @@ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFr self::assertEquals('ghi', $owning->id2); } - /** - * @depends testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase - */ public function testThatInversedEntityIsFetchedFromTheDatabaseUsingAuxiliaryEntityAsId() { - $auxiliary = $this->em->find( - Models\ValueConversionType\AuxiliaryEntity::class, - 'abc' - ); + $auxiliary = $this->em->find(Entity\AuxiliaryEntity::class, 'abc'); $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToOneCompositeIdForeignKeyEntity::class, + Entity\InversedOneToOneCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => $auxiliary] ); - self::assertInstanceOf(Models\ValueConversionType\InversedOneToOneCompositeIdForeignKeyEntity::class, $inversed); + self::assertInstanceOf(Entity\InversedOneToOneCompositeIdForeignKeyEntity::class, $inversed); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheProxyFromOwningToInversedIsLoaded() { - $owning = $this->em->find( - Models\ValueConversionType\OwningOneToOneCompositeIdForeignKeyEntity::class, - 'ghi' - ); + $owning = $this->em->find(Entity\OwningOneToOneCompositeIdForeignKeyEntity::class, 'ghi'); $inversedProxy = $owning->associatedEntity; self::assertEquals('some value to be loaded', $inversedProxy->someProperty); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheEntityFromInversedToOwningIsEagerLoaded() { - $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToOneCompositeIdForeignKeyEntity::class, + $inversed = $this->em->find(Entity\InversedOneToOneCompositeIdForeignKeyEntity::class, ['id1' => 'def', 'foreignEntity' => 'abc'] ); - self::assertInstanceOf(Models\ValueConversionType\OwningOneToOneCompositeIdForeignKeyEntity::class, $inversed->associatedEntity); + self::assertInstanceOf(Entity\OwningOneToOneCompositeIdForeignKeyEntity::class, $inversed->associatedEntity); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdTest.php index 43038680a3c..539a0470d6f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneCompositeIdTest.php @@ -19,6 +19,7 @@ class OneToOneCompositeIdTest extends OrmFunctionalTestCase public function setUp() { $this->useModelSet('vct_onetoone_compositeid'); + parent::setUp(); $inversed = new Entity\InversedOneToOneCompositeIdEntity(); @@ -39,14 +40,6 @@ public function setUp() $this->em->clear(); } - public static function tearDownAfterClass() - { - $conn = static::$sharedConn; - - $conn->executeUpdate('DROP TABLE vct_owning_onetoone_compositeid'); - $conn->executeUpdate('DROP TABLE vct_inversed_onetoone_compositeid'); - } - public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { $conn = $this->em->getConnection(); @@ -65,17 +58,14 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() public function testThatEntitiesAreFetchedFromTheDatabase() { $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToOneCompositeIdEntity::class, + Entity\InversedOneToOneCompositeIdEntity::class, ['id1' => 'abc', 'id2' => 'def'] ); - $owning = $this->em->find( - Models\ValueConversionType\OwningOneToOneCompositeIdEntity::class, - 'ghi' - ); + $owning = $this->em->find(Entity\OwningOneToOneCompositeIdEntity::class, 'ghi'); - self::assertInstanceOf(Models\ValueConversionType\InversedOneToOneCompositeIdEntity::class, $inversed); - self::assertInstanceOf(Models\ValueConversionType\OwningOneToOneCompositeIdEntity::class, $owning); + self::assertInstanceOf(Entity\InversedOneToOneCompositeIdEntity::class, $inversed); + self::assertInstanceOf(Entity\OwningOneToOneCompositeIdEntity::class, $owning); } /** @@ -84,45 +74,33 @@ public function testThatEntitiesAreFetchedFromTheDatabase() public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase() { $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToOneCompositeIdEntity::class, + Entity\InversedOneToOneCompositeIdEntity::class, ['id1' => 'abc', 'id2' => 'def'] ); - $owning = $this->em->find( - Models\ValueConversionType\OwningOneToOneCompositeIdEntity::class, - 'ghi' - ); + $owning = $this->em->find(Entity\OwningOneToOneCompositeIdEntity::class, 'ghi'); self::assertEquals('abc', $inversed->id1); self::assertEquals('def', $inversed->id2); self::assertEquals('ghi', $owning->id3); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheProxyFromOwningToInversedIsLoaded() { - $owning = $this->em->find( - Models\ValueConversionType\OwningOneToOneCompositeIdEntity::class, - 'ghi' - ); + $owning = $this->em->find(Entity\OwningOneToOneCompositeIdEntity::class, 'ghi'); $inversedProxy = $owning->associatedEntity; self::assertEquals('some value to be loaded', $inversedProxy->someProperty); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheEntityFromInversedToOwningIsEagerLoaded() { $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToOneCompositeIdEntity::class, + Entity\InversedOneToOneCompositeIdEntity::class, ['id1' => 'abc', 'id2' => 'def'] ); - self::assertInstanceOf(Models\ValueConversionType\OwningOneToOneCompositeIdEntity::class, $inversed->associatedEntity); + self::assertInstanceOf(Entity\OwningOneToOneCompositeIdEntity::class, $inversed->associatedEntity); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneTest.php index 281814bb3c4..f707268609a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueConversionType/OneToOneTest.php @@ -39,14 +39,6 @@ public function setUp() $this->em->clear(); } - public static function tearDownAfterClass() - { - $conn = static::$sharedConn; - - $conn->executeUpdate('DROP TABLE vct_owning_onetoone'); - $conn->executeUpdate('DROP TABLE vct_inversed_onetoone'); - } - public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() { $conn = $this->em->getConnection(); @@ -57,69 +49,37 @@ public function testThatTheValueOfIdentifiersAreConvertedInTheDatabase() self::assertEquals('nop', $conn->fetchColumn('SELECT associated_id FROM vct_owning_onetoone LIMIT 1')); } - /** - * @depends testThatTheValueOfIdentifiersAreConvertedInTheDatabase - */ public function testThatEntitiesAreFetchedFromTheDatabase() { - $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToOneEntity::class, - 'abc' - ); - - $owning = $this->em->find( - Models\ValueConversionType\OwningOneToOneEntity::class, - 'def' - ); - - self::assertInstanceOf(Models\ValueConversionType\InversedOneToOneEntity::class, $inversed); - self::assertInstanceOf(Models\ValueConversionType\OwningOneToOneEntity::class, $owning); + $inversed = $this->em->find(Entity\InversedOneToOneEntity::class, 'abc'); + $owning = $this->em->find(Entity\OwningOneToOneEntity::class, 'def'); + + self::assertInstanceOf(Entity\InversedOneToOneEntity::class, $inversed); + self::assertInstanceOf(Entity\OwningOneToOneEntity::class, $owning); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheValueOfIdentifiersAreConvertedBackAfterBeingFetchedFromTheDatabase() { - $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToOneEntity::class, - 'abc' - ); - - $owning = $this->em->find( - Models\ValueConversionType\OwningOneToOneEntity::class, - 'def' - ); + $inversed = $this->em->find(Entity\InversedOneToOneEntity::class, 'abc'); + $owning = $this->em->find(Entity\OwningOneToOneEntity::class, 'def'); self::assertEquals('abc', $inversed->id1); self::assertEquals('def', $owning->id2); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheProxyFromOwningToInversedIsLoaded() { - $owning = $this->em->find( - Models\ValueConversionType\OwningOneToOneEntity::class, - 'def' - ); + $owning = $this->em->find(Entity\OwningOneToOneEntity::class, 'def'); $inversedProxy = $owning->associatedEntity; self::assertEquals('some value to be loaded', $inversedProxy->someProperty); } - /** - * @depends testThatEntitiesAreFetchedFromTheDatabase - */ public function testThatTheEntityFromInversedToOwningIsEagerLoaded() { - $inversed = $this->em->find( - Models\ValueConversionType\InversedOneToOneEntity::class, - 'abc' - ); + $inversed = $this->em->find(Entity\InversedOneToOneEntity::class, 'abc'); - self::assertInstanceOf(Models\ValueConversionType\OwningOneToOneEntity::class, $inversed->associatedEntity); + self::assertInstanceOf(Entity\OwningOneToOneEntity::class, $inversed->associatedEntity); } } diff --git a/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php index 9041e4a567e..684ea8044fe 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php @@ -1035,7 +1035,7 @@ public function testCreatesProxyForLazyLoadingWithForeignKeys() // configuring lazy loading $metadata = $this->em->getClassMetadata(ECommerceProduct::class); - $metadata->associationMappings['shipping']['fetch'] = FetchMode::LAZY; + $metadata->associationMappings['shipping']->setFetchMode(FetchMode::LAZY); $stmt = new HydratorMockStatement($resultSet); $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); @@ -1084,7 +1084,7 @@ public function testCreatesProxyForLazyLoadingWithForeignKeysWithAliasedProductE // configuring lazy loading $metadata = $this->em->getClassMetadata(ECommerceProduct::class); - $metadata->associationMappings['shipping']['fetch'] = FetchMode::LAZY; + $metadata->associationMappings['shipping']->setFetchMode(FetchMode::LAZY); $stmt = new HydratorMockStatement($resultSet); $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); diff --git a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php index 6cfa8760606..b787300270a 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php @@ -4,8 +4,10 @@ use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Annotation\OneToOne; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; +use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\Tests\Models\CMS\CmsEmail; use Doctrine\Tests\Models\CMS\CmsPhonenumber; @@ -109,24 +111,17 @@ public function testAddNamedNativeQueryResultSetMapping() $cm = new ClassMetadata(CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $joinColumns = []; - $joinColumn = new JoinColumnMetadata(); $joinColumn->setReferencedColumnName('id'); $joinColumn->setNullable(true); - $joinColumns[] = $joinColumn; + $association = new OneToOneAssociationMetadata('email'); + $association->setTargetEntity(CmsEmail::class); + $association->setInversedBy('user'); + $association->setCascade(['persist']); + $association->addJoinColumn($joinColumn); - $cm->mapOneToOne( - [ - 'fieldName' => 'email', - 'targetEntity' => CmsEmail::class, - 'cascade' => ['persist'], - 'inversedBy' => 'user', - 'orphanRemoval' => false, - 'joinColumns' => $joinColumns, - ] - ); + $cm->mapOneToOne($association); $cm->addNamedNativeQuery( [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 3959a39a35d..aba590324b4 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -358,11 +358,14 @@ public function testAssociations($class) */ public function testOwningOneToOneAssociation($class) { - self::assertTrue(isset($class->associationMappings['address'])); - self::assertTrue($class->associationMappings['address']['isOwningSide']); - self::assertEquals('user', $class->associationMappings['address']['inversedBy']); + self::assertArrayHasKey('address', $class->associationMappings); + + $association = $class->associationMappings['address']; + + self::assertTrue($association->isOwningSide()); + self::assertEquals('user', $association->getInversedBy()); // Check cascading - self::assertEquals(['remove'], $class->associationMappings['address']['cascade']); + self::assertEquals(['remove'], $association->getCascade()); return $class; } @@ -373,14 +376,18 @@ public function testOwningOneToOneAssociation($class) */ public function testInverseOneToManyAssociation($class) { - self::assertTrue(isset($class->associationMappings['phonenumbers'])); - self::assertFalse($class->associationMappings['phonenumbers']['isOwningSide']); - self::assertTrue($class->associationMappings['phonenumbers']['orphanRemoval']); + self::assertArrayHasKey('phonenumbers', $class->associationMappings); + + $association = $class->associationMappings['phonenumbers']; + + self::assertFalse($association->isOwningSide()); + self::assertTrue($association->isOrphanRemoval()); + // Check cascading - self::assertEquals(['persist', 'remove'], $class->associationMappings['phonenumbers']['cascade']); + self::assertEquals(['persist', 'remove'], $association->getCascade()); // Test Order By - self::assertEquals(['number' => 'ASC'], $class->associationMappings['phonenumbers']['orderBy']); + self::assertEquals(['number' => 'ASC'], $association->getOrderBy()); return $class; } @@ -391,12 +398,17 @@ public function testInverseOneToManyAssociation($class) */ public function testManyToManyAssociationWithCascadeAll($class) { - self::assertTrue(isset($class->associationMappings['groups'])); - self::assertTrue($class->associationMappings['groups']['isOwningSide']); + self::assertArrayHasKey('groups', $class->associationMappings); + + $association = $class->associationMappings['groups']; + + self::assertTrue($association->isOwningSide()); + // Make sure that cascade-all works as expected - self::assertEquals(['remove', 'persist', 'refresh', 'merge', 'detach'], $class->associationMappings['groups']['cascade']); + self::assertEquals(['remove', 'persist', 'refresh', 'merge', 'detach'], $association->getCascade()); - self::assertFalse(isset($class->associationMappings['groups']['orderBy'])); + // Test Order By + self::assertEquals([], $association->getOrderBy()); return $class; } @@ -434,7 +446,8 @@ public function testJoinColumnUniqueAndNullable($class) { // Non-Nullability of Join Column $association = $class->associationMappings['groups']; - $joinColumns = $association['joinTable']->getJoinColumns(); + $joinTable = $association->getJoinTable(); + $joinColumns = $joinTable->getJoinColumns(); $joinColumn = reset($joinColumns); self::assertFalse($joinColumn->isNullable()); @@ -453,7 +466,8 @@ public function testColumnDefinition($class) $property = $class->getProperty('email'); $association = $class->associationMappings['groups']; - $inverseJoinColumns = $association['joinTable']->getInverseJoinColumns(); + $joinTable = $association->getJoinTable(); + $inverseJoinColumns = $joinTable->getInverseJoinColumns(); $inverseJoinColumn = reset($inverseJoinColumns); self::assertEquals("CHAR(32) NOT NULL", $property->getColumnDefinition()); @@ -469,7 +483,8 @@ public function testColumnDefinition($class) public function testJoinColumnOnDelete($class) { $association = $class->associationMappings['address']; - $joinColumn = reset($association['joinColumns']); + $joinColumns = $association->getJoinColumns(); + $joinColumn = reset($joinColumns); self::assertEquals('CASCADE', $joinColumn->getOnDelete()); @@ -773,30 +788,32 @@ public function testAssociationOverridesMapping() $adminGroups = $adminMetadata->associationMappings['groups']; // assert not override attributes - self::assertEquals($guestGroups['fieldName'], $adminGroups['fieldName']); - self::assertEquals($guestGroups['type'], $adminGroups['type']); - self::assertEquals($guestGroups['mappedBy'], $adminGroups['mappedBy']); - self::assertEquals($guestGroups['inversedBy'], $adminGroups['inversedBy']); - self::assertEquals($guestGroups['isOwningSide'], $adminGroups['isOwningSide']); - self::assertEquals($guestGroups['fetch'], $adminGroups['fetch']); - self::assertEquals($guestGroups['cascade'], $adminGroups['cascade']); + self::assertEquals($guestGroups->getName(), $adminGroups->getName()); + self::assertEquals(get_class($guestGroups), get_class($adminGroups)); + self::assertEquals($guestGroups->getMappedBy(), $adminGroups->getMappedBy()); + self::assertEquals($guestGroups->getInversedBy(), $adminGroups->getInversedBy()); + self::assertEquals($guestGroups->isOwningSide(), $adminGroups->isOwningSide()); + self::assertEquals($guestGroups->getFetchMode(), $adminGroups->getFetchMode()); + self::assertEquals($guestGroups->getCascade(), $adminGroups->getCascade()); // assert not override attributes - $guestGroupsJoinColumns = $guestGroups['joinTable']->getJoinColumns(); + $guestGroupsJoinTable = $guestGroups->getJoinTable(); + $guestGroupsJoinColumns = $guestGroupsJoinTable->getJoinColumns(); $guestGroupsJoinColumn = reset($guestGroupsJoinColumns); - $guestGroupsInverseJoinColumns = $guestGroups['joinTable']->getInverseJoinColumns(); + $guestGroupsInverseJoinColumns = $guestGroupsJoinTable->getInverseJoinColumns(); $guestGroupsInverseJoinColumn = reset($guestGroupsInverseJoinColumns); - self::assertEquals('ddc964_users_groups', $guestGroups['joinTable']->getName()); + self::assertEquals('ddc964_users_groups', $guestGroupsJoinTable->getName()); self::assertEquals('user_id', $guestGroupsJoinColumn->getColumnName()); self::assertEquals('group_id', $guestGroupsInverseJoinColumn->getColumnName()); - $adminGroupsJoinColumns = $adminGroups['joinTable']->getJoinColumns(); + $adminGroupsJoinTable = $adminGroups->getJoinTable(); + $adminGroupsJoinColumns = $adminGroupsJoinTable->getJoinColumns(); $adminGroupsJoinColumn = reset($adminGroupsJoinColumns); - $adminGroupsInverseJoinColumns = $adminGroups['joinTable']->getInverseJoinColumns(); + $adminGroupsInverseJoinColumns = $adminGroupsJoinTable->getInverseJoinColumns(); $adminGroupsInverseJoinColumn = reset($adminGroupsInverseJoinColumns); - self::assertEquals('ddc964_users_admingroups', $adminGroups['joinTable']->getName()); + self::assertEquals('ddc964_users_admingroups', $adminGroupsJoinTable->getName()); self::assertEquals('adminuser_id', $adminGroupsJoinColumn->getColumnName()); self::assertEquals('admingroup_id', $adminGroupsInverseJoinColumn->getColumnName()); @@ -808,20 +825,22 @@ public function testAssociationOverridesMapping() $adminAddress = $adminMetadata->associationMappings['address']; // assert not override attributes - self::assertEquals($guestAddress['fieldName'], $adminAddress['fieldName']); - self::assertEquals($guestAddress['type'], $adminAddress['type']); - self::assertEquals($guestAddress['mappedBy'], $adminAddress['mappedBy']); - self::assertEquals($guestAddress['inversedBy'], $adminAddress['inversedBy']); - self::assertEquals($guestAddress['isOwningSide'], $adminAddress['isOwningSide']); - self::assertEquals($guestAddress['fetch'], $adminAddress['fetch']); - self::assertEquals($guestAddress['cascade'], $adminAddress['cascade']); + self::assertEquals($guestAddress->getName(), $adminAddress->getName()); + self::assertEquals(get_class($guestAddress), get_class($adminAddress)); + self::assertEquals($guestAddress->getMappedBy(), $adminAddress->getMappedBy()); + self::assertEquals($guestAddress->getInversedBy(), $adminAddress->getInversedBy()); + self::assertEquals($guestAddress->isOwningSide(), $adminAddress->isOwningSide()); + self::assertEquals($guestAddress->getFetchMode(), $adminAddress->getFetchMode()); + self::assertEquals($guestAddress->getCascade(), $adminAddress->getCascade()); // assert override - $guestAddressJoinColumn = reset($guestAddress['joinColumns']); + $guestAddressJoinColumns = $guestAddress->getJoinColumns(); + $guestAddressJoinColumn = reset($guestAddressJoinColumns); self::assertEquals('address_id', $guestAddressJoinColumn->getColumnName()); - $adminAddressJoinColumn = reset($adminAddress['joinColumns']); + $adminAddressJoinColumns = $adminAddress->getJoinColumns(); + $adminAddressJoinColumn = reset($adminAddressJoinColumns); self::assertEquals('adminaddress_id', $adminAddressJoinColumn->getColumnName()); } @@ -840,7 +859,7 @@ public function testInversedByOverrideMapping() $adminGroups = $adminMetadata->associationMappings['groups']; // assert override - self::assertEquals('admins', $adminGroups['inversedBy']); + self::assertEquals('admins', $adminGroups->getInversedBy()); } /** @@ -1048,16 +1067,20 @@ public function testSecondLevelCacheMapping() self::assertEquals('doctrine_tests_models_cache_city', $class->cache->getRegion()); self::assertArrayHasKey('state', $class->associationMappings); - self::assertArrayHasKey('cache', $class->associationMappings['state']); - self::assertNotNull($class->associationMappings['state']['cache']); - self::assertEquals(Mapping\CacheUsage::READ_ONLY, $class->associationMappings['state']['cache']->getUsage()); - self::assertEquals('doctrine_tests_models_cache_city__state', $class->associationMappings['state']['cache']->getRegion()); + + $stateAssociation = $class->associationMappings['state']; + + self::assertNotNull($stateAssociation->getCache()); + self::assertEquals(Mapping\CacheUsage::READ_ONLY, $stateAssociation->getCache()->getUsage()); + self::assertEquals('doctrine_tests_models_cache_city__state', $stateAssociation->getCache()->getRegion()); self::assertArrayHasKey('attractions', $class->associationMappings); - self::assertArrayHasKey('cache', $class->associationMappings['attractions']); - self::assertNotNull($class->associationMappings['attractions']['cache']); - self::assertEquals(Mapping\CacheUsage::READ_ONLY, $class->associationMappings['attractions']['cache']->getUsage()); - self::assertEquals('doctrine_tests_models_cache_city__attractions', $class->associationMappings['attractions']['cache']->getRegion()); + + $attractionsAssociation = $class->associationMappings['attractions']; + + self::assertNotNull($attractionsAssociation->getCache()); + self::assertEquals(Mapping\CacheUsage::READ_ONLY, $attractionsAssociation->getCache()->getUsage()); + self::assertEquals('doctrine_tests_models_cache_city__attractions', $attractionsAssociation->getCache()->getRegion()); } /** @@ -1332,27 +1355,25 @@ public static function loadMetadata(ClassMetadata $metadata) $joinColumns[] = $joinColumn; - $metadata->mapOneToOne( - [ - 'fieldName' => 'address', - 'targetEntity' => Address::class, - 'cascade' => ['remove'], - 'inversedBy' => 'user', - 'joinColumns' => $joinColumns, - 'orphanRemoval' => false, - ] - ); + $association = new Mapping\OneToOneAssociationMetadata('address'); - $metadata->mapOneToMany( - [ - 'fieldName' => 'phonenumbers', - 'targetEntity' => Phonenumber::class, - 'cascade' => ['persist'], - 'mappedBy' => 'user', - 'orphanRemoval' => true, - 'orderBy' => ['number' => 'ASC'], - ] - ); + $association->setJoinColumns($joinColumns); + $association->setTargetEntity(Address::class); + $association->setInversedBy('user'); + $association->setCascade(['remove']); + $association->setOrphanRemoval(false); + + $metadata->mapOneToOne($association); + + $association = new Mapping\OneToManyAssociationMetadata('phonenumbers'); + + $association->setTargetEntity(Phonenumber::class); + $association->setMappedBy('user'); + $association->setCascade(['persist']); + $association->setOrderBy(['number' => 'ASC']); + $association->setOrphanRemoval(true); + + $metadata->mapOneToMany($association); $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('cms_users_groups'); @@ -1374,15 +1395,13 @@ public static function loadMetadata(ClassMetadata $metadata) $joinTable->addInverseJoinColumn($joinColumn); - $metadata->mapManyToMany( - [ - 'fieldName' => 'groups', - 'targetEntity' => Group::class, - 'cascade' => ['remove', 'persist', 'refresh', 'merge', 'detach'], - 'joinTable' => $joinTable, - 'orderBy' => NULL, - ] - ); + $association = new Mapping\ManyToManyAssociationMetadata('groups'); + + $association->setJoinTable($joinTable); + $association->setTargetEntity(Group::class); + $association->setCascade(['remove', 'persist', 'refresh', 'merge', 'detach']); + + $metadata->mapManyToMany($association); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php index 464c8024ed9..bff365202a7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php @@ -150,10 +150,12 @@ public function testJoinTablesWithMappedSuperclassForAnnotationDriver() $factory->setEntityManager($em); $classPage = $factory->getMetadataFor(File::class); - self::assertEquals(File::class, $classPage->associationMappings['parentDirectory']['sourceEntity']); + self::assertArrayHasKey('parentDirectory', $classPage->associationMappings); + self::assertEquals(File::class, $classPage->associationMappings['parentDirectory']->getSourceEntity()); $classDirectory = $factory->getMetadataFor(Directory::class); - self::assertEquals(Directory::class, $classDirectory->associationMappings['parentDirectory']['sourceEntity']); + self::assertArrayHasKey('parentDirectory', $classDirectory->associationMappings); + self::assertEquals(Directory::class, $classDirectory->associationMappings['parentDirectory']->getSourceEntity()); } /** @@ -267,8 +269,11 @@ public function testAttributeOverridesMappingWithTrait() $barPropertyWithoutOverride = $metadataWithoutOverride->associationMappings['bar']; $barPropertyWithOverride = $metadataWithOverride->associationMappings['bar']; - self::assertEquals('example_trait_bar_id', $barPropertyWithoutOverride['joinColumns'][0]->getColumnName()); - self::assertEquals('example_entity_overridden_bar_id', $barPropertyWithOverride['joinColumns'][0]->getColumnName()); + $barPropertyWithoutOverrideFirstJoinColumn = $barPropertyWithoutOverride->getJoinColumns()[0]; + $barPropertyWithOverrideFirstJoinColumn = $barPropertyWithOverride->getJoinColumns()[0]; + + self::assertEquals('example_trait_bar_id', $barPropertyWithoutOverrideFirstJoinColumn->getColumnName()); + self::assertEquals('example_entity_overridden_bar_id', $barPropertyWithOverrideFirstJoinColumn->getColumnName()); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php index 0531547ce78..90df35d19dc 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php @@ -320,42 +320,25 @@ public function testAddLifecycleEvent() public function testCreateManyToOne() { - self::assertIsFluent( - $this->builder->createManyToOne('groups', CmsGroup::class) - ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') - ->cascadeAll() - ->fetchExtraLazy() - ->build() - ); - $joinColumn = new JoinColumnMetadata(); + $joinColumn->setTableName('CmsUser'); $joinColumn->setColumnName('group_id'); $joinColumn->setReferencedColumnName('id'); $joinColumn->setOnDelete('CASCADE'); + $association = $this->builder->createManyToOne('groups', CmsGroup::class) + ->withJoinColumn($joinColumn) + ->withCascade(['ALL']) + ->withFetchMode(FetchMode::EXTRA_LAZY) + ->build() + ; + + $this->cm->mapManyToOne($association); + self::assertEquals( [ - 'groups' => [ - 'fieldName' => 'groups', - 'targetEntity' => CmsGroup::class, - 'cascade' => [ - 0 => 'remove', - 1 => 'persist', - 2 => 'refresh', - 3 => 'merge', - 4 => 'detach', - ], - 'fetch' => FetchMode::EXTRA_LAZY, - 'joinColumns' => [$joinColumn], - 'type' => 2, - 'mappedBy' => null, - 'inversedBy' => null, - 'isOwningSide' => true, - 'sourceEntity' => CmsUser::class, - 'orphanRemoval' => false, - 'declaringClass' => $this->cm, - ], + 'groups' => $association ], $this->cm->associationMappings ); @@ -363,46 +346,28 @@ public function testCreateManyToOne() public function testCreateManyToOneWithIdentity() { - self::assertIsFluent( - $this - ->builder - ->createManyToOne('groups', CmsGroup::class) - ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') - ->cascadeAll() - ->fetchExtraLazy() - ->makePrimaryKey() - ->build() - ); - $joinColumn = new JoinColumnMetadata(); + $joinColumn->setTableName('CmsUser'); $joinColumn->setColumnName('group_id'); $joinColumn->setReferencedColumnName('id'); $joinColumn->setOnDelete('CASCADE'); + $association = $this + ->builder + ->createManyToOne('groups', CmsGroup::class) + ->withJoinColumn($joinColumn) + ->withCascade(['ALL']) + ->withFetchMode(FetchMode::EXTRA_LAZY) + ->withPrimaryKey(true) + ->build() + ; + + $this->cm->mapManyToOne($association); + self::assertEquals( [ - 'groups' => [ - 'fieldName' => 'groups', - 'targetEntity' => CmsGroup::class, - 'cascade' => [ - 0 => 'remove', - 1 => 'persist', - 2 => 'refresh', - 3 => 'merge', - 4 => 'detach', - ], - 'fetch' => FetchMode::EXTRA_LAZY, - 'joinColumns' => [$joinColumn], - 'type' => 2, - 'mappedBy' => NULL, - 'inversedBy' => NULL, - 'isOwningSide' => true, - 'sourceEntity' => CmsUser::class, - 'orphanRemoval' => false, - 'declaringClass' => $this->cm, - 'id' => true, - ], + 'groups' => $association ], $this->cm->associationMappings ); @@ -410,43 +375,26 @@ public function testCreateManyToOneWithIdentity() public function testCreateOneToOne() { - self::assertIsFluent( - $this->builder->createOneToOne('groups', CmsGroup::class) - ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') - ->cascadeAll() - ->fetchExtraLazy() - ->build() - ); - $joinColumn = new JoinColumnMetadata(); + $joinColumn->setTableName('CmsUser'); $joinColumn->setColumnName('group_id'); $joinColumn->setReferencedColumnName('id'); $joinColumn->setOnDelete('CASCADE'); $joinColumn->setUnique(true); + $association = $this->builder->createOneToOne('groups', CmsGroup::class) + ->withJoinColumn($joinColumn) + ->withCascade(['ALL']) + ->withFetchMode(FetchMode::EXTRA_LAZY) + ->build() + ; + + $this->cm->mapOneToOne($association); + self::assertEquals( [ - 'groups' => [ - 'fieldName' => 'groups', - 'targetEntity' => CmsGroup::class, - 'cascade' => [ - 0 => 'remove', - 1 => 'persist', - 2 => 'refresh', - 3 => 'merge', - 4 => 'detach', - ], - 'fetch' => FetchMode::EXTRA_LAZY, - 'joinColumns' => [$joinColumn], - 'type' => 1, - 'mappedBy' => null, - 'inversedBy' => null, - 'isOwningSide' => true, - 'sourceEntity' => CmsUser::class, - 'orphanRemoval' => false, - 'declaringClass' => $this->cm, - ], + 'groups' => $association ], $this->cm->associationMappings ); @@ -454,44 +402,26 @@ public function testCreateOneToOne() public function testCreateOneToOneWithIdentity() { - self::assertIsFluent( - $this->builder->createOneToOne('groups', CmsGroup::class) - ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') - ->cascadeAll() - ->fetchExtraLazy() - ->makePrimaryKey() - ->build() - ); - $joinColumn = new JoinColumnMetadata(); + $joinColumn->setTableName('CmsUser'); $joinColumn->setColumnName('group_id'); $joinColumn->setReferencedColumnName('id'); $joinColumn->setOnDelete('CASCADE'); + $association = $this->builder->createOneToOne('groups', CmsGroup::class) + ->withJoinColumn($joinColumn) + ->withCascade(['ALL']) + ->withFetchMode(FetchMode::EXTRA_LAZY) + ->withPrimaryKey(true) + ->build() + ; + + $this->cm->mapOneToOne($association); + self::assertEquals( [ - 'groups' => [ - 'fieldName' => 'groups', - 'targetEntity' => CmsGroup::class, - 'cascade' => [ - 0 => 'remove', - 1 => 'persist', - 2 => 'refresh', - 3 => 'merge', - 4 => 'detach', - ], - 'fetch' => FetchMode::EXTRA_LAZY, - 'id' => true, - 'joinColumns' => [$joinColumn], - 'type' => 1, - 'mappedBy' => NULL, - 'inversedBy' => NULL, - 'isOwningSide' => true, - 'sourceEntity' => CmsUser::class, - 'orphanRemoval' => false, - 'declaringClass' => $this->cm, - ], + 'groups' => $association ], $this->cm->associationMappings ); @@ -501,64 +431,48 @@ public function testThrowsExceptionOnCreateOneToOneWithIdentityOnInverseSide() { $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - $this + $association = $this ->builder ->createOneToOne('groups', CmsGroup::class) - ->mappedBy('test') - ->fetchExtraLazy() - ->makePrimaryKey() + ->withMappedBy('test') + ->withFetchMode(FetchMode::EXTRA_LAZY) + ->withPrimaryKey(true) ->build(); + + $this->cm->mapOneToOne($association); } public function testCreateManyToMany() { - self::assertIsFluent( - $this->builder->createManyToMany('groups', CmsGroup::class) - ->setJoinTable('groups_users') - ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') - ->addInverseJoinColumn('user_id', 'id') - ->cascadeAll() - ->fetchExtraLazy() - ->build() - ); - $joinColumn = new JoinColumnMetadata(); + $joinColumn->setColumnName('group_id'); $joinColumn->setReferencedColumnName('id'); $joinColumn->setOnDelete('CASCADE'); $inverseJoinColumn = new JoinColumnMetadata(); + $inverseJoinColumn->setColumnName('user_id'); $inverseJoinColumn->setReferencedColumnName('id'); $joinTable = new JoinTableMetadata(); + $joinTable->setName('groups_users'); $joinTable->addJoinColumn($joinColumn); $joinTable->addInverseJoinColumn($inverseJoinColumn); + $association = $this->builder->createManyToMany('groups', CmsGroup::class) + ->withJoinTable($joinTable) + ->withCascade(['ALL']) + ->withFetchMode(FetchMode::EXTRA_LAZY) + ->build() + ; + + $this->cm->mapManyToMany($association); + self::assertEquals( [ - 'groups' => [ - 'fieldName' => 'groups', - 'targetEntity' => CmsGroup::class, - 'cascade' => - [ - 0 => 'remove', - 1 => 'persist', - 2 => 'refresh', - 3 => 'merge', - 4 => 'detach', - ], - 'fetch' => FetchMode::EXTRA_LAZY, - 'joinTable' => $joinTable, - 'type' => 8, - 'mappedBy' => NULL, - 'inversedBy' => NULL, - 'isOwningSide' => true, - 'sourceEntity' => CmsUser::class, - 'orphanRemoval' => false, - 'declaringClass' => $this->cm, - ], + 'groups' => $association ], $this->cm->associationMappings ); @@ -566,47 +480,50 @@ public function testCreateManyToMany() public function testThrowsExceptionOnCreateManyToManyWithIdentity() { + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setColumnName('group_id'); + $joinColumn->setReferencedColumnName('id'); + $joinColumn->setOnDelete('CASCADE'); + + $inverseJoinColumn = new JoinColumnMetadata(); + + $inverseJoinColumn->setColumnName('user_id'); + $inverseJoinColumn->setReferencedColumnName('id'); + + $joinTable = new JoinTableMetadata(); + + $joinTable->setName('groups_users'); + $joinTable->addJoinColumn($joinColumn); + $joinTable->addInverseJoinColumn($inverseJoinColumn); + $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - $this->builder->createManyToMany('groups', CmsGroup::class) - ->makePrimaryKey() - ->setJoinTable('groups_users') - ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') - ->addInverseJoinColumn('user_id', 'id') - ->cascadeAll() - ->fetchExtraLazy() - ->build(); + $association = $this->builder->createManyToMany('groups', CmsGroup::class) + ->withJoinTable($joinTable) + ->withCascade(['ALL']) + ->withFetchMode(FetchMode::EXTRA_LAZY) + ->withPrimaryKey(true) + ->build() + ; + + $this->cm->mapManyToMany($association); } public function testCreateOneToMany() { - self::assertIsFluent( - $this->builder->createOneToMany('groups', CmsGroup::class) - ->mappedBy('test') - ->setOrderBy(['test']) - ->setIndexBy('test') - ->build() - ); + $association = $this->builder->createOneToMany('groups', CmsGroup::class) + ->withMappedBy('test') + ->withOrderBy('test', 'ASC') + ->withIndexedBy('test') + ->build() + ; + + $this->cm->mapOneToMany($association); self::assertEquals( [ - 'groups' => [ - 'fieldName' => 'groups', - 'targetEntity' => CmsGroup::class, - 'mappedBy' => 'test', - 'orderBy' => [ - 0 => 'test', - ], - 'indexBy' => 'test', - 'type' => 4, - 'inversedBy' => NULL, - 'isOwningSide' => false, - 'sourceEntity' => CmsUser::class, - 'fetch' => FetchMode::LAZY, - 'cascade' => [], - 'orphanRemoval' => false, - 'declaringClass' => $this->cm, - ], + 'groups' => $association ], $this->cm->associationMappings ); @@ -616,47 +533,38 @@ public function testThrowsExceptionOnCreateOneToManyWithIdentity() { $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - $this->builder->createOneToMany('groups', CmsGroup::class) - ->makePrimaryKey() - ->mappedBy('test') - ->setOrderBy(['test']) - ->setIndexBy('test') + $association = $this->builder->createOneToMany('groups', CmsGroup::class) + ->withPrimaryKey(true) + ->withMappedBy('test') + ->withOrderBy('test', 'ASC') + ->withIndexedBy('test') ->build(); + + $this->cm->mapOneToMany($association); } public function testOrphanRemovalOnCreateOneToOne() { - self::assertIsFluent( - $this->builder - ->createOneToOne('groups', CmsGroup::class) - ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') - ->orphanRemoval() - ->build() - ); - $joinColumn = new JoinColumnMetadata(); + $joinColumn->setTableName('CmsUser'); $joinColumn->setColumnName('group_id'); $joinColumn->setReferencedColumnName('id'); $joinColumn->setOnDelete('CASCADE'); $joinColumn->setUnique(true); + $association = $this->builder + ->createOneToOne('groups', CmsGroup::class) + ->withJoinColumn($joinColumn) + ->withOrphanRemoval(true) + ->build() + ; + + $this->cm->mapOneToOne($association); + self::assertEquals( [ - 'groups' => [ - 'fieldName' => 'groups', - 'targetEntity' => CmsGroup::class, - 'cascade' => [0 => 'remove'], - 'fetch' => FetchMode::LAZY, - 'joinColumns' => [$joinColumn], - 'type' => 1, - 'mappedBy' => NULL, - 'inversedBy' => NULL, - 'isOwningSide' => true, - 'sourceEntity' => CmsUser::class, - 'orphanRemoval' => true, - 'declaringClass' => $this->cm, - ], + 'groups' => $association ], $this->cm->associationMappings ); @@ -664,29 +572,18 @@ public function testOrphanRemovalOnCreateOneToOne() public function testOrphanRemovalOnCreateOneToMany() { - self::assertIsFluent( - $this->builder - ->createOneToMany('groups', CmsGroup::class) - ->mappedBy('test') - ->orphanRemoval() - ->build() - ); + $association = $this->builder + ->createOneToMany('groups', CmsGroup::class) + ->withMappedBy('test') + ->withOrphanRemoval(true) + ->build() + ; + + $this->cm->mapOneToMany($association); self::assertEquals( [ - 'groups' => [ - 'fieldName' => 'groups', - 'targetEntity' => CmsGroup::class, - 'mappedBy' => 'test', - 'type' => 4, - 'inversedBy' => NULL, - 'isOwningSide' => false, - 'sourceEntity' => CmsUser::class, - 'fetch' => FetchMode::LAZY, - 'cascade' => [0 => 'remove'], - 'orphanRemoval' => true, - 'declaringClass' => $this->cm, - ], + 'groups' => $association ], $this->cm->associationMappings ); @@ -694,54 +591,56 @@ public function testOrphanRemovalOnCreateOneToMany() public function testExceptionOnOrphanRemovalOnManyToOne() { + $joinColumn = new JoinColumnMetadata(); + + $joinColumn->setTableName('CmsUser'); + $joinColumn->setColumnName('group_id'); + $joinColumn->setReferencedColumnName('id'); + $joinColumn->setOnDelete('CASCADE'); + $joinColumn->setUnique(true); + $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - $this->builder + $association = $this->builder ->createManyToOne('groups', CmsGroup::class) - ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') - ->orphanRemoval() + ->withJoinColumn($joinColumn) + ->withOrphanRemoval(true) ->build(); + + $this->cm->mapManyToOne($association); } public function testOrphanRemovalOnManyToMany() { - $this->builder - ->createManyToMany('groups', CmsGroup::class) - ->addJoinColumn('group_id', 'id', true, false, 'CASCADE') - ->orphanRemoval() - ->build(); - $joinColumn = new JoinColumnMetadata(); + $joinColumn->setColumnName('group_id'); $joinColumn->setReferencedColumnName('id'); $joinColumn->setOnDelete('CASCADE'); $inverseJoinColumn = new JoinColumnMetadata(); + $inverseJoinColumn->setColumnName('cmsgroup_id'); $inverseJoinColumn->setReferencedColumnName('id'); $inverseJoinColumn->setOnDelete('CASCADE'); $joinTable = new JoinTableMetadata(); + $joinTable->setName('cmsuser_cmsgroup'); $joinTable->addJoinColumn($joinColumn); $joinTable->addInverseJoinColumn($inverseJoinColumn); + $association = $this->builder + ->createManyToMany('groups', CmsGroup::class) + ->withJoinTable($joinTable) + ->withOrphanRemoval(true) + ->build(); + + $this->cm->mapManyToMany($association); + self::assertEquals( [ - 'groups' => [ - 'fieldName' => 'groups', - 'targetEntity' => CmsGroup::class, - 'cascade' => [], - 'fetch' => FetchMode::LAZY, - 'joinTable' => $joinTable, - 'type' => 8, - 'mappedBy' => NULL, - 'inversedBy' => NULL, - 'isOwningSide' => true, - 'sourceEntity' => CmsUser::class, - 'orphanRemoval' => true, - 'declaringClass' => $this->cm, - ], + 'groups' => $association ], $this->cm->associationMappings ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index c394c16e1a3..1241d60d8a5 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -301,7 +301,12 @@ protected function createValidClassMetadata() $cm1->addProperty($fieldMetadata); // and a mapped association - $cm1->mapOneToOne(['fieldName' => 'other', 'targetEntity' => 'TestEntity1', 'mappedBy' => 'this']); + $association = new Mapping\OneToOneAssociationMetadata('other'); + + $association->setTargetEntity('TestEntity1'); + $association->setMappedBy('this'); + + $cm1->mapOneToOne($association); // and an association on the owning side $joinColumns = []; @@ -313,13 +318,12 @@ protected function createValidClassMetadata() $joinColumns[] = $joinColumn; - $cm1->mapOneToOne( - [ - 'fieldName' => 'association', - 'targetEntity' => 'TestEntity1', - 'joinColumns' => $joinColumns, - ] - ); + $association = new Mapping\OneToOneAssociationMetadata('association'); + + $association->setJoinColumns($joinColumns); + $association->setTargetEntity('TestEntity1'); + + $cm1->mapOneToOne($association); // and an id generator type $cm1->setIdGeneratorType(Mapping\GeneratorType::AUTO); @@ -347,7 +351,8 @@ public function testQuoteMetadata() self::assertEquals('phone-number', $phoneMetadata->getProperty('number')->getColumnName()); $user = $phoneMetadata->associationMappings['user']; - $phoneUserJoinColumn = reset($user['joinColumns']); + $userJoinColumns = $user->getJoinColumns(); + $phoneUserJoinColumn = reset($userJoinColumns); self::assertEquals('user-id', $phoneUserJoinColumn->getColumnName()); self::assertEquals('user-id', $phoneUserJoinColumn->getReferencedColumnName()); @@ -365,30 +370,34 @@ public function testQuoteMetadata() self::assertEquals('user-name', $userMetadata->getProperty('name')->getColumnName()); $group = $groupMetadata->associationMappings['parent']; - $groupUserJoinColumn = reset($group['joinColumns']); + $groupJoinColumns = $group->getJoinColumns(); + $groupUserJoinColumn = reset($groupJoinColumns); self::assertEquals('parent-id', $groupUserJoinColumn->getColumnName()); self::assertEquals('group-id', $groupUserJoinColumn->getReferencedColumnName()); $user = $addressMetadata->associationMappings['user']; - $addressUserJoinColumn = reset($user['joinColumns']); + $userJoinColumns = $user->getJoinColumns(); + $addressUserJoinColumn = reset($userJoinColumns); self::assertEquals('user-id', $addressUserJoinColumn->getColumnName()); self::assertEquals('user-id', $addressUserJoinColumn->getReferencedColumnName()); $address = $userMetadata->associationMappings['address']; - $userAddressJoinColumn = reset($address['joinColumns']); + $addressJoinColumns = $address->getJoinColumns(); + $userAddressJoinColumn = reset($addressJoinColumns); self::assertEquals('address-id', $userAddressJoinColumn->getColumnName()); self::assertEquals('address-id', $userAddressJoinColumn->getReferencedColumnName()); $groups = $userMetadata->associationMappings['groups']; - $userGroupsJoinColumns = $groups['joinTable']->getJoinColumns(); + $groupsJoinTable = $groups->getJoinTable(); + $userGroupsJoinColumns = $groupsJoinTable->getJoinColumns(); $userGroupsJoinColumn = reset($userGroupsJoinColumns); - $userGroupsInverseJoinColumns = $groups['joinTable']->getInverseJoinColumns(); + $userGroupsInverseJoinColumns = $groupsJoinTable->getInverseJoinColumns(); $userGroupsInverseJoinColumn = reset($userGroupsInverseJoinColumns); - self::assertEquals('quote-users-groups', $groups['joinTable']->getName()); + self::assertEquals('quote-users-groups', $groupsJoinTable->getName()); self::assertEquals('user-id', $userGroupsJoinColumn->getColumnName()); self::assertEquals('user-id', $userGroupsJoinColumn->getReferencedColumnName()); self::assertEquals('group-id', $userGroupsInverseJoinColumn->getColumnName()); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index ec97662e7ae..e082ec7f0a1 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -54,10 +54,16 @@ public function testClassMetadataInstanceSerialization() $cm->setParentClasses(["UserParent"]); $cm->setCustomRepositoryClass("UserRepository"); $cm->setDiscriminatorColumn($discrColumn); - $cm->mapOneToOne(['fieldName' => 'phonenumbers', 'targetEntity' => 'CmsAddress', 'mappedBy' => 'foo']); $cm->markReadOnly(); $cm->addNamedQuery(['name' => 'dql', 'query' => 'foo']); + $association = new Mapping\OneToOneAssociationMetadata('phonenumbers'); + + $association->setTargetEntity('CmsAddress'); + $association->setMappedBy('foo'); + + $cm->mapOneToOne($association); + self::assertEquals(1, count($cm->associationMappings)); $serialized = serialize($cm); @@ -83,16 +89,15 @@ public function testClassMetadataInstanceSerialization() self::assertEquals(['UserParent'], $cm->parentClasses); self::assertEquals(CMS\UserRepository::class, $cm->customRepositoryClassName); self::assertEquals($discrColumn, $cm->discriminatorColumn); - self::assertTrue($cm->associationMappings['phonenumbers']['type'] == ClassMetadata::ONE_TO_ONE); + self::assertTrue($cm->isReadOnly); + self::assertEquals(['dql' => ['name'=>'dql','query'=>'foo','dql'=>'foo']], $cm->namedQueries); self::assertEquals(1, count($cm->associationMappings)); + self::assertInstanceOf(Mapping\OneToOneAssociationMetadata::class, $cm->associationMappings['phonenumbers']); - $oneOneMapping = $cm->getAssociationMapping('phonenumbers'); + $oneOneMapping = $cm->associationMappings['phonenumbers']; - self::assertTrue($oneOneMapping['fetch'] == Mapping\FetchMode::LAZY); - self::assertEquals('phonenumbers', $oneOneMapping['fieldName']); - self::assertEquals(CMS\CmsAddress::class, $oneOneMapping['targetEntity']); - self::assertTrue($cm->isReadOnly); - self::assertEquals(['dql' => ['name'=>'dql','query'=>'foo','dql'=>'foo']], $cm->namedQueries); + self::assertEquals(Mapping\FetchMode::LAZY, $oneOneMapping->getFetchMode()); + self::assertEquals(CMS\CmsAddress::class, $oneOneMapping->getTargetEntity()); } public function testFieldIsNullable() @@ -165,29 +170,28 @@ public function testMapAssociationInGlobalNamespace() $joinTable->addInverseJoinColumn($joinColumn); - $cm->mapManyToMany( - [ - 'fieldName' => 'author', - 'targetEntity' => 'DoctrineGlobal_User', - 'joinTable' => $joinTable, - ] - ); + $association = new Mapping\ManyToManyAssociationMetadata('author'); + + $association->setJoinTable($joinTable); + $association->setTargetEntity('DoctrineGlobal_User'); - self::assertEquals("DoctrineGlobal_User", $cm->associationMappings['author']['targetEntity']); + $cm->mapManyToMany($association); + + self::assertEquals("DoctrineGlobal_User", $cm->associationMappings['author']->getTargetEntity()); } public function testMapManyToManyJoinTableDefaults() { $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->mapManyToMany( - [ - 'fieldName' => 'groups', - 'targetEntity' => 'CmsGroup' - ] - ); - $assoc = $cm->associationMappings['groups']; + $association = new Mapping\ManyToManyAssociationMetadata('groups'); + + $association->setTargetEntity('CmsGroup'); + + $cm->mapManyToMany($association); + + $association = $cm->associationMappings['groups']; $joinColumns = []; @@ -209,26 +213,30 @@ public function testMapManyToManyJoinTableDefaults() $inverseJoinColumns[] = $joinColumn; - self::assertEquals('cmsuser_cmsgroup', $assoc['joinTable']->getName()); - self::assertEquals($joinColumns, $assoc['joinTable']->getJoinColumns()); - self::assertEquals($inverseJoinColumns, $assoc['joinTable']->getInverseJoinColumns()); + $joinTable = $association->getJoinTable(); + + self::assertEquals('cmsuser_cmsgroup', $joinTable->getName()); + self::assertEquals($joinColumns, $joinTable->getJoinColumns()); + self::assertEquals($inverseJoinColumns, $joinTable->getInverseJoinColumns()); } public function testSerializeManyToManyJoinTableCascade() { $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->mapManyToMany( - [ - 'fieldName' => 'groups', - 'targetEntity' => 'CmsGroup' - ] - ); - $assoc = $cm->associationMappings['groups']; - $assoc = unserialize(serialize($assoc)); + $association = new Mapping\ManyToManyAssociationMetadata('groups'); + + $association->setTargetEntity('CmsGroup'); + + $cm->mapManyToMany($association); + + $association = $cm->associationMappings['groups']; + $association = unserialize(serialize($association)); - foreach ($assoc['joinTable']->getJoinColumns() as $joinColumn) { + $joinTable = $association->getJoinTable(); + + foreach ($joinTable->getJoinColumns() as $joinColumn) { self::assertEquals('CASCADE', $joinColumn->getOnDelete()); } } @@ -276,7 +284,7 @@ public function testSetInvalidVersionMapping_ThrowsException() $metadata->initializeReflection(new RuntimeReflectionService()); - $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); + $this->expectException(MappingException::class); $metadata->setVersionProperty($property); } @@ -287,7 +295,7 @@ public function testGetSingleIdentifierFieldName_MultipleIdentifierEntity_Throws $cm->initializeReflection(new RuntimeReflectionService()); $cm->isIdentifierComposite = true; - $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); + $this->expectException(MappingException::class); $cm->getSingleIdentifierFieldName(); } @@ -305,12 +313,25 @@ public function testDuplicateAssociationMappingException() $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $a1 = ['fieldName' => 'foo', 'sourceEntity' => 'stdClass', 'targetEntity' => 'stdClass', 'mappedBy' => 'foo']; - $a2 = ['fieldName' => 'foo', 'sourceEntity' => 'stdClass', 'targetEntity' => 'stdClass', 'mappedBy' => 'foo']; + $association = new Mapping\OneToOneAssociationMetadata('foo'); - $cm->addInheritedAssociationMapping($a1); - $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - $cm->addInheritedAssociationMapping($a2); + $association->setDeclaringClass($cm); + $association->setSourceEntity('stdClass'); + $association->setTargetEntity('stdClass'); + $association->setMappedBy('foo'); + + $cm->addInheritedAssociation($association); + + $this->expectException(MappingException::class); + + $association = new Mapping\OneToOneAssociationMetadata('foo'); + + $association->setDeclaringClass($cm); + $association->setSourceEntity('stdClass'); + $association->setTargetEntity('stdClass'); + $association->setMappedBy('foo'); + + $cm->addInheritedAssociation($association); } public function testDuplicateColumnName_ThrowsMappingException() @@ -324,7 +345,7 @@ public function testDuplicateColumnName_ThrowsMappingException() $metadata->addProperty($fieldMetadata); - $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); + $this->expectException(MappingException::class); $fieldMetadata = new Mapping\FieldMetadata('username'); @@ -390,7 +411,12 @@ public function testDuplicateFieldAndAssociationMapping1_ThrowsException() $metadata->addProperty($fieldMetadata); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - $metadata->mapOneToOne(['fieldName' => 'name', 'targetEntity' => 'CmsUser']); + + $association = new Mapping\OneToOneAssociationMetadata('name'); + + $association->setTargetEntity('CmsUser'); + + $metadata->mapOneToOne($association); } public function testDuplicateFieldAndAssociationMapping2_ThrowsException() @@ -398,7 +424,11 @@ public function testDuplicateFieldAndAssociationMapping2_ThrowsException() $metadata = new ClassMetadata(CMS\CmsUser::class); $metadata->initializeReflection(new RuntimeReflectionService()); - $metadata->mapOneToOne(['fieldName' => 'name', 'targetEntity' => 'CmsUser']); + $association = new Mapping\OneToOneAssociationMetadata('name'); + + $association->setTargetEntity('CmsUser'); + + $metadata->mapOneToOne($association); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); @@ -452,16 +482,17 @@ public function testDefaultTableName() $joinTable->addInverseJoinColumn($joinColumn); - $cm->mapManyToMany( - [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser', - 'inversedBy' => 'users', - 'joinTable' => $joinTable, - ] - ); + $association = new Mapping\ManyToManyAssociationMetadata('user'); + + $association->setJoinTable($joinTable); + $association->setTargetEntity('CmsUser'); + $association->setInversedBy('users'); - self::assertEquals('cmsaddress_cmsuser', $cm->associationMappings['user']['joinTable']->getName()); + $cm->mapManyToMany($association); + + $association = $cm->associationMappings['user']; + + self::assertEquals('cmsaddress_cmsuser', $association->getJoinTable()->getName()); } public function testDefaultJoinColumnName() @@ -479,16 +510,16 @@ public function testDefaultJoinColumnName() $joinColumns[] = $joinColumn; - $cm->mapOneToOne( - [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser', - 'joinColumns' => $joinColumns, - ] - ); + $association = new Mapping\OneToOneAssociationMetadata('user'); + + $association->setJoinColumns($joinColumns); + $association->setTargetEntity('CmsUser'); + + $cm->mapOneToOne($association); $association = $cm->associationMappings['user']; - $joinColumn = reset($association['joinColumns']); + $joinColumns = $association->getJoinColumns(); + $joinColumn = reset($joinColumns); self::assertEquals('user_id', $joinColumn->getColumnName()); @@ -508,19 +539,19 @@ public function testDefaultJoinColumnName() $joinTable->addInverseJoinColumn($joinColumn); - $cm->mapManyToMany( - [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser', - 'inversedBy' => 'users', - 'joinTable' => $joinTable, - ] - ); + $association = new Mapping\ManyToManyAssociationMetadata('user'); + + $association->setJoinTable($joinTable); + $association->setTargetEntity('CmsUser'); + $association->setInversedBy('users'); + + $cm->mapManyToMany($association); $association = $cm->associationMappings['user']; - $joinColumns = $association['joinTable']->getJoinColumns(); + $joinTable = $association->getJoinTable(); + $joinColumns = $joinTable->getJoinColumns(); $joinColumn = reset($joinColumns); - $inverseJoinColumns = $association['joinTable']->getInverseJoinColumns(); + $inverseJoinColumns = $joinTable->getInverseJoinColumns(); $inverseJoinColumn = reset($inverseJoinColumns); self::assertEquals('cmsaddress_id', $joinColumn->getColumnName()); @@ -535,15 +566,15 @@ public function testOneToOneUnderscoreNamingStrategyDefaults() $namingStrategy = new UnderscoreNamingStrategy(CASE_UPPER); $metadata = new ClassMetadata(CMS\CmsAddress::class, $namingStrategy); - $metadata->mapOneToOne( - [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser' - ] - ); + $association = new Mapping\OneToOneAssociationMetadata('user'); + + $association->setTargetEntity('CmsUser'); + + $metadata->mapOneToOne($association); $association = $metadata->associationMappings['user']; - $joinColumn = reset($association['joinColumns']); + $joinColumns = $association->getJoinColumns(); + $joinColumn = reset($joinColumns); self::assertEquals('USER_ID', $joinColumn->getColumnName()); self::assertEquals('ID', $joinColumn->getReferencedColumnName()); @@ -557,20 +588,20 @@ public function testManyToManyUnderscoreNamingStrategyDefaults() $namingStrategy = new UnderscoreNamingStrategy(CASE_UPPER); $metadata = new ClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress', $namingStrategy); - $metadata->mapManyToMany( - [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser' - ] - ); + $association = new Mapping\ManyToManyAssociationMetadata('user'); + + $association->setTargetEntity('CmsUser'); + + $metadata->mapManyToMany($association); $association = $metadata->associationMappings['user']; - $joinColumns = $association['joinTable']->getJoinColumns(); + $joinTable = $association->getJoinTable(); + $joinColumns = $joinTable->getJoinColumns(); $joinColumn = reset($joinColumns); - $inverseJoinColumns = $association['joinTable']->getInverseJoinColumns(); + $inverseJoinColumns = $joinTable->getInverseJoinColumns(); $inverseJoinColumn = reset($inverseJoinColumns); - self::assertEquals('CMS_ADDRESS_CMS_USER', $association['joinTable']->getName()); + self::assertEquals('CMS_ADDRESS_CMS_USER', $joinTable->getName()); self::assertEquals('CMS_ADDRESS_ID', $joinColumn->getColumnName()); self::assertEquals('ID', $joinColumn->getReferencedColumnName()); @@ -580,14 +611,15 @@ public function testManyToManyUnderscoreNamingStrategyDefaults() $cm = new ClassMetadata('DoctrineGlobal_Article', $namingStrategy); - $cm->mapManyToMany( - [ - 'fieldName' => 'author', - 'targetEntity' => CMS\CmsUser::class - ] - ); + $association = new Mapping\ManyToManyAssociationMetadata('author'); + + $association->setTargetEntity(CMS\CmsUser::class); - self::assertEquals('DOCTRINE_GLOBAL_ARTICLE_CMS_USER', $cm->associationMappings['author']['joinTable']->getName()); + $cm->mapManyToMany($association); + + $association = $cm->associationMappings['author']; + + self::assertEquals('DOCTRINE_GLOBAL_ARTICLE_CMS_USER', $association->getJoinTable()->getName()); } /** @@ -617,13 +649,18 @@ public function testSetMultipleIdentifierSetsComposite() */ public function testJoinTableMappingDefaults() { - $cm = new ClassMetadata('DoctrineGlobal_Article'); + $metadata = new ClassMetadata('DoctrineGlobal_Article'); + $metadata->initializeReflection(new RuntimeReflectionService()); - $cm->initializeReflection(new RuntimeReflectionService()); + $association = new Mapping\ManyToManyAssociationMetadata('author'); - $cm->mapManyToMany(['fieldName' => 'author', 'targetEntity' => CMS\CmsUser::class]); + $association->setTargetEntity(CMS\CmsUser::class); - self::assertEquals('doctrineglobal_article_cmsuser', $cm->associationMappings['author']['joinTable']->getName()); + $metadata->mapManyToMany($association); + + $association = $metadata->associationMappings['author']; + + self::assertEquals('doctrineglobal_article_cmsuser', $association->getJoinTable()->getName()); } /** @@ -634,14 +671,12 @@ public function testMapIdentifierAssociation() $cm = new ClassMetadata(DDC117ArticleDetails::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->mapOneToOne( - [ - 'fieldName' => 'article', - 'id' => true, - 'targetEntity' => DDC117Article::class, - 'joinColumns' => [], - ] - ); + $association = new Mapping\OneToOneAssociationMetadata('article'); + + $association->setTargetEntity(DDC117Article::class); + $association->setPrimaryKey(true); + + $cm->mapOneToOne($association); self::assertEquals(["article"], $cm->identifier); } @@ -657,15 +692,13 @@ public function testOrphanRemovalIdentifierAssociation() $this->expectException(MappingException::class); $this->expectExceptionMessage('The orphan removal option is not allowed on an association that'); - $cm->mapOneToOne( - [ - 'fieldName' => 'article', - 'id' => true, - 'targetEntity' => DDC117Article::class, - 'orphanRemoval' => true, - 'joinColumns' => [], - ] - ); + $association = new Mapping\OneToOneAssociationMetadata('article'); + + $association->setTargetEntity(DDC117Article::class); + $association->setPrimaryKey(true); + $association->setOrphanRemoval(true); + + $cm->mapOneToOne($association); } /** @@ -679,15 +712,13 @@ public function testInverseIdentifierAssociation() $this->expectException(MappingException::class); $this->expectExceptionMessage('An inverse association is not allowed to be identifier in'); - $cm->mapOneToOne( - [ - 'fieldName' => 'article', - 'id' => true, - 'mappedBy' => 'details', // INVERSE! - 'targetEntity' => DDC117Article::class, - 'joinColumns' => [], - ] - ); + $association = new Mapping\OneToOneAssociationMetadata('article'); + + $association->setTargetEntity(DDC117Article::class); + $association->setPrimaryKey(true); + $association->setMappedBy('details'); + + $cm->mapOneToOne($association); } /** @@ -701,14 +732,12 @@ public function testIdentifierAssociationManyToMany() $this->expectException(MappingException::class); $this->expectExceptionMessage('Many-to-many or one-to-many associations are not allowed to be identifier in'); - $cm->mapManyToMany( - [ - 'fieldName' => 'article', - 'id' => true, - 'targetEntity' => DDC117Article::class, - 'joinColumns' => [], - ] - ); + $association = new Mapping\ManyToManyAssociationMetadata('article'); + + $association->setTargetEntity(DDC117Article::class); + $association->setPrimaryKey(true); + + $cm->mapManyToMany($association); } /** @@ -912,7 +941,6 @@ public function testExistanceOfNamedNativeQuery() $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->addNamedNativeQuery( [ 'name' => 'find-all', @@ -1103,7 +1131,12 @@ public function testTargetEntityNotFound() { $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->mapManyToOne(['fieldName' => 'address', 'targetEntity' => 'UnknownClass']); + + $association = new Mapping\ManyToOneAssociationMetadata('address'); + + $association->setTargetEntity('UnknownClass'); + + $cm->mapManyToOne($association); $this->expectException(MappingException::class); $this->expectExceptionMessage("The target-entity Doctrine\\Tests\\Models\\CMS\\UnknownClass cannot be found in '" . CMS\CmsUser::class . "#address'."); @@ -1121,6 +1154,7 @@ public function testNameIsMandatoryForNamedQueryMappingException() { $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); + $cm->addNamedQuery( [ 'query' => 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u', @@ -1138,6 +1172,7 @@ public function testNameIsMandatoryForNameNativeQueryMappingException() { $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); + $cm->addNamedQuery( [ 'query' => 'SELECT * FROM cms_users', @@ -1157,6 +1192,7 @@ public function testNameIsMandatoryForEntityNameSqlResultSetMappingException() { $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); + $cm->addSqlResultSetMapping( [ 'name' => 'find-all', @@ -1185,23 +1221,21 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategy() $articleMetadata->initializeReflection(new RuntimeReflectionService()); $routingMetadata->initializeReflection(new RuntimeReflectionService()); - $addressMetadata->mapManyToMany( - [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser' - ] - ); + $association = new Mapping\ManyToManyAssociationMetadata('user'); - $articleMetadata->mapManyToMany( - [ - 'fieldName' => 'author', - 'targetEntity' => CMS\CmsUser::class - ] - ); + $association->setTargetEntity('CmsUser'); + + $addressMetadata->mapManyToMany($association); + + $association = new Mapping\ManyToManyAssociationMetadata('author'); + + $association->setTargetEntity(CMS\CmsUser::class); + + $articleMetadata->mapManyToMany($association); self::assertEquals('routing_routingleg', $routingMetadata->table->getName()); - self::assertEquals('cms_cmsaddress_cms_cmsuser', $addressMetadata->associationMappings['user']['joinTable']->getName()); - self::assertEquals('doctrineglobal_article_cms_cmsuser', $articleMetadata->associationMappings['author']['joinTable']->getName()); + self::assertEquals('cms_cmsaddress_cms_cmsuser', $addressMetadata->associationMappings['user']->getJoinTable()->getName()); + self::assertEquals('doctrineglobal_article_cms_cmsuser', $articleMetadata->associationMappings['author']->getJoinTable()->getName()); } /** @@ -1238,30 +1272,39 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategyProperty /** * @group DDC-1746 + * @expectedException \Doctrine\ORM\Mapping\MappingException + * @expectedExceptionMessage You have specified invalid cascade options for Doctrine\Tests\Models\CMS\CmsUser::$address: 'invalid'; available options: 'remove', 'persist', 'refresh', 'merge', and 'detach' */ public function testInvalidCascade() { $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $this->expectException(MappingException::class); - $this->expectExceptionMessage("You have specified invalid cascade options for " . CMS\CmsUser::class . "::\$address: 'invalid'; available options: 'remove', 'persist', 'refresh', 'merge', and 'detach'"); + $association = new Mapping\ManyToOneAssociationMetadata('address'); + + $association->setTargetEntity('UnknownClass'); + $association->setCascade(['invalid']); - $cm->mapManyToOne(['fieldName' => 'address', 'targetEntity' => 'UnknownClass', 'cascade' => ['invalid']]); + $cm->mapManyToOne($association); } /** * @group DDC-964 * @expectedException \Doctrine\ORM\Mapping\MappingException - * @expectedExceptionMessage Invalid field override named 'invalidPropertyName' for class 'Doctrine\Tests\Models\DDC964\DDC964Admin + * @expectedExceptionMessage Invalid field override named 'invalidPropertyName' for class 'Doctrine\Tests\Models\DDC964\DDC964Admin' */ public function testInvalidPropertyAssociationOverrideNameException() { $cm = new ClassMetadata(DDC964Admin::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->mapManyToOne(['fieldName' => 'address', 'targetEntity' => 'DDC964Address']); - $cm->setAssociationOverride('invalidPropertyName', []); + $association = new Mapping\ManyToOneAssociationMetadata('address'); + + $association->setTargetEntity('DDC964Address'); + + $cm->mapManyToOne($association); + + $cm->setAssociationOverride(new Mapping\ManyToOneAssociationMetadata('invalidPropertyName')); } /** @@ -1317,12 +1360,12 @@ public function testManyToManySelfReferencingNamingStrategyDefaults() { $cm = new ClassMetadata(CustomTypeParent::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->mapManyToMany( - [ - 'fieldName' => 'friendsWithMe', - 'targetEntity' => 'CustomTypeParent' - ] - ); + + $association = new Mapping\ManyToManyAssociationMetadata('friendsWithMe'); + + $association->setTargetEntity('CustomTypeParent'); + + $cm->mapManyToMany($association); $association = $cm->associationMappings['friendsWithMe']; @@ -1346,9 +1389,11 @@ public function testManyToManySelfReferencingNamingStrategyDefaults() $inverseJoinColumns[] = $joinColumn; - self::assertEquals('customtypeparent_customtypeparent', $association['joinTable']->getName()); - self::assertEquals($joinColumns, $association['joinTable']->getJoinColumns()); - self::assertEquals($inverseJoinColumns, $association['joinTable']->getInverseJoinColumns()); + $joinTable = $association->getJoinTable(); + + self::assertEquals('customtypeparent_customtypeparent', $joinTable->getName()); + self::assertEquals($joinColumns, $joinTable->getJoinColumns()); + self::assertEquals($inverseJoinColumns, $joinTable->getInverseJoinColumns()); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php index e5ab3635772..3cfac45bbf8 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php @@ -65,8 +65,9 @@ public function testIdentifierWithAssociationKey() self::assertEquals(['language', 'article'], $class->identifier); self::assertArrayHasKey('article', $class->associationMappings); - self::assertArrayHasKey('id', $class->associationMappings['article']); - self::assertTrue($class->associationMappings['article']['id']); + $association = $class->associationMappings['article']; + + self::assertTrue($association->isPrimaryKey()); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php index dd51bd33de2..6e4a05a04c5 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php @@ -37,13 +37,12 @@ $joinColumns[] = $joinColumn; -$metadata->mapOneToOne( - [ - 'fieldName' => 'user', - 'targetEntity' => 'CmsUser', - 'joinColumns' => $joinColumns - ] -); +$association = new Mapping\OneToOneAssociationMetadata('user'); + +$association->setJoinColumns($joinColumns); +$association->setTargetEntity('CmsUser'); + +$metadata->mapOneToOne($association); $metadata->addNamedNativeQuery( [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index 66ea269d98c..0aa93360b36 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -42,32 +42,29 @@ $joinColumns[] = $joinColumn; -$metadata->mapOneToOne( - [ - 'fieldName' => 'state', - 'targetEntity' => State::class, - 'inversedBy' => 'cities', - 'joinColumns' => $joinColumns, - ] -); +$association = new Mapping\OneToOneAssociationMetadata('state'); + +$association->setJoinColumns($joinColumns); +$association->setTargetEntity(State::class); +$association->setInversedBy('cities'); + +$metadata->mapOneToOne($association); $metadata->enableAssociationCache('state', ['usage' => Mapping\CacheUsage::READ_ONLY]); -$metadata->mapManyToMany( - [ - 'fieldName' => 'travels', - 'targetEntity' => Travel::class, - 'mappedBy' => 'visitedCities', - ] -); +$association = new Mapping\ManyToManyAssociationMetadata('travels'); -$metadata->mapOneToMany( - [ - 'fieldName' => 'attractions', - 'targetEntity' => Attraction::class, - 'mappedBy' => 'city', - 'orderBy' => ['name' => 'ASC'], - ] -); +$association->setTargetEntity(Travel::class); +$association->setMappedBy('visitedCities'); + +$metadata->mapManyToMany($association); + +$association = new Mapping\OneToManyAssociationMetadata('attractions'); + +$association->setTargetEntity(Attraction::class); +$association->setMappedBy('city'); +$association->setOrderBy(['name' => 'ASC']); + +$metadata->mapOneToMany($association); $metadata->enableAssociationCache('attractions', ['usage' => Mapping\CacheUsage::READ_ONLY]); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579Admin.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579Admin.php index 9b7c87b3e9b..cfdca4feefa 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579Admin.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579Admin.php @@ -1,6 +1,9 @@ setAssociationOverride('groups', [ - 'inversedBy' => 'admins' -] -); +use Doctrine\ORM\Mapping; + +$association = new Mapping\ManyToManyAssociationMetadata('groups'); + +$association->setInversedBy('admins'); + +$metadata->setAssociationOverride($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php index ae2eb797601..7f161e8bf47 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php @@ -21,11 +21,10 @@ $metadata->addProperty($fieldMetadata); -$metadata->mapManyToMany( - [ - 'fieldName' => 'groups', - 'targetEntity' => 'DDC3579Group' - ] -); +$association = new Mapping\ManyToManyAssociationMetadata('groups'); + +$association->setTargetEntity('DDC3579Group'); + +$metadata->mapManyToMany($association); $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php index ddb014748df..7054b47954e 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php @@ -12,7 +12,11 @@ $joinColumns[] = $joinColumn; -$metadata->setAssociationOverride('address', ['joinColumns' => $joinColumns]); +$association = new Mapping\ManyToOneAssociationMetadata('address'); + +$association->setJoinColumns($joinColumns); + +$metadata->setAssociationOverride($association); $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('ddc964_users_admingroups'); @@ -27,4 +31,8 @@ $joinTable->addInverseJoinColumn($joinColumn); -$metadata->setAssociationOverride('groups', ['joinTable' => $joinTable]); +$association = new Mapping\ManyToManyAssociationMetadata('groups'); + +$association->setJoinTable($joinTable); + +$metadata->setAssociationOverride($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php index 1ef6a06bc49..ca10b1e8780 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php @@ -31,14 +31,13 @@ $joinColumns[] = $joinColumn; -$metadata->mapManyToOne( - [ - 'fieldName' => 'address', - 'targetEntity' => 'DDC964Address', - 'cascade' => ['persist','merge'], - 'joinColumns' => $joinColumns, - ] -); +$association = new Mapping\ManyToOneAssociationMetadata('address'); + +$association->setJoinColumns($joinColumns); +$association->setTargetEntity('DDC964Address'); +$association->setCascade(['persist', 'merge']); + +$metadata->mapManyToOne($association); $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('ddc964_users_groups'); @@ -57,14 +56,13 @@ $joinTable->addInverseJoinColumn($joinColumn); -$metadata->mapManyToMany( - [ - 'fieldName' => 'groups', - 'targetEntity' => 'DDC964Group', - 'inversedBy' => 'users', - 'cascade' => ['persist','merge','detach'], - 'joinTable' => $joinTable, - ] -); +$association = new Mapping\ManyToManyAssociationMetadata('groups'); + +$association->setJoinTable($joinTable); +$association->setTargetEntity('DDC964Group'); +$association->setInversedBy('user'); +$association->setCascade(['persist','merge','detach']); + +$metadata->mapManyToMany($association); $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php index 02d384d5ae0..0fb5d6cf4b2 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php @@ -9,10 +9,9 @@ ) ); -$metadata->mapManyToOne( - [ - 'fieldName' => 'foo', - 'id' => true, - 'targetEntity' => 'PHPSLCFoo', - ] -); +$association = new Mapping\ManyToOneAssociationMetadata('foo'); + +$association->setTargetEntity('PHPSLCFoo'); +$association->setPrimaryKey(true); + +$metadata->mapManyToOne($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index eea9e015aaa..8b8e4aca6a8 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -113,28 +113,25 @@ $joinColumns[] = $joinColumn; -$metadata->mapOneToOne( - [ - 'fieldName' => 'address', - 'targetEntity' => Group::class, - 'cascade' => ['remove'], - 'mappedBy' => NULL, - 'inversedBy' => 'user', - 'joinColumns' => $joinColumns, - 'orphanRemoval' => false, - ] -); +$association = new Mapping\OneToOneAssociationMetadata('address'); -$metadata->mapOneToMany( - [ - 'fieldName' => 'phonenumbers', - 'targetEntity' => Phonenumber::class, - 'cascade' => ['persist'], - 'mappedBy' => 'user', - 'orphanRemoval' => true, - 'orderBy' => ['number' => 'ASC'], - ] -); +$association->setJoinColumns($joinColumns); +$association->setTargetEntity(Address::class); +$association->setInversedBy('user'); +$association->setCascade(['remove']); +$association->setOrphanRemoval(false); + +$metadata->mapOneToOne($association); + +$association = new Mapping\OneToManyAssociationMetadata('phonenumbers'); + +$association->setTargetEntity(Phonenumber::class); +$association->setMappedBy('user'); +$association->setCascade(['persist']); +$association->setOrphanRemoval(true); +$association->setOrderBy(['number' => 'ASC']); + +$metadata->mapOneToMany($association); $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('cms_users_groups'); @@ -155,13 +152,10 @@ $joinTable->addInverseJoinColumn($joinColumn); -$metadata->mapManyToMany( - [ - 'fieldName' => 'groups', - 'targetEntity' => Group::class, - 'cascade' => ['remove', 'persist', 'refresh', 'merge', 'detach'], - 'mappedBy' => null, - 'joinTable' => $joinTable, - 'orderBy' => null, - ] -); +$association = new Mapping\ManyToManyAssociationMetadata('groups'); + +$association->setJoinTable($joinTable); +$association->setTargetEntity(Group::class); +$association->setCascade(['remove', 'persist', 'refresh', 'merge', 'detach']); + +$metadata->mapManyToMany($association); diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php index 1240156c6b6..f2f2a529517 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Persisters; +use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; use Doctrine\ORM\Persisters\Entity\BasicEntityPersister; use Doctrine\Common\Collections\Expr\Comparison; use Doctrine\Tests\Models\GeoNames\Admin1AlternateName; @@ -32,19 +33,19 @@ protected function setUp() public function testSelectConditionStatementEq() { - $statement = $this->persister->getSelectConditionStatementSQL('admin1', 1, [], Comparison::EQ); + $statement = $this->persister->getSelectConditionStatementSQL('admin1', 1, new OneToOneAssociationMetadata('admin1'), Comparison::EQ); self::assertEquals('t0."admin1" = ? AND t0."country" = ?', $statement); } public function testSelectConditionStatementEqNull() { - $statement = $this->persister->getSelectConditionStatementSQL('admin1', null, [], Comparison::IS); + $statement = $this->persister->getSelectConditionStatementSQL('admin1', null, new OneToOneAssociationMetadata('admin1'), Comparison::IS); self::assertEquals('t0."admin1" IS NULL AND t0."country" IS NULL', $statement); } public function testSelectConditionStatementNeqNull() { - $statement = $this->persister->getSelectConditionStatementSQL('admin1', null, [], Comparison::NEQ); + $statement = $this->persister->getSelectConditionStatementSQL('admin1', null, new OneToOneAssociationMetadata('admin1'), Comparison::NEQ); self::assertEquals('t0."admin1" IS NOT NULL AND t0."country" IS NOT NULL', $statement); } @@ -53,6 +54,6 @@ public function testSelectConditionStatementNeqNull() */ public function testSelectConditionStatementIn() { - $this->persister->getSelectConditionStatementSQL('admin1', [], [], Comparison::IN); + $this->persister->getSelectConditionStatementSQL('admin1', [], new OneToOneAssociationMetadata('admin1'), Comparison::IN); } } diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php index 6b056406460..f0804b77a78 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php @@ -5,6 +5,7 @@ use Doctrine\Common\Collections\Criteria; use Doctrine\Common\Collections\Expr\Comparison; use Doctrine\DBAL\Types\Type as DBALType; +use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; use Doctrine\ORM\Persisters\Entity\BasicEntityPersister; use Doctrine\Tests\Models\CustomType\CustomTypeChild; use Doctrine\Tests\Models\CustomType\CustomTypeFriend; @@ -112,19 +113,19 @@ public function testStripNonAlphanumericCharactersFromSelectColumnListSQL() */ public function testSelectConditionStatementIsNull() { - $statement = $this->persister->getSelectConditionStatementSQL('test', null, [], Comparison::IS); + $statement = $this->persister->getSelectConditionStatementSQL('test', null, new OneToOneAssociationMetadata('test'), Comparison::IS); self::assertEquals('test IS NULL', $statement); } public function testSelectConditionStatementEqNull() { - $statement = $this->persister->getSelectConditionStatementSQL('test', null, [], Comparison::EQ); + $statement = $this->persister->getSelectConditionStatementSQL('test', null, new OneToOneAssociationMetadata('test'), Comparison::EQ); self::assertEquals('test IS NULL', $statement); } public function testSelectConditionStatementNeqNull() { - $statement = $this->persister->getSelectConditionStatementSQL('test', null, [], Comparison::NEQ); + $statement = $this->persister->getSelectConditionStatementSQL('test', null, new OneToOneAssociationMetadata('test'), Comparison::NEQ); self::assertEquals('test IS NOT NULL', $statement); } diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index c63790b8d5c..4dbd5ebb897 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -88,6 +88,7 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $metadata->setPrimaryTable($tableMetadata); + // Property: "name" $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); @@ -96,6 +97,7 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $metadata->addProperty($fieldMetadata); + // Property: "status" $fieldMetadata = new Mapping\FieldMetadata('status'); $fieldMetadata->setType(Type::getType('string')); @@ -107,6 +109,7 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $metadata->addProperty($fieldMetadata); + // Property: "id" $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); @@ -116,6 +119,7 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $metadata->addProperty($fieldMetadata); + // Property: "author" $joinColumns = []; $joinColumn = new Mapping\JoinColumnMetadata(); @@ -124,15 +128,15 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $joinColumns[] = $joinColumn; - $metadata->mapOneToOne( - [ - 'fieldName' => 'author', - 'targetEntity' => 'Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor', - 'mappedBy' => 'book', - 'joinColumns' => $joinColumns, - ] - ); + $association = new Mapping\OneToOneAssociationMetadata('author'); + + $association->setJoinColumns($joinColumns); + $association->setTargetEntity(EntityGeneratorAuthor::class); + $association->setMappedBy('book'); + $metadata->mapOneToOne($association); + + // Property: "comments" $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('book_comment'); @@ -148,14 +152,13 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $joinTable->addInverseJoinColumn($joinColumn); - $metadata->mapManyToMany( - [ - 'fieldName' => 'comments', - 'targetEntity' => 'Doctrine\Tests\ORM\Tools\EntityGeneratorComment', - 'fetch' => Mapping\FetchMode::EXTRA_LAZY, - 'joinTable' => $joinTable, - ] - ); + $association = new Mapping\ManyToManyAssociationMetadata('comments'); + + $association->setJoinTable($joinTable); + $association->setTargetEntity(EntityGeneratorComment::class); + $association->setFetchMode(Mapping\FetchMode::EXTRA_LAZY); + + $metadata->mapManyToMany($association); $metadata->addLifecycleCallback('loading', 'postLoad'); $metadata->addLifecycleCallback('willBeRemoved', 'preRemove'); @@ -561,7 +564,7 @@ public function testLoadMetadata() // self::assertEquals($cm->embeddedClasses, $metadata->embeddedClasses); // self::assertEquals($cm->isEmbeddedClass, $metadata->isEmbeddedClass); - self::assertEquals(Mapping\FetchMode::EXTRA_LAZY, $cm->associationMappings['comments']['fetch']); + self::assertEquals(Mapping\FetchMode::EXTRA_LAZY, $cm->associationMappings['comments']->getFetchMode()); // $isbn = $this->newInstance($embeddedMetadata); // @@ -726,13 +729,12 @@ public function testGenerateEntityWithMultipleInverseJoinColumns() $joinTable->addInverseJoinColumn($joinColumn); - $metadata->mapManyToMany( - [ - 'fieldName' => 'centroCustos', - 'targetEntity' => 'DDC2079CentroCusto', - 'joinTable' => $joinTable, - ] - ); + $association = new Mapping\ManyToManyAssociationMetadata('centroCustos'); + + $association->setJoinTable($joinTable); + $association->setTargetEntity('DDC2079CentroCusto'); + + $metadata->mapManyToMany($association); $this->generator->writeEntityClass($metadata, $this->tmpDir); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index 9e8eb04b2bc..d2bdc086459 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -11,6 +11,8 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; use Doctrine\ORM\Mapping\Driver\XmlDriver; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; +use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; use Doctrine\ORM\Tools\DisconnectedClassMetadataFactory; use Doctrine\ORM\Tools\EntityGenerator; use Doctrine\ORM\Tools\Export\ClassMetadataExporter; @@ -229,20 +231,21 @@ public function testOneToOneAssociationsAreExported($class) self::assertTrue(isset($class->associationMappings['address'])); $association = $class->associationMappings['address']; - $joinColumn = reset($association['joinColumns']); + $joinColumns = $association->getJoinColumns(); + $joinColumn = reset($joinColumns); - self::assertEquals('Doctrine\Tests\ORM\Tools\Export\Address', $association['targetEntity']); + self::assertEquals('Doctrine\Tests\ORM\Tools\Export\Address', $association->getTargetEntity()); self::assertEquals('address_id', $joinColumn->getColumnName()); self::assertEquals('id', $joinColumn->getReferencedColumnName()); self::assertEquals('CASCADE', $joinColumn->getOnDelete()); - self::assertContains('remove', $association['cascade']); - self::assertContains('persist', $association['cascade']); - self::assertNotContains('refresh', $association['cascade']); - self::assertNotContains('merge', $association['cascade']); - self::assertNotContains('detach', $association['cascade']); - self::assertTrue($association['orphanRemoval']); - self::assertEquals(FetchMode::EAGER, $association['fetch']); + self::assertContains('remove', $association->getCascade()); + self::assertContains('persist', $association->getCascade()); + self::assertNotContains('refresh', $association->getCascade()); + self::assertNotContains('merge', $association->getCascade()); + self::assertNotContains('detach', $association->getCascade()); + self::assertTrue($association->isOrphanRemoval()); + self::assertEquals(FetchMode::EAGER, $association->getFetchMode()); return $class; } @@ -253,7 +256,7 @@ public function testOneToOneAssociationsAreExported($class) public function testManyToOneAssociationsAreExported($class) { self::assertTrue(isset($class->associationMappings['mainGroup'])); - self::assertEquals(Group::class, $class->associationMappings['mainGroup']['targetEntity']); + self::assertEquals(Group::class, $class->associationMappings['mainGroup']->getTargetEntity()); } /** @@ -263,18 +266,22 @@ public function testManyToOneAssociationsAreExported($class) public function testOneToManyAssociationsAreExported($class) { self::assertTrue(isset($class->associationMappings['phonenumbers'])); - //self::assertInstanceOf('Doctrine\ORM\Mapping\OneToManyMapping', $class->associationMappings['phonenumbers']); - self::assertEquals(Phonenumber::class, $class->associationMappings['phonenumbers']['targetEntity']); - self::assertEquals('user', $class->associationMappings['phonenumbers']['mappedBy']); - self::assertEquals(['number' => 'ASC'], $class->associationMappings['phonenumbers']['orderBy']); - - self::assertContains('remove', $class->associationMappings['phonenumbers']['cascade']); - self::assertContains('persist', $class->associationMappings['phonenumbers']['cascade']); - self::assertNotContains('refresh', $class->associationMappings['phonenumbers']['cascade']); - self::assertContains('merge', $class->associationMappings['phonenumbers']['cascade']); - self::assertNotContains('detach', $class->associationMappings['phonenumbers']['cascade']); - self::assertTrue($class->associationMappings['phonenumbers']['orphanRemoval']); - self::assertEquals(FetchMode::LAZY, $class->associationMappings['phonenumbers']['fetch']); + + /** @var OneToManyAssociationMetadata $association */ + $association = $class->associationMappings['phonenumbers']; + + self::assertInstanceOf(OneToManyAssociationMetadata::class, $association); + self::assertEquals(Phonenumber::class, $association->getTargetEntity()); + self::assertEquals('user', $association->getMappedBy()); + self::assertEquals(['number' => 'ASC'], $association->getOrderBy()); + + self::assertContains('remove', $association->getCascade()); + self::assertContains('persist', $association->getCascade()); + self::assertNotContains('refresh', $association->getCascade()); + self::assertContains('merge', $association->getCascade()); + self::assertNotContains('detach', $association->getCascade()); + self::assertTrue($association->isOrphanRemoval()); + self::assertEquals(FetchMode::LAZY, $association->getFetchMode()); return $class; } @@ -288,14 +295,15 @@ public function testManyToManyAssociationsAreExported($class) self::assertTrue(isset($class->associationMappings['groups'])); $association = $class->associationMappings['groups']; - $joinColumns = $association['joinTable']->getJoinColumns(); + $joinTable = $association->getJoinTable(); + $joinColumns = $joinTable->getJoinColumns(); $joinColumn = reset($joinColumns); - $inverseJoinColumns = $association['joinTable']->getInverseJoinColumns(); + $inverseJoinColumns = $joinTable->getInverseJoinColumns(); $inverseJoinColumn = reset($inverseJoinColumns); - //self::assertInstanceOf('Doctrine\ORM\Mapping\ManyToManyMapping', $class->associationMappings['groups']); - self::assertEquals(Group::class, $association['targetEntity']); - self::assertEquals('cms_users_groups', $association['joinTable']->getName()); + self::assertInstanceOf(ManyToManyAssociationMetadata::class, $association); + self::assertEquals(Group::class, $association->getTargetEntity()); + self::assertEquals('cms_users_groups', $joinTable->getName()); self::assertEquals('user_id', $joinColumn->getColumnName()); self::assertEquals('id', $joinColumn->getReferencedColumnName()); @@ -304,13 +312,13 @@ public function testManyToManyAssociationsAreExported($class) self::assertEquals('id', $inverseJoinColumn->getReferencedColumnName()); self::assertEquals('INT NULL', $inverseJoinColumn->getColumnDefinition()); - self::assertContains('remove', $association['cascade']); - self::assertContains('persist', $association['cascade']); - self::assertContains('refresh', $association['cascade']); - self::assertContains('merge', $association['cascade']); - self::assertContains('detach', $association['cascade']); + self::assertContains('remove', $association->getCascade()); + self::assertContains('persist', $association->getCascade()); + self::assertContains('refresh', $association->getCascade()); + self::assertContains('merge', $association->getCascade()); + self::assertContains('detach', $association->getCascade()); - self::assertEquals(FetchMode::EXTRA_LAZY, $association['fetch']); + self::assertEquals(FetchMode::EXTRA_LAZY, $association->getFetchMode()); return $class; } @@ -339,12 +347,14 @@ public function testLifecycleCallbacksAreExported($class) */ public function testCascadeIsExported($class) { - self::assertContains('persist', $class->associationMappings['phonenumbers']['cascade']); - self::assertContains('merge', $class->associationMappings['phonenumbers']['cascade']); - self::assertContains('remove', $class->associationMappings['phonenumbers']['cascade']); - self::assertNotContains('refresh', $class->associationMappings['phonenumbers']['cascade']); - self::assertNotContains('detach', $class->associationMappings['phonenumbers']['cascade']); - self::assertTrue($class->associationMappings['phonenumbers']['orphanRemoval']); + $association = $class->associationMappings['phonenumbers']; + + self::assertContains('persist', $association->getCascade()); + self::assertContains('merge', $association->getCascade()); + self::assertContains('remove', $association->getCascade()); + self::assertNotContains('refresh', $association->getCascade()); + self::assertNotContains('detach', $association->getCascade()); + self::assertTrue($association->isOrphanRemoval()); return $class; } @@ -355,7 +365,9 @@ public function testCascadeIsExported($class) */ public function testInversedByIsExported($class) { - self::assertEquals('user', $class->associationMappings['address']['inversedBy']); + $association = $class->associationMappings['address']; + + self::assertEquals('user', $association->getInversedBy()); } /** * @depends testExportDirectoryAndFilesAreCreated diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php index 264088b7a50..33dfb32f096 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php @@ -2,7 +2,6 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping; -use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Tests\ORM\Tools\Export; $tableMetadata = new Mapping\TableMetadata(); @@ -19,7 +18,7 @@ $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); $metadata->addLifecycleCallback('doStuffOnPostPersist', 'postPersist'); - +// Property: "id" $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); @@ -27,7 +26,7 @@ $metadata->addProperty($fieldMetadata); - +// Property: "name" $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); @@ -38,7 +37,7 @@ $metadata->addProperty($fieldMetadata); - +// Property: "email" $fieldMetadata = new Mapping\FieldMetadata('email'); $fieldMetadata->setType(Type::getType('string')); @@ -47,7 +46,7 @@ $metadata->addProperty($fieldMetadata); - +// Property: "age" $fieldMetadata = new Mapping\FieldMetadata('age'); $fieldMetadata->setType(Type::getType('integer')); @@ -55,14 +54,14 @@ $metadata->addProperty($fieldMetadata); +// Property: "mainGroup" +$association = new Mapping\ManyToOneAssociationMetadata('mainGroup'); -$metadata->mapManyToOne( - [ - 'fieldName' => 'mainGroup', - 'targetEntity' => Export\Group::class, - ] -); +$association->setTargetEntity(Export\Group::class); +$metadata->mapManyToOne($association); + +// Property: "address" $joinColumns = []; $joinColumn = new Mapping\JoinColumnMetadata(); @@ -73,43 +72,41 @@ $joinColumns[] = $joinColumn; -$metadata->mapOneToOne( - [ - 'fieldName' => 'address', - 'targetEntity' => Export\Address::class, - 'inversedBy' => 'user', - 'cascade' => ['persist'], - 'mappedBy' => null, - 'joinColumns' => $joinColumns, - 'orphanRemoval' => true, - 'fetch' => Mapping\FetchMode::EAGER, - ] -); - -$metadata->mapOneToOne( - [ - 'fieldName' => 'cart', - 'targetEntity' => Export\Cart::class, - 'mappedBy' => 'user', - 'cascade' => ['persist'], - 'inversedBy' => null, - 'orphanRemoval' => false, - 'fetch' => Mapping\FetchMode::EAGER, - ] -); - -$metadata->mapOneToMany( - [ - 'fieldName' => 'phonenumbers', - 'targetEntity' => Export\Phonenumber::class, - 'cascade' => ['persist', 'merge'], - 'mappedBy' => 'user', - 'orphanRemoval' => true, - 'fetch' => Mapping\FetchMode::LAZY, - 'orderBy' => ['number' => 'ASC'], - ] -); +$association = new Mapping\OneToOneAssociationMetadata('address'); + +$association->setJoinColumns($joinColumns); +$association->setTargetEntity(Export\Address::class); +$association->setInversedBy('user'); +$association->setCascade(['persist']); +$association->setFetchMode(Mapping\FetchMode::EAGER); +$association->setOrphanRemoval(true); + +$metadata->mapOneToOne($association); + +// Property: "cart" +$association = new Mapping\OneToOneAssociationMetadata('cart'); +$association->setTargetEntity(Export\Cart::class); +$association->setMappedBy('user'); +$association->setCascade(['persist']); +$association->setFetchMode(Mapping\FetchMode::EAGER); +$association->setOrphanRemoval(false); + +$metadata->mapOneToOne($association); + +// Property: "phonenumbers" +$association = new Mapping\OneToManyAssociationMetadata('phonenumbers'); + +$association->setTargetEntity(Export\Phonenumber::class); +$association->setMappedBy('user'); +$association->setCascade(['persist', 'merge']); +$association->setFetchMode(Mapping\FetchMode::LAZY); +$association->setOrphanRemoval(true); +$association->setOrderBy(['number' => 'ASC']); + +$metadata->mapOneToMany($association); + +// Property: "groups" $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('cms_users_groups'); @@ -128,14 +125,11 @@ $joinTable->addInverseJoinColumn($joinColumn); -$metadata->mapManyToMany( - [ - 'fieldName' => 'groups', - 'targetEntity' => Export\Group::class, - 'cascade' => ['remove', 'persist', 'refresh', 'merge', 'detach'], - 'mappedBy' => null, - 'orderBy' => null, - 'joinTable' => $joinTable, - 'fetch' => Mapping\FetchMode::EXTRA_LAZY, - ] -); +$association = new Mapping\ManyToManyAssociationMetadata('groups'); + +$association->setJoinTable($joinTable); +$association->setTargetEntity(Export\Group::class); +$association->setCascade(['remove', 'persist', 'refresh', 'merge', 'detach']); +$association->setFetchMode(Mapping\FetchMode::EXTRA_LAZY); + +$metadata->mapManyToMany($association); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/xml/Doctrine.Tests.ORM.Tools.Export.User.dcm.xml b/tests/Doctrine/Tests/ORM/Tools/Export/xml/Doctrine.Tests.ORM.Tools.Export.User.dcm.xml index 8d0c5d217e3..d541888c2a3 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/xml/Doctrine.Tests.ORM.Tools.Export.User.dcm.xml +++ b/tests/Doctrine/Tests/ORM/Tools/Export/xml/Doctrine.Tests.ORM.Tools.Export.User.dcm.xml @@ -32,7 +32,7 @@ - + diff --git a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php index 4496d732885..e7d7ffa8fcc 100644 --- a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php @@ -41,17 +41,17 @@ public function setUp() public function testResolveTargetEntityListenerCanResolveTargetEntity() { $evm = $this->em->getEventManager(); - $this->listener->addResolveTargetEntity(ResolveTargetInterface::class, ResolveTargetEntity::class, []); - $this->listener->addResolveTargetEntity(TargetInterface::class, TargetEntity::class, []); + $this->listener->addResolveTargetEntity(ResolveTargetInterface::class, ResolveTargetEntity::class); + $this->listener->addResolveTargetEntity(TargetInterface::class, TargetEntity::class); $evm->addEventSubscriber($this->listener); $cm = $this->factory->getMetadataFor(ResolveTargetEntity::class); $meta = $cm->associationMappings; - self::assertSame(TargetEntity::class, $meta['manyToMany']['targetEntity']); - self::assertSame(ResolveTargetEntity::class, $meta['manyToOne']['targetEntity']); - self::assertSame(ResolveTargetEntity::class, $meta['oneToMany']['targetEntity']); - self::assertSame(TargetEntity::class, $meta['oneToOne']['targetEntity']); + self::assertSame(TargetEntity::class, $meta['manyToMany']->getTargetEntity()); + self::assertSame(ResolveTargetEntity::class, $meta['manyToOne']->getTargetEntity()); + self::assertSame(ResolveTargetEntity::class, $meta['oneToMany']->getTargetEntity()); + self::assertSame(TargetEntity::class, $meta['oneToOne']->getTargetEntity()); self::assertSame($cm, $this->factory->getMetadataFor(ResolveTargetInterface::class)); } @@ -63,7 +63,7 @@ public function testResolveTargetEntityListenerCanResolveTargetEntity() */ public function testResolveTargetEntityListenerCanRetrieveTargetEntityByInterfaceName() { - $this->listener->addResolveTargetEntity(ResolveTargetInterface::class, ResolveTargetEntity::class, []); + $this->listener->addResolveTargetEntity(ResolveTargetInterface::class, ResolveTargetEntity::class); $this->em->getEventManager()->addEventSubscriber($this->listener); @@ -78,14 +78,14 @@ public function testResolveTargetEntityListenerCanRetrieveTargetEntityByInterfac public function testAssertTableColumnsAreNotAddedInManyToMany() { $evm = $this->em->getEventManager(); - $this->listener->addResolveTargetEntity(ResolveTargetInterface::class, ResolveTargetEntity::class, []); - $this->listener->addResolveTargetEntity(TargetInterface::class, TargetEntity::class, []); + $this->listener->addResolveTargetEntity(ResolveTargetInterface::class, ResolveTargetEntity::class); + $this->listener->addResolveTargetEntity(TargetInterface::class, TargetEntity::class); $evm->addEventListener(Events::loadClassMetadata, $this->listener); $cm = $this->factory->getMetadataFor(ResolveTargetEntity::class); $meta = $cm->associationMappings['manyToMany']; - self::assertSame(TargetEntity::class, $meta['targetEntity']); + self::assertSame(TargetEntity::class, $meta->getTargetEntity()); } /** @@ -97,7 +97,7 @@ public function testAssertTableColumnsAreNotAddedInManyToMany() public function testDoesResolveTargetEntitiesInDQLAlsoWithInterfaces() { $evm = $this->em->getEventManager(); - $this->listener->addResolveTargetEntity(ResolveTargetInterface::class, ResolveTargetEntity::class, []); + $this->listener->addResolveTargetEntity(ResolveTargetInterface::class, ResolveTargetEntity::class); $evm->addEventSubscriber($this->listener); diff --git a/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php b/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php index b09e5bfee7e..8beb6a619bd 100644 --- a/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php @@ -59,10 +59,13 @@ public function testInvalidManyToManyJoinColumnSchema() $ce = $this->validator->validateClass($class1); + $message1 = "The inverse join columns of the many-to-many table '%s' have to contain to ALL identifier columns of the target entity '%s', however '%s' are missing."; + $message2 = "The join columns of the many-to-many table '%s' have to contain to ALL identifier columns of the source entity '%s', however '%s' are missing."; + self::assertEquals( [ - "The inverse join columns of the many-to-many table 'Entity1Entity2' have to contain to ALL identifier columns of the target entity 'Doctrine\Tests\ORM\Tools\InvalidEntity2', however 'key4' are missing.", - "The join columns of the many-to-many table 'Entity1Entity2' have to contain to ALL identifier columns of the source entity 'Doctrine\Tests\ORM\Tools\InvalidEntity1', however 'key2' are missing." + sprintf($message1, 'Entity1Entity2', InvalidEntity2::class, 'key4'), + sprintf($message2, 'Entity1Entity2', InvalidEntity1::class, 'key2'), ], $ce ); @@ -78,10 +81,13 @@ public function testInvalidToOneJoinColumnSchema() $ce = $this->validator->validateClass($class2); + $message1 = "The referenced column name '%s' has to be a primary key column on the target entity class '%s'."; + $message2 = "The join columns of the association '%s' have to match to ALL identifier columns of the target entity '%s', however '%s' are missing."; + self::assertEquals( [ - "The referenced column name 'id' has to be a primary key column on the target entity class 'Doctrine\Tests\ORM\Tools\InvalidEntity1'.", - "The join columns of the association 'assoc' have to match to ALL identifier columns of the target entity 'Doctrine\Tests\ORM\Tools\InvalidEntity1', however 'key1, key2' are missing." + sprintf($message1, 'id', InvalidEntity1::class), + sprintf($message2, 'assoc', InvalidEntity1::class, "key1', 'key2"), ], $ce ); @@ -108,10 +114,13 @@ public function testInvalidTripleAssociationAsKeyMapping() $classThree = $this->em->getClassMetadata(DDC1649Three::class); $ce = $this->validator->validateClass($classThree); + $message1 = "Cannot map association %s#%s as identifier, because the target entity '%s' also maps an association as identifier."; + $message2 = "The referenced column name '%s' has to be a primary key column on the target entity class '%s'."; + self::assertEquals( [ - "Cannot map association 'Doctrine\Tests\ORM\Tools\DDC1649Three#two as identifier, because the target entity 'Doctrine\Tests\ORM\Tools\DDC1649Two' also maps an association as identifier.", - "The referenced column name 'id' has to be a primary key column on the target entity class 'Doctrine\Tests\ORM\Tools\DDC1649Two'." + sprintf($message1, DDC1649Three::class, 'two', DDC1649Two::class), + sprintf($message2, 'id', DDC1649Two::class), ], $ce ); @@ -125,11 +134,12 @@ public function testInvalidBiDirectionalRelationMappingMissingInversedByAttribut $class = $this->em->getClassMetadata(DDC3274One::class); $ce = $this->validator->validateClass($class); + $message = "The property %s#%s is on the inverse side of a bi-directional relationship, but the " + . "specified mappedBy association on the target-entity %s#%s does not contain the required 'inversedBy=\"%s\"' attribute."; + self::assertEquals( [ - "The field Doctrine\Tests\ORM\Tools\DDC3274One#two is on the inverse side of a bi-directional " . - "relationship, but the specified mappedBy association on the target-entity " . - "Doctrine\Tests\ORM\Tools\DDC3274Two#one does not contain the required 'inversedBy=\"two\"' attribute." + sprintf($message, DDC3274One::class, 'two', DDC3274Two::class, 'one', 'two') ], $ce ); @@ -143,10 +153,11 @@ public function testInvalidOrderByInvalidField() $class = $this->em->getClassMetadata(DDC3322One::class); $ce = $this->validator->validateClass($class); + $message = "The association %s#%s is ordered by a property '%s' that is non-existing field on the target entity '%s'."; + self::assertEquals( [ - "The association Doctrine\Tests\ORM\Tools\DDC3322One#invalidAssoc is ordered by a foreign field " . - "invalidField that is not a field on the target entity Doctrine\Tests\ORM\Tools\DDC3322ValidEntity1." + sprintf($message, DDC3322One::class, 'invalidAssoc', 'invalidField', DDC3322ValidEntity1::class) ], $ce ); @@ -160,10 +171,11 @@ public function testInvalidOrderByCollectionValuedAssociation() $class = $this->em->getClassMetadata(DDC3322Two::class); $ce = $this->validator->validateClass($class); + $message = "The association %s#%s is ordered by a property '%s' on '%s' that is a collection-valued association."; + self::assertEquals( [ - "The association Doctrine\Tests\ORM\Tools\DDC3322Two#invalidAssoc is ordered by a field oneToMany " . - "on Doctrine\Tests\ORM\Tools\DDC3322ValidEntity1 that is a collection-valued association." + sprintf($message, DDC3322Two::class, 'invalidAssoc', 'oneToMany', DDC3322ValidEntity1::class) ], $ce ); @@ -177,10 +189,11 @@ public function testInvalidOrderByAssociationInverseSide() $class = $this->em->getClassMetadata(DDC3322Three::class); $ce = $this->validator->validateClass($class); + $message = "The association %s#%s is ordered by a property '%s' on '%s' that is the inverse side of an association."; + self::assertEquals( [ - "The association Doctrine\Tests\ORM\Tools\DDC3322Three#invalidAssoc is ordered by a field oneToOneInverse " . - "on Doctrine\Tests\ORM\Tools\DDC3322ValidEntity1 that is the inverse side of an association." + sprintf($message, DDC3322Three::class, 'invalidAssoc', 'oneToOneInverse', DDC3322ValidEntity1::class) ], $ce ); diff --git a/tests/Doctrine/Tests/OrmFunctionalTestCase.php b/tests/Doctrine/Tests/OrmFunctionalTestCase.php index 6d93b5ec442..86c1a627e22 100644 --- a/tests/Doctrine/Tests/OrmFunctionalTestCase.php +++ b/tests/Doctrine/Tests/OrmFunctionalTestCase.php @@ -566,6 +566,7 @@ protected function tearDown() $conn->executeUpdate('DELETE FROM vct_owning_manytomany_extralazy'); $conn->executeUpdate('DELETE FROM vct_inversed_manytomany_extralazy'); } + if (isset($this->usedModelSets['geonames'])) { $conn->executeUpdate('DELETE FROM geonames_admin1_alternate_name'); $conn->executeUpdate('DELETE FROM geonames_admin1'); @@ -643,7 +644,7 @@ protected function setUp() if (isset($GLOBALS['DOCTRINE_MARK_SQL_LOGS'])) { if (in_array(static::$sharedConn->getDatabasePlatform()->getName(), ["mysql", "postgresql"])) { static::$sharedConn->executeQuery('SELECT 1 /*' . get_class($this) . '*/'); - } else if (static::$sharedConn->getDatabasePlatform()->getName() == "oracle") { + } else if (static::$sharedConn->getDatabasePlatform()->getName() === "oracle") { static::$sharedConn->executeQuery('SELECT 1 /*' . get_class($this) . '*/ FROM dual'); } } @@ -653,22 +654,14 @@ protected function setUp() $this->schemaTool = new SchemaTool($this->em); } - $classes = []; - foreach ($this->usedModelSets as $setName => $bool) { if (! isset(static::$tablesCreated[$setName])) { - foreach (static::$modelSets[$setName] as $className) { - $classes[] = $this->em->getClassMetadata($className); - } + $this->setUpEntitySchema(static::$modelSets[$setName]); static::$tablesCreated[$setName] = true; } } - if ($classes) { - $this->schemaTool->createSchema($classes); - } - $this->sqlLoggerStack->enabled = true; } @@ -715,7 +708,6 @@ protected function getEntityManager(Connection $connection = null) $enableSecondLevelCache = getenv('ENABLE_SECOND_LEVEL_CACHE'); if ($this->isSecondLevelCacheEnabled || $enableSecondLevelCache) { - $cacheConfig = new CacheConfiguration(); $cache = $this->getSharedSecondLevelCacheDriverImpl(); $factory = new DefaultCacheFactory($cacheConfig->getRegionsConfiguration(), $cache); @@ -785,17 +777,24 @@ protected function onNotSuccessfulTest(\Throwable $e) throw $e; } - if(isset($this->sqlLoggerStack->queries) && count($this->sqlLoggerStack->queries)) { + if (isset($this->sqlLoggerStack->queries) && count($this->sqlLoggerStack->queries)) { $queries = ""; $last25queries = array_slice(array_reverse($this->sqlLoggerStack->queries, true), 0, 25, true); + foreach ($last25queries as $i => $query) { - $params = array_map(function($p) { if (is_object($p)) return get_class($p); else return var_export($p, true); }, $query['params'] ?: [] + $params = array_map( + function($p) { + if (is_object($p)) return get_class($p); else return var_export($p, true); + }, + $query['params'] ?: [] ); + $queries .= $i.". SQL: '".$query['sql']."' Params: ".implode(", ", $params).PHP_EOL; } $trace = $e->getTrace(); $traceMsg = ""; + foreach($trace AS $part) { if(isset($part['file'])) { if(strpos($part['file'], "PHPUnit/") !== false) { @@ -811,12 +810,13 @@ protected function onNotSuccessfulTest(\Throwable $e) throw new \Exception($message, (int)$e->getCode(), $e); } + throw $e; } public static function assertSQLEquals($expectedSql, $actualSql) { - return self::assertEquals( + self::assertEquals( strtolower($expectedSql), strtolower($actualSql), "Lowercase comparison of SQL statements failed." diff --git a/tests/Doctrine/Tests/TestUtil.php b/tests/Doctrine/Tests/TestUtil.php index 812961c92e9..4fecbadd770 100644 --- a/tests/Doctrine/Tests/TestUtil.php +++ b/tests/Doctrine/Tests/TestUtil.php @@ -42,7 +42,8 @@ class TestUtil */ public static function getConnection() { - $conn = DriverManager::getConnection(self::getConnectionParams()); + $params = self::getConnectionParams(); + $conn = DriverManager::getConnection($params); self::addDbEventSubscribers($conn); From 7fa296da449fcf11cf7d7f77f9c1ab098f4a761b Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sun, 12 Mar 2017 22:02:01 -0400 Subject: [PATCH 110/275] Eliminated mapXToY methods and normalized into only addAssociation --- docs/en/reference/php-mapping.rst | 7 +- .../Mapping/Builder/ClassMetadataBuilder.php | 12 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 237 ++++-------------- .../ORM/Mapping/Driver/AnnotationDriver.php | 8 +- .../ORM/Mapping/Driver/DatabaseDriver.php | 6 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 8 +- lib/Doctrine/ORM/Mapping/MappingException.php | 27 +- .../ORM/Tools/Export/Driver/PhpExporter.php | 12 +- .../Doctrine/Tests/Models/CMS/CmsAddress.php | 2 +- .../Tests/Models/DDC3579/DDC3579User.php | 2 +- .../Tests/Models/DDC964/DDC964User.php | 4 +- .../ORM/Hydration/ResultSetMappingTest.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 6 +- .../Builder/ClassMetadataBuilderTest.php | 26 +- .../ORM/Mapping/ClassMetadataFactoryTest.php | 4 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 46 ++-- .../Doctrine.Tests.Models.CMS.CmsAddress.php | 2 +- .../php/Doctrine.Tests.Models.Cache.City.php | 6 +- ...trine.Tests.Models.DDC3579.DDC3579User.php | 2 +- ...octrine.Tests.Models.DDC964.DDC964User.php | 4 +- .../php/Doctrine.Tests.ORM.Mapping.PHPSLC.php | 2 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 6 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 6 +- .../Doctrine.Tests.ORM.Tools.Export.User.php | 10 +- 24 files changed, 134 insertions(+), 313 deletions(-) diff --git a/docs/en/reference/php-mapping.rst b/docs/en/reference/php-mapping.rst index dd78991f71b..abdaf2f8862 100644 --- a/docs/en/reference/php-mapping.rst +++ b/docs/en/reference/php-mapping.rst @@ -227,11 +227,8 @@ Field Mapping Setters ~~~~~~~~~~~~~~~~~~~~~ -- ``mapField(array $mapping)`` -- ``mapOneToOne(array $mapping)`` -- ``mapOneToMany(array $mapping)`` -- ``mapManyToOne(array $mapping)`` -- ``mapManyToMany(array $mapping)`` +- ``addProperty(Property $property)`` +- ``addAssociation(AssociationMetadata $property)`` Lifecycle Callback Setters ~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php index b47397b077a..7c82154f683 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php @@ -385,7 +385,7 @@ public function addManyToOne(string $name, string $targetEntity, string $inverse $builder->inversedBy($inversedBy); } - $this->cm->mapManyToOne($builder->build()); + $this->cm->addAssociation($builder->build()); return $this; } @@ -447,7 +447,7 @@ public function addInverseOneToOne(string $name, string $targetEntity, string $m $builder->withMappedBy($mappedBy); - $this->cm->mapOneToOne($builder->build()); + $this->cm->addAssociation($builder->build()); return $this; } @@ -469,7 +469,7 @@ public function addOwningOneToOne(string $name, string $targetEntity, string $in $builder->withInversedBy($inversedBy); } - $this->cm->mapManyToOne($builder->build()); + $this->cm->addAssociation($builder->build()); return $this; } @@ -511,7 +511,7 @@ public function addOwningManyToMany(string $name, string $targetEntity, string $ $builder->withInversedBy($inversedBy); } - $this->cm->mapManyToMany($builder->build()); + $this->cm->addAssociation($builder->build()); return $this; } @@ -531,7 +531,7 @@ public function addInverseManyToMany(string $name, string $targetEntity, string $builder->withMappedBy($mappedBy); - $this->cm->mapManyToMany($builder->build()); + $this->cm->addAssociation($builder->build()); return $this; } @@ -571,7 +571,7 @@ public function addOneToMany($name, $targetEntity, $mappedBy) $builder->withMappedBy($mappedBy); - $this->cm->mapOneToMany($builder->build()); + $this->cm->addAssociation($builder->build()); return $this; } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index bf1b614c9c1..fc8137b6b82 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -54,36 +54,6 @@ */ class ClassMetadata implements ClassMetadataInterface { - /** - * Identifies a one-to-one association. - */ - const ONE_TO_ONE = 1; - - /** - * Identifies a many-to-one association. - */ - const MANY_TO_ONE = 2; - - /** - * Identifies a one-to-many association. - */ - const ONE_TO_MANY = 4; - - /** - * Identifies a many-to-many association. - */ - const MANY_TO_MANY = 8; - - /** - * Combined bitmask for to-one (single-valued) associations. - */ - const TO_ONE = 3; - - /** - * Combined bitmask for to-many (collection-valued) associations. - */ - const TO_MANY = 12; - /** * READ-ONLY: The name of the entity class. * @@ -324,76 +294,16 @@ class ClassMetadata implements ClassMetadataInterface public $fieldNames = []; /** - * @var array + * READ-ONLY: The property mappings of this class. + * + * @var array */ protected $properties = []; /** * READ-ONLY: The association mappings of this class. * - * The mapping definition array supports the following keys: - * - * - type (integer) - * Association type: ONE_TO_ONE, ONE_TO_MANY, MANY_TO_ONE, MANY_TO_MANY - * - * - fieldName (string) - * The name of the field in the entity the association is mapped to. - * - * - fetch (integer, optional) - * The fetching strategy to use for the association, usually defaults to LAZY. - * Possible values are: FetchMode::EAGER, FetchMode::LAZY, FetchMode::EXTRA_LAZY. - * - * - targetEntity (string) - * The class name of the target entity. If it is fully-qualified it is used as is. - * If it is a simple, unqualified class name the namespace is assumed to be the same - * as the namespace of the source entity. - * - * - sourceEntity (string) - * The class name of the source entity. If it is fully-qualified it is used as is. - * If it is a simple, unqualified class name the namespace is assumed to be the same - * as the namespace of the source entity. - * - * - isOwningSide (boolean) - * Whether the association is the owning side or the inverse side. - * - * - mappedBy (string, required for bidirectional associations) - * The name of the field that completes the bidirectional association on the owning side. - * This key must be specified on the inverse side of a bidirectional association. - * - * - inversedBy (string, required for bidirectional associations) - * The name of the field that completes the bidirectional association on the inverse side. - * This key must be specified on the owning side of a bidirectional association. - * - * - cascade (array, optional) - * The names of persistence operations to cascade on the association. The set of possible - * values are: "persist", "remove", "detach", "merge", "refresh", "all" (implies all others). - * - * - orderBy (array, one-to-many/many-to-many only) - * A map of field names (of the target entity) to sorting directions (ASC/DESC). - * Example: array('priority' => 'desc') - * - * - indexBy (string, optional, to-many only) - * Specification of a field on target-entity that is used to index the collection by. - * This field HAS to be either the primary key or a unique column. Otherwise the collection - * does not contain all the entities that are actually related. - * - * - joinTable (JoinTableMetadata, optional, many-to-many only) - * Specification of the join table and its join columns (foreign keys). - * Only valid for many-to-many mappings. Note that one-to-many associations can be mapped - * through a join table by simply mapping the association as many-to-many with a unique - * constraint on the join table. - * - * - joinColumns (array, optional, to-one only) - * Specification of the join columns (foreign keys). - * - * - id (boolean, optional) - * Whether the association is the entity identifier - * - * - orphanRemoval (boolean, optional, all association types, except many-to-one) - * - * - cache (CacheMetadata, optional) - * - * @var array + * @var array */ public $associationMappings = []; @@ -1159,8 +1069,6 @@ protected function validateAndCompleteAssociationMapping(AssociationMetadata $pr */ protected function validateAndCompleteToOneAssociationMetadata(ToOneAssociationMetadata $property) { - $this->validateAndCompleteAssociationMapping($property); - $fieldName = $property->getName(); if ($property->getJoinColumns()) { @@ -1246,8 +1154,6 @@ protected function validateAndCompleteToOneAssociationMetadata(ToOneAssociationM */ protected function validateAndCompleteToManyAssociationMetadata(ToManyAssociationMetadata $property) { - $this->validateAndCompleteAssociationMapping($property); - if ($property->isPrimaryKey()) { throw MappingException::illegalToManyIdentifierAssociation($this->name, $property->getName()); } @@ -1263,7 +1169,7 @@ protected function validateAndCompleteToManyAssociationMetadata(ToManyAssociatio */ protected function validateAndCompleteOneToOneMapping(OneToOneAssociationMetadata $property) { - $this->validateAndCompleteToOneAssociationMetadata($property); + // Do nothing } /** @@ -1277,8 +1183,6 @@ protected function validateAndCompleteOneToOneMapping(OneToOneAssociationMetadat protected function validateAndCompleteManyToOneMapping(ManyToOneAssociationMetadata $property) { // A many-to-one mapping is essentially a one-one backreference - $this->validateAndCompleteToOneAssociationMetadata($property); - if ($property->isOrphanRemoval()) { throw MappingException::illegalOrphanRemoval($this->name, $property->getName()); } @@ -1291,12 +1195,9 @@ protected function validateAndCompleteManyToOneMapping(ManyToOneAssociationMetad * * @throws \RuntimeException * @throws MappingException - * @throws InvalidArgumentException */ protected function validateAndCompleteOneToManyMapping(OneToManyAssociationMetadata $property) { - $this->validateAndCompleteToManyAssociationMetadata($property); - // OneToMany MUST be inverse side $property->setOwningSide(false); @@ -1322,12 +1223,10 @@ protected function validateAndCompleteOneToManyMapping(OneToManyAssociationMetad * @param ManyToManyAssociationMetadata $property The association mapping to validate & complete. * * @throws \RuntimeException - * @throws \InvalidArgumentException + * @throws MappingException */ protected function validateAndCompleteManyToManyMapping(ManyToManyAssociationMetadata $property) { - $this->validateAndCompleteAssociationMapping($property); - if ($property->isOwningSide()) { // owning side MUST have a join table $joinTable = $property->getJoinTable() ?: new JoinTableMetadata(); @@ -1662,16 +1561,7 @@ public function setAssociationOverride(AssociationMetadata $associationMetadata) $originalAssociation->setJoinTable($associationMetadata->getJoinTable()); } - // @todo guilhermeblanco Unify all mapXtoY methods - if ($originalAssociation instanceof OneToOneAssociationMetadata) { - $this->mapOneToOne($originalAssociation); - } else if ($originalAssociation instanceof OneToManyAssociationMetadata) { - $this->mapOneToMany($originalAssociation); - } else if ($originalAssociation instanceof ManyToOneAssociationMetadata) { - $this->mapManyToOne($originalAssociation); - } else if ($originalAssociation instanceof ManyToManyAssociationMetadata) { - $this->mapManyToMany($originalAssociation); - } + $this->addAssociation($originalAssociation); } /** @@ -1794,6 +1684,8 @@ public function getProperties() } /** + * Add a property mapping. + * * @param FieldMetadata $property * * @throws MappingException @@ -1811,9 +1703,7 @@ public function addProperty(FieldMetadata $property) } // Check for duplicated property - if (isset($this->properties[$fieldName]) || isset($this->associationMappings[$fieldName])) { - throw MappingException::duplicateProperty($property); - } + $this->assertPropertyNotMapped($fieldName); if (empty($columnName)) { $columnName = $this->namingStrategy->propertyToColumnName($fieldName, $this->name); @@ -1884,6 +1774,8 @@ public function addInheritedProperty(Property $property) $inheritedProperty->setTableName($property->getTableName()); } + $this->assertPropertyNotMapped($property->getName()); + $this->fieldNames[$property->getColumnName()] = $property->getName(); $this->properties[$property->getName()] = $inheritedProperty; } @@ -1909,9 +1801,7 @@ public function addInheritedAssociation(AssociationMetadata $association) $inheritedAssociation->setSourceEntity($this->name); } - if (isset($this->associationMappings[$association->getName()])) { - throw MappingException::duplicateAssociationMapping($this->name, $association->getName()); - } + $this->assertPropertyNotMapped($association->getName()); $this->associationMappings[$association->getName()] = $inheritedAssociation; } @@ -2058,75 +1948,34 @@ public function addSqlResultSetMapping(array $resultMapping) } /** - * Adds a one-to-one mapping. - * - * @param OneToOneAssociationMetadata $property - * - * @throws \RuntimeException - * @throws MappingException - */ - public function mapOneToOne(OneToOneAssociationMetadata $property) - { - $this->validateAndCompleteOneToOneMapping($property); - $this->storeAssociationMapping($property); - } - - /** - * Adds a one-to-many mapping. - * - * @param OneToManyAssociationMetadata $property - * - * @throws \RuntimeException - * @throws MappingException - */ - public function mapOneToMany(OneToManyAssociationMetadata $property) - { - $this->validateAndCompleteOneToManyMapping($property); - $this->storeAssociationMapping($property); - } - - /** - * Adds a many-to-one mapping. + * Adds an association mapping. * - * @param ManyToOneAssociationMetadata $property + * @param AssociationMetadata $property * * @throws \RuntimeException * @throws MappingException */ - public function mapManyToOne(ManyToOneAssociationMetadata $property) + public function addAssociation(AssociationMetadata $property) { - $this->validateAndCompleteManyToOneMapping($property); - $this->storeAssociationMapping($property); - } + $this->validateAndCompleteAssociationMapping($property); - /** - * Adds a many-to-many mapping. - * - * @param ManyToManyAssociationMetadata $property - * - * @throws \RuntimeException - * @throws MappingException - */ - public function mapManyToMany(ManyToManyAssociationMetadata $property) - { - $this->validateAndCompleteManyToManyMapping($property); - $this->storeAssociationMapping($property); - } + if ($property instanceof OneToOneAssociationMetadata) { + $this->validateAndCompleteToOneAssociationMetadata($property); + $this->validateAndCompleteOneToOneMapping($property); + } else if ($property instanceof OneToManyAssociationMetadata) { + $this->validateAndCompleteToManyAssociationMetadata($property); + $this->validateAndCompleteOneToManyMapping($property); + } else if ($property instanceof ManyToOneAssociationMetadata) { + $this->validateAndCompleteToOneAssociationMetadata($property); + $this->validateAndCompleteManyToOneMapping($property); + } else if ($property instanceof ManyToManyAssociationMetadata) { + $this->validateAndCompleteToManyAssociationMetadata($property); + $this->validateAndCompleteManyToManyMapping($property); + } - /** - * Stores the association mapping. - * - * @param array $assocMapping - * - * @return void - * - * @throws MappingException - */ - protected function storeAssociationMapping(AssociationMetadata $property) - { $sourceFieldName = $property->getName(); - $this->assertFieldNotMapped($sourceFieldName); + $this->assertPropertyNotMapped($sourceFieldName); $this->associationMappings[$sourceFieldName] = $property; } @@ -2348,7 +2197,7 @@ public function hasSqlResultSetMapping($name) /** * {@inheritDoc} * - * @todo guilhermeblanco Remove this method + * @todo guilhermeblanco Remove this method (it exists in Persistence repo) */ public function hasAssociation($fieldName) { @@ -2358,7 +2207,7 @@ public function hasAssociation($fieldName) /** * {@inheritDoc} * - * @todo guilhermeblanco Remove this method + * @todo guilhermeblanco Remove this method (it exists in Persistence repo) */ public function isSingleValuedAssociation($fieldName) { @@ -2369,7 +2218,7 @@ public function isSingleValuedAssociation($fieldName) /** * {@inheritDoc} * - * @todo guilhermeblanco Remove this method + * @todo guilhermeblanco Remove this method (it exists in Persistence repo) */ public function isCollectionValuedAssociation($fieldName) { @@ -2604,7 +2453,7 @@ public function getMetadataValue($name) */ public function mapEmbedded(array $mapping) { - /*$this->assertFieldNotMapped($mapping['fieldName']); + /*$this->assertPropertyNotMapped($mapping['fieldName']); $this->embeddedClasses[$mapping['fieldName']] = [ 'class' => $this->fullyQualifiedClassName($mapping['class']), @@ -2651,13 +2500,19 @@ public function inlineEmbeddable($property, ClassMetadata $embeddable) * * @throws MappingException */ - private function assertFieldNotMapped($fieldName) + private function assertPropertyNotMapped(string $fieldName) { - if (isset($this->properties[$fieldName]) - || isset($this->associationMappings[$fieldName]) - /*|| isset($this->embeddedClasses[$fieldName])*/) { - throw MappingException::duplicateFieldMapping($this->name, $fieldName); + if (isset($this->properties[$fieldName])) { + throw MappingException::duplicateProperty($this, $this->properties[$fieldName]); } + + if (isset($this->associationMappings[$fieldName])) { + throw MappingException::duplicateProperty($this, $this->associationMappings[$fieldName]); + } + +// if (isset($this->embeddedClasses[$fieldName])) { +// throw MappingException::duplicateProperty($this, $this->embeddedClasses[$fieldName]); +// } } /** diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 8efd8a98cfd..36c84a46a80 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -333,7 +333,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $metadata ); - $metadata->mapOneToOne($assocMetadata); + $metadata->addAssociation($assocMetadata); break; @@ -344,7 +344,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $metadata ); - $metadata->mapManyToOne($assocMetadata); + $metadata->addAssociation($assocMetadata); break; @@ -355,7 +355,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $metadata ); - $metadata->mapOneToMany($assocMetadata); + $metadata->addAssociation($assocMetadata); break; @@ -366,7 +366,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $metadata ); - $metadata->mapManyToMany($assocMetadata); + $metadata->addAssociation($assocMetadata); break; diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index f1285c50031..39b6145679f 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -257,7 +257,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $associationMapping['mappedBy'] = $this->getFieldNameForColumn($manyTable->getName(), current($myFk->getColumns()), true); } - $metadata->mapManyToMany($associationMapping); + $metadata->addAssociation($associationMapping); break; } @@ -492,9 +492,9 @@ private function buildToOneAssociationMappings(ClassMetadata $metadata) // Here we need to check if $fkColumns are the same as $primaryKeys if ( ! array_diff($fkColumns, $primaryKeys)) { - $metadata->mapOneToOne($associationMapping); + $metadata->addAssociation($associationMapping); } else { - $metadata->mapManyToOne($associationMapping); + $metadata->addAssociation($associationMapping); } } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 62cb8a18689..895eee6954c 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -421,7 +421,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) ); } - $metadata->mapOneToOne($association); + $metadata->addAssociation($association); } } @@ -474,7 +474,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) ); } - $metadata->mapOneToMany($association); + $metadata->addAssociation($association); } } @@ -526,7 +526,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) ); } - $metadata->mapManyToOne($association); + $metadata->addAssociation($association); } } @@ -615,7 +615,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) ); } - $metadata->mapManyToMany($association); + $metadata->addAssociation($association); } } diff --git a/lib/Doctrine/ORM/Mapping/MappingException.php b/lib/Doctrine/ORM/Mapping/MappingException.php index 112466e458c..05ce6b4e52e 100644 --- a/lib/Doctrine/ORM/Mapping/MappingException.php +++ b/lib/Doctrine/ORM/Mapping/MappingException.php @@ -401,37 +401,16 @@ public static function tableIdGeneratorNotImplemented($className) * * @return MappingException */ - public static function duplicateProperty(Property $property) + public static function duplicateProperty(ClassMetadata $metadata, Property $property) { return new self(sprintf( - 'Property "%s" in "%s" was already declared, but it must be declared only once', + 'Property "%s" in "%s" was already declared in "%s", but it must be declared only once', $property->getName(), + $metadata->getName(), $property->getDeclaringClass()->getName() )); } - /** - * @param string $entity The entity's name. - * @param string $fieldName The name of the field that was already declared. - * - * @return MappingException - */ - public static function duplicateFieldMapping($entity, $fieldName) - { - return new self('Property "'.$fieldName.'" in "'.$entity.'" was already declared, but it must be declared only once'); - } - - /** - * @param string $entity - * @param string $fieldName - * - * @return MappingException - */ - public static function duplicateAssociationMapping($entity, $fieldName) - { - return new self('Property "'.$fieldName.'" in "'.$entity.'" was already declared, but it must be declared only once'); - } - /** * @param string $entity * @param string $queryName diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 92a8e200ded..55a4137f3ac 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -195,33 +195,23 @@ public function exportClassMetadata(ClassMetadata $metadata) $cascade = ['all']; } - $method = null; - if ($association instanceof OneToOneAssociationMetadata) { - $method = 'mapOneToOne'; - $this->exportJoinColumns($association->getJoinColumns(), $lines, 'joinColumns'); $lines[] = '$association = new Mapping\OneToOneAssociationMetadata("' . $association->getName() . '");'; $lines[] = null; $lines[] = '$association->setJoinColumns($joinColumns);'; } else if ($association instanceof ManyToOneAssociationMetadata) { - $method = 'mapManyToOne'; - $this->exportJoinColumns($association->getJoinColumns(), $lines, 'joinColumns'); $lines[] = '$association = new Mapping\ManyToOneAssociationMetadata("' . $association->getName() . '");'; $lines[] = null; $lines[] = '$association->setJoinColumns($joinColumns);'; } else if ($association instanceof OneToManyAssociationMetadata) { - $method = 'mapOneToMany'; - $lines[] = '$association = new Mapping\OneToManyAssociationMetadata("' . $association->getName() . '");'; $lines[] = null; $lines[] = '$association->setOrderBy(' . $this->varExport($association->getOrderBy()) . ');'; } else if ($association instanceof ManyToManyAssociationMetadata) { - $method = 'mapManyToMany'; - if ($association->getJoinTable()) { $this->exportJoinTable($association->getJoinTable(), $lines); } @@ -255,7 +245,7 @@ public function exportClassMetadata(ClassMetadata $metadata) $lines[] = '$association->setOrphanRemoval(' . $this->varExport($association->isOrphanRemoval()) . ');'; $lines[] = '$association->setPrimaryKey(' . $this->varExport($association->isPrimaryKey()) . ');'; $lines[] = null; - $lines[] = '$metadata->' . $method . '($association);'; + $lines[] = '$metadata->addAssociation($association);'; } return implode(PHP_EOL, $lines); diff --git a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php index 26b8270d9b9..db3bf835bf8 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php @@ -168,7 +168,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association->setJoinColumns($joinColumns); $association->setTargetEntity('CmsUser'); - $metadata->mapOneToOne($association); + $metadata->addAssociation($association); $metadata->addNamedNativeQuery( [ diff --git a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php index 0d0c25634f7..fe5687f1a74 100644 --- a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php +++ b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php @@ -105,7 +105,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association->setTargetEntity('DDC3579Group'); - $metadata->mapManyToMany($association); + $metadata->addAssociation($association); $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php index 9655c1b3576..76be4e3bee1 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php @@ -142,7 +142,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association->setTargetEntity('DDC964Address'); $association->setCascade(['persist', 'merge']); - $metadata->mapManyToOne($association); + $metadata->addAssociation($association); $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('ddc964_users_groups'); @@ -168,7 +168,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association->setInversedBy('users'); $association->setCascade(['persist', 'merge', 'detach']); - $metadata->mapManyToMany($association); + $metadata->addAssociation($association); $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } diff --git a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php index b787300270a..aa368dbc220 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php @@ -121,7 +121,7 @@ public function testAddNamedNativeQueryResultSetMapping() $association->setCascade(['persist']); $association->addJoinColumn($joinColumn); - $cm->mapOneToOne($association); + $cm->addAssociation($association); $cm->addNamedNativeQuery( [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index aba590324b4..75e33fe5408 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -1363,7 +1363,7 @@ public static function loadMetadata(ClassMetadata $metadata) $association->setCascade(['remove']); $association->setOrphanRemoval(false); - $metadata->mapOneToOne($association); + $metadata->addAssociation($association); $association = new Mapping\OneToManyAssociationMetadata('phonenumbers'); @@ -1373,7 +1373,7 @@ public static function loadMetadata(ClassMetadata $metadata) $association->setOrderBy(['number' => 'ASC']); $association->setOrphanRemoval(true); - $metadata->mapOneToMany($association); + $metadata->addAssociation($association); $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('cms_users_groups'); @@ -1401,7 +1401,7 @@ public static function loadMetadata(ClassMetadata $metadata) $association->setTargetEntity(Group::class); $association->setCascade(['remove', 'persist', 'refresh', 'merge', 'detach']); - $metadata->mapManyToMany($association); + $metadata->addAssociation($association); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php index 90df35d19dc..e153f01e6c1 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php @@ -334,7 +334,7 @@ public function testCreateManyToOne() ->build() ; - $this->cm->mapManyToOne($association); + $this->cm->addAssociation($association); self::assertEquals( [ @@ -363,7 +363,7 @@ public function testCreateManyToOneWithIdentity() ->build() ; - $this->cm->mapManyToOne($association); + $this->cm->addAssociation($association); self::assertEquals( [ @@ -390,7 +390,7 @@ public function testCreateOneToOne() ->build() ; - $this->cm->mapOneToOne($association); + $this->cm->addAssociation($association); self::assertEquals( [ @@ -417,7 +417,7 @@ public function testCreateOneToOneWithIdentity() ->build() ; - $this->cm->mapOneToOne($association); + $this->cm->addAssociation($association); self::assertEquals( [ @@ -439,7 +439,7 @@ public function testThrowsExceptionOnCreateOneToOneWithIdentityOnInverseSide() ->withPrimaryKey(true) ->build(); - $this->cm->mapOneToOne($association); + $this->cm->addAssociation($association); } public function testCreateManyToMany() @@ -468,7 +468,7 @@ public function testCreateManyToMany() ->build() ; - $this->cm->mapManyToMany($association); + $this->cm->addAssociation($association); self::assertEquals( [ @@ -507,7 +507,7 @@ public function testThrowsExceptionOnCreateManyToManyWithIdentity() ->build() ; - $this->cm->mapManyToMany($association); + $this->cm->addAssociation($association); } public function testCreateOneToMany() @@ -519,7 +519,7 @@ public function testCreateOneToMany() ->build() ; - $this->cm->mapOneToMany($association); + $this->cm->addAssociation($association); self::assertEquals( [ @@ -540,7 +540,7 @@ public function testThrowsExceptionOnCreateOneToManyWithIdentity() ->withIndexedBy('test') ->build(); - $this->cm->mapOneToMany($association); + $this->cm->addAssociation($association); } public function testOrphanRemovalOnCreateOneToOne() @@ -560,7 +560,7 @@ public function testOrphanRemovalOnCreateOneToOne() ->build() ; - $this->cm->mapOneToOne($association); + $this->cm->addAssociation($association); self::assertEquals( [ @@ -579,7 +579,7 @@ public function testOrphanRemovalOnCreateOneToMany() ->build() ; - $this->cm->mapOneToMany($association); + $this->cm->addAssociation($association); self::assertEquals( [ @@ -607,7 +607,7 @@ public function testExceptionOnOrphanRemovalOnManyToOne() ->withOrphanRemoval(true) ->build(); - $this->cm->mapManyToOne($association); + $this->cm->addAssociation($association); } public function testOrphanRemovalOnManyToMany() @@ -636,7 +636,7 @@ public function testOrphanRemovalOnManyToMany() ->withOrphanRemoval(true) ->build(); - $this->cm->mapManyToMany($association); + $this->cm->addAssociation($association); self::assertEquals( [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 1241d60d8a5..1e4bc2c23f3 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -306,7 +306,7 @@ protected function createValidClassMetadata() $association->setTargetEntity('TestEntity1'); $association->setMappedBy('this'); - $cm1->mapOneToOne($association); + $cm1->addAssociation($association); // and an association on the owning side $joinColumns = []; @@ -323,7 +323,7 @@ protected function createValidClassMetadata() $association->setJoinColumns($joinColumns); $association->setTargetEntity('TestEntity1'); - $cm1->mapOneToOne($association); + $cm1->addAssociation($association); // and an id generator type $cm1->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index e082ec7f0a1..252715097e3 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -62,7 +62,7 @@ public function testClassMetadataInstanceSerialization() $association->setTargetEntity('CmsAddress'); $association->setMappedBy('foo'); - $cm->mapOneToOne($association); + $cm->addAssociation($association); self::assertEquals(1, count($cm->associationMappings)); @@ -175,7 +175,7 @@ public function testMapAssociationInGlobalNamespace() $association->setJoinTable($joinTable); $association->setTargetEntity('DoctrineGlobal_User'); - $cm->mapManyToMany($association); + $cm->addAssociation($association); self::assertEquals("DoctrineGlobal_User", $cm->associationMappings['author']->getTargetEntity()); } @@ -189,7 +189,7 @@ public function testMapManyToManyJoinTableDefaults() $association->setTargetEntity('CmsGroup'); - $cm->mapManyToMany($association); + $cm->addAssociation($association); $association = $cm->associationMappings['groups']; @@ -229,7 +229,7 @@ public function testSerializeManyToManyJoinTableCascade() $association->setTargetEntity('CmsGroup'); - $cm->mapManyToMany($association); + $cm->addAssociation($association); $association = $cm->associationMappings['groups']; $association = unserialize(serialize($association)); @@ -416,7 +416,7 @@ public function testDuplicateFieldAndAssociationMapping1_ThrowsException() $association->setTargetEntity('CmsUser'); - $metadata->mapOneToOne($association); + $metadata->addAssociation($association); } public function testDuplicateFieldAndAssociationMapping2_ThrowsException() @@ -428,7 +428,7 @@ public function testDuplicateFieldAndAssociationMapping2_ThrowsException() $association->setTargetEntity('CmsUser'); - $metadata->mapOneToOne($association); + $metadata->addAssociation($association); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); @@ -488,7 +488,7 @@ public function testDefaultTableName() $association->setTargetEntity('CmsUser'); $association->setInversedBy('users'); - $cm->mapManyToMany($association); + $cm->addAssociation($association); $association = $cm->associationMappings['user']; @@ -515,7 +515,7 @@ public function testDefaultJoinColumnName() $association->setJoinColumns($joinColumns); $association->setTargetEntity('CmsUser'); - $cm->mapOneToOne($association); + $cm->addAssociation($association); $association = $cm->associationMappings['user']; $joinColumns = $association->getJoinColumns(); @@ -545,7 +545,7 @@ public function testDefaultJoinColumnName() $association->setTargetEntity('CmsUser'); $association->setInversedBy('users'); - $cm->mapManyToMany($association); + $cm->addAssociation($association); $association = $cm->associationMappings['user']; $joinTable = $association->getJoinTable(); @@ -570,7 +570,7 @@ public function testOneToOneUnderscoreNamingStrategyDefaults() $association->setTargetEntity('CmsUser'); - $metadata->mapOneToOne($association); + $metadata->addAssociation($association); $association = $metadata->associationMappings['user']; $joinColumns = $association->getJoinColumns(); @@ -592,7 +592,7 @@ public function testManyToManyUnderscoreNamingStrategyDefaults() $association->setTargetEntity('CmsUser'); - $metadata->mapManyToMany($association); + $metadata->addAssociation($association); $association = $metadata->associationMappings['user']; $joinTable = $association->getJoinTable(); @@ -615,7 +615,7 @@ public function testManyToManyUnderscoreNamingStrategyDefaults() $association->setTargetEntity(CMS\CmsUser::class); - $cm->mapManyToMany($association); + $cm->addAssociation($association); $association = $cm->associationMappings['author']; @@ -656,7 +656,7 @@ public function testJoinTableMappingDefaults() $association->setTargetEntity(CMS\CmsUser::class); - $metadata->mapManyToMany($association); + $metadata->addAssociation($association); $association = $metadata->associationMappings['author']; @@ -676,7 +676,7 @@ public function testMapIdentifierAssociation() $association->setTargetEntity(DDC117Article::class); $association->setPrimaryKey(true); - $cm->mapOneToOne($association); + $cm->addAssociation($association); self::assertEquals(["article"], $cm->identifier); } @@ -698,7 +698,7 @@ public function testOrphanRemovalIdentifierAssociation() $association->setPrimaryKey(true); $association->setOrphanRemoval(true); - $cm->mapOneToOne($association); + $cm->addAssociation($association); } /** @@ -718,7 +718,7 @@ public function testInverseIdentifierAssociation() $association->setPrimaryKey(true); $association->setMappedBy('details'); - $cm->mapOneToOne($association); + $cm->addAssociation($association); } /** @@ -737,7 +737,7 @@ public function testIdentifierAssociationManyToMany() $association->setTargetEntity(DDC117Article::class); $association->setPrimaryKey(true); - $cm->mapManyToMany($association); + $cm->addAssociation($association); } /** @@ -1136,7 +1136,7 @@ public function testTargetEntityNotFound() $association->setTargetEntity('UnknownClass'); - $cm->mapManyToOne($association); + $cm->addAssociation($association); $this->expectException(MappingException::class); $this->expectExceptionMessage("The target-entity Doctrine\\Tests\\Models\\CMS\\UnknownClass cannot be found in '" . CMS\CmsUser::class . "#address'."); @@ -1225,13 +1225,13 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategy() $association->setTargetEntity('CmsUser'); - $addressMetadata->mapManyToMany($association); + $addressMetadata->addAssociation($association); $association = new Mapping\ManyToManyAssociationMetadata('author'); $association->setTargetEntity(CMS\CmsUser::class); - $articleMetadata->mapManyToMany($association); + $articleMetadata->addAssociation($association); self::assertEquals('routing_routingleg', $routingMetadata->table->getName()); self::assertEquals('cms_cmsaddress_cms_cmsuser', $addressMetadata->associationMappings['user']->getJoinTable()->getName()); @@ -1285,7 +1285,7 @@ public function testInvalidCascade() $association->setTargetEntity('UnknownClass'); $association->setCascade(['invalid']); - $cm->mapManyToOne($association); + $cm->addAssociation($association); } /** @@ -1302,7 +1302,7 @@ public function testInvalidPropertyAssociationOverrideNameException() $association->setTargetEntity('DDC964Address'); - $cm->mapManyToOne($association); + $cm->addAssociation($association); $cm->setAssociationOverride(new Mapping\ManyToOneAssociationMetadata('invalidPropertyName')); } @@ -1365,7 +1365,7 @@ public function testManyToManySelfReferencingNamingStrategyDefaults() $association->setTargetEntity('CustomTypeParent'); - $cm->mapManyToMany($association); + $cm->addAssociation($association); $association = $cm->associationMappings['friendsWithMe']; diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php index 6e4a05a04c5..f765b26f295 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php @@ -42,7 +42,7 @@ $association->setJoinColumns($joinColumns); $association->setTargetEntity('CmsUser'); -$metadata->mapOneToOne($association); +$metadata->addAssociation($association); $metadata->addNamedNativeQuery( [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index 0aa93360b36..54024541fad 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -48,7 +48,7 @@ $association->setTargetEntity(State::class); $association->setInversedBy('cities'); -$metadata->mapOneToOne($association); +$metadata->addAssociation($association); $metadata->enableAssociationCache('state', ['usage' => Mapping\CacheUsage::READ_ONLY]); @@ -57,7 +57,7 @@ $association->setTargetEntity(Travel::class); $association->setMappedBy('visitedCities'); -$metadata->mapManyToMany($association); +$metadata->addAssociation($association); $association = new Mapping\OneToManyAssociationMetadata('attractions'); @@ -65,6 +65,6 @@ $association->setMappedBy('city'); $association->setOrderBy(['name' => 'ASC']); -$metadata->mapOneToMany($association); +$metadata->addAssociation($association); $metadata->enableAssociationCache('attractions', ['usage' => Mapping\CacheUsage::READ_ONLY]); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php index 7f161e8bf47..a20214d4409 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php @@ -25,6 +25,6 @@ $association->setTargetEntity('DDC3579Group'); -$metadata->mapManyToMany($association); +$metadata->addAssociation($association); $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php index ca10b1e8780..630b73a266b 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php @@ -37,7 +37,7 @@ $association->setTargetEntity('DDC964Address'); $association->setCascade(['persist', 'merge']); -$metadata->mapManyToOne($association); +$metadata->addAssociation($association); $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('ddc964_users_groups'); @@ -63,6 +63,6 @@ $association->setInversedBy('user'); $association->setCascade(['persist','merge','detach']); -$metadata->mapManyToMany($association); +$metadata->addAssociation($association); $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php index 0fb5d6cf4b2..c9b7151e848 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php @@ -14,4 +14,4 @@ $association->setTargetEntity('PHPSLCFoo'); $association->setPrimaryKey(true); -$metadata->mapManyToOne($association); +$metadata->addAssociation($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index 8b8e4aca6a8..8dd5bd6e321 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -121,7 +121,7 @@ $association->setCascade(['remove']); $association->setOrphanRemoval(false); -$metadata->mapOneToOne($association); +$metadata->addAssociation($association); $association = new Mapping\OneToManyAssociationMetadata('phonenumbers'); @@ -131,7 +131,7 @@ $association->setOrphanRemoval(true); $association->setOrderBy(['number' => 'ASC']); -$metadata->mapOneToMany($association); +$metadata->addAssociation($association); $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('cms_users_groups'); @@ -158,4 +158,4 @@ $association->setTargetEntity(Group::class); $association->setCascade(['remove', 'persist', 'refresh', 'merge', 'detach']); -$metadata->mapManyToMany($association); +$metadata->addAssociation($association); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 4dbd5ebb897..33135db5b6a 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -134,7 +134,7 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $association->setTargetEntity(EntityGeneratorAuthor::class); $association->setMappedBy('book'); - $metadata->mapOneToOne($association); + $metadata->addAssociation($association); // Property: "comments" $joinTable = new Mapping\JoinTableMetadata(); @@ -158,7 +158,7 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $association->setTargetEntity(EntityGeneratorComment::class); $association->setFetchMode(Mapping\FetchMode::EXTRA_LAZY); - $metadata->mapManyToMany($association); + $metadata->addAssociation($association); $metadata->addLifecycleCallback('loading', 'postLoad'); $metadata->addLifecycleCallback('willBeRemoved', 'preRemove'); @@ -734,7 +734,7 @@ public function testGenerateEntityWithMultipleInverseJoinColumns() $association->setJoinTable($joinTable); $association->setTargetEntity('DDC2079CentroCusto'); - $metadata->mapManyToMany($association); + $metadata->addAssociation($association); $this->generator->writeEntityClass($metadata, $this->tmpDir); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php index 33dfb32f096..ee9c9dab0c0 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php @@ -59,7 +59,7 @@ $association->setTargetEntity(Export\Group::class); -$metadata->mapManyToOne($association); +$metadata->addAssociation($association); // Property: "address" $joinColumns = []; @@ -81,7 +81,7 @@ $association->setFetchMode(Mapping\FetchMode::EAGER); $association->setOrphanRemoval(true); -$metadata->mapOneToOne($association); +$metadata->addAssociation($association); // Property: "cart" $association = new Mapping\OneToOneAssociationMetadata('cart'); @@ -92,7 +92,7 @@ $association->setFetchMode(Mapping\FetchMode::EAGER); $association->setOrphanRemoval(false); -$metadata->mapOneToOne($association); +$metadata->addAssociation($association); // Property: "phonenumbers" $association = new Mapping\OneToManyAssociationMetadata('phonenumbers'); @@ -104,7 +104,7 @@ $association->setOrphanRemoval(true); $association->setOrderBy(['number' => 'ASC']); -$metadata->mapOneToMany($association); +$metadata->addAssociation($association); // Property: "groups" $joinTable = new Mapping\JoinTableMetadata(); @@ -132,4 +132,4 @@ $association->setCascade(['remove', 'persist', 'refresh', 'merge', 'detach']); $association->setFetchMode(Mapping\FetchMode::EXTRA_LAZY); -$metadata->mapManyToMany($association); +$metadata->addAssociation($association); From 86679b7b8ecb396663e429c6f3e4537e227b4141 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 13 Mar 2017 17:36:16 -0400 Subject: [PATCH 111/275] Eliminated QuoteStrategy support completely and simplified SQL alias generation --- lib/Doctrine/ORM/Configuration.php | 32 -- .../ORM/Mapping/DefaultQuoteStrategy.php | 79 --- lib/Doctrine/ORM/Mapping/QuoteStrategy.php | 54 -- .../AbstractCollectionPersister.php | 16 +- .../AbstractEntityInheritancePersister.php | 2 +- .../Entity/BasicEntityPersister.php | 29 +- .../Query/Exec/MultiTableDeleteExecutor.php | 5 +- .../Query/Exec/MultiTableUpdateExecutor.php | 5 +- lib/Doctrine/ORM/Query/SqlWalker.php | 71 ++- .../Pagination/LimitSubqueryOutputWalker.php | 22 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 12 +- .../Doctrine/Tests/ORM/ConfigurationTest.php | 9 - .../Functional/OneToOneEagerLoadingTest.php | 10 +- .../PersistentCollectionCriteriaTest.php | 1 - .../ORM/Functional/Ticket/DDC1225Test.php | 2 +- .../ORM/Functional/Ticket/DDC1430Test.php | 6 +- .../ORM/Functional/Ticket/DDC1595Test.php | 4 +- .../ORM/Functional/Ticket/DDC1695Test.php | 2 +- .../ORM/Functional/Ticket/DDC331Test.php | 2 +- .../ORM/Functional/Ticket/DDC448Test.php | 2 +- .../ORM/Functional/Ticket/DDC493Test.php | 2 +- .../ORM/Functional/Ticket/DDC513Test.php | 2 +- .../ORM/Functional/Ticket/DDC698Test.php | 2 +- .../ORM/Functional/Ticket/DDC719Test.php | 2 +- .../BasicEntityPersisterTypeValueSqlTest.php | 2 +- .../ORM/Query/CustomTreeWalkersJoinTest.php | 4 +- .../Tests/ORM/Query/CustomTreeWalkersTest.php | 8 +- .../ORM/Query/DeleteSqlGenerationTest.php | 2 +- tests/Doctrine/Tests/ORM/Query/QueryTest.php | 2 +- .../ORM/Query/SelectSqlGenerationTest.php | 488 +++++++++--------- .../Tests/ORM/Query/SqlWalkerTest.php | 6 +- .../ORM/Query/UpdateSqlGenerationTest.php | 4 +- .../Pagination/CountOutputWalkerTest.php | 8 +- .../ORM/Tools/Pagination/CountWalkerTest.php | 10 +- .../LimitSubqueryOutputWalkerTest.php | 48 +- .../Pagination/LimitSubqueryWalkerTest.php | 12 +- .../Tools/Pagination/WhereInWalkerTest.php | 20 +- 37 files changed, 391 insertions(+), 596 deletions(-) delete mode 100644 lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php delete mode 100644 lib/Doctrine/ORM/Mapping/QuoteStrategy.php diff --git a/lib/Doctrine/ORM/Configuration.php b/lib/Doctrine/ORM/Configuration.php index 0dc1670bcd2..589544f5d74 100644 --- a/lib/Doctrine/ORM/Configuration.php +++ b/lib/Doctrine/ORM/Configuration.php @@ -32,11 +32,9 @@ use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\DefaultEntityListenerResolver; use Doctrine\ORM\Mapping\DefaultNamingStrategy; -use Doctrine\ORM\Mapping\DefaultQuoteStrategy; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; use Doctrine\ORM\Mapping\EntityListenerResolver; use Doctrine\ORM\Mapping\NamingStrategy; -use Doctrine\ORM\Mapping\QuoteStrategy; use Doctrine\ORM\Repository\DefaultRepositoryFactory; use Doctrine\ORM\Repository\RepositoryFactory; @@ -712,36 +710,6 @@ public function getNamingStrategy() return $this->attributes['namingStrategy']; } - /** - * Sets quote strategy. - * - * @since 2.3 - * - * @param \Doctrine\ORM\Mapping\QuoteStrategy $quoteStrategy - * - * @return void - */ - public function setQuoteStrategy(QuoteStrategy $quoteStrategy) - { - $this->attributes['quoteStrategy'] = $quoteStrategy; - } - - /** - * Gets quote strategy. - * - * @since 2.3 - * - * @return \Doctrine\ORM\Mapping\QuoteStrategy - */ - public function getQuoteStrategy() - { - if ( ! isset($this->attributes['quoteStrategy'])) { - $this->attributes['quoteStrategy'] = new DefaultQuoteStrategy(); - } - - return $this->attributes['quoteStrategy']; - } - /** * Set the entity listener resolver. * diff --git a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php b/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php deleted file mode 100644 index cdd159b66cc..00000000000 --- a/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php +++ /dev/null @@ -1,79 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping; - -use Doctrine\DBAL\Platforms\AbstractPlatform; - -/** - * A set of rules for determining the physical column, alias and table quotes - * - * @since 2.3 - * @author Fabio B. Silva - */ -class DefaultQuoteStrategy implements QuoteStrategy -{ - /** - * {@inheritdoc} - */ - public function getIdentifierColumnNames(ClassMetadata $class, AbstractPlatform $platform) - { - $quotedColumnNames = []; - - foreach ($class->identifier as $fieldName) { - if (($property = $class->getProperty($fieldName)) !== null) { - $quotedColumnNames[] = $platform->quoteIdentifier($property->getColumnName()); - - continue; - } - - // Association defined as Id field - $joinColumns = $class->associationMappings[$fieldName]->getJoinColumns(); - $assocQuotedColumnNames = array_map( - function (JoinColumnMetadata $joinColumn) use ($platform) - { - return $platform->quoteIdentifier($joinColumn->getColumnName()); - }, - $joinColumns - ); - - $quotedColumnNames = array_merge($quotedColumnNames, $assocQuotedColumnNames); - } - - return $quotedColumnNames; - } - - /** - * {@inheritdoc} - */ - public function getColumnAlias($columnName, $counter, AbstractPlatform $platform, ClassMetadata $class = null) - { - // 1 ) Concatenate column name and counter - // 2 ) Trim the column alias to the maximum identifier length of the platform. - // If the alias is to long, characters are cut off from the beginning. - // 3 ) Strip non alphanumeric characters - // 4 ) Prefix with "_" if the result its numeric - $columnName = $columnName . '_' . $counter; - $columnName = substr($columnName, -$platform->getMaxIdentifierLength()); - $columnName = preg_replace('/[^A-Za-z0-9_]/', '', $columnName); - $columnName = is_numeric($columnName) ? '_' . $columnName : $columnName; - - return $platform->getSQLResultCasing($columnName); - } -} diff --git a/lib/Doctrine/ORM/Mapping/QuoteStrategy.php b/lib/Doctrine/ORM/Mapping/QuoteStrategy.php deleted file mode 100644 index 654b82ba72a..00000000000 --- a/lib/Doctrine/ORM/Mapping/QuoteStrategy.php +++ /dev/null @@ -1,54 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping; - -use Doctrine\DBAL\Platforms\AbstractPlatform; - -/** - * A set of rules for determining the column, alias and table quotes. - * - * @since 2.3 - * @author Fabio B. Silva - */ -interface QuoteStrategy -{ - /** - * Gets the (possibly quoted) identifier column names for safe use in an SQL statement. - * - * @param ClassMetadata $class - * @param AbstractPlatform $platform - * - * @return array - */ - public function getIdentifierColumnNames(ClassMetadata $class, AbstractPlatform $platform); - - /** - * Gets the column alias. - * - * @param string $columnName - * @param integer $counter - * @param AbstractPlatform $platform - * @param ClassMetadata|null $class - * - * @return string - */ - public function getColumnAlias($columnName, $counter, AbstractPlatform $platform, ClassMetadata $class = null); - -} diff --git a/lib/Doctrine/ORM/Persisters/Collection/AbstractCollectionPersister.php b/lib/Doctrine/ORM/Persisters/Collection/AbstractCollectionPersister.php index 2e85b67f3b2..bb127fb112e 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/AbstractCollectionPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/AbstractCollectionPersister.php @@ -52,13 +52,6 @@ abstract class AbstractCollectionPersister implements CollectionPersister */ protected $platform; - /** - * The quote strategy. - * - * @var \Doctrine\ORM\Mapping\QuoteStrategy - */ - protected $quoteStrategy; - /** * Initializes a new instance of a class derived from AbstractCollectionPersister. * @@ -66,11 +59,10 @@ abstract class AbstractCollectionPersister implements CollectionPersister */ public function __construct(EntityManagerInterface $em) { - $this->em = $em; - $this->uow = $em->getUnitOfWork(); - $this->conn = $em->getConnection(); - $this->platform = $this->conn->getDatabasePlatform(); - $this->quoteStrategy = $em->getConfiguration()->getQuoteStrategy(); + $this->em = $em; + $this->uow = $em->getUnitOfWork(); + $this->conn = $em->getConnection(); + $this->platform = $this->conn->getDatabasePlatform(); } /** diff --git a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php index d8fea521b34..71e0275dee4 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php @@ -61,7 +61,7 @@ protected function prepareInsertData($entity) protected function getSelectJoinColumnSQL($tableName, $field, $type) { $tableAlias = $this->getSQLTableAlias($tableName); - $columnAlias = $this->getSQLColumnAlias($field); + $columnAlias = $this->getSQLColumnAlias(); $sql = sprintf('%s.%s', $tableAlias, $field); $this->currentPersisterContext->rsm->addMetaResult('r', $columnAlias, $field, false, $type); diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 1c021e9764b..b4ffd120c72 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -167,13 +167,6 @@ class BasicEntityPersister implements EntityPersister */ private $insertSql; - /** - * The quote strategy. - * - * @var \Doctrine\ORM\Mapping\QuoteStrategy - */ - protected $quoteStrategy; - /** * The IdentifierFlattener used for manipulating identifiers * @@ -209,7 +202,6 @@ public function __construct(EntityManagerInterface $em, ClassMetadata $class) $this->class = $class; $this->conn = $em->getConnection(); $this->platform = $this->conn->getDatabasePlatform(); - $this->quoteStrategy = $em->getConfiguration()->getQuoteStrategy(); $this->identifierFlattener = new IdentifierFlattener($em->getUnitOfWork(), $em->getMetadataFactory()); $this->noLimitsContext = $this->currentPersisterContext = new CachedPersisterContext( $class, @@ -340,7 +332,10 @@ protected function fetchVersionValue(FieldMetadata $versionProperty, array $id) $versionedClass = $versionProperty->getDeclaringClass(); $tableName = $versionedClass->table->getQuotedQualifiedName($this->platform); $columnName = $this->platform->quoteIdentifier($versionProperty->getColumnName()); - $identifier = $this->quoteStrategy->getIdentifierColumnNames($versionedClass, $this->platform); + $identifier = array_map( + function ($columnName) { return $this->platform->quoteIdentifier($columnName); }, + array_keys($versionedClass->getIdentifierColumns($this->em)) + ); // FIXME: Order with composite keys might not be correct $sql = 'SELECT ' . $columnName @@ -1415,7 +1410,7 @@ protected function getSelectColumnAssociationSQL($field, AssociationMetadata $as foreach ($association->getJoinColumns() as $joinColumn) { $columnName = $joinColumn->getColumnName(); $quotedColumnName = $this->platform->quoteIdentifier($columnName); - $resultColumnName = $this->getSQLColumnAlias($columnName); + $resultColumnName = $this->getSQLColumnAlias(); if (! $joinColumn->getType()) { $joinColumn->setType( @@ -1588,7 +1583,7 @@ protected function getInsertColumnList() protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r') { $property = $class->getProperty($field); - $columnAlias = $this->getSQLColumnAlias($property->getColumnName()); + $columnAlias = $this->getSQLColumnAlias(); $sql = sprintf( '%s.%s', $this->getSQLTableAlias($property->getTableName(), ($alias == 'r' ? '' : $alias)), @@ -2168,15 +2163,13 @@ protected function getJoinSQLForAssociation(AssociationMetadata $association) } /** - * {@inheritdoc} + * Gets an SQL column alias for a column name. + * + * @return string */ - public function getSQLColumnAlias($columnName) + public function getSQLColumnAlias() { - return $this->quoteStrategy->getColumnAlias( - $columnName, - $this->currentPersisterContext->sqlAliasCounter++, - $this->platform - ); + return $this->platform->getSQLResultCasing('c' . $this->currentPersisterContext->sqlAliasCounter++); } /** diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php index 94507102a42..186fc99cff4 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php @@ -64,7 +64,6 @@ public function __construct(AST\Node $AST, $sqlWalker) $em = $sqlWalker->getEntityManager(); $conn = $em->getConnection(); $platform = $conn->getDatabasePlatform(); - $quoteStrategy = $em->getConfiguration()->getQuoteStrategy(); $primaryClass = $em->getClassMetadata($AST->deleteClause->abstractSchemaName); $primaryDqlAlias = $AST->deleteClause->aliasIdentificationVariable; @@ -75,10 +74,10 @@ public function __construct(AST\Node $AST, $sqlWalker) $idColumnNameList = implode(', ', array_keys($idColumns)); // 1. Create an INSERT INTO temptable ... SELECT identifiers WHERE $AST->getWhereClause() - $sqlWalker->setSQLTableAlias($primaryClass->getTableName(), 't0', $primaryDqlAlias); + $sqlWalker->setSQLTableAlias($primaryClass->getTableName(), 'i0', $primaryDqlAlias); $this->insertSql = 'INSERT INTO ' . $tempTable . ' (' . $idColumnNameList . ')' - . ' SELECT t0.' . implode(', t0.', array_keys($idColumns)); + . ' SELECT i0.' . implode(', i0.', array_keys($idColumns)); $rangeDecl = new AST\RangeVariableDeclaration($primaryClass->name, $primaryDqlAlias); $fromClause = new AST\FromClause([new AST\IdentificationVariableDeclaration($rangeDecl, null, [])]); diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php index 8b2ac7564d4..fc436a8108f 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php @@ -73,7 +73,6 @@ public function __construct(AST\Node $AST, $sqlWalker) $em = $sqlWalker->getEntityManager(); $conn = $em->getConnection(); $platform = $conn->getDatabasePlatform(); - $quoteStrategy = $em->getConfiguration()->getQuoteStrategy(); $updateClause = $AST->updateClause; $primaryClass = $sqlWalker->getEntityManager()->getClassMetadata($updateClause->abstractSchemaName); @@ -86,10 +85,10 @@ public function __construct(AST\Node $AST, $sqlWalker) $idColumnNameList = implode(', ', array_keys($idColumns)); // 1. Create an INSERT INTO temptable ... SELECT identifiers WHERE $AST->getWhereClause() - $sqlWalker->setSQLTableAlias($primaryClass->getTableName(), 't0', $updateClause->aliasIdentificationVariable); + $sqlWalker->setSQLTableAlias($primaryClass->getTableName(), 'i0', $updateClause->aliasIdentificationVariable); $this->insertSql = 'INSERT INTO ' . $tempTable . ' (' . $idColumnNameList . ')' - . ' SELECT t0.' . implode(', t0.', array_keys($idColumns)); + . ' SELECT i0.' . implode(', i0.', array_keys($idColumns)); $rangeDecl = new AST\RangeVariableDeclaration($primaryClass->name, $updateClause->aliasIdentificationVariable); $fromClause = new AST\FromClause([new AST\IdentificationVariableDeclaration($rangeDecl, null, [])]); diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 685f5c7001f..5f079dbc892 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -172,13 +172,6 @@ class SqlWalker implements TreeWalker */ private $platform; - /** - * The quote strategy. - * - * @var \Doctrine\ORM\Mapping\QuoteStrategy - */ - private $quoteStrategy; - /** * {@inheritDoc} */ @@ -191,7 +184,6 @@ public function __construct($query, $parserResult, array $queryComponents) $this->em = $query->getEntityManager(); $this->conn = $this->em->getConnection(); $this->platform = $this->conn->getDatabasePlatform(); - $this->quoteStrategy = $this->em->getConfiguration()->getQuoteStrategy(); } /** @@ -295,10 +287,8 @@ public function getSQLTableAlias($tableName, $dqlAlias = '') { $tableName .= ($dqlAlias) ? '@[' . $dqlAlias . ']' : ''; - if ( ! isset($this->tableAliasMap[$tableName])) { - $char = preg_match('/[a-z]/i', $tableName[0]) ? strtolower($tableName[0]) : 't'; - - $this->tableAliasMap[$tableName] = $char . $this->tableAliasCounter++ . '_'; + if (! isset($this->tableAliasMap[$tableName])) { + $this->tableAliasMap[$tableName] = 't' . $this->tableAliasCounter++; } return $this->tableAliasMap[$tableName]; @@ -326,13 +316,12 @@ public function setSQLTableAlias($tableName, $alias, $dqlAlias = '') /** * Gets an SQL column alias for a column name. * - * @param string $columnName - * * @return string */ - public function getSQLColumnAlias($columnName) + public function getSQLColumnAlias() { - return $this->quoteStrategy->getColumnAlias($columnName, $this->aliasCounter++, $this->platform); + return $this->platform->getSQLResultCasing('c' . $this->aliasCounter++); + } /** @@ -362,8 +351,10 @@ private function generateClassTableInheritanceJoins($class, $dqlAlias) $sqlParts = []; - foreach ($this->quoteStrategy->getIdentifierColumnNames($class, $this->platform) as $columnName) { - $sqlParts[] = $baseTableAlias . '.' . $columnName . ' = ' . $tableAlias . '.' . $columnName; + foreach ($class->getIdentifierColumns($this->em) as $column) { + $quotedColumnName = $this->platform->quoteIdentifier($column->getColumnName()); + + $sqlParts[] = $baseTableAlias . '.' . $quotedColumnName . ' = ' . $tableAlias . '.' . $quotedColumnName; } // Add filters on the root class @@ -389,8 +380,10 @@ private function generateClassTableInheritanceJoins($class, $dqlAlias) $sqlParts = []; - foreach ($this->quoteStrategy->getIdentifierColumnNames($subClass, $this->platform) as $columnName) { - $sqlParts[] = $baseTableAlias . '.' . $columnName . ' = ' . $tableAlias . '.' . $columnName; + foreach ($subClass->getIdentifierColumns($this->em) as $column) { + $quotedColumnName = $this->platform->quoteIdentifier($column->getColumnName()); + + $sqlParts[] = $baseTableAlias . '.' . $quotedColumnName . ' = ' . $tableAlias . '.' . $quotedColumnName; } $sql .= implode(' AND ', $sqlParts); @@ -625,8 +618,10 @@ public function walkEntityIdentificationVariable($identVariable) $tableAlias = $this->getSQLTableAlias($class->getTableName(), $identVariable); $sqlParts = []; - foreach ($this->quoteStrategy->getIdentifierColumnNames($class, $this->platform) as $columnName) { - $sqlParts[] = $tableAlias . '.' . $columnName; + foreach ($class->getIdentifierColumns($this->em) as $column) { + $quotedColumnName = $this->platform->quoteIdentifier($column->getColumnName()); + + $sqlParts[] = $tableAlias . '.' . $quotedColumnName; } return implode(', ', $sqlParts); @@ -756,7 +751,7 @@ public function walkSelectClause($selectClause) $discrColumnType = $discrColumn->getType(); $quotedColumnName = $this->platform->quoteIdentifier($discrColumn->getColumnName()); $sqlTableAlias = $this->getSQLTableAlias($discrColumn->getTableName(), $dqlAlias); - $sqlColumnAlias = $this->getSQLColumnAlias($discrColumnName); + $sqlColumnAlias = $this->getSQLColumnAlias(); $sqlSelectExpressions[] = sprintf( '%s AS %s', @@ -781,7 +776,7 @@ public function walkSelectClause($selectClause) foreach ($association->getJoinColumns() as $joinColumn) { $columnName = $joinColumn->getColumnName(); $quotedColumnName = $this->platform->quoteIdentifier($columnName); - $columnAlias = $this->getSQLColumnAlias($columnName); + $columnAlias = $this->getSQLColumnAlias(); $columnType = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); $sqlTableAlias = $this->getSQLTableAlias($joinColumn->getTableName(), $dqlAlias); @@ -821,7 +816,7 @@ public function walkSelectClause($selectClause) foreach ($association->getJoinColumns() as $joinColumn) { $columnName = $joinColumn->getColumnName(); $quotedColumnName = $this->platform->quoteIdentifier($columnName); - $columnAlias = $this->getSQLColumnAlias($columnName); + $columnAlias = $this->getSQLColumnAlias(); $columnType = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); $sqlSelectExpressions[] = sprintf( @@ -1336,7 +1331,7 @@ public function walkSelectExpression($selectExpression) $qComp = $this->queryComponents[$dqlAlias]; $class = $qComp['metadata']; $property = $class->getProperty($fieldName); - $columnAlias = $this->getSQLColumnAlias($property->getColumnName()); + $columnAlias = $this->getSQLColumnAlias(); $resultAlias = $selectExpression->fieldIdentificationVariable ?: $fieldName; $col = sprintf( '%s.%s', @@ -1370,7 +1365,7 @@ public function walkSelectExpression($selectExpression) case ($expr instanceof AST\CoalesceExpression): case ($expr instanceof AST\GeneralCaseExpression): case ($expr instanceof AST\SimpleCaseExpression): - $columnAlias = $this->getSQLColumnAlias('sclr'); + $columnAlias = $this->getSQLColumnAlias(); $resultAlias = $selectExpression->fieldIdentificationVariable ?: $this->scalarResultCounter++; $sql .= $expr->dispatch($this) . ' AS ' . $columnAlias; @@ -1385,7 +1380,7 @@ public function walkSelectExpression($selectExpression) break; case ($expr instanceof AST\Subselect): - $columnAlias = $this->getSQLColumnAlias('sclr'); + $columnAlias = $this->getSQLColumnAlias(); $resultAlias = $selectExpression->fieldIdentificationVariable ?: $this->scalarResultCounter++; $sql .= '(' . $this->walkSubselect($expr) . ') AS ' . $columnAlias; @@ -1432,7 +1427,7 @@ public function walkSelectExpression($selectExpression) continue; } - $columnAlias = $this->getSQLColumnAlias($property->getColumnName()); + $columnAlias = $this->getSQLColumnAlias(); $col = sprintf( '%s.%s', $this->getSQLTableAlias($property->getTableName(), $dqlAlias), @@ -1463,7 +1458,7 @@ public function walkSelectExpression($selectExpression) continue; } - $columnAlias = $this->getSQLColumnAlias($property->getColumnName()); + $columnAlias = $this->getSQLColumnAlias(); $col = sprintf( '%s.%s', $this->getSQLTableAlias($property->getTableName(), $dqlAlias), @@ -1568,7 +1563,7 @@ public function walkNewObject($newObjectExpression, $newObjectResultAlias=null) foreach ($newObjectExpression->args as $argIndex => $e) { $resultAlias = $this->scalarResultCounter++; - $columnAlias = $this->getSQLColumnAlias('sclr'); + $columnAlias = $this->getSQLColumnAlias(); $fieldType = Type::getType('string'); switch (true) { @@ -1654,7 +1649,7 @@ public function walkSimpleSelectExpression($simpleSelectExpression) case ($expr instanceof AST\SimpleCaseExpression): $alias = $simpleSelectExpression->fieldIdentificationVariable ?: $this->scalarResultCounter++; - $columnAlias = $this->getSQLColumnAlias('sclr'); + $columnAlias = $this->getSQLColumnAlias(); $this->scalarResultAliasMap[$alias] = $columnAlias; $sql .= $expr->dispatch($this) . ' AS ' . $columnAlias; @@ -1967,12 +1962,14 @@ public function walkCollectionMemberExpression($collMemberExpr) ); } - foreach ($this->quoteStrategy->getIdentifierColumnNames($targetClass, $this->platform) as $targetColumnName) { + foreach ($targetClass->getIdentifierColumns($this->em) as $targetColumn) { + $quotedTargetColumnName = $this->platform->quoteIdentifier($targetColumn->getColumnName()); + if (isset($dqlParamKey)) { $this->parserResult->addParameterMapping($dqlParamKey, $this->sqlParamIndex++); } - $sqlParts[] = $targetTableAlias . '.' . $targetColumnName . ' = ' . $entitySql; + $sqlParts[] = $targetTableAlias . '.' . $quotedTargetColumnName . ' = ' . $entitySql; } $sql .= implode(' AND ', $sqlParts); @@ -2030,12 +2027,14 @@ public function walkCollectionMemberExpression($collMemberExpr) ); } - foreach ($this->quoteStrategy->getIdentifierColumnNames($targetClass, $this->platform) as $targetColumnName) { + foreach ($targetClass->getIdentifierColumns($this->em) as $targetColumn) { + $quotedTargetColumnName = $this->platform->quoteIdentifier($targetColumn->getColumnName()); + if (isset($dqlParamKey)) { $this->parserResult->addParameterMapping($dqlParamKey, $this->sqlParamIndex++); } - $sqlParts[] = $targetTableAlias . '.' . $targetColumnName . ' = ' . $entitySql; + $sqlParts[] = $targetTableAlias . '.' . $quotedTargetColumnName . ' = ' . $entitySql; } $sql .= implode(' AND ', $sqlParts); diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php index edd3d4058c6..e7ac95f5f02 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php @@ -76,13 +76,6 @@ class LimitSubqueryOutputWalker extends SqlWalker */ private $em; - /** - * The quote strategy. - * - * @var \Doctrine\ORM\Mapping\QuoteStrategy - */ - private $quoteStrategy; - /** * @var array */ @@ -107,17 +100,20 @@ class LimitSubqueryOutputWalker extends SqlWalker */ public function __construct($query, $parserResult, array $queryComponents) { - $this->platform = $query->getEntityManager()->getConnection()->getDatabasePlatform(); - $this->rsm = $parserResult->getResultSetMapping(); + $this->platform = $query->getEntityManager()->getConnection()->getDatabasePlatform(); + $this->rsm = $parserResult->getResultSetMapping(); $this->queryComponents = $queryComponents; // Reset limit and offset $this->firstResult = $query->getFirstResult(); - $this->maxResults = $query->getMaxResults(); - $query->setFirstResult(null)->setMaxResults(null); + $this->maxResults = $query->getMaxResults(); + + $query + ->setFirstResult(null) + ->setMaxResults(null) + ; - $this->em = $query->getEntityManager(); - $this->quoteStrategy = $this->em->getConfiguration()->getQuoteStrategy(); + $this->em = $query->getEntityManager(); parent::__construct($query, $parserResult, $queryComponents); } diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 2930dec6788..ab959442bb2 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -62,13 +62,6 @@ class SchemaTool */ private $platform; - /** - * The quote strategy. - * - * @var \Doctrine\ORM\Mapping\QuoteStrategy - */ - private $quoteStrategy; - /** * Initializes a new SchemaTool instance that uses the connection of the * provided EntityManager. @@ -77,9 +70,8 @@ class SchemaTool */ public function __construct(EntityManagerInterface $em) { - $this->em = $em; - $this->platform = $em->getConnection()->getDatabasePlatform(); - $this->quoteStrategy = $em->getConfiguration()->getQuoteStrategy(); + $this->em = $em; + $this->platform = $em->getConnection()->getDatabasePlatform(); } /** diff --git a/tests/Doctrine/Tests/ORM/ConfigurationTest.php b/tests/Doctrine/Tests/ORM/ConfigurationTest.php index d53f34d2476..c4fa6a2f2d9 100644 --- a/tests/Doctrine/Tests/ORM/ConfigurationTest.php +++ b/tests/Doctrine/Tests/ORM/ConfigurationTest.php @@ -14,7 +14,6 @@ use Doctrine\ORM\Mapping\DefaultEntityListenerResolver; use Doctrine\ORM\Mapping\EntityListenerResolver; use Doctrine\ORM\Mapping\NamingStrategy; -use Doctrine\ORM\Mapping\QuoteStrategy; use Doctrine\ORM\ORMException; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\Tests\DoctrineTestCase; @@ -351,14 +350,6 @@ public function testSetGetNamingStrategy() self::assertSame($namingStrategy, $this->configuration->getNamingStrategy()); } - public function testSetGetQuoteStrategy() - { - self::assertInstanceOf(QuoteStrategy::class, $this->configuration->getQuoteStrategy()); - $quoteStrategy = $this->createMock(QuoteStrategy::class); - $this->configuration->setQuoteStrategy($quoteStrategy); - self::assertSame($quoteStrategy, $this->configuration->getQuoteStrategy()); - } - /** * @group DDC-1955 */ diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php index dbd4f3a167b..de28e51970b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneEagerLoadingTest.php @@ -149,7 +149,7 @@ public function testEagerLoadWithNullableColumnsGeneratesLeftJoinOnBothSides() $this->em->find(get_class($train), $train->id); self::assertSQLEquals( - 'SELECT t0."id" AS id_1, t0."driver_id" AS driver_id_2, t4."id" AS id_3, t4."name" AS name_5, t0."owner_id" AS owner_id_6, t8."id" AS id_7, t8."name" AS name_9 FROM "Train" t0 LEFT JOIN "TrainDriver" t4 ON t0."driver_id" = t4."id" INNER JOIN "TrainOwner" t8 ON t0."owner_id" = t8."id" WHERE t0."id" = ?', + 'SELECT t0."id" AS c1, t0."driver_id" AS c2, t4."id" AS c3, t4."name" AS c5, t0."owner_id" AS c6, t8."id" AS c7, t8."name" AS c9 FROM "Train" t0 LEFT JOIN "TrainDriver" t4 ON t0."driver_id" = t4."id" INNER JOIN "TrainOwner" t8 ON t0."owner_id" = t8."id" WHERE t0."id" = ?', $this->sqlLoggerStack->queries[$this->sqlLoggerStack->currentQuery]['sql'] ); @@ -158,7 +158,7 @@ public function testEagerLoadWithNullableColumnsGeneratesLeftJoinOnBothSides() $this->em->find(get_class($driver), $driver->id); self::assertSQLEquals( - 'SELECT t0."id" AS id_1, t0."name" AS name_2, t4."id" AS id_3, t4."driver_id" AS driver_id_5, t4."owner_id" AS owner_id_6 FROM "TrainOwner" t0 LEFT JOIN "Train" t4 ON t4."owner_id" = t0."id" WHERE t0."id" IN (?)', + 'SELECT t0."id" AS c1, t0."name" AS c2, t4."id" AS c3, t4."driver_id" AS c5, t4."owner_id" AS c6 FROM "TrainOwner" t0 LEFT JOIN "Train" t4 ON t4."owner_id" = t0."id" WHERE t0."id" IN (?)', $this->sqlLoggerStack->queries[$this->sqlLoggerStack->currentQuery]['sql'] ); } @@ -182,13 +182,13 @@ public function testEagerLoadWithNonNullableColumnsGeneratesInnerJoinOnOwningSid // The last query is the eager loading of the owner of the train self::assertSQLEquals( - 'SELECT t0."id" AS id_1, t0."name" AS name_2, t4."id" AS id_3, t4."driver_id" AS driver_id_5, t4."owner_id" AS owner_id_6 FROM "TrainOwner" t0 LEFT JOIN "Train" t4 ON t4."owner_id" = t0."id" WHERE t0."id" IN (?)', + 'SELECT t0."id" AS c1, t0."name" AS c2, t4."id" AS c3, t4."driver_id" AS c5, t4."owner_id" AS c6 FROM "TrainOwner" t0 LEFT JOIN "Train" t4 ON t4."owner_id" = t0."id" WHERE t0."id" IN (?)', $this->sqlLoggerStack->queries[$this->sqlLoggerStack->currentQuery]['sql'] ); // The one before is the fetching of the waggon and train self::assertSQLEquals( - 'SELECT t0."id" AS id_1, t0."train_id" AS train_id_2, t4."id" AS id_3, t4."driver_id" AS driver_id_5, t4."owner_id" AS owner_id_6 FROM "Waggon" t0 INNER JOIN "Train" t4 ON t0."train_id" = t4."id" WHERE t0."id" = ?', + 'SELECT t0."id" AS c1, t0."train_id" AS c2, t4."id" AS c3, t4."driver_id" AS c5, t4."owner_id" AS c6 FROM "Waggon" t0 INNER JOIN "Train" t4 ON t0."train_id" = t4."id" WHERE t0."id" = ?', $this->sqlLoggerStack->queries[$this->sqlLoggerStack->currentQuery - 1]['sql'] ); } @@ -208,7 +208,7 @@ public function testEagerLoadWithNonNullableColumnsGeneratesLeftJoinOnNonOwningS $this->em->find(get_class($owner), $owner->id); self::assertSQLEquals( - 'SELECT t0."id" AS id_1, t0."name" AS name_2, t4."id" AS id_3, t4."driver_id" AS driver_id_5, t4."owner_id" AS owner_id_6 FROM "TrainOwner" t0 LEFT JOIN "Train" t4 ON t4."owner_id" = t0."id" WHERE t0."id" = ?', + 'SELECT t0."id" AS c1, t0."name" AS c2, t4."id" AS c3, t4."driver_id" AS c5, t4."owner_id" AS c6 FROM "TrainOwner" t0 LEFT JOIN "Train" t4 ON t4."owner_id" = t0."id" WHERE t0."id" = ?', $this->sqlLoggerStack->queries[$this->sqlLoggerStack->currentQuery]['sql'] ); } diff --git a/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionCriteriaTest.php b/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionCriteriaTest.php index 68c83a752c8..4b1f5028e46 100644 --- a/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionCriteriaTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionCriteriaTest.php @@ -4,7 +4,6 @@ use Doctrine\Common\Collections\Criteria; use Doctrine\ORM\LazyCriteriaCollection; -use Doctrine\ORM\Mapping\DefaultQuoteStrategy; use Doctrine\Tests\Models\Quote\Group; use Doctrine\Tests\Models\Quote\User as QuoteUser; use Doctrine\Tests\Models\Tweet\Tweet; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1225Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1225Test.php index e1ced216e58..7f4974cb70d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1225Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1225Test.php @@ -33,7 +33,7 @@ public function testIssue() ->setParameter(1, 0); self::assertSQLEquals( - 'SELECT t0_."test_entity2_id" AS test_entity2_id_0 FROM "te1" t0_ WHERE t0_."test_entity2_id" = ?', + 'SELECT t0."test_entity2_id" AS c0 FROM "te1" t0 WHERE t0."test_entity2_id" = ?', $qb->getQuery()->getSQL() ); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1430Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1430Test.php index 9e77ee67c8b..9b0d994f40a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1430Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1430Test.php @@ -43,7 +43,7 @@ public function testOrderByFields() ); self::assertSQLEquals( - 'SELECT d0_."order_id" AS order_id_0, d0_."created_at" AS created_at_1, COUNT(d1_."id") AS sclr_2 FROM "DDC1430Order" d0_ LEFT JOIN "DDC1430OrderProduct" d1_ ON d0_."order_id" = d1_."order_id" GROUP BY d0_."order_id", d0_."created_at" ORDER BY d0_."order_id" ASC', + 'SELECT t0."order_id" AS c0, t0."created_at" AS c1, COUNT(t1."id") AS c2 FROM "DDC1430Order" t0 LEFT JOIN "DDC1430OrderProduct" t1 ON t0."order_id" = t1."order_id" GROUP BY t0."order_id", t0."created_at" ORDER BY t0."order_id" ASC', $query->getSQL() ); @@ -81,7 +81,7 @@ public function testOrderByAllObjectFields() ); self::assertSQLEquals( - 'SELECT d0_."order_id" AS order_id_0, d0_."created_at" AS created_at_1, d0_."order_status" AS order_status_2, COUNT(d1_."id") AS sclr_3 FROM "DDC1430Order" d0_ LEFT JOIN "DDC1430OrderProduct" d1_ ON d0_."order_id" = d1_."order_id" GROUP BY d0_."order_id", d0_."created_at", d0_."order_status" ORDER BY d0_."order_id" ASC', + 'SELECT t0."order_id" AS c0, t0."created_at" AS c1, t0."order_status" AS c2, COUNT(t1."id") AS c3 FROM "DDC1430Order" t0 LEFT JOIN "DDC1430OrderProduct" t1 ON t0."order_id" = t1."order_id" GROUP BY t0."order_id", t0."created_at", t0."order_status" ORDER BY t0."order_id" ASC', $query->getSQL() ); @@ -116,7 +116,7 @@ public function testTicket() ); self::assertSQLEquals( - 'SELECT d0_."order_id" AS order_id_0, d0_."created_at" AS created_at_1, d0_."order_status" AS order_status_2, COUNT(d1_."id") AS sclr_3 FROM "DDC1430Order" d0_ LEFT JOIN "DDC1430OrderProduct" d1_ ON d0_."order_id" = d1_."order_id" GROUP BY d0_."order_id", d0_."created_at", d0_."order_status" ORDER BY d0_."order_id" ASC', + 'SELECT t0."order_id" AS c0, t0."created_at" AS c1, t0."order_status" AS c2, COUNT(t1."id") AS c3 FROM "DDC1430Order" t0 LEFT JOIN "DDC1430OrderProduct" t1 ON t0."order_id" = t1."order_id" GROUP BY t0."order_id", t0."created_at", t0."order_status" ORDER BY t0."order_id" ASC', $query->getSQL() ); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php index e440684597f..2c99ce89557 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php @@ -41,14 +41,14 @@ public function testIssue() // DDC-1596 self::assertSQLEquals( - 'SELECT t0."id" AS id_1, t0."type" FROM "base" t0 WHERE t0."id" = ? AND t0."type" IN (\'Entity1\')', + 'SELECT t0."id" AS c1, t0."type" FROM "base" t0 WHERE t0."id" = ? AND t0."type" IN (\'Entity1\')', $sqlLogger->queries[count($sqlLogger->queries)]['sql'] ); $entities = $entity1->getEntities()->getValues(); self::assertSQLEquals( - 'SELECT t0."id" AS id_1, t0."type" FROM "base" t0 INNER JOIN "entity1_entity2" ON t0."id" = "entity1_entity2"."item" WHERE "entity1_entity2"."parent" = ? AND t0."type" IN (\'Entity2\')', + 'SELECT t0."id" AS c1, t0."type" FROM "base" t0 INNER JOIN "entity1_entity2" ON t0."id" = "entity1_entity2"."item" WHERE "entity1_entity2"."parent" = ? AND t0."type" IN (\'Entity2\')', $sqlLogger->queries[count($sqlLogger->queries)]['sql'] ); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php index 97d88a7b2d3..766f689e089 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php @@ -24,7 +24,7 @@ public function testIssue() $sql = $this->em->createQuery($dql)->getSQL(); self::assertEquals( - 'SELECT d0_."SmallText" AS SmallText_0, d0_."PublishDate" AS PublishDate_1 FROM "DDC1695News" d0_', + 'SELECT t0."SmallText" AS c0, t0."PublishDate" AS c1 FROM "DDC1695News" t0', $sql ); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC331Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC331Test.php index b6b3f619d1a..3a7b5d82cdb 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC331Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC331Test.php @@ -22,7 +22,7 @@ public function testSelectFieldOnRootEntity() $q = $this->em->createQuery('SELECT e.name FROM Doctrine\Tests\Models\Company\CompanyEmployee e'); self::assertSQLEquals( - 'SELECT c0_."name" AS name_0 FROM "company_employees" c1_ INNER JOIN "company_persons" c0_ ON c1_."id" = c0_."id" LEFT JOIN "company_managers" c2_ ON c1_."id" = c2_."id"', + 'SELECT t0."name" AS c0 FROM "company_employees" t1 INNER JOIN "company_persons" t0 ON t1."id" = t0."id" LEFT JOIN "company_managers" t2 ON t1."id" = t2."id"', $q->getSQL() ); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC448Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC448Test.php index 446d64a12ab..04ea0bd149e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC448Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC448Test.php @@ -24,7 +24,7 @@ public function testIssue() $q = $this->em->createQuery("select b from ".__NAMESPACE__."\\DDC448SubTable b where b.connectedClassId = ?1"); self::assertSQLEquals( - 'SELECT d0_."id" AS id_0, d0_."discr" AS discr_1, d0_."connectedClassId" AS connectedClassId_2 FROM "SubTable" s1_ INNER JOIN "DDC448MainTable" d0_ ON s1_."id" = d0_."id" WHERE d0_."connectedClassId" = ?', + 'SELECT t0."id" AS c0, t0."discr" AS c1, t0."connectedClassId" AS c2 FROM "SubTable" t1 INNER JOIN "DDC448MainTable" t0 ON t1."id" = t0."id" WHERE t0."connectedClassId" = ?', $q->getSQL() ); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC493Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC493Test.php index 024fe2abc29..764f9594d87 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC493Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC493Test.php @@ -23,7 +23,7 @@ public function testIssue() $q = $this->em->createQuery("select u, c.data from ".__NAMESPACE__."\\DDC493Distributor u JOIN u.contact c"); self::assertSQLEquals( - 'SELECT d0_."id" AS id_0, d1_."data" AS data_1, d0_."discr" AS discr_2, d0_."contact" AS contact_3 FROM "DDC493Distributor" d2_ INNER JOIN "DDC493Customer" d0_ ON d2_."id" = d0_."id" INNER JOIN "DDC493Contact" d1_ ON d0_."contact" = d1_."id"', + 'SELECT t0."id" AS c0, t1."data" AS c1, t0."discr" AS c2, t0."contact" AS c3 FROM "DDC493Distributor" t2 INNER JOIN "DDC493Customer" t0 ON t2."id" = t0."id" INNER JOIN "DDC493Contact" t1 ON t0."contact" = t1."id"', $q->getSQL() ); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC513Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC513Test.php index 5bce8a9d0a1..4f48882272e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC513Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC513Test.php @@ -23,7 +23,7 @@ public function testIssue() $q = $this->em->createQuery("select u from ".__NAMESPACE__."\\DDC513OfferItem u left join u.price p"); self::assertSQLEquals( - 'SELECT d0_."id" AS id_0, d0_."discr" AS discr_1, d0_."price" AS price_2 FROM "DDC513OfferItem" d1_ INNER JOIN "DDC513Item" d0_ ON d1_."id" = d0_."id" LEFT JOIN "DDC513Price" d2_ ON d0_."price" = d2_."id"', + 'SELECT t0."id" AS c0, t0."discr" AS c1, t0."price" AS c2 FROM "DDC513OfferItem" t1 INNER JOIN "DDC513Item" t0 ON t1."id" = t0."id" LEFT JOIN "DDC513Price" t2 ON t0."price" = t2."id"', $q->getSQL() ); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC698Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC698Test.php index e288da5fd6f..77bb6a1ffc3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC698Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC698Test.php @@ -29,7 +29,7 @@ public function testTicket() ->leftJoin('p.roles', 'r'); self::assertSQLEquals( - 'SELECT p0_."privilegeID" AS privilegeID_0, p0_."name" AS name_1, r1_."roleID" AS roleID_2, r1_."name" AS name_3, r1_."shortName" AS shortName_4 FROM "Privileges" p0_ LEFT JOIN "RolePrivileges" r2_ ON p0_."privilegeID" = r2_."privilegeID" LEFT JOIN "Roles" r1_ ON r1_."roleID" = r2_."roleID"', + 'SELECT t0."privilegeID" AS c0, t0."name" AS c1, t1."roleID" AS c2, t1."name" AS c3, t1."shortName" AS c4 FROM "Privileges" t0 LEFT JOIN "RolePrivileges" t2 ON t0."privilegeID" = t2."privilegeID" LEFT JOIN "Roles" t1 ON t1."roleID" = t2."roleID"', $qb->getQuery()->getSQL() ); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php index bdd6250bedb..7ab1f5cea97 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php @@ -24,7 +24,7 @@ public function testIsEmptySqlGeneration() ); self::assertSQLEquals( - 'SELECT g0_."id" AS id_0, g0_."name" AS name_1, g0_."description" AS description_2, g1_."id" AS id_3, g1_."name" AS name_4, g1_."description" AS description_5 FROM "groups" g0_ LEFT JOIN "groups_groups" g2_ ON g0_."id" = g2_."parent_id" LEFT JOIN "groups" g1_ ON g1_."id" = g2_."child_id" WHERE (SELECT COUNT(*) FROM "groups_groups" g3_ WHERE g3_."child_id" = g0_."id") = 0', + 'SELECT t0."id" AS c0, t0."name" AS c1, t0."description" AS c2, t1."id" AS c3, t1."name" AS c4, t1."description" AS c5 FROM "groups" t0 LEFT JOIN "groups_groups" t2 ON t0."id" = t2."parent_id" LEFT JOIN "groups" t1 ON t1."id" = t2."child_id" WHERE (SELECT COUNT(*) FROM "groups_groups" t3 WHERE t3."child_id" = t0."id") = 0', $q->getSQL() ); } diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php index f0804b77a78..baf70144ea5 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php @@ -105,7 +105,7 @@ public function testStripNonAlphanumericCharactersFromSelectColumnListSQL() $method = new \ReflectionMethod($persister, 'getSelectColumnsSQL'); $method->setAccessible(true); - self::assertEquals('t1."simple-entity-id" AS simpleentityid_0, t1."simple-entity-value" AS simpleentityvalue_2', $method->invoke($persister)); + self::assertEquals('t1."simple-entity-id" AS c0, t1."simple-entity-value" AS c2', $method->invoke($persister)); } /** diff --git a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php index 34ae6dc8608..01bf585b7c1 100644 --- a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php +++ b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php @@ -44,7 +44,7 @@ public function testAddsJoin() { self::assertSqlGeneration( 'select u from Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c1_."id" AS id_4, c1_."country" AS country_5, c1_."zip" AS zip_6, c1_."city" AS city_7, c0_."email_id" AS email_id_8, c1_."user_id" AS user_id_9 FROM "cms_users" c0_ LEFT JOIN "cms_addresses" c1_ ON c0_."id" = c1_."user_id"' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3, t1."id" AS c4, t1."country" AS c5, t1."zip" AS c6, t1."city" AS c7, t0."email_id" AS c8, t1."user_id" AS c9 FROM "cms_users" t0 LEFT JOIN "cms_addresses" t1 ON t0."id" = t1."user_id"' ); } @@ -52,7 +52,7 @@ public function testDoesNotAddJoin() { self::assertSqlGeneration( 'select a from Doctrine\Tests\Models\CMS\CmsAddress a', - 'SELECT c0_."id" AS id_0, c0_."country" AS country_1, c0_."zip" AS zip_2, c0_."city" AS city_3, c0_."user_id" AS user_id_4 FROM "cms_addresses" c0_' + 'SELECT t0."id" AS c0, t0."country" AS c1, t0."zip" AS c2, t0."city" AS c3, t0."user_id" AS c4 FROM "cms_addresses" t0' ); } } diff --git a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php index fb33c48d27b..3a3cf1983af 100644 --- a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php +++ b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php @@ -53,7 +53,7 @@ public function testSupportsQueriesWithoutWhere() { $this->assertSqlGeneration( 'select u from Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c0_."email_id" AS email_id_4 FROM "cms_users" c0_ WHERE c0_."id" = 1', + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3, t0."email_id" AS c4 FROM "cms_users" t0 WHERE t0."id" = 1', [CustomTreeWalker::class] ); } @@ -62,7 +62,7 @@ public function testSupportsQueriesWithMultipleConditionalExpressions() { $this->assertSqlGeneration( 'select u from Doctrine\Tests\Models\CMS\CmsUser u where u.name = :name or u.name = :otherName', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c0_."email_id" AS email_id_4 FROM "cms_users" c0_ WHERE (c0_."name" = ? OR c0_."name" = ?) AND c0_."id" = 1', + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3, t0."email_id" AS c4 FROM "cms_users" t0 WHERE (t0."name" = ? OR t0."name" = ?) AND t0."id" = 1', [CustomTreeWalker::class] ); } @@ -71,7 +71,7 @@ public function testSupportsQueriesWithSimpleConditionalExpression() { $this->assertSqlGeneration( 'select u from Doctrine\Tests\Models\CMS\CmsUser u where u.name = :name', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c0_."email_id" AS email_id_4 FROM "cms_users" c0_ WHERE c0_."name" = ? AND c0_."id" = 1', + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3, t0."email_id" AS c4 FROM "cms_users" t0 WHERE t0."name" = ? AND t0."id" = 1', [CustomTreeWalker::class] ); } @@ -92,7 +92,7 @@ public function testSupportsSeveralHintsQueries() { $this->assertSqlGeneration( 'select u from Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c1_."id" AS id_4, c1_."country" AS country_5, c1_."zip" AS zip_6, c1_."city" AS city_7, c0_."email_id" AS email_id_8, c1_."user_id" AS user_id_9 FROM "cms_users" c0_ LEFT JOIN "cms_addresses" c1_ ON c0_."id" = c1_."user_id" WHERE c0_."id" = 1', + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3, t1."id" AS c4, t1."country" AS c5, t1."zip" AS c6, t1."city" AS c7, t0."email_id" AS c8, t1."user_id" AS c9 FROM "cms_users" t0 LEFT JOIN "cms_addresses" t1 ON t0."id" = t1."user_id" WHERE t0."id" = 1', [CustomTreeWalkerJoin::class, CustomTreeWalker::class] ); } diff --git a/tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php index b65e3cf7b98..c27de025a26 100644 --- a/tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php @@ -260,7 +260,7 @@ public function testSubselectTableAliasReferencing() { $this->assertSqlGeneration( 'DELETE Doctrine\Tests\Models\CMS\CmsUser u WHERE SIZE(u.groups) = 10', - 'DELETE FROM "cms_users" WHERE (SELECT COUNT(*) FROM "cms_users_groups" c0_ WHERE c0_."user_id" = "cms_users"."id") = 10' + 'DELETE FROM "cms_users" WHERE (SELECT COUNT(*) FROM "cms_users_groups" t0 WHERE t0."user_id" = "cms_users"."id") = 10' ); } } diff --git a/tests/Doctrine/Tests/ORM/Query/QueryTest.php b/tests/Doctrine/Tests/ORM/Query/QueryTest.php index 2bd4b33d28c..0d59d4f1bb4 100644 --- a/tests/Doctrine/Tests/ORM/Query/QueryTest.php +++ b/tests/Doctrine/Tests/ORM/Query/QueryTest.php @@ -216,7 +216,7 @@ public function testResultCacheCaching() $driverConnectionMock = $this->em->getConnection()->getWrappedConnection(); $stmt = new StatementArrayMock([ [ - 'id_0' => 1, + 'c0' => 1, ] ]); $driverConnectionMock->setStatementMock($stmt); diff --git a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php index b614786589c..e043077298e 100644 --- a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php @@ -109,7 +109,7 @@ public function testJoinWithRangeVariablePutsConditionIntoSqlWhereClause() { $this->assertSqlGeneration( 'SELECT c.id FROM Doctrine\Tests\Models\Company\CompanyPerson c JOIN Doctrine\Tests\Models\Company\CompanyPerson r WHERE c.spouse = r AND r.id = 42', - 'SELECT c0_."id" AS id_0 FROM "company_persons" c0_ INNER JOIN "company_persons" c1_ WHERE c0_."spouse_id" = c1_."id" AND c1_."id" = 42', + 'SELECT t0."id" AS c0 FROM "company_persons" t0 INNER JOIN "company_persons" t1 WHERE t0."spouse_id" = t1."id" AND t1."id" = 42', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] ); } @@ -126,7 +126,7 @@ public function testJoinWithRangeVariableAndInheritancePutsConditionIntoSqlWhere */ $this->assertSqlGeneration( 'SELECT c.id FROM Doctrine\Tests\Models\Company\CompanyPerson c JOIN Doctrine\Tests\Models\Company\CompanyPerson r WHERE c.spouse = r AND r.id = 42', - 'SELECT c0_."id" AS id_0 FROM "company_persons" c0_ LEFT JOIN "company_managers" c1_ ON c0_."id" = c1_."id" LEFT JOIN "company_employees" c2_ ON c0_."id" = c2_."id" INNER JOIN "company_persons" c3_ LEFT JOIN "company_managers" c4_ ON c3_."id" = c4_."id" LEFT JOIN "company_employees" c5_ ON c3_."id" = c5_."id" WHERE c0_."spouse_id" = c3_."id" AND c3_."id" = 42', + 'SELECT t0."id" AS c0 FROM "company_persons" t0 LEFT JOIN "company_managers" t1 ON t0."id" = t1."id" LEFT JOIN "company_employees" t2 ON t0."id" = t2."id" INNER JOIN "company_persons" t3 LEFT JOIN "company_managers" t4 ON t3."id" = t4."id" LEFT JOIN "company_employees" t5 ON t3."id" = t5."id" WHERE t0."spouse_id" = t3."id" AND t3."id" = 42', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] ); } @@ -135,7 +135,7 @@ public function testSupportsSelectForAllFields() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0' ); } @@ -143,7 +143,7 @@ public function testSupportsSelectForOneField() { $this->assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT c0_."id" AS id_0 FROM "cms_users" c0_' + 'SELECT t0."id" AS c0 FROM "cms_users" t0' ); } @@ -151,7 +151,7 @@ public function testSupportsSelectForOneNestedField() { $this->assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsArticle a JOIN a.user u', - 'SELECT c0_."id" AS id_0 FROM "cms_articles" c1_ INNER JOIN "cms_users" c0_ ON c1_."user_id" = c0_."id"' + 'SELECT t0."id" AS c0 FROM "cms_articles" t1 INNER JOIN "cms_users" t0 ON t1."user_id" = t0."id"' ); } @@ -159,7 +159,7 @@ public function testSupportsSelectForAllNestedField() { $this->assertSqlGeneration( 'SELECT a FROM Doctrine\Tests\Models\CMS\CmsArticle a JOIN a.user u ORDER BY u.name ASC', - 'SELECT c0_."id" AS id_0, c0_."topic" AS topic_1, c0_."text" AS text_2, c0_."version" AS version_3 FROM "cms_articles" c0_ INNER JOIN "cms_users" c1_ ON c0_."user_id" = c1_."id" ORDER BY c1_."name" ASC' + 'SELECT t0."id" AS c0, t0."topic" AS c1, t0."text" AS c2, t0."version" AS c3 FROM "cms_articles" t0 INNER JOIN "cms_users" t1 ON t0."user_id" = t1."id" ORDER BY t1."name" ASC' ); } @@ -167,7 +167,7 @@ public function testNotExistsExpression() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE NOT EXISTS (SELECT p.phonenumber FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.phonenumber = 1234)', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE NOT EXISTS (SELECT c1_."phonenumber" FROM "cms_phonenumbers" c1_ WHERE c1_."phonenumber" = 1234)' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE NOT EXISTS (SELECT t1."phonenumber" FROM "cms_phonenumbers" t1 WHERE t1."phonenumber" = 1234)' ); } @@ -175,7 +175,7 @@ public function testSupportsSelectForMultipleColumnsOfASingleComponent() { $this->assertSqlGeneration( 'SELECT u.username, u.name FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT c0_."username" AS username_0, c0_."name" AS name_1 FROM "cms_users" c0_' + 'SELECT t0."username" AS c0, t0."name" AS c1 FROM "cms_users" t0' ); } @@ -183,7 +183,7 @@ public function testSupportsSelectUsingMultipleFromComponents() { $this->assertSqlGeneration( 'SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u, Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE u = p.user', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c1_."phonenumber" AS phonenumber_4 FROM "cms_users" c0_, "cms_phonenumbers" c1_ WHERE c0_."id" = c1_."user_id"' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3, t1."phonenumber" AS c4 FROM "cms_users" t0, "cms_phonenumbers" t1 WHERE t0."id" = t1."user_id"' ); } @@ -191,7 +191,7 @@ public function testSupportsJoinOnMultipleComponents() { $this->assertSqlGeneration( 'SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN Doctrine\Tests\Models\CMS\CmsPhonenumber p WITH u = p.user', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c1_."phonenumber" AS phonenumber_4 FROM "cms_users" c0_ INNER JOIN "cms_phonenumbers" c1_ ON (c0_."id" = c1_."user_id")' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3, t1."phonenumber" AS c4 FROM "cms_users" t0 INNER JOIN "cms_phonenumbers" t1 ON (t0."id" = t1."user_id")' ); } @@ -199,12 +199,12 @@ public function testSupportsJoinOnMultipleComponentsWithJoinedInheritanceType() { $this->assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\Company\CompanyEmployee e JOIN Doctrine\Tests\Models\Company\CompanyManager m WITH e.id = m.id', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, c0_."discr" AS discr_5 FROM "company_employees" c1_ INNER JOIN "company_persons" c0_ ON c1_."id" = c0_."id" INNER JOIN "company_managers" c2_ INNER JOIN "company_employees" c4_ ON c2_."id" = c4_."id" INNER JOIN "company_persons" c3_ ON c2_."id" = c3_."id" AND (c0_."id" = c3_."id")' + 'SELECT t0."id" AS c0, t0."name" AS c1, t1."salary" AS c2, t1."department" AS c3, t1."startDate" AS c4, t0."discr" AS c5 FROM "company_employees" t1 INNER JOIN "company_persons" t0 ON t1."id" = t0."id" INNER JOIN "company_managers" t2 INNER JOIN "company_employees" t4 ON t2."id" = t4."id" INNER JOIN "company_persons" t3 ON t2."id" = t3."id" AND (t0."id" = t3."id")' ); $this->assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\Company\CompanyEmployee e LEFT JOIN Doctrine\Tests\Models\Company\CompanyManager m WITH e.id = m.id', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, c0_."discr" AS discr_5 FROM "company_employees" c1_ INNER JOIN "company_persons" c0_ ON c1_."id" = c0_."id" LEFT JOIN "company_managers" c2_ INNER JOIN "company_employees" c4_ ON c2_."id" = c4_."id" INNER JOIN "company_persons" c3_ ON c2_."id" = c3_."id" ON (c0_."id" = c3_."id")' + 'SELECT t0."id" AS c0, t0."name" AS c1, t1."salary" AS c2, t1."department" AS c3, t1."startDate" AS c4, t0."discr" AS c5 FROM "company_employees" t1 INNER JOIN "company_persons" t0 ON t1."id" = t0."id" LEFT JOIN "company_managers" t2 INNER JOIN "company_employees" t4 ON t2."id" = t4."id" INNER JOIN "company_persons" t3 ON t2."id" = t3."id" ON (t0."id" = t3."id")' ); } @@ -212,7 +212,7 @@ public function testSupportsSelectWithCollectionAssociationJoin() { $this->assertSqlGeneration( 'SELECT u, p FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.phonenumbers p', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c1_."phonenumber" AS phonenumber_4 FROM "cms_users" c0_ INNER JOIN "cms_phonenumbers" c1_ ON c0_."id" = c1_."user_id"' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3, t1."phonenumber" AS c4 FROM "cms_users" t0 INNER JOIN "cms_phonenumbers" t1 ON t0."id" = t1."user_id"' ); } @@ -220,7 +220,7 @@ public function testSupportsSelectWithSingleValuedAssociationJoin() { $this->assertSqlGeneration( 'SELECT u, a FROM Doctrine\Tests\Models\Forum\ForumUser u JOIN u.avatar a', - 'SELECT f0_."id" AS id_0, f0_."username" AS username_1, f1_."id" AS id_2 FROM "forum_users" f0_ INNER JOIN "forum_avatars" f1_ ON f0_."avatar_id" = f1_."id"' + 'SELECT t0."id" AS c0, t0."username" AS c1, t1."id" AS c2 FROM "forum_users" t0 INNER JOIN "forum_avatars" t1 ON t0."avatar_id" = t1."id"' ); } @@ -228,7 +228,7 @@ public function testSelectCorrelatedSubqueryComplexMathematicalExpression() { $this->assertSqlGeneration( 'SELECT (SELECT (count(p.phonenumber)+5)*10 FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p JOIN p.user ui WHERE ui.id = u.id) AS c FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT (SELECT (count(c0_."phonenumber") + 5) * 10 AS sclr_1 FROM "cms_phonenumbers" c0_ INNER JOIN "cms_users" c1_ ON c0_."user_id" = c1_."id" WHERE c1_."id" = c2_."id") AS sclr_0 FROM "cms_users" c2_' + 'SELECT (SELECT (count(t0."phonenumber") + 5) * 10 AS c1 FROM "cms_phonenumbers" t0 INNER JOIN "cms_users" t1 ON t0."user_id" = t1."id" WHERE t1."id" = t2."id") AS c0 FROM "cms_users" t2' ); } @@ -236,7 +236,7 @@ public function testSelectComplexMathematicalExpression() { $this->assertSqlGeneration( 'SELECT (count(p.phonenumber)+5)*10 FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p JOIN p.user ui WHERE ui.id = ?1', - 'SELECT (count(c0_."phonenumber") + 5) * 10 AS sclr_0 FROM "cms_phonenumbers" c0_ INNER JOIN "cms_users" c1_ ON c0_."user_id" = c1_."id" WHERE c1_."id" = ?' + 'SELECT (count(t0."phonenumber") + 5) * 10 AS c0 FROM "cms_phonenumbers" t0 INNER JOIN "cms_users" t1 ON t0."user_id" = t1."id" WHERE t1."id" = ?' ); } @@ -247,7 +247,7 @@ public function testSingleAssociationPathExpressionInSubselect() { $this->assertSqlGeneration( 'SELECT (SELECT p.user FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.user = u) user_id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1', - 'SELECT (SELECT c0_."user_id" FROM "cms_phonenumbers" c0_ WHERE c0_."user_id" = c1_."id") AS sclr_0 FROM "cms_users" c1_ WHERE c1_."id" = ?' + 'SELECT (SELECT t0."user_id" FROM "cms_phonenumbers" t0 WHERE t0."user_id" = t1."id") AS c0 FROM "cms_users" t1 WHERE t1."id" = ?' ); }*/ @@ -258,7 +258,7 @@ public function testConstantValueInSelect() { $this->assertSqlGeneration( 'SELECT u.name, \'foo\' AS bar FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT c0_."name" AS name_0, \'foo\' AS sclr_1 FROM "cms_users" c0_' + 'SELECT t0."name" AS c0, \'foo\' AS c1 FROM "cms_users" t0' ); } @@ -266,7 +266,7 @@ public function testSupportsOrderByWithAscAsDefault() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Forum\ForumUser u ORDER BY u.id', - 'SELECT f0_."id" AS id_0, f0_."username" AS username_1 FROM "forum_users" f0_ ORDER BY f0_."id" ASC' + 'SELECT t0."id" AS c0, t0."username" AS c1 FROM "forum_users" t0 ORDER BY t0."id" ASC' ); } @@ -274,14 +274,14 @@ public function testSupportsOrderByAsc() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Forum\ForumUser u ORDER BY u.id asc', - 'SELECT f0_."id" AS id_0, f0_."username" AS username_1 FROM "forum_users" f0_ ORDER BY f0_."id" ASC' + 'SELECT t0."id" AS c0, t0."username" AS c1 FROM "forum_users" t0 ORDER BY t0."id" ASC' ); } public function testSupportsOrderByDesc() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Forum\ForumUser u ORDER BY u.id desc', - 'SELECT f0_."id" AS id_0, f0_."username" AS username_1 FROM "forum_users" f0_ ORDER BY f0_."id" DESC' + 'SELECT t0."id" AS c0, t0."username" AS c1 FROM "forum_users" t0 ORDER BY t0."id" DESC' ); } @@ -289,7 +289,7 @@ public function testSupportsSelectDistinct() { $this->assertSqlGeneration( 'SELECT DISTINCT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT DISTINCT c0_."name" AS name_0 FROM "cms_users" c0_' + 'SELECT DISTINCT t0."name" AS c0 FROM "cms_users" t0' ); } @@ -297,7 +297,7 @@ public function testSupportsAggregateFunctionInSelectedFields() { $this->assertSqlGeneration( 'SELECT COUNT(u.id) FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY u.id', - 'SELECT COUNT(c0_."id") AS sclr_0 FROM "cms_users" c0_ GROUP BY c0_."id"' + 'SELECT COUNT(t0."id") AS c0 FROM "cms_users" t0 GROUP BY t0."id"' ); } @@ -305,7 +305,7 @@ public function testSupportsAggregateFunctionWithSimpleArithmetic() { $this->assertSqlGeneration( 'SELECT MAX(u.id + 4) * 2 FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT MAX(c0_."id" + 4) * 2 AS sclr_0 FROM "cms_users" c0_' + 'SELECT MAX(t0."id" + 4) * 2 AS c0 FROM "cms_users" t0' ); } @@ -318,7 +318,7 @@ public function testSupportsAggregateCountFunctionWithSimpleArithmeticMySql() $this->assertSqlGeneration( 'SELECT COUNT(CONCAT(u.id, u.name)) FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY u.id', - 'SELECT COUNT(CONCAT(c0_.`id`, c0_.`name`)) AS sclr_0 FROM `cms_users` c0_ GROUP BY c0_.`id`' + 'SELECT COUNT(CONCAT(t0.`id`, t0.`name`)) AS c0 FROM `cms_users` t0 GROUP BY t0.`id`' ); } @@ -326,7 +326,7 @@ public function testSupportsWhereClauseWithPositionalParameter() { $this->assertSqlGeneration( 'select u from Doctrine\Tests\Models\Forum\ForumUser u where u.id = ?1', - 'SELECT f0_."id" AS id_0, f0_."username" AS username_1 FROM "forum_users" f0_ WHERE f0_."id" = ?' + 'SELECT t0."id" AS c0, t0."username" AS c1 FROM "forum_users" t0 WHERE t0."id" = ?' ); } @@ -334,7 +334,7 @@ public function testSupportsWhereClauseWithNamedParameter() { $this->assertSqlGeneration( 'select u from Doctrine\Tests\Models\Forum\ForumUser u where u.username = :name', - 'SELECT f0_."id" AS id_0, f0_."username" AS username_1 FROM "forum_users" f0_ WHERE f0_."username" = ?' + 'SELECT t0."id" AS c0, t0."username" AS c1 FROM "forum_users" t0 WHERE t0."username" = ?' ); } @@ -342,7 +342,7 @@ public function testSupportsWhereAndClauseWithNamedParameters() { $this->assertSqlGeneration( 'select u from Doctrine\Tests\Models\Forum\ForumUser u where u.username = :name and u.username = :name2', - 'SELECT f0_."id" AS id_0, f0_."username" AS username_1 FROM "forum_users" f0_ WHERE f0_."username" = ? AND f0_."username" = ?' + 'SELECT t0."id" AS c0, t0."username" AS c1 FROM "forum_users" t0 WHERE t0."username" = ? AND t0."username" = ?' ); } @@ -350,7 +350,7 @@ public function testSupportsCombinedWhereClauseWithNamedParameter() { $this->assertSqlGeneration( 'select u from Doctrine\Tests\Models\Forum\ForumUser u where (u.username = :name OR u.username = :name2) AND u.id = :id', - 'SELECT f0_."id" AS id_0, f0_."username" AS username_1 FROM "forum_users" f0_ WHERE (f0_."username" = ? OR f0_."username" = ?) AND f0_."id" = ?' + 'SELECT t0."id" AS c0, t0."username" AS c1 FROM "forum_users" t0 WHERE (t0."username" = ? OR t0."username" = ?) AND t0."id" = ?' ); } @@ -358,7 +358,7 @@ public function testSupportsAggregateFunctionInASelectDistinct() { $this->assertSqlGeneration( 'SELECT COUNT(DISTINCT u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT COUNT(DISTINCT c0_."name") AS sclr_0 FROM "cms_users" c0_' + 'SELECT COUNT(DISTINCT t0."name") AS c0 FROM "cms_users" t0' ); } @@ -367,7 +367,7 @@ public function testSupportsASqlKeywordInAStringLiteralParam() { $this->assertSqlGeneration( 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name LIKE \'%foo OR bar%\'', - 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE c0_."name" LIKE \'%foo OR bar%\'' + 'SELECT t0."name" AS c0 FROM "cms_users" t0 WHERE t0."name" LIKE \'%foo OR bar%\'' ); } @@ -375,7 +375,7 @@ public function testSupportsArithmeticExpressionsInWherePart() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE ((u.id + 5000) * u.id + 3) < 10000000', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE ((c0_."id" + 5000) * c0_."id" + 3) < 10000000' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE ((t0."id" + 5000) * t0."id" + 3) < 10000000' ); } @@ -383,7 +383,7 @@ public function testSupportsMultipleEntitiesInFromClause() { $this->assertSqlGeneration( 'SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u, Doctrine\Tests\Models\CMS\CmsArticle a JOIN a.user u2 WHERE u.id = u2.id', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c1_."id" AS id_4, c1_."topic" AS topic_5, c1_."text" AS text_6, c1_."version" AS version_7 FROM "cms_users" c0_, "cms_articles" c1_ INNER JOIN "cms_users" c2_ ON c1_."user_id" = c2_."id" WHERE c0_."id" = c2_."id"' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3, t1."id" AS c4, t1."topic" AS c5, t1."text" AS c6, t1."version" AS c7 FROM "cms_users" t0, "cms_articles" t1 INNER JOIN "cms_users" t2 ON t1."user_id" = t2."id" WHERE t0."id" = t2."id"' ); } @@ -391,7 +391,7 @@ public function testSupportsMultipleEntitiesInFromClauseUsingPathExpression() { $this->assertSqlGeneration( 'SELECT u, a FROM Doctrine\Tests\Models\CMS\CmsUser u, Doctrine\Tests\Models\CMS\CmsArticle a WHERE u.id = a.user', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c1_."id" AS id_4, c1_."topic" AS topic_5, c1_."text" AS text_6, c1_."version" AS version_7 FROM "cms_users" c0_, "cms_articles" c1_ WHERE c0_."id" = c1_."user_id"' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3, t1."id" AS c4, t1."topic" AS c5, t1."text" AS c6, t1."version" AS c7 FROM "cms_users" t0, "cms_articles" t1 WHERE t0."id" = t1."user_id"' ); } @@ -399,12 +399,12 @@ public function testSupportsPlainJoinWithoutClause() { $this->assertSqlGeneration( 'SELECT u.id, a.id from Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a', - 'SELECT c0_."id" AS id_0, c1_."id" AS id_1 FROM "cms_users" c0_ LEFT JOIN "cms_articles" c1_ ON c0_."id" = c1_."user_id"' + 'SELECT t0."id" AS c0, t1."id" AS c1 FROM "cms_users" t0 LEFT JOIN "cms_articles" t1 ON t0."id" = t1."user_id"' ); $this->assertSqlGeneration( 'SELECT u.id, a.id from Doctrine\Tests\Models\CMS\CmsUser u JOIN u.articles a', - 'SELECT c0_."id" AS id_0, c1_."id" AS id_1 FROM "cms_users" c0_ INNER JOIN "cms_articles" c1_ ON c0_."id" = c1_."user_id"' + 'SELECT t0."id" AS c0, t1."id" AS c1 FROM "cms_users" t0 INNER JOIN "cms_articles" t1 ON t0."id" = t1."user_id"' ); } @@ -415,7 +415,7 @@ public function testSupportsLeftJoinAndWithClauseRestriction() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a WITH a.topic LIKE \'%foo%\'', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ LEFT JOIN "cms_articles" c1_ ON c0_."id" = c1_."user_id" AND (c1_."topic" LIKE \'%foo%\')' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 LEFT JOIN "cms_articles" t1 ON t0."id" = t1."user_id" AND (t1."topic" LIKE \'%foo%\')' ); } @@ -426,7 +426,7 @@ public function testSupportsInnerJoinAndWithClauseRestriction() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u INNER JOIN u.articles a WITH a.topic LIKE \'%foo%\'', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ INNER JOIN "cms_articles" c1_ ON c0_."id" = c1_."user_id" AND (c1_."topic" LIKE \'%foo%\')' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 INNER JOIN "cms_articles" t1 ON t0."id" = t1."user_id" AND (t1."topic" LIKE \'%foo%\')' ); } @@ -449,7 +449,7 @@ public function testSupportsMultipleJoins() { $this->assertSqlGeneration( 'SELECT u.id, a.id, p.phonenumber, c.id from Doctrine\Tests\Models\CMS\CmsUser u JOIN u.articles a JOIN u.phonenumbers p JOIN a.comments c', - 'SELECT c0_."id" AS id_0, c1_."id" AS id_1, c2_."phonenumber" AS phonenumber_2, c3_."id" AS id_3 FROM "cms_users" c0_ INNER JOIN "cms_articles" c1_ ON c0_."id" = c1_."user_id" INNER JOIN "cms_phonenumbers" c2_ ON c0_."id" = c2_."user_id" INNER JOIN "cms_comments" c3_ ON c1_."id" = c3_."article_id"' + 'SELECT t0."id" AS c0, t1."id" AS c1, t2."phonenumber" AS c2, t3."id" AS c3 FROM "cms_users" t0 INNER JOIN "cms_articles" t1 ON t0."id" = t1."user_id" INNER JOIN "cms_phonenumbers" t2 ON t0."id" = t2."user_id" INNER JOIN "cms_comments" t3 ON t1."id" = t3."article_id"' ); } @@ -457,7 +457,7 @@ public function testSupportsTrimFunction() { $this->assertSqlGeneration( 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE TRIM(TRAILING \' \' FROM u.name) = \'someone\'', - 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE TRIM(TRAILING \' \' FROM c0_."name") = \'someone\'' + 'SELECT t0."name" AS c0 FROM "cms_users" t0 WHERE TRIM(TRAILING \' \' FROM t0."name") = \'someone\'' ); } @@ -468,7 +468,7 @@ public function testSupportsTrimLeadingZeroString() { $this->assertSqlGeneration( 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE TRIM(TRAILING \'0\' FROM u.name) != \'\'', - 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE TRIM(TRAILING \'0\' FROM c0_."name") <> \'\'' + 'SELECT t0."name" AS c0 FROM "cms_users" t0 WHERE TRIM(TRAILING \'0\' FROM t0."name") <> \'\'' ); } @@ -477,7 +477,7 @@ public function testSupportsBetweenClauseWithPositionalParameters() { $this->assertSqlGeneration( 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id BETWEEN ?1 AND ?2', - 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE c0_."id" BETWEEN ? AND ?' + 'SELECT t0."name" AS c0 FROM "cms_users" t0 WHERE t0."id" BETWEEN ? AND ?' ); } @@ -488,7 +488,7 @@ public function testSupportsNotBetweenForSizeFunction() { $this->assertSqlGeneration( 'SELECT m.name FROM Doctrine\Tests\Models\StockExchange\Market m WHERE SIZE(m.stocks) NOT BETWEEN ?1 AND ?2', - 'SELECT e0_."name" AS name_0 FROM "exchange_markets" e0_ WHERE (SELECT COUNT(*) FROM "exchange_stocks" e1_ WHERE e1_."market_id" = e0_."id") NOT BETWEEN ? AND ?' + 'SELECT t0."name" AS c0 FROM "exchange_markets" t0 WHERE (SELECT COUNT(*) FROM "exchange_stocks" t1 WHERE t1."market_id" = t0."id") NOT BETWEEN ? AND ?' ); } @@ -498,7 +498,7 @@ public function testSupportsFunctionalExpressionsInWherePart() 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE TRIM(u.name) = \'someone\'', // String quoting in the SQL usually depends on the database platform. // This test works with a mock connection which uses ' for string quoting. - 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE TRIM(c0_."name") = \'someone\'' + 'SELECT t0."name" AS c0 FROM "cms_users" t0 WHERE TRIM(t0."name") = \'someone\'' ); } @@ -506,7 +506,7 @@ public function testSupportsInstanceOfExpressionsInWherePart() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF Doctrine\Tests\Models\Company\CompanyEmployee', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c0_."discr" AS discr_2 FROM "company_persons" c0_ WHERE c0_."discr" IN (\'employee\')' + 'SELECT t0."id" AS c0, t0."name" AS c1, t0."discr" AS c2 FROM "company_persons" t0 WHERE t0."discr" IN (\'employee\')' ); } @@ -515,7 +515,7 @@ public function testSupportsInstanceOfExpressionInWherePartWithMultipleValues() // This also uses FQCNs starting with or without a backslash in the INSTANCE OF parameter $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF (Doctrine\Tests\Models\Company\CompanyEmployee, \Doctrine\Tests\Models\Company\CompanyManager)', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c0_."discr" AS discr_2 FROM "company_persons" c0_ WHERE c0_."discr" IN (\'employee\', \'manager\')' + 'SELECT t0."id" AS c0, t0."name" AS c1, t0."discr" AS c2 FROM "company_persons" t0 WHERE t0."discr" IN (\'employee\', \'manager\')' ); } @@ -526,7 +526,7 @@ public function testSupportsInstanceOfExpressionsInWherePartPrefixedSlash() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF \Doctrine\Tests\Models\Company\CompanyEmployee', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c0_."discr" AS discr_2 FROM "company_persons" c0_ WHERE c0_."discr" IN (\'employee\')' + 'SELECT t0."id" AS c0, t0."name" AS c1, t0."discr" AS c2 FROM "company_persons" t0 WHERE t0."discr" IN (\'employee\')' ); } @@ -545,7 +545,7 @@ public function testSupportsInstanceOfExpressionsInWherePartInDeeperLevel() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Company\CompanyEmployee u WHERE u INSTANCE OF Doctrine\Tests\Models\Company\CompanyManager', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, c0_."discr" AS discr_5 FROM "company_employees" c1_ INNER JOIN "company_persons" c0_ ON c1_."id" = c0_."id" WHERE c0_."discr" IN (\'manager\')' + 'SELECT t0."id" AS c0, t0."name" AS c1, t1."salary" AS c2, t1."department" AS c3, t1."startDate" AS c4, t0."discr" AS c5 FROM "company_employees" t1 INNER JOIN "company_persons" t0 ON t1."id" = t0."id" WHERE t0."discr" IN (\'manager\')' ); } @@ -553,7 +553,7 @@ public function testSupportsInstanceOfExpressionsInWherePartInDeepestLevel() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Company\CompanyManager u WHERE u INSTANCE OF Doctrine\Tests\Models\Company\CompanyManager', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, c2_."title" AS title_5, c0_."discr" AS discr_6 FROM "company_managers" c2_ INNER JOIN "company_employees" c1_ ON c2_."id" = c1_."id" INNER JOIN "company_persons" c0_ ON c2_."id" = c0_."id" WHERE c0_."discr" IN (\'manager\')' + 'SELECT t0."id" AS c0, t0."name" AS c1, t1."salary" AS c2, t1."department" AS c3, t1."startDate" AS c4, t2."title" AS c5, t0."discr" AS c6 FROM "company_managers" t2 INNER JOIN "company_employees" t1 ON t2."id" = t1."id" INNER JOIN "company_persons" t0 ON t2."id" = t0."id" WHERE t0."discr" IN (\'manager\')' ); } @@ -561,7 +561,7 @@ public function testSupportsInstanceOfExpressionsUsingInputParameterInWherePart( { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF ?1', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c0_."discr" AS discr_2 FROM "company_persons" c0_ WHERE c0_."discr" IN (?)', + 'SELECT t0."id" AS c0, t0."name" AS c1, t0."discr" AS c2 FROM "company_persons" t0 WHERE t0."discr" IN (?)', [], [1 => $this->em->getClassMetadata(CompanyEmployee::class)] ); } @@ -571,7 +571,7 @@ public function testSupportsSingleValuedInExpressionWithoutSpacesInWherePart() { $this->assertSqlGeneration( 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE IDENTITY(u.email) IN(46)', - 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE c0_."email_id" IN (46)' + 'SELECT t0."name" AS c0 FROM "cms_users" t0 WHERE t0."email_id" IN (46)' ); } @@ -579,7 +579,7 @@ public function testSupportsMultipleValuedInExpressionInWherePart() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id IN (1, 2)', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."id" IN (1, 2)' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE t0."id" IN (1, 2)' ); } @@ -587,7 +587,7 @@ public function testSupportsNotInExpressionInWherePart() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE :id NOT IN (1)', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE ? NOT IN (1)' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE ? NOT IN (1)' ); } @@ -598,7 +598,7 @@ public function testSupportsNotInExpressionForModFunction() { $this->assertSqlGeneration( 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE MOD(u.id, 5) NOT IN(1,3,4)', - 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE MOD(c0_."id", 5) NOT IN (1, 3, 4)' + 'SELECT t0."name" AS c0 FROM "cms_users" t0 WHERE MOD(t0."id", 5) NOT IN (1, 3, 4)' ); } @@ -606,7 +606,7 @@ public function testInExpressionWithSingleValuedAssociationPathExpressionInWhere { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Forum\ForumUser u WHERE u.avatar IN (?1, ?2)', - 'SELECT f0_."id" AS id_0, f0_."username" AS username_1 FROM "forum_users" f0_ WHERE f0_."avatar_id" IN (?, ?)' + 'SELECT t0."id" AS c0, t0."username" AS c1 FROM "forum_users" t0 WHERE t0."avatar_id" IN (?, ?)' ); } @@ -625,12 +625,12 @@ public function testSupportsConcatFunctionMysql() $this->assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, \'s\') = ?1', - 'SELECT c0_.`id` AS id_0 FROM `cms_users` c0_ WHERE CONCAT(c0_.`name`, \'s\') = ?' + 'SELECT t0.`id` AS c0 FROM `cms_users` t0 WHERE CONCAT(t0.`name`, \'s\') = ?' ); $this->assertSqlGeneration( 'SELECT CONCAT(u.id, u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1', - 'SELECT CONCAT(c0_.`id`, c0_.`name`) AS sclr_0 FROM `cms_users` c0_ WHERE c0_.`id` = ?' + 'SELECT CONCAT(t0.`id`, t0.`name`) AS c0 FROM `cms_users` t0 WHERE t0.`id` = ?' ); } @@ -640,12 +640,12 @@ public function testSupportsConcatFunctionPgSql() $this->assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, \'s\') = ?1', - 'SELECT c0_."id" AS id_0 FROM "cms_users" c0_ WHERE c0_."name" || \'s\' = ?' + 'SELECT t0."id" AS c0 FROM "cms_users" t0 WHERE t0."name" || \'s\' = ?' ); $this->assertSqlGeneration( 'SELECT CONCAT(u.id, u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1', - 'SELECT c0_."id" || c0_."name" AS sclr_0 FROM "cms_users" c0_ WHERE c0_."id" = ?' + 'SELECT t0."id" || t0."name" AS c0 FROM "cms_users" t0 WHERE t0."id" = ?' ); } @@ -653,7 +653,7 @@ public function testSupportsExistsExpressionInWherePartWithCorrelatedSubquery() { $this->assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE EXISTS (SELECT p.phonenumber FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.phonenumber = u.id)', - 'SELECT c0_."id" AS id_0 FROM "cms_users" c0_ WHERE EXISTS (SELECT c1_."phonenumber" FROM "cms_phonenumbers" c1_ WHERE c1_."phonenumber" = c0_."id")' + 'SELECT t0."id" AS c0 FROM "cms_users" t0 WHERE EXISTS (SELECT t1."phonenumber" FROM "cms_phonenumbers" t1 WHERE t1."phonenumber" = t0."id")' ); } @@ -664,7 +664,7 @@ public function testSubqueriesInComparisonExpression() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE (u.id >= (SELECT u2.id FROM Doctrine\Tests\Models\CMS\CmsUser u2 WHERE u2.name = :name)) AND (u.id <= (SELECT u3.id FROM Doctrine\Tests\Models\CMS\CmsUser u3 WHERE u3.name = :name))', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE (c0_."id" >= (SELECT c1_."id" FROM "cms_users" c1_ WHERE c1_."name" = ?)) AND (c0_."id" <= (SELECT c2_."id" FROM "cms_users" c2_ WHERE c2_."name" = ?))' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE (t0."id" >= (SELECT t1."id" FROM "cms_users" t1 WHERE t1."name" = ?)) AND (t0."id" <= (SELECT t2."id" FROM "cms_users" t2 WHERE t2."name" = ?))' ); } @@ -680,7 +680,7 @@ public function testSupportsMemberOfExpressionOneToMany() $q->setParameter('param', $phone); self::assertEquals( - 'SELECT c0_."id" AS id_0 FROM "cms_users" c0_ WHERE EXISTS (SELECT 1 FROM "cms_phonenumbers" c1_ WHERE c0_."id" = c1_."user_id" AND c1_."phonenumber" = ?)', + 'SELECT t0."id" AS c0 FROM "cms_users" t0 WHERE EXISTS (SELECT 1 FROM "cms_phonenumbers" t1 WHERE t0."id" = t1."user_id" AND t1."phonenumber" = ?)', $q->getSql() ); } @@ -697,7 +697,7 @@ public function testSupportsMemberOfExpressionManyToMany() $q->setParameter('param', $group); self::assertEquals( - 'SELECT c0_."id" AS id_0 FROM "cms_users" c0_ WHERE EXISTS (SELECT 1 FROM "cms_users_groups" c1_ INNER JOIN "cms_groups" c2_ ON c1_."group_id" = c2_."id" WHERE c1_."user_id" = c0_."id" AND c2_."id" = ?)', + 'SELECT t0."id" AS c0 FROM "cms_users" t0 WHERE EXISTS (SELECT 1 FROM "cms_users_groups" t1 INNER JOIN "cms_groups" t2 ON t1."group_id" = t2."id" WHERE t1."user_id" = t0."id" AND t2."id" = ?)', $q->getSql() ); } @@ -714,7 +714,7 @@ public function testSupportsMemberOfExpressionManyToManyParameterArray() $q->setParameter('param', [$group, $group2]); self::assertEquals( - 'SELECT c0_."id" AS id_0 FROM "cms_users" c0_ WHERE EXISTS (SELECT 1 FROM "cms_users_groups" c1_ INNER JOIN "cms_groups" c2_ ON c1_."group_id" = c2_."id" WHERE c1_."user_id" = c0_."id" AND c2_."id" = ?)', + 'SELECT t0."id" AS c0 FROM "cms_users" t0 WHERE EXISTS (SELECT 1 FROM "cms_users_groups" t1 INNER JOIN "cms_groups" t2 ON t1."group_id" = t2."id" WHERE t1."user_id" = t0."id" AND t2."id" = ?)', $q->getSql() ); } @@ -732,7 +732,7 @@ public function testSupportsMemberOfExpressionSelfReferencing() $q->setParameter('param', $person); self::assertEquals( - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."title" AS title_2, c2_."salary" AS salary_3, c2_."department" AS department_4, c2_."startDate" AS startDate_5, c0_."discr" AS discr_6, c0_."spouse_id" AS spouse_id_7, c1_."car_id" AS car_id_8 FROM "company_persons" c0_ LEFT JOIN "company_managers" c1_ ON c0_."id" = c1_."id" LEFT JOIN "company_employees" c2_ ON c0_."id" = c2_."id" WHERE EXISTS (SELECT 1 FROM "company_persons_friends" c3_ INNER JOIN "company_persons" c4_ ON c3_."friend_id" = c4_."id" WHERE c3_."person_id" = c0_."id" AND c4_."id" = ?)', + 'SELECT t0."id" AS c0, t0."name" AS c1, t1."title" AS c2, t2."salary" AS c3, t2."department" AS c4, t2."startDate" AS c5, t0."discr" AS c6, t0."spouse_id" AS c7, t1."car_id" AS c8 FROM "company_persons" t0 LEFT JOIN "company_managers" t1 ON t0."id" = t1."id" LEFT JOIN "company_employees" t2 ON t0."id" = t2."id" WHERE EXISTS (SELECT 1 FROM "company_persons_friends" t3 INNER JOIN "company_persons" t4 ON t3."friend_id" = t4."id" WHERE t3."person_id" = t0."id" AND t4."id" = ?)', $q->getSql() ); } @@ -742,7 +742,7 @@ public function testSupportsMemberOfWithSingleValuedAssociation() // Impossible example, but it illustrates the purpose $this->assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.email MEMBER OF u.groups', - 'SELECT c0_."id" AS id_0 FROM "cms_users" c0_ WHERE EXISTS (SELECT 1 FROM "cms_users_groups" c1_ INNER JOIN "cms_groups" c2_ ON c1_."group_id" = c2_."id" WHERE c1_."user_id" = c0_."id" AND c2_."id" = c0_."email_id")' + 'SELECT t0."id" AS c0 FROM "cms_users" t0 WHERE EXISTS (SELECT 1 FROM "cms_users_groups" t1 INNER JOIN "cms_groups" t2 ON t1."group_id" = t2."id" WHERE t1."user_id" = t0."id" AND t2."id" = t0."email_id")' ); } @@ -751,7 +751,7 @@ public function testSupportsMemberOfWithIdentificationVariable() // Impossible example, but it illustrates the purpose $this->assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u MEMBER OF u.groups', - 'SELECT c0_."id" AS id_0 FROM "cms_users" c0_ WHERE EXISTS (SELECT 1 FROM "cms_users_groups" c1_ INNER JOIN "cms_groups" c2_ ON c1_."group_id" = c2_."id" WHERE c1_."user_id" = c0_."id" AND c2_."id" = c0_."id")' + 'SELECT t0."id" AS c0 FROM "cms_users" t0 WHERE EXISTS (SELECT 1 FROM "cms_users_groups" t1 INNER JOIN "cms_groups" t2 ON t1."group_id" = t2."id" WHERE t1."user_id" = t0."id" AND t2."id" = t0."id")' ); } @@ -759,7 +759,7 @@ public function testSupportsCurrentDateFunction() { $this->assertSqlGeneration( 'SELECT d.id FROM Doctrine\Tests\Models\Generic\DateTimeModel d WHERE d.datetime > current_date()', - 'SELECT d0_."id" AS id_0 FROM "date_time_model" d0_ WHERE d0_."col_datetime" > CURRENT_DATE', + 'SELECT t0."id" AS c0 FROM "date_time_model" t0 WHERE t0."col_datetime" > CURRENT_DATE', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] ); } @@ -768,7 +768,7 @@ public function testSupportsCurrentTimeFunction() { $this->assertSqlGeneration( 'SELECT d.id FROM Doctrine\Tests\Models\Generic\DateTimeModel d WHERE d.time > current_time()', - 'SELECT d0_."id" AS id_0 FROM "date_time_model" d0_ WHERE d0_."col_time" > CURRENT_TIME', + 'SELECT t0."id" AS c0 FROM "date_time_model" t0 WHERE t0."col_time" > CURRENT_TIME', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] ); } @@ -777,7 +777,7 @@ public function testSupportsCurrentTimestampFunction() { $this->assertSqlGeneration( 'SELECT d.id FROM Doctrine\Tests\Models\Generic\DateTimeModel d WHERE d.datetime > current_timestamp()', - 'SELECT d0_."id" AS id_0 FROM "date_time_model" d0_ WHERE d0_."col_datetime" > CURRENT_TIMESTAMP', + 'SELECT t0."id" AS c0 FROM "date_time_model" t0 WHERE t0."col_datetime" > CURRENT_TIMESTAMP', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] ); } @@ -793,9 +793,9 @@ public function testExistsExpressionInWhereCorrelatedSubqueryAssocCondition() FROM Doctrine\Tests\Models\CMS\CmsEmployee spouseEmp WHERE spouseEmp = emp.spouse)', // SQL - 'SELECT DISTINCT c0_."id" AS id_0, c0_."name" AS name_1 FROM "cms_employees" c0_' + 'SELECT DISTINCT t0."id" AS c0, t0."name" AS c1 FROM "cms_employees" t0' . ' WHERE EXISTS (' - . 'SELECT c1_."id" FROM "cms_employees" c1_ WHERE c1_."id" = c0_."spouse_id"' + . 'SELECT t1."id" FROM "cms_employees" t1 WHERE t1."id" = t0."spouse_id"' . ')' ); } @@ -811,9 +811,9 @@ public function testExistsExpressionWithSimpleSelectReturningScalar() FROM Doctrine\Tests\Models\CMS\CmsEmployee spouseEmp WHERE spouseEmp = emp.spouse)', // SQL - 'SELECT DISTINCT c0_."id" AS id_0, c0_."name" AS name_1 FROM "cms_employees" c0_' + 'SELECT DISTINCT t0."id" AS c0, t0."name" AS c1 FROM "cms_employees" t0' . ' WHERE EXISTS (' - . 'SELECT 1 AS sclr_2 FROM "cms_employees" c1_ WHERE c1_."id" = c0_."spouse_id"' + . 'SELECT 1 AS c2 FROM "cms_employees" t1 WHERE t1."id" = t0."spouse_id"' . ')' ); } @@ -825,7 +825,7 @@ public function testLimitFromQueryClass() ->setMaxResults(10); self::assertEquals( - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c0_."email_id" AS email_id_4 FROM "cms_users" c0_ LIMIT 10', + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3, t0."email_id" AS c4 FROM "cms_users" t0 LIMIT 10', $q->getSql() ); } @@ -838,7 +838,7 @@ public function testLimitAndOffsetFromQueryClass() ->setFirstResult(0); self::assertEquals( - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c0_."email_id" AS email_id_4 FROM "cms_users" c0_ LIMIT 10 OFFSET 0', + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3, t0."email_id" AS c4 FROM "cms_users" t0 LIMIT 10 OFFSET 0', $q->getSql() ); } @@ -847,7 +847,7 @@ public function testSizeFunction() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE SIZE(u.phonenumbers) > 1', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE (SELECT COUNT(*) FROM "cms_phonenumbers" c1_ WHERE c1_."user_id" = c0_."id") > 1' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE (SELECT COUNT(*) FROM "cms_phonenumbers" t1 WHERE t1."user_id" = t0."id") > 1' ); } @@ -855,7 +855,7 @@ public function testSizeFunctionSupportsManyToMany() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE SIZE(u.groups) > 1', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE (SELECT COUNT(*) FROM "cms_users_groups" c1_ WHERE c1_."user_id" = c0_."id") > 1' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE (SELECT COUNT(*) FROM "cms_users_groups" t1 WHERE t1."user_id" = t0."id") > 1' ); } @@ -863,11 +863,11 @@ public function testEmptyCollectionComparisonExpression() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.phonenumbers IS EMPTY', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE (SELECT COUNT(*) FROM "cms_phonenumbers" c1_ WHERE c1_."user_id" = c0_."id") = 0' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE (SELECT COUNT(*) FROM "cms_phonenumbers" t1 WHERE t1."user_id" = t0."id") = 0' ); $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.phonenumbers IS NOT EMPTY', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE (SELECT COUNT(*) FROM "cms_phonenumbers" c1_ WHERE c1_."user_id" = c0_."id") > 0' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE (SELECT COUNT(*) FROM "cms_phonenumbers" t1 WHERE t1."user_id" = t0."id") > 0' ); } @@ -875,7 +875,7 @@ public function testNestedExpressions() { $this->assertSqlGeneration( 'select u from Doctrine\Tests\Models\CMS\CmsUser u where u.id > 10 and u.id < 42 and ((u.id * 2) > 5)', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."id" > 10 AND c0_."id" < 42 AND ((c0_."id" * 2) > 5)' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE t0."id" > 10 AND t0."id" < 42 AND ((t0."id" * 2) > 5)' ); } @@ -883,7 +883,7 @@ public function testNestedExpressions2() { $this->assertSqlGeneration( 'select u from Doctrine\Tests\Models\CMS\CmsUser u where (u.id > 10) and (u.id < 42 and ((u.id * 2) > 5)) or u.id <> 42', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE (c0_."id" > 10) AND (c0_."id" < 42 AND ((c0_."id" * 2) > 5)) OR c0_."id" <> 42' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE (t0."id" > 10) AND (t0."id" < 42 AND ((t0."id" * 2) > 5)) OR t0."id" <> 42' ); } @@ -891,7 +891,7 @@ public function testNestedExpressions3() { $this->assertSqlGeneration( 'select u from Doctrine\Tests\Models\CMS\CmsUser u where (u.id > 10) and (u.id between 1 and 10 or u.id in (1, 2, 3, 4, 5))', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE (c0_."id" > 10) AND (c0_."id" BETWEEN 1 AND 10 OR c0_."id" IN (1, 2, 3, 4, 5))' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE (t0."id" > 10) AND (t0."id" BETWEEN 1 AND 10 OR t0."id" IN (1, 2, 3, 4, 5))' ); } @@ -899,7 +899,7 @@ public function testOrderByCollectionAssociationSize() { $this->assertSqlGeneration( 'select u, size(u.articles) as numArticles from Doctrine\Tests\Models\CMS\CmsUser u order by numArticles', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, (SELECT COUNT(*) FROM "cms_articles" c1_ WHERE c1_."user_id" = c0_."id") AS sclr_4 FROM "cms_users" c0_ ORDER BY sclr_4 ASC' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3, (SELECT COUNT(*) FROM "cms_articles" t1 WHERE t1."user_id" = t0."id") AS c4 FROM "cms_users" t0 ORDER BY c4 ASC' ); } @@ -907,7 +907,7 @@ public function testOrderBySupportsSingleValuedPathExpressionOwningSide() { $this->assertSqlGeneration( 'select a from Doctrine\Tests\Models\CMS\CmsArticle a order by a.user', - 'SELECT c0_."id" AS id_0, c0_."topic" AS topic_1, c0_."text" AS text_2, c0_."version" AS version_3 FROM "cms_articles" c0_ ORDER BY c0_."user_id" ASC' + 'SELECT t0."id" AS c0, t0."topic" AS c1, t0."text" AS c2, t0."version" AS c3 FROM "cms_articles" t0 ORDER BY t0."user_id" ASC' ); } @@ -927,12 +927,12 @@ public function testBooleanLiteralInWhereOnSqlite() $this->assertSqlGeneration( 'SELECT b FROM Doctrine\Tests\Models\Generic\BooleanModel b WHERE b.booleanField = true', - 'SELECT b0_."id" AS id_0, b0_."booleanField" AS booleanField_1 FROM "boolean_model" b0_ WHERE b0_."booleanField" = 1' + 'SELECT t0."id" AS c0, t0."booleanField" AS c1 FROM "boolean_model" t0 WHERE t0."booleanField" = 1' ); $this->assertSqlGeneration( 'SELECT b FROM Doctrine\Tests\Models\Generic\BooleanModel b WHERE b.booleanField = false', - 'SELECT b0_."id" AS id_0, b0_."booleanField" AS booleanField_1 FROM "boolean_model" b0_ WHERE b0_."booleanField" = 0' + 'SELECT t0."id" AS c0, t0."booleanField" AS c1 FROM "boolean_model" t0 WHERE t0."booleanField" = 0' ); } @@ -942,12 +942,12 @@ public function testBooleanLiteralInWhereOnPostgres() $this->assertSqlGeneration( 'SELECT b FROM Doctrine\Tests\Models\Generic\BooleanModel b WHERE b.booleanField = true', - 'SELECT b0_."id" AS id_0, b0_."booleanField" AS booleanfield_1 FROM "boolean_model" b0_ WHERE b0_."booleanField" = true' + 'SELECT t0."id" AS c0, t0."booleanField" AS c1 FROM "boolean_model" t0 WHERE t0."booleanField" = true' ); $this->assertSqlGeneration( 'SELECT b FROM Doctrine\Tests\Models\Generic\BooleanModel b WHERE b.booleanField = false', - 'SELECT b0_."id" AS id_0, b0_."booleanField" AS booleanfield_1 FROM "boolean_model" b0_ WHERE b0_."booleanField" = false' + 'SELECT t0."id" AS c0, t0."booleanField" AS c1 FROM "boolean_model" t0 WHERE t0."booleanField" = false' ); } @@ -955,7 +955,7 @@ public function testSingleValuedAssociationFieldInWhere() { $this->assertSqlGeneration( 'SELECT p FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.user = ?1', - 'SELECT c0_."phonenumber" AS phonenumber_0 FROM "cms_phonenumbers" c0_ WHERE c0_."user_id" = ?' + 'SELECT t0."phonenumber" AS c0 FROM "cms_phonenumbers" t0 WHERE t0."user_id" = ?' ); } @@ -963,7 +963,7 @@ public function testSingleValuedAssociationNullCheckOnOwningSide() { $this->assertSqlGeneration( 'SELECT a FROM Doctrine\Tests\Models\CMS\CmsAddress a WHERE a.user IS NULL', - 'SELECT c0_."id" AS id_0, c0_."country" AS country_1, c0_."zip" AS zip_2, c0_."city" AS city_3 FROM "cms_addresses" c0_ WHERE c0_."user_id" IS NULL' + 'SELECT t0."id" AS c0, t0."country" AS c1, t0."zip" AS c2, t0."city" AS c3 FROM "cms_addresses" t0 WHERE t0."user_id" IS NULL' ); } @@ -974,7 +974,7 @@ public function testSingleValuedAssociationNullCheckOnInverseSide() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.address a WHERE a.id IS NULL', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ LEFT JOIN "cms_addresses" c1_ ON c0_."id" = c1_."user_id" WHERE c1_."id" IS NULL' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 LEFT JOIN "cms_addresses" t1 ON t0."id" = t1."user_id" WHERE t1."id" IS NULL' ); } @@ -986,29 +986,29 @@ public function testStringFunctionLikeExpression() { $this->assertSqlGeneration( 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE LOWER(u.name) LIKE \'%foo OR bar%\'', - 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE LOWER(c0_."name") LIKE \'%foo OR bar%\'' + 'SELECT t0."name" AS c0 FROM "cms_users" t0 WHERE LOWER(t0."name") LIKE \'%foo OR bar%\'' ); $this->assertSqlGeneration( 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE LOWER(u.name) LIKE :str', - 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE LOWER(c0_."name") LIKE ?' + 'SELECT t0."name" AS c0 FROM "cms_users" t0 WHERE LOWER(t0."name") LIKE ?' ); $this->assertSqlGeneration( 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(UPPER(u.name), \'_moo\') LIKE :str', - 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE UPPER(c0_."name") || \'_moo\' LIKE ?' + 'SELECT t0."name" AS c0 FROM "cms_users" t0 WHERE UPPER(t0."name") || \'_moo\' LIKE ?' ); // DDC-1572 $this->assertSqlGeneration( 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE UPPER(u.name) LIKE UPPER(:str)', - 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE UPPER(c0_."name") LIKE UPPER(?)' + 'SELECT t0."name" AS c0 FROM "cms_users" t0 WHERE UPPER(t0."name") LIKE UPPER(?)' ); $this->assertSqlGeneration( 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE UPPER(LOWER(u.name)) LIKE UPPER(LOWER(:str))', - 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE UPPER(LOWER(c0_."name")) LIKE UPPER(LOWER(?))' + 'SELECT t0."name" AS c0 FROM "cms_users" t0 WHERE UPPER(LOWER(t0."name")) LIKE UPPER(LOWER(?))' ); $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a WITH a.topic LIKE u.name', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ LEFT JOIN "cms_articles" c1_ ON c0_."id" = c1_."user_id" AND (c1_."topic" LIKE c0_."name")' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 LEFT JOIN "cms_articles" t1 ON t0."id" = t1."user_id" AND (t1."topic" LIKE t0."name")' ); } @@ -1019,16 +1019,16 @@ public function testStringFunctionNotLikeExpression() { $this->assertSqlGeneration( 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE LOWER(u.name) NOT LIKE \'%foo OR bar%\'', - 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE LOWER(c0_."name") NOT LIKE \'%foo OR bar%\'' + 'SELECT t0."name" AS c0 FROM "cms_users" t0 WHERE LOWER(t0."name") NOT LIKE \'%foo OR bar%\'' ); $this->assertSqlGeneration( 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE UPPER(LOWER(u.name)) NOT LIKE UPPER(LOWER(:str))', - 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ WHERE UPPER(LOWER(c0_."name")) NOT LIKE UPPER(LOWER(?))' + 'SELECT t0."name" AS c0 FROM "cms_users" t0 WHERE UPPER(LOWER(t0."name")) NOT LIKE UPPER(LOWER(?))' ); $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN u.articles a WITH a.topic NOT LIKE u.name', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ LEFT JOIN "cms_articles" c1_ ON c0_."id" = c1_."user_id" AND (c1_."topic" NOT LIKE c0_."name")' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 LEFT JOIN "cms_articles" t1 ON t0."id" = t1."user_id" AND (t1."topic" NOT LIKE t0."name")' ); } @@ -1039,7 +1039,7 @@ public function testOrderedCollectionFetchJoined() { $this->assertSqlGeneration( 'SELECT r, l FROM Doctrine\Tests\Models\Routing\RoutingRoute r JOIN r.legs l', - 'SELECT r0_."id" AS id_0, r1_."id" AS id_1, r1_."departureDate" AS departureDate_2, r1_."arrivalDate" AS arrivalDate_3 FROM "RoutingRoute" r0_ INNER JOIN "RoutingRouteLegs" r2_ ON r0_."id" = r2_."route_id" INNER JOIN "RoutingLeg" r1_ ON r1_."id" = r2_."leg_id" ORDER BY r1_."departureDate" ASC' + 'SELECT t0."id" AS c0, t1."id" AS c1, t1."departureDate" AS c2, t1."arrivalDate" AS c3 FROM "RoutingRoute" t0 INNER JOIN "RoutingRouteLegs" t2 ON t0."id" = t2."route_id" INNER JOIN "RoutingLeg" t1 ON t1."id" = t2."leg_id" ORDER BY t1."departureDate" ASC' ); } @@ -1047,7 +1047,7 @@ public function testSubselectInSelect() { $this->assertSqlGeneration( 'SELECT u.name, (SELECT COUNT(p.phonenumber) FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.phonenumber = 1234) pcount FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = \'jon\'', - 'SELECT c0_."name" AS name_0, (SELECT COUNT(c1_."phonenumber") AS dctrn__1 FROM "cms_phonenumbers" c1_ WHERE c1_."phonenumber" = 1234) AS sclr_1 FROM "cms_users" c0_ WHERE c0_."name" = \'jon\'' + 'SELECT t0."name" AS c0, (SELECT COUNT(t1."phonenumber") AS dctrn__1 FROM "cms_phonenumbers" t1 WHERE t1."phonenumber" = 1234) AS c1 FROM "cms_users" t0 WHERE t0."name" = \'jon\'' ); } @@ -1063,7 +1063,7 @@ public function testPessimisticWriteLockQueryHint() $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = \'gblanco\'', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."username" = \'gblanco\' FOR UPDATE', + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE t0."username" = \'gblanco\' FOR UPDATE', [ORMQuery::HINT_LOCK_MODE => LockMode::PESSIMISTIC_WRITE] ); } @@ -1078,7 +1078,7 @@ public function testPessimisticReadLockQueryHintPostgreSql() $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = \'gblanco\'', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."username" = \'gblanco\' FOR SHARE', + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE t0."username" = \'gblanco\' FOR SHARE', [ORMQuery::HINT_LOCK_MODE => LockMode::PESSIMISTIC_READ] ); } @@ -1091,7 +1091,7 @@ public function testLockModeNoneQueryHint() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = \'gblanco\'', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."username" = \'gblanco\'', + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE t0."username" = \'gblanco\'', [ORMQuery::HINT_LOCK_MODE => LockMode::NONE] ); } @@ -1103,7 +1103,7 @@ public function testSupportSelectWithMoreThan10InputParameters() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1 OR u.id = ?2 OR u.id = ?3 OR u.id = ?4 OR u.id = ?5 OR u.id = ?6 OR u.id = ?7 OR u.id = ?8 OR u.id = ?9 OR u.id = ?10 OR u.id = ?11', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."id" = ? OR c0_."id" = ? OR c0_."id" = ? OR c0_."id" = ? OR c0_."id" = ? OR c0_."id" = ? OR c0_."id" = ? OR c0_."id" = ? OR c0_."id" = ? OR c0_."id" = ? OR c0_."id" = ?' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE t0."id" = ? OR t0."id" = ? OR t0."id" = ? OR t0."id" = ? OR t0."id" = ? OR t0."id" = ? OR t0."id" = ? OR t0."id" = ? OR t0."id" = ? OR t0."id" = ? OR t0."id" = ?' ); } @@ -1117,7 +1117,7 @@ public function testPessimisticReadLockQueryHintMySql() $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = \'gblanco\'', - 'SELECT c0_.`id` AS id_0, c0_.`status` AS status_1, c0_.`username` AS username_2, c0_.`name` AS name_3 FROM `cms_users` c0_ WHERE c0_.`username` = \'gblanco\' LOCK IN SHARE MODE', + 'SELECT t0.`id` AS c0, t0.`status` AS c1, t0.`username` AS c2, t0.`name` AS c3 FROM `cms_users` t0 WHERE t0.`username` = \'gblanco\' LOCK IN SHARE MODE', [ORMQuery::HINT_LOCK_MODE => LockMode::PESSIMISTIC_READ] ); } @@ -1132,7 +1132,7 @@ public function testPessimisticReadLockQueryHintOracle() $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.username = \'gblanco\'', - 'SELECT c0_."id" AS ID_0, c0_."status" AS STATUS_1, c0_."username" AS USERNAME_2, c0_."name" AS NAME_3 FROM "cms_users" c0_ WHERE c0_."username" = \'gblanco\' FOR UPDATE', + 'SELECT t0."id" AS C0, t0."status" AS C1, t0."username" AS C2, t0."name" AS C3 FROM "cms_users" t0 WHERE t0."username" = \'gblanco\' FOR UPDATE', [ORMQuery::HINT_LOCK_MODE => LockMode::PESSIMISTIC_READ] ); } @@ -1147,7 +1147,7 @@ public function testSupportToCustomDQLFunctions() $this->assertSqlGeneration( 'SELECT MYABS(p.phonenumber) FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p', - 'SELECT ABS(c0_."phonenumber") AS sclr_0 FROM "cms_phonenumbers" c0_' + 'SELECT ABS(t0."phonenumber") AS c0 FROM "cms_phonenumbers" t0' ); $config->setCustomNumericFunctions([]); @@ -1160,7 +1160,7 @@ public function testMappedSuperclassAssociationJoin() { $this->assertSqlGeneration( 'SELECT f FROM Doctrine\Tests\Models\DirectoryTree\File f JOIN f.parentDirectory d WHERE f.id = ?1', - 'SELECT f0_."id" AS id_0, f0_."name" AS name_1, f0_."extension" AS extension_2 FROM "file" f0_ INNER JOIN "Directory" d1_ ON f0_."parentDirectory_id" = d1_."id" WHERE f0_."id" = ?' + 'SELECT t0."id" AS c0, t0."name" AS c1, t0."extension" AS c2 FROM "file" t0 INNER JOIN "Directory" t1 ON t0."parentDirectory_id" = t1."id" WHERE t0."id" = ?' ); } @@ -1171,7 +1171,7 @@ public function testGroupBy() { $this->assertSqlGeneration( 'SELECT g.id, count(u.id) FROM Doctrine\Tests\Models\CMS\CmsGroup g JOIN g.users u GROUP BY g.id', - 'SELECT c0_."id" AS id_0, count(c1_."id") AS sclr_1 FROM "cms_groups" c0_ INNER JOIN "cms_users_groups" c2_ ON c0_."id" = c2_."group_id" INNER JOIN "cms_users" c1_ ON c1_."id" = c2_."user_id" GROUP BY c0_."id"' + 'SELECT t0."id" AS c0, count(t1."id") AS c1 FROM "cms_groups" t0 INNER JOIN "cms_users_groups" t2 ON t0."id" = t2."group_id" INNER JOIN "cms_users" t1 ON t1."id" = t2."user_id" GROUP BY t0."id"' ); } @@ -1182,7 +1182,7 @@ public function testGroupByIdentificationVariable() { $this->assertSqlGeneration( 'SELECT g, count(u.id) FROM Doctrine\Tests\Models\CMS\CmsGroup g JOIN g.users u GROUP BY g', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, count(c1_."id") AS sclr_2 FROM "cms_groups" c0_ INNER JOIN "cms_users_groups" c2_ ON c0_."id" = c2_."group_id" INNER JOIN "cms_users" c1_ ON c1_."id" = c2_."user_id" GROUP BY c0_."id", c0_."name"' + 'SELECT t0."id" AS c0, t0."name" AS c1, count(t1."id") AS c2 FROM "cms_groups" t0 INNER JOIN "cms_users_groups" t2 ON t0."id" = t2."group_id" INNER JOIN "cms_users" t1 ON t1."id" = t2."user_id" GROUP BY t0."id", t0."name"' ); } @@ -1190,7 +1190,7 @@ public function testCaseContainingNullIf() { $this->assertSqlGeneration( 'SELECT NULLIF(g.id, g.name) AS NullIfEqual FROM Doctrine\Tests\Models\CMS\CmsGroup g', - 'SELECT NULLIF(c0_."id", c0_."name") AS sclr_0 FROM "cms_groups" c0_' + 'SELECT NULLIF(t0."id", t0."name") AS c0 FROM "cms_groups" t0' ); } @@ -1198,7 +1198,7 @@ public function testCaseContainingCoalesce() { $this->assertSqlGeneration( 'SELECT COALESCE(NULLIF(u.name, \'\'), u.username) as Display FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT COALESCE(NULLIF(c0_."name", \'\'), c0_."username") AS sclr_0 FROM "cms_users" c0_' + 'SELECT COALESCE(NULLIF(t0."name", \'\'), t0."username") AS c0 FROM "cms_users" t0' ); } @@ -1209,7 +1209,7 @@ public function testSubSelectDiscriminator() { $this->assertSqlGeneration( 'SELECT u.name, (SELECT COUNT(cfc.id) total FROM Doctrine\Tests\Models\Company\CompanyFixContract cfc) as cfc_count FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT c0_."name" AS name_0, (SELECT COUNT(c1_."id") AS dctrn__total FROM "company_contracts" c1_ WHERE c1_."discr" IN (\'fix\')) AS sclr_1 FROM "cms_users" c0_' + 'SELECT t0."name" AS c0, (SELECT COUNT(t1."id") AS dctrn__total FROM "company_contracts" t1 WHERE t1."discr" IN (\'fix\')) AS c1 FROM "cms_users" t0' ); } @@ -1234,7 +1234,7 @@ public function testSubSelectAliasesFromOuterQuery() { $this->assertSqlGeneration( 'SELECT uo, (SELECT ui.name FROM Doctrine\Tests\Models\CMS\CmsUser ui WHERE ui.id = uo.id) AS bar FROM Doctrine\Tests\Models\CMS\CmsUser uo', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, (SELECT c1_."name" FROM "cms_users" c1_ WHERE c1_."id" = c0_."id") AS sclr_4 FROM "cms_users" c0_' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3, (SELECT t1."name" FROM "cms_users" t1 WHERE t1."id" = t0."id") AS c4 FROM "cms_users" t0' ); } @@ -1242,7 +1242,7 @@ public function testSubSelectAliasesFromOuterQueryWithSubquery() { $this->assertSqlGeneration( 'SELECT uo, (SELECT ui.name FROM Doctrine\Tests\Models\CMS\CmsUser ui WHERE ui.id = uo.id AND ui.name IN (SELECT uii.name FROM Doctrine\Tests\Models\CMS\CmsUser uii)) AS bar FROM Doctrine\Tests\Models\CMS\CmsUser uo', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, (SELECT c1_."name" FROM "cms_users" c1_ WHERE c1_."id" = c0_."id" AND c1_."name" IN (SELECT c2_."name" FROM "cms_users" c2_)) AS sclr_4 FROM "cms_users" c0_' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3, (SELECT t1."name" FROM "cms_users" t1 WHERE t1."id" = t0."id" AND t1."name" IN (SELECT t2."name" FROM "cms_users" t2)) AS c4 FROM "cms_users" t0' ); } @@ -1250,7 +1250,7 @@ public function testSubSelectAliasesFromOuterQueryReuseInWhereClause() { $this->assertSqlGeneration( 'SELECT uo, (SELECT ui.name FROM Doctrine\Tests\Models\CMS\CmsUser ui WHERE ui.id = uo.id) AS bar FROM Doctrine\Tests\Models\CMS\CmsUser uo WHERE bar = ?0', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, (SELECT c1_."name" FROM "cms_users" c1_ WHERE c1_."id" = c0_."id") AS sclr_4 FROM "cms_users" c0_ WHERE sclr_4 = ?' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3, (SELECT t1."name" FROM "cms_users" t1 WHERE t1."id" = t0."id") AS c4 FROM "cms_users" t0 WHERE c4 = ?' ); } @@ -1261,7 +1261,7 @@ public function testSelectForeignKeyPKWithoutFields() { $this->assertSqlGeneration( 'SELECT t, s, l FROM Doctrine\Tests\Models\DDC117\DDC117Link l INNER JOIN l.target t INNER JOIN l.source s', - 'SELECT d0_."article_id" AS article_id_0, d0_."title" AS title_1, d1_."article_id" AS article_id_2, d1_."title" AS title_3, d2_."source_id" AS source_id_4, d2_."target_id" AS target_id_5 FROM "DDC117Link" d2_ INNER JOIN "DDC117Article" d0_ ON d2_."target_id" = d0_."article_id" INNER JOIN "DDC117Article" d1_ ON d2_."source_id" = d1_."article_id"' + 'SELECT t0."article_id" AS c0, t0."title" AS c1, t1."article_id" AS c2, t1."title" AS c3, t2."source_id" AS c4, t2."target_id" AS c5 FROM "DDC117Link" t2 INNER JOIN "DDC117Article" t0 ON t2."target_id" = t0."article_id" INNER JOIN "DDC117Article" t1 ON t2."source_id" = t1."article_id"' ); } @@ -1269,7 +1269,7 @@ public function testGeneralCaseWithSingleWhenClause() { $this->assertSqlGeneration( 'SELECT g.id, CASE WHEN ((g.id / 2) > 18) THEN 1 ELSE 0 END AS test FROM Doctrine\Tests\Models\CMS\CmsGroup g', - 'SELECT c0_."id" AS id_0, CASE WHEN ((c0_."id" / 2) > 18) THEN 1 ELSE 0 END AS sclr_1 FROM "cms_groups" c0_' + 'SELECT t0."id" AS c0, CASE WHEN ((t0."id" / 2) > 18) THEN 1 ELSE 0 END AS c1 FROM "cms_groups" t0' ); } @@ -1277,7 +1277,7 @@ public function testGeneralCaseWithMultipleWhenClause() { $this->assertSqlGeneration( 'SELECT g.id, CASE WHEN (g.id / 2 < 10) THEN 2 WHEN ((g.id / 2) > 20) THEN 1 ELSE 0 END AS test FROM Doctrine\Tests\Models\CMS\CmsGroup g', - 'SELECT c0_."id" AS id_0, CASE WHEN (c0_."id" / 2 < 10) THEN 2 WHEN ((c0_."id" / 2) > 20) THEN 1 ELSE 0 END AS sclr_1 FROM "cms_groups" c0_' + 'SELECT t0."id" AS c0, CASE WHEN (t0."id" / 2 < 10) THEN 2 WHEN ((t0."id" / 2) > 20) THEN 1 ELSE 0 END AS c1 FROM "cms_groups" t0' ); } @@ -1285,7 +1285,7 @@ public function testSimpleCaseWithSingleWhenClause() { $this->assertSqlGeneration( 'SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id = CASE g.name WHEN \'admin\' THEN 1 ELSE 2 END', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1 FROM "cms_groups" c0_ WHERE c0_."id" = CASE c0_."name" WHEN \'admin\' THEN 1 ELSE 2 END' + 'SELECT t0."id" AS c0, t0."name" AS c1 FROM "cms_groups" t0 WHERE t0."id" = CASE t0."name" WHEN \'admin\' THEN 1 ELSE 2 END' ); } @@ -1293,7 +1293,7 @@ public function testSimpleCaseWithMultipleWhenClause() { $this->assertSqlGeneration( 'SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id = (CASE g.name WHEN \'admin\' THEN 1 WHEN \'moderator\' THEN 2 ELSE 3 END)', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1 FROM "cms_groups" c0_ WHERE c0_."id" = (CASE c0_."name" WHEN \'admin\' THEN 1 WHEN \'moderator\' THEN 2 ELSE 3 END)' + 'SELECT t0."id" AS c0, t0."name" AS c1 FROM "cms_groups" t0 WHERE t0."id" = (CASE t0."name" WHEN \'admin\' THEN 1 WHEN \'moderator\' THEN 2 ELSE 3 END)' ); } @@ -1301,7 +1301,7 @@ public function testGeneralCaseWithSingleWhenClauseInSubselect() { $this->assertSqlGeneration( 'SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id IN (SELECT CASE WHEN ((g2.id / 2) > 18) THEN 2 ELSE 1 END FROM Doctrine\Tests\Models\CMS\CmsGroup g2)', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1 FROM "cms_groups" c0_ WHERE c0_."id" IN (SELECT CASE WHEN ((c1_."id" / 2) > 18) THEN 2 ELSE 1 END AS sclr_2 FROM "cms_groups" c1_)' + 'SELECT t0."id" AS c0, t0."name" AS c1 FROM "cms_groups" t0 WHERE t0."id" IN (SELECT CASE WHEN ((t1."id" / 2) > 18) THEN 2 ELSE 1 END AS c2 FROM "cms_groups" t1)' ); } @@ -1309,7 +1309,7 @@ public function testGeneralCaseWithMultipleWhenClauseInSubselect() { $this->assertSqlGeneration( 'SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id IN (SELECT CASE WHEN (g.id / 2 < 10) THEN 3 WHEN ((g.id / 2) > 20) THEN 2 ELSE 1 END FROM Doctrine\Tests\Models\CMS\CmsGroup g2)', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1 FROM "cms_groups" c0_ WHERE c0_."id" IN (SELECT CASE WHEN (c0_."id" / 2 < 10) THEN 3 WHEN ((c0_."id" / 2) > 20) THEN 2 ELSE 1 END AS sclr_2 FROM "cms_groups" c1_)' + 'SELECT t0."id" AS c0, t0."name" AS c1 FROM "cms_groups" t0 WHERE t0."id" IN (SELECT CASE WHEN (t0."id" / 2 < 10) THEN 3 WHEN ((t0."id" / 2) > 20) THEN 2 ELSE 1 END AS c2 FROM "cms_groups" t1)' ); } @@ -1317,7 +1317,7 @@ public function testSimpleCaseWithSingleWhenClauseInSubselect() { $this->assertSqlGeneration( 'SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id IN (SELECT CASE g2.name WHEN \'admin\' THEN 1 ELSE 2 END FROM Doctrine\Tests\Models\CMS\CmsGroup g2)', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1 FROM "cms_groups" c0_ WHERE c0_."id" IN (SELECT CASE c1_."name" WHEN \'admin\' THEN 1 ELSE 2 END AS sclr_2 FROM "cms_groups" c1_)' + 'SELECT t0."id" AS c0, t0."name" AS c1 FROM "cms_groups" t0 WHERE t0."id" IN (SELECT CASE t1."name" WHEN \'admin\' THEN 1 ELSE 2 END AS c2 FROM "cms_groups" t1)' ); } @@ -1325,7 +1325,7 @@ public function testSimpleCaseWithMultipleWhenClauseInSubselect() { $this->assertSqlGeneration( 'SELECT g FROM Doctrine\Tests\Models\CMS\CmsGroup g WHERE g.id IN (SELECT CASE g2.name WHEN \'admin\' THEN 1 WHEN \'moderator\' THEN 2 ELSE 3 END FROM Doctrine\Tests\Models\CMS\CmsGroup g2)', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1 FROM "cms_groups" c0_ WHERE c0_."id" IN (SELECT CASE c1_."name" WHEN \'admin\' THEN 1 WHEN \'moderator\' THEN 2 ELSE 3 END AS sclr_2 FROM "cms_groups" c1_)' + 'SELECT t0."id" AS c0, t0."name" AS c1 FROM "cms_groups" t0 WHERE t0."id" IN (SELECT CASE t1."name" WHEN \'admin\' THEN 1 WHEN \'moderator\' THEN 2 ELSE 3 END AS c2 FROM "cms_groups" t1)' ); } @@ -1336,7 +1336,7 @@ public function testSimpleCaseWithStringPrimary() { $this->assertSqlGeneration( 'SELECT g.id, CASE WHEN ((g.id / 2) > 18) THEN \'Foo\' ELSE \'Bar\' END AS test FROM Doctrine\Tests\Models\CMS\CmsGroup g', - 'SELECT c0_."id" AS id_0, CASE WHEN ((c0_."id" / 2) > 18) THEN \'Foo\' ELSE \'Bar\' END AS sclr_1 FROM "cms_groups" c0_' + 'SELECT t0."id" AS c0, CASE WHEN ((t0."id" / 2) > 18) THEN \'Foo\' ELSE \'Bar\' END AS c1 FROM "cms_groups" t0' ); } @@ -1347,27 +1347,27 @@ public function testCaseNegativeValuesInThenExpression() { $this->assertSqlGeneration( 'SELECT CASE g.name WHEN \'admin\' THEN - 1 ELSE - 2 END FROM Doctrine\Tests\Models\CMS\CmsGroup g', - 'SELECT CASE c0_."name" WHEN \'admin\' THEN -1 ELSE -2 END AS sclr_0 FROM "cms_groups" c0_' + 'SELECT CASE t0."name" WHEN \'admin\' THEN -1 ELSE -2 END AS c0 FROM "cms_groups" t0' ); $this->assertSqlGeneration( 'SELECT CASE g.name WHEN \'admin\' THEN - 2 WHEN \'guest\' THEN - 1 ELSE 0 END FROM Doctrine\Tests\Models\CMS\CmsGroup g', - 'SELECT CASE c0_."name" WHEN \'admin\' THEN -2 WHEN \'guest\' THEN -1 ELSE 0 END AS sclr_0 FROM "cms_groups" c0_' + 'SELECT CASE t0."name" WHEN \'admin\' THEN -2 WHEN \'guest\' THEN -1 ELSE 0 END AS c0 FROM "cms_groups" t0' ); $this->assertSqlGeneration( 'SELECT CASE g.name WHEN \'admin\' THEN (- 1) ELSE (- 2) END FROM Doctrine\Tests\Models\CMS\CmsGroup g', - 'SELECT CASE c0_."name" WHEN \'admin\' THEN (-1) ELSE (-2) END AS sclr_0 FROM "cms_groups" c0_' + 'SELECT CASE t0."name" WHEN \'admin\' THEN (-1) ELSE (-2) END AS c0 FROM "cms_groups" t0' ); $this->assertSqlGeneration( 'SELECT CASE g.name WHEN \'admin\' THEN ( - :value) ELSE ( + :value) END FROM Doctrine\Tests\Models\CMS\CmsGroup g', - 'SELECT CASE c0_."name" WHEN \'admin\' THEN (-?) ELSE (+?) END AS sclr_0 FROM "cms_groups" c0_' + 'SELECT CASE t0."name" WHEN \'admin\' THEN (-?) ELSE (+?) END AS c0 FROM "cms_groups" t0' ); $this->assertSqlGeneration( 'SELECT CASE g.name WHEN \'admin\' THEN ( - g.id) ELSE ( + g.id) END FROM Doctrine\Tests\Models\CMS\CmsGroup g', - 'SELECT CASE c0_."name" WHEN \'admin\' THEN (-c0_."id") ELSE (+c0_."id") END AS sclr_0 FROM "cms_groups" c0_' + 'SELECT CASE t0."name" WHEN \'admin\' THEN (-t0."id") ELSE (+t0."id") END AS c0 FROM "cms_groups" t0' ); } @@ -1375,17 +1375,17 @@ public function testIdentityFunctionWithCompositePrimaryKey() { $this->assertSqlGeneration( 'SELECT IDENTITY(p.poi, \'long\') AS long FROM Doctrine\Tests\Models\Navigation\NavPhotos p', - 'SELECT n0_."poi_long" AS sclr_0 FROM "navigation_photos" n0_' + 'SELECT t0."poi_long" AS c0 FROM "navigation_photos" t0' ); $this->assertSqlGeneration( 'SELECT IDENTITY(p.poi, \'lat\') AS lat FROM Doctrine\Tests\Models\Navigation\NavPhotos p', - 'SELECT n0_."poi_lat" AS sclr_0 FROM "navigation_photos" n0_' + 'SELECT t0."poi_lat" AS c0 FROM "navigation_photos" t0' ); $this->assertSqlGeneration( 'SELECT IDENTITY(p.poi, \'long\') AS long, IDENTITY(p.poi, \'lat\') AS lat FROM Doctrine\Tests\Models\Navigation\NavPhotos p', - 'SELECT n0_."poi_long" AS sclr_0, n0_."poi_lat" AS sclr_1 FROM "navigation_photos" n0_' + 'SELECT t0."poi_long" AS c0, t0."poi_lat" AS c1 FROM "navigation_photos" t0' ); $this->assertInvalidSqlGeneration( @@ -1401,12 +1401,12 @@ public function testPartialWithAssociationIdentifier() { $this->assertSqlGeneration( 'SELECT PARTIAL l.{source, target} FROM Doctrine\Tests\Models\Legacy\LegacyUserReference l', - 'SELECT l0_."iUserIdSource" AS iUserIdSource_0, l0_."iUserIdTarget" AS iUserIdTarget_1 FROM "legacy_users_reference" l0_' + 'SELECT t0."iUserIdSource" AS c0, t0."iUserIdTarget" AS c1 FROM "legacy_users_reference" t0' ); $this->assertSqlGeneration( 'SELECT PARTIAL l.{description, source, target} FROM Doctrine\Tests\Models\Legacy\LegacyUserReference l', - 'SELECT l0_."description" AS description_0, l0_."iUserIdSource" AS iUserIdSource_1, l0_."iUserIdTarget" AS iUserIdTarget_2 FROM "legacy_users_reference" l0_' + 'SELECT t0."description" AS c0, t0."iUserIdSource" AS c1, t0."iUserIdTarget" AS c2 FROM "legacy_users_reference" t0' ); } @@ -1417,7 +1417,7 @@ public function testIdentityFunctionInSelectClause() { $this->assertSqlGeneration( 'SELECT IDENTITY(u.email) as email_id FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT c0_."email_id" AS sclr_0 FROM "cms_users" c0_' + 'SELECT t0."email_id" AS c0 FROM "cms_users" t0' ); } @@ -1426,13 +1426,13 @@ public function testIdentityFunctionInJoinedSubclass() //relation is in the subclass (CompanyManager) we are querying $this->assertSqlGeneration( 'SELECT m, IDENTITY(m.car) as car_id FROM Doctrine\Tests\Models\Company\CompanyManager m', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, c2_."title" AS title_5, c2_."car_id" AS sclr_6, c0_."discr" AS discr_7 FROM "company_managers" c2_ INNER JOIN "company_employees" c1_ ON c2_."id" = c1_."id" INNER JOIN "company_persons" c0_ ON c2_."id" = c0_."id"' + 'SELECT t0."id" AS c0, t0."name" AS c1, t1."salary" AS c2, t1."department" AS c3, t1."startDate" AS c4, t2."title" AS c5, t2."car_id" AS c6, t0."discr" AS c7 FROM "company_managers" t2 INNER JOIN "company_employees" t1 ON t2."id" = t1."id" INNER JOIN "company_persons" t0 ON t2."id" = t0."id"' ); //relation is in the base class (CompanyPerson). $this->assertSqlGeneration( 'SELECT m, IDENTITY(m.spouse) as spouse_id FROM Doctrine\Tests\Models\Company\CompanyManager m', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, c2_."title" AS title_5, c0_."spouse_id" AS sclr_6, c0_."discr" AS discr_7 FROM "company_managers" c2_ INNER JOIN "company_employees" c1_ ON c2_."id" = c1_."id" INNER JOIN "company_persons" c0_ ON c2_."id" = c0_."id"' + 'SELECT t0."id" AS c0, t0."name" AS c1, t1."salary" AS c2, t1."department" AS c3, t1."startDate" AS c4, t2."title" AS c5, t0."spouse_id" AS c6, t0."discr" AS c7 FROM "company_managers" t2 INNER JOIN "company_employees" t1 ON t2."id" = t1."id" INNER JOIN "company_persons" t0 ON t2."id" = t0."id"' ); } @@ -1454,7 +1454,7 @@ public function testInheritanceTypeJoinInRootClassWithDisabledForcePartialLoad() { $this->assertSqlGeneration( 'SELECT p FROM Doctrine\Tests\Models\Company\CompanyPerson p', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."title" AS title_2, c2_."salary" AS salary_3, c2_."department" AS department_4, c2_."startDate" AS startDate_5, c0_."discr" AS discr_6, c0_."spouse_id" AS spouse_id_7, c1_."car_id" AS car_id_8 FROM "company_persons" c0_ LEFT JOIN "company_managers" c1_ ON c0_."id" = c1_."id" LEFT JOIN "company_employees" c2_ ON c0_."id" = c2_."id"', + 'SELECT t0."id" AS c0, t0."name" AS c1, t1."title" AS c2, t2."salary" AS c3, t2."department" AS c4, t2."startDate" AS c5, t0."discr" AS c6, t0."spouse_id" AS c7, t1."car_id" AS c8 FROM "company_persons" t0 LEFT JOIN "company_managers" t1 ON t0."id" = t1."id" LEFT JOIN "company_employees" t2 ON t0."id" = t2."id"', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] ); } @@ -1466,7 +1466,7 @@ public function testInheritanceTypeJoinInRootClassWithEnabledForcePartialLoad() { $this->assertSqlGeneration( 'SELECT p FROM Doctrine\Tests\Models\Company\CompanyPerson p', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c0_."discr" AS discr_2 FROM "company_persons" c0_', + 'SELECT t0."id" AS c0, t0."name" AS c1, t0."discr" AS c2 FROM "company_persons" t0', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] ); } @@ -1478,7 +1478,7 @@ public function testInheritanceTypeJoinInChildClassWithDisabledForcePartialLoad( { $this->assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\Company\CompanyEmployee e', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, c2_."title" AS title_5, c0_."discr" AS discr_6, c0_."spouse_id" AS spouse_id_7, c2_."car_id" AS car_id_8 FROM "company_employees" c1_ INNER JOIN "company_persons" c0_ ON c1_."id" = c0_."id" LEFT JOIN "company_managers" c2_ ON c1_."id" = c2_."id"', + 'SELECT t0."id" AS c0, t0."name" AS c1, t1."salary" AS c2, t1."department" AS c3, t1."startDate" AS c4, t2."title" AS c5, t0."discr" AS c6, t0."spouse_id" AS c7, t2."car_id" AS c8 FROM "company_employees" t1 INNER JOIN "company_persons" t0 ON t1."id" = t0."id" LEFT JOIN "company_managers" t2 ON t1."id" = t2."id"', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] ); } @@ -1490,7 +1490,7 @@ public function testInheritanceTypeJoinInChildClassWithEnabledForcePartialLoad() { $this->assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\Company\CompanyEmployee e', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, c0_."discr" AS discr_5 FROM "company_employees" c1_ INNER JOIN "company_persons" c0_ ON c1_."id" = c0_."id"', + 'SELECT t0."id" AS c0, t0."name" AS c1, t1."salary" AS c2, t1."department" AS c3, t1."startDate" AS c4, t0."discr" AS c5 FROM "company_employees" t1 INNER JOIN "company_persons" t0 ON t1."id" = t0."id"', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] ); } @@ -1502,7 +1502,7 @@ public function testInheritanceTypeJoinInLeafClassWithDisabledForcePartialLoad() { $this->assertSqlGeneration( 'SELECT m FROM Doctrine\Tests\Models\Company\CompanyManager m', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, c2_."title" AS title_5, c0_."discr" AS discr_6, c0_."spouse_id" AS spouse_id_7, c2_."car_id" AS car_id_8 FROM "company_managers" c2_ INNER JOIN "company_employees" c1_ ON c2_."id" = c1_."id" INNER JOIN "company_persons" c0_ ON c2_."id" = c0_."id"', + 'SELECT t0."id" AS c0, t0."name" AS c1, t1."salary" AS c2, t1."department" AS c3, t1."startDate" AS c4, t2."title" AS c5, t0."discr" AS c6, t0."spouse_id" AS c7, t2."car_id" AS c8 FROM "company_managers" t2 INNER JOIN "company_employees" t1 ON t2."id" = t1."id" INNER JOIN "company_persons" t0 ON t2."id" = t0."id"', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] ); } @@ -1514,7 +1514,7 @@ public function testInheritanceTypeJoinInLeafClassWithEnabledForcePartialLoad() { $this->assertSqlGeneration( 'SELECT m FROM Doctrine\Tests\Models\Company\CompanyManager m', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, c2_."title" AS title_5, c0_."discr" AS discr_6 FROM "company_managers" c2_ INNER JOIN "company_employees" c1_ ON c2_."id" = c1_."id" INNER JOIN "company_persons" c0_ ON c2_."id" = c0_."id"', + 'SELECT t0."id" AS c0, t0."name" AS c1, t1."salary" AS c2, t1."department" AS c3, t1."startDate" AS c4, t2."title" AS c5, t0."discr" AS c6 FROM "company_managers" t2 INNER JOIN "company_employees" t1 ON t2."id" = t1."id" INNER JOIN "company_persons" t0 ON t2."id" = t0."id"', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] ); } @@ -1526,7 +1526,7 @@ public function testInheritanceTypeSingleTableInRootClassWithDisabledForcePartia { $this->assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c', - 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."fixPrice" AS fixPrice_2, c0_."hoursWorked" AS hoursWorked_3, c0_."pricePerHour" AS pricePerHour_4, c0_."maxPrice" AS maxPrice_5, c0_."discr" AS discr_6, c0_."salesPerson_id" AS salesPerson_id_7 FROM "company_contracts" c0_ WHERE c0_."discr" IN (\'fix\', \'flexible\', \'flexultra\')', + 'SELECT t0."id" AS c0, t0."completed" AS c1, t0."fixPrice" AS c2, t0."hoursWorked" AS c3, t0."pricePerHour" AS c4, t0."maxPrice" AS c5, t0."discr" AS c6, t0."salesPerson_id" AS c7 FROM "company_contracts" t0 WHERE t0."discr" IN (\'fix\', \'flexible\', \'flexultra\')', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] ); } @@ -1538,7 +1538,7 @@ public function testInheritanceTypeSingleTableInRootClassWithEnabledForcePartial { $this->assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c', - 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."fixPrice" AS fixPrice_2, c0_."hoursWorked" AS hoursWorked_3, c0_."pricePerHour" AS pricePerHour_4, c0_."maxPrice" AS maxPrice_5, c0_."discr" AS discr_6 FROM "company_contracts" c0_ WHERE c0_."discr" IN (\'fix\', \'flexible\', \'flexultra\')', + 'SELECT t0."id" AS c0, t0."completed" AS c1, t0."fixPrice" AS c2, t0."hoursWorked" AS c3, t0."pricePerHour" AS c4, t0."maxPrice" AS c5, t0."discr" AS c6 FROM "company_contracts" t0 WHERE t0."discr" IN (\'fix\', \'flexible\', \'flexultra\')', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] ); } @@ -1550,7 +1550,7 @@ public function testInheritanceTypeSingleTableInChildClassWithDisabledForceParti { $this->assertSqlGeneration( 'SELECT fc FROM Doctrine\Tests\Models\Company\CompanyFlexContract fc', - 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."hoursWorked" AS hoursWorked_2, c0_."pricePerHour" AS pricePerHour_3, c0_."maxPrice" AS maxPrice_4, c0_."discr" AS discr_5, c0_."salesPerson_id" AS salesPerson_id_6 FROM "company_contracts" c0_ WHERE c0_."discr" IN (\'flexible\', \'flexultra\')', + 'SELECT t0."id" AS c0, t0."completed" AS c1, t0."hoursWorked" AS c2, t0."pricePerHour" AS c3, t0."maxPrice" AS c4, t0."discr" AS c5, t0."salesPerson_id" AS c6 FROM "company_contracts" t0 WHERE t0."discr" IN (\'flexible\', \'flexultra\')', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] ); } @@ -1562,7 +1562,7 @@ public function testInheritanceTypeSingleTableInChildClassWithEnabledForcePartia { $this->assertSqlGeneration( 'SELECT fc FROM Doctrine\Tests\Models\Company\CompanyFlexContract fc', - 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."hoursWorked" AS hoursWorked_2, c0_."pricePerHour" AS pricePerHour_3, c0_."maxPrice" AS maxPrice_4, c0_."discr" AS discr_5 FROM "company_contracts" c0_ WHERE c0_."discr" IN (\'flexible\', \'flexultra\')', + 'SELECT t0."id" AS c0, t0."completed" AS c1, t0."hoursWorked" AS c2, t0."pricePerHour" AS c3, t0."maxPrice" AS c4, t0."discr" AS c5 FROM "company_contracts" t0 WHERE t0."discr" IN (\'flexible\', \'flexultra\')', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] ); } @@ -1574,7 +1574,7 @@ public function testInheritanceTypeSingleTableInLeafClassWithDisabledForcePartia { $this->assertSqlGeneration( 'SELECT fuc FROM Doctrine\Tests\Models\Company\CompanyFlexUltraContract fuc', - 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."hoursWorked" AS hoursWorked_2, c0_."pricePerHour" AS pricePerHour_3, c0_."maxPrice" AS maxPrice_4, c0_."discr" AS discr_5, c0_."salesPerson_id" AS salesPerson_id_6 FROM "company_contracts" c0_ WHERE c0_."discr" IN (\'flexultra\')', + 'SELECT t0."id" AS c0, t0."completed" AS c1, t0."hoursWorked" AS c2, t0."pricePerHour" AS c3, t0."maxPrice" AS c4, t0."discr" AS c5, t0."salesPerson_id" AS c6 FROM "company_contracts" t0 WHERE t0."discr" IN (\'flexultra\')', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] ); } @@ -1586,7 +1586,7 @@ public function testInheritanceTypeSingleTableInLeafClassWithEnabledForcePartial { $this->assertSqlGeneration( 'SELECT fuc FROM Doctrine\Tests\Models\Company\CompanyFlexUltraContract fuc', - 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."hoursWorked" AS hoursWorked_2, c0_."pricePerHour" AS pricePerHour_3, c0_."maxPrice" AS maxPrice_4, c0_."discr" AS discr_5 FROM "company_contracts" c0_ WHERE c0_."discr" IN (\'flexultra\')', + 'SELECT t0."id" AS c0, t0."completed" AS c1, t0."hoursWorked" AS c2, t0."pricePerHour" AS c3, t0."maxPrice" AS c4, t0."discr" AS c5 FROM "company_contracts" t0 WHERE t0."discr" IN (\'flexultra\')', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => true] ); } @@ -1598,7 +1598,7 @@ public function testSelfReferenceWithOneToOneDoesNotDuplicateAlias() { $this->assertSqlGeneration( 'SELECT p, pp FROM Doctrine\Tests\Models\Company\CompanyPerson p JOIN p.spouse pp', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."title" AS title_2, c2_."salary" AS salary_3, c2_."department" AS department_4, c2_."startDate" AS startDate_5, c3_."id" AS id_6, c3_."name" AS name_7, c4_."title" AS title_8, c5_."salary" AS salary_9, c5_."department" AS department_10, c5_."startDate" AS startDate_11, c0_."discr" AS discr_12, c0_."spouse_id" AS spouse_id_13, c1_."car_id" AS car_id_14, c3_."discr" AS discr_15, c3_."spouse_id" AS spouse_id_16, c4_."car_id" AS car_id_17 FROM "company_persons" c0_ LEFT JOIN "company_managers" c1_ ON c0_."id" = c1_."id" LEFT JOIN "company_employees" c2_ ON c0_."id" = c2_."id" INNER JOIN "company_persons" c3_ ON c0_."spouse_id" = c3_."id" LEFT JOIN "company_managers" c4_ ON c3_."id" = c4_."id" LEFT JOIN "company_employees" c5_ ON c3_."id" = c5_."id"', + 'SELECT t0."id" AS c0, t0."name" AS c1, t1."title" AS c2, t2."salary" AS c3, t2."department" AS c4, t2."startDate" AS c5, t3."id" AS c6, t3."name" AS c7, t4."title" AS c8, t5."salary" AS c9, t5."department" AS c10, t5."startDate" AS c11, t0."discr" AS c12, t0."spouse_id" AS c13, t1."car_id" AS c14, t3."discr" AS c15, t3."spouse_id" AS c16, t4."car_id" AS c17 FROM "company_persons" t0 LEFT JOIN "company_managers" t1 ON t0."id" = t1."id" LEFT JOIN "company_employees" t2 ON t0."id" = t2."id" INNER JOIN "company_persons" t3 ON t0."spouse_id" = t3."id" LEFT JOIN "company_managers" t4 ON t3."id" = t4."id" LEFT JOIN "company_employees" t5 ON t3."id" = t5."id"', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] ); } @@ -1610,7 +1610,7 @@ public function testAliasDoesNotExceedPlatformDefinedLength() { $this->assertSqlGeneration( 'SELECT m FROM ' . __NAMESPACE__ . '\\DDC1384Model m', - 'SELECT d0_."aVeryLongIdentifierThatShouldBeShortenedByTheSQLWalker_fooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo" AS ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo_0 FROM "DDC1384Model" d0_' + 'SELECT t0."aVeryLongIdentifierThatShouldBeShortenedByTheSQLWalker_fooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo" AS c0 FROM "DDC1384Model" t0' ); } @@ -1622,7 +1622,7 @@ public function testIssue331() { $this->assertSqlGeneration( 'SELECT e.name FROM Doctrine\Tests\Models\Company\CompanyEmployee e', - 'SELECT c0_."name" AS name_0 FROM "company_employees" c1_ INNER JOIN "company_persons" c0_ ON c1_."id" = c0_."id"' + 'SELECT t0."name" AS c0 FROM "company_employees" t1 INNER JOIN "company_persons" t0 ON t1."id" = t0."id"' ); } /** @@ -1632,7 +1632,7 @@ public function testForeignKeyAsPrimaryKeySubselect() { $this->assertSqlGeneration( 'SELECT s FROM Doctrine\Tests\Models\DDC117\DDC117Article s WHERE EXISTS (SELECT r FROM Doctrine\Tests\Models\DDC117\DDC117Reference r WHERE r.source = s)', - 'SELECT d0_."article_id" AS article_id_0, d0_."title" AS title_1 FROM "DDC117Article" d0_ WHERE EXISTS (SELECT d1_."source_id", d1_."target_id" FROM "DDC117Reference" d1_ WHERE d1_."source_id" = d0_."article_id")' + 'SELECT t0."article_id" AS c0, t0."title" AS c1 FROM "DDC117Article" t0 WHERE EXISTS (SELECT t1."source_id", t1."target_id" FROM "DDC117Reference" t1 WHERE t1."source_id" = t0."article_id")' ); } @@ -1643,12 +1643,12 @@ public function testSelectWithArithmeticExpressionBeforeField() { $this->assertSqlGeneration( 'SELECT - e.value AS value, e.id FROM ' . __NAMESPACE__ . '\DDC1474Entity e', - 'SELECT -d0_."value" AS sclr_0, d0_."id" AS id_1 FROM "DDC1474Entity" d0_' + 'SELECT -t0."value" AS c0, t0."id" AS c1 FROM "DDC1474Entity" t0' ); $this->assertSqlGeneration( 'SELECT e.id, + e.value AS value FROM ' . __NAMESPACE__ . '\DDC1474Entity e', - 'SELECT d0_."id" AS id_0, +d0_."value" AS sclr_1 FROM "DDC1474Entity" d0_' + 'SELECT t0."id" AS c0, +t0."value" AS c1 FROM "DDC1474Entity" t0' ); } @@ -1659,12 +1659,12 @@ public function testGroupByAllFieldsWhenObjectHasForeignKeys() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY u', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ GROUP BY c0_."id", c0_."status", c0_."username", c0_."name", c0_."email_id"' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 GROUP BY t0."id", t0."status", t0."username", t0."name", t0."email_id"' ); $this->assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\CMS\CmsEmployee e GROUP BY e', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1 FROM "cms_employees" c0_ GROUP BY c0_."id", c0_."name", c0_."spouse_id"' + 'SELECT t0."id" AS c0, t0."name" AS c1 FROM "cms_employees" t0 GROUP BY t0."id", t0."name", t0."spouse_id"' ); } @@ -1675,7 +1675,7 @@ public function testGroupBySupportsResultVariable() { $this->assertSqlGeneration( 'SELECT u, u.status AS st FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY st', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, c0_."status" AS status_4 FROM "cms_users" c0_ GROUP BY c0_."status"' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3, t0."status" AS c4 FROM "cms_users" t0 GROUP BY t0."status"' ); } @@ -1686,7 +1686,7 @@ public function testGroupBySupportsIdentificationVariable() { $this->assertSqlGeneration( 'SELECT u AS user FROM Doctrine\Tests\Models\CMS\CmsUser u GROUP BY user', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ GROUP BY id_0, status_1, username_2, name_3' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 GROUP BY c0, c1, c2, c3' ); } @@ -1697,19 +1697,19 @@ public function testSupportsBitComparison() { $this->assertSqlGeneration( 'SELECT BIT_OR(4,2), BIT_AND(4,2), u FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT (4 | 2) AS sclr_0, (4 & 2) AS sclr_1, c0_."id" AS id_2, c0_."status" AS status_3, c0_."username" AS username_4, c0_."name" AS name_5 FROM "cms_users" c0_' + 'SELECT (4 | 2) AS c0, (4 & 2) AS c1, t0."id" AS c2, t0."status" AS c3, t0."username" AS c4, t0."name" AS c5 FROM "cms_users" t0' ); $this->assertSqlGeneration( 'SELECT BIT_OR(u.id,2), BIT_AND(u.id,2) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE BIT_OR(u.id,2) > 0', - 'SELECT (c0_."id" | 2) AS sclr_0, (c0_."id" & 2) AS sclr_1 FROM "cms_users" c0_ WHERE (c0_."id" | 2) > 0' + 'SELECT (t0."id" | 2) AS c0, (t0."id" & 2) AS c1 FROM "cms_users" t0 WHERE (t0."id" | 2) > 0' ); $this->assertSqlGeneration( 'SELECT BIT_OR(u.id,2), BIT_AND(u.id,2) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE BIT_AND(u.id , 4) > 0', - 'SELECT (c0_."id" | 2) AS sclr_0, (c0_."id" & 2) AS sclr_1 FROM "cms_users" c0_ WHERE (c0_."id" & 4) > 0' + 'SELECT (t0."id" | 2) AS c0, (t0."id" & 2) AS c1 FROM "cms_users" t0 WHERE (t0."id" & 4) > 0' ); $this->assertSqlGeneration( 'SELECT BIT_OR(u.id,2), BIT_AND(u.id,2) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE BIT_OR(u.id , 2) > 0 OR BIT_AND(u.id , 4) > 0', - 'SELECT (c0_."id" | 2) AS sclr_0, (c0_."id" & 2) AS sclr_1 FROM "cms_users" c0_ WHERE (c0_."id" | 2) > 0 OR (c0_."id" & 4) > 0' + 'SELECT (t0."id" | 2) AS c0, (t0."id" & 2) AS c1 FROM "cms_users" t0 WHERE (t0."id" | 2) > 0 OR (t0."id" & 4) > 0' ); } @@ -1720,22 +1720,22 @@ public function testParenthesesOnTheLeftHandOfComparison() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u where ( (u.id + u.id) * u.id ) > 100', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE ((c0_."id" + c0_."id") * c0_."id") > 100' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE ((t0."id" + t0."id") * t0."id") > 100' ); $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u where (u.id + u.id) * u.id > 100', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE (c0_."id" + c0_."id") * c0_."id" > 100' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE (t0."id" + t0."id") * t0."id" > 100' ); $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u where 100 < (u.id + u.id) * u.id ', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE 100 < (c0_."id" + c0_."id") * c0_."id"' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE 100 < (t0."id" + t0."id") * t0."id"' ); } public function testSupportsParenthesisExpressionInSubSelect() { $this->assertSqlGeneration( 'SELECT u.id, (SELECT (1000*SUM(subU.id)/SUM(subU.id)) FROM Doctrine\Tests\Models\CMS\CmsUser subU where subU.id = u.id) AS subSelect FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT c0_."id" AS id_0, (SELECT (1000 * SUM(c1_."id") / SUM(c1_."id")) FROM "cms_users" c1_ WHERE c1_."id" = c0_."id") AS sclr_1 FROM "cms_users" c0_' + 'SELECT t0."id" AS c0, (SELECT (1000 * SUM(t1."id") / SUM(t1."id")) FROM "cms_users" t1 WHERE t1."id" = t0."id") AS c1 FROM "cms_users" t0' ); } @@ -1746,27 +1746,27 @@ public function testSupportsSubSqlFunction() { $this->assertSqlGeneration( 'SELECT u1 FROM Doctrine\Tests\Models\CMS\CmsUser u1 WHERE u1.name IN ( SELECT TRIM(u2.name) FROM Doctrine\Tests\Models\CMS\CmsUser u2 )', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."name" IN (SELECT TRIM(c1_."name") AS sclr_4 FROM "cms_users" c1_)' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE t0."name" IN (SELECT TRIM(t1."name") AS c4 FROM "cms_users" t1)' ); $this->assertSqlGeneration( 'SELECT u1 FROM Doctrine\Tests\Models\CMS\CmsUser u1 WHERE u1.name IN ( SELECT TRIM(u2.name) FROM Doctrine\Tests\Models\CMS\CmsUser u2 WHERE LOWER(u2.name) LIKE \'%fabio%\')', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."name" IN (SELECT TRIM(c1_."name") AS sclr_4 FROM "cms_users" c1_ WHERE LOWER(c1_."name") LIKE \'%fabio%\')' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE t0."name" IN (SELECT TRIM(t1."name") AS c4 FROM "cms_users" t1 WHERE LOWER(t1."name") LIKE \'%fabio%\')' ); $this->assertSqlGeneration( 'SELECT u1 FROM Doctrine\Tests\Models\CMS\CmsUser u1 WHERE u1.email IN ( SELECT TRIM(IDENTITY(u2.email)) FROM Doctrine\Tests\Models\CMS\CmsUser u2 )', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."email_id" IN (SELECT TRIM(c1_."email_id") AS sclr_4 FROM "cms_users" c1_)' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE t0."email_id" IN (SELECT TRIM(t1."email_id") AS c4 FROM "cms_users" t1)' ); $this->assertSqlGeneration( 'SELECT u1 FROM Doctrine\Tests\Models\CMS\CmsUser u1 WHERE u1.email IN ( SELECT IDENTITY(u2.email) FROM Doctrine\Tests\Models\CMS\CmsUser u2 )', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."email_id" IN (SELECT c1_."email_id" AS sclr_4 FROM "cms_users" c1_)' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE t0."email_id" IN (SELECT t1."email_id" AS c4 FROM "cms_users" t1)' ); $this->assertSqlGeneration( 'SELECT u1 FROM Doctrine\Tests\Models\CMS\CmsUser u1 WHERE COUNT(u1.id) = ( SELECT SUM(u2.id) FROM Doctrine\Tests\Models\CMS\CmsUser u2 )', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE COUNT(c0_."id") = (SELECT SUM(c1_."id") AS dctrn__1 FROM "cms_users" c1_)' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE COUNT(t0."id") = (SELECT SUM(t1."id") AS dctrn__1 FROM "cms_users" t1)' ); $this->assertSqlGeneration( 'SELECT u1 FROM Doctrine\Tests\Models\CMS\CmsUser u1 WHERE COUNT(u1.id) <= ( SELECT SUM(u2.id) + COUNT(u2.email) FROM Doctrine\Tests\Models\CMS\CmsUser u2 )', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE COUNT(c0_."id") <= (SELECT SUM(c1_."id") + COUNT(c1_."email_id") AS sclr_4 FROM "cms_users" c1_)' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE COUNT(t0."id") <= (SELECT SUM(t1."id") + COUNT(t1."email_id") AS c4 FROM "cms_users" t1)' ); } @@ -1777,32 +1777,32 @@ public function testSupportsNewOperator() { $this->assertSqlGeneration( 'SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(u.name, e.email, a.city) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a', - 'SELECT c0_."name" AS sclr_0, c1_."email" AS sclr_1, c2_."city" AS sclr_2 FROM "cms_users" c0_ INNER JOIN "cms_emails" c1_ ON c0_."email_id" = c1_."id" INNER JOIN "cms_addresses" c2_ ON c0_."id" = c2_."user_id"' + 'SELECT t0."name" AS c0, t1."email" AS c1, t2."city" AS c2 FROM "cms_users" t0 INNER JOIN "cms_emails" t1 ON t0."email_id" = t1."id" INNER JOIN "cms_addresses" t2 ON t0."id" = t2."user_id"' ); $this->assertSqlGeneration( 'SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(u.name, e.email, a.id + u.id) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a', - 'SELECT c0_."name" AS sclr_0, c1_."email" AS sclr_1, c2_."id" + c0_."id" AS sclr_2 FROM "cms_users" c0_ INNER JOIN "cms_emails" c1_ ON c0_."email_id" = c1_."id" INNER JOIN "cms_addresses" c2_ ON c0_."id" = c2_."user_id"' + 'SELECT t0."name" AS c0, t1."email" AS c1, t2."id" + t0."id" AS c2 FROM "cms_users" t0 INNER JOIN "cms_emails" t1 ON t0."email_id" = t1."id" INNER JOIN "cms_addresses" t2 ON t0."id" = t2."user_id"' ); $this->assertSqlGeneration( 'SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(u.name, e.email, a.city, COUNT(p)) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a JOIN u.phonenumbers p', - 'SELECT c0_."name" AS sclr_0, c1_."email" AS sclr_1, c2_."city" AS sclr_2, COUNT(c3_."phonenumber") AS sclr_3 FROM "cms_users" c0_ INNER JOIN "cms_emails" c1_ ON c0_."email_id" = c1_."id" INNER JOIN "cms_addresses" c2_ ON c0_."id" = c2_."user_id" INNER JOIN "cms_phonenumbers" c3_ ON c0_."id" = c3_."user_id"' + 'SELECT t0."name" AS c0, t1."email" AS c1, t2."city" AS c2, COUNT(t3."phonenumber") AS c3 FROM "cms_users" t0 INNER JOIN "cms_emails" t1 ON t0."email_id" = t1."id" INNER JOIN "cms_addresses" t2 ON t0."id" = t2."user_id" INNER JOIN "cms_phonenumbers" t3 ON t0."id" = t3."user_id"' ); $this->assertSqlGeneration( 'SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(u.name, e.email, a.city, COUNT(p) + u.id) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a JOIN u.phonenumbers p', - 'SELECT c0_."name" AS sclr_0, c1_."email" AS sclr_1, c2_."city" AS sclr_2, COUNT(c3_."phonenumber") + c0_."id" AS sclr_3 FROM "cms_users" c0_ INNER JOIN "cms_emails" c1_ ON c0_."email_id" = c1_."id" INNER JOIN "cms_addresses" c2_ ON c0_."id" = c2_."user_id" INNER JOIN "cms_phonenumbers" c3_ ON c0_."id" = c3_."user_id"' + 'SELECT t0."name" AS c0, t1."email" AS c1, t2."city" AS c2, COUNT(t3."phonenumber") + t0."id" AS c3 FROM "cms_users" t0 INNER JOIN "cms_emails" t1 ON t0."email_id" = t1."id" INNER JOIN "cms_addresses" t2 ON t0."id" = t2."user_id" INNER JOIN "cms_phonenumbers" t3 ON t0."id" = t3."user_id"' ); $this->assertSqlGeneration( 'SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(a.id, a.country, a.city), new Doctrine\Tests\Models\CMS\CmsAddressDTO(u.name, e.email) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a ORDER BY u.name', - 'SELECT c0_."id" AS sclr_0, c0_."country" AS sclr_1, c0_."city" AS sclr_2, c1_."name" AS sclr_3, c2_."email" AS sclr_4 FROM "cms_users" c1_ INNER JOIN "cms_emails" c2_ ON c1_."email_id" = c2_."id" INNER JOIN "cms_addresses" c0_ ON c1_."id" = c0_."user_id" ORDER BY c1_."name" ASC' + 'SELECT t0."id" AS c0, t0."country" AS c1, t0."city" AS c2, t1."name" AS c3, t2."email" AS c4 FROM "cms_users" t1 INNER JOIN "cms_emails" t2 ON t1."email_id" = t2."id" INNER JOIN "cms_addresses" t0 ON t1."id" = t0."user_id" ORDER BY t1."name" ASC' ); $this->assertSqlGeneration( 'SELECT new Doctrine\Tests\Models\CMS\CmsUserDTO(a.id, (SELECT 1 FROM Doctrine\Tests\Models\CMS\CmsUser su), a.country, a.city), new Doctrine\Tests\Models\CMS\CmsAddressDTO(u.name, e.email) FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.email e JOIN u.address a ORDER BY u.name', - 'SELECT c0_."id" AS sclr_0, (SELECT 1 AS sclr_2 FROM "cms_users" c1_) AS sclr_1, c0_."country" AS sclr_3, c0_."city" AS sclr_4, c2_."name" AS sclr_5, c3_."email" AS sclr_6 FROM "cms_users" c2_ INNER JOIN "cms_emails" c3_ ON c2_."email_id" = c3_."id" INNER JOIN "cms_addresses" c0_ ON c2_."id" = c0_."user_id" ORDER BY c2_."name" ASC' + 'SELECT t0."id" AS c0, (SELECT 1 AS c2 FROM "cms_users" t1) AS c1, t0."country" AS c3, t0."city" AS c4, t2."name" AS c5, t3."email" AS c6 FROM "cms_users" t2 INNER JOIN "cms_emails" t3 ON t2."email_id" = t3."id" INNER JOIN "cms_addresses" t0 ON t2."id" = t0."user_id" ORDER BY t2."name" ASC' ); } @@ -1813,37 +1813,37 @@ public function testWhereFunctionIsNullComparisonExpression() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE IDENTITY(u.email) IS NULL', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."email_id" IS NULL' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE t0."email_id" IS NULL' ); $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE NULLIF(u.name, \'FabioBatSilva\') IS NULL AND IDENTITY(u.email) IS NOT NULL', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE NULLIF(c0_."name", \'FabioBatSilva\') IS NULL AND c0_."email_id" IS NOT NULL' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE NULLIF(t0."name", \'FabioBatSilva\') IS NULL AND t0."email_id" IS NOT NULL' ); $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE IDENTITY(u.email) IS NOT NULL', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE c0_."email_id" IS NOT NULL' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE t0."email_id" IS NOT NULL' ); $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE NULLIF(u.name, \'FabioBatSilva\') IS NOT NULL', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE NULLIF(c0_."name", \'FabioBatSilva\') IS NOT NULL' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE NULLIF(t0."name", \'FabioBatSilva\') IS NOT NULL' ); $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE COALESCE(u.name, u.id) IS NOT NULL', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE COALESCE(c0_."name", c0_."id") IS NOT NULL' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE COALESCE(t0."name", t0."id") IS NOT NULL' ); $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE COALESCE(u.id, IDENTITY(u.email)) IS NOT NULL', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE COALESCE(c0_."id", c0_."email_id") IS NOT NULL' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE COALESCE(t0."id", t0."email_id") IS NOT NULL' ); $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE COALESCE(IDENTITY(u.email), NULLIF(u.name, \'FabioBatSilva\')) IS NOT NULL', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ WHERE COALESCE(c0_."email_id", NULLIF(c0_."name", \'FabioBatSilva\')) IS NOT NULL' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE COALESCE(t0."email_id", NULLIF(t0."name", \'FabioBatSilva\')) IS NOT NULL' ); } @@ -1857,7 +1857,7 @@ public function testCustomTypeValueSql() $this->assertSqlGeneration( 'SELECT p.customInteger FROM Doctrine\Tests\Models\CustomType\CustomTypeParent p WHERE p.id = 1', - 'SELECT -(c0_."customInteger") AS customInteger_0 FROM "customtype_parents" c0_ WHERE c0_."id" = 1' + 'SELECT -(t0."customInteger") AS c0 FROM "customtype_parents" t0 WHERE t0."id" = 1' ); } @@ -1871,7 +1871,7 @@ public function testCustomTypeValueSqlIgnoresIdentifierColumn() $this->assertSqlGeneration( 'SELECT p.id FROM Doctrine\Tests\Models\CustomType\CustomTypeParent p WHERE p.id = 1', - 'SELECT c0_."id" AS id_0 FROM "customtype_parents" c0_ WHERE c0_."id" = 1' + 'SELECT t0."id" AS c0 FROM "customtype_parents" t0 WHERE t0."id" = 1' ); } @@ -1885,7 +1885,7 @@ public function testCustomTypeValueSqlForAllFields() $this->assertSqlGeneration( 'SELECT p FROM Doctrine\Tests\Models\CustomType\CustomTypeParent p', - 'SELECT c0_."id" AS id_0, -(c0_."customInteger") AS customInteger_1 FROM "customtype_parents" c0_' + 'SELECT t0."id" AS c0, -(t0."customInteger") AS c1 FROM "customtype_parents" t0' ); } @@ -1899,7 +1899,7 @@ public function testCustomTypeValueSqlForPartialObject() $this->assertSqlGeneration( 'SELECT partial p.{id, customInteger} FROM Doctrine\Tests\Models\CustomType\CustomTypeParent p', - 'SELECT c0_."id" AS id_0, -(c0_."customInteger") AS customInteger_1 FROM "customtype_parents" c0_' + 'SELECT t0."id" AS c0, -(t0."customInteger") AS c1 FROM "customtype_parents" t0' ); } @@ -1910,7 +1910,7 @@ public function testMultipleFromAndInheritanceCondition() { $this->assertSqlGeneration( 'SELECT fix, flex FROM Doctrine\Tests\Models\Company\CompanyFixContract fix, Doctrine\Tests\Models\Company\CompanyFlexContract flex', - 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."fixPrice" AS fixPrice_2, c1_."id" AS id_3, c1_."completed" AS completed_4, c1_."hoursWorked" AS hoursWorked_5, c1_."pricePerHour" AS pricePerHour_6, c1_."maxPrice" AS maxPrice_7, c0_."discr" AS discr_8, c1_."discr" AS discr_9 FROM "company_contracts" c0_, "company_contracts" c1_ WHERE (c0_."discr" IN (\'fix\') AND c1_."discr" IN (\'flexible\', \'flexultra\'))' + 'SELECT t0."id" AS c0, t0."completed" AS c1, t0."fixPrice" AS c2, t1."id" AS c3, t1."completed" AS c4, t1."hoursWorked" AS c5, t1."pricePerHour" AS c6, t1."maxPrice" AS c7, t0."discr" AS c8, t1."discr" AS c9 FROM "company_contracts" t0, "company_contracts" t1 WHERE (t0."discr" IN (\'fix\') AND t1."discr" IN (\'flexible\', \'flexultra\'))' ); } @@ -1921,15 +1921,15 @@ public function testOrderByClauseSupportsSimpleArithmeticExpression() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY u.id + 1 ', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ ORDER BY c0_."id" + 1 ASC' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 ORDER BY t0."id" + 1 ASC' ); $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY ( ( (u.id + 1) * (u.id - 1) ) / 2)', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ ORDER BY (((c0_."id" + 1) * (c0_."id" - 1)) / 2) ASC' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 ORDER BY (((t0."id" + 1) * (t0."id" - 1)) / 2) ASC' ); $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY ((u.id + 5000) * u.id + 3) ', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ ORDER BY ((c0_."id" + 5000) * c0_."id" + 3) ASC' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 ORDER BY ((t0."id" + 5000) * t0."id" + 3) ASC' ); } @@ -1937,7 +1937,7 @@ public function testOrderByClauseSupportsFunction() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u ORDER BY CONCAT(u.username, u.name) ', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3 FROM "cms_users" c0_ ORDER BY c0_."username" || c0_."name" ASC' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 ORDER BY t0."username" || t0."name" ASC' ); } @@ -1948,17 +1948,17 @@ public function testStripNonAlphanumericCharactersFromAlias() { $this->assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\Generic\NonAlphaColumnsEntity e', - 'SELECT n0_."simple-entity-id" AS simpleentityid_0, n0_."simple-entity-value" AS simpleentityvalue_1 FROM "not-a-simple-entity" n0_' + 'SELECT t0."simple-entity-id" AS c0, t0."simple-entity-value" AS c1 FROM "not-a-simple-entity" t0' ); $this->assertSqlGeneration( 'SELECT e.value FROM Doctrine\Tests\Models\Generic\NonAlphaColumnsEntity e ORDER BY e.value', - 'SELECT n0_."simple-entity-value" AS simpleentityvalue_0 FROM "not-a-simple-entity" n0_ ORDER BY n0_."simple-entity-value" ASC' + 'SELECT t0."simple-entity-value" AS c0 FROM "not-a-simple-entity" t0 ORDER BY t0."simple-entity-value" ASC' ); $this->assertSqlGeneration( 'SELECT TRIM(e.value) FROM Doctrine\Tests\Models\Generic\NonAlphaColumnsEntity e ORDER BY e.value', - 'SELECT TRIM(n0_."simple-entity-value") AS sclr_0 FROM "not-a-simple-entity" n0_ ORDER BY n0_."simple-entity-value" ASC' + 'SELECT TRIM(t0."simple-entity-value") AS c0 FROM "not-a-simple-entity" t0 ORDER BY t0."simple-entity-value" ASC' ); } @@ -1969,17 +1969,17 @@ public function testColumnNameWithNumbersAndNonAlphanumericCharacters() { $this->assertSqlGeneration( 'SELECT e FROM Doctrine\Tests\Models\Quote\NumericEntity e', - 'SELECT t0_."1:1" AS 11_0, t0_."2:2" AS 22_1 FROM "table" t0_' + 'SELECT t0."1:1" AS c0, t0."2:2" AS c1 FROM "table" t0' ); $this->assertSqlGeneration( 'SELECT e.value FROM Doctrine\Tests\Models\Quote\NumericEntity e', - 'SELECT t0_."2:2" AS 22_0 FROM "table" t0_' + 'SELECT t0."2:2" AS c0 FROM "table" t0' ); $this->assertSqlGeneration( 'SELECT TRIM(e.value) FROM Doctrine\Tests\Models\Quote\NumericEntity e', - 'SELECT TRIM(t0_."2:2") AS sclr_0 FROM "table" t0_' + 'SELECT TRIM(t0."2:2") AS c0 FROM "table" t0' ); } @@ -1990,7 +1990,7 @@ public function testQuotedTableDeclaration() { $this->assertSqlGeneration( 'SELECT u FROM Doctrine\Tests\Models\Quote\User u', - 'SELECT q0_."user-id" AS userid_0, q0_."user-name" AS username_1 FROM "quote-user" q0_' + 'SELECT t0."user-id" AS c0, t0."user-name" AS c1 FROM "quote-user" t0' ); } @@ -2001,32 +2001,32 @@ public function testQuotedWalkJoinVariableDeclaration() { $this->assertSqlGeneration( 'SELECT u, a FROM Doctrine\Tests\Models\Quote\User u JOIN u.address a', - 'SELECT q0_."user-id" AS userid_0, q0_."user-name" AS username_1, q1_."address-id" AS addressid_2, q1_."address-zip" AS addresszip_3, q1_.type AS type_4 FROM "quote-user" q0_ INNER JOIN "quote-address" q1_ ON q0_."address-id" = q1_."address-id" AND q1_.type IN (\'simple\', \'full\')' + 'SELECT t0."user-id" AS c0, t0."user-name" AS c1, t1."address-id" AS c2, t1."address-zip" AS c3, t1."type" AS c4 FROM "quote-user" t0 INNER JOIN "quote-address" t1 ON t0."address-id" = t1."address-id" AND t1."type" IN (\'simple\', \'full\')' ); $this->assertSqlGeneration( 'SELECT u, p FROM Doctrine\Tests\Models\Quote\User u JOIN u.phones p', - 'SELECT q0_."user-id" AS userid_0, q0_."user-name" AS username_1, q1_."phone-number" AS phonenumber_2 FROM "quote-user" q0_ INNER JOIN "quote-phone" q1_ ON q0_."user-id" = q1_."user-id"' + 'SELECT t0."user-id" AS c0, t0."user-name" AS c1, t1."phone-number" AS c2 FROM "quote-user" t0 INNER JOIN "quote-phone" t1 ON t0."user-id" = t1."user-id"' ); $this->assertSqlGeneration( 'SELECT u, g FROM Doctrine\Tests\Models\Quote\User u JOIN u.groups g', - 'SELECT q0_."user-id" AS userid_0, q0_."user-name" AS username_1, q1_."group-id" AS groupid_2, q1_."group-name" AS groupname_3 FROM "quote-user" q0_ INNER JOIN "quote-users-groups" q2_ ON q0_."user-id" = q2_."user-id" INNER JOIN "quote-group" q1_ ON q1_."group-id" = q2_."group-id"' + 'SELECT t0."user-id" AS c0, t0."user-name" AS c1, t1."group-id" AS c2, t1."group-name" AS c3 FROM "quote-user" t0 INNER JOIN "quote-users-groups" t2 ON t0."user-id" = t2."user-id" INNER JOIN "quote-group" t1 ON t1."group-id" = t2."group-id"' ); $this->assertSqlGeneration( 'SELECT a, u FROM Doctrine\Tests\Models\Quote\Address a JOIN a.user u', - 'SELECT q0_."address-id" AS addressid_0, q0_."address-zip" AS addresszip_1, q1_."user-id" AS userid_2, q1_."user-name" AS username_3, q0_.type AS type_4 FROM "quote-address" q0_ INNER JOIN "quote-user" q1_ ON q0_."user-id" = q1_."user-id" WHERE q0_.type IN (\'simple\', \'full\')' + 'SELECT t0."address-id" AS c0, t0."address-zip" AS c1, t1."user-id" AS c2, t1."user-name" AS c3, t1."type" AS c4 FROM "quote-address" t0 INNER JOIN "quote-user" t1 ON t0."user-id" = t1."user-id" WHERE t1."type" IN (\'simple\', \'full\')' ); $this->assertSqlGeneration( 'SELECT g, u FROM Doctrine\Tests\Models\Quote\Group g JOIN g.users u', - 'SELECT q0_."group-id" AS groupid_0, q0_."group-name" AS groupname_1, q1_."user-id" AS userid_2, q1_."user-name" AS username_3 FROM "quote-group" q0_ INNER JOIN "quote-users-groups" q2_ ON q0_."group-id" = q2_."group-id" INNER JOIN "quote-user" q1_ ON q1_."user-id" = q2_."user-id"' + 'SELECT t0."group-id" AS c0, t0."group-name" AS c1, t1."user-id" AS c2, t1."user-name" AS c3 FROM "quote-group" t0 INNER JOIN "quote-users-groups" t2 ON t0."group-id" = t2."group-id" INNER JOIN "quote-user" t1 ON t1."user-id" = t2."user-id"' ); $this->assertSqlGeneration( 'SELECT g, p FROM Doctrine\Tests\Models\Quote\Group g JOIN g.parent p', - 'SELECT q0_."group-id" AS groupid_0, q0_."group-name" AS groupname_1, q1_."group-id" AS groupid_2, q1_."group-name" AS groupname_3 FROM "quote-group" q0_ INNER JOIN "quote-group" q1_ ON q0_."parent-id" = q1_."group-id"' + 'SELECT t0."group-id" AS c0, t0."group-name" AS c1, t1."group-id" AS c2, t1."group-name" AS c3 FROM "quote-group" t0 INNER JOIN "quote-group" t1 ON t0."parent-id" = t1."group-id"' ); } @@ -2037,17 +2037,17 @@ public function testCaseThenParameterArithmeticExpression() { $this->assertSqlGeneration( 'SELECT SUM(CASE WHEN e.salary <= :value THEN e.salary - :value WHEN e.salary >= :value THEN :value - e.salary ELSE 0 END) FROM Doctrine\Tests\Models\Company\CompanyEmployee e', - 'SELECT SUM(CASE WHEN c0_."salary" <= ? THEN c0_."salary" - ? WHEN c0_."salary" >= ? THEN ? - c0_."salary" ELSE 0 END) AS sclr_0 FROM "company_employees" c0_ INNER JOIN "company_persons" c1_ ON c0_."id" = c1_."id"' + 'SELECT SUM(CASE WHEN t0."salary" <= ? THEN t0."salary" - ? WHEN t0."salary" >= ? THEN ? - t0."salary" ELSE 0 END) AS c0 FROM "company_employees" t0 INNER JOIN "company_persons" t1 ON t0."id" = t1."id"' ); $this->assertSqlGeneration( 'SELECT SUM(CASE WHEN e.salary <= :value THEN e.salary - :value WHEN e.salary >= :value THEN :value - e.salary ELSE e.salary + 0 END) FROM Doctrine\Tests\Models\Company\CompanyEmployee e', - 'SELECT SUM(CASE WHEN c0_."salary" <= ? THEN c0_."salary" - ? WHEN c0_."salary" >= ? THEN ? - c0_."salary" ELSE c0_."salary" + 0 END) AS sclr_0 FROM "company_employees" c0_ INNER JOIN "company_persons" c1_ ON c0_."id" = c1_."id"' + 'SELECT SUM(CASE WHEN t0."salary" <= ? THEN t0."salary" - ? WHEN t0."salary" >= ? THEN ? - t0."salary" ELSE t0."salary" + 0 END) AS c0 FROM "company_employees" t0 INNER JOIN "company_persons" t1 ON t0."id" = t1."id"' ); $this->assertSqlGeneration( 'SELECT SUM(CASE WHEN e.salary <= :value THEN (e.salary - :value) WHEN e.salary >= :value THEN (:value - e.salary) ELSE (e.salary + :value) END) FROM Doctrine\Tests\Models\Company\CompanyEmployee e', - 'SELECT SUM(CASE WHEN c0_."salary" <= ? THEN (c0_."salary" - ?) WHEN c0_."salary" >= ? THEN (? - c0_."salary") ELSE (c0_."salary" + ?) END) AS sclr_0 FROM "company_employees" c0_ INNER JOIN "company_persons" c1_ ON c0_."id" = c1_."id"' + 'SELECT SUM(CASE WHEN t0."salary" <= ? THEN (t0."salary" - ?) WHEN t0."salary" >= ? THEN (? - t0."salary") ELSE (t0."salary" + ?) END) AS c0 FROM "company_employees" t0 INNER JOIN "company_persons" t1 ON t0."id" = t1."id"' ); } @@ -2058,17 +2058,17 @@ public function testCaseThenFunction() { $this->assertSqlGeneration( 'SELECT CASE WHEN LENGTH(u.name) <> 0 THEN CONCAT(u.id, u.name) ELSE u.id END AS name FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT CASE WHEN LENGTH(c0_."name") <> 0 THEN c0_."id" || c0_."name" ELSE c0_."id" END AS sclr_0 FROM "cms_users" c0_' + 'SELECT CASE WHEN LENGTH(t0."name") <> 0 THEN t0."id" || t0."name" ELSE t0."id" END AS c0 FROM "cms_users" t0' ); $this->assertSqlGeneration( 'SELECT CASE WHEN LENGTH(u.name) <> LENGTH(TRIM(u.name)) THEN TRIM(u.name) ELSE u.name END AS name FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT CASE WHEN LENGTH(c0_."name") <> LENGTH(TRIM(c0_."name")) THEN TRIM(c0_."name") ELSE c0_."name" END AS sclr_0 FROM "cms_users" c0_' + 'SELECT CASE WHEN LENGTH(t0."name") <> LENGTH(TRIM(t0."name")) THEN TRIM(t0."name") ELSE t0."name" END AS c0 FROM "cms_users" t0' ); $this->assertSqlGeneration( 'SELECT CASE WHEN LENGTH(u.name) > :value THEN SUBSTRING(u.name, 0, :value) ELSE TRIM(u.name) END AS name FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT CASE WHEN LENGTH(c0_."name") > ? THEN SUBSTRING(c0_."name" FROM 0 FOR ?) ELSE TRIM(c0_."name") END AS sclr_0 FROM "cms_users" c0_' + 'SELECT CASE WHEN LENGTH(t0."name") > ? THEN SUBSTRING(t0."name" FROM 0 FOR ?) ELSE TRIM(t0."name") END AS c0 FROM "cms_users" t0' ); } @@ -2081,12 +2081,12 @@ public function testSupportsMoreThanTwoParametersInConcatFunctionMySql() $this->assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, u.status, \'s\') = ?1', - 'SELECT c0_.`id` AS id_0 FROM `cms_users` c0_ WHERE CONCAT(c0_.`name`, c0_.`status`, \'s\') = ?' + 'SELECT t0.`id` AS c0 FROM `cms_users` t0 WHERE CONCAT(t0.`name`, t0.`status`, \'s\') = ?' ); $this->assertSqlGeneration( 'SELECT CONCAT(u.id, u.name, u.status) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1', - 'SELECT CONCAT(c0_.`id`, c0_.`name`, c0_.`status`) AS sclr_0 FROM `cms_users` c0_ WHERE c0_.`id` = ?' + 'SELECT CONCAT(t0.`id`, t0.`name`, t0.`status`) AS c0 FROM `cms_users` t0 WHERE t0.`id` = ?' ); } @@ -2099,12 +2099,12 @@ public function testSupportsMoreThanTwoParametersInConcatFunctionPgSql() $this->assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, u.status, \'s\') = ?1', - 'SELECT c0_."id" AS id_0 FROM "cms_users" c0_ WHERE c0_."name" || c0_."status" || \'s\' = ?' + 'SELECT t0."id" AS c0 FROM "cms_users" t0 WHERE t0."name" || t0."status" || \'s\' = ?' ); $this->assertSqlGeneration( 'SELECT CONCAT(u.id, u.name, u.status) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1', - 'SELECT c0_."id" || c0_."name" || c0_."status" AS sclr_0 FROM "cms_users" c0_ WHERE c0_."id" = ?' + 'SELECT t0."id" || t0."name" || t0."status" AS c0 FROM "cms_users" t0 WHERE t0."id" = ?' ); } @@ -2117,12 +2117,12 @@ public function testSupportsMoreThanTwoParametersInConcatFunctionSqlServer() $this->assertSqlGeneration( 'SELECT u.id FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE CONCAT(u.name, u.status, \'s\') = ?1', - 'SELECT c0_.[id] AS id_0 FROM [cms_users] c0_ WHERE (c0_.[name] + c0_.[status] + \'s\') = ?' + 'SELECT t0.[id] AS c0 FROM [cms_users] t0 WHERE (t0.[name] + t0.[status] + \'s\') = ?' ); $this->assertSqlGeneration( 'SELECT CONCAT(u.id, u.name, u.status) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1', - 'SELECT (c0_.[id] + c0_.[name] + c0_.[status]) AS sclr_0 FROM [cms_users] c0_ WHERE c0_.[id] = ?' + 'SELECT (t0.[id] + t0.[name] + t0.[status]) AS c0 FROM [cms_users] t0 WHERE t0.[id] = ?' ); } @@ -2133,17 +2133,17 @@ public function testArithmeticPriority() { $this->assertSqlGeneration( 'SELECT 100/(2*2) FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT 100 / (2 * 2) AS sclr_0 FROM "cms_users" c0_' + 'SELECT 100 / (2 * 2) AS c0 FROM "cms_users" t0' ); $this->assertSqlGeneration( 'SELECT (u.id / (u.id * 2)) FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT (c0_."id" / (c0_."id" * 2)) AS sclr_0 FROM "cms_users" c0_' + 'SELECT (t0."id" / (t0."id" * 2)) AS c0 FROM "cms_users" t0' ); $this->assertSqlGeneration( 'SELECT 100/(2*2) + (u.id / (u.id * 2)) FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE (u.id / (u.id * 2)) > 0', - 'SELECT 100 / (2 * 2) + (c0_."id" / (c0_."id" * 2)) AS sclr_0 FROM "cms_users" c0_ WHERE (c0_."id" / (c0_."id" * 2)) > 0' + 'SELECT 100 / (2 * 2) + (t0."id" / (t0."id" * 2)) AS c0 FROM "cms_users" t0 WHERE (t0."id" / (t0."id" * 2)) > 0' ); } @@ -2154,12 +2154,12 @@ public function testOrderByClauseShouldReplaceOrderByRelationMapping() { $this->assertSqlGeneration( 'SELECT r, b FROM Doctrine\Tests\Models\Routing\RoutingRoute r JOIN r.bookings b', - 'SELECT r0_."id" AS id_0, r1_."id" AS id_1, r1_."passengerName" AS passengerName_2 FROM "RoutingRoute" r0_ INNER JOIN "RoutingRouteBooking" r1_ ON r0_."id" = r1_."route_id" ORDER BY r1_."passengerName" ASC' + 'SELECT t0."id" AS c0, t1."id" AS c1, t1."passengerName" AS c2 FROM "RoutingRoute" t0 INNER JOIN "RoutingRouteBooking" t1 ON t0."id" = t1."route_id" ORDER BY t1."passengerName" ASC' ); $this->assertSqlGeneration( 'SELECT r, b FROM Doctrine\Tests\Models\Routing\RoutingRoute r JOIN r.bookings b ORDER BY b.passengerName DESC', - 'SELECT r0_."id" AS id_0, r1_."id" AS id_1, r1_."passengerName" AS passengerName_2 FROM "RoutingRoute" r0_ INNER JOIN "RoutingRouteBooking" r1_ ON r0_."id" = r1_."route_id" ORDER BY r1_."passengerName" DESC' + 'SELECT t0."id" AS c0, t1."id" AS c1, t1."passengerName" AS c2 FROM "RoutingRoute" t0 INNER JOIN "RoutingRouteBooking" t1 ON t0."id" = t1."route_id" ORDER BY t1."passengerName" DESC' ); } @@ -2170,12 +2170,12 @@ public function testHavingSupportIsNullExpression() { $this->assertSqlGeneration( 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING u.username IS NULL', - 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ HAVING c0_."username" IS NULL' + 'SELECT t0."name" AS c0 FROM "cms_users" t0 HAVING t0."username" IS NULL' ); $this->assertSqlGeneration( 'SELECT u.name FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING MAX(u.name) IS NULL', - 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ HAVING MAX(c0_."name") IS NULL' + 'SELECT t0."name" AS c0 FROM "cms_users" t0 HAVING MAX(t0."name") IS NULL' ); } @@ -2186,7 +2186,7 @@ public function testClassTableInheritanceJoinWithConditionAppliesToBaseTable() { $this->assertSqlGeneration( 'SELECT e.id FROM Doctrine\Tests\Models\Company\CompanyOrganization o JOIN o.events e WITH e.id = ?1', - 'SELECT c0_."id" AS id_0 FROM "company_organizations" c1_ INNER JOIN ("company_events" c0_ LEFT JOIN "company_auctions" c2_ ON c0_."id" = c2_."id" LEFT JOIN "company_raffles" c3_ ON c0_."id" = c3_."id") ON c1_."id" = c0_."org_id" AND (c0_."id" = ?)', + 'SELECT t0."id" AS c0 FROM "company_organizations" t1 INNER JOIN ("company_events" t0 LEFT JOIN "company_auctions" t2 ON t0."id" = t2."id" LEFT JOIN "company_raffles" t3 ON t0."id" = t3."id") ON t1."id" = t0."org_id" AND (t0."id" = ?)', [ORMQuery::HINT_FORCE_PARTIAL_LOAD => false] ); } @@ -2199,7 +2199,7 @@ public function testSingleTableInheritanceLeftJoinWithCondition() // Regression test for the bug $this->assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyEmployee e LEFT JOIN Doctrine\Tests\Models\Company\CompanyContract c WITH c.salesPerson = e.id', - 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."fixPrice" AS fixPrice_2, c0_."hoursWorked" AS hoursWorked_3, c0_."pricePerHour" AS pricePerHour_4, c0_."maxPrice" AS maxPrice_5, c0_."discr" AS discr_6 FROM "company_employees" c1_ INNER JOIN "company_persons" c2_ ON c1_."id" = c2_."id" LEFT JOIN "company_contracts" c0_ ON (c0_."salesPerson_id" = c2_."id") AND c0_."discr" IN (\'fix\', \'flexible\', \'flexultra\')' + 'SELECT t0."id" AS c0, t0."completed" AS c1, t0."fixPrice" AS c2, t0."hoursWorked" AS c3, t0."pricePerHour" AS c4, t0."maxPrice" AS c5, t0."discr" AS c6 FROM "company_employees" t1 INNER JOIN "company_persons" t2 ON t1."id" = t2."id" LEFT JOIN "company_contracts" t0 ON (t0."salesPerson_id" = t2."id") AND t0."discr" IN (\'fix\', \'flexible\', \'flexultra\')' ); } @@ -2211,7 +2211,7 @@ public function testSingleTableInheritanceLeftJoinWithConditionAndWhere() // Ensure other WHERE predicates are passed through to the main WHERE clause $this->assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyEmployee e LEFT JOIN Doctrine\Tests\Models\Company\CompanyContract c WITH c.salesPerson = e.id WHERE e.salary > 1000', - 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."fixPrice" AS fixPrice_2, c0_."hoursWorked" AS hoursWorked_3, c0_."pricePerHour" AS pricePerHour_4, c0_."maxPrice" AS maxPrice_5, c0_."discr" AS discr_6 FROM "company_employees" c1_ INNER JOIN "company_persons" c2_ ON c1_."id" = c2_."id" LEFT JOIN "company_contracts" c0_ ON (c0_."salesPerson_id" = c2_."id") AND c0_."discr" IN (\'fix\', \'flexible\', \'flexultra\') WHERE c1_."salary" > 1000' + 'SELECT t0."id" AS c0, t0."completed" AS c1, t0."fixPrice" AS c2, t0."hoursWorked" AS c3, t0."pricePerHour" AS c4, t0."maxPrice" AS c5, t0."discr" AS c6 FROM "company_employees" t1 INNER JOIN "company_persons" t2 ON t1."id" = t2."id" LEFT JOIN "company_contracts" t0 ON (t0."salesPerson_id" = t2."id") AND t0."discr" IN (\'fix\', \'flexible\', \'flexultra\') WHERE t1."salary" > 1000' ); } @@ -2223,7 +2223,7 @@ public function testSingleTableInheritanceInnerJoinWithCondition() // Test inner joins too $this->assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyEmployee e INNER JOIN Doctrine\Tests\Models\Company\CompanyContract c WITH c.salesPerson = e.id', - 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."fixPrice" AS fixPrice_2, c0_."hoursWorked" AS hoursWorked_3, c0_."pricePerHour" AS pricePerHour_4, c0_."maxPrice" AS maxPrice_5, c0_."discr" AS discr_6 FROM "company_employees" c1_ INNER JOIN "company_persons" c2_ ON c1_."id" = c2_."id" INNER JOIN "company_contracts" c0_ ON (c0_."salesPerson_id" = c2_."id") AND c0_."discr" IN (\'fix\', \'flexible\', \'flexultra\')' + 'SELECT t0."id" AS c0, t0."completed" AS c1, t0."fixPrice" AS c2, t0."hoursWorked" AS c3, t0."pricePerHour" AS c4, t0."maxPrice" AS c5, t0."discr" AS c6 FROM "company_employees" t1 INNER JOIN "company_persons" t2 ON t1."id" = t2."id" INNER JOIN "company_contracts" t0 ON (t0."salesPerson_id" = t2."id") AND t0."discr" IN (\'fix\', \'flexible\', \'flexultra\')' ); } @@ -2236,7 +2236,7 @@ public function testSingleTableInheritanceLeftJoinNonAssociationWithConditionAnd // the where clause when not joining onto that table $this->assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c LEFT JOIN Doctrine\Tests\Models\Company\CompanyEmployee e WITH e.id = c.salesPerson WHERE c.completed = true', - 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."fixPrice" AS fixPrice_2, c0_."hoursWorked" AS hoursWorked_3, c0_."pricePerHour" AS pricePerHour_4, c0_."maxPrice" AS maxPrice_5, c0_."discr" AS discr_6 FROM "company_contracts" c0_ LEFT JOIN "company_employees" c1_ INNER JOIN "company_persons" c2_ ON c1_."id" = c2_."id" ON (c2_."id" = c0_."salesPerson_id") WHERE (c0_."completed" = 1) AND c0_."discr" IN (\'fix\', \'flexible\', \'flexultra\')' + 'SELECT t0."id" AS c0, t0."completed" AS c1, t0."fixPrice" AS c2, t0."hoursWorked" AS c3, t0."pricePerHour" AS c4, t0."maxPrice" AS c5, t0."discr" AS c6 FROM "company_contracts" t0 LEFT JOIN "company_employees" t1 INNER JOIN "company_persons" t2 ON t1."id" = t2."id" ON (t2."id" = t0."salesPerson_id") WHERE (t0."completed" = 1) AND t0."discr" IN (\'fix\', \'flexible\', \'flexultra\')' ); } @@ -2250,7 +2250,7 @@ public function testSingleTableInheritanceJoinCreatesOnCondition() // via a join association $this->assertSqlGeneration( 'SELECT c FROM Doctrine\Tests\Models\Company\CompanyContract c JOIN c.salesPerson s WHERE c.completed = true', - 'SELECT c0_."id" AS id_0, c0_."completed" AS completed_1, c0_."fixPrice" AS fixPrice_2, c0_."hoursWorked" AS hoursWorked_3, c0_."pricePerHour" AS pricePerHour_4, c0_."maxPrice" AS maxPrice_5, c0_."discr" AS discr_6 FROM "company_contracts" c0_ INNER JOIN "company_employees" c1_ ON c0_."salesPerson_id" = c1_."id" LEFT JOIN "company_persons" c2_ ON c1_."id" = c2_."id" WHERE (c0_."completed" = 1) AND c0_."discr" IN (\'fix\', \'flexible\', \'flexultra\')' + 'SELECT t0."id" AS c0, t0."completed" AS c1, t0."fixPrice" AS c2, t0."hoursWorked" AS c3, t0."pricePerHour" AS c4, t0."maxPrice" AS c5, t0."discr" AS c6 FROM "company_contracts" t0 INNER JOIN "company_employees" t1 ON t0."salesPerson_id" = t1."id" LEFT JOIN "company_persons" t2 ON t1."id" = t2."id" WHERE (t0."completed" = 1) AND t0."discr" IN (\'fix\', \'flexible\', \'flexultra\')' ); } @@ -2264,7 +2264,7 @@ public function testSingleTableInheritanceCreatesOnConditionAndWhere() // into the ON clause of the join $this->assertSqlGeneration( 'SELECT e, COUNT(c) FROM Doctrine\Tests\Models\Company\CompanyEmployee e JOIN e.contracts c WHERE e.department = :department', - 'SELECT c0_."id" AS id_0, c0_."name" AS name_1, c1_."salary" AS salary_2, c1_."department" AS department_3, c1_."startDate" AS startDate_4, COUNT(c2_."id") AS sclr_5, c0_."discr" AS discr_6 FROM "company_employees" c1_ INNER JOIN "company_persons" c0_ ON c1_."id" = c0_."id" INNER JOIN "company_contract_employees" c3_ ON c1_."id" = c3_."employee_id" INNER JOIN "company_contracts" c2_ ON c2_."id" = c3_."contract_id" AND c2_."discr" IN (\'fix\', \'flexible\', \'flexultra\') WHERE c1_."department" = ?', + 'SELECT t0."id" AS c0, t0."name" AS c1, t1."salary" AS c2, t1."department" AS c3, t1."startDate" AS c4, COUNT(t2."id") AS c5, t0."discr" AS c6 FROM "company_employees" t1 INNER JOIN "company_persons" t0 ON t1."id" = t0."id" INNER JOIN "company_contract_employees" t3 ON t1."id" = t3."employee_id" INNER JOIN "company_contracts" t2 ON t2."id" = t3."contract_id" AND t2."discr" IN (\'fix\', \'flexible\', \'flexultra\') WHERE t1."department" = ?', [], ['department' => 'foobar'] ); @@ -2277,7 +2277,7 @@ public function testHavingSupportResultVariableInExpression() { $this->assertSqlGeneration( 'SELECT u.name AS foo FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING foo IN (?1)', - 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ HAVING name_0 IN (?)' + 'SELECT t0."name" AS c0 FROM "cms_users" t0 HAVING c0 IN (?)' ); } @@ -2288,7 +2288,7 @@ public function testHavingSupportResultVariableLikeExpression() { $this->assertSqlGeneration( 'SELECT u.name AS foo FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING foo LIKE \'3\'', - 'SELECT c0_."name" AS name_0 FROM "cms_users" c0_ HAVING name_0 LIKE \'3\'' + 'SELECT t0."name" AS c0 FROM "cms_users" t0 HAVING c0 LIKE \'3\'' ); } @@ -2299,7 +2299,7 @@ public function testHavingSupportResultVariableNullComparisonExpression() { $this->assertSqlGeneration( 'SELECT u AS user, SUM(a.id) AS score FROM Doctrine\Tests\Models\CMS\CmsUser u LEFT JOIN Doctrine\Tests\Models\CMS\CmsAddress a WITH a.user = u GROUP BY u HAVING score IS NOT NULL AND score >= 5', - 'SELECT c0_."id" AS id_0, c0_."status" AS status_1, c0_."username" AS username_2, c0_."name" AS name_3, SUM(c1_."id") AS sclr_4 FROM "cms_users" c0_ LEFT JOIN "cms_addresses" c1_ ON (c1_."user_id" = c0_."id") GROUP BY c0_."id", c0_."status", c0_."username", c0_."name", c0_."email_id" HAVING sclr_4 IS NOT NULL AND sclr_4 >= 5' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3, SUM(t1."id") AS c4 FROM "cms_users" t0 LEFT JOIN "cms_addresses" t1 ON (t1."user_id" = t0."id") GROUP BY t0."id", t0."status", t0."username", t0."name", t0."email_id" HAVING c4 IS NOT NULL AND c4 >= 5' ); } @@ -2310,7 +2310,7 @@ public function testHavingSupportResultVariableInAggregateFunction() { $this->assertSqlGeneration( 'SELECT COUNT(u.name) AS countName FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING countName IS NULL', - 'SELECT COUNT(c0_."name") AS sclr_0 FROM "cms_users" c0_ HAVING sclr_0 IS NULL' + 'SELECT COUNT(t0."name") AS c0 FROM "cms_users" t0 HAVING c0 IS NULL' ); } @@ -2324,7 +2324,7 @@ public function testHavingRegressionUsingVariableWithMathOperatorsExpression($op { $this->assertSqlGeneration( 'SELECT COUNT(u.name) AS countName FROM Doctrine\Tests\Models\CMS\CmsUser u HAVING 1 ' . $operator . ' countName > 0', - 'SELECT COUNT(c0_."name") AS sclr_0 FROM "cms_users" c0_ HAVING 1 ' . $operator . ' sclr_0 > 0' + 'SELECT COUNT(t0."name") AS c0 FROM "cms_users" t0 HAVING 1 ' . $operator . ' c0 > 0' ); } diff --git a/tests/Doctrine/Tests/ORM/Query/SqlWalkerTest.php b/tests/Doctrine/Tests/ORM/Query/SqlWalkerTest.php index 3758a227aa8..adc62ad2726 100644 --- a/tests/Doctrine/Tests/ORM/Query/SqlWalkerTest.php +++ b/tests/Doctrine/Tests/ORM/Query/SqlWalkerTest.php @@ -54,9 +54,9 @@ public function testGetSQLTableAliasIsSameForMultipleCalls($tableName) public function getColumnNamesAndSqlAliases() { return [ - ['aaaaa', 'a0_'], - ['table', 't0_'], - ['çtable', 't0_'], + ['aaaaa', 't0'], + ['table', 't0'], + ['çtable', 't0'], ]; } } diff --git a/tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php index 19033741347..8e9b143e857 100644 --- a/tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php @@ -169,7 +169,7 @@ public function testSubselectTableAliasReferencing() { self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\CMS\CmsUser u SET u.status = \'inactive\' WHERE SIZE(u.groups) = 10', - 'UPDATE "cms_users" SET "status" = \'inactive\' WHERE (SELECT COUNT(*) FROM "cms_users_groups" c0_ WHERE c0_."user_id" = "cms_users"."id") = 10' + 'UPDATE "cms_users" SET "status" = \'inactive\' WHERE (SELECT COUNT(*) FROM "cms_users_groups" t0 WHERE t0."user_id" = "cms_users"."id") = 10' ); } @@ -185,7 +185,7 @@ public function testUpdateWithSubselectAsNewValue() { self::assertSqlGeneration( 'UPDATE Doctrine\Tests\Models\Company\CompanyFixContract fc SET fc.fixPrice = (SELECT ce2.salary FROM Doctrine\Tests\Models\Company\CompanyEmployee ce2 WHERE ce2.id = 2) WHERE fc.id = 1', - 'UPDATE "company_contracts" SET "fixPrice" = (SELECT c0_."salary" FROM "company_employees" c0_ INNER JOIN "company_persons" c1_ ON c0_."id" = c1_."id" LEFT JOIN "company_managers" c2_ ON c0_."id" = c2_."id" WHERE c1_."id" = 2) WHERE ("id" = 1) AND "discr" IN (\'fix\')' + 'UPDATE "company_contracts" SET "fixPrice" = (SELECT t0."salary" FROM "company_employees" t0 INNER JOIN "company_persons" t1 ON t0."id" = t1."id" LEFT JOIN "company_managers" t2 ON t0."id" = t2."id" WHERE t1."id" = 2) WHERE ("id" = 1) AND "discr" IN (\'fix\')' ); } } diff --git a/tests/Doctrine/Tests/ORM/Tools/Pagination/CountOutputWalkerTest.php b/tests/Doctrine/Tests/ORM/Tools/Pagination/CountOutputWalkerTest.php index aecba5925e6..64cc66a9544 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Pagination/CountOutputWalkerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/CountOutputWalkerTest.php @@ -26,12 +26,12 @@ public function provideDataForCountQuery() // Multiple results and joins [ 'SELECT p, c, a FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p JOIN p.category c JOIN p.author a', - 'SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_0 FROM (SELECT b0_."id" AS id_0, c1_."id" AS id_1, a2_."id" AS id_2, a2_."name" AS name_3, b0_."author_id" AS author_id_4, b0_."category_id" AS category_id_5 FROM "BlogPost" b0_ INNER JOIN "Category" c1_ ON b0_."category_id" = c1_."id" INNER JOIN "Author" a2_ ON b0_."author_id" = a2_."id") dctrn_result) dctrn_table' + 'SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT c0 FROM (SELECT t0."id" AS c0, t1."id" AS c1, t2."id" AS c2, t2."name" AS c3, t0."author_id" AS c4, t0."category_id" AS c5 FROM "BlogPost" t0 INNER JOIN "Category" t1 ON t0."category_id" = t1."id" INNER JOIN "Author" t2 ON t0."author_id" = t2."id") dctrn_result) dctrn_table' ], // Mixed results with name [ 'SELECT a, sum(a.name) as foo FROM Doctrine\Tests\ORM\Tools\Pagination\Author a', - 'SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_0 FROM (SELECT a0_."id" AS id_0, a0_."name" AS name_1, sum(a0_."name") AS sclr_2 FROM "Author" a0_) dctrn_result) dctrn_table' + 'SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT c0 FROM (SELECT t0."id" AS c0, t0."name" AS c1, sum(t0."name") AS c2 FROM "Author" t0) dctrn_result) dctrn_table' ], // Grouping support [ @@ -41,7 +41,7 @@ public function provideDataForCountQuery() // Having support [ 'SELECT g, u, count(u.id) AS userCount FROM Doctrine\Tests\ORM\Tools\Pagination\Group g LEFT JOIN g.users u GROUP BY g.id HAVING userCount > 0', - 'SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_1 FROM (SELECT count(u0_."id") AS sclr_0, g1_."id" AS id_1, u0_."id" AS id_2 FROM "groups" g1_ LEFT JOIN "user_group" u2_ ON g1_."id" = u2_."group_id" LEFT JOIN "User" u0_ ON u0_."id" = u2_."user_id" GROUP BY g1_."id" HAVING sclr_0 > 0) dctrn_result) dctrn_table' + 'SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT c1 FROM (SELECT count(t0."id") AS c0, t1."id" AS c1, t0."id" AS c2 FROM "groups" t1 LEFT JOIN "user_group" t2 ON t1."id" = t2."group_id" LEFT JOIN "User" t0 ON t0."id" = t2."user_id" GROUP BY t1."id" HAVING c0 > 0) dctrn_result) dctrn_table' ], ]; } @@ -54,7 +54,7 @@ public function testCountQueryOrderBySqlServer() $this->testCountQuery( 'SELECT p FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p ORDER BY p.id', - 'SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_0 FROM (SELECT b0_.[id] AS id_0, b0_.[author_id] AS author_id_1, b0_.[category_id] AS category_id_2 FROM [BlogPost] b0_) dctrn_result) dctrn_table' + 'SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT c0 FROM (SELECT t0.[id] AS c0, t0.[author_id] AS c1, t0.[category_id] AS c2 FROM [BlogPost] t0) dctrn_result) dctrn_table' ); } } diff --git a/tests/Doctrine/Tests/ORM/Tools/Pagination/CountWalkerTest.php b/tests/Doctrine/Tests/ORM/Tools/Pagination/CountWalkerTest.php index 6620409928d..223a5f08ffa 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Pagination/CountWalkerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/CountWalkerTest.php @@ -31,27 +31,27 @@ public function provideDataForCountQuery() // Multiple results and joins [ 'SELECT p, c, a FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p JOIN p.category c JOIN p.author a', - 'SELECT count(DISTINCT b0_."id") AS sclr_0 FROM "BlogPost" b0_ INNER JOIN "Category" c1_ ON b0_."category_id" = c1_."id" INNER JOIN "Author" a2_ ON b0_."author_id" = a2_."id"' + 'SELECT count(DISTINCT t0."id") AS c0 FROM "BlogPost" t0 INNER JOIN "Category" t1 ON t0."category_id" = t1."id" INNER JOIN "Author" t2 ON t0."author_id" = t2."id"' ], // Mixed results with name [ 'SELECT a, sum(a.name) as foo FROM Doctrine\Tests\ORM\Tools\Pagination\Author a', - 'SELECT count(DISTINCT a0_."id") AS sclr_0 FROM "Author" a0_' + 'SELECT count(DISTINCT t0."id") AS c0 FROM "Author" t0' ], // Keeps group by [ 'SELECT b FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost b GROUP BY b.id', - 'SELECT count(DISTINCT b0_."id") AS sclr_0 FROM "BlogPost" b0_ GROUP BY b0_."id"' + 'SELECT count(DISTINCT t0."id") AS c0 FROM "BlogPost" t0 GROUP BY t0."id"' ], // Removes order by [ 'SELECT p, c, a FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p JOIN p.category c JOIN p.author a ORDER BY a.name', - 'SELECT count(DISTINCT b0_."id") AS sclr_0 FROM "BlogPost" b0_ INNER JOIN "Category" c1_ ON b0_."category_id" = c1_."id" INNER JOIN "Author" a2_ ON b0_."author_id" = a2_."id"' + 'SELECT count(DISTINCT t0."id") AS c0 FROM "BlogPost" t0 INNER JOIN "Category" t1 ON t0."category_id" = t1."id" INNER JOIN "Author" t2 ON t0."author_id" = t2."id"' ], // Arbitrary join [ 'SELECT p FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p LEFT JOIN Doctrine\Tests\ORM\Tools\Pagination\Category c WITH p.category = c', - 'SELECT count(DISTINCT b0_."id") AS sclr_0 FROM "BlogPost" b0_ LEFT JOIN "Category" c1_ ON (b0_."category_id" = c1_."id")' + 'SELECT count(DISTINCT t0."id") AS c0 FROM "BlogPost" t0 LEFT JOIN "Category" t1 ON (t0."category_id" = t1."id")' ], ]; } diff --git a/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryOutputWalkerTest.php b/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryOutputWalkerTest.php index c4b7fa730df..07f8bf8a841 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryOutputWalkerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryOutputWalkerTest.php @@ -19,7 +19,7 @@ public function testLimitSubquery() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT m0_."id" AS id_0, m0_."title" AS title_1, c1_."id" AS id_2, a2_."id" AS id_3, a2_."name" AS name_4, m0_."author_id" AS author_id_5, m0_."category_id" AS category_id_6 FROM "MyBlogPost" m0_ INNER JOIN "Category" c1_ ON m0_."category_id" = c1_."id" INNER JOIN "Author" a2_ ON m0_."author_id" = a2_."id") dctrn_result', + 'SELECT DISTINCT c0 FROM (SELECT t0."id" AS c0, t0."title" AS c1, t1."id" AS c2, t2."id" AS c3, t2."name" AS c4, t0."author_id" AS c5, t0."category_id" AS c6 FROM "MyBlogPost" t0 INNER JOIN "Category" t1 ON t0."category_id" = t1."id" INNER JOIN "Author" t2 ON t0."author_id" = t2."id") dctrn_result', $limitQuery->getSQL() ); } @@ -35,7 +35,7 @@ public function testLimitSubqueryWithSortPg() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0, MIN(sclr_5) AS dctrn_minrownum FROM (SELECT m0_."id" AS id_0, m0_."title" AS title_1, c1_."id" AS id_2, a2_."id" AS id_3, a2_."name" AS name_4, ROW_NUMBER() OVER(ORDER BY m0_."title" ASC) AS sclr_5, m0_."author_id" AS author_id_6, m0_."category_id" AS category_id_7 FROM "MyBlogPost" m0_ INNER JOIN "Category" c1_ ON m0_."category_id" = c1_."id" INNER JOIN "Author" a2_ ON m0_."author_id" = a2_."id") dctrn_result GROUP BY id_0 ORDER BY dctrn_minrownum ASC', + 'SELECT DISTINCT c0, MIN(c5) AS dctrn_minrownum FROM (SELECT t0."id" AS c0, t0."title" AS c1, t1."id" AS c2, t2."id" AS c3, t2."name" AS c4, ROW_NUMBER() OVER(ORDER BY t0."title" ASC) AS c5, t0."author_id" AS c6, t0."category_id" AS c7 FROM "MyBlogPost" t0 INNER JOIN "Category" t1 ON t0."category_id" = t1."id" INNER JOIN "Author" t2 ON t0."author_id" = t2."id") dctrn_result GROUP BY c0 ORDER BY dctrn_minrownum ASC', $limitQuery->getSQL() ); @@ -54,7 +54,7 @@ public function testLimitSubqueryWithScalarSortPg() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_1, MIN(sclr_3) AS dctrn_minrownum FROM (SELECT COUNT(g0_."id") AS sclr_0, u1_."id" AS id_1, g0_."id" AS id_2, ROW_NUMBER() OVER(ORDER BY COUNT(g0_."id") ASC) AS sclr_3 FROM "User" u1_ INNER JOIN "user_group" u2_ ON u1_."id" = u2_."user_id" INNER JOIN "groups" g0_ ON g0_."id" = u2_."group_id") dctrn_result GROUP BY id_1 ORDER BY dctrn_minrownum ASC', + 'SELECT DISTINCT c1, MIN(c3) AS dctrn_minrownum FROM (SELECT COUNT(t0."id") AS c0, t1."id" AS c1, t0."id" AS c2, ROW_NUMBER() OVER(ORDER BY COUNT(t0."id") ASC) AS c3 FROM "User" t1 INNER JOIN "user_group" t2 ON t1."id" = t2."user_id" INNER JOIN "groups" t0 ON t0."id" = t2."group_id") dctrn_result GROUP BY c1 ORDER BY dctrn_minrownum ASC', $limitQuery->getSQL() ); @@ -73,7 +73,7 @@ public function testLimitSubqueryWithMixedSortPg() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_1, MIN(sclr_3) AS dctrn_minrownum FROM (SELECT COUNT(g0_."id") AS sclr_0, u1_."id" AS id_1, g0_."id" AS id_2, ROW_NUMBER() OVER(ORDER BY COUNT(g0_."id") ASC, u1_."id" DESC) AS sclr_3 FROM "User" u1_ INNER JOIN "user_group" u2_ ON u1_."id" = u2_."user_id" INNER JOIN "groups" g0_ ON g0_."id" = u2_."group_id") dctrn_result GROUP BY id_1 ORDER BY dctrn_minrownum ASC', + 'SELECT DISTINCT c1, MIN(c3) AS dctrn_minrownum FROM (SELECT COUNT(t0."id") AS c0, t1."id" AS c1, t0."id" AS c2, ROW_NUMBER() OVER(ORDER BY COUNT(t0."id") ASC, t1."id" DESC) AS c3 FROM "User" t1 INNER JOIN "user_group" t2 ON t1."id" = t2."user_id" INNER JOIN "groups" t0 ON t0."id" = t2."group_id") dctrn_result GROUP BY c1 ORDER BY dctrn_minrownum ASC', $limitQuery->getSQL() ); @@ -92,7 +92,7 @@ public function testLimitSubqueryWithHiddenScalarSortPg() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_1, MIN(sclr_3) AS dctrn_minrownum FROM (SELECT COUNT(g0_."id") AS sclr_0, u1_."id" AS id_1, g0_."id" AS id_2, ROW_NUMBER() OVER(ORDER BY COUNT(g0_."id") ASC, u1_."id" DESC) AS sclr_3 FROM "User" u1_ INNER JOIN "user_group" u2_ ON u1_."id" = u2_."user_id" INNER JOIN "groups" g0_ ON g0_."id" = u2_."group_id") dctrn_result GROUP BY id_1 ORDER BY dctrn_minrownum ASC', + 'SELECT DISTINCT c1, MIN(c3) AS dctrn_minrownum FROM (SELECT COUNT(t0."id") AS c0, t1."id" AS c1, t0."id" AS c2, ROW_NUMBER() OVER(ORDER BY COUNT(t0."id") ASC, t1."id" DESC) AS c3 FROM "User" t1 INNER JOIN "user_group" t2 ON t1."id" = t2."user_id" INNER JOIN "groups" t0 ON t0."id" = t2."group_id") dctrn_result GROUP BY c1 ORDER BY dctrn_minrownum ASC', $limitQuery->getSQL() ); @@ -121,7 +121,7 @@ public function testLimitSubqueryWithSortOracle() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT ID_0, MIN(SCLR_5) AS dctrn_minrownum FROM (SELECT m0_."id" AS ID_0, m0_."title" AS TITLE_1, c1_."id" AS ID_2, a2_."id" AS ID_3, a2_."name" AS NAME_4, ROW_NUMBER() OVER(ORDER BY m0_."title" ASC) AS SCLR_5, m0_."author_id" AS AUTHOR_ID_6, m0_."category_id" AS CATEGORY_ID_7 FROM "MyBlogPost" m0_ INNER JOIN "Category" c1_ ON m0_."category_id" = c1_."id" INNER JOIN "Author" a2_ ON m0_."author_id" = a2_."id") dctrn_result GROUP BY ID_0 ORDER BY dctrn_minrownum ASC', + 'SELECT DISTINCT C0, MIN(C5) AS dctrn_minrownum FROM (SELECT t0."id" AS C0, t0."title" AS C1, t1."id" AS C2, t2."id" AS C3, t2."name" AS C4, ROW_NUMBER() OVER(ORDER BY t0."title" ASC) AS C5, t0."author_id" AS C6, t0."category_id" AS C7 FROM "MyBlogPost" t0 INNER JOIN "Category" t1 ON t0."category_id" = t1."id" INNER JOIN "Author" t2 ON t0."author_id" = t2."id") dctrn_result GROUP BY C0 ORDER BY dctrn_minrownum ASC', $limitQuery->getSQL() ); @@ -141,7 +141,7 @@ public function testLimitSubqueryWithScalarSortOracle() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT ID_1, MIN(SCLR_3) AS dctrn_minrownum FROM (SELECT COUNT(g0_."id") AS SCLR_0, u1_."id" AS ID_1, g0_."id" AS ID_2, ROW_NUMBER() OVER(ORDER BY COUNT(g0_."id") ASC) AS SCLR_3 FROM "User" u1_ INNER JOIN "user_group" u2_ ON u1_."id" = u2_."user_id" INNER JOIN "groups" g0_ ON g0_."id" = u2_."group_id") dctrn_result GROUP BY ID_1 ORDER BY dctrn_minrownum ASC', + 'SELECT DISTINCT C1, MIN(C3) AS dctrn_minrownum FROM (SELECT COUNT(t0."id") AS C0, t1."id" AS C1, t0."id" AS C2, ROW_NUMBER() OVER(ORDER BY COUNT(t0."id") ASC) AS C3 FROM "User" t1 INNER JOIN "user_group" t2 ON t1."id" = t2."user_id" INNER JOIN "groups" t0 ON t0."id" = t2."group_id") dctrn_result GROUP BY C1 ORDER BY dctrn_minrownum ASC', $limitQuery->getSQL() ); @@ -161,7 +161,7 @@ public function testLimitSubqueryWithMixedSortOracle() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT ID_1, MIN(SCLR_3) AS dctrn_minrownum FROM (SELECT COUNT(g0_."id") AS SCLR_0, u1_."id" AS ID_1, g0_."id" AS ID_2, ROW_NUMBER() OVER(ORDER BY COUNT(g0_."id") ASC, u1_."id" DESC) AS SCLR_3 FROM "User" u1_ INNER JOIN "user_group" u2_ ON u1_."id" = u2_."user_id" INNER JOIN "groups" g0_ ON g0_."id" = u2_."group_id") dctrn_result GROUP BY ID_1 ORDER BY dctrn_minrownum ASC', + 'SELECT DISTINCT C1, MIN(C3) AS dctrn_minrownum FROM (SELECT COUNT(t0."id") AS C0, t1."id" AS C1, t0."id" AS C2, ROW_NUMBER() OVER(ORDER BY COUNT(t0."id") ASC, t1."id" DESC) AS C3 FROM "User" t1 INNER JOIN "user_group" t2 ON t1."id" = t2."user_id" INNER JOIN "groups" t0 ON t0."id" = t2."group_id") dctrn_result GROUP BY C1 ORDER BY dctrn_minrownum ASC', $limitQuery->getSQL() ); @@ -180,7 +180,7 @@ public function testLimitSubqueryOracle() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT ID_0 FROM (SELECT m0_."id" AS ID_0, m0_."title" AS TITLE_1, c1_."id" AS ID_2, a2_."id" AS ID_3, a2_."name" AS NAME_4, m0_."author_id" AS AUTHOR_ID_5, m0_."category_id" AS CATEGORY_ID_6 FROM "MyBlogPost" m0_ INNER JOIN "Category" c1_ ON m0_."category_id" = c1_."id" INNER JOIN "Author" a2_ ON m0_."author_id" = a2_."id") dctrn_result', + 'SELECT DISTINCT C0 FROM (SELECT t0."id" AS C0, t0."title" AS C1, t1."id" AS C2, t2."id" AS C3, t2."name" AS C4, t0."author_id" AS C5, t0."category_id" AS C6 FROM "MyBlogPost" t0 INNER JOIN "Category" t1 ON t0."category_id" = t1."id" INNER JOIN "Author" t2 ON t0."author_id" = t2."id") dctrn_result', $limitQuery->getSQL() ); @@ -195,7 +195,7 @@ public function testCountQueryMixedResultsWithName() : void $limitQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT a0_."id" AS id_0, a0_."name" AS name_1, sum(a0_."name") AS sclr_2 FROM "Author" a0_) dctrn_result', + 'SELECT DISTINCT c0 FROM (SELECT t0."id" AS c0, t0."name" AS c1, sum(t0."name") AS c2 FROM "Author" t0) dctrn_result', $limitQuery->getSQL() ); } @@ -213,7 +213,7 @@ public function testCountQueryWithArithmeticOrderByCondition() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, (1 - 1000) * 1 FROM (SELECT a0_.`id` AS id_0, a0_.`name` AS name_1 FROM `Author` a0_) dctrn_result_inner ORDER BY (1 - 1000) * 1 DESC) dctrn_result', + 'SELECT DISTINCT c0 FROM (SELECT DISTINCT c0, (1 - 1000) * 1 FROM (SELECT t0.`id` AS c0, t0.`name` AS c1 FROM `Author` t0) dctrn_result_inner ORDER BY (1 - 1000) * 1 DESC) dctrn_result', $query->getSQL() ); } @@ -228,7 +228,7 @@ public function testCountQueryWithComplexScalarOrderByItem() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, image_height_2 * image_width_3 FROM (SELECT a0_.`id` AS id_0, a0_.`image` AS image_1, a0_.`image_height` AS image_height_2, a0_.`image_width` AS image_width_3, a0_.`image_alt_desc` AS image_alt_desc_4, a0_.`user_id` AS user_id_5 FROM `Avatar` a0_) dctrn_result_inner ORDER BY image_height_2 * image_width_3 DESC) dctrn_result', + 'SELECT DISTINCT c0 FROM (SELECT DISTINCT c0, c2 * c3 FROM (SELECT t0.`id` AS c0, t0.`image` AS c1, t0.`image_height` AS c2, t0.`image_width` AS c3, t0.`image_alt_desc` AS c4, t0.`user_id` AS c5 FROM `Avatar` t0) dctrn_result_inner ORDER BY c2 * c3 DESC) dctrn_result', $query->getSQL() ); } @@ -243,7 +243,7 @@ public function testCountQueryWithComplexScalarOrderByItemJoined() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, image_height_1 * image_width_2 FROM (SELECT u0_.`id` AS id_0, a1_.`image_height` AS image_height_1, a1_.`image_width` AS image_width_2, a1_.`user_id` AS user_id_3 FROM `User` u0_ INNER JOIN `Avatar` a1_ ON u0_.`id` = a1_.`user_id`) dctrn_result_inner ORDER BY image_height_1 * image_width_2 DESC) dctrn_result', + 'SELECT DISTINCT c0 FROM (SELECT DISTINCT c0, c1 * c2 FROM (SELECT t0.`id` AS c0, t1.`image_height` AS c1, t1.`image_width` AS c2, t1.`user_id` AS c3 FROM `User` t0 INNER JOIN `Avatar` t1 ON t0.`id` = t1.`user_id`) dctrn_result_inner ORDER BY c1 * c2 DESC) dctrn_result', $query->getSQL() ); } @@ -258,7 +258,7 @@ public function testCountQueryWithComplexScalarOrderByItemJoinedWithPartial() : $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, image_height_3 * image_width_4 FROM (SELECT u0_.`id` AS id_0, a1_.`id` AS id_1, a1_.`image_alt_desc` AS image_alt_desc_2, a1_.`image_height` AS image_height_3, a1_.`image_width` AS image_width_4, a1_.`user_id` AS user_id_5 FROM `User` u0_ INNER JOIN `Avatar` a1_ ON u0_.`id` = a1_.`user_id`) dctrn_result_inner ORDER BY image_height_3 * image_width_4 DESC) dctrn_result', + 'SELECT DISTINCT c0 FROM (SELECT DISTINCT c0, c3 * c4 FROM (SELECT t0.`id` AS c0, t1.`id` AS c1, t1.`image_alt_desc` AS c2, t1.`image_height` AS c3, t1.`image_width` AS c4, t1.`user_id` AS c5 FROM `User` t0 INNER JOIN `Avatar` t1 ON t0.`id` = t1.`user_id`) dctrn_result_inner ORDER BY c3 * c4 DESC) dctrn_result', $query->getSQL() ); } @@ -273,7 +273,7 @@ public function testCountQueryWithComplexScalarOrderByItemOracle() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT ID_0, MIN(SCLR_5) AS dctrn_minrownum FROM (SELECT a0_."id" AS ID_0, a0_."image" AS IMAGE_1, a0_."image_height" AS IMAGE_HEIGHT_2, a0_."image_width" AS IMAGE_WIDTH_3, a0_."image_alt_desc" AS IMAGE_ALT_DESC_4, ROW_NUMBER() OVER(ORDER BY a0_."image_height" * a0_."image_width" DESC) AS SCLR_5, a0_."user_id" AS USER_ID_6 FROM "Avatar" a0_) dctrn_result GROUP BY ID_0 ORDER BY dctrn_minrownum ASC', + 'SELECT DISTINCT C0, MIN(C5) AS dctrn_minrownum FROM (SELECT t0."id" AS C0, t0."image" AS C1, t0."image_height" AS C2, t0."image_width" AS C3, t0."image_alt_desc" AS C4, ROW_NUMBER() OVER(ORDER BY t0."image_height" * t0."image_width" DESC) AS C5, t0."user_id" AS C6 FROM "Avatar" t0) dctrn_result GROUP BY C0 ORDER BY dctrn_minrownum ASC', $query->getSQL() ); } @@ -290,7 +290,7 @@ public function testLimitSubqueryWithHiddenSelectionInOrderBy() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, name_2 FROM (SELECT a0_."id" AS id_0, a0_."name" AS name_1, a0_."name" AS name_2 FROM "Author" a0_) dctrn_result_inner ORDER BY name_2 DESC) dctrn_result', + 'SELECT DISTINCT c0 FROM (SELECT DISTINCT c0, c2 FROM (SELECT t0."id" AS c0, t0."name" AS c1, t0."name" AS c2 FROM "Author" t0) dctrn_result_inner ORDER BY c2 DESC) dctrn_result', $query->getSQL() ); } @@ -305,7 +305,7 @@ public function testLimitSubqueryWithColumnWithSortDirectionInNameMySql() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, image_alt_desc_4 FROM (SELECT a0_.`id` AS id_0, a0_.`image` AS image_1, a0_.`image_height` AS image_height_2, a0_.`image_width` AS image_width_3, a0_.`image_alt_desc` AS image_alt_desc_4, a0_.`user_id` AS user_id_5 FROM `Avatar` a0_) dctrn_result_inner ORDER BY image_alt_desc_4 DESC) dctrn_result', + 'SELECT DISTINCT c0 FROM (SELECT DISTINCT c0, c4 FROM (SELECT t0.`id` AS c0, t0.`image` AS c1, t0.`image_height` AS c2, t0.`image_width` AS c3, t0.`image_alt_desc` AS c4, t0.`user_id` AS c5 FROM `Avatar` t0) dctrn_result_inner ORDER BY c4 DESC) dctrn_result', $query->getSQL() ); } @@ -319,7 +319,7 @@ public function testLimitSubqueryWithOrderByInnerJoined() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, name_1 FROM (SELECT b0_."id" AS id_0, a1_."name" AS name_1, b0_."author_id" AS author_id_2, b0_."category_id" AS category_id_3 FROM "BlogPost" b0_ INNER JOIN "Author" a1_ ON b0_."author_id" = a1_."id") dctrn_result_inner ORDER BY name_1 ASC) dctrn_result', + 'SELECT DISTINCT c0 FROM (SELECT DISTINCT c0, c1 FROM (SELECT t0."id" AS c0, t1."name" AS c1, t0."author_id" AS c2, t0."category_id" AS c3 FROM "BlogPost" t0 INNER JOIN "Author" t1 ON t0."author_id" = t1."id") dctrn_result_inner ORDER BY c1 ASC) dctrn_result', $query->getSQL() ); } @@ -335,7 +335,7 @@ public function testLimitSubqueryWithOrderByAndSubSelectInWhereClauseMySql() : v $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0 FROM (SELECT b0_.`id` AS id_0, b0_.`author_id` AS author_id_1, b0_.`category_id` AS category_id_2 FROM `BlogPost` b0_ WHERE ((SELECT COUNT(b1_.`id`) AS sclr_3 FROM `BlogPost` b1_) = 1)) dctrn_result_inner ORDER BY id_0 DESC) dctrn_result', + 'SELECT DISTINCT c0 FROM (SELECT DISTINCT c0 FROM (SELECT t0.`id` AS c0, t0.`author_id` AS c1, t0.`category_id` AS c2 FROM `BlogPost` t0 WHERE ((SELECT COUNT(t1.`id`) AS c3 FROM `BlogPost` t1) = 1)) dctrn_result_inner ORDER BY c0 DESC) dctrn_result', $query->getSQL() ); } @@ -351,7 +351,7 @@ public function testLimitSubqueryWithOrderByAndSubSelectInWhereClausePgSql() : v $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0, MIN(sclr_1) AS dctrn_minrownum FROM (SELECT b0_."id" AS id_0, ROW_NUMBER() OVER(ORDER BY b0_."id" DESC) AS sclr_1, b0_."author_id" AS author_id_2, b0_."category_id" AS category_id_3 FROM "BlogPost" b0_ WHERE ((SELECT COUNT(b1_."id") AS sclr_4 FROM "BlogPost" b1_) = 1)) dctrn_result GROUP BY id_0 ORDER BY dctrn_minrownum ASC', + 'SELECT DISTINCT c0, MIN(c1) AS dctrn_minrownum FROM (SELECT t0."id" AS c0, ROW_NUMBER() OVER(ORDER BY t0."id" DESC) AS c1, t0."author_id" AS c2, t0."category_id" AS c3 FROM "BlogPost" t0 WHERE ((SELECT COUNT(t1."id") AS c4 FROM "BlogPost" t1) = 1)) dctrn_result GROUP BY c0 ORDER BY dctrn_minrownum ASC', $query->getSQL() ); } @@ -370,7 +370,7 @@ public function testLimitSubqueryOrderByFieldFromMappedSuperclassMySql() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0 FROM (SELECT b0_.`id` AS id_0, b0_.`name` AS name_1 FROM `Banner` b0_) dctrn_result_inner ORDER BY id_0 DESC) dctrn_result', + 'SELECT DISTINCT c0 FROM (SELECT DISTINCT c0 FROM (SELECT t0.`id` AS c0, t0.`name` AS c1 FROM `Banner` t0) dctrn_result_inner ORDER BY c0 DESC) dctrn_result', $query->getSQL() ); } @@ -395,7 +395,7 @@ public function testLimitSubqueryOrderBySubSelectOrderByExpressionMySql() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0 FROM (SELECT DISTINCT id_0, sclr_2 FROM (SELECT a0_.`id` AS id_0, a0_.`name` AS name_1, (SELECT MIN(m1_.`title`) AS sclr_3 FROM `MyBlogPost` m1_ WHERE m1_.`author_id` = a0_.`id`) AS sclr_2 FROM `Author` a0_) dctrn_result_inner ORDER BY sclr_2 DESC) dctrn_result', + 'SELECT DISTINCT c0 FROM (SELECT DISTINCT c0, c2 FROM (SELECT t0.`id` AS c0, t0.`name` AS c1, (SELECT MIN(t1.`title`) AS c3 FROM `MyBlogPost` t1 WHERE t1.`author_id` = t0.`id`) AS c2 FROM `Author` t0) dctrn_result_inner ORDER BY c2 DESC) dctrn_result', $query->getSQL() ); } @@ -420,7 +420,7 @@ public function testLimitSubqueryOrderBySubSelectOrderByExpressionPgSql() : void $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT id_0, MIN(sclr_4) AS dctrn_minrownum FROM (SELECT a0_."id" AS id_0, a0_."name" AS name_1, (SELECT MIN(m1_."title") AS sclr_3 FROM "MyBlogPost" m1_ WHERE m1_."author_id" = a0_."id") AS sclr_2, ROW_NUMBER() OVER(ORDER BY (SELECT MIN(m1_."title") AS sclr_5 FROM "MyBlogPost" m1_ WHERE m1_."author_id" = a0_."id") DESC) AS sclr_4 FROM "Author" a0_) dctrn_result GROUP BY id_0 ORDER BY dctrn_minrownum ASC', + 'SELECT DISTINCT c0, MIN(c4) AS dctrn_minrownum FROM (SELECT t0."id" AS c0, t0."name" AS c1, (SELECT MIN(t1."title") AS c3 FROM "MyBlogPost" t1 WHERE t1."author_id" = t0."id") AS c2, ROW_NUMBER() OVER(ORDER BY (SELECT MIN(t1."title") AS c5 FROM "MyBlogPost" t1 WHERE t1."author_id" = t0."id") DESC) AS c4 FROM "Author" t0) dctrn_result GROUP BY c0 ORDER BY dctrn_minrownum ASC', $query->getSQL() ); } @@ -445,7 +445,7 @@ public function testLimitSubqueryOrderBySubSelectOrderByExpressionOracle() : voi $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); self::assertSame( - 'SELECT DISTINCT ID_0, MIN(SCLR_4) AS dctrn_minrownum FROM (SELECT a0_."id" AS ID_0, a0_."name" AS NAME_1, (SELECT MIN(m1_."title") AS SCLR_3 FROM "MyBlogPost" m1_ WHERE m1_."author_id" = a0_."id") AS SCLR_2, ROW_NUMBER() OVER(ORDER BY (SELECT MIN(m1_."title") AS SCLR_5 FROM "MyBlogPost" m1_ WHERE m1_."author_id" = a0_."id") DESC) AS SCLR_4 FROM "Author" a0_) dctrn_result GROUP BY ID_0 ORDER BY dctrn_minrownum ASC', + 'SELECT DISTINCT C0, MIN(C4) AS dctrn_minrownum FROM (SELECT t0."id" AS C0, t0."name" AS C1, (SELECT MIN(t1."title") AS C3 FROM "MyBlogPost" t1 WHERE t1."author_id" = t0."id") AS C2, ROW_NUMBER() OVER(ORDER BY (SELECT MIN(t1."title") AS C5 FROM "MyBlogPost" t1 WHERE t1."author_id" = t0."id") DESC) AS C4 FROM "Author" t0) dctrn_result GROUP BY C0 ORDER BY dctrn_minrownum ASC', $query->getSQL() ); } diff --git a/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryWalkerTest.php b/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryWalkerTest.php index 3828a392802..aa4a7d9e2c8 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryWalkerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/LimitSubqueryWalkerTest.php @@ -19,7 +19,7 @@ public function testLimitSubquery() $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]); self::assertEquals( - 'SELECT DISTINCT m0_."id" AS id_0 FROM "MyBlogPost" m0_ INNER JOIN "Category" c1_ ON m0_."category_id" = c1_."id" INNER JOIN "Author" a2_ ON m0_."author_id" = a2_."id"', + 'SELECT DISTINCT t0."id" AS c0 FROM "MyBlogPost" t0 INNER JOIN "Category" t1 ON t0."category_id" = t1."id" INNER JOIN "Author" t2 ON t0."author_id" = t2."id"', $limitQuery->getSQL() ); } @@ -33,7 +33,7 @@ public function testLimitSubqueryWithSort() $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]); self::assertEquals( - 'SELECT DISTINCT m0_."id" AS id_0, m0_."title" AS title_1 FROM "MyBlogPost" m0_ INNER JOIN "Category" c1_ ON m0_."category_id" = c1_."id" INNER JOIN "Author" a2_ ON m0_."author_id" = a2_."id" ORDER BY m0_."title" ASC', + 'SELECT DISTINCT t0."id" AS c0, t0."title" AS c1 FROM "MyBlogPost" t0 INNER JOIN "Category" t1 ON t0."category_id" = t1."id" INNER JOIN "Author" t2 ON t0."author_id" = t2."id" ORDER BY t0."title" ASC', $limitQuery->getSQL() ); } @@ -47,7 +47,7 @@ public function testCountQuery_MixedResultsWithName() $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]); self::assertEquals( - 'SELECT DISTINCT a0_."id" AS id_0, sum(a0_."name") AS sclr_1 FROM "Author" a0_', + 'SELECT DISTINCT t0."id" AS c0, sum(t0."name") AS c1 FROM "Author" t0', $limitQuery->getSQL() ); } @@ -64,7 +64,7 @@ public function testLimitSubqueryWithSortOnAssociation() $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]); self::assertEquals( - 'SELECT DISTINCT m0_."id" AS id_0, m0_."author_id" AS sclr_1 FROM "MyBlogPost" m0_ ORDER BY m0_."author_id" ASC', + 'SELECT DISTINCT t0."id" AS c0, t0."author_id" AS c1 FROM "MyBlogPost" t0 ORDER BY t0."author_id" ASC', $limitQuery->getSQL() ); } @@ -81,7 +81,7 @@ public function testLimitSubqueryWithArbitraryJoin() $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]); self::assertEquals( - 'SELECT DISTINCT m0_."id" AS id_0 FROM "MyBlogPost" m0_ INNER JOIN "Category" c1_ ON (m0_."category_id" = c1_."id")', + 'SELECT DISTINCT t0."id" AS c0 FROM "MyBlogPost" t0 INNER JOIN "Category" t1 ON (t0."category_id" = t1."id")', $limitQuery->getSQL() ); } @@ -95,7 +95,7 @@ public function testLimitSubqueryWithSortWithArbitraryJoin() $limitQuery->setHint(Query::HINT_CUSTOM_TREE_WALKERS, [LimitSubqueryWalker::class]); self::assertEquals( - 'SELECT DISTINCT m0_."id" AS id_0, m0_."title" AS title_1 FROM "MyBlogPost" m0_ INNER JOIN "Category" c1_ ON (m0_."category_id" = c1_."id") ORDER BY m0_."title" ASC', + 'SELECT DISTINCT t0."id" AS c0, t0."title" AS c1 FROM "MyBlogPost" t0 INNER JOIN "Category" t1 ON (t0."category_id" = t1."id") ORDER BY t0."title" ASC', $limitQuery->getSQL() ); } diff --git a/tests/Doctrine/Tests/ORM/Tools/Pagination/WhereInWalkerTest.php b/tests/Doctrine/Tests/ORM/Tools/Pagination/WhereInWalkerTest.php index 98964f3ad3c..693c6a24c5c 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Pagination/WhereInWalkerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/WhereInWalkerTest.php @@ -20,7 +20,7 @@ public function testWhereInQuery_NoWhere() $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); self::assertEquals( - 'SELECT u0_."id" AS id_0, g1_."id" AS id_1 FROM "User" u0_ INNER JOIN "user_group" u2_ ON u0_."id" = u2_."user_id" INNER JOIN "groups" g1_ ON g1_."id" = u2_."group_id" WHERE u0_."id" IN (?)', + 'SELECT t0."id" AS c0, t1."id" AS c1 FROM "User" t0 INNER JOIN "user_group" t2 ON t0."id" = t2."user_id" INNER JOIN "groups" t1 ON t1."id" = t2."group_id" WHERE t0."id" IN (?)', $whereInQuery->getSQL() ); } @@ -35,7 +35,7 @@ public function testCountQuery_MixedResultsWithName() $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); self::assertEquals( - 'SELECT a0_."id" AS id_0, a0_."name" AS name_1, sum(a0_."name") AS sclr_2 FROM "Author" a0_ WHERE a0_."id" IN (?)', + 'SELECT t0."id" AS c0, t0."name" AS c1, sum(t0."name") AS c2 FROM "Author" t0 WHERE t0."id" IN (?)', $whereInQuery->getSQL() ); } @@ -50,7 +50,7 @@ public function testWhereInQuery_SingleWhere() $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); self::assertEquals( - 'SELECT u0_."id" AS id_0, g1_."id" AS id_1 FROM "User" u0_ INNER JOIN "user_group" u2_ ON u0_."id" = u2_."user_id" INNER JOIN "groups" g1_ ON g1_."id" = u2_."group_id" WHERE 1 = 1 AND u0_."id" IN (?)', + 'SELECT t0."id" AS c0, t1."id" AS c1 FROM "User" t0 INNER JOIN "user_group" t2 ON t0."id" = t2."user_id" INNER JOIN "groups" t1 ON t1."id" = t2."group_id" WHERE 1 = 1 AND t0."id" IN (?)', $whereInQuery->getSQL() ); } @@ -65,7 +65,7 @@ public function testWhereInQuery_MultipleWhereWithAnd() $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); self::assertEquals( - 'SELECT u0_."id" AS id_0, g1_."id" AS id_1 FROM "User" u0_ INNER JOIN "user_group" u2_ ON u0_."id" = u2_."user_id" INNER JOIN "groups" g1_ ON g1_."id" = u2_."group_id" WHERE 1 = 1 AND 2 = 2 AND u0_."id" IN (?)', + 'SELECT t0."id" AS c0, t1."id" AS c1 FROM "User" t0 INNER JOIN "user_group" t2 ON t0."id" = t2."user_id" INNER JOIN "groups" t1 ON t1."id" = t2."group_id" WHERE 1 = 1 AND 2 = 2 AND t0."id" IN (?)', $whereInQuery->getSQL() ); } @@ -80,7 +80,7 @@ public function testWhereInQuery_MultipleWhereWithOr() $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); self::assertEquals( - 'SELECT u0_."id" AS id_0, g1_."id" AS id_1 FROM "User" u0_ INNER JOIN "user_group" u2_ ON u0_."id" = u2_."user_id" INNER JOIN "groups" g1_ ON g1_."id" = u2_."group_id" WHERE (1 = 1 OR 2 = 2) AND u0_."id" IN (?)', + 'SELECT t0."id" AS c0, t1."id" AS c1 FROM "User" t0 INNER JOIN "user_group" t2 ON t0."id" = t2."user_id" INNER JOIN "groups" t1 ON t1."id" = t2."group_id" WHERE (1 = 1 OR 2 = 2) AND t0."id" IN (?)', $whereInQuery->getSQL() ); } @@ -95,7 +95,7 @@ public function testWhereInQuery_MultipleWhereWithMixed_1() $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); self::assertEquals( - 'SELECT u0_."id" AS id_0, g1_."id" AS id_1 FROM "User" u0_ INNER JOIN "user_group" u2_ ON u0_."id" = u2_."user_id" INNER JOIN "groups" g1_ ON g1_."id" = u2_."group_id" WHERE (1 = 1 OR 2 = 2) AND 3 = 3 AND u0_."id" IN (?)', + 'SELECT t0."id" AS c0, t1."id" AS c1 FROM "User" t0 INNER JOIN "user_group" t2 ON t0."id" = t2."user_id" INNER JOIN "groups" t1 ON t1."id" = t2."group_id" WHERE (1 = 1 OR 2 = 2) AND 3 = 3 AND t0."id" IN (?)', $whereInQuery->getSQL() ); } @@ -110,7 +110,7 @@ public function testWhereInQuery_MultipleWhereWithMixed_2() $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); self::assertEquals( - 'SELECT u0_."id" AS id_0, g1_."id" AS id_1 FROM "User" u0_ INNER JOIN "user_group" u2_ ON u0_."id" = u2_."user_id" INNER JOIN "groups" g1_ ON g1_."id" = u2_."group_id" WHERE (1 = 1 AND 2 = 2 OR 3 = 3) AND u0_."id" IN (?)', + 'SELECT t0."id" AS c0, t1."id" AS c1 FROM "User" t0 INNER JOIN "user_group" t2 ON t0."id" = t2."user_id" INNER JOIN "groups" t1 ON t1."id" = t2."group_id" WHERE (1 = 1 AND 2 = 2 OR 3 = 3) AND t0."id" IN (?)', $whereInQuery->getSQL() ); } @@ -125,7 +125,7 @@ public function testWhereInQuery_WhereNot() $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); self::assertEquals( - 'SELECT u0_."id" AS id_0, g1_."id" AS id_1 FROM "User" u0_ INNER JOIN "user_group" u2_ ON u0_."id" = u2_."user_id" INNER JOIN "groups" g1_ ON g1_."id" = u2_."group_id" WHERE (NOT 1 = 2) AND u0_."id" IN (?)', + 'SELECT t0."id" AS c0, t1."id" AS c1 FROM "User" t0 INNER JOIN "user_group" t2 ON t0."id" = t2."user_id" INNER JOIN "groups" t1 ON t1."id" = t2."group_id" WHERE (NOT 1 = 2) AND t0."id" IN (?)', $whereInQuery->getSQL() ); } @@ -142,7 +142,7 @@ public function testWhereInQueryWithArbitraryJoin_NoWhere() $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); self::assertEquals( - 'SELECT b0_."id" AS id_0, b0_."author_id" AS author_id_1, b0_."category_id" AS category_id_2 FROM "BlogPost" b0_ INNER JOIN "Category" c1_ ON (b0_."category_id" = c1_."id") WHERE b0_."id" IN (?)', + 'SELECT t0."id" AS c0, t0."author_id" AS c1, t0."category_id" AS c2 FROM "BlogPost" t0 INNER JOIN "Category" t1 ON (t0."category_id" = t1."id") WHERE t0."id" IN (?)', $whereInQuery->getSQL() ); } @@ -156,7 +156,7 @@ public function testWhereInQueryWithArbitraryJoin_SingleWhere() $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_ID_COUNT, 10); self::assertEquals( - 'SELECT b0_."id" AS id_0, b0_."author_id" AS author_id_1, b0_."category_id" AS category_id_2 FROM "BlogPost" b0_ INNER JOIN "Category" c1_ ON (b0_."category_id" = c1_."id") WHERE 1 = 1 AND b0_."id" IN (?)', + 'SELECT t0."id" AS c0, t0."author_id" AS c1, t0."category_id" AS c2 FROM "BlogPost" t0 INNER JOIN "Category" t1 ON (t0."category_id" = t1."id") WHERE 1 = 1 AND t0."id" IN (?)', $whereInQuery->getSQL() ); } From 96727598ff854149e0968eebb3e8f75a8ad358dc Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 13 Mar 2017 17:36:53 -0400 Subject: [PATCH 112/275] Ignore .iml file --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index d2f5f690158..a7e9f0bfc0b 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ lib/api/ lib/Doctrine/Common lib/Doctrine/DBAL /.settings/ +*.iml .buildpath .project .idea From 14b2f7d9f0633b7c91ea54d49294a6bf6a3318fc Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Tue, 14 Mar 2017 11:06:52 -0400 Subject: [PATCH 113/275] Removed ClassMetadata::reflFields, delegating the work to Property instances --- lib/Doctrine/ORM/Cache/DefaultQueryCache.php | 2 +- .../ORM/Internal/Hydration/ObjectHydrator.php | 73 +++--- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 88 ++----- .../ORM/Mapping/ClassMetadataFactory.php | 4 - lib/Doctrine/ORM/PersistentCollection.php | 14 +- .../Entity/BasicEntityPersister.php | 63 ++--- .../Entity/JoinedSubclassPersister.php | 26 +- lib/Doctrine/ORM/Proxy/ProxyFactory.php | 11 +- .../ORM/Sequencing/AssignedGenerator.php | 9 +- .../ORM/Tools/Pagination/WhereInWalker.php | 1 + lib/Doctrine/ORM/UnitOfWork.php | 97 ++++---- .../Tests/ORM/Cache/DefaultQueryCacheTest.php | 228 +++++++++--------- .../ORM/Functional/Ticket/DDC168Test.php | 4 +- .../Mapping/BasicInheritanceMappingTest.php | 15 -- .../Mapping/ClassMetadataLoadEventTest.php | 11 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 2 - 16 files changed, 304 insertions(+), 344 deletions(-) diff --git a/lib/Doctrine/ORM/Cache/DefaultQueryCache.php b/lib/Doctrine/ORM/Cache/DefaultQueryCache.php index 3ade298e68f..9919be05710 100644 --- a/lib/Doctrine/ORM/Cache/DefaultQueryCache.php +++ b/lib/Doctrine/ORM/Cache/DefaultQueryCache.php @@ -428,7 +428,7 @@ private function getAssociationPathValue($value, array $path) $mapping = array_shift($path); $metadata = $this->em->getClassMetadata($mapping['class']); $association = $metadata->associationMappings[$mapping['field']]; - $value = $metadata->getFieldValue($value, $mapping['field']); + $value = $association->getValue($value); if ($value === null) { return null; diff --git a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php index 36ee43f74d7..53e8cd81f72 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php @@ -185,9 +185,9 @@ protected function hydrateAllData() */ private function initRelatedCollection($entity, $class, $fieldName, $parentDqlAlias) { - $oid = spl_object_hash($entity); - $relation = $class->associationMappings[$fieldName]; - $value = $class->reflFields[$fieldName]->getValue($entity); + $oid = spl_object_hash($entity); + $association = $class->associationMappings[$fieldName]; + $value = $association->getValue($entity); if ($value === null || is_array($value)) { $value = new ArrayCollection((array) $value); @@ -195,12 +195,12 @@ private function initRelatedCollection($entity, $class, $fieldName, $parentDqlAl if (! $value instanceof PersistentCollection) { $value = new PersistentCollection( - $this->em, $this->metadataCache[$relation->getTargetEntity()], $value + $this->em, $this->metadataCache[$association->getTargetEntity()], $value ); - $value->setOwner($entity, $relation); + $value->setOwner($entity, $association); - $class->reflFields[$fieldName]->setValue($entity, $value); + $association->setValue($entity, $value); $this->uow->setOriginalEntityProperty($oid, $fieldName, $value); $this->initializedCollections[$oid . $fieldName] = $value; @@ -352,15 +352,14 @@ protected function hydrateRowData(array $row, array &$result) $path = $parentAlias . '.' . $dqlAlias; // We have a RIGHT JOIN result here. Doctrine cannot hydrate RIGHT JOIN Object-Graphs - if ( ! isset($nonemptyComponents[$parentAlias])) { + if (! isset($nonemptyComponents[$parentAlias])) { // TODO: Add special case code where we hydrate the right join objects into identity map at least continue; } - $parentClass = $this->metadataCache[$this->rsm->aliasMap[$parentAlias]]; - $relationField = $this->rsm->relationMap[$dqlAlias]; - $relation = $parentClass->associationMappings[$relationField]; - $reflField = $parentClass->reflFields[$relationField]; + $parentClass = $this->metadataCache[$this->rsm->aliasMap[$parentAlias]]; + $relationField = $this->rsm->relationMap[$dqlAlias]; + $association = $parentClass->associationMappings[$relationField]; // Get a reference to the parent object to which the joined element belongs. if ($this->rsm->isMixed && isset($this->rootAliases[$parentAlias])) { @@ -384,15 +383,15 @@ protected function hydrateRowData(array $row, array &$result) $oid = spl_object_hash($parentObject); // Check the type of the relation (many or single-valued) - if (! ($relation instanceof ToOneAssociationMetadata)) { + if (! ($association instanceof ToOneAssociationMetadata)) { // PATH A: Collection-valued association - $reflFieldValue = $reflField->getValue($parentObject); + $reflFieldValue = $association->getValue($parentObject); if (isset($nonemptyComponents[$dqlAlias])) { $collKey = $oid . $relationField; if (isset($this->initializedCollections[$collKey])) { $reflFieldValue = $this->initializedCollections[$collKey]; - } else if ( ! isset($this->existingCollections[$collKey])) { + } else if (! isset($this->existingCollections[$collKey])) { $reflFieldValue = $this->initRelatedCollection($parentObject, $parentClass, $relationField, $parentAlias); } @@ -400,7 +399,7 @@ protected function hydrateRowData(array $row, array &$result) $index = $indexExists ? $this->identifierMap[$path][$id[$parentAlias]][$id[$dqlAlias]] : false; $indexIsValid = $index !== false ? isset($reflFieldValue[$index]) : false; - if ( ! $indexExists || ! $indexIsValid) { + if (! $indexExists || ! $indexIsValid) { if (isset($this->existingCollections[$collKey])) { // Collection exists, only look for the element in the identity map. if ($element = $this->getEntityFromIdentityMap($entityName, $data)) { @@ -434,46 +433,56 @@ protected function hydrateRowData(array $row, array &$result) } } else { // PATH B: Single-valued association - $reflFieldValue = $reflField->getValue($parentObject); + $reflFieldValue = $association->getValue($parentObject); - if ( ! $reflFieldValue || isset($this->hints[Query::HINT_REFRESH]) || ($reflFieldValue instanceof Proxy && !$reflFieldValue->__isInitialized__)) { + if (! $reflFieldValue || isset($this->hints[Query::HINT_REFRESH]) || + ($reflFieldValue instanceof Proxy && ! $reflFieldValue->__isInitialized__)) { // we only need to take action if this value is null, // we refresh the entity or its an uninitialized proxy. if (isset($nonemptyComponents[$dqlAlias])) { $element = $this->getEntity($data, $dqlAlias); - $reflField->setValue($parentObject, $element); + $association->setValue($parentObject, $element); $this->uow->setOriginalEntityProperty($oid, $relationField, $element); - $mappedBy = $relation->getMappedBy(); - $targetClass = $this->metadataCache[$relation->getTargetEntity()]; + $mappedBy = $association->getMappedBy(); + $targetClass = $this->metadataCache[$association->getTargetEntity()]; - if ($relation->isOwningSide()) { + if ($association->isOwningSide()) { // TODO: Just check hints['fetched'] here? // If there is an inverse mapping on the target class its bidirectional - if ($relation->getInversedBy()) { - $inverseAssoc = $targetClass->associationMappings[$relation->getInversedBy()]; + if ($association->getInversedBy()) { + $inverseAssociation = $targetClass->associationMappings[$association->getInversedBy()]; - if ($inverseAssoc instanceof ToOneAssociationMetadata) { - $targetClass->reflFields[$inverseAssoc->getName()]->setValue($element, $parentObject); - $this->uow->setOriginalEntityProperty(spl_object_hash($element), $inverseAssoc->getName(), $parentObject); + if ($inverseAssociation instanceof ToOneAssociationMetadata) { + $inverseAssociation->setValue($element, $parentObject); + + $this->uow->setOriginalEntityProperty( + spl_object_hash($element), + $inverseAssociation->getName(), + $parentObject + ); } - } else if ($parentClass === $targetClass && $mappedBy) { - // Special case: bi-directional self-referencing one-one on the same class - $targetClass->reflFields[$relationField]->setValue($element, $parentObject); } } else { // For sure bidirectional, as there is no inverse side in unidirectional mappings - $targetClass->reflFields[$mappedBy]->setValue($element, $parentObject); + $inverseAssociation = $targetClass->associationMappings[$mappedBy]; + + $inverseAssociation->setValue($element, $parentObject); - $this->uow->setOriginalEntityProperty(spl_object_hash($element), $mappedBy, $parentObject); + $this->uow->setOriginalEntityProperty( + spl_object_hash($element), + $mappedBy, + $parentObject + ); } // Update result pointer $this->resultPointers[$dqlAlias] = $element; } else { + $association->setValue($parentObject, null); + $this->uow->setOriginalEntityProperty($oid, $relationField, null); - $reflField->setValue($parentObject, null); } // else leave $reflFieldValue null for single-valued associations } else { diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index fc8137b6b82..7302ec1df5f 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -333,13 +333,6 @@ class ClassMetadata implements ClassMetadataInterface */ protected $namingStrategy; - /** - * The ReflectionProperty instances of the mapped class. - * - * @var \ReflectionProperty[] - */ - public $reflFields = []; - /** * @var \Doctrine\Instantiator\InstantiatorInterface|null */ @@ -361,28 +354,6 @@ public function __construct($entityName, NamingStrategy $namingStrategy = null) $this->instantiator = new Instantiator(); } - /** - * Gets the ReflectionProperties of the mapped class. - * - * @return array An array of ReflectionProperty instances. - */ - public function getReflectionProperties() - { - return $this->reflFields; - } - - /** - * Gets a ReflectionProperty for a specific field of the mapped class. - * - * @param string $name - * - * @return \ReflectionProperty - */ - public function getReflectionProperty($name) - { - return $this->reflFields[$name]; - } - /** * Extracts the identifier values of an entity of this class. * @@ -399,7 +370,11 @@ public function getIdentifierValues($entity) $id = []; foreach ($this->identifier as $idField) { - $value = $this->reflFields[$idField]->getValue($entity); + if (($property = $this->getProperty($idField)) === null) { + $property = $this->associationMappings[$idField]; + } + + $value = $property->getValue($entity); if (null !== $value) { $id[$idField] = $value; @@ -409,14 +384,19 @@ public function getIdentifierValues($entity) return $id; } - $id = $this->identifier[0]; - $value = $this->reflFields[$id]->getValue($entity); + $idField = $this->identifier[0]; + + if (($property = $this->getProperty($idField)) === null) { + $property = $this->associationMappings[$idField]; + } + + $value = $property->getValue($entity); if (null === $value) { return []; } - return [$id => $value]; + return [$idField => $value]; } /** @@ -430,35 +410,12 @@ public function getIdentifierValues($entity) public function assignIdentifier($entity, array $id) { foreach ($id as $idField => $idValue) { - $this->reflFields[$idField]->setValue($entity, $idValue); - } - } - - /** - * Sets the specified field to the specified value on the given entity. - * - * @param object $entity - * @param string $field - * @param mixed $value - * - * @return void - */ - public function setFieldValue($entity, $field, $value) - { - $this->reflFields[$field]->setValue($entity, $value); - } + if (($property = $this->getProperty($idField)) === null) { + $property = $this->associationMappings[$idField]; + } - /** - * Gets the specified field's value off the given entity. - * - * @param object $entity - * @param string $field - * - * @return mixed - */ - public function getFieldValue($entity, $field) - { - return $this->reflFields[$field]->getValue($entity); + $property->setValue($entity, $idValue); + } } /** @@ -633,13 +590,14 @@ public function wakeupReflection($reflService) $property ); + // @todo guilhermeblanco Handle reflection initialization once embeddables are back. $parentReflFields[$property] = $fieldRefl; - $this->reflFields[$property] = $fieldRefl; }*/ foreach ($this->properties as $field => $property) { /*if (isset($mapping['declaredField']) && isset($parentReflFields[$mapping['declaredField']])) { - $this->reflFields[$field] = new ReflectionEmbeddedProperty( + // @todo guilhermeblanco Handle reflection initialization once embeddables are back. + $this->reflection[$field] = new ReflectionEmbeddedProperty( $parentReflFields[$mapping['declaredField']], $reflService->getAccessibleProperty($mapping['originalClass'], $mapping['originalField']), $mapping['originalClass'] @@ -648,14 +606,10 @@ public function wakeupReflection($reflService) }*/ $property->wakeupReflection($reflService); - - $this->reflFields[$field] = $reflService->getAccessibleProperty($property->getDeclaringClass()->name, $field); } foreach ($this->associationMappings as $field => $property) { $property->wakeupReflection($reflService); - - $this->reflFields[$field] = $reflService->getAccessibleProperty($property->getDeclaringClass()->name, $field); } } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 9fecc715175..ddf5b010fc5 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -448,10 +448,6 @@ private function addInheritedProperties(ClassMetadata $subClass, ClassMetadata $ foreach ($parentClass->getProperties() as $property) { $subClass->addInheritedProperty($property); } - - foreach ($parentClass->reflFields as $name => $field) { - $subClass->reflFields[$name] = $field; - } } /** diff --git a/lib/Doctrine/ORM/PersistentCollection.php b/lib/Doctrine/ORM/PersistentCollection.php index 47074a1838a..540d32e4364 100644 --- a/lib/Doctrine/ORM/PersistentCollection.php +++ b/lib/Doctrine/ORM/PersistentCollection.php @@ -169,10 +169,10 @@ public function hydrateAdd($element) // If _backRefFieldName is set and its a one-to-many association, // we need to set the back reference. if ($this->backRefFieldName && $this->association instanceof OneToManyAssociationMetadata) { + $inversedAssociation = $this->typeClass->associationMappings[$this->backRefFieldName]; + // Set back reference to owner - $this->typeClass->reflFields[$this->backRefFieldName]->setValue( - $element, $this->owner - ); + $inversedAssociation->setValue($element, $this->owner); $this->em->getUnitOfWork()->setOriginalEntityProperty( spl_object_hash($element), $this->backRefFieldName, $this->owner @@ -196,9 +196,13 @@ public function hydrateSet($key, $element) // If _backRefFieldName is set, then the association is bidirectional // and we need to set the back reference. if ($this->backRefFieldName && $this->association instanceof OneToManyAssociationMetadata) { + $inversedAssociation = $this->typeClass->associationMappings[$this->backRefFieldName]; + // Set back reference to owner - $this->typeClass->reflFields[$this->backRefFieldName]->setValue( - $element, $this->owner + $inversedAssociation->setValue($element, $this->owner); + + $this->em->getUnitOfWork()->setOriginalEntityProperty( + spl_object_hash($element), $this->backRefFieldName, $this->owner ); } } diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index b4ffd120c72..713ad4ef0cf 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -823,19 +823,20 @@ public function loadToOneEntity(ToOneAssociationMetadata $association, $sourceEn // Complete bidirectional association, if necessary if ($entity !== null && $isInverseSingleValued) { - $targetClass->reflFields[$inversedBy]->setValue($entity, $sourceEntity); + $inversedAssociation = $targetClass->associationMappings[$inversedBy]; + + $inversedAssociation->setValue($entity, $sourceEntity); } return $entity; } - // @todo guilhermeblanco $association->getDeclaringClass()??? - $mappedBy = $association->getMappedBy(); - $sourceClass = $this->em->getClassMetadata($association->getSourceEntity()); - $owningAssoc = $targetClass->getAssociationMapping($mappedBy); - $targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName()); + $mappedBy = $association->getMappedBy(); + $sourceClass = $association->getDeclaringClass(); + $owningAssociation = $targetClass->getAssociationMapping($mappedBy); + $targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName()); - foreach ($owningAssoc->getJoinColumns() as $joinColumn) { + foreach ($owningAssociation->getJoinColumns() as $joinColumn) { $sourceKeyColumn = $joinColumn->getReferencedColumnName(); $targetKeyColumn = $joinColumn->getColumnName(); @@ -845,8 +846,8 @@ public function loadToOneEntity(ToOneAssociationMetadata $association, $sourceEn ); } - $field = $sourceClass->fieldNames[$sourceKeyColumn]; - $value = $sourceClass->reflFields[$field]->getValue($sourceEntity); + $property = $sourceClass->getProperty($sourceClass->fieldNames[$sourceKeyColumn]); + $value = $property->getValue($sourceEntity); // unset the old value and set the new sql aliased value here. By definition // unset($identifier[$targetKeyColumn] works here with how UnitOfWork::createEntity() calls this method. @@ -858,7 +859,7 @@ public function loadToOneEntity(ToOneAssociationMetadata $association, $sourceEn $entity = $this->load($identifier, null, $association); if ($entity !== null) { - $targetClass->reflFields[$mappedBy]->setValue($entity, $sourceEntity); + $owningAssociation->setValue($entity, $sourceEntity); } return $entity; @@ -1085,17 +1086,18 @@ private function getManyToManyStatement( foreach ($joinColumns as $joinColumn) { $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $fieldName = $sourceClass->fieldNames[$joinColumn->getReferencedColumnName()]; - $value = $sourceClass->reflFields[$fieldName]->getValue($sourceEntity); - if (isset($sourceClass->associationMappings[$fieldName])) { - $targetMapping = $sourceClass->associationMappings[$fieldName]; - $targetClass = $this->em->getClassMetadata($targetMapping->getTargetEntity()); + if (($property = $sourceClass->getProperty($fieldName)) !== null) { + $value = $property->getValue($sourceEntity); + } else if (isset($sourceClass->associationMappings[$fieldName])) { + $property = $sourceClass->associationMappings[$fieldName]; + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); + $value = $property->getValue($sourceEntity); - $id = $this->em->getUnitOfWork()->getEntityIdentifier($value); - $value = $id[$targetClass->identifier[0]]; + $value = $this->em->getUnitOfWork()->getEntityIdentifier($value); + $value = $value[$targetClass->identifier[0]]; } - // @todo guilhermeblanco How could we handle composite primary keys here? $criteria[$joinTableName . '.' . $quotedColumnName] = $value; $parameters[] = [ 'value' => $value, @@ -1523,7 +1525,10 @@ protected function getInsertColumnList() : null ; - foreach ($this->class->reflFields as $name => $field) { + // @todo guilhermeblanco Remove the array_merge once properties and associationMappings get merged + $properties = array_merge($this->class->getProperties(), $this->class->associationMappings); + + foreach ($properties as $name => $property) { if ($versionPropertyName === $name) { continue; } @@ -1532,13 +1537,11 @@ protected function getInsertColumnList() continue; }*/ - if (isset($this->class->associationMappings[$name])) { - $association = $this->class->associationMappings[$name]; - - if ($association->isOwningSide() && $association instanceof ToOneAssociationMetadata) { - $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + if ($property instanceof AssociationMetadata) { + if ($property->isOwningSide() && $property instanceof ToOneAssociationMetadata) { + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); - foreach ($association->getJoinColumns() as $joinColumn) { + foreach ($property->getJoinColumns() as $joinColumn) { $columnName = $joinColumn->getColumnName(); $referencedColumnName = $joinColumn->getReferencedColumnName(); @@ -1558,7 +1561,6 @@ protected function getInsertColumnList() } if ($this->class->generatorType !== GeneratorType::IDENTITY || $this->class->identifier[0] !== $name) { - $property = $this->class->getProperty($name); $columnName = $property->getColumnName(); $columns[] = $columnName; @@ -1915,17 +1917,18 @@ private function getOneToManyStatement( foreach ($owningAssoc->getJoinColumns() as $joinColumn) { $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $fieldName = $sourceClass->fieldNames[$joinColumn->getReferencedColumnName()]; - $value = $sourceClass->reflFields[$fieldName]->getValue($sourceEntity); - if (isset($sourceClass->associationMappings[$fieldName])) { - $targetMapping = $sourceClass->associationMappings[$fieldName]; - $targetClass = $this->em->getClassMetadata($targetMapping->getTargetEntity()); + if (($property = $sourceClass->getProperty($fieldName)) !== null) { + $value = $property->getValue($sourceEntity); + } else if (isset($sourceClass->associationMappings[$fieldName])) { + $property = $sourceClass->associationMappings[$fieldName]; + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); + $value = $property->getValue($sourceEntity); $value = $this->em->getUnitOfWork()->getEntityIdentifier($value); $value = $value[$targetClass->identifier[0]]; } - // @todo guilhermeblanco How could we handle composite primary keys here? $criteria[$tableAlias . "." . $quotedColumnName] = $value; $parameters[] = [ 'value' => $value, diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index 9e6cf8d927b..bda6820e169 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -25,6 +25,7 @@ use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ColumnMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; use Doctrine\ORM\Mapping\ToManyAssociationMetadata; @@ -518,26 +519,21 @@ protected function getInsertColumnList() $this->columns[$columnName] = $column; } - // @todo guilhermeblanco Why can't we use: - // - array_unique(array_values($this->class->fieldNames)) - // - array_merge($this->class->properties, $this->class->associationMappings) - foreach ($this->class->reflFields as $name => $field) { - $property = $this->class->getProperty($name); - $association = isset($this->class->associationMappings[$name]) - ? $this->class->associationMappings[$name] - : null; - - if (($property && ($property instanceof VersionFieldMetadata || $this->class->isInheritedProperty($name))) - || ($association && $this->class->isInheritedAssociation($name)) + // @todo guilhermeblanco Remove the array_merge once properties and associationMappings get merged + $properties = array_merge($this->class->getProperties(), $this->class->associationMappings); + + foreach ($properties as $name => $property) { + if (($property instanceof FieldMetadata && ($property instanceof VersionFieldMetadata || $this->class->isInheritedProperty($name))) + || ($property instanceof AssociationMetadata && $this->class->isInheritedAssociation($name)) /*|| isset($this->class->embeddedClasses[$name])*/) { continue; } - if ($association) { - if ($association->isOwningSide() && $association instanceof ToOneAssociationMetadata) { - $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + if ($property instanceof AssociationMetadata) { + if ($property->isOwningSide() && $property instanceof ToOneAssociationMetadata) { + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); - foreach ($association->getJoinColumns() as $joinColumn) { + foreach ($property->getJoinColumns() as $joinColumn) { $columnName = $joinColumn->getColumnName(); $referencedColumnName = $joinColumn->getReferencedColumnName(); diff --git a/lib/Doctrine/ORM/Proxy/ProxyFactory.php b/lib/Doctrine/ORM/Proxy/ProxyFactory.php index ca610aaf29b..00f2d02e1f4 100644 --- a/lib/Doctrine/ORM/Proxy/ProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/ProxyFactory.php @@ -105,7 +105,7 @@ protected function createProxyDefinition($className) return new ProxyDefinition( ClassUtils::generateProxyClassName($className, $this->proxyNs), $classMetadata->getIdentifierFieldNames(), - $classMetadata->getReflectionProperties(), + array_merge($classMetadata->getProperties(), $classMetadata->associationMappings), $this->createInitializer($classMetadata, $entityPersister), $this->createCloner($classMetadata, $entityPersister) ); @@ -195,13 +195,10 @@ private function createCloner(ClassMetadata $classMetadata, EntityPersister $ent $this->identifierFlattener->flattenIdentifier($classMetadata, $identifier) ); } + + $properties = array_merge($class->getProperties(), $class->associationMappings); - foreach ($class->getReflectionProperties() as $property) { - if ( ! $class->hasField($property->name) && ! $class->hasAssociation($property->name)) { - continue; - } - - $property->setAccessible(true); + foreach ($properties as $property) { $property->setValue($proxy, $property->getValue($original)); } }; diff --git a/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php b/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php index 6659dcb2c67..02f2e1d5fa5 100644 --- a/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Sequencing; use Doctrine\ORM\EntityManager; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\ORMException; /** @@ -47,13 +48,17 @@ public function generate(EntityManager $em, $entity) $identifier = []; foreach ($idFields as $idField) { - $value = $class->getFieldValue($entity, $idField); + if (($property = $class->getProperty($idField)) === null) { + $property = $class->associationMappings[$idField]; + } + + $value = $property->getValue($entity); if ( ! isset($value)) { throw ORMException::entityMissingAssignedIdForField($entity, $idField); } - if (isset($class->associationMappings[$idField])) { + if ($property instanceof AssociationMetadata) { // NOTE: Single Columns as associated identifiers only allowed - this constraint it is enforced. $value = $em->getUnitOfWork()->getSingleIdentifierValue($value); } diff --git a/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php b/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php index 138829c0605..e7424a0df45 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php @@ -87,6 +87,7 @@ public function walkSelectStatement(SelectStatement $AST) $identifierFieldName = $rootClass->getSingleIdentifierFieldName(); $pathType = PathExpression::TYPE_STATE_FIELD; + if (isset($rootClass->associationMappings[$identifierFieldName])) { $pathType = PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION; } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 3cd54efb5d6..d20f49a06d6 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -596,8 +596,11 @@ public function computeChangeSet(ClassMetadata $class, $entity) $actualData = []; - foreach ($class->reflFields as $name => $refProp) { - $value = $refProp->getValue($entity); + // @todo guilhermeblanco Remove the array_merge once properties and associationMappings get merged + $properties = array_merge($class->getProperties(), $class->associationMappings); + + foreach ($properties as $name => $property) { + $value = $property->getValue($entity); if ($class->isCollectionValuedAssociation($name) && $value !== null) { if ($value instanceof PersistentCollection) { @@ -613,16 +616,14 @@ public function computeChangeSet(ClassMetadata $class, $entity) $value = new ArrayCollection($value); } - $association = $class->associationMappings[$name]; - // Inject PersistentCollection $value = new PersistentCollection( - $this->em, $this->em->getClassMetadata($association->getTargetEntity()), $value + $this->em, $this->em->getClassMetadata($property->getTargetEntity()), $value ); - $value->setOwner($entity, $association); + $value->setOwner($entity, $property); $value->setDirty( ! $value->isEmpty()); - $class->reflFields[$name]->setValue($entity, $value); + $property->setValue($entity, $value); $actualData[$name] = $value; @@ -708,7 +709,7 @@ public function computeChangeSet(ClassMetadata $class, $entity) $newValue->setOwner($entity, $association); - $class->reflFields[$propName]->setValue($entity, $newValue); + $association->setValue($entity, $newValue); } } @@ -746,17 +747,17 @@ public function computeChangeSet(ClassMetadata $class, $entity) // Look for changes in associations of the entity foreach ($class->associationMappings as $field => $association) { - if (($val = $class->reflFields[$field]->getValue($entity)) === null) { + if (($value = $association->getValue($entity)) === null) { continue; } - $this->computeAssociationChanges($association, $val); + $this->computeAssociationChanges($association, $value); if ($association instanceof ManyToManyAssociationMetadata && - $val instanceof PersistentCollection && + $value instanceof PersistentCollection && ! isset($this->entityChangeSets[$oid]) && $association->isOwningSide() && - $val->isDirty()) { + $value->isDirty()) { $this->entityChangeSets[$oid] = []; $this->originalEntityData[$oid] = $actualData; @@ -967,11 +968,14 @@ public function recomputeSingleEntityChangeSet(ClassMetadata $class, $entity) $actualData = []; - foreach ($class->reflFields as $name => $refProp) { - if (( ! $class->isIdentifier($name) || $class->generatorType !== GeneratorType::IDENTITY) + // @todo guilhermeblanco Remove the array_merge once properties and associationMappings get merged + $properties = array_merge($class->getProperties(), $class->associationMappings); + + foreach ($properties as $name => $property) { + if ((! $property->isPrimaryKey() || $class->generatorType !== GeneratorType::IDENTITY) && ($class->versionProperty === null || $name !== $class->versionProperty->getName()) && ! $class->isCollectionValuedAssociation($name)) { - $actualData[$name] = $refProp->getValue($entity); + $actualData[$name] = $property->getValue($entity); } } @@ -1035,13 +1039,14 @@ private function executeInserts($class) if ($postInsertIds) { // Persister returned post-insert IDs foreach ($postInsertIds as $postInsertId) { - $idField = $class->getSingleIdentifierFieldName(); - $idValue = $this->convertSingleFieldIdentifierToPHPValue($class, $postInsertId['generatedId']); + $idField = $class->getSingleIdentifierFieldName(); + $idValue = $this->convertSingleFieldIdentifierToPHPValue($class, $postInsertId['generatedId']); + $property = $class->getProperty($idField); $entity = $postInsertId['entity']; $oid = spl_object_hash($entity); - $class->reflFields[$idField]->setValue($entity, $idValue); + $property->setValue($entity, $idValue); $this->entityIdentifiers[$oid] = [$idField => $idValue]; $this->entityStates[$oid] = self::STATE_MANAGED; @@ -1127,7 +1132,11 @@ private function executeDeletions($class) // is obtained by a new entity because the old one went out of scope. //$this->entityStates[$oid] = self::STATE_NEW; if ($class->generatorType !== GeneratorType::NONE) { - $class->reflFields[$class->identifier[0]]->setValue($entity, null); + if (($property = $class->getProperty($class->getSingleIdentifierFieldName())) === null) { + $property = $class->associationMappings[$class->getSingleIdentifierFieldName()]; + } + + $property->setValue($entity, null); } if ($invoke !== ListenersInvoker::INVOKE_NONE) { @@ -1962,23 +1971,22 @@ private function updateAssociationWithMergedEntity( $managedCopy ) { - $prevClass = $this->em->getClassMetadata(get_class($previousManagedCopy)); - if ($association instanceof ToOneAssociationMetadata) { - // @todo guilhermenblanco Why not $association->setValue()? - $prevClass->reflFields[$association->getName()]->setValue($previousManagedCopy, $managedCopy); + $association->setValue($previousManagedCopy, $managedCopy); return; } /** @var array|Collection $value */ - $value = $prevClass->reflFields[$association->getName()]->getValue($previousManagedCopy); + $value = $association->getValue($previousManagedCopy); + $value[] = $managedCopy; if ($association instanceof OneToManyAssociationMetadata) { - $class = $this->em->getClassMetadata(get_class($entity)); + $targetClass = $this->em->getClassMetadata(get_class($entity)); + $inverseAssociation = $targetClass->associationMappings[$association->getMappedBy()]; - $class->reflFields[$association->getMappedBy()]->setValue($managedCopy, $previousManagedCopy); + $inverseAssociation->setValue($managedCopy, $previousManagedCopy); } } @@ -2305,7 +2313,7 @@ function ($association) { return in_array('remove', $association->getCascade()); $entity->__load(); } - $relatedEntities = $class->reflFields[$association->getName()]->getValue($entity); + $relatedEntities = $association->getValue($entity); switch (true) { case ($relatedEntities instanceof Collection): @@ -2554,9 +2562,12 @@ public function createEntity($className, array $data, &$hints = []) // DDC-1238 - we have a managed instance, but it isn't the provided one. // Therefore we clear its identifier. Also, we must re-fetch metadata since the // refreshed object may be anything - foreach ($class->identifier as $fieldName) { - $class->reflFields[$fieldName]->setValue($unmanagedProxy, null); + if (($property = $class->getProperty($fieldName)) === null) { + $property = $class->associationMappings[$fieldName]; + } + + $property->setValue($unmanagedProxy, null); } return $unmanagedProxy; @@ -2638,7 +2649,7 @@ public function createEntity($className, array $data, &$hints = []) if ($association instanceof ToManyAssociationMetadata) { // Ignore if its a cached collection if (isset($hints[Query::HINT_CACHE_ENABLED]) && - $class->getFieldValue($entity, $field) instanceof PersistentCollection) { + $association->getValue($entity) instanceof PersistentCollection) { continue; } @@ -2646,7 +2657,7 @@ public function createEntity($className, array $data, &$hints = []) if (isset($data[$field]) && $data[$field] instanceof PersistentCollection) { $data[$field]->setOwner($entity, $association); - $class->reflFields[$field]->setValue($entity, $data[$field]); + $association->setValue($entity, $data[$field]); $this->originalEntityData[$oid][$field] = $data[$field]; @@ -2658,8 +2669,7 @@ public function createEntity($className, array $data, &$hints = []) $pColl->setOwner($entity, $association); $pColl->setInitialized(false); - $reflField = $class->reflFields[$field]; - $reflField->setValue($entity, $pColl); + $association->setValue($entity, $pColl); if ($association->getFetchMode() === FetchMode::EAGER) { $this->loadCollection($pColl); @@ -2675,10 +2685,12 @@ public function createEntity($className, array $data, &$hints = []) // use the given entity association if (isset($data[$field]) && is_object($data[$field]) && isset($this->entityStates[spl_object_hash($data[$field])])) { - $this->originalEntityData[$oid][$field] = $data[$field]; + $inverseAssociation = $targetClass->associationMappings[$association->getMappedBy()]; + + $association->setValue($entity, $data[$field]); + $inverseAssociation->setValue($data[$field], $entity); - $class->reflFields[$field]->setValue($entity, $data[$field]); - $targetClass->reflFields[$association->getMappedBy()]->setValue($data[$field], $entity); + $this->originalEntityData[$oid][$field] = $data[$field]; continue; } @@ -2686,14 +2698,15 @@ public function createEntity($className, array $data, &$hints = []) // Inverse side of x-to-one can never be lazy $persister = $this->getEntityPersister($targetEntity); - $class->reflFields[$field]->setValue($entity, $persister->loadToOneEntity($association, $entity)); + $association->setValue($entity, $persister->loadToOneEntity($association, $entity)); continue; } // use the entity association if (isset($data[$field]) && is_object($data[$field]) && isset($this->entityStates[spl_object_hash($data[$field])])) { - $class->reflFields[$field]->setValue($entity, $data[$field]); + $association->setValue($entity, $data[$field]); + $this->originalEntityData[$oid][$field] = $data[$field]; continue; @@ -2719,7 +2732,7 @@ public function createEntity($className, array $data, &$hints = []) if (!$associatedId) { // Foreign key is NULL - $class->reflFields[$field]->setValue($entity, null); + $association->setValue($entity, null); $this->originalEntityData[$oid][$field] = null; continue; @@ -2795,12 +2808,12 @@ public function createEntity($className, array $data, &$hints = []) } $this->originalEntityData[$oid][$field] = $newValue; - $class->reflFields[$field]->setValue($entity, $newValue); + $association->setValue($entity, $newValue); if ($association->getInversedBy() && $association instanceof OneToOneAssociationMetadata) { - $inverseAssoc = $targetClass->associationMappings[$association->getInversedBy()]; + $inverseAssociation = $targetClass->associationMappings[$association->getInversedBy()]; - $targetClass->reflFields[$inverseAssoc->getName()]->setValue($newValue, $entity); + $inverseAssociation->setValue($newValue, $entity); } } diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php index d931ae31fee..2ed19dc6cf3 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php @@ -84,20 +84,22 @@ public function testClearShouldEvictRegion() public function testPutBasicQueryResult() { - $result = []; - $key = new QueryCacheKey('query.key1', 0); - $rsm = new ResultSetMappingBuilder($this->em); - $metadata = $this->em->getClassMetadata(Country::class); + $result = []; + $uow = $this->em->getUnitOfWork(); + $key = new QueryCacheKey('query.key1', 0); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata(Country::class, 'c'); for ($i = 0; $i < 4; $i++) { - $name = "Country $i"; - $entity = new Country($name); - $result[] = $entity; + $name = "Country $i"; + $entity = new Country($name); + + $entity->setId($i); + + $result[] = $entity; - $metadata->setFieldValue($entity, 'id', $i); - $this->em->getUnitOfWork()->registerManaged($entity, ['id' => $i], ['name' => $name]); + $uow->registerManaged($entity, ['id' => $entity->getId()], ['name' => $entity->getName()]); } self::assertTrue($this->queryCache->put($key, $rsm, $result)); @@ -119,23 +121,22 @@ public function testPutBasicQueryResult() public function testPutToOneAssociationQueryResult() { - $result = []; - $uow = $this->em->getUnitOfWork(); - $key = new QueryCacheKey('query.key1', 0); - $rsm = new ResultSetMappingBuilder($this->em); - $cityClass = $this->em->getClassMetadata(City::class); - $stateClass = $this->em->getClassMetadata(State::class); + $result = []; + $uow = $this->em->getUnitOfWork(); + $key = new QueryCacheKey('query.key1', 0); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata(City::class, 'c'); $rsm->addJoinedEntityFromClassMetadata(State::class, 's', 'c', 'state', ['id'=>'state_id', 'name'=>'state_name']); for ($i = 0; $i < 4; $i++) { - $state = new State("State $i"); - $city = new City("City $i", $state); - $result[] = $city; + $state = new State("State $i"); + $city = new City("City $i", $state); + + $city->setId($i); + $state->setId($i * 2); - $cityClass->setFieldValue($city, 'id', $i); - $stateClass->setFieldValue($state, 'id', $i*2); + $result[] = $city; $uow->registerManaged($state, ['id' => $state->getId()], ['name' => $city->getName()]); $uow->registerManaged($city, ['id' => $city->getId()], ['name' => $city->getName(), 'state' => $state]); @@ -158,34 +159,28 @@ public function testPutToOneAssociationQueryResult() public function testPutToOneAssociation2LevelsQueryResult() { - $result = []; - $uow = $this->em->getUnitOfWork(); - $key = new QueryCacheKey('query.key1', 0); - $rsm = new ResultSetMappingBuilder($this->em); - $cityClass = $this->em->getClassMetadata(City::class); - $stateClass = $this->em->getClassMetadata(State::class); - $countryClass = $this->em->getClassMetadata(Country::class); + $result = []; + $uow = $this->em->getUnitOfWork(); + $key = new QueryCacheKey('query.key1', 0); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata(City::class, 'c'); - $rsm->addJoinedEntityFromClassMetadata(State::class, 's', 'c', 'state', ['id'=>'state_id', 'name'=>'state_name'] - ); - $rsm->addJoinedEntityFromClassMetadata(Country::class, 'co', 's', 'country', ['id'=>'country_id', 'name'=>'country_name'] - ); + $rsm->addJoinedEntityFromClassMetadata(State::class, 's', 'c', 'state', ['id'=>'state_id', 'name'=>'state_name']); + $rsm->addJoinedEntityFromClassMetadata(Country::class, 'co', 's', 'country', ['id'=>'country_id', 'name'=>'country_name']); for ($i = 0; $i < 4; $i++) { $country = new Country("Country $i"); $state = new State("State $i", $country); $city = new City("City $i", $state); - $result[] = $city; + $city->setId($i); + $state->setId($i * 2); + $country->setId($i * 3); - $cityClass->setFieldValue($city, 'id', $i); - $stateClass->setFieldValue($state, 'id', $i*2); - $countryClass->setFieldValue($country, 'id', $i*3); + $result[] = $city; $uow->registerManaged($country, ['id' => $country->getId()], ['name' => $country->getName()]); - $uow->registerManaged($state, ['id' => $state->getId()], ['name' => $state->getName(), 'country' => $country] - ); + $uow->registerManaged($state, ['id' => $state->getId()], ['name' => $state->getName(), 'country' => $country]); $uow->registerManaged($city, ['id' => $city->getId()], ['name' => $city->getName(), 'state' => $state]); } @@ -210,21 +205,21 @@ public function testPutToOneAssociation2LevelsQueryResult() public function testPutToOneAssociationNullQueryResult() { - $result = []; - $uow = $this->em->getUnitOfWork(); - $key = new QueryCacheKey('query.key1', 0); - $rsm = new ResultSetMappingBuilder($this->em); - $cityClass = $this->em->getClassMetadata(City::class); + $result = []; + $uow = $this->em->getUnitOfWork(); + $key = new QueryCacheKey('query.key1', 0); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata(City::class, 'c'); $rsm->addJoinedEntityFromClassMetadata(State::class, 's', 'c', 'state', ['id'=>'state_id', 'name'=>'state_name'] ); for ($i = 0; $i < 4; $i++) { - $city = new City("City $i", null); - $result[] = $city; + $city = new City("City $i", null); - $cityClass->setFieldValue($city, 'id', $i); + $city->setId($i); + + $result[] = $city; $uow->registerManaged($city, ['id' => $city->getId()], ['name' => $city->getName(), 'state' => null]); } @@ -242,12 +237,10 @@ public function testPutToOneAssociationNullQueryResult() public function testPutToManyAssociationQueryResult() { - $result = []; - $uow = $this->em->getUnitOfWork(); - $key = new QueryCacheKey('query.key1', 0); - $rsm = new ResultSetMappingBuilder($this->em); - $cityClass = $this->em->getClassMetadata(City::class); - $stateClass = $this->em->getClassMetadata(State::class); + $result = []; + $uow = $this->em->getUnitOfWork(); + $key = new QueryCacheKey('query.key1', 0); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata(State::class, 's'); $rsm->addJoinedEntityFromClassMetadata(City::class, 'c', 's', 'cities', ['id'=>'c_id', 'name'=>'c_name']); @@ -256,21 +249,19 @@ public function testPutToManyAssociationQueryResult() $state = new State("State $i"); $city1 = new City("City 1", $state); $city2 = new City("City 2", $state); - $result[] = $state; - $cityClass->setFieldValue($city1, 'id', $i + 11); - $cityClass->setFieldValue($city2, 'id', $i + 22); - $stateClass->setFieldValue($state, 'id', $i); + $state->setId($i); + $city1->setId($i + 11); + $city2->setId($i + 22); + + $result[] = $state; $state->addCity($city1); $state->addCity($city2); - $uow->registerManaged($city1, ['id' => $city1->getId()], ['name' => $city1->getName(), 'state' => $state] - ); - $uow->registerManaged($city2, ['id' => $city2->getId()], ['name' => $city2->getName(), 'state' => $state] - ); - $uow->registerManaged($state, ['id' => $state->getId()], ['name' => $state->getName(), 'cities' => $state->getCities()] - ); + $uow->registerManaged($city1, ['id' => $city1->getId()], ['name' => $city1->getName(), 'state' => $state]); + $uow->registerManaged($city2, ['id' => $city2->getId()], ['name' => $city2->getName(), 'state' => $state]); + $uow->registerManaged($state, ['id' => $state->getId()], ['name' => $state->getName(), 'cities' => $state->getCities()]); } self::assertTrue($this->queryCache->put($key, $rsm, $result)); @@ -358,20 +349,22 @@ public function testGetWithAssociation() public function testCancelPutResultIfEntityPutFails() { - $result = []; - $key = new QueryCacheKey('query.key1', 0); - $rsm = new ResultSetMappingBuilder($this->em); - $metadata = $this->em->getClassMetadata(Country::class); + $result = []; + $uow = $this->em->getUnitOfWork(); + $key = new QueryCacheKey('query.key1', 0); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata(Country::class, 'c'); for ($i = 0; $i < 4; $i++) { - $name = "Country $i"; - $entity = new Country($name); - $result[] = $entity; + $name = "Country $i"; + $entity = new Country($name); - $metadata->setFieldValue($entity, 'id', $i); - $this->em->getUnitOfWork()->registerManaged($entity, ['id' => $i], ['name' => $name]); + $entity->setId($i); + + $result[] = $entity; + + $uow->registerManaged($entity, ['id' => $entity->getId()], ['name' => $entity->getName()]); } $this->region->addReturn('put', false); @@ -383,23 +376,21 @@ public function testCancelPutResultIfEntityPutFails() public function testCancelPutResultIfAssociationEntityPutFails() { - $result = []; - $uow = $this->em->getUnitOfWork(); - $key = new QueryCacheKey('query.key1', 0); - $rsm = new ResultSetMappingBuilder($this->em); - $cityClass = $this->em->getClassMetadata(City::class); - $stateClass = $this->em->getClassMetadata(State::class); + $result = []; + $uow = $this->em->getUnitOfWork(); + $key = new QueryCacheKey('query.key1', 0); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata(City::class, 'c'); - $rsm->addJoinedEntityFromClassMetadata(State::class, 's', 'c', 'state', ['id'=>'state_id', 'name'=>'state_name'] - ); + $rsm->addJoinedEntityFromClassMetadata(State::class, 's', 'c', 'state', ['id'=>'state_id', 'name'=>'state_name']); - $state = new State("State 1"); - $city = new City("City 2", $state); - $result[] = $city; + $state = new State("State 1"); + $city = new City("City 2", $state); - $cityClass->setFieldValue($city, 'id', 1); - $stateClass->setFieldValue($state, 'id', 11); + $state->setId(1); + $city->setId(11); + + $result[] = $city; $uow->registerManaged($state, ['id' => $state->getId()], ['name' => $city->getName()]); $uow->registerManaged($city, ['id' => $city->getId()], ['name' => $city->getName(), 'state' => $state]); @@ -412,32 +403,30 @@ public function testCancelPutResultIfAssociationEntityPutFails() public function testCancelPutToManyAssociationQueryResult() { - $result = []; - $uow = $this->em->getUnitOfWork(); - $key = new QueryCacheKey('query.key1', 0); - $rsm = new ResultSetMappingBuilder($this->em); - $cityClass = $this->em->getClassMetadata(City::class); - $stateClass = $this->em->getClassMetadata(State::class); + $result = []; + $uow = $this->em->getUnitOfWork(); + $key = new QueryCacheKey('query.key1', 0); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata(State::class, 's'); $rsm->addJoinedEntityFromClassMetadata(City::class, 'c', 's', 'cities', ['id'=>'c_id', 'name'=>'c_name']); - $state = new State("State"); - $city1 = new City("City 1", $state); - $city2 = new City("City 2", $state); - $result[] = $state; + $state = new State("State"); + $city1 = new City("City 1", $state); + $city2 = new City("City 2", $state); + + $state->setId(1); + $city1->setId(11); + $city2->setId(22); - $stateClass->setFieldValue($state, 'id', 1); - $cityClass->setFieldValue($city1, 'id', 11); - $cityClass->setFieldValue($city2, 'id', 22); + $result[] = $state; $state->addCity($city1); $state->addCity($city2); $uow->registerManaged($city1, ['id' => $city1->getId()], ['name' => $city1->getName(), 'state' => $state]); $uow->registerManaged($city2, ['id' => $city2->getId()], ['name' => $city2->getName(), 'state' => $state]); - $uow->registerManaged($state, ['id' => $state->getId()], ['name' => $state->getName(), 'cities' => $state->getCities()] - ); + $uow->registerManaged($state, ['id' => $state->getId()], ['name' => $state->getName(), 'cities' => $state->getCities()]); $this->region->addReturn('put', true); // put root entity $this->region->addReturn('put', false); // collection association fails @@ -453,8 +442,8 @@ public function testIgnoreCacheNonGetMode() $key = new QueryCacheKey('query.key1', 0, Cache::MODE_PUT); $entry = new QueryCacheEntry( [ - ['identifier' => ['id' => 1]], - ['identifier' => ['id' => 2]] + ['identifier' => ['id' => 1]], + ['identifier' => ['id' => 2]] ] ); @@ -467,20 +456,22 @@ public function testIgnoreCacheNonGetMode() public function testIgnoreCacheNonPutMode() { - $result = []; - $rsm = new ResultSetMappingBuilder($this->em); - $metadata = $this->em->getClassMetadata(Country::class); - $key = new QueryCacheKey('query.key1', 0, Cache::MODE_GET); + $result = []; + $uow = $this->em->getUnitOfWork(); + $key = new QueryCacheKey('query.key1', 0, Cache::MODE_GET); + $rsm = new ResultSetMappingBuilder($this->em); $rsm->addRootEntityFromClassMetadata(Country::class, 'c'); for ($i = 0; $i < 4; $i++) { - $name = "Country $i"; - $entity = new Country($name); - $result[] = $entity; + $name = "Country $i"; + $entity = new Country($name); - $metadata->setFieldValue($entity, 'id', $i); - $this->em->getUnitOfWork()->registerManaged($entity, ['id' => $i], ['name' => $name]); + $entity->setId($i); + + $result[] = $entity; + + $uow->registerManaged($entity, ['id' => $entity->getId()], ['name' => $entity->getName()]); } self::assertFalse($this->queryCache->put($key, $rsm, $result)); @@ -492,11 +483,12 @@ public function testGetShouldIgnoreOldQueryCacheEntryResult() $key = new QueryCacheKey('query.key1', 50); $entry = new QueryCacheEntry( [ - ['identifier' => ['id' => 1]], - ['identifier' => ['id' => 2]] + ['identifier' => ['id' => 1]], + ['identifier' => ['id' => 2]] ] ); - $entities = [ + + $data = [ ['id'=>1, 'name' => 'Foo'], ['id'=>2, 'name' => 'Bar'] ]; @@ -508,8 +500,8 @@ public function testGetShouldIgnoreOldQueryCacheEntryResult() $this->region->addReturn( 'getMultiple', [ - new EntityCacheEntry(Country::class, $entities[0]), - new EntityCacheEntry(Country::class, $entities[1]) + new EntityCacheEntry(Country::class, $data[0]), + new EntityCacheEntry(Country::class, $data[1]) ] ); @@ -524,8 +516,8 @@ public function testGetShouldIgnoreNonQueryCacheEntryResult() $key = new QueryCacheKey('query.key1', 0); $entry = new \ArrayObject( [ - ['identifier' => ['id' => 1]], - ['identifier' => ['id' => 2]] + ['identifier' => ['id' => 1]], + ['identifier' => ['id' => 2]] ] ); @@ -555,8 +547,8 @@ public function testGetShouldIgnoreMissingEntityQueryCacheEntry() $key = new QueryCacheKey('query.key1', 0); $entry = new QueryCacheEntry( [ - ['identifier' => ['id' => 1]], - ['identifier' => ['id' => 2]] + ['identifier' => ['id' => 1]], + ['identifier' => ['id' => 2]] ] ); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php index e0ffafe9578..394461ba5f4 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php @@ -15,7 +15,9 @@ protected function setUp() { $this->oldMetadata = $this->em->getClassMetadata(CompanyEmployee::class); $metadata = clone $this->oldMetadata; - ksort($metadata->reflFields); + + ksort($metadata->associationMappings); + $this->em->getMetadataFactory()->setMetadataFor(CompanyEmployee::class, $metadata); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index b077463db65..cec7389eecf 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -100,21 +100,6 @@ public function testGetMetadataForSubclassWithMappedSuperclassWithRepository() self::assertNotNull($class->getProperty('value')); } - /** - * @group DDC-388 - */ - public function testSerializationWithPrivateFieldsFromMappedSuperclass() - { - $class = $this->cmf->getMetadataFor(EntitySubClass2::class); - $class2 = unserialize(serialize($class)); - - $class2->wakeupReflection(new RuntimeReflectionService); - - self::assertArrayHasKey('mapped1', $class2->reflFields); - self::assertArrayHasKey('mapped2', $class2->reflFields); - self::assertArrayHasKey('mappedRelated1', $class2->reflFields); - } - /** * @group DDC-1203 */ diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php index 157e1fb6169..5a4bcef086b 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php @@ -25,8 +25,13 @@ public function testEvent() $metadata = $metadataFactory->getMetadataFor(LoadEventTestEntity::class); self::assertTrue($metadata->hasField('about')); - self::assertArrayHasKey('about', $metadata->reflFields); - self::assertInstanceOf('ReflectionProperty', $metadata->reflFields['about']); + + $property = $metadata->getProperty('about'); + $test = new LoadEventTestEntity(); + + $property->setValue($test, 'About who?'); + + self::assertEquals('About who?', $test->about); } public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs) @@ -57,5 +62,5 @@ class LoadEventTestEntity */ private $name; - private $about; + public $about; } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 252715097e3..b796997f469 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -35,7 +35,6 @@ public function testClassMetadataInstanceSerialization() $cm->initializeReflection(new RuntimeReflectionService()); // Test initial state - self::assertTrue(count($cm->getReflectionProperties()) == 0); self::assertInstanceOf('ReflectionClass', $cm->reflClass); self::assertEquals(CMS\CmsUser::class, $cm->name); self::assertEquals(CMS\CmsUser::class, $cm->rootEntityName); @@ -71,7 +70,6 @@ public function testClassMetadataInstanceSerialization() $cm->wakeupReflection(new RuntimeReflectionService()); // Check state - self::assertTrue(count($cm->getReflectionProperties()) > 0); self::assertInstanceOf(\ReflectionClass::class, $cm->reflClass); self::assertEquals(CMS\CmsUser::class, $cm->name); self::assertEquals('UserParent', $cm->rootEntityName); From e5ba446a8e4a02c708c83120a21312365403236e Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 15 Mar 2017 12:05:09 -0400 Subject: [PATCH 114/275] Fixed DDC2780Test to be compliant with develop branch --- .../ORM/Functional/Ticket/DDC2780Test.php | 35 +++++++++++-------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2780Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2780Test.php index 5539dfbbe5c..4f00850b9ad 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2780Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2780Test.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Annotation as ORM; /** * @group DDC-2780 @@ -16,10 +17,10 @@ protected function setup() { parent::setup(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(DDC2780User::class), - $this->_em->getClassMetadata(DDC2780Project::class) + $this->em->getClassMetadata(DDC2780User::class), + $this->em->getClassMetadata(DDC2780Project::class) ] ); } @@ -34,12 +35,12 @@ public function testIssue() $user->project = $project; - $this->_em->persist($project); - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($project); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); - $result = $this->_em->createQueryBuilder() + $result = $this->em->createQueryBuilder() ->select('user') ->from(DDC2780User::class, 'user') ->leftJoin('user.project', 'project') @@ -52,29 +53,35 @@ public function testIssue() } /** - * @Entity + * @ORM\Entity */ class DDC2780User { - /** @Id @Column(type="integer") @GeneratedValue */ + /** + * @ORM\Id @ORM\GeneratedValue + * @ORM\Column(type="integer") + */ public $id; /** - * @ManyToOne(targetEntity="DDC2780Project") + * @ORM\ManyToOne(targetEntity="DDC2780Project") * * @var DDC2780Project */ public $project; } -/** @Entity */ +/** @ORM\Entity */ class DDC2780Project { - /** @Id @Column(type="integer") @GeneratedValue */ + /** + * @ORM\Id @ORM\GeneratedValue + * @ORM\Column(type="integer") + */ public $id; /** - * @OneToMany(targetEntity="DDC2780User", mappedBy="project") + * @ORM\OneToMany(targetEntity="DDC2780User", mappedBy="project") * * @var DDC2780User[] */ From 6d8f6dbdc18acf6c83d05ba0aaa9937801195ad7 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 15 Mar 2017 22:54:16 -0400 Subject: [PATCH 115/275] Removed ClassMetadata::getAssociationMapping and ClassMetadata::getAssociationMappings methods --- docs/en/cookbook/sql-table-prefixes.rst | 2 +- docs/en/reference/php-mapping.rst | 2 -- lib/Doctrine/ORM/Cache/DefaultCache.php | 8 ++--- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 31 ------------------- .../Entity/BasicEntityPersister.php | 4 +-- lib/Doctrine/ORM/Query/Parser.php | 2 +- .../Tests/ORM/Cache/DefaultCacheTest.php | 2 +- .../Tests/ORM/PersistentCollectionTest.php | 2 +- .../ORM/Query/CustomTreeWalkersJoinTest.php | 2 +- .../Tests/ORM/Query/CustomTreeWalkersTest.php | 2 +- 10 files changed, 12 insertions(+), 45 deletions(-) diff --git a/docs/en/cookbook/sql-table-prefixes.rst b/docs/en/cookbook/sql-table-prefixes.rst index c8bdb220c5e..80e15f01424 100644 --- a/docs/en/cookbook/sql-table-prefixes.rst +++ b/docs/en/cookbook/sql-table-prefixes.rst @@ -47,7 +47,7 @@ appropriate autoloaders. $classMetadata->setTableName($this->prefix . $classMetadata->getTableName()); } - foreach ($classMetadata->getAssociationMappings() as $fieldName => $mapping) { + foreach ($classMetadata->associationMappings as $fieldName => $mapping) { if ($mapping['type'] == Mapping\ClassMetadata::MANY_TO_MANY && $mapping['isOwningSide']) { $mappedTableName = $mapping['joinTable']['name']; $classMetadata->associationMappings[$fieldName]['joinTable']['name'] = $this->prefix . $mappedTableName; diff --git a/docs/en/reference/php-mapping.rst b/docs/en/reference/php-mapping.rst index abdaf2f8862..2f8150f39b8 100644 --- a/docs/en/reference/php-mapping.rst +++ b/docs/en/reference/php-mapping.rst @@ -278,8 +278,6 @@ Field & Association Getters - ``isNullable($fieldName)`` - ``getColumnName($fieldName)`` - ``getFieldMapping($fieldName)`` -- ``getAssociationMapping($fieldName)`` -- ``getAssociationMappings()`` - ``getFieldName($columnName)`` - ``hasField($fieldName)`` - ``getTypeOfField($fieldName)`` diff --git a/lib/Doctrine/ORM/Cache/DefaultCache.php b/lib/Doctrine/ORM/Cache/DefaultCache.php index f2c84636571..bc19836e36d 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCache.php +++ b/lib/Doctrine/ORM/Cache/DefaultCache.php @@ -94,7 +94,7 @@ public function getEntityCacheRegion($className) public function getCollectionCacheRegion($className, $association) { $metadata = $this->em->getClassMetadata($className); - $persister = $this->uow->getCollectionPersister($metadata->getAssociationMapping($association)); + $persister = $this->uow->getCollectionPersister($metadata->associationMappings[$association]); if ( ! ($persister instanceof CachedPersister)) { return null; @@ -172,7 +172,7 @@ public function evictEntityRegions() public function containsCollection($className, $association, $ownerIdentifier) { $metadata = $this->em->getClassMetadata($className); - $persister = $this->uow->getCollectionPersister($metadata->getAssociationMapping($association)); + $persister = $this->uow->getCollectionPersister($metadata->associationMappings[$association]); if ( ! ($persister instanceof CachedPersister)) { return false; @@ -187,7 +187,7 @@ public function containsCollection($className, $association, $ownerIdentifier) public function evictCollection($className, $association, $ownerIdentifier) { $metadata = $this->em->getClassMetadata($className); - $persister = $this->uow->getCollectionPersister($metadata->getAssociationMapping($association)); + $persister = $this->uow->getCollectionPersister($metadata->associationMappings[$association]); if ( ! ($persister instanceof CachedPersister)) { return; @@ -202,7 +202,7 @@ public function evictCollection($className, $association, $ownerIdentifier) public function evictCollectionRegion($className, $association) { $metadata = $this->em->getClassMetadata($className); - $persister = $this->uow->getCollectionPersister($metadata->getAssociationMapping($association)); + $persister = $this->uow->getCollectionPersister($metadata->associationMappings[$association]); if ( ! ($persister instanceof CachedPersister)) { return; diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 7302ec1df5f..cfeacc5f868 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -807,37 +807,6 @@ public function getColumnName($fieldName) : $fieldName; } - /** - * Gets the mapping of an association. - * - * @see ClassMetadata::$associationMappings - * - * @param string $fieldName The field name that represents the association in - * the object model. - * - * @return array The mapping. - * - * @throws MappingException - */ - public function getAssociationMapping($fieldName) - { - if ( ! isset($this->associationMappings[$fieldName])) { - throw MappingException::mappingNotFound($this->name, $fieldName); - } - - return $this->associationMappings[$fieldName]; - } - - /** - * Gets all association mappings of the class. - * - * @return array - */ - public function getAssociationMappings() - { - return $this->associationMappings; - } - /** * Gets the named query. * diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 713ad4ef0cf..715ec4e6292 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -833,7 +833,7 @@ public function loadToOneEntity(ToOneAssociationMetadata $association, $sourceEn $mappedBy = $association->getMappedBy(); $sourceClass = $association->getDeclaringClass(); - $owningAssociation = $targetClass->getAssociationMapping($mappedBy); + $owningAssociation = $targetClass->associationMappings[$mappedBy]; $targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName()); foreach ($owningAssociation->getJoinColumns() as $joinColumn) { @@ -1352,7 +1352,7 @@ protected function getSelectColumnsSQL() if (! $association->isOwningSide()) { $eagerEntity = $this->em->getClassMetadata($association->getTargetEntity()); - $owningAssociation = $eagerEntity->getAssociationMapping($association->getMappedBy()); + $owningAssociation = $eagerEntity->associationMappings[$association->getMappedBy()]; } $joinTableAlias = $this->getSQLTableAlias($eagerEntity->getTableName(), $assocAlias); diff --git a/lib/Doctrine/ORM/Query/Parser.php b/lib/Doctrine/ORM/Query/Parser.php index 5f6cfc0edc4..5be5639458c 100644 --- a/lib/Doctrine/ORM/Query/Parser.php +++ b/lib/Doctrine/ORM/Query/Parser.php @@ -1637,7 +1637,7 @@ public function SubselectIdentificationVariableDeclaration() $joinQueryComponent = array( 'metadata' => $targetClass, 'parent' => $identificationVariable, - 'relation' => $class->getAssociationMapping($field), + 'relation' => $association, 'map' => null, 'nestingLevel' => $this->nestingLevel, 'token' => $this->lexer->lookahead diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php index 45229ac57ab..c50667503b5 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php @@ -64,7 +64,7 @@ private function putCollectionCacheEntry($className, $association, array $ownerI $metadata = $this->em->getClassMetadata($className); $cacheKey = new CollectionCacheKey($metadata->name, $association, $ownerIdentifier); $cacheEntry = new CollectionCacheEntry($data); - $persister = $this->em->getUnitOfWork()->getCollectionPersister($metadata->getAssociationMapping($association)); + $persister = $this->em->getUnitOfWork()->getCollectionPersister($metadata->associationMappings[$association]); $persister->getCacheRegion()->put($cacheKey, $cacheEntry); } diff --git a/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php b/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php index 662c328ad97..4c7ac44cab0 100644 --- a/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php @@ -43,7 +43,7 @@ public function setUpPersistentCollection() $classMetaData = $this->emMock->getClassMetadata(ECommerceCart::class); $this->collection = new PersistentCollection($this->emMock, $classMetaData, new ArrayCollection); $this->collection->setInitialized(false); - $this->collection->setOwner(new ECommerceCart(), $classMetaData->getAssociationMapping('products')); + $this->collection->setOwner(new ECommerceCart(), $classMetaData->associationMappings['products']); } public function testCanBePutInLazyLoadingMode() diff --git a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php index 01bf585b7c1..c1c0b938376 100644 --- a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php +++ b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php @@ -91,7 +91,7 @@ private function modifySelectStatement(Query\AST\SelectStatement $selectStatemen [ 'metadata' => $addressMetadata, 'parent' => $rangeVariableDecl->aliasIdentificationVariable, - 'relation' => $userMetadata->getAssociationMapping('address'), + 'relation' => $userMetadata->associationMappings['address'], 'map' => null, 'nestingLevel' => 0, 'token' => null, diff --git a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php index 3a3cf1983af..6c0cc331fcc 100644 --- a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php +++ b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php @@ -218,7 +218,7 @@ private function modifySelectStatement(Query\AST\SelectStatement $selectStatemen [ 'metadata' => $addressMetadata, 'parent' => $rangeVariableDecl->aliasIdentificationVariable, - 'relation' => $userMetadata->getAssociationMapping('address'), + 'relation' => $userMetadata->associationMappings['address'], 'map' => null, 'nestingLevel' => 0, 'token' => null, From 5d043283dddebbfcb3e3be49e3fba47863e05fbb Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 15 Mar 2017 23:46:33 -0400 Subject: [PATCH 116/275] Quick optimizations --- lib/Doctrine/ORM/AbstractQuery.php | 20 +++++------ lib/Doctrine/ORM/Mapping/ClassMetadata.php | 35 ++----------------- .../ORM/Mapping/ClassMetadataFactory.php | 18 ++++++---- .../Collection/ManyToManyPersister.php | 2 +- lib/Doctrine/ORM/Query.php | 10 ++---- lib/Doctrine/ORM/Query/ResultSetMapping.php | 21 ++--------- lib/Doctrine/ORM/Query/SqlWalker.php | 2 -- .../ORM/Functional/Ticket/DDC2825Test.php | 4 ++- .../ORM/Mapping/AbstractMappingDriverTest.php | 8 +++-- 9 files changed, 37 insertions(+), 83 deletions(-) diff --git a/lib/Doctrine/ORM/AbstractQuery.php b/lib/Doctrine/ORM/AbstractQuery.php index 2d64b8e64b6..9ef38ae70dd 100644 --- a/lib/Doctrine/ORM/AbstractQuery.php +++ b/lib/Doctrine/ORM/AbstractQuery.php @@ -21,8 +21,7 @@ use Doctrine\Common\Util\ClassUtils; use Doctrine\Common\Collections\Collection; -use Doctrine\Common\Collections\ArrayCollection; - +use Doctrine\Common\Collections\ArrayCollection;; use Doctrine\ORM\Query\Parameter; use Doctrine\ORM\Cache\QueryCacheKey; use Doctrine\DBAL\Cache\QueryCacheProfile; @@ -404,6 +403,13 @@ public function processParameterValue($value) return $value; } + if ($value instanceof Mapping\ClassMetadata) { + return $value->discriminatorValue + ? $value->discriminatorValue + : $value->name + ; + } + if ($value instanceof Collection) { $value = $value->toArray(); } @@ -425,10 +431,6 @@ public function processParameterValue($value) } } - if ($value instanceof Mapping\ClassMetadata) { - return $value->name; - } - return $value; } @@ -528,7 +530,7 @@ public function getHydrationCacheProfile() */ public function setResultCacheProfile(QueryCacheProfile $profile = null) { - if ( ! $profile->getResultCacheDriver()) { + if (! $profile->getResultCacheDriver()) { $resultCacheDriver = $this->em->getConfiguration()->getResultCacheImpl(); $profile = $profile->setResultCacheDriver($resultCacheDriver); } @@ -1106,9 +1108,7 @@ abstract protected function doExecute(); public function __clone() { $this->parameters = new ArrayCollection(); - - $this->hints = []; - $this->hints = $this->em->getConfiguration()->getDefaultQueryHints(); + $this->hints = $this->em->getConfiguration()->getDefaultQueryHints(); } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index cfeacc5f868..2412c0f429c 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -789,24 +789,6 @@ public function isIdentifier($fieldName) return in_array($fieldName, $this->identifier, true); } - /** - * Gets a column name for a field name. - * If the column name for the field cannot be found, the given field name - * is returned. - * - * @todo remove - * - * @param string $fieldName The field name. - * - * @return string The column name. - */ - public function getColumnName($fieldName) - { - return isset($this->properties[$fieldName]) - ? $this->properties[$fieldName]->getColumnName() - : $fieldName; - } - /** * Gets the named query. * @@ -1255,19 +1237,6 @@ public function getSingleIdentifierFieldName() return $this->identifier[0]; } - /** - * Gets the column name of the single id column. Note that this only works on - * entity classes that have a single-field pk. - * - * @return string - * - * @throws MappingException If the class has a composite primary key. - */ - public function getSingleIdentifierColumnName() - { - return $this->getColumnName($this->getSingleIdentifierFieldName()); - } - /** * INTERNAL: * Sets the mapped identifier/primary key fields of this class. @@ -2448,7 +2417,9 @@ private function assertPropertyNotMapped(string $fieldName) */ public function getSequenceName(AbstractPlatform $platform) { - return sprintf('%s_%s_seq', $this->getSequencePrefix($platform), $this->getSingleIdentifierColumnName()); + $property = $this->properties[$this->getSingleIdentifierFieldName()]; + + return sprintf('%s_%s_seq', $this->getSequencePrefix($platform), $property->getColumnName()); } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index ddf5b010fc5..fcc2454ca3b 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -683,17 +683,19 @@ private function completeIdGeneratorMapping(ClassMetadata $class) switch ($class->generatorType) { case GeneratorType::IDENTITY: $sequenceName = null; - $fieldName = $class->identifier ? $class->getSingleIdentifierFieldName() : null; + $property = $class->identifier + ? $class->getProperty($class->getSingleIdentifierFieldName()) + : null + ; // Platforms that do not have native IDENTITY support need a sequence to emulate this behaviour. - if ($platform->usesSequenceEmulatedIdentityColumns()) { - $columnName = $class->getSingleIdentifierColumnName(); + if ($property && $platform->usesSequenceEmulatedIdentityColumns()) { $sequencePrefix = $class->getSequencePrefix($platform); - $idSequenceName = $platform->getIdentitySequenceName($sequencePrefix, $columnName); + $idSequenceName = $platform->getIdentitySequenceName($sequencePrefix, $property->getColumnName()); $sequenceName = $platform->quoteIdentifier($platform->fixSchemaElementName($idSequenceName)); } - $generator = ($fieldName && $class->getProperty($fieldName)->getTypeName() === 'bigint') + $generator = ($property && $property->getTypeName() === 'bigint') ? new Sequencing\BigIntegerIdentityGenerator($sequenceName) : new Sequencing\IdentityGenerator($sequenceName) ; @@ -707,10 +709,12 @@ private function completeIdGeneratorMapping(ClassMetadata $class) $definition = $class->generatorDefinition; if ( ! $definition) { - $sequenceName = $class->getSequenceName($platform); + // @todo guilhermeblanco Move sequence generation to DBAL + $idSequenceName = $class->getSequenceName($platform); + $sequenceName = $platform->fixSchemaElementName($idSequenceName); $definition = [ - 'sequenceName' => $platform->fixSchemaElementName($sequenceName), + 'sequenceName' => $sequenceName, 'allocationSize' => 1, ]; diff --git a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php index 8d6a3553650..c23868cd926 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php @@ -648,7 +648,7 @@ private function getJoinTableRestrictionsWithKey(PersistentCollection $collectio $tableName = $targetClass->table->getQuotedQualifiedName($this->platform); $quotedJoinTable .= ' JOIN ' . $tableName . ' tr ON ' . implode(' AND ', $joinConditions); - $columnName = $targetClass->getColumnName($indexBy); + $columnName = $targetClass->getProperty($indexBy)->getColumnName(); $whereClauses[] = 'tr.' . $this->platform->quoteIdentifier($columnName) . ' = ?'; $params[] = $key; diff --git a/lib/Doctrine/ORM/Query.php b/lib/Doctrine/ORM/Query.php index 5cf8b09e9f5..c45dc8d4443 100644 --- a/lib/Doctrine/ORM/Query.php +++ b/lib/Doctrine/ORM/Query.php @@ -386,19 +386,13 @@ private function processParameterMappings($paramMappings) $types = []; foreach ($this->parameters as $parameter) { - $key = $parameter->getName(); - $value = $parameter->getValue(); - $rsm = $this->getResultSetMapping(); + $key = $parameter->getName(); + $value = $parameter->getValue(); if ( ! isset($paramMappings[$key])) { throw QueryException::unknownParameter($key); } - // @todo guilhermeblanco Why is this needed? - if (isset($rsm->metadataParameterMapping[$key]) && $value instanceof ClassMetadata) { - $value = $value->getMetadataValue($rsm->metadataParameterMapping[$key]); - } - $value = $this->processParameterValue($value); $type = ($parameter->getValue() === $value) ? $parameter->getType() diff --git a/lib/Doctrine/ORM/Query/ResultSetMapping.php b/lib/Doctrine/ORM/Query/ResultSetMapping.php index 6e582d9ef55..87f0918b2a7 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMapping.php +++ b/lib/Doctrine/ORM/Query/ResultSetMapping.php @@ -19,6 +19,7 @@ namespace Doctrine\ORM\Query; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\AssociationMetadata; /** * A ResultSetMapping describes how a result set of an SQL query maps to a Doctrine result. @@ -162,13 +163,6 @@ class ResultSetMapping */ public $newObjectMappings = []; - /** - * Maps metadata parameter names to the metadata attribute. - * - * @var array - */ - public $metadataParameterMapping = []; - /** * Adds an entity result to this ResultSetMapping. * @@ -387,17 +381,6 @@ public function addScalarResult($columnName, $alias, Type $type) return $this; } - /** - * Adds a metadata parameter mappings. - * - * @param mixed $parameter The parameter name in the SQL result set. - * @param string $attribute The metadata attribute. - */ - public function addMetadataParameterMapping($parameter, $attribute) - { - $this->metadataParameterMapping[$parameter] = $attribute; - } - /** * Checks whether a column with a given name is mapped as a scalar result. * @@ -452,7 +435,7 @@ public function getDeclaringClass($columnName) /** * @param string $alias * - * @return string + * @return AssociationMetadata */ public function getRelation($alias) { diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 5f079dbc892..7c1af03f27b 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -2110,8 +2110,6 @@ public function walkInstanceOfExpression($instanceOfExpr) foreach ($instanceOfExpr->value as $parameter) { if ($parameter instanceof AST\InputParameter) { - $this->rsm->addMetadataParameterMapping($parameter->name, 'discriminatorValue'); - $sqlParameterList[] = $this->walkInputParameter($parameter); continue; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php index fa24f030a7b..3192770a8d2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php @@ -53,9 +53,11 @@ public function testClassSchemaMappingsValidity($className, $expectedSchemaName, self::assertEquals($fullTableName, $quotedTableName); + $property = $classMetadata->getProperty($classMetadata->getSingleIdentifierFieldName()); + // Checks sequence name validity self::assertEquals( - str_replace('"', '', $fullTableName) . '_' . $classMetadata->getSingleIdentifierColumnName() . '_seq', + str_replace('"', '', $fullTableName) . '_' . $property->getColumnName() . '_seq', $classMetadata->getSequenceName($platform) ); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 75e33fe5408..a9eef77e9b7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -594,10 +594,12 @@ public function testNamingStrategy() $em->getConfiguration()->setNamingStrategy(new UnderscoreNamingStrategy(CASE_UPPER)); self::assertInstanceOf(UnderscoreNamingStrategy::class, $em->getConfiguration()->getNamingStrategy()); - $class = $factory->getMetadataFor(DDC1476EntityWithDefaultFieldType::class); + $class = $factory->getMetadataFor(DDC1476EntityWithDefaultFieldType::class); + $idProperty = $class->getProperty('id'); + $nameProperty = $class->getProperty('name'); - self::assertEquals('ID', $class->getColumnName('id')); - self::assertEquals('NAME', $class->getColumnName('name')); + self::assertEquals('ID', $idProperty->getColumnName()); + self::assertEquals('NAME', $nameProperty->getColumnName()); self::assertEquals('DDC1476ENTITY_WITH_DEFAULT_FIELD_TYPE', $class->table->getName()); } From 6c93020ab8cfa17c07d562713f420382b6583891 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 15 Mar 2017 23:47:53 -0400 Subject: [PATCH 117/275] Missing file from previous commit --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 2412c0f429c..033a7f25ffa 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -2319,22 +2319,6 @@ public function fullyQualifiedClassName($className) return $className; } - /** - * @param string $name - * - * @return mixed - * - * @todo guilhermeblanco Consider removing this method somehow - */ - public function getMetadataValue($name) - { - if (isset($this->$name)) { - return $this->$name; - } - - return null; - } - /** * Map Embedded Class * From 236088e0b72e3a919f8113c81c0eb5b80e95f092 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 15 Mar 2017 23:57:25 -0400 Subject: [PATCH 118/275] Changed isReadOnly to be private and also added wrapper method --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 20 ++++++++++++++----- .../Command/MappingDescribeCommand.php | 2 +- lib/Doctrine/ORM/UnitOfWork.php | 4 ++-- .../Builder/ClassMetadataBuilderTest.php | 2 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 2 +- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 033a7f25ffa..901947354cc 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -93,7 +93,7 @@ class ClassMetadata implements ClassMetadataInterface public $isEmbeddedClass = false; /** - * READ-ONLY: Whether this class describes the mapping of a read-only class. + * Whether this class describes the mapping of a read-only class. * That means it is never considered for change-tracking in the UnitOfWork. * It is a very helpful performance optimization for entities that are immutable, * either in your domain or through the relation database (coming from a view, @@ -101,7 +101,7 @@ class ClassMetadata implements ClassMetadataInterface * * @var boolean */ - public $isReadOnly = false; + private $readOnly = false; /** * READ-ONLY: The names of the parent classes (ancestors). @@ -535,8 +535,8 @@ public function __sleep() $serialized[] = 'sqlResultSetMappings'; } - if ($this->isReadOnly) { - $serialized[] = 'isReadOnly'; + if ($this->readOnly) { + $serialized[] = 'readOnly'; } if ($this->cache) { @@ -2205,7 +2205,17 @@ public function setVersionProperty(VersionFieldMetadata $versionFieldMetadata) */ public function markReadOnly() { - $this->isReadOnly = true; + $this->readOnly = true; + } + + /** + * Whether this class is read only or not. + * + * @return bool + */ + public function isReadOnly() + { + return $this->readOnly; } /** diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index 006ce792932..4b69f4eca00 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -120,7 +120,7 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage $this->formatField('Change tracking policy', $metadata->changeTrackingPolicy), $this->formatField('Versioned?', $metadata->isVersioned()), $this->formatField('Version field', ($metadata->isVersioned() ? $metadata->versionProperty->getName() : '')), - $this->formatField('Read only?', $metadata->isReadOnly), + $this->formatField('Read only?', $metadata->isReadOnly()), $this->formatEntityListeners($metadata->entityListeners), ], diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index d20f49a06d6..e504fac4a71 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -487,7 +487,7 @@ private function computeSingleEntityChangeSet($entity) // Compute changes for INSERTed entities first. This must always happen even in this case. $this->computeScheduleInsertsChangeSets(); - if ($class->isReadOnly) { + if ($class->isReadOnly()) { return; } @@ -783,7 +783,7 @@ public function computeChangeSets() $class = $this->em->getClassMetadata($className); // Skip class if instances are read-only - if ($class->isReadOnly) { + if ($class->isReadOnly()) { continue; } diff --git a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php index e153f01e6c1..4b964d198b7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php @@ -155,7 +155,7 @@ public function testSetCustomRepositoryClass() public function testSetReadOnly() { self::assertIsFluent($this->builder->setReadOnly()); - self::assertTrue($this->cm->isReadOnly); + self::assertTrue($this->cm->isReadOnly()); } public function testSetInheritanceJoined() diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index b796997f469..89aaa061ee2 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -87,7 +87,7 @@ public function testClassMetadataInstanceSerialization() self::assertEquals(['UserParent'], $cm->parentClasses); self::assertEquals(CMS\UserRepository::class, $cm->customRepositoryClassName); self::assertEquals($discrColumn, $cm->discriminatorColumn); - self::assertTrue($cm->isReadOnly); + self::assertTrue($cm->isReadOnly()); self::assertEquals(['dql' => ['name'=>'dql','query'=>'foo','dql'=>'foo']], $cm->namedQueries); self::assertEquals(1, count($cm->associationMappings)); self::assertInstanceOf(Mapping\OneToOneAssociationMetadata::class, $cm->associationMappings['phonenumbers']); From a9ab3c6c3e7084efc52d5206794ba4389ab151fb Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 17 Mar 2017 12:08:19 -0400 Subject: [PATCH 119/275] Quick changes --- .../Mapping/Builder/ClassMetadataBuilder.php | 45 +++++------ lib/Doctrine/ORM/Mapping/ClassMetadata.php | 79 +++---------------- .../ORM/Mapping/Driver/AnnotationDriver.php | 8 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 2 +- .../EventListener/CacheMetadataListener.php | 20 ++--- .../Builder/ClassMetadataBuilderTest.php | 20 ++--- .../Tests/ORM/Mapping/ClassMetadataTest.php | 2 +- .../php/Doctrine.Tests.Models.Cache.City.php | 10 ++- 8 files changed, 64 insertions(+), 122 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php index 7c82154f683..5e59ddc6fb5 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Mapping\Builder; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\CacheMetadata; use Doctrine\ORM\Mapping\ChangeTrackingPolicy; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; @@ -65,7 +66,7 @@ public function getClassMetadata() * * @return ClassMetadataBuilder */ - public function setMappedSuperClass() + public function asMappedSuperClass() { $this->cm->isMappedSuperclass = true; $this->cm->isEmbeddedClass = false; @@ -78,7 +79,7 @@ public function setMappedSuperClass() * * @return ClassMetadataBuilder */ - public function setEmbeddable() + public function asEmbeddable() { $this->cm->isEmbeddedClass = true; $this->cm->isMappedSuperclass = false; @@ -86,6 +87,18 @@ public function setEmbeddable() return $this; } + /** + * Marks class read only. + * + * @return ClassMetadataBuilder + */ + public function asReadOnly() + { + $this->cm->asReadOnly(); + + return $this; + } + /** * Adds and embedded class * @@ -122,18 +135,6 @@ public function setCustomRepositoryClass($repositoryClassName) return $this; } - /** - * Marks class read only. - * - * @return ClassMetadataBuilder - */ - public function setReadOnly() - { - $this->cm->markReadOnly(); - - return $this; - } - /** * Sets the table metadata. * @@ -149,19 +150,15 @@ public function withTable(TableMetadata $tableMetadata) } /** - * @param string $usage - * @param string $region + * @param null|CacheMetadata $cache + * + * @return self */ - public function withCache(string $usage, string $region) + public function withCache(CacheMetadata $cache = null) { - $cacheBuilder = new CacheMetadataBuilder(); + $this->cm->setCache($cache); - $cacheBuilder - ->withUsage(strtoupper($usage)) - ->withRegion($region) - ; - - $this->cm->setCache($cacheBuilder->build()); + return $this; } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 901947354cc..004f1c2d1c7 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -366,37 +366,21 @@ public function __construct($entityName, NamingStrategy $namingStrategy = null) */ public function getIdentifierValues($entity) { - if ($this->isIdentifierComposite) { - $id = []; - - foreach ($this->identifier as $idField) { - if (($property = $this->getProperty($idField)) === null) { - $property = $this->associationMappings[$idField]; - } - - $value = $property->getValue($entity); + $id = []; - if (null !== $value) { - $id[$idField] = $value; - } + foreach ($this->identifier as $idField) { + if (($property = $this->getProperty($idField)) === null) { + $property = $this->associationMappings[$idField]; } - return $id; - } - - $idField = $this->identifier[0]; - - if (($property = $this->getProperty($idField)) === null) { - $property = $this->associationMappings[$idField]; - } - - $value = $property->getValue($entity); + $value = $property->getValue($entity); - if (null === $value) { - return []; + if (null !== $value) { + $id[$idField] = $value; + } } - return [$idField => $value]; + return $id; } /** @@ -713,49 +697,6 @@ public function setCache(CacheMetadata $cache = null) $this->cache = $cache; } - /** - * @param string $fieldName - * @param array $cache - * - * @todo guilhermeblanco Remove me once Association is OOed - * - * @return void - */ - public function enableAssociationCache($fieldName, array $cache) - { - $this->associationMappings[$fieldName]->setCache($this->getAssociationCacheDefaults($fieldName, $cache)); - } - - /** - * @param string $fieldName - * @param array $cache - * - * @todo guilhermeblanco Remove me once Association is OOed - * - * @return array - */ - public function getAssociationCacheDefaults($fieldName, array $cache) - { - $region = $cache['region'] ?? strtolower(str_replace('\\', '_', $this->rootEntityName)) . '__' . $fieldName; - $usage = $cache['usage'] ?? null; - - if (! $usage) { - $usage = $this->cache->getUsage() !== null - ? $this->cache->getUsage() - : CacheUsage::READ_ONLY - ; - } - - $builder = new Builder\CacheMetadataBuilder(); - - $builder - ->withRegion($region) - ->withUsage($usage) - ; - - return $builder->build(); - } - /** * Sets the change tracking policy used by this class. * @@ -2203,7 +2144,7 @@ public function setVersionProperty(VersionFieldMetadata $versionFieldMetadata) * * @return void */ - public function markReadOnly() + public function asReadOnly() { $this->readOnly = true; } diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 36c84a46a80..c9621f5b83b 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -84,7 +84,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat } if ($entityAnnot->readOnly) { - $builder->setReadOnly(); + $builder->asReadOnly(); } break; @@ -93,11 +93,11 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $mappedSuperclassAnnot = $classAnnotations[Annotation\MappedSuperclass::class]; $builder->setCustomRepositoryClass($mappedSuperclassAnnot->repositoryClass); - $builder->setMappedSuperClass(); + $builder->asMappedSuperClass(); break; case isset($classAnnotations[Annotation\Embeddable::class]): - $builder->setEmbeddable(); + $builder->asEmbeddable(); break; default: @@ -145,7 +145,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $cacheAnnot = $classAnnotations[Annotation\Cache::class]; $cache = $this->convertCacheAnnotationToCacheMetadata($cacheAnnot, $metadata); - $metadata->setCache($cache); + $builder->withCache($cache); } // Evaluate NamedNativeQueries annotation diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 895eee6954c..17417c04c49 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -78,7 +78,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $metadata->setCustomRepositoryClass((string) $xmlRoot['repository-class']); } if (isset($xmlRoot['read-only']) && $this->evaluateBoolean($xmlRoot['read-only'])) { - $metadata->markReadOnly(); + $metadata->asReadOnly(); } } else if ($xmlRoot->getName() === 'mapped-superclass') { $metadata->setCustomRepositoryClass( diff --git a/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php b/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php index 9444bcf20dd..5a8f8193f90 100644 --- a/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php +++ b/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php @@ -68,24 +68,26 @@ protected function enableCaching(ClassMetadata $metadata, EntityManager $em) return; } - $metadata->setCache( - new CacheMetadata( - CacheUsage::NONSTRICT_READ_WRITE, - strtolower(str_replace('\\', '_', $metadata->rootEntityName)) - ) - ); + $region = strtolower(str_replace('\\', '_', $metadata->rootEntityName)); + + $metadata->setCache(new CacheMetadata(CacheUsage::NONSTRICT_READ_WRITE, $region)); $this->recordVisit($metadata); // only enable association-caching when the target has already been // given caching settings - foreach ($metadata->associationMappings as $mapping) { - $targetMeta = $em->getClassMetadata($mapping['targetEntity']); + foreach ($metadata->associationMappings as $association) { + $targetMeta = $em->getClassMetadata($association->getTargetEntity()); $this->enableCaching($targetMeta, $em); if ($this->isVisited($targetMeta)) { - $metadata->enableAssociationCache($mapping['fieldName'], []); + $association->setCache( + new CacheMetadata( + CacheUsage::NONSTRICT_READ_WRITE, + sprintf('%s__%s', $region, $association->getName()) + ) + ); } } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php index 4b964d198b7..a051a9814b1 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php @@ -42,9 +42,9 @@ public function setUp() /** * @group embedded */ - public function testSetMappedSuperClass() + public function testAsMappedSuperClass() { - self::assertIsFluent($this->builder->setMappedSuperClass()); + self::assertIsFluent($this->builder->asMappedSuperClass()); self::assertTrue($this->cm->isMappedSuperclass); self::assertFalse($this->cm->isEmbeddedClass); } @@ -52,13 +52,19 @@ public function testSetMappedSuperClass() /** * @group embedded */ - public function testSetEmbedable() + public function testAsEmbeddable() { - self::assertIsFluent($this->builder->setEmbeddable()); + self::assertIsFluent($this->builder->asEmbeddable()); self::assertTrue($this->cm->isEmbeddedClass); self::assertFalse($this->cm->isMappedSuperclass); } + public function testAsReadOnly() + { + self::assertIsFluent($this->builder->asReadOnly()); + self::assertTrue($this->cm->isReadOnly()); + } + /** * @group embedded */ @@ -152,12 +158,6 @@ public function testSetCustomRepositoryClass() self::assertEquals(CmsGroup::class, $this->cm->customRepositoryClassName); } - public function testSetReadOnly() - { - self::assertIsFluent($this->builder->setReadOnly()); - self::assertTrue($this->cm->isReadOnly()); - } - public function testSetInheritanceJoined() { self::assertIsFluent($this->builder->setJoinedTableInheritance()); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 89aaa061ee2..a46f5a53133 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -53,7 +53,7 @@ public function testClassMetadataInstanceSerialization() $cm->setParentClasses(["UserParent"]); $cm->setCustomRepositoryClass("UserRepository"); $cm->setDiscriminatorColumn($discrColumn); - $cm->markReadOnly(); + $cm->asReadOnly(); $cm->addNamedQuery(['name' => 'dql', 'query' => 'foo']); $association = new Mapping\OneToOneAssociationMetadata('phonenumbers'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index 54024541fad..d83021b631d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -47,11 +47,12 @@ $association->setJoinColumns($joinColumns); $association->setTargetEntity(State::class); $association->setInversedBy('cities'); +$association->setCache( + new Mapping\CacheMetadata(Mapping\CacheUsage::READ_ONLY, 'doctrine_tests_models_cache_city__state') +); $metadata->addAssociation($association); -$metadata->enableAssociationCache('state', ['usage' => Mapping\CacheUsage::READ_ONLY]); - $association = new Mapping\ManyToManyAssociationMetadata('travels'); $association->setTargetEntity(Travel::class); @@ -64,7 +65,8 @@ $association->setTargetEntity(Attraction::class); $association->setMappedBy('city'); $association->setOrderBy(['name' => 'ASC']); +$association->setCache( + new Mapping\CacheMetadata(Mapping\CacheUsage::READ_ONLY, 'doctrine_tests_models_cache_city__attractions') +); $metadata->addAssociation($association); - -$metadata->enableAssociationCache('attractions', ['usage' => Mapping\CacheUsage::READ_ONLY]); From d8243580f3fc4fb7d6af447f1a2cb982150059b3 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Tue, 21 Mar 2017 17:54:47 -0400 Subject: [PATCH 120/275] Merged associationMappings with properties --- lib/Doctrine/ORM/Cache/DefaultCache.php | 10 +- .../ORM/Cache/DefaultCollectionHydrator.php | 13 +- .../ORM/Cache/DefaultEntityHydrator.php | 19 +- lib/Doctrine/ORM/Cache/DefaultQueryCache.php | 10 +- .../AbstractCollectionPersister.php | 2 +- .../Entity/AbstractEntityPersister.php | 8 +- .../Internal/Hydration/AbstractHydrator.php | 9 +- .../ORM/Internal/Hydration/ArrayHydrator.php | 2 +- .../ORM/Internal/Hydration/ObjectHydrator.php | 19 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 127 +++---- .../ORM/Mapping/ClassMetadataFactory.php | 49 +-- .../ORM/Mapping/Driver/AnnotationDriver.php | 5 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 5 +- lib/Doctrine/ORM/PersistentCollection.php | 4 +- .../Collection/ManyToManyPersister.php | 10 +- .../Collection/OneToManyPersister.php | 2 +- .../Entity/BasicEntityPersister.php | 174 +++++---- .../Entity/JoinedSubclassPersister.php | 50 ++- .../Entity/SingleTablePersister.php | 23 +- .../ORM/Persisters/SqlExpressionVisitor.php | 8 +- lib/Doctrine/ORM/Proxy/ProxyFactory.php | 6 +- .../Query/AST/Functions/IdentityFunction.php | 2 +- .../ORM/Query/AST/Functions/SizeFunction.php | 6 +- .../Query/Exec/MultiTableUpdateExecutor.php | 6 +- lib/Doctrine/ORM/Query/Parser.php | 28 +- .../ORM/Query/ResultSetMappingBuilder.php | 84 +++-- lib/Doctrine/ORM/Query/SqlWalker.php | 32 +- .../ORM/Sequencing/AssignedGenerator.php | 7 +- .../Command/MappingDescribeCommand.php | 16 +- .../ORM/Tools/DebugUnitOfWorkListener.php | 33 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 105 +++--- .../ORM/Tools/Export/Driver/PhpExporter.php | 172 ++++----- .../ORM/Tools/Export/Driver/XmlExporter.php | 232 ++++++------ .../Tools/Pagination/CountOutputWalker.php | 13 +- .../ORM/Tools/Pagination/CountWalker.php | 27 +- .../Pagination/LimitSubqueryOutputWalker.php | 15 +- .../Tools/Pagination/LimitSubqueryWalker.php | 9 +- .../ORM/Tools/Pagination/WhereInWalker.php | 27 +- .../ORM/Tools/ResolveTargetEntityListener.php | 5 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 30 +- lib/Doctrine/ORM/Tools/SchemaValidator.php | 47 ++- lib/Doctrine/ORM/UnitOfWork.php | 335 ++++++++++-------- .../ORM/Utility/IdentifierFlattener.php | 11 +- lib/Doctrine/ORM/Utility/PersisterHelper.php | 38 +- .../ORM/Cache/DefaultCacheFactoryTest.php | 8 +- .../Tests/ORM/Cache/DefaultCacheTest.php | 2 +- .../AbstractCollectionPersisterTest.php | 4 +- .../ORM/Functional/BasicFunctionalTest.php | 3 +- .../ORM/Functional/DatabaseDriverTest.php | 23 +- .../Functional/ExtraLazyCollectionTest.php | 44 +-- ...nyToManySelfReferentialAssociationTest.php | 2 +- ...anyToManyUnidirectionalAssociationTest.php | 2 +- ...neToManySelfReferentialAssociationTest.php | 2 +- .../OneToOneBidirectionalAssociationTest.php | 4 +- ...OneToOneSelfReferentialAssociationTest.php | 4 +- .../OneToOneUnidirectionalAssociationTest.php | 2 +- .../Tests/ORM/Functional/SQLFilterTest.php | 8 +- ...econdLevelCacheExtraLazyCollectionTest.php | 8 +- .../StandardEntityPersisterTest.php | 2 +- .../ORM/Functional/Ticket/DDC1301Test.php | 12 +- .../ORM/Functional/Ticket/DDC168Test.php | 6 +- .../ORM/Functional/Ticket/DDC2074Test.php | 2 +- .../ORM/Functional/Ticket/DDC599Test.php | 4 +- .../ORM/Functional/Ticket/DDC758Test.php | 9 +- .../ORM/Hydration/ObjectHydratorTest.php | 4 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 68 ++-- .../ORM/Mapping/AnnotationDriverTest.php | 12 +- .../Mapping/BasicInheritanceMappingTest.php | 2 +- .../Builder/ClassMetadataBuilderTest.php | 18 +- .../ORM/Mapping/ClassMetadataFactoryTest.php | 12 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 34 +- .../ORM/Mapping/XmlMappingDriverTest.php | 4 +- .../Tests/ORM/PersistentCollectionTest.php | 2 +- .../ORM/Query/CustomTreeWalkersJoinTest.php | 2 +- .../Tests/ORM/Query/CustomTreeWalkersTest.php | 2 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 2 +- .../AbstractClassMetadataExporterTest.php | 103 +++--- .../Tools/ResolveTargetEntityListenerTest.php | 4 +- 78 files changed, 1184 insertions(+), 1071 deletions(-) diff --git a/lib/Doctrine/ORM/Cache/DefaultCache.php b/lib/Doctrine/ORM/Cache/DefaultCache.php index bc19836e36d..e6914186288 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCache.php +++ b/lib/Doctrine/ORM/Cache/DefaultCache.php @@ -94,7 +94,7 @@ public function getEntityCacheRegion($className) public function getCollectionCacheRegion($className, $association) { $metadata = $this->em->getClassMetadata($className); - $persister = $this->uow->getCollectionPersister($metadata->associationMappings[$association]); + $persister = $this->uow->getCollectionPersister($metadata->getProperty($association)); if ( ! ($persister instanceof CachedPersister)) { return null; @@ -172,7 +172,7 @@ public function evictEntityRegions() public function containsCollection($className, $association, $ownerIdentifier) { $metadata = $this->em->getClassMetadata($className); - $persister = $this->uow->getCollectionPersister($metadata->associationMappings[$association]); + $persister = $this->uow->getCollectionPersister($metadata->getProperty($association)); if ( ! ($persister instanceof CachedPersister)) { return false; @@ -187,7 +187,7 @@ public function containsCollection($className, $association, $ownerIdentifier) public function evictCollection($className, $association, $ownerIdentifier) { $metadata = $this->em->getClassMetadata($className); - $persister = $this->uow->getCollectionPersister($metadata->associationMappings[$association]); + $persister = $this->uow->getCollectionPersister($metadata->getProperty($association)); if ( ! ($persister instanceof CachedPersister)) { return; @@ -202,7 +202,7 @@ public function evictCollection($className, $association, $ownerIdentifier) public function evictCollectionRegion($className, $association) { $metadata = $this->em->getClassMetadata($className); - $persister = $this->uow->getCollectionPersister($metadata->associationMappings[$association]); + $persister = $this->uow->getCollectionPersister($metadata->getProperty($association)); if ( ! ($persister instanceof CachedPersister)) { return; @@ -219,7 +219,7 @@ public function evictCollectionRegions() $metadatas = $this->em->getMetadataFactory()->getAllMetadata(); foreach ($metadatas as $metadata) { - foreach ($metadata->associationMappings as $association) { + foreach ($metadata->getProperties() as $association) { if (! $association instanceof ToManyAssociationMetadata) { continue; } diff --git a/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php b/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php index 37ff4378f77..197b3e8e980 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php @@ -74,10 +74,15 @@ public function buildCacheEntry(ClassMetadata $metadata, CollectionCacheKey $key /** * {@inheritdoc} */ - public function loadCacheEntry(ClassMetadata $metadata, CollectionCacheKey $key, CollectionCacheEntry $entry, PersistentCollection $collection) + public function loadCacheEntry( + ClassMetadata $metadata, + CollectionCacheKey $key, + CollectionCacheEntry $entry, + PersistentCollection $collection + ) { /* @var $targetPersister \Doctrine\ORM\Cache\Persister\CachedPersister */ - $association = $metadata->associationMappings[$key->association]; + $association = $metadata->getProperty($key->association); $targetPersister = $this->uow->getEntityPersister($association->getTargetEntity()); $targetRegion = $targetPersister->getCacheRegion(); $list = []; @@ -90,7 +95,9 @@ public function loadCacheEntry(ClassMetadata $metadata, CollectionCacheKey $key, /* @var $entityEntries \Doctrine\ORM\Cache\EntityCacheEntry[] */ foreach ($entityEntries as $index => $entityEntry) { - $list[$index] = $this->uow->createEntity($entityEntry->class, $entityEntry->resolveAssociationEntries($this->em), self::$hints); + $data = $entityEntry->resolveAssociationEntries($this->em); + + $list[$index] = $this->uow->createEntity($entityEntry->class, $data, self::$hints); } array_walk($list, function($entity, $index) use ($collection) { diff --git a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php index aed9337de81..1ee23b2502d 100644 --- a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php @@ -23,6 +23,7 @@ use Doctrine\Common\Util\ClassUtils; use Doctrine\ORM\Mapping\FetchMode; +use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\Query; @@ -78,8 +79,8 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e $data = $this->uow->getOriginalEntityData($entity); $data = array_merge($data, $metadata->getIdentifierValues($entity)); // why update has no identifier values ? - foreach ($metadata->associationMappings as $name => $association) { - if ( ! isset($data[$name])) { + foreach ($metadata->getProperties() as $name => $association) { + if (! isset($data[$name]) || $association instanceof FieldMetadata) { continue; } @@ -94,7 +95,7 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e if (! $association->getCache()) { $owningAssociation = ! $association->isOwningSide() - ? $targetClassMetadata->associationMappings[$association->getMappedBy()] + ? $targetClassMetadata->getProperty($association->getMappedBy()) : $association; $associationIds = $this->identifierFlattener->flattenIdentifier( $targetClassMetadata, @@ -106,7 +107,9 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e foreach ($associationIds as $fieldName => $fieldValue) { // $fieldName = "name" // $fieldColumnName = "custom_name" - if (($property = $targetClassMetadata->getProperty($fieldName)) !== null) { + $property = $targetClassMetadata->getProperty($fieldName); + + if ($property instanceof FieldMetadata) { foreach ($owningAssociation->getJoinColumns() as $joinColumn) { // $joinColumnName = "custom_name" // $joinColumnReferencedColumnName = "other_side_of_assoc_column_name" @@ -122,7 +125,7 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e continue; } - $targetAssociation = $targetClassMetadata->associationMappings[$fieldName]; + $targetAssociation = $targetClassMetadata->getProperty($fieldName); foreach ($association->getJoinColumns() as $assocJoinColumn) { foreach ($targetAssociation->getJoinColumns() as $targetAssocJoinColumn) { @@ -187,8 +190,8 @@ public function loadCacheEntry( $hints[Query::HINT_REFRESH_ENTITY] = $entity; } - foreach ($metadata->associationMappings as $name => $association) { - if (! $association->getCache() || ! isset($data[$name])) { + foreach ($metadata->getProperties() as $name => $association) { + if ($association instanceof FieldMetadata || ! isset($data[$name]) || ! $association->getCache()) { continue; } @@ -199,7 +202,7 @@ public function loadCacheEntry( ($association instanceof OneToOneAssociationMetadata && ! $association->isOwningSide()) ); - if ( ! $isEagerLoad) { + if (! $isEagerLoad) { $data[$name] = $this->em->getReference($assocClass, $assocId); continue; diff --git a/lib/Doctrine/ORM/Cache/DefaultQueryCache.php b/lib/Doctrine/ORM/Cache/DefaultQueryCache.php index 9919be05710..ac4929ff4dd 100644 --- a/lib/Doctrine/ORM/Cache/DefaultQueryCache.php +++ b/lib/Doctrine/ORM/Cache/DefaultQueryCache.php @@ -292,7 +292,7 @@ public function put(QueryCacheKey $key, ResultSetMapping $rsm, $result, array $h $parentAlias = $rsm->parentAliasMap[$alias]; $parentClass = $rsm->aliasMap[$parentAlias]; $metadata = $this->em->getClassMetadata($parentClass); - $assoc = $metadata->associationMappings[$name]; + $association = $metadata->getProperty($name); $assocValue = $this->getAssociationValue($rsm, $alias, $entity); if ($assocValue === null) { @@ -302,7 +302,7 @@ public function put(QueryCacheKey $key, ResultSetMapping $rsm, $result, array $h // root entity association if ($rootAlias === $parentAlias) { // Cancel put result if association put fail - if (($assocInfo = $this->storeAssociationCache($key, $assoc, $assocValue)) === null) { + if (($assocInfo = $this->storeAssociationCache($key, $association, $assocValue)) === null) { return false; } @@ -314,7 +314,7 @@ public function put(QueryCacheKey $key, ResultSetMapping $rsm, $result, array $h // store single nested association if ( ! is_array($assocValue)) { // Cancel put result if association put fail - if ($this->storeAssociationCache($key, $assoc, $assocValue) === null) { + if ($this->storeAssociationCache($key, $association, $assocValue) === null) { return false; } @@ -324,7 +324,7 @@ public function put(QueryCacheKey $key, ResultSetMapping $rsm, $result, array $h // store array of nested association foreach ($assocValue as $aVal) { // Cancel put result if association put fail - if ($this->storeAssociationCache($key, $assoc, $aVal) === null) { + if ($this->storeAssociationCache($key, $association, $aVal) === null) { return false; } } @@ -427,7 +427,7 @@ private function getAssociationPathValue($value, array $path) { $mapping = array_shift($path); $metadata = $this->em->getClassMetadata($mapping['class']); - $association = $metadata->associationMappings[$mapping['field']]; + $association = $metadata->getProperty($mapping['field']); $value = $association->getValue($value); if ($value === null) { diff --git a/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php b/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php index 4b1cf95be06..77384b40d15 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php @@ -172,7 +172,7 @@ public function loadCollectionCache(PersistentCollection $collection, Collection public function storeCollectionCache(CollectionCacheKey $key, $elements) { /* @var $targetPersister CachedEntityPersister */ - $association = $this->sourceEntity->associationMappings[$key->association]; + $association = $this->sourceEntity->getProperty($key->association); $targetPersister = $this->uow->getEntityPersister($this->targetEntity->rootEntityName); $targetRegion = $targetPersister->getCacheRegion(); $targetHydrator = $targetPersister->getEntityHydrator(); diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php index 2bf1992fe10..7d2bd2379f5 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php @@ -267,9 +267,9 @@ private function storeJoinedAssociations($entity) if ($this->joinedAssociations === null) { $associations = []; - foreach ($this->class->associationMappings as $association) { - if ($association->getCache() && - $association instanceof ToOneAssociationMetadata && + foreach ($this->class->getProperties() as $association) { + if ($association instanceof ToOneAssociationMetadata && + $association->getCache() && ($association->getFetchMode() === FetchMode::EAGER || ! $association->isOwningSide())) { $associations[] = $association->getName(); } @@ -279,7 +279,7 @@ private function storeJoinedAssociations($entity) } foreach ($this->joinedAssociations as $name) { - $association = $this->class->associationMappings[$name]; + $association = $this->class->getProperty($name); $assocEntity = $association->getValue($entity); $targetEntity = $association->getTargetEntity(); diff --git a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php index 0e19bc9a765..7085003b4f5 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php @@ -22,7 +22,9 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Events; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\Utility\IdentifierFlattener; use PDO; @@ -465,14 +467,15 @@ protected function registerManaged(ClassMetadata $class, $entity, array $data) $id = []; foreach ($class->identifier as $fieldName) { - if (!isset($class->associationMappings[$fieldName])) { + $property = $class->getProperty($fieldName); + + if (! ($property instanceof ToOneAssociationMetadata)) { $id[$fieldName] = $data[$fieldName]; continue; } - $association = $class->associationMappings[$fieldName]; - $joinColumns = $association->getJoinColumns(); + $joinColumns = $property->getJoinColumns(); $joinColumn = reset($joinColumns); $id[$fieldName] = $data[$joinColumn->getColumnName()]; diff --git a/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php index 50cd47c6261..cc90ebd1aed 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php @@ -132,7 +132,7 @@ protected function hydrateRowData(array $row, array &$result) $relationAlias = $this->rsm->relationMap[$dqlAlias]; $parentClass = $this->metadataCache[$this->rsm->aliasMap[$parent]]; - $relation = $parentClass->associationMappings[$relationAlias]; + $relation = $parentClass->getProperty($relationAlias); // Check the type of the relation (many or single-valued) if (! $relation instanceof ToOneAssociationMetadata) { diff --git a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php index 53e8cd81f72..007bbaa69b7 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php @@ -104,7 +104,7 @@ protected function prepare() $sourceClassName = $this->rsm->aliasMap[$parent]; $sourceClass = $this->getClassMetadata($sourceClassName); - $association = $sourceClass->associationMappings[$this->rsm->relationMap[$dqlAlias]]; + $association = $sourceClass->getProperty($this->rsm->relationMap[$dqlAlias]); $this->hints['fetched'][$parent][$association->getName()] = true; @@ -122,7 +122,7 @@ protected function prepare() // handle fetch-joined owning side bi-directional one-to-one associations if ($association->getInversedBy()) { $class = $this->getClassMetadata($className); - $inverseAssoc = $class->associationMappings[$association->getInversedBy()]; + $inverseAssoc = $class->getProperty($association->getInversedBy()); if (! ($inverseAssoc instanceof ToOneAssociationMetadata)) { continue; @@ -186,7 +186,7 @@ protected function hydrateAllData() private function initRelatedCollection($entity, $class, $fieldName, $parentDqlAlias) { $oid = spl_object_hash($entity); - $association = $class->associationMappings[$fieldName]; + $association = $class->getProperty($fieldName); $value = $association->getValue($entity); if ($value === null || is_array($value)) { @@ -290,14 +290,15 @@ private function getEntityFromIdentityMap($className, array $data) $id = []; foreach ($class->identifier as $fieldName) { - if (!isset($class->associationMappings[$fieldName])) { + $property = $class->getProperty($fieldName); + + if (! ($property instanceof ToOneAssociationMetadata)) { $id[$fieldName] = $data[$fieldName]; continue; } - $association = $class->associationMappings[$fieldName]; - $joinColumns = $association->getJoinColumns(); + $joinColumns = $property->getJoinColumns(); $joinColumn = reset($joinColumns); $id[$fieldName] = $data[$joinColumn->getColumnName()]; @@ -359,7 +360,7 @@ protected function hydrateRowData(array $row, array &$result) $parentClass = $this->metadataCache[$this->rsm->aliasMap[$parentAlias]]; $relationField = $this->rsm->relationMap[$dqlAlias]; - $association = $parentClass->associationMappings[$relationField]; + $association = $parentClass->getProperty($relationField); // Get a reference to the parent object to which the joined element belongs. if ($this->rsm->isMixed && isset($this->rootAliases[$parentAlias])) { @@ -452,7 +453,7 @@ protected function hydrateRowData(array $row, array &$result) // TODO: Just check hints['fetched'] here? // If there is an inverse mapping on the target class its bidirectional if ($association->getInversedBy()) { - $inverseAssociation = $targetClass->associationMappings[$association->getInversedBy()]; + $inverseAssociation = $targetClass->getProperty($association->getInversedBy()); if ($inverseAssociation instanceof ToOneAssociationMetadata) { $inverseAssociation->setValue($element, $parentObject); @@ -466,7 +467,7 @@ protected function hydrateRowData(array $row, array &$result) } } else { // For sure bidirectional, as there is no inverse side in unidirectional mappings - $inverseAssociation = $targetClass->associationMappings[$mappedBy]; + $inverseAssociation = $targetClass->getProperty($mappedBy); $inverseAssociation->setValue($element, $parentObject); diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 004f1c2d1c7..0356f5a52d7 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -300,13 +300,6 @@ class ClassMetadata implements ClassMetadataInterface */ protected $properties = []; - /** - * READ-ONLY: The association mappings of this class. - * - * @var array - */ - public $associationMappings = []; - /** * READ-ONLY: The field which is used for versioning in optimistic locking (if any). * @@ -369,11 +362,8 @@ public function getIdentifierValues($entity) $id = []; foreach ($this->identifier as $idField) { - if (($property = $this->getProperty($idField)) === null) { - $property = $this->associationMappings[$idField]; - } - - $value = $property->getValue($entity); + $property = $this->getProperty($idField); + $value = $property->getValue($entity); if (null !== $value) { $id[$idField] = $value; @@ -394,9 +384,7 @@ public function getIdentifierValues($entity) public function assignIdentifier($entity, array $id) { foreach ($id as $idField => $idValue) { - if (($property = $this->getProperty($idField)) === null) { - $property = $this->associationMappings[$idField]; - } + $property = $this->getProperty($idField); $property->setValue($entity, $idValue); } @@ -414,10 +402,6 @@ public function __clone() foreach ($this->properties as $name => $property) { $this->properties[$name] = clone $property; } - - foreach ($this->associationMappings as $name => $association) { - $this->associationMappings[$name] = clone $association; - } } /** @@ -449,7 +433,6 @@ public function __sleep() { // This metadata is always serialized/cached. $serialized = [ - 'associationMappings', 'properties', 'fieldNames', //'embeddedClasses', @@ -591,10 +574,6 @@ public function wakeupReflection($reflService) $property->wakeupReflection($reflService); } - - foreach ($this->associationMappings as $field => $property) { - $property->wakeupReflection($reflService); - } } /** @@ -650,7 +629,11 @@ public function validateIdentifier() */ public function validateAssociations() { - foreach ($this->associationMappings as $fieldName => $property) { + foreach ($this->properties as $fieldName => $property) { + if (! ($property instanceof AssociationMetadata)) { + continue; + } + $targetEntity = $property->getTargetEntity(); if ( ! class_exists($targetEntity, true)) { @@ -1206,7 +1189,8 @@ public function getIdentifier() */ public function hasField($fieldName) { - return isset($this->properties[$fieldName]); + return isset($this->properties[$fieldName]) + && $this->properties[$fieldName] instanceof FieldMetadata; } /** @@ -1219,24 +1203,25 @@ public function getIdentifierColumns(EntityManagerInterface $em) $columns = []; foreach ($this->identifier as $idProperty) { - if (($property = $this->getProperty($idProperty)) !== null) { + $property = $this->getProperty($idProperty); + + if ($property instanceof FieldMetadata) { $columns[$property->getColumnName()] = $property; continue; } // Association defined as Id field - $association = $this->associationMappings[$idProperty]; - $targetClass = $em->getClassMetadata($association->getTargetEntity()); + $targetClass = $em->getClassMetadata($property->getTargetEntity()); - if (! $association->isOwningSide()) { - $association = $targetClass->associationMappings[$association->getMappedBy()]; - $targetClass = $em->getClassMetadata($association->getTargetEntity()); + if (! $property->isOwningSide()) { + $property = $targetClass->getProperty($property->getMappedBy()); + $targetClass = $em->getClassMetadata($property->getTargetEntity()); } - $joinColumns = $association instanceof ManyToManyAssociationMetadata - ? $association->getJoinTable()->getInverseJoinColumns() - : $association->getJoinColumns() + $joinColumns = $property instanceof ManyToManyAssociationMetadata + ? $property->getJoinTable()->getInverseJoinColumns() + : $property->getJoinColumns() ; foreach ($joinColumns as $joinColumn) { @@ -1362,19 +1347,19 @@ public function setAssociationOverride(AssociationMetadata $associationMetadata) { $fieldName = $associationMetadata->getName(); - if ( ! isset($this->associationMappings[$fieldName])) { + if (! isset($this->properties[$fieldName])) { throw MappingException::invalidOverrideFieldName($this->name, $fieldName); } /** @var AssociationMetadata $originalAssociation */ - $originalAssociation = $this->associationMappings[$fieldName]; + $originalAssociation = $this->properties[$fieldName]; // Do not allow to change association type if (get_class($originalAssociation) !== get_class($associationMetadata)) { throw MappingException::invalidOverrideAssociationType($this->name, $fieldName); } - unset($this->associationMappings[$originalAssociation->getName()]); + unset($this->properties[$originalAssociation->getName()]); // Unset all defined fieldNames prior to override if ($originalAssociation instanceof ToOneAssociationMetadata && $originalAssociation->isOwningSide()) { @@ -1467,20 +1452,6 @@ public function isInheritedProperty($fieldName) return ! ($declaringClass->name === $this->name); } - /** - * Checks whether a mapped association is inherited from a superclass. - * - * @param string $fieldName - * - * @return boolean TRUE if the association is inherited, FALSE otherwise. - */ - public function isInheritedAssociation($fieldName) - { - $declaringClass = $this->associationMappings[$fieldName]->getDeclaringClass(); - - return ! ($declaringClass->name === $this->name); - } - /** * Sets the primary table metadata. * @@ -1636,7 +1607,7 @@ public function addInheritedAssociation(AssociationMetadata $association) $this->assertPropertyNotMapped($association->getName()); - $this->associationMappings[$association->getName()] = $inheritedAssociation; + $this->properties[$association->getName()] = $inheritedAssociation; } /** @@ -1810,7 +1781,7 @@ public function addAssociation(AssociationMetadata $property) $this->assertPropertyNotMapped($sourceFieldName); - $this->associationMappings[$sourceFieldName] = $property; + $this->properties[$sourceFieldName] = $property; } /** @@ -2034,7 +2005,8 @@ public function hasSqlResultSetMapping($name) */ public function hasAssociation($fieldName) { - return isset($this->associationMappings[$fieldName]); + return isset($this->properties[$fieldName]) + && $this->properties[$fieldName] instanceof AssociationMetadata; } /** @@ -2044,8 +2016,8 @@ public function hasAssociation($fieldName) */ public function isSingleValuedAssociation($fieldName) { - return isset($this->associationMappings[$fieldName]) - && $this->associationMappings[$fieldName] instanceof ToOneAssociationMetadata; + return isset($this->properties[$fieldName]) + && $this->properties[$fieldName] instanceof ToOneAssociationMetadata; } /** @@ -2055,8 +2027,8 @@ public function isSingleValuedAssociation($fieldName) */ public function isCollectionValuedAssociation($fieldName) { - return isset($this->associationMappings[$fieldName]) - && $this->associationMappings[$fieldName] instanceof ToManyAssociationMetadata; + return isset($this->properties[$fieldName]) + && $this->properties[$fieldName] instanceof ToManyAssociationMetadata; } /** @@ -2164,7 +2136,12 @@ public function isReadOnly() */ public function getFieldNames() { - return array_keys($this->properties); + $fields = array_filter( + $this->properties, + function (Property $property) { return $property instanceof FieldMetadata; } + ); + + return array_keys($fields); } /** @@ -2172,7 +2149,12 @@ public function getFieldNames() */ public function getAssociationNames() { - return array_keys($this->associationMappings); + $associations = array_filter( + $this->properties, + function (Property $property) { return $property instanceof AssociationMetadata; } + ); + + return array_keys($associations); } /** @@ -2184,11 +2166,13 @@ public function getAssociationNames() */ public function getAssociationTargetClass($assocName) { - if ( ! isset($this->associationMappings[$assocName])) { + $property = $this->properties[$assocName]; + + if (! ($property instanceof AssociationMetadata)) { throw new InvalidArgumentException("Association name expected, '" . $assocName ."' is not an association."); } - return $this->associationMappings[$assocName]->getTargetEntity(); + return $property->getTargetEntity(); } /** @@ -2214,8 +2198,9 @@ public function isVersioned() */ public function isAssociationInverseSide($fieldName) { - return isset($this->associationMappings[$fieldName]) - && ! $this->associationMappings[$fieldName]->isOwningSide(); + return isset($this->properties[$fieldName]) + && $this->properties instanceof AssociationMetadata + && ! $this->properties[$fieldName]->isOwningSide(); } /** @@ -2225,7 +2210,7 @@ public function isAssociationInverseSide($fieldName) */ public function getAssociationMappedByTargetField($fieldName) { - return $this->associationMappings[$fieldName]->getMappedBy(); + return $this->properties[$fieldName]->getMappedBy(); } /** @@ -2239,7 +2224,11 @@ public function getAssociationsByTargetClass($targetClass) { $associations = []; - foreach ($this->associationMappings as $association) { + foreach ($this->properties as $association) { + if (! ($association instanceof AssociationMetadata)) { + continue; + } + if ($association->getTargetEntity() !== $targetClass) { continue; } @@ -2333,10 +2322,6 @@ private function assertPropertyNotMapped(string $fieldName) throw MappingException::duplicateProperty($this, $this->properties[$fieldName]); } - if (isset($this->associationMappings[$fieldName])) { - throw MappingException::duplicateProperty($this, $this->associationMappings[$fieldName]); - } - // if (isset($this->embeddedClasses[$fieldName])) { // throw MappingException::duplicateProperty($this, $this->embeddedClasses[$fieldName]); // } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index fcc2454ca3b..362a64f3777 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -128,7 +128,6 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS } $this->addInheritedProperties($class, $parent); - $this->addInheritedAssociations($class, $parent); $this->addInheritedEmbeddedClasses($class, $parent); $class->setInheritanceType($parent->inheritanceType); @@ -271,16 +270,18 @@ protected function completeRuntimeMetadata($class, $parent) // Resolve column table names foreach ($class->getProperties() as $property) { - $property->setTableName($property->getTableName() ?? $tableName); - } + if ($property instanceof FieldMetadata) { + $property->setTableName($property->getTableName() ?? $tableName); + + continue; + } - // Resolve association join column table names - foreach ($class->associationMappings as $association) { - if (! ($association instanceof ToOneAssociationMetadata)) { + if (! ($property instanceof ToOneAssociationMetadata)) { continue; } - foreach ($association->getJoinColumns() as $joinColumn) { + // Resolve association join column table names + foreach ($property->getJoinColumns() as $joinColumn) { $joinColumn->setTableName($joinColumn->getTableName() ?? $tableName); } } @@ -444,35 +445,21 @@ private function getShortName($className) * @return void */ private function addInheritedProperties(ClassMetadata $subClass, ClassMetadata $parentClass) - { - foreach ($parentClass->getProperties() as $property) { - $subClass->addInheritedProperty($property); - } - } - - /** - * Adds inherited association mappings to the subclass mapping. - * - * @param \Doctrine\ORM\Mapping\ClassMetadata $subClass - * @param \Doctrine\ORM\Mapping\ClassMetadata $parentClass - * - * @return void - * - * @throws MappingException - */ - private function addInheritedAssociations(ClassMetadata $subClass, ClassMetadata $parentClass) { $isAbstract = $parentClass->isMappedSuperclass; - foreach ($parentClass->associationMappings as $association) { - if ($isAbstract && ! $association->isOwningSide() && $association instanceof ToManyAssociationMetadata) { - throw MappingException::illegalToManyAssociationOnMappedSuperclass( - $parentClass->name, - $association->getName() - ); + foreach ($parentClass->getProperties() as $fieldName => $property) { + if ($property instanceof FieldMetadata) { + $subClass->addInheritedProperty($property); + + continue; + } + + if ($isAbstract && $property instanceof ToManyAssociationMetadata && ! $property->isOwningSide()) { + throw MappingException::illegalToManyAssociationOnMappedSuperclass($parentClass->name, $fieldName); } - $subClass->addInheritedAssociation($association); + $subClass->addInheritedAssociation($property); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index c9621f5b83b..72fe6e428b7 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -389,12 +389,13 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat foreach ($associationOverridesAnnot->value as $associationOverride) { $fieldName = $associationOverride->name; + $property = $metadata->getProperty($fieldName); - if (! isset($metadata->associationMappings[$fieldName])) { + if (! $property) { throw Mapping\MappingException::invalidOverrideFieldName($metadata->name, $fieldName); } - $existingClass = get_class($metadata->associationMappings[$fieldName]); + $existingClass = get_class($property); $override = new $existingClass($fieldName); // Check for JoinColumn/JoinColumns annotations diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 17417c04c49..7b12ac3c713 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -636,12 +636,13 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) if (isset($xmlRoot->{'association-overrides'})) { foreach ($xmlRoot->{'association-overrides'}->{'association-override'} as $overrideElement) { $fieldName = (string) $overrideElement['name']; + $property = $metadata->getProperty($fieldName); - if (! isset($metadata->associationMappings[$fieldName])) { + if (! $property) { throw MappingException::invalidOverrideFieldName($metadata->name, $fieldName); } - $existingClass = get_class($metadata->associationMappings[$fieldName]); + $existingClass = get_class($property); $override = new $existingClass($fieldName); // Check for join-columns diff --git a/lib/Doctrine/ORM/PersistentCollection.php b/lib/Doctrine/ORM/PersistentCollection.php index 540d32e4364..03e20631a49 100644 --- a/lib/Doctrine/ORM/PersistentCollection.php +++ b/lib/Doctrine/ORM/PersistentCollection.php @@ -169,7 +169,7 @@ public function hydrateAdd($element) // If _backRefFieldName is set and its a one-to-many association, // we need to set the back reference. if ($this->backRefFieldName && $this->association instanceof OneToManyAssociationMetadata) { - $inversedAssociation = $this->typeClass->associationMappings[$this->backRefFieldName]; + $inversedAssociation = $this->typeClass->getProperty($this->backRefFieldName); // Set back reference to owner $inversedAssociation->setValue($element, $this->owner); @@ -196,7 +196,7 @@ public function hydrateSet($key, $element) // If _backRefFieldName is set, then the association is bidirectional // and we need to set the back reference. if ($this->backRefFieldName && $this->association instanceof OneToManyAssociationMetadata) { - $inversedAssociation = $this->typeClass->associationMappings[$this->backRefFieldName]; + $inversedAssociation = $this->typeClass->getProperty($this->backRefFieldName); // Set back reference to owner $inversedAssociation->setValue($element, $this->owner); diff --git a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php index c23868cd926..a18c902fc99 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php @@ -133,7 +133,7 @@ public function count(PersistentCollection $collection) $sourceClass = $this->em->getClassMetadata($association->getSourceEntity()); $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); $owningAssociation = ! $association->isOwningSide() - ? $targetClass->associationMappings[$association->getMappedBy()] + ? $targetClass->getProperty($association->getMappedBy()) : $association ; @@ -262,7 +262,7 @@ public function loadCriteria(PersistentCollection $collection, Criteria $criteri $whereClauses = $params = $types = []; if (! $association->isOwningSide()) { - $association = $targetClass->associationMappings[$association->getMappedBy()]; + $association = $targetClass->getProperty($association->getMappedBy()); $joinColumns = $association->getJoinTable()->getInverseJoinColumns(); } else { $joinColumns = $association->getJoinTable()->getJoinColumns(); @@ -390,7 +390,7 @@ protected function getOnConditionSQL(ManyToManyAssociationMetadata $association) { $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); $owningAssociation = ! $association->isOwningSide() - ? $targetClass->associationMappings[$association->getMappedBy()] + ? $targetClass->getProperty($association->getMappedBy()) : $association; $joinTable = $owningAssociation->getJoinTable(); @@ -619,7 +619,7 @@ private function getJoinTableRestrictionsWithKey(PersistentCollection $collectio $targetClass = $this->em->getClassMetadata($owningAssociation->getTargetEntity()); if (! $owningAssociation->isOwningSide()) { - $owningAssociation = $targetClass->associationMappings[$owningAssociation->getMappedBy()]; + $owningAssociation = $targetClass->getProperty($owningAssociation->getMappedBy()); $joinTable = $owningAssociation->getJoinTable(); $joinColumns = $joinTable->getJoinColumns(); $inverseJoinColumns = $joinTable->getInverseJoinColumns(); @@ -715,7 +715,7 @@ private function getJoinTableRestrictions(PersistentCollection $collection, $ele $sourceId = $this->uow->getEntityIdentifier($element); $targetId = $this->uow->getEntityIdentifier($collection->getOwner()); - $owningAssociation = $sourceClass->associationMappings[$association->getMappedBy()]; + $owningAssociation = $sourceClass->getProperty($association->getMappedBy()); } else { $sourceClass = $this->em->getClassMetadata($association->getSourceEntity()); $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); diff --git a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php index 675af0ef05d..033945c2b4b 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php @@ -207,7 +207,7 @@ private function deleteEntityCollection(PersistentCollection $collection) $identifier = $this->uow->getEntityIdentifier($collection->getOwner()); $sourceClass = $this->em->getClassMetadata($association->getSourceEntity()); $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); - $inverseAssoc = $targetClass->associationMappings[$association->getMappedBy()]; + $inverseAssoc = $targetClass->getProperty($association->getMappedBy()); $columns = []; $parameters = []; diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 715ec4e6292..da69b215454 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -426,20 +426,18 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat $identifier = $this->em->getUnitOfWork()->getEntityIdentifier($entity); foreach ($this->class->identifier as $idField) { - $params[] = $identifier[$idField]; - - if ( ! isset($this->class->associationMappings[$idField])) { - $property = $this->class->getProperty($idField); + $property = $this->class->getProperty($idField); + if ($property instanceof FieldMetadata) { + $params[] = $identifier[$idField]; $types[] = $property->getType(); $where[] = $this->platform->quoteIdentifier($property->getColumnName()); continue; } - $association = $this->class->associationMappings[$idField]; - $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); - $joinColumns = $association->getJoinColumns(); + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); + $joinColumns = $property->getJoinColumns(); $joinColumn = reset($joinColumns); if (! $joinColumn->getType()) { @@ -448,6 +446,7 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat ); } + $params[] = $identifier[$idField]; $where[] = $joinColumn->getColumnName(); $types[] = $joinColumn->getType(); } @@ -494,7 +493,7 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat */ protected function deleteJoinTableRecords($identifier) { - foreach ($this->class->associationMappings as $association) { + foreach ($this->class->getProperties() as $association) { if (! ($association instanceof ManyToManyAssociationMetadata)) { continue; } @@ -509,7 +508,7 @@ protected function deleteJoinTableRecords($identifier) if ( ! $owningAssociation->isOwningSide()) { $class = $this->em->getClassMetadata($association->getTargetEntity()); - $owningAssociation = $class->associationMappings[$association->getMappedBy()]; + $owningAssociation = $class->getProperty($association->getMappedBy()); } $joinTable = $owningAssociation->getJoinTable(); @@ -570,7 +569,9 @@ public function delete($entity) $id = []; foreach ($class->identifier as $field) { - if (($property = $class->getProperty($field)) !== null) { + $property = $class->getProperty($field); + + if ($property instanceof FieldMetadata) { $columnName = $property->getColumnName(); $quotedColumnName = $this->platform->quoteIdentifier($columnName); @@ -580,11 +581,10 @@ public function delete($entity) continue; } - $association = $class->associationMappings[$field]; - $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); - $joinColumns = $association instanceof ManyToManyAssociationMetadata - ? $association->getTable()->getJoinColumns() - : $association->getJoinColumns() + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); + $joinColumns = $property instanceof ManyToManyAssociationMetadata + ? $property->getTable()->getJoinColumns() + : $property->getJoinColumns() ; $associationValue = null; @@ -655,6 +655,8 @@ protected function prepareUpdateData($entity) continue; } + $property = $this->class->getProperty($field); + /*if (isset($this->class->embeddedClasses[$field])) { continue; }*/ @@ -662,7 +664,7 @@ protected function prepareUpdateData($entity) $owningTable = $this->getOwningTable($field); $newVal = $change[1]; - if (($property = $this->class->getProperty($field)) !== null) { + if ($property instanceof FieldMetadata) { // @todo this should be used instead //$tableName = $property->getTableName(); $columnName = $property->getColumnName(); @@ -674,10 +676,8 @@ protected function prepareUpdateData($entity) continue; } - $association = $this->class->associationMappings[$field]; - // Only owning side of x-1 associations can have a FK column. - if (! $association->isOwningSide() || ! $association instanceof ToOneAssociationMetadata) { + if (! $property instanceof ToOneAssociationMetadata || ! $property->isOwningSide()) { continue; } @@ -700,9 +700,9 @@ protected function prepareUpdateData($entity) $newValId = $uow->getEntityIdentifier($newVal); } - $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); - foreach ($association->getJoinColumns() as $joinColumn) { + foreach ($property->getJoinColumns() as $joinColumn) { $columnName = $joinColumn->getColumnName(); $referencedColumnName = $joinColumn->getReferencedColumnName(); $targetField = $targetClass->fieldNames[$referencedColumnName]; @@ -823,7 +823,7 @@ public function loadToOneEntity(ToOneAssociationMetadata $association, $sourceEn // Complete bidirectional association, if necessary if ($entity !== null && $isInverseSingleValued) { - $inversedAssociation = $targetClass->associationMappings[$inversedBy]; + $inversedAssociation = $targetClass->getProperty($inversedBy); $inversedAssociation->setValue($entity, $sourceEntity); } @@ -831,9 +831,8 @@ public function loadToOneEntity(ToOneAssociationMetadata $association, $sourceEn return $entity; } - $mappedBy = $association->getMappedBy(); $sourceClass = $association->getDeclaringClass(); - $owningAssociation = $targetClass->associationMappings[$mappedBy]; + $owningAssociation = $targetClass->getProperty($association->getMappedBy()); $targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName()); foreach ($owningAssociation->getJoinColumns() as $joinColumn) { @@ -1073,7 +1072,7 @@ private function getManyToManyStatement( if (! $association->isOwningSide()) { $class = $this->em->getClassMetadata($association->getTargetEntity()); - $owningAssoc = $class->associationMappings[$association->getMappedBy()]; + $owningAssoc = $class->getProperty($association->getMappedBy()); } $joinTable = $owningAssoc->getJoinTable(); @@ -1086,11 +1085,12 @@ private function getManyToManyStatement( foreach ($joinColumns as $joinColumn) { $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $fieldName = $sourceClass->fieldNames[$joinColumn->getReferencedColumnName()]; + $property = $sourceClass->getProperty($fieldName); - if (($property = $sourceClass->getProperty($fieldName)) !== null) { + if ($property instanceof FieldMetadata) { $value = $property->getValue($sourceEntity); - } else if (isset($sourceClass->associationMappings[$fieldName])) { - $property = $sourceClass->associationMappings[$fieldName]; + } else if ($property instanceof AssociationMetadata) { + $property = $sourceClass->getProperty($fieldName); $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); $value = $property->getValue($sourceEntity); @@ -1234,28 +1234,26 @@ protected final function getOrderBySQL(array $orderBy, $baseTableAlias) throw ORMException::invalidOrientation($this->class->name, $fieldName); } - if (($property = $this->class->getProperty($fieldName)) !== null) { + $property = $this->class->getProperty($fieldName); + + if ($property instanceof FieldMetadata) { $tableAlias = $this->getSQLTableAlias($property->getTableName()); $columnName = $this->platform->quoteIdentifier($property->getColumnName()); $orderByList[] = $tableAlias . '.' . $columnName . ' ' . $orientation; continue; - } - - if (isset($this->class->associationMappings[$fieldName])) { - $association = $this->class->associationMappings[$fieldName]; - - if ( ! $association->isOwningSide()) { + } else if ($property instanceof AssociationMetadata) { + if (! $property->isOwningSide()) { throw ORMException::invalidFindByInverseAssociation($this->class->name, $fieldName); } - $class = $this->class->isInheritedAssociation($fieldName) - ? $association->getDeclaringClass() + $class = $this->class->isInheritedProperty($fieldName) + ? $property->getDeclaringClass() : $this->class; $tableAlias = $this->getSQLTableAlias($class->getTableName()); - foreach ($association->getJoinColumns() as $joinColumn) { + foreach ($property->getJoinColumns() as $joinColumn) { /* @var JoinColumnMetadata $joinColumn */ $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); @@ -1295,46 +1293,46 @@ protected function getSelectColumnsSQL() $eagerAliasCounter = 0; $columnList = []; - foreach ($this->class->fieldNames as $field) { - if (! $this->class->hasField($field)) { + foreach ($this->class->getProperties() as $fieldName => $property) { + if ($property instanceof FieldMetadata) { + $columnList[] = $this->getSelectColumnSQL($fieldName, $this->class); + continue; } - $columnList[] = $this->getSelectColumnSQL($field, $this->class); - } - - foreach ($this->class->associationMappings as $assocField => $association) { - $assocColumnSQL = $this->getSelectColumnAssociationSQL($assocField, $association, $this->class); + $assocColumnSQL = $this->getSelectColumnAssociationSQL($fieldName, $property, $this->class); if ($assocColumnSQL) { $columnList[] = $assocColumnSQL; } - $isAssocToOneInverseSide = $association instanceof ToOneAssociationMetadata && ! $association->isOwningSide(); - $isAssocFromOneEager = ! $association instanceof ManyToManyAssociationMetadata && $association->getFetchMode() === FetchMode::EAGER; + $isAssocToOneInverseSide = $property instanceof ToOneAssociationMetadata && ! $property->isOwningSide(); + $isAssocFromOneEager = ! $property instanceof ManyToManyAssociationMetadata && $property->getFetchMode() === FetchMode::EAGER; if ( ! ($isAssocFromOneEager || $isAssocToOneInverseSide)) { continue; } - if ($association instanceof ToManyAssociationMetadata && $this->currentPersisterContext->handlesLimits) { + if ($property instanceof ToManyAssociationMetadata && $this->currentPersisterContext->handlesLimits) { continue; } - $eagerEntity = $this->em->getClassMetadata($association->getTargetEntity()); + $targetEntity = $property->getTargetEntity(); + $eagerEntity = $this->em->getClassMetadata($targetEntity); if ($eagerEntity->inheritanceType !== InheritanceType::NONE) { continue; // now this is why you shouldn't use inheritance } $assocAlias = 'e' . ($eagerAliasCounter++); - $this->currentPersisterContext->rsm->addJoinedEntityResult($association->getTargetEntity(), $assocAlias, 'r', $assocField); + + $this->currentPersisterContext->rsm->addJoinedEntityResult($targetEntity, $assocAlias, 'r', $fieldName); foreach ($eagerEntity->fieldNames as $field) { $columnSQL = $eagerEntity->hasField($field) ? $this->getSelectColumnSQL($field, $eagerEntity, $assocAlias) : $this->getSelectColumnAssociationSQL( - $field, $eagerEntity->associationMappings[$field], $eagerEntity, $assocAlias + $field, $eagerEntity->getProperty($field), $eagerEntity, $assocAlias ) ; @@ -1343,27 +1341,26 @@ protected function getSelectColumnsSQL() } } - $owningAssociation = $association; + $owningAssociation = $property; $joinCondition = []; - if ($association instanceof ToManyAssociationMetadata && $association->getIndexedBy()) { - $this->currentPersisterContext->rsm->addIndexBy($assocAlias, $association->getIndexedBy()); + if ($property instanceof ToManyAssociationMetadata && $property->getIndexedBy()) { + $this->currentPersisterContext->rsm->addIndexBy($assocAlias, $property->getIndexedBy()); } - if (! $association->isOwningSide()) { - $eagerEntity = $this->em->getClassMetadata($association->getTargetEntity()); - $owningAssociation = $eagerEntity->associationMappings[$association->getMappedBy()]; + if (! $property->isOwningSide()) { + $owningAssociation = $eagerEntity->getProperty($property->getMappedBy()); } $joinTableAlias = $this->getSQLTableAlias($eagerEntity->getTableName(), $assocAlias); $joinTableName = $eagerEntity->table->getQuotedQualifiedName($this->platform); - $this->currentPersisterContext->selectJoinSql .= ' ' . $this->getJoinSQLForAssociation($association); + $this->currentPersisterContext->selectJoinSql .= ' ' . $this->getJoinSQLForAssociation($property); $sourceClass = $this->em->getClassMetadata($owningAssociation->getSourceEntity()); $targetClass = $this->em->getClassMetadata($owningAssociation->getTargetEntity()); - $targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName(), $association->isOwningSide() ? $assocAlias : ''); - $sourceTableAlias = $this->getSQLTableAlias($sourceClass->getTableName(), $association->isOwningSide() ? '' : $assocAlias); + $targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName(), $property->isOwningSide() ? $assocAlias : ''); + $sourceTableAlias = $this->getSQLTableAlias($sourceClass->getTableName(), $property->isOwningSide() ? '' : $assocAlias); foreach ($owningAssociation->getJoinColumns() as $joinColumn) { $joinCondition[] = sprintf( @@ -1450,12 +1447,15 @@ protected function getSelectManyToManyJoinSQL(ManyToManyAssociationMetadata $ass if (! $association->isOwningSide()) { $targetEntity = $this->em->getClassMetadata($association->getTargetEntity()); - $owningAssociation = $targetEntity->associationMappings[$association->getMappedBy()]; + $owningAssociation = $targetEntity->getProperty($association->getMappedBy()); } $joinTable = $owningAssociation->getJoinTable(); $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); - $joinColumns = $association->isOwningSide() ? $joinTable->getInverseJoinColumns() : $joinTable->getJoinColumns(); + $joinColumns = $association->isOwningSide() + ? $joinTable->getInverseJoinColumns() + : $joinTable->getJoinColumns() + ; foreach ($joinColumns as $joinColumn) { $conditions[] = sprintf( @@ -1525,10 +1525,7 @@ protected function getInsertColumnList() : null ; - // @todo guilhermeblanco Remove the array_merge once properties and associationMappings get merged - $properties = array_merge($this->class->getProperties(), $this->class->associationMappings); - - foreach ($properties as $name => $property) { + foreach ($this->class->getProperties() as $name => $property) { if ($versionPropertyName === $name) { continue; } @@ -1709,9 +1706,10 @@ public function getSelectConditionStatementSQL( } foreach ($columns as $column) { + $property = $this->class->getProperty($field); $placeholder = '?'; - if (($property = $this->class->getProperty($field)) !== null) { + if ($property instanceof FieldMetadata) { $placeholder = $property->getType()->convertToDatabaseValueSQL($placeholder, $this->platform); } @@ -1772,15 +1770,17 @@ public function getSelectConditionStatementSQL( */ private function getSelectConditionStatementColumnSQL($field, AssociationMetadata $association = null) { - if (($property = $this->class->getProperty($field)) !== null) { + $property = $this->class->getProperty($field); + + if ($property instanceof FieldMetadata) { $tableAlias = $this->getSQLTableAlias($property->getTableName()); $columnName = $this->platform->quoteIdentifier($property->getColumnName()); return [$tableAlias . '.' . $columnName]; } - if (isset($this->class->associationMappings[$field])) { - $owningAssociation = $this->class->associationMappings[$field]; + if ($property instanceof AssociationMetadata) { + $owningAssociation = $property; $columns = []; // Many-To-Many requires join table check for joinColumn @@ -1807,7 +1807,7 @@ private function getSelectConditionStatementColumnSQL($field, AssociationMetadat throw ORMException::invalidFindByInverseAssociation($this->class->name, $field); } - $class = $this->class->isInheritedAssociation($field) + $class = $this->class->isInheritedProperty($field) ? $owningAssociation->getDeclaringClass() : $this->class ; @@ -1909,7 +1909,7 @@ private function getOneToManyStatement( $criteria = []; $parameters = []; - $owningAssoc = $this->class->associationMappings[$association->getMappedBy()]; + $owningAssoc = $this->class->getProperty($association->getMappedBy()); $sourceClass = $this->em->getClassMetadata($association->getSourceEntity()); $class = $owningAssoc->getDeclaringClass(); $tableAlias = $this->getSQLTableAlias($class->getTableName()); @@ -1917,11 +1917,11 @@ private function getOneToManyStatement( foreach ($owningAssoc->getJoinColumns() as $joinColumn) { $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $fieldName = $sourceClass->fieldNames[$joinColumn->getReferencedColumnName()]; + $property = $sourceClass->getProperty($fieldName); - if (($property = $sourceClass->getProperty($fieldName)) !== null) { + if ($property instanceof FieldMetadata) { $value = $property->getValue($sourceEntity); - } else if (isset($sourceClass->associationMappings[$fieldName])) { - $property = $sourceClass->associationMappings[$fieldName]; + } else if ($property instanceof AssociationMetadata) { $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); $value = $property->getValue($sourceEntity); @@ -2005,27 +2005,25 @@ private function expandToManyParameters($criteria) */ private function getTypes($field, $value, ClassMetadata $class) { - $property = $class->getProperty($field); - $hasProperty = $property !== null; - $types = []; + $property = $class->getProperty($field); + $types = []; switch (true) { - case $hasProperty: + case ($property instanceof FieldMetadata): $types = array_merge($types, [$property->getType()]); break; - case (isset($class->associationMappings[$field])): - $association = $class->associationMappings[$field]; - $class = $this->em->getClassMetadata($association->getTargetEntity()); + case ($property instanceof AssociationMetadata): + $class = $this->em->getClassMetadata($property->getTargetEntity()); - if (! $association->isOwningSide()) { - $association = $class->associationMappings[$association->getMappedBy()]; - $class = $this->em->getClassMetadata($association->getTargetEntity()); + if (! $property->isOwningSide()) { + $property = $class->getProperty($property->getMappedBy()); + $class = $this->em->getClassMetadata($property->getTargetEntity()); } - $joinColumns = $association instanceof ManyToManyAssociationMetadata - ? $association->getJoinTable()->getInverseJoinColumns() - : $association->getJoinColumns() + $joinColumns = $property instanceof ManyToManyAssociationMetadata + ? $property->getJoinTable()->getInverseJoinColumns() + : $property->getJoinColumns() ; foreach ($joinColumns as $joinColumn) { diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index bda6820e169..eebb33ed773 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -66,11 +66,6 @@ public function getOwningTable($fieldName) $property = $this->class->getProperty($fieldName); switch (true) { - case (isset($this->class->associationMappings[$fieldName]) && $this->class->isInheritedAssociation($fieldName)): - $association = $this->class->associationMappings[$fieldName]; - $cm = $association->getDeclaringClass(); - break; - case ($property && $this->class->isInheritedProperty($fieldName)): $cm = $property->getDeclaringClass(); break; @@ -416,20 +411,21 @@ protected function getSelectColumnsSQL() $columnList = []; - // Add regular columns + // Add columns foreach ($this->class->getProperties() as $fieldName => $property) { - $columnList[] = $this->getSelectColumnSQL($fieldName, $property->getDeclaringClass()); - } + if ($property instanceof FieldMetadata) { + $columnList[] = $this->getSelectColumnSQL($fieldName, $property->getDeclaringClass()); + + continue; + } - // Add foreign key columns - foreach ($this->class->associationMappings as $fieldName => $association) { - if (! $association->isOwningSide() || $association instanceof ToManyAssociationMetadata) { + if (! ($property instanceof ToOneAssociationMetadata) || ! $property->isOwningSide()) { continue; } - $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); - foreach ($association->getJoinColumns() as $joinColumn) { + foreach ($property->getJoinColumns() as $joinColumn) { if (! $joinColumn->getType()) { $joinColumn->setType( PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) @@ -460,28 +456,27 @@ protected function getSelectColumnsSQL() // sub tables foreach ($this->class->subClasses as $subClassName) { - $subClass = $this->em->getClassMetadata($subClassName); + $subClass = $this->em->getClassMetadata($subClassName); - // Add subclass columns + // Add columns foreach ($subClass->getProperties() as $fieldName => $property) { if ($subClass->isInheritedProperty($fieldName)) { continue; } - $columnList[] = $this->getSelectColumnSQL($fieldName, $subClass); - } + if ($property instanceof FieldMetadata) { + $columnList[] = $this->getSelectColumnSQL($fieldName, $subClass); - // Add join columns (foreign keys) - foreach ($subClass->associationMappings as $fieldName => $association) { - if (! $association->isOwningSide() || - $subClass->isInheritedAssociation($fieldName) || - $association instanceof ToManyAssociationMetadata) { continue; } - $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + if ($property instanceof ToManyAssociationMetadata || ! $property->isOwningSide()) { + continue; + } - foreach ($association->getJoinColumns() as $joinColumn) { + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); + + foreach ($property->getJoinColumns() as $joinColumn) { if (! $joinColumn->getType()) { $joinColumn->setType( PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) @@ -519,12 +514,9 @@ protected function getInsertColumnList() $this->columns[$columnName] = $column; } - // @todo guilhermeblanco Remove the array_merge once properties and associationMappings get merged - $properties = array_merge($this->class->getProperties(), $this->class->associationMappings); - - foreach ($properties as $name => $property) { + foreach ($this->class->getProperties() as $name => $property) { if (($property instanceof FieldMetadata && ($property instanceof VersionFieldMetadata || $this->class->isInheritedProperty($name))) - || ($property instanceof AssociationMetadata && $this->class->isInheritedAssociation($name)) + || ($property instanceof AssociationMetadata && $this->class->isInheritedProperty($name)) /*|| isset($this->class->embeddedClasses[$name])*/) { continue; } diff --git a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php index 78ec57436f1..f7b6c5a18f9 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php @@ -22,6 +22,8 @@ use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Common\Collections\Criteria; +use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\ToManyAssociationMetadata; use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\Utility\PersisterHelper; @@ -68,26 +70,25 @@ protected function getSelectColumnsSQL() foreach ($this->class->subClasses as $subClassName) { $subClass = $this->em->getClassMetadata($subClassName); - // Regular columns + // Subclass columns foreach ($subClass->getProperties() as $fieldName => $property) { - if ($subClass->isInheritedProperty($property->getName())) { + if ($subClass->isInheritedProperty($fieldName)) { continue; } - $columnList[] = $this->getSelectColumnSQL($fieldName, $subClass); - } + if ($property instanceof FieldMetadata) { + $columnList[] = $this->getSelectColumnSQL($fieldName, $subClass); + + continue; + } - // Foreign key columns - foreach ($subClass->associationMappings as $association) { - if (! $association->isOwningSide() || - ! ($association instanceof ToOneAssociationMetadata) || - $subClass->isInheritedAssociation($association->getName())) { + if ($property instanceof ToManyAssociationMetadata || ! $property->isOwningSide()) { continue; } - $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); - foreach ($association->getJoinColumns() as $joinColumn) { + foreach ($property->getJoinColumns() as $joinColumn) { if (! $joinColumn->getType()) { $joinColumn->setType( PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) diff --git a/lib/Doctrine/ORM/Persisters/SqlExpressionVisitor.php b/lib/Doctrine/ORM/Persisters/SqlExpressionVisitor.php index 476ecaba81e..754fd854efb 100644 --- a/lib/Doctrine/ORM/Persisters/SqlExpressionVisitor.php +++ b/lib/Doctrine/ORM/Persisters/SqlExpressionVisitor.php @@ -19,6 +19,7 @@ namespace Doctrine\ORM\Persisters; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Common\Collections\Expr\ExpressionVisitor; @@ -64,10 +65,11 @@ public function __construct(BasicEntityPersister $persister, ClassMetadata $clas */ public function walkComparison(Comparison $comparison) { - $field = $comparison->getField(); - $value = $comparison->getValue()->getValue(); // shortcut for walkValue() + $field = $comparison->getField(); + $value = $comparison->getValue()->getValue(); // shortcut for walkValue() + $property = $this->classMetadata->getProperty($field); - if (isset($this->classMetadata->associationMappings[$field]) && + if ($property instanceof AssociationMetadata && $value !== null && ! is_object($value) && ! in_array($comparison->getOperator(), [Comparison::IN, Comparison::NIN])) { diff --git a/lib/Doctrine/ORM/Proxy/ProxyFactory.php b/lib/Doctrine/ORM/Proxy/ProxyFactory.php index 00f2d02e1f4..a53a942a13f 100644 --- a/lib/Doctrine/ORM/Proxy/ProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/ProxyFactory.php @@ -105,7 +105,7 @@ protected function createProxyDefinition($className) return new ProxyDefinition( ClassUtils::generateProxyClassName($className, $this->proxyNs), $classMetadata->getIdentifierFieldNames(), - array_merge($classMetadata->getProperties(), $classMetadata->associationMappings), + $classMetadata->getProperties(), $this->createInitializer($classMetadata, $entityPersister), $this->createCloner($classMetadata, $entityPersister) ); @@ -196,9 +196,7 @@ private function createCloner(ClassMetadata $classMetadata, EntityPersister $ent ); } - $properties = array_merge($class->getProperties(), $class->associationMappings); - - foreach ($properties as $property) { + foreach ($class->getProperties() as $property) { $property->setValue($proxy, $property->getValue($original)); } }; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php index 31965f625f6..55b35220aaf 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php @@ -56,7 +56,7 @@ public function getSql(SqlWalker $sqlWalker) $assocField = $this->pathExpression->field; $qComp = $sqlWalker->getQueryComponent($dqlAlias); $class = $qComp['metadata']; - $association = $class->associationMappings[$assocField]; + $association = $class->getProperty($assocField); $targetEntity = $sqlWalker->getEntityManager()->getClassMetadata($association->getTargetEntity()); $joinColumns = $association->getJoinColumns(); $joinColumn = reset($joinColumns); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php index 6abb0d0d1ee..8de103f7c50 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php @@ -53,11 +53,11 @@ public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) $sql = 'SELECT COUNT(*) FROM '; $qComp = $sqlWalker->getQueryComponent($dqlAlias); $class = $qComp['metadata']; - $association = $class->associationMappings[$assocField]; + $association = $class->getProperty($assocField); $targetClass = $sqlWalker->getEntityManager()->getClassMetadata($association->getTargetEntity()); $owningAssociation = $association->isOwningSide() ? $association - : $targetClass->associationMappings[$association->getMappedBy()] + : $targetClass->getProperty($association->getMappedBy()) ; if ($association instanceof OneToManyAssociationMetadata) { @@ -67,7 +67,7 @@ public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker) $sql .= $targetTableName . ' ' . $targetTableAlias . ' WHERE '; - $owningAssociation = $targetClass->associationMappings[$association->getMappedBy()]; + $owningAssociation = $targetClass->getProperty($association->getMappedBy()); $first = true; foreach ($owningAssociation->getJoinColumns() as $joinColumn) { diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php index fc436a8108f..dc3e54d2b96 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php @@ -109,10 +109,10 @@ public function __construct(AST\Node $AST, $sqlWalker) $updateSql = 'UPDATE ' . $tableName . ' SET '; foreach ($updateItems as $updateItem) { - $field = $updateItem->pathExpression->field; + $field = $updateItem->pathExpression->field; + $property = $class->getProperty($field); - if ((($property = $class->getProperty($field)) !== null && ! $class->isInheritedProperty($field)) || - (isset($class->associationMappings[$field]) && ! isset($class->associationMappings[$field]['inherited']))) { + if ($property && ! $class->isInheritedProperty($field)) { $newValue = $updateItem->newValue; if ( ! $affected) { diff --git a/lib/Doctrine/ORM/Query/Parser.php b/lib/Doctrine/ORM/Query/Parser.php index 5be5639458c..aa89654ff2c 100644 --- a/lib/Doctrine/ORM/Query/Parser.php +++ b/lib/Doctrine/ORM/Query/Parser.php @@ -19,7 +19,9 @@ namespace Doctrine\ORM\Query; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\Query; use Doctrine\ORM\Query\AST\Functions; @@ -671,13 +673,10 @@ private function processDeferredPartialObjectExpressions() $class = $this->queryComponents[$expr->identificationVariable]['metadata']; foreach ($expr->partialFieldSet as $field) { - if ($class->getProperty($field)) { - continue; - } + $property = $class->getProperty($field); - if (isset($class->associationMappings[$field]) && - $class->associationMappings[$field]->isOwningSide() && - $class->associationMappings[$field] instanceof ToOneAssociationMetadata) { + if ($property instanceof FieldMetadata || + ($property instanceof ToOneAssociationMetadata && $property->isOwningSide())) { continue; } @@ -754,8 +753,10 @@ private function processDeferredPathExpressions() $field = $pathExpression->field = $class->identifier[0]; } + $property = $class->getProperty($field); + // Check if field or association exists - if ( ! isset($class->associationMappings[$field]) && ! $class->getProperty($field)) { + if (! $property) { $this->semanticalError( 'Class ' . $class->name . ' has no field or association named ' . $field, $deferredItem['token'] @@ -764,12 +765,11 @@ private function processDeferredPathExpressions() $fieldType = AST\PathExpression::TYPE_STATE_FIELD; - if (isset($class->associationMappings[$field])) { - $association = $class->associationMappings[$field]; - - $fieldType = $association instanceof ToOneAssociationMetadata + if ($property instanceof AssociationMetadata) { + $fieldType = $property instanceof ToOneAssociationMetadata ? AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION - : AST\PathExpression::TYPE_COLLECTION_VALUED_ASSOCIATION; + : AST\PathExpression::TYPE_COLLECTION_VALUED_ASSOCIATION + ; } // Validate if PathExpression is one of the expected types @@ -1630,7 +1630,7 @@ public function SubselectIdentificationVariableDeclaration() $field = $associationPathExpression->associationField; $class = $this->queryComponents[$identificationVariable]['metadata']; - $association = $class->associationMappings[$field]; + $association = $class->getProperty($field); $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); // Building queryComponent @@ -1770,7 +1770,7 @@ public function JoinAssociationDeclaration() $field = $joinAssociationPathExpression->associationField; $class = $this->queryComponents[$identificationVariable]['metadata']; - $association = $class->associationMappings[$field]; + $association = $class->getProperty($field); $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); // Building queryComponent diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index 67744f9c3b1..af4ee7a57b6 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -21,7 +21,9 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Utility\PersisterHelper; @@ -154,13 +156,15 @@ protected function addAllClassFields($class, $alias, $columnAliasMap = []) } foreach ($classMetadata->fieldNames as $columnName => $propertyName) { + $property = $classMetadata->getProperty($propertyName); $columnAlias = $platform->getSQLResultCasing($columnAliasMap[$columnName]); - if ($classMetadata->hasField($propertyName)) { + if ($property instanceof FieldMetadata) { if (isset($this->fieldMappings[$columnAlias])) { - throw new \InvalidArgumentException( - "The column '$columnName' conflicts with another column in the mapper." - ); + throw new \InvalidArgumentException(sprintf( + "The column '%s' conflicts with another column in the mapper.", + $columnName + )); } $this->addFieldResult($alias, $columnAlias, $propertyName); @@ -169,13 +173,15 @@ protected function addAllClassFields($class, $alias, $columnAliasMap = []) } if (isset($this->metaMappings[$columnAlias])) { - throw new \InvalidArgumentException("The column '$columnAlias' conflicts with another column in the mapper."); + throw new \InvalidArgumentException(sprintf( + "The column '%s' conflicts with another column in the mapper.", + $columnAlias + )); } - $association = $classMetadata->associationMappings[$propertyName]; - $columnType = PersisterHelper::getTypeOfColumn($columnName, $classMetadata, $this->em); + $columnType = PersisterHelper::getTypeOfColumn($columnName, $classMetadata, $this->em); - $this->addMetaResult($alias, $columnAlias, $columnName, $association->isPrimaryKey(), $columnType); + $this->addMetaResult($alias, $columnAlias, $columnName, $property->isPrimaryKey(), $columnType); } } @@ -275,9 +281,10 @@ public function addNamedNativeQueryMapping(ClassMetadata $class, array $queryMap */ public function addNamedNativeQueryResultClassMapping(ClassMetadata $class, $resultClassName) { - $classMetadata = $this->em->getClassMetadata($resultClassName); - $shortName = $classMetadata->reflClass->getShortName(); - $alias = strtolower($shortName[0]).'0'; + $classMetadata = $this->em->getClassMetadata($resultClassName); + $platform = $this->em->getConnection()->getDatabasePlatform(); + $shortName = $classMetadata->reflClass->getShortName(); + $alias = strtolower($shortName[0]).'0'; $this->addEntityResult($class->name, $alias); @@ -291,16 +298,18 @@ public function addNamedNativeQueryResultClassMapping(ClassMetadata $class, $res } foreach ($classMetadata->fieldNames as $columnName => $propertyName) { - if ($classMetadata->hasField($propertyName)) { - $this->addFieldResult($alias, $columnName, $propertyName); + $property = $classMetadata->getProperty($propertyName); + $columnAlias = $platform->getSQLResultCasing($columnName); + + if ($property instanceof FieldMetadata) { + $this->addFieldResult($alias, $columnAlias, $propertyName); continue; } - $association = $classMetadata->associationMappings[$propertyName]; - $columnType = PersisterHelper::getTypeOfColumn($columnName, $classMetadata, $this->em); + $columnType = PersisterHelper::getTypeOfColumn($columnName, $classMetadata, $this->em); - $this->addMetaResult($alias, $columnName, $columnName, $association->isPrimaryKey(), $columnType); + $this->addMetaResult($alias, $columnAlias, $columnName, $property->isPrimaryKey(), $columnType); } return $this; @@ -325,7 +334,7 @@ public function addNamedNativeQueryResultSetMapping(ClassMetadata $class, $resul foreach ($resultMapping['entities'] as $key => $entityMapping) { $classMetadata = $this->em->getClassMetadata($entityMapping['entityClass']); - if ($class->reflClass->name == $classMetadata->reflClass->name) { + if ($class->reflClass->name === $classMetadata->reflClass->name) { $this->addEntityResult($classMetadata->name, $rootAlias); $this->addNamedNativeQueryEntityResultMapping($classMetadata, $entityMapping, $rootAlias); } else { @@ -388,28 +397,41 @@ public function addNamedNativeQueryEntityResultMapping(ClassMetadata $classMetad list($relation, $fieldName) = explode('.', $fieldName); } - if (isset($classMetadata->associationMappings[$relation])) { - if ($relation) { - $association = $classMetadata->associationMappings[$relation]; - $joinAlias = $alias.$relation; - $parentAlias = $alias; + $property = $classMetadata->getProperty($fieldName); + + if (! $relation && $property instanceof FieldMetadata) { + $this->addFieldResult($alias, $field['column'], $fieldName, $classMetadata->name); + + continue; + } + + $property = $classMetadata->getProperty($relation); + + if (! $property) { + throw new \InvalidArgumentException( + "Entity '".$classMetadata->name."' has no field '".$relation."'. " + ); + } - $this->addJoinedEntityResult($association->getTargetEntity(), $joinAlias, $parentAlias, $relation); - $this->addFieldResult($joinAlias, $field['column'], $fieldName); - } else { + if ($property instanceof AssociationMetadata) { + if (! $relation) { $this->addFieldResult($alias, $field['column'], $fieldName, $classMetadata->name); - } - } else { - if ( ! $classMetadata->getProperty($fieldName)) { - throw new \InvalidArgumentException("Entity '".$classMetadata->name."' has no field '".$fieldName."'. "); + + continue; } - $this->addFieldResult($alias, $field['column'], $fieldName, $classMetadata->name); + $joinAlias = $alias.$relation; + $parentAlias = $alias; + + $this->addJoinedEntityResult($property->getTargetEntity(), $joinAlias, $parentAlias, $relation); + $this->addFieldResult($joinAlias, $field['column'], $fieldName); } } } else { foreach ($classMetadata->fieldNames as $columnName => $propertyName) { - if (! $classMetadata->hasField($propertyName)) { + $property = $classMetadata->getProperty($propertyName); + + if (! ($property instanceof FieldMetadata)) { continue; } diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 7c1af03f27b..18f90ccffb8 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -21,7 +21,9 @@ use Doctrine\DBAL\LockMode; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; @@ -671,6 +673,10 @@ public function walkPathExpression($pathExpr) $sql .= $this->walkIdentificationVariable($dqlAlias, $fieldName) . '.'; } + if ($property instanceof AssociationMetadata) { + var_dump($property); + } + $sql .= $this->platform->quoteIdentifier($property->getColumnName()); break; @@ -680,7 +686,7 @@ public function walkPathExpression($pathExpr) $fieldName = $pathExpr->field; $dqlAlias = $pathExpr->identificationVariable; $class = $this->queryComponents[$dqlAlias]['metadata']; - $association = $class->associationMappings[$fieldName]; + $association = $class->getProperty($fieldName); if (! $association->isOwningSide()) { throw QueryException::associationPathInverseSideNotSupported($pathExpr); @@ -764,8 +770,8 @@ public function walkSelectClause($selectClause) } // Add foreign key columns of class and also parent classes - foreach ($class->associationMappings as $association) { - if (! ($association->isOwningSide() && $association instanceof ToOneAssociationMetadata)) { + foreach ($class->getProperties() as $association) { + if (! ($association instanceof ToOneAssociationMetadata && $association->isOwningSide())) { continue; } else if (! $addMetaColumns && ! $association->isPrimaryKey()) { continue; @@ -801,13 +807,13 @@ public function walkSelectClause($selectClause) $subClass = $this->em->getClassMetadata($subClassName); $sqlTableAlias = $this->getSQLTableAlias($subClass->getTableName(), $dqlAlias); - foreach ($subClass->associationMappings as $association) { + foreach ($subClass->getProperties() as $association) { // Skip if association is inherited - if ($subClass->isInheritedAssociation($association->getName())) { + if ($subClass->isInheritedProperty($association->getName())) { continue; } - if (! ($association->isOwningSide() && $association instanceof ToOneAssociationMetadata)) { + if (! ($association instanceof ToOneAssociationMetadata && $association->isOwningSide())) { continue; } @@ -956,7 +962,7 @@ public function walkJoinAssociationDeclaration($joinAssociationDeclaration, $joi // Ensure we got the owning side, since it has all mapping info $owningAssociation = ! $association->isOwningSide() - ? $targetClass->associationMappings[$association->getMappedBy()] + ? $targetClass->getProperty($association->getMappedBy()) : $association ; @@ -1423,6 +1429,10 @@ public function walkSelectExpression($selectExpression) // Select all fields from the queried class foreach ($class->getProperties() as $fieldName => $property) { + if (! ($property instanceof FieldMetadata)) { + continue; + } + if ($partialFieldSet && ! in_array($fieldName, $partialFieldSet)) { continue; } @@ -1454,6 +1464,10 @@ public function walkSelectExpression($selectExpression) $subClass = $this->em->getClassMetadata($subClassName); foreach ($subClass->getProperties() as $fieldName => $property) { + if (! ($property instanceof FieldMetadata)) { + continue; + } + if ($subClass->isInheritedProperty($fieldName) || ($partialFieldSet && !in_array($fieldName, $partialFieldSet))) { continue; } @@ -1936,11 +1950,11 @@ public function walkCollectionMemberExpression($collMemberExpr) throw new \BadMethodCallException("Not implemented"); } - $association = $class->associationMappings[$fieldName]; + $association = $class->getProperty($fieldName); $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); $owningAssociation = $association->isOwningSide() ? $association - : $targetClass->associationMappings[$association->getMappedBy()] + : $targetClass->getProperty($association->getMappedBy()) ; if ($association instanceof OneToManyAssociationMetadata) { diff --git a/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php b/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php index 02f2e1d5fa5..bb0e106b695 100644 --- a/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php @@ -48,11 +48,8 @@ public function generate(EntityManager $em, $entity) $identifier = []; foreach ($idFields as $idField) { - if (($property = $class->getProperty($idField)) === null) { - $property = $class->associationMappings[$idField]; - } - - $value = $property->getValue($entity); + $property = $class->getProperty($idField); + $value = $property->getValue($entity); if ( ! isset($value)) { throw ORMException::entityMissingAssignedIdForField($entity, $idField); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index 4b69f4eca00..058a0d5709c 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -21,7 +21,9 @@ use Doctrine\Common\Persistence\Mapping\MappingException; use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ColumnMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\TableMetadata; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Helper\Table; @@ -124,9 +126,7 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage $this->formatEntityListeners($metadata->entityListeners), ], - [$this->formatField('Association mappings:', '')], - $this->formatAssociationMappings($metadata->associationMappings), - [$this->formatField('Field mappings:', '')], + [$this->formatField('Property mappings:', '')], $this->formatPropertyMappings($metadata->getProperties()) ) ); @@ -296,7 +296,15 @@ private function formatPropertyMappings(array $propertyMappings) foreach ($propertyMappings as $propertyName => $property) { $output[] = $this->formatField(sprintf(' %s', $propertyName), ''); - $output = array_merge($output, $this->formatColumn($property)); + if ($property instanceof FieldMetadata) { + $output = array_merge($output, $this->formatColumn($property)); + } else if ($property instanceof AssociationMetadata) { + // @todo guilhermeblanco Fix me! We are trying to iterate through an AssociationMetadata instance + foreach ($property as $field => $value) { + $output[] = $this->formatField(sprintf(' %s', $field), $this->formatValue($value)); + } + + } } return $output; diff --git a/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php b/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php index 448adaa8f97..dabf687ae32 100644 --- a/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php +++ b/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php @@ -22,6 +22,7 @@ use Doctrine\Common\Persistence\Proxy; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Event\OnFlushEventArgs; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\PersistentCollection; @@ -80,13 +81,15 @@ public function dumpIdentityMap(EntityManagerInterface $em) $identityMap = $uow->getIdentityMap(); $fh = fopen($this->file, 'xb+'); - if (count($identityMap) == 0) { + + if (count($identityMap) === 0) { fwrite($fh, "Flush Operation [".$this->context."] - Empty identity map.\n"); return; } fwrite($fh, "Flush Operation [".$this->context."] - Dumping identity map:\n"); + foreach ($identityMap as $className => $map) { fwrite($fh, "Class: ". $className . "\n"); @@ -96,27 +99,31 @@ public function dumpIdentityMap(EntityManagerInterface $em) $cm = $em->getClassMetadata($className); - foreach ($cm->associationMappings as $field => $association) { + foreach ($cm->getProperties() as $field => $association) { + if (! ($association instanceof AssociationMetadata)) { + continue; + } + fwrite($fh, " " . $field . " "); $value = $association->getValue($entity); - if ($association instanceof ToOneAssociationMetadata) { - if ($value === null) { - fwrite($fh, " NULL\n"); - } else { - if ($value instanceof Proxy && !$value->__isInitialized()) { - fwrite($fh, "[PROXY] "); - } + if ($value === null) { + fwrite($fh, " NULL\n"); + + continue; + } - fwrite($fh, $this->getIdString($value, $uow) . " " . spl_object_hash($value) . "\n"); + if ($association instanceof ToOneAssociationMetadata) { + if ($value instanceof Proxy && !$value->__isInitialized()) { + fwrite($fh, "[PROXY] "); } + + fwrite($fh, $this->getIdString($value, $uow) . " " . spl_object_hash($value) . "\n"); } else { $initialized = !($value instanceof PersistentCollection) || $value->isInitialized(); - if ($value === null) { - fwrite($fh, " NULL\n"); - } elseif ($initialized) { + if ($initialized) { fwrite($fh, "[INITIALIZED] " . $this->getType($value). " " . count($value) . " elements\n"); foreach ($value as $obj) { diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 9d435edcd63..be149953e92 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -613,26 +613,21 @@ protected function generateEntityClassName(ClassMetadata $metadata) */ protected function generateEntityBody(ClassMetadata $metadata) { - $fieldMappingProperties = $this->generateEntityFieldMappingProperties($metadata); + $properties = $this->generateEntityProperties($metadata); $embeddedProperties = $this->generateEntityEmbeddedProperties($metadata); - $associationMappingProperties = $this->generateEntityAssociationMappingProperties($metadata); $stubMethods = $this->generateEntityStubMethods ? $this->generateEntityStubMethods($metadata) : null; $lifecycleCallbackMethods = $this->generateEntityLifecycleCallbackMethods($metadata); $code = []; - if ($fieldMappingProperties) { - $code[] = $fieldMappingProperties; + if ($properties) { + $code[] = $properties; } if ($embeddedProperties) { $code[] = $embeddedProperties; } - if ($associationMappingProperties) { - $code[] = $associationMappingProperties; - } - $code[] = $this->generateEntityConstructor($metadata); if ($stubMethods) { @@ -663,7 +658,7 @@ protected function generateEntityConstructor(ClassMetadata $metadata) $collections = []; - foreach ($metadata->associationMappings as $association) { + foreach ($metadata->getProperties() as $association) { if ($association instanceof ToManyAssociationMetadata) { $collections[] = sprintf('$this->%s = new \%s();', $association->getName(), ArrayCollection::class); } @@ -838,6 +833,7 @@ protected function hasProperty($property, ClassMetadata $metadata) if ($this->extendsClass() || (!$this->isNew && class_exists($metadata->name))) { // don't generate property if its already on the base class. $reflClass = new \ReflectionClass($this->getClassToExtend() ?: $metadata->name); + if ($reflClass->hasProperty($property)) { return true; } @@ -1148,25 +1144,6 @@ protected function generateEntityStubMethods(ClassMetadata $metadata) { $methods = []; - foreach ($metadata->getProperties() as $fieldName => $property) { - /*if (isset($fieldMapping['declaredField']) && isset($metadata->embeddedClasses[$fieldMapping['declaredField']])) { - continue; - }*/ - - $fieldType = $property->getTypeName(); - $nullable = $property->isNullable() ? 'null' : null; - - if (( ! $property->isPrimaryKey() || $metadata->generatorType == GeneratorType::NONE) && - ( ! $metadata->isEmbeddedClass || ! $this->embeddablesImmutable) && - $code = $this->generateEntityStubMethod($metadata, 'set', $fieldName, $fieldType, $nullable)) { - $methods[] = $code; - } - - if ($code = $this->generateEntityStubMethod($metadata, 'get', $fieldName, $fieldType, $nullable)) { - $methods[] = $code; - } - } - /*foreach ($metadata->embeddedClasses as $fieldName => $embeddedClass) { if (isset($embeddedClass['declaredField'])) { continue; @@ -1183,24 +1160,39 @@ protected function generateEntityStubMethods(ClassMetadata $metadata) } }*/ - foreach ($metadata->associationMappings as $association) { - if ($association instanceof ToOneAssociationMetadata) { - $nullable = $this->isAssociationIsNullable($association) ? 'null' : null; + foreach ($metadata->getProperties() as $fieldName => $property) { + if ($property instanceof FieldMetadata) { + $nullable = $property->isNullable() ? 'null' : null; - if ($code = $this->generateEntityStubMethod($metadata, 'set', $association->getName(), $association->getTargetEntity(), $nullable)) { + if ($code = $this->generateEntityStubMethod($metadata, 'get', $fieldName, $property->getTypeName(), $nullable)) { $methods[] = $code; } - if ($code = $this->generateEntityStubMethod($metadata, 'get', $association->getName(), $association->getTargetEntity(), $nullable)) { + + if (( ! $property->isPrimaryKey() || $metadata->generatorType == GeneratorType::NONE) && + ( ! $metadata->isEmbeddedClass || ! $this->embeddablesImmutable) && + $code = $this->generateEntityStubMethod($metadata, 'set', $fieldName, $property->getTypeName(), $nullable)) { $methods[] = $code; } - } else if ($association instanceof ToManyAssociationMetadata) { - if ($code = $this->generateEntityStubMethod($metadata, 'add', $association->getName(), $association->getTargetEntity())) { + } else if ($property instanceof ToOneAssociationMetadata) { + $nullable = $this->isAssociationIsNullable($property) ? 'null' : null; + + if ($code = $this->generateEntityStubMethod($metadata, 'set', $fieldName, $property->getTargetEntity(), $nullable)) { $methods[] = $code; } - if ($code = $this->generateEntityStubMethod($metadata, 'remove', $association->getName(), $association->getTargetEntity())) { + + if ($code = $this->generateEntityStubMethod($metadata, 'get', $fieldName, $property->getTargetEntity(), $nullable)) { $methods[] = $code; } - if ($code = $this->generateEntityStubMethod($metadata, 'get', $association->getName(), Collection::class)) { + } else if ($property instanceof ToManyAssociationMetadata) { + if ($code = $this->generateEntityStubMethod($metadata, 'add', $fieldName, $property->getTargetEntity())) { + $methods[] = $code; + } + + if ($code = $this->generateEntityStubMethod($metadata, 'remove', $fieldName, $property->getTargetEntity())) { + $methods[] = $code; + } + + if ($code = $this->generateEntityStubMethod($metadata, 'get', $fieldName, Collection::class)) { $methods[] = $code; } } @@ -1261,29 +1253,7 @@ protected function generateEntityLifecycleCallbackMethods(ClassMetadata $metadat * * @return string */ - protected function generateEntityAssociationMappingProperties(ClassMetadata $metadata) - { - $lines = []; - - foreach ($metadata->associationMappings as $association) { - if ($this->hasProperty($association->getName(), $metadata)) { - continue; - } - - $lines[] = $this->generateAssociationMappingPropertyDocBlock($association, $metadata); - $lines[] = $this->spaces . $this->fieldVisibility . ' $' . $association->getName() - . ($association instanceof ManyToManyAssociationMetadata ? ' = array()' : null) . ";\n"; - } - - return implode("\n", $lines); - } - - /** - * @param ClassMetadata $metadata - * - * @return string - */ - protected function generateEntityFieldMappingProperties(ClassMetadata $metadata) + protected function generateEntityProperties(ClassMetadata $metadata) { $lines = []; @@ -1298,11 +1268,18 @@ protected function generateEntityFieldMappingProperties(ClassMetadata $metadata) continue; } - $options = $property->getOptions(); + if ($property instanceof FieldMetadata) { + $options = $property->getOptions(); + $defaultValue = isset($options['default']) ? ' = ' . var_export($options['default'], true) : null; + + $lines[] = $this->generateFieldMappingPropertyDocBlock($property, $metadata); + } else { + $defaultValue = ($property instanceof ManyToManyAssociationMetadata ? ' = array()' : null); + + $lines[] = $this->generateAssociationMappingPropertyDocBlock($property, $metadata); + } - $lines[] = $this->generateFieldMappingPropertyDocBlock($property, $metadata); - $lines[] = $this->spaces . $this->fieldVisibility . ' $' . $fieldName - . (isset($options['default']) ? ' = ' . var_export($options['default'], true) : null) . ";\n"; + $lines[] = $this->spaces . $this->fieldVisibility . ' $' . $fieldName . $defaultValue . ";\n"; } return implode("\n", $lines); diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 55a4137f3ac..84c042d21e2 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -19,6 +19,7 @@ namespace Doctrine\ORM\Tools\Export\Driver; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; @@ -141,114 +142,123 @@ public function exportClassMetadata(ClassMetadata $metadata) } } + if (! $metadata->isIdentifierComposite) { + $lines[] = '$metadata->setIdGeneratorType(Mapping\GeneratorType::' . $metadata->generatorType . ');'; + } + foreach ($metadata->getProperties() as $property) { - /** @var FieldMetadata $property */ - $lines[] = sprintf( - '$property = new Mapping\%sFieldMetadata("%s");', - ($metadata->versionProperty === $property) ? 'Version' : '', - $property->getName() - ); + if ($property instanceof FieldMetadata) { + $this->exportFieldMetadata($metadata, $property, $lines); + } else if ($property instanceof AssociationMetadata) { + $this->exportAssociationMetadata($metadata, $property, $lines); + } + } - $lines[] = null; - $lines[] = '$property->setColumnName("' . $property->getColumnName() . '");'; - $lines[] = '$property->setType(Type::getType("' . $property->getTypeName() . '"));'; - $lines[] = '$property->setTableName("' . $property->getTableName() . '");'; + return implode(PHP_EOL, $lines); + } - if (! empty($property->getColumnDefinition())) { - $lines[] = '$property->setColumnDefinition("' . $property->getColumnDefinition() . '");'; - } + private function exportFieldMetadata(ClassMetadata $metadata, FieldMetadata $property, array &$lines) + { + $lines[] = sprintf( + '$property = new Mapping\%sFieldMetadata("%s");', + ($metadata->versionProperty === $property) ? 'Version' : '', + $property->getName() + ); - if (! empty($property->getLength())) { - $lines[] = '$property->setLength(' . $property->getLength() . ');'; - } + $lines[] = null; + $lines[] = '$property->setColumnName("' . $property->getColumnName() . '");'; + $lines[] = '$property->setType(Type::getType("' . $property->getTypeName() . '"));'; + $lines[] = '$property->setTableName("' . $property->getTableName() . '");'; - if (! empty($property->getScale())) { - $lines[] = '$property->setScale(' . $property->getScale() . ');'; - } + if (! empty($property->getColumnDefinition())) { + $lines[] = '$property->setColumnDefinition("' . $property->getColumnDefinition() . '");'; + } - if (! empty($property->getPrecision())) { - $lines[] = '$property->setPrecision(' . $property->getPrecision() . ');'; - } + if (! empty($property->getLength())) { + $lines[] = '$property->setLength(' . $property->getLength() . ');'; + } - $lines[] = '$property->setOptions(' . $this->varExport($property->getOptions()) . ');'; - $lines[] = '$property->setPrimaryKey(' . $this->varExport($property->isPrimaryKey()) . ');'; - $lines[] = '$property->setNullable(' . $this->varExport($property->isNullable()) . ');'; - $lines[] = '$property->setUnique(' . $this->varExport($property->isUnique()) . ');'; - $lines[] = null; - $lines[] = '$metadata->addProperty($property);'; + if (! empty($property->getScale())) { + $lines[] = '$property->setScale(' . $property->getScale() . ');'; } - if ( ! $metadata->isIdentifierComposite) { - $lines[] = '$metadata->setIdGeneratorType(Mapping\GeneratorType::' . $metadata->generatorType . ');'; + if (! empty($property->getPrecision())) { + $lines[] = '$property->setPrecision(' . $property->getPrecision() . ');'; } - foreach ($metadata->associationMappings as $association) { - $cascade = ['remove', 'persist', 'refresh', 'merge', 'detach']; + $lines[] = '$property->setOptions(' . $this->varExport($property->getOptions()) . ');'; + $lines[] = '$property->setPrimaryKey(' . $this->varExport($property->isPrimaryKey()) . ');'; + $lines[] = '$property->setNullable(' . $this->varExport($property->isNullable()) . ');'; + $lines[] = '$property->setUnique(' . $this->varExport($property->isUnique()) . ');'; + $lines[] = null; + $lines[] = '$metadata->addProperty($property);'; + } - foreach ($cascade as $key => $value) { - if ( ! in_array($value, $association->getCascade())) { - unset($cascade[$key]); - } - } + private function exportAssociationMetadata(ClassMetadata $metadata, AssociationMetadata $association, array &$lines) + { + $cascade = ['remove', 'persist', 'refresh', 'merge', 'detach']; - if (count($cascade) === 5) { - $cascade = ['all']; + foreach ($cascade as $key => $value) { + if ( ! in_array($value, $association->getCascade())) { + unset($cascade[$key]); } + } - if ($association instanceof OneToOneAssociationMetadata) { - $this->exportJoinColumns($association->getJoinColumns(), $lines, 'joinColumns'); - - $lines[] = '$association = new Mapping\OneToOneAssociationMetadata("' . $association->getName() . '");'; - $lines[] = null; - $lines[] = '$association->setJoinColumns($joinColumns);'; - } else if ($association instanceof ManyToOneAssociationMetadata) { - $this->exportJoinColumns($association->getJoinColumns(), $lines, 'joinColumns'); - - $lines[] = '$association = new Mapping\ManyToOneAssociationMetadata("' . $association->getName() . '");'; - $lines[] = null; - $lines[] = '$association->setJoinColumns($joinColumns);'; - } else if ($association instanceof OneToManyAssociationMetadata) { - $lines[] = '$association = new Mapping\OneToManyAssociationMetadata("' . $association->getName() . '");'; - $lines[] = null; - $lines[] = '$association->setOrderBy(' . $this->varExport($association->getOrderBy()) . ');'; - } else if ($association instanceof ManyToManyAssociationMetadata) { - if ($association->getJoinTable()) { - $this->exportJoinTable($association->getJoinTable(), $lines); - } - - $lines[] = '$association = new Mapping\ManyToManyAssociationMetadata("' . $association->getName() . '");'; - $lines[] = null; + if (count($cascade) === 5) { + $cascade = ['all']; + } - if ($association->getJoinTable()) { - $lines[] = '$association->setJoinTable($joinTable);'; - } + if ($association instanceof OneToOneAssociationMetadata) { + $this->exportJoinColumns($association->getJoinColumns(), $lines, 'joinColumns'); - if ($association->getIndexedBy()) { - $lines[] = '$association->setIndexedBy("' . $association->getIndexedBy() . '");'; - } + $lines[] = '$association = new Mapping\OneToOneAssociationMetadata("' . $association->getName() . '");'; + $lines[] = null; + $lines[] = '$association->setJoinColumns($joinColumns);'; + } else if ($association instanceof ManyToOneAssociationMetadata) { + $this->exportJoinColumns($association->getJoinColumns(), $lines, 'joinColumns'); - $lines[] = '$association->setOrderBy(' . $this->varExport($association->getOrderBy()) . ');'; + $lines[] = '$association = new Mapping\ManyToOneAssociationMetadata("' . $association->getName() . '");'; + $lines[] = null; + $lines[] = '$association->setJoinColumns($joinColumns);'; + } else if ($association instanceof OneToManyAssociationMetadata) { + $lines[] = '$association = new Mapping\OneToManyAssociationMetadata("' . $association->getName() . '");'; + $lines[] = null; + $lines[] = '$association->setOrderBy(' . $this->varExport($association->getOrderBy()) . ');'; + } else if ($association instanceof ManyToManyAssociationMetadata) { + if ($association->getJoinTable()) { + $this->exportJoinTable($association->getJoinTable(), $lines); } - $lines[] = '$association->setTargetEntity("' . $association->getTargetEntity() . '");'; - $lines[] = '$association->setFetchMode("' . $association->getFetchMode() . '");'; + $lines[] = '$association = new Mapping\ManyToManyAssociationMetadata("' . $association->getName() . '");'; + $lines[] = null; - if ($association->getMappedBy()) { - $lines[] = '$association->setMappedBy("' . $association->getMappedBy() . '");'; + if ($association->getJoinTable()) { + $lines[] = '$association->setJoinTable($joinTable);'; } - if ($association->getInversedBy()) { - $lines[] = '$association->setInversedBy("' . $association->getInversedBy() . '");'; + if ($association->getIndexedBy()) { + $lines[] = '$association->setIndexedBy("' . $association->getIndexedBy() . '");'; } - $lines[] = '$association->setCascade(' . $this->varExport($cascade) . ');'; - $lines[] = '$association->setOrphanRemoval(' . $this->varExport($association->isOrphanRemoval()) . ');'; - $lines[] = '$association->setPrimaryKey(' . $this->varExport($association->isPrimaryKey()) . ');'; - $lines[] = null; - $lines[] = '$metadata->addAssociation($association);'; + $lines[] = '$association->setOrderBy(' . $this->varExport($association->getOrderBy()) . ');'; } - return implode(PHP_EOL, $lines); + $lines[] = '$association->setTargetEntity("' . $association->getTargetEntity() . '");'; + $lines[] = '$association->setFetchMode("' . $association->getFetchMode() . '");'; + + if ($association->getMappedBy()) { + $lines[] = '$association->setMappedBy("' . $association->getMappedBy() . '");'; + } + + if ($association->getInversedBy()) { + $lines[] = '$association->setInversedBy("' . $association->getInversedBy() . '");'; + } + + $lines[] = '$association->setCascade(' . $this->varExport($cascade) . ');'; + $lines[] = '$association->setOrphanRemoval(' . $this->varExport($association->isOrphanRemoval()) . ');'; + $lines[] = '$association->setPrimaryKey(' . $this->varExport($association->isPrimaryKey()) . ');'; + $lines[] = null; + $lines[] = '$metadata->addAssociation($association);'; } private function exportJoinTable(JoinTableMetadata $joinTable, array &$lines) diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 4d502344296..86cfdc1f897 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -22,6 +22,7 @@ use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ChangeTrackingPolicy; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\JoinColumnMetadata; @@ -185,12 +186,6 @@ public function exportClassMetadata(ClassMetadata $metadata) } } - foreach ($metadata->associationMappings as $name => $association) { - if ($association->isPrimaryKey()) { - $id[$name] = $association; - } - } - if ($id) { foreach ($id as $property) { $idXml = $root->addChild('id'); @@ -220,146 +215,171 @@ public function exportClassMetadata(ClassMetadata $metadata) } } - if ($properties) { - foreach ($properties as $property) { - $fieldXml = $root->addChild('field'); + $orderMap = [ + FieldMetadata::class, + OneToOneAssociationMetadata::class, + OneToManyAssociationMetadata::class, + ManyToOneAssociationMetadata::class, + ManyToManyAssociationMetadata::class, + ]; - $fieldXml->addAttribute('name', $property->getName()); - $fieldXml->addAttribute('type', $property->getTypeName()); - $fieldXml->addAttribute('column', $property->getColumnName()); + uasort($properties, function($m1, $m2) use (&$orderMap) { + $a1 = array_search(get_class($m1), $orderMap); + $a2 = array_search(get_class($m2), $orderMap); - if ($property->isNullable()) { - $fieldXml->addAttribute('nullable', 'true'); - } + return strcmp($a1, $a2); + }); - if ($property->isUnique()) { - $fieldXml->addAttribute('unique', 'true'); - } + foreach ($properties as $property) { + if ($property instanceof FieldMetadata) { + $this->exportFieldMetadata($root, $metadata, $property); + } else if ($property instanceof AssociationMetadata) { + $this->exportAssociationMetadata($root, $metadata, $property); + } + } - if (is_int($property->getLength())) { - $fieldXml->addAttribute('length', $property->getLength()); - } + if (isset($metadata->lifecycleCallbacks) && count($metadata->lifecycleCallbacks)>0) { + $lifecycleCallbacksXml = $root->addChild('lifecycle-callbacks'); - if (is_int($property->getPrecision())) { - $fieldXml->addAttribute('precision', $property->getPrecision()); - } + foreach ($metadata->lifecycleCallbacks as $name => $methods) { + foreach ($methods as $method) { + $lifecycleCallbackXml = $lifecycleCallbacksXml->addChild('lifecycle-callback'); - if (is_int($property->getScale())) { - $fieldXml->addAttribute('scale', $property->getScale()); + $lifecycleCallbackXml->addAttribute('type', $name); + $lifecycleCallbackXml->addAttribute('method', $method); } + } + } - if ($metadata->isVersioned() && $metadata->versionProperty->getName() === $property->getName()) { - $fieldXml->addAttribute('version', 'true'); - } + return $this->asXml($xml); + } - if ($property->getColumnDefinition()) { - $fieldXml->addAttribute('column-definition', $property->getColumnDefinition()); - } + /** + * @param \SimpleXMLElement $root + * @param ClassMetadata $metadata + * @param FieldMetadata $property + */ + private function exportFieldMetadata( + \SimpleXMLElement $root, + ClassMetadata $metadata, + FieldMetadata $property + ) + { + $fieldXml = $root->addChild('field'); - if ($property->getOptions()) { - $optionsXml = $fieldXml->addChild('options'); + $fieldXml->addAttribute('name', $property->getName()); + $fieldXml->addAttribute('type', $property->getTypeName()); + $fieldXml->addAttribute('column', $property->getColumnName()); - foreach ($property->getOptions() as $key => $value) { - $optionXml = $optionsXml->addChild('option', $value); + if ($property->isNullable()) { + $fieldXml->addAttribute('nullable', 'true'); + } - $optionXml->addAttribute('name', $key); - } - } - } + if ($property->isUnique()) { + $fieldXml->addAttribute('unique', 'true'); } - $orderMap = [ - OneToOneAssociationMetadata::class, - OneToManyAssociationMetadata::class, - ManyToOneAssociationMetadata::class, - ManyToManyAssociationMetadata::class, - ]; + if (is_int($property->getLength())) { + $fieldXml->addAttribute('length', $property->getLength()); + } - uasort($metadata->associationMappings, function($m1, $m2) use (&$orderMap){ - $a1 = array_search(get_class($m1), $orderMap); - $a2 = array_search(get_class($m2), $orderMap); + if (is_int($property->getPrecision())) { + $fieldXml->addAttribute('precision', $property->getPrecision()); + } - return strcmp($a1, $a2); - }); + if (is_int($property->getScale())) { + $fieldXml->addAttribute('scale', $property->getScale()); + } - foreach ($metadata->associationMappings as $association) { - $associationMappingXml = null; - if ($association instanceof OneToOneAssociationMetadata) { - $associationMappingXml = $root->addChild('one-to-one'); - } elseif ($association instanceof OneToManyAssociationMetadata) { - $associationMappingXml = $root->addChild('one-to-many'); - } elseif ($association instanceof ManyToOneAssociationMetadata) { - $associationMappingXml = $root->addChild('many-to-one'); - } elseif ($association instanceof ManyToManyAssociationMetadata) { - $associationMappingXml = $root->addChild('many-to-many'); - } + if ($metadata->isVersioned() && $metadata->versionProperty->getName() === $property->getName()) { + $fieldXml->addAttribute('version', 'true'); + } - $associationMappingXml->addAttribute('field', $association->getName()); - $associationMappingXml->addAttribute('target-entity', $association->getTargetEntity()); - $associationMappingXml->addAttribute('fetch', $association->getFetchMode()); + if ($property->getColumnDefinition()) { + $fieldXml->addAttribute('column-definition', $property->getColumnDefinition()); + } - $this->exportCascade($associationMappingXml, $association->getCascade()); + if ($property->getOptions()) { + $optionsXml = $fieldXml->addChild('options'); - if ($association->getMappedBy()) { - $associationMappingXml->addAttribute('mapped-by', $association->getMappedBy()); - } + foreach ($property->getOptions() as $key => $value) { + $optionXml = $optionsXml->addChild('option', $value); - if ($association->getInversedBy()) { - $associationMappingXml->addAttribute('inversed-by', $association->getInversedBy()); + $optionXml->addAttribute('name', $key); } + } + } - if ($association->isOrphanRemoval()) { - $associationMappingXml->addAttribute('orphan-removal', 'true'); - } + /** + * @param \SimpleXMLElement $root + * @param ClassMetadata $metadata + * @param AssociationMetadata $association + */ + private function exportAssociationMetadata( + \SimpleXMLElement $root, + ClassMetadata $metadata, + AssociationMetadata $association + ) { + if ($association instanceof OneToOneAssociationMetadata) { + $associationMappingXml = $root->addChild('one-to-one'); + } elseif ($association instanceof OneToManyAssociationMetadata) { + $associationMappingXml = $root->addChild('one-to-many'); + } elseif ($association instanceof ManyToOneAssociationMetadata) { + $associationMappingXml = $root->addChild('many-to-one'); + } else { + $associationMappingXml = $root->addChild('many-to-many'); + } - if ($association instanceof ToManyAssociationMetadata) { - if ($association instanceof ManyToManyAssociationMetadata && $association->getJoinTable()) { - $joinTableXml = $associationMappingXml->addChild('join-table'); - $joinTable = $association->getJoinTable(); + $associationMappingXml->addAttribute('field', $association->getName()); + $associationMappingXml->addAttribute('target-entity', $association->getTargetEntity()); + $associationMappingXml->addAttribute('fetch', $association->getFetchMode()); - $joinTableXml->addAttribute('name', $joinTable->getName()); + $this->exportCascade($associationMappingXml, $association->getCascade()); - $this->exportJoinColumns($joinTableXml, $joinTable->getJoinColumns(), 'join-columns'); - $this->exportJoinColumns($joinTableXml, $joinTable->getInverseJoinColumns(), 'inverse-join-columns'); - } + if ($association->getMappedBy()) { + $associationMappingXml->addAttribute('mapped-by', $association->getMappedBy()); + } - if ($association->getIndexedBy()) { - $associationMappingXml->addAttribute('index-by', $association->getIndexedBy()); - } + if ($association->getInversedBy()) { + $associationMappingXml->addAttribute('inversed-by', $association->getInversedBy()); + } - if ($association->getOrderBy()) { - $orderByXml = $associationMappingXml->addChild('order-by'); + if ($association->isOrphanRemoval()) { + $associationMappingXml->addAttribute('orphan-removal', 'true'); + } - foreach ($association->getOrderBy() as $name => $direction) { - $orderByFieldXml = $orderByXml->addChild('order-by-field'); + if ($association instanceof ToManyAssociationMetadata) { + if ($association instanceof ManyToManyAssociationMetadata && $association->getJoinTable()) { + $joinTableXml = $associationMappingXml->addChild('join-table'); + $joinTable = $association->getJoinTable(); - $orderByFieldXml->addAttribute('name', $name); - $orderByFieldXml->addAttribute('direction', $direction); - } - } + $joinTableXml->addAttribute('name', $joinTable->getName()); + + $this->exportJoinColumns($joinTableXml, $joinTable->getJoinColumns(), 'join-columns'); + $this->exportJoinColumns($joinTableXml, $joinTable->getInverseJoinColumns(), 'inverse-join-columns'); } - if ($association instanceof ToOneAssociationMetadata) { - if ($association->getJoinColumns()) { - $this->exportJoinColumns($associationMappingXml, $association->getJoinColumns()); - } + if ($association->getIndexedBy()) { + $associationMappingXml->addAttribute('index-by', $association->getIndexedBy()); } - } - if (isset($metadata->lifecycleCallbacks) && count($metadata->lifecycleCallbacks)>0) { - $lifecycleCallbacksXml = $root->addChild('lifecycle-callbacks'); + if ($association->getOrderBy()) { + $orderByXml = $associationMappingXml->addChild('order-by'); - foreach ($metadata->lifecycleCallbacks as $name => $methods) { - foreach ($methods as $method) { - $lifecycleCallbackXml = $lifecycleCallbacksXml->addChild('lifecycle-callback'); + foreach ($association->getOrderBy() as $name => $direction) { + $orderByFieldXml = $orderByXml->addChild('order-by-field'); - $lifecycleCallbackXml->addAttribute('type', $name); - $lifecycleCallbackXml->addAttribute('method', $method); + $orderByFieldXml->addAttribute('name', $name); + $orderByFieldXml->addAttribute('direction', $direction); } } } - return $this->asXml($xml); + if ($association instanceof ToOneAssociationMetadata) { + if ($association->getJoinColumns()) { + $this->exportJoinColumns($associationMappingXml, $association->getJoinColumns()); + } + } } /** diff --git a/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php index c7a9cff373c..ecf8b206f70 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php @@ -19,6 +19,8 @@ namespace Doctrine\ORM\Tools\Pagination; +use Doctrine\ORM\Mapping\AssociationMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Query\SqlWalker; use Doctrine\ORM\Query\AST\SelectStatement; @@ -118,17 +120,16 @@ public function walkSelectStatement(SelectStatement $AST) // For every identifier, find out the SQL alias by combing through the ResultSetMapping $sqlIdentifier = []; foreach ($rootIdentifier as $identifier) { - if (($property = $rootClass->getProperty($identifier)) !== null) { + $property = $rootClass->getProperty($identifier); + + if ($property instanceof FieldMetadata) { foreach (array_keys($this->rsm->fieldMappings, $identifier) as $alias) { if ($this->rsm->columnOwnerMap[$alias] == $rootAlias) { $sqlIdentifier[$identifier] = $alias; } } - } - - if (isset($rootClass->associationMappings[$identifier])) { - $association = $rootClass->associationMappings[$identifier]; - $joinColumns = $association->getJoinColumns(); + } else if ($property instanceof AssociationMetadata) { + $joinColumns = $property->getJoinColumns(); $joinColumn = reset($joinColumns); foreach (array_keys($this->rsm->metaMappings, $joinColumn->getColumnName()) as $alias) { diff --git a/lib/Doctrine/ORM/Tools/Pagination/CountWalker.php b/lib/Doctrine/ORM/Tools/Pagination/CountWalker.php index fd3d29cc2cb..90e443a8a57 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/CountWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/CountWalker.php @@ -19,6 +19,9 @@ namespace Doctrine\ORM\Tools\Pagination; +use Doctrine\ORM\Mapping\AssociationMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\Query\TreeWalkerAdapter; use Doctrine\ORM\Query\AST\SelectStatement; use Doctrine\ORM\Query\AST\SelectExpression; @@ -64,23 +67,29 @@ public function walkSelectStatement(SelectStatement $AST) throw new \RuntimeException("Cannot count query which selects two FROM components, cannot make distinction"); } - $fromRoot = reset($from); - $rootAlias = $fromRoot->rangeVariableDeclaration->aliasIdentificationVariable; - $rootClass = $queryComponents[$rootAlias]['metadata']; - $identifierFieldName = $rootClass->getSingleIdentifierFieldName(); + $fromRoot = reset($from); + $rootAlias = $fromRoot->rangeVariableDeclaration->aliasIdentificationVariable; + $rootClass = $queryComponents[$rootAlias]['metadata']; + $property = $rootClass->getProperty($rootClass->getSingleIdentifierFieldName()); + $pathType = PathExpression::TYPE_STATE_FIELD; - $pathType = PathExpression::TYPE_STATE_FIELD; - if (isset($rootClass->associationMappings[$identifierFieldName])) { - $pathType = PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION; + if ($property instanceof AssociationMetadata) { + $pathType = $property instanceof ToOneAssociationMetadata + ? PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION + : PathExpression::TYPE_COLLECTION_VALUED_ASSOCIATION + ; } $pathExpression = new PathExpression( - PathExpression::TYPE_STATE_FIELD | PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION, $rootAlias, - $identifierFieldName + PathExpression::TYPE_STATE_FIELD | PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION, + $rootAlias, + $property->getName() ); + $pathExpression->type = $pathType; $distinct = $this->getQuery()->getHint(self::HINT_DISTINCT); + $AST->selectClause->selectExpressions = [ new SelectExpression( new AggregateExpression('count', $pathExpression, $distinct), null diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php index e7ac95f5f02..313d2d0b12d 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php @@ -25,6 +25,8 @@ use Doctrine\DBAL\Platforms\SQLAnywherePlatform; use Doctrine\DBAL\Platforms\SQLServerPlatform; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\AssociationMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Query\AST\OrderByClause; use Doctrine\ORM\Query\AST\PartialObjectExpression; use Doctrine\ORM\Query\AST\SelectExpression; @@ -530,7 +532,9 @@ private function getSQLIdentifier(SelectStatement $AST) $sqlIdentifier = []; foreach ($rootIdentifier as $identifier) { - if (($property = $rootClass->getProperty($identifier)) !== null) { + $property = $rootClass->getProperty($identifier); + + if ($property instanceof FieldMetadata) { foreach (array_keys($this->rsm->fieldMappings, $identifier) as $alias) { if ($this->rsm->columnOwnerMap[$alias] === $rootAlias) { $sqlIdentifier[$identifier] = [ @@ -539,16 +543,13 @@ private function getSQLIdentifier(SelectStatement $AST) ]; } } - } - - if (isset($rootClass->associationMappings[$identifier])) { - $association = $rootClass->associationMappings[$identifier]; - $joinColumns = $association->getJoinColumns(); + } else if ($property instanceof AssociationMetadata) { + $joinColumns = $property->getJoinColumns(); $joinColumn = reset($joinColumns); foreach (array_keys($this->rsm->metaMappings, $joinColumn->getColumnName()) as $alias) { if ($this->rsm->columnOwnerMap[$alias] === $rootAlias) { - $sqlIdentifier[$property] = [ + $sqlIdentifier[$identifier] = [ 'type' => $this->rsm->typeMappings[$alias], 'alias' => $alias, ]; diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php index b61d0266061..eb11f5efd60 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Tools\Pagination; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ToManyAssociationMetadata; use Doctrine\ORM\Query; @@ -82,21 +83,21 @@ public function walkSelectStatement(SelectStatement $AST) } } - $identifier = $rootClass->getSingleIdentifierFieldName(); + $property = $rootClass->getProperty($rootClass->getSingleIdentifierFieldName()); - if (isset($rootClass->associationMappings[$identifier])) { + if ($property instanceof AssociationMetadata) { throw new \RuntimeException( "Paginating an entity with foreign key as identifier only works when using the Output Walkers. " . "Call Paginator#setUseOutputWalkers(true) before iterating the paginator." ); } - $this->getQuery()->setHint(self::IDENTIFIER_TYPE, $rootClass->getProperty($identifier)->getType()); + $this->getQuery()->setHint(self::IDENTIFIER_TYPE, $property->getType()); $pathExpression = new PathExpression( PathExpression::TYPE_STATE_FIELD | PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION, $rootAlias, - $identifier + $property->getName() ); $pathExpression->type = PathExpression::TYPE_STATE_FIELD; diff --git a/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php b/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php index e7424a0df45..d21b39386d2 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php @@ -19,6 +19,8 @@ namespace Doctrine\ORM\Tools\Pagination; +use Doctrine\ORM\Mapping\AssociationMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\Query\AST\ArithmeticExpression; use Doctrine\ORM\Query\AST\SimpleArithmeticExpression; use Doctrine\ORM\Query\TreeWalkerAdapter; @@ -81,18 +83,25 @@ public function walkSelectStatement(SelectStatement $AST) throw new \RuntimeException("Cannot count query which selects two FROM components, cannot make distinction"); } - $fromRoot = reset($from); - $rootAlias = $fromRoot->rangeVariableDeclaration->aliasIdentificationVariable; - $rootClass = $queryComponents[$rootAlias]['metadata']; - $identifierFieldName = $rootClass->getSingleIdentifierFieldName(); + $fromRoot = reset($from); + $rootAlias = $fromRoot->rangeVariableDeclaration->aliasIdentificationVariable; + $rootClass = $queryComponents[$rootAlias]['metadata']; + $property = $rootClass->getProperty($rootClass->getSingleIdentifierFieldName()); + $pathType = PathExpression::TYPE_STATE_FIELD; - $pathType = PathExpression::TYPE_STATE_FIELD; - - if (isset($rootClass->associationMappings[$identifierFieldName])) { - $pathType = PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION; + if ($property instanceof AssociationMetadata) { + $pathType = $property instanceof ToOneAssociationMetadata + ? PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION + : PathExpression::TYPE_COLLECTION_VALUED_ASSOCIATION + ; } - $pathExpression = new PathExpression(PathExpression::TYPE_STATE_FIELD | PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION, $rootAlias, $identifierFieldName); + $pathExpression = new PathExpression( + PathExpression::TYPE_STATE_FIELD | PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION, + $rootAlias, + $property->getName() + ); + $pathExpression->type = $pathType; $count = $this->getQuery()->getHint(self::HINT_PAGINATOR_ID_COUNT); diff --git a/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php b/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php index c44233fe173..5df14e8ddeb 100644 --- a/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php +++ b/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php @@ -105,8 +105,9 @@ public function loadClassMetadata(LoadClassMetadataEventArgs $args) } } - foreach ($class->associationMappings as $association) { - if (isset($this->resolveTargetEntities[$association->getTargetEntity()])) { + foreach ($class->getProperties() as $association) { + if ($association instanceof AssociationMetadata && + isset($this->resolveTargetEntities[$association->getTargetEntity()])) { $targetEntity = $this->resolveTargetEntities[$association->getTargetEntity()]; $association->setTargetEntity($targetEntity); diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index ab959442bb2..e4f48aded53 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -27,6 +27,7 @@ use Doctrine\DBAL\Schema\Visitor\DropSchemaSqlCollector; use Doctrine\DBAL\Schema\Visitor\RemoveNamespacedAssets; use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\GeneratorType; @@ -191,6 +192,10 @@ public function getSchemaFromMetadata(array $classes) $pkColumns = []; foreach ($class->getProperties() as $fieldName => $property) { + if (! ($property instanceof FieldMetadata)) { + continue; + } + if (! $class->isInheritedProperty($fieldName)) { $columnName = $this->platform->quoteIdentifier($property->getColumnName()); @@ -257,17 +262,16 @@ public function getSchemaFromMetadata(array $classes) $pkColumns = []; foreach ($class->identifier as $identifierField) { - if (($property = $class->getProperty($identifierField)) !== null) { + $property = $class->getProperty($identifierField); + + if ($property instanceof FieldMetadata) { $pkColumns[] = $this->platform->quoteIdentifier($property->getColumnName()); continue; } - if (isset($class->associationMappings[$identifierField])) { - /** @var array $assoc */ - $association = $class->associationMappings[$identifierField]; - - foreach ($association->getJoinColumns() as $joinColumn) { + if ($property instanceof ToOneAssociationMetadata) { + foreach ($property->getJoinColumns() as $joinColumn) { $pkColumns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); } } @@ -413,6 +417,10 @@ private function gatherColumns($class, Table $table) $pkColumns = []; foreach ($class->getProperties() as $fieldName => $property) { + if (! ($property instanceof FieldMetadata)) { + continue; + } + if ($class->inheritanceType === InheritanceType::SINGLE_TABLE && $class->isInheritedProperty($fieldName)) { continue; } @@ -526,8 +534,12 @@ private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Tabl */ private function gatherRelationsSql($class, $table, $schema, &$addedFks, &$blacklistedFks) { - foreach ($class->associationMappings as $fieldName => $property) { - if ($class->isInheritedAssociation($fieldName) && ! $property->getDeclaringClass()->isMappedSuperclass) { + foreach ($class->getProperties() as $fieldName => $property) { + if (! ($property instanceof AssociationMetadata)) { + continue; + } + + if ($class->isInheritedProperty($fieldName) && ! $property->getDeclaringClass()->isMappedSuperclass) { continue; } @@ -631,7 +643,7 @@ private function getDefiningClass($class, $referencedColumnName) continue; } - $association = $class->associationMappings[$fieldName]; + $association = $class->getProperty($fieldName); $joinColumns = $association->getJoinColumns(); if (count($joinColumns) > 1) { diff --git a/lib/Doctrine/ORM/Tools/SchemaValidator.php b/lib/Doctrine/ORM/Tools/SchemaValidator.php index 229d30344c3..5d3d0d8cc2e 100644 --- a/lib/Doctrine/ORM/Tools/SchemaValidator.php +++ b/lib/Doctrine/ORM/Tools/SchemaValidator.php @@ -22,6 +22,7 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; use Doctrine\ORM\Mapping\ManyToOneAssociationMetadata; @@ -94,7 +95,11 @@ public function validateClass(ClassMetadata $class) { $ce = []; - foreach ($class->associationMappings as $fieldName => $association) { + foreach ($class->getProperties() as $fieldName => $association) { + if (! ($association instanceof AssociationMetadata)) { + continue; + } + $ce = array_merge($ce, $this->validateAssociation($class, $association)); } @@ -143,7 +148,7 @@ private function validateAssociation(ClassMetadata $class, AssociationMetadata $ /** @var ClassMetadata $targetMetadata */ $targetMetadata = $metadataFactory->getMetadataFor($targetEntity); $containsForeignId = array_filter($targetMetadata->identifier, function ($identifier) use ($targetMetadata) { - return isset($targetMetadata->associationMappings[$identifier]); + return $targetMetadata->hasAssociation($identifier); }); if ($association->isPrimaryKey() && count($containsForeignId)) { @@ -153,20 +158,23 @@ private function validateAssociation(ClassMetadata $class, AssociationMetadata $ } if ($mappedBy) { - if ($targetMetadata->hasField($mappedBy)) { - $message = "The association %s#%s refers to the owning side property %s#%s which is not defined as association, but as field."; + /** @var AssociationMetadata $targetAssociation */ + $targetAssociation = $targetMetadata->getProperty($mappedBy); - $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $mappedBy); - } else if (! $targetMetadata->hasAssociation($mappedBy)) { + if (! $targetAssociation) { $message = "The association %s#%s refers to the owning side property %s#%s which does not exist."; $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $mappedBy); - } else if ($targetMetadata->associationMappings[$mappedBy]->getInversedBy() === null) { + } else if ($targetAssociation instanceof FieldMetadata) { + $message = "The association %s#%s refers to the owning side property %s#%s which is not defined as association, but as field."; + + $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $mappedBy); + } else if ($targetAssociation->getInversedBy() === null) { $message = "The property %s#%s is on the inverse side of a bi-directional relationship, but the " . "specified mappedBy association on the target-entity %s#%s does not contain the required 'inversedBy=\"%s\"' attribute."; $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $mappedBy, $fieldName); - } else if ($targetMetadata->associationMappings[$mappedBy]->getInversedBy() !== $fieldName) { + } else if ($targetAssociation->getInversedBy() !== $fieldName) { $message = "The mapping between %s#%s and %s#%s are inconsistent with each other."; $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $mappedBy); @@ -174,29 +182,30 @@ private function validateAssociation(ClassMetadata $class, AssociationMetadata $ } if ($inversedBy) { - if ($targetMetadata->hasField($inversedBy)) { - $message = "The association %s#%s refers to the inverse side property %s#%s which is not defined as association, but as field."; + /** @var AssociationMetadata $targetAssociation */ + $targetAssociation = $targetMetadata->getProperty($inversedBy); - $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $inversedBy); - } else if (!$targetMetadata->hasAssociation($inversedBy)) { + if (! $targetAssociation) { $message = "The association %s#%s refers to the inverse side property %s#%s which does not exist."; $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $inversedBy); - } elseif ($targetMetadata->associationMappings[$inversedBy]->getMappedBy() === null) { + } else if ($targetAssociation instanceof FieldMetadata) { + $message = "The association %s#%s refers to the inverse side property %s#%s which is not defined as association, but as field."; + + $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $inversedBy); + } else if ($targetAssociation->getMappedBy() === null) { $message = "The property %s#%s is on the owning side of a bi-directional relationship, but the " . "specified mappedBy association on the target-entity %s#%s does not contain the required 'inversedBy=\"%s\"' attribute."; $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $mappedBy, $fieldName); - } elseif ($targetMetadata->associationMappings[$inversedBy]->getMappedBy() !== $fieldName) { + } else if ($targetAssociation->getMappedBy() !== $fieldName) { $message = "The mapping between %s#%s and %s#%s are inconsistent with each other."; $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $inversedBy); } // Verify inverse side/owning side match each other - if (array_key_exists($inversedBy, $targetMetadata->associationMappings)) { - $targetAssociation = $targetMetadata->associationMappings[$inversedBy]; - + if ($targetAssociation) { if ($association instanceof OneToOneAssociationMetadata && ! $targetAssociation instanceof OneToOneAssociationMetadata) { $message = "If association %s#%s is one-to-one, then the inversed side %s#%s has to be one-to-one as well."; @@ -307,7 +316,7 @@ function (JoinColumnMetadata $joinColumn) { continue; } - $targetAssociation = $targetMetadata->associationMappings[$orderField]; + $targetAssociation = $targetMetadata->getProperty($orderField); if ($targetAssociation instanceof ToManyAssociationMetadata) { $message = "The association %s#%s is ordered by a property '%s' on '%s' that is a collection-valued association."; @@ -316,7 +325,7 @@ function (JoinColumnMetadata $joinColumn) { continue; } - if (! $targetAssociation->isOwningSide()) { + if ($targetAssociation instanceof AssociationMetadata && ! $targetAssociation->isOwningSide()) { $message = "The association %s#%s is ordered by a property '%s' on '%s' that is the inverse side of an association."; $ce[] = sprintf($message, $class->name, $fieldName, $orderField, $targetMetadata->name); diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index e504fac4a71..20dfe875cae 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -38,12 +38,14 @@ use Doctrine\ORM\Mapping\ChangeTrackingPolicy; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FetchMode; +use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; +use Doctrine\ORM\Mapping\Property; use Doctrine\ORM\Mapping\Reflection\ReflectionPropertiesGetter; use Doctrine\ORM\Mapping\ToManyAssociationMetadata; use Doctrine\ORM\Mapping\ToOneAssociationMetadata; @@ -596,13 +598,10 @@ public function computeChangeSet(ClassMetadata $class, $entity) $actualData = []; - // @todo guilhermeblanco Remove the array_merge once properties and associationMappings get merged - $properties = array_merge($class->getProperties(), $class->associationMappings); - - foreach ($properties as $name => $property) { + foreach ($class->getProperties() as $name => $property) { $value = $property->getValue($entity); - if ($class->isCollectionValuedAssociation($name) && $value !== null) { + if ($property instanceof ToManyAssociationMetadata && $value !== null) { if ($value instanceof PersistentCollection) { if ($value->getOwner() === $entity) { continue; @@ -643,15 +642,10 @@ public function computeChangeSet(ClassMetadata $class, $entity) $changeSet = []; foreach ($actualData as $propName => $actualValue) { - if ( ! isset($class->associationMappings[$propName])) { - $changeSet[$propName] = [null, $actualValue]; - - continue; - } - - $association = $class->associationMappings[$propName]; + $property = $class->getProperty($propName); - if ($association->isOwningSide() && $association instanceof ToOneAssociationMetadata) { + if (($property instanceof FieldMetadata) || + ($property instanceof ToOneAssociationMetadata && $property->isOwningSide())) { $changeSet[$propName] = [null, $actualValue]; } } @@ -679,18 +673,7 @@ public function computeChangeSet(ClassMetadata $class, $entity) continue; } - // if regular field - if ( ! isset($class->associationMappings[$propName])) { - if ($isChangeTrackingNotify) { - continue; - } - - $changeSet[$propName] = [$orgValue, $actualValue]; - - continue; - } - - $association = $class->associationMappings[$propName]; + $property = $class->getProperty($propName); // Persistent collection was exchanged with the "originally" // created one. This can only mean it was cloned and replaced @@ -699,42 +682,58 @@ public function computeChangeSet(ClassMetadata $class, $entity) $owner = $actualValue->getOwner(); if ($owner === null) { // cloned - $actualValue->setOwner($entity, $association); + $actualValue->setOwner($entity, $property); } else if ($owner !== $entity) { // no clone, we have to fix - if (!$actualValue->isInitialized()) { + if (! $actualValue->isInitialized()) { $actualValue->initialize(); // we have to do this otherwise the cols share state } $newValue = clone $actualValue; - $newValue->setOwner($entity, $association); + $newValue->setOwner($entity, $property); - $association->setValue($entity, $newValue); + $property->setValue($entity, $newValue); } } - if ($orgValue instanceof PersistentCollection) { - // A PersistentCollection was de-referenced, so delete it. - $coid = spl_object_hash($orgValue); + switch (true) { + case ($property instanceof FieldMetadata): + if ($isChangeTrackingNotify) { + // Continue inside switch behaves as break. + // We are required to use continue 2, since we need to continue to next $actualData item + continue 2; + } - if (isset($this->collectionDeletions[$coid])) { - continue; - } + $changeSet[$propName] = [$orgValue, $actualValue]; + break; - $this->collectionDeletions[$coid] = $orgValue; - $changeSet[$propName] = $orgValue; // Signal changeset, to-many assocs will be ignored. + case ($property instanceof ToOneAssociationMetadata): + if ($property->isOwningSide()) { + $changeSet[$propName] = [$orgValue, $actualValue]; + } - continue; - } + if ($orgValue !== null && $property->isOrphanRemoval()) { + $this->scheduleOrphanRemoval($orgValue); + } - if ($association instanceof ToOneAssociationMetadata) { - if ($association->isOwningSide()) { - $changeSet[$propName] = [$orgValue, $actualValue]; - } + break; - if ($orgValue !== null && $association->isOrphanRemoval()) { - $this->scheduleOrphanRemoval($orgValue); - } + case ($property instanceof ToManyAssociationMetadata): + // Check if original value exists + if ($orgValue instanceof PersistentCollection) { + // A PersistentCollection was de-referenced, so delete it. + $coid = spl_object_hash($orgValue); + + if (!isset($this->collectionDeletions[$coid])) { + $this->collectionDeletions[$coid] = $orgValue; + $changeSet[$propName] = $orgValue; // Signal changeset, to-many associations will be ignored + } + } + + break; + + default: + // Do nothing } } @@ -746,17 +745,17 @@ public function computeChangeSet(ClassMetadata $class, $entity) } // Look for changes in associations of the entity - foreach ($class->associationMappings as $field => $association) { - if (($value = $association->getValue($entity)) === null) { + foreach ($class->getProperties() as $property) { + if (! ($property instanceof AssociationMetadata) || ($value = $property->getValue($entity)) === null) { continue; } - $this->computeAssociationChanges($association, $value); + $this->computeAssociationChanges($property, $value); - if ($association instanceof ManyToManyAssociationMetadata && + if ($property instanceof ManyToManyAssociationMetadata && $value instanceof PersistentCollection && ! isset($this->entityChangeSets[$oid]) && - $association->isOwningSide() && + $property->isOwningSide() && $value->isDirty()) { $this->entityChangeSets[$oid] = []; @@ -968,10 +967,7 @@ public function recomputeSingleEntityChangeSet(ClassMetadata $class, $entity) $actualData = []; - // @todo guilhermeblanco Remove the array_merge once properties and associationMappings get merged - $properties = array_merge($class->getProperties(), $class->associationMappings); - - foreach ($properties as $name => $property) { + foreach ($class->getProperties() as $name => $property) { if ((! $property->isPrimaryKey() || $class->generatorType !== GeneratorType::IDENTITY) && ($class->versionProperty === null || $name !== $class->versionProperty->getName()) && ! $class->isCollectionValuedAssociation($name)) { @@ -1132,15 +1128,15 @@ private function executeDeletions($class) // is obtained by a new entity because the old one went out of scope. //$this->entityStates[$oid] = self::STATE_NEW; if ($class->generatorType !== GeneratorType::NONE) { - if (($property = $class->getProperty($class->getSingleIdentifierFieldName())) === null) { - $property = $class->associationMappings[$class->getSingleIdentifierFieldName()]; - } + $property = $class->getProperty($class->getSingleIdentifierFieldName()); $property->setValue($entity, null); } if ($invoke !== ListenersInvoker::INVOKE_NONE) { - $this->listenersInvoker->invoke($class, Events::postRemove, $entity, new LifecycleEventArgs($entity, $this->em), $invoke); + $eventArgs = new LifecycleEventArgs($entity, $this->em); + + $this->listenersInvoker->invoke($class, Events::postRemove, $entity, $eventArgs, $invoke); } } } @@ -1181,12 +1177,12 @@ private function getCommitOrder(array $entityChangeSet = null) // Calculate dependencies for new nodes while ($class = array_pop($newNodes)) { - foreach ($class->associationMappings as $association) { - if (! ($association->isOwningSide() && $association instanceof ToOneAssociationMetadata)) { + foreach ($class->getProperties() as $property) { + if (! ($property instanceof ToOneAssociationMetadata && $property->isOwningSide())) { continue; } - $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); if ( ! $calc->hasNode($targetClass->name)) { $calc->addNode($targetClass->name, $targetClass); @@ -1196,7 +1192,7 @@ private function getCommitOrder(array $entityChangeSet = null) $weight = count( array_filter( - $association->getJoinColumns(), + $property->getJoinColumns(), function (JoinColumnMetadata $joinColumn) { return $joinColumn->isNullable(); } ) ) === 0; @@ -1984,7 +1980,7 @@ private function updateAssociationWithMergedEntity( if ($association instanceof OneToManyAssociationMetadata) { $targetClass = $this->em->getClassMetadata(get_class($entity)); - $inverseAssociation = $targetClass->associationMappings[$association->getMappedBy()]; + $inverseAssociation = $targetClass->getProperty($association->getMappedBy()); $inverseAssociation->setValue($managedCopy, $previousManagedCopy); } @@ -2110,14 +2106,15 @@ private function doRefresh($entity, array &$visited) */ private function cascadeRefresh($entity, array &$visited) { - $class = $this->em->getClassMetadata(get_class($entity)); - - $associationMappings = array_filter( - $class->associationMappings, - function (AssociationMetadata $association) { return in_array('refresh', $association->getCascade()); } + $class = $this->em->getClassMetadata(get_class($entity)); + $associations = array_filter( + $class->getProperties(), + function (Property $property) { + return $property instanceof AssociationMetadata && in_array('refresh', $property->getCascade()); + } ); - foreach ($associationMappings as $association) { + foreach ($associations as $association) { $relatedEntities = $association->getValue($entity); switch (true) { @@ -2153,14 +2150,15 @@ function (AssociationMetadata $association) { return in_array('refresh', $associ */ private function cascadeDetach($entity, array &$visited) { - $class = $this->em->getClassMetadata(get_class($entity)); - - $associationMappings = array_filter( - $class->associationMappings, - function (AssociationMetadata $association) { return in_array('detach', $association->getCascade()); } + $class = $this->em->getClassMetadata(get_class($entity)); + $associations = array_filter( + $class->getProperties(), + function (Property $property) { + return $property instanceof AssociationMetadata && in_array('detach', $property->getCascade()); + } ); - foreach ($associationMappings as $association) { + foreach ($associations as $association) { $relatedEntities = $association->getValue($entity); switch (true) { @@ -2197,14 +2195,15 @@ function (AssociationMetadata $association) { return in_array('detach', $associa */ private function cascadeMerge($entity, $managedCopy, array &$visited) { - $class = $this->em->getClassMetadata(get_class($entity)); - - $associationMappings = array_filter( - $class->associationMappings, - function (AssociationMetadata $association) { return in_array('merge', $association->getCascade()); } + $class = $this->em->getClassMetadata(get_class($entity)); + $associations = array_filter( + $class->getProperties(), + function (Property $property) { + return $property instanceof AssociationMetadata && in_array('merge', $property->getCascade()); + } ); - foreach ($associationMappings as $association) { + foreach ($associations as $association) { /** @var AssociationMetadata $association */ $relatedEntities = $association->getValue($entity); @@ -2237,14 +2236,15 @@ function (AssociationMetadata $association) { return in_array('merge', $associat */ private function cascadePersist($entity, array &$visited) { - $class = $this->em->getClassMetadata(get_class($entity)); - - $associationMappings = array_filter( - $class->associationMappings, - function ($association) { return in_array('persist', $association->getCascade()); } + $class = $this->em->getClassMetadata(get_class($entity)); + $associations = array_filter( + $class->getProperties(), + function (Property $property) { + return $property instanceof AssociationMetadata && in_array('persist', $property->getCascade()); + } ); - foreach ($associationMappings as $association) { + foreach ($associations as $association) { /** @var AssociationMetadata $association */ $relatedEntities = $association->getValue($entity); $targetEntity = $association->getTargetEntity(); @@ -2299,16 +2299,16 @@ function ($association) { return in_array('persist', $association->getCascade()) */ private function cascadeRemove($entity, array &$visited) { - $class = $this->em->getClassMetadata(get_class($entity)); - - $associationMappings = array_filter( - $class->associationMappings, - function ($association) { return in_array('remove', $association->getCascade()); } - ); - $entitiesToCascade = []; + $class = $this->em->getClassMetadata(get_class($entity)); + $associations = array_filter( + $class->getProperties(), + function (Property $property) { + return $property instanceof AssociationMetadata && in_array('remove', $property->getCascade()); + } + ); - foreach ($associationMappings as $association) { + foreach ($associations as $association) { if ($entity instanceof Proxy && !$entity->__isInitialized__) { $entity->__load(); } @@ -2563,9 +2563,7 @@ public function createEntity($className, array $data, &$hints = []) // Therefore we clear its identifier. Also, we must re-fetch metadata since the // refreshed object may be anything foreach ($class->identifier as $fieldName) { - if (($property = $class->getProperty($fieldName)) === null) { - $property = $class->associationMappings[$fieldName]; - } + $property = $class->getProperty($fieldName); $property->setValue($unmanagedProxy, null); } @@ -2620,7 +2618,9 @@ public function createEntity($className, array $data, &$hints = []) } foreach ($data as $field => $value) { - if (($property = $class->getProperty($field)) !== null) { + $property = $class->getProperty($field); + + if ($property instanceof FieldMetadata) { $property->setValue($entity, $value); } } @@ -2637,7 +2637,11 @@ public function createEntity($className, array $data, &$hints = []) return $entity; } - foreach ($class->associationMappings as $field => $association) { + foreach ($class->getProperties() as $field => $association) { + if (! ($association instanceof AssociationMetadata)) { + continue; + } + // Check if the association is not among the fetch-joined associations already. if (isset($hints['fetchAlias']) && isset($hints['fetched'][$hints['fetchAlias']][$field])) { continue; @@ -2685,7 +2689,7 @@ public function createEntity($className, array $data, &$hints = []) // use the given entity association if (isset($data[$field]) && is_object($data[$field]) && isset($this->entityStates[spl_object_hash($data[$field])])) { - $inverseAssociation = $targetClass->associationMappings[$association->getMappedBy()]; + $inverseAssociation = $targetClass->getProperty($association->getMappedBy()); $association->setValue($entity, $data[$field]); $inverseAssociation->setValue($data[$field], $entity); @@ -2811,7 +2815,7 @@ public function createEntity($className, array $data, &$hints = []) $association->setValue($entity, $newValue); if ($association->getInversedBy() && $association instanceof OneToOneAssociationMetadata) { - $inverseAssociation = $targetClass->associationMappings[$association->getInversedBy()]; + $inverseAssociation = $targetClass->getProperty($association->getInversedBy()); $inverseAssociation->setValue($newValue, $entity); } @@ -3156,14 +3160,14 @@ public function clearEntityChangeSet($oid) */ public function propertyChanged($entity, $propertyName, $oldValue, $newValue) { - $oid = spl_object_hash($entity); - $class = $this->em->getClassMetadata(get_class($entity)); - $isAssocField = isset($class->associationMappings[$propertyName]); + $class = $this->em->getClassMetadata(get_class($entity)); - if ( ! $isAssocField && ! $class->getProperty($propertyName)) { + if (! $class->getProperty($propertyName)) { return; // ignore non-persistent fields } + $oid = spl_object_hash($entity); + // Update changeset and mark entity for synchronization $this->entityChangeSets[$oid][$propertyName] = [$oldValue, $newValue]; @@ -3398,89 +3402,106 @@ private function mergeEntityStateIntoManagedCopy($entity, $managedCopy) $class = $this->em->getClassMetadata(get_class($entity)); - foreach ($this->reflectionPropertiesGetter->getProperties($class->name) as $prop) { - $name = $prop->name; + foreach ($this->reflectionPropertiesGetter->getProperties($class->name) as $reflectionProperty) { + $name = $reflectionProperty->name; - $prop->setAccessible(true); + $reflectionProperty->setAccessible(true); - if ( ! isset($class->associationMappings[$name])) { - if ( ! $class->isIdentifier($name)) { - $prop->setValue($managedCopy, $prop->getValue($entity)); - } - } else { - $assoc2 = $class->associationMappings[$name]; + $property = $class->getProperty($name); + + switch (true) { + case ($property instanceof FieldMetadata): + if (! $property->isPrimaryKey()) { + $property->setValue($managedCopy, $property->getValue($entity)); + } + + break; + + case ($property instanceof ToOneAssociationMetadata): + $other = $property->getValue($entity); - if ($assoc2 instanceof ToOneAssociationMetadata) { - $other = $prop->getValue($entity); if ($other === null) { - $prop->setValue($managedCopy, null); - } else { - if ($other instanceof Proxy && !$other->__isInitialized()) { - // do not merge fields marked lazy that have not been fetched. - continue; - } + $property->setValue($managedCopy, null); + + // Just break out of switch statement to continue execution + break; + } - if (! in_array('merge', $assoc2->getCascade())) { - if ($this->getEntityState($other) === self::STATE_DETACHED) { - $targetEntity = $assoc2->getTargetEntity(); - $targetClass = $this->em->getClassMetadata($targetEntity); - $relatedId = $targetClass->getIdentifierValues($other); + if ($other instanceof Proxy && ! $other->__isInitialized()) { + // Do not merge fields marked lazy that have not been fetched. + // Skip to next foreach element + continue 2; + } - if ($targetClass->subClasses) { - $other = $this->em->find($targetClass->name, $relatedId); - } else { - $other = $this->em->getProxyFactory()->getProxy($targetEntity, $relatedId); + if (! in_array('merge', $property->getCascade())) { + if ($this->getEntityState($other) === self::STATE_DETACHED) { + $targetEntity = $property->getTargetEntity(); + $targetClass = $this->em->getClassMetadata($targetEntity); + $relatedId = $targetClass->getIdentifierValues($other); - $this->registerManaged($other, $relatedId, []); - } - } + if ($targetClass->subClasses) { + $other = $this->em->find($targetClass->name, $relatedId); + } else { + $other = $this->em->getProxyFactory()->getProxy($targetEntity, $relatedId); - $prop->setValue($managedCopy, $other); + $this->registerManaged($other, $relatedId, []); + } } + + $property->setValue($managedCopy, $other); } - } else { - $mergeCol = $prop->getValue($entity); + + break; + + case ($property instanceof ToManyAssociationMetadata): + $mergeCol = $property->getValue($entity); if ($mergeCol instanceof PersistentCollection && ! $mergeCol->isInitialized()) { // do not merge fields marked lazy that have not been fetched. // keep the lazy persistent collection of the managed copy. - continue; + continue 2; } - $managedCol = $prop->getValue($managedCopy); + $managedCol = $property->getValue($managedCopy); - if ( ! $managedCol) { - $managedCol = new PersistentCollection( - $this->em, - $this->em->getClassMetadata($assoc2->getTargetEntity()), - new ArrayCollection - ); - $managedCol->setOwner($managedCopy, $assoc2); - $prop->setValue($managedCopy, $managedCol); + if (! $managedCol) { + $targetEntity = $property->getTargetEntity(); + $targetClass = $this->em->getClassMetadata($targetEntity); + $managedCol = new PersistentCollection($this->em, $targetClass, new ArrayCollection()); + + $managedCol->setOwner($managedCopy, $property); + + $property->setValue($managedCopy, $managedCol); } - if (in_array('merge', $assoc2->getCascade())) { + if (in_array('merge', $property->getCascade())) { $managedCol->initialize(); // clear and set dirty a managed collection if its not also the same collection to merge from. - if ( ! $managedCol->isEmpty() && $managedCol !== $mergeCol) { + if (! $managedCol->isEmpty() && $managedCol !== $mergeCol) { $managedCol->unwrap()->clear(); $managedCol->setDirty(true); - if ($assoc2->isOwningSide() - && $assoc2 instanceof ManyToManyAssociationMetadata - && $class->changeTrackingPolicy === ChangeTrackingPolicy::NOTIFY - ) { + if ($property instanceof ManyToManyAssociationMetadata && + $property->isOwningSide() && + $class->changeTrackingPolicy === ChangeTrackingPolicy::NOTIFY) { $this->scheduleForSynchronization($managedCopy); } } } - } + + break; + + default: + // Non-persistent properties are handled here. Copy them as-is + $reflectionProperty->setValue($managedCopy, $reflectionProperty->getValue($entity)); + + break; } if ($class->changeTrackingPolicy === ChangeTrackingPolicy::NOTIFY) { // Just treat all properties as changed, there is no other choice. - $this->propertyChanged($managedCopy, $name, null, $prop->getValue($managedCopy)); + $this->propertyChanged($managedCopy, $name, null, $property->getValue($managedCopy)); } } } diff --git a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php index 33848dbf2bc..d966b2bbcfd 100644 --- a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php +++ b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php @@ -19,6 +19,7 @@ namespace Doctrine\ORM\Utility; +use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\UnitOfWork; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Common\Persistence\Mapping\ClassMetadataFactory; @@ -71,17 +72,17 @@ public function flattenIdentifier(ClassMetadata $class, array $id) $flatId = []; foreach ($class->identifier as $field) { - if (!isset($class->associationMappings[$field])) { + $property = $class->getProperty($field); + + if ($property instanceof FieldMetadata) { $flatId[$field] = $id[$field]; continue; } - $association = $class->associationMappings[$field]; - if (isset($id[$field]) && is_object($id[$field])) { /* @var $targetClassMetadata ClassMetadata */ - $targetClassMetadata = $this->metadataFactory->getMetadataFor($association->getTargetEntity()); + $targetClassMetadata = $this->metadataFactory->getMetadataFor($property->getTargetEntity()); $identifiers = $this->unitOfWork->isInIdentityMap($id[$field]) ? $this->unitOfWork->getEntityIdentifier($id[$field]) : $targetClassMetadata->getIdentifierValues($id[$field]); @@ -94,7 +95,7 @@ public function flattenIdentifier(ClassMetadata $class, array $id) $associatedId = []; - foreach ($association->getJoinColumns() as $joinColumn) { + foreach ($property->getJoinColumns() as $joinColumn) { $associatedId[] = $id[$joinColumn->getColumnName()]; } diff --git a/lib/Doctrine/ORM/Utility/PersisterHelper.php b/lib/Doctrine/ORM/Utility/PersisterHelper.php index 55ec895983e..b3ac8bd8d26 100644 --- a/lib/Doctrine/ORM/Utility/PersisterHelper.php +++ b/lib/Doctrine/ORM/Utility/PersisterHelper.php @@ -22,7 +22,9 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; use Doctrine\ORM\Query\QueryException; @@ -47,26 +49,27 @@ class PersisterHelper */ public static function getTypeOfField($fieldName, ClassMetadata $class, EntityManagerInterface $em) { - if (($property = $class->getProperty($fieldName)) !== null) { - return [$property->getType()]; - } + $property = $class->getProperty($fieldName); - if ( ! isset($class->associationMappings[$fieldName])) { + if (! $property) { return []; } - $association = $class->associationMappings[$fieldName]; - $targetEntity = $association->getTargetEntity(); + if ($property instanceof FieldMetadata) { + return [$property->getType()]; + } + + $targetEntity = $property->getTargetEntity(); $targetClass = $em->getClassMetadata($targetEntity); - if (! $association->isOwningSide()) { - return self::getTypeOfField($association->getMappedBy(), $targetClass, $em); + if (! $property->isOwningSide()) { + return self::getTypeOfField($property->getMappedBy(), $targetClass, $em); } $types = []; - $joinColumns = $association instanceof ManyToManyAssociationMetadata - ? $association->getJoinTable()->getJoinColumns() - : $association->getJoinColumns(); + $joinColumns = $property instanceof ManyToManyAssociationMetadata + ? $property->getJoinTable()->getJoinColumns() + : $property->getJoinColumns(); foreach ($joinColumns as $joinColumn) { $types[] = self::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $em); @@ -88,19 +91,24 @@ public static function getTypeOfColumn($columnName, ClassMetadata $class, Entity { if (isset($class->fieldNames[$columnName])) { $fieldName = $class->fieldNames[$columnName]; + $property = $class->getProperty($fieldName); - if (($property = $class->getProperty($fieldName)) !== null) { + if ($property instanceof FieldMetadata) { return $property->getType(); } } // iterate over association mappings - foreach ($class->associationMappings as $association) { + foreach ($class->getProperties() as $association) { + if (! ($association instanceof AssociationMetadata)) { + continue; + } + // resolve join columns over to-one or to-many - $targetClass = $em->getClassMetadata($association->getTargetEntity()); + $targetClass = $em->getClassMetadata($association->getTargetEntity()); if (! $association->isOwningSide()) { - $association = $targetClass->associationMappings[$association->getMappedBy()]; + $association = $targetClass->getProperty($association->getMappedBy()); $targetClass = $em->getClassMetadata($association->getTargetEntity()); } diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php index 8debca5eeca..b196da194aa 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php @@ -150,7 +150,7 @@ public function testBuildCachedCollectionPersisterReadOnly() { $em = $this->em; $metadata = clone $em->getClassMetadata(State::class); - $association = $metadata->associationMappings['cities']; + $association = $metadata->getProperty('cities'); $persister = new OneToManyPersister($em); $region = new ConcurrentRegionMock( new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl()) @@ -176,7 +176,7 @@ public function testBuildCachedCollectionPersisterReadWrite() { $em = $this->em; $metadata = clone $em->getClassMetadata(State::class); - $association = $metadata->associationMappings['cities']; + $association = $metadata->getProperty('cities'); $persister = new OneToManyPersister($em); $region = new ConcurrentRegionMock( new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl()) @@ -201,7 +201,7 @@ public function testBuildCachedCollectionPersisterNonStrictReadWrite() { $em = $this->em; $metadata = clone $em->getClassMetadata(State::class); - $association = $metadata->associationMappings['cities']; + $association = $metadata->getProperty('cities'); $persister = new OneToManyPersister($em); $region = new ConcurrentRegionMock( new DefaultRegion('regionName', $this->getSharedSecondLevelCacheDriverImpl()) @@ -285,7 +285,7 @@ public function testBuildCachedCollectionPersisterException() { $em = $this->em; $metadata = clone $em->getClassMetadata(State::class); - $association = $metadata->associationMappings['cities']; + $association = $metadata->getProperty('cities'); $persister = new OneToManyPersister($em); $association->setCache( diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php index c50667503b5..868f8d86dd1 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php @@ -64,7 +64,7 @@ private function putCollectionCacheEntry($className, $association, array $ownerI $metadata = $this->em->getClassMetadata($className); $cacheKey = new CollectionCacheKey($metadata->name, $association, $ownerIdentifier); $cacheEntry = new CollectionCacheEntry($data); - $persister = $this->em->getUnitOfWork()->getCollectionPersister($metadata->associationMappings[$association]); + $persister = $this->em->getUnitOfWork()->getCollectionPersister($metadata->getProperty($association)); $persister->getCacheRegion()->put($cacheKey, $cacheEntry); } diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php index 21f7ff373a6..2258a80d7b5 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php @@ -109,7 +109,7 @@ protected function createCollection($owner, $assoc = null, $class = null, $eleme { $em = $this->em; $class = $class ?: $this->em->getClassMetadata(State::class); - $assoc = $assoc ?: $class->associationMappings['cities']; + $assoc = $assoc ?: $class->getProperty('cities'); $coll = new PersistentCollection($em, $class, $elements ?: new ArrayCollection); $coll->setOwner($owner, $assoc); @@ -120,7 +120,7 @@ protected function createCollection($owner, $assoc = null, $class = null, $eleme protected function createPersisterDefault() { - $assoc = $this->em->getClassMetadata(State::class)->associationMappings['cities']; + $assoc = $this->em->getClassMetadata(State::class)->getProperty('cities'); return $this->createPersister($this->em, $this->collectionPersister, $this->region, $assoc); } diff --git a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php index 9ea8941f095..5cf47545216 100644 --- a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php @@ -910,10 +910,10 @@ public function testMergeNonPersistedProperties() $user->nonPersistedPropertyObject = new CmsPhonenumber(); $managedUser = $this->em->merge($user); + self::assertEquals('test', $managedUser->nonPersistedProperty); self::assertSame($user->nonPersistedProperty, $managedUser->nonPersistedProperty); self::assertSame($user->nonPersistedPropertyObject, $managedUser->nonPersistedPropertyObject); - self::assertTrue($user !== $managedUser); self::assertTrue($this->em->contains($managedUser)); @@ -922,6 +922,7 @@ public function testMergeNonPersistedProperties() $this->em->clear(); $user2 = $this->em->find(get_class($managedUser), $userId); + self::assertNull($user2->nonPersistedProperty); self::assertNull($user2->nonPersistedPropertyObject); self::assertEquals('active', $user2->status); diff --git a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php index 26cb901832d..8f42ae20d95 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php @@ -6,6 +6,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Platforms\PostgreSqlPlatform; +use Doctrine\ORM\Mapping\ManyToOneAssociationMetadata; class DatabaseDriverTest extends DatabaseDriverTestCase { @@ -45,7 +46,7 @@ public function testIssue2059() $metadata = $this->convertToClassMetadata([$project, $user], []); self::assertNotNull($metadata['Ddc2059Project']->getProperty('user')); - self::assertTrue(isset($metadata['Ddc2059Project']->associationMappings['user2'])); + self::assertNotNull($metadata['Ddc2059Project']->getProperty('user2')); } public function testLoadMetadataFromDatabase() @@ -115,10 +116,8 @@ public function testLoadMetadataWithForeignKeyFromDatabase() self::assertNull($bazMetadata->getProperty('barId'), "The foreign Key field should not be inflected, as 'barId' field is an association."); self::assertNotNull($bazMetadata->getProperty('id')); - $bazMetadata->associationMappings = \array_change_key_case($bazMetadata->associationMappings, \CASE_LOWER); - - self::assertArrayHasKey('bar', $bazMetadata->associationMappings); - self::assertEquals(ClassMetadata::MANY_TO_ONE, $bazMetadata->associationMappings['bar']['type']); + self::assertArrayHasKey('bar', $bazMetadata->getProperties()); + self::assertInstanceOf(ManyToOneAssociationMetadata::class, $bazMetadata->getProperty('bar')); } public function testDetectManyToManyTables() @@ -133,12 +132,12 @@ public function testDetectManyToManyTables() self::assertArrayHasKey('CmsGroups', $metadatas, 'CmsGroups entity was not detected.'); self::assertArrayHasKey('CmsTags', $metadatas, 'CmsTags entity was not detected.'); - self::assertEquals(3, count($metadatas['CmsUsers']->associationMappings)); - self::assertArrayHasKey('group', $metadatas['CmsUsers']->associationMappings); - self::assertEquals(1, count($metadatas['CmsGroups']->associationMappings)); - self::assertArrayHasKey('user', $metadatas['CmsGroups']->associationMappings); - self::assertEquals(1, count($metadatas['CmsTags']->associationMappings)); - self::assertArrayHasKey('user', $metadatas['CmsGroups']->associationMappings); + self::assertCount(3, $metadatas['CmsUsers']->getProperties()); + self::assertArrayHasKey('group', $metadatas['CmsUsers']->getProperties()); + self::assertCount(1, $metadatas['CmsGroups']->getProperties()); + self::assertArrayHasKey('user', $metadatas['CmsGroups']->getProperties()); + self::assertCount(1, $metadatas['CmsTags']->getProperties()); + self::assertArrayHasKey('user', $metadatas['CmsGroups']->getProperties()); } public function testIgnoreManyToManyTableWithoutFurtherForeignKeyDetails() @@ -158,7 +157,7 @@ public function testIgnoreManyToManyTableWithoutFurtherForeignKeyDetails() $metadatas = $this->convertToClassMetadata([$tableA, $tableB], [$tableMany]); - self::assertEquals(0, count($metadatas['DbdriverBaz']->associationMappings), "no association mappings should be detected."); + self::assertCount(1, $metadatas['DbdriverBaz']->getProperties(), "no association mappings should be detected."); } public function testLoadMetadataFromDatabaseDetail() diff --git a/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php index 42cbb466926..d0b10c2f7e2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php @@ -43,23 +43,23 @@ public function setUp() $class = $this->em->getClassMetadata(CmsUser::class); - $class->associationMappings['groups']->setFetchMode(FetchMode::EXTRA_LAZY); - $class->associationMappings['articles']->setFetchMode(FetchMode::EXTRA_LAZY); - $class->associationMappings['phonenumbers']->setFetchMode(FetchMode::EXTRA_LAZY); + $class->getProperty('groups')->setFetchMode(FetchMode::EXTRA_LAZY); + $class->getProperty('articles')->setFetchMode(FetchMode::EXTRA_LAZY); + $class->getProperty('phonenumbers')->setFetchMode(FetchMode::EXTRA_LAZY); - $class->associationMappings['groups']->setIndexedBy('name'); - $class->associationMappings['articles']->setIndexedBy('topic'); - $class->associationMappings['phonenumbers']->setIndexedBy('phonenumber'); + $class->getProperty('groups')->setIndexedBy('name'); + $class->getProperty('articles')->setIndexedBy('topic'); + $class->getProperty('phonenumbers')->setIndexedBy('phonenumber'); - $class->associationMappings['groups']->setCache(null); - $class->associationMappings['articles']->setCache(null); - $class->associationMappings['phonenumbers']->setCache(null); + $class->getProperty('groups')->setCache(null); + $class->getProperty('articles')->setCache(null); + $class->getProperty('phonenumbers')->setCache(null); $class = $this->em->getClassMetadata(CmsGroup::class); - $class->associationMappings['users']->setFetchMode(FetchMode::EXTRA_LAZY); + $class->getProperty('users')->setFetchMode(FetchMode::EXTRA_LAZY); - $class->associationMappings['users']->setIndexedBy('username'); + $class->getProperty('users')->setIndexedBy('username'); $this->loadFixture(); } @@ -70,19 +70,19 @@ public function tearDown() $class = $this->em->getClassMetadata(CmsUser::class); - $class->associationMappings['groups']->setFetchMode(FetchMode::LAZY); - $class->associationMappings['articles']->setFetchMode(FetchMode::LAZY); - $class->associationMappings['phonenumbers']->setFetchMode(FetchMode::LAZY); + $class->getProperty('groups')->setFetchMode(FetchMode::LAZY); + $class->getProperty('articles')->setFetchMode(FetchMode::LAZY); + $class->getProperty('phonenumbers')->setFetchMode(FetchMode::LAZY); - $class->associationMappings['groups']->setIndexedBy(null); - $class->associationMappings['articles']->setIndexedBy(null); - $class->associationMappings['phonenumbers']->setIndexedBy(null); + $class->getProperty('groups')->setIndexedBy(null); + $class->getProperty('articles')->setIndexedBy(null); + $class->getProperty('phonenumbers')->setIndexedBy(null); $class = $this->em->getClassMetadata(CmsGroup::class); - $class->associationMappings['users']->setFetchMode(FetchMode::LAZY); + $class->getProperty('users')->setFetchMode(FetchMode::LAZY); - $class->associationMappings['users']->setIndexedBy(null); + $class->getProperty('users')->setIndexedBy(null); } /** @@ -859,7 +859,7 @@ public function testContainsKeyIndexByOneToMany() public function testContainsKeyIndexByOneToManyJoinedInheritance() { $class = $this->em->getClassMetadata(DDC2504OtherClass::class); - $class->associationMappings['childClasses']->setIndexedBy('id'); + $class->getProperty('childClasses')->setIndexedBy('id'); $otherClass = $this->em->find(DDC2504OtherClass::class, $this->ddc2504OtherClassId); @@ -903,7 +903,7 @@ public function testContainsKeyIndexByManyToManyNonOwning() public function testContainsKeyIndexByWithPkManyToMany() { $class = $this->em->getClassMetadata(CmsUser::class); - $class->associationMappings['groups']->setIndexedBy('id'); + $class->getProperty('groups')->setIndexedBy('id'); $user = $this->em->find(CmsUser::class, $this->userId2); @@ -918,7 +918,7 @@ public function testContainsKeyIndexByWithPkManyToMany() public function testContainsKeyIndexByWithPkManyToManyNonOwning() { $class = $this->em->getClassMetadata(CmsGroup::class); - $class->associationMappings['users']->setIndexedBy('id'); + $class->getProperty('users')->setIndexedBy('id'); $group = $this->em->find(CmsGroup::class, $this->groupId); diff --git a/tests/Doctrine/Tests/ORM/Functional/ManyToManySelfReferentialAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/ManyToManySelfReferentialAssociationTest.php index aae8d686607..f4feb542be3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ManyToManySelfReferentialAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ManyToManySelfReferentialAssociationTest.php @@ -80,7 +80,7 @@ public function testLazyLoadsOwningSide() $this->createLoadingFixture(); $metadata = $this->em->getClassMetadata(ECommerceProduct::class); - $metadata->associationMappings['related']->setFetchMode(FetchMode::LAZY); + $metadata->getProperty('related')->setFetchMode(FetchMode::LAZY); $query = $this->em->createQuery('SELECT p FROM Doctrine\Tests\Models\ECommerce\ECommerceProduct p'); $products = $query->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php index 2d1c397d6a4..08c4a1aed00 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php @@ -86,7 +86,7 @@ public function testLazyLoadsCollection() { $this->createFixture(); $metadata = $this->em->getClassMetadata(ECommerceCart::class); - $metadata->associationMappings['products']->setFetchMode(FetchMode::LAZY); + $metadata->getProperty('products')->setFetchMode(FetchMode::LAZY); $query = $this->em->createQuery('SELECT c FROM Doctrine\Tests\Models\ECommerce\ECommerceCart c'); $result = $query->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToManySelfReferentialAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToManySelfReferentialAssociationTest.php index f88d6610ed6..a17aa865404 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToManySelfReferentialAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToManySelfReferentialAssociationTest.php @@ -91,7 +91,7 @@ public function testLazyLoadsOneToManyAssociation() { $this->createFixture(); $metadata = $this->em->getClassMetadata(ECommerceCategory::class); - $metadata->associationMappings['children']->setFetchMode(FetchMode::LAZY); + $metadata->getProperty('children')->setFetchMode(FetchMode::LAZY); $query = $this->em->createQuery('select c from Doctrine\Tests\Models\ECommerce\ECommerceCategory c order by c.id asc'); $result = $query->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneBidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneBidirectionalAssociationTest.php index 7d7d782b4f7..921a9e3a8dd 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneBidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneBidirectionalAssociationTest.php @@ -70,7 +70,7 @@ public function testEagerLoad() public function testLazyLoadsObjectsOnTheOwningSide() { $this->createFixture(); $metadata = $this->em->getClassMetadata(ECommerceCart::class); - $metadata->associationMappings['customer']->setFetchMode(FetchMode::LAZY); + $metadata->getProperty('customer')->setFetchMode(FetchMode::LAZY); $query = $this->em->createQuery('select c from Doctrine\Tests\Models\ECommerce\ECommerceCart c'); $result = $query->getResult(); @@ -84,7 +84,7 @@ public function testInverseSideIsNeverLazy() { $this->createFixture(); $metadata = $this->em->getClassMetadata(ECommerceCustomer::class); - $metadata->associationMappings['mentor']->setFetchMode(FetchMode::EAGER); + $metadata->getProperty('mentor')->setFetchMode(FetchMode::EAGER); $query = $this->em->createQuery('select c from Doctrine\Tests\Models\ECommerce\ECommerceCustomer c'); $result = $query->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneSelfReferentialAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneSelfReferentialAssociationTest.php index 45be7ad2ff7..9d59b0d091d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneSelfReferentialAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneSelfReferentialAssociationTest.php @@ -69,18 +69,18 @@ public function testEagerLoadsAssociation() /** * @group mine - * @return unknown_type */ public function testLazyLoadsAssociation() { $this->createFixture(); $metadata = $this->em->getClassMetadata(ECommerceCustomer::class); - $metadata->associationMappings['mentor']->setFetchMode(FetchMode::LAZY); + $metadata->getProperty('mentor')->setFetchMode(FetchMode::LAZY); $query = $this->em->createQuery("select c from Doctrine\Tests\Models\ECommerce\ECommerceCustomer c where c.name='Luke Skywalker'"); $result = $query->getResult(); $customer = $result[0]; + self::assertLoadingOfAssociation($customer); } diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php index bd693b11ef7..290e384f951 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToOneUnidirectionalAssociationTest.php @@ -63,7 +63,7 @@ public function _testEagerLoad() public function testLazyLoadsObjects() { $this->createFixture(); $metadata = $this->em->getClassMetadata(ECommerceProduct::class); - $metadata->associationMappings['shipping']->setFetchMode(FetchMode::LAZY); + $metadata->getProperty('shipping')->setFetchMode(FetchMode::LAZY); $query = $this->em->createQuery('select p from Doctrine\Tests\Models\ECommerce\ECommerceProduct p'); $result = $query->getResult(); diff --git a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php index e30e3071aba..fc5d2ecdbf6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php @@ -52,8 +52,8 @@ public function tearDown() parent::tearDown(); $class = $this->em->getClassMetadata(CmsUser::class); - $class->associationMappings['groups']->setFetchMode(FetchMode::LAZY); - $class->associationMappings['articles']->setFetchMode(FetchMode::LAZY); + $class->getProperty('groups')->setFetchMode(FetchMode::LAZY); + $class->getProperty('articles')->setFetchMode(FetchMode::LAZY); } public function testConfigureFilter() @@ -524,8 +524,8 @@ public function testWhereOrFilter() private function loadLazyFixtureData() { $class = $this->em->getClassMetadata(CmsUser::class); - $class->associationMappings['articles']->setFetchMode(FetchMode::EXTRA_LAZY); - $class->associationMappings['groups']->setFetchMode(FetchMode::EXTRA_LAZY); + $class->getProperty('articles')->setFetchMode(FetchMode::EXTRA_LAZY); + $class->getProperty('groups')->setFetchMode(FetchMode::EXTRA_LAZY); $this->loadFixtureData(); } diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheExtraLazyCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheExtraLazyCollectionTest.php index 6f1a2b53d3b..c357f9ec70d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheExtraLazyCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheExtraLazyCollectionTest.php @@ -20,8 +20,8 @@ public function setUp() $sourceEntity = $this->em->getClassMetadata(Travel::class); $targetEntity = $this->em->getClassMetadata(City::class); - $sourceEntity->associationMappings['visitedCities']->setFetchMode(FetchMode::EXTRA_LAZY); - $targetEntity->associationMappings['travels']->setFetchMode(FetchMode::EXTRA_LAZY); + $sourceEntity->getProperty('visitedCities')->setFetchMode(FetchMode::EXTRA_LAZY); + $targetEntity->getProperty('travels')->setFetchMode(FetchMode::EXTRA_LAZY); } public function tearDown() @@ -31,8 +31,8 @@ public function tearDown() $sourceEntity = $this->em->getClassMetadata(Travel::class); $targetEntity = $this->em->getClassMetadata(City::class); - $sourceEntity->associationMappings['visitedCities']->setFetchMode(FetchMode::LAZY); - $targetEntity->associationMappings['travels']->setFetchMode(FetchMode::LAZY); + $sourceEntity->getProperty('visitedCities')->setFetchMode(FetchMode::LAZY); + $targetEntity->getProperty('travels')->setFetchMode(FetchMode::LAZY); } public function testCacheCountAfterAddThenFlush() diff --git a/tests/Doctrine/Tests/ORM/Functional/StandardEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Functional/StandardEntityPersisterTest.php index 526a8cd8301..e4fa1a11e94 100644 --- a/tests/Doctrine/Tests/ORM/Functional/StandardEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/StandardEntityPersisterTest.php @@ -39,7 +39,7 @@ public function testAcceptsForeignKeysAsCriteria() $persister = $this->em->getUnitOfWork()->getEntityPersister(ECommerceCart::class); $newCart = new ECommerceCart(); $this->em->getUnitOfWork()->registerManaged($newCart, ['id' => $cardId], []); - $persister->load(['customer_id' => $customer->getId()], $newCart, $class->associationMappings['customer']); + $persister->load(['customer_id' => $customer->getId()], $newCart, $class->getProperty('customer')); self::assertEquals('Credit card', $newCart->getPayment()); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php index d06eeea0923..31c4f8f7962 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php @@ -24,9 +24,9 @@ public function setUp() $class = $this->em->getClassMetadata(Models\Legacy\LegacyUser::class); - $class->associationMappings['articles']->setFetchMode(FetchMode::EXTRA_LAZY); - $class->associationMappings['references']->setFetchMode(FetchMode::EXTRA_LAZY); - $class->associationMappings['cars']->setFetchMode(FetchMode::EXTRA_LAZY); + $class->getProperty('articles')->setFetchMode(FetchMode::EXTRA_LAZY); + $class->getProperty('references')->setFetchMode(FetchMode::EXTRA_LAZY); + $class->getProperty('cars')->setFetchMode(FetchMode::EXTRA_LAZY); $this->loadFixture(); } @@ -37,9 +37,9 @@ public function tearDown() $class = $this->em->getClassMetadata(Models\Legacy\LegacyUser::class); - $class->associationMappings['articles']->setFetchMode(FetchMode::LAZY); - $class->associationMappings['references']->setFetchMode(FetchMode::LAZY); - $class->associationMappings['cars']->setFetchMode(FetchMode::LAZY); + $class->getProperty('articles')->setFetchMode(FetchMode::LAZY); + $class->getProperty('references')->setFetchMode(FetchMode::LAZY); + $class->getProperty('cars')->setFetchMode(FetchMode::LAZY); } public function testCountNotInitializesLegacyCollection() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php index 394461ba5f4..eb6063b55f8 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php @@ -14,9 +14,10 @@ protected function setUp() { $this->oldMetadata = $this->em->getClassMetadata(CompanyEmployee::class); - $metadata = clone $this->oldMetadata; + $metadata = clone $this->oldMetadata; + $properties = $metadata->getProperties(); - ksort($metadata->associationMappings); + ksort($properties); $this->em->getMetadataFactory()->setMetadataFor(CompanyEmployee::class, $metadata); } @@ -24,6 +25,7 @@ protected function setUp() { public function tearDown() { $this->em->getMetadataFactory()->setMetadataFor(CompanyEmployee::class, $this->oldMetadata); + parent::tearDown(); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2074Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2074Test.php index 49176de388f..70198a0b0bf 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2074Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2074Test.php @@ -24,7 +24,7 @@ public function testShouldNotScheduleDeletionOnClonedInstances() $product = new ECommerceProduct(); $category = new ECommerceCategory(); $collection = new PersistentCollection($this->em, $class, new ArrayCollection([$category])); - $collection->setOwner($product, $class->associationMappings['categories']); + $collection->setOwner($product, $class->getProperty('categories')); $uow = $this->em->getUnitOfWork(); $clonedCollection = clone $collection; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php index 5bd5af1e07b..6266f4e26d1 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php @@ -66,8 +66,8 @@ public function testCascadeRemoveOnChildren() { $class = $this->em->getClassMetadata(DDC599Subitem::class); - self::assertArrayHasKey('children', $class->associationMappings); - self::assertContains('remove', $class->associationMappings['children']->getCascade()); + self::assertArrayHasKey('children', $class->getProperties()); + self::assertContains('remove', $class->getProperty('children')->getCascade()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php index 33774b0f899..bd97034b16d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\Tests\Models\CMS\CmsUser; use Doctrine\Tests\Models\CMS\CmsGroup; @@ -24,8 +25,12 @@ private function setCascadeMergeFor($class) { $metadata = $this->em->getMetadataFactory()->getMetaDataFor($class); - foreach ($metadata->associationMappings as $key => &$associationMapping) { - $associationMapping['cascade'] = ['merge']; + foreach ($metadata->getProperties() as $association) { + if (! ($association instanceof AssociationMetadata)) { + continue; + } + + $association->setCascade(['merge']); } } diff --git a/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php index 684ea8044fe..b1cfcf4a2f0 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php @@ -1035,7 +1035,7 @@ public function testCreatesProxyForLazyLoadingWithForeignKeys() // configuring lazy loading $metadata = $this->em->getClassMetadata(ECommerceProduct::class); - $metadata->associationMappings['shipping']->setFetchMode(FetchMode::LAZY); + $metadata->getProperty('shipping')->setFetchMode(FetchMode::LAZY); $stmt = new HydratorMockStatement($resultSet); $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); @@ -1084,7 +1084,7 @@ public function testCreatesProxyForLazyLoadingWithForeignKeysWithAliasedProductE // configuring lazy loading $metadata = $this->em->getClassMetadata(ECommerceProduct::class); - $metadata->associationMappings['shipping']->setFetchMode(FetchMode::LAZY); + $metadata->getProperty('shipping')->setFetchMode(FetchMode::LAZY); $stmt = new HydratorMockStatement($resultSet); $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index a9eef77e9b7..fa7cc6a6707 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -207,20 +207,21 @@ public function testEntityCustomGenerator() * @depends testEntityTableNameAndInheritance * @param ClassMetadata $class */ - public function testFieldMappings($class) + public function testProperties($class) { - self::assertEquals(4, count($class->getProperties())); + self::assertCount(7, $class->getProperties()); self::assertNotNull($class->getProperty('id')); self::assertNotNull($class->getProperty('name')); self::assertNotNull($class->getProperty('email')); self::assertNotNull($class->getProperty('version')); + self::assertNotNull($class->getProperty('version')); return $class; } /** - * @depends testFieldMappings + * @depends testProperties * @param ClassMetadata $class */ public function testVersionProperty($class) @@ -305,7 +306,7 @@ public function testIdFieldOptions($class) } /** - * @depends testFieldMappings + * @depends testProperties * @param ClassMetadata $class */ public function testIdentifier($class) @@ -342,25 +343,14 @@ public function testBooleanValuesForOptionIsSetCorrectly() } /** - * @depends testIdentifier - * @param ClassMetadata $class - */ - public function testAssociations($class) - { - self::assertEquals(3, count($class->associationMappings)); - - return $class; - } - - /** - * @depends testAssociations + * @depends testProperties * @param ClassMetadata $class */ public function testOwningOneToOneAssociation($class) { - self::assertArrayHasKey('address', $class->associationMappings); + self::assertArrayHasKey('address', $class->getProperties()); - $association = $class->associationMappings['address']; + $association = $class->getProperty('address'); self::assertTrue($association->isOwningSide()); self::assertEquals('user', $association->getInversedBy()); @@ -376,9 +366,9 @@ public function testOwningOneToOneAssociation($class) */ public function testInverseOneToManyAssociation($class) { - self::assertArrayHasKey('phonenumbers', $class->associationMappings); + self::assertArrayHasKey('phonenumbers', $class->getProperties()); - $association = $class->associationMappings['phonenumbers']; + $association = $class->getProperty('phonenumbers'); self::assertFalse($association->isOwningSide()); self::assertTrue($association->isOrphanRemoval()); @@ -398,9 +388,9 @@ public function testInverseOneToManyAssociation($class) */ public function testManyToManyAssociationWithCascadeAll($class) { - self::assertArrayHasKey('groups', $class->associationMappings); + self::assertArrayHasKey('groups', $class->getProperties()); - $association = $class->associationMappings['groups']; + $association = $class->getProperty('groups'); self::assertTrue($association->isOwningSide()); @@ -445,7 +435,7 @@ public function testLifecycleCallbacksSupportMultipleMethodNames($class) public function testJoinColumnUniqueAndNullable($class) { // Non-Nullability of Join Column - $association = $class->associationMappings['groups']; + $association = $class->getProperty('groups'); $joinTable = $association->getJoinTable(); $joinColumns = $joinTable->getJoinColumns(); $joinColumn = reset($joinColumns); @@ -465,7 +455,7 @@ public function testColumnDefinition($class) self::assertNotNull($class->getProperty('email')); $property = $class->getProperty('email'); - $association = $class->associationMappings['groups']; + $association = $class->getProperty('groups'); $joinTable = $association->getJoinTable(); $inverseJoinColumns = $joinTable->getInverseJoinColumns(); $inverseJoinColumn = reset($inverseJoinColumns); @@ -482,7 +472,7 @@ public function testColumnDefinition($class) */ public function testJoinColumnOnDelete($class) { - $association = $class->associationMappings['address']; + $association = $class->getProperty('address'); $joinColumns = $association->getJoinColumns(); $joinColumn = reset($joinColumns); @@ -783,11 +773,11 @@ public function testAssociationOverridesMapping() $guestMetadata = $factory->getMetadataFor(DDC964Guest::class); // assert groups association mappings - self::assertArrayHasKey('groups', $guestMetadata->associationMappings); - self::assertArrayHasKey('groups', $adminMetadata->associationMappings); + self::assertArrayHasKey('groups', $guestMetadata->getProperties()); + self::assertArrayHasKey('groups', $adminMetadata->getProperties()); - $guestGroups = $guestMetadata->associationMappings['groups']; - $adminGroups = $adminMetadata->associationMappings['groups']; + $guestGroups = $guestMetadata->getProperty('groups'); + $adminGroups = $adminMetadata->getProperty('groups'); // assert not override attributes self::assertEquals($guestGroups->getName(), $adminGroups->getName()); @@ -820,11 +810,11 @@ public function testAssociationOverridesMapping() self::assertEquals('admingroup_id', $adminGroupsInverseJoinColumn->getColumnName()); // assert address association mappings - self::assertArrayHasKey('address', $guestMetadata->associationMappings); - self::assertArrayHasKey('address', $adminMetadata->associationMappings); + self::assertArrayHasKey('address', $guestMetadata->getProperties()); + self::assertArrayHasKey('address', $adminMetadata->getProperties()); - $guestAddress = $guestMetadata->associationMappings['address']; - $adminAddress = $adminMetadata->associationMappings['address']; + $guestAddress = $guestMetadata->getProperty('address'); + $adminAddress = $adminMetadata->getProperty('address'); // assert not override attributes self::assertEquals($guestAddress->getName(), $adminAddress->getName()); @@ -856,9 +846,9 @@ public function testInversedByOverrideMapping() $adminMetadata = $factory->getMetadataFor(DDC3579Admin::class); // assert groups association mappings - self::assertArrayHasKey('groups', $adminMetadata->associationMappings); + self::assertArrayHasKey('groups', $adminMetadata->getProperties()); - $adminGroups = $adminMetadata->associationMappings['groups']; + $adminGroups = $adminMetadata->getProperty('groups'); // assert override self::assertEquals('admins', $adminGroups->getInversedBy()); @@ -1068,17 +1058,17 @@ public function testSecondLevelCacheMapping() self::assertEquals(Mapping\CacheUsage::READ_ONLY, $class->cache->getUsage()); self::assertEquals('doctrine_tests_models_cache_city', $class->cache->getRegion()); - self::assertArrayHasKey('state', $class->associationMappings); + self::assertArrayHasKey('state', $class->getProperties()); - $stateAssociation = $class->associationMappings['state']; + $stateAssociation = $class->getProperty('state'); self::assertNotNull($stateAssociation->getCache()); self::assertEquals(Mapping\CacheUsage::READ_ONLY, $stateAssociation->getCache()->getUsage()); self::assertEquals('doctrine_tests_models_cache_city__state', $stateAssociation->getCache()->getRegion()); - self::assertArrayHasKey('attractions', $class->associationMappings); + self::assertArrayHasKey('attractions', $class->getProperties()); - $attractionsAssociation = $class->associationMappings['attractions']; + $attractionsAssociation = $class->getProperty('attractions'); self::assertNotNull($attractionsAssociation->getCache()); self::assertEquals(Mapping\CacheUsage::READ_ONLY, $attractionsAssociation->getCache()->getUsage()); diff --git a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php index bff365202a7..01242316bba 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php @@ -150,12 +150,12 @@ public function testJoinTablesWithMappedSuperclassForAnnotationDriver() $factory->setEntityManager($em); $classPage = $factory->getMetadataFor(File::class); - self::assertArrayHasKey('parentDirectory', $classPage->associationMappings); - self::assertEquals(File::class, $classPage->associationMappings['parentDirectory']->getSourceEntity()); + self::assertArrayHasKey('parentDirectory', $classPage->getProperties()); + self::assertEquals(File::class, $classPage->getProperty('parentDirectory')->getSourceEntity()); $classDirectory = $factory->getMetadataFor(Directory::class); - self::assertArrayHasKey('parentDirectory', $classDirectory->associationMappings); - self::assertEquals(Directory::class, $classDirectory->associationMappings['parentDirectory']->getSourceEntity()); + self::assertArrayHasKey('parentDirectory', $classDirectory->getProperties()); + self::assertEquals(Directory::class, $classDirectory->getProperty('parentDirectory')->getSourceEntity()); } /** @@ -266,8 +266,8 @@ public function testAttributeOverridesMappingWithTrait() self::assertEquals('trait_foo', $fooPropertyWithoutOverride->getColumnName()); self::assertEquals('foo_overridden', $fooPropertyWithOverride->getColumnName()); - $barPropertyWithoutOverride = $metadataWithoutOverride->associationMappings['bar']; - $barPropertyWithOverride = $metadataWithOverride->associationMappings['bar']; + $barPropertyWithoutOverride = $metadataWithoutOverride->getProperty('bar'); + $barPropertyWithOverride = $metadataWithOverride->getProperty('bar'); $barPropertyWithoutOverrideFirstJoinColumn = $barPropertyWithoutOverride->getJoinColumns()[0]; $barPropertyWithOverrideFirstJoinColumn = $barPropertyWithOverride->getJoinColumns()[0]; diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index cec7389eecf..329c6fa868d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -66,7 +66,7 @@ public function testGetMetadataForSubclassWithMappedSuperclass() self::assertNull($class->getProperty('transient')); - self::assertArrayHasKey('mappedRelated1', $class->associationMappings); + self::assertArrayHasKey('mappedRelated1', $class->getProperties()); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php index a051a9814b1..cfc024f7fcf 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php @@ -340,7 +340,7 @@ public function testCreateManyToOne() [ 'groups' => $association ], - $this->cm->associationMappings + $this->cm->getProperties() ); } @@ -369,7 +369,7 @@ public function testCreateManyToOneWithIdentity() [ 'groups' => $association ], - $this->cm->associationMappings + $this->cm->getProperties() ); } @@ -396,7 +396,7 @@ public function testCreateOneToOne() [ 'groups' => $association ], - $this->cm->associationMappings + $this->cm->getProperties() ); } @@ -423,7 +423,7 @@ public function testCreateOneToOneWithIdentity() [ 'groups' => $association ], - $this->cm->associationMappings + $this->cm->getProperties() ); } @@ -474,7 +474,7 @@ public function testCreateManyToMany() [ 'groups' => $association ], - $this->cm->associationMappings + $this->cm->getProperties() ); } @@ -525,7 +525,7 @@ public function testCreateOneToMany() [ 'groups' => $association ], - $this->cm->associationMappings + $this->cm->getProperties() ); } @@ -566,7 +566,7 @@ public function testOrphanRemovalOnCreateOneToOne() [ 'groups' => $association ], - $this->cm->associationMappings + $this->cm->getProperties() ); } @@ -585,7 +585,7 @@ public function testOrphanRemovalOnCreateOneToMany() [ 'groups' => $association ], - $this->cm->associationMappings + $this->cm->getProperties() ); } @@ -642,7 +642,7 @@ public function testOrphanRemovalOnManyToMany() [ 'groups' => $association ], - $this->cm->associationMappings + $this->cm->getProperties() ); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 1e4bc2c23f3..d713685406b 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -56,7 +56,7 @@ public function testGetMetadataForSingleClass() self::assertEquals(Mapping\InheritanceType::NONE, $cm1->inheritanceType); self::assertEquals(Mapping\GeneratorType::AUTO, $cm1->generatorType); self::assertTrue($cm1->hasField('name')); - self::assertEquals(2, count($cm1->associationMappings)); + self::assertCount(4, $cm1->getProperties()); // 2 fields + 2 associations self::assertEquals('group', $cm1->table->getName()); // Go @@ -350,7 +350,7 @@ public function testQuoteMetadata() self::assertNotNull($phoneMetadata->getProperty('number')); self::assertEquals('phone-number', $phoneMetadata->getProperty('number')->getColumnName()); - $user = $phoneMetadata->associationMappings['user']; + $user = $phoneMetadata->getProperty('user'); $userJoinColumns = $user->getJoinColumns(); $phoneUserJoinColumn = reset($userJoinColumns); @@ -369,28 +369,28 @@ public function testQuoteMetadata() self::assertEquals('user-id', $userMetadata->getProperty('id')->getColumnName()); self::assertEquals('user-name', $userMetadata->getProperty('name')->getColumnName()); - $group = $groupMetadata->associationMappings['parent']; + $group = $groupMetadata->getProperty('parent'); $groupJoinColumns = $group->getJoinColumns(); $groupUserJoinColumn = reset($groupJoinColumns); self::assertEquals('parent-id', $groupUserJoinColumn->getColumnName()); self::assertEquals('group-id', $groupUserJoinColumn->getReferencedColumnName()); - $user = $addressMetadata->associationMappings['user']; + $user = $addressMetadata->getProperty('user'); $userJoinColumns = $user->getJoinColumns(); $addressUserJoinColumn = reset($userJoinColumns); self::assertEquals('user-id', $addressUserJoinColumn->getColumnName()); self::assertEquals('user-id', $addressUserJoinColumn->getReferencedColumnName()); - $address = $userMetadata->associationMappings['address']; + $address = $userMetadata->getProperty('address'); $addressJoinColumns = $address->getJoinColumns(); $userAddressJoinColumn = reset($addressJoinColumns); self::assertEquals('address-id', $userAddressJoinColumn->getColumnName()); self::assertEquals('address-id', $userAddressJoinColumn->getReferencedColumnName()); - $groups = $userMetadata->associationMappings['groups']; + $groups = $userMetadata->getProperty('groups'); $groupsJoinTable = $groups->getJoinTable(); $userGroupsJoinColumns = $groupsJoinTable->getJoinColumns(); $userGroupsJoinColumn = reset($userGroupsJoinColumns); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index a46f5a53133..799a69b70e7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -63,7 +63,7 @@ public function testClassMetadataInstanceSerialization() $cm->addAssociation($association); - self::assertEquals(1, count($cm->associationMappings)); + self::assertCount(1, $cm->getProperties()); $serialized = serialize($cm); $cm = unserialize($serialized); @@ -89,10 +89,10 @@ public function testClassMetadataInstanceSerialization() self::assertEquals($discrColumn, $cm->discriminatorColumn); self::assertTrue($cm->isReadOnly()); self::assertEquals(['dql' => ['name'=>'dql','query'=>'foo','dql'=>'foo']], $cm->namedQueries); - self::assertEquals(1, count($cm->associationMappings)); - self::assertInstanceOf(Mapping\OneToOneAssociationMetadata::class, $cm->associationMappings['phonenumbers']); + self::assertCount(1, $cm->getProperties()); + self::assertInstanceOf(Mapping\OneToOneAssociationMetadata::class, $cm->getProperty('phonenumbers')); - $oneOneMapping = $cm->associationMappings['phonenumbers']; + $oneOneMapping = $cm->getProperty('phonenumbers'); self::assertEquals(Mapping\FetchMode::LAZY, $oneOneMapping->getFetchMode()); self::assertEquals(CMS\CmsAddress::class, $oneOneMapping->getTargetEntity()); @@ -175,7 +175,7 @@ public function testMapAssociationInGlobalNamespace() $cm->addAssociation($association); - self::assertEquals("DoctrineGlobal_User", $cm->associationMappings['author']->getTargetEntity()); + self::assertEquals("DoctrineGlobal_User", $cm->getProperty('author')->getTargetEntity()); } public function testMapManyToManyJoinTableDefaults() @@ -189,7 +189,7 @@ public function testMapManyToManyJoinTableDefaults() $cm->addAssociation($association); - $association = $cm->associationMappings['groups']; + $association = $cm->getProperty('groups'); $joinColumns = []; @@ -229,7 +229,7 @@ public function testSerializeManyToManyJoinTableCascade() $cm->addAssociation($association); - $association = $cm->associationMappings['groups']; + $association = $cm->getProperty('groups'); $association = unserialize(serialize($association)); $joinTable = $association->getJoinTable(); @@ -488,7 +488,7 @@ public function testDefaultTableName() $cm->addAssociation($association); - $association = $cm->associationMappings['user']; + $association = $cm->getProperty('user'); self::assertEquals('cmsaddress_cmsuser', $association->getJoinTable()->getName()); } @@ -515,7 +515,7 @@ public function testDefaultJoinColumnName() $cm->addAssociation($association); - $association = $cm->associationMappings['user']; + $association = $cm->getProperty('user'); $joinColumns = $association->getJoinColumns(); $joinColumn = reset($joinColumns); @@ -545,7 +545,7 @@ public function testDefaultJoinColumnName() $cm->addAssociation($association); - $association = $cm->associationMappings['user']; + $association = $cm->getProperty('user'); $joinTable = $association->getJoinTable(); $joinColumns = $joinTable->getJoinColumns(); $joinColumn = reset($joinColumns); @@ -570,7 +570,7 @@ public function testOneToOneUnderscoreNamingStrategyDefaults() $metadata->addAssociation($association); - $association = $metadata->associationMappings['user']; + $association = $metadata->getProperty('user'); $joinColumns = $association->getJoinColumns(); $joinColumn = reset($joinColumns); @@ -592,7 +592,7 @@ public function testManyToManyUnderscoreNamingStrategyDefaults() $metadata->addAssociation($association); - $association = $metadata->associationMappings['user']; + $association = $metadata->getProperty('user'); $joinTable = $association->getJoinTable(); $joinColumns = $joinTable->getJoinColumns(); $joinColumn = reset($joinColumns); @@ -615,7 +615,7 @@ public function testManyToManyUnderscoreNamingStrategyDefaults() $cm->addAssociation($association); - $association = $cm->associationMappings['author']; + $association = $cm->getProperty('author'); self::assertEquals('DOCTRINE_GLOBAL_ARTICLE_CMS_USER', $association->getJoinTable()->getName()); } @@ -656,7 +656,7 @@ public function testJoinTableMappingDefaults() $metadata->addAssociation($association); - $association = $metadata->associationMappings['author']; + $association = $metadata->getProperty('author'); self::assertEquals('doctrineglobal_article_cmsuser', $association->getJoinTable()->getName()); } @@ -1232,8 +1232,8 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategy() $articleMetadata->addAssociation($association); self::assertEquals('routing_routingleg', $routingMetadata->table->getName()); - self::assertEquals('cms_cmsaddress_cms_cmsuser', $addressMetadata->associationMappings['user']->getJoinTable()->getName()); - self::assertEquals('doctrineglobal_article_cms_cmsuser', $articleMetadata->associationMappings['author']->getJoinTable()->getName()); + self::assertEquals('cms_cmsaddress_cms_cmsuser', $addressMetadata->getProperty('user')->getJoinTable()->getName()); + self::assertEquals('doctrineglobal_article_cms_cmsuser', $articleMetadata->getProperty('author')->getJoinTable()->getName()); } /** @@ -1365,7 +1365,7 @@ public function testManyToManySelfReferencingNamingStrategyDefaults() $cm->addAssociation($association); - $association = $cm->associationMappings['friendsWithMe']; + $association = $cm->getProperty('friendsWithMe'); $joinColumns = []; diff --git a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php index 3cfac45bbf8..4ab400e1771 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php @@ -63,9 +63,9 @@ public function testIdentifierWithAssociationKey() $class = $factory->getMetadataFor(DDC117Translation::class); self::assertEquals(['language', 'article'], $class->identifier); - self::assertArrayHasKey('article', $class->associationMappings); + self::assertArrayHasKey('article', $class->getProperties()); - $association = $class->associationMappings['article']; + $association = $class->getProperty('article'); self::assertTrue($association->isPrimaryKey()); } diff --git a/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php b/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php index 4c7ac44cab0..e9cc2fda90a 100644 --- a/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php @@ -43,7 +43,7 @@ public function setUpPersistentCollection() $classMetaData = $this->emMock->getClassMetadata(ECommerceCart::class); $this->collection = new PersistentCollection($this->emMock, $classMetaData, new ArrayCollection); $this->collection->setInitialized(false); - $this->collection->setOwner(new ECommerceCart(), $classMetaData->associationMappings['products']); + $this->collection->setOwner(new ECommerceCart(), $classMetaData->getProperty('products')); } public function testCanBePutInLazyLoadingMode() diff --git a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php index c1c0b938376..0673fdb4d75 100644 --- a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php +++ b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php @@ -91,7 +91,7 @@ private function modifySelectStatement(Query\AST\SelectStatement $selectStatemen [ 'metadata' => $addressMetadata, 'parent' => $rangeVariableDecl->aliasIdentificationVariable, - 'relation' => $userMetadata->associationMappings['address'], + 'relation' => $userMetadata->getProperty('address'), 'map' => null, 'nestingLevel' => 0, 'token' => null, diff --git a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php index 6c0cc331fcc..d5d1146153c 100644 --- a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php +++ b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php @@ -218,7 +218,7 @@ private function modifySelectStatement(Query\AST\SelectStatement $selectStatemen [ 'metadata' => $addressMetadata, 'parent' => $rangeVariableDecl->aliasIdentificationVariable, - 'relation' => $userMetadata->associationMappings['address'], + 'relation' => $userMetadata->getProperty('address'), 'map' => null, 'nestingLevel' => 0, 'token' => null, diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 33135db5b6a..abece24a75c 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -564,7 +564,7 @@ public function testLoadMetadata() // self::assertEquals($cm->embeddedClasses, $metadata->embeddedClasses); // self::assertEquals($cm->isEmbeddedClass, $metadata->isEmbeddedClass); - self::assertEquals(Mapping\FetchMode::EXTRA_LAZY, $cm->associationMappings['comments']->getFetchMode()); + self::assertEquals(Mapping\FetchMode::EXTRA_LAZY, $cm->getProperty('comments')->getFetchMode()); // $isbn = $this->newInstance($embeddedMetadata); // diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index d2bdc086459..3740b7f1870 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -228,24 +228,25 @@ public function testFieldsAreExported($class) */ public function testOneToOneAssociationsAreExported($class) { - self::assertTrue(isset($class->associationMappings['address'])); + $property = $class->getProperty('address'); - $association = $class->associationMappings['address']; - $joinColumns = $association->getJoinColumns(); + self::assertNotNull($property); + + $joinColumns = $property->getJoinColumns(); $joinColumn = reset($joinColumns); - self::assertEquals('Doctrine\Tests\ORM\Tools\Export\Address', $association->getTargetEntity()); + self::assertEquals('Doctrine\Tests\ORM\Tools\Export\Address', $property->getTargetEntity()); self::assertEquals('address_id', $joinColumn->getColumnName()); self::assertEquals('id', $joinColumn->getReferencedColumnName()); self::assertEquals('CASCADE', $joinColumn->getOnDelete()); - self::assertContains('remove', $association->getCascade()); - self::assertContains('persist', $association->getCascade()); - self::assertNotContains('refresh', $association->getCascade()); - self::assertNotContains('merge', $association->getCascade()); - self::assertNotContains('detach', $association->getCascade()); - self::assertTrue($association->isOrphanRemoval()); - self::assertEquals(FetchMode::EAGER, $association->getFetchMode()); + self::assertContains('remove', $property->getCascade()); + self::assertContains('persist', $property->getCascade()); + self::assertNotContains('refresh', $property->getCascade()); + self::assertNotContains('merge', $property->getCascade()); + self::assertNotContains('detach', $property->getCascade()); + self::assertTrue($property->isOrphanRemoval()); + self::assertEquals(FetchMode::EAGER, $property->getFetchMode()); return $class; } @@ -255,8 +256,10 @@ public function testOneToOneAssociationsAreExported($class) */ public function testManyToOneAssociationsAreExported($class) { - self::assertTrue(isset($class->associationMappings['mainGroup'])); - self::assertEquals(Group::class, $class->associationMappings['mainGroup']->getTargetEntity()); + $property = $class->getProperty('mainGroup'); + + self::assertNotNull($property); + self::assertEquals(Group::class, $property->getTargetEntity()); } /** @@ -265,23 +268,23 @@ public function testManyToOneAssociationsAreExported($class) */ public function testOneToManyAssociationsAreExported($class) { - self::assertTrue(isset($class->associationMappings['phonenumbers'])); + /** @var OneToManyAssociationMetadata $property */ + $property = $class->getProperty('phonenumbers'); - /** @var OneToManyAssociationMetadata $association */ - $association = $class->associationMappings['phonenumbers']; + self::assertNotNull($property); - self::assertInstanceOf(OneToManyAssociationMetadata::class, $association); - self::assertEquals(Phonenumber::class, $association->getTargetEntity()); - self::assertEquals('user', $association->getMappedBy()); - self::assertEquals(['number' => 'ASC'], $association->getOrderBy()); + self::assertInstanceOf(OneToManyAssociationMetadata::class, $property); + self::assertEquals(Phonenumber::class, $property->getTargetEntity()); + self::assertEquals('user', $property->getMappedBy()); + self::assertEquals(['number' => 'ASC'], $property->getOrderBy()); - self::assertContains('remove', $association->getCascade()); - self::assertContains('persist', $association->getCascade()); - self::assertNotContains('refresh', $association->getCascade()); - self::assertContains('merge', $association->getCascade()); - self::assertNotContains('detach', $association->getCascade()); - self::assertTrue($association->isOrphanRemoval()); - self::assertEquals(FetchMode::LAZY, $association->getFetchMode()); + self::assertContains('remove', $property->getCascade()); + self::assertContains('persist', $property->getCascade()); + self::assertNotContains('refresh', $property->getCascade()); + self::assertContains('merge', $property->getCascade()); + self::assertNotContains('detach', $property->getCascade()); + self::assertTrue($property->isOrphanRemoval()); + self::assertEquals(FetchMode::LAZY, $property->getFetchMode()); return $class; } @@ -292,17 +295,18 @@ public function testOneToManyAssociationsAreExported($class) */ public function testManyToManyAssociationsAreExported($class) { - self::assertTrue(isset($class->associationMappings['groups'])); + $property = $class->getProperty('groups'); + + self::assertNotNull($property); - $association = $class->associationMappings['groups']; - $joinTable = $association->getJoinTable(); + $joinTable = $property->getJoinTable(); $joinColumns = $joinTable->getJoinColumns(); $joinColumn = reset($joinColumns); $inverseJoinColumns = $joinTable->getInverseJoinColumns(); $inverseJoinColumn = reset($inverseJoinColumns); - self::assertInstanceOf(ManyToManyAssociationMetadata::class, $association); - self::assertEquals(Group::class, $association->getTargetEntity()); + self::assertInstanceOf(ManyToManyAssociationMetadata::class, $property); + self::assertEquals(Group::class, $property->getTargetEntity()); self::assertEquals('cms_users_groups', $joinTable->getName()); self::assertEquals('user_id', $joinColumn->getColumnName()); @@ -312,13 +316,13 @@ public function testManyToManyAssociationsAreExported($class) self::assertEquals('id', $inverseJoinColumn->getReferencedColumnName()); self::assertEquals('INT NULL', $inverseJoinColumn->getColumnDefinition()); - self::assertContains('remove', $association->getCascade()); - self::assertContains('persist', $association->getCascade()); - self::assertContains('refresh', $association->getCascade()); - self::assertContains('merge', $association->getCascade()); - self::assertContains('detach', $association->getCascade()); + self::assertContains('remove', $property->getCascade()); + self::assertContains('persist', $property->getCascade()); + self::assertContains('refresh', $property->getCascade()); + self::assertContains('merge', $property->getCascade()); + self::assertContains('detach', $property->getCascade()); - self::assertEquals(FetchMode::EXTRA_LAZY, $association->getFetchMode()); + self::assertEquals(FetchMode::EXTRA_LAZY, $property->getFetchMode()); return $class; } @@ -347,14 +351,17 @@ public function testLifecycleCallbacksAreExported($class) */ public function testCascadeIsExported($class) { - $association = $class->associationMappings['phonenumbers']; + $property = $class->getProperty('phonenumbers'); - self::assertContains('persist', $association->getCascade()); - self::assertContains('merge', $association->getCascade()); - self::assertContains('remove', $association->getCascade()); - self::assertNotContains('refresh', $association->getCascade()); - self::assertNotContains('detach', $association->getCascade()); - self::assertTrue($association->isOrphanRemoval()); + self::assertNotNull($property); + + self::assertContains('persist', $property->getCascade()); + self::assertContains('merge', $property->getCascade()); + self::assertContains('remove', $property->getCascade()); + self::assertNotContains('refresh', $property->getCascade()); + self::assertNotContains('detach', $property->getCascade()); + + self::assertTrue($property->isOrphanRemoval()); return $class; } @@ -365,9 +372,11 @@ public function testCascadeIsExported($class) */ public function testInversedByIsExported($class) { - $association = $class->associationMappings['address']; + $property = $class->getProperty('address'); + + self::assertNotNull($property); - self::assertEquals('user', $association->getInversedBy()); + self::assertEquals('user', $property->getInversedBy()); } /** * @depends testExportDirectoryAndFilesAreCreated diff --git a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php index e7d7ffa8fcc..193f2e8e5ec 100644 --- a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php @@ -46,7 +46,7 @@ public function testResolveTargetEntityListenerCanResolveTargetEntity() $evm->addEventSubscriber($this->listener); $cm = $this->factory->getMetadataFor(ResolveTargetEntity::class); - $meta = $cm->associationMappings; + $meta = $cm->getProperties(); self::assertSame(TargetEntity::class, $meta['manyToMany']->getTargetEntity()); self::assertSame(ResolveTargetEntity::class, $meta['manyToOne']->getTargetEntity()); @@ -83,7 +83,7 @@ public function testAssertTableColumnsAreNotAddedInManyToMany() $evm->addEventListener(Events::loadClassMetadata, $this->listener); $cm = $this->factory->getMetadataFor(ResolveTargetEntity::class); - $meta = $cm->associationMappings['manyToMany']; + $meta = $cm->getProperty('manyToMany'); self::assertSame(TargetEntity::class, $meta->getTargetEntity()); } From 524b1f0b5b860d1a54d9b4d4ee64602f038e6a86 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Tue, 21 Mar 2017 23:22:52 -0400 Subject: [PATCH 121/275] Merged addProperty and addAssociation --- .../Mapping/Builder/ClassMetadataBuilder.php | 12 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 192 +++++++++--------- .../ORM/Mapping/Driver/AnnotationDriver.php | 8 +- .../ORM/Mapping/Driver/DatabaseDriver.php | 6 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 8 +- .../ORM/Tools/Export/Driver/PhpExporter.php | 2 +- .../Doctrine/Tests/Models/CMS/CmsAddress.php | 2 +- .../Tests/Models/DDC3579/DDC3579User.php | 2 +- .../Tests/Models/DDC964/DDC964User.php | 4 +- .../ORM/Hydration/ResultSetMappingTest.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 6 +- .../Builder/ClassMetadataBuilderTest.php | 26 +-- .../ORM/Mapping/ClassMetadataFactoryTest.php | 4 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 46 ++--- .../Doctrine.Tests.Models.CMS.CmsAddress.php | 2 +- .../php/Doctrine.Tests.Models.Cache.City.php | 6 +- ...trine.Tests.Models.DDC3579.DDC3579User.php | 2 +- ...octrine.Tests.Models.DDC964.DDC964User.php | 4 +- .../php/Doctrine.Tests.ORM.Mapping.PHPSLC.php | 2 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 6 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 6 +- .../Doctrine.Tests.ORM.Tools.Export.User.php | 10 +- 22 files changed, 183 insertions(+), 175 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php index 5e59ddc6fb5..06ca5756a8e 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php @@ -382,7 +382,7 @@ public function addManyToOne(string $name, string $targetEntity, string $inverse $builder->inversedBy($inversedBy); } - $this->cm->addAssociation($builder->build()); + $this->cm->addProperty($builder->build()); return $this; } @@ -444,7 +444,7 @@ public function addInverseOneToOne(string $name, string $targetEntity, string $m $builder->withMappedBy($mappedBy); - $this->cm->addAssociation($builder->build()); + $this->cm->addProperty($builder->build()); return $this; } @@ -466,7 +466,7 @@ public function addOwningOneToOne(string $name, string $targetEntity, string $in $builder->withInversedBy($inversedBy); } - $this->cm->addAssociation($builder->build()); + $this->cm->addProperty($builder->build()); return $this; } @@ -508,7 +508,7 @@ public function addOwningManyToMany(string $name, string $targetEntity, string $ $builder->withInversedBy($inversedBy); } - $this->cm->addAssociation($builder->build()); + $this->cm->addProperty($builder->build()); return $this; } @@ -528,7 +528,7 @@ public function addInverseManyToMany(string $name, string $targetEntity, string $builder->withMappedBy($mappedBy); - $this->cm->addAssociation($builder->build()); + $this->cm->addProperty($builder->build()); return $this; } @@ -568,7 +568,7 @@ public function addOneToMany($name, $targetEntity, $mappedBy) $builder->withMappedBy($mappedBy); - $this->cm->addAssociation($builder->build()); + $this->cm->addProperty($builder->build()); return $this; } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 0356f5a52d7..21c65d00131 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -803,26 +803,76 @@ public function getSqlResultSetMappings() return $this->sqlResultSetMappings; } + /** + * Validates & completes the basic mapping information for field mapping. + * + * @param FieldMetadata $property + * + * @return array The updated mapping. + * + * @throws MappingException If something is wrong with the mapping. + */ + protected function validateAndCompleteFieldMapping(FieldMetadata $property) + { + $fieldName = $property->getName(); + $columnName = $property->getColumnName(); + + $property->setDeclaringClass($this); + + if (empty($columnName)) { + $columnName = $this->namingStrategy->propertyToColumnName($fieldName, $this->name); + + $property->setColumnName($columnName); + } + + if (! $this->isMappedSuperclass) { + $property->setTableName($this->getTableName()); + } + + // Check for already declared column + if (isset($this->fieldNames[$columnName]) || + ($this->discriminatorColumn !== null && $this->discriminatorColumn->getColumnName() === $columnName)) { + throw MappingException::duplicateColumnName($this->name, $columnName); + } + + // Complete id mapping + if ($property->isPrimaryKey()) { + if ($this->versionProperty !== null && $this->versionProperty->getName() === $fieldName) { + throw MappingException::cannotVersionIdField($this->name, $fieldName); + } + + assert( + ! $property->getType()->canRequireSQLConversion(), + MappingException::sqlConversionNotAllowedForPrimaryKeyProperties($property) + ); + + if (! in_array($fieldName, $this->identifier)) { + $this->identifier[] = $fieldName; + } + + // Check for composite key + if (! $this->isIdentifierComposite && count($this->identifier) > 1) { + $this->isIdentifierComposite = true; + } + } + + $this->fieldNames[$columnName] = $fieldName; + } + /** * Validates & completes the basic mapping information that is common to all * association mappings (one-to-one, many-ot-one, one-to-many, many-to-many). * * @param AssociationMetadata $property * - * @return array The updated mapping. - * * @throws MappingException If something is wrong with the mapping. + * @throws CacheException If entity is not cacheable. */ protected function validateAndCompleteAssociationMapping(AssociationMetadata $property) { - // Mandatory attributes for both sides: fieldName, targetEntity $fieldName = $property->getName(); $targetEntity = $property->getTargetEntity(); - if (! $fieldName) { - throw MappingException::missingFieldName($this->name); - } - if (! $targetEntity) { throw MappingException::missingTargetEntity($fieldName); } @@ -1379,7 +1429,7 @@ public function setAssociationOverride(AssociationMetadata $associationMetadata) $originalAssociation->setJoinTable($associationMetadata->getJoinTable()); } - $this->addAssociation($originalAssociation); + $this->addProperty($originalAssociation); } /** @@ -1406,8 +1456,8 @@ public function setAttributeOverride(FieldMetadata $fieldMetadata) $fieldMetadata->setDeclaringClass($originalProperty->getDeclaringClass()); $fieldMetadata->setPrimaryKey($originalProperty->isPrimaryKey()); - unset($this->properties[$originalProperty->getName()]); unset($this->fieldNames[$originalProperty->getColumnName()]); + unset($this->properties[$originalProperty->getName()]); $this->addProperty($fieldMetadata); } @@ -1487,79 +1537,70 @@ public function getProperties() return $this->properties; } + /** + * @param string $fieldName + * + * @return Property|null + */ + public function getProperty($fieldName) + { + return $this->properties[$fieldName] ?? null; + } + /** * Add a property mapping. * - * @param FieldMetadata $property + * @param Property $property * + * @throws \RuntimeException * @throws MappingException + * @throws CacheException */ - public function addProperty(FieldMetadata $property) + public function addProperty(Property $property) { - $fieldName = $property->getName(); - $columnName = $property->getColumnName(); - - $property->setDeclaringClass($this); + $fieldName = $property->getName(); // Check for empty field name if (empty($fieldName)) { throw MappingException::missingFieldName($this->name); } - // Check for duplicated property - $this->assertPropertyNotMapped($fieldName); + switch (true) { + case ($property instanceof FieldMetadata): + $this->validateAndCompleteFieldMapping($property); + break; - if (empty($columnName)) { - $columnName = $this->namingStrategy->propertyToColumnName($fieldName, $this->name); + case ($property instanceof OneToOneAssociationMetadata): + $this->validateAndCompleteAssociationMapping($property); + $this->validateAndCompleteToOneAssociationMetadata($property); + $this->validateAndCompleteOneToOneMapping($property); + break; - $property->setColumnName($columnName); - } + case ($property instanceof OneToManyAssociationMetadata): + $this->validateAndCompleteAssociationMapping($property); + $this->validateAndCompleteToManyAssociationMetadata($property); + $this->validateAndCompleteOneToManyMapping($property); + break; - if (! $this->isMappedSuperclass) { - $property->setTableName($this->getTableName()); - } + case ($property instanceof ManyToOneAssociationMetadata): + $this->validateAndCompleteAssociationMapping($property); + $this->validateAndCompleteToOneAssociationMetadata($property); + $this->validateAndCompleteManyToOneMapping($property); + break; - // Check for already declared column - if (isset($this->fieldNames[$columnName]) || - ($this->discriminatorColumn !== null && $this->discriminatorColumn->getColumnName() === $columnName)) { - throw MappingException::duplicateColumnName($this->name, $columnName); + case ($property instanceof ManyToManyAssociationMetadata): + $this->validateAndCompleteAssociationMapping($property); + $this->validateAndCompleteToManyAssociationMetadata($property); + $this->validateAndCompleteManyToManyMapping($property); + break; } - // Complete id mapping - if ($property->isPrimaryKey()) { - if ($this->versionProperty !== null && $this->versionProperty->getName() === $fieldName) { - throw MappingException::cannotVersionIdField($this->name, $fieldName); - } - - assert( - ! $property->getType()->canRequireSQLConversion(), - MappingException::sqlConversionNotAllowedForPrimaryKeyProperties($property) - ); - - if (! in_array($fieldName, $this->identifier)) { - $this->identifier[] = $fieldName; - } - - // Check for composite key - if (! $this->isIdentifierComposite && count($this->identifier) > 1) { - $this->isIdentifierComposite = true; - } - } + // Check for duplicated property + $this->assertPropertyNotMapped($fieldName); - $this->fieldNames[$columnName] = $fieldName; $this->properties[$fieldName] = $property; } - /** - * @param string $fieldName - * - * @return Property|null - */ - public function getProperty($fieldName) - { - return $this->properties[$fieldName] ?? null; - } - /** * INTERNAL: * Adds a field mapping without completing/validating it. @@ -1751,39 +1792,6 @@ public function addSqlResultSetMapping(array $resultMapping) $this->sqlResultSetMappings[$resultMapping['name']] = $resultMapping; } - /** - * Adds an association mapping. - * - * @param AssociationMetadata $property - * - * @throws \RuntimeException - * @throws MappingException - */ - public function addAssociation(AssociationMetadata $property) - { - $this->validateAndCompleteAssociationMapping($property); - - if ($property instanceof OneToOneAssociationMetadata) { - $this->validateAndCompleteToOneAssociationMetadata($property); - $this->validateAndCompleteOneToOneMapping($property); - } else if ($property instanceof OneToManyAssociationMetadata) { - $this->validateAndCompleteToManyAssociationMetadata($property); - $this->validateAndCompleteOneToManyMapping($property); - } else if ($property instanceof ManyToOneAssociationMetadata) { - $this->validateAndCompleteToOneAssociationMetadata($property); - $this->validateAndCompleteManyToOneMapping($property); - } else if ($property instanceof ManyToManyAssociationMetadata) { - $this->validateAndCompleteToManyAssociationMetadata($property); - $this->validateAndCompleteManyToManyMapping($property); - } - - $sourceFieldName = $property->getName(); - - $this->assertPropertyNotMapped($sourceFieldName); - - $this->properties[$sourceFieldName] = $property; - } - /** * Registers a custom repository class for the entity class. * diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 72fe6e428b7..8fbe9a735c7 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -333,7 +333,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $metadata ); - $metadata->addAssociation($assocMetadata); + $metadata->addProperty($assocMetadata); break; @@ -344,7 +344,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $metadata ); - $metadata->addAssociation($assocMetadata); + $metadata->addProperty($assocMetadata); break; @@ -355,7 +355,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $metadata ); - $metadata->addAssociation($assocMetadata); + $metadata->addProperty($assocMetadata); break; @@ -366,7 +366,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $metadata ); - $metadata->addAssociation($assocMetadata); + $metadata->addProperty($assocMetadata); break; diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index 39b6145679f..edcf7516bf2 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -257,7 +257,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $associationMapping['mappedBy'] = $this->getFieldNameForColumn($manyTable->getName(), current($myFk->getColumns()), true); } - $metadata->addAssociation($associationMapping); + $metadata->addProperty($associationMapping); break; } @@ -492,9 +492,9 @@ private function buildToOneAssociationMappings(ClassMetadata $metadata) // Here we need to check if $fkColumns are the same as $primaryKeys if ( ! array_diff($fkColumns, $primaryKeys)) { - $metadata->addAssociation($associationMapping); + $metadata->addProperty($associationMapping); } else { - $metadata->addAssociation($associationMapping); + $metadata->addProperty($associationMapping); } } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 7b12ac3c713..459365adb20 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -421,7 +421,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) ); } - $metadata->addAssociation($association); + $metadata->addProperty($association); } } @@ -474,7 +474,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) ); } - $metadata->addAssociation($association); + $metadata->addProperty($association); } } @@ -526,7 +526,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) ); } - $metadata->addAssociation($association); + $metadata->addProperty($association); } } @@ -615,7 +615,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) ); } - $metadata->addAssociation($association); + $metadata->addProperty($association); } } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 84c042d21e2..3bfa4c88ba2 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -258,7 +258,7 @@ private function exportAssociationMetadata(ClassMetadata $metadata, AssociationM $lines[] = '$association->setOrphanRemoval(' . $this->varExport($association->isOrphanRemoval()) . ');'; $lines[] = '$association->setPrimaryKey(' . $this->varExport($association->isPrimaryKey()) . ');'; $lines[] = null; - $lines[] = '$metadata->addAssociation($association);'; + $lines[] = '$metadata->addProperty($association);'; } private function exportJoinTable(JoinTableMetadata $joinTable, array &$lines) diff --git a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php index db3bf835bf8..afaf5548619 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php @@ -168,7 +168,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association->setJoinColumns($joinColumns); $association->setTargetEntity('CmsUser'); - $metadata->addAssociation($association); + $metadata->addProperty($association); $metadata->addNamedNativeQuery( [ diff --git a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php index fe5687f1a74..e6265dd80df 100644 --- a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php +++ b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php @@ -105,7 +105,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association->setTargetEntity('DDC3579Group'); - $metadata->addAssociation($association); + $metadata->addProperty($association); $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php index 76be4e3bee1..e4605281d69 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php @@ -142,7 +142,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association->setTargetEntity('DDC964Address'); $association->setCascade(['persist', 'merge']); - $metadata->addAssociation($association); + $metadata->addProperty($association); $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('ddc964_users_groups'); @@ -168,7 +168,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association->setInversedBy('users'); $association->setCascade(['persist', 'merge', 'detach']); - $metadata->addAssociation($association); + $metadata->addProperty($association); $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } diff --git a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php index aa368dbc220..66d7e99faad 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php @@ -121,7 +121,7 @@ public function testAddNamedNativeQueryResultSetMapping() $association->setCascade(['persist']); $association->addJoinColumn($joinColumn); - $cm->addAssociation($association); + $cm->addProperty($association); $cm->addNamedNativeQuery( [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index fa7cc6a6707..8201c0ab8ac 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -1355,7 +1355,7 @@ public static function loadMetadata(ClassMetadata $metadata) $association->setCascade(['remove']); $association->setOrphanRemoval(false); - $metadata->addAssociation($association); + $metadata->addProperty($association); $association = new Mapping\OneToManyAssociationMetadata('phonenumbers'); @@ -1365,7 +1365,7 @@ public static function loadMetadata(ClassMetadata $metadata) $association->setOrderBy(['number' => 'ASC']); $association->setOrphanRemoval(true); - $metadata->addAssociation($association); + $metadata->addProperty($association); $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('cms_users_groups'); @@ -1393,7 +1393,7 @@ public static function loadMetadata(ClassMetadata $metadata) $association->setTargetEntity(Group::class); $association->setCascade(['remove', 'persist', 'refresh', 'merge', 'detach']); - $metadata->addAssociation($association); + $metadata->addProperty($association); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php index cfc024f7fcf..93f94dff7ca 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php @@ -334,7 +334,7 @@ public function testCreateManyToOne() ->build() ; - $this->cm->addAssociation($association); + $this->cm->addProperty($association); self::assertEquals( [ @@ -363,7 +363,7 @@ public function testCreateManyToOneWithIdentity() ->build() ; - $this->cm->addAssociation($association); + $this->cm->addProperty($association); self::assertEquals( [ @@ -390,7 +390,7 @@ public function testCreateOneToOne() ->build() ; - $this->cm->addAssociation($association); + $this->cm->addProperty($association); self::assertEquals( [ @@ -417,7 +417,7 @@ public function testCreateOneToOneWithIdentity() ->build() ; - $this->cm->addAssociation($association); + $this->cm->addProperty($association); self::assertEquals( [ @@ -439,7 +439,7 @@ public function testThrowsExceptionOnCreateOneToOneWithIdentityOnInverseSide() ->withPrimaryKey(true) ->build(); - $this->cm->addAssociation($association); + $this->cm->addProperty($association); } public function testCreateManyToMany() @@ -468,7 +468,7 @@ public function testCreateManyToMany() ->build() ; - $this->cm->addAssociation($association); + $this->cm->addProperty($association); self::assertEquals( [ @@ -507,7 +507,7 @@ public function testThrowsExceptionOnCreateManyToManyWithIdentity() ->build() ; - $this->cm->addAssociation($association); + $this->cm->addProperty($association); } public function testCreateOneToMany() @@ -519,7 +519,7 @@ public function testCreateOneToMany() ->build() ; - $this->cm->addAssociation($association); + $this->cm->addProperty($association); self::assertEquals( [ @@ -540,7 +540,7 @@ public function testThrowsExceptionOnCreateOneToManyWithIdentity() ->withIndexedBy('test') ->build(); - $this->cm->addAssociation($association); + $this->cm->addProperty($association); } public function testOrphanRemovalOnCreateOneToOne() @@ -560,7 +560,7 @@ public function testOrphanRemovalOnCreateOneToOne() ->build() ; - $this->cm->addAssociation($association); + $this->cm->addProperty($association); self::assertEquals( [ @@ -579,7 +579,7 @@ public function testOrphanRemovalOnCreateOneToMany() ->build() ; - $this->cm->addAssociation($association); + $this->cm->addProperty($association); self::assertEquals( [ @@ -607,7 +607,7 @@ public function testExceptionOnOrphanRemovalOnManyToOne() ->withOrphanRemoval(true) ->build(); - $this->cm->addAssociation($association); + $this->cm->addProperty($association); } public function testOrphanRemovalOnManyToMany() @@ -636,7 +636,7 @@ public function testOrphanRemovalOnManyToMany() ->withOrphanRemoval(true) ->build(); - $this->cm->addAssociation($association); + $this->cm->addProperty($association); self::assertEquals( [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index d713685406b..9a367e743ee 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -306,7 +306,7 @@ protected function createValidClassMetadata() $association->setTargetEntity('TestEntity1'); $association->setMappedBy('this'); - $cm1->addAssociation($association); + $cm1->addProperty($association); // and an association on the owning side $joinColumns = []; @@ -323,7 +323,7 @@ protected function createValidClassMetadata() $association->setJoinColumns($joinColumns); $association->setTargetEntity('TestEntity1'); - $cm1->addAssociation($association); + $cm1->addProperty($association); // and an id generator type $cm1->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 799a69b70e7..91ca816f63f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -61,7 +61,7 @@ public function testClassMetadataInstanceSerialization() $association->setTargetEntity('CmsAddress'); $association->setMappedBy('foo'); - $cm->addAssociation($association); + $cm->addProperty($association); self::assertCount(1, $cm->getProperties()); @@ -173,7 +173,7 @@ public function testMapAssociationInGlobalNamespace() $association->setJoinTable($joinTable); $association->setTargetEntity('DoctrineGlobal_User'); - $cm->addAssociation($association); + $cm->addProperty($association); self::assertEquals("DoctrineGlobal_User", $cm->getProperty('author')->getTargetEntity()); } @@ -187,7 +187,7 @@ public function testMapManyToManyJoinTableDefaults() $association->setTargetEntity('CmsGroup'); - $cm->addAssociation($association); + $cm->addProperty($association); $association = $cm->getProperty('groups'); @@ -227,7 +227,7 @@ public function testSerializeManyToManyJoinTableCascade() $association->setTargetEntity('CmsGroup'); - $cm->addAssociation($association); + $cm->addProperty($association); $association = $cm->getProperty('groups'); $association = unserialize(serialize($association)); @@ -414,7 +414,7 @@ public function testDuplicateFieldAndAssociationMapping1_ThrowsException() $association->setTargetEntity('CmsUser'); - $metadata->addAssociation($association); + $metadata->addProperty($association); } public function testDuplicateFieldAndAssociationMapping2_ThrowsException() @@ -426,7 +426,7 @@ public function testDuplicateFieldAndAssociationMapping2_ThrowsException() $association->setTargetEntity('CmsUser'); - $metadata->addAssociation($association); + $metadata->addProperty($association); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); @@ -486,7 +486,7 @@ public function testDefaultTableName() $association->setTargetEntity('CmsUser'); $association->setInversedBy('users'); - $cm->addAssociation($association); + $cm->addProperty($association); $association = $cm->getProperty('user'); @@ -513,7 +513,7 @@ public function testDefaultJoinColumnName() $association->setJoinColumns($joinColumns); $association->setTargetEntity('CmsUser'); - $cm->addAssociation($association); + $cm->addProperty($association); $association = $cm->getProperty('user'); $joinColumns = $association->getJoinColumns(); @@ -543,7 +543,7 @@ public function testDefaultJoinColumnName() $association->setTargetEntity('CmsUser'); $association->setInversedBy('users'); - $cm->addAssociation($association); + $cm->addProperty($association); $association = $cm->getProperty('user'); $joinTable = $association->getJoinTable(); @@ -568,7 +568,7 @@ public function testOneToOneUnderscoreNamingStrategyDefaults() $association->setTargetEntity('CmsUser'); - $metadata->addAssociation($association); + $metadata->addProperty($association); $association = $metadata->getProperty('user'); $joinColumns = $association->getJoinColumns(); @@ -590,7 +590,7 @@ public function testManyToManyUnderscoreNamingStrategyDefaults() $association->setTargetEntity('CmsUser'); - $metadata->addAssociation($association); + $metadata->addProperty($association); $association = $metadata->getProperty('user'); $joinTable = $association->getJoinTable(); @@ -613,7 +613,7 @@ public function testManyToManyUnderscoreNamingStrategyDefaults() $association->setTargetEntity(CMS\CmsUser::class); - $cm->addAssociation($association); + $cm->addProperty($association); $association = $cm->getProperty('author'); @@ -654,7 +654,7 @@ public function testJoinTableMappingDefaults() $association->setTargetEntity(CMS\CmsUser::class); - $metadata->addAssociation($association); + $metadata->addProperty($association); $association = $metadata->getProperty('author'); @@ -674,7 +674,7 @@ public function testMapIdentifierAssociation() $association->setTargetEntity(DDC117Article::class); $association->setPrimaryKey(true); - $cm->addAssociation($association); + $cm->addProperty($association); self::assertEquals(["article"], $cm->identifier); } @@ -696,7 +696,7 @@ public function testOrphanRemovalIdentifierAssociation() $association->setPrimaryKey(true); $association->setOrphanRemoval(true); - $cm->addAssociation($association); + $cm->addProperty($association); } /** @@ -716,7 +716,7 @@ public function testInverseIdentifierAssociation() $association->setPrimaryKey(true); $association->setMappedBy('details'); - $cm->addAssociation($association); + $cm->addProperty($association); } /** @@ -735,7 +735,7 @@ public function testIdentifierAssociationManyToMany() $association->setTargetEntity(DDC117Article::class); $association->setPrimaryKey(true); - $cm->addAssociation($association); + $cm->addProperty($association); } /** @@ -1134,7 +1134,7 @@ public function testTargetEntityNotFound() $association->setTargetEntity('UnknownClass'); - $cm->addAssociation($association); + $cm->addProperty($association); $this->expectException(MappingException::class); $this->expectExceptionMessage("The target-entity Doctrine\\Tests\\Models\\CMS\\UnknownClass cannot be found in '" . CMS\CmsUser::class . "#address'."); @@ -1223,13 +1223,13 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategy() $association->setTargetEntity('CmsUser'); - $addressMetadata->addAssociation($association); + $addressMetadata->addProperty($association); $association = new Mapping\ManyToManyAssociationMetadata('author'); $association->setTargetEntity(CMS\CmsUser::class); - $articleMetadata->addAssociation($association); + $articleMetadata->addProperty($association); self::assertEquals('routing_routingleg', $routingMetadata->table->getName()); self::assertEquals('cms_cmsaddress_cms_cmsuser', $addressMetadata->getProperty('user')->getJoinTable()->getName()); @@ -1283,7 +1283,7 @@ public function testInvalidCascade() $association->setTargetEntity('UnknownClass'); $association->setCascade(['invalid']); - $cm->addAssociation($association); + $cm->addProperty($association); } /** @@ -1300,7 +1300,7 @@ public function testInvalidPropertyAssociationOverrideNameException() $association->setTargetEntity('DDC964Address'); - $cm->addAssociation($association); + $cm->addProperty($association); $cm->setAssociationOverride(new Mapping\ManyToOneAssociationMetadata('invalidPropertyName')); } @@ -1363,7 +1363,7 @@ public function testManyToManySelfReferencingNamingStrategyDefaults() $association->setTargetEntity('CustomTypeParent'); - $cm->addAssociation($association); + $cm->addProperty($association); $association = $cm->getProperty('friendsWithMe'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php index f765b26f295..448fc8bd7c9 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php @@ -42,7 +42,7 @@ $association->setJoinColumns($joinColumns); $association->setTargetEntity('CmsUser'); -$metadata->addAssociation($association); +$metadata->addProperty($association); $metadata->addNamedNativeQuery( [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index d83021b631d..e0ea6d15c46 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -51,14 +51,14 @@ new Mapping\CacheMetadata(Mapping\CacheUsage::READ_ONLY, 'doctrine_tests_models_cache_city__state') ); -$metadata->addAssociation($association); +$metadata->addProperty($association); $association = new Mapping\ManyToManyAssociationMetadata('travels'); $association->setTargetEntity(Travel::class); $association->setMappedBy('visitedCities'); -$metadata->addAssociation($association); +$metadata->addProperty($association); $association = new Mapping\OneToManyAssociationMetadata('attractions'); @@ -69,4 +69,4 @@ new Mapping\CacheMetadata(Mapping\CacheUsage::READ_ONLY, 'doctrine_tests_models_cache_city__attractions') ); -$metadata->addAssociation($association); +$metadata->addProperty($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php index a20214d4409..2882f3e2655 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php @@ -25,6 +25,6 @@ $association->setTargetEntity('DDC3579Group'); -$metadata->addAssociation($association); +$metadata->addProperty($association); $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php index 630b73a266b..04db2e314ed 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php @@ -37,7 +37,7 @@ $association->setTargetEntity('DDC964Address'); $association->setCascade(['persist', 'merge']); -$metadata->addAssociation($association); +$metadata->addProperty($association); $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('ddc964_users_groups'); @@ -63,6 +63,6 @@ $association->setInversedBy('user'); $association->setCascade(['persist','merge','detach']); -$metadata->addAssociation($association); +$metadata->addProperty($association); $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php index c9b7151e848..28257bc9598 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php @@ -14,4 +14,4 @@ $association->setTargetEntity('PHPSLCFoo'); $association->setPrimaryKey(true); -$metadata->addAssociation($association); +$metadata->addProperty($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index 8dd5bd6e321..6eae0f2bd22 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -121,7 +121,7 @@ $association->setCascade(['remove']); $association->setOrphanRemoval(false); -$metadata->addAssociation($association); +$metadata->addProperty($association); $association = new Mapping\OneToManyAssociationMetadata('phonenumbers'); @@ -131,7 +131,7 @@ $association->setOrphanRemoval(true); $association->setOrderBy(['number' => 'ASC']); -$metadata->addAssociation($association); +$metadata->addProperty($association); $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('cms_users_groups'); @@ -158,4 +158,4 @@ $association->setTargetEntity(Group::class); $association->setCascade(['remove', 'persist', 'refresh', 'merge', 'detach']); -$metadata->addAssociation($association); +$metadata->addProperty($association); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index abece24a75c..d873e891a01 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -134,7 +134,7 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $association->setTargetEntity(EntityGeneratorAuthor::class); $association->setMappedBy('book'); - $metadata->addAssociation($association); + $metadata->addProperty($association); // Property: "comments" $joinTable = new Mapping\JoinTableMetadata(); @@ -158,7 +158,7 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $association->setTargetEntity(EntityGeneratorComment::class); $association->setFetchMode(Mapping\FetchMode::EXTRA_LAZY); - $metadata->addAssociation($association); + $metadata->addProperty($association); $metadata->addLifecycleCallback('loading', 'postLoad'); $metadata->addLifecycleCallback('willBeRemoved', 'preRemove'); @@ -734,7 +734,7 @@ public function testGenerateEntityWithMultipleInverseJoinColumns() $association->setJoinTable($joinTable); $association->setTargetEntity('DDC2079CentroCusto'); - $metadata->addAssociation($association); + $metadata->addProperty($association); $this->generator->writeEntityClass($metadata, $this->tmpDir); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php index ee9c9dab0c0..7df53ef8cc8 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php @@ -59,7 +59,7 @@ $association->setTargetEntity(Export\Group::class); -$metadata->addAssociation($association); +$metadata->addProperty($association); // Property: "address" $joinColumns = []; @@ -81,7 +81,7 @@ $association->setFetchMode(Mapping\FetchMode::EAGER); $association->setOrphanRemoval(true); -$metadata->addAssociation($association); +$metadata->addProperty($association); // Property: "cart" $association = new Mapping\OneToOneAssociationMetadata('cart'); @@ -92,7 +92,7 @@ $association->setFetchMode(Mapping\FetchMode::EAGER); $association->setOrphanRemoval(false); -$metadata->addAssociation($association); +$metadata->addProperty($association); // Property: "phonenumbers" $association = new Mapping\OneToManyAssociationMetadata('phonenumbers'); @@ -104,7 +104,7 @@ $association->setOrphanRemoval(true); $association->setOrderBy(['number' => 'ASC']); -$metadata->addAssociation($association); +$metadata->addProperty($association); // Property: "groups" $joinTable = new Mapping\JoinTableMetadata(); @@ -132,4 +132,4 @@ $association->setCascade(['remove', 'persist', 'refresh', 'merge', 'detach']); $association->setFetchMode(Mapping\FetchMode::EXTRA_LAZY); -$metadata->addAssociation($association); +$metadata->addProperty($association); From 5bfdaaaa73efa1f5c500cba119501c42fe9746cc Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Tue, 21 Mar 2017 23:40:57 -0400 Subject: [PATCH 122/275] Merged addInheritedProperty and addInheritedAssociation --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 64 +++++++------------ .../ORM/Mapping/ClassMetadataFactory.php | 8 +-- .../Tests/ORM/Mapping/ClassMetadataTest.php | 4 +- 3 files changed, 27 insertions(+), 49 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 21c65d00131..564975afeb1 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -629,17 +629,20 @@ public function validateIdentifier() */ public function validateAssociations() { - foreach ($this->properties as $fieldName => $property) { - if (! ($property instanceof AssociationMetadata)) { - continue; - } + array_map( + function (Property $property) { + if (! ($property instanceof AssociationMetadata)) { + return; + } - $targetEntity = $property->getTargetEntity(); + $targetEntity = $property->getTargetEntity(); - if ( ! class_exists($targetEntity, true)) { - throw MappingException::invalidTargetEntityClass($targetEntity, $this->name, $fieldName); - } - } + if ( ! class_exists($targetEntity, true)) { + throw MappingException::invalidTargetEntityClass($targetEntity, $this->name, $property->getName()); + } + }, + $this->properties + ); } /** @@ -1603,8 +1606,8 @@ public function addProperty(Property $property) /** * INTERNAL: - * Adds a field mapping without completing/validating it. - * This is mainly used to add inherited field mappings to derived classes. + * Adds a property mapping without completing/validating it. + * This is mainly used to add inherited property mappings to derived classes. * * @param Property $property * @@ -1615,42 +1618,23 @@ public function addInheritedProperty(Property $property) $inheritedProperty = clone $property; $declaringClass = $property->getDeclaringClass(); - if (! $declaringClass->isMappedSuperclass) { - $inheritedProperty->setTableName($property->getTableName()); + if ($inheritedProperty instanceof FieldMetadata) { + if (! $declaringClass->isMappedSuperclass) { + $inheritedProperty->setTableName($property->getTableName()); + } + + $this->fieldNames[$property->getColumnName()] = $property->getName(); + } else if ($inheritedProperty instanceof AssociationMetadata) { + if ($declaringClass->isMappedSuperclass) { + $inheritedProperty->setSourceEntity($this->name); + } } $this->assertPropertyNotMapped($property->getName()); - $this->fieldNames[$property->getColumnName()] = $property->getName(); $this->properties[$property->getName()] = $inheritedProperty; } - /** - * INTERNAL: - * Adds an association mapping without completing/validating it. - * This is mainly used to add inherited association mappings to derived classes. - * - * @param AssociationMetadata $association - * - * @return void - * - * @throws MappingException - */ - public function addInheritedAssociation(AssociationMetadata $association) - { - /* @var AssociationMetadata $inheritedAssociation */ - $inheritedAssociation = clone $association; - $declaringClass = $association->getDeclaringClass(); - - if ($declaringClass->isMappedSuperclass) { - $inheritedAssociation->setSourceEntity($this->name); - } - - $this->assertPropertyNotMapped($association->getName()); - - $this->properties[$association->getName()] = $inheritedAssociation; - } - /** * INTERNAL: * Adds a named query to this class. diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 362a64f3777..af73ab8f644 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -449,17 +449,11 @@ private function addInheritedProperties(ClassMetadata $subClass, ClassMetadata $ $isAbstract = $parentClass->isMappedSuperclass; foreach ($parentClass->getProperties() as $fieldName => $property) { - if ($property instanceof FieldMetadata) { - $subClass->addInheritedProperty($property); - - continue; - } - if ($isAbstract && $property instanceof ToManyAssociationMetadata && ! $property->isOwningSide()) { throw MappingException::illegalToManyAssociationOnMappedSuperclass($parentClass->name, $fieldName); } - $subClass->addInheritedAssociation($property); + $subClass->addInheritedProperty($property); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 91ca816f63f..0697e2f311f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -318,7 +318,7 @@ public function testDuplicateAssociationMappingException() $association->setTargetEntity('stdClass'); $association->setMappedBy('foo'); - $cm->addInheritedAssociation($association); + $cm->addInheritedProperty($association); $this->expectException(MappingException::class); @@ -329,7 +329,7 @@ public function testDuplicateAssociationMappingException() $association->setTargetEntity('stdClass'); $association->setMappedBy('foo'); - $cm->addInheritedAssociation($association); + $cm->addInheritedProperty($association); } public function testDuplicateColumnName_ThrowsMappingException() From 60f5b90624846cf36afe8db72f6a053fc698fa65 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 22 Mar 2017 00:18:02 -0400 Subject: [PATCH 123/275] Merged setAttributeOverride and setAssociationOverride into setPropertyOverride --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 343 +++++++++--------- .../ORM/Mapping/Driver/AnnotationDriver.php | 4 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 4 +- lib/Doctrine/ORM/Mapping/MappingException.php | 6 +- .../ORM/Query/ResultSetMappingBuilder.php | 13 +- .../ORM/Tools/ResolveTargetEntityListener.php | 13 - .../Tests/Models/DDC3579/DDC3579Admin.php | 2 +- .../Tests/Models/DDC964/DDC964Admin.php | 4 +- .../Tests/Models/DDC964/DDC964Guest.php | 4 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 4 +- ...rine.Tests.Models.DDC3579.DDC3579Admin.php | 2 +- ...ctrine.Tests.Models.DDC964.DDC964Admin.php | 4 +- ...ctrine.Tests.Models.DDC964.DDC964Guest.php | 4 +- 13 files changed, 196 insertions(+), 211 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 564975afeb1..1881c0c0c1e 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1388,81 +1388,68 @@ public function setInheritanceType($type) } /** - * Sets the association to override association mapping of property for an entity relationship. + * Sets the override property mapping for an entity relationship. * - * @param AssociationMetadata $associationMetadata + * @param Property $property * * @return void * + * @throws \RuntimeException * @throws MappingException + * @throws CacheException */ - public function setAssociationOverride(AssociationMetadata $associationMetadata) + public function setPropertyOverride(Property $property) { - $fieldName = $associationMetadata->getName(); + $fieldName = $property->getName(); if (! isset($this->properties[$fieldName])) { throw MappingException::invalidOverrideFieldName($this->name, $fieldName); } - /** @var AssociationMetadata $originalAssociation */ - $originalAssociation = $this->properties[$fieldName]; + $originalProperty = $this->getProperty($fieldName); - // Do not allow to change association type - if (get_class($originalAssociation) !== get_class($associationMetadata)) { - throw MappingException::invalidOverrideAssociationType($this->name, $fieldName); + // Do not allow to change property type + if (get_class($originalProperty) !== get_class($property)) { + throw MappingException::invalidOverridePropertyType($this->name, $fieldName); } - unset($this->properties[$originalAssociation->getName()]); - - // Unset all defined fieldNames prior to override - if ($originalAssociation instanceof ToOneAssociationMetadata && $originalAssociation->isOwningSide()) { - foreach ($originalAssociation->getJoinColumns() as $joinColumn) { - unset($this->fieldNames[$joinColumn->getColumnName()]); - } + // Do not allow to change version property + if ($originalProperty instanceof VersionFieldMetadata) { + throw MappingException::invalidOverrideVersionField($this->name, $fieldName); } - // Override what it should be allowed - if ($associationMetadata->getInversedBy()) { - $originalAssociation->setInversedBy($associationMetadata->getInversedBy()); - } + unset($this->properties[$fieldName]); - if ($originalAssociation instanceof ToOneAssociationMetadata && $associationMetadata->getJoinColumns()) { - $originalAssociation->setJoinColumns($associationMetadata->getJoinColumns()); - } else if ($originalAssociation instanceof ManyToManyAssociationMetadata && $associationMetadata->getJoinTable()) { - $originalAssociation->setJoinTable($associationMetadata->getJoinTable()); - } + if ($property instanceof FieldMetadata) { + // Unset defined fieldName prior to override + unset($this->fieldNames[$originalProperty->getColumnName()]); - $this->addProperty($originalAssociation); - } + // Revert what should not be allowed to change + $property->setDeclaringClass($originalProperty->getDeclaringClass()); + $property->setPrimaryKey($originalProperty->isPrimaryKey()); + } else if ($property instanceof AssociationMetadata) { + // Unset all defined fieldNames prior to override + if ($originalProperty instanceof ToOneAssociationMetadata && $originalProperty->isOwningSide()) { + foreach ($originalProperty->getJoinColumns() as $joinColumn) { + unset($this->fieldNames[$joinColumn->getColumnName()]); + } + } - /** - * Sets the override for a mapped field. - * - * @param FieldMetadata $fieldMetadata - * - * @return void - * - * @throws MappingException - */ - public function setAttributeOverride(FieldMetadata $fieldMetadata) - { - $originalProperty = $this->getProperty($fieldMetadata->getName()); + // Override what it should be allowed to change + if ($property->getInversedBy()) { + $originalProperty->setInversedBy($property->getInversedBy()); + } - if ( ! $originalProperty) { - throw MappingException::invalidOverrideFieldName($this->name, $fieldMetadata->getName()); - } + if ($originalProperty instanceof ToOneAssociationMetadata && $property->getJoinColumns()) { + $originalProperty->setJoinColumns($property->getJoinColumns()); + } else if ($originalProperty instanceof ManyToManyAssociationMetadata && $property->getJoinTable()) { + $originalProperty->setJoinTable($property->getJoinTable()); + } - if ($originalProperty instanceof VersionFieldMetadata) { - throw MappingException::invalidOverrideVersionField($this->name, $fieldMetadata->getName()); + $property = $originalProperty; } - $fieldMetadata->setDeclaringClass($originalProperty->getDeclaringClass()); - $fieldMetadata->setPrimaryKey($originalProperty->isPrimaryKey()); - - unset($this->fieldNames[$originalProperty->getColumnName()]); - unset($this->properties[$originalProperty->getName()]); - - $this->addProperty($fieldMetadata); + $this->addProperty($property); } /** @@ -1990,39 +1977,6 @@ public function hasSqlResultSetMapping($name) return isset($this->sqlResultSetMappings[$name]); } - /** - * {@inheritDoc} - * - * @todo guilhermeblanco Remove this method (it exists in Persistence repo) - */ - public function hasAssociation($fieldName) - { - return isset($this->properties[$fieldName]) - && $this->properties[$fieldName] instanceof AssociationMetadata; - } - - /** - * {@inheritDoc} - * - * @todo guilhermeblanco Remove this method (it exists in Persistence repo) - */ - public function isSingleValuedAssociation($fieldName) - { - return isset($this->properties[$fieldName]) - && $this->properties[$fieldName] instanceof ToOneAssociationMetadata; - } - - /** - * {@inheritDoc} - * - * @todo guilhermeblanco Remove this method (it exists in Persistence repo) - */ - public function isCollectionValuedAssociation($fieldName) - { - return isset($this->properties[$fieldName]) - && $this->properties[$fieldName] instanceof ToManyAssociationMetadata; - } - /** * Sets the ID generator used to generate IDs for instances of this class. * @@ -2123,50 +2077,6 @@ public function isReadOnly() return $this->readOnly; } - /** - * {@inheritDoc} - */ - public function getFieldNames() - { - $fields = array_filter( - $this->properties, - function (Property $property) { return $property instanceof FieldMetadata; } - ); - - return array_keys($fields); - } - - /** - * {@inheritDoc} - */ - public function getAssociationNames() - { - $associations = array_filter( - $this->properties, - function (Property $property) { return $property instanceof AssociationMetadata; } - ); - - return array_keys($associations); - } - - /** - * {@inheritDoc} - * - * @throws InvalidArgumentException - * - * @todo guilhermeblanco Remove this method (it exists in Persistence repo) - */ - public function getAssociationTargetClass($assocName) - { - $property = $this->properties[$assocName]; - - if (! ($property instanceof AssociationMetadata)) { - throw new InvalidArgumentException("Association name expected, '" . $assocName ."' is not an association."); - } - - return $property->getTargetEntity(); - } - /** * {@inheritDoc} */ @@ -2183,54 +2093,6 @@ public function isVersioned() return $this->versionProperty !== null; } - /** - * {@inheritDoc} - * - * @todo guilhermeblanco Remove this method (it exists in Persistence repo) - */ - public function isAssociationInverseSide($fieldName) - { - return isset($this->properties[$fieldName]) - && $this->properties instanceof AssociationMetadata - && ! $this->properties[$fieldName]->isOwningSide(); - } - - /** - * {@inheritDoc} - * - * @todo guilhermeblanco Remove this method (it exists in Persistence repo) - */ - public function getAssociationMappedByTargetField($fieldName) - { - return $this->properties[$fieldName]->getMappedBy(); - } - - /** - * @param string $targetClass - * - * @return array - * - * @todo guilhermeblanco Remove this method (it exists in Persistence repo). One usage left. - */ - public function getAssociationsByTargetClass($targetClass) - { - $associations = []; - - foreach ($this->properties as $association) { - if (! ($association instanceof AssociationMetadata)) { - continue; - } - - if ($association->getTargetEntity() !== $targetClass) { - continue; - } - - $associations[$association->getName()] = $association; - } - - return $associations; - } - /** * @param string|null $className * @@ -2358,4 +2220,133 @@ public function getSequencePrefix(AbstractPlatform $platform) return $sequencePrefix; } + + /** + * {@inheritDoc} + * + * @todo guilhermeblanco Remove this method (it exists in Persistence repo) + */ + public function hasAssociation($fieldName) + { + return isset($this->properties[$fieldName]) + && $this->properties[$fieldName] instanceof AssociationMetadata; + } + + /** + * {@inheritDoc} + * + * @todo guilhermeblanco Remove this method (it exists in Persistence repo) + */ + public function isSingleValuedAssociation($fieldName) + { + return isset($this->properties[$fieldName]) + && $this->properties[$fieldName] instanceof ToOneAssociationMetadata; + } + + /** + * {@inheritDoc} + * + * @todo guilhermeblanco Remove this method (it exists in Persistence repo) + */ + public function isCollectionValuedAssociation($fieldName) + { + return isset($this->properties[$fieldName]) + && $this->properties[$fieldName] instanceof ToManyAssociationMetadata; + } + + /** + * {@inheritDoc} + * + * @todo guilhermeblanco Remove this method (it exists in Persistence repo) + */ + public function getFieldNames() + { + $fields = array_filter( + $this->properties, + function (Property $property) { return $property instanceof FieldMetadata; } + ); + + return array_keys($fields); + } + + /** + * {@inheritDoc} + * + * @todo guilhermeblanco Remove this method (it exists in Persistence repo) + */ + public function getAssociationNames() + { + $associations = array_filter( + $this->properties, + function (Property $property) { return $property instanceof AssociationMetadata; } + ); + + return array_keys($associations); + } + + /** + * {@inheritDoc} + * + * @throws InvalidArgumentException + * + * @todo guilhermeblanco Remove this method (it exists in Persistence repo) + */ + public function getAssociationTargetClass($assocName) + { + $property = $this->properties[$assocName]; + + if (! ($property instanceof AssociationMetadata)) { + throw new InvalidArgumentException("Association name expected, '" . $assocName ."' is not an association."); + } + + return $property->getTargetEntity(); + } + + /** + * {@inheritDoc} + * + * @todo guilhermeblanco Remove this method (it exists in Persistence repo) + */ + public function isAssociationInverseSide($fieldName) + { + return isset($this->properties[$fieldName]) + && $this->properties instanceof AssociationMetadata + && ! $this->properties[$fieldName]->isOwningSide(); + } + + /** + * {@inheritDoc} + * + * @todo guilhermeblanco Remove this method (it exists in Persistence repo) + */ + public function getAssociationMappedByTargetField($fieldName) + { + return $this->properties[$fieldName]->getMappedBy(); + } + + /** + * @param string $targetClass + * + * @return array + * + * @todo guilhermeblanco Remove this method (it exists in Persistence repo). + */ + public function getAssociationsByTargetClass($targetClass) + { + $associations = []; + + foreach ($this->properties as $association) { + if (! ($association instanceof AssociationMetadata)) { + continue; + } + + if ($association->getTargetEntity() !== $targetClass) { + continue; + } + + $associations[$association->getName()] = $association; + } + + return $associations; + } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 8fbe9a735c7..e32fa122aea 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -429,7 +429,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat ); } - $metadata->setAssociationOverride($override); + $metadata->setPropertyOverride($override); } } @@ -444,7 +444,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat false ); - $metadata->setAttributeOverride($fieldMetadata); + $metadata->setPropertyOverride($fieldMetadata); } } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 459365adb20..b19963bcb1e 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -627,7 +627,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) foreach ($overrideElement->field as $fieldElement) { $fieldMetadata = $this->convertFieldElementToFieldMetadata($fieldElement, $fieldName, false); - $metadata->setAttributeOverride($fieldMetadata); + $metadata->setPropertyOverride($fieldMetadata); } } } @@ -700,7 +700,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) ); } - $metadata->setAssociationOverride($override); + $metadata->setPropertyOverride($override); } } diff --git a/lib/Doctrine/ORM/Mapping/MappingException.php b/lib/Doctrine/ORM/Mapping/MappingException.php index 05ce6b4e52e..7263219b47b 100644 --- a/lib/Doctrine/ORM/Mapping/MappingException.php +++ b/lib/Doctrine/ORM/Mapping/MappingException.php @@ -140,16 +140,16 @@ public static function invalidOverrideFieldName($className, $fieldName) } /** - * Exception for invalid association type override. + * Exception for invalid property type override. * * @param string $className The entity's name. * @param string $fieldName * * @return MappingException */ - public static function invalidOverrideAssociationType($className, $fieldName) + public static function invalidOverridePropertyType($className, $fieldName) { - return new self("Invalid association override named '$fieldName' for class '$className'."); + return new self("Invalid property override named '$fieldName' for class '$className'."); } /** diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index af4ee7a57b6..e0869912f61 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -340,12 +340,19 @@ public function addNamedNativeQueryResultSetMapping(ClassMetadata $class, $resul } else { $shortName = $classMetadata->reflClass->getShortName(); $joinAlias = strtolower($shortName[0]) . ++ $counter; - $associations = $class->getAssociationsByTargetClass($classMetadata->name); $this->addNamedNativeQueryEntityResultMapping($classMetadata, $entityMapping, $joinAlias); - foreach ($associations as $relation => $association) { - $this->addJoinedEntityResult($association->getTargetEntity(), $joinAlias, $rootAlias, $relation); + foreach ($class->getProperties() as $fieldName => $association) { + if (! ($association instanceof AssociationMetadata)) { + continue; + } + + if ($association->getTargetEntity() !== $classMetadata->name) { + continue; + } + + $this->addJoinedEntityResult($association->getTargetEntity(), $joinAlias, $rootAlias, $fieldName); } } diff --git a/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php b/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php index 5df14e8ddeb..6f247b51f60 100644 --- a/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php +++ b/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php @@ -120,17 +120,4 @@ public function loadClassMetadata(LoadClassMetadataEventArgs $args) } } } - - /** - * @param ClassMetadata $classMetadata - * @param AssociationMetadata $association - * - * @return void - */ - private function remapAssociation(ClassMetadata $classMetadata, AssociationMetadata $association) - { - $associationOverride = $this->resolveTargetEntities[$association->getTargetEntity()]; - - $classMetadata->setAssociationOverride($associationOverride); - } } diff --git a/tests/Doctrine/Tests/Models/DDC3579/DDC3579Admin.php b/tests/Doctrine/Tests/Models/DDC3579/DDC3579Admin.php index dee154391a5..8e5fc15c85b 100644 --- a/tests/Doctrine/Tests/Models/DDC3579/DDC3579Admin.php +++ b/tests/Doctrine/Tests/Models/DDC3579/DDC3579Admin.php @@ -22,6 +22,6 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association->setInversedBy('admins'); - $metadata->setAssociationOverride($association); + $metadata->setPropertyOverride($association); } } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php b/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php index 9f7e41f586a..afc52e1d9d8 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php @@ -40,7 +40,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association->setJoinColumns($joinColumns); - $metadata->setAssociationOverride($association); + $metadata->setPropertyOverride($association); $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('ddc964_users_admingroups'); @@ -59,6 +59,6 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association->setJoinTable($joinTable); - $metadata->setAssociationOverride($association); + $metadata->setPropertyOverride($association); } } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php b/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php index fd37c4f78c4..21a8684ae09 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php @@ -38,7 +38,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata->setColumnName('guest_id'); $fieldMetadata->setPrimaryKey(true); - $metadata->setAttributeOverride($fieldMetadata); + $metadata->setPropertyOverride($fieldMetadata); $fieldMetadata = new Mapping\FieldMetadata('name'); @@ -48,6 +48,6 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata->setNullable(false); $fieldMetadata->setUnique(true); - $metadata->setAttributeOverride($fieldMetadata); + $metadata->setPropertyOverride($fieldMetadata); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 0697e2f311f..e37526565bc 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -1302,7 +1302,7 @@ public function testInvalidPropertyAssociationOverrideNameException() $cm->addProperty($association); - $cm->setAssociationOverride(new Mapping\ManyToOneAssociationMetadata('invalidPropertyName')); + $cm->setPropertyOverride(new Mapping\ManyToOneAssociationMetadata('invalidPropertyName')); } /** @@ -1323,7 +1323,7 @@ public function testInvalidPropertyAttributeOverrideNameException() $fieldMetadata = new Mapping\FieldMetadata('invalidPropertyName'); $fieldMetadata->setType(Type::getType('string')); - $metadata->setAttributeOverride($fieldMetadata); + $metadata->setPropertyOverride($fieldMetadata); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579Admin.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579Admin.php index cfdca4feefa..a05292b0927 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579Admin.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579Admin.php @@ -6,4 +6,4 @@ $association->setInversedBy('admins'); -$metadata->setAssociationOverride($association); +$metadata->setPropertyOverride($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php index 7054b47954e..255e59c90bf 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php @@ -16,7 +16,7 @@ $association->setJoinColumns($joinColumns); -$metadata->setAssociationOverride($association); +$metadata->setPropertyOverride($association); $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('ddc964_users_admingroups'); @@ -35,4 +35,4 @@ $association->setJoinTable($joinTable); -$metadata->setAssociationOverride($association); +$metadata->setPropertyOverride($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Guest.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Guest.php index f3f4c6e9f0f..a60523aeccc 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Guest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Guest.php @@ -9,7 +9,7 @@ $fieldMetadata->setColumnName('guest_id'); $fieldMetadata->setPrimaryKey(true); -$metadata->setAttributeOverride($fieldMetadata); +$metadata->setPropertyOverride($fieldMetadata); $fieldMetadata = new Mapping\FieldMetadata('name'); @@ -19,4 +19,4 @@ $fieldMetadata->setNullable(false); $fieldMetadata->setUnique(true); -$metadata->setAttributeOverride($fieldMetadata); +$metadata->setPropertyOverride($fieldMetadata); From ab73a2093c5af296e5273538123237480a9d71bb Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 22 Mar 2017 11:05:16 -0400 Subject: [PATCH 124/275] Fixes #6302 --- .../ORM/Functional/ManyToManyBasicAssociationTest.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Functional/ManyToManyBasicAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/ManyToManyBasicAssociationTest.php index 97098e4854b..489e87451a9 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ManyToManyBasicAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ManyToManyBasicAssociationTest.php @@ -516,8 +516,13 @@ public function testMatchingWithLimitAndOffset() $groups = $user->groups; self::assertFalse($user->groups->isInitialized(), "Pre-condition: lazy collection"); - $criteria = Criteria::create()->setFirstResult(1)->setMaxResults(3); - $result = $groups->matching($criteria); + $criteria = Criteria::create() + ->orderBy(['id' => Criteria::ASC]) + ->setFirstResult(1) + ->setMaxResults(3) + ; + + $result = $groups->matching($criteria); self::assertCount(3, $result); From 6b47f880774f2021231c3d0c611917d6b87f20ce Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 22 Mar 2017 22:15:38 -0400 Subject: [PATCH 125/275] Minor optimizations --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 54 +++++++---------- lib/Doctrine/ORM/UnitOfWork.php | 39 +++++-------- lib/Doctrine/ORM/Utility/PersisterHelper.php | 61 ++++++-------------- 3 files changed, 54 insertions(+), 100 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 1881c0c0c1e..824fbb2fb51 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -19,19 +19,12 @@ namespace Doctrine\ORM\Mapping; -use BadMethodCallException; -use Doctrine\Common\ClassLoader; use Doctrine\Common\Persistence\Mapping\ClassMetadata as ClassMetadataInterface; use Doctrine\DBAL\Platforms\AbstractPlatform; -use Doctrine\DBAL\Types\Type; use Doctrine\Instantiator\Instantiator; use Doctrine\ORM\Cache\CacheException; -use Doctrine\ORM\EntityManager; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Utility\PersisterHelper; -use InvalidArgumentException; -use ReflectionClass; -use RuntimeException; /** * A ClassMetadata instance holds all the object-relational mapping metadata @@ -315,7 +308,7 @@ class ClassMetadata implements ClassMetadataInterface /** * The ReflectionClass instance of the mapped class. * - * @var ReflectionClass + * @var \ReflectionClass */ public $reflClass; @@ -991,7 +984,7 @@ protected function validateAndCompleteToOneAssociationMetadata(ToOneAssociationM if ($uniqueConstraintColumns) { if ( ! $this->table) { - throw new RuntimeException( + throw new \RuntimeException( "ClassMetadata::setTable() has to be called before defining a one to one relationship." ); } @@ -1031,7 +1024,6 @@ protected function validateAndCompleteToOneAssociationMetadata(ToOneAssociationM * * @param ToManyAssociationMetadata $property The association mapping to validate & complete. * - * @throws RuntimeException * @throws MappingException */ protected function validateAndCompleteToManyAssociationMetadata(ToManyAssociationMetadata $property) @@ -1045,9 +1037,6 @@ protected function validateAndCompleteToManyAssociationMetadata(ToManyAssociatio * Validates & completes a one-to-one association mapping. * * @param OneToOneAssociationMetadata $property The association mapping to validate & complete. - * - * @throws \RuntimeException - * @throws MappingException */ protected function validateAndCompleteOneToOneMapping(OneToOneAssociationMetadata $property) { @@ -1059,7 +1048,6 @@ protected function validateAndCompleteOneToOneMapping(OneToOneAssociationMetadat * * @param ManyToOneAssociationMetadata $property The association mapping to validate & complete. * - * @throws \RuntimeException * @throws MappingException */ protected function validateAndCompleteManyToOneMapping(ManyToOneAssociationMetadata $property) @@ -1075,7 +1063,6 @@ protected function validateAndCompleteManyToOneMapping(ManyToOneAssociationMetad * * @param OneToManyAssociationMetadata $property The association mapping to validate & complete. * - * @throws \RuntimeException * @throws MappingException */ protected function validateAndCompleteOneToManyMapping(OneToManyAssociationMetadata $property) @@ -1104,7 +1091,6 @@ protected function validateAndCompleteOneToManyMapping(OneToManyAssociationMetad * * @param ManyToManyAssociationMetadata $property The association mapping to validate & complete. * - * @throws \RuntimeException * @throws MappingException */ protected function validateAndCompleteManyToManyMapping(ManyToManyAssociationMetadata $property) @@ -1452,22 +1438,6 @@ public function setPropertyOverride(Property $property) $this->addProperty($property); } - /** - * Gets the type of a field. - * - * @param string $fieldName - * - * @return \Doctrine\DBAL\Types\Type|string|null - * - * @todo 3.0 Remove this. PersisterHelper should fix it somehow - */ - public function getTypeOfField($fieldName) - { - return isset($this->properties[$fieldName]) - ? $this->properties[$fieldName]->getType() - : null; - } - /** * Checks if this entity is the root in any entity-inheritance-hierarchy. * @@ -2287,7 +2257,7 @@ function (Property $property) { return $property instanceof AssociationMetadata; /** * {@inheritDoc} * - * @throws InvalidArgumentException + * @throws \InvalidArgumentException * * @todo guilhermeblanco Remove this method (it exists in Persistence repo) */ @@ -2296,7 +2266,7 @@ public function getAssociationTargetClass($assocName) $property = $this->properties[$assocName]; if (! ($property instanceof AssociationMetadata)) { - throw new InvalidArgumentException("Association name expected, '" . $assocName ."' is not an association."); + throw new \InvalidArgumentException("Association name expected, '" . $assocName ."' is not an association."); } return $property->getTargetEntity(); @@ -2349,4 +2319,20 @@ public function getAssociationsByTargetClass($targetClass) return $associations; } + + /** + * Gets the type of a field. + * + * @param string $fieldName + * + * @return \Doctrine\DBAL\Types\Type|string|null + * + * @todo guilhermeblanco Remove this method (it exists in Persistence repo). + */ + public function getTypeOfField($fieldName) + { + return isset($this->properties[$fieldName]) + ? $this->properties[$fieldName]->getType() + : null; + } } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 20dfe875cae..7ed74637e1f 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -58,6 +58,7 @@ use Doctrine\ORM\Query\AST\Join; use Doctrine\ORM\Sequencing\AssignedGenerator; use Doctrine\ORM\Utility\IdentifierFlattener; +use Doctrine\ORM\Utility\PersisterHelper; use Exception; use InvalidArgumentException; use UnexpectedValueException; @@ -913,11 +914,15 @@ private function persistNew($class, $entity) $idGen = $class->idGenerator; - if ( ! $idGen->isPostInsertGenerator()) { + if (! $idGen->isPostInsertGenerator()) { $idValue = $idGen->generate($this->em, $entity); - if ( ! $idGen instanceof AssignedGenerator) { - $idValue = [$class->getSingleIdentifierFieldName() => $this->convertSingleFieldIdentifierToPHPValue($class, $idValue)]; + if (! $idGen instanceof AssignedGenerator) { + $idField = $class->getSingleIdentifierFieldName(); + $property = $class->getProperty($idField); + $platform = $this->em->getConnection()->getDatabasePlatform(); + $idValue = $property->getType()->convertToPHPValue($idValue, $platform); + $idValue = [$idField => $idValue]; $class->assignIdentifier($entity, $idValue); } @@ -1036,11 +1041,11 @@ private function executeInserts($class) // Persister returned post-insert IDs foreach ($postInsertIds as $postInsertId) { $idField = $class->getSingleIdentifierFieldName(); - $idValue = $this->convertSingleFieldIdentifierToPHPValue($class, $postInsertId['generatedId']); $property = $class->getProperty($idField); - - $entity = $postInsertId['entity']; - $oid = spl_object_hash($entity); + $platform = $this->em->getConnection()->getDatabasePlatform(); + $idValue = $property->getType()->convertToPHPValue($postInsertId['generatedId'], $platform); + $entity = $postInsertId['entity']; + $oid = spl_object_hash($entity); $property->setValue($entity, $idValue); @@ -1053,7 +1058,9 @@ private function executeInserts($class) } foreach ($entities as $entity) { - $this->listenersInvoker->invoke($class, Events::postPersist, $entity, new LifecycleEventArgs($entity, $this->em), $invoke); + $eventArgs = new LifecycleEventArgs($entity, $this->em); + + $this->listenersInvoker->invoke($class, Events::postPersist, $entity, $eventArgs, $invoke); } } @@ -3516,20 +3523,4 @@ public function hydrationComplete() { $this->hydrationCompleteHandler->hydrationComplete(); } - - /** - * @param ClassMetadata $class - * @param mixed $identifierValue - * - * @return mixed the identifier after type conversion - * - * @throws \Doctrine\ORM\Mapping\MappingException if the entity has more than a single identifier - */ - private function convertSingleFieldIdentifierToPHPValue(ClassMetadata $class, $identifierValue) - { - $platform = $this->em->getConnection()->getDatabasePlatform(); - $type = $class->getTypeOfField($class->getSingleIdentifierFieldName()); - - return $type->convertToPHPValue($identifierValue, $platform); - } } diff --git a/lib/Doctrine/ORM/Utility/PersisterHelper.php b/lib/Doctrine/ORM/Utility/PersisterHelper.php index b3ac8bd8d26..13059814f46 100644 --- a/lib/Doctrine/ORM/Utility/PersisterHelper.php +++ b/lib/Doctrine/ORM/Utility/PersisterHelper.php @@ -26,6 +26,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\Query\QueryException; /** @@ -38,46 +39,6 @@ */ class PersisterHelper { - /** - * @param string $fieldName - * @param ClassMetadata $class - * @param EntityManagerInterface $em - * - * @return array - * - * @throws QueryException - */ - public static function getTypeOfField($fieldName, ClassMetadata $class, EntityManagerInterface $em) - { - $property = $class->getProperty($fieldName); - - if (! $property) { - return []; - } - - if ($property instanceof FieldMetadata) { - return [$property->getType()]; - } - - $targetEntity = $property->getTargetEntity(); - $targetClass = $em->getClassMetadata($targetEntity); - - if (! $property->isOwningSide()) { - return self::getTypeOfField($property->getMappedBy(), $targetClass, $em); - } - - $types = []; - $joinColumns = $property instanceof ManyToManyAssociationMetadata - ? $property->getJoinTable()->getJoinColumns() - : $property->getJoinColumns(); - - foreach ($joinColumns as $joinColumn) { - $types[] = self::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $em); - } - - return $types; - } - /** * @param string $columnName * @param ClassMetadata $class @@ -93,8 +54,24 @@ public static function getTypeOfColumn($columnName, ClassMetadata $class, Entity $fieldName = $class->fieldNames[$columnName]; $property = $class->getProperty($fieldName); - if ($property instanceof FieldMetadata) { - return $property->getType(); + switch (true) { + case ($property instanceof FieldMetadata): + return $property->getType(); + + // Optimization: Do not loop through all properties later since we can recognize to-one owning scenario + case ($property instanceof ToOneAssociationMetadata): + // We know this is the owning side of a to-one because we found columns in the class (join columns) + foreach ($property->getJoinColumns() as $joinColumn) { + if ($joinColumn->getColumnName() !== $columnName) { + continue; + } + + $targetClass = $em->getClassMetadata($property->getTargetEntity()); + + return self::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $em); + } + + break; } } From ea32eb3e31381addae68948c6b96d2670f068128 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 22 Mar 2017 22:25:29 -0400 Subject: [PATCH 126/275] More centralization around identifier flattening --- .../Internal/Hydration/AbstractHydrator.php | 34 ------------------- .../ORM/Internal/Hydration/ObjectHydrator.php | 24 +++---------- .../Hydration/SimpleObjectHydrator.php | 4 ++- lib/Doctrine/ORM/UnitOfWork.php | 9 ++--- 4 files changed, 10 insertions(+), 61 deletions(-) diff --git a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php index 7085003b4f5..1381fef2e81 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php @@ -449,38 +449,4 @@ protected function getClassMetadata($className) return $this->metadataCache[$className]; } - - /** - * Register entity as managed in UnitOfWork. - * - * @param ClassMetadata $class - * @param object $entity - * @param array $data - * - * @return void - */ - protected function registerManaged(ClassMetadata $class, $entity, array $data) - { - // TODO: All of the following share similar logic, consider refactoring: AbstractHydrator::registerManaged, - // ObjectHydrator::getEntityFromIdentityMap and UnitOfWork::createEntity(). - // $id = $this->identifierFlattener->flattenIdentifier($class, $data); - $id = []; - - foreach ($class->identifier as $fieldName) { - $property = $class->getProperty($fieldName); - - if (! ($property instanceof ToOneAssociationMetadata)) { - $id[$fieldName] = $data[$fieldName]; - - continue; - } - - $joinColumns = $property->getJoinColumns(); - $joinColumn = reset($joinColumns); - - $id[$fieldName] = $data[$joinColumn->getColumnName()]; - } - - $this->em->getUnitOfWork()->registerManaged($entity, $id, $data); - } } diff --git a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php index 007bbaa69b7..76bf2412d26 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php @@ -266,7 +266,9 @@ private function getEntity(array $data, $dqlAlias) } if (isset($this->hints[Query::HINT_REFRESH_ENTITY]) && isset($this->rootAliases[$dqlAlias])) { - $this->registerManaged($this->metadataCache[$className], $this->hints[Query::HINT_REFRESH_ENTITY], $data); + $id = $this->identifierFlattener->flattenIdentifier($this->metadataCache[$className], $data); + + $this->em->getUnitOfWork()->registerManaged($this->hints[Query::HINT_REFRESH_ENTITY], $id, $data); } $this->hints['fetchAlias'] = $dqlAlias; @@ -282,27 +284,9 @@ private function getEntity(array $data, $dqlAlias) */ private function getEntityFromIdentityMap($className, array $data) { - // TODO: All of the following share similar logic, consider refactoring: AbstractHydrator::registerManaged, - // ObjectHydrator::getEntityFromIdentityMap and UnitOfWork::createEntity(). - // $id = $this->identifierFlattener->flattenIdentifier($class, $data); /* @var ClassMetadata $class */ $class = $this->metadataCache[$className]; - $id = []; - - foreach ($class->identifier as $fieldName) { - $property = $class->getProperty($fieldName); - - if (! ($property instanceof ToOneAssociationMetadata)) { - $id[$fieldName] = $data[$fieldName]; - - continue; - } - - $joinColumns = $property->getJoinColumns(); - $joinColumn = reset($joinColumns); - - $id[$fieldName] = $data[$joinColumn->getColumnName()]; - } + $id = $this->identifierFlattener->flattenIdentifier($class, $data); return $this->uow->tryGetByIdHash(implode(' ', $id), $class->rootEntityName); } diff --git a/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php index d2855bd8819..03cb5b4ee67 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php @@ -140,7 +140,9 @@ protected function hydrateRowData(array $sqlResult, array &$result) } if (isset($this->hints[Query::HINT_REFRESH_ENTITY])) { - $this->registerManaged($this->class, $this->hints[Query::HINT_REFRESH_ENTITY], $data); + $id = $this->identifierFlattener->flattenIdentifier($this->class, $data); + + $this->em->getUnitOfWork()->registerManaged($this->hints[Query::HINT_REFRESH_ENTITY], $id, $data); } $uow = $this->em->getUnitOfWork(); diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 7ed74637e1f..e3a730638ef 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -2547,13 +2547,10 @@ private function newInstance($class) */ public function createEntity($className, array $data, &$hints = []) { - $class = $this->em->getClassMetadata($className); - //$isReadOnly = isset($hints[Query::HINT_READ_ONLY]); - - // TODO: All of the following share similar logic, consider refactoring: AbstractHydrator::registerManaged, - // ObjectHydrator::getEntityFromIdentityMap and UnitOfWork::createEntity(). - $id = $this->identifierFlattener->flattenIdentifier($class, $data); + $class = $this->em->getClassMetadata($className); + $id = $this->identifierFlattener->flattenIdentifier($class, $data); $idHash = implode(' ', $id); + //$isReadOnly = isset($hints[Query::HINT_READ_ONLY]); if (isset($this->identityMap[$class->rootEntityName][$idHash])) { $entity = $this->identityMap[$class->rootEntityName][$idHash]; From 138b353b13f18b7534ca912f4e33aa16086f865e Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Thu, 23 Mar 2017 20:43:11 -0400 Subject: [PATCH 127/275] Encapsulated ReflectionClass --- docs/en/changelog/migration_2_5.rst | 2 +- docs/en/reference/filters.rst | 2 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 38 +++++----------- .../ORM/Mapping/ClassMetadataFactory.php | 6 +-- .../ORM/Mapping/ComponentMetadata.php | 44 +++++++++++++++++++ .../ORM/Query/ResultSetMappingBuilder.php | 11 ++--- lib/Doctrine/ORM/Tools/EntityGenerator.php | 9 ++-- .../Tests/ORM/Functional/SQLFilterTest.php | 2 +- .../ORM/Hydration/ResultSetMappingTest.php | 32 +++++++------- .../Tests/ORM/Mapping/ClassMetadataTest.php | 4 +- .../Tests/ORM/Proxy/ProxyFactoryTest.php | 2 +- 11 files changed, 87 insertions(+), 65 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/ComponentMetadata.php diff --git a/docs/en/changelog/migration_2_5.rst b/docs/en/changelog/migration_2_5.rst index b0757a49941..4d4ac1622d4 100644 --- a/docs/en/changelog/migration_2_5.rst +++ b/docs/en/changelog/migration_2_5.rst @@ -271,7 +271,7 @@ Extending on the locale example of the documentation: { public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias) { - if (!$targetEntity->reflClass->implementsInterface('LocaleAware')) { + if (!$targetEntity->getReflectionClass()->implementsInterface('LocaleAware')) { return ""; } diff --git a/docs/en/reference/filters.rst b/docs/en/reference/filters.rst index a5c0ee4cf14..881169e989f 100644 --- a/docs/en/reference/filters.rst +++ b/docs/en/reference/filters.rst @@ -47,7 +47,7 @@ proper quoting of parameters. public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias) { // Check if the entity implements the LocalAware interface - if (!$targetEntity->reflClass->implementsInterface('LocaleAware')) { + if (!$targetEntity->getReflectionClass()->implementsInterface('LocaleAware')) { return ""; } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 824fbb2fb51..72ba9d8ac1a 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -45,7 +45,7 @@ * @author Guilherme Blanco * @since 2.0 */ -class ClassMetadata implements ClassMetadataInterface +class ClassMetadata extends ComponentMetadata implements ClassMetadataInterface { /** * READ-ONLY: The name of the entity class. @@ -305,13 +305,6 @@ class ClassMetadata implements ClassMetadataInterface */ public $cache = null; - /** - * The ReflectionClass instance of the mapped class. - * - * @var \ReflectionClass - */ - public $reflClass; - /** * NamingStrategy determining the default column and table names. * @@ -417,8 +410,7 @@ public function __toString() * their default value are NOT serialized. * * Parts that are also NOT serialized because they can not be properly unserialized: - * - reflClass (ReflectionClass) - * - reflFields (ReflectionProperty array) + * - reflectionClass * * @return array The names of all the fields that should be serialized. */ @@ -526,8 +518,8 @@ public function newInstance() public function wakeupReflection($reflService) { // Restore ReflectionClass and properties - $this->reflClass = $reflService->getClass($this->name); - $this->instantiator = $this->instantiator ?: new Instantiator(); + $this->reflectionClass = $reflService->getClass($this->name); + $this->instantiator = $this->instantiator ?: new Instantiator(); $parentReflFields = []; @@ -579,10 +571,10 @@ public function wakeupReflection($reflService) */ public function initializeReflection($reflService) { - $this->reflClass = $reflService->getClass($this->name); + $this->reflectionClass = $reflService->getClass($this->name); - if ($this->reflClass) { - $this->name = $this->rootEntityName = $this->reflClass->getName(); + if ($this->reflectionClass) { + $this->name = $this->rootEntityName = $this->reflectionClass->getName(); } if (empty($this->table->getName())) { @@ -658,14 +650,6 @@ public function validateLifecycleCallbacks($reflService) } } - /** - * {@inheritDoc} - */ - public function getReflectionClass() - { - return $this->reflClass; - } - /** * @param null|CacheMetadata $cache * @@ -2070,11 +2054,11 @@ public function isVersioned() */ public function fullyQualifiedClassName($className) { - if (empty($className) || ! $this->reflClass) { + if (empty($className) || ! $this->reflectionClass) { return $className; } - $namespace = $this->reflClass->getNamespaceName(); + $namespace = $this->reflectionClass->getNamespaceName(); if ($className !== null && strpos($className, '\\') === false && $namespace) { return $namespace . '\\' . $className; @@ -2126,8 +2110,8 @@ public function inlineEmbeddable($property, ClassMetadata $embeddable) $fieldMapping['columnName'] = $this->namingStrategy->embeddedFieldToColumnName( $property, $fieldMapping['columnName'], - $this->reflClass->name, - $embeddable->reflClass->name + $this->reflectionClass->getName(), + $embeddable->reflectionClass->getName() ); } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index af73ab8f644..e7bd9293a91 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -306,7 +306,7 @@ protected function completeRuntimeMetadata($class, $parent) */ protected function validateRuntimeMetadata($class, $parent) { - if ( ! $class->reflClass ) { + if (! $class->getReflectionClass()) { // only validate if there is a reflection class instance return; } @@ -352,8 +352,8 @@ protected function newClassMetadataInstance($className) */ private function resolveDiscriminatorValue(ClassMetadata $metadata) { - if ($metadata->discriminatorValue || ! $metadata->discriminatorMap || - $metadata->isMappedSuperclass || ! $metadata->reflClass || $metadata->reflClass->isAbstract()) { + if ($metadata->discriminatorValue || ! $metadata->discriminatorMap || $metadata->isMappedSuperclass || + ! $metadata->getReflectionClass() || $metadata->getReflectionClass()->isAbstract()) { return; } diff --git a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php new file mode 100644 index 00000000000..dfa216ac540 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php @@ -0,0 +1,44 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +/** + * A ComponentMetadata instance holds object-relational property mapping. + * + * @author Guilherme Blanco + * @since 3.0 + */ +abstract class ComponentMetadata +{ + /** + * The ReflectionClass instance of the component class. + * + * @var \ReflectionClass|null + */ + protected $reflectionClass; + + /** + * @return \ReflectionClass|null + */ + public function getReflectionClass() : ?\ReflectionClass + { + return $this->reflectionClass; + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index e0869912f61..957c4e78132 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -283,8 +283,7 @@ public function addNamedNativeQueryResultClassMapping(ClassMetadata $class, $res { $classMetadata = $this->em->getClassMetadata($resultClassName); $platform = $this->em->getConnection()->getDatabasePlatform(); - $shortName = $classMetadata->reflClass->getShortName(); - $alias = strtolower($shortName[0]).'0'; + $alias = 'e0'; $this->addEntityResult($class->name, $alias); @@ -327,19 +326,17 @@ public function addNamedNativeQueryResultSetMapping(ClassMetadata $class, $resul { $counter = 0; $resultMapping = $class->getSqlResultSetMapping($resultSetMappingName); - $rootShortName = $class->reflClass->getShortName(); - $rootAlias = strtolower($rootShortName[0]) . $counter; + $rootAlias = 'e' . $counter; if (isset($resultMapping['entities'])) { foreach ($resultMapping['entities'] as $key => $entityMapping) { $classMetadata = $this->em->getClassMetadata($entityMapping['entityClass']); - if ($class->reflClass->name === $classMetadata->reflClass->name) { + if ($class->name === $classMetadata->name) { $this->addEntityResult($classMetadata->name, $rootAlias); $this->addNamedNativeQueryEntityResultMapping($classMetadata, $entityMapping, $rootAlias); } else { - $shortName = $classMetadata->reflClass->getShortName(); - $joinAlias = strtolower($shortName[0]) . ++ $counter; + $joinAlias = 'e' . ++ $counter; $this->addNamedNativeQueryEntityResultMapping($classMetadata, $entityMapping, $joinAlias); diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index be149953e92..44081dc1cf0 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -889,15 +889,12 @@ protected function hasMethod($method, ClassMetadata $metadata) */ protected function getTraits(ClassMetadata $metadata) { - if (! ($metadata->reflClass !== null || class_exists($metadata->name))) { + if (! ($metadata->getReflectionClass() !== null || class_exists($metadata->name))) { return []; } - $reflClass = $metadata->reflClass === null - ? new \ReflectionClass($metadata->name) - : $metadata->reflClass; - - $traits = []; + $reflClass = $metadata->getReflectionClass() ?? new \ReflectionClass($metadata->name); + $traits = []; while ($reflClass !== false) { $traits = array_merge($traits, $reflClass->getTraits()); diff --git a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php index fc5d2ecdbf6..57b7339e61f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php @@ -1111,7 +1111,7 @@ class MyLocaleFilter extends SQLFilter { public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias) { - if (!in_array("LocaleAware", $targetEntity->reflClass->getInterfaceNames())) { + if (!in_array("LocaleAware", $targetEntity->getReflectionClass()->getInterfaceNames())) { return ""; } diff --git a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php index 66d7e99faad..5c9053c4d50 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php @@ -177,16 +177,16 @@ public function testAddNamedNativeQueryResultSetMapping() self::assertEquals('scalarColumn', $rsm->getScalarAlias('scalarColumn')); - self::assertEquals('c0', $rsm->getEntityAlias('user_id')); - self::assertEquals('c0', $rsm->getEntityAlias('name')); - self::assertEquals(CmsUser::class, $rsm->getClassName('c0')); + self::assertEquals('e0', $rsm->getEntityAlias('user_id')); + self::assertEquals('e0', $rsm->getEntityAlias('name')); + self::assertEquals(CmsUser::class, $rsm->getClassName('e0')); self::assertEquals(CmsUser::class, $rsm->getDeclaringClass('name')); self::assertEquals(CmsUser::class, $rsm->getDeclaringClass('user_id')); - self::assertEquals('c1', $rsm->getEntityAlias('email_id')); - self::assertEquals('c1', $rsm->getEntityAlias('email')); - self::assertEquals(CmsEmail::class, $rsm->getClassName('c1')); + self::assertEquals('e1', $rsm->getEntityAlias('email_id')); + self::assertEquals('e1', $rsm->getEntityAlias('email')); + self::assertEquals(CmsEmail::class, $rsm->getClassName('e1')); self::assertEquals(CmsEmail::class, $rsm->getDeclaringClass('email')); self::assertEquals(CmsEmail::class, $rsm->getDeclaringClass('email_id')); } @@ -229,11 +229,11 @@ public function testAddNamedNativeQueryResultSetMappingWithoutFields() $rsm->addNamedNativeQueryMapping($cm, $queryMapping); self::assertEquals('scalarColumn', $rsm->getScalarAlias('scalarColumn')); - self::assertEquals('c0', $rsm->getEntityAlias('id')); - self::assertEquals('c0', $rsm->getEntityAlias('name')); - self::assertEquals('c0', $rsm->getEntityAlias('status')); - self::assertEquals('c0', $rsm->getEntityAlias('username')); - self::assertEquals(CmsUser::class, $rsm->getClassName('c0')); + self::assertEquals('e0', $rsm->getEntityAlias('id')); + self::assertEquals('e0', $rsm->getEntityAlias('name')); + self::assertEquals('e0', $rsm->getEntityAlias('status')); + self::assertEquals('e0', $rsm->getEntityAlias('username')); + self::assertEquals(CmsUser::class, $rsm->getClassName('e0')); self::assertEquals(CmsUser::class, $rsm->getDeclaringClass('id')); self::assertEquals(CmsUser::class, $rsm->getDeclaringClass('name')); self::assertEquals(CmsUser::class, $rsm->getDeclaringClass('status')); @@ -262,11 +262,11 @@ public function testAddNamedNativeQueryResultClass() $rsm->addNamedNativeQueryMapping($cm, $queryMapping); - self::assertEquals('c0', $rsm->getEntityAlias('id')); - self::assertEquals('c0', $rsm->getEntityAlias('name')); - self::assertEquals('c0', $rsm->getEntityAlias('status')); - self::assertEquals('c0', $rsm->getEntityAlias('username')); - self::assertEquals(CmsUser::class, $rsm->getClassName('c0')); + self::assertEquals('e0', $rsm->getEntityAlias('id')); + self::assertEquals('e0', $rsm->getEntityAlias('name')); + self::assertEquals('e0', $rsm->getEntityAlias('status')); + self::assertEquals('e0', $rsm->getEntityAlias('username')); + self::assertEquals(CmsUser::class, $rsm->getClassName('e0')); self::assertEquals(CmsUser::class, $rsm->getDeclaringClass('id')); self::assertEquals(CmsUser::class, $rsm->getDeclaringClass('name')); self::assertEquals(CmsUser::class, $rsm->getDeclaringClass('status')); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index e37526565bc..74f8c7e297c 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -35,7 +35,7 @@ public function testClassMetadataInstanceSerialization() $cm->initializeReflection(new RuntimeReflectionService()); // Test initial state - self::assertInstanceOf('ReflectionClass', $cm->reflClass); + self::assertInstanceOf(\ReflectionClass::class, $cm->getReflectionClass()); self::assertEquals(CMS\CmsUser::class, $cm->name); self::assertEquals(CMS\CmsUser::class, $cm->rootEntityName); self::assertEquals([], $cm->subClasses); @@ -70,7 +70,7 @@ public function testClassMetadataInstanceSerialization() $cm->wakeupReflection(new RuntimeReflectionService()); // Check state - self::assertInstanceOf(\ReflectionClass::class, $cm->reflClass); + self::assertInstanceOf(\ReflectionClass::class, $cm->getReflectionClass()); self::assertEquals(CMS\CmsUser::class, $cm->name); self::assertEquals('UserParent', $cm->rootEntityName); self::assertEquals([CMS\One::class, CMS\Two::class, CMS\Three::class], $cm->subClasses); diff --git a/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php b/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php index 4828095b7e8..cd66d8be72e 100644 --- a/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php @@ -82,7 +82,7 @@ public function testSkipAbstractClassesOnGeneration() { $cm = new ClassMetadata(AbstractClass::class); $cm->initializeReflection(new RuntimeReflectionService()); - self::assertNotNull($cm->reflClass); + self::assertNotNull($cm->getReflectionClass()); $num = $this->proxyFactory->generateProxyClasses([$cm]); From c854e94263eb67480de705ce193045da22a6c588 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Thu, 23 Mar 2017 22:30:48 -0400 Subject: [PATCH 128/275] Encapsulated CacheMetadata from ClassMetadata into ComponentMetadata --- .../ORM/Cache/DefaultCacheFactory.php | 2 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 19 ++----- .../ORM/Mapping/ClassMetadataFactory.php | 4 +- .../ORM/Mapping/ComponentMetadata.php | 53 +++++++++++++++++++ lib/Doctrine/ORM/UnitOfWork.php | 2 +- .../ORM/Cache/DefaultCacheFactoryTest.php | 6 +-- .../ORM/Mapping/AbstractMappingDriverTest.php | 6 +-- 7 files changed, 68 insertions(+), 24 deletions(-) diff --git a/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php b/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php index e2da5cf7c92..7096a0c8016 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php +++ b/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php @@ -125,7 +125,7 @@ public function buildCachedEntityPersister( ClassMetadata $metadata ) { - $cache = $metadata->cache; + $cache = $metadata->getCache(); $region = $this->getRegion($cache); $usage = $cache->getUsage(); diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 72ba9d8ac1a..9fc62703e35 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -300,11 +300,6 @@ class ClassMetadata extends ComponentMetadata implements ClassMetadataInterface */ public $versionProperty = null; - /** - * @var null|CacheMetadata - */ - public $cache = null; - /** * NamingStrategy determining the default column and table names. * @@ -381,9 +376,7 @@ public function assignIdentifier($entity, array $id) */ public function __clone() { - if ($this->cache) { - $this->cache = clone $this->cache; - } + parent::__clone(); foreach ($this->properties as $name => $property) { $this->properties[$name] = clone $property; @@ -416,8 +409,10 @@ public function __toString() */ public function __sleep() { + $serialized = parent::__sleep(); + // This metadata is always serialized/cached. - $serialized = [ + $serialized = array_merge($serialized, [ 'properties', 'fieldNames', //'embeddedClasses', @@ -427,7 +422,7 @@ public function __sleep() 'table', 'rootEntityName', 'idGenerator', //TODO: Does not really need to be serialized. Could be moved to runtime. - ]; + ]); // The rest of the metadata is only serialized if necessary. if ($this->changeTrackingPolicy != ChangeTrackingPolicy::DEFERRED_IMPLICIT) { @@ -491,10 +486,6 @@ public function __sleep() $serialized[] = 'readOnly'; } - if ($this->cache) { - $serialized[] = 'cache'; - } - return $serialized; } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index e7bd9293a91..b9943e3852c 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -208,8 +208,8 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS $this->addInheritedIndexes($class, $parent); - if ($parent->cache) { - $class->cache = clone $parent->cache; + if ($parent->getCache()) { + $class->setCache(clone $parent->getCache()); } if ( ! empty($parent->namedQueries)) { diff --git a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php index dfa216ac540..5418b44c629 100644 --- a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php @@ -27,6 +27,11 @@ */ abstract class ComponentMetadata { + /** + * @var CacheMetadata|null + */ + protected $cache = null; + /** * The ReflectionClass instance of the component class. * @@ -34,6 +39,24 @@ abstract class ComponentMetadata */ protected $reflectionClass; + /** + * @param CacheMetadata|null $cache + * + * @return void + */ + public function setCache(?CacheMetadata $cache = null) + { + $this->cache = $cache; + } + + /** + * @return CacheMetadata|null + */ + public function getCache(): ?CacheMetadata + { + return $this->cache; + } + /** * @return \ReflectionClass|null */ @@ -41,4 +64,34 @@ public function getReflectionClass() : ?\ReflectionClass { return $this->reflectionClass; } + + /** + * Handles metadata cloning nicely. + */ + public function __clone() + { + if ($this->cache) { + $this->cache = clone $this->cache; + } + } + + /** + * Determines which fields get serialized. + * + * It is only serialized what is necessary for best unserialization performance. + * That means any metadata properties that are not set or empty or simply have + * their default value are NOT serialized. + * + * @return array The names of all the fields that should be serialized. + */ + public function __sleep() + { + $serialized = []; + + if ($this->cache) { + $serialized[] = 'cache'; + } + + return $serialized; + } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index e3a730638ef..f47662a0174 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -3066,7 +3066,7 @@ public function getEntityPersister($entityName) throw new \RuntimeException('No persister found for entity.'); } - if ($this->hasCache && $class->cache !== null) { + if ($this->hasCache && $class->getCache()) { $persister = $this->em->getConfiguration() ->getSecondLevelCacheConfiguration() ->getCacheFactory() diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php index b196da194aa..593032dda72 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php @@ -89,7 +89,7 @@ public function testBuildCachedEntityPersisterReadOnly() $this->factory->expects($this->once()) ->method('getRegion') - ->with($this->equalTo($metadata->cache)) + ->with($this->equalTo($metadata->getCache())) ->will($this->returnValue($region)); $cachedPersister = $this->factory->buildCachedEntityPersister($em, $persister, $metadata); @@ -113,7 +113,7 @@ public function testBuildCachedEntityPersisterReadWrite() $this->factory->expects($this->once()) ->method('getRegion') - ->with($this->equalTo($metadata->cache)) + ->with($this->equalTo($metadata->getCache())) ->will($this->returnValue($region)); $cachedPersister = $this->factory->buildCachedEntityPersister($em, $persister, $metadata); @@ -137,7 +137,7 @@ public function testBuildCachedEntityPersisterNonStrictReadWrite() $this->factory->expects($this->once()) ->method('getRegion') - ->with($this->equalTo($metadata->cache)) + ->with($this->equalTo($metadata->getCache())) ->will($this->returnValue($region)); $cachedPersister = $this->factory->buildCachedEntityPersister($em, $persister, $metadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 8201c0ab8ac..0f809ac436a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -1054,9 +1054,9 @@ public function testSecondLevelCacheMapping() $factory = $this->createClassMetadataFactory(); $class = $factory->getMetadataFor(City::class); - self::assertNotNull($class->cache); - self::assertEquals(Mapping\CacheUsage::READ_ONLY, $class->cache->getUsage()); - self::assertEquals('doctrine_tests_models_cache_city', $class->cache->getRegion()); + self::assertNotNull($class->getCache()); + self::assertEquals(Mapping\CacheUsage::READ_ONLY, $class->getCache()->getUsage()); + self::assertEquals('doctrine_tests_models_cache_city', $class->getCache()->getRegion()); self::assertArrayHasKey('state', $class->getProperties()); From 2aba8699b0c4a0572b1ed036f9cdbc8f5d02c50c Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Thu, 23 Mar 2017 23:12:06 -0400 Subject: [PATCH 129/275] Ported AbstractClassMetadataFactory from Common to ORM, allowing us to change its implementation --- .../OnClassMetadataNotFoundEventArgs.php | 2 +- .../Mapping/AbstractClassMetadataFactory.php | 449 ++++++++++++++++++ .../ORM/Mapping/ClassMetadataFactory.php | 29 +- lib/Doctrine/ORM/Proxy/ProxyFactory.php | 9 +- .../ORM/Utility/IdentifierFlattener.php | 2 +- .../OnClassMetadataNotFoundEventArgsTest.php | 4 +- .../Tools/ResolveTargetEntityListenerTest.php | 2 + 7 files changed, 475 insertions(+), 22 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php diff --git a/lib/Doctrine/ORM/Event/OnClassMetadataNotFoundEventArgs.php b/lib/Doctrine/ORM/Event/OnClassMetadataNotFoundEventArgs.php index a044a7e321d..dedb94ca00c 100644 --- a/lib/Doctrine/ORM/Event/OnClassMetadataNotFoundEventArgs.php +++ b/lib/Doctrine/ORM/Event/OnClassMetadataNotFoundEventArgs.php @@ -20,8 +20,8 @@ namespace Doctrine\ORM\Event; use Doctrine\Common\Persistence\Event\ManagerEventArgs; -use Doctrine\Common\Persistence\Mapping\ClassMetadata; use Doctrine\Common\Persistence\ObjectManager; +use Doctrine\ORM\Mapping\ClassMetadata; /** * Class that holds event arguments for a `onClassMetadataNotFound` event. diff --git a/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php new file mode 100644 index 00000000000..80332141d3e --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php @@ -0,0 +1,449 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +use Doctrine\Common\Persistence\Mapping\ClassMetadataFactory; +use Doctrine\Common\Persistence\Mapping\MappingException; +use Doctrine\Common\Cache\Cache; +use Doctrine\Common\Persistence\Mapping\ReflectionService; +use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; +use Doctrine\Common\Util\ClassUtils; +use ReflectionException; + +/** + * The ClassMetadataFactory is used to create ClassMetadata objects that contain all the + * metadata mapping information of a class which describes how a class should be mapped + * to a relational database. + * + * This class was abstracted from the ORM ClassMetadataFactory. + * + * @since 2.2 + * @author Benjamin Eberlei + * @author Guilherme Blanco + * @author Jonathan Wage + * @author Roman Borschel + */ +abstract class AbstractClassMetadataFactory implements ClassMetadataFactory +{ + /** + * Salt used by specific Object Manager implementation. + * + * @var string + */ + protected $cacheSalt = '$CLASSMETADATA'; + + /** + * @var \Doctrine\Common\Cache\Cache|null + */ + private $cacheDriver; + + /** + * @var ClassMetadata[] + */ + private $loadedMetadata = []; + + /** + * @var bool + */ + protected $initialized = false; + + /** + * @var ReflectionService|null + */ + private $reflectionService = null; + + /** + * Sets the cache driver used by the factory to cache ClassMetadata instances. + * + * @param \Doctrine\Common\Cache\Cache $cacheDriver + * + * @return void + */ + public function setCacheDriver(Cache $cacheDriver = null) + { + $this->cacheDriver = $cacheDriver; + } + + /** + * Gets the cache driver used by the factory to cache ClassMetadata instances. + * + * @return \Doctrine\Common\Cache\Cache|null + */ + public function getCacheDriver() + { + return $this->cacheDriver; + } + + /** + * Returns an array of all the loaded metadata currently in memory. + * + * @return ClassMetadata[] + */ + public function getLoadedMetadata() + { + return $this->loadedMetadata; + } + + /** + * Forces the factory to load the metadata of all classes known to the underlying + * mapping driver. + * + * @return array The ClassMetadata instances of all mapped classes. + */ + public function getAllMetadata() + { + if (! $this->initialized) { + $this->initialize(); + } + + $driver = $this->getDriver(); + $metadata = []; + + foreach ($driver->getAllClassNames() as $className) { + $metadata[] = $this->getMetadataFor($className); + } + + return $metadata; + } + + /** + * Lazy initialization of this stuff, especially the metadata driver, + * since these are not needed at all when a metadata cache is active. + * + * @return void + */ + abstract protected function initialize(); + + /** + * Gets the fully qualified class-name from the namespace alias. + * + * @param string $namespaceAlias + * @param string $simpleClassName + * + * @return string + */ + abstract protected function getFqcnFromAlias($namespaceAlias, $simpleClassName); + + /** + * Returns the mapping driver implementation. + * + * @return \Doctrine\Common\Persistence\Mapping\Driver\MappingDriver + */ + abstract protected function getDriver(); + + /** + * Wakes up reflection after ClassMetadata gets unserialized from cache. + * + * @param ClassMetadata $class + * @param ReflectionService $reflService + * + * @return void + */ + abstract protected function wakeupReflection(ClassMetadata $class, ReflectionService $reflService); + + /** + * Initializes Reflection after ClassMetadata was constructed. + * + * @param ClassMetadata $class + * @param ReflectionService $reflService + * + * @return void + */ + abstract protected function initializeReflection(ClassMetadata $class, ReflectionService $reflService); + + /** + * Checks whether the class metadata is an entity. + * + * This method should return false for mapped superclasses or embedded classes. + * + * @param ClassMetadata $class + * + * @return boolean + */ + abstract protected function isEntity(ClassMetadata $class); + + /** + * Gets the class metadata descriptor for a class. + * + * @param string $className The name of the class. + * + * @return ClassMetadata + * + * @throws ReflectionException + * @throws MappingException + */ + public function getMetadataFor($className) + { + if (isset($this->loadedMetadata[$className])) { + return $this->loadedMetadata[$className]; + } + + // Check for namespace alias + if (strpos($className, ':') !== false) { + list($namespaceAlias, $simpleClassName) = explode(':', $className, 2); + + $realClassName = $this->getFqcnFromAlias($namespaceAlias, $simpleClassName); + } else { + $realClassName = ClassUtils::getRealClass($className); + } + + if (isset($this->loadedMetadata[$realClassName])) { + // We do not have the alias name in the map, include it + return $this->loadedMetadata[$className] = $this->loadedMetadata[$realClassName]; + } + + $loadingException = null; + + try { + if ($this->cacheDriver) { + $cached = $this->cacheDriver->fetch($realClassName . $this->cacheSalt); + + if ($cached instanceof ClassMetadata) { + $this->loadedMetadata[$realClassName] = $cached; + + $this->wakeupReflection($cached, $this->getReflectionService()); + } else { + foreach ($this->loadMetadata($realClassName) as $loadedClassName) { + $this->cacheDriver->save( + $loadedClassName . $this->cacheSalt, + $this->loadedMetadata[$loadedClassName], + null + ); + } + } + } else { + $this->loadMetadata($realClassName); + } + } catch (MappingException $loadingException) { + if (! $fallbackMetadataResponse = $this->onNotFoundMetadata($realClassName)) { + throw $loadingException; + } + + $this->loadedMetadata[$realClassName] = $fallbackMetadataResponse; + } + + if ($className !== $realClassName) { + // We do not have the alias name in the map, include it + $this->loadedMetadata[$className] = $this->loadedMetadata[$realClassName]; + } + + return $this->loadedMetadata[$className]; + } + + /** + * Checks whether the factory has the metadata for a class loaded already. + * + * @param string $className + * + * @return boolean TRUE if the metadata of the class in question is already loaded, FALSE otherwise. + */ + public function hasMetadataFor($className) + { + return isset($this->loadedMetadata[$className]); + } + + /** + * Sets the metadata descriptor for a specific class. + * + * NOTE: This is only useful in very special cases, like when generating proxy classes. + * + * @param string $className + * @param ClassMetadata $class + * + * @return void + */ + public function setMetadataFor($className, $class) + { + $this->loadedMetadata[$className] = $class; + } + + /** + * Gets an array of parent classes for the given entity class. + * + * @param string $name + * + * @return array + */ + protected function getParentClasses($name) + { + // Collect parent classes, ignoring transient (not-mapped) classes. + $parentClasses = []; + + foreach (array_reverse($this->getReflectionService()->getParentClasses($name)) as $parentClass) { + if ( ! $this->getDriver()->isTransient($parentClass)) { + $parentClasses[] = $parentClass; + } + } + + return $parentClasses; + } + + /** + * Loads the metadata of the class in question and all it's ancestors whose metadata + * is still not loaded. + * + * Important: The class $name does not necessarily exist at this point here. + * Scenarios in a code-generation setup might have access to XML/YAML + * Mapping files without the actual PHP code existing here. That is why the + * {@see Doctrine\Common\Persistence\Mapping\ReflectionService} interface + * should be used for reflection. + * + * @param string $name The name of the class for which the metadata should get loaded. + * + * @return array + */ + protected function loadMetadata($name) + { + if ( ! $this->initialized) { + $this->initialize(); + } + + $loaded = []; + + $parentClasses = $this->getParentClasses($name); + $parentClasses[] = $name; + + // Move down the hierarchy of parent classes, starting from the topmost class + $parent = null; + $rootEntityFound = false; + $visited = []; + $reflService = $this->getReflectionService(); + + foreach ($parentClasses as $className) { + if (isset($this->loadedMetadata[$className])) { + $parent = $this->loadedMetadata[$className]; + + if ($this->isEntity($parent)) { + $rootEntityFound = true; + array_unshift($visited, $className); + } + + continue; + } + + $class = $this->newClassMetadataInstance($className); + + $this->initializeReflection($class, $reflService); + $this->doLoadMetadata($class, $parent, $rootEntityFound, $visited); + + $this->loadedMetadata[$className] = $class; + + $parent = $class; + + if ($this->isEntity($class)) { + $rootEntityFound = true; + + array_unshift($visited, $className); + } + + $this->wakeupReflection($class, $reflService); + + $loaded[] = $className; + } + + return $loaded; + } + + /** + * Provides a fallback hook for loading metadata when loading failed due to reflection/mapping exceptions + * + * Override this method to implement a fallback strategy for failed metadata loading + * + * @param string $className + * + * @return \Doctrine\ORM\Mapping\ClassMetadata|null + */ + protected function onNotFoundMetadata($className) + { + return null; + } + + /** + * Actually loads the metadata from the underlying metadata. + * + * @param ClassMetadata $class + * @param ClassMetadata|null $parent + * @param bool $rootEntityFound + * @param array $nonSuperclassParents All parent class names + * that are not marked as mapped superclasses. + * + * @return void + */ + abstract protected function doLoadMetadata( + ClassMetadata $class, + ClassMetadata $parent = null, + bool $rootEntityFound, + array $nonSuperclassParents + ); + + /** + * Creates a new ClassMetadata instance for the given class name. + * + * @param string $className + * + * @return ClassMetadata + */ + abstract protected function newClassMetadataInstance($className); + + /** + * {@inheritDoc} + */ + public function isTransient($class) + { + if ( ! $this->initialized) { + $this->initialize(); + } + + // Check for namespace alias + if (strpos($class, ':') !== false) { + list($namespaceAlias, $simpleClassName) = explode(':', $class, 2); + + $class = $this->getFqcnFromAlias($namespaceAlias, $simpleClassName); + } + + return $this->getDriver()->isTransient($class); + } + + /** + * Sets the reflectionService. + * + * @param ReflectionService $reflectionService + * + * @return void + */ + public function setReflectionService(ReflectionService $reflectionService) + { + $this->reflectionService = $reflectionService; + } + + /** + * Gets the reflection service associated with this metadata factory. + * + * @return ReflectionService + */ + public function getReflectionService() + { + if ($this->reflectionService === null) { + $this->reflectionService = new RuntimeReflectionService(); + } + + return $this->reflectionService; + } +} diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index b9943e3852c..1723cd82b9a 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -19,8 +19,6 @@ namespace Doctrine\ORM\Mapping; -use Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory; -use Doctrine\Common\Persistence\Mapping\ClassMetadata as ClassMetadataInterface; use Doctrine\Common\Persistence\Mapping\ReflectionService; use Doctrine\DBAL\Platforms; use Doctrine\ORM\EntityManagerInterface; @@ -118,7 +116,12 @@ protected function onNotFoundMetadata($className) /** * {@inheritDoc} */ - protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents) + protected function doLoadMetadata( + ClassMetadata $class, + ClassMetadata $parent = null, + bool $rootEntityFound, + array $nonSuperclassParents + ) { /* @var $class ClassMetadata */ /* @var $parent ClassMetadata */ @@ -247,12 +250,12 @@ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonS } /** - * @param ClassMetadata $class - * @param ClassMetadataInterface|null $parent + * @param ClassMetadata $class + * @param ClassMetadata|null $parent * * @return void */ - protected function completeRuntimeMetadata($class, $parent) + protected function completeRuntimeMetadata(ClassMetadata $class, ClassMetadata $parent = null) { if ( ! $parent) { return; @@ -297,14 +300,14 @@ protected function completeRuntimeMetadata($class, $parent) /** * Validate runtime metadata is correctly defined. * - * @param ClassMetadata $class - * @param ClassMetadataInterface|null $parent + * @param ClassMetadata $class + * @param ClassMetadata|null $parent * * @return void * * @throws MappingException */ - protected function validateRuntimeMetadata($class, $parent) + protected function validateRuntimeMetadata(ClassMetadata $class, ClassMetadata $parent = null) { if (! $class->getReflectionClass()) { // only validate if there is a reflection class instance @@ -759,18 +762,16 @@ private function inheritIdGeneratorMapping(ClassMetadata $class, ClassMetadata $ /** * {@inheritDoc} */ - protected function wakeupReflection(ClassMetadataInterface $class, ReflectionService $reflService) + protected function wakeupReflection(ClassMetadata $class, ReflectionService $reflService) { - /* @var $class ClassMetadata */ $class->wakeupReflection($reflService); } /** * {@inheritDoc} */ - protected function initializeReflection(ClassMetadataInterface $class, ReflectionService $reflService) + protected function initializeReflection(ClassMetadata $class, ReflectionService $reflService) { - /* @var $class ClassMetadata */ $class->initializeReflection($reflService); } @@ -793,7 +794,7 @@ protected function getDriver() /** * {@inheritDoc} */ - protected function isEntity(ClassMetadataInterface $class) + protected function isEntity(ClassMetadata $class) { return isset($class->isMappedSuperclass) && $class->isMappedSuperclass === false; } diff --git a/lib/Doctrine/ORM/Proxy/ProxyFactory.php b/lib/Doctrine/ORM/Proxy/ProxyFactory.php index a53a942a13f..601eb492ee5 100644 --- a/lib/Doctrine/ORM/Proxy/ProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/ProxyFactory.php @@ -77,6 +77,7 @@ public function __construct(EntityManagerInterface $em, $proxyDir, $proxyNs, $au $proxyGenerator = new ProxyGenerator($proxyDir, $proxyNs); $proxyGenerator->setPlaceholder('baseProxyInterface', Proxy::class); + parent::__construct($proxyGenerator, $em->getMetadataFactory(), $autoGenerate); $this->em = $em; @@ -114,8 +115,8 @@ protected function createProxyDefinition($className) /** * Creates a closure capable of initializing a proxy * - * @param \Doctrine\Common\Persistence\Mapping\ClassMetadata $classMetadata - * @param \Doctrine\ORM\Persisters\Entity\EntityPersister $entityPersister + * @param \Doctrine\ORM\Mapping\ClassMetadata $classMetadata + * @param \Doctrine\ORM\Persisters\Entity\EntityPersister $entityPersister * * @return \Closure * @@ -168,8 +169,8 @@ private function createInitializer(ClassMetadata $classMetadata, EntityPersister /** * Creates a closure capable of finalizing state a cloned proxy * - * @param \Doctrine\Common\Persistence\Mapping\ClassMetadata $classMetadata - * @param \Doctrine\ORM\Persisters\Entity\EntityPersister $entityPersister + * @param \Doctrine\ORM\Mapping\ClassMetadata $classMetadata + * @param \Doctrine\ORM\Persisters\Entity\EntityPersister $entityPersister * * @return \Closure * diff --git a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php index d966b2bbcfd..28b84ceec03 100644 --- a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php +++ b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php @@ -22,7 +22,7 @@ use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\UnitOfWork; use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\Common\Persistence\Mapping\ClassMetadataFactory; +use Doctrine\ORM\Mapping\ClassMetadataFactory; /** * The IdentifierFlattener utility now houses some of the identifier manipulation logic from unit of work, so that it diff --git a/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php b/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php index 158280cb0d1..6cc4f51c466 100644 --- a/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php +++ b/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php @@ -2,9 +2,9 @@ namespace Doctrine\Tests\ORM; -use Doctrine\Common\Persistence\Mapping\ClassMetadata; use Doctrine\Common\Persistence\ObjectManager; use Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Tests\DoctrineTestCase; /** @@ -26,7 +26,7 @@ public function testEventArgsMutability() self::assertNull($args->getFoundMetadata()); - /* @var $metadata \Doctrine\Common\Persistence\Mapping\ClassMetadata */ + /* @var $metadata \Doctrine\ORM\Mapping\ClassMetadata */ $metadata = $this->createMock(ClassMetadata::class); $args->setFoundMetadata($metadata); diff --git a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php index 193f2e8e5ec..f2cc758b075 100644 --- a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php @@ -41,8 +41,10 @@ public function setUp() public function testResolveTargetEntityListenerCanResolveTargetEntity() { $evm = $this->em->getEventManager(); + $this->listener->addResolveTargetEntity(ResolveTargetInterface::class, ResolveTargetEntity::class); $this->listener->addResolveTargetEntity(TargetInterface::class, TargetEntity::class); + $evm->addEventSubscriber($this->listener); $cm = $this->factory->getMetadataFor(ResolveTargetEntity::class); From 458608fc2ec6b4dfbdd976a7982f2a9441133cc1 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 24 Mar 2017 16:44:24 -0400 Subject: [PATCH 130/275] Incorporated LocalColumnMetadata, simplifying runtime memory consumption over JoinColumnMetadata. Implemented more Exporters. --- lib/Doctrine/ORM/Mapping/ColumnMetadata.php | 65 +------------- .../Mapping/DiscriminatorColumnMetadata.php | 2 +- .../Exporter/ClassMetadataExporter.php | 59 ++++++++++++ .../Exporter/ColumnMetadataExporter.php | 16 +--- .../DiscriminatorColumnMetadataExporter.php | 4 +- .../ORM/Mapping/Exporter/Exporter.php | 4 +- .../Exporter/FieldMetadataExporter.php | 4 +- .../Exporter/JoinColumnMetadataExporter.php | 60 +++++++++++++ .../Exporter/JoinTableMetadataExporter.php | 69 ++++++++++++++ .../Exporter/LocalColumnMetadataExporter.php | 47 ++++++++++ .../Exporter/TableMetadataExporter.php | 73 +++++++++++++++ .../ORM/Mapping/Exporter/VariableExporter.php | 2 +- .../Exporter/VersionFieldMetadataExporter.php | 2 +- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 2 +- .../ORM/Mapping/LocalColumnMetadata.php | 89 +++++++++++++++++++ 15 files changed, 412 insertions(+), 86 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php create mode 100644 lib/Doctrine/ORM/Mapping/Exporter/JoinColumnMetadataExporter.php create mode 100644 lib/Doctrine/ORM/Mapping/Exporter/JoinTableMetadataExporter.php create mode 100644 lib/Doctrine/ORM/Mapping/Exporter/LocalColumnMetadataExporter.php create mode 100644 lib/Doctrine/ORM/Mapping/Exporter/TableMetadataExporter.php create mode 100644 lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php diff --git a/lib/Doctrine/ORM/Mapping/ColumnMetadata.php b/lib/Doctrine/ORM/Mapping/ColumnMetadata.php index 40f0f9cae14..af9feb84ab5 100644 --- a/lib/Doctrine/ORM/Mapping/ColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ColumnMetadata.php @@ -24,7 +24,7 @@ use Doctrine\DBAL\Types\Type; -class ColumnMetadata +abstract class ColumnMetadata { /** * @var string @@ -46,21 +46,6 @@ class ColumnMetadata */ protected $columnDefinition; - /** - * @var integer - */ - protected $length; - - /** - * @var integer - */ - protected $scale; - - /** - * @var integer - */ - protected $precision; - /** * @var array */ @@ -169,54 +154,6 @@ public function setColumnDefinition(string $columnDefinition) $this->columnDefinition = $columnDefinition; } - /** - * @return int - */ - public function getLength() - { - return $this->length; - } - - /** - * @param int $length - */ - public function setLength(int $length) - { - $this->length = $length; - } - - /** - * @return int - */ - public function getScale() - { - return $this->scale; - } - - /** - * @param int $scale - */ - public function setScale(int $scale) - { - $this->scale = $scale; - } - - /** - * @return int - */ - public function getPrecision() - { - return $this->precision; - } - - /** - * @param int $precision - */ - public function setPrecision(int $precision) - { - $this->precision = $precision; - } - /** * @return array */ diff --git a/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php b/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php index 904143c77bc..d2e50b5cd80 100644 --- a/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php @@ -22,6 +22,6 @@ namespace Doctrine\ORM\Mapping; -final class DiscriminatorColumnMetadata extends ColumnMetadata +final class DiscriminatorColumnMetadata extends LocalColumnMetadata { } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php new file mode 100644 index 00000000000..f6a0f7df80d --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php @@ -0,0 +1,59 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\ClassMetadata; + +class ClassMetadataExporter implements Exporter +{ + /** + * {@inheritdoc} + */ + public function export($value, int $indentationLevel = 0) : string + { + /** @var ClassMetadata $value */ + $variableExporter = new VariableExporter(); + $indentation = str_repeat(self::INDENTATION, $indentationLevel); + $objectReference = $indentation . static::VARIABLE; + $lines = []; + + $lines[] = $objectReference . ' = ' . $this->exportInstantiation($value); + + return implode(PHP_EOL, $lines); + } + + /** + * @param ClassMetadata $metadata + * + * @return string + */ + protected function exportInstantiation(ClassMetadata $metadata) : string + { + return sprintf( + 'new Mapping\FieldMetadata("%s", "%s", Type::getType("%s"));', + $metadata->getName(), + $metadata->getColumnName(), + $metadata->getTypeName() + ); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ColumnMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ColumnMetadataExporter.php index 66fdb5bae0d..302a20370c3 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ColumnMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ColumnMetadataExporter.php @@ -24,14 +24,14 @@ use Doctrine\ORM\Mapping\ColumnMetadata; -class ColumnMetadataExporter implements Exporter +abstract class ColumnMetadataExporter implements Exporter { const VARIABLE = '$column'; /** * {@inheritdoc} */ - public function export($value, int $indentationLevel = 0) + public function export($value, int $indentationLevel = 0) : string { /** @var ColumnMetadata $value */ $variableExporter = new VariableExporter(); @@ -46,9 +46,6 @@ public function export($value, int $indentationLevel = 0) } $lines[] = $objectReference . '->setTableName("' . $value->getTableName() . '");'; - $lines[] = $objectReference . '->setLength(' . $value->getLength() . ');'; - $lines[] = $objectReference . '->setScale(' . $value->getScale() . ');'; - $lines[] = $objectReference . '->setPrecision(' . $value->getPrecision() . ');'; $lines[] = $objectReference . '->setOptions(' . ltrim($variableExporter->export($value->getOptions(), $indentationLevel + 1)) . ');'; $lines[] = $objectReference . '->setPrimaryKey(' . ltrim($variableExporter->export($value->isPrimaryKey(), $indentationLevel + 1)) . ');'; $lines[] = $objectReference . '->setNullable(' . ltrim($variableExporter->export($value->isNullable(), $indentationLevel + 1)) . ');'; @@ -62,12 +59,5 @@ public function export($value, int $indentationLevel = 0) * * @return string */ - protected function exportInstantiation(ColumnMetadata $metadata) - { - return sprintf( - 'new Mapping\ColumnMetadata("%s", Type::getType("%s"));', - $metadata->getColumnName(), - $metadata->getTypeName() - ); - } + abstract protected function exportInstantiation(ColumnMetadata $metadata) : string; } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/DiscriminatorColumnMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/DiscriminatorColumnMetadataExporter.php index e71d77d61ae..43f5e13f6bc 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/DiscriminatorColumnMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/DiscriminatorColumnMetadataExporter.php @@ -24,7 +24,7 @@ use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; -class DiscriminatorColumnMetadataExporter extends ColumnMetadataExporter +class DiscriminatorColumnMetadataExporter extends LocalColumnMetadataExporter { const VARIABLE = '$discriminatorColumn'; @@ -33,7 +33,7 @@ class DiscriminatorColumnMetadataExporter extends ColumnMetadataExporter * * @return string */ - protected function exportInstantiation(DiscriminatorColumnMetadata $metadata) + protected function exportInstantiation(DiscriminatorColumnMetadata $metadata) : string { return sprintf( 'new Mapping\DiscriminatorColumnMetadata("%s", Type::getType("%s"));', diff --git a/lib/Doctrine/ORM/Mapping/Exporter/Exporter.php b/lib/Doctrine/ORM/Mapping/Exporter/Exporter.php index 8fc16da06d4..2246d4fdf57 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/Exporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/Exporter.php @@ -24,11 +24,13 @@ interface Exporter { + const INDENTATION = ' '; + /** * @param mixed $value * @param int $indentationLevel * * @return string */ - public function export($value, int $indentationLevel = 0); + public function export($value, int $indentationLevel = 0) : string; } diff --git a/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php index cb65dab5105..a09459da8f1 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php @@ -24,7 +24,7 @@ use Doctrine\ORM\Mapping\FieldMetadata; -class FieldMetadataExporter extends ColumnMetadataExporter +class FieldMetadataExporter extends LocalColumnMetadataExporter { const VARIABLE = '$field'; @@ -33,7 +33,7 @@ class FieldMetadataExporter extends ColumnMetadataExporter * * @return string */ - protected function exportInstantiation(FieldMetadata $metadata) + protected function exportInstantiation(FieldMetadata $metadata) : string { return sprintf( 'new Mapping\FieldMetadata("%s", "%s", Type::getType("%s"));', diff --git a/lib/Doctrine/ORM/Mapping/Exporter/JoinColumnMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/JoinColumnMetadataExporter.php new file mode 100644 index 00000000000..bde4ffbdcf3 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Exporter/JoinColumnMetadataExporter.php @@ -0,0 +1,60 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\JoinColumnMetadata; + +class JoinColumnMetadataExporter extends ColumnMetadataExporter +{ + const VARIABLE = '$joinColumn'; + + /** + * {@inheritdoc} + */ + public function export($value, int $indentationLevel = 0) : string + { + /** @var JoinColumnMetadata $value */ + $variableExporter = new VariableExporter(); + $indentation = str_repeat(self::INDENTATION, $indentationLevel); + $objectReference = $indentation . static::VARIABLE; + $lines = []; + + $lines[] = parent::export($value, $indentationLevel); + + return implode(PHP_EOL, $lines); + } + + /** + * @param JoinColumnMetadata $metadata + * + * @return string + */ + protected function exportInstantiation(JoinColumnMetadata $metadata) : string + { + return sprintf( + 'new Mapping\JoinColumnMetadata("%s", Type::getType("%s"));', + $metadata->getColumnName(), + $metadata->getTypeName() + ); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/JoinTableMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/JoinTableMetadataExporter.php new file mode 100644 index 00000000000..d21699e21f4 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Exporter/JoinTableMetadataExporter.php @@ -0,0 +1,69 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\JoinTableMetadata; + +class JoinTableMetadataExporter extends TableMetadataExporter +{ + const VARIABLE = '$joinTable'; + + /** + * {@inheritdoc} + */ + public function export($value, int $indentationLevel = 0) : string + { + /** @var JoinTableMetadata $value */ + $joinColumnExporter = new JoinColumnMetadataExporter(); + $indentation = str_repeat(self::INDENTATION, $indentationLevel); + $objectReference = $indentation . static::VARIABLE; + $lines = []; + + $lines[] = parent::export($value, $indentationLevel); + + foreach ($value->getJoinColumns() as $joinColumn) { + $lines[] = $joinColumnExporter->export($joinColumn, $indentationLevel); + $lines[] = $objectReference . '->addJoinColumn(' . $joinColumnExporter::VARIABLE . ');'; + } + + foreach ($value->getInverseJoinColumns() as $inverseJoinColumn) { + $lines[] = $joinColumnExporter->export($inverseJoinColumn, $indentationLevel); + $lines[] = $objectReference . '->addInverseJoinColumn(' . $joinColumnExporter::VARIABLE . ');'; + } + + return implode(PHP_EOL, $lines); + } + + /** + * @param JoinTableMetadata $metadata + * + * @return string + */ + protected function exportInstantiation(JoinTableMetadata $metadata) : string + { + return sprintf( + 'new Mapping\JoinTableMetadata("%s");', + $metadata->getName() + ); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/LocalColumnMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/LocalColumnMetadataExporter.php new file mode 100644 index 00000000000..f69bb9bc8d6 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Exporter/LocalColumnMetadataExporter.php @@ -0,0 +1,47 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\LocalColumnMetadata; + +abstract class LocalColumnMetadataExporter extends ColumnMetadataExporter +{ + /** + * {@inheritdoc} + */ + public function export($value, int $indentationLevel = 0) : string + { + /** @var LocalColumnMetadata $value */ + $indentation = str_repeat(self::INDENTATION, $indentationLevel); + $objectReference = $indentation . static::VARIABLE; + $lines = []; + + $lines[] = parent::export($value, $indentationLevel); + + $lines[] = $objectReference . '->setLength(' . $value->getLength() . ');'; + $lines[] = $objectReference . '->setScale(' . $value->getScale() . ');'; + $lines[] = $objectReference . '->setPrecision(' . $value->getPrecision() . ');'; + + return implode(PHP_EOL, $lines); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/TableMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/TableMetadataExporter.php new file mode 100644 index 00000000000..83b4097bae8 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Exporter/TableMetadataExporter.php @@ -0,0 +1,73 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\TableMetadata; + +class TableMetadataExporter implements Exporter +{ + const VARIABLE = '$table'; + + /** + * {@inheritdoc} + */ + public function export($value, int $indentationLevel = 0) : string + { + /** @var TableMetadata $value */ + $variableExporter = new VariableExporter(); + $indentation = str_repeat(self::INDENTATION, $indentationLevel); + $objectReference = $indentation . static::VARIABLE; + $lines = []; + + $lines[] = $objectReference . ' = ' . $this->exportInstantiation($value); + + if (! empty($value->getSchema())) { + $lines[] = $objectReference . '->setSchema("' . $value->getSchema() . '");'; + } + + foreach ($value->getIndexes() as $index) { + $lines[] = $objectReference . '->addIndex(' . ltrim($variableExporter->export($index, $indentationLevel + 1)) . ');'; + } + + foreach ($value->getUniqueConstraints() as $uniqueConstraint) { + $lines[] = $objectReference . '->addUniqueConstraint(' . ltrim($variableExporter->export($uniqueConstraint, $indentationLevel + 1)) . ');'; + } + + $lines[] = $objectReference . '->setOptions(' . ltrim($variableExporter->export($value->getOptions(), $indentationLevel + 1)) . ');'; + + return implode(PHP_EOL, $lines); + } + + /** + * @param TableMetadata $metadata + * + * @return string + */ + protected function exportInstantiation(TableMetadata $metadata) : string + { + return sprintf( + 'new Mapping\TableMetadata("%s");', + $metadata->getName() + ); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php index af602d4d3be..7bb0ce38f01 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php @@ -29,7 +29,7 @@ class VariableExporter implements Exporter /** * {@inheritdoc} */ - public function export($value, int $indentationLevel = 0) + public function export($value, int $indentationLevel = 0) : string { if (! is_array($value)) { return var_export($value, true); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php index 21e302ca53f..1c86469a5f5 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php @@ -33,7 +33,7 @@ class VersionFieldMetadataExporter extends FieldMetadataExporter * * @return string */ - protected function exportInstantiation(VersionFieldMetadata $metadata) + protected function exportInstantiation(VersionFieldMetadata $metadata) : string { return sprintf( 'new Mapping\VersionFieldMetadata("%s", "%s", Type::getType("%s"));', diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index 625fc9cfeb0..57339463e09 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -26,7 +26,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Sequencing\Generator; -class FieldMetadata extends ColumnMetadata implements Property +class FieldMetadata extends LocalColumnMetadata implements Property { /** @var ClassMetadata */ protected $declaringClass; diff --git a/lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php b/lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php new file mode 100644 index 00000000000..573f349c084 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php @@ -0,0 +1,89 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +abstract class LocalColumnMetadata extends ColumnMetadata +{ + /** + * @var integer + */ + protected $length; + + /** + * @var integer + */ + protected $scale; + + /** + * @var integer + */ + protected $precision; + + /** + * @return int + */ + public function getLength() + { + return $this->length; + } + + /** + * @param int $length + */ + public function setLength(int $length) + { + $this->length = $length; + } + + /** + * @return int + */ + public function getScale() + { + return $this->scale; + } + + /** + * @param int $scale + */ + public function setScale(int $scale) + { + $this->scale = $scale; + } + + /** + * @return int + */ + public function getPrecision() + { + return $this->precision; + } + + /** + * @param int $precision + */ + public function setPrecision(int $precision) + { + $this->precision = $precision; + } +} \ No newline at end of file From d8d3537d78854c964a063db96a4223b22f4843fe Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 24 Mar 2017 22:20:14 -0400 Subject: [PATCH 131/275] Added TransientMetadata support, allowing to track properties not directly mapped into ORM. This enables ChangeTrackingPolicy to assess changes happening to transient class members. Removed ReflectionPropertiesGetter hack. --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 21 +- .../ORM/Mapping/Driver/AnnotationDriver.php | 6 + .../Reflection/ReflectionPropertiesGetter.php | 163 --------------- .../ORM/Mapping/TransientMetadata.php | 95 +++++++++ .../Entity/BasicEntityPersister.php | 186 +++++++++--------- .../Entity/SingleTablePersister.php | 47 +++-- lib/Doctrine/ORM/UnitOfWork.php | 51 +++-- .../ORM/Utility/IdentifierFlattener.php | 2 +- .../Mapping/BasicInheritanceMappingTest.php | 4 +- .../Mapping/ClassMetadataLoadEventTest.php | 10 +- .../ReflectionPropertiesGetterTest.php | 129 ------------ tests/Doctrine/Tests/ORM/UnitOfWorkTest.php | 8 +- 12 files changed, 279 insertions(+), 443 deletions(-) delete mode 100644 lib/Doctrine/ORM/Mapping/Reflection/ReflectionPropertiesGetter.php create mode 100644 lib/Doctrine/ORM/Mapping/TransientMetadata.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/Reflection/ReflectionPropertiesGetterTest.php diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 9fc62703e35..b6648bc9998 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -788,8 +788,6 @@ protected function validateAndCompleteFieldMapping(FieldMetadata $property) $fieldName = $property->getName(); $columnName = $property->getColumnName(); - $property->setDeclaringClass($this); - if (empty($columnName)) { $columnName = $this->namingStrategy->propertyToColumnName($fieldName, $this->name); @@ -850,7 +848,6 @@ protected function validateAndCompleteAssociationMapping(AssociationMetadata $pr $targetEntity = ltrim($this->fullyQualifiedClassName($targetEntity), '\\'); - $property->setDeclaringClass($this); $property->setSourceEntity($this->name); $property->setOwningSide($property->getMappedBy() === null); $property->setTargetEntity($targetEntity); @@ -1367,10 +1364,20 @@ public function setPropertyOverride(Property $property) throw MappingException::invalidOverrideFieldName($this->name, $fieldName); } - $originalProperty = $this->getProperty($fieldName); + $originalProperty = $this->getProperty($fieldName); + $originalPropertyClassName = get_class($originalProperty); + + // If moving from transient to persistent, assume it's a new property + if ($originalPropertyClassName === TransientMetadata::class) { + unset($this->properties[$fieldName]); + + $this->addProperty($property); + + return; + } // Do not allow to change property type - if (get_class($originalProperty) !== get_class($property)) { + if ($originalPropertyClassName !== get_class($property)) { throw MappingException::invalidOverridePropertyType($this->name, $fieldName); } @@ -1500,6 +1507,8 @@ public function addProperty(Property $property) throw MappingException::missingFieldName($this->name); } + $property->setDeclaringClass($this); + switch (true) { case ($property instanceof FieldMetadata): $this->validateAndCompleteFieldMapping($property); @@ -1528,6 +1537,8 @@ public function addProperty(Property $property) $this->validateAndCompleteToManyAssociationMetadata($property); $this->validateAndCompleteManyToManyMapping($property); break; + + // Transient properties are ignored on purpose here! =) } // Check for duplicated property diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index e32fa122aea..98fe871f239 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -380,6 +380,12 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $metadata->mapEmbedded($mapping); break; + + default: + $property = new Mapping\TransientMetadata($reflProperty->getName()); + + $metadata->addProperty($property); + break; } } diff --git a/lib/Doctrine/ORM/Mapping/Reflection/ReflectionPropertiesGetter.php b/lib/Doctrine/ORM/Mapping/Reflection/ReflectionPropertiesGetter.php deleted file mode 100644 index 6ac7f11c3fd..00000000000 --- a/lib/Doctrine/ORM/Mapping/Reflection/ReflectionPropertiesGetter.php +++ /dev/null @@ -1,163 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Reflection; - -use Doctrine\Common\Persistence\Mapping\ReflectionService; -use ReflectionClass; -use ReflectionProperty; - -/** - * Utility class to retrieve all reflection instance properties of a given class, including - * private inherited properties and transient properties. - * - * @private This API is for internal use only - * - * @author Marco Pivetta - */ -final class ReflectionPropertiesGetter -{ - /** - * @var ReflectionProperty[][] indexed by class name and property internal name - */ - private $properties = []; - - /** - * @var ReflectionService - */ - private $reflectionService; - - /** - * @param ReflectionService $reflectionService - */ - public function __construct(ReflectionService $reflectionService) - { - $this->reflectionService = $reflectionService; - } - - /** - * @param $className - * - * @return ReflectionProperty[] indexed by property internal name - */ - public function getProperties($className) - { - if (isset($this->properties[$className])) { - return $this->properties[$className]; - } - - return $this->properties[$className] = call_user_func_array( - 'array_merge', - // first merge because `array_merge` expects >= 1 params - array_merge( - [[]], - array_map( - [$this, 'getClassProperties'], - $this->getHierarchyClasses($className) - ) - ) - ); - } - - /** - * @param string $className - * - * @return ReflectionClass[] - */ - private function getHierarchyClasses($className) - { - $classes = []; - $parentClassName = $className; - - while ($parentClassName && $currentClass = $this->reflectionService->getClass($parentClassName)) { - $classes[] = $currentClass; - $parentClassName = null; - - if ($parentClass = $currentClass->getParentClass()) { - $parentClassName = $parentClass->getName(); - } - } - - return $classes; - } - - /** - * @param ReflectionClass $reflectionClass - * - * @return ReflectionProperty[] - */ - private function getClassProperties(ReflectionClass $reflectionClass) - { - $properties = $reflectionClass->getProperties(); - - return array_filter( - array_filter(array_map( - [$this, 'getAccessibleProperty'], - array_combine( - array_map([$this, 'getLogicalName'], $properties), - $properties - ) - )), - [$this, 'isInstanceProperty'] - ); - } - - /** - * @param ReflectionProperty $reflectionProperty - * - * @return bool - */ - private function isInstanceProperty(ReflectionProperty $reflectionProperty) - { - return ! $reflectionProperty->isStatic(); - } - - /** - * @param ReflectionProperty $property - * - * @return null|ReflectionProperty - */ - private function getAccessibleProperty(ReflectionProperty $property) - { - return $this->reflectionService->getAccessibleProperty( - $property->getDeclaringClass()->getName(), - $property->getName() - ); - } - - /** - * @param ReflectionProperty $property - * - * @return string - */ - private function getLogicalName(ReflectionProperty $property) - { - $propertyName = $property->getName(); - - if ($property->isPublic()) { - return $propertyName; - } - - if ($property->isProtected()) { - return "\0*\0" . $propertyName; - } - - return "\0" . $property->getDeclaringClass()->getName() . "\0" . $propertyName; - } -} diff --git a/lib/Doctrine/ORM/Mapping/TransientMetadata.php b/lib/Doctrine/ORM/Mapping/TransientMetadata.php new file mode 100644 index 00000000000..8e471cc7ebe --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/TransientMetadata.php @@ -0,0 +1,95 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +use Doctrine\Common\Persistence\Mapping\ReflectionService; + +class TransientMetadata implements Property +{ + /** @var ClassMetadata */ + protected $declaringClass; + + /** @var \ReflectionProperty */ + protected $reflection; + + /** @var string */ + protected $name; + + /** + * TransientMetadata constructor. + * + * @param string $name + */ + public function __construct(string $name) + { + $this->name = $name; + } + + /** + * {@inheritdoc} + */ + public function getDeclaringClass() + { + return $this->declaringClass; + } + + /** + * @param ClassMetadata $declaringClass + */ + public function setDeclaringClass(ClassMetadata $declaringClass) + { + $this->declaringClass = $declaringClass; + } + + /** + * {@inheritdoc} + */ + public function getName() + { + return $this->name; + } + + /** + * {@inheritdoc} + */ + public function setValue($object, $value) + { + $this->reflection->setValue($object, $value); + } + + /** + * {@inheritdoc} + */ + public function getValue($object) + { + return $this->reflection->getValue($object); + } + + /** + * {@inheritdoc} + */ + public function wakeupReflection(ReflectionService $reflectionService) + { + $this->reflection = $reflectionService->getAccessibleProperty($this->declaringClass->name, $this->name); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index da69b215454..3a9052e3778 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -34,12 +34,15 @@ use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\JoinColumnMetadata; +use Doctrine\ORM\Mapping\LocalColumnMetadata; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; use Doctrine\ORM\Mapping\ToManyAssociationMetadata; use Doctrine\ORM\Mapping\ToOneAssociationMetadata; +use Doctrine\ORM\Mapping\TransientMetadata; +use Doctrine\ORM\Mapping\VersionFieldMetadata; use Doctrine\ORM\OptimisticLockException; use Doctrine\ORM\ORMException; use Doctrine\ORM\PersistentCollection; @@ -1294,91 +1297,94 @@ protected function getSelectColumnsSQL() $columnList = []; foreach ($this->class->getProperties() as $fieldName => $property) { - if ($property instanceof FieldMetadata) { - $columnList[] = $this->getSelectColumnSQL($fieldName, $this->class); + switch (true) { + case ($property instanceof FieldMetadata): + $columnList[] = $this->getSelectColumnSQL($fieldName, $this->class); + break; - continue; - } + case ($property instanceof AssociationMetadata): + $assocColumnSQL = $this->getSelectColumnAssociationSQL($fieldName, $property, $this->class); - $assocColumnSQL = $this->getSelectColumnAssociationSQL($fieldName, $property, $this->class); + if ($assocColumnSQL) { + $columnList[] = $assocColumnSQL; + } - if ($assocColumnSQL) { - $columnList[] = $assocColumnSQL; - } + $isAssocToOneInverseSide = $property instanceof ToOneAssociationMetadata && ! $property->isOwningSide(); + $isAssocFromOneEager = ! $property instanceof ManyToManyAssociationMetadata && $property->getFetchMode() === FetchMode::EAGER; - $isAssocToOneInverseSide = $property instanceof ToOneAssociationMetadata && ! $property->isOwningSide(); - $isAssocFromOneEager = ! $property instanceof ManyToManyAssociationMetadata && $property->getFetchMode() === FetchMode::EAGER; + if ( ! ($isAssocFromOneEager || $isAssocToOneInverseSide)) { + break; + } - if ( ! ($isAssocFromOneEager || $isAssocToOneInverseSide)) { - continue; - } + if ($property instanceof ToManyAssociationMetadata && $this->currentPersisterContext->handlesLimits) { + break; + } - if ($property instanceof ToManyAssociationMetadata && $this->currentPersisterContext->handlesLimits) { - continue; - } + $targetEntity = $property->getTargetEntity(); + $eagerEntity = $this->em->getClassMetadata($targetEntity); - $targetEntity = $property->getTargetEntity(); - $eagerEntity = $this->em->getClassMetadata($targetEntity); + if ($eagerEntity->inheritanceType !== InheritanceType::NONE) { + break; // now this is why you shouldn't use inheritance + } - if ($eagerEntity->inheritanceType !== InheritanceType::NONE) { - continue; // now this is why you shouldn't use inheritance - } + $assocAlias = 'e' . ($eagerAliasCounter++); - $assocAlias = 'e' . ($eagerAliasCounter++); + $this->currentPersisterContext->rsm->addJoinedEntityResult($targetEntity, $assocAlias, 'r', $fieldName); - $this->currentPersisterContext->rsm->addJoinedEntityResult($targetEntity, $assocAlias, 'r', $fieldName); + foreach ($eagerEntity->fieldNames as $field) { + $columnSQL = $eagerEntity->hasField($field) + ? $this->getSelectColumnSQL($field, $eagerEntity, $assocAlias) + : $this->getSelectColumnAssociationSQL( + $field, $eagerEntity->getProperty($field), $eagerEntity, $assocAlias + ) + ; - foreach ($eagerEntity->fieldNames as $field) { - $columnSQL = $eagerEntity->hasField($field) - ? $this->getSelectColumnSQL($field, $eagerEntity, $assocAlias) - : $this->getSelectColumnAssociationSQL( - $field, $eagerEntity->getProperty($field), $eagerEntity, $assocAlias - ) - ; + if ($columnSQL) { + $columnList[] = $columnSQL; + } + } - if ($columnSQL) { - $columnList[] = $columnSQL; - } - } + $owningAssociation = $property; + $joinCondition = []; - $owningAssociation = $property; - $joinCondition = []; + if ($property instanceof ToManyAssociationMetadata && $property->getIndexedBy()) { + $this->currentPersisterContext->rsm->addIndexBy($assocAlias, $property->getIndexedBy()); + } - if ($property instanceof ToManyAssociationMetadata && $property->getIndexedBy()) { - $this->currentPersisterContext->rsm->addIndexBy($assocAlias, $property->getIndexedBy()); - } + if (! $property->isOwningSide()) { + $owningAssociation = $eagerEntity->getProperty($property->getMappedBy()); + } - if (! $property->isOwningSide()) { - $owningAssociation = $eagerEntity->getProperty($property->getMappedBy()); - } + $joinTableAlias = $this->getSQLTableAlias($eagerEntity->getTableName(), $assocAlias); + $joinTableName = $eagerEntity->table->getQuotedQualifiedName($this->platform); + + $this->currentPersisterContext->selectJoinSql .= ' ' . $this->getJoinSQLForAssociation($property); - $joinTableAlias = $this->getSQLTableAlias($eagerEntity->getTableName(), $assocAlias); - $joinTableName = $eagerEntity->table->getQuotedQualifiedName($this->platform); + $sourceClass = $this->em->getClassMetadata($owningAssociation->getSourceEntity()); + $targetClass = $this->em->getClassMetadata($owningAssociation->getTargetEntity()); + $targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName(), $property->isOwningSide() ? $assocAlias : ''); + $sourceTableAlias = $this->getSQLTableAlias($sourceClass->getTableName(), $property->isOwningSide() ? '' : $assocAlias); - $this->currentPersisterContext->selectJoinSql .= ' ' . $this->getJoinSQLForAssociation($property); + foreach ($owningAssociation->getJoinColumns() as $joinColumn) { + $joinCondition[] = sprintf( + '%s.%s = %s.%s', + $sourceTableAlias, + $this->platform->quoteIdentifier($joinColumn->getColumnName()), + $targetTableAlias, + $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()) + ); + } - $sourceClass = $this->em->getClassMetadata($owningAssociation->getSourceEntity()); - $targetClass = $this->em->getClassMetadata($owningAssociation->getTargetEntity()); - $targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName(), $property->isOwningSide() ? $assocAlias : ''); - $sourceTableAlias = $this->getSQLTableAlias($sourceClass->getTableName(), $property->isOwningSide() ? '' : $assocAlias); + // Add filter SQL + if ($filterSql = $this->generateFilterConditionSQL($eagerEntity, $targetTableAlias)) { + $joinCondition[] = $filterSql; + } - foreach ($owningAssociation->getJoinColumns() as $joinColumn) { - $joinCondition[] = sprintf( - '%s.%s = %s.%s', - $sourceTableAlias, - $this->platform->quoteIdentifier($joinColumn->getColumnName()), - $targetTableAlias, - $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()) - ); - } + $this->currentPersisterContext->selectJoinSql .= ' ' . $joinTableName . ' ' . $joinTableAlias . ' ON '; + $this->currentPersisterContext->selectJoinSql .= implode(' AND ', $joinCondition); - // Add filter SQL - if ($filterSql = $this->generateFilterConditionSQL($eagerEntity, $targetTableAlias)) { - $joinCondition[] = $filterSql; + break; } - - $this->currentPersisterContext->selectJoinSql .= ' ' . $joinTableName . ' ' . $joinTableAlias . ' ON '; - $this->currentPersisterContext->selectJoinSql .= implode(' AND ', $joinCondition); } $this->currentPersisterContext->selectColumnListSql = implode(', ', $columnList); @@ -1526,43 +1532,47 @@ protected function getInsertColumnList() ; foreach ($this->class->getProperties() as $name => $property) { - if ($versionPropertyName === $name) { - continue; - } - /*if (isset($this->class->embeddedClasses[$name])) { continue; }*/ - if ($property instanceof AssociationMetadata) { - if ($property->isOwningSide() && $property instanceof ToOneAssociationMetadata) { - $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); - - foreach ($property->getJoinColumns() as $joinColumn) { - $columnName = $joinColumn->getColumnName(); - $referencedColumnName = $joinColumn->getReferencedColumnName(); + switch (true) { + case ($property instanceof VersionFieldMetadata): + // Do nothing + break; - if (! $joinColumn->getType()) { - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) - ); - } + case ($property instanceof LocalColumnMetadata): + if ($this->class->generatorType !== GeneratorType::IDENTITY || $this->class->identifier[0] !== $name) { + $columnName = $property->getColumnName(); $columns[] = $columnName; - $this->columns[$columnName] = $joinColumn; + $this->columns[$columnName] = $property; } - } - continue; - } + break; - if ($this->class->generatorType !== GeneratorType::IDENTITY || $this->class->identifier[0] !== $name) { - $columnName = $property->getColumnName(); + case ($property instanceof AssociationMetadata): + if ($property->isOwningSide() && $property instanceof ToOneAssociationMetadata) { + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); - $columns[] = $columnName; + foreach ($property->getJoinColumns() as $joinColumn) { + $columnName = $joinColumn->getColumnName(); + $referencedColumnName = $joinColumn->getReferencedColumnName(); - $this->columns[$columnName] = $property; + if (! $joinColumn->getType()) { + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) + ); + } + + $columns[] = $columnName; + + $this->columns[$columnName] = $joinColumn; + } + } + + break; } } diff --git a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php index f7b6c5a18f9..33ff17fcdca 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php @@ -76,30 +76,29 @@ protected function getSelectColumnsSQL() continue; } - if ($property instanceof FieldMetadata) { - $columnList[] = $this->getSelectColumnSQL($fieldName, $subClass); - - continue; - } - - if ($property instanceof ToManyAssociationMetadata || ! $property->isOwningSide()) { - continue; - } - - $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); - - foreach ($property->getJoinColumns() as $joinColumn) { - if (! $joinColumn->getType()) { - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) - ); - } - - $columnList[] = $this->getSelectJoinColumnSQL( - $joinColumn->getTableName(), - $joinColumn->getColumnName(), - $joinColumn->getType() - ); + switch (true) { + case ($property instanceof FieldMetadata): + $columnList[] = $this->getSelectColumnSQL($fieldName, $subClass); + break; + + case ($property instanceof ToOneAssociationMetadata): + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); + + foreach ($property->getJoinColumns() as $joinColumn) { + if (! $joinColumn->getType()) { + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) + ); + } + + $columnList[] = $this->getSelectJoinColumnSQL( + $joinColumn->getTableName(), + $joinColumn->getColumnName(), + $joinColumn->getType() + ); + } + + break; } } } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index f47662a0174..819c9e9a4f1 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -46,9 +46,9 @@ use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; use Doctrine\ORM\Mapping\Property; -use Doctrine\ORM\Mapping\Reflection\ReflectionPropertiesGetter; use Doctrine\ORM\Mapping\ToManyAssociationMetadata; use Doctrine\ORM\Mapping\ToOneAssociationMetadata; +use Doctrine\ORM\Mapping\VersionFieldMetadata; use Doctrine\ORM\Persisters\Collection\ManyToManyPersister; use Doctrine\ORM\Persisters\Collection\OneToManyPersister; use Doctrine\ORM\Persisters\Entity\BasicEntityPersister; @@ -294,11 +294,6 @@ class UnitOfWork implements PropertyChangedListener */ private $hydrationCompleteHandler; - /** - * @var ReflectionPropertiesGetter - */ - private $reflectionPropertiesGetter; - /** * Initializes a new UnitOfWork instance, bound to the given EntityManager. * @@ -306,13 +301,12 @@ class UnitOfWork implements PropertyChangedListener */ public function __construct(EntityManagerInterface $em) { - $this->em = $em; - $this->eventManager = $em->getEventManager(); - $this->listenersInvoker = new ListenersInvoker($em); - $this->hasCache = $em->getConfiguration()->isSecondLevelCacheEnabled(); - $this->identifierFlattener = new IdentifierFlattener($this, $em->getMetadataFactory()); - $this->hydrationCompleteHandler = new HydrationCompleteHandler($this->listenersInvoker, $em); - $this->reflectionPropertiesGetter = new ReflectionPropertiesGetter(new RuntimeReflectionService()); + $this->em = $em; + $this->eventManager = $em->getEventManager(); + $this->listenersInvoker = new ListenersInvoker($em); + $this->hasCache = $em->getConfiguration()->isSecondLevelCacheEnabled(); + $this->identifierFlattener = new IdentifierFlattener($this, $em->getMetadataFactory()); + $this->hydrationCompleteHandler = new HydrationCompleteHandler($this->listenersInvoker, $em); } /** @@ -973,10 +967,21 @@ public function recomputeSingleEntityChangeSet(ClassMetadata $class, $entity) $actualData = []; foreach ($class->getProperties() as $name => $property) { - if ((! $property->isPrimaryKey() || $class->generatorType !== GeneratorType::IDENTITY) - && ($class->versionProperty === null || $name !== $class->versionProperty->getName()) - && ! $class->isCollectionValuedAssociation($name)) { - $actualData[$name] = $property->getValue($entity); + switch (true) { + case ($property instanceof VersionFieldMetadata): + // Ignore version field + break; + + case ($property instanceof FieldMetadata): + if (! $property->isPrimaryKey() || $class->generatorType !== GeneratorType::IDENTITY) { + $actualData[$name] = $property->getValue($entity); + } + + break; + + case ($property instanceof ToOneAssociationMetadata): + $actualData[$name] = $property->getValue($entity); + break; } } @@ -3406,13 +3411,7 @@ private function mergeEntityStateIntoManagedCopy($entity, $managedCopy) $class = $this->em->getClassMetadata(get_class($entity)); - foreach ($this->reflectionPropertiesGetter->getProperties($class->name) as $reflectionProperty) { - $name = $reflectionProperty->name; - - $reflectionProperty->setAccessible(true); - - $property = $class->getProperty($name); - + foreach ($class->getProperties() as $property) { switch (true) { case ($property instanceof FieldMetadata): if (! $property->isPrimaryKey()) { @@ -3498,14 +3497,14 @@ private function mergeEntityStateIntoManagedCopy($entity, $managedCopy) default: // Non-persistent properties are handled here. Copy them as-is - $reflectionProperty->setValue($managedCopy, $reflectionProperty->getValue($entity)); + $property->setValue($managedCopy, $property->getValue($entity)); break; } if ($class->changeTrackingPolicy === ChangeTrackingPolicy::NOTIFY) { // Just treat all properties as changed, there is no other choice. - $this->propertyChanged($managedCopy, $name, null, $property->getValue($managedCopy)); + $this->propertyChanged($managedCopy, $property->getName(), null, $property->getValue($managedCopy)); } } } diff --git a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php index 28b84ceec03..d966b2bbcfd 100644 --- a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php +++ b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php @@ -22,7 +22,7 @@ use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\UnitOfWork; use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\ClassMetadataFactory; +use Doctrine\Common\Persistence\Mapping\ClassMetadataFactory; /** * The IdentifierFlattener utility now houses some of the identifier manipulation logic from unit of work, so that it diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index 329c6fa868d..9c5efa9a643 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -5,6 +5,7 @@ use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\EntityRepository; +use Doctrine\ORM\Mapping\TransientMetadata; use Doctrine\ORM\Sequencing\SequenceGenerator; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\ClassMetadata; @@ -64,7 +65,8 @@ public function testGetMetadataForSubclassWithMappedSuperclass() self::assertTrue($class->isInheritedProperty('mapped1')); self::assertTrue($class->isInheritedProperty('mapped2')); - self::assertNull($class->getProperty('transient')); + self::assertNotNull($class->getProperty('transient')); + self::assertInstanceOf(TransientMetadata::class, $class->getProperty('transient')); self::assertArrayHasKey('mappedRelated1', $class->getProperties()); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php index 5a4bcef086b..05f0dd09682 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataLoadEventTest.php @@ -23,11 +23,11 @@ public function testEvent() $eventManager->addEventListener(Events::loadClassMetadata, $this); $metadata = $metadataFactory->getMetadataFor(LoadEventTestEntity::class); + $property = $metadata->getProperty('about'); - self::assertTrue($metadata->hasField('about')); + self::assertInstanceOf(Mapping\FieldMetadata::class, $property); - $property = $metadata->getProperty('about'); - $test = new LoadEventTestEntity(); + $test = new LoadEventTestEntity(); $property->setValue($test, 'About who?'); @@ -36,13 +36,13 @@ public function testEvent() public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs) { - $metadata = $eventArgs->getClassMetadata(); + $metadata = $eventArgs->getClassMetadata(); $fieldMetadata = new Mapping\FieldMetadata('about'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setLength(255); - $metadata->addProperty($fieldMetadata); + $metadata->setPropertyOverride($fieldMetadata); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/Reflection/ReflectionPropertiesGetterTest.php b/tests/Doctrine/Tests/ORM/Mapping/Reflection/ReflectionPropertiesGetterTest.php deleted file mode 100644 index a36de5339a0..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/Reflection/ReflectionPropertiesGetterTest.php +++ /dev/null @@ -1,129 +0,0 @@ -getProperties(ClassWithMixedProperties::class); - - self::assertCount(5, $properties); - - foreach ($properties as $property) { - self::assertInstanceOf('ReflectionProperty', $property); - } - } - - public function testRetrievedInstancesAreNotStatic() - { - $properties = (new ReflectionPropertiesGetter(new RuntimeReflectionService())) - ->getProperties(ClassWithMixedProperties::class); - - foreach ($properties as $property) { - self::assertFalse($property->isStatic()); - } - } - - public function testExpectedKeys() - { - $properties = (new ReflectionPropertiesGetter(new RuntimeReflectionService())) - ->getProperties(ClassWithMixedProperties::class); - - self::assertArrayHasKey( - "\0" . ClassWithMixedProperties::class . "\0" . 'privateProperty', - $properties - ); - self::assertArrayHasKey( - "\0" . ClassWithMixedProperties::class . "\0" . 'privatePropertyOverride', - $properties - ); - self::assertArrayHasKey( - "\0" . ParentClass::class . "\0" . 'privatePropertyOverride', - $properties - ); - self::assertArrayHasKey( - "\0*\0protectedProperty", - $properties - ); - self::assertArrayHasKey( - "publicProperty", - $properties - ); - } - - public function testPropertiesAreAccessible() - { - $object = new ClassWithMixedProperties(); - $properties = (new ReflectionPropertiesGetter(new RuntimeReflectionService())) - ->getProperties(ClassWithMixedProperties::class); - - foreach ($properties as $property) { - self::assertSame($property->getName(), $property->getValue($object)); - } - } - - public function testPropertyGetterIsIdempotent() - { - $getter = (new ReflectionPropertiesGetter(new RuntimeReflectionService())); - - self::assertSame( - $getter->getProperties(ClassWithMixedProperties::class), - $getter->getProperties(ClassWithMixedProperties::class) - ); - } - - public function testPropertyGetterWillSkipPropertiesNotRetrievedByTheRuntimeReflectionService() - { - /* @var $reflectionService ReflectionService|\PHPUnit_Framework_MockObject_MockObject */ - $reflectionService = $this->createMock(ReflectionService::class); - - $reflectionService - ->expects($this->exactly(2)) - ->method('getClass') - ->with($this->logicalOr(ClassWithMixedProperties::class, ParentClass::class)) - ->will($this->returnValueMap([ - [ClassWithMixedProperties::class, new ReflectionClass(ClassWithMixedProperties::class)], - [ParentClass::class, new ReflectionClass(ParentClass::class)], - ])); - - $reflectionService - ->expects($this->atLeastOnce()) - ->method('getAccessibleProperty'); - - $getter = (new ReflectionPropertiesGetter($reflectionService)); - - self::assertEmpty($getter->getProperties(ClassWithMixedProperties::class)); - } - - public function testPropertyGetterWillSkipClassesNotRetrievedByTheRuntimeReflectionService() - { - /* @var $reflectionService ReflectionService|\PHPUnit_Framework_MockObject_MockObject */ - $reflectionService = $this->createMock(ReflectionService::class); - - $reflectionService - ->expects($this->once()) - ->method('getClass') - ->with(ClassWithMixedProperties::class); - - $reflectionService->expects($this->never())->method('getAccessibleProperty'); - - $getter = (new ReflectionPropertiesGetter($reflectionService)); - - self::assertEmpty($getter->getProperties(ClassWithMixedProperties::class)); - } -} diff --git a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php index 5e0f87c6eb0..50edd3d036a 100644 --- a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php +++ b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php @@ -175,7 +175,13 @@ public function testChangeTrackingNotify() self::assertTrue($this->unitOfWork->isScheduledForDirtyCheck($entity)); - self::assertEquals(['data' => ['thedata', 'newdata']], $this->unitOfWork->getEntityChangeSet($entity)); + self::assertEquals( + [ + 'data' => ['thedata', 'newdata'], + 'transient' => [null, 'newtransientvalue'], + ], + $this->unitOfWork->getEntityChangeSet($entity) + ); $item = new NotifyChangedRelatedItem(); $entity->getItems()->add($item); From d21a50ff56a97b0d7e3d26e60f8d86c1d30d66e4 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 27 Mar 2017 22:54:16 -0400 Subject: [PATCH 132/275] Simplified version field metadata setup. Implemented more exporters --- UPGRADE.md | 2 +- .../ORM/Mapping/Builder/FieldBuilder.php | 2 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 78 +++--- .../ORM/Mapping/ClassMetadataFactory.php | 4 - .../ORM/Mapping/Driver/AnnotationDriver.php | 11 - lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 4 - .../Exporter/AssociationMetadataExporter.php | 101 ++++++++ .../Exporter/CacheMetadataExporter.php | 59 +++++ .../Exporter/ClassMetadataExporter.php | 229 +++++++++++++++++- .../Exporter/FieldMetadataExporter.php | 2 +- .../Exporter/JoinColumnMetadataExporter.php | 10 +- .../ManyToManyAssociationMetadataExporter.php | 63 +++++ .../ManyToOneAssociationMetadataExporter.php | 39 +++ .../OneToManyAssociationMetadataExporter.php | 39 +++ .../OneToOneAssociationMetadataExporter.php | 39 +++ .../ToManyAssociationMetadataExporter.php | 50 ++++ .../ToOneAssociationMetadataExporter.php | 51 ++++ .../Exporter/TransientMetadataExporter.php | 55 +++++ .../Exporter/VersionFieldMetadataExporter.php | 2 +- .../Mapping/ManyToManyAssociationMetadata.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 1 - .../Tests/ORM/Mapping/ClassMetadataTest.php | 2 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 1 - 23 files changed, 766 insertions(+), 80 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php create mode 100644 lib/Doctrine/ORM/Mapping/Exporter/CacheMetadataExporter.php create mode 100644 lib/Doctrine/ORM/Mapping/Exporter/ManyToManyAssociationMetadataExporter.php create mode 100644 lib/Doctrine/ORM/Mapping/Exporter/ManyToOneAssociationMetadataExporter.php create mode 100644 lib/Doctrine/ORM/Mapping/Exporter/OneToManyAssociationMetadataExporter.php create mode 100644 lib/Doctrine/ORM/Mapping/Exporter/OneToOneAssociationMetadataExporter.php create mode 100644 lib/Doctrine/ORM/Mapping/Exporter/ToManyAssociationMetadataExporter.php create mode 100644 lib/Doctrine/ORM/Mapping/Exporter/ToOneAssociationMetadataExporter.php create mode 100644 lib/Doctrine/ORM/Mapping/Exporter/TransientMetadataExporter.php diff --git a/UPGRADE.md b/UPGRADE.md index 4c8a27ad549..1777fee45f2 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -23,7 +23,7 @@ annotation or XML drivers instead. * ``ClassMetadata::getQuotedJoinTableName`` * ``ClassMetadata::getQuotedIdentifierColumnNames`` * ``ClassMetadata::getIdentifierColumnNames`` => Use ``ClassMetadata::getIdentifierColumns($entityManager)`` -* ``ClassMetadata::setVersionMetadata`` => Use ``ClassMetadata::setVersionProperty`` +* ``ClassMetadata::setVersionMetadata`` * ``ClassMetadata::setVersioned`` * ``ClassMetadata::invokeLifecycleCallbacks`` * ``ClassMetadata::isInheritedField`` => Use ``ClassMetadata::getProperty()::isInherited()`` diff --git a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php index 1806eb4e4e5..1382c2b931f 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php @@ -291,7 +291,7 @@ public function build() $property = $cm->getProperty($this->name); if (isset($this->mapping['version']) && $this->mapping['version']) { - $cm->setVersionProperty($property); + $cm->versionProperty = $property; } if ($this->generatorDefinition) { diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index b6648bc9998..cd39d519842 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -779,8 +779,6 @@ public function getSqlResultSetMappings() * * @param FieldMetadata $property * - * @return array The updated mapping. - * * @throws MappingException If something is wrong with the mapping. */ protected function validateAndCompleteFieldMapping(FieldMetadata $property) @@ -828,6 +826,38 @@ protected function validateAndCompleteFieldMapping(FieldMetadata $property) $this->fieldNames[$columnName] = $fieldName; } + /** + * Validates & completes the basic mapping information for field mapping. + * + * @param VersionFieldMetadata $property + * + * @throws MappingException If something is wrong with the mapping. + */ + protected function validateAndCompleteVersionFieldMapping(VersionFieldMetadata $property) + { + $this->versionProperty = $property; + + $options = $property->getOptions(); + + if (isset($options['default'])) { + return; + } + + if (in_array($property->getTypeName(), ['integer', 'bigint', 'smallint'])) { + $property->setOptions(array_merge($options, ['default' => 1])); + + return; + } + + if ($property->getTypeName() === 'datetime') { + $property->setOptions(array_merge($options, ['default' => 'CURRENT_TIMESTAMP'])); + + return; + } + + throw MappingException::unsupportedOptimisticLockingType($property->getType()); + } + /** * Validates & completes the basic mapping information that is common to all * association mappings (one-to-one, many-ot-one, one-to-many, many-to-many). @@ -1510,6 +1540,11 @@ public function addProperty(Property $property) $property->setDeclaringClass($this); switch (true) { + case ($property instanceof VersionFieldMetadata): + $this->validateAndCompleteFieldMapping($property); + $this->validateAndCompleteVersionFieldMapping($property); + break; + case ($property instanceof FieldMetadata): $this->validateAndCompleteFieldMapping($property); break; @@ -1576,6 +1611,10 @@ public function addInheritedProperty(Property $property) $this->assertPropertyNotMapped($property->getName()); $this->properties[$property->getName()] = $inheritedProperty; + + if ($inheritedProperty instanceof VersionFieldMetadata) { + $this->versionProperty = $inheritedProperty; + } } /** @@ -1978,41 +2017,6 @@ public function setGeneratorDefinition(array $definition) $this->generatorDefinition = $definition; } - /** - * Sets the version field mapping used for versioning. Sets the default - * value to use depending on the column type. - * - * @param VersionFieldMetadata $versionFieldMetadata - * - * @return void - * - * @throws MappingException - */ - public function setVersionProperty(VersionFieldMetadata $versionFieldMetadata) - { - $this->versionProperty = $versionFieldMetadata; - - $options = $versionFieldMetadata->getOptions(); - - if (isset($options['default'])) { - return; - } - - if (in_array($versionFieldMetadata->getTypeName(), ['integer', 'bigint', 'smallint'])) { - $versionFieldMetadata->setOptions(array_merge($options, ['default' => 1])); - - return; - } - - if ($versionFieldMetadata->getTypeName() === 'datetime') { - $versionFieldMetadata->setOptions(array_merge($options, ['default' => 'CURRENT_TIMESTAMP'])); - - return; - } - - throw MappingException::unsupportedOptimisticLockingType($versionFieldMetadata->getType()); - } - /** * Marks this class as read only, no change tracking is applied to it. * diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 1723cd82b9a..ebfe6887ad2 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -137,10 +137,6 @@ protected function doLoadMetadata( $class->setIdGeneratorType($parent->generatorType); $class->setIdentifier($parent->identifier); - if ($parent->versionProperty) { - $class->setVersionProperty($parent->versionProperty); - } - if ($parent->discriminatorColumn) { $class->setDiscriminatorColumn($parent->discriminatorColumn); $class->setDiscriminatorMap($parent->discriminatorMap); diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 98fe871f239..d387c70da7d 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -318,12 +318,6 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat ); $metadata->addProperty($fieldMetadata); - - // Check for Version - if ($fieldMetadata instanceof Mapping\VersionFieldMetadata) { - $metadata->setVersionProperty($fieldMetadata); - } - break; case isset($propertyAnnotations[Annotation\OneToOne::class]): @@ -334,7 +328,6 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat ); $metadata->addProperty($assocMetadata); - break; case isset($propertyAnnotations[Annotation\ManyToOne::class]): @@ -345,7 +338,6 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat ); $metadata->addProperty($assocMetadata); - break; case isset($propertyAnnotations[Annotation\OneToMany::class]): @@ -356,7 +348,6 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat ); $metadata->addProperty($assocMetadata); - break; case isset($propertyAnnotations[Annotation\ManyToMany::class]): @@ -367,7 +358,6 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat ); $metadata->addProperty($assocMetadata); - break; case isset($propertyAnnotations[Annotation\Embedded::class]): @@ -378,7 +368,6 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $mapping['columnPrefix'] = $embeddedAnnot->columnPrefix; $metadata->mapEmbedded($mapping); - break; default: diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index b19963bcb1e..37644c18993 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -287,10 +287,6 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $fieldMetadata = $this->convertFieldElementToFieldMetadata($fieldElement, $fieldName, $isFieldVersioned); $metadata->addProperty($fieldMetadata); - - if ($fieldMetadata instanceof VersionFieldMetadata) { - $metadata->setVersionProperty($fieldMetadata); - } } } diff --git a/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php new file mode 100644 index 00000000000..2e70ce4eb32 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php @@ -0,0 +1,101 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\AssociationMetadata; + +abstract class AssociationMetadataExporter implements Exporter +{ + const VARIABLE = '$property'; + + /** + * {@inheritdoc} + */ + public function export($value, int $indentationLevel = 0): string + { + /** @var AssociationMetadata $value */ + $cacheExporter = new CacheMetadataExporter(); + $variableExporter = new VariableExporter(); + $indentation = str_repeat(self::INDENTATION, $indentationLevel); + $objectReference = $indentation . static::VARIABLE; + $cascade = $this->resolveCascade($value->getCascade()); + $lines = []; + + $lines[] = $objectReference . ' = ' . $this->exportInstantiation($value); + + if (! empty($value->getCache())) { + $lines[] = $cacheExporter->export($value->getCache(), $indentationLevel); + $lines[] = null; + $lines[] = $objectReference . '->setCache(' . $cacheExporter::VARIABLE . ');'; + } + + if (! empty($value->getMappedBy())) { + $lines[] = $objectReference . '->setMappedBy("' . $value->getMappedBy() . '");'; + } + + if (! empty($value->getInversedBy())) { + $lines[] = $objectReference . '->setInversedBy("' . $value->getInversedBy() . '");'; + } + + $lines[] = $objectReference . '->setSourceEntity("' . $value->getSourceEntity() . '");'; + $lines[] = $objectReference . '->setTargetEntity("' . $value->getTargetEntity() . '");'; + $lines[] = $objectReference . '->setFetchMode(Mapping\FetchMode::' . strtoupper($value->getFetchMode()) . '");'; + $lines[] = $objectReference . '->setCascade(' . $variableExporter->export($cascade, $indentationLevel + 1) . ');'; + $lines[] = $objectReference . '->setOwningSide(' . $variableExporter->export($value->isOwningSide(), $indentationLevel + 1) . ');'; + $lines[] = $objectReference . '->setOrphanRemoval(' . $variableExporter->export($value->isOrphanRemoval(), $indentationLevel + 1) . ');'; + $lines[] = $objectReference . '->setPrimaryKey(' . $variableExporter->export($value->isPrimaryKey(), $indentationLevel + 1) . ');'; + + + return implode(PHP_EOL, $lines); + } + + /** + * @param array $cascade + * + * @return array + */ + private function resolveCascade(array $cascade) + { + $resolvedCascade = ['remove', 'persist', 'refresh', 'merge', 'detach']; + + foreach ($resolvedCascade as $key => $value) { + if (in_array($value, $cascade, true)) { + continue; + } + + unset($resolvedCascade[$key]); + } + + return count($resolvedCascade) === 5 + ? ['all'] + : $resolvedCascade + ; + } + + /** + * @param AssociationMetadata $metadata + * + * @return string + */ + abstract protected function exportInstantiation(AssociationMetadata $metadata) : string; +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/CacheMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/CacheMetadataExporter.php new file mode 100644 index 00000000000..e1c06d8ae26 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Exporter/CacheMetadataExporter.php @@ -0,0 +1,59 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\CacheMetadata; + +class CacheMetadataExporter implements Exporter +{ + const VARIABLE = '$cache'; + + /** + * {@inheritdoc} + */ + public function export($value, int $indentationLevel = 0) : string + { + /** @var CacheMetadata $value */ + $indentation = str_repeat(self::INDENTATION, $indentationLevel); + $objectReference = $indentation . static::VARIABLE; + $lines = []; + + $lines[] = $objectReference . ' = ' . $this->exportInstantiation($value); + + return implode(PHP_EOL, $lines); + } + + /** + * @param CacheMetadata $metadata + * + * @return string + */ + protected function exportInstantiation(CacheMetadata $metadata) : string + { + return sprintf( + 'new Mapping\CacheMetadata(Mapping\CacheUsage::%s, "%s");', + strtoupper($metadata->getUsage()), + $metadata->getRegion() + ); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php index f6a0f7df80d..544ad940813 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php @@ -23,37 +23,242 @@ namespace Doctrine\ORM\Mapping\Builder; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\Property; +use Doctrine\ORM\Mapping\TableMetadata; +use Doctrine\ORM\Mapping\VersionFieldMetadata; class ClassMetadataExporter implements Exporter { + const VARIABLE = '$this'; + /** * {@inheritdoc} */ public function export($value, int $indentationLevel = 0) : string { /** @var ClassMetadata $value */ - $variableExporter = new VariableExporter(); - $indentation = str_repeat(self::INDENTATION, $indentationLevel); - $objectReference = $indentation . static::VARIABLE; - $lines = []; + $reflectionClass = $value->getReflectionClass(); + $namespace = $reflectionClass->getNamespaceName(); + $lines = []; + + $lines[] = 'getShortName() . 'ClassMetadata extends ClassMetadata'; + $lines[] = '{'; + $lines[] = $this->exportClassBody($value, $indentationLevel + 1); + $lines[] = '}'; + $lines[] = null; + + return implode(PHP_EOL, $lines); + } + + /** + * @param ClassMetadata $metadata + * @param int $indentationLevel + * + * @return string + */ + private function exportClassBody(ClassMetadata $metadata, int $indentationLevel) : string + { + $lines = []; + + $lines[] = $this->exportConstructor($metadata, $indentationLevel); + $lines[] = null; + $lines[] = $this->exportInitialize($metadata, $indentationLevel); + + return implode(PHP_EOL, $lines); + } + + /** + * @param ClassMetadata $metadata + * @param int $indentationLevel + * + * @return string + */ + private function exportConstructor(ClassMetadata $metadata, int $indentationLevel) : string + { + $indentation = str_repeat(self::INDENTATION, $indentationLevel); + $bodyIndentation = str_repeat(self::INDENTATION, $indentationLevel + 1); + $objectReference = $bodyIndentation . static::VARIABLE; + $lines = []; + + $lines[] = $indentation . 'public function __construct(NamingStrategy $namingStrategy = null)'; + $lines[] = $indentation . '{'; + $lines[] = $bodyIndentation . 'parent::__construct("' . $metadata->getName() . '", $namingStrategy);'; + + // @todo guilhermeblanco Defined here because this will be defined at the class declaration level + // @todo guilhermeblanco (through "extends MappedClassMetadata") + if ($metadata->isMappedSuperclass) { + $lines[] = null; + $lines[] = $objectReference . '->isMappedSuperclass = true;'; + } + + $lines[] = $indentation . '}'; + + return implode(PHP_EOL, $lines); + } + + /** + * @param ClassMetadata $metadata + * @param int $indentationLevel + * + * @return string + */ + private function exportInitialize(ClassMetadata $metadata, int $indentationLevel) : string + { + $indentation = str_repeat(self::INDENTATION, $indentationLevel); + $bodyIndentation = str_repeat(self::INDENTATION, $indentationLevel + 1); + $objectReference = $bodyIndentation . static::VARIABLE; + $lines = []; + + $lines[] = $indentation . 'protected function initialize()'; + $lines[] = $indentation . '{'; - $lines[] = $objectReference . ' = ' . $this->exportInstantiation($value); + if ($metadata->customRepositoryClassName) { + $lines[] = $objectReference . '->customRepositoryClassName = "' . $metadata->customRepositoryClassName . '";'; + $lines[] = null; + } + + if ($metadata->changeTrackingPolicy) { + $lines[] = $objectReference . '->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::' . strtoupper($metadata->changeTrackingPolicy) . ');'; + $lines[] = null; + } + + if (! $metadata->isIdentifierComposite) { + $lines[] = $objectReference . '->setIdGeneratorType(Mapping\GeneratorType::' . strtoupper($metadata->generatorType) . ');'; + $lines[] = null; + } + + if ($metadata->inheritanceType) { + $lines[] = $objectReference . '->setInheritanceType(Mapping\InheritanceType::' . strtoupper($metadata->inheritanceType) . ');'; + $lines[] = null; + } + + if ($metadata->table) { + $lines[] = $bodyIndentation . '// Table'; + $lines[] = $this->exportTableMetadata($metadata->table, $indentationLevel + 1); + $lines[] = null; + } + + if ($metadata->discriminatorColumn) { + $lines[] = $bodyIndentation . '// Discriminator mapping'; + $lines[] = $this->exportDiscriminatorMetadata($metadata, $indentationLevel + 1); + $lines[] = null; + } + + if ($metadata->lifecycleCallbacks) { + $lines[] = $bodyIndentation . '// Lifecycle callbacks'; + + foreach ($metadata->lifecycleCallbacks as $event => $callbacks) { + foreach ($callbacks as $callback) { + $lines[] = $objectReference . '->addLifecycleCallback("' . $callback . '", "' . $event . '");'; + } + } + + $lines[] = null; + } + + foreach ($metadata->getProperties() as $name => $property) { + $lines[] = $bodyIndentation . '// Property: ' . $name; + $lines[] = $this->exportProperty($property, $indentationLevel + 1); + $lines[] = null; + } + + $lines[] = $indentation . '}'; return implode(PHP_EOL, $lines); } /** * @param ClassMetadata $metadata + * @param int $indentationLevel * * @return string */ - protected function exportInstantiation(ClassMetadata $metadata) : string + private function exportDiscriminatorMetadata(ClassMetadata $metadata, int $indentationLevel) : string { - return sprintf( - 'new Mapping\FieldMetadata("%s", "%s", Type::getType("%s"));', - $metadata->getName(), - $metadata->getColumnName(), - $metadata->getTypeName() - ); + $variableExporter = new VariableExporter(); + $discriminatorExporter = new DiscriminatorColumnMetadataExporter(); + $indentation = str_repeat(self::INDENTATION, $indentationLevel); + $objectReference = $indentation . static::VARIABLE; + $lines = []; + + $lines[] = $discriminatorExporter->export($metadata->discriminatorColumn, $indentationLevel); + $lines[] = null; + $lines[] = $objectReference . '->setDiscriminatorColumn(' . $discriminatorExporter::VARIABLE . ');'; + + if ($metadata->discriminatorMap) { + $discriminatorMap = $variableExporter->export($metadata->discriminatorMap, $indentationLevel + 1); + + $lines[] = $objectReference . '->setDiscriminatorMap(' . $discriminatorMap . ');'; + } + + return implode(PHP_EOL, $lines); + } + + /** + * @param TableMetadata $table + * @param int $indentationLevel + * + * @return string + */ + private function exportTableMetadata(TableMetadata $table, int $indentationLevel) : string + { + $tableExporter = new TableMetadataExporter(); + $indentation = str_repeat(self::INDENTATION, $indentationLevel); + $objectReference = $indentation . static::VARIABLE; + $lines = []; + + $lines[] = $tableExporter->export($table, $indentationLevel); + $lines[] = null; + $lines[] = $objectReference . '->table = ' . $tableExporter::VARIABLE . ';'; + + return implode(PHP_EOL, $lines); + } + + /** + * @param Property $property + * @param int $indentationLevel + * + * @return string + */ + private function exportProperty(Property $property, int $indentationLevel) : string + { + $indentation = str_repeat(self::INDENTATION, $indentationLevel); + $objectReference = $indentation . static::VARIABLE; + $lines = []; + + switch (true) { + case ($property instanceof VersionFieldMetadata): + $propertyExporter = new VersionFieldMetadataExporter(); + break; + + case ($property instanceof FieldMetadata): + $propertyExporter = new FieldMetadataExporter(); + break; + + // @todo guilhermeblanco Create AssociationMetadataExporters + + default: + $propertyExporter = new TransientMetadataExporter(); + break; + } + + $lines[] = $propertyExporter->export($property, $indentationLevel); + $lines[] = null; + $lines[] = $objectReference . '->addProperty(' . $propertyExporter::VARIABLE . ');'; + + return implode(PHP_EOL, $lines); } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php index a09459da8f1..e4e700df8a2 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php @@ -26,7 +26,7 @@ class FieldMetadataExporter extends LocalColumnMetadataExporter { - const VARIABLE = '$field'; + const VARIABLE = '$property'; /** * @param FieldMetadata $metadata diff --git a/lib/Doctrine/ORM/Mapping/Exporter/JoinColumnMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/JoinColumnMetadataExporter.php index bde4ffbdcf3..4de841e1bb1 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/JoinColumnMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/JoinColumnMetadataExporter.php @@ -34,12 +34,14 @@ class JoinColumnMetadataExporter extends ColumnMetadataExporter public function export($value, int $indentationLevel = 0) : string { /** @var JoinColumnMetadata $value */ - $variableExporter = new VariableExporter(); - $indentation = str_repeat(self::INDENTATION, $indentationLevel); - $objectReference = $indentation . static::VARIABLE; - $lines = []; + $indentation = str_repeat(self::INDENTATION, $indentationLevel); + $objectReference = $indentation . static::VARIABLE; + $lines = []; $lines[] = parent::export($value, $indentationLevel); + $lines[] = $objectReference . '->setReferencedColumnName("' . $value->getReferencedColumnName() . '");'; + $lines[] = $objectReference . '->setAliasedName("' . $value->getAliasedName() . '");'; + $lines[] = $objectReference . '->setOnDelete("' . $value->getOnDelete() . '");'; return implode(PHP_EOL, $lines); } diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ManyToManyAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ManyToManyAssociationMetadataExporter.php new file mode 100644 index 00000000000..dd483f16e83 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Exporter/ManyToManyAssociationMetadataExporter.php @@ -0,0 +1,63 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; + +class ManyToManyAssociationMetadataExporter extends ToManyAssociationMetadataExporter +{ + /** + * {@inheritdoc} + */ + public function export($value, int $indentationLevel = 0) : string + { + /** @var ManyToManyAssociationMetadata $value */ + $indentation = str_repeat(self::INDENTATION, $indentationLevel); + $objectReference = $indentation . static::VARIABLE; + $lines = []; + + $lines[] = parent::export($value, $indentationLevel); + + if (null !== $value->getJoinTable()) { + $joinTableExporter = new JoinColumnMetadataExporter(); + + $lines[] = null; + $lines[] = $joinTableExporter->export($value->getJoinTable(), $indentationLevel); + $lines[] = null; + $lines[] = $objectReference . '->setJoinTable(' . $joinTableExporter::VARIABLE . ');'; + } + + return implode(PHP_EOL, $lines); + } + + /** + * {@inheritdoc} + */ + protected function exportInstantiation(ManyToManyAssociationMetadata $metadata) : string + { + return sprintf( + 'new Mapping\ManyToManyAssociationMetadata("%s");', + $metadata->getName() + ); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ManyToOneAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ManyToOneAssociationMetadataExporter.php new file mode 100644 index 00000000000..c933f4a8bbe --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Exporter/ManyToOneAssociationMetadataExporter.php @@ -0,0 +1,39 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\ManyToOneAssociationMetadata; + +class ManyToOneAssociationMetadataExporter extends ToOneAssociationMetadataExporter +{ + /** + * {@inheritdoc} + */ + protected function exportInstantiation(ManyToOneAssociationMetadata $metadata) : string + { + return sprintf( + 'new Mapping\ManyToOneAssociationMetadata("%s");', + $metadata->getName() + ); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/OneToManyAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/OneToManyAssociationMetadataExporter.php new file mode 100644 index 00000000000..0112254d972 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Exporter/OneToManyAssociationMetadataExporter.php @@ -0,0 +1,39 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; + +class OneToManyAssociationMetadataExporter extends ToManyAssociationMetadataExporter +{ + /** + * {@inheritdoc} + */ + protected function exportInstantiation(OneToManyAssociationMetadata $metadata) : string + { + return sprintf( + 'new Mapping\OneToManyAssociationMetadata("%s");', + $metadata->getName() + ); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/OneToOneAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/OneToOneAssociationMetadataExporter.php new file mode 100644 index 00000000000..bc0fd308127 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Exporter/OneToOneAssociationMetadataExporter.php @@ -0,0 +1,39 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; + +class OneToOneAssociationMetadataExporter extends ToOneAssociationMetadataExporter +{ + /** + * {@inheritdoc} + */ + protected function exportInstantiation(OneToOneAssociationMetadata $metadata) : string + { + return sprintf( + 'new Mapping\OneToOneAssociationMetadata("%s");', + $metadata->getName() + ); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ToManyAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ToManyAssociationMetadataExporter.php new file mode 100644 index 00000000000..b40e671b8b2 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Exporter/ToManyAssociationMetadataExporter.php @@ -0,0 +1,50 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\ToManyAssociationMetadata; + +abstract class ToManyAssociationMetadataExporter extends AssociationMetadataExporter +{ + /** + * {@inheritdoc} + */ + public function export($value, int $indentationLevel = 0) : string + { + /** @var ToManyAssociationMetadata $value */ + $variableExporter = new VariableExporter(); + $indentation = str_repeat(self::INDENTATION, $indentationLevel); + $objectReference = $indentation . static::VARIABLE; + $lines = []; + + $lines[] = parent::export($value, $indentationLevel); + + if (! empty($value->getIndexedBy())) { + $lines[] = $objectReference . '->setIndexedBy("' . $value->getIndexedBy() . '"");'; + } + + $lines[] = $objectReference . '->setOderBy(' . $variableExporter->export($value->getOrderBy(), $indentationLevel + 1) . ');'; + + return implode(PHP_EOL, $lines); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ToOneAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ToOneAssociationMetadataExporter.php new file mode 100644 index 00000000000..8a5ebf9a7e9 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Exporter/ToOneAssociationMetadataExporter.php @@ -0,0 +1,51 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; + +abstract class ToOneAssociationMetadataExporter extends AssociationMetadataExporter +{ + /** + * {@inheritdoc} + */ + public function export($value, int $indentationLevel = 0) : string + { + /** @var ToOneAssociationMetadata $value */ + $joinColumnExporter = new JoinColumnMetadataExporter(); + $indentation = str_repeat(self::INDENTATION, $indentationLevel); + $objectReference = $indentation . static::VARIABLE; + $lines = []; + + $lines[] = parent::export($value, $indentationLevel); + + foreach ($value->getJoinColumns() as $joinColumn) { + $lines[] = null; + $lines[] = $joinColumnExporter->export($joinColumn, $indentationLevel); + $lines[] = null; + $lines[] = $objectReference . '->addJoinColumn(' . $joinColumnExporter::VARIABLE . ');'; + } + + return implode(PHP_EOL, $lines); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/TransientMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/TransientMetadataExporter.php new file mode 100644 index 00000000000..b7c5246b46e --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Exporter/TransientMetadataExporter.php @@ -0,0 +1,55 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\TransientMetadata; + +class TransientMetadataExporter implements Exporter +{ + const VARIABLE = '$property'; + + /** + * {@inheritdoc} + */ + public function export($value, int $indentationLevel = 0) : string + { + /** @var TransientMetadata $value */ + $indentation = str_repeat(self::INDENTATION, $indentationLevel); + $objectReference = $indentation . static::VARIABLE; + + return $objectReference . ' = ' . $this->exportInstantiation($value); + } + + /** + * @param TransientMetadata $metadata + * + * @return string + */ + protected function exportInstantiation(TransientMetadata $metadata) : string + { + return sprintf( + 'new Mapping\TransientMetadata("%s");', + $metadata->getName() + ); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php index 1c86469a5f5..a07d8508d7c 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php @@ -26,7 +26,7 @@ class VersionFieldMetadataExporter extends FieldMetadataExporter { - const VARIABLE = '$versionField'; + const VARIABLE = '$versionProperty'; /** * @param VersionFieldMetadata $metadata diff --git a/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php index 751b58b2e1f..9bad24aad42 100644 --- a/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php @@ -33,7 +33,7 @@ public function setJoinTable(JoinTableMetadata $joinTable = null) } /** - * @return JoinTableMetadata + * @return JoinTableMetadata|null */ public function getJoinTable() { diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 0f809ac436a..9f5be5ae801 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -1334,7 +1334,6 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $metadata->addProperty($fieldMetadata); - $metadata->setVersionProperty($fieldMetadata); $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $joinColumns = []; diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 74f8c7e297c..0061dafd900 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -284,7 +284,7 @@ public function testSetInvalidVersionMapping_ThrowsException() $this->expectException(MappingException::class); - $metadata->setVersionProperty($property); + $metadata->addProperty($property); } public function testGetSingleIdentifierFieldName_MultipleIdentifierEntity_ThrowsException() diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index 6eae0f2bd22..7fc735dd46b 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -100,7 +100,6 @@ $versionFieldMetadata->setType(Type::getType('integer')); $metadata->addProperty($versionFieldMetadata); -$metadata->setVersionProperty($versionFieldMetadata); $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); From ea4532eb1d8db4154ee0d475b480b660745bbc87 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Thu, 6 Apr 2017 14:51:31 -0400 Subject: [PATCH 133/275] Intermediate work for ClassMetadataFactory refactoring --- lib/Doctrine/ORM/Configuration.php | 4 +- .../Configuration/MetadataConfiguration.php | 170 +++++++++++++ .../ORM/Configuration/ProxyConfiguration.php | 99 ++++++++ .../Mapping/Builder/ClassMetadataBuilder.php | 2 +- .../Mapping/Builder/FieldMetadataBuilder.php | 4 +- .../Builder/JoinColumnMetadataBuilder.php | 4 +- .../Mapping/Builder/TableMetadataBuilder.php | 3 - lib/Doctrine/ORM/Mapping/ClassMetadata.php | 24 +- .../ORM/Mapping/ClassMetadataFactory.php | 4 +- .../Factory/AbstractClassMetadataFactory.php | 229 ++++++++++++++++++ .../ORM/Mapping/Factory/Autoloader.php | 104 ++++++++ .../Factory/ClassMetadataDefinition.php | 48 ++++ .../ClassMetadataDefinitionFactory.php | 86 +++++++ .../Mapping/Factory/ClassMetadataDriver.php | 78 ++++++ .../Factory/ClassMetadataGenerator.php | 94 +++++++ .../Mapping/Factory/ClassMetadataResolver.php | 48 ++++ .../Factory/DefaultClassMetadataResolver.php | 69 ++++++ .../{ => Factory}/DefaultNamingStrategy.php | 2 +- .../Mapping/{ => Factory}/NamingStrategy.php | 2 +- .../UnderscoreNamingStrategy.php | 2 +- lib/Doctrine/ORM/Mapping/TableOwner.php | 43 ++++ .../ORM/Tools/Export/Driver/PhpExporter.php | 2 +- .../Doctrine/Tests/Models/CMS/CmsAddress.php | 2 +- tests/Doctrine/Tests/Models/CMS/CmsUser.php | 2 +- .../Tests/Models/Company/CompanyContract.php | 2 +- .../Tests/Models/Company/CompanyPerson.php | 2 +- .../Models/DDC2825/ExplicitSchemaAndTable.php | 2 +- .../DDC2825/SchemaAndTableInTableName.php | 2 +- .../Doctrine/Tests/ORM/ConfigurationTest.php | 2 +- .../ORM/Functional/Ticket/DDC3303Test.php | 1 + .../ORM/Mapping/AbstractMappingDriverTest.php | 8 +- .../Builder/TableMetadataBuilderTest.php | 2 +- .../ORM/Mapping/ClassMetadataFactoryTest.php | 2 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 6 +- .../JoinColumnClassNamingStrategy.php | 2 +- .../Tests/ORM/Mapping/NamingStrategyTest.php | 6 +- .../Doctrine.Tests.Models.CMS.CmsAddress.php | 2 +- .../php/Doctrine.Tests.Models.CMS.CmsUser.php | 2 +- .../php/Doctrine.Tests.Models.Cache.City.php | 2 +- ...e.Tests.Models.Company.CompanyContract.php | 2 +- ...ine.Tests.Models.Company.CompanyPerson.php | 2 +- ....Models.DDC2825.ExplicitSchemaAndTable.php | 2 +- ...dels.DDC2825.SchemaAndTableInTableName.php | 2 +- .../Doctrine.Tests.ORM.Mapping.Comment.php | 2 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 2 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 4 +- .../Export/XmlClassMetadataExporterTest.php | 4 +- .../Doctrine.Tests.ORM.Tools.Export.User.php | 2 +- 48 files changed, 1126 insertions(+), 64 deletions(-) create mode 100644 lib/Doctrine/ORM/Configuration/MetadataConfiguration.php create mode 100644 lib/Doctrine/ORM/Configuration/ProxyConfiguration.php create mode 100644 lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php create mode 100644 lib/Doctrine/ORM/Mapping/Factory/Autoloader.php create mode 100644 lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinition.php create mode 100644 lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php create mode 100644 lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDriver.php create mode 100644 lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php create mode 100644 lib/Doctrine/ORM/Mapping/Factory/ClassMetadataResolver.php create mode 100644 lib/Doctrine/ORM/Mapping/Factory/DefaultClassMetadataResolver.php rename lib/Doctrine/ORM/Mapping/{ => Factory}/DefaultNamingStrategy.php (98%) rename lib/Doctrine/ORM/Mapping/{ => Factory}/NamingStrategy.php (98%) rename lib/Doctrine/ORM/Mapping/{ => Factory}/UnderscoreNamingStrategy.php (98%) create mode 100644 lib/Doctrine/ORM/Mapping/TableOwner.php diff --git a/lib/Doctrine/ORM/Configuration.php b/lib/Doctrine/ORM/Configuration.php index 589544f5d74..6d6d372075e 100644 --- a/lib/Doctrine/ORM/Configuration.php +++ b/lib/Doctrine/ORM/Configuration.php @@ -31,10 +31,10 @@ use Doctrine\ORM\Cache\CacheConfiguration; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\DefaultEntityListenerResolver; -use Doctrine\ORM\Mapping\DefaultNamingStrategy; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; use Doctrine\ORM\Mapping\EntityListenerResolver; -use Doctrine\ORM\Mapping\NamingStrategy; +use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\Factory\NamingStrategy; use Doctrine\ORM\Repository\DefaultRepositoryFactory; use Doctrine\ORM\Repository\RepositoryFactory; diff --git a/lib/Doctrine/ORM/Configuration/MetadataConfiguration.php b/lib/Doctrine/ORM/Configuration/MetadataConfiguration.php new file mode 100644 index 00000000000..8bbef98027b --- /dev/null +++ b/lib/Doctrine/ORM/Configuration/MetadataConfiguration.php @@ -0,0 +1,170 @@ +. + */ + +namespace Doctrine\ORM\Configuration; + +use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; +use Doctrine\ORM\Mapping\Factory\AbstractClassMetadataFactory; +use Doctrine\ORM\Mapping\Factory\ClassMetadataResolver; +use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\Factory\NamingStrategy; + +/** + * Configuration container for class metadata options of Doctrine. + * + * @package Doctrine\ORM\Configuration + * @since 3.0 + * + * @author Guilherme Blanco + */ +class MetadataConfiguration +{ + /** + * @var string + */ + private $namespace; + + /** + * @var string + */ + private $directory; + + /** + * @var ClassMetadataResolver + */ + private $resolver; + + /** + * @var MappingDriver + */ + private $mappingDriver; + + /** + * @var NamingStrategy + */ + private $namingStrategy; + + /** + * @var int + */ + private $autoGenerate = AbstractClassMetadataFactory::AUTOGENERATE_ALWAYS; + + /** + * @return string + */ + public function getNamespace() : string + { + return $this->namespace; + } + + /** + * @param string $namespace + */ + public function setNamespace(string $namespace) + { + $this->namespace = ltrim($namespace, '\\'); + } + + /** + * @return string + */ + public function getDirectory() : string + { + return $this->directory; + } + + /** + * @param string $directory + */ + public function setDirectory(string $directory) + { + $this->directory = rtrim($directory, DIRECTORY_SEPARATOR); + } + + /** + * @return ClassMetadataResolver + */ + public function getResolver() : ClassMetadataResolver + { + return $this->resolver; + } + + /** + * @param ClassMetadataResolver $resolver + */ + public function setResolver(ClassMetadataResolver $resolver) + { + $this->resolver = $resolver; + } + + /** + * @return MappingDriver + */ + public function getMappingDriver() : MappingDriver + { + return $this->mappingDriver; + } + + /** + * @param MappingDriver $mappingDriver + */ + public function setMappingDriver(MappingDriver $mappingDriver) + { + $this->mappingDriver = $mappingDriver; + } + + /** + * @return NamingStrategy + */ + public function getNamingStrategy() : NamingStrategy + { + if (! $this->namingStrategy) { + $this->namingStrategy = new DefaultNamingStrategy(); + } + + return $this->namingStrategy; + } + + /** + * @param NamingStrategy $namingStrategy + */ + public function setNamingStrategy(NamingStrategy $namingStrategy) + { + $this->namingStrategy = $namingStrategy; + } + + /** + * @return int + */ + public function getAutoGenerate() : int + { + return $this->autoGenerate; + } + + /** + * @param int $autoGenerate + */ + public function setAutoGenerate(int $autoGenerate) + { + $this->autoGenerate = $autoGenerate; + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php b/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php new file mode 100644 index 00000000000..60b4caa5781 --- /dev/null +++ b/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php @@ -0,0 +1,99 @@ +. + */ + +namespace Doctrine\ORM\Configuration; + +use Doctrine\Common\Proxy\AbstractProxyFactory; + +/** + * Configuration container for proxy manager options of Doctrine. + * + * @package Doctrine\ORM\Configuration + * @since 3.0 + * + * @author Guilherme Blanco + */ +class ProxyConfiguration +{ + /** + * @var string + */ + private $namespace; + + /** + * @var string + */ + private $directory; + + /** + * @var bool + */ + private $autoGenerate = AbstractProxyFactory::AUTOGENERATE_ALWAYS; + + /** + * @return string + */ + public function getNamespace() : string + { + return $this->namespace; + } + + /** + * @param string $namespace + */ + public function setNamespace(string $namespace) + { + $this->namespace = $namespace; + } + + /** + * @return string + */ + public function getDirectory() : string + { + return $this->directory; + } + + /** + * @param string $directory + */ + public function setDirectory(string $directory) + { + $this->directory = $directory; + } + + /** + * @return bool + */ + public function isAutoGenerate() : bool + { + return $this->autoGenerate; + } + + /** + * @param bool $autoGenerate + */ + public function setAutoGenerate(bool $autoGenerate) + { + $this->autoGenerate = $autoGenerate; + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php index 06ca5756a8e..a15989d38a4 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php @@ -144,7 +144,7 @@ public function setCustomRepositoryClass($repositoryClassName) */ public function withTable(TableMetadata $tableMetadata) { - $this->cm->setPrimaryTable($tableMetadata); + $this->cm->setTable($tableMetadata); return $this; } diff --git a/lib/Doctrine/ORM/Mapping/Builder/FieldMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/FieldMetadataBuilder.php index 03f91321573..dba6e52474f 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/FieldMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/FieldMetadataBuilder.php @@ -22,9 +22,9 @@ namespace Doctrine\ORM\Mapping\Builder; -use Doctrine\ORM\Mapping\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\Factory\NamingStrategy; use Doctrine\ORM\Mapping\FieldMetadata; -use Doctrine\ORM\Mapping\NamingStrategy; class FieldMetadataBuilder extends ColumnMetadataBuilder { diff --git a/lib/Doctrine/ORM/Mapping/Builder/JoinColumnMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/JoinColumnMetadataBuilder.php index 2cbafee204e..a68e992cc42 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/JoinColumnMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/JoinColumnMetadataBuilder.php @@ -22,9 +22,9 @@ namespace Doctrine\ORM\Mapping\Builder; -use Doctrine\ORM\Mapping\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\Factory\NamingStrategy; use Doctrine\ORM\Mapping\JoinColumnMetadata; -use Doctrine\ORM\Mapping\NamingStrategy; class JoinColumnMetadataBuilder extends ColumnMetadataBuilder { diff --git a/lib/Doctrine/ORM/Mapping/Builder/TableMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/TableMetadataBuilder.php index 56627817943..e2ec63b4adc 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/TableMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/TableMetadataBuilder.php @@ -22,9 +22,6 @@ namespace Doctrine\ORM\Mapping\Builder; -use Doctrine\ORM\Mapping\DefaultNamingStrategy; -use Doctrine\ORM\Mapping\FieldMetadata; -use Doctrine\ORM\Mapping\NamingStrategy; use Doctrine\ORM\Mapping\TableMetadata; class TableMetadataBuilder implements Builder diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index cd39d519842..721b61eea63 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -24,6 +24,8 @@ use Doctrine\Instantiator\Instantiator; use Doctrine\ORM\Cache\CacheException; use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\Factory\NamingStrategy; use Doctrine\ORM\Utility\PersisterHelper; /** @@ -45,7 +47,7 @@ * @author Guilherme Blanco * @since 2.0 */ -class ClassMetadata extends ComponentMetadata implements ClassMetadataInterface +class ClassMetadata extends ComponentMetadata implements TableOwner, ClassMetadataInterface { /** * READ-ONLY: The name of the entity class. @@ -303,7 +305,7 @@ class ClassMetadata extends ComponentMetadata implements ClassMetadataInterface /** * NamingStrategy determining the default column and table names. * - * @var \Doctrine\ORM\Mapping\NamingStrategy + * @var \Doctrine\ORM\Mapping\Factory\NamingStrategy */ protected $namingStrategy; @@ -323,9 +325,11 @@ public function __construct($entityName, NamingStrategy $namingStrategy = null) { $this->name = $entityName; $this->rootEntityName = $entityName; - $this->table = new TableMetadata(); $this->namingStrategy = $namingStrategy ?: new DefaultNamingStrategy(); + $this->table = new TableMetadata(); $this->instantiator = new Instantiator(); + + $this->table->setName($this->namingStrategy->classToTableName($entityName)); } /** @@ -567,10 +571,6 @@ public function initializeReflection($reflService) if ($this->reflectionClass) { $this->name = $this->rootEntityName = $this->reflectionClass->getName(); } - - if (empty($this->table->getName())) { - $this->table->setName($this->namingStrategy->classToTableName($this->name)); - } } /** @@ -1475,15 +1475,11 @@ public function isInheritedProperty($fieldName) } /** - * Sets the primary table metadata. - * - * @param TableMetadata $tableMetadata - * - * @return void + * {@inheritdoc} */ - public function setPrimaryTable(TableMetadata $tableMetadata) + public function setTable(TableMetadata $table) { - $this->table = $tableMetadata; + $this->table = $table; } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index ebfe6887ad2..58893f858c8 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -127,7 +127,7 @@ protected function doLoadMetadata( /* @var $parent ClassMetadata */ if ($parent) { if ($parent->inheritanceType === InheritanceType::SINGLE_TABLE) { - $class->setPrimaryTable($parent->table); + $class->setTable($parent->table); } $this->addInheritedProperties($class, $parent); @@ -202,7 +202,7 @@ protected function doLoadMetadata( if ($parent) { if ($parent->inheritanceType === InheritanceType::SINGLE_TABLE) { - $class->setPrimaryTable($parent->table); + $class->setTable($parent->table); } $this->addInheritedIndexes($class, $parent); diff --git a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php new file mode 100644 index 00000000000..42b0adb3469 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php @@ -0,0 +1,229 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Factory; + +use Doctrine\Common\Persistence\Mapping\ClassMetadataFactory; +use Doctrine\Common\Persistence\Mapping\ReflectionService; +use Doctrine\Common\Util\ClassUtils; +use Doctrine\ORM\Configuration\MetadataConfiguration; +use Doctrine\ORM\Mapping\ClassMetadata; + +/** + * AbstractClassMetadataFactory is the base of ClassMetadata object creation that contain all the metadata mapping + * information of a class which describes how a class should be mapped to a relational database. + * + * @package Doctrine\ORM\Mapping\Factory + * @since 3.0 + * + * @author Guilherme Blanco + */ +abstract class AbstractClassMetadataFactory implements ClassMetadataFactory +{ + /** + * Never autogenerate a class metadata and rely that it was generated by some process before deployment. + * + * @var int + */ + const AUTOGENERATE_NEVER = 0; + + /** + * Always generates a new class metadata in every request. This is only sane during development. + * + * @var int + */ + const AUTOGENERATE_ALWAYS = 1; + + /** + * Autogenerate the class metadata when the file does not exist. + * This strategy causes a file exists call whenever any metadata is used the first time in a request. + * + * @var int + */ + const AUTOGENERATE_FILE_NOT_EXISTS = 2; + + /** + * @var ClassMetadataDefinitionFactory + */ + protected $definitionFactory; + + /** + * @var ClassMetadataDriver + */ + protected $metadataDriver; + + /** + * @var NamingStrategy + */ + protected $namingStrategy; + + /** + * @var array + */ + private $definitions = []; + + /** + * @var array + */ + private $loaded = []; + + /** + * ClassMetadataFactory constructor. + * + * @param MetadataConfiguration $configuration + */ + public function __construct(MetadataConfiguration $configuration) + { + $driver = new ClassMetadataDriver($configuration->getMappingDriver(), $this->getReflectionService()); + $generator = new ClassMetadataGenerator($driver); + + $this->metadataDriver = $driver; + $this->namingStrategy = $configuration->getNamingStrategy(); + $this->definitionFactory = new ClassMetadataDefinitionFactory( + $configuration->getResolver(), + $generator, + $configuration->getAutoGenerate() + ); + } + + /** + * {@inheritdoc} + */ + public function getAllMetadata() + { + $metadata = []; + + foreach ($this->metadataDriver->getAllClassMetadata() as $className) { + $metadata[] = $this->getMetadataFor($className); + } + + return $metadata; + } + + /** + * {@inheritdoc} + */ + public function getMetadataFor($className) + { + $entityClassName = ClassUtils::getRealClass($className); + + if (isset($this->loaded[$entityClassName])) { + return $this->loaded[$entityClassName]; + } + + $parentClassNameList = $this->getParentClassNameList($className); + $parentClassNameList[] = $className; + + foreach ($parentClassNameList as $parentClassName) { + if (isset($this->loaded[$parentClassName])) { + continue; + } + + $definition = $this->getOrCreateClassMetadataDefinition($entityClassName); + + $this->loaded[$entityClassName] = $this->createClassMetadata($definition); + } + + return $this->loaded[$entityClassName]; + } + + /** + * {@inheritdoc} + */ + public function hasMetadataFor($className) + { + return isset($this->loaded[$className]); + } + + /** + * {@inheritdoc} + */ + public function setMetadataFor($className, $class) + { + $this->loaded[$className] = $class; + } + + /** + * {@inheritdoc} + */ + public function isTransient($className) + { + return $this->metadataDriver->hasClassMetadata($className); + } + + /** + * @param ClassMetadataDefinition $definition + * + * @return ClassMetadata + */ + protected function createClassMetadata(ClassMetadataDefinition $definition) : ClassMetadata + { + /** @var ClassMetadata $classMetadata */ + $metadataFqcn = $definition->metadataClassName; + $classMetadata = new $metadataFqcn($this->namingStrategy); + + $classMetadata->wakeupReflection($this->getReflectionService()); + + return $classMetadata; + } + + /** + * Create a class metadata definition for the given class name. + * + * @param string $className + * + * @return ClassMetadataDefinition + */ + private function getOrCreateClassMetadataDefinition(string $className) : ClassMetadataDefinition + { + if (! isset($this->definitions[$className])) { + $this->definitions[$className] = $this->definitionFactory->build($className); + } + + return $this->definitions[$className]; + } + + /** + * @param string $className + * + * @return array + */ + private function getParentClassNameList(string $className) : array + { + $parentClassNameList = []; + + foreach (array_reverse($this->getReflectionService()->getParentClasses($className)) as $parentClassName) { + if ($this->metadataDriver->hasClassMetadata($parentClassName)) { + continue; + } + + $parentClassNameList[] = $parentClassName; + } + + return $parentClassNameList; + } + + /** + * @return ReflectionService + */ + abstract protected function getReflectionService(); +} diff --git a/lib/Doctrine/ORM/Mapping/Factory/Autoloader.php b/lib/Doctrine/ORM/Mapping/Factory/Autoloader.php new file mode 100644 index 00000000000..c65188be248 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Factory/Autoloader.php @@ -0,0 +1,104 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Factory; + +use InvalidArgumentException; + +class Autoloader +{ + /** + * Resolves ClassMetadata class name to a filename based on the following pattern. + * + * 1. Remove Metadata namespace from class name. + * 2. Remove namespace separators from remaining class name. + * 3. Return PHP filename from metadata-dir with the result from 2. + * + * @param string $metadataDir + * @param string $metadataNamespace + * @param string $className + * + * @return string + * + * @throws InvalidArgumentException + */ + public static function resolveFile(string $metadataDir, string $metadataNamespace, string $className) : string + { + if (0 !== strpos($className, $metadataNamespace)) { + throw new InvalidArgumentException( + sprintf('The class "%s" is not part of the proxy namespace "%s"', $className, $metadataNamespace) + ); + } + + // remove metadata namespace from class name + $classNameRelativeToProxyNamespace = substr($className, strlen($metadataNamespace)); + + // remove namespace separators from remaining class name + $fileName = str_replace('\\', '', $classNameRelativeToProxyNamespace); + + return $metadataDir . DIRECTORY_SEPARATOR . $fileName . '.php'; + } + + /** + * Registers and returns autoloader callback for the given metadata dir and namespace. + * + * @param string $metadataDir + * @param string $metadataNamespace + * @param callable|null $notFoundCallback Invoked when the proxy file is not found. + * + * @return \Closure + * + * @throws InvalidArgumentException + */ + public static function register( + string $metadataDir, + string $metadataNamespace, + callable $notFoundCallback = null + ) : \Closure + { + $metadataNamespace = ltrim($metadataNamespace, '\\'); + + if ( ! (null === $notFoundCallback || is_callable($notFoundCallback))) { + $type = is_object($notFoundCallback) ? get_class($notFoundCallback) : gettype($notFoundCallback); + + throw new InvalidArgumentException( + sprintf('Invalid \$notFoundCallback given: must be a callable, "%s" given', $type) + ); + } + + $autoloader = function ($className) use ($metadataDir, $metadataNamespace, $notFoundCallback) { + if (0 === strpos($className, $metadataNamespace)) { + $file = Autoloader::resolveFile($metadataDir, $metadataNamespace, $className); + + if ($notFoundCallback && ! file_exists($file)) { + call_user_func($notFoundCallback, $metadataDir, $metadataNamespace, $className); + } + + require $file; + } + }; + + spl_autoload_register($autoloader); + + return $autoloader; + } +} diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinition.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinition.php new file mode 100644 index 00000000000..e705d1eb0d6 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinition.php @@ -0,0 +1,48 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Factory; + +class ClassMetadataDefinition +{ + /** + * @var string + */ + public $entityClassName; + + /** + * @var string + */ + public $metadataClassName; + + /** + * ClassMetadataDefinition constructor. + * + * @param string $entityClassName + * @param string $metadataClassName + */ + public function __construct(string $entityClassName, string $metadataClassName) + { + $this->entityClassName = $entityClassName; + $this->metadataClassName = $metadataClassName; + } +} diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php new file mode 100644 index 00000000000..f34f56f46c4 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php @@ -0,0 +1,86 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Factory; + +use Doctrine\ORM\Mapping\Factory\AbstractClassMetadataFactory; + +class ClassMetadataDefinitionFactory +{ + /** + * @var ClassMetadataResolver + */ + private $resolver; + + /** + * @var ClassMetadataGenerator + */ + private $generator; + + /** + * @var int + */ + private $autoGenerate; + + public function __construct(ClassMetadataResolver $resolver, ClassMetadataGenerator $generator, int $autoGenerate) + { + $this->resolver = $resolver; + $this->generator = $generator; + $this->autoGenerate = $autoGenerate; + } + + /** + * @param string $className + * + * @return ClassMetadataDefinition + */ + public function build(string $className) : ClassMetadataDefinition + { + $metadataClassName = $this->resolver->resolveMetadataClassName($className); + $definition = new ClassMetadataDefinition($className, $metadataClassName); + + if (! class_exists($metadataClassName, false)) { + $metadataClassPath = $this->resolver->resolveMetadataClassPath($className); + + switch ($this->autoGenerate) { + case AbstractClassMetadataFactory::AUTOGENERATE_FILE_NOT_EXISTS: + if (! file_exists($metadataClassPath)) { + $this->generator->generate($metadataClassPath, $definition); + } + + break; + + case AbstractClassMetadataFactory::AUTOGENERATE_ALWAYS: + $this->generator->generate($metadataClassPath, $definition); + break; + + case AbstractClassMetadataFactory::AUTOGENERATE_NEVER: + // Do nothing + break; + } + + require $metadataClassPath; + } + + return $definition; + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDriver.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDriver.php new file mode 100644 index 00000000000..d8c609bc188 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDriver.php @@ -0,0 +1,78 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Factory; + +use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; +use Doctrine\Common\Persistence\Mapping\ReflectionService; +use Doctrine\ORM\Mapping\ClassMetadata; + +/** + * Class metadata driver works as a middle layer between MappingDriver and ClassMetadataFactory. + * + * @todo guilhermeblanco Remove this class once MappingDriver gets properly updated. + * + * @package Doctrine\ORM\Mapping\Factory + * @since 3.0 + * + * @author Guilherme Blanco + */ +class ClassMetadataDriver +{ + /** + * @var MappingDriver + */ + private $mappingDriver; + + public function __construct(MappingDriver $mappingDriver) + { + $this->mappingDriver = $mappingDriver; + } + + /** + * @return array + */ + public function getAllClassMetadata() : array + { + return $this->mappingDriver->getAllClassNames(); + } + + /** + * @param string $className + * + * @return ClassMetadata + */ + public function getClassMetadata(string $className) : ClassMetadata + { + + } + + /** + * @param string $className + * + * @return bool + */ + public function hasClassMetadata(string $className) : bool + { + return $this->mappingDriver->isTransient($className); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php new file mode 100644 index 00000000000..a1de2b47570 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php @@ -0,0 +1,94 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Factory; + +use Doctrine\ORM\Mapping\Builder\ClassMetadataExporter; + +/** + * This factory is used to generate metadata classes. + * + * @package Doctrine\ORM\Mapping\Factory + * + * @author Guilherme Blanco + */ +class ClassMetadataGenerator +{ + /** + * @var ClassMetadataDriver + */ + private $metadataDriver; + + /** + * @var ClassMetadataExporter + */ + private $metadataExporter; + + /** + * @param ClassMetadataDriver $metadataDriver + * @param ClassMetadataExporter|null $metadataExporter + */ + public function __construct( + ClassMetadataDriver $metadataDriver, + ClassMetadataExporter $metadataExporter = null + ) + { + $this->metadataDriver = $metadataDriver; + $this->metadataExporter = $metadataExporter ?: new ClassMetadataExporter(); + } + + /** + * @param string $path + * @param ClassMetadataDefinition $definition + * + * @throws \RuntimeException + */ + public function generate(string $path, ClassMetadataDefinition $definition) + { + $metadata = $this->metadataDriver->getClassMetadata($definition->entityClassName); + $sourceCode = $this->metadataExporter->export($metadata); + + $this->ensureDirectoryIsReady(dirname($path)); + + $tmpFileName = $path . '.' . uniqid('', true); + + file_put_contents($tmpFileName, $sourceCode); + @chmod($tmpFileName, 0664); + rename($tmpFileName, $path); + } + + /** + * @param string $directory + * + * @throws \RuntimeException + */ + protected function ensureDirectoryIsReady(string $directory) + { + if (! is_dir($directory) && (false === @mkdir($directory, 0775, true))) { + throw new \RuntimeException(sprintf('Your metadata directory "%s" must be writable', $directory)); + } + + if (! is_writable($directory)) { + throw new \RuntimeException(sprintf('Your proxy directory "%s" must be writable', $directory)); + } + } +} diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataResolver.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataResolver.php new file mode 100644 index 00000000000..89a1006941a --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataResolver.php @@ -0,0 +1,48 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Factory; + +/** + * Interface ClassMetadataResolver + * + * @package Doctrine\ORM\Mapping\Factory + * + * @since 3.0 + * @author Guilherme Blanco + */ +interface ClassMetadataResolver +{ + /** + * @param string $className + * + * @return string + */ + public function resolveMetadataClassName(string $className); + + /** + * @param string $className + * + * @return string + */ + public function resolveMetadataClassPath(string $className); +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Factory/DefaultClassMetadataResolver.php b/lib/Doctrine/ORM/Mapping/Factory/DefaultClassMetadataResolver.php new file mode 100644 index 00000000000..056e3355af0 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Factory/DefaultClassMetadataResolver.php @@ -0,0 +1,69 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Factory; + +use Doctrine\Common\Util\ClassUtils; +use Doctrine\ORM\Proxy\Proxy; + +class DefaultClassMetadataResolver implements ClassMetadataResolver +{ + /** + * @var string + */ + private $namespace; + + /** + * @var string + */ + private $directory; + + /** + * DefaultClassMetadataResolver constructor. + * + * @param string $namespace + * @param string $directory + */ + public function __construct(string $namespace, string $directory) + { + $this->namespace = ltrim($namespace, '\\'); + $this->directory = rtrim($this->directory, DIRECTORY_SEPARATOR); + } + + /** + * {@inheritdoc} + */ + public function resolveMetadataClassName(string $className) + { + // Reuse "generateProxyClassName", since its logic is the same as intended here + return ClassUtils::generateProxyClassName($className, $this->namespace); + } + + /** + * {@inheritdoc} + */ + public function resolveMetadataClassPath(string $className) + { + return $this->directory . DIRECTORY_SEPARATOR . Proxy::MARKER + . str_replace('\\', '', $className) . '.php'; + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/DefaultNamingStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/DefaultNamingStrategy.php similarity index 98% rename from lib/Doctrine/ORM/Mapping/DefaultNamingStrategy.php rename to lib/Doctrine/ORM/Mapping/Factory/DefaultNamingStrategy.php index ef7f76b1e92..13276a8905c 100644 --- a/lib/Doctrine/ORM/Mapping/DefaultNamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/DefaultNamingStrategy.php @@ -18,7 +18,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Mapping\Factory; /** * The default NamingStrategy diff --git a/lib/Doctrine/ORM/Mapping/NamingStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/NamingStrategy.php similarity index 98% rename from lib/Doctrine/ORM/Mapping/NamingStrategy.php rename to lib/Doctrine/ORM/Mapping/Factory/NamingStrategy.php index a70eee86695..cd378f27226 100644 --- a/lib/Doctrine/ORM/Mapping/NamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/NamingStrategy.php @@ -18,7 +18,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Mapping\Factory; /** * A set of rules for determining the physical column and table names diff --git a/lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/UnderscoreNamingStrategy.php similarity index 98% rename from lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php rename to lib/Doctrine/ORM/Mapping/Factory/UnderscoreNamingStrategy.php index 543d92ba31c..a5c06f9c2cf 100644 --- a/lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/UnderscoreNamingStrategy.php @@ -18,7 +18,7 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\ORM\Mapping\Factory; /** * Naming strategy implementing the underscore naming convention. diff --git a/lib/Doctrine/ORM/Mapping/TableOwner.php b/lib/Doctrine/ORM/Mapping/TableOwner.php new file mode 100644 index 00000000000..ba38c270c31 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/TableOwner.php @@ -0,0 +1,43 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +/** + * Interface TableOwner + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ +interface TableOwner +{ + /** + * Sets the owner table metadata. + * + * @param TableMetadata $table + * + * @return void + */ + public function setTable(TableMetadata $table); +} diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 3bfa4c88ba2..259d42a8b49 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -91,7 +91,7 @@ public function exportClassMetadata(ClassMetadata $metadata) } $lines[] = null; - $lines[] = '$metadata->setPrimaryTable($table);'; + $lines[] = '$metadata->setTable($table);'; } if ($metadata->discriminatorColumn) { diff --git a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php index afaf5548619..ab7ea5b0cef 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php @@ -132,7 +132,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $tableMetadata = new Mapping\TableMetadata(); $tableMetadata->setName('company_person'); - $metadata->setPrimaryTable($tableMetadata); + $metadata->setTable($tableMetadata); $fieldMetadata = new Mapping\FieldMetadata('id'); diff --git a/tests/Doctrine/Tests/Models/CMS/CmsUser.php b/tests/Doctrine/Tests/Models/CMS/CmsUser.php index 1f6a1ba4237..36416221a8c 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsUser.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsUser.php @@ -276,7 +276,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $tableMetadata = new Mapping\TableMetadata(); $tableMetadata->setName('cms_users'); - $metadata->setPrimaryTable($tableMetadata); + $metadata->setTable($tableMetadata); $metadata->addNamedNativeQuery( [ diff --git a/tests/Doctrine/Tests/Models/Company/CompanyContract.php b/tests/Doctrine/Tests/Models/Company/CompanyContract.php index 91a19d91ae5..7b564cc2a85 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyContract.php @@ -140,7 +140,7 @@ static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat $tableMetadata = new Mapping\TableMetadata(); $tableMetadata->setName('company_contracts'); - $metadata->setPrimaryTable($tableMetadata); + $metadata->setTable($tableMetadata); $metadata->setInheritanceType(Mapping\InheritanceType::JOINED); $discrColumn = new Mapping\DiscriminatorColumnMetadata(); diff --git a/tests/Doctrine/Tests/Models/Company/CompanyPerson.php b/tests/Doctrine/Tests/Models/Company/CompanyPerson.php index b994ad7a408..985325e6d8c 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyPerson.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyPerson.php @@ -126,7 +126,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $tableMetadata = new Mapping\TableMetadata(); $tableMetadata->setName('company_person'); - $metadata->setPrimaryTable($tableMetadata); + $metadata->setTable($tableMetadata); $metadata->addNamedNativeQuery( [ diff --git a/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php b/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php index a5523dee4c9..764762beb77 100644 --- a/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php +++ b/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php @@ -19,7 +19,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $tableMetadata->setSchema('explicit_schema'); $tableMetadata->setName('explicit_table'); - $metadata->setPrimaryTable($tableMetadata); + $metadata->setTable($tableMetadata); $fieldMetadata = new Mapping\FieldMetadata('id'); diff --git a/tests/Doctrine/Tests/Models/DDC2825/SchemaAndTableInTableName.php b/tests/Doctrine/Tests/Models/DDC2825/SchemaAndTableInTableName.php index 33084fb8fd0..71b1976e2e9 100644 --- a/tests/Doctrine/Tests/Models/DDC2825/SchemaAndTableInTableName.php +++ b/tests/Doctrine/Tests/Models/DDC2825/SchemaAndTableInTableName.php @@ -28,7 +28,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $tableMetadata->setName('implicit_table'); $tableMetadata->setSchema('implicit_schema'); - $metadata->setPrimaryTable($tableMetadata); + $metadata->setTable($tableMetadata); $fieldMetadata = new Mapping\FieldMetadata('id'); diff --git a/tests/Doctrine/Tests/ORM/ConfigurationTest.php b/tests/Doctrine/Tests/ORM/ConfigurationTest.php index c4fa6a2f2d9..7db5683f5e2 100644 --- a/tests/Doctrine/Tests/ORM/ConfigurationTest.php +++ b/tests/Doctrine/Tests/ORM/ConfigurationTest.php @@ -13,7 +13,7 @@ use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\DefaultEntityListenerResolver; use Doctrine\ORM\Mapping\EntityListenerResolver; -use Doctrine\ORM\Mapping\NamingStrategy; +use Doctrine\ORM\Mapping\Factory\NamingStrategy; use Doctrine\ORM\ORMException; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\Tests\DoctrineTestCase; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3303Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3303Test.php index aa08c9651ad..859147885a6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3303Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3303Test.php @@ -18,6 +18,7 @@ protected function setUp() * @group 4097 * @group 4277 * @group 5867 + * @group embedded * * When using an embedded field in an inheritance, private properties should also be inherited. */ diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 9f5be5ae801..24ee514efdc 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -10,9 +10,9 @@ use Doctrine\ORM\Mapping; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; -use Doctrine\ORM\Mapping\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\Factory\UnderscoreNamingStrategy; use Doctrine\ORM\Mapping\MappingException; -use Doctrine\ORM\Mapping\UnderscoreNamingStrategy; use Doctrine\Tests\Models\Cache\City; use Doctrine\Tests\Models\CMS\CmsAddress; use Doctrine\Tests\Models\CMS\CmsAddressListener; @@ -1275,7 +1275,7 @@ public static function loadMetadata(ClassMetadata $metadata) $tableMetadata->addOption('foo', 'bar'); $tableMetadata->addOption('baz', ['key' => 'val']); - $metadata->setPrimaryTable($tableMetadata); + $metadata->setTable($tableMetadata); $metadata->setInheritanceType(Mapping\InheritanceType::NONE); $metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); @@ -1572,7 +1572,7 @@ public static function loadMetadata(ClassMetadata $metadata) ] ); - $metadata->setPrimaryTable($tableMetadata); + $metadata->setTable($tableMetadata); $metadata->setInheritanceType(Mapping\InheritanceType::NONE); $fieldMetadata = new Mapping\FieldMetadata('content'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/Builder/TableMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/TableMetadataBuilderTest.php index ba47aeb61e3..b307d704b32 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Builder/TableMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Builder/TableMetadataBuilderTest.php @@ -100,7 +100,7 @@ public function testAddUniqueConstraint() ); } - public function testSetPrimaryTableRelated() + public function testSetTableRelated() { $this->builder->withUniqueConstraint('users_idx', ['username', 'name']); $this->builder->withIndex('users_idx', ['username', 'name']); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 9a367e743ee..b90a62c1b46 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -283,7 +283,7 @@ protected function createValidClassMetadata() $tableMetadata = new Mapping\TableMetadata(); $tableMetadata->setName('group'); - $cm1->setPrimaryTable($tableMetadata); + $cm1->setTable($tableMetadata); // Add a mapped field $fieldMetadata = new Mapping\FieldMetadata('id'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 0061dafd900..8a5019eed3c 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -8,11 +8,11 @@ use Doctrine\ORM\Events; use Doctrine\ORM\Mapping; use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\DefaultNamingStrategy; use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; +use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\Factory\UnderscoreNamingStrategy; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\MappingException; -use Doctrine\ORM\Mapping\UnderscoreNamingStrategy; use Doctrine\Tests\Models\CMS; use Doctrine\Tests\Models\Company\CompanyContract; use Doctrine\Tests\Models\CustomType\CustomTypeParent; @@ -450,7 +450,7 @@ public function testGetTemporaryTableNameSchema() $tableMetadata->setSchema('foo'); $tableMetadata->setName('bar'); - $cm->setPrimaryTable($tableMetadata); + $cm->setTable($tableMetadata); self::assertEquals('foo_bar_id_tmp', $cm->getTemporaryIdTableName()); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/NamingStrategy/JoinColumnClassNamingStrategy.php b/tests/Doctrine/Tests/ORM/Mapping/NamingStrategy/JoinColumnClassNamingStrategy.php index c4f967589f9..0a0a744ec31 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/NamingStrategy/JoinColumnClassNamingStrategy.php +++ b/tests/Doctrine/Tests/ORM/Mapping/NamingStrategy/JoinColumnClassNamingStrategy.php @@ -2,7 +2,7 @@ namespace Doctrine\Tests\ORM\Mapping\NamingStrategy; -use Doctrine\ORM\Mapping\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; /** * Stub naming strategy to verify `joinColumnName` proper behavior diff --git a/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php b/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php index 45f6700891b..f2c7f89249d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php @@ -2,9 +2,9 @@ namespace Doctrine\Tests\ORM\Mapping; -use Doctrine\ORM\Mapping\UnderscoreNamingStrategy; -use Doctrine\ORM\Mapping\DefaultNamingStrategy; -use Doctrine\ORM\Mapping\NamingStrategy; +use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\Factory\NamingStrategy; +use Doctrine\ORM\Mapping\Factory\UnderscoreNamingStrategy; use Doctrine\Tests\ORM\Mapping\NamingStrategy\JoinColumnClassNamingStrategy; use Doctrine\Tests\OrmTestCase; diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php index 448fc8bd7c9..f782330b609 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php @@ -10,7 +10,7 @@ $tableMetadata->setName('company_person'); /* @var $metadata ClassMetadata */ -$metadata->setPrimaryTable($tableMetadata); +$metadata->setTable($tableMetadata); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php index 6d64e050d79..a56e6a325c4 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php @@ -7,7 +7,7 @@ $tableMetadata->setName('cms_users'); /* @var $metadata ClassMetadata */ -$metadata->setPrimaryTable($tableMetadata); +$metadata->setTable($tableMetadata); $metadata->addNamedNativeQuery( [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index e0ea6d15c46..f71bf6e2357 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -11,7 +11,7 @@ $tableMetadata = new Mapping\TableMetadata(); $tableMetadata->setName('cache_city'); -$metadata->setPrimaryTable($tableMetadata); +$metadata->setTable($tableMetadata); $metadata->setInheritanceType(Mapping\InheritanceType::NONE); $metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); $metadata->setIdGeneratorType(Mapping\GeneratorType::IDENTITY); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php index 9dc271d26c0..ce5d225ced6 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php @@ -8,7 +8,7 @@ $tableMetadata->setName('company_contracts'); /* @var $metadata ClassMetadata */ -$metadata->setPrimaryTable($tableMetadata); +$metadata->setTable($tableMetadata); $metadata->setInheritanceType(Mapping\InheritanceType::JOINED); $discrColumn = new Mapping\DiscriminatorColumnMetadata(); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php index b32ccf8e2ac..b0404af24f1 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php @@ -7,7 +7,7 @@ $tableMetadata->setName('company_person'); /* @var $metadata ClassMetadata */ -$metadata->setPrimaryTable($tableMetadata); +$metadata->setTable($tableMetadata); $metadata->addNamedNativeQuery( [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php index 8f4f31ec253..f4ad05fc8e9 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php @@ -9,7 +9,7 @@ $tableMetadata->setName('explicit_table'); /* @var $metadata ClassMetadata */ -$metadata->setPrimaryTable($tableMetadata); +$metadata->setTable($tableMetadata); $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $fieldMetadata = new Mapping\FieldMetadata('id'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php index 939acb67f12..5e5ab11b90d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php @@ -9,7 +9,7 @@ $tableMetadata->setName('implicit_table'); /* @var $metadata ClassMetadata */ -$metadata->setPrimaryTable($tableMetadata); +$metadata->setTable($tableMetadata); $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $fieldMetadata = new Mapping\FieldMetadata('id'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php index 868aaf542e6..6654669845d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php @@ -17,7 +17,7 @@ ); /* @var $metadata ClassMetadata */ -$metadata->setPrimaryTable($tableMetadata); +$metadata->setTable($tableMetadata); $metadata->setInheritanceType(Mapping\InheritanceType::NONE); $fieldMetadata = new Mapping\FieldMetadata('content'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index 7fc735dd46b..0194970cb35 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -40,7 +40,7 @@ $tableMetadata->addOption('foo', 'bar'); $tableMetadata->addOption('baz', ['key' => 'val']); -$metadata->setPrimaryTable($tableMetadata); +$metadata->setTable($tableMetadata); $metadata->setInheritanceType(Mapping\InheritanceType::NONE); $metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index d873e891a01..bd2103c769b 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -86,7 +86,7 @@ public function generateBookEntityFixture(array $embeddedClasses = []) ] ); - $metadata->setPrimaryTable($tableMetadata); + $metadata->setTable($tableMetadata); // Property: "name" $fieldMetadata = new Mapping\FieldMetadata('name'); @@ -186,7 +186,7 @@ private function generateEntityTypeFixture(array $field) $tableMetadata = new Mapping\TableMetadata(); $tableMetadata->setName('entity_type'); - $metadata->setPrimaryTable($tableMetadata); + $metadata->setTable($tableMetadata); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php index 6a1b6027b92..a0ea1e7e41f 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php @@ -69,7 +69,7 @@ public function testSequenceGenerator() { xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd" > - + @@ -105,7 +105,7 @@ public function testFieldOptionsExport() { $expectedFileContent = <<<'XML' - + diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php index 7df53ef8cc8..e567ac94439 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php @@ -9,7 +9,7 @@ $tableMetadata->addOption('engine', 'MyISAM'); $tableMetadata->addOption('foo', ['bar' => 'baz']); -$metadata->setPrimaryTable($tableMetadata); +$metadata->setTable($tableMetadata); $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $metadata->setInheritanceType(Mapping\InheritanceType::NONE); $metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); From b5d121d9bda9f7b4b6be77d81b651bfbb8f7b8b6 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 10 Apr 2017 15:28:09 -0400 Subject: [PATCH 134/275] More work on cleanup --- lib/Doctrine/ORM/EntityRepository.php | 2 +- .../Builder/AssociationMetadataBuilder.php | 6 +- lib/Doctrine/ORM/Mapping/Builder/Builder.php | 31 ---- .../Mapping/Builder/CacheMetadataBuilder.php | 2 +- .../Mapping/Builder/ColumnMetadataBuilder.php | 55 +----- .../DiscriminatorColumnMetadataBuilder.php | 2 +- .../Mapping/Builder/FieldMetadataBuilder.php | 2 +- .../Builder/LocalColumnMetadataBuilder.php | 98 +++++++++++ .../Mapping/Builder/TableMetadataBuilder.php | 2 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 33 ++-- .../ORM/Mapping/ComponentMetadata.php | 3 + .../Exporter/ClassMetadataExporter.php | 23 ++- .../Factory/AbstractClassMetadataFactory.php | 16 +- .../Factory/ClassMetadataDefinition.php | 15 +- .../ClassMetadataDefinitionFactory.php | 8 +- .../ORM/Mapping/MappedSuperClassMetadata.php | 165 ++++++++++++++++++ .../Entity/BasicEntityPersister.php | 7 +- lib/Doctrine/ORM/Query/Parser.php | 2 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 10 +- lib/Doctrine/ORM/Tools/SchemaValidator.php | 16 +- 20 files changed, 346 insertions(+), 152 deletions(-) delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/Builder.php create mode 100644 lib/Doctrine/ORM/Mapping/Builder/LocalColumnMetadataBuilder.php create mode 100644 lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php diff --git a/lib/Doctrine/ORM/EntityRepository.php b/lib/Doctrine/ORM/EntityRepository.php index c40525924b4..532d8616ce5 100644 --- a/lib/Doctrine/ORM/EntityRepository.php +++ b/lib/Doctrine/ORM/EntityRepository.php @@ -309,7 +309,7 @@ private function resolveMagicCall($method, $by, array $arguments) $fieldName = lcfirst(Inflector::classify($by)); - if (! ($this->class->hasField($fieldName) || $this->class->hasAssociation($fieldName))) { + if (null === $this->class->getProperty($fieldName)) { throw ORMException::invalidMagicCall($this->entityName, $fieldName, $method . $by); } diff --git a/lib/Doctrine/ORM/Mapping/Builder/AssociationMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/AssociationMetadataBuilder.php index 46b785ed75a..358ed7a7462 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/AssociationMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/AssociationMetadataBuilder.php @@ -23,7 +23,7 @@ use Doctrine\ORM\Mapping\CacheMetadata; use Doctrine\ORM\Mapping\FetchMode; -abstract class AssociationMetadataBuilder implements Builder +abstract class AssociationMetadataBuilder { /** @var string */ protected $name; @@ -55,10 +55,6 @@ abstract class AssociationMetadataBuilder implements Builder /** @var null|CacheMetadata */ private $cache = null; - public function __construct() - { - } - /** * @param string $name * diff --git a/lib/Doctrine/ORM/Mapping/Builder/Builder.php b/lib/Doctrine/ORM/Mapping/Builder/Builder.php deleted file mode 100644 index 369e063d7ba..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/Builder.php +++ /dev/null @@ -1,31 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -interface Builder -{ - /** - * @return object - */ - public function build(); -} diff --git a/lib/Doctrine/ORM/Mapping/Builder/CacheMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/CacheMetadataBuilder.php index 9d5828328cc..3278055f1a6 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/CacheMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/CacheMetadataBuilder.php @@ -24,7 +24,7 @@ use Doctrine\ORM\Mapping\CacheMetadata; -class CacheMetadataBuilder implements Builder +class CacheMetadataBuilder { /** @var string */ protected $usage; diff --git a/lib/Doctrine/ORM/Mapping/Builder/ColumnMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ColumnMetadataBuilder.php index e142dcf37fa..057f790ccc9 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ColumnMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ColumnMetadataBuilder.php @@ -25,7 +25,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ColumnMetadata; -class ColumnMetadataBuilder implements Builder +abstract class ColumnMetadataBuilder { /** @var string */ protected $tableName; @@ -117,42 +117,6 @@ public function withColumnDefinition(string $columnDefinition) return $this; } - /** - * @param int $length - * - * @return self - */ - public function withLength(int $length) - { - $this->length = $length; - - return $this; - } - - /** - * @param int $scale - * - * @return self - */ - public function withScale(int $scale) - { - $this->scale = $scale; - - return $this; - } - - /** - * @param int $precision - * - * @return self - */ - public function withPrecision(int $precision) - { - $this->precision = $precision; - - return $this; - } - /** * @param array $options * @@ -216,18 +180,6 @@ public function build() $columnMetadata->setColumnDefinition($this->columnDefinition); } - if ($this->length !== null) { - $columnMetadata->setLength($this->length); - } - - if ($this->scale !== null) { - $columnMetadata->setScale($this->scale); - } - - if ($this->precision !== null) { - $columnMetadata->setPrecision($this->precision); - } - // @todo guilhermeblanco Remove this once constructor arguments is in place $columnMetadata->setColumnName($this->columnName); $columnMetadata->setType($this->type); @@ -243,8 +195,5 @@ public function build() /** * @return ColumnMetadata */ - protected function createMetadataObject() - { - return new ColumnMetadata(); // new ColumnMetadata($this->columnName, $this->type); - } + abstract protected function createMetadataObject(); } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/DiscriminatorColumnMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/DiscriminatorColumnMetadataBuilder.php index f5a2a434b99..50fa516615f 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/DiscriminatorColumnMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/DiscriminatorColumnMetadataBuilder.php @@ -26,7 +26,7 @@ use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; use Doctrine\ORM\Mapping\MappingException; -class DiscriminatorColumnMetadataBuilder extends ColumnMetadataBuilder +class DiscriminatorColumnMetadataBuilder extends LocalColumnMetadataBuilder { /** @var string */ protected $columnName = 'dtype'; diff --git a/lib/Doctrine/ORM/Mapping/Builder/FieldMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/FieldMetadataBuilder.php index dba6e52474f..ce279f2a2f9 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/FieldMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/FieldMetadataBuilder.php @@ -26,7 +26,7 @@ use Doctrine\ORM\Mapping\Factory\NamingStrategy; use Doctrine\ORM\Mapping\FieldMetadata; -class FieldMetadataBuilder extends ColumnMetadataBuilder +class FieldMetadataBuilder extends LocalColumnMetadataBuilder { /** @var string */ protected $name; diff --git a/lib/Doctrine/ORM/Mapping/Builder/LocalColumnMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/LocalColumnMetadataBuilder.php new file mode 100644 index 00000000000..b2af7636db7 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Builder/LocalColumnMetadataBuilder.php @@ -0,0 +1,98 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\ColumnMetadata; +use Doctrine\ORM\Mapping\LocalColumnMetadata; + +abstract class LocalColumnMetadataBuilder extends ColumnMetadataBuilder +{ + /** @var int */ + protected $length = 255; + + /** @var int */ + protected $scale; + + /** @var int */ + protected $precision; + + /** + * @param int $length + * + * @return self + */ + public function withLength(int $length) + { + $this->length = $length; + + return $this; + } + + /** + * @param int $scale + * + * @return self + */ + public function withScale(int $scale) + { + $this->scale = $scale; + + return $this; + } + + /** + * @param int $precision + * + * @return self + */ + public function withPrecision(int $precision) + { + $this->precision = $precision; + + return $this; + } + + /** + * @return LocalColumnMetadata + */ + public function build() + { + /** @var LocalColumnMetadata $localColumnMetadata */ + $localColumnMetadata = parent::build(); + + if ($this->length !== null) { + $localColumnMetadata->setLength($this->length); + } + + if ($this->scale !== null) { + $localColumnMetadata->setScale($this->scale); + } + + if ($this->precision !== null) { + $localColumnMetadata->setPrecision($this->precision); + } + + return $localColumnMetadata; + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/TableMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/TableMetadataBuilder.php index e2ec63b4adc..b62b5087d61 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/TableMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/TableMetadataBuilder.php @@ -24,7 +24,7 @@ use Doctrine\ORM\Mapping\TableMetadata; -class TableMetadataBuilder implements Builder +class TableMetadataBuilder { /** @var string */ protected $schema; diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 721b61eea63..69ab3e703d9 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -284,14 +284,14 @@ class ClassMetadata extends ComponentMetadata implements TableOwner, ClassMetada * READ-ONLY: An array of field names. Used to look up field names from column names. * Keys are column names and values are field names. * - * @var array + * @var array */ public $fieldNames = []; /** * READ-ONLY: The property mappings of this class. * - * @var array + * @var array */ protected $properties = []; @@ -587,7 +587,7 @@ public function validateIdentifier() } // Verify & complete identifier mapping - if ( ! $this->identifier) { + if (! $this->identifier) { throw MappingException::identifierRequired($this->name); } @@ -808,10 +808,9 @@ protected function validateAndCompleteFieldMapping(FieldMetadata $property) throw MappingException::cannotVersionIdField($this->name, $fieldName); } - assert( - ! $property->getType()->canRequireSQLConversion(), - MappingException::sqlConversionNotAllowedForPrimaryKeyProperties($property) - ); + if ($property->getType()->canRequireSQLConversion()) { + throw MappingException::sqlConversionNotAllowedForPrimaryKeyProperties($property); + }; if (! in_array($fieldName, $this->identifier)) { $this->identifier[] = $fieldName; @@ -2180,7 +2179,7 @@ public function getSequencePrefix(AbstractPlatform $platform) /** * {@inheritDoc} * - * @todo guilhermeblanco Remove this method (it exists in Persistence repo) + * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo) */ public function hasAssociation($fieldName) { @@ -2191,7 +2190,7 @@ public function hasAssociation($fieldName) /** * {@inheritDoc} * - * @todo guilhermeblanco Remove this method (it exists in Persistence repo) + * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo) */ public function isSingleValuedAssociation($fieldName) { @@ -2202,7 +2201,7 @@ public function isSingleValuedAssociation($fieldName) /** * {@inheritDoc} * - * @todo guilhermeblanco Remove this method (it exists in Persistence repo) + * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo) */ public function isCollectionValuedAssociation($fieldName) { @@ -2213,7 +2212,7 @@ public function isCollectionValuedAssociation($fieldName) /** * {@inheritDoc} * - * @todo guilhermeblanco Remove this method (it exists in Persistence repo) + * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo) */ public function getFieldNames() { @@ -2228,7 +2227,7 @@ function (Property $property) { return $property instanceof FieldMetadata; } /** * {@inheritDoc} * - * @todo guilhermeblanco Remove this method (it exists in Persistence repo) + * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo) */ public function getAssociationNames() { @@ -2245,7 +2244,7 @@ function (Property $property) { return $property instanceof AssociationMetadata; * * @throws \InvalidArgumentException * - * @todo guilhermeblanco Remove this method (it exists in Persistence repo) + * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo) */ public function getAssociationTargetClass($assocName) { @@ -2261,7 +2260,7 @@ public function getAssociationTargetClass($assocName) /** * {@inheritDoc} * - * @todo guilhermeblanco Remove this method (it exists in Persistence repo) + * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo) */ public function isAssociationInverseSide($fieldName) { @@ -2273,7 +2272,7 @@ public function isAssociationInverseSide($fieldName) /** * {@inheritDoc} * - * @todo guilhermeblanco Remove this method (it exists in Persistence repo) + * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo) */ public function getAssociationMappedByTargetField($fieldName) { @@ -2285,7 +2284,7 @@ public function getAssociationMappedByTargetField($fieldName) * * @return array * - * @todo guilhermeblanco Remove this method (it exists in Persistence repo). + * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo). */ public function getAssociationsByTargetClass($targetClass) { @@ -2313,7 +2312,7 @@ public function getAssociationsByTargetClass($targetClass) * * @return \Doctrine\DBAL\Types\Type|string|null * - * @todo guilhermeblanco Remove this method (it exists in Persistence repo). + * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo). */ public function getTypeOfField($fieldName) { diff --git a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php index 5418b44c629..d9196b444cf 100644 --- a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php @@ -1,4 +1,7 @@ getShortName(); + $extendedClassName = ($value instanceof MappedSuperClassMetadata) + ? 'MappedSuperClassMetadata' + : 'ClassMetadata' + ; + $lines[] = 'use Doctrine\DBAL\Types\Type;'; - $lines[] = 'use Doctrine\ORM\Mapping\ClassMetadata;'; $lines[] = 'use Doctrine\ORM\Mapping;'; $lines[] = null; - $lines[] = 'class ' . $reflectionClass->getShortName() . 'ClassMetadata extends ClassMetadata'; + $lines[] = sprintf('class %sClassMetadata extends Mapping\%s', $shortClassName, $extendedClassName); $lines[] = '{'; $lines[] = $this->exportClassBody($value, $indentationLevel + 1); $lines[] = '}'; @@ -90,20 +96,11 @@ private function exportConstructor(ClassMetadata $metadata, int $indentationLeve { $indentation = str_repeat(self::INDENTATION, $indentationLevel); $bodyIndentation = str_repeat(self::INDENTATION, $indentationLevel + 1); - $objectReference = $bodyIndentation . static::VARIABLE; $lines = []; - $lines[] = $indentation . 'public function __construct(NamingStrategy $namingStrategy = null)'; + $lines[] = $indentation . 'public function __construct(?ClassMetadata $parent = null)'; $lines[] = $indentation . '{'; - $lines[] = $bodyIndentation . 'parent::__construct("' . $metadata->getName() . '", $namingStrategy);'; - - // @todo guilhermeblanco Defined here because this will be defined at the class declaration level - // @todo guilhermeblanco (through "extends MappedClassMetadata") - if ($metadata->isMappedSuperclass) { - $lines[] = null; - $lines[] = $objectReference . '->isMappedSuperclass = true;'; - } - + $lines[] = $bodyIndentation . 'parent::__construct("' . $metadata->getName() . '", $parent);'; $lines[] = $indentation . '}'; return implode(PHP_EOL, $lines); diff --git a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php index 42b0adb3469..75a24efdaf5 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php @@ -132,15 +132,18 @@ public function getMetadataFor($className) $parentClassNameList = $this->getParentClassNameList($className); $parentClassNameList[] = $className; + $parent = null; foreach ($parentClassNameList as $parentClassName) { if (isset($this->loaded[$parentClassName])) { + $parent = $this->loaded[$parentClassName]; + continue; } - $definition = $this->getOrCreateClassMetadataDefinition($entityClassName); + $definition = $this->getOrCreateClassMetadataDefinition($entityClassName, $parent); - $this->loaded[$entityClassName] = $this->createClassMetadata($definition); + $parent = $this->loaded[$entityClassName] = $this->createClassMetadata($definition); } return $this->loaded[$entityClassName]; @@ -179,7 +182,7 @@ protected function createClassMetadata(ClassMetadataDefinition $definition) : Cl { /** @var ClassMetadata $classMetadata */ $metadataFqcn = $definition->metadataClassName; - $classMetadata = new $metadataFqcn($this->namingStrategy); + $classMetadata = new $metadataFqcn($definition->parent); $classMetadata->wakeupReflection($this->getReflectionService()); @@ -189,14 +192,15 @@ protected function createClassMetadata(ClassMetadataDefinition $definition) : Cl /** * Create a class metadata definition for the given class name. * - * @param string $className + * @param string $className + * @param ClassMetadata|null $parent * * @return ClassMetadataDefinition */ - private function getOrCreateClassMetadataDefinition(string $className) : ClassMetadataDefinition + private function getOrCreateClassMetadataDefinition(string $className, ?ClassMetadata $parent) : ClassMetadataDefinition { if (! isset($this->definitions[$className])) { - $this->definitions[$className] = $this->definitionFactory->build($className); + $this->definitions[$className] = $this->definitionFactory->build($className, $parent); } return $this->definitions[$className]; diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinition.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinition.php index e705d1eb0d6..5e998d7d5ba 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinition.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinition.php @@ -22,6 +22,8 @@ namespace Doctrine\ORM\Mapping\Factory; +use Doctrine\ORM\Mapping\ClassMetadata; + class ClassMetadataDefinition { /** @@ -34,15 +36,22 @@ class ClassMetadataDefinition */ public $metadataClassName; + /** + * @var ClassMetadata|null + */ + public $parent; + /** * ClassMetadataDefinition constructor. * - * @param string $entityClassName - * @param string $metadataClassName + * @param string $entityClassName + * @param string $metadataClassName + * @param ClassMetadata|null $parent */ - public function __construct(string $entityClassName, string $metadataClassName) + public function __construct(string $entityClassName, string $metadataClassName, ?ClassMetadata $parent = null) { $this->entityClassName = $entityClassName; $this->metadataClassName = $metadataClassName; + $this->parent = $parent; } } diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php index f34f56f46c4..132e288bd75 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php @@ -22,6 +22,7 @@ namespace Doctrine\ORM\Mapping\Factory; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\Factory\AbstractClassMetadataFactory; class ClassMetadataDefinitionFactory @@ -49,14 +50,15 @@ public function __construct(ClassMetadataResolver $resolver, ClassMetadataGenera } /** - * @param string $className + * @param string $className + * @param ClassMetadata|null $parent * * @return ClassMetadataDefinition */ - public function build(string $className) : ClassMetadataDefinition + public function build(string $className, ?ClassMetadata $parent) : ClassMetadataDefinition { $metadataClassName = $this->resolver->resolveMetadataClassName($className); - $definition = new ClassMetadataDefinition($className, $metadataClassName); + $definition = new ClassMetadataDefinition($className, $metadataClassName, $parent); if (! class_exists($metadataClassName, false)) { $metadataClassPath = $this->resolver->resolveMetadataClassPath($className); diff --git a/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php b/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php new file mode 100644 index 00000000000..cd60c853050 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php @@ -0,0 +1,165 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +/** + * Class MappedSuperClassMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ +class MappedSuperClassMetadata extends ComponentMetadata +{ + /** + * @var string + */ + protected $className; + + /** + * @var MappedSuperClassMetadata|null + */ + protected $parent; + + /** + * @var array + */ + protected $declaredProperties = []; + + /** + * @var Property + */ + protected $declaredVersion; + + /** + * MappedSuperClassMetadata constructor. + * + * @param MappedSuperClassMetadata|null $parent + */ + public function __construct(string $className, ?MappedSuperClassMetadata $parent = null) + { + $this->className = $className; + $this->parent = $parent; + } + + /** + * @return string + */ + public function getClassName() : string + { + return $this->className; + } + + /** + * @return MappedSuperClassMetadata|null + */ + public function getParent() : ?MappedSuperClassMetadata + { + return $this->parent; + } + + /** + * @return Property|null + */ + public function getDeclaredVersion() : ?Property + { + return $this->declaredVersion; + } + + /** + * @param Property $property + */ + public function setDeclaredVersion(Property $property) + { + $this->declaredVersion = $property; + } + + /** + * @return Property|null + */ + public function getVersion() : ?Property + { + $version = $this->declaredVersion; + + if ($this->parent && ! $version) { + $version = $this->parent->getVersion(); + } + + return $version; + } + + /** + * @return bool + */ + public function isVersioned() : bool + { + return $this->getVersion() !== null; + } + + /** + * @return \ArrayIterator + */ + public function getDeclaredPropertiesIterator() : \ArrayIterator + { + return new \ArrayIterator($this->declaredProperties); + } + + /** + * @param Property $property + */ + public function addDeclaredProperty(Property $property) + { + $propertyName = $property->getName(); + + if (isset($this->declaredProperties[$propertyName])) { + return; + } + + $this->declaredProperties[$propertyName] = $property; + } + + /** + * @param string $propertyName + * + * @return bool + */ + public function hasDeclaredProperty(string $propertyName) : bool + { + return isset($this->declaredProperties[$propertyName]); + } + + /** + * @param string $propertyName + * + * @return bool + */ + public function hasProperty(string $propertyName) : bool + { + if (isset($this->declaredProperties[$propertyName])) { + return true; + } + + return $this->parent && $this->parent->hasProperty($propertyName); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 3a9052e3778..b801d37e2fd 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -806,7 +806,8 @@ public function loadToOneEntity(ToOneAssociationMetadata $association, $sourceEn if ($association->isOwningSide()) { $inversedBy = $association->getInversedBy(); - $isInverseSingleValued = $inversedBy && ! $targetClass->isCollectionValuedAssociation($inversedBy); + $targetProperty = $inversedBy ? $targetClass->getProperty($inversedBy) : null; + $isInverseSingleValued = $targetProperty && $targetProperty instanceof ToOneAssociationMetadata; // Mark inverse side as fetched in the hints, otherwise the UoW would // try to load it in a separate query (remember: to-one inverse sides can not be lazy). @@ -826,9 +827,7 @@ public function loadToOneEntity(ToOneAssociationMetadata $association, $sourceEn // Complete bidirectional association, if necessary if ($entity !== null && $isInverseSingleValued) { - $inversedAssociation = $targetClass->getProperty($inversedBy); - - $inversedAssociation->setValue($entity, $sourceEntity); + $targetProperty->setValue($entity, $sourceEntity); } return $entity; diff --git a/lib/Doctrine/ORM/Query/Parser.php b/lib/Doctrine/ORM/Query/Parser.php index aa89654ff2c..f3e0278b078 100644 --- a/lib/Doctrine/ORM/Query/Parser.php +++ b/lib/Doctrine/ORM/Query/Parser.php @@ -1051,7 +1051,7 @@ public function JoinAssociationPathExpression() $qComp = $this->queryComponents[$identVariable]; $class = $qComp['metadata']; - if ( ! $class->hasAssociation($field)) { + if (! (($property = $class->getProperty($field)) !== null && $property instanceof AssociationMetadata)) { $this->semanticalError('Class ' . $class->name . ' has no association named ' . $field); } diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index e4f48aded53..e2ddd27c86d 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -33,6 +33,7 @@ use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; +use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\ORMException; @@ -639,12 +640,13 @@ private function getDefiningClass($class, $referencedColumnName) // it seems to be an entity as foreign key foreach ($class->getIdentifierFieldNames() as $fieldName) { - if (! $class->hasAssociation($fieldName)) { + $property = $class->getProperty($fieldName); + + if (! ($property instanceof AssociationMetadata)) { continue; } - $association = $class->getProperty($fieldName); - $joinColumns = $association->getJoinColumns(); + $joinColumns = $property->getJoinColumns(); if (count($joinColumns) > 1) { throw MappingException::noSingleAssociationJoinColumnFound($class->name, $fieldName); @@ -653,7 +655,7 @@ private function getDefiningClass($class, $referencedColumnName) $joinColumn = reset($joinColumns); if ($joinColumn->getColumnName() === $referencedColumnName) { - $targetEntity = $this->em->getClassMetadata($association->getTargetEntity()); + $targetEntity = $this->em->getClassMetadata($property->getTargetEntity()); return $this->getDefiningClass($targetEntity, $joinColumn->getReferencedColumnName()); } diff --git a/lib/Doctrine/ORM/Tools/SchemaValidator.php b/lib/Doctrine/ORM/Tools/SchemaValidator.php index 5d3d0d8cc2e..838f5cf9847 100644 --- a/lib/Doctrine/ORM/Tools/SchemaValidator.php +++ b/lib/Doctrine/ORM/Tools/SchemaValidator.php @@ -148,7 +148,9 @@ private function validateAssociation(ClassMetadata $class, AssociationMetadata $ /** @var ClassMetadata $targetMetadata */ $targetMetadata = $metadataFactory->getMetadataFor($targetEntity); $containsForeignId = array_filter($targetMetadata->identifier, function ($identifier) use ($targetMetadata) { - return $targetMetadata->hasAssociation($identifier); + $targetProperty = $targetMetadata->getProperty($identifier); + + return $targetProperty instanceof AssociationMetadata; }); if ($association->isPrimaryKey() && count($containsForeignId)) { @@ -305,27 +307,27 @@ function (JoinColumnMetadata $joinColumn) { if ($association instanceof ToManyAssociationMetadata && $association->getOrderBy()) { foreach ($association->getOrderBy() as $orderField => $orientation) { - if ($targetMetadata->hasField($orderField)) { + $targetProperty = $targetMetadata->getProperty($orderField); + + if ($targetProperty instanceof FieldMetadata) { continue; } - if (! $targetMetadata->hasAssociation($orderField)) { + if (! ($targetProperty instanceof AssociationMetadata)) { $message = "The association %s#%s is ordered by a property '%s' that is non-existing field on the target entity '%s'."; $ce[] = sprintf($message, $class->name, $fieldName, $orderField, $targetMetadata->name); continue; } - $targetAssociation = $targetMetadata->getProperty($orderField); - - if ($targetAssociation instanceof ToManyAssociationMetadata) { + if ($targetProperty instanceof ToManyAssociationMetadata) { $message = "The association %s#%s is ordered by a property '%s' on '%s' that is a collection-valued association."; $ce[] = sprintf($message, $class->name, $fieldName, $orderField, $targetMetadata->name); continue; } - if ($targetAssociation instanceof AssociationMetadata && ! $targetAssociation->isOwningSide()) { + if ($targetProperty instanceof AssociationMetadata && ! $targetProperty->isOwningSide()) { $message = "The association %s#%s is ordered by a property '%s' on '%s' that is the inverse side of an association."; $ce[] = sprintf($message, $class->name, $fieldName, $orderField, $targetMetadata->name); From 6c228e880b5124589edebaebe0ffc67799f11f4c Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 17 Apr 2017 23:51:42 -0400 Subject: [PATCH 135/275] work --- .../Mapping/Builder/ClassMetadataBuilder.php | 14 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 64 +++++++-- .../ORM/Mapping/ClassMetadataFactory.php | 3 +- .../ORM/Mapping/ComponentMetadata.php | 134 +++++++++++++++--- .../ORM/Mapping/Driver/AnnotationDriver.php | 81 ++++++----- .../ORM/Mapping/EmbeddedClassMetadata.php | 35 +++++ .../ORM/Mapping/EntityClassMetadata.php | 35 +++++ .../Mapping/Factory/ClassMetadataDriver.php | 2 +- .../Factory/RuntimeClassMetadataFactory.php | 52 +++++++ .../Factory/StaticClassMetadataFactory.php | 52 +++++++ .../ORM/Mapping/MappedSuperClassMetadata.php | 87 +----------- lib/Doctrine/ORM/Mapping/Property.php | 5 + .../Entity/CachedPersisterContext.php | 1 + .../Builder/ClassMetadataBuilderTest.php | 2 +- 14 files changed, 418 insertions(+), 149 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php create mode 100644 lib/Doctrine/ORM/Mapping/EntityClassMetadata.php create mode 100644 lib/Doctrine/ORM/Mapping/Factory/RuntimeClassMetadataFactory.php create mode 100644 lib/Doctrine/ORM/Mapping/Factory/StaticClassMetadataFactory.php diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php index a15989d38a4..a9d4e24b395 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php @@ -40,6 +40,18 @@ */ class ClassMetadataBuilder { + const EMBEDDED_CLASS = 'EmbeddedClassMetadata'; + + const ENTITY_CLASS = 'EntityClassMetadata'; + + const MAPPED_SUPERCLASS = 'MappedSuperClassMetadata'; + + /** @var string */ + private $type = self::ENTITY_CLASS; + + /** @var bool */ + private $readOnly = false; + /** * @var \Doctrine\ORM\Mapping\ClassMetadata */ @@ -128,7 +140,7 @@ public function addEmbedded($fieldName, $class, $columnPrefix = null) * * @return ClassMetadataBuilder */ - public function setCustomRepositoryClass($repositoryClassName) + public function withCustomRepositoryClass($repositoryClassName) { $this->cm->setCustomRepositoryClass($repositoryClassName); diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 69ab3e703d9..686f564db23 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -47,7 +47,7 @@ * @author Guilherme Blanco * @since 2.0 */ -class ClassMetadata extends ComponentMetadata implements TableOwner, ClassMetadataInterface +class ClassMetadata implements TableOwner, ClassMetadataInterface { /** * READ-ONLY: The name of the entity class. @@ -65,6 +65,18 @@ class ClassMetadata extends ComponentMetadata implements TableOwner, ClassMetada */ public $rootEntityName; + /** + * @var CacheMetadata|null + */ + protected $cache = null; + + /** + * The ReflectionClass instance of the component class. + * + * @var \ReflectionClass|null + */ + protected $reflectionClass; + /** * The name of the custom repository class used for the entity class. * (Optional). @@ -332,6 +344,32 @@ public function __construct($entityName, NamingStrategy $namingStrategy = null) $this->table->setName($this->namingStrategy->classToTableName($entityName)); } + /** + * @param CacheMetadata|null $cache + * + * @return void + */ + public function setCache(?CacheMetadata $cache = null) + { + $this->cache = $cache; + } + + /** + * @return CacheMetadata|null + */ + public function getCache(): ?CacheMetadata + { + return $this->cache; + } + + /** + * @return \ReflectionClass|null + */ + public function getReflectionClass() : ?\ReflectionClass + { + return $this->reflectionClass; + } + /** * Extracts the identifier values of an entity of this class. * @@ -380,7 +418,9 @@ public function assignIdentifier($entity, array $id) */ public function __clone() { - parent::__clone(); + if ($this->cache) { + $this->cache = clone $this->cache; + } foreach ($this->properties as $name => $property) { $this->properties[$name] = clone $property; @@ -413,7 +453,7 @@ public function __toString() */ public function __sleep() { - $serialized = parent::__sleep(); + $serialized = []; // This metadata is always serialized/cached. $serialized = array_merge($serialized, [ @@ -486,6 +526,10 @@ public function __sleep() $serialized[] = 'sqlResultSetMappings'; } + if ($this->cache) { + $serialized[] = 'cache'; + } + if ($this->readOnly) { $serialized[] = 'readOnly'; } @@ -641,16 +685,6 @@ public function validateLifecycleCallbacks($reflService) } } - /** - * @param null|CacheMetadata $cache - * - * @return void - */ - public function setCache(CacheMetadata $cache = null) - { - $this->cache = $cache; - } - /** * Sets the change tracking policy used by this class. * @@ -1479,6 +1513,10 @@ public function isInheritedProperty($fieldName) public function setTable(TableMetadata $table) { $this->table = $table; + + if (empty($table->getName())) { + $table->setName($this->namingStrategy->classToTableName($this->name)); + } } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 58893f858c8..a33721ab4d4 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -132,9 +132,9 @@ protected function doLoadMetadata( $this->addInheritedProperties($class, $parent); $this->addInheritedEmbeddedClasses($class, $parent); + $this->inheritIdGeneratorMapping($class, $parent); $class->setInheritanceType($parent->inheritanceType); - $class->setIdGeneratorType($parent->generatorType); $class->setIdentifier($parent->identifier); if ($parent->discriminatorColumn) { @@ -149,7 +149,6 @@ protected function doLoadMetadata( $class->setCustomRepositoryClass($parent->customRepositoryClassName); } - $this->inheritIdGeneratorMapping($class, $parent); } // Invoke driver diff --git a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php index d9196b444cf..d4c4463c680 100644 --- a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php @@ -31,9 +31,14 @@ abstract class ComponentMetadata { /** - * @var CacheMetadata|null + * @var string */ - protected $cache = null; + protected $className; + + /** + * @var ComponentMetadata|null + */ + protected $parent; /** * The ReflectionClass instance of the component class. @@ -42,6 +47,52 @@ abstract class ComponentMetadata */ protected $reflectionClass; + /** + * @var CacheMetadata|null + */ + protected $cache = null; + + /** + * @var array + */ + protected $declaredProperties = []; + + /** + * ComponentMetadata constructor. + * + * @param string $className + * @param ComponentMetadata|null $parent + */ + public function __construct(string $className, ?ComponentMetadata $parent = null) + { + $this->className = $className; + $this->parent = $parent; + } + + /** + * @return string + */ + public function getClassName() : string + { + return $this->className; + } + + /** + * @return ComponentMetadata|null + */ + public function getParent() : ?ComponentMetadata + { + return $this->parent; + } + + /** + * @return \ReflectionClass|null + */ + public function getReflectionClass() : ?\ReflectionClass + { + return $this->reflectionClass; + } + /** * @param CacheMetadata|null $cache * @@ -61,40 +112,87 @@ public function getCache(): ?CacheMetadata } /** - * @return \ReflectionClass|null + * @return \Iterator */ - public function getReflectionClass() : ?\ReflectionClass + public function getDeclaredPropertiesIterator() : \Iterator { - return $this->reflectionClass; + return new \ArrayIterator($this->declaredProperties); } /** - * Handles metadata cloning nicely. + * @param Property $property */ - public function __clone() + public function addDeclaredProperty(Property $property) { - if ($this->cache) { - $this->cache = clone $this->cache; + $propertyName = $property->getName(); + + if (isset($this->declaredProperties[$propertyName])) { + return; + } + + $property->setDeclaringClass($this); + + if ($this->reflectionClass) { + $property->wakeupReflection($this->reflectionClass->getProperty($propertyName)); } + + $this->declaredProperties[$propertyName] = $property; } /** - * Determines which fields get serialized. + * @param string $propertyName * - * It is only serialized what is necessary for best unserialization performance. - * That means any metadata properties that are not set or empty or simply have - * their default value are NOT serialized. + * @return bool + */ + public function hasDeclaredProperty(string $propertyName) : bool + { + return isset($this->declaredProperties[$propertyName]); + } + + /** + * @return \Iterator + */ + public function getPropertiesIterator() : \Iterator + { + $declaredPropertiesIterator = $this->getDeclaredPropertiesIterator(); + + if (! $this->parent) { + return $declaredPropertiesIterator; + } + + $iterator = new \AppendIterator(); + + $iterator->append($this->parent->getPropertiesIterator()); + $iterator->append($declaredPropertiesIterator); + + return $iterator; + } + + /** + * @param string $propertyName * - * @return array The names of all the fields that should be serialized. + * @return bool */ - public function __sleep() + public function hasProperty(string $propertyName) : bool { - $serialized = []; + if (isset($this->declaredProperties[$propertyName])) { + return true; + } + + return $this->parent && $this->parent->hasProperty($propertyName); + } + /** + * Handles component metadata clone nicely. + */ + public function __clone() + { if ($this->cache) { - $serialized[] = 'cache'; + $this->cache = clone $this->cache; } - return $serialized; + foreach ($this->declaredProperties as $name => $property) { + $this->declaredProperties[$name] = clone $property; + } } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index d387c70da7d..d089160a8dc 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -80,7 +80,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $entityAnnot = $classAnnotations[Annotation\Entity::class]; if ($entityAnnot->repositoryClass !== null) { - $builder->setCustomRepositoryClass($entityAnnot->repositoryClass); + $builder->withCustomRepositoryClass($entityAnnot->repositoryClass); } if ($entityAnnot->readOnly) { @@ -92,7 +92,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat case isset($classAnnotations[Annotation\MappedSuperclass::class]): $mappedSuperclassAnnot = $classAnnotations[Annotation\MappedSuperclass::class]; - $builder->setCustomRepositoryClass($mappedSuperclassAnnot->repositoryClass); + $builder->withCustomRepositoryClass($mappedSuperclassAnnot->repositoryClass); $builder->asMappedSuperClass(); break; @@ -107,37 +107,9 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat // Evaluate Table annotation if (isset($classAnnotations[Annotation\Table::class])) { $tableAnnot = $classAnnotations[Annotation\Table::class]; + $table = $this->convertTableAnnotationToTableMetadata($tableAnnot); - if (! empty($tableAnnot->name)) { - $metadata->table->setName($tableAnnot->name); - } - - if (! empty($tableAnnot->schema)) { - $metadata->table->setSchema($tableAnnot->schema); - } - - foreach ($tableAnnot->options as $optionName => $optionValue) { - $metadata->table->addOption($optionName, $optionValue); - } - - foreach ($tableAnnot->indexes as $indexAnnot) { - $metadata->table->addIndex([ - 'name' => $indexAnnot->name, - 'columns' => $indexAnnot->columns, - 'unique' => $indexAnnot->unique, - 'options' => $indexAnnot->options, - 'flags' => $indexAnnot->flags, - ]); - } - - foreach ($tableAnnot->uniqueConstraints as $uniqueConstraintAnnot) { - $metadata->table->addUniqueConstraint([ - 'name' => $uniqueConstraintAnnot->name, - 'columns' => $uniqueConstraintAnnot->columns, - 'options' => $uniqueConstraintAnnot->options, - 'flags' => $uniqueConstraintAnnot->flags, - ]); - } + $builder->withTable($table); } // Evaluate @Cache annotation @@ -885,6 +857,51 @@ private function convertColumnAnnotationToFieldMetadata(Annotation\Column $colum return $fieldMetadata; } + /** + * Parse the given Table as TableMetadata + * + * @param Annotation\Table $tableAnnot + * + * @return Mapping\TableMetadata + */ + private function convertTableAnnotationToTableMetadata(Annotation\Table $tableAnnot) + { + $table = new Mapping\TableMetadata(); + + if (! empty($tableAnnot->name)) { + $table->setName($tableAnnot->name); + } + + if (! empty($tableAnnot->schema)) { + $table->setSchema($tableAnnot->schema); + } + + foreach ($tableAnnot->options as $optionName => $optionValue) { + $table->addOption($optionName, $optionValue); + } + + foreach ($tableAnnot->indexes as $indexAnnot) { + $table->addIndex([ + 'name' => $indexAnnot->name, + 'columns' => $indexAnnot->columns, + 'unique' => $indexAnnot->unique, + 'options' => $indexAnnot->options, + 'flags' => $indexAnnot->flags, + ]); + } + + foreach ($tableAnnot->uniqueConstraints as $uniqueConstraintAnnot) { + $table->addUniqueConstraint([ + 'name' => $uniqueConstraintAnnot->name, + 'columns' => $uniqueConstraintAnnot->columns, + 'options' => $uniqueConstraintAnnot->options, + 'flags' => $uniqueConstraintAnnot->flags, + ]); + } + + return $table; + } + /** * Parse the given JoinTable as JoinTableMetadata * diff --git a/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php b/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php new file mode 100644 index 00000000000..b174f2af3d8 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php @@ -0,0 +1,35 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +/** + * Class EmbeddedClassMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ +class EmbeddedClassMetadata extends ComponentMetadata +{ +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php b/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php new file mode 100644 index 00000000000..0b76d3c75e2 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php @@ -0,0 +1,35 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +/** + * Class EntityClassMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ +class EntityClassMetadata extends ComponentMetadata +{ +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDriver.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDriver.php index d8c609bc188..3928abab7ac 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDriver.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDriver.php @@ -61,7 +61,7 @@ public function getAllClassMetadata() : array * * @return ClassMetadata */ - public function getClassMetadata(string $className) : ClassMetadata + public function getClassMetadata(string $className) { } diff --git a/lib/Doctrine/ORM/Mapping/Factory/RuntimeClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/Factory/RuntimeClassMetadataFactory.php new file mode 100644 index 00000000000..d3e5558d651 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Factory/RuntimeClassMetadataFactory.php @@ -0,0 +1,52 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Factory; + +use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; + +/** + * RuntimeClassMetadataFactory is the ClassMetadata object creation factory that runs at + * execution time, consuming pre-exising entity classes. + * + * @package Doctrine\ORM\Mapping\Factory + * @since 3.0 + * + * @author Guilherme Blanco + */ +class RuntimeClassMetadataFactory extends AbstractClassMetadataFactory +{ + /** @var RuntimeReflectionService */ + private $reflectionService; + + /** + * @return RuntimeReflectionService + */ + protected function getReflectionService() : RuntimeReflectionService + { + if (! $this->reflectionService) { + $this->reflectionService = new RuntimeReflectionService(); + } + + return $this->reflectionService; + } +} diff --git a/lib/Doctrine/ORM/Mapping/Factory/StaticClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/Factory/StaticClassMetadataFactory.php new file mode 100644 index 00000000000..3bad180dee8 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Factory/StaticClassMetadataFactory.php @@ -0,0 +1,52 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Factory; + +use Doctrine\Common\Persistence\Mapping\StaticReflectionService; + +/** + * StaticClassMetadataFactory is the ClassMetadata object creation factory that sits behind + * the front-door, allowing to generate entity classes in case they do not exist yet. + * + * @package Doctrine\ORM\Mapping\Factory + * @since 3.0 + * + * @author Guilherme Blanco + */ +class StaticClassMetadataFactory extends AbstractClassMetadataFactory +{ + /** @var StaticReflectionService */ + private $reflectionService; + + /** + * @return StaticReflectionService + */ + protected function getReflectionService() : StaticReflectionService + { + if (! $this->reflectionService) { + $this->reflectionService = new StaticReflectionService(); + } + + return $this->reflectionService; + } +} diff --git a/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php b/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php index cd60c853050..9a7e0601fa6 100644 --- a/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php @@ -32,21 +32,6 @@ */ class MappedSuperClassMetadata extends ComponentMetadata { - /** - * @var string - */ - protected $className; - - /** - * @var MappedSuperClassMetadata|null - */ - protected $parent; - - /** - * @var array - */ - protected $declaredProperties = []; - /** * @var Property */ @@ -55,28 +40,12 @@ class MappedSuperClassMetadata extends ComponentMetadata /** * MappedSuperClassMetadata constructor. * + * @param string $className * @param MappedSuperClassMetadata|null $parent */ public function __construct(string $className, ?MappedSuperClassMetadata $parent = null) { - $this->className = $className; - $this->parent = $parent; - } - - /** - * @return string - */ - public function getClassName() : string - { - return $this->className; - } - - /** - * @return MappedSuperClassMetadata|null - */ - public function getParent() : ?MappedSuperClassMetadata - { - return $this->parent; + parent::__construct($className, $parent); } /** @@ -100,10 +69,12 @@ public function setDeclaredVersion(Property $property) */ public function getVersion() : ?Property { + /** @var MappedSuperClassMetadata|null $parent */ + $parent = $this->parent; $version = $this->declaredVersion; - if ($this->parent && ! $version) { - $version = $this->parent->getVersion(); + if ($parent && ! $version) { + $version = $parent->getVersion(); } return $version; @@ -116,50 +87,4 @@ public function isVersioned() : bool { return $this->getVersion() !== null; } - - /** - * @return \ArrayIterator - */ - public function getDeclaredPropertiesIterator() : \ArrayIterator - { - return new \ArrayIterator($this->declaredProperties); - } - - /** - * @param Property $property - */ - public function addDeclaredProperty(Property $property) - { - $propertyName = $property->getName(); - - if (isset($this->declaredProperties[$propertyName])) { - return; - } - - $this->declaredProperties[$propertyName] = $property; - } - - /** - * @param string $propertyName - * - * @return bool - */ - public function hasDeclaredProperty(string $propertyName) : bool - { - return isset($this->declaredProperties[$propertyName]); - } - - /** - * @param string $propertyName - * - * @return bool - */ - public function hasProperty(string $propertyName) : bool - { - if (isset($this->declaredProperties[$propertyName])) { - return true; - } - - return $this->parent && $this->parent->hasProperty($propertyName); - } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Property.php b/lib/Doctrine/ORM/Mapping/Property.php index b436028d04d..1c255444230 100644 --- a/lib/Doctrine/ORM/Mapping/Property.php +++ b/lib/Doctrine/ORM/Mapping/Property.php @@ -24,6 +24,11 @@ interface Property { + /** + * @param ClassMetadata $declaringClass + */ + public function setDeclaringClass(ClassMetadata $declaringClass); + /** * @return ClassMetadata */ diff --git a/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php b/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php index a02103f91f4..f55dd8ec96a 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php +++ b/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php @@ -18,6 +18,7 @@ */ namespace Doctrine\ORM\Persisters\Entity; + use Doctrine\Common\Persistence\Mapping\ClassMetadata; use Doctrine\ORM\Query\ResultSetMapping; diff --git a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php index 93f94dff7ca..63b74a359d6 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php @@ -154,7 +154,7 @@ public function testCreateEmbeddedWithColumnPrefix() public function testSetCustomRepositoryClass() { - self::assertIsFluent($this->builder->setCustomRepositoryClass(CmsGroup::class)); + self::assertIsFluent($this->builder->withCustomRepositoryClass(CmsGroup::class)); self::assertEquals(CmsGroup::class, $this->cm->customRepositoryClassName); } From bcb967c5f8b93e1fac0e8dc9f412bba2d1857be9 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sun, 30 Apr 2017 11:42:40 -0400 Subject: [PATCH 136/275] More work on MappingFactory. Decoupled ProxyConfiguration. Centralized PersistentCollection creation. --- lib/Doctrine/ORM/AbstractQuery.php | 5 +- lib/Doctrine/ORM/Cache/DefaultQueryCache.php | 10 +- .../ORM/Configuration/ProxyConfiguration.php | 10 +- lib/Doctrine/ORM/EntityManager.php | 20 ++-- .../ORM/Internal/Hydration/ObjectHydrator.php | 15 +-- .../ORM/Mapping/AssociationMetadata.php | 12 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 4 + .../ORM/Mapping/ComponentMetadata.php | 2 +- .../ORM/Mapping/EmbeddedClassMetadata.php | 111 +++++++++++++++++- .../Factory/AbstractClassMetadataFactory.php | 11 +- .../Mapping/Factory/ClassMetadataDriver.php | 18 ++- .../Factory/ClassMetadataGenerator.php | 2 +- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 12 +- lib/Doctrine/ORM/Mapping/Property.php | 5 + .../ORM/Mapping/ToManyAssociationMetadata.php | 39 ++++++ .../ORM/Mapping/TransientMetadata.php | 12 +- lib/Doctrine/ORM/Proxy/ProxyFactory.php | 18 +-- lib/Doctrine/ORM/UnitOfWork.php | 36 ++---- .../ORM/Functional/ReferenceProxyTest.php | 16 ++- .../Tests/ORM/Proxy/ProxyFactoryTest.php | 16 ++- 20 files changed, 279 insertions(+), 95 deletions(-) diff --git a/lib/Doctrine/ORM/AbstractQuery.php b/lib/Doctrine/ORM/AbstractQuery.php index 9ef38ae70dd..9273b9911dd 100644 --- a/lib/Doctrine/ORM/AbstractQuery.php +++ b/lib/Doctrine/ORM/AbstractQuery.php @@ -404,10 +404,7 @@ public function processParameterValue($value) } if ($value instanceof Mapping\ClassMetadata) { - return $value->discriminatorValue - ? $value->discriminatorValue - : $value->name - ; + return $value->discriminatorValue ?: $value->name; } if ($value instanceof Collection) { diff --git a/lib/Doctrine/ORM/Cache/DefaultQueryCache.php b/lib/Doctrine/ORM/Cache/DefaultQueryCache.php index ac4929ff4dd..d07428ddf18 100644 --- a/lib/Doctrine/ORM/Cache/DefaultQueryCache.php +++ b/lib/Doctrine/ORM/Cache/DefaultQueryCache.php @@ -190,10 +190,12 @@ public function get(QueryCacheKey $key, ResultSetMapping $rsm, array $hints = [] return new EntityCacheKey($assocMetadata->rootEntityName, $id); }; - $collection = new PersistentCollection($this->em, $assocMetadata, new ArrayCollection()); $assocKeys = new CollectionCacheEntry(array_map($generateKeys, $assoc['list'])); $assocEntries = $assocRegion->getMultiple($assocKeys); + // *-to-many association + $collection = []; + foreach ($assoc['list'] as $assocIndex => $assocId) { $assocEntry = is_array($assocEntries) && array_key_exists($assocIndex, $assocEntries) ? $assocEntries[$assocIndex] : null; @@ -207,22 +209,18 @@ public function get(QueryCacheKey $key, ResultSetMapping $rsm, array $hints = [] return null; } - $element = $this->uow->createEntity( + $collection[$assocIndex] = $this->uow->createEntity( $assocEntry->class, $assocEntry->resolveAssociationEntries($this->em), self::$hints ); - $collection->hydrateSet($assocIndex, $element); - if ($this->cacheLogger !== null) { $this->cacheLogger->entityCacheHit($assocRegion->getName(), $assocKeys->identifiers[$assocIndex]); } } $data[$name] = $collection; - - $collection->setInitialized(true); } $result[$index] = $this->uow->createEntity($entityEntry->class, $data, self::$hints); diff --git a/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php b/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php index 60b4caa5781..05970aea4a1 100644 --- a/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php +++ b/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php @@ -45,7 +45,7 @@ class ProxyConfiguration private $directory; /** - * @var bool + * @var int */ private $autoGenerate = AbstractProxyFactory::AUTOGENERATE_ALWAYS; @@ -82,17 +82,17 @@ public function setDirectory(string $directory) } /** - * @return bool + * @return int */ - public function isAutoGenerate() : bool + public function getAutoGenerate() : int { return $this->autoGenerate; } /** - * @param bool $autoGenerate + * @param int $autoGenerate */ - public function setAutoGenerate(bool $autoGenerate) + public function setAutoGenerate(int $autoGenerate) { $this->autoGenerate = $autoGenerate; } diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index b95baed76bc..3a1aa58f323 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -19,7 +19,7 @@ namespace Doctrine\ORM; -use Exception; +use Doctrine\ORM\Configuration\ProxyConfiguration; use Doctrine\Common\EventManager; use Doctrine\DBAL\Connection; use Doctrine\DBAL\DriverManager; @@ -151,20 +151,22 @@ protected function __construct(Connection $conn, Configuration $config, EventMan $this->config = $config; $this->eventManager = $eventManager; + $proxyConfiguration = new ProxyConfiguration(); + + $proxyConfiguration->setDirectory($config->getProxyDir()); + $proxyConfiguration->setNamespace($config->getProxyNamespace()); + $proxyConfiguration->setAutoGenerate($config->getAutoGenerateProxyClasses()); + $metadataFactoryClassName = $config->getClassMetadataFactoryName(); $this->metadataFactory = new $metadataFactoryClassName; + $this->metadataFactory->setEntityManager($this); $this->metadataFactory->setCacheDriver($this->config->getMetadataCacheImpl()); $this->repositoryFactory = $config->getRepositoryFactory(); $this->unitOfWork = new UnitOfWork($this); - $this->proxyFactory = new ProxyFactory( - $this, - $config->getProxyDir(), - $config->getProxyNamespace(), - $config->getAutoGenerateProxyClasses() - ); + $this->proxyFactory = new ProxyFactory($this, $proxyConfiguration); if ($config->isSecondLevelCacheEnabled()) { $cacheConfig = $config->getSecondLevelCacheConfiguration(); @@ -271,9 +273,9 @@ public function rollback() * * @param string $className * - * @return \Doctrine\ORM\Mapping\ClassMetadata + * @return Mapping\ClassMetadata */ - public function getClassMetadata($className) + public function getClassMetadata($className) : Mapping\ClassMetadata { return $this->metadataFactory->getMetadataFor($className); } diff --git a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php index 76bf2412d26..f06be7ddf70 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php @@ -20,6 +20,7 @@ namespace Doctrine\ORM\Internal\Hydration; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ToManyAssociationMetadata; use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use PDO; use Doctrine\Common\Collections\ArrayCollection; @@ -185,22 +186,16 @@ protected function hydrateAllData() */ private function initRelatedCollection($entity, $class, $fieldName, $parentDqlAlias) { - $oid = spl_object_hash($entity); + /** @var ToManyAssociationMetadata $association */ $association = $class->getProperty($fieldName); $value = $association->getValue($entity); - - if ($value === null || is_array($value)) { - $value = new ArrayCollection((array) $value); - } + $oid = spl_object_hash($entity); if (! $value instanceof PersistentCollection) { - $value = new PersistentCollection( - $this->em, $this->metadataCache[$association->getTargetEntity()], $value - ); - - $value->setOwner($entity, $association); + $value = $association->wrap($entity, $value, $this->em); $association->setValue($entity, $value); + $this->uow->setOriginalEntityProperty($oid, $fieldName, $value); $this->initializedCollections[$oid . $fieldName] = $value; diff --git a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php index efaefb052e4..24eb66f1a08 100644 --- a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php @@ -299,12 +299,22 @@ public function isField() return false; } + /** + * {@inheritdoc} + */ + public function setReflectionProperty(\ReflectionProperty $reflectionProperty) + { + $this->reflection = $reflectionProperty; + } + /** * {@inheritdoc} */ public function wakeupReflection(ReflectionService $reflectionService) { - $this->reflection = $reflectionService->getAccessibleProperty($this->declaringClass->name, $this->name); + $this->setReflectionProperty( + $reflectionService->getAccessibleProperty($this->declaringClass->name, $this->name) + ); } public function __clone() diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 686f564db23..62b6bb0d7d9 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -560,6 +560,10 @@ public function wakeupReflection($reflService) $this->reflectionClass = $reflService->getClass($this->name); $this->instantiator = $this->instantiator ?: new Instantiator(); + if (! $this->reflectionClass) { + return; + } + $parentReflFields = []; /*foreach ($this->embeddedClasses as $property => $embeddedClass) { diff --git a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php index d4c4463c680..68613996dc8 100644 --- a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php @@ -133,7 +133,7 @@ public function addDeclaredProperty(Property $property) $property->setDeclaringClass($this); if ($this->reflectionClass) { - $property->wakeupReflection($this->reflectionClass->getProperty($propertyName)); + $property->setReflectionProperty($this->reflectionClass->getProperty($propertyName)); } $this->declaredProperties[$propertyName] = $property; diff --git a/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php b/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php index b174f2af3d8..221fe87cb20 100644 --- a/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php @@ -22,6 +22,8 @@ namespace Doctrine\ORM\Mapping; +use Doctrine\Common\Persistence\Mapping\ReflectionService; + /** * Class EmbeddedClassMetadata * @@ -30,6 +32,113 @@ * * @author Guilherme Blanco */ -class EmbeddedClassMetadata extends ComponentMetadata +class EmbeddedClassMetadata extends ComponentMetadata implements Property { + /** @var ClassMetadata */ + private $declaringClass; + + /** @var \ReflectionProperty */ + private $reflection; + + /** @var string */ + private $name; + + /** @var boolean */ + protected $primaryKey = false; + + /** + * EmbeddedClassMetadata constructor. + * + * @param string $name + * @param string $className + * @param EmbeddedClassMetadata|null $parent + */ + public function __construct(string $name, string $className, ?EmbeddedClassMetadata $parent = null) + { + parent::__construct($className, $parent); + + $this->name = $name; + } + + /** + * {@inheritdoc} + */ + public function getDeclaringClass() + { + return $this->declaringClass; + } + + /** + * @param ClassMetadata $declaringClass + */ + public function setDeclaringClass(ClassMetadata $declaringClass) + { + $this->declaringClass = $declaringClass; + } + + /** + * {@inheritdoc} + */ + public function getName() + { + return $this->name; + } + + /** + * {@inheritdoc} + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * @param bool $isPrimaryKey + */ + public function setPrimaryKey(bool $isPrimaryKey) + { + $this->primaryKey = $isPrimaryKey; + } + + /** + * @return bool + */ + public function isPrimaryKey() + { + return $this->primaryKey; + } + + /** + * {@inheritdoc} + */ + public function setValue($object, $value) + { + $this->reflection->setValue($object, $value); + } + + /** + * {@inheritdoc} + */ + public function getValue($object) + { + return $this->reflection->getValue($object); + } + + /** + * {@inheritdoc} + */ + public function setReflectionProperty(\ReflectionProperty $reflectionProperty) + { + $this->reflection = $reflectionProperty; + } + + /** + * {@inheritdoc} + */ + public function wakeupReflection(ReflectionService $reflectionService) + { + $this->setReflectionProperty( + $reflectionService->getAccessibleProperty($this->declaringClass->name, $this->name) + ); + } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php index 75a24efdaf5..01528301aba 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php @@ -71,11 +71,6 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory */ protected $metadataDriver; - /** - * @var NamingStrategy - */ - protected $namingStrategy; - /** * @var array */ @@ -93,11 +88,10 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory */ public function __construct(MetadataConfiguration $configuration) { - $driver = new ClassMetadataDriver($configuration->getMappingDriver(), $this->getReflectionService()); + $driver = new ClassMetadataDriver($configuration->getMappingDriver(), $configuration->getNamingStrategy()); $generator = new ClassMetadataGenerator($driver); $this->metadataDriver = $driver; - $this->namingStrategy = $configuration->getNamingStrategy(); $this->definitionFactory = new ClassMetadataDefinitionFactory( $configuration->getResolver(), $generator, @@ -213,9 +207,10 @@ private function getOrCreateClassMetadataDefinition(string $className, ?ClassMet */ private function getParentClassNameList(string $className) : array { + $reflectionService = $this->getReflectionService(); $parentClassNameList = []; - foreach (array_reverse($this->getReflectionService()->getParentClasses($className)) as $parentClassName) { + foreach (array_reverse($reflectionService->getParentClasses($className)) as $parentClassName) { if ($this->metadataDriver->hasClassMetadata($parentClassName)) { continue; } diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDriver.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDriver.php index 3928abab7ac..c2bc61bfa28 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDriver.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDriver.php @@ -24,6 +24,7 @@ use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; use Doctrine\Common\Persistence\Mapping\ReflectionService; +use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\ClassMetadata; /** @@ -43,9 +44,15 @@ class ClassMetadataDriver */ private $mappingDriver; - public function __construct(MappingDriver $mappingDriver) + /** + * @var NamingStrategy + */ + protected $namingStrategy; + + public function __construct(MappingDriver $mappingDriver, NamingStrategy $namingStrategy) { - $this->mappingDriver = $mappingDriver; + $this->mappingDriver = $mappingDriver; + $this->namingStrategy = $namingStrategy; } /** @@ -57,13 +64,16 @@ public function getAllClassMetadata() : array } /** - * @param string $className + * @param string $className + * @param ClassMetadata|null $parent * * @return ClassMetadata */ - public function getClassMetadata(string $className) + public function getClassMetadata(string $className, ?ClassMetadata $parent) { + $builder = $this->mappingDriver->loadMetadataForClass($className, $parent); + return $builder->build($this->namingStrategy); } /** diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php index a1de2b47570..ba49bbc9c89 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php @@ -64,7 +64,7 @@ public function __construct( */ public function generate(string $path, ClassMetadataDefinition $definition) { - $metadata = $this->metadataDriver->getClassMetadata($definition->entityClassName); + $metadata = $this->metadataDriver->getClassMetadata($definition->entityClassName, $definition->parent); $sourceCode = $this->metadataExporter->export($metadata); $this->ensureDirectoryIsReady(dirname($path)); diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index 57339463e09..841c5369491 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -152,11 +152,21 @@ public function isField() return true; } + /** + * {@inheritdoc} + */ + public function setReflectionProperty(\ReflectionProperty $reflectionProperty) + { + $this->reflection = $reflectionProperty; + } + /** * {@inheritdoc} */ public function wakeupReflection(ReflectionService $reflectionService) { - $this->reflection = $reflectionService->getAccessibleProperty($this->declaringClass->name, $this->name); + $this->setReflectionProperty( + $reflectionService->getAccessibleProperty($this->declaringClass->name, $this->name) + ); } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Property.php b/lib/Doctrine/ORM/Mapping/Property.php index 1c255444230..297f631d96a 100644 --- a/lib/Doctrine/ORM/Mapping/Property.php +++ b/lib/Doctrine/ORM/Mapping/Property.php @@ -52,6 +52,11 @@ public function getValue($object); */ public function getName(); + /** + * @param \ReflectionProperty $reflectionProperty + */ + public function setReflectionProperty(\ReflectionProperty $reflectionProperty); + /** * @param ReflectionService $reflectionService */ diff --git a/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php index 16c719edf5e..816f0a63bdc 100644 --- a/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php @@ -19,6 +19,11 @@ namespace Doctrine\ORM\Mapping; +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Collection; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\PersistentCollection; + class ToManyAssociationMetadata extends AssociationMetadata { /** @var array */ @@ -58,4 +63,38 @@ public function getIndexedBy() { return $this->indexedBy; } + + /** + * @param object $owner + * @param null|array|Collection $collection + * @param EntityManagerInterface $entityManager + * + * @return PersistentCollection + */ + public function wrap($owner, $collection, EntityManagerInterface $entityManager) + { + if ($collection instanceof PersistentCollection) { + if ($collection->getOwner() === $owner) { + return $collection; + } + + $collection = $collection->getValues(); + } + + // If $value is not a Collection then use an ArrayCollection. + if (! $collection instanceof Collection) { + // @todo guilhermeblanco Conceptually, support to custom collections by replacing ArrayCollection creation. + $collection = new ArrayCollection((array) $collection); + } + + // Inject PersistentCollection + $targetClass = $entityManager->getClassMetadata($this->getTargetEntity()); + $collection = new PersistentCollection($entityManager, $targetClass, $collection); + + $collection->setOwner($owner, $this); + $collection->setDirty( ! $collection->isEmpty()); + $collection->setInitialized(true); + + return $collection; + } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/TransientMetadata.php b/lib/Doctrine/ORM/Mapping/TransientMetadata.php index 8e471cc7ebe..f9d92a64855 100644 --- a/lib/Doctrine/ORM/Mapping/TransientMetadata.php +++ b/lib/Doctrine/ORM/Mapping/TransientMetadata.php @@ -85,11 +85,21 @@ public function getValue($object) return $this->reflection->getValue($object); } + /** + * {@inheritdoc} + */ + public function setReflectionProperty(\ReflectionProperty $reflectionProperty) + { + $this->reflection = $reflectionProperty; + } + /** * {@inheritdoc} */ public function wakeupReflection(ReflectionService $reflectionService) { - $this->reflection = $reflectionService->getAccessibleProperty($this->declaringClass->name, $this->name); + $this->setReflectionProperty( + $reflectionService->getAccessibleProperty($this->declaringClass->name, $this->name) + ); } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Proxy/ProxyFactory.php b/lib/Doctrine/ORM/Proxy/ProxyFactory.php index 601eb492ee5..9aa8c621c15 100644 --- a/lib/Doctrine/ORM/Proxy/ProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/ProxyFactory.php @@ -25,7 +25,9 @@ use Doctrine\Common\Proxy\ProxyDefinition; use Doctrine\Common\Proxy\ProxyGenerator; use Doctrine\Common\Util\ClassUtils; +use Doctrine\ORM\Configuration\ProxyConfiguration; use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\Property; use Doctrine\ORM\Persisters\Entity\EntityPersister; use Doctrine\ORM\EntityNotFoundException; use Doctrine\ORM\Utility\IdentifierFlattener; @@ -66,23 +68,20 @@ class ProxyFactory extends AbstractProxyFactory * Initializes a new instance of the ProxyFactory class that is * connected to the given EntityManager. * - * @param EntityManagerInterface $em The EntityManager the new factory works for. - * @param string $proxyDir The directory to use for the proxy classes. It must exist. - * @param string $proxyNs The namespace to use for the proxy classes. - * @param boolean|int $autoGenerate The strategy for automatically generating proxy classes. Possible - * values are constants of Doctrine\Common\Proxy\AbstractProxyFactory. + * @param EntityManagerInterface $em The EntityManager the new factory works for. + * @param ProxyConfiguration $configuration The Proxy configuration */ - public function __construct(EntityManagerInterface $em, $proxyDir, $proxyNs, $autoGenerate = AbstractProxyFactory::AUTOGENERATE_NEVER) + public function __construct(EntityManagerInterface $em, ProxyConfiguration $configuration) { - $proxyGenerator = new ProxyGenerator($proxyDir, $proxyNs); + $proxyGenerator = new ProxyGenerator($configuration->getDirectory(), $configuration->getNamespace()); $proxyGenerator->setPlaceholder('baseProxyInterface', Proxy::class); - parent::__construct($proxyGenerator, $em->getMetadataFactory(), $autoGenerate); + parent::__construct($proxyGenerator, $em->getMetadataFactory(), $configuration->getAutoGenerate()); $this->em = $em; $this->uow = $em->getUnitOfWork(); - $this->proxyNs = $proxyNs; + $this->proxyNs = $configuration->getNamespace(); $this->identifierFlattener = new IdentifierFlattener($this->uow, $em->getMetadataFactory()); } @@ -198,6 +197,7 @@ private function createCloner(ClassMetadata $classMetadata, EntityPersister $ent } foreach ($class->getProperties() as $property) { + /** @var Property $property */ $property->setValue($proxy, $property->getValue($original)); } }; diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 819c9e9a4f1..5adec363c18 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -597,25 +597,11 @@ public function computeChangeSet(ClassMetadata $class, $entity) $value = $property->getValue($entity); if ($property instanceof ToManyAssociationMetadata && $value !== null) { - if ($value instanceof PersistentCollection) { - if ($value->getOwner() === $entity) { - continue; - } - - $value = new ArrayCollection($value->getValues()); - } - - // If $value is not a Collection then use an ArrayCollection. - if ( ! $value instanceof Collection) { - $value = new ArrayCollection($value); + if ($value instanceof PersistentCollection && $value->getOwner() === $entity) { + continue; } - // Inject PersistentCollection - $value = new PersistentCollection( - $this->em, $this->em->getClassMetadata($property->getTargetEntity()), $value - ); - $value->setOwner($entity, $property); - $value->setDirty( ! $value->isEmpty()); + $value = $property->wrap($entity, $value, $this->em); $property->setValue($entity, $value); @@ -2666,8 +2652,10 @@ public function createEntity($className, array $data, &$hints = []) continue; } + $hasDataField = isset($data[$field]); + // use the given collection - if (isset($data[$field]) && $data[$field] instanceof PersistentCollection) { + if ($hasDataField && $data[$field] instanceof PersistentCollection) { $data[$field]->setOwner($entity, $association); $association->setValue($entity, $data[$field]); @@ -2678,9 +2666,9 @@ public function createEntity($className, array $data, &$hints = []) } // Inject collection - $pColl = new PersistentCollection($this->em, $targetClass, new ArrayCollection); - $pColl->setOwner($entity, $association); - $pColl->setInitialized(false); + $pColl = $association->wrap($entity, $hasDataField ? $data[$field] : [], $this->em); + + $pColl->setInitialized($hasDataField); $association->setValue($entity, $pColl); @@ -3468,11 +3456,7 @@ private function mergeEntityStateIntoManagedCopy($entity, $managedCopy) $managedCol = $property->getValue($managedCopy); if (! $managedCol) { - $targetEntity = $property->getTargetEntity(); - $targetClass = $this->em->getClassMetadata($targetEntity); - $managedCol = new PersistentCollection($this->em, $targetClass, new ArrayCollection()); - - $managedCol->setOwner($managedCopy, $property); + $managedCol = $property->wrap($managedCopy, [], $this->em); $property->setValue($managedCopy, $managedCol); } diff --git a/tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php b/tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php index c6d6d219623..20b09cae34a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php @@ -3,7 +3,9 @@ namespace Doctrine\Tests\ORM\Functional; use Doctrine\Common\Persistence\Proxy; +use Doctrine\Common\Proxy\AbstractProxyFactory; use Doctrine\Common\Util\ClassUtils; +use Doctrine\ORM\Configuration\ProxyConfiguration; use Doctrine\ORM\Proxy\ProxyFactory; use Doctrine\Tests\Models\Company\CompanyAuction; use Doctrine\Tests\Models\ECommerce\ECommerceProduct; @@ -21,12 +23,16 @@ protected function setUp() { $this->useModelSet('ecommerce'); $this->useModelSet('company'); + parent::setUp(); - $this->factory = new ProxyFactory( - $this->em, - __DIR__ . '/../../Proxies', - 'Doctrine\Tests\Proxies', - true); + + $proxyConfiguration = new ProxyConfiguration(); + + $proxyConfiguration->setDirectory(__DIR__ . '/../../Proxies'); + $proxyConfiguration->setNamespace('Doctrine\Tests\Proxies'); + $proxyConfiguration->setAutoGenerate(AbstractProxyFactory::AUTOGENERATE_ALWAYS); + + $this->factory = new ProxyFactory($this->em, $proxyConfiguration); } public function createProduct() diff --git a/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php b/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php index cd66d8be72e..524848e33e7 100644 --- a/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php @@ -4,6 +4,7 @@ use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\Common\Proxy\AbstractProxyFactory; +use Doctrine\ORM\Configuration\ProxyConfiguration; use Doctrine\ORM\EntityNotFoundException; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Persisters\Entity\BasicEntityPersister; @@ -49,11 +50,20 @@ class ProxyFactoryTest extends OrmTestCase protected function setUp() { parent::setUp(); + $this->connectionMock = new ConnectionMock([], new DriverMock()); - $this->emMock = EntityManagerMock::create($this->connectionMock); - $this->uowMock = new UnitOfWorkMock($this->emMock); + $this->emMock = EntityManagerMock::create($this->connectionMock); + $this->uowMock = new UnitOfWorkMock($this->emMock); + $this->emMock->setUnitOfWork($this->uowMock); - $this->proxyFactory = new ProxyFactory($this->emMock, sys_get_temp_dir(), 'Proxies', AbstractProxyFactory::AUTOGENERATE_ALWAYS); + + $proxyConfiguration = new ProxyConfiguration(); + + $proxyConfiguration->setDirectory(sys_get_temp_dir()); + $proxyConfiguration->setNamespace('Proxies'); + $proxyConfiguration->setAutoGenerate(AbstractProxyFactory::AUTOGENERATE_ALWAYS); + + $this->proxyFactory = new ProxyFactory($this->emMock, $proxyConfiguration); } public function testReferenceProxyDelegatesLoadingToThePersister() From 7a9a2a282300603b14ec9a06b4c37e282ad29f66 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 5 May 2017 23:54:39 -0400 Subject: [PATCH 137/275] Removed isIdentifierComposite flag from ClassMetadata --- lib/Doctrine/ORM/EntityManager.php | 8 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 35 ++-- .../Mapping/Driver/NewAnnotationDriver.php | 190 ++++++++++++++++++ .../ORM/Mapping/EntityClassMetadata.php | 105 ++++++++++ .../Exporter/ClassMetadataExporter.php | 2 +- .../Factory/AbstractClassMetadataFactory.php | 19 +- .../Factory/ClassMetadataGenerator.php | 24 ++- lib/Doctrine/ORM/PersistentCollection.php | 2 +- .../Entity/BasicEntityPersister.php | 2 +- .../ORM/Query/ResultSetMappingBuilder.php | 6 +- .../Command/MappingDescribeCommand.php | 2 +- .../ORM/Tools/Export/Driver/PhpExporter.php | 2 +- lib/Doctrine/ORM/UnitOfWork.php | 6 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 22 +- 14 files changed, 366 insertions(+), 59 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 3a1aa58f323..58b1f77e7fb 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -378,8 +378,8 @@ public function find($entityName, $id, $lockMode = null, $lockVersion = null) { $class = $this->metadataFactory->getMetadataFor(ltrim($entityName, '\\')); - if ( ! is_array($id)) { - if ($class->isIdentifierComposite) { + if (! is_array($id)) { + if ($class->isIdentifierComposite()) { throw ORMInvalidArgumentException::invalidCompositeIdentifier(); } @@ -470,7 +470,7 @@ public function getReference($entityName, $id) $class = $this->metadataFactory->getMetadataFor(ltrim($entityName, '\\')); if ( ! is_array($id)) { - if ($class->isIdentifierComposite) { + if ($class->isIdentifierComposite()) { throw ORMInvalidArgumentException::invalidCompositeIdentifier(); } @@ -526,7 +526,7 @@ public function getPartialReference($entityName, $id) $class = $this->metadataFactory->getMetadataFor(ltrim($entityName, '\\')); if ( ! is_array($id)) { - if ($class->isIdentifierComposite) { + if ($class->isIdentifierComposite()) { throw ORMInvalidArgumentException::invalidCompositeIdentifier(); } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 62b6bb0d7d9..4f599bdf51c 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -193,13 +193,6 @@ class ClassMetadata implements TableOwner, ClassMetadataInterface */ public $identifier = []; - /** - * READ-ONLY: Flag indicating whether the identifier/primary key of the class is composite. - * - * @var boolean - */ - public $isIdentifierComposite = false; - /** * READ-ONLY: The inheritance mapping type used by the class. * @@ -461,7 +454,6 @@ public function __sleep() 'fieldNames', //'embeddedClasses', 'identifier', - 'isIdentifierComposite', // TODO: REMOVE 'name', 'table', 'rootEntityName', @@ -639,7 +631,7 @@ public function validateIdentifier() throw MappingException::identifierRequired($this->name); } - if ($this->generatorType !== GeneratorType::NONE && $this->isIdentifierComposite) { + if ($this->generatorType !== GeneratorType::NONE && $this->isIdentifierComposite()) { throw MappingException::compositeKeyAssignedIdGeneratorRequired($this->name); } } @@ -711,17 +703,25 @@ public function setChangeTrackingPolicy($policy) */ public function isIdentifier($fieldName) { - if ( ! $this->identifier) { + if (! $this->identifier) { return false; } - if ( ! $this->isIdentifierComposite) { + if (! $this->isIdentifierComposite()) { return $fieldName === $this->identifier[0]; } return in_array($fieldName, $this->identifier, true); } + /** + * @return bool + */ + public function isIdentifierComposite() + { + return count($this->identifier) > 1; + } + /** * Gets the named query. * @@ -853,11 +853,6 @@ protected function validateAndCompleteFieldMapping(FieldMetadata $property) if (! in_array($fieldName, $this->identifier)) { $this->identifier[] = $fieldName; } - - // Check for composite key - if (! $this->isIdentifierComposite && count($this->identifier) > 1) { - $this->isIdentifierComposite = true; - } } $this->fieldNames[$columnName] = $fieldName; @@ -942,11 +937,6 @@ protected function validateAndCompleteAssociationMapping(AssociationMetadata $pr $this->identifier[] = $property->getName(); } - // Check for composite key - if ( ! $this->isIdentifierComposite && count($this->identifier) > 1) { - $this->isIdentifierComposite = true; - } - if ($this->cache && !$property->getCache()) { throw CacheException::nonCacheableEntityAssociation($this->name, $fieldName); } @@ -1232,7 +1222,7 @@ public function getIdentifierFieldNames() */ public function getSingleIdentifierFieldName() { - if ($this->isIdentifierComposite) { + if ($this->isIdentifierComposite()) { throw MappingException::singleIdNotAllowedOnCompositePrimaryKey($this->name); } @@ -1251,7 +1241,6 @@ public function getSingleIdentifierFieldName() public function setIdentifier(array $identifier) { $this->identifier = $identifier; - $this->isIdentifierComposite = count($this->identifier) > 1; } /** diff --git a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php new file mode 100644 index 00000000000..f5c24d52b4e --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php @@ -0,0 +1,190 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Driver; + +use Doctrine\Common\Annotations\AnnotationReader; +use Doctrine\Common\Persistence\Mapping\ClassMetadata; +use Doctrine\Common\Persistence\Mapping\Driver\FileLocator; +use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; +use Doctrine\ORM\Annotation; +use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; + +class NewAnnotationDriver implements MappingDriver +{ + static protected $entityAnnotationClasses = [ + Annotation\Entity::class => 1, + Annotation\MappedSuperclass::class => 2, + ]; + + /** + * The Annotation reader. + * + * @var AnnotationReader + */ + protected $reader; + + /** + * The file locator. + * + * @var FileLocator + */ + protected $locator; + + /** + * Cache for AnnotationDriver#getAllClassNames(). + * + * @var array|null + */ + private $classNames; + + /** + * Initializes a new AnnotationDriver that uses the given AnnotationReader for reading docblock annotations. + * + * @param AnnotationReader $reader The AnnotationReader to use, duck-typed. + * @param FileLocator $locator A FileLocator or one/multiple paths where mapping documents can be found. + */ + public function __construct(AnnotationReader $reader, FileLocator $locator) + { + $this->reader = $reader; + $this->locator = $locator; + } + + /** + * {@inheritdoc} + */ + public function loadMetadataForClass($className, ClassMetadata $metadata) + { + // IMPORTANT: We're handling $metadata as "parent" metadata here, while building the $className ClassMetadata. + $reflectionClass = new \ReflectionClass($className); + $classAnnotations = $this->getClassAnnotations($reflectionClass); + $classBuilder = null; + + // Evaluate Entity annotation + switch (true) { + case isset($classAnnotations[Annotation\Entity::class]): + $entityAnnot = $classAnnotations[Annotation\Entity::class]; + $classBuilder = new ClassMetadataBuilder(); + + if ($entityAnnot->repositoryClass !== null) { + $builder->withCustomRepositoryClass($entityAnnot->repositoryClass); + } + + if ($entityAnnot->readOnly) { + $builder->asReadOnly(); + } + + break; + + case isset($classAnnotations[Annotation\MappedSuperclass::class]): + $mappedSuperclassAnnot = $classAnnotations[Annotation\MappedSuperclass::class]; + + $builder->withCustomRepositoryClass($mappedSuperclassAnnot->repositoryClass); + $builder->asMappedSuperClass(); + break; + + case isset($classAnnotations[Annotation\Embeddable::class]): + $builder->asEmbeddable(); + break; + + default: + throw Mapping\MappingException::classIsNotAValidEntityOrMappedSuperClass($className); + } + + return $classBuilder; + } + + /** + * {@inheritdoc} + */ + public function getAllClassNames() + { + if ($this->classNames !== null) { + return $this->classNames; + } + + $classNames = array_filter( + $this->locator->getAllClassNames(null), + function ($className) { + return ! $this->isTransient($className); + } + ); + + $this->classNames = $classNames; + + return $classNames; + } + + /** + * {@inheritdoc} + */ + public function isTransient($className) + { + $reflectionClass = new \ReflectionClass($className); + $classAnnotations = $this->reader->getClassAnnotations($reflectionClass); + + foreach ($classAnnotations as $annotation) { + if (isset(self::$entityAnnotationClasses[get_class($annotation)])) { + return false; + } + } + + return true; + } + + /** + * @param \ReflectionClass $reflectionClass + * + * @return array + */ + private function getClassAnnotations(\ReflectionClass $reflectionClass) + { + $classAnnotations = $this->reader->getClassAnnotations($reflectionClass); + + foreach ($classAnnotations as $key => $annot) { + if (! is_numeric($key)) { + continue; + } + + $classAnnotations[get_class($annot)] = $annot; + } + + return $classAnnotations; + } + + /** + * @param \ReflectionProperty $reflectionProperty + * + * @return array + */ + private function getPropertyAnnotations(\ReflectionProperty $reflectionProperty) + { + $propertyAnnotations = $this->reader->getPropertyAnnotations($reflectionProperty); + + foreach ($propertyAnnotations as $key => $annot) { + if (! is_numeric($key)) { + continue; + } + + $propertyAnnotations[get_class($annot)] = $annot; + } + + return$propertyAnnotations; + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php b/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php index 0b76d3c75e2..235b1667e68 100644 --- a/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php @@ -32,4 +32,109 @@ */ class EntityClassMetadata extends ComponentMetadata { + /** + * (Optional) The name of the custom repository class used for the entity class. + * + * @var string + */ + public $customRepositoryClassName; + + /** + * Whether this class describes the mapping of a read-only class. + * That means it is never considered for change-tracking in the UnitOfWork. + * It is a very helpful performance optimization for entities that are immutable, + * either in your domain or through the relation database (coming from a view, + * or a history table for example). + * + * @var boolean + */ + private $readOnly = false; + + /** + * READ-ONLY: The names of all subclasses (descendants). + * + * @var array + */ + public $subClasses = []; + + /** + * READ-ONLY: The named queries allowed to be called directly from Repository. + * + * @var array + */ + public $namedQueries = []; + + /** + * READ-ONLY: The named native queries allowed to be called directly from Repository. + * + * A native SQL named query definition has the following structure: + *
+     * array(
+     *     'name'               => ,
+     *     'query'              => ,
+     *     'resultClass'        => ,
+     *     'resultSetMapping'   => 
+     * )
+     * 
+ * + * @var array + */ + public $namedNativeQueries = []; + + /** + * READ-ONLY: The mappings of the results of native SQL queries. + * + * A native result mapping definition has the following structure: + *
+     * array(
+     *     'name'               => ,
+     *     'entities'           => array(),
+     *     'columns'            => array()
+     * )
+     * 
+ * + * @var array + */ + public $sqlResultSetMappings = []; + + /** + * READ-ONLY: The registered lifecycle callbacks for entities of this class. + * + * @var array + */ + public $lifecycleCallbacks = []; + + /** + * READ-ONLY: The registered entity listeners. + * + * @var array + */ + public $entityListeners = []; + + /** + * READ-ONLY: The field names of all fields that are part of the identifier/primary key + * of the mapped entity class. + * + * @var array + */ + public $identifier = []; + + /** + * READ-ONLY: The primary table metadata. + * + * @var TableMetadata + */ + public $table; + + /** + * READ-ONLY: The field which is used for versioning in optimistic locking (if any). + * + * @var FieldMetadata|null + */ + public $versionProperty = null; + + /** + * @var \Doctrine\Instantiator\InstantiatorInterface|null + */ + private $instantiator; } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php index bccd3577d22..b8043e26449 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php @@ -132,7 +132,7 @@ private function exportInitialize(ClassMetadata $metadata, int $indentationLevel $lines[] = null; } - if (! $metadata->isIdentifierComposite) { + if (! $metadata->isIdentifierComposite()) { $lines[] = $objectReference . '->setIdGeneratorType(Mapping\GeneratorType::' . strtoupper($metadata->generatorType) . ');'; $lines[] = null; } diff --git a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php index 01528301aba..d18a6722149 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php @@ -23,6 +23,7 @@ namespace Doctrine\ORM\Mapping\Factory; use Doctrine\Common\Persistence\Mapping\ClassMetadataFactory; +use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; use Doctrine\Common\Persistence\Mapping\ReflectionService; use Doctrine\Common\Util\ClassUtils; use Doctrine\ORM\Configuration\MetadataConfiguration; @@ -67,9 +68,9 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory protected $definitionFactory; /** - * @var ClassMetadataDriver + * @var MappingDriver */ - protected $metadataDriver; + protected $mappingDriver; /** * @var array @@ -88,10 +89,12 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory */ public function __construct(MetadataConfiguration $configuration) { - $driver = new ClassMetadataDriver($configuration->getMappingDriver(), $configuration->getNamingStrategy()); - $generator = new ClassMetadataGenerator($driver); + $generator = new ClassMetadataGenerator( + $configuration->getMappingDriver(), + $configuration->getNamingStrategy() + ); - $this->metadataDriver = $driver; + $this->mappingDriver = $configuration->getMappingDriver(); $this->definitionFactory = new ClassMetadataDefinitionFactory( $configuration->getResolver(), $generator, @@ -106,7 +109,7 @@ public function getAllMetadata() { $metadata = []; - foreach ($this->metadataDriver->getAllClassMetadata() as $className) { + foreach ($this->mappingDriver->getAllClassNames() as $className) { $metadata[] = $this->getMetadataFor($className); } @@ -164,7 +167,7 @@ public function setMetadataFor($className, $class) */ public function isTransient($className) { - return $this->metadataDriver->hasClassMetadata($className); + return $this->mappingDriver->isTransient($className); } /** @@ -211,7 +214,7 @@ private function getParentClassNameList(string $className) : array $parentClassNameList = []; foreach (array_reverse($reflectionService->getParentClasses($className)) as $parentClassName) { - if ($this->metadataDriver->hasClassMetadata($parentClassName)) { + if ($this->mappingDriver->isTransient($parentClassName)) { continue; } diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php index ba49bbc9c89..989e0db1aea 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php @@ -22,6 +22,7 @@ namespace Doctrine\ORM\Mapping\Factory; +use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; use Doctrine\ORM\Mapping\Builder\ClassMetadataExporter; /** @@ -34,9 +35,14 @@ class ClassMetadataGenerator { /** - * @var ClassMetadataDriver + * @var MappingDriver */ - private $metadataDriver; + protected $mappingDriver; + + /** + * @var NamingStrategy + */ + protected $namingStrategy; /** * @var ClassMetadataExporter @@ -44,15 +50,18 @@ class ClassMetadataGenerator private $metadataExporter; /** - * @param ClassMetadataDriver $metadataDriver + * @param MappingDriver $mappingDriver + * @param NamingStrategy $namingStrategy * @param ClassMetadataExporter|null $metadataExporter */ public function __construct( - ClassMetadataDriver $metadataDriver, + MappingDriver $mappingDriver, + NamingStrategy $namingStrategy, ClassMetadataExporter $metadataExporter = null ) { - $this->metadataDriver = $metadataDriver; + $this->mappingDriver = $mappingDriver; + $this->namingStrategy = $namingStrategy; $this->metadataExporter = $metadataExporter ?: new ClassMetadataExporter(); } @@ -64,8 +73,9 @@ public function __construct( */ public function generate(string $path, ClassMetadataDefinition $definition) { - $metadata = $this->metadataDriver->getClassMetadata($definition->entityClassName, $definition->parent); - $sourceCode = $this->metadataExporter->export($metadata); + $builder = $this->mappingDriver->loadMetadataForClass($definition->entityClassName, $definition->parent); + $metadata = $builder->build($this->namingStrategy); + $sourceCode = $this->metadataExporter->export($metadata); // @todo guilhermeblanco Pass class name to exporter $this->ensureDirectoryIsReady(dirname($path)); diff --git a/lib/Doctrine/ORM/PersistentCollection.php b/lib/Doctrine/ORM/PersistentCollection.php index 03e20631a49..f45765fb540 100644 --- a/lib/Doctrine/ORM/PersistentCollection.php +++ b/lib/Doctrine/ORM/PersistentCollection.php @@ -448,7 +448,7 @@ public function get($key) $this->association !== null && $this->association->getFetchMode() === FetchMode::EXTRA_LAZY && $this->association->getIndexedBy()) { - if (!$this->typeClass->isIdentifierComposite && $this->typeClass->isIdentifier($this->association->getIndexedBy())) { + if (!$this->typeClass->isIdentifierComposite() && $this->typeClass->isIdentifier($this->association->getIndexedBy())) { return $this->em->find($this->typeClass->name, $key); } diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index b801d37e2fd..2ffa08a1da5 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -2083,7 +2083,7 @@ private function getValues($value) if (is_object($value) && $this->em->getMetadataFactory()->hasMetadataFor(ClassUtils::getClass($value))) { $class = $this->em->getClassMetadata(get_class($value)); - if ($class->isIdentifierComposite) { + if ($class->isIdentifierComposite()) { $newValue = []; foreach ($class->getIdentifierValues($value) as $innerValue) { diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index 957c4e78132..53252ed6d95 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -432,14 +432,12 @@ public function addNamedNativeQueryEntityResultMapping(ClassMetadata $classMetad } } } else { - foreach ($classMetadata->fieldNames as $columnName => $propertyName) { - $property = $classMetadata->getProperty($propertyName); - + foreach ($classMetadata->getProperties() as $property) { if (! ($property instanceof FieldMetadata)) { continue; } - $this->addFieldResult($alias, $columnName, $propertyName); + $this->addFieldResult($alias, $property->getColumnName(), $property->getName()); } } diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index 058a0d5709c..d6d605041ac 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -118,7 +118,7 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage ], $this->formatTable($metadata->table), [ - $this->formatField('Composite identifier?', $metadata->isIdentifierComposite), + $this->formatField('Composite identifier?', $metadata->isIdentifierComposite()), $this->formatField('Change tracking policy', $metadata->changeTrackingPolicy), $this->formatField('Versioned?', $metadata->isVersioned()), $this->formatField('Version field', ($metadata->isVersioned() ? $metadata->versionProperty->getName() : '')), diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 259d42a8b49..739c9d047e6 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -142,7 +142,7 @@ public function exportClassMetadata(ClassMetadata $metadata) } } - if (! $metadata->isIdentifierComposite) { + if (! $metadata->isIdentifierComposite()) { $lines[] = '$metadata->setIdGeneratorType(Mapping\GeneratorType::' . $metadata->generatorType . ');'; } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 5adec363c18..2dae0c2f38d 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -2757,7 +2757,7 @@ public function createEntity($className, array $data, &$hints = []) // If this is an uninitialized proxy, we are deferring eager loads, // this association is marked as eager fetch, and its an uninitialized proxy (wtf!) // then we can append this entity for eager loading! - if (!$targetClass->isIdentifierComposite && + if (!$targetClass->isIdentifierComposite() && $newValue instanceof Proxy && isset($hints[self::HINT_DEFEREAGERLOAD]) && $hints['fetchMode'][$class->name][$field] === FetchMode::EAGER && @@ -2788,7 +2788,7 @@ public function createEntity($className, array $data, &$hints = []) break; // Deferred eager load only works for single identifier classes - case (isset($hints[self::HINT_DEFEREAGERLOAD]) && !$targetClass->isIdentifierComposite): + case (isset($hints[self::HINT_DEFEREAGERLOAD]) && !$targetClass->isIdentifierComposite()): // TODO: Is there a faster approach? $this->eagerLoadingEntities[$targetClass->rootEntityName][$relatedIdHash] = current($associatedId); @@ -2960,7 +2960,7 @@ public function getSingleIdentifierValue($entity) { $class = $this->em->getClassMetadata(get_class($entity)); - if ($class->isIdentifierComposite) { + if ($class->isIdentifierComposite()) { throw ORMInvalidArgumentException::invalidCompositeIdentifier(); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 8a5019eed3c..208f46d7eb7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -289,12 +289,24 @@ public function testSetInvalidVersionMapping_ThrowsException() public function testGetSingleIdentifierFieldName_MultipleIdentifierEntity_ThrowsException() { - $cm = new ClassMetadata(CMS\CmsUser::class); - $cm->initializeReflection(new RuntimeReflectionService()); - $cm->isIdentifierComposite = true; + $metadata = new ClassMetadata(CMS\CmsUser::class); + $metadata->initializeReflection(new RuntimeReflectionService()); + + $fieldMetadata = new Mapping\FieldMetadata('name'); + $fieldMetadata->setType(Type::getType('string')); + + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('username'); + $fieldMetadata->setType(Type::getType('string')); + + $metadata->addProperty($fieldMetadata); + + $metadata->setIdentifier(['name', 'username']); $this->expectException(MappingException::class); - $cm->getSingleIdentifierFieldName(); + + $metadata->getSingleIdentifierFieldName(); } public function testGetSingleIdentifierFieldName_NoIdEntity_ThrowsException() @@ -639,7 +651,7 @@ public function testSetMultipleIdentifierSetsComposite() $metadata->addProperty($fieldMetadata); $metadata->setIdentifier(['name', 'username']); - self::assertTrue($metadata->isIdentifierComposite); + self::assertTrue($metadata->isIdentifierComposite()); } /** From 5062d75855bdb8fc2c79c4eb88c362cf37b7499b Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sun, 7 May 2017 21:31:57 -0400 Subject: [PATCH 138/275] Quick rename --- lib/Doctrine/ORM/UnitOfWork.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 2dae0c2f38d..8fdcaf1bc07 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -231,7 +231,7 @@ class UnitOfWork implements PropertyChangedListener * * @var array */ - private $persisters = []; + private $entityPersisters = []; /** * The collection persister instances used to persist collections. @@ -2420,7 +2420,8 @@ public function getCommitOrderCalculator() */ public function clear() { - $this->persisters = + $this->entityPersisters = + $this->collectionPersisters = $this->eagerLoadingEntities = $this->identityMap = $this->entityIdentifiers = @@ -3036,8 +3037,8 @@ public function size() */ public function getEntityPersister($entityName) { - if (isset($this->persisters[$entityName])) { - return $this->persisters[$entityName]; + if (isset($this->entityPersisters[$entityName])) { + return $this->entityPersisters[$entityName]; } $class = $this->em->getClassMetadata($entityName); @@ -3066,9 +3067,9 @@ public function getEntityPersister($entityName) ->buildCachedEntityPersister($this->em, $persister, $class); } - $this->persisters[$entityName] = $persister; + $this->entityPersisters[$entityName] = $persister; - return $this->persisters[$entityName]; + return $this->entityPersisters[$entityName]; } /** @@ -3325,7 +3326,7 @@ private function performCallbackOnCachedPersister(callable $callback) return; } - foreach (array_merge($this->persisters, $this->collectionPersisters) as $persister) { + foreach (array_merge($this->entityPersisters, $this->collectionPersisters) as $persister) { if ($persister instanceof CachedPersister) { $callback($persister); } From a8201665e5eb0461637f5eff20d4152ce761d5d4 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 26 May 2017 23:53:06 -0400 Subject: [PATCH 139/275] Work on ClassMetadataFactory. Updated ProxyFactory reducing dependencies --- .../ORM/Internal/Hydration/ObjectHydrator.php | 2 +- .../Builder/AssociationMetadataBuilder.php | 2 +- .../Mapping/Builder/FieldMetadataBuilder.php | 2 +- .../MappedSuperClassMetadataBuilder.php | 126 ++ lib/Doctrine/ORM/Mapping/ClassMetadata.php | 6 +- .../ORM/Mapping/ComponentMetadata.php | 32 +- .../ORM/Mapping/Driver/AnnotationDriver.php | 2 +- .../Mapping/Driver/NewAnnotationDriver.php | 1085 ++++++++++++++++- .../ORM/Mapping/EntityClassMetadata.php | 111 +- .../Factory/AbstractClassMetadataFactory.php | 19 +- .../Mapping/Factory/ClassMetadataDriver.php | 88 -- .../Factory/ClassMetadataGenerator.php | 11 +- .../ORM/Mapping/MappedSuperClassMetadata.php | 35 +- lib/Doctrine/ORM/Mapping/MappingException.php | 10 +- lib/Doctrine/ORM/Proxy/ProxyFactory.php | 36 +- lib/Doctrine/ORM/UnitOfWork.php | 4 - .../Tests/ORM/Proxy/ProxyFactoryTest.php | 70 +- 17 files changed, 1411 insertions(+), 230 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/Builder/MappedSuperClassMetadataBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDriver.php diff --git a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php index f06be7ddf70..5a5120c9071 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php @@ -283,7 +283,7 @@ private function getEntityFromIdentityMap($className, array $data) $class = $this->metadataCache[$className]; $id = $this->identifierFlattener->flattenIdentifier($class, $data); - return $this->uow->tryGetByIdHash(implode(' ', $id), $class->rootEntityName); + return $this->uow->tryGetById($id, $class->rootEntityName); } /** diff --git a/lib/Doctrine/ORM/Mapping/Builder/AssociationMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/AssociationMetadataBuilder.php index 358ed7a7462..a5641bb342a 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/AssociationMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/AssociationMetadataBuilder.php @@ -168,7 +168,7 @@ public function withOrphanRemoval(bool $orphanRemoval) * * @return self */ - public function withCache(CacheMetadata $cache = null) + public function withCache(?CacheMetadata $cache) { $this->cache = $cache; diff --git a/lib/Doctrine/ORM/Mapping/Builder/FieldMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/FieldMetadataBuilder.php index ce279f2a2f9..aa53ccbbd2d 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/FieldMetadataBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Builder/FieldMetadataBuilder.php @@ -31,7 +31,7 @@ class FieldMetadataBuilder extends LocalColumnMetadataBuilder /** @var string */ protected $name; - /** @var */ + /** @var NamingStrategy */ private $namingStrategy; public function __construct(NamingStrategy $namingStrategy = null) diff --git a/lib/Doctrine/ORM/Mapping/Builder/MappedSuperClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/MappedSuperClassMetadataBuilder.php new file mode 100644 index 00000000000..5d4dbd4dc6e --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Builder/MappedSuperClassMetadataBuilder.php @@ -0,0 +1,126 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Builder; + +use Doctrine\ORM\Mapping\CacheMetadata; +use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\Factory\NamingStrategy; +use Doctrine\ORM\Mapping\MappedSuperClassMetadata; +use Doctrine\ORM\Mapping\Property; + +class MappedSuperClassMetadataBuilder +{ + /** @var string */ + private $className; + + /** @var null|MappedSuperClassMetadata */ + private $parent = null; + + /** @var null|CacheMetadata */ + private $cache = null; + + /** @var null|string */ + private $customRepositoryClass; + + /** @var array */ + private $properties = []; + + /** @var NamingStrategy */ + private $namingStrategy; + + public function __construct(?NamingStrategy $namingStrategy = null) + { + $this->namingStrategy = $namingStrategy ?: new DefaultNamingStrategy(); + } + + /** + * @param string $className + * + * @return self + */ + public function withClassName(string $className) + { + $this->className = $className; + + return $this; + } + + /** + * @param null|MappedSuperClassMetadata $parent + * + * @return self + */ + public function withParent(?MappedSuperClassMetadata $parent) + { + $this->parent = $parent; + + return $this; + } + + /** + * @param null|CacheMetadata $cache + * + * @return self + */ + public function withCache(?CacheMetadata $cache) + { + $this->cache = $cache; + + return $this; + } + + /** + * @param null|string $customRepositoryClass + * + * @return self + */ + public function withCustomRepositoryClass(?string $customRepositoryClass) + { + $this->customRepositoryClass = $customRepositoryClass; + + return $this; + } + + /** + * @param Property $property + * + * @return self + */ + public function addProperty(Property $property) + { + $this->properties[$property->getName()] = $property; + + return $this; + } + + public function build() + { + $mappedSuperClassMetadata = new MappedSuperClassMetadata($this->className, $this->parent); + + $mappedSuperClassMetadata->setCache($this->cache); + $mappedSuperClassMetadata->setCustomRepositoryClass($this->customRepositoryClass); + + foreach ($this->properties as $property) { + $mappedSuperClassMetadata->addDeclaredProperty($property); + } + + return $mappedSuperClassMetadata; + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 4f599bdf51c..58c10ad0f66 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1896,10 +1896,6 @@ public function addEntityListener($eventName, $class, $method) */ public function setDiscriminatorColumn(DiscriminatorColumnMetadata $discriminatorColumn) { - if (empty($discriminatorColumn->getColumnName())) { - throw MappingException::nameIsMandatoryForDiscriminatorColumns($this->name); - } - if (isset($this->fieldNames[$discriminatorColumn->getColumnName()])) { throw MappingException::duplicateColumnName($this->name, $discriminatorColumn->getColumnName()); } @@ -2159,7 +2155,7 @@ public function inlineEmbeddable($property, ClassMetadata $embeddable) private function assertPropertyNotMapped(string $fieldName) { if (isset($this->properties[$fieldName])) { - throw MappingException::duplicateProperty($this, $this->properties[$fieldName]); + throw MappingException::duplicateProperty($this->getName(), $this->properties[$fieldName]); } // if (isset($this->embeddedClasses[$fieldName])) { diff --git a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php index 68613996dc8..9155aa67644 100644 --- a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php @@ -121,13 +121,15 @@ public function getDeclaredPropertiesIterator() : \Iterator /** * @param Property $property + * + * @throws MappingException */ public function addDeclaredProperty(Property $property) { $propertyName = $property->getName(); - if (isset($this->declaredProperties[$propertyName])) { - return; + if ($this->hasProperty($propertyName)) { + throw MappingException::duplicateProperty($this->getClassName(), $this->getProperty($propertyName)); } $property->setDeclaringClass($this); @@ -171,28 +173,32 @@ public function getPropertiesIterator() : \Iterator /** * @param string $propertyName * - * @return bool + * @return null|Property */ - public function hasProperty(string $propertyName) : bool + public function getProperty(string $propertyName) : ?Property { if (isset($this->declaredProperties[$propertyName])) { - return true; + return $this->declaredProperties[$propertyName]; } - return $this->parent && $this->parent->hasProperty($propertyName); + if ($this->parent) { + return $this->parent->getProperty($propertyName); + } + + return null; } /** - * Handles component metadata clone nicely. + * @param string $propertyName + * + * @return bool */ - public function __clone() + public function hasProperty(string $propertyName) : bool { - if ($this->cache) { - $this->cache = clone $this->cache; + if (isset($this->declaredProperties[$propertyName])) { + return true; } - foreach ($this->declaredProperties as $name => $property) { - $this->declaredProperties[$name] = clone $property; - } + return $this->parent && $this->parent->hasProperty($propertyName); } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index d089160a8dc..e4846008087 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -210,7 +210,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat } } - // Evaluate DoctrineChangeTrackingPolicy annotation + // Evaluate @ChangeTrackingPolicy annotation if (isset($classAnnotations[Annotation\ChangeTrackingPolicy::class])) { $changeTrackingAnnot = $classAnnotations[Annotation\ChangeTrackingPolicy::class]; diff --git a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php index f5c24d52b4e..c9d4f63d057 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php @@ -23,8 +23,11 @@ use Doctrine\Common\Persistence\Mapping\ClassMetadata; use Doctrine\Common\Persistence\Mapping\Driver\FileLocator; use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Annotation; -use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; +use Doctrine\ORM\Events; +use Doctrine\ORM\Mapping; +use Doctrine\ORM\Mapping\Factory; class NewAnnotationDriver implements MappingDriver { @@ -47,6 +50,11 @@ class NewAnnotationDriver implements MappingDriver */ protected $locator; + /** + * @var Factory\NamingStrategy + */ + protected $namingStrategy; + /** * Cache for AnnotationDriver#getAllClassNames(). * @@ -57,57 +65,61 @@ class NewAnnotationDriver implements MappingDriver /** * Initializes a new AnnotationDriver that uses the given AnnotationReader for reading docblock annotations. * - * @param AnnotationReader $reader The AnnotationReader to use, duck-typed. - * @param FileLocator $locator A FileLocator or one/multiple paths where mapping documents can be found. + * @param AnnotationReader $reader The AnnotationReader to use, duck-typed. + * @param FileLocator $locator A FileLocator or one/multiple paths where mapping documents can be found. + * @param Factory\NamingStrategy $namingStrategy The NamingStrategy to use. */ - public function __construct(AnnotationReader $reader, FileLocator $locator) + public function __construct(AnnotationReader $reader, FileLocator $locator, Factory\NamingStrategy $namingStrategy) { - $this->reader = $reader; - $this->locator = $locator; + $this->reader = $reader; + $this->locator = $locator; + $this->namingStrategy = $namingStrategy; } /** * {@inheritdoc} + * + * @throws Mapping\MappingException */ public function loadMetadataForClass($className, ClassMetadata $metadata) { // IMPORTANT: We're handling $metadata as "parent" metadata here, while building the $className ClassMetadata. $reflectionClass = new \ReflectionClass($className); - $classAnnotations = $this->getClassAnnotations($reflectionClass); - $classBuilder = null; - // Evaluate Entity annotation - switch (true) { - case isset($classAnnotations[Annotation\Entity::class]): - $entityAnnot = $classAnnotations[Annotation\Entity::class]; - $classBuilder = new ClassMetadataBuilder(); - - if ($entityAnnot->repositoryClass !== null) { - $builder->withCustomRepositoryClass($entityAnnot->repositoryClass); - } + // Evaluate annotations on class metadata + $classAnnotations = $this->getClassAnnotations($reflectionClass); + $classMetadata = $this->convertClassAnnotationsToClassMetadata( + $classAnnotations, + $reflectionClass, + $metadata + ); - if ($entityAnnot->readOnly) { - $builder->asReadOnly(); - } + // Evaluate @Cache annotation + if (isset($classAnnotations[Annotation\Cache::class])) { + $cacheAnnot = $classAnnotations[Annotation\Cache::class]; + $cache = $this->convertCacheAnnotationToCacheMetadata($cacheAnnot, $classMetadata); - break; - - case isset($classAnnotations[Annotation\MappedSuperclass::class]): - $mappedSuperclassAnnot = $classAnnotations[Annotation\MappedSuperclass::class]; + $classMetadata->setCache($cache); + } - $builder->withCustomRepositoryClass($mappedSuperclassAnnot->repositoryClass); - $builder->asMappedSuperClass(); - break; + // Evaluate annotations on properties/fields + /* @var \ReflectionProperty $reflectionProperty */ + foreach ($reflectionClass->getProperties() as $reflectionProperty) { + if ($reflectionProperty->getDeclaringClass()->name !== $reflectionClass->getName()) { + continue; + } - case isset($classAnnotations[Annotation\Embeddable::class]): - $builder->asEmbeddable(); - break; + $propertyAnnotations = $this->getPropertyAnnotations($reflectionProperty); + $property = $this->convertReflectionPropertyAnnotationsToProperty( + $reflectionProperty, + $propertyAnnotations, + $classMetadata + ); - default: - throw Mapping\MappingException::classIsNotAValidEntityOrMappedSuperClass($className); + $classMetadata->addDeclaredProperty($property); } - return $classBuilder; + return $classMetadata; } /** @@ -148,6 +160,991 @@ public function isTransient($className) return true; } + /** + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $parent + * + * @return Mapping\ClassMetadata|Mapping\ComponentMetadata + * + * @throws Mapping\MappingException + */ + private function convertClassAnnotationsToClassMetadata( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $parent + ) + { + switch (true) { + case isset($classAnnotations[Annotation\Entity::class]): + return $this->convertClassAnnotationsToEntityClassMetadata( + $classAnnotations, + $reflectionClass, + $parent + ); + + break; + + case isset($classAnnotations[Annotation\MappedSuperclass::class]): + return $this->convertClassAnnotationsToMappedSuperClassMetadata( + $classAnnotations, + $reflectionClass, + $parent + ); + + case isset($classAnnotations[Annotation\Embeddable::class]): + return $this->convertClassAnnotationsToEntityClassMetadata( + $classAnnotations, + $reflectionClass, + $parent + ); + + default: + throw Mapping\MappingException::classIsNotAValidEntityOrMappedSuperClass($reflectionClass->getName()); + } + } + + /** + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $parent + * + * @return Mapping\ClassMetadata + * + * @throws Mapping\MappingException + * @throws \UnexpectedValueException + */ + private function convertClassAnnotationsToEntityClassMetadata( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $parent + ) + { + /** @var Annotation\Entity $entityAnnot */ + $entityAnnot = $classAnnotations[Annotation\Entity::class]; + $classMetadata = new Mapping\ClassMetadata($reflectionClass->getName(), $parent); + + if ($entityAnnot->repositoryClass !== null) { + $classMetadata->setCustomRepositoryClass($entityAnnot->repositoryClass); + } + + if ($entityAnnot->readOnly) { + $classMetadata->asReadOnly(); + } + + // Evaluate @Table annotation + if (isset($classAnnotations[Annotation\Table::class])) { + /** @var Annotation\Table $tableAnnot */ + $tableAnnot = $classAnnotations[Annotation\Table::class]; + $table = $this->convertTableAnnotationToTableMetadata($tableAnnot); + + $classMetadata->setTable($table); + } + + // Evaluate @ChangeTrackingPolicy annotation + if (isset($classAnnotations[Annotation\ChangeTrackingPolicy::class])) { + /** @var Annotation\ChangeTrackingPolicy $changeTrackingAnnot */ + $changeTrackingAnnot = $classAnnotations[Annotation\ChangeTrackingPolicy::class]; + + $classMetadata->setChangeTrackingPolicy( + constant(sprintf('%s::%s', Mapping\ChangeTrackingPolicy::class, $changeTrackingAnnot->value)) + ); + } + + // Evaluate @NamedNativeQueries annotation + if (isset($classAnnotations[Annotation\NamedNativeQueries::class])) { + /** @var Annotation\NamedNativeQueries $namedNativeQueriesAnnot */ + $namedNativeQueriesAnnot = $classAnnotations[Annotation\NamedNativeQueries::class]; + + foreach ($namedNativeQueriesAnnot->value as $namedNativeQuery) { + $classMetadata->addNamedNativeQuery([ + 'name' => $namedNativeQuery->name, + 'query' => $namedNativeQuery->query, + 'resultClass' => $namedNativeQuery->resultClass, + 'resultSetMapping' => $namedNativeQuery->resultSetMapping, + ]); + } + } + + // Evaluate @SqlResultSetMappings annotation + if (isset($classAnnotations[Annotation\SqlResultSetMappings::class])) { + /** @var Annotation\SqlResultSetMappings $sqlResultSetMappingsAnnot */ + $sqlResultSetMappingsAnnot = $classAnnotations[Annotation\SqlResultSetMappings::class]; + + foreach ($sqlResultSetMappingsAnnot->value as $resultSetMapping) { + $sqlResultSetMapping = $this->convertSqlResultSetMapping($resultSetMapping); + + $classMetadata->addSqlResultSetMapping($sqlResultSetMapping); + } + } + + // Evaluate @NamedQueries annotation + if (isset($classAnnotations[Annotation\NamedQueries::class])) { + /** @var Annotation\NamedQueries $namedQueriesAnnot */ + $namedQueriesAnnot = $classAnnotations[Annotation\NamedQueries::class]; + + if (! is_array($namedQueriesAnnot->value)) { + throw new \UnexpectedValueException("@NamedQueries should contain an array of @NamedQuery annotations."); + } + + foreach ($namedQueriesAnnot->value as $namedQuery) { + if (! ($namedQuery instanceof Annotation\NamedQuery)) { + throw new \UnexpectedValueException("@NamedQueries should contain an array of @NamedQuery annotations."); + } + + $classMetadata->addNamedQuery([ + 'name' => $namedQuery->name, + 'query' => $namedQuery->query, + ]); + } + } + + // Evaluate @EntityListeners annotation + if (isset($classAnnotations[Annotation\EntityListeners::class])) { + /** @var Annotation\EntityListeners $entityListenersAnnot */ + $entityListenersAnnot = $classAnnotations[Annotation\EntityListeners::class]; + + foreach ($entityListenersAnnot->value as $item) { + $listenerClassName = $classMetadata->fullyQualifiedClassName($item); + + if (! class_exists($listenerClassName)) { + throw Mapping\MappingException::entityListenerClassNotFound( + $listenerClassName, + $reflectionClass->getName() + ); + } + + $listenerClass = new \ReflectionClass($listenerClassName); + + /* @var $method \ReflectionMethod */ + foreach ($listenerClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { + foreach ($this->getMethodCallbacks($method) as $callback) { + $classMetadata->addEntityListener($callback, $listenerClassName, $method->getName()); + } + } + } + } + + // Evaluate @HasLifecycleCallbacks annotation + if (isset($classAnnotations[Annotation\HasLifecycleCallbacks::class])) { + /* @var $method \ReflectionMethod */ + foreach ($reflectionClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { + foreach ($this->getMethodCallbacks($method) as $callback) { + $classMetadata->addLifecycleCallback($method->getName(), $callback); + } + } + } + + // Evaluate @InheritanceType annotation + if (isset($classAnnotations[Annotation\InheritanceType::class])) { + /** @var Annotation\InheritanceType $inheritanceTypeAnnot */ + $inheritanceTypeAnnot = $classAnnotations[Annotation\InheritanceType::class]; + + $classMetadata->setInheritanceType( + constant(sprintf('%s::%s', Mapping\InheritanceType::class, $inheritanceTypeAnnot->value)) + ); + + if ($classMetadata->inheritanceType !== Mapping\InheritanceType::NONE) { + $discriminatorColumn = new Mapping\DiscriminatorColumnMetadata(); + + // Evaluate @DiscriminatorColumn annotation + if (isset($classAnnotations[Annotation\DiscriminatorColumn::class])) { + /** @var Annotation\DiscriminatorColumn $discriminatorColumnAnnot */ + $discriminatorColumnAnnot = $classAnnotations[Annotation\DiscriminatorColumn::class]; + + $discriminatorColumn->setColumnName($discriminatorColumnAnnot->name); + + if (! empty($discriminatorColumnAnnot->columnDefinition)) { + $discriminatorColumn->setColumnDefinition($discriminatorColumnAnnot->columnDefinition); + } + + if (! empty($discriminatorColumnAnnot->type)) { + $discriminatorColumn->setType(Type::getType($discriminatorColumnAnnot->type)); + } + + if (! empty($discriminatorColumnAnnot->length)) { + $discriminatorColumn->setLength($discriminatorColumnAnnot->length); + } + } + + if (empty($discriminatorColumn->getColumnName())) { + throw Mapping\MappingException::nameIsMandatoryForDiscriminatorColumns($reflectionClass->getName()); + } + + $classMetadata->setDiscriminatorColumn($discriminatorColumn); + + // Evaluate @DiscriminatorMap annotation + if (isset($classAnnotations[Annotation\DiscriminatorMap::class])) { + /** @var Annotation\DiscriminatorMap $discriminatorMapAnnotation */ + $discriminatorMapAnnotation = $classAnnotations[Annotation\DiscriminatorMap::class]; + + $classMetadata->setDiscriminatorMap($discriminatorMapAnnotation->value); + } + } + } + + return $classMetadata; + } + + /** + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $parent + * + * @return Mapping\MappedSuperClassMetadata + */ + private function convertClassAnnotationsToMappedSuperClassMetadata( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $parent + ) + { + /** @var Annotation\MappedSuperclass $mappedSuperclassAnnot */ + $mappedSuperclassAnnot = $classAnnotations[Annotation\MappedSuperclass::class]; + $classMetadata = new Mapping\MappedSuperClassMetadata($reflectionClass->getName(), $parent); + + if ($mappedSuperclassAnnot->repositoryClass !== null) { + $classMetadata->setCustomRepositoryClass($mappedSuperclassAnnot->repositoryClass); + } + + return $classMetadata; + } + + /** + * Parse the given Table as TableMetadata + * + * @param Annotation\Table $tableAnnot + * + * @return Mapping\TableMetadata + */ + private function convertTableAnnotationToTableMetadata(Annotation\Table $tableAnnot) + { + $table = new Mapping\TableMetadata(); + + if (! empty($tableAnnot->name)) { + $table->setName($tableAnnot->name); + } + + if (! empty($tableAnnot->schema)) { + $table->setSchema($tableAnnot->schema); + } + + foreach ($tableAnnot->options as $optionName => $optionValue) { + $table->addOption($optionName, $optionValue); + } + + foreach ($tableAnnot->indexes as $indexAnnot) { + $table->addIndex([ + 'name' => $indexAnnot->name, + 'columns' => $indexAnnot->columns, + 'unique' => $indexAnnot->unique, + 'options' => $indexAnnot->options, + 'flags' => $indexAnnot->flags, + ]); + } + + foreach ($tableAnnot->uniqueConstraints as $uniqueConstraintAnnot) { + $table->addUniqueConstraint([ + 'name' => $uniqueConstraintAnnot->name, + 'columns' => $uniqueConstraintAnnot->columns, + 'options' => $uniqueConstraintAnnot->options, + 'flags' => $uniqueConstraintAnnot->flags, + ]); + } + + return $table; + } + + /** + * @param Annotation\SqlResultSetMapping $resultSetMapping + * + * @return array + */ + private function convertSqlResultSetMapping(Annotation\SqlResultSetMapping $resultSetMapping) + { + $entities = []; + + foreach ($resultSetMapping->entities as $entityResultAnnot) { + $entityResult = [ + 'fields' => [], + 'entityClass' => $entityResultAnnot->entityClass, + 'discriminatorColumn' => $entityResultAnnot->discriminatorColumn, + ]; + + foreach ($entityResultAnnot->fields as $fieldResultAnnot) { + $entityResult['fields'][] = [ + 'name' => $fieldResultAnnot->name, + 'column' => $fieldResultAnnot->column + ]; + } + + $entities[] = $entityResult; + } + + $columns = []; + + foreach ($resultSetMapping->columns as $columnResultAnnot) { + $columns[] = [ + 'name' => $columnResultAnnot->name, + ]; + } + + return [ + 'name' => $resultSetMapping->name, + 'entities' => $entities, + 'columns' => $columns + ]; + } + + /** + * Parse the given Cache as CacheMetadata + * + * @param Annotation\Cache $cacheAnnot + * @param Mapping\ClassMetadata $metadata + * @param null|string $fieldName + * + * @return Mapping\CacheMetadata + */ + private function convertCacheAnnotationToCacheMetadata( + Annotation\Cache $cacheAnnot, + Mapping\ClassMetadata $metadata, + $fieldName = null + ) + { + $usage = constant(sprintf('%s::%s', Mapping\CacheUsage::class, $cacheAnnot->usage)); + $baseRegion = strtolower(str_replace('\\', '_', $metadata->rootEntityName)); + $defaultRegion = $baseRegion . ($fieldName ? '__' . $fieldName : ''); + + return new Mapping\CacheMetadata($usage, $cacheAnnot->region ?: $defaultRegion); + } + + /** + * @param \ReflectionProperty $reflectionProperty + * @param array $propertyAnnotations + * @param Mapping\ClassMetadata $classMetadata + * + * @return Mapping\Property + * + * @throws Mapping\MappingException + */ + private function convertReflectionPropertyAnnotationsToProperty( + \ReflectionProperty $reflectionProperty, + array $propertyAnnotations, + Mapping\ClassMetadata $classMetadata + ) + { + // Field can only be annotated with one of: + // @Column, @OneToOne, @OneToMany, @ManyToOne, @ManyToMany, @Embedded + switch (true) { + case isset($propertyAnnotations[Annotation\Column::class]): + return $this->convertReflectionPropertyToFieldMetadata( + $reflectionProperty, + $propertyAnnotations, + $classMetadata + ); + + case isset($propertyAnnotations[Annotation\OneToOne::class]): + return $this->convertReflectionPropertyToOneToOneAssociationMetadata( + $reflectionProperty, + $propertyAnnotations, + $classMetadata + ); + + case isset($propertyAnnotations[Annotation\ManyToOne::class]): + return $this->convertReflectionPropertyToManyToOneAssociationMetadata( + $reflectionProperty, + $propertyAnnotations, + $classMetadata + ); + + case isset($propertyAnnotations[Annotation\OneToMany::class]): + return $this->convertReflectionPropertyToOneToManyAssociationMetadata( + $reflectionProperty, + $propertyAnnotations, + $classMetadata + ); + + case isset($propertyAnnotations[Annotation\ManyToMany::class]): + return $this->convertReflectionPropertyToManyToManyAssociationMetadata( + $reflectionProperty, + $propertyAnnotations, + $classMetadata + ); + + case isset($propertyAnnotations[Annotation\Embedded::class]): + // @todo guilhermeblanco Implement later... =) + break; + + default: + return new Mapping\TransientMetadata($reflectionProperty->getName()); + } + } + + /** + * @param \ReflectionProperty $reflectionProperty + * @param array $propertyAnnotations + * @param Mapping\ClassMetadata $classMetadata + * + * @return Mapping\FieldMetadata + * + * @throws Mapping\MappingException + */ + private function convertReflectionPropertyToFieldMetadata( + \ReflectionProperty $reflectionProperty, + array $propertyAnnotations, + Mapping\ClassMetadata $classMetadata + ) + { + $className = $classMetadata->getName(); + $fieldName = $reflectionProperty->getName(); + $columnAnnot = $propertyAnnotations[Annotation\Column::class]; + $isVersioned = isset($propertyAnnotations[Annotation\Version::class]); + $isPrimaryKey = isset($propertyAnnotations[Annotation\Id::class]); + + if ($columnAnnot->type === null) { + throw Mapping\MappingException::propertyTypeIsRequired($className, $fieldName); + } + + if ($isVersioned && $isPrimaryKey) { + throw Mapping\MappingException::cannotVersionIdField($className, $fieldName); + } + + $columnName = empty($columnAnnot->name) + ? $this->namingStrategy->propertyToColumnName($fieldName, $className) + : $columnAnnot->name + ; + + $fieldMetadata = $isVersioned + ? new Mapping\VersionFieldMetadata($fieldName) + : new Mapping\FieldMetadata($fieldName) + ; + + $fieldMetadata->setType(Type::getType($columnAnnot->type)); + $fieldMetadata->setColumnName($columnName); + $fieldMetadata->setScale($columnAnnot->scale); + $fieldMetadata->setPrecision($columnAnnot->precision); + $fieldMetadata->setNullable($columnAnnot->nullable); + $fieldMetadata->setUnique($columnAnnot->unique); + + // Check for Id + if ($isPrimaryKey) { + if ($fieldMetadata->getType()->canRequireSQLConversion()) { + throw Mapping\MappingException::sqlConversionNotAllowedForPrimaryKeyProperties($className, $fieldMetadata); + }; + + $fieldMetadata->setPrimaryKey(true); + } + + if (! empty($columnAnnot->columnDefinition)) { + $fieldMetadata->setColumnDefinition($columnAnnot->columnDefinition); + } + + if (! empty($columnAnnot->length)) { + $fieldMetadata->setLength($columnAnnot->length); + } + + // Assign default options + $customOptions = $columnAnnot->options ?? []; + $defaultOptions = []; + + if ($isVersioned) { + switch ($fieldMetadata->getTypeName()) { + case 'integer': + case 'bigint': + case 'smallint': + $defaultOptions['default'] = 1; + break; + + case 'datetime': + $defaultOptions['default'] = 'CURRENT_TIMESTAMP'; + break; + + default: + if (! isset($customOptions['default'])) { + throw Mapping\MappingException::unsupportedOptimisticLockingType($fieldMetadata->getType()); + } + } + } + + $fieldMetadata->setOptions(array_merge($defaultOptions, $customOptions)); + + return $fieldMetadata; + } + + /** + * @param \ReflectionProperty $reflectionProperty + * @param array $propertyAnnotations + * @param Mapping\ClassMetadata $classMetadata + * + * @return Mapping\OneToOneAssociationMetadata + */ + private function convertReflectionPropertyToOneToOneAssociationMetadata( + \ReflectionProperty $reflectionProperty, + array $propertyAnnotations, + Mapping\ClassMetadata $classMetadata + ) + { + $className = $classMetadata->getName(); + $fieldName = $reflectionProperty->getName(); + $oneToOneAnnot = $propertyAnnotations[Annotation\OneToOne::class]; + + if ($oneToOneAnnot->targetEntity === null) { + throw Mapping\MappingException::missingTargetEntity($fieldName); + } + + $assocMetadata = new Mapping\OneToOneAssociationMetadata($fieldName); + $targetEntity = ltrim($classMetadata->fullyQualifiedClassName($oneToOneAnnot->targetEntity), '\\'); + + $assocMetadata->setSourceEntity($className); + $assocMetadata->setTargetEntity($targetEntity); + $assocMetadata->setCascade($this->getCascade($className, $fieldName, $oneToOneAnnot->cascade)); + $assocMetadata->setOrphanRemoval($oneToOneAnnot->orphanRemoval); + $assocMetadata->setFetchMode($this->getFetchMode($className, $oneToOneAnnot->fetch)); + + if (! empty($oneToOneAnnot->mappedBy)) { + $assocMetadata->setMappedBy($oneToOneAnnot->mappedBy); + } + + if (! empty($oneToOneAnnot->inversedBy)) { + $assocMetadata->setInversedBy($oneToOneAnnot->inversedBy); + } + + // Check for Id + if (isset($propertyAnnotations[Annotation\Id::class])) { + $assocMetadata->setPrimaryKey(true); + } + + // Check for Cache + if (isset($propertyAnnotations[Annotation\Cache::class])) { + $cacheAnnot = $propertyAnnotations[Annotation\Cache::class]; + $cacheMetadata = $this->convertCacheAnnotationToCacheMetadata($cacheAnnot, $classMetadata, $fieldName); + + $assocMetadata->setCache($cacheMetadata); + } + + // Check for JoinColumn/JoinColumns annotations + switch (true) { + case isset($propertyAnnotations[Annotation\JoinColumn::class]): + $joinColumnAnnot = $propertyAnnotations[Annotation\JoinColumn::class]; + $joinColumn = $this->convertJoinColumnAnnotationToJoinColumnMetadata( + $reflectionProperty, + $joinColumnAnnot, + $classMetadata + ); + + $assocMetadata->addJoinColumn($joinColumn); + + break; + + case isset($propertyAnnotations[Annotation\JoinColumns::class]): + $joinColumnsAnnot = $propertyAnnotations[Annotation\JoinColumns::class]; + + foreach ($joinColumnsAnnot->value as $joinColumnAnnot) { + $joinColumn = $this->convertJoinColumnAnnotationToJoinColumnMetadata( + $reflectionProperty, + $joinColumnAnnot, + $classMetadata + ); + + $assocMetadata->addJoinColumn($joinColumn); + } + + break; + } + + return $assocMetadata; + } + + /** + * @param \ReflectionProperty $reflectionProperty + * @param array $propertyAnnotations + * @param Mapping\ClassMetadata $classMetadata + * + * @return Mapping\ManyToOneAssociationMetadata + */ + private function convertReflectionPropertyToManyToOneAssociationMetadata( + \ReflectionProperty $reflectionProperty, + array $propertyAnnotations, + Mapping\ClassMetadata $classMetadata + ) + { + $className = $classMetadata->getName(); + $fieldName = $reflectionProperty->getName(); + $manyToOneAnnot = $propertyAnnotations[Annotation\ManyToOne::class]; + + if ($manyToOneAnnot->targetEntity === null) { + throw Mapping\MappingException::missingTargetEntity($fieldName); + } + + $assocMetadata = new Mapping\ManyToOneAssociationMetadata($fieldName); + $targetEntity = ltrim($classMetadata->fullyQualifiedClassName($manyToOneAnnot->targetEntity), '\\'); + + $assocMetadata->setSourceEntity($className); + $assocMetadata->setTargetEntity($targetEntity); + $assocMetadata->setCascade($this->getCascade($className, $fieldName, $manyToOneAnnot->cascade)); + $assocMetadata->setFetchMode($this->getFetchMode($className, $manyToOneAnnot->fetch)); + + if (! empty($manyToOneAnnot->inversedBy)) { + $assocMetadata->setInversedBy($manyToOneAnnot->inversedBy); + } + + // Check for Id + if (isset($propertyAnnotations[Annotation\Id::class])) { + $assocMetadata->setPrimaryKey(true); + } + + // Check for Cache + if (isset($propertyAnnotations[Annotation\Cache::class])) { + $cacheAnnot = $propertyAnnotations[Annotation\Cache::class]; + $cacheMetadata = $this->convertCacheAnnotationToCacheMetadata($cacheAnnot, $classMetadata, $fieldName); + + $assocMetadata->setCache($cacheMetadata); + } + + // Check for JoinColumn/JoinColumns annotations + switch (true) { + case isset($propertyAnnotations[Annotation\JoinColumn::class]): + $joinColumnAnnot = $propertyAnnotations[Annotation\JoinColumn::class]; + $joinColumn = $this->convertJoinColumnAnnotationToJoinColumnMetadata( + $reflectionProperty, + $joinColumnAnnot, + $classMetadata + ); + + $assocMetadata->addJoinColumn($joinColumn); + + break; + + case isset($propertyAnnotations[Annotation\JoinColumns::class]): + $joinColumnsAnnot = $propertyAnnotations[Annotation\JoinColumns::class]; + + foreach ($joinColumnsAnnot->value as $joinColumnAnnot) { + $joinColumn = $this->convertJoinColumnAnnotationToJoinColumnMetadata( + $reflectionProperty, + $joinColumnAnnot, + $classMetadata + ); + + $assocMetadata->addJoinColumn($joinColumn); + } + + break; + } + + return $assocMetadata; + } + + /** + * @param \ReflectionProperty $reflectionProperty + * @param array $propertyAnnotations + * @param Mapping\ClassMetadata $classMetadata + * + * @return Mapping\OneToManyAssociationMetadata + */ + private function convertReflectionPropertyToOneToManyAssociationMetadata( + \ReflectionProperty $reflectionProperty, + array $propertyAnnotations, + Mapping\ClassMetadata $classMetadata + ) + { + $className = $classMetadata->getName(); + $fieldName = $reflectionProperty->getName(); + $oneToManyAnnot = $propertyAnnotations[Annotation\OneToMany::class]; + + if ($oneToManyAnnot->targetEntity === null) { + throw Mapping\MappingException::missingTargetEntity($fieldName); + } + + $assocMetadata = new Mapping\OneToManyAssociationMetadata($fieldName); + $targetEntity = ltrim($classMetadata->fullyQualifiedClassName($oneToManyAnnot->targetEntity), '\\'); + + $assocMetadata->setSourceEntity($className); + $assocMetadata->setTargetEntity($targetEntity); + $assocMetadata->setCascade($this->getCascade($className, $fieldName, $oneToManyAnnot->cascade)); + $assocMetadata->setOrphanRemoval($oneToManyAnnot->orphanRemoval); + $assocMetadata->setFetchMode($this->getFetchMode($className, $oneToManyAnnot->fetch)); + + if (! empty($oneToManyAnnot->mappedBy)) { + $assocMetadata->setMappedBy($oneToManyAnnot->mappedBy); + } + + if (! empty($oneToManyAnnot->indexBy)) { + $assocMetadata->setIndexedBy($oneToManyAnnot->indexBy); + } + + // Check for OrderBy + if (isset($propertyAnnotations[Annotation\OrderBy::class])) { + $orderByAnnot = $propertyAnnotations[Annotation\OrderBy::class]; + + $assocMetadata->setOrderBy($orderByAnnot->value); + } + + // Check for Id + if (isset($propertyAnnotations[Annotation\Id::class])) { + $assocMetadata->setPrimaryKey(true); + } + + // Check for Cache + if (isset($propertyAnnotations[Annotation\Cache::class])) { + $cacheAnnot = $propertyAnnotations[Annotation\Cache::class]; + $cacheMetadata = $this->convertCacheAnnotationToCacheMetadata($cacheAnnot, $classMetadata, $fieldName); + + $assocMetadata->setCache($cacheMetadata); + } + + return $assocMetadata; + } + + /** + * @param \ReflectionProperty $reflectionProperty + * @param array $propertyAnnotations + * @param Mapping\ClassMetadata $classMetadata + * + * @return Mapping\ManyToManyAssociationMetadata + */ + private function convertReflectionPropertyToManyToManyAssociationMetadata( + \ReflectionProperty $reflectionProperty, + array $propertyAnnotations, + Mapping\ClassMetadata $classMetadata + ) + { + $className = $classMetadata->getName(); + $fieldName = $reflectionProperty->getName(); + $manyToManyAnnot = $propertyAnnotations[Annotation\ManyToMany::class]; + + if ($manyToManyAnnot->targetEntity === null) { + throw Mapping\MappingException::missingTargetEntity($fieldName); + } + + $assocMetadata = new Mapping\ManyToManyAssociationMetadata($fieldName); + $targetEntity = ltrim($classMetadata->fullyQualifiedClassName($manyToManyAnnot->targetEntity), '\\'); + + $assocMetadata->setSourceEntity($className); + $assocMetadata->setTargetEntity($targetEntity); + $assocMetadata->setCascade($this->getCascade($className, $fieldName, $manyToManyAnnot->cascade)); + $assocMetadata->setOrphanRemoval($manyToManyAnnot->orphanRemoval); + $assocMetadata->setFetchMode($this->getFetchMode($className, $manyToManyAnnot->fetch)); + + if (! empty($manyToManyAnnot->mappedBy)) { + $assocMetadata->setMappedBy($manyToManyAnnot->mappedBy); + } + + if (! empty($manyToManyAnnot->inversedBy)) { + $assocMetadata->setInversedBy($manyToManyAnnot->inversedBy); + } + + if (! empty($manyToManyAnnot->indexBy)) { + $assocMetadata->setIndexedBy($manyToManyAnnot->indexBy); + } + + // Check for JoinTable + if (isset($propertyAnnotations[Annotation\JoinTable::class])) { + $joinTableAnnot = $propertyAnnotations[Annotation\JoinTable::class]; + $joinTableMetadata = $this->convertJoinTableAnnotationToJoinTableMetadata( + $reflectionProperty, + $joinTableAnnot, + $classMetadata + ); + + $assocMetadata->setJoinTable($joinTableMetadata); + } + + // Check for OrderBy + if (isset($propertyAnnotations[Annotation\OrderBy::class])) { + $orderByAnnot = $propertyAnnotations[Annotation\OrderBy::class]; + + $assocMetadata->setOrderBy($orderByAnnot->value); + } + + // Check for Id + if (isset($propertyAnnotations[Annotation\Id::class])) { + $assocMetadata->setPrimaryKey(true); + } + + // Check for Cache + if (isset($propertyAnnotations[Annotation\Cache::class])) { + $cacheAnnot = $propertyAnnotations[Annotation\Cache::class]; + $cacheMetadata = $this->convertCacheAnnotationToCacheMetadata($cacheAnnot, $classMetadata, $fieldName); + + $assocMetadata->setCache($cacheMetadata); + } + + return $assocMetadata; + } + + /** + * Parse the given JoinTable as JoinTableMetadata + * + * @param \ReflectionProperty $reflectionProperty + * @param Annotation\JoinTable $joinTableAnnot + * @param Mapping\ClassMetadata $classMetadata + * + * @return Mapping\JoinTableMetadata + */ + private function convertJoinTableAnnotationToJoinTableMetadata( + \ReflectionProperty $reflectionProperty, + Annotation\JoinTable $joinTableAnnot, + Mapping\ClassMetadata $classMetadata + ) + { + $joinTable = new Mapping\JoinTableMetadata(); + + if (! empty($joinTableAnnot->name)) { + $joinTable->setName($joinTableAnnot->name); + } + + if (! empty($joinTableAnnot->schema)) { + $joinTable->setSchema($joinTableAnnot->schema); + } + + foreach ($joinTableAnnot->joinColumns as $joinColumnAnnot) { + $joinColumn = $this->convertJoinColumnAnnotationToJoinColumnMetadata( + $reflectionProperty, + $joinColumnAnnot, + $classMetadata + ); + + $joinTable->addJoinColumn($joinColumn); + } + + foreach ($joinTableAnnot->inverseJoinColumns as $joinColumnAnnot) { + $joinColumn = $this->convertJoinColumnAnnotationToJoinColumnMetadata( + $reflectionProperty, + $joinColumnAnnot, + $classMetadata + ); + + $joinTable->addInverseJoinColumn($joinColumn); + } + + return $joinTable; + } + + /** + * Parse the given JoinColumn as JoinColumnMetadata + * + * @param Annotation\JoinColumn $joinColumnAnnot + * + * @return Mapping\JoinColumnMetadata + */ + private function convertJoinColumnAnnotationToJoinColumnMetadata( + \ReflectionProperty $reflectionProperty, + Annotation\JoinColumn $joinColumnAnnot, + Mapping\ClassMetadata $classMetadata + ) + { + $fieldName = $reflectionProperty->getName(); + $joinColumn = new Mapping\JoinColumnMetadata(); + $columnName = empty($joinColumnAnnot->name) + ? $this->namingStrategy->propertyToColumnName($fieldName, $classMetadata->getName()) + : $joinColumnAnnot->name + ; + $referencedColumnName = empty($joinColumnAnnot->referencedColumnName) + ? $this->namingStrategy->referenceColumnName() + : $joinColumnAnnot->referencedColumnName + ; + + $joinColumn->setColumnName($columnName); + $joinColumn->setReferencedColumnName($referencedColumnName); + $joinColumn->setNullable($joinColumnAnnot->nullable); + $joinColumn->setUnique($joinColumnAnnot->unique); + + if (! empty($joinColumnAnnot->fieldName)) { + $joinColumn->setAliasedName($joinColumnAnnot->fieldName); + } + + if (! empty($joinColumnAnnot->columnDefinition)) { + $joinColumn->setColumnDefinition($joinColumnAnnot->columnDefinition); + } + + if ($joinColumnAnnot->onDelete) { + $joinColumn->setOnDelete(strtoupper($joinColumnAnnot->onDelete)); + } + + return $joinColumn; + } + + /** + * Parses the given method. + * + * @param \ReflectionMethod $method + * + * @return array + */ + private function getMethodCallbacks(\ReflectionMethod $method) + { + $annotations = $this->getMethodAnnotations($method); + $events = [ + Events::prePersist => Annotation\PrePersist::class, + Events::postPersist => Annotation\PostPersist::class, + Events::preUpdate => Annotation\PreUpdate::class, + Events::postUpdate => Annotation\PostUpdate::class, + Events::preRemove => Annotation\PreRemove::class, + Events::postRemove => Annotation\PostRemove::class, + Events::postLoad => Annotation\PostLoad::class, + Events::preFlush => Annotation\PreFlush::class, + ]; + + // Check for callbacks + $callbacks = []; + + foreach ($events as $eventName => $annotationClassName) { + if (isset($annotations[$annotationClassName]) || $method->getName() === $eventName) { + $callbacks[] = $eventName; + } + } + + return $callbacks; + } + + /** + * Attempts to resolve the fetch mode. + * + * @param string $className The class name. + * @param string $fetchMode The fetch mode. + * + * @return integer The fetch mode as defined in ClassMetadata. + * + * @throws Mapping\MappingException If the fetch mode is not valid. + */ + private function getFetchMode($className, $fetchMode) + { + $fetchModeConstant = sprintf('%s::%s', Mapping\FetchMode::class, $fetchMode); + + if (! defined($fetchModeConstant)) { + throw Mapping\MappingException::invalidFetchMode($className, $fetchMode); + } + + return constant($fetchModeConstant); + } + + /** + * @param string $className The class name. + * @param string $fieldName The field name. + * @param array $originalCascades The original unprocessed field cascades. + * + * @return array The processed field cascades. + * + * @throws Mapping\MappingException If a cascade option is not valid. + */ + private function getCascade(string $className, string $fieldName, array $originalCascades) + { + $cascadeTypes = ['remove', 'persist', 'refresh', 'merge', 'detach']; + $cascades = array_map('strtolower', $originalCascades); + + if (in_array('all', $cascades)) { + $cascades = $cascadeTypes; + } + + if (count($cascades) !== count(array_intersect($cascades, $cascadeTypes))) { + $diffCascades = array_diff($cascades, array_intersect($cascades, $cascadeTypes)); + + throw Mapping\MappingException::invalidCascadeOption($diffCascades, $className, $fieldName); + } + + return $cascades; + } + /** * @param \ReflectionClass $reflectionClass * @@ -185,6 +1182,26 @@ private function getPropertyAnnotations(\ReflectionProperty $reflectionProperty) $propertyAnnotations[get_class($annot)] = $annot; } - return$propertyAnnotations; + return $propertyAnnotations; + } + + /** + * @param \ReflectionMethod $reflectionMethod + * + * @return array + */ + private function getMethodAnnotations(\ReflectionMethod $reflectionMethod) + { + $methodAnnotations = $this->reader->getMethodAnnotations($reflectionMethod); + + foreach ($methodAnnotations as $key => $annot) { + if (! is_numeric($key)) { + continue; + } + + $methodAnnotations[get_class($annot)] = $annot; + } + + return $methodAnnotations; } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php b/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php index 235b1667e68..aa7caf9268d 100644 --- a/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php @@ -33,11 +33,14 @@ class EntityClassMetadata extends ComponentMetadata { /** - * (Optional) The name of the custom repository class used for the entity class. - * - * @var string + * @var null|string The name of the custom repository class used for the entity class. + */ + protected $customRepositoryClassName; + + /** + * @var null|Property The field which is used for versioning in optimistic locking (if any). */ - public $customRepositoryClassName; + protected $declaredVersion = null; /** * Whether this class describes the mapping of a read-only class. @@ -48,21 +51,21 @@ class EntityClassMetadata extends ComponentMetadata * * @var boolean */ - private $readOnly = false; + protected $readOnly = false; /** * READ-ONLY: The names of all subclasses (descendants). * * @var array */ - public $subClasses = []; + protected $subClasses = []; /** * READ-ONLY: The named queries allowed to be called directly from Repository. * * @var array */ - public $namedQueries = []; + protected $namedQueries = []; /** * READ-ONLY: The named native queries allowed to be called directly from Repository. @@ -79,7 +82,7 @@ class EntityClassMetadata extends ComponentMetadata * * @var array */ - public $namedNativeQueries = []; + protected $namedNativeQueries = []; /** * READ-ONLY: The mappings of the results of native SQL queries. @@ -95,21 +98,21 @@ class EntityClassMetadata extends ComponentMetadata * * @var array */ - public $sqlResultSetMappings = []; + protected $sqlResultSetMappings = []; /** * READ-ONLY: The registered lifecycle callbacks for entities of this class. * * @var array */ - public $lifecycleCallbacks = []; + protected $lifecycleCallbacks = []; /** * READ-ONLY: The registered entity listeners. * * @var array */ - public $entityListeners = []; + protected $entityListeners = []; /** * READ-ONLY: The field names of all fields that are part of the identifier/primary key @@ -117,24 +120,96 @@ class EntityClassMetadata extends ComponentMetadata * * @var array */ - public $identifier = []; + protected $identifier = []; /** * READ-ONLY: The primary table metadata. * * @var TableMetadata */ - public $table; + protected $table; + + /** + * @var \Doctrine\Instantiator\InstantiatorInterface|null + */ + protected $instantiator; /** - * READ-ONLY: The field which is used for versioning in optimistic locking (if any). + * MappedSuperClassMetadata constructor. * - * @var FieldMetadata|null + * @param string $className + * @param ComponentMetadata|null $parent */ - public $versionProperty = null; + public function __construct(string $className, ?ComponentMetadata $parent = null) + { + parent::__construct($className, $parent); + } /** - * @var \Doctrine\Instantiator\InstantiatorInterface|null + * @return null|string + */ + public function getCustomRepositoryClassName() : ?string + { + return $this->customRepositoryClassName; + } + + /** + * @param null|string customRepositoryClassName + */ + public function setCustomRepositoryClassName(?string $customRepositoryClassName) + { + $this->customRepositoryClassName = $customRepositoryClassName; + } + + /** + * @return Property|null */ - private $instantiator; + public function getDeclaredVersion() : ?Property + { + return $this->declaredVersion; + } + + /** + * @param Property $property + */ + public function setDeclaredVersion(Property $property) + { + $this->declaredVersion = $property; + } + + /** + * @return Property|null + */ + public function getVersion() : ?Property + { + /** @var ComponentMetadata|null $parent */ + $parent = $this->parent; + $version = $this->declaredVersion; + + if ($parent && ! $version) { + $version = $parent->getVersion(); + } + + return $version; + } + + /** + * @return bool + */ + public function isVersioned() : bool + { + return $this->getVersion() !== null; + } + + /** + * {@inheritdoc} + */ + public function addDeclaredProperty(Property $property) + { + parent::addDeclaredProperty($property); + + if ($property instanceof VersionFieldMetadata) { + $this->setDeclaredVersion($property); + } + } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php index d18a6722149..f8fe0297d41 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php @@ -89,17 +89,14 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory */ public function __construct(MetadataConfiguration $configuration) { - $generator = new ClassMetadataGenerator( - $configuration->getMappingDriver(), - $configuration->getNamingStrategy() - ); - - $this->mappingDriver = $configuration->getMappingDriver(); - $this->definitionFactory = new ClassMetadataDefinitionFactory( - $configuration->getResolver(), - $generator, - $configuration->getAutoGenerate() - ); + $mappingDriver = $configuration->getMappingDriver(); + $resolver = $configuration->getResolver(); + $autoGenerate = $configuration->getAutoGenerate(); + $generator = new ClassMetadataGenerator($mappingDriver); + $definitionFactory = new ClassMetadataDefinitionFactory($resolver, $generator, $autoGenerate); + + $this->mappingDriver = $mappingDriver; + $this->definitionFactory = $definitionFactory; } /** diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDriver.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDriver.php deleted file mode 100644 index c2bc61bfa28..00000000000 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDriver.php +++ /dev/null @@ -1,88 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Factory; - -use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; -use Doctrine\Common\Persistence\Mapping\ReflectionService; -use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadata; - -/** - * Class metadata driver works as a middle layer between MappingDriver and ClassMetadataFactory. - * - * @todo guilhermeblanco Remove this class once MappingDriver gets properly updated. - * - * @package Doctrine\ORM\Mapping\Factory - * @since 3.0 - * - * @author Guilherme Blanco - */ -class ClassMetadataDriver -{ - /** - * @var MappingDriver - */ - private $mappingDriver; - - /** - * @var NamingStrategy - */ - protected $namingStrategy; - - public function __construct(MappingDriver $mappingDriver, NamingStrategy $namingStrategy) - { - $this->mappingDriver = $mappingDriver; - $this->namingStrategy = $namingStrategy; - } - - /** - * @return array - */ - public function getAllClassMetadata() : array - { - return $this->mappingDriver->getAllClassNames(); - } - - /** - * @param string $className - * @param ClassMetadata|null $parent - * - * @return ClassMetadata - */ - public function getClassMetadata(string $className, ?ClassMetadata $parent) - { - $builder = $this->mappingDriver->loadMetadataForClass($className, $parent); - - return $builder->build($this->namingStrategy); - } - - /** - * @param string $className - * - * @return bool - */ - public function hasClassMetadata(string $className) : bool - { - return $this->mappingDriver->isTransient($className); - } -} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php index 989e0db1aea..351be7fd520 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php @@ -39,11 +39,6 @@ class ClassMetadataGenerator */ protected $mappingDriver; - /** - * @var NamingStrategy - */ - protected $namingStrategy; - /** * @var ClassMetadataExporter */ @@ -51,17 +46,14 @@ class ClassMetadataGenerator /** * @param MappingDriver $mappingDriver - * @param NamingStrategy $namingStrategy * @param ClassMetadataExporter|null $metadataExporter */ public function __construct( MappingDriver $mappingDriver, - NamingStrategy $namingStrategy, ClassMetadataExporter $metadataExporter = null ) { $this->mappingDriver = $mappingDriver; - $this->namingStrategy = $namingStrategy; $this->metadataExporter = $metadataExporter ?: new ClassMetadataExporter(); } @@ -73,8 +65,7 @@ public function __construct( */ public function generate(string $path, ClassMetadataDefinition $definition) { - $builder = $this->mappingDriver->loadMetadataForClass($definition->entityClassName, $definition->parent); - $metadata = $builder->build($this->namingStrategy); + $metadata = $this->mappingDriver->loadMetadataForClass($definition->entityClassName, $definition->parent); $sourceCode = $this->metadataExporter->export($metadata); // @todo guilhermeblanco Pass class name to exporter $this->ensureDirectoryIsReady(dirname($path)); diff --git a/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php b/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php index 9a7e0601fa6..27b52283c07 100644 --- a/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php @@ -33,7 +33,12 @@ class MappedSuperClassMetadata extends ComponentMetadata { /** - * @var Property + * @var null|string + */ + protected $customRepositoryClassName; + + /** + * @var null|Property */ protected $declaredVersion; @@ -48,6 +53,22 @@ public function __construct(string $className, ?MappedSuperClassMetadata $parent parent::__construct($className, $parent); } + /** + * @return null|string + */ + public function getCustomRepositoryClassName() : ?string + { + return $this->customRepositoryClassName; + } + + /** + * @param null|string customRepositoryClassName + */ + public function setCustomRepositoryClassName(?string $customRepositoryClassName) + { + $this->customRepositoryClassName = $customRepositoryClassName; + } + /** * @return Property|null */ @@ -87,4 +108,16 @@ public function isVersioned() : bool { return $this->getVersion() !== null; } + + /** + * {@inheritdoc} + */ + public function addDeclaredProperty(Property $property) + { + parent::addDeclaredProperty($property); + + if ($property instanceof VersionFieldMetadata) { + $this->setDeclaredVersion($property); + } + } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/MappingException.php b/lib/Doctrine/ORM/Mapping/MappingException.php index 7263219b47b..73ffafe748a 100644 --- a/lib/Doctrine/ORM/Mapping/MappingException.php +++ b/lib/Doctrine/ORM/Mapping/MappingException.php @@ -397,16 +397,17 @@ public static function tableIdGeneratorNotImplemented($className) } /** + * @param string $className * @param Property $property * * @return MappingException */ - public static function duplicateProperty(ClassMetadata $metadata, Property $property) + public static function duplicateProperty($className, Property $property) { return new self(sprintf( 'Property "%s" in "%s" was already declared in "%s", but it must be declared only once', $property->getName(), - $metadata->getName(), + $className, $property->getDeclaringClass()->getName() )); } @@ -567,18 +568,19 @@ public static function cannotVersionIdField($className, $fieldName) } /** + * @param string $className * @param Property $property * * @return MappingException */ - public static function sqlConversionNotAllowedForPrimaryKeyProperties(Property $property) + public static function sqlConversionNotAllowedForPrimaryKeyProperties($className, Property $property) { return new self(sprintf( 'It is not possible to set id field "%s" to type "%s" in entity class "%s". ' . 'The type "%s" requires conversion SQL which is not allowed for identifiers.', $property->getName(), $property->getTypeName(), - $property->getDeclaringClass()->getName(), + $className, $property->getTypeName() )); } diff --git a/lib/Doctrine/ORM/Proxy/ProxyFactory.php b/lib/Doctrine/ORM/Proxy/ProxyFactory.php index 9aa8c621c15..9be43aa9886 100644 --- a/lib/Doctrine/ORM/Proxy/ProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/ProxyFactory.php @@ -42,11 +42,6 @@ */ class ProxyFactory extends AbstractProxyFactory { - /** - * @var EntityManagerInterface The EntityManager this factory is bound to. - */ - private $em; - /** * @var \Doctrine\ORM\UnitOfWork The UnitOfWork this factory uses to retrieve persisters */ @@ -79,7 +74,6 @@ public function __construct(EntityManagerInterface $em, ProxyConfiguration $conf parent::__construct($proxyGenerator, $em->getMetadataFactory(), $configuration->getAutoGenerate()); - $this->em = $em; $this->uow = $em->getUnitOfWork(); $this->proxyNs = $configuration->getNamespace(); $this->identifierFlattener = new IdentifierFlattener($this->uow, $em->getMetadataFactory()); @@ -99,33 +93,30 @@ protected function skipClass(ClassMetadata $metadata) */ protected function createProxyDefinition($className) { - $classMetadata = $this->em->getClassMetadata($className); $entityPersister = $this->uow->getEntityPersister($className); + $classMetadata = $entityPersister->getClassMetadata(); return new ProxyDefinition( ClassUtils::generateProxyClassName($className, $this->proxyNs), $classMetadata->getIdentifierFieldNames(), $classMetadata->getProperties(), - $this->createInitializer($classMetadata, $entityPersister), - $this->createCloner($classMetadata, $entityPersister) + $this->createInitializer($entityPersister), + $this->createCloner($entityPersister) ); } /** * Creates a closure capable of initializing a proxy * - * @param \Doctrine\ORM\Mapping\ClassMetadata $classMetadata * @param \Doctrine\ORM\Persisters\Entity\EntityPersister $entityPersister * * @return \Closure * * @throws \Doctrine\ORM\EntityNotFoundException */ - private function createInitializer(ClassMetadata $classMetadata, EntityPersister $entityPersister) + private function createInitializer(EntityPersister $entityPersister) { - $wakeupProxy = $classMetadata->getReflectionClass()->hasMethod('__wakeup'); - - return function (BaseProxy $proxy) use ($entityPersister, $classMetadata, $wakeupProxy) { + return function (BaseProxy $proxy) use ($entityPersister) { $initializer = $proxy->__getInitializer(); $cloner = $proxy->__getCloner(); @@ -146,11 +137,12 @@ private function createInitializer(ClassMetadata $classMetadata, EntityPersister $proxy->__setInitialized(true); - if ($wakeupProxy) { + if (method_exists($proxy, '__wakeup')) { $proxy->__wakeup(); } - $identifier = $classMetadata->getIdentifierValues($proxy); + $classMetadata = $entityPersister->getClassMetadata(); + $identifier = $classMetadata->getIdentifierValues($proxy); if (null === $entityPersister->loadById($identifier, $proxy)) { $proxy->__setInitializer($initializer); @@ -175,9 +167,9 @@ private function createInitializer(ClassMetadata $classMetadata, EntityPersister * * @throws \Doctrine\ORM\EntityNotFoundException */ - private function createCloner(ClassMetadata $classMetadata, EntityPersister $entityPersister) + private function createCloner(EntityPersister $entityPersister) { - return function (BaseProxy $proxy) use ($entityPersister, $classMetadata) { + return function (BaseProxy $proxy) use ($entityPersister) { if ($proxy->__isInitialized()) { return; } @@ -185,9 +177,9 @@ private function createCloner(ClassMetadata $classMetadata, EntityPersister $ent $proxy->__setInitialized(true); $proxy->__setInitializer(null); - $class = $entityPersister->getClassMetadata(); - $identifier = $classMetadata->getIdentifierValues($proxy); - $original = $entityPersister->loadById($identifier); + $classMetadata = $entityPersister->getClassMetadata(); + $identifier = $classMetadata->getIdentifierValues($proxy); + $original = $entityPersister->loadById($identifier); if (null === $original) { throw EntityNotFoundException::fromClassNameAndIdentifier( @@ -196,7 +188,7 @@ private function createCloner(ClassMetadata $classMetadata, EntityPersister $ent ); } - foreach ($class->getProperties() as $property) { + foreach ($classMetadata->getProperties() as $property) { /** @var Property $property */ $property->setValue($proxy, $property->getValue($original)); } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 8fdcaf1bc07..42a85b0c4a5 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -19,10 +19,8 @@ namespace Doctrine\ORM; -use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\Common\NotifyPropertyChanged; -use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\Common\Persistence\ObjectManagerAware; use Doctrine\Common\PropertyChangedListener; use Doctrine\DBAL\LockMode; @@ -55,10 +53,8 @@ use Doctrine\ORM\Persisters\Entity\JoinedSubclassPersister; use Doctrine\ORM\Persisters\Entity\SingleTablePersister; use Doctrine\ORM\Proxy\Proxy; -use Doctrine\ORM\Query\AST\Join; use Doctrine\ORM\Sequencing\AssignedGenerator; use Doctrine\ORM\Utility\IdentifierFlattener; -use Doctrine\ORM\Utility\PersisterHelper; use Exception; use InvalidArgumentException; use UnexpectedValueException; diff --git a/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php b/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php index 524848e33e7..42e51d238b3 100644 --- a/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php @@ -70,11 +70,14 @@ public function testReferenceProxyDelegatesLoadingToThePersister() { $identifier = ['id' => 42]; $proxyClass = 'Proxies\__CG__\Doctrine\Tests\Models\ECommerce\ECommerceFeature'; - $persister = $this->getMockBuilder(BasicEntityPersister::class)->setMethods(['load'])->disableOriginalConstructor()->getMock(); - $this->uowMock->setEntityPersister(ECommerceFeature::class, $persister); + $classMetaData = $this->emMock->getClassMetadata(ECommerceFeature::class); - $proxy = $this->proxyFactory->getProxy(ECommerceFeature::class, $identifier); + $persister = $this + ->getMockBuilder(BasicEntityPersister::class) + ->setMethods(['load', 'getClassMetadata']) + ->disableOriginalConstructor() + ->getMock(); $persister ->expects($this->atLeastOnce()) @@ -82,6 +85,15 @@ public function testReferenceProxyDelegatesLoadingToThePersister() ->with($this->equalTo($identifier), $this->isInstanceOf($proxyClass)) ->will($this->returnValue(new \stdClass())); + $persister + ->expects(self::any()) + ->method('getClassMetadata') + ->willReturn($classMetaData); + + $this->uowMock->setEntityPersister(ECommerceFeature::class, $persister); + + $proxy = $this->proxyFactory->getProxy(ECommerceFeature::class, $identifier); + $proxy->getDescription(); } @@ -92,6 +104,7 @@ public function testSkipAbstractClassesOnGeneration() { $cm = new ClassMetadata(AbstractClass::class); $cm->initializeReflection(new RuntimeReflectionService()); + self::assertNotNull($cm->getReflectionClass()); $num = $this->proxyFactory->generateProxyClasses([$cm]); @@ -104,17 +117,29 @@ public function testSkipAbstractClassesOnGeneration() */ public function testFailedProxyLoadingDoesNotMarkTheProxyAsInitialized() { - $persister = $this->getMockBuilder(BasicEntityPersister::class)->setMethods(['load'])->disableOriginalConstructor()->getMock(); - $this->uowMock->setEntityPersister(ECommerceFeature::class, $persister); + $classMetaData = $this->emMock->getClassMetadata(ECommerceFeature::class); - /* @var $proxy \Doctrine\Common\Proxy\Proxy */ - $proxy = $this->proxyFactory->getProxy(ECommerceFeature::class, ['id' => 42]); + $persister = $this + ->getMockBuilder(BasicEntityPersister::class) + ->setMethods(['load', 'getClassMetadata']) + ->disableOriginalConstructor() + ->getMock(); $persister ->expects($this->atLeastOnce()) ->method('load') ->will($this->returnValue(null)); + $persister + ->expects(self::any()) + ->method('getClassMetadata') + ->willReturn($classMetaData); + + $this->uowMock->setEntityPersister(ECommerceFeature::class, $persister); + + /* @var $proxy \Doctrine\Common\Proxy\Proxy */ + $proxy = $this->proxyFactory->getProxy(ECommerceFeature::class, ['id' => 42]); + try { $proxy->getDescription(); $this->fail('An exception was expected to be raised'); @@ -131,17 +156,29 @@ public function testFailedProxyLoadingDoesNotMarkTheProxyAsInitialized() */ public function testFailedProxyCloningDoesNotMarkTheProxyAsInitialized() { - $persister = $this->getMockBuilder(BasicEntityPersister::class)->setMethods(['load'])->disableOriginalConstructor()->getMock(); - $this->uowMock->setEntityPersister(ECommerceFeature::class, $persister); + $classMetaData = $this->emMock->getClassMetadata(ECommerceFeature::class); - /* @var $proxy \Doctrine\Common\Proxy\Proxy */ - $proxy = $this->proxyFactory->getProxy(ECommerceFeature::class, ['id' => 42]); + $persister = $this + ->getMockBuilder(BasicEntityPersister::class) + ->setMethods(['load', 'getClassMetadata']) + ->disableOriginalConstructor() + ->getMock(); $persister ->expects($this->atLeastOnce()) ->method('load') ->will($this->returnValue(null)); + $persister + ->expects(self::any()) + ->method('getClassMetadata') + ->willReturn($classMetaData); + + $this->uowMock->setEntityPersister(ECommerceFeature::class, $persister); + + /* @var $proxy \Doctrine\Common\Proxy\Proxy */ + $proxy = $this->proxyFactory->getProxy(ECommerceFeature::class, ['id' => 42]); + try { $cloned = clone $proxy; $this->fail('An exception was expected to be raised'); @@ -172,10 +209,6 @@ public function testProxyClonesParentFields() ->setMethods(['load', 'getClassMetadata']) ->disableOriginalConstructor() ->getMock(); - $this->uowMock->setEntityPersister(CompanyEmployee::class, $persister); - - /* @var $proxy \Doctrine\Common\Proxy\Proxy */ - $proxy = $this->proxyFactory->getProxy(CompanyEmployee::class, ['id' => 42]); $persister ->expects(self::atLeastOnce()) @@ -183,10 +216,15 @@ public function testProxyClonesParentFields() ->willReturn($companyEmployee); $persister - ->expects(self::atLeastOnce()) + ->expects(self::any()) ->method('getClassMetadata') ->willReturn($classMetaData); + $this->uowMock->setEntityPersister(CompanyEmployee::class, $persister); + + /* @var $proxy \Doctrine\Common\Proxy\Proxy */ + $proxy = $this->proxyFactory->getProxy(CompanyEmployee::class, ['id' => 42]); + /* @var $cloned CompanyEmployee */ $cloned = clone $proxy; From d2e4d77ee06c91eb6b6a6e7195402a76a9d6c216 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sun, 18 Jun 2017 23:15:18 -0400 Subject: [PATCH 140/275] Refactored Proxy support --- lib/Doctrine/ORM/Configuration.php | 9 +- .../ORM/Configuration/ProxyConfiguration.php | 28 +- lib/Doctrine/ORM/EntityManager.php | 8 +- lib/Doctrine/ORM/EntityManagerInterface.php | 2 +- .../ORM/Internal/Hydration/ObjectHydrator.php | 2 +- .../Mapping/AbstractClassMetadataFactory.php | 4 +- .../ORM/Mapping/AssociationMetadata.php | 14 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 4 +- .../ORM/Mapping/ClassMetadataFactory.php | 4 +- .../ORM/Mapping/EmbeddedClassMetadata.php | 4 +- .../Factory/AbstractClassMetadataFactory.php | 2 +- .../ORM/Mapping/Factory/Autoloader.php | 8 +- .../Mapping/Factory/ClassMetadataResolver.php | 4 +- .../Factory/DefaultClassMetadataResolver.php | 20 +- .../Factory/RuntimeClassMetadataFactory.php | 2 +- .../Factory/StaticClassMetadataFactory.php | 2 +- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 5 +- lib/Doctrine/ORM/Mapping/Property.php | 10 +- .../ORM/Mapping/TransientMetadata.php | 12 +- lib/Doctrine/ORM/Proxy/Factory/Autoloader.php | 109 +++ .../Proxy/Factory/DefaultProxyResolver.php | 74 ++ .../ORM/Proxy/Factory/ProxyDefinition.php | 207 ++++ .../Proxy/Factory/ProxyDefinitionFactory.php | 128 +++ .../ProxyException.php} | 15 +- .../ORM/Proxy/Factory/ProxyFactory.php | 83 ++ .../ORM/Proxy/Factory/ProxyGenerator.php | 896 ++++++++++++++++++ .../ORM/Proxy/Factory/ProxyResolver.php | 48 + .../ORM/Proxy/Factory/StaticProxyFactory.php | 145 +++ lib/Doctrine/ORM/Proxy/Proxy.php | 31 +- lib/Doctrine/ORM/Proxy/ProxyFactory.php | 197 ---- .../ORM/Reflection/ReflectionService.php | 90 ++ .../RuntimePublicReflectionProperty.php | 77 ++ .../Reflection/RuntimeReflectionService.php | 103 ++ .../Reflection/StaticReflectionService.php | 88 ++ .../DisconnectedClassMetadataFactory.php | 4 +- lib/Doctrine/ORM/UnitOfWork.php | 20 +- .../Performance/EntityManagerFactory.php | 4 +- .../Tests/Mocks/EntityManagerMock.php | 6 +- .../Doctrine/Tests/ORM/EntityManagerTest.php | 3 +- .../ORM/Functional/BasicFunctionalTest.php | 4 +- .../ORM/Functional/DefaultValuesTest.php | 4 +- .../ORM/Functional/DetachedEntityTest.php | 6 +- .../OneToManyBidirectionalAssociationTest.php | 4 +- .../Functional/ProxiesLikeEntitiesTest.php | 38 +- .../Tests/ORM/Functional/QueryTest.php | 2 +- .../ORM/Functional/ReferenceProxyTest.php | 67 +- .../ORM/Functional/Ticket/DDC1193Test.php | 2 +- .../ORM/Functional/Ticket/DDC1228Test.php | 4 +- .../ORM/Functional/Ticket/DDC2230Test.php | 8 +- .../ORM/Functional/Ticket/DDC2231Test.php | 11 +- .../ORM/Functional/Ticket/DDC237Test.php | 4 +- .../ORM/Functional/Ticket/DDC2494Test.php | 2 +- .../ORM/Functional/Ticket/DDC522Test.php | 2 +- .../ORM/Functional/Ticket/DDC633Test.php | 2 +- .../ORM/Hydration/ResultSetMappingTest.php | 3 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 2 +- .../ORM/Mapping/AnnotationDriverTest.php | 2 +- .../Mapping/BasicInheritanceMappingTest.php | 3 +- .../Builder/ClassMetadataBuilderTest.php | 2 +- .../Builder/TableMetadataBuilderTest.php | 5 - .../ORM/Mapping/ClassMetadataFactoryTest.php | 9 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 4 +- .../ORM/Mapping/XmlMappingDriverTest.php | 4 +- .../Tests/ORM/Proxy/ProxyFactoryTest.php | 19 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 2 +- 65 files changed, 2314 insertions(+), 373 deletions(-) create mode 100644 lib/Doctrine/ORM/Proxy/Factory/Autoloader.php create mode 100644 lib/Doctrine/ORM/Proxy/Factory/DefaultProxyResolver.php create mode 100644 lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php create mode 100644 lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php rename lib/Doctrine/ORM/Proxy/{Autoloader.php => Factory/ProxyException.php} (80%) create mode 100644 lib/Doctrine/ORM/Proxy/Factory/ProxyFactory.php create mode 100644 lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php create mode 100644 lib/Doctrine/ORM/Proxy/Factory/ProxyResolver.php create mode 100644 lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php delete mode 100644 lib/Doctrine/ORM/Proxy/ProxyFactory.php create mode 100644 lib/Doctrine/ORM/Reflection/ReflectionService.php create mode 100644 lib/Doctrine/ORM/Reflection/RuntimePublicReflectionProperty.php create mode 100644 lib/Doctrine/ORM/Reflection/RuntimeReflectionService.php create mode 100644 lib/Doctrine/ORM/Reflection/StaticReflectionService.php diff --git a/lib/Doctrine/ORM/Configuration.php b/lib/Doctrine/ORM/Configuration.php index 6d6d372075e..6b466379051 100644 --- a/lib/Doctrine/ORM/Configuration.php +++ b/lib/Doctrine/ORM/Configuration.php @@ -22,12 +22,10 @@ use Doctrine\Common\Annotations\AnnotationReader; use Doctrine\Common\Annotations\AnnotationRegistry; use Doctrine\Common\Annotations\CachedReader; -use Doctrine\Common\Annotations\SimpleAnnotationReader; use Doctrine\Common\Cache\ArrayCache; use Doctrine\Common\Cache\Cache as CacheDriver; use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; use Doctrine\Common\Persistence\ObjectRepository; -use Doctrine\Common\Proxy\AbstractProxyFactory; use Doctrine\ORM\Cache\CacheConfiguration; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\DefaultEntityListenerResolver; @@ -35,6 +33,7 @@ use Doctrine\ORM\Mapping\EntityListenerResolver; use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; use Doctrine\ORM\Mapping\Factory\NamingStrategy; +use Doctrine\ORM\Proxy\Factory\ProxyFactory; use Doctrine\ORM\Repository\DefaultRepositoryFactory; use Doctrine\ORM\Repository\RepositoryFactory; @@ -79,19 +78,19 @@ public function getProxyDir() /** * Gets the strategy for automatically generating proxy classes. * - * @return int Possible values are constants of Doctrine\Common\Proxy\AbstractProxyFactory. + * @return int Possible values are constants of Doctrine\ORM\Proxy\Factory\StaticProxyFactory. */ public function getAutoGenerateProxyClasses() { return isset($this->attributes['autoGenerateProxyClasses']) ? $this->attributes['autoGenerateProxyClasses'] - : AbstractProxyFactory::AUTOGENERATE_ALWAYS; + : ProxyFactory::AUTOGENERATE_ALWAYS; } /** * Sets the strategy for automatically generating proxy classes. * - * @param boolean|int $autoGenerate Possible values are constants of Doctrine\Common\Proxy\AbstractProxyFactory. + * @param boolean|int $autoGenerate Possible values are constants of Doctrine\ORM\Proxy\Factory\StaticProxyFactory. * True is converted to AUTOGENERATE_ALWAYS, false to AUTOGENERATE_NEVER. * * @return void diff --git a/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php b/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php index 05970aea4a1..0a8988db277 100644 --- a/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php +++ b/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php @@ -22,7 +22,8 @@ namespace Doctrine\ORM\Configuration; -use Doctrine\Common\Proxy\AbstractProxyFactory; +use Doctrine\ORM\Proxy\Factory\ProxyFactory; +use Doctrine\ORM\Proxy\Factory\ProxyResolver; /** * Configuration container for proxy manager options of Doctrine. @@ -34,6 +35,11 @@ */ class ProxyConfiguration { + /** + * @var ProxyResolver + */ + private $resolver; + /** * @var string */ @@ -47,7 +53,23 @@ class ProxyConfiguration /** * @var int */ - private $autoGenerate = AbstractProxyFactory::AUTOGENERATE_ALWAYS; + private $autoGenerate = ProxyFactory::AUTOGENERATE_ALWAYS; + + /** + * @return ProxyResolver + */ + public function getResolver(): ProxyResolver + { + return $this->resolver; + } + + /** + * @param ProxyResolver $resolver + */ + public function setResolver(ProxyResolver $resolver) + { + $this->resolver = $resolver; + } /** * @return string @@ -96,4 +118,4 @@ public function setAutoGenerate(int $autoGenerate) { $this->autoGenerate = $autoGenerate; } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 58b1f77e7fb..92b96191c35 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -24,8 +24,9 @@ use Doctrine\DBAL\Connection; use Doctrine\DBAL\DriverManager; use Doctrine\DBAL\LockMode; +use Doctrine\ORM\Proxy\Factory\DefaultProxyResolver; +use Doctrine\ORM\Proxy\Factory\StaticProxyFactory; use Doctrine\ORM\Query\ResultSetMapping; -use Doctrine\ORM\Proxy\ProxyFactory; use Doctrine\ORM\Query\FilterCollection; use Doctrine\Common\Util\ClassUtils; @@ -100,7 +101,7 @@ /** * The proxy factory used to create dynamic proxies. * - * @var \Doctrine\ORM\Proxy\ProxyFactory + * @var \Doctrine\ORM\Proxy\Factory\ProxyFactory */ private $proxyFactory; @@ -153,6 +154,7 @@ protected function __construct(Connection $conn, Configuration $config, EventMan $proxyConfiguration = new ProxyConfiguration(); + $proxyConfiguration->setResolver(new DefaultProxyResolver($config->getProxyNamespace(), $config->getProxyDir())); $proxyConfiguration->setDirectory($config->getProxyDir()); $proxyConfiguration->setNamespace($config->getProxyNamespace()); $proxyConfiguration->setAutoGenerate($config->getAutoGenerateProxyClasses()); @@ -166,7 +168,7 @@ protected function __construct(Connection $conn, Configuration $config, EventMan $this->repositoryFactory = $config->getRepositoryFactory(); $this->unitOfWork = new UnitOfWork($this); - $this->proxyFactory = new ProxyFactory($this, $proxyConfiguration); + $this->proxyFactory = new StaticProxyFactory($this, $proxyConfiguration); if ($config->isSecondLevelCacheEnabled()) { $cacheConfig = $config->getSecondLevelCacheConfiguration(); diff --git a/lib/Doctrine/ORM/EntityManagerInterface.php b/lib/Doctrine/ORM/EntityManagerInterface.php index 8d64eded708..9466ac3dc89 100644 --- a/lib/Doctrine/ORM/EntityManagerInterface.php +++ b/lib/Doctrine/ORM/EntityManagerInterface.php @@ -271,7 +271,7 @@ public function newHydrator($hydrationMode); /** * Gets the proxy factory used by the EntityManager to create entity proxies. * - * @return \Doctrine\ORM\Proxy\ProxyFactory + * @return \Doctrine\ORM\Proxy\Factory\ProxyFactory */ public function getProxyFactory(); diff --git a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php index 5a5120c9071..6202742ed61 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php @@ -416,7 +416,7 @@ protected function hydrateRowData(array $row, array &$result) $reflFieldValue = $association->getValue($parentObject); if (! $reflFieldValue || isset($this->hints[Query::HINT_REFRESH]) || - ($reflFieldValue instanceof Proxy && ! $reflFieldValue->__isInitialized__)) { + ($reflFieldValue instanceof Proxy && ! $reflFieldValue->__isInitialized())) { // we only need to take action if this value is null, // we refresh the entity or its an uninitialized proxy. if (isset($nonemptyComponents[$dqlAlias])) { diff --git a/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php index 80332141d3e..16206c4cc58 100644 --- a/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php @@ -22,9 +22,9 @@ use Doctrine\Common\Persistence\Mapping\ClassMetadataFactory; use Doctrine\Common\Persistence\Mapping\MappingException; use Doctrine\Common\Cache\Cache; -use Doctrine\Common\Persistence\Mapping\ReflectionService; -use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\Common\Util\ClassUtils; +use Doctrine\ORM\Reflection\ReflectionService; +use Doctrine\ORM\Reflection\RuntimeReflectionService; use ReflectionException; /** diff --git a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php index 24eb66f1a08..8e3e42dd3a6 100644 --- a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php @@ -22,7 +22,7 @@ namespace Doctrine\ORM\Mapping; -use Doctrine\Common\Persistence\Mapping\ReflectionService; +use Doctrine\ORM\Reflection\ReflectionService; class AssociationMetadata implements Property { @@ -55,13 +55,13 @@ class AssociationMetadata implements Property /** @var array */ private $cascade = []; - + /** @var bool */ private $owningSide = true; /** @var bool */ private $orphanRemoval = false; - + /** @var null|CacheMetadata */ private $cache = null; @@ -170,7 +170,7 @@ public function setCascade(array $cascade) { $this->cascade = $cascade; } - + /** * @param bool $owningSide */ @@ -178,7 +178,7 @@ public function setOwningSide(bool $owningSide) { $this->owningSide = $owningSide; } - + /** * @return bool */ @@ -250,7 +250,7 @@ public function isOrphanRemoval() { return $this->orphanRemoval; } - + /** * @return null|CacheMetadata */ @@ -323,4 +323,4 @@ public function __clone() $this->cache = clone $this->cache; } } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 58c10ad0f66..dc1736449b5 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -405,7 +405,7 @@ public function assignIdentifier($entity, array $id) $property->setValue($entity, $idValue); } } - + /** * Handles metadata cloning nicely. */ @@ -542,7 +542,7 @@ public function newInstance() /** * Restores some state that can not be serialized/unserialized. * - * @param \Doctrine\Common\Persistence\Mapping\ReflectionService $reflService + * @param \Doctrine\ORM\Reflection\ReflectionService $reflService * * @return void */ diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index a33721ab4d4..2b6425bc853 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -19,14 +19,14 @@ namespace Doctrine\ORM\Mapping; -use Doctrine\Common\Persistence\Mapping\ReflectionService; use Doctrine\DBAL\Platforms; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Event\LoadClassMetadataEventArgs; use Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs; use Doctrine\ORM\Events; -use Doctrine\ORM\Sequencing; use Doctrine\ORM\ORMException; +use Doctrine\ORM\Reflection\ReflectionService; +use Doctrine\ORM\Sequencing; use ReflectionException; /** diff --git a/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php b/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php index 221fe87cb20..3123b43f4bd 100644 --- a/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php @@ -22,7 +22,7 @@ namespace Doctrine\ORM\Mapping; -use Doctrine\Common\Persistence\Mapping\ReflectionService; +use Doctrine\ORM\Reflection\ReflectionService; /** * Class EmbeddedClassMetadata @@ -141,4 +141,4 @@ public function wakeupReflection(ReflectionService $reflectionService) $reflectionService->getAccessibleProperty($this->declaringClass->name, $this->name) ); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php index f8fe0297d41..f48419195ae 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php @@ -24,10 +24,10 @@ use Doctrine\Common\Persistence\Mapping\ClassMetadataFactory; use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; -use Doctrine\Common\Persistence\Mapping\ReflectionService; use Doctrine\Common\Util\ClassUtils; use Doctrine\ORM\Configuration\MetadataConfiguration; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Reflection\ReflectionService; /** * AbstractClassMetadataFactory is the base of ClassMetadata object creation that contain all the metadata mapping diff --git a/lib/Doctrine/ORM/Mapping/Factory/Autoloader.php b/lib/Doctrine/ORM/Mapping/Factory/Autoloader.php index c65188be248..1a0fab71353 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/Autoloader.php +++ b/lib/Doctrine/ORM/Mapping/Factory/Autoloader.php @@ -45,15 +45,15 @@ public static function resolveFile(string $metadataDir, string $metadataNamespac { if (0 !== strpos($className, $metadataNamespace)) { throw new InvalidArgumentException( - sprintf('The class "%s" is not part of the proxy namespace "%s"', $className, $metadataNamespace) + sprintf('The class "%s" is not part of the metadata namespace "%s"', $className, $metadataNamespace) ); } // remove metadata namespace from class name - $classNameRelativeToProxyNamespace = substr($className, strlen($metadataNamespace)); + $classNameRelativeToMetadataNamespace = substr($className, strlen($metadataNamespace)); // remove namespace separators from remaining class name - $fileName = str_replace('\\', '', $classNameRelativeToProxyNamespace); + $fileName = str_replace('\\', '', $classNameRelativeToMetadataNamespace); return $metadataDir . DIRECTORY_SEPARATOR . $fileName . '.php'; } @@ -77,7 +77,7 @@ public static function register( { $metadataNamespace = ltrim($metadataNamespace, '\\'); - if ( ! (null === $notFoundCallback || is_callable($notFoundCallback))) { + if (! (null === $notFoundCallback || is_callable($notFoundCallback))) { $type = is_object($notFoundCallback) ? get_class($notFoundCallback) : gettype($notFoundCallback); throw new InvalidArgumentException( diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataResolver.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataResolver.php index 89a1006941a..e7b8dd8e8dd 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataResolver.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataResolver.php @@ -37,12 +37,12 @@ interface ClassMetadataResolver * * @return string */ - public function resolveMetadataClassName(string $className); + public function resolveMetadataClassName(string $className) : string; /** * @param string $className * * @return string */ - public function resolveMetadataClassPath(string $className); + public function resolveMetadataClassPath(string $className) : string; } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Factory/DefaultClassMetadataResolver.php b/lib/Doctrine/ORM/Mapping/Factory/DefaultClassMetadataResolver.php index 056e3355af0..6b68f2eee50 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/DefaultClassMetadataResolver.php +++ b/lib/Doctrine/ORM/Mapping/Factory/DefaultClassMetadataResolver.php @@ -22,11 +22,15 @@ namespace Doctrine\ORM\Mapping\Factory; -use Doctrine\Common\Util\ClassUtils; -use Doctrine\ORM\Proxy\Proxy; - class DefaultClassMetadataResolver implements ClassMetadataResolver { + /** + * Marker for ClassMetadata class names. + * + * @var string + */ + const MARKER = '__CG__'; + /** * @var string */ @@ -52,18 +56,16 @@ public function __construct(string $namespace, string $directory) /** * {@inheritdoc} */ - public function resolveMetadataClassName(string $className) + public function resolveMetadataClassName(string $className) : string { - // Reuse "generateProxyClassName", since its logic is the same as intended here - return ClassUtils::generateProxyClassName($className, $this->namespace); + return sprintf('%s\%s\%s', $this->namespace, self::MARKER, ltrim($className, '\\')); } /** * {@inheritdoc} */ - public function resolveMetadataClassPath(string $className) + public function resolveMetadataClassPath(string $className) : string { - return $this->directory . DIRECTORY_SEPARATOR . Proxy::MARKER - . str_replace('\\', '', $className) . '.php'; + return sprintf('%s/%s/%s.php', $this->directory, self::MARKER, str_replace('\\', '.', $className)); } } \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Factory/RuntimeClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/Factory/RuntimeClassMetadataFactory.php index d3e5558d651..05df08ecff1 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/RuntimeClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/RuntimeClassMetadataFactory.php @@ -22,7 +22,7 @@ namespace Doctrine\ORM\Mapping\Factory; -use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; +use Doctrine\ORM\Reflection\RuntimeReflectionService; /** * RuntimeClassMetadataFactory is the ClassMetadata object creation factory that runs at diff --git a/lib/Doctrine/ORM/Mapping/Factory/StaticClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/Factory/StaticClassMetadataFactory.php index 3bad180dee8..8faeb8cbe65 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/StaticClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/StaticClassMetadataFactory.php @@ -22,7 +22,7 @@ namespace Doctrine\ORM\Mapping\Factory; -use Doctrine\Common\Persistence\Mapping\StaticReflectionService; +use Doctrine\ORM\Reflection\StaticReflectionService; /** * StaticClassMetadataFactory is the ClassMetadata object creation factory that sits behind diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index 841c5369491..982eef2d166 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -22,9 +22,8 @@ namespace Doctrine\ORM\Mapping; -use Doctrine\Common\Persistence\Mapping\ReflectionService; use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Sequencing\Generator; +use Doctrine\ORM\Reflection\ReflectionService; class FieldMetadata extends LocalColumnMetadata implements Property { @@ -169,4 +168,4 @@ public function wakeupReflection(ReflectionService $reflectionService) $reflectionService->getAccessibleProperty($this->declaringClass->name, $this->name) ); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Property.php b/lib/Doctrine/ORM/Mapping/Property.php index 297f631d96a..a7e85e06020 100644 --- a/lib/Doctrine/ORM/Mapping/Property.php +++ b/lib/Doctrine/ORM/Mapping/Property.php @@ -19,8 +19,7 @@ namespace Doctrine\ORM\Mapping; -use Doctrine\Common\Persistence\Mapping\ReflectionService; -use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Reflection\ReflectionService; interface Property { @@ -52,6 +51,11 @@ public function getValue($object); */ public function getName(); + /** + * @return bool + */ + public function isPrimaryKey(); + /** * @param \ReflectionProperty $reflectionProperty */ @@ -61,4 +65,4 @@ public function setReflectionProperty(\ReflectionProperty $reflectionProperty); * @param ReflectionService $reflectionService */ public function wakeupReflection(ReflectionService $reflectionService); -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/TransientMetadata.php b/lib/Doctrine/ORM/Mapping/TransientMetadata.php index f9d92a64855..ab8a285769f 100644 --- a/lib/Doctrine/ORM/Mapping/TransientMetadata.php +++ b/lib/Doctrine/ORM/Mapping/TransientMetadata.php @@ -22,7 +22,7 @@ namespace Doctrine\ORM\Mapping; -use Doctrine\Common\Persistence\Mapping\ReflectionService; +use Doctrine\ORM\Reflection\ReflectionService; class TransientMetadata implements Property { @@ -69,6 +69,14 @@ public function getName() return $this->name; } + /** + * {@inheritdoc} + */ + public function isPrimaryKey() + { + return false; + } + /** * {@inheritdoc} */ @@ -102,4 +110,4 @@ public function wakeupReflection(ReflectionService $reflectionService) $reflectionService->getAccessibleProperty($this->declaringClass->name, $this->name) ); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Proxy/Factory/Autoloader.php b/lib/Doctrine/ORM/Proxy/Factory/Autoloader.php new file mode 100644 index 00000000000..eb61e28cc76 --- /dev/null +++ b/lib/Doctrine/ORM/Proxy/Factory/Autoloader.php @@ -0,0 +1,109 @@ +. + */ + +namespace Doctrine\ORM\Proxy\Factory; + +use InvalidArgumentException; + +/** + * Special Autoloader for Proxy classes, which are not PSR-0 compliant. + * + * @author Benjamin Eberlei + */ +class Autoloader +{ + /** + * Resolves proxy class name to a filename based on the following pattern. + * + * 1. Remove Proxy namespace from class name. + * 2. Remove namespace separators from remaining class name. + * 3. Return PHP filename from proxy-dir with the result from 2. + * + * @param string $proxyDir + * @param string $proxyNamespace + * @param string $className + * + * @return string + * + * @throws InvalidArgumentException + */ + public static function resolveFile(string $proxyDir, string $proxyNamespace, string $className) : string + { + if (0 !== strpos($className, $proxyNamespace)) { + throw new InvalidArgumentException( + sprintf('The class "%s" is not part of the proxy namespace "%s"', $className, $proxyNamespace) + ); + } + + // remove proxy namespace from class name + $classNameRelativeToProxyNamespace = substr($className, strlen($proxyNamespace)); + + // remove namespace separators from remaining class name + $fileName = str_replace('\\', '', $classNameRelativeToProxyNamespace); + + return $proxyDir . DIRECTORY_SEPARATOR . $fileName . '.php'; + } + + /** + * Registers and returns autoloader callback for the given proxy dir and namespace. + * + * @param string $proxyDir + * @param string $proxyNamespace + * @param callable|null $notFoundCallback Invoked when the proxy file is not found. + * + * @return \Closure + * + * @throws InvalidArgumentException + */ + public static function register( + string $proxyDir, + string $proxyNamespace, + callable $notFoundCallback = null + ) : \Closure + { + $proxyNamespace = ltrim($proxyNamespace, '\\'); + + if (! (null === $notFoundCallback || is_callable($notFoundCallback))) { + $type = is_object($notFoundCallback) ? get_class($notFoundCallback) : gettype($notFoundCallback); + + throw new InvalidArgumentException( + sprintf('Invalid \$notFoundCallback given: must be a callable, "%s" given', $type) + ); + } + + $autoloader = function ($className) use ($proxyDir, $proxyNamespace, $notFoundCallback) { + if (0 === strpos($className, $proxyNamespace)) { + $file = Autoloader::resolveFile($proxyDir, $proxyNamespace, $className); + + if ($notFoundCallback && ! file_exists($file)) { + call_user_func($notFoundCallback, $proxyDir, $proxyNamespace, $className); + } + + require $file; + } + }; + + spl_autoload_register($autoloader); + + return $autoloader; + } +} diff --git a/lib/Doctrine/ORM/Proxy/Factory/DefaultProxyResolver.php b/lib/Doctrine/ORM/Proxy/Factory/DefaultProxyResolver.php new file mode 100644 index 00000000000..695b2ebb203 --- /dev/null +++ b/lib/Doctrine/ORM/Proxy/Factory/DefaultProxyResolver.php @@ -0,0 +1,74 @@ +. + */ + +namespace Doctrine\ORM\Proxy\Factory; + +use Doctrine\Common\Util\ClassUtils; +use Doctrine\ORM\Proxy\Proxy; + +class DefaultProxyResolver implements ProxyResolver +{ + /** + * Marker for Proxy class names. + * + * @var string + */ + const MARKER = '__CG__'; + + /** + * @var string + */ + private $namespace; + + /** + * @var string + */ + private $directory; + + /** + * DefaultProxyResolver constructor. + * + * @param string $namespace + * @param string $directory + */ + public function __construct(string $namespace, string $directory) + { + $this->namespace = ltrim($namespace, '\\'); + $this->directory = rtrim($directory, DIRECTORY_SEPARATOR); + } + + /** + * {@inheritdoc} + */ + public function resolveProxyClassName(string $className) : string + { + return sprintf('%s\%s\%s', $this->namespace, self::MARKER, ltrim($className, '\\')); + } + + /** + * {@inheritdoc} + */ + public function resolveProxyClassPath(string $className) : string + { + return sprintf('%s/%s/%s.php', $this->directory, self::MARKER, str_replace('\\', '.', $className)); + } +} diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php new file mode 100644 index 00000000000..fff4e0e8dfe --- /dev/null +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php @@ -0,0 +1,207 @@ +. + */ + +namespace Doctrine\ORM\Proxy\Factory; + +use Doctrine\ORM\EntityNotFoundException; +use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\Property; +use Doctrine\ORM\Mapping\TransientMetadata; +use Doctrine\ORM\Persisters\Entity\EntityPersister; +use Doctrine\ORM\Proxy\Proxy; + +/** + * Definition structure how to create a proxy. + * + * @author Guilherme Blanco + * @author Benjamin Eberlei + */ +class ProxyDefinition +{ + /** + * @var ClassMetadata + */ + public $entityClassMetadata; + + /** + * @var EntityPersister + */ + public $entityPersister; + + /** + * @var string + */ + public $proxyClassName; + + /** + * @var array|null + */ + private $lazyPropertyList; + + /** + * @param ClassMetadata $entityClassMetadata + * @param EntityPersister $entityPersister + * @param string $proxyClassName + */ + public function __construct( + ClassMetadata $entityClassMetadata, + EntityPersister $entityPersister, + string $proxyClassName + ) + { + $this->entityClassMetadata = $entityClassMetadata; + $this->entityPersister = $entityPersister; + $this->proxyClassName = $proxyClassName; + } + + /** + * Method responsible for loading properties in the proxy object. + * This should accept 3 parameters: + * - $proxy: the proxy object to be initialized + * - $method: the method that triggered the initialization process + * - $parameters: an array of ordered parameters that were passed to that method + * + * @param Proxy $proxy + * + * @throws EntityNotFoundException + */ + public function initializer(Proxy $proxy) : void + { + if ($proxy->__isInitialized()) { + return; + } + + $proxy->__setInitialized(true); + + $lazyPropertyList = $this->getLazyPublicPropertyList(); + $existingProperties = get_object_vars($proxy); // Do not override properties manually set. + + foreach ($lazyPropertyList as $propertyName => $defaultValue) { + if (! array_key_exists($propertyName, $existingProperties)) { + $proxy->$propertyName = $defaultValue; + } + } + + if (method_exists($proxy, '__wakeup')) { + $proxy->__wakeup(); + } + + $classMetadata = $this->entityClassMetadata; + $identifier = $classMetadata->getIdentifierValues($proxy); + $original = $this->entityPersister->loadById($identifier, $proxy); + + if (null === $original) { + $proxy->__setInitialized(false); + + throw EntityNotFoundException::fromClassNameAndIdentifier( + $classMetadata->getName(), $identifier + ); + + // @todo guilhermeblanco Move the flattening identifier to Persisters + /*$identifierFlattener = new IdentifierFlattener( + $this->entityManager->getUnitOfWork(), + $this->entityManager->getMetadataFactory() + ); + + throw EntityNotFoundException::fromClassNameAndIdentifier( + $classMetadata->getName(), + $identifierFlattener->flattenIdentifier($classMetadata, $identifier) + );*/ + } + } + + /** + * Method responsible of loading properties that need to be copied in the cloned object. + * This should accept a single parameter, which is the cloned proxy instance itself. + * + * @param Proxy $proxy + * + * @throws EntityNotFoundException + */ + public function cloner(Proxy $proxy) : void + { + if ($proxy->__isInitialized()) { + return; + } + + $proxy->__setInitialized(true); + + $classMetadata = $this->entityClassMetadata; + $identifier = $classMetadata->getIdentifierValues($proxy); + $original = $this->entityPersister->loadById($identifier); + + if (null === $original) { + throw EntityNotFoundException::fromClassNameAndIdentifier( + $classMetadata->getName(), $identifier + ); + + // @todo guilhermeblanco Move the flattening identifier to Persisters + /*$identifierFlattener = new IdentifierFlattener( + $this->entityManager->getUnitOfWork(), + $this->entityManager->getMetadataFactory() + ); + + throw EntityNotFoundException::fromClassNameAndIdentifier( + $classMetadata->getName(), + $identifierFlattener->flattenIdentifier($classMetadata, $identifier) + );*/ + } + + foreach ($classMetadata->getProperties() as $property) { + /** @var Property $property */ + $property->setValue($proxy, $property->getValue($original)); + } + } + + /** + * Generates the list of public properties to be lazy loaded, with their default values. + * + * @return array + */ + public function getLazyPublicPropertyList() : array + { + if (null !== $this->lazyPropertyList) { + return $this->lazyPropertyList; + } + + $reflectionClass = $this->entityClassMetadata->getReflectionClass(); + $defaultPropertyList = $reflectionClass->getDefaultProperties(); + $lazyPropertyList = []; + + foreach ($reflectionClass->getProperties(\ReflectionProperty::IS_PUBLIC) as $reflectionProperty) { + if ($reflectionProperty->isStatic()) { + continue; + } + + $propertyName = $reflectionProperty->getName(); + $property = $this->entityClassMetadata->getProperty($propertyName); + + if (! $property || $property instanceof TransientMetadata || $property->isPrimaryKey()) { + continue; + } + + $lazyPropertyList[$propertyName] = $defaultPropertyList[$propertyName]; + } + + return $this->lazyPropertyList = $lazyPropertyList; + } +} diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php new file mode 100644 index 00000000000..3f6c603ed0f --- /dev/null +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php @@ -0,0 +1,128 @@ +. + */ + +namespace Doctrine\ORM\Proxy\Factory; + +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\ClassMetadata; + +class ProxyDefinitionFactory +{ + /** + * @var EntityManagerInterface + */ + private $entityManager; + + /** + * @var ProxyResolver + */ + private $resolver; + + /** + * @var ProxyGenerator + */ + private $generator; + + /** + * @var int + */ + private $autoGenerate; + + /** + * ProxyDefinitionFactory constructor. + * + * @param EntityManagerInterface $entityManager + * @param ProxyResolver $resolver + * @param ProxyGenerator $generator + * @param int $autoGenerate + */ + public function __construct( + EntityManagerInterface $entityManager, + ProxyResolver $resolver, + ProxyGenerator $generator, + int $autoGenerate + ) + { + $this->entityManager = $entityManager; + $this->resolver = $resolver; + $this->generator = $generator; + $this->autoGenerate = $autoGenerate; + } + + /** + * @param ClassMetadata $classMetadata + * + * @return ProxyDefinition + */ + public function build(ClassMetadata $classMetadata) : ProxyDefinition + { + $definition = $this->createDefinition($classMetadata); + + if (! class_exists($definition->proxyClassName, false)) { + $proxyClassPath = $this->resolver->resolveProxyClassPath($classMetadata->getName()); + + switch ($this->autoGenerate) { + case ProxyFactory::AUTOGENERATE_FILE_NOT_EXISTS: + if (! file_exists($proxyClassPath)) { + $this->generator->generate($proxyClassPath, $definition); + } + + require $proxyClassPath; + + break; + + case ProxyFactory::AUTOGENERATE_ALWAYS: + $this->generator->generate($proxyClassPath, $definition); + + require $proxyClassPath; + + break; + + case ProxyFactory::AUTOGENERATE_EVAL: + $this->generator->generate(null, $definition); + + break; + + case ProxyFactory::AUTOGENERATE_NEVER: + require $proxyClassPath; + + break; + } + } + + return $definition; + } + + /** + * @param ClassMetadata $classMetadata + * + * @return ProxyDefinition + */ + private function createDefinition(ClassMetadata $classMetadata) : ProxyDefinition + { + $unitOfWork = $this->entityManager->getUnitOfWork(); + $entityPersister = $unitOfWork->getEntityPersister($classMetadata->getName()); + $proxyClassName = $this->resolver->resolveProxyClassName($classMetadata->getName()); + + return new ProxyDefinition($classMetadata, $entityPersister, $proxyClassName); + } +} diff --git a/lib/Doctrine/ORM/Proxy/Autoloader.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyException.php similarity index 80% rename from lib/Doctrine/ORM/Proxy/Autoloader.php rename to lib/Doctrine/ORM/Proxy/Factory/ProxyException.php index 9b2e2cdfa1a..675c5cede1f 100644 --- a/lib/Doctrine/ORM/Proxy/Autoloader.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyException.php @@ -1,4 +1,7 @@ . */ -namespace Doctrine\ORM\Proxy; - -use Doctrine\Common\Proxy\Autoloader as BaseAutoloader; +namespace Doctrine\ORM\Proxy\Factory; /** - * @deprecated use \Doctrine\Common\Proxy\Autoloader instead + * Base exception interface for proxy exceptions. + * + * @link www.doctrine-project.org + * @since 2.4 + * @author Marco Pivetta */ -class Autoloader extends BaseAutoloader +interface ProxyException { } diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyFactory.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyFactory.php new file mode 100644 index 00000000000..216e9bd17a9 --- /dev/null +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyFactory.php @@ -0,0 +1,83 @@ +. + */ + +namespace Doctrine\ORM\Proxy\Factory; + +use Doctrine\ORM\Proxy\Proxy; + +interface ProxyFactory +{ + /** + * Never autogenerate a proxy and rely that it was generated by some + * process before deployment. + * + * @var integer + */ + const AUTOGENERATE_NEVER = 0; + + /** + * Always generates a new proxy in every request. + * + * This is only sane during development. + * + * @var integer + */ + const AUTOGENERATE_ALWAYS = 1; + + /** + * Autogenerate the proxy class when the proxy file does not exist. + * + * This strategy causes a file exists call whenever any proxy is used the + * first time in a request. + * + * @var integer + */ + const AUTOGENERATE_FILE_NOT_EXISTS = 2; + + /** + * Generate the proxy classes using eval(). + * + * This strategy is only sane for development, and even then it gives me + * the creeps a little. + * + * @var integer + */ + const AUTOGENERATE_EVAL = 3; + + /** + * @param array $classMetadataList + * + * @return int + */ + public function generateProxyClasses(array $classMetadataList) : int; + + /** + * Gets a reference proxy instance for the entity of the given type and identified by + * the given identifier. + * + * @param string $className + * @param array $identifier + * + * @return \Doctrine\ORM\Proxy\Proxy + */ + public function getProxy(string $className, array $identifier) : Proxy; +} diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php new file mode 100644 index 00000000000..384cd530d16 --- /dev/null +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php @@ -0,0 +1,896 @@ +. + */ + +namespace Doctrine\ORM\Proxy\Factory; + +use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Proxy\Proxy; + +/** + * This factory is used to generate proxy classes. + * It builds proxies from given parameters, a template and class metadata. + * + * @author Guilherme Blanco + * @author Marco Pivetta + * @since 2.4 + */ +class ProxyGenerator +{ + /** + * Used to match very simple id methods that don't need + * to be decorated since the identifier is known. + */ + const PATTERN_MATCH_ID_METHOD = '((public\s+)?(function\s+%s\s*\(\)\s*)\s*(?::\s*\??\s*\\\\?[a-z_\x7f-\xff][\w\x7f-\xff]*(?:\\\\[a-z_\x7f-\xff][\w\x7f-\xff]*)*\s*)?{\s*return\s*\$this->%s;\s*})i'; + + /** + * The namespace that contains all proxy classes. + * + * @var string + */ + private $proxyNamespace; + + /** + * The directory that contains all proxy classes. + * + * @var string + */ + private $proxyDirectory; + + /** + * Map of callables used to fill in placeholders set in the template. + * + * @var string[]|callable[] + */ + protected $placeholders = [ + 'baseProxyInterface' => Proxy::class, + 'additionalProperties' => '', + ]; + + /** + * Template used as a blueprint to generate proxies. + * + * @var string + */ + protected $proxyClassTemplate = '; + +use Doctrine\ORM\Proxy\Factory\ProxyDefinition; + +/** + * DO NOT EDIT THIS FILE - IT WAS CREATED BY DOCTRINE\'S PROXY GENERATOR + */ +class extends \ implements \ +{ + /** + * @static + * @var array Cache for an array of proxy managed public properties + */ + static private $__lazyPublicPropertyList__ = ; + + /** + * @var ProxyDefinition + + * @see \Doctrine\ORM\Proxy::__setProxyDefinition + */ + private $__proxyDefinition__; + + /** + * @var boolean flag indicating if this object was already initialized + * + * @see \Doctrine\ORM\Proxy::__isInitialized + */ + private $__isInitialized__ = false; + + + + /** + * @param ProxyDefinition $definition + */ + public function __construct(ProxyDefinition $definition) + { + $this->__proxyDefinition__ = $definition; + + foreach (static::$__lazyPublicPropertyList__ as $propertyName => $defaultValue) { + unset($this->$propertyName); + } + } + + /** + * {@inheritDoc} + * @internal generated method: use only when explicitly handling proxy specific loading logic + */ + public function __isInitialized() + { + return $this->__isInitialized__; + } + + /** + * {@inheritDoc} + * @internal generated method: use only when explicitly handling proxy specific loading logic + */ + public function __setInitialized($initialized) + { + $this->__isInitialized__ = $initialized; + } + + /** + * Clones the proxy + */ + public function __clone() + { + ! $this->__isInitialized__ && $this->__proxyDefinition__->cloner($this); + + if (is_callable("parent::__clone")) { + parent::__clone(); + } + } + + /** + * Forces initialization of the proxy + */ + public function __load() + { + ! $this->__isInitialized__ && $this->__proxyDefinition__->initializer($this, "__load", []); + + if (is_callable("parent::__load")) { + parent::__load(); + } + } + + + + + + + + + + + + +} +'; + + /** + * Initializes a new instance of the ProxyFactory class that is + * connected to the given EntityManager. + * + * @param string $proxyDirectory The directory to use for the proxy classes. It must exist. + * @param string $proxyNamespace The namespace to use for the proxy classes. + * + * @throws \InvalidArgumentException + */ + public function __construct($proxyDirectory, $proxyNamespace) + { + if (! $proxyDirectory) { + throw new \InvalidArgumentException('You must configure a proxy directory. See docs for details'); + } + + if (! $proxyNamespace) { + throw new \InvalidArgumentException('You must configure a proxy namespace'); + } + + $this->proxyDirectory = $proxyDirectory; + $this->proxyNamespace = $proxyNamespace; + } + + /** + * Sets a placeholder to be replaced in the template. + * + * @param string $name + * @param string|callable $placeholder + * + * @throws \InvalidArgumentException + */ + public function setPlaceholder($name, $placeholder) + { + if (! is_string($placeholder) && ! is_callable($placeholder)) { + throw new \InvalidArgumentException( + sprintf('Provided placeholder for "%s" must be either a string or a valid callable', $name) + ); + } + + $this->placeholders[$name] = $placeholder; + } + + /** + * Sets the base template used to create proxy classes. + * + * @param string $proxyClassTemplate + */ + public function setProxyClassTemplate($proxyClassTemplate) + { + $this->proxyClassTemplate = (string) $proxyClassTemplate; + } + + /** + * Generates a proxy class file. + * + * @param string|null $proxyClassPath Filename (full path) for the generated class. If null given, eval() is used. + * @param ProxyDefinition $definition Definition for the original ClassMetadata. + * + * @throws \InvalidArgumentException + * @throws \UnexpectedValueException + */ + public function generate(?string $proxyClassPath, ProxyDefinition $definition) + { + $this->verifyClassCanBeProxied($definition->entityClassMetadata); + + $proxyCode = $this->renderTemplate($this->proxyClassTemplate, $definition, $this->placeholders); + + if (! $proxyClassPath) { + if ( ! class_exists($definition->proxyClassName)) { + eval(substr($proxyCode, 5)); + } + + return; + } + + $parentDirectory = dirname($proxyClassPath); + + if (! is_dir($parentDirectory) && (false === @mkdir($parentDirectory, 0775, true))) { + throw new \UnexpectedValueException( + sprintf('Your proxy directory "%s" must be writable', $this->proxyDirectory) + ); + } + + if (! is_writable($parentDirectory)) { + throw new \UnexpectedValueException( + sprintf('Your proxy directory "%s" must be writable', $this->proxyDirectory) + ); + } + + $tmpFileName = $proxyClassPath . '.' . uniqid('', true); + + file_put_contents($tmpFileName, $proxyCode); + @chmod($tmpFileName, 0664); + rename($tmpFileName, $proxyClassPath); + } + + /** + * @param ClassMetadata $class + * + * @throws \InvalidArgumentException + */ + private function verifyClassCanBeProxied(ClassMetadata $class) + { + $reflectionClass = $class->getReflectionClass(); + + if ($reflectionClass->isFinal()) { + throw new \InvalidArgumentException( + sprintf('Unable to create a proxy for a final class "%s".', $reflectionClass->getName()) + ); + } + + if ($reflectionClass->isAbstract()) { + throw new \InvalidArgumentException( + sprintf('Unable to create a proxy for an abstract class "%s".', $reflectionClass->getName()) + ); + } + } + + /** + * Generates the proxy short class name to be used in the template. + * + * @param ProxyDefinition $definition + * + * @return string + */ + private function generateProxyShortClassName(ProxyDefinition $definition) : string + { + $parts = explode('\\', strrev($definition->proxyClassName), 2); + + return strrev($parts[0]); + } + + /** + * Generates the proxy namespace. + * + * @param ProxyDefinition $definition + * + * @return string + */ + private function generateNamespace(ProxyDefinition $definition) : string + { + $parts = explode('\\', strrev($definition->proxyClassName), 2); + + return strrev($parts[1]); + } + + /** + * Generates the original class name. + * + * @param ProxyDefinition $definition + * + * @return string + */ + private function generateClassName(ProxyDefinition $definition) : string + { + return $definition->entityClassMetadata->getName(); + } + + private function generateLazyPublicPropertyList(ProxyDefinition $definition) : string + { + $lazyPublicProperties = $definition->getLazyPublicPropertyList(); + + return var_export($lazyPublicProperties, true); + } + + /** + * Generates the magic wakeup invoked when unserialize is called. + * + * @param ProxyDefinition $definition + * + * @return string + */ + private function generateMagicWakeup(ProxyDefinition $definition) : string + { + $lazyPublicProperties = $definition->getLazyPublicPropertyList(); + $reflectionClass = $definition->entityClassMetadata->getReflectionClass(); + $hasParentWakeup = $reflectionClass->hasMethod('__wakeup'); + + if (empty($lazyPublicProperties) && ! $hasParentWakeup) { + return ''; + } + + if ($hasParentWakeup) { + return <<<'EOT' + /** + * {@inheritDoc} + */ + public function __wakeup() + { + if (! $this->__isInitialized__) { + foreach (static::$__lazyPublicPropertyList__ as $propertyName => $defaultValue) { + unset($this->$propertyName); + } + } + + parent::__wakeup(); + } +EOT; + } + + return <<<'EOT' + /** + * Provides deserialization support for the proxy + */ + public function __wakeup() + { + if (! $this->__isInitialized__) { + foreach (static::$__lazyPublicPropertyList__ as $propertyName => $defaultValue) { + unset($this->$propertyName); + } + } + } +EOT; + } + + private function generateMagicSleep(ProxyDefinition $definition) : string + { + $reflectionClass = $definition->entityClassMetadata->getReflectionClass(); + $hasParentSleep = $reflectionClass->hasMethod('__sleep'); + + if ($hasParentSleep) { + return <<<'EOT' + /** + * {@inheritDoc} + */ + public function __sleep() + { + $allProperties = array_merge(["__isInitialized__"], parent::__sleep()); + + return ! $this->__isInitialized__ + ? array_diff($allProperties, array_keys(static::$__lazyPublicPropertyList__)) + : $allProperties + ; + } +EOT; + } + + return <<<'EOT' + /** + * Provides serialization support for the proxy + */ + public function __sleep() + { + $classMetadata = $this->__proxyDefinition__->entityClassMetadata; + $reflectionClass = $classMetadata->getReflectionClass(); + $allProperties = ["__isInitialized__"]; + + foreach ($reflectionClass->getProperties() as $reflectionProperty) { + if ($reflectionProperty->isStatic()) { + continue; + } + + $propertyPrefix = $reflectionProperty->isPrivate() + ? "\0" . $reflectionProperty->getDeclaringClass()->getName() . "\0" + : "" + ; + + $allProperties[] = $propertyPrefix . $reflectionProperty->getName(); + } + + return ! $this->__isInitialized__ + ? array_diff($allProperties, array_keys(static::$__lazyPublicPropertyList__)) + : $allProperties + ; + } +EOT; + } + + /** + * Generates the magic getter invoked when lazy loaded public properties are requested. + * + * @param ProxyDefinition $definition + * + * @return string + */ + private function generateMagicGet(ProxyDefinition $definition) : string + { + $lazyPublicProperties = $definition->getLazyPublicPropertyList(); + $reflectionClass = $definition->entityClassMetadata->getReflectionClass(); + $hasParentGet = $reflectionClass->hasMethod('__get'); + + if (empty($lazyPublicProperties) && ! $hasParentGet) { + return ''; + } + + if ($hasParentGet) { + $returnReference = $reflectionClass->getMethod('__get')->returnsReference() ? '& ' : ''; + + $magicGet = <<<'EOT' + /** + * {@inheritDoc} + */ + public function __get($name) + { + ! $this->__isInitialized__ && $this->__proxyDefinition__->initializer($this, '__get', [$name]); + + return parent::__get($name); + } +EOT; + + return $this->renderTemplate($magicGet, $definition, [ + 'returnReference' => $returnReference, + ]); + } + + return <<<'EOT' + /** + * Provides property retrieval support for the proxy + */ + public function __get($name) + { + if (static::$__lazyPublicPropertyList__ && array_key_exists($name, static::$__lazyPublicPropertyList__)) { + ! $this->__isInitialized__ && $this->__proxyDefinition__->initializer($this, '__get', [$name]); + + return $this->$name; + } + + trigger_error(sprintf('Undefined property: %s::$%s', __CLASS__, $name), E_USER_NOTICE); + } +EOT; + } + + /** + * Generates the magic setter (currently unused). + * + * @param ProxyDefinition $definition + * + * @return string + */ + private function generateMagicSet(ProxyDefinition $definition) : string + { + $lazyPublicProperties = $definition->getLazyPublicPropertyList(); + $reflectionClass = $definition->entityClassMetadata->getReflectionClass(); + $hasParentSet = $reflectionClass->hasMethod('__set'); + + if (empty($lazyPublicProperties) && ! $hasParentSet) { + return ''; + } + + if ($hasParentSet) { + return <<<'EOT' + /** + * {@inheritDoc} + */ + public function __set($name, $value) + { + ! $this->__isInitialized__ && $this->__proxyDefinition__->initializer($this, '__set', [$name, $value]); + + return parent::__set($name, $value); + } +EOT; + } + + return <<<'EOT' + /** + * Provides property accessor support for the proxy + */ + public function __set($name, $value) + { + if (static::$__lazyPublicPropertyList__ && array_key_exists($name, static::$__lazyPublicPropertyList__)) { + ! $this->__isInitialized__ && $this->__proxyDefinition__->initializer($this, '__set', [$name, $value]); + } + + $this->$name = $value; + } +EOT; + } + + /** + * Generates the magic issetter invoked when lazy loaded public properties are checked against isset(). + * + * @param ProxyDefinition $definition + * + * @return string + */ + private function generateMagicIsset(ProxyDefinition $definition) : string + { + $lazyPublicProperties = $definition->getLazyPublicPropertyList(); + $reflectionClass = $definition->entityClassMetadata->getReflectionClass(); + $hasParentIsset = $reflectionClass->hasMethod('__isset'); + + if (empty($lazyPublicProperties) && ! $hasParentIsset) { + return ''; + } + + if ($hasParentIsset) { + return <<<'EOT' + /** + * {@inheritDoc} + */ + public function __isset($name) + { + ! $this->__isInitialized__ && $this->__proxyDefinition__->initializer($this, '__isset', [$name]); + + return parent::__isset($name); + } +EOT; + } + + return <<<'EOT' + /** + * Provide property checker for the proxy + */ + public function __isset($name) + { + if (static::$__lazyPublicPropertyList__ && array_key_exists($name, static::$__lazyPublicPropertyList__)) { + ! $this->__isInitialized__ &&$this->__proxyDefinition__->initializer($this, '__isset', [$name]); + + return isset($this->$name); + } + + return false; + } +EOT; + } + + /** + * Generates decorated methods by picking those available in the parent class. + * + * @param ProxyDefinition $definition + * + * @return string + */ + private function generateMethods(ProxyDefinition $definition) : string + { + $classMetadata = $definition->entityClassMetadata; + $reflectionClass = $classMetadata->getReflectionClass(); + $reflectionMethods = $reflectionClass->getMethods(\ReflectionMethod::IS_PUBLIC); + $filteredMethods = array_filter($reflectionMethods, function (\ReflectionMethod $reflectionMethod) use ($classMetadata) { + // Do not consider static or constructor + if ($reflectionMethod->isConstructor() || $reflectionMethod->isStatic()) { + return false; + } + + // Do not consider non-visible (or overloadable) methods + if ($reflectionMethod->isFinal() || ! $reflectionMethod->isPublic()) { + return false; + } + + // Do not consider identifier-getter methods + $fieldCandidate = lcfirst(substr($reflectionMethod->getName(), 3)); + $isIdentifier = $reflectionMethod->getNumberOfParameters() === 0 + && strpos($reflectionMethod->getName(), 'get') === 0 + && $classMetadata->hasField($fieldCandidate) + && in_array($fieldCandidate, $classMetadata->getIdentifier(), true) + ; + + if ($isIdentifier) { + return false; + } + + // Do not consider magic methods + $skippedMethods = [ + '__clone' => true, + '__get' => true, + '__isset' => true, + '__set' => true, + '__sleep' => true, + '__wakeup' => true, + ]; + + return ! isset($skippedMethods[strtolower($reflectionMethod->getName())]); + }); + + $methodList = []; + + /** @var \ReflectionMethod $reflectionMethod */ + foreach ($filteredMethods as $reflectionMethod) { + $methodName = $reflectionMethod->getName(); + $methodParameters = $reflectionMethod->getParameters(); + + $parameterList = $this->buildParametersString($reflectionMethod, $methodParameters); + $invocationParameterList = implode(', ', $this->getParameterNamesForInvocation($methodParameters)); + + $returnReference = $reflectionMethod->returnsReference() ? '& ' : ''; + $returnType = $this->getMethodReturnType($reflectionMethod); + $returnValue = $this->doesMethodReturnValue($reflectionMethod) ? 'return ' : ''; + + $methodTemplate = <<<'EOT' + /** + * {@inheritdoc} + */ + public function () + { + ! $this->__isInitialized__ && $this->__proxyDefinition__->initializer($this, __METHOD__, []); + + parent::(); + } +EOT; + + $methodList[] = $this->renderTemplate($methodTemplate, $definition, [ + 'methodName' => $methodName, + 'parameterList' => $parameterList, + 'invocationParameterList' => $invocationParameterList, + 'returnReference' => $returnReference, + 'returnType' => $returnType, + 'returnValue' => $returnValue, + ]); + } + + return implode("\n\n", $methodList); + } + + /** + * @param \ReflectionMethod $method + * @param \ReflectionParameter[] $parameters + * + * @return string + */ + private function buildParametersString(\ReflectionMethod $method, array $parameters) + { + $parameterDefinitions = []; + + /* @var $param \ReflectionParameter */ + foreach ($parameters as $param) { + $parameterDefinition = ''; + + if ($parameterType = $this->getParameterType($method, $param)) { + $parameterDefinition .= $parameterType . ' '; + } + + if ($param->isPassedByReference()) { + $parameterDefinition .= '&'; + } + + if ($param->isVariadic()) { + $parameterDefinition .= '...'; + } + + $parameterDefinition .= '$' . $param->getName(); + + if ($param->isDefaultValueAvailable()) { + $parameterDefinition .= ' = ' . var_export($param->getDefaultValue(), true); + } + + $parameterDefinitions[] = $parameterDefinition; + } + + return implode(', ', $parameterDefinitions); + } + + /** + * @param \ReflectionMethod $method + * @param \ReflectionParameter $parameter + * + * @return string|null + */ + private function getParameterType(\ReflectionMethod $method, \ReflectionParameter $parameter) + { + if (method_exists($parameter, 'hasType')) { + if (! $parameter->hasType()) { + return ''; + } + + return $this->formatType($parameter->getType(), $parameter->getDeclaringFunction(), $parameter); + } + + // For PHP 5.x, we need to pick the type hint in the old way (to be removed for PHP 7.0+) + if ($parameter->isArray()) { + return 'array'; + } + + if ($parameter->isCallable()) { + return 'callable'; + } + + try { + $parameterClass = $parameter->getClass(); + + if ($parameterClass) { + return '\\' . $parameterClass->getName(); + } + } catch (\ReflectionException $previous) { + throw new \UnexpectedValueException( + sprintf( + 'The type hint of parameter "%s" in method "%s" in class "%s" is invalid.', + $method->getDeclaringClass()->getName(), + $method->getName(), + $parameter->getName() + ), + 0, + $previous + ); + } + + return null; + } + + /** + * @param \ReflectionParameter[] $parameters + * + * @return string[] + */ + private function getParameterNamesForInvocation(array $parameters) + { + return array_map( + function (\ReflectionParameter $parameter) { + $name = ''; + + if ($parameter->isVariadic()) { + $name .= '...'; + } + + $name .= '$' . $parameter->getName(); + + return $name; + }, + $parameters + ); + } + + /** + * @param \ReflectionMethod $method + * + * @return string + */ + private function getMethodReturnType(\ReflectionMethod $method) + { + return $method->hasReturnType() + ? ': ' . $this->formatType($method->getReturnType(), $method) + : '' + ; + } + + /** + * @param \ReflectionMethod $method + * + * @return bool + */ + private function doesMethodReturnValue(\ReflectionMethod $method) + { + return $method->hasReturnType() + ? 'void' !== strtolower($this->formatType($method->getReturnType(), $method)) + : true + ; + } + + /** + * @param \ReflectionType $type + * @param \ReflectionMethod $method + * @param \ReflectionParameter|null $parameter + * + * @return string + * + * @throws \UnexpectedValueException + */ + private function formatType( + \ReflectionType $type, + \ReflectionMethod $method, + \ReflectionParameter $parameter = null + ) { + $name = method_exists($type, 'getName') ? $type->getName() : (string) $type; + $nameLower = strtolower($name); + + if ('self' === $nameLower) { + $name = $method->getDeclaringClass()->getName(); + } + + if ('parent' === $nameLower) { + $name = $method->getDeclaringClass()->getParentClass()->getName(); + } + + if ( ! $type->isBuiltin() && ! class_exists($name) && ! interface_exists($name)) { + if (null !== $parameter) { + throw new \UnexpectedValueException( + sprintf( + 'The type hint of parameter "%s" in method "%s" in class "%s" is invalid.', + $method->getDeclaringClass()->getName(), + $method->getName(), + $parameter->getName() + ) + ); + } + + throw new \UnexpectedValueException( + sprintf( + 'The return type of method "%s" in class "%s" is invalid.', + $method->getDeclaringClass()->getName(), + $method->getName() + ) + ); + } + + if (! $type->isBuiltin()) { + $name = '\\' . $name; + } + + if ($type->allowsNull() + && (null === $parameter || ! $parameter->isDefaultValueAvailable() || null !== $parameter->getDefaultValue()) + ) { + $name = '?' . $name; + } + + return $name; + } + + /** + * @param string $template + * @param ProxyDefinition $definition + * @param array $placeholders + * + * @return string + */ + private function renderTemplate(string $template, ProxyDefinition $definition, array $placeholders = []) : string + { + preg_match_all('(<([a-zA-Z]+)>)', $template, $placeholderMatches); + + $placeholderMatches = array_combine($placeholderMatches[0], $placeholderMatches[1]); + $replacements = []; + + foreach ($placeholderMatches as $tag => $tagName) { + if (isset($placeholders[$tagName]) && is_string($placeholders[$tagName])) { + $replacements[$tag] = $placeholders[$tagName]; + + continue; + } + + $callable = $placeholders[$tagName] ?? [$this, 'generate' . ucfirst($tagName)]; + + $replacements[$tag] = call_user_func($callable, $definition); + } + + return strtr($template, $replacements); + } +} diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyResolver.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyResolver.php new file mode 100644 index 00000000000..f47ce8983ac --- /dev/null +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyResolver.php @@ -0,0 +1,48 @@ +. + */ + +namespace Doctrine\ORM\Proxy\Factory; + +/** + * Interface ProxyResolver + * + * @package Doctrine\ORM\Proxy\Factory + * + * @since 3.0 + * @author Guilherme Blanco + */ +interface ProxyResolver +{ + /** + * @param string $className + * + * @return string + */ + public function resolveProxyClassName(string $className) : string; + + /** + * @param string $className + * + * @return string + */ + public function resolveProxyClassPath(string $className) : string; +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php b/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php new file mode 100644 index 00000000000..c7893d3ea68 --- /dev/null +++ b/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php @@ -0,0 +1,145 @@ +. + */ + +namespace Doctrine\ORM\Proxy\Factory; + +use Doctrine\Common\Persistence\ObjectManagerAware; +use Doctrine\ORM\Configuration\ProxyConfiguration; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Proxy\Proxy; + +/** + * Static factory for proxy objects. + * + * @package Doctrine\ORM\Proxy\Factory + * @since 3.0 + * + * @author Benjamin Eberlei + * @author Guilherme Blanco + */ +class StaticProxyFactory implements ProxyFactory +{ + /** + * @var EntityManagerInterface + */ + protected $entityManager; + + /** + * @var ProxyGenerator + */ + protected $generator; + + /** + * @var ProxyDefinitionFactory + */ + protected $definitionFactory; + + /** + * @var array + */ + private $definitions = []; + + /** + * ProxyFactory constructor. + * + * @param ProxyConfiguration $configuration + */ + public function __construct(EntityManagerInterface $entityManager, ProxyConfiguration $configuration) + { + $resolver = $configuration->getResolver(); + $autoGenerate = $configuration->getAutoGenerate(); + $generator = new ProxyGenerator($configuration->getDirectory(), $configuration->getNamespace()); + $definitionFactory = new ProxyDefinitionFactory($entityManager, $resolver, $generator, $autoGenerate); + + $generator->setPlaceholder('baseProxyInterface', Proxy::class); + + $this->entityManager = $entityManager; + $this->generator = $generator; + $this->definitionFactory = $definitionFactory; + } + + /** + * {@inheritdoc} + */ + public function generateProxyClasses(array $classMetadataList) : int + { + $generated = 0; + + foreach ($classMetadataList as $classMetadata) { + if ($classMetadata->isMappedSuperclass || $classMetadata->getReflectionClass()->isAbstract()) { + continue; + } + + $this->definitionFactory->build($classMetadata); + + $generated++; + } + + return $generated; + } + + /** + * {@inheritdoc} + */ + public function getProxy(string $className, array $identifier) : Proxy + { + $proxyDefinition = $this->getOrCreateProxyDefinition($className); + $proxyInstance = $this->createProxyInstance($proxyDefinition); + $proxyClassMetadata = $proxyDefinition->entityClassMetadata; + + $proxyClassMetadata->assignIdentifier($proxyInstance, $identifier); + + return $proxyInstance; + } + + /** + * @param ProxyDefinition $definition + * + * @return Proxy + */ + protected function createProxyInstance(ProxyDefinition $definition) : Proxy + { + /** @var Proxy $classMetadata */ + $proxyClassName = $definition->proxyClassName; + $proxyInstance = new $proxyClassName($definition); + + return $proxyInstance; + } + + /** + * Create a proxy definition for the given class name. + * + * @param string $className + * + * @return ProxyDefinition + */ + private function getOrCreateProxyDefinition(string $className) : ProxyDefinition + { + if (! isset($this->definitions[$className])) { + $classMetadata = $this->entityManager->getClassMetadata($className); + + $this->definitions[$className] = $this->definitionFactory->build($classMetadata); + } + + return $this->definitions[$className]; + } +} diff --git a/lib/Doctrine/ORM/Proxy/Proxy.php b/lib/Doctrine/ORM/Proxy/Proxy.php index f478d4905c0..cb4623d44fc 100644 --- a/lib/Doctrine/ORM/Proxy/Proxy.php +++ b/lib/Doctrine/ORM/Proxy/Proxy.php @@ -1,4 +1,7 @@ * @since 2.0 */ -interface Proxy extends BaseProxy +interface Proxy { + /** + * Initializes this proxy if its not yet initialized. + * + * Acts as a no-op if already initialized. + * + * @return void + */ + public function __load(); + + /** + * Returns whether this proxy is initialized or not. + * + * @return bool + */ + public function __isInitialized(); + + /** + * Marks the proxy as initialized or not. + * + * @param boolean $initialized + * + * @return void + */ + public function __setInitialized($initialized); } diff --git a/lib/Doctrine/ORM/Proxy/ProxyFactory.php b/lib/Doctrine/ORM/Proxy/ProxyFactory.php deleted file mode 100644 index 9be43aa9886..00000000000 --- a/lib/Doctrine/ORM/Proxy/ProxyFactory.php +++ /dev/null @@ -1,197 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Proxy; - -use Doctrine\Common\Persistence\Mapping\ClassMetadata; -use Doctrine\Common\Proxy\AbstractProxyFactory; -use Doctrine\Common\Proxy\Proxy as BaseProxy; -use Doctrine\Common\Proxy\ProxyDefinition; -use Doctrine\Common\Proxy\ProxyGenerator; -use Doctrine\Common\Util\ClassUtils; -use Doctrine\ORM\Configuration\ProxyConfiguration; -use Doctrine\ORM\EntityManagerInterface; -use Doctrine\ORM\Mapping\Property; -use Doctrine\ORM\Persisters\Entity\EntityPersister; -use Doctrine\ORM\EntityNotFoundException; -use Doctrine\ORM\Utility\IdentifierFlattener; - -/** - * This factory is used to create proxy objects for entities at runtime. - * - * @author Roman Borschel - * @author Giorgio Sironi - * @author Marco Pivetta - * @since 2.0 - */ -class ProxyFactory extends AbstractProxyFactory -{ - /** - * @var \Doctrine\ORM\UnitOfWork The UnitOfWork this factory uses to retrieve persisters - */ - private $uow; - - /** - * @var string - */ - private $proxyNs; - - /** - * The IdentifierFlattener used for manipulating identifiers - * - * @var \Doctrine\ORM\Utility\IdentifierFlattener - */ - private $identifierFlattener; - - /** - * Initializes a new instance of the ProxyFactory class that is - * connected to the given EntityManager. - * - * @param EntityManagerInterface $em The EntityManager the new factory works for. - * @param ProxyConfiguration $configuration The Proxy configuration - */ - public function __construct(EntityManagerInterface $em, ProxyConfiguration $configuration) - { - $proxyGenerator = new ProxyGenerator($configuration->getDirectory(), $configuration->getNamespace()); - - $proxyGenerator->setPlaceholder('baseProxyInterface', Proxy::class); - - parent::__construct($proxyGenerator, $em->getMetadataFactory(), $configuration->getAutoGenerate()); - - $this->uow = $em->getUnitOfWork(); - $this->proxyNs = $configuration->getNamespace(); - $this->identifierFlattener = new IdentifierFlattener($this->uow, $em->getMetadataFactory()); - } - - /** - * {@inheritDoc} - */ - protected function skipClass(ClassMetadata $metadata) - { - /* @var \Doctrine\ORM\Mapping\ClassMetadata $metadata */ - return $metadata->isMappedSuperclass || $metadata->getReflectionClass()->isAbstract(); - } - - /** - * {@inheritDoc} - */ - protected function createProxyDefinition($className) - { - $entityPersister = $this->uow->getEntityPersister($className); - $classMetadata = $entityPersister->getClassMetadata(); - - return new ProxyDefinition( - ClassUtils::generateProxyClassName($className, $this->proxyNs), - $classMetadata->getIdentifierFieldNames(), - $classMetadata->getProperties(), - $this->createInitializer($entityPersister), - $this->createCloner($entityPersister) - ); - } - - /** - * Creates a closure capable of initializing a proxy - * - * @param \Doctrine\ORM\Persisters\Entity\EntityPersister $entityPersister - * - * @return \Closure - * - * @throws \Doctrine\ORM\EntityNotFoundException - */ - private function createInitializer(EntityPersister $entityPersister) - { - return function (BaseProxy $proxy) use ($entityPersister) { - $initializer = $proxy->__getInitializer(); - $cloner = $proxy->__getCloner(); - - $proxy->__setInitializer(null); - $proxy->__setCloner(null); - - if ($proxy->__isInitialized()) { - return; - } - - $properties = $proxy->__getLazyProperties(); - - foreach ($properties as $propertyName => $property) { - if ( ! isset($proxy->$propertyName)) { - $proxy->$propertyName = $properties[$propertyName]; - } - } - - $proxy->__setInitialized(true); - - if (method_exists($proxy, '__wakeup')) { - $proxy->__wakeup(); - } - - $classMetadata = $entityPersister->getClassMetadata(); - $identifier = $classMetadata->getIdentifierValues($proxy); - - if (null === $entityPersister->loadById($identifier, $proxy)) { - $proxy->__setInitializer($initializer); - $proxy->__setCloner($cloner); - $proxy->__setInitialized(false); - - throw EntityNotFoundException::fromClassNameAndIdentifier( - $classMetadata->getName(), - $this->identifierFlattener->flattenIdentifier($classMetadata, $identifier) - ); - } - }; - } - - /** - * Creates a closure capable of finalizing state a cloned proxy - * - * @param \Doctrine\ORM\Mapping\ClassMetadata $classMetadata - * @param \Doctrine\ORM\Persisters\Entity\EntityPersister $entityPersister - * - * @return \Closure - * - * @throws \Doctrine\ORM\EntityNotFoundException - */ - private function createCloner(EntityPersister $entityPersister) - { - return function (BaseProxy $proxy) use ($entityPersister) { - if ($proxy->__isInitialized()) { - return; - } - - $proxy->__setInitialized(true); - $proxy->__setInitializer(null); - - $classMetadata = $entityPersister->getClassMetadata(); - $identifier = $classMetadata->getIdentifierValues($proxy); - $original = $entityPersister->loadById($identifier); - - if (null === $original) { - throw EntityNotFoundException::fromClassNameAndIdentifier( - $classMetadata->getName(), - $this->identifierFlattener->flattenIdentifier($classMetadata, $identifier) - ); - } - - foreach ($classMetadata->getProperties() as $property) { - /** @var Property $property */ - $property->setValue($proxy, $property->getValue($original)); - } - }; - } -} diff --git a/lib/Doctrine/ORM/Reflection/ReflectionService.php b/lib/Doctrine/ORM/Reflection/ReflectionService.php new file mode 100644 index 00000000000..31e277cb644 --- /dev/null +++ b/lib/Doctrine/ORM/Reflection/ReflectionService.php @@ -0,0 +1,90 @@ +. + */ + +namespace Doctrine\ORM\Reflection; + +/** + * Very simple reflection service abstraction. + * + * This is required inside metadata layers that may require either + * static or runtime reflection. + * + * @author Benjamin Eberlei + */ +interface ReflectionService +{ + /** + * Returns an array of the parent classes (not interfaces) for the given class. + * + * @param string $className + * + * @throws \InvalidArgumentException If provided argument is not a valid class name. + * + * @return array + */ + public function getParentClasses(string $className) : array; + + /** + * Returns the shortname of a class. + * + * @param string $className + * + * @return string + */ + public function getClassShortName(string $className) : string; + + /** + * @param string $className + * + * @return string + */ + public function getClassNamespace(string $className) : string; + + /** + * Returns a reflection class instance or null. + * + * @param string $className + * + * @return \ReflectionClass|null + */ + public function getClass(string $className) : ?\ReflectionClass; + + /** + * Returns an accessible property (setAccessible(true)) or null. + * + * @param string $className + * @param string $propertyName + * + * @return \ReflectionProperty|null + */ + public function getAccessibleProperty(string $className, string $propertyName) : ?\ReflectionProperty; + + /** + * Checks if the class have a public method with the given name. + * + * @param mixed $className + * @param mixed $methodName + * + * @return bool + */ + public function hasPublicMethod(string $className, string $methodName) : bool; +} diff --git a/lib/Doctrine/ORM/Reflection/RuntimePublicReflectionProperty.php b/lib/Doctrine/ORM/Reflection/RuntimePublicReflectionProperty.php new file mode 100644 index 00000000000..6d7edde36a2 --- /dev/null +++ b/lib/Doctrine/ORM/Reflection/RuntimePublicReflectionProperty.php @@ -0,0 +1,77 @@ +. + */ + +namespace Doctrine\ORM\Reflection; + +use Doctrine\ORM\Proxy\Proxy; + +/** + * PHP Runtime Reflection Public Property - special overrides for public properties. + * + * @author Marco Pivetta + * @since 2.4 + */ +class RuntimePublicReflectionProperty extends \ReflectionProperty +{ + /** + * {@inheritDoc} + * + * Checks is the value actually exist before fetching it. + * This is to avoid calling `__get` on the provided $object if it + * is a {@see \Doctrine\ORM\Proxy\Proxy}. + */ + public function getValue($object = null) + { + $name = $this->getName(); + + if ($object instanceof Proxy && ! $object->__isInitialized()) { + $originalInitialized = $object->__isInitialized(); + + $object->__setInitialized(true); + $val = isset($object->$name) ? $object->$name : null; + $object->__setInitialized($originalInitialized); + + return $val; + } + + return isset($object->$name) ? parent::getValue($object) : null; + } + + /** + * {@inheritDoc} + * + * Avoids triggering lazy loading via `__set` if the provided object + * is a {@see \Doctrine\ORM\Proxy\Proxy}. + * @link https://bugs.php.net/bug.php?id=63463 + */ + public function setValue($object, $value = null) + { + if ($object instanceof Proxy && ! $object->__isInitialized()) { + $originalInitialized = $object->__isInitialized(); + + $object->__setInitialized(true); + parent::setValue($object, $value); + $object->__setInitialized($originalInitialized); + + return; + } + + parent::setValue($object, $value); + } +} diff --git a/lib/Doctrine/ORM/Reflection/RuntimeReflectionService.php b/lib/Doctrine/ORM/Reflection/RuntimeReflectionService.php new file mode 100644 index 00000000000..fd2dd3ad0e5 --- /dev/null +++ b/lib/Doctrine/ORM/Reflection/RuntimeReflectionService.php @@ -0,0 +1,103 @@ +. + */ + +namespace Doctrine\ORM\Reflection; + +use Doctrine\Common\Persistence\Mapping\MappingException; + +/** + * PHP Runtime Reflection Service. + * + * @author Benjamin Eberlei + */ +class RuntimeReflectionService implements ReflectionService +{ + /** + * {@inheritdoc} + */ + public function getParentClasses(string $className) : array + { + if (! class_exists($className)) { + throw MappingException::nonExistingClass($className); + } + + return class_parents($className); + } + + /** + * {@inheritdoc} + */ + public function getClassShortName(string $className) : string + { + $reflectionClass = new \ReflectionClass($className); + + return $reflectionClass->getShortName(); + } + + /** + * {@inheritdoc} + */ + public function getClassNamespace(string $className) : string + { + $reflectionClass = new \ReflectionClass($className); + + return $reflectionClass->getNamespaceName(); + } + + /** + * {@inheritdoc} + */ + public function getClass(string $className) : ?\ReflectionClass + { + return new \ReflectionClass($className); + } + + /** + * {@inheritdoc} + */ + public function getAccessibleProperty(string $className, string $propertyName) : ?\ReflectionProperty + { + $reflectionProperty = new \ReflectionProperty($className, $propertyName); + + if ($reflectionProperty->isPublic()) { + $reflectionProperty = new RuntimePublicReflectionProperty($className, $propertyName); + } + + $reflectionProperty->setAccessible(true); + + return $reflectionProperty; + } + + /** + * {@inheritdoc} + */ + public function hasPublicMethod(string $className, string $methodName) : bool + { + try { + $reflectionMethod = new \ReflectionMethod($className, $methodName); + } catch (\ReflectionException $e) { + return false; + } + + return $reflectionMethod->isPublic(); + } +} diff --git a/lib/Doctrine/ORM/Reflection/StaticReflectionService.php b/lib/Doctrine/ORM/Reflection/StaticReflectionService.php new file mode 100644 index 00000000000..f15c0b514c3 --- /dev/null +++ b/lib/Doctrine/ORM/Reflection/StaticReflectionService.php @@ -0,0 +1,88 @@ +. + */ + +namespace Doctrine\ORM\Reflection; + +/** + * PHP Runtime Reflection Service. + * + * @author Benjamin Eberlei + */ +class StaticReflectionService implements ReflectionService +{ + /** + * {@inheritDoc} + */ + public function getParentClasses(string $className) : array + { + return []; + } + + /** + * {@inheritDoc} + */ + public function getClassShortName(string $className) : string + { + if (strpos($className, '\\') !== false) { + $className = substr($className, strrpos($className, "\\")+1); + } + return $className; + } + + /** + * {@inheritDoc} + */ + public function getClassNamespace(string $className) : string + { + $namespace = ''; + + if (strpos($className, '\\') !== false) { + $namespace = strrev(substr( strrev($className), strpos(strrev($className), '\\')+1 )); + } + + return $namespace; + } + + /** + * {@inheritDoc} + */ + public function getClass(string $className) : ?\ReflectionClass + { + return null; + } + + /** + * {@inheritDoc} + */ + public function getAccessibleProperty(string $className, string $propertyName) : ?\ReflectionProperty + { + return null; + } + + /** + * {@inheritDoc} + */ + public function hasPublicMethod(string $className, string $methodName) : bool + { + return true; + } +} diff --git a/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php b/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php index 560df367925..d75bf94bc67 100644 --- a/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php @@ -19,7 +19,7 @@ namespace Doctrine\ORM\Tools; -use Doctrine\Common\Persistence\Mapping\StaticReflectionService; +use Doctrine\ORM\Reflection\StaticReflectionService; use Doctrine\ORM\Mapping\ClassMetadataFactory; /** @@ -39,7 +39,7 @@ class DisconnectedClassMetadataFactory extends ClassMetadataFactory { /** - * @return \Doctrine\Common\Persistence\Mapping\StaticReflectionService + * @return StaticReflectionService */ public function getReflectionService() { diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 42a85b0c4a5..efbbf0cb0ea 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -485,7 +485,7 @@ private function computeSingleEntityChangeSet($entity) } // Ignore uninitialized proxy objects - if ($entity instanceof Proxy && ! $entity->__isInitialized__) { + if ($entity instanceof Proxy && ! $entity->__isInitialized()) { return; } @@ -781,7 +781,7 @@ public function computeChangeSets() foreach ($entitiesToProcess as $entity) { // Ignore uninitialized proxy objects - if ($entity instanceof Proxy && ! $entity->__isInitialized__) { + if ($entity instanceof Proxy && ! $entity->__isInitialized()) { continue; } @@ -808,7 +808,7 @@ public function computeChangeSets() */ private function computeAssociationChanges(AssociationMetadata $association, $value) { - if ($value instanceof Proxy && ! $value->__isInitialized__) { + if ($value instanceof Proxy && ! $value->__isInitialized()) { return; } @@ -2303,7 +2303,7 @@ function (Property $property) { ); foreach ($associations as $association) { - if ($entity instanceof Proxy && !$entity->__isInitialized__) { + if ($entity instanceof Proxy && ! $entity->__isInitialized()) { $entity->__load(); } @@ -2367,7 +2367,7 @@ public function lock($entity, $lockMode, $lockVersion = null) return; } - if ($entity instanceof Proxy && !$entity->__isInitialized__) { + if ($entity instanceof Proxy && ! $entity->__isInitialized()) { $entity->__load(); } @@ -2633,7 +2633,7 @@ public function createEntity($className, array $data, &$hints = []) if (! ($association instanceof AssociationMetadata)) { continue; } - + // Check if the association is not among the fetch-joined associations already. if (isset($hints['fetchAlias']) && isset($hints['fetched'][$hints['fetchAlias']][$field])) { continue; @@ -2758,7 +2758,7 @@ public function createEntity($className, array $data, &$hints = []) $newValue instanceof Proxy && isset($hints[self::HINT_DEFEREAGERLOAD]) && $hints['fetchMode'][$class->name][$field] === FetchMode::EAGER && - $newValue->__isInitialized__ === false + ! $newValue->__isInitialized() ) { $this->eagerLoadingEntities[$targetClass->rootEntityName][$relatedIdHash] = current($associatedId); @@ -2775,7 +2775,7 @@ public function createEntity($className, array $data, &$hints = []) break; default: - // Proxies do not carry any kind of original entity data until they'e fully loaded/initialized + // Proxies do not carry any kind of original entity data until they're fully loaded/initialized $managedData = []; switch (true) { @@ -3113,7 +3113,7 @@ public function getCollectionPersister(ToManyAssociationMetadata $association) */ public function registerManaged($entity, array $id, array $data) { - $isProxy = ! $entity instanceof Proxy || $entity->__isInitialized(); + $isProxy = $entity instanceof Proxy && ! $entity->__isInitialized(); $oid = spl_object_hash($entity); $this->entityIdentifiers[$oid] = $id; @@ -3122,7 +3122,7 @@ public function registerManaged($entity, array $id, array $data) $this->addToIdentityMap($entity); - if ($entity instanceof NotifyPropertyChanged && $isProxy) { + if ($entity instanceof NotifyPropertyChanged && ! $isProxy) { $entity->addPropertyChangedListener($this); } } diff --git a/tests/Doctrine/Performance/EntityManagerFactory.php b/tests/Doctrine/Performance/EntityManagerFactory.php index d856f9e2948..73611ac61d2 100644 --- a/tests/Doctrine/Performance/EntityManagerFactory.php +++ b/tests/Doctrine/Performance/EntityManagerFactory.php @@ -6,7 +6,7 @@ use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManager; use Doctrine\ORM\EntityManagerInterface; -use Doctrine\ORM\Proxy\ProxyFactory; +use Doctrine\ORM\Proxy\Factory\StaticProxyFactory; use Doctrine\ORM\Tools\SchemaTool; final class EntityManagerFactory @@ -17,7 +17,7 @@ public static function getEntityManager(array $schemaClassNames) : EntityManager $config->setProxyDir(__DIR__ . '/../Tests/Proxies'); $config->setProxyNamespace('Doctrine\Tests\Proxies'); - $config->setAutoGenerateProxyClasses(ProxyFactory::AUTOGENERATE_EVAL); + $config->setAutoGenerateProxyClasses(StaticProxyFactory::AUTOGENERATE_EVAL); $config->setMetadataDriverImpl( $config->newDefaultAnnotationDriver([ realpath(__DIR__ . '/Models/Cache'), diff --git a/tests/Doctrine/Tests/Mocks/EntityManagerMock.php b/tests/Doctrine/Tests/Mocks/EntityManagerMock.php index 01b4ed26f39..a9697b824be 100644 --- a/tests/Doctrine/Tests/Mocks/EntityManagerMock.php +++ b/tests/Doctrine/Tests/Mocks/EntityManagerMock.php @@ -17,7 +17,7 @@ class EntityManagerMock extends EntityManager private $uowMock; /** - * @var \Doctrine\ORM\Proxy\ProxyFactory|null + * @var \Doctrine\ORM\Proxy\Factory\ProxyFactory|null */ private $proxyFactoryMock; @@ -44,7 +44,7 @@ public function setUnitOfWork($uow) } /** - * @param \Doctrine\ORM\Proxy\ProxyFactory $proxyFactory + * @param \Doctrine\ORM\Proxy\Factory\ProxyFactory $proxyFactory * * @return void */ @@ -54,7 +54,7 @@ public function setProxyFactory($proxyFactory) } /** - * @return \Doctrine\ORM\Proxy\ProxyFactory + * @return \Doctrine\ORM\Proxy\Factory\ProxyFactory */ public function getProxyFactory() { diff --git a/tests/Doctrine/Tests/ORM/EntityManagerTest.php b/tests/Doctrine/Tests/ORM/EntityManagerTest.php index ac41c65d6dd..6d27b4102ae 100644 --- a/tests/Doctrine/Tests/ORM/EntityManagerTest.php +++ b/tests/Doctrine/Tests/ORM/EntityManagerTest.php @@ -4,7 +4,6 @@ use Doctrine\Common\EventManager; use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; -use Doctrine\Common\Persistence\Mapping\MappingException; use Doctrine\DBAL\Connection; use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManager; @@ -12,7 +11,7 @@ use Doctrine\ORM\NativeQuery; use Doctrine\ORM\ORMException; use Doctrine\ORM\ORMInvalidArgumentException; -use Doctrine\ORM\Proxy\ProxyFactory; +use Doctrine\ORM\Proxy\Factory\ProxyFactory; use Doctrine\ORM\Query; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\ORM\QueryBuilder; diff --git a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php index 5cf47545216..f89044a0b00 100644 --- a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php @@ -690,7 +690,7 @@ public function testQueryEntityByReference() self::assertInstanceOf(Proxy::class, $address2->getUser()); self::assertTrue($userRef === $address2->getUser()); - self::assertFalse($userRef->__isInitialized__); + self::assertFalse($userRef->__isInitialized()); self::assertEquals('Germany', $address2->country); self::assertEquals('Berlin', $address2->city); self::assertEquals('12345', $address2->zip); @@ -1000,7 +1000,7 @@ public function testManyToOneFetchModeQuery() ->getSingleResult(); self::assertInstanceOf(Proxy::class, $article->user, "It IS a proxy, ..."); - self::assertTrue($article->user->__isInitialized__, "...but its initialized!"); + self::assertTrue($article->user->__isInitialized(), "...but its initialized!"); self::assertEquals($qc+2, $this->getCurrentQueryCount()); } diff --git a/tests/Doctrine/Tests/ORM/Functional/DefaultValuesTest.php b/tests/Doctrine/Tests/ORM/Functional/DefaultValuesTest.php index 22bc447e313..0be3bf46a00 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DefaultValuesTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DefaultValuesTest.php @@ -41,7 +41,7 @@ public function testSimpleDetachMerge() { $user2 = $this->em->getReference(get_class($user), $userId); $this->em->flush(); - self::assertFalse($user2->__isInitialized__); + self::assertFalse($user2->__isInitialized()); $a = new DefaultValueAddress; $a->country = 'de'; @@ -53,7 +53,7 @@ public function testSimpleDetachMerge() { $this->em->persist($a); $this->em->flush(); - self::assertFalse($user2->__isInitialized__); + self::assertFalse($user2->__isInitialized()); $this->em->clear(); $a2 = $this->em->find(get_class($a), $a->id); diff --git a/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php b/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php index 26a1d734544..3368dbb5dea 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php @@ -147,15 +147,15 @@ public function testUninitializedLazyAssociationsAreIgnoredOnMerge() $address2 = $this->em->find(get_class($address), $address->id); self::assertInstanceOf(Proxy::class, $address2->user); - self::assertFalse($address2->user->__isInitialized__); + self::assertFalse($address2->user->__isInitialized()); $detachedAddress2 = unserialize(serialize($address2)); self::assertInstanceOf(Proxy::class, $detachedAddress2->user); - self::assertFalse($detachedAddress2->user->__isInitialized__); + self::assertFalse($detachedAddress2->user->__isInitialized()); $managedAddress2 = $this->em->merge($detachedAddress2); self::assertInstanceOf(Proxy::class, $managedAddress2->user); self::assertFalse($managedAddress2->user === $detachedAddress2->user); - self::assertFalse($managedAddress2->user->__isInitialized__); + self::assertFalse($managedAddress2->user->__isInitialized()); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/OneToManyBidirectionalAssociationTest.php b/tests/Doctrine/Tests/ORM/Functional/OneToManyBidirectionalAssociationTest.php index 6d893cdaf04..1bca9a30292 100644 --- a/tests/Doctrine/Tests/ORM/Functional/OneToManyBidirectionalAssociationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/OneToManyBidirectionalAssociationTest.php @@ -117,9 +117,9 @@ public function testLazyLoadsObjectsOnTheInverseSide() $product = $features[0]->getProduct(); self::assertInstanceOf(Proxy::class, $product); self::assertInstanceOf(ECommerceProduct::class, $product); - self::assertFalse($product->__isInitialized__); + self::assertFalse($product->__isInitialized()); self::assertSame('Doctrine Cookbook', $product->getName()); - self::assertTrue($product->__isInitialized__); + self::assertTrue($product->__isInitialized()); } public function testLazyLoadsObjectsOnTheInverseSide2() diff --git a/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php b/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php index 6657f183352..61107ca09e7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php @@ -59,24 +59,24 @@ public function testPersistUpdate() { // Considering case (a) $proxy = $this->em->getProxyFactory()->getProxy(CmsUser::class, ['id' => 123]); - - $proxy->__isInitialized__ = true; + + $proxy->__setInitialized(true); $proxy->id = null; $proxy->username = 'ocra'; $proxy->name = 'Marco'; - + $this->em->persist($proxy); $this->em->flush(); - + self::assertNotNull($proxy->getId()); - + $proxy->name = 'Marco Pivetta'; - + $this->em->getUnitOfWork() ->computeChangeSet($this->em->getClassMetadata(CmsUser::class), $proxy); self::assertNotEmpty($this->em->getUnitOfWork()->getEntityChangeSet($proxy)); self::assertEquals('Marco Pivetta', $this->em->find(CmsUser::class, $proxy->getId())->name); - + $this->em->remove($proxy); $this->em->flush(); } @@ -102,17 +102,17 @@ public function testEntityWithIdentifier() public function testProxyAsDqlParameterPersist() { $proxy = $this->em->getProxyFactory()->getProxy(CmsUser::class, ['id' => $this->user->getId()]); - + $proxy->id = $this->user->getId(); - + $result = $this ->em ->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u = ?1') ->setParameter(1, $proxy) ->getSingleResult(); - + self::assertSame($this->user->getId(), $result->getId()); - + $this->em->remove($proxy); $this->em->flush(); } @@ -123,32 +123,32 @@ public function testProxyAsDqlParameterPersist() public function testFindWithProxyName() { $result = $this->em->find(CmsUserProxy::class, $this->user->getId()); - + self::assertSame($this->user->getId(), $result->getId()); - + $this->em->clear(); $result = $this->em->getReference(CmsUserProxy::class, $this->user->getId()); - + self::assertSame($this->user->getId(), $result->getId()); - + $this->em->clear(); $result = $this->em->getRepository(CmsUserProxy::class)->findOneBy([ 'username' => $this->user->username ]); - + self::assertSame($this->user->getId(), $result->getId()); - + $this->em->clear(); $result = $this->em ->createQuery('SELECT u FROM Doctrine\Tests\Proxies\__CG__\Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1') ->setParameter(1, $this->user->getId()) ->getSingleResult(); - + self::assertSame($this->user->getId(), $result->getId()); - + $this->em->clear(); } diff --git a/tests/Doctrine/Tests/ORM/Functional/QueryTest.php b/tests/Doctrine/Tests/ORM/Functional/QueryTest.php index 443f50b4457..e9b439691e0 100644 --- a/tests/Doctrine/Tests/ORM/Functional/QueryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/QueryTest.php @@ -456,7 +456,7 @@ public function testEntityParameters() self::assertInstanceOf(CmsArticle::class, $result[0]); self::assertEquals("dr. dolittle", $result[0]->topic); self::assertInstanceOf(Proxy::class, $result[0]->user); - self::assertFalse($result[0]->user->__isInitialized__); + self::assertFalse($result[0]->user->__isInitialized()); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php b/tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php index 20b09cae34a..467184f9cc7 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php @@ -2,11 +2,13 @@ namespace Doctrine\Tests\ORM\Functional; -use Doctrine\Common\Persistence\Proxy; -use Doctrine\Common\Proxy\AbstractProxyFactory; use Doctrine\Common\Util\ClassUtils; use Doctrine\ORM\Configuration\ProxyConfiguration; -use Doctrine\ORM\Proxy\ProxyFactory; +use Doctrine\ORM\Proxy\Factory\DefaultProxyResolver; +use Doctrine\ORM\Proxy\Factory\ProxyResolver; +use Doctrine\ORM\Proxy\Proxy; +use Doctrine\ORM\Proxy\Factory\ProxyFactory; +use Doctrine\ORM\Proxy\Factory\StaticProxyFactory; use Doctrine\Tests\Models\Company\CompanyAuction; use Doctrine\Tests\Models\ECommerce\ECommerceProduct; use Doctrine\Tests\Models\ECommerce\ECommerceShipping; @@ -14,11 +16,22 @@ /** * Tests the generation of a proxy object for lazy loading. + * * @author Giorgio Sironi * @author Benjamin Eberlei */ class ReferenceProxyTest extends OrmFunctionalTestCase { + /** + * @var ProxyResolver + */ + private $resolver; + + /** + * @var ProxyFactory + */ + private $factory; + protected function setUp() { $this->useModelSet('ecommerce'); @@ -26,13 +39,19 @@ protected function setUp() parent::setUp(); + $namespace = 'Doctrine\Tests\Proxies'; + $directory = __DIR__ . '/../../Proxies'; + + $this->resolver = new DefaultProxyResolver($namespace, $directory); + $proxyConfiguration = new ProxyConfiguration(); - $proxyConfiguration->setDirectory(__DIR__ . '/../../Proxies'); - $proxyConfiguration->setNamespace('Doctrine\Tests\Proxies'); - $proxyConfiguration->setAutoGenerate(AbstractProxyFactory::AUTOGENERATE_ALWAYS); + $proxyConfiguration->setDirectory($directory); + $proxyConfiguration->setNamespace($namespace); + $proxyConfiguration->setAutoGenerate(ProxyFactory::AUTOGENERATE_ALWAYS); + $proxyConfiguration->setResolver($this->resolver); - $this->factory = new ProxyFactory($this->em, $proxyConfiguration); + $this->factory = new StaticProxyFactory($this->em, $proxyConfiguration); } public function createProduct() @@ -64,6 +83,7 @@ public function testLazyLoadsFieldValuesFromDatabase() $id = $this->createProduct(); $productProxy = $this->em->getReference(ECommerceProduct::class, ['id' => $id]); + self::assertEquals('Doctrine Cookbook', $productProxy->getName()); } @@ -129,9 +149,11 @@ public function testInitializeProxy() /* @var $entity ECommerceProduct */ $entity = $this->em->getReference(ECommerceProduct::class , $id); - self::assertFalse($entity->__isInitialized__, "Pre-Condition: Object is unitialized proxy."); + self::assertFalse($entity->__isInitialized(), "Pre-Condition: Object is unitialized proxy."); + $this->em->getUnitOfWork()->initializeObject($entity); - self::assertTrue($entity->__isInitialized__, "Should be initialized after called UnitOfWork::initializeObject()"); + + self::assertTrue($entity->__isInitialized(), "Should be initialized after called UnitOfWork::initializeObject()"); } /** @@ -143,12 +165,14 @@ public function testInitializeChangeAndFlushProxy() /* @var $entity ECommerceProduct */ $entity = $this->em->getReference(ECommerceProduct::class , $id); + $entity->setName('Doctrine 2 Cookbook'); $this->em->flush(); $this->em->clear(); $entity = $this->em->getReference(ECommerceProduct::class , $id); + self::assertEquals('Doctrine 2 Cookbook', $entity->getName()); } @@ -176,9 +200,9 @@ public function testDoNotInitializeProxyOnGettingTheIdentifier() /* @var $entity ECommerceProduct */ $entity = $this->em->getReference(ECommerceProduct::class , $id); - self::assertFalse($entity->__isInitialized__, "Pre-Condition: Object is unitialized proxy."); + self::assertFalse($entity->__isInitialized(), "Pre-Condition: Object is unitialized proxy."); self::assertEquals($id, $entity->getId()); - self::assertFalse($entity->__isInitialized__, "Getting the identifier doesn't initialize the proxy."); + self::assertFalse($entity->__isInitialized(), "Getting the identifier doesn't initialize the proxy."); } /** @@ -191,9 +215,9 @@ public function testDoNotInitializeProxyOnGettingTheIdentifier_DDC_1625() /* @var $entity CompanyAuction */ $entity = $this->em->getReference(CompanyAuction::class , $id); - self::assertFalse($entity->__isInitialized__, "Pre-Condition: Object is unitialized proxy."); + self::assertFalse($entity->__isInitialized(), "Pre-Condition: Object is unitialized proxy."); self::assertEquals($id, $entity->getId()); - self::assertFalse($entity->__isInitialized__, "Getting the identifier doesn't initialize the proxy when extending."); + self::assertFalse($entity->__isInitialized(), "Getting the identifier doesn't initialize the proxy when extending."); } public function testDoNotInitializeProxyOnGettingTheIdentifierAndReturnTheRightType() @@ -204,6 +228,7 @@ public function testDoNotInitializeProxyOnGettingTheIdentifierAndReturnTheRightT $shipping = new ECommerceShipping(); $shipping->setDays(1); $product->setShipping($shipping); + $this->em->persist($product); $this->em->flush(); $this->em->clear(); @@ -213,10 +238,11 @@ public function testDoNotInitializeProxyOnGettingTheIdentifierAndReturnTheRightT $product = $this->em->getRepository(ECommerceProduct::class)->find($product->getId()); $entity = $product->getShipping(); - self::assertFalse($entity->__isInitialized__, "Pre-Condition: Object is unitialized proxy."); + + self::assertFalse($entity->__isInitialized(), "Pre-Condition: Object is unitialized proxy."); self::assertEquals($id, $entity->getId()); self::assertSame($id, $entity->getId(), "Check that the id's are the same value, and type."); - self::assertFalse($entity->__isInitialized__, "Getting the identifier doesn't initialize the proxy."); + self::assertFalse($entity->__isInitialized(), "Getting the identifier doesn't initialize the proxy."); } public function testInitializeProxyOnGettingSomethingOtherThanTheIdentifier() @@ -226,9 +252,9 @@ public function testInitializeProxyOnGettingSomethingOtherThanTheIdentifier() /* @var $entity ECommerceProduct */ $entity = $this->em->getReference(ECommerceProduct::class , $id); - self::assertFalse($entity->__isInitialized__, "Pre-Condition: Object is unitialized proxy."); + self::assertFalse($entity->__isInitialized(), "Pre-Condition: Object is unitialized proxy."); self::assertEquals('Doctrine Cookbook', $entity->getName()); - self::assertTrue($entity->__isInitialized__, "Getting something other than the identifier initializes the proxy."); + self::assertTrue($entity->__isInitialized(), "Getting something other than the identifier initializes the proxy."); } /** @@ -240,18 +266,19 @@ public function testCommonPersistenceProxy() /* @var $entity ECommerceProduct */ $entity = $this->em->getReference(ECommerceProduct::class , $id); + $className = ClassUtils::getClass($entity); self::assertInstanceOf(Proxy::class, $entity); self::assertFalse($entity->__isInitialized()); self::assertEquals(ECommerceProduct::class, $className); - $restName = str_replace($this->em->getConfiguration()->getProxyNamespace(), "", get_class($entity)); - $restName = substr(get_class($entity), strlen($this->em->getConfiguration()->getProxyNamespace()) +1); - $proxyFileName = $this->em->getConfiguration()->getProxyDir() . DIRECTORY_SEPARATOR . str_replace("\\", "", $restName) . ".php"; + $proxyFileName = $this->resolver->resolveProxyClassPath(ECommerceProduct::class ); + self::assertTrue(file_exists($proxyFileName), "Proxy file name cannot be found generically."); $entity->__load(); + self::assertTrue($entity->__isInitialized()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1193Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1193Test.php index f05c1ac5e8f..bec5bc9bb92 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1193Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1193Test.php @@ -45,7 +45,7 @@ public function testIssue() $company = $this->em->find(get_class($company), $companyId); self::assertTrue($this->em->getUnitOfWork()->isInIdentityMap($company), "Company is in identity map."); - self::assertFalse($company->member->__isInitialized__, "Pre-Condition"); + self::assertFalse($company->member->__isInitialized(), "Pre-Condition"); self::assertTrue($this->em->getUnitOfWork()->isInIdentityMap($company->member), "Member is in identity map."); $this->em->remove($company); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1228Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1228Test.php index 447f19978f8..8e60ffa526c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1228Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1228Test.php @@ -39,9 +39,9 @@ public function testOneToOnePersist() $user = $this->em->find(DDC1228User::class, $user->id); - self::assertFalse($user->getProfile()->__isInitialized__, "Proxy is not initialized"); + self::assertFalse($user->getProfile()->__isInitialized(), "Proxy is not initialized"); $user->getProfile()->setName("Bar"); - self::assertTrue($user->getProfile()->__isInitialized__, "Proxy is not initialized"); + self::assertTrue($user->getProfile()->__isInitialized(), "Proxy is not initialized"); self::assertEquals("Bar", $user->getProfile()->getName()); self::assertEquals(["id" => 1, "name" => "Foo"], $this->em->getUnitOfWork()->getOriginalEntityData($user->getProfile())); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php index 2da6eab8185..70fc0333d0d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php @@ -4,8 +4,8 @@ use Doctrine\Common\NotifyPropertyChanged; use Doctrine\Common\PropertyChangedListener; -use Doctrine\Common\Proxy\Proxy; use Doctrine\ORM\Annotation as ORM; +use Doctrine\ORM\Proxy\Proxy; use Doctrine\ORM\Tools\ToolsException; use Doctrine\Tests\OrmFunctionalTestCase; @@ -19,12 +19,10 @@ protected function setUp() parent::setUp(); try { - $this->schemaTool->createSchema( - [ + $this->schemaTool->createSchema([ $this->em->getClassMetadata(DDC2230User::class), $this->em->getClassMetadata(DDC2230Address::class), - ] - ); + ]); } catch (ToolsException $e) {} } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php index 0cc0bc9da50..c0f98263efc 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php @@ -16,11 +16,10 @@ class DDC2231Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { parent::setUp(); - $this->schemaTool->createSchema( - [ + + $this->schemaTool->createSchema([ $this->em->getClassMetadata(DDC2231EntityY::class), - ] - ); + ]); } public function testInjectObjectManagerInProxyIfInitializedInUow() @@ -35,11 +34,11 @@ public function testInjectObjectManagerInProxyIfInitializedInUow() $y1ref = $this->em->getReference(get_class($y1), $y1->id); self::assertInstanceOf(Proxy::class, $y1ref); - self::assertFalse($y1ref->__isInitialized__); + self::assertFalse($y1ref->__isInitialized()); $id = $y1ref->doSomething(); - self::assertTrue($y1ref->__isInitialized__); + self::assertTrue($y1ref->__isInitialized()); self::assertEquals($this->em, $y1ref->om); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php index 217d364e99e..3323332bb9a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php @@ -41,7 +41,7 @@ public function testUninitializedProxyIsInitializedOnFetchJoin() $x2 = $this->em->find(get_class($x), $x->id); // proxy injected for Y self::assertInstanceOf(Proxy::class, $x2->y); - self::assertFalse($x2->y->__isInitialized__); + self::assertFalse($x2->y->__isInitialized()); // proxy for Y is in identity map @@ -49,7 +49,7 @@ public function testUninitializedProxyIsInitializedOnFetchJoin() ->setParameter(1, $z->id) ->getSingleResult(); self::assertInstanceOf(Proxy::class, $z2->y); - self::assertTrue($z2->y->__isInitialized__); + self::assertTrue($z2->y->__isInitialized()); self::assertEquals('Y', $z2->y->data); self::assertEquals($y->id, $z2->y->id); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2494Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2494Test.php index c170dd988cd..5419197a20e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2494Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2494Test.php @@ -51,7 +51,7 @@ public function testIssue() $queryCount = $this->getCurrentQueryCount(); - self::assertInstanceOf('\Doctrine\Common\Proxy\Proxy', $item->getCurrency()); + self::assertInstanceOf('Doctrine\ORM\Proxy\Proxy', $item->getCurrency()); self::assertFalse($item->getCurrency()->__isInitialized()); self::assertArrayHasKey('convertToPHPValue', DDC2494TinyIntType::$calls); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC522Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC522Test.php index 678350ce523..434cb5842bd 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC522Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC522Test.php @@ -68,7 +68,7 @@ public function testJoinColumnWithSameNameAsAssociationField() self::assertEquals($fkt->cart->id, $cartId); self::assertInstanceOf(Proxy::class, $fkt2->cart); - self::assertFalse($fkt2->cart->__isInitialized__); + self::assertFalse($fkt2->cart->__isInitialized()); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC633Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC633Test.php index 8b2bf4a7d92..708cb0b5240 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC633Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC633Test.php @@ -68,7 +68,7 @@ public function testDQLDeferredEagerLoad() foreach ($appointments AS $eagerAppointment) { self::assertInstanceOf(Proxy::class, $eagerAppointment->patient); - self::assertTrue($eagerAppointment->patient->__isInitialized__, "Proxy should already be initialized due to eager loading!"); + self::assertTrue($eagerAppointment->patient->__isInitialized(), "Proxy should already be initialized due to eager loading!"); } } } diff --git a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php index 5c9053c4d50..d5f79e86034 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php @@ -2,13 +2,12 @@ namespace Doctrine\Tests\ORM\Hydration; -use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Annotation\OneToOne; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; use Doctrine\ORM\Query\ResultSetMapping; +use Doctrine\ORM\Reflection\RuntimeReflectionService; use Doctrine\Tests\Models\CMS\CmsEmail; use Doctrine\Tests\Models\CMS\CmsPhonenumber; use Doctrine\Tests\Models\CMS\CmsUser; diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 24ee514efdc..edab31245cf 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -2,7 +2,6 @@ namespace Doctrine\Tests\ORM\Mapping; -use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\EntityManager; @@ -13,6 +12,7 @@ use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; use Doctrine\ORM\Mapping\Factory\UnderscoreNamingStrategy; use Doctrine\ORM\Mapping\MappingException; +use Doctrine\ORM\Reflection\RuntimeReflectionService; use Doctrine\Tests\Models\Cache\City; use Doctrine\Tests\Models\CMS\CmsAddress; use Doctrine\Tests\Models\CMS\CmsAddressListener; diff --git a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php index 01242316bba..39727eae086 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php @@ -4,12 +4,12 @@ use Doctrine\Common\Annotations\AnnotationException; use Doctrine\Common\Annotations\AnnotationReader; -use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; use Doctrine\ORM\Mapping\MappingException; +use Doctrine\ORM\Reflection\RuntimeReflectionService; use Doctrine\Tests\Models\CMS\CmsUser; use Doctrine\Tests\Models\DDC1872\DDC1872ExampleEntityWithoutOverride; use Doctrine\Tests\Models\DDC1872\DDC1872ExampleEntityWithOverride; diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index 9c5efa9a643..407f6a7f879 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -2,14 +2,13 @@ namespace Doctrine\Tests\ORM\Mapping; -use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\EntityRepository; use Doctrine\ORM\Mapping\TransientMetadata; -use Doctrine\ORM\Sequencing\SequenceGenerator; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\MappingException; +use Doctrine\ORM\Sequencing\SequenceGenerator; use Doctrine\Tests\Models\DDC869\DDC869ChequePayment; use Doctrine\Tests\Models\DDC869\DDC869CreditCardPayment; use Doctrine\Tests\Models\DDC869\DDC869Payment; diff --git a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php index 63b74a359d6..b67d55b50fc 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php @@ -2,13 +2,13 @@ namespace Doctrine\Tests\ORM\Mapping\Builder; -use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; use Doctrine\ORM\Mapping\Builder\EmbeddedBuilder; use Doctrine\ORM\Mapping\Builder\FieldBuilder; use Doctrine\ORM\Mapping\ChangeTrackingPolicy; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Reflection\RuntimeReflectionService; use Doctrine\Tests\Models\CMS\CmsGroup; use Doctrine\Tests\Models\CMS\CmsUser; use Doctrine\Tests\Models\ValueObjects\Name; diff --git a/tests/Doctrine/Tests/ORM/Mapping/Builder/TableMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/TableMetadataBuilderTest.php index b307d704b32..c9a423d5755 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Builder/TableMetadataBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Builder/TableMetadataBuilderTest.php @@ -19,12 +19,7 @@ namespace Doctrine\Tests\ORM\Mapping\Builder; -use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; -use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; use Doctrine\ORM\Mapping\Builder\TableMetadataBuilder; -use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; use Doctrine\Tests\OrmTestCase; /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index b90a62c1b46..ea92ce8c838 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -4,7 +4,6 @@ use Doctrine\Common\EventManager; use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; -use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\DBAL\Connection; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Configuration; @@ -18,6 +17,7 @@ use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\ORMException; +use Doctrine\ORM\Reflection\RuntimeReflectionService; use Doctrine\Tests\Mocks\ConnectionMock; use Doctrine\Tests\Mocks\DriverMock; use Doctrine\Tests\Mocks\EntityManagerMock; @@ -247,12 +247,16 @@ protected function createEntityManager($metadataDriver, $conn = null) { $driverMock = new DriverMock(); $config = new Configuration(); + $config->setProxyDir(__DIR__ . '/../../Proxies'); $config->setProxyNamespace('Doctrine\Tests\Proxies'); + $eventManager = new EventManager(); + if (!$conn) { $conn = new ConnectionMock([], $driverMock, $config, $eventManager); } + $config->setMetadataDriverImpl($metadataDriver); return EntityManagerMock::create($conn, $config, $eventManager); @@ -412,11 +416,12 @@ public function testQuoteMetadata() public function testFallbackLoadingCausesEventTriggeringThatCanModifyFetchedMetadata() { $test = $this; + /* @var $metadata \Doctrine\Common\Persistence\Mapping\ClassMetadata */ $metadata = $this->createMock(ClassMetadata::class); $cmf = new ClassMetadataFactory(); $mockDriver = new MetadataDriverMock(); - $em = $this->createEntityManager($mockDriver); + $em = $this->createEntityManager($mockDriver); $listener = $this->getMockBuilder(\stdClass::class)->setMethods(['onClassMetadataNotFound'])->getMock(); $eventManager = $em->getEventManager(); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 208f46d7eb7..30e7622e032 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -2,8 +2,6 @@ namespace Doctrine\Tests\ORM\Mapping; -use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; -use Doctrine\Common\Persistence\Mapping\StaticReflectionService; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Events; use Doctrine\ORM\Mapping; @@ -13,6 +11,8 @@ use Doctrine\ORM\Mapping\Factory\UnderscoreNamingStrategy; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\MappingException; +use Doctrine\ORM\Reflection\RuntimeReflectionService; +use Doctrine\ORM\Reflection\StaticReflectionService; use Doctrine\Tests\Models\CMS; use Doctrine\Tests\Models\Company\CompanyContract; use Doctrine\Tests\Models\CustomType\CustomTypeParent; diff --git a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php index 4ab400e1771..0cbee4fc4a0 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php @@ -2,10 +2,10 @@ namespace Doctrine\Tests\ORM\Mapping; -use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\Driver\XmlDriver; +use Doctrine\ORM\Reflection\RuntimeReflectionService; use Doctrine\Tests\Models\DDC117\DDC117Translation; use Doctrine\Tests\Models\DDC3293\DDC3293User; use Doctrine\Tests\Models\DDC3293\DDC3293UserPrefixed; @@ -66,7 +66,7 @@ public function testIdentifierWithAssociationKey() self::assertArrayHasKey('article', $class->getProperties()); $association = $class->getProperty('article'); - + self::assertTrue($association->isPrimaryKey()); } diff --git a/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php b/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php index 42e51d238b3..e47ed492b3b 100644 --- a/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php @@ -2,13 +2,14 @@ namespace Doctrine\Tests\ORM\Proxy; -use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; -use Doctrine\Common\Proxy\AbstractProxyFactory; +use Doctrine\ORM\Proxy\Factory\DefaultProxyResolver; +use Doctrine\ORM\Proxy\Factory\ProxyFactory; use Doctrine\ORM\Configuration\ProxyConfiguration; use Doctrine\ORM\EntityNotFoundException; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Persisters\Entity\BasicEntityPersister; -use Doctrine\ORM\Proxy\ProxyFactory; +use Doctrine\ORM\Proxy\Factory\StaticProxyFactory; +use Doctrine\ORM\Reflection\RuntimeReflectionService; use Doctrine\Tests\Mocks\ConnectionMock; use Doctrine\Tests\Mocks\DriverMock; use Doctrine\Tests\Mocks\EntityManagerMock; @@ -61,9 +62,13 @@ protected function setUp() $proxyConfiguration->setDirectory(sys_get_temp_dir()); $proxyConfiguration->setNamespace('Proxies'); - $proxyConfiguration->setAutoGenerate(AbstractProxyFactory::AUTOGENERATE_ALWAYS); + $proxyConfiguration->setAutoGenerate(ProxyFactory::AUTOGENERATE_ALWAYS); + $proxyConfiguration->setResolver(new DefaultProxyResolver( + $proxyConfiguration->getNamespace(), + $proxyConfiguration->getDirectory() + )); - $this->proxyFactory = new ProxyFactory($this->emMock, $proxyConfiguration); + $this->proxyFactory = new StaticProxyFactory($this->emMock, $proxyConfiguration); } public function testReferenceProxyDelegatesLoadingToThePersister() @@ -147,8 +152,6 @@ public function testFailedProxyLoadingDoesNotMarkTheProxyAsInitialized() } self::assertFalse($proxy->__isInitialized()); - self::assertInstanceOf('Closure', $proxy->__getInitializer(), 'The initializer wasn\'t removed'); - self::assertInstanceOf('Closure', $proxy->__getCloner(), 'The cloner wasn\'t removed'); } /** @@ -186,8 +189,6 @@ public function testFailedProxyCloningDoesNotMarkTheProxyAsInitialized() } self::assertFalse($proxy->__isInitialized()); - self::assertInstanceOf('Closure', $proxy->__getInitializer(), 'The initializer wasn\'t removed'); - self::assertInstanceOf('Closure', $proxy->__getCloner(), 'The cloner wasn\'t removed'); } public function testProxyClonesParentFields() diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index bd2103c769b..f628685de8f 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -4,12 +4,12 @@ use Doctrine\Common\Annotations\AnnotationReader; use Doctrine\Common\Collections\ArrayCollection; -use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; use Doctrine\ORM\Mapping; +use Doctrine\ORM\Reflection\RuntimeReflectionService; use Doctrine\ORM\Tools\EntityGenerator; use Doctrine\Tests\Models\DDC2372\DDC2372Admin; use Doctrine\Tests\Models\DDC2372\DDC2372User; From 4b8af0f095ae42961a7db056590111adbf45ae31 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 19 Jun 2017 10:17:28 -0400 Subject: [PATCH 141/275] Quick fixes --- .../Performance/Mock/NonLoadingPersister.php | 8 +-- .../Mock/NonProxyLoadingEntityManager.php | 23 +++--- .../Mock/NonProxyLoadingUnitOfWork.php | 4 +- tests/Doctrine/Tests/Mocks/TaskMock.php | 70 ------------------- 4 files changed, 19 insertions(+), 86 deletions(-) delete mode 100644 tests/Doctrine/Tests/Mocks/TaskMock.php diff --git a/tests/Doctrine/Performance/Mock/NonLoadingPersister.php b/tests/Doctrine/Performance/Mock/NonLoadingPersister.php index 35881c5a94b..ab088d7ff9b 100644 --- a/tests/Doctrine/Performance/Mock/NonLoadingPersister.php +++ b/tests/Doctrine/Performance/Mock/NonLoadingPersister.php @@ -2,8 +2,8 @@ namespace Doctrine\Performance\Mock; +use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Persisters\Entity\BasicEntityPersister; -use Doctrine\ORM\Query; /** * A persister that doesn't actually load given objects @@ -20,12 +20,12 @@ public function __construct() public function load( array $criteria, $entity = null, - $assoc = null, + ?AssociationMetadata $assoc = null, array $hints = array(), - $lockMode = 0, + $lockMode = null, $limit = null, array $orderBy = null ) { return $entity; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Performance/Mock/NonProxyLoadingEntityManager.php b/tests/Doctrine/Performance/Mock/NonProxyLoadingEntityManager.php index cb3444a0c7c..3fc3cb61a6f 100644 --- a/tests/Doctrine/Performance/Mock/NonProxyLoadingEntityManager.php +++ b/tests/Doctrine/Performance/Mock/NonProxyLoadingEntityManager.php @@ -2,11 +2,12 @@ namespace Doctrine\Performance\Mock; +use Doctrine\ORM\Configuration\ProxyConfiguration; use Doctrine\ORM\EntityManagerInterface; -use Doctrine\ORM\Proxy\ProxyFactory; -use Doctrine\ORM\Query; +use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Proxy\Factory\DefaultProxyResolver; +use Doctrine\ORM\Proxy\Factory\StaticProxyFactory; use Doctrine\ORM\Query\ResultSetMapping; -use Doctrine\Tests\ORM\Performance\MockUnitOfWork; /** * An entity manager mock that prevents lazy-loading of proxies @@ -30,12 +31,14 @@ public function getProxyFactory() { $config = $this->realEntityManager->getConfiguration(); - return new ProxyFactory( - $this, - $config->getProxyDir(), - $config->getProxyNamespace(), - $config->getAutoGenerateProxyClasses() - ); + $proxyConfiguration = new ProxyConfiguration(); + + $proxyConfiguration->setResolver(new DefaultProxyResolver($config->getProxyNamespace(), $config->getProxyDir())); + $proxyConfiguration->setDirectory($config->getProxyDir()); + $proxyConfiguration->setNamespace($config->getProxyNamespace()); + $proxyConfiguration->setAutoGenerate($config->getAutoGenerateProxyClasses()); + + return new StaticProxyFactory($this, $proxyConfiguration); } /** @@ -49,7 +52,7 @@ public function getMetadataFactory() /** * {@inheritDoc} */ - public function getClassMetadata($className) + public function getClassMetadata($className) : ClassMetadata { return $this->realEntityManager->getClassMetadata($className); } diff --git a/tests/Doctrine/Performance/Mock/NonProxyLoadingUnitOfWork.php b/tests/Doctrine/Performance/Mock/NonProxyLoadingUnitOfWork.php index dd9139ae778..df724921e94 100644 --- a/tests/Doctrine/Performance/Mock/NonProxyLoadingUnitOfWork.php +++ b/tests/Doctrine/Performance/Mock/NonProxyLoadingUnitOfWork.php @@ -2,7 +2,7 @@ namespace Doctrine\Performance\Mock; -use Doctrine\ORM\Query; +use Doctrine\ORM\Persisters\Entity\EntityPersister; use Doctrine\ORM\UnitOfWork; use Doctrine\Tests\ORM\Performance\PersisterMock; @@ -12,7 +12,7 @@ class NonProxyLoadingUnitOfWork extends UnitOfWork { /** - * @var PersisterMock + * @var EntityPersister */ private $entityPersister; diff --git a/tests/Doctrine/Tests/Mocks/TaskMock.php b/tests/Doctrine/Tests/Mocks/TaskMock.php deleted file mode 100644 index f6ce095add1..00000000000 --- a/tests/Doctrine/Tests/Mocks/TaskMock.php +++ /dev/null @@ -1,70 +0,0 @@ - - */ -class TaskMock extends \Doctrine\Common\Cli\Tasks\AbstractTask -{ - /** - * Since instances of this class can be created elsewhere all instances - * register themselves in this array for later inspection. - * - * @var array (TaskMock) - */ - static public $instances = []; - - /** - * @var int - */ - private $runCounter = 0; - - /** - * Constructor of Task Mock Object. - * Makes sure the object can be inspected later. - * - * @param AbstractNamespace $namespace CLI Namespace, passed to parent constructor. - */ - function __construct(AbstractNamespace $namespace) - { - self::$instances[] = $this; - - parent::__construct($namespace); - } - - /** - * Returns the number of times run() was called on this object. - * - * @return int - */ - public function getRunCounter() - { - return $this->runCounter; - } - - /* Mock API */ - - /** - * Method invoked by CLI to run task. - * - * @return void - */ - public function run() - { - $this->runCounter++; - } - - /** - * Method supposed to generate the CLI Task Documentation. - * - * @return void - */ - public function buildDocumentation() - { - } -} From 740afb939b86dd551ed4a90e1685cda8fa5cc716 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 21 Jun 2017 22:43:34 -0400 Subject: [PATCH 142/275] Fix bugs related to rebase --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 8 ++ .../ORM/Mapping/Driver/AnnotationDriver.php | 4 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 3 +- .../AbstractEntityInheritancePersister.php | 26 +++--- .../Entity/BasicEntityPersister.php | 3 +- .../Entity/JoinedSubclassPersister.php | 12 +-- .../Entity/SingleTablePersister.php | 6 +- lib/Doctrine/ORM/Query.php | 6 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 4 +- lib/Doctrine/ORM/Version.php | 4 +- .../Models/DDC5934/DDC5934BaseContract.php | 49 ++++++----- .../Tests/Models/DDC5934/DDC5934Contract.php | 19 ++-- tests/Doctrine/Tests/Models/Quote/City.php | 14 +-- .../Tests/Models/Quote/FullAddress.php | 8 +- .../ORM/Cache/DefaultCacheFactoryTest.php | 24 +++--- .../Tests/ORM/Cache/DefaultQueryCacheTest.php | 14 +-- .../Doctrine/Tests/ORM/EntityManagerTest.php | 4 +- .../ORM/Functional/CascadeRemoveOrderTest.php | 2 +- .../Functional/ClassTableInheritanceTest.php | 2 +- .../ORM/Functional/EntityRepositoryTest.php | 24 +++--- ...condLevelCacheJoinTableInheritanceTest.php | 10 +-- .../SecondLevelCacheQueryCacheTest.php | 86 +++++++++---------- ...ndLevelCacheSingleTableInheritanceTest.php | 10 +-- .../ORM/Functional/Ticket/DDC2775Test.php | 8 +- .../ORM/Functional/Ticket/DDC2780Test.php | 2 +- .../ORM/Functional/Ticket/DDC5684Test.php | 6 +- .../ORM/Functional/Ticket/DDC6460Test.php | 59 +++++++------ .../ORM/Functional/Ticket/GH2947Test.php | 27 +++--- .../ORM/Functional/Ticket/GH5887Test.php | 45 +++++----- .../ORM/Functional/Ticket/GH6362Test.php | 68 ++++++++------- .../ORM/Functional/Ticket/GH6402Test.php | 16 ++-- .../Tests/ORM/Functional/TypeTest.php | 14 +-- .../Hydration/SimpleObjectHydratorTest.php | 9 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 7 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 1 + ...sts.Models.DDC5934.DDC5934BaseContract.php | 26 +++--- ...e.Tests.Models.DDC5934.DDC5934Contract.php | 10 ++- .../Tests/ORM/PersistentCollectionTest.php | 8 +- tests/Doctrine/Tests/ORM/Query/QueryTest.php | 25 +++--- .../ORM/Query/SelectSqlGenerationTest.php | 2 +- tests/Doctrine/Tests/ORM/UnitOfWorkTest.php | 18 ++-- 41 files changed, 364 insertions(+), 329 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index dc1736449b5..7862252c013 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1226,6 +1226,10 @@ public function getSingleIdentifierFieldName() throw MappingException::singleIdNotAllowedOnCompositePrimaryKey($this->name); } + if ( ! isset($this->identifier[0])) { + throw MappingException::noIdDefined($this->name); + } + return $this->identifier[0]; } @@ -1464,6 +1468,10 @@ public function setPropertyOverride(Property $property) $originalProperty->setInversedBy($property->getInversedBy()); } + if ($property->getFetchMode() !== $originalProperty->getFetchMode()) { + $originalProperty->setFetchMode($property->getFetchMode()); + } + if ($originalProperty instanceof ToOneAssociationMetadata && $property->getJoinColumns()) { $originalProperty->setJoinColumns($property->getJoinColumns()); } else if ($originalProperty instanceof ManyToManyAssociationMetadata && $property->getJoinTable()) { diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index e4846008087..5fd6963b4ec 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -389,10 +389,10 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $override->setInversedBy($associationOverride->inversedBy); } - // Check for `fetch` + // Check for fetch if ($associationOverride->fetch) { $override->setFetchMode( - constant(Mapping\ClassMetadata::class . '::FETCH_' . $associationOverride->fetch) + constant(Mapping\FetchMode::class . '::' . $associationOverride->fetch) ); } diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 37644c18993..79afb74fc70 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -28,6 +28,7 @@ use Doctrine\ORM\Mapping\CacheMetadata; use Doctrine\ORM\Mapping\CacheUsage; use Doctrine\ORM\Mapping\ChangeTrackingPolicy; +use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\InheritanceType; @@ -692,7 +693,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Check for fetch if (isset($overrideElement['fetch'])) { $override->setFetchMode( - constant(Metadata::class . '::FETCH_' . (string) $overrideElement['fetch']) + constant('Doctrine\ORM\Mapping\FetchMode::' . (string) $overrideElement['fetch']) ); } diff --git a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php index 71e0275dee4..6857ee097c5 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php @@ -21,6 +21,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Mapping\JoinColumnMetadata; /** * Base class for entity persisters that implement a certain inheritance mapping strategy. @@ -51,21 +52,26 @@ protected function prepareInsertData($entity) } /** - * @param string $tableName The class that declares this field. The table this class is - * mapped to must own the column for the given field. - * @param string $field The field name. - * @param Type $type + * @param JoinColumnMetadata $joinColumnMetadata * * @return string */ - protected function getSelectJoinColumnSQL($tableName, $field, $type) + protected function getSelectJoinColumnSQL(JoinColumnMetadata $joinColumnMetadata) { - $tableAlias = $this->getSQLTableAlias($tableName); - $columnAlias = $this->getSQLColumnAlias(); - $sql = sprintf('%s.%s', $tableAlias, $field); + $tableAlias = $this->getSQLTableAlias($joinColumnMetadata->getTableName()); + $columnAlias = $this->getSQLColumnAlias(); + $columnType = $joinColumnMetadata->getType(); + $quotedColumnName = $this->platform->quoteIdentifier($joinColumnMetadata->getColumnName()); + $sql = sprintf('%s.%s', $tableAlias, $quotedColumnName); - $this->currentPersisterContext->rsm->addMetaResult('r', $columnAlias, $field, false, $type); + $this->currentPersisterContext->rsm->addMetaResult( + 'r', + $columnAlias, + $joinColumnMetadata->getColumnName(), + $joinColumnMetadata->isPrimaryKey(), + $columnType + ); - return $type->convertToPHPValueSQL($sql, $this->platform) . ' AS ' . $columnAlias; + return $columnType->convertToPHPValueSQL($sql, $this->platform) . ' AS ' . $columnAlias; } } diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 2ffa08a1da5..9eb7d8d3bfe 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -852,6 +852,7 @@ public function loadToOneEntity(ToOneAssociationMetadata $association, $sourceEn // unset the old value and set the new sql aliased value here. By definition // unset($identifier[$targetKeyColumn] works here with how UnitOfWork::createEntity() calls this method. + // @todo guilhermeblanco In master we have: $identifier[$targetClass->getFieldForColumn($targetKeyColumn)] = $identifier[$targetTableAlias . "." . $targetKeyColumn] = $value; unset($identifier[$targetKeyColumn]); @@ -1780,7 +1781,7 @@ public function getSelectConditionStatementSQL( private function getSelectConditionStatementColumnSQL($field, AssociationMetadata $association = null) { $property = $this->class->getProperty($field); - + if ($property instanceof FieldMetadata) { $tableAlias = $this->getSQLTableAlias($property->getTableName()); $columnName = $this->platform->quoteIdentifier($property->getColumnName()); diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index eebb33ed773..aca315e3583 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -432,11 +432,7 @@ protected function getSelectColumnsSQL() ); } - $columnList[] = $this->getSelectJoinColumnSQL( - $joinColumn->getTableName(), - $joinColumn->getColumnName(), - $joinColumn->getType() - ); + $columnList[] = $this->getSelectJoinColumnSQL($joinColumn); } } @@ -483,11 +479,7 @@ protected function getSelectColumnsSQL() ); } - $columnList[] = $this->getSelectJoinColumnSQL( - $joinColumn->getTableName(), - $joinColumn->getColumnName(), - $joinColumn->getType() - ); + $columnList[] = $this->getSelectJoinColumnSQL($joinColumn); } } } diff --git a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php index 33ff17fcdca..e9456766237 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php @@ -91,11 +91,7 @@ protected function getSelectColumnsSQL() ); } - $columnList[] = $this->getSelectJoinColumnSQL( - $joinColumn->getTableName(), - $joinColumn->getColumnName(), - $joinColumn->getType() - ); + $columnList[] = $this->getSelectJoinColumnSQL($joinColumn); } break; diff --git a/lib/Doctrine/ORM/Query.php b/lib/Doctrine/ORM/Query.php index c45dc8d4443..9c00ee7733f 100644 --- a/lib/Doctrine/ORM/Query.php +++ b/lib/Doctrine/ORM/Query.php @@ -339,15 +339,15 @@ private function evictResultSetCache( array $types, array $connectionParams ) { - if (null === $this->_queryCacheProfile || ! $this->getExpireResultCache()) { + if (null === $this->queryCacheProfile || ! $this->getExpireResultCache()) { return; } - $cacheDriver = $this->_queryCacheProfile->getResultCacheDriver(); + $cacheDriver = $this->queryCacheProfile->getResultCacheDriver(); $statements = (array) $executor->getSqlStatements(); // Type casted since it can either be a string or an array foreach ($statements as $statement) { - $cacheKeys = $this->_queryCacheProfile->generateCacheKeys($statement, $sqlParams, $types, $connectionParams); + $cacheKeys = $this->queryCacheProfile->generateCacheKeys($statement, $sqlParams, $types, $connectionParams); $cacheDriver->delete(reset($cacheKeys)); } diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index e2ddd27c86d..97b01ad5173 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -705,8 +705,8 @@ private function gatherRelationJoinColumns( throw new \Doctrine\ORM\ORMException(sprintf( 'Column name "%s" referenced for relation from %s towards %s does not exist.', $joinColumn->getReferencedColumnName(), - $mapping['sourceEntity'], - $mapping['targetEntity'] + $mapping->getSourceEntity(), + $mapping->getTargetEntity() )); } diff --git a/lib/Doctrine/ORM/Version.php b/lib/Doctrine/ORM/Version.php index fee5b82c0a1..08dfeb03fed 100644 --- a/lib/Doctrine/ORM/Version.php +++ b/lib/Doctrine/ORM/Version.php @@ -22,7 +22,7 @@ /** * Class to store and retrieve the version of Doctrine * - * + * * @link www.doctrine-project.org * @since 2.0 * @version $Revision$ @@ -36,7 +36,7 @@ class Version /** * Current Doctrine Version */ - const VERSION = '2.6.0-DEV'; + const VERSION = '3.0.0-DEV'; /** * Compares a Doctrine version with the current one. diff --git a/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php b/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php index 84970c270b3..6342cd23c46 100644 --- a/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php +++ b/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php @@ -3,29 +3,26 @@ namespace Doctrine\Tests\Models\DDC5934; use Doctrine\Common\Collections\ArrayCollection; -use Doctrine\ORM\Mapping\Column; -use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\Entity; -use Doctrine\ORM\Mapping\GeneratedValue; -use Doctrine\ORM\Mapping\Id; -use Doctrine\ORM\Mapping\ManyToMany; +use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Annotation as ORM; +use Doctrine\ORM\Mapping; /** - * @Entity + * @ORM\Entity */ class DDC5934BaseContract { /** - * @Id() - * @Column(name="id", type="integer") - * @GeneratedValue() + * @ORM\Id() + * @ORM\Column(name="id", type="integer") + * @ORM\GeneratedValue() */ public $id; /** * @var ArrayCollection * - * @ManyToMany(targetEntity="DDC5934Member", fetch="LAZY", inversedBy="contracts") + * @ORM\ManyToMany(targetEntity="DDC5934Member", fetch="LAZY", inversedBy="contracts") */ public $members; @@ -34,20 +31,22 @@ public function __construct() $this->members = new ArrayCollection(); } - public static function loadMetadata(ClassMetadata $metadata) + public static function loadMetadata(Mapping\ClassMetadata $metadata) { - $metadata->mapField([ - 'id' => true, - 'fieldName' => 'id', - 'type' => 'integer', - 'columnName' => 'id', - ]); - - $metadata->mapManyToMany([ - 'fieldName' => 'members', - 'targetEntity' => 'DDC5934Member', - ]); - - $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); + $fieldMetadata = new Mapping\FieldMetadata('id'); + + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setColumnName('id'); + $fieldMetadata->setPrimaryKey(true); + + $metadata->addProperty($fieldMetadata); + + $association = new Mapping\ManyToManyAssociationMetadata('members'); + + $association->setTargetEntity('DDC5934Member'); + + $metadata->addProperty($association); + + $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } } diff --git a/tests/Doctrine/Tests/Models/DDC5934/DDC5934Contract.php b/tests/Doctrine/Tests/Models/DDC5934/DDC5934Contract.php index e26c4d66501..b736cb527da 100644 --- a/tests/Doctrine/Tests/Models/DDC5934/DDC5934Contract.php +++ b/tests/Doctrine/Tests/Models/DDC5934/DDC5934Contract.php @@ -2,23 +2,24 @@ namespace Doctrine\Tests\Models\DDC5934; -use Doctrine\ORM\Mapping\AssociationOverride; -use Doctrine\ORM\Mapping\AssociationOverrides; -use Doctrine\ORM\Mapping\Entity; +use Doctrine\ORM\Annotation as ORM; +use Doctrine\ORM\Mapping; use Doctrine\ORM\Mapping\ClassMetadata; /** - * @Entity - * @AssociationOverrides( - * @AssociationOverride(name="members", fetch="EXTRA_LAZY") + * @ORM\Entity + * @ORM\AssociationOverrides( + * @ORM\AssociationOverride(name="members", fetch="EXTRA_LAZY") * ) */ class DDC5934Contract extends DDC5934BaseContract { public static function loadMetadata(ClassMetadata $metadata) { - $metadata->setAssociationOverride('members', [ - 'fetch' => ClassMetadata::FETCH_EXTRA_LAZY, - ]); + $association = new Mapping\ManyToManyAssociationMetadata('members'); + + $association->setFetchMode(Mapping\FetchMode::EXTRA_LAZY); + + $metadata->setPropertyOverride($association); } } diff --git a/tests/Doctrine/Tests/Models/Quote/City.php b/tests/Doctrine/Tests/Models/Quote/City.php index 74503ea0858..f3e13f934e6 100644 --- a/tests/Doctrine/Tests/Models/Quote/City.php +++ b/tests/Doctrine/Tests/Models/Quote/City.php @@ -2,21 +2,23 @@ namespace Doctrine\Tests\Models\Quote; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity - * @Table(name="`quote-city`") + * @ORM\Entity + * @ORM\Table(name="quote-city") */ class City { /** - * @Id - * @GeneratedValue - * @Column(type="integer", name="`city-id`") + * @ORM\Id + * @ORM\GeneratedValue + * @ORM\Column(type="integer", name="city-id") */ public $id; /** - * @Column(name="`city-name`") + * @ORM\Column(name="city-name") */ public $name; diff --git a/tests/Doctrine/Tests/Models/Quote/FullAddress.php b/tests/Doctrine/Tests/Models/Quote/FullAddress.php index b73cda5bd4a..7aaf68d9381 100644 --- a/tests/Doctrine/Tests/Models/Quote/FullAddress.php +++ b/tests/Doctrine/Tests/Models/Quote/FullAddress.php @@ -2,14 +2,16 @@ namespace Doctrine\Tests\Models\Quote; +use Doctrine\ORM\Annotation as ORM; + /** - * @Entity + * @ORM\Entity */ class FullAddress extends Address { /** - * @OneToOne(targetEntity=City::class, cascade={"persist"}) - * @JoinColumn(name="`city-id`", referencedColumnName="`city-id`") + * @ORM\OneToOne(targetEntity=City::class, cascade={"persist"}) + * @ORM\JoinColumn(name="city-id", referencedColumnName="city-id") * * @var City */ diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php index 593032dda72..41ec4020321 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php @@ -51,17 +51,17 @@ class DefaultCacheFactoryTest extends OrmTestCase protected function setUp() { $this->enableSecondLevelCache(); - + parent::setUp(); $this->em = $this->getTestEntityManager(); $this->regionsConfig = new RegionsConfiguration; - + $arguments = [ - $this->regionsConfig, + $this->regionsConfig, $this->getSharedSecondLevelCacheDriverImpl() ]; - + $this->factory = $this->getMockBuilder(DefaultCacheFactory::class) ->setMethods(['getRegion']) ->setConstructorArgs($arguments) @@ -269,7 +269,7 @@ public function testBuildCachedEntityPersisterNonStrictException() $em = $this->em; $metadata = clone $em->getClassMetadata(State::class); $persister = new BasicEntityPersister($em, $metadata); - + $metadata->setCache( new CacheMetadata(-1, 'doctrine_tests_models_cache_state') ); @@ -304,7 +304,7 @@ public function testInvalidFileLockRegionDirectoryException() $factory = new DefaultCacheFactory($this->regionsConfig, $this->getSharedSecondLevelCacheDriverImpl()); $fooCache = new CacheMetadata(CacheUsage::READ_WRITE, 'foo'); - + $factory->getRegion($fooCache); } @@ -314,7 +314,7 @@ public function testBuildsNewNamespacedCacheInstancePerRegionInstance() $fooCache = new CacheMetadata(CacheUsage::READ_ONLY, 'foo'); $fooRegion = $factory->getRegion($fooCache); - + $barCache = new CacheMetadata(CacheUsage::READ_ONLY, 'bar'); $barRegion = $factory->getRegion($barCache); @@ -335,8 +335,8 @@ public function testAppendsNamespacedCacheInstancePerRegionInstanceWhenItsAlread $barCache = new CacheMetadata(CacheUsage::READ_ONLY, 'bar'); $barRegion = $factory->getRegion($barCache); - $this->assertSame('testing:foo', $fooRegion->getCache()->getNamespace()); - $this->assertSame('testing:bar', $barRegion->getCache()->getNamespace()); + self::assertSame('testing:foo', $fooRegion->getCache()->getNamespace()); + self::assertSame('testing:bar', $barRegion->getCache()->getNamespace()); } public function testBuildsDefaultCacheRegionFromGenericCacheRegion() @@ -344,10 +344,10 @@ public function testBuildsDefaultCacheRegionFromGenericCacheRegion() /* @var $cache \Doctrine\Common\Cache\Cache */ $cache = $this->createMock(Cache::class); $factory = new DefaultCacheFactory($this->regionsConfig, $cache); - + $barCache = new CacheMetadata(CacheUsage::READ_ONLY, 'bar'); $barRegion = $factory->getRegion($barCache); - + self::assertInstanceOf(DefaultRegion::class, $barRegion); } @@ -356,7 +356,7 @@ public function testBuildsMultiGetCacheRegionFromGenericCacheRegion() /* @var $cache \Doctrine\Common\Cache\CacheProvider */ $cache = $this->getMockForAbstractClass(CacheProvider::class); $factory = new DefaultCacheFactory($this->regionsConfig, $cache); - + $barCache = new CacheMetadata(CacheUsage::READ_ONLY, 'bar'); $barRegion = $factory->getRegion($barCache); diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php index 2ed19dc6cf3..3faa825f3bf 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php @@ -595,15 +595,15 @@ public function testGetAssociationValue() $cities = $reflection->invoke($this->queryCache, $rsm, 'c', $bavaria); $attractions = $reflection->invoke($this->queryCache, $rsm, 'a', $bavaria); - $this->assertCount(2, $cities); - $this->assertCount(2, $attractions); + self::assertCount(2, $cities); + self::assertCount(2, $attractions); - $this->assertInstanceOf(Collection::class, $cities); - $this->assertInstanceOf(Collection::class, $attractions[0]); - $this->assertInstanceOf(Collection::class, $attractions[1]); + self::assertInstanceOf(Collection::class, $cities); + self::assertInstanceOf(Collection::class, $attractions[0]); + self::assertInstanceOf(Collection::class, $attractions[1]); - $this->assertCount(2, $attractions[0]); - $this->assertCount(1, $attractions[1]); + self::assertCount(2, $attractions[0]); + self::assertCount(1, $attractions[1]); } /** diff --git a/tests/Doctrine/Tests/ORM/EntityManagerTest.php b/tests/Doctrine/Tests/ORM/EntityManagerTest.php index 6d27b4102ae..fb13d3af80e 100644 --- a/tests/Doctrine/Tests/ORM/EntityManagerTest.php +++ b/tests/Doctrine/Tests/ORM/EntityManagerTest.php @@ -242,10 +242,10 @@ public function testClearManager() $this->em->persist($entity); - $this->assertTrue($this->em->contains($entity)); + self::assertTrue($this->em->contains($entity)); $this->em->clear(null); - $this->assertFalse($this->em->contains($entity)); + self::assertFalse($this->em->contains($entity)); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/CascadeRemoveOrderTest.php b/tests/Doctrine/Tests/ORM/Functional/CascadeRemoveOrderTest.php index 5b659b64838..936e20c16fb 100644 --- a/tests/Doctrine/Tests/ORM/Functional/CascadeRemoveOrderTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/CascadeRemoveOrderTest.php @@ -49,7 +49,7 @@ public function testSingle() $this->em->remove($eOloaded); $this->em->flush(); - self::assertNull($this->_em->find(CascadeRemoveOrderEntityG::class, $eG->getId())); + self::assertNull($this->em->find(CascadeRemoveOrderEntityG::class, $eG->getId())); } public function testMany() diff --git a/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest.php b/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest.php index 1f13e4e6812..53ccbe42dbc 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ClassTableInheritanceTest.php @@ -51,7 +51,7 @@ public function testCRUD() $entities = $query->getResult(); - self::assertCount($entities); + self::assertCount(2, $entities); self::assertInstanceOf(CompanyPerson::class, $entities[0]); self::assertInstanceOf(CompanyEmployee::class, $entities[1]); self::assertTrue(is_numeric($entities[0]->getId())); diff --git a/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryTest.php b/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryTest.php index dfe81250ce9..df1d28a630b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryTest.php @@ -285,13 +285,13 @@ public function testCount() $repos = $this->em->getRepository(CmsUser::class); $userCount = $repos->count([]); - $this->assertSame(4, $userCount); + self::assertSame(4, $userCount); $userCount = $repos->count(['status' => 'dev']); - $this->assertSame(2, $userCount); + self::assertSame(2, $userCount); $userCount = $repos->count(['status' => 'nonexistent']); - $this->assertSame(0, $userCount); + self::assertSame(0, $userCount); } public function testCountBy() @@ -300,7 +300,7 @@ public function testCountBy() $repos = $this->em->getRepository(CmsUser::class); $userCount = $repos->countByStatus('dev'); - $this->assertSame(2, $userCount); + self::assertSame(2, $userCount); } /** @@ -914,32 +914,32 @@ public function testMatchingCriteriaStartsWithComparison() { $this->loadFixture(); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $users = $repository->matching(new Criteria(Criteria::expr()->startsWith('name', 'Foo'))); - $this->assertCount(0, $users); + self::assertCount(0, $users); $users = $repository->matching(new Criteria(Criteria::expr()->startsWith('name', 'R'))); - $this->assertCount(1, $users); + self::assertCount(1, $users); $users = $repository->matching(new Criteria(Criteria::expr()->startsWith('status', 'de'))); - $this->assertCount(2, $users); + self::assertCount(2, $users); } public function testMatchingCriteriaEndsWithComparison() { $this->loadFixture(); - $repository = $this->_em->getRepository(CmsUser::class); + $repository = $this->em->getRepository(CmsUser::class); $users = $repository->matching(new Criteria(Criteria::expr()->endsWith('name', 'foo'))); - $this->assertCount(0, $users); + self::assertCount(0, $users); $users = $repository->matching(new Criteria(Criteria::expr()->endsWith('name', 'oman'))); - $this->assertCount(1, $users); + self::assertCount(1, $users); $users = $repository->matching(new Criteria(Criteria::expr()->endsWith('status', 'ev'))); - $this->assertCount(2, $users); + self::assertCount(2, $users); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheJoinTableInheritanceTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheJoinTableInheritanceTest.php index fe2c389a601..aa5d528389b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheJoinTableInheritanceTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheJoinTableInheritanceTest.php @@ -207,8 +207,8 @@ public function testQueryCacheShouldBeEvictedOnTimestampUpdate() ->setCacheable(true) ->getResult(); - $this->assertCount(count($this->attractionsInfo), $result1); - $this->assertEquals($queryCount + 5, $this->getCurrentQueryCount()); + self::assertCount(count($this->attractionsInfo), $result1); + self::assertEquals($queryCount + 5, $this->getCurrentQueryCount()); $contact = new AttractionContactInfo( '1234-1234', @@ -225,11 +225,11 @@ public function testQueryCacheShouldBeEvictedOnTimestampUpdate() ->setCacheable(true) ->getResult(); - $this->assertCount(count($this->attractionsInfo) + 1, $result2); - $this->assertEquals($queryCount + 6, $this->getCurrentQueryCount()); + self::assertCount(count($this->attractionsInfo) + 1, $result2); + self::assertEquals($queryCount + 6, $this->getCurrentQueryCount()); foreach ($result2 as $entity) { - $this->assertInstanceOf(AttractionInfo::class, $entity); + self::assertInstanceOf(AttractionInfo::class, $entity); } } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheQueryCacheTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheQueryCacheTest.php index e45070cb9c0..493a07a0574 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheQueryCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheQueryCacheTest.php @@ -310,37 +310,37 @@ public function testMultipleNestedDQLAliases() ->setCacheable(true) ->getResult(); - $this->assertCount(2, $result1); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(2, $result1); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); - $this->assertTrue($this->cache->containsEntity(State::class, $this->states[1]->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $this->states[0]->getId())); + self::assertTrue($this->cache->containsEntity(State::class, $this->states[1]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[2]->getId())); - $this->assertTrue($this->cache->containsEntity(City::class, $this->cities[3]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[0]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[1]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[2]->getId())); + self::assertTrue($this->cache->containsEntity(City::class, $this->cities[3]->getId())); - $this->assertTrue($this->cache->containsEntity(Attraction::class, $this->attractions[0]->getId())); - $this->assertTrue($this->cache->containsEntity(Attraction::class, $this->attractions[1]->getId())); - $this->assertTrue($this->cache->containsEntity(Attraction::class, $this->attractions[2]->getId())); - $this->assertTrue($this->cache->containsEntity(Attraction::class, $this->attractions[3]->getId())); + self::assertTrue($this->cache->containsEntity(Attraction::class, $this->attractions[0]->getId())); + self::assertTrue($this->cache->containsEntity(Attraction::class, $this->attractions[1]->getId())); + self::assertTrue($this->cache->containsEntity(Attraction::class, $this->attractions[2]->getId())); + self::assertTrue($this->cache->containsEntity(Attraction::class, $this->attractions[3]->getId())); - $this->assertInstanceOf(State::class, $result1[0]); - $this->assertInstanceOf(State::class, $result1[1]); + self::assertInstanceOf(State::class, $result1[0]); + self::assertInstanceOf(State::class, $result1[1]); - $this->assertCount(2, $result1[0]->getCities()); - $this->assertCount(2, $result1[1]->getCities()); + self::assertCount(2, $result1[0]->getCities()); + self::assertCount(2, $result1[1]->getCities()); - $this->assertInstanceOf(City::class, $result1[0]->getCities()->get(0)); - $this->assertInstanceOf(City::class, $result1[0]->getCities()->get(1)); - $this->assertInstanceOf(City::class, $result1[1]->getCities()->get(0)); - $this->assertInstanceOf(City::class, $result1[1]->getCities()->get(1)); + self::assertInstanceOf(City::class, $result1[0]->getCities()->get(0)); + self::assertInstanceOf(City::class, $result1[0]->getCities()->get(1)); + self::assertInstanceOf(City::class, $result1[1]->getCities()->get(0)); + self::assertInstanceOf(City::class, $result1[1]->getCities()->get(1)); - $this->assertCount(2, $result1[0]->getCities()->get(0)->getAttractions()); - $this->assertCount(2, $result1[0]->getCities()->get(1)->getAttractions()); - $this->assertCount(2, $result1[1]->getCities()->get(0)->getAttractions()); - $this->assertCount(1, $result1[1]->getCities()->get(1)->getAttractions()); + self::assertCount(2, $result1[0]->getCities()->get(0)->getAttractions()); + self::assertCount(2, $result1[0]->getCities()->get(1)->getAttractions()); + self::assertCount(2, $result1[1]->getCities()->get(0)->getAttractions()); + self::assertCount(1, $result1[1]->getCities()->get(1)->getAttractions()); $this->em->clear(); @@ -348,24 +348,24 @@ public function testMultipleNestedDQLAliases() ->setCacheable(true) ->getResult(); - $this->assertCount(2, $result2); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(2, $result2); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); - $this->assertInstanceOf(State::class, $result2[0]); - $this->assertInstanceOf(State::class, $result2[1]); + self::assertInstanceOf(State::class, $result2[0]); + self::assertInstanceOf(State::class, $result2[1]); - $this->assertCount(2, $result2[0]->getCities()); - $this->assertCount(2, $result2[1]->getCities()); + self::assertCount(2, $result2[0]->getCities()); + self::assertCount(2, $result2[1]->getCities()); - $this->assertInstanceOf(City::class, $result2[0]->getCities()->get(0)); - $this->assertInstanceOf(City::class, $result2[0]->getCities()->get(1)); - $this->assertInstanceOf(City::class, $result2[1]->getCities()->get(0)); - $this->assertInstanceOf(City::class, $result2[1]->getCities()->get(1)); + self::assertInstanceOf(City::class, $result2[0]->getCities()->get(0)); + self::assertInstanceOf(City::class, $result2[0]->getCities()->get(1)); + self::assertInstanceOf(City::class, $result2[1]->getCities()->get(0)); + self::assertInstanceOf(City::class, $result2[1]->getCities()->get(1)); - $this->assertCount(2, $result2[0]->getCities()->get(0)->getAttractions()); - $this->assertCount(2, $result2[0]->getCities()->get(1)->getAttractions()); - $this->assertCount(2, $result2[1]->getCities()->get(0)->getAttractions()); - $this->assertCount(1, $result2[1]->getCities()->get(1)->getAttractions()); + self::assertCount(2, $result2[0]->getCities()->get(0)->getAttractions()); + self::assertCount(2, $result2[0]->getCities()->get(1)->getAttractions()); + self::assertCount(2, $result2[1]->getCities()->get(0)->getAttractions()); + self::assertCount(1, $result2[1]->getCities()->get(1)->getAttractions()); } public function testBasicQueryParams() @@ -1134,8 +1134,8 @@ public function testQueryCacheShouldBeEvictedOnTimestampUpdate() ->setCacheable(true) ->getResult(); - $this->assertCount(2, $result1); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(2, $result1); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); $this->em->persist(new Country('France')); $this->em->flush(); @@ -1147,11 +1147,11 @@ public function testQueryCacheShouldBeEvictedOnTimestampUpdate() ->setCacheable(true) ->getResult(); - $this->assertCount(3, $result2); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(3, $result2); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); foreach ($result2 as $entity) { - $this->assertInstanceOf(Country::class, $entity); + self::assertInstanceOf(Country::class, $entity); } } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheSingleTableInheritanceTest.php b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheSingleTableInheritanceTest.php index 0176a916d6a..1eb1f484f4c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheSingleTableInheritanceTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SecondLevelCacheSingleTableInheritanceTest.php @@ -227,8 +227,8 @@ public function testQueryCacheShouldBeEvictedOnTimestampUpdate() ->setCacheable(true) ->getResult(); - $this->assertCount(count($this->attractions), $result1); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(count($this->attractions), $result1); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); $contact = new Beach( 'Botafogo', @@ -245,11 +245,11 @@ public function testQueryCacheShouldBeEvictedOnTimestampUpdate() ->setCacheable(true) ->getResult(); - $this->assertCount(count($this->attractions) + 1, $result2); - $this->assertEquals($queryCount + 1, $this->getCurrentQueryCount()); + self::assertCount(count($this->attractions) + 1, $result2); + self::assertEquals($queryCount + 1, $this->getCurrentQueryCount()); foreach ($result2 as $entity) { - $this->assertInstanceOf(Attraction::class, $entity); + self::assertInstanceOf(Attraction::class, $entity); } } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2775Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2775Test.php index 66401500cc9..af846b9cc4f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2775Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2775Test.php @@ -50,7 +50,7 @@ public function testIssueCascadeRemove() $this->em->remove($user); $this->em->flush(); - self::assertEmpty($this->_em->getRepository(Authorization::class)->findAll()); + self::assertEmpty($this->em->getRepository(Authorization::class)->findAll()); // With the bug, the second flush throws an error because the cascade remove didn't work correctly $this->em->flush(); @@ -58,7 +58,8 @@ public function testIssueCascadeRemove() } /** - * @ORM\Entity @ORM\Table(name="ddc2775_role") + * @ORM\Entity + * @ORM\Table(name="ddc2775_role") * @ORM\InheritanceType("JOINED") * @ORM\DiscriminatorColumn(name="role_type", type="string") * @ORM\DiscriminatorMap({"admin"="AdminRole"}) @@ -66,7 +67,8 @@ public function testIssueCascadeRemove() abstract class Role { /** - * @ORM\Id @ORM\Column(type="integer") + * @ORM\Id + * @ORM\Column(type="integer") * @ORM\GeneratedValue */ public $id; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2780Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2780Test.php index 4f00850b9ad..1627d05ab38 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2780Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2780Test.php @@ -48,7 +48,7 @@ public function testIssue() ->getQuery() ->getOneOrNullResult(); - $this->assertInstanceOf(DDC2780User::class, $result); + self::assertInstanceOf(DDC2780User::class, $result); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC5684Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC5684Test.php index aa104e97c3e..8a02b490673 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC5684Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC5684Test.php @@ -41,7 +41,7 @@ public function testAutoIncrementIdWithCustomType() $this->em->persist($object); $this->em->flush(); - $this->assertInstanceOf(DDC5684ObjectId::class, $object->id); + self::assertInstanceOf(DDC5684ObjectId::class, $object->id); } public function testFetchObjectWithAutoIncrementedCustomType() @@ -54,8 +54,8 @@ public function testFetchObjectWithAutoIncrementedCustomType() $rawId = $object->id->value; $object = $this->em->find(DDC5684Object::class, new DDC5684ObjectId($rawId)); - $this->assertInstanceOf(DDC5684ObjectId::class, $object->id); - $this->assertEquals($rawId, $object->id->value); + self::assertInstanceOf(DDC5684ObjectId::class, $object->id); + self::assertEquals($rawId, $object->id->value); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC6460Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC6460Test.php index 9868c7d1c00..89df6c98507 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC6460Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC6460Test.php @@ -3,14 +3,12 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; use Doctrine\DBAL\Schema\SchemaException; -use Doctrine\ORM\Mapping\Column; -use Doctrine\ORM\Mapping\Embeddable; -use Doctrine\ORM\Mapping\Entity; -use Doctrine\ORM\Mapping\Id; -use Doctrine\ORM\Mapping\GeneratedValue; -use Doctrine\ORM\Mapping\ManyToOne; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Proxy\Proxy; +/** + * @group embedded + */ class DDC6460Test extends \Doctrine\Tests\OrmFunctionalTestCase { public function setUp() @@ -33,11 +31,11 @@ public function setUp() */ public function testInlineEmbeddable() { - $isFieldMapped = $this->_em + $isFieldMapped = $this->em ->getClassMetadata(DDC6460Entity::class) ->hasField('embedded'); - $this->assertTrue($isFieldMapped); + self::assertTrue($isFieldMapped); } /** @@ -49,63 +47,64 @@ public function testInlineEmbeddableProxyInitialization() $entity->id = 1; $entity->embedded = new DDC6460Embeddable(); $entity->embedded->field = 'test'; - $this->_em->persist($entity); + + $this->em->persist($entity); $second = new DDC6460ParentEntity(); $second->id = 1; $second->lazyLoaded = $entity; - $this->_em->persist($second); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($second); + $this->em->flush(); + $this->em->clear(); - $secondEntityWithLazyParameter = $this->_em->getRepository(DDC6460ParentEntity::class)->findOneById(1); + $secondEntityWithLazyParameter = $this->em->getRepository(DDC6460ParentEntity::class)->findOneById(1); - $this->assertInstanceOf(Proxy::class, $secondEntityWithLazyParameter->lazyLoaded); - $this->assertInstanceOf(DDC6460Entity::class, $secondEntityWithLazyParameter->lazyLoaded); - $this->assertFalse($secondEntityWithLazyParameter->lazyLoaded->__isInitialized()); - $this->assertEquals($secondEntityWithLazyParameter->lazyLoaded->embedded, $entity->embedded); - $this->assertTrue($secondEntityWithLazyParameter->lazyLoaded->__isInitialized()); + self::assertInstanceOf(Proxy::class, $secondEntityWithLazyParameter->lazyLoaded); + self::assertInstanceOf(DDC6460Entity::class, $secondEntityWithLazyParameter->lazyLoaded); + self::assertFalse($secondEntityWithLazyParameter->lazyLoaded->__isInitialized()); + self::assertEquals($secondEntityWithLazyParameter->lazyLoaded->embedded, $entity->embedded); + self::assertTrue($secondEntityWithLazyParameter->lazyLoaded->__isInitialized()); } } /** - * @Embeddable() + * @ORM\Embeddable() */ class DDC6460Embeddable { - /** @Column(type="string") */ + /** @ORM\Column(type="string") */ public $field; } /** - * @Entity() + * @ORM\Entity() */ class DDC6460Entity { /** - * @Id - * @GeneratedValue(strategy = "NONE") - * @Column(type = "integer") + * @ORM\Id + * @ORM\GeneratedValue(strategy = "NONE") + * @ORM\Column(type = "integer") */ public $id; - /** @Embedded(class = "DDC6460Embeddable") */ + /** @ORM\Embedded(class = "DDC6460Embeddable") */ public $embedded; } /** - * @Entity() + * @ORM\Entity() */ class DDC6460ParentEntity { /** - * @Id - * @GeneratedValue(strategy = "NONE") - * @Column(type = "integer") + * @ORM\Id + * @ORM\GeneratedValue(strategy = "NONE") + * @ORM\Column(type = "integer") */ public $id; - /** @ManyToOne(targetEntity = "DDC6460Entity", fetch="EXTRA_LAZY", cascade={"persist"}) */ + /** @ORM\ManyToOne(targetEntity = "DDC6460Entity", fetch="EXTRA_LAZY", cascade={"persist"}) */ public $lazyLoaded; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH2947Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH2947Test.php index 0b21b57f065..19a51a23387 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH2947Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH2947Test.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; use Doctrine\Common\Cache\ArrayCache; +use Doctrine\ORM\Annotation as ORM; use Doctrine\Tests\OrmFunctionalTestCase; /** @@ -16,7 +17,11 @@ protected function setUp() parent::setUp(); - $this->_schemaTool->createSchema([$this->_em->getClassMetadata(GH2947Car::class)]); + $this->schemaTool->createSchema( + [ + $this->em->getClassMetadata(GH2947Car::class) + ] + ); } public function testIssue() @@ -43,7 +48,7 @@ public function testIssue() private function createQuery() { - return $this->_em->createQueryBuilder() + return $this->em->createQueryBuilder() ->select('car') ->from(GH2947Car::class, 'car') ->getQuery() @@ -52,14 +57,14 @@ private function createQuery() private function createData() { - $this->_em->persist(new GH2947Car('BMW')); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist(new GH2947Car('BMW')); + $this->em->flush(); + $this->em->clear(); } private function updateData() { - $this->_em->createQueryBuilder() + $this->em->createQueryBuilder() ->update(GH2947Car::class, 'car') ->set('car.brand', ':newBrand') ->where('car.brand = :oldBrand') @@ -71,15 +76,15 @@ private function updateData() } /** - * @Entity - * @Table(name="GH2947_car") + * @ORM\Entity + * @ORM\Table(name="GH2947_car") */ class GH2947Car { /** - * @Id - * @Column(type="string", length=25) - * @GeneratedValue(strategy="NONE") + * @ORM\Id + * @ORM\Column(type="string", length=25) + * @ORM\GeneratedValue(strategy="NONE") */ public $brand; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5887Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5887Test.php index f19dd5924b5..cbe633af28c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5887Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5887Test.php @@ -5,6 +5,7 @@ use Doctrine\DBAL\Types\StringType; use Doctrine\DBAL\Types\Type; use Doctrine\DBAL\Platforms\AbstractPlatform; +use Doctrine\ORM\Annotation as ORM; use Doctrine\Tests\OrmFunctionalTestCase; /** @@ -18,12 +19,14 @@ public function setUp() Type::addType(GH5887CustomIdObjectType::NAME, GH5887CustomIdObjectType::class); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(GH5887Cart::class), - $this->_em->getClassMetadata(GH5887Customer::class), + $this->em->getClassMetadata(GH5887Cart::class), + $this->em->getClassMetadata(GH5887Customer::class), ] ); + + $this->markTestIncomplete('Requires updates to SqlWalker'); } public function testLazyLoadsForeignEntitiesInOneToOneRelationWhileHavingCustomIdObject() @@ -37,14 +40,12 @@ public function testLazyLoadsForeignEntitiesInOneToOneRelationWhileHavingCustomI $cart->setId($cartId); $cart->setCustomer($customer); - $this->_em->persist($customer); - $this->_em->persist($cart); - $this->_em->flush(); - - // Clearing cached entities - $this->_em->clear(); + $this->em->persist($customer); + $this->em->persist($cart); + $this->em->flush(); + $this->em->clear(); - $customerRepository = $this->_em->getRepository(GH5887Customer::class); + $customerRepository = $this->em->getRepository(GH5887Customer::class); /** @var GH5887Customer $customer */ $customer = $customerRepository->createQueryBuilder('c') ->where('c.id = :id') @@ -52,21 +53,21 @@ public function testLazyLoadsForeignEntitiesInOneToOneRelationWhileHavingCustomI ->getQuery() ->getOneOrNullResult(); - $this->assertInstanceOf(GH5887Cart::class, $customer->getCart()); + self::assertInstanceOf(GH5887Cart::class, $customer->getCart()); } } /** - * @Entity + * @ORM\Entity */ class GH5887Cart { /** * @var int * - * @Id - * @Column(type="integer") - * @GeneratedValue(strategy="NONE") + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="NONE") */ private $id; @@ -75,8 +76,8 @@ class GH5887Cart * * @var GH5887Customer * - * @OneToOne(targetEntity="GH5887Customer", inversedBy="cart") - * @JoinColumn(name="customer_id", referencedColumnName="id") + * @ORM\OneToOne(targetEntity="GH5887Customer", inversedBy="cart") + * @ORM\JoinColumn(name="customer_id", referencedColumnName="id") */ private $customer; @@ -117,16 +118,16 @@ public function setCustomer(GH5887Customer $customer) } /** - * @Entity + * @ORM\Entity */ class GH5887Customer { /** * @var GH5887CustomIdObject * - * @Id - * @Column(type="GH5887CustomIdObject") - * @GeneratedValue(strategy="NONE") + * @ORM\Id + * @ORM\Column(type="GH5887CustomIdObject") + * @ORM\GeneratedValue(strategy="NONE") */ private $id; @@ -135,7 +136,7 @@ class GH5887Customer * * @var GH5887Cart * - * @OneToOne(targetEntity="GH5887Cart", mappedBy="customer") + * @ORM\OneToOne(targetEntity="GH5887Cart", mappedBy="customer") */ private $cart; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH6362Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH6362Test.php index 576fbd0eb86..9ede22aa470 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH6362Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH6362Test.php @@ -2,10 +2,12 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; -use Doctrine\Tests\OrmFunctionalTestCase; +use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Query; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\Tests\Mocks\HydratorMockStatement; +use Doctrine\Tests\OrmFunctionalTestCase; final class GH6362Test extends OrmFunctionalTestCase { @@ -13,12 +15,12 @@ protected function setUp() { parent::setUp(); - $this->_schemaTool->createSchema( + $this->schemaTool->createSchema( [ - $this->_em->getClassMetadata(GH6362Start::class), - $this->_em->getClassMetadata(GH6362Base::class), - $this->_em->getClassMetadata(GH6362Child::class), - $this->_em->getClassMetadata(GH6362Join::class), + $this->em->getClassMetadata(GH6362Start::class), + $this->em->getClassMetadata(GH6362Base::class), + $this->em->getClassMetadata(GH6362Child::class), + $this->em->getClassMetadata(GH6362Join::class), ] ); } @@ -45,10 +47,10 @@ public function testInheritanceJoinAlias() $rsm->addFieldResult('c', 'id_2', 'id'); $rsm->addFieldResult('d', 'id_3', 'id'); - $rsm->addMetaResult('a', 'bases_id_4', 'bases_id', false, 'integer'); - $rsm->addMetaResult('b', 'type_5', 'type'); - $rsm->addMetaResult('c', 'type_6', 'type'); - $rsm->addMetaResult('d', 'child_id_7', 'child_id', false, 'integer'); + $rsm->addMetaResult('a', 'bases_id_4', 'bases_id', false, Type::getType('integer')); + $rsm->addMetaResult('b', 'type_5', 'type', false, Type::getType('string')); + $rsm->addMetaResult('c', 'type_6', 'type', false, Type::getType('string')); + $rsm->addMetaResult('d', 'child_id_7', 'child_id', false, Type::getType('integer')); $rsm->setDiscriminatorColumn('b', 'type_5'); $rsm->setDiscriminatorColumn('c', 'type_6'); @@ -67,78 +69,78 @@ public function testInheritanceJoinAlias() ]; $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em); + $hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->em); $result = $hydrator->hydrateAll($stmt, $rsm, [Query::HINT_FORCE_PARTIAL_LOAD => true]); - $this->assertInstanceOf(GH6362Start::class, $result[0]['base']); - $this->assertInstanceOf(GH6362Child::class, $result[1][0]); + self::assertInstanceOf(GH6362Start::class, $result[0]['base']); + self::assertInstanceOf(GH6362Child::class, $result[1][0]); } } /** - * @Entity + * @ORM\Entity */ class GH6362Start { /** - * @Column(type="integer") - * @Id - * @GeneratedValue + * @ORM\Id + * @ORM\Column(type="integer") + * @ORM\GeneratedValue */ protected $id; /** - * @ManyToOne(targetEntity="GH6362Base", inversedBy="starts") + * @ORM\ManyToOne(targetEntity="GH6362Base", inversedBy="starts") */ private $bases; } /** - * @InheritanceType("SINGLE_TABLE") - * @DiscriminatorColumn(name="type", type="string") - * @DiscriminatorMap({"child" = "GH6362Child"}) - * @Entity + * @ORM\InheritanceType("SINGLE_TABLE") + * @ORM\DiscriminatorColumn(name="type", type="string") + * @ORM\DiscriminatorMap({"child" = "GH6362Child"}) + * @ORM\Entity */ abstract class GH6362Base { /** - * @Column(type="integer") - * @Id - * @GeneratedValue + * @ORM\Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue */ protected $id; /** - * @OneToMany(targetEntity="GH6362Start", mappedBy="bases") + * @ORM\OneToMany(targetEntity="GH6362Start", mappedBy="bases") */ private $starts; } /** - * @Entity + * @ORM\Entity */ class GH6362Child extends GH6362Base { /** - * @OneToMany(targetEntity="GH6362Join", mappedBy="child") + * @ORM\OneToMany(targetEntity="GH6362Join", mappedBy="child") */ private $joins; } /** - * @Entity + * @ORM\Entity */ class GH6362Join { /** - * @Column(type="integer") - * @Id - * @GeneratedValue + * @ORM\Column(type="integer") + * @ORM\Id + * @ORM\GeneratedValue */ private $id; /** - * @ManyToOne(targetEntity="GH6362Child", inversedBy="joins") + * @ORM\ManyToOne(targetEntity="GH6362Child", inversedBy="joins") */ private $child; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH6402Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH6402Test.php index 85bf43ea0c3..3f591265801 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH6402Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH6402Test.php @@ -26,7 +26,8 @@ public function testFind() { $id = $this->createAddress(); - $address = $this->_em->find(Address::class, $id); + $address = $this->em->find(Address::class, $id); + self::assertNotNull($address->user); } @@ -34,7 +35,7 @@ public function testQuery() { $id = $this->createAddress(); - $addresses = $this->_em->createQuery('SELECT a FROM ' . Address::class . ' a WHERE a.id = :id') + $addresses = $this->em->createQuery('SELECT a FROM ' . Address::class . ' a WHERE a.id = :id') ->setParameter('id', $id) ->getResult(); @@ -46,7 +47,8 @@ public function testFindWithSubClass() { $id = $this->createFullAddress(); - $address = $this->_em->find(FullAddress::class, $id); + $address = $this->em->find(FullAddress::class, $id); + self::assertNotNull($address->user); } @@ -54,7 +56,7 @@ public function testQueryWithSubClass() { $id = $this->createFullAddress(); - $addresses = $this->_em->createQuery('SELECT a FROM ' . FullAddress::class . ' a WHERE a.id = :id') + $addresses = $this->em->createQuery('SELECT a FROM ' . FullAddress::class . ' a WHERE a.id = :id') ->setParameter('id', $id) ->getResult(); @@ -89,8 +91,8 @@ private function persistAddress(Address $address) $user->name = "foo"; $user->setAddress($address); - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->clear(); + $this->em->persist($user); + $this->em->flush(); + $this->em->clear(); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/TypeTest.php b/tests/Doctrine/Tests/ORM/Functional/TypeTest.php index 980de205e5f..936abac4b5c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/TypeTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/TypeTest.php @@ -125,7 +125,7 @@ public function testDateTime() self::assertInstanceOf(\DateTime::class, $dateTimeDb->datetime); self::assertEquals('2009-10-02 20:10:52', $dateTimeDb->datetime->format('Y-m-d H:i:s')); - $articles = $this->_em + $articles = $this->em ->getRepository(DateTimeModel::class) ->findBy(['datetime' => new \DateTime("now")]) ; @@ -144,13 +144,13 @@ public function testDqlQueryBindDateTimeInstance() $this->em->flush(); $this->em->clear(); - $dateTimeDb = $this->_em + $dateTimeDb = $this->em ->createQuery('SELECT d FROM Doctrine\Tests\Models\Generic\DateTimeModel d WHERE d.datetime = ?1') ->setParameter(1, $date, DBALType::DATETIME) ->getSingleResult(); - $this->assertInstanceOf(\DateTime::class, $dateTimeDb->datetime); - $this->assertSame('2009-10-02 20:10:52', $dateTimeDb->datetime->format('Y-m-d H:i:s')); + self::assertInstanceOf(\DateTime::class, $dateTimeDb->datetime); + self::assertSame('2009-10-02 20:10:52', $dateTimeDb->datetime->format('Y-m-d H:i:s')); } public function testDqlQueryBuilderBindDateTimeInstance() @@ -164,7 +164,7 @@ public function testDqlQueryBuilderBindDateTimeInstance() $this->em->flush(); $this->em->clear(); - $dateTimeDb = $this->_em->createQueryBuilder() + $dateTimeDb = $this->em->createQueryBuilder() ->select('d') ->from(DateTimeModel::class, 'd') ->where('d.datetime = ?1') @@ -172,8 +172,8 @@ public function testDqlQueryBuilderBindDateTimeInstance() ->getQuery() ->getSingleResult(); - $this->assertInstanceOf(\DateTime::class, $dateTimeDb->datetime); - $this->assertSame('2009-10-02 20:10:52', $dateTimeDb->datetime->format('Y-m-d H:i:s')); + self::assertInstanceOf(\DateTime::class, $dateTimeDb->datetime); + self::assertSame('2009-10-02 20:10:52', $dateTimeDb->datetime->format('Y-m-d H:i:s')); } public function testTime() diff --git a/tests/Doctrine/Tests/ORM/Hydration/SimpleObjectHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/SimpleObjectHydratorTest.php index cd9190b54b9..2b8dce2e8b7 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/SimpleObjectHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/SimpleObjectHydratorTest.php @@ -124,9 +124,10 @@ public function testNullValueShouldNotOverwriteFieldWithSameNameInJoinedInherita $expectedEntity->id = 1; $expectedEntity->tags = ['tag1', 'tag2']; - $stmt = new HydratorMockStatement($resultSet); - $hydrator = new \Doctrine\ORM\Internal\Hydration\SimpleObjectHydrator($this->em); - $result = $hydrator->hydrateAll($stmt, $rsm); - $this->assertEquals($result[0], $expectedEntity); + $stmt = new HydratorMockStatement($resultSet); + $hydrator = new \Doctrine\ORM\Internal\Hydration\SimpleObjectHydrator($this->em); + $result = $hydrator->hydrateAll($stmt, $rsm); + + self::assertEquals($result[0], $expectedEntity); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index edab31245cf..ce872ae92a7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -862,8 +862,11 @@ public function testFetchOverrideMapping() // check override metadata $contractMetadata = $this->createClassMetadataFactory()->getMetadataFor(DDC5934Contract::class); - $this->assertArrayHasKey('members', $contractMetadata->associationMappings); - $this->assertSame(ClassMetadata::FETCH_EXTRA_LAZY, $contractMetadata->associationMappings['members']['fetch']); + self::assertArrayHasKey('members', $contractMetadata->getProperties()); + + $contractMembers = $contractMetadata->getProperty('members'); + + self::assertSame(Mapping\FetchMode::EXTRA_LAZY, $contractMembers->getFetchMode()); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 30e7622e032..46a30b450a6 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -315,6 +315,7 @@ public function testGetSingleIdentifierFieldName_NoIdEntity_ThrowsException() $cm->initializeReflection(new RuntimeReflectionService()); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); + $cm->getSingleIdentifierFieldName(); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php index fca4bb1185e..0f6c27960f5 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php @@ -1,17 +1,21 @@ mapField([ - 'id' => true, - 'fieldName' => 'id', - 'type' => 'integer', - 'columnName' => 'id', -]); +$fieldMetadata = new Mapping\FieldMetadata('id'); -$metadata->mapManyToMany([ - 'fieldName' => 'members', - 'targetEntity' => 'DDC5934Member', -]); +$fieldMetadata->setType(Type::getType('integer')); +$fieldMetadata->setColumnName('id'); +$fieldMetadata->setPrimaryKey(true); -$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); +$metadata->addProperty($fieldMetadata); + +$association = new Mapping\ManyToManyAssociationMetadata('members'); + +$association->setTargetEntity('DDC5934Member'); + +$metadata->addProperty($association); + +$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934Contract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934Contract.php index 3ecf178a63c..6d50b59f7a9 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934Contract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934Contract.php @@ -1,7 +1,9 @@ setAssociationOverride('members', [ - 'fetch' => ClassMetadata::FETCH_EXTRA_LAZY, -]); +$association = new Mapping\ManyToManyAssociationMetadata('members'); + +$association->setFetchMode(Mapping\FetchMode::EXTRA_LAZY); + +$metadata->setPropertyOverride($association); diff --git a/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php b/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php index e9cc2fda90a..92f5512e2cc 100644 --- a/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/PersistentCollectionTest.php @@ -116,10 +116,10 @@ public function testRemovingElementsAlsoRemovesKeys() $this->setUpPersistentCollection(); $this->collection->add('dummy'); - $this->assertEquals([0], array_keys($this->collection->toArray())); + self::assertEquals([0], array_keys($this->collection->toArray())); $this->collection->removeElement('dummy'); - $this->assertEquals([], array_keys($this->collection->toArray())); + self::assertEquals([], array_keys($this->collection->toArray())); } /** @@ -131,7 +131,7 @@ public function testClearWillAlsoClearKeys() $this->collection->add('dummy'); $this->collection->clear(); - $this->assertEquals([], array_keys($this->collection->toArray())); + self::assertEquals([], array_keys($this->collection->toArray())); } /** @@ -145,6 +145,6 @@ public function testClearWillAlsoResetKeyPositions() $this->collection->removeElement('dummy'); $this->collection->clear(); $this->collection->add('dummy'); - $this->assertEquals([0], array_keys($this->collection->toArray())); + self::assertEquals([0], array_keys($this->collection->toArray())); } } diff --git a/tests/Doctrine/Tests/ORM/Query/QueryTest.php b/tests/Doctrine/Tests/ORM/Query/QueryTest.php index 0d59d4f1bb4..70d026bc714 100644 --- a/tests/Doctrine/Tests/ORM/Query/QueryTest.php +++ b/tests/Doctrine/Tests/ORM/Query/QueryTest.php @@ -244,6 +244,7 @@ public function testSetHydrationCacheProfileNull() { $query = $this->em->createQuery(); $query->setHydrationCacheProfile(null); + self::assertNull($query->getHydrationCacheProfile()); } @@ -252,29 +253,33 @@ public function testSetHydrationCacheProfileNull() */ public function testResultCacheEviction() { - $this->_em->getConfiguration()->setResultCacheImpl(new ArrayCache()); + $this->em->getConfiguration()->setResultCacheImpl(new ArrayCache()); - $query = $this->_em->createQuery("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u") - ->useResultCache(true); + $query = $this->em + ->createQuery("SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u") + ->useResultCache(true); /** @var DriverConnectionMock $driverConnectionMock */ - $driverConnectionMock = $this->_em->getConnection() - ->getWrappedConnection(); + $driverConnectionMock = $this->em->getConnection() + ->getWrappedConnection(); + + // Performs the query and sets up the initial cache + self::assertCount(0, $query->getResult()); - $driverConnectionMock->setStatementMock(new StatementArrayMock([['id_0' => 1]])); + $driverConnectionMock->setStatementMock(new StatementArrayMock([['c0' => 1]])); // Performs the query and sets up the initial cache - self::assertCount(1, $query->getResult()); + self::assertCount(1, $query->expireResultCache(true)->getResult()); - $driverConnectionMock->setStatementMock(new StatementArrayMock([['id_0' => 1], ['id_0' => 2]])); + $driverConnectionMock->setStatementMock(new StatementArrayMock([['c0' => 1], ['c0' => 2]])); // Retrieves cached data since expire flag is false and we have a cached result set - self::assertCount(1, $query->getResult()); + self::assertCount(1, $query->expireResultCache(false)->getResult()); // Performs the query and caches the result set since expire flag is true self::assertCount(2, $query->expireResultCache(true)->getResult()); - $driverConnectionMock->setStatementMock(new StatementArrayMock([['id_0' => 1]])); + $driverConnectionMock->setStatementMock(new StatementArrayMock([['c0' => 1]])); // Retrieves cached data since expire flag is false and we have a cached result set self::assertCount(2, $query->expireResultCache(false)->getResult()); diff --git a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php index e043077298e..ad60545cf84 100644 --- a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php @@ -2016,7 +2016,7 @@ public function testQuotedWalkJoinVariableDeclaration() $this->assertSqlGeneration( 'SELECT a, u FROM Doctrine\Tests\Models\Quote\Address a JOIN a.user u', - 'SELECT t0."address-id" AS c0, t0."address-zip" AS c1, t1."user-id" AS c2, t1."user-name" AS c3, t1."type" AS c4 FROM "quote-address" t0 INNER JOIN "quote-user" t1 ON t0."user-id" = t1."user-id" WHERE t1."type" IN (\'simple\', \'full\')' + 'SELECT t0."address-id" AS c0, t0."address-zip" AS c1, t1."user-id" AS c2, t1."user-name" AS c3, t0."type" AS c4 FROM "quote-address" t0 INNER JOIN "quote-user" t1 ON t0."user-id" = t1."user-id" WHERE t0."type" IN (\'simple\', \'full\')' ); $this->assertSqlGeneration( diff --git a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php index 50edd3d036a..b557e408c7b 100644 --- a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php +++ b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php @@ -256,7 +256,7 @@ public function testNoUndefinedIndexNoticeOnScheduleForUpdateWithoutChanges() // Schedule user for update without changes $this->unitOfWork->scheduleForUpdate($user); - self::assertNotEmpty($this->_unitOfWork->getScheduledEntityUpdates()); + self::assertNotEmpty($this->unitOfWork->getScheduledEntityUpdates()); // This commit should not raise an E_NOTICE $this->unitOfWork->commit(); @@ -356,18 +356,18 @@ public function testPersistedEntityAndClearManager() $entity2 = new Country(456, 'United Kingdom'); $this->unitOfWork->persist($entity1); - $this->assertTrue($this->unitOfWork->isInIdentityMap($entity1)); + self::assertTrue($this->unitOfWork->isInIdentityMap($entity1)); $this->unitOfWork->persist($entity2); - $this->assertTrue($this->unitOfWork->isInIdentityMap($entity2)); + self::assertTrue($this->unitOfWork->isInIdentityMap($entity2)); $this->unitOfWork->clear(); - - $this->assertFalse($this->unitOfWork->isInIdentityMap($entity1)); - $this->assertFalse($this->unitOfWork->isInIdentityMap($entity2)); - - $this->assertFalse($this->unitOfWork->isScheduledForInsert($entity1)); - $this->assertFalse($this->unitOfWork->isScheduledForInsert($entity2)); + + self::assertFalse($this->unitOfWork->isInIdentityMap($entity1)); + self::assertFalse($this->unitOfWork->isInIdentityMap($entity2)); + + self::assertFalse($this->unitOfWork->isScheduledForInsert($entity1)); + self::assertFalse($this->unitOfWork->isScheduledForInsert($entity2)); } /** From 2bab6db41535c0dd5e9c24b346d552d126c8d661 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Thu, 22 Jun 2017 15:49:06 -0400 Subject: [PATCH 143/275] Fixed tetss after rebase --- .../Doctrine/Tests/ORM/ConfigurationTest.php | 25 ++++++++++------- .../ORM/Functional/CustomFunctionsTest.php | 9 ++++--- tests/Doctrine/Tests/ORM/Query/QueryTest.php | 4 +-- .../ORM/Query/SelectSqlGenerationTest.php | 6 ++--- .../ORM/Tools/Console/MetadataFilterTest.php | 27 ++++++++++--------- .../Pagination/CountOutputWalkerTest.php | 4 +-- .../Tests/ORM/Tools/SchemaToolTest.php | 16 ++++++++--- 7 files changed, 54 insertions(+), 37 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/ConfigurationTest.php b/tests/Doctrine/Tests/ORM/ConfigurationTest.php index 7db5683f5e2..95cc6b31222 100644 --- a/tests/Doctrine/Tests/ORM/ConfigurationTest.php +++ b/tests/Doctrine/Tests/ORM/ConfigurationTest.php @@ -262,9 +262,6 @@ public function testAddGetCustomStringFunction() $this->configuration->setCustomStringFunctions(['OtherFunctionName' => __CLASS__]); self::assertSame(__CLASS__, $this->configuration->getCustomStringFunction('OtherFunctionName')); - - $this->expectException(ORMException::class); - $this->configuration->addCustomStringFunction('concat', __CLASS__); } public function testAddGetCustomNumericFunction() @@ -277,9 +274,6 @@ public function testAddGetCustomNumericFunction() $this->configuration->setCustomNumericFunctions(['OtherFunctionName' => __CLASS__]); self::assertSame(__CLASS__, $this->configuration->getCustomNumericFunction('OtherFunctionName')); - - $this->expectException(ORMException::class); - $this->configuration->addCustomNumericFunction('abs', __CLASS__); } public function testAddGetCustomDatetimeFunction() @@ -292,21 +286,21 @@ public function testAddGetCustomDatetimeFunction() $this->configuration->setCustomDatetimeFunctions(['OtherFunctionName' => __CLASS__]); self::assertSame(__CLASS__, $this->configuration->getCustomDatetimeFunction('OtherFunctionName')); - - $this->expectException(ORMException::class); - $this->configuration->addCustomDatetimeFunction('date_add', __CLASS__); } public function testAddGetCustomHydrationMode() { self::assertSame(null, $this->configuration->getCustomHydrationMode('NonExisting')); + $this->configuration->addCustomHydrationMode('HydrationModeName', __CLASS__); + self::assertSame(__CLASS__, $this->configuration->getCustomHydrationMode('HydrationModeName')); } public function testSetCustomHydrationModes() { $this->configuration->addCustomHydrationMode('HydrationModeName', __CLASS__); + self::assertSame(__CLASS__, $this->configuration->getCustomHydrationMode('HydrationModeName')); $this->configuration->setCustomHydrationModes( @@ -322,22 +316,29 @@ public function testSetCustomHydrationModes() public function testSetGetClassMetadataFactoryName() { self::assertSame(ClassMetadataFactory::class, $this->configuration->getClassMetadataFactoryName()); + $this->configuration->setClassMetadataFactoryName(__CLASS__); + self::assertSame(__CLASS__, $this->configuration->getClassMetadataFactoryName()); } public function testAddGetFilters() { self::assertSame(null, $this->configuration->getFilterClassName('NonExistingFilter')); + $this->configuration->addFilter('FilterName', __CLASS__); + self::assertSame(__CLASS__, $this->configuration->getFilterClassName('FilterName')); } public function setDefaultRepositoryClassName() { self::assertSame(EntityRepository::class, $this->configuration->getDefaultRepositoryClassName()); + $this->configuration->setDefaultRepositoryClassName(DDC753CustomRepository::class); + self::assertSame(DDC753CustomRepository::class, $this->configuration->getDefaultRepositoryClassName()); + $this->expectException(ORMException::class); $this->configuration->setDefaultRepositoryClassName(__CLASS__); } @@ -345,8 +346,11 @@ public function setDefaultRepositoryClassName() public function testSetGetNamingStrategy() { self::assertInstanceOf(NamingStrategy::class, $this->configuration->getNamingStrategy()); + $namingStrategy = $this->createMock(NamingStrategy::class); + $this->configuration->setNamingStrategy($namingStrategy); + self::assertSame($namingStrategy, $this->configuration->getNamingStrategy()); } @@ -357,8 +361,11 @@ public function testSetGetEntityListenerResolver() { self::assertInstanceOf(EntityListenerResolver::class, $this->configuration->getEntityListenerResolver()); self::assertInstanceOf(DefaultEntityListenerResolver::class, $this->configuration->getEntityListenerResolver()); + $resolver = $this->createMock(EntityListenerResolver::class); + $this->configuration->setEntityListenerResolver($resolver); + self::assertSame($resolver, $this->configuration->getEntityListenerResolver()); } diff --git a/tests/Doctrine/Tests/ORM/Functional/CustomFunctionsTest.php b/tests/Doctrine/Tests/ORM/Functional/CustomFunctionsTest.php index a42fd90e3a1..ddf382780c2 100644 --- a/tests/Doctrine/Tests/ORM/Functional/CustomFunctionsTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/CustomFunctionsTest.php @@ -53,12 +53,13 @@ public function testCustomFunctionOverride() $user = new CmsUser(); $user->name = 'Bob'; $user->username = 'Dylan'; - $this->_em->persist($user); - $this->_em->flush(); - $this->_em->getConfiguration()->addCustomStringFunction('COUNT', 'Doctrine\Tests\ORM\Functional\CustomCount'); + $this->em->persist($user); + $this->em->flush(); + + $this->em->getConfiguration()->addCustomStringFunction('COUNT', 'Doctrine\Tests\ORM\Functional\CustomCount'); - $query = $this->_em->createQuery('SELECT COUNT(DISTINCT u.id) FROM Doctrine\Tests\Models\CMS\CmsUser u'); + $query = $this->em->createQuery('SELECT COUNT(DISTINCT u.id) FROM Doctrine\Tests\Models\CMS\CmsUser u'); $usersCount = $query->getSingleScalarResult(); diff --git a/tests/Doctrine/Tests/ORM/Query/QueryTest.php b/tests/Doctrine/Tests/ORM/Query/QueryTest.php index 70d026bc714..2080b51e3d6 100644 --- a/tests/Doctrine/Tests/ORM/Query/QueryTest.php +++ b/tests/Doctrine/Tests/ORM/Query/QueryTest.php @@ -290,7 +290,7 @@ public function testResultCacheEviction() */ public function testSelectJoinSubquery() { - $query = $this->_em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u JOIN (SELECT )"); + $query = $this->em->createQuery("select u from Doctrine\Tests\Models\CMS\CmsUser u JOIN (SELECT )"); $this->expectException(QueryException::class); $this->expectExceptionMessage('Subquery'); @@ -302,7 +302,7 @@ public function testSelectJoinSubquery() */ public function testSelectFromSubquery() { - $query = $this->_em->createQuery("select u from (select Doctrine\Tests\Models\CMS\CmsUser c) as u"); + $query = $this->em->createQuery("select u from (select Doctrine\Tests\Models\CMS\CmsUser c) as u"); $this->expectException(QueryException::class); $this->expectExceptionMessage('Subquery'); diff --git a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php index ad60545cf84..c2dd96bacda 100644 --- a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php @@ -1047,7 +1047,7 @@ public function testSubselectInSelect() { $this->assertSqlGeneration( 'SELECT u.name, (SELECT COUNT(p.phonenumber) FROM Doctrine\Tests\Models\CMS\CmsPhonenumber p WHERE p.phonenumber = 1234) pcount FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name = \'jon\'', - 'SELECT t0."name" AS c0, (SELECT COUNT(t1."phonenumber") AS dctrn__1 FROM "cms_phonenumbers" t1 WHERE t1."phonenumber" = 1234) AS c1 FROM "cms_users" t0 WHERE t0."name" = \'jon\'' + 'SELECT t0."name" AS c0, (SELECT COUNT(t1."phonenumber") AS c2 FROM "cms_phonenumbers" t1 WHERE t1."phonenumber" = 1234) AS c1 FROM "cms_users" t0 WHERE t0."name" = \'jon\'' ); } @@ -1209,7 +1209,7 @@ public function testSubSelectDiscriminator() { $this->assertSqlGeneration( 'SELECT u.name, (SELECT COUNT(cfc.id) total FROM Doctrine\Tests\Models\Company\CompanyFixContract cfc) as cfc_count FROM Doctrine\Tests\Models\CMS\CmsUser u', - 'SELECT t0."name" AS c0, (SELECT COUNT(t1."id") AS dctrn__total FROM "company_contracts" t1 WHERE t1."discr" IN (\'fix\')) AS c1 FROM "cms_users" t0' + 'SELECT t0."name" AS c0, (SELECT COUNT(t1."id") AS c2 FROM "company_contracts" t1 WHERE t1."discr" IN (\'fix\')) AS c1 FROM "cms_users" t0' ); } @@ -1762,7 +1762,7 @@ public function testSupportsSubSqlFunction() ); $this->assertSqlGeneration( 'SELECT u1 FROM Doctrine\Tests\Models\CMS\CmsUser u1 WHERE COUNT(u1.id) = ( SELECT SUM(u2.id) FROM Doctrine\Tests\Models\CMS\CmsUser u2 )', - 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE COUNT(t0."id") = (SELECT SUM(t1."id") AS dctrn__1 FROM "cms_users" t1)' + 'SELECT t0."id" AS c0, t0."status" AS c1, t0."username" AS c2, t0."name" AS c3 FROM "cms_users" t0 WHERE COUNT(t0."id") = (SELECT SUM(t1."id") AS c4 FROM "cms_users" t1)' ); $this->assertSqlGeneration( 'SELECT u1 FROM Doctrine\Tests\Models\CMS\CmsUser u1 WHERE COUNT(u1.id) <= ( SELECT SUM(u2.id) + COUNT(u2.email) FROM Doctrine\Tests\Models\CMS\CmsUser u2 )', diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/MetadataFilterTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/MetadataFilterTest.php index 24f3b54a3a8..2febcb05045 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Console/MetadataFilterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Console/MetadataFilterTest.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM\Tools\Console; +use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Tools\Console\MetadataFilter; use Doctrine\ORM\Tools\DisconnectedClassMetadataFactory; @@ -22,7 +23,7 @@ protected function setUp() : void parent::setUp(); $driver = $this->createAnnotationDriver(); - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $em->getConfiguration()->setMetadataDriverImpl($driver); @@ -141,44 +142,44 @@ public function testFilterWithRegex() : void } } -/** @Entity */ +/** @ORM\Entity */ class MetadataFilterTestEntityAaa { - /** @Id @Column */ + /** @ORM\Id @ORM\Column */ protected $id; } -/** @Entity */ +/** @ORM\Entity */ class MetadataFilterTestEntityBbb { - /** @Id @Column */ + /** @ORM\Id @ORM\Column */ protected $id; } -/** @Entity */ +/** @ORM\Entity */ class MetadataFilterTestEntityCcc { - /** @Id @Column */ + /** @ORM\Id @ORM\Column */ protected $id; } -/** @Entity */ +/** @ORM\Entity */ class MetadataFilterTestEntityFoo { - /** @Id @Column */ + /** @ORM\Id @ORM\Column */ protected $id; } -/** @Entity */ +/** @ORM\Entity */ class MetadataFilterTestEntityBar { - /** @Id @Column */ + /** @ORM\Id @ORM\Column */ protected $id; } -/** @Entity */ +/** @ORM\Entity */ class MetadataFilterTestEntityFooBar { - /** @Id @Column */ + /** @ORM\Id @ORM\Column */ protected $id; } diff --git a/tests/Doctrine/Tests/ORM/Tools/Pagination/CountOutputWalkerTest.php b/tests/Doctrine/Tests/ORM/Tools/Pagination/CountOutputWalkerTest.php index 64cc66a9544..620580cdcc1 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Pagination/CountOutputWalkerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Pagination/CountOutputWalkerTest.php @@ -36,12 +36,12 @@ public function provideDataForCountQuery() // Grouping support [ 'SELECT p.name FROM Doctrine\Tests\ORM\Tools\Pagination\Person p GROUP BY p.name', - 'SELECT COUNT(*) AS dctrn_count FROM (SELECT p0_."name" AS name_0 FROM "Person" p0_ GROUP BY p0_."name") dctrn_table' + 'SELECT COUNT(*) AS dctrn_count FROM (SELECT t0."name" AS c0 FROM "Person" t0 GROUP BY t0."name") dctrn_table' ], // Having support [ 'SELECT g, u, count(u.id) AS userCount FROM Doctrine\Tests\ORM\Tools\Pagination\Group g LEFT JOIN g.users u GROUP BY g.id HAVING userCount > 0', - 'SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT c1 FROM (SELECT count(t0."id") AS c0, t1."id" AS c1, t0."id" AS c2 FROM "groups" t1 LEFT JOIN "user_group" t2 ON t1."id" = t2."group_id" LEFT JOIN "User" t0 ON t0."id" = t2."user_id" GROUP BY t1."id" HAVING c0 > 0) dctrn_result) dctrn_table' + 'SELECT COUNT(*) AS dctrn_count FROM (SELECT count(t0."id") AS c0, t1."id" AS c1, t0."id" AS c2 FROM "groups" t1 LEFT JOIN "user_group" t2 ON t1."id" = t2."group_id" LEFT JOIN "User" t0 ON t0."id" = t2."user_id" GROUP BY t1."id" HAVING c0 > 0) dctrn_table' ], ]; } diff --git a/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php b/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php index 03073905d22..23398b422de 100644 --- a/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php @@ -2,8 +2,10 @@ namespace Doctrine\Tests\ORM\Tools; -use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Annotation as ORM; +use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; +use Doctrine\ORM\Mapping\InheritanceType; use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs; use Doctrine\ORM\Tools\Event\GenerateSchemaTableEventArgs; use Doctrine\ORM\Tools\SchemaTool; @@ -172,12 +174,18 @@ public function testRemoveUniqueIndexOverruledByPrimaryKey() public function testSetDiscriminatorColumnWithoutLength() : void { - $em = $this->_getTestEntityManager(); + $em = $this->getTestEntityManager(); $schemaTool = new SchemaTool($em); $metadata = $em->getClassMetadata(FirstEntity::class); - $metadata->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE); - $metadata->setDiscriminatorColumn(['name' => 'discriminator', 'type' => 'string']); + $metadata->setInheritanceType(InheritanceType::SINGLE_TABLE); + + $discriminatorColumn = new DiscriminatorColumnMetadata(); + + $discriminatorColumn->setColumnName('discriminator'); + $discriminatorColumn->setType(Type::getType('string')); + + $metadata->setDiscriminatorColumn($discriminatorColumn); $schema = $schemaTool->getSchemaFromMetadata([$metadata]); From c84a82d6a6ca43fcbe20da833f34c65065f038be Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 23 Jun 2017 00:05:51 -0400 Subject: [PATCH 144/275] Removed Builders --- .../ORM/Cache/DefaultCacheFactory.php | 17 +- .../Builder/AssociationMetadataBuilder.php | 213 ------ .../Mapping/Builder/CacheMetadataBuilder.php | 74 -- .../Mapping/Builder/ClassMetadataBuilder.php | 587 ---------------- .../Mapping/Builder/ColumnMetadataBuilder.php | 199 ------ .../DiscriminatorColumnMetadataBuilder.php | 60 -- .../ORM/Mapping/Builder/EmbeddedBuilder.php | 80 --- .../ORM/Mapping/Builder/FieldBuilder.php | 303 -------- .../Mapping/Builder/FieldMetadataBuilder.php | 75 -- .../Builder/JoinColumnMetadataBuilder.php | 115 --- .../Builder/JoinTableMetadataBuilder.php | 84 --- .../Builder/LocalColumnMetadataBuilder.php | 98 --- .../ManyToManyAssociationMetadataBuilder.php | 62 -- .../ManyToOneAssociationMetadataBuilder.php | 33 - .../MappedSuperClassMetadataBuilder.php | 126 ---- .../OneToManyAssociationMetadataBuilder.php | 33 - .../OneToOneAssociationMetadataBuilder.php | 33 - .../Mapping/Builder/TableMetadataBuilder.php | 170 ----- .../ToManyAssociationMetadataBuilder.php | 70 -- .../ToOneAssociationMetadataBuilder.php | 54 -- .../Builder/VersionFieldMetadataBuilder.php | 86 --- .../ORM/Mapping/Driver/AnnotationDriver.php | 63 +- .../ORM/Mapping/Driver/DatabaseDriver.php | 2 - .../EntityListenerBuilder.php | 2 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 31 +- .../Exporter/AssociationMetadataExporter.php | 4 +- .../Exporter/CacheMetadataExporter.php | 4 +- .../Exporter/ClassMetadataExporter.php | 4 +- .../Exporter/ColumnMetadataExporter.php | 4 +- .../DiscriminatorColumnMetadataExporter.php | 4 +- .../ORM/Mapping/Exporter/Exporter.php | 2 +- .../Exporter/FieldMetadataExporter.php | 4 +- .../Exporter/JoinColumnMetadataExporter.php | 4 +- .../Exporter/JoinTableMetadataExporter.php | 4 +- .../Exporter/LocalColumnMetadataExporter.php | 4 +- .../ManyToManyAssociationMetadataExporter.php | 4 +- .../ManyToOneAssociationMetadataExporter.php | 4 +- .../OneToManyAssociationMetadataExporter.php | 4 +- .../OneToOneAssociationMetadataExporter.php | 4 +- .../Exporter/TableMetadataExporter.php | 4 +- .../ToManyAssociationMetadataExporter.php | 4 +- .../ToOneAssociationMetadataExporter.php | 4 +- .../Exporter/TransientMetadataExporter.php | 4 +- .../ORM/Mapping/Exporter/VariableExporter.php | 4 +- .../Exporter/VersionFieldMetadataExporter.php | 4 +- .../Factory/ClassMetadataGenerator.php | 2 +- .../Builder/ClassMetadataBuilderTest.php | 653 ------------------ .../Builder/TableMetadataBuilderTest.php | 138 ---- .../Tests/ORM/Mapping/FieldBuilderTest.php | 34 - 49 files changed, 91 insertions(+), 3484 deletions(-) delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/AssociationMetadataBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/CacheMetadataBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/ColumnMetadataBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/DiscriminatorColumnMetadataBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/EmbeddedBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/FieldMetadataBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/JoinColumnMetadataBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/JoinTableMetadataBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/LocalColumnMetadataBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationMetadataBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/ManyToOneAssociationMetadataBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/MappedSuperClassMetadataBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/OneToManyAssociationMetadataBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/OneToOneAssociationMetadataBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/TableMetadataBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/ToManyAssociationMetadataBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/ToOneAssociationMetadataBuilder.php delete mode 100644 lib/Doctrine/ORM/Mapping/Builder/VersionFieldMetadataBuilder.php rename lib/Doctrine/ORM/Mapping/{Builder => Driver}/EntityListenerBuilder.php (98%) delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/Builder/TableMetadataBuilderTest.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/FieldBuilderTest.php diff --git a/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php b/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php index 7096a0c8016..22c15e549fa 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php +++ b/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php @@ -36,7 +36,6 @@ use Doctrine\ORM\Cache\Region\UpdateTimestampCache; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\AssociationMetadata; -use Doctrine\ORM\Mapping\Builder\CacheMetadataBuilder; use Doctrine\ORM\Mapping\CacheMetadata; use Doctrine\ORM\Mapping\CacheUsage; use Doctrine\ORM\Mapping\ClassMetadata; @@ -179,14 +178,12 @@ public function buildCachedCollectionPersister( */ public function buildQueryCache(EntityManagerInterface $em, $regionName = null) { - $builder = new CacheMetadataBuilder(); - - $builder - ->withRegion($regionName ?: Cache::DEFAULT_QUERY_REGION_NAME) - ->withUsage(CacheUsage::NONSTRICT_READ_WRITE) - ; - - return new DefaultQueryCache($em, $this->getRegion($builder->build())); + $cacheMetadata = new CacheMetadata( + CacheUsage::NONSTRICT_READ_WRITE, + $regionName ?: Cache::DEFAULT_QUERY_REGION_NAME + ); + + return new DefaultQueryCache($em, $this->getRegion($cacheMetadata)); } /** @@ -211,7 +208,7 @@ public function buildEntityHydrator(EntityManagerInterface $em, ClassMetadata $m public function getRegion(CacheMetadata $cache) { $regionName = $cache->getRegion(); - + if (isset($this->regions[$regionName])) { return $this->regions[$regionName]; } diff --git a/lib/Doctrine/ORM/Mapping/Builder/AssociationMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/AssociationMetadataBuilder.php deleted file mode 100644 index a5641bb342a..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/AssociationMetadataBuilder.php +++ /dev/null @@ -1,213 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -use Doctrine\ORM\Mapping\AssociationMetadata; -use Doctrine\ORM\Mapping\CacheMetadata; -use Doctrine\ORM\Mapping\FetchMode; - -abstract class AssociationMetadataBuilder -{ - /** @var string */ - protected $name; - - /** @var string */ - protected $targetEntity; - - /** @var string */ - private $sourceEntity; - - /** @var string */ - private $mappedBy; - - /** @var null|string */ - private $inversedBy; - - /** @var string */ - private $fetchMode = FetchMode::LAZY; - - /** @var array */ - private $cascade = []; - - /** @var boolean */ - protected $primaryKey = false; - - /** @var bool */ - private $orphanRemoval = false; - - /** @var null|CacheMetadata */ - private $cache = null; - - /** - * @param string $name - * - * @return self - */ - public function withName(string $name) - { - $this->name = $name; - - return $this; - } - - /** - * @param string $targetEntity - * - * @return self - */ - public function withTargetEntity(string $targetEntity) - { - $this->targetEntity = $targetEntity; - - return $this; - } - - /** - * @param string $sourceEntity - * - * @return self - */ - public function withSourceEntity(string $sourceEntity) - { - $this->sourceEntity = $sourceEntity; - - return $this; - } - - /** - * @param string $mappedBy - * - * @return self - */ - public function withMappedBy(string $mappedBy) - { - $this->mappedBy = $mappedBy; - - return $this; - } - - /** - * @param null|string $inversedBy - * - * @return self - */ - public function withInversedBy(string $inversedBy = null) - { - $this->inversedBy = $inversedBy; - - return $this; - } - - /** - * @param string $fetchMode - * - * @return self - */ - public function withFetchMode(string $fetchMode) - { - $this->fetchMode = $fetchMode; - - return $this; - } - - /** - * @param array $cascade - * - * @return self - */ - public function withCascade(array $cascade) - { - $this->cascade = $cascade; - - return $this; - } - - /** - * @param bool $primaryKey - * - * @return self - */ - public function withPrimaryKey(bool $primaryKey) - { - $this->primaryKey = $primaryKey; - - return $this; - } - - /** - * @param bool $orphanRemoval - * - * @return self - */ - public function withOrphanRemoval(bool $orphanRemoval) - { - $this->orphanRemoval = $orphanRemoval; - - return $this; - } - - /** - * @param null|CacheMetadata $cache - * - * @return self - */ - public function withCache(?CacheMetadata $cache) - { - $this->cache = $cache; - - return $this; - } - - /** - * @return AssociationMetadata - */ - public function build() - { - $associationMetadata = $this->createMetadataObject(); - - $associationMetadata->setName($this->name); - $associationMetadata->setTargetEntity($this->targetEntity); - - if ($this->sourceEntity !== null) { - $associationMetadata->setSourceEntity($this->sourceEntity); - } - - if ($this->mappedBy !== null) { - $associationMetadata->setMappedBy($this->mappedBy); - } - - if ($this->inversedBy !== null) { - $associationMetadata->setInversedBy($this->inversedBy); - } - - $associationMetadata->setFetchMode($this->fetchMode); - $associationMetadata->setCascade($this->cascade); - $associationMetadata->setPrimaryKey($this->primaryKey); - $associationMetadata->setOrphanRemoval($this->orphanRemoval); - $associationMetadata->setCache($this->cache); - - return $associationMetadata; - } - - /** - * @return AssociationMetadata - */ - abstract protected function createMetadataObject(); -} diff --git a/lib/Doctrine/ORM/Mapping/Builder/CacheMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/CacheMetadataBuilder.php deleted file mode 100644 index 3278055f1a6..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/CacheMetadataBuilder.php +++ /dev/null @@ -1,74 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -use Doctrine\ORM\Mapping\CacheMetadata; - -class CacheMetadataBuilder -{ - /** @var string */ - protected $usage; - - /** @var string */ - protected $region; - - /** - * @param string $usage - * - * @return self - */ - public function withUsage(string $usage) - { - $this->usage = $usage; - - return $this; - } - - /** - * @param string $region - * - * @return self - */ - public function withRegion(string $region) - { - $this->region = $region; - - return $this; - } - - /** - * @return CacheMetadata - */ - public function build() - { - return $this->createMetadataObject(); - } - - /** - * @return CacheMetadata - */ - protected function createMetadataObject() - { - return new CacheMetadata($this->usage, $this->region); - } -} diff --git a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php deleted file mode 100644 index a9d4e24b395..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php +++ /dev/null @@ -1,587 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Mapping\CacheMetadata; -use Doctrine\ORM\Mapping\ChangeTrackingPolicy; -use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; -use Doctrine\ORM\Mapping\FieldMetadata; -use Doctrine\ORM\Mapping\InheritanceType; -use Doctrine\ORM\Mapping\TableMetadata; -use Doctrine\ORM\Mapping\VersionFieldMetadata; - -/** - * Builder Object for ClassMetadata - * - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link www.doctrine-project.com - * @since 2.2 - * @author Benjamin Eberlei - * @author Guilherme Blanco - */ -class ClassMetadataBuilder -{ - const EMBEDDED_CLASS = 'EmbeddedClassMetadata'; - - const ENTITY_CLASS = 'EntityClassMetadata'; - - const MAPPED_SUPERCLASS = 'MappedSuperClassMetadata'; - - /** @var string */ - private $type = self::ENTITY_CLASS; - - /** @var bool */ - private $readOnly = false; - - /** - * @var \Doctrine\ORM\Mapping\ClassMetadata - */ - private $cm; - - /** - * @param \Doctrine\ORM\Mapping\ClassMetadata $cm - */ - public function __construct(ClassMetadata $cm) - { - $this->cm = $cm; - } - - /** - * @return ClassMetadata - */ - public function getClassMetadata() - { - return $this->cm; - } - - /** - * Marks the class as mapped superclass. - * - * @return ClassMetadataBuilder - */ - public function asMappedSuperClass() - { - $this->cm->isMappedSuperclass = true; - $this->cm->isEmbeddedClass = false; - - return $this; - } - - /** - * Marks the class as embeddable. - * - * @return ClassMetadataBuilder - */ - public function asEmbeddable() - { - $this->cm->isEmbeddedClass = true; - $this->cm->isMappedSuperclass = false; - - return $this; - } - - /** - * Marks class read only. - * - * @return ClassMetadataBuilder - */ - public function asReadOnly() - { - $this->cm->asReadOnly(); - - return $this; - } - - /** - * Adds and embedded class - * - * @param string $fieldName - * @param string $class - * @param string|null $columnPrefix - * - * @return $this - */ - public function addEmbedded($fieldName, $class, $columnPrefix = null) - { - $this->cm->mapEmbedded( - [ - 'fieldName' => $fieldName, - 'class' => $class, - 'columnPrefix' => $columnPrefix - ] - ); - - return $this; - } - - /** - * Sets custom Repository class name. - * - * @param string $repositoryClassName - * - * @return ClassMetadataBuilder - */ - public function withCustomRepositoryClass($repositoryClassName) - { - $this->cm->setCustomRepositoryClass($repositoryClassName); - - return $this; - } - - /** - * Sets the table metadata. - * - * @param TableMetadata $tableMetadata - * - * @return ClassMetadataBuilder - */ - public function withTable(TableMetadata $tableMetadata) - { - $this->cm->setTable($tableMetadata); - - return $this; - } - - /** - * @param null|CacheMetadata $cache - * - * @return self - */ - public function withCache(CacheMetadata $cache = null) - { - $this->cm->setCache($cache); - - return $this; - } - - /** - * Adds named query. - * - * @param string $name - * @param string $dqlQuery - * - * @return ClassMetadataBuilder - */ - public function addNamedQuery($name, $dqlQuery) - { - $this->cm->addNamedQuery( - [ - 'name' => $name, - 'query' => $dqlQuery, - ] - ); - - return $this; - } - - /** - * Sets class as root of a joined table inheritance hierarchy. - * - * @return ClassMetadataBuilder - */ - public function setJoinedTableInheritance() - { - $this->cm->setInheritanceType(InheritanceType::JOINED); - - return $this; - } - - /** - * Sets class as root of a single table inheritance hierarchy. - * - * @return ClassMetadataBuilder - */ - public function setSingleTableInheritance() - { - $this->cm->setInheritanceType(InheritanceType::SINGLE_TABLE); - - return $this; - } - - /** - * Sets the discriminator column. - * - * @param DiscriminatorColumnMetadata $discriminatorColumn - * - * @return ClassMetadataBuilder - */ - public function setDiscriminatorColumn(DiscriminatorColumnMetadata $discriminatorColumn) - { - $this->cm->setDiscriminatorColumn($discriminatorColumn); - - return $this; - } - - /** - * Adds a subclass to this inheritance hierarchy. - * - * @param string $name - * @param string $class - * - * @return ClassMetadataBuilder - */ - public function addDiscriminatorMapClass($name, $class) - { - $this->cm->addDiscriminatorMapClass($name, $class); - - return $this; - } - - /** - * Sets deferred explicit change tracking policy. - * - * @return ClassMetadataBuilder - */ - public function setChangeTrackingPolicyDeferredExplicit() - { - $this->cm->setChangeTrackingPolicy(ChangeTrackingPolicy::DEFERRED_EXPLICIT); - - return $this; - } - - /** - * Sets notify change tracking policy. - * - * @return ClassMetadataBuilder - */ - public function setChangeTrackingPolicyNotify() - { - $this->cm->setChangeTrackingPolicy(ChangeTrackingPolicy::NOTIFY); - - return $this; - } - - /** - * Adds lifecycle event. - * - * @param string $methodName - * @param string $event - * - * @return ClassMetadataBuilder - */ - public function addLifecycleEvent($methodName, $event) - { - $this->cm->addLifecycleCallback($methodName, $event); - - return $this; - } - - /** - * Adds Field. - * - * @param string $name - * @param string $type - * @param array $mapping - * - * @return ClassMetadataBuilder - */ - public function addProperty($name, $type, array $mapping = []) - { - $fieldMetadata = isset($mapping['version']) && $mapping['version'] - ? new VersionFieldMetadata($name) - : new FieldMetadata($name) - ; - - $fieldMetadata->setType(Type::getType($type)); - - if (isset($mapping['columnName'])) { - $fieldMetadata->setColumnName($mapping['columnName']); - } - - if (isset($mapping['length'])) { - $fieldMetadata->setLength((int) $mapping['length']); - } - - if (isset($mapping['precision'])) { - $fieldMetadata->setPrecision((int) $mapping['precision']); - } - - if (isset($mapping['scale'])) { - $fieldMetadata->setScale((int) $mapping['scale']); - } - - if (isset($mapping['id'])) { - $fieldMetadata->setPrimaryKey($mapping['id']); - } - - if (isset($mapping['unique'])) { - $fieldMetadata->setUnique($mapping['unique']); - } - - if (isset($mapping['nullable'])) { - $fieldMetadata->setNullable($mapping['nullable']); - } - - if (isset($mapping['columnDefinition'])) { - $fieldMetadata->setColumnDefinition($mapping['columnDefinition']); - } - - if (isset($mapping['options'])) { - $fieldMetadata->setOptions($mapping['options']); - } - - $this->cm->addProperty($fieldMetadata); - - return $this; - } - - /** - * Creates a field builder. - * - * @param string $name - * @param string $type - * - * @return FieldBuilder - */ - public function createField(string $name, string $type) - { - return new FieldBuilder($this, $name, Type::getType($type)); - } - - /** - * Creates an embedded builder. - * - * @param string $fieldName - * @param string $class - * - * @return EmbeddedBuilder - */ - public function createEmbedded($fieldName, $class) - { - return new EmbeddedBuilder( - $this, - [ - 'fieldName' => $fieldName, - 'class' => $class, - 'columnPrefix' => null - ] - ); - } - - /** - * Adds a simple many to one association, optionally with the inversed by field. - * - * @param string $name - * @param string $targetEntity - * @param string|null $inversedBy - * - * @return ClassMetadataBuilder - */ - public function addManyToOne(string $name, string $targetEntity, string $inversedBy = null) - { - $builder = $this->createManyToOne($name, $targetEntity); - - if ($inversedBy) { - $builder->inversedBy($inversedBy); - } - - $this->cm->addProperty($builder->build()); - - return $this; - } - - /** - * Creates a ManyToOne Association Builder. - * - * Note: This method does not add the association, you have to call build() on the AssociationBuilder. - * - * @param string $name - * @param string $targetEntity - * - * @return ManyToOneAssociationMetadataBuilder - */ - public function createManyToOne(string $name, string $targetEntity) - { - $builder = new ManyToOneAssociationMetadataBuilder(); - - $builder - ->withName($name) - ->withTargetEntity($targetEntity) - ; - - return $builder; - } - - /** - * Creates a OneToOne Association Builder. - * - * @param string $name - * @param string $targetEntity - * - * @return OneToOneAssociationMetadataBuilder - */ - public function createOneToOne(string $name, string $targetEntity) - { - $builder = new OneToOneAssociationMetadataBuilder(); - - $builder - ->withName($name) - ->withTargetEntity($targetEntity) - ; - - return $builder; - } - - /** - * Adds simple inverse one-to-one association. - * - * @param string $name - * @param string $targetEntity - * @param string $mappedBy - * - * @return ClassMetadataBuilder - */ - public function addInverseOneToOne(string $name, string $targetEntity, string $mappedBy) - { - $builder = $this->createOneToOne($name, $targetEntity); - - $builder->withMappedBy($mappedBy); - - $this->cm->addProperty($builder->build()); - - return $this; - } - - /** - * Adds simple owning one-to-one association. - * - * @param string $name - * @param string $targetEntity - * @param string|null $inversedBy - * - * @return ClassMetadataBuilder - */ - public function addOwningOneToOne(string $name, string $targetEntity, string $inversedBy = null) - { - $builder = $this->createOneToOne($name, $targetEntity); - - if ($inversedBy) { - $builder->withInversedBy($inversedBy); - } - - $this->cm->addProperty($builder->build()); - - return $this; - } - - /** - * Creates a ManyToMany Association Builder. - * - * @param string $name - * @param string $targetEntity - * - * @return ManyToManyAssociationMetadataBuilder - */ - public function createManyToMany(string $name, string $targetEntity) - { - $builder = new ManyToManyAssociationMetadataBuilder(); - - $builder - ->withName($name) - ->withTargetEntity($targetEntity) - ; - - return $builder; - } - - /** - * Adds a simple owning many to many association. - * - * @param string $name - * @param string $targetEntity - * @param string|null $inversedBy - * - * @return ClassMetadataBuilder - */ - public function addOwningManyToMany(string $name, string $targetEntity, string $inversedBy = null) - { - $builder = $this->createManyToMany($name, $targetEntity); - - if ($inversedBy) { - $builder->withInversedBy($inversedBy); - } - - $this->cm->addProperty($builder->build()); - - return $this; - } - - /** - * Adds a simple inverse many to many association. - * - * @param string $name - * @param string $targetEntity - * @param string $mappedBy - * - * @return ClassMetadataBuilder - */ - public function addInverseManyToMany(string $name, string $targetEntity, string $mappedBy) - { - $builder = $this->createManyToMany($name, $targetEntity); - - $builder->withMappedBy($mappedBy); - - $this->cm->addProperty($builder->build()); - - return $this; - } - - /** - * Creates a one to many association builder. - * - * @param string $name - * @param string $targetEntity - * - * @return OneToManyAssociationMetadataBuilder - */ - public function createOneToMany($name, $targetEntity) - { - $builder = new OneToManyAssociationMetadataBuilder(); - - $builder - ->withName($name) - ->withTargetEntity($targetEntity) - ; - - return $builder; - } - - /** - * Adds simple OneToMany association. - * - * @param string $name - * @param string $targetEntity - * @param string $mappedBy - * - * @return ClassMetadataBuilder - */ - public function addOneToMany($name, $targetEntity, $mappedBy) - { - $builder = $this->createOneToMany($name, $targetEntity); - - $builder->withMappedBy($mappedBy); - - $this->cm->addProperty($builder->build()); - - return $this; - } -} diff --git a/lib/Doctrine/ORM/Mapping/Builder/ColumnMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ColumnMetadataBuilder.php deleted file mode 100644 index 057f790ccc9..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/ColumnMetadataBuilder.php +++ /dev/null @@ -1,199 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Mapping\ColumnMetadata; - -abstract class ColumnMetadataBuilder -{ - /** @var string */ - protected $tableName; - - /** @var string */ - protected $columnName; - - /** @var Type */ - protected $type; - - /** @var int */ - protected $length = 255; - - /** @var int */ - protected $scale; - - /** @var int */ - protected $precision; - - /** @var string */ - protected $columnDefinition; - - /** @var array */ - protected $options = []; - - /** @var bool */ - protected $primaryKey = false; - - /** @var bool */ - protected $nullable = false; - - /** @var bool */ - protected $unique = false; - - /** - * ColumnMetadataBuilder constructor. - * - */ - public function __construct() - { - $this->type = Type::getType('string'); - } - - /** - * @param string $columnName - * - * @return self - */ - public function withColumnName(string $columnName) - { - $this->columnName = $columnName; - - return $this; - } - - /** - * @param Type $type - * - * @return self - */ - public function withType(Type $type) - { - $this->type = $type; - - return $this; - } - - /** - * @param string $tableName - * - * @return self - */ - public function withTableName(string $tableName) - { - $this->tableName = $tableName; - - return $this; - } - - /** - * @param string $columnDefinition - * - * @return self - */ - public function withColumnDefinition(string $columnDefinition) - { - $this->columnDefinition = $columnDefinition; - - return $this; - } - - /** - * @param array $options - * - * @return self - */ - public function withOptions(array $options) - { - $this->options = $options; - - return $this; - } - - /** - * @param bool $primaryKey - * - * @return self - */ - public function withPrimaryKey(bool $primaryKey) - { - $this->primaryKey = $primaryKey; - - return $this; - } - - /** - * @param bool $nullable - * - * @return self - */ - public function withNullable(bool $nullable) - { - $this->nullable = $nullable; - - return $this; - } - - /** - * @param bool $unique - * - * @return self - */ - public function withUnique(bool $unique) - { - $this->unique = $unique; - - return $this; - } - - /** - * @return ColumnMetadata - */ - public function build() - { - $columnMetadata = $this->createMetadataObject(); - - if ($this->tableName !== null) { - $columnMetadata->setTableName($this->tableName); - } - - if ($this->columnDefinition !== null) { - $columnMetadata->setColumnDefinition($this->columnDefinition); - } - - // @todo guilhermeblanco Remove this once constructor arguments is in place - $columnMetadata->setColumnName($this->columnName); - $columnMetadata->setType($this->type); - - $columnMetadata->setOptions($this->options); - $columnMetadata->setPrimaryKey($this->primaryKey); - $columnMetadata->setNullable($this->nullable); - $columnMetadata->setUnique($this->unique); - - return $columnMetadata; - } - - /** - * @return ColumnMetadata - */ - abstract protected function createMetadataObject(); -} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/DiscriminatorColumnMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/DiscriminatorColumnMetadataBuilder.php deleted file mode 100644 index 50fa516615f..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/DiscriminatorColumnMetadataBuilder.php +++ /dev/null @@ -1,60 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; -use Doctrine\ORM\Mapping\MappingException; - -class DiscriminatorColumnMetadataBuilder extends LocalColumnMetadataBuilder -{ - /** @var string */ - protected $columnName = 'dtype'; - - /** - * {@inheritdoc} - * - * @throws MappingException - */ - public function withType(Type $type) - { - $disallowedTypeList = ['boolean', 'array', 'object', 'datetime', 'time', 'date']; - $typeName = $type->getName(); - - if (in_array($typeName, $disallowedTypeList)) { - throw MappingException::invalidDiscriminatorColumnType($typeName); - } - - $this->type = $type; - - return $this; - } - - /** - * @return DiscriminatorColumnMetadata - */ - protected function createMetadataObject() - { - return new DiscriminatorColumnMetadata(); // new DiscriminatorColumnMetadata($this->columnName, $this->type); - } -} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/EmbeddedBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/EmbeddedBuilder.php deleted file mode 100644 index de8383c5357..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/EmbeddedBuilder.php +++ /dev/null @@ -1,80 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -/** - * Embedded Builder - * - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link www.doctrine-project.com - * @since 2.5 - * @author Guido Contreras Woda - */ -class EmbeddedBuilder -{ - /** - * @var ClassMetadataBuilder - */ - private $builder; - - /** - * @var array - */ - private $mapping; - - /** - * @param ClassMetadataBuilder $builder - * @param array $mapping - */ - public function __construct(ClassMetadataBuilder $builder, array $mapping) - { - $this->builder = $builder; - $this->mapping = $mapping; - } - - /** - * Sets the column prefix for all of the embedded columns. - * - * @param string $columnPrefix - * @return $this - */ - public function setColumnPrefix($columnPrefix) - { - $this->mapping['columnPrefix'] = $columnPrefix; - - return $this; - } - - /** - * Finalizes this embeddable and attach it to the ClassMetadata. - * - * Without this call an EmbeddedBuilder has no effect on the ClassMetadata. - * - * @return ClassMetadataBuilder - */ - public function build() - { - $cm = $this->builder->getClassMetadata(); - - $cm->mapEmbedded($this->mapping); - - return $this->builder; - } -} diff --git a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php deleted file mode 100644 index 1382c2b931f..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php +++ /dev/null @@ -1,303 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; -use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Mapping\GeneratorType; - -/** - * Field Builder - * - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link www.doctrine-project.com - * @since 2.2 - * @author Benjamin Eberlei - */ -class FieldBuilder -{ - /** - * @var ClassMetadataBuilder - */ - private $builder; - - /** - * @var string - */ - private $name; - - /** - * @var Type - */ - private $type; - - /** - * @var array - */ - private $mapping; - - /** - * @var string - */ - private $generatedValue; - - /** - * @var array - */ - private $generatorDefinition; - - /** - * @param ClassMetadataBuilder $builder - * @param string $name - * @param Type $type - */ - public function __construct(ClassMetadataBuilder $builder, $name, Type $type) - { - $this->builder = $builder; - $this->name = $name; - $this->type = $type; - $this->mapping = []; - } - - /** - * Sets length. - * - * @param int $length - * - * @return FieldBuilder - */ - public function length($length) - { - $this->mapping['length'] = $length; - - return $this; - } - - /** - * Sets nullable. - * - * @param bool $flag - * - * @return FieldBuilder - */ - public function nullable($flag = true) - { - $this->mapping['nullable'] = (bool) $flag; - - return $this; - } - - /** - * Sets Unique. - * - * @param bool $flag - * - * @return FieldBuilder - */ - public function unique($flag = true) - { - $this->mapping['unique'] = (bool) $flag; - - return $this; - } - - /** - * Sets column name. - * - * @param string $name - * - * @return FieldBuilder - */ - public function columnName($name) - { - $this->mapping['columnName'] = $name; - - return $this; - } - - /** - * Sets Precision. - * - * @param int $p - * - * @return FieldBuilder - */ - public function precision($p) - { - $this->mapping['precision'] = $p; - - return $this; - } - - /** - * Sets scale. - * - * @param int $s - * - * @return FieldBuilder - */ - public function scale($s) - { - $this->mapping['scale'] = $s; - - return $this; - } - - /** - * Sets field as primary key. - * - * @deprecated Use makePrimaryKey() instead - * @return FieldBuilder - */ - public function isPrimaryKey() - { - return $this->makePrimaryKey(); - } - - /** - * Sets field as primary key. - * - * @return FieldBuilder - */ - public function makePrimaryKey() - { - $this->mapping['id'] = true; - - return $this; - } - - /** - * Sets an option. - * - * @param string $name - * @param mixed $value - * - * @return FieldBuilder - */ - public function option($name, $value) - { - $this->mapping['options'][$name] = $value; - - return $this; - } - - /** - * @param string $strategy - * - * @return FieldBuilder - */ - public function generatedValue($strategy = 'AUTO') - { - $this->generatedValue = $strategy; - - return $this; - } - - /** - * Sets field versioned. - * - * @return FieldBuilder - */ - public function isVersionField() - { - $this->mapping['version'] = true; - - return $this; - } - - /** - * Sets Sequence Generator. - * - * @param string $sequenceName - * @param int $allocationSize - * - * @return FieldBuilder - */ - public function setSequenceGenerator($sequenceName, $allocationSize = 1) - { - $this->generatorDefinition = [ - 'sequenceName' => $sequenceName, - 'allocationSize' => $allocationSize, - ]; - - return $this; - } - - /** - * Sets column definition. - * - * @param string $def - * - * @return FieldBuilder - */ - public function columnDefinition($def) - { - $this->mapping['columnDefinition'] = $def; - - return $this; - } - - /** - * Set the FQCN of the custom ID generator. - * This class must extend \Doctrine\ORM\Sequencing\Generator. - * - * @param string $customIdGenerator - * @param array $arguments - * - * @return $this - */ - public function setCustomIdGenerator($customIdGenerator, array $arguments = []) - { - $this->generatorDefinition = [ - 'class' => (string) $customIdGenerator, - 'arguments' => $arguments, - ]; - - return $this; - } - - /** - * Finalizes this field and attach it to the ClassMetadata. - * - * Without this call a FieldBuilder has no effect on the ClassMetadata. - * - * @return ClassMetadataBuilder - */ - public function build() - { - $cm = $this->builder->getClassMetadata(); - - if ($this->generatedValue) { - $cm->setIdGeneratorType(constant(sprintf('%s::%s', GeneratorType::class, strtoupper($this->generatedValue)))); - } - - $this->builder->addProperty($this->name, $this->type->getName(), $this->mapping); - - $property = $cm->getProperty($this->name); - - if (isset($this->mapping['version']) && $this->mapping['version']) { - $cm->versionProperty = $property; - } - - if ($this->generatorDefinition) { - $cm->setGeneratorDefinition($this->generatorDefinition); - } - - return $this->builder; - } -} diff --git a/lib/Doctrine/ORM/Mapping/Builder/FieldMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/FieldMetadataBuilder.php deleted file mode 100644 index aa53ccbbd2d..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/FieldMetadataBuilder.php +++ /dev/null @@ -1,75 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; -use Doctrine\ORM\Mapping\Factory\NamingStrategy; -use Doctrine\ORM\Mapping\FieldMetadata; - -class FieldMetadataBuilder extends LocalColumnMetadataBuilder -{ - /** @var string */ - protected $name; - - /** @var NamingStrategy */ - private $namingStrategy; - - public function __construct(NamingStrategy $namingStrategy = null) - { - parent::__construct(); - - $this->namingStrategy = $namingStrategy ?: new DefaultNamingStrategy(); - } - - /** - * @param string $name - * - * @return self - */ - public function withName(string $name) - { - $this->name = $name; - - return $this; - } - - /** - * @return FieldMetadata - */ - public function build() - { - if (empty($this->columnName)) { - $this->columnName = $this->namingStrategy->propertyToColumnName($this->name); - } - - return parent::build(); - } - - /** - * @return FieldMetadata - */ - protected function createMetadataObject() - { - return new FieldMetadata($this->name); // new FieldMetadata($this->name, $this->columnName, $this->type); - } -} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/JoinColumnMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/JoinColumnMetadataBuilder.php deleted file mode 100644 index a68e992cc42..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/JoinColumnMetadataBuilder.php +++ /dev/null @@ -1,115 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; -use Doctrine\ORM\Mapping\Factory\NamingStrategy; -use Doctrine\ORM\Mapping\JoinColumnMetadata; - -class JoinColumnMetadataBuilder extends ColumnMetadataBuilder -{ - /** @var string */ - private $referencedColumnName; - - /** @var string */ - private $aliasedName; - - /** @var boolean */ - protected $nullable = true; - - /** @var string */ - private $onDelete; - - /** @var */ - private $namingStrategy; - - public function __construct(NamingStrategy $namingStrategy = null) - { - parent::__construct(); - - $this->namingStrategy = $namingStrategy ?: new DefaultNamingStrategy(); - } - - /** - * @param string $referencedColumnName - * - * @return self - */ - public function withReferencedColumnName(string $referencedColumnName) - { - $this->referencedColumnName = $referencedColumnName; - - return $this; - } - - /** - * @param string $aliasedName - * - * @return self - */ - public function withAliasedName(string $aliasedName) - { - $this->aliasedName = $aliasedName; - - return $this; - } - - /** - * @param string $onDelete - * - * @return self - */ - public function withOnDelete(string $onDelete) - { - $this->onDelete = strtoupper($onDelete); - - return $this; - } - - /** - * @return JoinColumnMetadata - */ - public function build() - { - if (empty($this->referencedColumnName)) { - $this->referencedColumnName = $this->namingStrategy->referenceColumnName(); - } - - /** @var JoinColumnMetadata $metadata */ - $metadata = parent::build(); - - $metadata->setReferencedColumnName($this->referencedColumnName); - $metadata->setAliasedName($this->aliasedName); - $metadata->setOnDelete($this->onDelete); - - return $metadata; - } - - /** - * @return JoinColumnMetadata - */ - protected function createMetadataObject() - { - return new JoinColumnMetadata(); // new JoinColumnMetadata($this->columnName, $this->type); - } -} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/JoinTableMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/JoinTableMetadataBuilder.php deleted file mode 100644 index c109fc73d4c..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/JoinTableMetadataBuilder.php +++ /dev/null @@ -1,84 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -use Doctrine\ORM\Mapping\JoinColumnMetadata; -use Doctrine\ORM\Mapping\JoinTableMetadata; - -class JoinTableMetadataBuilder extends TableMetadataBuilder -{ - /** @var array */ - protected $joinColumns = []; - - /** @var array */ - protected $inverseJoinColumns = []; - - /** - * @param JoinColumnMetadata $joinColumn - * - * @return self - */ - public function withJoinColumn(JoinColumnMetadata $joinColumn) - { - $this->joinColumns[] = $joinColumn; - - return $this; - } - - /** - * @param JoinColumnMetadata $joinColumn - * - * @return self - */ - public function withInverseJoinColumn(JoinColumnMetadata $joinColumn) - { - $this->inverseJoinColumns[] = $joinColumn; - - return $this; - } - - /** - * @return JoinTableMetadata - */ - public function build() - { - /** @var JoinTableMetadata $joinTableMetadata */ - $joinTableMetadata = parent::build(); - - foreach ($this->joinColumns as $joinColumn) { - $joinTableMetadata->addJoinColumn($joinColumn); - } - - foreach ($this->inverseJoinColumns as $inverseJoinColumn) { - $joinTableMetadata->addInverseJoinColumn($inverseJoinColumn); - } - - return $joinTableMetadata; - } - - /** - * @return JoinTableMetadata - */ - protected function createMetadataObject() - { - return new JoinTableMetadata(); - } - -} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/LocalColumnMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/LocalColumnMetadataBuilder.php deleted file mode 100644 index b2af7636db7..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/LocalColumnMetadataBuilder.php +++ /dev/null @@ -1,98 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Mapping\ColumnMetadata; -use Doctrine\ORM\Mapping\LocalColumnMetadata; - -abstract class LocalColumnMetadataBuilder extends ColumnMetadataBuilder -{ - /** @var int */ - protected $length = 255; - - /** @var int */ - protected $scale; - - /** @var int */ - protected $precision; - - /** - * @param int $length - * - * @return self - */ - public function withLength(int $length) - { - $this->length = $length; - - return $this; - } - - /** - * @param int $scale - * - * @return self - */ - public function withScale(int $scale) - { - $this->scale = $scale; - - return $this; - } - - /** - * @param int $precision - * - * @return self - */ - public function withPrecision(int $precision) - { - $this->precision = $precision; - - return $this; - } - - /** - * @return LocalColumnMetadata - */ - public function build() - { - /** @var LocalColumnMetadata $localColumnMetadata */ - $localColumnMetadata = parent::build(); - - if ($this->length !== null) { - $localColumnMetadata->setLength($this->length); - } - - if ($this->scale !== null) { - $localColumnMetadata->setScale($this->scale); - } - - if ($this->precision !== null) { - $localColumnMetadata->setPrecision($this->precision); - } - - return $localColumnMetadata; - } -} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationMetadataBuilder.php deleted file mode 100644 index e8b59266a98..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationMetadataBuilder.php +++ /dev/null @@ -1,62 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -use Doctrine\ORM\Mapping\JoinTableMetadata; -use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; - -class ManyToManyAssociationMetadataBuilder extends ToManyAssociationMetadataBuilder -{ - /** @var null|JoinTableMetadata */ - private $joinTable; - - /** - * @param null|JoinTableMetadata $joinTable - * - * @return self - */ - public function withJoinTable(JoinTableMetadata $joinTable = null) - { - $this->joinTable = $joinTable; - - return $this; - } - - /** - * @return ManyToManyAssociationMetadata - */ - public function build() - { - /** @var ManyToManyAssociationMetadata $associationMetadata */ - $associationMetadata = parent::build(); - - $associationMetadata->setJoinTable($this->joinTable); - - return $associationMetadata; - } - - /** - * @return ManyToManyAssociationMetadata - */ - protected function createMetadataObject() - { - return new ManyToManyAssociationMetadata($this->name); - } -} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/ManyToOneAssociationMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ManyToOneAssociationMetadataBuilder.php deleted file mode 100644 index 4200ab74f92..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/ManyToOneAssociationMetadataBuilder.php +++ /dev/null @@ -1,33 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -use Doctrine\ORM\Mapping\ManyToOneAssociationMetadata; - -class ManyToOneAssociationMetadataBuilder extends ToOneAssociationMetadataBuilder -{ - /** - * @return ManyToOneAssociationMetadata - */ - protected function createMetadataObject() - { - return new ManyToOneAssociationMetadata($this->name); - } -} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/MappedSuperClassMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/MappedSuperClassMetadataBuilder.php deleted file mode 100644 index 5d4dbd4dc6e..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/MappedSuperClassMetadataBuilder.php +++ /dev/null @@ -1,126 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -use Doctrine\ORM\Mapping\CacheMetadata; -use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; -use Doctrine\ORM\Mapping\Factory\NamingStrategy; -use Doctrine\ORM\Mapping\MappedSuperClassMetadata; -use Doctrine\ORM\Mapping\Property; - -class MappedSuperClassMetadataBuilder -{ - /** @var string */ - private $className; - - /** @var null|MappedSuperClassMetadata */ - private $parent = null; - - /** @var null|CacheMetadata */ - private $cache = null; - - /** @var null|string */ - private $customRepositoryClass; - - /** @var array */ - private $properties = []; - - /** @var NamingStrategy */ - private $namingStrategy; - - public function __construct(?NamingStrategy $namingStrategy = null) - { - $this->namingStrategy = $namingStrategy ?: new DefaultNamingStrategy(); - } - - /** - * @param string $className - * - * @return self - */ - public function withClassName(string $className) - { - $this->className = $className; - - return $this; - } - - /** - * @param null|MappedSuperClassMetadata $parent - * - * @return self - */ - public function withParent(?MappedSuperClassMetadata $parent) - { - $this->parent = $parent; - - return $this; - } - - /** - * @param null|CacheMetadata $cache - * - * @return self - */ - public function withCache(?CacheMetadata $cache) - { - $this->cache = $cache; - - return $this; - } - - /** - * @param null|string $customRepositoryClass - * - * @return self - */ - public function withCustomRepositoryClass(?string $customRepositoryClass) - { - $this->customRepositoryClass = $customRepositoryClass; - - return $this; - } - - /** - * @param Property $property - * - * @return self - */ - public function addProperty(Property $property) - { - $this->properties[$property->getName()] = $property; - - return $this; - } - - public function build() - { - $mappedSuperClassMetadata = new MappedSuperClassMetadata($this->className, $this->parent); - - $mappedSuperClassMetadata->setCache($this->cache); - $mappedSuperClassMetadata->setCustomRepositoryClass($this->customRepositoryClass); - - foreach ($this->properties as $property) { - $mappedSuperClassMetadata->addDeclaredProperty($property); - } - - return $mappedSuperClassMetadata; - } -} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/OneToManyAssociationMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/OneToManyAssociationMetadataBuilder.php deleted file mode 100644 index 7b672ebbfb4..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/OneToManyAssociationMetadataBuilder.php +++ /dev/null @@ -1,33 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; - -class OneToManyAssociationMetadataBuilder extends ToManyAssociationMetadataBuilder -{ - /** - * @return OneToManyAssociationMetadata - */ - protected function createMetadataObject() - { - return new OneToManyAssociationMetadata($this->name); - } -} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/OneToOneAssociationMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/OneToOneAssociationMetadataBuilder.php deleted file mode 100644 index eff7284ad71..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/OneToOneAssociationMetadataBuilder.php +++ /dev/null @@ -1,33 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; - -class OneToOneAssociationMetadataBuilder extends ToOneAssociationMetadataBuilder -{ - /** - * @return OneToOneAssociationMetadata - */ - protected function createMetadataObject() - { - return new OneToOneAssociationMetadata($this->name); - } -} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/TableMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/TableMetadataBuilder.php deleted file mode 100644 index b62b5087d61..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/TableMetadataBuilder.php +++ /dev/null @@ -1,170 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -use Doctrine\ORM\Mapping\TableMetadata; - -class TableMetadataBuilder -{ - /** @var string */ - protected $schema; - - /** @var string */ - protected $name; - - /** @var array */ - protected $options = []; - - /** @var array */ - protected $indexes = []; - - /** @var array */ - protected $uniqueConstraints = []; - - /** - * @param string $name - * - * @return self - */ - public function withName(string $name) - { - $this->name = $name; - - return $this; - } - - /** - * @param string $schema - * - * @return self - */ - public function withSchema(string $schema) - { - $this->schema = $schema; - - return $this; - } - - /** - * @param array $options - * - * @return self - */ - public function withOptions(array $options) - { - $this->options = $options; - - return $this; - } - - /** - * @param string $name - * @param mixed $value - * - * @return self - */ - public function withOption(string $name, $value) - { - $this->options[$name] = $value; - - return $this; - } - - /** - * @param string|null $name - * @param array $columns - * @param bool $unique - * @param array $options - * @param array $flags - * - * @return self - */ - public function withIndex($name, array $columns, bool $unique = false, array $options = [], array $flags = []) - { - $this->indexes[] = [ - 'name' => $name, - 'columns' => $columns, - 'unique' => $unique, - 'options' => $options, - 'flags' => $flags, - ]; - - return $this; - } - - /** - * @param string|null $name - * @param array $columns - * @param array $options - * @param array $flags - * - * @return self - */ - public function withUniqueConstraint($name, array $columns, array $options = [], array $flags = []) - { - $this->uniqueConstraints[] = [ - 'name' => $name, - 'columns' => $columns, - 'options' => $options, - 'flags' => $flags, - ]; - - return $this; - } - - /** - * @return TableMetadata - */ - public function build() - { - $tableMetadata = $this->createMetadataObject(); - - if ($this->name !== null) { - $tableMetadata->setName($this->name); - } - - if ($this->schema !== null) { - $tableMetadata->setSchema($this->schema); - } - - $tableMetadata->setOptions($this->options); - - foreach ($this->indexes as $index) { - $tableMetadata->addIndex($index); - } - - foreach ($this->uniqueConstraints as $constraint) { - $tableMetadata->addUniqueConstraint($constraint); - } - - return $tableMetadata; - } - - /** - * @return TableMetadata - */ - protected function createMetadataObject() - { - return new TableMetadata(); - } -} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/ToManyAssociationMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ToManyAssociationMetadataBuilder.php deleted file mode 100644 index b212a2df93b..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/ToManyAssociationMetadataBuilder.php +++ /dev/null @@ -1,70 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -use Doctrine\ORM\Mapping\ToManyAssociationMetadata; - -abstract class ToManyAssociationMetadataBuilder extends AssociationMetadataBuilder -{ - /** @var array */ - private $orderBy = []; - - /** @var null|string */ - private $indexedBy; - - /** - * @param string $field - * @param string $direction - * - * @return self - */ - public function withOrderBy(string $field, string $direction) - { - $this->orderBy[$field] = $direction; - - return $this; - } - - /** - * @param null|string $indexedBy - * - * @return self - */ - public function withIndexedBy(string $indexedBy = null) - { - $this->indexedBy = $indexedBy; - - return $this; - } - - /** - * @return ToManyAssociationMetadata - */ - public function build() - { - /** @var ToManyAssociationMetadata $associationMetadata */ - $associationMetadata = parent::build(); - - $associationMetadata->setIndexedBy($this->indexedBy); - $associationMetadata->setOrderBy($this->orderBy); - - return $associationMetadata; - } -} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/ToOneAssociationMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/ToOneAssociationMetadataBuilder.php deleted file mode 100644 index 4551a5e34ae..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/ToOneAssociationMetadataBuilder.php +++ /dev/null @@ -1,54 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -use Doctrine\ORM\Mapping\JoinColumnMetadata; -use Doctrine\ORM\Mapping\ToOneAssociationMetadata; - -abstract class ToOneAssociationMetadataBuilder extends AssociationMetadataBuilder -{ - /** @var array */ - private $joinColumns = []; - - /** - * @param JoinColumnMetadata $joinColumn - * - * @return self - */ - public function withJoinColumn(JoinColumnMetadata $joinColumn) - { - $this->joinColumns[] = $joinColumn; - - return $this; - } - - /** - * @return ToOneAssociationMetadata - */ - public function build() - { - /** @var ToOneAssociationMetadata $associationMetadata */ - $associationMetadata = parent::build(); - - $associationMetadata->setJoinColumns($this->joinColumns); - - return $associationMetadata; - } -} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Mapping/Builder/VersionFieldMetadataBuilder.php b/lib/Doctrine/ORM/Mapping/Builder/VersionFieldMetadataBuilder.php deleted file mode 100644 index 89b40957eb5..00000000000 --- a/lib/Doctrine/ORM/Mapping/Builder/VersionFieldMetadataBuilder.php +++ /dev/null @@ -1,86 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Builder; - -use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Mapping\MappingException; -use Doctrine\ORM\Mapping\VersionFieldMetadata; - -class VersionFieldMetadataBuilder extends FieldMetadataBuilder -{ - /** @var string */ - protected $name = 'version'; - - /** - * {@inheritdoc} - * - * @throws MappingException - */ - public function withType(Type $type) - { - $allowedTypeList = ['integer', 'bigint', 'smallint', 'datetime']; - $typeName = $type->getName(); - - if (! in_array($typeName, $allowedTypeList)) { - throw MappingException::unsupportedOptimisticLockingType($typeName); - } - - $this->type = $type; - - return $this; - } - - /** - * @return VersionFieldMetadata - */ - public function build() - { - if (! isset($this->options['default'])) { - $this->options['default'] = $this->resolveDefaultValue(); - } - - return parent::build(); - } - - /** - * @return VersionFieldMetadata - */ - protected function createMetadataObject() - { - return new VersionFieldMetadata($this->name); // new VersionFieldMetadata($this->name, $this->columnName, $this->type); - } - - /** - * @return int|string - */ - private function resolveDefaultValue() - { - switch ($this->type->getName()) { - case Type::DATETIME: - return 'CURRENT_TIMESTAMP'; - - default: - return 1; - } - } -} diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 5fd6963b4ec..96ebc17fcf1 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -25,10 +25,6 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Annotation; use Doctrine\ORM\Events; -use Doctrine\ORM\Mapping\Builder\CacheMetadataBuilder; -use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder; -use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; -use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; use Doctrine\ORM\Mapping; /** @@ -55,10 +51,9 @@ class AnnotationDriver extends AbstractAnnotationDriver */ public function loadMetadataForClass($className, ClassMetadataInterface $metadata) { - $builder = new ClassMetadataBuilder($metadata); - $class = $metadata->getReflectionClass(); + $class = $metadata->getReflectionClass(); - if ( ! $class) { + if (! $class) { // this happens when running annotation driver in combination with // static reflection services. This is not the nicest fix $class = new \ReflectionClass($metadata->name); @@ -80,11 +75,11 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $entityAnnot = $classAnnotations[Annotation\Entity::class]; if ($entityAnnot->repositoryClass !== null) { - $builder->withCustomRepositoryClass($entityAnnot->repositoryClass); + $metadata->setCustomRepositoryClass($entityAnnot->repositoryClass); } if ($entityAnnot->readOnly) { - $builder->asReadOnly(); + $metadata->asReadOnly(); } break; @@ -92,12 +87,15 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat case isset($classAnnotations[Annotation\MappedSuperclass::class]): $mappedSuperclassAnnot = $classAnnotations[Annotation\MappedSuperclass::class]; - $builder->withCustomRepositoryClass($mappedSuperclassAnnot->repositoryClass); - $builder->asMappedSuperClass(); + $metadata->setCustomRepositoryClass($mappedSuperclassAnnot->repositoryClass); + + $metadata->isMappedSuperclass = true; + $metadata->isEmbeddedClass = false; break; case isset($classAnnotations[Annotation\Embeddable::class]): - $builder->asEmbeddable(); + $metadata->isEmbeddedClass = true; + $metadata->isMappedSuperclass = false; break; default: @@ -109,7 +107,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $tableAnnot = $classAnnotations[Annotation\Table::class]; $table = $this->convertTableAnnotationToTableMetadata($tableAnnot); - $builder->withTable($table); + $metadata->setTable($table); } // Evaluate @Cache annotation @@ -117,7 +115,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $cacheAnnot = $classAnnotations[Annotation\Cache::class]; $cache = $this->convertCacheAnnotationToCacheMetadata($cacheAnnot, $metadata); - $builder->withCache($cache); + $metadata->setCache($cache); } // Evaluate NamedNativeQueries annotation @@ -160,7 +158,10 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat throw new \UnexpectedValueException("@NamedQueries should contain an array of @NamedQuery annotations."); } - $builder->addNamedQuery($namedQuery->name, $namedQuery->query); + $metadata->addNamedQuery([ + 'name' => $namedQuery->name, + 'query' => $namedQuery->query + ]); } } @@ -173,32 +174,33 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat ); if ($metadata->inheritanceType !== Mapping\InheritanceType::NONE) { - $discriminatorColumnBuilder = new DiscriminatorColumnMetadataBuilder(); + $discriminatorColumn = new Mapping\DiscriminatorColumnMetadata(); - $discriminatorColumnBuilder->withTableName($metadata->getTableName()); + $discriminatorColumn->setTableName($metadata->getTableName()); + $discriminatorColumn->setColumnName('dtype'); + $discriminatorColumn->setType(Type::getType('string')); + $discriminatorColumn->setLength(255); // Evaluate DiscriminatorColumn annotation if (isset($classAnnotations[Annotation\DiscriminatorColumn::class])) { /** @var Annotation\DiscriminatorColumn $discriminatorColumnAnnotation */ $discriminatorColumnAnnotation = $classAnnotations[Annotation\DiscriminatorColumn::class]; + $typeName = ! empty($discriminatorColumnAnnotation->type) + ? $discriminatorColumnAnnotation->type + : 'string'; - $discriminatorColumnBuilder->withColumnName($discriminatorColumnAnnotation->name); + $discriminatorColumn->setType(Type::getType($typeName)); + $discriminatorColumn->setColumnName($discriminatorColumnAnnotation->name); if (! empty($discriminatorColumnAnnotation->columnDefinition)) { - $discriminatorColumnBuilder->withColumnDefinition($discriminatorColumnAnnotation->columnDefinition); - } - - if (! empty($discriminatorColumnAnnotation->type)) { - $discriminatorColumnBuilder->withType(Type::getType($discriminatorColumnAnnotation->type)); + $discriminatorColumn->setColumnDefinition($discriminatorColumnAnnotation->columnDefinition); } if (! empty($discriminatorColumnAnnotation->length)) { - $discriminatorColumnBuilder->withLength($discriminatorColumnAnnotation->length); + $discriminatorColumn->setLength($discriminatorColumnAnnotation->length); } } - $discriminatorColumn = $discriminatorColumnBuilder->build(); - $metadata->setDiscriminatorColumn($discriminatorColumn); // Evaluate DiscriminatorMap annotation @@ -991,14 +993,11 @@ private function convertCacheAnnotationToCacheMetadata( { $baseRegion = strtolower(str_replace('\\', '_', $metadata->rootEntityName)); $defaultRegion = $baseRegion . ($fieldName ? '__' . $fieldName : ''); - $cacheBuilder = new CacheMetadataBuilder(); - $cacheBuilder - ->withUsage(constant(sprintf('%s::%s', Mapping\CacheUsage::class, $cacheAnnot->usage))) - ->withRegion($cacheAnnot->region ?: $defaultRegion) - ; + $usage = constant(sprintf('%s::%s', Mapping\CacheUsage::class, $cacheAnnot->usage)); + $region = $cacheAnnot->region ?: $defaultRegion; - return $cacheBuilder->build(); + return new Mapping\CacheMetadata($usage, $region); } /** diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index edcf7516bf2..8750c053634 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -28,14 +28,12 @@ use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Schema\Column; use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Mapping\Builder\TableMetadataBuilder; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\JoinTableMetadata; use Doctrine\ORM\Mapping\MappingException; -use Doctrine\ORM\Mapping\TableMetadata; /** * The DatabaseDriver reverse engineers the mapping metadata from a database. diff --git a/lib/Doctrine/ORM/Mapping/Builder/EntityListenerBuilder.php b/lib/Doctrine/ORM/Mapping/Driver/EntityListenerBuilder.php similarity index 98% rename from lib/Doctrine/ORM/Mapping/Builder/EntityListenerBuilder.php rename to lib/Doctrine/ORM/Mapping/Driver/EntityListenerBuilder.php index e962726091c..0de2069b46a 100644 --- a/lib/Doctrine/ORM/Mapping/Builder/EntityListenerBuilder.php +++ b/lib/Doctrine/ORM/Mapping/Driver/EntityListenerBuilder.php @@ -17,7 +17,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Driver; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Mapping\ClassMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 79afb74fc70..29a70e46ce0 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -22,12 +22,10 @@ use Doctrine\Common\Persistence\Mapping\Driver\FileDriver; use Doctrine\Common\Persistence\Mapping\ClassMetadata; use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Mapping\Builder\DiscriminatorColumnMetadataBuilder; -use Doctrine\ORM\Mapping\Builder\EntityListenerBuilder; -use Doctrine\ORM\Mapping\Builder\CacheMetadataBuilder; use Doctrine\ORM\Mapping\CacheMetadata; use Doctrine\ORM\Mapping\CacheUsage; use Doctrine\ORM\Mapping\ChangeTrackingPolicy; +use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\GeneratorType; @@ -230,9 +228,12 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) ); if ($metadata->inheritanceType !== InheritanceType::NONE) { - $discriminatorColumnBuilder = new DiscriminatorColumnMetadataBuilder(); + $discriminatorColumn = new DiscriminatorColumnMetadata(); - $discriminatorColumnBuilder->withTableName($metadata->getTableName()); + $discriminatorColumn->setTableName($metadata->getTableName()); + $discriminatorColumn->setColumnName('dtype'); + $discriminatorColumn->setType(Type::getType('string')); + $discriminatorColumn->setLength(255); // Evaluate if (isset($xmlRoot->{'discriminator-column'})) { @@ -241,20 +242,18 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) ? (string) $discriminatorColumnMapping['type'] : 'string'; - $discriminatorColumnBuilder->withType(Type::getType($typeName)); - $discriminatorColumnBuilder->withColumnName((string) $discriminatorColumnMapping['name']); + $discriminatorColumn->setType(Type::getType($typeName)); + $discriminatorColumn->setColumnName((string) $discriminatorColumnMapping['name']); if (isset($discriminatorColumnMapping['column-definition'])) { - $discriminatorColumnBuilder->withColumnDefinition((string) $discriminatorColumnMapping['column-definition']); + $discriminatorColumn->setColumnDefinition((string) $discriminatorColumnMapping['column-definition']); } if (isset($discriminatorColumnMapping['length'])) { - $discriminatorColumnBuilder->withLength((int) $discriminatorColumnMapping['length']); + $discriminatorColumn->setLength((int) $discriminatorColumnMapping['length']); } } - $discriminatorColumn = $discriminatorColumnBuilder->build(); - $metadata->setDiscriminatorColumn($discriminatorColumn); // Evaluate @@ -375,7 +374,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) if (isset($oneToOneElement['fetch'])) { $association->setFetchMode( - constant('Doctrine\ORM\Mapping\FetchMode::' . (string) $oneToOneElement['fetch']) + constant(sprintf('%s::%s', FetchMode::class, (string) $oneToOneElement['fetch'])) ); } @@ -871,7 +870,6 @@ private function convertCacheElementToCacheMetadata(SimpleXMLElement $cacheMappi { $baseRegion = strtolower(str_replace('\\', '_', $metadata->rootEntityName)); $defaultRegion = $baseRegion . ($fieldName ? '__' . $fieldName : ''); - $cacheBuilder = new CacheMetadataBuilder(); $region = isset($cacheMapping['region']) ? (string) $cacheMapping['region'] : $defaultRegion; $usage = isset($cacheMapping['usage']) @@ -879,12 +877,7 @@ private function convertCacheElementToCacheMetadata(SimpleXMLElement $cacheMappi : CacheUsage::READ_ONLY ; - $cacheBuilder - ->withUsage($usage) - ->withRegion($region) - ; - - return $cacheBuilder->build(); + return new CacheMetadata($usage, $region); } /** diff --git a/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php index 2e70ce4eb32..df3b0ac62b2 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php @@ -20,7 +20,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\AssociationMetadata; @@ -98,4 +98,4 @@ private function resolveCascade(array $cascade) * @return string */ abstract protected function exportInstantiation(AssociationMetadata $metadata) : string; -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Exporter/CacheMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/CacheMetadataExporter.php index e1c06d8ae26..574203815b3 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/CacheMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/CacheMetadataExporter.php @@ -20,7 +20,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\CacheMetadata; @@ -56,4 +56,4 @@ protected function exportInstantiation(CacheMetadata $metadata) : string $metadata->getRegion() ); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php index b8043e26449..61c0af999ea 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php @@ -20,7 +20,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FieldMetadata; @@ -258,4 +258,4 @@ private function exportProperty(Property $property, int $indentationLevel) : str return implode(PHP_EOL, $lines); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ColumnMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ColumnMetadataExporter.php index 302a20370c3..3e8e74a4b4b 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ColumnMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ColumnMetadataExporter.php @@ -20,7 +20,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\ColumnMetadata; @@ -60,4 +60,4 @@ public function export($value, int $indentationLevel = 0) : string * @return string */ abstract protected function exportInstantiation(ColumnMetadata $metadata) : string; -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Exporter/DiscriminatorColumnMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/DiscriminatorColumnMetadataExporter.php index 43f5e13f6bc..06459b306af 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/DiscriminatorColumnMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/DiscriminatorColumnMetadataExporter.php @@ -20,7 +20,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; @@ -41,4 +41,4 @@ protected function exportInstantiation(DiscriminatorColumnMetadata $metadata) : $metadata->getTypeName() ); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Exporter/Exporter.php b/lib/Doctrine/ORM/Mapping/Exporter/Exporter.php index 2246d4fdf57..2e62f0e769a 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/Exporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/Exporter.php @@ -20,7 +20,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Exporter; interface Exporter { diff --git a/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php index e4e700df8a2..02d82439643 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php @@ -20,7 +20,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\FieldMetadata; @@ -42,4 +42,4 @@ protected function exportInstantiation(FieldMetadata $metadata) : string $metadata->getTypeName() ); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Exporter/JoinColumnMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/JoinColumnMetadataExporter.php index 4de841e1bb1..0954e1e05f7 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/JoinColumnMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/JoinColumnMetadataExporter.php @@ -20,7 +20,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\JoinColumnMetadata; @@ -59,4 +59,4 @@ protected function exportInstantiation(JoinColumnMetadata $metadata) : string $metadata->getTypeName() ); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Exporter/JoinTableMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/JoinTableMetadataExporter.php index d21699e21f4..9f41715c9fd 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/JoinTableMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/JoinTableMetadataExporter.php @@ -20,7 +20,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\JoinTableMetadata; @@ -66,4 +66,4 @@ protected function exportInstantiation(JoinTableMetadata $metadata) : string $metadata->getName() ); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Exporter/LocalColumnMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/LocalColumnMetadataExporter.php index f69bb9bc8d6..03c37a662e9 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/LocalColumnMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/LocalColumnMetadataExporter.php @@ -20,7 +20,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\LocalColumnMetadata; @@ -44,4 +44,4 @@ public function export($value, int $indentationLevel = 0) : string return implode(PHP_EOL, $lines); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ManyToManyAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ManyToManyAssociationMetadataExporter.php index dd483f16e83..b97d77e55f4 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ManyToManyAssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ManyToManyAssociationMetadataExporter.php @@ -20,7 +20,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; @@ -60,4 +60,4 @@ protected function exportInstantiation(ManyToManyAssociationMetadata $metadata) $metadata->getName() ); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ManyToOneAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ManyToOneAssociationMetadataExporter.php index c933f4a8bbe..01c15f27aba 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ManyToOneAssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ManyToOneAssociationMetadataExporter.php @@ -20,7 +20,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\ManyToOneAssociationMetadata; @@ -36,4 +36,4 @@ protected function exportInstantiation(ManyToOneAssociationMetadata $metadata) : $metadata->getName() ); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Exporter/OneToManyAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/OneToManyAssociationMetadataExporter.php index 0112254d972..2e86c7d7736 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/OneToManyAssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/OneToManyAssociationMetadataExporter.php @@ -20,7 +20,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; @@ -36,4 +36,4 @@ protected function exportInstantiation(OneToManyAssociationMetadata $metadata) : $metadata->getName() ); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Exporter/OneToOneAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/OneToOneAssociationMetadataExporter.php index bc0fd308127..e13b812b4b2 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/OneToOneAssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/OneToOneAssociationMetadataExporter.php @@ -20,7 +20,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; @@ -36,4 +36,4 @@ protected function exportInstantiation(OneToOneAssociationMetadata $metadata) : $metadata->getName() ); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Exporter/TableMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/TableMetadataExporter.php index 83b4097bae8..c0f114ae7c1 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/TableMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/TableMetadataExporter.php @@ -20,7 +20,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\TableMetadata; @@ -70,4 +70,4 @@ protected function exportInstantiation(TableMetadata $metadata) : string $metadata->getName() ); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ToManyAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ToManyAssociationMetadataExporter.php index b40e671b8b2..b5ef8f2e472 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ToManyAssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ToManyAssociationMetadataExporter.php @@ -20,7 +20,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\ToManyAssociationMetadata; @@ -47,4 +47,4 @@ public function export($value, int $indentationLevel = 0) : string return implode(PHP_EOL, $lines); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ToOneAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ToOneAssociationMetadataExporter.php index 8a5ebf9a7e9..abe9dd0855d 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ToOneAssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ToOneAssociationMetadataExporter.php @@ -20,7 +20,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\ToOneAssociationMetadata; @@ -48,4 +48,4 @@ public function export($value, int $indentationLevel = 0) : string return implode(PHP_EOL, $lines); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Exporter/TransientMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/TransientMetadataExporter.php index b7c5246b46e..d48d42bc35a 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/TransientMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/TransientMetadataExporter.php @@ -20,7 +20,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\TransientMetadata; @@ -52,4 +52,4 @@ protected function exportInstantiation(TransientMetadata $metadata) : string $metadata->getName() ); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php index 7bb0ce38f01..7af28d11166 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php @@ -20,7 +20,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Exporter; class VariableExporter implements Exporter { @@ -57,4 +57,4 @@ public function export($value, int $indentationLevel = 0) : string return implode(PHP_EOL, $lines); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php index a07d8508d7c..75f789279e8 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php @@ -20,7 +20,7 @@ * . */ -namespace Doctrine\ORM\Mapping\Builder; +namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\VersionFieldMetadata; @@ -42,4 +42,4 @@ protected function exportInstantiation(VersionFieldMetadata $metadata) : string $metadata->getTypeName() ); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php index 351be7fd520..700e82fb5fe 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php @@ -23,7 +23,7 @@ namespace Doctrine\ORM\Mapping\Factory; use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; -use Doctrine\ORM\Mapping\Builder\ClassMetadataExporter; +use Doctrine\ORM\Mapping\Exporter\ClassMetadataExporter; /** * This factory is used to generate metadata classes. diff --git a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php deleted file mode 100644 index b67d55b50fc..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/Builder/ClassMetadataBuilderTest.php +++ /dev/null @@ -1,653 +0,0 @@ -cm = new ClassMetadata(CmsUser::class); - $this->cm->initializeReflection(new RuntimeReflectionService()); - $this->builder = new ClassMetadataBuilder($this->cm); - } - - /** - * @group embedded - */ - public function testAsMappedSuperClass() - { - self::assertIsFluent($this->builder->asMappedSuperClass()); - self::assertTrue($this->cm->isMappedSuperclass); - self::assertFalse($this->cm->isEmbeddedClass); - } - - /** - * @group embedded - */ - public function testAsEmbeddable() - { - self::assertIsFluent($this->builder->asEmbeddable()); - self::assertTrue($this->cm->isEmbeddedClass); - self::assertFalse($this->cm->isMappedSuperclass); - } - - public function testAsReadOnly() - { - self::assertIsFluent($this->builder->asReadOnly()); - self::assertTrue($this->cm->isReadOnly()); - } - - /** - * @group embedded - */ - public function testAddEmbeddedWithOnlyRequiredParams() - { - self::assertIsFluent($this->builder->addEmbedded('name', Name::class)); - - self::assertEquals( - [ - 'name' => [ - 'class' => Name::class, - 'columnPrefix' => null, - 'declaredField' => null, - 'originalField' => null, - 'declaringClass' => $this->cm, - ] - ], - $this->cm->embeddedClasses - ); - } - - /** - * @group embedded - */ - public function testAddEmbeddedWithPrefix() - { - self::assertIsFluent($this->builder->addEmbedded('name', Name::class, 'nm_')); - - self::assertEquals( - [ - 'name' => [ - 'class' => 'Doctrine\Tests\Models\ValueObjects\Name', - 'columnPrefix' => 'nm_', - 'declaredField' => null, - 'originalField' => null, - 'declaringClass' => $this->cm, - ] - ], - $this->cm->embeddedClasses - ); - } - - /** - * @group embedded - */ - public function testCreateEmbeddedWithoutExtraParams() - { - $embeddedBuilder = $this->builder->createEmbedded('name', Name::class); - - self::assertInstanceOf(EmbeddedBuilder::class, $embeddedBuilder); - self::assertFalse(isset($this->cm->embeddedClasses['name'])); - - self::assertIsFluent($embeddedBuilder->build()); - self::assertEquals( - [ - 'class' => Name::class, - 'columnPrefix' => null, - 'declaredField' => null, - 'originalField' => null, - 'declaringClass' => $this->cm, - ], - $this->cm->embeddedClasses['name'] - ); - } - - /** - * @group embedded - */ - public function testCreateEmbeddedWithColumnPrefix() - { - $embeddedBuilder = $this->builder->createEmbedded('name', Name::class); - - self::assertEquals($embeddedBuilder, $embeddedBuilder->setColumnPrefix('nm_')); - - self::assertIsFluent($embeddedBuilder->build()); - self::assertEquals( - [ - 'class' => Name::class, - 'columnPrefix' => 'nm_', - 'declaredField' => null, - 'originalField' => null, - 'declaringClass' => $this->cm, - ], - $this->cm->embeddedClasses['name'] - ); - } - - public function testSetCustomRepositoryClass() - { - self::assertIsFluent($this->builder->withCustomRepositoryClass(CmsGroup::class)); - self::assertEquals(CmsGroup::class, $this->cm->customRepositoryClassName); - } - - public function testSetInheritanceJoined() - { - self::assertIsFluent($this->builder->setJoinedTableInheritance()); - self::assertEquals(InheritanceType::JOINED, $this->cm->inheritanceType); - } - - public function testSetInheritanceSingleTable() - { - self::assertIsFluent($this->builder->setSingleTableInheritance()); - self::assertEquals(InheritanceType::SINGLE_TABLE, $this->cm->inheritanceType); - } - - public function testSetDiscriminatorColumn() - { - $discriminatorColumnBuilder = (new DiscriminatorColumnMetadataBuilder()) - ->withColumnName('discr') - ->withLength(124) - ; - - self::assertIsFluent($this->builder->setDiscriminatorColumn($discriminatorColumnBuilder->build())); - self::assertNotNull($this->cm->discriminatorColumn); - - $discrColumn = $this->cm->discriminatorColumn; - - self::assertEquals('CmsUser', $discrColumn->getTableName()); - self::assertEquals('discr', $discrColumn->getColumnName()); - self::assertEquals('string', $discrColumn->getTypeName()); - self::assertEquals(124, $discrColumn->getLength()); - } - - public function testAddDiscriminatorMapClass() - { - self::assertIsFluent($this->builder->addDiscriminatorMapClass('test', CmsUser::class)); - self::assertIsFluent($this->builder->addDiscriminatorMapClass('test2', CmsGroup::class)); - - self::assertEquals(['test' => CmsUser::class, 'test2' => CmsGroup::class], $this->cm->discriminatorMap); - self::assertEquals('test', $this->cm->discriminatorValue); - } - - public function testChangeTrackingPolicyExplicit() - { - self::assertIsFluent($this->builder->setChangeTrackingPolicyDeferredExplicit()); - self::assertEquals(ChangeTrackingPolicy::DEFERRED_EXPLICIT, $this->cm->changeTrackingPolicy); - } - - public function testChangeTrackingPolicyNotify() - { - self::assertIsFluent($this->builder->setChangeTrackingPolicyNotify()); - self::assertEquals(ChangeTrackingPolicy::NOTIFY, $this->cm->changeTrackingPolicy); - } - - public function testAddField() - { - self::assertNull($this->cm->getProperty('name')); - - self::assertIsFluent($this->builder->addProperty('name', 'string')); - - self::assertNotNull($this->cm->getProperty('name')); - - $property = $this->cm->getProperty('name'); - - self::assertEquals('name', $property->getName()); - self::assertEquals($this->cm, $property->getDeclaringClass()); - self::assertEquals('string', $property->getTypeName()); - self::assertEquals('CmsUser', $property->getTableName()); - self::assertEquals('name', $property->getColumnName()); - } - - public function testCreateField() - { - $fieldBuilder = $this->builder->createField('name', 'string'); - - self::assertInstanceOf(FieldBuilder::class, $fieldBuilder); - self::assertNull($this->cm->getProperty('name')); - - self::assertIsFluent($fieldBuilder->build()); - - self::assertNotNull($this->cm->getProperty('name')); - - $property = $this->cm->getProperty('name'); - - self::assertEquals('name', $property->getName()); - self::assertEquals($this->cm, $property->getDeclaringClass()); - self::assertEquals('string', $property->getTypeName()); - self::assertEquals('CmsUser', $property->getTableName()); - self::assertEquals('name', $property->getColumnName()); - } - - public function testCreateVersionedField() - { - $this->builder->createField('name', 'integer') - ->columnName('username') - ->length(124) - ->nullable() - ->columnDefinition('foobar') - ->unique() - ->isVersionField() - ->build(); - - self::assertNotNull($this->cm->getProperty('name')); - - $property = $this->cm->getProperty('name'); - - self::assertEquals('name', $property->getName()); - self::assertEquals($this->cm, $property->getDeclaringClass()); - self::assertEquals('integer', $property->getTypeName()); - self::assertEquals('CmsUser', $property->getTableName()); - self::assertEquals('username', $property->getColumnName()); - self::assertEquals('foobar', $property->getColumnDefinition()); - self::assertEquals(124, $property->getLength()); - self::assertTrue($property->isNullable()); - self::assertTrue($property->isUnique()); - self::assertEquals(['default' => 1], $property->getOptions()); - } - - public function testCreatePrimaryField() - { - $this->builder->createField('id', 'integer') - ->makePrimaryKey() - ->generatedValue() - ->build(); - - self::assertNotNull($this->cm->getProperty('id')); - - $property = $this->cm->getProperty('id'); - - self::assertEquals(['id'], $this->cm->identifier); - self::assertEquals('id', $property->getName()); - self::assertEquals($this->cm, $property->getDeclaringClass()); - self::assertEquals('integer', $property->getTypeName()); - self::assertEquals('CmsUser', $property->getTableName()); - self::assertEquals('id', $property->getColumnName()); - self::assertTrue($property->isPrimaryKey()); - } - - public function testCreateUnsignedOptionField() - { - $this->builder->createField('state', 'integer') - ->option('unsigned', true) - ->build(); - - self::assertNotNull($this->cm->getProperty('state')); - - $property = $this->cm->getProperty('state'); - - self::assertEquals('state', $property->getName()); - self::assertEquals($this->cm, $property->getDeclaringClass()); - self::assertEquals('integer', $property->getTypeName()); - self::assertEquals('CmsUser', $property->getTableName()); - self::assertEquals('state', $property->getColumnName()); - self::assertEquals(['unsigned' => true], $property->getOptions()); - } - - public function testAddLifecycleEvent() - { - $this->builder->addLifecycleEvent('getStatus', 'postLoad'); - - self::assertEquals(['postLoad' => ['getStatus']], $this->cm->lifecycleCallbacks); - } - - public function testCreateManyToOne() - { - $joinColumn = new JoinColumnMetadata(); - - $joinColumn->setTableName('CmsUser'); - $joinColumn->setColumnName('group_id'); - $joinColumn->setReferencedColumnName('id'); - $joinColumn->setOnDelete('CASCADE'); - - $association = $this->builder->createManyToOne('groups', CmsGroup::class) - ->withJoinColumn($joinColumn) - ->withCascade(['ALL']) - ->withFetchMode(FetchMode::EXTRA_LAZY) - ->build() - ; - - $this->cm->addProperty($association); - - self::assertEquals( - [ - 'groups' => $association - ], - $this->cm->getProperties() - ); - } - - public function testCreateManyToOneWithIdentity() - { - $joinColumn = new JoinColumnMetadata(); - - $joinColumn->setTableName('CmsUser'); - $joinColumn->setColumnName('group_id'); - $joinColumn->setReferencedColumnName('id'); - $joinColumn->setOnDelete('CASCADE'); - - $association = $this - ->builder - ->createManyToOne('groups', CmsGroup::class) - ->withJoinColumn($joinColumn) - ->withCascade(['ALL']) - ->withFetchMode(FetchMode::EXTRA_LAZY) - ->withPrimaryKey(true) - ->build() - ; - - $this->cm->addProperty($association); - - self::assertEquals( - [ - 'groups' => $association - ], - $this->cm->getProperties() - ); - } - - public function testCreateOneToOne() - { - $joinColumn = new JoinColumnMetadata(); - - $joinColumn->setTableName('CmsUser'); - $joinColumn->setColumnName('group_id'); - $joinColumn->setReferencedColumnName('id'); - $joinColumn->setOnDelete('CASCADE'); - $joinColumn->setUnique(true); - - $association = $this->builder->createOneToOne('groups', CmsGroup::class) - ->withJoinColumn($joinColumn) - ->withCascade(['ALL']) - ->withFetchMode(FetchMode::EXTRA_LAZY) - ->build() - ; - - $this->cm->addProperty($association); - - self::assertEquals( - [ - 'groups' => $association - ], - $this->cm->getProperties() - ); - } - - public function testCreateOneToOneWithIdentity() - { - $joinColumn = new JoinColumnMetadata(); - - $joinColumn->setTableName('CmsUser'); - $joinColumn->setColumnName('group_id'); - $joinColumn->setReferencedColumnName('id'); - $joinColumn->setOnDelete('CASCADE'); - - $association = $this->builder->createOneToOne('groups', CmsGroup::class) - ->withJoinColumn($joinColumn) - ->withCascade(['ALL']) - ->withFetchMode(FetchMode::EXTRA_LAZY) - ->withPrimaryKey(true) - ->build() - ; - - $this->cm->addProperty($association); - - self::assertEquals( - [ - 'groups' => $association - ], - $this->cm->getProperties() - ); - } - - public function testThrowsExceptionOnCreateOneToOneWithIdentityOnInverseSide() - { - $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - - $association = $this - ->builder - ->createOneToOne('groups', CmsGroup::class) - ->withMappedBy('test') - ->withFetchMode(FetchMode::EXTRA_LAZY) - ->withPrimaryKey(true) - ->build(); - - $this->cm->addProperty($association); - } - - public function testCreateManyToMany() - { - $joinColumn = new JoinColumnMetadata(); - - $joinColumn->setColumnName('group_id'); - $joinColumn->setReferencedColumnName('id'); - $joinColumn->setOnDelete('CASCADE'); - - $inverseJoinColumn = new JoinColumnMetadata(); - - $inverseJoinColumn->setColumnName('user_id'); - $inverseJoinColumn->setReferencedColumnName('id'); - - $joinTable = new JoinTableMetadata(); - - $joinTable->setName('groups_users'); - $joinTable->addJoinColumn($joinColumn); - $joinTable->addInverseJoinColumn($inverseJoinColumn); - - $association = $this->builder->createManyToMany('groups', CmsGroup::class) - ->withJoinTable($joinTable) - ->withCascade(['ALL']) - ->withFetchMode(FetchMode::EXTRA_LAZY) - ->build() - ; - - $this->cm->addProperty($association); - - self::assertEquals( - [ - 'groups' => $association - ], - $this->cm->getProperties() - ); - } - - public function testThrowsExceptionOnCreateManyToManyWithIdentity() - { - $joinColumn = new JoinColumnMetadata(); - - $joinColumn->setColumnName('group_id'); - $joinColumn->setReferencedColumnName('id'); - $joinColumn->setOnDelete('CASCADE'); - - $inverseJoinColumn = new JoinColumnMetadata(); - - $inverseJoinColumn->setColumnName('user_id'); - $inverseJoinColumn->setReferencedColumnName('id'); - - $joinTable = new JoinTableMetadata(); - - $joinTable->setName('groups_users'); - $joinTable->addJoinColumn($joinColumn); - $joinTable->addInverseJoinColumn($inverseJoinColumn); - - $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - - $association = $this->builder->createManyToMany('groups', CmsGroup::class) - ->withJoinTable($joinTable) - ->withCascade(['ALL']) - ->withFetchMode(FetchMode::EXTRA_LAZY) - ->withPrimaryKey(true) - ->build() - ; - - $this->cm->addProperty($association); - } - - public function testCreateOneToMany() - { - $association = $this->builder->createOneToMany('groups', CmsGroup::class) - ->withMappedBy('test') - ->withOrderBy('test', 'ASC') - ->withIndexedBy('test') - ->build() - ; - - $this->cm->addProperty($association); - - self::assertEquals( - [ - 'groups' => $association - ], - $this->cm->getProperties() - ); - } - - public function testThrowsExceptionOnCreateOneToManyWithIdentity() - { - $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - - $association = $this->builder->createOneToMany('groups', CmsGroup::class) - ->withPrimaryKey(true) - ->withMappedBy('test') - ->withOrderBy('test', 'ASC') - ->withIndexedBy('test') - ->build(); - - $this->cm->addProperty($association); - } - - public function testOrphanRemovalOnCreateOneToOne() - { - $joinColumn = new JoinColumnMetadata(); - - $joinColumn->setTableName('CmsUser'); - $joinColumn->setColumnName('group_id'); - $joinColumn->setReferencedColumnName('id'); - $joinColumn->setOnDelete('CASCADE'); - $joinColumn->setUnique(true); - - $association = $this->builder - ->createOneToOne('groups', CmsGroup::class) - ->withJoinColumn($joinColumn) - ->withOrphanRemoval(true) - ->build() - ; - - $this->cm->addProperty($association); - - self::assertEquals( - [ - 'groups' => $association - ], - $this->cm->getProperties() - ); - } - - public function testOrphanRemovalOnCreateOneToMany() - { - $association = $this->builder - ->createOneToMany('groups', CmsGroup::class) - ->withMappedBy('test') - ->withOrphanRemoval(true) - ->build() - ; - - $this->cm->addProperty($association); - - self::assertEquals( - [ - 'groups' => $association - ], - $this->cm->getProperties() - ); - } - - public function testExceptionOnOrphanRemovalOnManyToOne() - { - $joinColumn = new JoinColumnMetadata(); - - $joinColumn->setTableName('CmsUser'); - $joinColumn->setColumnName('group_id'); - $joinColumn->setReferencedColumnName('id'); - $joinColumn->setOnDelete('CASCADE'); - $joinColumn->setUnique(true); - - $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - - $association = $this->builder - ->createManyToOne('groups', CmsGroup::class) - ->withJoinColumn($joinColumn) - ->withOrphanRemoval(true) - ->build(); - - $this->cm->addProperty($association); - } - - public function testOrphanRemovalOnManyToMany() - { - $joinColumn = new JoinColumnMetadata(); - - $joinColumn->setColumnName('group_id'); - $joinColumn->setReferencedColumnName('id'); - $joinColumn->setOnDelete('CASCADE'); - - $inverseJoinColumn = new JoinColumnMetadata(); - - $inverseJoinColumn->setColumnName('cmsgroup_id'); - $inverseJoinColumn->setReferencedColumnName('id'); - $inverseJoinColumn->setOnDelete('CASCADE'); - - $joinTable = new JoinTableMetadata(); - - $joinTable->setName('cmsuser_cmsgroup'); - $joinTable->addJoinColumn($joinColumn); - $joinTable->addInverseJoinColumn($inverseJoinColumn); - - $association = $this->builder - ->createManyToMany('groups', CmsGroup::class) - ->withJoinTable($joinTable) - ->withOrphanRemoval(true) - ->build(); - - $this->cm->addProperty($association); - - self::assertEquals( - [ - 'groups' => $association - ], - $this->cm->getProperties() - ); - } - - public function assertIsFluent($ret) - { - self::assertSame($this->builder, $ret, "Return Value has to be same instance as used builder"); - } -} diff --git a/tests/Doctrine/Tests/ORM/Mapping/Builder/TableMetadataBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/Builder/TableMetadataBuilderTest.php deleted file mode 100644 index c9a423d5755..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/Builder/TableMetadataBuilderTest.php +++ /dev/null @@ -1,138 +0,0 @@ -. - */ - -namespace Doctrine\Tests\ORM\Mapping\Builder; - -use Doctrine\ORM\Mapping\Builder\TableMetadataBuilder; -use Doctrine\Tests\OrmTestCase; - -/** - * @group DDC-659 - */ -class TableMetadataBuilderTest extends OrmTestCase -{ - /** - * @var TableMetadataBuilder - */ - private $builder; - - public function setUp() - { - $this->builder = new TableMetadataBuilder(); - } - - public function testWithSchema() - { - self::assertIsFluent($this->builder->withSchema('public')); - - $tableMetadata = $this->builder->build(); - - self::assertEquals('public', $tableMetadata->getSchema()); - } - - - public function testWithName() - { - self::assertIsFluent($this->builder->withName('users')); - - $tableMetadata = $this->builder->build(); - - self::assertEquals('users', $tableMetadata->getName()); - } - - public function testWithIndex() - { - self::assertIsFluent($this->builder->withIndex('users_idx', ['username', 'name'])); - - $tableMetadata = $this->builder->build(); - - self::assertEquals( - [ - 'users_idx' => [ - 'name' => 'users_idx', - 'columns' => ['username', 'name'], - 'unique' => false, - 'options' => [], - 'flags' => [], - ] - ], - $tableMetadata->getIndexes() - ); - } - - public function testAddUniqueConstraint() - { - self::assertIsFluent($this->builder->withUniqueConstraint('users_idx', ['username', 'name'])); - - $tableMetadata = $this->builder->build(); - - self::assertEquals( - [ - 'users_idx' => [ - 'name' => 'users_idx', - 'columns' => ['username', 'name'], - 'options' => [], - 'flags' => [], - ] - ], - $tableMetadata->getUniqueConstraints() - ); - } - - public function testSetTableRelated() - { - $this->builder->withUniqueConstraint('users_idx', ['username', 'name']); - $this->builder->withIndex('users_idx', ['username', 'name']); - $this->builder->withSchema('public'); - $this->builder->withName('users'); - - $tableMetadata = $this->builder->build(); - - self::assertEquals('public', $tableMetadata->getSchema()); - self::assertEquals('users', $tableMetadata->getName()); - self::assertEquals( - [ - 'users_idx' => [ - 'name' => 'users_idx', - 'columns' => ['username', 'name'], - 'unique' => false, - 'options' => [], - 'flags' => [], - ] - ], - $tableMetadata->getIndexes() - ); - self::assertEquals( - [ - 'users_idx' => [ - 'name' => 'users_idx', - 'columns' => ['username', 'name'], - 'options' => [], - 'flags' => [], - ] - ], - $tableMetadata->getUniqueConstraints() - ); - } - - protected function assertIsFluent($ret) - { - self::assertSame($this->builder, $ret, "Return Value has to be same instance as used builder"); - } -} diff --git a/tests/Doctrine/Tests/ORM/Mapping/FieldBuilderTest.php b/tests/Doctrine/Tests/ORM/Mapping/FieldBuilderTest.php deleted file mode 100644 index 47fa4a29062..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/FieldBuilderTest.php +++ /dev/null @@ -1,34 +0,0 @@ -createField('aField', 'string'); - - $fieldBuilder->generatedValue('CUSTOM'); - $fieldBuilder->setCustomIdGenerator('stdClass'); - - $fieldBuilder->build(); - - $metadata = $cmBuilder->getClassMetadata(); - - self::assertEquals(GeneratorType::CUSTOM, $metadata->generatorType); - self::assertEquals( - [ - 'class' => 'stdClass', - 'arguments' => [], - ], - $metadata->generatorDefinition - ); - } -} From dde33e29e00a98b8f5e218fb086407964e28defe Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 21 Jun 2017 07:45:23 +0200 Subject: [PATCH 145/275] #6118 removing DDC-720 related tests --- .../ORM/Functional/BasicFunctionalTest.php | 197 ------------------ 1 file changed, 197 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php index f89044a0b00..0a3c178a11b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php @@ -1080,203 +1080,6 @@ public function testFlushManyExplicitEntities() self::assertEquals('UserC', $userC->name, 'name has not changed because we did not flush it'); } - /** - * @group DDC-720 - */ - public function testFlushSingleManagedEntity() - { - $user = new CmsUser; - $user->name = 'Dominik'; - $user->username = 'domnikl'; - $user->status = 'developer'; - - $this->em->persist($user); - $this->em->flush(); - - $user->status = 'administrator'; - $this->em->flush($user); - $this->em->clear(); - - $user = $this->em->find(get_class($user), $user->id); - self::assertEquals('administrator', $user->status); - } - - /** - * @group DDC-720 - */ - public function testFlushSingleUnmanagedEntity() - { - $user = new CmsUser; - $user->name = 'Dominik'; - $user->username = 'domnikl'; - $user->status = 'developer'; - - $this->expectException(\InvalidArgumentException::class); - $this->expectExceptionMessage('Entity has to be managed or scheduled for removal for single computation'); - - $this->em->flush($user); - } - - /** - * @group DDC-720 - */ - public function testFlushSingleAndNewEntity() - { - $user = new CmsUser; - $user->name = 'Dominik'; - $user->username = 'domnikl'; - $user->status = 'developer'; - - $this->em->persist($user); - $this->em->flush(); - - $otherUser = new CmsUser; - $otherUser->name = 'Dominik2'; - $otherUser->username = 'domnikl2'; - $otherUser->status = 'developer'; - - $user->status = 'administrator'; - - $this->em->persist($otherUser); - $this->em->flush($user); - - self::assertTrue($this->em->contains($otherUser), "Other user is contained in EntityManager"); - self::assertTrue($otherUser->id > 0, "other user has an id"); - } - - /** - * @group DDC-720 - */ - public function testFlushAndCascadePersist() - { - $user = new CmsUser; - $user->name = 'Dominik'; - $user->username = 'domnikl'; - $user->status = 'developer'; - - $this->em->persist($user); - $this->em->flush(); - - $address = new CmsAddress(); - $address->city = "Springfield"; - $address->zip = "12354"; - $address->country = "Germany"; - $address->street = "Foo Street"; - $address->user = $user; - $user->address = $address; - - $this->em->flush($user); - - self::assertTrue($this->em->contains($address), "Other user is contained in EntityManager"); - self::assertTrue($address->id > 0, "other user has an id"); - } - - /** - * @group DDC-720 - */ - public function testFlushSingleAndNoCascade() - { - $user = new CmsUser; - $user->name = 'Dominik'; - $user->username = 'domnikl'; - $user->status = 'developer'; - - $this->em->persist($user); - $this->em->flush(); - - $article1 = new CmsArticle(); - $article1->topic = 'Foo'; - $article1->text = 'Foo Text'; - $article1->author = $user; - $user->articles[] = $article1; - - $this->expectException(\InvalidArgumentException::class); - $this->expectExceptionMessage("A new entity was found through the relationship 'Doctrine\Tests\Models\CMS\CmsUser#articles'"); - - $this->em->flush($user); - } - - /** - * @group DDC-720 - * @group DDC-1612 - * @group DDC-2267 - */ - public function testFlushSingleNewEntityThenRemove() - { - $user = new CmsUser; - $user->name = 'Dominik'; - $user->username = 'domnikl'; - $user->status = 'developer'; - - $this->em->persist($user); - $this->em->flush($user); - - $userId = $user->id; - - $this->em->remove($user); - $this->em->flush($user); - $this->em->clear(); - - self::assertNull($this->em->find(get_class($user), $userId)); - } - - /** - * @group DDC-720 - */ - public function testProxyIsIgnored() - { - $user = new CmsUser; - $user->name = 'Dominik'; - $user->username = 'domnikl'; - $user->status = 'developer'; - - $this->em->persist($user); - $this->em->flush(); - $this->em->clear(); - - $user = $this->em->getReference(get_class($user), $user->id); - - $otherUser = new CmsUser; - $otherUser->name = 'Dominik2'; - $otherUser->username = 'domnikl2'; - $otherUser->status = 'developer'; - - $this->em->persist($otherUser); - $this->em->flush($user); - - self::assertTrue($this->em->contains($otherUser), "Other user is contained in EntityManager"); - self::assertTrue($otherUser->id > 0, "other user has an id"); - } - - /** - * @group DDC-720 - */ - public function testFlushSingleSaveOnlySingle() - { - $user = new CmsUser; - $user->name = 'Dominik'; - $user->username = 'domnikl'; - $user->status = 'developer'; - $this->em->persist($user); - - $user2 = new CmsUser; - $user2->name = 'Dominik'; - $user2->username = 'domnikl2'; - $user2->status = 'developer'; - $this->em->persist($user2); - - $this->em->flush(); - - $user->status = 'admin'; - $user2->status = 'admin'; - - $this->em->flush($user); - $this->em->clear(); - - $user2 = $this->em->find(get_class($user2), $user2->id); - self::assertEquals('developer', $user2->status); - } - /** * @group DDC-1585 */ From 51f653221a1f39c17660d93f5c83f3023c62bab9 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 21 Jun 2017 07:51:30 +0200 Subject: [PATCH 146/275] #6118 removing DDC-720 related tests for multiple flushed entities --- .../ORM/Functional/BasicFunctionalTest.php | 31 ------------------- 1 file changed, 31 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php index 0a3c178a11b..96319e6d050 100644 --- a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php @@ -1049,37 +1049,6 @@ public function testClear() self::assertEquals(UnitOfWork::STATE_DETACHED, $unitOfWork->getEntityState($address)); } - public function testFlushManyExplicitEntities() - { - $userA = new CmsUser; - $userA->username = 'UserA'; - $userA->name = 'UserA'; - - $userB = new CmsUser; - $userB->username = 'UserB'; - $userB->name = 'UserB'; - - $userC = new CmsUser; - $userC->username = 'UserC'; - $userC->name = 'UserC'; - - $this->em->persist($userA); - $this->em->persist($userB); - $this->em->persist($userC); - - $this->em->flush([$userA, $userB, $userB]); - - $userC->name = 'changed name'; - - $this->em->flush([$userA, $userB]); - $this->em->refresh($userC); - - self::assertTrue($userA->id > 0, 'user a has an id'); - self::assertTrue($userB->id > 0, 'user b has an id'); - self::assertTrue($userC->id > 0, 'user c has an id'); - self::assertEquals('UserC', $userC->name, 'name has not changed because we did not flush it'); - } - /** * @group DDC-1585 */ From 6563d7762c5fc38fd43581588222d04488dd41bc Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 21 Jun 2017 07:53:54 +0200 Subject: [PATCH 147/275] #6118 remove reference to single entity flush operations --- docs/en/reference/unitofwork.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/en/reference/unitofwork.rst b/docs/en/reference/unitofwork.rst index cdfb6e0be4a..cb3866e9cfe 100644 --- a/docs/en/reference/unitofwork.rst +++ b/docs/en/reference/unitofwork.rst @@ -129,7 +129,6 @@ optimize the performance of the Flush Operation: - Temporarily mark entities as read only. If you have a very large UnitOfWork but know that a large set of entities has not changed, just mark them as read only with ``$entityManager->getUnitOfWork()->markReadOnly($entity)``. -- Flush only a single entity with ``$entityManager->flush($entity)``. - Use :doc:`Change Tracking Policies ` to use more explicit strategies of notifying the UnitOfWork what objects/properties changed. From b2aca857ff9e4bf79d91d9f01aa0767cefed7ca1 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 21 Jun 2017 07:55:26 +0200 Subject: [PATCH 148/275] #6118 remove `flush`\($entity\)` signature --- lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php | 4 ++-- lib/Doctrine/ORM/EntityManager.php | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php b/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php index 7c28ed75fdc..4ecadd35986 100644 --- a/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php +++ b/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php @@ -183,9 +183,9 @@ public function find($entityName, $id, $lockMode = null, $lockVersion = null) /** * {@inheritdoc} */ - public function flush($entity = null) + public function flush() { - return $this->wrapped->flush($entity); + return $this->wrapped->flush(); } /** diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 92b96191c35..eb5b1f95151 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -343,19 +343,17 @@ public function createQueryBuilder() * If an entity is explicitly passed to this method only this entity and * the cascade-persist semantics + scheduled inserts/removals are synchronized. * - * @param null|object|array $entity - * * @return void * * @throws \Doctrine\ORM\OptimisticLockException If a version check on an entity that * makes use of optimistic locking fails. * @throws ORMException */ - public function flush($entity = null) + public function flush() { $this->errorIfClosed(); - $this->unitOfWork->commit($entity); + $this->unitOfWork->commit(); } /** From 2098b9ec6dba01b3441846d29dbbd7fa2e8ef7ee Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 21 Jun 2017 07:56:14 +0200 Subject: [PATCH 149/275] #6118 removing `flush\($entity\)` usage from the test suite --- tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php | 2 +- .../Tests/ORM/Functional/ProxiesLikeEntitiesTest.php | 2 +- tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2790Test.php | 2 +- tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2984Test.php | 2 +- tests/Doctrine/Tests/ORM/Functional/ValueObjectsTest.php | 6 +++--- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php b/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php index b7c1757b039..c250592951d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php @@ -96,7 +96,7 @@ public function testMergeWithExistingUninitializedManagedProxy() $date = new DateTimeModel(); $this->em->persist($date); - $this->em->flush($date); + $this->em->flush(); $this->em->clear(); $managed = $this->em->getReference(DateTimeModel::class, $date->id); diff --git a/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php b/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php index 61107ca09e7..e5b3d2f3856 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php @@ -89,7 +89,7 @@ public function testEntityWithIdentifier() self::assertInstanceOf(CmsUserProxy::class, $uninitializedProxy); $this->em->persist($uninitializedProxy); - $this->em->flush($uninitializedProxy); + $this->em->flush(); self::assertFalse($uninitializedProxy->__isInitialized(), 'Proxy didn\'t get initialized during flush operations'); self::assertEquals($userId, $uninitializedProxy->getId()); $this->em->remove($uninitializedProxy); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2790Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2790Test.php index 0e708aeaac7..31dd7aaba39 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2790Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2790Test.php @@ -45,7 +45,7 @@ public function testIssue() // (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'); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2984Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2984Test.php index 112f572c2ce..aabdb7a338b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2984Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2984Test.php @@ -41,7 +41,7 @@ public function testIssue() $user->applyName('Alex'); $this->em->persist($user); - $this->em->flush($user); + $this->em->flush(); $repository = $this->em->getRepository(__NAMESPACE__ . "\DDC2984User"); diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueObjectsTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueObjectsTest.php index 6f39a70ec1f..a88df4a1c85 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueObjectsTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueObjectsTest.php @@ -144,7 +144,7 @@ public function testDqlOnEmbeddedObjectsField() $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"; @@ -187,7 +187,7 @@ public function testPartialDqlOnEmbeddedObjectsField() { $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. @@ -257,7 +257,7 @@ public function testEmbeddableWithInheritance() { $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); self::assertEquals($car, $reloadedCar); From b55a48423dbdb22be523c987894508cd2ab927f1 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 21 Jun 2017 07:59:08 +0200 Subject: [PATCH 150/275] #6118 removing `UnitOfWork#commit\($entity\)` signature --- lib/Doctrine/ORM/UnitOfWork.php | 63 ++------------------------------- 1 file changed, 2 insertions(+), 61 deletions(-) diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index efbbf0cb0ea..cec0dcd6fa5 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -318,29 +318,18 @@ public function __construct(EntityManagerInterface $em) * 4) All collection updates * 5) All entity deletions * - * @param null|object|array $entity - * * @return void * * @throws \Exception */ - public function commit($entity = null) + public function commit() { // Raise preFlush if ($this->eventManager->hasListeners(Events::preFlush)) { $this->eventManager->dispatchEvent(Events::preFlush, new PreFlushEventArgs($this->em)); } - // Compute changes done since last commit. - if ($entity === null) { - $this->computeChangeSets(); - } elseif (is_object($entity)) { - $this->computeSingleEntityChangeSet($entity); - } elseif (is_array($entity)) { - foreach ($entity as $object) { - $this->computeSingleEntityChangeSet($object); - } - } + $this->computeChangeSets(); if ( ! ($this->entityInsertions || $this->entityDeletions || @@ -449,54 +438,6 @@ private function computeScheduleInsertsChangeSets() } } - /** - * Only flushes the given entity according to a ruleset that keeps the UoW consistent. - * - * 1. All entities scheduled for insertion, (orphan) removals and changes in collections are processed as well! - * 2. Read Only entities are skipped. - * 3. Proxies are skipped. - * 4. Only if entity is properly managed. - * - * @param object $entity - * - * @return void - * - * @throws \InvalidArgumentException - */ - private function computeSingleEntityChangeSet($entity) - { - $state = $this->getEntityState($entity); - - if ($state !== self::STATE_MANAGED && $state !== self::STATE_REMOVED) { - throw new \InvalidArgumentException("Entity has to be managed or scheduled for removal for single computation " . self::objToStr($entity)); - } - - $class = $this->em->getClassMetadata(get_class($entity)); - - if ($state === self::STATE_MANAGED && $class->changeTrackingPolicy === ChangeTrackingPolicy::DEFERRED_IMPLICIT) { - $this->persist($entity); - } - - // Compute changes for INSERTed entities first. This must always happen even in this case. - $this->computeScheduleInsertsChangeSets(); - - if ($class->isReadOnly()) { - return; - } - - // Ignore uninitialized proxy objects - if ($entity instanceof Proxy && ! $entity->__isInitialized()) { - return; - } - - // Only MANAGED entities that are NOT SCHEDULED FOR INSERTION OR DELETION are processed here. - $oid = spl_object_hash($entity); - - if ( ! isset($this->entityInsertions[$oid]) && ! isset($this->entityDeletions[$oid]) && isset($this->entityStates[$oid])) { - $this->computeChangeSet($class, $entity); - } - } - /** * Executes any extra updates that have been scheduled. */ From cf924527d832452254128c611c5ce595c2d80d5c Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sat, 24 Jun 2017 09:39:42 +0200 Subject: [PATCH 151/275] #6118 upgrade notes mentioning the BC break in `EntityManager#flush()` --- UPGRADE.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/UPGRADE.md b/UPGRADE.md index 1777fee45f2..786302ca202 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -1,5 +1,31 @@ # Upgrade to 3.0 +## BC Break: Removed `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 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 now is simply +`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) + ## BC Break: Removed ``YAML`` mapping drivers. If your code relies on ``YamlDriver`` or ``SimpleYamlDriver``, you **MUST** change to From b1c1992d347c98fd941c48f2b7b49b0666941ca1 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 26 Jun 2017 00:57:28 -0400 Subject: [PATCH 152/275] Quick fix --- lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 2b6425bc853..f54551643ca 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -700,8 +700,10 @@ private function completeIdGeneratorMapping(ClassMetadata $class) $class->setGeneratorDefinition($definition); } - $sequenceName = $platform->quoteIdentifier($definition['sequenceName']); - $sequenceGenerator = new Sequencing\SequenceGenerator($sequenceName, $definition['allocationSize']); + $sequenceGenerator = new Sequencing\SequenceGenerator( + $platform->quoteIdentifier($definition['sequenceName']), + $definition['allocationSize'] + ); $class->setIdGenerator($sequenceGenerator); break; From a7439233cc27f8aa6f8c4e0737c0dc0dfa74945c Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 1 Jul 2017 21:52:42 -0300 Subject: [PATCH 153/275] Added generation strategy for class metadata --- .../ORM/Mapping/ComponentMetadata.php | 10 ++- .../Factory/ClassMetadataDefinition.php | 16 ++-- .../ClassMetadataDefinitionFactory.php | 62 +++++++-------- .../Factory/ClassMetadataGenerator.php | 35 ++------- .../ClassMetadataGeneratorStrategy.php | 34 +++++++++ ...aluatingClassMetadataGeneratorStrategy.php | 51 +++++++++++++ ...leLoaderClassMetadataGeneratorStrategy.php | 34 +++++++++ ...leWriterClassMetadataGeneratorStrategy.php | 75 +++++++++++++++++++ 8 files changed, 248 insertions(+), 69 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGeneratorStrategy.php create mode 100644 lib/Doctrine/ORM/Mapping/Factory/EvaluatingClassMetadataGeneratorStrategy.php create mode 100644 lib/Doctrine/ORM/Mapping/Factory/FileLoaderClassMetadataGeneratorStrategy.php create mode 100644 lib/Doctrine/ORM/Mapping/Factory/FileWriterClassMetadataGeneratorStrategy.php diff --git a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php index 9155aa67644..81101c6d4ff 100644 --- a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php @@ -69,6 +69,14 @@ public function __construct(string $className, ?ComponentMetadata $parent = null $this->parent = $parent; } + /** + * @return string + */ + public function getRootClassName() : string + { + return $this->parent ? $this->parent->getRootClassName() : $this->className; + } + /** * @return string */ @@ -201,4 +209,4 @@ public function hasProperty(string $propertyName) : bool return $this->parent && $this->parent->hasProperty($propertyName); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinition.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinition.php index 5e998d7d5ba..71c9634fa6e 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinition.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinition.php @@ -39,19 +39,23 @@ class ClassMetadataDefinition /** * @var ClassMetadata|null */ - public $parent; + public $parentClassMetadata; /** * ClassMetadataDefinition constructor. * * @param string $entityClassName * @param string $metadataClassName - * @param ClassMetadata|null $parent + * @param ClassMetadata|null $parentMetadata */ - public function __construct(string $entityClassName, string $metadataClassName, ?ClassMetadata $parent = null) + public function __construct( + string $entityClassName, + string $metadataClassName, + ?ClassMetadata $parentMetadata = null + ) { - $this->entityClassName = $entityClassName; - $this->metadataClassName = $metadataClassName; - $this->parent = $parent; + $this->entityClassName = $entityClassName; + $this->metadataClassName = $metadataClassName; + $this->parentClassMetadata = $parentMetadata; } } diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php index 132e288bd75..e38d3f658e9 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php @@ -23,7 +23,6 @@ namespace Doctrine\ORM\Mapping\Factory; use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\Factory\AbstractClassMetadataFactory; class ClassMetadataDefinitionFactory { @@ -33,56 +32,51 @@ class ClassMetadataDefinitionFactory private $resolver; /** - * @var ClassMetadataGenerator + * @var ClassMetadataGeneratorStrategy */ - private $generator; + private $generatorStrategy; /** - * @var int + * ClassMetadataDefinitionFactory constructor. + * + * @param ClassMetadataResolver $resolver + * @param ClassMetadataGeneratorStrategy $generatorStrategy */ - private $autoGenerate; - - public function __construct(ClassMetadataResolver $resolver, ClassMetadataGenerator $generator, int $autoGenerate) + public function __construct(ClassMetadataResolver $resolver, ClassMetadataGeneratorStrategy $generatorStrategy) { - $this->resolver = $resolver; - $this->generator = $generator; - $this->autoGenerate = $autoGenerate; + $this->resolver = $resolver; + $this->generatorStrategy = $generatorStrategy; } /** * @param string $className - * @param ClassMetadata|null $parent + * @param ClassMetadata|null $parentMetadata * * @return ClassMetadataDefinition */ - public function build(string $className, ?ClassMetadata $parent) : ClassMetadataDefinition + public function build(string $className, ?ClassMetadata $parentMetadata) : ClassMetadataDefinition { - $metadataClassName = $this->resolver->resolveMetadataClassName($className); - $definition = new ClassMetadataDefinition($className, $metadataClassName, $parent); + $definition = $this->createDefinition($className, $parentMetadata); - if (! class_exists($metadataClassName, false)) { + if (! class_exists($definition->metadataClassName, false)) { $metadataClassPath = $this->resolver->resolveMetadataClassPath($className); - switch ($this->autoGenerate) { - case AbstractClassMetadataFactory::AUTOGENERATE_FILE_NOT_EXISTS: - if (! file_exists($metadataClassPath)) { - $this->generator->generate($metadataClassPath, $definition); - } - - break; - - case AbstractClassMetadataFactory::AUTOGENERATE_ALWAYS: - $this->generator->generate($metadataClassPath, $definition); - break; - - case AbstractClassMetadataFactory::AUTOGENERATE_NEVER: - // Do nothing - break; - } - - require $metadataClassPath; + $this->generatorStrategy->generate($metadataClassPath, $definition); } return $definition; } -} \ No newline at end of file + + /** + * @param string $className + * @param ClassMetadata|null $parentMetadata + * + * @return ClassMetadataDefinition + */ + private function createDefinition(string $className, ?ClassMetadata $parentMetadata) : ClassMetadataDefinition + { + $metadataClassName = $this->resolver->resolveMetadataClassName($className); + + return new ClassMetadataDefinition($className, $metadataClassName, $parentMetadata); + } +} diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php index 700e82fb5fe..6d60d9a6378 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php @@ -58,38 +58,17 @@ public function __construct( } /** - * @param string $path * @param ClassMetadataDefinition $definition * - * @throws \RuntimeException + * @return string */ - public function generate(string $path, ClassMetadataDefinition $definition) + public function generate(ClassMetadataDefinition $definition) : string { - $metadata = $this->mappingDriver->loadMetadataForClass($definition->entityClassName, $definition->parent); - $sourceCode = $this->metadataExporter->export($metadata); // @todo guilhermeblanco Pass class name to exporter + $metadata = $this->mappingDriver->loadMetadataForClass( + $definition->entityClassName, + $definition->parentClassMetadata + ); - $this->ensureDirectoryIsReady(dirname($path)); - - $tmpFileName = $path . '.' . uniqid('', true); - - file_put_contents($tmpFileName, $sourceCode); - @chmod($tmpFileName, 0664); - rename($tmpFileName, $path); - } - - /** - * @param string $directory - * - * @throws \RuntimeException - */ - protected function ensureDirectoryIsReady(string $directory) - { - if (! is_dir($directory) && (false === @mkdir($directory, 0775, true))) { - throw new \RuntimeException(sprintf('Your metadata directory "%s" must be writable', $directory)); - } - - if (! is_writable($directory)) { - throw new \RuntimeException(sprintf('Your proxy directory "%s" must be writable', $directory)); - } + return $this->metadataExporter->export($metadata); } } diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGeneratorStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGeneratorStrategy.php new file mode 100644 index 00000000000..224144094e1 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGeneratorStrategy.php @@ -0,0 +1,34 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Factory; + +interface ClassMetadataGeneratorStrategy +{ + /** + * @param string $filePath + * @param ClassMetadataDefinition $definition + * + * @return void + */ + public function generate(string $filePath, ClassMetadataDefinition $definition) : void; +} diff --git a/lib/Doctrine/ORM/Mapping/Factory/EvaluatingClassMetadataGeneratorStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/EvaluatingClassMetadataGeneratorStrategy.php new file mode 100644 index 00000000000..3046e42a169 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Factory/EvaluatingClassMetadataGeneratorStrategy.php @@ -0,0 +1,51 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Factory; + +class EvaluatingClassMetadataGeneratorStrategy implements ClassMetadataGeneratorStrategy +{ + /** + * @var ClassMetadataGenerator + */ + private $generator; + + /** + * FileWriterDefinitionGeneratorStrategy constructor. + * + * @param ClassMetadataGenerator $generator + */ + public function __construct(ClassMetadataGenerator $generator) + { + $this->generator = $generator; + } + + /** + * {@inheritdoc} + */ + public function generate(string $filePath, ClassMetadataDefinition $definition): void + { + $sourceCode = $this->generator->generate($definition); + + eval($sourceCode); + } +} diff --git a/lib/Doctrine/ORM/Mapping/Factory/FileLoaderClassMetadataGeneratorStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/FileLoaderClassMetadataGeneratorStrategy.php new file mode 100644 index 00000000000..2422054779b --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Factory/FileLoaderClassMetadataGeneratorStrategy.php @@ -0,0 +1,34 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Factory; + +class FileLoaderClassMetadataGeneratorStrategy implements ClassMetadataGeneratorStrategy +{ + /** + * {@inheritdoc} + */ + public function generate(string $filePath, ClassMetadataDefinition $definition): void + { + require $filePath; + } +} diff --git a/lib/Doctrine/ORM/Mapping/Factory/FileWriterClassMetadataGeneratorStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/FileWriterClassMetadataGeneratorStrategy.php new file mode 100644 index 00000000000..064157f6a57 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Factory/FileWriterClassMetadataGeneratorStrategy.php @@ -0,0 +1,75 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Factory; + +class FileWriterClassMetadataGeneratorStrategy implements ClassMetadataGeneratorStrategy +{ + /** + * @var ClassMetadataGenerator + */ + private $generator; + + /** + * FileWriterDefinitionGeneratorStrategy constructor. + * + * @param ClassMetadataGenerator $generator + */ + public function __construct(ClassMetadataGenerator $generator) + { + $this->generator = $generator; + } + + /** + * {@inheritdoc} + */ + public function generate(string $filePath, ClassMetadataDefinition $definition): void + { + $sourceCode = $this->generator->generate($definition); + + $this->ensureDirectoryIsReady(dirname($filePath)); + + $tmpFileName = $filePath . '.' . uniqid('', true); + + file_put_contents($tmpFileName, $sourceCode); + @chmod($tmpFileName, 0664); + rename($tmpFileName, $filePath); + + require $filePath; + } + + /** + * @param string $directory + * + * @throws \RuntimeException + */ + private function ensureDirectoryIsReady(string $directory) + { + if (! is_dir($directory) && (false === @mkdir($directory, 0775, true))) { + throw new \RuntimeException(sprintf('Your metadata directory "%s" must be writable', $directory)); + } + + if (! is_writable($directory)) { + throw new \RuntimeException(sprintf('Your proxy directory "%s" must be writable', $directory)); + } + } +} From 93fb1de9fec065df08293ba342ba187e0758d4a6 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sun, 2 Jul 2017 22:31:29 -0300 Subject: [PATCH 154/275] Removed Instantiator from ClassMetadata and concentrate into UnitOfWork --- lib/Doctrine/ORM/EntityManager.php | 2 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 19 +----------- .../ORM/Mapping/EntityClassMetadata.php | 7 +---- lib/Doctrine/ORM/UnitOfWork.php | 17 +++++++++-- .../Tests/ORM/Mapping/ClassMetadataTest.php | 27 ----------------- tests/Doctrine/Tests/ORM/UnitOfWorkTest.php | 29 +++++++++++++++++++ 6 files changed, 47 insertions(+), 54 deletions(-) diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index eb5b1f95151..35b388b3323 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -563,7 +563,7 @@ public function getPartialReference($entityName, $id) return ($entity instanceof $class->name) ? $entity : null; } - $entity = $class->newInstance(); + $entity = $this->unitOfWork->newInstance($class); $class->assignIdentifier($entity, $sortedId); diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 7862252c013..c4e7d571c17 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1,4 +1,5 @@ rootEntityName = $entityName; $this->namingStrategy = $namingStrategy ?: new DefaultNamingStrategy(); $this->table = new TableMetadata(); - $this->instantiator = new Instantiator(); $this->table->setName($this->namingStrategy->classToTableName($entityName)); } @@ -529,16 +523,6 @@ public function __sleep() return $serialized; } - /** - * Creates a new instance of the mapped class, without invoking the constructor. - * - * @return object - */ - public function newInstance() - { - return $this->instantiator->instantiate($this->name); - } - /** * Restores some state that can not be serialized/unserialized. * @@ -550,7 +534,6 @@ public function wakeupReflection($reflService) { // Restore ReflectionClass and properties $this->reflectionClass = $reflService->getClass($this->name); - $this->instantiator = $this->instantiator ?: new Instantiator(); if (! $this->reflectionClass) { return; diff --git a/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php b/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php index aa7caf9268d..b7f1596d90c 100644 --- a/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php @@ -129,11 +129,6 @@ class EntityClassMetadata extends ComponentMetadata */ protected $table; - /** - * @var \Doctrine\Instantiator\InstantiatorInterface|null - */ - protected $instantiator; - /** * MappedSuperClassMetadata constructor. * @@ -212,4 +207,4 @@ public function addDeclaredProperty(Property $property) $this->setDeclaredVersion($property); } } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index cec0dcd6fa5..0392f57d85c 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -24,6 +24,7 @@ use Doctrine\Common\Persistence\ObjectManagerAware; use Doctrine\Common\PropertyChangedListener; use Doctrine\DBAL\LockMode; +use Doctrine\Instantiator\Instantiator; use Doctrine\ORM\Cache\Persister\CachedPersister; use Doctrine\ORM\Event\LifecycleEventArgs; use Doctrine\ORM\Event\ListenersInvoker; @@ -257,6 +258,11 @@ class UnitOfWork implements PropertyChangedListener */ private $identifierFlattener; + /** + * @var Instantiator + */ + private $instantiator; + /** * Orphaned entities that are scheduled for removal. * @@ -302,6 +308,7 @@ public function __construct(EntityManagerInterface $em) $this->listenersInvoker = new ListenersInvoker($em); $this->hasCache = $em->getConfiguration()->isSecondLevelCacheEnabled(); $this->identifierFlattener = new IdentifierFlattener($this, $em->getMetadataFactory()); + $this->instantiator = new Instantiator(); $this->hydrationCompleteHandler = new HydrationCompleteHandler($this->listenersInvoker, $em); } @@ -2443,13 +2450,19 @@ public function isCollectionScheduledForDeletion(PersistentCollection $coll) } /** + * INTERNAL: + * Creates a new instance of the mapped class, without invoking the constructor. + * This is only meant to be used internally, and should not be consumed by end users. + * + * @ignore + * * @param ClassMetadata $class * * @return \Doctrine\Common\Persistence\ObjectManagerAware|object */ - private function newInstance($class) + public function newInstance(ClassMetadata $class) { - $entity = $class->newInstance(); + $entity = $this->instantiator->instantiate($class->getName()); if ($entity instanceof \Doctrine\Common\Persistence\ObjectManagerAware) { $entity->injectObjectManager($this->em, $class); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 46a30b450a6..ccef56c4a7a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -1445,29 +1445,6 @@ public function testIsIdentifierMappedSuperClass() self::assertFalse($class->isIdentifier('foo')); } - /** - * @group DDC-3120 - */ - public function testCanInstantiateInternalPhpClassSubclass() - { - $classMetadata = new ClassMetadata(MyArrayObjectEntity::class); - - self::assertInstanceOf(MyArrayObjectEntity::class, $classMetadata->newInstance()); - } - - /** - * @group DDC-3120 - */ - public function testCanInstantiateInternalPhpClassSubclassFromUnserializedMetadata() - { - /* @var $classMetadata ClassMetadata */ - $classMetadata = unserialize(serialize(new ClassMetadata(MyArrayObjectEntity::class))); - - $classMetadata->wakeupReflection(new RuntimeReflectionService()); - - self::assertInstanceOf(MyArrayObjectEntity::class, $classMetadata->newInstance()); - } - /** * @group embedded */ @@ -1544,7 +1521,3 @@ public function propertyToColumnName($propertyName, $className = null) return strtolower($this->classToTableName($className)) . '_' . $propertyName; } } - -class MyArrayObjectEntity extends \ArrayObject -{ -} diff --git a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php index b557e408c7b..d10fac54d74 100644 --- a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php +++ b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php @@ -9,8 +9,10 @@ use Doctrine\Common\PropertyChangedListener; use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Events; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\ORMInvalidArgumentException; +use Doctrine\ORM\Reflection\RuntimeReflectionService; use Doctrine\ORM\UnitOfWork; use Doctrine\Tests\Mocks\ConnectionMock; use Doctrine\Tests\Mocks\DriverMock; @@ -591,6 +593,29 @@ public function testMergeWithExistingEntityWillNotPersistItNorTriggerPrePersistL self::assertSame($merged, $persistedEntity); self::assertSame($persistedEntity->generatedField, $mergedEntity->generatedField); } + + /** + * @group DDC-3120 + */ + public function testCanInstantiateInternalPhpClassSubclass() + { + $classMetadata = new ClassMetadata(MyArrayObjectEntity::class); + + self::assertInstanceOf(MyArrayObjectEntity::class, $this->unitOfWork->newInstance($classMetadata)); + } + + /** + * @group DDC-3120 + */ + public function testCanInstantiateInternalPhpClassSubclassFromUnserializedMetadata() + { + /* @var $classMetadata ClassMetadata */ + $classMetadata = unserialize(serialize(new ClassMetadata(MyArrayObjectEntity::class))); + + $classMetadata->wakeupReflection(new RuntimeReflectionService()); + + self::assertInstanceOf(MyArrayObjectEntity::class, $this->unitOfWork->newInstance($classMetadata)); + } } /** @@ -755,3 +780,7 @@ public function __construct() $this->generatedField = mt_rand(0, 100000); } } + +class MyArrayObjectEntity extends \ArrayObject +{ +} From a66935b4ab959f26b5edaed1eaeae3132a9ce60d Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 10 Jul 2017 22:14:25 -0400 Subject: [PATCH 155/275] Removed sequence methods from class metadata --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 43 +------------------ .../ORM/Mapping/ClassMetadataFactory.php | 10 ++++- .../Models/DDC2825/ExplicitSchemaAndTable.php | 10 ++++- .../ORM/Functional/Ticket/DDC2825Test.php | 6 ++- 4 files changed, 21 insertions(+), 48 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index c4e7d571c17..1983d9d638d 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -20,7 +20,6 @@ namespace Doctrine\ORM\Mapping; -use Doctrine\Common\Persistence\Mapping\ClassMetadata as ClassMetadataInterface; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\ORM\Cache\CacheException; use Doctrine\ORM\EntityManagerInterface; @@ -47,7 +46,7 @@ * @author Guilherme Blanco * @since 2.0 */ -class ClassMetadata implements TableOwner, ClassMetadataInterface +class ClassMetadata implements TableOwner, \Doctrine\Common\Persistence\Mapping\ClassMetadata { /** * READ-ONLY: The name of the entity class. @@ -2154,46 +2153,6 @@ private function assertPropertyNotMapped(string $fieldName) // } } - /** - * Gets the sequence name based on class metadata. - * - * @param AbstractPlatform $platform - * @return string - * - * @todo guilhermeblanco Sequence names should be computed in DBAL depending on the platform - */ - public function getSequenceName(AbstractPlatform $platform) - { - $property = $this->properties[$this->getSingleIdentifierFieldName()]; - - return sprintf('%s_%s_seq', $this->getSequencePrefix($platform), $property->getColumnName()); - } - - /** - * Gets the sequence name prefix based on class metadata. - * - * @param AbstractPlatform $platform - * @return string - * - * @todo guilhermeblanco Sequence names should be computed in DBAL depending on the platform - */ - public function getSequencePrefix(AbstractPlatform $platform) - { - $tableName = $this->getTableName(); - $sequencePrefix = $tableName; - - // Prepend the schema name to the table name if there is one - if ($schemaName = $this->getSchemaName()) { - $sequencePrefix = $schemaName . '.' . $tableName; - - if ( ! $platform->supportsSchemas() && $platform->canEmulateSchemas()) { - $sequencePrefix = $schemaName . '__' . $tableName; - } - } - - return $sequencePrefix; - } - /** * {@inheritDoc} * diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index f54551643ca..0f17bd172ff 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -669,7 +669,7 @@ private function completeIdGeneratorMapping(ClassMetadata $class) // Platforms that do not have native IDENTITY support need a sequence to emulate this behaviour. if ($property && $platform->usesSequenceEmulatedIdentityColumns()) { - $sequencePrefix = $class->getSequencePrefix($platform); + $sequencePrefix = $platform->getSequencePrefix($class->getTableName(), $class->getSchemaName()); $idSequenceName = $platform->getIdentitySequenceName($sequencePrefix, $property->getColumnName()); $sequenceName = $platform->quoteIdentifier($platform->fixSchemaElementName($idSequenceName)); } @@ -689,7 +689,13 @@ private function completeIdGeneratorMapping(ClassMetadata $class) if ( ! $definition) { // @todo guilhermeblanco Move sequence generation to DBAL - $idSequenceName = $class->getSequenceName($platform); + $property = $class->identifier + ? $class->getProperty($class->getSingleIdentifierFieldName()) + : null + ; + + $sequencePrefix = $platform->getSequencePrefix($class->getTableName(), $class->getSchemaName()); + $idSequenceName = sprintf('%s_%s_seq', $sequencePrefix, $property->getColumnName()); $sequenceName = $platform->fixSchemaElementName($idSequenceName); $definition = [ diff --git a/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php b/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php index 764762beb77..4ab523f815d 100644 --- a/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php +++ b/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php @@ -6,10 +6,16 @@ use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping; -/** @ORM\Entity @ORM\Table(name="explicit_table", schema="explicit_schema") */ +/** + * @ORM\Entity + * @ORM\Table(name="explicit_table", schema="explicit_schema") + */ class ExplicitSchemaAndTable { - /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue(strategy="AUTO") */ + /** + * @ORM\Id @ORM\Column(type="integer") + * @ORM\GeneratedValue(strategy="AUTO") + */ public $id; public static function loadMetadata(Mapping\ClassMetadata $metadata) diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php index 3192770a8d2..1a3925b9cdd 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php @@ -53,12 +53,14 @@ public function testClassSchemaMappingsValidity($className, $expectedSchemaName, self::assertEquals($fullTableName, $quotedTableName); - $property = $classMetadata->getProperty($classMetadata->getSingleIdentifierFieldName()); + $property = $classMetadata->getProperty($classMetadata->getSingleIdentifierFieldName()); + $sequencePrefix = $platform->getSequencePrefix($classMetadata->getTableName(), $classMetadata->getSchemaName()); + $idSequenceName = sprintf('%s_%s_seq', $sequencePrefix, $property->getColumnName()); // Checks sequence name validity self::assertEquals( str_replace('"', '', $fullTableName) . '_' . $property->getColumnName() . '_seq', - $classMetadata->getSequenceName($platform) + $idSequenceName ); } From b20ea295b1f185cee7ba92247f5c6a0df069e544 Mon Sep 17 00:00:00 2001 From: Michael Moravec Date: Wed, 12 Jul 2017 01:39:35 +0200 Subject: [PATCH 156/275] OrmTestCase: Always use full AnnotationReader, drop legacy versions --- tests/Doctrine/Tests/OrmTestCase.php | 36 ++-------------------------- 1 file changed, 2 insertions(+), 34 deletions(-) diff --git a/tests/Doctrine/Tests/OrmTestCase.php b/tests/Doctrine/Tests/OrmTestCase.php index 69c71e67a40..7e86cd5f002 100644 --- a/tests/Doctrine/Tests/OrmTestCase.php +++ b/tests/Doctrine/Tests/OrmTestCase.php @@ -4,7 +4,6 @@ use Doctrine\Common\Annotations; use Doctrine\Common\Cache\ArrayCache; -use Doctrine\Common\Version; use Doctrine\DBAL\DriverManager; use Doctrine\ORM\Cache\CacheConfiguration; use Doctrine\ORM\Cache\DefaultCacheFactory; @@ -58,43 +57,12 @@ abstract class OrmTestCase extends DoctrineTestCase /** * @param array $paths - * @param mixed $alias * * @return \Doctrine\ORM\Mapping\Driver\AnnotationDriver */ - protected function createAnnotationDriver($paths = [], $alias = null) + protected function createAnnotationDriver($paths = []) { - if (version_compare(Version::VERSION, '3.0.0-DEV', '>=')) { - $reader = new Annotations\CachedReader(new Annotations\AnnotationReader(), new ArrayCache()); - } else if (version_compare(Version::VERSION, '2.2.0-DEV', '>=')) { - // Register the ORM Annotations in the AnnotationRegistry - $reader = new Annotations\SimpleAnnotationReader(); - - $reader->addNamespace('Doctrine\ORM\Annotation'); - - $reader = new Annotations\CachedReader($reader, new ArrayCache()); - } else if (version_compare(Version::VERSION, '2.1.0-BETA3-DEV', '>=')) { - $reader = new Annotations\AnnotationReader(); - - $reader->setIgnoreNotImportedAnnotations(true); - $reader->setEnableParsePhpImports(false); - - if ($alias) { - $reader->setAnnotationNamespaceAlias('Doctrine\ORM\Annotation\\', $alias); - } else { - $reader->setDefaultAnnotationNamespace('Doctrine\ORM\Annotation\\'); - } - - $reader = new Annotations\CachedReader(new Annotations\IndexedReader($reader), new ArrayCache()); - } else { - $reader = new Annotations\AnnotationReader(); - - if ($alias) { - $reader->setAnnotationNamespaceAlias('Doctrine\ORM\Annotation\\', $alias); - } else { - $reader->setDefaultAnnotationNamespace('Doctrine\ORM\Annotation\\'); - } - } + $reader = new Annotations\CachedReader(new Annotations\AnnotationReader(), new ArrayCache()); Annotations\AnnotationRegistry::registerFile(__DIR__ . "/../../../lib/Doctrine/ORM/Annotation/DoctrineAnnotations.php"); From 9e4327c1453430f784fd3997185a9d53d4b41a28 Mon Sep 17 00:00:00 2001 From: Michael Moravec Date: Wed, 12 Jul 2017 02:41:38 +0200 Subject: [PATCH 157/275] Populate FieldMetadata ID generator --- .../ORM/Mapping/ClassMetadataFactory.php | 18 +++++++++++------- .../ORM/Mapping/Driver/AnnotationDriver.php | 7 +++++-- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 10 +++++++--- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 6 +++--- 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 0f17bd172ff..20a010a049f 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -655,6 +655,10 @@ private function completeIdGeneratorMapping(ClassMetadata $class) : GeneratorType::TABLE ); + + if ($class->identifier) { + $class->getProperty($class->getSingleIdentifierFieldName())->setIdentifierGeneratorType($idGenType); + } $class->setIdGeneratorType($idGenType); } @@ -694,16 +698,16 @@ private function completeIdGeneratorMapping(ClassMetadata $class) : null ; - $sequencePrefix = $platform->getSequencePrefix($class->getTableName(), $class->getSchemaName()); - $idSequenceName = sprintf('%s_%s_seq', $sequencePrefix, $property->getColumnName()); - $sequenceName = $platform->fixSchemaElementName($idSequenceName); + $sequencePrefix = $platform->getSequencePrefix($class->getTableName(), $class->getSchemaName()); + $idSequenceName = sprintf('%s_%s_seq', $sequencePrefix, $property->getColumnName()); + $sequenceName = $platform->fixSchemaElementName($idSequenceName); + $identifierField = $class->getProperty($class->getSingleIdentifierFieldName()); - $definition = [ + $identifierField->setIdentifierGeneratorDefinition([ 'sequenceName' => $sequenceName, 'allocationSize' => 1, - ]; - - $class->setGeneratorDefinition($definition); + ]); + $class->setGeneratorDefinition($identifierField->getIdentifierGeneratorDefinition()); } $sequenceGenerator = new Sequencing\SequenceGenerator( diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 96ebc17fcf1..ddf49a9676b 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -558,6 +558,7 @@ private function convertReflectionPropertyToFieldMetadata( $idGeneratorType = constant(sprintf('%s::%s', Mapping\GeneratorType::class, $strategy)); $metadata->setIdGeneratorType($idGeneratorType); + $fieldMetadata->setIdentifierGeneratorType($idGeneratorType); } // Check for CustomGenerator/SequenceGenerator/TableGenerator definition @@ -565,20 +566,22 @@ private function convertReflectionPropertyToFieldMetadata( case isset($propertyAnnotations[Annotation\SequenceGenerator::class]): $seqGeneratorAnnot = $propertyAnnotations[Annotation\SequenceGenerator::class]; - $metadata->setGeneratorDefinition([ + $fieldMetadata->setIdentifierGeneratorDefinition([ 'sequenceName' => $seqGeneratorAnnot->sequenceName, 'allocationSize' => $seqGeneratorAnnot->allocationSize, ]); + $metadata->setGeneratorDefinition($fieldMetadata->getIdentifierGeneratorDefinition()); break; case isset($propertyAnnotations[Annotation\CustomIdGenerator::class]): $customGeneratorAnnot = $propertyAnnotations[Annotation\CustomIdGenerator::class]; - $metadata->setGeneratorDefinition([ + $fieldMetadata->setIdentifierGeneratorDefinition([ 'class' => $customGeneratorAnnot->class, 'arguments' => $customGeneratorAnnot->arguments, ]); + $metadata->setGeneratorDefinition($fieldMetadata->getIdentifierGeneratorDefinition()); break; diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 29a70e46ce0..9f8f8906e53 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -332,28 +332,32 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) : 'AUTO' ; - $metadata->setIdGeneratorType(constant(sprintf('%s::%s', GeneratorType::class, strtoupper($strategy)))); + $idGeneratorType = constant(sprintf('%s::%s', GeneratorType::class, strtoupper($strategy))); + $fieldMetadata->setIdentifierGeneratorType($idGeneratorType); + $metadata->setIdGeneratorType($fieldMetadata->getIdentifierGeneratorType()); } // Check for SequenceGenerator/TableGenerator definition if (isset($idElement->{'sequence-generator'})) { $seqGenerator = $idElement->{'sequence-generator'}; - $metadata->setGeneratorDefinition( + $fieldMetadata->setIdentifierGeneratorDefinition( [ 'sequenceName' => (string) $seqGenerator['sequence-name'], 'allocationSize' => (string) $seqGenerator['allocation-size'], ] ); + $metadata->setGeneratorDefinition($fieldMetadata->getIdentifierGeneratorDefinition()); } else if (isset($idElement->{'custom-id-generator'})) { $customGenerator = $idElement->{'custom-id-generator'}; - $metadata->setGeneratorDefinition( + $fieldMetadata->setIdentifierGeneratorDefinition( [ 'class' => (string) $customGenerator['class'], 'arguments' => [], ] ); + $metadata->setGeneratorDefinition($fieldMetadata->getIdentifierGeneratorDefinition()); } else if (isset($idElement->{'table-generator'})) { throw MappingException::tableIdGeneratorNotImplemented($className); } diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index 982eef2d166..47c2b9b6868 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -36,7 +36,7 @@ class FieldMetadata extends LocalColumnMetadata implements Property /** @var string */ protected $name; - /** @var int */ + /** @var string */ protected $identifierGeneratorType = GeneratorType::NONE; /** @var array */ @@ -88,7 +88,7 @@ public function getName() } /** - * @return int + * @return string */ public function getIdentifierGeneratorType() { @@ -98,7 +98,7 @@ public function getIdentifierGeneratorType() /** * @param int $identifierGeneratorType */ - public function setIdentifierGeneratorType(int $identifierGeneratorType) + public function setIdentifierGeneratorType(string $identifierGeneratorType) { $this->identifierGeneratorType = $identifierGeneratorType; } From 5e7a677c92a893fee18837897275285e7c0ab416 Mon Sep 17 00:00:00 2001 From: Michael Moravec Date: Wed, 12 Jul 2017 05:02:02 +0200 Subject: [PATCH 158/275] WIP --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 129 ++++-------------- .../ORM/Mapping/ClassMetadataFactory.php | 112 ++++++--------- .../ORM/Mapping/Driver/AnnotationDriver.php | 3 - .../ORM/Mapping/Driver/DatabaseDriver.php | 2 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 3 - .../Exporter/ClassMetadataExporter.php | 5 - .../Exporter/FieldMetadataExporter.php | 14 +- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 20 +++ .../Entity/BasicEntityPersister.php | 11 +- .../Entity/JoinedSubclassPersister.php | 4 +- .../Command/MappingDescribeCommand.php | 7 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 37 ++--- .../ORM/Tools/Export/Driver/PhpExporter.php | 10 +- .../ORM/Tools/Export/Driver/XmlExporter.php | 14 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 15 +- lib/Doctrine/ORM/UnitOfWork.php | 73 +++++----- .../Tests/Mocks/ClassMetadataMock.php | 8 -- .../Tests/Mocks/EntityPersisterMock.php | 3 +- .../DDC1476EntityWithDefaultFieldType.php | 3 +- .../Tests/Models/DDC3579/DDC3579User.php | 3 +- .../Models/DDC5934/DDC5934BaseContract.php | 3 +- .../Tests/Models/DDC869/DDC869Payment.php | 2 +- .../Tests/Models/DDC889/DDC889Class.php | 3 +- .../Tests/Models/DDC889/DDC889SuperClass.php | 2 +- .../Tests/Models/DDC964/DDC964User.php | 3 +- .../SchemaTool/PostgreSqlSchemaToolTest.php | 2 +- .../ORM/Functional/Ticket/DDC2415Test.php | 12 +- .../ORM/Functional/Ticket/DDC3634Test.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 45 +++--- .../Mapping/BasicInheritanceMappingTest.php | 12 +- .../ORM/Mapping/ClassMetadataFactoryTest.php | 26 ++-- .../Tests/ORM/Mapping/ClassMetadataTest.php | 9 +- .../php/Doctrine.Tests.Models.Cache.City.php | 2 +- ...1476.DDC1476EntityWithDefaultFieldType.php | 3 +- ....Models.DDC2825.ExplicitSchemaAndTable.php | 2 +- ...dels.DDC2825.SchemaAndTableInTableName.php | 2 +- ...trine.Tests.Models.DDC3579.DDC3579User.php | 3 +- ...sts.Models.DDC5934.DDC5934BaseContract.php | 3 +- ...rine.Tests.Models.DDC869.DDC869Payment.php | 2 +- ...e.Tests.Models.DDC889.DDC889SuperClass.php | 2 +- ...octrine.Tests.Models.DDC964.DDC964User.php | 3 +- .../php/Doctrine.Tests.ORM.Mapping.Animal.php | 10 +- ...ctrine.Tests.ORM.Mapping.DDC1170Entity.php | 3 +- ...octrine.Tests.ORM.Mapping.DDC807Entity.php | 3 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 16 +-- .../Tests/ORM/Tools/EntityGeneratorTest.php | 22 ++- .../AbstractClassMetadataExporterTest.php | 2 +- .../Export/XmlClassMetadataExporterTest.php | 10 +- .../Doctrine.Tests.ORM.Tools.Export.User.php | 2 +- 49 files changed, 294 insertions(+), 393 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 1983d9d638d..4ef390d95df 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -199,13 +199,6 @@ class ClassMetadata implements TableOwner, \Doctrine\Common\Persistence\Mapping\ */ public $inheritanceType = InheritanceType::NONE; - /** - * READ-ONLY: The Id generator type used by the class. - * - * @var string - */ - public $generatorType = GeneratorType::NONE; - /** * READ-ONLY: The policy used for change-tracking on entities of this class. * @@ -213,38 +206,6 @@ class ClassMetadata implements TableOwner, \Doctrine\Common\Persistence\Mapping\ */ public $changeTrackingPolicy = ChangeTrackingPolicy::DEFERRED_IMPLICIT; - /** - * READ-ONLY: The definition of the identity generator of this class. - * In case of SEQUENCE generation strategy, the definition has the following structure: - * - * array( - * 'sequenceName' => 'name', - * 'allocationSize' => 20, - * ) - * - * - * In case of CUSTOM generation strategy, the definition has the following structure: - * - * array( - * 'class' => 'ClassName', - * ) - * - * - * @var array - * - * @todo Remove! - */ - public $generatorDefinition; - - /** - * READ-ONLY: The ID generator used for generating IDs for this class. - * - * @var \Doctrine\ORM\Sequencing\Generator - * - * @todo Remove! - */ - public $idGenerator; - /** * READ-ONLY: The discriminator value of this class. * @@ -450,7 +411,6 @@ public function __sleep() 'name', 'table', 'rootEntityName', - 'idGenerator', //TODO: Does not really need to be serialized. Could be moved to runtime. ]); // The rest of the metadata is only serialized if necessary. @@ -471,14 +431,6 @@ public function __sleep() $serialized[] = 'subClasses'; } - if ($this->generatorType !== GeneratorType::NONE) { - $serialized[] = 'generatorType'; - } - - if ($this->generatorDefinition) { - $serialized[] = "generatorDefinition"; - } - if ($this->isMappedSuperclass) { $serialized[] = 'isMappedSuperclass'; } @@ -613,7 +565,7 @@ public function validateIdentifier() throw MappingException::identifierRequired($this->name); } - if ($this->generatorType !== GeneratorType::NONE && $this->isIdentifierComposite()) { + if ($this->isIdentifierComposite() && count($this->getGeneratedIdentifierProperties()) !== 0) { throw MappingException::compositeKeyAssignedIdGeneratorRequired($this->name); } } @@ -1289,18 +1241,6 @@ public function getIdentifierColumns(EntityManagerInterface $em) return $columns; } - /** - * Sets the type of Id generator to use for the mapped class. - * - * @param int $generatorType - * - * @return void - */ - public function setIdGeneratorType($generatorType) - { - $this->generatorType = $generatorType; - } - /** * Gets the name of the primary table. * @@ -1633,6 +1573,28 @@ public function addInheritedProperty(Property $property) } } + /** + * @return array + */ + public function getIdentifierProperties(): array + { + return array_filter($this->properties, function (Property $property) : bool { + return $property instanceof FieldMetadata && $property->isPrimaryKey(); + }); + } + + /** + * @return array + */ + public function getGeneratedIdentifierProperties(): array + { + return array_filter($this->properties, function (Property $property) : bool { + return $property instanceof FieldMetadata + && $property->isPrimaryKey() + && $property->getIdentifierGeneratorType() !== GeneratorType::NONE; + }); + } + /** * INTERNAL: * Adds a named query to this class. @@ -1984,51 +1946,6 @@ public function hasSqlResultSetMapping($name) return isset($this->sqlResultSetMappings[$name]); } - /** - * Sets the ID generator used to generate IDs for instances of this class. - * - * @param \Doctrine\ORM\Sequencing\Generator $generator - * - * @return void - */ - public function setIdGenerator($generator) - { - $this->idGenerator = $generator; - } - - /** - * Sets the generator definition for this class. - * For sequence definition, it must have the following structure: - * - * - * array( - * 'sequenceName' => 'name', - * 'allocationSize' => 20, - * ) - * - * - * For custom definition, it must have the following structure: - * - * - * array( - * 'class' => 'Path\To\ClassName', - * 'arguments' => [], - * ) - * - * - * @param array $definition - * - * @return void - */ - public function setGeneratorDefinition(array $definition) - { - if ($this->generatorType === GeneratorType::SEQUENCE && ! isset($definition['sequenceName'])) { - throw MappingException::missingSequenceName($this->name); - } - - $this->generatorDefinition = $definition; - } - /** * Marks this class as read only, no change tracking is applied to it. * diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 20a010a049f..ce33fe1aa50 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -132,7 +132,6 @@ protected function doLoadMetadata( $this->addInheritedProperties($class, $parent); $this->addInheritedEmbeddedClasses($class, $parent); - $this->inheritIdGeneratorMapping($class, $parent); $class->setInheritanceType($parent->inheritanceType); $class->setIdentifier($parent->identifier); @@ -158,12 +157,7 @@ protected function doLoadMetadata( throw MappingException::reflectionFailure($class->getName(), $e); } - // If this class has a parent the id generator strategy is inherited. - // However this is only true if the hierarchy of parents contains the root entity, - // if it consists of mapped superclasses these don't necessarily include the id field. - if (! ($parent && $rootEntityFound)) { - $this->completeIdGeneratorMapping($class); - } + $this->completeIdentifierGeneratorMappings($class); /*if ( ! $class->isMappedSuperclass) { foreach ($class->embeddedClasses as $property => $embeddableClass) { @@ -642,88 +636,84 @@ private function addInheritedSqlResultSetMappings(ClassMetadata $subClass, Class * * @throws ORMException */ - private function completeIdGeneratorMapping(ClassMetadata $class) + private function completeIdentifierGeneratorMappings(ClassMetadata $class) { - $idGenType = $class->generatorType; - $platform = $this->getTargetPlatform(); - - if ($idGenType === GeneratorType::AUTO) { - $idGenType = $platform->prefersSequences() - ? GeneratorType::SEQUENCE - : ($platform->prefersIdentityColumns() - ? GeneratorType::IDENTITY - : GeneratorType::TABLE - ); + foreach ($class->getProperties() as $property) { + if ( ! $property instanceof FieldMetadata) { + continue; + } + $this->completeFieldIdentifierGeneratorMapping($property); + } + } - if ($class->identifier) { - $class->getProperty($class->getSingleIdentifierFieldName())->setIdentifierGeneratorType($idGenType); - } - $class->setIdGeneratorType($idGenType); + private function completeFieldIdentifierGeneratorMapping(FieldMetadata $field) + { + $platform = $this->getTargetPlatform(); + $class = $field->getDeclaringClass();; + + if ($field->getIdentifierGeneratorType() === GeneratorType::AUTO) { + $field->setIdentifierGeneratorType( + $platform->prefersSequences() + ? GeneratorType::SEQUENCE + : ($platform->prefersIdentityColumns() + ? GeneratorType::IDENTITY + : GeneratorType::TABLE + ) + ); } // Create & assign an appropriate ID generator instance - switch ($class->generatorType) { + switch ($field->getIdentifierGeneratorType()) { case GeneratorType::IDENTITY: $sequenceName = null; - $property = $class->identifier - ? $class->getProperty($class->getSingleIdentifierFieldName()) - : null - ; // Platforms that do not have native IDENTITY support need a sequence to emulate this behaviour. - if ($property && $platform->usesSequenceEmulatedIdentityColumns()) { + if ($platform->usesSequenceEmulatedIdentityColumns()) { $sequencePrefix = $platform->getSequencePrefix($class->getTableName(), $class->getSchemaName()); - $idSequenceName = $platform->getIdentitySequenceName($sequencePrefix, $property->getColumnName()); + $idSequenceName = $platform->getIdentitySequenceName($sequencePrefix, $field->getColumnName()); $sequenceName = $platform->quoteIdentifier($platform->fixSchemaElementName($idSequenceName)); } - $generator = ($property && $property->getTypeName() === 'bigint') + $generator = $field->getTypeName() === 'bigint' ? new Sequencing\BigIntegerIdentityGenerator($sequenceName) : new Sequencing\IdentityGenerator($sequenceName) ; - $class->setIdGenerator($generator); + + $field->setIdentifierGenerator($generator); break; case GeneratorType::SEQUENCE: // If there is no sequence definition yet, create a default definition - $definition = $class->generatorDefinition; - - if ( ! $definition) { + if ( ! $field->getIdentifierGeneratorDefinition()) { // @todo guilhermeblanco Move sequence generation to DBAL - $property = $class->identifier - ? $class->getProperty($class->getSingleIdentifierFieldName()) - : null - ; $sequencePrefix = $platform->getSequencePrefix($class->getTableName(), $class->getSchemaName()); - $idSequenceName = sprintf('%s_%s_seq', $sequencePrefix, $property->getColumnName()); + $idSequenceName = sprintf('%s_%s_seq', $sequencePrefix, $field->getColumnName()); $sequenceName = $platform->fixSchemaElementName($idSequenceName); - $identifierField = $class->getProperty($class->getSingleIdentifierFieldName()); - $identifierField->setIdentifierGeneratorDefinition([ + $field->setIdentifierGeneratorDefinition([ 'sequenceName' => $sequenceName, 'allocationSize' => 1, ]); - $class->setGeneratorDefinition($identifierField->getIdentifierGeneratorDefinition()); } $sequenceGenerator = new Sequencing\SequenceGenerator( - $platform->quoteIdentifier($definition['sequenceName']), - $definition['allocationSize'] + $platform->quoteIdentifier($field->getIdentifierGeneratorDefinition()['sequenceName']), + $field->getIdentifierGeneratorDefinition()['allocationSize'] ); - $class->setIdGenerator($sequenceGenerator); + $field->setIdentifierGenerator($sequenceGenerator); break; case GeneratorType::NONE: - $class->setIdGenerator(new Sequencing\AssignedGenerator()); + $field->setIdentifierGenerator(new Sequencing\AssignedGenerator()); break; case GeneratorType::UUID: - $class->setIdGenerator(new Sequencing\UuidGenerator()); + $field->setIdentifierGenerator(new Sequencing\UuidGenerator()); break; case GeneratorType::TABLE: @@ -731,38 +721,16 @@ private function completeIdGeneratorMapping(ClassMetadata $class) break; case GeneratorType::CUSTOM: - $definition = $class->generatorDefinition; - + $definition = $field->getIdentifierGeneratorDefinition(); if ( ! class_exists($definition['class'])) { throw new ORMException(sprintf('Cannot instantiate custom generator : %s', var_export($definition, true))); //$definition['class'])); } - $class->setIdGenerator(new $definition['class']); + $field->setIdentifierGenerator(new $definition['class']); break; default: - throw new ORMException("Unknown generator type: " . $class->generatorType); - } - } - - /** - * Inherits the ID generator mapping from a parent class. - * - * @param ClassMetadata $class - * @param ClassMetadata $parent - */ - private function inheritIdGeneratorMapping(ClassMetadata $class, ClassMetadata $parent) - { - if ($parent->generatorType) { - $class->setIdGeneratorType($parent->generatorType); - } - - if ($parent->generatorDefinition) { - $class->generatorDefinition = $parent->generatorDefinition; - } - - if ($parent->idGenerator) { - $class->setIdGenerator($parent->idGenerator); + throw new ORMException("Unknown generator type: " . $field->getIdentifierGeneratorType()); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index ddf49a9676b..6cfd3e331a5 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -557,7 +557,6 @@ private function convertReflectionPropertyToFieldMetadata( $strategy = strtoupper($generatedValueAnnot->strategy); $idGeneratorType = constant(sprintf('%s::%s', Mapping\GeneratorType::class, $strategy)); - $metadata->setIdGeneratorType($idGeneratorType); $fieldMetadata->setIdentifierGeneratorType($idGeneratorType); } @@ -570,7 +569,6 @@ private function convertReflectionPropertyToFieldMetadata( 'sequenceName' => $seqGeneratorAnnot->sequenceName, 'allocationSize' => $seqGeneratorAnnot->allocationSize, ]); - $metadata->setGeneratorDefinition($fieldMetadata->getIdentifierGeneratorDefinition()); break; @@ -581,7 +579,6 @@ private function convertReflectionPropertyToFieldMetadata( 'class' => $customGeneratorAnnot->class, 'arguments' => $customGeneratorAnnot->arguments, ]); - $metadata->setGeneratorDefinition($fieldMetadata->getIdentifierGeneratorDefinition()); break; diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index 8750c053634..a2146cfc467 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -383,7 +383,7 @@ private function buildFieldMappings(ClassMetadata $metadata) // We need to check for the columns here, because we might have associations as id as well. if ($ids && count($primaryKeys) === 1) { - $metadata->setIdGeneratorType(GeneratorType::AUTO); + $ids[0]->setIdentifierGeneratorType(GeneratorType::AUTO); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 9f8f8906e53..bb0e6860049 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -334,7 +334,6 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $idGeneratorType = constant(sprintf('%s::%s', GeneratorType::class, strtoupper($strategy))); $fieldMetadata->setIdentifierGeneratorType($idGeneratorType); - $metadata->setIdGeneratorType($fieldMetadata->getIdentifierGeneratorType()); } // Check for SequenceGenerator/TableGenerator definition @@ -347,7 +346,6 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) 'allocationSize' => (string) $seqGenerator['allocation-size'], ] ); - $metadata->setGeneratorDefinition($fieldMetadata->getIdentifierGeneratorDefinition()); } else if (isset($idElement->{'custom-id-generator'})) { $customGenerator = $idElement->{'custom-id-generator'}; @@ -357,7 +355,6 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) 'arguments' => [], ] ); - $metadata->setGeneratorDefinition($fieldMetadata->getIdentifierGeneratorDefinition()); } else if (isset($idElement->{'table-generator'})) { throw MappingException::tableIdGeneratorNotImplemented($className); } diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php index 61c0af999ea..61bbee47c46 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php @@ -132,11 +132,6 @@ private function exportInitialize(ClassMetadata $metadata, int $indentationLevel $lines[] = null; } - if (! $metadata->isIdentifierComposite()) { - $lines[] = $objectReference . '->setIdGeneratorType(Mapping\GeneratorType::' . strtoupper($metadata->generatorType) . ');'; - $lines[] = null; - } - if ($metadata->inheritanceType) { $lines[] = $objectReference . '->setInheritanceType(Mapping\InheritanceType::' . strtoupper($metadata->inheritanceType) . ');'; $lines[] = null; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php index 02d82439643..38c0b278536 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php @@ -23,6 +23,7 @@ namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\GeneratorType; class FieldMetadataExporter extends LocalColumnMetadataExporter { @@ -35,11 +36,22 @@ class FieldMetadataExporter extends LocalColumnMetadataExporter */ protected function exportInstantiation(FieldMetadata $metadata) : string { - return sprintf( + $export = sprintf( 'new Mapping\FieldMetadata("%s", "%s", Type::getType("%s"));', $metadata->getName(), $metadata->getColumnName(), $metadata->getTypeName() ); + + if ($metadata->getIdentifierGeneratorType() !== GeneratorType::NONE) { + $export .= PHP_EOL; + $export .= sprintf( + '%s->setIdentifierGeneratorType(Mapping\GeneratorType::%s);', + self::VARIABLE, + strtoupper($metadata->getIdentifierGeneratorType()) + ); + } + + return $export; } } diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index 47c2b9b6868..4a853d903b5 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -24,6 +24,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Reflection\ReflectionService; +use Doctrine\ORM\Sequencing\Generator; class FieldMetadata extends LocalColumnMetadata implements Property { @@ -42,6 +43,9 @@ class FieldMetadata extends LocalColumnMetadata implements Property /** @var array */ protected $identifierGeneratorDefinition = []; + /** @var Generator */ + protected $identifierGenerator; + /** * FieldMetadata constructor. * @@ -119,6 +123,22 @@ public function setIdentifierGeneratorDefinition(array $identifierGeneratorDefin $this->identifierGeneratorDefinition = $identifierGeneratorDefinition; } + /** + * @return Generator + */ + public function getIdentifierGenerator() : Generator + { + return $this->identifierGenerator; + } + + /** + * @param Generator $identifierGenerator + */ + public function setIdentifierGenerator(Generator $identifierGenerator) + { + $this->identifierGenerator = $identifierGenerator; + } + /** * {@inheritdoc} */ diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 9eb7d8d3bfe..0e0b9269ab4 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -260,8 +260,6 @@ public function executeInserts() } $postInsertIds = []; - $idGenerator = $this->class->idGenerator; - $isPostInsertId = $idGenerator->isPostInsertGenerator(); $stmt = $this->conn->prepare($this->getInsertSQL()); $tableName = $this->class->getTableName(); @@ -281,8 +279,9 @@ public function executeInserts() $stmt->execute(); - if ($isPostInsertId) { - $generatedId = $idGenerator->generate($this->em, $entity); + if (! $this->class->isIdentifierComposite() + && $this->class->getProperty($this->class->identifier[0])->getIdentifierGenerator()->isPostInsertGenerator()) { + $generatedId = $this->class->getProperty($this->class->identifier[0])->getIdentifierGenerator()->generate($this->em, $entity); $id = [$this->class->identifier[0] => $generatedId]; $postInsertIds[] = [ @@ -1542,7 +1541,9 @@ protected function getInsertColumnList() break; case ($property instanceof LocalColumnMetadata): - if ($this->class->generatorType !== GeneratorType::IDENTITY || $this->class->identifier[0] !== $name) { + if (! $property instanceof FieldMetadata + || $property->getIdentifierGeneratorType() !== GeneratorType::IDENTITY + || $this->class->identifier[0] !== $name) { $columnName = $property->getColumnName(); $columns[] = $columnName; diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index aca315e3583..aa7e43772c8 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -93,7 +93,7 @@ public function executeInserts() } $postInsertIds = []; - $idGenerator = $this->class->idGenerator; + $idGenerator = $this->class->getProperty($this->class->identifier[0])->getIdentifierGenerator(); $isPostInsertId = $idGenerator->isPostInsertGenerator(); $rootClass = ($this->class->name !== $this->class->rootEntityName) ? $this->em->getClassMetadata($this->class->rootEntityName) @@ -538,7 +538,7 @@ protected function getInsertColumnList() if ( $this->class->name !== $this->class->rootEntityName || - $this->class->generatorType !== GeneratorType::IDENTITY || + $property->getIdentifierGeneratorType() !== GeneratorType::IDENTITY || $this->class->identifier[0] !== $name ) { $columnName = $property->getColumnName(); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index d6d605041ac..0f22ad9c9c8 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -112,8 +112,6 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage [ $this->formatField('Discriminator value', $metadata->discriminatorValue), $this->formatField('Discriminator map', $metadata->discriminatorMap), - $this->formatField('Generator type', $metadata->generatorType), - $this->formatField('Generator definition', $metadata->generatorDefinition), $this->formatField('Table', ''), ], $this->formatTable($metadata->table), @@ -334,6 +332,11 @@ private function formatColumn(ColumnMetadata $columnMetadata = null) $output[] = $this->formatField(' isUnique', $this->formatValue($columnMetadata->isUnique())); $output[] = $this->formatField(' options', $this->formatValue($columnMetadata->getOptions())); + if ($columnMetadata instanceof FieldMetadata) { + $output[] = $this->formatField(' Generator type', $this->formatValue($columnMetadata->getIdentifierGeneratorType())); + $output[] = $this->formatField(' Generator definition', $this->formatValue($columnMetadata->getIdentifierGeneratorDefinition())); + } + return $output; } diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 44081dc1cf0..a1d339b7ba2 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -36,6 +36,7 @@ use Doctrine\ORM\Mapping\ManyToOneAssociationMetadata; use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; +use Doctrine\ORM\Mapping\Property; use Doctrine\ORM\Mapping\ToManyAssociationMetadata; use Doctrine\ORM\Mapping\ToOneAssociationMetadata; @@ -1165,7 +1166,7 @@ protected function generateEntityStubMethods(ClassMetadata $metadata) $methods[] = $code; } - if (( ! $property->isPrimaryKey() || $metadata->generatorType == GeneratorType::NONE) && + if (( ! $property->isPrimaryKey() || $property->getIdentifierGeneratorType() == GeneratorType::NONE) && ( ! $metadata->isEmbeddedClass || ! $this->embeddablesImmutable) && $code = $this->generateEntityStubMethod($metadata, 'set', $fieldName, $property->getTypeName(), $nullable)) { $methods[] = $code; @@ -1388,30 +1389,32 @@ protected function generateLifecycleCallbackMethod($name, $methodName, ClassMeta } /** - * @param ClassMetadata $metadata + * @param Property $metadata * * @return string */ - protected function generateIdentifierAnnotation(ClassMetadata $metadata) + protected function generateIdentifierAnnotation(Property $metadata) { $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'Id'; - if ($generatorType = $this->getIdGeneratorTypeString($metadata->generatorType)) { - $lines[] = $this->spaces.' * @' . $this->annotationsPrefix . 'GeneratedValue(strategy="' . $generatorType . '")'; - } + if ($metadata instanceof FieldMetadata) { + if ($generatorType = $this->getIdGeneratorTypeString($metadata->getIdentifierGeneratorType())) { + $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'GeneratedValue(strategy="' . $generatorType . '")'; + } - if ($metadata->generatorDefinition) { - $generator = []; + if ($metadata->getIdentifierGeneratorDefinition()) { + $generator = []; - if (isset($metadata->generatorDefinition['sequenceName'])) { - $generator[] = 'sequenceName="' . $metadata->generatorDefinition['sequenceName'] . '"'; - } + if (isset($metadata->generatorDefinition['sequenceName'])) { + $generator[] = 'sequenceName="' . $metadata->getIdentifierGeneratorDefinition()['sequenceName'] . '"'; + } - if (isset($metadata->generatorDefinition['allocationSize'])) { - $generator[] = 'allocationSize=' . $metadata->generatorDefinition['allocationSize']; - } + if (isset($metadata->generatorDefinition['allocationSize'])) { + $generator[] = 'allocationSize=' . $metadata->getIdentifierGeneratorDefinition()['allocationSize']; + } - $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'SequenceGenerator(' . implode(', ', $generator) . ')'; + $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'SequenceGenerator(' . implode(', ', $generator) . ')'; + } } return implode(PHP_EOL, $lines); @@ -1522,7 +1525,7 @@ protected function generateAssociationMappingPropertyDocBlock(AssociationMetadat $lines[] = $this->spaces . ' *'; if ($association->isPrimaryKey()) { - $lines[] = $this->generateIdentifierAnnotation($metadata); + $lines[] = $this->generateIdentifierAnnotation($association); } $type = null; @@ -1684,7 +1687,7 @@ protected function generateFieldMappingPropertyDocBlock(FieldMetadata $propertyM $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'Column(' . implode(', ', $column) . ')'; if ($propertyMetadata->isPrimaryKey()) { - $lines[] = $this->generateIdentifierAnnotation($metadata); + $lines[] = $this->generateIdentifierAnnotation($propertyMetadata); } if ($metadata->isVersioned() && $metadata->versionProperty->getName() === $propertyMetadata->getName()) { diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 739c9d047e6..22d6211b8a7 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -22,6 +22,7 @@ use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\JoinTableMetadata; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; @@ -142,10 +143,6 @@ public function exportClassMetadata(ClassMetadata $metadata) } } - if (! $metadata->isIdentifierComposite()) { - $lines[] = '$metadata->setIdGeneratorType(Mapping\GeneratorType::' . $metadata->generatorType . ');'; - } - foreach ($metadata->getProperties() as $property) { if ($property instanceof FieldMetadata) { $this->exportFieldMetadata($metadata, $property, $lines); @@ -190,6 +187,11 @@ private function exportFieldMetadata(ClassMetadata $metadata, FieldMetadata $pro $lines[] = '$property->setPrimaryKey(' . $this->varExport($property->isPrimaryKey()) . ');'; $lines[] = '$property->setNullable(' . $this->varExport($property->isNullable()) . ');'; $lines[] = '$property->setUnique(' . $this->varExport($property->isUnique()) . ');'; + + if ($property->getIdentifierGeneratorType() !== GeneratorType::NONE) { + $lines[] = '$property->setIdentifierGeneratorType(Mapping\GeneratorType::' . $property->getIdentifierGeneratorType() . ');'; + } + $lines[] = null; $lines[] = '$metadata->addProperty($property);'; } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 86cfdc1f897..b9b0e8401c6 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -205,12 +205,12 @@ public function exportClassMetadata(ClassMetadata $metadata) $idXml->addAttribute('length', $property->getLength()); } - if ($metadata->generatorType) { + if ($property->getIdentifierGeneratorType() !== GeneratorType::NONE) { $generatorXml = $idXml->addChild('generator'); - $generatorXml->addAttribute('strategy', $metadata->generatorType); + $generatorXml->addAttribute('strategy', $property->getIdentifierGeneratorType()); - $this->exportSequenceInformation($idXml, $metadata); + $this->exportSequenceInformation($idXml, $property); } } } @@ -487,15 +487,15 @@ private function exportTableOptions(\SimpleXMLElement $parentXml, array $options * Export sequence information (if available/configured) into the current identifier XML node * * @param \SimpleXMLElement $identifierXmlNode - * @param ClassMetadata $metadata + * @param FieldMetadata $metadata * * @return void */ - private function exportSequenceInformation(\SimpleXMLElement $identifierXmlNode, ClassMetadata $metadata) + private function exportSequenceInformation(\SimpleXMLElement $identifierXmlNode, FieldMetadata $metadata) { - $sequenceDefinition = $metadata->generatorDefinition; + $sequenceDefinition = $metadata->getIdentifierGeneratorDefinition(); - if (! ($metadata->generatorType === GeneratorType::SEQUENCE && $sequenceDefinition)) { + if (! ($metadata->getIdentifierGeneratorType() === GeneratorType::SEQUENCE && $sequenceDefinition)) { return; } diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 97b01ad5173..f7e176fbbef 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -338,12 +338,17 @@ public function getSchemaFromMetadata(array $classes) $processedClasses[$class->name] = true; - if ($class->generatorType === GeneratorType::SEQUENCE && $class->name === $class->rootEntityName) { - $definition = $class->generatorDefinition; - $quotedName = $this->platform->quoteIdentifier($definition['sequenceName']); + foreach ($class->getProperties() as $property) { + if (! $property instanceof FieldMetadata + || $property->getIdentifierGeneratorType() !== GeneratorType::SEQUENCE + || $class->name !== $class->rootEntityName) { + continue; + } + + $quotedName = $this->platform->quoteIdentifier($property->getIdentifierGeneratorDefinition()['sequenceName']); if ( ! $schema->hasSequence($quotedName)) { - $schema->createSequence($quotedName, $definition['allocationSize']); + $schema->createSequence($quotedName, $property->getIdentifierGeneratorDefinition()['allocationSize']); } } @@ -493,7 +498,7 @@ private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Tabl $options['customSchemaOptions'] = $fieldOptions; } - if ($classMetadata->generatorType === GeneratorType::IDENTITY && $classMetadata->getIdentifierFieldNames() == [$fieldName]) { + if ($fieldMetadata->getIdentifierGeneratorType() === GeneratorType::IDENTITY && $classMetadata->getIdentifierFieldNames() == [$fieldName]) { $options['autoincrement'] = true; } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 0392f57d85c..ecfd96e2f64 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -554,7 +554,7 @@ public function computeChangeSet(ClassMetadata $class, $entity) continue; } - if (( ! $class->isIdentifier($name) || $class->generatorType !== GeneratorType::IDENTITY) + if (( ! $property->isPrimaryKey() || ($property instanceof FieldMetadata && $property->getIdentifierGeneratorType() !== GeneratorType::IDENTITY)) && (! $class->isVersioned() || $name !== $class->versionProperty->getName())) { $actualData[$name] = $value; } @@ -836,22 +836,24 @@ private function persistNew($class, $entity) $this->listenersInvoker->invoke($class, Events::prePersist, $entity, new LifecycleEventArgs($entity, $this->em), $invoke); } - $idGen = $class->idGenerator; + if (! $class->isIdentifierComposite()) { + $idField = $class->getSingleIdentifierFieldName(); + $property = $class->getProperty($idField); + $idGen = $property->getIdentifierGenerator(); - if (! $idGen->isPostInsertGenerator()) { - $idValue = $idGen->generate($this->em, $entity); + if (! $idGen->isPostInsertGenerator()) { + $idValue = $idGen->generate($this->em, $entity); - if (! $idGen instanceof AssignedGenerator) { - $idField = $class->getSingleIdentifierFieldName(); - $property = $class->getProperty($idField); - $platform = $this->em->getConnection()->getDatabasePlatform(); - $idValue = $property->getType()->convertToPHPValue($idValue, $platform); - $idValue = [$idField => $idValue]; + if (! $idGen instanceof AssignedGenerator) { + $platform = $this->em->getConnection()->getDatabasePlatform(); + $idValue = $property->getType()->convertToPHPValue($idValue, $platform); + $idValue = [$idField => $idValue]; - $class->assignIdentifier($entity, $idValue); - } + $class->assignIdentifier($entity, $idValue); + } - $this->entityIdentifiers[$oid] = $idValue; + $this->entityIdentifiers[$oid] = $idValue; + } } $this->entityStates[$oid] = self::STATE_MANAGED; @@ -903,7 +905,7 @@ public function recomputeSingleEntityChangeSet(ClassMetadata $class, $entity) break; case ($property instanceof FieldMetadata): - if (! $property->isPrimaryKey() || $class->generatorType !== GeneratorType::IDENTITY) { + if (! $property->isPrimaryKey() || $property->getIdentifierGeneratorType() !== GeneratorType::IDENTITY) { $actualData[$name] = $property->getValue($entity); } @@ -1069,10 +1071,12 @@ private function executeDeletions($class) // Entity with this $oid after deletion treated as NEW, even if the $oid // is obtained by a new entity because the old one went out of scope. //$this->entityStates[$oid] = self::STATE_NEW; - if ($class->generatorType !== GeneratorType::NONE) { - $property = $class->getProperty($class->getSingleIdentifierFieldName()); - - $property->setValue($entity, null); + if (! $class->isIdentifierComposite()) { + $identifierProperty = $class->getProperty($class->getSingleIdentifierFieldName()); + if ($identifierProperty->getIdentifierGeneratorType() !== GeneratorType::NONE) { + $property = $class->getProperty($class->getSingleIdentifierFieldName()); + $property->setValue($entity, null); + } } if ($invoke !== ListenersInvoker::INVOKE_NONE) { @@ -1435,7 +1439,7 @@ public function getEntityState($entity, $assume = null) $flatId = $this->identifierFlattener->flattenIdentifier($class, $id); - if ($class->generatorType === GeneratorType::NONE) { + if (count($class->getGeneratedIdentifierProperties()) === 0) { // Check for a version field, if available, to avoid a db lookup. if ($class->isVersioned()) { return $class->versionProperty->getValue($entity) @@ -1456,25 +1460,28 @@ public function getEntityState($entity, $assume = null) return self::STATE_NEW; } - if ( ! $class->idGenerator->isPostInsertGenerator()) { - // if we have a pre insert generator we can't be sure that having an id - // really means that the entity exists. We have to verify this through - // the last resort: a db lookup - - // Last try before db lookup: check the identity map. - if ($this->tryGetById($flatId, $class->rootEntityName)) { + foreach ($class->getGeneratedIdentifierProperties() as $property) { + if ($property->getIdentifierGeneratorType() !== GeneratorType::NONE + && $property->getIdentifierGenerator()->isPostInsertGenerator()) { return self::STATE_DETACHED; } + } - // db lookup - if ($this->getEntityPersister($class->name)->exists($entity)) { - return self::STATE_DETACHED; - } + // if we have a pre insert generator we can't be sure that having an id + // really means that the entity exists. We have to verify this through + // the last resort: a db lookup - return self::STATE_NEW; + // Last try before db lookup: check the identity map. + if ($this->tryGetById($flatId, $class->rootEntityName)) { + return self::STATE_DETACHED; + } + + // db lookup + if ($this->getEntityPersister($class->name)->exists($entity)) { + return self::STATE_DETACHED; } - return self::STATE_DETACHED; + return self::STATE_NEW; } /** @@ -1817,7 +1824,7 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, Asso if ($managedCopy === null) { // If the identifier is ASSIGNED, it is NEW, otherwise an error // since the managed entity was not found. - if ($class->generatorType !== GeneratorType::NONE) { + if (count($class->getGeneratedIdentifierProperties()) !== 0) { throw EntityNotFoundException::fromClassNameAndIdentifier( $class->getName(), $this->identifierFlattener->flattenIdentifier($class, $id) diff --git a/tests/Doctrine/Tests/Mocks/ClassMetadataMock.php b/tests/Doctrine/Tests/Mocks/ClassMetadataMock.php index d1703539a81..dc661237cf7 100644 --- a/tests/Doctrine/Tests/Mocks/ClassMetadataMock.php +++ b/tests/Doctrine/Tests/Mocks/ClassMetadataMock.php @@ -10,12 +10,4 @@ class ClassMetadataMock extends ClassMetadata { /* Mock API */ - - /** - * {@inheritdoc} - */ - public function setIdGeneratorType($type) - { - $this->generatorType = $type; - } } diff --git a/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php b/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php index aa6911f7b1d..24826cf97be 100644 --- a/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php +++ b/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php @@ -56,7 +56,8 @@ public function addInsert($entity) { $this->inserts[] = $entity; - if ($this->mockIdGeneratorType === GeneratorType::IDENTITY || $this->class->generatorType === GeneratorType::IDENTITY) { + if ($this->mockIdGeneratorType === GeneratorType::IDENTITY + || $this->class->getProperty($this->class->getSingleIdentifierFieldName())->getIdentifierGeneratorType() === GeneratorType::IDENTITY) { $id = $this->identityColumnValueCounter++; $this->postInsertIds[] = [ diff --git a/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php b/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php index 028fe96bbdf..60a93ca2797 100644 --- a/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php +++ b/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php @@ -50,6 +50,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -57,8 +58,6 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('string')); $metadata->addProperty($fieldMetadata); - - $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } diff --git a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php index e6265dd80df..3f0265e3846 100644 --- a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php +++ b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php @@ -88,6 +88,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('user_id'); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -106,7 +107,5 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association->setTargetEntity('DDC3579Group'); $metadata->addProperty($association); - - $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } } diff --git a/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php b/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php index 6342cd23c46..a1d9fdeb2a9 100644 --- a/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php +++ b/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php @@ -38,6 +38,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('id'); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -46,7 +47,5 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association->setTargetEntity('DDC5934Member'); $metadata->addProperty($association); - - $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } } diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php index 809fb5b217c..f49d6c4a2b7 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php @@ -26,6 +26,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -37,6 +38,5 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $metadata->isMappedSuperclass = true; $metadata->setCustomRepositoryClass(DDC869PaymentRepository::class); - $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } } diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php b/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php index cf040ce3636..8f17112307f 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php @@ -20,10 +20,9 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); - - $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } } diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php b/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php index 0be4ecd7354..71b8c0f3c6f 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php @@ -18,9 +18,9 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) { $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); $metadata->isMappedSuperclass = true; - $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php index e4605281d69..da71d2a0e31 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php @@ -115,6 +115,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('user_id'); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -169,7 +170,5 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association->setCascade(['persist', 'merge', 'detach']); $metadata->addProperty($association); - - $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php index 272273e6d95..24a87c8f7cb 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php @@ -22,7 +22,7 @@ public function testPostgresMetadataSequenceIncrementedBy10() { $address = $this->em->getClassMetadata(Models\CMS\CmsAddress::class); - self::assertEquals(1, $address->generatorDefinition['allocationSize']); + self::assertEquals(1, $address->getProperty('id')->getIdentifierGeneratorDefinition['allocationSize']); } public function testGetCreateSchemaSql() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php index 12a6a05efc9..31c13ec4b55 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php @@ -31,6 +31,8 @@ protected function setUp() public function testTicket() { + $this->fail('FIXME'); + $parentMetadata = $this->em->getClassMetadata(DDC2415ParentEntity::class); $childMetadata = $this->em->getClassMetadata(DDC2415ChildEntity::class); @@ -66,18 +68,16 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); - - $metadata->addProperty($fieldMetadata); - - $metadata->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); - - $metadata->setGeneratorDefinition( + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); + $fieldMetadata->setIdentifierGeneratorDefinition( [ 'class' => DDC2415Generator::class, 'arguments' => [], ] ); + $metadata->addProperty($fieldMetadata); + $metadata->isMappedSuperclass = true; } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php index f8aa76238e6..beb55967c01 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php @@ -20,7 +20,7 @@ protected function setUp() $metadata = $this->em->getClassMetadata(DDC3634Entity::class); - if ( ! $metadata->idGenerator->isPostInsertGenerator()) { + if ( ! $metadata->getProperty('id')->getIdentifierGenerator()->isPostInsertGenerator()) { $this->markTestSkipped('Need a post-insert ID generator in order to make this test work correctly'); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index ce872ae92a7..794789d87db 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -177,13 +177,17 @@ public function testEntityOptions($class) */ public function testEntitySequence($class) { - self::assertInternalType('array', $class->generatorDefinition, 'No Sequence Definition set on this driver.'); + self::assertInternalType( + 'array', + $class->getProperty('id')->getIdentifierGeneratorDefinition(), + 'No Sequence Definition set on this driver.' + ); self::assertEquals( [ 'sequenceName' => 'tablename_seq', 'allocationSize' => 100, ], - $class->generatorDefinition + $class->getProperty('id')->getIdentifierGeneratorDefinition() ); } @@ -191,13 +195,13 @@ public function testEntityCustomGenerator() { $class = $this->createClassMetadata(Animal::class); - self::assertEquals(Mapping\GeneratorType::CUSTOM, $class->generatorType, "Generator Type"); + self::assertEquals(Mapping\GeneratorType::CUSTOM, $class->getProperty('id')->getIdentifierGeneratorType(), "Generator Type"); self::assertEquals( [ 'class' => 'stdClass', 'arguments' => [], ], - $class->generatorDefinition, + $class->getProperty('id')->getIdentifierGeneratorDefinition(), "Generator Definition" ); } @@ -317,7 +321,7 @@ public function testIdentifier($class) self::assertEquals('integer', $property->getTypeName()); self::assertEquals(['id'], $class->identifier); - self::assertEquals(Mapping\GeneratorType::AUTO, $class->generatorType, "ID-Generator is not GeneratorType::AUTO"); + self::assertEquals(Mapping\GeneratorType::AUTO, $property->getIdentifierGeneratorType(), "ID-Generator is not GeneratorType::AUTO"); return $class; } @@ -555,7 +559,7 @@ public function testDefaultFieldType() self::assertEquals('id', $idProperty->getColumnName()); self::assertEquals('name', $nameProperty->getColumnName()); - self::assertEquals(Mapping\GeneratorType::NONE, $class->generatorType); + self::assertEquals(Mapping\GeneratorType::NONE, $idProperty->getIdentifierGeneratorType()); } /** @@ -1286,13 +1290,6 @@ public static function loadMetadata(ClassMetadata $metadata) $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); $metadata->addLifecycleCallback('doStuffOnPostPersist', 'postPersist'); - $metadata->setGeneratorDefinition( - [ - 'sequenceName' => 'tablename_seq', - 'allocationSize' => 100, - ] - ); - $metadata->addNamedQuery( [ 'name' => 'all', @@ -1304,6 +1301,13 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); $fieldMetadata->setOptions(['foo' => 'bar', 'unsigned' => false]); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); + $fieldMetadata->setIdentifierGeneratorDefinition( + [ + 'sequenceName' => 'tablename_seq', + 'allocationSize' => 100, + ] + ); $metadata->addProperty($fieldMetadata); @@ -1337,7 +1341,6 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $metadata->addProperty($fieldMetadata); - $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $joinColumns = []; @@ -1415,8 +1418,8 @@ abstract class Animal public static function loadMetadata(ClassMetadata $metadata) { - $metadata->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); - $metadata->setGeneratorDefinition( + $metadata->getProperty('id')->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); + $metadata->getProperty('id')->setIdentifierGeneratorDefinition( [ 'class' => 'stdClass', 'arguments' => [], @@ -1491,6 +1494,7 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnDefinition('INT unsigned NOT NULL'); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -1500,8 +1504,6 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setColumnDefinition('VARCHAR(255) NOT NULL'); $metadata->addProperty($fieldMetadata); - - $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } @@ -1527,6 +1529,7 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -1538,8 +1541,6 @@ public static function loadMetadata(ClassMetadata $metadata) $discrColumn->setColumnDefinition("ENUM('ONE','TWO')"); $metadata->setDiscriminatorColumn($discrColumn); - - $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } @@ -1609,10 +1610,10 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); - $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } @@ -1650,10 +1651,10 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); - $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index 407f6a7f879..6a2faf3258a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -149,10 +149,10 @@ public function testGeneratedValueFromMappedSuperclass() /* @var ClassMetadata $class */ $class = $this->cmf->getMetadataFor(SuperclassEntity::class); - self::assertInstanceOf(SequenceGenerator::class, $class->idGenerator); + self::assertInstanceOf(SequenceGenerator::class, $class->getProperty('id')->getIdentifierGenerator()); self::assertEquals( ['allocationSize' => 1, 'sequenceName' => 'foo'], - $class->generatorDefinition + $class->getProperty('id')->getIdentifierGeneratorDefinition() ); } @@ -165,10 +165,10 @@ public function testSequenceDefinitionInHierarchyWithSandwichMappedSuperclass() /* @var ClassMetadata $class */ $class = $this->cmf->getMetadataFor(HierarchyD::class); - self::assertInstanceOf(SequenceGenerator::class, $class->idGenerator); + self::assertInstanceOf(SequenceGenerator::class, $class->getProperty('id')->getIdentifierGenerator()); self::assertEquals( ['allocationSize' => 1, 'sequenceName' => 'foo'], - $class->generatorDefinition + $class->getProperty('id')->getIdentifierGeneratorDefinition() ); } @@ -181,10 +181,10 @@ public function testMultipleMappedSuperclasses() /* @var ClassMetadata $class */ $class = $this->cmf->getMetadataFor(MediumSuperclassEntity::class); - self::assertInstanceOf(SequenceGenerator::class, $class->idGenerator); + self::assertInstanceOf(SequenceGenerator::class, $class->getProperty('id')->getIdentifierGenerator()); self::assertEquals( ['allocationSize' => 1, 'sequenceName' => 'foo'], - $class->generatorDefinition + $class->getProperty('id')->getIdentifierGeneratorDefinition() ); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index ea92ce8c838..e998ff30557 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -54,7 +54,7 @@ public function testGetMetadataForSingleClass() // Prechecks self::assertEquals([], $cm1->parentClasses); self::assertEquals(Mapping\InheritanceType::NONE, $cm1->inheritanceType); - self::assertEquals(Mapping\GeneratorType::AUTO, $cm1->generatorType); + self::assertEquals(Mapping\GeneratorType::AUTO, $cm1->getProperty('id')->getIdentifierGgeneratorType()); self::assertTrue($cm1->hasField('name')); self::assertCount(4, $cm1->getProperties()); // 2 fields + 2 associations self::assertEquals('group', $cm1->table->getName()); @@ -72,12 +72,11 @@ public function testGetMetadataFor_ReturnsLoadedCustomIdGenerator() { $cm1 = $this->createValidClassMetadata(); - $cm1->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); - - $cm1->generatorDefinition = [ + $cm1->getProperty('id')->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); + $cm1->getProperty('id')->setIdentifierGeneratorDefinition([ 'class' => CustomIdGenerator::class, 'arguments' => [], - ]; + ]); $cmf = $this->createTestFactory(); @@ -85,20 +84,19 @@ public function testGetMetadataFor_ReturnsLoadedCustomIdGenerator() $actual = $cmf->getMetadataFor($cm1->name); - self::assertEquals(Mapping\GeneratorType::CUSTOM, $actual->generatorType); - self::assertInstanceOf(CustomIdGenerator::class, $actual->idGenerator); + self::assertEquals(Mapping\GeneratorType::CUSTOM, $actual->getProperty('id')->getIdentifierGeneratorType()); + self::assertInstanceOf(CustomIdGenerator::class, $actual->getProperty('id')->getIdentifierGenerator()); } public function testGetMetadataFor_ThrowsExceptionOnUnknownCustomGeneratorClass() { $cm1 = $this->createValidClassMetadata(); - $cm1->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); - - $cm1->generatorDefinition = [ + $cm1->getProperty('id')->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); + $cm1->getProperty('id')->setIdentifierGeneratorDefinition([ 'class' => 'NotExistingGenerator', 'arguments' => [], - ]; + ]); $cmf = $this->createTestFactory(); @@ -112,7 +110,7 @@ public function testGetMetadataFor_ThrowsExceptionOnUnknownCustomGeneratorClass( public function testGetMetadataFor_ThrowsExceptionOnMissingCustomGeneratorDefinition() { $cm1 = $this->createValidClassMetadata(); - $cm1->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); + $cm1->getProperty('id')->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); $cmf = $this->createTestFactory(); $cmf->setMetadataForClass($cm1->name, $cm1); $this->expectException(ORMException::class); @@ -294,6 +292,7 @@ protected function createValidClassMetadata() $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $cm1->addProperty($fieldMetadata); @@ -329,9 +328,6 @@ protected function createValidClassMetadata() $cm1->addProperty($association); - // and an id generator type - $cm1->setIdGeneratorType(Mapping\GeneratorType::AUTO); - return $cm1; } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index ccef56c4a7a..c7caa54eab6 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -1412,6 +1412,8 @@ public function testManyToManySelfReferencingNamingStrategyDefaults() */ public function testSetSequenceGeneratorThrowsExceptionWhenSequenceNameIsMissing() { + $this->fail('FIXME'); + $cm = new ClassMetadata(CMS\CmsUser::class); $cm->setIdGeneratorType(Mapping\GeneratorType::SEQUENCE); @@ -1430,9 +1432,12 @@ public function testQuotedSequenceName() $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->setGeneratorDefinition(['sequenceName' => 'foo', 'allocationSize' => 1]); + $cm->getProperty('id')->setIdentifierGeneratorDefinition(['sequenceName' => 'foo', 'allocationSize' => 1]); - self::assertEquals(['sequenceName' => 'foo', 'allocationSize' => 1], $cm->generatorDefinition); + self::assertEquals( + ['sequenceName' => 'foo', 'allocationSize' => 1], + $cm->getProperty('id')->getIdentifierGeneratorDefinition() + ); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index f71bf6e2357..782a62a0a1a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -14,7 +14,6 @@ $metadata->setTable($tableMetadata); $metadata->setInheritanceType(Mapping\InheritanceType::NONE); $metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); -$metadata->setIdGeneratorType(Mapping\GeneratorType::IDENTITY); $metadata->setCache( new Mapping\CacheMetadata( Mapping\CacheUsage::READ_ONLY, @@ -25,6 +24,7 @@ $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::IDENTITY); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php index 017681606e5..2e589951f1c 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php @@ -8,6 +8,7 @@ $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -15,5 +16,3 @@ $fieldMetadata->setType(Type::getType('string')); $metadata->addProperty($fieldMetadata); - -$metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php index f4ad05fc8e9..9d1f0bf634f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php @@ -10,11 +10,11 @@ /* @var $metadata ClassMetadata */ $metadata->setTable($tableMetadata); -$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php index 5e5ab11b90d..736a9ca53a1 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php @@ -10,10 +10,10 @@ /* @var $metadata ClassMetadata */ $metadata->setTable($tableMetadata); -$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php index 2882f3e2655..c5e8992ec8a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php @@ -9,6 +9,7 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('user_id'); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -26,5 +27,3 @@ $association->setTargetEntity('DDC3579Group'); $metadata->addProperty($association); - -$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php index 0f6c27960f5..93dc13c82c5 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php @@ -9,6 +9,7 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('id'); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -17,5 +18,3 @@ $association->setTargetEntity('DDC5934Member'); $metadata->addProperty($association); - -$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php index 90342944a1e..83e1060a378 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php @@ -11,6 +11,7 @@ $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -20,4 +21,3 @@ $metadata->addProperty($fieldMetadata); $metadata->setCustomRepositoryClass(DDC869PaymentRepository::class); -$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php index 830afd69118..d6e066f37e8 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php @@ -9,8 +9,8 @@ $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); $metadata->setCustomRepositoryClass(DDC889SuperClass::class); -$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php index 04db2e314ed..fc153639bd7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php @@ -10,6 +10,7 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('user_id'); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -64,5 +65,3 @@ $association->setCascade(['persist','merge','detach']); $metadata->addProperty($association); - -$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php index 9376e238300..3145abdbd8b 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php @@ -31,14 +31,12 @@ $fieldMetadata->setPrimaryKey(true); $fieldMetadata->setNullable(false); $fieldMetadata->setUnique(false); - -$metadata->addProperty($fieldMetadata); - -$metadata->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); - -$metadata->setGeneratorDefinition( +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); +$fieldMetadata->setIdentifierGeneratorDefinition( [ 'class' => 'stdClass', 'arguments' => [], ] ); + +$metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php index 19c20284962..2ca7e68cbf2 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php @@ -9,6 +9,7 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnDefinition('INT unsigned NOT NULL'); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -17,5 +18,3 @@ $fieldMetadata->setColumnDefinition('VARCHAR(255) NOT NULL'); $metadata->addProperty($fieldMetadata); - -$metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php index cb80eaa79e8..9ab3d36a15a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php @@ -8,6 +8,7 @@ $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -18,5 +19,3 @@ $discrColumn->setColumnDefinition("ENUM('ONE','TWO')"); $metadata->setDiscriminatorColumn($discrColumn); - -$metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index 0194970cb35..32ba2e66c39 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -55,18 +55,18 @@ ] ); -$metadata->setGeneratorDefinition( - [ - 'sequenceName' => 'tablename_seq', - 'allocationSize' => 100, - ] -); - $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); $fieldMetadata->setOptions(['foo' => 'bar', 'unsigned' => false]); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); +$fieldMetadata->setIdentifierGeneratorDefinition( + [ + 'sequenceName' => 'tablename_seq', + 'allocationSize' => 100, + ] +); $metadata->addProperty($fieldMetadata); @@ -101,8 +101,6 @@ $metadata->addProperty($versionFieldMetadata); -$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); - $joinColumns = []; $joinColumn = new Mapping\JoinColumnMetadata(); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index f628685de8f..c382e06c7b0 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -116,6 +116,7 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $fieldMetadata->setPrimaryKey(true); $fieldMetadata->setNullable(false); $fieldMetadata->setUnique(false); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -162,7 +163,6 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $metadata->addLifecycleCallback('loading', 'postLoad'); $metadata->addLifecycleCallback('willBeRemoved', 'preRemove'); - $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); foreach ($embeddedClasses as $fieldName => $embeddedClass) { $metadata->mapEmbedded( @@ -193,6 +193,7 @@ private function generateEntityTypeFixture(array $field) $fieldMetadata->setPrimaryKey(true); $fieldMetadata->setNullable(false); $fieldMetadata->setUnique(false); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -203,8 +204,6 @@ private function generateEntityTypeFixture(array $field) $metadata->addProperty($fieldMetadata); - $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); - $this->generator->writeEntityClass($metadata, $this->tmpDir); return $metadata; @@ -559,7 +558,7 @@ public function testLoadMetadata() self::assertEquals($cm->getTableName(), $metadata->getTableName()); self::assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); self::assertEquals($cm->identifier, $metadata->identifier); - self::assertEquals($cm->idGenerator, $metadata->idGenerator); + self::assertEquals($cm->getProperty('id')->getIdentifierGenerator(), $metadata->getProperty('id')->getIdentifierGenerator()); self::assertEquals($cm->customRepositoryClassName, $metadata->customRepositoryClassName); // self::assertEquals($cm->embeddedClasses, $metadata->embeddedClasses); // self::assertEquals($cm->isEmbeddedClass, $metadata->isEmbeddedClass); @@ -595,7 +594,7 @@ public function testLoadPrefixedMetadata() self::assertEquals($cm->getTableName(), $metadata->getTableName()); self::assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); self::assertEquals($cm->identifier, $metadata->identifier); - self::assertEquals($cm->idGenerator, $metadata->idGenerator); + self::assertEquals($cm->getProperty('id')->getIdentifierGenerator(), $metadata->getProperty('id')->getIdentifierGenerator()); self::assertEquals($cm->customRepositoryClassName, $metadata->customRepositoryClassName); // $isbn = $this->newInstance($embeddedMetadata); @@ -657,18 +656,16 @@ public function testGenerateEntityWithSequenceGenerator() $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); - - $metadata->addProperty($fieldMetadata); - - $metadata->setIdGeneratorType(Mapping\GeneratorType::SEQUENCE); - - $metadata->setGeneratorDefinition( + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::SEQUENCE); + $fieldMetadata->setIdentifierGeneratorDefinition( [ 'sequenceName' => 'DDC1784_ID_SEQ', 'allocationSize' => 1, ] ); + $metadata->addProperty($fieldMetadata); + $this->generator->writeEntityClass($metadata, $this->tmpDir); $filename = $this->tmpDir . DIRECTORY_SEPARATOR @@ -697,11 +694,10 @@ public function testGenerateEntityWithMultipleInverseJoinColumns() $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::SEQUENCE); $metadata->addProperty($fieldMetadata); - $metadata->setIdGeneratorType(Mapping\GeneratorType::SEQUENCE); - $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('unidade_centro_custo'); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index 3740b7f1870..d73694829cd 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -177,7 +177,7 @@ public function testIdentifierIsExported($class) self::assertTrue($property->isPrimaryKey()); self::assertEquals(['id'], $class->identifier); - self::assertEquals(GeneratorType::IDENTITY, $class->generatorType, "Generator Type wrong"); + self::assertEquals(GeneratorType::IDENTITY, $class->getProperty('id')->getIdentifierGeneratorType(), "Generator Type wrong"); return $class; } diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php index a0ea1e7e41f..34fbecf3c32 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php @@ -50,18 +50,16 @@ public function testSequenceGenerator() { $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); - - $metadata->addProperty($fieldMetadata); - - $metadata->setIdGeneratorType(Mapping\GeneratorType::SEQUENCE); - - $metadata->setGeneratorDefinition( + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::SEQUENCE); + $fieldMetadata->setIdentifierGeneratorDefinition( [ 'sequenceName' => 'seq_entity_test_id', 'allocationSize' => 5, ] ); + $metadata->addProperty($fieldMetadata); + $expectedFileContent = <<<'XML' addOption('foo', ['bar' => 'baz']); $metadata->setTable($tableMetadata); -$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $metadata->setInheritanceType(Mapping\InheritanceType::NONE); $metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); @@ -23,6 +22,7 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); From 9e0bbb91c9434a575b790e33bcebcbe9b6ca25ff Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Thu, 13 Jul 2017 22:28:29 -0400 Subject: [PATCH 159/275] Revert "[3.0] Moved IdentifierGenerator to Property." --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 129 ++++++++++++++---- .../ORM/Mapping/ClassMetadataFactory.php | 116 ++++++++++------ .../ORM/Mapping/Driver/AnnotationDriver.php | 6 +- .../ORM/Mapping/Driver/DatabaseDriver.php | 2 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 7 +- .../Exporter/ClassMetadataExporter.php | 5 + .../Exporter/FieldMetadataExporter.php | 14 +- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 26 +--- .../Entity/BasicEntityPersister.php | 11 +- .../Entity/JoinedSubclassPersister.php | 4 +- .../Command/MappingDescribeCommand.php | 7 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 37 +++-- .../ORM/Tools/Export/Driver/PhpExporter.php | 10 +- .../ORM/Tools/Export/Driver/XmlExporter.php | 14 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 15 +- lib/Doctrine/ORM/UnitOfWork.php | 73 +++++----- .../Tests/Mocks/ClassMetadataMock.php | 8 ++ .../Tests/Mocks/EntityPersisterMock.php | 3 +- .../DDC1476EntityWithDefaultFieldType.php | 3 +- .../Tests/Models/DDC3579/DDC3579User.php | 3 +- .../Models/DDC5934/DDC5934BaseContract.php | 3 +- .../Tests/Models/DDC869/DDC869Payment.php | 2 +- .../Tests/Models/DDC889/DDC889Class.php | 3 +- .../Tests/Models/DDC889/DDC889SuperClass.php | 2 +- .../Tests/Models/DDC964/DDC964User.php | 3 +- .../SchemaTool/PostgreSqlSchemaToolTest.php | 2 +- .../ORM/Functional/Ticket/DDC2415Test.php | 12 +- .../ORM/Functional/Ticket/DDC3634Test.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 45 +++--- .../Mapping/BasicInheritanceMappingTest.php | 12 +- .../ORM/Mapping/ClassMetadataFactoryTest.php | 26 ++-- .../Tests/ORM/Mapping/ClassMetadataTest.php | 9 +- .../php/Doctrine.Tests.Models.Cache.City.php | 2 +- ...1476.DDC1476EntityWithDefaultFieldType.php | 3 +- ....Models.DDC2825.ExplicitSchemaAndTable.php | 2 +- ...dels.DDC2825.SchemaAndTableInTableName.php | 2 +- ...trine.Tests.Models.DDC3579.DDC3579User.php | 3 +- ...sts.Models.DDC5934.DDC5934BaseContract.php | 3 +- ...rine.Tests.Models.DDC869.DDC869Payment.php | 2 +- ...e.Tests.Models.DDC889.DDC889SuperClass.php | 2 +- ...octrine.Tests.Models.DDC964.DDC964User.php | 3 +- .../php/Doctrine.Tests.ORM.Mapping.Animal.php | 10 +- ...ctrine.Tests.ORM.Mapping.DDC1170Entity.php | 3 +- ...octrine.Tests.ORM.Mapping.DDC807Entity.php | 3 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 16 ++- .../Tests/ORM/Tools/EntityGeneratorTest.php | 22 +-- .../AbstractClassMetadataExporterTest.php | 2 +- .../Export/XmlClassMetadataExporterTest.php | 10 +- .../Doctrine.Tests.ORM.Tools.Export.User.php | 2 +- 49 files changed, 396 insertions(+), 308 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 4ef390d95df..1983d9d638d 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -199,6 +199,13 @@ class ClassMetadata implements TableOwner, \Doctrine\Common\Persistence\Mapping\ */ public $inheritanceType = InheritanceType::NONE; + /** + * READ-ONLY: The Id generator type used by the class. + * + * @var string + */ + public $generatorType = GeneratorType::NONE; + /** * READ-ONLY: The policy used for change-tracking on entities of this class. * @@ -206,6 +213,38 @@ class ClassMetadata implements TableOwner, \Doctrine\Common\Persistence\Mapping\ */ public $changeTrackingPolicy = ChangeTrackingPolicy::DEFERRED_IMPLICIT; + /** + * READ-ONLY: The definition of the identity generator of this class. + * In case of SEQUENCE generation strategy, the definition has the following structure: + * + * array( + * 'sequenceName' => 'name', + * 'allocationSize' => 20, + * ) + * + * + * In case of CUSTOM generation strategy, the definition has the following structure: + * + * array( + * 'class' => 'ClassName', + * ) + * + * + * @var array + * + * @todo Remove! + */ + public $generatorDefinition; + + /** + * READ-ONLY: The ID generator used for generating IDs for this class. + * + * @var \Doctrine\ORM\Sequencing\Generator + * + * @todo Remove! + */ + public $idGenerator; + /** * READ-ONLY: The discriminator value of this class. * @@ -411,6 +450,7 @@ public function __sleep() 'name', 'table', 'rootEntityName', + 'idGenerator', //TODO: Does not really need to be serialized. Could be moved to runtime. ]); // The rest of the metadata is only serialized if necessary. @@ -431,6 +471,14 @@ public function __sleep() $serialized[] = 'subClasses'; } + if ($this->generatorType !== GeneratorType::NONE) { + $serialized[] = 'generatorType'; + } + + if ($this->generatorDefinition) { + $serialized[] = "generatorDefinition"; + } + if ($this->isMappedSuperclass) { $serialized[] = 'isMappedSuperclass'; } @@ -565,7 +613,7 @@ public function validateIdentifier() throw MappingException::identifierRequired($this->name); } - if ($this->isIdentifierComposite() && count($this->getGeneratedIdentifierProperties()) !== 0) { + if ($this->generatorType !== GeneratorType::NONE && $this->isIdentifierComposite()) { throw MappingException::compositeKeyAssignedIdGeneratorRequired($this->name); } } @@ -1241,6 +1289,18 @@ public function getIdentifierColumns(EntityManagerInterface $em) return $columns; } + /** + * Sets the type of Id generator to use for the mapped class. + * + * @param int $generatorType + * + * @return void + */ + public function setIdGeneratorType($generatorType) + { + $this->generatorType = $generatorType; + } + /** * Gets the name of the primary table. * @@ -1573,28 +1633,6 @@ public function addInheritedProperty(Property $property) } } - /** - * @return array - */ - public function getIdentifierProperties(): array - { - return array_filter($this->properties, function (Property $property) : bool { - return $property instanceof FieldMetadata && $property->isPrimaryKey(); - }); - } - - /** - * @return array - */ - public function getGeneratedIdentifierProperties(): array - { - return array_filter($this->properties, function (Property $property) : bool { - return $property instanceof FieldMetadata - && $property->isPrimaryKey() - && $property->getIdentifierGeneratorType() !== GeneratorType::NONE; - }); - } - /** * INTERNAL: * Adds a named query to this class. @@ -1946,6 +1984,51 @@ public function hasSqlResultSetMapping($name) return isset($this->sqlResultSetMappings[$name]); } + /** + * Sets the ID generator used to generate IDs for instances of this class. + * + * @param \Doctrine\ORM\Sequencing\Generator $generator + * + * @return void + */ + public function setIdGenerator($generator) + { + $this->idGenerator = $generator; + } + + /** + * Sets the generator definition for this class. + * For sequence definition, it must have the following structure: + * + * + * array( + * 'sequenceName' => 'name', + * 'allocationSize' => 20, + * ) + * + * + * For custom definition, it must have the following structure: + * + * + * array( + * 'class' => 'Path\To\ClassName', + * 'arguments' => [], + * ) + * + * + * @param array $definition + * + * @return void + */ + public function setGeneratorDefinition(array $definition) + { + if ($this->generatorType === GeneratorType::SEQUENCE && ! isset($definition['sequenceName'])) { + throw MappingException::missingSequenceName($this->name); + } + + $this->generatorDefinition = $definition; + } + /** * Marks this class as read only, no change tracking is applied to it. * diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index ce33fe1aa50..0f17bd172ff 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -132,6 +132,7 @@ protected function doLoadMetadata( $this->addInheritedProperties($class, $parent); $this->addInheritedEmbeddedClasses($class, $parent); + $this->inheritIdGeneratorMapping($class, $parent); $class->setInheritanceType($parent->inheritanceType); $class->setIdentifier($parent->identifier); @@ -157,7 +158,12 @@ protected function doLoadMetadata( throw MappingException::reflectionFailure($class->getName(), $e); } - $this->completeIdentifierGeneratorMappings($class); + // If this class has a parent the id generator strategy is inherited. + // However this is only true if the hierarchy of parents contains the root entity, + // if it consists of mapped superclasses these don't necessarily include the id field. + if (! ($parent && $rootEntityFound)) { + $this->completeIdGeneratorMapping($class); + } /*if ( ! $class->isMappedSuperclass) { foreach ($class->embeddedClasses as $property => $embeddableClass) { @@ -636,84 +642,84 @@ private function addInheritedSqlResultSetMappings(ClassMetadata $subClass, Class * * @throws ORMException */ - private function completeIdentifierGeneratorMappings(ClassMetadata $class) + private function completeIdGeneratorMapping(ClassMetadata $class) { - foreach ($class->getProperties() as $property) { - if ( ! $property instanceof FieldMetadata) { - continue; - } - - $this->completeFieldIdentifierGeneratorMapping($property); - } - } + $idGenType = $class->generatorType; + $platform = $this->getTargetPlatform(); + + if ($idGenType === GeneratorType::AUTO) { + $idGenType = $platform->prefersSequences() + ? GeneratorType::SEQUENCE + : ($platform->prefersIdentityColumns() + ? GeneratorType::IDENTITY + : GeneratorType::TABLE + ); - private function completeFieldIdentifierGeneratorMapping(FieldMetadata $field) - { - $platform = $this->getTargetPlatform(); - $class = $field->getDeclaringClass();; - - if ($field->getIdentifierGeneratorType() === GeneratorType::AUTO) { - $field->setIdentifierGeneratorType( - $platform->prefersSequences() - ? GeneratorType::SEQUENCE - : ($platform->prefersIdentityColumns() - ? GeneratorType::IDENTITY - : GeneratorType::TABLE - ) - ); + $class->setIdGeneratorType($idGenType); } // Create & assign an appropriate ID generator instance - switch ($field->getIdentifierGeneratorType()) { + switch ($class->generatorType) { case GeneratorType::IDENTITY: $sequenceName = null; + $property = $class->identifier + ? $class->getProperty($class->getSingleIdentifierFieldName()) + : null + ; // Platforms that do not have native IDENTITY support need a sequence to emulate this behaviour. - if ($platform->usesSequenceEmulatedIdentityColumns()) { + if ($property && $platform->usesSequenceEmulatedIdentityColumns()) { $sequencePrefix = $platform->getSequencePrefix($class->getTableName(), $class->getSchemaName()); - $idSequenceName = $platform->getIdentitySequenceName($sequencePrefix, $field->getColumnName()); + $idSequenceName = $platform->getIdentitySequenceName($sequencePrefix, $property->getColumnName()); $sequenceName = $platform->quoteIdentifier($platform->fixSchemaElementName($idSequenceName)); } - $generator = $field->getTypeName() === 'bigint' + $generator = ($property && $property->getTypeName() === 'bigint') ? new Sequencing\BigIntegerIdentityGenerator($sequenceName) : new Sequencing\IdentityGenerator($sequenceName) ; - - $field->setIdentifierGenerator($generator); + $class->setIdGenerator($generator); break; case GeneratorType::SEQUENCE: // If there is no sequence definition yet, create a default definition - if ( ! $field->getIdentifierGeneratorDefinition()) { + $definition = $class->generatorDefinition; + + if ( ! $definition) { // @todo guilhermeblanco Move sequence generation to DBAL + $property = $class->identifier + ? $class->getProperty($class->getSingleIdentifierFieldName()) + : null + ; - $sequencePrefix = $platform->getSequencePrefix($class->getTableName(), $class->getSchemaName()); - $idSequenceName = sprintf('%s_%s_seq', $sequencePrefix, $field->getColumnName()); - $sequenceName = $platform->fixSchemaElementName($idSequenceName); + $sequencePrefix = $platform->getSequencePrefix($class->getTableName(), $class->getSchemaName()); + $idSequenceName = sprintf('%s_%s_seq', $sequencePrefix, $property->getColumnName()); + $sequenceName = $platform->fixSchemaElementName($idSequenceName); - $field->setIdentifierGeneratorDefinition([ + $definition = [ 'sequenceName' => $sequenceName, 'allocationSize' => 1, - ]); + ]; + + $class->setGeneratorDefinition($definition); } $sequenceGenerator = new Sequencing\SequenceGenerator( - $platform->quoteIdentifier($field->getIdentifierGeneratorDefinition()['sequenceName']), - $field->getIdentifierGeneratorDefinition()['allocationSize'] + $platform->quoteIdentifier($definition['sequenceName']), + $definition['allocationSize'] ); - $field->setIdentifierGenerator($sequenceGenerator); + $class->setIdGenerator($sequenceGenerator); break; case GeneratorType::NONE: - $field->setIdentifierGenerator(new Sequencing\AssignedGenerator()); + $class->setIdGenerator(new Sequencing\AssignedGenerator()); break; case GeneratorType::UUID: - $field->setIdentifierGenerator(new Sequencing\UuidGenerator()); + $class->setIdGenerator(new Sequencing\UuidGenerator()); break; case GeneratorType::TABLE: @@ -721,16 +727,38 @@ private function completeFieldIdentifierGeneratorMapping(FieldMetadata $field) break; case GeneratorType::CUSTOM: - $definition = $field->getIdentifierGeneratorDefinition(); + $definition = $class->generatorDefinition; + if ( ! class_exists($definition['class'])) { throw new ORMException(sprintf('Cannot instantiate custom generator : %s', var_export($definition, true))); //$definition['class'])); } - $field->setIdentifierGenerator(new $definition['class']); + $class->setIdGenerator(new $definition['class']); break; default: - throw new ORMException("Unknown generator type: " . $field->getIdentifierGeneratorType()); + throw new ORMException("Unknown generator type: " . $class->generatorType); + } + } + + /** + * Inherits the ID generator mapping from a parent class. + * + * @param ClassMetadata $class + * @param ClassMetadata $parent + */ + private function inheritIdGeneratorMapping(ClassMetadata $class, ClassMetadata $parent) + { + if ($parent->generatorType) { + $class->setIdGeneratorType($parent->generatorType); + } + + if ($parent->generatorDefinition) { + $class->generatorDefinition = $parent->generatorDefinition; + } + + if ($parent->idGenerator) { + $class->setIdGenerator($parent->idGenerator); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 6cfd3e331a5..96ebc17fcf1 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -557,7 +557,7 @@ private function convertReflectionPropertyToFieldMetadata( $strategy = strtoupper($generatedValueAnnot->strategy); $idGeneratorType = constant(sprintf('%s::%s', Mapping\GeneratorType::class, $strategy)); - $fieldMetadata->setIdentifierGeneratorType($idGeneratorType); + $metadata->setIdGeneratorType($idGeneratorType); } // Check for CustomGenerator/SequenceGenerator/TableGenerator definition @@ -565,7 +565,7 @@ private function convertReflectionPropertyToFieldMetadata( case isset($propertyAnnotations[Annotation\SequenceGenerator::class]): $seqGeneratorAnnot = $propertyAnnotations[Annotation\SequenceGenerator::class]; - $fieldMetadata->setIdentifierGeneratorDefinition([ + $metadata->setGeneratorDefinition([ 'sequenceName' => $seqGeneratorAnnot->sequenceName, 'allocationSize' => $seqGeneratorAnnot->allocationSize, ]); @@ -575,7 +575,7 @@ private function convertReflectionPropertyToFieldMetadata( case isset($propertyAnnotations[Annotation\CustomIdGenerator::class]): $customGeneratorAnnot = $propertyAnnotations[Annotation\CustomIdGenerator::class]; - $fieldMetadata->setIdentifierGeneratorDefinition([ + $metadata->setGeneratorDefinition([ 'class' => $customGeneratorAnnot->class, 'arguments' => $customGeneratorAnnot->arguments, ]); diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index a2146cfc467..8750c053634 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -383,7 +383,7 @@ private function buildFieldMappings(ClassMetadata $metadata) // We need to check for the columns here, because we might have associations as id as well. if ($ids && count($primaryKeys) === 1) { - $ids[0]->setIdentifierGeneratorType(GeneratorType::AUTO); + $metadata->setIdGeneratorType(GeneratorType::AUTO); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index bb0e6860049..29a70e46ce0 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -332,15 +332,14 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) : 'AUTO' ; - $idGeneratorType = constant(sprintf('%s::%s', GeneratorType::class, strtoupper($strategy))); - $fieldMetadata->setIdentifierGeneratorType($idGeneratorType); + $metadata->setIdGeneratorType(constant(sprintf('%s::%s', GeneratorType::class, strtoupper($strategy)))); } // Check for SequenceGenerator/TableGenerator definition if (isset($idElement->{'sequence-generator'})) { $seqGenerator = $idElement->{'sequence-generator'}; - $fieldMetadata->setIdentifierGeneratorDefinition( + $metadata->setGeneratorDefinition( [ 'sequenceName' => (string) $seqGenerator['sequence-name'], 'allocationSize' => (string) $seqGenerator['allocation-size'], @@ -349,7 +348,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } else if (isset($idElement->{'custom-id-generator'})) { $customGenerator = $idElement->{'custom-id-generator'}; - $fieldMetadata->setIdentifierGeneratorDefinition( + $metadata->setGeneratorDefinition( [ 'class' => (string) $customGenerator['class'], 'arguments' => [], diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php index 61bbee47c46..61c0af999ea 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php @@ -132,6 +132,11 @@ private function exportInitialize(ClassMetadata $metadata, int $indentationLevel $lines[] = null; } + if (! $metadata->isIdentifierComposite()) { + $lines[] = $objectReference . '->setIdGeneratorType(Mapping\GeneratorType::' . strtoupper($metadata->generatorType) . ');'; + $lines[] = null; + } + if ($metadata->inheritanceType) { $lines[] = $objectReference . '->setInheritanceType(Mapping\InheritanceType::' . strtoupper($metadata->inheritanceType) . ');'; $lines[] = null; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php index 38c0b278536..02d82439643 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php @@ -23,7 +23,6 @@ namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\FieldMetadata; -use Doctrine\ORM\Mapping\GeneratorType; class FieldMetadataExporter extends LocalColumnMetadataExporter { @@ -36,22 +35,11 @@ class FieldMetadataExporter extends LocalColumnMetadataExporter */ protected function exportInstantiation(FieldMetadata $metadata) : string { - $export = sprintf( + return sprintf( 'new Mapping\FieldMetadata("%s", "%s", Type::getType("%s"));', $metadata->getName(), $metadata->getColumnName(), $metadata->getTypeName() ); - - if ($metadata->getIdentifierGeneratorType() !== GeneratorType::NONE) { - $export .= PHP_EOL; - $export .= sprintf( - '%s->setIdentifierGeneratorType(Mapping\GeneratorType::%s);', - self::VARIABLE, - strtoupper($metadata->getIdentifierGeneratorType()) - ); - } - - return $export; } } diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index 4a853d903b5..982eef2d166 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -24,7 +24,6 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Reflection\ReflectionService; -use Doctrine\ORM\Sequencing\Generator; class FieldMetadata extends LocalColumnMetadata implements Property { @@ -37,15 +36,12 @@ class FieldMetadata extends LocalColumnMetadata implements Property /** @var string */ protected $name; - /** @var string */ + /** @var int */ protected $identifierGeneratorType = GeneratorType::NONE; /** @var array */ protected $identifierGeneratorDefinition = []; - /** @var Generator */ - protected $identifierGenerator; - /** * FieldMetadata constructor. * @@ -92,7 +88,7 @@ public function getName() } /** - * @return string + * @return int */ public function getIdentifierGeneratorType() { @@ -102,7 +98,7 @@ public function getIdentifierGeneratorType() /** * @param int $identifierGeneratorType */ - public function setIdentifierGeneratorType(string $identifierGeneratorType) + public function setIdentifierGeneratorType(int $identifierGeneratorType) { $this->identifierGeneratorType = $identifierGeneratorType; } @@ -123,22 +119,6 @@ public function setIdentifierGeneratorDefinition(array $identifierGeneratorDefin $this->identifierGeneratorDefinition = $identifierGeneratorDefinition; } - /** - * @return Generator - */ - public function getIdentifierGenerator() : Generator - { - return $this->identifierGenerator; - } - - /** - * @param Generator $identifierGenerator - */ - public function setIdentifierGenerator(Generator $identifierGenerator) - { - $this->identifierGenerator = $identifierGenerator; - } - /** * {@inheritdoc} */ diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 0e0b9269ab4..9eb7d8d3bfe 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -260,6 +260,8 @@ public function executeInserts() } $postInsertIds = []; + $idGenerator = $this->class->idGenerator; + $isPostInsertId = $idGenerator->isPostInsertGenerator(); $stmt = $this->conn->prepare($this->getInsertSQL()); $tableName = $this->class->getTableName(); @@ -279,9 +281,8 @@ public function executeInserts() $stmt->execute(); - if (! $this->class->isIdentifierComposite() - && $this->class->getProperty($this->class->identifier[0])->getIdentifierGenerator()->isPostInsertGenerator()) { - $generatedId = $this->class->getProperty($this->class->identifier[0])->getIdentifierGenerator()->generate($this->em, $entity); + if ($isPostInsertId) { + $generatedId = $idGenerator->generate($this->em, $entity); $id = [$this->class->identifier[0] => $generatedId]; $postInsertIds[] = [ @@ -1541,9 +1542,7 @@ protected function getInsertColumnList() break; case ($property instanceof LocalColumnMetadata): - if (! $property instanceof FieldMetadata - || $property->getIdentifierGeneratorType() !== GeneratorType::IDENTITY - || $this->class->identifier[0] !== $name) { + if ($this->class->generatorType !== GeneratorType::IDENTITY || $this->class->identifier[0] !== $name) { $columnName = $property->getColumnName(); $columns[] = $columnName; diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index aa7e43772c8..aca315e3583 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -93,7 +93,7 @@ public function executeInserts() } $postInsertIds = []; - $idGenerator = $this->class->getProperty($this->class->identifier[0])->getIdentifierGenerator(); + $idGenerator = $this->class->idGenerator; $isPostInsertId = $idGenerator->isPostInsertGenerator(); $rootClass = ($this->class->name !== $this->class->rootEntityName) ? $this->em->getClassMetadata($this->class->rootEntityName) @@ -538,7 +538,7 @@ protected function getInsertColumnList() if ( $this->class->name !== $this->class->rootEntityName || - $property->getIdentifierGeneratorType() !== GeneratorType::IDENTITY || + $this->class->generatorType !== GeneratorType::IDENTITY || $this->class->identifier[0] !== $name ) { $columnName = $property->getColumnName(); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index 0f22ad9c9c8..d6d605041ac 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -112,6 +112,8 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage [ $this->formatField('Discriminator value', $metadata->discriminatorValue), $this->formatField('Discriminator map', $metadata->discriminatorMap), + $this->formatField('Generator type', $metadata->generatorType), + $this->formatField('Generator definition', $metadata->generatorDefinition), $this->formatField('Table', ''), ], $this->formatTable($metadata->table), @@ -332,11 +334,6 @@ private function formatColumn(ColumnMetadata $columnMetadata = null) $output[] = $this->formatField(' isUnique', $this->formatValue($columnMetadata->isUnique())); $output[] = $this->formatField(' options', $this->formatValue($columnMetadata->getOptions())); - if ($columnMetadata instanceof FieldMetadata) { - $output[] = $this->formatField(' Generator type', $this->formatValue($columnMetadata->getIdentifierGeneratorType())); - $output[] = $this->formatField(' Generator definition', $this->formatValue($columnMetadata->getIdentifierGeneratorDefinition())); - } - return $output; } diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index a1d339b7ba2..44081dc1cf0 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -36,7 +36,6 @@ use Doctrine\ORM\Mapping\ManyToOneAssociationMetadata; use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; -use Doctrine\ORM\Mapping\Property; use Doctrine\ORM\Mapping\ToManyAssociationMetadata; use Doctrine\ORM\Mapping\ToOneAssociationMetadata; @@ -1166,7 +1165,7 @@ protected function generateEntityStubMethods(ClassMetadata $metadata) $methods[] = $code; } - if (( ! $property->isPrimaryKey() || $property->getIdentifierGeneratorType() == GeneratorType::NONE) && + if (( ! $property->isPrimaryKey() || $metadata->generatorType == GeneratorType::NONE) && ( ! $metadata->isEmbeddedClass || ! $this->embeddablesImmutable) && $code = $this->generateEntityStubMethod($metadata, 'set', $fieldName, $property->getTypeName(), $nullable)) { $methods[] = $code; @@ -1389,32 +1388,30 @@ protected function generateLifecycleCallbackMethod($name, $methodName, ClassMeta } /** - * @param Property $metadata + * @param ClassMetadata $metadata * * @return string */ - protected function generateIdentifierAnnotation(Property $metadata) + protected function generateIdentifierAnnotation(ClassMetadata $metadata) { $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'Id'; - if ($metadata instanceof FieldMetadata) { - if ($generatorType = $this->getIdGeneratorTypeString($metadata->getIdentifierGeneratorType())) { - $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'GeneratedValue(strategy="' . $generatorType . '")'; - } - - if ($metadata->getIdentifierGeneratorDefinition()) { - $generator = []; + if ($generatorType = $this->getIdGeneratorTypeString($metadata->generatorType)) { + $lines[] = $this->spaces.' * @' . $this->annotationsPrefix . 'GeneratedValue(strategy="' . $generatorType . '")'; + } - if (isset($metadata->generatorDefinition['sequenceName'])) { - $generator[] = 'sequenceName="' . $metadata->getIdentifierGeneratorDefinition()['sequenceName'] . '"'; - } + if ($metadata->generatorDefinition) { + $generator = []; - if (isset($metadata->generatorDefinition['allocationSize'])) { - $generator[] = 'allocationSize=' . $metadata->getIdentifierGeneratorDefinition()['allocationSize']; - } + if (isset($metadata->generatorDefinition['sequenceName'])) { + $generator[] = 'sequenceName="' . $metadata->generatorDefinition['sequenceName'] . '"'; + } - $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'SequenceGenerator(' . implode(', ', $generator) . ')'; + if (isset($metadata->generatorDefinition['allocationSize'])) { + $generator[] = 'allocationSize=' . $metadata->generatorDefinition['allocationSize']; } + + $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'SequenceGenerator(' . implode(', ', $generator) . ')'; } return implode(PHP_EOL, $lines); @@ -1525,7 +1522,7 @@ protected function generateAssociationMappingPropertyDocBlock(AssociationMetadat $lines[] = $this->spaces . ' *'; if ($association->isPrimaryKey()) { - $lines[] = $this->generateIdentifierAnnotation($association); + $lines[] = $this->generateIdentifierAnnotation($metadata); } $type = null; @@ -1687,7 +1684,7 @@ protected function generateFieldMappingPropertyDocBlock(FieldMetadata $propertyM $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'Column(' . implode(', ', $column) . ')'; if ($propertyMetadata->isPrimaryKey()) { - $lines[] = $this->generateIdentifierAnnotation($propertyMetadata); + $lines[] = $this->generateIdentifierAnnotation($metadata); } if ($metadata->isVersioned() && $metadata->versionProperty->getName() === $propertyMetadata->getName()) { diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 22d6211b8a7..739c9d047e6 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -22,7 +22,6 @@ use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FieldMetadata; -use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\JoinTableMetadata; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; @@ -143,6 +142,10 @@ public function exportClassMetadata(ClassMetadata $metadata) } } + if (! $metadata->isIdentifierComposite()) { + $lines[] = '$metadata->setIdGeneratorType(Mapping\GeneratorType::' . $metadata->generatorType . ');'; + } + foreach ($metadata->getProperties() as $property) { if ($property instanceof FieldMetadata) { $this->exportFieldMetadata($metadata, $property, $lines); @@ -187,11 +190,6 @@ private function exportFieldMetadata(ClassMetadata $metadata, FieldMetadata $pro $lines[] = '$property->setPrimaryKey(' . $this->varExport($property->isPrimaryKey()) . ');'; $lines[] = '$property->setNullable(' . $this->varExport($property->isNullable()) . ');'; $lines[] = '$property->setUnique(' . $this->varExport($property->isUnique()) . ');'; - - if ($property->getIdentifierGeneratorType() !== GeneratorType::NONE) { - $lines[] = '$property->setIdentifierGeneratorType(Mapping\GeneratorType::' . $property->getIdentifierGeneratorType() . ');'; - } - $lines[] = null; $lines[] = '$metadata->addProperty($property);'; } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index b9b0e8401c6..86cfdc1f897 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -205,12 +205,12 @@ public function exportClassMetadata(ClassMetadata $metadata) $idXml->addAttribute('length', $property->getLength()); } - if ($property->getIdentifierGeneratorType() !== GeneratorType::NONE) { + if ($metadata->generatorType) { $generatorXml = $idXml->addChild('generator'); - $generatorXml->addAttribute('strategy', $property->getIdentifierGeneratorType()); + $generatorXml->addAttribute('strategy', $metadata->generatorType); - $this->exportSequenceInformation($idXml, $property); + $this->exportSequenceInformation($idXml, $metadata); } } } @@ -487,15 +487,15 @@ private function exportTableOptions(\SimpleXMLElement $parentXml, array $options * Export sequence information (if available/configured) into the current identifier XML node * * @param \SimpleXMLElement $identifierXmlNode - * @param FieldMetadata $metadata + * @param ClassMetadata $metadata * * @return void */ - private function exportSequenceInformation(\SimpleXMLElement $identifierXmlNode, FieldMetadata $metadata) + private function exportSequenceInformation(\SimpleXMLElement $identifierXmlNode, ClassMetadata $metadata) { - $sequenceDefinition = $metadata->getIdentifierGeneratorDefinition(); + $sequenceDefinition = $metadata->generatorDefinition; - if (! ($metadata->getIdentifierGeneratorType() === GeneratorType::SEQUENCE && $sequenceDefinition)) { + if (! ($metadata->generatorType === GeneratorType::SEQUENCE && $sequenceDefinition)) { return; } diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index f7e176fbbef..97b01ad5173 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -338,17 +338,12 @@ public function getSchemaFromMetadata(array $classes) $processedClasses[$class->name] = true; - foreach ($class->getProperties() as $property) { - if (! $property instanceof FieldMetadata - || $property->getIdentifierGeneratorType() !== GeneratorType::SEQUENCE - || $class->name !== $class->rootEntityName) { - continue; - } - - $quotedName = $this->platform->quoteIdentifier($property->getIdentifierGeneratorDefinition()['sequenceName']); + if ($class->generatorType === GeneratorType::SEQUENCE && $class->name === $class->rootEntityName) { + $definition = $class->generatorDefinition; + $quotedName = $this->platform->quoteIdentifier($definition['sequenceName']); if ( ! $schema->hasSequence($quotedName)) { - $schema->createSequence($quotedName, $property->getIdentifierGeneratorDefinition()['allocationSize']); + $schema->createSequence($quotedName, $definition['allocationSize']); } } @@ -498,7 +493,7 @@ private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Tabl $options['customSchemaOptions'] = $fieldOptions; } - if ($fieldMetadata->getIdentifierGeneratorType() === GeneratorType::IDENTITY && $classMetadata->getIdentifierFieldNames() == [$fieldName]) { + if ($classMetadata->generatorType === GeneratorType::IDENTITY && $classMetadata->getIdentifierFieldNames() == [$fieldName]) { $options['autoincrement'] = true; } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index ecfd96e2f64..0392f57d85c 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -554,7 +554,7 @@ public function computeChangeSet(ClassMetadata $class, $entity) continue; } - if (( ! $property->isPrimaryKey() || ($property instanceof FieldMetadata && $property->getIdentifierGeneratorType() !== GeneratorType::IDENTITY)) + if (( ! $class->isIdentifier($name) || $class->generatorType !== GeneratorType::IDENTITY) && (! $class->isVersioned() || $name !== $class->versionProperty->getName())) { $actualData[$name] = $value; } @@ -836,24 +836,22 @@ private function persistNew($class, $entity) $this->listenersInvoker->invoke($class, Events::prePersist, $entity, new LifecycleEventArgs($entity, $this->em), $invoke); } - if (! $class->isIdentifierComposite()) { - $idField = $class->getSingleIdentifierFieldName(); - $property = $class->getProperty($idField); - $idGen = $property->getIdentifierGenerator(); + $idGen = $class->idGenerator; - if (! $idGen->isPostInsertGenerator()) { - $idValue = $idGen->generate($this->em, $entity); + if (! $idGen->isPostInsertGenerator()) { + $idValue = $idGen->generate($this->em, $entity); - if (! $idGen instanceof AssignedGenerator) { - $platform = $this->em->getConnection()->getDatabasePlatform(); - $idValue = $property->getType()->convertToPHPValue($idValue, $platform); - $idValue = [$idField => $idValue]; - - $class->assignIdentifier($entity, $idValue); - } + if (! $idGen instanceof AssignedGenerator) { + $idField = $class->getSingleIdentifierFieldName(); + $property = $class->getProperty($idField); + $platform = $this->em->getConnection()->getDatabasePlatform(); + $idValue = $property->getType()->convertToPHPValue($idValue, $platform); + $idValue = [$idField => $idValue]; - $this->entityIdentifiers[$oid] = $idValue; + $class->assignIdentifier($entity, $idValue); } + + $this->entityIdentifiers[$oid] = $idValue; } $this->entityStates[$oid] = self::STATE_MANAGED; @@ -905,7 +903,7 @@ public function recomputeSingleEntityChangeSet(ClassMetadata $class, $entity) break; case ($property instanceof FieldMetadata): - if (! $property->isPrimaryKey() || $property->getIdentifierGeneratorType() !== GeneratorType::IDENTITY) { + if (! $property->isPrimaryKey() || $class->generatorType !== GeneratorType::IDENTITY) { $actualData[$name] = $property->getValue($entity); } @@ -1071,12 +1069,10 @@ private function executeDeletions($class) // Entity with this $oid after deletion treated as NEW, even if the $oid // is obtained by a new entity because the old one went out of scope. //$this->entityStates[$oid] = self::STATE_NEW; - if (! $class->isIdentifierComposite()) { - $identifierProperty = $class->getProperty($class->getSingleIdentifierFieldName()); - if ($identifierProperty->getIdentifierGeneratorType() !== GeneratorType::NONE) { - $property = $class->getProperty($class->getSingleIdentifierFieldName()); - $property->setValue($entity, null); - } + if ($class->generatorType !== GeneratorType::NONE) { + $property = $class->getProperty($class->getSingleIdentifierFieldName()); + + $property->setValue($entity, null); } if ($invoke !== ListenersInvoker::INVOKE_NONE) { @@ -1439,7 +1435,7 @@ public function getEntityState($entity, $assume = null) $flatId = $this->identifierFlattener->flattenIdentifier($class, $id); - if (count($class->getGeneratedIdentifierProperties()) === 0) { + if ($class->generatorType === GeneratorType::NONE) { // Check for a version field, if available, to avoid a db lookup. if ($class->isVersioned()) { return $class->versionProperty->getValue($entity) @@ -1460,28 +1456,25 @@ public function getEntityState($entity, $assume = null) return self::STATE_NEW; } - foreach ($class->getGeneratedIdentifierProperties() as $property) { - if ($property->getIdentifierGeneratorType() !== GeneratorType::NONE - && $property->getIdentifierGenerator()->isPostInsertGenerator()) { + if ( ! $class->idGenerator->isPostInsertGenerator()) { + // if we have a pre insert generator we can't be sure that having an id + // really means that the entity exists. We have to verify this through + // the last resort: a db lookup + + // Last try before db lookup: check the identity map. + if ($this->tryGetById($flatId, $class->rootEntityName)) { return self::STATE_DETACHED; } - } - - // if we have a pre insert generator we can't be sure that having an id - // really means that the entity exists. We have to verify this through - // the last resort: a db lookup - // Last try before db lookup: check the identity map. - if ($this->tryGetById($flatId, $class->rootEntityName)) { - return self::STATE_DETACHED; - } + // db lookup + if ($this->getEntityPersister($class->name)->exists($entity)) { + return self::STATE_DETACHED; + } - // db lookup - if ($this->getEntityPersister($class->name)->exists($entity)) { - return self::STATE_DETACHED; + return self::STATE_NEW; } - return self::STATE_NEW; + return self::STATE_DETACHED; } /** @@ -1824,7 +1817,7 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, Asso if ($managedCopy === null) { // If the identifier is ASSIGNED, it is NEW, otherwise an error // since the managed entity was not found. - if (count($class->getGeneratedIdentifierProperties()) !== 0) { + if ($class->generatorType !== GeneratorType::NONE) { throw EntityNotFoundException::fromClassNameAndIdentifier( $class->getName(), $this->identifierFlattener->flattenIdentifier($class, $id) diff --git a/tests/Doctrine/Tests/Mocks/ClassMetadataMock.php b/tests/Doctrine/Tests/Mocks/ClassMetadataMock.php index dc661237cf7..d1703539a81 100644 --- a/tests/Doctrine/Tests/Mocks/ClassMetadataMock.php +++ b/tests/Doctrine/Tests/Mocks/ClassMetadataMock.php @@ -10,4 +10,12 @@ class ClassMetadataMock extends ClassMetadata { /* Mock API */ + + /** + * {@inheritdoc} + */ + public function setIdGeneratorType($type) + { + $this->generatorType = $type; + } } diff --git a/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php b/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php index 24826cf97be..aa6911f7b1d 100644 --- a/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php +++ b/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php @@ -56,8 +56,7 @@ public function addInsert($entity) { $this->inserts[] = $entity; - if ($this->mockIdGeneratorType === GeneratorType::IDENTITY - || $this->class->getProperty($this->class->getSingleIdentifierFieldName())->getIdentifierGeneratorType() === GeneratorType::IDENTITY) { + if ($this->mockIdGeneratorType === GeneratorType::IDENTITY || $this->class->generatorType === GeneratorType::IDENTITY) { $id = $this->identityColumnValueCounter++; $this->postInsertIds[] = [ diff --git a/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php b/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php index 60a93ca2797..028fe96bbdf 100644 --- a/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php +++ b/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php @@ -50,7 +50,6 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -58,6 +57,8 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('string')); $metadata->addProperty($fieldMetadata); + + $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } diff --git a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php index 3f0265e3846..e6265dd80df 100644 --- a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php +++ b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php @@ -88,7 +88,6 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('user_id'); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -107,5 +106,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association->setTargetEntity('DDC3579Group'); $metadata->addProperty($association); + + $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } } diff --git a/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php b/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php index a1d9fdeb2a9..6342cd23c46 100644 --- a/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php +++ b/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php @@ -38,7 +38,6 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('id'); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -47,5 +46,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association->setTargetEntity('DDC5934Member'); $metadata->addProperty($association); + + $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } } diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php index f49d6c4a2b7..809fb5b217c 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php @@ -26,7 +26,6 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -38,5 +37,6 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $metadata->isMappedSuperclass = true; $metadata->setCustomRepositoryClass(DDC869PaymentRepository::class); + $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } } diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php b/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php index 8f17112307f..cf040ce3636 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php @@ -20,9 +20,10 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); + + $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } } diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php b/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php index 71b8c0f3c6f..0be4ecd7354 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php @@ -18,9 +18,9 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) { $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); $metadata->isMappedSuperclass = true; + $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php index da71d2a0e31..e4605281d69 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php @@ -115,7 +115,6 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('user_id'); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -170,5 +169,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association->setCascade(['persist', 'merge', 'detach']); $metadata->addProperty($association); + + $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php index 24a87c8f7cb..272273e6d95 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php @@ -22,7 +22,7 @@ public function testPostgresMetadataSequenceIncrementedBy10() { $address = $this->em->getClassMetadata(Models\CMS\CmsAddress::class); - self::assertEquals(1, $address->getProperty('id')->getIdentifierGeneratorDefinition['allocationSize']); + self::assertEquals(1, $address->generatorDefinition['allocationSize']); } public function testGetCreateSchemaSql() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php index 31c13ec4b55..12a6a05efc9 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php @@ -31,8 +31,6 @@ protected function setUp() public function testTicket() { - $this->fail('FIXME'); - $parentMetadata = $this->em->getClassMetadata(DDC2415ParentEntity::class); $childMetadata = $this->em->getClassMetadata(DDC2415ChildEntity::class); @@ -68,16 +66,18 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); - $fieldMetadata->setIdentifierGeneratorDefinition( + + $metadata->addProperty($fieldMetadata); + + $metadata->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); + + $metadata->setGeneratorDefinition( [ 'class' => DDC2415Generator::class, 'arguments' => [], ] ); - $metadata->addProperty($fieldMetadata); - $metadata->isMappedSuperclass = true; } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php index beb55967c01..f8aa76238e6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php @@ -20,7 +20,7 @@ protected function setUp() $metadata = $this->em->getClassMetadata(DDC3634Entity::class); - if ( ! $metadata->getProperty('id')->getIdentifierGenerator()->isPostInsertGenerator()) { + if ( ! $metadata->idGenerator->isPostInsertGenerator()) { $this->markTestSkipped('Need a post-insert ID generator in order to make this test work correctly'); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 794789d87db..ce872ae92a7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -177,17 +177,13 @@ public function testEntityOptions($class) */ public function testEntitySequence($class) { - self::assertInternalType( - 'array', - $class->getProperty('id')->getIdentifierGeneratorDefinition(), - 'No Sequence Definition set on this driver.' - ); + self::assertInternalType('array', $class->generatorDefinition, 'No Sequence Definition set on this driver.'); self::assertEquals( [ 'sequenceName' => 'tablename_seq', 'allocationSize' => 100, ], - $class->getProperty('id')->getIdentifierGeneratorDefinition() + $class->generatorDefinition ); } @@ -195,13 +191,13 @@ public function testEntityCustomGenerator() { $class = $this->createClassMetadata(Animal::class); - self::assertEquals(Mapping\GeneratorType::CUSTOM, $class->getProperty('id')->getIdentifierGeneratorType(), "Generator Type"); + self::assertEquals(Mapping\GeneratorType::CUSTOM, $class->generatorType, "Generator Type"); self::assertEquals( [ 'class' => 'stdClass', 'arguments' => [], ], - $class->getProperty('id')->getIdentifierGeneratorDefinition(), + $class->generatorDefinition, "Generator Definition" ); } @@ -321,7 +317,7 @@ public function testIdentifier($class) self::assertEquals('integer', $property->getTypeName()); self::assertEquals(['id'], $class->identifier); - self::assertEquals(Mapping\GeneratorType::AUTO, $property->getIdentifierGeneratorType(), "ID-Generator is not GeneratorType::AUTO"); + self::assertEquals(Mapping\GeneratorType::AUTO, $class->generatorType, "ID-Generator is not GeneratorType::AUTO"); return $class; } @@ -559,7 +555,7 @@ public function testDefaultFieldType() self::assertEquals('id', $idProperty->getColumnName()); self::assertEquals('name', $nameProperty->getColumnName()); - self::assertEquals(Mapping\GeneratorType::NONE, $idProperty->getIdentifierGeneratorType()); + self::assertEquals(Mapping\GeneratorType::NONE, $class->generatorType); } /** @@ -1290,6 +1286,13 @@ public static function loadMetadata(ClassMetadata $metadata) $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); $metadata->addLifecycleCallback('doStuffOnPostPersist', 'postPersist'); + $metadata->setGeneratorDefinition( + [ + 'sequenceName' => 'tablename_seq', + 'allocationSize' => 100, + ] + ); + $metadata->addNamedQuery( [ 'name' => 'all', @@ -1301,13 +1304,6 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); $fieldMetadata->setOptions(['foo' => 'bar', 'unsigned' => false]); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); - $fieldMetadata->setIdentifierGeneratorDefinition( - [ - 'sequenceName' => 'tablename_seq', - 'allocationSize' => 100, - ] - ); $metadata->addProperty($fieldMetadata); @@ -1341,6 +1337,7 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $metadata->addProperty($fieldMetadata); + $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $joinColumns = []; @@ -1418,8 +1415,8 @@ abstract class Animal public static function loadMetadata(ClassMetadata $metadata) { - $metadata->getProperty('id')->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); - $metadata->getProperty('id')->setIdentifierGeneratorDefinition( + $metadata->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); + $metadata->setGeneratorDefinition( [ 'class' => 'stdClass', 'arguments' => [], @@ -1494,7 +1491,6 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnDefinition('INT unsigned NOT NULL'); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -1504,6 +1500,8 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setColumnDefinition('VARCHAR(255) NOT NULL'); $metadata->addProperty($fieldMetadata); + + $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } @@ -1529,7 +1527,6 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -1541,6 +1538,8 @@ public static function loadMetadata(ClassMetadata $metadata) $discrColumn->setColumnDefinition("ENUM('ONE','TWO')"); $metadata->setDiscriminatorColumn($discrColumn); + + $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } @@ -1610,10 +1609,10 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); + $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } @@ -1651,10 +1650,10 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); + $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index 6a2faf3258a..407f6a7f879 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -149,10 +149,10 @@ public function testGeneratedValueFromMappedSuperclass() /* @var ClassMetadata $class */ $class = $this->cmf->getMetadataFor(SuperclassEntity::class); - self::assertInstanceOf(SequenceGenerator::class, $class->getProperty('id')->getIdentifierGenerator()); + self::assertInstanceOf(SequenceGenerator::class, $class->idGenerator); self::assertEquals( ['allocationSize' => 1, 'sequenceName' => 'foo'], - $class->getProperty('id')->getIdentifierGeneratorDefinition() + $class->generatorDefinition ); } @@ -165,10 +165,10 @@ public function testSequenceDefinitionInHierarchyWithSandwichMappedSuperclass() /* @var ClassMetadata $class */ $class = $this->cmf->getMetadataFor(HierarchyD::class); - self::assertInstanceOf(SequenceGenerator::class, $class->getProperty('id')->getIdentifierGenerator()); + self::assertInstanceOf(SequenceGenerator::class, $class->idGenerator); self::assertEquals( ['allocationSize' => 1, 'sequenceName' => 'foo'], - $class->getProperty('id')->getIdentifierGeneratorDefinition() + $class->generatorDefinition ); } @@ -181,10 +181,10 @@ public function testMultipleMappedSuperclasses() /* @var ClassMetadata $class */ $class = $this->cmf->getMetadataFor(MediumSuperclassEntity::class); - self::assertInstanceOf(SequenceGenerator::class, $class->getProperty('id')->getIdentifierGenerator()); + self::assertInstanceOf(SequenceGenerator::class, $class->idGenerator); self::assertEquals( ['allocationSize' => 1, 'sequenceName' => 'foo'], - $class->getProperty('id')->getIdentifierGeneratorDefinition() + $class->generatorDefinition ); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index e998ff30557..ea92ce8c838 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -54,7 +54,7 @@ public function testGetMetadataForSingleClass() // Prechecks self::assertEquals([], $cm1->parentClasses); self::assertEquals(Mapping\InheritanceType::NONE, $cm1->inheritanceType); - self::assertEquals(Mapping\GeneratorType::AUTO, $cm1->getProperty('id')->getIdentifierGgeneratorType()); + self::assertEquals(Mapping\GeneratorType::AUTO, $cm1->generatorType); self::assertTrue($cm1->hasField('name')); self::assertCount(4, $cm1->getProperties()); // 2 fields + 2 associations self::assertEquals('group', $cm1->table->getName()); @@ -72,11 +72,12 @@ public function testGetMetadataFor_ReturnsLoadedCustomIdGenerator() { $cm1 = $this->createValidClassMetadata(); - $cm1->getProperty('id')->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); - $cm1->getProperty('id')->setIdentifierGeneratorDefinition([ + $cm1->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); + + $cm1->generatorDefinition = [ 'class' => CustomIdGenerator::class, 'arguments' => [], - ]); + ]; $cmf = $this->createTestFactory(); @@ -84,19 +85,20 @@ public function testGetMetadataFor_ReturnsLoadedCustomIdGenerator() $actual = $cmf->getMetadataFor($cm1->name); - self::assertEquals(Mapping\GeneratorType::CUSTOM, $actual->getProperty('id')->getIdentifierGeneratorType()); - self::assertInstanceOf(CustomIdGenerator::class, $actual->getProperty('id')->getIdentifierGenerator()); + self::assertEquals(Mapping\GeneratorType::CUSTOM, $actual->generatorType); + self::assertInstanceOf(CustomIdGenerator::class, $actual->idGenerator); } public function testGetMetadataFor_ThrowsExceptionOnUnknownCustomGeneratorClass() { $cm1 = $this->createValidClassMetadata(); - $cm1->getProperty('id')->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); - $cm1->getProperty('id')->setIdentifierGeneratorDefinition([ + $cm1->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); + + $cm1->generatorDefinition = [ 'class' => 'NotExistingGenerator', 'arguments' => [], - ]); + ]; $cmf = $this->createTestFactory(); @@ -110,7 +112,7 @@ public function testGetMetadataFor_ThrowsExceptionOnUnknownCustomGeneratorClass( public function testGetMetadataFor_ThrowsExceptionOnMissingCustomGeneratorDefinition() { $cm1 = $this->createValidClassMetadata(); - $cm1->getProperty('id')->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); + $cm1->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); $cmf = $this->createTestFactory(); $cmf->setMetadataForClass($cm1->name, $cm1); $this->expectException(ORMException::class); @@ -292,7 +294,6 @@ protected function createValidClassMetadata() $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $cm1->addProperty($fieldMetadata); @@ -328,6 +329,9 @@ protected function createValidClassMetadata() $cm1->addProperty($association); + // and an id generator type + $cm1->setIdGeneratorType(Mapping\GeneratorType::AUTO); + return $cm1; } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index c7caa54eab6..ccef56c4a7a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -1412,8 +1412,6 @@ public function testManyToManySelfReferencingNamingStrategyDefaults() */ public function testSetSequenceGeneratorThrowsExceptionWhenSequenceNameIsMissing() { - $this->fail('FIXME'); - $cm = new ClassMetadata(CMS\CmsUser::class); $cm->setIdGeneratorType(Mapping\GeneratorType::SEQUENCE); @@ -1432,12 +1430,9 @@ public function testQuotedSequenceName() $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->getProperty('id')->setIdentifierGeneratorDefinition(['sequenceName' => 'foo', 'allocationSize' => 1]); + $cm->setGeneratorDefinition(['sequenceName' => 'foo', 'allocationSize' => 1]); - self::assertEquals( - ['sequenceName' => 'foo', 'allocationSize' => 1], - $cm->getProperty('id')->getIdentifierGeneratorDefinition() - ); + self::assertEquals(['sequenceName' => 'foo', 'allocationSize' => 1], $cm->generatorDefinition); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index 782a62a0a1a..f71bf6e2357 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -14,6 +14,7 @@ $metadata->setTable($tableMetadata); $metadata->setInheritanceType(Mapping\InheritanceType::NONE); $metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); +$metadata->setIdGeneratorType(Mapping\GeneratorType::IDENTITY); $metadata->setCache( new Mapping\CacheMetadata( Mapping\CacheUsage::READ_ONLY, @@ -24,7 +25,6 @@ $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::IDENTITY); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php index 2e589951f1c..017681606e5 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php @@ -8,7 +8,6 @@ $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -16,3 +15,5 @@ $fieldMetadata->setType(Type::getType('string')); $metadata->addProperty($fieldMetadata); + +$metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php index 9d1f0bf634f..f4ad05fc8e9 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php @@ -10,11 +10,11 @@ /* @var $metadata ClassMetadata */ $metadata->setTable($tableMetadata); +$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php index 736a9ca53a1..5e5ab11b90d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php @@ -10,10 +10,10 @@ /* @var $metadata ClassMetadata */ $metadata->setTable($tableMetadata); +$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php index c5e8992ec8a..2882f3e2655 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php @@ -9,7 +9,6 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('user_id'); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -27,3 +26,5 @@ $association->setTargetEntity('DDC3579Group'); $metadata->addProperty($association); + +$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php index 93dc13c82c5..0f6c27960f5 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php @@ -9,7 +9,6 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('id'); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -18,3 +17,5 @@ $association->setTargetEntity('DDC5934Member'); $metadata->addProperty($association); + +$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php index 83e1060a378..90342944a1e 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php @@ -11,7 +11,6 @@ $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -21,3 +20,4 @@ $metadata->addProperty($fieldMetadata); $metadata->setCustomRepositoryClass(DDC869PaymentRepository::class); +$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php index d6e066f37e8..830afd69118 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php @@ -9,8 +9,8 @@ $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); $metadata->setCustomRepositoryClass(DDC889SuperClass::class); +$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php index fc153639bd7..04db2e314ed 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php @@ -10,7 +10,6 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('user_id'); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -65,3 +64,5 @@ $association->setCascade(['persist','merge','detach']); $metadata->addProperty($association); + +$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php index 3145abdbd8b..9376e238300 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php @@ -31,12 +31,14 @@ $fieldMetadata->setPrimaryKey(true); $fieldMetadata->setNullable(false); $fieldMetadata->setUnique(false); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); -$fieldMetadata->setIdentifierGeneratorDefinition( + +$metadata->addProperty($fieldMetadata); + +$metadata->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); + +$metadata->setGeneratorDefinition( [ 'class' => 'stdClass', 'arguments' => [], ] ); - -$metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php index 2ca7e68cbf2..19c20284962 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php @@ -9,7 +9,6 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnDefinition('INT unsigned NOT NULL'); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -18,3 +17,5 @@ $fieldMetadata->setColumnDefinition('VARCHAR(255) NOT NULL'); $metadata->addProperty($fieldMetadata); + +$metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php index 9ab3d36a15a..cb80eaa79e8 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php @@ -8,7 +8,6 @@ $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -19,3 +18,5 @@ $discrColumn->setColumnDefinition("ENUM('ONE','TWO')"); $metadata->setDiscriminatorColumn($discrColumn); + +$metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index 32ba2e66c39..0194970cb35 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -55,19 +55,19 @@ ] ); -$fieldMetadata = new Mapping\FieldMetadata('id'); - -$fieldMetadata->setType(Type::getType('integer')); -$fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setOptions(['foo' => 'bar', 'unsigned' => false]); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); -$fieldMetadata->setIdentifierGeneratorDefinition( +$metadata->setGeneratorDefinition( [ 'sequenceName' => 'tablename_seq', 'allocationSize' => 100, ] ); +$fieldMetadata = new Mapping\FieldMetadata('id'); + +$fieldMetadata->setType(Type::getType('integer')); +$fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setOptions(['foo' => 'bar', 'unsigned' => false]); + $metadata->addProperty($fieldMetadata); $fieldMetadata = new Mapping\FieldMetadata('name'); @@ -101,6 +101,8 @@ $metadata->addProperty($versionFieldMetadata); +$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); + $joinColumns = []; $joinColumn = new Mapping\JoinColumnMetadata(); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index c382e06c7b0..f628685de8f 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -116,7 +116,6 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $fieldMetadata->setPrimaryKey(true); $fieldMetadata->setNullable(false); $fieldMetadata->setUnique(false); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -163,6 +162,7 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $metadata->addLifecycleCallback('loading', 'postLoad'); $metadata->addLifecycleCallback('willBeRemoved', 'preRemove'); + $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); foreach ($embeddedClasses as $fieldName => $embeddedClass) { $metadata->mapEmbedded( @@ -193,7 +193,6 @@ private function generateEntityTypeFixture(array $field) $fieldMetadata->setPrimaryKey(true); $fieldMetadata->setNullable(false); $fieldMetadata->setUnique(false); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -204,6 +203,8 @@ private function generateEntityTypeFixture(array $field) $metadata->addProperty($fieldMetadata); + $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); + $this->generator->writeEntityClass($metadata, $this->tmpDir); return $metadata; @@ -558,7 +559,7 @@ public function testLoadMetadata() self::assertEquals($cm->getTableName(), $metadata->getTableName()); self::assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); self::assertEquals($cm->identifier, $metadata->identifier); - self::assertEquals($cm->getProperty('id')->getIdentifierGenerator(), $metadata->getProperty('id')->getIdentifierGenerator()); + self::assertEquals($cm->idGenerator, $metadata->idGenerator); self::assertEquals($cm->customRepositoryClassName, $metadata->customRepositoryClassName); // self::assertEquals($cm->embeddedClasses, $metadata->embeddedClasses); // self::assertEquals($cm->isEmbeddedClass, $metadata->isEmbeddedClass); @@ -594,7 +595,7 @@ public function testLoadPrefixedMetadata() self::assertEquals($cm->getTableName(), $metadata->getTableName()); self::assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); self::assertEquals($cm->identifier, $metadata->identifier); - self::assertEquals($cm->getProperty('id')->getIdentifierGenerator(), $metadata->getProperty('id')->getIdentifierGenerator()); + self::assertEquals($cm->idGenerator, $metadata->idGenerator); self::assertEquals($cm->customRepositoryClassName, $metadata->customRepositoryClassName); // $isbn = $this->newInstance($embeddedMetadata); @@ -656,16 +657,18 @@ public function testGenerateEntityWithSequenceGenerator() $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::SEQUENCE); - $fieldMetadata->setIdentifierGeneratorDefinition( + + $metadata->addProperty($fieldMetadata); + + $metadata->setIdGeneratorType(Mapping\GeneratorType::SEQUENCE); + + $metadata->setGeneratorDefinition( [ 'sequenceName' => 'DDC1784_ID_SEQ', 'allocationSize' => 1, ] ); - $metadata->addProperty($fieldMetadata); - $this->generator->writeEntityClass($metadata, $this->tmpDir); $filename = $this->tmpDir . DIRECTORY_SEPARATOR @@ -694,10 +697,11 @@ public function testGenerateEntityWithMultipleInverseJoinColumns() $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::SEQUENCE); $metadata->addProperty($fieldMetadata); + $metadata->setIdGeneratorType(Mapping\GeneratorType::SEQUENCE); + $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('unidade_centro_custo'); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index d73694829cd..3740b7f1870 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -177,7 +177,7 @@ public function testIdentifierIsExported($class) self::assertTrue($property->isPrimaryKey()); self::assertEquals(['id'], $class->identifier); - self::assertEquals(GeneratorType::IDENTITY, $class->getProperty('id')->getIdentifierGeneratorType(), "Generator Type wrong"); + self::assertEquals(GeneratorType::IDENTITY, $class->generatorType, "Generator Type wrong"); return $class; } diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php index 34fbecf3c32..a0ea1e7e41f 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php @@ -50,16 +50,18 @@ public function testSequenceGenerator() { $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::SEQUENCE); - $fieldMetadata->setIdentifierGeneratorDefinition( + + $metadata->addProperty($fieldMetadata); + + $metadata->setIdGeneratorType(Mapping\GeneratorType::SEQUENCE); + + $metadata->setGeneratorDefinition( [ 'sequenceName' => 'seq_entity_test_id', 'allocationSize' => 5, ] ); - $metadata->addProperty($fieldMetadata); - $expectedFileContent = <<<'XML' addOption('foo', ['bar' => 'baz']); $metadata->setTable($tableMetadata); +$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $metadata->setInheritanceType(Mapping\InheritanceType::NONE); $metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); @@ -22,7 +23,6 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); From 4f7ec3933c4cd3f0a43dfb4695a4b03a63e0cb0a Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Thu, 13 Jul 2017 22:45:09 -0400 Subject: [PATCH 160/275] Moved IdentifierFlattener temporarily to EntityManager and removed one todo --- .../ORM/Cache/DefaultEntityHydrator.php | 36 +++++-------------- .../ORM/Decorator/EntityManagerDecorator.php | 8 +++++ lib/Doctrine/ORM/EntityManager.php | 27 +++++++++++--- lib/Doctrine/ORM/EntityManagerInterface.php | 8 +++++ .../Internal/Hydration/AbstractHydrator.php | 21 +++-------- .../ORM/Internal/Hydration/ObjectHydrator.php | 4 +-- .../Hydration/SimpleObjectHydrator.php | 2 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 4 +-- ...aluatingClassMetadataGeneratorStrategy.php | 2 +- .../Entity/BasicEntityPersister.php | 25 ++++--------- lib/Doctrine/ORM/UnitOfWork.php | 23 +++++------- .../Mock/NonProxyLoadingEntityManager.php | 9 +++++ 12 files changed, 79 insertions(+), 90 deletions(-) diff --git a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php index 1ee23b2502d..06d3c0bb14b 100644 --- a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php @@ -29,7 +29,6 @@ use Doctrine\ORM\Query; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\EntityManagerInterface; -use Doctrine\ORM\Utility\IdentifierFlattener; /** * Default hydrator cache for entities @@ -49,13 +48,6 @@ class DefaultEntityHydrator implements EntityHydrator */ private $uow; - /** - * The IdentifierFlattener used for manipulating identifiers - * - * @var \Doctrine\ORM\Utility\IdentifierFlattener - */ - private $identifierFlattener; - /** * @var array */ @@ -66,9 +58,8 @@ class DefaultEntityHydrator implements EntityHydrator */ public function __construct(EntityManagerInterface $em) { - $this->em = $em; - $this->uow = $em->getUnitOfWork(); - $this->identifierFlattener = new IdentifierFlattener($em->getUnitOfWork(), $em->getMetadataFactory()); + $this->em = $em; + $this->uow = $em->getUnitOfWork(); } /** @@ -76,6 +67,8 @@ public function __construct(EntityManagerInterface $em) */ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $entity) { + $identifierFlattener = $this->em->getIdentifierFlattener(); + $data = $this->uow->getOriginalEntityData($entity); $data = array_merge($data, $metadata->getIdentifierValues($entity)); // why update has no identifier values ? @@ -97,7 +90,7 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e $owningAssociation = ! $association->isOwningSide() ? $targetClassMetadata->getProperty($association->getMappedBy()) : $association; - $associationIds = $this->identifierFlattener->flattenIdentifier( + $associationIds = $identifierFlattener->flattenIdentifier( $targetClassMetadata, $targetClassMetadata->getIdentifierValues($data[$name]) ); @@ -150,21 +143,10 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e } // handle association identifier - $targetId = is_object($data[$name]) && $this->uow->isInIdentityMap($data[$name]) - ? $this->uow->getEntityIdentifier($data[$name]) - : $data[$name]; - - // @todo guilhermeblanco From my initial research, we could move the Identifier Flattener to EM and consume - // @todo guilhermeblanco it here, unifying the hash generation that happens everywhere in the codebase. - // @TODO - fix it ! handle UnitOfWork#createEntity hash generation - if ( ! is_array($targetId)) { - $joinColumns = $association->getJoinColumns(); - $columnName = $joinColumns[0]->getAliasedName() ?? $joinColumns[0]->getColumnName(); - - $data[$columnName] = $targetId; - - $targetId = [$targetClassMetadata->identifier[0] => $targetId]; - } + $targetId = $this->em->getIdentifierFlattener()->flattenIdentifier( + $targetClassMetadata, + $targetClassMetadata->getIdentifierValues($data[$name]) + ); $data[$name] = new AssociationCacheEntry($targetEntity, $targetId); } diff --git a/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php b/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php index 4ecadd35986..fd0ced79ca9 100644 --- a/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php +++ b/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php @@ -60,6 +60,14 @@ public function getExpressionBuilder() return $this->wrapped->getExpressionBuilder(); } + /** + * {@inheritdoc} + */ + public function getIdentifierFlattener() + { + return $this->wrapped->getIdentifierFlattener(); + } + /** * {@inheritdoc} */ diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 35b388b3323..28cb0a4fc85 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -19,16 +19,17 @@ namespace Doctrine\ORM; -use Doctrine\ORM\Configuration\ProxyConfiguration; use Doctrine\Common\EventManager; +use Doctrine\Common\Util\ClassUtils; use Doctrine\DBAL\Connection; use Doctrine\DBAL\DriverManager; use Doctrine\DBAL\LockMode; +use Doctrine\ORM\Configuration\ProxyConfiguration; use Doctrine\ORM\Proxy\Factory\DefaultProxyResolver; use Doctrine\ORM\Proxy\Factory\StaticProxyFactory; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\ORM\Query\FilterCollection; -use Doctrine\Common\Util\ClassUtils; +use Doctrine\ORM\Utility\IdentifierFlattener; /** * The EntityManager is the central access point to ORM functionality. @@ -119,6 +120,13 @@ */ private $expressionBuilder; + /** + * The IdentifierFlattener used for manipulating identifiers + * + * @var \Doctrine\ORM\Utility\IdentifierFlattener + */ + private $identifierFlattener; + /** * Whether the EntityManager is closed or not. * @@ -166,9 +174,10 @@ protected function __construct(Connection $conn, Configuration $config, EventMan $this->metadataFactory->setEntityManager($this); $this->metadataFactory->setCacheDriver($this->config->getMetadataCacheImpl()); - $this->repositoryFactory = $config->getRepositoryFactory(); - $this->unitOfWork = new UnitOfWork($this); - $this->proxyFactory = new StaticProxyFactory($this, $proxyConfiguration); + $this->repositoryFactory = $config->getRepositoryFactory(); + $this->unitOfWork = new UnitOfWork($this); + $this->proxyFactory = new StaticProxyFactory($this, $proxyConfiguration); + $this->identifierFlattener = new IdentifierFlattener($this->unitOfWork, $this->metadataFactory); if ($config->isSecondLevelCacheEnabled()) { $cacheConfig = $config->getSecondLevelCacheConfiguration(); @@ -207,6 +216,14 @@ public function getExpressionBuilder() return $this->expressionBuilder; } + /** + * @return IdentifierFlattener + */ + public function getIdentifierFlattener() : IdentifierFlattener + { + return $this->identifierFlattener; + } + /** * {@inheritDoc} */ diff --git a/lib/Doctrine/ORM/EntityManagerInterface.php b/lib/Doctrine/ORM/EntityManagerInterface.php index 9466ac3dc89..7bb61d1fe61 100644 --- a/lib/Doctrine/ORM/EntityManagerInterface.php +++ b/lib/Doctrine/ORM/EntityManagerInterface.php @@ -21,6 +21,7 @@ use Doctrine\Common\Persistence\ObjectManager; use Doctrine\ORM\Query\ResultSetMapping; +use Doctrine\ORM\Utility\IdentifierFlattener; /** * EntityManager interface @@ -62,6 +63,13 @@ public function getConnection(); */ public function getExpressionBuilder(); + /** + * Gets an IdentifierFlattener used for converting Entities into an array of identifier values. + * + * @return IdentifierFlattener + */ + public function getIdentifierFlattener(); + /** * Starts a transaction on the underlying database connection. * diff --git a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php index 1381fef2e81..cde68aa6780 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php @@ -19,13 +19,8 @@ namespace Doctrine\ORM\Internal\Hydration; -use Doctrine\DBAL\Types\Type; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Events; -use Doctrine\ORM\Mapping\AssociationMetadata; -use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\ToOneAssociationMetadata; -use Doctrine\ORM\Utility\IdentifierFlattener; use PDO; /** @@ -67,13 +62,6 @@ abstract class AbstractHydrator */ protected $uow; - /** - * The IdentifierFlattener used for manipulating identifiers - * - * @var \Doctrine\ORM\Utility\IdentifierFlattener - */ - protected $identifierFlattener; - /** * Local ClassMetadata cache to avoid going to the EntityManager all the time. * @@ -109,10 +97,9 @@ abstract class AbstractHydrator */ public function __construct(EntityManagerInterface $em) { - $this->em = $em; - $this->platform = $em->getConnection()->getDatabasePlatform(); - $this->uow = $em->getUnitOfWork(); - $this->identifierFlattener = new IdentifierFlattener($this->uow, $em->getMetadataFactory()); + $this->em = $em; + $this->platform = $em->getConnection()->getDatabasePlatform(); + $this->uow = $em->getUnitOfWork(); } /** @@ -173,7 +160,7 @@ public function hydrateRow() { $row = $this->stmt->fetch(PDO::FETCH_ASSOC); - if ( ! $row) { + if (! $row) { $this->cleanup(); return false; diff --git a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php index 6202742ed61..edeca8c543b 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php @@ -261,7 +261,7 @@ private function getEntity(array $data, $dqlAlias) } if (isset($this->hints[Query::HINT_REFRESH_ENTITY]) && isset($this->rootAliases[$dqlAlias])) { - $id = $this->identifierFlattener->flattenIdentifier($this->metadataCache[$className], $data); + $id = $this->em->getIdentifierFlattener()->flattenIdentifier($this->metadataCache[$className], $data); $this->em->getUnitOfWork()->registerManaged($this->hints[Query::HINT_REFRESH_ENTITY], $id, $data); } @@ -281,7 +281,7 @@ private function getEntityFromIdentityMap($className, array $data) { /* @var ClassMetadata $class */ $class = $this->metadataCache[$className]; - $id = $this->identifierFlattener->flattenIdentifier($class, $data); + $id = $this->em->getIdentifierFlattener()->flattenIdentifier($class, $data); return $this->uow->tryGetById($id, $class->rootEntityName); } diff --git a/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php index 03cb5b4ee67..24a0de6ec08 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php @@ -140,7 +140,7 @@ protected function hydrateRowData(array $sqlResult, array &$result) } if (isset($this->hints[Query::HINT_REFRESH_ENTITY])) { - $id = $this->identifierFlattener->flattenIdentifier($this->class, $data); + $id = $this->em->getIdentifierFlattener()->flattenIdentifier($this->class, $data); $this->em->getUnitOfWork()->registerManaged($this->hints[Query::HINT_REFRESH_ENTITY], $id, $data); } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 1983d9d638d..659bf4d8835 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -20,7 +20,6 @@ namespace Doctrine\ORM\Mapping; -use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\ORM\Cache\CacheException; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; @@ -325,9 +324,8 @@ public function __construct($entityName, NamingStrategy $namingStrategy = null) $this->name = $entityName; $this->rootEntityName = $entityName; $this->namingStrategy = $namingStrategy ?: new DefaultNamingStrategy(); - $this->table = new TableMetadata(); - $this->table->setName($this->namingStrategy->classToTableName($entityName)); + $this->setTable(new TableMetadata()); } /** diff --git a/lib/Doctrine/ORM/Mapping/Factory/EvaluatingClassMetadataGeneratorStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/EvaluatingClassMetadataGeneratorStrategy.php index 3046e42a169..a782187459f 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/EvaluatingClassMetadataGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/EvaluatingClassMetadataGeneratorStrategy.php @@ -30,7 +30,7 @@ class EvaluatingClassMetadataGeneratorStrategy implements ClassMetadataGenerator private $generator; /** - * FileWriterDefinitionGeneratorStrategy constructor. + * EvaluatingClassMetadataGeneratorStrategy constructor. * * @param ClassMetadataGenerator $generator */ diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 9eb7d8d3bfe..093044b4d33 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -28,7 +28,6 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\ColumnMetadata; use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\GeneratorType; @@ -38,10 +37,8 @@ use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; -use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; use Doctrine\ORM\Mapping\ToManyAssociationMetadata; use Doctrine\ORM\Mapping\ToOneAssociationMetadata; -use Doctrine\ORM\Mapping\TransientMetadata; use Doctrine\ORM\Mapping\VersionFieldMetadata; use Doctrine\ORM\OptimisticLockException; use Doctrine\ORM\ORMException; @@ -50,7 +47,6 @@ use Doctrine\ORM\Persisters\SqlValueVisitor; use Doctrine\ORM\Query; use Doctrine\ORM\UnitOfWork; -use Doctrine\ORM\Utility\IdentifierFlattener; use Doctrine\ORM\Utility\PersisterHelper; /** @@ -170,13 +166,6 @@ class BasicEntityPersister implements EntityPersister */ private $insertSql; - /** - * The IdentifierFlattener used for manipulating identifiers - * - * @var \Doctrine\ORM\Utility\IdentifierFlattener - */ - private $identifierFlattener; - /** * @var CachedPersisterContext */ @@ -201,12 +190,11 @@ class BasicEntityPersister implements EntityPersister */ public function __construct(EntityManagerInterface $em, ClassMetadata $class) { - $this->em = $em; - $this->class = $class; - $this->conn = $em->getConnection(); - $this->platform = $this->conn->getDatabasePlatform(); - $this->identifierFlattener = new IdentifierFlattener($em->getUnitOfWork(), $em->getMetadataFactory()); - $this->noLimitsContext = $this->currentPersisterContext = new CachedPersisterContext( + $this->em = $em; + $this->class = $class; + $this->conn = $em->getConnection(); + $this->platform = $this->conn->getDatabasePlatform(); + $this->noLimitsContext = $this->currentPersisterContext = new CachedPersisterContext( $class, new Query\ResultSetMapping(), false @@ -345,8 +333,7 @@ function ($columnName) { return $this->platform->quoteIdentifier($columnName); } . ' FROM ' . $tableName . ' WHERE ' . implode(' = ? AND ', $identifier) . ' = ?'; - - $flattenedId = $this->identifierFlattener->flattenIdentifier($versionedClass, $id); + $flattenedId = $this->em->getIdentifierFlattener()->flattenIdentifier($versionedClass, $id); $versionType = $versionProperty->getType(); $value = $this->conn->fetchColumn( diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 0392f57d85c..5642967c4e8 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -55,7 +55,6 @@ use Doctrine\ORM\Persisters\Entity\SingleTablePersister; use Doctrine\ORM\Proxy\Proxy; use Doctrine\ORM\Sequencing\AssignedGenerator; -use Doctrine\ORM\Utility\IdentifierFlattener; use Exception; use InvalidArgumentException; use UnexpectedValueException; @@ -251,13 +250,6 @@ class UnitOfWork implements PropertyChangedListener */ private $listenersInvoker; - /** - * The IdentifierFlattener used for manipulating identifiers - * - * @var \Doctrine\ORM\Utility\IdentifierFlattener - */ - private $identifierFlattener; - /** * @var Instantiator */ @@ -307,7 +299,6 @@ public function __construct(EntityManagerInterface $em) $this->eventManager = $em->getEventManager(); $this->listenersInvoker = new ListenersInvoker($em); $this->hasCache = $em->getConfiguration()->isSecondLevelCacheEnabled(); - $this->identifierFlattener = new IdentifierFlattener($this, $em->getMetadataFactory()); $this->instantiator = new Instantiator(); $this->hydrationCompleteHandler = new HydrationCompleteHandler($this->listenersInvoker, $em); } @@ -1433,7 +1424,7 @@ public function getEntityState($entity, $assume = null) return self::STATE_NEW; } - $flatId = $this->identifierFlattener->flattenIdentifier($class, $id); + $flatId = $this->em->getIdentifierFlattener()->flattenIdentifier($class, $id); if ($class->generatorType === GeneratorType::NONE) { // Check for a version field, if available, to avoid a db lookup. @@ -1801,7 +1792,7 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, Asso $this->mergeEntityStateIntoManagedCopy($entity, $managedCopy); $this->persistNew($class, $managedCopy); } else { - $flatId = $this->identifierFlattener->flattenIdentifier($class, $id); + $flatId = $this->em->getIdentifierFlattener()->flattenIdentifier($class, $id); $managedCopy = $this->tryGetById($flatId, $class->rootEntityName); if ($managedCopy) { @@ -1820,7 +1811,7 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, Asso if ($class->generatorType !== GeneratorType::NONE) { throw EntityNotFoundException::fromClassNameAndIdentifier( $class->getName(), - $this->identifierFlattener->flattenIdentifier($class, $id) + $this->em->getIdentifierFlattener()->flattenIdentifier($class, $id) ); } @@ -2490,7 +2481,7 @@ public function newInstance(ClassMetadata $class) public function createEntity($className, array $data, &$hints = []) { $class = $this->em->getClassMetadata($className); - $id = $this->identifierFlattener->flattenIdentifier($class, $data); + $id = $this->em->getIdentifierFlattener()->flattenIdentifier($class, $data); $idHash = implode(' ', $id); //$isReadOnly = isset($hints[Query::HINT_READ_ONLY]); @@ -3317,15 +3308,17 @@ private function isIdentifierEquals($entity1, $entity2) return false; } + $identifierFlattener = $this->em->getIdentifierFlattener(); + $oid1 = spl_object_hash($entity1); $oid2 = spl_object_hash($entity2); $id1 = isset($this->entityIdentifiers[$oid1]) ? $this->entityIdentifiers[$oid1] - : $this->identifierFlattener->flattenIdentifier($class, $class->getIdentifierValues($entity1)); + : $identifierFlattener->flattenIdentifier($class, $class->getIdentifierValues($entity1)); $id2 = isset($this->entityIdentifiers[$oid2]) ? $this->entityIdentifiers[$oid2] - : $this->identifierFlattener->flattenIdentifier($class, $class->getIdentifierValues($entity2)); + : $identifierFlattener->flattenIdentifier($class, $class->getIdentifierValues($entity2)); return $id1 === $id2 || implode(' ', $id1) === implode(' ', $id2); } diff --git a/tests/Doctrine/Performance/Mock/NonProxyLoadingEntityManager.php b/tests/Doctrine/Performance/Mock/NonProxyLoadingEntityManager.php index 3fc3cb61a6f..80ef3b59b0c 100644 --- a/tests/Doctrine/Performance/Mock/NonProxyLoadingEntityManager.php +++ b/tests/Doctrine/Performance/Mock/NonProxyLoadingEntityManager.php @@ -8,6 +8,7 @@ use Doctrine\ORM\Proxy\Factory\DefaultProxyResolver; use Doctrine\ORM\Proxy\Factory\StaticProxyFactory; use Doctrine\ORM\Query\ResultSetMapping; +use Doctrine\ORM\Utility\IdentifierFlattener; /** * An entity manager mock that prevents lazy-loading of proxies @@ -352,4 +353,12 @@ public function contains($object) { return $this->realEntityManager->contains($object); } + + /** + * {@inheritDoc} + */ + public function getIdentifierFlattener() + { + return $this->realEntityManager->getIdentifierFlattener(); + } } From c7a0b9b146558fa9b8f1025724177739754fc91a Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 14 Jul 2017 10:27:31 -0400 Subject: [PATCH 161/275] Optimizations around EntityPersisters --- .../AbstractEntityInheritancePersister.php | 6 ++- .../Entity/BasicEntityPersister.php | 18 +++----- .../ORM/Persisters/Entity/EntityPersister.php | 13 ------ .../Entity/JoinedSubclassPersister.php | 43 +------------------ lib/Doctrine/ORM/UnitOfWork.php | 12 +----- .../ORM/Functional/Ticket/DDC2415Test.php | 4 +- 6 files changed, 14 insertions(+), 82 deletions(-) diff --git a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php index 6857ee097c5..9fef2d3f8d3 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php @@ -43,10 +43,12 @@ protected function prepareInsertData($entity) // Populate the discriminator column $discColumn = $this->class->discriminatorColumn; + $tableName = $discColumn->getTableName(); + $columnName = $discColumn->getColumnName(); - $this->columns[$discColumn->getColumnName()] = $discColumn; + $this->columns[$columnName] = $discColumn; - $data[$discColumn->getTableName()][$discColumn->getColumnName()] = $this->class->discriminatorValue; + $data[$tableName][$columnName] = $this->class->discriminatorValue; return $data; } diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 093044b4d33..8b83a2926a3 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -651,17 +651,16 @@ protected function prepareUpdateData($entity) continue; }*/ - $owningTable = $this->getOwningTable($field); - $newVal = $change[1]; + $newVal = $change[1]; if ($property instanceof FieldMetadata) { // @todo this should be used instead - //$tableName = $property->getTableName(); + $tableName = $property->getTableName(); $columnName = $property->getColumnName(); $this->columns[$columnName] = $property; - $result[$owningTable][$columnName] = $newVal; + $result[$tableName][$columnName] = $newVal; continue; } @@ -693,6 +692,7 @@ protected function prepareUpdateData($entity) $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); foreach ($property->getJoinColumns() as $joinColumn) { + $tableName = $joinColumn->getTableName(); $columnName = $joinColumn->getColumnName(); $referencedColumnName = $joinColumn->getReferencedColumnName(); $targetField = $targetClass->fieldNames[$referencedColumnName]; @@ -705,7 +705,7 @@ protected function prepareUpdateData($entity) $this->columns[$columnName] = $joinColumn; - $result[$owningTable][$columnName] = $newValId ? $newValId[$targetField] : null; + $result[$tableName][$columnName] = $newValId ? $newValId[$targetField] : null; } } @@ -729,14 +729,6 @@ protected function prepareInsertData($entity) return $this->prepareUpdateData($entity); } - /** - * {@inheritdoc} - */ - public function getOwningTable($fieldName) - { - return $this->class->getTableName(); - } - /** * {@inheritdoc} */ diff --git a/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php index 88281fce0d2..d8c1ae0cd77 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php @@ -184,19 +184,6 @@ public function delete($entity); */ public function count($criteria = []); - /** - * Gets the name of the table that owns the column the given field is mapped to. - * - * The default implementation in BasicEntityPersister always returns the name - * of the table the entity type of this persister is mapped to, since an entity - * is always persisted to a single table with a BasicEntityPersister. - * - * @param string $fieldName The field name. - * - * @return string The table name. - */ - public function getOwningTable($fieldName); - /** * Locks all rows of this entity matching the given criteria with the specified pessimistic lock mode. * diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index aca315e3583..81407f88812 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -45,44 +45,6 @@ */ class JoinedSubclassPersister extends AbstractEntityInheritancePersister { - /** - * Map of table to quoted table names. - * - * @var array - */ - private $quotedTableMap = []; - - /** - * Gets the name of the table that owns the column the given field is mapped to. - * - * @param string $fieldName - * - * @return string - * - * @override - */ - public function getOwningTable($fieldName) - { - $property = $this->class->getProperty($fieldName); - - switch (true) { - case ($property && $this->class->isInheritedProperty($fieldName)): - $cm = $property->getDeclaringClass(); - break; - - default: - $cm = $this->class; - break; - } - - $tableName = $cm->getTableName(); - $quotedTableName = $cm->table->getQuotedQualifiedName($this->platform); - - $this->quotedTableMap[$tableName] = $quotedTableName; - - return $tableName; - } - /** * {@inheritdoc} */ @@ -211,10 +173,9 @@ public function update($entity) $isVersioned = $this->class->isVersioned(); foreach ($updateData as $tableName => $data) { - $quotedTableName = $this->quotedTableMap[$tableName]; - $versioned = $isVersioned && $this->class->versionProperty->getTableName() === $tableName; + $versioned = $isVersioned && $this->class->versionProperty->getTableName() === $tableName; - $this->updateTable($entity, $quotedTableName, $data, $versioned); + $this->updateTable($entity, $this->platform->quoteIdentifier($tableName), $data, $versioned); } // Make sure the table with the version column is updated even if no columns on that diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 5642967c4e8..3b1f4ed3ca3 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -1087,7 +1087,7 @@ private function getCommitOrder(array $entityChangeSet = null) $entityChangeSet = array_merge($this->entityInsertions, $this->entityUpdates, $this->entityDeletions); } - $calc = $this->getCommitOrderCalculator(); + $calc = new Internal\CommitOrderCalculator(); // See if there are any new classes in the changeset, that are not in the // commit order graph yet (don't have a node). @@ -2338,16 +2338,6 @@ public function lock($entity, $lockMode, $lockVersion = null) } } - /** - * Gets the CommitOrderCalculator used by the UnitOfWork to order commits. - * - * @return \Doctrine\ORM\Internal\CommitOrderCalculator - */ - public function getCommitOrderCalculator() - { - return new Internal\CommitOrderCalculator(); - } - /** * Clears the UnitOfWork. * diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php index 12a6a05efc9..ad37b077432 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php @@ -62,6 +62,8 @@ public function getId() public static function loadMetadata(ClassMetadata $metadata) { + $metadata->isMappedSuperclass = true; + $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); @@ -77,8 +79,6 @@ public static function loadMetadata(ClassMetadata $metadata) 'arguments' => [], ] ); - - $metadata->isMappedSuperclass = true; } } From de96cedd9cf5906f790893f1cd446d9572422c3b Mon Sep 17 00:00:00 2001 From: Michael Moravec Date: Wed, 12 Jul 2017 02:41:38 +0200 Subject: [PATCH 162/275] Move identifier generation to FieldMetadata --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 113 +---------------- .../ORM/Mapping/ClassMetadataFactory.php | 114 +++++++---------- .../ORM/Mapping/Driver/AnnotationDriver.php | 12 +- .../ORM/Mapping/Driver/DatabaseDriver.php | 2 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 7 +- .../Exporter/ClassMetadataExporter.php | 5 - .../Exporter/FieldMetadataExporter.php | 15 ++- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 26 +++- .../Entity/BasicEntityPersister.php | 16 ++- .../Entity/JoinedSubclassPersister.php | 14 +- .../Command/MappingDescribeCommand.php | 7 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 37 +++--- .../ORM/Tools/Export/Driver/PhpExporter.php | 10 +- .../ORM/Tools/Export/Driver/XmlExporter.php | 14 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 15 ++- lib/Doctrine/ORM/UnitOfWork.php | 44 +++++-- .../Tests/Mocks/ClassMetadataMock.php | 8 -- .../Tests/Mocks/EntityPersisterMock.php | 3 +- .../DDC1476EntityWithDefaultFieldType.php | 3 +- .../Tests/Models/DDC3579/DDC3579User.php | 3 +- .../Models/DDC5934/DDC5934BaseContract.php | 3 +- .../Tests/Models/DDC869/DDC869Payment.php | 2 +- .../Tests/Models/DDC889/DDC889Class.php | 3 +- .../Tests/Models/DDC889/DDC889SuperClass.php | 2 +- .../Tests/Models/DDC964/DDC964User.php | 3 +- .../SchemaTool/PostgreSqlSchemaToolTest.php | 2 +- .../ORM/Functional/Ticket/DDC2359Test.php | 5 + .../ORM/Functional/Ticket/DDC2387Test.php | 4 +- .../ORM/Functional/Ticket/DDC2415Test.php | 120 ------------------ .../ORM/Functional/Ticket/DDC3634Test.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 47 +++---- .../Mapping/BasicInheritanceMappingTest.php | 12 +- .../ORM/Mapping/ClassMetadataFactoryTest.php | 26 ++-- .../Tests/ORM/Mapping/ClassMetadataTest.php | 28 ++-- .../php/Doctrine.Tests.Models.Cache.City.php | 2 +- ...1476.DDC1476EntityWithDefaultFieldType.php | 3 +- ....Models.DDC2825.ExplicitSchemaAndTable.php | 2 +- ...dels.DDC2825.SchemaAndTableInTableName.php | 2 +- ...trine.Tests.Models.DDC3579.DDC3579User.php | 3 +- ...sts.Models.DDC5934.DDC5934BaseContract.php | 3 +- ...rine.Tests.Models.DDC869.DDC869Payment.php | 2 +- ...e.Tests.Models.DDC889.DDC889SuperClass.php | 2 +- ...octrine.Tests.Models.DDC964.DDC964User.php | 3 +- .../php/Doctrine.Tests.ORM.Mapping.Animal.php | 10 +- ...ctrine.Tests.ORM.Mapping.DDC1170Entity.php | 3 +- ...octrine.Tests.ORM.Mapping.DDC807Entity.php | 3 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 16 +-- .../Tests/ORM/Tools/EntityGeneratorTest.php | 20 +-- .../AbstractClassMetadataExporterTest.php | 2 +- .../Export/XmlClassMetadataExporterTest.php | 10 +- .../Doctrine.Tests.ORM.Tools.Export.User.php | 2 +- 51 files changed, 301 insertions(+), 514 deletions(-) delete mode 100644 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 659bf4d8835..08510dd010e 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -198,13 +198,6 @@ class ClassMetadata implements TableOwner, \Doctrine\Common\Persistence\Mapping\ */ public $inheritanceType = InheritanceType::NONE; - /** - * READ-ONLY: The Id generator type used by the class. - * - * @var string - */ - public $generatorType = GeneratorType::NONE; - /** * READ-ONLY: The policy used for change-tracking on entities of this class. * @@ -212,38 +205,6 @@ class ClassMetadata implements TableOwner, \Doctrine\Common\Persistence\Mapping\ */ public $changeTrackingPolicy = ChangeTrackingPolicy::DEFERRED_IMPLICIT; - /** - * READ-ONLY: The definition of the identity generator of this class. - * In case of SEQUENCE generation strategy, the definition has the following structure: - * - * array( - * 'sequenceName' => 'name', - * 'allocationSize' => 20, - * ) - * - * - * In case of CUSTOM generation strategy, the definition has the following structure: - * - * array( - * 'class' => 'ClassName', - * ) - * - * - * @var array - * - * @todo Remove! - */ - public $generatorDefinition; - - /** - * READ-ONLY: The ID generator used for generating IDs for this class. - * - * @var \Doctrine\ORM\Sequencing\Generator - * - * @todo Remove! - */ - public $idGenerator; - /** * READ-ONLY: The discriminator value of this class. * @@ -448,7 +409,6 @@ public function __sleep() 'name', 'table', 'rootEntityName', - 'idGenerator', //TODO: Does not really need to be serialized. Could be moved to runtime. ]); // The rest of the metadata is only serialized if necessary. @@ -469,14 +429,6 @@ public function __sleep() $serialized[] = 'subClasses'; } - if ($this->generatorType !== GeneratorType::NONE) { - $serialized[] = 'generatorType'; - } - - if ($this->generatorDefinition) { - $serialized[] = "generatorDefinition"; - } - if ($this->isMappedSuperclass) { $serialized[] = 'isMappedSuperclass'; } @@ -611,7 +563,13 @@ public function validateIdentifier() throw MappingException::identifierRequired($this->name); } - if ($this->generatorType !== GeneratorType::NONE && $this->isIdentifierComposite()) { + $explicitlyGeneratedProperties = array_filter($this->properties, function (Property $property) : bool { + return $property instanceof FieldMetadata + && $property->isPrimaryKey() + && $property->getIdentifierGeneratorType() !== GeneratorType::NONE; + }); + + if ($this->isIdentifierComposite() && count($explicitlyGeneratedProperties) !== 0) { throw MappingException::compositeKeyAssignedIdGeneratorRequired($this->name); } } @@ -1287,18 +1245,6 @@ public function getIdentifierColumns(EntityManagerInterface $em) return $columns; } - /** - * Sets the type of Id generator to use for the mapped class. - * - * @param int $generatorType - * - * @return void - */ - public function setIdGeneratorType($generatorType) - { - $this->generatorType = $generatorType; - } - /** * Gets the name of the primary table. * @@ -1982,51 +1928,6 @@ public function hasSqlResultSetMapping($name) return isset($this->sqlResultSetMappings[$name]); } - /** - * Sets the ID generator used to generate IDs for instances of this class. - * - * @param \Doctrine\ORM\Sequencing\Generator $generator - * - * @return void - */ - public function setIdGenerator($generator) - { - $this->idGenerator = $generator; - } - - /** - * Sets the generator definition for this class. - * For sequence definition, it must have the following structure: - * - * - * array( - * 'sequenceName' => 'name', - * 'allocationSize' => 20, - * ) - * - * - * For custom definition, it must have the following structure: - * - * - * array( - * 'class' => 'Path\To\ClassName', - * 'arguments' => [], - * ) - * - * - * @param array $definition - * - * @return void - */ - public function setGeneratorDefinition(array $definition) - { - if ($this->generatorType === GeneratorType::SEQUENCE && ! isset($definition['sequenceName'])) { - throw MappingException::missingSequenceName($this->name); - } - - $this->generatorDefinition = $definition; - } - /** * Marks this class as read only, no change tracking is applied to it. * diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 0f17bd172ff..3e23b2e90ce 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -132,7 +132,6 @@ protected function doLoadMetadata( $this->addInheritedProperties($class, $parent); $this->addInheritedEmbeddedClasses($class, $parent); - $this->inheritIdGeneratorMapping($class, $parent); $class->setInheritanceType($parent->inheritanceType); $class->setIdentifier($parent->identifier); @@ -158,12 +157,7 @@ protected function doLoadMetadata( throw MappingException::reflectionFailure($class->getName(), $e); } - // If this class has a parent the id generator strategy is inherited. - // However this is only true if the hierarchy of parents contains the root entity, - // if it consists of mapped superclasses these don't necessarily include the id field. - if (! ($parent && $rootEntityFound)) { - $this->completeIdGeneratorMapping($class); - } + $this->completeIdentifierGeneratorMappings($class); /*if ( ! $class->isMappedSuperclass) { foreach ($class->embeddedClasses as $property => $embeddableClass) { @@ -642,84 +636,83 @@ private function addInheritedSqlResultSetMappings(ClassMetadata $subClass, Class * * @throws ORMException */ - private function completeIdGeneratorMapping(ClassMetadata $class) + private function completeIdentifierGeneratorMappings(ClassMetadata $class) { - $idGenType = $class->generatorType; - $platform = $this->getTargetPlatform(); - - if ($idGenType === GeneratorType::AUTO) { - $idGenType = $platform->prefersSequences() - ? GeneratorType::SEQUENCE - : ($platform->prefersIdentityColumns() - ? GeneratorType::IDENTITY - : GeneratorType::TABLE - ); + foreach ($class->getProperties() as $property) { + if ( ! $property instanceof FieldMetadata) { + continue; + } + + $this->completeFieldIdentifierGeneratorMapping($property); + } + } - $class->setIdGeneratorType($idGenType); + private function completeFieldIdentifierGeneratorMapping(FieldMetadata $field) + { + $platform = $this->getTargetPlatform(); + $class = $field->getDeclaringClass();; + + if ($field->getIdentifierGeneratorType() === GeneratorType::AUTO) { + $field->setIdentifierGeneratorType( + $platform->prefersSequences() + ? GeneratorType::SEQUENCE + : ($platform->prefersIdentityColumns() + ? GeneratorType::IDENTITY + : GeneratorType::TABLE + ) + ); } // Create & assign an appropriate ID generator instance - switch ($class->generatorType) { + switch ($field->getIdentifierGeneratorType()) { case GeneratorType::IDENTITY: $sequenceName = null; - $property = $class->identifier - ? $class->getProperty($class->getSingleIdentifierFieldName()) - : null - ; // Platforms that do not have native IDENTITY support need a sequence to emulate this behaviour. - if ($property && $platform->usesSequenceEmulatedIdentityColumns()) { + if ($platform->usesSequenceEmulatedIdentityColumns()) { $sequencePrefix = $platform->getSequencePrefix($class->getTableName(), $class->getSchemaName()); - $idSequenceName = $platform->getIdentitySequenceName($sequencePrefix, $property->getColumnName()); + $idSequenceName = $platform->getIdentitySequenceName($sequencePrefix, $field->getColumnName()); $sequenceName = $platform->quoteIdentifier($platform->fixSchemaElementName($idSequenceName)); } - $generator = ($property && $property->getTypeName() === 'bigint') + $generator = $field->getTypeName() === 'bigint' ? new Sequencing\BigIntegerIdentityGenerator($sequenceName) : new Sequencing\IdentityGenerator($sequenceName) ; - $class->setIdGenerator($generator); + $field->setIdentifierGenerator($generator); break; case GeneratorType::SEQUENCE: // If there is no sequence definition yet, create a default definition - $definition = $class->generatorDefinition; - - if ( ! $definition) { + if ( ! $field->getIdentifierGeneratorDefinition()) { // @todo guilhermeblanco Move sequence generation to DBAL - $property = $class->identifier - ? $class->getProperty($class->getSingleIdentifierFieldName()) - : null - ; $sequencePrefix = $platform->getSequencePrefix($class->getTableName(), $class->getSchemaName()); - $idSequenceName = sprintf('%s_%s_seq', $sequencePrefix, $property->getColumnName()); + $idSequenceName = sprintf('%s_%s_seq', $sequencePrefix, $field->getColumnName()); $sequenceName = $platform->fixSchemaElementName($idSequenceName); - $definition = [ + $field->setIdentifierGeneratorDefinition([ 'sequenceName' => $sequenceName, 'allocationSize' => 1, - ]; - - $class->setGeneratorDefinition($definition); + ]); } $sequenceGenerator = new Sequencing\SequenceGenerator( - $platform->quoteIdentifier($definition['sequenceName']), - $definition['allocationSize'] + $platform->quoteIdentifier($field->getIdentifierGeneratorDefinition()['sequenceName']), + $field->getIdentifierGeneratorDefinition()['allocationSize'] ); - $class->setIdGenerator($sequenceGenerator); + $field->setIdentifierGenerator($sequenceGenerator); break; case GeneratorType::NONE: - $class->setIdGenerator(new Sequencing\AssignedGenerator()); + $field->setIdentifierGenerator(new Sequencing\AssignedGenerator()); break; case GeneratorType::UUID: - $class->setIdGenerator(new Sequencing\UuidGenerator()); + $field->setIdentifierGenerator(new Sequencing\UuidGenerator()); break; case GeneratorType::TABLE: @@ -727,38 +720,19 @@ private function completeIdGeneratorMapping(ClassMetadata $class) break; case GeneratorType::CUSTOM: - $definition = $class->generatorDefinition; - + $definition = $field->getIdentifierGeneratorDefinition(); + if ( ! isset($definition['class'])) { + throw new ORMException(sprintf('Cannot instantiate custom generator, no class has been defined')); + } if ( ! class_exists($definition['class'])) { throw new ORMException(sprintf('Cannot instantiate custom generator : %s', var_export($definition, true))); //$definition['class'])); } - $class->setIdGenerator(new $definition['class']); + $field->setIdentifierGenerator(new $definition['class']); break; default: - throw new ORMException("Unknown generator type: " . $class->generatorType); - } - } - - /** - * Inherits the ID generator mapping from a parent class. - * - * @param ClassMetadata $class - * @param ClassMetadata $parent - */ - private function inheritIdGeneratorMapping(ClassMetadata $class, ClassMetadata $parent) - { - if ($parent->generatorType) { - $class->setIdGeneratorType($parent->generatorType); - } - - if ($parent->generatorDefinition) { - $class->generatorDefinition = $parent->generatorDefinition; - } - - if ($parent->idGenerator) { - $class->setIdGenerator($parent->idGenerator); + throw new ORMException("Unknown generator type: " . $field->getIdentifierGeneratorType()); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 96ebc17fcf1..cd97647d227 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -287,8 +287,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat // Field found $fieldMetadata = $this->convertReflectionPropertyToFieldMetadata( $reflProperty, - $propertyAnnotations, - $metadata + $propertyAnnotations ); $metadata->addProperty($fieldMetadata); @@ -531,8 +530,7 @@ private function convertSqlResultSetMapping(Annotation\SqlResultSetMapping $resu private function convertReflectionPropertyToFieldMetadata( \ReflectionProperty $reflProperty, - array $propertyAnnotations, - Mapping\ClassMetadata $metadata /* @todo Should be removed once FieldMetadata owns Generator information */ + array $propertyAnnotations ) { $className = $reflProperty->getDeclaringClass()->getName(); @@ -557,7 +555,7 @@ private function convertReflectionPropertyToFieldMetadata( $strategy = strtoupper($generatedValueAnnot->strategy); $idGeneratorType = constant(sprintf('%s::%s', Mapping\GeneratorType::class, $strategy)); - $metadata->setIdGeneratorType($idGeneratorType); + $fieldMetadata->setIdentifierGeneratorType($idGeneratorType); } // Check for CustomGenerator/SequenceGenerator/TableGenerator definition @@ -565,7 +563,7 @@ private function convertReflectionPropertyToFieldMetadata( case isset($propertyAnnotations[Annotation\SequenceGenerator::class]): $seqGeneratorAnnot = $propertyAnnotations[Annotation\SequenceGenerator::class]; - $metadata->setGeneratorDefinition([ + $fieldMetadata->setIdentifierGeneratorDefinition([ 'sequenceName' => $seqGeneratorAnnot->sequenceName, 'allocationSize' => $seqGeneratorAnnot->allocationSize, ]); @@ -575,7 +573,7 @@ private function convertReflectionPropertyToFieldMetadata( case isset($propertyAnnotations[Annotation\CustomIdGenerator::class]): $customGeneratorAnnot = $propertyAnnotations[Annotation\CustomIdGenerator::class]; - $metadata->setGeneratorDefinition([ + $fieldMetadata->setIdentifierGeneratorDefinition([ 'class' => $customGeneratorAnnot->class, 'arguments' => $customGeneratorAnnot->arguments, ]); diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index 8750c053634..a2146cfc467 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -383,7 +383,7 @@ private function buildFieldMappings(ClassMetadata $metadata) // We need to check for the columns here, because we might have associations as id as well. if ($ids && count($primaryKeys) === 1) { - $metadata->setIdGeneratorType(GeneratorType::AUTO); + $ids[0]->setIdentifierGeneratorType(GeneratorType::AUTO); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 29a70e46ce0..bb0e6860049 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -332,14 +332,15 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) : 'AUTO' ; - $metadata->setIdGeneratorType(constant(sprintf('%s::%s', GeneratorType::class, strtoupper($strategy)))); + $idGeneratorType = constant(sprintf('%s::%s', GeneratorType::class, strtoupper($strategy))); + $fieldMetadata->setIdentifierGeneratorType($idGeneratorType); } // Check for SequenceGenerator/TableGenerator definition if (isset($idElement->{'sequence-generator'})) { $seqGenerator = $idElement->{'sequence-generator'}; - $metadata->setGeneratorDefinition( + $fieldMetadata->setIdentifierGeneratorDefinition( [ 'sequenceName' => (string) $seqGenerator['sequence-name'], 'allocationSize' => (string) $seqGenerator['allocation-size'], @@ -348,7 +349,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } else if (isset($idElement->{'custom-id-generator'})) { $customGenerator = $idElement->{'custom-id-generator'}; - $metadata->setGeneratorDefinition( + $fieldMetadata->setIdentifierGeneratorDefinition( [ 'class' => (string) $customGenerator['class'], 'arguments' => [], diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php index 61c0af999ea..61bbee47c46 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php @@ -132,11 +132,6 @@ private function exportInitialize(ClassMetadata $metadata, int $indentationLevel $lines[] = null; } - if (! $metadata->isIdentifierComposite()) { - $lines[] = $objectReference . '->setIdGeneratorType(Mapping\GeneratorType::' . strtoupper($metadata->generatorType) . ');'; - $lines[] = null; - } - if ($metadata->inheritanceType) { $lines[] = $objectReference . '->setInheritanceType(Mapping\InheritanceType::' . strtoupper($metadata->inheritanceType) . ');'; $lines[] = null; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php index 02d82439643..046977543ec 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php @@ -23,6 +23,7 @@ namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\GeneratorType; class FieldMetadataExporter extends LocalColumnMetadataExporter { @@ -35,11 +36,23 @@ class FieldMetadataExporter extends LocalColumnMetadataExporter */ protected function exportInstantiation(FieldMetadata $metadata) : string { - return sprintf( + $lines = []; + $lines[] = sprintf( 'new Mapping\FieldMetadata("%s", "%s", Type::getType("%s"));', $metadata->getName(), $metadata->getColumnName(), $metadata->getTypeName() ); + + if ($metadata->getIdentifierGeneratorType() !== GeneratorType::NONE) { + $lines[] = ''; + $lines[] = sprintf( + '%s->setIdentifierGeneratorType(Mapping\GeneratorType::%s);', + self::VARIABLE, + strtoupper($metadata->getIdentifierGeneratorType()) + ); + } + + return implode(PHP_EOL, $lines); } } diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index 982eef2d166..4a853d903b5 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -24,6 +24,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Reflection\ReflectionService; +use Doctrine\ORM\Sequencing\Generator; class FieldMetadata extends LocalColumnMetadata implements Property { @@ -36,12 +37,15 @@ class FieldMetadata extends LocalColumnMetadata implements Property /** @var string */ protected $name; - /** @var int */ + /** @var string */ protected $identifierGeneratorType = GeneratorType::NONE; /** @var array */ protected $identifierGeneratorDefinition = []; + /** @var Generator */ + protected $identifierGenerator; + /** * FieldMetadata constructor. * @@ -88,7 +92,7 @@ public function getName() } /** - * @return int + * @return string */ public function getIdentifierGeneratorType() { @@ -98,7 +102,7 @@ public function getIdentifierGeneratorType() /** * @param int $identifierGeneratorType */ - public function setIdentifierGeneratorType(int $identifierGeneratorType) + public function setIdentifierGeneratorType(string $identifierGeneratorType) { $this->identifierGeneratorType = $identifierGeneratorType; } @@ -119,6 +123,22 @@ public function setIdentifierGeneratorDefinition(array $identifierGeneratorDefin $this->identifierGeneratorDefinition = $identifierGeneratorDefinition; } + /** + * @return Generator + */ + public function getIdentifierGenerator() : Generator + { + return $this->identifierGenerator; + } + + /** + * @param Generator $identifierGenerator + */ + public function setIdentifierGenerator(Generator $identifierGenerator) + { + $this->identifierGenerator = $identifierGenerator; + } + /** * {@inheritdoc} */ diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 8b83a2926a3..1afb6ea3917 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -247,9 +247,8 @@ public function executeInserts() return []; } - $postInsertIds = []; - $idGenerator = $this->class->idGenerator; - $isPostInsertId = $idGenerator->isPostInsertGenerator(); + $postInsertIds = []; + $identifierComposite = $this->class->isIdentifierComposite(); $stmt = $this->conn->prepare($this->getInsertSQL()); $tableName = $this->class->getTableName(); @@ -269,8 +268,11 @@ public function executeInserts() $stmt->execute(); - if ($isPostInsertId) { - $generatedId = $idGenerator->generate($this->em, $entity); + if (! $identifierComposite + && ($property = $this->class->getProperty($this->class->getSingleIdentifierFieldName())) instanceof FieldMetadata + && $property->getIdentifierGenerator()->isPostInsertGenerator() + ) { + $generatedId = $property->getIdentifierGenerator()->generate($this->em, $entity); $id = [$this->class->identifier[0] => $generatedId]; $postInsertIds[] = [ @@ -1521,7 +1523,9 @@ protected function getInsertColumnList() break; case ($property instanceof LocalColumnMetadata): - if ($this->class->generatorType !== GeneratorType::IDENTITY || $this->class->identifier[0] !== $name) { + if (($property instanceof FieldMetadata && $property->getIdentifierGeneratorType() !== GeneratorType::IDENTITY) + || $this->class->identifier[0] !== $name + ) { $columnName = $property->getColumnName(); $columns[] = $columnName; diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index 81407f88812..dde0e80ae3b 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -54,9 +54,8 @@ public function executeInserts() return []; } - $postInsertIds = []; - $idGenerator = $this->class->idGenerator; - $isPostInsertId = $idGenerator->isPostInsertGenerator(); + $postInsertIds = []; + $identifierComposite = $this->class->isIdentifierComposite(); $rootClass = ($this->class->name !== $this->class->rootEntityName) ? $this->em->getClassMetadata($this->class->rootEntityName) : $this->class; @@ -101,8 +100,11 @@ public function executeInserts() $rootTableStmt->execute(); - if ($isPostInsertId) { - $generatedId = $idGenerator->generate($this->em, $entity); + if (! $identifierComposite + && ($property = $this->class->getProperty($this->class->getSingleIdentifierFieldName())) instanceof FieldMetadata + && $property->getIdentifierGenerator()->isPostInsertGenerator() + ) { + $generatedId = $property->getIdentifierGenerator()->generate($this->em, $entity); $id = [$this->class->identifier[0] => $generatedId]; $postInsertIds[] = [ @@ -499,7 +501,7 @@ protected function getInsertColumnList() if ( $this->class->name !== $this->class->rootEntityName || - $this->class->generatorType !== GeneratorType::IDENTITY || + $this->class->getProperty($name)->getIdentifierGeneratorType() !== GeneratorType::IDENTITY || $this->class->identifier[0] !== $name ) { $columnName = $property->getColumnName(); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index d6d605041ac..0f22ad9c9c8 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -112,8 +112,6 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage [ $this->formatField('Discriminator value', $metadata->discriminatorValue), $this->formatField('Discriminator map', $metadata->discriminatorMap), - $this->formatField('Generator type', $metadata->generatorType), - $this->formatField('Generator definition', $metadata->generatorDefinition), $this->formatField('Table', ''), ], $this->formatTable($metadata->table), @@ -334,6 +332,11 @@ private function formatColumn(ColumnMetadata $columnMetadata = null) $output[] = $this->formatField(' isUnique', $this->formatValue($columnMetadata->isUnique())); $output[] = $this->formatField(' options', $this->formatValue($columnMetadata->getOptions())); + if ($columnMetadata instanceof FieldMetadata) { + $output[] = $this->formatField(' Generator type', $this->formatValue($columnMetadata->getIdentifierGeneratorType())); + $output[] = $this->formatField(' Generator definition', $this->formatValue($columnMetadata->getIdentifierGeneratorDefinition())); + } + return $output; } diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 44081dc1cf0..b70fddbd29c 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -36,6 +36,7 @@ use Doctrine\ORM\Mapping\ManyToOneAssociationMetadata; use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; +use Doctrine\ORM\Mapping\Property; use Doctrine\ORM\Mapping\ToManyAssociationMetadata; use Doctrine\ORM\Mapping\ToOneAssociationMetadata; @@ -1165,7 +1166,7 @@ protected function generateEntityStubMethods(ClassMetadata $metadata) $methods[] = $code; } - if (( ! $property->isPrimaryKey() || $metadata->generatorType == GeneratorType::NONE) && + if (( ! $property->isPrimaryKey() || $property->getIdentifierGeneratorType() == GeneratorType::NONE) && ( ! $metadata->isEmbeddedClass || ! $this->embeddablesImmutable) && $code = $this->generateEntityStubMethod($metadata, 'set', $fieldName, $property->getTypeName(), $nullable)) { $methods[] = $code; @@ -1388,30 +1389,32 @@ protected function generateLifecycleCallbackMethod($name, $methodName, ClassMeta } /** - * @param ClassMetadata $metadata + * @param Property $metadata * * @return string */ - protected function generateIdentifierAnnotation(ClassMetadata $metadata) + protected function generateIdentifierAnnotation(Property $metadata) { $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'Id'; - if ($generatorType = $this->getIdGeneratorTypeString($metadata->generatorType)) { - $lines[] = $this->spaces.' * @' . $this->annotationsPrefix . 'GeneratedValue(strategy="' . $generatorType . '")'; - } + if ($metadata instanceof FieldMetadata) { + if ($generatorType = $this->getIdGeneratorTypeString($metadata->getIdentifierGeneratorType())) { + $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'GeneratedValue(strategy="' . $generatorType . '")'; + } - if ($metadata->generatorDefinition) { - $generator = []; + if ($metadata->getIdentifierGeneratorDefinition()) { + $generator = []; - if (isset($metadata->generatorDefinition['sequenceName'])) { - $generator[] = 'sequenceName="' . $metadata->generatorDefinition['sequenceName'] . '"'; - } + if (isset($metadata->getIdentifierGeneratorDefinition()['sequenceName'])) { + $generator[] = 'sequenceName="' . $metadata->getIdentifierGeneratorDefinition()['sequenceName'] . '"'; + } - if (isset($metadata->generatorDefinition['allocationSize'])) { - $generator[] = 'allocationSize=' . $metadata->generatorDefinition['allocationSize']; - } + if (isset($metadata->getIdentifierGeneratorDefinition()['allocationSize'])) { + $generator[] = 'allocationSize=' . $metadata->getIdentifierGeneratorDefinition()['allocationSize']; + } - $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'SequenceGenerator(' . implode(', ', $generator) . ')'; + $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'SequenceGenerator(' . implode(', ', $generator) . ')'; + } } return implode(PHP_EOL, $lines); @@ -1522,7 +1525,7 @@ protected function generateAssociationMappingPropertyDocBlock(AssociationMetadat $lines[] = $this->spaces . ' *'; if ($association->isPrimaryKey()) { - $lines[] = $this->generateIdentifierAnnotation($metadata); + $lines[] = $this->generateIdentifierAnnotation($association); } $type = null; @@ -1684,7 +1687,7 @@ protected function generateFieldMappingPropertyDocBlock(FieldMetadata $propertyM $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'Column(' . implode(', ', $column) . ')'; if ($propertyMetadata->isPrimaryKey()) { - $lines[] = $this->generateIdentifierAnnotation($metadata); + $lines[] = $this->generateIdentifierAnnotation($propertyMetadata); } if ($metadata->isVersioned() && $metadata->versionProperty->getName() === $propertyMetadata->getName()) { diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 739c9d047e6..22d6211b8a7 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -22,6 +22,7 @@ use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\JoinTableMetadata; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; @@ -142,10 +143,6 @@ public function exportClassMetadata(ClassMetadata $metadata) } } - if (! $metadata->isIdentifierComposite()) { - $lines[] = '$metadata->setIdGeneratorType(Mapping\GeneratorType::' . $metadata->generatorType . ');'; - } - foreach ($metadata->getProperties() as $property) { if ($property instanceof FieldMetadata) { $this->exportFieldMetadata($metadata, $property, $lines); @@ -190,6 +187,11 @@ private function exportFieldMetadata(ClassMetadata $metadata, FieldMetadata $pro $lines[] = '$property->setPrimaryKey(' . $this->varExport($property->isPrimaryKey()) . ');'; $lines[] = '$property->setNullable(' . $this->varExport($property->isNullable()) . ');'; $lines[] = '$property->setUnique(' . $this->varExport($property->isUnique()) . ');'; + + if ($property->getIdentifierGeneratorType() !== GeneratorType::NONE) { + $lines[] = '$property->setIdentifierGeneratorType(Mapping\GeneratorType::' . $property->getIdentifierGeneratorType() . ');'; + } + $lines[] = null; $lines[] = '$metadata->addProperty($property);'; } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 86cfdc1f897..b9b0e8401c6 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -205,12 +205,12 @@ public function exportClassMetadata(ClassMetadata $metadata) $idXml->addAttribute('length', $property->getLength()); } - if ($metadata->generatorType) { + if ($property->getIdentifierGeneratorType() !== GeneratorType::NONE) { $generatorXml = $idXml->addChild('generator'); - $generatorXml->addAttribute('strategy', $metadata->generatorType); + $generatorXml->addAttribute('strategy', $property->getIdentifierGeneratorType()); - $this->exportSequenceInformation($idXml, $metadata); + $this->exportSequenceInformation($idXml, $property); } } } @@ -487,15 +487,15 @@ private function exportTableOptions(\SimpleXMLElement $parentXml, array $options * Export sequence information (if available/configured) into the current identifier XML node * * @param \SimpleXMLElement $identifierXmlNode - * @param ClassMetadata $metadata + * @param FieldMetadata $metadata * * @return void */ - private function exportSequenceInformation(\SimpleXMLElement $identifierXmlNode, ClassMetadata $metadata) + private function exportSequenceInformation(\SimpleXMLElement $identifierXmlNode, FieldMetadata $metadata) { - $sequenceDefinition = $metadata->generatorDefinition; + $sequenceDefinition = $metadata->getIdentifierGeneratorDefinition(); - if (! ($metadata->generatorType === GeneratorType::SEQUENCE && $sequenceDefinition)) { + if (! ($metadata->getIdentifierGeneratorType() === GeneratorType::SEQUENCE && $sequenceDefinition)) { return; } diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 97b01ad5173..f7e176fbbef 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -338,12 +338,17 @@ public function getSchemaFromMetadata(array $classes) $processedClasses[$class->name] = true; - if ($class->generatorType === GeneratorType::SEQUENCE && $class->name === $class->rootEntityName) { - $definition = $class->generatorDefinition; - $quotedName = $this->platform->quoteIdentifier($definition['sequenceName']); + foreach ($class->getProperties() as $property) { + if (! $property instanceof FieldMetadata + || $property->getIdentifierGeneratorType() !== GeneratorType::SEQUENCE + || $class->name !== $class->rootEntityName) { + continue; + } + + $quotedName = $this->platform->quoteIdentifier($property->getIdentifierGeneratorDefinition()['sequenceName']); if ( ! $schema->hasSequence($quotedName)) { - $schema->createSequence($quotedName, $definition['allocationSize']); + $schema->createSequence($quotedName, $property->getIdentifierGeneratorDefinition()['allocationSize']); } } @@ -493,7 +498,7 @@ private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Tabl $options['customSchemaOptions'] = $fieldOptions; } - if ($classMetadata->generatorType === GeneratorType::IDENTITY && $classMetadata->getIdentifierFieldNames() == [$fieldName]) { + if ($fieldMetadata->getIdentifierGeneratorType() === GeneratorType::IDENTITY && $classMetadata->getIdentifierFieldNames() == [$fieldName]) { $options['autoincrement'] = true; } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 3b1f4ed3ca3..9ef252aed5c 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -545,8 +545,11 @@ public function computeChangeSet(ClassMetadata $class, $entity) continue; } - if (( ! $class->isIdentifier($name) || $class->generatorType !== GeneratorType::IDENTITY) - && (! $class->isVersioned() || $name !== $class->versionProperty->getName())) { + if ( + ( ! $class->isIdentifier($name) + || ! $class->getProperty($name) instanceof FieldMetadata + || $class->getProperty($name)->getIdentifierGeneratorType() !== GeneratorType::IDENTITY + ) && (! $class->isVersioned() || $name !== $class->versionProperty->getName())) { $actualData[$name] = $value; } } @@ -827,17 +830,20 @@ private function persistNew($class, $entity) $this->listenersInvoker->invoke($class, Events::prePersist, $entity, new LifecycleEventArgs($entity, $this->em), $invoke); } - $idGen = $class->idGenerator; + // TODO: Do not hardcode AssignedGenerator here, refactor once we implement ValueGenerationPlan + $idGen = ($class->isIdentifierComposite() || ! $class->getProperty($class->getSingleIdentifierFieldName()) instanceof FieldMetadata) + ? new AssignedGenerator() + : $class->getProperty($class->getSingleIdentifierFieldName())->getIdentifierGenerator(); if (! $idGen->isPostInsertGenerator()) { $idValue = $idGen->generate($this->em, $entity); - if (! $idGen instanceof AssignedGenerator) { - $idField = $class->getSingleIdentifierFieldName(); + if (!$idGen instanceof AssignedGenerator) { + $idField = $class->getSingleIdentifierFieldName(); $property = $class->getProperty($idField); $platform = $this->em->getConnection()->getDatabasePlatform(); - $idValue = $property->getType()->convertToPHPValue($idValue, $platform); - $idValue = [$idField => $idValue]; + $idValue = $property->getType()->convertToPHPValue($idValue, $platform); + $idValue = [$idField => $idValue]; $class->assignIdentifier($entity, $idValue); } @@ -894,7 +900,7 @@ public function recomputeSingleEntityChangeSet(ClassMetadata $class, $entity) break; case ($property instanceof FieldMetadata): - if (! $property->isPrimaryKey() || $class->generatorType !== GeneratorType::IDENTITY) { + if (! $property->isPrimaryKey() || $property->getIdentifierGeneratorType() !== GeneratorType::IDENTITY) { $actualData[$name] = $property->getValue($entity); } @@ -1060,10 +1066,15 @@ private function executeDeletions($class) // Entity with this $oid after deletion treated as NEW, even if the $oid // is obtained by a new entity because the old one went out of scope. //$this->entityStates[$oid] = self::STATE_NEW; - if ($class->generatorType !== GeneratorType::NONE) { + if (! $class->isIdentifierComposite()) { $property = $class->getProperty($class->getSingleIdentifierFieldName()); - $property->setValue($entity, null); + if ( + $property instanceof FieldMetadata + && $property->getIdentifierGeneratorType() !== GeneratorType::NONE + ) { + $property->setValue($entity, null); + } } if ($invoke !== ListenersInvoker::INVOKE_NONE) { @@ -1426,7 +1437,10 @@ public function getEntityState($entity, $assume = null) $flatId = $this->em->getIdentifierFlattener()->flattenIdentifier($class, $id); - if ($class->generatorType === GeneratorType::NONE) { + if ($class->isIdentifierComposite() + || ! $class->getProperty($class->getSingleIdentifierFieldName()) instanceof FieldMetadata + || $class->getProperty($class->getSingleIdentifierFieldName())->getIdentifierGeneratorType() === GeneratorType::NONE + ) { // Check for a version field, if available, to avoid a db lookup. if ($class->isVersioned()) { return $class->versionProperty->getValue($entity) @@ -1447,7 +1461,9 @@ public function getEntityState($entity, $assume = null) return self::STATE_NEW; } - if ( ! $class->idGenerator->isPostInsertGenerator()) { + if ($class->isIdentifierComposite() + || ! $class->getProperty($class->getSingleIdentifierFieldName()) instanceof FieldMetadata + || ! $class->getProperty($class->getSingleIdentifierFieldName())->getIdentifierGenerator()->isPostInsertGenerator()) { // if we have a pre insert generator we can't be sure that having an id // really means that the entity exists. We have to verify this through // the last resort: a db lookup @@ -1808,7 +1824,9 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, Asso if ($managedCopy === null) { // If the identifier is ASSIGNED, it is NEW, otherwise an error // since the managed entity was not found. - if ($class->generatorType !== GeneratorType::NONE) { + if (! $class->isIdentifierComposite() + && $class->getProperty($class->getSingleIdentifierFieldName()) instanceof FieldMetadata + && $class->getProperty($class->getSingleIdentifierFieldName())->getIdentifierGeneratorType() !== GeneratorType::NONE) { throw EntityNotFoundException::fromClassNameAndIdentifier( $class->getName(), $this->em->getIdentifierFlattener()->flattenIdentifier($class, $id) diff --git a/tests/Doctrine/Tests/Mocks/ClassMetadataMock.php b/tests/Doctrine/Tests/Mocks/ClassMetadataMock.php index d1703539a81..dc661237cf7 100644 --- a/tests/Doctrine/Tests/Mocks/ClassMetadataMock.php +++ b/tests/Doctrine/Tests/Mocks/ClassMetadataMock.php @@ -10,12 +10,4 @@ class ClassMetadataMock extends ClassMetadata { /* Mock API */ - - /** - * {@inheritdoc} - */ - public function setIdGeneratorType($type) - { - $this->generatorType = $type; - } } diff --git a/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php b/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php index aa6911f7b1d..24826cf97be 100644 --- a/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php +++ b/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php @@ -56,7 +56,8 @@ public function addInsert($entity) { $this->inserts[] = $entity; - if ($this->mockIdGeneratorType === GeneratorType::IDENTITY || $this->class->generatorType === GeneratorType::IDENTITY) { + if ($this->mockIdGeneratorType === GeneratorType::IDENTITY + || $this->class->getProperty($this->class->getSingleIdentifierFieldName())->getIdentifierGeneratorType() === GeneratorType::IDENTITY) { $id = $this->identityColumnValueCounter++; $this->postInsertIds[] = [ diff --git a/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php b/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php index 028fe96bbdf..60a93ca2797 100644 --- a/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php +++ b/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php @@ -50,6 +50,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -57,8 +58,6 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('string')); $metadata->addProperty($fieldMetadata); - - $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } diff --git a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php index e6265dd80df..3f0265e3846 100644 --- a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php +++ b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php @@ -88,6 +88,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('user_id'); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -106,7 +107,5 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association->setTargetEntity('DDC3579Group'); $metadata->addProperty($association); - - $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } } diff --git a/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php b/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php index 6342cd23c46..a1d9fdeb2a9 100644 --- a/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php +++ b/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php @@ -38,6 +38,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('id'); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -46,7 +47,5 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association->setTargetEntity('DDC5934Member'); $metadata->addProperty($association); - - $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } } diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php index 809fb5b217c..f49d6c4a2b7 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php @@ -26,6 +26,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -37,6 +38,5 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $metadata->isMappedSuperclass = true; $metadata->setCustomRepositoryClass(DDC869PaymentRepository::class); - $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } } diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php b/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php index cf040ce3636..8f17112307f 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php @@ -20,10 +20,9 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); - - $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } } diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php b/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php index 0be4ecd7354..71b8c0f3c6f 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php @@ -18,9 +18,9 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) { $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); $metadata->isMappedSuperclass = true; - $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php index e4605281d69..da71d2a0e31 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php @@ -115,6 +115,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('user_id'); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -169,7 +170,5 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association->setCascade(['persist', 'merge', 'detach']); $metadata->addProperty($association); - - $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php index 272273e6d95..1a1360482f0 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php @@ -22,7 +22,7 @@ public function testPostgresMetadataSequenceIncrementedBy10() { $address = $this->em->getClassMetadata(Models\CMS\CmsAddress::class); - self::assertEquals(1, $address->generatorDefinition['allocationSize']); + self::assertEquals(1, $address->getProperty('id')->getIdentifierGeneratorDefinition()['allocationSize']); } public function testGetCreateSchemaSql() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php index 219dc017d38..278eb8f91c6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php @@ -44,6 +44,11 @@ public function testIssue() ->method('getMetadataDriverImpl') ->will($this->returnValue($mockDriver)); + $mockMetadata + ->expects($this->any()) + ->method('getProperties') + ->will($this->returnValue([])); + $entityManager->expects($this->any())->method('getConfiguration')->will($this->returnValue($configuration)); $entityManager->expects($this->any())->method('getConnection')->will($this->returnValue($connection)); $entityManager diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php index ec624a1fa6a..f0760f19436 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php @@ -24,7 +24,7 @@ public function testCompositeAssociationKeyDetection() $metadata = $this->convertToClassMetadata([$product, $attributes], []); - self::assertEquals(GeneratorType::NONE, $metadata['Ddc2387Attributes']->generatorType); - self::assertEquals(GeneratorType::AUTO, $metadata['Ddc2387Product']->generatorType); + self::assertEquals(GeneratorType::NONE, $metadata['Ddc2387Attributes']->getProperty('productId')->getIdentifierGeneratorType()); + self::assertEquals(GeneratorType::AUTO, $metadata['Ddc2387Product']->getProperty('id')->getIdentifierGeneratorType()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php deleted file mode 100644 index ad37b077432..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2415Test.php +++ /dev/null @@ -1,120 +0,0 @@ -em->getConfiguration()->setMetadataDriverImpl(new StaticPHPDriver([])); - - $this->schemaTool->createSchema( - [ - $this->em->getClassMetadata(DDC2415ParentEntity::class), - $this->em->getClassMetadata(DDC2415ChildEntity::class), - ] - ); - } - - public function testTicket() - { - $parentMetadata = $this->em->getClassMetadata(DDC2415ParentEntity::class); - $childMetadata = $this->em->getClassMetadata(DDC2415ChildEntity::class); - - self::assertEquals($parentMetadata->generatorType, $childMetadata->generatorType); - self::assertEquals($parentMetadata->generatorDefinition, $childMetadata->generatorDefinition); - self::assertEquals(DDC2415Generator::class, $parentMetadata->generatorDefinition['class']); - - $e1 = new DDC2415ChildEntity("ChildEntity 1"); - $e2 = new DDC2415ChildEntity("ChildEntity 2"); - - $this->em->persist($e1); - $this->em->persist($e2); - $this->em->flush(); - $this->em->clear(); - - self::assertEquals(md5($e1->getName()), $e1->getId()); - self::assertEquals(md5($e2->getName()), $e2->getId()); - } -} - -class DDC2415ParentEntity -{ - protected $id; - - public function getId() - { - return $this->id; - } - - public static function loadMetadata(ClassMetadata $metadata) - { - $metadata->isMappedSuperclass = true; - - $fieldMetadata = new Mapping\FieldMetadata('id'); - - $fieldMetadata->setType(Type::getType('string')); - $fieldMetadata->setPrimaryKey(true); - - $metadata->addProperty($fieldMetadata); - - $metadata->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); - - $metadata->setGeneratorDefinition( - [ - 'class' => DDC2415Generator::class, - 'arguments' => [], - ] - ); - } -} - -class DDC2415ChildEntity extends DDC2415ParentEntity -{ - protected $name; - - public function __construct($name) - { - $this->name = $name; - } - - public function getName() - { - return $this->name; - } - - public static function loadMetadata(ClassMetadata $metadata) - { - $fieldMetadata = new Mapping\FieldMetadata('name'); - - $fieldMetadata->setType(Type::getType('string')); - - $metadata->addProperty($fieldMetadata); - } -} - -class DDC2415Generator implements Generator -{ - public function generate(EntityManager $em, $entity) - { - return md5($entity->getName()); - } - - public function isPostInsertGenerator() - { - return false; - } -} diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php index f8aa76238e6..beb55967c01 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php @@ -20,7 +20,7 @@ protected function setUp() $metadata = $this->em->getClassMetadata(DDC3634Entity::class); - if ( ! $metadata->idGenerator->isPostInsertGenerator()) { + if ( ! $metadata->getProperty('id')->getIdentifierGenerator()->isPostInsertGenerator()) { $this->markTestSkipped('Need a post-insert ID generator in order to make this test work correctly'); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index ce872ae92a7..2744a758eb3 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -177,13 +177,17 @@ public function testEntityOptions($class) */ public function testEntitySequence($class) { - self::assertInternalType('array', $class->generatorDefinition, 'No Sequence Definition set on this driver.'); + self::assertInternalType( + 'array', + $class->getProperty('id')->getIdentifierGeneratorDefinition(), + 'No Sequence Definition set on this driver.' + ); self::assertEquals( [ 'sequenceName' => 'tablename_seq', 'allocationSize' => 100, ], - $class->generatorDefinition + $class->getProperty('id')->getIdentifierGeneratorDefinition() ); } @@ -191,13 +195,13 @@ public function testEntityCustomGenerator() { $class = $this->createClassMetadata(Animal::class); - self::assertEquals(Mapping\GeneratorType::CUSTOM, $class->generatorType, "Generator Type"); + self::assertEquals(Mapping\GeneratorType::CUSTOM, $class->getProperty('id')->getIdentifierGeneratorType(), "Generator Type"); self::assertEquals( [ 'class' => 'stdClass', 'arguments' => [], ], - $class->generatorDefinition, + $class->getProperty('id')->getIdentifierGeneratorDefinition(), "Generator Definition" ); } @@ -317,7 +321,7 @@ public function testIdentifier($class) self::assertEquals('integer', $property->getTypeName()); self::assertEquals(['id'], $class->identifier); - self::assertEquals(Mapping\GeneratorType::AUTO, $class->generatorType, "ID-Generator is not GeneratorType::AUTO"); + self::assertEquals(Mapping\GeneratorType::AUTO, $property->getIdentifierGeneratorType(), "ID-Generator is not GeneratorType::AUTO"); return $class; } @@ -555,7 +559,7 @@ public function testDefaultFieldType() self::assertEquals('id', $idProperty->getColumnName()); self::assertEquals('name', $nameProperty->getColumnName()); - self::assertEquals(Mapping\GeneratorType::NONE, $class->generatorType); + self::assertEquals(Mapping\GeneratorType::NONE, $idProperty->getIdentifierGeneratorType()); } /** @@ -1286,13 +1290,6 @@ public static function loadMetadata(ClassMetadata $metadata) $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); $metadata->addLifecycleCallback('doStuffOnPostPersist', 'postPersist'); - $metadata->setGeneratorDefinition( - [ - 'sequenceName' => 'tablename_seq', - 'allocationSize' => 100, - ] - ); - $metadata->addNamedQuery( [ 'name' => 'all', @@ -1304,6 +1301,13 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); $fieldMetadata->setOptions(['foo' => 'bar', 'unsigned' => false]); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); + $fieldMetadata->setIdentifierGeneratorDefinition( + [ + 'sequenceName' => 'tablename_seq', + 'allocationSize' => 100, + ] + ); $metadata->addProperty($fieldMetadata); @@ -1337,7 +1341,6 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $metadata->addProperty($fieldMetadata); - $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $joinColumns = []; @@ -1415,13 +1418,15 @@ abstract class Animal public static function loadMetadata(ClassMetadata $metadata) { - $metadata->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); - $metadata->setGeneratorDefinition( + $id = new Mapping\FieldMetadata('id'); + $id->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); + $id->setIdentifierGeneratorDefinition( [ 'class' => 'stdClass', 'arguments' => [], ] ); + $metadata->addProperty($id); } } @@ -1491,6 +1496,7 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnDefinition('INT unsigned NOT NULL'); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -1500,8 +1506,6 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setColumnDefinition('VARCHAR(255) NOT NULL'); $metadata->addProperty($fieldMetadata); - - $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } @@ -1527,6 +1531,7 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -1538,8 +1543,6 @@ public static function loadMetadata(ClassMetadata $metadata) $discrColumn->setColumnDefinition("ENUM('ONE','TWO')"); $metadata->setDiscriminatorColumn($discrColumn); - - $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } @@ -1609,10 +1612,10 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); - $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } @@ -1650,10 +1653,10 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); - $metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index 407f6a7f879..6a2faf3258a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -149,10 +149,10 @@ public function testGeneratedValueFromMappedSuperclass() /* @var ClassMetadata $class */ $class = $this->cmf->getMetadataFor(SuperclassEntity::class); - self::assertInstanceOf(SequenceGenerator::class, $class->idGenerator); + self::assertInstanceOf(SequenceGenerator::class, $class->getProperty('id')->getIdentifierGenerator()); self::assertEquals( ['allocationSize' => 1, 'sequenceName' => 'foo'], - $class->generatorDefinition + $class->getProperty('id')->getIdentifierGeneratorDefinition() ); } @@ -165,10 +165,10 @@ public function testSequenceDefinitionInHierarchyWithSandwichMappedSuperclass() /* @var ClassMetadata $class */ $class = $this->cmf->getMetadataFor(HierarchyD::class); - self::assertInstanceOf(SequenceGenerator::class, $class->idGenerator); + self::assertInstanceOf(SequenceGenerator::class, $class->getProperty('id')->getIdentifierGenerator()); self::assertEquals( ['allocationSize' => 1, 'sequenceName' => 'foo'], - $class->generatorDefinition + $class->getProperty('id')->getIdentifierGeneratorDefinition() ); } @@ -181,10 +181,10 @@ public function testMultipleMappedSuperclasses() /* @var ClassMetadata $class */ $class = $this->cmf->getMetadataFor(MediumSuperclassEntity::class); - self::assertInstanceOf(SequenceGenerator::class, $class->idGenerator); + self::assertInstanceOf(SequenceGenerator::class, $class->getProperty('id')->getIdentifierGenerator()); self::assertEquals( ['allocationSize' => 1, 'sequenceName' => 'foo'], - $class->generatorDefinition + $class->getProperty('id')->getIdentifierGeneratorDefinition() ); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index ea92ce8c838..09cce32171f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -54,7 +54,7 @@ public function testGetMetadataForSingleClass() // Prechecks self::assertEquals([], $cm1->parentClasses); self::assertEquals(Mapping\InheritanceType::NONE, $cm1->inheritanceType); - self::assertEquals(Mapping\GeneratorType::AUTO, $cm1->generatorType); + self::assertEquals(Mapping\GeneratorType::AUTO, $cm1->getProperty('id')->getIdentifierGeneratorType()); self::assertTrue($cm1->hasField('name')); self::assertCount(4, $cm1->getProperties()); // 2 fields + 2 associations self::assertEquals('group', $cm1->table->getName()); @@ -72,12 +72,11 @@ public function testGetMetadataFor_ReturnsLoadedCustomIdGenerator() { $cm1 = $this->createValidClassMetadata(); - $cm1->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); - - $cm1->generatorDefinition = [ + $cm1->getProperty('id')->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); + $cm1->getProperty('id')->setIdentifierGeneratorDefinition([ 'class' => CustomIdGenerator::class, 'arguments' => [], - ]; + ]); $cmf = $this->createTestFactory(); @@ -85,20 +84,19 @@ public function testGetMetadataFor_ReturnsLoadedCustomIdGenerator() $actual = $cmf->getMetadataFor($cm1->name); - self::assertEquals(Mapping\GeneratorType::CUSTOM, $actual->generatorType); - self::assertInstanceOf(CustomIdGenerator::class, $actual->idGenerator); + self::assertEquals(Mapping\GeneratorType::CUSTOM, $actual->getProperty('id')->getIdentifierGeneratorType()); + self::assertInstanceOf(CustomIdGenerator::class, $actual->getProperty('id')->getIdentifierGenerator()); } public function testGetMetadataFor_ThrowsExceptionOnUnknownCustomGeneratorClass() { $cm1 = $this->createValidClassMetadata(); - $cm1->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); - - $cm1->generatorDefinition = [ + $cm1->getProperty('id')->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); + $cm1->getProperty('id')->setIdentifierGeneratorDefinition([ 'class' => 'NotExistingGenerator', 'arguments' => [], - ]; + ]); $cmf = $this->createTestFactory(); @@ -112,7 +110,7 @@ public function testGetMetadataFor_ThrowsExceptionOnUnknownCustomGeneratorClass( public function testGetMetadataFor_ThrowsExceptionOnMissingCustomGeneratorDefinition() { $cm1 = $this->createValidClassMetadata(); - $cm1->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); + $cm1->getProperty('id')->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); $cmf = $this->createTestFactory(); $cmf->setMetadataForClass($cm1->name, $cm1); $this->expectException(ORMException::class); @@ -294,6 +292,7 @@ protected function createValidClassMetadata() $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $cm1->addProperty($fieldMetadata); @@ -329,9 +328,6 @@ protected function createValidClassMetadata() $cm1->addProperty($association); - // and an id generator type - $cm1->setIdGeneratorType(Mapping\GeneratorType::AUTO); - return $cm1; } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index ccef56c4a7a..0e4cb2a5d16 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -1407,21 +1407,6 @@ public function testManyToManySelfReferencingNamingStrategyDefaults() self::assertEquals($inverseJoinColumns, $joinTable->getInverseJoinColumns()); } - /** - * @group DDC-2608 - */ - public function testSetSequenceGeneratorThrowsExceptionWhenSequenceNameIsMissing() - { - $cm = new ClassMetadata(CMS\CmsUser::class); - - $cm->setIdGeneratorType(Mapping\GeneratorType::SEQUENCE); - $cm->initializeReflection(new RuntimeReflectionService()); - - $this->expectException(Mapping\MappingException::class); - - $cm->setGeneratorDefinition([]); - } - /** * @group DDC-2662 */ @@ -1430,9 +1415,18 @@ public function testQuotedSequenceName() $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->setGeneratorDefinition(['sequenceName' => 'foo', 'allocationSize' => 1]); + $id = new Mapping\FieldMetadata('id'); + $id->setIdentifierGeneratorType(Mapping\GeneratorType::SEQUENCE); + $id->setIdentifierGeneratorDefinition([ + 'sequenceName' => 'foo', + 'allocationSize' => 1, + ]); + $cm->addProperty($id); - self::assertEquals(['sequenceName' => 'foo', 'allocationSize' => 1], $cm->generatorDefinition); + self::assertEquals( + ['sequenceName' => 'foo', 'allocationSize' => 1], + $cm->getProperty('id')->getIdentifierGeneratorDefinition() + ); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index f71bf6e2357..782a62a0a1a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -14,7 +14,6 @@ $metadata->setTable($tableMetadata); $metadata->setInheritanceType(Mapping\InheritanceType::NONE); $metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); -$metadata->setIdGeneratorType(Mapping\GeneratorType::IDENTITY); $metadata->setCache( new Mapping\CacheMetadata( Mapping\CacheUsage::READ_ONLY, @@ -25,6 +24,7 @@ $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::IDENTITY); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php index 017681606e5..2e589951f1c 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php @@ -8,6 +8,7 @@ $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -15,5 +16,3 @@ $fieldMetadata->setType(Type::getType('string')); $metadata->addProperty($fieldMetadata); - -$metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php index f4ad05fc8e9..9d1f0bf634f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php @@ -10,11 +10,11 @@ /* @var $metadata ClassMetadata */ $metadata->setTable($tableMetadata); -$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php index 5e5ab11b90d..736a9ca53a1 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php @@ -10,10 +10,10 @@ /* @var $metadata ClassMetadata */ $metadata->setTable($tableMetadata); -$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php index 2882f3e2655..c5e8992ec8a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php @@ -9,6 +9,7 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('user_id'); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -26,5 +27,3 @@ $association->setTargetEntity('DDC3579Group'); $metadata->addProperty($association); - -$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php index 0f6c27960f5..93dc13c82c5 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php @@ -9,6 +9,7 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('id'); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -17,5 +18,3 @@ $association->setTargetEntity('DDC5934Member'); $metadata->addProperty($association); - -$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php index 90342944a1e..83e1060a378 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php @@ -11,6 +11,7 @@ $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -20,4 +21,3 @@ $metadata->addProperty($fieldMetadata); $metadata->setCustomRepositoryClass(DDC869PaymentRepository::class); -$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php index 830afd69118..d6e066f37e8 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php @@ -9,8 +9,8 @@ $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); $metadata->setCustomRepositoryClass(DDC889SuperClass::class); -$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php index 04db2e314ed..fc153639bd7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php @@ -10,6 +10,7 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('user_id'); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -64,5 +65,3 @@ $association->setCascade(['persist','merge','detach']); $metadata->addProperty($association); - -$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php index 9376e238300..3145abdbd8b 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php @@ -31,14 +31,12 @@ $fieldMetadata->setPrimaryKey(true); $fieldMetadata->setNullable(false); $fieldMetadata->setUnique(false); - -$metadata->addProperty($fieldMetadata); - -$metadata->setIdGeneratorType(Mapping\GeneratorType::CUSTOM); - -$metadata->setGeneratorDefinition( +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); +$fieldMetadata->setIdentifierGeneratorDefinition( [ 'class' => 'stdClass', 'arguments' => [], ] ); + +$metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php index 19c20284962..2ca7e68cbf2 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php @@ -9,6 +9,7 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnDefinition('INT unsigned NOT NULL'); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -17,5 +18,3 @@ $fieldMetadata->setColumnDefinition('VARCHAR(255) NOT NULL'); $metadata->addProperty($fieldMetadata); - -$metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php index cb80eaa79e8..9ab3d36a15a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php @@ -8,6 +8,7 @@ $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -18,5 +19,3 @@ $discrColumn->setColumnDefinition("ENUM('ONE','TWO')"); $metadata->setDiscriminatorColumn($discrColumn); - -$metadata->setIdGeneratorType(Mapping\GeneratorType::NONE); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index 0194970cb35..32ba2e66c39 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -55,18 +55,18 @@ ] ); -$metadata->setGeneratorDefinition( - [ - 'sequenceName' => 'tablename_seq', - 'allocationSize' => 100, - ] -); - $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); $fieldMetadata->setOptions(['foo' => 'bar', 'unsigned' => false]); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); +$fieldMetadata->setIdentifierGeneratorDefinition( + [ + 'sequenceName' => 'tablename_seq', + 'allocationSize' => 100, + ] +); $metadata->addProperty($fieldMetadata); @@ -101,8 +101,6 @@ $metadata->addProperty($versionFieldMetadata); -$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); - $joinColumns = []; $joinColumn = new Mapping\JoinColumnMetadata(); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index f628685de8f..971bd507c12 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -116,6 +116,7 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $fieldMetadata->setPrimaryKey(true); $fieldMetadata->setNullable(false); $fieldMetadata->setUnique(false); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -162,7 +163,6 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $metadata->addLifecycleCallback('loading', 'postLoad'); $metadata->addLifecycleCallback('willBeRemoved', 'preRemove'); - $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); foreach ($embeddedClasses as $fieldName => $embeddedClass) { $metadata->mapEmbedded( @@ -193,6 +193,7 @@ private function generateEntityTypeFixture(array $field) $fieldMetadata->setPrimaryKey(true); $fieldMetadata->setNullable(false); $fieldMetadata->setUnique(false); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); @@ -203,8 +204,6 @@ private function generateEntityTypeFixture(array $field) $metadata->addProperty($fieldMetadata); - $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); - $this->generator->writeEntityClass($metadata, $this->tmpDir); return $metadata; @@ -559,7 +558,6 @@ public function testLoadMetadata() self::assertEquals($cm->getTableName(), $metadata->getTableName()); self::assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); self::assertEquals($cm->identifier, $metadata->identifier); - self::assertEquals($cm->idGenerator, $metadata->idGenerator); self::assertEquals($cm->customRepositoryClassName, $metadata->customRepositoryClassName); // self::assertEquals($cm->embeddedClasses, $metadata->embeddedClasses); // self::assertEquals($cm->isEmbeddedClass, $metadata->isEmbeddedClass); @@ -595,7 +593,6 @@ public function testLoadPrefixedMetadata() self::assertEquals($cm->getTableName(), $metadata->getTableName()); self::assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); self::assertEquals($cm->identifier, $metadata->identifier); - self::assertEquals($cm->idGenerator, $metadata->idGenerator); self::assertEquals($cm->customRepositoryClassName, $metadata->customRepositoryClassName); // $isbn = $this->newInstance($embeddedMetadata); @@ -657,18 +654,16 @@ public function testGenerateEntityWithSequenceGenerator() $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); - - $metadata->addProperty($fieldMetadata); - - $metadata->setIdGeneratorType(Mapping\GeneratorType::SEQUENCE); - - $metadata->setGeneratorDefinition( + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::SEQUENCE); + $fieldMetadata->setIdentifierGeneratorDefinition( [ 'sequenceName' => 'DDC1784_ID_SEQ', 'allocationSize' => 1, ] ); + $metadata->addProperty($fieldMetadata); + $this->generator->writeEntityClass($metadata, $this->tmpDir); $filename = $this->tmpDir . DIRECTORY_SEPARATOR @@ -697,11 +692,10 @@ public function testGenerateEntityWithMultipleInverseJoinColumns() $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::SEQUENCE); $metadata->addProperty($fieldMetadata); - $metadata->setIdGeneratorType(Mapping\GeneratorType::SEQUENCE); - $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('unidade_centro_custo'); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index 3740b7f1870..d73694829cd 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -177,7 +177,7 @@ public function testIdentifierIsExported($class) self::assertTrue($property->isPrimaryKey()); self::assertEquals(['id'], $class->identifier); - self::assertEquals(GeneratorType::IDENTITY, $class->generatorType, "Generator Type wrong"); + self::assertEquals(GeneratorType::IDENTITY, $class->getProperty('id')->getIdentifierGeneratorType(), "Generator Type wrong"); return $class; } diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php index a0ea1e7e41f..34fbecf3c32 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php @@ -50,18 +50,16 @@ public function testSequenceGenerator() { $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); - - $metadata->addProperty($fieldMetadata); - - $metadata->setIdGeneratorType(Mapping\GeneratorType::SEQUENCE); - - $metadata->setGeneratorDefinition( + $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::SEQUENCE); + $fieldMetadata->setIdentifierGeneratorDefinition( [ 'sequenceName' => 'seq_entity_test_id', 'allocationSize' => 5, ] ); + $metadata->addProperty($fieldMetadata); + $expectedFileContent = <<<'XML' addOption('foo', ['bar' => 'baz']); $metadata->setTable($tableMetadata); -$metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); $metadata->setInheritanceType(Mapping\InheritanceType::NONE); $metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); @@ -23,6 +22,7 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); +$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); $metadata->addProperty($fieldMetadata); From df9af26d94d00cfb6425d1a3fb25ee43b5413789 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 17 Jul 2017 14:18:40 -0400 Subject: [PATCH 163/275] Removed enqueueing for insert support from EntityPersister. There was no reason for that since concurrent inserts NEVER guarantee incremental order on a single INSERT statement. Any attempt to reliably implement is not accurate and thus I am removing any possibility of this ever becoming a reality. --- .../Entity/AbstractEntityPersister.php | 22 +---- .../Entity/BasicEntityPersister.php | 97 ++++++------------ .../ORM/Persisters/Entity/EntityPersister.php | 45 ++------- .../Entity/JoinedSubclassPersister.php | 99 +++++++++---------- lib/Doctrine/ORM/UnitOfWork.php | 29 ++---- .../Tests/Mocks/EntityPersisterMock.php | 43 +++----- .../Entity/AbstractEntityPersisterTest.php | 38 ++----- ...rictReadWriteCachedEntityPersisterTest.php | 12 +-- .../JoinedSubclassPersisterTest.php | 44 --------- 9 files changed, 118 insertions(+), 311 deletions(-) delete mode 100644 tests/Doctrine/Tests/ORM/Persisters/JoinedSubclassPersisterTest.php diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php index 7d2bd2379f5..15b6bbc19e4 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php @@ -139,22 +139,6 @@ public function __construct(EntityPersister $persister, Region $region, EntityMa $this->timestampKey = new TimestampCacheKey($this->class->rootEntityName); } - /** - * {@inheritdoc} - */ - public function addInsert($entity) - { - $this->persister->addInsert($entity); - } - - /** - * {@inheritdoc} - */ - public function getInserts() - { - return $this->persister->getInserts(); - } - /** * {@inheritdoc} */ @@ -375,11 +359,11 @@ public function getOwningTable($fieldName) /** * {@inheritdoc} */ - public function executeInserts() + public function insert($entity) { - $this->queuedCache['insert'] = $this->persister->getInserts(); + $this->queuedCache['insert'][] = $entity; - return $this->persister->executeInserts(); + return $this->persister->insert($entity); } /** diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 1afb6ea3917..1aa0424c38d 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -61,8 +61,7 @@ * The persisting operations that are invoked during a commit of a UnitOfWork to * persist the persistent entity state are: * - * - {@link addInsert} : To schedule an entity for insertion. - * - {@link executeInserts} : To execute all scheduled insertions. + * - {@link insert} : To insert the persistent state of an entity. * - {@link update} : To update the persistent state of an entity. * - {@link delete} : To delete the persistent state of an entity. * @@ -141,13 +140,6 @@ class BasicEntityPersister implements EntityPersister */ protected $em; - /** - * Queued inserts. - * - * @var array - */ - protected $queuedInserts = []; - /** * The map of column names to DBAL columns used when INSERTing or UPDATEing an entity. * @@ -225,71 +217,46 @@ public function getResultSetMapping() /** * {@inheritdoc} */ - public function addInsert($entity) - { - $this->queuedInserts[spl_object_hash($entity)] = $entity; - } - - /** - * {@inheritdoc} - */ - public function getInserts() + public function insert($entity) { - return $this->queuedInserts; - } - - /** - * {@inheritdoc} - */ - public function executeInserts() - { - if ( ! $this->queuedInserts) { - return []; - } - $postInsertIds = []; $identifierComposite = $this->class->isIdentifierComposite(); $stmt = $this->conn->prepare($this->getInsertSQL()); $tableName = $this->class->getTableName(); + $insertData = $this->prepareInsertData($entity); - foreach ($this->queuedInserts as $entity) { - $insertData = $this->prepareInsertData($entity); - - if (isset($insertData[$tableName])) { - $paramIndex = 1; + if (isset($insertData[$tableName])) { + $paramIndex = 1; - foreach ($insertData[$tableName] as $columnName => $value) { - $type = $this->columns[$columnName]->getType(); + foreach ($insertData[$tableName] as $columnName => $value) { + $type = $this->columns[$columnName]->getType(); - $stmt->bindValue($paramIndex++, $value, $type); - } + $stmt->bindValue($paramIndex++, $value, $type); } + } - $stmt->execute(); + $stmt->execute(); - if (! $identifierComposite - && ($property = $this->class->getProperty($this->class->getSingleIdentifierFieldName())) instanceof FieldMetadata - && $property->getIdentifierGenerator()->isPostInsertGenerator() - ) { - $generatedId = $property->getIdentifierGenerator()->generate($this->em, $entity); - $id = [$this->class->identifier[0] => $generatedId]; + if (! $identifierComposite + && ($property = $this->class->getProperty($this->class->getSingleIdentifierFieldName())) instanceof FieldMetadata + && $property->getIdentifierGenerator()->isPostInsertGenerator() + ) { + $generatedId = $property->getIdentifierGenerator()->generate($this->em, $entity); + $id = [$this->class->identifier[0] => $generatedId]; - $postInsertIds[] = [ - 'generatedId' => $generatedId, - 'entity' => $entity, - ]; - } else { - $id = $this->class->getIdentifierValues($entity); - } + $postInsertIds = [ + 'generatedId' => $generatedId, + ]; + } else { + $id = $this->class->getIdentifierValues($entity); + } - if ($this->class->isVersioned()) { - $this->assignDefaultVersionValue($entity, $id); - } + if ($this->class->isVersioned()) { + $this->assignDefaultVersionValue($entity, $id); } $stmt->closeCursor(); - $this->queuedInserts = []; return $postInsertIds; } @@ -672,17 +639,13 @@ protected function prepareUpdateData($entity) continue; } - if ($newVal !== null) { - $oid = spl_object_hash($newVal); - - if (isset($this->queuedInserts[$oid]) || $uow->isScheduledForInsert($newVal)) { - // The associated entity $newVal is not yet persisted, so we must - // set $newVal = null, in order to insert a null value and schedule an - // extra update on the UnitOfWork. - $uow->scheduleExtraUpdate($entity, [$field => [null, $newVal]]); + if ($newVal !== null && $uow->isScheduledForInsert($newVal)) { + // The associated entity $newVal is not yet persisted, so we must + // set $newVal = null, in order to insert a null value and schedule an + // extra update on the UnitOfWork. + $uow->scheduleExtraUpdate($entity, [$field => [null, $newVal]]); - $newVal = null; - } + $newVal = null; } $newValId = null; diff --git a/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php index d8c1ae0cd77..1d76026607b 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php @@ -48,23 +48,6 @@ public function getClassMetadata(); */ public function getResultSetMapping(); - /** - * Get all queued inserts. - * - * @return array - */ - public function getInserts(); - - /** - * @TODO - It should not be here. - * But its necessary since JoinedSubclassPersister#executeInserts invoke the root persister. - * - * Gets the INSERT SQL used by the persister to persist a new entity. - * - * @return string - */ - public function getInsertSQL(); - /** * Gets the SELECT SQL to select one or more entities by a set of field criteria. * @@ -131,29 +114,20 @@ public function getSelectConditionStatementSQL( ); /** - * Adds an entity to the queued insertions. - * The entity remains queued until {@link executeInserts} is invoked. + * Inserts an entity. Returns any generated post-insert identifiers that were created as a result of the insertion. + * The insertion happens instantaneously. * - * @param object $entity The entity to queue for insertion. + * Subclasses may override this method to customize the semantics of entity deletion. * - * @return void + * @return array An array of any generated post-insert IDs. Empty array if entity class does not use the IDENTITY generation strategy. */ - public function addInsert($entity); + public function insert($entity); /** - * Executes all queued entity insertions and returns any generated post-insert - * identifiers that were created as a result of the insertions. - * - * If no inserts are queued, invoking this method is a NOOP. + * Updates a managed entity. The entity is updated according to its current changeset in the running UnitOfWork. + * If there is no changeset, nothing is updated. * - * @return array An array of any generated post-insert IDs. This will be an empty array - * if the entity class does not use the IDENTITY generation strategy. - */ - public function executeInserts(); - - /** - * Updates a managed entity. The entity is updated according to its current changeset - * in the running UnitOfWork. If there is no changeset, nothing is updated. + * Subclasses may override this method to customize the semantics of entity update. * * @param object $entity The entity to update. * @@ -164,8 +138,7 @@ public function update($entity); /** * Deletes a managed entity. * - * The entity to delete must be managed and have a persistent identifier. - * The deletion happens instantaneously. + * The entity to delete must be managed and have a persistent identifier. The deletion happens instantaneously. * * Subclasses may override this method to customize the semantics of entity deletion. * diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index dde0e80ae3b..fb909a63618 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -48,12 +48,8 @@ class JoinedSubclassPersister extends AbstractEntityInheritancePersister /** * {@inheritdoc} */ - public function executeInserts() + public function insert($entity) { - if ( ! $this->queuedInserts) { - return []; - } - $postInsertIds = []; $identifierComposite = $this->class->isIdentifierComposite(); $rootClass = ($this->class->name !== $this->class->rootEntityName) @@ -86,68 +82,65 @@ public function executeInserts() // Execute all inserts. For each entity: // 1) Insert on root table // 2) Insert on sub tables - foreach ($this->queuedInserts as $entity) { - $insertData = $this->prepareInsertData($entity); + $insertData = $this->prepareInsertData($entity); - // Execute insert on root table - $paramIndex = 1; + // Execute insert on root table + $paramIndex = 1; - foreach ($insertData[$rootTableName] as $columnName => $value) { - $type = $this->columns[$columnName]->getType(); + foreach ($insertData[$rootTableName] as $columnName => $value) { + $type = $this->columns[$columnName]->getType(); - $rootTableStmt->bindValue($paramIndex++, $value, $type); - } + $rootTableStmt->bindValue($paramIndex++, $value, $type); + } - $rootTableStmt->execute(); + $rootTableStmt->execute(); - if (! $identifierComposite - && ($property = $this->class->getProperty($this->class->getSingleIdentifierFieldName())) instanceof FieldMetadata - && $property->getIdentifierGenerator()->isPostInsertGenerator() - ) { - $generatedId = $property->getIdentifierGenerator()->generate($this->em, $entity); - $id = [$this->class->identifier[0] => $generatedId]; - - $postInsertIds[] = [ - 'generatedId' => $generatedId, - 'entity' => $entity, - ]; - } else { - $id = $this->em->getUnitOfWork()->getEntityIdentifier($entity); - } + if (! $identifierComposite + && ($property = $this->class->getProperty($this->class->getSingleIdentifierFieldName())) instanceof FieldMetadata + && $property->getIdentifierGenerator()->isPostInsertGenerator() + ) { + $generatedId = $property->getIdentifierGenerator()->generate($this->em, $entity); + $id = [$this->class->identifier[0] => $generatedId]; - if ($this->class->isVersioned()) { - $this->assignDefaultVersionValue($entity, $id); - } + $postInsertIds = [ + 'generatedId' => $generatedId, + ]; + } else { + $id = $this->em->getUnitOfWork()->getEntityIdentifier($entity); + } - // Execute inserts on subtables. - // The order doesn't matter because all child tables link to the root table via FK. - foreach ($subTableStmts as $tableName => $stmt) { - /** @var \Doctrine\DBAL\Statement $stmt */ - $paramIndex = 1; - $data = isset($insertData[$tableName]) - ? $insertData[$tableName] - : []; + if ($this->class->isVersioned()) { + $this->assignDefaultVersionValue($entity, $id); + } - foreach ((array) $id as $idName => $idVal) { - $type = Type::getType('string'); + // Execute inserts on subtables. + // The order doesn't matter because all child tables link to the root table via FK. + foreach ($subTableStmts as $tableName => $stmt) { + /** @var \Doctrine\DBAL\Statement $stmt */ + $paramIndex = 1; + $data = isset($insertData[$tableName]) + ? $insertData[$tableName] + : []; - if (isset($this->columns[$idName])) { - $type = $this->columns[$idName]->getType(); - } + foreach ((array) $id as $idName => $idVal) { + $type = Type::getType('string'); - $stmt->bindValue($paramIndex++, $idVal, $type); + if (isset($this->columns[$idName])) { + $type = $this->columns[$idName]->getType(); } - foreach ($data as $columnName => $value) { - if (!is_array($id) || !isset($id[$columnName])) { - $type = $this->columns[$columnName]->getType(); + $stmt->bindValue($paramIndex++, $idVal, $type); + } - $stmt->bindValue($paramIndex++, $value, $type); - } - } + foreach ($data as $columnName => $value) { + if (!is_array($id) || !isset($id[$columnName])) { + $type = $this->columns[$columnName]->getType(); - $stmt->execute(); + $stmt->bindValue($paramIndex++, $value, $type); + } } + + $stmt->execute(); } $rootTableStmt->closeCursor(); @@ -156,8 +149,6 @@ public function executeInserts() $stmt->closeCursor(); } - $this->queuedInserts = []; - return $postInsertIds; } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 9ef252aed5c..9c08742f6fa 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -947,36 +947,23 @@ public function recomputeSingleEntityChangeSet(ClassMetadata $class, $entity) */ private function executeInserts($class) { - $entities = []; $className = $class->name; $persister = $this->getEntityPersister($className); $invoke = $this->listenersInvoker->getSubscribedSystems($class, Events::postPersist); foreach ($this->entityInsertions as $oid => $entity) { - if ($this->em->getClassMetadata(get_class($entity))->name !== $className) { continue; } - $persister->addInsert($entity); - - unset($this->entityInsertions[$oid]); - - if ($invoke !== ListenersInvoker::INVOKE_NONE) { - $entities[] = $entity; - } - } - - $postInsertIds = $persister->executeInserts(); + $postInsertId = $persister->insert($entity); - if ($postInsertIds) { - // Persister returned post-insert IDs - foreach ($postInsertIds as $postInsertId) { + if ($postInsertId) { + // Persister returned post-insert IDs $idField = $class->getSingleIdentifierFieldName(); $property = $class->getProperty($idField); $platform = $this->em->getConnection()->getDatabasePlatform(); $idValue = $property->getType()->convertToPHPValue($postInsertId['generatedId'], $platform); - $entity = $postInsertId['entity']; $oid = spl_object_hash($entity); $property->setValue($entity, $idValue); @@ -987,12 +974,14 @@ private function executeInserts($class) $this->addToIdentityMap($entity); } - } - foreach ($entities as $entity) { - $eventArgs = new LifecycleEventArgs($entity, $this->em); + unset($this->entityInsertions[$oid]); - $this->listenersInvoker->invoke($class, Events::postPersist, $entity, $eventArgs, $invoke); + if ($invoke !== ListenersInvoker::INVOKE_NONE) { + $eventArgs = new LifecycleEventArgs($entity, $this->em); + + $this->listenersInvoker->invoke($class, Events::postPersist, $entity, $eventArgs, $invoke); + } } } diff --git a/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php b/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php index 24826cf97be..38c76c7a18c 100644 --- a/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php +++ b/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php @@ -37,22 +37,25 @@ class EntityPersisterMock extends BasicEntityPersister */ private $mockIdGeneratorType; - /** - * @var array - */ - private $postInsertIds = []; - /** * @var bool */ private $existsCalled = false; /** - * @param object $entity + * @param int $genType * - * @return mixed + * @return void */ - public function addInsert($entity) + public function setMockIdGeneratorType($genType) + { + $this->mockIdGeneratorType = $genType; + } + + /** + * {@inheritdoc} + */ + public function insert($entity) { $this->inserts[] = $entity; @@ -60,32 +63,12 @@ public function addInsert($entity) || $this->class->getProperty($this->class->getSingleIdentifierFieldName())->getIdentifierGeneratorType() === GeneratorType::IDENTITY) { $id = $this->identityColumnValueCounter++; - $this->postInsertIds[] = [ + return [ 'generatedId' => $id, - 'entity' => $entity, ]; - return $id; } - return null; - } - - /** - * @return array - */ - public function executeInserts() - { - return $this->postInsertIds; - } - - /** - * @param int $genType - * - * @return void - */ - public function setMockIdGeneratorType($genType) - { - $this->mockIdGeneratorType = $genType; + return []; } /** diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php index 5e2736ca88b..3e2f36eee3b 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php @@ -57,15 +57,13 @@ abstract class AbstractEntityPersisterTest extends OrmTestCase protected $entityPersisterMockMethods = [ 'getClassMetadata', 'getResultSetMapping', - 'getInserts', 'getInsertSQL', 'getSelectSQL', 'getCountSQL', 'expandParameters', 'expandCriteriaParameters', 'getSelectConditionStatementSQL', - 'addInsert', - 'executeInserts', + 'insert', 'update', 'delete', 'getOwningTable', @@ -134,30 +132,6 @@ public function testImplementsEntityPersister() self::assertInstanceOf(CachedEntityPersister::class, $persister); } - public function testInvokeAddInsert() - { - $persister = $this->createPersisterDefault(); - $entity = new Country("Foo"); - - $this->entityPersister->expects($this->once()) - ->method('addInsert') - ->with($this->equalTo($entity)); - - self::assertNull($persister->addInsert($entity)); - } - - public function testInvokeGetInserts() - { - $persister = $this->createPersisterDefault(); - $entity = new Country("Foo"); - - $this->entityPersister->expects($this->once()) - ->method('getInserts') - ->will($this->returnValue([$entity])); - - self::assertEquals([$entity], $persister->getInserts()); - } - public function testInvokeGetSelectSQL() { $persister = $this->createPersisterDefault(); @@ -222,15 +196,17 @@ public function testInvokeSelectConditionStatementSQL() self::assertEquals('name = 1', $persister->getSelectConditionStatementSQL('id', 1, $assoc, '=')); } - public function testInvokeExecuteInserts() + public function testInvokeInsert() { $persister = $this->createPersisterDefault(); + $entity = new Country("Foo"); $this->entityPersister->expects($this->once()) - ->method('executeInserts') - ->will($this->returnValue(['id' => 1])); + ->method('insert') + ->with($this->equalTo($entity)) + ->will($this->returnValue(['generatedId' => 1])); - self::assertEquals(['id' => 1], $persister->executeInserts()); + self::assertEquals(['generatedId' => 1], $persister->insert($entity)); } public function testInvokeUpdate() diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersisterTest.php index a73fe557644..7e2118e58de 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersisterTest.php @@ -59,20 +59,12 @@ public function testInsertTransactionCommitShouldPutCache() ->with($this->equalTo($key), $this->equalTo($entry)); $this->entityPersister->expects($this->once()) - ->method('addInsert') + ->method('insert') ->with($this->equalTo($entity)); - $this->entityPersister->expects($this->once()) - ->method('getInserts') - ->will($this->returnValue([$entity])); - - $this->entityPersister->expects($this->once()) - ->method('executeInserts'); - $this->em->getUnitOfWork()->registerManaged($entity, ['id'=>1], ['id'=>1, 'name'=>'Foo']); - $persister->addInsert($entity); - $persister->executeInserts(); + $persister->insert($entity); self::assertCount(1, $property->getValue($persister)); diff --git a/tests/Doctrine/Tests/ORM/Persisters/JoinedSubclassPersisterTest.php b/tests/Doctrine/Tests/ORM/Persisters/JoinedSubclassPersisterTest.php deleted file mode 100644 index 652e52cb24c..00000000000 --- a/tests/Doctrine/Tests/ORM/Persisters/JoinedSubclassPersisterTest.php +++ /dev/null @@ -1,44 +0,0 @@ -em = $this->getTestEntityManager(); - $this->persister = new JoinedSubclassPersister($this->em, $this->em->getClassMetadata(RootClass::class)); - } - - /** - * @group DDC-3470 - */ - public function testExecuteInsertsWillReturnEmptySetWithNoQueuedInserts() - { - self::assertSame([], $this->persister->executeInserts()); - } -} From 1e9a91d6b170db2d9388b94c47fb6ad3f30fe9ec Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 17 Jul 2017 14:42:07 -0400 Subject: [PATCH 164/275] Return array of identifier field names instead of hardcoded identifier --- lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php | 2 +- lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php | 2 +- lib/Doctrine/ORM/UnitOfWork.php | 2 +- tests/Doctrine/Tests/Mocks/EntityPersisterMock.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 1aa0424c38d..2caf1f83fd8 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -246,7 +246,7 @@ public function insert($entity) $id = [$this->class->identifier[0] => $generatedId]; $postInsertIds = [ - 'generatedId' => $generatedId, + $this->class->getSingleIdentifierFieldName() => $generatedId, ]; } else { $id = $this->class->getIdentifierValues($entity); diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index fb909a63618..06c65b6b820 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -103,7 +103,7 @@ public function insert($entity) $id = [$this->class->identifier[0] => $generatedId]; $postInsertIds = [ - 'generatedId' => $generatedId, + $this->class->getSingleIdentifierFieldName() => $generatedId, ]; } else { $id = $this->em->getUnitOfWork()->getEntityIdentifier($entity); diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 9c08742f6fa..8844b2e54c5 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -963,7 +963,7 @@ private function executeInserts($class) $idField = $class->getSingleIdentifierFieldName(); $property = $class->getProperty($idField); $platform = $this->em->getConnection()->getDatabasePlatform(); - $idValue = $property->getType()->convertToPHPValue($postInsertId['generatedId'], $platform); + $idValue = $property->getType()->convertToPHPValue($postInsertId[$idField], $platform); $oid = spl_object_hash($entity); $property->setValue($entity, $idValue); diff --git a/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php b/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php index 38c76c7a18c..50cbead9a3e 100644 --- a/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php +++ b/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php @@ -64,7 +64,7 @@ public function insert($entity) $id = $this->identityColumnValueCounter++; return [ - 'generatedId' => $id, + $this->class->getSingleIdentifierFieldName() => $id, ]; } From b874948a8f4129c490a730a292eb8556f3b40319 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 17 Jul 2017 17:28:48 -0400 Subject: [PATCH 165/275] Ensure we are using getClassName() which will be later available in ComponentMetadata --- lib/Doctrine/ORM/AbstractQuery.php | 6 +- lib/Doctrine/ORM/Cache/DefaultCache.php | 14 +-- .../ORM/Cache/DefaultCollectionHydrator.php | 2 +- .../ORM/Cache/DefaultEntityHydrator.php | 4 +- lib/Doctrine/ORM/Cache/DefaultQueryCache.php | 16 ++-- .../AbstractCollectionPersister.php | 12 +-- ...rictReadWriteCachedCollectionPersister.php | 4 +- .../ReadWriteCachedCollectionPersister.php | 4 +- .../Entity/AbstractEntityPersister.php | 16 ++-- ...onStrictReadWriteCachedEntityPersister.php | 4 +- .../Entity/ReadWriteCachedEntityPersister.php | 4 +- lib/Doctrine/ORM/EntityManager.php | 35 +++---- lib/Doctrine/ORM/EntityRepository.php | 4 +- .../ORM/Internal/Hydration/ObjectHydrator.php | 2 +- .../Hydration/SimpleObjectHydrator.php | 2 +- .../ORM/Mapping/AssociationMetadata.php | 2 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 44 ++++++--- .../ORM/Mapping/ClassMetadataFactory.php | 40 ++++---- .../ORM/Mapping/Driver/AnnotationDriver.php | 18 ++-- .../ORM/Mapping/Driver/DatabaseDriver.php | 7 +- .../Mapping/Driver/NewAnnotationDriver.php | 18 ++-- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 4 +- .../ORM/Mapping/EmbeddedClassMetadata.php | 2 +- .../Exporter/ClassMetadataExporter.php | 2 +- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 2 +- lib/Doctrine/ORM/Mapping/MappingException.php | 2 +- .../ORM/Mapping/TransientMetadata.php | 2 +- .../ORM/ORMInvalidArgumentException.php | 2 +- lib/Doctrine/ORM/PersistentCollection.php | 2 +- .../Collection/ManyToManyPersister.php | 8 +- .../Collection/OneToManyPersister.php | 6 +- .../Entity/BasicEntityPersister.php | 12 +-- .../Entity/JoinedSubclassPersister.php | 18 ++-- .../Entity/SingleTablePersister.php | 4 +- .../ORM/Persisters/SqlExpressionVisitor.php | 2 +- .../ORM/Proxy/Factory/ProxyDefinition.php | 8 +- .../Proxy/Factory/ProxyDefinitionFactory.php | 6 +- .../ORM/Proxy/Factory/ProxyGenerator.php | 2 +- .../Query/Exec/MultiTableDeleteExecutor.php | 6 +- .../Query/Exec/MultiTableUpdateExecutor.php | 6 +- lib/Doctrine/ORM/Query/Parser.php | 10 +- .../ORM/Query/ResultSetMappingBuilder.php | 16 ++-- lib/Doctrine/ORM/Query/SqlWalker.php | 18 ++-- .../Repository/DefaultRepositoryFactory.php | 2 +- .../Tools/AttachEntityListenersListener.php | 6 +- .../Console/Command/ConvertMappingCommand.php | 2 +- .../Command/GenerateEntitiesCommand.php | 2 +- .../Command/GenerateProxiesCommand.php | 2 +- .../Command/MappingDescribeCommand.php | 4 +- .../ORM/Tools/Console/MetadataFilter.php | 2 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 36 +++---- .../Tools/Export/Driver/AbstractExporter.php | 2 +- .../Export/Driver/AnnotationExporter.php | 2 +- .../ORM/Tools/Export/Driver/XmlExporter.php | 2 +- .../ORM/Tools/ResolveTargetEntityListener.php | 2 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 16 ++-- lib/Doctrine/ORM/Tools/SchemaValidator.php | 50 +++++----- lib/Doctrine/ORM/UnitOfWork.php | 94 +++++++++---------- lib/Doctrine/ORM/Utility/PersisterHelper.php | 2 +- .../EventListener/CacheMetadataListener.php | 8 +- .../Tests/ORM/Cache/DefaultCacheTest.php | 4 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 4 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 14 +-- .../AbstractClassMetadataExporterTest.php | 4 +- 64 files changed, 340 insertions(+), 318 deletions(-) diff --git a/lib/Doctrine/ORM/AbstractQuery.php b/lib/Doctrine/ORM/AbstractQuery.php index 9273b9911dd..17c398bf959 100644 --- a/lib/Doctrine/ORM/AbstractQuery.php +++ b/lib/Doctrine/ORM/AbstractQuery.php @@ -404,7 +404,7 @@ public function processParameterValue($value) } if ($value instanceof Mapping\ClassMetadata) { - return $value->discriminatorValue ?: $value->name; + return $value->discriminatorValue ?: $value->getClassName(); } if ($value instanceof Collection) { @@ -466,7 +466,7 @@ protected function getResultSetMapping() private function translateNamespaces(Query\ResultSetMapping $rsm) { $translate = function ($alias) { - return $this->em->getClassMetadata($alias)->getName(); + return $this->em->getClassMetadata($alias)->getClassName(); }; $rsm->aliasMap = array_map($translate, $rsm->aliasMap); @@ -1032,7 +1032,7 @@ private function getTimestampKey() $metadata = $this->em->getClassMetadata($entityName); - return new Cache\TimestampCacheKey($metadata->rootEntityName); + return new Cache\TimestampCacheKey($metadata->getRootClassName()); } /** diff --git a/lib/Doctrine/ORM/Cache/DefaultCache.php b/lib/Doctrine/ORM/Cache/DefaultCache.php index e6914186288..1db9bb3c5e4 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCache.php +++ b/lib/Doctrine/ORM/Cache/DefaultCache.php @@ -79,7 +79,7 @@ public function __construct(EntityManagerInterface $em) public function getEntityCacheRegion($className) { $metadata = $this->em->getClassMetadata($className); - $persister = $this->uow->getEntityPersister($metadata->rootEntityName); + $persister = $this->uow->getEntityPersister($metadata->getRootClassName()); if ( ! ($persister instanceof CachedPersister)) { return null; @@ -109,7 +109,7 @@ public function getCollectionCacheRegion($className, $association) public function containsEntity($className, $identifier) { $metadata = $this->em->getClassMetadata($className); - $persister = $this->uow->getEntityPersister($metadata->rootEntityName); + $persister = $this->uow->getEntityPersister($metadata->getRootClassName()); if ( ! ($persister instanceof CachedPersister)) { return false; @@ -124,7 +124,7 @@ public function containsEntity($className, $identifier) public function evictEntity($className, $identifier) { $metadata = $this->em->getClassMetadata($className); - $persister = $this->uow->getEntityPersister($metadata->rootEntityName); + $persister = $this->uow->getEntityPersister($metadata->getRootClassName()); if ( ! ($persister instanceof CachedPersister)) { return; @@ -139,7 +139,7 @@ public function evictEntity($className, $identifier) public function evictEntityRegion($className) { $metadata = $this->em->getClassMetadata($className); - $persister = $this->uow->getEntityPersister($metadata->rootEntityName); + $persister = $this->uow->getEntityPersister($metadata->getRootClassName()); if ( ! ($persister instanceof CachedPersister)) { return; @@ -156,7 +156,7 @@ public function evictEntityRegions() $metadatas = $this->em->getMetadataFactory()->getAllMetadata(); foreach ($metadatas as $metadata) { - $persister = $this->uow->getEntityPersister($metadata->rootEntityName); + $persister = $this->uow->getEntityPersister($metadata->getRootClassName()); if ( ! ($persister instanceof CachedPersister)) { continue; @@ -300,7 +300,7 @@ private function buildEntityCacheKey(ClassMetadata $metadata, $identifier) $identifier = $this->toIdentifierArray($metadata, $identifier); } - return new EntityCacheKey($metadata->rootEntityName, $identifier); + return new EntityCacheKey($metadata->getRootClassName(), $identifier); } /** @@ -316,7 +316,7 @@ private function buildCollectionCacheKey(ClassMetadata $metadata, $association, $ownerIdentifier = $this->toIdentifierArray($metadata, $ownerIdentifier); } - return new CollectionCacheKey($metadata->rootEntityName, $association, $ownerIdentifier); + return new CollectionCacheKey($metadata->getRootClassName(), $association, $ownerIdentifier); } /** diff --git a/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php b/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php index 197b3e8e980..57c517fc585 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php @@ -65,7 +65,7 @@ public function buildCacheEntry(ClassMetadata $metadata, CollectionCacheKey $key $data = []; foreach ($collection as $index => $entity) { - $data[$index] = new EntityCacheKey($metadata->rootEntityName, $this->uow->getEntityIdentifier($entity)); + $data[$index] = new EntityCacheKey($metadata->getRootClassName(), $this->uow->getEntityIdentifier($entity)); } return new CollectionCacheEntry($data); diff --git a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php index 06d3c0bb14b..5ff22beb7f6 100644 --- a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php @@ -151,7 +151,7 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e $data[$name] = new AssociationCacheEntry($targetEntity, $targetId); } - return new EntityCacheEntry($metadata->name, $data); + return new EntityCacheEntry($metadata->getClassName(), $data); } /** @@ -192,7 +192,7 @@ public function loadCacheEntry( $targetEntity = $association->getTargetEntity(); $assocMetadata = $this->em->getClassMetadata($targetEntity); - $assocKey = new EntityCacheKey($assocMetadata->rootEntityName, $assocId); + $assocKey = new EntityCacheKey($assocMetadata->getRootClassName(), $assocId); $assocPersister = $this->uow->getEntityPersister($targetEntity); $assocRegion = $assocPersister->getCacheRegion(); $assocEntry = $assocRegion->get($assocKey); diff --git a/lib/Doctrine/ORM/Cache/DefaultQueryCache.php b/lib/Doctrine/ORM/Cache/DefaultQueryCache.php index d07428ddf18..3190ec3819a 100644 --- a/lib/Doctrine/ORM/Cache/DefaultQueryCache.php +++ b/lib/Doctrine/ORM/Cache/DefaultQueryCache.php @@ -116,7 +116,7 @@ public function get(QueryCacheKey $key, ResultSetMapping $rsm, array $hints = [] $cm = $this->em->getClassMetadata($entityName); $generateKeys = function (array $entry) use ($cm): EntityCacheKey { - return new EntityCacheKey($cm->rootEntityName, $entry['identifier']); + return new EntityCacheKey($cm->getRootClassName(), $entry['identifier']); }; $cacheKeys = new CollectionCacheEntry(array_map($generateKeys, $entry->result)); @@ -157,7 +157,7 @@ public function get(QueryCacheKey $key, ResultSetMapping $rsm, array $hints = [] // *-to-one association if (isset($assoc['identifier'])) { - $assocKey = new EntityCacheKey($assocMetadata->rootEntityName, $assoc['identifier']); + $assocKey = new EntityCacheKey($assocMetadata->getRootClassName(), $assoc['identifier']); if (($assocEntry = $assocRegion->get($assocKey)) === null) { if ($this->cacheLogger !== null) { @@ -187,14 +187,14 @@ public function get(QueryCacheKey $key, ResultSetMapping $rsm, array $hints = [] } $generateKeys = function ($id) use ($assocMetadata): EntityCacheKey { - return new EntityCacheKey($assocMetadata->rootEntityName, $id); + return new EntityCacheKey($assocMetadata->getRootClassName(), $id); }; $assocKeys = new CollectionCacheEntry(array_map($generateKeys, $assoc['list'])); $assocEntries = $assocRegion->getMultiple($assocKeys); // *-to-many association - $collection = []; + $collection = []; foreach ($assoc['list'] as $assocIndex => $assocId) { $assocEntry = is_array($assocEntries) && array_key_exists($assocIndex, $assocEntries) ? $assocEntries[$assocIndex] : null; @@ -348,7 +348,7 @@ private function storeAssociationCache(QueryCacheKey $key, AssociationMetadata $ // Handle *-to-one associations if ($association instanceof ToOneAssociationMetadata) { $assocIdentifier = $this->uow->getEntityIdentifier($assocValue); - $entityKey = new EntityCacheKey($assocMetadata->rootEntityName, $assocIdentifier); + $entityKey = new EntityCacheKey($assocMetadata->getRootClassName(), $assocIdentifier); if ((! $assocValue instanceof Proxy && ($key->cacheMode & Cache::MODE_REFRESH)) || ! $assocRegion->contains($entityKey)) { // Entity put fail @@ -358,7 +358,7 @@ private function storeAssociationCache(QueryCacheKey $key, AssociationMetadata $ } return [ - 'targetEntity' => $assocMetadata->rootEntityName, + 'targetEntity' => $assocMetadata->getRootClassName(), 'identifier' => $assocIdentifier, ]; } @@ -368,7 +368,7 @@ private function storeAssociationCache(QueryCacheKey $key, AssociationMetadata $ foreach ($assocValue as $assocItemIndex => $assocItem) { $assocIdentifier = $this->uow->getEntityIdentifier($assocItem); - $entityKey = new EntityCacheKey($assocMetadata->rootEntityName, $assocIdentifier); + $entityKey = new EntityCacheKey($assocMetadata->getRootClassName(), $assocIdentifier); if (($key->cacheMode & Cache::MODE_REFRESH) || ! $assocRegion->contains($entityKey)) { // Entity put fail @@ -381,7 +381,7 @@ private function storeAssociationCache(QueryCacheKey $key, AssociationMetadata $ } return [ - 'targetEntity' => $assocMetadata->rootEntityName, + 'targetEntity' => $assocMetadata->getRootClassName(), 'list' => $list, ]; } diff --git a/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php b/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php index 77384b40d15..42c20d779fd 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php @@ -173,7 +173,7 @@ public function storeCollectionCache(CollectionCacheKey $key, $elements) { /* @var $targetPersister CachedEntityPersister */ $association = $this->sourceEntity->getProperty($key->association); - $targetPersister = $this->uow->getEntityPersister($this->targetEntity->rootEntityName); + $targetPersister = $this->uow->getEntityPersister($this->targetEntity->getRootClassName()); $targetRegion = $targetPersister->getCacheRegion(); $targetHydrator = $targetPersister->getEntityHydrator(); @@ -193,7 +193,7 @@ public function storeCollectionCache(CollectionCacheKey $key, $elements) $class = $this->targetEntity; $className = ClassUtils::getClass($elements[$index]); - if ($className !== $this->targetEntity->name) { + if ($className !== $this->targetEntity->getClassName()) { $class = $this->metadataFactory->getMetadataFor($className); } @@ -233,7 +233,7 @@ public function count(PersistentCollection $collection) { $fieldName = $this->association->getName(); $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); - $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $fieldName, $ownerId); + $key = new CollectionCacheKey($this->sourceEntity->getRootClassName(), $fieldName, $ownerId); $entry = $this->region->get($key); if ($entry !== null) { @@ -258,8 +258,8 @@ 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); + $this->evictElementCache($this->sourceEntity->getRootClassName(), $collection->getOwner()); + $this->evictElementCache($this->targetEntity->getRootClassName(), $element); } return $persisterResult; @@ -289,7 +289,7 @@ public function loadCriteria(PersistentCollection $collection, Criteria $criteri protected function evictCollectionCache(PersistentCollection $collection) { $key = new CollectionCacheKey( - $this->sourceEntity->rootEntityName, + $this->sourceEntity->getRootClassName(), $this->association->getName(), $this->uow->getEntityIdentifier($collection->getOwner()) ); diff --git a/lib/Doctrine/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php b/lib/Doctrine/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php index 92c9d3cbaa4..452e042eb8c 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php @@ -65,7 +65,7 @@ public function delete(PersistentCollection $collection) { $fieldName = $this->association->getName(); $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); - $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $fieldName, $ownerId); + $key = new CollectionCacheKey($this->sourceEntity->getRootClassName(), $fieldName, $ownerId); $this->persister->delete($collection); @@ -86,7 +86,7 @@ public function update(PersistentCollection $collection) $fieldName = $this->association->getName(); $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); - $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $fieldName, $ownerId); + $key = new CollectionCacheKey($this->sourceEntity->getRootClassName(), $fieldName, $ownerId); // Invalidate non initialized collections OR ordered collection if (($isDirty && ! $isInitialized) || diff --git a/lib/Doctrine/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php b/lib/Doctrine/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php index cbccd9b0e79..bda93d5bb8b 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php @@ -96,7 +96,7 @@ public function afterTransactionRolledBack() public function delete(PersistentCollection $collection) { $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); - $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $this->association->getName(), $ownerId); + $key = new CollectionCacheKey($this->sourceEntity->getRootClassName(), $this->association->getName(), $ownerId); $lock = $this->region->lock($key); $this->persister->delete($collection); @@ -126,7 +126,7 @@ public function update(PersistentCollection $collection) $this->persister->update($collection); $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); - $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $this->association->getName(), $ownerId); + $key = new CollectionCacheKey($this->sourceEntity->getRootClassName(), $this->association->getName(), $ownerId); $lock = $this->region->lock($key); if ($lock === null) { diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php index 15b6bbc19e4..b249f0048b4 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php @@ -136,7 +136,7 @@ public function __construct(EntityPersister $persister, Region $region, EntityMa $this->cacheLogger = $cacheConfig->getCacheLogger(); $this->timestampRegion = $cacheFactory->getTimestampRegion(); $this->hydrator = $cacheFactory->buildEntityHydrator($em, $class); - $this->timestampKey = new TimestampCacheKey($this->class->rootEntityName); + $this->timestampKey = new TimestampCacheKey($this->class->getRootClassName()); } /** @@ -195,7 +195,7 @@ public function getSelectConditionStatementSQL( public function exists($entity, Criteria $extraConditions = null) { if (null === $extraConditions) { - $key = new EntityCacheKey($this->class->rootEntityName, $this->class->getIdentifierValues($entity)); + $key = new EntityCacheKey($this->class->getRootClassName(), $this->class->getIdentifierValues($entity)); if ($this->region->contains($key)) { return true; @@ -229,7 +229,7 @@ public function storeEntityCache($entity, EntityCacheKey $key) $class = $this->class; $className = ClassUtils::getClass($entity); - if ($className !== $this->class->name) { + if ($className !== $this->class->getClassName()) { $class = $this->metadataFactory->getMetadataFor($className); } @@ -273,7 +273,7 @@ private function storeJoinedAssociations($entity) $assocId = $this->uow->getEntityIdentifier($assocEntity); $assocMetadata = $this->metadataFactory->getMetadataFor($targetEntity); - $assocKey = new EntityCacheKey($assocMetadata->rootEntityName, $assocId); + $assocKey = new EntityCacheKey($assocMetadata->getRootClassName(), $assocId); $assocPersister = $this->uow->getEntityPersister($targetEntity); $assocPersister->storeEntityCache($assocEntity, $assocKey); @@ -460,12 +460,12 @@ public function loadAll(array $criteria = [], array $orderBy = [], $limit = null */ public function loadById(array $identifier, $entity = null) { - $cacheKey = new EntityCacheKey($this->class->rootEntityName, $identifier); + $cacheKey = new EntityCacheKey($this->class->getRootClassName(), $identifier); $cacheEntry = $this->region->get($cacheKey); $class = $this->class; if ($cacheEntry !== null) { - if ($cacheEntry->class !== $this->class->name) { + if ($cacheEntry->class !== $this->class->getClassName()) { $class = $this->metadataFactory->getMetadataFor($cacheEntry->class); } @@ -487,7 +487,7 @@ public function loadById(array $identifier, $entity = null) $class = $this->class; $className = ClassUtils::getClass($entity); - if ($className !== $this->class->name) { + if ($className !== $this->class->getClassName()) { $class = $this->metadataFactory->getMetadataFor($className); } @@ -668,6 +668,6 @@ protected function buildCollectionCacheKey(AssociationMetadata $association, $ow /** @var ClassMetadata $metadata */ $metadata = $this->metadataFactory->getMetadataFor($association->getSourceEntity()); - return new CollectionCacheKey($metadata->rootEntityName, $association->getName(), $ownerId); + return new CollectionCacheKey($metadata->getRootClassName(), $association->getName(), $ownerId); } } diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php index a2844673bee..d040daff3a6 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php @@ -78,7 +78,7 @@ public function afterTransactionRolledBack() */ public function delete($entity) { - $key = new EntityCacheKey($this->class->rootEntityName, $this->uow->getEntityIdentifier($entity)); + $key = new EntityCacheKey($this->class->getRootClassName(), $this->uow->getEntityIdentifier($entity)); $deleted = $this->persister->delete($entity); if ($deleted) { @@ -103,7 +103,7 @@ public function update($entity) private function updateCache($entity, $isChanged) { $class = $this->metadataFactory->getMetadataFor(get_class($entity)); - $key = new EntityCacheKey($class->rootEntityName, $this->uow->getEntityIdentifier($entity)); + $key = new EntityCacheKey($class->getRootClassName(), $this->uow->getEntityIdentifier($entity)); $entry = $this->hydrator->buildCacheEntry($class, $key, $entity); $cached = $this->region->put($key, $entry); $isChanged = $isChanged ?: $cached; diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersister.php index 79a4c8c3dad..0319742eb4f 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersister.php @@ -101,7 +101,7 @@ public function afterTransactionRolledBack() */ public function delete($entity) { - $key = new EntityCacheKey($this->class->rootEntityName, $this->uow->getEntityIdentifier($entity)); + $key = new EntityCacheKey($this->class->getRootClassName(), $this->uow->getEntityIdentifier($entity)); $lock = $this->region->lock($key); $deleted = $this->persister->delete($entity); @@ -126,7 +126,7 @@ public function delete($entity) */ public function update($entity) { - $key = new EntityCacheKey($this->class->rootEntityName, $this->uow->getEntityIdentifier($entity)); + $key = new EntityCacheKey($this->class->getRootClassName(), $this->uow->getEntityIdentifier($entity)); $lock = $this->region->lock($key); $this->persister->update($entity); diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 28cb0a4fc85..20ae67da8f8 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -394,6 +394,7 @@ public function flush() public function find($entityName, $id, $lockMode = null, $lockVersion = null) { $class = $this->metadataFactory->getMetadataFor(ltrim($entityName, '\\')); + $className = $class->getClassName(); if (! is_array($id)) { if ($class->isIdentifierComposite()) { @@ -417,7 +418,7 @@ public function find($entityName, $id, $lockMode = null, $lockVersion = null) foreach ($class->identifier as $identifier) { if ( ! isset($id[$identifier])) { - throw ORMException::missingIdentifierField($class->name, $identifier); + throw ORMException::missingIdentifierField($className, $identifier); } $sortedId[$identifier] = $id[$identifier]; @@ -425,14 +426,14 @@ public function find($entityName, $id, $lockMode = null, $lockVersion = null) } if ($id) { - throw ORMException::unrecognizedIdentifierFields($class->name, array_keys($id)); + throw ORMException::unrecognizedIdentifierFields($className, array_keys($id)); } $unitOfWork = $this->getUnitOfWork(); // Check identity map first - if (($entity = $unitOfWork->tryGetById($sortedId, $class->rootEntityName)) !== false) { - if ( ! ($entity instanceof $class->name)) { + if (($entity = $unitOfWork->tryGetById($sortedId, $class->getRootClassName())) !== false) { + if ( ! ($entity instanceof $className)) { return null; } @@ -444,7 +445,7 @@ public function find($entityName, $id, $lockMode = null, $lockVersion = null) case LockMode::NONE === $lockMode: case LockMode::PESSIMISTIC_READ === $lockMode: case LockMode::PESSIMISTIC_WRITE === $lockMode: - $persister = $unitOfWork->getEntityPersister($class->name); + $persister = $unitOfWork->getEntityPersister($className); $persister->refresh($sortedId, $entity, $lockMode); break; } @@ -452,12 +453,12 @@ public function find($entityName, $id, $lockMode = null, $lockVersion = null) return $entity; // Hit! } - $persister = $unitOfWork->getEntityPersister($class->name); + $persister = $unitOfWork->getEntityPersister($className); switch (true) { case LockMode::OPTIMISTIC === $lockMode: if ( ! $class->isVersioned()) { - throw OptimisticLockException::notVersioned($class->name); + throw OptimisticLockException::notVersioned($className); } $entity = $persister->load($sortedId); @@ -485,6 +486,7 @@ public function find($entityName, $id, $lockMode = null, $lockVersion = null) public function getReference($entityName, $id) { $class = $this->metadataFactory->getMetadataFor(ltrim($entityName, '\\')); + $className = $class->getClassName(); if ( ! is_array($id)) { if ($class->isIdentifierComposite()) { @@ -508,7 +510,7 @@ public function getReference($entityName, $id) foreach ($class->identifier as $identifier) { if ( ! isset($id[$identifier])) { - throw ORMException::missingIdentifierField($class->name, $identifier); + throw ORMException::missingIdentifierField($className, $identifier); } $sortedId[$identifier] = $id[$identifier]; @@ -516,19 +518,19 @@ public function getReference($entityName, $id) } if ($id) { - throw ORMException::unrecognizedIdentifierFields($class->name, array_keys($id)); + throw ORMException::unrecognizedIdentifierFields($className, array_keys($id)); } // Check identity map first, if its already in there just return it. - if (($entity = $this->unitOfWork->tryGetById($sortedId, $class->rootEntityName)) !== false) { - return ($entity instanceof $class->name) ? $entity : null; + if (($entity = $this->unitOfWork->tryGetById($sortedId, $class->getRootClassName())) !== false) { + return ($entity instanceof $className) ? $entity : null; } if ($class->subClasses) { return $this->find($entityName, $sortedId); } - $entity = $this->proxyFactory->getProxy($class->name, $sortedId); + $entity = $this->proxyFactory->getProxy($className, $sortedId); $this->unitOfWork->registerManaged($entity, $sortedId, []); @@ -541,6 +543,7 @@ public function getReference($entityName, $id) public function getPartialReference($entityName, $id) { $class = $this->metadataFactory->getMetadataFor(ltrim($entityName, '\\')); + $className = $class->getClassName(); if ( ! is_array($id)) { if ($class->isIdentifierComposite()) { @@ -564,7 +567,7 @@ public function getPartialReference($entityName, $id) foreach ($class->identifier as $identifier) { if ( ! isset($id[$identifier])) { - throw ORMException::missingIdentifierField($class->name, $identifier); + throw ORMException::missingIdentifierField($className, $identifier); } $sortedId[$identifier] = $id[$identifier]; @@ -572,12 +575,12 @@ public function getPartialReference($entityName, $id) } if ($id) { - throw ORMException::unrecognizedIdentifierFields($class->name, array_keys($id)); + throw ORMException::unrecognizedIdentifierFields($className, array_keys($id)); } // Check identity map first, if its already in there just return it. - if (($entity = $this->unitOfWork->tryGetById($sortedId, $class->rootEntityName)) !== false) { - return ($entity instanceof $class->name) ? $entity : null; + if (($entity = $this->unitOfWork->tryGetById($sortedId, $class->getRootClassName())) !== false) { + return ($entity instanceof $className) ? $entity : null; } $entity = $this->unitOfWork->newInstance($class); diff --git a/lib/Doctrine/ORM/EntityRepository.php b/lib/Doctrine/ORM/EntityRepository.php index 532d8616ce5..b18f33b1342 100644 --- a/lib/Doctrine/ORM/EntityRepository.php +++ b/lib/Doctrine/ORM/EntityRepository.php @@ -63,7 +63,7 @@ class EntityRepository implements ObjectRepository, Selectable */ public function __construct(EntityManagerInterface $em, Mapping\ClassMetadata $class) { - $this->entityName = $class->name; + $this->entityName = $class->getClassName(); $this->em = $em; $this->class = $class; } @@ -135,7 +135,7 @@ public function createNativeNamedQuery($queryName) */ public function clear() { - $this->em->clear($this->class->rootEntityName); + $this->em->clear($this->class->getRootClassName()); } /** diff --git a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php index edeca8c543b..edecfc517ed 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php @@ -283,7 +283,7 @@ private function getEntityFromIdentityMap($className, array $data) $class = $this->metadataCache[$className]; $id = $this->em->getIdentifierFlattener()->flattenIdentifier($class, $data); - return $this->uow->tryGetById($id, $class->rootEntityName); + return $this->uow->tryGetById($id, $class->getRootClassName()); } /** diff --git a/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php index 24a0de6ec08..258b5942498 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php @@ -79,7 +79,7 @@ protected function hydrateAllData() */ protected function hydrateRowData(array $sqlResult, array &$result) { - $entityName = $this->class->name; + $entityName = $this->class->getClassName(); $data = []; // We need to find the correct entity class name if we have inheritance in resultset diff --git a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php index 8e3e42dd3a6..b0cc4553a1c 100644 --- a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php @@ -313,7 +313,7 @@ public function setReflectionProperty(\ReflectionProperty $reflectionProperty) public function wakeupReflection(ReflectionService $reflectionService) { $this->setReflectionProperty( - $reflectionService->getAccessibleProperty($this->declaringClass->name, $this->name) + $reflectionService->getAccessibleProperty($this->declaringClass->getClassName(), $this->name) ); } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 08510dd010e..508656ea612 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -61,7 +61,7 @@ class ClassMetadata implements TableOwner, \Doctrine\Common\Persistence\Mapping\ * * @var string */ - public $rootEntityName; + protected $rootEntityName; /** * @var CacheMetadata|null @@ -289,6 +289,22 @@ public function __construct($entityName, NamingStrategy $namingStrategy = null) $this->setTable(new TableMetadata()); } + /** + * @return string + */ + public function getClassName() : string + { + return $this->name; + } + + /** + * @return string + */ + public function getRootClassName() : string + { + return $this->rootEntityName; + } + /** * @param CacheMetadata|null $cache * @@ -505,7 +521,7 @@ public function wakeupReflection($reflService) } $fieldRefl = $reflService->getAccessibleProperty( - isset($embeddedClass['declared']) ? $embeddedClass['declared'] : $this->name, + isset($embeddedClass['declared']) ? $embeddedClass['declared'] : $this->getClassName(), $property ); @@ -1417,7 +1433,7 @@ public function setPropertyOverride(Property $property) */ public function isRootEntity() { - return $this->name == $this->rootEntityName; + return $this->name === $this->rootEntityName; } /** @@ -1948,14 +1964,6 @@ public function isReadOnly() return $this->readOnly; } - /** - * {@inheritDoc} - */ - public function getName() - { - return $this->name; - } - /** * @return bool */ @@ -2015,7 +2023,7 @@ public function inlineEmbeddable($property, ClassMetadata $embeddable) { /*foreach ($embeddable->fieldMappings as $fieldName => $fieldMapping) { $fieldMapping['fieldName'] = $property . "." . $fieldName; - $fieldMapping['originalClass'] = $fieldMapping['originalClass'] ?? $embeddable->name; + $fieldMapping['originalClass'] = $fieldMapping['originalClass'] ?? $embeddable->getClassName(); $fieldMapping['originalField'] = $fieldMapping['originalField'] ?? $fieldName; $fieldMapping['declaredField'] = isset($fieldMapping['declaredField']) ? $property . '.' . $fieldMapping['declaredField'] @@ -2044,7 +2052,7 @@ public function inlineEmbeddable($property, ClassMetadata $embeddable) private function assertPropertyNotMapped(string $fieldName) { if (isset($this->properties[$fieldName])) { - throw MappingException::duplicateProperty($this->getName(), $this->properties[$fieldName]); + throw MappingException::duplicateProperty($this->name, $this->properties[$fieldName]); } // if (isset($this->embeddedClasses[$fieldName])) { @@ -2052,6 +2060,16 @@ private function assertPropertyNotMapped(string $fieldName) // } } + /** + * {@inheritDoc} + * + * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo) + */ + public function getName() + { + return $this->name; + } + /** * {@inheritDoc} * diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 3e23b2e90ce..7085f122da5 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -152,9 +152,9 @@ protected function doLoadMetadata( // Invoke driver try { - $this->driver->loadMetadataForClass($class->getName(), $class); + $this->driver->loadMetadataForClass($class->getClassName(), $class); } catch (ReflectionException $e) { - throw MappingException::reflectionFailure($class->getName(), $e); + throw MappingException::reflectionFailure($class->getClassName(), $e); } $this->completeIdentifierGeneratorMappings($class); @@ -170,10 +170,10 @@ protected function doLoadMetadata( } if (isset($this->embeddablesActiveNesting[$embeddableClass['class']])) { - throw MappingException::infiniteEmbeddableNesting($class->name, $property); + throw MappingException::infiniteEmbeddableNesting($class->getClassName(), $property); } - $this->embeddablesActiveNesting[$class->name] = true; + $this->embeddablesActiveNesting[$class->getClassName()] = true; $embeddableMetadata = $this->getMetadataFor($embeddableClass['class']); @@ -189,7 +189,7 @@ protected function doLoadMetadata( $class->inlineEmbeddable($property, $embeddableMetadata); - unset($this->embeddablesActiveNesting[$class->name]); + unset($this->embeddablesActiveNesting[$class->getClassName()]); } }*/ @@ -311,16 +311,16 @@ protected function validateRuntimeMetadata(ClassMetadata $class, ClassMetadata $ if ( ! $class->isMappedSuperclass && $class->inheritanceType !== InheritanceType::NONE) { if ( ! $parent) { if (count($class->discriminatorMap) === 0) { - throw MappingException::missingDiscriminatorMap($class->name); + throw MappingException::missingDiscriminatorMap($class->getClassName()); } if ( ! $class->discriminatorColumn) { - throw MappingException::missingDiscriminatorColumn($class->name); + throw MappingException::missingDiscriminatorColumn($class->getClassName()); } } - } else if ($class->isMappedSuperclass && $class->name === $class->rootEntityName && (count($class->discriminatorMap) || $class->discriminatorColumn)) { + } else if ($class->isMappedSuperclass && $class->isRootEntity() && (count($class->discriminatorMap) || $class->discriminatorColumn)) { // second condition is necessary for mapped superclasses in the middle of an inheritance hierarchy - throw MappingException::noInheritanceOnMappedSuperClass($class->name); + throw MappingException::noInheritanceOnMappedSuperClass($class->getClassName()); } } @@ -351,7 +351,7 @@ private function resolveDiscriminatorValue(ClassMetadata $metadata) // minor optimization: avoid loading related metadata when not needed foreach ($metadata->discriminatorMap as $discriminatorValue => $discriminatorClass) { - if ($discriminatorClass === $metadata->name) { + if ($discriminatorClass === $metadata->getClassName()) { $metadata->discriminatorValue = $discriminatorValue; return; @@ -360,14 +360,14 @@ private function resolveDiscriminatorValue(ClassMetadata $metadata) // iterate over discriminator mappings and resolve actual referenced classes according to existing metadata foreach ($metadata->discriminatorMap as $discriminatorValue => $discriminatorClass) { - if ($metadata->name === $this->getMetadataFor($discriminatorClass)->getName()) { + if ($metadata->getClassName() === $this->getMetadataFor($discriminatorClass)->getClassName()) { $metadata->discriminatorValue = $discriminatorValue; return; } } - throw MappingException::mappedClassNotPartOfDiscriminatorMap($metadata->name, $metadata->rootEntityName); + throw MappingException::mappedClassNotPartOfDiscriminatorMap($metadata->getClassName(), $metadata->getRootClassName()); } /** @@ -387,8 +387,8 @@ private function resolveDiscriminatorValue(ClassMetadata $metadata) private function addDefaultDiscriminatorMap(ClassMetadata $class) { $allClasses = $this->driver->getAllClassNames(); - $fqcn = $class->getName(); - $map = [$this->getShortName($class->name) => $fqcn]; + $fqcn = $class->getClassName(); + $map = [$this->getShortName($fqcn) => $fqcn]; $duplicates = []; foreach ($allClasses as $subClassCandidate) { @@ -404,7 +404,7 @@ private function addDefaultDiscriminatorMap(ClassMetadata $class) } if ($duplicates) { - throw MappingException::duplicateDiscriminatorEntry($class->name, $duplicates, $map); + throw MappingException::duplicateDiscriminatorEntry($class->getClassName(), $duplicates, $map); } $class->setDiscriminatorMap($map); @@ -442,7 +442,7 @@ private function addInheritedProperties(ClassMetadata $subClass, ClassMetadata $ foreach ($parentClass->getProperties() as $fieldName => $property) { if ($isAbstract && $property instanceof ToManyAssociationMetadata && ! $property->isOwningSide()) { - throw MappingException::illegalToManyAssociationOnMappedSuperclass($parentClass->name, $fieldName); + throw MappingException::illegalToManyAssociationOnMappedSuperclass($parentClass->getClassName(), $fieldName); } $subClass->addInheritedProperty($property); @@ -465,7 +465,7 @@ private function addInheritedEmbeddedClasses(ClassMetadata $subClass, ClassMetad } if ( ! isset($embeddedClass['inherited']) && ! $parentClass->isMappedSuperclass) { - $embeddedClass['inherited'] = $parentClass->name; + $embeddedClass['inherited'] = $parentClass->getClassName(); } $subClass->embeddedClasses[$field] = $embeddedClass; @@ -491,7 +491,7 @@ private function addNestedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata $parentClass->mapEmbedded( [ 'fieldName' => $prefix . '.' . $property, - 'class' => $embeddableMetadata->name, + 'class' => $embeddableMetadata->getClassName(), 'columnPrefix' => $embeddableClass['columnPrefix'], 'declaredField' => $embeddableClass['declaredField'] ? $prefix . '.' . $embeddableClass['declaredField'] @@ -582,7 +582,7 @@ private function addInheritedNamedNativeQueries(ClassMetadata $subClass, ClassMe 'query' => $query['query'], 'isSelfClass' => $query['isSelfClass'], 'resultSetMapping' => $query['resultSetMapping'], - 'resultClass' => $query['isSelfClass'] ? $subClass->name : $query['resultClass'], + 'resultClass' => $query['isSelfClass'] ? $subClass->getClassName() : $query['resultClass'], ] ); } @@ -612,7 +612,7 @@ private function addInheritedSqlResultSetMappings(ClassMetadata $subClass, Class 'fields' => $entity['fields'], 'isSelfClass' => $entity['isSelfClass'], 'discriminatorColumn' => $entity['discriminatorColumn'], - 'entityClass' => $entity['isSelfClass'] ? $subClass->name : $entity['entityClass'], + 'entityClass' => $entity['isSelfClass'] ? $subClass->getClassName() : $entity['entityClass'], ]; } diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index cd97647d227..73eda28fa1d 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -51,15 +51,15 @@ class AnnotationDriver extends AbstractAnnotationDriver */ public function loadMetadataForClass($className, ClassMetadataInterface $metadata) { - $class = $metadata->getReflectionClass(); + $reflClass = $metadata->getReflectionClass(); - if (! $class) { + if (! $reflClass) { // this happens when running annotation driver in combination with // static reflection services. This is not the nicest fix - $class = new \ReflectionClass($metadata->name); + $reflClass = new \ReflectionClass($metadata->getClassName()); } - $classAnnotations = $this->reader->getClassAnnotations($class); + $classAnnotations = $this->reader->getClassAnnotations($reflClass); foreach ($classAnnotations as $key => $annot) { if ( ! is_numeric($key)) { @@ -256,7 +256,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat // Evaluate @HasLifecycleCallbacks annotation if (isset($classAnnotations[Annotation\HasLifecycleCallbacks::class])) { /* @var $method \ReflectionMethod */ - foreach ($class->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { + foreach ($reflClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { foreach ($this->getMethodCallbacks($method) as $value) { $metadata->addLifecycleCallback($value[0], $value[1]); } @@ -265,8 +265,8 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat // Evaluate annotations on properties/fields /* @var $reflProperty \ReflectionProperty */ - foreach ($class->getProperties() as $reflProperty) { - if ($reflProperty->getDeclaringClass()->name !== $class->name) { + foreach ($reflClass->getProperties() as $reflProperty) { + if ($reflProperty->getDeclaringClass()->getName() !== $reflClass->getName()) { continue; } @@ -360,7 +360,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $property = $metadata->getProperty($fieldName); if (! $property) { - throw Mapping\MappingException::invalidOverrideFieldName($metadata->name, $fieldName); + throw Mapping\MappingException::invalidOverrideFieldName($metadata->getClassName(), $fieldName); } $existingClass = get_class($property); @@ -989,7 +989,7 @@ private function convertCacheAnnotationToCacheMetadata( $fieldName = null ) { - $baseRegion = strtolower(str_replace('\\', '_', $metadata->rootEntityName)); + $baseRegion = strtolower(str_replace('\\', '_', $metadata->getRootClassName())); $defaultRegion = $baseRegion . ($fieldName ? '__' . $fieldName : ''); $usage = constant(sprintf('%s::%s', Mapping\CacheUsage::class, $cacheAnnot->usage)); diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index a2146cfc467..cb9c0e31c75 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -183,13 +183,14 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat throw new \InvalidArgumentException("Unknown class " . $className); } + // @todo guilhermeblanco This should somehow disappear... =) $metadata->name = $className; $this->buildTable($metadata); $this->buildFieldMappings($metadata); $this->buildToOneAssociationMappings($metadata); - $loweredTableName = strtolower($metadata->table->getName()); + $loweredTableName = strtolower($metadata->getTableName()); foreach ($this->manyToManyTables as $manyTable) { foreach ($manyTable->getForeignKeys() as $foreignKey) { @@ -324,10 +325,10 @@ private function reverseEngineerMappingFromDatabase() */ private function buildTable(ClassMetadata $metadata) { - $tableName = $this->classToTableNames[$metadata->name]; + $tableName = $this->classToTableNames[$metadata->getClassName()]; $indexes = $this->tables[$tableName]->getIndexes(); - $metadata->table->setName($this->classToTableNames[$metadata->name]); + $metadata->table->setName($this->classToTableNames[$metadata->getClassName()]); foreach ($indexes as $index) { /** @var Index $index */ diff --git a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php index c9d4f63d057..a4efd0c00be 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php @@ -105,7 +105,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate annotations on properties/fields /* @var \ReflectionProperty $reflectionProperty */ foreach ($reflectionClass->getProperties() as $reflectionProperty) { - if ($reflectionProperty->getDeclaringClass()->name !== $reflectionClass->getName()) { + if ($reflectionProperty->getDeclaringClass()->getClassName() !== $reflectionClass->getName()) { continue; } @@ -512,7 +512,7 @@ private function convertCacheAnnotationToCacheMetadata( ) { $usage = constant(sprintf('%s::%s', Mapping\CacheUsage::class, $cacheAnnot->usage)); - $baseRegion = strtolower(str_replace('\\', '_', $metadata->rootEntityName)); + $baseRegion = strtolower(str_replace('\\', '_', $metadata->getRootClassName())); $defaultRegion = $baseRegion . ($fieldName ? '__' . $fieldName : ''); return new Mapping\CacheMetadata($usage, $cacheAnnot->region ?: $defaultRegion); @@ -595,7 +595,7 @@ private function convertReflectionPropertyToFieldMetadata( Mapping\ClassMetadata $classMetadata ) { - $className = $classMetadata->getName(); + $className = $classMetadata->getClassName(); $fieldName = $reflectionProperty->getName(); $columnAnnot = $propertyAnnotations[Annotation\Column::class]; $isVersioned = isset($propertyAnnotations[Annotation\Version::class]); @@ -684,7 +684,7 @@ private function convertReflectionPropertyToOneToOneAssociationMetadata( Mapping\ClassMetadata $classMetadata ) { - $className = $classMetadata->getName(); + $className = $classMetadata->getClassName(); $fieldName = $reflectionProperty->getName(); $oneToOneAnnot = $propertyAnnotations[Annotation\OneToOne::class]; @@ -768,7 +768,7 @@ private function convertReflectionPropertyToManyToOneAssociationMetadata( Mapping\ClassMetadata $classMetadata ) { - $className = $classMetadata->getName(); + $className = $classMetadata->getClassName(); $fieldName = $reflectionProperty->getName(); $manyToOneAnnot = $propertyAnnotations[Annotation\ManyToOne::class]; @@ -847,7 +847,7 @@ private function convertReflectionPropertyToOneToManyAssociationMetadata( Mapping\ClassMetadata $classMetadata ) { - $className = $classMetadata->getName(); + $className = $classMetadata->getClassName(); $fieldName = $reflectionProperty->getName(); $oneToManyAnnot = $propertyAnnotations[Annotation\OneToMany::class]; @@ -908,7 +908,7 @@ private function convertReflectionPropertyToManyToManyAssociationMetadata( Mapping\ClassMetadata $classMetadata ) { - $className = $classMetadata->getName(); + $className = $classMetadata->getClassName(); $fieldName = $reflectionProperty->getName(); $manyToManyAnnot = $propertyAnnotations[Annotation\ManyToMany::class]; @@ -1036,7 +1036,7 @@ private function convertJoinColumnAnnotationToJoinColumnMetadata( $fieldName = $reflectionProperty->getName(); $joinColumn = new Mapping\JoinColumnMetadata(); $columnName = empty($joinColumnAnnot->name) - ? $this->namingStrategy->propertyToColumnName($fieldName, $classMetadata->getName()) + ? $this->namingStrategy->propertyToColumnName($fieldName, $classMetadata->getClassName()) : $joinColumnAnnot->name ; $referencedColumnName = empty($joinColumnAnnot->referencedColumnName) @@ -1204,4 +1204,4 @@ private function getMethodAnnotations(\ReflectionMethod $reflectionMethod) return $methodAnnotations; } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index bb0e6860049..b672f65add5 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -636,7 +636,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $property = $metadata->getProperty($fieldName); if (! $property) { - throw MappingException::invalidOverrideFieldName($metadata->name, $fieldName); + throw MappingException::invalidOverrideFieldName($metadata->getClassName(), $fieldName); } $existingClass = get_class($property); @@ -869,7 +869,7 @@ private function convertJoinColumnElementToJoinColumnMetadata(SimpleXMLElement $ */ private function convertCacheElementToCacheMetadata(SimpleXMLElement $cacheMapping, ClassMetadata $metadata, $fieldName = null) { - $baseRegion = strtolower(str_replace('\\', '_', $metadata->rootEntityName)); + $baseRegion = strtolower(str_replace('\\', '_', $metadata->getRootClassName())); $defaultRegion = $baseRegion . ($fieldName ? '__' . $fieldName : ''); $region = isset($cacheMapping['region']) ? (string) $cacheMapping['region'] : $defaultRegion; diff --git a/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php b/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php index 3123b43f4bd..fe3a9c34018 100644 --- a/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php @@ -138,7 +138,7 @@ public function setReflectionProperty(\ReflectionProperty $reflectionProperty) public function wakeupReflection(ReflectionService $reflectionService) { $this->setReflectionProperty( - $reflectionService->getAccessibleProperty($this->declaringClass->name, $this->name) + $reflectionService->getAccessibleProperty($this->declaringClass->getClassName(), $this->name) ); } } diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php index 61bbee47c46..567fb01a3de 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php @@ -100,7 +100,7 @@ private function exportConstructor(ClassMetadata $metadata, int $indentationLeve $lines[] = $indentation . 'public function __construct(?ClassMetadata $parent = null)'; $lines[] = $indentation . '{'; - $lines[] = $bodyIndentation . 'parent::__construct("' . $metadata->getName() . '", $parent);'; + $lines[] = $bodyIndentation . 'parent::__construct("' . $metadata->getClassName() . '", $parent);'; $lines[] = $indentation . '}'; return implode(PHP_EOL, $lines); diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index 4a853d903b5..640c5cf0865 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -185,7 +185,7 @@ public function setReflectionProperty(\ReflectionProperty $reflectionProperty) public function wakeupReflection(ReflectionService $reflectionService) { $this->setReflectionProperty( - $reflectionService->getAccessibleProperty($this->declaringClass->name, $this->name) + $reflectionService->getAccessibleProperty($this->declaringClass->getClassName(), $this->name) ); } } diff --git a/lib/Doctrine/ORM/Mapping/MappingException.php b/lib/Doctrine/ORM/Mapping/MappingException.php index 73ffafe748a..87cf4ccde3c 100644 --- a/lib/Doctrine/ORM/Mapping/MappingException.php +++ b/lib/Doctrine/ORM/Mapping/MappingException.php @@ -408,7 +408,7 @@ public static function duplicateProperty($className, Property $property) 'Property "%s" in "%s" was already declared in "%s", but it must be declared only once', $property->getName(), $className, - $property->getDeclaringClass()->getName() + $property->getDeclaringClass()->getClassName() )); } diff --git a/lib/Doctrine/ORM/Mapping/TransientMetadata.php b/lib/Doctrine/ORM/Mapping/TransientMetadata.php index ab8a285769f..3959771d3ab 100644 --- a/lib/Doctrine/ORM/Mapping/TransientMetadata.php +++ b/lib/Doctrine/ORM/Mapping/TransientMetadata.php @@ -107,7 +107,7 @@ public function setReflectionProperty(\ReflectionProperty $reflectionProperty) public function wakeupReflection(ReflectionService $reflectionService) { $this->setReflectionProperty( - $reflectionService->getAccessibleProperty($this->declaringClass->name, $this->name) + $reflectionService->getAccessibleProperty($this->declaringClass->getClassName(), $this->name) ); } } diff --git a/lib/Doctrine/ORM/ORMInvalidArgumentException.php b/lib/Doctrine/ORM/ORMInvalidArgumentException.php index eddf2fc4309..ba89d2223b0 100644 --- a/lib/Doctrine/ORM/ORMInvalidArgumentException.php +++ b/lib/Doctrine/ORM/ORMInvalidArgumentException.php @@ -215,7 +215,7 @@ public static function invalidAssociation(ClassMetadata $targetClass, Associatio $expectedType = 'Doctrine\Common\Collections\Collection|array'; if ($association instanceof ToOneAssociationMetadata) { - $expectedType = $targetClass->getName(); + $expectedType = $targetClass->getClassName(); } return new self(sprintf( diff --git a/lib/Doctrine/ORM/PersistentCollection.php b/lib/Doctrine/ORM/PersistentCollection.php index f45765fb540..4f262482cdf 100644 --- a/lib/Doctrine/ORM/PersistentCollection.php +++ b/lib/Doctrine/ORM/PersistentCollection.php @@ -449,7 +449,7 @@ public function get($key) $this->association->getFetchMode() === FetchMode::EXTRA_LAZY && $this->association->getIndexedBy()) { if (!$this->typeClass->isIdentifierComposite() && $this->typeClass->isIdentifier($this->association->getIndexedBy())) { - return $this->em->find($this->typeClass->name, $key); + return $this->em->find($this->typeClass->getClassName(), $key); } return $this->em->getUnitOfWork()->getCollectionPersister($this->association)->get($this, $key); diff --git a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php index a18c902fc99..7e55a05e28f 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php @@ -173,7 +173,7 @@ public function count(PersistentCollection $collection) . ' ON' . implode(' AND ', $this->getOnConditionSQL($association)); // And criteria conditions needs to be added - $persister = $this->uow->getEntityPersister($targetClass->name); + $persister = $this->uow->getEntityPersister($targetClass->getClassName()); $visitor = new SqlExpressionVisitor($persister, $targetClass); $conditions[] = $visitor->dispatch($expression); @@ -300,7 +300,7 @@ public function loadCriteria(PersistentCollection $collection, Criteria $criteri $joinTableName = $association->getJoinTable()->getQuotedQualifiedName($this->platform); $resultSetMapping = new Query\ResultSetMappingBuilder($this->em); - $resultSetMapping->addRootEntityFromClassMetadata($targetClass->name, 'te'); + $resultSetMapping->addRootEntityFromClassMetadata($targetClass->getClassName(), 'te'); $sql = 'SELECT ' . $resultSetMapping->generateSelectClause() . ' FROM ' . $tableName . ' te' @@ -334,7 +334,7 @@ public function loadCriteria(PersistentCollection $collection, Criteria $criteri public function getFilterSql(ManyToManyAssociationMetadata $association) { $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); - $rootClass = $this->em->getClassMetadata($targetClass->rootEntityName); + $rootClass = $this->em->getClassMetadata($targetClass->getRootClassName()); $filterSql = $this->generateFilterConditionSQL($rootClass, 'te'); if ('' === $filterSql) { @@ -366,7 +366,7 @@ protected function generateFilterConditionSQL(ClassMetadata $targetEntity, $targ $filterClauses[] = '(' . $filterExpr . ')'; } } - + if (! $filterClauses) { return ''; } diff --git a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php index 033945c2b4b..c0af16e7e1f 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php @@ -239,7 +239,7 @@ private function deleteJoinedEntityCollection(PersistentCollection $collection) $association = $collection->getMapping(); $sourceClass = $this->em->getClassMetadata($association->getSourceEntity()); $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); - $rootClass = $this->em->getClassMetadata($targetClass->rootEntityName); + $rootClass = $this->em->getClassMetadata($targetClass->getRootClassName()); // 1) Build temporary table DDL $tempTable = $this->platform->getTemporaryTableName($rootClass->getTemporaryIdTableName()); @@ -263,7 +263,7 @@ private function deleteJoinedEntityCollection(PersistentCollection $collection) // 2) Build insert table records into temporary table $dql = ' SELECT t0.' . implode(', t0.', $rootClass->getIdentifierFieldNames()) - . ' FROM ' . $targetClass->name . ' t0 WHERE t0.' . $association->getMappedBy() . ' = :owner'; + . ' FROM ' . $targetClass->getClassName() . ' t0 WHERE t0.' . $association->getMappedBy() . ' = :owner'; $query = $this->em->createQuery($dql)->setParameter('owner', $collection->getOwner()); $statement = 'INSERT INTO ' . $tempTable . ' (' . $idColumnNameList . ') ' . $query->getSQL(); @@ -271,7 +271,7 @@ private function deleteJoinedEntityCollection(PersistentCollection $collection) $numDeleted = $this->conn->executeUpdate($statement, $parameters); // 3) Delete records on each table in the hierarchy - $classNames = array_merge($targetClass->parentClasses, [$targetClass->name], $targetClass->subClasses); + $classNames = array_merge($targetClass->parentClasses, [$targetClass->getClassName()], $targetClass->subClasses); foreach (array_reverse($classNames) as $className) { $parentClass = $this->em->getClassMetadata($className); diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 2caf1f83fd8..de7db64d64f 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -787,7 +787,7 @@ public function loadToOneEntity(ToOneAssociationMetadata $association, $sourceEn if ( ! isset($sourceClass->fieldNames[$sourceKeyColumn])) { throw MappingException::joinColumnMustPointToMappedField( - $sourceClass->name, $sourceKeyColumn + $sourceClass->getClassName(), $sourceKeyColumn ); } @@ -1178,7 +1178,7 @@ protected final function getOrderBySQL(array $orderBy, $baseTableAlias) $orientation = strtoupper(trim($orientation)); if (! in_array($orientation, ['ASC', 'DESC'])) { - throw ORMException::invalidOrientation($this->class->name, $fieldName); + throw ORMException::invalidOrientation($this->class->getClassName(), $fieldName); } $property = $this->class->getProperty($fieldName); @@ -1192,7 +1192,7 @@ protected final function getOrderBySQL(array $orderBy, $baseTableAlias) continue; } else if ($property instanceof AssociationMetadata) { if (! $property->isOwningSide()) { - throw ORMException::invalidFindByInverseAssociation($this->class->name, $fieldName); + throw ORMException::invalidFindByInverseAssociation($this->class->getClassName(), $fieldName); } $class = $this->class->isInheritedProperty($fieldName) @@ -1234,7 +1234,7 @@ protected function getSelectColumnsSQL() } - $this->currentPersisterContext->rsm->addEntityResult($this->class->name, 'r'); // r for root + $this->currentPersisterContext->rsm->addEntityResult($this->class->getClassName(), 'r'); // r for root $this->currentPersisterContext->selectJoinSql = ''; $eagerAliasCounter = 0; @@ -1545,7 +1545,7 @@ protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r' $this->platform->quoteIdentifier($property->getColumnName()) ); - $this->currentPersisterContext->rsm->addFieldResult($alias, $columnAlias, $field, $class->name); + $this->currentPersisterContext->rsm->addFieldResult($alias, $columnAlias, $field, $class->getClassName()); return $property->getType()->convertToPHPValueSQL($sql, $this->platform) . ' AS ' . $columnAlias; } @@ -1760,7 +1760,7 @@ private function getSelectConditionStatementColumnSQL($field, AssociationMetadat } else { if (! $owningAssociation->isOwningSide()) { - throw ORMException::invalidFindByInverseAssociation($this->class->name, $field); + throw ORMException::invalidFindByInverseAssociation($this->class->getClassName(), $field); } $class = $this->class->isInheritedProperty($field) diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index 06c65b6b820..46c8293d8c9 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -52,12 +52,12 @@ public function insert($entity) { $postInsertIds = []; $identifierComposite = $this->class->isIdentifierComposite(); - $rootClass = ($this->class->name !== $this->class->rootEntityName) - ? $this->em->getClassMetadata($this->class->rootEntityName) + $rootClass = ! $this->class->isRootEntity() + ? $this->em->getClassMetadata($this->class->getRootClassName()) : $this->class; // Prepare statement for the root table - $rootPersister = $this->em->getUnitOfWork()->getEntityPersister($rootClass->name); + $rootPersister = $this->em->getUnitOfWork()->getEntityPersister($rootClass->getClassName()); $rootTableName = $rootClass->getTableName(); $rootTableStmt = $this->conn->prepare($rootPersister->getInsertSQL()); @@ -202,7 +202,7 @@ public function delete($entity) // If the database platform supports FKs, just // delete the row from the root table. Cascades do the rest. if ($this->platform->supportsForeignKeyConstraints()) { - $rootClass = $this->em->getClassMetadata($this->class->rootEntityName); + $rootClass = $this->em->getClassMetadata($this->class->getRootClassName()); $rootTable = $rootClass->table->getQuotedQualifiedName($this->platform); return (bool) $this->conn->delete($rootTable, $id); @@ -254,7 +254,7 @@ public function getSelectSQL( : $this->getSelectConditionSQL($criteria, $association); // If the current class in the root entity, add the filters - $rootClass = $this->em->getClassMetadata($this->class->rootEntityName); + $rootClass = $this->em->getClassMetadata($this->class->getRootClassName()); $tableAlias = $this->getSQLTableAlias($rootClass->getTableName()); if ($filterSql = $this->generateFilterConditionSQL($rootClass, $tableAlias)) { @@ -302,7 +302,7 @@ public function getCountSQL($criteria = []) ? $this->getSelectConditionCriteriaSQL($criteria) : $this->getSelectConditionSQL($criteria); - $rootClass = $this->em->getClassMetadata($this->class->rootEntityName); + $rootClass = $this->em->getClassMetadata($this->class->getRootClassName()); $tableAlias = $this->getSQLTableAlias($rootClass->getTableName()); $filterSql = $this->generateFilterConditionSQL($rootClass, $tableAlias); @@ -361,7 +361,7 @@ protected function getSelectColumnsSQL() return $this->currentPersisterContext->selectColumnListSql; } - $this->currentPersisterContext->rsm->addEntityResult($this->class->name, 'r'); + $this->currentPersisterContext->rsm->addEntityResult($this->class->getClassName(), 'r'); $columnList = []; @@ -491,7 +491,7 @@ protected function getInsertColumnList() } if ( - $this->class->name !== $this->class->rootEntityName || + $this->class->getClassName() !== $this->class->getRootClassName() || $this->class->getProperty($name)->getIdentifierGeneratorType() !== GeneratorType::IDENTITY || $this->class->identifier[0] !== $name ) { @@ -504,7 +504,7 @@ protected function getInsertColumnList() } // Add discriminator column if it is the topmost class. - if ($this->class->name === $this->class->rootEntityName) { + if ($this->class->isRootEntity()) { $discrColumn = $this->class->discriminatorColumn; $discrColumnName = $discrColumn->getColumnName(); diff --git a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php index e9456766237..779b6031091 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php @@ -51,7 +51,7 @@ protected function getSelectColumnsSQL() $columnList[] = parent::getSelectColumnsSQL(); - $rootClass = $this->em->getClassMetadata($this->class->rootEntityName); + $rootClass = $this->em->getClassMetadata($this->class->getRootClassName()); $tableAlias = $this->getSQLTableAlias($rootClass->getTableName()); // Append discriminator column @@ -193,7 +193,7 @@ protected function getSelectConditionDiscriminatorValueSQL() protected function generateFilterConditionSQL(ClassMetadata $targetEntity, $targetTableAlias) { // Ensure that the filters are applied to the root entity of the inheritance tree - $targetEntity = $this->em->getClassMetadata($targetEntity->rootEntityName); + $targetEntity = $this->em->getClassMetadata($targetEntity->getRootClassName()); // we don't care about the $targetTableAlias, in a STI there is only one table. return parent::generateFilterConditionSQL($targetEntity, $targetTableAlias); diff --git a/lib/Doctrine/ORM/Persisters/SqlExpressionVisitor.php b/lib/Doctrine/ORM/Persisters/SqlExpressionVisitor.php index 754fd854efb..15ed8816cb5 100644 --- a/lib/Doctrine/ORM/Persisters/SqlExpressionVisitor.php +++ b/lib/Doctrine/ORM/Persisters/SqlExpressionVisitor.php @@ -74,7 +74,7 @@ public function walkComparison(Comparison $comparison) ! is_object($value) && ! in_array($comparison->getOperator(), [Comparison::IN, Comparison::NIN])) { - throw PersisterException::matchingAssocationFieldRequiresObject($this->classMetadata->name, $field); + throw PersisterException::matchingAssocationFieldRequiresObject($this->classMetadata->getClassName(), $field); } return $this->persister->getSelectConditionStatementSQL($field, $value, null, $comparison->getOperator()); diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php index fff4e0e8dfe..93c80c59e77 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php @@ -113,7 +113,7 @@ public function initializer(Proxy $proxy) : void $proxy->__setInitialized(false); throw EntityNotFoundException::fromClassNameAndIdentifier( - $classMetadata->getName(), $identifier + $classMetadata->getClassName(), $identifier ); // @todo guilhermeblanco Move the flattening identifier to Persisters @@ -123,7 +123,7 @@ public function initializer(Proxy $proxy) : void ); throw EntityNotFoundException::fromClassNameAndIdentifier( - $classMetadata->getName(), + $classMetadata->getClassName(), $identifierFlattener->flattenIdentifier($classMetadata, $identifier) );*/ } @@ -151,7 +151,7 @@ public function cloner(Proxy $proxy) : void if (null === $original) { throw EntityNotFoundException::fromClassNameAndIdentifier( - $classMetadata->getName(), $identifier + $classMetadata->getClassName(), $identifier ); // @todo guilhermeblanco Move the flattening identifier to Persisters @@ -161,7 +161,7 @@ public function cloner(Proxy $proxy) : void ); throw EntityNotFoundException::fromClassNameAndIdentifier( - $classMetadata->getName(), + $classMetadata->getClassName(), $identifierFlattener->flattenIdentifier($classMetadata, $identifier) );*/ } diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php index 3f6c603ed0f..61ae64be680 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php @@ -78,7 +78,7 @@ public function build(ClassMetadata $classMetadata) : ProxyDefinition $definition = $this->createDefinition($classMetadata); if (! class_exists($definition->proxyClassName, false)) { - $proxyClassPath = $this->resolver->resolveProxyClassPath($classMetadata->getName()); + $proxyClassPath = $this->resolver->resolveProxyClassPath($classMetadata->getClassName()); switch ($this->autoGenerate) { case ProxyFactory::AUTOGENERATE_FILE_NOT_EXISTS: @@ -120,8 +120,8 @@ public function build(ClassMetadata $classMetadata) : ProxyDefinition private function createDefinition(ClassMetadata $classMetadata) : ProxyDefinition { $unitOfWork = $this->entityManager->getUnitOfWork(); - $entityPersister = $unitOfWork->getEntityPersister($classMetadata->getName()); - $proxyClassName = $this->resolver->resolveProxyClassName($classMetadata->getName()); + $entityPersister = $unitOfWork->getEntityPersister($classMetadata->getClassName()); + $proxyClassName = $this->resolver->resolveProxyClassName($classMetadata->getClassName()); return new ProxyDefinition($classMetadata, $entityPersister, $proxyClassName); } diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php index 384cd530d16..a16f811ec4f 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php @@ -324,7 +324,7 @@ private function generateNamespace(ProxyDefinition $definition) : string */ private function generateClassName(ProxyDefinition $definition) : string { - return $definition->entityClassMetadata->getName(); + return $definition->entityClassMetadata->getClassName(); } private function generateLazyPublicPropertyList(ProxyDefinition $definition) : string diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php index 186fc99cff4..150f16eaf08 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php @@ -67,7 +67,7 @@ public function __construct(AST\Node $AST, $sqlWalker) $primaryClass = $em->getClassMetadata($AST->deleteClause->abstractSchemaName); $primaryDqlAlias = $AST->deleteClause->aliasIdentificationVariable; - $rootClass = $em->getClassMetadata($primaryClass->rootEntityName); + $rootClass = $em->getClassMetadata($primaryClass->getRootClassName()); $tempTable = $platform->getTemporaryTableName($rootClass->getTemporaryIdTableName()); $idColumns = $rootClass->getIdentifierColumns($em); @@ -79,7 +79,7 @@ public function __construct(AST\Node $AST, $sqlWalker) $this->insertSql = 'INSERT INTO ' . $tempTable . ' (' . $idColumnNameList . ')' . ' SELECT i0.' . implode(', i0.', array_keys($idColumns)); - $rangeDecl = new AST\RangeVariableDeclaration($primaryClass->name, $primaryDqlAlias); + $rangeDecl = new AST\RangeVariableDeclaration($primaryClass->getClassName(), $primaryDqlAlias); $fromClause = new AST\FromClause([new AST\IdentificationVariableDeclaration($rangeDecl, null, [])]); $this->insertSql .= $sqlWalker->walkFromClause($fromClause); @@ -92,7 +92,7 @@ public function __construct(AST\Node $AST, $sqlWalker) $idSubselect = 'SELECT ' . $idColumnNameList . ' FROM ' . $tempTable; // 3. Create and store DELETE statements - $classNames = array_merge($primaryClass->parentClasses, [$primaryClass->name], $primaryClass->subClasses); + $classNames = array_merge($primaryClass->parentClasses, [$primaryClass->getClassName()], $primaryClass->subClasses); foreach (array_reverse($classNames) as $className) { $parentClass = $em->getClassMetadata($className); diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php index dc3e54d2b96..5f518f9d747 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php @@ -76,7 +76,7 @@ public function __construct(AST\Node $AST, $sqlWalker) $updateClause = $AST->updateClause; $primaryClass = $sqlWalker->getEntityManager()->getClassMetadata($updateClause->abstractSchemaName); - $rootClass = $em->getClassMetadata($primaryClass->rootEntityName); + $rootClass = $em->getClassMetadata($primaryClass->getRootClassName()); $updateItems = $updateClause->updateItems; @@ -90,7 +90,7 @@ public function __construct(AST\Node $AST, $sqlWalker) $this->insertSql = 'INSERT INTO ' . $tempTable . ' (' . $idColumnNameList . ')' . ' SELECT i0.' . implode(', i0.', array_keys($idColumns)); - $rangeDecl = new AST\RangeVariableDeclaration($primaryClass->name, $updateClause->aliasIdentificationVariable); + $rangeDecl = new AST\RangeVariableDeclaration($primaryClass->getClassName(), $updateClause->aliasIdentificationVariable); $fromClause = new AST\FromClause([new AST\IdentificationVariableDeclaration($rangeDecl, null, [])]); $this->insertSql .= $sqlWalker->walkFromClause($fromClause); @@ -99,7 +99,7 @@ public function __construct(AST\Node $AST, $sqlWalker) $idSubselect = 'SELECT ' . $idColumnNameList . ' FROM ' . $tempTable; // 3. Create and store UPDATE statements - $classNames = array_merge($primaryClass->parentClasses, [$primaryClass->name], $primaryClass->subClasses); + $classNames = array_merge($primaryClass->parentClasses, [$primaryClass->getClassName()], $primaryClass->subClasses); $i = -1; foreach (array_reverse($classNames) as $className) { diff --git a/lib/Doctrine/ORM/Query/Parser.php b/lib/Doctrine/ORM/Query/Parser.php index f3e0278b078..f24941bf5f8 100644 --- a/lib/Doctrine/ORM/Query/Parser.php +++ b/lib/Doctrine/ORM/Query/Parser.php @@ -681,13 +681,13 @@ private function processDeferredPartialObjectExpressions() } $this->semanticalError( - "There is no mapped field named '$field' on class " . $class->name . ".", $deferredItem['token'] + "There is no mapped field named '$field' on class " . $class->getClassName() . ".", $deferredItem['token'] ); } if (array_intersect($class->identifier, $expr->partialFieldSet) != $class->identifier) { $this->semanticalError( - "The partial field selection of class " . $class->name . " must contain the identifier.", + "The partial field selection of class " . $class->getClassName() . " must contain the identifier.", $deferredItem['token'] ); } @@ -758,7 +758,7 @@ private function processDeferredPathExpressions() // Check if field or association exists if (! $property) { $this->semanticalError( - 'Class ' . $class->name . ' has no field or association named ' . $field, + 'Class ' . $class->getClassName() . ' has no field or association named ' . $field, $deferredItem['token'] ); } @@ -1052,7 +1052,7 @@ public function JoinAssociationPathExpression() $class = $qComp['metadata']; if (! (($property = $class->getProperty($field)) !== null && $property instanceof AssociationMetadata)) { - $this->semanticalError('Class ' . $class->name . ' has no association named ' . $field); + $this->semanticalError('Class ' . $class->getClassName() . ' has no association named ' . $field); } return new AST\JoinAssociationPathExpression($identVariable, $field); @@ -3360,7 +3360,7 @@ public function FunctionDeclaration() switch (true) { case $customFunctionDeclaration !== null: return $customFunctionDeclaration; - + case (isset(self::$_STRING_FUNCTIONS[$funcName])): return $this->FunctionsReturningStrings(); diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index 53252ed6d95..7bce839fc1b 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -195,7 +195,7 @@ protected function addAllClassFields($class, $alias, $columnAliasMap = []) private function isInheritanceSupported(ClassMetadata $metadata) { if ($metadata->inheritanceType === InheritanceType::SINGLE_TABLE - && in_array($metadata->name, $metadata->discriminatorMap, true)) { + && in_array($metadata->getClassName(), $metadata->discriminatorMap, true)) { return true; } @@ -285,7 +285,7 @@ public function addNamedNativeQueryResultClassMapping(ClassMetadata $class, $res $platform = $this->em->getConnection()->getDatabasePlatform(); $alias = 'e0'; - $this->addEntityResult($class->name, $alias); + $this->addEntityResult($class->getClassName(), $alias); if ($classMetadata->discriminatorColumn) { $discrColumn = $classMetadata->discriminatorColumn; @@ -332,8 +332,8 @@ public function addNamedNativeQueryResultSetMapping(ClassMetadata $class, $resul foreach ($resultMapping['entities'] as $key => $entityMapping) { $classMetadata = $this->em->getClassMetadata($entityMapping['entityClass']); - if ($class->name === $classMetadata->name) { - $this->addEntityResult($classMetadata->name, $rootAlias); + if ($class->getClassName() === $classMetadata->getClassName()) { + $this->addEntityResult($classMetadata->getClassName(), $rootAlias); $this->addNamedNativeQueryEntityResultMapping($classMetadata, $entityMapping, $rootAlias); } else { $joinAlias = 'e' . ++ $counter; @@ -345,7 +345,7 @@ public function addNamedNativeQueryResultSetMapping(ClassMetadata $class, $resul continue; } - if ($association->getTargetEntity() !== $classMetadata->name) { + if ($association->getTargetEntity() !== $classMetadata->getClassName()) { continue; } @@ -404,7 +404,7 @@ public function addNamedNativeQueryEntityResultMapping(ClassMetadata $classMetad $property = $classMetadata->getProperty($fieldName); if (! $relation && $property instanceof FieldMetadata) { - $this->addFieldResult($alias, $field['column'], $fieldName, $classMetadata->name); + $this->addFieldResult($alias, $field['column'], $fieldName, $classMetadata->getClassName()); continue; } @@ -413,13 +413,13 @@ public function addNamedNativeQueryEntityResultMapping(ClassMetadata $classMetad if (! $property) { throw new \InvalidArgumentException( - "Entity '".$classMetadata->name."' has no field '".$relation."'. " + "Entity '".$classMetadata->getClassName()."' has no field '".$relation."'. " ); } if ($property instanceof AssociationMetadata) { if (! $relation) { - $this->addFieldResult($alias, $field['column'], $fieldName, $classMetadata->name); + $this->addFieldResult($alias, $field['column'], $fieldName, $classMetadata->getClassName()); continue; } diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 18f90ccffb8..ced21dd5224 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -498,7 +498,7 @@ private function generateFilterConditionSQL(ClassMetadata $targetEntity, $target case InheritanceType::JOINED: // The classes in the inheritance will be added to the query one by one, // but only the root node is getting filtered - if ($targetEntity->name !== $targetEntity->rootEntityName) { + if ($targetEntity->getClassName() !== $targetEntity->getRootClassName()) { return ''; } break; @@ -506,7 +506,7 @@ private function generateFilterConditionSQL(ClassMetadata $targetEntity, $target case InheritanceType::SINGLE_TABLE: // With STI the table will only be queried once, make sure that the filters // are added to the root entity - $targetEntity = $this->em->getClassMetadata($targetEntity->rootEntityName); + $targetEntity = $this->em->getClassMetadata($targetEntity->getRootClassName()); break; default: @@ -575,7 +575,7 @@ public function walkSelectStatement(AST\SelectStatement $AST) foreach ($this->selectedClasses as $selectedClass) { if ( ! $selectedClass['class']->isVersioned()) { - throw OptimisticLockException::lockFailed($selectedClass['class']->name); + throw OptimisticLockException::lockFailed($selectedClass['class']->getClassName()); } } @@ -740,10 +740,10 @@ public function walkSelectClause($selectClause) // Register as entity or joined entity result if ($this->queryComponents[$dqlAlias]['relation'] === null) { - $this->rsm->addEntityResult($class->name, $dqlAlias, $resultAlias); + $this->rsm->addEntityResult($class->getClassName(), $dqlAlias, $resultAlias); } else { $this->rsm->addJoinedEntityResult( - $class->name, + $class->getClassName(), $dqlAlias, $this->queryComponents[$dqlAlias]['parent'], $this->queryComponents[$dqlAlias]['relation']->getName() @@ -1452,7 +1452,7 @@ public function walkSelectExpression($selectExpression) $this->scalarResultAliasMap[$resultAlias][] = $columnAlias; - $this->rsm->addFieldResult($dqlAlias, $columnAlias, $fieldName, $class->name); + $this->rsm->addFieldResult($dqlAlias, $columnAlias, $fieldName, $class->getClassName()); } // Add any additional fields of subclasses (excluding inherited fields) @@ -2131,12 +2131,12 @@ public function walkInstanceOfExpression($instanceOfExpr) // Get name from ClassMetadata to resolve aliases. $entityClass = $this->em->getClassMetadata($parameter); - $entityClassName = $entityClass->name; + $entityClassName = $entityClass->getClassName(); $discriminatorValue = $class->discriminatorValue; - if ($entityClassName !== $class->name) { + if ($entityClassName !== $class->getClassName()) { if ( ! isset($discrMap[$entityClassName])) { - throw QueryException::instanceOfUnrelatedClass($entityClassName, $class->rootEntityName); + throw QueryException::instanceOfUnrelatedClass($entityClassName, $class->getRootClassName()); } $discriminatorValue = $discrMap[$entityClassName]; diff --git a/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php b/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php index 680962413fc..b3ecde35977 100644 --- a/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php +++ b/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php @@ -41,7 +41,7 @@ final class DefaultRepositoryFactory implements RepositoryFactory */ public function getRepository(EntityManagerInterface $entityManager, $entityName) { - $repositoryHash = $entityManager->getClassMetadata($entityName)->getName() . spl_object_hash($entityManager); + $repositoryHash = $entityManager->getClassMetadata($entityName)->getClassName() . spl_object_hash($entityManager); if (isset($this->repositoryList[$repositoryHash])) { return $this->repositoryList[$repositoryHash]; diff --git a/lib/Doctrine/ORM/Tools/AttachEntityListenersListener.php b/lib/Doctrine/ORM/Tools/AttachEntityListenersListener.php index cf7cc8b8b95..53cbc1d6962 100644 --- a/lib/Doctrine/ORM/Tools/AttachEntityListenersListener.php +++ b/lib/Doctrine/ORM/Tools/AttachEntityListenersListener.php @@ -66,14 +66,14 @@ public function loadClassMetadata(LoadClassMetadataEventArgs $event) /** @var $metadata \Doctrine\ORM\Mapping\ClassMetadata */ $metadata = $event->getClassMetadata(); - if ( ! isset($this->entityListeners[$metadata->name])) { + if ( ! isset($this->entityListeners[$metadata->getClassName()])) { return; } - foreach ($this->entityListeners[$metadata->name] as $listener) { + foreach ($this->entityListeners[$metadata->getClassName()] as $listener) { $metadata->addEntityListener($listener['event'], $listener['class'], $listener['method']); } - unset($this->entityListeners[$metadata->name]); + unset($this->entityListeners[$metadata->getClassName()]); } } diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ConvertMappingCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ConvertMappingCommand.php index 86d975d00a4..a4d2da8d125 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ConvertMappingCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ConvertMappingCommand.php @@ -173,7 +173,7 @@ protected function execute(InputInterface $input, OutputInterface $output) if (count($metadata)) { foreach ($metadata as $class) { - $output->writeln(sprintf('Processing entity "%s"', $class->name)); + $output->writeln(sprintf('Processing entity "%s"', $class->getClassName())); } $exporter->setMetadata($metadata); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/GenerateEntitiesCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/GenerateEntitiesCommand.php index 1fff4a4d451..bcf770fafbb 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/GenerateEntitiesCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/GenerateEntitiesCommand.php @@ -154,7 +154,7 @@ protected function execute(InputInterface $input, OutputInterface $output) foreach ($metadatas as $metadata) { $output->writeln( - sprintf('Processing entity "%s"', $metadata->name) + sprintf('Processing entity "%s"', $metadata->getClassName()) ); } diff --git a/lib/Doctrine/ORM/Tools/Console/Command/GenerateProxiesCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/GenerateProxiesCommand.php index 9475bca71b7..6096053a65d 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/GenerateProxiesCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/GenerateProxiesCommand.php @@ -101,7 +101,7 @@ protected function execute(InputInterface $input, OutputInterface $output) if ( count($metadatas)) { foreach ($metadatas as $metadata) { $output->writeln( - sprintf('Processing entity "%s"', $metadata->name) + sprintf('Processing entity "%s"', $metadata->getClassName()) ); } diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index 0f22ad9c9c8..1f5d57156fd 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -93,8 +93,8 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage [$table, 'addRow'], array_merge( [ - $this->formatField('Name', $metadata->name), - $this->formatField('Root entity name', $metadata->rootEntityName), + $this->formatField('Name', $metadata->getClassName()), + $this->formatField('Root entity name', $metadata->getRootClassName()), $this->formatField('Custom repository class', $metadata->customRepositoryClassName), $this->formatField('Mapped super class?', $metadata->isMappedSuperclass), $this->formatField('Embedded class?', $metadata->isEmbeddedClass), diff --git a/lib/Doctrine/ORM/Tools/Console/MetadataFilter.php b/lib/Doctrine/ORM/Tools/Console/MetadataFilter.php index 88357e35c94..bb729c09067 100644 --- a/lib/Doctrine/ORM/Tools/Console/MetadataFilter.php +++ b/lib/Doctrine/ORM/Tools/Console/MetadataFilter.php @@ -76,7 +76,7 @@ public function accept() $metadata = $it->current(); foreach ($this->filter as $filter) { - $pregResult = preg_match("/$filter/", $metadata->name); + $pregResult = preg_match("/$filter/", $metadata->getClassName()); if ($pregResult === false) { throw new \RuntimeException( diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index b70fddbd29c..3df71048a2b 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -343,7 +343,7 @@ public function generate(array $metadatas, $outputDirectory) */ public function writeEntityClass(ClassMetadata $metadata, $outputDirectory) { - $path = $outputDirectory . '/' . str_replace('\\', DIRECTORY_SEPARATOR, $metadata->name) . $this->extension; + $path = $outputDirectory . '/' . str_replace('\\', DIRECTORY_SEPARATOR, $metadata->getClassName()) . $this->extension; $dir = dirname($path); if ( ! is_dir($dir)) { @@ -355,7 +355,7 @@ public function writeEntityClass(ClassMetadata $metadata, $outputDirectory) if ( ! $this->isNew) { $this->parseTokensInEntityFile(file_get_contents($path)); } else { - $this->staticReflection[$metadata->name] = ['properties' => [], 'methods' => []]; + $this->staticReflection[$metadata->getClassName()] = ['properties' => [], 'methods' => []]; } if ($this->backupExisting && file_exists($path)) { @@ -831,9 +831,9 @@ protected function parseTokensInEntityFile($src) */ protected function hasProperty($property, ClassMetadata $metadata) { - if ($this->extendsClass() || (!$this->isNew && class_exists($metadata->name))) { + if ($this->extendsClass() || (!$this->isNew && class_exists($metadata->getClassName()))) { // don't generate property if its already on the base class. - $reflClass = new \ReflectionClass($this->getClassToExtend() ?: $metadata->name); + $reflClass = new \ReflectionClass($this->getClassToExtend() ?: $metadata->getClassName()); if ($reflClass->hasProperty($property)) { return true; @@ -848,8 +848,8 @@ protected function hasProperty($property, ClassMetadata $metadata) } return ( - isset($this->staticReflection[$metadata->name]) && - in_array($property, $this->staticReflection[$metadata->name]['properties'], true) + isset($this->staticReflection[$metadata->getClassName()]) && + in_array($property, $this->staticReflection[$metadata->getClassName()]['properties'], true) ); } @@ -861,9 +861,9 @@ protected function hasProperty($property, ClassMetadata $metadata) */ protected function hasMethod($method, ClassMetadata $metadata) { - if ($this->extendsClass() || (!$this->isNew && class_exists($metadata->name))) { + if ($this->extendsClass() || (!$this->isNew && class_exists($metadata->getClassName()))) { // don't generate method if its already on the base class. - $reflClass = new \ReflectionClass($this->getClassToExtend() ?: $metadata->name); + $reflClass = new \ReflectionClass($this->getClassToExtend() ?: $metadata->getClassName()); if ($reflClass->hasMethod($method)) { return true; @@ -878,8 +878,8 @@ protected function hasMethod($method, ClassMetadata $metadata) } return ( - isset($this->staticReflection[$metadata->name]) && - in_array(strtolower($method), $this->staticReflection[$metadata->name]['methods'], true) + isset($this->staticReflection[$metadata->getClassName()]) && + in_array(strtolower($method), $this->staticReflection[$metadata->getClassName()]['methods'], true) ); } @@ -890,11 +890,11 @@ protected function hasMethod($method, ClassMetadata $metadata) */ protected function getTraits(ClassMetadata $metadata) { - if (! ($metadata->getReflectionClass() !== null || class_exists($metadata->name))) { + if (! ($metadata->getReflectionClass() !== null || class_exists($metadata->getClassName()))) { return []; } - $reflClass = $metadata->getReflectionClass() ?? new \ReflectionClass($metadata->name); + $reflClass = $metadata->getReflectionClass() ?? new \ReflectionClass($metadata->getClassName()); $traits = []; while ($reflClass !== false) { @@ -913,7 +913,7 @@ protected function getTraits(ClassMetadata $metadata) */ protected function hasNamespace(ClassMetadata $metadata) { - return (bool) strpos($metadata->name, '\\'); + return (bool) strpos($metadata->getClassName(), '\\'); } /** @@ -949,8 +949,8 @@ protected function getClassToExtendName() */ protected function getClassName(ClassMetadata $metadata) { - return ($pos = strrpos($metadata->name, '\\')) - ? substr($metadata->name, $pos + 1, strlen($metadata->name)) : $metadata->name; + return ($pos = strrpos($metadata->getClassName(), '\\')) + ? substr($metadata->getClassName(), $pos + 1, strlen($metadata->getClassName())) : $metadata->getClassName(); } /** @@ -960,7 +960,7 @@ protected function getClassName(ClassMetadata $metadata) */ protected function getNamespace(ClassMetadata $metadata) { - return substr($metadata->name, 0, strrpos($metadata->name, '\\')); + return substr($metadata->getClassName(), 0, strrpos($metadata->getClassName(), '\\')); } /** @@ -1326,7 +1326,7 @@ protected function generateEntityStubMethod(ClassMetadata $metadata, $type, $fie if ($this->hasMethod($methodName, $metadata)) { return ''; } - $this->staticReflection[$metadata->name]['methods'][] = strtolower($methodName); + $this->staticReflection[$metadata->getClassName()]['methods'][] = strtolower($methodName); $var = sprintf('%sMethodTemplate', $type); $template = static::$$var; @@ -1372,7 +1372,7 @@ protected function generateLifecycleCallbackMethod($name, $methodName, ClassMeta if ($this->hasMethod($methodName, $metadata)) { return ''; } - $this->staticReflection[$metadata->name]['methods'][] = $methodName; + $this->staticReflection[$metadata->getClassName()]['methods'][] = $methodName; $replacements = [ '' => $this->annotationsPrefix . ucfirst($name), diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php index 3c42d2d211f..36b4e2c5cac 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php @@ -159,7 +159,7 @@ public function export() */ protected function generateOutputPath(ClassMetadata $metadata) { - return $this->outputDir . '/' . str_replace('\\', '.', $metadata->name) . $this->extension; + return $this->outputDir . '/' . str_replace('\\', '.', $metadata->getClassName()) . $this->extension; } /** diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php index ad08eba4e65..a4efdd37024 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php @@ -65,7 +65,7 @@ public function exportClassMetadata(ClassMetadata $metadata) */ protected function generateOutputPath(ClassMetadata $metadata) { - return $this->outputDir . '/' . str_replace('\\', '/', $metadata->name) . $this->extension; + return $this->outputDir . '/' . str_replace('\\', '/', $metadata->getClassName()) . $this->extension; } /** diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index b9b0e8401c6..2ae327d100e 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -67,7 +67,7 @@ public function exportClassMetadata(ClassMetadata $metadata) $root->addAttribute('repository-class', $metadata->customRepositoryClassName); } - $root->addAttribute('name', $metadata->name); + $root->addAttribute('name', $metadata->getClassName()); if ($metadata->table->getName()) { $root->addAttribute('table', $metadata->table->getName()); diff --git a/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php b/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php index 6f247b51f60..40efb078dc6 100644 --- a/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php +++ b/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php @@ -115,7 +115,7 @@ public function loadClassMetadata(LoadClassMetadataEventArgs $args) } foreach ($this->resolveTargetEntities as $interface => $targetEntity) { - if ($targetEntity === $class->getName()) { + if ($targetEntity === $class->getClassName()) { $args->getEntityManager()->getMetadataFactory()->setMetadataFor($interface, $class); } } diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index f7e176fbbef..3d0adaa4e9a 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -125,10 +125,10 @@ public function getCreateSchemaSql(array $classes) private function processingNotRequired($class, array $processedClasses) { return ( - isset($processedClasses[$class->name]) || + isset($processedClasses[$class->getClassName()]) || $class->isMappedSuperclass || $class->isEmbeddedClass || - ($class->inheritanceType === InheritanceType::SINGLE_TABLE && $class->name !== $class->rootEntityName) + ($class->inheritanceType === InheritanceType::SINGLE_TABLE && ! $class->isRootEntity()) ); } @@ -211,7 +211,7 @@ public function getSchemaFromMetadata(array $classes) $this->gatherRelationsSql($class, $table, $schema, $addedFks, $blacklistedFks); // Add the discriminator column only to the root table - if ($class->name === $class->rootEntityName) { + if ($class->isRootEntity()) { $this->addDiscriminatorColumnDefinition($class, $table); } else { // Add an ID FK column to child tables @@ -234,7 +234,7 @@ public function getSchemaFromMetadata(array $classes) if ( ! empty($inheritedKeyColumns)) { // Add a FK constraint on the ID column - $rootClass = $this->em->getClassMetadata($class->rootEntityName); + $rootClass = $this->em->getClassMetadata($class->getRootClassName()); $table->addForeignKeyConstraint( $rootClass->table->getQuotedQualifiedName($this->platform), @@ -336,12 +336,12 @@ public function getSchemaFromMetadata(array $classes) } } - $processedClasses[$class->name] = true; + $processedClasses[$class->getClassName()] = true; foreach ($class->getProperties() as $property) { if (! $property instanceof FieldMetadata || $property->getIdentifierGeneratorType() !== GeneratorType::SEQUENCE - || $class->name !== $class->rootEntityName) { + || $class->getClassName() !== $class->getRootClassName()) { continue; } @@ -502,7 +502,7 @@ private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Tabl $options['autoincrement'] = true; } - if ($classMetadata->inheritanceType === InheritanceType::JOINED && $classMetadata->name !== $classMetadata->rootEntityName) { + if ($classMetadata->inheritanceType === InheritanceType::JOINED && ! $classMetadata->isRootEntity()) { $options['autoincrement'] = false; } @@ -654,7 +654,7 @@ private function getDefiningClass($class, $referencedColumnName) $joinColumns = $property->getJoinColumns(); if (count($joinColumns) > 1) { - throw MappingException::noSingleAssociationJoinColumnFound($class->name, $fieldName); + throw MappingException::noSingleAssociationJoinColumnFound($class->getClassName(), $fieldName); } $joinColumn = reset($joinColumns); diff --git a/lib/Doctrine/ORM/Tools/SchemaValidator.php b/lib/Doctrine/ORM/Tools/SchemaValidator.php index 838f5cf9847..1d84c1e3cce 100644 --- a/lib/Doctrine/ORM/Tools/SchemaValidator.php +++ b/lib/Doctrine/ORM/Tools/SchemaValidator.php @@ -77,7 +77,7 @@ public function validateMapping() foreach ($classes as $class) { if ($ce = $this->validateClass($class)) { - $errors[$class->name] = $ce; + $errors[$class->getClassName()] = $ce; } } @@ -104,10 +104,10 @@ public function validateClass(ClassMetadata $class) } foreach ($class->subClasses as $subClass) { - if (!in_array($class->name, class_parents($subClass))) { + if (!in_array($class->getClassName(), class_parents($subClass))) { $message = "According to the discriminator map class, '%s' has to be a child of '%s', but these entities are not related through inheritance."; - $ce[] = sprintf($message, $subClass, $class->name); + $ce[] = sprintf($message, $subClass, $class->getClassName()); } } @@ -130,7 +130,7 @@ private function validateAssociation(ClassMetadata $class, AssociationMetadata $ $message = "The target entity '%s' specified on %s#%s is unknown or not an entity."; return [ - sprintf($message, $targetEntity, $class->name, $fieldName) + sprintf($message, $targetEntity, $class->getClassName(), $fieldName) ]; } @@ -156,7 +156,7 @@ private function validateAssociation(ClassMetadata $class, AssociationMetadata $ if ($association->isPrimaryKey() && count($containsForeignId)) { $message = "Cannot map association %s#%s as identifier, because the target entity '%s' also maps an association as identifier."; - $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity); + $ce[] = sprintf($message, $class->getClassName(), $fieldName, $targetEntity); } if ($mappedBy) { @@ -166,20 +166,20 @@ private function validateAssociation(ClassMetadata $class, AssociationMetadata $ if (! $targetAssociation) { $message = "The association %s#%s refers to the owning side property %s#%s which does not exist."; - $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $mappedBy); + $ce[] = sprintf($message, $class->getClassName(), $fieldName, $targetEntity, $mappedBy); } else if ($targetAssociation instanceof FieldMetadata) { $message = "The association %s#%s refers to the owning side property %s#%s which is not defined as association, but as field."; - $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $mappedBy); + $ce[] = sprintf($message, $class->getClassName(), $fieldName, $targetEntity, $mappedBy); } else if ($targetAssociation->getInversedBy() === null) { $message = "The property %s#%s is on the inverse side of a bi-directional relationship, but the " . "specified mappedBy association on the target-entity %s#%s does not contain the required 'inversedBy=\"%s\"' attribute."; - $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $mappedBy, $fieldName); + $ce[] = sprintf($message, $class->getClassName(), $fieldName, $targetEntity, $mappedBy, $fieldName); } else if ($targetAssociation->getInversedBy() !== $fieldName) { $message = "The mapping between %s#%s and %s#%s are inconsistent with each other."; - $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $mappedBy); + $ce[] = sprintf($message, $class->getClassName(), $fieldName, $targetEntity, $mappedBy); } } @@ -190,20 +190,20 @@ private function validateAssociation(ClassMetadata $class, AssociationMetadata $ if (! $targetAssociation) { $message = "The association %s#%s refers to the inverse side property %s#%s which does not exist."; - $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $inversedBy); + $ce[] = sprintf($message, $class->getClassName(), $fieldName, $targetEntity, $inversedBy); } else if ($targetAssociation instanceof FieldMetadata) { $message = "The association %s#%s refers to the inverse side property %s#%s which is not defined as association, but as field."; - $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $inversedBy); + $ce[] = sprintf($message, $class->getClassName(), $fieldName, $targetEntity, $inversedBy); } else if ($targetAssociation->getMappedBy() === null) { $message = "The property %s#%s is on the owning side of a bi-directional relationship, but the " . "specified mappedBy association on the target-entity %s#%s does not contain the required 'inversedBy=\"%s\"' attribute."; - $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $mappedBy, $fieldName); + $ce[] = sprintf($message, $class->getClassName(), $fieldName, $targetEntity, $mappedBy, $fieldName); } else if ($targetAssociation->getMappedBy() !== $fieldName) { $message = "The mapping between %s#%s and %s#%s are inconsistent with each other."; - $ce[] = sprintf($message, $class->name, $fieldName, $targetEntity, $inversedBy); + $ce[] = sprintf($message, $class->getClassName(), $fieldName, $targetEntity, $inversedBy); } // Verify inverse side/owning side match each other @@ -211,15 +211,15 @@ private function validateAssociation(ClassMetadata $class, AssociationMetadata $ if ($association instanceof OneToOneAssociationMetadata && ! $targetAssociation instanceof OneToOneAssociationMetadata) { $message = "If association %s#%s is one-to-one, then the inversed side %s#%s has to be one-to-one as well."; - $ce[] = sprintf($message, $class->name, $fieldName, $targetMetadata->name, $inversedBy); + $ce[] = sprintf($message, $class->getClassName(), $fieldName, $targetMetadata->getClassName(), $inversedBy); } else if ($association instanceof ManyToOneAssociationMetadata && ! $targetAssociation instanceof OneToManyAssociationMetadata) { $message = "If association %s#%s is many-to-one, then the inversed side %s#%s has to be one-to-many."; - $ce[] = sprintf($message, $class->name, $fieldName, $targetMetadata->name, $inversedBy); + $ce[] = sprintf($message, $class->getClassName(), $fieldName, $targetMetadata->getClassName(), $inversedBy); } else if ($association instanceof ManyToManyAssociationMetadata && ! $targetAssociation instanceof ManyToManyAssociationMetadata) { $message = "If association %s#%s is many-to-many, then the inversed side %s#%s has to be many-to-many as well."; - $ce[] = sprintf($message, $class->name, $fieldName, $targetMetadata->name, $inversedBy); + $ce[] = sprintf($message, $class->getClassName(), $fieldName, $targetMetadata->getClassName(), $inversedBy); } } } @@ -234,7 +234,7 @@ private function validateAssociation(ClassMetadata $class, AssociationMetadata $ if (! in_array($joinColumn->getReferencedColumnName(), $classIdentifierColumns)) { $message = "The referenced column name '%s' has to be a primary key column on the target entity class '%s'."; - $ce[] = sprintf($message, $joinColumn->getReferencedColumnName(), $class->name); + $ce[] = sprintf($message, $joinColumn->getReferencedColumnName(), $class->getClassName()); break; } } @@ -243,7 +243,7 @@ private function validateAssociation(ClassMetadata $class, AssociationMetadata $ if (! in_array($inverseJoinColumn->getReferencedColumnName(), $targetIdentifierColumns)) { $message = "The referenced column name '%s' has to be a primary key column on the target entity class '%s'."; - $ce[] = sprintf($message, $joinColumn->getReferencedColumnName(), $targetMetadata->name); + $ce[] = sprintf($message, $joinColumn->getReferencedColumnName(), $targetMetadata->getClassName()); break; } } @@ -260,7 +260,7 @@ function (JoinColumnMetadata $joinColumn) { $message = "The inverse join columns of the many-to-many table '%s' have to contain to ALL " . "identifier columns of the target entity '%s', however '%s' are missing."; - $ce[] = sprintf($message, $joinTable->getName(), $targetMetadata->name, $columnString); + $ce[] = sprintf($message, $joinTable->getName(), $targetMetadata->getClassName(), $columnString); } if (count($classIdentifierColumns) !== count($joinTable->getJoinColumns())) { @@ -275,7 +275,7 @@ function (JoinColumnMetadata $joinColumn) { $message = "The join columns of the many-to-many table '%s' have to contain to ALL " . "identifier columns of the source entity '%s', however '%s' are missing."; - $ce[] = sprintf($message, $joinTable->getName(), $class->name, $columnString); + $ce[] = sprintf($message, $joinTable->getName(), $class->getClassName(), $columnString); } } else if ($association instanceof ToOneAssociationMetadata) { $identifierColumns = array_keys($targetMetadata->getIdentifierColumns($this->em)); @@ -285,7 +285,7 @@ function (JoinColumnMetadata $joinColumn) { if (!in_array($joinColumn->getReferencedColumnName(), $identifierColumns)) { $message = "The referenced column name '%s' has to be a primary key column on the target entity class '%s'."; - $ce[] = sprintf($message, $joinColumn->getReferencedColumnName(), $targetMetadata->name); + $ce[] = sprintf($message, $joinColumn->getReferencedColumnName(), $targetMetadata->getClassName()); } } @@ -300,7 +300,7 @@ function (JoinColumnMetadata $joinColumn) { $message = "The join columns of the association '%s' have to match to ALL " . "identifier columns of the target entity '%s', however '%s' are missing."; - $ce[] = sprintf($message, $fieldName, $targetMetadata->name, $columnString); + $ce[] = sprintf($message, $fieldName, $targetMetadata->getClassName(), $columnString); } } } @@ -316,21 +316,21 @@ function (JoinColumnMetadata $joinColumn) { if (! ($targetProperty instanceof AssociationMetadata)) { $message = "The association %s#%s is ordered by a property '%s' that is non-existing field on the target entity '%s'."; - $ce[] = sprintf($message, $class->name, $fieldName, $orderField, $targetMetadata->name); + $ce[] = sprintf($message, $class->getClassName(), $fieldName, $orderField, $targetMetadata->getClassName()); continue; } if ($targetProperty instanceof ToManyAssociationMetadata) { $message = "The association %s#%s is ordered by a property '%s' on '%s' that is a collection-valued association."; - $ce[] = sprintf($message, $class->name, $fieldName, $orderField, $targetMetadata->name); + $ce[] = sprintf($message, $class->getClassName(), $fieldName, $orderField, $targetMetadata->getClassName()); continue; } if ($targetProperty instanceof AssociationMetadata && ! $targetProperty->isOwningSide()) { $message = "The association %s#%s is ordered by a property '%s' on '%s' that is the inverse side of an association."; - $ce[] = sprintf($message, $class->name, $fieldName, $orderField, $targetMetadata->name); + $ce[] = sprintf($message, $class->getClassName(), $fieldName, $orderField, $targetMetadata->getClassName()); continue; } } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 8844b2e54c5..630619fc13a 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -769,7 +769,7 @@ private function computeAssociationChanges(AssociationMetadata $association, $va $targetClass = $this->em->getClassMetadata($targetEntity); foreach ($unwrappedValue as $key => $entry) { - if (! ($entry instanceof $targetClass->name)) { + if (! ($entry instanceof $targetEntity)) { throw ORMInvalidArgumentException::invalidAssociation($targetClass, $association, $entry); } @@ -947,12 +947,12 @@ public function recomputeSingleEntityChangeSet(ClassMetadata $class, $entity) */ private function executeInserts($class) { - $className = $class->name; + $className = $class->getClassName(); $persister = $this->getEntityPersister($className); $invoke = $this->listenersInvoker->getSubscribedSystems($class, Events::postPersist); foreach ($this->entityInsertions as $oid => $entity) { - if ($this->em->getClassMetadata(get_class($entity))->name !== $className) { + if ($this->em->getClassMetadata(get_class($entity))->getClassName() !== $className) { continue; } @@ -994,13 +994,13 @@ private function executeInserts($class) */ private function executeUpdates($class) { - $className = $class->name; + $className = $class->getClassName(); $persister = $this->getEntityPersister($className); $preUpdateInvoke = $this->listenersInvoker->getSubscribedSystems($class, Events::preUpdate); $postUpdateInvoke = $this->listenersInvoker->getSubscribedSystems($class, Events::postUpdate); foreach ($this->entityUpdates as $oid => $entity) { - if ($this->em->getClassMetadata(get_class($entity))->name !== $className) { + if ($this->em->getClassMetadata(get_class($entity))->getClassName() !== $className) { continue; } @@ -1034,12 +1034,12 @@ private function executeUpdates($class) */ private function executeDeletions($class) { - $className = $class->name; + $className = $class->getClassName(); $persister = $this->getEntityPersister($className); $invoke = $this->listenersInvoker->getSubscribedSystems($class, Events::postRemove); foreach ($this->entityDeletions as $oid => $entity) { - if ($this->em->getClassMetadata(get_class($entity))->name !== $className) { + if ($this->em->getClassMetadata(get_class($entity))->getClassName() !== $className) { continue; } @@ -1099,11 +1099,11 @@ private function getCommitOrder(array $entityChangeSet = null) foreach ($entityChangeSet as $entity) { $class = $this->em->getClassMetadata(get_class($entity)); - if ($calc->hasNode($class->name)) { + if ($calc->hasNode($class->getClassName())) { continue; } - $calc->addNode($class->name, $class); + $calc->addNode($class->getClassName(), $class); $newNodes[] = $class; } @@ -1117,8 +1117,8 @@ private function getCommitOrder(array $entityChangeSet = null) $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); - if ( ! $calc->hasNode($targetClass->name)) { - $calc->addNode($targetClass->name, $targetClass); + if ( ! $calc->hasNode($targetClass->getClassName())) { + $calc->addNode($targetClass->getClassName(), $targetClass); $newNodes[] = $targetClass; } @@ -1130,7 +1130,7 @@ function (JoinColumnMetadata $joinColumn) { return $joinColumn->isNullable(); } ) ) === 0; - $calc->addDependency($targetClass->name, $class->name, $weight); + $calc->addDependency($targetClass->getClassName(), $class->getClassName(), $weight); // If the target class has mapped subclasses, these share the same dependency. if ( ! $targetClass->subClasses) { @@ -1141,12 +1141,12 @@ function (JoinColumnMetadata $joinColumn) { return $joinColumn->isNullable(); } $targetSubClass = $this->em->getClassMetadata($subClassName); if ( ! $calc->hasNode($subClassName)) { - $calc->addNode($targetSubClass->name, $targetSubClass); + $calc->addNode($targetSubClass->getClassName(), $targetSubClass); $newNodes[] = $targetSubClass; } - $calc->addDependency($targetSubClass->name, $class->name, 1); + $calc->addDependency($targetSubClass->getClassName(), $class->getClassName(), 1); } } } @@ -1284,7 +1284,7 @@ public function isScheduledForUpdate($entity) */ public function isScheduledForDirtyCheck($entity) { - $rootEntityName = $this->em->getClassMetadata(get_class($entity))->rootEntityName; + $rootEntityName = $this->em->getClassMetadata(get_class($entity))->getRootClassName(); return isset($this->scheduledForSynchronization[$rootEntityName][spl_object_hash($entity)]); } @@ -1375,11 +1375,11 @@ public function addToIdentityMap($entity) $identifier = $this->entityIdentifiers[spl_object_hash($entity)]; if (empty($identifier) || in_array(null, $identifier, true)) { - throw ORMInvalidArgumentException::entityWithoutIdentity($classMetadata->name, $entity); + throw ORMInvalidArgumentException::entityWithoutIdentity($classMetadata->getClassName(), $entity); } $idHash = implode(' ', $identifier); - $className = $classMetadata->rootEntityName; + $className = $classMetadata->getRootClassName(); if (isset($this->identityMap[$className][$idHash])) { return false; @@ -1438,12 +1438,12 @@ public function getEntityState($entity, $assume = null) } // Last try before db lookup: check the identity map. - if ($this->tryGetById($flatId, $class->rootEntityName)) { + if ($this->tryGetById($flatId, $class->getRootClassName())) { return self::STATE_DETACHED; } // db lookup - if ($this->getEntityPersister($class->name)->exists($entity)) { + if ($this->getEntityPersister($class->getClassName())->exists($entity)) { return self::STATE_DETACHED; } @@ -1458,12 +1458,12 @@ public function getEntityState($entity, $assume = null) // the last resort: a db lookup // Last try before db lookup: check the identity map. - if ($this->tryGetById($flatId, $class->rootEntityName)) { + if ($this->tryGetById($flatId, $class->getRootClassName())) { return self::STATE_DETACHED; } // db lookup - if ($this->getEntityPersister($class->name)->exists($entity)) { + if ($this->getEntityPersister($class->getClassName())->exists($entity)) { return self::STATE_DETACHED; } @@ -1496,7 +1496,7 @@ public function removeFromIdentityMap($entity) throw ORMInvalidArgumentException::entityHasNoIdentity($entity, "remove from identity map"); } - $className = $classMetadata->rootEntityName; + $className = $classMetadata->getRootClassName(); if (isset($this->identityMap[$className][$idHash])) { unset($this->identityMap[$className][$idHash]); @@ -1565,7 +1565,7 @@ public function isInIdentityMap($entity) $classMetadata = $this->em->getClassMetadata(get_class($entity)); $idHash = implode(' ', $this->entityIdentifiers[$oid]); - return isset($this->identityMap[$classMetadata->rootEntityName][$idHash]); + return isset($this->identityMap[$classMetadata->getRootClassName()][$idHash]); } /** @@ -1798,7 +1798,7 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, Asso $this->persistNew($class, $managedCopy); } else { $flatId = $this->em->getIdentifierFlattener()->flattenIdentifier($class, $id); - $managedCopy = $this->tryGetById($flatId, $class->rootEntityName); + $managedCopy = $this->tryGetById($flatId, $class->getRootClassName()); if ($managedCopy) { // We have the entity in-memory already, just make sure its not removed. @@ -1807,7 +1807,7 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, Asso } } else { // We need to fetch the managed copy in order to merge. - $managedCopy = $this->em->find($class->name, $flatId); + $managedCopy = $this->em->find($class->getClassName(), $flatId); } if ($managedCopy === null) { @@ -1817,7 +1817,7 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, Asso && $class->getProperty($class->getSingleIdentifierFieldName()) instanceof FieldMetadata && $class->getProperty($class->getSingleIdentifierFieldName())->getIdentifierGeneratorType() !== GeneratorType::NONE) { throw EntityNotFoundException::fromClassNameAndIdentifier( - $class->getName(), + $class->getClassName(), $this->em->getIdentifierFlattener()->flattenIdentifier($class, $id) ); } @@ -2028,7 +2028,7 @@ private function doRefresh($entity, array &$visited) throw ORMInvalidArgumentException::entityNotManaged($entity); } - $this->getEntityPersister($class->name)->refresh( + $this->getEntityPersister($class->getClassName())->refresh( array_combine($class->getIdentifierFieldNames(), $this->entityIdentifiers[$oid]), $entity ); @@ -2306,7 +2306,7 @@ public function lock($entity, $lockMode, $lockVersion = null) switch (true) { case LockMode::OPTIMISTIC === $lockMode: if ( ! $class->isVersioned()) { - throw OptimisticLockException::notVersioned($class->name); + throw OptimisticLockException::notVersioned($class->getClassName()); } if ($lockVersion === null) { @@ -2334,7 +2334,7 @@ public function lock($entity, $lockMode, $lockVersion = null) $oid = spl_object_hash($entity); - $this->getEntityPersister($class->name)->lock( + $this->getEntityPersister($class->getClassName())->lock( array_combine($class->getIdentifierFieldNames(), $this->entityIdentifiers[$oid]), $lockMode ); @@ -2450,7 +2450,7 @@ public function isCollectionScheduledForDeletion(PersistentCollection $coll) */ public function newInstance(ClassMetadata $class) { - $entity = $this->instantiator->instantiate($class->getName()); + $entity = $this->instantiator->instantiate($class->getClassName()); if ($entity instanceof \Doctrine\Common\Persistence\ObjectManagerAware) { $entity->injectObjectManager($this->em, $class); @@ -2482,8 +2482,8 @@ public function createEntity($className, array $data, &$hints = []) $idHash = implode(' ', $id); //$isReadOnly = isset($hints[Query::HINT_READ_ONLY]); - if (isset($this->identityMap[$class->rootEntityName][$idHash])) { - $entity = $this->identityMap[$class->rootEntityName][$idHash]; + if (isset($this->identityMap[$class->getRootClassName()][$idHash])) { + $entity = $this->identityMap[$class->getRootClassName()][$idHash]; $oid = spl_object_hash($entity); if ( @@ -2538,7 +2538,7 @@ public function createEntity($className, array $data, &$hints = []) $this->entityStates[$oid] = self::STATE_MANAGED; $this->originalEntityData[$oid] = $data; - $this->identityMap[$class->rootEntityName][$idHash] = $entity; + $this->identityMap[$class->getRootClassName()][$idHash] = $entity; if ($entity instanceof NotifyPropertyChanged) { $entity->addPropertyChangedListener($this); @@ -2560,10 +2560,10 @@ public function createEntity($className, array $data, &$hints = []) } // Loading the entity right here, if its in the eager loading map get rid of it there. - unset($this->eagerLoadingEntities[$class->rootEntityName][$idHash]); + unset($this->eagerLoadingEntities[$class->getRootClassName()][$idHash]); - if (isset($this->eagerLoadingEntities[$class->rootEntityName]) && ! $this->eagerLoadingEntities[$class->rootEntityName]) { - unset($this->eagerLoadingEntities[$class->rootEntityName]); + if (isset($this->eagerLoadingEntities[$class->getRootClassName()]) && ! $this->eagerLoadingEntities[$class->getRootClassName()]) { + unset($this->eagerLoadingEntities[$class->getRootClassName()]); } // Properly initialize any unfetched associations, if partial objects are not allowed. @@ -2679,8 +2679,8 @@ public function createEntity($className, array $data, &$hints = []) } // @todo guilhermeblanco Can we remove the need of this somehow? - if (!isset($hints['fetchMode'][$class->name][$field])) { - $hints['fetchMode'][$class->name][$field] = $association->getFetchMode(); + if (!isset($hints['fetchMode'][$class->getClassName()][$field])) { + $hints['fetchMode'][$class->getClassName()][$field] = $association->getFetchMode(); } // Foreign key is set @@ -2690,8 +2690,8 @@ public function createEntity($className, array $data, &$hints = []) $relatedIdHash = implode(' ', $associatedId); switch (true) { - case (isset($this->identityMap[$targetClass->rootEntityName][$relatedIdHash])): - $newValue = $this->identityMap[$targetClass->rootEntityName][$relatedIdHash]; + case (isset($this->identityMap[$targetClass->getRootClassName()][$relatedIdHash])): + $newValue = $this->identityMap[$targetClass->getRootClassName()][$relatedIdHash]; // If this is an uninitialized proxy, we are deferring eager loads, // this association is marked as eager fetch, and its an uninitialized proxy (wtf!) @@ -2699,11 +2699,11 @@ public function createEntity($className, array $data, &$hints = []) if (!$targetClass->isIdentifierComposite() && $newValue instanceof Proxy && isset($hints[self::HINT_DEFEREAGERLOAD]) && - $hints['fetchMode'][$class->name][$field] === FetchMode::EAGER && + $hints['fetchMode'][$class->getClassName()][$field] === FetchMode::EAGER && ! $newValue->__isInitialized() ) { - $this->eagerLoadingEntities[$targetClass->rootEntityName][$relatedIdHash] = current($associatedId); + $this->eagerLoadingEntities[$targetClass->getRootClassName()][$relatedIdHash] = current($associatedId); } break; @@ -2722,14 +2722,14 @@ public function createEntity($className, array $data, &$hints = []) switch (true) { // We are negating the condition here. Other cases will assume it is valid! - case ($hints['fetchMode'][$class->name][$field] !== FetchMode::EAGER): + case ($hints['fetchMode'][$class->getClassName()][$field] !== FetchMode::EAGER): $newValue = $this->em->getProxyFactory()->getProxy($targetEntity, $associatedId); break; // Deferred eager load only works for single identifier classes case (isset($hints[self::HINT_DEFEREAGERLOAD]) && !$targetClass->isIdentifierComposite()): // TODO: Is there a faster approach? - $this->eagerLoadingEntities[$targetClass->rootEntityName][$relatedIdHash] = current($associatedId); + $this->eagerLoadingEntities[$targetClass->getRootClassName()][$relatedIdHash] = current($associatedId); $newValue = $this->em->getProxyFactory()->getProxy($targetEntity, $associatedId); break; @@ -2938,7 +2938,7 @@ public function tryGetById($id, $rootClassName) */ public function scheduleForSynchronization($entity) { - $rootClassName = $this->em->getClassMetadata(get_class($entity))->rootEntityName; + $rootClassName = $this->em->getClassMetadata(get_class($entity))->getRootClassName(); $this->scheduledForSynchronization[$rootClassName][spl_object_hash($entity)] = $entity; } @@ -3107,7 +3107,7 @@ public function propertyChanged($entity, $propertyName, $oldValue, $newValue) // Update changeset and mark entity for synchronization $this->entityChangeSets[$oid][$propertyName] = [$oldValue, $newValue]; - if ( ! isset($this->scheduledForSynchronization[$class->rootEntityName][$oid])) { + if ( ! isset($this->scheduledForSynchronization[$class->getRootClassName()][$oid])) { $this->scheduleForSynchronization($entity); } } @@ -3372,7 +3372,7 @@ private function mergeEntityStateIntoManagedCopy($entity, $managedCopy) $relatedId = $targetClass->getIdentifierValues($other); if ($targetClass->subClasses) { - $other = $this->em->find($targetClass->name, $relatedId); + $other = $this->em->find($targetClass->getClassName(), $relatedId); } else { $other = $this->em->getProxyFactory()->getProxy($targetEntity, $relatedId); diff --git a/lib/Doctrine/ORM/Utility/PersisterHelper.php b/lib/Doctrine/ORM/Utility/PersisterHelper.php index 13059814f46..8effe2f5070 100644 --- a/lib/Doctrine/ORM/Utility/PersisterHelper.php +++ b/lib/Doctrine/ORM/Utility/PersisterHelper.php @@ -106,7 +106,7 @@ public static function getTypeOfColumn($columnName, ClassMetadata $class, Entity throw new \RuntimeException(sprintf( 'Could not resolve type of column "%s" of class "%s"', $columnName, - $class->getName() + $class->getClassName() )); } } diff --git a/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php b/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php index 5a8f8193f90..5163903dcf2 100644 --- a/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php +++ b/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php @@ -43,7 +43,7 @@ public function loadClassMetadata(LoadClassMetadataEventArgs $event) */ private function isVisited(ClassMetadata $metadata) { - return isset($this->enabledItems[$metadata->getName()]); + return isset($this->enabledItems[$metadata->getClassName()]); } /** @@ -51,7 +51,7 @@ private function isVisited(ClassMetadata $metadata) */ private function recordVisit(ClassMetadata $metadata) { - $this->enabledItems[$metadata->getName()] = true; + $this->enabledItems[$metadata->getClassName()] = true; } /** @@ -68,7 +68,7 @@ protected function enableCaching(ClassMetadata $metadata, EntityManager $em) return; } - $region = strtolower(str_replace('\\', '_', $metadata->rootEntityName)); + $region = strtolower(str_replace('\\', '_', $metadata->getRootClassName())); $metadata->setCache(new CacheMetadata(CacheUsage::NONSTRICT_READ_WRITE, $region)); @@ -78,7 +78,7 @@ protected function enableCaching(ClassMetadata $metadata, EntityManager $em) // given caching settings foreach ($metadata->associationMappings as $association) { $targetMeta = $em->getClassMetadata($association->getTargetEntity()); - + $this->enableCaching($targetMeta, $em); if ($this->isVisited($targetMeta)) { diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php index 868f8d86dd1..dfedfae9d33 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php @@ -31,7 +31,7 @@ class DefaultCacheTest extends OrmTestCase protected function setUp() { $this->enableSecondLevelCache(); - + parent::setUp(); $this->em = $this->getTestEntityManager(); @@ -48,7 +48,7 @@ private function putEntityCacheEntry($className, array $identifier, array $data) $metadata = $this->em->getClassMetadata($className); $cacheKey = new EntityCacheKey($metadata->name, $identifier); $cacheEntry = new EntityCacheEntry($metadata->name, $data); - $persister = $this->em->getUnitOfWork()->getEntityPersister($metadata->rootEntityName); + $persister = $this->em->getUnitOfWork()->getEntityPersister($metadata->getRootClassName()); $persister->getCacheRegion()->put($cacheKey, $cacheEntry); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 0e4cb2a5d16..70aadf206b1 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -37,7 +37,7 @@ public function testClassMetadataInstanceSerialization() // Test initial state self::assertInstanceOf(\ReflectionClass::class, $cm->getReflectionClass()); self::assertEquals(CMS\CmsUser::class, $cm->name); - self::assertEquals(CMS\CmsUser::class, $cm->rootEntityName); + self::assertEquals(CMS\CmsUser::class, $cm->getRootClassName()); self::assertEquals([], $cm->subClasses); self::assertEquals([], $cm->parentClasses); self::assertEquals(Mapping\InheritanceType::NONE, $cm->inheritanceType); @@ -72,7 +72,7 @@ public function testClassMetadataInstanceSerialization() // Check state self::assertInstanceOf(\ReflectionClass::class, $cm->getReflectionClass()); self::assertEquals(CMS\CmsUser::class, $cm->name); - self::assertEquals('UserParent', $cm->rootEntityName); + self::assertEquals('UserParent', $cm->getRootClassName()); self::assertEquals([CMS\One::class, CMS\Two::class, CMS\Three::class], $cm->subClasses); self::assertEquals(['UserParent'], $cm->parentClasses); self::assertEquals(CMS\UserRepository::class, $cm->customRepositoryClassName); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 971bd507c12..1b9f242cc82 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -256,7 +256,7 @@ private function generateIsbnEmbeddableFixture(array $embeddedClasses = [], $col $metadata->mapEmbedded( [ 'fieldName' => $fieldName, - 'class' => $embeddedClass->name, + 'class' => $embeddedClass->getClassName(), 'columnPrefix' => $columnPrefix, ] ); @@ -509,7 +509,7 @@ public function testMethodDocBlockShouldStartWithBackSlash() self::assertPhpDocReturnType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor|null', new \ReflectionMethod($book, 'getAuthor')); self::assertPhpDocParamType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor|null', new \ReflectionMethod($book, 'setAuthor')); -// $expectedClassName = '\\' . $embeddedMetadata->name; +// $expectedClassName = '\\' . $embeddedMetadata->getClassName(); // self::assertPhpDocVarType($expectedClassName, new \ReflectionProperty($book, 'isbn')); // self::assertPhpDocReturnType($expectedClassName, new \ReflectionMethod($book, 'getIsbn')); // self::assertPhpDocParamType($expectedClassName, new \ReflectionMethod($book, 'setIsbn')); @@ -566,10 +566,10 @@ public function testLoadMetadata() // $isbn = $this->newInstance($embeddedMetadata); // -// $cm = new ClassMetadata($embeddedMetadata->name); +// $cm = new ClassMetadata($embeddedMetadata->getClassName()); // $cm->initializeReflection($reflectionService); // -// $driver->loadMetadataForClass($cm->name, $cm); +// $driver->loadMetadataForClass($cm->getClassName(), $cm); // // self::assertEquals($cm->embeddedClasses, $embeddedMetadata->embeddedClasses); // self::assertEquals($cm->isEmbeddedClass, $embeddedMetadata->isEmbeddedClass); @@ -597,10 +597,10 @@ public function testLoadPrefixedMetadata() // $isbn = $this->newInstance($embeddedMetadata); // -// $cm = new ClassMetadata($embeddedMetadata->name); +// $cm = new ClassMetadata($embeddedMetadata->getClassName()); // $cm->initializeReflection($reflectionService); // -// $driver->loadMetadataForClass($cm->name, $cm); +// $driver->loadMetadataForClass($cm->getClassName(), $cm); // // self::assertEquals($cm->embeddedClasses, $embeddedMetadata->embeddedClasses); // self::assertEquals($cm->isEmbeddedClass, $embeddedMetadata->isEmbeddedClass); @@ -1113,7 +1113,7 @@ public function testRegenerateEntityClass() $metadata = $this->generateBookEntityFixture(); $this->loadEntityClass($metadata); - $className = basename(str_replace('\\', '/', $metadata->name)); + $className = basename(str_replace('\\', '/', $metadata->getClassName())); $path = $this->tmpDir . '/' . $this->namespace . '/' . $className . '.php'; $classTest = file_get_contents($path); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index d73694829cd..206e19c72b6 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -96,7 +96,7 @@ public function testExportDirectoryAndFilesAreCreated() $metadata[0]->name = ExportedUser::class; - self::assertEquals(ExportedUser::class, $metadata[0]->name); + self::assertEquals(ExportedUser::class, $metadata[0]->getClassName()); $type = $this->getType(); $cme = new ClassMetadataExporter(); @@ -134,7 +134,7 @@ public function testExportedMetadataCanBeReadBackIn() $class = current($metadata); - self::assertEquals(ExportedUser::class, $class->name); + self::assertEquals(ExportedUser::class, $class->getClassName()); return $class; } From d38944d3be4b77991ed6c25847933cf084da2987 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 17 Jul 2017 22:34:17 -0400 Subject: [PATCH 166/275] Removed direct access to ClassMetadata->name --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 12 +- .../ORM/Mapping/Driver/DatabaseDriver.php | 2 +- .../Tests/ORM/Cache/DefaultCacheTest.php | 6 +- .../Cache/DefaultCollectionHydratorTest.php | 10 +- .../ORM/Cache/DefaultEntityHydratorTest.php | 22 +-- .../Tests/ORM/CommitOrderCalculatorTest.php | 26 +-- .../ORM/Functional/ReferenceProxyTest.php | 2 +- .../Tests/ORM/Functional/SQLFilterTest.php | 34 ++-- .../ORM/Functional/SchemaValidatorTest.php | 2 +- .../ORM/Functional/Ticket/DDC1163Test.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 12 +- .../ORM/Mapping/ClassMetadataFactoryTest.php | 16 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 6 +- .../Tests/ORM/Query/CustomTreeWalkersTest.php | 2 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 177 ++++++++++-------- .../Tools/EntityRepositoryGeneratorTest.php | 9 +- .../AbstractClassMetadataExporterTest.php | 3 +- 17 files changed, 188 insertions(+), 155 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 508656ea612..df1648b82b5 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -52,7 +52,7 @@ class ClassMetadata implements TableOwner, \Doctrine\Common\Persistence\Mapping\ * * @var string */ - public $name; + protected $name; /** * READ-ONLY: The name of the entity class that is at the root of the mapped entity inheritance @@ -289,6 +289,16 @@ public function __construct($entityName, NamingStrategy $namingStrategy = null) $this->setTable(new TableMetadata()); } + /** + * @todo guilhermeblanco Remove once ClassMetadataFactory is finished + * + * @param string $className + */ + public function setClassName(string $className) + { + $this->name = $className; + } + /** * @return string */ diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index cb9c0e31c75..3bb0b7104ed 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -184,7 +184,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat } // @todo guilhermeblanco This should somehow disappear... =) - $metadata->name = $className; + $metadata->setClassName($className); $this->buildTable($metadata); $this->buildFieldMappings($metadata); diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php index dfedfae9d33..86c3b98e356 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php @@ -46,8 +46,8 @@ protected function setUp() private function putEntityCacheEntry($className, array $identifier, array $data) { $metadata = $this->em->getClassMetadata($className); - $cacheKey = new EntityCacheKey($metadata->name, $identifier); - $cacheEntry = new EntityCacheEntry($metadata->name, $data); + $cacheKey = new EntityCacheKey($metadata->getClassName(), $identifier); + $cacheEntry = new EntityCacheEntry($metadata->getClassName(), $data); $persister = $this->em->getUnitOfWork()->getEntityPersister($metadata->getRootClassName()); $persister->getCacheRegion()->put($cacheKey, $cacheEntry); @@ -62,7 +62,7 @@ private function putEntityCacheEntry($className, array $identifier, array $data) private function putCollectionCacheEntry($className, $association, array $ownerIdentifier, array $data) { $metadata = $this->em->getClassMetadata($className); - $cacheKey = new CollectionCacheKey($metadata->name, $association, $ownerIdentifier); + $cacheKey = new CollectionCacheKey($metadata->getClassName(), $association, $ownerIdentifier); $cacheEntry = new CollectionCacheEntry($data); $persister = $this->em->getUnitOfWork()->getCollectionPersister($metadata->getProperty($association)); diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCollectionHydratorTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCollectionHydratorTest.php index 6e3c5082e2f..cb3f9de31b4 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCollectionHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCollectionHydratorTest.php @@ -55,7 +55,7 @@ public function testLoadCacheCollection() $sourceClass = $this->em->getClassMetadata(State::class); $targetClass = $this->em->getClassMetadata(City::class); - $key = new CollectionCacheKey($sourceClass->name, 'cities', ['id'=>21]); + $key = new CollectionCacheKey($sourceClass->getClassName(), 'cities', ['id'=>21]); $collection = new PersistentCollection($this->em, $targetClass, new ArrayCollection()); $list = $this->structure->loadCacheEntry($sourceClass, $key, $entry, $collection); @@ -63,10 +63,10 @@ public function testLoadCacheCollection() self::assertCount(2, $list); self::assertCount(2, $collection); - self::assertInstanceOf($targetClass->name, $list[0]); - self::assertInstanceOf($targetClass->name, $list[1]); - self::assertInstanceOf($targetClass->name, $collection[0]); - self::assertInstanceOf($targetClass->name, $collection[1]); + self::assertInstanceOf($targetClass->getClassName(), $list[0]); + self::assertInstanceOf($targetClass->getClassName(), $list[1]); + self::assertInstanceOf($targetClass->getClassName(), $collection[0]); + self::assertInstanceOf($targetClass->getClassName(), $collection[1]); self::assertSame($list[0], $collection[0]); self::assertSame($list[1], $collection[1]); diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php index 2bfce6d4eac..e4a51ab134c 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php @@ -43,11 +43,11 @@ public function testImplementsEntityEntryStructure() public function testCreateEntity() { $metadata = $this->em->getClassMetadata(Country::class); - $key = new EntityCacheKey($metadata->name, ['id'=>1]); - $entry = new EntityCacheEntry($metadata->name, ['id'=>1, 'name'=>'Foo']); + $key = new EntityCacheKey($metadata->getClassName(), ['id'=>1]); + $entry = new EntityCacheEntry($metadata->getClassName(), ['id'=>1, 'name'=>'Foo']); $entity = $this->structure->loadCacheEntry($metadata, $key, $entry); - self::assertInstanceOf($metadata->name, $entity); + self::assertInstanceOf($metadata->getClassName(), $entity); self::assertEquals(1, $entity->getId()); self::assertEquals('Foo', $entity->getName()); @@ -57,12 +57,12 @@ public function testCreateEntity() public function testLoadProxy() { $metadata = $this->em->getClassMetadata(Country::class); - $key = new EntityCacheKey($metadata->name, ['id'=>1]); - $entry = new EntityCacheEntry($metadata->name, ['id'=>1, 'name'=>'Foo']); - $proxy = $this->em->getReference($metadata->name, $key->identifier); + $key = new EntityCacheKey($metadata->getClassName(), ['id'=>1]); + $entry = new EntityCacheEntry($metadata->getClassName(), ['id'=>1, 'name'=>'Foo']); + $proxy = $this->em->getReference($metadata->getClassName(), $key->identifier); $entity = $this->structure->loadCacheEntry($metadata, $key, $entry, $proxy); - self::assertInstanceOf($metadata->name, $entity); + self::assertInstanceOf($metadata->getClassName(), $entity); self::assertSame($proxy, $entity); self::assertEquals(1, $entity->getId()); @@ -76,7 +76,7 @@ public function testBuildCacheEntry() $uow = $this->em->getUnitOfWork(); $data = ['id'=>1, 'name'=>'Foo']; $metadata = $this->em->getClassMetadata(Country::class); - $key = new EntityCacheKey($metadata->name, ['id'=>1]); + $key = new EntityCacheKey($metadata->getClassName(), ['id'=>1]); $entity->setId(1); $uow->registerManaged($entity, $key->identifier, $data); @@ -105,7 +105,7 @@ public function testBuildCacheEntryAssociation() $countryData = ['id'=>11, 'name'=>'Foo']; $stateData = ['id'=>12, 'name'=>'Bar', 'country' => $country]; $metadata = $this->em->getClassMetadata(State::class); - $key = new EntityCacheKey($metadata->name, ['id'=>11]); + $key = new EntityCacheKey($metadata->getClassName(), ['id'=>11]); $country->setId(11); $state->setId(12); @@ -138,7 +138,7 @@ public function testBuildCacheEntryNonInitializedAssocProxy() $uow = $this->em->getUnitOfWork(); $entityData = ['id'=>12, 'name'=>'Bar', 'country' => $proxy]; $metadata = $this->em->getClassMetadata(State::class); - $key = new EntityCacheKey($metadata->name, ['id'=>11]); + $key = new EntityCacheKey($metadata->getClassName(), ['id'=>11]); $entity->setId(12); @@ -169,7 +169,7 @@ public function testCacheEntryWithWrongIdentifierType() $uow = $this->em->getUnitOfWork(); $entityData = ['id'=> 12, 'name'=>'Bar', 'country' => $proxy]; $metadata = $this->em->getClassMetadata(State::class); - $key = new EntityCacheKey($metadata->name, ['id'=>'12']); + $key = new EntityCacheKey($metadata->getClassName(), ['id'=>'12']); $entity->setId(12); diff --git a/tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php b/tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php index b658b846633..7eff2c53cdf 100644 --- a/tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php +++ b/tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php @@ -30,16 +30,16 @@ public function testCommitOrdering1() $class4 = new ClassMetadata(NodeClass4::class); $class5 = new ClassMetadata(NodeClass5::class); - $this->calc->addNode($class1->name, $class1); - $this->calc->addNode($class2->name, $class2); - $this->calc->addNode($class3->name, $class3); - $this->calc->addNode($class4->name, $class4); - $this->calc->addNode($class5->name, $class5); + $this->calc->addNode($class1->getClassName(), $class1); + $this->calc->addNode($class2->getClassName(), $class2); + $this->calc->addNode($class3->getClassName(), $class3); + $this->calc->addNode($class4->getClassName(), $class4); + $this->calc->addNode($class5->getClassName(), $class5); - $this->calc->addDependency($class1->name, $class2->name, 1); - $this->calc->addDependency($class2->name, $class3->name, 1); - $this->calc->addDependency($class3->name, $class4->name, 1); - $this->calc->addDependency($class5->name, $class1->name, 1); + $this->calc->addDependency($class1->getClassName(), $class2->getClassName(), 1); + $this->calc->addDependency($class2->getClassName(), $class3->getClassName(), 1); + $this->calc->addDependency($class3->getClassName(), $class4->getClassName(), 1); + $this->calc->addDependency($class5->getClassName(), $class1->getClassName(), 1); $sorted = $this->calc->sort(); @@ -54,11 +54,11 @@ public function testCommitOrdering2() $class1 = new ClassMetadata(NodeClass1::class); $class2 = new ClassMetadata(NodeClass2::class); - $this->calc->addNode($class1->name, $class1); - $this->calc->addNode($class2->name, $class2); + $this->calc->addNode($class1->getClassName(), $class1); + $this->calc->addNode($class2->getClassName(), $class2); - $this->calc->addDependency($class1->name, $class2->name, 0); - $this->calc->addDependency($class2->name, $class1->name, 1); + $this->calc->addDependency($class1->getClassName(), $class2->getClassName(), 0); + $this->calc->addDependency($class2->getClassName(), $class1->getClassName(), 1); $sorted = $this->calc->sort(); diff --git a/tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php b/tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php index 467184f9cc7..87d79f153cb 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php @@ -97,7 +97,7 @@ public function testAccessMetatadaForProxy() $entity = $this->em->getReference(ECommerceProduct::class , $id); $class = $this->em->getClassMetadata(get_class($entity)); - self::assertEquals(ECommerceProduct::class, $class->name); + self::assertEquals(ECommerceProduct::class, $class->getClassName()); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php index 57b7339e61f..9f2f4722f27 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php @@ -97,8 +97,9 @@ public function testEntityManagerEnabledFilters() self::assertEquals([], $em->getFilters()->getEnabledFilters()); $this->configureFilters($em); - $filter = $em->getFilters()->enable("locale"); - $filter = $em->getFilters()->enable("soft_delete"); + + $em->getFilters()->enable("locale"); + $em->getFilters()->enable("soft_delete"); // Two enabled filters self::assertEquals(2, count($em->getFilters()->getEnabledFilters())); @@ -294,20 +295,17 @@ public function testSQLFilterSetParameterInfersType() public function testSQLFilterAddConstraint() { - // Set up metadata mock - $targetEntity = $this->getMockBuilder(ClassMetadata::class) - ->disableOriginalConstructor() - ->getMock(); - $filter = new MySoftDeleteFilter($this->getMockEntityManager()); // Test for an entity that gets extra filter data - $targetEntity->name = 'MyEntity\SoftDeleteNewsItem'; - self::assertEquals('t1_.deleted = 0', $filter->addFilterConstraint($targetEntity, 't1_')); + $metadata = new ClassMetadata('MyEntity\SoftDeleteNewsItem'); + + self::assertEquals('t1_.deleted = 0', $filter->addFilterConstraint($metadata, 't1_')); // Test for an entity that doesn't get extra filter data - $targetEntity->name = 'MyEntity\NoSoftDeleteNewsItem'; - self::assertEquals('', $filter->addFilterConstraint($targetEntity, 't1_')); + $metadata = new ClassMetadata('MyEntity\NoSoftDeleteNewsItem'); + + self::assertEquals('', $filter->addFilterConstraint($metadata, 't1_')); } @@ -1099,7 +1097,7 @@ class MySoftDeleteFilter extends SQLFilter { public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias) { - if ($targetEntity->name != "MyEntity\SoftDeleteNewsItem") { + if ($targetEntity->getClassName() !== "MyEntity\SoftDeleteNewsItem") { return ""; } @@ -1123,7 +1121,7 @@ class CMSCountryFilter extends SQLFilter { public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias) { - if ($targetEntity->name != CmsAddress::class) { + if ($targetEntity->getClassName() !== CmsAddress::class) { return ""; } @@ -1135,7 +1133,7 @@ class CMSGroupPrefixFilter extends SQLFilter { public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias) { - if ($targetEntity->name != CmsGroup::class) { + if ($targetEntity->getClassName() !== CmsGroup::class) { return ""; } @@ -1147,7 +1145,7 @@ class CMSArticleTopicFilter extends SQLFilter { public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias) { - if ($targetEntity->name != CmsArticle::class) { + if ($targetEntity->getClassName() !== CmsArticle::class) { return ""; } @@ -1159,7 +1157,7 @@ class CompanyPersonNameFilter extends SQLFilter { public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias, $targetTable = '') { - if ($targetEntity->name != CompanyPerson::class) { + if ($targetEntity->getClassName() !== CompanyPerson::class) { return ""; } @@ -1171,7 +1169,7 @@ class CompletedContractFilter extends SQLFilter { public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias, $targetTable = '') { - if ($targetEntity->name != CompanyContract::class) { + if ($targetEntity->getClassName() !== CompanyContract::class) { return ""; } @@ -1183,7 +1181,7 @@ class CompanyEventFilter extends SQLFilter { public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias, $targetTable = '') { - if ($targetEntity->name != CompanyEvent::class) { + if ($targetEntity->getClassName() !== CompanyEvent::class) { return ""; } diff --git a/tests/Doctrine/Tests/ORM/Functional/SchemaValidatorTest.php b/tests/Doctrine/Tests/ORM/Functional/SchemaValidatorTest.php index 3a3808b175b..dd9452114a5 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SchemaValidatorTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SchemaValidatorTest.php @@ -70,7 +70,7 @@ public function testValidateModelSets(string $modelSet) foreach ($classes as $class) { $ce = $validator->validateClass($class); - self::assertEmpty($ce, "Invalid Modelset: " . $modelSet . " class " . $class->name . ": ". implode("\n", $ce)); + self::assertEmpty($ce, "Invalid Modelset: " . $modelSet . " class " . $class->getClassName() . ": ". implode("\n", $ce)); } } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1163Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1163Test.php index 8ac023374ec..a9d8c8879e3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1163Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1163Test.php @@ -81,7 +81,7 @@ private function setPropertyAndAssignTagToSpecialProduct() // this screams violation of law of demeter ;) self::assertEquals( DDC1163SpecialProduct::class, - $this->em->getUnitOfWork()->getEntityPersister(get_class($specialProduct))->getClassMetadata()->name + $this->em->getUnitOfWork()->getEntityPersister(get_class($specialProduct))->getClassMetadata()->getClassName() ); $tag = new DDC1163Tag('Foo'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 2744a758eb3..a7841cfda7d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -719,7 +719,7 @@ public function testSqlResultSetMapping() self::assertEquals(['name'=>'address.city','column'=>'city'], $mapping['entities'][0]['fields'][4]); self::assertEquals(['name'=>'address.country','column'=>'country'], $mapping['entities'][0]['fields'][5]); self::assertEquals(['name'=>'address.id','column'=>'a_id'], $mapping['entities'][0]['fields'][6]); - self::assertEquals($userMetadata->name, $mapping['entities'][0]['entityClass']); + self::assertEquals($userMetadata->getClassName(), $mapping['entities'][0]['entityClass']); $mapping = $userMetadata->getSqlResultSetMapping('mappingJoinedPhonenumber'); self::assertEquals([],$mapping['columns']); @@ -729,7 +729,7 @@ public function testSqlResultSetMapping() self::assertEquals(['name'=>'name','column'=>'name'], $mapping['entities'][0]['fields'][1]); self::assertEquals(['name'=>'status','column'=>'status'], $mapping['entities'][0]['fields'][2]); self::assertEquals(['name'=>'phonenumbers.phonenumber','column'=>'number'], $mapping['entities'][0]['fields'][3]); - self::assertEquals($userMetadata->name, $mapping['entities'][0]['entityClass']); + self::assertEquals($userMetadata->getClassName(), $mapping['entities'][0]['entityClass']); $mapping = $userMetadata->getSqlResultSetMapping('mappingUserPhonenumberCount'); self::assertEquals(['name'=>'numphones'],$mapping['columns'][0]); @@ -738,7 +738,7 @@ public function testSqlResultSetMapping() self::assertEquals(['name'=>'id','column'=>'id'], $mapping['entities'][0]['fields'][0]); self::assertEquals(['name'=>'name','column'=>'name'], $mapping['entities'][0]['fields'][1]); self::assertEquals(['name'=>'status','column'=>'status'], $mapping['entities'][0]['fields'][2]); - self::assertEquals($userMetadata->name, $mapping['entities'][0]['entityClass']); + self::assertEquals($userMetadata->getClassName(), $mapping['entities'][0]['entityClass']); $mapping = $userMetadata->getSqlResultSetMapping('mappingMultipleJoinsEntityResults'); self::assertEquals(['name'=>'numphones'],$mapping['columns'][0]); @@ -747,12 +747,12 @@ public function testSqlResultSetMapping() self::assertEquals(['name'=>'id','column'=>'u_id'], $mapping['entities'][0]['fields'][0]); self::assertEquals(['name'=>'name','column'=>'u_name'], $mapping['entities'][0]['fields'][1]); self::assertEquals(['name'=>'status','column'=>'u_status'], $mapping['entities'][0]['fields'][2]); - self::assertEquals($userMetadata->name, $mapping['entities'][0]['entityClass']); + self::assertEquals($userMetadata->getClassName(), $mapping['entities'][0]['entityClass']); self::assertNull($mapping['entities'][1]['discriminatorColumn']); self::assertEquals(['name'=>'id','column'=>'a_id'], $mapping['entities'][1]['fields'][0]); self::assertEquals(['name'=>'zip','column'=>'a_zip'], $mapping['entities'][1]['fields'][1]); self::assertEquals(['name'=>'country','column'=>'a_country'], $mapping['entities'][1]['fields'][2]); - self::assertEquals(CmsAddress::class, $mapping['entities'][1]['entityClass']); + self::assertEquals(CmsAddress::class, $mapping['entities'][1]['entityClass']); //person asserts self::assertCount(1, $personMetadata->getSqlResultSetMappings()); @@ -764,7 +764,7 @@ public function testSqlResultSetMapping() self::assertEquals('discriminator', $mapping['entities'][0]['discriminatorColumn']); self::assertEquals(['name'=>'id','column'=>'id'], $mapping['entities'][0]['fields'][0]); self::assertEquals(['name'=>'name','column'=>'name'], $mapping['entities'][0]['fields'][1]); - self::assertEquals($personMetadata->name, $mapping['entities'][0]['entityClass']); + self::assertEquals($personMetadata->getClassName(), $mapping['entities'][0]['entityClass']); } /* diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 09cce32171f..87a24ff7ec6 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -49,7 +49,7 @@ public function testGetMetadataForSingleClass() // SUT $cmf = new ClassMetadataFactory(); $cmf->setEntityManager($entityManager); - $cmf->setMetadataFor($cm1->name, $cm1); + $cmf->setMetadataFor($cm1->getClassName(), $cm1); // Prechecks self::assertEquals([], $cm1->parentClasses); @@ -60,7 +60,7 @@ public function testGetMetadataForSingleClass() self::assertEquals('group', $cm1->table->getName()); // Go - $cmMap1 = $cmf->getMetadataFor($cm1->name); + $cmMap1 = $cmf->getMetadataFor($cm1->getClassName()); self::assertSame($cm1, $cmMap1); self::assertEquals('group', $cmMap1->table->getName()); @@ -80,9 +80,9 @@ public function testGetMetadataFor_ReturnsLoadedCustomIdGenerator() $cmf = $this->createTestFactory(); - $cmf->setMetadataForClass($cm1->name, $cm1); + $cmf->setMetadataForClass($cm1->getClassName(), $cm1); - $actual = $cmf->getMetadataFor($cm1->name); + $actual = $cmf->getMetadataFor($cm1->getClassName()); self::assertEquals(Mapping\GeneratorType::CUSTOM, $actual->getProperty('id')->getIdentifierGeneratorType()); self::assertInstanceOf(CustomIdGenerator::class, $actual->getProperty('id')->getIdentifierGenerator()); @@ -100,11 +100,11 @@ public function testGetMetadataFor_ThrowsExceptionOnUnknownCustomGeneratorClass( $cmf = $this->createTestFactory(); - $cmf->setMetadataForClass($cm1->name, $cm1); + $cmf->setMetadataForClass($cm1->getClassName(), $cm1); $this->expectException(ORMException::class); - $actual = $cmf->getMetadataFor($cm1->name); + $actual = $cmf->getMetadataFor($cm1->getClassName()); } public function testGetMetadataFor_ThrowsExceptionOnMissingCustomGeneratorDefinition() @@ -112,10 +112,10 @@ public function testGetMetadataFor_ThrowsExceptionOnMissingCustomGeneratorDefini $cm1 = $this->createValidClassMetadata(); $cm1->getProperty('id')->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); $cmf = $this->createTestFactory(); - $cmf->setMetadataForClass($cm1->name, $cm1); + $cmf->setMetadataForClass($cm1->getClassName(), $cm1); $this->expectException(ORMException::class); - $actual = $cmf->getMetadataFor($cm1->name); + $actual = $cmf->getMetadataFor($cm1->getClassName()); } public function testHasGetMetadata_NamespaceSeparatorIsNotNormalized() diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 70aadf206b1..20b7204d766 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -36,7 +36,7 @@ public function testClassMetadataInstanceSerialization() // Test initial state self::assertInstanceOf(\ReflectionClass::class, $cm->getReflectionClass()); - self::assertEquals(CMS\CmsUser::class, $cm->name); + self::assertEquals(CMS\CmsUser::class, $cm->getClassName()); self::assertEquals(CMS\CmsUser::class, $cm->getRootClassName()); self::assertEquals([], $cm->subClasses); self::assertEquals([], $cm->parentClasses); @@ -71,7 +71,7 @@ public function testClassMetadataInstanceSerialization() // Check state self::assertInstanceOf(\ReflectionClass::class, $cm->getReflectionClass()); - self::assertEquals(CMS\CmsUser::class, $cm->name); + self::assertEquals(CMS\CmsUser::class, $cm->getClassName()); self::assertEquals('UserParent', $cm->getRootClassName()); self::assertEquals([CMS\One::class, CMS\Two::class, CMS\Three::class], $cm->subClasses); self::assertEquals(['UserParent'], $cm->parentClasses); @@ -1117,7 +1117,7 @@ public function testClassCaseSensitivity() $cm = new ClassMetadata(strtoupper(CMS\CmsUser::class)); $cm->initializeReflection(new RuntimeReflectionService()); - self::assertEquals(CMS\CmsUser::class, $cm->name); + self::assertEquals(CMS\CmsUser::class, $cm->getClassName()); } /** diff --git a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php index d5d1146153c..ce3be3254df 100644 --- a/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php +++ b/tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php @@ -118,7 +118,7 @@ public function walkSelectStatement(Query\AST\SelectStatement $selectStatement) foreach ($this->getQueryComponents() as $dqlAlias => $comp) { // Hard-coded check just for demonstration: We want to modify the query if // it involves the CmsUser class. - if ($comp['metadata']->name == CmsUser::class) { + if ($comp['metadata']->getClassName() == CmsUser::class) { $dqlAliases[] = $dqlAlias; } } diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 1b9f242cc82..84da706d315 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -168,7 +168,7 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $metadata->mapEmbedded( [ 'fieldName' => $fieldName, - 'class' => $embeddedClass->name, + 'class' => $embeddedClass->getClassName(), 'columnPrefix' => null, ] ); @@ -314,7 +314,7 @@ private function generateTestEmbeddableFixture() */ private function loadEntityClass(ClassMetadata $metadata) { - $className = basename(str_replace('\\', '/', $metadata->name)); + $className = basename(str_replace('\\', '/', $metadata->getClassName())); $path = $this->tmpDir . '/' . $this->namespace . '/' . $className . '.php'; self::assertFileExists($path); @@ -331,7 +331,9 @@ public function newInstance(ClassMetadata $metadata) { $this->loadEntityClass($metadata); - return new $metadata->name; + $className = $metadata->getClassName(); + + return new $className; } /** @@ -379,22 +381,24 @@ public function testGeneratedEntityClass() $metadata = $this->generateBookEntityFixture(['isbn' => $isbnMetadata]); $book = $this->newInstance($metadata); - self::assertTrue(class_exists($metadata->name), "Class does not exist."); - self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', '__construct'), "EntityGeneratorBook::__construct() missing."); - self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'getId'), "EntityGeneratorBook::getId() missing."); - self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'setName'), "EntityGeneratorBook::setName() missing."); - self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'getName'), "EntityGeneratorBook::getName() missing."); - self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'setStatus'), "EntityGeneratorBook::setStatus() missing."); - self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'getStatus'), "EntityGeneratorBook::getStatus() missing."); - self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'setAuthor'), "EntityGeneratorBook::setAuthor() missing."); - self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'getAuthor'), "EntityGeneratorBook::getAuthor() missing."); - self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'getComments'), "EntityGeneratorBook::getComments() missing."); - self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'addComment'), "EntityGeneratorBook::addComment() missing."); - self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'removeComment'), "EntityGeneratorBook::removeComment() missing."); - self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'setIsbn'), "EntityGeneratorBook::setIsbn() missing."); - self::assertTrue(method_exists($this->namespace . '\EntityGeneratorBook', 'getIsbn'), "EntityGeneratorBook::getIsbn() missing."); - - $reflClass = new \ReflectionClass($metadata->name); + $bookClassName = $metadata->getClassName(); + + self::assertTrue(class_exists($bookClassName), "Class does not exist."); + self::assertTrue(method_exists($bookClassName, '__construct'), "EntityGeneratorBook::__construct() missing."); + self::assertTrue(method_exists($bookClassName, 'getId'), "EntityGeneratorBook::getId() missing."); + self::assertTrue(method_exists($bookClassName, 'setName'), "EntityGeneratorBook::setName() missing."); + self::assertTrue(method_exists($bookClassName, 'getName'), "EntityGeneratorBook::getName() missing."); + self::assertTrue(method_exists($bookClassName, 'setStatus'), "EntityGeneratorBook::setStatus() missing."); + self::assertTrue(method_exists($bookClassName, 'getStatus'), "EntityGeneratorBook::getStatus() missing."); + self::assertTrue(method_exists($bookClassName, 'setAuthor'), "EntityGeneratorBook::setAuthor() missing."); + self::assertTrue(method_exists($bookClassName, 'getAuthor'), "EntityGeneratorBook::getAuthor() missing."); + self::assertTrue(method_exists($bookClassName, 'getComments'), "EntityGeneratorBook::getComments() missing."); + self::assertTrue(method_exists($bookClassName, 'addComment'), "EntityGeneratorBook::addComment() missing."); + self::assertTrue(method_exists($bookClassName, 'removeComment'), "EntityGeneratorBook::removeComment() missing."); + self::assertTrue(method_exists($bookClassName, 'setIsbn'), "EntityGeneratorBook::setIsbn() missing."); + self::assertTrue(method_exists($bookClassName, 'getIsbn'), "EntityGeneratorBook::getIsbn() missing."); + + $reflClass = new \ReflectionClass($metadata->getClassName()); self::assertCount(6, $reflClass->getProperties()); self::assertCount(15, $reflClass->getMethods()); @@ -404,11 +408,11 @@ public function testGeneratedEntityClass() $book->setName('Jonathan H. Wage'); self::assertEquals('Jonathan H. Wage', $book->getName()); - $reflMethod = new \ReflectionMethod($metadata->name, 'addComment'); + $reflMethod = new \ReflectionMethod($metadata->getClassName(), 'addComment'); $addCommentParameters = $reflMethod->getParameters(); self::assertEquals('comment', $addCommentParameters[0]->getName()); - $reflMethod = new \ReflectionMethod($metadata->name, 'removeComment'); + $reflMethod = new \ReflectionMethod($metadata->getClassName(), 'removeComment'); $removeCommentParameters = $reflMethod->getParameters(); self::assertEquals('comment', $removeCommentParameters[0]->getName()); @@ -417,21 +421,24 @@ public function testGeneratedEntityClass() self::assertEquals($author, $book->getAuthor()); $comment = new EntityGeneratorComment(); - self::assertInstanceOf($metadata->name, $book->addComment($comment)); + self::assertInstanceOf($metadata->getClassName(), $book->addComment($comment)); self::assertInstanceOf(ArrayCollection::class, $book->getComments()); self::assertEquals(new ArrayCollection([$comment]), $book->getComments()); self::assertInternalType('boolean', $book->removeComment($comment)); self::assertEquals(new ArrayCollection([]), $book->getComments()); $this->newInstance($isbnMetadata); - $isbn = new $isbnMetadata->name(); + + $isbnClassName = $isbnMetadata->getClassName(); + + $isbn = new $isbnClassName(); $book->setIsbn($isbn); self::assertSame($isbn, $book->getIsbn()); - $reflMethod = new \ReflectionMethod($metadata->name, 'setIsbn'); + $reflMethod = new \ReflectionMethod($metadata->getClassName(), 'setIsbn'); $reflParameters = $reflMethod->getParameters(); - self::assertEquals($isbnMetadata->name, $reflParameters[0]->getClass()->name); + self::assertEquals($isbnMetadata->getClassName(), $reflParameters[0]->getClass()->name); } /** @@ -452,7 +459,7 @@ public function testEntityUpdatingWorks() $metadata->mapEmbedded( [ 'fieldName' => 'testEmbedded', - 'class' => $testEmbeddableMetadata->name, + 'class' => $testEmbeddableMetadata->getClassName(), 'columnPrefix' => null, ] ); @@ -462,7 +469,7 @@ public function testEntityUpdatingWorks() self::assertFileExists($this->tmpDir . "/" . $this->namespace . "/EntityGeneratorBook.php~"); $book = $this->newInstance($metadata); - $reflClass = new \ReflectionClass($metadata->name); + $reflClass = new \ReflectionClass($metadata->getClassName()); self::assertTrue($reflClass->hasProperty('name'), "Regenerating keeps property 'name'."); self::assertTrue($reflClass->hasProperty('status'), "Regenerating keeps property 'status'."); @@ -533,7 +540,7 @@ public function testLifecycleCallbacks() $metadata = $this->generateBookEntityFixture(); $book = $this->newInstance($metadata); - $reflClass = new \ReflectionClass($metadata->name); + $reflClass = new \ReflectionClass($metadata->getClassName()); self::assertTrue($reflClass->hasMethod('loading'), "Check for postLoad lifecycle callback."); self::assertTrue($reflClass->hasMethod('willBeRemoved'), "Check for preRemove lifecycle callback."); @@ -549,11 +556,11 @@ public function testLoadMetadata() $metadata->initializeReflection($reflectionService); - $cm = new ClassMetadata($metadata->name); + $cm = new ClassMetadata($metadata->getClassName()); $cm->initializeReflection($reflectionService); $driver = $this->createAnnotationDriver(); - $driver->loadMetadataForClass($cm->name, $cm); + $driver->loadMetadataForClass($cm->getClassName(), $cm); self::assertEquals($cm->getTableName(), $metadata->getTableName()); self::assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); @@ -585,10 +592,10 @@ public function testLoadPrefixedMetadata() $book = $this->newInstance($metadata); - $cm = new ClassMetadata($metadata->name); + $cm = new ClassMetadata($metadata->getClassName()); $cm->initializeReflection(new RuntimeReflectionService()); - $driver->loadMetadataForClass($cm->name, $cm); + $driver->loadMetadataForClass($cm->getClassName(), $cm); self::assertEquals($cm->getTableName(), $metadata->getTableName()); self::assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); @@ -620,10 +627,10 @@ public function testMappedSuperclassAnnotationGeneration() $this->newInstance($metadata); // force instantiation (causes autoloading to kick in) $driver = new AnnotationDriver(new AnnotationReader(), []); - $cm = new ClassMetadata($metadata->name); + $cm = new ClassMetadata($metadata->getClassName()); $cm->initializeReflection(new RuntimeReflectionService()); - $driver->loadMetadataForClass($cm->name, $cm); + $driver->loadMetadataForClass($cm->getClassName(), $cm); self::assertTrue($cm->isMappedSuperclass); } @@ -673,7 +680,7 @@ public function testGenerateEntityWithSequenceGenerator() require_once $filename; - $reflection = new \ReflectionProperty($metadata->name, 'id'); + $reflection = new \ReflectionProperty($metadata->getClassName(), 'id'); $docComment = $reflection->getDocComment(); self::assertContains('@ORM\Id', $docComment); @@ -739,7 +746,7 @@ public function testGenerateEntityWithMultipleInverseJoinColumns() require_once $filename; - $property = new \ReflectionProperty($metadata->name, 'centroCustos'); + $property = new \ReflectionProperty($metadata->getClassName(), 'centroCustos'); $docComment = $property->getDocComment(); //joinColumns @@ -851,8 +858,10 @@ public function testEntityTypeAlias(array $field) self::assertFileExists($path); require_once $path; - $entity = new $metadata->name; - $reflClass = new \ReflectionClass($metadata->name); + $entityClassName = $metadata->getClassName(); + + $entity = new $entityClassName; + $reflClass = new \ReflectionClass($entityClassName); $type = $field['phpType']; $name = $field['fieldName']; @@ -879,7 +888,9 @@ public function testTraitPropertiesAndMethodsAreNotDuplicated() $user = new DDC2372User(); $metadata = $cmf->getMetadataFor(get_class($user)); - $metadata->name = $this->namespace . "\DDC2372User"; + + // @todo guilhermeblanco Fix this test as changing Entity class should never be allowed. + $metadata->setClassName($this->namespace . "\DDC2372User"); $this->generator->writeEntityClass($metadata, $this->tmpDir); @@ -887,7 +898,7 @@ public function testTraitPropertiesAndMethodsAreNotDuplicated() require $this->tmpDir . "/" . $this->namespace . "/DDC2372User.php"; - $reflClass = new \ReflectionClass($metadata->name); + $reflClass = new \ReflectionClass($metadata->getClassName()); self::assertSame($reflClass->hasProperty('address'), false); self::assertSame($reflClass->hasMethod('setAddress'), false); @@ -905,14 +916,16 @@ public function testTraitPropertiesAndMethodsAreNotDuplicatedInChildClasses() $user = new DDC2372Admin(); $metadata = $cmf->getMetadataFor(get_class($user)); - $metadata->name = $this->namespace . "\DDC2372Admin"; + + // @todo guilhermeblanco Fix this test as changing Entity class should never be allowed. + $metadata->setClassName($this->namespace . "\DDC2372Admin"); $this->generator->writeEntityClass($metadata, $this->tmpDir); self::assertFileExists($this->tmpDir . "/" . $this->namespace . "/DDC2372Admin.php"); require $this->tmpDir . "/" . $this->namespace . "/DDC2372Admin.php"; - $reflClass = new \ReflectionClass($metadata->name); + $reflClass = new \ReflectionClass($metadata->getClassName()); self::assertSame($reflClass->hasProperty('address'), false); self::assertSame($reflClass->hasMethod('setAddress'), false); @@ -1003,34 +1016,38 @@ public function testGeneratedMutableEmbeddablesClass() $metadata = $this->generateIsbnEmbeddableFixture(['test' => $embeddedMetadata]); $isbn = $this->newInstance($metadata); - - self::assertTrue(class_exists($metadata->name), "Class does not exist."); - self::assertFalse(method_exists($metadata->name, '__construct'), "EntityGeneratorIsbn::__construct present."); - self::assertTrue(method_exists($metadata->name, 'getPrefix'), "EntityGeneratorIsbn::getPrefix() missing."); - self::assertTrue(method_exists($metadata->name, 'setPrefix'), "EntityGeneratorIsbn::setPrefix() missing."); - self::assertTrue(method_exists($metadata->name, 'getGroupNumber'), "EntityGeneratorIsbn::getGroupNumber() missing."); - self::assertTrue(method_exists($metadata->name, 'setGroupNumber'), "EntityGeneratorIsbn::setGroupNumber() missing."); - self::assertTrue(method_exists($metadata->name, 'getPublisherNumber'), "EntityGeneratorIsbn::getPublisherNumber() missing."); - self::assertTrue(method_exists($metadata->name, 'setPublisherNumber'), "EntityGeneratorIsbn::setPublisherNumber() missing."); - self::assertTrue(method_exists($metadata->name, 'getTitleNumber'), "EntityGeneratorIsbn::getTitleNumber() missing."); - self::assertTrue(method_exists($metadata->name, 'setTitleNumber'), "EntityGeneratorIsbn::setTitleNumber() missing."); - self::assertTrue(method_exists($metadata->name, 'getCheckDigit'), "EntityGeneratorIsbn::getCheckDigit() missing."); - self::assertTrue(method_exists($metadata->name, 'setCheckDigit'), "EntityGeneratorIsbn::setCheckDigit() missing."); - self::assertTrue(method_exists($metadata->name, 'getTest'), "EntityGeneratorIsbn::getTest() missing."); - self::assertTrue(method_exists($metadata->name, 'setTest'), "EntityGeneratorIsbn::setTest() missing."); + $isbnClassName = $metadata->getClassName(); + + self::assertTrue(class_exists($isbnClassName), "Class does not exist."); + self::assertFalse(method_exists($isbnClassName, '__construct'), "EntityGeneratorIsbn::__construct present."); + self::assertTrue(method_exists($isbnClassName, 'getPrefix'), "EntityGeneratorIsbn::getPrefix() missing."); + self::assertTrue(method_exists($isbnClassName, 'setPrefix'), "EntityGeneratorIsbn::setPrefix() missing."); + self::assertTrue(method_exists($isbnClassName, 'getGroupNumber'), "EntityGeneratorIsbn::getGroupNumber() missing."); + self::assertTrue(method_exists($isbnClassName, 'setGroupNumber'), "EntityGeneratorIsbn::setGroupNumber() missing."); + self::assertTrue(method_exists($isbnClassName, 'getPublisherNumber'), "EntityGeneratorIsbn::getPublisherNumber() missing."); + self::assertTrue(method_exists($isbnClassName, 'setPublisherNumber'), "EntityGeneratorIsbn::setPublisherNumber() missing."); + self::assertTrue(method_exists($isbnClassName, 'getTitleNumber'), "EntityGeneratorIsbn::getTitleNumber() missing."); + self::assertTrue(method_exists($isbnClassName, 'setTitleNumber'), "EntityGeneratorIsbn::setTitleNumber() missing."); + self::assertTrue(method_exists($isbnClassName, 'getCheckDigit'), "EntityGeneratorIsbn::getCheckDigit() missing."); + self::assertTrue(method_exists($isbnClassName, 'setCheckDigit'), "EntityGeneratorIsbn::setCheckDigit() missing."); + self::assertTrue(method_exists($isbnClassName, 'getTest'), "EntityGeneratorIsbn::getTest() missing."); + self::assertTrue(method_exists($isbnClassName, 'setTest'), "EntityGeneratorIsbn::setTest() missing."); $isbn->setPrefix(978); self::assertSame(978, $isbn->getPrefix()); $this->newInstance($embeddedMetadata); - $test = new $embeddedMetadata->name(); + + $testEmbeddedCLassName = $embeddedMetadata->getClassName(); + + $test = new $testEmbeddedCLassName(); $isbn->setTest($test); self::assertSame($test, $isbn->getTest()); - $reflMethod = new \ReflectionMethod($metadata->name, 'setTest'); + $reflMethod = new \ReflectionMethod($isbnClassName, 'setTest'); $reflParameters = $reflMethod->getParameters(); - self::assertEquals($embeddedMetadata->name, $reflParameters[0]->getClass()->name); + self::assertEquals($embeddedMetadata->getClassName(), $reflParameters[0]->getClass()->name); } /** @@ -1046,30 +1063,34 @@ public function testGeneratedImmutableEmbeddablesClass() $this->loadEntityClass($embeddedMetadata); $this->loadEntityClass($metadata); - self::assertTrue(class_exists($metadata->name), "Class does not exist."); - self::assertTrue(method_exists($metadata->name, '__construct'), "EntityGeneratorIsbn::__construct missing."); - self::assertTrue(method_exists($metadata->name, 'getPrefix'), "EntityGeneratorIsbn::getPrefix() missing."); - self::assertFalse(method_exists($metadata->name, 'setPrefix'), "EntityGeneratorIsbn::setPrefix() present."); - self::assertTrue(method_exists($metadata->name, 'getGroupNumber'), "EntityGeneratorIsbn::getGroupNumber() missing."); - self::assertFalse(method_exists($metadata->name, 'setGroupNumber'), "EntityGeneratorIsbn::setGroupNumber() present."); - self::assertTrue(method_exists($metadata->name, 'getPublisherNumber'), "EntityGeneratorIsbn::getPublisherNumber() missing."); - self::assertFalse(method_exists($metadata->name, 'setPublisherNumber'), "EntityGeneratorIsbn::setPublisherNumber() present."); - self::assertTrue(method_exists($metadata->name, 'getTitleNumber'), "EntityGeneratorIsbn::getTitleNumber() missing."); - self::assertFalse(method_exists($metadata->name, 'setTitleNumber'), "EntityGeneratorIsbn::setTitleNumber() present."); - self::assertTrue(method_exists($metadata->name, 'getCheckDigit'), "EntityGeneratorIsbn::getCheckDigit() missing."); - self::assertFalse(method_exists($metadata->name, 'setCheckDigit'), "EntityGeneratorIsbn::setCheckDigit() present."); - self::assertTrue(method_exists($metadata->name, 'getTest'), "EntityGeneratorIsbn::getTest() missing."); - self::assertFalse(method_exists($metadata->name, 'setTest'), "EntityGeneratorIsbn::setTest() present."); - - $test = new $embeddedMetadata->name(1, new \DateTime()); - $isbn = new $metadata->name($test, 978, 3, 12, 732320, 83); + $isbnClassName = $metadata->getClassName(); + + self::assertTrue(class_exists($isbnClassName), "Class does not exist."); + self::assertTrue(method_exists($isbnClassName, '__construct'), "EntityGeneratorIsbn::__construct missing."); + self::assertTrue(method_exists($isbnClassName, 'getPrefix'), "EntityGeneratorIsbn::getPrefix() missing."); + self::assertFalse(method_exists($isbnClassName, 'setPrefix'), "EntityGeneratorIsbn::setPrefix() present."); + self::assertTrue(method_exists($isbnClassName, 'getGroupNumber'), "EntityGeneratorIsbn::getGroupNumber() missing."); + self::assertFalse(method_exists($isbnClassName, 'setGroupNumber'), "EntityGeneratorIsbn::setGroupNumber() present."); + self::assertTrue(method_exists($isbnClassName, 'getPublisherNumber'), "EntityGeneratorIsbn::getPublisherNumber() missing."); + self::assertFalse(method_exists($isbnClassName, 'setPublisherNumber'), "EntityGeneratorIsbn::setPublisherNumber() present."); + self::assertTrue(method_exists($isbnClassName, 'getTitleNumber'), "EntityGeneratorIsbn::getTitleNumber() missing."); + self::assertFalse(method_exists($isbnClassName, 'setTitleNumber'), "EntityGeneratorIsbn::setTitleNumber() present."); + self::assertTrue(method_exists($isbnClassName, 'getCheckDigit'), "EntityGeneratorIsbn::getCheckDigit() missing."); + self::assertFalse(method_exists($isbnClassName, 'setCheckDigit'), "EntityGeneratorIsbn::setCheckDigit() present."); + self::assertTrue(method_exists($isbnClassName, 'getTest'), "EntityGeneratorIsbn::getTest() missing."); + self::assertFalse(method_exists($isbnClassName, 'setTest'), "EntityGeneratorIsbn::setTest() present."); + + $embeddedClassName = $embeddedMetadata->getClassName(); + + $test = new $embeddedClassName(1, new \DateTime()); + $isbn = new $isbnClassName($test, 978, 3, 12, 732320, 83); $reflMethod = new \ReflectionMethod($isbn, '__construct'); $reflParameters = $reflMethod->getParameters(); self::assertCount(6, $reflParameters); - self::assertSame($embeddedMetadata->name, $reflParameters[0]->getClass()->name); + self::assertSame($embeddedMetadata->getClassName(), $reflParameters[0]->getClass()->name); self::assertSame('test', $reflParameters[0]->getName()); self::assertFalse($reflParameters[0]->isOptional()); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php index 97df82f38ad..b64d8ee7c71 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php @@ -166,9 +166,12 @@ private function writeEntityClass($className, $newClassName) $cmf->setEntityManager($em); - $metadata = $cmf->getMetadataFor($className); - $metadata->namespace = $this->namespace; - $metadata->name = $newClassName; + $metadata = $cmf->getMetadataFor($className); + + // @todo guilhermeblanco Fix this test as changing Entity class should never be allowed. + $metadata->setClassName($newClassName); + + $metadata->namespace = $this->namespace; $metadata->customRepositoryClassName = $newClassName . "Repository"; $this->generator->writeEntityClass($metadata, $this->tmpDir); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index 206e19c72b6..a284b20bd9f 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -94,7 +94,8 @@ public function testExportDirectoryAndFilesAreCreated() $cmf = $this->createClassMetadataFactory($em, $type); $metadata = $cmf->getAllMetadata(); - $metadata[0]->name = ExportedUser::class; + // @todo guilhermeblanco Fix this test as changing Entity class should never be allowed. + $metadata[0]->setClassName(ExportedUser::class); self::assertEquals(ExportedUser::class, $metadata[0]->getClassName()); From 3c12c3fe160826526f8ca89e5601e43993b80e75 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 17 Jul 2017 22:35:00 -0400 Subject: [PATCH 167/275] Removed direct access to ClassMetadata->name --- tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 87a24ff7ec6..15c18de9b3f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -473,12 +473,12 @@ public function testRejectsEmbeddableWithoutValidClassName() $cmf = $this->createTestFactory(); - $cmf->setMetadataForClass($metadata->name, $metadata); + $cmf->setMetadataForClass($metadata->getClassName(), $metadata); $this->expectException(MappingException::class); $this->expectExceptionMessage('The embed mapping \'embedded\' misses the \'class\' attribute.'); - $cmf->getMetadataFor($metadata->name); + $cmf->getMetadataFor($metadata->getClassName()); } /** From 66f1ff435ae3308ef00a77c532357079b655a8ef Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Tue, 18 Jul 2017 00:07:43 -0400 Subject: [PATCH 168/275] Removed EntityListenerBuilder --- .../ORM/Mapping/Driver/AnnotationDriver.php | 98 +++++++++---------- .../Mapping/Driver/EntityListenerBuilder.php | 72 -------------- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 51 +++++++++- 3 files changed, 95 insertions(+), 126 deletions(-) delete mode 100644 lib/Doctrine/ORM/Mapping/Driver/EntityListenerBuilder.php diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 73eda28fa1d..21f4cdeaf5d 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -221,35 +221,29 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat ); } - // Evaluate EntityListeners annotation + // Evaluate @EntityListeners annotation if (isset($classAnnotations[Annotation\EntityListeners::class])) { + /** @var Annotation\EntityListeners $entityListenersAnnot */ $entityListenersAnnot = $classAnnotations[Annotation\EntityListeners::class]; foreach ($entityListenersAnnot->value as $item) { $listenerClassName = $metadata->fullyQualifiedClassName($item); - if ( ! class_exists($listenerClassName)) { - throw Mapping\MappingException::entityListenerClassNotFound($listenerClassName, $className); + if (! class_exists($listenerClassName)) { + throw Mapping\MappingException::entityListenerClassNotFound( + $listenerClassName, + $reflClass->getName() + ); } - $hasMapping = false; - $listenerClass = new \ReflectionClass($listenerClassName); + $listenerClass = new \ReflectionClass($listenerClassName); /* @var $method \ReflectionMethod */ foreach ($listenerClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { - // find method callbacks. - $callbacks = $this->getMethodCallbacks($method); - $hasMapping = $hasMapping ?: ( ! empty($callbacks)); - - foreach ($callbacks as $value) { - $metadata->addEntityListener($value[1], $listenerClassName, $value[0]); + foreach ($this->getMethodCallbacks($method) as $callback) { + $metadata->addEntityListener($callback, $listenerClassName, $method->getName()); } } - - // Evaluate the listener using naming convention. - if ( ! $hasMapping ) { - EntityListenerBuilder::bindEntityListener($metadata, $listenerClassName); - } } } @@ -257,8 +251,8 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat if (isset($classAnnotations[Annotation\HasLifecycleCallbacks::class])) { /* @var $method \ReflectionMethod */ foreach ($reflClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { - foreach ($this->getMethodCallbacks($method) as $value) { - $metadata->addLifecycleCallback($value[0], $value[1]); + foreach ($this->getMethodCallbacks($method) as $callback) { + $metadata->addLifecycleCallback($method->getName(), $callback); } } } @@ -447,40 +441,24 @@ private function getFetchMode($className, $fetchMode) */ private function getMethodCallbacks(\ReflectionMethod $method) { - $callbacks = []; - $annotations = $this->reader->getMethodAnnotations($method); - - foreach ($annotations as $annot) { - if ($annot instanceof Annotation\PrePersist) { - $callbacks[] = [$method->name, Events::prePersist]; - } - - if ($annot instanceof Annotation\PostPersist) { - $callbacks[] = [$method->name, Events::postPersist]; - } - - if ($annot instanceof Annotation\PreUpdate) { - $callbacks[] = [$method->name, Events::preUpdate]; - } - - if ($annot instanceof Annotation\PostUpdate) { - $callbacks[] = [$method->name, Events::postUpdate]; - } - - if ($annot instanceof Annotation\PreRemove) { - $callbacks[] = [$method->name, Events::preRemove]; - } - - if ($annot instanceof Annotation\PostRemove) { - $callbacks[] = [$method->name, Events::postRemove]; - } + $annotations = $this->getMethodAnnotations($method); + $events = [ + Events::prePersist => Annotation\PrePersist::class, + Events::postPersist => Annotation\PostPersist::class, + Events::preUpdate => Annotation\PreUpdate::class, + Events::postUpdate => Annotation\PostUpdate::class, + Events::preRemove => Annotation\PreRemove::class, + Events::postRemove => Annotation\PostRemove::class, + Events::postLoad => Annotation\PostLoad::class, + Events::preFlush => Annotation\PreFlush::class, + ]; - if ($annot instanceof Annotation\PostLoad) { - $callbacks[] = [$method->name, Events::postLoad]; - } + // Check for callbacks + $callbacks = []; - if ($annot instanceof Annotation\PreFlush) { - $callbacks[] = [$method->name, Events::preFlush]; + foreach ($events as $eventName => $annotationClassName) { + if (isset($annotations[$annotationClassName]) || $method->getName() === $eventName) { + $callbacks[] = $eventName; } } @@ -998,6 +976,26 @@ private function convertCacheAnnotationToCacheMetadata( return new Mapping\CacheMetadata($usage, $region); } + /** + * @param \ReflectionMethod $reflectionMethod + * + * @return array + */ + private function getMethodAnnotations(\ReflectionMethod $reflectionMethod) + { + $methodAnnotations = $this->reader->getMethodAnnotations($reflectionMethod); + + foreach ($methodAnnotations as $key => $annot) { + if (! is_numeric($key)) { + continue; + } + + $methodAnnotations[get_class($annot)] = $annot; + } + + return $methodAnnotations; + } + /** * Factory method for the Annotation Driver. * diff --git a/lib/Doctrine/ORM/Mapping/Driver/EntityListenerBuilder.php b/lib/Doctrine/ORM/Mapping/Driver/EntityListenerBuilder.php deleted file mode 100644 index 0de2069b46a..00000000000 --- a/lib/Doctrine/ORM/Mapping/Driver/EntityListenerBuilder.php +++ /dev/null @@ -1,72 +0,0 @@ -. - */ - -namespace Doctrine\ORM\Mapping\Driver; - -use Doctrine\ORM\Mapping\MappingException; -use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Events; - -/** - * Builder for entity listeners. - * - * @since 2.4 - * @author Fabio B. Silva - */ -class EntityListenerBuilder -{ - /** - * @var array Hash-map to handle event names. - */ - static private $events = [ - Events::preRemove => true, - Events::postRemove => true, - Events::prePersist => true, - Events::postPersist => true, - Events::preUpdate => true, - Events::postUpdate => true, - Events::postLoad => true, - Events::preFlush => true - ]; - - /** - * Lookup the entity class to find methods that match to event lifecycle names - * - * @param \Doctrine\ORM\Mapping\ClassMetadata $metadata The entity metadata. - * @param string $className The listener class name. - * - * @throws \Doctrine\ORM\Mapping\MappingException When the listener class not found. - */ - static public function bindEntityListener(ClassMetadata $metadata, $className) - { - $class = $metadata->fullyQualifiedClassName($className); - - if ( ! class_exists($class)) { - throw MappingException::entityListenerClassNotFound($class, $className); - } - - foreach (get_class_methods($class) as $method) { - if ( ! isset(self::$events[$method])) { - continue; - } - - $metadata->addEntityListener($method, $class, $method); - } - } -} diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index b672f65add5..4710fa9c8ae 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -22,6 +22,7 @@ use Doctrine\Common\Persistence\Mapping\Driver\FileDriver; use Doctrine\Common\Persistence\Mapping\ClassMetadata; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\Events; use Doctrine\ORM\Mapping\CacheMetadata; use Doctrine\ORM\Mapping\CacheUsage; use Doctrine\ORM\Mapping\ChangeTrackingPolicy; @@ -704,18 +705,35 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate if (isset($xmlRoot->{'lifecycle-callbacks'})) { foreach ($xmlRoot->{'lifecycle-callbacks'}->{'lifecycle-callback'} as $lifecycleCallback) { - $metadata->addLifecycleCallback((string) $lifecycleCallback['method'], constant('Doctrine\ORM\Events::' . (string) $lifecycleCallback['type'])); + $eventName = constant(Events::class . '::' . (string) $lifecycleCallback['type']); + $methodName = (string) $lifecycleCallback['method']; + + $metadata->addLifecycleCallback($methodName, $eventName); } } // Evaluate entity listener if (isset($xmlRoot->{'entity-listeners'})) { foreach ($xmlRoot->{'entity-listeners'}->{'entity-listener'} as $listenerElement) { - $className = (string) $listenerElement['class']; + $listenerClassName = $metadata->fullyQualifiedClassName((string) $listenerElement['class']); + + if (! class_exists($listenerClassName)) { + throw MappingException::entityListenerClassNotFound( + $listenerClassName, + $metadata->getClassName() + ); + } + + $listenerClass = new \ReflectionClass($listenerClassName); // Evaluate the listener using naming convention. if ($listenerElement->count() === 0) { - EntityListenerBuilder::bindEntityListener($metadata, $className); + /* @var $method \ReflectionMethod */ + foreach ($listenerClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { + foreach ($this->getMethodCallbacks($method) as $callback) { + $metadata->addEntityListener($callback, $listenerClassName, $method->getName()); + } + } continue; } @@ -724,7 +742,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $eventName = (string) $callbackElement['type']; $methodName = (string) $callbackElement['method']; - $metadata->addEntityListener($eventName, $className, $methodName); + $metadata->addEntityListener($eventName, $listenerClassName, $methodName); } } } @@ -881,6 +899,31 @@ private function convertCacheElementToCacheMetadata(SimpleXMLElement $cacheMappi return new CacheMetadata($usage, $region); } + /** + * Parses the given method. + * + * @param \ReflectionMethod $method + * + * @return array + */ + private function getMethodCallbacks(\ReflectionMethod $method) + { + $events = [ + Events::prePersist, + Events::postPersist, + Events::preUpdate, + Events::postUpdate, + Events::preRemove, + Events::postRemove, + Events::postLoad, + Events::preFlush, + ]; + + return array_filter($events, function ($eventName) use ($method) { + return $eventName === $method->getName(); + }); + } + /** * Parse / Normalize the cache configuration * From 946b35f8319afeddcf462c488f855c21c0fd578c Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Tue, 18 Jul 2017 17:05:01 -0400 Subject: [PATCH 169/275] Consume custom repository class through methods only. --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 14 +++++++++++--- lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php | 4 ++-- .../ORM/Mapping/Driver/AnnotationDriver.php | 4 ++-- .../ORM/Mapping/Driver/NewAnnotationDriver.php | 4 ++-- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 4 ++-- .../Mapping/Exporter/ClassMetadataExporter.php | 4 ++-- .../ORM/Repository/DefaultRepositoryFactory.php | 2 +- .../Command/GenerateRepositoriesCommand.php | 6 +++--- .../Console/Command/MappingDescribeCommand.php | 2 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 4 ++-- .../ORM/Tools/Export/Driver/PhpExporter.php | 4 ++-- .../ORM/Tools/Export/Driver/XmlExporter.php | 4 ++-- .../Tests/Models/DDC869/DDC869Payment.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 4 ++-- .../ORM/Mapping/BasicInheritanceMappingTest.php | 6 +++--- .../Tests/ORM/Mapping/ClassMetadataTest.php | 6 +++--- ...Doctrine.Tests.Models.DDC869.DDC869Payment.php | 2 +- ...trine.Tests.Models.DDC889.DDC889SuperClass.php | 2 +- .../Repository/DefaultRepositoryFactoryTest.php | 15 +++++++-------- .../Tests/ORM/Tools/EntityGeneratorTest.php | 7 ++++--- .../ORM/Tools/EntityRepositoryGeneratorTest.php | 4 +--- 21 files changed, 55 insertions(+), 49 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index df1648b82b5..dd78ff74f65 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -81,7 +81,7 @@ class ClassMetadata implements TableOwner, \Doctrine\Common\Persistence\Mapping\ * * @var string */ - public $customRepositoryClassName; + protected $customRepositoryClassName; /** * READ-ONLY: Whether this class describes the mapping of a mapped superclass. @@ -1747,15 +1747,23 @@ public function addSqlResultSetMapping(array $resultMapping) /** * Registers a custom repository class for the entity class. * - * @param string $repositoryClassName The class name of the custom mapper. + * @param string|null $repositoryClassName The class name of the custom mapper. * * @return void */ - public function setCustomRepositoryClass($repositoryClassName) + public function setCustomRepositoryClassName(?string $repositoryClassName) { $this->customRepositoryClassName = $this->fullyQualifiedClassName($repositoryClassName); } + /** + * @return string|null + */ + public function getCustomRepositoryClassName() : ?string + { + return $this->customRepositoryClassName; + } + /** * Whether the class has any attached lifecycle listeners or callbacks for a lifecycle event. * diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 7085f122da5..7c69cb94687 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -144,8 +144,8 @@ protected function doLoadMetadata( $class->setLifecycleCallbacks($parent->lifecycleCallbacks); $class->setChangeTrackingPolicy($parent->changeTrackingPolicy); - if ($parent->isMappedSuperclass && empty($class->customRepositoryClassName)) { - $class->setCustomRepositoryClass($parent->customRepositoryClassName); + if ($parent->isMappedSuperclass && ! $class->getCustomRepositoryClassName()) { + $class->setCustomRepositoryClassName($parent->getCustomRepositoryClassName()); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 21f4cdeaf5d..9ac9c213a7a 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -75,7 +75,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat $entityAnnot = $classAnnotations[Annotation\Entity::class]; if ($entityAnnot->repositoryClass !== null) { - $metadata->setCustomRepositoryClass($entityAnnot->repositoryClass); + $metadata->setCustomRepositoryClassName($entityAnnot->repositoryClass); } if ($entityAnnot->readOnly) { @@ -87,7 +87,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat case isset($classAnnotations[Annotation\MappedSuperclass::class]): $mappedSuperclassAnnot = $classAnnotations[Annotation\MappedSuperclass::class]; - $metadata->setCustomRepositoryClass($mappedSuperclassAnnot->repositoryClass); + $metadata->setCustomRepositoryClassName($mappedSuperclassAnnot->repositoryClass); $metadata->isMappedSuperclass = true; $metadata->isEmbeddedClass = false; diff --git a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php index a4efd0c00be..d65c1040ae0 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php @@ -225,7 +225,7 @@ private function convertClassAnnotationsToEntityClassMetadata( $classMetadata = new Mapping\ClassMetadata($reflectionClass->getName(), $parent); if ($entityAnnot->repositoryClass !== null) { - $classMetadata->setCustomRepositoryClass($entityAnnot->repositoryClass); + $classMetadata->setCustomRepositoryClassName($entityAnnot->repositoryClass); } if ($entityAnnot->readOnly) { @@ -404,7 +404,7 @@ private function convertClassAnnotationsToMappedSuperClassMetadata( $classMetadata = new Mapping\MappedSuperClassMetadata($reflectionClass->getName(), $parent); if ($mappedSuperclassAnnot->repositoryClass !== null) { - $classMetadata->setCustomRepositoryClass($mappedSuperclassAnnot->repositoryClass); + $classMetadata->setCustomRepositoryClassName($mappedSuperclassAnnot->repositoryClass); } return $classMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 4710fa9c8ae..f0609316d31 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -75,13 +75,13 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) if ($xmlRoot->getName() === 'entity') { if (isset($xmlRoot['repository-class'])) { - $metadata->setCustomRepositoryClass((string) $xmlRoot['repository-class']); + $metadata->setCustomRepositoryClassName((string) $xmlRoot['repository-class']); } if (isset($xmlRoot['read-only']) && $this->evaluateBoolean($xmlRoot['read-only'])) { $metadata->asReadOnly(); } } else if ($xmlRoot->getName() === 'mapped-superclass') { - $metadata->setCustomRepositoryClass( + $metadata->setCustomRepositoryClassName( isset($xmlRoot['repository-class']) ? (string) $xmlRoot['repository-class'] : null ); $metadata->isMappedSuperclass = true; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php index 567fb01a3de..53cfe3781cc 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php @@ -122,8 +122,8 @@ private function exportInitialize(ClassMetadata $metadata, int $indentationLevel $lines[] = $indentation . 'protected function initialize()'; $lines[] = $indentation . '{'; - if ($metadata->customRepositoryClassName) { - $lines[] = $objectReference . '->customRepositoryClassName = "' . $metadata->customRepositoryClassName . '";'; + if ($metadata->getCustomRepositoryClassName()) { + $lines[] = $objectReference . '->setCustomRepositoryClassName("' . $metadata->getCustomRepositoryClassName() . '");'; $lines[] = null; } diff --git a/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php b/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php index b3ecde35977..c8a08fbf292 100644 --- a/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php +++ b/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php @@ -62,7 +62,7 @@ private function createRepository(EntityManagerInterface $entityManager, $entity { /* @var $metadata \Doctrine\ORM\Mapping\ClassMetadata */ $metadata = $entityManager->getClassMetadata($entityName); - $repositoryClassName = $metadata->customRepositoryClassName + $repositoryClassName = $metadata->getCustomRepositoryClassName() ?: $entityManager->getConfiguration()->getDefaultRepositoryClassName(); return new $repositoryClassName($entityManager, $metadata); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/GenerateRepositoriesCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/GenerateRepositoriesCommand.php index 1da7a85c141..803bea9c4de 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/GenerateRepositoriesCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/GenerateRepositoriesCommand.php @@ -99,12 +99,12 @@ protected function execute(InputInterface $input, OutputInterface $output) $generator->setDefaultRepositoryName($repositoryName); foreach ($metadatas as $metadata) { - if ($metadata->customRepositoryClassName) { + if ($metadata->getCustomRepositoryClassName()) { $output->writeln( - sprintf('Processing repository "%s"', $metadata->customRepositoryClassName) + sprintf('Processing repository "%s"', $metadata->getCustomRepositoryClassName()) ); - $generator->writeEntityRepositoryClass($metadata->customRepositoryClassName, $destPath); + $generator->writeEntityRepositoryClass($metadata->getCustomRepositoryClassName(), $destPath); $numRepositories++; } diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index 1f5d57156fd..6da7c01e804 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -95,7 +95,7 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage [ $this->formatField('Name', $metadata->getClassName()), $this->formatField('Root entity name', $metadata->getRootClassName()), - $this->formatField('Custom repository class', $metadata->customRepositoryClassName), + $this->formatField('Custom repository class', $metadata->getCustomRepositoryClassName()), $this->formatField('Mapped super class?', $metadata->isMappedSuperclass), $this->formatField('Embedded class?', $metadata->isEmbeddedClass), $this->formatField('Parent classes', $metadata->parentClasses), diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 3df71048a2b..328a0e3b6cf 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -1014,8 +1014,8 @@ protected function generateEntityAnnotation(ClassMetadata $metadata) return $prefix . 'Embeddable'; } - $customRepository = $metadata->customRepositoryClassName - ? '(repositoryClass="' . $metadata->customRepositoryClassName . '")' + $customRepository = $metadata->getCustomRepositoryClassName() + ? '(repositoryClass="' . $metadata->getCustomRepositoryClassName() . '")' : ''; return $prefix . ($metadata->isMappedSuperclass ? 'MappedSuperclass' : 'Entity') . $customRepository; diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 22d6211b8a7..95f0113d0cd 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -66,8 +66,8 @@ public function exportClassMetadata(ClassMetadata $metadata) $lines[] = '$metadata->setInheritanceType(Mapping\InheritanceType::' . $metadata->inheritanceType . ');'; } - if ($metadata->customRepositoryClassName) { - $lines[] = '$metadata->customRepositoryClassName = "' . $metadata->customRepositoryClassName . '";'; + if ($metadata->getCustomRepositoryClassName()) { + $lines[] = '$metadata->setCustomRepositoryClassName("' . $metadata->getCustomRepositoryClassName() . '");'; } if ($metadata->table) { diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 2ae327d100e..71d63ae09e0 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -63,8 +63,8 @@ public function exportClassMetadata(ClassMetadata $metadata) $root = $xml->addChild('entity'); } - if ($metadata->customRepositoryClassName) { - $root->addAttribute('repository-class', $metadata->customRepositoryClassName); + if ($metadata->getCustomRepositoryClassName()) { + $root->addAttribute('repository-class', $metadata->getCustomRepositoryClassName()); } $root->addAttribute('name', $metadata->getClassName()); diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php index f49d6c4a2b7..366969fe62d 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php @@ -37,6 +37,6 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $metadata->isMappedSuperclass = true; - $metadata->setCustomRepositoryClass(DDC869PaymentRepository::class); + $metadata->setCustomRepositoryClassName(DDC869PaymentRepository::class); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index a7841cfda7d..b172fd13bf8 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -519,7 +519,7 @@ public function testMappedSuperclassWithRepository() self::assertNotNull($class->getProperty('id')); self::assertNotNull($class->getProperty('value')); self::assertNotNull($class->getProperty('creditCardNumber')); - self::assertEquals($class->customRepositoryClassName, DDC869PaymentRepository::class); + self::assertEquals($class->getCustomRepositoryClassName(), DDC869PaymentRepository::class); self::assertInstanceOf(DDC869PaymentRepository::class, $em->getRepository(DDC869CreditCardPayment::class)); self::assertTrue($em->getRepository(DDC869ChequePayment::class)->isTrue()); @@ -528,7 +528,7 @@ public function testMappedSuperclassWithRepository() self::assertNotNull($class->getProperty('id')); self::assertNotNull($class->getProperty('value')); self::assertNotNull($class->getProperty('serialNumber')); - self::assertEquals($class->customRepositoryClassName, DDC869PaymentRepository::class); + self::assertEquals($class->getCustomRepositoryClassName(), DDC869PaymentRepository::class); self::assertInstanceOf(DDC869PaymentRepository::class, $em->getRepository(DDC869ChequePayment::class)); self::assertTrue($em->getRepository(DDC869ChequePayment::class)->isTrue()); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index 6a2faf3258a..316d005f617 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -77,7 +77,7 @@ public function testGetMetadataForSubclassWithMappedSuperclassWithRepository() { $class = $this->cmf->getMetadataFor(DDC869CreditCardPayment::class); - self::assertEquals($class->customRepositoryClassName, DDC869PaymentRepository::class); + self::assertEquals($class->getCustomRepositoryClassName(), DDC869PaymentRepository::class); self::assertNotNull($class->getProperty('id')); self::assertNotNull($class->getProperty('value')); @@ -86,7 +86,7 @@ public function testGetMetadataForSubclassWithMappedSuperclassWithRepository() $class = $this->cmf->getMetadataFor(DDC869ChequePayment::class); - self::assertEquals($class->customRepositoryClassName, DDC869PaymentRepository::class); + self::assertEquals($class->getCustomRepositoryClassName(), DDC869PaymentRepository::class); self::assertNotNull($class->getProperty('id')); self::assertNotNull($class->getProperty('value')); @@ -95,7 +95,7 @@ public function testGetMetadataForSubclassWithMappedSuperclassWithRepository() // override repositoryClass $class = $this->cmf->getMetadataFor(SubclassWithRepository::class); - self::assertEquals($class->customRepositoryClassName, EntityRepository::class); + self::assertEquals($class->getCustomRepositoryClassName(), EntityRepository::class); self::assertNotNull($class->getProperty('id')); self::assertNotNull($class->getProperty('value')); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 20b7204d766..2cf3315f6e1 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -51,7 +51,7 @@ public function testClassMetadataInstanceSerialization() $cm->setInheritanceType(Mapping\InheritanceType::SINGLE_TABLE); $cm->setSubclasses(["One", "Two", "Three"]); $cm->setParentClasses(["UserParent"]); - $cm->setCustomRepositoryClass("UserRepository"); + $cm->setCustomRepositoryClassName("UserRepository"); $cm->setDiscriminatorColumn($discrColumn); $cm->asReadOnly(); $cm->addNamedQuery(['name' => 'dql', 'query' => 'foo']); @@ -75,7 +75,7 @@ public function testClassMetadataInstanceSerialization() self::assertEquals('UserParent', $cm->getRootClassName()); self::assertEquals([CMS\One::class, CMS\Two::class, CMS\Three::class], $cm->subClasses); self::assertEquals(['UserParent'], $cm->parentClasses); - self::assertEquals(CMS\UserRepository::class, $cm->customRepositoryClassName); + self::assertEquals(CMS\UserRepository::class, $cm->getCustomRepositoryClassName()); self::assertEquals( [ 'Doctrine\Tests\Models\CMS\One', @@ -85,7 +85,7 @@ public function testClassMetadataInstanceSerialization() $cm->subClasses ); self::assertEquals(['UserParent'], $cm->parentClasses); - self::assertEquals(CMS\UserRepository::class, $cm->customRepositoryClassName); + self::assertEquals(CMS\UserRepository::class, $cm->getCustomRepositoryClassName()); self::assertEquals($discrColumn, $cm->discriminatorColumn); self::assertTrue($cm->isReadOnly()); self::assertEquals(['dql' => ['name'=>'dql','query'=>'foo','dql'=>'foo']], $cm->namedQueries); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php index 83e1060a378..3d55f717552 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php @@ -20,4 +20,4 @@ $metadata->addProperty($fieldMetadata); -$metadata->setCustomRepositoryClass(DDC869PaymentRepository::class); +$metadata->setCustomRepositoryClassName(DDC869PaymentRepository::class); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php index d6e066f37e8..0c690e358f6 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php @@ -13,4 +13,4 @@ $metadata->addProperty($fieldMetadata); -$metadata->setCustomRepositoryClass(DDC889SuperClass::class); +$metadata->setCustomRepositoryClassName(DDC889SuperClass::class); diff --git a/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php b/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php index b9d9fb58fb4..e3de52394f2 100644 --- a/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php @@ -76,12 +76,14 @@ public function testCreatedRepositoriesAreCached() public function testCreatesRepositoryFromCustomClassMetadata() { $customMetadata = $this->buildClassMetadata(__DIR__); - $customMetadata->customRepositoryClassName = DDC753DefaultRepository::class; + + $customMetadata->setCustomRepositoryClassName(DDC753DefaultRepository::class); $this->entityManager ->expects($this->any()) ->method('getClassMetadata') - ->will($this->returnValue($customMetadata)); + ->will($this->returnValue($customMetadata)) + ; self::assertInstanceOf( DDC753DefaultRepository::class, @@ -116,16 +118,13 @@ public function testCachesDistinctRepositoriesPerDistinctEntityManager() * * @param string $className * - * @return \PHPUnit_Framework_MockObject_MockObject|\Doctrine\ORM\Mapping\ClassMetadata + * @return ClassMetadata */ public function buildClassMetadata($className) { - /* @var $metadata \Doctrine\ORM\Mapping\ClassMetadata|\PHPUnit_Framework_MockObject_MockObject */ - $metadata = $this->createMock(ClassMetadata::class); - - $metadata->expects($this->any())->method('getName')->will($this->returnValue($className)); + $metadata = new ClassMetadata($className); - $metadata->customRepositoryClassName = null; + $metadata->setCustomRepositoryClassName(null); return $metadata; } diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 84da706d315..a679ad7713c 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -62,7 +62,8 @@ public function tearDown() public function generateBookEntityFixture(array $embeddedClasses = []) { $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorBook'); - $metadata->customRepositoryClassName = $this->namespace . '\EntityGeneratorBookRepository'; + + $metadata->setCustomRepositoryClassName($this->namespace . '\EntityGeneratorBookRepository'); $tableMetadata = new Mapping\TableMetadata(); @@ -565,7 +566,7 @@ public function testLoadMetadata() self::assertEquals($cm->getTableName(), $metadata->getTableName()); self::assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); self::assertEquals($cm->identifier, $metadata->identifier); - self::assertEquals($cm->customRepositoryClassName, $metadata->customRepositoryClassName); + self::assertEquals($cm->getCustomRepositoryClassName(), $metadata->getCustomRepositoryClassName()); // self::assertEquals($cm->embeddedClasses, $metadata->embeddedClasses); // self::assertEquals($cm->isEmbeddedClass, $metadata->isEmbeddedClass); @@ -600,7 +601,7 @@ public function testLoadPrefixedMetadata() self::assertEquals($cm->getTableName(), $metadata->getTableName()); self::assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); self::assertEquals($cm->identifier, $metadata->identifier); - self::assertEquals($cm->customRepositoryClassName, $metadata->customRepositoryClassName); + self::assertEquals($cm->getCustomRepositoryClassName(), $metadata->getCustomRepositoryClassName()); // $isbn = $this->newInstance($embeddedMetadata); // diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php index b64d8ee7c71..6377a1e6774 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityRepositoryGeneratorTest.php @@ -170,9 +170,7 @@ private function writeEntityClass($className, $newClassName) // @todo guilhermeblanco Fix this test as changing Entity class should never be allowed. $metadata->setClassName($newClassName); - - $metadata->namespace = $this->namespace; - $metadata->customRepositoryClassName = $newClassName . "Repository"; + $metadata->setCustomRepositoryClassName($newClassName . "Repository"); $this->generator->writeEntityClass($metadata, $this->tmpDir); From bbd2fbf89749c58f6b49465a3ad9596b75926c89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Cobucci?= Date: Sun, 23 Jul 2017 10:53:15 +0200 Subject: [PATCH 170/275] Replace $this->assertXXX with self::assertXXX Since PHPUnit test methods are all static --- .../Tests/ORM/Cache/DefaultQueryCacheTest.php | 14 ++--- .../ORM/Functional/CustomFunctionsTest.php | 2 +- .../Functional/ExtraLazyCollectionTest.php | 4 +- .../ORM/Functional/LifecycleCallbackTest.php | 4 +- .../ORM/Tools/Console/MetadataFilterTest.php | 62 +++++++++---------- .../Tests/ORM/Tools/SchemaToolTest.php | 6 +- 6 files changed, 46 insertions(+), 46 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php index 3faa825f3bf..cd4798cc43e 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php @@ -299,13 +299,13 @@ public function testGetBasicQueryResult() $result = $this->queryCache->get($key, $rsm); - $this->assertCount(2, $result); - $this->assertInstanceOf(Country::class, $result[0]); - $this->assertInstanceOf(Country::class, $result[1]); - $this->assertEquals(1, $result[0]->getId()); - $this->assertEquals(2, $result[1]->getId()); - $this->assertEquals('Foo', $result[0]->getName()); - $this->assertEquals('Bar', $result[1]->getName()); + self::assertCount(2, $result); + self::assertInstanceOf(Country::class, $result[0]); + self::assertInstanceOf(Country::class, $result[1]); + self::assertEquals(1, $result[0]->getId()); + self::assertEquals(2, $result[1]->getId()); + self::assertEquals('Foo', $result[0]->getName()); + self::assertEquals('Bar', $result[1]->getName()); } public function testGetWithAssociation() diff --git a/tests/Doctrine/Tests/ORM/Functional/CustomFunctionsTest.php b/tests/Doctrine/Tests/ORM/Functional/CustomFunctionsTest.php index ddf382780c2..c0e567f5e69 100644 --- a/tests/Doctrine/Tests/ORM/Functional/CustomFunctionsTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/CustomFunctionsTest.php @@ -63,7 +63,7 @@ public function testCustomFunctionOverride() $usersCount = $query->getSingleScalarResult(); - $this->assertEquals(1, $usersCount); + self::assertEquals(1, $usersCount); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php index d0b10c2f7e2..18382d09c87 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ExtraLazyCollectionTest.php @@ -647,12 +647,12 @@ public function testRemoveElementManyToMany() $group = $this->em->find(CmsGroup::class, $this->groupId); $queryCount = $this->getCurrentQueryCount(); - $this->assertTrue($user->groups->removeElement($group)); + self::assertTrue($user->groups->removeElement($group)); self::assertEquals($queryCount + 1, $this->getCurrentQueryCount(), "Removing a persisted entity should cause one query to be executed."); self::assertFalse($user->groups->isInitialized(), "Post-Condition: Collection is not initialized."); - $this->assertFalse($user->groups->removeElement($group), "Removing an already removed element returns false"); + self::assertFalse($user->groups->removeElement($group), "Removing an already removed element returns false"); // Test Many to Many removal with Entity state as new $group = new CmsGroup(); diff --git a/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php b/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php index efd19ad9614..d25e23abaf0 100644 --- a/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php @@ -305,9 +305,9 @@ public function testPostLoadIsInvokedOnFetchJoinedEntities() ->createQuery($dql)->setParameter('entA_id', $entA->getId()) ->getOneOrNullResult(); - $this->assertTrue($fetchedA->postLoadCallbackInvoked); + self::assertTrue($fetchedA->postLoadCallbackInvoked); foreach ($fetchedA->entities as $fetchJoinedEntB) { - $this->assertTrue($fetchJoinedEntB->postLoadCallbackInvoked); + self::assertTrue($fetchJoinedEntB->postLoadCallbackInvoked); } } diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/MetadataFilterTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/MetadataFilterTest.php index 2febcb05045..a6c03bcf15e 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Console/MetadataFilterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Console/MetadataFilterTest.php @@ -41,9 +41,9 @@ public function testFilterWithEmptyArray() : void $metadatas = $originalMetadatas; $metadatas = MetadataFilter::filter($metadatas, []); - $this->assertContains($metadataAaa, $metadatas); - $this->assertContains($metadataBbb, $metadatas); - $this->assertCount(count($originalMetadatas), $metadatas); + self::assertContains($metadataAaa, $metadatas); + self::assertContains($metadataBbb, $metadatas); + self::assertCount(count($originalMetadatas), $metadatas); } public function testFilterWithString() : void @@ -57,26 +57,26 @@ public function testFilterWithString() : void $metadatas = $originalMetadatas; $metadatas = MetadataFilter::filter($metadatas, 'MetadataFilterTestEntityAaa'); - $this->assertContains($metadataAaa, $metadatas); - $this->assertNotContains($metadataBbb, $metadatas); - $this->assertNotContains($metadataCcc, $metadatas); - $this->assertCount(1, $metadatas); + self::assertContains($metadataAaa, $metadatas); + self::assertNotContains($metadataBbb, $metadatas); + self::assertNotContains($metadataCcc, $metadatas); + self::assertCount(1, $metadatas); $metadatas = $originalMetadatas; $metadatas = MetadataFilter::filter($metadatas, 'MetadataFilterTestEntityBbb'); - $this->assertNotContains($metadataAaa, $metadatas); - $this->assertContains($metadataBbb, $metadatas); - $this->assertNotContains($metadataCcc, $metadatas); - $this->assertCount(1, $metadatas); + self::assertNotContains($metadataAaa, $metadatas); + self::assertContains($metadataBbb, $metadatas); + self::assertNotContains($metadataCcc, $metadatas); + self::assertCount(1, $metadatas); $metadatas = $originalMetadatas; $metadatas = MetadataFilter::filter($metadatas, 'MetadataFilterTestEntityCcc'); - $this->assertNotContains($metadataAaa, $metadatas); - $this->assertNotContains($metadataBbb, $metadatas); - $this->assertContains($metadataCcc, $metadatas); - $this->assertCount(1, $metadatas); + self::assertNotContains($metadataAaa, $metadatas); + self::assertNotContains($metadataBbb, $metadatas); + self::assertContains($metadataCcc, $metadatas); + self::assertCount(1, $metadatas); } public function testFilterWithString2() : void @@ -90,10 +90,10 @@ public function testFilterWithString2() : void $metadatas = $originalMetadatas; $metadatas = MetadataFilter::filter($metadatas, 'MetadataFilterTestEntityFoo'); - $this->assertContains($metadataFoo, $metadatas); - $this->assertContains($metadataFooBar, $metadatas); - $this->assertNotContains($metadataBar, $metadatas); - $this->assertCount(2, $metadatas); + self::assertContains($metadataFoo, $metadatas); + self::assertContains($metadataFooBar, $metadatas); + self::assertNotContains($metadataBar, $metadatas); + self::assertCount(2, $metadatas); } public function testFilterWithArray() : void @@ -110,10 +110,10 @@ public function testFilterWithArray() : void 'MetadataFilterTestEntityCcc', ]); - $this->assertContains($metadataAaa, $metadatas); - $this->assertNotContains($metadataBbb, $metadatas); - $this->assertContains($metadataCcc, $metadatas); - $this->assertCount(2, $metadatas); + self::assertContains($metadataAaa, $metadatas); + self::assertNotContains($metadataBbb, $metadatas); + self::assertContains($metadataCcc, $metadatas); + self::assertCount(2, $metadatas); } public function testFilterWithRegex() : void @@ -127,18 +127,18 @@ public function testFilterWithRegex() : void $metadatas = $originalMetadatas; $metadatas = MetadataFilter::filter($metadatas, 'Foo$'); - $this->assertContains($metadataFoo, $metadatas); - $this->assertNotContains($metadataFooBar, $metadatas); - $this->assertNotContains($metadataBar, $metadatas); - $this->assertCount(1, $metadatas); + self::assertContains($metadataFoo, $metadatas); + self::assertNotContains($metadataFooBar, $metadatas); + self::assertNotContains($metadataBar, $metadatas); + self::assertCount(1, $metadatas); $metadatas = $originalMetadatas; $metadatas = MetadataFilter::filter($metadatas, 'Bar$'); - $this->assertNotContains($metadataFoo, $metadatas); - $this->assertContains($metadataFooBar, $metadatas); - $this->assertContains($metadataBar, $metadatas); - $this->assertCount(2, $metadatas); + self::assertNotContains($metadataFoo, $metadatas); + self::assertContains($metadataFooBar, $metadatas); + self::assertContains($metadataBar, $metadatas); + self::assertCount(2, $metadatas); } } diff --git a/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php b/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php index 23398b422de..6c45dd31f15 100644 --- a/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php @@ -189,13 +189,13 @@ public function testSetDiscriminatorColumnWithoutLength() : void $schema = $schemaTool->getSchemaFromMetadata([$metadata]); - $this->assertTrue($schema->hasTable('first_entity')); + self::assertTrue($schema->hasTable('first_entity')); $table = $schema->getTable('first_entity'); - $this->assertTrue($table->hasColumn('discriminator')); + self::assertTrue($table->hasColumn('discriminator')); $column = $table->getColumn('discriminator'); - $this->assertEquals(255, $column->getLength()); + self::assertEquals(255, $column->getLength()); } } From c305d87780d5b61bb646fee9287dae5553cf2644 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 24 Jul 2017 12:09:54 -0400 Subject: [PATCH 171/275] Simplified NamedQuery support --- lib/Doctrine/ORM/EntityRepository.php | 5 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 28 +-- .../ORM/Mapping/ClassMetadataFactory.php | 16 +- .../ORM/Mapping/ComponentMetadata.php | 12 +- .../ORM/Mapping/Driver/AnnotationDriver.php | 5 +- .../Mapping/Driver/NewAnnotationDriver.php | 5 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 7 +- .../ORM/Mapping/EmbeddedClassMetadata.php | 10 +- .../ORM/Mapping/EntityClassMetadata.php | 188 +++++++++++++++++- .../ORM/Mapping/RootClassMetadata.php | 55 +++++ lib/Doctrine/ORM/Mapping/SubClassMetadata.php | 55 +++++ lib/Doctrine/ORM/UnitOfWork.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 7 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 85 ++------ .../php/Doctrine.Tests.ORM.Mapping.User.php | 7 +- 15 files changed, 337 insertions(+), 150 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/RootClassMetadata.php create mode 100644 lib/Doctrine/ORM/Mapping/SubClassMetadata.php diff --git a/lib/Doctrine/ORM/EntityRepository.php b/lib/Doctrine/ORM/EntityRepository.php index b18f33b1342..7704625a512 100644 --- a/lib/Doctrine/ORM/EntityRepository.php +++ b/lib/Doctrine/ORM/EntityRepository.php @@ -109,7 +109,10 @@ public function createResultSetMappingBuilder($alias) */ public function createNamedQuery($queryName) { - return $this->em->createQuery($this->class->getNamedQuery($queryName)); + $namedQuery = $this->class->getNamedQuery($queryName); + $resolvedQuery = str_replace('__CLASS__', $this->class->getClassName(), $namedQuery); + + return $this->em->createQuery($resolvedQuery); } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index dd78ff74f65..eb3c87fcd81 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -699,11 +699,11 @@ public function isIdentifierComposite() */ public function getNamedQuery($queryName) { - if ( ! isset($this->namedQueries[$queryName])) { + if (! isset($this->namedQueries[$queryName])) { throw MappingException::queryNotFound($this->name, $queryName); } - return $this->namedQueries[$queryName]['dql']; + return $this->namedQueries[$queryName]; } /** @@ -1613,29 +1613,13 @@ public function addInheritedProperty(Property $property) * * @throws MappingException */ - public function addNamedQuery(array $queryMapping) + public function addNamedQuery(string $name, string $query) { - if (!isset($queryMapping['name'])) { - throw MappingException::nameIsMandatoryForQueryMapping($this->name); - } - - if (isset($this->namedQueries[$queryMapping['name']])) { - throw MappingException::duplicateQueryMapping($this->name, $queryMapping['name']); + if (isset($this->namedQueries[$name])) { + throw MappingException::duplicateQueryMapping($this->name, $name); } - if (!isset($queryMapping['query'])) { - throw MappingException::emptyQueryMapping($this->name, $queryMapping['name']); - } - - $name = $queryMapping['name']; - $query = $queryMapping['query']; - $dql = str_replace('__CLASS__', $this->name, $query); - - $this->namedQueries[$name] = [ - 'name' => $name, - 'query' => $query, - 'dql' => $dql, - ]; + $this->namedQueries[$name] = $query; } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 7c69cb94687..1a7d2fd9c9e 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -199,15 +199,12 @@ protected function doLoadMetadata( } $this->addInheritedIndexes($class, $parent); + $this->addInheritedNamedQueries($class, $parent); if ($parent->getCache()) { $class->setCache(clone $parent->getCache()); } - if ( ! empty($parent->namedQueries)) { - $this->addInheritedNamedQueries($class, $parent); - } - if ( ! empty($parent->namedNativeQueries)) { $this->addInheritedNamedNativeQueries($class, $parent); } @@ -545,17 +542,12 @@ private function addInheritedIndexes(ClassMetadata $subClass, ClassMetadata $par */ private function addInheritedNamedQueries(ClassMetadata $subClass, ClassMetadata $parentClass) { - foreach ($parentClass->namedQueries as $name => $query) { - if (isset($subClass->namedQueries[$name])) { + foreach ($parentClass->getNamedQueries() as $name => $query) { + if ($subClass->hasNamedQuery($name)) { continue; } - $subClass->addNamedQuery( - [ - 'name' => $query['name'], - 'query' => $query['query'] - ] - ); + $subClass->addNamedQuery($name, $query); } } diff --git a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php index 81101c6d4ff..ae5ef254614 100644 --- a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php @@ -25,8 +25,10 @@ /** * A ComponentMetadata instance holds object-relational property mapping. * - * @author Guilherme Blanco + * @package Doctrine\ORM\Mapping * @since 3.0 + * + * @author Guilherme Blanco */ abstract class ComponentMetadata { @@ -69,14 +71,6 @@ public function __construct(string $className, ?ComponentMetadata $parent = null $this->parent = $parent; } - /** - * @return string - */ - public function getRootClassName() : string - { - return $this->parent ? $this->parent->getRootClassName() : $this->className; - } - /** * @return string */ diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 9ac9c213a7a..ec8929b2037 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -158,10 +158,7 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat throw new \UnexpectedValueException("@NamedQueries should contain an array of @NamedQuery annotations."); } - $metadata->addNamedQuery([ - 'name' => $namedQuery->name, - 'query' => $namedQuery->query - ]); + $metadata->addNamedQuery($namedQuery->name, $namedQuery->query); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php index d65c1040ae0..b4cc48ecf95 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php @@ -292,10 +292,7 @@ private function convertClassAnnotationsToEntityClassMetadata( throw new \UnexpectedValueException("@NamedQueries should contain an array of @NamedQuery annotations."); } - $classMetadata->addNamedQuery([ - 'name' => $namedQuery->name, - 'query' => $namedQuery->query, - ]); + $classMetadata->addNamedQuery($namedQuery->name, $namedQuery->query); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index f0609316d31..d2382973e0a 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -155,12 +155,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate named queries if (isset($xmlRoot->{'named-queries'})) { foreach ($xmlRoot->{'named-queries'}->{'named-query'} as $namedQueryElement) { - $metadata->addNamedQuery( - [ - 'name' => (string) $namedQueryElement['name'], - 'query' => (string) $namedQueryElement['query'] - ] - ); + $metadata->addNamedQuery((string) $namedQueryElement['name'], (string) $namedQueryElement['query']); } } diff --git a/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php b/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php index fe3a9c34018..d697822d562 100644 --- a/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php @@ -31,6 +31,8 @@ * @since 3.0 * * @author Guilherme Blanco + * + * @property MappedSuperClassMetadata $parent */ class EmbeddedClassMetadata extends ComponentMetadata implements Property { @@ -49,11 +51,11 @@ class EmbeddedClassMetadata extends ComponentMetadata implements Property /** * EmbeddedClassMetadata constructor. * - * @param string $name - * @param string $className - * @param EmbeddedClassMetadata|null $parent + * @param string $name + * @param string $className + * @param MappedSuperClassMetadata|null $parent */ - public function __construct(string $name, string $className, ?EmbeddedClassMetadata $parent = null) + public function __construct(string $name, string $className, ?MappedSuperClassMetadata $parent = null) { parent::__construct($className, $parent); diff --git a/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php b/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php index b7f1596d90c..e9e3b855193 100644 --- a/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php @@ -30,8 +30,11 @@ * * @author Guilherme Blanco */ -class EntityClassMetadata extends ComponentMetadata +abstract class EntityClassMetadata extends ComponentMetadata { + /** @var string The name of the Entity */ + protected $entityName; + /** * @var null|string The name of the custom repository class used for the entity class. */ @@ -54,9 +57,9 @@ class EntityClassMetadata extends ComponentMetadata protected $readOnly = false; /** - * READ-ONLY: The names of all subclasses (descendants). + * List of all sub-classes (descendants) metadata. * - * @var array + * @var array */ protected $subClasses = []; @@ -138,6 +141,24 @@ class EntityClassMetadata extends ComponentMetadata public function __construct(string $className, ?ComponentMetadata $parent = null) { parent::__construct($className, $parent); + + $this->entityName = $className; + } + + /** + * @return string + */ + public function getEntityName() : string + { + return $this->entityName; + } + + /** + * @param string $entityName + */ + public function setEntityName(string $entityName) + { + $this->entityName = $entityName; } /** @@ -196,6 +217,162 @@ public function isVersioned() : bool return $this->getVersion() !== null; } + /** + * @param bool $readOnly + */ + public function setReadOnly(bool $readOnly) + { + $this->readOnly = $readOnly; + } + + /** + * @return bool + */ + public function isReadOnly() : bool + { + return $this->readOnly; + } + + /** + * @param SubClassMetadata $subClassMetadata + * + * @throws MappingException + */ + public function addSubClass(SubClassMetadata $subClassMetadata) + { + $superClassMetadata = $this->getSuperClass(); + + while ($superClassMetadata !== null) { + if ($superClassMetadata->entityName === $subClassMetadata->entityName) { + throw new MappingException( + sprintf( + 'Circular inheritance mapping detected: "%s" have itself as superclass when extending "%s".', + $subClassMetadata->entityName, + $superClassMetadata->entityName + ) + ); + } + + $superClassMetadata->subClasses[] = $subClassMetadata; + + $superClassMetadata = $superClassMetadata->parent; + } + + $this->subClasses[] = $subClassMetadata; + } + + /** + * @return bool + */ + public function hasSubClasses() : bool + { + return count($this->subClasses) > 0; + } + + /** + * @return \Iterator + */ + public function getSubClassIterator() : \Iterator + { + $iterator = new \AppendIterator(); + + foreach ($this->subClasses as $subClassMetadata) { + $iterator->append($subClassMetadata->getSubClassIterator()); + } + + $iterator->append(new \ArrayIterator($this->subClasses)); + + return $iterator; + } + + /** + * Gets a named query. + * + * @param string $queryName The query name. + * + * @return string + * + * @throws MappingException + */ + public function getNamedQuery($queryName) : string + { + if (! isset($this->namedQueries[$queryName])) { + throw MappingException::queryNotFound($this->entityName, $queryName); + } + + return $this->namedQueries[$queryName]; + } + + /** + * Gets all named queries of the class. + * + * @return array + */ + public function getNamedQueries() : array + { + return $this->namedQueries; + } + + /** + * Gets a named native query. + * + * @param string $queryName The native query name. + * + * @return array + * + * @throws MappingException + * + * @todo guilhermeblanco This should return an object instead + */ + public function getNamedNativeQuery($queryName) : array + { + if (! isset($this->namedNativeQueries[$queryName])) { + throw MappingException::queryNotFound($this->entityName, $queryName); + } + + return $this->namedNativeQueries[$queryName]; + } + + /** + * Gets all named native queries of the class. + * + * @return array + */ + public function getNamedNativeQueries() : array + { + return $this->namedNativeQueries; + } + + /** + * Gets the result set mapping. + * + * @see ClassMetadata::$sqlResultSetMappings + * + * @param string $name The result set mapping name. + * + * @return array + * + * @throws MappingException + */ + public function getSqlResultSetMapping($name) + { + if ( ! isset($this->sqlResultSetMappings[$name])) { + throw MappingException::resultMappingNotFound($this->name, $name); + } + + return $this->sqlResultSetMappings[$name]; + } + + /** + * Gets all sql result set mappings of the class. + * + * @return array + */ + public function getSqlResultSetMappings() + { + return $this->sqlResultSetMappings; + } + /** * {@inheritdoc} */ @@ -207,4 +384,9 @@ public function addDeclaredProperty(Property $property) $this->setDeclaredVersion($property); } } + + /** + * @return RootClassMetadata + */ + abstract public function getRootClass() : RootClassMetadata; } diff --git a/lib/Doctrine/ORM/Mapping/RootClassMetadata.php b/lib/Doctrine/ORM/Mapping/RootClassMetadata.php new file mode 100644 index 00000000000..c240b812eeb --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/RootClassMetadata.php @@ -0,0 +1,55 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +/** + * Class RootClassMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + * + * @property MappedSuperClassMetadata $parent + */ +class RootClassMetadata extends EntityClassMetadata +{ + /** + * RootClassMetadata constructor. + * + * @param string $className + * @param MappedSuperClassMetadata|null $parent + */ + public function __construct(string $className, ?MappedSuperClassMetadata $parent = null) + { + parent::__construct($className, $parent); + } + + /** + * @return RootClassMetadata + */ + public function getRootClass() : RootClassMetadata + { + return $this; + } +} diff --git a/lib/Doctrine/ORM/Mapping/SubClassMetadata.php b/lib/Doctrine/ORM/Mapping/SubClassMetadata.php new file mode 100644 index 00000000000..b2e12143914 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/SubClassMetadata.php @@ -0,0 +1,55 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +/** + * Class SubClassMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + * + * @property EntityClassMetadata $parent + */ +class SubClassMetadata extends EntityClassMetadata +{ + /** + * SubClassMetadata constructor. + * + * @param string $className + * @param EntityClassMetadata $parent + */ + public function __construct(string $className, EntityClassMetadata $parent) + { + parent::__construct($className, $parent); + } + + /** + * @return RootClassMetadata + */ + public function getRootClass() : RootClassMetadata + { + return $this->parent->getRootClass(); + } +} diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 630619fc13a..fc71d6c4fc2 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -2658,7 +2658,7 @@ public function createEntity($className, array $data, &$hints = []) foreach ($association->getJoinColumns() as $joinColumn) { $joinColumnName = $joinColumn->getColumnName(); $joinColumnValue = isset($data[$joinColumnName]) ? $data[$joinColumnName] : null; - $targetField = $targetClass->fieldNames[$joinColumn->getReferencedColumnName()]; + $targetField = $targetClass->fieldNames[$joinColumn->getReferencedColumnName()]; if ($joinColumnValue === null && in_array($targetField, $targetClass->identifier, true)) { // the missing key is part of target's entity primary key diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index b172fd13bf8..dada572b5c1 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -1290,12 +1290,7 @@ public static function loadMetadata(ClassMetadata $metadata) $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); $metadata->addLifecycleCallback('doStuffOnPostPersist', 'postPersist'); - $metadata->addNamedQuery( - [ - 'name' => 'all', - 'query' => 'SELECT u FROM __CLASS__ u' - ] - ); + $metadata->addNamedQuery('all', 'SELECT u FROM __CLASS__ u'); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 2cf3315f6e1..7640043bac7 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -3,6 +3,7 @@ namespace Doctrine\Tests\ORM\Mapping; use Doctrine\DBAL\Types\Type; +use Doctrine\ORM\EntityRepository; use Doctrine\ORM\Events; use Doctrine\ORM\Mapping; use Doctrine\ORM\Mapping\ClassMetadata; @@ -54,7 +55,7 @@ public function testClassMetadataInstanceSerialization() $cm->setCustomRepositoryClassName("UserRepository"); $cm->setDiscriminatorColumn($discrColumn); $cm->asReadOnly(); - $cm->addNamedQuery(['name' => 'dql', 'query' => 'foo']); + $cm->addNamedQuery('dql', 'foo'); $association = new Mapping\OneToOneAssociationMetadata('phonenumbers'); @@ -88,7 +89,7 @@ public function testClassMetadataInstanceSerialization() self::assertEquals(CMS\UserRepository::class, $cm->getCustomRepositoryClassName()); self::assertEquals($discrColumn, $cm->discriminatorColumn); self::assertTrue($cm->isReadOnly()); - self::assertEquals(['dql' => ['name'=>'dql','query'=>'foo','dql'=>'foo']], $cm->namedQueries); + self::assertEquals(['dql' => 'foo'], $cm->getNamedQueries()); self::assertCount(1, $cm->getProperties()); self::assertInstanceOf(Mapping\OneToOneAssociationMetadata::class, $cm->getProperty('phonenumbers')); @@ -776,12 +777,7 @@ public function testRetrievalOfNamedQueries() self::assertEquals(0, count($cm->getNamedQueries())); - $cm->addNamedQuery( - [ - 'name' => 'userById', - 'query' => 'SELECT u FROM __CLASS__ u WHERE u.id = ?1' - ] - ); + $cm->addNamedQuery('userById', 'SELECT u FROM __CLASS__ u WHERE u.id = ?1'); self::assertEquals(1, count($cm->getNamedQueries())); } @@ -817,12 +813,7 @@ public function testExistanceOfNamedQuery() $cm->initializeReflection(new RuntimeReflectionService()); - $cm->addNamedQuery( - [ - 'name' => 'all', - 'query' => 'SELECT u FROM __CLASS__ u' - ] - ); + $cm->addNamedQuery('all', 'SELECT u FROM __CLASS__ u'); self::assertTrue($cm->hasNamedQuery('all')); self::assertFalse($cm->hasNamedQuery('userById')); @@ -970,15 +961,14 @@ public function testRetrieveOfNamedQuery() $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); + $cm->addNamedQuery('userById', 'SELECT u FROM __CLASS__ u WHERE u.id = ?1'); - $cm->addNamedQuery( - [ - 'name' => 'userById', - 'query' => 'SELECT u FROM __CLASS__ u WHERE u.id = ?1' - ] - ); + self::assertEquals('SELECT u FROM __CLASS__ u WHERE u.id = ?1', $cm->getNamedQuery('userById')); - self::assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1', $cm->getNamedQuery('userById')); + // Named queries are only resolved when created + $repo = new EntityRepository($this->getTestEntityManager(), $cm); + + self::assertEquals('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1', $repo->createNamedQuery('userById')->getDQL()); } /** @@ -1029,19 +1019,8 @@ public function testNamingCollisionNamedQueryShouldThrowException() $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->addNamedQuery( - [ - 'name' => 'userById', - 'query' => 'SELECT u FROM __CLASS__ u WHERE u.id = ?1' - ] - ); - - $cm->addNamedQuery( - [ - 'name' => 'userById', - 'query' => 'SELECT u FROM __CLASS__ u WHERE u.id = ?1' - ] - ); + $cm->addNamedQuery('userById', 'SELECT u FROM __CLASS__ u WHERE u.id = ?1'); + $cm->addNamedQuery('userById', 'SELECT u FROM __CLASS__ u WHERE u.id = ?1'); } /** @@ -1155,44 +1134,6 @@ public function testTargetEntityNotFound() $cm->validateAssociations(); } - /** - * @group DDC-1663 - * - * @expectedException \Doctrine\ORM\Mapping\MappingException - * @expectedExceptionMessage Query name on entity class 'Doctrine\Tests\Models\CMS\CmsUser' is not defined. - */ - public function testNameIsMandatoryForNamedQueryMappingException() - { - $cm = new ClassMetadata(CMS\CmsUser::class); - $cm->initializeReflection(new RuntimeReflectionService()); - - $cm->addNamedQuery( - [ - 'query' => 'SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u', - ] - ); - } - - /** - * @group DDC-1663 - * - * @expectedException \Doctrine\ORM\Mapping\MappingException - * @expectedExceptionMessage Query name on entity class 'Doctrine\Tests\Models\CMS\CmsUser' is not defined. - */ - public function testNameIsMandatoryForNameNativeQueryMappingException() - { - $cm = new ClassMetadata(CMS\CmsUser::class); - $cm->initializeReflection(new RuntimeReflectionService()); - - $cm->addNamedQuery( - [ - 'query' => 'SELECT * FROM cms_users', - 'resultClass' => CMS\CmsUser::class, - 'resultSetMapping' => 'result-mapping-name' - ] - ); - } - /** * @group DDC-1663 * diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index 32ba2e66c39..9d1f0cb65fb 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -48,12 +48,7 @@ $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); $metadata->addLifecycleCallback('doStuffOnPostPersist', 'postPersist'); -$metadata->addNamedQuery( - [ - 'name' => 'all', - 'query' => 'SELECT u FROM __CLASS__ u' - ] -); +$metadata->addNamedQuery('all', 'SELECT u FROM __CLASS__ u'); $fieldMetadata = new Mapping\FieldMetadata('id'); From 256b7e34a095a5273dd7e03fdfca4ee3d01797ba Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 24 Jul 2017 15:17:13 -0400 Subject: [PATCH 172/275] Implemented runtime resolution of __CLASS__ calls to SqlResultSetMapping, NativeNamedQuery and NamedQuery. Dropped isSelfClass from mappings --- lib/Doctrine/ORM/EntityRepository.php | 5 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 56 +++++-------- .../ORM/Mapping/ClassMetadataFactory.php | 6 +- .../Mapping/Driver/NewAnnotationDriver.php | 8 +- .../ORM/Mapping/EntityClassMetadata.php | 31 +++++-- .../ORM/Query/ResultSetMappingBuilder.php | 12 ++- .../Command/MappingDescribeCommand.php | 2 +- .../Doctrine/Tests/Models/CMS/CmsAddress.php | 54 ++++++------- tests/Doctrine/Tests/Models/CMS/CmsUser.php | 4 +- .../Tests/Models/Company/CompanyPerson.php | 2 +- .../Tests/ORM/Functional/NativeQueryTest.php | 80 ++++++++++--------- .../ORM/Mapping/AbstractMappingDriverTest.php | 35 ++++++-- .../Tests/ORM/Mapping/ClassMetadataTest.php | 10 ++- .../Doctrine.Tests.Models.CMS.CmsAddress.php | 2 +- .../php/Doctrine.Tests.Models.CMS.CmsUser.php | 4 +- ...ine.Tests.Models.Company.CompanyPerson.php | 2 +- ...ctrine.Tests.Models.CMS.CmsAddress.dcm.xml | 6 +- 17 files changed, 177 insertions(+), 142 deletions(-) diff --git a/lib/Doctrine/ORM/EntityRepository.php b/lib/Doctrine/ORM/EntityRepository.php index 7704625a512..4db1359809c 100644 --- a/lib/Doctrine/ORM/EntityRepository.php +++ b/lib/Doctrine/ORM/EntityRepository.php @@ -124,8 +124,9 @@ public function createNamedQuery($queryName) */ public function createNativeNamedQuery($queryName) { - $queryMapping = $this->class->getNamedNativeQuery($queryName); - $rsm = new Query\ResultSetMappingBuilder($this->em); + $queryMapping = $this->class->getNamedNativeQuery($queryName); + $rsm = new Query\ResultSetMappingBuilder($this->em); + $rsm->addNamedNativeQueryMapping($this->class, $queryMapping); return $this->em->createNativeQuery($queryMapping['query'], $rsm); diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index eb3c87fcd81..56e4d23bc4a 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -130,11 +130,11 @@ class ClassMetadata implements TableOwner, \Doctrine\Common\Persistence\Mapping\ //public $embeddedClasses = []; /** - * READ-ONLY: The named queries allowed to be called directly from Repository. + * The named queries allowed to be called directly from Repository. * * @var array */ - public $namedQueries = []; + protected $namedQueries = []; /** * READ-ONLY: The named native queries allowed to be called directly from Repository. @@ -759,7 +759,7 @@ public function getNamedNativeQueries() */ public function getSqlResultSetMapping($name) { - if ( ! isset($this->sqlResultSetMappings[$name])) { + if (! isset($this->sqlResultSetMappings[$name])) { throw MappingException::resultMappingNotFound($this->name, $name); } @@ -872,7 +872,7 @@ protected function validateAndCompleteAssociationMapping(AssociationMetadata $pr throw MappingException::missingTargetEntity($fieldName); } - $targetEntity = ltrim($this->fullyQualifiedClassName($targetEntity), '\\'); + $targetEntity = $this->fullyQualifiedClassName($targetEntity); $property->setSourceEntity($this->name); $property->setOwningSide($property->getMappedBy() === null); @@ -1607,7 +1607,8 @@ public function addInheritedProperty(Property $property) * INTERNAL: * Adds a named query to this class. * - * @param array $queryMapping + * @param string $name + * @param string $query * * @return void * @@ -1650,17 +1651,8 @@ public function addNamedNativeQuery(array $queryMapping) throw MappingException::missingQueryMapping($this->name, $queryMapping['name']); } - $queryMapping['isSelfClass'] = false; - - if (isset($queryMapping['resultClass'])) { - if ($queryMapping['resultClass'] === '__CLASS__') { - - $queryMapping['isSelfClass'] = true; - $queryMapping['resultClass'] = $this->name; - } - + if (isset($queryMapping['resultClass']) && $queryMapping['resultClass'] !== '__CLASS__') { $queryMapping['resultClass'] = $this->fullyQualifiedClassName($queryMapping['resultClass']); - $queryMapping['resultClass'] = ltrim($queryMapping['resultClass'], '\\'); } $this->namedNativeQueries[$queryMapping['name']] = $queryMapping; @@ -1688,30 +1680,24 @@ public function addSqlResultSetMapping(array $resultMapping) if (isset($resultMapping['entities'])) { foreach ($resultMapping['entities'] as $key => $entityResult) { - if (!isset($entityResult['entityClass'])) { + if (! isset($entityResult['entityClass'])) { throw MappingException::missingResultSetMappingEntity($this->name, $resultMapping['name']); } - $entityResult['isSelfClass'] = false; - if ($entityResult['entityClass'] === '__CLASS__') { + $entityClassName = ($entityResult['entityClass'] !== '__CLASS__') + ? $this->fullyQualifiedClassName($entityResult['entityClass']) + : $entityResult['entityClass'] + ; - $entityResult['isSelfClass'] = true; - $entityResult['entityClass'] = $this->name; - - } - - $entityResult['entityClass'] = $this->fullyQualifiedClassName($entityResult['entityClass']); - - $resultMapping['entities'][$key]['entityClass'] = ltrim($entityResult['entityClass'], '\\'); - $resultMapping['entities'][$key]['isSelfClass'] = $entityResult['isSelfClass']; + $resultMapping['entities'][$key]['entityClass'] = $entityClassName; if (isset($entityResult['fields'])) { foreach ($entityResult['fields'] as $k => $field) { - if (!isset($field['name'])) { + if (! isset($field['name'])) { throw MappingException::missingResultSetMappingFieldName($this->name, $resultMapping['name']); } - if (!isset($field['column'])) { + if (! isset($field['column'])) { $fieldName = $field['name']; if (strpos($fieldName, '.')) { @@ -1814,17 +1800,16 @@ public function setLifecycleCallbacks(array $callbacks) public function addEntityListener($eventName, $class, $method) { $class = $this->fullyQualifiedClassName($class); - $listener = [ 'class' => $class, 'method' => $method, ]; - if ( ! class_exists($class)) { + if (! class_exists($class)) { throw MappingException::entityListenerClassNotFound($class, $this->name); } - if ( ! method_exists($class, $method)) { + if (! method_exists($class, $method)) { throw MappingException::entityListenerMethodNotFound($class, $method, $this->name); } @@ -1891,7 +1876,6 @@ public function setDiscriminatorMap(array $map) public function addDiscriminatorMapClass($name, $className) { $className = $this->fullyQualifiedClassName($className); - $className = ltrim($className, '\\'); $this->discriminatorMap[$name] = $className; @@ -1901,7 +1885,7 @@ public function addDiscriminatorMapClass($name, $className) return; } - if ( ! (class_exists($className) || interface_exists($className))) { + if (! (class_exists($className) || interface_exists($className))) { throw MappingException::invalidClassInDiscriminatorMap($className, $this->name); } @@ -1988,10 +1972,10 @@ public function fullyQualifiedClassName($className) $namespace = $this->reflectionClass->getNamespaceName(); if ($className !== null && strpos($className, '\\') === false && $namespace) { - return $namespace . '\\' . $className; + return ltrim($namespace . '\\' . $className, '\\'); } - return $className; + return ltrim($className, '\\'); } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 1a7d2fd9c9e..753a91def57 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -572,9 +572,8 @@ private function addInheritedNamedNativeQueries(ClassMetadata $subClass, ClassMe [ 'name' => $query['name'], 'query' => $query['query'], - 'isSelfClass' => $query['isSelfClass'], 'resultSetMapping' => $query['resultSetMapping'], - 'resultClass' => $query['isSelfClass'] ? $subClass->getClassName() : $query['resultClass'], + 'resultClass' => $query['resultClass'], ] ); } @@ -602,9 +601,8 @@ private function addInheritedSqlResultSetMappings(ClassMetadata $subClass, Class foreach ($mapping['entities'] as $entity) { $entities[] = [ 'fields' => $entity['fields'], - 'isSelfClass' => $entity['isSelfClass'], 'discriminatorColumn' => $entity['discriminatorColumn'], - 'entityClass' => $entity['isSelfClass'] ? $subClass->getClassName() : $entity['entityClass'], + 'entityClass' => $entity['entityClass'], ]; } diff --git a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php index b4cc48ecf95..5a78eae1025 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php @@ -690,7 +690,7 @@ private function convertReflectionPropertyToOneToOneAssociationMetadata( } $assocMetadata = new Mapping\OneToOneAssociationMetadata($fieldName); - $targetEntity = ltrim($classMetadata->fullyQualifiedClassName($oneToOneAnnot->targetEntity), '\\'); + $targetEntity = $classMetadata->fullyQualifiedClassName($oneToOneAnnot->targetEntity); $assocMetadata->setSourceEntity($className); $assocMetadata->setTargetEntity($targetEntity); @@ -774,7 +774,7 @@ private function convertReflectionPropertyToManyToOneAssociationMetadata( } $assocMetadata = new Mapping\ManyToOneAssociationMetadata($fieldName); - $targetEntity = ltrim($classMetadata->fullyQualifiedClassName($manyToOneAnnot->targetEntity), '\\'); + $targetEntity = $classMetadata->fullyQualifiedClassName($manyToOneAnnot->targetEntity); $assocMetadata->setSourceEntity($className); $assocMetadata->setTargetEntity($targetEntity); @@ -853,7 +853,7 @@ private function convertReflectionPropertyToOneToManyAssociationMetadata( } $assocMetadata = new Mapping\OneToManyAssociationMetadata($fieldName); - $targetEntity = ltrim($classMetadata->fullyQualifiedClassName($oneToManyAnnot->targetEntity), '\\'); + $targetEntity = $classMetadata->fullyQualifiedClassName($oneToManyAnnot->targetEntity); $assocMetadata->setSourceEntity($className); $assocMetadata->setTargetEntity($targetEntity); @@ -914,7 +914,7 @@ private function convertReflectionPropertyToManyToManyAssociationMetadata( } $assocMetadata = new Mapping\ManyToManyAssociationMetadata($fieldName); - $targetEntity = ltrim($classMetadata->fullyQualifiedClassName($manyToManyAnnot->targetEntity), '\\'); + $targetEntity = $classMetadata->fullyQualifiedClassName($manyToManyAnnot->targetEntity); $assocMetadata->setSourceEntity($className); $assocMetadata->setTargetEntity($targetEntity); diff --git a/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php b/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php index e9e3b855193..95bab9ebe97 100644 --- a/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php @@ -64,7 +64,7 @@ abstract class EntityClassMetadata extends ComponentMetadata protected $subClasses = []; /** - * READ-ONLY: The named queries allowed to be called directly from Repository. + * The named queries allowed to be called directly from Repository. * * @var array */ @@ -285,6 +285,23 @@ public function getSubClassIterator() : \Iterator return $iterator; } + /** + * Adds a named query. + * + * @param string $name + * @param string $dqlQuery + * + * @throws MappingException + */ + public function addNamedQuery(string $name, string $dqlQuery) + { + if (isset($this->namedQueries[$name])) { + throw MappingException::duplicateQueryMapping($this->entityName, $name); + } + + $this->namedQueries[$name] = $dqlQuery; + } + /** * Gets a named query. * @@ -346,18 +363,18 @@ public function getNamedNativeQueries() : array /** * Gets the result set mapping. * - * @see ClassMetadata::$sqlResultSetMappings - * * @param string $name The result set mapping name. * * @return array * * @throws MappingException + * + * @todo guilhermeblanco This should return an object instead */ - public function getSqlResultSetMapping($name) + public function getSqlResultSetMapping($name) : array { - if ( ! isset($this->sqlResultSetMappings[$name])) { - throw MappingException::resultMappingNotFound($this->name, $name); + if (! isset($this->sqlResultSetMappings[$name])) { + throw MappingException::resultMappingNotFound($this->entityName, $name); } return $this->sqlResultSetMappings[$name]; @@ -368,7 +385,7 @@ public function getSqlResultSetMapping($name) * * @return array */ - public function getSqlResultSetMappings() + public function getSqlResultSetMappings() : array { return $this->sqlResultSetMappings; } diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index 7bce839fc1b..92d78b15923 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -281,6 +281,11 @@ public function addNamedNativeQueryMapping(ClassMetadata $class, array $queryMap */ public function addNamedNativeQueryResultClassMapping(ClassMetadata $class, $resultClassName) { + $resultClassName = ($resultClassName === '__CLASS__') + ? $class->getClassName() + : $resultClassName + ; + $classMetadata = $this->em->getClassMetadata($resultClassName); $platform = $this->em->getConnection()->getDatabasePlatform(); $alias = 'e0'; @@ -330,7 +335,12 @@ public function addNamedNativeQueryResultSetMapping(ClassMetadata $class, $resul if (isset($resultMapping['entities'])) { foreach ($resultMapping['entities'] as $key => $entityMapping) { - $classMetadata = $this->em->getClassMetadata($entityMapping['entityClass']); + $entityMapping['entityClass'] = ($entityMapping['entityClass'] === '__CLASS__') + ? $class->getClassName() + : $entityMapping['entityClass'] + ; + + $classMetadata = $this->em->getClassMetadata($entityMapping['entityClass']); if ($class->getClassName() === $classMetadata->getClassName()) { $this->addEntityResult($classMetadata->getClassName(), $rootAlias); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index 6da7c01e804..9c4b012c6ba 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -101,7 +101,7 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage $this->formatField('Parent classes', $metadata->parentClasses), $this->formatField('Sub classes', $metadata->subClasses), $this->formatField('Embedded classes', $metadata->subClasses), - $this->formatField('Named queries', $metadata->namedQueries), + $this->formatField('Named queries', $metadata->getNamedQueries()), $this->formatField('Named native queries', $metadata->namedNativeQueries), $this->formatField('SQL result set mappings', $metadata->sqlResultSetMappings), $this->formatField('Identifier', $metadata->identifier), diff --git a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php index ab7ea5b0cef..c311390e191 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php @@ -196,41 +196,41 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $metadata->addSqlResultSetMapping( [ - 'name' => 'mapping-find-all', - 'columns' => [], - 'entities' => [ - [ - 'fields' => [ - [ - 'name' => 'id', - 'column' => 'id', - ], - [ - 'name' => 'city', - 'column' => 'city', - ], - [ - 'name' => 'country', - 'column' => 'country', - ], + 'name' => 'mapping-find-all', + 'columns' => [], + 'entities' => [ + [ + 'fields' => [ + [ + 'name' => 'id', + 'column' => 'id', + ], + [ + 'name' => 'city', + 'column' => 'city', + ], + [ + 'name' => 'country', + 'column' => 'country', + ], + ], + 'entityClass' => CmsAddress::class, + ], ], - 'entityClass' => CmsAddress::class, - ], - ], ] ); $metadata->addSqlResultSetMapping( [ - 'name' => 'mapping-without-fields', - 'columns' => [], - 'entities' => [ - [ - 'entityClass' => CmsAddress::class, - 'fields' => [] + 'name' => 'mapping-without-fields', + 'columns' => [], + 'entities' => [ + [ + 'entityClass' => '__CLASS__', + 'fields' => [] + ] ] ] - ] ); $metadata->addSqlResultSetMapping( diff --git a/tests/Doctrine/Tests/Models/CMS/CmsUser.php b/tests/Doctrine/Tests/Models/CMS/CmsUser.php index 36416221a8c..b64c34b43cc 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsUser.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsUser.php @@ -362,7 +362,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) 'column' => 'a_id', ], ], - 'entityClass' => CmsUser::class, + 'entityClass' => '__CLASS__', 'discriminatorColumn' => null ], ], @@ -451,7 +451,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) 'column' => 'u_status', ] ], - 'entityClass' => CmsUser::class, + 'entityClass' => '__CLASS__', 'discriminatorColumn' => null, ], [ diff --git a/tests/Doctrine/Tests/Models/Company/CompanyPerson.php b/tests/Doctrine/Tests/Models/Company/CompanyPerson.php index 985325e6d8c..99411ec6876 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyPerson.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyPerson.php @@ -160,7 +160,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) 'column' => 'name', ], ], - 'entityClass' => CompanyPerson::class, + 'entityClass' => '__CLASS__', 'discriminatorColumn' => 'discriminator', ], ], diff --git a/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php b/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php index 67db17f38db..deb29912123 100644 --- a/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php @@ -4,6 +4,7 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\DBAL\Types\Type as DBALType; +use Doctrine\ORM\AbstractQuery; use Doctrine\ORM\Internal\Hydration\HydrationException; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\Query\Parameter; @@ -716,54 +717,45 @@ public function testMultipleEntityResults() /** * @group DDC-1663 + * @dataProvider provideDataForNamedNativeQueryInheritance + * + * @param $className */ - public function testNamedNativeQueryInheritance() + public function testNamedNativeQueryInheritance($className) { - $contractMetadata = $this->em->getClassMetadata(CompanyContract::class); - $flexMetadata = $this->em->getClassMetadata(CompanyFlexContract::class); + $classMetadata = $this->em->getClassMetadata($className); + $repository = $this->em->getRepository($className); + $namedNativeQueries = $classMetadata->getNamedNativeQueries(); + $sqlResultSetMappings = $classMetadata->getSqlResultSetMappings(); - $contractQueries = $contractMetadata->getNamedNativeQueries(); - $flexQueries = $flexMetadata->getNamedNativeQueries(); + // Native Query Mappings + self::assertEquals('all-contracts', $namedNativeQueries['all-contracts']['name']); + self::assertEquals('__CLASS__', $namedNativeQueries['all-contracts']['resultClass']); - $contractMappings = $contractMetadata->getSqlResultSetMappings(); - $flexMappings = $flexMetadata->getSqlResultSetMappings(); + self::assertEquals('all', $namedNativeQueries['all']['name']); + self::assertEquals('__CLASS__', $namedNativeQueries['all']['resultClass']); - // contract queries - self::assertEquals('all-contracts', $contractQueries['all-contracts']['name']); - self::assertEquals(CompanyContract::class, $contractQueries['all-contracts']['resultClass']); + // SQL ResultSet Mappings + self::assertEquals('mapping-all-contracts', $sqlResultSetMappings['mapping-all-contracts']['name']); + self::assertEquals('__CLASS__', $sqlResultSetMappings['mapping-all-contracts']['entities'][0]['entityClass']); - self::assertEquals('all', $contractQueries['all']['name']); - self::assertEquals(CompanyContract::class, $contractQueries['all']['resultClass']); + self::assertEquals('mapping-all', $sqlResultSetMappings['mapping-all']['name']); + self::assertEquals('__CLASS__', $sqlResultSetMappings['mapping-all-contracts']['entities'][0]['entityClass']); + // Resolved Native Query Mappings + $allContractsNativeNamedQuery = $repository->createNativeNamedQuery('all-contracts'); + $allNativeNamedQuery = $repository->createNativeNamedQuery('all'); - // flex contract queries - self::assertEquals('all-contracts', $flexQueries['all-contracts']['name']); - self::assertEquals(CompanyFlexContract::class, $flexQueries['all-contracts']['resultClass']); - - self::assertEquals('all-flex', $flexQueries['all-flex']['name']); - self::assertEquals(CompanyFlexContract::class, $flexQueries['all-flex']['resultClass']); - - self::assertEquals('all', $flexQueries['all']['name']); - self::assertEquals(CompanyFlexContract::class, $flexQueries['all']['resultClass']); - - - // contract result mapping - self::assertEquals('mapping-all-contracts', $contractMappings['mapping-all-contracts']['name']); - self::assertEquals(CompanyContract::class, $contractMappings['mapping-all-contracts']['entities'][0]['entityClass']); - - self::assertEquals('mapping-all', $contractMappings['mapping-all']['name']); - self::assertEquals(CompanyContract::class, $contractMappings['mapping-all-contracts']['entities'][0]['entityClass']); - - // flex contract result mapping - self::assertEquals('mapping-all-contracts', $flexMappings['mapping-all-contracts']['name']); - self::assertEquals(CompanyFlexContract::class, $flexMappings['mapping-all-contracts']['entities'][0]['entityClass']); - - self::assertEquals('mapping-all', $flexMappings['mapping-all']['name']); - self::assertEquals(CompanyFlexContract::class, $flexMappings['mapping-all']['entities'][0]['entityClass']); - - self::assertEquals('mapping-all-flex', $flexMappings['mapping-all-flex']['name']); - self::assertEquals(CompanyFlexContract::class, $flexMappings['mapping-all-flex']['entities'][0]['entityClass']); + self::assertEquals($className, $this->getResultSetMapping($allContractsNativeNamedQuery)->getClassName('e0')); + self::assertEquals($className, $this->getResultSetMapping($allNativeNamedQuery)->getClassName('e0')); + } + public function provideDataForNamedNativeQueryInheritance() + { + return [ + [CompanyContract::class], + [CompanyFlexContract::class], + ]; } /** @@ -857,4 +849,14 @@ public function testGenerateSelectClauseWithDiscriminatorColumn() self::assertSQLEquals('u1.id as id, c1.discr as discr', $selectClause); } + + protected function getResultSetMapping(AbstractQuery $query) : ResultSetMapping + { + $reflClass = new \ReflectionClass($query); + $reflMethod = $reflClass->getMethod('getResultSetMapping'); + + $reflMethod->setAccessible(true); + + return $reflMethod->invoke($query); + } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index dada572b5c1..83a88600fc9 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -650,25 +650,27 @@ public function testNamedQuery() */ public function testNamedNativeQuery() { - $class = $this->createClassMetadata(CmsAddress::class); - //named native query + // named native query self::assertCount(3, $class->namedNativeQueries); self::assertArrayHasKey('find-all', $class->namedNativeQueries); self::assertArrayHasKey('find-by-id', $class->namedNativeQueries); $findAllQuery = $class->getNamedNativeQuery('find-all'); + self::assertEquals('find-all', $findAllQuery['name']); self::assertEquals('mapping-find-all', $findAllQuery['resultSetMapping']); self::assertEquals('SELECT id, country, city FROM cms_addresses', $findAllQuery['query']); $findByIdQuery = $class->getNamedNativeQuery('find-by-id'); + self::assertEquals('find-by-id', $findByIdQuery['name']); self::assertEquals(CmsAddress::class,$findByIdQuery['resultClass']); self::assertEquals('SELECT * FROM cms_addresses WHERE id = ?', $findByIdQuery['query']); $countQuery = $class->getNamedNativeQuery('count'); + self::assertEquals('count', $countQuery['name']); self::assertEquals('mapping-count', $countQuery['resultSetMapping']); self::assertEquals('SELECT COUNT(*) AS count FROM cms_addresses', $countQuery['query']); @@ -680,6 +682,7 @@ public function testNamedNativeQuery() self::assertArrayHasKey('mapping-without-fields', $class->sqlResultSetMappings); $findAllMapping = $class->getSqlResultSetMapping('mapping-find-all'); + self::assertEquals('mapping-find-all', $findAllMapping['name']); self::assertEquals(CmsAddress::class, $findAllMapping['entities'][0]['entityClass']); self::assertEquals(['name'=>'id','column'=>'id'], $findAllMapping['entities'][0]['fields'][0]); @@ -687,11 +690,13 @@ public function testNamedNativeQuery() self::assertEquals(['name'=>'country','column'=>'country'], $findAllMapping['entities'][0]['fields'][2]); $withoutFieldsMapping = $class->getSqlResultSetMapping('mapping-without-fields'); + self::assertEquals('mapping-without-fields', $withoutFieldsMapping['name']); - self::assertEquals(CmsAddress::class, $withoutFieldsMapping['entities'][0]['entityClass']); + self::assertEquals('__CLASS__', $withoutFieldsMapping['entities'][0]['entityClass']); self::assertEquals([], $withoutFieldsMapping['entities'][0]['fields']); $countMapping = $class->getSqlResultSetMapping('mapping-count'); + self::assertEquals('mapping-count', $countMapping['name']); self::assertEquals(['name'=>'count'], $countMapping['columns'][0]); @@ -709,9 +714,12 @@ public function testSqlResultSetMapping() self::assertCount(4, $userMetadata->getSqlResultSetMappings()); $mapping = $userMetadata->getSqlResultSetMapping('mappingJoinedAddress'); + self::assertEquals([],$mapping['columns']); self::assertEquals('mappingJoinedAddress', $mapping['name']); + self::assertNull($mapping['entities'][0]['discriminatorColumn']); + self::assertEquals(['name'=>'id','column'=>'id'], $mapping['entities'][0]['fields'][0]); self::assertEquals(['name'=>'name','column'=>'name'], $mapping['entities'][0]['fields'][1]); self::assertEquals(['name'=>'status','column'=>'status'], $mapping['entities'][0]['fields'][2]); @@ -719,12 +727,15 @@ public function testSqlResultSetMapping() self::assertEquals(['name'=>'address.city','column'=>'city'], $mapping['entities'][0]['fields'][4]); self::assertEquals(['name'=>'address.country','column'=>'country'], $mapping['entities'][0]['fields'][5]); self::assertEquals(['name'=>'address.id','column'=>'a_id'], $mapping['entities'][0]['fields'][6]); - self::assertEquals($userMetadata->getClassName(), $mapping['entities'][0]['entityClass']); + self::assertEquals('__CLASS__', $mapping['entities'][0]['entityClass']); $mapping = $userMetadata->getSqlResultSetMapping('mappingJoinedPhonenumber'); + self::assertEquals([],$mapping['columns']); self::assertEquals('mappingJoinedPhonenumber', $mapping['name']); + self::assertNull($mapping['entities'][0]['discriminatorColumn']); + self::assertEquals(['name'=>'id','column'=>'id'], $mapping['entities'][0]['fields'][0]); self::assertEquals(['name'=>'name','column'=>'name'], $mapping['entities'][0]['fields'][1]); self::assertEquals(['name'=>'status','column'=>'status'], $mapping['entities'][0]['fields'][2]); @@ -732,23 +743,31 @@ public function testSqlResultSetMapping() self::assertEquals($userMetadata->getClassName(), $mapping['entities'][0]['entityClass']); $mapping = $userMetadata->getSqlResultSetMapping('mappingUserPhonenumberCount'); + self::assertEquals(['name'=>'numphones'],$mapping['columns'][0]); self::assertEquals('mappingUserPhonenumberCount', $mapping['name']); + self::assertNull($mapping['entities'][0]['discriminatorColumn']); + self::assertEquals(['name'=>'id','column'=>'id'], $mapping['entities'][0]['fields'][0]); self::assertEquals(['name'=>'name','column'=>'name'], $mapping['entities'][0]['fields'][1]); self::assertEquals(['name'=>'status','column'=>'status'], $mapping['entities'][0]['fields'][2]); self::assertEquals($userMetadata->getClassName(), $mapping['entities'][0]['entityClass']); $mapping = $userMetadata->getSqlResultSetMapping('mappingMultipleJoinsEntityResults'); + self::assertEquals(['name'=>'numphones'],$mapping['columns'][0]); self::assertEquals('mappingMultipleJoinsEntityResults', $mapping['name']); + self::assertNull($mapping['entities'][0]['discriminatorColumn']); + self::assertEquals(['name'=>'id','column'=>'u_id'], $mapping['entities'][0]['fields'][0]); self::assertEquals(['name'=>'name','column'=>'u_name'], $mapping['entities'][0]['fields'][1]); self::assertEquals(['name'=>'status','column'=>'u_status'], $mapping['entities'][0]['fields'][2]); - self::assertEquals($userMetadata->getClassName(), $mapping['entities'][0]['entityClass']); + self::assertEquals('__CLASS__', $mapping['entities'][0]['entityClass']); + self::assertNull($mapping['entities'][1]['discriminatorColumn']); + self::assertEquals(['name'=>'id','column'=>'a_id'], $mapping['entities'][1]['fields'][0]); self::assertEquals(['name'=>'zip','column'=>'a_zip'], $mapping['entities'][1]['fields'][1]); self::assertEquals(['name'=>'country','column'=>'a_country'], $mapping['entities'][1]['fields'][2]); @@ -761,10 +780,12 @@ public function testSqlResultSetMapping() self::assertEquals([], $mapping['columns']); self::assertEquals('mappingFetchAll', $mapping['name']); - self::assertEquals('discriminator', $mapping['entities'][0]['discriminatorColumn']); + + self::assertEquals('discriminator', $mapping['entities'][0]['discriminatorColumn']); + self::assertEquals(['name'=>'id','column'=>'id'], $mapping['entities'][0]['fields'][0]); self::assertEquals(['name'=>'name','column'=>'name'], $mapping['entities'][0]['fields'][1]); - self::assertEquals($personMetadata->getClassName(), $mapping['entities'][0]['entityClass']); + self::assertEquals('__CLASS__', $mapping['entities'][0]['entityClass']); } /* diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 7640043bac7..be9f1b1cca2 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -846,14 +846,16 @@ public function testRetrieveOfNamedNativeQuery() ); $mapping = $cm->getNamedNativeQuery('find-all'); + self::assertEquals('SELECT * FROM cms_users', $mapping['query']); self::assertEquals('result-mapping-name', $mapping['resultSetMapping']); self::assertEquals(CMS\CmsUser::class, $mapping['resultClass']); $mapping = $cm->getNamedNativeQuery('find-by-id'); + self::assertEquals('SELECT * FROM cms_users WHERE id = ?', $mapping['query']); self::assertEquals('result-mapping-name', $mapping['resultSetMapping']); - self::assertEquals(CMS\CmsUser::class, $mapping['resultClass']); + self::assertEquals('__CLASS__', $mapping['resultClass']); } /** @@ -901,7 +903,7 @@ public function testRetrieveOfSqlResultSetMapping() $mapping = $cm->getSqlResultSetMapping('find-all'); - self::assertEquals(CMS\CmsUser::class, $mapping['entities'][0]['entityClass']); + self::assertEquals('__CLASS__', $mapping['entities'][0]['entityClass']); self::assertEquals(['name'=>'id','column'=>'id'], $mapping['entities'][0]['fields'][0]); self::assertEquals(['name'=>'name','column'=>'name'], $mapping['entities'][0]['fields'][1]); @@ -1284,7 +1286,7 @@ public function testInvalidPropertyAttributeOverrideNameException() * @group DDC-1955 * * @expectedException \Doctrine\ORM\Mapping\MappingException - * @expectedExceptionMessage Entity Listener "\InvalidClassName" declared on "Doctrine\Tests\Models\CMS\CmsUser" not found. + * @expectedExceptionMessage Entity Listener "InvalidClassName" declared on "Doctrine\Tests\Models\CMS\CmsUser" not found. */ public function testInvalidEntityListenerClassException() { @@ -1298,7 +1300,7 @@ public function testInvalidEntityListenerClassException() * @group DDC-1955 * * @expectedException \Doctrine\ORM\Mapping\MappingException - * @expectedExceptionMessage Entity Listener "\Doctrine\Tests\Models\Company\CompanyContractListener" declared on "Doctrine\Tests\Models\CMS\CmsUser" has no method "invalidMethod". + * @expectedExceptionMessage Entity Listener "Doctrine\Tests\Models\Company\CompanyContractListener" declared on "Doctrine\Tests\Models\CMS\CmsUser" has no method "invalidMethod". */ public function testInvalidEntityListenerMethodException() { diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php index f782330b609..976f93fa491 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php @@ -101,7 +101,7 @@ 'columns' => [], 'entities' => [ [ - 'entityClass' => CmsAddress::class, + 'entityClass' => '__CLASS__', 'fields' => [] ] ] diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php index a56e6a325c4..7289556278d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php @@ -93,7 +93,7 @@ 'column' => 'a_id', ], ], - 'entityClass' => CmsUser::class, + 'entityClass' => '__CLASS__', 'discriminatorColumn' => null ], ], @@ -182,7 +182,7 @@ 'column' => 'u_status', ] ], - 'entityClass' => CmsUser::class, + 'entityClass' => '__CLASS__', 'discriminatorColumn' => null, ], [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php index b0404af24f1..11e7640406c 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php @@ -41,7 +41,7 @@ 'column' => 'name', ], ], - 'entityClass' => CompanyPerson::class, + 'entityClass' => '__CLASS__', 'discriminatorColumn' => 'discriminator', ], ], diff --git a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.CMS.CmsAddress.dcm.xml b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.CMS.CmsAddress.dcm.xml index 7e7bd5aaa2f..1ca7a2fad25 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.CMS.CmsAddress.dcm.xml +++ b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.CMS.CmsAddress.dcm.xml @@ -4,7 +4,7 @@ http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> - + @@ -33,7 +33,7 @@ - + @@ -55,4 +55,4 @@ - \ No newline at end of file + From e341491093b136be279a35283a06d2a9b989bbf4 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 24 Jul 2017 22:53:53 -0400 Subject: [PATCH 173/275] Simplified logic and stored information around named native query. --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 24 ++++------ .../ORM/Mapping/ClassMetadataFactory.php | 4 +- .../ORM/Mapping/Driver/AnnotationDriver.php | 8 ++-- .../Mapping/Driver/NewAnnotationDriver.php | 14 +++--- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 8 ++-- lib/Doctrine/ORM/Mapping/MappingException.php | 21 --------- .../ORM/Query/ResultSetMappingBuilder.php | 22 +++++++--- .../Doctrine/Tests/Models/CMS/CmsAddress.php | 12 ++--- tests/Doctrine/Tests/Models/CMS/CmsUser.php | 36 +++++++-------- .../Models/Company/CompanyFlexContract.php | 2 +- .../Tests/Models/Company/CompanyPerson.php | 12 ++--- .../Tests/ORM/Functional/NativeQueryTest.php | 10 ++--- .../ORM/Hydration/ResultSetMappingTest.php | 18 ++++---- .../ORM/Mapping/AbstractMappingDriverTest.php | 6 --- .../Tests/ORM/Mapping/ClassMetadataTest.php | 44 +++++++++---------- .../Doctrine.Tests.Models.CMS.CmsAddress.php | 18 ++++---- .../php/Doctrine.Tests.Models.CMS.CmsUser.php | 36 +++++++-------- ...ine.Tests.Models.Company.CompanyPerson.php | 12 ++--- 18 files changed, 141 insertions(+), 166 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 56e4d23bc4a..e819aaefed2 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1627,35 +1627,29 @@ public function addNamedQuery(string $name, string $query) * INTERNAL: * Adds a named native query to this class. * - * @param array $queryMapping + * @param string $name + * @param string $query + * @param array $queryMapping * * @return void * * @throws MappingException */ - public function addNamedNativeQuery(array $queryMapping) + public function addNamedNativeQuery(string $name, string $query, array $queryMapping) { - if (!isset($queryMapping['name'])) { - throw MappingException::nameIsMandatoryForQueryMapping($this->name); - } - - if (isset($this->namedNativeQueries[$queryMapping['name']])) { - throw MappingException::duplicateQueryMapping($this->name, $queryMapping['name']); - } - - if (!isset($queryMapping['query'])) { - throw MappingException::emptyQueryMapping($this->name, $queryMapping['name']); + if (isset($this->namedNativeQueries[$name])) { + throw MappingException::duplicateQueryMapping($this->name, $name); } - if (!isset($queryMapping['resultClass']) && !isset($queryMapping['resultSetMapping'])) { - throw MappingException::missingQueryMapping($this->name, $queryMapping['name']); + if (! isset($queryMapping['resultClass']) && ! isset($queryMapping['resultSetMapping'])) { + throw MappingException::missingQueryMapping($this->name, $name); } if (isset($queryMapping['resultClass']) && $queryMapping['resultClass'] !== '__CLASS__') { $queryMapping['resultClass'] = $this->fullyQualifiedClassName($queryMapping['resultClass']); } - $this->namedNativeQueries[$queryMapping['name']] = $queryMapping; + $this->namedNativeQueries[$name] = array_merge(['query' => $query], $queryMapping); } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 753a91def57..2c008b20f19 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -569,9 +569,9 @@ private function addInheritedNamedNativeQueries(ClassMetadata $subClass, ClassMe } $subClass->addNamedNativeQuery( + $name, + $query['query'], [ - 'name' => $query['name'], - 'query' => $query['query'], 'resultSetMapping' => $query['resultSetMapping'], 'resultClass' => $query['resultClass'], ] diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index ec8929b2037..413096414f1 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -124,11 +124,11 @@ public function loadMetadataForClass($className, ClassMetadataInterface $metadat foreach ($namedNativeQueriesAnnot->value as $namedNativeQuery) { $metadata->addNamedNativeQuery( + $namedNativeQuery->name, + $namedNativeQuery->query, [ - 'name' => $namedNativeQuery->name, - 'query' => $namedNativeQuery->query, - 'resultClass' => $namedNativeQuery->resultClass, - 'resultSetMapping' => $namedNativeQuery->resultSetMapping, + 'resultClass' => $namedNativeQuery->resultClass, + 'resultSetMapping' => $namedNativeQuery->resultSetMapping, ] ); } diff --git a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php index 5a78eae1025..48eabd447cf 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php @@ -257,12 +257,14 @@ private function convertClassAnnotationsToEntityClassMetadata( $namedNativeQueriesAnnot = $classAnnotations[Annotation\NamedNativeQueries::class]; foreach ($namedNativeQueriesAnnot->value as $namedNativeQuery) { - $classMetadata->addNamedNativeQuery([ - 'name' => $namedNativeQuery->name, - 'query' => $namedNativeQuery->query, - 'resultClass' => $namedNativeQuery->resultClass, - 'resultSetMapping' => $namedNativeQuery->resultSetMapping, - ]); + $classMetadata->addNamedNativeQuery( + $namedNativeQuery->name, + $namedNativeQuery->query, + [ + 'resultClass' => $namedNativeQuery->resultClass, + 'resultSetMapping' => $namedNativeQuery->resultSetMapping, + ] + ); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index d2382973e0a..23e51552a41 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -163,11 +163,11 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) if (isset($xmlRoot->{'named-native-queries'})) { foreach ($xmlRoot->{'named-native-queries'}->{'named-native-query'} as $nativeQueryElement) { $metadata->addNamedNativeQuery( + isset($nativeQueryElement['name']) ? (string) $nativeQueryElement['name'] : null, + isset($nativeQueryElement->query) ? (string) $nativeQueryElement->query : null, [ - 'name' => isset($nativeQueryElement['name']) ? (string) $nativeQueryElement['name'] : null, - 'query' => isset($nativeQueryElement->query) ? (string) $nativeQueryElement->query : null, - 'resultClass' => isset($nativeQueryElement['result-class']) ? (string) $nativeQueryElement['result-class'] : null, - 'resultSetMapping' => isset($nativeQueryElement['result-set-mapping']) ? (string) $nativeQueryElement['result-set-mapping'] : null, + 'resultClass' => isset($nativeQueryElement['result-class']) ? (string) $nativeQueryElement['result-class'] : null, + 'resultSetMapping' => isset($nativeQueryElement['result-set-mapping']) ? (string) $nativeQueryElement['result-set-mapping'] : null, ] ); } diff --git a/lib/Doctrine/ORM/Mapping/MappingException.php b/lib/Doctrine/ORM/Mapping/MappingException.php index 87cf4ccde3c..f42c34b4b33 100644 --- a/lib/Doctrine/ORM/Mapping/MappingException.php +++ b/lib/Doctrine/ORM/Mapping/MappingException.php @@ -211,27 +211,6 @@ public static function resultMappingNotFound($className, $resultName) return new self("No result set mapping found named '$resultName' on class '$className'."); } - /** - * @param string $entity - * @param string $queryName - * - * @return MappingException - */ - public static function emptyQueryMapping($entity, $queryName) - { - return new self('Query named "'.$queryName.'" in "'.$entity.'" could not be empty.'); - } - - /** - * @param string $className - * - * @return MappingException - */ - public static function nameIsMandatoryForQueryMapping($className) - { - return new self("Query name on entity class '$className' is not defined."); - } - /** * @param string $entity * @param string $queryName diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index 92d78b15923..b56676d2c5f 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -393,16 +393,19 @@ public function addNamedNativeQueryResultSetMapping(ClassMetadata $class, $resul */ public function addNamedNativeQueryEntityResultMapping(ClassMetadata $classMetadata, array $entityMapping, $alias) { - if (isset($entityMapping['discriminatorColumn']) && $entityMapping['discriminatorColumn']) { + $platform = $this->em->getConnection()->getDatabasePlatform(); + + // Always fetch discriminator column. It's required for Proxy loading. We only adjust naming if provided + if ($classMetadata->discriminatorColumn) { $discrColumn = $classMetadata->discriminatorColumn; - $discrColumnName = $entityMapping['discriminatorColumn']; + $discrColumnName = $entityMapping['discriminatorColumn'] ?? $discrColumn->getColumnName(); $discrColumnType = $discrColumn->getType(); $this->setDiscriminatorColumn($alias, $discrColumnName); $this->addMetaResult($alias, $discrColumnName, $discrColumnName, false, $discrColumnType); } - if (isset($entityMapping['fields']) && !empty($entityMapping['fields'])) { + if (isset($entityMapping['fields']) && ! empty($entityMapping['fields'])) { foreach ($entityMapping['fields'] as $field) { $fieldName = $field['name']; $relation = null; @@ -442,12 +445,19 @@ public function addNamedNativeQueryEntityResultMapping(ClassMetadata $classMetad } } } else { - foreach ($classMetadata->getProperties() as $property) { - if (! ($property instanceof FieldMetadata)) { + foreach ($classMetadata->fieldNames as $columnName => $propertyName) { + $property = $classMetadata->getProperty($propertyName); + $columnAlias = $platform->getSQLResultCasing($columnName); + + if ($property instanceof FieldMetadata) { + $this->addFieldResult($alias, $columnAlias, $propertyName); + continue; } - $this->addFieldResult($alias, $property->getColumnName(), $property->getName()); + $columnType = PersisterHelper::getTypeOfColumn($columnName, $classMetadata, $this->em); + + $this->addMetaResult($alias, $columnAlias, $columnName, $property->isPrimaryKey(), $columnType); } } diff --git a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php index c311390e191..64bd395a9d9 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php @@ -171,25 +171,25 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $metadata->addProperty($association); $metadata->addNamedNativeQuery( + 'find-all', + 'SELECT id, country, city FROM cms_addresses', [ - 'name' => 'find-all', - 'query' => 'SELECT id, country, city FROM cms_addresses', 'resultSetMapping' => 'mapping-find-all', ] ); $metadata->addNamedNativeQuery( + 'find-by-id', + 'SELECT * FROM cms_addresses WHERE id = ?', [ - 'name' => 'find-by-id', - 'query' => 'SELECT * FROM cms_addresses WHERE id = ?', 'resultClass' => CmsAddress::class, ] ); $metadata->addNamedNativeQuery( + 'count', + 'SELECT COUNT(*) AS count FROM cms_addresses', [ - 'name' => 'count', - 'query' => 'SELECT COUNT(*) AS count FROM cms_addresses', 'resultSetMapping' => 'mapping-count', ] ); diff --git a/tests/Doctrine/Tests/Models/CMS/CmsUser.php b/tests/Doctrine/Tests/Models/CMS/CmsUser.php index b64c34b43cc..d7b6aa89d40 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsUser.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsUser.php @@ -279,50 +279,50 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $metadata->setTable($tableMetadata); $metadata->addNamedNativeQuery( + 'fetchIdAndUsernameWithResultClass', + 'SELECT id, username FROM cms_users WHERE username = ?', [ - 'name' => 'fetchIdAndUsernameWithResultClass', - 'query' => 'SELECT id, username FROM cms_users WHERE username = ?', - 'resultClass' => CmsUser::class, + 'resultClass' => CmsUser::class, ] ); $metadata->addNamedNativeQuery( + 'fetchAllColumns', + 'SELECT * FROM cms_users WHERE username = ?', [ - 'name' => 'fetchAllColumns', - 'query' => 'SELECT * FROM cms_users WHERE username = ?', - 'resultClass' => CmsUser::class, + 'resultClass' => CmsUser::class, ] ); $metadata->addNamedNativeQuery( + 'fetchJoinedAddress', + 'SELECT u.id, u.name, u.status, a.id AS a_id, a.country, a.zip, a.city FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?', [ - 'name' => 'fetchJoinedAddress', - 'query' => 'SELECT u.id, u.name, u.status, a.id AS a_id, a.country, a.zip, a.city FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?', - 'resultSetMapping' => 'mappingJoinedAddress', + 'resultSetMapping' => 'mappingJoinedAddress', ] ); $metadata->addNamedNativeQuery( + 'fetchJoinedPhonenumber', + 'SELECT id, name, status, phonenumber AS number FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ?', [ - 'name' => 'fetchJoinedPhonenumber', - 'query' => 'SELECT id, name, status, phonenumber AS number FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ?', - 'resultSetMapping' => 'mappingJoinedPhonenumber', + 'resultSetMapping' => 'mappingJoinedPhonenumber', ] ); $metadata->addNamedNativeQuery( + 'fetchUserPhonenumberCount', + 'SELECT id, name, status, COUNT(phonenumber) AS numphones FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username IN (?) GROUP BY id, name, status, username ORDER BY username', [ - 'name' => 'fetchUserPhonenumberCount', - 'query' => 'SELECT id, name, status, COUNT(phonenumber) AS numphones FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username IN (?) GROUP BY id, name, status, username ORDER BY username', - 'resultSetMapping' => 'mappingUserPhonenumberCount', + 'resultSetMapping' => 'mappingUserPhonenumberCount', ] ); $metadata->addNamedNativeQuery( + 'fetchMultipleJoinsEntityResults', + 'SELECT u.id AS u_id, u.name AS u_name, u.status AS u_status, a.id AS a_id, a.zip AS a_zip, a.country AS a_country, COUNT(p.phonenumber) AS numphones FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id INNER JOIN cms_phonenumbers p ON u.id = p.user_id GROUP BY u.id, u.name, u.status, u.username, a.id, a.zip, a.country ORDER BY u.username', [ - "name" => "fetchMultipleJoinsEntityResults", - "resultSetMapping" => "mappingMultipleJoinsEntityResults", - "query" => "SELECT u.id AS u_id, u.name AS u_name, u.status AS u_status, a.id AS a_id, a.zip AS a_zip, a.country AS a_country, COUNT(p.phonenumber) AS numphones FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id INNER JOIN cms_phonenumbers p ON u.id = p.user_id GROUP BY u.id, u.name, u.status, u.username, a.id, a.zip, a.country ORDER BY u.username" + 'resultSetMapping' => 'mappingMultipleJoinsEntityResults', ] ); diff --git a/tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php b/tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php index 89bd3ffd3c3..21269f8cf4b 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php @@ -40,7 +40,7 @@ * name = "mapping-all", * entities= { * @ORM\EntityResult( - * entityClass = "CompanyFlexContract", + * entityClass = "__CLASS__", * discriminatorColumn = "discr", * fields = { * @ORM\FieldResult("id"), diff --git a/tests/Doctrine/Tests/Models/Company/CompanyPerson.php b/tests/Doctrine/Tests/Models/Company/CompanyPerson.php index 99411ec6876..a2e7faea30e 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyPerson.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyPerson.php @@ -129,18 +129,18 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $metadata->setTable($tableMetadata); $metadata->addNamedNativeQuery( + 'fetchAllWithResultClass', + 'SELECT id, name, discr FROM company_persons ORDER BY name', [ - 'name' => 'fetchAllWithResultClass', - 'query' => 'SELECT id, name, discr FROM company_persons ORDER BY name', - 'resultClass' => CompanyPerson::class, + 'resultClass' => CompanyPerson::class, ] ); $metadata->addNamedNativeQuery( + 'fetchAllWithSqlResultSetMapping', + 'SELECT id, name, discr AS discriminator FROM company_persons ORDER BY name', [ - 'name' => 'fetchAllWithSqlResultSetMapping', - 'query' => 'SELECT id, name, discr AS discriminator FROM company_persons ORDER BY name', - 'resultSetMapping' => 'mappingFetchAll', + 'resultSetMapping' => 'mappingFetchAll', ] ); diff --git a/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php b/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php index deb29912123..25d0d26cb3d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php @@ -729,18 +729,18 @@ public function testNamedNativeQueryInheritance($className) $sqlResultSetMappings = $classMetadata->getSqlResultSetMappings(); // Native Query Mappings - self::assertEquals('all-contracts', $namedNativeQueries['all-contracts']['name']); + self::assertArrayHasKey('all-contracts', $namedNativeQueries); self::assertEquals('__CLASS__', $namedNativeQueries['all-contracts']['resultClass']); - self::assertEquals('all', $namedNativeQueries['all']['name']); + self::assertArrayHasKey('all', $namedNativeQueries); self::assertEquals('__CLASS__', $namedNativeQueries['all']['resultClass']); // SQL ResultSet Mappings - self::assertEquals('mapping-all-contracts', $sqlResultSetMappings['mapping-all-contracts']['name']); + self::assertArrayHasKey('mapping-all-contracts', $sqlResultSetMappings); self::assertEquals('__CLASS__', $sqlResultSetMappings['mapping-all-contracts']['entities'][0]['entityClass']); - self::assertEquals('mapping-all', $sqlResultSetMappings['mapping-all']['name']); - self::assertEquals('__CLASS__', $sqlResultSetMappings['mapping-all-contracts']['entities'][0]['entityClass']); + self::assertArrayHasKey('mapping-all', $sqlResultSetMappings); + self::assertEquals('__CLASS__', $sqlResultSetMappings['mapping-all']['entities'][0]['entityClass']); // Resolved Native Query Mappings $allContractsNativeNamedQuery = $repository->createNativeNamedQuery('all-contracts'); diff --git a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php index d5f79e86034..5e15bfd3c18 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php @@ -123,10 +123,10 @@ public function testAddNamedNativeQueryResultSetMapping() $cm->addProperty($association); $cm->addNamedNativeQuery( + 'find-all', + 'SELECT u.id AS user_id, e.id AS email_id, u.name, e.email, u.id + e.id AS scalarColumn FROM cms_users u INNER JOIN cms_emails e ON e.id = u.email_id', [ - 'name' => 'find-all', - 'query' => 'SELECT u.id AS user_id, e.id AS email_id, u.name, e.email, u.id + e.id AS scalarColumn FROM cms_users u INNER JOIN cms_emails e ON e.id = u.email_id', - 'resultSetMapping' => 'find-all', + 'resultSetMapping' => 'find-all', ] ); @@ -199,10 +199,10 @@ public function testAddNamedNativeQueryResultSetMappingWithoutFields() $cm->initializeReflection(new RuntimeReflectionService()); $cm->addNamedNativeQuery( + 'find-all', + 'SELECT u.id AS user_id, e.id AS email_id, u.name, e.email, u.id + e.id AS scalarColumn FROM cms_users u INNER JOIN cms_emails e ON e.id = u.email_id', [ - 'name' => 'find-all', - 'query' => 'SELECT u.id AS user_id, e.id AS email_id, u.name, e.email, u.id + e.id AS scalarColumn FROM cms_users u INNER JOIN cms_emails e ON e.id = u.email_id', - 'resultSetMapping' => 'find-all', + 'resultSetMapping' => 'find-all', ] ); @@ -249,10 +249,10 @@ public function testAddNamedNativeQueryResultClass() $cm->initializeReflection(new RuntimeReflectionService()); $cm->addNamedNativeQuery( + 'find-all', + 'SELECT * FROM cms_users', [ - 'name' => 'find-all', - 'resultClass' => '__CLASS__', - 'query' => 'SELECT * FROM cms_users', + 'resultClass' => '__CLASS__', ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 83a88600fc9..240d786253c 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -659,19 +659,16 @@ public function testNamedNativeQuery() $findAllQuery = $class->getNamedNativeQuery('find-all'); - self::assertEquals('find-all', $findAllQuery['name']); self::assertEquals('mapping-find-all', $findAllQuery['resultSetMapping']); self::assertEquals('SELECT id, country, city FROM cms_addresses', $findAllQuery['query']); $findByIdQuery = $class->getNamedNativeQuery('find-by-id'); - self::assertEquals('find-by-id', $findByIdQuery['name']); self::assertEquals(CmsAddress::class,$findByIdQuery['resultClass']); self::assertEquals('SELECT * FROM cms_addresses WHERE id = ?', $findByIdQuery['query']); $countQuery = $class->getNamedNativeQuery('count'); - self::assertEquals('count', $countQuery['name']); self::assertEquals('mapping-count', $countQuery['resultSetMapping']); self::assertEquals('SELECT COUNT(*) AS count FROM cms_addresses', $countQuery['query']); @@ -683,7 +680,6 @@ public function testNamedNativeQuery() $findAllMapping = $class->getSqlResultSetMapping('mapping-find-all'); - self::assertEquals('mapping-find-all', $findAllMapping['name']); self::assertEquals(CmsAddress::class, $findAllMapping['entities'][0]['entityClass']); self::assertEquals(['name'=>'id','column'=>'id'], $findAllMapping['entities'][0]['fields'][0]); self::assertEquals(['name'=>'city','column'=>'city'], $findAllMapping['entities'][0]['fields'][1]); @@ -691,13 +687,11 @@ public function testNamedNativeQuery() $withoutFieldsMapping = $class->getSqlResultSetMapping('mapping-without-fields'); - self::assertEquals('mapping-without-fields', $withoutFieldsMapping['name']); self::assertEquals('__CLASS__', $withoutFieldsMapping['entities'][0]['entityClass']); self::assertEquals([], $withoutFieldsMapping['entities'][0]['fields']); $countMapping = $class->getSqlResultSetMapping('mapping-count'); - self::assertEquals('mapping-count', $countMapping['name']); self::assertEquals(['name'=>'count'], $countMapping['columns'][0]); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index be9f1b1cca2..9b47d6b5a0b 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -828,20 +828,20 @@ public function testRetrieveOfNamedNativeQuery() $cm->initializeReflection(new RuntimeReflectionService()); $cm->addNamedNativeQuery( + 'find-all', + 'SELECT * FROM cms_users', [ - 'name' => 'find-all', - 'query' => 'SELECT * FROM cms_users', - 'resultSetMapping' => 'result-mapping-name', - 'resultClass' => CMS\CmsUser::class, + 'resultSetMapping' => 'result-mapping-name', + 'resultClass' => CMS\CmsUser::class, ] ); $cm->addNamedNativeQuery( + 'find-by-id', + 'SELECT * FROM cms_users WHERE id = ?', [ - 'name' => 'find-by-id', - 'query' => 'SELECT * FROM cms_users WHERE id = ?', - 'resultClass' => '__CLASS__', - 'resultSetMapping' => 'result-mapping-name', + 'resultClass' => '__CLASS__', + 'resultSetMapping' => 'result-mapping-name', ] ); @@ -946,11 +946,10 @@ public function testExistanceOfNamedNativeQuery() $cm->initializeReflection(new RuntimeReflectionService()); $cm->addNamedNativeQuery( + 'find-all', + 'SELECT * FROM cms_users', [ - 'name' => 'find-all', - 'query' => 'SELECT * FROM cms_users', - 'resultClass' => CMS\CmsUser::class, - 'resultSetMapping' => 'result-mapping-name' + 'resultClass' => CMS\CmsUser::class, ] ); @@ -984,11 +983,10 @@ public function testRetrievalOfNamedNativeQueries() self::assertEquals(0, count($cm->getNamedNativeQueries())); $cm->addNamedNativeQuery( + 'find-all', + 'SELECT * FROM cms_users', [ - 'name' => 'find-all', - 'query' => 'SELECT * FROM cms_users', - 'resultClass' => CMS\CmsUser::class, - 'resultSetMapping' => 'result-mapping-name' + 'resultClass' => CMS\CmsUser::class, ] ); @@ -1037,20 +1035,18 @@ public function testNamingCollisionNamedNativeQueryShouldThrowException() $cm->initializeReflection(new RuntimeReflectionService()); $cm->addNamedNativeQuery( + 'find-all', + 'SELECT * FROM cms_users', [ - 'name' => 'find-all', - 'query' => 'SELECT * FROM cms_users', - 'resultClass' => CMS\CmsUser::class, - 'resultSetMapping' => 'result-mapping-name' + 'resultClass' => CMS\CmsUser::class, ] ); $cm->addNamedNativeQuery( + 'find-all', + 'SELECT * FROM cms_users', [ - 'name' => 'find-all', - 'query' => 'SELECT * FROM cms_users', - 'resultClass' => CMS\CmsUser::class, - 'resultSetMapping' => 'result-mapping-name' + 'resultClass' => CMS\CmsUser::class, ] ); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php index 976f93fa491..cca39835800 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php @@ -45,26 +45,26 @@ $metadata->addProperty($association); $metadata->addNamedNativeQuery( + 'find-all', + 'SELECT id, country, city FROM cms_addresses', [ - 'name' => 'find-all', - 'query' => 'SELECT id, country, city FROM cms_addresses', - 'resultSetMapping' => 'mapping-find-all', + 'resultSetMapping' => 'mapping-find-all', ] ); $metadata->addNamedNativeQuery( + 'find-by-id', + 'SELECT * FROM cms_addresses WHERE id = ?', [ - 'name' => 'find-by-id', - 'query' => 'SELECT * FROM cms_addresses WHERE id = ?', - 'resultClass' => CmsAddress::class, + 'resultClass' => CmsAddress::class, ] ); $metadata->addNamedNativeQuery( + 'count', + 'SELECT COUNT(*) AS count FROM cms_addresses', [ - 'name' => 'count', - 'query' => 'SELECT COUNT(*) AS count FROM cms_addresses', - 'resultSetMapping' => 'mapping-count', + 'resultSetMapping' => 'mapping-count', ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php index 7289556278d..d78906a78e3 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php @@ -10,50 +10,50 @@ $metadata->setTable($tableMetadata); $metadata->addNamedNativeQuery( + 'fetchIdAndUsernameWithResultClass', + 'SELECT id, username FROM cms_users WHERE username = ?', [ - 'name' => 'fetchIdAndUsernameWithResultClass', - 'query' => 'SELECT id, username FROM cms_users WHERE username = ?', - 'resultClass' => CmsUser::class, + 'resultClass' => CmsUser::class, ] ); $metadata->addNamedNativeQuery( + 'fetchAllColumns', + 'SELECT * FROM cms_users WHERE username = ?', [ - 'name' => 'fetchAllColumns', - 'query' => 'SELECT * FROM cms_users WHERE username = ?', - 'resultClass' => CmsUser::class, + 'resultClass' => CmsUser::class, ] ); $metadata->addNamedNativeQuery( + 'fetchJoinedAddress', + 'SELECT u.id, u.name, u.status, a.id AS a_id, a.country, a.zip, a.city FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?', [ - 'name' => 'fetchJoinedAddress', - 'query' => 'SELECT u.id, u.name, u.status, a.id AS a_id, a.country, a.zip, a.city FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?', - 'resultSetMapping' => 'mappingJoinedAddress', + 'resultSetMapping' => 'mappingJoinedAddress', ] ); $metadata->addNamedNativeQuery( + 'fetchJoinedPhonenumber', + 'SELECT id, name, status, phonenumber AS number FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ?', [ - 'name' => 'fetchJoinedPhonenumber', - 'query' => 'SELECT id, name, status, phonenumber AS number FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ?', - 'resultSetMapping' => 'mappingJoinedPhonenumber', + 'resultSetMapping' => 'mappingJoinedPhonenumber', ] ); $metadata->addNamedNativeQuery( + 'fetchUserPhonenumberCount', + 'SELECT id, name, status, COUNT(phonenumber) AS numphones FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username IN (?) GROUP BY id, name, status, username ORDER BY username', [ - 'name' => 'fetchUserPhonenumberCount', - 'query' => 'SELECT id, name, status, COUNT(phonenumber) AS numphones FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username IN (?) GROUP BY id, name, status, username ORDER BY username', - 'resultSetMapping' => 'mappingUserPhonenumberCount', + 'resultSetMapping' => 'mappingUserPhonenumberCount', ] ); $metadata->addNamedNativeQuery( + 'fetchMultipleJoinsEntityResults', + 'SELECT u.id AS u_id, u.name AS u_name, u.status AS u_status, a.id AS a_id, a.zip AS a_zip, a.country AS a_country, COUNT(p.phonenumber) AS numphones FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id INNER JOIN cms_phonenumbers p ON u.id = p.user_id GROUP BY u.id, u.name, u.status, u.username, a.id, a.zip, a.country ORDER BY u.username', [ - "name" => "fetchMultipleJoinsEntityResults", - "resultSetMapping" => "mappingMultipleJoinsEntityResults", - "query" => "SELECT u.id AS u_id, u.name AS u_name, u.status AS u_status, a.id AS a_id, a.zip AS a_zip, a.country AS a_country, COUNT(p.phonenumber) AS numphones FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id INNER JOIN cms_phonenumbers p ON u.id = p.user_id GROUP BY u.id, u.name, u.status, u.username, a.id, a.zip, a.country ORDER BY u.username" + 'resultSetMapping' => 'mappingMultipleJoinsEntityResults', ] ); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php index 11e7640406c..cbde8a8a4a5 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php @@ -10,18 +10,18 @@ $metadata->setTable($tableMetadata); $metadata->addNamedNativeQuery( + 'fetchAllWithResultClass', + 'SELECT id, name, discr FROM company_persons ORDER BY name', [ - 'name' => 'fetchAllWithResultClass', - 'query' => 'SELECT id, name, discr FROM company_persons ORDER BY name', - 'resultClass' => CompanyPerson::class, + 'resultClass' => CompanyPerson::class, ] ); $metadata->addNamedNativeQuery( + 'fetchAllWithSqlResultSetMapping', + 'SELECT id, name, discr AS discriminator FROM company_persons ORDER BY name', [ - 'name' => 'fetchAllWithSqlResultSetMapping', - 'query' => 'SELECT id, name, discr AS discriminator FROM company_persons ORDER BY name', - 'resultSetMapping' => 'mappingFetchAll', + 'resultSetMapping' => 'mappingFetchAll', ] ); From 807c8481a3c6c7dcacdfc5a8b3f065f1157ac38f Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 24 Jul 2017 23:20:10 -0400 Subject: [PATCH 174/275] Simplified RSM building for result class --- .../ORM/Query/ResultSetMappingBuilder.php | 58 +++---------------- .../ORM/Hydration/ResultSetMappingTest.php | 4 +- 2 files changed, 10 insertions(+), 52 deletions(-) diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index b56676d2c5f..48d71b6a29c 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -265,58 +265,18 @@ private function getColumnAliasMap($className, $mode, array $customRenameColumns public function addNamedNativeQueryMapping(ClassMetadata $class, array $queryMapping) { if (isset($queryMapping['resultClass'])) { - return $this->addNamedNativeQueryResultClassMapping($class, $queryMapping['resultClass']); - } - - return $this->addNamedNativeQueryResultSetMapping($class, $queryMapping['resultSetMapping']); - } - - /** - * Adds the class mapping of the results of native SQL queries to the result set. - * - * @param ClassMetadata $class - * @param string $resultClassName - * - * @return ResultSetMappingBuilder - */ - public function addNamedNativeQueryResultClassMapping(ClassMetadata $class, $resultClassName) - { - $resultClassName = ($resultClassName === '__CLASS__') - ? $class->getClassName() - : $resultClassName - ; + $entityClass = ($queryMapping['resultClass'] === '__CLASS__') + ? $class + : $this->em->getClassMetadata($queryMapping['resultClass']) + ; - $classMetadata = $this->em->getClassMetadata($resultClassName); - $platform = $this->em->getConnection()->getDatabasePlatform(); - $alias = 'e0'; + $this->addEntityResult($entityClass->getClassName(), 'e0'); + $this->addNamedNativeQueryEntityResultMapping($entityClass, [], 'e0'); - $this->addEntityResult($class->getClassName(), $alias); - - if ($classMetadata->discriminatorColumn) { - $discrColumn = $classMetadata->discriminatorColumn; - $discrColumnName = $discrColumn->getColumnName(); - $discrColumnType = $discrColumn->getType(); - - $this->setDiscriminatorColumn($alias, $discrColumnName); - $this->addMetaResult($alias, $discrColumnName, $discrColumnName, false, $discrColumnType); + return $this; } - foreach ($classMetadata->fieldNames as $columnName => $propertyName) { - $property = $classMetadata->getProperty($propertyName); - $columnAlias = $platform->getSQLResultCasing($columnName); - - if ($property instanceof FieldMetadata) { - $this->addFieldResult($alias, $columnAlias, $propertyName); - - continue; - } - - $columnType = PersisterHelper::getTypeOfColumn($columnName, $classMetadata, $this->em); - - $this->addMetaResult($alias, $columnAlias, $columnName, $property->isPrimaryKey(), $columnType); - } - - return $this; + return $this->addNamedNativeQueryResultSetMapping($class, $queryMapping['resultSetMapping']); } /** @@ -346,7 +306,7 @@ public function addNamedNativeQueryResultSetMapping(ClassMetadata $class, $resul $this->addEntityResult($classMetadata->getClassName(), $rootAlias); $this->addNamedNativeQueryEntityResultMapping($classMetadata, $entityMapping, $rootAlias); } else { - $joinAlias = 'e' . ++ $counter; + $joinAlias = 'e' . ++$counter; $this->addNamedNativeQueryEntityResultMapping($classMetadata, $entityMapping, $joinAlias); diff --git a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php index 5e15bfd3c18..c69bb99ff09 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php @@ -244,9 +244,7 @@ public function testAddNamedNativeQueryResultSetMappingWithoutFields() */ public function testAddNamedNativeQueryResultClass() { - $cm = new ClassMetadata(CmsUser::class); - - $cm->initializeReflection(new RuntimeReflectionService()); + $cm = $this->em->getClassMetadata(CmsUser::class); $cm->addNamedNativeQuery( 'find-all', From 8d2abbbcdc8f80d38dab1d0ca81b4e301ab08543 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 26 Jul 2017 00:07:35 -0400 Subject: [PATCH 175/275] Moved MappingDriver to ORM to allow changes in its API --- lib/Doctrine/ORM/Configuration.php | 2 +- .../Configuration/MetadataConfiguration.php | 4 +- .../Mapping/AbstractClassMetadataFactory.php | 2 +- .../ORM/Mapping/ClassMetadataFactory.php | 2 +- .../ORM/Mapping/Driver/AnnotationDriver.php | 220 +++++++++++++++++- .../ORM/Mapping/Driver/DatabaseDriver.php | 4 +- .../ORM/Mapping/Driver/DriverChain.php | 142 ++++++++++- .../ORM/Mapping/Driver/FileDriver.php | 218 +++++++++++++++++ .../ORM/Mapping/Driver/MappingDriver.php | 61 +++++ .../Mapping/Driver/NewAnnotationDriver.php | 6 +- lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php | 48 +++- .../Mapping/Driver/SimplifiedXmlDriver.php | 1 + .../ORM/Mapping/Driver/StaticPHPDriver.php | 120 +++++++++- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 90 +++---- .../Factory/AbstractClassMetadataFactory.php | 2 +- .../Factory/ClassMetadataGenerator.php | 2 +- .../Entity/CachedPersisterContext.php | 2 +- .../Tests/Mocks/MetadataDriverMock.php | 4 +- .../Doctrine/Tests/ORM/ConfigurationTest.php | 2 +- .../Doctrine/Tests/ORM/EntityManagerTest.php | 5 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 2 + .../ORM/Mapping/ClassMetadataFactoryTest.php | 2 +- .../ORM/Mapping/PHPMappingDriverTest.php | 2 +- .../Mapping/StaticPHPMappingDriverTest.php | 2 +- .../AbstractClassMetadataExporterTest.php | 2 +- 25 files changed, 856 insertions(+), 91 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/Driver/FileDriver.php create mode 100644 lib/Doctrine/ORM/Mapping/Driver/MappingDriver.php diff --git a/lib/Doctrine/ORM/Configuration.php b/lib/Doctrine/ORM/Configuration.php index 6b466379051..660461f42bc 100644 --- a/lib/Doctrine/ORM/Configuration.php +++ b/lib/Doctrine/ORM/Configuration.php @@ -24,12 +24,12 @@ use Doctrine\Common\Annotations\CachedReader; use Doctrine\Common\Cache\ArrayCache; use Doctrine\Common\Cache\Cache as CacheDriver; -use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; use Doctrine\Common\Persistence\ObjectRepository; use Doctrine\ORM\Cache\CacheConfiguration; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\DefaultEntityListenerResolver; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; +use Doctrine\ORM\Mapping\Driver\MappingDriver; use Doctrine\ORM\Mapping\EntityListenerResolver; use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; use Doctrine\ORM\Mapping\Factory\NamingStrategy; diff --git a/lib/Doctrine/ORM/Configuration/MetadataConfiguration.php b/lib/Doctrine/ORM/Configuration/MetadataConfiguration.php index 8bbef98027b..fe61a8a9c57 100644 --- a/lib/Doctrine/ORM/Configuration/MetadataConfiguration.php +++ b/lib/Doctrine/ORM/Configuration/MetadataConfiguration.php @@ -22,7 +22,7 @@ namespace Doctrine\ORM\Configuration; -use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; +use Doctrine\ORM\Mapping\Driver\MappingDriver; use Doctrine\ORM\Mapping\Factory\AbstractClassMetadataFactory; use Doctrine\ORM\Mapping\Factory\ClassMetadataResolver; use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; @@ -167,4 +167,4 @@ public function setAutoGenerate(int $autoGenerate) { $this->autoGenerate = $autoGenerate; } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php index 16206c4cc58..d4c21bb7bbd 100644 --- a/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php @@ -144,7 +144,7 @@ abstract protected function getFqcnFromAlias($namespaceAlias, $simpleClassName); /** * Returns the mapping driver implementation. * - * @return \Doctrine\Common\Persistence\Mapping\Driver\MappingDriver + * @return Driver\MappingDriver */ abstract protected function getDriver(); diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 2c008b20f19..237a400b389 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -53,7 +53,7 @@ class ClassMetadataFactory extends AbstractClassMetadataFactory private $targetPlatform; /** - * @var \Doctrine\Common\Persistence\Mapping\Driver\MappingDriver + * @var Driver\MappingDriver */ private $driver; diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 413096414f1..add235385cc 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -20,8 +20,6 @@ namespace Doctrine\ORM\Mapping\Driver; use Doctrine\Common\Annotations\AnnotationReader; -use Doctrine\Common\Persistence\Mapping\ClassMetadata as ClassMetadataInterface; -use Doctrine\Common\Persistence\Mapping\Driver\AnnotationDriver as AbstractAnnotationDriver; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Annotation; use Doctrine\ORM\Events; @@ -36,7 +34,7 @@ * @author Jonathan H. Wage * @author Roman Borschel */ -class AnnotationDriver extends AbstractAnnotationDriver +class AnnotationDriver implements MappingDriver { /** * {@inheritDoc} @@ -46,10 +44,224 @@ class AnnotationDriver extends AbstractAnnotationDriver Annotation\MappedSuperclass::class => 2, ]; + /** + * The AnnotationReader. + * + * @var AnnotationReader + */ + protected $reader; + + /** + * The paths where to look for mapping files. + * + * @var array + */ + protected $paths = []; + + /** + * The paths excluded from path where to look for mapping files. + * + * @var array + */ + protected $excludePaths = []; + + /** + * The file extension of mapping documents. + * + * @var string + */ + protected $fileExtension = '.php'; + + /** + * Cache for AnnotationDriver#getAllClassNames(). + * + * @var array|null + */ + protected $classNames; + + /** + * Initializes a new AnnotationDriver that uses the given AnnotationReader for reading + * docblock annotations. + * + * @param AnnotationReader $reader The AnnotationReader to use, duck-typed. + * @param string|array|null $paths One or multiple paths where mapping classes can be found. + */ + public function __construct($reader, $paths = null) + { + $this->reader = $reader; + if ($paths) { + $this->addPaths((array) $paths); + } + } + + /** + * Appends lookup paths to metadata driver. + * + * @param array $paths + * + * @return void + */ + public function addPaths(array $paths) + { + $this->paths = array_unique(array_merge($this->paths, $paths)); + } + + /** + * Retrieves the defined metadata lookup paths. + * + * @return array + */ + public function getPaths() + { + return $this->paths; + } + + /** + * Append exclude lookup paths to metadata driver. + * + * @param array $paths + */ + public function addExcludePaths(array $paths) + { + $this->excludePaths = array_unique(array_merge($this->excludePaths, $paths)); + } + + /** + * Retrieve the defined metadata lookup exclude paths. + * + * @return array + */ + public function getExcludePaths() + { + return $this->excludePaths; + } + + /** + * Retrieve the current annotation reader + * + * @return AnnotationReader + */ + public function getReader() + { + return $this->reader; + } + + /** + * Gets the file extension used to look for mapping files under. + * + * @return string + */ + public function getFileExtension() + { + return $this->fileExtension; + } + + /** + * Sets the file extension used to look for mapping files under. + * + * @param string $fileExtension The file extension to set. + * + * @return void + */ + public function setFileExtension($fileExtension) + { + $this->fileExtension = $fileExtension; + } + + /** + * Returns whether the class with the specified name is transient. Only non-transient + * classes, that is entities and mapped superclasses, should have their metadata loaded. + * + * A class is non-transient if it is annotated with an annotation + * from the {@see AnnotationDriver::entityAnnotationClasses}. + * + * @param string $className + * + * @return boolean + */ + public function isTransient($className) + { + $classAnnotations = $this->reader->getClassAnnotations(new \ReflectionClass($className)); + + foreach ($classAnnotations as $annot) { + if (isset($this->entityAnnotationClasses[get_class($annot)])) { + return false; + } + } + return true; + } + + /** + * {@inheritDoc} + */ + public function getAllClassNames() + { + if ($this->classNames !== null) { + return $this->classNames; + } + + if (!$this->paths) { + throw Mapping\MappingException::pathRequired(); + } + + $classes = []; + $includedFiles = []; + + foreach ($this->paths as $path) { + if ( ! is_dir($path)) { + throw Mapping\MappingException::fileMappingDriversRequireConfiguredDirectoryPath($path); + } + + $iterator = new \RegexIterator( + new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($path, \FilesystemIterator::SKIP_DOTS), + \RecursiveIteratorIterator::LEAVES_ONLY + ), + '/^.+' . preg_quote($this->fileExtension) . '$/i', + \RecursiveRegexIterator::GET_MATCH + ); + + foreach ($iterator as $file) { + $sourceFile = $file[0]; + + if ( ! preg_match('(^phar:)i', $sourceFile)) { + $sourceFile = realpath($sourceFile); + } + + foreach ($this->excludePaths as $excludePath) { + $exclude = str_replace('\\', '/', realpath($excludePath)); + $current = str_replace('\\', '/', $sourceFile); + + if (strpos($current, $exclude) !== false) { + continue 2; + } + } + + require_once $sourceFile; + + $includedFiles[] = $sourceFile; + } + } + + $declared = get_declared_classes(); + + foreach ($declared as $className) { + $rc = new \ReflectionClass($className); + $sourceFile = $rc->getFileName(); + if (in_array($sourceFile, $includedFiles) && ! $this->isTransient($className)) { + $classes[] = $className; + } + } + + $this->classNames = $classes; + + return $classes; + } + /** * {@inheritDoc} */ - public function loadMetadataForClass($className, ClassMetadataInterface $metadata) + public function loadMetadataForClass($className, Mapping\ClassMetadata $metadata) { $reflClass = $metadata->getReflectionClass(); diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index 3bb0b7104ed..3d4b68cfc41 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -19,8 +19,6 @@ namespace Doctrine\ORM\Mapping\Driver; -use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; -use Doctrine\Common\Persistence\Mapping\ClassMetadata as ClassMetadataInterface; use Doctrine\Common\Util\Inflector; use Doctrine\DBAL\Schema\AbstractSchemaManager; use Doctrine\DBAL\Schema\Index; @@ -175,7 +173,7 @@ public function setTables($entityTables, $manyToManyTables) /** * {@inheritDoc} */ - public function loadMetadataForClass($className, ClassMetadataInterface $metadata) + public function loadMetadataForClass($className, ClassMetadata $metadata) { $this->reverseEngineerMappingFromDatabase(); diff --git a/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php b/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php index f4cd8cd6081..2f9d97c8274 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php @@ -19,13 +19,147 @@ namespace Doctrine\ORM\Mapping\Driver; -use Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain; +use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\MappingException; /** - * {@inheritDoc} + * The DriverChain allows you to add multiple other mapping drivers for + * certain namespaces. * - * @deprecated this driver will be removed. Use Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain instead + * @since 2.2 + * @author Benjamin Eberlei + * @author Guilherme Blanco + * @author Jonathan H. Wage + * @author Roman Borschel */ -class DriverChain extends MappingDriverChain +class DriverChain implements MappingDriver { + /** + * The default driver. + * + * @var MappingDriver|null + */ + private $defaultDriver; + + /** + * @var array + */ + private $drivers = []; + + /** + * Gets the default driver. + * + * @return MappingDriver|null + */ + public function getDefaultDriver() + { + return $this->defaultDriver; + } + + /** + * Set the default driver. + * + * @param MappingDriver $driver + * + * @return void + */ + public function setDefaultDriver(MappingDriver $driver) + { + $this->defaultDriver = $driver; + } + + /** + * Adds a nested driver. + * + * @param MappingDriver $nestedDriver + * @param string $namespace + * + * @return void + */ + public function addDriver(MappingDriver $nestedDriver, $namespace) + { + $this->drivers[$namespace] = $nestedDriver; + } + + /** + * Gets the array of nested drivers. + * + * @return array $drivers + */ + public function getDrivers() + { + return $this->drivers; + } + + /** + * {@inheritDoc} + */ + public function loadMetadataForClass($className, ClassMetadata $metadata) + { + /* @var $driver MappingDriver */ + foreach ($this->drivers as $namespace => $driver) { + if (strpos($className, $namespace) === 0) { + $driver->loadMetadataForClass($className, $metadata); + return; + } + } + + if (null !== $this->defaultDriver) { + $this->defaultDriver->loadMetadataForClass($className, $metadata); + return; + } + + throw MappingException::classNotFoundInNamespaces($className, array_keys($this->drivers)); + } + + /** + * {@inheritDoc} + */ + public function getAllClassNames() + { + $classNames = []; + $driverClasses = []; + + /* @var $driver MappingDriver */ + foreach ($this->drivers AS $namespace => $driver) { + $oid = spl_object_hash($driver); + + if (!isset($driverClasses[$oid])) { + $driverClasses[$oid] = $driver->getAllClassNames(); + } + + foreach ($driverClasses[$oid] AS $className) { + if (strpos($className, $namespace) === 0) { + $classNames[$className] = true; + } + } + } + + if (null !== $this->defaultDriver) { + foreach ($this->defaultDriver->getAllClassNames() as $className) { + $classNames[$className] = true; + } + } + + return array_keys($classNames); + } + + /** + * {@inheritDoc} + */ + public function isTransient($className) + { + /* @var $driver MappingDriver */ + foreach ($this->drivers AS $namespace => $driver) { + if (strpos($className, $namespace) === 0) { + return $driver->isTransient($className); + } + } + + if ($this->defaultDriver !== null) { + return $this->defaultDriver->isTransient($className); + } + + return true; + } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/FileDriver.php b/lib/Doctrine/ORM/Mapping/Driver/FileDriver.php new file mode 100644 index 00000000000..049dd361772 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Driver/FileDriver.php @@ -0,0 +1,218 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Driver; + +use Doctrine\Common\Persistence\Mapping\Driver\DefaultFileLocator; +use Doctrine\Common\Persistence\Mapping\Driver\FileLocator; +use Doctrine\Common\Persistence\Mapping\MappingException; + +/** + * Base driver for file-based metadata drivers. + * + * A file driver operates in a mode where it loads the mapping files of individual + * classes on demand. This requires the user to adhere to the convention of 1 mapping + * file per class and the file names of the mapping files must correspond to the full + * class name, including namespace, with the namespace delimiters '\', replaced by dots '.'. + * + * @link www.doctrine-project.org + * @since 2.2 + * @author Benjamin Eberlei + * @author Guilherme Blanco + * @author Jonathan H. Wage + * @author Roman Borschel + */ +abstract class FileDriver implements MappingDriver +{ + /** + * @var FileLocator + */ + protected $locator; + + /** + * @var array|null + */ + protected $classCache; + + /** + * @var string|null + */ + protected $globalBasename; + + /** + * Initializes a new FileDriver that looks in the given path(s) for mapping + * documents and operates in the specified operating mode. + * + * @param string|array|FileLocator $locator A FileLocator or one/multiple paths + * where mapping documents can be found. + * @param string|null $fileExtension + */ + public function __construct($locator, $fileExtension = null) + { + if ($locator instanceof FileLocator) { + $this->locator = $locator; + } else { + $this->locator = new DefaultFileLocator((array)$locator, $fileExtension); + } + } + + /** + * Retrieves the locator used to discover mapping files by className. + * + * @return FileLocator + */ + public function getLocator() + { + return $this->locator; + } + + /** + * Sets the locator used to discover mapping files by className. + * + * @param FileLocator $locator + */ + public function setLocator(FileLocator $locator) + { + $this->locator = $locator; + } + + /** + * Sets the global basename. + * + * @param string $file + * + * @return void + */ + public function setGlobalBasename($file) + { + $this->globalBasename = $file; + } + + /** + * Retrieves the global basename. + * + * @return string|null + */ + public function getGlobalBasename() + { + return $this->globalBasename; + } + + /** + * Gets the element of schema meta data for the class from the mapping file. + * This will lazily load the mapping file if it is not loaded yet. + * + * @param string $className + * + * @return array The element of schema meta data. + * + * @throws MappingException + */ + public function getElement($className) + { + if ($this->classCache === null) { + $this->initialize(); + } + + if (isset($this->classCache[$className])) { + return $this->classCache[$className]; + } + + $result = $this->loadMappingFile($this->locator->findMappingFile($className)); + if (!isset($result[$className])) { + throw MappingException::invalidMappingFile($className, str_replace('\\', '.', $className) . $this->locator->getFileExtension()); + } + + $this->classCache[$className] = $result[$className]; + + return $result[$className]; + } + + /** + * {@inheritDoc} + */ + public function isTransient($className) + { + if ($this->classCache === null) { + $this->initialize(); + } + + if (isset($this->classCache[$className])) { + return false; + } + + return !$this->locator->fileExists($className); + } + + /** + * {@inheritDoc} + */ + public function getAllClassNames() + { + if ($this->classCache === null) { + $this->initialize(); + } + + if (! $this->classCache) { + return (array) $this->locator->getAllClassNames($this->globalBasename); + } + + return array_merge( + array_keys($this->classCache), + (array) $this->locator->getAllClassNames($this->globalBasename) + ); + } + + /** + * Loads a mapping file with the given name and returns a map + * from class/entity names to their corresponding file driver elements. + * + * @param string $file The mapping file to load. + * + * @return array + */ + abstract protected function loadMappingFile($file); + + /** + * Initializes the class cache from all the global files. + * + * Using this feature adds a substantial performance hit to file drivers as + * more metadata has to be loaded into memory than might actually be + * necessary. This may not be relevant to scenarios where caching of + * metadata is in place, however hits very hard in scenarios where no + * caching is used. + * + * @return void + */ + protected function initialize() + { + $this->classCache = []; + if (null !== $this->globalBasename) { + foreach ($this->locator->getPaths() as $path) { + $file = $path.'/'.$this->globalBasename.$this->locator->getFileExtension(); + if (is_file($file)) { + $this->classCache = array_merge( + $this->classCache, + $this->loadMappingFile($file) + ); + } + } + } + } +} diff --git a/lib/Doctrine/ORM/Mapping/Driver/MappingDriver.php b/lib/Doctrine/ORM/Mapping/Driver/MappingDriver.php new file mode 100644 index 00000000000..86014294c9f --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Driver/MappingDriver.php @@ -0,0 +1,61 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Driver; + +use Doctrine\ORM\Mapping\ClassMetadata; + +/** + * Contract for metadata drivers. + * + * @package Doctrine\ORM\Mapping\Driver + * @since 3.0 + * + * @author Guilherme Blanco + * @author Jonathan H. Wage + */ +interface MappingDriver +{ + /** + * Loads the metadata for the specified class into the provided container. + * + * @param string $className + * @param ClassMetadata $metadata + * + * @return void + */ + public function loadMetadataForClass($className, ClassMetadata $metadata); + + /** + * Gets the names of all mapped classes known to this driver. + * + * @return array The names of all mapped classes known to this driver. + */ + public function getAllClassNames(); + + /** + * Returns whether the class with the specified name should have its metadata loaded. + * This is only the case if it is either mapped as an Entity or a MappedSuperclass. + * + * @param string $className + * + * @return boolean + */ + public function isTransient($className); +} diff --git a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php index 48eabd447cf..cc30d702b44 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php @@ -20,9 +20,7 @@ namespace Doctrine\ORM\Mapping\Driver; use Doctrine\Common\Annotations\AnnotationReader; -use Doctrine\Common\Persistence\Mapping\ClassMetadata; use Doctrine\Common\Persistence\Mapping\Driver\FileLocator; -use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Annotation; use Doctrine\ORM\Events; @@ -79,9 +77,11 @@ public function __construct(AnnotationReader $reader, FileLocator $locator, Fact /** * {@inheritdoc} * + * @return Mapping\ClassMetadata + * * @throws Mapping\MappingException */ - public function loadMetadataForClass($className, ClassMetadata $metadata) + public function loadMetadataForClass($className, Mapping\ClassMetadata $metadata) { // IMPORTANT: We're handling $metadata as "parent" metadata here, while building the $className ClassMetadata. $reflectionClass = new \ReflectionClass($className); diff --git a/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php b/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php index 28e2dbea22f..86f49ce9bae 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php @@ -19,13 +19,53 @@ namespace Doctrine\ORM\Mapping\Driver; -use Doctrine\Common\Persistence\Mapping\Driver\PHPDriver as CommonPHPDriver; +use Doctrine\ORM\Mapping\ClassMetadata; /** - * {@inheritDoc} + * The PHPDriver includes php files which just populate ClassMetadataInfo + * instances with plain PHP code. * - * @deprecated this driver will be removed. Use Doctrine\Common\Persistence\Mapping\Driver\PHPDriver instead + * @link www.doctrine-project.org + * @since 2.0 + * @author Benjamin Eberlei + * @author Guilherme Blanco + * @author Jonathan H. Wage + * @author Roman Borschel */ -class PHPDriver extends CommonPHPDriver +class PHPDriver extends FileDriver { + /** + * @var ClassMetadata + */ + protected $metadata; + + /** + * {@inheritDoc} + */ + public function __construct($locator) + { + parent::__construct($locator, '.php'); + } + + /** + * {@inheritDoc} + */ + public function loadMetadataForClass($className, ClassMetadata $metadata) + { + $this->metadata = $metadata; + + $this->loadMappingFile($this->locator->findMappingFile($className)); + } + + /** + * {@inheritDoc} + */ + protected function loadMappingFile($file) + { + $metadata = $this->metadata; + + include $file; + + return [$metadata->getName() => $metadata]; + } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/SimplifiedXmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/SimplifiedXmlDriver.php index 9bfd84cae38..1fcdd477269 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/SimplifiedXmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/SimplifiedXmlDriver.php @@ -38,6 +38,7 @@ class SimplifiedXmlDriver extends XmlDriver public function __construct($prefixes, $fileExtension = self::DEFAULT_FILE_EXTENSION) { $locator = new SymfonyFileLocator((array) $prefixes, $fileExtension); + parent::__construct($locator, $fileExtension); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php b/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php index d6c6ead853c..eb19c6c1ed7 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php @@ -19,13 +19,125 @@ namespace Doctrine\ORM\Mapping\Driver; -use Doctrine\Common\Persistence\Mapping\Driver\StaticPHPDriver as CommonStaticPHPDriver; +use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\MappingException; /** - * {@inheritDoc} + * The StaticPHPDriver calls a static loadMetadata() method on your entity + * classes where you can manually populate the ClassMetadata instance. * - * @deprecated this driver will be removed. Use Doctrine\Common\Persistence\Mapping\Driver\StaticPHPDriver instead + * @link www.doctrine-project.org + * @since 2.2 + * + * @author Benjamin Eberlei + * @author Guilherme Blanco + * @author Jonathan H. Wage + * @author Roman Borschel */ -class StaticPHPDriver extends CommonStaticPHPDriver +class StaticPHPDriver implements MappingDriver { + /** + * Paths of entity directories. + * + * @var array + */ + private $paths = []; + + /** + * Map of all class names. + * + * @var array + */ + private $classNames; + + /** + * Constructor. + * + * @param array|string $paths + */ + public function __construct($paths) + { + $this->addPaths((array) $paths); + } + + /** + * Adds paths. + * + * @param array $paths + * + * @return void + */ + public function addPaths(array $paths) + { + $this->paths = array_unique(array_merge($this->paths, $paths)); + } + + /** + * {@inheritdoc} + */ + public function loadMetadataForClass($className, ClassMetadata $metadata) + { + $className::loadMetadata($metadata); + } + + /** + * {@inheritDoc} + * @todo Same code exists in AnnotationDriver, should we re-use it somehow or not worry about it? + */ + public function getAllClassNames() + { + if ($this->classNames !== null) { + return $this->classNames; + } + + if (!$this->paths) { + throw MappingException::pathRequired(); + } + + $classes = []; + $includedFiles = []; + + foreach ($this->paths as $path) { + if (!is_dir($path)) { + throw MappingException::fileMappingDriversRequireConfiguredDirectoryPath($path); + } + + $iterator = new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($path), + \RecursiveIteratorIterator::LEAVES_ONLY + ); + + foreach ($iterator as $file) { + if ($file->getBasename('.php') == $file->getBasename()) { + continue; + } + + $sourceFile = realpath($file->getPathName()); + require_once $sourceFile; + $includedFiles[] = $sourceFile; + } + } + + $declared = get_declared_classes(); + + foreach ($declared as $className) { + $rc = new \ReflectionClass($className); + $sourceFile = $rc->getFileName(); + if (in_array($sourceFile, $includedFiles) && !$this->isTransient($className)) { + $classes[] = $className; + } + } + + $this->classNames = $classes; + + return $classes; + } + + /** + * {@inheritdoc} + */ + public function isTransient($className) + { + return ! method_exists($className, 'loadMetadata'); + } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 23e51552a41..9bd4e87f6fc 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -19,26 +19,9 @@ namespace Doctrine\ORM\Mapping\Driver; -use Doctrine\Common\Persistence\Mapping\Driver\FileDriver; -use Doctrine\Common\Persistence\Mapping\ClassMetadata; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Events; -use Doctrine\ORM\Mapping\CacheMetadata; -use Doctrine\ORM\Mapping\CacheUsage; -use Doctrine\ORM\Mapping\ChangeTrackingPolicy; -use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; -use Doctrine\ORM\Mapping\FetchMode; -use Doctrine\ORM\Mapping\FieldMetadata; -use Doctrine\ORM\Mapping\GeneratorType; -use Doctrine\ORM\Mapping\InheritanceType; -use Doctrine\ORM\Mapping\JoinColumnMetadata; -use Doctrine\ORM\Mapping\JoinTableMetadata; -use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; -use Doctrine\ORM\Mapping\ManyToOneAssociationMetadata; -use Doctrine\ORM\Mapping\MappingException; -use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; -use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; -use Doctrine\ORM\Mapping\VersionFieldMetadata; +use Doctrine\ORM\Mapping; use SimpleXMLElement; /** @@ -67,9 +50,8 @@ public function __construct($locator, $fileExtension = self::DEFAULT_FILE_EXTENS /** * {@inheritDoc} */ - public function loadMetadataForClass($className, ClassMetadata $metadata) + public function loadMetadataForClass($className, Mapping\ClassMetadata $metadata) { - /* @var \Doctrine\ORM\Mapping\ClassMetadata $metadata */ /* @var \SimpleXMLElement $xmlRoot */ $xmlRoot = $this->getElement($className); @@ -88,7 +70,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } else if ($xmlRoot->getName() === 'embeddable') { $metadata->isEmbeddedClass = true; } else { - throw MappingException::classIsNotAValidEntityOrMappedSuperClass($className); + throw Mapping\MappingException::classIsNotAValidEntityOrMappedSuperClass($className); } // Evaluate attributes @@ -220,11 +202,11 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $inheritanceType = strtoupper((string) $xmlRoot['inheritance-type']); $metadata->setInheritanceType( - constant(sprintf('%s::%s', InheritanceType::class, $inheritanceType)) + constant(sprintf('%s::%s', Mapping\InheritanceType::class, $inheritanceType)) ); - if ($metadata->inheritanceType !== InheritanceType::NONE) { - $discriminatorColumn = new DiscriminatorColumnMetadata(); + if ($metadata->inheritanceType !== Mapping\InheritanceType::NONE) { + $discriminatorColumn = new Mapping\DiscriminatorColumnMetadata(); $discriminatorColumn->setTableName($metadata->getTableName()); $discriminatorColumn->setColumnName('dtype'); @@ -271,7 +253,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $changeTrackingPolicy = strtoupper((string) $xmlRoot['change-tracking-policy']); $metadata->setChangeTrackingPolicy( - constant(sprintf('%s::%s', ChangeTrackingPolicy::class, $changeTrackingPolicy)) + constant(sprintf('%s::%s', Mapping\ChangeTrackingPolicy::class, $changeTrackingPolicy)) ); } @@ -328,7 +310,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) : 'AUTO' ; - $idGeneratorType = constant(sprintf('%s::%s', GeneratorType::class, strtoupper($strategy))); + $idGeneratorType = constant(sprintf('%s::%s', Mapping\GeneratorType::class, strtoupper($strategy))); $fieldMetadata->setIdentifierGeneratorType($idGeneratorType); } @@ -352,7 +334,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) ] ); } else if (isset($idElement->{'table-generator'})) { - throw MappingException::tableIdGeneratorNotImplemented($className); + throw Mapping\MappingException::tableIdGeneratorNotImplemented($className); } $metadata->addProperty($fieldMetadata); @@ -361,7 +343,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate mappings if (isset($xmlRoot->{'one-to-one'})) { foreach ($xmlRoot->{'one-to-one'} as $oneToOneElement) { - $association = new OneToOneAssociationMetadata((string) $oneToOneElement['field']); + $association = new Mapping\OneToOneAssociationMetadata((string) $oneToOneElement['field']); $association->setTargetEntity((string) $oneToOneElement['target-entity']); @@ -371,7 +353,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) if (isset($oneToOneElement['fetch'])) { $association->setFetchMode( - constant(sprintf('%s::%s', FetchMode::class, (string) $oneToOneElement['fetch'])) + constant(sprintf('%s::%s', Mapping\FetchMode::class, (string) $oneToOneElement['fetch'])) ); } @@ -421,14 +403,14 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate mappings if (isset($xmlRoot->{'one-to-many'})) { foreach ($xmlRoot->{'one-to-many'} as $oneToManyElement) { - $association = new OneToManyAssociationMetadata((string) $oneToManyElement['field']); + $association = new Mapping\OneToManyAssociationMetadata((string) $oneToManyElement['field']); $association->setTargetEntity((string) $oneToManyElement['target-entity']); $association->setMappedBy((string) $oneToManyElement['mapped-by']); if (isset($oneToManyElement['fetch'])) { $association->setFetchMode( - constant('Doctrine\ORM\Mapping\FetchMode::' . (string) $oneToManyElement['fetch']) + constant(sprintf('%s::%s', Mapping\FetchMode::class, (string) $oneToManyElement['fetch'])) ); } @@ -474,7 +456,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate mappings if (isset($xmlRoot->{'many-to-one'})) { foreach ($xmlRoot->{'many-to-one'} as $manyToOneElement) { - $association = new ManyToOneAssociationMetadata((string) $manyToOneElement['field']); + $association = new Mapping\ManyToOneAssociationMetadata((string) $manyToOneElement['field']); $association->setTargetEntity((string) $manyToOneElement['target-entity']); @@ -526,13 +508,13 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Evaluate mappings if (isset($xmlRoot->{'many-to-many'})) { foreach ($xmlRoot->{'many-to-many'} as $manyToManyElement) { - $association = new ManyToManyAssociationMetadata((string) $manyToManyElement['field']); + $association = new Mapping\ManyToManyAssociationMetadata((string) $manyToManyElement['field']); $association->setTargetEntity((string) $manyToManyElement['target-entity']); if (isset($manyToManyElement['fetch'])) { $association->setFetchMode( - constant('Doctrine\ORM\Mapping\FetchMode::' . (string) $manyToManyElement['fetch']) + constant(sprintf('%s::%s', Mapping\FetchMode::class, (string) $manyToManyElement['fetch'])) ); } @@ -548,7 +530,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } $joinTableElement = $manyToManyElement->{'join-table'}; - $joinTable = new JoinTableMetadata(); + $joinTable = new Mapping\JoinTableMetadata(); if (isset($joinTableElement['name'])) { $joinTable->setName((string) $joinTableElement['name']); @@ -632,7 +614,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $property = $metadata->getProperty($fieldName); if (! $property) { - throw MappingException::invalidOverrideFieldName($metadata->getClassName(), $fieldName); + throw Mapping\MappingException::invalidOverrideFieldName($metadata->getClassName(), $fieldName); } $existingClass = get_class($property); @@ -652,7 +634,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) // Check for join-table if ($overrideElement->{'join-table'}) { $joinTableElement = $overrideElement->{'join-table'}; - $joinTable = new JoinTableMetadata(); + $joinTable = new Mapping\JoinTableMetadata(); if (isset($joinTableElement['name'])) { $joinTable->setName((string) $joinTableElement['name']); @@ -713,7 +695,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $listenerClassName = $metadata->fullyQualifiedClassName((string) $listenerElement['class']); if (! class_exists($listenerClassName)) { - throw MappingException::entityListenerClassNotFound( + throw Mapping\MappingException::entityListenerClassNotFound( $listenerClassName, $metadata->getClassName() ); @@ -783,13 +765,13 @@ private function parseOptions(SimpleXMLElement $options) * @param string $fieldName * @param bool $isVersioned * - * @return FieldMetadata + * @return Mapping\FieldMetadata */ private function convertFieldElementToFieldMetadata(SimpleXMLElement $fieldElement, string $fieldName, bool $isVersioned) { $fieldMetadata = $isVersioned - ? new VersionFieldMetadata($fieldName) - : new FieldMetadata($fieldName) + ? new Mapping\VersionFieldMetadata($fieldName) + : new Mapping\FieldMetadata($fieldName) ; $fieldMetadata->setType(Type::getType('string')); @@ -839,11 +821,11 @@ private function convertFieldElementToFieldMetadata(SimpleXMLElement $fieldEleme * * @param SimpleXMLElement $joinColumnElement The XML element. * - * @return JoinColumnMetadata + * @return Mapping\JoinColumnMetadata */ private function convertJoinColumnElementToJoinColumnMetadata(SimpleXMLElement $joinColumnElement) { - $joinColumnMetadata = new JoinColumnMetadata(); + $joinColumnMetadata = new Mapping\JoinColumnMetadata(); $joinColumnMetadata->setColumnName((string) $joinColumnElement['name']); $joinColumnMetadata->setReferencedColumnName((string) $joinColumnElement['referenced-column-name']); @@ -874,24 +856,28 @@ private function convertJoinColumnElementToJoinColumnMetadata(SimpleXMLElement $ /** * Parse the given Cache as CacheMetadata * - * @param \SimpleXMLElement $cacheMapping - * @param ClassMetadata $metadata - * @param null|string $fieldName + * @param \SimpleXMLElement $cacheMapping + * @param Mapping\ClassMetadata $metadata + * @param null|string $fieldName * - * @return CacheMetadata + * @return Mapping\CacheMetadata */ - private function convertCacheElementToCacheMetadata(SimpleXMLElement $cacheMapping, ClassMetadata $metadata, $fieldName = null) + private function convertCacheElementToCacheMetadata( + SimpleXMLElement $cacheMapping, + Mapping\ClassMetadata $metadata, + $fieldName = null + ) { $baseRegion = strtolower(str_replace('\\', '_', $metadata->getRootClassName())); $defaultRegion = $baseRegion . ($fieldName ? '__' . $fieldName : ''); $region = isset($cacheMapping['region']) ? (string) $cacheMapping['region'] : $defaultRegion; $usage = isset($cacheMapping['usage']) - ? constant(sprintf('%s::%s', CacheUsage::class, strtoupper($cacheMapping['usage']))) - : CacheUsage::READ_ONLY + ? constant(sprintf('%s::%s', Mapping\CacheUsage::class, strtoupper($cacheMapping['usage']))) + : Mapping\CacheUsage::READ_ONLY ; - return new CacheMetadata($usage, $region); + return new Mapping\CacheMetadata($usage, $region); } /** @@ -932,7 +918,7 @@ private function cacheToArray(SimpleXMLElement $cacheMapping) $usage = isset($cacheMapping['usage']) ? strtoupper($cacheMapping['usage']) : null; if ($usage) { - $usage = constant(sprintf('%s::%s', CacheUsage::class, $usage)); + $usage = constant(sprintf('%s::%s', Mapping\CacheUsage::class, $usage)); } return [ diff --git a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php index f48419195ae..3f5e4d23ee5 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php @@ -23,10 +23,10 @@ namespace Doctrine\ORM\Mapping\Factory; use Doctrine\Common\Persistence\Mapping\ClassMetadataFactory; -use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; use Doctrine\Common\Util\ClassUtils; use Doctrine\ORM\Configuration\MetadataConfiguration; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\Driver\MappingDriver; use Doctrine\ORM\Reflection\ReflectionService; /** diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php index 6d60d9a6378..25e21af5329 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php @@ -22,7 +22,7 @@ namespace Doctrine\ORM\Mapping\Factory; -use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; +use Doctrine\ORM\Mapping\Driver\MappingDriver; use Doctrine\ORM\Mapping\Exporter\ClassMetadataExporter; /** diff --git a/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php b/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php index f55dd8ec96a..e49f5a226aa 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php +++ b/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php @@ -19,7 +19,7 @@ namespace Doctrine\ORM\Persisters\Entity; -use Doctrine\Common\Persistence\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Query\ResultSetMapping; /** diff --git a/tests/Doctrine/Tests/Mocks/MetadataDriverMock.php b/tests/Doctrine/Tests/Mocks/MetadataDriverMock.php index f14c256b19e..fe07f652e2e 100644 --- a/tests/Doctrine/Tests/Mocks/MetadataDriverMock.php +++ b/tests/Doctrine/Tests/Mocks/MetadataDriverMock.php @@ -2,8 +2,8 @@ namespace Doctrine\Tests\Mocks; -use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; -use Doctrine\Common\Persistence\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\Driver\MappingDriver; +use Doctrine\ORM\Mapping\ClassMetadata; /** * Mock class for MappingDriver. diff --git a/tests/Doctrine/Tests/ORM/ConfigurationTest.php b/tests/Doctrine/Tests/ORM/ConfigurationTest.php index 95cc6b31222..5fefe279551 100644 --- a/tests/Doctrine/Tests/ORM/ConfigurationTest.php +++ b/tests/Doctrine/Tests/ORM/ConfigurationTest.php @@ -4,7 +4,6 @@ use Doctrine\Common\Cache\ArrayCache; use Doctrine\Common\Cache\Cache; -use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; use Doctrine\Common\Proxy\AbstractProxyFactory; use Doctrine\ORM\Annotation as AnnotationNamespace; use Doctrine\ORM\Cache\CacheConfiguration; @@ -12,6 +11,7 @@ use Doctrine\ORM\EntityRepository; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\DefaultEntityListenerResolver; +use Doctrine\ORM\Mapping\Driver\MappingDriver; use Doctrine\ORM\Mapping\EntityListenerResolver; use Doctrine\ORM\Mapping\Factory\NamingStrategy; use Doctrine\ORM\ORMException; diff --git a/tests/Doctrine/Tests/ORM/EntityManagerTest.php b/tests/Doctrine/Tests/ORM/EntityManagerTest.php index fb13d3af80e..4705bf0ef9d 100644 --- a/tests/Doctrine/Tests/ORM/EntityManagerTest.php +++ b/tests/Doctrine/Tests/ORM/EntityManagerTest.php @@ -3,11 +3,11 @@ namespace Doctrine\Tests\ORM; use Doctrine\Common\EventManager; -use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; use Doctrine\DBAL\Connection; use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManager; use Doctrine\ORM\Mapping\ClassMetadataFactory; +use Doctrine\ORM\Mapping\Driver\MappingDriver; use Doctrine\ORM\NativeQuery; use Doctrine\ORM\ORMException; use Doctrine\ORM\ORMInvalidArgumentException; @@ -27,9 +27,10 @@ class EntityManagerTest extends OrmTestCase */ private $em; - function setUp() + public function setUp() { parent::setUp(); + $this->em = $this->getTestEntityManager(); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 240d786253c..3b358b311bd 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -62,7 +62,9 @@ protected function createClassMetadataFactory(EntityManager $em = null) $driver = $this->loadDriver(); $em = $em ?: $this->getTestEntityManager(); $factory = new ClassMetadataFactory(); + $em->getConfiguration()->setMetadataDriverImpl($driver); + $factory->setEntityManager($em); return $factory; diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 15c18de9b3f..c127d405e36 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -3,7 +3,6 @@ namespace Doctrine\Tests\ORM\Mapping; use Doctrine\Common\EventManager; -use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; use Doctrine\DBAL\Connection; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Configuration; @@ -15,6 +14,7 @@ use Doctrine\ORM\Mapping; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; +use Doctrine\ORM\Mapping\Driver\MappingDriver; use Doctrine\ORM\Mapping\MappingException; use Doctrine\ORM\ORMException; use Doctrine\ORM\Reflection\RuntimeReflectionService; diff --git a/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php index 7da078565cc..02dc2d7e849 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php @@ -2,8 +2,8 @@ namespace Doctrine\Tests\ORM\Mapping; -use Doctrine\Common\Persistence\Mapping\Driver\PHPDriver; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\Driver\PHPDriver; use Doctrine\Tests\Models\DDC889\DDC889Class; use Doctrine\Tests\ORM\Mapping; diff --git a/tests/Doctrine/Tests/ORM/Mapping/StaticPHPMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/StaticPHPMappingDriverTest.php index 66c95216d10..e7773f8b165 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/StaticPHPMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/StaticPHPMappingDriverTest.php @@ -2,8 +2,8 @@ namespace Doctrine\Tests\ORM\Mapping; -use Doctrine\Common\Persistence\Mapping\Driver\StaticPHPDriver; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\Driver\StaticPHPDriver; use Doctrine\Tests\Models\DDC889\DDC889Class; class StaticPHPMappingDriverTest extends AbstractMappingDriverTest diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index a284b20bd9f..5c5df952748 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -3,7 +3,6 @@ namespace Doctrine\Tests\ORM\Tools\Export; use Doctrine\Common\EventManager; -use Doctrine\Common\Persistence\Mapping\Driver\PHPDriver; use Doctrine\ORM\Configuration; use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Mapping\GeneratorType; @@ -11,6 +10,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; use Doctrine\ORM\Mapping\Driver\XmlDriver; +use Doctrine\ORM\Mapping\Driver\PHPDriver; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; use Doctrine\ORM\Tools\DisconnectedClassMetadataFactory; From cedfceb4200981ff199199b859f381d99f193d4c Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 26 Jul 2017 11:10:18 -0400 Subject: [PATCH 176/275] Eliminated the concept of ClassMetadataInterface temporarily until refactoring is complete. Replaced ObjectManagerAware with EntityManagerAware sinc eit was bound to the Common\Persistence namespace with hard dependencies. The same happened to PersistentObject. --- lib/Doctrine/ORM/EntityManagerAware.php | 51 +++ .../ORM/Event/LoadClassMetadataEventArgs.php | 49 ++- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 157 +--------- lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php | 2 +- lib/Doctrine/ORM/PersistentObject.php | 293 ++++++++++++++++++ lib/Doctrine/ORM/UnitOfWork.php | 13 +- .../Functional/PersistentCollectionTest.php | 12 +- .../ORM/Functional/PersistentObjectTest.php | 4 +- .../ORM/Functional/Ticket/DDC2231Test.php | 12 +- .../ORM/Functional/Ticket/DDC2359Test.php | 2 +- .../ORM/Mapping/ClassMetadataFactoryTest.php | 2 +- 11 files changed, 407 insertions(+), 190 deletions(-) create mode 100644 lib/Doctrine/ORM/EntityManagerAware.php create mode 100644 lib/Doctrine/ORM/PersistentObject.php diff --git a/lib/Doctrine/ORM/EntityManagerAware.php b/lib/Doctrine/ORM/EntityManagerAware.php new file mode 100644 index 00000000000..bc62ddfc46c --- /dev/null +++ b/lib/Doctrine/ORM/EntityManagerAware.php @@ -0,0 +1,51 @@ +. + */ + +namespace Doctrine\ORM; + +use Doctrine\ORM\Mapping\ClassMetadata; + +/** + * Makes a Persistent Objects aware of its own object-manager. + * + * Using this interface the managing object manager and class metadata instances + * are injected into the persistent object after construction. This allows + * you to implement ActiveRecord functionality on top of the persistence-ignorance + * that Doctrine propagates. + * + * Word of Warning: This is a very powerful hook to change how you can work with your domain models. + * Using this hook will break the Single Responsibility Principle inside your Domain Objects + * and increase the coupling of database and objects. + * + * Every EntityManager has to implement this functionality itself. + * + * @author Benjamin Eberlei + */ +interface EntityManagerAware +{ + /** + * Injects responsible EntityManager and the ClassMetadata into this persistent object. + * + * @param EntityManagerInterface $entityManager + * @param ClassMetadata $classMetadata + * + * @return void + */ + public function injectEntityManager(EntityManagerInterface $entityManager, ClassMetadata $classMetadata) : void; +} diff --git a/lib/Doctrine/ORM/Event/LoadClassMetadataEventArgs.php b/lib/Doctrine/ORM/Event/LoadClassMetadataEventArgs.php index 5df698d6973..858d9bdced0 100644 --- a/lib/Doctrine/ORM/Event/LoadClassMetadataEventArgs.php +++ b/lib/Doctrine/ORM/Event/LoadClassMetadataEventArgs.php @@ -19,28 +19,57 @@ namespace Doctrine\ORM\Event; -use Doctrine\Common\Persistence\Event\LoadClassMetadataEventArgs as BaseLoadClassMetadataEventArgs; +use Doctrine\Common\EventArgs; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\ClassMetadata; /** * Class that holds event arguments for a loadMetadata event. * * @author Jonathan H. Wage * @since 2.0 - * - * Note: method annotations are used instead of method overrides (due to BC policy) - * - * @method __construct(\Doctrine\ORM\Mapping\ClassMetadata $classMetadata, \Doctrine\ORM\EntityManager $objectManager) - * @method \Doctrine\ORM\Mapping\ClassMetadata getClassMetadata() */ -class LoadClassMetadataEventArgs extends BaseLoadClassMetadataEventArgs +class LoadClassMetadataEventArgs extends EventArgs { + /** + * @var ClassMetadata + */ + private $classMetadata; + + /** + * @var EntityManagerInterface + */ + private $entityManager; + + /** + * Constructor. + * + * @param ClassMetadata $classMetadata + * @param EntityManagerInterface $entityManager + */ + public function __construct(ClassMetadata $classMetadata, EntityManagerInterface $entityManager) + { + $this->classMetadata = $classMetadata; + $this->entityManager = $entityManager; + } + + /** + * Retrieves the associated ClassMetadata. + * + * @return ClassMetadata + */ + public function getClassMetadata() : ClassMetadata + { + return $this->classMetadata; + } + /** * Retrieve associated EntityManager. * - * @return \Doctrine\ORM\EntityManager + * @return EntityManagerInterface */ - public function getEntityManager() + public function getEntityManager() : EntityManagerInterface { - return $this->getObjectManager(); + return $this->entityManager; } } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index e819aaefed2..3c3ce22101f 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -45,7 +45,7 @@ * @author Guilherme Blanco * @since 2.0 */ -class ClassMetadata implements TableOwner, \Doctrine\Common\Persistence\Mapping\ClassMetadata +class ClassMetadata implements TableOwner { /** * READ-ONLY: The name of the entity class. @@ -2039,159 +2039,4 @@ private function assertPropertyNotMapped(string $fieldName) // throw MappingException::duplicateProperty($this, $this->embeddedClasses[$fieldName]); // } } - - /** - * {@inheritDoc} - * - * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo) - */ - public function getName() - { - return $this->name; - } - - /** - * {@inheritDoc} - * - * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo) - */ - public function hasAssociation($fieldName) - { - return isset($this->properties[$fieldName]) - && $this->properties[$fieldName] instanceof AssociationMetadata; - } - - /** - * {@inheritDoc} - * - * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo) - */ - public function isSingleValuedAssociation($fieldName) - { - return isset($this->properties[$fieldName]) - && $this->properties[$fieldName] instanceof ToOneAssociationMetadata; - } - - /** - * {@inheritDoc} - * - * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo) - */ - public function isCollectionValuedAssociation($fieldName) - { - return isset($this->properties[$fieldName]) - && $this->properties[$fieldName] instanceof ToManyAssociationMetadata; - } - - /** - * {@inheritDoc} - * - * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo) - */ - public function getFieldNames() - { - $fields = array_filter( - $this->properties, - function (Property $property) { return $property instanceof FieldMetadata; } - ); - - return array_keys($fields); - } - - /** - * {@inheritDoc} - * - * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo) - */ - public function getAssociationNames() - { - $associations = array_filter( - $this->properties, - function (Property $property) { return $property instanceof AssociationMetadata; } - ); - - return array_keys($associations); - } - - /** - * {@inheritDoc} - * - * @throws \InvalidArgumentException - * - * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo) - */ - public function getAssociationTargetClass($assocName) - { - $property = $this->properties[$assocName]; - - if (! ($property instanceof AssociationMetadata)) { - throw new \InvalidArgumentException("Association name expected, '" . $assocName ."' is not an association."); - } - - return $property->getTargetEntity(); - } - - /** - * {@inheritDoc} - * - * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo) - */ - public function isAssociationInverseSide($fieldName) - { - return isset($this->properties[$fieldName]) - && $this->properties instanceof AssociationMetadata - && ! $this->properties[$fieldName]->isOwningSide(); - } - - /** - * {@inheritDoc} - * - * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo) - */ - public function getAssociationMappedByTargetField($fieldName) - { - return $this->properties[$fieldName]->getMappedBy(); - } - - /** - * @param string $targetClass - * - * @return array - * - * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo). - */ - public function getAssociationsByTargetClass($targetClass) - { - $associations = []; - - foreach ($this->properties as $association) { - if (! ($association instanceof AssociationMetadata)) { - continue; - } - - if ($association->getTargetEntity() !== $targetClass) { - continue; - } - - $associations[$association->getName()] = $association; - } - - return $associations; - } - - /** - * Gets the type of a field. - * - * @param string $fieldName - * - * @return \Doctrine\DBAL\Types\Type|string|null - * - * @todo guilhermeblanco Not used anymore. Remove this method (it exists in Persistence repo). - */ - public function getTypeOfField($fieldName) - { - return isset($this->properties[$fieldName]) - ? $this->properties[$fieldName]->getType() - : null; - } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php b/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php index 86f49ce9bae..c75e3f34888 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php @@ -66,6 +66,6 @@ protected function loadMappingFile($file) include $file; - return [$metadata->getName() => $metadata]; + return [$metadata->getClassName() => $metadata]; } } diff --git a/lib/Doctrine/ORM/PersistentObject.php b/lib/Doctrine/ORM/PersistentObject.php new file mode 100644 index 00000000000..64f7307fb57 --- /dev/null +++ b/lib/Doctrine/ORM/PersistentObject.php @@ -0,0 +1,293 @@ +. + */ + +namespace Doctrine\ORM; + +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Collection; +use Doctrine\ORM\Mapping\AssociationMetadata; +use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\ToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; + +/** + * PersistentObject base class that implements getter/setter methods for all mapped fields and associations + * by overriding __call. + * + * This class is a forward compatible implementation of the PersistentObject trait. + * + * Limitations: + * + * 1. All persistent objects have to be associated with a single EntityManager, multiple + * EntityManagers are not supported. You can set the EntityManager with `PersistentObject#setEntityManager()`. + * 2. Setters and getters only work if a ClassMetadata instance was injected into the PersistentObject. + * This is either done on `postLoad` of an object or by accessing the global object manager. + * 3. There are no hooks for setters/getters. Just implement the method yourself instead of relying on __call(). + * 4. Slower than handcoded implementations: An average of 7 method calls per access to a field and 11 for an association. + * 5. Only the inverse side associations get autoset on the owning side as well. Setting objects on the owning side + * will not set the inverse side associations. + * + * @example + * + * PersistentObject::setEntityManager($em); + * + * class Foo extends PersistentObject + * { + * private $id; + * } + * + * $foo = new Foo(); + * $foo->getId(); // method exists through __call + * + * @author Benjamin Eberlei + */ +abstract class PersistentObject implements EntityManagerAware +{ + /** + * @var EntityManagerInterface|null + */ + private static $entityManager = null; + + /** + * @var ClassMetadata|null + */ + private $cm = null; + + /** + * Sets the entity manager responsible for all persistent object base classes. + * + * @param EntityManagerInterface|null $entityManager + * + * @return void + */ + static public function setEntityManager(EntityManagerInterface $entityManager = null) + { + self::$entityManager = $entityManager; + } + + /** + * @return EntityManagerInterface|null + */ + static public function getEntityManager() + { + return self::$entityManager; + } + + /** + * Injects the Doctrine Object Manager. + * + * @param EntityManagerInterface $entityManager + * @param ClassMetadata $classMetadata + * + * @return void + * + * @throws \RuntimeException + */ + public function injectEntityManager(EntityManagerInterface $entityManager, ClassMetadata $classMetadata) : void + { + if ($entityManager !== self::$entityManager) { + throw new \RuntimeException( + "Trying to use PersistentObject with different EntityManager instances. " . + "Was PersistentObject::setEntityManager() called?" + ); + } + + $this->cm = $classMetadata; + } + + /** + * Sets a persistent fields value. + * + * @param string $field + * @param array $args + * + * @return object + * + * @throws \BadMethodCallException When no persistent field exists by that name. + * @throws \InvalidArgumentException When the wrong target object type is passed to an association. + */ + private function set($field, $args) + { + $this->initializeDoctrine(); + + $property = $this->cm->getProperty($field); + + if (! $property) { + throw new \BadMethodCallException("no field with name '".$field."' exists on '".$this->cm->getClassName()."'"); + } + + switch (true) { + case ($property instanceof FieldMetadata && ! $property->isPrimaryKey()): + $this->$field = $args[0]; + break; + + case ($property instanceof ToOneAssociationMetadata): + $targetClassName = $property->getTargetEntity(); + + if ($args[0] !== null && ! ($args[0] instanceof $targetClassName)) { + throw new \InvalidArgumentException("Expected persistent object of type '".$targetClassName."'"); + } + + $this->$field = $args[0]; + $this->completeOwningSide($property, $args[0]); + break; + } + + return $this; + } + + /** + * Gets a persistent field value. + * + * @param string $field + * + * @return mixed + * + * @throws \BadMethodCallException When no persistent field exists by that name. + */ + private function get($field) + { + $this->initializeDoctrine(); + + $property = $this->cm->getProperty($field); + + if (! $property) { + throw new \BadMethodCallException("no field with name '".$field."' exists on '".$this->cm->getClassName()."'"); + } + + return $this->$field; + } + + /** + * If this is an inverse side association, completes the owning side. + * + * @param AssociationMetadata $property + * @param object $targetObject + * + * @return void + */ + private function completeOwningSide(AssociationMetadata $property, $targetObject) + { + // add this object on the owning side as well, for obvious infinite recursion + // reasons this is only done when called on the inverse side. + if ($property->isOwningSide()) { + return; + } + + $mappedByField = $property->getMappedBy(); + $targetMetadata = self::$entityManager->getClassMetadata($property->getTargetEntity()); + $targetProperty = $targetMetadata->getProperty($mappedByField); + $setterMethodName = ($targetProperty instanceof ToManyAssociationMetadata ? 'add' : 'set') . $mappedByField; + + $targetObject->$setterMethodName($this); + } + + /** + * Adds an object to a collection. + * + * @param string $field + * @param array $args + * + * @return object + * + * @throws \BadMethodCallException + * @throws \InvalidArgumentException + */ + private function add($field, $args) + { + $this->initializeDoctrine(); + + $property = $this->cm->getProperty($field); + + if (! $property) { + throw new \BadMethodCallException("no field with name '".$field."' exists on '".$this->cm->getClassName()."'"); + } + + if (! ($property instanceof ToManyAssociationMetadata)) { + throw new \BadMethodCallException("There is no method add".$field."() on ".$this->cm->getClassName()); + } + + $targetClassName = $property->getTargetEntity(); + + if (! ($args[0] instanceof $targetClassName)) { + throw new \InvalidArgumentException("Expected persistent object of type '".$targetClassName."'"); + } + + if (! ($this->$field instanceof Collection)) { + $this->$field = new ArrayCollection($this->$field ?: []); + } + + $this->$field->add($args[0]); + + $this->completeOwningSide($property, $args[0]); + + return $this; + } + + /** + * Initializes Doctrine Metadata for this class. + * + * @return void + * + * @throws \RuntimeException + */ + private function initializeDoctrine() + { + if ($this->cm !== null) { + return; + } + + if (!self::$entityManager) { + throw new \RuntimeException("No runtime entity manager set. Call PersistentObject#setEntityManager()."); + } + + $this->cm = self::$entityManager->getClassMetadata(get_class($this)); + } + + /** + * Magic methods. + * + * @param string $method + * @param array $args + * + * @return mixed + * + * @throws \BadMethodCallException + */ + public function __call($method, $args) + { + $command = substr($method, 0, 3); + $field = lcfirst(substr($method, 3)); + + switch ($command) { + case 'set': + return $this->set($field, $args); + + case 'get': + return $this->get($field); + + case 'add': + return $this->add($field, $args); + + default: + throw new \BadMethodCallException("There is no method ".$method." on ".$this->cm->getClassName()); + } + } +} diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index fc71d6c4fc2..e8a20e70a4e 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -21,7 +21,6 @@ use Doctrine\Common\Collections\Collection; use Doctrine\Common\NotifyPropertyChanged; -use Doctrine\Common\Persistence\ObjectManagerAware; use Doctrine\Common\PropertyChangedListener; use Doctrine\DBAL\LockMode; use Doctrine\Instantiator\Instantiator; @@ -2446,14 +2445,14 @@ public function isCollectionScheduledForDeletion(PersistentCollection $coll) * * @param ClassMetadata $class * - * @return \Doctrine\Common\Persistence\ObjectManagerAware|object + * @return EntityManagerAware|object */ public function newInstance(ClassMetadata $class) { $entity = $this->instantiator->instantiate($class->getClassName()); - if ($entity instanceof \Doctrine\Common\Persistence\ObjectManagerAware) { - $entity->injectObjectManager($this->em, $class); + if ($entity instanceof EntityManagerAware) { + $entity->injectEntityManager($this->em, $class); } return $entity; @@ -2523,9 +2522,9 @@ public function createEntity($className, array $data, &$hints = []) } if ($overrideLocalValues) { - // inject ObjectManager upon refresh. - if ($entity instanceof ObjectManagerAware) { - $entity->injectObjectManager($this->em, $class); + // inject EntityManager upon refresh. + if ($entity instanceof EntityManagerAware) { + $entity->injectEntityManager($this->em, $class); } $this->originalEntityData[$oid] = $data; diff --git a/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionTest.php b/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionTest.php index 9674714e83d..dd1a2bd9509 100644 --- a/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/PersistentCollectionTest.php @@ -4,8 +4,8 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Criteria; -use Doctrine\Common\Persistence\PersistentObject; use Doctrine\ORM\Annotation as ORM; +use Doctrine\ORM\PersistentObject; use Doctrine\Tests\OrmFunctionalTestCase; class PersistentCollectionTest extends OrmFunctionalTestCase @@ -13,17 +13,17 @@ class PersistentCollectionTest extends OrmFunctionalTestCase protected function setUp() { parent::setUp(); + try { - $this->schemaTool->createSchema( - [ + $this->schemaTool->createSchema([ $this->em->getClassMetadata(PersistentCollectionHolder::class), $this->em->getClassMetadata(PersistentCollectionContent::class), - ] - ); + ]); } catch (\Exception $e) { } - PersistentObject::setObjectManager($this->em); + + PersistentObject::setEntityManager($this->em); } public function testPersist() diff --git a/tests/Doctrine/Tests/ORM/Functional/PersistentObjectTest.php b/tests/Doctrine/Tests/ORM/Functional/PersistentObjectTest.php index bb50921ad8b..39e22fa8c54 100644 --- a/tests/Doctrine/Tests/ORM/Functional/PersistentObjectTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/PersistentObjectTest.php @@ -2,7 +2,7 @@ namespace Doctrine\Tests\ORM\Functional; -use Doctrine\Common\Persistence\PersistentObject; +use Doctrine\ORM\PersistentObject; use Doctrine\ORM\Annotation as ORM; use Doctrine\Tests\OrmFunctionalTestCase; @@ -27,7 +27,7 @@ protected function setUp() } catch (\Exception $e) { } - PersistentObject::setObjectManager($this->em); + PersistentObject::setEntityManager($this->em); } public function testPersist() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php index c0f98263efc..d452df76456 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php @@ -2,10 +2,10 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; -use Doctrine\Common\Persistence\Mapping\ClassMetadata; -use Doctrine\Common\Persistence\ObjectManager; -use Doctrine\Common\Persistence\ObjectManagerAware; use Doctrine\ORM\Annotation as ORM; +use Doctrine\ORM\EntityManagerAware; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Proxy\Proxy; /** @@ -16,7 +16,7 @@ class DDC2231Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { parent::setUp(); - + $this->schemaTool->createSchema([ $this->em->getClassMetadata(DDC2231EntityY::class), ]); @@ -45,7 +45,7 @@ public function testInjectObjectManagerInProxyIfInitializedInUow() /** @ORM\Entity @ORM\Table(name="ddc2231_y") */ -class DDC2231EntityY implements ObjectManagerAware +class DDC2231EntityY implements EntityManagerAware { /** * @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue @@ -54,7 +54,7 @@ class DDC2231EntityY implements ObjectManagerAware public $om; - public function injectObjectManager(ObjectManager $objectManager, ClassMetadata $classMetadata) + public function injectEntityManager(EntityManagerInterface $objectManager, ClassMetadata $classMetadata) : void { $this->om = $objectManager; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php index 278eb8f91c6..9bc63af91ca 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php @@ -3,13 +3,13 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; use Doctrine\Common\EventManager; -use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver; use Doctrine\DBAL\Connection; use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManager; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; +use Doctrine\ORM\Mapping\Driver\MappingDriver; use Doctrine\Tests\DoctrineTestCase; /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index c127d405e36..d6a4a734bec 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -413,7 +413,7 @@ public function testFallbackLoadingCausesEventTriggeringThatCanModifyFetchedMeta { $test = $this; - /* @var $metadata \Doctrine\Common\Persistence\Mapping\ClassMetadata */ + /* @var $metadata \Doctrine\ORM\Mapping\ClassMetadata */ $metadata = $this->createMock(ClassMetadata::class); $cmf = new ClassMetadataFactory(); $mockDriver = new MetadataDriverMock(); From b872c9651bb3fca728986056a509f5f95af14367 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 26 Jul 2017 15:23:14 -0400 Subject: [PATCH 177/275] Decoupled Generator and GeneratorStrategy --- .../Configuration/MetadataConfiguration.php | 2 + .../ORM/Configuration/ProxyConfiguration.php | 2 + .../Exporter/ClassMetadataExporter.php | 69 +++++++++------- .../Factory/AbstractClassMetadataFactory.php | 8 +- .../Factory/ClassMetadataGenerator.php | 2 + .../ClassMetadataGeneratorStrategy.php | 4 +- ...leWriterClassMetadataGeneratorStrategy.php | 42 ++++++++++ ...aluatingClassMetadataGeneratorStrategy.php | 5 +- ...eReaderClassMetadataGeneratorStrategy.php} | 6 +- ...leWriterClassMetadataGeneratorStrategy.php | 5 +- .../Proxy/Factory/ProxyDefinitionFactory.php | 46 +++-------- .../ORM/Proxy/Factory/ProxyGenerator.php | 77 ++---------------- .../ORM/Proxy/Factory/StaticProxyFactory.php | 10 +-- ...tionalFileWriterProxyGeneratorStrategy.php | 42 ++++++++++ .../EvaluatingProxyGeneratorStrategy.php | 54 +++++++++++++ .../FileReaderProxyGeneratorStrategy.php | 36 +++++++++ .../FileWriterProxyGeneratorStrategy.php | 78 +++++++++++++++++++ .../Strategy/ProxyGeneratorStrategy.php | 36 +++++++++ 18 files changed, 372 insertions(+), 152 deletions(-) rename lib/Doctrine/ORM/Mapping/Factory/{ => Strategy}/ClassMetadataGeneratorStrategy.php (92%) create mode 100644 lib/Doctrine/ORM/Mapping/Factory/Strategy/ConditionalFileWriterClassMetadataGeneratorStrategy.php rename lib/Doctrine/ORM/Mapping/Factory/{ => Strategy}/EvaluatingClassMetadataGeneratorStrategy.php (91%) rename lib/Doctrine/ORM/Mapping/Factory/{FileLoaderClassMetadataGeneratorStrategy.php => Strategy/FileReaderClassMetadataGeneratorStrategy.php} (87%) rename lib/Doctrine/ORM/Mapping/Factory/{ => Strategy}/FileWriterClassMetadataGeneratorStrategy.php (93%) create mode 100644 lib/Doctrine/ORM/Proxy/Factory/Strategy/ConditionalFileWriterProxyGeneratorStrategy.php create mode 100644 lib/Doctrine/ORM/Proxy/Factory/Strategy/EvaluatingProxyGeneratorStrategy.php create mode 100644 lib/Doctrine/ORM/Proxy/Factory/Strategy/FileReaderProxyGeneratorStrategy.php create mode 100644 lib/Doctrine/ORM/Proxy/Factory/Strategy/FileWriterProxyGeneratorStrategy.php create mode 100644 lib/Doctrine/ORM/Proxy/Factory/Strategy/ProxyGeneratorStrategy.php diff --git a/lib/Doctrine/ORM/Configuration/MetadataConfiguration.php b/lib/Doctrine/ORM/Configuration/MetadataConfiguration.php index fe61a8a9c57..44dcdda1cee 100644 --- a/lib/Doctrine/ORM/Configuration/MetadataConfiguration.php +++ b/lib/Doctrine/ORM/Configuration/MetadataConfiguration.php @@ -153,6 +153,8 @@ public function setNamingStrategy(NamingStrategy $namingStrategy) } /** + * @todo guilhermeblanco Get rid of this method and associated constants. Use the generator strategy instead. + * * @return int */ public function getAutoGenerate() : int diff --git a/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php b/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php index 0a8988db277..6d06ac9275f 100644 --- a/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php +++ b/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php @@ -104,6 +104,8 @@ public function setDirectory(string $directory) } /** + * @todo guilhermeblanco Get rid of this method and associated constants. Use the generator strategy instead. + * * @return int */ public function getAutoGenerate() : int diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php index 53cfe3781cc..6e3568a827a 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php @@ -22,12 +22,7 @@ namespace Doctrine\ORM\Mapping\Exporter; -use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\FieldMetadata; -use Doctrine\ORM\Mapping\MappedSuperClassMetadata; -use Doctrine\ORM\Mapping\Property; -use Doctrine\ORM\Mapping\TableMetadata; -use Doctrine\ORM\Mapping\VersionFieldMetadata; +use Doctrine\ORM\Mapping; class ClassMetadataExporter implements Exporter { @@ -38,7 +33,7 @@ class ClassMetadataExporter implements Exporter */ public function export($value, int $indentationLevel = 0) : string { - /** @var ClassMetadata $value */ + /** @var Mapping\ClassMetadata $value */ $reflectionClass = $value->getReflectionClass(); $namespace = $reflectionClass->getNamespaceName(); $lines = []; @@ -52,7 +47,7 @@ public function export($value, int $indentationLevel = 0) : string } $shortClassName = $reflectionClass->getShortName(); - $extendedClassName = ($value instanceof MappedSuperClassMetadata) + $extendedClassName = ($value instanceof Mapping\MappedSuperClassMetadata) ? 'MappedSuperClassMetadata' : 'ClassMetadata' ; @@ -70,12 +65,12 @@ public function export($value, int $indentationLevel = 0) : string } /** - * @param ClassMetadata $metadata - * @param int $indentationLevel + * @param Mapping\ClassMetadata $metadata + * @param int $indentationLevel * * @return string */ - private function exportClassBody(ClassMetadata $metadata, int $indentationLevel) : string + private function exportClassBody(Mapping\ClassMetadata $metadata, int $indentationLevel) : string { $lines = []; @@ -87,12 +82,12 @@ private function exportClassBody(ClassMetadata $metadata, int $indentationLevel) } /** - * @param ClassMetadata $metadata - * @param int $indentationLevel + * @param Mapping\ClassMetadata $metadata + * @param int $indentationLevel * * @return string */ - private function exportConstructor(ClassMetadata $metadata, int $indentationLevel) : string + private function exportConstructor(Mapping\ClassMetadata $metadata, int $indentationLevel) : string { $indentation = str_repeat(self::INDENTATION, $indentationLevel); $bodyIndentation = str_repeat(self::INDENTATION, $indentationLevel + 1); @@ -107,12 +102,12 @@ private function exportConstructor(ClassMetadata $metadata, int $indentationLeve } /** - * @param ClassMetadata $metadata - * @param int $indentationLevel + * @param Mapping\ClassMetadata $metadata + * @param int $indentationLevel * * @return string */ - private function exportInitialize(ClassMetadata $metadata, int $indentationLevel) : string + private function exportInitialize(Mapping\ClassMetadata $metadata, int $indentationLevel) : string { $indentation = str_repeat(self::INDENTATION, $indentationLevel); $bodyIndentation = str_repeat(self::INDENTATION, $indentationLevel + 1); @@ -173,12 +168,12 @@ private function exportInitialize(ClassMetadata $metadata, int $indentationLevel } /** - * @param ClassMetadata $metadata - * @param int $indentationLevel + * @param Mapping\ClassMetadata $metadata + * @param int $indentationLevel * * @return string */ - private function exportDiscriminatorMetadata(ClassMetadata $metadata, int $indentationLevel) : string + private function exportDiscriminatorMetadata(Mapping\ClassMetadata $metadata, int $indentationLevel) : string { $variableExporter = new VariableExporter(); $discriminatorExporter = new DiscriminatorColumnMetadataExporter(); @@ -200,12 +195,12 @@ private function exportDiscriminatorMetadata(ClassMetadata $metadata, int $inden } /** - * @param TableMetadata $table - * @param int $indentationLevel + * @param Mapping\TableMetadata $table + * @param int $indentationLevel * * @return string */ - private function exportTableMetadata(TableMetadata $table, int $indentationLevel) : string + private function exportTableMetadata(Mapping\TableMetadata $table, int $indentationLevel) : string { $tableExporter = new TableMetadataExporter(); $indentation = str_repeat(self::INDENTATION, $indentationLevel); @@ -214,33 +209,47 @@ private function exportTableMetadata(TableMetadata $table, int $indentationLevel $lines[] = $tableExporter->export($table, $indentationLevel); $lines[] = null; - $lines[] = $objectReference . '->table = ' . $tableExporter::VARIABLE . ';'; + $lines[] = $objectReference . '->setTable(' . $tableExporter::VARIABLE . ');'; return implode(PHP_EOL, $lines); } /** - * @param Property $property - * @param int $indentationLevel + * @param Mapping\Property $property + * @param int $indentationLevel * * @return string */ - private function exportProperty(Property $property, int $indentationLevel) : string + private function exportProperty(Mapping\Property $property, int $indentationLevel) : string { $indentation = str_repeat(self::INDENTATION, $indentationLevel); $objectReference = $indentation . static::VARIABLE; $lines = []; switch (true) { - case ($property instanceof VersionFieldMetadata): + case ($property instanceof Mapping\VersionFieldMetadata): $propertyExporter = new VersionFieldMetadataExporter(); break; - case ($property instanceof FieldMetadata): + case ($property instanceof Mapping\FieldMetadata): $propertyExporter = new FieldMetadataExporter(); break; - // @todo guilhermeblanco Create AssociationMetadataExporters + case ($property instanceof Mapping\OneToOneAssociationMetadata): + $propertyExporter = new OneToOneAssociationMetadataExporter(); + break; + + case ($property instanceof Mapping\OneToManyAssociationMetadata): + $propertyExporter = new OneToManyAssociationMetadataExporter(); + break; + + case ($property instanceof Mapping\ManyToOneAssociationMetadata): + $propertyExporter = new ManyToOneAssociationMetadataExporter(); + break; + + case ($property instanceof Mapping\ManyToManyAssociationMetadata): + $propertyExporter = new ManyToManyAssociationMetadataExporter(); + break; default: $propertyExporter = new TransientMetadataExporter(); diff --git a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php index 3f5e4d23ee5..d03a0d8419c 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php @@ -27,6 +27,7 @@ use Doctrine\ORM\Configuration\MetadataConfiguration; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\Driver\MappingDriver; +use Doctrine\ORM\Mapping\Factory\Strategy\ConditionalFileWriterClassMetadataGeneratorStrategy; use Doctrine\ORM\Reflection\ReflectionService; /** @@ -91,9 +92,10 @@ public function __construct(MetadataConfiguration $configuration) { $mappingDriver = $configuration->getMappingDriver(); $resolver = $configuration->getResolver(); - $autoGenerate = $configuration->getAutoGenerate(); + //$autoGenerate = $configuration->getAutoGenerate(); $generator = new ClassMetadataGenerator($mappingDriver); - $definitionFactory = new ClassMetadataDefinitionFactory($resolver, $generator, $autoGenerate); + $generatorStrategy = new ConditionalFileWriterClassMetadataGeneratorStrategy($generator); + $definitionFactory = new ClassMetadataDefinitionFactory($resolver, $generatorStrategy); $this->mappingDriver = $mappingDriver; $this->definitionFactory = $definitionFactory; @@ -176,7 +178,7 @@ protected function createClassMetadata(ClassMetadataDefinition $definition) : Cl { /** @var ClassMetadata $classMetadata */ $metadataFqcn = $definition->metadataClassName; - $classMetadata = new $metadataFqcn($definition->parent); + $classMetadata = new $metadataFqcn($definition->parentClassMetadata); $classMetadata->wakeupReflection($this->getReflectionService()); diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php index 25e21af5329..71a45ba5090 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php @@ -58,6 +58,8 @@ public function __construct( } /** + * Generates class metadata code. + * * @param ClassMetadataDefinition $definition * * @return string diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGeneratorStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/Strategy/ClassMetadataGeneratorStrategy.php similarity index 92% rename from lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGeneratorStrategy.php rename to lib/Doctrine/ORM/Mapping/Factory/Strategy/ClassMetadataGeneratorStrategy.php index 224144094e1..a716c0bea1b 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/Strategy/ClassMetadataGeneratorStrategy.php @@ -20,7 +20,9 @@ * . */ -namespace Doctrine\ORM\Mapping\Factory; +namespace Doctrine\ORM\Mapping\Factory\Strategy; + +use Doctrine\ORM\Mapping\Factory\ClassMetadataDefinition; interface ClassMetadataGeneratorStrategy { diff --git a/lib/Doctrine/ORM/Mapping/Factory/Strategy/ConditionalFileWriterClassMetadataGeneratorStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/Strategy/ConditionalFileWriterClassMetadataGeneratorStrategy.php new file mode 100644 index 00000000000..e748f0a4fd4 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Factory/Strategy/ConditionalFileWriterClassMetadataGeneratorStrategy.php @@ -0,0 +1,42 @@ +. + */ + +namespace Doctrine\ORM\Mapping\Factory\Strategy; + +use Doctrine\ORM\Mapping\Factory\ClassMetadataDefinition; + +class ConditionalFileWriterClassMetadataGeneratorStrategy extends FileWriterClassMetadataGeneratorStrategy +{ + /** + * {@inheritdoc} + */ + public function generate(string $filePath, ClassMetadataDefinition $definition): void + { + if (! file_exists($filePath)) { + parent::generate($filePath, $definition); + + return; + } + + require $filePath; + } +} diff --git a/lib/Doctrine/ORM/Mapping/Factory/EvaluatingClassMetadataGeneratorStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/Strategy/EvaluatingClassMetadataGeneratorStrategy.php similarity index 91% rename from lib/Doctrine/ORM/Mapping/Factory/EvaluatingClassMetadataGeneratorStrategy.php rename to lib/Doctrine/ORM/Mapping/Factory/Strategy/EvaluatingClassMetadataGeneratorStrategy.php index a782187459f..e2968c56cdc 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/EvaluatingClassMetadataGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/Strategy/EvaluatingClassMetadataGeneratorStrategy.php @@ -20,7 +20,10 @@ * . */ -namespace Doctrine\ORM\Mapping\Factory; +namespace Doctrine\ORM\Mapping\Factory\Strategy; + +use Doctrine\ORM\Mapping\Factory\ClassMetadataDefinition; +use Doctrine\ORM\Mapping\Factory\ClassMetadataGenerator; class EvaluatingClassMetadataGeneratorStrategy implements ClassMetadataGeneratorStrategy { diff --git a/lib/Doctrine/ORM/Mapping/Factory/FileLoaderClassMetadataGeneratorStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/Strategy/FileReaderClassMetadataGeneratorStrategy.php similarity index 87% rename from lib/Doctrine/ORM/Mapping/Factory/FileLoaderClassMetadataGeneratorStrategy.php rename to lib/Doctrine/ORM/Mapping/Factory/Strategy/FileReaderClassMetadataGeneratorStrategy.php index 2422054779b..e66623b10cb 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/FileLoaderClassMetadataGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/Strategy/FileReaderClassMetadataGeneratorStrategy.php @@ -20,9 +20,11 @@ * . */ -namespace Doctrine\ORM\Mapping\Factory; +namespace Doctrine\ORM\Mapping\Factory\Strategy; -class FileLoaderClassMetadataGeneratorStrategy implements ClassMetadataGeneratorStrategy +use Doctrine\ORM\Mapping\Factory\ClassMetadataDefinition; + +class FileReaderClassMetadataGeneratorStrategy implements ClassMetadataGeneratorStrategy { /** * {@inheritdoc} diff --git a/lib/Doctrine/ORM/Mapping/Factory/FileWriterClassMetadataGeneratorStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/Strategy/FileWriterClassMetadataGeneratorStrategy.php similarity index 93% rename from lib/Doctrine/ORM/Mapping/Factory/FileWriterClassMetadataGeneratorStrategy.php rename to lib/Doctrine/ORM/Mapping/Factory/Strategy/FileWriterClassMetadataGeneratorStrategy.php index 064157f6a57..3ac855762dd 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/FileWriterClassMetadataGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/Strategy/FileWriterClassMetadataGeneratorStrategy.php @@ -20,7 +20,10 @@ * . */ -namespace Doctrine\ORM\Mapping\Factory; +namespace Doctrine\ORM\Mapping\Factory\Strategy; + +use Doctrine\ORM\Mapping\Factory\ClassMetadataDefinition; +use Doctrine\ORM\Mapping\Factory\ClassMetadataGenerator; class FileWriterClassMetadataGeneratorStrategy implements ClassMetadataGeneratorStrategy { diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php index 61ae64be680..10b91b0b46d 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php @@ -24,6 +24,7 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Proxy\Factory\Strategy\ProxyGeneratorStrategy; class ProxyDefinitionFactory { @@ -38,9 +39,9 @@ class ProxyDefinitionFactory private $resolver; /** - * @var ProxyGenerator + * @var ProxyGeneratorStrategy */ - private $generator; + private $generatorStrategy; /** * @var int @@ -52,20 +53,17 @@ class ProxyDefinitionFactory * * @param EntityManagerInterface $entityManager * @param ProxyResolver $resolver - * @param ProxyGenerator $generator - * @param int $autoGenerate + * @param ProxyGeneratorStrategy $generatorStrategy */ public function __construct( EntityManagerInterface $entityManager, ProxyResolver $resolver, - ProxyGenerator $generator, - int $autoGenerate + ProxyGeneratorStrategy $generatorStrategy ) { - $this->entityManager = $entityManager; - $this->resolver = $resolver; - $this->generator = $generator; - $this->autoGenerate = $autoGenerate; + $this->entityManager = $entityManager; + $this->resolver = $resolver; + $this->generatorStrategy = $generatorStrategy; } /** @@ -80,33 +78,7 @@ public function build(ClassMetadata $classMetadata) : ProxyDefinition if (! class_exists($definition->proxyClassName, false)) { $proxyClassPath = $this->resolver->resolveProxyClassPath($classMetadata->getClassName()); - switch ($this->autoGenerate) { - case ProxyFactory::AUTOGENERATE_FILE_NOT_EXISTS: - if (! file_exists($proxyClassPath)) { - $this->generator->generate($proxyClassPath, $definition); - } - - require $proxyClassPath; - - break; - - case ProxyFactory::AUTOGENERATE_ALWAYS: - $this->generator->generate($proxyClassPath, $definition); - - require $proxyClassPath; - - break; - - case ProxyFactory::AUTOGENERATE_EVAL: - $this->generator->generate(null, $definition); - - break; - - case ProxyFactory::AUTOGENERATE_NEVER: - require $proxyClassPath; - - break; - } + $this->generatorStrategy->generate($proxyClassPath, $definition); } return $definition; diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php index a16f811ec4f..ff296092dfb 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php @@ -39,20 +39,6 @@ class ProxyGenerator */ const PATTERN_MATCH_ID_METHOD = '((public\s+)?(function\s+%s\s*\(\)\s*)\s*(?::\s*\??\s*\\\\?[a-z_\x7f-\xff][\w\x7f-\xff]*(?:\\\\[a-z_\x7f-\xff][\w\x7f-\xff]*)*\s*)?{\s*return\s*\$this->%s;\s*})i'; - /** - * The namespace that contains all proxy classes. - * - * @var string - */ - private $proxyNamespace; - - /** - * The directory that contains all proxy classes. - * - * @var string - */ - private $proxyDirectory; - /** * Map of callables used to fill in placeholders set in the template. * @@ -169,29 +155,6 @@ public function __load() } '; - /** - * Initializes a new instance of the ProxyFactory class that is - * connected to the given EntityManager. - * - * @param string $proxyDirectory The directory to use for the proxy classes. It must exist. - * @param string $proxyNamespace The namespace to use for the proxy classes. - * - * @throws \InvalidArgumentException - */ - public function __construct($proxyDirectory, $proxyNamespace) - { - if (! $proxyDirectory) { - throw new \InvalidArgumentException('You must configure a proxy directory. See docs for details'); - } - - if (! $proxyNamespace) { - throw new \InvalidArgumentException('You must configure a proxy namespace'); - } - - $this->proxyDirectory = $proxyDirectory; - $this->proxyNamespace = $proxyNamespace; - } - /** * Sets a placeholder to be replaced in the template. * @@ -222,47 +185,17 @@ public function setProxyClassTemplate($proxyClassTemplate) } /** - * Generates a proxy class file. + * Generates proxy class code. * - * @param string|null $proxyClassPath Filename (full path) for the generated class. If null given, eval() is used. - * @param ProxyDefinition $definition Definition for the original ClassMetadata. + * @param ProxyDefinition $definition * - * @throws \InvalidArgumentException - * @throws \UnexpectedValueException + * @return string */ - public function generate(?string $proxyClassPath, ProxyDefinition $definition) + public function generate(ProxyDefinition $definition) : string { $this->verifyClassCanBeProxied($definition->entityClassMetadata); - $proxyCode = $this->renderTemplate($this->proxyClassTemplate, $definition, $this->placeholders); - - if (! $proxyClassPath) { - if ( ! class_exists($definition->proxyClassName)) { - eval(substr($proxyCode, 5)); - } - - return; - } - - $parentDirectory = dirname($proxyClassPath); - - if (! is_dir($parentDirectory) && (false === @mkdir($parentDirectory, 0775, true))) { - throw new \UnexpectedValueException( - sprintf('Your proxy directory "%s" must be writable', $this->proxyDirectory) - ); - } - - if (! is_writable($parentDirectory)) { - throw new \UnexpectedValueException( - sprintf('Your proxy directory "%s" must be writable', $this->proxyDirectory) - ); - } - - $tmpFileName = $proxyClassPath . '.' . uniqid('', true); - - file_put_contents($tmpFileName, $proxyCode); - @chmod($tmpFileName, 0664); - rename($tmpFileName, $proxyClassPath); + return $this->renderTemplate($this->proxyClassTemplate, $definition, $this->placeholders); } /** diff --git a/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php b/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php index c7893d3ea68..38fc69de46d 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php @@ -22,9 +22,9 @@ namespace Doctrine\ORM\Proxy\Factory; -use Doctrine\Common\Persistence\ObjectManagerAware; use Doctrine\ORM\Configuration\ProxyConfiguration; use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Proxy\Factory\Strategy\ConditionalFileWriterProxyGeneratorStrategy; use Doctrine\ORM\Proxy\Proxy; /** @@ -66,14 +66,14 @@ class StaticProxyFactory implements ProxyFactory public function __construct(EntityManagerInterface $entityManager, ProxyConfiguration $configuration) { $resolver = $configuration->getResolver(); - $autoGenerate = $configuration->getAutoGenerate(); - $generator = new ProxyGenerator($configuration->getDirectory(), $configuration->getNamespace()); - $definitionFactory = new ProxyDefinitionFactory($entityManager, $resolver, $generator, $autoGenerate); + //$autoGenerate = $configuration->getAutoGenerate(); + $generator = new ProxyGenerator(); + $generatorStrategy = new Strategy\ConditionalFileWriterProxyGeneratorStrategy($generator); + $definitionFactory = new ProxyDefinitionFactory($entityManager, $resolver, $generatorStrategy); $generator->setPlaceholder('baseProxyInterface', Proxy::class); $this->entityManager = $entityManager; - $this->generator = $generator; $this->definitionFactory = $definitionFactory; } diff --git a/lib/Doctrine/ORM/Proxy/Factory/Strategy/ConditionalFileWriterProxyGeneratorStrategy.php b/lib/Doctrine/ORM/Proxy/Factory/Strategy/ConditionalFileWriterProxyGeneratorStrategy.php new file mode 100644 index 00000000000..7e869362d1e --- /dev/null +++ b/lib/Doctrine/ORM/Proxy/Factory/Strategy/ConditionalFileWriterProxyGeneratorStrategy.php @@ -0,0 +1,42 @@ +. + */ + +namespace Doctrine\ORM\Proxy\Factory\Strategy; + +use Doctrine\ORM\Proxy\Factory\ProxyDefinition; + +class ConditionalFileWriterProxyGeneratorStrategy extends FileWriterProxyGeneratorStrategy +{ + /** + * {@inheritdoc} + */ + public function generate(string $filePath, ProxyDefinition $definition): void + { + if (! file_exists($filePath)) { + parent::generate($filePath, $definition); + + return; + } + + require $filePath; + } +} diff --git a/lib/Doctrine/ORM/Proxy/Factory/Strategy/EvaluatingProxyGeneratorStrategy.php b/lib/Doctrine/ORM/Proxy/Factory/Strategy/EvaluatingProxyGeneratorStrategy.php new file mode 100644 index 00000000000..b06ff6b0762 --- /dev/null +++ b/lib/Doctrine/ORM/Proxy/Factory/Strategy/EvaluatingProxyGeneratorStrategy.php @@ -0,0 +1,54 @@ +. + */ + +namespace Doctrine\ORM\Proxy\Factory\Strategy; + +use Doctrine\ORM\Proxy\Factory\ProxyDefinition; +use Doctrine\ORM\Proxy\Factory\ProxyGenerator; + +class EvaluatingProxyGeneratorStrategy implements ProxyGeneratorStrategy +{ + /** + * @var ProxyGenerator + */ + private $generator; + + /** + * EvaluatingProxyGeneratorStrategy constructor. + * + * @param ProxyGenerator $generator + */ + public function __construct(ProxyGenerator $generator) + { + $this->generator = $generator; + } + + /** + * {@inheritdoc} + */ + public function generate(string $filePath, ProxyDefinition $definition): void + { + $sourceCode = $this->generator->generate($definition); + + eval($sourceCode); + } +} diff --git a/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileReaderProxyGeneratorStrategy.php b/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileReaderProxyGeneratorStrategy.php new file mode 100644 index 00000000000..c36e56d0539 --- /dev/null +++ b/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileReaderProxyGeneratorStrategy.php @@ -0,0 +1,36 @@ +. + */ + +namespace Doctrine\ORM\Proxy\Factory\Strategy; + +use Doctrine\ORM\Proxy\Factory\ProxyDefinition; + +class FileReaderProxyGeneratorStrategy implements ProxyGeneratorStrategy +{ + /** + * {@inheritdoc} + */ + public function generate(string $filePath, ProxyDefinition $definition): void + { + require $filePath; + } +} diff --git a/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileWriterProxyGeneratorStrategy.php b/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileWriterProxyGeneratorStrategy.php new file mode 100644 index 00000000000..a1d95270771 --- /dev/null +++ b/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileWriterProxyGeneratorStrategy.php @@ -0,0 +1,78 @@ +. + */ + +namespace Doctrine\ORM\Proxy\Factory\Strategy; + +use Doctrine\ORM\Proxy\Factory\ProxyDefinition; +use Doctrine\ORM\Proxy\Factory\ProxyGenerator; + +class FileWriterProxyGeneratorStrategy implements ProxyGeneratorStrategy +{ + /** + * @var ProxyGenerator + */ + private $generator; + + /** + * FileWriterProxyGeneratorStrategy constructor. + * + * @param ProxyGenerator $generator + */ + public function __construct(ProxyGenerator $generator) + { + $this->generator = $generator; + } + + /** + * {@inheritdoc} + */ + public function generate(string $filePath, ProxyDefinition $definition): void + { + $sourceCode = $this->generator->generate($definition); + + $this->ensureDirectoryIsReady(dirname($filePath)); + + $tmpFileName = $filePath . '.' . uniqid('', true); + + file_put_contents($tmpFileName, $sourceCode); + @chmod($tmpFileName, 0664); + rename($tmpFileName, $filePath); + + require $filePath; + } + + /** + * @param string $directory + * + * @throws \RuntimeException + */ + private function ensureDirectoryIsReady(string $directory) + { + if (! is_dir($directory) && (false === @mkdir($directory, 0775, true))) { + throw new \RuntimeException(sprintf('Your proxy directory "%s" must be writable', $directory)); + } + + if (! is_writable($directory)) { + throw new \RuntimeException(sprintf('Your proxy directory "%s" must be writable', $directory)); + } + } +} diff --git a/lib/Doctrine/ORM/Proxy/Factory/Strategy/ProxyGeneratorStrategy.php b/lib/Doctrine/ORM/Proxy/Factory/Strategy/ProxyGeneratorStrategy.php new file mode 100644 index 00000000000..bceabb052f1 --- /dev/null +++ b/lib/Doctrine/ORM/Proxy/Factory/Strategy/ProxyGeneratorStrategy.php @@ -0,0 +1,36 @@ +. + */ + +namespace Doctrine\ORM\Proxy\Factory\Strategy; + +use Doctrine\ORM\Proxy\Factory\ProxyDefinition; + +interface ProxyGeneratorStrategy +{ + /** + * @param string $filePath + * @param ProxyDefinition $definition + * + * @return void + */ + public function generate(string $filePath, ProxyDefinition $definition) : void; +} From 46a3bde4cbfcf9c76ec810d3c081cb11b1c5009e Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Thu, 27 Jul 2017 11:06:30 -0400 Subject: [PATCH 178/275] Moved computation of FCQN resolution to Metadata building step. --- lib/Doctrine/ORM/EntityManager.php | 2 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 35 +++++++--- .../ORM/Mapping/ClassMetadataFactory.php | 2 +- .../ORM/Mapping/Driver/AnnotationDriver.php | 30 ++++++-- .../Mapping/Driver/NewAnnotationDriver.php | 16 ++++- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 58 +++++++--------- lib/Doctrine/ORM/Mapping/MappingException.php | 2 +- .../Collection/OneToManyPersister.php | 6 +- .../Entity/JoinedSubclassPersister.php | 14 ++-- .../Entity/SingleTablePersister.php | 4 +- .../Query/Exec/MultiTableDeleteExecutor.php | 6 +- .../Query/Exec/MultiTableUpdateExecutor.php | 7 +- lib/Doctrine/ORM/Query/SqlWalker.php | 10 +-- .../Tools/AttachEntityListenersListener.php | 4 +- .../Command/MappingDescribeCommand.php | 12 ++-- lib/Doctrine/ORM/Tools/SchemaTool.php | 6 +- lib/Doctrine/ORM/Tools/SchemaValidator.php | 2 +- lib/Doctrine/ORM/UnitOfWork.php | 14 ++-- .../Doctrine/Tests/Models/CMS/CmsAddress.php | 19 ++--- .../Tests/Models/Company/CompanyContract.php | 23 ++++--- .../Company/CompanyFlexUltraContract.php | 22 +++--- .../Tests/Models/DDC3579/DDC3579User.php | 2 +- .../Models/DDC5934/DDC5934BaseContract.php | 2 +- .../Tests/Models/DDC964/DDC964User.php | 4 +- .../Mapping/BasicInheritanceMappingTest.php | 8 +-- .../ORM/Mapping/ClassMetadataFactoryTest.php | 8 +-- .../Tests/ORM/Mapping/ClassMetadataTest.php | 69 ++++++++++--------- .../Doctrine.Tests.Models.CMS.CmsAddress.php | 19 ++--- ...e.Tests.Models.Company.CompanyContract.php | 24 ++++--- ...odels.Company.CompanyFlexUltraContract.php | 22 +++--- ...trine.Tests.Models.DDC3579.DDC3579User.php | 2 +- ...sts.Models.DDC5934.DDC5934BaseContract.php | 2 +- ...octrine.Tests.Models.DDC964.DDC964User.php | 4 +- .../php/Doctrine.Tests.ORM.Mapping.PHPSLC.php | 2 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 2 +- 35 files changed, 259 insertions(+), 205 deletions(-) diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 20ae67da8f8..5dd46db40e7 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -526,7 +526,7 @@ public function getReference($entityName, $id) return ($entity instanceof $className) ? $entity : null; } - if ($class->subClasses) { + if ($class->getSubClasses()) { return $this->find($entityName, $sortedId); } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 3c3ce22101f..8553a72fc90 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -109,18 +109,18 @@ class ClassMetadata implements TableOwner private $readOnly = false; /** - * READ-ONLY: The names of the parent classes (ancestors). + * The names of the parent classes (ancestors). * * @var array */ - public $parentClasses = []; + protected $parentClasses = []; /** - * READ-ONLY: The names of all subclasses (descendants). + * The names of all subclasses (descendants). * * @var array */ - public $subClasses = []; + protected $subClasses = []; /** * READ-ONLY: The names of all embedded classes based on properties. @@ -872,8 +872,6 @@ protected function validateAndCompleteAssociationMapping(AssociationMetadata $pr throw MappingException::missingTargetEntity($fieldName); } - $targetEntity = $this->fullyQualifiedClassName($targetEntity); - $property->setSourceEntity($this->name); $property->setOwningSide($property->getMappedBy() === null); $property->setTargetEntity($targetEntity); @@ -1310,6 +1308,8 @@ public function getTemporaryIdTableName() /** * Sets the mapped subclasses of this class. * + * @todo guilhermeblanco Only used for ClassMetadataTest. Remove if possible! + * * @param array $subclasses The names of all mapped subclasses. * * @return void @@ -1317,10 +1317,18 @@ public function getTemporaryIdTableName() public function setSubclasses(array $subclasses) { foreach ($subclasses as $subclass) { - $this->subClasses[] = $this->fullyQualifiedClassName($subclass); + $this->subClasses[] = $subclass; } } + /** + * @return array + */ + public function getSubClasses() : array + { + return $this->subClasses; + } + /** * Sets the parent class names. * Assumes that the class names in the passed array are in the order: @@ -1339,6 +1347,14 @@ public function setParentClasses(array $classNames) } } + /** + * @return array + */ + public function getParentClasses() : array + { + return $this->parentClasses; + } + /** * Sets the inheritance type used by the class and its subclasses. * @@ -1717,7 +1733,7 @@ public function addSqlResultSetMapping(array $resultMapping) */ public function setCustomRepositoryClassName(?string $repositoryClassName) { - $this->customRepositoryClassName = $this->fullyQualifiedClassName($repositoryClassName); + $this->customRepositoryClassName = $repositoryClassName; } /** @@ -1793,7 +1809,6 @@ public function setLifecycleCallbacks(array $callbacks) */ public function addEntityListener($eventName, $class, $method) { - $class = $this->fullyQualifiedClassName($class); $listener = [ 'class' => $class, 'method' => $method, @@ -1869,8 +1884,6 @@ public function setDiscriminatorMap(array $map) */ public function addDiscriminatorMapClass($name, $className) { - $className = $this->fullyQualifiedClassName($className); - $this->discriminatorMap[$name] = $className; if ($this->name === $className) { diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 237a400b389..b1040cbbf65 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -396,7 +396,7 @@ private function addDefaultDiscriminatorMap(ClassMetadata $class) $duplicates[] = $shortName; } - $map[$shortName] = $subClassCandidate; + $map[$shortName] = $class->fullyQualifiedClassName($subClassCandidate); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index add235385cc..18db4259667 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -287,7 +287,9 @@ public function loadMetadataForClass($className, Mapping\ClassMetadata $metadata $entityAnnot = $classAnnotations[Annotation\Entity::class]; if ($entityAnnot->repositoryClass !== null) { - $metadata->setCustomRepositoryClassName($entityAnnot->repositoryClass); + $metadata->setCustomRepositoryClassName( + $metadata->fullyQualifiedClassName($entityAnnot->repositoryClass) + ); } if ($entityAnnot->readOnly) { @@ -299,7 +301,11 @@ public function loadMetadataForClass($className, Mapping\ClassMetadata $metadata case isset($classAnnotations[Annotation\MappedSuperclass::class]): $mappedSuperclassAnnot = $classAnnotations[Annotation\MappedSuperclass::class]; - $metadata->setCustomRepositoryClassName($mappedSuperclassAnnot->repositoryClass); + if ($mappedSuperclassAnnot->repositoryClass !== null) { + $metadata->setCustomRepositoryClassName( + $metadata->fullyQualifiedClassName($mappedSuperclassAnnot->repositoryClass) + ); + } $metadata->isMappedSuperclass = true; $metadata->isEmbeddedClass = false; @@ -415,8 +421,14 @@ public function loadMetadataForClass($className, Mapping\ClassMetadata $metadata // Evaluate DiscriminatorMap annotation if (isset($classAnnotations[Annotation\DiscriminatorMap::class])) { $discriminatorMapAnnotation = $classAnnotations[Annotation\DiscriminatorMap::class]; + $discriminatorMap = array_map( + function ($className) use ($metadata) { + return $metadata->fullyQualifiedClassName($className); + }, + $discriminatorMapAnnotation->value + ); - $metadata->setDiscriminatorMap($discriminatorMapAnnotation->value); + $metadata->setDiscriminatorMap($discriminatorMap); } } } @@ -785,8 +797,9 @@ private function convertReflectionPropertyToOneToOneAssociationMetadata( $fieldName = $reflProperty->getName(); $oneToOneAnnot = $propertyAnnotations[Annotation\OneToOne::class]; $assocMetadata = new Mapping\OneToOneAssociationMetadata($fieldName); + $targetEntity = $metadata->fullyQualifiedClassName($oneToOneAnnot->targetEntity); - $assocMetadata->setTargetEntity($oneToOneAnnot->targetEntity); + $assocMetadata->setTargetEntity($targetEntity); $assocMetadata->setCascade($oneToOneAnnot->cascade); $assocMetadata->setOrphanRemoval($oneToOneAnnot->orphanRemoval); $assocMetadata->setFetchMode($this->getFetchMode($className, $oneToOneAnnot->fetch)); @@ -848,8 +861,9 @@ private function convertReflectionPropertyToManyToOneAssociationMetadata( $fieldName = $reflProperty->getName(); $manyToOneAnnot = $propertyAnnotations[Annotation\ManyToOne::class]; $assocMetadata = new Mapping\ManyToOneAssociationMetadata($fieldName); + $targetEntity = $metadata->fullyQualifiedClassName($manyToOneAnnot->targetEntity); - $assocMetadata->setTargetEntity($manyToOneAnnot->targetEntity); + $assocMetadata->setTargetEntity($targetEntity); $assocMetadata->setCascade($manyToOneAnnot->cascade); $assocMetadata->setFetchMode($this->getFetchMode($className, $manyToOneAnnot->fetch)); @@ -906,8 +920,9 @@ private function convertReflectionPropertyToOneToManyAssociationMetadata( $fieldName = $reflProperty->getName(); $oneToManyAnnot = $propertyAnnotations[Annotation\OneToMany::class]; $assocMetadata = new Mapping\OneToManyAssociationMetadata($fieldName); + $targetEntity = $metadata->fullyQualifiedClassName($oneToManyAnnot->targetEntity); - $assocMetadata->setTargetEntity($oneToManyAnnot->targetEntity); + $assocMetadata->setTargetEntity($targetEntity); $assocMetadata->setCascade($oneToManyAnnot->cascade); $assocMetadata->setOrphanRemoval($oneToManyAnnot->orphanRemoval); $assocMetadata->setFetchMode($this->getFetchMode($className, $oneToManyAnnot->fetch)); @@ -953,8 +968,9 @@ private function convertReflectionPropertyToManyToManyAssociationMetadata( $fieldName = $reflProperty->getName(); $manyToManyAnnot = $propertyAnnotations[Annotation\ManyToMany::class]; $assocMetadata = new Mapping\ManyToManyAssociationMetadata($fieldName); + $targetEntity = $metadata->fullyQualifiedClassName($manyToManyAnnot->targetEntity); - $assocMetadata->setTargetEntity($manyToManyAnnot->targetEntity); + $assocMetadata->setTargetEntity($targetEntity); $assocMetadata->setCascade($manyToManyAnnot->cascade); $assocMetadata->setOrphanRemoval($manyToManyAnnot->orphanRemoval); $assocMetadata->setFetchMode($this->getFetchMode($className, $manyToManyAnnot->fetch)); diff --git a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php index cc30d702b44..9101b4edbcb 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php @@ -225,7 +225,9 @@ private function convertClassAnnotationsToEntityClassMetadata( $classMetadata = new Mapping\ClassMetadata($reflectionClass->getName(), $parent); if ($entityAnnot->repositoryClass !== null) { - $classMetadata->setCustomRepositoryClassName($entityAnnot->repositoryClass); + $classMetadata->setCustomRepositoryClassName( + $classMetadata->fullyQualifiedClassName($entityAnnot->repositoryClass) + ); } if ($entityAnnot->readOnly) { @@ -376,8 +378,14 @@ private function convertClassAnnotationsToEntityClassMetadata( if (isset($classAnnotations[Annotation\DiscriminatorMap::class])) { /** @var Annotation\DiscriminatorMap $discriminatorMapAnnotation */ $discriminatorMapAnnotation = $classAnnotations[Annotation\DiscriminatorMap::class]; + $discriminatorMap = array_map( + function ($className) use ($classMetadata) { + return $classMetadata->fullyQualifiedClassName($className); + }, + $discriminatorMapAnnotation->value + ); - $classMetadata->setDiscriminatorMap($discriminatorMapAnnotation->value); + $classMetadata->setDiscriminatorMap($discriminatorMap); } } } @@ -403,7 +411,9 @@ private function convertClassAnnotationsToMappedSuperClassMetadata( $classMetadata = new Mapping\MappedSuperClassMetadata($reflectionClass->getName(), $parent); if ($mappedSuperclassAnnot->repositoryClass !== null) { - $classMetadata->setCustomRepositoryClassName($mappedSuperclassAnnot->repositoryClass); + $classMetadata->setCustomRepositoryClassName( + $classMetadata->fullyQualifiedClassName($mappedSuperclassAnnot->repositoryClass) + ); } return $classMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 9bd4e87f6fc..9c0cfab9419 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -57,15 +57,21 @@ public function loadMetadataForClass($className, Mapping\ClassMetadata $metadata if ($xmlRoot->getName() === 'entity') { if (isset($xmlRoot['repository-class'])) { - $metadata->setCustomRepositoryClassName((string) $xmlRoot['repository-class']); + $metadata->setCustomRepositoryClassName( + $metadata->fullyQualifiedClassName((string) $xmlRoot['repository-class']) + ); } + if (isset($xmlRoot['read-only']) && $this->evaluateBoolean($xmlRoot['read-only'])) { $metadata->asReadOnly(); } } else if ($xmlRoot->getName() === 'mapped-superclass') { - $metadata->setCustomRepositoryClassName( - isset($xmlRoot['repository-class']) ? (string) $xmlRoot['repository-class'] : null - ); + if (isset($xmlRoot['repository-class'])) { + $metadata->setCustomRepositoryClassName( + $metadata->fullyQualifiedClassName((string) $xmlRoot['repository-class']) + ); + } + $metadata->isMappedSuperclass = true; } else if ($xmlRoot->getName() === 'embeddable') { $metadata->isEmbeddedClass = true; @@ -239,7 +245,7 @@ public function loadMetadataForClass($className, Mapping\ClassMetadata $metadata $map = []; foreach ($xmlRoot->{'discriminator-map'}->{'discriminator-mapping'} as $discrMapElement) { - $map[(string) $discrMapElement['value']] = (string) $discrMapElement['class']; + $map[(string) $discrMapElement['value']] = $metadata->fullyQualifiedClassName((string) $discrMapElement['class']); } $metadata->setDiscriminatorMap($map); @@ -343,9 +349,10 @@ public function loadMetadataForClass($className, Mapping\ClassMetadata $metadata // Evaluate mappings if (isset($xmlRoot->{'one-to-one'})) { foreach ($xmlRoot->{'one-to-one'} as $oneToOneElement) { - $association = new Mapping\OneToOneAssociationMetadata((string) $oneToOneElement['field']); + $association = new Mapping\OneToOneAssociationMetadata((string) $oneToOneElement['field']); + $targetEntity = $metadata->fullyQualifiedClassName((string) $oneToOneElement['target-entity']); - $association->setTargetEntity((string) $oneToOneElement['target-entity']); + $association->setTargetEntity($targetEntity); if (isset($associationIds[$association->getName()])) { $association->setPrimaryKey(true); @@ -403,9 +410,10 @@ public function loadMetadataForClass($className, Mapping\ClassMetadata $metadata // Evaluate mappings if (isset($xmlRoot->{'one-to-many'})) { foreach ($xmlRoot->{'one-to-many'} as $oneToManyElement) { - $association = new Mapping\OneToManyAssociationMetadata((string) $oneToManyElement['field']); + $association = new Mapping\OneToManyAssociationMetadata((string) $oneToManyElement['field']); + $targetEntity = $metadata->fullyQualifiedClassName((string) $oneToManyElement['target-entity']); - $association->setTargetEntity((string) $oneToManyElement['target-entity']); + $association->setTargetEntity($targetEntity); $association->setMappedBy((string) $oneToManyElement['mapped-by']); if (isset($oneToManyElement['fetch'])) { @@ -456,9 +464,10 @@ public function loadMetadataForClass($className, Mapping\ClassMetadata $metadata // Evaluate mappings if (isset($xmlRoot->{'many-to-one'})) { foreach ($xmlRoot->{'many-to-one'} as $manyToOneElement) { - $association = new Mapping\ManyToOneAssociationMetadata((string) $manyToOneElement['field']); + $association = new Mapping\ManyToOneAssociationMetadata((string) $manyToOneElement['field']); + $targetEntity = $metadata->fullyQualifiedClassName((string) $manyToOneElement['target-entity']); - $association->setTargetEntity((string) $manyToOneElement['target-entity']); + $association->setTargetEntity($targetEntity); if (isset($associationIds[$association->getName()])) { $association->setPrimaryKey(true); @@ -508,9 +517,10 @@ public function loadMetadataForClass($className, Mapping\ClassMetadata $metadata // Evaluate mappings if (isset($xmlRoot->{'many-to-many'})) { foreach ($xmlRoot->{'many-to-many'} as $manyToManyElement) { - $association = new Mapping\ManyToManyAssociationMetadata((string) $manyToManyElement['field']); + $association = new Mapping\ManyToManyAssociationMetadata((string) $manyToManyElement['field']); + $targetEntity = $metadata->fullyQualifiedClassName((string) $manyToManyElement['target-entity']); - $association->setTargetEntity((string) $manyToManyElement['target-entity']); + $association->setTargetEntity($targetEntity); if (isset($manyToManyElement['fetch'])) { $association->setFetchMode( @@ -905,28 +915,6 @@ private function getMethodCallbacks(\ReflectionMethod $method) }); } - /** - * Parse / Normalize the cache configuration - * - * @param SimpleXMLElement $cacheMapping - * - * @return array - */ - private function cacheToArray(SimpleXMLElement $cacheMapping) - { - $region = isset($cacheMapping['region']) ? (string) $cacheMapping['region'] : null; - $usage = isset($cacheMapping['usage']) ? strtoupper($cacheMapping['usage']) : null; - - if ($usage) { - $usage = constant(sprintf('%s::%s', Mapping\CacheUsage::class, $usage)); - } - - return [ - 'usage' => $usage, - 'region' => $region, - ]; - } - /** * Gathers a list of cascade options found in the given cascade element. * diff --git a/lib/Doctrine/ORM/Mapping/MappingException.php b/lib/Doctrine/ORM/Mapping/MappingException.php index f42c34b4b33..743a4714f37 100644 --- a/lib/Doctrine/ORM/Mapping/MappingException.php +++ b/lib/Doctrine/ORM/Mapping/MappingException.php @@ -781,7 +781,7 @@ public static function compositeKeyAssignedIdGeneratorRequired($className) */ public static function invalidTargetEntityClass($targetEntity, $sourceEntity, $associationName) { - return new self("The target-entity " . $targetEntity . " cannot be found in '" . $sourceEntity."#".$associationName."'."); + return new self("The target-entity '" . $targetEntity . "' cannot be found in '" . $sourceEntity."#".$associationName."'."); } /** diff --git a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php index c0af16e7e1f..64dead81d10 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php @@ -271,7 +271,11 @@ private function deleteJoinedEntityCollection(PersistentCollection $collection) $numDeleted = $this->conn->executeUpdate($statement, $parameters); // 3) Delete records on each table in the hierarchy - $classNames = array_merge($targetClass->parentClasses, [$targetClass->getClassName()], $targetClass->subClasses); + $classNames = array_merge( + $targetClass->getParentClasses(), + [$targetClass->getClassName()], + $targetClass->getSubClasses() + ); foreach (array_reverse($classNames) as $className) { $parentClass = $this->em->getClassMetadata($className); diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index 46c8293d8c9..e857841cee7 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -68,7 +68,7 @@ public function insert($entity) $subTableStmts[$this->class->getTableName()] = $this->conn->prepare($this->getInsertSQL()); } - foreach ($this->class->parentClasses as $parentClassName) { + foreach ($this->class->getParentClasses() as $parentClassName) { $parentClass = $this->em->getClassMetadata($parentClassName); $parentTableName = $parentClass->getTableName(); @@ -213,7 +213,7 @@ public function delete($entity) $affectedRows = $this->conn->delete($rootTable, $id); - foreach ($this->class->parentClasses as $parentClass) { + foreach ($this->class->getParentClasses() as $parentClass) { $parentMetadata = $this->em->getClassMetadata($parentClass); $parentTable = $parentMetadata->table->getQuotedQualifiedName($this->platform); @@ -330,7 +330,7 @@ protected function getLockTablesSql($lockMode) $baseTableAlias = $this->getSQLTableAlias($this->class->getTableName()); // INNER JOIN parent tables - foreach ($this->class->parentClasses as $parentClassName) { + foreach ($this->class->getParentClasses() as $parentClassName) { $conditions = []; $parentClass = $this->em->getClassMetadata($parentClassName); $tableName = $parentClass->table->getQuotedQualifiedName($this->platform); @@ -405,7 +405,7 @@ protected function getSelectColumnsSQL() ); // sub tables - foreach ($this->class->subClasses as $subClassName) { + foreach ($this->class->getSubClasses() as $subClassName) { $subClass = $this->em->getClassMetadata($subClassName); // Add columns @@ -450,7 +450,7 @@ protected function getInsertColumnList() { // Identifier columns must always come first in the column list of subclasses. $columns = []; - $parentColumns = $this->class->parentClasses + $parentColumns = $this->class->getParentClasses() ? $this->class->getIdentifierColumns($this->em) : []; @@ -527,7 +527,7 @@ private function getJoinSql($baseTableAlias) $identifierColumns = $this->class->getIdentifierColumns($this->em); // INNER JOIN parent tables - foreach ($this->class->parentClasses as $parentClassName) { + foreach ($this->class->getParentClasses() as $parentClassName) { $conditions = []; $parentClass = $this->em->getClassMetadata($parentClassName); $tableName = $parentClass->table->getQuotedQualifiedName($this->platform); @@ -544,7 +544,7 @@ private function getJoinSql($baseTableAlias) } // OUTER JOIN sub tables - foreach ($this->class->subClasses as $subClassName) { + foreach ($this->class->getSubClasses() as $subClassName) { $conditions = []; $subClass = $this->em->getClassMetadata($subClassName); $tableName = $subClass->table->getQuotedQualifiedName($this->platform); diff --git a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php index 779b6031091..3a0cfdf1efd 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php @@ -67,7 +67,7 @@ protected function getSelectColumnsSQL() $columnList[] = $discrColumnType->convertToDatabaseValueSQL($tableAlias . '.' . $quotedColumnName, $this->platform); // Append subclass columns - foreach ($this->class->subClasses as $subClassName) { + foreach ($this->class->getSubClasses() as $subClassName) { $subClass = $this->em->getClassMetadata($subClassName); // Subclass columns @@ -171,7 +171,7 @@ protected function getSelectConditionDiscriminatorValueSQL() $discrValues = array_flip($this->class->discriminatorMap); - foreach ($this->class->subClasses as $subclassName) { + foreach ($this->class->getSubClasses() as $subclassName) { $values[] = $this->conn->quote($discrValues[$subclassName]); } diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php index 150f16eaf08..ba4a82caafc 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php @@ -92,7 +92,11 @@ public function __construct(AST\Node $AST, $sqlWalker) $idSubselect = 'SELECT ' . $idColumnNameList . ' FROM ' . $tempTable; // 3. Create and store DELETE statements - $classNames = array_merge($primaryClass->parentClasses, [$primaryClass->getClassName()], $primaryClass->subClasses); + $classNames = array_merge( + $primaryClass->getParentClasses(), + [$primaryClass->getClassName()], + $primaryClass->getSubClasses() + ); foreach (array_reverse($classNames) as $className) { $parentClass = $em->getClassMetadata($className); diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php index 5f518f9d747..ec5e5fb8d46 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php @@ -99,7 +99,12 @@ public function __construct(AST\Node $AST, $sqlWalker) $idSubselect = 'SELECT ' . $idColumnNameList . ' FROM ' . $tempTable; // 3. Create and store UPDATE statements - $classNames = array_merge($primaryClass->parentClasses, [$primaryClass->getClassName()], $primaryClass->subClasses); + $classNames = array_merge( + $primaryClass->getParentClasses(), + [$primaryClass->getClassName()], + $primaryClass->getSubClasses() + ); + $i = -1; foreach (array_reverse($classNames) as $className) { diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index ced21dd5224..59d8dc343f9 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -342,7 +342,7 @@ private function generateClassTableInheritanceJoins($class, $dqlAlias) $baseTableAlias = $this->getSQLTableAlias($class->getTableName(), $dqlAlias); // INNER JOIN parent class tables - foreach ($class->parentClasses as $parentClassName) { + foreach ($class->getParentClasses() as $parentClassName) { $parentClass = $this->em->getClassMetadata($parentClassName); $tableName = $parentClass->table->getQuotedQualifiedName($this->platform); $tableAlias = $this->getSQLTableAlias($parentClass->getTableName(), $dqlAlias); @@ -373,7 +373,7 @@ private function generateClassTableInheritanceJoins($class, $dqlAlias) } // LEFT JOIN child class tables - foreach ($class->subClasses as $subClassName) { + foreach ($class->getSubClasses() as $subClassName) { $subClass = $this->em->getClassMetadata($subClassName); $tableName = $subClass->table->getQuotedQualifiedName($this->platform); $tableAlias = $this->getSQLTableAlias($subClass->getTableName(), $dqlAlias); @@ -454,7 +454,7 @@ private function generateDiscriminatorColumnConditionSQL(array $dqlAliases) $values[] = $conn->quote($class->discriminatorValue); } - foreach ($class->subClasses as $subclassName) { + foreach ($class->getSubClasses() as $subclassName) { $values[] = $conn->quote($this->em->getClassMetadata($subclassName)->discriminatorValue); } @@ -803,7 +803,7 @@ public function walkSelectClause($selectClause) } // Add foreign key columns of subclasses - foreach ($class->subClasses as $subClassName) { + foreach ($class->getSubClasses() as $subClassName) { $subClass = $this->em->getClassMetadata($subClassName); $sqlTableAlias = $this->getSQLTableAlias($subClass->getTableName(), $dqlAlias); @@ -1460,7 +1460,7 @@ public function walkSelectExpression($selectExpression) // 2) on Class Table Inheritance only if partial objects are disallowed, // since it requires outer joining subtables. if ($class->inheritanceType === InheritanceType::SINGLE_TABLE || ! $this->query->getHint(Query::HINT_FORCE_PARTIAL_LOAD)) { - foreach ($class->subClasses as $subClassName) { + foreach ($class->getSubClasses() as $subClassName) { $subClass = $this->em->getClassMetadata($subClassName); foreach ($subClass->getProperties() as $fieldName => $property) { diff --git a/lib/Doctrine/ORM/Tools/AttachEntityListenersListener.php b/lib/Doctrine/ORM/Tools/AttachEntityListenersListener.php index 53cbc1d6962..dab12fe98d7 100644 --- a/lib/Doctrine/ORM/Tools/AttachEntityListenersListener.php +++ b/lib/Doctrine/ORM/Tools/AttachEntityListenersListener.php @@ -71,7 +71,9 @@ public function loadClassMetadata(LoadClassMetadataEventArgs $event) } foreach ($this->entityListeners[$metadata->getClassName()] as $listener) { - $metadata->addEntityListener($listener['event'], $listener['class'], $listener['method']); + $listenerClassName = $metadata->fullyQualifiedClassName($listener['class']); + + $metadata->addEntityListener($listener['event'], $listenerClassName, $listener['method']); } unset($this->entityListeners[$metadata->getClassName()]); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index 9c4b012c6ba..ab262d54a14 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -98,13 +98,13 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage $this->formatField('Custom repository class', $metadata->getCustomRepositoryClassName()), $this->formatField('Mapped super class?', $metadata->isMappedSuperclass), $this->formatField('Embedded class?', $metadata->isEmbeddedClass), - $this->formatField('Parent classes', $metadata->parentClasses), - $this->formatField('Sub classes', $metadata->subClasses), - $this->formatField('Embedded classes', $metadata->subClasses), + $this->formatField('Parent classes', $metadata->getParentClasses()), + $this->formatField('Sub classes', $metadata->getSubClasses()), + $this->formatField('Embedded classes', $metadata->getSubClasses()), $this->formatField('Named queries', $metadata->getNamedQueries()), - $this->formatField('Named native queries', $metadata->namedNativeQueries), - $this->formatField('SQL result set mappings', $metadata->sqlResultSetMappings), - $this->formatField('Identifier', $metadata->identifier), + $this->formatField('Named native queries', $metadata->getNamedNativeQueries()), + $this->formatField('SQL result set mappings', $metadata->getSqlResultSetMappings()), + $this->formatField('Identifier', $metadata->getIdentifier()), $this->formatField('Inheritance type', $metadata->inheritanceType), $this->formatField('Discriminator column', '') ], diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 3d0adaa4e9a..0a6d75657da 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -172,12 +172,12 @@ public function getSchemaFromMetadata(array $classes) $this->addDiscriminatorColumnDefinition($class, $table); // Aggregate all the information from all classes in the hierarchy - foreach ($class->parentClasses as $parentClassName) { + foreach ($class->getParentClasses() as $parentClassName) { // Parent class information is already contained in this class $processedClasses[$parentClassName] = true; } - foreach ($class->subClasses as $subClassName) { + foreach ($class->getSubClasses() as $subClassName) { $subClass = $this->em->getClassMetadata($subClassName); $this->gatherColumns($subClass, $table); @@ -462,7 +462,7 @@ private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Tabl ], ]; - if ($classMetadata->inheritanceType === InheritanceType::SINGLE_TABLE && count($classMetadata->parentClasses) > 0) { + if ($classMetadata->inheritanceType === InheritanceType::SINGLE_TABLE && count($classMetadata->getParentClasses()) > 0) { $options['notnull'] = false; } diff --git a/lib/Doctrine/ORM/Tools/SchemaValidator.php b/lib/Doctrine/ORM/Tools/SchemaValidator.php index 1d84c1e3cce..d0b91f73e62 100644 --- a/lib/Doctrine/ORM/Tools/SchemaValidator.php +++ b/lib/Doctrine/ORM/Tools/SchemaValidator.php @@ -103,7 +103,7 @@ public function validateClass(ClassMetadata $class) $ce = array_merge($ce, $this->validateAssociation($class, $association)); } - foreach ($class->subClasses as $subClass) { + foreach ($class->getSubClasses() as $subClass) { if (!in_array($class->getClassName(), class_parents($subClass))) { $message = "According to the discriminator map class, '%s' has to be a child of '%s', but these entities are not related through inheritance."; diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index e8a20e70a4e..0425a4ad8f2 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -1132,11 +1132,11 @@ function (JoinColumnMetadata $joinColumn) { return $joinColumn->isNullable(); } $calc->addDependency($targetClass->getClassName(), $class->getClassName(), $weight); // If the target class has mapped subclasses, these share the same dependency. - if ( ! $targetClass->subClasses) { + if ( ! $targetClass->getSubClasses()) { continue; } - foreach ($targetClass->subClasses as $subClassName) { + foreach ($targetClass->getSubClasses() as $subClassName) { $targetSubClass = $this->em->getClassMetadata($subClassName); if ( ! $calc->hasNode($subClassName)) { @@ -1215,7 +1215,7 @@ public function isScheduledForInsert($entity) * * @throws ORMInvalidArgumentException */ - public function scheduleForUpdate($entity) + public function scheduleForUpdate($entity) : void { $oid = spl_object_hash($entity); @@ -1246,7 +1246,7 @@ public function scheduleForUpdate($entity) * * @return void */ - public function scheduleExtraUpdate($entity, array $changeset) + public function scheduleExtraUpdate($entity, array $changeset) : void { $oid = spl_object_hash($entity); $extraUpdate = [$entity, $changeset]; @@ -1269,7 +1269,7 @@ public function scheduleExtraUpdate($entity, array $changeset) * * @return boolean */ - public function isScheduledForUpdate($entity) + public function isScheduledForUpdate($entity) : bool { return isset($this->entityUpdates[spl_object_hash($entity)]); } @@ -2707,7 +2707,7 @@ public function createEntity($className, array $data, &$hints = []) break; - case ($targetClass->subClasses): + case ($targetClass->getSubClasses()): // If it might be a subtype, it can not be lazy. There isn't even // a way to solve this with deferred eager loading, which means putting // an entity with subclasses at a *-to-one location is really bad! (performance-wise) @@ -3370,7 +3370,7 @@ private function mergeEntityStateIntoManagedCopy($entity, $managedCopy) $targetClass = $this->em->getClassMetadata($targetEntity); $relatedId = $targetClass->getIdentifierValues($other); - if ($targetClass->subClasses) { + if ($targetClass->getSubClasses()) { $other = $this->em->find($targetClass->getClassName(), $relatedId); } else { $other = $this->em->getProxyFactory()->getProxy($targetEntity, $relatedId); diff --git a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php index 64bd395a9d9..a03152f016b 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php @@ -5,6 +5,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping; +use Doctrine\Tests\Models\CMS\CmsAddressListener; /** * CmsAddress @@ -166,7 +167,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association = new Mapping\OneToOneAssociationMetadata('user'); $association->setJoinColumns($joinColumns); - $association->setTargetEntity('CmsUser'); + $association->setTargetEntity(CmsUser::class); $metadata->addProperty($association); @@ -242,16 +243,16 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) ] ); - $metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, 'CmsAddressListener', 'postPersist'); - $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, 'CmsAddressListener', 'prePersist'); + $metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, CmsAddressListener::class, 'postPersist'); + $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, CmsAddressListener::class, 'prePersist'); - $metadata->addEntityListener(\Doctrine\ORM\Events::postUpdate, 'CmsAddressListener', 'postUpdate'); - $metadata->addEntityListener(\Doctrine\ORM\Events::preUpdate, 'CmsAddressListener', 'preUpdate'); + $metadata->addEntityListener(\Doctrine\ORM\Events::postUpdate, CmsAddressListener::class, 'postUpdate'); + $metadata->addEntityListener(\Doctrine\ORM\Events::preUpdate, CmsAddressListener::class, 'preUpdate'); - $metadata->addEntityListener(\Doctrine\ORM\Events::postRemove, 'CmsAddressListener', 'postRemove'); - $metadata->addEntityListener(\Doctrine\ORM\Events::preRemove, 'CmsAddressListener', 'preRemove'); + $metadata->addEntityListener(\Doctrine\ORM\Events::postRemove, CmsAddressListener::class, 'postRemove'); + $metadata->addEntityListener(\Doctrine\ORM\Events::preRemove, CmsAddressListener::class, 'preRemove'); - $metadata->addEntityListener(\Doctrine\ORM\Events::preFlush, 'CmsAddressListener', 'preFlush'); - $metadata->addEntityListener(\Doctrine\ORM\Events::postLoad, 'CmsAddressListener', 'postLoad'); + $metadata->addEntityListener(\Doctrine\ORM\Events::preFlush, CmsAddressListener::class, 'preFlush'); + $metadata->addEntityListener(\Doctrine\ORM\Events::postLoad, CmsAddressListener::class, 'postLoad'); } } diff --git a/tests/Doctrine/Tests/Models/Company/CompanyContract.php b/tests/Doctrine/Tests/Models/Company/CompanyContract.php index 7b564cc2a85..73d28b6f95c 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyContract.php @@ -5,6 +5,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping; +use Doctrine\Tests\Models\Company\CompanyContractListener; /** * @ORM\Entity @@ -165,22 +166,22 @@ static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadat $metadata->setDiscriminatorMap( [ - "fix" => "CompanyFixContract", - "flexible" => "CompanyFlexContract", - "flexultra" => "CompanyFlexUltraContract" + "fix" => CompanyFixContract::class, + "flexible" => CompanyFlexContract::class, + "flexultra" => CompanyFlexUltraContract::class ] ); - $metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, 'CompanyContractListener', 'postPersistHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, 'CompanyContractListener', 'prePersistHandler'); + $metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, CompanyContractListener::class, 'postPersistHandler'); + $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, CompanyContractListener::class, 'prePersistHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::postUpdate, 'CompanyContractListener', 'postUpdateHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::preUpdate, 'CompanyContractListener', 'preUpdateHandler'); + $metadata->addEntityListener(\Doctrine\ORM\Events::postUpdate, CompanyContractListener::class, 'postUpdateHandler'); + $metadata->addEntityListener(\Doctrine\ORM\Events::preUpdate, CompanyContractListener::class, 'preUpdateHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::postRemove, 'CompanyContractListener', 'postRemoveHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::preRemove, 'CompanyContractListener', 'preRemoveHandler'); + $metadata->addEntityListener(\Doctrine\ORM\Events::postRemove, CompanyContractListener::class, 'postRemoveHandler'); + $metadata->addEntityListener(\Doctrine\ORM\Events::preRemove, CompanyContractListener::class, 'preRemoveHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::preFlush, 'CompanyContractListener', 'preFlushHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::postLoad, 'CompanyContractListener', 'postLoadHandler'); + $metadata->addEntityListener(\Doctrine\ORM\Events::preFlush, CompanyContractListener::class, 'preFlushHandler'); + $metadata->addEntityListener(\Doctrine\ORM\Events::postLoad, CompanyContractListener::class, 'postLoadHandler'); } } diff --git a/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php b/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php index 955f551e0d8..94f441eed4f 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php @@ -5,6 +5,8 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping; +use Doctrine\Tests\Models\Company\CompanyContractListener; +use Doctrine\Tests\Models\Company\CompanyFlexUltraContractListener; /** * @ORM\Entity @@ -40,19 +42,19 @@ static public function loadMetadata(Mapping\ClassMetadata $metadata) $metadata->addProperty($fieldMetadata); - $metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, 'CompanyContractListener', 'postPersistHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, 'CompanyContractListener', 'prePersistHandler'); + $metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, CompanyContractListener::class, 'postPersistHandler'); + $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, CompanyContractListener::class, 'prePersistHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::postUpdate, 'CompanyContractListener', 'postUpdateHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::preUpdate, 'CompanyContractListener', 'preUpdateHandler'); + $metadata->addEntityListener(\Doctrine\ORM\Events::postUpdate, CompanyContractListener::class, 'postUpdateHandler'); + $metadata->addEntityListener(\Doctrine\ORM\Events::preUpdate, CompanyContractListener::class, 'preUpdateHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::postRemove, 'CompanyContractListener', 'postRemoveHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::preRemove, 'CompanyContractListener', 'preRemoveHandler'); + $metadata->addEntityListener(\Doctrine\ORM\Events::postRemove, CompanyContractListener::class, 'postRemoveHandler'); + $metadata->addEntityListener(\Doctrine\ORM\Events::preRemove, CompanyContractListener::class, 'preRemoveHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::preFlush, 'CompanyContractListener', 'preFlushHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::postLoad, 'CompanyContractListener', 'postLoadHandler'); + $metadata->addEntityListener(\Doctrine\ORM\Events::preFlush, CompanyContractListener::class, 'preFlushHandler'); + $metadata->addEntityListener(\Doctrine\ORM\Events::postLoad, CompanyContractListener::class, 'postLoadHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, 'CompanyFlexUltraContractListener', 'prePersistHandler1'); - $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, 'CompanyFlexUltraContractListener', 'prePersistHandler2'); + $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, CompanyFlexUltraContractListener::class, 'prePersistHandler1'); + $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, CompanyFlexUltraContractListener::class, 'prePersistHandler2'); } } diff --git a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php index 3f0265e3846..06a19ad00a5 100644 --- a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php +++ b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php @@ -104,7 +104,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association = new Mapping\ManyToManyAssociationMetadata('groups'); - $association->setTargetEntity('DDC3579Group'); + $association->setTargetEntity(DDC3579Group::class); $metadata->addProperty($association); } diff --git a/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php b/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php index a1d9fdeb2a9..ae2e859cd43 100644 --- a/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php +++ b/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php @@ -44,7 +44,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association = new Mapping\ManyToManyAssociationMetadata('members'); - $association->setTargetEntity('DDC5934Member'); + $association->setTargetEntity(DDC5934Member::class); $metadata->addProperty($association); } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php index da71d2a0e31..ac85e410b66 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php @@ -140,7 +140,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association = new Mapping\ManyToOneAssociationMetadata('address'); $association->setJoinColumns($joinColumns); - $association->setTargetEntity('DDC964Address'); + $association->setTargetEntity(DDC964Address::class); $association->setCascade(['persist', 'merge']); $metadata->addProperty($association); @@ -165,7 +165,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $association = new Mapping\ManyToManyAssociationMetadata('groups'); $association->setJoinTable($joinTable); - $association->setTargetEntity('DDC964Group'); + $association->setTargetEntity(DDC964Group::class); $association->setInversedBy('users'); $association->setCascade(['persist', 'merge', 'detach']); diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index 316d005f617..09ccc40aab3 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -42,8 +42,8 @@ public function testGetMetadataForSubclassWithTransientBaseClass() { $class = $this->cmf->getMetadataFor(EntitySubClass::class); - self::assertEmpty($class->subClasses); - self::assertEmpty($class->parentClasses); + self::assertEmpty($class->getSubClasses()); + self::assertEmpty($class->getParentClasses()); self::assertNotNull($class->getProperty('id')); self::assertNotNull($class->getProperty('name')); @@ -53,8 +53,8 @@ public function testGetMetadataForSubclassWithMappedSuperclass() { $class = $this->cmf->getMetadataFor(EntitySubClass2::class); - self::assertEmpty($class->subClasses); - self::assertEmpty($class->parentClasses); + self::assertEmpty($class->getSubClasses()); + self::assertEmpty($class->getParentClasses()); self::assertNotNull($class->getProperty('id')); self::assertNotNull($class->getProperty('name')); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index d6a4a734bec..b4285a5540e 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -52,7 +52,7 @@ public function testGetMetadataForSingleClass() $cmf->setMetadataFor($cm1->getClassName(), $cm1); // Prechecks - self::assertEquals([], $cm1->parentClasses); + self::assertEquals([], $cm1->getParentClasses()); self::assertEquals(Mapping\InheritanceType::NONE, $cm1->inheritanceType); self::assertEquals(Mapping\GeneratorType::AUTO, $cm1->getProperty('id')->getIdentifierGeneratorType()); self::assertTrue($cm1->hasField('name')); @@ -64,7 +64,7 @@ public function testGetMetadataForSingleClass() self::assertSame($cm1, $cmMap1); self::assertEquals('group', $cmMap1->table->getName()); - self::assertEquals([], $cmMap1->parentClasses); + self::assertEquals([], $cmMap1->getParentClasses()); self::assertTrue($cmMap1->hasField('name')); } @@ -306,7 +306,7 @@ protected function createValidClassMetadata() // and a mapped association $association = new Mapping\OneToOneAssociationMetadata('other'); - $association->setTargetEntity('TestEntity1'); + $association->setTargetEntity(TestEntity1::class); $association->setMappedBy('this'); $cm1->addProperty($association); @@ -324,7 +324,7 @@ protected function createValidClassMetadata() $association = new Mapping\OneToOneAssociationMetadata('association'); $association->setJoinColumns($joinColumns); - $association->setTargetEntity('TestEntity1'); + $association->setTargetEntity(TestEntity1::class); $cm1->addProperty($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 9b47d6b5a0b..61540fcedb4 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -16,10 +16,12 @@ use Doctrine\ORM\Reflection\StaticReflectionService; use Doctrine\Tests\Models\CMS; use Doctrine\Tests\Models\Company\CompanyContract; +use Doctrine\Tests\Models\Company\CompanyContractListener; use Doctrine\Tests\Models\CustomType\CustomTypeParent; use Doctrine\Tests\Models\DDC117\DDC117Article; use Doctrine\Tests\Models\DDC117\DDC117ArticleDetails; use Doctrine\Tests\Models\DDC6412\DDC6412File; +use Doctrine\Tests\Models\DDC964\DDC964Address; use Doctrine\Tests\Models\DDC964\DDC964Admin; use Doctrine\Tests\Models\DDC964\DDC964Guest; use Doctrine\Tests\Models\Routing\RoutingLeg; @@ -39,8 +41,8 @@ public function testClassMetadataInstanceSerialization() self::assertInstanceOf(\ReflectionClass::class, $cm->getReflectionClass()); self::assertEquals(CMS\CmsUser::class, $cm->getClassName()); self::assertEquals(CMS\CmsUser::class, $cm->getRootClassName()); - self::assertEquals([], $cm->subClasses); - self::assertEquals([], $cm->parentClasses); + self::assertEquals([], $cm->getSubClasses()); + self::assertEquals([], $cm->getParentClasses()); self::assertEquals(Mapping\InheritanceType::NONE, $cm->inheritanceType); // Customize state @@ -50,16 +52,20 @@ public function testClassMetadataInstanceSerialization() $discrColumn->setType(Type::getType('integer')); $cm->setInheritanceType(Mapping\InheritanceType::SINGLE_TABLE); - $cm->setSubclasses(["One", "Two", "Three"]); $cm->setParentClasses(["UserParent"]); - $cm->setCustomRepositoryClassName("UserRepository"); + $cm->setSubclasses([ + 'Doctrine\Tests\Models\CMS\One', + 'Doctrine\Tests\Models\CMS\Two', + 'Doctrine\Tests\Models\CMS\Three' + ]); + $cm->setCustomRepositoryClassName('Doctrine\Tests\Models\CMS\UserRepository'); $cm->setDiscriminatorColumn($discrColumn); $cm->asReadOnly(); $cm->addNamedQuery('dql', 'foo'); $association = new Mapping\OneToOneAssociationMetadata('phonenumbers'); - $association->setTargetEntity('CmsAddress'); + $association->setTargetEntity(CMS\CmsAddress::class); $association->setMappedBy('foo'); $cm->addProperty($association); @@ -74,19 +80,16 @@ public function testClassMetadataInstanceSerialization() self::assertInstanceOf(\ReflectionClass::class, $cm->getReflectionClass()); self::assertEquals(CMS\CmsUser::class, $cm->getClassName()); self::assertEquals('UserParent', $cm->getRootClassName()); - self::assertEquals([CMS\One::class, CMS\Two::class, CMS\Three::class], $cm->subClasses); - self::assertEquals(['UserParent'], $cm->parentClasses); - self::assertEquals(CMS\UserRepository::class, $cm->getCustomRepositoryClassName()); + self::assertEquals('Doctrine\Tests\Models\CMS\UserRepository', $cm->getCustomRepositoryClassName()); self::assertEquals( [ 'Doctrine\Tests\Models\CMS\One', 'Doctrine\Tests\Models\CMS\Two', 'Doctrine\Tests\Models\CMS\Three' ], - $cm->subClasses + $cm->getSubClasses() ); - self::assertEquals(['UserParent'], $cm->parentClasses); - self::assertEquals(CMS\UserRepository::class, $cm->getCustomRepositoryClassName()); + self::assertEquals(['UserParent'], $cm->getParentClasses()); self::assertEquals($discrColumn, $cm->discriminatorColumn); self::assertTrue($cm->isReadOnly()); self::assertEquals(['dql' => 'foo'], $cm->getNamedQueries()); @@ -186,7 +189,7 @@ public function testMapManyToManyJoinTableDefaults() $association = new Mapping\ManyToManyAssociationMetadata('groups'); - $association->setTargetEntity('CmsGroup'); + $association->setTargetEntity(CMS\CmsGroup::class); $cm->addProperty($association); @@ -226,7 +229,7 @@ public function testSerializeManyToManyJoinTableCascade() $association = new Mapping\ManyToManyAssociationMetadata('groups'); - $association->setTargetEntity('CmsGroup'); + $association->setTargetEntity(CMS\CmsGroup::class); $cm->addProperty($association); @@ -266,7 +269,7 @@ public function testSetSubClassesInGlobalNamespace() $cm->initializeReflection(new RuntimeReflectionService()); $cm->setSubclasses(['DoctrineGlobal_Article']); - self::assertEquals("DoctrineGlobal_Article", $cm->subClasses[0]); + self::assertEquals("DoctrineGlobal_Article", $cm->getSubClasses()[0]); } /** @@ -328,8 +331,8 @@ public function testDuplicateAssociationMappingException() $association = new Mapping\OneToOneAssociationMetadata('foo'); $association->setDeclaringClass($cm); - $association->setSourceEntity('stdClass'); - $association->setTargetEntity('stdClass'); + $association->setSourceEntity(\stdClass::class); + $association->setTargetEntity(\stdClass::class); $association->setMappedBy('foo'); $cm->addInheritedProperty($association); @@ -339,8 +342,8 @@ public function testDuplicateAssociationMappingException() $association = new Mapping\OneToOneAssociationMetadata('foo'); $association->setDeclaringClass($cm); - $association->setSourceEntity('stdClass'); - $association->setTargetEntity('stdClass'); + $association->setSourceEntity(\stdClass::class); + $association->setTargetEntity(\stdClass::class); $association->setMappedBy('foo'); $cm->addInheritedProperty($association); @@ -426,7 +429,7 @@ public function testDuplicateFieldAndAssociationMapping1_ThrowsException() $association = new Mapping\OneToOneAssociationMetadata('name'); - $association->setTargetEntity('CmsUser'); + $association->setTargetEntity(CMS\CmsUser::class); $metadata->addProperty($association); } @@ -438,7 +441,7 @@ public function testDuplicateFieldAndAssociationMapping2_ThrowsException() $association = new Mapping\OneToOneAssociationMetadata('name'); - $association->setTargetEntity('CmsUser'); + $association->setTargetEntity(CMS\CmsUser::class); $metadata->addProperty($association); @@ -497,7 +500,7 @@ public function testDefaultTableName() $association = new Mapping\ManyToManyAssociationMetadata('user'); $association->setJoinTable($joinTable); - $association->setTargetEntity('CmsUser'); + $association->setTargetEntity(CMS\CmsUser::class); $association->setInversedBy('users'); $cm->addProperty($association); @@ -525,7 +528,7 @@ public function testDefaultJoinColumnName() $association = new Mapping\OneToOneAssociationMetadata('user'); $association->setJoinColumns($joinColumns); - $association->setTargetEntity('CmsUser'); + $association->setTargetEntity(CMS\CmsUser::class); $cm->addProperty($association); @@ -554,7 +557,7 @@ public function testDefaultJoinColumnName() $association = new Mapping\ManyToManyAssociationMetadata('user'); $association->setJoinTable($joinTable); - $association->setTargetEntity('CmsUser'); + $association->setTargetEntity(CMS\CmsUser::class); $association->setInversedBy('users'); $cm->addProperty($association); @@ -580,7 +583,7 @@ public function testOneToOneUnderscoreNamingStrategyDefaults() $association = new Mapping\OneToOneAssociationMetadata('user'); - $association->setTargetEntity('CmsUser'); + $association->setTargetEntity(CMS\CmsUser::class); $metadata->addProperty($association); @@ -602,7 +605,7 @@ public function testManyToManyUnderscoreNamingStrategyDefaults() $association = new Mapping\ManyToManyAssociationMetadata('user'); - $association->setTargetEntity('CmsUser'); + $association->setTargetEntity(CMS\CmsUser::class); $metadata->addProperty($association); @@ -1001,8 +1004,8 @@ public function testSerializeEntityListeners() $metadata = new ClassMetadata(CompanyContract::class); $metadata->initializeReflection(new RuntimeReflectionService()); - $metadata->addEntityListener(Events::prePersist, 'CompanyContractListener', 'prePersistHandler'); - $metadata->addEntityListener(Events::postPersist, 'CompanyContractListener', 'postPersistHandler'); + $metadata->addEntityListener(Events::prePersist, CompanyContractListener::class, 'prePersistHandler'); + $metadata->addEntityListener(Events::postPersist, CompanyContractListener::class, 'postPersistHandler'); $serialize = serialize($metadata); $unserialize = unserialize($serialize); @@ -1127,7 +1130,7 @@ public function testTargetEntityNotFound() $cm->addProperty($association); $this->expectException(MappingException::class); - $this->expectExceptionMessage("The target-entity Doctrine\\Tests\\Models\\CMS\\UnknownClass cannot be found in '" . CMS\CmsUser::class . "#address'."); + $this->expectExceptionMessage("The target-entity 'UnknownClass' cannot be found in '" . CMS\CmsUser::class . "#address'."); $cm->validateAssociations(); } @@ -1173,7 +1176,7 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategy() $association = new Mapping\ManyToManyAssociationMetadata('user'); - $association->setTargetEntity('CmsUser'); + $association->setTargetEntity(CMS\CmsUser::class); $addressMetadata->addProperty($association); @@ -1250,7 +1253,7 @@ public function testInvalidPropertyAssociationOverrideNameException() $association = new Mapping\ManyToOneAssociationMetadata('address'); - $association->setTargetEntity('DDC964Address'); + $association->setTargetEntity(DDC964Address::class); $cm->addProperty($association); @@ -1282,7 +1285,7 @@ public function testInvalidPropertyAttributeOverrideNameException() * @group DDC-1955 * * @expectedException \Doctrine\ORM\Mapping\MappingException - * @expectedExceptionMessage Entity Listener "InvalidClassName" declared on "Doctrine\Tests\Models\CMS\CmsUser" not found. + * @expectedExceptionMessage Entity Listener "\InvalidClassName" declared on "Doctrine\Tests\Models\CMS\CmsUser" not found. */ public function testInvalidEntityListenerClassException() { @@ -1303,7 +1306,7 @@ public function testInvalidEntityListenerMethodException() $cm = new ClassMetadata(CMS\CmsUser::class); $cm->initializeReflection(new RuntimeReflectionService()); - $cm->addEntityListener(Events::postLoad, '\Doctrine\Tests\Models\Company\CompanyContractListener', 'invalidMethod'); + $cm->addEntityListener(Events::postLoad, 'Doctrine\Tests\Models\Company\CompanyContractListener', 'invalidMethod'); } public function testManyToManySelfReferencingNamingStrategyDefaults() @@ -1313,7 +1316,7 @@ public function testManyToManySelfReferencingNamingStrategyDefaults() $association = new Mapping\ManyToManyAssociationMetadata('friendsWithMe'); - $association->setTargetEntity('CustomTypeParent'); + $association->setTargetEntity(CustomTypeParent::class); $cm->addProperty($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php index cca39835800..5e61aa85d79 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php @@ -5,6 +5,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Events; use Doctrine\Tests\Models\CMS\CmsAddress; +use Doctrine\Tests\Models\CMS\CmsAddressListener; $tableMetadata = new Mapping\TableMetadata(); $tableMetadata->setName('company_person'); @@ -40,7 +41,7 @@ $association = new Mapping\OneToOneAssociationMetadata('user'); $association->setJoinColumns($joinColumns); -$association->setTargetEntity('CmsUser'); +$association->setTargetEntity(\Doctrine\Tests\Models\CMS\CmsUser::class); $metadata->addProperty($association); @@ -119,14 +120,14 @@ ] ); -$metadata->addEntityListener(Events::postPersist, 'CmsAddressListener', 'postPersist'); -$metadata->addEntityListener(Events::prePersist, 'CmsAddressListener', 'prePersist'); +$metadata->addEntityListener(Events::postPersist, CmsAddressListener::class, 'postPersist'); +$metadata->addEntityListener(Events::prePersist, CmsAddressListener::class, 'prePersist'); -$metadata->addEntityListener(Events::postUpdate, 'CmsAddressListener', 'postUpdate'); -$metadata->addEntityListener(Events::preUpdate, 'CmsAddressListener', 'preUpdate'); +$metadata->addEntityListener(Events::postUpdate, CmsAddressListener::class, 'postUpdate'); +$metadata->addEntityListener(Events::preUpdate, CmsAddressListener::class, 'preUpdate'); -$metadata->addEntityListener(Events::postRemove, 'CmsAddressListener', 'postRemove'); -$metadata->addEntityListener(Events::preRemove, 'CmsAddressListener', 'preRemove'); +$metadata->addEntityListener(Events::postRemove, CmsAddressListener::class, 'postRemove'); +$metadata->addEntityListener(Events::preRemove, CmsAddressListener::class, 'preRemove'); -$metadata->addEntityListener(Events::preFlush, 'CmsAddressListener', 'preFlush'); -$metadata->addEntityListener(Events::postLoad, 'CmsAddressListener', 'postLoad'); +$metadata->addEntityListener(Events::preFlush, CmsAddressListener::class, 'preFlush'); +$metadata->addEntityListener(Events::postLoad, CmsAddressListener::class, 'postLoad'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php index ce5d225ced6..3ba673ff4fa 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php @@ -3,6 +3,8 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\Tests\Models\Company; +use Doctrine\Tests\Models\Company\CompanyContractListener; $tableMetadata = new Mapping\TableMetadata(); $tableMetadata->setName('company_contracts'); @@ -20,9 +22,9 @@ $metadata->setDiscriminatorMap( [ - "fix" => "CompanyFixContract", - "flexible" => "CompanyFlexContract", - "flexultra" => "CompanyFlexUltraContract" + "fix" => Company\CompanyFixContract::class, + "flexible" => Company\CompanyFlexContract::class, + "flexultra" => Company\CompanyFlexUltraContract::class ] ); @@ -37,14 +39,14 @@ $metadata->addProperty($fieldMetadata); -$metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, 'CompanyContractListener', 'postPersistHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, 'CompanyContractListener', 'prePersistHandler'); +$metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, CompanyContractListener::class, 'postPersistHandler'); +$metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, CompanyContractListener::class, 'prePersistHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::postUpdate, 'CompanyContractListener', 'postUpdateHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::preUpdate, 'CompanyContractListener', 'preUpdateHandler'); +$metadata->addEntityListener(\Doctrine\ORM\Events::postUpdate, CompanyContractListener::class, 'postUpdateHandler'); +$metadata->addEntityListener(\Doctrine\ORM\Events::preUpdate, CompanyContractListener::class, 'preUpdateHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::postRemove, 'CompanyContractListener', 'postRemoveHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::preRemove, 'CompanyContractListener', 'preRemoveHandler'); +$metadata->addEntityListener(\Doctrine\ORM\Events::postRemove, CompanyContractListener::class, 'postRemoveHandler'); +$metadata->addEntityListener(\Doctrine\ORM\Events::preRemove, CompanyContractListener::class, 'preRemoveHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::preFlush, 'CompanyContractListener', 'preFlushHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::postLoad, 'CompanyContractListener', 'postLoadHandler'); +$metadata->addEntityListener(\Doctrine\ORM\Events::preFlush, CompanyContractListener::class, 'preFlushHandler'); +$metadata->addEntityListener(\Doctrine\ORM\Events::postLoad, CompanyContractListener::class, 'postLoadHandler'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexUltraContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexUltraContract.php index 7ce527092cd..6ad0dda4571 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexUltraContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexUltraContract.php @@ -3,6 +3,8 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\Tests\Models\Company\CompanyContractListener; +use Doctrine\Tests\Models\Company\CompanyFlexUltraContractListener; /* @var $metadata ClassMetadata */ $fieldMetadata = new Mapping\FieldMetadata('maxPrice'); @@ -12,17 +14,17 @@ $metadata->addProperty($fieldMetadata); -$metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, 'CompanyContractListener', 'postPersistHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, 'CompanyContractListener', 'prePersistHandler'); +$metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, CompanyContractListener::class, 'postPersistHandler'); +$metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, CompanyContractListener::class, 'prePersistHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::postUpdate, 'CompanyContractListener', 'postUpdateHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::preUpdate, 'CompanyContractListener', 'preUpdateHandler'); +$metadata->addEntityListener(\Doctrine\ORM\Events::postUpdate, CompanyContractListener::class, 'postUpdateHandler'); +$metadata->addEntityListener(\Doctrine\ORM\Events::preUpdate, CompanyContractListener::class, 'preUpdateHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::postRemove, 'CompanyContractListener', 'postRemoveHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::preRemove, 'CompanyContractListener', 'preRemoveHandler'); +$metadata->addEntityListener(\Doctrine\ORM\Events::postRemove, CompanyContractListener::class, 'postRemoveHandler'); +$metadata->addEntityListener(\Doctrine\ORM\Events::preRemove, CompanyContractListener::class, 'preRemoveHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::preFlush, 'CompanyContractListener', 'preFlushHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::postLoad, 'CompanyContractListener', 'postLoadHandler'); +$metadata->addEntityListener(\Doctrine\ORM\Events::preFlush, CompanyContractListener::class, 'preFlushHandler'); +$metadata->addEntityListener(\Doctrine\ORM\Events::postLoad, CompanyContractListener::class, 'postLoadHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, 'CompanyFlexUltraContractListener', 'prePersistHandler1'); -$metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, 'CompanyFlexUltraContractListener', 'prePersistHandler2'); +$metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, CompanyFlexUltraContractListener::class, 'prePersistHandler1'); +$metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, CompanyFlexUltraContractListener::class, 'prePersistHandler2'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php index c5e8992ec8a..efef857a3d0 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php @@ -24,6 +24,6 @@ $association = new Mapping\ManyToManyAssociationMetadata('groups'); -$association->setTargetEntity('DDC3579Group'); +$association->setTargetEntity(\Doctrine\Tests\Models\DDC3579\DDC3579Group::class); $metadata->addProperty($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php index 93dc13c82c5..74e262a99d1 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php @@ -15,6 +15,6 @@ $association = new Mapping\ManyToManyAssociationMetadata('members'); -$association->setTargetEntity('DDC5934Member'); +$association->setTargetEntity(\Doctrine\Tests\Models\DDC5934\DDC5934Member::class); $metadata->addProperty($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php index fc153639bd7..92ba6f86b84 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php @@ -35,7 +35,7 @@ $association = new Mapping\ManyToOneAssociationMetadata('address'); $association->setJoinColumns($joinColumns); -$association->setTargetEntity('DDC964Address'); +$association->setTargetEntity(\Doctrine\Tests\Models\DDC964\DDC964Address::class); $association->setCascade(['persist', 'merge']); $metadata->addProperty($association); @@ -60,7 +60,7 @@ $association = new Mapping\ManyToManyAssociationMetadata('groups'); $association->setJoinTable($joinTable); -$association->setTargetEntity('DDC964Group'); +$association->setTargetEntity(\Doctrine\Tests\Models\DDC964\DDC964Group::class); $association->setInversedBy('user'); $association->setCascade(['persist','merge','detach']); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php index 28257bc9598..bfe57815799 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php @@ -11,7 +11,7 @@ $association = new Mapping\ManyToOneAssociationMetadata('foo'); -$association->setTargetEntity('PHPSLCFoo'); +$association->setTargetEntity(PHPSLCFoo::class); $association->setPrimaryKey(true); $metadata->addProperty($association); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index a679ad7713c..0cb0004c0ae 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -734,7 +734,7 @@ public function testGenerateEntityWithMultipleInverseJoinColumns() $association = new Mapping\ManyToManyAssociationMetadata('centroCustos'); $association->setJoinTable($joinTable); - $association->setTargetEntity('DDC2079CentroCusto'); + $association->setTargetEntity($this->namespace . '\\DDC2079CentroCusto'); $metadata->addProperty($association); From 68de86420cc69d4700c6c6487f4d67a660e7d989 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Thu, 27 Jul 2017 14:26:53 -0400 Subject: [PATCH 179/275] Moved getIdentifierValues to EntityPersister --- .../ORM/Cache/DefaultEntityHydrator.php | 8 ++-- .../Entity/AbstractEntityPersister.php | 10 ++++- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 26 ------------- .../ORM/Mapping/ComponentMetadata.php | 20 ++++++++++ .../Collection/OneToManyPersister.php | 10 ++--- .../Entity/BasicEntityPersister.php | 33 +++++++++++++--- .../ORM/Persisters/Entity/EntityPersister.php | 12 ++++++ .../ORM/Proxy/Factory/ProxyDefinition.php | 4 +- lib/Doctrine/ORM/UnitOfWork.php | 29 ++++++++------ .../ORM/Utility/IdentifierFlattener.php | 9 +++-- .../Entity/AbstractEntityPersisterTest.php | 2 + .../ORM/Functional/Ticket/DDC1734Test.php | 10 +++-- .../Tests/ORM/Proxy/ProxyFactoryTest.php | 38 +++++-------------- .../ORM/Utility/IdentifierFlattenerTest.php | 10 +++-- 14 files changed, 127 insertions(+), 94 deletions(-) diff --git a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php index 5ff22beb7f6..7ad666967f9 100644 --- a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php @@ -68,9 +68,10 @@ public function __construct(EntityManagerInterface $em) public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $entity) { $identifierFlattener = $this->em->getIdentifierFlattener(); + $persister = $this->uow->getEntityPersister($metadata->getClassName()); $data = $this->uow->getOriginalEntityData($entity); - $data = array_merge($data, $metadata->getIdentifierValues($entity)); // why update has no identifier values ? + $data = array_merge($data, $persister->getIdentifierValues($entity)); // why update has no identifier values ? foreach ($metadata->getProperties() as $name => $association) { if (! isset($data[$name]) || $association instanceof FieldMetadata) { @@ -85,6 +86,7 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e $targetEntity = $association->getTargetEntity(); $targetClassMetadata = $this->em->getClassMetadata($targetEntity); + $targetPersister = $this->uow->getEntityPersister($targetEntity); if (! $association->getCache()) { $owningAssociation = ! $association->isOwningSide() @@ -92,7 +94,7 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e : $association; $associationIds = $identifierFlattener->flattenIdentifier( $targetClassMetadata, - $targetClassMetadata->getIdentifierValues($data[$name]) + $targetPersister->getIdentifierValues($data[$name]) ); unset($data[$name]); @@ -145,7 +147,7 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e // handle association identifier $targetId = $this->em->getIdentifierFlattener()->flattenIdentifier( $targetClassMetadata, - $targetClassMetadata->getIdentifierValues($data[$name]) + $targetPersister->getIdentifierValues($data[$name]) ); $data[$name] = new AssociationCacheEntry($targetEntity, $targetId); diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php index b249f0048b4..1caa8cdcaab 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php @@ -195,7 +195,7 @@ public function getSelectConditionStatementSQL( public function exists($entity, Criteria $extraConditions = null) { if (null === $extraConditions) { - $key = new EntityCacheKey($this->class->getRootClassName(), $this->class->getIdentifierValues($entity)); + $key = new EntityCacheKey($this->class->getRootClassName(), $this->getIdentifierValues($entity)); if ($this->region->contains($key)) { return true; @@ -356,6 +356,14 @@ public function getOwningTable($fieldName) return $this->persister->getOwningTable($fieldName); } + /** + * {@inheritdoc} + */ + public function getIdentifierValues($entity) : array + { + return $this->persister->getIdentifierValues($entity); + } + /** * {@inheritdoc} */ diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 8553a72fc90..eeae466b1f3 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -341,32 +341,6 @@ public function getReflectionClass() : ?\ReflectionClass return $this->reflectionClass; } - /** - * Extracts the identifier values of an entity of this class. - * - * For composite identifiers, the identifier values are returned as an array - * with the same order as the field order in {@link identifier}. - * - * @param object $entity - * - * @return array - */ - public function getIdentifierValues($entity) - { - $id = []; - - foreach ($this->identifier as $idField) { - $property = $this->getProperty($idField); - $value = $property->getValue($entity); - - if (null !== $value) { - $id[$idField] = $value; - } - } - - return $id; - } - /** * Populates the entity identifier of an entity. * diff --git a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php index ae5ef254614..d5f9fad9192 100644 --- a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php @@ -203,4 +203,24 @@ public function hasProperty(string $propertyName) : bool return $this->parent && $this->parent->hasProperty($propertyName); } + + /** + * @param string|null $className + * + * @return string|null null if the input value is null + */ + public function fullyQualifiedClassName(?string $className) : ?string + { + if ($className === null || ! $this->reflectionClass) { + return $className; + } + + $namespaceName = $this->reflectionClass->getNamespaceName(); + $finalClassName = ($className !== null && strpos($className, '\\') === false && $namespaceName) + ? sprintf('%s\\%s', $namespaceName, $className) + : $className + ; + + return ltrim($finalClassName, '\\'); + } } diff --git a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php index 64dead81d10..27e2ad25b27 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php @@ -236,10 +236,10 @@ private function deleteEntityCollection(PersistentCollection $collection) */ private function deleteJoinedEntityCollection(PersistentCollection $collection) { - $association = $collection->getMapping(); - $sourceClass = $this->em->getClassMetadata($association->getSourceEntity()); - $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); - $rootClass = $this->em->getClassMetadata($targetClass->getRootClassName()); + $association = $collection->getMapping(); + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + $rootClass = $this->em->getClassMetadata($targetClass->getRootClassName()); + $sourcePersister = $this->uow->getEntityPersister($association->getSourceEntity()); // 1) Build temporary table DDL $tempTable = $this->platform->getTemporaryTableName($rootClass->getTemporaryIdTableName()); @@ -267,7 +267,7 @@ private function deleteJoinedEntityCollection(PersistentCollection $collection) $query = $this->em->createQuery($dql)->setParameter('owner', $collection->getOwner()); $statement = 'INSERT INTO ' . $tempTable . ' (' . $idColumnNameList . ') ' . $query->getSQL(); - $parameters = array_values($sourceClass->getIdentifierValues($collection->getOwner())); + $parameters = array_values($sourcePersister->getIdentifierValues($collection->getOwner())); $numDeleted = $this->conn->executeUpdate($statement, $parameters); // 3) Delete records on each table in the hierarchy diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index de7db64d64f..f710ec6e419 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -214,6 +214,25 @@ public function getResultSetMapping() return $this->currentPersisterContext->rsm; } + /** + * {@inheritdoc} + */ + public function getIdentifierValues($entity): array + { + $id = []; + + foreach ($this->class->getIdentifier() as $fieldName) { + $property = $this->class->getProperty($fieldName); + $value = $property->getValue($entity); + + if (null !== $value) { + $id[$fieldName] = $value; + } + } + + return $id; + } + /** * {@inheritdoc} */ @@ -249,7 +268,7 @@ public function insert($entity) $this->class->getSingleIdentifierFieldName() => $generatedId, ]; } else { - $id = $this->class->getIdentifierValues($entity); + $id = $this->getIdentifierValues($entity); } if ($this->class->isVersioned()) { @@ -2027,13 +2046,17 @@ private function getValues($value) return [$newValue]; } - if (is_object($value) && $this->em->getMetadataFactory()->hasMetadataFor(ClassUtils::getClass($value))) { - $class = $this->em->getClassMetadata(get_class($value)); + $metadataFactory = $this->em->getMetadataFactory(); + $unitOfWork = $this->em->getUnitOfWork(); + + if (is_object($value) && $metadataFactory->hasMetadataFor(ClassUtils::getClass($value))) { + $class = $metadataFactory->getMetadataFor(get_class($value)); + $persister = $unitOfWork->getEntityPersister($class->getClassName()); if ($class->isIdentifierComposite()) { $newValue = []; - foreach ($class->getIdentifierValues($value) as $innerValue) { + foreach ($persister->getIdentifierValues($value) as $innerValue) { $newValue = array_merge($newValue, $this->getValues($innerValue)); } @@ -2065,7 +2088,7 @@ private function getIndividualValue($value) */ public function exists($entity, Criteria $extraConditions = null) { - $criteria = $this->class->getIdentifierValues($entity); + $criteria = $this->getIdentifierValues($entity); if ( ! $criteria) { return false; diff --git a/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php index 1d76026607b..9d4e2b1344e 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php @@ -48,6 +48,18 @@ public function getClassMetadata(); */ public function getResultSetMapping(); + /** + * Extracts the identifier values of an entity that relies on this persister. + * + * For composite identifiers, the identifier values are returned as an array + * with the same order as the field order in {@link ClassMetadata#identifier}. + * + * @param object $entity + * + * @return array + */ + public function getIdentifierValues($entity) : array; + /** * Gets the SELECT SQL to select one or more entities by a set of field criteria. * diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php index 93c80c59e77..1cdb6a63c4e 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php @@ -106,7 +106,7 @@ public function initializer(Proxy $proxy) : void } $classMetadata = $this->entityClassMetadata; - $identifier = $classMetadata->getIdentifierValues($proxy); + $identifier = $this->entityPersister->getIdentifierValues($proxy); $original = $this->entityPersister->loadById($identifier, $proxy); if (null === $original) { @@ -146,7 +146,7 @@ public function cloner(Proxy $proxy) : void $proxy->__setInitialized(true); $classMetadata = $this->entityClassMetadata; - $identifier = $classMetadata->getIdentifierValues($proxy); + $identifier = $this->entityPersister->getIdentifierValues($proxy); $original = $this->entityPersister->loadById($identifier); if (null === $original) { diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 0425a4ad8f2..73d9a2ac57d 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -1416,8 +1416,9 @@ public function getEntityState($entity, $assume = null) // Note that you can not remember the NEW or DETACHED state in _entityStates since // the UoW does not hold references to such objects and the object hash can be reused. // More generally because the state may "change" between NEW/DETACHED without the UoW being aware of it. - $class = $this->em->getClassMetadata(get_class($entity)); - $id = $class->getIdentifierValues($entity); + $class = $this->em->getClassMetadata(get_class($entity)); + $persister = $this->getEntityPersister($class->getClassName()); + $id = $persister->getIdentifierValues($entity); if (! $id) { return self::STATE_NEW; @@ -1777,7 +1778,8 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, Asso return $managedCopy; } - $class = $this->em->getClassMetadata(get_class($entity)); + $class = $this->em->getClassMetadata(get_class($entity)); + $persister = $this->getEntityPersister($class->getClassName()); // First we assume DETACHED, although it can still be NEW but we can avoid // an extra db-roundtrip this way. If it is not MANAGED but has an identity, @@ -1787,7 +1789,7 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, Asso if ($this->getEntityState($entity, self::STATE_DETACHED) !== self::STATE_MANAGED) { // Try to look the entity up in the identity map. - $id = $class->getIdentifierValues($entity); + $id = $persister->getIdentifierValues($entity); // If there is no ID, it is actually NEW. if ( ! $id) { @@ -2896,7 +2898,8 @@ public function getEntityIdentifier($entity) */ public function getSingleIdentifierValue($entity) { - $class = $this->em->getClassMetadata(get_class($entity)); + $class = $this->em->getClassMetadata(get_class($entity)); + $persister = $this->getEntityPersister($class->getClassName()); if ($class->isIdentifierComposite()) { throw ORMInvalidArgumentException::invalidCompositeIdentifier(); @@ -2904,7 +2907,7 @@ public function getSingleIdentifierValue($entity) $values = $this->isInIdentityMap($entity) ? $this->getEntityIdentifier($entity) - : $class->getIdentifierValues($entity); + : $persister->getIdentifierValues($entity); return isset($values[$class->identifier[0]]) ? $values[$class->identifier[0]] : null; } @@ -3298,7 +3301,8 @@ private function isIdentifierEquals($entity1, $entity2) return true; } - $class = $this->em->getClassMetadata(get_class($entity1)); + $class = $this->em->getClassMetadata(get_class($entity1)); + $persister = $this->getEntityPersister($class->getClassName()); if ($class !== $this->em->getClassMetadata(get_class($entity2))) { return false; @@ -3311,10 +3315,10 @@ private function isIdentifierEquals($entity1, $entity2) $id1 = isset($this->entityIdentifiers[$oid1]) ? $this->entityIdentifiers[$oid1] - : $identifierFlattener->flattenIdentifier($class, $class->getIdentifierValues($entity1)); + : $identifierFlattener->flattenIdentifier($class, $persister->getIdentifierValues($entity1)); $id2 = isset($this->entityIdentifiers[$oid2]) ? $this->entityIdentifiers[$oid2] - : $identifierFlattener->flattenIdentifier($class, $class->getIdentifierValues($entity2)); + : $identifierFlattener->flattenIdentifier($class, $persister->getIdentifierValues($entity2)); return $id1 === $id2 || implode(' ', $id1) === implode(' ', $id2); } @@ -3366,9 +3370,10 @@ private function mergeEntityStateIntoManagedCopy($entity, $managedCopy) if (! in_array('merge', $property->getCascade())) { if ($this->getEntityState($other) === self::STATE_DETACHED) { - $targetEntity = $property->getTargetEntity(); - $targetClass = $this->em->getClassMetadata($targetEntity); - $relatedId = $targetClass->getIdentifierValues($other); + $targetEntity = $property->getTargetEntity(); + $targetClass = $this->em->getClassMetadata($targetEntity); + $targetPersister = $this->getEntityPersister($targetEntity); + $relatedId = $targetPersister->getIdentifierValues($other); if ($targetClass->getSubClasses()) { $other = $this->em->find($targetClass->getClassName(), $relatedId); diff --git a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php index d966b2bbcfd..4bc1d1cd50f 100644 --- a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php +++ b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php @@ -82,11 +82,14 @@ public function flattenIdentifier(ClassMetadata $class, array $id) if (isset($id[$field]) && is_object($id[$field])) { /* @var $targetClassMetadata ClassMetadata */ - $targetClassMetadata = $this->metadataFactory->getMetadataFor($property->getTargetEntity()); + $targetClassMetadata = $this->metadataFactory->getMetadataFor($property->getTargetEntity()); + $targetClassPersister = $this->unitOfWork->getEntityPersister($property->getTargetEntity()); $identifiers = $this->unitOfWork->isInIdentityMap($id[$field]) ? $this->unitOfWork->getEntityIdentifier($id[$field]) - : $targetClassMetadata->getIdentifierValues($id[$field]); - $associatedId = $this->flattenIdentifier($targetClassMetadata, $identifiers); + : $targetClassPersister->getIdentifierValues($id[$field]) + ; + + $associatedId = $this->flattenIdentifier($targetClassMetadata, $identifiers); $flatId[$field] = implode(' ', $associatedId); diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php index 3e2f36eee3b..1e21b8d566b 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php @@ -63,6 +63,7 @@ abstract class AbstractEntityPersisterTest extends OrmTestCase 'expandParameters', 'expandCriteriaParameters', 'getSelectConditionStatementSQL', + 'getIdentifierValues', 'insert', 'update', 'delete', @@ -96,6 +97,7 @@ protected function setUp() { $this->getSharedSecondLevelCacheDriverImpl()->flushAll(); $this->enableSecondLevelCache(); + parent::setUp(); $this->em = $this->getTestEntityManager(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php index a5059ef056b..777312930d3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php @@ -80,11 +80,13 @@ public function testMergeWorksOnSerializedProxies() */ private function getProxy($object) { - $metadataFactory = $this->em->getMetadataFactory(); - $className = get_class($object); - $identifier = $metadataFactory->getMetadataFor($className)->getIdentifierValues($object); + $unitOfWork = $this->em->getUnitOfWork(); + $proxyFactory = $this->em->getProxyFactory(); + $className = get_class($object); + $persister = $unitOfWork->getEntityPersister($className); + $identifier = $persister->getIdentifierValues($object); - return $this->em->getProxyFactory()->getProxy($className, $identifier); + return $proxyFactory->getProxy($className, $identifier); } } diff --git a/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php b/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php index e47ed492b3b..1ffc7f41495 100644 --- a/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php @@ -78,10 +78,10 @@ public function testReferenceProxyDelegatesLoadingToThePersister() $classMetaData = $this->emMock->getClassMetadata(ECommerceFeature::class); - $persister = $this + $persister = $this ->getMockBuilder(BasicEntityPersister::class) - ->setMethods(['load', 'getClassMetadata']) - ->disableOriginalConstructor() + ->setConstructorArgs([$this->emMock, $classMetaData]) + ->setMethods(['load']) ->getMock(); $persister @@ -90,11 +90,6 @@ public function testReferenceProxyDelegatesLoadingToThePersister() ->with($this->equalTo($identifier), $this->isInstanceOf($proxyClass)) ->will($this->returnValue(new \stdClass())); - $persister - ->expects(self::any()) - ->method('getClassMetadata') - ->willReturn($classMetaData); - $this->uowMock->setEntityPersister(ECommerceFeature::class, $persister); $proxy = $this->proxyFactory->getProxy(ECommerceFeature::class, $identifier); @@ -126,8 +121,8 @@ public function testFailedProxyLoadingDoesNotMarkTheProxyAsInitialized() $persister = $this ->getMockBuilder(BasicEntityPersister::class) - ->setMethods(['load', 'getClassMetadata']) - ->disableOriginalConstructor() + ->setConstructorArgs([$this->emMock, $classMetaData]) + ->setMethods(['load']) ->getMock(); $persister @@ -135,11 +130,6 @@ public function testFailedProxyLoadingDoesNotMarkTheProxyAsInitialized() ->method('load') ->will($this->returnValue(null)); - $persister - ->expects(self::any()) - ->method('getClassMetadata') - ->willReturn($classMetaData); - $this->uowMock->setEntityPersister(ECommerceFeature::class, $persister); /* @var $proxy \Doctrine\Common\Proxy\Proxy */ @@ -163,8 +153,8 @@ public function testFailedProxyCloningDoesNotMarkTheProxyAsInitialized() $persister = $this ->getMockBuilder(BasicEntityPersister::class) - ->setMethods(['load', 'getClassMetadata']) - ->disableOriginalConstructor() + ->setConstructorArgs([$this->emMock, $classMetaData]) + ->setMethods(['load']) ->getMock(); $persister @@ -172,11 +162,6 @@ public function testFailedProxyCloningDoesNotMarkTheProxyAsInitialized() ->method('load') ->will($this->returnValue(null)); - $persister - ->expects(self::any()) - ->method('getClassMetadata') - ->willReturn($classMetaData); - $this->uowMock->setEntityPersister(ECommerceFeature::class, $persister); /* @var $proxy \Doctrine\Common\Proxy\Proxy */ @@ -207,8 +192,8 @@ public function testProxyClonesParentFields() $persister = $this ->getMockBuilder(BasicEntityPersister::class) - ->setMethods(['load', 'getClassMetadata']) - ->disableOriginalConstructor() + ->setConstructorArgs([$this->emMock, $classMetaData]) + ->setMethods(['load']) ->getMock(); $persister @@ -216,11 +201,6 @@ public function testProxyClonesParentFields() ->method('load') ->willReturn($companyEmployee); - $persister - ->expects(self::any()) - ->method('getClassMetadata') - ->willReturn($classMetaData); - $this->uowMock->setEntityPersister(CompanyEmployee::class, $persister); /* @var $proxy \Doctrine\Common\Proxy\Proxy */ diff --git a/tests/Doctrine/Tests/ORM/Utility/IdentifierFlattenerTest.php b/tests/Doctrine/Tests/ORM/Utility/IdentifierFlattenerTest.php index 2aca0df48bc..bc8e90c164f 100644 --- a/tests/Doctrine/Tests/ORM/Utility/IdentifierFlattenerTest.php +++ b/tests/Doctrine/Tests/ORM/Utility/IdentifierFlattenerTest.php @@ -68,9 +68,10 @@ public function testFlattenIdentifierWithOneToOneId() $firstEntity = $this->em->getRepository(FirstRelatedEntity::class) ->findOneBy(['name' => 'Fred']); - $class = $this->em->getClassMetadata(FirstRelatedEntity::class); + $class = $this->em->getClassMetadata(FirstRelatedEntity::class); + $persister = $this->em->getUnitOfWork()->getEntityPersister(FirstRelatedEntity::class); - $id = $class->getIdentifierValues($firstEntity); + $id = $persister->getIdentifierValues($firstEntity); self::assertCount(1, $id, 'We should have 1 identifier'); @@ -108,8 +109,9 @@ public function testFlattenIdentifierWithMutlipleIds() $this->em->persist($flight); $this->em->flush(); - $class = $this->em->getClassMetadata(Flight::class); - $id = $class->getIdentifierValues($flight); + $class = $this->em->getClassMetadata(Flight::class); + $persister = $this->em->getUnitOfWork()->getEntityPersister(Flight::class); + $id = $persister->getIdentifierValues($flight); self::assertCount(2, $id); From be3540bd9b03a4cd506bfa8062e3ec9599f3335f Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Thu, 27 Jul 2017 14:48:54 -0400 Subject: [PATCH 180/275] Moved ClassMetadata::assignIdentifier to EntityPersister::setIdentifier. Renamed EntityPersister::getIdentifierValues to EntityPersister::getIdentifier --- .../ORM/Cache/DefaultEntityHydrator.php | 6 ++--- .../Entity/AbstractEntityPersister.php | 14 ++++++++--- lib/Doctrine/ORM/EntityManager.php | 5 ++-- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 17 ------------- .../Collection/OneToManyPersister.php | 2 +- .../Entity/BasicEntityPersister.php | 25 ++++++++++++++++--- .../ORM/Persisters/Entity/EntityPersister.php | 12 ++++++++- .../ORM/Proxy/Factory/ProxyDefinition.php | 4 +-- .../ORM/Proxy/Factory/StaticProxyFactory.php | 8 +++--- lib/Doctrine/ORM/UnitOfWork.php | 18 +++++++------ .../ORM/Utility/IdentifierFlattener.php | 2 +- .../Entity/AbstractEntityPersisterTest.php | 3 ++- .../ORM/Functional/Ticket/DDC1734Test.php | 2 +- .../ORM/Query/SelectSqlGenerationTest.php | 5 +++- .../ORM/Utility/IdentifierFlattenerTest.php | 4 +-- 15 files changed, 76 insertions(+), 51 deletions(-) diff --git a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php index 7ad666967f9..851bfc43f5b 100644 --- a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php @@ -71,7 +71,7 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e $persister = $this->uow->getEntityPersister($metadata->getClassName()); $data = $this->uow->getOriginalEntityData($entity); - $data = array_merge($data, $persister->getIdentifierValues($entity)); // why update has no identifier values ? + $data = array_merge($data, $persister->getIdentifier($entity)); // why update has no identifier values ? foreach ($metadata->getProperties() as $name => $association) { if (! isset($data[$name]) || $association instanceof FieldMetadata) { @@ -94,7 +94,7 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e : $association; $associationIds = $identifierFlattener->flattenIdentifier( $targetClassMetadata, - $targetPersister->getIdentifierValues($data[$name]) + $targetPersister->getIdentifier($data[$name]) ); unset($data[$name]); @@ -147,7 +147,7 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e // handle association identifier $targetId = $this->em->getIdentifierFlattener()->flattenIdentifier( $targetClassMetadata, - $targetPersister->getIdentifierValues($data[$name]) + $targetPersister->getIdentifier($data[$name]) ); $data[$name] = new AssociationCacheEntry($targetEntity, $targetId); diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php index 1caa8cdcaab..0382abf6f32 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php @@ -195,7 +195,7 @@ public function getSelectConditionStatementSQL( public function exists($entity, Criteria $extraConditions = null) { if (null === $extraConditions) { - $key = new EntityCacheKey($this->class->getRootClassName(), $this->getIdentifierValues($entity)); + $key = new EntityCacheKey($this->class->getRootClassName(), $this->getIdentifier($entity)); if ($this->region->contains($key)) { return true; @@ -359,9 +359,17 @@ public function getOwningTable($fieldName) /** * {@inheritdoc} */ - public function getIdentifierValues($entity) : array + public function getIdentifier($entity) : array { - return $this->persister->getIdentifierValues($entity); + return $this->persister->getIdentifier($entity); + } + + /** + * {@inheritdoc} + */ + public function setIdentifier($entity, array $id) : void + { + $this->persister->setIdentifier($entity, $id); } /** diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 5dd46db40e7..8f0f5aeb635 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -583,9 +583,10 @@ public function getPartialReference($entityName, $id) return ($entity instanceof $className) ? $entity : null; } - $entity = $this->unitOfWork->newInstance($class); + $persister = $this->unitOfWork->getEntityPersister($class->getClassName()); + $entity = $this->unitOfWork->newInstance($class); - $class->assignIdentifier($entity, $sortedId); + $persister->setIdentifier($entity, $sortedId); $this->unitOfWork->registerManaged($entity, $sortedId, []); $this->unitOfWork->markReadOnly($entity); diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index eeae466b1f3..2604de26652 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -341,23 +341,6 @@ public function getReflectionClass() : ?\ReflectionClass return $this->reflectionClass; } - /** - * Populates the entity identifier of an entity. - * - * @param object $entity - * @param array $id - * - * @return void - */ - public function assignIdentifier($entity, array $id) - { - foreach ($id as $idField => $idValue) { - $property = $this->getProperty($idField); - - $property->setValue($entity, $idValue); - } - } - /** * Handles metadata cloning nicely. */ diff --git a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php index 27e2ad25b27..f8eb7ac1683 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php @@ -267,7 +267,7 @@ private function deleteJoinedEntityCollection(PersistentCollection $collection) $query = $this->em->createQuery($dql)->setParameter('owner', $collection->getOwner()); $statement = 'INSERT INTO ' . $tempTable . ' (' . $idColumnNameList . ') ' . $query->getSQL(); - $parameters = array_values($sourcePersister->getIdentifierValues($collection->getOwner())); + $parameters = array_values($sourcePersister->getIdentifier($collection->getOwner())); $numDeleted = $this->conn->executeUpdate($statement, $parameters); // 3) Delete records on each table in the hierarchy diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index f710ec6e419..4a327663ed9 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -217,7 +217,7 @@ public function getResultSetMapping() /** * {@inheritdoc} */ - public function getIdentifierValues($entity): array + public function getIdentifier($entity): array { $id = []; @@ -233,6 +233,23 @@ public function getIdentifierValues($entity): array return $id; } + /** + * Populates the entity identifier of an entity. + * + * @param object $entity + * @param array $id + * + * @return void + */ + public function setIdentifier($entity, array $id) : void + { + foreach ($id as $idField => $idValue) { + $property = $this->class->getProperty($idField); + + $property->setValue($entity, $idValue); + } + } + /** * {@inheritdoc} */ @@ -268,7 +285,7 @@ public function insert($entity) $this->class->getSingleIdentifierFieldName() => $generatedId, ]; } else { - $id = $this->getIdentifierValues($entity); + $id = $this->getIdentifier($entity); } if ($this->class->isVersioned()) { @@ -2056,7 +2073,7 @@ private function getValues($value) if ($class->isIdentifierComposite()) { $newValue = []; - foreach ($persister->getIdentifierValues($value) as $innerValue) { + foreach ($persister->getIdentifier($value) as $innerValue) { $newValue = array_merge($newValue, $this->getValues($innerValue)); } @@ -2088,7 +2105,7 @@ private function getIndividualValue($value) */ public function exists($entity, Criteria $extraConditions = null) { - $criteria = $this->getIdentifierValues($entity); + $criteria = $this->getIdentifier($entity); if ( ! $criteria) { return false; diff --git a/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php index 9d4e2b1344e..2428467b55d 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php @@ -58,7 +58,17 @@ public function getResultSetMapping(); * * @return array */ - public function getIdentifierValues($entity) : array; + public function getIdentifier($entity) : array; + + /** + * Populates the entity identifier of an entity. + * + * @param object $entity + * @param array $id + * + * @return void + */ + public function setIdentifier($entity, array $id); /** * Gets the SELECT SQL to select one or more entities by a set of field criteria. diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php index 1cdb6a63c4e..3424467c3ed 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php @@ -106,7 +106,7 @@ public function initializer(Proxy $proxy) : void } $classMetadata = $this->entityClassMetadata; - $identifier = $this->entityPersister->getIdentifierValues($proxy); + $identifier = $this->entityPersister->getIdentifier($proxy); $original = $this->entityPersister->loadById($identifier, $proxy); if (null === $original) { @@ -146,7 +146,7 @@ public function cloner(Proxy $proxy) : void $proxy->__setInitialized(true); $classMetadata = $this->entityClassMetadata; - $identifier = $this->entityPersister->getIdentifierValues($proxy); + $identifier = $this->entityPersister->getIdentifier($proxy); $original = $this->entityPersister->loadById($identifier); if (null === $original) { diff --git a/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php b/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php index 38fc69de46d..a300a437739 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php @@ -102,11 +102,11 @@ public function generateProxyClasses(array $classMetadataList) : int */ public function getProxy(string $className, array $identifier) : Proxy { - $proxyDefinition = $this->getOrCreateProxyDefinition($className); - $proxyInstance = $this->createProxyInstance($proxyDefinition); - $proxyClassMetadata = $proxyDefinition->entityClassMetadata; + $proxyDefinition = $this->getOrCreateProxyDefinition($className); + $proxyInstance = $this->createProxyInstance($proxyDefinition); + $proxyPersister = $proxyDefinition->entityPersister; - $proxyClassMetadata->assignIdentifier($proxyInstance, $identifier); + $proxyPersister->setIdentifier($proxyInstance, $identifier); return $proxyInstance; } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 73d9a2ac57d..337ce8d60b2 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -838,13 +838,14 @@ private function persistNew($class, $entity) $idValue = $idGen->generate($this->em, $entity); if (!$idGen instanceof AssignedGenerator) { + $persister = $this->getEntityPersister($class->getClassName()); $idField = $class->getSingleIdentifierFieldName(); $property = $class->getProperty($idField); $platform = $this->em->getConnection()->getDatabasePlatform(); $idValue = $property->getType()->convertToPHPValue($idValue, $platform); $idValue = [$idField => $idValue]; - $class->assignIdentifier($entity, $idValue); + $persister->setIdentifier($entity, $idValue); } $this->entityIdentifiers[$oid] = $idValue; @@ -1418,7 +1419,7 @@ public function getEntityState($entity, $assume = null) // More generally because the state may "change" between NEW/DETACHED without the UoW being aware of it. $class = $this->em->getClassMetadata(get_class($entity)); $persister = $this->getEntityPersister($class->getClassName()); - $id = $persister->getIdentifierValues($entity); + $id = $persister->getIdentifier($entity); if (! $id) { return self::STATE_NEW; @@ -1789,7 +1790,7 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, Asso if ($this->getEntityState($entity, self::STATE_DETACHED) !== self::STATE_MANAGED) { // Try to look the entity up in the identity map. - $id = $persister->getIdentifierValues($entity); + $id = $persister->getIdentifier($entity); // If there is no ID, it is actually NEW. if ( ! $id) { @@ -1824,7 +1825,8 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, Asso } $managedCopy = $this->newInstance($class); - $class->assignIdentifier($managedCopy, $id); + + $persister->setIdentifier($managedCopy, $id); $this->mergeEntityStateIntoManagedCopy($entity, $managedCopy); $this->persistNew($class, $managedCopy); @@ -2907,7 +2909,7 @@ public function getSingleIdentifierValue($entity) $values = $this->isInIdentityMap($entity) ? $this->getEntityIdentifier($entity) - : $persister->getIdentifierValues($entity); + : $persister->getIdentifier($entity); return isset($values[$class->identifier[0]]) ? $values[$class->identifier[0]] : null; } @@ -3315,10 +3317,10 @@ private function isIdentifierEquals($entity1, $entity2) $id1 = isset($this->entityIdentifiers[$oid1]) ? $this->entityIdentifiers[$oid1] - : $identifierFlattener->flattenIdentifier($class, $persister->getIdentifierValues($entity1)); + : $identifierFlattener->flattenIdentifier($class, $persister->getIdentifier($entity1)); $id2 = isset($this->entityIdentifiers[$oid2]) ? $this->entityIdentifiers[$oid2] - : $identifierFlattener->flattenIdentifier($class, $persister->getIdentifierValues($entity2)); + : $identifierFlattener->flattenIdentifier($class, $persister->getIdentifier($entity2)); return $id1 === $id2 || implode(' ', $id1) === implode(' ', $id2); } @@ -3373,7 +3375,7 @@ private function mergeEntityStateIntoManagedCopy($entity, $managedCopy) $targetEntity = $property->getTargetEntity(); $targetClass = $this->em->getClassMetadata($targetEntity); $targetPersister = $this->getEntityPersister($targetEntity); - $relatedId = $targetPersister->getIdentifierValues($other); + $relatedId = $targetPersister->getIdentifier($other); if ($targetClass->getSubClasses()) { $other = $this->em->find($targetClass->getClassName(), $relatedId); diff --git a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php index 4bc1d1cd50f..340a65cac16 100644 --- a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php +++ b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php @@ -86,7 +86,7 @@ public function flattenIdentifier(ClassMetadata $class, array $id) $targetClassPersister = $this->unitOfWork->getEntityPersister($property->getTargetEntity()); $identifiers = $this->unitOfWork->isInIdentityMap($id[$field]) ? $this->unitOfWork->getEntityIdentifier($id[$field]) - : $targetClassPersister->getIdentifierValues($id[$field]) + : $targetClassPersister->getIdentifier($id[$field]) ; $associatedId = $this->flattenIdentifier($targetClassMetadata, $identifiers); diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php index 1e21b8d566b..ac37e981170 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php @@ -63,7 +63,8 @@ abstract class AbstractEntityPersisterTest extends OrmTestCase 'expandParameters', 'expandCriteriaParameters', 'getSelectConditionStatementSQL', - 'getIdentifierValues', + 'getIdentifier', + 'setIdentifier', 'insert', 'update', 'delete', diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php index 777312930d3..db822b476db 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php @@ -84,7 +84,7 @@ private function getProxy($object) $proxyFactory = $this->em->getProxyFactory(); $className = get_class($object); $persister = $unitOfWork->getEntityPersister($className); - $identifier = $persister->getIdentifierValues($object); + $identifier = $persister->getIdentifier($object); return $proxyFactory->getProxy($className, $identifier); } diff --git a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php index c2dd96bacda..d0d479f41fe 100644 --- a/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php +++ b/tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php @@ -727,7 +727,10 @@ public function testSupportsMemberOfExpressionSelfReferencing() $person = new CompanyPerson(); - $this->em->getClassMetadata(get_class($person))->assignIdentifier($person, ['id' => 101]); + $unitOfWork = $this->em->getUnitOfWork(); + $persister = $unitOfWork->getEntityPersister(get_class($person)); + + $persister->setIdentifier($person, ['id' => 101]); $q->setParameter('param', $person); diff --git a/tests/Doctrine/Tests/ORM/Utility/IdentifierFlattenerTest.php b/tests/Doctrine/Tests/ORM/Utility/IdentifierFlattenerTest.php index bc8e90c164f..5cbc0621697 100644 --- a/tests/Doctrine/Tests/ORM/Utility/IdentifierFlattenerTest.php +++ b/tests/Doctrine/Tests/ORM/Utility/IdentifierFlattenerTest.php @@ -71,7 +71,7 @@ public function testFlattenIdentifierWithOneToOneId() $class = $this->em->getClassMetadata(FirstRelatedEntity::class); $persister = $this->em->getUnitOfWork()->getEntityPersister(FirstRelatedEntity::class); - $id = $persister->getIdentifierValues($firstEntity); + $id = $persister->getIdentifier($firstEntity); self::assertCount(1, $id, 'We should have 1 identifier'); @@ -111,7 +111,7 @@ public function testFlattenIdentifierWithMutlipleIds() $class = $this->em->getClassMetadata(Flight::class); $persister = $this->em->getUnitOfWork()->getEntityPersister(Flight::class); - $id = $persister->getIdentifierValues($flight); + $id = $persister->getIdentifier($flight); self::assertCount(2, $id); From ce1e3250b4bea05dc0c7a4ed09a6fb05e21705d6 Mon Sep 17 00:00:00 2001 From: Michael Moravec Date: Sat, 24 Jun 2017 22:17:35 +0200 Subject: [PATCH 181/275] Enable strict types --- lib/Doctrine/ORM/AbstractQuery.php | 2 ++ lib/Doctrine/ORM/Annotation/Annotation.php | 2 ++ lib/Doctrine/ORM/Annotation/AssociationOverride.php | 2 ++ lib/Doctrine/ORM/Annotation/AssociationOverrides.php | 2 ++ lib/Doctrine/ORM/Annotation/AttributeOverride.php | 2 ++ lib/Doctrine/ORM/Annotation/AttributeOverrides.php | 2 ++ lib/Doctrine/ORM/Annotation/Cache.php | 2 ++ lib/Doctrine/ORM/Annotation/ChangeTrackingPolicy.php | 2 ++ lib/Doctrine/ORM/Annotation/Column.php | 2 ++ lib/Doctrine/ORM/Annotation/ColumnResult.php | 2 ++ lib/Doctrine/ORM/Annotation/CustomIdGenerator.php | 2 ++ lib/Doctrine/ORM/Annotation/DiscriminatorColumn.php | 2 ++ lib/Doctrine/ORM/Annotation/DiscriminatorMap.php | 2 ++ lib/Doctrine/ORM/Annotation/DoctrineAnnotations.php | 2 ++ lib/Doctrine/ORM/Annotation/Embeddable.php | 2 ++ lib/Doctrine/ORM/Annotation/Embedded.php | 2 ++ lib/Doctrine/ORM/Annotation/Entity.php | 2 ++ lib/Doctrine/ORM/Annotation/EntityListeners.php | 2 ++ lib/Doctrine/ORM/Annotation/EntityResult.php | 2 ++ lib/Doctrine/ORM/Annotation/FieldResult.php | 2 ++ lib/Doctrine/ORM/Annotation/GeneratedValue.php | 2 ++ lib/Doctrine/ORM/Annotation/HasLifecycleCallbacks.php | 2 ++ lib/Doctrine/ORM/Annotation/Id.php | 2 ++ lib/Doctrine/ORM/Annotation/Index.php | 2 ++ lib/Doctrine/ORM/Annotation/InheritanceType.php | 2 ++ lib/Doctrine/ORM/Annotation/JoinColumn.php | 2 ++ lib/Doctrine/ORM/Annotation/JoinColumns.php | 2 ++ lib/Doctrine/ORM/Annotation/JoinTable.php | 2 ++ lib/Doctrine/ORM/Annotation/ManyToMany.php | 2 ++ lib/Doctrine/ORM/Annotation/ManyToOne.php | 2 ++ lib/Doctrine/ORM/Annotation/MappedSuperclass.php | 2 ++ lib/Doctrine/ORM/Annotation/NamedNativeQueries.php | 2 ++ lib/Doctrine/ORM/Annotation/NamedNativeQuery.php | 2 ++ lib/Doctrine/ORM/Annotation/NamedQueries.php | 2 ++ lib/Doctrine/ORM/Annotation/NamedQuery.php | 2 ++ lib/Doctrine/ORM/Annotation/OneToMany.php | 2 ++ lib/Doctrine/ORM/Annotation/OneToOne.php | 2 ++ lib/Doctrine/ORM/Annotation/OrderBy.php | 2 ++ lib/Doctrine/ORM/Annotation/PostLoad.php | 2 ++ lib/Doctrine/ORM/Annotation/PostPersist.php | 2 ++ lib/Doctrine/ORM/Annotation/PostRemove.php | 2 ++ lib/Doctrine/ORM/Annotation/PostUpdate.php | 2 ++ lib/Doctrine/ORM/Annotation/PreFlush.php | 2 ++ lib/Doctrine/ORM/Annotation/PrePersist.php | 2 ++ lib/Doctrine/ORM/Annotation/PreRemove.php | 2 ++ lib/Doctrine/ORM/Annotation/PreUpdate.php | 2 ++ lib/Doctrine/ORM/Annotation/SequenceGenerator.php | 2 ++ lib/Doctrine/ORM/Annotation/SqlResultSetMapping.php | 2 ++ lib/Doctrine/ORM/Annotation/SqlResultSetMappings.php | 2 ++ lib/Doctrine/ORM/Annotation/Table.php | 2 ++ lib/Doctrine/ORM/Annotation/UniqueConstraint.php | 2 ++ lib/Doctrine/ORM/Annotation/Version.php | 2 ++ lib/Doctrine/ORM/Cache.php | 2 ++ lib/Doctrine/ORM/Cache/AssociationCacheEntry.php | 2 ++ lib/Doctrine/ORM/Cache/CacheConfiguration.php | 2 ++ lib/Doctrine/ORM/Cache/CacheEntry.php | 2 ++ lib/Doctrine/ORM/Cache/CacheException.php | 2 ++ lib/Doctrine/ORM/Cache/CacheFactory.php | 2 ++ lib/Doctrine/ORM/Cache/CacheKey.php | 2 ++ lib/Doctrine/ORM/Cache/CollectionCacheEntry.php | 2 ++ lib/Doctrine/ORM/Cache/CollectionCacheKey.php | 2 ++ lib/Doctrine/ORM/Cache/CollectionHydrator.php | 2 ++ lib/Doctrine/ORM/Cache/ConcurrentRegion.php | 2 ++ lib/Doctrine/ORM/Cache/DefaultCache.php | 2 ++ lib/Doctrine/ORM/Cache/DefaultCacheFactory.php | 2 ++ lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php | 2 ++ lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php | 2 ++ lib/Doctrine/ORM/Cache/DefaultQueryCache.php | 2 ++ lib/Doctrine/ORM/Cache/EntityCacheEntry.php | 2 ++ lib/Doctrine/ORM/Cache/EntityCacheKey.php | 2 ++ lib/Doctrine/ORM/Cache/EntityHydrator.php | 2 ++ lib/Doctrine/ORM/Cache/Lock.php | 2 ++ lib/Doctrine/ORM/Cache/LockException.php | 2 ++ lib/Doctrine/ORM/Cache/Logging/CacheLogger.php | 2 ++ lib/Doctrine/ORM/Cache/Logging/CacheLoggerChain.php | 2 ++ lib/Doctrine/ORM/Cache/Logging/StatisticsCacheLogger.php | 2 ++ lib/Doctrine/ORM/Cache/MultiGetRegion.php | 2 ++ lib/Doctrine/ORM/Cache/Persister/CachedPersister.php | 2 ++ .../Persister/Collection/AbstractCollectionPersister.php | 2 ++ .../Persister/Collection/CachedCollectionPersister.php | 2 ++ .../NonStrictReadWriteCachedCollectionPersister.php | 2 ++ .../Collection/ReadOnlyCachedCollectionPersister.php | 2 ++ .../Collection/ReadWriteCachedCollectionPersister.php | 2 ++ .../ORM/Cache/Persister/Entity/AbstractEntityPersister.php | 2 ++ .../ORM/Cache/Persister/Entity/CachedEntityPersister.php | 2 ++ .../Entity/NonStrictReadWriteCachedEntityPersister.php | 2 ++ .../Persister/Entity/ReadOnlyCachedEntityPersister.php | 2 ++ .../Persister/Entity/ReadWriteCachedEntityPersister.php | 2 ++ lib/Doctrine/ORM/Cache/QueryCache.php | 2 ++ lib/Doctrine/ORM/Cache/QueryCacheEntry.php | 2 ++ lib/Doctrine/ORM/Cache/QueryCacheKey.php | 2 ++ lib/Doctrine/ORM/Cache/QueryCacheValidator.php | 2 ++ lib/Doctrine/ORM/Cache/Region.php | 2 ++ lib/Doctrine/ORM/Cache/Region/DefaultMultiGetRegion.php | 2 ++ lib/Doctrine/ORM/Cache/Region/DefaultRegion.php | 2 ++ lib/Doctrine/ORM/Cache/Region/FileLockRegion.php | 2 ++ lib/Doctrine/ORM/Cache/Region/UpdateTimestampCache.php | 2 ++ lib/Doctrine/ORM/Cache/RegionsConfiguration.php | 2 ++ lib/Doctrine/ORM/Cache/TimestampCacheEntry.php | 2 ++ lib/Doctrine/ORM/Cache/TimestampCacheKey.php | 2 ++ lib/Doctrine/ORM/Cache/TimestampQueryCacheValidator.php | 2 ++ lib/Doctrine/ORM/Cache/TimestampRegion.php | 2 ++ lib/Doctrine/ORM/Configuration.php | 2 ++ lib/Doctrine/ORM/Configuration/MetadataConfiguration.php | 4 ++-- lib/Doctrine/ORM/Configuration/ProxyConfiguration.php | 4 ++-- lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php | 2 ++ lib/Doctrine/ORM/EntityManager.php | 2 ++ lib/Doctrine/ORM/EntityManagerAware.php | 2 ++ lib/Doctrine/ORM/EntityManagerInterface.php | 2 ++ lib/Doctrine/ORM/EntityNotFoundException.php | 2 ++ lib/Doctrine/ORM/EntityRepository.php | 2 ++ lib/Doctrine/ORM/Event/LifecycleEventArgs.php | 2 ++ lib/Doctrine/ORM/Event/ListenersInvoker.php | 2 ++ lib/Doctrine/ORM/Event/LoadClassMetadataEventArgs.php | 2 ++ lib/Doctrine/ORM/Event/OnClassMetadataNotFoundEventArgs.php | 2 ++ lib/Doctrine/ORM/Event/OnClearEventArgs.php | 2 ++ lib/Doctrine/ORM/Event/OnFlushEventArgs.php | 2 ++ lib/Doctrine/ORM/Event/PostFlushEventArgs.php | 2 ++ lib/Doctrine/ORM/Event/PreFlushEventArgs.php | 2 ++ lib/Doctrine/ORM/Event/PreUpdateEventArgs.php | 2 ++ lib/Doctrine/ORM/Events.php | 2 ++ lib/Doctrine/ORM/Internal/CommitOrderCalculator.php | 2 ++ lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php | 2 ++ lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php | 2 ++ lib/Doctrine/ORM/Internal/Hydration/HydrationException.php | 2 ++ lib/Doctrine/ORM/Internal/Hydration/IterableResult.php | 2 ++ lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php | 2 ++ lib/Doctrine/ORM/Internal/Hydration/ScalarHydrator.php | 2 ++ .../ORM/Internal/Hydration/SimpleObjectHydrator.php | 2 ++ .../ORM/Internal/Hydration/SingleScalarHydrator.php | 2 ++ lib/Doctrine/ORM/Internal/HydrationCompleteHandler.php | 2 ++ lib/Doctrine/ORM/LazyCriteriaCollection.php | 2 ++ lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php | 2 ++ lib/Doctrine/ORM/Mapping/AssociationMetadata.php | 4 ++-- lib/Doctrine/ORM/Mapping/CacheMetadata.php | 4 ++-- lib/Doctrine/ORM/Mapping/CacheUsage.php | 6 +++--- lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php | 6 +++--- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 2 ++ lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php | 2 ++ lib/Doctrine/ORM/Mapping/ColumnMetadata.php | 6 +++--- lib/Doctrine/ORM/Mapping/ComponentMetadata.php | 4 ++-- lib/Doctrine/ORM/Mapping/DefaultEntityListenerResolver.php | 2 ++ lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php | 6 +++--- lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php | 2 ++ lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php | 2 ++ lib/Doctrine/ORM/Mapping/Driver/DriverChain.php | 2 ++ lib/Doctrine/ORM/Mapping/Driver/FileDriver.php | 2 ++ lib/Doctrine/ORM/Mapping/Driver/MappingDriver.php | 2 ++ lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php | 2 ++ lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php | 2 ++ lib/Doctrine/ORM/Mapping/Driver/SimplifiedXmlDriver.php | 2 ++ lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php | 2 ++ lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 2 ++ lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php | 4 ++-- lib/Doctrine/ORM/Mapping/EntityClassMetadata.php | 4 ++-- lib/Doctrine/ORM/Mapping/EntityListenerResolver.php | 2 ++ .../ORM/Mapping/Exporter/AssociationMetadataExporter.php | 4 ++-- lib/Doctrine/ORM/Mapping/Exporter/CacheMetadataExporter.php | 4 ++-- lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php | 4 ++-- .../ORM/Mapping/Exporter/ColumnMetadataExporter.php | 4 ++-- .../Exporter/DiscriminatorColumnMetadataExporter.php | 4 ++-- lib/Doctrine/ORM/Mapping/Exporter/Exporter.php | 4 ++-- lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php | 4 ++-- .../ORM/Mapping/Exporter/JoinColumnMetadataExporter.php | 4 ++-- .../ORM/Mapping/Exporter/JoinTableMetadataExporter.php | 4 ++-- .../ORM/Mapping/Exporter/LocalColumnMetadataExporter.php | 4 ++-- .../Exporter/ManyToManyAssociationMetadataExporter.php | 4 ++-- .../Exporter/ManyToOneAssociationMetadataExporter.php | 4 ++-- .../Exporter/OneToManyAssociationMetadataExporter.php | 4 ++-- .../Exporter/OneToOneAssociationMetadataExporter.php | 4 ++-- lib/Doctrine/ORM/Mapping/Exporter/TableMetadataExporter.php | 4 ++-- .../Mapping/Exporter/ToManyAssociationMetadataExporter.php | 4 ++-- .../Mapping/Exporter/ToOneAssociationMetadataExporter.php | 4 ++-- .../ORM/Mapping/Exporter/TransientMetadataExporter.php | 4 ++-- lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php | 4 ++-- .../ORM/Mapping/Exporter/VersionFieldMetadataExporter.php | 4 ++-- .../ORM/Mapping/Factory/AbstractClassMetadataFactory.php | 4 ++-- lib/Doctrine/ORM/Mapping/Factory/Autoloader.php | 4 ++-- .../ORM/Mapping/Factory/ClassMetadataDefinition.php | 4 ++-- .../ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php | 4 ++-- lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php | 4 ++-- lib/Doctrine/ORM/Mapping/Factory/ClassMetadataResolver.php | 6 +++--- .../ORM/Mapping/Factory/DefaultClassMetadataResolver.php | 6 +++--- lib/Doctrine/ORM/Mapping/Factory/DefaultNamingStrategy.php | 2 ++ lib/Doctrine/ORM/Mapping/Factory/NamingStrategy.php | 2 ++ .../ORM/Mapping/Factory/RuntimeClassMetadataFactory.php | 4 ++-- .../ORM/Mapping/Factory/StaticClassMetadataFactory.php | 4 ++-- .../Factory/Strategy/ClassMetadataGeneratorStrategy.php | 4 ++-- .../ConditionalFileWriterClassMetadataGeneratorStrategy.php | 4 ++-- .../Strategy/EvaluatingClassMetadataGeneratorStrategy.php | 4 ++-- .../Strategy/FileReaderClassMetadataGeneratorStrategy.php | 4 ++-- .../Strategy/FileWriterClassMetadataGeneratorStrategy.php | 4 ++-- .../ORM/Mapping/Factory/UnderscoreNamingStrategy.php | 2 ++ lib/Doctrine/ORM/Mapping/FetchMode.php | 6 +++--- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 4 ++-- lib/Doctrine/ORM/Mapping/GeneratorType.php | 6 +++--- lib/Doctrine/ORM/Mapping/InheritanceType.php | 6 +++--- lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php | 4 ++-- lib/Doctrine/ORM/Mapping/JoinTableMetadata.php | 6 +++--- lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php | 6 +++--- lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php | 4 +++- lib/Doctrine/ORM/Mapping/ManyToOneAssociationMetadata.php | 4 +++- lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php | 6 +++--- lib/Doctrine/ORM/Mapping/MappingException.php | 2 ++ lib/Doctrine/ORM/Mapping/OneToManyAssociationMetadata.php | 4 +++- lib/Doctrine/ORM/Mapping/OneToOneAssociationMetadata.php | 4 +++- lib/Doctrine/ORM/Mapping/Property.php | 2 ++ lib/Doctrine/ORM/Mapping/ReflectionEmbeddedProperty.php | 2 ++ lib/Doctrine/ORM/Mapping/RootClassMetadata.php | 4 ++-- lib/Doctrine/ORM/Mapping/SubClassMetadata.php | 4 ++-- lib/Doctrine/ORM/Mapping/TableMetadata.php | 6 +++--- lib/Doctrine/ORM/Mapping/TableOwner.php | 4 ++-- lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php | 4 +++- lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php | 4 +++- lib/Doctrine/ORM/Mapping/TransientMetadata.php | 4 ++-- lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php | 6 +++--- lib/Doctrine/ORM/NativeQuery.php | 2 ++ lib/Doctrine/ORM/NoResultException.php | 2 ++ lib/Doctrine/ORM/NonUniqueResultException.php | 2 ++ lib/Doctrine/ORM/ORMException.php | 2 ++ lib/Doctrine/ORM/ORMInvalidArgumentException.php | 2 ++ lib/Doctrine/ORM/OptimisticLockException.php | 2 ++ lib/Doctrine/ORM/PersistentCollection.php | 2 ++ lib/Doctrine/ORM/PersistentObject.php | 2 ++ .../Persisters/Collection/AbstractCollectionPersister.php | 2 ++ .../ORM/Persisters/Collection/CollectionPersister.php | 2 ++ .../ORM/Persisters/Collection/ManyToManyPersister.php | 2 ++ .../ORM/Persisters/Collection/OneToManyPersister.php | 2 ++ .../Entity/AbstractEntityInheritancePersister.php | 2 ++ lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php | 2 ++ .../ORM/Persisters/Entity/CachedPersisterContext.php | 2 ++ lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php | 2 ++ .../ORM/Persisters/Entity/JoinedSubclassPersister.php | 2 ++ lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php | 2 ++ lib/Doctrine/ORM/Persisters/PersisterException.php | 2 ++ lib/Doctrine/ORM/Persisters/SqlExpressionVisitor.php | 2 ++ lib/Doctrine/ORM/Persisters/SqlValueVisitor.php | 2 ++ lib/Doctrine/ORM/PessimisticLockException.php | 2 ++ lib/Doctrine/ORM/Proxy/Factory/Autoloader.php | 4 ++-- lib/Doctrine/ORM/Proxy/Factory/DefaultProxyResolver.php | 4 ++-- lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php | 4 ++-- lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php | 4 ++-- lib/Doctrine/ORM/Proxy/Factory/ProxyException.php | 4 ++-- lib/Doctrine/ORM/Proxy/Factory/ProxyFactory.php | 4 ++-- lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php | 2 ++ lib/Doctrine/ORM/Proxy/Factory/ProxyResolver.php | 6 +++--- lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php | 4 ++-- .../ConditionalFileWriterProxyGeneratorStrategy.php | 4 ++-- .../Factory/Strategy/EvaluatingProxyGeneratorStrategy.php | 4 ++-- .../Factory/Strategy/FileReaderProxyGeneratorStrategy.php | 4 ++-- .../Factory/Strategy/FileWriterProxyGeneratorStrategy.php | 4 ++-- .../ORM/Proxy/Factory/Strategy/ProxyGeneratorStrategy.php | 4 ++-- lib/Doctrine/ORM/Proxy/Proxy.php | 4 ++-- lib/Doctrine/ORM/Query.php | 2 ++ lib/Doctrine/ORM/Query/AST/ASTException.php | 2 ++ lib/Doctrine/ORM/Query/AST/AggregateExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/ArithmeticExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/ArithmeticFactor.php | 2 ++ lib/Doctrine/ORM/Query/AST/ArithmeticTerm.php | 2 ++ lib/Doctrine/ORM/Query/AST/BetweenExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/CoalesceExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/CollectionMemberExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/ComparisonExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/ConditionalExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/ConditionalFactor.php | 2 ++ lib/Doctrine/ORM/Query/AST/ConditionalPrimary.php | 2 ++ lib/Doctrine/ORM/Query/AST/ConditionalTerm.php | 2 ++ lib/Doctrine/ORM/Query/AST/DeleteClause.php | 2 ++ lib/Doctrine/ORM/Query/AST/DeleteStatement.php | 2 ++ .../ORM/Query/AST/EmptyCollectionComparisonExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/ExistsExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/FromClause.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/AbsFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/AvgFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/BitAndFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/BitOrFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/ConcatFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/CountFunction.php | 2 ++ .../ORM/Query/AST/Functions/CurrentDateFunction.php | 2 ++ .../ORM/Query/AST/Functions/CurrentTimeFunction.php | 2 ++ .../ORM/Query/AST/Functions/CurrentTimestampFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/DateAddFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/DateDiffFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/DateSubFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/FunctionNode.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/LengthFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/LocateFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/LowerFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/MaxFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/MinFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/ModFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/SqrtFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/SubstringFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/SumFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/TrimFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/Functions/UpperFunction.php | 2 ++ lib/Doctrine/ORM/Query/AST/GeneralCaseExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/GroupByClause.php | 2 ++ lib/Doctrine/ORM/Query/AST/HavingClause.php | 2 ++ .../ORM/Query/AST/IdentificationVariableDeclaration.php | 2 ++ lib/Doctrine/ORM/Query/AST/InExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/IndexBy.php | 2 ++ lib/Doctrine/ORM/Query/AST/InputParameter.php | 2 ++ lib/Doctrine/ORM/Query/AST/InstanceOfExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/Join.php | 2 ++ lib/Doctrine/ORM/Query/AST/JoinAssociationDeclaration.php | 2 ++ .../ORM/Query/AST/JoinAssociationPathExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/JoinClassPathExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/JoinVariableDeclaration.php | 2 ++ lib/Doctrine/ORM/Query/AST/LikeExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/Literal.php | 2 ++ lib/Doctrine/ORM/Query/AST/NewObjectExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/Node.php | 2 ++ lib/Doctrine/ORM/Query/AST/NullComparisonExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/NullIfExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/OrderByClause.php | 2 ++ lib/Doctrine/ORM/Query/AST/OrderByItem.php | 2 ++ lib/Doctrine/ORM/Query/AST/ParenthesisExpression.php | 4 +++- lib/Doctrine/ORM/Query/AST/PartialObjectExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/PathExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/QuantifiedExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/RangeVariableDeclaration.php | 2 ++ lib/Doctrine/ORM/Query/AST/SelectClause.php | 2 ++ lib/Doctrine/ORM/Query/AST/SelectExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/SelectStatement.php | 2 ++ lib/Doctrine/ORM/Query/AST/SimpleArithmeticExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/SimpleCaseExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/SimpleSelectClause.php | 2 ++ lib/Doctrine/ORM/Query/AST/SimpleSelectExpression.php | 2 ++ lib/Doctrine/ORM/Query/AST/SimpleWhenClause.php | 2 ++ lib/Doctrine/ORM/Query/AST/Subselect.php | 2 ++ lib/Doctrine/ORM/Query/AST/SubselectFromClause.php | 2 ++ .../AST/SubselectIdentificationVariableDeclaration.php | 2 ++ lib/Doctrine/ORM/Query/AST/UpdateClause.php | 2 ++ lib/Doctrine/ORM/Query/AST/UpdateItem.php | 2 ++ lib/Doctrine/ORM/Query/AST/UpdateStatement.php | 2 ++ lib/Doctrine/ORM/Query/AST/WhenClause.php | 2 ++ lib/Doctrine/ORM/Query/AST/WhereClause.php | 2 ++ lib/Doctrine/ORM/Query/Exec/AbstractSqlExecutor.php | 2 ++ lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php | 2 ++ lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php | 2 ++ lib/Doctrine/ORM/Query/Exec/SingleSelectExecutor.php | 2 ++ .../ORM/Query/Exec/SingleTableDeleteUpdateExecutor.php | 2 ++ lib/Doctrine/ORM/Query/Expr.php | 2 ++ lib/Doctrine/ORM/Query/Expr/Andx.php | 2 ++ lib/Doctrine/ORM/Query/Expr/Base.php | 2 ++ lib/Doctrine/ORM/Query/Expr/Comparison.php | 2 ++ lib/Doctrine/ORM/Query/Expr/Composite.php | 2 ++ lib/Doctrine/ORM/Query/Expr/From.php | 2 ++ lib/Doctrine/ORM/Query/Expr/Func.php | 2 ++ lib/Doctrine/ORM/Query/Expr/GroupBy.php | 2 ++ lib/Doctrine/ORM/Query/Expr/Join.php | 2 ++ lib/Doctrine/ORM/Query/Expr/Literal.php | 2 ++ lib/Doctrine/ORM/Query/Expr/Math.php | 2 ++ lib/Doctrine/ORM/Query/Expr/OrderBy.php | 2 ++ lib/Doctrine/ORM/Query/Expr/Orx.php | 2 ++ lib/Doctrine/ORM/Query/Expr/Select.php | 2 ++ lib/Doctrine/ORM/Query/Filter/SQLFilter.php | 2 ++ lib/Doctrine/ORM/Query/FilterCollection.php | 2 ++ lib/Doctrine/ORM/Query/Lexer.php | 2 ++ lib/Doctrine/ORM/Query/Parameter.php | 2 ++ lib/Doctrine/ORM/Query/ParameterTypeInferer.php | 2 ++ lib/Doctrine/ORM/Query/Parser.php | 2 ++ lib/Doctrine/ORM/Query/ParserResult.php | 2 ++ lib/Doctrine/ORM/Query/Printer.php | 2 ++ lib/Doctrine/ORM/Query/QueryException.php | 2 ++ lib/Doctrine/ORM/Query/QueryExpressionVisitor.php | 2 ++ lib/Doctrine/ORM/Query/ResultSetMapping.php | 2 ++ lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php | 2 ++ lib/Doctrine/ORM/Query/SqlWalker.php | 2 ++ lib/Doctrine/ORM/Query/TreeWalker.php | 2 ++ lib/Doctrine/ORM/Query/TreeWalkerAdapter.php | 2 ++ lib/Doctrine/ORM/Query/TreeWalkerChain.php | 2 ++ lib/Doctrine/ORM/Query/TreeWalkerChainIterator.php | 2 ++ lib/Doctrine/ORM/QueryBuilder.php | 2 ++ lib/Doctrine/ORM/Reflection/ReflectionService.php | 4 ++-- .../ORM/Reflection/RuntimePublicReflectionProperty.php | 2 ++ lib/Doctrine/ORM/Reflection/RuntimeReflectionService.php | 4 ++-- lib/Doctrine/ORM/Reflection/StaticReflectionService.php | 4 ++-- lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php | 2 ++ lib/Doctrine/ORM/Repository/RepositoryFactory.php | 4 +++- lib/Doctrine/ORM/Sequencing/AssignedGenerator.php | 2 ++ lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php | 2 ++ lib/Doctrine/ORM/Sequencing/Generator.php | 4 ++-- lib/Doctrine/ORM/Sequencing/IdentityGenerator.php | 2 ++ lib/Doctrine/ORM/Sequencing/SequenceGenerator.php | 2 ++ lib/Doctrine/ORM/Sequencing/TableGenerator.php | 2 ++ lib/Doctrine/ORM/Sequencing/UuidGenerator.php | 2 ++ lib/Doctrine/ORM/Tools/AttachEntityListenersListener.php | 2 ++ .../Console/Command/ClearCache/CollectionRegionCommand.php | 2 ++ .../Console/Command/ClearCache/EntityRegionCommand.php | 2 ++ .../Tools/Console/Command/ClearCache/MetadataCommand.php | 2 ++ .../ORM/Tools/Console/Command/ClearCache/QueryCommand.php | 2 ++ .../Tools/Console/Command/ClearCache/QueryRegionCommand.php | 2 ++ .../ORM/Tools/Console/Command/ClearCache/ResultCommand.php | 2 ++ .../ORM/Tools/Console/Command/ConvertMappingCommand.php | 2 ++ .../Console/Command/EnsureProductionSettingsCommand.php | 2 ++ .../ORM/Tools/Console/Command/GenerateEntitiesCommand.php | 2 ++ .../ORM/Tools/Console/Command/GenerateProxiesCommand.php | 2 ++ .../Tools/Console/Command/GenerateRepositoriesCommand.php | 2 ++ lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php | 2 ++ .../ORM/Tools/Console/Command/MappingDescribeCommand.php | 2 ++ lib/Doctrine/ORM/Tools/Console/Command/RunDqlCommand.php | 2 ++ .../Tools/Console/Command/SchemaTool/AbstractCommand.php | 2 ++ .../ORM/Tools/Console/Command/SchemaTool/CreateCommand.php | 2 ++ .../ORM/Tools/Console/Command/SchemaTool/DropCommand.php | 2 ++ .../ORM/Tools/Console/Command/SchemaTool/UpdateCommand.php | 2 ++ .../ORM/Tools/Console/Command/ValidateSchemaCommand.php | 2 ++ lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php | 2 ++ .../ORM/Tools/Console/Helper/EntityManagerHelper.php | 2 ++ lib/Doctrine/ORM/Tools/Console/MetadataFilter.php | 2 ++ lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php | 2 ++ lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php | 2 ++ lib/Doctrine/ORM/Tools/EntityGenerator.php | 2 ++ lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php | 2 ++ lib/Doctrine/ORM/Tools/Event/GenerateSchemaEventArgs.php | 2 ++ .../ORM/Tools/Event/GenerateSchemaTableEventArgs.php | 2 ++ lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php | 2 ++ lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php | 2 ++ lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php | 2 ++ lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php | 2 ++ lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php | 2 ++ lib/Doctrine/ORM/Tools/Export/ExportException.php | 2 ++ lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php | 2 ++ lib/Doctrine/ORM/Tools/Pagination/CountWalker.php | 2 ++ .../ORM/Tools/Pagination/LimitSubqueryOutputWalker.php | 2 ++ lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php | 2 ++ lib/Doctrine/ORM/Tools/Pagination/Paginator.php | 2 ++ lib/Doctrine/ORM/Tools/Pagination/RowNumberOverFunction.php | 2 ++ lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php | 2 ++ lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php | 2 ++ lib/Doctrine/ORM/Tools/SchemaTool.php | 2 ++ lib/Doctrine/ORM/Tools/SchemaValidator.php | 2 ++ lib/Doctrine/ORM/Tools/Setup.php | 2 ++ lib/Doctrine/ORM/Tools/ToolEvents.php | 2 ++ lib/Doctrine/ORM/Tools/ToolsException.php | 2 ++ lib/Doctrine/ORM/TransactionRequiredException.php | 2 ++ lib/Doctrine/ORM/UnexpectedResultException.php | 2 ++ lib/Doctrine/ORM/UnitOfWork.php | 2 ++ lib/Doctrine/ORM/Utility/IdentifierFlattener.php | 2 ++ lib/Doctrine/ORM/Utility/PersisterHelper.php | 2 ++ lib/Doctrine/ORM/Version.php | 2 ++ .../Performance/ChangeSet/UnitOfWorkComputeChangesBench.php | 2 ++ tests/Doctrine/Performance/EntityManagerFactory.php | 2 ++ .../MixedQueryFetchJoinArrayHydrationPerformanceBench.php | 2 ++ ...xedQueryFetchJoinFullObjectHydrationPerformanceBench.php | 2 ++ ...QueryFetchJoinPartialObjectHydrationPerformanceBench.php | 2 ++ .../Doctrine/Performance/Hydration/SimpleHydrationBench.php | 2 ++ .../Performance/Hydration/SimpleInsertPerformanceBench.php | 2 ++ .../Hydration/SimpleQueryArrayHydrationPerformanceBench.php | 2 ++ .../SimpleQueryFullObjectHydrationPerformanceBench.php | 2 ++ .../SimpleQueryPartialObjectHydrationPerformanceBench.php | 2 ++ .../SimpleQueryScalarHydrationPerformanceBench.php | 2 ++ .../SingleTableInheritanceHydrationPerformanceBench.php | 2 ++ .../SingleTableInheritanceInsertPerformanceBench.php | 2 ++ .../LazyLoading/ProxyInitializationTimeBench.php | 2 ++ .../Performance/LazyLoading/ProxyInstantiationTimeBench.php | 2 ++ tests/Doctrine/Performance/Mock/NonLoadingPersister.php | 2 ++ .../Performance/Mock/NonProxyLoadingEntityManager.php | 2 ++ .../Doctrine/Performance/Mock/NonProxyLoadingUnitOfWork.php | 2 ++ tests/Doctrine/Tests/DbalFunctionalTestCase.php | 2 ++ tests/Doctrine/Tests/DbalTestCase.php | 2 ++ tests/Doctrine/Tests/DbalTypes/CustomIdObject.php | 2 ++ tests/Doctrine/Tests/DbalTypes/CustomIdObjectType.php | 2 ++ tests/Doctrine/Tests/DbalTypes/NegativeToPositiveType.php | 2 ++ tests/Doctrine/Tests/DbalTypes/Rot13Type.php | 2 ++ tests/Doctrine/Tests/DbalTypes/UpperCaseStringType.php | 2 ++ tests/Doctrine/Tests/DoctrineTestCase.php | 2 ++ .../Doctrine/Tests/EventListener/CacheMetadataListener.php | 2 ++ tests/Doctrine/Tests/Mocks/CacheEntryMock.php | 2 ++ tests/Doctrine/Tests/Mocks/CacheKeyMock.php | 2 ++ tests/Doctrine/Tests/Mocks/CacheRegionMock.php | 2 ++ tests/Doctrine/Tests/Mocks/ClassMetadataMock.php | 2 ++ tests/Doctrine/Tests/Mocks/ConcurrentRegionMock.php | 2 ++ tests/Doctrine/Tests/Mocks/ConnectionMock.php | 2 ++ tests/Doctrine/Tests/Mocks/DatabasePlatformMock.php | 2 ++ tests/Doctrine/Tests/Mocks/DriverConnectionMock.php | 2 ++ tests/Doctrine/Tests/Mocks/DriverMock.php | 2 ++ tests/Doctrine/Tests/Mocks/EntityManagerMock.php | 2 ++ tests/Doctrine/Tests/Mocks/EntityPersisterMock.php | 2 ++ tests/Doctrine/Tests/Mocks/HydratorMockStatement.php | 2 ++ tests/Doctrine/Tests/Mocks/MetadataDriverMock.php | 2 ++ tests/Doctrine/Tests/Mocks/MockTreeWalker.php | 2 ++ tests/Doctrine/Tests/Mocks/SchemaManagerMock.php | 2 ++ tests/Doctrine/Tests/Mocks/SequenceMock.php | 2 ++ tests/Doctrine/Tests/Mocks/StatementArrayMock.php | 2 ++ tests/Doctrine/Tests/Mocks/StatementMock.php | 2 ++ tests/Doctrine/Tests/Mocks/TimestampRegionMock.php | 2 ++ tests/Doctrine/Tests/Mocks/UnitOfWorkMock.php | 2 ++ tests/Doctrine/Tests/Models/CMS/CmsAddress.php | 2 ++ tests/Doctrine/Tests/Models/CMS/CmsAddressDTO.php | 4 +++- tests/Doctrine/Tests/Models/CMS/CmsAddressListener.php | 4 +++- tests/Doctrine/Tests/Models/CMS/CmsArticle.php | 2 ++ tests/Doctrine/Tests/Models/CMS/CmsComment.php | 2 ++ tests/Doctrine/Tests/Models/CMS/CmsEmail.php | 4 +++- tests/Doctrine/Tests/Models/CMS/CmsEmployee.php | 2 ++ tests/Doctrine/Tests/Models/CMS/CmsGroup.php | 2 ++ tests/Doctrine/Tests/Models/CMS/CmsPhonenumber.php | 2 ++ tests/Doctrine/Tests/Models/CMS/CmsTag.php | 2 ++ tests/Doctrine/Tests/Models/CMS/CmsUser.php | 2 ++ tests/Doctrine/Tests/Models/CMS/CmsUserDTO.php | 4 +++- tests/Doctrine/Tests/Models/Cache/Action.php | 2 ++ tests/Doctrine/Tests/Models/Cache/Address.php | 2 ++ tests/Doctrine/Tests/Models/Cache/Attraction.php | 2 ++ tests/Doctrine/Tests/Models/Cache/AttractionContactInfo.php | 2 ++ tests/Doctrine/Tests/Models/Cache/AttractionInfo.php | 2 ++ .../Doctrine/Tests/Models/Cache/AttractionLocationInfo.php | 2 ++ tests/Doctrine/Tests/Models/Cache/Bar.php | 2 ++ tests/Doctrine/Tests/Models/Cache/Beach.php | 2 ++ tests/Doctrine/Tests/Models/Cache/City.php | 2 ++ tests/Doctrine/Tests/Models/Cache/Client.php | 2 ++ tests/Doctrine/Tests/Models/Cache/ComplexAction.php | 2 ++ tests/Doctrine/Tests/Models/Cache/Country.php | 2 ++ tests/Doctrine/Tests/Models/Cache/Flight.php | 2 ++ tests/Doctrine/Tests/Models/Cache/Login.php | 2 ++ tests/Doctrine/Tests/Models/Cache/Person.php | 2 ++ tests/Doctrine/Tests/Models/Cache/Restaurant.php | 2 ++ tests/Doctrine/Tests/Models/Cache/State.php | 2 ++ tests/Doctrine/Tests/Models/Cache/Token.php | 2 ++ tests/Doctrine/Tests/Models/Cache/Travel.php | 2 ++ tests/Doctrine/Tests/Models/Cache/Traveler.php | 2 ++ tests/Doctrine/Tests/Models/Cache/TravelerProfile.php | 2 ++ tests/Doctrine/Tests/Models/Cache/TravelerProfileInfo.php | 2 ++ tests/Doctrine/Tests/Models/Company/CompanyAuction.php | 2 ++ tests/Doctrine/Tests/Models/Company/CompanyCar.php | 4 +++- tests/Doctrine/Tests/Models/Company/CompanyContract.php | 2 ++ .../Tests/Models/Company/CompanyContractListener.php | 2 ++ tests/Doctrine/Tests/Models/Company/CompanyEmployee.php | 2 ++ tests/Doctrine/Tests/Models/Company/CompanyEvent.php | 4 +++- tests/Doctrine/Tests/Models/Company/CompanyFixContract.php | 2 ++ tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php | 2 ++ .../Tests/Models/Company/CompanyFlexUltraContract.php | 2 ++ .../Models/Company/CompanyFlexUltraContractListener.php | 2 ++ tests/Doctrine/Tests/Models/Company/CompanyManager.php | 2 ++ tests/Doctrine/Tests/Models/Company/CompanyOrganization.php | 2 ++ tests/Doctrine/Tests/Models/Company/CompanyPerson.php | 2 ++ tests/Doctrine/Tests/Models/Company/CompanyRaffle.php | 4 +++- .../Models/CompositeKeyInheritance/JoinedChildClass.php | 2 ++ .../Models/CompositeKeyInheritance/JoinedRootClass.php | 2 ++ .../Models/CompositeKeyInheritance/SingleChildClass.php | 2 ++ .../Models/CompositeKeyInheritance/SingleRootClass.php | 2 ++ .../Tests/Models/CustomType/CustomIdObjectTypeChild.php | 2 ++ .../Tests/Models/CustomType/CustomIdObjectTypeParent.php | 2 ++ tests/Doctrine/Tests/Models/CustomType/CustomTypeChild.php | 2 ++ tests/Doctrine/Tests/Models/CustomType/CustomTypeParent.php | 2 ++ .../Tests/Models/CustomType/CustomTypeUpperCase.php | 2 ++ tests/Doctrine/Tests/Models/DDC117/DDC117ApproveChanges.php | 4 +++- tests/Doctrine/Tests/Models/DDC117/DDC117Article.php | 2 ++ tests/Doctrine/Tests/Models/DDC117/DDC117ArticleDetails.php | 4 +++- tests/Doctrine/Tests/Models/DDC117/DDC117Editor.php | 4 +++- tests/Doctrine/Tests/Models/DDC117/DDC117Link.php | 2 ++ tests/Doctrine/Tests/Models/DDC117/DDC117Reference.php | 2 ++ tests/Doctrine/Tests/Models/DDC117/DDC117Translation.php | 2 ++ .../Models/DDC1476/DDC1476EntityWithDefaultFieldType.php | 2 ++ tests/Doctrine/Tests/Models/DDC1590/DDC1590Entity.php | 2 ++ tests/Doctrine/Tests/Models/DDC1590/DDC1590User.php | 2 ++ tests/Doctrine/Tests/Models/DDC1872/DDC1872Bar.php | 4 +++- .../Models/DDC1872/DDC1872ExampleEntityWithOverride.php | 2 ++ .../Models/DDC1872/DDC1872ExampleEntityWithoutOverride.php | 2 ++ tests/Doctrine/Tests/Models/DDC1872/DDC1872ExampleTrait.php | 2 ++ tests/Doctrine/Tests/Models/DDC2372/DDC2372Address.php | 4 +++- tests/Doctrine/Tests/Models/DDC2372/DDC2372Admin.php | 4 +++- tests/Doctrine/Tests/Models/DDC2372/DDC2372User.php | 4 +++- .../Tests/Models/DDC2372/Traits/DDC2372AddressTrait.php | 4 +++- tests/Doctrine/Tests/Models/DDC2504/DDC2504ChildClass.php | 2 ++ tests/Doctrine/Tests/Models/DDC2504/DDC2504OtherClass.php | 2 ++ tests/Doctrine/Tests/Models/DDC2504/DDC2504RootClass.php | 2 ++ .../Tests/Models/DDC2825/ExplicitSchemaAndTable.php | 2 ++ .../Tests/Models/DDC2825/SchemaAndTableInTableName.php | 2 ++ .../Tests/Models/DDC3231/DDC3231EntityRepository.php | 2 ++ tests/Doctrine/Tests/Models/DDC3231/DDC3231User1.php | 2 ++ .../Tests/Models/DDC3231/DDC3231User1NoNamespace.php | 2 ++ tests/Doctrine/Tests/Models/DDC3231/DDC3231User2.php | 2 ++ .../Tests/Models/DDC3231/DDC3231User2NoNamespace.php | 2 ++ tests/Doctrine/Tests/Models/DDC3293/DDC3293Address.php | 2 ++ tests/Doctrine/Tests/Models/DDC3293/DDC3293User.php | 2 ++ tests/Doctrine/Tests/Models/DDC3293/DDC3293UserPrefixed.php | 2 ++ tests/Doctrine/Tests/Models/DDC3346/DDC3346Article.php | 2 ++ tests/Doctrine/Tests/Models/DDC3346/DDC3346Author.php | 2 ++ tests/Doctrine/Tests/Models/DDC3579/DDC3579Admin.php | 2 ++ tests/Doctrine/Tests/Models/DDC3579/DDC3579Group.php | 2 ++ tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php | 2 ++ tests/Doctrine/Tests/Models/DDC3597/DDC3597Image.php | 2 ++ tests/Doctrine/Tests/Models/DDC3597/DDC3597Media.php | 2 ++ tests/Doctrine/Tests/Models/DDC3597/DDC3597Root.php | 2 ++ .../Tests/Models/DDC3597/Embeddable/DDC3597Dimension.php | 4 +++- tests/Doctrine/Tests/Models/DDC3699/DDC3699Child.php | 2 ++ tests/Doctrine/Tests/Models/DDC3699/DDC3699Parent.php | 2 ++ tests/Doctrine/Tests/Models/DDC3699/DDC3699RelationMany.php | 2 ++ tests/Doctrine/Tests/Models/DDC3699/DDC3699RelationOne.php | 2 ++ tests/Doctrine/Tests/Models/DDC3711/DDC3711EntityA.php | 2 ++ tests/Doctrine/Tests/Models/DDC3711/DDC3711EntityB.php | 2 ++ tests/Doctrine/Tests/Models/DDC3899/DDC3899Contract.php | 2 ++ tests/Doctrine/Tests/Models/DDC3899/DDC3899FixContract.php | 2 ++ tests/Doctrine/Tests/Models/DDC3899/DDC3899FlexContract.php | 2 ++ tests/Doctrine/Tests/Models/DDC3899/DDC3899User.php | 2 ++ tests/Doctrine/Tests/Models/DDC4006/DDC4006User.php | 2 ++ tests/Doctrine/Tests/Models/DDC4006/DDC4006UserId.php | 2 ++ tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php | 2 ++ tests/Doctrine/Tests/Models/DDC5934/DDC5934Contract.php | 2 ++ tests/Doctrine/Tests/Models/DDC5934/DDC5934Member.php | 2 ++ tests/Doctrine/Tests/Models/DDC6412/DDC6412File.php | 2 ++ .../Doctrine/Tests/Models/DDC753/DDC753CustomRepository.php | 2 ++ .../Tests/Models/DDC753/DDC753DefaultRepository.php | 2 ++ .../Models/DDC753/DDC753EntityWithCustomRepository.php | 2 ++ .../DDC753/DDC753EntityWithDefaultCustomRepository.php | 2 ++ .../Models/DDC753/DDC753EntityWithInvalidRepository.php | 2 ++ .../Tests/Models/DDC753/DDC753InvalidRepository.php | 2 ++ tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php | 2 ++ .../Tests/Models/DDC869/DDC869CreditCardPayment.php | 2 ++ tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php | 2 ++ .../Tests/Models/DDC869/DDC869PaymentRepository.php | 2 ++ tests/Doctrine/Tests/Models/DDC889/DDC889Class.php | 2 ++ tests/Doctrine/Tests/Models/DDC889/DDC889Entity.php | 2 ++ tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php | 2 ++ tests/Doctrine/Tests/Models/DDC964/DDC964Address.php | 4 +++- tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php | 2 ++ tests/Doctrine/Tests/Models/DDC964/DDC964Group.php | 2 ++ tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php | 2 ++ tests/Doctrine/Tests/Models/DDC964/DDC964User.php | 2 ++ .../Tests/Models/DirectoryTree/AbstractContentItem.php | 2 ++ tests/Doctrine/Tests/Models/DirectoryTree/Directory.php | 2 ++ tests/Doctrine/Tests/Models/DirectoryTree/File.php | 2 ++ tests/Doctrine/Tests/Models/ECommerce/ECommerceCart.php | 2 ++ tests/Doctrine/Tests/Models/ECommerce/ECommerceCategory.php | 2 ++ tests/Doctrine/Tests/Models/ECommerce/ECommerceCustomer.php | 2 ++ tests/Doctrine/Tests/Models/ECommerce/ECommerceFeature.php | 2 ++ tests/Doctrine/Tests/Models/ECommerce/ECommerceProduct.php | 2 ++ tests/Doctrine/Tests/Models/ECommerce/ECommerceShipping.php | 2 ++ tests/Doctrine/Tests/Models/Forum/ForumAdministrator.php | 4 +++- tests/Doctrine/Tests/Models/Forum/ForumAvatar.php | 2 ++ tests/Doctrine/Tests/Models/Forum/ForumBoard.php | 2 ++ tests/Doctrine/Tests/Models/Forum/ForumCategory.php | 2 ++ tests/Doctrine/Tests/Models/Forum/ForumEntry.php | 2 ++ tests/Doctrine/Tests/Models/Forum/ForumUser.php | 2 ++ tests/Doctrine/Tests/Models/Generic/BooleanModel.php | 4 +++- tests/Doctrine/Tests/Models/Generic/DateTimeModel.php | 2 ++ tests/Doctrine/Tests/Models/Generic/DecimalModel.php | 4 +++- .../Doctrine/Tests/Models/Generic/NonAlphaColumnsEntity.php | 4 +++- tests/Doctrine/Tests/Models/Generic/SerializationModel.php | 4 +++- tests/Doctrine/Tests/Models/GeoNames/Admin1.php | 2 ++ .../Doctrine/Tests/Models/GeoNames/Admin1AlternateName.php | 2 ++ tests/Doctrine/Tests/Models/GeoNames/City.php | 2 ++ tests/Doctrine/Tests/Models/GeoNames/Country.php | 2 ++ tests/Doctrine/Tests/Models/Global/GlobalNamespaceModel.php | 4 +++- .../Hydration/EntityWithArrayDefaultArrayValueM2M.php | 2 ++ tests/Doctrine/Tests/Models/Hydration/SimpleEntity.php | 2 ++ tests/Doctrine/Tests/Models/Issue5989/Issue5989Employee.php | 2 ++ tests/Doctrine/Tests/Models/Issue5989/Issue5989Manager.php | 2 ++ tests/Doctrine/Tests/Models/Issue5989/Issue5989Person.php | 2 ++ .../Models/JoinedInheritanceType/AnotherChildClass.php | 4 +++- .../Tests/Models/JoinedInheritanceType/ChildClass.php | 4 +++- .../Tests/Models/JoinedInheritanceType/RootClass.php | 4 +++- tests/Doctrine/Tests/Models/Legacy/LegacyArticle.php | 2 ++ tests/Doctrine/Tests/Models/Legacy/LegacyCar.php | 2 ++ tests/Doctrine/Tests/Models/Legacy/LegacyUser.php | 2 ++ tests/Doctrine/Tests/Models/Legacy/LegacyUserReference.php | 2 ++ .../Models/MixedToOneIdentity/CompositeToOneKeyState.php | 2 ++ tests/Doctrine/Tests/Models/MixedToOneIdentity/Country.php | 2 ++ tests/Doctrine/Tests/Models/Navigation/NavCountry.php | 4 +++- tests/Doctrine/Tests/Models/Navigation/NavPhotos.php | 4 +++- .../Doctrine/Tests/Models/Navigation/NavPointOfInterest.php | 2 ++ tests/Doctrine/Tests/Models/Navigation/NavTour.php | 4 +++- tests/Doctrine/Tests/Models/Navigation/NavUser.php | 2 ++ tests/Doctrine/Tests/Models/NonPublicSchemaJoins/User.php | 2 ++ .../Doctrine/Tests/Models/NullDefault/NullDefaultColumn.php | 2 ++ .../Tests/Models/OneToOneSingleTableInheritance/Cat.php | 2 ++ .../Models/OneToOneSingleTableInheritance/LitterBox.php | 2 ++ .../Tests/Models/OneToOneSingleTableInheritance/Pet.php | 2 ++ tests/Doctrine/Tests/Models/Pagination/Company.php | 2 ++ tests/Doctrine/Tests/Models/Pagination/Department.php | 2 ++ tests/Doctrine/Tests/Models/Pagination/Logo.php | 2 ++ tests/Doctrine/Tests/Models/Pagination/User.php | 2 ++ tests/Doctrine/Tests/Models/Pagination/User1.php | 2 ++ tests/Doctrine/Tests/Models/Quote/Address.php | 2 ++ tests/Doctrine/Tests/Models/Quote/City.php | 2 ++ tests/Doctrine/Tests/Models/Quote/FullAddress.php | 2 ++ tests/Doctrine/Tests/Models/Quote/Group.php | 2 ++ tests/Doctrine/Tests/Models/Quote/NumericEntity.php | 4 +++- tests/Doctrine/Tests/Models/Quote/Phone.php | 2 ++ tests/Doctrine/Tests/Models/Quote/User.php | 2 ++ .../Doctrine/Tests/Models/Reflection/AbstractEmbeddable.php | 2 ++ .../Tests/Models/Reflection/ArrayObjectExtendingClass.php | 2 ++ .../Tests/Models/Reflection/ClassWithMixedProperties.php | 2 ++ .../Doctrine/Tests/Models/Reflection/ConcreteEmbeddable.php | 2 ++ tests/Doctrine/Tests/Models/Reflection/ParentClass.php | 2 ++ tests/Doctrine/Tests/Models/Routing/RoutingLeg.php | 4 +++- tests/Doctrine/Tests/Models/Routing/RoutingLocation.php | 4 +++- tests/Doctrine/Tests/Models/Routing/RoutingRoute.php | 2 ++ tests/Doctrine/Tests/Models/Routing/RoutingRouteBooking.php | 4 +++- tests/Doctrine/Tests/Models/StockExchange/Bond.php | 4 +++- tests/Doctrine/Tests/Models/StockExchange/Market.php | 4 +++- tests/Doctrine/Tests/Models/StockExchange/Stock.php | 4 +++- tests/Doctrine/Tests/Models/Taxi/Car.php | 2 ++ tests/Doctrine/Tests/Models/Taxi/Driver.php | 2 ++ tests/Doctrine/Tests/Models/Taxi/PaidRide.php | 2 ++ tests/Doctrine/Tests/Models/Taxi/Ride.php | 2 ++ tests/Doctrine/Tests/Models/Tweet/Tweet.php | 2 ++ tests/Doctrine/Tests/Models/Tweet/User.php | 2 ++ tests/Doctrine/Tests/Models/Tweet/UserList.php | 2 ++ .../Tests/Models/ValueConversionType/AuxiliaryEntity.php | 2 ++ .../InversedManyToManyCompositeIdEntity.php | 2 ++ .../InversedManyToManyCompositeIdForeignKeyEntity.php | 2 ++ .../Models/ValueConversionType/InversedManyToManyEntity.php | 2 ++ .../InversedManyToManyExtraLazyEntity.php | 2 ++ .../InversedOneToManyCompositeIdEntity.php | 2 ++ .../InversedOneToManyCompositeIdForeignKeyEntity.php | 2 ++ .../Models/ValueConversionType/InversedOneToManyEntity.php | 2 ++ .../InversedOneToManyExtraLazyEntity.php | 2 ++ .../InversedOneToOneCompositeIdEntity.php | 2 ++ .../InversedOneToOneCompositeIdForeignKeyEntity.php | 2 ++ .../Models/ValueConversionType/InversedOneToOneEntity.php | 2 ++ .../OwningManyToManyCompositeIdEntity.php | 2 ++ .../OwningManyToManyCompositeIdForeignKeyEntity.php | 2 ++ .../Models/ValueConversionType/OwningManyToManyEntity.php | 2 ++ .../ValueConversionType/OwningManyToManyExtraLazyEntity.php | 2 ++ .../OwningManyToOneCompositeIdEntity.php | 2 ++ .../OwningManyToOneCompositeIdForeignKeyEntity.php | 2 ++ .../Models/ValueConversionType/OwningManyToOneEntity.php | 2 ++ .../ValueConversionType/OwningManyToOneExtraLazyEntity.php | 2 ++ .../ValueConversionType/OwningOneToOneCompositeIdEntity.php | 2 ++ .../OwningOneToOneCompositeIdForeignKeyEntity.php | 2 ++ .../Models/ValueConversionType/OwningOneToOneEntity.php | 2 ++ tests/Doctrine/Tests/Models/ValueObjects/Name.php | 2 ++ tests/Doctrine/Tests/Models/ValueObjects/Person.php | 2 ++ tests/Doctrine/Tests/Models/VersionedManyToOne/Article.php | 2 ++ tests/Doctrine/Tests/Models/VersionedManyToOne/Category.php | 2 ++ .../Tests/Models/VersionedOneToOne/FirstRelatedEntity.php | 2 ++ .../Tests/Models/VersionedOneToOne/SecondRelatedEntity.php | 2 ++ tests/Doctrine/Tests/ORM/Cache/AbstractRegionTest.php | 2 ++ tests/Doctrine/Tests/ORM/Cache/CacheConfigTest.php | 2 ++ tests/Doctrine/Tests/ORM/Cache/CacheKeyTest.php | 2 ++ tests/Doctrine/Tests/ORM/Cache/CacheLoggerChainTest.php | 2 ++ tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php | 2 ++ tests/Doctrine/Tests/ORM/Cache/DefaultCacheTest.php | 2 ++ .../Tests/ORM/Cache/DefaultCollectionHydratorTest.php | 2 ++ .../Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php | 2 ++ tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php | 2 ++ tests/Doctrine/Tests/ORM/Cache/DefaultRegionTest.php | 2 ++ tests/Doctrine/Tests/ORM/Cache/FileLockRegionTest.php | 2 ++ tests/Doctrine/Tests/ORM/Cache/MultiGetRegionTest.php | 2 ++ .../Collection/AbstractCollectionPersisterTest.php | 2 ++ .../NonStrictReadWriteCachedCollectionPersisterTest.php | 2 ++ .../Collection/ReadOnlyCachedCollectionPersisterTest.php | 2 ++ .../Collection/ReadWriteCachedCollectionPersisterTest.php | 2 ++ .../Cache/Persister/Entity/AbstractEntityPersisterTest.php | 2 ++ .../Entity/NonStrictReadWriteCachedEntityPersisterTest.php | 2 ++ .../Persister/Entity/ReadOnlyCachedEntityPersisterTest.php | 2 ++ .../Persister/Entity/ReadWriteCachedEntityPersisterTest.php | 2 ++ .../Doctrine/Tests/ORM/Cache/StatisticsCacheLoggerTest.php | 2 ++ tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php | 2 ++ tests/Doctrine/Tests/ORM/ConfigurationTest.php | 2 ++ .../Tests/ORM/Decorator/EntityManagerDecoratorTest.php | 2 ++ tests/Doctrine/Tests/ORM/Entity/ConstructorTest.php | 2 ++ tests/Doctrine/Tests/ORM/EntityManagerTest.php | 2 ++ tests/Doctrine/Tests/ORM/EntityNotFoundExceptionTest.php | 2 ++ .../ORM/Event/OnClassMetadataNotFoundEventArgsTest.php | 2 ++ .../Functional/AbstractManyToManyAssociationTestCase.php | 2 ++ .../Tests/ORM/Functional/AdvancedAssociationTest.php | 2 ++ .../Doctrine/Tests/ORM/Functional/AdvancedDqlQueryTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php | 2 ++ .../Tests/ORM/Functional/CascadeRemoveOrderTest.php | 2 ++ .../Tests/ORM/Functional/ClassTableInheritanceTest.php | 2 ++ .../Tests/ORM/Functional/ClassTableInheritanceTest2.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/ClearEventTest.php | 2 ++ .../Tests/ORM/Functional/CompositePrimaryKeyTest.php | 2 ++ .../Functional/CompositePrimaryKeyWithAssociationsTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/CustomFunctionsTest.php | 2 ++ .../Tests/ORM/Functional/CustomIdObjectTypeTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php | 2 ++ .../Tests/ORM/Functional/DatabaseDriverTestCase.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/DefaultValuesTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/EntityListenersTest.php | 2 ++ .../Tests/ORM/Functional/EntityRepositoryCriteriaTest.php | 2 ++ .../Doctrine/Tests/ORM/Functional/EntityRepositoryTest.php | 2 ++ .../Tests/ORM/Functional/ExtraLazyCollectionTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/FlushEventTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/HydrationCacheTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/IdentityMapTest.php | 2 ++ .../Tests/ORM/Functional/IndexByAssociationTest.php | 2 ++ .../Tests/ORM/Functional/JoinedTableCompositeKeyTest.php | 2 ++ .../Doctrine/Tests/ORM/Functional/LifecycleCallbackTest.php | 2 ++ .../Tests/ORM/Functional/Locking/GearmanLockTest.php | 2 ++ .../Tests/ORM/Functional/Locking/LockAgentWorker.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Locking/LockTest.php | 2 ++ .../Tests/ORM/Functional/Locking/OptimisticTest.php | 2 ++ .../Tests/ORM/Functional/ManyToManyBasicAssociationTest.php | 2 ++ .../Functional/ManyToManyBidirectionalAssociationTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/ManyToManyEventTest.php | 2 ++ .../Functional/ManyToManySelfReferentialAssociationTest.php | 2 ++ .../Functional/ManyToManyUnidirectionalAssociationTest.php | 2 ++ .../Doctrine/Tests/ORM/Functional/MappedSuperclassTest.php | 2 ++ .../Tests/ORM/Functional/MergeCompositeToOneKeyTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php | 2 ++ .../Tests/ORM/Functional/MergeSharedEntitiesTest.php | 2 ++ .../Tests/ORM/Functional/MergeVersionedManyToOneTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/NativeQueryTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/NewOperatorTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/NotifyPolicyTest.php | 2 ++ .../Functional/OneToManyBidirectionalAssociationTest.php | 2 ++ .../Tests/ORM/Functional/OneToManyOrphanRemovalTest.php | 2 ++ .../Functional/OneToManySelfReferentialAssociationTest.php | 2 ++ .../Functional/OneToManyUnidirectionalAssociationTest.php | 2 ++ .../ORM/Functional/OneToOneBidirectionalAssociationTest.php | 2 ++ .../Tests/ORM/Functional/OneToOneEagerLoadingTest.php | 2 ++ .../Tests/ORM/Functional/OneToOneOrphanRemovalTest.php | 2 ++ .../Functional/OneToOneSelfReferentialAssociationTest.php | 2 ++ .../ORM/Functional/OneToOneSingleTableInheritanceTest.php | 2 ++ .../Functional/OneToOneUnidirectionalAssociationTest.php | 2 ++ .../Doctrine/Tests/ORM/Functional/OrderedCollectionTest.php | 2 ++ .../OrderedJoinedTableInheritanceCollectionTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/PaginationTest.php | 2 ++ .../ORM/Functional/PersistentCollectionCriteriaTest.php | 2 ++ .../Tests/ORM/Functional/PersistentCollectionTest.php | 2 ++ .../Doctrine/Tests/ORM/Functional/PersistentObjectTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/PostFlushEventTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/PostLoadEventTest.php | 2 ++ .../Tests/ORM/Functional/ProxiesLikeEntitiesTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/QueryCacheTest.php | 2 ++ .../Doctrine/Tests/ORM/Functional/QueryDqlFunctionTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/QueryTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/ReadOnlyTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php | 2 ++ .../Tests/ORM/Functional/SchemaTool/CompanySchemaTest.php | 2 ++ .../Tests/ORM/Functional/SchemaTool/DBAL483Test.php | 2 ++ .../Doctrine/Tests/ORM/Functional/SchemaTool/DDC214Test.php | 2 ++ .../Tests/ORM/Functional/SchemaTool/MySqlSchemaToolTest.php | 2 ++ .../ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/SchemaValidatorTest.php | 2 ++ .../Tests/ORM/Functional/SecondLevelCacheAbstractTest.php | 2 ++ .../Functional/SecondLevelCacheCompositePrimaryKeyTest.php | 2 ++ ...ondLevelCacheCompositePrimaryKeyWithAssociationsTest.php | 2 ++ .../Tests/ORM/Functional/SecondLevelCacheConcurrentTest.php | 2 ++ .../Tests/ORM/Functional/SecondLevelCacheCriteriaTest.php | 2 ++ .../Functional/SecondLevelCacheExtraLazyCollectionTest.php | 2 ++ .../Functional/SecondLevelCacheJoinTableInheritanceTest.php | 2 ++ .../Tests/ORM/Functional/SecondLevelCacheManyToManyTest.php | 2 ++ .../Tests/ORM/Functional/SecondLevelCacheManyToOneTest.php | 2 ++ .../Tests/ORM/Functional/SecondLevelCacheOneToManyTest.php | 2 ++ .../Tests/ORM/Functional/SecondLevelCacheOneToOneTest.php | 2 ++ .../Tests/ORM/Functional/SecondLevelCacheQueryCacheTest.php | 2 ++ .../Tests/ORM/Functional/SecondLevelCacheRepositoryTest.php | 2 ++ .../SecondLevelCacheSingleTableInheritanceTest.php | 2 ++ .../Doctrine/Tests/ORM/Functional/SecondLevelCacheTest.php | 2 ++ .../ORM/Functional/SequenceEmulatedIdentityStrategyTest.php | 2 ++ .../Doctrine/Tests/ORM/Functional/SequenceGeneratorTest.php | 2 ++ .../Tests/ORM/Functional/SingleTableCompositeKeyTest.php | 2 ++ .../Tests/ORM/Functional/SingleTableInheritanceTest.php | 2 ++ .../Tests/ORM/Functional/StandardEntityPersisterTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1040Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1041Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1043Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1080Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1113Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1129Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1151Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1163Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC117Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1181Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1193Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1209Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1225Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1228Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1238Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1250Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1276Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1300Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1301Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1306Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1335Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1360Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1383Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1392Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1400Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1404Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC142Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1430Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1436Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC144Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1452Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1454Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1458Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1461Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1514Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1515Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1526Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1545Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1548Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1594Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1595Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC163Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1643Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1654Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1655Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1666Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1685Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1690Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1695Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1707Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1719Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1757Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1778Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1787Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1843Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1884Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1885Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1918Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1925Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC192Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1995Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1998Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC199Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2012Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2074Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2084Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2090Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2106Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC211Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2138Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2175Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2182Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2214Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2224Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2231Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2252Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2256Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2306Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2346Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2350Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2409Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2494Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2519Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2575Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2579Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC258Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2645Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2655Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2660Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2692Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2759Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2775Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2780Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2790Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC279Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2825Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2862Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2895Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2931Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2943Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2984Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2996Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3033Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3042Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3068Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC309Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3123Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3160Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3170Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3192Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3223Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3300Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3303Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC331Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3330Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3346Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC345Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3582Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3597Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3644Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3699Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3719Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC371Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3785Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC381Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3967Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC4003Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC422Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC425Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC440Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC444Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC448Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC493Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC501Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC512Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC513Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC518Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC522Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC531Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC5684Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC588Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC618Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC633Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC6460Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC656Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC657Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC698Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC719Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC729Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC735Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC736Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC742Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC748Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC767Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC809Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC812Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC832Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC837Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC849Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC881Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC933Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC949Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC960Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/DDC992Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/GH2947Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/GH5562Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/GH5762Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/GH5887Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/GH6141Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/GH6362Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/GH6402Test.php | 2 ++ .../Doctrine/Tests/ORM/Functional/Ticket/Issue5989Test.php | 2 ++ .../Doctrine/Tests/ORM/Functional/Ticket/Ticket2481Test.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket69.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/TypeTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/TypeValueSqlTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/UUIDGeneratorTest.php | 2 ++ .../Tests/ORM/Functional/UnitOfWorkLifecycleTest.php | 2 ++ .../ManyToManyCompositeIdForeignKeyTest.php | 2 ++ .../ValueConversionType/ManyToManyCompositeIdTest.php | 2 ++ .../ValueConversionType/ManyToManyExtraLazyTest.php | 2 ++ .../ORM/Functional/ValueConversionType/ManyToManyTest.php | 2 ++ .../OneToManyCompositeIdForeignKeyTest.php | 2 ++ .../ValueConversionType/OneToManyCompositeIdTest.php | 2 ++ .../ValueConversionType/OneToManyExtraLazyTest.php | 2 ++ .../ORM/Functional/ValueConversionType/OneToManyTest.php | 2 ++ .../OneToOneCompositeIdForeignKeyTest.php | 2 ++ .../ValueConversionType/OneToOneCompositeIdTest.php | 2 ++ .../ORM/Functional/ValueConversionType/OneToOneTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/ValueObjectsTest.php | 2 ++ .../Doctrine/Tests/ORM/Functional/VersionedOneToOneTest.php | 2 ++ tests/Doctrine/Tests/ORM/Hydration/ArrayHydratorTest.php | 2 ++ tests/Doctrine/Tests/ORM/Hydration/CustomHydratorTest.php | 2 ++ tests/Doctrine/Tests/ORM/Hydration/HydrationTestCase.php | 2 ++ tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php | 2 ++ tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php | 2 ++ tests/Doctrine/Tests/ORM/Hydration/ScalarHydratorTest.php | 2 ++ .../Tests/ORM/Hydration/SimpleObjectHydratorTest.php | 2 ++ .../Tests/ORM/Hydration/SingleScalarHydratorTest.php | 2 ++ .../Tests/ORM/Internal/HydrationCompleteHandlerTest.php | 2 ++ tests/Doctrine/Tests/ORM/LazyCriteriaCollectionTest.php | 2 ++ .../Tests/ORM/Mapping/AbstractMappingDriverTest.php | 2 ++ tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php | 2 ++ .../Tests/ORM/Mapping/BasicInheritanceMappingTest.php | 2 ++ .../Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php | 2 ++ .../Tests/ORM/Mapping/ClassMetadataLoadEventTest.php | 2 ++ tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php | 2 ++ .../Tests/ORM/Mapping/EntityListenerResolverTest.php | 4 +++- .../NamingStrategy/JoinColumnClassNamingStrategy.php | 2 ++ tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php | 2 ++ tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php | 2 ++ .../Tests/ORM/Mapping/ReflectionEmbeddedPropertyTest.php | 2 ++ .../Tests/ORM/Mapping/StaticPHPMappingDriverTest.php | 2 ++ .../Tests/ORM/Mapping/Symfony/AbstractDriverTest.php | 2 ++ tests/Doctrine/Tests/ORM/Mapping/Symfony/XmlDriverTest.php | 2 ++ tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php | 2 ++ .../Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php | 2 ++ .../ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php | 2 ++ .../ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php | 2 ++ .../php/Doctrine.Tests.Models.Company.CompanyContract.php | 2 ++ .../Doctrine.Tests.Models.Company.CompanyFixContract.php | 2 ++ .../Doctrine.Tests.Models.Company.CompanyFlexContract.php | 2 ++ ...ctrine.Tests.Models.Company.CompanyFlexUltraContract.php | 2 ++ .../php/Doctrine.Tests.Models.Company.CompanyPerson.php | 2 ++ ...sts.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php | 2 ++ ...Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php | 2 ++ ...trine.Tests.Models.DDC2825.SchemaAndTableInTableName.php | 2 ++ .../php/Doctrine.Tests.Models.DDC3579.DDC3579Admin.php | 2 ++ .../php/Doctrine.Tests.Models.DDC3579.DDC3579User.php | 2 ++ .../Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php | 2 ++ .../php/Doctrine.Tests.Models.DDC5934.DDC5934Contract.php | 2 ++ .../Doctrine.Tests.Models.DDC869.DDC869ChequePayment.php | 2 ++ ...Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.php | 2 ++ .../php/Doctrine.Tests.Models.DDC869.DDC869Payment.php | 2 ++ .../php/Doctrine.Tests.Models.DDC889.DDC889Class.php | 2 ++ .../php/Doctrine.Tests.Models.DDC889.DDC889Entity.php | 4 +++- .../php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php | 2 ++ .../php/Doctrine.Tests.Models.DDC964.DDC964Admin.php | 2 ++ .../php/Doctrine.Tests.Models.DDC964.DDC964Guest.php | 2 ++ .../Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php | 2 ++ .../ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php | 2 ++ .../ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php | 2 ++ .../php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php | 2 ++ .../Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php | 2 ++ .../ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php | 2 ++ .../ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php | 2 ++ tests/Doctrine/Tests/ORM/Performance/DDC2602Test.php | 2 ++ .../Doctrine/Tests/ORM/Performance/SecondLevelCacheTest.php | 2 ++ tests/Doctrine/Tests/ORM/PersistentCollectionTest.php | 2 ++ .../BasicEntityPersisterCompositeTypeParametersTest.php | 2 ++ .../Persisters/BasicEntityPersisterCompositeTypeSqlTest.php | 2 ++ .../ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php | 2 ++ tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php | 2 ++ .../Doctrine/Tests/ORM/Query/CustomTreeWalkersJoinTest.php | 2 ++ tests/Doctrine/Tests/ORM/Query/CustomTreeWalkersTest.php | 2 ++ tests/Doctrine/Tests/ORM/Query/DeleteSqlGenerationTest.php | 2 ++ tests/Doctrine/Tests/ORM/Query/ExprTest.php | 2 ++ tests/Doctrine/Tests/ORM/Query/FilterCollectionTest.php | 2 ++ tests/Doctrine/Tests/ORM/Query/LanguageRecognitionTest.php | 2 ++ tests/Doctrine/Tests/ORM/Query/LexerTest.php | 2 ++ tests/Doctrine/Tests/ORM/Query/ParameterTypeInfererTest.php | 2 ++ tests/Doctrine/Tests/ORM/Query/ParserResultTest.php | 2 ++ tests/Doctrine/Tests/ORM/Query/ParserTest.php | 2 ++ .../Doctrine/Tests/ORM/Query/QueryExpressionVisitorTest.php | 2 ++ tests/Doctrine/Tests/ORM/Query/QueryTest.php | 2 ++ tests/Doctrine/Tests/ORM/Query/SelectSqlGenerationTest.php | 2 ++ tests/Doctrine/Tests/ORM/Query/SqlWalkerTest.php | 2 ++ tests/Doctrine/Tests/ORM/Query/UpdateSqlGenerationTest.php | 2 ++ tests/Doctrine/Tests/ORM/QueryBuilderTest.php | 2 ++ .../Tests/ORM/Repository/DefaultRepositoryFactoryTest.php | 2 ++ .../Doctrine/Tests/ORM/Sequencing/AssignedGeneratorTest.php | 2 ++ .../Doctrine/Tests/ORM/Sequencing/SequenceGeneratorTest.php | 2 ++ .../Tests/ORM/Tools/AttachEntityListenersListenerTest.php | 2 ++ .../Command/ClearCacheCollectionRegionCommandTest.php | 2 ++ .../Console/Command/ClearCacheEntityRegionCommandTest.php | 2 ++ .../Console/Command/ClearCacheQueryRegionCommandTest.php | 2 ++ .../Console/Command/GenerateRepositoriesCommandTest.php | 2 ++ .../Tests/ORM/Tools/Console/Command/InfoCommandTest.php | 2 ++ .../Tools/Console/Command/MappingDescribeCommandTest.php | 2 ++ .../Tests/ORM/Tools/Console/Command/RunDqlCommandTest.php | 2 ++ .../Doctrine/Tests/ORM/Tools/Console/ConsoleRunnerTest.php | 2 ++ .../Doctrine/Tests/ORM/Tools/Console/MetadataFilterTest.php | 2 ++ tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php | 2 ++ .../Tests/ORM/Tools/EntityRepositoryGeneratorTest.php | 2 ++ .../ORM/Tools/Export/AbstractClassMetadataExporterTest.php | 2 ++ .../Tools/Export/AnnotationClassMetadataExporterTest.php | 2 ++ .../Tests/ORM/Tools/Export/PhpClassMetadataExporterTest.php | 2 ++ .../Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php | 2 ++ .../annotation/Doctrine.Tests.ORM.Tools.Export.User.php | 2 ++ .../Export/php/Doctrine.Tests.ORM.Tools.Export.User.php | 2 ++ .../Tests/ORM/Tools/Pagination/CountOutputWalkerTest.php | 2 ++ .../Doctrine/Tests/ORM/Tools/Pagination/CountWalkerTest.php | 2 ++ .../ORM/Tools/Pagination/LimitSubqueryOutputWalkerTest.php | 2 ++ .../Tests/ORM/Tools/Pagination/LimitSubqueryWalkerTest.php | 2 ++ .../Tests/ORM/Tools/Pagination/PaginationTestCase.php | 2 ++ .../Tests/ORM/Tools/Pagination/WhereInWalkerTest.php | 2 ++ .../Tests/ORM/Tools/ResolveTargetEntityListenerTest.php | 2 ++ tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php | 2 ++ tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php | 2 ++ tests/Doctrine/Tests/ORM/Tools/SetupTest.php | 2 ++ tests/Doctrine/Tests/ORM/UnitOfWorkTest.php | 2 ++ .../Doctrine/Tests/ORM/Utility/IdentifierFlattenerTest.php | 2 ++ tests/Doctrine/Tests/OrmFunctionalTestCase.php | 2 ++ tests/Doctrine/Tests/OrmPerformanceTestCase.php | 2 ++ tests/Doctrine/Tests/OrmTestCase.php | 2 ++ tests/Doctrine/Tests/TestInit.php | 2 ++ tests/Doctrine/Tests/TestUtil.php | 2 ++ 1173 files changed, 2407 insertions(+), 215 deletions(-) diff --git a/lib/Doctrine/ORM/AbstractQuery.php b/lib/Doctrine/ORM/AbstractQuery.php index 17c398bf959..1fa0fd60c42 100644 --- a/lib/Doctrine/ORM/AbstractQuery.php +++ b/lib/Doctrine/ORM/AbstractQuery.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; use Doctrine\Common\Util\ClassUtils; diff --git a/lib/Doctrine/ORM/Annotation/Annotation.php b/lib/Doctrine/ORM/Annotation/Annotation.php index 4c8d2b00349..3b279a6f299 100644 --- a/lib/Doctrine/ORM/Annotation/Annotation.php +++ b/lib/Doctrine/ORM/Annotation/Annotation.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; interface Annotation diff --git a/lib/Doctrine/ORM/Annotation/AssociationOverride.php b/lib/Doctrine/ORM/Annotation/AssociationOverride.php index c9ab0061f6a..07d02e8546c 100644 --- a/lib/Doctrine/ORM/Annotation/AssociationOverride.php +++ b/lib/Doctrine/ORM/Annotation/AssociationOverride.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/AssociationOverrides.php b/lib/Doctrine/ORM/Annotation/AssociationOverrides.php index 3122c67d9a3..747aa3d4cad 100644 --- a/lib/Doctrine/ORM/Annotation/AssociationOverrides.php +++ b/lib/Doctrine/ORM/Annotation/AssociationOverrides.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/AttributeOverride.php b/lib/Doctrine/ORM/Annotation/AttributeOverride.php index dbc4a860894..283cbaaf035 100644 --- a/lib/Doctrine/ORM/Annotation/AttributeOverride.php +++ b/lib/Doctrine/ORM/Annotation/AttributeOverride.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/AttributeOverrides.php b/lib/Doctrine/ORM/Annotation/AttributeOverrides.php index adb90c4061f..04b549f7406 100644 --- a/lib/Doctrine/ORM/Annotation/AttributeOverrides.php +++ b/lib/Doctrine/ORM/Annotation/AttributeOverrides.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/Cache.php b/lib/Doctrine/ORM/Annotation/Cache.php index 9250f45132f..0803b03fdc5 100644 --- a/lib/Doctrine/ORM/Annotation/Cache.php +++ b/lib/Doctrine/ORM/Annotation/Cache.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/ChangeTrackingPolicy.php b/lib/Doctrine/ORM/Annotation/ChangeTrackingPolicy.php index 86739e3b2af..1f10c8ea84c 100644 --- a/lib/Doctrine/ORM/Annotation/ChangeTrackingPolicy.php +++ b/lib/Doctrine/ORM/Annotation/ChangeTrackingPolicy.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/Column.php b/lib/Doctrine/ORM/Annotation/Column.php index 15816275c43..58e9e339d36 100644 --- a/lib/Doctrine/ORM/Annotation/Column.php +++ b/lib/Doctrine/ORM/Annotation/Column.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/ColumnResult.php b/lib/Doctrine/ORM/Annotation/ColumnResult.php index 3b7bf3ee5a4..b437bccfd11 100644 --- a/lib/Doctrine/ORM/Annotation/ColumnResult.php +++ b/lib/Doctrine/ORM/Annotation/ColumnResult.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/CustomIdGenerator.php b/lib/Doctrine/ORM/Annotation/CustomIdGenerator.php index c949457a71f..2df49c810ef 100644 --- a/lib/Doctrine/ORM/Annotation/CustomIdGenerator.php +++ b/lib/Doctrine/ORM/Annotation/CustomIdGenerator.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/DiscriminatorColumn.php b/lib/Doctrine/ORM/Annotation/DiscriminatorColumn.php index fa7cd99a9f8..e3c9d06a76e 100644 --- a/lib/Doctrine/ORM/Annotation/DiscriminatorColumn.php +++ b/lib/Doctrine/ORM/Annotation/DiscriminatorColumn.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/DiscriminatorMap.php b/lib/Doctrine/ORM/Annotation/DiscriminatorMap.php index 7c879dc0b51..480a1a81bc9 100644 --- a/lib/Doctrine/ORM/Annotation/DiscriminatorMap.php +++ b/lib/Doctrine/ORM/Annotation/DiscriminatorMap.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/DoctrineAnnotations.php b/lib/Doctrine/ORM/Annotation/DoctrineAnnotations.php index fa8caf9621d..e1a8ae9a63d 100644 --- a/lib/Doctrine/ORM/Annotation/DoctrineAnnotations.php +++ b/lib/Doctrine/ORM/Annotation/DoctrineAnnotations.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + require_once __DIR__.'/Annotation.php'; require_once __DIR__.'/AssociationOverride.php'; require_once __DIR__.'/AssociationOverrides.php'; diff --git a/lib/Doctrine/ORM/Annotation/Embeddable.php b/lib/Doctrine/ORM/Annotation/Embeddable.php index b1e75da58e3..9d4219de13e 100644 --- a/lib/Doctrine/ORM/Annotation/Embeddable.php +++ b/lib/Doctrine/ORM/Annotation/Embeddable.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/Embedded.php b/lib/Doctrine/ORM/Annotation/Embedded.php index a3cf16224a1..801c228c1c1 100644 --- a/lib/Doctrine/ORM/Annotation/Embedded.php +++ b/lib/Doctrine/ORM/Annotation/Embedded.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/Entity.php b/lib/Doctrine/ORM/Annotation/Entity.php index 8d5715f6ebc..cfa71386f00 100644 --- a/lib/Doctrine/ORM/Annotation/Entity.php +++ b/lib/Doctrine/ORM/Annotation/Entity.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/EntityListeners.php b/lib/Doctrine/ORM/Annotation/EntityListeners.php index da16c94d8dc..96e6edb4e71 100644 --- a/lib/Doctrine/ORM/Annotation/EntityListeners.php +++ b/lib/Doctrine/ORM/Annotation/EntityListeners.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/EntityResult.php b/lib/Doctrine/ORM/Annotation/EntityResult.php index d32665a9d2c..05e925f3b50 100644 --- a/lib/Doctrine/ORM/Annotation/EntityResult.php +++ b/lib/Doctrine/ORM/Annotation/EntityResult.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/FieldResult.php b/lib/Doctrine/ORM/Annotation/FieldResult.php index 6f435ce19cb..72de75a5e19 100644 --- a/lib/Doctrine/ORM/Annotation/FieldResult.php +++ b/lib/Doctrine/ORM/Annotation/FieldResult.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/GeneratedValue.php b/lib/Doctrine/ORM/Annotation/GeneratedValue.php index 85c894c5132..c12ad5edd7d 100644 --- a/lib/Doctrine/ORM/Annotation/GeneratedValue.php +++ b/lib/Doctrine/ORM/Annotation/GeneratedValue.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/HasLifecycleCallbacks.php b/lib/Doctrine/ORM/Annotation/HasLifecycleCallbacks.php index 0f84fe81ae3..56eee647c2c 100644 --- a/lib/Doctrine/ORM/Annotation/HasLifecycleCallbacks.php +++ b/lib/Doctrine/ORM/Annotation/HasLifecycleCallbacks.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/Id.php b/lib/Doctrine/ORM/Annotation/Id.php index 931e0af2284..f5336e1edd1 100644 --- a/lib/Doctrine/ORM/Annotation/Id.php +++ b/lib/Doctrine/ORM/Annotation/Id.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/Index.php b/lib/Doctrine/ORM/Annotation/Index.php index efd32c3a74a..da3f0cb24aa 100644 --- a/lib/Doctrine/ORM/Annotation/Index.php +++ b/lib/Doctrine/ORM/Annotation/Index.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/InheritanceType.php b/lib/Doctrine/ORM/Annotation/InheritanceType.php index 97931761361..98d40f9e81d 100644 --- a/lib/Doctrine/ORM/Annotation/InheritanceType.php +++ b/lib/Doctrine/ORM/Annotation/InheritanceType.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/JoinColumn.php b/lib/Doctrine/ORM/Annotation/JoinColumn.php index bf5202f145d..464ea4dab27 100644 --- a/lib/Doctrine/ORM/Annotation/JoinColumn.php +++ b/lib/Doctrine/ORM/Annotation/JoinColumn.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/JoinColumns.php b/lib/Doctrine/ORM/Annotation/JoinColumns.php index 1704c8fb8d8..04771d8f460 100644 --- a/lib/Doctrine/ORM/Annotation/JoinColumns.php +++ b/lib/Doctrine/ORM/Annotation/JoinColumns.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/JoinTable.php b/lib/Doctrine/ORM/Annotation/JoinTable.php index 99a742d1753..d3cc3d91d78 100644 --- a/lib/Doctrine/ORM/Annotation/JoinTable.php +++ b/lib/Doctrine/ORM/Annotation/JoinTable.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/ManyToMany.php b/lib/Doctrine/ORM/Annotation/ManyToMany.php index 916d448cc32..3b24b5ac7ab 100644 --- a/lib/Doctrine/ORM/Annotation/ManyToMany.php +++ b/lib/Doctrine/ORM/Annotation/ManyToMany.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/ManyToOne.php b/lib/Doctrine/ORM/Annotation/ManyToOne.php index 2885253fdcd..dda7b31cb93 100644 --- a/lib/Doctrine/ORM/Annotation/ManyToOne.php +++ b/lib/Doctrine/ORM/Annotation/ManyToOne.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/MappedSuperclass.php b/lib/Doctrine/ORM/Annotation/MappedSuperclass.php index 3c0e39790ac..cde96d35d67 100644 --- a/lib/Doctrine/ORM/Annotation/MappedSuperclass.php +++ b/lib/Doctrine/ORM/Annotation/MappedSuperclass.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/NamedNativeQueries.php b/lib/Doctrine/ORM/Annotation/NamedNativeQueries.php index 92b4cd35735..e6fb38678f5 100644 --- a/lib/Doctrine/ORM/Annotation/NamedNativeQueries.php +++ b/lib/Doctrine/ORM/Annotation/NamedNativeQueries.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/NamedNativeQuery.php b/lib/Doctrine/ORM/Annotation/NamedNativeQuery.php index 5a4b016ce63..45aacbaa19b 100644 --- a/lib/Doctrine/ORM/Annotation/NamedNativeQuery.php +++ b/lib/Doctrine/ORM/Annotation/NamedNativeQuery.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/NamedQueries.php b/lib/Doctrine/ORM/Annotation/NamedQueries.php index e7f7f2b9412..39204e18540 100644 --- a/lib/Doctrine/ORM/Annotation/NamedQueries.php +++ b/lib/Doctrine/ORM/Annotation/NamedQueries.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/NamedQuery.php b/lib/Doctrine/ORM/Annotation/NamedQuery.php index 758050a2952..5a7317b5382 100644 --- a/lib/Doctrine/ORM/Annotation/NamedQuery.php +++ b/lib/Doctrine/ORM/Annotation/NamedQuery.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/OneToMany.php b/lib/Doctrine/ORM/Annotation/OneToMany.php index e1a764a5bf7..e6da8958daf 100644 --- a/lib/Doctrine/ORM/Annotation/OneToMany.php +++ b/lib/Doctrine/ORM/Annotation/OneToMany.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/OneToOne.php b/lib/Doctrine/ORM/Annotation/OneToOne.php index a298a4ce3a3..8606008cef3 100644 --- a/lib/Doctrine/ORM/Annotation/OneToOne.php +++ b/lib/Doctrine/ORM/Annotation/OneToOne.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/OrderBy.php b/lib/Doctrine/ORM/Annotation/OrderBy.php index a72c0ff5a70..227d36f5381 100644 --- a/lib/Doctrine/ORM/Annotation/OrderBy.php +++ b/lib/Doctrine/ORM/Annotation/OrderBy.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/PostLoad.php b/lib/Doctrine/ORM/Annotation/PostLoad.php index eb30aa9a56d..316c8430771 100644 --- a/lib/Doctrine/ORM/Annotation/PostLoad.php +++ b/lib/Doctrine/ORM/Annotation/PostLoad.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/PostPersist.php b/lib/Doctrine/ORM/Annotation/PostPersist.php index 4c43160bb1e..db084903f86 100644 --- a/lib/Doctrine/ORM/Annotation/PostPersist.php +++ b/lib/Doctrine/ORM/Annotation/PostPersist.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/PostRemove.php b/lib/Doctrine/ORM/Annotation/PostRemove.php index 15cbaa09c86..c177a38dcd4 100644 --- a/lib/Doctrine/ORM/Annotation/PostRemove.php +++ b/lib/Doctrine/ORM/Annotation/PostRemove.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/PostUpdate.php b/lib/Doctrine/ORM/Annotation/PostUpdate.php index de77736f52b..0c800607068 100644 --- a/lib/Doctrine/ORM/Annotation/PostUpdate.php +++ b/lib/Doctrine/ORM/Annotation/PostUpdate.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/PreFlush.php b/lib/Doctrine/ORM/Annotation/PreFlush.php index 46a85a6263e..0cf36d0c704 100644 --- a/lib/Doctrine/ORM/Annotation/PreFlush.php +++ b/lib/Doctrine/ORM/Annotation/PreFlush.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/PrePersist.php b/lib/Doctrine/ORM/Annotation/PrePersist.php index 2aaef4b5242..5b1bcb66846 100644 --- a/lib/Doctrine/ORM/Annotation/PrePersist.php +++ b/lib/Doctrine/ORM/Annotation/PrePersist.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/PreRemove.php b/lib/Doctrine/ORM/Annotation/PreRemove.php index 84e1231c427..913156a1cdd 100644 --- a/lib/Doctrine/ORM/Annotation/PreRemove.php +++ b/lib/Doctrine/ORM/Annotation/PreRemove.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/PreUpdate.php b/lib/Doctrine/ORM/Annotation/PreUpdate.php index c9f8fe39eeb..950d0b4c357 100644 --- a/lib/Doctrine/ORM/Annotation/PreUpdate.php +++ b/lib/Doctrine/ORM/Annotation/PreUpdate.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/SequenceGenerator.php b/lib/Doctrine/ORM/Annotation/SequenceGenerator.php index 0de0184af5f..0c615539b9c 100644 --- a/lib/Doctrine/ORM/Annotation/SequenceGenerator.php +++ b/lib/Doctrine/ORM/Annotation/SequenceGenerator.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/SqlResultSetMapping.php b/lib/Doctrine/ORM/Annotation/SqlResultSetMapping.php index 109b95fe2a9..ada09c964ba 100644 --- a/lib/Doctrine/ORM/Annotation/SqlResultSetMapping.php +++ b/lib/Doctrine/ORM/Annotation/SqlResultSetMapping.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/SqlResultSetMappings.php b/lib/Doctrine/ORM/Annotation/SqlResultSetMappings.php index c3929e352e1..f99674a2745 100644 --- a/lib/Doctrine/ORM/Annotation/SqlResultSetMappings.php +++ b/lib/Doctrine/ORM/Annotation/SqlResultSetMappings.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/Table.php b/lib/Doctrine/ORM/Annotation/Table.php index f1e2c2b4ae1..b80b97c610f 100644 --- a/lib/Doctrine/ORM/Annotation/Table.php +++ b/lib/Doctrine/ORM/Annotation/Table.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/UniqueConstraint.php b/lib/Doctrine/ORM/Annotation/UniqueConstraint.php index 7dfcf2cc689..48f17591df8 100644 --- a/lib/Doctrine/ORM/Annotation/UniqueConstraint.php +++ b/lib/Doctrine/ORM/Annotation/UniqueConstraint.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Annotation/Version.php b/lib/Doctrine/ORM/Annotation/Version.php index 2307de3d95f..9c7d6a7ca74 100644 --- a/lib/Doctrine/ORM/Annotation/Version.php +++ b/lib/Doctrine/ORM/Annotation/Version.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Annotation; /** diff --git a/lib/Doctrine/ORM/Cache.php b/lib/Doctrine/ORM/Cache.php index 3da7c05ef4e..743e394bca9 100644 --- a/lib/Doctrine/ORM/Cache.php +++ b/lib/Doctrine/ORM/Cache.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; /** diff --git a/lib/Doctrine/ORM/Cache/AssociationCacheEntry.php b/lib/Doctrine/ORM/Cache/AssociationCacheEntry.php index dae5e602da7..594e6d76cf9 100644 --- a/lib/Doctrine/ORM/Cache/AssociationCacheEntry.php +++ b/lib/Doctrine/ORM/Cache/AssociationCacheEntry.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; /** diff --git a/lib/Doctrine/ORM/Cache/CacheConfiguration.php b/lib/Doctrine/ORM/Cache/CacheConfiguration.php index eb3ec428df3..dacb031092a 100644 --- a/lib/Doctrine/ORM/Cache/CacheConfiguration.php +++ b/lib/Doctrine/ORM/Cache/CacheConfiguration.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; use Doctrine\ORM\Cache\Logging\CacheLogger; diff --git a/lib/Doctrine/ORM/Cache/CacheEntry.php b/lib/Doctrine/ORM/Cache/CacheEntry.php index c34b0ff9b00..7cc4009432b 100644 --- a/lib/Doctrine/ORM/Cache/CacheEntry.php +++ b/lib/Doctrine/ORM/Cache/CacheEntry.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; /** diff --git a/lib/Doctrine/ORM/Cache/CacheException.php b/lib/Doctrine/ORM/Cache/CacheException.php index 315a8aac2ef..dc51b86fee5 100644 --- a/lib/Doctrine/ORM/Cache/CacheException.php +++ b/lib/Doctrine/ORM/Cache/CacheException.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; use Doctrine\ORM\ORMException; diff --git a/lib/Doctrine/ORM/Cache/CacheFactory.php b/lib/Doctrine/ORM/Cache/CacheFactory.php index f6a5a5c683d..877581e8fee 100644 --- a/lib/Doctrine/ORM/Cache/CacheFactory.php +++ b/lib/Doctrine/ORM/Cache/CacheFactory.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; use Doctrine\ORM\Mapping\AssociationMetadata; diff --git a/lib/Doctrine/ORM/Cache/CacheKey.php b/lib/Doctrine/ORM/Cache/CacheKey.php index 1641c9900dc..9371b0f4791 100644 --- a/lib/Doctrine/ORM/Cache/CacheKey.php +++ b/lib/Doctrine/ORM/Cache/CacheKey.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; /** diff --git a/lib/Doctrine/ORM/Cache/CollectionCacheEntry.php b/lib/Doctrine/ORM/Cache/CollectionCacheEntry.php index b3a1defe14c..6aa1caeb6ca 100644 --- a/lib/Doctrine/ORM/Cache/CollectionCacheEntry.php +++ b/lib/Doctrine/ORM/Cache/CollectionCacheEntry.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; /** diff --git a/lib/Doctrine/ORM/Cache/CollectionCacheKey.php b/lib/Doctrine/ORM/Cache/CollectionCacheKey.php index 6b631455000..d0320953b11 100644 --- a/lib/Doctrine/ORM/Cache/CollectionCacheKey.php +++ b/lib/Doctrine/ORM/Cache/CollectionCacheKey.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; /** diff --git a/lib/Doctrine/ORM/Cache/CollectionHydrator.php b/lib/Doctrine/ORM/Cache/CollectionHydrator.php index 04cdde16268..34370e55b83 100644 --- a/lib/Doctrine/ORM/Cache/CollectionHydrator.php +++ b/lib/Doctrine/ORM/Cache/CollectionHydrator.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; use Doctrine\ORM\PersistentCollection; diff --git a/lib/Doctrine/ORM/Cache/ConcurrentRegion.php b/lib/Doctrine/ORM/Cache/ConcurrentRegion.php index 12da6d615ad..a793680f28c 100644 --- a/lib/Doctrine/ORM/Cache/ConcurrentRegion.php +++ b/lib/Doctrine/ORM/Cache/ConcurrentRegion.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; /** diff --git a/lib/Doctrine/ORM/Cache/DefaultCache.php b/lib/Doctrine/ORM/Cache/DefaultCache.php index 1db9bb3c5e4..da37218dd82 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCache.php +++ b/lib/Doctrine/ORM/Cache/DefaultCache.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; use Doctrine\ORM\Cache; diff --git a/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php b/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php index 22c15e549fa..4ded463c882 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php +++ b/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; use Doctrine\Common\Cache\Cache as CacheAdapter; diff --git a/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php b/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php index 57c517fc585..30019fc4dfe 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; use Doctrine\ORM\Query; diff --git a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php index 851bfc43f5b..12b50473157 100644 --- a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; use Doctrine\Common\Util\ClassUtils; diff --git a/lib/Doctrine/ORM/Cache/DefaultQueryCache.php b/lib/Doctrine/ORM/Cache/DefaultQueryCache.php index 3190ec3819a..5daba4f8532 100644 --- a/lib/Doctrine/ORM/Cache/DefaultQueryCache.php +++ b/lib/Doctrine/ORM/Cache/DefaultQueryCache.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; use Doctrine\Common\Collections\ArrayCollection; diff --git a/lib/Doctrine/ORM/Cache/EntityCacheEntry.php b/lib/Doctrine/ORM/Cache/EntityCacheEntry.php index 155618be984..0d95c3c2e88 100644 --- a/lib/Doctrine/ORM/Cache/EntityCacheEntry.php +++ b/lib/Doctrine/ORM/Cache/EntityCacheEntry.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; use Doctrine\ORM\EntityManagerInterface; diff --git a/lib/Doctrine/ORM/Cache/EntityCacheKey.php b/lib/Doctrine/ORM/Cache/EntityCacheKey.php index 281e610fa6c..e6efae30c53 100644 --- a/lib/Doctrine/ORM/Cache/EntityCacheKey.php +++ b/lib/Doctrine/ORM/Cache/EntityCacheKey.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; /** diff --git a/lib/Doctrine/ORM/Cache/EntityHydrator.php b/lib/Doctrine/ORM/Cache/EntityHydrator.php index 05a394da7b2..acfdc281e64 100644 --- a/lib/Doctrine/ORM/Cache/EntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/EntityHydrator.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; use Doctrine\ORM\Mapping\ClassMetadata; diff --git a/lib/Doctrine/ORM/Cache/Lock.php b/lib/Doctrine/ORM/Cache/Lock.php index 60f7d6c9d7d..a870ea6e9de 100644 --- a/lib/Doctrine/ORM/Cache/Lock.php +++ b/lib/Doctrine/ORM/Cache/Lock.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; /** diff --git a/lib/Doctrine/ORM/Cache/LockException.php b/lib/Doctrine/ORM/Cache/LockException.php index d4c76240aa9..189b0f6318d 100644 --- a/lib/Doctrine/ORM/Cache/LockException.php +++ b/lib/Doctrine/ORM/Cache/LockException.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; /** diff --git a/lib/Doctrine/ORM/Cache/Logging/CacheLogger.php b/lib/Doctrine/ORM/Cache/Logging/CacheLogger.php index bdae4eea8c5..379660c7246 100644 --- a/lib/Doctrine/ORM/Cache/Logging/CacheLogger.php +++ b/lib/Doctrine/ORM/Cache/Logging/CacheLogger.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache\Logging; use Doctrine\ORM\Cache\CollectionCacheKey; diff --git a/lib/Doctrine/ORM/Cache/Logging/CacheLoggerChain.php b/lib/Doctrine/ORM/Cache/Logging/CacheLoggerChain.php index 28a8125c972..1c7cd1d8fe0 100644 --- a/lib/Doctrine/ORM/Cache/Logging/CacheLoggerChain.php +++ b/lib/Doctrine/ORM/Cache/Logging/CacheLoggerChain.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache\Logging; use Doctrine\ORM\Cache\CollectionCacheKey; diff --git a/lib/Doctrine/ORM/Cache/Logging/StatisticsCacheLogger.php b/lib/Doctrine/ORM/Cache/Logging/StatisticsCacheLogger.php index 122e3534ac7..ce05b428c20 100644 --- a/lib/Doctrine/ORM/Cache/Logging/StatisticsCacheLogger.php +++ b/lib/Doctrine/ORM/Cache/Logging/StatisticsCacheLogger.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache\Logging; use Doctrine\ORM\Cache\CollectionCacheKey; diff --git a/lib/Doctrine/ORM/Cache/MultiGetRegion.php b/lib/Doctrine/ORM/Cache/MultiGetRegion.php index be32b08f0fe..1d3b6d5c060 100644 --- a/lib/Doctrine/ORM/Cache/MultiGetRegion.php +++ b/lib/Doctrine/ORM/Cache/MultiGetRegion.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; /** diff --git a/lib/Doctrine/ORM/Cache/Persister/CachedPersister.php b/lib/Doctrine/ORM/Cache/Persister/CachedPersister.php index 89afd32095f..da847298035 100644 --- a/lib/Doctrine/ORM/Cache/Persister/CachedPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/CachedPersister.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache\Persister; /** diff --git a/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php b/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php index 42c20d779fd..fb4ba0214c0 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache\Persister\Collection; use Doctrine\Common\Collections\Criteria; diff --git a/lib/Doctrine/ORM/Cache/Persister/Collection/CachedCollectionPersister.php b/lib/Doctrine/ORM/Cache/Persister/Collection/CachedCollectionPersister.php index 5722027c49d..c68cf6870ed 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Collection/CachedCollectionPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Collection/CachedCollectionPersister.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache\Persister\Collection; use Doctrine\ORM\Cache\CollectionCacheKey; diff --git a/lib/Doctrine/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php b/lib/Doctrine/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php index 452e042eb8c..e22384be391 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache\Persister\Collection; use Doctrine\ORM\Cache\CollectionCacheKey; diff --git a/lib/Doctrine/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php b/lib/Doctrine/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php index f2fc0309b75..e18fdc1a475 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache\Persister\Collection; use Doctrine\ORM\PersistentCollection; diff --git a/lib/Doctrine/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php b/lib/Doctrine/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php index bda93d5bb8b..b18b44276fc 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache\Persister\Collection; use Doctrine\ORM\Cache\CollectionCacheKey; diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php index 0382abf6f32..358cac4791b 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache\Persister\Entity; use Doctrine\ORM\Cache; diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/CachedEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/CachedEntityPersister.php index 89582700c63..0e6dad2e5ae 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/CachedEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/CachedEntityPersister.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache\Persister\Entity; use Doctrine\ORM\Cache\EntityCacheKey; diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php index d040daff3a6..dec9e85b918 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache\Persister\Entity; use Doctrine\ORM\Cache\EntityCacheKey; diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/ReadOnlyCachedEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/ReadOnlyCachedEntityPersister.php index ce93d7b0e61..748db656631 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/ReadOnlyCachedEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/ReadOnlyCachedEntityPersister.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache\Persister\Entity; use Doctrine\ORM\Cache\CacheException; diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersister.php index 0319742eb4f..15673ed7088 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersister.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache\Persister\Entity; use Doctrine\ORM\Persisters\Entity\EntityPersister; diff --git a/lib/Doctrine/ORM/Cache/QueryCache.php b/lib/Doctrine/ORM/Cache/QueryCache.php index de2496253b3..1aa6d1844bf 100644 --- a/lib/Doctrine/ORM/Cache/QueryCache.php +++ b/lib/Doctrine/ORM/Cache/QueryCache.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; use Doctrine\ORM\Query\ResultSetMapping; diff --git a/lib/Doctrine/ORM/Cache/QueryCacheEntry.php b/lib/Doctrine/ORM/Cache/QueryCacheEntry.php index b6af393fde1..791f05c4b37 100644 --- a/lib/Doctrine/ORM/Cache/QueryCacheEntry.php +++ b/lib/Doctrine/ORM/Cache/QueryCacheEntry.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; /** diff --git a/lib/Doctrine/ORM/Cache/QueryCacheKey.php b/lib/Doctrine/ORM/Cache/QueryCacheKey.php index 0e072a36fc0..fd38eec57a8 100644 --- a/lib/Doctrine/ORM/Cache/QueryCacheKey.php +++ b/lib/Doctrine/ORM/Cache/QueryCacheKey.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; use Doctrine\ORM\Cache; diff --git a/lib/Doctrine/ORM/Cache/QueryCacheValidator.php b/lib/Doctrine/ORM/Cache/QueryCacheValidator.php index 682a41ec4fa..fec8ca38916 100644 --- a/lib/Doctrine/ORM/Cache/QueryCacheValidator.php +++ b/lib/Doctrine/ORM/Cache/QueryCacheValidator.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; /** diff --git a/lib/Doctrine/ORM/Cache/Region.php b/lib/Doctrine/ORM/Cache/Region.php index 3bffbbce747..405868207a1 100644 --- a/lib/Doctrine/ORM/Cache/Region.php +++ b/lib/Doctrine/ORM/Cache/Region.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; /** diff --git a/lib/Doctrine/ORM/Cache/Region/DefaultMultiGetRegion.php b/lib/Doctrine/ORM/Cache/Region/DefaultMultiGetRegion.php index 2cd94292b49..f732f6df51f 100644 --- a/lib/Doctrine/ORM/Cache/Region/DefaultMultiGetRegion.php +++ b/lib/Doctrine/ORM/Cache/Region/DefaultMultiGetRegion.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache\Region; use Doctrine\Common\Cache\MultiGetCache; diff --git a/lib/Doctrine/ORM/Cache/Region/DefaultRegion.php b/lib/Doctrine/ORM/Cache/Region/DefaultRegion.php index be62a6fb957..4c60047575c 100644 --- a/lib/Doctrine/ORM/Cache/Region/DefaultRegion.php +++ b/lib/Doctrine/ORM/Cache/Region/DefaultRegion.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache\Region; use Doctrine\Common\Cache\Cache as CacheAdapter; diff --git a/lib/Doctrine/ORM/Cache/Region/FileLockRegion.php b/lib/Doctrine/ORM/Cache/Region/FileLockRegion.php index 880d9dabc5e..16cf94915ff 100644 --- a/lib/Doctrine/ORM/Cache/Region/FileLockRegion.php +++ b/lib/Doctrine/ORM/Cache/Region/FileLockRegion.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache\Region; use Doctrine\ORM\Cache\CollectionCacheEntry; diff --git a/lib/Doctrine/ORM/Cache/Region/UpdateTimestampCache.php b/lib/Doctrine/ORM/Cache/Region/UpdateTimestampCache.php index dfdf9062aa3..5fa5e747f0b 100644 --- a/lib/Doctrine/ORM/Cache/Region/UpdateTimestampCache.php +++ b/lib/Doctrine/ORM/Cache/Region/UpdateTimestampCache.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache\Region; use Doctrine\ORM\Cache\TimestampCacheEntry; diff --git a/lib/Doctrine/ORM/Cache/RegionsConfiguration.php b/lib/Doctrine/ORM/Cache/RegionsConfiguration.php index d79c5b1af28..720b1d2424d 100644 --- a/lib/Doctrine/ORM/Cache/RegionsConfiguration.php +++ b/lib/Doctrine/ORM/Cache/RegionsConfiguration.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; /** diff --git a/lib/Doctrine/ORM/Cache/TimestampCacheEntry.php b/lib/Doctrine/ORM/Cache/TimestampCacheEntry.php index 0b7ce0be6a0..302342d0bdf 100644 --- a/lib/Doctrine/ORM/Cache/TimestampCacheEntry.php +++ b/lib/Doctrine/ORM/Cache/TimestampCacheEntry.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; /** diff --git a/lib/Doctrine/ORM/Cache/TimestampCacheKey.php b/lib/Doctrine/ORM/Cache/TimestampCacheKey.php index dfa72274b23..595c988d000 100644 --- a/lib/Doctrine/ORM/Cache/TimestampCacheKey.php +++ b/lib/Doctrine/ORM/Cache/TimestampCacheKey.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; /** diff --git a/lib/Doctrine/ORM/Cache/TimestampQueryCacheValidator.php b/lib/Doctrine/ORM/Cache/TimestampQueryCacheValidator.php index c6404d3b25d..7f2848a5bce 100644 --- a/lib/Doctrine/ORM/Cache/TimestampQueryCacheValidator.php +++ b/lib/Doctrine/ORM/Cache/TimestampQueryCacheValidator.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; /** diff --git a/lib/Doctrine/ORM/Cache/TimestampRegion.php b/lib/Doctrine/ORM/Cache/TimestampRegion.php index 9e0c25ca6ab..cae6624a0db 100644 --- a/lib/Doctrine/ORM/Cache/TimestampRegion.php +++ b/lib/Doctrine/ORM/Cache/TimestampRegion.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Cache; /** diff --git a/lib/Doctrine/ORM/Configuration.php b/lib/Doctrine/ORM/Configuration.php index 660461f42bc..d804a90e785 100644 --- a/lib/Doctrine/ORM/Configuration.php +++ b/lib/Doctrine/ORM/Configuration.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; use Doctrine\Common\Annotations\AnnotationReader; diff --git a/lib/Doctrine/ORM/Configuration/MetadataConfiguration.php b/lib/Doctrine/ORM/Configuration/MetadataConfiguration.php index 44dcdda1cee..a938a5ebefa 100644 --- a/lib/Doctrine/ORM/Configuration/MetadataConfiguration.php +++ b/lib/Doctrine/ORM/Configuration/MetadataConfiguration.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Configuration; use Doctrine\ORM\Mapping\Driver\MappingDriver; diff --git a/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php b/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php index 6d06ac9275f..0c8980c9ddd 100644 --- a/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php +++ b/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Configuration; use Doctrine\ORM\Proxy\Factory\ProxyFactory; diff --git a/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php b/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php index fd0ced79ca9..d2ecb249a2e 100644 --- a/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php +++ b/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Decorator; use Doctrine\ORM\Query\ResultSetMapping; diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 8f0f5aeb635..3389338a9c2 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; use Doctrine\Common\EventManager; diff --git a/lib/Doctrine/ORM/EntityManagerAware.php b/lib/Doctrine/ORM/EntityManagerAware.php index bc62ddfc46c..59c31e8f88d 100644 --- a/lib/Doctrine/ORM/EntityManagerAware.php +++ b/lib/Doctrine/ORM/EntityManagerAware.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; use Doctrine\ORM\Mapping\ClassMetadata; diff --git a/lib/Doctrine/ORM/EntityManagerInterface.php b/lib/Doctrine/ORM/EntityManagerInterface.php index 7bb61d1fe61..3109995141f 100644 --- a/lib/Doctrine/ORM/EntityManagerInterface.php +++ b/lib/Doctrine/ORM/EntityManagerInterface.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; use Doctrine\Common\Persistence\ObjectManager; diff --git a/lib/Doctrine/ORM/EntityNotFoundException.php b/lib/Doctrine/ORM/EntityNotFoundException.php index 5b21e15c276..051a4199942 100644 --- a/lib/Doctrine/ORM/EntityNotFoundException.php +++ b/lib/Doctrine/ORM/EntityNotFoundException.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; /** diff --git a/lib/Doctrine/ORM/EntityRepository.php b/lib/Doctrine/ORM/EntityRepository.php index 4db1359809c..36f05ec3186 100644 --- a/lib/Doctrine/ORM/EntityRepository.php +++ b/lib/Doctrine/ORM/EntityRepository.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; use Doctrine\Common\Util\Inflector; diff --git a/lib/Doctrine/ORM/Event/LifecycleEventArgs.php b/lib/Doctrine/ORM/Event/LifecycleEventArgs.php index c7eb80bf61f..f752424c6a2 100644 --- a/lib/Doctrine/ORM/Event/LifecycleEventArgs.php +++ b/lib/Doctrine/ORM/Event/LifecycleEventArgs.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Event; use Doctrine\Common\Persistence\Event\LifecycleEventArgs as BaseLifecycleEventArgs; diff --git a/lib/Doctrine/ORM/Event/ListenersInvoker.php b/lib/Doctrine/ORM/Event/ListenersInvoker.php index 7be8d48ebb1..dd9725b15a7 100644 --- a/lib/Doctrine/ORM/Event/ListenersInvoker.php +++ b/lib/Doctrine/ORM/Event/ListenersInvoker.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Event; use Doctrine\Common\EventArgs; diff --git a/lib/Doctrine/ORM/Event/LoadClassMetadataEventArgs.php b/lib/Doctrine/ORM/Event/LoadClassMetadataEventArgs.php index 858d9bdced0..0899a2aae98 100644 --- a/lib/Doctrine/ORM/Event/LoadClassMetadataEventArgs.php +++ b/lib/Doctrine/ORM/Event/LoadClassMetadataEventArgs.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Event; use Doctrine\Common\EventArgs; diff --git a/lib/Doctrine/ORM/Event/OnClassMetadataNotFoundEventArgs.php b/lib/Doctrine/ORM/Event/OnClassMetadataNotFoundEventArgs.php index dedb94ca00c..1b443351401 100644 --- a/lib/Doctrine/ORM/Event/OnClassMetadataNotFoundEventArgs.php +++ b/lib/Doctrine/ORM/Event/OnClassMetadataNotFoundEventArgs.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Event; use Doctrine\Common\Persistence\Event\ManagerEventArgs; diff --git a/lib/Doctrine/ORM/Event/OnClearEventArgs.php b/lib/Doctrine/ORM/Event/OnClearEventArgs.php index d5ec22c171e..306a183e806 100644 --- a/lib/Doctrine/ORM/Event/OnClearEventArgs.php +++ b/lib/Doctrine/ORM/Event/OnClearEventArgs.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Event; use Doctrine\ORM\EntityManagerInterface; diff --git a/lib/Doctrine/ORM/Event/OnFlushEventArgs.php b/lib/Doctrine/ORM/Event/OnFlushEventArgs.php index 6a9c7c7f464..ad4fd6995ae 100644 --- a/lib/Doctrine/ORM/Event/OnFlushEventArgs.php +++ b/lib/Doctrine/ORM/Event/OnFlushEventArgs.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Event; use Doctrine\Common\EventArgs; diff --git a/lib/Doctrine/ORM/Event/PostFlushEventArgs.php b/lib/Doctrine/ORM/Event/PostFlushEventArgs.php index 860f2d33b90..f0292a37f98 100644 --- a/lib/Doctrine/ORM/Event/PostFlushEventArgs.php +++ b/lib/Doctrine/ORM/Event/PostFlushEventArgs.php @@ -16,6 +16,8 @@ * and is licensed under the MIT license. For more information, see * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Event; use Doctrine\Common\EventArgs; diff --git a/lib/Doctrine/ORM/Event/PreFlushEventArgs.php b/lib/Doctrine/ORM/Event/PreFlushEventArgs.php index d01a9263960..e932531eb38 100644 --- a/lib/Doctrine/ORM/Event/PreFlushEventArgs.php +++ b/lib/Doctrine/ORM/Event/PreFlushEventArgs.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Event; use Doctrine\Common\EventArgs; diff --git a/lib/Doctrine/ORM/Event/PreUpdateEventArgs.php b/lib/Doctrine/ORM/Event/PreUpdateEventArgs.php index d9a9f9db2cc..440847f798a 100644 --- a/lib/Doctrine/ORM/Event/PreUpdateEventArgs.php +++ b/lib/Doctrine/ORM/Event/PreUpdateEventArgs.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Event; use Doctrine\ORM\EntityManagerInterface; diff --git a/lib/Doctrine/ORM/Events.php b/lib/Doctrine/ORM/Events.php index 35746d396b4..660b98a0dc7 100644 --- a/lib/Doctrine/ORM/Events.php +++ b/lib/Doctrine/ORM/Events.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; /** diff --git a/lib/Doctrine/ORM/Internal/CommitOrderCalculator.php b/lib/Doctrine/ORM/Internal/CommitOrderCalculator.php index 067a8c577ba..7b6f7bae44b 100644 --- a/lib/Doctrine/ORM/Internal/CommitOrderCalculator.php +++ b/lib/Doctrine/ORM/Internal/CommitOrderCalculator.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Internal; /** diff --git a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php index cde68aa6780..dad7105f383 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Internal\Hydration; use Doctrine\ORM\EntityManagerInterface; diff --git a/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php index cc90ebd1aed..287fe5496f6 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Internal\Hydration; use Doctrine\ORM\Mapping\ToOneAssociationMetadata; diff --git a/lib/Doctrine/ORM/Internal/Hydration/HydrationException.php b/lib/Doctrine/ORM/Internal/Hydration/HydrationException.php index 9caf03ddfb9..16a3f875b44 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/HydrationException.php +++ b/lib/Doctrine/ORM/Internal/Hydration/HydrationException.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Internal\Hydration; class HydrationException extends \Doctrine\ORM\ORMException diff --git a/lib/Doctrine/ORM/Internal/Hydration/IterableResult.php b/lib/Doctrine/ORM/Internal/Hydration/IterableResult.php index 94cf649c3ff..c360420dba7 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/IterableResult.php +++ b/lib/Doctrine/ORM/Internal/Hydration/IterableResult.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Internal\Hydration; /** diff --git a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php index edecfc517ed..62090c1b549 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Internal\Hydration; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; diff --git a/lib/Doctrine/ORM/Internal/Hydration/ScalarHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ScalarHydrator.php index eae7f144913..c4fac03a01d 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ScalarHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ScalarHydrator.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Internal\Hydration; /** diff --git a/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php index 258b5942498..a912d926c81 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Internal\Hydration; use Doctrine\ORM\Mapping\InheritanceType; diff --git a/lib/Doctrine/ORM/Internal/Hydration/SingleScalarHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/SingleScalarHydrator.php index b165cee36b1..5332a4c94b6 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/SingleScalarHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/SingleScalarHydrator.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Internal\Hydration; use Doctrine\ORM\NoResultException; diff --git a/lib/Doctrine/ORM/Internal/HydrationCompleteHandler.php b/lib/Doctrine/ORM/Internal/HydrationCompleteHandler.php index 72a0c70348e..b9f86c9ac1c 100644 --- a/lib/Doctrine/ORM/Internal/HydrationCompleteHandler.php +++ b/lib/Doctrine/ORM/Internal/HydrationCompleteHandler.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Internal; use Doctrine\ORM\EntityManagerInterface; diff --git a/lib/Doctrine/ORM/LazyCriteriaCollection.php b/lib/Doctrine/ORM/LazyCriteriaCollection.php index ad0238fbb95..27d71546da5 100644 --- a/lib/Doctrine/ORM/LazyCriteriaCollection.php +++ b/lib/Doctrine/ORM/LazyCriteriaCollection.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; use Doctrine\Common\Collections\AbstractLazyCollection; diff --git a/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php index d4c21bb7bbd..5eac626cc28 100644 --- a/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; use Doctrine\Common\Persistence\Mapping\ClassMetadataFactory; diff --git a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php index b0cc4553a1c..d946378bf46 100644 --- a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; use Doctrine\ORM\Reflection\ReflectionService; diff --git a/lib/Doctrine/ORM/Mapping/CacheMetadata.php b/lib/Doctrine/ORM/Mapping/CacheMetadata.php index cdd77dd8241..b40135403ba 100644 --- a/lib/Doctrine/ORM/Mapping/CacheMetadata.php +++ b/lib/Doctrine/ORM/Mapping/CacheMetadata.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; class CacheMetadata diff --git a/lib/Doctrine/ORM/Mapping/CacheUsage.php b/lib/Doctrine/ORM/Mapping/CacheUsage.php index 10d5cc54252..3c9366b95f6 100644 --- a/lib/Doctrine/ORM/Mapping/CacheUsage.php +++ b/lib/Doctrine/ORM/Mapping/CacheUsage.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; final class CacheUsage @@ -46,4 +46,4 @@ final class CacheUsage private function __construct() { } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php b/lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php index 5dd520ac956..5211f558390 100644 --- a/lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php +++ b/lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; final class ChangeTrackingPolicy @@ -54,4 +54,4 @@ final class ChangeTrackingPolicy private function __construct() { } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 2604de26652..832bf4ad4b7 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; use Doctrine\ORM\Cache\CacheException; diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index b1040cbbf65..4a7a7ebded9 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; use Doctrine\DBAL\Platforms; diff --git a/lib/Doctrine/ORM/Mapping/ColumnMetadata.php b/lib/Doctrine/ORM/Mapping/ColumnMetadata.php index af9feb84ab5..5e0e14e1ae4 100644 --- a/lib/Doctrine/ORM/Mapping/ColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ColumnMetadata.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; use Doctrine\DBAL\Types\Type; @@ -217,4 +217,4 @@ public function isUnique() { return $this->unique; } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php index d5f9fad9192..2114b994b55 100644 --- a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; /** diff --git a/lib/Doctrine/ORM/Mapping/DefaultEntityListenerResolver.php b/lib/Doctrine/ORM/Mapping/DefaultEntityListenerResolver.php index a8ee2dc783d..90a8cbb741b 100644 --- a/lib/Doctrine/ORM/Mapping/DefaultEntityListenerResolver.php +++ b/lib/Doctrine/ORM/Mapping/DefaultEntityListenerResolver.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; /** diff --git a/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php b/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php index d2e50b5cd80..71b154fa283 100644 --- a/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; final class DiscriminatorColumnMetadata extends LocalColumnMetadata { -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 18db4259667..c9484479340 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Driver; use Doctrine\Common\Annotations\AnnotationReader; diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index 3d4b68cfc41..d99e85eca89 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Driver; use Doctrine\Common\Util\Inflector; diff --git a/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php b/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php index 2f9d97c8274..0328a8955c6 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Driver; use Doctrine\ORM\Mapping\ClassMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Driver/FileDriver.php b/lib/Doctrine/ORM/Mapping/Driver/FileDriver.php index 049dd361772..b5bd6f9430e 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/FileDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/FileDriver.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Driver; use Doctrine\Common\Persistence\Mapping\Driver\DefaultFileLocator; diff --git a/lib/Doctrine/ORM/Mapping/Driver/MappingDriver.php b/lib/Doctrine/ORM/Mapping/Driver/MappingDriver.php index 86014294c9f..71b9a884482 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/MappingDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/MappingDriver.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Driver; use Doctrine\ORM\Mapping\ClassMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php index 9101b4edbcb..e5da0e03f00 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Driver; use Doctrine\Common\Annotations\AnnotationReader; diff --git a/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php b/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php index c75e3f34888..ca44af30c26 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Driver; use Doctrine\ORM\Mapping\ClassMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Driver/SimplifiedXmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/SimplifiedXmlDriver.php index 1fcdd477269..a4198768c28 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/SimplifiedXmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/SimplifiedXmlDriver.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Driver; use Doctrine\Common\Persistence\Mapping\Driver\SymfonyFileLocator; diff --git a/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php b/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php index eb19c6c1ed7..6eb9115fc80 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Driver; use Doctrine\ORM\Mapping\ClassMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 9c0cfab9419..6243550ea6b 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Driver; use Doctrine\DBAL\Types\Type; diff --git a/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php b/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php index d697822d562..a505edfd1a9 100644 --- a/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; use Doctrine\ORM\Reflection\ReflectionService; diff --git a/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php b/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php index 95bab9ebe97..e7b581311fc 100644 --- a/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; /** diff --git a/lib/Doctrine/ORM/Mapping/EntityListenerResolver.php b/lib/Doctrine/ORM/Mapping/EntityListenerResolver.php index b0c62c8c3a3..b2133e1fd33 100644 --- a/lib/Doctrine/ORM/Mapping/EntityListenerResolver.php +++ b/lib/Doctrine/ORM/Mapping/EntityListenerResolver.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; /** diff --git a/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php index df3b0ac62b2..cd41608c6f9 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\AssociationMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/CacheMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/CacheMetadataExporter.php index 574203815b3..81c0da7df71 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/CacheMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/CacheMetadataExporter.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\CacheMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php index 6e3568a827a..8f5ba644459 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ColumnMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ColumnMetadataExporter.php index 3e8e74a4b4b..c8d698ac9cf 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ColumnMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ColumnMetadataExporter.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\ColumnMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/DiscriminatorColumnMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/DiscriminatorColumnMetadataExporter.php index 06459b306af..0e88915774a 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/DiscriminatorColumnMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/DiscriminatorColumnMetadataExporter.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\DiscriminatorColumnMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/Exporter.php b/lib/Doctrine/ORM/Mapping/Exporter/Exporter.php index 2e62f0e769a..acc8ed4235d 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/Exporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/Exporter.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Exporter; interface Exporter diff --git a/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php index 046977543ec..851cf8957fe 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\FieldMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/JoinColumnMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/JoinColumnMetadataExporter.php index 0954e1e05f7..22b7dd8acbb 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/JoinColumnMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/JoinColumnMetadataExporter.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\JoinColumnMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/JoinTableMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/JoinTableMetadataExporter.php index 9f41715c9fd..d66c769e962 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/JoinTableMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/JoinTableMetadataExporter.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\JoinTableMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/LocalColumnMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/LocalColumnMetadataExporter.php index 03c37a662e9..1b38e862c23 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/LocalColumnMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/LocalColumnMetadataExporter.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\LocalColumnMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ManyToManyAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ManyToManyAssociationMetadataExporter.php index b97d77e55f4..1e7e35f1ee2 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ManyToManyAssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ManyToManyAssociationMetadataExporter.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ManyToOneAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ManyToOneAssociationMetadataExporter.php index 01c15f27aba..cdc20db5294 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ManyToOneAssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ManyToOneAssociationMetadataExporter.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\ManyToOneAssociationMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/OneToManyAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/OneToManyAssociationMetadataExporter.php index 2e86c7d7736..3cc4937a04c 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/OneToManyAssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/OneToManyAssociationMetadataExporter.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/OneToOneAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/OneToOneAssociationMetadataExporter.php index e13b812b4b2..d8693ad8568 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/OneToOneAssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/OneToOneAssociationMetadataExporter.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/TableMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/TableMetadataExporter.php index c0f114ae7c1..330648d944e 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/TableMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/TableMetadataExporter.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\TableMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ToManyAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ToManyAssociationMetadataExporter.php index b5ef8f2e472..a6254bcf359 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ToManyAssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ToManyAssociationMetadataExporter.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\ToManyAssociationMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ToOneAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ToOneAssociationMetadataExporter.php index abe9dd0855d..f013afc42b1 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ToOneAssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ToOneAssociationMetadataExporter.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\ToOneAssociationMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/TransientMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/TransientMetadataExporter.php index d48d42bc35a..9d534473cbe 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/TransientMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/TransientMetadataExporter.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\TransientMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php index 7af28d11166..09aac1f0f2e 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Exporter; class VariableExporter implements Exporter diff --git a/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php index 75f789279e8..5688c722544 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Exporter; use Doctrine\ORM\Mapping\VersionFieldMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php index d03a0d8419c..e6bc32713a7 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Factory; use Doctrine\Common\Persistence\Mapping\ClassMetadataFactory; diff --git a/lib/Doctrine/ORM/Mapping/Factory/Autoloader.php b/lib/Doctrine/ORM/Mapping/Factory/Autoloader.php index 1a0fab71353..35309624842 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/Autoloader.php +++ b/lib/Doctrine/ORM/Mapping/Factory/Autoloader.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Factory; use InvalidArgumentException; diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinition.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinition.php index 71c9634fa6e..41ee341321f 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinition.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinition.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Factory; use Doctrine\ORM\Mapping\ClassMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php index e38d3f658e9..1e2723b6615 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Factory; use Doctrine\ORM\Mapping\ClassMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php index 71a45ba5090..8da852023c9 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Factory; use Doctrine\ORM\Mapping\Driver\MappingDriver; diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataResolver.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataResolver.php index e7b8dd8e8dd..751a2b053fd 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataResolver.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataResolver.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Factory; /** @@ -45,4 +45,4 @@ public function resolveMetadataClassName(string $className) : string; * @return string */ public function resolveMetadataClassPath(string $className) : string; -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Factory/DefaultClassMetadataResolver.php b/lib/Doctrine/ORM/Mapping/Factory/DefaultClassMetadataResolver.php index 6b68f2eee50..4ed8863f24d 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/DefaultClassMetadataResolver.php +++ b/lib/Doctrine/ORM/Mapping/Factory/DefaultClassMetadataResolver.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Factory; class DefaultClassMetadataResolver implements ClassMetadataResolver @@ -68,4 +68,4 @@ public function resolveMetadataClassPath(string $className) : string { return sprintf('%s/%s/%s.php', $this->directory, self::MARKER, str_replace('\\', '.', $className)); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Factory/DefaultNamingStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/DefaultNamingStrategy.php index 13276a8905c..646f5adcca1 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/DefaultNamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/DefaultNamingStrategy.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Factory; /** diff --git a/lib/Doctrine/ORM/Mapping/Factory/NamingStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/NamingStrategy.php index cd378f27226..cc9bb665214 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/NamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/NamingStrategy.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Factory; /** diff --git a/lib/Doctrine/ORM/Mapping/Factory/RuntimeClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/Factory/RuntimeClassMetadataFactory.php index 05df08ecff1..1bd03647c30 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/RuntimeClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/RuntimeClassMetadataFactory.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Factory; use Doctrine\ORM\Reflection\RuntimeReflectionService; diff --git a/lib/Doctrine/ORM/Mapping/Factory/StaticClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/Factory/StaticClassMetadataFactory.php index 8faeb8cbe65..0a1da005c75 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/StaticClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/StaticClassMetadataFactory.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Factory; use Doctrine\ORM\Reflection\StaticReflectionService; diff --git a/lib/Doctrine/ORM/Mapping/Factory/Strategy/ClassMetadataGeneratorStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/Strategy/ClassMetadataGeneratorStrategy.php index a716c0bea1b..84af1b79ea8 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/Strategy/ClassMetadataGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/Strategy/ClassMetadataGeneratorStrategy.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Factory\Strategy; use Doctrine\ORM\Mapping\Factory\ClassMetadataDefinition; diff --git a/lib/Doctrine/ORM/Mapping/Factory/Strategy/ConditionalFileWriterClassMetadataGeneratorStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/Strategy/ConditionalFileWriterClassMetadataGeneratorStrategy.php index e748f0a4fd4..a640ef40252 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/Strategy/ConditionalFileWriterClassMetadataGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/Strategy/ConditionalFileWriterClassMetadataGeneratorStrategy.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Factory\Strategy; use Doctrine\ORM\Mapping\Factory\ClassMetadataDefinition; diff --git a/lib/Doctrine/ORM/Mapping/Factory/Strategy/EvaluatingClassMetadataGeneratorStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/Strategy/EvaluatingClassMetadataGeneratorStrategy.php index e2968c56cdc..e7a4f80a475 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/Strategy/EvaluatingClassMetadataGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/Strategy/EvaluatingClassMetadataGeneratorStrategy.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Factory\Strategy; use Doctrine\ORM\Mapping\Factory\ClassMetadataDefinition; diff --git a/lib/Doctrine/ORM/Mapping/Factory/Strategy/FileReaderClassMetadataGeneratorStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/Strategy/FileReaderClassMetadataGeneratorStrategy.php index e66623b10cb..e49a74b1343 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/Strategy/FileReaderClassMetadataGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/Strategy/FileReaderClassMetadataGeneratorStrategy.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Factory\Strategy; use Doctrine\ORM\Mapping\Factory\ClassMetadataDefinition; diff --git a/lib/Doctrine/ORM/Mapping/Factory/Strategy/FileWriterClassMetadataGeneratorStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/Strategy/FileWriterClassMetadataGeneratorStrategy.php index 3ac855762dd..9d3b53a3016 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/Strategy/FileWriterClassMetadataGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/Strategy/FileWriterClassMetadataGeneratorStrategy.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Factory\Strategy; use Doctrine\ORM\Mapping\Factory\ClassMetadataDefinition; diff --git a/lib/Doctrine/ORM/Mapping/Factory/UnderscoreNamingStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/UnderscoreNamingStrategy.php index a5c06f9c2cf..4c3fb495065 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/UnderscoreNamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/UnderscoreNamingStrategy.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping\Factory; /** diff --git a/lib/Doctrine/ORM/Mapping/FetchMode.php b/lib/Doctrine/ORM/Mapping/FetchMode.php index e6ea54b8421..1651e40bb1e 100644 --- a/lib/Doctrine/ORM/Mapping/FetchMode.php +++ b/lib/Doctrine/ORM/Mapping/FetchMode.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; final class FetchMode @@ -49,4 +49,4 @@ final class FetchMode private function __construct() { } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index 640c5cf0865..6f25d42d874 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; use Doctrine\DBAL\Types\Type; diff --git a/lib/Doctrine/ORM/Mapping/GeneratorType.php b/lib/Doctrine/ORM/Mapping/GeneratorType.php index c393651488c..12bf00ad9de 100644 --- a/lib/Doctrine/ORM/Mapping/GeneratorType.php +++ b/lib/Doctrine/ORM/Mapping/GeneratorType.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; final class GeneratorType @@ -75,4 +75,4 @@ final class GeneratorType private function __construct() { } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/InheritanceType.php b/lib/Doctrine/ORM/Mapping/InheritanceType.php index d662180d769..641d73efc09 100644 --- a/lib/Doctrine/ORM/Mapping/InheritanceType.php +++ b/lib/Doctrine/ORM/Mapping/InheritanceType.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; final class InheritanceType @@ -55,4 +55,4 @@ final class InheritanceType private function __construct() { } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php b/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php index 588e0d0de30..f12825c8096 100644 --- a/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; class JoinColumnMetadata extends ColumnMetadata diff --git a/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php b/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php index 98523907a2a..34c56a27017 100644 --- a/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php +++ b/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; final class JoinTableMetadata extends TableMetadata @@ -80,4 +80,4 @@ public function __clone() $this->inverseJoinColumns[$index] = clone $inverseJoinColumn; } } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php b/lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php index 573f349c084..5b747a21e89 100644 --- a/lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; abstract class LocalColumnMetadata extends ColumnMetadata @@ -86,4 +86,4 @@ public function setPrecision(int $precision) { $this->precision = $precision; } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php index 9bad24aad42..af29bad020e 100644 --- a/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; class ManyToManyAssociationMetadata extends ToManyAssociationMetadata @@ -48,4 +50,4 @@ public function __clone() $this->joinTable = clone $this->joinTable; } } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/ManyToOneAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ManyToOneAssociationMetadata.php index ce49b6e1231..6e2a79e0bb4 100644 --- a/lib/Doctrine/ORM/Mapping/ManyToOneAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ManyToOneAssociationMetadata.php @@ -17,8 +17,10 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; class ManyToOneAssociationMetadata extends ToOneAssociationMetadata { -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php b/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php index 27b52283c07..b3397ed29c0 100644 --- a/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; /** @@ -120,4 +120,4 @@ public function addDeclaredProperty(Property $property) $this->setDeclaredVersion($property); } } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/MappingException.php b/lib/Doctrine/ORM/Mapping/MappingException.php index 743a4714f37..3ca6f772f65 100644 --- a/lib/Doctrine/ORM/Mapping/MappingException.php +++ b/lib/Doctrine/ORM/Mapping/MappingException.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; /** diff --git a/lib/Doctrine/ORM/Mapping/OneToManyAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/OneToManyAssociationMetadata.php index 17c5d86cb32..573025ee93f 100644 --- a/lib/Doctrine/ORM/Mapping/OneToManyAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/OneToManyAssociationMetadata.php @@ -17,8 +17,10 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; class OneToManyAssociationMetadata extends ToManyAssociationMetadata { -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/OneToOneAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/OneToOneAssociationMetadata.php index b5982291afa..f10d0d096be 100644 --- a/lib/Doctrine/ORM/Mapping/OneToOneAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/OneToOneAssociationMetadata.php @@ -17,8 +17,10 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; class OneToOneAssociationMetadata extends ToOneAssociationMetadata { -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/Property.php b/lib/Doctrine/ORM/Mapping/Property.php index a7e85e06020..9178558f379 100644 --- a/lib/Doctrine/ORM/Mapping/Property.php +++ b/lib/Doctrine/ORM/Mapping/Property.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; use Doctrine\ORM\Reflection\ReflectionService; diff --git a/lib/Doctrine/ORM/Mapping/ReflectionEmbeddedProperty.php b/lib/Doctrine/ORM/Mapping/ReflectionEmbeddedProperty.php index b224fff4eb5..61ff4a0b776 100644 --- a/lib/Doctrine/ORM/Mapping/ReflectionEmbeddedProperty.php +++ b/lib/Doctrine/ORM/Mapping/ReflectionEmbeddedProperty.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; use Doctrine\Instantiator\Instantiator; diff --git a/lib/Doctrine/ORM/Mapping/RootClassMetadata.php b/lib/Doctrine/ORM/Mapping/RootClassMetadata.php index c240b812eeb..5883a4cf727 100644 --- a/lib/Doctrine/ORM/Mapping/RootClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/RootClassMetadata.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; /** diff --git a/lib/Doctrine/ORM/Mapping/SubClassMetadata.php b/lib/Doctrine/ORM/Mapping/SubClassMetadata.php index b2e12143914..6633b8f4cd6 100644 --- a/lib/Doctrine/ORM/Mapping/SubClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/SubClassMetadata.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; /** diff --git a/lib/Doctrine/ORM/Mapping/TableMetadata.php b/lib/Doctrine/ORM/Mapping/TableMetadata.php index 6487bce7c12..fb47c360970 100644 --- a/lib/Doctrine/ORM/Mapping/TableMetadata.php +++ b/lib/Doctrine/ORM/Mapping/TableMetadata.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; use Doctrine\DBAL\Platforms\AbstractPlatform; @@ -217,4 +217,4 @@ public function addUniqueConstraint(array $constraint) $this->uniqueConstraints[$constraint['name']] = $constraint; } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/TableOwner.php b/lib/Doctrine/ORM/Mapping/TableOwner.php index ba38c270c31..ab89bbff748 100644 --- a/lib/Doctrine/ORM/Mapping/TableOwner.php +++ b/lib/Doctrine/ORM/Mapping/TableOwner.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; /** diff --git a/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php index 816f0a63bdc..96777fa4af1 100644 --- a/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; use Doctrine\Common\Collections\ArrayCollection; @@ -97,4 +99,4 @@ public function wrap($owner, $collection, EntityManagerInterface $entityManager) return $collection; } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php index a0d74fdfb9b..43383215da3 100644 --- a/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; class ToOneAssociationMetadata extends AssociationMetadata @@ -58,4 +60,4 @@ public function __clone() $this->joinColumns[$index] = clone $joinColumn; } } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Mapping/TransientMetadata.php b/lib/Doctrine/ORM/Mapping/TransientMetadata.php index 3959771d3ab..dd7780def42 100644 --- a/lib/Doctrine/ORM/Mapping/TransientMetadata.php +++ b/lib/Doctrine/ORM/Mapping/TransientMetadata.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; use Doctrine\ORM\Reflection\ReflectionService; diff --git a/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php b/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php index bb1c8d2a1de..f910a980127 100644 --- a/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Mapping; final class VersionFieldMetadata extends FieldMetadata { -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/NativeQuery.php b/lib/Doctrine/ORM/NativeQuery.php index e99584c8186..1290daa25ab 100644 --- a/lib/Doctrine/ORM/NativeQuery.php +++ b/lib/Doctrine/ORM/NativeQuery.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; /** diff --git a/lib/Doctrine/ORM/NoResultException.php b/lib/Doctrine/ORM/NoResultException.php index 2cbac8e9d95..09d46387ed2 100644 --- a/lib/Doctrine/ORM/NoResultException.php +++ b/lib/Doctrine/ORM/NoResultException.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; /** diff --git a/lib/Doctrine/ORM/NonUniqueResultException.php b/lib/Doctrine/ORM/NonUniqueResultException.php index 55b71300058..3da0e3e8c3e 100644 --- a/lib/Doctrine/ORM/NonUniqueResultException.php +++ b/lib/Doctrine/ORM/NonUniqueResultException.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; /** diff --git a/lib/Doctrine/ORM/ORMException.php b/lib/Doctrine/ORM/ORMException.php index 3ce9ce9dc91..d7bef371b84 100644 --- a/lib/Doctrine/ORM/ORMException.php +++ b/lib/Doctrine/ORM/ORMException.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; use Doctrine\Common\Cache\Cache as CacheDriver; diff --git a/lib/Doctrine/ORM/ORMInvalidArgumentException.php b/lib/Doctrine/ORM/ORMInvalidArgumentException.php index ba89d2223b0..3d5d32b23b5 100644 --- a/lib/Doctrine/ORM/ORMInvalidArgumentException.php +++ b/lib/Doctrine/ORM/ORMInvalidArgumentException.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; diff --git a/lib/Doctrine/ORM/OptimisticLockException.php b/lib/Doctrine/ORM/OptimisticLockException.php index 2fbd9ce5ec9..f565b5e4287 100644 --- a/lib/Doctrine/ORM/OptimisticLockException.php +++ b/lib/Doctrine/ORM/OptimisticLockException.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; /** diff --git a/lib/Doctrine/ORM/PersistentCollection.php b/lib/Doctrine/ORM/PersistentCollection.php index 4f262482cdf..084cee8632f 100644 --- a/lib/Doctrine/ORM/PersistentCollection.php +++ b/lib/Doctrine/ORM/PersistentCollection.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; use Doctrine\Common\Collections\AbstractLazyCollection; diff --git a/lib/Doctrine/ORM/PersistentObject.php b/lib/Doctrine/ORM/PersistentObject.php index 64f7307fb57..da35a37db8a 100644 --- a/lib/Doctrine/ORM/PersistentObject.php +++ b/lib/Doctrine/ORM/PersistentObject.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; use Doctrine\Common\Collections\ArrayCollection; diff --git a/lib/Doctrine/ORM/Persisters/Collection/AbstractCollectionPersister.php b/lib/Doctrine/ORM/Persisters/Collection/AbstractCollectionPersister.php index bb127fb112e..dc47cabb521 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/AbstractCollectionPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/AbstractCollectionPersister.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Persisters\Collection; use Doctrine\ORM\EntityManagerInterface; diff --git a/lib/Doctrine/ORM/Persisters/Collection/CollectionPersister.php b/lib/Doctrine/ORM/Persisters/Collection/CollectionPersister.php index 36b5706a078..a4788c394c6 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/CollectionPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/CollectionPersister.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Persisters\Collection; use Doctrine\Common\Collections\Criteria; diff --git a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php index 7e55a05e28f..3b15b865e4c 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Persisters\Collection; use Doctrine\Common\Collections\Criteria; diff --git a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php index f8eb7ac1683..0c0e38c9ab3 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Persisters\Collection; use Doctrine\Common\Collections\Criteria; diff --git a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php index 9fef2d3f8d3..9c052c98260 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Persisters\Entity; use Doctrine\ORM\Mapping\ClassMetadata; diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 4a327663ed9..6c44a2dd5d7 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Persisters\Entity; use Doctrine\Common\Collections\Criteria; diff --git a/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php b/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php index e49f5a226aa..9cbe9518705 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php +++ b/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Persisters\Entity; use Doctrine\ORM\Mapping\ClassMetadata; diff --git a/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php index 2428467b55d..253cf435841 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Persisters\Entity; use Doctrine\ORM\Mapping\AssociationMetadata; diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index e857841cee7..b98d2e0179f 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Persisters\Entity; use Doctrine\Common\Collections\Criteria; diff --git a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php index 3a0cfdf1efd..af7c32b7070 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Persisters\Entity; use Doctrine\ORM\Mapping\AssociationMetadata; diff --git a/lib/Doctrine/ORM/Persisters/PersisterException.php b/lib/Doctrine/ORM/Persisters/PersisterException.php index 09f73b21b5d..27eea695ab7 100644 --- a/lib/Doctrine/ORM/Persisters/PersisterException.php +++ b/lib/Doctrine/ORM/Persisters/PersisterException.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Persisters; use Doctrine\ORM\ORMException; diff --git a/lib/Doctrine/ORM/Persisters/SqlExpressionVisitor.php b/lib/Doctrine/ORM/Persisters/SqlExpressionVisitor.php index 15ed8816cb5..b97d421dc01 100644 --- a/lib/Doctrine/ORM/Persisters/SqlExpressionVisitor.php +++ b/lib/Doctrine/ORM/Persisters/SqlExpressionVisitor.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Persisters; use Doctrine\ORM\Mapping\AssociationMetadata; diff --git a/lib/Doctrine/ORM/Persisters/SqlValueVisitor.php b/lib/Doctrine/ORM/Persisters/SqlValueVisitor.php index 78fd0333bb0..733c151980b 100644 --- a/lib/Doctrine/ORM/Persisters/SqlValueVisitor.php +++ b/lib/Doctrine/ORM/Persisters/SqlValueVisitor.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Persisters; use Doctrine\Common\Collections\Expr\ExpressionVisitor; diff --git a/lib/Doctrine/ORM/PessimisticLockException.php b/lib/Doctrine/ORM/PessimisticLockException.php index d60f7a82177..b25a93e9c09 100644 --- a/lib/Doctrine/ORM/PessimisticLockException.php +++ b/lib/Doctrine/ORM/PessimisticLockException.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; /** diff --git a/lib/Doctrine/ORM/Proxy/Factory/Autoloader.php b/lib/Doctrine/ORM/Proxy/Factory/Autoloader.php index eb61e28cc76..079de74f872 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/Autoloader.php +++ b/lib/Doctrine/ORM/Proxy/Factory/Autoloader.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Proxy\Factory; use InvalidArgumentException; diff --git a/lib/Doctrine/ORM/Proxy/Factory/DefaultProxyResolver.php b/lib/Doctrine/ORM/Proxy/Factory/DefaultProxyResolver.php index 695b2ebb203..fc9b939942b 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/DefaultProxyResolver.php +++ b/lib/Doctrine/ORM/Proxy/Factory/DefaultProxyResolver.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Proxy\Factory; use Doctrine\Common\Util\ClassUtils; diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php index 3424467c3ed..0a2a6a25ba8 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Proxy\Factory; use Doctrine\ORM\EntityNotFoundException; diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php index 10b91b0b46d..d4618144357 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Proxy\Factory; use Doctrine\ORM\EntityManagerInterface; diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyException.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyException.php index 675c5cede1f..5e67be50437 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyException.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyException.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Proxy\Factory; /** diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyFactory.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyFactory.php index 216e9bd17a9..4a4ea0a7899 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyFactory.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Proxy\Factory; use Doctrine\ORM\Proxy\Proxy; diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php index ff296092dfb..4937ed8d75b 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Proxy\Factory; use Doctrine\ORM\Mapping\ClassMetadata; diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyResolver.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyResolver.php index f47ce8983ac..d3998c08a95 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyResolver.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyResolver.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Proxy\Factory; /** @@ -45,4 +45,4 @@ public function resolveProxyClassName(string $className) : string; * @return string */ public function resolveProxyClassPath(string $className) : string; -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php b/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php index a300a437739..2c6f34127e5 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Proxy\Factory; use Doctrine\ORM\Configuration\ProxyConfiguration; diff --git a/lib/Doctrine/ORM/Proxy/Factory/Strategy/ConditionalFileWriterProxyGeneratorStrategy.php b/lib/Doctrine/ORM/Proxy/Factory/Strategy/ConditionalFileWriterProxyGeneratorStrategy.php index 7e869362d1e..c44aa9865dd 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/Strategy/ConditionalFileWriterProxyGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Proxy/Factory/Strategy/ConditionalFileWriterProxyGeneratorStrategy.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Proxy\Factory\Strategy; use Doctrine\ORM\Proxy\Factory\ProxyDefinition; diff --git a/lib/Doctrine/ORM/Proxy/Factory/Strategy/EvaluatingProxyGeneratorStrategy.php b/lib/Doctrine/ORM/Proxy/Factory/Strategy/EvaluatingProxyGeneratorStrategy.php index b06ff6b0762..b4da000c7fa 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/Strategy/EvaluatingProxyGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Proxy/Factory/Strategy/EvaluatingProxyGeneratorStrategy.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Proxy\Factory\Strategy; use Doctrine\ORM\Proxy\Factory\ProxyDefinition; diff --git a/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileReaderProxyGeneratorStrategy.php b/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileReaderProxyGeneratorStrategy.php index c36e56d0539..b7afd727675 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileReaderProxyGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileReaderProxyGeneratorStrategy.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Proxy\Factory\Strategy; use Doctrine\ORM\Proxy\Factory\ProxyDefinition; diff --git a/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileWriterProxyGeneratorStrategy.php b/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileWriterProxyGeneratorStrategy.php index a1d95270771..8f2893d728f 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileWriterProxyGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileWriterProxyGeneratorStrategy.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Proxy\Factory\Strategy; use Doctrine\ORM\Proxy\Factory\ProxyDefinition; diff --git a/lib/Doctrine/ORM/Proxy/Factory/Strategy/ProxyGeneratorStrategy.php b/lib/Doctrine/ORM/Proxy/Factory/Strategy/ProxyGeneratorStrategy.php index bceabb052f1..9b91e05617f 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/Strategy/ProxyGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Proxy/Factory/Strategy/ProxyGeneratorStrategy.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Proxy\Factory\Strategy; use Doctrine\ORM\Proxy\Factory\ProxyDefinition; diff --git a/lib/Doctrine/ORM/Proxy/Proxy.php b/lib/Doctrine/ORM/Proxy/Proxy.php index cb4623d44fc..50e2513054a 100644 --- a/lib/Doctrine/ORM/Proxy/Proxy.php +++ b/lib/Doctrine/ORM/Proxy/Proxy.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Proxy; use Doctrine\ORM\Proxy\Factory\ProxyDefinition; diff --git a/lib/Doctrine/ORM/Query.php b/lib/Doctrine/ORM/Query.php index 9c00ee7733f..0f60e380b94 100644 --- a/lib/Doctrine/ORM/Query.php +++ b/lib/Doctrine/ORM/Query.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; use Doctrine\DBAL\LockMode; diff --git a/lib/Doctrine/ORM/Query/AST/ASTException.php b/lib/Doctrine/ORM/Query/AST/ASTException.php index b8f931b45ee..6ce8ef72f69 100644 --- a/lib/Doctrine/ORM/Query/AST/ASTException.php +++ b/lib/Doctrine/ORM/Query/AST/ASTException.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; use Doctrine\ORM\Query\QueryException; diff --git a/lib/Doctrine/ORM/Query/AST/AggregateExpression.php b/lib/Doctrine/ORM/Query/AST/AggregateExpression.php index 0966d902b84..4b8ffc260a8 100644 --- a/lib/Doctrine/ORM/Query/AST/AggregateExpression.php +++ b/lib/Doctrine/ORM/Query/AST/AggregateExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/ArithmeticExpression.php b/lib/Doctrine/ORM/Query/AST/ArithmeticExpression.php index b586cba3084..89387b90294 100644 --- a/lib/Doctrine/ORM/Query/AST/ArithmeticExpression.php +++ b/lib/Doctrine/ORM/Query/AST/ArithmeticExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/ArithmeticFactor.php b/lib/Doctrine/ORM/Query/AST/ArithmeticFactor.php index 3120466fd86..3151f6e2eb9 100644 --- a/lib/Doctrine/ORM/Query/AST/ArithmeticFactor.php +++ b/lib/Doctrine/ORM/Query/AST/ArithmeticFactor.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/ArithmeticTerm.php b/lib/Doctrine/ORM/Query/AST/ArithmeticTerm.php index e08ae7fbb83..c39f16b1741 100644 --- a/lib/Doctrine/ORM/Query/AST/ArithmeticTerm.php +++ b/lib/Doctrine/ORM/Query/AST/ArithmeticTerm.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/BetweenExpression.php b/lib/Doctrine/ORM/Query/AST/BetweenExpression.php index 1e31fd1a5a6..7dd6b84a63f 100644 --- a/lib/Doctrine/ORM/Query/AST/BetweenExpression.php +++ b/lib/Doctrine/ORM/Query/AST/BetweenExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/CoalesceExpression.php b/lib/Doctrine/ORM/Query/AST/CoalesceExpression.php index 9e3b4c526fb..5e41e66d94e 100644 --- a/lib/Doctrine/ORM/Query/AST/CoalesceExpression.php +++ b/lib/Doctrine/ORM/Query/AST/CoalesceExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/CollectionMemberExpression.php b/lib/Doctrine/ORM/Query/AST/CollectionMemberExpression.php index 70989a26784..43f27462276 100644 --- a/lib/Doctrine/ORM/Query/AST/CollectionMemberExpression.php +++ b/lib/Doctrine/ORM/Query/AST/CollectionMemberExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/ComparisonExpression.php b/lib/Doctrine/ORM/Query/AST/ComparisonExpression.php index ad4d2225736..ec8dd5a9f01 100644 --- a/lib/Doctrine/ORM/Query/AST/ComparisonExpression.php +++ b/lib/Doctrine/ORM/Query/AST/ComparisonExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/ConditionalExpression.php b/lib/Doctrine/ORM/Query/AST/ConditionalExpression.php index bf823629b69..09689e3465e 100644 --- a/lib/Doctrine/ORM/Query/AST/ConditionalExpression.php +++ b/lib/Doctrine/ORM/Query/AST/ConditionalExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/ConditionalFactor.php b/lib/Doctrine/ORM/Query/AST/ConditionalFactor.php index 7c89faa420b..1cfbb7b82e3 100644 --- a/lib/Doctrine/ORM/Query/AST/ConditionalFactor.php +++ b/lib/Doctrine/ORM/Query/AST/ConditionalFactor.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/ConditionalPrimary.php b/lib/Doctrine/ORM/Query/AST/ConditionalPrimary.php index 1eed41dce67..b8591fa4119 100644 --- a/lib/Doctrine/ORM/Query/AST/ConditionalPrimary.php +++ b/lib/Doctrine/ORM/Query/AST/ConditionalPrimary.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/ConditionalTerm.php b/lib/Doctrine/ORM/Query/AST/ConditionalTerm.php index 7122c9c6822..a5e92fd78bc 100644 --- a/lib/Doctrine/ORM/Query/AST/ConditionalTerm.php +++ b/lib/Doctrine/ORM/Query/AST/ConditionalTerm.php @@ -16,6 +16,8 @@ * and is licensed under the MIT license. For more information, see * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/DeleteClause.php b/lib/Doctrine/ORM/Query/AST/DeleteClause.php index 8ca35c6772f..71ce05a624d 100644 --- a/lib/Doctrine/ORM/Query/AST/DeleteClause.php +++ b/lib/Doctrine/ORM/Query/AST/DeleteClause.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/DeleteStatement.php b/lib/Doctrine/ORM/Query/AST/DeleteStatement.php index da6859b8678..d39435cb8b7 100644 --- a/lib/Doctrine/ORM/Query/AST/DeleteStatement.php +++ b/lib/Doctrine/ORM/Query/AST/DeleteStatement.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/EmptyCollectionComparisonExpression.php b/lib/Doctrine/ORM/Query/AST/EmptyCollectionComparisonExpression.php index bd978af04be..5b0d29ce763 100644 --- a/lib/Doctrine/ORM/Query/AST/EmptyCollectionComparisonExpression.php +++ b/lib/Doctrine/ORM/Query/AST/EmptyCollectionComparisonExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/ExistsExpression.php b/lib/Doctrine/ORM/Query/AST/ExistsExpression.php index c53a10775e1..57739b410cb 100644 --- a/lib/Doctrine/ORM/Query/AST/ExistsExpression.php +++ b/lib/Doctrine/ORM/Query/AST/ExistsExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/FromClause.php b/lib/Doctrine/ORM/Query/AST/FromClause.php index fdb61ca373a..9db85588961 100644 --- a/lib/Doctrine/ORM/Query/AST/FromClause.php +++ b/lib/Doctrine/ORM/Query/AST/FromClause.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/Functions/AbsFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/AbsFunction.php index 4c614355844..17dfbefbc74 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/AbsFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/AbsFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Lexer; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/AvgFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/AvgFunction.php index 6cb8d92b6b2..1b487df1d3c 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/AvgFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/AvgFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Parser; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/BitAndFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/BitAndFunction.php index 469a4b0a24e..9e735f64517 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/BitAndFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/BitAndFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Lexer; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/BitOrFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/BitOrFunction.php index d3a3efc8324..1247dd902e9 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/BitOrFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/BitOrFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Lexer; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/ConcatFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/ConcatFunction.php index b7c5ae13f82..3bc2d5b6311 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/ConcatFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/ConcatFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Lexer; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/CountFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/CountFunction.php index f232cf43f65..21fbdd6af48 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/CountFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/CountFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Parser; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/CurrentDateFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/CurrentDateFunction.php index 565b87581b3..957a339f3ee 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/CurrentDateFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/CurrentDateFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Lexer; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/CurrentTimeFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/CurrentTimeFunction.php index ec9ceb757f5..37d3a09dab6 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/CurrentTimeFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/CurrentTimeFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Lexer; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/CurrentTimestampFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/CurrentTimestampFunction.php index 4203072128d..409af03bcb9 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/CurrentTimestampFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/CurrentTimestampFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Lexer; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/DateAddFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/DateAddFunction.php index 859426f0801..c0fda7b8df2 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/DateAddFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/DateAddFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Lexer; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/DateDiffFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/DateDiffFunction.php index 53724825f4e..6b83e1f913e 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/DateDiffFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/DateDiffFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Lexer; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/DateSubFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/DateSubFunction.php index a6415a2863e..86aba043a7b 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/DateSubFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/DateSubFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\SqlWalker; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/FunctionNode.php b/lib/Doctrine/ORM/Query/AST/Functions/FunctionNode.php index 2f33c9da34b..e02b91bbcb5 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/FunctionNode.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/FunctionNode.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\AST\Node; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php index 55b35220aaf..6e37578ac88 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Lexer; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/LengthFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/LengthFunction.php index 3d2b1a6c92a..42e2911b6ce 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/LengthFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/LengthFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Lexer; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/LocateFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/LocateFunction.php index 473aa34eec9..a790a25a609 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/LocateFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/LocateFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Lexer; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/LowerFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/LowerFunction.php index 5f0fb950018..be42f7badfe 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/LowerFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/LowerFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Lexer; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/MaxFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/MaxFunction.php index eba9b86393a..5071afd8db4 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/MaxFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/MaxFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Parser; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/MinFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/MinFunction.php index e1c08691323..a6f1d4c7ac2 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/MinFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/MinFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Parser; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/ModFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/ModFunction.php index 61bc9a79ed9..8c58cf1d216 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/ModFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/ModFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Lexer; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php index 8de103f7c50..c7102595278 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/SqrtFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/SqrtFunction.php index 08155d25b56..bcbb87a2b66 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/SqrtFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/SqrtFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Lexer; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/SubstringFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/SubstringFunction.php index a6a80f8112b..e46104d9505 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/SubstringFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/SubstringFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Lexer; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/SumFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/SumFunction.php index c9fcf7b04e7..13ba0b53a78 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/SumFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/SumFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Parser; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/TrimFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/TrimFunction.php index 9e748c308f8..ffc006e374d 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/TrimFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/TrimFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Lexer; diff --git a/lib/Doctrine/ORM/Query/AST/Functions/UpperFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/UpperFunction.php index 28e0f162714..298eef6f2a0 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/UpperFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/UpperFunction.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST\Functions; use Doctrine\ORM\Query\Lexer; diff --git a/lib/Doctrine/ORM/Query/AST/GeneralCaseExpression.php b/lib/Doctrine/ORM/Query/AST/GeneralCaseExpression.php index e7937d60d2e..08d2629df9e 100644 --- a/lib/Doctrine/ORM/Query/AST/GeneralCaseExpression.php +++ b/lib/Doctrine/ORM/Query/AST/GeneralCaseExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/GroupByClause.php b/lib/Doctrine/ORM/Query/AST/GroupByClause.php index 687512a4c73..830b6dc7386 100644 --- a/lib/Doctrine/ORM/Query/AST/GroupByClause.php +++ b/lib/Doctrine/ORM/Query/AST/GroupByClause.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/HavingClause.php b/lib/Doctrine/ORM/Query/AST/HavingClause.php index 1d369fff66a..fbdb934249c 100644 --- a/lib/Doctrine/ORM/Query/AST/HavingClause.php +++ b/lib/Doctrine/ORM/Query/AST/HavingClause.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/IdentificationVariableDeclaration.php b/lib/Doctrine/ORM/Query/AST/IdentificationVariableDeclaration.php index 2e2032ca341..e09ca32b133 100644 --- a/lib/Doctrine/ORM/Query/AST/IdentificationVariableDeclaration.php +++ b/lib/Doctrine/ORM/Query/AST/IdentificationVariableDeclaration.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/InExpression.php b/lib/Doctrine/ORM/Query/AST/InExpression.php index 64ef1340573..0ffa735fd36 100644 --- a/lib/Doctrine/ORM/Query/AST/InExpression.php +++ b/lib/Doctrine/ORM/Query/AST/InExpression.php @@ -16,6 +16,8 @@ * and is licensed under the MIT license. For more information, see * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/IndexBy.php b/lib/Doctrine/ORM/Query/AST/IndexBy.php index c7874b70a35..b0540e16e78 100644 --- a/lib/Doctrine/ORM/Query/AST/IndexBy.php +++ b/lib/Doctrine/ORM/Query/AST/IndexBy.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/InputParameter.php b/lib/Doctrine/ORM/Query/AST/InputParameter.php index 4da550f9b4f..9832e670e0b 100644 --- a/lib/Doctrine/ORM/Query/AST/InputParameter.php +++ b/lib/Doctrine/ORM/Query/AST/InputParameter.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/InstanceOfExpression.php b/lib/Doctrine/ORM/Query/AST/InstanceOfExpression.php index c1fd65b8e6b..87480755941 100644 --- a/lib/Doctrine/ORM/Query/AST/InstanceOfExpression.php +++ b/lib/Doctrine/ORM/Query/AST/InstanceOfExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/Join.php b/lib/Doctrine/ORM/Query/AST/Join.php index 5c203aa0b47..07b5cf946e0 100644 --- a/lib/Doctrine/ORM/Query/AST/Join.php +++ b/lib/Doctrine/ORM/Query/AST/Join.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/JoinAssociationDeclaration.php b/lib/Doctrine/ORM/Query/AST/JoinAssociationDeclaration.php index a33900a6d65..689fe5777d7 100644 --- a/lib/Doctrine/ORM/Query/AST/JoinAssociationDeclaration.php +++ b/lib/Doctrine/ORM/Query/AST/JoinAssociationDeclaration.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/JoinAssociationPathExpression.php b/lib/Doctrine/ORM/Query/AST/JoinAssociationPathExpression.php index 946bbb15b7d..2d5a28095d0 100644 --- a/lib/Doctrine/ORM/Query/AST/JoinAssociationPathExpression.php +++ b/lib/Doctrine/ORM/Query/AST/JoinAssociationPathExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/JoinClassPathExpression.php b/lib/Doctrine/ORM/Query/AST/JoinClassPathExpression.php index 7e374149f2d..a336aea2864 100644 --- a/lib/Doctrine/ORM/Query/AST/JoinClassPathExpression.php +++ b/lib/Doctrine/ORM/Query/AST/JoinClassPathExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/JoinVariableDeclaration.php b/lib/Doctrine/ORM/Query/AST/JoinVariableDeclaration.php index 89aa83ad8cc..4f70f701daa 100644 --- a/lib/Doctrine/ORM/Query/AST/JoinVariableDeclaration.php +++ b/lib/Doctrine/ORM/Query/AST/JoinVariableDeclaration.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/LikeExpression.php b/lib/Doctrine/ORM/Query/AST/LikeExpression.php index e320c51c882..176e6a5badf 100644 --- a/lib/Doctrine/ORM/Query/AST/LikeExpression.php +++ b/lib/Doctrine/ORM/Query/AST/LikeExpression.php @@ -16,6 +16,8 @@ * and is licensed under the MIT license. For more information, see * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/Literal.php b/lib/Doctrine/ORM/Query/AST/Literal.php index 43d71add08f..2106a9743ef 100644 --- a/lib/Doctrine/ORM/Query/AST/Literal.php +++ b/lib/Doctrine/ORM/Query/AST/Literal.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; class Literal extends Node diff --git a/lib/Doctrine/ORM/Query/AST/NewObjectExpression.php b/lib/Doctrine/ORM/Query/AST/NewObjectExpression.php index ec011ce29f0..b8c1ad83cdd 100644 --- a/lib/Doctrine/ORM/Query/AST/NewObjectExpression.php +++ b/lib/Doctrine/ORM/Query/AST/NewObjectExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/Node.php b/lib/Doctrine/ORM/Query/AST/Node.php index a257dc2d79c..0594f328433 100644 --- a/lib/Doctrine/ORM/Query/AST/Node.php +++ b/lib/Doctrine/ORM/Query/AST/Node.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/NullComparisonExpression.php b/lib/Doctrine/ORM/Query/AST/NullComparisonExpression.php index 84a199784cc..51e7cf81fc8 100644 --- a/lib/Doctrine/ORM/Query/AST/NullComparisonExpression.php +++ b/lib/Doctrine/ORM/Query/AST/NullComparisonExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/NullIfExpression.php b/lib/Doctrine/ORM/Query/AST/NullIfExpression.php index e33bc72b15e..c2da9713a12 100644 --- a/lib/Doctrine/ORM/Query/AST/NullIfExpression.php +++ b/lib/Doctrine/ORM/Query/AST/NullIfExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/OrderByClause.php b/lib/Doctrine/ORM/Query/AST/OrderByClause.php index e0e30e9d997..8fcb1e14603 100644 --- a/lib/Doctrine/ORM/Query/AST/OrderByClause.php +++ b/lib/Doctrine/ORM/Query/AST/OrderByClause.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/OrderByItem.php b/lib/Doctrine/ORM/Query/AST/OrderByItem.php index bf3288a7b9a..27823600ddf 100644 --- a/lib/Doctrine/ORM/Query/AST/OrderByItem.php +++ b/lib/Doctrine/ORM/Query/AST/OrderByItem.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/ParenthesisExpression.php b/lib/Doctrine/ORM/Query/AST/ParenthesisExpression.php index f16db0eb74d..1d2d3a8624c 100644 --- a/lib/Doctrine/ORM/Query/AST/ParenthesisExpression.php +++ b/lib/Doctrine/ORM/Query/AST/ParenthesisExpression.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** @@ -48,4 +50,4 @@ public function dispatch($walker) { return $walker->walkParenthesisExpression($this); } -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Query/AST/PartialObjectExpression.php b/lib/Doctrine/ORM/Query/AST/PartialObjectExpression.php index e4ffe79b2aa..32d5e1a8233 100644 --- a/lib/Doctrine/ORM/Query/AST/PartialObjectExpression.php +++ b/lib/Doctrine/ORM/Query/AST/PartialObjectExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; class PartialObjectExpression extends Node diff --git a/lib/Doctrine/ORM/Query/AST/PathExpression.php b/lib/Doctrine/ORM/Query/AST/PathExpression.php index 37674b6fd47..fd859b5376d 100644 --- a/lib/Doctrine/ORM/Query/AST/PathExpression.php +++ b/lib/Doctrine/ORM/Query/AST/PathExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/QuantifiedExpression.php b/lib/Doctrine/ORM/Query/AST/QuantifiedExpression.php index 15be9523471..ec0d31b0163 100644 --- a/lib/Doctrine/ORM/Query/AST/QuantifiedExpression.php +++ b/lib/Doctrine/ORM/Query/AST/QuantifiedExpression.php @@ -16,6 +16,8 @@ * and is licensed under the MIT license. For more information, see * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/RangeVariableDeclaration.php b/lib/Doctrine/ORM/Query/AST/RangeVariableDeclaration.php index 0ca5274d19e..24da3f95603 100644 --- a/lib/Doctrine/ORM/Query/AST/RangeVariableDeclaration.php +++ b/lib/Doctrine/ORM/Query/AST/RangeVariableDeclaration.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/SelectClause.php b/lib/Doctrine/ORM/Query/AST/SelectClause.php index f8e6f472a1e..bf522d279cb 100644 --- a/lib/Doctrine/ORM/Query/AST/SelectClause.php +++ b/lib/Doctrine/ORM/Query/AST/SelectClause.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/SelectExpression.php b/lib/Doctrine/ORM/Query/AST/SelectExpression.php index 4187013994a..fb6791bd25d 100644 --- a/lib/Doctrine/ORM/Query/AST/SelectExpression.php +++ b/lib/Doctrine/ORM/Query/AST/SelectExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/SelectStatement.php b/lib/Doctrine/ORM/Query/AST/SelectStatement.php index d84f7258a9f..1bce076f3f5 100644 --- a/lib/Doctrine/ORM/Query/AST/SelectStatement.php +++ b/lib/Doctrine/ORM/Query/AST/SelectStatement.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/SimpleArithmeticExpression.php b/lib/Doctrine/ORM/Query/AST/SimpleArithmeticExpression.php index 80ecd15ce57..9abf137c240 100644 --- a/lib/Doctrine/ORM/Query/AST/SimpleArithmeticExpression.php +++ b/lib/Doctrine/ORM/Query/AST/SimpleArithmeticExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/SimpleCaseExpression.php b/lib/Doctrine/ORM/Query/AST/SimpleCaseExpression.php index 67e354e5569..a4c5d589771 100644 --- a/lib/Doctrine/ORM/Query/AST/SimpleCaseExpression.php +++ b/lib/Doctrine/ORM/Query/AST/SimpleCaseExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/SimpleSelectClause.php b/lib/Doctrine/ORM/Query/AST/SimpleSelectClause.php index 92361da45b7..8ef2743a003 100644 --- a/lib/Doctrine/ORM/Query/AST/SimpleSelectClause.php +++ b/lib/Doctrine/ORM/Query/AST/SimpleSelectClause.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/SimpleSelectExpression.php b/lib/Doctrine/ORM/Query/AST/SimpleSelectExpression.php index e556835ed61..164e75e135e 100644 --- a/lib/Doctrine/ORM/Query/AST/SimpleSelectExpression.php +++ b/lib/Doctrine/ORM/Query/AST/SimpleSelectExpression.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/SimpleWhenClause.php b/lib/Doctrine/ORM/Query/AST/SimpleWhenClause.php index 4f60881d42a..1e818827da6 100644 --- a/lib/Doctrine/ORM/Query/AST/SimpleWhenClause.php +++ b/lib/Doctrine/ORM/Query/AST/SimpleWhenClause.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/Subselect.php b/lib/Doctrine/ORM/Query/AST/Subselect.php index ce08266f083..03ffd93ffaa 100644 --- a/lib/Doctrine/ORM/Query/AST/Subselect.php +++ b/lib/Doctrine/ORM/Query/AST/Subselect.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/SubselectFromClause.php b/lib/Doctrine/ORM/Query/AST/SubselectFromClause.php index 9704061e8cd..e9d78d53379 100644 --- a/lib/Doctrine/ORM/Query/AST/SubselectFromClause.php +++ b/lib/Doctrine/ORM/Query/AST/SubselectFromClause.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/SubselectIdentificationVariableDeclaration.php b/lib/Doctrine/ORM/Query/AST/SubselectIdentificationVariableDeclaration.php index 866f112226b..a33ca1bb4de 100644 --- a/lib/Doctrine/ORM/Query/AST/SubselectIdentificationVariableDeclaration.php +++ b/lib/Doctrine/ORM/Query/AST/SubselectIdentificationVariableDeclaration.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/UpdateClause.php b/lib/Doctrine/ORM/Query/AST/UpdateClause.php index 23c722a62b2..8699ea99a9b 100644 --- a/lib/Doctrine/ORM/Query/AST/UpdateClause.php +++ b/lib/Doctrine/ORM/Query/AST/UpdateClause.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/UpdateItem.php b/lib/Doctrine/ORM/Query/AST/UpdateItem.php index f1a288cae21..d74893a58e7 100644 --- a/lib/Doctrine/ORM/Query/AST/UpdateItem.php +++ b/lib/Doctrine/ORM/Query/AST/UpdateItem.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/UpdateStatement.php b/lib/Doctrine/ORM/Query/AST/UpdateStatement.php index c578efef487..52e3305bc5f 100644 --- a/lib/Doctrine/ORM/Query/AST/UpdateStatement.php +++ b/lib/Doctrine/ORM/Query/AST/UpdateStatement.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/WhenClause.php b/lib/Doctrine/ORM/Query/AST/WhenClause.php index 01c0330f48c..20bf562e805 100644 --- a/lib/Doctrine/ORM/Query/AST/WhenClause.php +++ b/lib/Doctrine/ORM/Query/AST/WhenClause.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/AST/WhereClause.php b/lib/Doctrine/ORM/Query/AST/WhereClause.php index e6597752fff..22151e96609 100644 --- a/lib/Doctrine/ORM/Query/AST/WhereClause.php +++ b/lib/Doctrine/ORM/Query/AST/WhereClause.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\AST; /** diff --git a/lib/Doctrine/ORM/Query/Exec/AbstractSqlExecutor.php b/lib/Doctrine/ORM/Query/Exec/AbstractSqlExecutor.php index ec932057fa4..a12155691d9 100644 --- a/lib/Doctrine/ORM/Query/Exec/AbstractSqlExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/AbstractSqlExecutor.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\Exec; use Doctrine\DBAL\Connection; diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php index ba4a82caafc..4a69d2c2218 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\Exec; use Doctrine\DBAL\Connection; diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php index ec5e5fb8d46..fb0aae3aba6 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\Exec; use Doctrine\DBAL\Connection; diff --git a/lib/Doctrine/ORM/Query/Exec/SingleSelectExecutor.php b/lib/Doctrine/ORM/Query/Exec/SingleSelectExecutor.php index 1fb28d2b0bf..6cd4aa3a1b4 100644 --- a/lib/Doctrine/ORM/Query/Exec/SingleSelectExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/SingleSelectExecutor.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\Exec; use Doctrine\DBAL\Connection; diff --git a/lib/Doctrine/ORM/Query/Exec/SingleTableDeleteUpdateExecutor.php b/lib/Doctrine/ORM/Query/Exec/SingleTableDeleteUpdateExecutor.php index 0ea373b27ae..1ee7b282ca5 100644 --- a/lib/Doctrine/ORM/Query/Exec/SingleTableDeleteUpdateExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/SingleTableDeleteUpdateExecutor.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\Exec; use Doctrine\DBAL\Connection; diff --git a/lib/Doctrine/ORM/Query/Expr.php b/lib/Doctrine/ORM/Query/Expr.php index f60859456b5..326ce64a397 100644 --- a/lib/Doctrine/ORM/Query/Expr.php +++ b/lib/Doctrine/ORM/Query/Expr.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query; /** diff --git a/lib/Doctrine/ORM/Query/Expr/Andx.php b/lib/Doctrine/ORM/Query/Expr/Andx.php index dd91916a671..8ff2a5a772a 100644 --- a/lib/Doctrine/ORM/Query/Expr/Andx.php +++ b/lib/Doctrine/ORM/Query/Expr/Andx.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\Expr; /** diff --git a/lib/Doctrine/ORM/Query/Expr/Base.php b/lib/Doctrine/ORM/Query/Expr/Base.php index d1303138360..be45d8b92d5 100644 --- a/lib/Doctrine/ORM/Query/Expr/Base.php +++ b/lib/Doctrine/ORM/Query/Expr/Base.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\Expr; /** diff --git a/lib/Doctrine/ORM/Query/Expr/Comparison.php b/lib/Doctrine/ORM/Query/Expr/Comparison.php index 4103dcea9eb..d76846cc8fc 100644 --- a/lib/Doctrine/ORM/Query/Expr/Comparison.php +++ b/lib/Doctrine/ORM/Query/Expr/Comparison.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\Expr; /** diff --git a/lib/Doctrine/ORM/Query/Expr/Composite.php b/lib/Doctrine/ORM/Query/Expr/Composite.php index 6b8a04fa5cf..b8c61d645e0 100644 --- a/lib/Doctrine/ORM/Query/Expr/Composite.php +++ b/lib/Doctrine/ORM/Query/Expr/Composite.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\Expr; /** diff --git a/lib/Doctrine/ORM/Query/Expr/From.php b/lib/Doctrine/ORM/Query/Expr/From.php index 9dcce9bbe27..e295f2a588e 100644 --- a/lib/Doctrine/ORM/Query/Expr/From.php +++ b/lib/Doctrine/ORM/Query/Expr/From.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\Expr; /** diff --git a/lib/Doctrine/ORM/Query/Expr/Func.php b/lib/Doctrine/ORM/Query/Expr/Func.php index b4ed07cd3b2..8229a23414d 100644 --- a/lib/Doctrine/ORM/Query/Expr/Func.php +++ b/lib/Doctrine/ORM/Query/Expr/Func.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\Expr; /** diff --git a/lib/Doctrine/ORM/Query/Expr/GroupBy.php b/lib/Doctrine/ORM/Query/Expr/GroupBy.php index efa3582bdb2..3a8377e47ee 100644 --- a/lib/Doctrine/ORM/Query/Expr/GroupBy.php +++ b/lib/Doctrine/ORM/Query/Expr/GroupBy.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\Expr; /** diff --git a/lib/Doctrine/ORM/Query/Expr/Join.php b/lib/Doctrine/ORM/Query/Expr/Join.php index 7a59e247ae0..4a4e5845736 100644 --- a/lib/Doctrine/ORM/Query/Expr/Join.php +++ b/lib/Doctrine/ORM/Query/Expr/Join.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\Expr; /** diff --git a/lib/Doctrine/ORM/Query/Expr/Literal.php b/lib/Doctrine/ORM/Query/Expr/Literal.php index 98cee79d7ed..905c1b59fcc 100644 --- a/lib/Doctrine/ORM/Query/Expr/Literal.php +++ b/lib/Doctrine/ORM/Query/Expr/Literal.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\Expr; /** diff --git a/lib/Doctrine/ORM/Query/Expr/Math.php b/lib/Doctrine/ORM/Query/Expr/Math.php index 9bf800de8fe..82f2d8e57b6 100644 --- a/lib/Doctrine/ORM/Query/Expr/Math.php +++ b/lib/Doctrine/ORM/Query/Expr/Math.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\Expr; /** diff --git a/lib/Doctrine/ORM/Query/Expr/OrderBy.php b/lib/Doctrine/ORM/Query/Expr/OrderBy.php index a5f8ef95765..65336694b3e 100644 --- a/lib/Doctrine/ORM/Query/Expr/OrderBy.php +++ b/lib/Doctrine/ORM/Query/Expr/OrderBy.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\Expr; /** diff --git a/lib/Doctrine/ORM/Query/Expr/Orx.php b/lib/Doctrine/ORM/Query/Expr/Orx.php index d36abfa922c..dc0388026aa 100644 --- a/lib/Doctrine/ORM/Query/Expr/Orx.php +++ b/lib/Doctrine/ORM/Query/Expr/Orx.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\Expr; /** diff --git a/lib/Doctrine/ORM/Query/Expr/Select.php b/lib/Doctrine/ORM/Query/Expr/Select.php index 8ab5153f1f6..f990c8ed8be 100644 --- a/lib/Doctrine/ORM/Query/Expr/Select.php +++ b/lib/Doctrine/ORM/Query/Expr/Select.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\Expr; /** diff --git a/lib/Doctrine/ORM/Query/Filter/SQLFilter.php b/lib/Doctrine/ORM/Query/Filter/SQLFilter.php index c48edd43faf..3ce9480e85b 100644 --- a/lib/Doctrine/ORM/Query/Filter/SQLFilter.php +++ b/lib/Doctrine/ORM/Query/Filter/SQLFilter.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query\Filter; use Doctrine\ORM\EntityManagerInterface; diff --git a/lib/Doctrine/ORM/Query/FilterCollection.php b/lib/Doctrine/ORM/Query/FilterCollection.php index ca7f1ac3289..a340f2b7724 100644 --- a/lib/Doctrine/ORM/Query/FilterCollection.php +++ b/lib/Doctrine/ORM/Query/FilterCollection.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query; use Doctrine\ORM\EntityManagerInterface; diff --git a/lib/Doctrine/ORM/Query/Lexer.php b/lib/Doctrine/ORM/Query/Lexer.php index b889ecfaea6..dab0f3cf263 100644 --- a/lib/Doctrine/ORM/Query/Lexer.php +++ b/lib/Doctrine/ORM/Query/Lexer.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query; /** diff --git a/lib/Doctrine/ORM/Query/Parameter.php b/lib/Doctrine/ORM/Query/Parameter.php index 39e2a7a4f21..ab300525550 100644 --- a/lib/Doctrine/ORM/Query/Parameter.php +++ b/lib/Doctrine/ORM/Query/Parameter.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query; /** diff --git a/lib/Doctrine/ORM/Query/ParameterTypeInferer.php b/lib/Doctrine/ORM/Query/ParameterTypeInferer.php index 597c7e2ea07..129ffc1d3f5 100644 --- a/lib/Doctrine/ORM/Query/ParameterTypeInferer.php +++ b/lib/Doctrine/ORM/Query/ParameterTypeInferer.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query; use Doctrine\DBAL\Connection; diff --git a/lib/Doctrine/ORM/Query/Parser.php b/lib/Doctrine/ORM/Query/Parser.php index f24941bf5f8..b7b4b3cda1c 100644 --- a/lib/Doctrine/ORM/Query/Parser.php +++ b/lib/Doctrine/ORM/Query/Parser.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query; use Doctrine\ORM\Mapping\AssociationMetadata; diff --git a/lib/Doctrine/ORM/Query/ParserResult.php b/lib/Doctrine/ORM/Query/ParserResult.php index 8795f4d982d..f9372d9a462 100644 --- a/lib/Doctrine/ORM/Query/ParserResult.php +++ b/lib/Doctrine/ORM/Query/ParserResult.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query; /** diff --git a/lib/Doctrine/ORM/Query/Printer.php b/lib/Doctrine/ORM/Query/Printer.php index b004e1c767b..47f2dab824b 100644 --- a/lib/Doctrine/ORM/Query/Printer.php +++ b/lib/Doctrine/ORM/Query/Printer.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query; /** diff --git a/lib/Doctrine/ORM/Query/QueryException.php b/lib/Doctrine/ORM/Query/QueryException.php index 072bb8451ee..f4ba8216db0 100644 --- a/lib/Doctrine/ORM/Query/QueryException.php +++ b/lib/Doctrine/ORM/Query/QueryException.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query; use Doctrine\ORM\Mapping\AssociationMetadata; diff --git a/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php b/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php index 8b00d998eae..27d2320042f 100644 --- a/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php +++ b/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query; use Doctrine\Common\Collections\ArrayCollection; diff --git a/lib/Doctrine/ORM/Query/ResultSetMapping.php b/lib/Doctrine/ORM/Query/ResultSetMapping.php index 87f0918b2a7..7a39c6b5a1c 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMapping.php +++ b/lib/Doctrine/ORM/Query/ResultSetMapping.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\AssociationMetadata; diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index 48d71b6a29c..6c2f8e6105b 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query; use Doctrine\DBAL\Types\Type; diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 59d8dc343f9..c1157e12863 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query; use Doctrine\DBAL\LockMode; diff --git a/lib/Doctrine/ORM/Query/TreeWalker.php b/lib/Doctrine/ORM/Query/TreeWalker.php index 9ddd86b0432..89193473403 100644 --- a/lib/Doctrine/ORM/Query/TreeWalker.php +++ b/lib/Doctrine/ORM/Query/TreeWalker.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query; /** diff --git a/lib/Doctrine/ORM/Query/TreeWalkerAdapter.php b/lib/Doctrine/ORM/Query/TreeWalkerAdapter.php index 438e180dc77..f66589ddcea 100644 --- a/lib/Doctrine/ORM/Query/TreeWalkerAdapter.php +++ b/lib/Doctrine/ORM/Query/TreeWalkerAdapter.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query; /** diff --git a/lib/Doctrine/ORM/Query/TreeWalkerChain.php b/lib/Doctrine/ORM/Query/TreeWalkerChain.php index fe76fe654fc..d42b8f073c4 100644 --- a/lib/Doctrine/ORM/Query/TreeWalkerChain.php +++ b/lib/Doctrine/ORM/Query/TreeWalkerChain.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query; /** diff --git a/lib/Doctrine/ORM/Query/TreeWalkerChainIterator.php b/lib/Doctrine/ORM/Query/TreeWalkerChainIterator.php index e72e1d4dc4a..aeaa882db03 100644 --- a/lib/Doctrine/ORM/Query/TreeWalkerChainIterator.php +++ b/lib/Doctrine/ORM/Query/TreeWalkerChainIterator.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Query; /** diff --git a/lib/Doctrine/ORM/QueryBuilder.php b/lib/Doctrine/ORM/QueryBuilder.php index 6ba7882d5aa..5dfa0ee02d0 100644 --- a/lib/Doctrine/ORM/QueryBuilder.php +++ b/lib/Doctrine/ORM/QueryBuilder.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; use Doctrine\Common\Collections\ArrayCollection; diff --git a/lib/Doctrine/ORM/Reflection/ReflectionService.php b/lib/Doctrine/ORM/Reflection/ReflectionService.php index 31e277cb644..84aec0e1e28 100644 --- a/lib/Doctrine/ORM/Reflection/ReflectionService.php +++ b/lib/Doctrine/ORM/Reflection/ReflectionService.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Reflection; /** diff --git a/lib/Doctrine/ORM/Reflection/RuntimePublicReflectionProperty.php b/lib/Doctrine/ORM/Reflection/RuntimePublicReflectionProperty.php index 6d7edde36a2..dd3ac0b6845 100644 --- a/lib/Doctrine/ORM/Reflection/RuntimePublicReflectionProperty.php +++ b/lib/Doctrine/ORM/Reflection/RuntimePublicReflectionProperty.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Reflection; use Doctrine\ORM\Proxy\Proxy; diff --git a/lib/Doctrine/ORM/Reflection/RuntimeReflectionService.php b/lib/Doctrine/ORM/Reflection/RuntimeReflectionService.php index fd2dd3ad0e5..5ecedb0561d 100644 --- a/lib/Doctrine/ORM/Reflection/RuntimeReflectionService.php +++ b/lib/Doctrine/ORM/Reflection/RuntimeReflectionService.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Reflection; use Doctrine\Common\Persistence\Mapping\MappingException; diff --git a/lib/Doctrine/ORM/Reflection/StaticReflectionService.php b/lib/Doctrine/ORM/Reflection/StaticReflectionService.php index f15c0b514c3..b19f670100b 100644 --- a/lib/Doctrine/ORM/Reflection/StaticReflectionService.php +++ b/lib/Doctrine/ORM/Reflection/StaticReflectionService.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Reflection; /** diff --git a/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php b/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php index c8a08fbf292..98a197d5525 100644 --- a/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php +++ b/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Repository; use Doctrine\ORM\EntityManagerInterface; diff --git a/lib/Doctrine/ORM/Repository/RepositoryFactory.php b/lib/Doctrine/ORM/Repository/RepositoryFactory.php index f3af43ebe0d..80ccdb0a25f 100644 --- a/lib/Doctrine/ORM/Repository/RepositoryFactory.php +++ b/lib/Doctrine/ORM/Repository/RepositoryFactory.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Repository; use Doctrine\ORM\EntityManagerInterface; @@ -38,4 +40,4 @@ interface RepositoryFactory * @return \Doctrine\Common\Persistence\ObjectRepository */ public function getRepository(EntityManagerInterface $entityManager, $entityName); -} \ No newline at end of file +} diff --git a/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php b/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php index bb0e106b695..7ce3754eb68 100644 --- a/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Sequencing; use Doctrine\ORM\EntityManager; diff --git a/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php b/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php index b09038161d6..a284a645a01 100644 --- a/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Sequencing; use Doctrine\ORM\EntityManager; diff --git a/lib/Doctrine/ORM/Sequencing/Generator.php b/lib/Doctrine/ORM/Sequencing/Generator.php index 9cbb5321ec5..be173f67520 100644 --- a/lib/Doctrine/ORM/Sequencing/Generator.php +++ b/lib/Doctrine/ORM/Sequencing/Generator.php @@ -1,7 +1,5 @@ . */ +declare(strict_types=1); + namespace Doctrine\ORM\Sequencing; use Doctrine\ORM\EntityManager; diff --git a/lib/Doctrine/ORM/Sequencing/IdentityGenerator.php b/lib/Doctrine/ORM/Sequencing/IdentityGenerator.php index a5718d2fc45..d2661ed0460 100644 --- a/lib/Doctrine/ORM/Sequencing/IdentityGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/IdentityGenerator.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Sequencing; use Doctrine\ORM\EntityManager; diff --git a/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php b/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php index 086973ab34e..c513267c5ec 100644 --- a/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Sequencing; use Doctrine\ORM\EntityManager; diff --git a/lib/Doctrine/ORM/Sequencing/TableGenerator.php b/lib/Doctrine/ORM/Sequencing/TableGenerator.php index 1f61b3af05f..c28331f4165 100644 --- a/lib/Doctrine/ORM/Sequencing/TableGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/TableGenerator.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Sequencing; use Doctrine\ORM\EntityManager; diff --git a/lib/Doctrine/ORM/Sequencing/UuidGenerator.php b/lib/Doctrine/ORM/Sequencing/UuidGenerator.php index 46d6c3f6599..f374be4eef0 100644 --- a/lib/Doctrine/ORM/Sequencing/UuidGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/UuidGenerator.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Sequencing; use Doctrine\ORM\EntityManager; diff --git a/lib/Doctrine/ORM/Tools/AttachEntityListenersListener.php b/lib/Doctrine/ORM/Tools/AttachEntityListenersListener.php index dab12fe98d7..d2374568441 100644 --- a/lib/Doctrine/ORM/Tools/AttachEntityListenersListener.php +++ b/lib/Doctrine/ORM/Tools/AttachEntityListenersListener.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools; use Doctrine\ORM\Event\LoadClassMetadataEventArgs; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/CollectionRegionCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/CollectionRegionCommand.php index f12bfa5602d..daae2ee4dc8 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/CollectionRegionCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/CollectionRegionCommand.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console\Command\ClearCache; use Symfony\Component\Console\Command\Command; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/EntityRegionCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/EntityRegionCommand.php index 0258b7de223..a7fffb5f25e 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/EntityRegionCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/EntityRegionCommand.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console\Command\ClearCache; use Symfony\Component\Console\Command\Command; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/MetadataCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/MetadataCommand.php index 5bc0c859d63..7296ceaf710 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/MetadataCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/MetadataCommand.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console\Command\ClearCache; use Symfony\Component\Console\Command\Command; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/QueryCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/QueryCommand.php index 5828d077163..02fa5d066fb 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/QueryCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/QueryCommand.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console\Command\ClearCache; use Symfony\Component\Console\Command\Command; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/QueryRegionCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/QueryRegionCommand.php index 0637c7a4a07..6ffb568c39d 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/QueryRegionCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/QueryRegionCommand.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console\Command\ClearCache; use Symfony\Component\Console\Command\Command; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/ResultCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/ResultCommand.php index 55b89efa8eb..142d7d0d2be 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/ResultCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/ResultCommand.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console\Command\ClearCache; use Symfony\Component\Console\Command\Command; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ConvertMappingCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ConvertMappingCommand.php index a4d2da8d125..88eb9afd584 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ConvertMappingCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ConvertMappingCommand.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console\Command; use Symfony\Component\Console\Input\InputArgument; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/EnsureProductionSettingsCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/EnsureProductionSettingsCommand.php index 499565a018a..d07a5c6d945 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/EnsureProductionSettingsCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/EnsureProductionSettingsCommand.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console\Command; use Symfony\Component\Console\Command\Command; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/GenerateEntitiesCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/GenerateEntitiesCommand.php index bcf770fafbb..f6b93f58d2e 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/GenerateEntitiesCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/GenerateEntitiesCommand.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console\Command; use Symfony\Component\Console\Input\InputArgument; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/GenerateProxiesCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/GenerateProxiesCommand.php index 6096053a65d..636f44e5619 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/GenerateProxiesCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/GenerateProxiesCommand.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console\Command; use Symfony\Component\Console\Input\InputArgument; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/GenerateRepositoriesCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/GenerateRepositoriesCommand.php index 803bea9c4de..92331e7c896 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/GenerateRepositoriesCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/GenerateRepositoriesCommand.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console\Command; use Symfony\Component\Console\Input\InputArgument; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php index 560d18718b5..fd7d65229e8 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console\Command; use Doctrine\ORM\Mapping\MappingException; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index ab262d54a14..4df42a63c9a 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console\Command; use Doctrine\Common\Persistence\Mapping\MappingException; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/RunDqlCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/RunDqlCommand.php index b246850a9c1..09566ea1f3a 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/RunDqlCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/RunDqlCommand.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console\Command; use Symfony\Component\Console\Command\Command; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/AbstractCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/AbstractCommand.php index dc7e7ec7e86..1082fb16fda 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/AbstractCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/AbstractCommand.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console\Command\SchemaTool; use Symfony\Component\Console\Input\InputInterface; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/CreateCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/CreateCommand.php index 73fbcbabbc7..c61d9be876f 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/CreateCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/CreateCommand.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console\Command\SchemaTool; use Symfony\Component\Console\Input\InputOption; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/DropCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/DropCommand.php index e283470391e..fb7c25ad167 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/DropCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/DropCommand.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console\Command\SchemaTool; use Symfony\Component\Console\Input\InputOption; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/UpdateCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/UpdateCommand.php index 6ba2e41f8e9..952ee1951d5 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/UpdateCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/UpdateCommand.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console\Command\SchemaTool; use Symfony\Component\Console\Input\InputOption; diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ValidateSchemaCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ValidateSchemaCommand.php index 57b16fc1c46..6b5d10fd954 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ValidateSchemaCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ValidateSchemaCommand.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console\Command; use Symfony\Component\Console\Command\Command; diff --git a/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php b/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php index 52bb16908ef..3f2b8ce0966 100644 --- a/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php +++ b/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console; use Doctrine\DBAL\Tools\Console as DBALConsole; diff --git a/lib/Doctrine/ORM/Tools/Console/Helper/EntityManagerHelper.php b/lib/Doctrine/ORM/Tools/Console/Helper/EntityManagerHelper.php index 19d3129b902..76a1f8508d6 100644 --- a/lib/Doctrine/ORM/Tools/Console/Helper/EntityManagerHelper.php +++ b/lib/Doctrine/ORM/Tools/Console/Helper/EntityManagerHelper.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console\Helper; use Doctrine\ORM\EntityManagerInterface; diff --git a/lib/Doctrine/ORM/Tools/Console/MetadataFilter.php b/lib/Doctrine/ORM/Tools/Console/MetadataFilter.php index bb729c09067..e3593250c31 100644 --- a/lib/Doctrine/ORM/Tools/Console/MetadataFilter.php +++ b/lib/Doctrine/ORM/Tools/Console/MetadataFilter.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Console; /** diff --git a/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php b/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php index dabf687ae32..caf883481d3 100644 --- a/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php +++ b/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools; use Doctrine\Common\Persistence\Proxy; diff --git a/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php b/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php index d75bf94bc67..09eb59e73f8 100644 --- a/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools; use Doctrine\ORM\Reflection\StaticReflectionService; diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 328a0e3b6cf..7778f771e51 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools; use Doctrine\Common\Collections\ArrayCollection; diff --git a/lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php b/lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php index dbfcbc6d49f..71813f81b7d 100644 --- a/lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools; use Doctrine\ORM\EntityRepository; diff --git a/lib/Doctrine/ORM/Tools/Event/GenerateSchemaEventArgs.php b/lib/Doctrine/ORM/Tools/Event/GenerateSchemaEventArgs.php index ed03e32d9dc..19efda44758 100644 --- a/lib/Doctrine/ORM/Tools/Event/GenerateSchemaEventArgs.php +++ b/lib/Doctrine/ORM/Tools/Event/GenerateSchemaEventArgs.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Event; use Doctrine\Common\EventArgs; diff --git a/lib/Doctrine/ORM/Tools/Event/GenerateSchemaTableEventArgs.php b/lib/Doctrine/ORM/Tools/Event/GenerateSchemaTableEventArgs.php index e2c38f9c592..461f9b1c9ec 100644 --- a/lib/Doctrine/ORM/Tools/Event/GenerateSchemaTableEventArgs.php +++ b/lib/Doctrine/ORM/Tools/Event/GenerateSchemaTableEventArgs.php @@ -16,6 +16,8 @@ * and is licensed under the MIT license. For more information, see * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Event; use Doctrine\Common\EventArgs; diff --git a/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php b/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php index 34f1c55d654..c66adeef8a8 100644 --- a/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Export; /** diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php index 36b4e2c5cac..44f7b95cb59 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Export\Driver; use Doctrine\ORM\Mapping\ClassMetadata; diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php index a4efdd37024..11cb21143c3 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Export\Driver; use Doctrine\ORM\Mapping\ClassMetadata; diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 95f0113d0cd..ffbb7b8764b 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Export\Driver; use Doctrine\ORM\Mapping\AssociationMetadata; diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 71d63ae09e0..662a0aa1452 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Export\Driver; use Doctrine\ORM\Mapping\AssociationMetadata; diff --git a/lib/Doctrine/ORM/Tools/Export/ExportException.php b/lib/Doctrine/ORM/Tools/Export/ExportException.php index 853159f17de..e2e32bfd3d4 100644 --- a/lib/Doctrine/ORM/Tools/Export/ExportException.php +++ b/lib/Doctrine/ORM/Tools/Export/ExportException.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Export; use Doctrine\ORM\ORMException; diff --git a/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php index ecf8b206f70..72a5f6b9755 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Pagination; use Doctrine\ORM\Mapping\AssociationMetadata; diff --git a/lib/Doctrine/ORM/Tools/Pagination/CountWalker.php b/lib/Doctrine/ORM/Tools/Pagination/CountWalker.php index 90e443a8a57..c7e1db6c596 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/CountWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/CountWalker.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Pagination; use Doctrine\ORM\Mapping\AssociationMetadata; diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php index 313d2d0b12d..d678975fa38 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Pagination; use Doctrine\DBAL\Platforms\DB2Platform; diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php index eb11f5efd60..62fa999c784 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Pagination; use Doctrine\DBAL\Types\Type; diff --git a/lib/Doctrine/ORM/Tools/Pagination/Paginator.php b/lib/Doctrine/ORM/Tools/Pagination/Paginator.php index 1deac3f9d99..b64386eeb05 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/Paginator.php +++ b/lib/Doctrine/ORM/Tools/Pagination/Paginator.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Pagination; use Doctrine\DBAL\Types\Type; diff --git a/lib/Doctrine/ORM/Tools/Pagination/RowNumberOverFunction.php b/lib/Doctrine/ORM/Tools/Pagination/RowNumberOverFunction.php index a9d3e5d686e..05dd5691a38 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/RowNumberOverFunction.php +++ b/lib/Doctrine/ORM/Tools/Pagination/RowNumberOverFunction.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Pagination; use Doctrine\ORM\ORMException; diff --git a/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php b/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php index d21b39386d2..157523f2b46 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools\Pagination; use Doctrine\ORM\Mapping\AssociationMetadata; diff --git a/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php b/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php index 40efb078dc6..adf0dda21eb 100644 --- a/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php +++ b/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools; use Doctrine\ORM\Event\LoadClassMetadataEventArgs; diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 0a6d75657da..37dc11f33e2 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools; use Doctrine\DBAL\Schema\Column; diff --git a/lib/Doctrine/ORM/Tools/SchemaValidator.php b/lib/Doctrine/ORM/Tools/SchemaValidator.php index d0b91f73e62..cbc1dfbfc3f 100644 --- a/lib/Doctrine/ORM/Tools/SchemaValidator.php +++ b/lib/Doctrine/ORM/Tools/SchemaValidator.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools; use Doctrine\ORM\EntityManagerInterface; diff --git a/lib/Doctrine/ORM/Tools/Setup.php b/lib/Doctrine/ORM/Tools/Setup.php index 5a4dd990ac2..fa690b39e2f 100644 --- a/lib/Doctrine/ORM/Tools/Setup.php +++ b/lib/Doctrine/ORM/Tools/Setup.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools; use Doctrine\Common\Cache\ArrayCache; diff --git a/lib/Doctrine/ORM/Tools/ToolEvents.php b/lib/Doctrine/ORM/Tools/ToolEvents.php index aebb5d8f37d..fe99f591883 100644 --- a/lib/Doctrine/ORM/Tools/ToolEvents.php +++ b/lib/Doctrine/ORM/Tools/ToolEvents.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools; class ToolEvents diff --git a/lib/Doctrine/ORM/Tools/ToolsException.php b/lib/Doctrine/ORM/Tools/ToolsException.php index 8e4baab264c..3ffa7186d66 100644 --- a/lib/Doctrine/ORM/Tools/ToolsException.php +++ b/lib/Doctrine/ORM/Tools/ToolsException.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Tools; use Doctrine\ORM\ORMException; diff --git a/lib/Doctrine/ORM/TransactionRequiredException.php b/lib/Doctrine/ORM/TransactionRequiredException.php index c3417b67426..af87f60a90d 100644 --- a/lib/Doctrine/ORM/TransactionRequiredException.php +++ b/lib/Doctrine/ORM/TransactionRequiredException.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; /** diff --git a/lib/Doctrine/ORM/UnexpectedResultException.php b/lib/Doctrine/ORM/UnexpectedResultException.php index 3cd561f0965..8fae011d14e 100644 --- a/lib/Doctrine/ORM/UnexpectedResultException.php +++ b/lib/Doctrine/ORM/UnexpectedResultException.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; /** diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 337ce8d60b2..363b65163b1 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; use Doctrine\Common\Collections\Collection; diff --git a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php index 340a65cac16..767f2b6af9f 100644 --- a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php +++ b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Utility; use Doctrine\ORM\Mapping\FieldMetadata; diff --git a/lib/Doctrine/ORM/Utility/PersisterHelper.php b/lib/Doctrine/ORM/Utility/PersisterHelper.php index 8effe2f5070..7d19ab71758 100644 --- a/lib/Doctrine/ORM/Utility/PersisterHelper.php +++ b/lib/Doctrine/ORM/Utility/PersisterHelper.php @@ -18,6 +18,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM\Utility; use Doctrine\DBAL\Types\Type; diff --git a/lib/Doctrine/ORM/Version.php b/lib/Doctrine/ORM/Version.php index 08dfeb03fed..97d46870f07 100644 --- a/lib/Doctrine/ORM/Version.php +++ b/lib/Doctrine/ORM/Version.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + namespace Doctrine\ORM; /** diff --git a/tests/Doctrine/Performance/ChangeSet/UnitOfWorkComputeChangesBench.php b/tests/Doctrine/Performance/ChangeSet/UnitOfWorkComputeChangesBench.php index 25cc2fffdbb..7643f8e33b9 100644 --- a/tests/Doctrine/Performance/ChangeSet/UnitOfWorkComputeChangesBench.php +++ b/tests/Doctrine/Performance/ChangeSet/UnitOfWorkComputeChangesBench.php @@ -1,5 +1,7 @@ city = $city; $this->zip = $zip; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/CMS/CmsAddressListener.php b/tests/Doctrine/Tests/Models/CMS/CmsAddressListener.php index 9c9db89eb14..f8ffe931fc3 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsAddressListener.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsAddressListener.php @@ -1,5 +1,7 @@ user = $user; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/CMS/CmsEmployee.php b/tests/Doctrine/Tests/Models/CMS/CmsEmployee.php index e13f1836350..a06190afcdd 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsEmployee.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsEmployee.php @@ -1,5 +1,7 @@ address = $address; $this->phonenumbers = $phonenumbers; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/Cache/Action.php b/tests/Doctrine/Tests/Models/Cache/Action.php index 05ea8c4684e..b62155d1008 100644 --- a/tests/Doctrine/Tests/Models/Cache/Action.php +++ b/tests/Doctrine/Tests/Models/Cache/Action.php @@ -1,5 +1,7 @@ title; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/Company/CompanyContract.php b/tests/Doctrine/Tests/Models/Company/CompanyContract.php index 73d28b6f95c..6db42437b62 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyContract.php @@ -1,5 +1,7 @@ organization = $org; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/Company/CompanyFixContract.php b/tests/Doctrine/Tests/Models/Company/CompanyFixContract.php index 36d2fe473e8..222aa8e44bc 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyFixContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyFixContract.php @@ -1,5 +1,7 @@ data; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/CompositeKeyInheritance/JoinedChildClass.php b/tests/Doctrine/Tests/Models/CompositeKeyInheritance/JoinedChildClass.php index 46b4a093e67..b9daa233131 100644 --- a/tests/Doctrine/Tests/Models/CompositeKeyInheritance/JoinedChildClass.php +++ b/tests/Doctrine/Tests/Models/CompositeKeyInheritance/JoinedChildClass.php @@ -1,5 +1,7 @@ translation; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/DDC117/DDC117Article.php b/tests/Doctrine/Tests/Models/DDC117/DDC117Article.php index 3ed09e11536..f834d8c5035 100644 --- a/tests/Doctrine/Tests/Models/DDC117/DDC117Article.php +++ b/tests/Doctrine/Tests/Models/DDC117/DDC117Article.php @@ -1,5 +1,7 @@ text; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/DDC117/DDC117Editor.php b/tests/Doctrine/Tests/Models/DDC117/DDC117Editor.php index 8a76b64e7d1..155f3131b52 100644 --- a/tests/Doctrine/Tests/Models/DDC117/DDC117Editor.php +++ b/tests/Doctrine/Tests/Models/DDC117/DDC117Editor.php @@ -1,5 +1,7 @@ lastTranslation = $t; $t->lastTranslatedBy[] = $this; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/DDC117/DDC117Link.php b/tests/Doctrine/Tests/Models/DDC117/DDC117Link.php index 9b367d3534c..8e483d5550c 100644 --- a/tests/Doctrine/Tests/Models/DDC117/DDC117Link.php +++ b/tests/Doctrine/Tests/Models/DDC117/DDC117Link.php @@ -1,5 +1,7 @@ setAddress($this); } } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/DDC2372/DDC2372Admin.php b/tests/Doctrine/Tests/Models/DDC2372/DDC2372Admin.php index 6b5af377268..fbb08b5c45d 100644 --- a/tests/Doctrine/Tests/Models/DDC2372/DDC2372Admin.php +++ b/tests/Doctrine/Tests/Models/DDC2372/DDC2372Admin.php @@ -1,5 +1,7 @@ name = $name; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/DDC2372/Traits/DDC2372AddressTrait.php b/tests/Doctrine/Tests/Models/DDC2372/Traits/DDC2372AddressTrait.php index 58140297a60..c3266747936 100644 --- a/tests/Doctrine/Tests/Models/DDC2372/Traits/DDC2372AddressTrait.php +++ b/tests/Doctrine/Tests/Models/DDC2372/Traits/DDC2372AddressTrait.php @@ -1,5 +1,7 @@ setUser($this); } } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/DDC2504/DDC2504ChildClass.php b/tests/Doctrine/Tests/Models/DDC2504/DDC2504ChildClass.php index 623ed96541e..f41b4f4b0f3 100644 --- a/tests/Doctrine/Tests/Models/DDC2504/DDC2504ChildClass.php +++ b/tests/Doctrine/Tests/Models/DDC2504/DDC2504ChildClass.php @@ -1,5 +1,7 @@ height = (int)$height; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/DDC3699/DDC3699Child.php b/tests/Doctrine/Tests/Models/DDC3699/DDC3699Child.php index 2fa8623c5da..fb87213ec8a 100644 --- a/tests/Doctrine/Tests/Models/DDC3699/DDC3699Child.php +++ b/tests/Doctrine/Tests/Models/DDC3699/DDC3699Child.php @@ -1,5 +1,7 @@ street = $street; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php b/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php index afc52e1d9d8..6e9dc3de01e 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php @@ -1,5 +1,7 @@ value = $value; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/Generic/SerializationModel.php b/tests/Doctrine/Tests/Models/Generic/SerializationModel.php index 6339d141464..b899f87b579 100644 --- a/tests/Doctrine/Tests/Models/Generic/SerializationModel.php +++ b/tests/Doctrine/Tests/Models/Generic/SerializationModel.php @@ -1,5 +1,7 @@ name; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/Navigation/NavPhotos.php b/tests/Doctrine/Tests/Models/Navigation/NavPhotos.php index 80a961420a6..67fee573b5f 100644 --- a/tests/Doctrine/Tests/Models/Navigation/NavPhotos.php +++ b/tests/Doctrine/Tests/Models/Navigation/NavPhotos.php @@ -1,5 +1,7 @@ file; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/Navigation/NavPointOfInterest.php b/tests/Doctrine/Tests/Models/Navigation/NavPointOfInterest.php index 80710d43782..186f0425bf3 100644 --- a/tests/Doctrine/Tests/Models/Navigation/NavPointOfInterest.php +++ b/tests/Doctrine/Tests/Models/Navigation/NavPointOfInterest.php @@ -1,5 +1,7 @@ id; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/Navigation/NavUser.php b/tests/Doctrine/Tests/Models/Navigation/NavUser.php index 4402809caa9..8f50158b07d 100644 --- a/tests/Doctrine/Tests/Models/Navigation/NavUser.php +++ b/tests/Doctrine/Tests/Models/Navigation/NavUser.php @@ -1,5 +1,7 @@ value = $value; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/Quote/Phone.php b/tests/Doctrine/Tests/Models/Quote/Phone.php index 4bac8a2bfea..c2a05fbbc1b 100644 --- a/tests/Doctrine/Tests/Models/Quote/Phone.php +++ b/tests/Doctrine/Tests/Models/Quote/Phone.php @@ -1,5 +1,7 @@ name; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/Routing/RoutingRoute.php b/tests/Doctrine/Tests/Models/Routing/RoutingRoute.php index 41ec023d3a8..f507869e9df 100644 --- a/tests/Doctrine/Tests/Models/Routing/RoutingRoute.php +++ b/tests/Doctrine/Tests/Models/Routing/RoutingRoute.php @@ -1,5 +1,7 @@ passengerName; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/StockExchange/Bond.php b/tests/Doctrine/Tests/Models/StockExchange/Bond.php index 8f550496788..e57d3375aaf 100644 --- a/tests/Doctrine/Tests/Models/StockExchange/Bond.php +++ b/tests/Doctrine/Tests/Models/StockExchange/Bond.php @@ -1,5 +1,7 @@ stocks[$stock->getSymbol()] = $stock; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/StockExchange/Market.php b/tests/Doctrine/Tests/Models/StockExchange/Market.php index 3b2eaeb5ded..a1d27218a8c 100644 --- a/tests/Doctrine/Tests/Models/StockExchange/Market.php +++ b/tests/Doctrine/Tests/Models/StockExchange/Market.php @@ -1,5 +1,7 @@ stocks[$symbol]; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/StockExchange/Stock.php b/tests/Doctrine/Tests/Models/StockExchange/Stock.php index 7ce9c291a4f..73d71ac5e4d 100644 --- a/tests/Doctrine/Tests/Models/StockExchange/Stock.php +++ b/tests/Doctrine/Tests/Models/StockExchange/Stock.php @@ -1,5 +1,7 @@ symbol; } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/Models/Taxi/Car.php b/tests/Doctrine/Tests/Models/Taxi/Car.php index 543cf9273fe..1bda2a020b9 100644 --- a/tests/Doctrine/Tests/Models/Taxi/Car.php +++ b/tests/Doctrine/Tests/Models/Taxi/Car.php @@ -1,5 +1,7 @@ . */ +declare(strict_types=1); + namespace Doctrine\Tests\ORM\Internal; use Doctrine\Common\Persistence\Event\LifecycleEventArgs; diff --git a/tests/Doctrine/Tests/ORM/LazyCriteriaCollectionTest.php b/tests/Doctrine/Tests/ORM/LazyCriteriaCollectionTest.php index 317e486d4e1..d2b4b2764b9 100644 --- a/tests/Doctrine/Tests/ORM/LazyCriteriaCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/LazyCriteriaCollectionTest.php @@ -1,5 +1,7 @@ resolver->register('CompanyContractListener'); } -} \ No newline at end of file +} diff --git a/tests/Doctrine/Tests/ORM/Mapping/NamingStrategy/JoinColumnClassNamingStrategy.php b/tests/Doctrine/Tests/ORM/Mapping/NamingStrategy/JoinColumnClassNamingStrategy.php index 0a0a744ec31..4808fcb37fa 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/NamingStrategy/JoinColumnClassNamingStrategy.php +++ b/tests/Doctrine/Tests/ORM/Mapping/NamingStrategy/JoinColumnClassNamingStrategy.php @@ -1,5 +1,7 @@ setCache( diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index 9d1f0cb65fb..8033822a663 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -1,5 +1,7 @@ Date: Sat, 24 Jun 2017 21:37:20 +0200 Subject: [PATCH 182/275] Fix type errors --- lib/Doctrine/ORM/Cache/Lock.php | 2 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 2 +- .../ORM/Proxy/Factory/ProxyGenerator.php | 2 +- lib/Doctrine/ORM/Query/Parameter.php | 2 +- lib/Doctrine/ORM/Query/Parser.php | 2 +- lib/Doctrine/ORM/Query/SqlWalker.php | 6 ++--- .../ORM/Tools/EntityRepositoryGenerator.php | 2 +- .../ORM/Tools/Export/Driver/XmlExporter.php | 26 +++++++++---------- lib/Doctrine/ORM/Tools/ToolsException.php | 2 +- .../ORM/Cache/DefaultCacheFactoryTest.php | 4 +-- .../Tests/ORM/Cache/FileLockRegionTest.php | 2 +- .../ORM/Functional/Locking/OptimisticTest.php | 2 +- .../Mapping/Symfony/AbstractDriverTest.php | 4 +-- .../Doctrine/Tests/OrmFunctionalTestCase.php | 4 +-- 14 files changed, 31 insertions(+), 31 deletions(-) diff --git a/lib/Doctrine/ORM/Cache/Lock.php b/lib/Doctrine/ORM/Cache/Lock.php index a870ea6e9de..bcc37f36415 100644 --- a/lib/Doctrine/ORM/Cache/Lock.php +++ b/lib/Doctrine/ORM/Cache/Lock.php @@ -55,6 +55,6 @@ public function __construct($value, $time = null) */ public static function createLockRead() { - return new self(uniqid(time(), true)); + return new self(uniqid((string) time(), true)); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 6243550ea6b..6cbc1d03671 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -885,7 +885,7 @@ private function convertCacheElementToCacheMetadata( $region = isset($cacheMapping['region']) ? (string) $cacheMapping['region'] : $defaultRegion; $usage = isset($cacheMapping['usage']) - ? constant(sprintf('%s::%s', Mapping\CacheUsage::class, strtoupper($cacheMapping['usage']))) + ? constant(sprintf('%s::%s', Mapping\CacheUsage::class, strtoupper((string) $cacheMapping['usage']))) : Mapping\CacheUsage::READ_ONLY ; diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php index 4937ed8d75b..dd9ed0d89df 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php @@ -544,7 +544,7 @@ private function generateMethods(ProxyDefinition $definition) : string } // Do not consider identifier-getter methods - $fieldCandidate = lcfirst(substr($reflectionMethod->getName(), 3)); + $fieldCandidate = lcfirst((string) substr($reflectionMethod->getName(), 3)); $isIdentifier = $reflectionMethod->getNumberOfParameters() === 0 && strpos($reflectionMethod->getName(), 'get') === 0 && $classMetadata->hasField($fieldCandidate) diff --git a/lib/Doctrine/ORM/Query/Parameter.php b/lib/Doctrine/ORM/Query/Parameter.php index ab300525550..191a607ba1d 100644 --- a/lib/Doctrine/ORM/Query/Parameter.php +++ b/lib/Doctrine/ORM/Query/Parameter.php @@ -60,7 +60,7 @@ class Parameter */ public function __construct($name, $value, $type = null) { - $this->name = trim($name, ':'); + $this->name = trim((string) $name, ':'); $this->setValue($value, $type); } diff --git a/lib/Doctrine/ORM/Query/Parser.php b/lib/Doctrine/ORM/Query/Parser.php index b7b4b3cda1c..01645482274 100644 --- a/lib/Doctrine/ORM/Query/Parser.php +++ b/lib/Doctrine/ORM/Query/Parser.php @@ -484,7 +484,7 @@ public function semanticalError($message = '', $token = null) $length = ($pos !== false) ? $pos - $token['position'] : $distance; $tokenPos = (isset($token['position']) && $token['position'] > 0) ? $token['position'] : '-1'; - $tokenStr = substr($dql, $token['position'], $length); + $tokenStr = substr($dql, (int) $token['position'], $length); // Building informative message $message = 'line 0, col ' . $tokenPos . " near '" . $tokenStr . "': Error: " . $message; diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index c1157e12863..8af8066c9ea 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -1597,7 +1597,7 @@ public function walkNewObject($newObjectExpression, $newObjectResultAlias=null) $class = $qComp['metadata']; $fieldType = $class->getProperty($e->field)->getType(); - $sqlSelectExpressions[] = trim($e->dispatch($this)) . ' AS ' . $columnAlias; + $sqlSelectExpressions[] = trim((string) $e->dispatch($this)) . ' AS ' . $columnAlias; break; case ($e instanceof AST\Literal): @@ -1611,11 +1611,11 @@ public function walkNewObject($newObjectExpression, $newObjectResultAlias=null) break; } - $sqlSelectExpressions[] = trim($e->dispatch($this)) . ' AS ' . $columnAlias; + $sqlSelectExpressions[] = trim((string) $e->dispatch($this)) . ' AS ' . $columnAlias; break; default: - $sqlSelectExpressions[] = trim($e->dispatch($this)) . ' AS ' . $columnAlias; + $sqlSelectExpressions[] = trim((string) $e->dispatch($this)) . ' AS ' . $columnAlias; break; } diff --git a/lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php b/lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php index 71813f81b7d..9178bc15262 100644 --- a/lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php @@ -79,7 +79,7 @@ public function generateEntityRepositoryClass($fullClassName) */ private function getClassNamespace($fullClassName) { - $namespace = substr($fullClassName, 0, strrpos($fullClassName, '\\')); + $namespace = substr($fullClassName, 0, (int) strrpos($fullClassName, '\\')); return $namespace; } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 662a0aa1452..c3fc5e14eda 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -97,15 +97,15 @@ public function exportClassMetadata(ClassMetadata $metadata) $discriminatorColumnXml->addAttribute('type', $discrColumn->getTypeName()); if (is_int($discrColumn->getLength())) { - $discriminatorColumnXml->addAttribute('length', $discrColumn->getLength()); + $discriminatorColumnXml->addAttribute('length', (string) $discrColumn->getLength()); } if (is_int($discrColumn->getScale())) { - $discriminatorColumnXml->addAttribute('scale', $discrColumn->getScale()); + $discriminatorColumnXml->addAttribute('scale', (string) $discrColumn->getScale()); } if (is_int($discrColumn->getPrecision())) { - $discriminatorColumnXml->addAttribute('precision', $discrColumn->getPrecision()); + $discriminatorColumnXml->addAttribute('precision', (string) $discrColumn->getPrecision()); } } @@ -114,7 +114,7 @@ public function exportClassMetadata(ClassMetadata $metadata) foreach ($metadata->discriminatorMap as $value => $className) { $discriminatorMappingXml = $discriminatorMapXml->addChild('discriminator-mapping'); - $discriminatorMappingXml->addAttribute('value', $value); + $discriminatorMappingXml->addAttribute('value', (string) $value); $discriminatorMappingXml->addAttribute('class', $className); } } @@ -229,7 +229,7 @@ public function exportClassMetadata(ClassMetadata $metadata) $a1 = array_search(get_class($m1), $orderMap); $a2 = array_search(get_class($m2), $orderMap); - return strcmp($a1, $a2); + return strcmp((string) $a1, (string) $a2); }); foreach ($properties as $property) { @@ -282,15 +282,15 @@ private function exportFieldMetadata( } if (is_int($property->getLength())) { - $fieldXml->addAttribute('length', $property->getLength()); + $fieldXml->addAttribute('length', (string) $property->getLength()); } if (is_int($property->getPrecision())) { - $fieldXml->addAttribute('precision', $property->getPrecision()); + $fieldXml->addAttribute('precision', (string) $property->getPrecision()); } if (is_int($property->getScale())) { - $fieldXml->addAttribute('scale', $property->getScale()); + $fieldXml->addAttribute('scale', (string) $property->getScale()); } if ($metadata->isVersioned() && $metadata->versionProperty->getName() === $property->getName()) { @@ -305,7 +305,7 @@ private function exportFieldMetadata( $optionsXml = $fieldXml->addChild('options'); foreach ($property->getOptions() as $key => $value) { - $optionXml = $optionsXml->addChild('option', $value); + $optionXml = $optionsXml->addChild('option', (string) $value); $optionXml->addAttribute('name', $key); } @@ -417,18 +417,18 @@ private function exportJoinColumns( } if ($joinColumn->isNullable()) { - $joinColumnXml->addAttribute('nullable', $joinColumn->isNullable()); + $joinColumnXml->addAttribute('nullable', (string) $joinColumn->isNullable()); } if ($joinColumn->isUnique()) { - $joinColumnXml->addAttribute('unique', $joinColumn->isUnique()); + $joinColumnXml->addAttribute('unique', (string) $joinColumn->isUnique()); } if ($joinColumn->getOptions()) { $optionsXml = $joinColumnXml->addChild('options'); foreach ($joinColumn->getOptions() as $key => $value) { - $optionXml = $optionsXml->addChild('option', $value); + $optionXml = $optionsXml->addChild('option', (string) $value); $optionXml->addAttribute('name', $key); } @@ -504,7 +504,7 @@ private function exportSequenceInformation(\SimpleXMLElement $identifierXmlNode, $sequenceGeneratorXml = $identifierXmlNode->addChild('sequence-generator'); $sequenceGeneratorXml->addAttribute('sequence-name', $sequenceDefinition['sequenceName']); - $sequenceGeneratorXml->addAttribute('allocation-size', $sequenceDefinition['allocationSize']); + $sequenceGeneratorXml->addAttribute('allocation-size', (string) $sequenceDefinition['allocationSize']); } /** diff --git a/lib/Doctrine/ORM/Tools/ToolsException.php b/lib/Doctrine/ORM/Tools/ToolsException.php index 3ffa7186d66..6f92bef8523 100644 --- a/lib/Doctrine/ORM/Tools/ToolsException.php +++ b/lib/Doctrine/ORM/Tools/ToolsException.php @@ -38,6 +38,6 @@ class ToolsException extends ORMException */ public static function schemaToolFailure($sql, \Exception $e) { - return new self("Schema-Tool failed with Error '" . $e->getMessage() . "' while executing DDL: " . $sql, "0", $e); + return new self("Schema-Tool failed with Error '" . $e->getMessage() . "' while executing DDL: " . $sql, 0, $e); } } diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php index 885b43a7493..5d6c884bec3 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php @@ -273,7 +273,7 @@ public function testBuildCachedEntityPersisterNonStrictException() $persister = new BasicEntityPersister($em, $metadata); $metadata->setCache( - new CacheMetadata(-1, 'doctrine_tests_models_cache_state') + new CacheMetadata('-1', 'doctrine_tests_models_cache_state') ); $this->factory->buildCachedEntityPersister($em, $persister, $metadata); @@ -291,7 +291,7 @@ public function testBuildCachedCollectionPersisterException() $persister = new OneToManyPersister($em); $association->setCache( - new CacheMetadata(-1, 'doctrine_tests_models_cache_state__cities') + new CacheMetadata('-1', 'doctrine_tests_models_cache_state__cities') ); $this->factory->buildCachedCollectionPersister($em, $persister, $association); diff --git a/tests/Doctrine/Tests/ORM/Cache/FileLockRegionTest.php b/tests/Doctrine/Tests/ORM/Cache/FileLockRegionTest.php index ef48eb3e4b8..e17b5fda32a 100644 --- a/tests/Doctrine/Tests/ORM/Cache/FileLockRegionTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/FileLockRegionTest.php @@ -281,7 +281,7 @@ private function cleanTestDirectory($path) foreach ($directoryIterator as $file) { if ($file->isFile()) { @unlink($file->getRealPath()); - } else { + } elseif ($file->getRealPath() !== false) { @rmdir($file->getRealPath()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Locking/OptimisticTest.php b/tests/Doctrine/Tests/ORM/Functional/Locking/OptimisticTest.php index ff86051f3a2..f525d8f221f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Locking/OptimisticTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/Locking/OptimisticTest.php @@ -252,7 +252,7 @@ public function testOptimisticTimestampLockFailureThrowsException(OptimisticTime $caughtException = null; try { - $expectedVersionExpired = DateTime::createFromFormat('U', $test->version->getTimestamp()-3600); + $expectedVersionExpired = DateTime::createFromFormat('U', (string) ($test->version->getTimestamp()-3600)); $this->em->lock($test, LockMode::OPTIMISTIC, $expectedVersionExpired); } catch (OptimisticLockException $e) { diff --git a/tests/Doctrine/Tests/ORM/Mapping/Symfony/AbstractDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/Symfony/AbstractDriverTest.php index 02c706affb2..57b82468e36 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/Symfony/AbstractDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/Symfony/AbstractDriverTest.php @@ -77,9 +77,9 @@ protected function tearDown() foreach ($iterator as $path) { if ($path->isDir()) { - @rmdir($path); + @rmdir((string) $path); } else { - @unlink($path); + @unlink((string) $path); } } diff --git a/tests/Doctrine/Tests/OrmFunctionalTestCase.php b/tests/Doctrine/Tests/OrmFunctionalTestCase.php index eee51406592..f1fb54e92fe 100644 --- a/tests/Doctrine/Tests/OrmFunctionalTestCase.php +++ b/tests/Doctrine/Tests/OrmFunctionalTestCase.php @@ -819,8 +819,8 @@ function($p) { public static function assertSQLEquals($expectedSql, $actualSql) { self::assertEquals( - strtolower($expectedSql), - strtolower($actualSql), + strtolower((string) $expectedSql), + strtolower((string) $actualSql), "Lowercase comparison of SQL statements failed." ); } From e864d865631789cf61d083043fdd69e3bb8711d4 Mon Sep 17 00:00:00 2001 From: Michael Moravec Date: Fri, 14 Jul 2017 23:56:32 +0200 Subject: [PATCH 183/275] Added ValueGeneratorMetadata, implemented ValueGeneratorPlan --- .../Entity/AbstractEntityPersister.php | 2 +- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 37 +++- .../ORM/Mapping/ClassMetadataFactory.php | 165 ++++++++++++------ .../ORM/Mapping/Driver/AnnotationDriver.php | 50 +++--- .../ORM/Mapping/Driver/DatabaseDriver.php | 3 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 45 +++-- .../Exporter/FieldMetadataExporter.php | 9 - .../Exporter/LocalColumnMetadataExporter.php | 8 + lib/Doctrine/ORM/Mapping/FieldMetadata.php | 57 ------ .../ORM/Mapping/LocalColumnMetadata.php | 20 +++ .../ORM/Mapping/ValueGeneratorMetadata.php | 48 +++++ .../Entity/BasicEntityPersister.php | 35 ++-- .../ORM/Persisters/Entity/EntityPersister.php | 2 +- .../Entity/JoinedSubclassPersister.php | 26 +-- lib/Doctrine/ORM/Sequencing/Generator.php | 2 +- .../Planning/ColumnValueGeneratorExecutor.php | 57 ++++++ .../Planning/CompositeValueGenerationPlan.php | 88 ++++++++++ .../Planning/NoopValueGenerationPlan.php | 43 +++++ .../Planning/SingleValueGenerationPlan.php | 70 ++++++++ .../Planning/ValueGenerationExecutor.php | 35 ++++ .../Planning/ValueGenerationPlan.php | 34 ++++ .../Command/MappingDescribeCommand.php | 4 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 14 +- .../ORM/Tools/Export/Driver/PhpExporter.php | 8 +- .../ORM/Tools/Export/Driver/XmlExporter.php | 8 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 9 +- lib/Doctrine/ORM/UnitOfWork.php | 70 +++----- .../Tests/Mocks/EntityPersisterMock.php | 17 +- .../DDC1476EntityWithDefaultFieldType.php | 1 - .../Tests/Models/DDC3579/DDC3579User.php | 2 +- .../Models/DDC5934/DDC5934BaseContract.php | 2 +- .../Tests/Models/DDC869/DDC869Payment.php | 2 +- .../Tests/Models/DDC889/DDC889Class.php | 2 +- .../Tests/Models/DDC889/DDC889SuperClass.php | 1 - .../Tests/Models/DDC964/DDC964User.php | 2 +- .../Entity/AbstractEntityPersisterTest.php | 5 +- .../SchemaTool/PostgreSqlSchemaToolTest.php | 2 +- .../ORM/Functional/Ticket/DDC2387Test.php | 4 +- .../ORM/Functional/Ticket/DDC3634Test.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 28 ++- .../Mapping/BasicInheritanceMappingTest.php | 13 +- .../ORM/Mapping/ClassMetadataFactoryTest.php | 40 ++--- .../Tests/ORM/Mapping/ClassMetadataTest.php | 14 +- .../php/Doctrine.Tests.Models.Cache.City.php | 2 +- ...1476.DDC1476EntityWithDefaultFieldType.php | 1 - ....Models.DDC2825.ExplicitSchemaAndTable.php | 2 +- ...dels.DDC2825.SchemaAndTableInTableName.php | 2 +- ...trine.Tests.Models.DDC3579.DDC3579User.php | 2 +- ...sts.Models.DDC5934.DDC5934BaseContract.php | 2 +- ...rine.Tests.Models.DDC869.DDC869Payment.php | 2 +- ...e.Tests.Models.DDC889.DDC889SuperClass.php | 2 +- ...octrine.Tests.Models.DDC964.DDC964User.php | 2 +- .../php/Doctrine.Tests.ORM.Mapping.Animal.php | 6 +- ...ctrine.Tests.ORM.Mapping.DDC1170Entity.php | 1 - ...octrine.Tests.ORM.Mapping.DDC807Entity.php | 1 - .../php/Doctrine.Tests.ORM.Mapping.User.php | 6 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 12 +- .../AbstractClassMetadataExporterTest.php | 2 +- .../Export/XmlClassMetadataExporterTest.php | 6 +- .../Doctrine.Tests.ORM.Tools.Export.User.php | 2 +- 60 files changed, 753 insertions(+), 386 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/ValueGeneratorMetadata.php create mode 100644 lib/Doctrine/ORM/Sequencing/Planning/ColumnValueGeneratorExecutor.php create mode 100644 lib/Doctrine/ORM/Sequencing/Planning/CompositeValueGenerationPlan.php create mode 100644 lib/Doctrine/ORM/Sequencing/Planning/NoopValueGenerationPlan.php create mode 100644 lib/Doctrine/ORM/Sequencing/Planning/SingleValueGenerationPlan.php create mode 100644 lib/Doctrine/ORM/Sequencing/Planning/ValueGenerationExecutor.php create mode 100644 lib/Doctrine/ORM/Sequencing/Planning/ValueGenerationPlan.php diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php index 358cac4791b..93dd1ddd356 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php @@ -381,7 +381,7 @@ public function insert($entity) { $this->queuedCache['insert'][] = $entity; - return $this->persister->insert($entity); + $this->persister->insert($entity); } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 832bf4ad4b7..5a773e33c4c 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -26,6 +26,7 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; use Doctrine\ORM\Mapping\Factory\NamingStrategy; +use Doctrine\ORM\Sequencing\Planning\ValueGenerationPlan; use Doctrine\ORM\Utility\PersisterHelper; /** @@ -275,6 +276,13 @@ class ClassMetadata implements TableOwner */ protected $namingStrategy; + /** + * Value generation plan is responsible for generating values for auto-generated fields. + * + * @var ValueGenerationPlan + */ + protected $valueGenerationPlan; + /** * Initializes a new ClassMetadata instance that will hold the object-relational mapping * metadata of the class with the given name. @@ -394,6 +402,7 @@ public function __sleep() 'name', 'table', 'rootEntityName', + 'valueGenerationPlan', ]); // The rest of the metadata is only serialized if necessary. @@ -551,7 +560,7 @@ public function validateIdentifier() $explicitlyGeneratedProperties = array_filter($this->properties, function (Property $property) : bool { return $property instanceof FieldMetadata && $property->isPrimaryKey() - && $property->getIdentifierGeneratorType() !== GeneratorType::NONE; + && $property->hasValueGenerator(); }); if ($this->isIdentifierComposite() && count($explicitlyGeneratedProperties) !== 0) { @@ -1462,6 +1471,22 @@ private function isInheritanceType($type) || $type == InheritanceType::TABLE_PER_CLASS; } + /** + * @param string $columnName + * + * @return LocalColumnMetadata|null + */ + public function getColumn(string $columnName): ?LocalColumnMetadata + { + foreach ($this->properties as $property) { + if ($property instanceof LocalColumnMetadata && $property->getColumnName() === $columnName) { + return $property; + } + } + + return null; + } + /** * @return array */ @@ -1860,6 +1885,16 @@ public function addDiscriminatorMapClass($name, $className) } } + public function getValueGenerationPlan(): ValueGenerationPlan + { + return $this->valueGenerationPlan; + } + + public function setValueGenerationPlan(ValueGenerationPlan $valueGenerationPlan): void + { + $this->valueGenerationPlan = $valueGenerationPlan; + } + /** * Checks whether the class has a named query with the given query name. * diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 4a7a7ebded9..473dcead5d5 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -29,6 +29,10 @@ use Doctrine\ORM\ORMException; use Doctrine\ORM\Reflection\ReflectionService; use Doctrine\ORM\Sequencing; +use Doctrine\ORM\Sequencing\Planning\ColumnValueGeneratorExecutor; +use Doctrine\ORM\Sequencing\Planning\CompositeValueGenerationPlan; +use Doctrine\ORM\Sequencing\Planning\NoopValueGenerationPlan; +use Doctrine\ORM\Sequencing\Planning\SingleValueGenerationPlan; use ReflectionException; /** @@ -234,6 +238,7 @@ protected function doLoadMetadata( $this->evm->dispatchEvent(Events::loadClassMetadata, $eventArgs); } + $this->buildValueGenerationPlan($class); $this->validateRuntimeMetadata($class, $parent); } @@ -631,7 +636,7 @@ private function addInheritedSqlResultSetMappings(ClassMetadata $subClass, Class private function completeIdentifierGeneratorMappings(ClassMetadata $class) { foreach ($class->getProperties() as $property) { - if ( ! $property instanceof FieldMetadata) { + if ( ! $property instanceof FieldMetadata /*&& ! $property instanceof AssocationMetadata*/) { continue; } @@ -641,70 +646,50 @@ private function completeIdentifierGeneratorMappings(ClassMetadata $class) private function completeFieldIdentifierGeneratorMapping(FieldMetadata $field) { - $platform = $this->getTargetPlatform(); - $class = $field->getDeclaringClass();; + if (!$field->hasValueGenerator()) { + return; + } - if ($field->getIdentifierGeneratorType() === GeneratorType::AUTO) { - $field->setIdentifierGeneratorType( + $platform = $this->getTargetPlatform(); + $class = $field->getDeclaringClass(); + $generator = $field->getValueGenerator(); + + if ($generator->getType() === GeneratorType::AUTO) { + $generator = new ValueGeneratorMetadata( $platform->prefersSequences() ? GeneratorType::SEQUENCE : ($platform->prefersIdentityColumns() ? GeneratorType::IDENTITY : GeneratorType::TABLE - ) + ), + $field->getValueGenerator()->getDefinition() ); + $field->setValueGenerator($generator); } - // Create & assign an appropriate ID generator instance - switch ($field->getIdentifierGeneratorType()) { - case GeneratorType::IDENTITY: - $sequenceName = null; - - // Platforms that do not have native IDENTITY support need a sequence to emulate this behaviour. - if ($platform->usesSequenceEmulatedIdentityColumns()) { - $sequencePrefix = $platform->getSequencePrefix($class->getTableName(), $class->getSchemaName()); - $idSequenceName = $platform->getIdentitySequenceName($sequencePrefix, $field->getColumnName()); - $sequenceName = $platform->quoteIdentifier($platform->fixSchemaElementName($idSequenceName)); - } - - $generator = $field->getTypeName() === 'bigint' - ? new Sequencing\BigIntegerIdentityGenerator($sequenceName) - : new Sequencing\IdentityGenerator($sequenceName) - ; - - $field->setIdentifierGenerator($generator); - - break; - + // Validate generator definition and set defaults where needed + switch ($generator->getType()) { case GeneratorType::SEQUENCE: // If there is no sequence definition yet, create a default definition - if ( ! $field->getIdentifierGeneratorDefinition()) { - // @todo guilhermeblanco Move sequence generation to DBAL - - $sequencePrefix = $platform->getSequencePrefix($class->getTableName(), $class->getSchemaName()); - $idSequenceName = sprintf('%s_%s_seq', $sequencePrefix, $field->getColumnName()); - $sequenceName = $platform->fixSchemaElementName($idSequenceName); - - $field->setIdentifierGeneratorDefinition([ - 'sequenceName' => $sequenceName, - 'allocationSize' => 1, - ]); + if ($generator->getDefinition()) { + break; } - $sequenceGenerator = new Sequencing\SequenceGenerator( - $platform->quoteIdentifier($field->getIdentifierGeneratorDefinition()['sequenceName']), - $field->getIdentifierGeneratorDefinition()['allocationSize'] + // @todo guilhermeblanco Move sequence generation to DBAL + $sequencePrefix = $platform->getSequencePrefix($class->getTableName(), $class->getSchemaName()); + $idSequenceName = sprintf('%s_%s_seq', $sequencePrefix, $field->getColumnName()); + $sequenceName = $platform->fixSchemaElementName($idSequenceName); + + $field->setValueGenerator( + new ValueGeneratorMetadata( + $generator->getType(), + [ + 'sequenceName' => $sequenceName, + 'allocationSize' => 1, + ] + ) ); - $field->setIdentifierGenerator($sequenceGenerator); - break; - - case GeneratorType::NONE: - $field->setIdentifierGenerator(new Sequencing\AssignedGenerator()); - break; - - case GeneratorType::UUID: - $field->setIdentifierGenerator(new Sequencing\UuidGenerator()); break; case GeneratorType::TABLE: @@ -712,7 +697,7 @@ private function completeFieldIdentifierGeneratorMapping(FieldMetadata $field) break; case GeneratorType::CUSTOM: - $definition = $field->getIdentifierGeneratorDefinition(); + $definition = $generator->getDefinition(); if ( ! isset($definition['class'])) { throw new ORMException(sprintf('Cannot instantiate custom generator, no class has been defined')); } @@ -720,11 +705,15 @@ private function completeFieldIdentifierGeneratorMapping(FieldMetadata $field) throw new ORMException(sprintf('Cannot instantiate custom generator : %s', var_export($definition, true))); //$definition['class'])); } - $field->setIdentifierGenerator(new $definition['class']); + break; + + case GeneratorType::IDENTITY: + case GeneratorType::NONE: + case GeneratorType::UUID: break; default: - throw new ORMException("Unknown generator type: " . $field->getIdentifierGeneratorType()); + throw new ORMException("Unknown generator type: " . $generator->getType()); } } @@ -779,4 +768,74 @@ private function getTargetPlatform() return $this->targetPlatform; } + + private function buildValueGenerationPlan(ClassMetadata $class): void + { + /** @var LocalColumnMetadata[] $generatedProperties */ + $generatedProperties = array_filter($class->getProperties(), function (Property $property): bool { + return $property instanceof LocalColumnMetadata && $property->hasValueGenerator(); + }); + $propertiesCount = count($generatedProperties); + + if ($propertiesCount === 0) { + $class->setValueGenerationPlan(new NoopValueGenerationPlan()); + return; + } + + if ($propertiesCount === 1) { + $property = reset($generatedProperties); + + $class->setValueGenerationPlan(new SingleValueGenerationPlan( + $class, + new ColumnValueGeneratorExecutor($property, $this->createPropertyValueGenerator($class, $property)) + )); + + return; + } + + $executors = []; + foreach ($generatedProperties as $property) { + $executors[] = new ColumnValueGeneratorExecutor($property, $this->createPropertyValueGenerator($class, $property)); + } + + $class->setValueGenerationPlan(new CompositeValueGenerationPlan($class, $executors)); + } + + private function createPropertyValueGenerator(ClassMetadata $class, LocalColumnMetadata $property): Sequencing\Generator + { + $platform = $this->getTargetPlatform(); + + switch ($property->getValueGenerator()->getType()) { + case GeneratorType::IDENTITY: + $sequenceName = null; + + // Platforms that do not have native IDENTITY support need a sequence to emulate this behaviour. + if ($platform->usesSequenceEmulatedIdentityColumns()) { + $sequencePrefix = $platform->getSequencePrefix($class->getTableName(), $class->getSchemaName()); + $idSequenceName = $platform->getIdentitySequenceName($sequencePrefix, $property->getColumnName()); + $sequenceName = $platform->quoteIdentifier($platform->fixSchemaElementName($idSequenceName)); + } + + return $property->getTypeName() === 'bigint' + ? new Sequencing\BigIntegerIdentityGenerator($sequenceName) + : new Sequencing\IdentityGenerator($sequenceName); + + case GeneratorType::SEQUENCE: + $definition = $property->getValueGenerator()->getDefinition(); + return new Sequencing\SequenceGenerator( + $platform->quoteIdentifier($definition['sequenceName']), + $definition['allocationSize'] + ); + break; + + case GeneratorType::UUID: + return new Sequencing\UuidGenerator(); + break; + + case GeneratorType::CUSTOM: + $class = $property->getValueGenerator()->getDefinition()['class']; + return new $class(); + break; + } + } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index c9484479340..9b08ee603c4 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -753,37 +753,41 @@ private function convertReflectionPropertyToFieldMetadata( // Check for GeneratedValue strategy if (isset($propertyAnnotations[Annotation\GeneratedValue::class])) { $generatedValueAnnot = $propertyAnnotations[Annotation\GeneratedValue::class]; - $strategy = strtoupper($generatedValueAnnot->strategy); - $idGeneratorType = constant(sprintf('%s::%s', Mapping\GeneratorType::class, $strategy)); + $strategy = strtoupper($generatedValueAnnot->strategy); + $idGeneratorType = constant(sprintf('%s::%s', Mapping\GeneratorType::class, $strategy)); - $fieldMetadata->setIdentifierGeneratorType($idGeneratorType); - } + if ($idGeneratorType !== Mapping\GeneratorType::NONE) { + $idGeneratorDefinition = []; - // Check for CustomGenerator/SequenceGenerator/TableGenerator definition - switch (true) { - case isset($propertyAnnotations[Annotation\SequenceGenerator::class]): - $seqGeneratorAnnot = $propertyAnnotations[Annotation\SequenceGenerator::class]; + // Check for CustomGenerator/SequenceGenerator/TableGenerator definition + switch (true) { + case isset($propertyAnnotations[Annotation\SequenceGenerator::class]): + $seqGeneratorAnnot = $propertyAnnotations[Annotation\SequenceGenerator::class]; - $fieldMetadata->setIdentifierGeneratorDefinition([ - 'sequenceName' => $seqGeneratorAnnot->sequenceName, - 'allocationSize' => $seqGeneratorAnnot->allocationSize, - ]); + $idGeneratorDefinition = [ + 'sequenceName' => $seqGeneratorAnnot->sequenceName, + 'allocationSize' => $seqGeneratorAnnot->allocationSize, + ]; - break; + break; - case isset($propertyAnnotations[Annotation\CustomIdGenerator::class]): - $customGeneratorAnnot = $propertyAnnotations[Annotation\CustomIdGenerator::class]; + case isset($propertyAnnotations[Annotation\CustomIdGenerator::class]): + $customGeneratorAnnot = $propertyAnnotations[Annotation\CustomIdGenerator::class]; - $fieldMetadata->setIdentifierGeneratorDefinition([ - 'class' => $customGeneratorAnnot->class, - 'arguments' => $customGeneratorAnnot->arguments, - ]); + $idGeneratorDefinition = [ + 'class' => $customGeneratorAnnot->class, + 'arguments' => $customGeneratorAnnot->arguments, + ]; - break; + break; - /* @todo If it is not supported, why does this exist? */ - case isset($propertyAnnotations['Doctrine\ORM\Mapping\TableGenerator']): - throw Mapping\MappingException::tableIdGeneratorNotImplemented($className); + /* @todo If it is not supported, why does this exist? */ + case isset($propertyAnnotations['Doctrine\ORM\Mapping\TableGenerator']): + throw Mapping\MappingException::tableIdGeneratorNotImplemented($className); + } + + $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata($idGeneratorType, $idGeneratorDefinition)); + } } return $fieldMetadata; diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index d99e85eca89..7d416230b4b 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -34,6 +34,7 @@ use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\JoinTableMetadata; use Doctrine\ORM\Mapping\MappingException; +use Doctrine\ORM\Mapping\ValueGeneratorMetadata; /** * The DatabaseDriver reverse engineers the mapping metadata from a database. @@ -384,7 +385,7 @@ private function buildFieldMappings(ClassMetadata $metadata) // We need to check for the columns here, because we might have associations as id as well. if ($ids && count($primaryKeys) === 1) { - $ids[0]->setIdentifierGeneratorType(GeneratorType::AUTO); + $ids[0]->setValueGenerator(new ValueGeneratorMetadata(GeneratorType::AUTO)); } } diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 6cbc1d03671..f6c9243cffe 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -315,34 +315,33 @@ public function loadMetadataForClass($className, Mapping\ClassMetadata $metadata if (isset($idElement->generator)) { $strategy = isset($idElement->generator['strategy']) ? (string) $idElement->generator['strategy'] - : 'AUTO' - ; + : 'AUTO'; $idGeneratorType = constant(sprintf('%s::%s', Mapping\GeneratorType::class, strtoupper($strategy))); - $fieldMetadata->setIdentifierGeneratorType($idGeneratorType); - } - // Check for SequenceGenerator/TableGenerator definition - if (isset($idElement->{'sequence-generator'})) { - $seqGenerator = $idElement->{'sequence-generator'}; + if ($idGeneratorType !== Mapping\GeneratorType::NONE) { + $idGeneratorDefinition = []; - $fieldMetadata->setIdentifierGeneratorDefinition( - [ - 'sequenceName' => (string) $seqGenerator['sequence-name'], - 'allocationSize' => (string) $seqGenerator['allocation-size'], - ] - ); - } else if (isset($idElement->{'custom-id-generator'})) { - $customGenerator = $idElement->{'custom-id-generator'}; + // Check for SequenceGenerator/TableGenerator definition + if (isset($idElement->{'sequence-generator'})) { + $seqGenerator = $idElement->{'sequence-generator'}; + $idGeneratorDefinition = [ + 'sequenceName' => (string) $seqGenerator['sequence-name'], + 'allocationSize' => (string) $seqGenerator['allocation-size'], + ]; + } elseif (isset($idElement->{'custom-id-generator'})) { + $customGenerator = $idElement->{'custom-id-generator'}; - $fieldMetadata->setIdentifierGeneratorDefinition( - [ - 'class' => (string) $customGenerator['class'], - 'arguments' => [], - ] - ); - } else if (isset($idElement->{'table-generator'})) { - throw Mapping\MappingException::tableIdGeneratorNotImplemented($className); + $idGeneratorDefinition = [ + 'class' => (string) $customGenerator['class'], + 'arguments' => [], + ]; + } elseif (isset($idElement->{'table-generator'})) { + throw Mapping\MappingException::tableIdGeneratorNotImplemented($className); + } + + $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata($idGeneratorType, $idGeneratorDefinition)); + } } $metadata->addProperty($fieldMetadata); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php index 851cf8957fe..9d511a34ef9 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php @@ -44,15 +44,6 @@ protected function exportInstantiation(FieldMetadata $metadata) : string $metadata->getTypeName() ); - if ($metadata->getIdentifierGeneratorType() !== GeneratorType::NONE) { - $lines[] = ''; - $lines[] = sprintf( - '%s->setIdentifierGeneratorType(Mapping\GeneratorType::%s);', - self::VARIABLE, - strtoupper($metadata->getIdentifierGeneratorType()) - ); - } - return implode(PHP_EOL, $lines); } } diff --git a/lib/Doctrine/ORM/Mapping/Exporter/LocalColumnMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/LocalColumnMetadataExporter.php index 1b38e862c23..6832e2176af 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/LocalColumnMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/LocalColumnMetadataExporter.php @@ -42,6 +42,14 @@ public function export($value, int $indentationLevel = 0) : string $lines[] = $objectReference . '->setScale(' . $value->getScale() . ');'; $lines[] = $objectReference . '->setPrecision(' . $value->getPrecision() . ');'; + if ($value->hasValueGenerator()) { + $lines[] = sprintf( + $objectReference . '->setValueGenerator(new ValueGenerator(%s, %s));', + var_export($value->getValueGenerator()->getType(), true), + var_export($value->getValueGenerator()->getDefinition(), true) + ); + } + return implode(PHP_EOL, $lines); } } diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index 6f25d42d874..a9ce761c396 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -37,15 +37,6 @@ class FieldMetadata extends LocalColumnMetadata implements Property /** @var string */ protected $name; - /** @var string */ - protected $identifierGeneratorType = GeneratorType::NONE; - - /** @var array */ - protected $identifierGeneratorDefinition = []; - - /** @var Generator */ - protected $identifierGenerator; - /** * FieldMetadata constructor. * @@ -91,54 +82,6 @@ public function getName() return $this->name; } - /** - * @return string - */ - public function getIdentifierGeneratorType() - { - return $this->identifierGeneratorType; - } - - /** - * @param int $identifierGeneratorType - */ - public function setIdentifierGeneratorType(string $identifierGeneratorType) - { - $this->identifierGeneratorType = $identifierGeneratorType; - } - - /** - * @return array - */ - public function getIdentifierGeneratorDefinition() - { - return $this->identifierGeneratorDefinition; - } - - /** - * @param array $identifierGeneratorDefinition - */ - public function setIdentifierGeneratorDefinition(array $identifierGeneratorDefinition) - { - $this->identifierGeneratorDefinition = $identifierGeneratorDefinition; - } - - /** - * @return Generator - */ - public function getIdentifierGenerator() : Generator - { - return $this->identifierGenerator; - } - - /** - * @param Generator $identifierGenerator - */ - public function setIdentifierGenerator(Generator $identifierGenerator) - { - $this->identifierGenerator = $identifierGenerator; - } - /** * {@inheritdoc} */ diff --git a/lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php b/lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php index 5b747a21e89..d39651f01df 100644 --- a/lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php @@ -39,6 +39,11 @@ abstract class LocalColumnMetadata extends ColumnMetadata */ protected $precision; + /** + * @var ValueGeneratorMetadata|null + */ + protected $valueGenerator; + /** * @return int */ @@ -86,4 +91,19 @@ public function setPrecision(int $precision) { $this->precision = $precision; } + + public function hasValueGenerator(): bool + { + return $this->valueGenerator !== null; + } + + public function getValueGenerator(): ?ValueGeneratorMetadata + { + return $this->valueGenerator; + } + + public function setValueGenerator(?ValueGeneratorMetadata $valueGenerator): void + { + $this->valueGenerator = $valueGenerator; + } } diff --git a/lib/Doctrine/ORM/Mapping/ValueGeneratorMetadata.php b/lib/Doctrine/ORM/Mapping/ValueGeneratorMetadata.php new file mode 100644 index 00000000000..7f03a67dc67 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/ValueGeneratorMetadata.php @@ -0,0 +1,48 @@ +. + */ + +declare(strict_types=1); + +namespace Doctrine\ORM\Mapping; + +class ValueGeneratorMetadata +{ + /** @var string */ + protected $type; + + /** @var array */ + protected $definition; + + public function __construct(string $type, array $definition = []) + { + $this->type = $type; + $this->definition = $definition; + } + + public function getType(): string + { + return $this->type; + } + + public function getDefinition(): array + { + return $this->definition; + } +} diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 6c44a2dd5d7..4966fb276a7 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -257,12 +257,10 @@ public function setIdentifier($entity, array $id) : void */ public function insert($entity) { - $postInsertIds = []; - $identifierComposite = $this->class->isIdentifierComposite(); - - $stmt = $this->conn->prepare($this->getInsertSQL()); - $tableName = $this->class->getTableName(); - $insertData = $this->prepareInsertData($entity); + $stmt = $this->conn->prepare($this->getInsertSQL()); + $tableName = $this->class->getTableName(); + $insertData = $this->prepareInsertData($entity); + $generationPlan = $this->class->getValueGenerationPlan(); if (isset($insertData[$tableName])) { $paramIndex = 1; @@ -276,27 +274,15 @@ public function insert($entity) $stmt->execute(); - if (! $identifierComposite - && ($property = $this->class->getProperty($this->class->getSingleIdentifierFieldName())) instanceof FieldMetadata - && $property->getIdentifierGenerator()->isPostInsertGenerator() - ) { - $generatedId = $property->getIdentifierGenerator()->generate($this->em, $entity); - $id = [$this->class->identifier[0] => $generatedId]; - - $postInsertIds = [ - $this->class->getSingleIdentifierFieldName() => $generatedId, - ]; - } else { - $id = $this->getIdentifier($entity); + if ($generationPlan->containsDeferred()) { + $generationPlan->executeDeferred($this->em, $entity); } if ($this->class->isVersioned()) { - $this->assignDefaultVersionValue($entity, $id); + $this->assignDefaultVersionValue($entity, $this->getIdentifier($entity)); } $stmt->closeCursor(); - - return $postInsertIds; } /** @@ -1524,7 +1510,12 @@ protected function getInsertColumnList() break; case ($property instanceof LocalColumnMetadata): - if (($property instanceof FieldMetadata && $property->getIdentifierGeneratorType() !== GeneratorType::IDENTITY) + if (($property instanceof FieldMetadata + && ( + ! $property->hasValueGenerator() + || $property->getValueGenerator()->getType() !== GeneratorType::IDENTITY + ) + ) || $this->class->identifier[0] !== $name ) { $columnName = $property->getColumnName(); diff --git a/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php index 253cf435841..14943cf339b 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php @@ -143,7 +143,7 @@ public function getSelectConditionStatementSQL( * * Subclasses may override this method to customize the semantics of entity deletion. * - * @return array An array of any generated post-insert IDs. Empty array if entity class does not use the IDENTITY generation strategy. + * @return void */ public function insert($entity); diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index b98d2e0179f..c40050a04c6 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -52,11 +52,10 @@ class JoinedSubclassPersister extends AbstractEntityInheritancePersister */ public function insert($entity) { - $postInsertIds = []; - $identifierComposite = $this->class->isIdentifierComposite(); $rootClass = ! $this->class->isRootEntity() ? $this->em->getClassMetadata($this->class->getRootClassName()) : $this->class; + $generationPlan = $this->class->getValueGenerationPlan(); // Prepare statement for the root table $rootPersister = $this->em->getUnitOfWork()->getEntityPersister($rootClass->getClassName()); @@ -97,20 +96,14 @@ public function insert($entity) $rootTableStmt->execute(); - if (! $identifierComposite - && ($property = $this->class->getProperty($this->class->getSingleIdentifierFieldName())) instanceof FieldMetadata - && $property->getIdentifierGenerator()->isPostInsertGenerator() - ) { - $generatedId = $property->getIdentifierGenerator()->generate($this->em, $entity); - $id = [$this->class->identifier[0] => $generatedId]; - - $postInsertIds = [ - $this->class->getSingleIdentifierFieldName() => $generatedId, - ]; + if ($generationPlan->containsDeferred()) { + $generationPlan->executeDeferred($this->em, $entity); + $id = $this->getIdentifier($entity); } else { $id = $this->em->getUnitOfWork()->getEntityIdentifier($entity); } + if ($this->class->isVersioned()) { $this->assignDefaultVersionValue($entity, $id); } @@ -150,8 +143,6 @@ public function insert($entity) foreach ($subTableStmts as $stmt) { $stmt->closeCursor(); } - - return $postInsertIds; } /** @@ -493,9 +484,10 @@ protected function getInsertColumnList() } if ( - $this->class->getClassName() !== $this->class->getRootClassName() || - $this->class->getProperty($name)->getIdentifierGeneratorType() !== GeneratorType::IDENTITY || - $this->class->identifier[0] !== $name + $this->class->getClassName() !== $this->class->getRootClassName() + || ! $this->class->getProperty($name)->hasValueGenerator() + || $this->class->getProperty($name)->getValueGenerator()->getType() !== GeneratorType::IDENTITY + || $this->class->identifier[0] !== $name ) { $columnName = $property->getColumnName(); diff --git a/lib/Doctrine/ORM/Sequencing/Generator.php b/lib/Doctrine/ORM/Sequencing/Generator.php index be173f67520..414f082684d 100644 --- a/lib/Doctrine/ORM/Sequencing/Generator.php +++ b/lib/Doctrine/ORM/Sequencing/Generator.php @@ -32,7 +32,7 @@ interface Generator * @param EntityManager $em * @param object $entity * - * @return mixed + * @return \Generator */ public function generate(EntityManager $em, $entity); diff --git a/lib/Doctrine/ORM/Sequencing/Planning/ColumnValueGeneratorExecutor.php b/lib/Doctrine/ORM/Sequencing/Planning/ColumnValueGeneratorExecutor.php new file mode 100644 index 00000000000..c92f5e768a5 --- /dev/null +++ b/lib/Doctrine/ORM/Sequencing/Planning/ColumnValueGeneratorExecutor.php @@ -0,0 +1,57 @@ +. + */ + +declare(strict_types=1); + +namespace Doctrine\ORM\Sequencing\Planning; + +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\LocalColumnMetadata; +use Doctrine\ORM\Sequencing\Generator; + +class ColumnValueGeneratorExecutor implements ValueGenerationExecutor +{ + /** @var LocalColumnMetadata */ + private $column; + + /** @var Generator */ + private $generator; + + public function __construct(LocalColumnMetadata $column, Generator $generator) + { + $this->column = $column; + $this->generator = $generator; + } + + public function execute(EntityManagerInterface $entityManager, /*object*/ $entity) : array + { + $value = $this->generator->generate($entityManager, $entity); + + $platform = $entityManager->getConnection()->getDatabasePlatform(); + $convertedValue = $this->column->getType()->convertToPHPValue($value, $platform); + + return [$this->column->getColumnName() => $convertedValue]; + } + + public function isDeferred() : bool + { + return $this->generator->isPostInsertGenerator(); + } +} diff --git a/lib/Doctrine/ORM/Sequencing/Planning/CompositeValueGenerationPlan.php b/lib/Doctrine/ORM/Sequencing/Planning/CompositeValueGenerationPlan.php new file mode 100644 index 00000000000..6378b1e8d3a --- /dev/null +++ b/lib/Doctrine/ORM/Sequencing/Planning/CompositeValueGenerationPlan.php @@ -0,0 +1,88 @@ +. + */ + +declare(strict_types=1); + +namespace Doctrine\ORM\Sequencing\Planning; + +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; + +class CompositeValueGenerationPlan implements ValueGenerationPlan +{ + /** @var ClassMetadata */ + private $class; + + /** @var ValueGenerationExecutor[] */ + private $executors; + + /** + * @param ValueGenerationExecutor[] $executors + */ + public function __construct(ClassMetadata $metadata, array $executors) + { + $this->class = $metadata; + $this->executors = $executors; + } + + public function executeImmediate(EntityManagerInterface $entityManager, /*object*/ $entity): void + { + foreach ($this->executors as $executor) { + if ($executor->isDeferred()) { + continue; + } + + $this->dispatchExecutor($executor, $entity, $entityManager); + } + } + + public function executeDeferred(EntityManagerInterface $entityManager, /*object*/ $entity): void + { + foreach ($this->executors as $executor) { + if (! $executor->isDeferred()) { + continue; + } + + $this->dispatchExecutor($executor, $entity, $entityManager); + } + } + + private function dispatchExecutor(ValueGenerationExecutor $executor, /*object*/ $entity, EntityManagerInterface $entityManager): void + { + foreach ($executor->execute($entityManager, $entity) as $columnName => $value) { + // TODO LocalColumnMetadata are currently shadowed and only exposed as FieldMetadata + /** @var FieldMetadata $column */ + $column = $this->class->getColumn($columnName); + $column->setValue($entity, $value); + } + } + + public function containsDeferred(): bool + { + foreach ($this->executors as $executor) { + if ($executor->isDeferred()) { + return true; + } + } + + return false; + } +} diff --git a/lib/Doctrine/ORM/Sequencing/Planning/NoopValueGenerationPlan.php b/lib/Doctrine/ORM/Sequencing/Planning/NoopValueGenerationPlan.php new file mode 100644 index 00000000000..31c9440fecb --- /dev/null +++ b/lib/Doctrine/ORM/Sequencing/Planning/NoopValueGenerationPlan.php @@ -0,0 +1,43 @@ +. + */ + +declare(strict_types=1); + +namespace Doctrine\ORM\Sequencing\Planning; + +use Doctrine\ORM\EntityManagerInterface; + +class NoopValueGenerationPlan implements ValueGenerationPlan +{ + public function executeImmediate(EntityManagerInterface $entityManager, /*object*/ $entity): void + { + // no-op + } + + public function executeDeferred(EntityManagerInterface $entityManager, /*object*/ $entity): void + { + // no-op + } + + public function containsDeferred() : bool + { + return false; + } +} diff --git a/lib/Doctrine/ORM/Sequencing/Planning/SingleValueGenerationPlan.php b/lib/Doctrine/ORM/Sequencing/Planning/SingleValueGenerationPlan.php new file mode 100644 index 00000000000..97e61a9862e --- /dev/null +++ b/lib/Doctrine/ORM/Sequencing/Planning/SingleValueGenerationPlan.php @@ -0,0 +1,70 @@ +. + */ + +declare(strict_types=1); + +namespace Doctrine\ORM\Sequencing\Planning; + +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; + +class SingleValueGenerationPlan implements ValueGenerationPlan +{ + /** @var ClassMetadata */ + private $class; + + /** @var ValueGenerationExecutor */ + private $executor; + + public function __construct(ClassMetadata $class, ValueGenerationExecutor $executor) + { + $this->class = $class; + $this->executor = $executor; + } + + public function executeImmediate(EntityManagerInterface $entityManager, /*object*/ $entity): void + { + if (! $this->executor->isDeferred()) { + $this->dispatchExecutor($entity, $entityManager); + } + } + + public function executeDeferred(EntityManagerInterface $entityManager, /*object*/ $entity) : void + { + if ($this->executor->isDeferred()) { + $this->dispatchExecutor($entity, $entityManager); + } + } + private function dispatchExecutor(/*object*/ $entity, EntityManagerInterface $entityManager): void + { + foreach ($this->executor->execute($entityManager, $entity) as $columnName => $value) { + // TODO LocalColumnMetadata are currently shadowed and only exposed as FieldMetadata + /** @var FieldMetadata $column */ + $column = $this->class->getColumn($columnName); + $column->setValue($entity, $value); + } + } + + public function containsDeferred(): bool + { + return $this->executor->isDeferred(); + } +} diff --git a/lib/Doctrine/ORM/Sequencing/Planning/ValueGenerationExecutor.php b/lib/Doctrine/ORM/Sequencing/Planning/ValueGenerationExecutor.php new file mode 100644 index 00000000000..48d4e818e3e --- /dev/null +++ b/lib/Doctrine/ORM/Sequencing/Planning/ValueGenerationExecutor.php @@ -0,0 +1,35 @@ +. + */ + +declare(strict_types=1); + +namespace Doctrine\ORM\Sequencing\Planning; + +use Doctrine\ORM\EntityManagerInterface; + +interface ValueGenerationExecutor +{ + /** + * @return mixed[] + */ + public function execute(EntityManagerInterface $entityManager, /*object*/ $entity): array; + + public function isDeferred(): bool; +} diff --git a/lib/Doctrine/ORM/Sequencing/Planning/ValueGenerationPlan.php b/lib/Doctrine/ORM/Sequencing/Planning/ValueGenerationPlan.php new file mode 100644 index 00000000000..9eb291953b9 --- /dev/null +++ b/lib/Doctrine/ORM/Sequencing/Planning/ValueGenerationPlan.php @@ -0,0 +1,34 @@ +. + */ + +declare(strict_types=1); + +namespace Doctrine\ORM\Sequencing\Planning; + +use Doctrine\ORM\EntityManagerInterface; + +interface ValueGenerationPlan +{ + public function executeImmediate(EntityManagerInterface $entityManager, /*object*/ $entity): void; + + public function executeDeferred(EntityManagerInterface $entityManager, /*object*/ $entity): void; + + public function containsDeferred(): bool; +} diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index 4df42a63c9a..3a42edb9c4a 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -335,8 +335,8 @@ private function formatColumn(ColumnMetadata $columnMetadata = null) $output[] = $this->formatField(' options', $this->formatValue($columnMetadata->getOptions())); if ($columnMetadata instanceof FieldMetadata) { - $output[] = $this->formatField(' Generator type', $this->formatValue($columnMetadata->getIdentifierGeneratorType())); - $output[] = $this->formatField(' Generator definition', $this->formatValue($columnMetadata->getIdentifierGeneratorDefinition())); + $output[] = $this->formatField(' Generator type', $this->formatValue($columnMetadata->getValueGenerator()->getType())); + $output[] = $this->formatField(' Generator definition', $this->formatValue($columnMetadata->getValueGenerator()->getDefinition())); } return $output; diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 7778f771e51..d8261632c7d 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -1168,7 +1168,7 @@ protected function generateEntityStubMethods(ClassMetadata $metadata) $methods[] = $code; } - if (( ! $property->isPrimaryKey() || $property->getIdentifierGeneratorType() == GeneratorType::NONE) && + if (( ! $property->isPrimaryKey() || ! $property->hasValueGenerator()) && ( ! $metadata->isEmbeddedClass || ! $this->embeddablesImmutable) && $code = $this->generateEntityStubMethod($metadata, 'set', $fieldName, $property->getTypeName(), $nullable)) { $methods[] = $code; @@ -1400,19 +1400,19 @@ protected function generateIdentifierAnnotation(Property $metadata) $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'Id'; if ($metadata instanceof FieldMetadata) { - if ($generatorType = $this->getIdGeneratorTypeString($metadata->getIdentifierGeneratorType())) { + if ($generatorType = $this->getIdGeneratorTypeString($metadata->getValueGenerator()->getType())) { $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'GeneratedValue(strategy="' . $generatorType . '")'; } - if ($metadata->getIdentifierGeneratorDefinition()) { + if ($metadata->getValueGenerator()->getType()) { $generator = []; - if (isset($metadata->getIdentifierGeneratorDefinition()['sequenceName'])) { - $generator[] = 'sequenceName="' . $metadata->getIdentifierGeneratorDefinition()['sequenceName'] . '"'; + if (isset($metadata->getValueGenerator()->getDefinition()['sequenceName'])) { + $generator[] = 'sequenceName="' . $metadata->getValueGenerator()->getDefinition()['sequenceName'] . '"'; } - if (isset($metadata->getIdentifierGeneratorDefinition()['allocationSize'])) { - $generator[] = 'allocationSize=' . $metadata->getIdentifierGeneratorDefinition()['allocationSize']; + if (isset($metadata->getValueGenerator()->getDefinition()['allocationSize'])) { + $generator[] = 'allocationSize=' . $metadata->getValueGenerator()->getDefinition()['allocationSize']; } $lines[] = $this->spaces . ' * @' . $this->annotationsPrefix . 'SequenceGenerator(' . implode(', ', $generator) . ')'; diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index ffbb7b8764b..f95dc483e3f 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -190,8 +190,12 @@ private function exportFieldMetadata(ClassMetadata $metadata, FieldMetadata $pro $lines[] = '$property->setNullable(' . $this->varExport($property->isNullable()) . ');'; $lines[] = '$property->setUnique(' . $this->varExport($property->isUnique()) . ');'; - if ($property->getIdentifierGeneratorType() !== GeneratorType::NONE) { - $lines[] = '$property->setIdentifierGeneratorType(Mapping\GeneratorType::' . $property->getIdentifierGeneratorType() . ');'; + if ($property->hasValueGenerator()) { + $lines[] = sprintf( + '$property->setValueGenerator(new Mapping\ValueGeneratorMetadata(%s, %s));', + $this->varExport($property->getValueGenerator()->getType()), + $this->varExport($property->getValueGenerator()->getDefinition()) + ); } $lines[] = null; diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index c3fc5e14eda..5a3c9892e80 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -207,10 +207,10 @@ public function exportClassMetadata(ClassMetadata $metadata) $idXml->addAttribute('length', $property->getLength()); } - if ($property->getIdentifierGeneratorType() !== GeneratorType::NONE) { + if ($property->hasValueGenerator()) { $generatorXml = $idXml->addChild('generator'); - $generatorXml->addAttribute('strategy', $property->getIdentifierGeneratorType()); + $generatorXml->addAttribute('strategy', $property->getValueGenerator()->getType()); $this->exportSequenceInformation($idXml, $property); } @@ -495,9 +495,9 @@ private function exportTableOptions(\SimpleXMLElement $parentXml, array $options */ private function exportSequenceInformation(\SimpleXMLElement $identifierXmlNode, FieldMetadata $metadata) { - $sequenceDefinition = $metadata->getIdentifierGeneratorDefinition(); + $sequenceDefinition = $metadata->getValueGenerator()->getDefinition(); - if (! ($metadata->getIdentifierGeneratorType() === GeneratorType::SEQUENCE && $sequenceDefinition)) { + if (! ($metadata->getValueGenerator()->getType() === GeneratorType::SEQUENCE && $sequenceDefinition)) { return; } diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 37dc11f33e2..52e3cea9afc 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -342,15 +342,16 @@ public function getSchemaFromMetadata(array $classes) foreach ($class->getProperties() as $property) { if (! $property instanceof FieldMetadata - || $property->getIdentifierGeneratorType() !== GeneratorType::SEQUENCE + || ! $property->hasValueGenerator() + || $property->getValueGenerator()->getType() !== GeneratorType::SEQUENCE || $class->getClassName() !== $class->getRootClassName()) { continue; } - $quotedName = $this->platform->quoteIdentifier($property->getIdentifierGeneratorDefinition()['sequenceName']); + $quotedName = $this->platform->quoteIdentifier($property->getValueGenerator()->getDefinition()['sequenceName']); if ( ! $schema->hasSequence($quotedName)) { - $schema->createSequence($quotedName, $property->getIdentifierGeneratorDefinition()['allocationSize']); + $schema->createSequence($quotedName, $property->getValueGenerator()->getDefinition()['allocationSize']); } } @@ -500,7 +501,7 @@ private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Tabl $options['customSchemaOptions'] = $fieldOptions; } - if ($fieldMetadata->getIdentifierGeneratorType() === GeneratorType::IDENTITY && $classMetadata->getIdentifierFieldNames() == [$fieldName]) { + if ($fieldMetadata->hasValueGenerator() && $fieldMetadata->getValueGenerator()->getType() === GeneratorType::IDENTITY && $classMetadata->getIdentifierFieldNames() == [$fieldName]) { $options['autoincrement'] = true; } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 363b65163b1..3e0d9afb5d3 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -55,7 +55,6 @@ use Doctrine\ORM\Persisters\Entity\JoinedSubclassPersister; use Doctrine\ORM\Persisters\Entity\SingleTablePersister; use Doctrine\ORM\Proxy\Proxy; -use Doctrine\ORM\Sequencing\AssignedGenerator; use Exception; use InvalidArgumentException; use UnexpectedValueException; @@ -549,7 +548,8 @@ public function computeChangeSet(ClassMetadata $class, $entity) if ( ( ! $class->isIdentifier($name) || ! $class->getProperty($name) instanceof FieldMetadata - || $class->getProperty($name)->getIdentifierGeneratorType() !== GeneratorType::IDENTITY + || ! $class->getProperty($name)->hasValueGenerator() + || $class->getProperty($name)->getValueGenerator()->getType() !== GeneratorType::IDENTITY ) && (! $class->isVersioned() || $name !== $class->versionProperty->getName())) { $actualData[$name] = $value; } @@ -831,26 +831,13 @@ private function persistNew($class, $entity) $this->listenersInvoker->invoke($class, Events::prePersist, $entity, new LifecycleEventArgs($entity, $this->em), $invoke); } - // TODO: Do not hardcode AssignedGenerator here, refactor once we implement ValueGenerationPlan - $idGen = ($class->isIdentifierComposite() || ! $class->getProperty($class->getSingleIdentifierFieldName()) instanceof FieldMetadata) - ? new AssignedGenerator() - : $class->getProperty($class->getSingleIdentifierFieldName())->getIdentifierGenerator(); - - if (! $idGen->isPostInsertGenerator()) { - $idValue = $idGen->generate($this->em, $entity); - - if (!$idGen instanceof AssignedGenerator) { - $persister = $this->getEntityPersister($class->getClassName()); - $idField = $class->getSingleIdentifierFieldName(); - $property = $class->getProperty($idField); - $platform = $this->em->getConnection()->getDatabasePlatform(); - $idValue = $property->getType()->convertToPHPValue($idValue, $platform); - $idValue = [$idField => $idValue]; - - $persister->setIdentifier($entity, $idValue); - } + $generationPlan = $class->getValueGenerationPlan(); + $persister = $this->getEntityPersister($class->getClassName()); + $generationPlan->executeImmediate($this->em, $entity); - $this->entityIdentifiers[$oid] = $idValue; + if (! $generationPlan->containsDeferred()) { + $id = $this->em->getIdentifierFlattener()->flattenIdentifier($class, $persister->getIdentifier($entity)); + $this->entityIdentifiers[$oid] = $id; } $this->entityStates[$oid] = self::STATE_MANAGED; @@ -902,7 +889,9 @@ public function recomputeSingleEntityChangeSet(ClassMetadata $class, $entity) break; case ($property instanceof FieldMetadata): - if (! $property->isPrimaryKey() || $property->getIdentifierGeneratorType() !== GeneratorType::IDENTITY) { + if (! $property->isPrimaryKey() + || ! $property->getValueGenerator() + || $property->getValueGenerator()->getType() !== GeneratorType::IDENTITY) { $actualData[$name] = $property->getValue($entity); } @@ -949,30 +938,26 @@ public function recomputeSingleEntityChangeSet(ClassMetadata $class, $entity) */ private function executeInserts($class) { - $className = $class->getClassName(); - $persister = $this->getEntityPersister($className); - $invoke = $this->listenersInvoker->getSubscribedSystems($class, Events::postPersist); + $className = $class->getClassName(); + $persister = $this->getEntityPersister($className); + $invoke = $this->listenersInvoker->getSubscribedSystems($class, Events::postPersist); + $generationPlan = $class->getValueGenerationPlan(); foreach ($this->entityInsertions as $oid => $entity) { if ($this->em->getClassMetadata(get_class($entity))->getClassName() !== $className) { continue; } - $postInsertId = $persister->insert($entity); + $persister->insert($entity); - if ($postInsertId) { - // Persister returned post-insert IDs - $idField = $class->getSingleIdentifierFieldName(); - $property = $class->getProperty($idField); - $platform = $this->em->getConnection()->getDatabasePlatform(); - $idValue = $property->getType()->convertToPHPValue($postInsertId[$idField], $platform); - $oid = spl_object_hash($entity); - - $property->setValue($entity, $idValue); + if ($generationPlan->containsDeferred()) { + // Entity has post-insert IDs + $oid = spl_object_hash($entity); + $id = $this->em->getIdentifierFlattener()->flattenIdentifier($class, $persister->getIdentifier($entity)); - $this->entityIdentifiers[$oid] = [$idField => $idValue]; + $this->entityIdentifiers[$oid] = $id; $this->entityStates[$oid] = self::STATE_MANAGED; - $this->originalEntityData[$oid][$idField] = $idValue; + $this->originalEntityData[$oid] = $id + $this->originalEntityData[$oid]; $this->addToIdentityMap($entity); } @@ -1060,10 +1045,7 @@ private function executeDeletions($class) if (! $class->isIdentifierComposite()) { $property = $class->getProperty($class->getSingleIdentifierFieldName()); - if ( - $property instanceof FieldMetadata - && $property->getIdentifierGeneratorType() !== GeneratorType::NONE - ) { + if ($property instanceof FieldMetadata && $property->hasValueGenerator()) { $property->setValue($entity, null); } } @@ -1431,7 +1413,7 @@ public function getEntityState($entity, $assume = null) if ($class->isIdentifierComposite() || ! $class->getProperty($class->getSingleIdentifierFieldName()) instanceof FieldMetadata - || $class->getProperty($class->getSingleIdentifierFieldName())->getIdentifierGeneratorType() === GeneratorType::NONE + || ! $class->getProperty($class->getSingleIdentifierFieldName())->hasValueGenerator() ) { // Check for a version field, if available, to avoid a db lookup. if ($class->isVersioned()) { @@ -1455,7 +1437,7 @@ public function getEntityState($entity, $assume = null) if ($class->isIdentifierComposite() || ! $class->getProperty($class->getSingleIdentifierFieldName()) instanceof FieldMetadata - || ! $class->getProperty($class->getSingleIdentifierFieldName())->getIdentifierGenerator()->isPostInsertGenerator()) { + || ! $class->getValueGenerationPlan()->containsDeferred()) { // if we have a pre insert generator we can't be sure that having an id // really means that the entity exists. We have to verify this through // the last resort: a db lookup @@ -1819,7 +1801,7 @@ private function doMerge($entity, array &$visited, $prevManagedCopy = null, Asso // since the managed entity was not found. if (! $class->isIdentifierComposite() && $class->getProperty($class->getSingleIdentifierFieldName()) instanceof FieldMetadata - && $class->getProperty($class->getSingleIdentifierFieldName())->getIdentifierGeneratorType() !== GeneratorType::NONE) { + && $class->getProperty($class->getSingleIdentifierFieldName())->hasValueGenerator()) { throw EntityNotFoundException::fromClassNameAndIdentifier( $class->getClassName(), $this->em->getIdentifierFlattener()->flattenIdentifier($class, $id) diff --git a/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php b/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php index a43a84ec53a..03ce8e9ac97 100644 --- a/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php +++ b/tests/Doctrine/Tests/Mocks/EntityPersisterMock.php @@ -29,11 +29,6 @@ class EntityPersisterMock extends BasicEntityPersister */ private $deletes = []; - /** - * @var int - */ - private $identityColumnValueCounter = 0; - /** * @var string|null */ @@ -61,16 +56,9 @@ public function insert($entity) { $this->inserts[] = $entity; - if ($this->mockIdGeneratorType === GeneratorType::IDENTITY - || $this->class->getProperty($this->class->getSingleIdentifierFieldName())->getIdentifierGeneratorType() === GeneratorType::IDENTITY) { - $id = $this->identityColumnValueCounter++; - - return [ - $this->class->getSingleIdentifierFieldName() => $id, - ]; + if ($this->class->getValueGenerationPlan()->containsDeferred()) { + $this->class->getValueGenerationPlan()->executeDeferred($this->em, $entity); } - - return []; } /** @@ -127,7 +115,6 @@ public function getDeletes() public function reset() { $this->existsCalled = false; - $this->identityColumnValueCounter = 0; $this->inserts = []; $this->updates = []; $this->deletes = []; diff --git a/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php b/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php index b5a7b996486..206289ed04c 100644 --- a/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php +++ b/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php @@ -52,7 +52,6 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php index f466aad16eb..0ccd6ca99bb 100644 --- a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php +++ b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php @@ -90,7 +90,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('user_id'); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); + $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php b/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php index c8f8d1df583..d788bfc912b 100644 --- a/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php +++ b/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php @@ -40,7 +40,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('id'); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); + $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php index 31b729532d4..7363e524317 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php @@ -28,7 +28,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); + $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php b/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php index 801bcb5dbbf..634ca5994a9 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php @@ -22,7 +22,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); + $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); $metadata->addProperty($fieldMetadata); } diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php b/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php index 25cbd81de8c..464b5bfd83d 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php @@ -20,7 +20,6 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) { $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); $metadata->isMappedSuperclass = true; diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php index 062d5b7412e..0c223e85c18 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php @@ -117,7 +117,7 @@ public static function loadMetadata(Mapping\ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('user_id'); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); + $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php index 5870f33af78..cb0222316dc 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php @@ -208,10 +208,9 @@ public function testInvokeInsert() $this->entityPersister->expects($this->once()) ->method('insert') - ->with($this->equalTo($entity)) - ->will($this->returnValue(['generatedId' => 1])); + ->with($this->equalTo($entity)); - self::assertEquals(['generatedId' => 1], $persister->insert($entity)); + self::assertNull($persister->insert($entity)); } public function testInvokeUpdate() diff --git a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php index 7809ae7c30f..a4d763df8ac 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SchemaTool/PostgreSqlSchemaToolTest.php @@ -24,7 +24,7 @@ public function testPostgresMetadataSequenceIncrementedBy10() { $address = $this->em->getClassMetadata(Models\CMS\CmsAddress::class); - self::assertEquals(1, $address->getProperty('id')->getIdentifierGeneratorDefinition()['allocationSize']); + self::assertEquals(1, $address->getProperty('id')->getValueGenerator()->getDefinition()['allocationSize']); } public function testGetCreateSchemaSql() diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php index da0ef5304ce..ec7f4bdfcbc 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2387Test.php @@ -26,7 +26,7 @@ public function testCompositeAssociationKeyDetection() $metadata = $this->convertToClassMetadata([$product, $attributes], []); - self::assertEquals(GeneratorType::NONE, $metadata['Ddc2387Attributes']->getProperty('productId')->getIdentifierGeneratorType()); - self::assertEquals(GeneratorType::AUTO, $metadata['Ddc2387Product']->getProperty('id')->getIdentifierGeneratorType()); + self::assertFalse($metadata['Ddc2387Attributes']->getProperty('productId')->hasValueGenerator()); + self::assertEquals(GeneratorType::AUTO, $metadata['Ddc2387Product']->getProperty('id')->getValueGenerator()->getType()); } } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php index 49175ce48a3..609866181b5 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3634Test.php @@ -22,7 +22,7 @@ protected function setUp() $metadata = $this->em->getClassMetadata(DDC3634Entity::class); - if ( ! $metadata->getProperty('id')->getIdentifierGenerator()->isPostInsertGenerator()) { + if ( ! $metadata->getValueGenerationPlan()->containsDeferred()) { $this->markTestSkipped('Need a post-insert ID generator in order to make this test work correctly'); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 0224db8ed5d..79f6d22b033 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -183,7 +183,7 @@ public function testEntitySequence($class) { self::assertInternalType( 'array', - $class->getProperty('id')->getIdentifierGeneratorDefinition(), + $class->getProperty('id')->getValueGenerator()->getDefinition(), 'No Sequence Definition set on this driver.' ); self::assertEquals( @@ -191,7 +191,7 @@ public function testEntitySequence($class) 'sequenceName' => 'tablename_seq', 'allocationSize' => 100, ], - $class->getProperty('id')->getIdentifierGeneratorDefinition() + $class->getProperty('id')->getValueGenerator()->getDefinition() ); } @@ -199,13 +199,13 @@ public function testEntityCustomGenerator() { $class = $this->createClassMetadata(Animal::class); - self::assertEquals(Mapping\GeneratorType::CUSTOM, $class->getProperty('id')->getIdentifierGeneratorType(), "Generator Type"); + self::assertEquals(Mapping\GeneratorType::CUSTOM, $class->getProperty('id')->getValueGenerator()->getType(), "Generator Type"); self::assertEquals( [ 'class' => 'stdClass', 'arguments' => [], ], - $class->getProperty('id')->getIdentifierGeneratorDefinition(), + $class->getProperty('id')->getValueGenerator()->getDefinition(), "Generator Definition" ); } @@ -325,7 +325,7 @@ public function testIdentifier($class) self::assertEquals('integer', $property->getTypeName()); self::assertEquals(['id'], $class->identifier); - self::assertEquals(Mapping\GeneratorType::AUTO, $property->getIdentifierGeneratorType(), "ID-Generator is not GeneratorType::AUTO"); + self::assertEquals(Mapping\GeneratorType::AUTO, $property->getValueGenerator()->getType(), "ID-Generator is not GeneratorType::AUTO"); return $class; } @@ -563,7 +563,7 @@ public function testDefaultFieldType() self::assertEquals('id', $idProperty->getColumnName()); self::assertEquals('name', $nameProperty->getColumnName()); - self::assertEquals(Mapping\GeneratorType::NONE, $idProperty->getIdentifierGeneratorType()); + self::assertFalse($idProperty->hasValueGenerator()); } /** @@ -1315,13 +1315,13 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); $fieldMetadata->setOptions(['foo' => 'bar', 'unsigned' => false]); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); - $fieldMetadata->setIdentifierGeneratorDefinition( + $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata( + Mapping\GeneratorType::AUTO, [ 'sequenceName' => 'tablename_seq', 'allocationSize' => 100, ] - ); + )); $metadata->addProperty($fieldMetadata); @@ -1433,13 +1433,13 @@ abstract class Animal public static function loadMetadata(ClassMetadata $metadata) { $id = new Mapping\FieldMetadata('id'); - $id->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); - $id->setIdentifierGeneratorDefinition( + $id->setValueGenerator(new Mapping\ValueGeneratorMetadata( + Mapping\GeneratorType::CUSTOM, [ 'class' => 'stdClass', 'arguments' => [], ] - ); + )); $metadata->addProperty($id); } } @@ -1510,7 +1510,6 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnDefinition('INT unsigned NOT NULL'); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -1545,7 +1544,6 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -1626,7 +1624,6 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); @@ -1667,7 +1664,6 @@ public static function loadMetadata(ClassMetadata $metadata) $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index 88cc0fea993..36ad97c0c44 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -6,6 +6,7 @@ use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\EntityRepository; +use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\Mapping\TransientMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\ClassMetadata; @@ -151,10 +152,10 @@ public function testGeneratedValueFromMappedSuperclass() /* @var ClassMetadata $class */ $class = $this->cmf->getMetadataFor(SuperclassEntity::class); - self::assertInstanceOf(SequenceGenerator::class, $class->getProperty('id')->getIdentifierGenerator()); + self::assertSame(GeneratorType::SEQUENCE, $class->getProperty('id')->getValueGenerator()->getType()); self::assertEquals( ['allocationSize' => 1, 'sequenceName' => 'foo'], - $class->getProperty('id')->getIdentifierGeneratorDefinition() + $class->getProperty('id')->getValueGenerator()->getDefinition() ); } @@ -167,10 +168,10 @@ public function testSequenceDefinitionInHierarchyWithSandwichMappedSuperclass() /* @var ClassMetadata $class */ $class = $this->cmf->getMetadataFor(HierarchyD::class); - self::assertInstanceOf(SequenceGenerator::class, $class->getProperty('id')->getIdentifierGenerator()); + self::assertSame(GeneratorType::SEQUENCE, $class->getProperty('id')->getValueGenerator()->getType()); self::assertEquals( ['allocationSize' => 1, 'sequenceName' => 'foo'], - $class->getProperty('id')->getIdentifierGeneratorDefinition() + $class->getProperty('id')->getValueGenerator()->getDefinition() ); } @@ -183,10 +184,10 @@ public function testMultipleMappedSuperclasses() /* @var ClassMetadata $class */ $class = $this->cmf->getMetadataFor(MediumSuperclassEntity::class); - self::assertInstanceOf(SequenceGenerator::class, $class->getProperty('id')->getIdentifierGenerator()); + self::assertSame(GeneratorType::SEQUENCE, $class->getProperty('id')->getValueGenerator()->getType()); self::assertEquals( ['allocationSize' => 1, 'sequenceName' => 'foo'], - $class->getProperty('id')->getIdentifierGeneratorDefinition() + $class->getProperty('id')->getValueGenerator()->getDefinition() ); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 2dc90ea7c36..1294faa83a4 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -56,7 +56,7 @@ public function testGetMetadataForSingleClass() // Prechecks self::assertEquals([], $cm1->getParentClasses()); self::assertEquals(Mapping\InheritanceType::NONE, $cm1->inheritanceType); - self::assertEquals(Mapping\GeneratorType::AUTO, $cm1->getProperty('id')->getIdentifierGeneratorType()); + self::assertEquals(Mapping\GeneratorType::AUTO, $cm1->getProperty('id')->getValueGenerator()->getType()); self::assertTrue($cm1->hasField('name')); self::assertCount(4, $cm1->getProperties()); // 2 fields + 2 associations self::assertEquals('group', $cm1->table->getName()); @@ -70,35 +70,17 @@ public function testGetMetadataForSingleClass() self::assertTrue($cmMap1->hasField('name')); } - public function testGetMetadataFor_ReturnsLoadedCustomIdGenerator() - { - $cm1 = $this->createValidClassMetadata(); - - $cm1->getProperty('id')->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); - $cm1->getProperty('id')->setIdentifierGeneratorDefinition([ - 'class' => CustomIdGenerator::class, - 'arguments' => [], - ]); - - $cmf = $this->createTestFactory(); - - $cmf->setMetadataForClass($cm1->getClassName(), $cm1); - - $actual = $cmf->getMetadataFor($cm1->getClassName()); - - self::assertEquals(Mapping\GeneratorType::CUSTOM, $actual->getProperty('id')->getIdentifierGeneratorType()); - self::assertInstanceOf(CustomIdGenerator::class, $actual->getProperty('id')->getIdentifierGenerator()); - } - public function testGetMetadataFor_ThrowsExceptionOnUnknownCustomGeneratorClass() { $cm1 = $this->createValidClassMetadata(); - $cm1->getProperty('id')->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); - $cm1->getProperty('id')->setIdentifierGeneratorDefinition([ - 'class' => 'NotExistingGenerator', - 'arguments' => [], - ]); + $cm1->getProperty('id')->setValueGenerator(new Mapping\ValueGeneratorMetadata( + Mapping\GeneratorType::CUSTOM, + [ + 'class' => 'NotExistingGenerator', + 'arguments' => [], + ] + )); $cmf = $this->createTestFactory(); @@ -112,7 +94,7 @@ public function testGetMetadataFor_ThrowsExceptionOnUnknownCustomGeneratorClass( public function testGetMetadataFor_ThrowsExceptionOnMissingCustomGeneratorDefinition() { $cm1 = $this->createValidClassMetadata(); - $cm1->getProperty('id')->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); + $cm1->getProperty('id')->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::CUSTOM)); $cmf = $this->createTestFactory(); $cmf->setMetadataForClass($cm1->getClassName(), $cm1); $this->expectException(ORMException::class); @@ -294,7 +276,7 @@ protected function createValidClassMetadata() $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); + $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); $cm1->addProperty($fieldMetadata); @@ -541,7 +523,7 @@ class CustomIdGenerator implements Generator /** * {@inheritdoc} */ - public function generate(EntityManager $em, $entity) + public function generate(EntityManager $em, $entity): \Generator { } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 9640f85895a..9c018531b03 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -1360,16 +1360,18 @@ public function testQuotedSequenceName() $cm->initializeReflection(new RuntimeReflectionService()); $id = new Mapping\FieldMetadata('id'); - $id->setIdentifierGeneratorType(Mapping\GeneratorType::SEQUENCE); - $id->setIdentifierGeneratorDefinition([ - 'sequenceName' => 'foo', - 'allocationSize' => 1, - ]); + $id->setValueGenerator(new Mapping\ValueGeneratorMetadata( + Mapping\GeneratorType::SEQUENCE, + [ + 'sequenceName' => 'foo', + 'allocationSize' => 1, + ] + )); $cm->addProperty($id); self::assertEquals( ['sequenceName' => 'foo', 'allocationSize' => 1], - $cm->getProperty('id')->getIdentifierGeneratorDefinition() + $cm->getProperty('id')->getValueGenerator()->getDefinition() ); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php index 1d20488f316..480f5632524 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php @@ -26,7 +26,7 @@ $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::IDENTITY); +$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::IDENTITY)); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php index 002d42b8d0d..aa5c8448181 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php @@ -10,7 +10,6 @@ $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php index e4def86f84a..9911c4f9b80 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php @@ -17,6 +17,6 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); +$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php index f571821f839..5d250d75249 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php @@ -16,6 +16,6 @@ $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); +$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php index 280d3346aa4..1b48aa1a52c 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php @@ -11,7 +11,7 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('user_id'); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); +$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php index 38b662c52c0..3cce440b9bd 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php @@ -11,7 +11,7 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('id'); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); +$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php index 422ed5be239..da45bfd935a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php @@ -13,7 +13,7 @@ $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); +$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php index 42f056cdaa3..0c6c0be3cf6 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php @@ -11,7 +11,7 @@ $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); +$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php index 825e3d7a3fc..2674e4ddaed 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php @@ -12,7 +12,7 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnName('user_id'); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); +$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php index 676ceedc4c9..0bb63933841 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php @@ -33,12 +33,12 @@ $fieldMetadata->setPrimaryKey(true); $fieldMetadata->setNullable(false); $fieldMetadata->setUnique(false); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::CUSTOM); -$fieldMetadata->setIdentifierGeneratorDefinition( +$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata( + Mapping\GeneratorType::CUSTOM, [ 'class' => 'stdClass', 'arguments' => [], ] -); +)); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php index 34c96314fbb..e3071d2cf86 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php @@ -11,7 +11,6 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setColumnDefinition('INT unsigned NOT NULL'); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php index 4863a3981db..a2d62d9f7b0 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php @@ -10,7 +10,6 @@ $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::NONE); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index 8033822a663..440a87abd80 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -57,13 +57,13 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); $fieldMetadata->setOptions(['foo' => 'bar', 'unsigned' => false]); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); -$fieldMetadata->setIdentifierGeneratorDefinition( +$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata( + Mapping\GeneratorType::AUTO, [ 'sequenceName' => 'tablename_seq', 'allocationSize' => 100, ] -); +)); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index f31a773a7ce..ad27b67a524 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -119,7 +119,7 @@ public function generateBookEntityFixture(array $embeddedClasses = []) $fieldMetadata->setPrimaryKey(true); $fieldMetadata->setNullable(false); $fieldMetadata->setUnique(false); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); + $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); $metadata->addProperty($fieldMetadata); @@ -196,7 +196,7 @@ private function generateEntityTypeFixture(array $field) $fieldMetadata->setPrimaryKey(true); $fieldMetadata->setNullable(false); $fieldMetadata->setUnique(false); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); + $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); $metadata->addProperty($fieldMetadata); @@ -664,13 +664,13 @@ public function testGenerateEntityWithSequenceGenerator() $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::SEQUENCE); - $fieldMetadata->setIdentifierGeneratorDefinition( + $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata( + Mapping\GeneratorType::SEQUENCE, [ 'sequenceName' => 'DDC1784_ID_SEQ', 'allocationSize' => 1, ] - ); + )); $metadata->addProperty($fieldMetadata); @@ -702,7 +702,7 @@ public function testGenerateEntityWithMultipleInverseJoinColumns() $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::SEQUENCE); + $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::SEQUENCE)); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index 587b476f845..20914f6e2f8 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -180,7 +180,7 @@ public function testIdentifierIsExported($class) self::assertTrue($property->isPrimaryKey()); self::assertEquals(['id'], $class->identifier); - self::assertEquals(GeneratorType::IDENTITY, $class->getProperty('id')->getIdentifierGeneratorType(), "Generator Type wrong"); + self::assertEquals(GeneratorType::IDENTITY, $class->getProperty('id')->getValueGenerator()->getType(), "Generator Type wrong"); return $class; } diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php index 67b4da378d9..280e324e8e3 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php @@ -52,13 +52,13 @@ public function testSequenceGenerator() { $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::SEQUENCE); - $fieldMetadata->setIdentifierGeneratorDefinition( + $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata( + Mapping\GeneratorType::SEQUENCE, [ 'sequenceName' => 'seq_entity_test_id', 'allocationSize' => 5, ] - ); + )); $metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php index a941e560967..07e4a18f718 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php @@ -24,7 +24,7 @@ $fieldMetadata->setType(Type::getType('integer')); $fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setIdentifierGeneratorType(Mapping\GeneratorType::AUTO); +$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); $metadata->addProperty($fieldMetadata); From c1926460dceb1def0a33ce4abb0d32ded5bf025f Mon Sep 17 00:00:00 2001 From: Michael Moravec Date: Fri, 28 Jul 2017 03:40:22 +0200 Subject: [PATCH 184/275] Drop AssignedGenerator (obsoleted by ValueGenerationPlan) --- .../ORM/Sequencing/AssignedGenerator.php | 78 ------------------- .../ORM/Sequencing/AssignedGeneratorTest.php | 73 ----------------- 2 files changed, 151 deletions(-) delete mode 100644 lib/Doctrine/ORM/Sequencing/AssignedGenerator.php delete mode 100644 tests/Doctrine/Tests/ORM/Sequencing/AssignedGeneratorTest.php diff --git a/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php b/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php deleted file mode 100644 index 7ce3754eb68..00000000000 --- a/lib/Doctrine/ORM/Sequencing/AssignedGenerator.php +++ /dev/null @@ -1,78 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace Doctrine\ORM\Sequencing; - -use Doctrine\ORM\EntityManager; -use Doctrine\ORM\Mapping\AssociationMetadata; -use Doctrine\ORM\ORMException; - -/** - * Special generator for application-assigned sequencing (doesn't really generate anything). - * - * @since 2.0 - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - */ -class AssignedGenerator implements Generator -{ - /** - * Returns the identifier assigned to the given entity. - * - * {@inheritdoc} - * - * @throws \Doctrine\ORM\ORMException - */ - public function generate(EntityManager $em, $entity) - { - $class = $em->getClassMetadata(get_class($entity)); - $idFields = $class->getIdentifierFieldNames(); - $identifier = []; - - foreach ($idFields as $idField) { - $property = $class->getProperty($idField); - $value = $property->getValue($entity); - - if ( ! isset($value)) { - throw ORMException::entityMissingAssignedIdForField($entity, $idField); - } - - if ($property instanceof AssociationMetadata) { - // NOTE: Single Columns as associated identifiers only allowed - this constraint it is enforced. - $value = $em->getUnitOfWork()->getSingleIdentifierValue($value); - } - - $identifier[$idField] = $value; - } - - return $identifier; - } - - /** - * {@inheritdoc} - */ - public function isPostInsertGenerator() - { - return false; - } -} diff --git a/tests/Doctrine/Tests/ORM/Sequencing/AssignedGeneratorTest.php b/tests/Doctrine/Tests/ORM/Sequencing/AssignedGeneratorTest.php deleted file mode 100644 index 71305593079..00000000000 --- a/tests/Doctrine/Tests/ORM/Sequencing/AssignedGeneratorTest.php +++ /dev/null @@ -1,73 +0,0 @@ -em = $this->getTestEntityManager(); - $this->assignedGen = new AssignedGenerator; - } - - /** - * @dataProvider entitiesWithoutId - */ - public function testThrowsExceptionIfIdNotAssigned($entity) - { - $this->expectException(ORMException::class); - - $this->assignedGen->generate($this->em, $entity); - } - - public function entitiesWithoutId(): array - { - return [ - 'single' => [new AssignedSingleIdEntity()], - 'composite' => [new AssignedCompositeIdEntity()], - ]; - } - - public function testCorrectIdGeneration() - { - $entity = new AssignedSingleIdEntity; - $entity->myId = 1; - $id = $this->assignedGen->generate($this->em, $entity); - self::assertEquals(['myId' => 1], $id); - - $entity = new AssignedCompositeIdEntity; - $entity->myId2 = 2; - $entity->myId1 = 4; - $id = $this->assignedGen->generate($this->em, $entity); - self::assertEquals(['myId1' => 4, 'myId2' => 2], $id); - } -} - -/** @ORM\Entity */ -class AssignedSingleIdEntity { - /** @ORM\Id @ORM\Column(type="integer") */ - public $myId; -} - -/** @ORM\Entity */ -class AssignedCompositeIdEntity { - /** @ORM\Id @ORM\Column(type="integer") */ - public $myId1; - /** @ORM\Id @ORM\Column(type="integer") */ - public $myId2; -} From 352830c17d8a29695a99962d665ee75f309c7c8f Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 31 Jul 2017 15:22:37 -0400 Subject: [PATCH 185/275] Fixed issue with associatied entities implementing __toString() --- .../Entity/AbstractEntityPersister.php | 8 + .../AbstractEntityInheritancePersister.php | 2 +- .../Entity/BasicEntityPersister.php | 280 ++++++++++-------- .../ORM/Persisters/Entity/EntityPersister.php | 10 +- .../ORM/Utility/IdentifierFlattener.php | 5 +- .../Entity/AbstractEntityPersisterTest.php | 1 + .../BasicEntityPersisterTypeValueSqlTest.php | 2 + 7 files changed, 183 insertions(+), 125 deletions(-) diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php index 93dd1ddd356..cfceb3d421e 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php @@ -374,6 +374,14 @@ public function setIdentifier($entity, array $id) : void $this->persister->setIdentifier($entity, $id); } + /** + * {@inheritdoc} + */ + public function getColumnValue($entity, string $columnName) + { + return $this->persister->getColumnValue($entity, $columnName); + } + /** * {@inheritdoc} */ diff --git a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php index 9c052c98260..182e40fd6b7 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php @@ -39,7 +39,7 @@ abstract class AbstractEntityInheritancePersister extends BasicEntityPersister /** * {@inheritdoc} */ - protected function prepareInsertData($entity) + protected function prepareInsertData($entity) : array { $data = parent::prepareInsertData($entity); diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 4966fb276a7..f66f9d22592 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -374,6 +374,71 @@ public function update($entity) } } + /** + * {@inheritdoc} + */ + public function delete($entity) + { + $class = $this->class; + $unitOfWork = $this->em->getUnitOfWork(); + $identifier = $unitOfWork->getEntityIdentifier($entity); + $tableName = $class->table->getQuotedQualifiedName($this->platform); + + $types = []; + $id = []; + + foreach ($class->identifier as $field) { + $property = $class->getProperty($field); + + if ($property instanceof FieldMetadata) { + $columnName = $property->getColumnName(); + $quotedColumnName = $this->platform->quoteIdentifier($columnName); + + $id[$quotedColumnName] = $identifier[$field]; + $types[] = $property->getType(); + + continue; + } + + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); + $joinColumns = $property instanceof ManyToManyAssociationMetadata + ? $property->getTable()->getJoinColumns() + : $property->getJoinColumns() + ; + + $associationValue = null; + + if (($value = $identifier[$field]) !== null) { + // @todo guilhermeblanco Make sure we do not have flat association values. + if (! is_array($value)) { + $value = [$targetClass->identifier[0] => $value]; + } + + $associationValue = $value; + } + + foreach ($joinColumns as $joinColumn) { + $joinColumnName = $joinColumn->getColumnName(); + $referencedColumnName = $joinColumn->getReferencedColumnName(); + $quotedJoinColumnName = $this->platform->quoteIdentifier($joinColumnName); + $targetField = $targetClass->fieldNames[$referencedColumnName]; + + if (! $joinColumn->getType()) { + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) + ); + } + + $id[$quotedJoinColumnName] = $associationValue ? $associationValue[$targetField] : null; + $types[] = $joinColumn->getType(); + } + } + + $this->deleteJoinTableRecords($identifier); + + return (bool) $this->conn->delete($tableName, $id, $types); + } + /** * Performs an UPDATE statement for an entity on a specific table. * The UPDATE can optionally be versioned, which requires the entity to have a version field. @@ -406,7 +471,7 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat } $where = []; - $identifier = $this->em->getUnitOfWork()->getEntityIdentifier($entity); + $identifier = $this->getIdentifier($entity); foreach ($this->class->identifier as $idField) { $property = $this->class->getProperty($idField); @@ -419,19 +484,27 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat continue; } - $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); - $joinColumns = $property->getJoinColumns(); - $joinColumn = reset($joinColumns); + /** @var ToOneAssociationMetadata $property */ + $targetPersister = $this->em->getUnitOfWork()->getEntityPersister($property->getTargetEntity()); - if (! $joinColumn->getType()) { - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) - ); - } + foreach ($property->getJoinColumns() as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ + $referencedColumnName = $joinColumn->getReferencedColumnName(); - $params[] = $identifier[$idField]; - $where[] = $joinColumn->getColumnName(); - $types[] = $joinColumn->getType(); + if (! $joinColumn->getType()) { + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); + + $joinColumn->setType( + PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) + ); + } + + $value = $targetPersister->getColumnValue($identifier[$idField], $referencedColumnName); + + $params[] = $value; + $where[] = $joinColumn->getColumnName(); + $types[] = $joinColumn->getType(); + } } if ($versioned) { @@ -539,68 +612,18 @@ protected function deleteJoinTableRecords($identifier) } /** - * {@inheritdoc} + * Prepares the data changeset of a managed entity for database insertion (initial INSERT). + * The changeset of the entity is obtained from the currently running UnitOfWork. + * + * The default insert data preparation is the same as for updates. + * + * @param object $entity The entity for which to prepare the data. + * + * @return array The prepared data for the tables to update. */ - public function delete($entity) + protected function prepareInsertData($entity) : array { - $class = $this->class; - $unitOfWork = $this->em->getUnitOfWork(); - $identifier = $unitOfWork->getEntityIdentifier($entity); - $tableName = $class->table->getQuotedQualifiedName($this->platform); - - $types = []; - $id = []; - - foreach ($class->identifier as $field) { - $property = $class->getProperty($field); - - if ($property instanceof FieldMetadata) { - $columnName = $property->getColumnName(); - $quotedColumnName = $this->platform->quoteIdentifier($columnName); - - $id[$quotedColumnName] = $identifier[$field]; - $types[] = $property->getType(); - - continue; - } - - $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); - $joinColumns = $property instanceof ManyToManyAssociationMetadata - ? $property->getTable()->getJoinColumns() - : $property->getJoinColumns() - ; - - $associationValue = null; - - if (($value = $identifier[$field]) !== null) { - // @todo guilhermeblanco Make sure we do not have flat association values. - if (! is_array($value)) { - $value = [$targetClass->identifier[0] => $value]; - } - - $associationValue = $value; - } - - foreach ($joinColumns as $joinColumn) { - $joinColumnName = $joinColumn->getColumnName(); - $referencedColumnName = $joinColumn->getReferencedColumnName(); - $quotedJoinColumnName = $this->platform->quoteIdentifier($joinColumnName); - $targetField = $targetClass->fieldNames[$referencedColumnName]; - - if (! $joinColumn->getType()) { - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) - ); - } - - $id[$quotedJoinColumnName] = $associationValue ? $associationValue[$targetField] : null; - $types[] = $joinColumn->getType(); - } - } - - $this->deleteJoinTableRecords($identifier); - - return (bool) $this->conn->delete($tableName, $id, $types); + return $this->prepareUpdateData($entity); } /** @@ -633,27 +656,20 @@ protected function prepareUpdateData($entity) : null ; - foreach ($uow->getEntityChangeSet($entity) as $field => $change) { - if ($versionPropertyName === $field) { + // @todo guilhermeblanco This should check column insertability/updateability instead of field changeset + foreach ($uow->getEntityChangeSet($entity) as $propertyName => $propertyChangeSet) { + if ($versionPropertyName === $propertyName) { continue; } - $property = $this->class->getProperty($field); - - /*if (isset($this->class->embeddedClasses[$field])) { - continue; - }*/ - - $newVal = $change[1]; + $property = $this->class->getProperty($propertyName); + $newValue = $propertyChangeSet[1]; if ($property instanceof FieldMetadata) { - // @todo this should be used instead - $tableName = $property->getTableName(); - $columnName = $property->getColumnName(); - - $this->columns[$columnName] = $property; + // @todo guilhermeblanco Please remove this in the future for good... + $this->columns[$property->getColumnName()] = $property; - $result[$tableName][$columnName] = $newVal; + $result[$property->getTableName()][$property->getColumnName()] = $newValue; continue; } @@ -663,38 +679,35 @@ protected function prepareUpdateData($entity) continue; } - if ($newVal !== null && $uow->isScheduledForInsert($newVal)) { - // The associated entity $newVal is not yet persisted, so we must - // set $newVal = null, in order to insert a null value and schedule an - // extra update on the UnitOfWork. - $uow->scheduleExtraUpdate($entity, [$field => [null, $newVal]]); - - $newVal = null; - } - - $newValId = null; + // The associated entity $newVal is not yet persisted, so we must + // set $newVal = null, in order to insert a null value and schedule an + // extra update on the UnitOfWork. + if ($newValue !== null && $uow->isScheduledForInsert($newValue)) { + $uow->scheduleExtraUpdate($entity, [$propertyName => [null, $newValue]]); - if ($newVal !== null) { - $newValId = $uow->getEntityIdentifier($newVal); + $newValue = null; } - $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); + $targetPersister = $uow->getEntityPersister($targetClass->getClassName()); foreach ($property->getJoinColumns() as $joinColumn) { - $tableName = $joinColumn->getTableName(); - $columnName = $joinColumn->getColumnName(); + /** @var JoinColumnMetadata $joinColumn */ $referencedColumnName = $joinColumn->getReferencedColumnName(); - $targetField = $targetClass->fieldNames[$referencedColumnName]; if (! $joinColumn->getType()) { - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) - ); + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); + + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em)); } - $this->columns[$columnName] = $joinColumn; + // @todo guilhermeblanco Please remove this in the future for good... + $this->columns[$joinColumn->getColumnName()] = $joinColumn; - $result[$tableName][$columnName] = $newValId ? $newValId[$targetField] : null; + $result[$joinColumn->getTableName()][$joinColumn->getColumnName()] = $newValue !== null + ? $targetPersister->getColumnValue($newValue, $referencedColumnName) + : null + ; } } @@ -702,20 +715,49 @@ protected function prepareUpdateData($entity) } /** - * Prepares the data changeset of a managed entity for database insertion (initial INSERT). - * The changeset of the entity is obtained from the currently running UnitOfWork. - * - * The default insert data preparation is the same as for updates. - * - * @param object $entity The entity for which to prepare the data. - * - * @return array The prepared data for the tables to update. + * @param object $entity + * @param string $columnName * - * @see prepareUpdateData + * @return mixed|null */ - protected function prepareInsertData($entity) + public function getColumnValue($entity, string $columnName) { - return $this->prepareUpdateData($entity); + // Looking for fields by column is the easiest way to look at local columns or x-1 owning side associations + $propertyName = $this->class->fieldNames[$columnName]; + $property = $this->class->getProperty($propertyName); + + if (! $property) { + return null; + } + + $propertyValue = $property->getValue($entity); + + if ($property instanceof LocalColumnMetadata) { + return $propertyValue; + } + + /* @var ToOneAssociationMetadata $property */ + $unitOfWork = $this->em->getUnitOfWork(); + $targetPersister = $unitOfWork->getEntityPersister($property->getTargetEntity()); + + foreach ($property->getJoinColumns() as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ + $referencedColumnName = $joinColumn->getReferencedColumnName(); + + if (! $joinColumn->getType()) { + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); + + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em)); + } + + if ($joinColumn->getColumnName() !== $columnName) { + continue; + } + + return $targetPersister->getColumnValue($propertyValue, $referencedColumnName); + } + + return null; } /** diff --git a/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php index 14943cf339b..d8d52794396 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php @@ -70,7 +70,15 @@ public function getIdentifier($entity) : array; * * @return void */ - public function setIdentifier($entity, array $id); + public function setIdentifier($entity, array $id) : void; + + /** + * @param object $entity + * @param string $columnName + * + * @return mixed|null + */ + public function getColumnValue($entity, string $columnName); /** * Gets the SELECT SQL to select one or more entities by a set of field criteria. diff --git a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php index 767f2b6af9f..48529c811d1 100644 --- a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php +++ b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php @@ -86,10 +86,7 @@ public function flattenIdentifier(ClassMetadata $class, array $id) /* @var $targetClassMetadata ClassMetadata */ $targetClassMetadata = $this->metadataFactory->getMetadataFor($property->getTargetEntity()); $targetClassPersister = $this->unitOfWork->getEntityPersister($property->getTargetEntity()); - $identifiers = $this->unitOfWork->isInIdentityMap($id[$field]) - ? $this->unitOfWork->getEntityIdentifier($id[$field]) - : $targetClassPersister->getIdentifier($id[$field]) - ; + $identifiers = $targetClassPersister->getIdentifier($id[$field]); $associatedId = $this->flattenIdentifier($targetClassMetadata, $identifiers); diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php index cb0222316dc..ccc24c60d10 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php @@ -67,6 +67,7 @@ abstract class AbstractEntityPersisterTest extends OrmTestCase 'getSelectConditionStatementSQL', 'getIdentifier', 'setIdentifier', + 'getColumnValue', 'insert', 'update', 'delete', diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php index 1ded2ec544a..8c7b8c7b1e1 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php @@ -67,8 +67,10 @@ public function testGetInsertSQLUsesTypeValuesSQL() public function testUpdateUsesTypeValuesSQL() { $child = new CustomTypeChild(); + $child->id = 1; $parent = new CustomTypeParent(); + $parent->id = 1; $parent->customInteger = 1; $parent->child = $child; From 6355a9baa060554d048f4858644f9e87f9b204e2 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 31 Jul 2017 17:19:37 -0400 Subject: [PATCH 186/275] Added information of action items for later. --- lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php | 1 + lib/Doctrine/ORM/Utility/IdentifierFlattener.php | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index f66f9d22592..9733de2e368 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -471,6 +471,7 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat } $where = []; + // @todo guilhermeblanco Bring this back: $this->em->getUnitOfWork()->getEntityIdentifier($entity); $identifier = $this->getIdentifier($entity); foreach ($this->class->identifier as $idField) { diff --git a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php index 48529c811d1..80990e74a5a 100644 --- a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php +++ b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php @@ -86,6 +86,11 @@ public function flattenIdentifier(ClassMetadata $class, array $id) /* @var $targetClassMetadata ClassMetadata */ $targetClassMetadata = $this->metadataFactory->getMetadataFor($property->getTargetEntity()); $targetClassPersister = $this->unitOfWork->getEntityPersister($property->getTargetEntity()); + // @todo guilhermeblanco Bring this back: + // $identifiers = $this->unitOfWork->isInIdentityMap($id[$field]) + // ? $this->unitOfWork->getEntityIdentifier($id[$field]) + // : $targetClassPersister->getIdentifier($id[$field]) + // ; $identifiers = $targetClassPersister->getIdentifier($id[$field]); $associatedId = $this->flattenIdentifier($targetClassMetadata, $identifiers); From c4795643323c086e998de9a78cd84617a241ee52 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 31 Jul 2017 23:30:13 -0400 Subject: [PATCH 187/275] Added concept of SecondPass to ClassMetadataFactory --- .../Exporter/ClassMetadataExporter.php | 129 ++++++++++++------ .../Factory/AbstractClassMetadataFactory.php | 13 +- .../Factory/ClassMetadataBuildingContext.php | 97 +++++++++++++ .../ClassMetadataDefinitionFactory.php | 1 + .../ORM/Mapping/Factory/SecondPass.php | 33 +++++ 5 files changed, 226 insertions(+), 47 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/Factory/ClassMetadataBuildingContext.php create mode 100644 lib/Doctrine/ORM/Mapping/Factory/SecondPass.php diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php index 8f5ba644459..d229c0abcb3 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php @@ -22,6 +22,7 @@ namespace Doctrine\ORM\Mapping\Exporter; +use Doctrine\Common\Inflector\Inflector; use Doctrine\ORM\Mapping; class ClassMetadataExporter implements Exporter @@ -46,19 +47,11 @@ public function export($value, int $indentationLevel = 0) : string $lines[] = null; } - $shortClassName = $reflectionClass->getShortName(); - $extendedClassName = ($value instanceof Mapping\MappedSuperClassMetadata) - ? 'MappedSuperClassMetadata' - : 'ClassMetadata' - ; - $lines[] = 'use Doctrine\DBAL\Types\Type;'; $lines[] = 'use Doctrine\ORM\Mapping;'; + $lines[] = 'use Doctrine\ORM\Mapping\Factory\ClassMetadataBuildingContext;'; $lines[] = null; - $lines[] = sprintf('class %sClassMetadata extends Mapping\%s', $shortClassName, $extendedClassName); - $lines[] = '{'; - $lines[] = $this->exportClassBody($value, $indentationLevel + 1); - $lines[] = '}'; + $lines[] = $this->exportClass($value, $indentationLevel); $lines[] = null; return implode(PHP_EOL, $lines); @@ -70,13 +63,20 @@ public function export($value, int $indentationLevel = 0) : string * * @return string */ - private function exportClassBody(Mapping\ClassMetadata $metadata, int $indentationLevel) : string + private function exportClass(Mapping\ClassMetadata $metadata, int $indentationLevel) : string { - $lines = []; + $reflectionClass = $metadata->getReflectionClass(); + $shortClassName = $reflectionClass->getShortName(); + $extendedClassName = ($metadata instanceof Mapping\MappedSuperClassMetadata) + ? 'MappedSuperClassMetadata' + : 'EntityClassMetadata' + ; - $lines[] = $this->exportConstructor($metadata, $indentationLevel); + $lines[] = sprintf('class %sClassMetadata extends Mapping\%s', $shortClassName, $extendedClassName); + $lines[] = '{'; + $lines[] = $this->exportConstructor($metadata, $indentationLevel + 1); + $lines[] = '}'; $lines[] = null; - $lines[] = $this->exportInitialize($metadata, $indentationLevel); return implode(PHP_EOL, $lines); } @@ -91,11 +91,30 @@ private function exportConstructor(Mapping\ClassMetadata $metadata, int $indenta { $indentation = str_repeat(self::INDENTATION, $indentationLevel); $bodyIndentation = str_repeat(self::INDENTATION, $indentationLevel + 1); + $objectReference = $bodyIndentation . static::VARIABLE; $lines = []; - $lines[] = $indentation . 'public function __construct(?ClassMetadata $parent = null)'; + $lines[] = $indentation . 'public function __construct('; + $lines[] = $bodyIndentation . 'ClassMetadataBuildingContext $metadataBuildingContext,'; + $lines[] = $bodyIndentation . '?ClassMetadata $parent = null'; + $lines[] = $indentation . ')'; $lines[] = $indentation . '{'; $lines[] = $bodyIndentation . 'parent::__construct("' . $metadata->getClassName() . '", $parent);'; + + if ($metadata->getCustomRepositoryClassName()) { + $lines[] = null; + $lines[] = $objectReference . '->setCustomRepositoryClassName("' . $metadata->getCustomRepositoryClassName() . '");'; + } + + if ($metadata->changeTrackingPolicy) { + $lines[] = null; + $lines[] = $objectReference . '->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::' . strtoupper($metadata->changeTrackingPolicy) . ');'; + } + + $lines[] = $this->exportInheritance($metadata, $indentationLevel); + $lines[] = $this->exportTable($metadata, $indentationLevel); + $lines[] = $this->exportProperties($metadata, $indentationLevel); + $lines[] = $this->exportLifecycleCallbacks($metadata, $indentationLevel); $lines[] = $indentation . '}'; return implode(PHP_EOL, $lines); @@ -107,44 +126,80 @@ private function exportConstructor(Mapping\ClassMetadata $metadata, int $indenta * * @return string */ - private function exportInitialize(Mapping\ClassMetadata $metadata, int $indentationLevel) : string + private function exportInheritance(Mapping\ClassMetadata $metadata, int $indentationLevel) : string { - $indentation = str_repeat(self::INDENTATION, $indentationLevel); $bodyIndentation = str_repeat(self::INDENTATION, $indentationLevel + 1); $objectReference = $bodyIndentation . static::VARIABLE; $lines = []; - $lines[] = $indentation . 'protected function initialize()'; - $lines[] = $indentation . '{'; - - if ($metadata->getCustomRepositoryClassName()) { - $lines[] = $objectReference . '->setCustomRepositoryClassName("' . $metadata->getCustomRepositoryClassName() . '");'; + if ($metadata->inheritanceType) { $lines[] = null; + $lines[] = $objectReference . '->setInheritanceType(Mapping\InheritanceType::' . strtoupper($metadata->inheritanceType) . ');'; } - if ($metadata->changeTrackingPolicy) { - $lines[] = $objectReference . '->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::' . strtoupper($metadata->changeTrackingPolicy) . ');'; + if ($metadata->discriminatorColumn) { $lines[] = null; + $lines[] = $bodyIndentation . '// Discriminator mapping'; + $lines[] = $this->exportDiscriminatorMetadata($metadata, $indentationLevel + 1); } - if ($metadata->inheritanceType) { - $lines[] = $objectReference . '->setInheritanceType(Mapping\InheritanceType::' . strtoupper($metadata->inheritanceType) . ');'; - $lines[] = null; - } + return implode(PHP_EOL, $lines); + } + + /** + * @param Mapping\ClassMetadata $metadata + * @param int $indentationLevel + * + * @return string + */ + private function exportTable(Mapping\ClassMetadata $metadata, int $indentationLevel) : string + { + $bodyIndentation = str_repeat(self::INDENTATION, $indentationLevel + 1); + $lines = []; if ($metadata->table) { + $lines[] = null; $lines[] = $bodyIndentation . '// Table'; $lines[] = $this->exportTableMetadata($metadata->table, $indentationLevel + 1); - $lines[] = null; } - if ($metadata->discriminatorColumn) { - $lines[] = $bodyIndentation . '// Discriminator mapping'; - $lines[] = $this->exportDiscriminatorMetadata($metadata, $indentationLevel + 1); + return implode(PHP_EOL, $lines); + } + + /** + * @param Mapping\ClassMetadata $metadata + * @param int $indentationLevel + * + * @return string + */ + private function exportProperties(Mapping\ClassMetadata $metadata, int $indentationLevel) : string + { + $bodyIndentation = str_repeat(self::INDENTATION, $indentationLevel + 1); + $lines = []; + + foreach ($metadata->getProperties() as $name => $property) { $lines[] = null; + $lines[] = $bodyIndentation . '// Property: ' . $name; + $lines[] = $this->exportProperty($property, $indentationLevel + 1); } + return implode(PHP_EOL, $lines); + } + + /** + * @param Mapping\ClassMetadata $metadata + * @param int $indentationLevel + * + * @return string + */ + private function exportLifecycleCallbacks(Mapping\ClassMetadata $metadata, int $indentationLevel) : string + { + $bodyIndentation = str_repeat(self::INDENTATION, $indentationLevel + 1); + $objectReference = $bodyIndentation . static::VARIABLE; + $lines = []; + if ($metadata->lifecycleCallbacks) { + $lines[] = null; $lines[] = $bodyIndentation . '// Lifecycle callbacks'; foreach ($metadata->lifecycleCallbacks as $event => $callbacks) { @@ -152,18 +207,8 @@ private function exportInitialize(Mapping\ClassMetadata $metadata, int $indentat $lines[] = $objectReference . '->addLifecycleCallback("' . $callback . '", "' . $event . '");'; } } - - $lines[] = null; - } - - foreach ($metadata->getProperties() as $name => $property) { - $lines[] = $bodyIndentation . '// Property: ' . $name; - $lines[] = $this->exportProperty($property, $indentationLevel + 1); - $lines[] = null; } - $lines[] = $indentation . '}'; - return implode(PHP_EOL, $lines); } diff --git a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php index e6bc32713a7..672e1cbb7f9 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php @@ -126,9 +126,10 @@ public function getMetadataFor($className) return $this->loaded[$entityClassName]; } - $parentClassNameList = $this->getParentClassNameList($className); - $parentClassNameList[] = $className; - $parent = null; + $metadataBuildingContext = new ClassMetadataBuildingContext($this); + $parentClassNameList = $this->getParentClassNameList($entityClassName); + $parentClassNameList[] = $entityClassName; + $parent = null; foreach ($parentClassNameList as $parentClassName) { if (isset($this->loaded[$parentClassName])) { @@ -137,11 +138,13 @@ public function getMetadataFor($className) continue; } - $definition = $this->getOrCreateClassMetadataDefinition($entityClassName, $parent); + $definition = $this->getOrCreateClassMetadataDefinition($parentClassName, $parent); - $parent = $this->loaded[$entityClassName] = $this->createClassMetadata($definition); + $parent = $this->loaded[$parentClassName] = $this->createClassMetadata($definition); } + $metadataBuildingContext->validate(); + return $this->loaded[$entityClassName]; } diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataBuildingContext.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataBuildingContext.php new file mode 100644 index 00000000000..91683eee46d --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataBuildingContext.php @@ -0,0 +1,97 @@ +. + */ + +declare(strict_types=1); + +namespace Doctrine\ORM\Mapping\Factory; + +/** + * Class ClassMetadataBuildingContext + * + * @package Doctrine\ORM\Mapping\Factory + * @since 3.0 + * + * @author Guilherme Blanco + */ +class ClassMetadataBuildingContext +{ + private $classMetadataFactory; + + /** + * @var array + */ + protected $secondPassList = []; + + /** + * @var bool + */ + private $inSecondPass = false; + + /** + * ClassMetadataBuildingContext constructor. + * + * @param AbstractClassMetadataFactory $classMetadataFactory + */ + public function __construct(AbstractClassMetadataFactory $classMetadataFactory) + { + $this->classMetadataFactory = $classMetadataFactory; + } + + /** + * @return AbstractClassMetadataFactory + */ + public function getClassMetadataFactory() : AbstractClassMetadataFactory + { + return $this->classMetadataFactory; + } + + /** + * @param SecondPass $secondPass + * + * @return void + */ + public function addSecondPass(SecondPass $secondPass) : void + { + $this->secondPassList[] = $secondPass; + } + + /** + * @return bool + */ + public function isInSecondPass() : bool + { + return $this->inSecondPass; + } + + /** + * @return void + */ + public function validate() : void + { + $this->inSecondPass = true; + + foreach ($this->secondPassList as $secondPass) { + /** @var SecondPass $secondPass */ + $secondPass->process($this); + } + + $this->inSecondPass = false; + } +} diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php index 1e2723b6615..b9d1d6d2b94 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php @@ -23,6 +23,7 @@ namespace Doctrine\ORM\Mapping\Factory; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\Factory\Strategy\ClassMetadataGeneratorStrategy; class ClassMetadataDefinitionFactory { diff --git a/lib/Doctrine/ORM/Mapping/Factory/SecondPass.php b/lib/Doctrine/ORM/Mapping/Factory/SecondPass.php new file mode 100644 index 00000000000..887974b70d0 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Factory/SecondPass.php @@ -0,0 +1,33 @@ +. + */ + +declare(strict_types=1); + +namespace Doctrine\ORM\Mapping\Factory; + +interface SecondPass +{ + /** + * @param ClassMetadataBuildingContext $metadataBuildingContext + * + * @return void + */ + public function process(ClassMetadataBuildingContext $metadataBuildingContext) : void; +} From 136201fff27ef5c90ec07fd4aff06434d42e0d0f Mon Sep 17 00:00:00 2001 From: Usman Zafar Date: Wed, 2 Aug 2017 13:52:01 +0000 Subject: [PATCH 188/275] added the final keyword EntityManager to indicate that extending EntityManager is not a valid extension point. --- lib/Doctrine/ORM/EntityManager.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 3389338a9c2..37952e80095 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -64,7 +64,7 @@ * @author Jonathan Wage * @author Roman Borschel */ -/* final */class EntityManager implements EntityManagerInterface +final class EntityManager implements EntityManagerInterface { /** * The used Configuration. From 888a1fb62ca34b519ceb7d7e3cec5b14806b8c20 Mon Sep 17 00:00:00 2001 From: Michael Moravec Date: Thu, 3 Aug 2017 00:57:27 +0200 Subject: [PATCH 189/275] Typehint EntityManagerInterface instead of EntityManager where possible --- lib/Doctrine/ORM/AbstractQuery.php | 2 +- lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php | 2 +- lib/Doctrine/ORM/EntityRepository.php | 8 ++++---- lib/Doctrine/ORM/Event/LifecycleEventArgs.php | 2 +- lib/Doctrine/ORM/Event/OnClearEventArgs.php | 2 +- lib/Doctrine/ORM/Event/OnFlushEventArgs.php | 2 +- lib/Doctrine/ORM/Event/PostFlushEventArgs.php | 4 ++-- lib/Doctrine/ORM/Event/PreFlushEventArgs.php | 4 ++-- lib/Doctrine/ORM/Query/FilterCollection.php | 2 +- lib/Doctrine/ORM/Query/Parser.php | 4 ++-- lib/Doctrine/ORM/Query/SqlWalker.php | 4 ++-- lib/Doctrine/ORM/QueryBuilder.php | 2 +- .../ORM/Sequencing/BigIntegerIdentityGenerator.php | 4 ++-- lib/Doctrine/ORM/Sequencing/Generator.php | 8 ++++---- lib/Doctrine/ORM/Sequencing/IdentityGenerator.php | 4 ++-- lib/Doctrine/ORM/Sequencing/SequenceGenerator.php | 4 ++-- lib/Doctrine/ORM/Sequencing/TableGenerator.php | 4 ++-- lib/Doctrine/ORM/Sequencing/UuidGenerator.php | 4 ++-- .../ORM/Tools/Console/Command/InfoCommand.php | 2 +- .../Console/Command/SchemaTool/AbstractCommand.php | 2 +- .../Tools/Pagination/LimitSubqueryOutputWalker.php | 2 +- .../Tests/EventListener/CacheMetadataListener.php | 8 ++++---- tests/Doctrine/Tests/Mocks/SequenceMock.php | 4 ++-- .../Tests/ORM/Cache/DefaultCacheFactoryTest.php | 2 +- .../Tests/ORM/Cache/DefaultEntityHydratorTest.php | 2 +- .../Tests/ORM/Cache/DefaultQueryCacheTest.php | 2 +- .../Collection/AbstractCollectionPersisterTest.php | 14 +++++++------- ...trictReadWriteCachedCollectionPersisterTest.php | 4 ++-- .../ReadOnlyCachedCollectionPersisterTest.php | 4 ++-- .../ReadWriteCachedCollectionPersisterTest.php | 4 ++-- .../Entity/AbstractEntityPersisterTest.php | 8 ++++---- ...NonStrictReadWriteCachedEntityPersisterTest.php | 4 ++-- .../Entity/ReadOnlyCachedEntityPersisterTest.php | 4 ++-- .../Entity/ReadWriteCachedEntityPersisterTest.php | 4 ++-- .../Tests/ORM/Functional/MergeProxiesTest.php | 3 ++- .../Tests/ORM/Functional/SQLFilterTest.php | 4 ++-- .../Tests/ORM/Functional/Ticket/DDC1509Test.php | 2 +- .../Tests/ORM/Functional/Ticket/DDC2359Test.php | 4 ++-- .../Tests/ORM/Functional/Ticket/GH5804Test.php | 4 ++-- .../Tests/ORM/Hydration/ResultSetMappingTest.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 6 +++--- .../Tests/ORM/Mapping/ClassMetadataFactoryTest.php | 5 ++--- ...cEntityPersisterCompositeTypeParametersTest.php | 2 +- .../BasicEntityPersisterCompositeTypeSqlTest.php | 2 +- .../BasicEntityPersisterTypeValueSqlTest.php | 2 +- .../Tests/ORM/Query/FilterCollectionTest.php | 2 +- tests/Doctrine/Tests/ORM/Query/QueryTest.php | 5 ++--- tests/Doctrine/Tests/ORM/QueryBuilderTest.php | 2 +- .../Tests/ORM/Sequencing/SequenceGeneratorTest.php | 4 ++-- .../Tools/AttachEntityListenersListenerTest.php | 2 +- .../ORM/Tools/ResolveTargetEntityListenerTest.php | 2 +- .../Tests/ORM/Tools/SchemaValidatorTest.php | 4 ++-- tests/Doctrine/Tests/OrmFunctionalTestCase.php | 5 +++-- tests/Doctrine/Tests/OrmTestCase.php | 2 +- 54 files changed, 100 insertions(+), 100 deletions(-) diff --git a/lib/Doctrine/ORM/AbstractQuery.php b/lib/Doctrine/ORM/AbstractQuery.php index 1fa0fd60c42..7ebec73ce71 100644 --- a/lib/Doctrine/ORM/AbstractQuery.php +++ b/lib/Doctrine/ORM/AbstractQuery.php @@ -281,7 +281,7 @@ abstract public function getSQL(); /** * Retrieves the associated EntityManager of this Query instance. * - * @return \Doctrine\ORM\EntityManager + * @return \Doctrine\ORM\EntityManagerInterface */ public function getEntityManager() { diff --git a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php index 12b50473157..241dd728f40 100644 --- a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php @@ -41,7 +41,7 @@ class DefaultEntityHydrator implements EntityHydrator { /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/lib/Doctrine/ORM/EntityRepository.php b/lib/Doctrine/ORM/EntityRepository.php index 36f05ec3186..4dc28e87ffb 100644 --- a/lib/Doctrine/ORM/EntityRepository.php +++ b/lib/Doctrine/ORM/EntityRepository.php @@ -48,7 +48,7 @@ class EntityRepository implements ObjectRepository, Selectable protected $entityName; /** - * @var EntityManager + * @var EntityManagerInterface */ protected $em; @@ -60,8 +60,8 @@ class EntityRepository implements ObjectRepository, Selectable /** * Initializes a new EntityRepository. * - * @param EntityManager $em The EntityManager to use. - * @param Mapping\ClassMetadata $class The class descriptor. + * @param EntityManagerInterface $em The EntityManager to use. + * @param Mapping\ClassMetadata $class The class descriptor. */ public function __construct(EntityManagerInterface $em, Mapping\ClassMetadata $class) { @@ -266,7 +266,7 @@ public function getClassName() } /** - * @return EntityManager + * @return EntityManagerInterface */ protected function getEntityManager() { diff --git a/lib/Doctrine/ORM/Event/LifecycleEventArgs.php b/lib/Doctrine/ORM/Event/LifecycleEventArgs.php index f752424c6a2..6c23f6ef2db 100644 --- a/lib/Doctrine/ORM/Event/LifecycleEventArgs.php +++ b/lib/Doctrine/ORM/Event/LifecycleEventArgs.php @@ -47,7 +47,7 @@ public function getEntity() /** * Retrieves associated EntityManager. * - * @return \Doctrine\ORM\EntityManager + * @return \Doctrine\ORM\EntityManagerInterface */ public function getEntityManager() { diff --git a/lib/Doctrine/ORM/Event/OnClearEventArgs.php b/lib/Doctrine/ORM/Event/OnClearEventArgs.php index 306a183e806..69a869032c6 100644 --- a/lib/Doctrine/ORM/Event/OnClearEventArgs.php +++ b/lib/Doctrine/ORM/Event/OnClearEventArgs.php @@ -52,7 +52,7 @@ public function __construct(EntityManagerInterface $em) /** * Retrieves associated EntityManager. * - * @return \Doctrine\ORM\EntityManager + * @return \Doctrine\ORM\EntityManagerInterface */ public function getEntityManager() { diff --git a/lib/Doctrine/ORM/Event/OnFlushEventArgs.php b/lib/Doctrine/ORM/Event/OnFlushEventArgs.php index ad4fd6995ae..bda3a3b5d82 100644 --- a/lib/Doctrine/ORM/Event/OnFlushEventArgs.php +++ b/lib/Doctrine/ORM/Event/OnFlushEventArgs.php @@ -53,7 +53,7 @@ public function __construct(EntityManagerInterface $em) /** * Retrieve associated EntityManager. * - * @return \Doctrine\ORM\EntityManager + * @return \Doctrine\ORM\EntityManagerInterface */ public function getEntityManager() { diff --git a/lib/Doctrine/ORM/Event/PostFlushEventArgs.php b/lib/Doctrine/ORM/Event/PostFlushEventArgs.php index f0292a37f98..30380516fbf 100644 --- a/lib/Doctrine/ORM/Event/PostFlushEventArgs.php +++ b/lib/Doctrine/ORM/Event/PostFlushEventArgs.php @@ -34,7 +34,7 @@ class PostFlushEventArgs extends EventArgs { /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; @@ -51,7 +51,7 @@ public function __construct(EntityManagerInterface $em) /** * Retrieves associated EntityManager. * - * @return \Doctrine\ORM\EntityManager + * @return \Doctrine\ORM\EntityManagerInterface */ public function getEntityManager() { diff --git a/lib/Doctrine/ORM/Event/PreFlushEventArgs.php b/lib/Doctrine/ORM/Event/PreFlushEventArgs.php index e932531eb38..38064af682a 100644 --- a/lib/Doctrine/ORM/Event/PreFlushEventArgs.php +++ b/lib/Doctrine/ORM/Event/PreFlushEventArgs.php @@ -36,7 +36,7 @@ class PreFlushEventArgs extends EventArgs { /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; @@ -51,7 +51,7 @@ public function __construct(EntityManagerInterface $em) } /** - * @return \Doctrine\ORM\EntityManager + * @return \Doctrine\ORM\EntityManagerInterface */ public function getEntityManager() { diff --git a/lib/Doctrine/ORM/Query/FilterCollection.php b/lib/Doctrine/ORM/Query/FilterCollection.php index a340f2b7724..049d674cdba 100644 --- a/lib/Doctrine/ORM/Query/FilterCollection.php +++ b/lib/Doctrine/ORM/Query/FilterCollection.php @@ -52,7 +52,7 @@ class FilterCollection /** * The EntityManager that "owns" this FilterCollection instance. * - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/lib/Doctrine/ORM/Query/Parser.php b/lib/Doctrine/ORM/Query/Parser.php index 01645482274..2e0b02d2983 100644 --- a/lib/Doctrine/ORM/Query/Parser.php +++ b/lib/Doctrine/ORM/Query/Parser.php @@ -139,7 +139,7 @@ class Parser /** * The EntityManager. * - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; @@ -244,7 +244,7 @@ public function getParserResult() /** * Gets the EntityManager used by the parser. * - * @return \Doctrine\ORM\EntityManager + * @return \Doctrine\ORM\EntityManagerInterface */ public function getEntityManager() { diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 8af8066c9ea..aac88158a84 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -100,7 +100,7 @@ class SqlWalker implements TreeWalker private $parserResult; /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; @@ -213,7 +213,7 @@ public function getConnection() /** * Gets the EntityManager used by the walker. * - * @return \Doctrine\ORM\EntityManager + * @return \Doctrine\ORM\EntityManagerInterface */ public function getEntityManager() { diff --git a/lib/Doctrine/ORM/QueryBuilder.php b/lib/Doctrine/ORM/QueryBuilder.php index 5dfa0ee02d0..e0332f51303 100644 --- a/lib/Doctrine/ORM/QueryBuilder.php +++ b/lib/Doctrine/ORM/QueryBuilder.php @@ -279,7 +279,7 @@ public function getType() /** * Gets the associated EntityManager for this query builder. * - * @return EntityManager + * @return EntityManagerInterface */ public function getEntityManager() { diff --git a/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php b/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php index a284a645a01..4dcc577daf3 100644 --- a/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php @@ -21,7 +21,7 @@ namespace Doctrine\ORM\Sequencing; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; /** * Id generator that obtains IDs from special "identity" columns. These are columns @@ -52,7 +52,7 @@ public function __construct($sequenceName = null) /** * {@inheritdoc} */ - public function generate(EntityManager $em, $entity) + public function generate(EntityManagerInterface $em, $entity) { return (string) $em->getConnection()->lastInsertId($this->sequenceName); } diff --git a/lib/Doctrine/ORM/Sequencing/Generator.php b/lib/Doctrine/ORM/Sequencing/Generator.php index 414f082684d..045eb948bd4 100644 --- a/lib/Doctrine/ORM/Sequencing/Generator.php +++ b/lib/Doctrine/ORM/Sequencing/Generator.php @@ -22,19 +22,19 @@ namespace Doctrine\ORM\Sequencing; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; interface Generator { /** * Generates an identifier for an entity. * - * @param EntityManager $em - * @param object $entity + * @param EntityManagerInterface $em + * @param object $entity * * @return \Generator */ - public function generate(EntityManager $em, $entity); + public function generate(EntityManagerInterface $em, $entity); /** * Gets whether this generator is a post-insert generator which means that diff --git a/lib/Doctrine/ORM/Sequencing/IdentityGenerator.php b/lib/Doctrine/ORM/Sequencing/IdentityGenerator.php index d2661ed0460..3c468f073c3 100644 --- a/lib/Doctrine/ORM/Sequencing/IdentityGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/IdentityGenerator.php @@ -21,7 +21,7 @@ namespace Doctrine\ORM\Sequencing; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; /** * Id generator that obtains IDs from special "identity" columns. These are columns @@ -52,7 +52,7 @@ public function __construct($sequenceName = null) /** * {@inheritDoc} */ - public function generate(EntityManager $em, $entity) + public function generate(EntityManagerInterface $em, $entity) { return (int) $em->getConnection()->lastInsertId($this->sequenceName); } diff --git a/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php b/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php index c513267c5ec..4fce153e0a9 100644 --- a/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php @@ -21,7 +21,7 @@ namespace Doctrine\ORM\Sequencing; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Serializable; /** @@ -71,7 +71,7 @@ public function __construct($sequenceName, $allocationSize) /** * {@inheritdoc} */ - public function generate(EntityManager $em, $entity) + public function generate(EntityManagerInterface $em, $entity) { if ($this->maxValue === null || $this->nextValue == $this->maxValue) { // Allocate new values diff --git a/lib/Doctrine/ORM/Sequencing/TableGenerator.php b/lib/Doctrine/ORM/Sequencing/TableGenerator.php index c28331f4165..0f4c8e32ded 100644 --- a/lib/Doctrine/ORM/Sequencing/TableGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/TableGenerator.php @@ -21,7 +21,7 @@ namespace Doctrine\ORM\Sequencing; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; /** * Id generator that uses a single-row database table and a hi/lo algorithm. @@ -74,7 +74,7 @@ public function __construct($tableName, $sequenceName = 'default', $allocationSi /** * {@inheritdoc} */ - public function generate(EntityManager $em, $entity) + public function generate(EntityManagerInterface $em, $entity) { if ($this->maxValue === null || $this->nextValue === $this->maxValue) { // Allocate new values diff --git a/lib/Doctrine/ORM/Sequencing/UuidGenerator.php b/lib/Doctrine/ORM/Sequencing/UuidGenerator.php index f374be4eef0..69eb984ad04 100644 --- a/lib/Doctrine/ORM/Sequencing/UuidGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/UuidGenerator.php @@ -21,7 +21,7 @@ namespace Doctrine\ORM\Sequencing; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; /** * Represents an ID generator that uses the database UUID expression @@ -34,7 +34,7 @@ class UuidGenerator implements Generator /** * {@inheritdoc} */ - public function generate(EntityManager $em, $entity) + public function generate(EntityManagerInterface $em, $entity) { $conn = $em->getConnection(); $sql = 'SELECT ' . $conn->getDatabasePlatform()->getGuidExpression(); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php index fd7d65229e8..d24ec20b327 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php @@ -56,7 +56,7 @@ protected function configure() */ protected function execute(InputInterface $input, OutputInterface $output) { - /* @var $entityManager \Doctrine\ORM\EntityManager */ + /* @var $entityManager \Doctrine\ORM\EntityManagerInterface */ $entityManager = $this->getHelper('em')->getEntityManager(); $entityClassNames = $entityManager->getConfiguration() diff --git a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/AbstractCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/AbstractCommand.php index 1082fb16fda..8de845889dd 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/AbstractCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/AbstractCommand.php @@ -55,7 +55,7 @@ protected function execute(InputInterface $input, OutputInterface $output) { $emHelper = $this->getHelper('em'); - /* @var $em \Doctrine\ORM\EntityManager */ + /* @var $em \Doctrine\ORM\EntityManagerInterface */ $em = $emHelper->getEntityManager(); $metadatas = $em->getMetadataFactory()->getAllMetadata(); diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php index d678975fa38..6b741d11556 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php @@ -76,7 +76,7 @@ class LimitSubqueryOutputWalker extends SqlWalker private $maxResults; /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php b/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php index 554bb105af8..864ef569858 100644 --- a/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php +++ b/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php @@ -5,7 +5,7 @@ namespace Doctrine\Tests\EventListener; use Doctrine\Common\Persistence\Event\LoadClassMetadataEventArgs; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\CacheMetadata; use Doctrine\ORM\Mapping\CacheUsage; use Doctrine\ORM\Mapping\ClassMetadata; @@ -57,10 +57,10 @@ private function recordVisit(ClassMetadata $metadata) } /** - * @param ClassMetadata $metadata - * @param EntityManager $em + * @param ClassMetadata $metadata + * @param EntityManagerInterface $em */ - protected function enableCaching(ClassMetadata $metadata, EntityManager $em) + protected function enableCaching(ClassMetadata $metadata, EntityManagerInterface $em) { if ($this->isVisited($metadata)) { return; // Already handled in the past diff --git a/tests/Doctrine/Tests/Mocks/SequenceMock.php b/tests/Doctrine/Tests/Mocks/SequenceMock.php index 486f3d785d9..d06ccdba337 100644 --- a/tests/Doctrine/Tests/Mocks/SequenceMock.php +++ b/tests/Doctrine/Tests/Mocks/SequenceMock.php @@ -4,7 +4,7 @@ namespace Doctrine\Tests\Mocks; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Sequencing\SequenceGenerator; /** @@ -20,7 +20,7 @@ class SequenceMock extends SequenceGenerator /** * {@inheritdoc} */ - public function generate(EntityManager $em, $entity) + public function generate(EntityManagerInterface $em, $entity) { return $this->sequenceNumber++; } diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php index 5d6c884bec3..63c0cd4419d 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php @@ -41,7 +41,7 @@ class DefaultCacheFactoryTest extends OrmTestCase private $factory; /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php index 229c5d801e6..e5e96415295 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php @@ -25,7 +25,7 @@ class DefaultEntityHydratorTest extends OrmTestCase private $structure; /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php index 0ad9e3bc86f..b2f9d4cc528 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php @@ -36,7 +36,7 @@ class DefaultQueryCacheTest extends OrmTestCase private $queryCache; /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php index 532358b4eda..0d0ab0623fa 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php @@ -9,7 +9,7 @@ use Doctrine\ORM\Cache\Persister\Collection\AbstractCollectionPersister; use Doctrine\ORM\Cache\Persister\Collection\CachedCollectionPersister; use Doctrine\ORM\Cache\Region; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\Persisters\Collection\CollectionPersister; @@ -32,7 +32,7 @@ abstract class AbstractCollectionPersisterTest extends OrmTestCase protected $collectionPersister; /** - * @var EntityManager + * @var EntityManagerInterface */ protected $em; @@ -67,15 +67,15 @@ abstract class AbstractCollectionPersisterTest extends OrmTestCase ]; /** - * @param EntityManager $em - * @param CollectionPersister $persister - * @param Region $region - * @param AssociationMetadata $association + * @param EntityManagerInterface $em + * @param CollectionPersister $persister + * @param Region $region + * @param AssociationMetadata $association * * @return AbstractCollectionPersister */ abstract protected function createPersister( - EntityManager $em, + EntityManagerInterface $em, CollectionPersister $persister, Region $region, AssociationMetadata $association diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersisterTest.php index fa3dd96ec8c..11df2ee4842 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersisterTest.php @@ -5,7 +5,7 @@ namespace Doctrine\Tests\ORM\Cache\Persister\Collection; use Doctrine\ORM\Cache\Region; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Persisters\Collection\CollectionPersister; use Doctrine\ORM\Cache\Persister\Collection\NonStrictReadWriteCachedCollectionPersister; @@ -19,7 +19,7 @@ class NonStrictReadWriteCachedCollectionPersisterTest extends AbstractCollection * {@inheritdoc} */ protected function createPersister( - EntityManager $em, + EntityManagerInterface $em, CollectionPersister $persister, Region $region, AssociationMetadata $association diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersisterTest.php index bb82e126bd4..ef3b9671a11 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersisterTest.php @@ -5,7 +5,7 @@ namespace Doctrine\Tests\ORM\Cache\Persister\Collection; use Doctrine\ORM\Cache\Region; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Persisters\Collection\CollectionPersister; use Doctrine\ORM\Cache\Persister\Collection\ReadOnlyCachedCollectionPersister; @@ -19,7 +19,7 @@ class ReadOnlyCachedCollectionPersisterTest extends AbstractCollectionPersisterT * {@inheritdoc} */ protected function createPersister( - EntityManager $em, + EntityManagerInterface $em, CollectionPersister $persister, Region $region, AssociationMetadata $association diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersisterTest.php index 2941c5048b9..aa707ec96af 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersisterTest.php @@ -7,7 +7,7 @@ use Doctrine\ORM\Cache\ConcurrentRegion; use Doctrine\ORM\Cache\Lock; use Doctrine\ORM\Cache\Region; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\Tests\Models\Cache\State; use Doctrine\ORM\Cache\CollectionCacheKey; @@ -35,7 +35,7 @@ class ReadWriteCachedCollectionPersisterTest extends AbstractCollectionPersister * {@inheritdoc} */ protected function createPersister( - EntityManager $em, + EntityManagerInterface $em, CollectionPersister $persister, Region $region, AssociationMetadata $association diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php index ccc24c60d10..8d472a7f4a3 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php @@ -9,7 +9,7 @@ use Doctrine\ORM\Cache\Persister\CachedPersister; use Doctrine\ORM\Cache\Persister\Entity\CachedEntityPersister; use Doctrine\ORM\Cache\Region; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; @@ -36,7 +36,7 @@ abstract class AbstractEntityPersisterTest extends OrmTestCase protected $entityPersister; /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ protected $em; @@ -88,14 +88,14 @@ abstract class AbstractEntityPersisterTest extends OrmTestCase ]; /** - * @param \Doctrine\ORM\EntityManager $em + * @param \Doctrine\ORM\EntityManagerInterface $em * @param \Doctrine\ORM\Persisters\Entity\EntityPersister $persister * @param \Doctrine\ORM\Cache\Region $region * @param \Doctrine\ORM\Mapping\ClassMetadata $metadata * * @return \Doctrine\ORM\Cache\Persister\Entity\AbstractEntityPersister */ - abstract protected function createPersister(EntityManager $em, EntityPersister $persister, Region $region, ClassMetadata $metadata); + abstract protected function createPersister(EntityManagerInterface $em, EntityPersister $persister, Region $region, ClassMetadata $metadata); protected function setUp() { diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersisterTest.php index 617992a7711..b86d802c963 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersisterTest.php @@ -8,7 +8,7 @@ use Doctrine\ORM\Cache\EntityCacheKey; use Doctrine\ORM\Cache\Persister\Entity\NonStrictReadWriteCachedEntityPersister; use Doctrine\ORM\Cache\Region; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Persisters\Entity\EntityPersister; use Doctrine\Tests\Models\Cache\Country; @@ -21,7 +21,7 @@ class NonStrictReadWriteCachedEntityPersisterTest extends AbstractEntityPersiste /** * {@inheritdoc} */ - protected function createPersister(EntityManager $em, EntityPersister $persister, Region $region, ClassMetadata $metadata) + protected function createPersister(EntityManagerInterface $em, EntityPersister $persister, Region $region, ClassMetadata $metadata) { return new NonStrictReadWriteCachedEntityPersister($persister, $region, $em, $metadata); } diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/ReadOnlyCachedEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/ReadOnlyCachedEntityPersisterTest.php index f8f8b3f2a61..f1fbc0541b4 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/ReadOnlyCachedEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/ReadOnlyCachedEntityPersisterTest.php @@ -5,7 +5,7 @@ namespace Doctrine\Tests\ORM\Cache\Persister\Entity; use Doctrine\ORM\Cache\Region; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\Tests\Models\Cache\Country; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Persisters\Entity\EntityPersister; @@ -19,7 +19,7 @@ class ReadOnlyCachedEntityPersisterTest extends AbstractEntityPersisterTest /** * {@inheritdoc} */ - protected function createPersister(EntityManager $em, EntityPersister $persister, Region $region, ClassMetadata $metadata) + protected function createPersister(EntityManagerInterface $em, EntityPersister $persister, Region $region, ClassMetadata $metadata) { return new ReadOnlyCachedEntityPersister($persister, $region, $em, $metadata); } diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersisterTest.php index 89576fb6ba4..6e7f95bcac6 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersisterTest.php @@ -6,9 +6,9 @@ use Doctrine\ORM\Cache\ConcurrentRegion; use Doctrine\ORM\Cache\Region; -use Doctrine\ORM\EntityManager; use Doctrine\ORM\Cache\Lock; use Doctrine\ORM\Cache\EntityCacheKey; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Tests\Models\Cache\Country; use Doctrine\ORM\Persisters\Entity\EntityPersister; @@ -34,7 +34,7 @@ class ReadWriteCachedEntityPersisterTest extends AbstractEntityPersisterTest /** * {@inheritdoc} */ - protected function createPersister(EntityManager $em, EntityPersister $persister, Region $region, ClassMetadata $metadata) + protected function createPersister(EntityManagerInterface $em, EntityPersister $persister, Region $region, ClassMetadata $metadata) { return new ReadWriteCachedEntityPersister($persister, $region, $em, $metadata); } diff --git a/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php b/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php index ebb002b38bb..5a467ac1aae 100644 --- a/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php @@ -9,6 +9,7 @@ use Doctrine\DBAL\Logging\SQLLogger; use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Proxy\Proxy; use Doctrine\ORM\Tools\SchemaTool; use Doctrine\Tests\Models\Generic\DateTimeModel; @@ -233,7 +234,7 @@ public function testMergingUnInitializedProxyDoesNotInitializeIt() /** * @param SQLLogger $logger * - * @return EntityManager + * @return EntityManagerInterface */ private function createEntityManager(SQLLogger $logger) { diff --git a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php index 86744562b23..2f1c7924302 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php @@ -8,7 +8,7 @@ use Doctrine\DBAL\Connection; use Doctrine\DBAL\Types\Type as DBALType; use Doctrine\ORM\Configuration; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Query\Filter\SQLFilter; @@ -201,7 +201,7 @@ protected function getMockConnection() protected function getMockEntityManager() { // Setup connection mock - $em = $this->getMockBuilder(EntityManager::class) + $em = $this->getMockBuilder(EntityManagerInterface::class) ->disableOriginalConstructor() ->getMock(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php index f552b689a21..0b743b2963c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php @@ -39,7 +39,7 @@ public function testFailingCase() $picture->setThumbnail($thumbnail); - /* @var $em \Doctrine\ORM\EntityManager */ + /* @var $em \Doctrine\ORM\EntityManagerInterface */ $em = $this->em; $em->persist($picture); $em->flush(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php index ade899db6d2..df1ba1e4e9a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php @@ -8,7 +8,7 @@ use Doctrine\DBAL\Connection; use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Configuration; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\Driver\MappingDriver; @@ -28,7 +28,7 @@ public function testIssue() { $mockDriver = $this->createMock(MappingDriver::class); $mockMetadata = $this->createMock(ClassMetadata::class); - $entityManager = $this->createMock(EntityManager::class); + $entityManager = $this->createMock(EntityManagerInterface::class); /* @var $metadataFactory \Doctrine\ORM\Mapping\ClassMetadataFactory|\PHPUnit_Framework_MockObject_MockObject */ $metadataFactory = $this->getMockBuilder(ClassMetadataFactory::class) diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5804Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5804Test.php index d88ce9dca9f..15b820785e9 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5804Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5804Test.php @@ -5,7 +5,7 @@ use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Annotation as ORM; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Sequencing\Generator; use Doctrine\Tests\OrmFunctionalTestCase; @@ -47,7 +47,7 @@ final class GH5804Generator implements Generator /** * {@inheritdoc} */ - public function generate(EntityManager $em, $entity) + public function generate(EntityManagerInterface $em, $entity) { return 'test5804'; } diff --git a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php index f4a4f304d2a..bd33b71b4c8 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php @@ -24,7 +24,7 @@ class ResultSetMappingTest extends \Doctrine\Tests\OrmTestCase { /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 79f6d22b033..4821fb6ee99 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -6,7 +6,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Annotation as ORM; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Events; use Doctrine\ORM\Mapping; use Doctrine\ORM\Mapping\ClassMetadata; @@ -56,10 +56,10 @@ public function createClassMetadata($entityClassName) } /** - * @param \Doctrine\ORM\EntityManager $entityClassName + * @param \Doctrine\ORM\EntityManagerInterface $entityClassName * @return \Doctrine\ORM\Mapping\ClassMetadataFactory */ - protected function createClassMetadataFactory(EntityManager $em = null) + protected function createClassMetadataFactory(EntityManagerInterface $em = null) { $driver = $this->loadDriver(); $em = $em ?: $this->getTestEntityManager(); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 1294faa83a4..04ce04d409f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -8,7 +8,6 @@ use Doctrine\DBAL\Connection; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Configuration; -use Doctrine\ORM\EntityManager; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs; use Doctrine\ORM\Events; @@ -430,7 +429,7 @@ public function testAcceptsEntityManagerInterfaceInstances() { $classMetadataFactory = new ClassMetadataFactory(); - /* @var $entityManager EntityManager */ + /* @var EntityManagerInterface EntityManager */ $entityManager = $this->createMock(EntityManagerInterface::class); $classMetadataFactory->setEntityManager($entityManager); @@ -523,7 +522,7 @@ class CustomIdGenerator implements Generator /** * {@inheritdoc} */ - public function generate(EntityManager $em, $entity): \Generator + public function generate(EntityManagerInterface $em, $entity): \Generator { } diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php index b242f1664fd..a9d722aab7e 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php @@ -20,7 +20,7 @@ class BasicEntityPersisterCompositeTypeParametersTest extends OrmTestCase protected $persister; /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ protected $em; diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php index d877d46a9b6..639d62c27f4 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php @@ -18,7 +18,7 @@ class BasicEntityPersisterCompositeTypeSqlTest extends OrmTestCase protected $persister; /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ protected $em; diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php index 8c7b8c7b1e1..567df8c983e 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php @@ -23,7 +23,7 @@ class BasicEntityPersisterTypeValueSqlTest extends OrmTestCase protected $persister; /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ protected $em; diff --git a/tests/Doctrine/Tests/ORM/Query/FilterCollectionTest.php b/tests/Doctrine/Tests/ORM/Query/FilterCollectionTest.php index d3b125b7c48..3c7f5deeb4b 100644 --- a/tests/Doctrine/Tests/ORM/Query/FilterCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Query/FilterCollectionTest.php @@ -16,7 +16,7 @@ class FilterCollectionTest extends OrmTestCase { /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/tests/Doctrine/Tests/ORM/Query/QueryTest.php b/tests/Doctrine/Tests/ORM/Query/QueryTest.php index b374045565b..35ba24dc673 100644 --- a/tests/Doctrine/Tests/ORM/Query/QueryTest.php +++ b/tests/Doctrine/Tests/ORM/Query/QueryTest.php @@ -6,8 +6,7 @@ use Doctrine\Common\Cache\ArrayCache; use Doctrine\Common\Collections\ArrayCollection; - -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Internal\Hydration\IterableResult; use Doctrine\ORM\Query\Parameter; use Doctrine\ORM\Query\QueryException; @@ -18,7 +17,7 @@ class QueryTest extends OrmTestCase { - /** @var EntityManager */ + /** @var EntityManagerInterface */ protected $em = null; protected function setUp() diff --git a/tests/Doctrine/Tests/ORM/QueryBuilderTest.php b/tests/Doctrine/Tests/ORM/QueryBuilderTest.php index 8f1043c989a..743bcd8f211 100644 --- a/tests/Doctrine/Tests/ORM/QueryBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/QueryBuilderTest.php @@ -28,7 +28,7 @@ class QueryBuilderTest extends OrmTestCase { /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/tests/Doctrine/Tests/ORM/Sequencing/SequenceGeneratorTest.php b/tests/Doctrine/Tests/ORM/Sequencing/SequenceGeneratorTest.php index 64fbf394016..67b8595b2e9 100644 --- a/tests/Doctrine/Tests/ORM/Sequencing/SequenceGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Sequencing/SequenceGeneratorTest.php @@ -4,7 +4,7 @@ namespace Doctrine\Tests\ORM\Sequencing; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Sequencing\SequenceGenerator; use Doctrine\Tests\Mocks\ConnectionMock; use Doctrine\Tests\Mocks\StatementArrayMock; @@ -13,7 +13,7 @@ class SequenceGeneratorTest extends OrmTestCase { /** - * @var EntityManager + * @var EntityManagerInterface */ private $entityManager; diff --git a/tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php b/tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php index dbe7a894227..0b11cf80508 100644 --- a/tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php @@ -13,7 +13,7 @@ class AttachEntityListenersListenerTest extends OrmTestCase { /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php index 455efa366f8..089342674fd 100644 --- a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php @@ -13,7 +13,7 @@ class ResolveTargetEntityListenerTest extends OrmTestCase { /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php b/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php index 3d1151f1b2e..3a6c57c2376 100644 --- a/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php @@ -5,14 +5,14 @@ namespace Doctrine\Tests\ORM\Tools; use Doctrine\ORM\Annotation as ORM; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Tools\SchemaValidator; use Doctrine\Tests\OrmTestCase; class SchemaValidatorTest extends OrmTestCase { /** - * @var EntityManager + * @var EntityManagerInterface */ private $em = null; diff --git a/tests/Doctrine/Tests/OrmFunctionalTestCase.php b/tests/Doctrine/Tests/OrmFunctionalTestCase.php index f1fb54e92fe..b19dff3ee3e 100644 --- a/tests/Doctrine/Tests/OrmFunctionalTestCase.php +++ b/tests/Doctrine/Tests/OrmFunctionalTestCase.php @@ -14,6 +14,7 @@ use Doctrine\ORM\Cache\Logging\StatisticsCacheLogger; use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Tools\DebugUnitOfWorkListener; use Doctrine\ORM\Tools\SchemaTool; use Doctrine\Tests\DbalTypes\Rot13Type; @@ -50,7 +51,7 @@ abstract class OrmFunctionalTestCase extends OrmTestCase protected static $sharedConn; /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ protected $em; @@ -670,7 +671,7 @@ protected function setUp() /** * Gets an EntityManager for testing purposes. * - * @return EntityManager + * @return EntityManagerInterface * * @throws \Doctrine\ORM\ORMException */ diff --git a/tests/Doctrine/Tests/OrmTestCase.php b/tests/Doctrine/Tests/OrmTestCase.php index aa35283e597..330dce51381 100644 --- a/tests/Doctrine/Tests/OrmTestCase.php +++ b/tests/Doctrine/Tests/OrmTestCase.php @@ -84,7 +84,7 @@ protected function createAnnotationDriver($paths = []) * @param \Doctrine\Common\EventManager|null $eventManager * @param bool $withSharedMetadata * - * @return \Doctrine\ORM\EntityManager + * @return \Doctrine\ORM\EntityManagerInterface */ protected function getTestEntityManager($conn = null, $conf = null, $eventManager = null, $withSharedMetadata = true) { From d85e07ffe011800b8cac9c0aec380435db9f529c Mon Sep 17 00:00:00 2001 From: Usman Zafar Date: Thu, 3 Aug 2017 12:44:29 +0000 Subject: [PATCH 190/275] added the test and updated the entitymanager --- lib/Doctrine/ORM/EntityManager.php | 2 +- .../Tests/Mocks/EntityManagerMock.php | 526 +++++++++++++++++- 2 files changed, 523 insertions(+), 5 deletions(-) diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 37952e80095..1799c540f6e 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -156,7 +156,7 @@ final class EntityManager implements EntityManagerInterface * @param \Doctrine\ORM\Configuration $config * @param \Doctrine\Common\EventManager $eventManager */ - protected function __construct(Connection $conn, Configuration $config, EventManager $eventManager) + public function __construct(Connection $conn, Configuration $config, EventManager $eventManager) { $this->conn = $conn; $this->config = $config; diff --git a/tests/Doctrine/Tests/Mocks/EntityManagerMock.php b/tests/Doctrine/Tests/Mocks/EntityManagerMock.php index beedf05f960..ce1eae1e03a 100644 --- a/tests/Doctrine/Tests/Mocks/EntityManagerMock.php +++ b/tests/Doctrine/Tests/Mocks/EntityManagerMock.php @@ -7,11 +7,21 @@ use Doctrine\Common\EventManager; use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; +use Doctrine\ORM\Mapping; +use Doctrine\ORM\NativeQuery; +use Doctrine\ORM\OptimisticLockException; +use Doctrine\ORM\ORMException; +use Doctrine\ORM\PessimisticLockException; +use Doctrine\ORM\Query; +use Doctrine\ORM\Query\ResultSetMapping; +use Doctrine\ORM\QueryBuilder; +use Doctrine\ORM\Utility\IdentifierFlattener; /** * Special EntityManager mock used for testing purposes. */ -class EntityManagerMock extends EntityManager +class EntityManagerMock implements EntityManagerInterface { /** * @var \Doctrine\ORM\UnitOfWork|null @@ -23,12 +33,25 @@ class EntityManagerMock extends EntityManager */ private $proxyFactoryMock; + /** @var EntityManagerInterface $em */ + private $em; + + /** + * EntityManagerMock constructor. + * + * @param EntityManagerInterface $em + */ + public function __construct(EntityManagerInterface $em) + { + $this->em = $em; + } + /** * {@inheritdoc} */ public function getUnitOfWork() { - return isset($this->uowMock) ? $this->uowMock : parent::getUnitOfWork(); + return isset($this->uowMock) ? $this->uowMock : $this->em->getUnitOfWork(); } /* Mock API */ @@ -60,7 +83,7 @@ public function setProxyFactory($proxyFactory) */ public function getProxyFactory() { - return isset($this->proxyFactoryMock) ? $this->proxyFactoryMock : parent::getProxyFactory(); + return isset($this->proxyFactoryMock) ? $this->proxyFactoryMock : $this->em->getProxyFactory(); } /** @@ -79,7 +102,502 @@ public static function create($conn, Configuration $config = null, EventManager if (null === $eventManager) { $eventManager = new EventManager(); } + return new EntityManagerMock(new EntityManager($conn, $config, $eventManager)); + } + + /** + * Returns the cache API for managing the second level cache regions or NULL if the cache is not enabled. + * + * @return \Doctrine\ORM\Cache|null + */ + public function getCache() + { + return $this->em->getCache(); + } + + /** + * Gets the database connection object used by the EntityManager. + * + * @return \Doctrine\DBAL\Connection + */ + public function getConnection() + { + return $this->em->getConnection(); + } + + + /** + * @return Query\Expr + */ + public function getExpressionBuilder() + { + return $this->em->getExpressionBuilder(); + } + + /** + * Gets an IdentifierFlattener used for converting Entities into an array of identifier values. + * + * @return IdentifierFlattener + */ + public function getIdentifierFlattener() + { + return $this->em->getIdentifierFlattener(); + } + + /** + * Starts a transaction on the underlying database connection. + * + * @return void + */ + public function beginTransaction() + { + $this->em->beginTransaction(); + } + + /** + * Executes a function in a transaction. + * + * The function gets passed this EntityManager instance as an (optional) parameter. + * + * {@link flush} is invoked prior to transaction commit. + * + * If an exception occurs during execution of the function or flushing or transaction commit, + * the transaction is rolled back, the EntityManager closed and the exception re-thrown. + * + * @param callable $func The function to execute transactionally. + * + * @return mixed The value returned from the closure. + * + * @throws \Throwable + */ + public function transactional(callable $func) + { + return $this->em->transactional($func); + } + + /** + * Commits a transaction on the underlying database connection. + * + * @return void + */ + public function commit() + { + $this->em->commit(); + } + + /** + * Performs a rollback on the underlying database connection. + * + * @return void + */ + public function rollback() + { + $this->em->rollback(); + } + + /** + * Creates a new Query object. + * + * @param string $dql The DQL string. + * + * @return Query + */ + public function createQuery($dql = '') + { + return $this->em->createQuery($dql); + } + + /** + * Creates a Query from a named query. + * + * @param string $name + * + * @return Query + */ + public function createNamedQuery($name) + { + return $this->em->createNamedQuery($name); + } + + /** + * Creates a native SQL query. + * + * @param string $sql + * @param ResultSetMapping $rsm The ResultSetMapping to use. + * + * @return NativeQuery + */ + public function createNativeQuery($sql, ResultSetMapping $rsm) + { + return $this->em->createNativeQuery($sql, $rsm); + } + + /** + * Creates a NativeQuery from a named native query. + * + * @param string $name + * + * @return NativeQuery + */ + public function createNamedNativeQuery($name) + { + return $this->em->createNamedNativeQuery($name); + } + + /** + * Create a QueryBuilder instance + * + * @return QueryBuilder + */ + public function createQueryBuilder() + { + return $this->em->createQueryBuilder(); + } + + /** + * Gets a reference to the entity identified by the given type and identifier + * without actually loading it, if the entity is not yet loaded. + * + * @param string $entityName The name of the entity type. + * @param mixed $id The entity identifier. + * + * @return object The entity reference. + * + * @throws ORMException + */ + public function getReference($entityName, $id) + { + return $this->em->getReference($entityName, $id); + } + + /** + * Gets a partial reference to the entity identified by the given type and identifier + * without actually loading it, if the entity is not yet loaded. + * + * The returned reference may be a partial object if the entity is not yet loaded/managed. + * If it is a partial object it will not initialize the rest of the entity state on access. + * Thus you can only ever safely access the identifier of an entity obtained through + * this method. + * + * The use-cases for partial references involve maintaining bidirectional associations + * without loading one side of the association or to update an entity without loading it. + * Note, however, that in the latter case the original (persistent) entity data will + * never be visible to the application (especially not event listeners) as it will + * never be loaded in the first place. + * + * @param string $entityName The name of the entity type. + * @param mixed $identifier The entity identifier. + * + * @return object The (partial) entity reference. + */ + public function getPartialReference($entityName, $identifier) + { + return $this->em->getPartialReference($entityName, $identifier); + } + + /** + * Closes the EntityManager. All entities that are currently managed + * by this EntityManager become detached. The EntityManager may no longer + * be used after it is closed. + * + * @return void + */ + public function close() + { + $this->em->close(); + } + + /** + * Creates a copy of the given entity. Can create a shallow or a deep copy. + * + * @param object $entity The entity to copy. + * @param boolean $deep FALSE for a shallow copy, TRUE for a deep copy. + * + * @return object The new entity. + * + * @throws \BadMethodCallException + */ + public function copy($entity, $deep = false) + { + return $this->em->copy($entity, $deep); + } + + /** + * Acquire a lock on the given entity. + * + * @param object $entity + * @param int $lockMode + * @param int|null $lockVersion + * + * @return void + * + * @throws OptimisticLockException + * @throws PessimisticLockException + */ + public function lock($entity, $lockMode, $lockVersion = null) + { + $this->em->lock($entity, $lockMode, $lockVersion); + } + + /** + * Gets the EventManager used by the EntityManager. + * + * @return \Doctrine\Common\EventManager + */ + public function getEventManager() + { + return $this->em->getEventManager(); + } - return new EntityManagerMock($conn, $config, $eventManager); + /** + * Gets the Configuration used by the EntityManager. + * + * @return Configuration + */ + public function getConfiguration() + { + return $this->em->getConfiguration(); + } + + /** + * Check if the Entity manager is open or closed. + * + * @return bool + */ + public function isOpen() + { + return $this->em->isOpen(); + } + + /** + * Gets a hydrator for the given hydration mode. + * + * This method caches the hydrator instances which is used for all queries that don't + * selectively iterate over the result. + * + * @deprecated + * + * @param int $hydrationMode + * + * @return \Doctrine\ORM\Internal\Hydration\AbstractHydrator + */ + public function getHydrator($hydrationMode) + { + return $this->em->getHydrator($hydrationMode); + } + + /** + * Create a new instance for the given hydration mode. + * + * @param int $hydrationMode + * + * @return \Doctrine\ORM\Internal\Hydration\AbstractHydrator + * + * @throws ORMException + */ + public function newHydrator($hydrationMode) + { + return $this->em->newHydrator($hydrationMode); + } + + /** + * Gets the enabled filters. + * + * @return \Doctrine\ORM\Query\FilterCollection The active filter collection. + */ + public function getFilters() + { + return $this->em->getFilters(); + } + + /** + * Checks whether the state of the filter collection is clean. + * + * @return boolean True, if the filter collection is clean. + */ + public function isFiltersStateClean() + { + return $this->em->isFiltersStateClean(); + } + + /** + * Checks whether the Entity Manager has filters. + * + * @return boolean True, if the EM has a filter collection. + */ + public function hasFilters() + { + return $this->em->hasFilters(); + } + + /** + * Finds an object by its identifier. + * + * This is just a convenient shortcut for getRepository($className)->find($id). + * + * @param string $className The class name of the object to find. + * @param mixed $id The identity of the object to find. + * + * @return object The found object. + */ + public function find($className, $id) + { + return $this->em->find($className, $id); + } + + /** + * Tells the ObjectManager to make an instance managed and persistent. + * + * The object will be entered into the database as a result of the flush operation. + * + * NOTE: The persist operation always considers objects that are not yet known to + * this ObjectManager as NEW. Do not pass detached objects to the persist operation. + * + * @param object $object The instance to make managed and persistent. + * + * @return void + */ + public function persist($object) + { + $this->em->persist($object); + } + + /** + * Removes an object instance. + * + * A removed object will be removed from the database as a result of the flush operation. + * + * @param object $object The object instance to remove. + * + * @return void + */ + public function remove($object) + { + $this->em->remove($object); + } + + /** + * Merges the state of a detached object into the persistence context + * of this ObjectManager and returns the managed copy of the object. + * The object passed to merge will not become associated/managed with this ObjectManager. + * + * @param object $object + * + * @return object + */ + public function merge($object) + { + return $this->em->merge($object); + } + + /** + * Clears the ObjectManager. All objects that are currently managed + * by this ObjectManager become detached. + * + * @param string|null $objectName if given, only objects of this type will get detached. + * + * @return void + */ + public function clear($objectName = null) + { + $this->em->clear($objectName); + } + + /** + * Detaches an object from the ObjectManager, causing a managed object to + * become detached. Unflushed changes made to the object if any + * (including removal of the object), will not be synchronized to the database. + * Objects which previously referenced the detached object will continue to + * reference it. + * + * @param object $object The object to detach. + * + * @return void + */ + public function detach($object) + { + $this->em->detach($object); + } + + /** + * Refreshes the persistent state of an object from the database, + * overriding any local changes that have not yet been persisted. + * + * @param object $object The object to refresh. + * + * @return void + */ + public function refresh($object) + { + $this->em->refresh($object); + } + + /** + * Flushes all changes to objects that have been queued up to now to the database. + * This effectively synchronizes the in-memory state of managed objects with the + * database. + * + * @return void + */ + public function flush() + { + $this->em->flush(); + } + + /** + * Gets the repository for a class. + * + * @param string $className + * + * @return \Doctrine\Common\Persistence\ObjectRepository + */ + public function getRepository($className) + { + return $this->em->getRepository($className); + } + + /** + * Gets the metadata factory used to gather the metadata of classes. + * + * @return \Doctrine\Common\Persistence\Mapping\ClassMetadataFactory + */ + public function getMetadataFactory() + { + return $this->em->getMetadataFactory(); + } + + /** + * Helper method to initialize a lazy loading proxy or persistent collection. + * + * This method is a no-op for other objects. + * + * @param object $obj + * + * @return void + */ + public function initializeObject($obj) + { + $this->em->initializeObject($obj); + } + + /** + * Checks if the object is part of the current UnitOfWork and therefore managed. + * + * @param object $object + * + * @return bool + */ + public function contains($object) + { + return $this->em->contains($object); + } + + /** + * @param string $className + * @return Mapping\ClassMetadata + */ + public function getClassMetadata($className) : Mapping\ClassMetadata + { + return $this->em->getClassMetadata($className); } } From 3f4514fcae7f9fdb11c5f99df41b86adec2719d2 Mon Sep 17 00:00:00 2001 From: mike Date: Thu, 3 Aug 2017 16:05:52 +0200 Subject: [PATCH 191/275] removing copyright headers in every files --- bin/doctrine.php | 17 ----------------- lib/Doctrine/ORM/AbstractQuery.php | 17 ----------------- lib/Doctrine/ORM/Annotation/Annotation.php | 17 ----------------- .../ORM/Annotation/AssociationOverride.php | 17 ----------------- .../ORM/Annotation/AssociationOverrides.php | 17 ----------------- .../ORM/Annotation/AttributeOverride.php | 17 ----------------- .../ORM/Annotation/AttributeOverrides.php | 17 ----------------- lib/Doctrine/ORM/Annotation/Cache.php | 17 ----------------- .../ORM/Annotation/ChangeTrackingPolicy.php | 17 ----------------- lib/Doctrine/ORM/Annotation/Column.php | 17 ----------------- lib/Doctrine/ORM/Annotation/ColumnResult.php | 17 ----------------- .../ORM/Annotation/CustomIdGenerator.php | 17 ----------------- .../ORM/Annotation/DiscriminatorColumn.php | 17 ----------------- .../ORM/Annotation/DiscriminatorMap.php | 17 ----------------- .../ORM/Annotation/DoctrineAnnotations.php | 17 ----------------- lib/Doctrine/ORM/Annotation/Embeddable.php | 17 ----------------- lib/Doctrine/ORM/Annotation/Embedded.php | 17 ----------------- lib/Doctrine/ORM/Annotation/Entity.php | 17 ----------------- lib/Doctrine/ORM/Annotation/EntityListeners.php | 17 ----------------- lib/Doctrine/ORM/Annotation/EntityResult.php | 17 ----------------- lib/Doctrine/ORM/Annotation/FieldResult.php | 17 ----------------- lib/Doctrine/ORM/Annotation/GeneratedValue.php | 17 ----------------- .../ORM/Annotation/HasLifecycleCallbacks.php | 17 ----------------- lib/Doctrine/ORM/Annotation/Id.php | 17 ----------------- lib/Doctrine/ORM/Annotation/Index.php | 17 ----------------- lib/Doctrine/ORM/Annotation/InheritanceType.php | 17 ----------------- lib/Doctrine/ORM/Annotation/JoinColumn.php | 17 ----------------- lib/Doctrine/ORM/Annotation/JoinColumns.php | 17 ----------------- lib/Doctrine/ORM/Annotation/JoinTable.php | 17 ----------------- lib/Doctrine/ORM/Annotation/ManyToMany.php | 17 ----------------- lib/Doctrine/ORM/Annotation/ManyToOne.php | 17 ----------------- .../ORM/Annotation/MappedSuperclass.php | 17 ----------------- .../ORM/Annotation/NamedNativeQueries.php | 17 ----------------- .../ORM/Annotation/NamedNativeQuery.php | 17 ----------------- lib/Doctrine/ORM/Annotation/NamedQueries.php | 17 ----------------- lib/Doctrine/ORM/Annotation/NamedQuery.php | 17 ----------------- lib/Doctrine/ORM/Annotation/OneToMany.php | 17 ----------------- lib/Doctrine/ORM/Annotation/OneToOne.php | 17 ----------------- lib/Doctrine/ORM/Annotation/OrderBy.php | 17 ----------------- lib/Doctrine/ORM/Annotation/PostLoad.php | 17 ----------------- lib/Doctrine/ORM/Annotation/PostPersist.php | 17 ----------------- lib/Doctrine/ORM/Annotation/PostRemove.php | 17 ----------------- lib/Doctrine/ORM/Annotation/PostUpdate.php | 17 ----------------- lib/Doctrine/ORM/Annotation/PreFlush.php | 17 ----------------- lib/Doctrine/ORM/Annotation/PrePersist.php | 17 ----------------- lib/Doctrine/ORM/Annotation/PreRemove.php | 17 ----------------- lib/Doctrine/ORM/Annotation/PreUpdate.php | 17 ----------------- .../ORM/Annotation/SequenceGenerator.php | 17 ----------------- .../ORM/Annotation/SqlResultSetMapping.php | 17 ----------------- .../ORM/Annotation/SqlResultSetMappings.php | 17 ----------------- lib/Doctrine/ORM/Annotation/Table.php | 17 ----------------- .../ORM/Annotation/UniqueConstraint.php | 17 ----------------- lib/Doctrine/ORM/Annotation/Version.php | 17 ----------------- lib/Doctrine/ORM/Cache.php | 17 ----------------- .../ORM/Cache/AssociationCacheEntry.php | 17 ----------------- lib/Doctrine/ORM/Cache/CacheConfiguration.php | 17 ----------------- lib/Doctrine/ORM/Cache/CacheEntry.php | 17 ----------------- lib/Doctrine/ORM/Cache/CacheException.php | 17 ----------------- lib/Doctrine/ORM/Cache/CacheFactory.php | 17 ----------------- lib/Doctrine/ORM/Cache/CacheKey.php | 17 ----------------- lib/Doctrine/ORM/Cache/CollectionCacheEntry.php | 17 ----------------- lib/Doctrine/ORM/Cache/CollectionCacheKey.php | 17 ----------------- lib/Doctrine/ORM/Cache/CollectionHydrator.php | 17 ----------------- lib/Doctrine/ORM/Cache/ConcurrentRegion.php | 17 ----------------- lib/Doctrine/ORM/Cache/DefaultCache.php | 17 ----------------- lib/Doctrine/ORM/Cache/DefaultCacheFactory.php | 17 ----------------- .../ORM/Cache/DefaultCollectionHydrator.php | 17 ----------------- .../ORM/Cache/DefaultEntityHydrator.php | 17 ----------------- lib/Doctrine/ORM/Cache/DefaultQueryCache.php | 17 ----------------- lib/Doctrine/ORM/Cache/EntityCacheEntry.php | 17 ----------------- lib/Doctrine/ORM/Cache/EntityCacheKey.php | 17 ----------------- lib/Doctrine/ORM/Cache/EntityHydrator.php | 17 ----------------- lib/Doctrine/ORM/Cache/Lock.php | 17 ----------------- lib/Doctrine/ORM/Cache/LockException.php | 17 ----------------- lib/Doctrine/ORM/Cache/Logging/CacheLogger.php | 17 ----------------- .../ORM/Cache/Logging/CacheLoggerChain.php | 17 ----------------- .../ORM/Cache/Logging/StatisticsCacheLogger.php | 17 ----------------- lib/Doctrine/ORM/Cache/MultiGetRegion.php | 17 ----------------- .../ORM/Cache/Persister/CachedPersister.php | 17 ----------------- .../Collection/AbstractCollectionPersister.php | 17 ----------------- .../Collection/CachedCollectionPersister.php | 17 ----------------- ...StrictReadWriteCachedCollectionPersister.php | 17 ----------------- .../ReadOnlyCachedCollectionPersister.php | 17 ----------------- .../ReadWriteCachedCollectionPersister.php | 17 ----------------- .../Entity/AbstractEntityPersister.php | 17 ----------------- .../Persister/Entity/CachedEntityPersister.php | 17 ----------------- .../NonStrictReadWriteCachedEntityPersister.php | 17 ----------------- .../Entity/ReadOnlyCachedEntityPersister.php | 17 ----------------- .../Entity/ReadWriteCachedEntityPersister.php | 17 ----------------- lib/Doctrine/ORM/Cache/QueryCache.php | 17 ----------------- lib/Doctrine/ORM/Cache/QueryCacheEntry.php | 17 ----------------- lib/Doctrine/ORM/Cache/QueryCacheKey.php | 17 ----------------- lib/Doctrine/ORM/Cache/QueryCacheValidator.php | 17 ----------------- lib/Doctrine/ORM/Cache/Region.php | 17 ----------------- .../ORM/Cache/Region/DefaultMultiGetRegion.php | 17 ----------------- lib/Doctrine/ORM/Cache/Region/DefaultRegion.php | 17 ----------------- .../ORM/Cache/Region/FileLockRegion.php | 17 ----------------- .../ORM/Cache/Region/UpdateTimestampCache.php | 17 ----------------- lib/Doctrine/ORM/Cache/RegionsConfiguration.php | 17 ----------------- lib/Doctrine/ORM/Cache/TimestampCacheEntry.php | 17 ----------------- lib/Doctrine/ORM/Cache/TimestampCacheKey.php | 17 ----------------- .../ORM/Cache/TimestampQueryCacheValidator.php | 17 ----------------- lib/Doctrine/ORM/Cache/TimestampRegion.php | 17 ----------------- lib/Doctrine/ORM/Configuration.php | 17 ----------------- .../ORM/Configuration/MetadataConfiguration.php | 17 ----------------- .../ORM/Configuration/ProxyConfiguration.php | 17 ----------------- .../ORM/Decorator/EntityManagerDecorator.php | 17 ----------------- lib/Doctrine/ORM/EntityManager.php | 17 ----------------- lib/Doctrine/ORM/EntityManagerAware.php | 17 ----------------- lib/Doctrine/ORM/EntityManagerInterface.php | 17 ----------------- lib/Doctrine/ORM/EntityNotFoundException.php | 17 ----------------- lib/Doctrine/ORM/EntityRepository.php | 17 ----------------- lib/Doctrine/ORM/Event/LifecycleEventArgs.php | 17 ----------------- lib/Doctrine/ORM/Event/ListenersInvoker.php | 17 ----------------- .../ORM/Event/LoadClassMetadataEventArgs.php | 17 ----------------- .../Event/OnClassMetadataNotFoundEventArgs.php | 17 ----------------- lib/Doctrine/ORM/Event/OnClearEventArgs.php | 17 ----------------- lib/Doctrine/ORM/Event/OnFlushEventArgs.php | 17 ----------------- lib/Doctrine/ORM/Event/PostFlushEventArgs.php | 17 ----------------- lib/Doctrine/ORM/Event/PreFlushEventArgs.php | 17 ----------------- lib/Doctrine/ORM/Event/PreUpdateEventArgs.php | 17 ----------------- lib/Doctrine/ORM/Events.php | 17 ----------------- .../ORM/Internal/CommitOrderCalculator.php | 17 ----------------- .../ORM/Internal/Hydration/AbstractHydrator.php | 17 ----------------- .../ORM/Internal/Hydration/ArrayHydrator.php | 17 ----------------- .../Internal/Hydration/HydrationException.php | 17 ----------------- .../ORM/Internal/Hydration/IterableResult.php | 17 ----------------- .../ORM/Internal/Hydration/ObjectHydrator.php | 17 ----------------- .../ORM/Internal/Hydration/ScalarHydrator.php | 17 ----------------- .../Internal/Hydration/SimpleObjectHydrator.php | 17 ----------------- .../Internal/Hydration/SingleScalarHydrator.php | 17 ----------------- .../ORM/Internal/HydrationCompleteHandler.php | 17 ----------------- lib/Doctrine/ORM/LazyCriteriaCollection.php | 17 ----------------- .../Mapping/AbstractClassMetadataFactory.php | 17 ----------------- .../ORM/Mapping/AssociationMetadata.php | 17 ----------------- lib/Doctrine/ORM/Mapping/CacheMetadata.php | 17 ----------------- lib/Doctrine/ORM/Mapping/CacheUsage.php | 17 ----------------- .../ORM/Mapping/ChangeTrackingPolicy.php | 17 ----------------- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 17 ----------------- .../ORM/Mapping/ClassMetadataFactory.php | 17 ----------------- lib/Doctrine/ORM/Mapping/ColumnMetadata.php | 17 ----------------- lib/Doctrine/ORM/Mapping/ComponentMetadata.php | 17 ----------------- .../Mapping/DefaultEntityListenerResolver.php | 17 ----------------- .../ORM/Mapping/DiscriminatorColumnMetadata.php | 17 ----------------- .../ORM/Mapping/Driver/AnnotationDriver.php | 17 ----------------- .../ORM/Mapping/Driver/DatabaseDriver.php | 17 ----------------- lib/Doctrine/ORM/Mapping/Driver/DriverChain.php | 17 ----------------- lib/Doctrine/ORM/Mapping/Driver/FileDriver.php | 17 ----------------- .../ORM/Mapping/Driver/MappingDriver.php | 17 ----------------- .../ORM/Mapping/Driver/NewAnnotationDriver.php | 17 ----------------- lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php | 17 ----------------- .../ORM/Mapping/Driver/SimplifiedXmlDriver.php | 17 ----------------- .../ORM/Mapping/Driver/StaticPHPDriver.php | 17 ----------------- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 17 ----------------- .../ORM/Mapping/EmbeddedClassMetadata.php | 17 ----------------- .../ORM/Mapping/EntityClassMetadata.php | 17 ----------------- .../ORM/Mapping/EntityListenerResolver.php | 17 ----------------- .../Exporter/AssociationMetadataExporter.php | 17 ----------------- .../Mapping/Exporter/CacheMetadataExporter.php | 17 ----------------- .../Mapping/Exporter/ClassMetadataExporter.php | 17 ----------------- .../Mapping/Exporter/ColumnMetadataExporter.php | 17 ----------------- .../DiscriminatorColumnMetadataExporter.php | 17 ----------------- lib/Doctrine/ORM/Mapping/Exporter/Exporter.php | 17 ----------------- .../Mapping/Exporter/FieldMetadataExporter.php | 17 ----------------- .../Exporter/JoinColumnMetadataExporter.php | 17 ----------------- .../Exporter/JoinTableMetadataExporter.php | 17 ----------------- .../Exporter/LocalColumnMetadataExporter.php | 17 ----------------- .../ManyToManyAssociationMetadataExporter.php | 17 ----------------- .../ManyToOneAssociationMetadataExporter.php | 17 ----------------- .../OneToManyAssociationMetadataExporter.php | 17 ----------------- .../OneToOneAssociationMetadataExporter.php | 17 ----------------- .../Mapping/Exporter/TableMetadataExporter.php | 17 ----------------- .../ToManyAssociationMetadataExporter.php | 17 ----------------- .../ToOneAssociationMetadataExporter.php | 17 ----------------- .../Exporter/TransientMetadataExporter.php | 17 ----------------- .../ORM/Mapping/Exporter/VariableExporter.php | 17 ----------------- .../Exporter/VersionFieldMetadataExporter.php | 17 ----------------- .../Factory/AbstractClassMetadataFactory.php | 17 ----------------- lib/Doctrine/ORM/Mapping/Factory/Autoloader.php | 17 ----------------- .../Factory/ClassMetadataBuildingContext.php | 17 ----------------- .../Mapping/Factory/ClassMetadataDefinition.php | 17 ----------------- .../Factory/ClassMetadataDefinitionFactory.php | 17 ----------------- .../Mapping/Factory/ClassMetadataGenerator.php | 17 ----------------- .../Mapping/Factory/ClassMetadataResolver.php | 17 ----------------- .../Factory/DefaultClassMetadataResolver.php | 17 ----------------- .../Mapping/Factory/DefaultNamingStrategy.php | 17 ----------------- .../ORM/Mapping/Factory/NamingStrategy.php | 17 ----------------- .../Factory/RuntimeClassMetadataFactory.php | 17 ----------------- lib/Doctrine/ORM/Mapping/Factory/SecondPass.php | 17 ----------------- .../Factory/StaticClassMetadataFactory.php | 17 ----------------- .../Strategy/ClassMetadataGeneratorStrategy.php | 17 ----------------- ...FileWriterClassMetadataGeneratorStrategy.php | 17 ----------------- ...EvaluatingClassMetadataGeneratorStrategy.php | 17 ----------------- ...FileReaderClassMetadataGeneratorStrategy.php | 17 ----------------- ...FileWriterClassMetadataGeneratorStrategy.php | 17 ----------------- .../Factory/UnderscoreNamingStrategy.php | 17 ----------------- lib/Doctrine/ORM/Mapping/FetchMode.php | 17 ----------------- lib/Doctrine/ORM/Mapping/FieldMetadata.php | 17 ----------------- lib/Doctrine/ORM/Mapping/GeneratorType.php | 17 ----------------- lib/Doctrine/ORM/Mapping/InheritanceType.php | 17 ----------------- lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php | 17 ----------------- lib/Doctrine/ORM/Mapping/JoinTableMetadata.php | 17 ----------------- .../ORM/Mapping/LocalColumnMetadata.php | 17 ----------------- .../Mapping/ManyToManyAssociationMetadata.php | 17 ----------------- .../Mapping/ManyToOneAssociationMetadata.php | 17 ----------------- .../ORM/Mapping/MappedSuperClassMetadata.php | 17 ----------------- lib/Doctrine/ORM/Mapping/MappingException.php | 17 ----------------- .../Mapping/OneToManyAssociationMetadata.php | 17 ----------------- .../ORM/Mapping/OneToOneAssociationMetadata.php | 17 ----------------- lib/Doctrine/ORM/Mapping/Property.php | 17 ----------------- .../ORM/Mapping/ReflectionEmbeddedProperty.php | 17 ----------------- lib/Doctrine/ORM/Mapping/RootClassMetadata.php | 17 ----------------- lib/Doctrine/ORM/Mapping/SubClassMetadata.php | 17 ----------------- lib/Doctrine/ORM/Mapping/TableMetadata.php | 17 ----------------- lib/Doctrine/ORM/Mapping/TableOwner.php | 17 ----------------- .../ORM/Mapping/ToManyAssociationMetadata.php | 17 ----------------- .../ORM/Mapping/ToOneAssociationMetadata.php | 17 ----------------- lib/Doctrine/ORM/Mapping/TransientMetadata.php | 17 ----------------- .../ORM/Mapping/ValueGeneratorMetadata.php | 17 ----------------- .../ORM/Mapping/VersionFieldMetadata.php | 17 ----------------- lib/Doctrine/ORM/NativeQuery.php | 17 ----------------- lib/Doctrine/ORM/NoResultException.php | 17 ----------------- lib/Doctrine/ORM/NonUniqueResultException.php | 17 ----------------- lib/Doctrine/ORM/ORMException.php | 17 ----------------- .../ORM/ORMInvalidArgumentException.php | 17 ----------------- lib/Doctrine/ORM/OptimisticLockException.php | 17 ----------------- lib/Doctrine/ORM/PersistentCollection.php | 17 ----------------- lib/Doctrine/ORM/PersistentObject.php | 17 ----------------- .../Collection/AbstractCollectionPersister.php | 17 ----------------- .../Collection/CollectionPersister.php | 17 ----------------- .../Collection/ManyToManyPersister.php | 17 ----------------- .../Collection/OneToManyPersister.php | 17 ----------------- .../AbstractEntityInheritancePersister.php | 17 ----------------- .../Persisters/Entity/BasicEntityPersister.php | 17 ----------------- .../Entity/CachedPersisterContext.php | 17 ----------------- .../ORM/Persisters/Entity/EntityPersister.php | 17 ----------------- .../Entity/JoinedSubclassPersister.php | 17 ----------------- .../Persisters/Entity/SingleTablePersister.php | 17 ----------------- .../ORM/Persisters/PersisterException.php | 17 ----------------- .../ORM/Persisters/SqlExpressionVisitor.php | 17 ----------------- lib/Doctrine/ORM/Persisters/SqlValueVisitor.php | 17 ----------------- lib/Doctrine/ORM/PessimisticLockException.php | 17 ----------------- lib/Doctrine/ORM/Proxy/Factory/Autoloader.php | 17 ----------------- .../ORM/Proxy/Factory/DefaultProxyResolver.php | 17 ----------------- .../ORM/Proxy/Factory/ProxyDefinition.php | 17 ----------------- .../Proxy/Factory/ProxyDefinitionFactory.php | 17 ----------------- .../ORM/Proxy/Factory/ProxyException.php | 17 ----------------- lib/Doctrine/ORM/Proxy/Factory/ProxyFactory.php | 17 ----------------- .../ORM/Proxy/Factory/ProxyGenerator.php | 17 ----------------- .../ORM/Proxy/Factory/ProxyResolver.php | 17 ----------------- .../ORM/Proxy/Factory/StaticProxyFactory.php | 17 ----------------- ...ditionalFileWriterProxyGeneratorStrategy.php | 17 ----------------- .../EvaluatingProxyGeneratorStrategy.php | 17 ----------------- .../FileReaderProxyGeneratorStrategy.php | 17 ----------------- .../FileWriterProxyGeneratorStrategy.php | 17 ----------------- .../Factory/Strategy/ProxyGeneratorStrategy.php | 17 ----------------- lib/Doctrine/ORM/Proxy/Proxy.php | 17 ----------------- lib/Doctrine/ORM/Query.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/ASTException.php | 17 ----------------- .../ORM/Query/AST/AggregateExpression.php | 17 ----------------- .../ORM/Query/AST/ArithmeticExpression.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/ArithmeticFactor.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/ArithmeticTerm.php | 17 ----------------- .../ORM/Query/AST/BetweenExpression.php | 17 ----------------- .../ORM/Query/AST/CoalesceExpression.php | 17 ----------------- .../Query/AST/CollectionMemberExpression.php | 17 ----------------- .../ORM/Query/AST/ComparisonExpression.php | 17 ----------------- .../ORM/Query/AST/ConditionalExpression.php | 17 ----------------- .../ORM/Query/AST/ConditionalFactor.php | 17 ----------------- .../ORM/Query/AST/ConditionalPrimary.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/ConditionalTerm.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/DeleteClause.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/DeleteStatement.php | 17 ----------------- .../AST/EmptyCollectionComparisonExpression.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/ExistsExpression.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/FromClause.php | 17 ----------------- .../ORM/Query/AST/Functions/AbsFunction.php | 17 ----------------- .../ORM/Query/AST/Functions/AvgFunction.php | 17 ----------------- .../ORM/Query/AST/Functions/BitAndFunction.php | 17 ----------------- .../ORM/Query/AST/Functions/BitOrFunction.php | 17 ----------------- .../ORM/Query/AST/Functions/ConcatFunction.php | 17 ----------------- .../ORM/Query/AST/Functions/CountFunction.php | 17 ----------------- .../Query/AST/Functions/CurrentDateFunction.php | 17 ----------------- .../Query/AST/Functions/CurrentTimeFunction.php | 17 ----------------- .../AST/Functions/CurrentTimestampFunction.php | 17 ----------------- .../ORM/Query/AST/Functions/DateAddFunction.php | 17 ----------------- .../Query/AST/Functions/DateDiffFunction.php | 17 ----------------- .../ORM/Query/AST/Functions/DateSubFunction.php | 17 ----------------- .../ORM/Query/AST/Functions/FunctionNode.php | 17 ----------------- .../Query/AST/Functions/IdentityFunction.php | 17 ----------------- .../ORM/Query/AST/Functions/LengthFunction.php | 17 ----------------- .../ORM/Query/AST/Functions/LocateFunction.php | 17 ----------------- .../ORM/Query/AST/Functions/LowerFunction.php | 17 ----------------- .../ORM/Query/AST/Functions/MaxFunction.php | 17 ----------------- .../ORM/Query/AST/Functions/MinFunction.php | 17 ----------------- .../ORM/Query/AST/Functions/ModFunction.php | 17 ----------------- .../ORM/Query/AST/Functions/SizeFunction.php | 17 ----------------- .../ORM/Query/AST/Functions/SqrtFunction.php | 17 ----------------- .../Query/AST/Functions/SubstringFunction.php | 17 ----------------- .../ORM/Query/AST/Functions/SumFunction.php | 17 ----------------- .../ORM/Query/AST/Functions/TrimFunction.php | 17 ----------------- .../ORM/Query/AST/Functions/UpperFunction.php | 17 ----------------- .../ORM/Query/AST/GeneralCaseExpression.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/GroupByClause.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/HavingClause.php | 17 ----------------- .../AST/IdentificationVariableDeclaration.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/InExpression.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/IndexBy.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/InputParameter.php | 17 ----------------- .../ORM/Query/AST/InstanceOfExpression.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/Join.php | 17 ----------------- .../Query/AST/JoinAssociationDeclaration.php | 17 ----------------- .../Query/AST/JoinAssociationPathExpression.php | 17 ----------------- .../ORM/Query/AST/JoinClassPathExpression.php | 17 ----------------- .../ORM/Query/AST/JoinVariableDeclaration.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/LikeExpression.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/Literal.php | 17 ----------------- .../ORM/Query/AST/NewObjectExpression.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/Node.php | 17 ----------------- .../ORM/Query/AST/NullComparisonExpression.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/NullIfExpression.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/OrderByClause.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/OrderByItem.php | 17 ----------------- .../ORM/Query/AST/ParenthesisExpression.php | 17 ----------------- .../ORM/Query/AST/PartialObjectExpression.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/PathExpression.php | 17 ----------------- .../ORM/Query/AST/QuantifiedExpression.php | 17 ----------------- .../ORM/Query/AST/RangeVariableDeclaration.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/SelectClause.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/SelectExpression.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/SelectStatement.php | 17 ----------------- .../Query/AST/SimpleArithmeticExpression.php | 17 ----------------- .../ORM/Query/AST/SimpleCaseExpression.php | 17 ----------------- .../ORM/Query/AST/SimpleSelectClause.php | 17 ----------------- .../ORM/Query/AST/SimpleSelectExpression.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/SimpleWhenClause.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/Subselect.php | 17 ----------------- .../ORM/Query/AST/SubselectFromClause.php | 17 ----------------- ...bselectIdentificationVariableDeclaration.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/UpdateClause.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/UpdateItem.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/UpdateStatement.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/WhenClause.php | 17 ----------------- lib/Doctrine/ORM/Query/AST/WhereClause.php | 17 ----------------- .../ORM/Query/Exec/AbstractSqlExecutor.php | 17 ----------------- .../ORM/Query/Exec/MultiTableDeleteExecutor.php | 17 ----------------- .../ORM/Query/Exec/MultiTableUpdateExecutor.php | 17 ----------------- .../ORM/Query/Exec/SingleSelectExecutor.php | 17 ----------------- .../Exec/SingleTableDeleteUpdateExecutor.php | 17 ----------------- lib/Doctrine/ORM/Query/Expr.php | 17 ----------------- lib/Doctrine/ORM/Query/Expr/Andx.php | 17 ----------------- lib/Doctrine/ORM/Query/Expr/Base.php | 17 ----------------- lib/Doctrine/ORM/Query/Expr/Comparison.php | 17 ----------------- lib/Doctrine/ORM/Query/Expr/Composite.php | 17 ----------------- lib/Doctrine/ORM/Query/Expr/From.php | 17 ----------------- lib/Doctrine/ORM/Query/Expr/Func.php | 17 ----------------- lib/Doctrine/ORM/Query/Expr/GroupBy.php | 17 ----------------- lib/Doctrine/ORM/Query/Expr/Join.php | 17 ----------------- lib/Doctrine/ORM/Query/Expr/Literal.php | 17 ----------------- lib/Doctrine/ORM/Query/Expr/Math.php | 17 ----------------- lib/Doctrine/ORM/Query/Expr/OrderBy.php | 17 ----------------- lib/Doctrine/ORM/Query/Expr/Orx.php | 17 ----------------- lib/Doctrine/ORM/Query/Expr/Select.php | 17 ----------------- lib/Doctrine/ORM/Query/Filter/SQLFilter.php | 17 ----------------- lib/Doctrine/ORM/Query/FilterCollection.php | 17 ----------------- lib/Doctrine/ORM/Query/Lexer.php | 17 ----------------- lib/Doctrine/ORM/Query/Parameter.php | 17 ----------------- lib/Doctrine/ORM/Query/ParameterTypeInferer.php | 17 ----------------- lib/Doctrine/ORM/Query/Parser.php | 17 ----------------- lib/Doctrine/ORM/Query/ParserResult.php | 17 ----------------- lib/Doctrine/ORM/Query/Printer.php | 17 ----------------- lib/Doctrine/ORM/Query/QueryException.php | 17 ----------------- .../ORM/Query/QueryExpressionVisitor.php | 17 ----------------- lib/Doctrine/ORM/Query/ResultSetMapping.php | 17 ----------------- .../ORM/Query/ResultSetMappingBuilder.php | 17 ----------------- lib/Doctrine/ORM/Query/SqlWalker.php | 17 ----------------- lib/Doctrine/ORM/Query/TreeWalker.php | 17 ----------------- lib/Doctrine/ORM/Query/TreeWalkerAdapter.php | 17 ----------------- lib/Doctrine/ORM/Query/TreeWalkerChain.php | 17 ----------------- .../ORM/Query/TreeWalkerChainIterator.php | 17 ----------------- lib/Doctrine/ORM/QueryBuilder.php | 17 ----------------- .../ORM/Reflection/ReflectionService.php | 17 ----------------- .../RuntimePublicReflectionProperty.php | 17 ----------------- .../ORM/Reflection/RuntimeReflectionService.php | 17 ----------------- .../ORM/Reflection/StaticReflectionService.php | 17 ----------------- .../ORM/Repository/DefaultRepositoryFactory.php | 17 ----------------- .../ORM/Repository/RepositoryFactory.php | 17 ----------------- .../Sequencing/BigIntegerIdentityGenerator.php | 17 ----------------- lib/Doctrine/ORM/Sequencing/Generator.php | 17 ----------------- .../ORM/Sequencing/IdentityGenerator.php | 17 ----------------- .../Planning/ColumnValueGeneratorExecutor.php | 17 ----------------- .../Planning/CompositeValueGenerationPlan.php | 17 ----------------- .../Planning/NoopValueGenerationPlan.php | 17 ----------------- .../Planning/SingleValueGenerationPlan.php | 17 ----------------- .../Planning/ValueGenerationExecutor.php | 17 ----------------- .../Sequencing/Planning/ValueGenerationPlan.php | 17 ----------------- .../ORM/Sequencing/SequenceGenerator.php | 17 ----------------- lib/Doctrine/ORM/Sequencing/TableGenerator.php | 17 ----------------- lib/Doctrine/ORM/Sequencing/UuidGenerator.php | 17 ----------------- .../ORM/Tools/AttachEntityListenersListener.php | 17 ----------------- .../ClearCache/CollectionRegionCommand.php | 17 ----------------- .../Command/ClearCache/EntityRegionCommand.php | 17 ----------------- .../Command/ClearCache/MetadataCommand.php | 17 ----------------- .../Console/Command/ClearCache/QueryCommand.php | 17 ----------------- .../Command/ClearCache/QueryRegionCommand.php | 17 ----------------- .../Command/ClearCache/ResultCommand.php | 17 ----------------- .../Console/Command/ConvertMappingCommand.php | 17 ----------------- .../Command/EnsureProductionSettingsCommand.php | 17 ----------------- .../Console/Command/GenerateEntitiesCommand.php | 17 ----------------- .../Console/Command/GenerateProxiesCommand.php | 17 ----------------- .../Command/GenerateRepositoriesCommand.php | 17 ----------------- .../ORM/Tools/Console/Command/InfoCommand.php | 17 ----------------- .../Console/Command/MappingDescribeCommand.php | 17 ----------------- .../ORM/Tools/Console/Command/RunDqlCommand.php | 17 ----------------- .../Command/SchemaTool/AbstractCommand.php | 17 ----------------- .../Command/SchemaTool/CreateCommand.php | 17 ----------------- .../Console/Command/SchemaTool/DropCommand.php | 17 ----------------- .../Command/SchemaTool/UpdateCommand.php | 17 ----------------- .../Console/Command/ValidateSchemaCommand.php | 17 ----------------- .../ORM/Tools/Console/ConsoleRunner.php | 17 ----------------- .../Console/Helper/EntityManagerHelper.php | 17 ----------------- .../ORM/Tools/Console/MetadataFilter.php | 17 ----------------- .../ORM/Tools/DebugUnitOfWorkListener.php | 17 ----------------- .../Tools/DisconnectedClassMetadataFactory.php | 17 ----------------- lib/Doctrine/ORM/Tools/EntityGenerator.php | 17 ----------------- .../ORM/Tools/EntityRepositoryGenerator.php | 17 ----------------- .../ORM/Tools/Event/GenerateSchemaEventArgs.php | 17 ----------------- .../Event/GenerateSchemaTableEventArgs.php | 17 ----------------- .../ORM/Tools/Export/ClassMetadataExporter.php | 17 ----------------- .../Tools/Export/Driver/AbstractExporter.php | 17 ----------------- .../Tools/Export/Driver/AnnotationExporter.php | 17 ----------------- .../ORM/Tools/Export/Driver/PhpExporter.php | 17 ----------------- .../ORM/Tools/Export/Driver/XmlExporter.php | 17 ----------------- .../ORM/Tools/Export/ExportException.php | 17 ----------------- .../ORM/Tools/Pagination/CountOutputWalker.php | 17 ----------------- .../ORM/Tools/Pagination/CountWalker.php | 17 ----------------- .../Pagination/LimitSubqueryOutputWalker.php | 17 ----------------- .../Tools/Pagination/LimitSubqueryWalker.php | 17 ----------------- lib/Doctrine/ORM/Tools/Pagination/Paginator.php | 17 ----------------- .../Tools/Pagination/RowNumberOverFunction.php | 17 ----------------- .../ORM/Tools/Pagination/WhereInWalker.php | 17 ----------------- .../ORM/Tools/ResolveTargetEntityListener.php | 17 ----------------- lib/Doctrine/ORM/Tools/SchemaTool.php | 17 ----------------- lib/Doctrine/ORM/Tools/SchemaValidator.php | 17 ----------------- lib/Doctrine/ORM/Tools/Setup.php | 17 ----------------- lib/Doctrine/ORM/Tools/ToolEvents.php | 17 ----------------- lib/Doctrine/ORM/Tools/ToolsException.php | 17 ----------------- .../ORM/TransactionRequiredException.php | 17 ----------------- lib/Doctrine/ORM/UnexpectedResultException.php | 17 ----------------- lib/Doctrine/ORM/UnitOfWork.php | 17 ----------------- .../ORM/Utility/IdentifierFlattener.php | 17 ----------------- lib/Doctrine/ORM/Utility/PersisterHelper.php | 17 ----------------- lib/Doctrine/ORM/Version.php | 17 ----------------- .../Internal/HydrationCompleteHandlerTest.php | 17 ----------------- 454 files changed, 7718 deletions(-) diff --git a/bin/doctrine.php b/bin/doctrine.php index 81d4e7bf279..9e89c2044e0 100644 --- a/bin/doctrine.php +++ b/bin/doctrine.php @@ -1,21 +1,4 @@ . - */ use Symfony\Component\Console\Helper\HelperSet; use Doctrine\ORM\Tools\Console\ConsoleRunner; diff --git a/lib/Doctrine/ORM/AbstractQuery.php b/lib/Doctrine/ORM/AbstractQuery.php index 1fa0fd60c42..ad79766d117 100644 --- a/lib/Doctrine/ORM/AbstractQuery.php +++ b/lib/Doctrine/ORM/AbstractQuery.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/Annotation.php b/lib/Doctrine/ORM/Annotation/Annotation.php index 3b279a6f299..8d4304f51fc 100644 --- a/lib/Doctrine/ORM/Annotation/Annotation.php +++ b/lib/Doctrine/ORM/Annotation/Annotation.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/AssociationOverride.php b/lib/Doctrine/ORM/Annotation/AssociationOverride.php index 07d02e8546c..4af9f1876ea 100644 --- a/lib/Doctrine/ORM/Annotation/AssociationOverride.php +++ b/lib/Doctrine/ORM/Annotation/AssociationOverride.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/AssociationOverrides.php b/lib/Doctrine/ORM/Annotation/AssociationOverrides.php index 747aa3d4cad..0588441c83e 100644 --- a/lib/Doctrine/ORM/Annotation/AssociationOverrides.php +++ b/lib/Doctrine/ORM/Annotation/AssociationOverrides.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/AttributeOverride.php b/lib/Doctrine/ORM/Annotation/AttributeOverride.php index 283cbaaf035..1403eb6ae93 100644 --- a/lib/Doctrine/ORM/Annotation/AttributeOverride.php +++ b/lib/Doctrine/ORM/Annotation/AttributeOverride.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/AttributeOverrides.php b/lib/Doctrine/ORM/Annotation/AttributeOverrides.php index 04b549f7406..4df92b00c7a 100644 --- a/lib/Doctrine/ORM/Annotation/AttributeOverrides.php +++ b/lib/Doctrine/ORM/Annotation/AttributeOverrides.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/Cache.php b/lib/Doctrine/ORM/Annotation/Cache.php index 0803b03fdc5..a958a5a3104 100644 --- a/lib/Doctrine/ORM/Annotation/Cache.php +++ b/lib/Doctrine/ORM/Annotation/Cache.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/ChangeTrackingPolicy.php b/lib/Doctrine/ORM/Annotation/ChangeTrackingPolicy.php index 1f10c8ea84c..4898b1a2b06 100644 --- a/lib/Doctrine/ORM/Annotation/ChangeTrackingPolicy.php +++ b/lib/Doctrine/ORM/Annotation/ChangeTrackingPolicy.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/Column.php b/lib/Doctrine/ORM/Annotation/Column.php index 58e9e339d36..8a009bb3bd1 100644 --- a/lib/Doctrine/ORM/Annotation/Column.php +++ b/lib/Doctrine/ORM/Annotation/Column.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/ColumnResult.php b/lib/Doctrine/ORM/Annotation/ColumnResult.php index b437bccfd11..05912f6c981 100644 --- a/lib/Doctrine/ORM/Annotation/ColumnResult.php +++ b/lib/Doctrine/ORM/Annotation/ColumnResult.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/CustomIdGenerator.php b/lib/Doctrine/ORM/Annotation/CustomIdGenerator.php index 2df49c810ef..771a27264a1 100644 --- a/lib/Doctrine/ORM/Annotation/CustomIdGenerator.php +++ b/lib/Doctrine/ORM/Annotation/CustomIdGenerator.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/DiscriminatorColumn.php b/lib/Doctrine/ORM/Annotation/DiscriminatorColumn.php index e3c9d06a76e..a4e4fad7383 100644 --- a/lib/Doctrine/ORM/Annotation/DiscriminatorColumn.php +++ b/lib/Doctrine/ORM/Annotation/DiscriminatorColumn.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/DiscriminatorMap.php b/lib/Doctrine/ORM/Annotation/DiscriminatorMap.php index 480a1a81bc9..1b30b0a6d0b 100644 --- a/lib/Doctrine/ORM/Annotation/DiscriminatorMap.php +++ b/lib/Doctrine/ORM/Annotation/DiscriminatorMap.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/DoctrineAnnotations.php b/lib/Doctrine/ORM/Annotation/DoctrineAnnotations.php index e1a8ae9a63d..81ab6f711a9 100644 --- a/lib/Doctrine/ORM/Annotation/DoctrineAnnotations.php +++ b/lib/Doctrine/ORM/Annotation/DoctrineAnnotations.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/Embeddable.php b/lib/Doctrine/ORM/Annotation/Embeddable.php index 9d4219de13e..3a405146ac8 100644 --- a/lib/Doctrine/ORM/Annotation/Embeddable.php +++ b/lib/Doctrine/ORM/Annotation/Embeddable.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/Embedded.php b/lib/Doctrine/ORM/Annotation/Embedded.php index 801c228c1c1..e2ba2ac756f 100644 --- a/lib/Doctrine/ORM/Annotation/Embedded.php +++ b/lib/Doctrine/ORM/Annotation/Embedded.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/Entity.php b/lib/Doctrine/ORM/Annotation/Entity.php index cfa71386f00..54a9983eaaa 100644 --- a/lib/Doctrine/ORM/Annotation/Entity.php +++ b/lib/Doctrine/ORM/Annotation/Entity.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/EntityListeners.php b/lib/Doctrine/ORM/Annotation/EntityListeners.php index 96e6edb4e71..19e5e046464 100644 --- a/lib/Doctrine/ORM/Annotation/EntityListeners.php +++ b/lib/Doctrine/ORM/Annotation/EntityListeners.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/EntityResult.php b/lib/Doctrine/ORM/Annotation/EntityResult.php index 05e925f3b50..b3124cced14 100644 --- a/lib/Doctrine/ORM/Annotation/EntityResult.php +++ b/lib/Doctrine/ORM/Annotation/EntityResult.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/FieldResult.php b/lib/Doctrine/ORM/Annotation/FieldResult.php index 72de75a5e19..9a6f9094ea3 100644 --- a/lib/Doctrine/ORM/Annotation/FieldResult.php +++ b/lib/Doctrine/ORM/Annotation/FieldResult.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/GeneratedValue.php b/lib/Doctrine/ORM/Annotation/GeneratedValue.php index c12ad5edd7d..fa92a50db58 100644 --- a/lib/Doctrine/ORM/Annotation/GeneratedValue.php +++ b/lib/Doctrine/ORM/Annotation/GeneratedValue.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/HasLifecycleCallbacks.php b/lib/Doctrine/ORM/Annotation/HasLifecycleCallbacks.php index 56eee647c2c..4ebc8460c55 100644 --- a/lib/Doctrine/ORM/Annotation/HasLifecycleCallbacks.php +++ b/lib/Doctrine/ORM/Annotation/HasLifecycleCallbacks.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/Id.php b/lib/Doctrine/ORM/Annotation/Id.php index f5336e1edd1..1b17c662233 100644 --- a/lib/Doctrine/ORM/Annotation/Id.php +++ b/lib/Doctrine/ORM/Annotation/Id.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/Index.php b/lib/Doctrine/ORM/Annotation/Index.php index da3f0cb24aa..85344c5215a 100644 --- a/lib/Doctrine/ORM/Annotation/Index.php +++ b/lib/Doctrine/ORM/Annotation/Index.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/InheritanceType.php b/lib/Doctrine/ORM/Annotation/InheritanceType.php index 98d40f9e81d..fe51a7f1394 100644 --- a/lib/Doctrine/ORM/Annotation/InheritanceType.php +++ b/lib/Doctrine/ORM/Annotation/InheritanceType.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/JoinColumn.php b/lib/Doctrine/ORM/Annotation/JoinColumn.php index 464ea4dab27..544cf647781 100644 --- a/lib/Doctrine/ORM/Annotation/JoinColumn.php +++ b/lib/Doctrine/ORM/Annotation/JoinColumn.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/JoinColumns.php b/lib/Doctrine/ORM/Annotation/JoinColumns.php index 04771d8f460..2c528a4ce5d 100644 --- a/lib/Doctrine/ORM/Annotation/JoinColumns.php +++ b/lib/Doctrine/ORM/Annotation/JoinColumns.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/JoinTable.php b/lib/Doctrine/ORM/Annotation/JoinTable.php index d3cc3d91d78..184c2179663 100644 --- a/lib/Doctrine/ORM/Annotation/JoinTable.php +++ b/lib/Doctrine/ORM/Annotation/JoinTable.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/ManyToMany.php b/lib/Doctrine/ORM/Annotation/ManyToMany.php index 3b24b5ac7ab..aeeec2d36ff 100644 --- a/lib/Doctrine/ORM/Annotation/ManyToMany.php +++ b/lib/Doctrine/ORM/Annotation/ManyToMany.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/ManyToOne.php b/lib/Doctrine/ORM/Annotation/ManyToOne.php index dda7b31cb93..b8f67dc135d 100644 --- a/lib/Doctrine/ORM/Annotation/ManyToOne.php +++ b/lib/Doctrine/ORM/Annotation/ManyToOne.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/MappedSuperclass.php b/lib/Doctrine/ORM/Annotation/MappedSuperclass.php index cde96d35d67..fe819533c50 100644 --- a/lib/Doctrine/ORM/Annotation/MappedSuperclass.php +++ b/lib/Doctrine/ORM/Annotation/MappedSuperclass.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/NamedNativeQueries.php b/lib/Doctrine/ORM/Annotation/NamedNativeQueries.php index e6fb38678f5..6a40c54f6a2 100644 --- a/lib/Doctrine/ORM/Annotation/NamedNativeQueries.php +++ b/lib/Doctrine/ORM/Annotation/NamedNativeQueries.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/NamedNativeQuery.php b/lib/Doctrine/ORM/Annotation/NamedNativeQuery.php index 45aacbaa19b..f23aea15942 100644 --- a/lib/Doctrine/ORM/Annotation/NamedNativeQuery.php +++ b/lib/Doctrine/ORM/Annotation/NamedNativeQuery.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/NamedQueries.php b/lib/Doctrine/ORM/Annotation/NamedQueries.php index 39204e18540..7ba723eb3fc 100644 --- a/lib/Doctrine/ORM/Annotation/NamedQueries.php +++ b/lib/Doctrine/ORM/Annotation/NamedQueries.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/NamedQuery.php b/lib/Doctrine/ORM/Annotation/NamedQuery.php index 5a7317b5382..998ae2b8bf7 100644 --- a/lib/Doctrine/ORM/Annotation/NamedQuery.php +++ b/lib/Doctrine/ORM/Annotation/NamedQuery.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/OneToMany.php b/lib/Doctrine/ORM/Annotation/OneToMany.php index e6da8958daf..0922f2af4a8 100644 --- a/lib/Doctrine/ORM/Annotation/OneToMany.php +++ b/lib/Doctrine/ORM/Annotation/OneToMany.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/OneToOne.php b/lib/Doctrine/ORM/Annotation/OneToOne.php index 8606008cef3..266657bdddd 100644 --- a/lib/Doctrine/ORM/Annotation/OneToOne.php +++ b/lib/Doctrine/ORM/Annotation/OneToOne.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/OrderBy.php b/lib/Doctrine/ORM/Annotation/OrderBy.php index 227d36f5381..f38d2cedacc 100644 --- a/lib/Doctrine/ORM/Annotation/OrderBy.php +++ b/lib/Doctrine/ORM/Annotation/OrderBy.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/PostLoad.php b/lib/Doctrine/ORM/Annotation/PostLoad.php index 316c8430771..4e5a98ef82d 100644 --- a/lib/Doctrine/ORM/Annotation/PostLoad.php +++ b/lib/Doctrine/ORM/Annotation/PostLoad.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/PostPersist.php b/lib/Doctrine/ORM/Annotation/PostPersist.php index db084903f86..193dc8db711 100644 --- a/lib/Doctrine/ORM/Annotation/PostPersist.php +++ b/lib/Doctrine/ORM/Annotation/PostPersist.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/PostRemove.php b/lib/Doctrine/ORM/Annotation/PostRemove.php index c177a38dcd4..a648aa6f7bf 100644 --- a/lib/Doctrine/ORM/Annotation/PostRemove.php +++ b/lib/Doctrine/ORM/Annotation/PostRemove.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/PostUpdate.php b/lib/Doctrine/ORM/Annotation/PostUpdate.php index 0c800607068..db3124310fc 100644 --- a/lib/Doctrine/ORM/Annotation/PostUpdate.php +++ b/lib/Doctrine/ORM/Annotation/PostUpdate.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/PreFlush.php b/lib/Doctrine/ORM/Annotation/PreFlush.php index 0cf36d0c704..d4d3efeb1c0 100644 --- a/lib/Doctrine/ORM/Annotation/PreFlush.php +++ b/lib/Doctrine/ORM/Annotation/PreFlush.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/PrePersist.php b/lib/Doctrine/ORM/Annotation/PrePersist.php index 5b1bcb66846..0c8cd5ad761 100644 --- a/lib/Doctrine/ORM/Annotation/PrePersist.php +++ b/lib/Doctrine/ORM/Annotation/PrePersist.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/PreRemove.php b/lib/Doctrine/ORM/Annotation/PreRemove.php index 913156a1cdd..1c8c130e16d 100644 --- a/lib/Doctrine/ORM/Annotation/PreRemove.php +++ b/lib/Doctrine/ORM/Annotation/PreRemove.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/PreUpdate.php b/lib/Doctrine/ORM/Annotation/PreUpdate.php index 950d0b4c357..2335de49ef1 100644 --- a/lib/Doctrine/ORM/Annotation/PreUpdate.php +++ b/lib/Doctrine/ORM/Annotation/PreUpdate.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/SequenceGenerator.php b/lib/Doctrine/ORM/Annotation/SequenceGenerator.php index 0c615539b9c..5b29bff27ce 100644 --- a/lib/Doctrine/ORM/Annotation/SequenceGenerator.php +++ b/lib/Doctrine/ORM/Annotation/SequenceGenerator.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/SqlResultSetMapping.php b/lib/Doctrine/ORM/Annotation/SqlResultSetMapping.php index ada09c964ba..ec640fe325f 100644 --- a/lib/Doctrine/ORM/Annotation/SqlResultSetMapping.php +++ b/lib/Doctrine/ORM/Annotation/SqlResultSetMapping.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/SqlResultSetMappings.php b/lib/Doctrine/ORM/Annotation/SqlResultSetMappings.php index f99674a2745..fe2ad974392 100644 --- a/lib/Doctrine/ORM/Annotation/SqlResultSetMappings.php +++ b/lib/Doctrine/ORM/Annotation/SqlResultSetMappings.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/Table.php b/lib/Doctrine/ORM/Annotation/Table.php index b80b97c610f..41f6c6e6760 100644 --- a/lib/Doctrine/ORM/Annotation/Table.php +++ b/lib/Doctrine/ORM/Annotation/Table.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/UniqueConstraint.php b/lib/Doctrine/ORM/Annotation/UniqueConstraint.php index 48f17591df8..042e173a312 100644 --- a/lib/Doctrine/ORM/Annotation/UniqueConstraint.php +++ b/lib/Doctrine/ORM/Annotation/UniqueConstraint.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Annotation/Version.php b/lib/Doctrine/ORM/Annotation/Version.php index 9c7d6a7ca74..cd88d8fba52 100644 --- a/lib/Doctrine/ORM/Annotation/Version.php +++ b/lib/Doctrine/ORM/Annotation/Version.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache.php b/lib/Doctrine/ORM/Cache.php index 743e394bca9..65f656580e1 100644 --- a/lib/Doctrine/ORM/Cache.php +++ b/lib/Doctrine/ORM/Cache.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/AssociationCacheEntry.php b/lib/Doctrine/ORM/Cache/AssociationCacheEntry.php index 594e6d76cf9..70bd84c4af5 100644 --- a/lib/Doctrine/ORM/Cache/AssociationCacheEntry.php +++ b/lib/Doctrine/ORM/Cache/AssociationCacheEntry.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/CacheConfiguration.php b/lib/Doctrine/ORM/Cache/CacheConfiguration.php index dacb031092a..b4854f326bc 100644 --- a/lib/Doctrine/ORM/Cache/CacheConfiguration.php +++ b/lib/Doctrine/ORM/Cache/CacheConfiguration.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/CacheEntry.php b/lib/Doctrine/ORM/Cache/CacheEntry.php index 7cc4009432b..1def4d390ca 100644 --- a/lib/Doctrine/ORM/Cache/CacheEntry.php +++ b/lib/Doctrine/ORM/Cache/CacheEntry.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/CacheException.php b/lib/Doctrine/ORM/Cache/CacheException.php index dc51b86fee5..df698670633 100644 --- a/lib/Doctrine/ORM/Cache/CacheException.php +++ b/lib/Doctrine/ORM/Cache/CacheException.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/CacheFactory.php b/lib/Doctrine/ORM/Cache/CacheFactory.php index 877581e8fee..34de88422ff 100644 --- a/lib/Doctrine/ORM/Cache/CacheFactory.php +++ b/lib/Doctrine/ORM/Cache/CacheFactory.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/CacheKey.php b/lib/Doctrine/ORM/Cache/CacheKey.php index 9371b0f4791..845e2204173 100644 --- a/lib/Doctrine/ORM/Cache/CacheKey.php +++ b/lib/Doctrine/ORM/Cache/CacheKey.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/CollectionCacheEntry.php b/lib/Doctrine/ORM/Cache/CollectionCacheEntry.php index 6aa1caeb6ca..1c15e0d12dd 100644 --- a/lib/Doctrine/ORM/Cache/CollectionCacheEntry.php +++ b/lib/Doctrine/ORM/Cache/CollectionCacheEntry.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/CollectionCacheKey.php b/lib/Doctrine/ORM/Cache/CollectionCacheKey.php index d0320953b11..dd4a1575f1c 100644 --- a/lib/Doctrine/ORM/Cache/CollectionCacheKey.php +++ b/lib/Doctrine/ORM/Cache/CollectionCacheKey.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/CollectionHydrator.php b/lib/Doctrine/ORM/Cache/CollectionHydrator.php index 34370e55b83..81925597170 100644 --- a/lib/Doctrine/ORM/Cache/CollectionHydrator.php +++ b/lib/Doctrine/ORM/Cache/CollectionHydrator.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/ConcurrentRegion.php b/lib/Doctrine/ORM/Cache/ConcurrentRegion.php index a793680f28c..55257b1ae24 100644 --- a/lib/Doctrine/ORM/Cache/ConcurrentRegion.php +++ b/lib/Doctrine/ORM/Cache/ConcurrentRegion.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/DefaultCache.php b/lib/Doctrine/ORM/Cache/DefaultCache.php index da37218dd82..081ef615d31 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCache.php +++ b/lib/Doctrine/ORM/Cache/DefaultCache.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php b/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php index 4ded463c882..a36c69d58ed 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php +++ b/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php b/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php index 30019fc4dfe..a72d50ef344 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php index 12b50473157..c61a75e2b00 100644 --- a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/DefaultQueryCache.php b/lib/Doctrine/ORM/Cache/DefaultQueryCache.php index 5daba4f8532..e49e882e2ef 100644 --- a/lib/Doctrine/ORM/Cache/DefaultQueryCache.php +++ b/lib/Doctrine/ORM/Cache/DefaultQueryCache.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/EntityCacheEntry.php b/lib/Doctrine/ORM/Cache/EntityCacheEntry.php index 0d95c3c2e88..9d07f42988c 100644 --- a/lib/Doctrine/ORM/Cache/EntityCacheEntry.php +++ b/lib/Doctrine/ORM/Cache/EntityCacheEntry.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/EntityCacheKey.php b/lib/Doctrine/ORM/Cache/EntityCacheKey.php index e6efae30c53..0f0a92c6b8d 100644 --- a/lib/Doctrine/ORM/Cache/EntityCacheKey.php +++ b/lib/Doctrine/ORM/Cache/EntityCacheKey.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/EntityHydrator.php b/lib/Doctrine/ORM/Cache/EntityHydrator.php index acfdc281e64..463f2999ea4 100644 --- a/lib/Doctrine/ORM/Cache/EntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/EntityHydrator.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/Lock.php b/lib/Doctrine/ORM/Cache/Lock.php index bcc37f36415..1c98b500b14 100644 --- a/lib/Doctrine/ORM/Cache/Lock.php +++ b/lib/Doctrine/ORM/Cache/Lock.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/LockException.php b/lib/Doctrine/ORM/Cache/LockException.php index 189b0f6318d..49cc2d252f1 100644 --- a/lib/Doctrine/ORM/Cache/LockException.php +++ b/lib/Doctrine/ORM/Cache/LockException.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/Logging/CacheLogger.php b/lib/Doctrine/ORM/Cache/Logging/CacheLogger.php index 379660c7246..3f9de4b8191 100644 --- a/lib/Doctrine/ORM/Cache/Logging/CacheLogger.php +++ b/lib/Doctrine/ORM/Cache/Logging/CacheLogger.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/Logging/CacheLoggerChain.php b/lib/Doctrine/ORM/Cache/Logging/CacheLoggerChain.php index 1c7cd1d8fe0..938ed3f5861 100644 --- a/lib/Doctrine/ORM/Cache/Logging/CacheLoggerChain.php +++ b/lib/Doctrine/ORM/Cache/Logging/CacheLoggerChain.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/Logging/StatisticsCacheLogger.php b/lib/Doctrine/ORM/Cache/Logging/StatisticsCacheLogger.php index ce05b428c20..93c504c3861 100644 --- a/lib/Doctrine/ORM/Cache/Logging/StatisticsCacheLogger.php +++ b/lib/Doctrine/ORM/Cache/Logging/StatisticsCacheLogger.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/MultiGetRegion.php b/lib/Doctrine/ORM/Cache/MultiGetRegion.php index 1d3b6d5c060..c1b01e9f2ae 100644 --- a/lib/Doctrine/ORM/Cache/MultiGetRegion.php +++ b/lib/Doctrine/ORM/Cache/MultiGetRegion.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/Persister/CachedPersister.php b/lib/Doctrine/ORM/Cache/Persister/CachedPersister.php index da847298035..b76c332c92b 100644 --- a/lib/Doctrine/ORM/Cache/Persister/CachedPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/CachedPersister.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php b/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php index fb4ba0214c0..5a24ca81300 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/Persister/Collection/CachedCollectionPersister.php b/lib/Doctrine/ORM/Cache/Persister/Collection/CachedCollectionPersister.php index c68cf6870ed..3ba3fd122c0 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Collection/CachedCollectionPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Collection/CachedCollectionPersister.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php b/lib/Doctrine/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php index e22384be391..27ef429645e 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php b/lib/Doctrine/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php index e18fdc1a475..4cfd2ad2410 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php b/lib/Doctrine/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php index b18b44276fc..393f18ded55 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php index cfceb3d421e..9236b6a498b 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/CachedEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/CachedEntityPersister.php index 0e6dad2e5ae..8421fb9d36f 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/CachedEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/CachedEntityPersister.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php index dec9e85b918..21244172bbf 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/ReadOnlyCachedEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/ReadOnlyCachedEntityPersister.php index 748db656631..0b78977abb5 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/ReadOnlyCachedEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/ReadOnlyCachedEntityPersister.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersister.php index 15673ed7088..93e7ed97733 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersister.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/QueryCache.php b/lib/Doctrine/ORM/Cache/QueryCache.php index 1aa6d1844bf..f8e89f80176 100644 --- a/lib/Doctrine/ORM/Cache/QueryCache.php +++ b/lib/Doctrine/ORM/Cache/QueryCache.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/QueryCacheEntry.php b/lib/Doctrine/ORM/Cache/QueryCacheEntry.php index 791f05c4b37..1e9349f0d0e 100644 --- a/lib/Doctrine/ORM/Cache/QueryCacheEntry.php +++ b/lib/Doctrine/ORM/Cache/QueryCacheEntry.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/QueryCacheKey.php b/lib/Doctrine/ORM/Cache/QueryCacheKey.php index fd38eec57a8..58886cb76df 100644 --- a/lib/Doctrine/ORM/Cache/QueryCacheKey.php +++ b/lib/Doctrine/ORM/Cache/QueryCacheKey.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/QueryCacheValidator.php b/lib/Doctrine/ORM/Cache/QueryCacheValidator.php index fec8ca38916..34b84ca9135 100644 --- a/lib/Doctrine/ORM/Cache/QueryCacheValidator.php +++ b/lib/Doctrine/ORM/Cache/QueryCacheValidator.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/Region.php b/lib/Doctrine/ORM/Cache/Region.php index 405868207a1..623261a5535 100644 --- a/lib/Doctrine/ORM/Cache/Region.php +++ b/lib/Doctrine/ORM/Cache/Region.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/Region/DefaultMultiGetRegion.php b/lib/Doctrine/ORM/Cache/Region/DefaultMultiGetRegion.php index f732f6df51f..068b15a441e 100644 --- a/lib/Doctrine/ORM/Cache/Region/DefaultMultiGetRegion.php +++ b/lib/Doctrine/ORM/Cache/Region/DefaultMultiGetRegion.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/Region/DefaultRegion.php b/lib/Doctrine/ORM/Cache/Region/DefaultRegion.php index 4c60047575c..86f76cd48b4 100644 --- a/lib/Doctrine/ORM/Cache/Region/DefaultRegion.php +++ b/lib/Doctrine/ORM/Cache/Region/DefaultRegion.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/Region/FileLockRegion.php b/lib/Doctrine/ORM/Cache/Region/FileLockRegion.php index 16cf94915ff..37310b262af 100644 --- a/lib/Doctrine/ORM/Cache/Region/FileLockRegion.php +++ b/lib/Doctrine/ORM/Cache/Region/FileLockRegion.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/Region/UpdateTimestampCache.php b/lib/Doctrine/ORM/Cache/Region/UpdateTimestampCache.php index 5fa5e747f0b..d8386bde1bb 100644 --- a/lib/Doctrine/ORM/Cache/Region/UpdateTimestampCache.php +++ b/lib/Doctrine/ORM/Cache/Region/UpdateTimestampCache.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/RegionsConfiguration.php b/lib/Doctrine/ORM/Cache/RegionsConfiguration.php index 720b1d2424d..50fc3c1ad85 100644 --- a/lib/Doctrine/ORM/Cache/RegionsConfiguration.php +++ b/lib/Doctrine/ORM/Cache/RegionsConfiguration.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/TimestampCacheEntry.php b/lib/Doctrine/ORM/Cache/TimestampCacheEntry.php index 302342d0bdf..173de47520f 100644 --- a/lib/Doctrine/ORM/Cache/TimestampCacheEntry.php +++ b/lib/Doctrine/ORM/Cache/TimestampCacheEntry.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/TimestampCacheKey.php b/lib/Doctrine/ORM/Cache/TimestampCacheKey.php index 595c988d000..c2a28d33d2a 100644 --- a/lib/Doctrine/ORM/Cache/TimestampCacheKey.php +++ b/lib/Doctrine/ORM/Cache/TimestampCacheKey.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/TimestampQueryCacheValidator.php b/lib/Doctrine/ORM/Cache/TimestampQueryCacheValidator.php index 7f2848a5bce..be01afd6db4 100644 --- a/lib/Doctrine/ORM/Cache/TimestampQueryCacheValidator.php +++ b/lib/Doctrine/ORM/Cache/TimestampQueryCacheValidator.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Cache/TimestampRegion.php b/lib/Doctrine/ORM/Cache/TimestampRegion.php index cae6624a0db..2cc6b6888df 100644 --- a/lib/Doctrine/ORM/Cache/TimestampRegion.php +++ b/lib/Doctrine/ORM/Cache/TimestampRegion.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Configuration.php b/lib/Doctrine/ORM/Configuration.php index d804a90e785..bd4a8638977 100644 --- a/lib/Doctrine/ORM/Configuration.php +++ b/lib/Doctrine/ORM/Configuration.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Configuration/MetadataConfiguration.php b/lib/Doctrine/ORM/Configuration/MetadataConfiguration.php index a938a5ebefa..51de6f4d810 100644 --- a/lib/Doctrine/ORM/Configuration/MetadataConfiguration.php +++ b/lib/Doctrine/ORM/Configuration/MetadataConfiguration.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php b/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php index 0c8980c9ddd..c2df70830ae 100644 --- a/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php +++ b/lib/Doctrine/ORM/Configuration/ProxyConfiguration.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php b/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php index d2ecb249a2e..096ae688e7e 100644 --- a/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php +++ b/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 3389338a9c2..8e9961ef4d1 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/EntityManagerAware.php b/lib/Doctrine/ORM/EntityManagerAware.php index 59c31e8f88d..bb26ad7c9fd 100644 --- a/lib/Doctrine/ORM/EntityManagerAware.php +++ b/lib/Doctrine/ORM/EntityManagerAware.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/EntityManagerInterface.php b/lib/Doctrine/ORM/EntityManagerInterface.php index 3109995141f..5d8ed5ba68f 100644 --- a/lib/Doctrine/ORM/EntityManagerInterface.php +++ b/lib/Doctrine/ORM/EntityManagerInterface.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/EntityNotFoundException.php b/lib/Doctrine/ORM/EntityNotFoundException.php index 051a4199942..146adbdc058 100644 --- a/lib/Doctrine/ORM/EntityNotFoundException.php +++ b/lib/Doctrine/ORM/EntityNotFoundException.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/EntityRepository.php b/lib/Doctrine/ORM/EntityRepository.php index 36f05ec3186..fde2ffdab56 100644 --- a/lib/Doctrine/ORM/EntityRepository.php +++ b/lib/Doctrine/ORM/EntityRepository.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Event/LifecycleEventArgs.php b/lib/Doctrine/ORM/Event/LifecycleEventArgs.php index f752424c6a2..85af3ab1e3a 100644 --- a/lib/Doctrine/ORM/Event/LifecycleEventArgs.php +++ b/lib/Doctrine/ORM/Event/LifecycleEventArgs.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Event/ListenersInvoker.php b/lib/Doctrine/ORM/Event/ListenersInvoker.php index dd9725b15a7..16b615dbe51 100644 --- a/lib/Doctrine/ORM/Event/ListenersInvoker.php +++ b/lib/Doctrine/ORM/Event/ListenersInvoker.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Event/LoadClassMetadataEventArgs.php b/lib/Doctrine/ORM/Event/LoadClassMetadataEventArgs.php index 0899a2aae98..3ce3733d803 100644 --- a/lib/Doctrine/ORM/Event/LoadClassMetadataEventArgs.php +++ b/lib/Doctrine/ORM/Event/LoadClassMetadataEventArgs.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Event/OnClassMetadataNotFoundEventArgs.php b/lib/Doctrine/ORM/Event/OnClassMetadataNotFoundEventArgs.php index 1b443351401..c8b63649a67 100644 --- a/lib/Doctrine/ORM/Event/OnClassMetadataNotFoundEventArgs.php +++ b/lib/Doctrine/ORM/Event/OnClassMetadataNotFoundEventArgs.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Event/OnClearEventArgs.php b/lib/Doctrine/ORM/Event/OnClearEventArgs.php index 306a183e806..7b2d4496893 100644 --- a/lib/Doctrine/ORM/Event/OnClearEventArgs.php +++ b/lib/Doctrine/ORM/Event/OnClearEventArgs.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Event/OnFlushEventArgs.php b/lib/Doctrine/ORM/Event/OnFlushEventArgs.php index ad4fd6995ae..d572a98dd1d 100644 --- a/lib/Doctrine/ORM/Event/OnFlushEventArgs.php +++ b/lib/Doctrine/ORM/Event/OnFlushEventArgs.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Event/PostFlushEventArgs.php b/lib/Doctrine/ORM/Event/PostFlushEventArgs.php index f0292a37f98..3dc65e0588e 100644 --- a/lib/Doctrine/ORM/Event/PostFlushEventArgs.php +++ b/lib/Doctrine/ORM/Event/PostFlushEventArgs.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); namespace Doctrine\ORM\Event; diff --git a/lib/Doctrine/ORM/Event/PreFlushEventArgs.php b/lib/Doctrine/ORM/Event/PreFlushEventArgs.php index e932531eb38..38c904cdbdb 100644 --- a/lib/Doctrine/ORM/Event/PreFlushEventArgs.php +++ b/lib/Doctrine/ORM/Event/PreFlushEventArgs.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Event/PreUpdateEventArgs.php b/lib/Doctrine/ORM/Event/PreUpdateEventArgs.php index 440847f798a..d009d991f6c 100644 --- a/lib/Doctrine/ORM/Event/PreUpdateEventArgs.php +++ b/lib/Doctrine/ORM/Event/PreUpdateEventArgs.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Events.php b/lib/Doctrine/ORM/Events.php index 660b98a0dc7..6ff6af4f93e 100644 --- a/lib/Doctrine/ORM/Events.php +++ b/lib/Doctrine/ORM/Events.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Internal/CommitOrderCalculator.php b/lib/Doctrine/ORM/Internal/CommitOrderCalculator.php index 7b6f7bae44b..4a6d384a80b 100644 --- a/lib/Doctrine/ORM/Internal/CommitOrderCalculator.php +++ b/lib/Doctrine/ORM/Internal/CommitOrderCalculator.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php index dad7105f383..7b1746febff 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php index 287fe5496f6..ac3598e1d4d 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Internal/Hydration/HydrationException.php b/lib/Doctrine/ORM/Internal/Hydration/HydrationException.php index 16a3f875b44..e2b0a0f8d59 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/HydrationException.php +++ b/lib/Doctrine/ORM/Internal/Hydration/HydrationException.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Internal/Hydration/IterableResult.php b/lib/Doctrine/ORM/Internal/Hydration/IterableResult.php index c360420dba7..5dc674c280c 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/IterableResult.php +++ b/lib/Doctrine/ORM/Internal/Hydration/IterableResult.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php index 62090c1b549..f8c46a4e49a 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Internal/Hydration/ScalarHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ScalarHydrator.php index c4fac03a01d..e1e3c36af8a 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ScalarHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ScalarHydrator.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php index a912d926c81..f8a0806fa13 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Internal/Hydration/SingleScalarHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/SingleScalarHydrator.php index 5332a4c94b6..38521183f59 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/SingleScalarHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/SingleScalarHydrator.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Internal/HydrationCompleteHandler.php b/lib/Doctrine/ORM/Internal/HydrationCompleteHandler.php index b9f86c9ac1c..197a18162a0 100644 --- a/lib/Doctrine/ORM/Internal/HydrationCompleteHandler.php +++ b/lib/Doctrine/ORM/Internal/HydrationCompleteHandler.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/LazyCriteriaCollection.php b/lib/Doctrine/ORM/LazyCriteriaCollection.php index 27d71546da5..72e8c82de67 100644 --- a/lib/Doctrine/ORM/LazyCriteriaCollection.php +++ b/lib/Doctrine/ORM/LazyCriteriaCollection.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php index 5eac626cc28..cd77c0d31b3 100644 --- a/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php index d946378bf46..8b5e856eda8 100644 --- a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/CacheMetadata.php b/lib/Doctrine/ORM/Mapping/CacheMetadata.php index b40135403ba..0621bdfcef0 100644 --- a/lib/Doctrine/ORM/Mapping/CacheMetadata.php +++ b/lib/Doctrine/ORM/Mapping/CacheMetadata.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/CacheUsage.php b/lib/Doctrine/ORM/Mapping/CacheUsage.php index 3c9366b95f6..02bfecfa283 100644 --- a/lib/Doctrine/ORM/Mapping/CacheUsage.php +++ b/lib/Doctrine/ORM/Mapping/CacheUsage.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php b/lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php index 5211f558390..d6c5a9fd8d8 100644 --- a/lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php +++ b/lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 5a773e33c4c..ba197a38fdd 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 473dcead5d5..b144d1ad296 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/ColumnMetadata.php b/lib/Doctrine/ORM/Mapping/ColumnMetadata.php index 5e0e14e1ae4..1164ce092cf 100644 --- a/lib/Doctrine/ORM/Mapping/ColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ColumnMetadata.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php index 2114b994b55..42076762b8a 100644 --- a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/DefaultEntityListenerResolver.php b/lib/Doctrine/ORM/Mapping/DefaultEntityListenerResolver.php index 90a8cbb741b..faf26393b9c 100644 --- a/lib/Doctrine/ORM/Mapping/DefaultEntityListenerResolver.php +++ b/lib/Doctrine/ORM/Mapping/DefaultEntityListenerResolver.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php b/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php index 71b154fa283..6ccd12cccbe 100644 --- a/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 9b08ee603c4..1c898742243 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index 7d416230b4b..d4e69a48619 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php b/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php index 0328a8955c6..926b1ec184f 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Driver/FileDriver.php b/lib/Doctrine/ORM/Mapping/Driver/FileDriver.php index b5bd6f9430e..5811d9397e6 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/FileDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/FileDriver.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Driver/MappingDriver.php b/lib/Doctrine/ORM/Mapping/Driver/MappingDriver.php index 71b9a884482..0e7074c80fa 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/MappingDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/MappingDriver.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php index e5da0e03f00..5de401ac645 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php b/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php index ca44af30c26..00a49d6b5db 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Driver/SimplifiedXmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/SimplifiedXmlDriver.php index a4198768c28..11f65aae819 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/SimplifiedXmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/SimplifiedXmlDriver.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php b/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php index 6eb9115fc80..9a68bcb9a08 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index f6c9243cffe..8d50c8248ee 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php b/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php index a505edfd1a9..ab7585f3c15 100644 --- a/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php b/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php index e7b581311fc..b05dcf3fc05 100644 --- a/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/EntityListenerResolver.php b/lib/Doctrine/ORM/Mapping/EntityListenerResolver.php index b2133e1fd33..cad475ea947 100644 --- a/lib/Doctrine/ORM/Mapping/EntityListenerResolver.php +++ b/lib/Doctrine/ORM/Mapping/EntityListenerResolver.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php index cd41608c6f9..c89f54a2fe5 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/CacheMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/CacheMetadataExporter.php index 81c0da7df71..ca54a77d222 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/CacheMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/CacheMetadataExporter.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php index d229c0abcb3..2f6c3d76c8d 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ColumnMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ColumnMetadataExporter.php index c8d698ac9cf..241c4d5b96c 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ColumnMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ColumnMetadataExporter.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/DiscriminatorColumnMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/DiscriminatorColumnMetadataExporter.php index 0e88915774a..1da566fa661 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/DiscriminatorColumnMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/DiscriminatorColumnMetadataExporter.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/Exporter.php b/lib/Doctrine/ORM/Mapping/Exporter/Exporter.php index acc8ed4235d..902fe89d2c9 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/Exporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/Exporter.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php index 9d511a34ef9..36fc2f85523 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/FieldMetadataExporter.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/JoinColumnMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/JoinColumnMetadataExporter.php index 22b7dd8acbb..8ff2e39fc43 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/JoinColumnMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/JoinColumnMetadataExporter.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/JoinTableMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/JoinTableMetadataExporter.php index d66c769e962..173cd76060c 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/JoinTableMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/JoinTableMetadataExporter.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/LocalColumnMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/LocalColumnMetadataExporter.php index 6832e2176af..19ff4affbe4 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/LocalColumnMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/LocalColumnMetadataExporter.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ManyToManyAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ManyToManyAssociationMetadataExporter.php index 1e7e35f1ee2..c3d8591c034 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ManyToManyAssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ManyToManyAssociationMetadataExporter.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ManyToOneAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ManyToOneAssociationMetadataExporter.php index cdc20db5294..7653fae8fda 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ManyToOneAssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ManyToOneAssociationMetadataExporter.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/OneToManyAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/OneToManyAssociationMetadataExporter.php index 3cc4937a04c..beca3f29e83 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/OneToManyAssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/OneToManyAssociationMetadataExporter.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/OneToOneAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/OneToOneAssociationMetadataExporter.php index d8693ad8568..52eb46da7b1 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/OneToOneAssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/OneToOneAssociationMetadataExporter.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/TableMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/TableMetadataExporter.php index 330648d944e..efd75e54b15 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/TableMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/TableMetadataExporter.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ToManyAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ToManyAssociationMetadataExporter.php index a6254bcf359..3e374f426a3 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ToManyAssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ToManyAssociationMetadataExporter.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ToOneAssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ToOneAssociationMetadataExporter.php index f013afc42b1..b8c2337c116 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ToOneAssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ToOneAssociationMetadataExporter.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/TransientMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/TransientMetadataExporter.php index 9d534473cbe..8b6de1a3750 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/TransientMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/TransientMetadataExporter.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php index 09aac1f0f2e..65554133c97 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/VariableExporter.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php index 5688c722544..45de02bb5d2 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/VersionFieldMetadataExporter.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php index 672e1cbb7f9..f072b20d2e5 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/AbstractClassMetadataFactory.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Factory/Autoloader.php b/lib/Doctrine/ORM/Mapping/Factory/Autoloader.php index 35309624842..1f476066494 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/Autoloader.php +++ b/lib/Doctrine/ORM/Mapping/Factory/Autoloader.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataBuildingContext.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataBuildingContext.php index 91683eee46d..73bec4213bb 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataBuildingContext.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataBuildingContext.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinition.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinition.php index 41ee341321f..ee5b2ee5bd0 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinition.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinition.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php index b9d1d6d2b94..f7db480b1d3 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataDefinitionFactory.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php index 8da852023c9..5e1ce7bf009 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataGenerator.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataResolver.php b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataResolver.php index 751a2b053fd..7fa5536502f 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataResolver.php +++ b/lib/Doctrine/ORM/Mapping/Factory/ClassMetadataResolver.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Factory/DefaultClassMetadataResolver.php b/lib/Doctrine/ORM/Mapping/Factory/DefaultClassMetadataResolver.php index 4ed8863f24d..1f07fc9ea7f 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/DefaultClassMetadataResolver.php +++ b/lib/Doctrine/ORM/Mapping/Factory/DefaultClassMetadataResolver.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Factory/DefaultNamingStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/DefaultNamingStrategy.php index 646f5adcca1..14b2192beaf 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/DefaultNamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/DefaultNamingStrategy.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Factory/NamingStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/NamingStrategy.php index cc9bb665214..37b7bb42991 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/NamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/NamingStrategy.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Factory/RuntimeClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/Factory/RuntimeClassMetadataFactory.php index 1bd03647c30..4abd635c753 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/RuntimeClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/RuntimeClassMetadataFactory.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Factory/SecondPass.php b/lib/Doctrine/ORM/Mapping/Factory/SecondPass.php index 887974b70d0..bf5f0cb3d12 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/SecondPass.php +++ b/lib/Doctrine/ORM/Mapping/Factory/SecondPass.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Factory/StaticClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/Factory/StaticClassMetadataFactory.php index 0a1da005c75..50fd06ea3b5 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/StaticClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/Factory/StaticClassMetadataFactory.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Factory/Strategy/ClassMetadataGeneratorStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/Strategy/ClassMetadataGeneratorStrategy.php index 84af1b79ea8..e289d9cf332 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/Strategy/ClassMetadataGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/Strategy/ClassMetadataGeneratorStrategy.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Factory/Strategy/ConditionalFileWriterClassMetadataGeneratorStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/Strategy/ConditionalFileWriterClassMetadataGeneratorStrategy.php index a640ef40252..8974602ec36 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/Strategy/ConditionalFileWriterClassMetadataGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/Strategy/ConditionalFileWriterClassMetadataGeneratorStrategy.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Factory/Strategy/EvaluatingClassMetadataGeneratorStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/Strategy/EvaluatingClassMetadataGeneratorStrategy.php index e7a4f80a475..de331fa4b24 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/Strategy/EvaluatingClassMetadataGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/Strategy/EvaluatingClassMetadataGeneratorStrategy.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Factory/Strategy/FileReaderClassMetadataGeneratorStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/Strategy/FileReaderClassMetadataGeneratorStrategy.php index e49a74b1343..6e1808b5eb2 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/Strategy/FileReaderClassMetadataGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/Strategy/FileReaderClassMetadataGeneratorStrategy.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Factory/Strategy/FileWriterClassMetadataGeneratorStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/Strategy/FileWriterClassMetadataGeneratorStrategy.php index 9d3b53a3016..abe01ac880c 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/Strategy/FileWriterClassMetadataGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/Strategy/FileWriterClassMetadataGeneratorStrategy.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Factory/UnderscoreNamingStrategy.php b/lib/Doctrine/ORM/Mapping/Factory/UnderscoreNamingStrategy.php index 4c3fb495065..7052d7a30a5 100644 --- a/lib/Doctrine/ORM/Mapping/Factory/UnderscoreNamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/Factory/UnderscoreNamingStrategy.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/FetchMode.php b/lib/Doctrine/ORM/Mapping/FetchMode.php index 1651e40bb1e..ed88e97d66f 100644 --- a/lib/Doctrine/ORM/Mapping/FetchMode.php +++ b/lib/Doctrine/ORM/Mapping/FetchMode.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index a9ce761c396..4998e8caa51 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/GeneratorType.php b/lib/Doctrine/ORM/Mapping/GeneratorType.php index 12bf00ad9de..99157abd16e 100644 --- a/lib/Doctrine/ORM/Mapping/GeneratorType.php +++ b/lib/Doctrine/ORM/Mapping/GeneratorType.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/InheritanceType.php b/lib/Doctrine/ORM/Mapping/InheritanceType.php index 641d73efc09..9b3488b7ccb 100644 --- a/lib/Doctrine/ORM/Mapping/InheritanceType.php +++ b/lib/Doctrine/ORM/Mapping/InheritanceType.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php b/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php index f12825c8096..133f55ebd71 100644 --- a/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php b/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php index 34c56a27017..9e8c70e05ce 100644 --- a/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php +++ b/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php b/lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php index d39651f01df..24e4dd97ba4 100644 --- a/lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php index af29bad020e..806296f51ec 100644 --- a/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/ManyToOneAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ManyToOneAssociationMetadata.php index 6e2a79e0bb4..5fd387e4dfb 100644 --- a/lib/Doctrine/ORM/Mapping/ManyToOneAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ManyToOneAssociationMetadata.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php b/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php index b3397ed29c0..d816ac51217 100644 --- a/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/MappingException.php b/lib/Doctrine/ORM/Mapping/MappingException.php index 3ca6f772f65..6f762ee83a8 100644 --- a/lib/Doctrine/ORM/Mapping/MappingException.php +++ b/lib/Doctrine/ORM/Mapping/MappingException.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/OneToManyAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/OneToManyAssociationMetadata.php index 573025ee93f..717911238a0 100644 --- a/lib/Doctrine/ORM/Mapping/OneToManyAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/OneToManyAssociationMetadata.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/OneToOneAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/OneToOneAssociationMetadata.php index f10d0d096be..0df381540f7 100644 --- a/lib/Doctrine/ORM/Mapping/OneToOneAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/OneToOneAssociationMetadata.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/Property.php b/lib/Doctrine/ORM/Mapping/Property.php index 9178558f379..a785c5ae3db 100644 --- a/lib/Doctrine/ORM/Mapping/Property.php +++ b/lib/Doctrine/ORM/Mapping/Property.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/ReflectionEmbeddedProperty.php b/lib/Doctrine/ORM/Mapping/ReflectionEmbeddedProperty.php index 61ff4a0b776..82bed104c6b 100644 --- a/lib/Doctrine/ORM/Mapping/ReflectionEmbeddedProperty.php +++ b/lib/Doctrine/ORM/Mapping/ReflectionEmbeddedProperty.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/RootClassMetadata.php b/lib/Doctrine/ORM/Mapping/RootClassMetadata.php index 5883a4cf727..6af35fafe64 100644 --- a/lib/Doctrine/ORM/Mapping/RootClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/RootClassMetadata.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/SubClassMetadata.php b/lib/Doctrine/ORM/Mapping/SubClassMetadata.php index 6633b8f4cd6..756c44c450b 100644 --- a/lib/Doctrine/ORM/Mapping/SubClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/SubClassMetadata.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/TableMetadata.php b/lib/Doctrine/ORM/Mapping/TableMetadata.php index fb47c360970..179ca80dd9c 100644 --- a/lib/Doctrine/ORM/Mapping/TableMetadata.php +++ b/lib/Doctrine/ORM/Mapping/TableMetadata.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/TableOwner.php b/lib/Doctrine/ORM/Mapping/TableOwner.php index ab89bbff748..67e7bdd9e69 100644 --- a/lib/Doctrine/ORM/Mapping/TableOwner.php +++ b/lib/Doctrine/ORM/Mapping/TableOwner.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php index 96777fa4af1..b15f5bcf7da 100644 --- a/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php index 43383215da3..5ac5046b7dc 100644 --- a/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/TransientMetadata.php b/lib/Doctrine/ORM/Mapping/TransientMetadata.php index dd7780def42..f2e5fc29926 100644 --- a/lib/Doctrine/ORM/Mapping/TransientMetadata.php +++ b/lib/Doctrine/ORM/Mapping/TransientMetadata.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/ValueGeneratorMetadata.php b/lib/Doctrine/ORM/Mapping/ValueGeneratorMetadata.php index 7f03a67dc67..411478a07d0 100644 --- a/lib/Doctrine/ORM/Mapping/ValueGeneratorMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ValueGeneratorMetadata.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php b/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php index f910a980127..dddb6856133 100644 --- a/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/NativeQuery.php b/lib/Doctrine/ORM/NativeQuery.php index 1290daa25ab..e508b35ae1e 100644 --- a/lib/Doctrine/ORM/NativeQuery.php +++ b/lib/Doctrine/ORM/NativeQuery.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/NoResultException.php b/lib/Doctrine/ORM/NoResultException.php index 09d46387ed2..38ab6e76769 100644 --- a/lib/Doctrine/ORM/NoResultException.php +++ b/lib/Doctrine/ORM/NoResultException.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/NonUniqueResultException.php b/lib/Doctrine/ORM/NonUniqueResultException.php index 3da0e3e8c3e..c512e8c1657 100644 --- a/lib/Doctrine/ORM/NonUniqueResultException.php +++ b/lib/Doctrine/ORM/NonUniqueResultException.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/ORMException.php b/lib/Doctrine/ORM/ORMException.php index d7bef371b84..9c60851e954 100644 --- a/lib/Doctrine/ORM/ORMException.php +++ b/lib/Doctrine/ORM/ORMException.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/ORMInvalidArgumentException.php b/lib/Doctrine/ORM/ORMInvalidArgumentException.php index 3d5d32b23b5..64d49b0bcc9 100644 --- a/lib/Doctrine/ORM/ORMInvalidArgumentException.php +++ b/lib/Doctrine/ORM/ORMInvalidArgumentException.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/OptimisticLockException.php b/lib/Doctrine/ORM/OptimisticLockException.php index f565b5e4287..698e2f89878 100644 --- a/lib/Doctrine/ORM/OptimisticLockException.php +++ b/lib/Doctrine/ORM/OptimisticLockException.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/PersistentCollection.php b/lib/Doctrine/ORM/PersistentCollection.php index 084cee8632f..42fa1f5fb41 100644 --- a/lib/Doctrine/ORM/PersistentCollection.php +++ b/lib/Doctrine/ORM/PersistentCollection.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/PersistentObject.php b/lib/Doctrine/ORM/PersistentObject.php index da35a37db8a..5c837100c3e 100644 --- a/lib/Doctrine/ORM/PersistentObject.php +++ b/lib/Doctrine/ORM/PersistentObject.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Persisters/Collection/AbstractCollectionPersister.php b/lib/Doctrine/ORM/Persisters/Collection/AbstractCollectionPersister.php index dc47cabb521..d2967a2036d 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/AbstractCollectionPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/AbstractCollectionPersister.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Persisters/Collection/CollectionPersister.php b/lib/Doctrine/ORM/Persisters/Collection/CollectionPersister.php index a4788c394c6..fe23901c0db 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/CollectionPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/CollectionPersister.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php index 3b15b865e4c..a966ab39300 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php index 0c0e38c9ab3..2d2eb36fd45 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php index 182e40fd6b7..0b16a6003c9 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 9733de2e368..5d2fc8ee161 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php b/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php index 9cbe9518705..aa24a44a419 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php +++ b/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php index d8d52794396..3f2844814bb 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index c40050a04c6..7476bb6c1c3 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php index af7c32b7070..610765e8756 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Persisters/PersisterException.php b/lib/Doctrine/ORM/Persisters/PersisterException.php index 27eea695ab7..387a8576f2a 100644 --- a/lib/Doctrine/ORM/Persisters/PersisterException.php +++ b/lib/Doctrine/ORM/Persisters/PersisterException.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Persisters/SqlExpressionVisitor.php b/lib/Doctrine/ORM/Persisters/SqlExpressionVisitor.php index b97d421dc01..1a35b0127a5 100644 --- a/lib/Doctrine/ORM/Persisters/SqlExpressionVisitor.php +++ b/lib/Doctrine/ORM/Persisters/SqlExpressionVisitor.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Persisters/SqlValueVisitor.php b/lib/Doctrine/ORM/Persisters/SqlValueVisitor.php index 733c151980b..2a80da78465 100644 --- a/lib/Doctrine/ORM/Persisters/SqlValueVisitor.php +++ b/lib/Doctrine/ORM/Persisters/SqlValueVisitor.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/PessimisticLockException.php b/lib/Doctrine/ORM/PessimisticLockException.php index b25a93e9c09..aea82a6ca14 100644 --- a/lib/Doctrine/ORM/PessimisticLockException.php +++ b/lib/Doctrine/ORM/PessimisticLockException.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Proxy/Factory/Autoloader.php b/lib/Doctrine/ORM/Proxy/Factory/Autoloader.php index 079de74f872..ac8923896ef 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/Autoloader.php +++ b/lib/Doctrine/ORM/Proxy/Factory/Autoloader.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Proxy/Factory/DefaultProxyResolver.php b/lib/Doctrine/ORM/Proxy/Factory/DefaultProxyResolver.php index fc9b939942b..84e29fddabf 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/DefaultProxyResolver.php +++ b/lib/Doctrine/ORM/Proxy/Factory/DefaultProxyResolver.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php index 0a2a6a25ba8..a325526aac4 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php index d4618144357..30a08708561 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinitionFactory.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyException.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyException.php index 5e67be50437..34ddb55c88d 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyException.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyException.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyFactory.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyFactory.php index 4a4ea0a7899..f16c2dfbb27 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyFactory.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php index dd9ed0d89df..de2ca5af3bd 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyGenerator.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyResolver.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyResolver.php index d3998c08a95..3541569bb32 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyResolver.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyResolver.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php b/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php index 2c6f34127e5..78eafbc5cd5 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Proxy/Factory/Strategy/ConditionalFileWriterProxyGeneratorStrategy.php b/lib/Doctrine/ORM/Proxy/Factory/Strategy/ConditionalFileWriterProxyGeneratorStrategy.php index c44aa9865dd..093c449cc50 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/Strategy/ConditionalFileWriterProxyGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Proxy/Factory/Strategy/ConditionalFileWriterProxyGeneratorStrategy.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Proxy/Factory/Strategy/EvaluatingProxyGeneratorStrategy.php b/lib/Doctrine/ORM/Proxy/Factory/Strategy/EvaluatingProxyGeneratorStrategy.php index b4da000c7fa..7de3d81c1c3 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/Strategy/EvaluatingProxyGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Proxy/Factory/Strategy/EvaluatingProxyGeneratorStrategy.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileReaderProxyGeneratorStrategy.php b/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileReaderProxyGeneratorStrategy.php index b7afd727675..6ba9067b734 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileReaderProxyGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileReaderProxyGeneratorStrategy.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileWriterProxyGeneratorStrategy.php b/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileWriterProxyGeneratorStrategy.php index 8f2893d728f..11a6048b256 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileWriterProxyGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Proxy/Factory/Strategy/FileWriterProxyGeneratorStrategy.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Proxy/Factory/Strategy/ProxyGeneratorStrategy.php b/lib/Doctrine/ORM/Proxy/Factory/Strategy/ProxyGeneratorStrategy.php index 9b91e05617f..863aa3c902f 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/Strategy/ProxyGeneratorStrategy.php +++ b/lib/Doctrine/ORM/Proxy/Factory/Strategy/ProxyGeneratorStrategy.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Proxy/Proxy.php b/lib/Doctrine/ORM/Proxy/Proxy.php index 50e2513054a..0c764ea7e5e 100644 --- a/lib/Doctrine/ORM/Proxy/Proxy.php +++ b/lib/Doctrine/ORM/Proxy/Proxy.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query.php b/lib/Doctrine/ORM/Query.php index 0f60e380b94..347d8568a40 100644 --- a/lib/Doctrine/ORM/Query.php +++ b/lib/Doctrine/ORM/Query.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/ASTException.php b/lib/Doctrine/ORM/Query/AST/ASTException.php index 6ce8ef72f69..4b0f95e71f6 100644 --- a/lib/Doctrine/ORM/Query/AST/ASTException.php +++ b/lib/Doctrine/ORM/Query/AST/ASTException.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/AggregateExpression.php b/lib/Doctrine/ORM/Query/AST/AggregateExpression.php index 4b8ffc260a8..918ac762b2b 100644 --- a/lib/Doctrine/ORM/Query/AST/AggregateExpression.php +++ b/lib/Doctrine/ORM/Query/AST/AggregateExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/ArithmeticExpression.php b/lib/Doctrine/ORM/Query/AST/ArithmeticExpression.php index 89387b90294..6e849cb2910 100644 --- a/lib/Doctrine/ORM/Query/AST/ArithmeticExpression.php +++ b/lib/Doctrine/ORM/Query/AST/ArithmeticExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/ArithmeticFactor.php b/lib/Doctrine/ORM/Query/AST/ArithmeticFactor.php index 3151f6e2eb9..8140710c72e 100644 --- a/lib/Doctrine/ORM/Query/AST/ArithmeticFactor.php +++ b/lib/Doctrine/ORM/Query/AST/ArithmeticFactor.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/ArithmeticTerm.php b/lib/Doctrine/ORM/Query/AST/ArithmeticTerm.php index c39f16b1741..f3247d873ed 100644 --- a/lib/Doctrine/ORM/Query/AST/ArithmeticTerm.php +++ b/lib/Doctrine/ORM/Query/AST/ArithmeticTerm.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/BetweenExpression.php b/lib/Doctrine/ORM/Query/AST/BetweenExpression.php index 7dd6b84a63f..7ec5f04b009 100644 --- a/lib/Doctrine/ORM/Query/AST/BetweenExpression.php +++ b/lib/Doctrine/ORM/Query/AST/BetweenExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/CoalesceExpression.php b/lib/Doctrine/ORM/Query/AST/CoalesceExpression.php index 5e41e66d94e..b913e3d5fbe 100644 --- a/lib/Doctrine/ORM/Query/AST/CoalesceExpression.php +++ b/lib/Doctrine/ORM/Query/AST/CoalesceExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/CollectionMemberExpression.php b/lib/Doctrine/ORM/Query/AST/CollectionMemberExpression.php index 43f27462276..91e62850f96 100644 --- a/lib/Doctrine/ORM/Query/AST/CollectionMemberExpression.php +++ b/lib/Doctrine/ORM/Query/AST/CollectionMemberExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/ComparisonExpression.php b/lib/Doctrine/ORM/Query/AST/ComparisonExpression.php index ec8dd5a9f01..46ca746c1de 100644 --- a/lib/Doctrine/ORM/Query/AST/ComparisonExpression.php +++ b/lib/Doctrine/ORM/Query/AST/ComparisonExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/ConditionalExpression.php b/lib/Doctrine/ORM/Query/AST/ConditionalExpression.php index 09689e3465e..26c201bb6be 100644 --- a/lib/Doctrine/ORM/Query/AST/ConditionalExpression.php +++ b/lib/Doctrine/ORM/Query/AST/ConditionalExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/ConditionalFactor.php b/lib/Doctrine/ORM/Query/AST/ConditionalFactor.php index 1cfbb7b82e3..e7cffa010d9 100644 --- a/lib/Doctrine/ORM/Query/AST/ConditionalFactor.php +++ b/lib/Doctrine/ORM/Query/AST/ConditionalFactor.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/ConditionalPrimary.php b/lib/Doctrine/ORM/Query/AST/ConditionalPrimary.php index b8591fa4119..3c46b806286 100644 --- a/lib/Doctrine/ORM/Query/AST/ConditionalPrimary.php +++ b/lib/Doctrine/ORM/Query/AST/ConditionalPrimary.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/ConditionalTerm.php b/lib/Doctrine/ORM/Query/AST/ConditionalTerm.php index a5e92fd78bc..638123119de 100644 --- a/lib/Doctrine/ORM/Query/AST/ConditionalTerm.php +++ b/lib/Doctrine/ORM/Query/AST/ConditionalTerm.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); namespace Doctrine\ORM\Query\AST; diff --git a/lib/Doctrine/ORM/Query/AST/DeleteClause.php b/lib/Doctrine/ORM/Query/AST/DeleteClause.php index 71ce05a624d..5eeef3a2f1c 100644 --- a/lib/Doctrine/ORM/Query/AST/DeleteClause.php +++ b/lib/Doctrine/ORM/Query/AST/DeleteClause.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/DeleteStatement.php b/lib/Doctrine/ORM/Query/AST/DeleteStatement.php index d39435cb8b7..ee9c4b86aac 100644 --- a/lib/Doctrine/ORM/Query/AST/DeleteStatement.php +++ b/lib/Doctrine/ORM/Query/AST/DeleteStatement.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/EmptyCollectionComparisonExpression.php b/lib/Doctrine/ORM/Query/AST/EmptyCollectionComparisonExpression.php index 5b0d29ce763..5311361da8b 100644 --- a/lib/Doctrine/ORM/Query/AST/EmptyCollectionComparisonExpression.php +++ b/lib/Doctrine/ORM/Query/AST/EmptyCollectionComparisonExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/ExistsExpression.php b/lib/Doctrine/ORM/Query/AST/ExistsExpression.php index 57739b410cb..01bdbb01de4 100644 --- a/lib/Doctrine/ORM/Query/AST/ExistsExpression.php +++ b/lib/Doctrine/ORM/Query/AST/ExistsExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/FromClause.php b/lib/Doctrine/ORM/Query/AST/FromClause.php index 9db85588961..5c704544d85 100644 --- a/lib/Doctrine/ORM/Query/AST/FromClause.php +++ b/lib/Doctrine/ORM/Query/AST/FromClause.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/AbsFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/AbsFunction.php index 17dfbefbc74..f1b0bbbe92a 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/AbsFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/AbsFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/AvgFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/AvgFunction.php index 1b487df1d3c..2ee710a63b8 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/AvgFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/AvgFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/BitAndFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/BitAndFunction.php index 9e735f64517..f36c605c71d 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/BitAndFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/BitAndFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/BitOrFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/BitOrFunction.php index 1247dd902e9..36d8a92c8cc 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/BitOrFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/BitOrFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/ConcatFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/ConcatFunction.php index 3bc2d5b6311..1a7df4902ac 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/ConcatFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/ConcatFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/CountFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/CountFunction.php index 21fbdd6af48..f537a2af953 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/CountFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/CountFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/CurrentDateFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/CurrentDateFunction.php index 957a339f3ee..0792d9f7006 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/CurrentDateFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/CurrentDateFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/CurrentTimeFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/CurrentTimeFunction.php index 37d3a09dab6..5fc194413e1 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/CurrentTimeFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/CurrentTimeFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/CurrentTimestampFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/CurrentTimestampFunction.php index 409af03bcb9..209d1e99997 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/CurrentTimestampFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/CurrentTimestampFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/DateAddFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/DateAddFunction.php index c0fda7b8df2..72db330b98e 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/DateAddFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/DateAddFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/DateDiffFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/DateDiffFunction.php index 6b83e1f913e..4897e6588c2 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/DateDiffFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/DateDiffFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/DateSubFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/DateSubFunction.php index 86aba043a7b..d398661d224 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/DateSubFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/DateSubFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/FunctionNode.php b/lib/Doctrine/ORM/Query/AST/Functions/FunctionNode.php index e02b91bbcb5..a65c332ec07 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/FunctionNode.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/FunctionNode.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php index 6e37578ac88..a2fa416012a 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/LengthFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/LengthFunction.php index 42e2911b6ce..da0e07cf0a5 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/LengthFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/LengthFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/LocateFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/LocateFunction.php index a790a25a609..930994e530d 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/LocateFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/LocateFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/LowerFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/LowerFunction.php index be42f7badfe..d1c4431f338 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/LowerFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/LowerFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/MaxFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/MaxFunction.php index 5071afd8db4..a48c4bdd049 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/MaxFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/MaxFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/MinFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/MinFunction.php index a6f1d4c7ac2..0b3c74c4f81 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/MinFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/MinFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/ModFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/ModFunction.php index 8c58cf1d216..74c15b3198b 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/ModFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/ModFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php index c7102595278..3500523d889 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/SqrtFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/SqrtFunction.php index bcbb87a2b66..d01fd11d29e 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/SqrtFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/SqrtFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/SubstringFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/SubstringFunction.php index e46104d9505..36ca898ee10 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/SubstringFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/SubstringFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/SumFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/SumFunction.php index 13ba0b53a78..84f5991e752 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/SumFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/SumFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/TrimFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/TrimFunction.php index ffc006e374d..4d0b51be1b0 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/TrimFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/TrimFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Functions/UpperFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/UpperFunction.php index 298eef6f2a0..1ac1d8069f0 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/UpperFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/UpperFunction.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/GeneralCaseExpression.php b/lib/Doctrine/ORM/Query/AST/GeneralCaseExpression.php index 08d2629df9e..00065b7f424 100644 --- a/lib/Doctrine/ORM/Query/AST/GeneralCaseExpression.php +++ b/lib/Doctrine/ORM/Query/AST/GeneralCaseExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/GroupByClause.php b/lib/Doctrine/ORM/Query/AST/GroupByClause.php index 830b6dc7386..984898c4aa3 100644 --- a/lib/Doctrine/ORM/Query/AST/GroupByClause.php +++ b/lib/Doctrine/ORM/Query/AST/GroupByClause.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/HavingClause.php b/lib/Doctrine/ORM/Query/AST/HavingClause.php index fbdb934249c..c2edc01cff4 100644 --- a/lib/Doctrine/ORM/Query/AST/HavingClause.php +++ b/lib/Doctrine/ORM/Query/AST/HavingClause.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/IdentificationVariableDeclaration.php b/lib/Doctrine/ORM/Query/AST/IdentificationVariableDeclaration.php index e09ca32b133..9296445610a 100644 --- a/lib/Doctrine/ORM/Query/AST/IdentificationVariableDeclaration.php +++ b/lib/Doctrine/ORM/Query/AST/IdentificationVariableDeclaration.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/InExpression.php b/lib/Doctrine/ORM/Query/AST/InExpression.php index 0ffa735fd36..64e37cb060f 100644 --- a/lib/Doctrine/ORM/Query/AST/InExpression.php +++ b/lib/Doctrine/ORM/Query/AST/InExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); namespace Doctrine\ORM\Query\AST; diff --git a/lib/Doctrine/ORM/Query/AST/IndexBy.php b/lib/Doctrine/ORM/Query/AST/IndexBy.php index b0540e16e78..691a00d199b 100644 --- a/lib/Doctrine/ORM/Query/AST/IndexBy.php +++ b/lib/Doctrine/ORM/Query/AST/IndexBy.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/InputParameter.php b/lib/Doctrine/ORM/Query/AST/InputParameter.php index 9832e670e0b..f54e6b7dae4 100644 --- a/lib/Doctrine/ORM/Query/AST/InputParameter.php +++ b/lib/Doctrine/ORM/Query/AST/InputParameter.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/InstanceOfExpression.php b/lib/Doctrine/ORM/Query/AST/InstanceOfExpression.php index 87480755941..4d44e1f446d 100644 --- a/lib/Doctrine/ORM/Query/AST/InstanceOfExpression.php +++ b/lib/Doctrine/ORM/Query/AST/InstanceOfExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Join.php b/lib/Doctrine/ORM/Query/AST/Join.php index 07b5cf946e0..beb6acaac95 100644 --- a/lib/Doctrine/ORM/Query/AST/Join.php +++ b/lib/Doctrine/ORM/Query/AST/Join.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/JoinAssociationDeclaration.php b/lib/Doctrine/ORM/Query/AST/JoinAssociationDeclaration.php index 689fe5777d7..1355a67b575 100644 --- a/lib/Doctrine/ORM/Query/AST/JoinAssociationDeclaration.php +++ b/lib/Doctrine/ORM/Query/AST/JoinAssociationDeclaration.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/JoinAssociationPathExpression.php b/lib/Doctrine/ORM/Query/AST/JoinAssociationPathExpression.php index 2d5a28095d0..a9d05a1add3 100644 --- a/lib/Doctrine/ORM/Query/AST/JoinAssociationPathExpression.php +++ b/lib/Doctrine/ORM/Query/AST/JoinAssociationPathExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/JoinClassPathExpression.php b/lib/Doctrine/ORM/Query/AST/JoinClassPathExpression.php index a336aea2864..534031f3e71 100644 --- a/lib/Doctrine/ORM/Query/AST/JoinClassPathExpression.php +++ b/lib/Doctrine/ORM/Query/AST/JoinClassPathExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/JoinVariableDeclaration.php b/lib/Doctrine/ORM/Query/AST/JoinVariableDeclaration.php index 4f70f701daa..dfc52fd570c 100644 --- a/lib/Doctrine/ORM/Query/AST/JoinVariableDeclaration.php +++ b/lib/Doctrine/ORM/Query/AST/JoinVariableDeclaration.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/LikeExpression.php b/lib/Doctrine/ORM/Query/AST/LikeExpression.php index 176e6a5badf..9c49aaf9042 100644 --- a/lib/Doctrine/ORM/Query/AST/LikeExpression.php +++ b/lib/Doctrine/ORM/Query/AST/LikeExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); namespace Doctrine\ORM\Query\AST; diff --git a/lib/Doctrine/ORM/Query/AST/Literal.php b/lib/Doctrine/ORM/Query/AST/Literal.php index 2106a9743ef..47d37db5cbe 100644 --- a/lib/Doctrine/ORM/Query/AST/Literal.php +++ b/lib/Doctrine/ORM/Query/AST/Literal.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/NewObjectExpression.php b/lib/Doctrine/ORM/Query/AST/NewObjectExpression.php index b8c1ad83cdd..a091e8af433 100644 --- a/lib/Doctrine/ORM/Query/AST/NewObjectExpression.php +++ b/lib/Doctrine/ORM/Query/AST/NewObjectExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Node.php b/lib/Doctrine/ORM/Query/AST/Node.php index 0594f328433..3144176b22a 100644 --- a/lib/Doctrine/ORM/Query/AST/Node.php +++ b/lib/Doctrine/ORM/Query/AST/Node.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/NullComparisonExpression.php b/lib/Doctrine/ORM/Query/AST/NullComparisonExpression.php index 51e7cf81fc8..a50f1b92ee8 100644 --- a/lib/Doctrine/ORM/Query/AST/NullComparisonExpression.php +++ b/lib/Doctrine/ORM/Query/AST/NullComparisonExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/NullIfExpression.php b/lib/Doctrine/ORM/Query/AST/NullIfExpression.php index c2da9713a12..3b83d89fde8 100644 --- a/lib/Doctrine/ORM/Query/AST/NullIfExpression.php +++ b/lib/Doctrine/ORM/Query/AST/NullIfExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/OrderByClause.php b/lib/Doctrine/ORM/Query/AST/OrderByClause.php index 8fcb1e14603..cc269b4637f 100644 --- a/lib/Doctrine/ORM/Query/AST/OrderByClause.php +++ b/lib/Doctrine/ORM/Query/AST/OrderByClause.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/OrderByItem.php b/lib/Doctrine/ORM/Query/AST/OrderByItem.php index 27823600ddf..06ee75b098e 100644 --- a/lib/Doctrine/ORM/Query/AST/OrderByItem.php +++ b/lib/Doctrine/ORM/Query/AST/OrderByItem.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/ParenthesisExpression.php b/lib/Doctrine/ORM/Query/AST/ParenthesisExpression.php index 1d2d3a8624c..ff3ad7b7482 100644 --- a/lib/Doctrine/ORM/Query/AST/ParenthesisExpression.php +++ b/lib/Doctrine/ORM/Query/AST/ParenthesisExpression.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/PartialObjectExpression.php b/lib/Doctrine/ORM/Query/AST/PartialObjectExpression.php index 32d5e1a8233..c0fa381e778 100644 --- a/lib/Doctrine/ORM/Query/AST/PartialObjectExpression.php +++ b/lib/Doctrine/ORM/Query/AST/PartialObjectExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/PathExpression.php b/lib/Doctrine/ORM/Query/AST/PathExpression.php index fd859b5376d..0eec8da22f5 100644 --- a/lib/Doctrine/ORM/Query/AST/PathExpression.php +++ b/lib/Doctrine/ORM/Query/AST/PathExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/QuantifiedExpression.php b/lib/Doctrine/ORM/Query/AST/QuantifiedExpression.php index ec0d31b0163..8af695efebc 100644 --- a/lib/Doctrine/ORM/Query/AST/QuantifiedExpression.php +++ b/lib/Doctrine/ORM/Query/AST/QuantifiedExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); namespace Doctrine\ORM\Query\AST; diff --git a/lib/Doctrine/ORM/Query/AST/RangeVariableDeclaration.php b/lib/Doctrine/ORM/Query/AST/RangeVariableDeclaration.php index 24da3f95603..1d756377263 100644 --- a/lib/Doctrine/ORM/Query/AST/RangeVariableDeclaration.php +++ b/lib/Doctrine/ORM/Query/AST/RangeVariableDeclaration.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/SelectClause.php b/lib/Doctrine/ORM/Query/AST/SelectClause.php index bf522d279cb..3b865ab4890 100644 --- a/lib/Doctrine/ORM/Query/AST/SelectClause.php +++ b/lib/Doctrine/ORM/Query/AST/SelectClause.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/SelectExpression.php b/lib/Doctrine/ORM/Query/AST/SelectExpression.php index fb6791bd25d..d8f8dfbc510 100644 --- a/lib/Doctrine/ORM/Query/AST/SelectExpression.php +++ b/lib/Doctrine/ORM/Query/AST/SelectExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/SelectStatement.php b/lib/Doctrine/ORM/Query/AST/SelectStatement.php index 1bce076f3f5..afe27928e16 100644 --- a/lib/Doctrine/ORM/Query/AST/SelectStatement.php +++ b/lib/Doctrine/ORM/Query/AST/SelectStatement.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/SimpleArithmeticExpression.php b/lib/Doctrine/ORM/Query/AST/SimpleArithmeticExpression.php index 9abf137c240..2883ec908fb 100644 --- a/lib/Doctrine/ORM/Query/AST/SimpleArithmeticExpression.php +++ b/lib/Doctrine/ORM/Query/AST/SimpleArithmeticExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/SimpleCaseExpression.php b/lib/Doctrine/ORM/Query/AST/SimpleCaseExpression.php index a4c5d589771..92ec4f79a89 100644 --- a/lib/Doctrine/ORM/Query/AST/SimpleCaseExpression.php +++ b/lib/Doctrine/ORM/Query/AST/SimpleCaseExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/SimpleSelectClause.php b/lib/Doctrine/ORM/Query/AST/SimpleSelectClause.php index 8ef2743a003..196e69369cb 100644 --- a/lib/Doctrine/ORM/Query/AST/SimpleSelectClause.php +++ b/lib/Doctrine/ORM/Query/AST/SimpleSelectClause.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/SimpleSelectExpression.php b/lib/Doctrine/ORM/Query/AST/SimpleSelectExpression.php index 164e75e135e..f1dca885df0 100644 --- a/lib/Doctrine/ORM/Query/AST/SimpleSelectExpression.php +++ b/lib/Doctrine/ORM/Query/AST/SimpleSelectExpression.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/SimpleWhenClause.php b/lib/Doctrine/ORM/Query/AST/SimpleWhenClause.php index 1e818827da6..bbdf3aec47e 100644 --- a/lib/Doctrine/ORM/Query/AST/SimpleWhenClause.php +++ b/lib/Doctrine/ORM/Query/AST/SimpleWhenClause.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/Subselect.php b/lib/Doctrine/ORM/Query/AST/Subselect.php index 03ffd93ffaa..78203e3515e 100644 --- a/lib/Doctrine/ORM/Query/AST/Subselect.php +++ b/lib/Doctrine/ORM/Query/AST/Subselect.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/SubselectFromClause.php b/lib/Doctrine/ORM/Query/AST/SubselectFromClause.php index e9d78d53379..2e853bdc5c1 100644 --- a/lib/Doctrine/ORM/Query/AST/SubselectFromClause.php +++ b/lib/Doctrine/ORM/Query/AST/SubselectFromClause.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/SubselectIdentificationVariableDeclaration.php b/lib/Doctrine/ORM/Query/AST/SubselectIdentificationVariableDeclaration.php index a33ca1bb4de..12fb52ca6d1 100644 --- a/lib/Doctrine/ORM/Query/AST/SubselectIdentificationVariableDeclaration.php +++ b/lib/Doctrine/ORM/Query/AST/SubselectIdentificationVariableDeclaration.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/UpdateClause.php b/lib/Doctrine/ORM/Query/AST/UpdateClause.php index 8699ea99a9b..13206741750 100644 --- a/lib/Doctrine/ORM/Query/AST/UpdateClause.php +++ b/lib/Doctrine/ORM/Query/AST/UpdateClause.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/UpdateItem.php b/lib/Doctrine/ORM/Query/AST/UpdateItem.php index d74893a58e7..6da8485470d 100644 --- a/lib/Doctrine/ORM/Query/AST/UpdateItem.php +++ b/lib/Doctrine/ORM/Query/AST/UpdateItem.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/UpdateStatement.php b/lib/Doctrine/ORM/Query/AST/UpdateStatement.php index 52e3305bc5f..7c2fe06c6ac 100644 --- a/lib/Doctrine/ORM/Query/AST/UpdateStatement.php +++ b/lib/Doctrine/ORM/Query/AST/UpdateStatement.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/WhenClause.php b/lib/Doctrine/ORM/Query/AST/WhenClause.php index 20bf562e805..b1ba6fbff1c 100644 --- a/lib/Doctrine/ORM/Query/AST/WhenClause.php +++ b/lib/Doctrine/ORM/Query/AST/WhenClause.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/AST/WhereClause.php b/lib/Doctrine/ORM/Query/AST/WhereClause.php index 22151e96609..dbf7c468ed7 100644 --- a/lib/Doctrine/ORM/Query/AST/WhereClause.php +++ b/lib/Doctrine/ORM/Query/AST/WhereClause.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Exec/AbstractSqlExecutor.php b/lib/Doctrine/ORM/Query/Exec/AbstractSqlExecutor.php index a12155691d9..bdc50a98934 100644 --- a/lib/Doctrine/ORM/Query/Exec/AbstractSqlExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/AbstractSqlExecutor.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php index 4a69d2c2218..12d91eb16d7 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php index fb0aae3aba6..1f31768f941 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Exec/SingleSelectExecutor.php b/lib/Doctrine/ORM/Query/Exec/SingleSelectExecutor.php index 6cd4aa3a1b4..46f262783fb 100644 --- a/lib/Doctrine/ORM/Query/Exec/SingleSelectExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/SingleSelectExecutor.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Exec/SingleTableDeleteUpdateExecutor.php b/lib/Doctrine/ORM/Query/Exec/SingleTableDeleteUpdateExecutor.php index 1ee7b282ca5..e39447abb97 100644 --- a/lib/Doctrine/ORM/Query/Exec/SingleTableDeleteUpdateExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/SingleTableDeleteUpdateExecutor.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Expr.php b/lib/Doctrine/ORM/Query/Expr.php index 326ce64a397..a20f04a652e 100644 --- a/lib/Doctrine/ORM/Query/Expr.php +++ b/lib/Doctrine/ORM/Query/Expr.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Expr/Andx.php b/lib/Doctrine/ORM/Query/Expr/Andx.php index 8ff2a5a772a..8132f34572b 100644 --- a/lib/Doctrine/ORM/Query/Expr/Andx.php +++ b/lib/Doctrine/ORM/Query/Expr/Andx.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Expr/Base.php b/lib/Doctrine/ORM/Query/Expr/Base.php index be45d8b92d5..23a74b733ab 100644 --- a/lib/Doctrine/ORM/Query/Expr/Base.php +++ b/lib/Doctrine/ORM/Query/Expr/Base.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Expr/Comparison.php b/lib/Doctrine/ORM/Query/Expr/Comparison.php index d76846cc8fc..a6b54f16981 100644 --- a/lib/Doctrine/ORM/Query/Expr/Comparison.php +++ b/lib/Doctrine/ORM/Query/Expr/Comparison.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Expr/Composite.php b/lib/Doctrine/ORM/Query/Expr/Composite.php index b8c61d645e0..7fa2ac0e23c 100644 --- a/lib/Doctrine/ORM/Query/Expr/Composite.php +++ b/lib/Doctrine/ORM/Query/Expr/Composite.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Expr/From.php b/lib/Doctrine/ORM/Query/Expr/From.php index e295f2a588e..711eca3f49c 100644 --- a/lib/Doctrine/ORM/Query/Expr/From.php +++ b/lib/Doctrine/ORM/Query/Expr/From.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Expr/Func.php b/lib/Doctrine/ORM/Query/Expr/Func.php index 8229a23414d..80ba9f5d5d2 100644 --- a/lib/Doctrine/ORM/Query/Expr/Func.php +++ b/lib/Doctrine/ORM/Query/Expr/Func.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Expr/GroupBy.php b/lib/Doctrine/ORM/Query/Expr/GroupBy.php index 3a8377e47ee..75e7e676817 100644 --- a/lib/Doctrine/ORM/Query/Expr/GroupBy.php +++ b/lib/Doctrine/ORM/Query/Expr/GroupBy.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Expr/Join.php b/lib/Doctrine/ORM/Query/Expr/Join.php index 4a4e5845736..13a0672d936 100644 --- a/lib/Doctrine/ORM/Query/Expr/Join.php +++ b/lib/Doctrine/ORM/Query/Expr/Join.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Expr/Literal.php b/lib/Doctrine/ORM/Query/Expr/Literal.php index 905c1b59fcc..d449f378cc7 100644 --- a/lib/Doctrine/ORM/Query/Expr/Literal.php +++ b/lib/Doctrine/ORM/Query/Expr/Literal.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Expr/Math.php b/lib/Doctrine/ORM/Query/Expr/Math.php index 82f2d8e57b6..cb74b8a3774 100644 --- a/lib/Doctrine/ORM/Query/Expr/Math.php +++ b/lib/Doctrine/ORM/Query/Expr/Math.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Expr/OrderBy.php b/lib/Doctrine/ORM/Query/Expr/OrderBy.php index 65336694b3e..5a8261436df 100644 --- a/lib/Doctrine/ORM/Query/Expr/OrderBy.php +++ b/lib/Doctrine/ORM/Query/Expr/OrderBy.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Expr/Orx.php b/lib/Doctrine/ORM/Query/Expr/Orx.php index dc0388026aa..23a6b97c703 100644 --- a/lib/Doctrine/ORM/Query/Expr/Orx.php +++ b/lib/Doctrine/ORM/Query/Expr/Orx.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Expr/Select.php b/lib/Doctrine/ORM/Query/Expr/Select.php index f990c8ed8be..bbad9d8a58f 100644 --- a/lib/Doctrine/ORM/Query/Expr/Select.php +++ b/lib/Doctrine/ORM/Query/Expr/Select.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Filter/SQLFilter.php b/lib/Doctrine/ORM/Query/Filter/SQLFilter.php index 3ce9480e85b..e75eb623379 100644 --- a/lib/Doctrine/ORM/Query/Filter/SQLFilter.php +++ b/lib/Doctrine/ORM/Query/Filter/SQLFilter.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/FilterCollection.php b/lib/Doctrine/ORM/Query/FilterCollection.php index a340f2b7724..85812c0ec60 100644 --- a/lib/Doctrine/ORM/Query/FilterCollection.php +++ b/lib/Doctrine/ORM/Query/FilterCollection.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Lexer.php b/lib/Doctrine/ORM/Query/Lexer.php index dab0f3cf263..ade4344bbed 100644 --- a/lib/Doctrine/ORM/Query/Lexer.php +++ b/lib/Doctrine/ORM/Query/Lexer.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Parameter.php b/lib/Doctrine/ORM/Query/Parameter.php index 191a607ba1d..64681333530 100644 --- a/lib/Doctrine/ORM/Query/Parameter.php +++ b/lib/Doctrine/ORM/Query/Parameter.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/ParameterTypeInferer.php b/lib/Doctrine/ORM/Query/ParameterTypeInferer.php index 129ffc1d3f5..2a6530a46f9 100644 --- a/lib/Doctrine/ORM/Query/ParameterTypeInferer.php +++ b/lib/Doctrine/ORM/Query/ParameterTypeInferer.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Parser.php b/lib/Doctrine/ORM/Query/Parser.php index 01645482274..4778448e4e8 100644 --- a/lib/Doctrine/ORM/Query/Parser.php +++ b/lib/Doctrine/ORM/Query/Parser.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/ParserResult.php b/lib/Doctrine/ORM/Query/ParserResult.php index f9372d9a462..c1585d87ab1 100644 --- a/lib/Doctrine/ORM/Query/ParserResult.php +++ b/lib/Doctrine/ORM/Query/ParserResult.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/Printer.php b/lib/Doctrine/ORM/Query/Printer.php index 47f2dab824b..5151c4c440a 100644 --- a/lib/Doctrine/ORM/Query/Printer.php +++ b/lib/Doctrine/ORM/Query/Printer.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/QueryException.php b/lib/Doctrine/ORM/Query/QueryException.php index f4ba8216db0..39e10ac4b64 100644 --- a/lib/Doctrine/ORM/Query/QueryException.php +++ b/lib/Doctrine/ORM/Query/QueryException.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php b/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php index 27d2320042f..ca12bd4d573 100644 --- a/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php +++ b/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/ResultSetMapping.php b/lib/Doctrine/ORM/Query/ResultSetMapping.php index 7a39c6b5a1c..62a439cfa06 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMapping.php +++ b/lib/Doctrine/ORM/Query/ResultSetMapping.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index 6c2f8e6105b..38822445ece 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 8af8066c9ea..5188ec51099 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/TreeWalker.php b/lib/Doctrine/ORM/Query/TreeWalker.php index 89193473403..8a6ab8bdc34 100644 --- a/lib/Doctrine/ORM/Query/TreeWalker.php +++ b/lib/Doctrine/ORM/Query/TreeWalker.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/TreeWalkerAdapter.php b/lib/Doctrine/ORM/Query/TreeWalkerAdapter.php index f66589ddcea..8073fa06e79 100644 --- a/lib/Doctrine/ORM/Query/TreeWalkerAdapter.php +++ b/lib/Doctrine/ORM/Query/TreeWalkerAdapter.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/TreeWalkerChain.php b/lib/Doctrine/ORM/Query/TreeWalkerChain.php index d42b8f073c4..0b68ae30287 100644 --- a/lib/Doctrine/ORM/Query/TreeWalkerChain.php +++ b/lib/Doctrine/ORM/Query/TreeWalkerChain.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Query/TreeWalkerChainIterator.php b/lib/Doctrine/ORM/Query/TreeWalkerChainIterator.php index aeaa882db03..3bab50edff8 100644 --- a/lib/Doctrine/ORM/Query/TreeWalkerChainIterator.php +++ b/lib/Doctrine/ORM/Query/TreeWalkerChainIterator.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/QueryBuilder.php b/lib/Doctrine/ORM/QueryBuilder.php index 5dfa0ee02d0..aca97b2510e 100644 --- a/lib/Doctrine/ORM/QueryBuilder.php +++ b/lib/Doctrine/ORM/QueryBuilder.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Reflection/ReflectionService.php b/lib/Doctrine/ORM/Reflection/ReflectionService.php index 84aec0e1e28..9078501746f 100644 --- a/lib/Doctrine/ORM/Reflection/ReflectionService.php +++ b/lib/Doctrine/ORM/Reflection/ReflectionService.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Reflection/RuntimePublicReflectionProperty.php b/lib/Doctrine/ORM/Reflection/RuntimePublicReflectionProperty.php index dd3ac0b6845..310ac794d15 100644 --- a/lib/Doctrine/ORM/Reflection/RuntimePublicReflectionProperty.php +++ b/lib/Doctrine/ORM/Reflection/RuntimePublicReflectionProperty.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Reflection/RuntimeReflectionService.php b/lib/Doctrine/ORM/Reflection/RuntimeReflectionService.php index 5ecedb0561d..9a371783070 100644 --- a/lib/Doctrine/ORM/Reflection/RuntimeReflectionService.php +++ b/lib/Doctrine/ORM/Reflection/RuntimeReflectionService.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Reflection/StaticReflectionService.php b/lib/Doctrine/ORM/Reflection/StaticReflectionService.php index b19f670100b..fc6fa17ffbf 100644 --- a/lib/Doctrine/ORM/Reflection/StaticReflectionService.php +++ b/lib/Doctrine/ORM/Reflection/StaticReflectionService.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php b/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php index 98a197d5525..04409b89b14 100644 --- a/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php +++ b/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Repository/RepositoryFactory.php b/lib/Doctrine/ORM/Repository/RepositoryFactory.php index 80ccdb0a25f..6977ec97a62 100644 --- a/lib/Doctrine/ORM/Repository/RepositoryFactory.php +++ b/lib/Doctrine/ORM/Repository/RepositoryFactory.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php b/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php index a284a645a01..2116e0d5e08 100644 --- a/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Sequencing/Generator.php b/lib/Doctrine/ORM/Sequencing/Generator.php index 414f082684d..714be2b6d24 100644 --- a/lib/Doctrine/ORM/Sequencing/Generator.php +++ b/lib/Doctrine/ORM/Sequencing/Generator.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Sequencing/IdentityGenerator.php b/lib/Doctrine/ORM/Sequencing/IdentityGenerator.php index d2661ed0460..1a08e154caf 100644 --- a/lib/Doctrine/ORM/Sequencing/IdentityGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/IdentityGenerator.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Sequencing/Planning/ColumnValueGeneratorExecutor.php b/lib/Doctrine/ORM/Sequencing/Planning/ColumnValueGeneratorExecutor.php index c92f5e768a5..b9249adc52a 100644 --- a/lib/Doctrine/ORM/Sequencing/Planning/ColumnValueGeneratorExecutor.php +++ b/lib/Doctrine/ORM/Sequencing/Planning/ColumnValueGeneratorExecutor.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Sequencing/Planning/CompositeValueGenerationPlan.php b/lib/Doctrine/ORM/Sequencing/Planning/CompositeValueGenerationPlan.php index 6378b1e8d3a..0f4cc931c68 100644 --- a/lib/Doctrine/ORM/Sequencing/Planning/CompositeValueGenerationPlan.php +++ b/lib/Doctrine/ORM/Sequencing/Planning/CompositeValueGenerationPlan.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Sequencing/Planning/NoopValueGenerationPlan.php b/lib/Doctrine/ORM/Sequencing/Planning/NoopValueGenerationPlan.php index 31c9440fecb..a770184bbd2 100644 --- a/lib/Doctrine/ORM/Sequencing/Planning/NoopValueGenerationPlan.php +++ b/lib/Doctrine/ORM/Sequencing/Planning/NoopValueGenerationPlan.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Sequencing/Planning/SingleValueGenerationPlan.php b/lib/Doctrine/ORM/Sequencing/Planning/SingleValueGenerationPlan.php index 97e61a9862e..da8f23e9b2c 100644 --- a/lib/Doctrine/ORM/Sequencing/Planning/SingleValueGenerationPlan.php +++ b/lib/Doctrine/ORM/Sequencing/Planning/SingleValueGenerationPlan.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Sequencing/Planning/ValueGenerationExecutor.php b/lib/Doctrine/ORM/Sequencing/Planning/ValueGenerationExecutor.php index 48d4e818e3e..f432cac320a 100644 --- a/lib/Doctrine/ORM/Sequencing/Planning/ValueGenerationExecutor.php +++ b/lib/Doctrine/ORM/Sequencing/Planning/ValueGenerationExecutor.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Sequencing/Planning/ValueGenerationPlan.php b/lib/Doctrine/ORM/Sequencing/Planning/ValueGenerationPlan.php index 9eb291953b9..828522dd53e 100644 --- a/lib/Doctrine/ORM/Sequencing/Planning/ValueGenerationPlan.php +++ b/lib/Doctrine/ORM/Sequencing/Planning/ValueGenerationPlan.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php b/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php index c513267c5ec..c1f045a4896 100644 --- a/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Sequencing/TableGenerator.php b/lib/Doctrine/ORM/Sequencing/TableGenerator.php index c28331f4165..b5a79358fae 100644 --- a/lib/Doctrine/ORM/Sequencing/TableGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/TableGenerator.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Sequencing/UuidGenerator.php b/lib/Doctrine/ORM/Sequencing/UuidGenerator.php index f374be4eef0..24c8e4a4170 100644 --- a/lib/Doctrine/ORM/Sequencing/UuidGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/UuidGenerator.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/AttachEntityListenersListener.php b/lib/Doctrine/ORM/Tools/AttachEntityListenersListener.php index d2374568441..6d0616f1203 100644 --- a/lib/Doctrine/ORM/Tools/AttachEntityListenersListener.php +++ b/lib/Doctrine/ORM/Tools/AttachEntityListenersListener.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/CollectionRegionCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/CollectionRegionCommand.php index daae2ee4dc8..8217a7321b8 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/CollectionRegionCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/CollectionRegionCommand.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/EntityRegionCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/EntityRegionCommand.php index a7fffb5f25e..965aaabcdb4 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/EntityRegionCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/EntityRegionCommand.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/MetadataCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/MetadataCommand.php index 7296ceaf710..c8d06233bba 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/MetadataCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/MetadataCommand.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/QueryCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/QueryCommand.php index 02fa5d066fb..ec624e365f4 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/QueryCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/QueryCommand.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/QueryRegionCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/QueryRegionCommand.php index 6ffb568c39d..2c822f74068 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/QueryRegionCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/QueryRegionCommand.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/ResultCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/ResultCommand.php index 142d7d0d2be..8a13dc884e6 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/ResultCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/ResultCommand.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ConvertMappingCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ConvertMappingCommand.php index 88eb9afd584..3add8ddc702 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ConvertMappingCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ConvertMappingCommand.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/EnsureProductionSettingsCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/EnsureProductionSettingsCommand.php index d07a5c6d945..a13c30f7b3c 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/EnsureProductionSettingsCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/EnsureProductionSettingsCommand.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/GenerateEntitiesCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/GenerateEntitiesCommand.php index f6b93f58d2e..f27c84b47a4 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/GenerateEntitiesCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/GenerateEntitiesCommand.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/GenerateProxiesCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/GenerateProxiesCommand.php index 636f44e5619..1c1aec02c6d 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/GenerateProxiesCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/GenerateProxiesCommand.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/GenerateRepositoriesCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/GenerateRepositoriesCommand.php index 92331e7c896..f9a0887d472 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/GenerateRepositoriesCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/GenerateRepositoriesCommand.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php index fd7d65229e8..4b241dc05dc 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index 3a42edb9c4a..5a9ca608238 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/RunDqlCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/RunDqlCommand.php index 09566ea1f3a..0e25444a38a 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/RunDqlCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/RunDqlCommand.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/AbstractCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/AbstractCommand.php index 1082fb16fda..f88003d3a1c 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/AbstractCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/AbstractCommand.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/CreateCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/CreateCommand.php index c61d9be876f..862a5169107 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/CreateCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/CreateCommand.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/DropCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/DropCommand.php index fb7c25ad167..58529130535 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/DropCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/DropCommand.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/UpdateCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/UpdateCommand.php index 952ee1951d5..e168a41a23a 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/UpdateCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/UpdateCommand.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ValidateSchemaCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ValidateSchemaCommand.php index 6b5d10fd954..35efe9403ab 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ValidateSchemaCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ValidateSchemaCommand.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php b/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php index 3f2b8ce0966..6d6769f3d47 100644 --- a/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php +++ b/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/Helper/EntityManagerHelper.php b/lib/Doctrine/ORM/Tools/Console/Helper/EntityManagerHelper.php index 76a1f8508d6..e7dc1610c37 100644 --- a/lib/Doctrine/ORM/Tools/Console/Helper/EntityManagerHelper.php +++ b/lib/Doctrine/ORM/Tools/Console/Helper/EntityManagerHelper.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Console/MetadataFilter.php b/lib/Doctrine/ORM/Tools/Console/MetadataFilter.php index e3593250c31..420187025b0 100644 --- a/lib/Doctrine/ORM/Tools/Console/MetadataFilter.php +++ b/lib/Doctrine/ORM/Tools/Console/MetadataFilter.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php b/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php index caf883481d3..d47ddbe022c 100644 --- a/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php +++ b/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php b/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php index 09eb59e73f8..88b01ccd823 100644 --- a/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index d8261632c7d..e79d4e6fb53 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php b/lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php index 9178bc15262..028026515c9 100644 --- a/lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Event/GenerateSchemaEventArgs.php b/lib/Doctrine/ORM/Tools/Event/GenerateSchemaEventArgs.php index 19efda44758..c3fdf43d19e 100644 --- a/lib/Doctrine/ORM/Tools/Event/GenerateSchemaEventArgs.php +++ b/lib/Doctrine/ORM/Tools/Event/GenerateSchemaEventArgs.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Event/GenerateSchemaTableEventArgs.php b/lib/Doctrine/ORM/Tools/Event/GenerateSchemaTableEventArgs.php index 461f9b1c9ec..343abc9bf0a 100644 --- a/lib/Doctrine/ORM/Tools/Event/GenerateSchemaTableEventArgs.php +++ b/lib/Doctrine/ORM/Tools/Event/GenerateSchemaTableEventArgs.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); namespace Doctrine\ORM\Tools\Event; diff --git a/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php b/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php index c66adeef8a8..01f7ee1ad9d 100644 --- a/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/ClassMetadataExporter.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php index 44f7b95cb59..9bc5ef0a30a 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php index 11cb21143c3..c14c296677c 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index f95dc483e3f..3c2941ac1dc 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 5a3c9892e80..8552419eb4d 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Export/ExportException.php b/lib/Doctrine/ORM/Tools/Export/ExportException.php index e2e32bfd3d4..0ffecef51ad 100644 --- a/lib/Doctrine/ORM/Tools/Export/ExportException.php +++ b/lib/Doctrine/ORM/Tools/Export/ExportException.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php index 72a5f6b9755..520df68d78d 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Pagination/CountWalker.php b/lib/Doctrine/ORM/Tools/Pagination/CountWalker.php index c7e1db6c596..23ded204973 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/CountWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/CountWalker.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php index d678975fa38..2c68d21377d 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php index 62fa999c784..82b47029fa2 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Pagination/Paginator.php b/lib/Doctrine/ORM/Tools/Pagination/Paginator.php index b64386eeb05..4f37eed6643 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/Paginator.php +++ b/lib/Doctrine/ORM/Tools/Pagination/Paginator.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Pagination/RowNumberOverFunction.php b/lib/Doctrine/ORM/Tools/Pagination/RowNumberOverFunction.php index 05dd5691a38..58c35a5ac3b 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/RowNumberOverFunction.php +++ b/lib/Doctrine/ORM/Tools/Pagination/RowNumberOverFunction.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php b/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php index 157523f2b46..4eacffbc074 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php b/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php index adf0dda21eb..8cd20a37cab 100644 --- a/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php +++ b/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 52e3cea9afc..9a09db7cb2a 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/SchemaValidator.php b/lib/Doctrine/ORM/Tools/SchemaValidator.php index cbc1dfbfc3f..918dd6ee850 100644 --- a/lib/Doctrine/ORM/Tools/SchemaValidator.php +++ b/lib/Doctrine/ORM/Tools/SchemaValidator.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/Setup.php b/lib/Doctrine/ORM/Tools/Setup.php index fa690b39e2f..3322d4dda84 100644 --- a/lib/Doctrine/ORM/Tools/Setup.php +++ b/lib/Doctrine/ORM/Tools/Setup.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/ToolEvents.php b/lib/Doctrine/ORM/Tools/ToolEvents.php index fe99f591883..8d04b4baedb 100644 --- a/lib/Doctrine/ORM/Tools/ToolEvents.php +++ b/lib/Doctrine/ORM/Tools/ToolEvents.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Tools/ToolsException.php b/lib/Doctrine/ORM/Tools/ToolsException.php index 6f92bef8523..79397dfdffb 100644 --- a/lib/Doctrine/ORM/Tools/ToolsException.php +++ b/lib/Doctrine/ORM/Tools/ToolsException.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/TransactionRequiredException.php b/lib/Doctrine/ORM/TransactionRequiredException.php index af87f60a90d..337840e2c9a 100644 --- a/lib/Doctrine/ORM/TransactionRequiredException.php +++ b/lib/Doctrine/ORM/TransactionRequiredException.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/UnexpectedResultException.php b/lib/Doctrine/ORM/UnexpectedResultException.php index 8fae011d14e..ded3b2ffd51 100644 --- a/lib/Doctrine/ORM/UnexpectedResultException.php +++ b/lib/Doctrine/ORM/UnexpectedResultException.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 3e0d9afb5d3..7ae1b7043a8 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php index 80990e74a5a..f659b82a27a 100644 --- a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php +++ b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Utility/PersisterHelper.php b/lib/Doctrine/ORM/Utility/PersisterHelper.php index 7d19ab71758..82065cc01c1 100644 --- a/lib/Doctrine/ORM/Utility/PersisterHelper.php +++ b/lib/Doctrine/ORM/Utility/PersisterHelper.php @@ -1,22 +1,5 @@ . - */ declare(strict_types=1); diff --git a/lib/Doctrine/ORM/Version.php b/lib/Doctrine/ORM/Version.php index 97d46870f07..b39a1b18868 100644 --- a/lib/Doctrine/ORM/Version.php +++ b/lib/Doctrine/ORM/Version.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); diff --git a/tests/Doctrine/Tests/ORM/Internal/HydrationCompleteHandlerTest.php b/tests/Doctrine/Tests/ORM/Internal/HydrationCompleteHandlerTest.php index df272726cfc..783a3d88f76 100644 --- a/tests/Doctrine/Tests/ORM/Internal/HydrationCompleteHandlerTest.php +++ b/tests/Doctrine/Tests/ORM/Internal/HydrationCompleteHandlerTest.php @@ -1,21 +1,4 @@ . - */ declare(strict_types=1); From 03bebbafe8ddc3af27356a498ddb33485279fbf6 Mon Sep 17 00:00:00 2001 From: mike Date: Thu, 3 Aug 2017 16:08:08 +0200 Subject: [PATCH 192/275] Remove another copyright header --- bin/doctrine-pear.php | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/bin/doctrine-pear.php b/bin/doctrine-pear.php index b7c6ba3dc2c..2eb6e9a8a01 100644 --- a/bin/doctrine-pear.php +++ b/bin/doctrine-pear.php @@ -1,21 +1,5 @@ . - */ + require_once 'Doctrine/Common/ClassLoader.php'; From 45d73e348fc20689221ae8279986c428b4265017 Mon Sep 17 00:00:00 2001 From: mike Date: Thu, 3 Aug 2017 16:11:26 +0200 Subject: [PATCH 193/275] Add missing strict type declaration --- bin/doctrine | 2 ++ bin/doctrine-pear.php | 2 ++ bin/doctrine.php | 2 ++ 3 files changed, 6 insertions(+) diff --git a/bin/doctrine b/bin/doctrine index c359ca7d83e..16c8477c5f0 100755 --- a/bin/doctrine +++ b/bin/doctrine @@ -1,4 +1,6 @@ #!/usr/bin/env php . */ +declare(strict_types=1); + require_once 'Doctrine/Common/ClassLoader.php'; $classLoader = new \Doctrine\Common\ClassLoader('Doctrine'); diff --git a/bin/doctrine.php b/bin/doctrine.php index 81d4e7bf279..c5e488300dc 100644 --- a/bin/doctrine.php +++ b/bin/doctrine.php @@ -17,6 +17,8 @@ * . */ +declare(strict_types=1); + use Symfony\Component\Console\Helper\HelperSet; use Doctrine\ORM\Tools\Console\ConsoleRunner; From ca42e9c130900e9df112db767091f82f137fd5e5 Mon Sep 17 00:00:00 2001 From: Usman Zafar Date: Thu, 3 Aug 2017 14:39:48 +0000 Subject: [PATCH 194/275] fixed the broken tests and updated the UPGRADE guide to notify about BC --- UPGRADE.md | 3 +++ tests/Doctrine/Tests/Mocks/EntityManagerMock.php | 9 +++++++-- tests/Doctrine/Tests/ORM/EntityManagerTest.php | 2 +- .../Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php | 2 ++ tests/Doctrine/Tests/ORM/QueryBuilderTest.php | 2 +- tests/Doctrine/Tests/OrmTestCase.php | 1 - 6 files changed, 14 insertions(+), 5 deletions(-) diff --git a/UPGRADE.md b/UPGRADE.md index 786302ca202..d7a73236806 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -2,6 +2,9 @@ ## BC Break: Removed `EntityManager#flush($entity)` and `EntityManager#flush($entities)` +Final keyword has been added to the ``EntityManager::class`` in order to ensure that EntityManager is not used as valid extension point. Valid extension point should be EntityManagerInterface. +## BC Break: Removed `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()`. diff --git a/tests/Doctrine/Tests/Mocks/EntityManagerMock.php b/tests/Doctrine/Tests/Mocks/EntityManagerMock.php index ce1eae1e03a..68ea5791c32 100644 --- a/tests/Doctrine/Tests/Mocks/EntityManagerMock.php +++ b/tests/Doctrine/Tests/Mocks/EntityManagerMock.php @@ -46,12 +46,17 @@ public function __construct(EntityManagerInterface $em) $this->em = $em; } + public function getEM() + { + return $this->em; + } + /** * {@inheritdoc} */ public function getUnitOfWork() { - return isset($this->uowMock) ? $this->uowMock : $this->em->getUnitOfWork(); + return $this->uowMock ?? $this->em->getUnitOfWork(); } /* Mock API */ @@ -83,7 +88,7 @@ public function setProxyFactory($proxyFactory) */ public function getProxyFactory() { - return isset($this->proxyFactoryMock) ? $this->proxyFactoryMock : $this->em->getProxyFactory(); + return $this->proxyFactoryMock ?? $this->em->getProxyFactory(); } /** diff --git a/tests/Doctrine/Tests/ORM/EntityManagerTest.php b/tests/Doctrine/Tests/ORM/EntityManagerTest.php index c89df1a33dc..927cf98e2d0 100644 --- a/tests/Doctrine/Tests/ORM/EntityManagerTest.php +++ b/tests/Doctrine/Tests/ORM/EntityManagerTest.php @@ -222,7 +222,7 @@ public function testTransactionalAcceptsVariousCallables() public function transactionalCallback($em) { - self::assertSame($this->em, $em); + self::assertSame($this->em->getEM(), $em); return 'callback'; } diff --git a/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php index 0508c57cd07..58b4b3083b9 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php @@ -1005,6 +1005,7 @@ public function testScalarQueryWithoutResultVariables($userEntityKey) */ public function testCreatesProxyForLazyLoadingWithForeignKeys() { + $this->markTestSkipped('Fix with StaticProxy Factory as ProxyFactory::class does not exist anymore'); $rsm = new ResultSetMapping; $rsm->addEntityResult(ECommerceProduct::class, 'p'); $rsm->addFieldResult('p', 'p__id', 'id'); @@ -1054,6 +1055,7 @@ public function testCreatesProxyForLazyLoadingWithForeignKeys() */ public function testCreatesProxyForLazyLoadingWithForeignKeysWithAliasedProductEntity() { + $this->markTestSkipped('Fix with StaticProxy Factory as ProxyFactory::class does not exist anymore'); $rsm = new ResultSetMapping; $rsm->addEntityResult(ECommerceProduct::class, 'p', 'product'); $rsm->addFieldResult('p', 'p__id', 'id'); diff --git a/tests/Doctrine/Tests/ORM/QueryBuilderTest.php b/tests/Doctrine/Tests/ORM/QueryBuilderTest.php index 743bcd8f211..6c9c119e580 100644 --- a/tests/Doctrine/Tests/ORM/QueryBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/QueryBuilderTest.php @@ -792,7 +792,7 @@ public function testMultipleIsolatedQueryConstruction() public function testGetEntityManager() { $qb = $this->em->createQueryBuilder(); - self::assertEquals($this->em, $qb->getEntityManager()); + self::assertEquals($this->em->getEM(), $qb->getEntityManager()); } public function testInitialStateIsClean() diff --git a/tests/Doctrine/Tests/OrmTestCase.php b/tests/Doctrine/Tests/OrmTestCase.php index 330dce51381..13e7b185f9c 100644 --- a/tests/Doctrine/Tests/OrmTestCase.php +++ b/tests/Doctrine/Tests/OrmTestCase.php @@ -106,7 +106,6 @@ protected function getTestEntityManager($conn = null, $conf = null, $eventManage ); if ($this->isSecondLevelCacheEnabled) { - $cacheConfig = new CacheConfiguration(); $cache = $this->getSharedSecondLevelCacheDriverImpl(); $factory = new DefaultCacheFactory($cacheConfig->getRegionsConfiguration(), $cache); From dcb5bdb7d58e2e1a0fbd7bb6ec976f1aceed039a Mon Sep 17 00:00:00 2001 From: Michael Moravec Date: Thu, 3 Aug 2017 00:57:27 +0200 Subject: [PATCH 195/275] Typehint EntityManagerInterface instead of EntityManager where possible --- UPGRADE.md | 4 ++++ lib/Doctrine/ORM/AbstractQuery.php | 2 +- lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php | 2 +- lib/Doctrine/ORM/EntityRepository.php | 8 ++++---- lib/Doctrine/ORM/Event/LifecycleEventArgs.php | 2 +- lib/Doctrine/ORM/Event/OnClearEventArgs.php | 2 +- lib/Doctrine/ORM/Event/OnFlushEventArgs.php | 2 +- lib/Doctrine/ORM/Event/PostFlushEventArgs.php | 4 ++-- lib/Doctrine/ORM/Event/PreFlushEventArgs.php | 4 ++-- lib/Doctrine/ORM/Query/FilterCollection.php | 2 +- lib/Doctrine/ORM/Query/Parser.php | 4 ++-- lib/Doctrine/ORM/Query/SqlWalker.php | 4 ++-- lib/Doctrine/ORM/QueryBuilder.php | 2 +- .../ORM/Sequencing/BigIntegerIdentityGenerator.php | 4 ++-- lib/Doctrine/ORM/Sequencing/Generator.php | 8 ++++---- lib/Doctrine/ORM/Sequencing/IdentityGenerator.php | 4 ++-- lib/Doctrine/ORM/Sequencing/SequenceGenerator.php | 4 ++-- lib/Doctrine/ORM/Sequencing/TableGenerator.php | 4 ++-- lib/Doctrine/ORM/Sequencing/UuidGenerator.php | 4 ++-- .../ORM/Tools/Console/Command/InfoCommand.php | 2 +- .../Console/Command/SchemaTool/AbstractCommand.php | 2 +- .../Tools/Pagination/LimitSubqueryOutputWalker.php | 2 +- .../Tests/EventListener/CacheMetadataListener.php | 8 ++++---- tests/Doctrine/Tests/Mocks/SequenceMock.php | 4 ++-- .../Tests/ORM/Cache/DefaultCacheFactoryTest.php | 2 +- .../Tests/ORM/Cache/DefaultEntityHydratorTest.php | 2 +- .../Tests/ORM/Cache/DefaultQueryCacheTest.php | 2 +- .../Collection/AbstractCollectionPersisterTest.php | 14 +++++++------- ...trictReadWriteCachedCollectionPersisterTest.php | 4 ++-- .../ReadOnlyCachedCollectionPersisterTest.php | 4 ++-- .../ReadWriteCachedCollectionPersisterTest.php | 4 ++-- .../Entity/AbstractEntityPersisterTest.php | 8 ++++---- ...NonStrictReadWriteCachedEntityPersisterTest.php | 4 ++-- .../Entity/ReadOnlyCachedEntityPersisterTest.php | 4 ++-- .../Entity/ReadWriteCachedEntityPersisterTest.php | 4 ++-- .../Tests/ORM/Functional/MergeProxiesTest.php | 3 ++- .../Tests/ORM/Functional/SQLFilterTest.php | 4 ++-- .../Tests/ORM/Functional/Ticket/DDC1509Test.php | 2 +- .../Tests/ORM/Functional/Ticket/DDC2359Test.php | 4 ++-- .../Tests/ORM/Functional/Ticket/GH5804Test.php | 4 ++-- .../Tests/ORM/Hydration/ResultSetMappingTest.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 6 +++--- .../Tests/ORM/Mapping/ClassMetadataFactoryTest.php | 5 ++--- ...cEntityPersisterCompositeTypeParametersTest.php | 2 +- .../BasicEntityPersisterCompositeTypeSqlTest.php | 2 +- .../BasicEntityPersisterTypeValueSqlTest.php | 2 +- .../Tests/ORM/Query/FilterCollectionTest.php | 2 +- tests/Doctrine/Tests/ORM/Query/QueryTest.php | 5 ++--- tests/Doctrine/Tests/ORM/QueryBuilderTest.php | 2 +- .../Tests/ORM/Sequencing/SequenceGeneratorTest.php | 4 ++-- .../Tools/AttachEntityListenersListenerTest.php | 2 +- .../ORM/Tools/ResolveTargetEntityListenerTest.php | 2 +- .../Tests/ORM/Tools/SchemaValidatorTest.php | 4 ++-- tests/Doctrine/Tests/OrmFunctionalTestCase.php | 5 +++-- tests/Doctrine/Tests/OrmTestCase.php | 2 +- 55 files changed, 104 insertions(+), 100 deletions(-) diff --git a/UPGRADE.md b/UPGRADE.md index 786302ca202..8c5304f352a 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -1,5 +1,9 @@ # Upgrade to 3.0 +## BC Break: ``EntityManagerInterface`` is now used instead of ``EntityManager`` in typehints + +`Sequencing\Generator#generate()` now takes ``EntityManagerInterface`` as its first argument instead of ``EntityManager``. If you have any custom generators, please update your code accordingly. + ## BC Break: Removed `EntityManager#flush($entity)` and `EntityManager#flush($entities)` If your code relies on single entity flushing optimisations via diff --git a/lib/Doctrine/ORM/AbstractQuery.php b/lib/Doctrine/ORM/AbstractQuery.php index ad79766d117..53b52d6885d 100644 --- a/lib/Doctrine/ORM/AbstractQuery.php +++ b/lib/Doctrine/ORM/AbstractQuery.php @@ -264,7 +264,7 @@ abstract public function getSQL(); /** * Retrieves the associated EntityManager of this Query instance. * - * @return \Doctrine\ORM\EntityManager + * @return \Doctrine\ORM\EntityManagerInterface */ public function getEntityManager() { diff --git a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php index c61a75e2b00..1c2b526c151 100644 --- a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php @@ -24,7 +24,7 @@ class DefaultEntityHydrator implements EntityHydrator { /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/lib/Doctrine/ORM/EntityRepository.php b/lib/Doctrine/ORM/EntityRepository.php index fde2ffdab56..30ddf8ea79d 100644 --- a/lib/Doctrine/ORM/EntityRepository.php +++ b/lib/Doctrine/ORM/EntityRepository.php @@ -31,7 +31,7 @@ class EntityRepository implements ObjectRepository, Selectable protected $entityName; /** - * @var EntityManager + * @var EntityManagerInterface */ protected $em; @@ -43,8 +43,8 @@ class EntityRepository implements ObjectRepository, Selectable /** * Initializes a new EntityRepository. * - * @param EntityManager $em The EntityManager to use. - * @param Mapping\ClassMetadata $class The class descriptor. + * @param EntityManagerInterface $em The EntityManager to use. + * @param Mapping\ClassMetadata $class The class descriptor. */ public function __construct(EntityManagerInterface $em, Mapping\ClassMetadata $class) { @@ -249,7 +249,7 @@ public function getClassName() } /** - * @return EntityManager + * @return EntityManagerInterface */ protected function getEntityManager() { diff --git a/lib/Doctrine/ORM/Event/LifecycleEventArgs.php b/lib/Doctrine/ORM/Event/LifecycleEventArgs.php index 85af3ab1e3a..e87e1d77d64 100644 --- a/lib/Doctrine/ORM/Event/LifecycleEventArgs.php +++ b/lib/Doctrine/ORM/Event/LifecycleEventArgs.php @@ -30,7 +30,7 @@ public function getEntity() /** * Retrieves associated EntityManager. * - * @return \Doctrine\ORM\EntityManager + * @return \Doctrine\ORM\EntityManagerInterface */ public function getEntityManager() { diff --git a/lib/Doctrine/ORM/Event/OnClearEventArgs.php b/lib/Doctrine/ORM/Event/OnClearEventArgs.php index 7b2d4496893..4137c81bdab 100644 --- a/lib/Doctrine/ORM/Event/OnClearEventArgs.php +++ b/lib/Doctrine/ORM/Event/OnClearEventArgs.php @@ -35,7 +35,7 @@ public function __construct(EntityManagerInterface $em) /** * Retrieves associated EntityManager. * - * @return \Doctrine\ORM\EntityManager + * @return \Doctrine\ORM\EntityManagerInterface */ public function getEntityManager() { diff --git a/lib/Doctrine/ORM/Event/OnFlushEventArgs.php b/lib/Doctrine/ORM/Event/OnFlushEventArgs.php index d572a98dd1d..a61a9c0a9c5 100644 --- a/lib/Doctrine/ORM/Event/OnFlushEventArgs.php +++ b/lib/Doctrine/ORM/Event/OnFlushEventArgs.php @@ -36,7 +36,7 @@ public function __construct(EntityManagerInterface $em) /** * Retrieve associated EntityManager. * - * @return \Doctrine\ORM\EntityManager + * @return \Doctrine\ORM\EntityManagerInterface */ public function getEntityManager() { diff --git a/lib/Doctrine/ORM/Event/PostFlushEventArgs.php b/lib/Doctrine/ORM/Event/PostFlushEventArgs.php index 3dc65e0588e..88165c687eb 100644 --- a/lib/Doctrine/ORM/Event/PostFlushEventArgs.php +++ b/lib/Doctrine/ORM/Event/PostFlushEventArgs.php @@ -17,7 +17,7 @@ class PostFlushEventArgs extends EventArgs { /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; @@ -34,7 +34,7 @@ public function __construct(EntityManagerInterface $em) /** * Retrieves associated EntityManager. * - * @return \Doctrine\ORM\EntityManager + * @return \Doctrine\ORM\EntityManagerInterface */ public function getEntityManager() { diff --git a/lib/Doctrine/ORM/Event/PreFlushEventArgs.php b/lib/Doctrine/ORM/Event/PreFlushEventArgs.php index 38c904cdbdb..cc1e1955805 100644 --- a/lib/Doctrine/ORM/Event/PreFlushEventArgs.php +++ b/lib/Doctrine/ORM/Event/PreFlushEventArgs.php @@ -19,7 +19,7 @@ class PreFlushEventArgs extends EventArgs { /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; @@ -34,7 +34,7 @@ public function __construct(EntityManagerInterface $em) } /** - * @return \Doctrine\ORM\EntityManager + * @return \Doctrine\ORM\EntityManagerInterface */ public function getEntityManager() { diff --git a/lib/Doctrine/ORM/Query/FilterCollection.php b/lib/Doctrine/ORM/Query/FilterCollection.php index 85812c0ec60..e72fb6cb8f5 100644 --- a/lib/Doctrine/ORM/Query/FilterCollection.php +++ b/lib/Doctrine/ORM/Query/FilterCollection.php @@ -35,7 +35,7 @@ class FilterCollection /** * The EntityManager that "owns" this FilterCollection instance. * - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/lib/Doctrine/ORM/Query/Parser.php b/lib/Doctrine/ORM/Query/Parser.php index 4778448e4e8..d75637fadb3 100644 --- a/lib/Doctrine/ORM/Query/Parser.php +++ b/lib/Doctrine/ORM/Query/Parser.php @@ -122,7 +122,7 @@ class Parser /** * The EntityManager. * - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; @@ -227,7 +227,7 @@ public function getParserResult() /** * Gets the EntityManager used by the parser. * - * @return \Doctrine\ORM\EntityManager + * @return \Doctrine\ORM\EntityManagerInterface */ public function getEntityManager() { diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 5188ec51099..94ab4a751c9 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -83,7 +83,7 @@ class SqlWalker implements TreeWalker private $parserResult; /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; @@ -196,7 +196,7 @@ public function getConnection() /** * Gets the EntityManager used by the walker. * - * @return \Doctrine\ORM\EntityManager + * @return \Doctrine\ORM\EntityManagerInterface */ public function getEntityManager() { diff --git a/lib/Doctrine/ORM/QueryBuilder.php b/lib/Doctrine/ORM/QueryBuilder.php index aca97b2510e..8b51c623d20 100644 --- a/lib/Doctrine/ORM/QueryBuilder.php +++ b/lib/Doctrine/ORM/QueryBuilder.php @@ -262,7 +262,7 @@ public function getType() /** * Gets the associated EntityManager for this query builder. * - * @return EntityManager + * @return EntityManagerInterface */ public function getEntityManager() { diff --git a/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php b/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php index 2116e0d5e08..c8d03c72cf8 100644 --- a/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/BigIntegerIdentityGenerator.php @@ -4,7 +4,7 @@ namespace Doctrine\ORM\Sequencing; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; /** * Id generator that obtains IDs from special "identity" columns. These are columns @@ -35,7 +35,7 @@ public function __construct($sequenceName = null) /** * {@inheritdoc} */ - public function generate(EntityManager $em, $entity) + public function generate(EntityManagerInterface $em, $entity) { return (string) $em->getConnection()->lastInsertId($this->sequenceName); } diff --git a/lib/Doctrine/ORM/Sequencing/Generator.php b/lib/Doctrine/ORM/Sequencing/Generator.php index 714be2b6d24..e29b60fc629 100644 --- a/lib/Doctrine/ORM/Sequencing/Generator.php +++ b/lib/Doctrine/ORM/Sequencing/Generator.php @@ -5,19 +5,19 @@ namespace Doctrine\ORM\Sequencing; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; interface Generator { /** * Generates an identifier for an entity. * - * @param EntityManager $em - * @param object $entity + * @param EntityManagerInterface $em + * @param object $entity * * @return \Generator */ - public function generate(EntityManager $em, $entity); + public function generate(EntityManagerInterface $em, $entity); /** * Gets whether this generator is a post-insert generator which means that diff --git a/lib/Doctrine/ORM/Sequencing/IdentityGenerator.php b/lib/Doctrine/ORM/Sequencing/IdentityGenerator.php index 1a08e154caf..e58a9937559 100644 --- a/lib/Doctrine/ORM/Sequencing/IdentityGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/IdentityGenerator.php @@ -4,7 +4,7 @@ namespace Doctrine\ORM\Sequencing; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; /** * Id generator that obtains IDs from special "identity" columns. These are columns @@ -35,7 +35,7 @@ public function __construct($sequenceName = null) /** * {@inheritDoc} */ - public function generate(EntityManager $em, $entity) + public function generate(EntityManagerInterface $em, $entity) { return (int) $em->getConnection()->lastInsertId($this->sequenceName); } diff --git a/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php b/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php index c1f045a4896..5a93ada9f34 100644 --- a/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/SequenceGenerator.php @@ -4,7 +4,7 @@ namespace Doctrine\ORM\Sequencing; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Serializable; /** @@ -54,7 +54,7 @@ public function __construct($sequenceName, $allocationSize) /** * {@inheritdoc} */ - public function generate(EntityManager $em, $entity) + public function generate(EntityManagerInterface $em, $entity) { if ($this->maxValue === null || $this->nextValue == $this->maxValue) { // Allocate new values diff --git a/lib/Doctrine/ORM/Sequencing/TableGenerator.php b/lib/Doctrine/ORM/Sequencing/TableGenerator.php index b5a79358fae..7fa509fd5d8 100644 --- a/lib/Doctrine/ORM/Sequencing/TableGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/TableGenerator.php @@ -4,7 +4,7 @@ namespace Doctrine\ORM\Sequencing; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; /** * Id generator that uses a single-row database table and a hi/lo algorithm. @@ -57,7 +57,7 @@ public function __construct($tableName, $sequenceName = 'default', $allocationSi /** * {@inheritdoc} */ - public function generate(EntityManager $em, $entity) + public function generate(EntityManagerInterface $em, $entity) { if ($this->maxValue === null || $this->nextValue === $this->maxValue) { // Allocate new values diff --git a/lib/Doctrine/ORM/Sequencing/UuidGenerator.php b/lib/Doctrine/ORM/Sequencing/UuidGenerator.php index 24c8e4a4170..0475cc3c119 100644 --- a/lib/Doctrine/ORM/Sequencing/UuidGenerator.php +++ b/lib/Doctrine/ORM/Sequencing/UuidGenerator.php @@ -4,7 +4,7 @@ namespace Doctrine\ORM\Sequencing; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; /** * Represents an ID generator that uses the database UUID expression @@ -17,7 +17,7 @@ class UuidGenerator implements Generator /** * {@inheritdoc} */ - public function generate(EntityManager $em, $entity) + public function generate(EntityManagerInterface $em, $entity) { $conn = $em->getConnection(); $sql = 'SELECT ' . $conn->getDatabasePlatform()->getGuidExpression(); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php index 4b241dc05dc..20bc31d5f40 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php @@ -39,7 +39,7 @@ protected function configure() */ protected function execute(InputInterface $input, OutputInterface $output) { - /* @var $entityManager \Doctrine\ORM\EntityManager */ + /* @var $entityManager \Doctrine\ORM\EntityManagerInterface */ $entityManager = $this->getHelper('em')->getEntityManager(); $entityClassNames = $entityManager->getConfiguration() diff --git a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/AbstractCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/AbstractCommand.php index f88003d3a1c..9ba97d05963 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/AbstractCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/AbstractCommand.php @@ -38,7 +38,7 @@ protected function execute(InputInterface $input, OutputInterface $output) { $emHelper = $this->getHelper('em'); - /* @var $em \Doctrine\ORM\EntityManager */ + /* @var $em \Doctrine\ORM\EntityManagerInterface */ $em = $emHelper->getEntityManager(); $metadatas = $em->getMetadataFactory()->getAllMetadata(); diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php index 2c68d21377d..768c92e1abc 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php @@ -59,7 +59,7 @@ class LimitSubqueryOutputWalker extends SqlWalker private $maxResults; /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php b/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php index 554bb105af8..864ef569858 100644 --- a/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php +++ b/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php @@ -5,7 +5,7 @@ namespace Doctrine\Tests\EventListener; use Doctrine\Common\Persistence\Event\LoadClassMetadataEventArgs; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\CacheMetadata; use Doctrine\ORM\Mapping\CacheUsage; use Doctrine\ORM\Mapping\ClassMetadata; @@ -57,10 +57,10 @@ private function recordVisit(ClassMetadata $metadata) } /** - * @param ClassMetadata $metadata - * @param EntityManager $em + * @param ClassMetadata $metadata + * @param EntityManagerInterface $em */ - protected function enableCaching(ClassMetadata $metadata, EntityManager $em) + protected function enableCaching(ClassMetadata $metadata, EntityManagerInterface $em) { if ($this->isVisited($metadata)) { return; // Already handled in the past diff --git a/tests/Doctrine/Tests/Mocks/SequenceMock.php b/tests/Doctrine/Tests/Mocks/SequenceMock.php index 486f3d785d9..d06ccdba337 100644 --- a/tests/Doctrine/Tests/Mocks/SequenceMock.php +++ b/tests/Doctrine/Tests/Mocks/SequenceMock.php @@ -4,7 +4,7 @@ namespace Doctrine\Tests\Mocks; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Sequencing\SequenceGenerator; /** @@ -20,7 +20,7 @@ class SequenceMock extends SequenceGenerator /** * {@inheritdoc} */ - public function generate(EntityManager $em, $entity) + public function generate(EntityManagerInterface $em, $entity) { return $this->sequenceNumber++; } diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php index 5d6c884bec3..63c0cd4419d 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultCacheFactoryTest.php @@ -41,7 +41,7 @@ class DefaultCacheFactoryTest extends OrmTestCase private $factory; /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php index 229c5d801e6..e5e96415295 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultEntityHydratorTest.php @@ -25,7 +25,7 @@ class DefaultEntityHydratorTest extends OrmTestCase private $structure; /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php b/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php index 0ad9e3bc86f..b2f9d4cc528 100644 --- a/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/DefaultQueryCacheTest.php @@ -36,7 +36,7 @@ class DefaultQueryCacheTest extends OrmTestCase private $queryCache; /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php index 532358b4eda..0d0ab0623fa 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/AbstractCollectionPersisterTest.php @@ -9,7 +9,7 @@ use Doctrine\ORM\Cache\Persister\Collection\AbstractCollectionPersister; use Doctrine\ORM\Cache\Persister\Collection\CachedCollectionPersister; use Doctrine\ORM\Cache\Region; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\Persisters\Collection\CollectionPersister; @@ -32,7 +32,7 @@ abstract class AbstractCollectionPersisterTest extends OrmTestCase protected $collectionPersister; /** - * @var EntityManager + * @var EntityManagerInterface */ protected $em; @@ -67,15 +67,15 @@ abstract class AbstractCollectionPersisterTest extends OrmTestCase ]; /** - * @param EntityManager $em - * @param CollectionPersister $persister - * @param Region $region - * @param AssociationMetadata $association + * @param EntityManagerInterface $em + * @param CollectionPersister $persister + * @param Region $region + * @param AssociationMetadata $association * * @return AbstractCollectionPersister */ abstract protected function createPersister( - EntityManager $em, + EntityManagerInterface $em, CollectionPersister $persister, Region $region, AssociationMetadata $association diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersisterTest.php index fa3dd96ec8c..11df2ee4842 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersisterTest.php @@ -5,7 +5,7 @@ namespace Doctrine\Tests\ORM\Cache\Persister\Collection; use Doctrine\ORM\Cache\Region; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Persisters\Collection\CollectionPersister; use Doctrine\ORM\Cache\Persister\Collection\NonStrictReadWriteCachedCollectionPersister; @@ -19,7 +19,7 @@ class NonStrictReadWriteCachedCollectionPersisterTest extends AbstractCollection * {@inheritdoc} */ protected function createPersister( - EntityManager $em, + EntityManagerInterface $em, CollectionPersister $persister, Region $region, AssociationMetadata $association diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersisterTest.php index bb82e126bd4..ef3b9671a11 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersisterTest.php @@ -5,7 +5,7 @@ namespace Doctrine\Tests\ORM\Cache\Persister\Collection; use Doctrine\ORM\Cache\Region; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Persisters\Collection\CollectionPersister; use Doctrine\ORM\Cache\Persister\Collection\ReadOnlyCachedCollectionPersister; @@ -19,7 +19,7 @@ class ReadOnlyCachedCollectionPersisterTest extends AbstractCollectionPersisterT * {@inheritdoc} */ protected function createPersister( - EntityManager $em, + EntityManagerInterface $em, CollectionPersister $persister, Region $region, AssociationMetadata $association diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersisterTest.php index 2941c5048b9..aa707ec96af 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersisterTest.php @@ -7,7 +7,7 @@ use Doctrine\ORM\Cache\ConcurrentRegion; use Doctrine\ORM\Cache\Lock; use Doctrine\ORM\Cache\Region; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\Tests\Models\Cache\State; use Doctrine\ORM\Cache\CollectionCacheKey; @@ -35,7 +35,7 @@ class ReadWriteCachedCollectionPersisterTest extends AbstractCollectionPersister * {@inheritdoc} */ protected function createPersister( - EntityManager $em, + EntityManagerInterface $em, CollectionPersister $persister, Region $region, AssociationMetadata $association diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php index ccc24c60d10..8d472a7f4a3 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/AbstractEntityPersisterTest.php @@ -9,7 +9,7 @@ use Doctrine\ORM\Cache\Persister\CachedPersister; use Doctrine\ORM\Cache\Persister\Entity\CachedEntityPersister; use Doctrine\ORM\Cache\Region; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; @@ -36,7 +36,7 @@ abstract class AbstractEntityPersisterTest extends OrmTestCase protected $entityPersister; /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ protected $em; @@ -88,14 +88,14 @@ abstract class AbstractEntityPersisterTest extends OrmTestCase ]; /** - * @param \Doctrine\ORM\EntityManager $em + * @param \Doctrine\ORM\EntityManagerInterface $em * @param \Doctrine\ORM\Persisters\Entity\EntityPersister $persister * @param \Doctrine\ORM\Cache\Region $region * @param \Doctrine\ORM\Mapping\ClassMetadata $metadata * * @return \Doctrine\ORM\Cache\Persister\Entity\AbstractEntityPersister */ - abstract protected function createPersister(EntityManager $em, EntityPersister $persister, Region $region, ClassMetadata $metadata); + abstract protected function createPersister(EntityManagerInterface $em, EntityPersister $persister, Region $region, ClassMetadata $metadata); protected function setUp() { diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersisterTest.php index 617992a7711..b86d802c963 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersisterTest.php @@ -8,7 +8,7 @@ use Doctrine\ORM\Cache\EntityCacheKey; use Doctrine\ORM\Cache\Persister\Entity\NonStrictReadWriteCachedEntityPersister; use Doctrine\ORM\Cache\Region; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Persisters\Entity\EntityPersister; use Doctrine\Tests\Models\Cache\Country; @@ -21,7 +21,7 @@ class NonStrictReadWriteCachedEntityPersisterTest extends AbstractEntityPersiste /** * {@inheritdoc} */ - protected function createPersister(EntityManager $em, EntityPersister $persister, Region $region, ClassMetadata $metadata) + protected function createPersister(EntityManagerInterface $em, EntityPersister $persister, Region $region, ClassMetadata $metadata) { return new NonStrictReadWriteCachedEntityPersister($persister, $region, $em, $metadata); } diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/ReadOnlyCachedEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/ReadOnlyCachedEntityPersisterTest.php index f8f8b3f2a61..f1fbc0541b4 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/ReadOnlyCachedEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/ReadOnlyCachedEntityPersisterTest.php @@ -5,7 +5,7 @@ namespace Doctrine\Tests\ORM\Cache\Persister\Entity; use Doctrine\ORM\Cache\Region; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\Tests\Models\Cache\Country; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Persisters\Entity\EntityPersister; @@ -19,7 +19,7 @@ class ReadOnlyCachedEntityPersisterTest extends AbstractEntityPersisterTest /** * {@inheritdoc} */ - protected function createPersister(EntityManager $em, EntityPersister $persister, Region $region, ClassMetadata $metadata) + protected function createPersister(EntityManagerInterface $em, EntityPersister $persister, Region $region, ClassMetadata $metadata) { return new ReadOnlyCachedEntityPersister($persister, $region, $em, $metadata); } diff --git a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersisterTest.php b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersisterTest.php index 89576fb6ba4..6e7f95bcac6 100644 --- a/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersisterTest.php +++ b/tests/Doctrine/Tests/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersisterTest.php @@ -6,9 +6,9 @@ use Doctrine\ORM\Cache\ConcurrentRegion; use Doctrine\ORM\Cache\Region; -use Doctrine\ORM\EntityManager; use Doctrine\ORM\Cache\Lock; use Doctrine\ORM\Cache\EntityCacheKey; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Tests\Models\Cache\Country; use Doctrine\ORM\Persisters\Entity\EntityPersister; @@ -34,7 +34,7 @@ class ReadWriteCachedEntityPersisterTest extends AbstractEntityPersisterTest /** * {@inheritdoc} */ - protected function createPersister(EntityManager $em, EntityPersister $persister, Region $region, ClassMetadata $metadata) + protected function createPersister(EntityManagerInterface $em, EntityPersister $persister, Region $region, ClassMetadata $metadata) { return new ReadWriteCachedEntityPersister($persister, $region, $em, $metadata); } diff --git a/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php b/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php index ebb002b38bb..5a467ac1aae 100644 --- a/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php @@ -9,6 +9,7 @@ use Doctrine\DBAL\Logging\SQLLogger; use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Proxy\Proxy; use Doctrine\ORM\Tools\SchemaTool; use Doctrine\Tests\Models\Generic\DateTimeModel; @@ -233,7 +234,7 @@ public function testMergingUnInitializedProxyDoesNotInitializeIt() /** * @param SQLLogger $logger * - * @return EntityManager + * @return EntityManagerInterface */ private function createEntityManager(SQLLogger $logger) { diff --git a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php index 86744562b23..2f1c7924302 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php @@ -8,7 +8,7 @@ use Doctrine\DBAL\Connection; use Doctrine\DBAL\Types\Type as DBALType; use Doctrine\ORM\Configuration; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Query\Filter\SQLFilter; @@ -201,7 +201,7 @@ protected function getMockConnection() protected function getMockEntityManager() { // Setup connection mock - $em = $this->getMockBuilder(EntityManager::class) + $em = $this->getMockBuilder(EntityManagerInterface::class) ->disableOriginalConstructor() ->getMock(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php index f552b689a21..0b743b2963c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php @@ -39,7 +39,7 @@ public function testFailingCase() $picture->setThumbnail($thumbnail); - /* @var $em \Doctrine\ORM\EntityManager */ + /* @var $em \Doctrine\ORM\EntityManagerInterface */ $em = $this->em; $em->persist($picture); $em->flush(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php index ade899db6d2..df1ba1e4e9a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php @@ -8,7 +8,7 @@ use Doctrine\DBAL\Connection; use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Configuration; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\Driver\MappingDriver; @@ -28,7 +28,7 @@ public function testIssue() { $mockDriver = $this->createMock(MappingDriver::class); $mockMetadata = $this->createMock(ClassMetadata::class); - $entityManager = $this->createMock(EntityManager::class); + $entityManager = $this->createMock(EntityManagerInterface::class); /* @var $metadataFactory \Doctrine\ORM\Mapping\ClassMetadataFactory|\PHPUnit_Framework_MockObject_MockObject */ $metadataFactory = $this->getMockBuilder(ClassMetadataFactory::class) diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5804Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5804Test.php index d88ce9dca9f..15b820785e9 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5804Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH5804Test.php @@ -5,7 +5,7 @@ use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Annotation as ORM; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Sequencing\Generator; use Doctrine\Tests\OrmFunctionalTestCase; @@ -47,7 +47,7 @@ final class GH5804Generator implements Generator /** * {@inheritdoc} */ - public function generate(EntityManager $em, $entity) + public function generate(EntityManagerInterface $em, $entity) { return 'test5804'; } diff --git a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php index f4a4f304d2a..bd33b71b4c8 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php @@ -24,7 +24,7 @@ class ResultSetMappingTest extends \Doctrine\Tests\OrmTestCase { /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 79f6d22b033..4821fb6ee99 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -6,7 +6,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Annotation as ORM; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Events; use Doctrine\ORM\Mapping; use Doctrine\ORM\Mapping\ClassMetadata; @@ -56,10 +56,10 @@ public function createClassMetadata($entityClassName) } /** - * @param \Doctrine\ORM\EntityManager $entityClassName + * @param \Doctrine\ORM\EntityManagerInterface $entityClassName * @return \Doctrine\ORM\Mapping\ClassMetadataFactory */ - protected function createClassMetadataFactory(EntityManager $em = null) + protected function createClassMetadataFactory(EntityManagerInterface $em = null) { $driver = $this->loadDriver(); $em = $em ?: $this->getTestEntityManager(); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 1294faa83a4..04ce04d409f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -8,7 +8,6 @@ use Doctrine\DBAL\Connection; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Configuration; -use Doctrine\ORM\EntityManager; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs; use Doctrine\ORM\Events; @@ -430,7 +429,7 @@ public function testAcceptsEntityManagerInterfaceInstances() { $classMetadataFactory = new ClassMetadataFactory(); - /* @var $entityManager EntityManager */ + /* @var EntityManagerInterface EntityManager */ $entityManager = $this->createMock(EntityManagerInterface::class); $classMetadataFactory->setEntityManager($entityManager); @@ -523,7 +522,7 @@ class CustomIdGenerator implements Generator /** * {@inheritdoc} */ - public function generate(EntityManager $em, $entity): \Generator + public function generate(EntityManagerInterface $em, $entity): \Generator { } diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php index b242f1664fd..a9d722aab7e 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeParametersTest.php @@ -20,7 +20,7 @@ class BasicEntityPersisterCompositeTypeParametersTest extends OrmTestCase protected $persister; /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ protected $em; diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php index d877d46a9b6..639d62c27f4 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterCompositeTypeSqlTest.php @@ -18,7 +18,7 @@ class BasicEntityPersisterCompositeTypeSqlTest extends OrmTestCase protected $persister; /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ protected $em; diff --git a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php index 8c7b8c7b1e1..567df8c983e 100644 --- a/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php +++ b/tests/Doctrine/Tests/ORM/Persisters/BasicEntityPersisterTypeValueSqlTest.php @@ -23,7 +23,7 @@ class BasicEntityPersisterTypeValueSqlTest extends OrmTestCase protected $persister; /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ protected $em; diff --git a/tests/Doctrine/Tests/ORM/Query/FilterCollectionTest.php b/tests/Doctrine/Tests/ORM/Query/FilterCollectionTest.php index d3b125b7c48..3c7f5deeb4b 100644 --- a/tests/Doctrine/Tests/ORM/Query/FilterCollectionTest.php +++ b/tests/Doctrine/Tests/ORM/Query/FilterCollectionTest.php @@ -16,7 +16,7 @@ class FilterCollectionTest extends OrmTestCase { /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/tests/Doctrine/Tests/ORM/Query/QueryTest.php b/tests/Doctrine/Tests/ORM/Query/QueryTest.php index b374045565b..35ba24dc673 100644 --- a/tests/Doctrine/Tests/ORM/Query/QueryTest.php +++ b/tests/Doctrine/Tests/ORM/Query/QueryTest.php @@ -6,8 +6,7 @@ use Doctrine\Common\Cache\ArrayCache; use Doctrine\Common\Collections\ArrayCollection; - -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Internal\Hydration\IterableResult; use Doctrine\ORM\Query\Parameter; use Doctrine\ORM\Query\QueryException; @@ -18,7 +17,7 @@ class QueryTest extends OrmTestCase { - /** @var EntityManager */ + /** @var EntityManagerInterface */ protected $em = null; protected function setUp() diff --git a/tests/Doctrine/Tests/ORM/QueryBuilderTest.php b/tests/Doctrine/Tests/ORM/QueryBuilderTest.php index 8f1043c989a..743bcd8f211 100644 --- a/tests/Doctrine/Tests/ORM/QueryBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/QueryBuilderTest.php @@ -28,7 +28,7 @@ class QueryBuilderTest extends OrmTestCase { /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/tests/Doctrine/Tests/ORM/Sequencing/SequenceGeneratorTest.php b/tests/Doctrine/Tests/ORM/Sequencing/SequenceGeneratorTest.php index 64fbf394016..67b8595b2e9 100644 --- a/tests/Doctrine/Tests/ORM/Sequencing/SequenceGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Sequencing/SequenceGeneratorTest.php @@ -4,7 +4,7 @@ namespace Doctrine\Tests\ORM\Sequencing; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Sequencing\SequenceGenerator; use Doctrine\Tests\Mocks\ConnectionMock; use Doctrine\Tests\Mocks\StatementArrayMock; @@ -13,7 +13,7 @@ class SequenceGeneratorTest extends OrmTestCase { /** - * @var EntityManager + * @var EntityManagerInterface */ private $entityManager; diff --git a/tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php b/tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php index dbe7a894227..0b11cf80508 100644 --- a/tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/AttachEntityListenersListenerTest.php @@ -13,7 +13,7 @@ class AttachEntityListenersListenerTest extends OrmTestCase { /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php index 455efa366f8..089342674fd 100644 --- a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php @@ -13,7 +13,7 @@ class ResolveTargetEntityListenerTest extends OrmTestCase { /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ private $em; diff --git a/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php b/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php index 3d1151f1b2e..3a6c57c2376 100644 --- a/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php @@ -5,14 +5,14 @@ namespace Doctrine\Tests\ORM\Tools; use Doctrine\ORM\Annotation as ORM; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Tools\SchemaValidator; use Doctrine\Tests\OrmTestCase; class SchemaValidatorTest extends OrmTestCase { /** - * @var EntityManager + * @var EntityManagerInterface */ private $em = null; diff --git a/tests/Doctrine/Tests/OrmFunctionalTestCase.php b/tests/Doctrine/Tests/OrmFunctionalTestCase.php index f1fb54e92fe..b19dff3ee3e 100644 --- a/tests/Doctrine/Tests/OrmFunctionalTestCase.php +++ b/tests/Doctrine/Tests/OrmFunctionalTestCase.php @@ -14,6 +14,7 @@ use Doctrine\ORM\Cache\Logging\StatisticsCacheLogger; use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Tools\DebugUnitOfWorkListener; use Doctrine\ORM\Tools\SchemaTool; use Doctrine\Tests\DbalTypes\Rot13Type; @@ -50,7 +51,7 @@ abstract class OrmFunctionalTestCase extends OrmTestCase protected static $sharedConn; /** - * @var \Doctrine\ORM\EntityManager + * @var \Doctrine\ORM\EntityManagerInterface */ protected $em; @@ -670,7 +671,7 @@ protected function setUp() /** * Gets an EntityManager for testing purposes. * - * @return EntityManager + * @return EntityManagerInterface * * @throws \Doctrine\ORM\ORMException */ diff --git a/tests/Doctrine/Tests/OrmTestCase.php b/tests/Doctrine/Tests/OrmTestCase.php index aa35283e597..330dce51381 100644 --- a/tests/Doctrine/Tests/OrmTestCase.php +++ b/tests/Doctrine/Tests/OrmTestCase.php @@ -84,7 +84,7 @@ protected function createAnnotationDriver($paths = []) * @param \Doctrine\Common\EventManager|null $eventManager * @param bool $withSharedMetadata * - * @return \Doctrine\ORM\EntityManager + * @return \Doctrine\ORM\EntityManagerInterface */ protected function getTestEntityManager($conn = null, $conf = null, $eventManager = null, $withSharedMetadata = true) { From 6f26e11319e65eadec984ad7cb58ea638b3f37a8 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 31 Jul 2017 23:57:09 -0400 Subject: [PATCH 196/275] More optimizations and preparation for ClassMetadataFactory replacement. Integration with ComponentMetadata started. --- lib/Doctrine/ORM/Cache/DefaultCache.php | 2 +- .../ORM/Cache/DefaultEntityHydrator.php | 4 +- .../Entity/AbstractEntityPersister.php | 2 +- .../OnClassMetadataNotFoundEventArgs.php | 45 +- .../Mapping/AbstractClassMetadataFactory.php | 66 ++- .../ORM/Mapping/AssociationMetadata.php | 72 +-- lib/Doctrine/ORM/Mapping/CacheMetadata.php | 18 +- lib/Doctrine/ORM/Mapping/CacheUsage.php | 8 + .../ORM/Mapping/ChangeTrackingPolicy.php | 8 + lib/Doctrine/ORM/Mapping/ClassMetadata.php | 504 +++++++----------- .../Mapping/ClassMetadataBuildingContext.php | 117 ++++ .../ORM/Mapping/ClassMetadataFactory.php | 96 ++-- lib/Doctrine/ORM/Mapping/ColumnMetadata.php | 58 +- .../ORM/Mapping/ComponentMetadata.php | 52 +- .../Mapping/DefaultEntityListenerResolver.php | 4 +- .../Mapping/DiscriminatorColumnMetadata.php | 8 + .../ORM/Mapping/Driver/AnnotationDriver.php | 6 +- .../ORM/Mapping/Driver/DatabaseDriver.php | 44 +- .../ORM/Mapping/Driver/DriverChain.php | 33 +- .../ORM/Mapping/Driver/MappingDriver.php | 12 +- .../Mapping/Driver/NewAnnotationDriver.php | 6 +- lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php | 10 +- .../ORM/Mapping/Driver/StaticPHPDriver.php | 15 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 6 +- .../ORM/Mapping/EmbeddedClassMetadata.php | 20 +- .../ORM/Mapping/EntityClassMetadata.php | 22 +- .../ORM/Mapping/EntityListenerResolver.php | 6 +- .../Exporter/ClassMetadataExporter.php | 2 +- lib/Doctrine/ORM/Mapping/FetchMode.php | 8 + lib/Doctrine/ORM/Mapping/FieldMetadata.php | 28 +- lib/Doctrine/ORM/Mapping/GeneratorType.php | 8 + lib/Doctrine/ORM/Mapping/InheritanceType.php | 8 + .../ORM/Mapping/JoinColumnMetadata.php | 30 +- .../ORM/Mapping/JoinTableMetadata.php | 18 +- .../ORM/Mapping/LocalColumnMetadata.php | 47 +- .../Mapping/ManyToManyAssociationMetadata.php | 12 +- .../Mapping/ManyToOneAssociationMetadata.php | 8 + .../ORM/Mapping/MappedSuperClassMetadata.php | 17 +- .../Mapping/OneToManyAssociationMetadata.php | 8 + .../Mapping/OneToOneAssociationMetadata.php | 8 + lib/Doctrine/ORM/Mapping/Property.php | 18 +- .../Mapping/ReflectionEmbeddedProperty.php | 2 +- .../ORM/Mapping/RootClassMetadata.php | 11 - lib/Doctrine/ORM/Mapping/SecondPass.php | 33 ++ lib/Doctrine/ORM/Mapping/SubClassMetadata.php | 11 - lib/Doctrine/ORM/Mapping/TableMetadata.php | 42 +- lib/Doctrine/ORM/Mapping/TableOwner.php | 2 +- .../ORM/Mapping/ToManyAssociationMetadata.php | 20 +- .../ORM/Mapping/ToOneAssociationMetadata.php | 14 +- .../ORM/Mapping/TransientMetadata.php | 24 +- .../ORM/Mapping/ValueGeneratorMetadata.php | 14 + .../ORM/Mapping/VersionFieldMetadata.php | 8 + .../Collection/ManyToManyPersister.php | 159 ++++-- .../Collection/OneToManyPersister.php | 30 +- .../Entity/BasicEntityPersister.php | 115 ++-- .../Entity/JoinedSubclassPersister.php | 92 ++-- .../Entity/SingleTablePersister.php | 18 +- .../ORM/Proxy/Factory/ProxyDefinition.php | 2 +- .../Query/Exec/MultiTableDeleteExecutor.php | 28 +- .../Query/Exec/MultiTableUpdateExecutor.php | 51 +- .../ORM/Query/ResultSetMappingBuilder.php | 173 +++--- lib/Doctrine/ORM/Query/SqlWalker.php | 75 ++- .../Command/MappingDescribeCommand.php | 61 ++- .../ORM/Tools/DebugUnitOfWorkListener.php | 2 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 8 +- .../ORM/Tools/Export/Driver/PhpExporter.php | 2 +- .../ORM/Tools/Export/Driver/XmlExporter.php | 4 +- .../ORM/Tools/ResolveTargetEntityListener.php | 2 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 24 +- lib/Doctrine/ORM/Tools/SchemaValidator.php | 2 +- lib/Doctrine/ORM/UnitOfWork.php | 86 ++- lib/Doctrine/ORM/Utility/PersisterHelper.php | 2 +- .../EventListener/CacheMetadataListener.php | 2 +- .../Tests/Mocks/MetadataDriverMock.php | 7 +- .../Tests/Models/DDC964/DDC964Admin.php | 6 +- .../Tests/ORM/CommitOrderCalculatorTest.php | 29 +- .../OnClassMetadataNotFoundEventArgsTest.php | 14 +- .../ORM/Functional/DatabaseDriverTest.php | 4 +- .../ORM/Functional/DatabaseDriverTestCase.php | 20 +- .../Tests/ORM/Functional/SQLFilterTest.php | 9 +- .../ORM/Functional/Ticket/DDC168Test.php | 8 +- .../ORM/Functional/Ticket/DDC2359Test.php | 4 +- .../ORM/Functional/Ticket/DDC3103Test.php | 10 +- .../ORM/Functional/Ticket/DDC599Test.php | 2 +- .../ORM/Hydration/ResultSetMappingTest.php | 18 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 44 +- .../ORM/Mapping/AnnotationDriverTest.php | 16 +- .../Mapping/BasicInheritanceMappingTest.php | 6 +- .../ORM/Mapping/ClassMetadataFactoryTest.php | 42 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 188 ++++--- .../ORM/Mapping/PHPMappingDriverTest.php | 5 +- .../ORM/Mapping/XmlMappingDriverTest.php | 11 +- .../Tests/ORM/Proxy/ProxyFactoryTest.php | 18 +- .../DefaultRepositoryFactoryTest.php | 18 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 40 +- .../Export/XmlClassMetadataExporterTest.php | 16 +- .../Tools/ResolveTargetEntityListenerTest.php | 2 +- tests/Doctrine/Tests/ORM/UnitOfWorkTest.php | 26 +- 98 files changed, 1919 insertions(+), 1227 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/ClassMetadataBuildingContext.php create mode 100644 lib/Doctrine/ORM/Mapping/SecondPass.php diff --git a/lib/Doctrine/ORM/Cache/DefaultCache.php b/lib/Doctrine/ORM/Cache/DefaultCache.php index 081ef615d31..0386651947b 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCache.php +++ b/lib/Doctrine/ORM/Cache/DefaultCache.php @@ -204,7 +204,7 @@ public function evictCollectionRegions() $metadatas = $this->em->getMetadataFactory()->getAllMetadata(); foreach ($metadatas as $metadata) { - foreach ($metadata->getProperties() as $association) { + foreach ($metadata->getDeclaredPropertiesIterator() as $association) { if (! $association instanceof ToManyAssociationMetadata) { continue; } diff --git a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php index 1c2b526c151..84108ecd942 100644 --- a/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php @@ -58,7 +58,7 @@ public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, $e $data = $this->uow->getOriginalEntityData($entity); $data = array_merge($data, $persister->getIdentifier($entity)); // why update has no identifier values ? - foreach ($metadata->getProperties() as $name => $association) { + foreach ($metadata->getDeclaredPropertiesIterator() as $name => $association) { if (! isset($data[$name]) || $association instanceof FieldMetadata) { continue; } @@ -159,7 +159,7 @@ public function loadCacheEntry( $hints[Query::HINT_REFRESH_ENTITY] = $entity; } - foreach ($metadata->getProperties() as $name => $association) { + foreach ($metadata->getDeclaredPropertiesIterator() as $name => $association) { if ($association instanceof FieldMetadata || ! isset($data[$name]) || ! $association->getCache()) { continue; } diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php index 9236b6a498b..eaf0153e881 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php @@ -236,7 +236,7 @@ private function storeJoinedAssociations($entity) if ($this->joinedAssociations === null) { $associations = []; - foreach ($this->class->getProperties() as $association) { + foreach ($this->class->getDeclaredPropertiesIterator() as $association) { if ($association instanceof ToOneAssociationMetadata && $association->getCache() && ($association->getFetchMode() === FetchMode::EAGER || ! $association->isOwningSide())) { diff --git a/lib/Doctrine/ORM/Event/OnClassMetadataNotFoundEventArgs.php b/lib/Doctrine/ORM/Event/OnClassMetadataNotFoundEventArgs.php index c8b63649a67..3aca26c9756 100644 --- a/lib/Doctrine/ORM/Event/OnClassMetadataNotFoundEventArgs.php +++ b/lib/Doctrine/ORM/Event/OnClassMetadataNotFoundEventArgs.php @@ -5,8 +5,9 @@ namespace Doctrine\ORM\Event; use Doctrine\Common\Persistence\Event\ManagerEventArgs; -use Doctrine\Common\Persistence\ObjectManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ClassMetadataBuildingContext; /** * Class that holds event arguments for a `onClassMetadataNotFound` event. @@ -14,8 +15,11 @@ * This object is mutable by design, allowing callbacks having access to it to set the * found metadata in it, and therefore "cancelling" a `onClassMetadataNotFound` event * + * @package Doctrine\ORM\Event + * @since 2.5 + * + * @author Guilherme Blanco * @author Marco Pivetta - * @since 2.5 */ class OnClassMetadataNotFoundEventArgs extends ManagerEventArgs { @@ -24,6 +28,11 @@ class OnClassMetadataNotFoundEventArgs extends ManagerEventArgs */ private $className; + /** + * @var ClassMetadataBuildingContext + */ + private $metadataBuildingContext; + /** * @var ClassMetadata|null */ @@ -32,20 +41,28 @@ class OnClassMetadataNotFoundEventArgs extends ManagerEventArgs /** * Constructor. * - * @param string $className - * @param ObjectManager $objectManager + * @param string $className + * @param ClassMetadataBuildingContext $metadataBuildingContext + * @param EntityManagerInterface $entityManager */ - public function __construct($className, ObjectManager $objectManager) + public function __construct( + string $className, + ClassMetadataBuildingContext $metadataBuildingContext, + EntityManagerInterface $entityManager + ) { - $this->className = (string) $className; + parent::__construct($entityManager); - parent::__construct($objectManager); + $this->className = $className; + $this->metadataBuildingContext = $metadataBuildingContext; } /** * @param ClassMetadata|null $classMetadata + * + * @return void */ - public function setFoundMetadata(ClassMetadata $classMetadata = null) + public function setFoundMetadata(?ClassMetadata $classMetadata) : void { $this->foundMetadata = $classMetadata; } @@ -53,7 +70,7 @@ public function setFoundMetadata(ClassMetadata $classMetadata = null) /** * @return ClassMetadata|null */ - public function getFoundMetadata() + public function getFoundMetadata() : ?ClassMetadata { return $this->foundMetadata; } @@ -63,9 +80,17 @@ public function getFoundMetadata() * * @return string */ - public function getClassName() + public function getClassName() : string { return $this->className; } + + /** + * @return ClassMetadataBuildingContext + */ + public function getClassMetadataBuildingContext() : ClassMetadataBuildingContext + { + return $this->metadataBuildingContext; + } } diff --git a/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php index cd77c0d31b3..320627a69f8 100644 --- a/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php @@ -194,7 +194,8 @@ public function getMetadataFor($className) return $this->loadedMetadata[$className] = $this->loadedMetadata[$realClassName]; } - $loadingException = null; + $metadataBuildingContext = $this->newClassMetadataBuildingContext(); + $loadingException = null; try { if ($this->cacheDriver) { @@ -205,7 +206,7 @@ public function getMetadataFor($className) $this->wakeupReflection($cached, $this->getReflectionService()); } else { - foreach ($this->loadMetadata($realClassName) as $loadedClassName) { + foreach ($this->loadMetadata($realClassName, $metadataBuildingContext) as $loadedClassName) { $this->cacheDriver->save( $loadedClassName . $this->cacheSalt, $this->loadedMetadata[$loadedClassName], @@ -214,10 +215,10 @@ public function getMetadataFor($className) } } } else { - $this->loadMetadata($realClassName); + $this->loadMetadata($realClassName, $metadataBuildingContext); } } catch (MappingException $loadingException) { - if (! $fallbackMetadataResponse = $this->onNotFoundMetadata($realClassName)) { + if (! $fallbackMetadataResponse = $this->onNotFoundMetadata($realClassName, $metadataBuildingContext)) { throw $loadingException; } @@ -229,6 +230,8 @@ public function getMetadataFor($className) $this->loadedMetadata[$className] = $this->loadedMetadata[$realClassName]; } + $metadataBuildingContext->validate(); + return $this->loadedMetadata[$className]; } @@ -290,11 +293,13 @@ protected function getParentClasses($name) * {@see Doctrine\Common\Persistence\Mapping\ReflectionService} interface * should be used for reflection. * - * @param string $name The name of the class for which the metadata should get loaded. + * @param string $name The name of the class for which the metadata should + * get loaded. + * @param ClassMetadataBuildingContext $metadataBuildingContext * * @return array */ - protected function loadMetadata($name) + protected function loadMetadata(string $name, ClassMetadataBuildingContext $metadataBuildingContext) { if ( ! $this->initialized) { $this->initialize(); @@ -308,7 +313,6 @@ protected function loadMetadata($name) // Move down the hierarchy of parent classes, starting from the topmost class $parent = null; $rootEntityFound = false; - $visited = []; $reflService = $this->getReflectionService(); foreach ($parentClasses as $className) { @@ -317,16 +321,19 @@ protected function loadMetadata($name) if ($this->isEntity($parent)) { $rootEntityFound = true; - array_unshift($visited, $className); } continue; } - $class = $this->newClassMetadataInstance($className); + $class = $this->newClassMetadataInstance($className, $metadataBuildingContext); + + if ($parent) { + $class->setParent($parent); + } $this->initializeReflection($class, $reflService); - $this->doLoadMetadata($class, $parent, $rootEntityFound, $visited); + $this->doLoadMetadata($class, $metadataBuildingContext, $rootEntityFound); $this->loadedMetadata[$className] = $class; @@ -334,8 +341,6 @@ protected function loadMetadata($name) if ($this->isEntity($class)) { $rootEntityFound = true; - - array_unshift($visited, $className); } $this->wakeupReflection($class, $reflService); @@ -351,11 +356,12 @@ protected function loadMetadata($name) * * Override this method to implement a fallback strategy for failed metadata loading * - * @param string $className + * @param string $className + * @param ClassMetadataBuildingContext $metadataBuildingContext * * @return \Doctrine\ORM\Mapping\ClassMetadata|null */ - protected function onNotFoundMetadata($className) + protected function onNotFoundMetadata($className, ClassMetadataBuildingContext $metadataBuildingContext) { return null; } @@ -363,34 +369,42 @@ protected function onNotFoundMetadata($className) /** * Actually loads the metadata from the underlying metadata. * - * @param ClassMetadata $class - * @param ClassMetadata|null $parent - * @param bool $rootEntityFound - * @param array $nonSuperclassParents All parent class names - * that are not marked as mapped superclasses. + * @param ClassMetadata $class + * @param ClassMetadataBuildingContext $metadataBuildingContext + * @param bool $rootEntityFound * * @return void */ abstract protected function doLoadMetadata( ClassMetadata $class, - ClassMetadata $parent = null, - bool $rootEntityFound, - array $nonSuperclassParents - ); + ClassMetadataBuildingContext $metadataBuildingContext, + bool $rootEntityFound + ) : void; /** * Creates a new ClassMetadata instance for the given class name. * - * @param string $className + * @param string $className + * @param ClassMetadataBuildingContext $metadataBuildingContext * * @return ClassMetadata */ - abstract protected function newClassMetadataInstance($className); + abstract protected function newClassMetadataInstance( + string $className, + ClassMetadataBuildingContext $metadataBuildingContext + ) : ClassMetadata; + + /** + * Creates a new ClassMetadataBuildingContext instance. + * + * @return ClassMetadataBuildingContext + */ + abstract protected function newClassMetadataBuildingContext() : ClassMetadataBuildingContext; /** * {@inheritDoc} */ - public function isTransient($class) + public function isTransient($class) : bool { if ( ! $this->initialized) { $this->initialize(); diff --git a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php index 8b5e856eda8..07a7e1ee4b9 100644 --- a/lib/Doctrine/ORM/Mapping/AssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/AssociationMetadata.php @@ -7,6 +7,14 @@ use Doctrine\ORM\Reflection\ReflectionService; +/** + * Class AssociationMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ class AssociationMetadata implements Property { /** @var ClassMetadata */ @@ -30,7 +38,7 @@ class AssociationMetadata implements Property /** @var string */ private $sourceEntity; - /** @var string */ + /** @var null|string */ private $mappedBy; /** @var null|string */ @@ -61,15 +69,15 @@ public function __construct(string $name) /** * {@inheritdoc} */ - public function getDeclaringClass() + public function getDeclaringClass() : ComponentMetadata { return $this->declaringClass; } /** - * @param ClassMetadata $declaringClass + * @param ComponentMetadata $declaringClass */ - public function setDeclaringClass(ClassMetadata $declaringClass) + public function setDeclaringClass(ComponentMetadata $declaringClass) : void { $this->declaringClass = $declaringClass; } @@ -77,7 +85,7 @@ public function setDeclaringClass(ClassMetadata $declaringClass) /** * {@inheritdoc} */ - public function getName() + public function getName() : string { return $this->name; } @@ -85,7 +93,7 @@ public function getName() /** * {@inheritdoc} */ - public function setName($name) + public function setName($name) : void { $this->name = $name; } @@ -93,7 +101,7 @@ public function setName($name) /** * @param bool $isPrimaryKey */ - public function setPrimaryKey(bool $isPrimaryKey) + public function setPrimaryKey(bool $isPrimaryKey) : void { $this->primaryKey = $isPrimaryKey; } @@ -101,7 +109,7 @@ public function setPrimaryKey(bool $isPrimaryKey) /** * @return bool */ - public function isPrimaryKey() + public function isPrimaryKey() : bool { return $this->primaryKey; } @@ -109,7 +117,7 @@ public function isPrimaryKey() /** * @return string */ - public function getTargetEntity() + public function getTargetEntity() : string { return $this->targetEntity; } @@ -117,7 +125,7 @@ public function getTargetEntity() /** * @param string $targetEntity */ - public function setTargetEntity(string $targetEntity) + public function setTargetEntity(string $targetEntity) : void { $this->targetEntity = $targetEntity; } @@ -125,7 +133,7 @@ public function setTargetEntity(string $targetEntity) /** * @return string */ - public function getSourceEntity() + public function getSourceEntity() : string { return $this->sourceEntity; } @@ -133,7 +141,7 @@ public function getSourceEntity() /** * @param string $sourceEntity */ - public function setSourceEntity(string $sourceEntity) + public function setSourceEntity(string $sourceEntity) : void { $this->sourceEntity = $sourceEntity; } @@ -141,7 +149,7 @@ public function setSourceEntity(string $sourceEntity) /** * @return array */ - public function getCascade() + public function getCascade() : array { return $this->cascade; } @@ -149,7 +157,7 @@ public function getCascade() /** * @param array $cascade */ - public function setCascade(array $cascade) + public function setCascade(array $cascade) : void { $this->cascade = $cascade; } @@ -157,7 +165,7 @@ public function setCascade(array $cascade) /** * @param bool $owningSide */ - public function setOwningSide(bool $owningSide) + public function setOwningSide(bool $owningSide) : void { $this->owningSide = $owningSide; } @@ -165,7 +173,7 @@ public function setOwningSide(bool $owningSide) /** * @return bool */ - public function isOwningSide() + public function isOwningSide() : bool { return $this->owningSide; } @@ -173,7 +181,7 @@ public function isOwningSide() /** * @return string */ - public function getFetchMode() + public function getFetchMode() : string { return $this->fetchMode; } @@ -181,15 +189,15 @@ public function getFetchMode() /** * @param string $fetchMode */ - public function setFetchMode(string $fetchMode) + public function setFetchMode(string $fetchMode) : void { $this->fetchMode = $fetchMode; } /** - * @return string + * @return string|null */ - public function getMappedBy() + public function getMappedBy() : ?string { return $this->mappedBy; } @@ -197,7 +205,7 @@ public function getMappedBy() /** * @param string $mappedBy */ - public function setMappedBy(string $mappedBy) + public function setMappedBy(string $mappedBy) : void { $this->mappedBy = $mappedBy; } @@ -205,7 +213,7 @@ public function setMappedBy(string $mappedBy) /** * @return null|string */ - public function getInversedBy() + public function getInversedBy() : ?string { return $this->inversedBy; } @@ -213,7 +221,7 @@ public function getInversedBy() /** * @param null|string $inversedBy */ - public function setInversedBy(string $inversedBy = null) + public function setInversedBy(string $inversedBy = null) : void { $this->inversedBy = $inversedBy; } @@ -221,7 +229,7 @@ public function setInversedBy(string $inversedBy = null) /** * @param bool $orphanRemoval */ - public function setOrphanRemoval(bool $orphanRemoval) + public function setOrphanRemoval(bool $orphanRemoval) : void { $this->orphanRemoval = $orphanRemoval; } @@ -229,7 +237,7 @@ public function setOrphanRemoval(bool $orphanRemoval) /** * @return bool */ - public function isOrphanRemoval() + public function isOrphanRemoval() : bool { return $this->orphanRemoval; } @@ -237,7 +245,7 @@ public function isOrphanRemoval() /** * @return null|CacheMetadata */ - public function getCache() + public function getCache() : ?CacheMetadata { return $this->cache; } @@ -245,7 +253,7 @@ public function getCache() /** * @param null|CacheMetadata $cache */ - public function setCache(CacheMetadata $cache = null) + public function setCache(CacheMetadata $cache = null) : void { $this->cache = $cache; } @@ -253,7 +261,7 @@ public function setCache(CacheMetadata $cache = null) /** * {@inheritdoc} */ - public function setValue($object, $value) + public function setValue($object, $value) : void { $this->reflection->setValue($object, $value); } @@ -269,7 +277,7 @@ public function getValue($object) /** * {@inheritdoc} */ - public function isAssociation() + public function isAssociation() : bool { return true; } @@ -277,7 +285,7 @@ public function isAssociation() /** * {@inheritdoc} */ - public function isField() + public function isField() : bool { return false; } @@ -285,7 +293,7 @@ public function isField() /** * {@inheritdoc} */ - public function setReflectionProperty(\ReflectionProperty $reflectionProperty) + public function setReflectionProperty(\ReflectionProperty $reflectionProperty) : void { $this->reflection = $reflectionProperty; } @@ -293,7 +301,7 @@ public function setReflectionProperty(\ReflectionProperty $reflectionProperty) /** * {@inheritdoc} */ - public function wakeupReflection(ReflectionService $reflectionService) + public function wakeupReflection(ReflectionService $reflectionService) : void { $this->setReflectionProperty( $reflectionService->getAccessibleProperty($this->declaringClass->getClassName(), $this->name) diff --git a/lib/Doctrine/ORM/Mapping/CacheMetadata.php b/lib/Doctrine/ORM/Mapping/CacheMetadata.php index 0621bdfcef0..2df50a352bf 100644 --- a/lib/Doctrine/ORM/Mapping/CacheMetadata.php +++ b/lib/Doctrine/ORM/Mapping/CacheMetadata.php @@ -5,17 +5,25 @@ namespace Doctrine\ORM\Mapping; +/** + * Class CacheMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ class CacheMetadata { /** @var string */ private $usage; - + /** @var string */ private $region; - + /** * Constructor. - * + * * @param string $usage * @param string $region */ @@ -28,7 +36,7 @@ public function __construct(string $usage, string $region) /** * @return string */ - public function getUsage() + public function getUsage() : string { return $this->usage; } @@ -36,7 +44,7 @@ public function getUsage() /** * @return string */ - public function getRegion() + public function getRegion() : string { return $this->region; } diff --git a/lib/Doctrine/ORM/Mapping/CacheUsage.php b/lib/Doctrine/ORM/Mapping/CacheUsage.php index 02bfecfa283..f75f52ee8db 100644 --- a/lib/Doctrine/ORM/Mapping/CacheUsage.php +++ b/lib/Doctrine/ORM/Mapping/CacheUsage.php @@ -5,6 +5,14 @@ namespace Doctrine\ORM\Mapping; +/** + * Class CacheUsage + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ final class CacheUsage { /** diff --git a/lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php b/lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php index d6c5a9fd8d8..fa36eb18d0c 100644 --- a/lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php +++ b/lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php @@ -5,6 +5,14 @@ namespace Doctrine\ORM\Mapping; +/** + * Class ChangeTrackingPolicy + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ final class ChangeTrackingPolicy { /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index ba197a38fdd..11ce17b27eb 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -7,8 +7,8 @@ use Doctrine\ORM\Cache\CacheException; use Doctrine\ORM\EntityManagerInterface; -use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; use Doctrine\ORM\Mapping\Factory\NamingStrategy; +use Doctrine\ORM\Reflection\ReflectionService; use Doctrine\ORM\Sequencing\Planning\ValueGenerationPlan; use Doctrine\ORM\Utility\PersisterHelper; @@ -16,51 +16,13 @@ * A ClassMetadata instance holds all the object-relational mapping metadata * of an entity and its associations. * - * Once populated, ClassMetadata instances are usually cached in a serialized form. - * - * IMPORTANT NOTE: - * - * The fields of this class are only public for 2 reasons: - * 1) To allow fast READ access. - * 2) To drastically reduce the size of a serialized instance (private/protected members - * get the whole class name, namespace inclusive, prepended to every property in - * the serialized representation). - * * @author Roman Borschel * @author Jonathan H. Wage * @author Guilherme Blanco * @since 2.0 */ -class ClassMetadata implements TableOwner +class ClassMetadata extends ComponentMetadata implements TableOwner { - /** - * READ-ONLY: The name of the entity class. - * - * @var string - */ - protected $name; - - /** - * READ-ONLY: The name of the entity class that is at the root of the mapped entity inheritance - * hierarchy. If the entity is not part of a mapped inheritance hierarchy this is the same - * as {@link $name}. - * - * @var string - */ - protected $rootEntityName; - - /** - * @var CacheMetadata|null - */ - protected $cache = null; - - /** - * The ReflectionClass instance of the component class. - * - * @var \ReflectionClass|null - */ - protected $reflectionClass; - /** * The name of the custom repository class used for the entity class. * (Optional). @@ -94,13 +56,6 @@ class ClassMetadata implements TableOwner */ private $readOnly = false; - /** - * The names of the parent classes (ancestors). - * - * @var array - */ - protected $parentClasses = []; - /** * The names of all subclasses (descendants). * @@ -158,7 +113,7 @@ class ClassMetadata implements TableOwner /** * READ-ONLY: The registered lifecycle callbacks for entities of this class. * - * @var array + * @var array> */ public $lifecycleCallbacks = []; @@ -238,24 +193,17 @@ class ClassMetadata implements TableOwner */ public $fieldNames = []; - /** - * READ-ONLY: The property mappings of this class. - * - * @var array - */ - protected $properties = []; - /** * READ-ONLY: The field which is used for versioning in optimistic locking (if any). * * @var FieldMetadata|null */ - public $versionProperty = null; + public $versionProperty; /** * NamingStrategy determining the default column and table names. * - * @var \Doctrine\ORM\Mapping\Factory\NamingStrategy + * @var NamingStrategy */ protected $namingStrategy; @@ -270,14 +218,17 @@ class ClassMetadata implements TableOwner * Initializes a new ClassMetadata instance that will hold the object-relational mapping * metadata of the class with the given name. * - * @param string $entityName The name of the entity class the new instance is used for. - * @param NamingStrategy|null $namingStrategy + * @param string $entityName The name of the entity class. + * @param ClassMetadataBuildingContext $metadataBuildingContext */ - public function __construct($entityName, NamingStrategy $namingStrategy = null) + public function __construct( + string $entityName, + ClassMetadataBuildingContext $metadataBuildingContext + ) { - $this->name = $entityName; - $this->rootEntityName = $entityName; - $this->namingStrategy = $namingStrategy ?: new DefaultNamingStrategy(); + parent::__construct($entityName); + + $this->namingStrategy = $metadataBuildingContext->getNamingStrategy(); $this->setTable(new TableMetadata()); } @@ -289,49 +240,51 @@ public function __construct($entityName, NamingStrategy $namingStrategy = null) */ public function setClassName(string $className) { - $this->name = $className; + $this->className = $className; } /** - * @return string + * @return \ArrayIterator */ - public function getClassName() : string + public function getColumnsIterator() : \ArrayIterator { - return $this->name; - } + $iterator = parent::getColumnsIterator(); - /** - * @return string - */ - public function getRootClassName() : string - { - return $this->rootEntityName; - } + if ($this->discriminatorColumn) { + $iterator->offsetSet($this->discriminatorColumn->getColumnName(), $this->discriminatorColumn); + } - /** - * @param CacheMetadata|null $cache - * - * @return void - */ - public function setCache(?CacheMetadata $cache = null) - { - $this->cache = $cache; + return $iterator; } /** - * @return CacheMetadata|null + * @return \ArrayIterator */ - public function getCache(): ?CacheMetadata + public function getAncestorsIterator() : \ArrayIterator { - return $this->cache; + $ancestors = new \ArrayIterator(); + $parent = $this; + + while (($parent = $parent->parent) !== null) { + if ($parent instanceof ClassMetadata && $parent->isMappedSuperclass) { + continue; + } + + $ancestors->append($parent); + } + + return $ancestors; } /** - * @return \ReflectionClass|null + * @return string */ - public function getReflectionClass() : ?\ReflectionClass + public function getRootClassName() : string { - return $this->reflectionClass; + return ($this->parent instanceof ClassMetadata && ! $this->parent->isMappedSuperclass) + ? $this->parent->getRootClassName() + : $this->className + ; } /** @@ -343,8 +296,8 @@ public function __clone() $this->cache = clone $this->cache; } - foreach ($this->properties as $name => $property) { - $this->properties[$name] = clone $property; + foreach ($this->declaredProperties as $name => $property) { + $this->declaredProperties[$name] = clone $property; } } @@ -378,18 +331,18 @@ public function __sleep() // This metadata is always serialized/cached. $serialized = array_merge($serialized, [ - 'properties', + 'declaredProperties', 'fieldNames', //'embeddedClasses', 'identifier', - 'name', + 'className', + 'parent', 'table', - 'rootEntityName', 'valueGenerationPlan', ]); // The rest of the metadata is only serialized if necessary. - if ($this->changeTrackingPolicy != ChangeTrackingPolicy::DEFERRED_IMPLICIT) { + if ($this->changeTrackingPolicy !== ChangeTrackingPolicy::DEFERRED_IMPLICIT) { $serialized[] = 'changeTrackingPolicy'; } @@ -397,12 +350,11 @@ public function __sleep() $serialized[] = 'customRepositoryClassName'; } - if ($this->inheritanceType != InheritanceType::NONE) { + if ($this->inheritanceType !== InheritanceType::NONE) { $serialized[] = 'inheritanceType'; $serialized[] = 'discriminatorColumn'; $serialized[] = 'discriminatorValue'; $serialized[] = 'discriminatorMap'; - $serialized[] = 'parentClasses'; $serialized[] = 'subClasses'; } @@ -452,22 +404,22 @@ public function __sleep() /** * Restores some state that can not be serialized/unserialized. * - * @param \Doctrine\ORM\Reflection\ReflectionService $reflService + * @param ReflectionService $reflService * * @return void */ - public function wakeupReflection($reflService) + public function wakeupReflection(ReflectionService $reflService) : void { // Restore ReflectionClass and properties - $this->reflectionClass = $reflService->getClass($this->name); + $this->reflectionClass = $reflService->getClass($this->className); if (! $this->reflectionClass) { return; } - $parentReflFields = []; + /*$parentReflFields = []; - /*foreach ($this->embeddedClasses as $property => $embeddedClass) { + foreach ($this->embeddedClasses as $property => $embeddedClass) { if (isset($embeddedClass['declaredField'])) { $parentReflFields[$property] = new ReflectionEmbeddedProperty( $parentReflFields[$embeddedClass['declaredField']], @@ -490,7 +442,9 @@ public function wakeupReflection($reflService) $parentReflFields[$property] = $fieldRefl; }*/ - foreach ($this->properties as $field => $property) { + foreach ($this->declaredProperties as $field => $property) { + /** @var Property $property */ + /*if (isset($mapping['declaredField']) && isset($parentReflFields[$mapping['declaredField']])) { // @todo guilhermeblanco Handle reflection initialization once embeddables are back. $this->reflection[$field] = new ReflectionEmbeddedProperty( @@ -509,16 +463,18 @@ public function wakeupReflection($reflService) * Initializes a new ClassMetadata instance that will hold the object-relational mapping * metadata of the class with the given name. * - * @param \Doctrine\Common\Persistence\Mapping\ReflectionService $reflService The reflection service. + * @param ReflectionService $reflService The reflection service. * * @return void */ - public function initializeReflection($reflService) + public function initializeReflection(ReflectionService $reflService) : void { - $this->reflectionClass = $reflService->getClass($this->name); + $entityReflClass = $reflService->getClass($this->className); - if ($this->reflectionClass) { - $this->name = $this->rootEntityName = $this->reflectionClass->getName(); + $this->reflectionClass = $entityReflClass; + + if ($entityReflClass) { + $this->className = $this->reflectionClass->getName(); } } @@ -529,7 +485,7 @@ public function initializeReflection($reflService) * * @throws MappingException */ - public function validateIdentifier() + public function validateIdentifier() : void { if ($this->isMappedSuperclass || $this->isEmbeddedClass) { return; @@ -537,17 +493,17 @@ public function validateIdentifier() // Verify & complete identifier mapping if (! $this->identifier) { - throw MappingException::identifierRequired($this->name); + throw MappingException::identifierRequired($this->className); } - $explicitlyGeneratedProperties = array_filter($this->properties, function (Property $property) : bool { + $explicitlyGeneratedProperties = array_filter($this->declaredProperties, function (Property $property) : bool { return $property instanceof FieldMetadata && $property->isPrimaryKey() && $property->hasValueGenerator(); }); if ($this->isIdentifierComposite() && count($explicitlyGeneratedProperties) !== 0) { - throw MappingException::compositeKeyAssignedIdGeneratorRequired($this->name); + throw MappingException::compositeKeyAssignedIdGeneratorRequired($this->className); } } @@ -558,7 +514,7 @@ public function validateIdentifier() * * @throws MappingException */ - public function validateAssociations() + public function validateAssociations() : void { array_map( function (Property $property) { @@ -568,29 +524,30 @@ function (Property $property) { $targetEntity = $property->getTargetEntity(); - if ( ! class_exists($targetEntity, true)) { - throw MappingException::invalidTargetEntityClass($targetEntity, $this->name, $property->getName()); + if (! class_exists($targetEntity)) { + throw MappingException::invalidTargetEntityClass($targetEntity, $this->className, $property->getName()); } }, - $this->properties + $this->declaredProperties ); } /** * Validates lifecycle callbacks. * - * @param \Doctrine\Common\Persistence\Mapping\ReflectionService $reflService + * @param ReflectionService $reflService * * @return void * * @throws MappingException */ - public function validateLifecycleCallbacks($reflService) + public function validateLifecycleCallbacks(ReflectionService $reflService) : void { foreach ($this->lifecycleCallbacks as $callbacks) { + /** @var array $callbacks */ foreach ($callbacks as $callbackFuncName) { - if ( ! $reflService->hasPublicMethod($this->name, $callbackFuncName)) { - throw MappingException::lifecycleCallbackMethodNotFound($this->name, $callbackFuncName); + if (! $reflService->hasPublicMethod($this->className, $callbackFuncName)) { + throw MappingException::lifecycleCallbackMethodNotFound($this->className, $callbackFuncName); } } } @@ -599,11 +556,11 @@ public function validateLifecycleCallbacks($reflService) /** * Sets the change tracking policy used by this class. * - * @param integer $policy + * @param string $policy * * @return void */ - public function setChangeTrackingPolicy($policy) + public function setChangeTrackingPolicy(string $policy) : void { $this->changeTrackingPolicy = $policy; } @@ -613,10 +570,9 @@ public function setChangeTrackingPolicy($policy) * * @param string $fieldName The field name. * - * @return boolean TRUE if the field is part of the table identifier/primary key field(s), - * FALSE otherwise. + * @return bool TRUE if the field is part of the table identifier/primary key field(s), FALSE otherwise. */ - public function isIdentifier($fieldName) + public function isIdentifier(string $fieldName) : bool { if (! $this->identifier) { return false; @@ -632,7 +588,7 @@ public function isIdentifier($fieldName) /** * @return bool */ - public function isIdentifierComposite() + public function isIdentifierComposite() : bool { return count($this->identifier) > 1; } @@ -648,10 +604,10 @@ public function isIdentifierComposite() * * @throws MappingException */ - public function getNamedQuery($queryName) + public function getNamedQuery($queryName) : string { if (! isset($this->namedQueries[$queryName])) { - throw MappingException::queryNotFound($this->name, $queryName); + throw MappingException::queryNotFound($this->className, $queryName); } return $this->namedQueries[$queryName]; @@ -662,7 +618,7 @@ public function getNamedQuery($queryName) * * @return array */ - public function getNamedQueries() + public function getNamedQueries() : array { return $this->namedQueries; } @@ -678,10 +634,10 @@ public function getNamedQueries() * * @throws MappingException */ - public function getNamedNativeQuery($queryName) + public function getNamedNativeQuery($queryName) : array { if ( ! isset($this->namedNativeQueries[$queryName])) { - throw MappingException::queryNotFound($this->name, $queryName); + throw MappingException::queryNotFound($this->className, $queryName); } return $this->namedNativeQueries[$queryName]; @@ -692,7 +648,7 @@ public function getNamedNativeQuery($queryName) * * @return array */ - public function getNamedNativeQueries() + public function getNamedNativeQueries() : array { return $this->namedNativeQueries; } @@ -711,7 +667,7 @@ public function getNamedNativeQueries() public function getSqlResultSetMapping($name) { if (! isset($this->sqlResultSetMappings[$name])) { - throw MappingException::resultMappingNotFound($this->name, $name); + throw MappingException::resultMappingNotFound($this->className, $name); } return $this->sqlResultSetMappings[$name]; @@ -740,7 +696,7 @@ protected function validateAndCompleteFieldMapping(FieldMetadata $property) $columnName = $property->getColumnName(); if (empty($columnName)) { - $columnName = $this->namingStrategy->propertyToColumnName($fieldName, $this->name); + $columnName = $this->namingStrategy->propertyToColumnName($fieldName, $this->className); $property->setColumnName($columnName); } @@ -752,13 +708,13 @@ protected function validateAndCompleteFieldMapping(FieldMetadata $property) // Check for already declared column if (isset($this->fieldNames[$columnName]) || ($this->discriminatorColumn !== null && $this->discriminatorColumn->getColumnName() === $columnName)) { - throw MappingException::duplicateColumnName($this->name, $columnName); + throw MappingException::duplicateColumnName($this->className, $columnName); } // Complete id mapping if ($property->isPrimaryKey()) { if ($this->versionProperty !== null && $this->versionProperty->getName() === $fieldName) { - throw MappingException::cannotVersionIdField($this->name, $fieldName); + throw MappingException::cannotVersionIdField($this->className, $fieldName); } if ($property->getType()->canRequireSQLConversion()) { @@ -823,7 +779,7 @@ protected function validateAndCompleteAssociationMapping(AssociationMetadata $pr throw MappingException::missingTargetEntity($fieldName); } - $property->setSourceEntity($this->name); + $property->setSourceEntity($this->className); $property->setOwningSide($property->getMappedBy() === null); $property->setTargetEntity($targetEntity); @@ -835,14 +791,14 @@ protected function validateAndCompleteAssociationMapping(AssociationMetadata $pr // Complete id mapping if ($property->isPrimaryKey()) { if ($property->isOrphanRemoval()) { - throw MappingException::illegalOrphanRemovalOnIdentifierAssociation($this->name, $fieldName); + throw MappingException::illegalOrphanRemovalOnIdentifierAssociation($this->className, $fieldName); } if ( ! in_array($property->getName(), $this->identifier)) { if ($property instanceof ToOneAssociationMetadata && count($property->getJoinColumns()) >= 2) { throw MappingException::cannotMapCompositePrimaryKeyEntitiesAsForeignId( $property->getTargetEntity(), - $this->name, + $this->className, $fieldName ); } @@ -851,11 +807,11 @@ protected function validateAndCompleteAssociationMapping(AssociationMetadata $pr } if ($this->cache && !$property->getCache()) { - throw CacheException::nonCacheableEntityAssociation($this->name, $fieldName); + throw CacheException::nonCacheableEntityAssociation($this->className, $fieldName); } if ($property instanceof ToManyAssociationMetadata) { - throw MappingException::illegalToManyIdentifierAssociation($this->name, $property->getName()); + throw MappingException::illegalToManyIdentifierAssociation($this->className, $property->getName()); } } @@ -870,7 +826,7 @@ protected function validateAndCompleteAssociationMapping(AssociationMetadata $pr if (count($cascades) !== count(array_intersect($cascades, $cascadeTypes))) { $diffCascades = array_diff($cascades, array_intersect($cascades, $cascadeTypes)); - throw MappingException::invalidCascadeOption($diffCascades, $this->name, $fieldName); + throw MappingException::invalidCascadeOption($diffCascades, $this->className, $fieldName); } $property->setCascade($cascades); @@ -901,6 +857,7 @@ protected function validateAndCompleteToOneAssociationMetadata(ToOneAssociationM $uniqueConstraintColumns = []; foreach ($property->getJoinColumns() as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ if ($property instanceof OneToOneAssociationMetadata && $this->inheritanceType !== InheritanceType::SINGLE_TABLE) { if (1 === count($property->getJoinColumns())) { if (! $property->isPrimaryKey()) { @@ -914,7 +871,7 @@ protected function validateAndCompleteToOneAssociationMetadata(ToOneAssociationM $joinColumn->setTableName(! $this->isMappedSuperclass ? $this->getTableName() : null); if (! $joinColumn->getColumnName()) { - $joinColumn->setColumnName($this->namingStrategy->joinColumnName($fieldName, $this->name)); + $joinColumn->setColumnName($this->namingStrategy->joinColumnName($fieldName, $this->className)); } if (! $joinColumn->getReferencedColumnName()) { @@ -957,7 +914,7 @@ protected function validateAndCompleteToOneAssociationMetadata(ToOneAssociationM } if ($property->isPrimaryKey() && ! $property->isOwningSide()) { - throw MappingException::illegalInverseIdentifierAssociation($this->name, $fieldName); + throw MappingException::illegalInverseIdentifierAssociation($this->className, $fieldName); } } @@ -971,7 +928,7 @@ protected function validateAndCompleteToOneAssociationMetadata(ToOneAssociationM protected function validateAndCompleteToManyAssociationMetadata(ToManyAssociationMetadata $property) { if ($property->isPrimaryKey()) { - throw MappingException::illegalToManyIdentifierAssociation($this->name, $property->getName()); + throw MappingException::illegalToManyIdentifierAssociation($this->className, $property->getName()); } } @@ -996,7 +953,7 @@ protected function validateAndCompleteManyToOneMapping(ManyToOneAssociationMetad { // A many-to-one mapping is essentially a one-one backreference if ($property->isOrphanRemoval()) { - throw MappingException::illegalOrphanRemoval($this->name, $property->getName()); + throw MappingException::illegalOrphanRemoval($this->className, $property->getName()); } } @@ -1082,6 +1039,7 @@ protected function validateAndCompleteManyToManyMapping(ManyToManyAssociationMet } foreach ($joinTable->getJoinColumns() as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ if (! $joinColumn->getReferencedColumnName()) { $joinColumn->setReferencedColumnName($this->namingStrategy->referenceColumnName()); } @@ -1099,6 +1057,7 @@ protected function validateAndCompleteManyToManyMapping(ManyToManyAssociationMet } foreach ($joinTable->getInverseJoinColumns() as $inverseJoinColumn) { + /** @var JoinColumnMetadata $inverseJoinColumn */ if (! $inverseJoinColumn->getReferencedColumnName()) { $inverseJoinColumn->setReferencedColumnName($this->namingStrategy->referenceColumnName()); } @@ -1136,11 +1095,11 @@ public function getIdentifierFieldNames() public function getSingleIdentifierFieldName() { if ($this->isIdentifierComposite()) { - throw MappingException::singleIdNotAllowedOnCompositePrimaryKey($this->name); + throw MappingException::singleIdNotAllowedOnCompositePrimaryKey($this->className); } if ( ! isset($this->identifier[0])) { - throw MappingException::noIdDefined($this->name); + throw MappingException::noIdDefined($this->className); } return $this->identifier[0]; @@ -1173,16 +1132,18 @@ public function getIdentifier() */ public function hasField($fieldName) { - return isset($this->properties[$fieldName]) - && $this->properties[$fieldName] instanceof FieldMetadata; + return isset($this->declaredProperties[$fieldName]) + && $this->declaredProperties[$fieldName] instanceof FieldMetadata; } /** * Returns an array with identifier column names and their corresponding ColumnMetadata. * + * @param EntityManagerInterface $em + * * @return array */ - public function getIdentifierColumns(EntityManagerInterface $em) + public function getIdentifierColumns(EntityManagerInterface $em) : array { $columns = []; @@ -1195,6 +1156,8 @@ public function getIdentifierColumns(EntityManagerInterface $em) continue; } + /** @var AssociationMetadata $property */ + // Association defined as Id field $targetClass = $em->getClassMetadata($property->getTargetEntity()); @@ -1209,11 +1172,15 @@ public function getIdentifierColumns(EntityManagerInterface $em) ; foreach ($joinColumns as $joinColumn) { - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $em) - ); + /** @var JoinColumnMetadata $joinColumn */ + $columnName = $joinColumn->getColumnName(); + $referencedColumnName = $joinColumn->getReferencedColumnName(); + + if (! $joinColumn->getType()) { + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $em)); + } - $columns[$joinColumn->getColumnName()] = $joinColumn; + $columns[$columnName] = $joinColumn; } } @@ -1223,9 +1190,9 @@ public function getIdentifierColumns(EntityManagerInterface $em) /** * Gets the name of the primary table. * - * @return string + * @return string|null */ - public function getTableName() + public function getTableName() : ?string { return $this->table->getName(); } @@ -1235,7 +1202,7 @@ public function getTableName() * * @return string|null */ - public function getSchemaName() + public function getSchemaName() : ?string { return $this->table->getSchema(); } @@ -1245,9 +1212,9 @@ public function getSchemaName() * * @return string */ - public function getTemporaryIdTableName() + public function getTemporaryIdTableName() : string { - $schema = empty($this->getSchemaName()) + $schema = null === $this->getSchemaName() ? '' : $this->getSchemaName() . '_' ; @@ -1265,7 +1232,7 @@ public function getTemporaryIdTableName() * * @return void */ - public function setSubclasses(array $subclasses) + public function setSubclasses(array $subclasses) : void { foreach ($subclasses as $subclass) { $this->subClasses[] = $subclass; @@ -1280,32 +1247,6 @@ public function getSubClasses() : array return $this->subClasses; } - /** - * Sets the parent class names. - * Assumes that the class names in the passed array are in the order: - * directParent -> directParentParent -> directParentParentParent ... -> root. - * - * @param array $classNames - * - * @return void - */ - public function setParentClasses(array $classNames) - { - $this->parentClasses = $classNames; - - if (count($classNames) > 0) { - $this->rootEntityName = array_pop($classNames); - } - } - - /** - * @return array - */ - public function getParentClasses() : array - { - return $this->parentClasses; - } - /** * Sets the inheritance type used by the class and its subclasses. * @@ -1315,10 +1256,10 @@ public function getParentClasses() : array * * @throws MappingException */ - public function setInheritanceType($type) + public function setInheritanceType($type) : void { if ( ! $this->isInheritanceType($type)) { - throw MappingException::invalidInheritanceType($this->name, $type); + throw MappingException::invalidInheritanceType($this->className, $type); } $this->inheritanceType = $type; @@ -1335,12 +1276,12 @@ public function setInheritanceType($type) * @throws MappingException * @throws CacheException */ - public function setPropertyOverride(Property $property) + public function setPropertyOverride(Property $property) : void { $fieldName = $property->getName(); - if (! isset($this->properties[$fieldName])) { - throw MappingException::invalidOverrideFieldName($this->name, $fieldName); + if (! isset($this->declaredProperties[$fieldName])) { + throw MappingException::invalidOverrideFieldName($this->className, $fieldName); } $originalProperty = $this->getProperty($fieldName); @@ -1348,7 +1289,7 @@ public function setPropertyOverride(Property $property) // If moving from transient to persistent, assume it's a new property if ($originalPropertyClassName === TransientMetadata::class) { - unset($this->properties[$fieldName]); + unset($this->declaredProperties[$fieldName]); $this->addProperty($property); @@ -1357,15 +1298,15 @@ public function setPropertyOverride(Property $property) // Do not allow to change property type if ($originalPropertyClassName !== get_class($property)) { - throw MappingException::invalidOverridePropertyType($this->name, $fieldName); + throw MappingException::invalidOverridePropertyType($this->className, $fieldName); } // Do not allow to change version property if ($originalProperty instanceof VersionFieldMetadata) { - throw MappingException::invalidOverrideVersionField($this->name, $fieldName); + throw MappingException::invalidOverrideVersionField($this->className, $fieldName); } - unset($this->properties[$fieldName]); + unset($this->declaredProperties[$fieldName]); if ($property instanceof FieldMetadata) { // Unset defined fieldName prior to override @@ -1410,7 +1351,7 @@ public function setPropertyOverride(Property $property) */ public function isRootEntity() { - return $this->name === $this->rootEntityName; + return $this->className === $this->getRootClassName(); } /** @@ -1422,20 +1363,20 @@ public function isRootEntity() */ public function isInheritedProperty($fieldName) { - $declaringClass = $this->properties[$fieldName]->getDeclaringClass(); + $declaringClass = $this->declaredProperties[$fieldName]->getDeclaringClass(); - return ! ($declaringClass->name === $this->name); + return ! ($declaringClass->className === $this->className); } /** * {@inheritdoc} */ - public function setTable(TableMetadata $table) + public function setTable(TableMetadata $table) : void { $this->table = $table; if (empty($table->getName())) { - $table->setName($this->namingStrategy->classToTableName($this->name)); + $table->setName($this->namingStrategy->classToTableName($this->className)); } } @@ -1461,7 +1402,7 @@ private function isInheritanceType($type) */ public function getColumn(string $columnName): ?LocalColumnMetadata { - foreach ($this->properties as $property) { + foreach ($this->declaredProperties as $property) { if ($property instanceof LocalColumnMetadata && $property->getColumnName() === $columnName) { return $property; } @@ -1470,24 +1411,6 @@ public function getColumn(string $columnName): ?LocalColumnMetadata return null; } - /** - * @return array - */ - public function getProperties() - { - return $this->properties; - } - - /** - * @param string $fieldName - * - * @return Property|null - */ - public function getProperty($fieldName) - { - return $this->properties[$fieldName] ?? null; - } - /** * Add a property mapping. * @@ -1503,7 +1426,7 @@ public function addProperty(Property $property) // Check for empty field name if (empty($fieldName)) { - throw MappingException::missingFieldName($this->name); + throw MappingException::missingFieldName($this->className); } $property->setDeclaringClass($this); @@ -1545,10 +1468,7 @@ public function addProperty(Property $property) // Transient properties are ignored on purpose here! =) } - // Check for duplicated property - $this->assertPropertyNotMapped($fieldName); - - $this->properties[$fieldName] = $property; + $this->addDeclaredProperty($property); } /** @@ -1573,13 +1493,23 @@ public function addInheritedProperty(Property $property) $this->fieldNames[$property->getColumnName()] = $property->getName(); } else if ($inheritedProperty instanceof AssociationMetadata) { if ($declaringClass->isMappedSuperclass) { - $inheritedProperty->setSourceEntity($this->name); + $inheritedProperty->setSourceEntity($this->className); + } + + // Need to add inherited fieldNames + if ($inheritedProperty instanceof ToOneAssociationMetadata && $inheritedProperty->isOwningSide()) { + foreach ($inheritedProperty->getJoinColumns() as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ + $this->fieldNames[$joinColumn->getColumnName()] = $property->getName(); + } } } - $this->assertPropertyNotMapped($property->getName()); + if (isset($this->declaredProperties[$property->getName()])) { + throw MappingException::duplicateProperty($this->className, $this->getProperty($property->getName())); + } - $this->properties[$property->getName()] = $inheritedProperty; + $this->declaredProperties[$property->getName()] = $inheritedProperty; if ($inheritedProperty instanceof VersionFieldMetadata) { $this->versionProperty = $inheritedProperty; @@ -1600,7 +1530,7 @@ public function addInheritedProperty(Property $property) public function addNamedQuery(string $name, string $query) { if (isset($this->namedQueries[$name])) { - throw MappingException::duplicateQueryMapping($this->name, $name); + throw MappingException::duplicateQueryMapping($this->className, $name); } $this->namedQueries[$name] = $query; @@ -1621,11 +1551,11 @@ public function addNamedQuery(string $name, string $query) public function addNamedNativeQuery(string $name, string $query, array $queryMapping) { if (isset($this->namedNativeQueries[$name])) { - throw MappingException::duplicateQueryMapping($this->name, $name); + throw MappingException::duplicateQueryMapping($this->className, $name); } if (! isset($queryMapping['resultClass']) && ! isset($queryMapping['resultSetMapping'])) { - throw MappingException::missingQueryMapping($this->name, $name); + throw MappingException::missingQueryMapping($this->className, $name); } if (isset($queryMapping['resultClass']) && $queryMapping['resultClass'] !== '__CLASS__') { @@ -1648,17 +1578,17 @@ public function addNamedNativeQuery(string $name, string $query, array $queryMap public function addSqlResultSetMapping(array $resultMapping) { if (!isset($resultMapping['name'])) { - throw MappingException::nameIsMandatoryForSqlResultSetMapping($this->name); + throw MappingException::nameIsMandatoryForSqlResultSetMapping($this->className); } if (isset($this->sqlResultSetMappings[$resultMapping['name']])) { - throw MappingException::duplicateResultSetMapping($this->name, $resultMapping['name']); + throw MappingException::duplicateResultSetMapping($this->className, $resultMapping['name']); } if (isset($resultMapping['entities'])) { foreach ($resultMapping['entities'] as $key => $entityResult) { if (! isset($entityResult['entityClass'])) { - throw MappingException::missingResultSetMappingEntity($this->name, $resultMapping['name']); + throw MappingException::missingResultSetMappingEntity($this->className, $resultMapping['name']); } $entityClassName = ($entityResult['entityClass'] !== '__CLASS__') @@ -1671,7 +1601,7 @@ public function addSqlResultSetMapping(array $resultMapping) if (isset($entityResult['fields'])) { foreach ($entityResult['fields'] as $k => $field) { if (! isset($field['name'])) { - throw MappingException::missingResultSetMappingFieldName($this->name, $resultMapping['name']); + throw MappingException::missingResultSetMappingFieldName($this->className, $resultMapping['name']); } if (! isset($field['column'])) { @@ -1760,7 +1690,7 @@ public function addLifecycleCallback($callback, $event) * * @return void */ - public function setLifecycleCallbacks(array $callbacks) + public function setLifecycleCallbacks(array $callbacks) : void { $this->lifecycleCallbacks = $callbacks; } @@ -1772,9 +1702,11 @@ public function setLifecycleCallbacks(array $callbacks) * @param string $class The listener class. * @param string $method The listener callback method. * + * @return void + * * @throws \Doctrine\ORM\Mapping\MappingException */ - public function addEntityListener($eventName, $class, $method) + public function addEntityListener(string $eventName, string $class, string $method) : void { $listener = [ 'class' => $class, @@ -1782,15 +1714,15 @@ public function addEntityListener($eventName, $class, $method) ]; if (! class_exists($class)) { - throw MappingException::entityListenerClassNotFound($class, $this->name); + throw MappingException::entityListenerClassNotFound($class, $this->className); } if (! method_exists($class, $method)) { - throw MappingException::entityListenerMethodNotFound($class, $method, $this->name); + throw MappingException::entityListenerMethodNotFound($class, $method, $this->className); } - if (isset($this->entityListeners[$eventName]) && in_array($listener, $this->entityListeners[$eventName])) { - throw MappingException::duplicateEntityListener($class, $method, $this->name); + if (isset($this->entityListeners[$eventName]) && in_array($listener, $this->entityListeners[$eventName], true)) { + throw MappingException::duplicateEntityListener($class, $method, $this->className); } $this->entityListeners[$eventName][] = $listener; @@ -1807,17 +1739,17 @@ public function addEntityListener($eventName, $class, $method) * * @see getDiscriminatorColumn() */ - public function setDiscriminatorColumn(DiscriminatorColumnMetadata $discriminatorColumn) + public function setDiscriminatorColumn(DiscriminatorColumnMetadata $discriminatorColumn) : void { if (isset($this->fieldNames[$discriminatorColumn->getColumnName()])) { - throw MappingException::duplicateColumnName($this->name, $discriminatorColumn->getColumnName()); + throw MappingException::duplicateColumnName($this->className, $discriminatorColumn->getColumnName()); } $discriminatorColumn->setTableName($discriminatorColumn->getTableName() ?? $this->getTableName()); - $allowedTypeList = ["boolean", "array", "object", "datetime", "time", "date"]; + $allowedTypeList = ['boolean', 'array', 'object', 'datetime', 'time', 'date']; - if (in_array($discriminatorColumn->getTypeName(), $allowedTypeList)) { + if (in_array($discriminatorColumn->getTypeName(), $allowedTypeList, true)) { throw MappingException::invalidDiscriminatorColumnType($discriminatorColumn->getTypeName()); } @@ -1831,8 +1763,10 @@ public function setDiscriminatorColumn(DiscriminatorColumnMetadata $discriminato * @param array $map * * @return void + * + * @throws MappingException */ - public function setDiscriminatorMap(array $map) + public function setDiscriminatorMap(array $map) : void { foreach ($map as $value => $className) { $this->addDiscriminatorMapClass($value, $className); @@ -1842,38 +1776,44 @@ public function setDiscriminatorMap(array $map) /** * Adds one entry of the discriminator map with a new class and corresponding name. * - * @param string $name - * @param string $className + * @param string|int $name + * @param string $className * * @return void * * @throws MappingException */ - public function addDiscriminatorMapClass($name, $className) + public function addDiscriminatorMapClass($name, string $className) : void { $this->discriminatorMap[$name] = $className; - if ($this->name === $className) { + if ($this->className === $className) { $this->discriminatorValue = $name; return; } if (! (class_exists($className) || interface_exists($className))) { - throw MappingException::invalidClassInDiscriminatorMap($className, $this->name); + throw MappingException::invalidClassInDiscriminatorMap($className, $this->className); } - if (is_subclass_of($className, $this->name) && ! in_array($className, $this->subClasses)) { + if (is_subclass_of($className, $this->className) && ! in_array($className, $this->subClasses, true)) { $this->subClasses[] = $className; } } - public function getValueGenerationPlan(): ValueGenerationPlan + /** + * @return ValueGenerationPlan + */ + public function getValueGenerationPlan() : ValueGenerationPlan { return $this->valueGenerationPlan; } - public function setValueGenerationPlan(ValueGenerationPlan $valueGenerationPlan): void + /** + * @param ValueGenerationPlan $valueGenerationPlan + */ + public function setValueGenerationPlan(ValueGenerationPlan $valueGenerationPlan) : void { $this->valueGenerationPlan = $valueGenerationPlan; } @@ -1885,7 +1825,7 @@ public function setValueGenerationPlan(ValueGenerationPlan $valueGenerationPlan) * * @return boolean */ - public function hasNamedQuery($queryName) + public function hasNamedQuery($queryName) : bool { return isset($this->namedQueries[$queryName]); } @@ -1897,7 +1837,7 @@ public function hasNamedQuery($queryName) * * @return boolean */ - public function hasNamedNativeQuery($queryName) + public function hasNamedNativeQuery($queryName) : bool { return isset($this->namedNativeQueries[$queryName]); } @@ -1909,7 +1849,7 @@ public function hasNamedNativeQuery($queryName) * * @return boolean */ - public function hasSqlResultSetMapping($name) + public function hasSqlResultSetMapping($name) : bool { return isset($this->sqlResultSetMappings[$name]); } @@ -1919,7 +1859,7 @@ public function hasSqlResultSetMapping($name) * * @return void */ - public function asReadOnly() + public function asReadOnly() : void { $this->readOnly = true; } @@ -1929,7 +1869,7 @@ public function asReadOnly() * * @return bool */ - public function isReadOnly() + public function isReadOnly() : bool { return $this->readOnly; } @@ -1937,31 +1877,11 @@ public function isReadOnly() /** * @return bool */ - public function isVersioned() + public function isVersioned() : bool { return $this->versionProperty !== null; } - /** - * @param string|null $className - * - * @return string|null null if the input value is null - */ - public function fullyQualifiedClassName($className) - { - if (empty($className) || ! $this->reflectionClass) { - return $className; - } - - $namespace = $this->reflectionClass->getNamespaceName(); - - if ($className !== null && strpos($className, '\\') === false && $namespace) { - return ltrim($namespace . '\\' . $className, '\\'); - } - - return ltrim($className, '\\'); - } - /** * Map Embedded Class * @@ -1970,9 +1890,11 @@ public function fullyQualifiedClassName($className) * @throws MappingException * @return void */ - public function mapEmbedded(array $mapping) + public function mapEmbedded(array $mapping) : void { - /*$this->assertPropertyNotMapped($mapping['fieldName']); + /*if (isset($this->declaredProperties[$mapping['fieldName']])) { + throw MappingException::duplicateProperty($this->className, $this->getProperty($mapping['fieldName'])); + } $this->embeddedClasses[$mapping['fieldName']] = [ 'class' => $this->fullyQualifiedClassName($mapping['class']), @@ -1989,7 +1911,7 @@ public function mapEmbedded(array $mapping) * @param string $property * @param ClassMetadata $embeddable */ - public function inlineEmbeddable($property, ClassMetadata $embeddable) + public function inlineEmbeddable($property, ClassMetadata $embeddable) : void { /*foreach ($embeddable->fieldMappings as $fieldName => $fieldMapping) { $fieldMapping['fieldName'] = $property . "." . $fieldName; @@ -2013,20 +1935,4 @@ public function inlineEmbeddable($property, ClassMetadata $embeddable) $this->mapField($fieldMapping); }*/ } - - /** - * @param string $fieldName - * - * @throws MappingException - */ - private function assertPropertyNotMapped(string $fieldName) - { - if (isset($this->properties[$fieldName])) { - throw MappingException::duplicateProperty($this->name, $this->properties[$fieldName]); - } - -// if (isset($this->embeddedClasses[$fieldName])) { -// throw MappingException::duplicateProperty($this, $this->embeddedClasses[$fieldName]); -// } - } } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataBuildingContext.php b/lib/Doctrine/ORM/Mapping/ClassMetadataBuildingContext.php new file mode 100644 index 00000000000..1ec3ff56592 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataBuildingContext.php @@ -0,0 +1,117 @@ +. + */ + +declare(strict_types=1); + +namespace Doctrine\ORM\Mapping; + +use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\Factory\NamingStrategy; + +/** + * Class ClassMetadataBuildingContext + * + * @package Doctrine\ORM\Mapping\Factory + * @since 3.0 + * + * @author Guilherme Blanco + */ +class ClassMetadataBuildingContext +{ + /** @var AbstractClassMetadataFactory */ + private $classMetadataFactory; + + /** @var NamingStrategy */ + private $namingStrategy; + + /** + * @var array + */ + protected $secondPassList = []; + + /** + * @var bool + */ + private $inSecondPass = false; + + /** + * ClassMetadataBuildingContext constructor. + * + * @param AbstractClassMetadataFactory $classMetadataFactory + * @param NamingStrategy|null $namingStrategy + */ + public function __construct( + AbstractClassMetadataFactory $classMetadataFactory, + ?NamingStrategy $namingStrategy = null + ) + { + $this->classMetadataFactory = $classMetadataFactory; + $this->namingStrategy = $namingStrategy ?: new DefaultNamingStrategy(); + } + + /** + * @return AbstractClassMetadataFactory + */ + public function getClassMetadataFactory() : AbstractClassMetadataFactory + { + return $this->classMetadataFactory; + } + + /** + * @return NamingStrategy + */ + public function getNamingStrategy() : NamingStrategy + { + return $this->namingStrategy; + } + + /** + * @param SecondPass $secondPass + * + * @return void + */ + public function addSecondPass(SecondPass $secondPass) : void + { + $this->secondPassList[] = $secondPass; + } + + /** + * @return bool + */ + public function isInSecondPass() : bool + { + return $this->inSecondPass; + } + + /** + * @return void + */ + public function validate() : void + { + $this->inSecondPass = true; + + foreach ($this->secondPassList as $secondPass) { + /** @var SecondPass $secondPass */ + $secondPass->process($this); + } + + $this->inSecondPass = false; + } +} diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index b144d1ad296..a25641b60cf 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -59,9 +59,9 @@ class ClassMetadataFactory extends AbstractClassMetadataFactory /** * {@inheritDoc} */ - protected function loadMetadata($name) + protected function loadMetadata(string $name, ClassMetadataBuildingContext $metadataBuildingContext) { - $loaded = parent::loadMetadata($name); + $loaded = parent::loadMetadata($name, $metadataBuildingContext); array_map([$this, 'resolveDiscriminatorValue'], array_map([$this, 'getMetadataFor'], $loaded)); @@ -89,13 +89,13 @@ protected function initialize() /** * {@inheritDoc} */ - protected function onNotFoundMetadata($className) + protected function onNotFoundMetadata($className, ClassMetadataBuildingContext $metadataBuildingContext) { - if ( ! $this->evm->hasListeners(Events::onClassMetadataNotFound)) { + if (! $this->evm->hasListeners(Events::onClassMetadataNotFound)) { return; } - $eventArgs = new OnClassMetadataNotFoundEventArgs($className, $this->em); + $eventArgs = new OnClassMetadataNotFoundEventArgs($className, $metadataBuildingContext, $this->em); $this->evm->dispatchEvent(Events::onClassMetadataNotFound, $eventArgs); @@ -103,17 +103,19 @@ protected function onNotFoundMetadata($className) } /** - * {@inheritDoc} + * {@inheritdoc} */ protected function doLoadMetadata( ClassMetadata $class, - ClassMetadata $parent = null, - bool $rootEntityFound, - array $nonSuperclassParents - ) + ClassMetadataBuildingContext $metadataBuildingContext, + bool $rootEntityFound + ) : void { + /* @var $class ClassMetadata */ - /* @var $parent ClassMetadata */ + /* @var $parent ClassMetadata|null */ + $parent = $class->getParent(); + if ($parent) { if ($parent->inheritanceType === InheritanceType::SINGLE_TABLE) { $class->setTable($parent->table); @@ -141,7 +143,7 @@ protected function doLoadMetadata( // Invoke driver try { - $this->driver->loadMetadataForClass($class->getClassName(), $class); + $this->driver->loadMetadataForClass($class->getClassName(), $class, $metadataBuildingContext); } catch (ReflectionException $e) { throw MappingException::reflectionFailure($class->getClassName(), $e); } @@ -207,8 +209,6 @@ protected function doLoadMetadata( } } - $class->setParentClasses($nonSuperclassParents); - if ($class->isRootEntity() && $class->inheritanceType !== InheritanceType::NONE && ! $class->discriminatorMap) { $this->addDefaultDiscriminatorMap($class); } @@ -248,7 +248,7 @@ protected function completeRuntimeMetadata(ClassMetadata $class, ClassMetadata $ $tableName = $class->getTableName(); // Resolve column table names - foreach ($class->getProperties() as $property) { + foreach ($class->getDeclaredPropertiesIterator() as $property) { if ($property instanceof FieldMetadata) { $property->setTableName($property->getTableName() ?? $tableName); @@ -312,11 +312,22 @@ protected function validateRuntimeMetadata(ClassMetadata $class, ClassMetadata $ } /** - * {@inheritDoc} + * {@inheritdoc} + */ + protected function newClassMetadataInstance( + string $className, + ClassMetadataBuildingContext $metadataBuildingContext + ) : ClassMetadata + { + return new ClassMetadata($className, $metadataBuildingContext); + } + + /** + * {@inheritdoc} */ - protected function newClassMetadataInstance($className) + protected function newClassMetadataBuildingContext() : ClassMetadataBuildingContext { - return new ClassMetadata($className, $this->em->getConfiguration()->getNamingStrategy()); + return new ClassMetadataBuildingContext($this, $this->em->getConfiguration()->getNamingStrategy()); } /** @@ -427,7 +438,7 @@ private function addInheritedProperties(ClassMetadata $subClass, ClassMetadata $ { $isAbstract = $parentClass->isMappedSuperclass; - foreach ($parentClass->getProperties() as $fieldName => $property) { + foreach ($parentClass->getDeclaredPropertiesIterator() as $fieldName => $property) { if ($isAbstract && $property instanceof ToManyAssociationMetadata && ! $property->isOwningSide()) { throw MappingException::illegalToManyAssociationOnMappedSuperclass($parentClass->getClassName(), $fieldName); } @@ -618,7 +629,7 @@ private function addInheritedSqlResultSetMappings(ClassMetadata $subClass, Class */ private function completeIdentifierGeneratorMappings(ClassMetadata $class) { - foreach ($class->getProperties() as $property) { + foreach ($class->getDeclaredPropertiesIterator() as $property) { if ( ! $property instanceof FieldMetadata /*&& ! $property instanceof AssocationMetadata*/) { continue; } @@ -755,33 +766,38 @@ private function getTargetPlatform() private function buildValueGenerationPlan(ClassMetadata $class): void { /** @var LocalColumnMetadata[] $generatedProperties */ - $generatedProperties = array_filter($class->getProperties(), function (Property $property): bool { - return $property instanceof LocalColumnMetadata && $property->hasValueGenerator(); - }); - $propertiesCount = count($generatedProperties); + $generatedProperties = []; - if ($propertiesCount === 0) { - $class->setValueGenerationPlan(new NoopValueGenerationPlan()); - return; + foreach ($class->getDeclaredPropertiesIterator() as $property) { + if (! ($property instanceof LocalColumnMetadata && $property->hasValueGenerator())) { + continue; + } + + $generatedProperties[] = $property; } - if ($propertiesCount === 1) { - $property = reset($generatedProperties); + switch (count($generatedProperties)) { + case 0: + $class->setValueGenerationPlan(new NoopValueGenerationPlan()); + break; - $class->setValueGenerationPlan(new SingleValueGenerationPlan( - $class, - new ColumnValueGeneratorExecutor($property, $this->createPropertyValueGenerator($class, $property)) - )); + case 1: + $property = reset($generatedProperties); + $executor = new ColumnValueGeneratorExecutor($property, $this->createPropertyValueGenerator($class, $property)); - return; - } + $class->setValueGenerationPlan(new SingleValueGenerationPlan($class, $executor)); + break; - $executors = []; - foreach ($generatedProperties as $property) { - $executors[] = new ColumnValueGeneratorExecutor($property, $this->createPropertyValueGenerator($class, $property)); - } + default: + $executors = []; + + foreach ($generatedProperties as $property) { + $executors[] = new ColumnValueGeneratorExecutor($property, $this->createPropertyValueGenerator($class, $property)); + } - $class->setValueGenerationPlan(new CompositeValueGenerationPlan($class, $executors)); + $class->setValueGenerationPlan(new CompositeValueGenerationPlan($class, $executors)); + break; + } } private function createPropertyValueGenerator(ClassMetadata $class, LocalColumnMetadata $property): Sequencing\Generator diff --git a/lib/Doctrine/ORM/Mapping/ColumnMetadata.php b/lib/Doctrine/ORM/Mapping/ColumnMetadata.php index 1164ce092cf..dc883479c0f 100644 --- a/lib/Doctrine/ORM/Mapping/ColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ColumnMetadata.php @@ -7,25 +7,33 @@ use Doctrine\DBAL\Types\Type; +/** + * Class ColumnMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ abstract class ColumnMetadata { /** - * @var string + * @var string|null */ protected $tableName; /** - * @var string + * @var string|null */ protected $columnName; /** - * @var Type + * @var Type|null */ protected $type; /** - * @var string + * @var string|null */ protected $columnDefinition; @@ -64,9 +72,9 @@ abstract class ColumnMetadata }*/ /** - * @return string + * @return string|null */ - public function getTableName() + public function getTableName() : ?string { return $this->tableName; } @@ -76,15 +84,15 @@ public function getTableName() * * @param string $tableName */ - public function setTableName(/*string*/ $tableName) + public function setTableName(/*string*/ $tableName) : void { $this->tableName = $tableName; } /** - * @return string + * @return string|null */ - public function getColumnName() + public function getColumnName() : ?string { return $this->columnName; } @@ -92,15 +100,15 @@ public function getColumnName() /** * @param string $columnName */ - public function setColumnName(string $columnName) + public function setColumnName(string $columnName) : void { $this->columnName = $columnName; } /** - * @return Type + * @return Type|null */ - public function getType() + public function getType() : ?Type { return $this->type; } @@ -108,7 +116,7 @@ public function getType() /** * @param Type $type */ - public function setType(Type $type) + public function setType(Type $type) : void { $this->type = $type; } @@ -116,15 +124,15 @@ public function setType(Type $type) /** * @return string */ - public function getTypeName() + public function getTypeName() : string { return $this->type->getName(); } /** - * @return string + * @return string|null */ - public function getColumnDefinition() + public function getColumnDefinition() : ?string { return $this->columnDefinition; } @@ -132,7 +140,7 @@ public function getColumnDefinition() /** * @param string $columnDefinition */ - public function setColumnDefinition(string $columnDefinition) + public function setColumnDefinition(string $columnDefinition) : void { $this->columnDefinition = $columnDefinition; } @@ -140,7 +148,7 @@ public function setColumnDefinition(string $columnDefinition) /** * @return array */ - public function getOptions() + public function getOptions() : array { return $this->options; } @@ -148,7 +156,7 @@ public function getOptions() /** * @param array $options */ - public function setOptions(array $options) + public function setOptions(array $options) : void { $this->options = $options; } @@ -156,7 +164,7 @@ public function setOptions(array $options) /** * @param bool $isPrimaryKey */ - public function setPrimaryKey(bool $isPrimaryKey) + public function setPrimaryKey(bool $isPrimaryKey) : void { $this->primaryKey = $isPrimaryKey; } @@ -164,7 +172,7 @@ public function setPrimaryKey(bool $isPrimaryKey) /** * @return bool */ - public function isPrimaryKey() + public function isPrimaryKey() : bool { return $this->primaryKey; } @@ -172,7 +180,7 @@ public function isPrimaryKey() /** * @param bool $isNullable */ - public function setNullable(bool $isNullable) + public function setNullable(bool $isNullable) : void { $this->nullable = $isNullable; } @@ -180,7 +188,7 @@ public function setNullable(bool $isNullable) /** * @return bool */ - public function isNullable() + public function isNullable() : bool { return $this->nullable; } @@ -188,7 +196,7 @@ public function isNullable() /** * @param bool $isUnique */ - public function setUnique(bool $isUnique) + public function setUnique(bool $isUnique) : void { $this->unique = $isUnique; } @@ -196,7 +204,7 @@ public function setUnique(bool $isUnique) /** * @return bool */ - public function isUnique() + public function isUnique() : bool { return $this->unique; } diff --git a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php index 42076762b8a..2d1a397255f 100644 --- a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php @@ -35,7 +35,7 @@ abstract class ComponentMetadata /** * @var CacheMetadata|null */ - protected $cache = null; + protected $cache; /** * @var array @@ -46,12 +46,10 @@ abstract class ComponentMetadata * ComponentMetadata constructor. * * @param string $className - * @param ComponentMetadata|null $parent */ - public function __construct(string $className, ?ComponentMetadata $parent = null) + public function __construct(string $className) { $this->className = $className; - $this->parent = $parent; } /** @@ -62,6 +60,14 @@ public function getClassName() : string return $this->className; } + /** + * @param ComponentMetadata $parent + */ + public function setParent(ComponentMetadata $parent) : void + { + $this->parent = $parent; + } + /** * @return ComponentMetadata|null */ @@ -83,7 +89,7 @@ public function getReflectionClass() : ?\ReflectionClass * * @return void */ - public function setCache(?CacheMetadata $cache = null) + public function setCache(?CacheMetadata $cache = null) : void { $this->cache = $cache; } @@ -97,9 +103,9 @@ public function getCache(): ?CacheMetadata } /** - * @return \Iterator + * @return \ArrayIterator */ - public function getDeclaredPropertiesIterator() : \Iterator + public function getDeclaredPropertiesIterator() : \ArrayIterator { return new \ArrayIterator($this->declaredProperties); } @@ -109,11 +115,12 @@ public function getDeclaredPropertiesIterator() : \Iterator * * @throws MappingException */ - public function addDeclaredProperty(Property $property) + public function addDeclaredProperty(Property $property) : void { $propertyName = $property->getName(); - if ($this->hasProperty($propertyName)) { + // @todo guilhermeblanco Switch to hasProperty once inherited properties are not being mapped on child classes + if ($this->hasDeclaredProperty($propertyName)) { throw MappingException::duplicateProperty($this->getClassName(), $this->getProperty($propertyName)); } @@ -187,6 +194,33 @@ public function hasProperty(string $propertyName) : bool return $this->parent && $this->parent->hasProperty($propertyName); } + /** + * @return \ArrayIterator + */ + public function getColumnsIterator() : \ArrayIterator + { + $iterator = new \ArrayIterator(); + + // @todo guilhermeblanco Must be switched to getPropertiesIterator once class only has its declared properties + foreach ($this->getDeclaredPropertiesIterator() as $property) { + switch (true) { + case ($property instanceof FieldMetadata): + $iterator->offsetSet($property->getColumnName(), $property); + break; + + case ($property instanceof ToOneAssociationMetadata && $property->isOwningSide()): + foreach ($property->getJoinColumns() as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ + $iterator->offsetSet($joinColumn->getColumnName(), $joinColumn); + } + + break; + } + } + + return $iterator; + } + /** * @param string|null $className * diff --git a/lib/Doctrine/ORM/Mapping/DefaultEntityListenerResolver.php b/lib/Doctrine/ORM/Mapping/DefaultEntityListenerResolver.php index faf26393b9c..f1822528323 100644 --- a/lib/Doctrine/ORM/Mapping/DefaultEntityListenerResolver.php +++ b/lib/Doctrine/ORM/Mapping/DefaultEntityListenerResolver.php @@ -8,7 +8,9 @@ /** * The default DefaultEntityListener * - * @since 2.4 + * @package Doctrine\ORM\Mapping + * @since 2.4 + * * @author Fabio B. Silva */ class DefaultEntityListenerResolver implements EntityListenerResolver diff --git a/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php b/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php index 6ccd12cccbe..7b652fde475 100644 --- a/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/DiscriminatorColumnMetadata.php @@ -5,6 +5,14 @@ namespace Doctrine\ORM\Mapping; +/** + * Class DiscriminatorColumnMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ final class DiscriminatorColumnMetadata extends LocalColumnMetadata { } diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 1c898742243..64a2c414267 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -246,7 +246,11 @@ public function getAllClassNames() /** * {@inheritDoc} */ - public function loadMetadataForClass($className, Mapping\ClassMetadata $metadata) + public function loadMetadataForClass( + string $className, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) { $reflClass = $metadata->getReflectionClass(); diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index d4e69a48619..742d9582941 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -11,13 +11,7 @@ use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Schema\Column; use Doctrine\DBAL\Types\Type; -use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\FieldMetadata; -use Doctrine\ORM\Mapping\GeneratorType; -use Doctrine\ORM\Mapping\JoinColumnMetadata; -use Doctrine\ORM\Mapping\JoinTableMetadata; -use Doctrine\ORM\Mapping\MappingException; -use Doctrine\ORM\Mapping\ValueGeneratorMetadata; +use Doctrine\ORM\Mapping; /** * The DatabaseDriver reverse engineers the mapping metadata from a database. @@ -159,7 +153,11 @@ public function setTables($entityTables, $manyToManyTables) /** * {@inheritDoc} */ - public function loadMetadataForClass($className, ClassMetadata $metadata) + public function loadMetadataForClass( + string $className, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) { $this->reverseEngineerMappingFromDatabase(); @@ -208,7 +206,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) if (current($manyTable->getColumns())->getName() === $localColumn) { $associationMapping['inversedBy'] = $this->getFieldNameForColumn($manyTable->getName(), current($myFk->getColumns()), true); - $associationMapping['joinTable'] = new JoinTableMetadata(); + $associationMapping['joinTable'] = new Mapping\JoinTableMetadata(); $joinTable = $associationMapping['joinTable']; $joinTable->setName(strtolower($manyTable->getName())); @@ -217,7 +215,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $cols = $myFk->getColumns(); for ($i = 0, $l = count($cols); $i < $l; $i++) { - $joinColumn = new JoinColumnMetadata(); + $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName($cols[$i]); $joinColumn->setReferencedColumnName($fkCols[$i]); @@ -229,7 +227,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) $cols = $otherFk->getColumns(); for ($i = 0, $l = count($cols); $i < $l; $i++) { - $joinColumn = new JoinColumnMetadata(); + $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName($cols[$i]); $joinColumn->setReferencedColumnName($fkCols[$i]); @@ -250,7 +248,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) /** * @return void * - * @throws \Doctrine\ORM\Mapping\MappingException + * @throws Mapping\MappingException */ private function reverseEngineerMappingFromDatabase() { @@ -278,7 +276,7 @@ private function reverseEngineerMappingFromDatabase() } if ( ! $table->hasPrimaryKey()) { - throw new MappingException( + throw new Mapping\MappingException( "Table " . $table->getName() . " has no primary key. Doctrine does not ". "support reverse engineering from tables that don't have a primary key." ); @@ -305,9 +303,9 @@ private function reverseEngineerMappingFromDatabase() /** * Build table from a class metadata. * - * @param ClassMetadata $metadata + * @param Mapping\ClassMetadata $metadata */ - private function buildTable(ClassMetadata $metadata) + private function buildTable(Mapping\ClassMetadata $metadata) { $tableName = $this->classToTableNames[$metadata->getClassName()]; $indexes = $this->tables[$tableName]->getIndexes(); @@ -333,9 +331,9 @@ private function buildTable(ClassMetadata $metadata) /** * Build field mapping from class metadata. * - * @param ClassMetadata $metadata + * @param Mapping\ClassMetadata $metadata */ - private function buildFieldMappings(ClassMetadata $metadata) + private function buildFieldMappings(Mapping\ClassMetadata $metadata) { $tableName = $metadata->getTableName(); $columns = $this->tables[$tableName]->getColumns(); @@ -368,7 +366,7 @@ private function buildFieldMappings(ClassMetadata $metadata) // We need to check for the columns here, because we might have associations as id as well. if ($ids && count($primaryKeys) === 1) { - $ids[0]->setValueGenerator(new ValueGeneratorMetadata(GeneratorType::AUTO)); + $ids[0]->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); } } @@ -379,12 +377,12 @@ private function buildFieldMappings(ClassMetadata $metadata) * @param Column $column * @param string $fieldName * - * @return FieldMetadata + * @return Mapping\FieldMetadata */ private function convertColumnAnnotationToFieldMetadata(string $tableName, Column $column, string $fieldName) { $options = []; - $fieldMetadata = new FieldMetadata($fieldName); + $fieldMetadata = new Mapping\FieldMetadata($fieldName); $fieldMetadata->setType($column->getType()); $fieldMetadata->setTableName($tableName); @@ -438,9 +436,9 @@ private function convertColumnAnnotationToFieldMetadata(string $tableName, Colum /** * Build to one (one to one, many to one) association mapping from class metadata. * - * @param ClassMetadata $metadata + * @param Mapping\ClassMetadata $metadata */ - private function buildToOneAssociationMappings(ClassMetadata $metadata) + private function buildToOneAssociationMappings(Mapping\ClassMetadata $metadata) { $tableName = $metadata->getTableName(); $primaryKeys = $this->getTablePrimaryKeys($this->tables[$tableName]); @@ -465,7 +463,7 @@ private function buildToOneAssociationMappings(ClassMetadata $metadata) } for ($i = 0, $l = count($fkColumns); $i < $l; $i++) { - $joinColumn = new JoinColumnMetadata(); + $joinColumn = new Mapping\JoinColumnMetadata(); $joinColumn->setColumnName($fkColumns[$i]); $joinColumn->setReferencedColumnName($fkForeignColumns[$i]); diff --git a/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php b/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php index 926b1ec184f..848636ae90b 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php @@ -1,11 +1,28 @@ . + */ + declare(strict_types=1); namespace Doctrine\ORM\Mapping\Driver; -use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\MappingException; +use Doctrine\ORM\Mapping; /** * The DriverChain allows you to add multiple other mapping drivers for @@ -79,22 +96,26 @@ public function getDrivers() /** * {@inheritDoc} */ - public function loadMetadataForClass($className, ClassMetadata $metadata) + public function loadMetadataForClass( + string $className, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) { /* @var $driver MappingDriver */ foreach ($this->drivers as $namespace => $driver) { if (strpos($className, $namespace) === 0) { - $driver->loadMetadataForClass($className, $metadata); + $driver->loadMetadataForClass($className, $metadata, $metadataBuildingContext); return; } } if (null !== $this->defaultDriver) { - $this->defaultDriver->loadMetadataForClass($className, $metadata); + $this->defaultDriver->loadMetadataForClass($className, $metadata, $metadataBuildingContext); return; } - throw MappingException::classNotFoundInNamespaces($className, array_keys($this->drivers)); + throw Mapping\MappingException::classNotFoundInNamespaces($className, array_keys($this->drivers)); } /** diff --git a/lib/Doctrine/ORM/Mapping/Driver/MappingDriver.php b/lib/Doctrine/ORM/Mapping/Driver/MappingDriver.php index 0e7074c80fa..89c55b1238d 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/MappingDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/MappingDriver.php @@ -5,6 +5,7 @@ namespace Doctrine\ORM\Mapping\Driver; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ClassMetadataBuildingContext; /** * Contract for metadata drivers. @@ -20,12 +21,17 @@ interface MappingDriver /** * Loads the metadata for the specified class into the provided container. * - * @param string $className - * @param ClassMetadata $metadata + * @param string $className + * @param ClassMetadata $metadata + * @param ClassMetadataBuildingContext $metadataBuildingContext * * @return void */ - public function loadMetadataForClass($className, ClassMetadata $metadata); + public function loadMetadataForClass( + string $className, + ClassMetadata $metadata, // ComponentMetadata $parent + ClassMetadataBuildingContext $metadataBuildingContext + ); // : ComponentMetadata /** * Gets the names of all mapped classes known to this driver. diff --git a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php index 5de401ac645..ccbb30a2171 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php @@ -66,7 +66,11 @@ public function __construct(AnnotationReader $reader, FileLocator $locator, Fact * * @throws Mapping\MappingException */ - public function loadMetadataForClass($className, Mapping\ClassMetadata $metadata) + public function loadMetadataForClass( + string $className, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) { // IMPORTANT: We're handling $metadata as "parent" metadata here, while building the $className ClassMetadata. $reflectionClass = new \ReflectionClass($className); diff --git a/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php b/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php index 00a49d6b5db..d9c6e18c19f 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php @@ -4,7 +4,7 @@ namespace Doctrine\ORM\Mapping\Driver; -use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping; /** * The PHPDriver includes php files which just populate ClassMetadataInfo @@ -20,7 +20,7 @@ class PHPDriver extends FileDriver { /** - * @var ClassMetadata + * @var Mapping\ClassMetadata */ protected $metadata; @@ -35,7 +35,11 @@ public function __construct($locator) /** * {@inheritDoc} */ - public function loadMetadataForClass($className, ClassMetadata $metadata) + public function loadMetadataForClass( + string $className, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) { $this->metadata = $metadata; diff --git a/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php b/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php index 9a68bcb9a08..2971a70ef1b 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php @@ -4,8 +4,7 @@ namespace Doctrine\ORM\Mapping\Driver; -use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\MappingException; +use Doctrine\ORM\Mapping; /** * The StaticPHPDriver calls a static loadMetadata() method on your entity @@ -60,9 +59,13 @@ public function addPaths(array $paths) /** * {@inheritdoc} */ - public function loadMetadataForClass($className, ClassMetadata $metadata) + public function loadMetadataForClass( + string $className, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) { - $className::loadMetadata($metadata); + $className::loadMetadata($metadata, $metadataBuildingContext); } /** @@ -76,7 +79,7 @@ public function getAllClassNames() } if (!$this->paths) { - throw MappingException::pathRequired(); + throw Mapping\MappingException::pathRequired(); } $classes = []; @@ -84,7 +87,7 @@ public function getAllClassNames() foreach ($this->paths as $path) { if (!is_dir($path)) { - throw MappingException::fileMappingDriversRequireConfiguredDirectoryPath($path); + throw Mapping\MappingException::fileMappingDriversRequireConfiguredDirectoryPath($path); } $iterator = new \RecursiveIteratorIterator( diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 8d50c8248ee..bf59c8c25d7 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -35,7 +35,11 @@ public function __construct($locator, $fileExtension = self::DEFAULT_FILE_EXTENS /** * {@inheritDoc} */ - public function loadMetadataForClass($className, Mapping\ClassMetadata $metadata) + public function loadMetadataForClass( + string $className, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) { /* @var \SimpleXMLElement $xmlRoot */ $xmlRoot = $this->getElement($className); diff --git a/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php b/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php index ab7585f3c15..d3196461824 100644 --- a/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/EmbeddedClassMetadata.php @@ -48,15 +48,15 @@ public function __construct(string $name, string $className, ?MappedSuperClassMe /** * {@inheritdoc} */ - public function getDeclaringClass() + public function getDeclaringClass() : ComponentMetadata { return $this->declaringClass; } /** - * @param ClassMetadata $declaringClass + * @param ComponentMetadata $declaringClass */ - public function setDeclaringClass(ClassMetadata $declaringClass) + public function setDeclaringClass(ComponentMetadata $declaringClass) : void { $this->declaringClass = $declaringClass; } @@ -64,7 +64,7 @@ public function setDeclaringClass(ClassMetadata $declaringClass) /** * {@inheritdoc} */ - public function getName() + public function getName() : string { return $this->name; } @@ -72,7 +72,7 @@ public function getName() /** * {@inheritdoc} */ - public function setName($name) + public function setName($name) : void { $this->name = $name; } @@ -80,7 +80,7 @@ public function setName($name) /** * @param bool $isPrimaryKey */ - public function setPrimaryKey(bool $isPrimaryKey) + public function setPrimaryKey(bool $isPrimaryKey) : void { $this->primaryKey = $isPrimaryKey; } @@ -88,7 +88,7 @@ public function setPrimaryKey(bool $isPrimaryKey) /** * @return bool */ - public function isPrimaryKey() + public function isPrimaryKey() : bool { return $this->primaryKey; } @@ -96,7 +96,7 @@ public function isPrimaryKey() /** * {@inheritdoc} */ - public function setValue($object, $value) + public function setValue($object, $value) : void { $this->reflection->setValue($object, $value); } @@ -112,7 +112,7 @@ public function getValue($object) /** * {@inheritdoc} */ - public function setReflectionProperty(\ReflectionProperty $reflectionProperty) + public function setReflectionProperty(\ReflectionProperty $reflectionProperty) : void { $this->reflection = $reflectionProperty; } @@ -120,7 +120,7 @@ public function setReflectionProperty(\ReflectionProperty $reflectionProperty) /** * {@inheritdoc} */ - public function wakeupReflection(ReflectionService $reflectionService) + public function wakeupReflection(ReflectionService $reflectionService) : void { $this->setReflectionProperty( $reflectionService->getAccessibleProperty($this->declaringClass->getClassName(), $this->name) diff --git a/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php b/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php index b05dcf3fc05..39226996e8b 100644 --- a/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php @@ -118,12 +118,12 @@ abstract class EntityClassMetadata extends ComponentMetadata /** * MappedSuperClassMetadata constructor. * - * @param string $className - * @param ComponentMetadata|null $parent + * @param string $className + * @param ClassMetadataBuildingContext $metadataBuildingContext */ - public function __construct(string $className, ?ComponentMetadata $parent = null) + public function __construct(string $className, ClassMetadataBuildingContext $metadataBuildingContext) { - parent::__construct($className, $parent); + parent::__construct($className); $this->entityName = $className; } @@ -139,7 +139,7 @@ public function getEntityName() : string /** * @param string $entityName */ - public function setEntityName(string $entityName) + public function setEntityName(string $entityName) : void { $this->entityName = $entityName; } @@ -155,7 +155,7 @@ public function getCustomRepositoryClassName() : ?string /** * @param null|string customRepositoryClassName */ - public function setCustomRepositoryClassName(?string $customRepositoryClassName) + public function setCustomRepositoryClassName(?string $customRepositoryClassName) : void { $this->customRepositoryClassName = $customRepositoryClassName; } @@ -171,7 +171,7 @@ public function getDeclaredVersion() : ?Property /** * @param Property $property */ - public function setDeclaredVersion(Property $property) + public function setDeclaredVersion(Property $property) : void { $this->declaredVersion = $property; } @@ -203,7 +203,7 @@ public function isVersioned() : bool /** * @param bool $readOnly */ - public function setReadOnly(bool $readOnly) + public function setReadOnly(bool $readOnly) : void { $this->readOnly = $readOnly; } @@ -221,7 +221,7 @@ public function isReadOnly() : bool * * @throws MappingException */ - public function addSubClass(SubClassMetadata $subClassMetadata) + public function addSubClass(SubClassMetadata $subClassMetadata) : void { $superClassMetadata = $this->getSuperClass(); @@ -276,7 +276,7 @@ public function getSubClassIterator() : \Iterator * * @throws MappingException */ - public function addNamedQuery(string $name, string $dqlQuery) + public function addNamedQuery(string $name, string $dqlQuery) : void { if (isset($this->namedQueries[$name])) { throw MappingException::duplicateQueryMapping($this->entityName, $name); @@ -376,7 +376,7 @@ public function getSqlResultSetMappings() : array /** * {@inheritdoc} */ - public function addDeclaredProperty(Property $property) + public function addDeclaredProperty(Property $property) : void { parent::addDeclaredProperty($property); diff --git a/lib/Doctrine/ORM/Mapping/EntityListenerResolver.php b/lib/Doctrine/ORM/Mapping/EntityListenerResolver.php index cad475ea947..273326de86a 100644 --- a/lib/Doctrine/ORM/Mapping/EntityListenerResolver.php +++ b/lib/Doctrine/ORM/Mapping/EntityListenerResolver.php @@ -20,7 +20,7 @@ interface EntityListenerResolver * * @return void */ - function clear($className = null); + public function clear($className = null); /** * Returns a entity listener instance for the given class name. @@ -29,12 +29,12 @@ function clear($className = null); * * @return object An entity listener */ - function resolve($className); + public function resolve($className); /** * Register a entity listener instance. * * @param object $object An entity listener */ - function register($object); + public function register($object); } diff --git a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php index 2f6c3d76c8d..c84a43dad2a 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/ClassMetadataExporter.php @@ -160,7 +160,7 @@ private function exportProperties(Mapping\ClassMetadata $metadata, int $indentat $bodyIndentation = str_repeat(self::INDENTATION, $indentationLevel + 1); $lines = []; - foreach ($metadata->getProperties() as $name => $property) { + foreach ($metadata->getDeclaredPropertiesIterator() as $name => $property) { $lines[] = null; $lines[] = $bodyIndentation . '// Property: ' . $name; $lines[] = $this->exportProperty($property, $indentationLevel + 1); diff --git a/lib/Doctrine/ORM/Mapping/FetchMode.php b/lib/Doctrine/ORM/Mapping/FetchMode.php index ed88e97d66f..ccba60af42f 100644 --- a/lib/Doctrine/ORM/Mapping/FetchMode.php +++ b/lib/Doctrine/ORM/Mapping/FetchMode.php @@ -5,6 +5,14 @@ namespace Doctrine\ORM\Mapping; +/** + * Class FetchMode + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ final class FetchMode { /** diff --git a/lib/Doctrine/ORM/Mapping/FieldMetadata.php b/lib/Doctrine/ORM/Mapping/FieldMetadata.php index 4998e8caa51..208e5ae09f5 100644 --- a/lib/Doctrine/ORM/Mapping/FieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/FieldMetadata.php @@ -9,9 +9,17 @@ use Doctrine\ORM\Reflection\ReflectionService; use Doctrine\ORM\Sequencing\Generator; +/** + * Class FieldMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ class FieldMetadata extends LocalColumnMetadata implements Property { - /** @var ClassMetadata */ + /** @var ComponentMetadata */ protected $declaringClass; /** @var \ReflectionProperty */ @@ -44,15 +52,15 @@ public function __construct(string $name) /** * {@inheritdoc} */ - public function getDeclaringClass() + public function getDeclaringClass() : ComponentMetadata { return $this->declaringClass; } /** - * @param ClassMetadata $declaringClass + * @param ComponentMetadata $declaringClass */ - public function setDeclaringClass(ClassMetadata $declaringClass) + public function setDeclaringClass(ComponentMetadata $declaringClass) : void { $this->declaringClass = $declaringClass; } @@ -60,7 +68,7 @@ public function setDeclaringClass(ClassMetadata $declaringClass) /** * {@inheritdoc} */ - public function getName() + public function getName() : string { return $this->name; } @@ -68,7 +76,7 @@ public function getName() /** * {@inheritdoc} */ - public function setValue($object, $value) + public function setValue($object, $value) : void { $this->reflection->setValue($object, $value); } @@ -84,7 +92,7 @@ public function getValue($object) /** * {@inheritdoc} */ - public function isAssociation() + public function isAssociation() : bool { return false; } @@ -92,7 +100,7 @@ public function isAssociation() /** * {@inheritdoc} */ - public function isField() + public function isField() : bool { return true; } @@ -100,7 +108,7 @@ public function isField() /** * {@inheritdoc} */ - public function setReflectionProperty(\ReflectionProperty $reflectionProperty) + public function setReflectionProperty(\ReflectionProperty $reflectionProperty) : void { $this->reflection = $reflectionProperty; } @@ -108,7 +116,7 @@ public function setReflectionProperty(\ReflectionProperty $reflectionProperty) /** * {@inheritdoc} */ - public function wakeupReflection(ReflectionService $reflectionService) + public function wakeupReflection(ReflectionService $reflectionService) : void { $this->setReflectionProperty( $reflectionService->getAccessibleProperty($this->declaringClass->getClassName(), $this->name) diff --git a/lib/Doctrine/ORM/Mapping/GeneratorType.php b/lib/Doctrine/ORM/Mapping/GeneratorType.php index 99157abd16e..24ab6f7f6f4 100644 --- a/lib/Doctrine/ORM/Mapping/GeneratorType.php +++ b/lib/Doctrine/ORM/Mapping/GeneratorType.php @@ -5,6 +5,14 @@ namespace Doctrine\ORM\Mapping; +/** + * Class GeneratorType + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ final class GeneratorType { /** diff --git a/lib/Doctrine/ORM/Mapping/InheritanceType.php b/lib/Doctrine/ORM/Mapping/InheritanceType.php index 9b3488b7ccb..dab853231e6 100644 --- a/lib/Doctrine/ORM/Mapping/InheritanceType.php +++ b/lib/Doctrine/ORM/Mapping/InheritanceType.php @@ -5,6 +5,14 @@ namespace Doctrine\ORM\Mapping; +/** + * Class InheritanceType + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ final class InheritanceType { /** diff --git a/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php b/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php index 133f55ebd71..cae19981785 100644 --- a/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/JoinColumnMetadata.php @@ -5,12 +5,20 @@ namespace Doctrine\ORM\Mapping; +/** + * Class JoinColumnMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ class JoinColumnMetadata extends ColumnMetadata { - /** @var string */ + /** @var string|null */ protected $referencedColumnName; - /** @var string */ + /** @var string|null */ protected $aliasedName; /** @var boolean */ @@ -20,9 +28,9 @@ class JoinColumnMetadata extends ColumnMetadata protected $onDelete = ''; /** - * @return string + * @return string|null */ - public function getReferencedColumnName() + public function getReferencedColumnName() : ?string { return $this->referencedColumnName; } @@ -30,15 +38,15 @@ public function getReferencedColumnName() /** * @param string $referencedColumnName */ - public function setReferencedColumnName(string $referencedColumnName) + public function setReferencedColumnName(string $referencedColumnName) : void { $this->referencedColumnName = $referencedColumnName; } /** - * @return string + * @return string|null */ - public function getAliasedName() + public function getAliasedName() : ?string { return $this->aliasedName; } @@ -46,7 +54,7 @@ public function getAliasedName() /** * @param string $aliasedName */ - public function setAliasedName(string $aliasedName) + public function setAliasedName(string $aliasedName) : void { $this->aliasedName = $aliasedName; } @@ -54,7 +62,7 @@ public function setAliasedName(string $aliasedName) /** * @return string */ - public function getOnDelete() + public function getOnDelete() : string { return $this->onDelete; } @@ -62,7 +70,7 @@ public function getOnDelete() /** * @param string $onDelete */ - public function setOnDelete(string $onDelete) + public function setOnDelete(string $onDelete) : void { $this->onDelete = strtoupper($onDelete); } @@ -70,7 +78,7 @@ public function setOnDelete(string $onDelete) /** * @return bool */ - public function isOnDeleteCascade() + public function isOnDeleteCascade() : bool { return $this->onDelete === 'CASCADE'; } diff --git a/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php b/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php index 9e8c70e05ce..da6955a9fed 100644 --- a/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php +++ b/lib/Doctrine/ORM/Mapping/JoinTableMetadata.php @@ -5,6 +5,14 @@ namespace Doctrine\ORM\Mapping; +/** + * Class JoinTableMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ final class JoinTableMetadata extends TableMetadata { /** @var array */ @@ -16,7 +24,7 @@ final class JoinTableMetadata extends TableMetadata /** * @return bool */ - public function hasColumns() + public function hasColumns() : bool { return $this->joinColumns || $this->inverseJoinColumns; } @@ -24,7 +32,7 @@ public function hasColumns() /** * @return array */ - public function getJoinColumns() + public function getJoinColumns() : array { return $this->joinColumns; } @@ -32,7 +40,7 @@ public function getJoinColumns() /** * @param JoinColumnMetadata $joinColumn */ - public function addJoinColumn(JoinColumnMetadata $joinColumn) + public function addJoinColumn(JoinColumnMetadata $joinColumn) : void { $this->joinColumns[] = $joinColumn; } @@ -40,7 +48,7 @@ public function addJoinColumn(JoinColumnMetadata $joinColumn) /** * @return array */ - public function getInverseJoinColumns() + public function getInverseJoinColumns() : array { return $this->inverseJoinColumns; } @@ -48,7 +56,7 @@ public function getInverseJoinColumns() /** * @param JoinColumnMetadata $joinColumn */ - public function addInverseJoinColumn(JoinColumnMetadata $joinColumn) + public function addInverseJoinColumn(JoinColumnMetadata $joinColumn) : void { $this->inverseJoinColumns[] = $joinColumn; } diff --git a/lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php b/lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php index 24e4dd97ba4..acebbe87334 100644 --- a/lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php +++ b/lib/Doctrine/ORM/Mapping/LocalColumnMetadata.php @@ -5,20 +5,28 @@ namespace Doctrine\ORM\Mapping; +/** + * Class LocalColumnMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ abstract class LocalColumnMetadata extends ColumnMetadata { /** - * @var integer + * @var int|null */ protected $length; /** - * @var integer + * @var int|null */ protected $scale; /** - * @var integer + * @var int|null */ protected $precision; @@ -28,9 +36,9 @@ abstract class LocalColumnMetadata extends ColumnMetadata protected $valueGenerator; /** - * @return int + * @return int|null */ - public function getLength() + public function getLength() : ?int { return $this->length; } @@ -38,15 +46,15 @@ public function getLength() /** * @param int $length */ - public function setLength(int $length) + public function setLength(int $length) : void { $this->length = $length; } /** - * @return int + * @return int|null */ - public function getScale() + public function getScale() : ?int { return $this->scale; } @@ -54,15 +62,15 @@ public function getScale() /** * @param int $scale */ - public function setScale(int $scale) + public function setScale(int $scale) : void { $this->scale = $scale; } /** - * @return int + * @return int|null */ - public function getPrecision() + public function getPrecision() : ?int { return $this->precision; } @@ -70,22 +78,31 @@ public function getPrecision() /** * @param int $precision */ - public function setPrecision(int $precision) + public function setPrecision(int $precision) : void { $this->precision = $precision; } - public function hasValueGenerator(): bool + /** + * @return bool + */ + public function hasValueGenerator() : bool { return $this->valueGenerator !== null; } - public function getValueGenerator(): ?ValueGeneratorMetadata + /** + * @return ValueGeneratorMetadata|null + */ + public function getValueGenerator() : ?ValueGeneratorMetadata { return $this->valueGenerator; } - public function setValueGenerator(?ValueGeneratorMetadata $valueGenerator): void + /** + * @param ValueGeneratorMetadata|null $valueGenerator + */ + public function setValueGenerator(?ValueGeneratorMetadata $valueGenerator) : void { $this->valueGenerator = $valueGenerator; } diff --git a/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php index 806296f51ec..00ec1ec1dd2 100644 --- a/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ManyToManyAssociationMetadata.php @@ -4,6 +4,14 @@ namespace Doctrine\ORM\Mapping; +/** + * Class ManyToManyAssociationMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ class ManyToManyAssociationMetadata extends ToManyAssociationMetadata { /** @var null|JoinTableMetadata */ @@ -12,7 +20,7 @@ class ManyToManyAssociationMetadata extends ToManyAssociationMetadata /** * @param null|JoinTableMetadata $joinTable */ - public function setJoinTable(JoinTableMetadata $joinTable = null) + public function setJoinTable(JoinTableMetadata $joinTable = null) : void { $this->joinTable = $joinTable; } @@ -20,7 +28,7 @@ public function setJoinTable(JoinTableMetadata $joinTable = null) /** * @return JoinTableMetadata|null */ - public function getJoinTable() + public function getJoinTable() : ?JoinTableMetadata { return $this->joinTable; } diff --git a/lib/Doctrine/ORM/Mapping/ManyToOneAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ManyToOneAssociationMetadata.php index 5fd387e4dfb..77bbcbd15fe 100644 --- a/lib/Doctrine/ORM/Mapping/ManyToOneAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ManyToOneAssociationMetadata.php @@ -4,6 +4,14 @@ namespace Doctrine\ORM\Mapping; +/** + * Class ManyToOneAssociationMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ class ManyToOneAssociationMetadata extends ToOneAssociationMetadata { } diff --git a/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php b/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php index d816ac51217..e8bfef07809 100644 --- a/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/MappedSuperClassMetadata.php @@ -25,17 +25,6 @@ class MappedSuperClassMetadata extends ComponentMetadata */ protected $declaredVersion; - /** - * MappedSuperClassMetadata constructor. - * - * @param string $className - * @param MappedSuperClassMetadata|null $parent - */ - public function __construct(string $className, ?MappedSuperClassMetadata $parent = null) - { - parent::__construct($className, $parent); - } - /** * @return null|string */ @@ -47,7 +36,7 @@ public function getCustomRepositoryClassName() : ?string /** * @param null|string customRepositoryClassName */ - public function setCustomRepositoryClassName(?string $customRepositoryClassName) + public function setCustomRepositoryClassName(?string $customRepositoryClassName) : void { $this->customRepositoryClassName = $customRepositoryClassName; } @@ -63,7 +52,7 @@ public function getDeclaredVersion() : ?Property /** * @param Property $property */ - public function setDeclaredVersion(Property $property) + public function setDeclaredVersion(Property $property) : void { $this->declaredVersion = $property; } @@ -95,7 +84,7 @@ public function isVersioned() : bool /** * {@inheritdoc} */ - public function addDeclaredProperty(Property $property) + public function addDeclaredProperty(Property $property) : void { parent::addDeclaredProperty($property); diff --git a/lib/Doctrine/ORM/Mapping/OneToManyAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/OneToManyAssociationMetadata.php index 717911238a0..f62af06ab69 100644 --- a/lib/Doctrine/ORM/Mapping/OneToManyAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/OneToManyAssociationMetadata.php @@ -4,6 +4,14 @@ namespace Doctrine\ORM\Mapping; +/** + * Class OneToManyAssociationMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ class OneToManyAssociationMetadata extends ToManyAssociationMetadata { } diff --git a/lib/Doctrine/ORM/Mapping/OneToOneAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/OneToOneAssociationMetadata.php index 0df381540f7..8561e69a124 100644 --- a/lib/Doctrine/ORM/Mapping/OneToOneAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/OneToOneAssociationMetadata.php @@ -4,6 +4,14 @@ namespace Doctrine\ORM\Mapping; +/** + * Class OneToOneAssociationMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ class OneToOneAssociationMetadata extends ToOneAssociationMetadata { } diff --git a/lib/Doctrine/ORM/Mapping/Property.php b/lib/Doctrine/ORM/Mapping/Property.php index a785c5ae3db..6bc8d3effa2 100644 --- a/lib/Doctrine/ORM/Mapping/Property.php +++ b/lib/Doctrine/ORM/Mapping/Property.php @@ -9,20 +9,20 @@ interface Property { /** - * @param ClassMetadata $declaringClass + * @param ComponentMetadata $declaringClass */ - public function setDeclaringClass(ClassMetadata $declaringClass); + public function setDeclaringClass(ComponentMetadata $declaringClass) : void; /** - * @return ClassMetadata + * @return ComponentMetadata */ - public function getDeclaringClass(); + public function getDeclaringClass() : ComponentMetadata; /** * @param object $object * @param mixed $value */ - public function setValue($object, $value); + public function setValue($object, $value) : void; /** * @param object $object @@ -34,20 +34,20 @@ public function getValue($object); /** * @return string */ - public function getName(); + public function getName() : string; /** * @return bool */ - public function isPrimaryKey(); + public function isPrimaryKey() : bool; /** * @param \ReflectionProperty $reflectionProperty */ - public function setReflectionProperty(\ReflectionProperty $reflectionProperty); + public function setReflectionProperty(\ReflectionProperty $reflectionProperty) : void; /** * @param ReflectionService $reflectionService */ - public function wakeupReflection(ReflectionService $reflectionService); + public function wakeupReflection(ReflectionService $reflectionService) : void; } diff --git a/lib/Doctrine/ORM/Mapping/ReflectionEmbeddedProperty.php b/lib/Doctrine/ORM/Mapping/ReflectionEmbeddedProperty.php index 82bed104c6b..2eb7c9e2ee9 100644 --- a/lib/Doctrine/ORM/Mapping/ReflectionEmbeddedProperty.php +++ b/lib/Doctrine/ORM/Mapping/ReflectionEmbeddedProperty.php @@ -69,7 +69,7 @@ public function getValue($object = null) /** * {@inheritDoc} */ - public function setValue($object, $value = null) + public function setValue($object, $value = null) : void { $embeddedObject = $this->parentProperty->getValue($object); diff --git a/lib/Doctrine/ORM/Mapping/RootClassMetadata.php b/lib/Doctrine/ORM/Mapping/RootClassMetadata.php index 6af35fafe64..ba9d5f02747 100644 --- a/lib/Doctrine/ORM/Mapping/RootClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/RootClassMetadata.php @@ -17,17 +17,6 @@ */ class RootClassMetadata extends EntityClassMetadata { - /** - * RootClassMetadata constructor. - * - * @param string $className - * @param MappedSuperClassMetadata|null $parent - */ - public function __construct(string $className, ?MappedSuperClassMetadata $parent = null) - { - parent::__construct($className, $parent); - } - /** * @return RootClassMetadata */ diff --git a/lib/Doctrine/ORM/Mapping/SecondPass.php b/lib/Doctrine/ORM/Mapping/SecondPass.php new file mode 100644 index 00000000000..299d4883275 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/SecondPass.php @@ -0,0 +1,33 @@ +. + */ + +declare(strict_types=1); + +namespace Doctrine\ORM\Mapping; + +interface SecondPass +{ + /** + * @param ClassMetadataBuildingContext $metadataBuildingContext + * + * @return void + */ + public function process(ClassMetadataBuildingContext $metadataBuildingContext) : void; +} diff --git a/lib/Doctrine/ORM/Mapping/SubClassMetadata.php b/lib/Doctrine/ORM/Mapping/SubClassMetadata.php index 756c44c450b..5f10f0f04bc 100644 --- a/lib/Doctrine/ORM/Mapping/SubClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/SubClassMetadata.php @@ -17,17 +17,6 @@ */ class SubClassMetadata extends EntityClassMetadata { - /** - * SubClassMetadata constructor. - * - * @param string $className - * @param EntityClassMetadata $parent - */ - public function __construct(string $className, EntityClassMetadata $parent) - { - parent::__construct($className, $parent); - } - /** * @return RootClassMetadata */ diff --git a/lib/Doctrine/ORM/Mapping/TableMetadata.php b/lib/Doctrine/ORM/Mapping/TableMetadata.php index 179ca80dd9c..5294aa447f5 100644 --- a/lib/Doctrine/ORM/Mapping/TableMetadata.php +++ b/lib/Doctrine/ORM/Mapping/TableMetadata.php @@ -9,10 +9,10 @@ class TableMetadata { - /** @var string */ + /** @var string|null */ protected $schema; - /** @var string */ + /** @var string|null */ protected $name; /** @var array */ @@ -25,9 +25,9 @@ class TableMetadata protected $uniqueConstraints = []; /** - * @return string + * @return string|null */ - public function getSchema() + public function getSchema() : ?string { return $this->schema; } @@ -35,7 +35,7 @@ public function getSchema() /** * @param string $schema */ - public function setSchema(string $schema) + public function setSchema(string $schema) : void { $this->schema = $schema; } @@ -43,15 +43,15 @@ public function setSchema(string $schema) /** * @param string $name */ - public function setName(string $name) + public function setName(string $name) : void { $this->name = $name; } /** - * @return string + * @return string|null */ - public function getName() + public function getName() : ?string { return $this->name; } @@ -61,7 +61,7 @@ public function getName() * * @return string */ - public function getQuotedQualifiedName(AbstractPlatform $platform) + public function getQuotedQualifiedName(AbstractPlatform $platform) : string { if (!$this->schema) { return $platform->quoteIdentifier($this->name); @@ -75,7 +75,7 @@ public function getQuotedQualifiedName(AbstractPlatform $platform) /** * @return array */ - public function getOptions() + public function getOptions() : array { return $this->options; } @@ -83,7 +83,7 @@ public function getOptions() /** * @param array $options */ - public function setOptions(array $options) + public function setOptions(array $options) : void { $this->options = $options; } @@ -103,7 +103,7 @@ public function getOption(string $name) * * @return bool */ - public function hasOption(string $name) + public function hasOption(string $name) : bool { return isset($this->options[$name]); } @@ -112,7 +112,7 @@ public function hasOption(string $name) * @param string $name * @param mixed $value */ - public function addOption(string $name, $value) + public function addOption(string $name, $value) : void { $this->options[$name] = $value; } @@ -120,7 +120,7 @@ public function addOption(string $name, $value) /** * @return array */ - public function getIndexes() + public function getIndexes() : array { return $this->indexes; } @@ -130,7 +130,7 @@ public function getIndexes() * * @return array */ - public function getIndex(string $name) + public function getIndex(string $name) : array { return $this->indexes[$name]; } @@ -140,7 +140,7 @@ public function getIndex(string $name) * * @return bool */ - public function hasIndex(string $name) + public function hasIndex(string $name) : bool { return isset($this->indexes[$name]); } @@ -148,7 +148,7 @@ public function hasIndex(string $name) /** * @param array $index */ - public function addIndex(array $index) + public function addIndex(array $index) : void { if (! isset($index['name'])) { $this->indexes[] = $index; @@ -162,7 +162,7 @@ public function addIndex(array $index) /** * @return array */ - public function getUniqueConstraints() + public function getUniqueConstraints() : array { return $this->uniqueConstraints; } @@ -172,7 +172,7 @@ public function getUniqueConstraints() * * @return array */ - public function getUniqueConstraint(string $name) + public function getUniqueConstraint(string $name) : array { return $this->uniqueConstraints[$name]; } @@ -182,7 +182,7 @@ public function getUniqueConstraint(string $name) * * @return bool */ - public function hasUniqueConstraint(string $name) + public function hasUniqueConstraint(string $name) : bool { return isset($this->uniqueConstraints[$name]); } @@ -190,7 +190,7 @@ public function hasUniqueConstraint(string $name) /** * @param array $constraint */ - public function addUniqueConstraint(array $constraint) + public function addUniqueConstraint(array $constraint) : void { if (! isset($constraint['name'])) { $this->uniqueConstraints[] = $constraint; diff --git a/lib/Doctrine/ORM/Mapping/TableOwner.php b/lib/Doctrine/ORM/Mapping/TableOwner.php index 67e7bdd9e69..d7677e028c9 100644 --- a/lib/Doctrine/ORM/Mapping/TableOwner.php +++ b/lib/Doctrine/ORM/Mapping/TableOwner.php @@ -22,5 +22,5 @@ interface TableOwner * * @return void */ - public function setTable(TableMetadata $table); + public function setTable(TableMetadata $table) : void; } diff --git a/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php index b15f5bcf7da..6f969dac77d 100644 --- a/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ToManyAssociationMetadata.php @@ -9,18 +9,26 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\PersistentCollection; +/** + * Class ToManyAssociationMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ class ToManyAssociationMetadata extends AssociationMetadata { /** @var array */ private $orderBy = []; - + /** @var null|string */ private $indexedBy; /** * @param array $orderBy */ - public function setOrderBy(array $orderBy) + public function setOrderBy(array $orderBy) : void { $this->orderBy = $orderBy; } @@ -28,7 +36,7 @@ public function setOrderBy(array $orderBy) /** * @return array */ - public function getOrderBy() + public function getOrderBy() : array { return $this->orderBy; } @@ -36,7 +44,7 @@ public function getOrderBy() /** * @param null|string $indexedBy */ - public function setIndexedBy(string $indexedBy = null) + public function setIndexedBy(string $indexedBy = null) : void { $this->indexedBy = $indexedBy; } @@ -44,7 +52,7 @@ public function setIndexedBy(string $indexedBy = null) /** * @return null|string */ - public function getIndexedBy() + public function getIndexedBy() : ?string { return $this->indexedBy; } @@ -56,7 +64,7 @@ public function getIndexedBy() * * @return PersistentCollection */ - public function wrap($owner, $collection, EntityManagerInterface $entityManager) + public function wrap($owner, $collection, EntityManagerInterface $entityManager) : PersistentCollection { if ($collection instanceof PersistentCollection) { if ($collection->getOwner() === $owner) { diff --git a/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php b/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php index 5ac5046b7dc..b0f8297865d 100644 --- a/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ToOneAssociationMetadata.php @@ -4,6 +4,14 @@ namespace Doctrine\ORM\Mapping; +/** + * Class ToOneAssociationMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ class ToOneAssociationMetadata extends AssociationMetadata { /** @@ -14,7 +22,7 @@ class ToOneAssociationMetadata extends AssociationMetadata /** * @param array $joinColumns */ - public function setJoinColumns(array $joinColumns) + public function setJoinColumns(array $joinColumns) : void { $this->joinColumns = $joinColumns; } @@ -22,7 +30,7 @@ public function setJoinColumns(array $joinColumns) /** * @return array */ - public function getJoinColumns() + public function getJoinColumns() : array { return $this->joinColumns; } @@ -30,7 +38,7 @@ public function getJoinColumns() /** * @param JoinColumnMetadata $joinColumn */ - public function addJoinColumn(JoinColumnMetadata $joinColumn) + public function addJoinColumn(JoinColumnMetadata $joinColumn) : void { $this->joinColumns[] = $joinColumn; } diff --git a/lib/Doctrine/ORM/Mapping/TransientMetadata.php b/lib/Doctrine/ORM/Mapping/TransientMetadata.php index f2e5fc29926..2c31e38627c 100644 --- a/lib/Doctrine/ORM/Mapping/TransientMetadata.php +++ b/lib/Doctrine/ORM/Mapping/TransientMetadata.php @@ -7,6 +7,14 @@ use Doctrine\ORM\Reflection\ReflectionService; +/** + * Class TransientMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ class TransientMetadata implements Property { /** @var ClassMetadata */ @@ -31,15 +39,15 @@ public function __construct(string $name) /** * {@inheritdoc} */ - public function getDeclaringClass() + public function getDeclaringClass() : ComponentMetadata { return $this->declaringClass; } /** - * @param ClassMetadata $declaringClass + * @param ComponentMetadata $declaringClass */ - public function setDeclaringClass(ClassMetadata $declaringClass) + public function setDeclaringClass(ComponentMetadata $declaringClass) : void { $this->declaringClass = $declaringClass; } @@ -47,7 +55,7 @@ public function setDeclaringClass(ClassMetadata $declaringClass) /** * {@inheritdoc} */ - public function getName() + public function getName() : string { return $this->name; } @@ -55,7 +63,7 @@ public function getName() /** * {@inheritdoc} */ - public function isPrimaryKey() + public function isPrimaryKey() : bool { return false; } @@ -63,7 +71,7 @@ public function isPrimaryKey() /** * {@inheritdoc} */ - public function setValue($object, $value) + public function setValue($object, $value) : void { $this->reflection->setValue($object, $value); } @@ -79,7 +87,7 @@ public function getValue($object) /** * {@inheritdoc} */ - public function setReflectionProperty(\ReflectionProperty $reflectionProperty) + public function setReflectionProperty(\ReflectionProperty $reflectionProperty) : void { $this->reflection = $reflectionProperty; } @@ -87,7 +95,7 @@ public function setReflectionProperty(\ReflectionProperty $reflectionProperty) /** * {@inheritdoc} */ - public function wakeupReflection(ReflectionService $reflectionService) + public function wakeupReflection(ReflectionService $reflectionService) : void { $this->setReflectionProperty( $reflectionService->getAccessibleProperty($this->declaringClass->getClassName(), $this->name) diff --git a/lib/Doctrine/ORM/Mapping/ValueGeneratorMetadata.php b/lib/Doctrine/ORM/Mapping/ValueGeneratorMetadata.php index 411478a07d0..7fb84af36ce 100644 --- a/lib/Doctrine/ORM/Mapping/ValueGeneratorMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ValueGeneratorMetadata.php @@ -5,6 +5,14 @@ namespace Doctrine\ORM\Mapping; +/** + * Class ValueGeneratorMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ class ValueGeneratorMetadata { /** @var string */ @@ -13,6 +21,12 @@ class ValueGeneratorMetadata /** @var array */ protected $definition; + /** + * ValueGeneratorMetadata constructor. + * + * @param string $type + * @param array $definition + */ public function __construct(string $type, array $definition = []) { $this->type = $type; diff --git a/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php b/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php index dddb6856133..e17fc3de8cd 100644 --- a/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php +++ b/lib/Doctrine/ORM/Mapping/VersionFieldMetadata.php @@ -5,6 +5,14 @@ namespace Doctrine\ORM\Mapping; +/** + * Class VersionFieldMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @author Guilherme Blanco + */ final class VersionFieldMetadata extends FieldMetadata { } diff --git a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php index a966ab39300..bf57ea668e9 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php @@ -7,8 +7,11 @@ use Doctrine\Common\Collections\Criteria; use Doctrine\ORM\Mapping\AssociationMetadata; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; use Doctrine\ORM\Mapping\ToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\Persisters\SqlValueVisitor; use Doctrine\ORM\PersistentCollection; use Doctrine\ORM\Query; @@ -40,7 +43,14 @@ public function delete(PersistentCollection $collection) $types = []; foreach ($joinTable->getJoinColumns() as $joinColumn) { - $types[] = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $class, $this->em); + /** @var JoinColumnMetadata $joinColumn */ + $referencedColumnName = $joinColumn->getReferencedColumnName(); + + if (! $joinColumn->getType()) { + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $class, $this->em)); + } + + $types[] = $joinColumn->getType(); } $sql = $this->getDeleteSQL($collection); @@ -114,7 +124,7 @@ public function count(PersistentCollection $collection) $params = []; $types = []; $association = $collection->getMapping(); - $id = $this->uow->getEntityIdentifier($collection->getOwner()); + $identifier = $this->uow->getEntityIdentifier($collection->getOwner()); $sourceClass = $this->em->getClassMetadata($association->getSourceEntity()); $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); $owningAssociation = ! $association->isOwningSide() @@ -130,15 +140,16 @@ public function count(PersistentCollection $collection) ; foreach ($joinColumns as $joinColumn) { - $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); - $referencedName = $joinColumn->getReferencedColumnName(); + /** @var JoinColumnMetadata $joinColumn */ + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $referencedColumnName = $joinColumn->getReferencedColumnName(); if (! $joinColumn->getType()) { - $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedName, $sourceClass, $this->em)); + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $sourceClass, $this->em)); } - $conditions[] = 't.' . $quotedColumnName . ' = ?'; - $params[] = $id[$sourceClass->fieldNames[$referencedName]]; + $conditions[] = sprintf('t.%s = ?', $quotedColumnName); + $params[] = $identifier[$sourceClass->fieldNames[$referencedColumnName]]; $types[] = $joinColumn->getType(); } @@ -254,17 +265,16 @@ public function loadCriteria(PersistentCollection $collection, Criteria $criteri } foreach ($joinColumns as $joinColumn) { - $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); - $referencedName = $joinColumn->getReferencedColumnName(); + /** @var JoinColumnMetadata $joinColumn */ + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $referencedColumnName = $joinColumn->getReferencedColumnName(); if (! $joinColumn->getType()) { - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($referencedName, $ownerMetadata, $this->em) - ); + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $ownerMetadata, $this->em)); } $whereClauses[] = sprintf('t.%s = ?', $quotedColumnName); - $params[] = $identifier[$ownerMetadata->fieldNames[$referencedName]]; + $params[] = $identifier[$ownerMetadata->fieldNames[$referencedColumnName]]; $types[] = $joinColumn->getType(); } @@ -464,13 +474,29 @@ protected function getDeleteRowSQL(PersistentCollection $collection) $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); foreach ($joinTable->getJoinColumns() as $joinColumn) { - $columns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); - $types[] = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $class, $this->em); + /** @var JoinColumnMetadata $joinColumn */ + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $referencedColumnName = $joinColumn->getReferencedColumnName(); + + if (! $joinColumn->getType()) { + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $class, $this->em)); + } + + $columns[] = $quotedColumnName; + $types[] = $joinColumn->getType(); } foreach ($joinTable->getInverseJoinColumns() as $joinColumn) { - $columns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); - $types[] = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); + /** @var JoinColumnMetadata $joinColumn */ + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $referencedColumnName = $joinColumn->getReferencedColumnName(); + + if (! $joinColumn->getType()) { + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em)); + } + + $columns[] = $quotedColumnName; + $types[] = $joinColumn->getType(); } return [ @@ -515,13 +541,29 @@ protected function getInsertRowSQL(PersistentCollection $collection) $joinTableName = $joinTable->getQuotedQualifiedName($this->platform); foreach ($joinTable->getJoinColumns() as $joinColumn) { - $columns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); - $types[] = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $class, $this->em); + /** @var JoinColumnMetadata $joinColumn */ + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $referencedColumnName = $joinColumn->getReferencedColumnName(); + + if (! $joinColumn->getType()) { + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $class, $this->em)); + } + + $columns[] = $quotedColumnName; + $types[] = $joinColumn->getType(); } foreach ($joinTable->getInverseJoinColumns() as $joinColumn) { - $columns[] = $this->platform->quoteIdentifier($joinColumn->getColumnName()); - $types[] = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); + /** @var JoinColumnMetadata $joinColumn */ + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $referencedColumnName = $joinColumn->getReferencedColumnName(); + + if (! $joinColumn->getType()) { + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em)); + } + + $columns[] = $quotedColumnName; + $types[] = $joinColumn->getType(); } $columnNamesAsString = implode(', ', $columns); @@ -599,7 +641,7 @@ private function getJoinTableRestrictionsWithKey(PersistentCollection $collectio $association = $collection->getMapping(); $owningAssociation = $association; $indexBy = $owningAssociation->getIndexedBy(); - $id = $this->uow->getEntityIdentifier($collection->getOwner()); + $identifier = $this->uow->getEntityIdentifier($collection->getOwner()); $sourceClass = $this->em->getClassMetadata($owningAssociation->getSourceEntity()); $targetClass = $this->em->getClassMetadata($owningAssociation->getTargetEntity()); @@ -625,6 +667,7 @@ private function getJoinTableRestrictionsWithKey(PersistentCollection $collectio $joinConditions = []; foreach ($joinColumns as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $quotedReferencedColumnName = $this->platform->quoteIdentifier($joinColumn->getReferencedColumnName()); @@ -633,34 +676,48 @@ private function getJoinTableRestrictionsWithKey(PersistentCollection $collectio $tableName = $targetClass->table->getQuotedQualifiedName($this->platform); $quotedJoinTable .= ' JOIN ' . $tableName . ' tr ON ' . implode(' AND ', $joinConditions); - $columnName = $targetClass->getProperty($indexBy)->getColumnName(); + $indexByProperty = $targetClass->getProperty($indexBy); - $whereClauses[] = 'tr.' . $this->platform->quoteIdentifier($columnName) . ' = ?'; - $params[] = $key; - $types[] = PersisterHelper::getTypeOfColumn($columnName, $targetClass, $this->em); + switch (true) { + case ($indexByProperty instanceof FieldMetadata): + $quotedColumnName = $this->platform->quoteIdentifier($indexByProperty->getColumnName()); + + $whereClauses[] = sprintf('tr.%s = ?', $quotedColumnName); + $params[] = $key; + $types[] = $indexByProperty->getType(); + break; + + case ($indexByProperty instanceof ToOneAssociationMetadata && $indexByProperty->isOwningSide()): + // Cannot be supported because PHP does not accept objects as keys. =( + break; + } } foreach ($inverseJoinColumns as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $referencedColumnName = $joinColumn->getReferencedColumnName(); + if (! $joinColumn->getType()) { - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $sourceClass, $this->em) - ); + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $sourceClass, $this->em)); } - $whereClauses[] = 't.' . $this->platform->quoteIdentifier($joinColumn->getColumnName()) . ' = ?'; - $params[] = $id[$sourceClass->fieldNames[$joinColumn->getReferencedColumnName()]]; + $whereClauses[] = sprintf('t.%s = ?', $quotedColumnName); + $params[] = $identifier[$sourceClass->fieldNames[$joinColumn->getReferencedColumnName()]]; $types[] = $joinColumn->getType(); } - if ( ! $joinNeeded) { + if (! $joinNeeded) { foreach ($joinColumns as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $referencedColumnName = $joinColumn->getReferencedColumnName(); + if (! $joinColumn->getType()) { - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) - ); + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em)); } - $whereClauses[] = 't.' . $this->platform->quoteIdentifier($joinColumn->getColumnName()) . ' = ?'; + $whereClauses[] = sprintf('t.%s = ?', $quotedColumnName); $params[] = $key; $types[] = $joinColumn->getType(); } @@ -695,17 +752,17 @@ private function getJoinTableRestrictions(PersistentCollection $collection, $ele $owningAssociation = $association; if (! $association->isOwningSide()) { - $sourceClass = $this->em->getClassMetadata($association->getTargetEntity()); - $targetClass = $this->em->getClassMetadata($association->getSourceEntity()); - $sourceId = $this->uow->getEntityIdentifier($element); - $targetId = $this->uow->getEntityIdentifier($collection->getOwner()); + $sourceClass = $this->em->getClassMetadata($association->getTargetEntity()); + $targetClass = $this->em->getClassMetadata($association->getSourceEntity()); + $sourceIdentifier = $this->uow->getEntityIdentifier($element); + $targetIdentifier = $this->uow->getEntityIdentifier($collection->getOwner()); $owningAssociation = $sourceClass->getProperty($association->getMappedBy()); } else { - $sourceClass = $this->em->getClassMetadata($association->getSourceEntity()); - $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); - $sourceId = $this->uow->getEntityIdentifier($collection->getOwner()); - $targetId = $this->uow->getEntityIdentifier($element); + $sourceClass = $this->em->getClassMetadata($association->getSourceEntity()); + $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); + $sourceIdentifier = $this->uow->getEntityIdentifier($collection->getOwner()); + $targetIdentifier = $this->uow->getEntityIdentifier($element); } $joinTable = $owningAssociation->getJoinTable(); @@ -716,32 +773,30 @@ private function getJoinTableRestrictions(PersistentCollection $collection, $ele $types = []; foreach ($joinTable->getJoinColumns() as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $referencedColumnName = $joinColumn->getReferencedColumnName(); if (! $joinColumn->getType()) { - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($referencedColumnName, $sourceClass, $this->em) - ); + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $sourceClass, $this->em)); } $whereClauses[] = ($addFilters ? 't.' : '') . $quotedColumnName . ' = ?'; - $params[] = $sourceId[$sourceClass->fieldNames[$referencedColumnName]]; + $params[] = $sourceIdentifier[$sourceClass->fieldNames[$referencedColumnName]]; $types[] = $joinColumn->getType(); } foreach ($joinTable->getInverseJoinColumns() as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $referencedColumnName = $joinColumn->getReferencedColumnName(); if (! $joinColumn->getType()) { - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) - ); + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em)); } $whereClauses[] = ($addFilters ? 't.' : '') . $quotedColumnName . ' = ?'; - $params[] = $targetId[$targetClass->fieldNames[$referencedColumnName]]; + $params[] = $targetIdentifier[$targetClass->fieldNames[$referencedColumnName]]; $types[] = $joinColumn->getType(); } diff --git a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php index 2d2eb36fd45..14b275f1df8 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php @@ -255,23 +255,31 @@ private function deleteJoinedEntityCollection(PersistentCollection $collection) $parameters = array_values($sourcePersister->getIdentifier($collection->getOwner())); $numDeleted = $this->conn->executeUpdate($statement, $parameters); - // 3) Delete records on each table in the hierarchy - $classNames = array_merge( - $targetClass->getParentClasses(), - [$targetClass->getClassName()], - $targetClass->getSubClasses() + // 3) Create statement used in DELETE ... WHERE ... IN (subselect) + $deleteSQLTemplate = sprintf( + 'DELETE FROM %%s WHERE (%s) IN (SELECT %s FROM %s)', + $idColumnNameList, + $idColumnNameList, + $tempTable ); - foreach (array_reverse($classNames) as $className) { - $parentClass = $this->em->getClassMetadata($className); - $tableName = $parentClass->table->getQuotedQualifiedName($this->platform); - $statement = 'DELETE FROM ' . $tableName . ' WHERE (' . $idColumnNameList . ')' - . ' IN (SELECT ' . $idColumnNameList . ' FROM ' . $tempTable . ')'; + // 4) Delete records on each table in the hierarchy + $hierarchyClasses = array_merge( + array_map( + function ($className) { return $this->em->getClassMetadata($className); }, + array_reverse($targetClass->getSubClasses()) + ), + [$targetClass], + $targetClass->getAncestorsIterator()->getArrayCopy() + ); + + foreach ($hierarchyClasses as $class) { + $statement = sprintf($deleteSQLTemplate, $class->table->getQuotedQualifiedName($this->platform)); $this->conn->executeUpdate($statement); } - // 4) Drop temporary table + // 5) Drop temporary table $statement = $this->platform->getDropTemporaryTableSQL($tempTable); $this->conn->executeUpdate($statement); diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 5d2fc8ee161..0efb384ed95 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -401,18 +401,16 @@ public function delete($entity) } foreach ($joinColumns as $joinColumn) { - $joinColumnName = $joinColumn->getColumnName(); + /** @var JoinColumnMetadata $joinColumn */ + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); $referencedColumnName = $joinColumn->getReferencedColumnName(); - $quotedJoinColumnName = $this->platform->quoteIdentifier($joinColumnName); $targetField = $targetClass->fieldNames[$referencedColumnName]; if (! $joinColumn->getType()) { - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) - ); + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em)); } - $id[$quotedJoinColumnName] = $associationValue ? $associationValue[$targetField] : null; + $id[$quotedColumnName] = $associationValue ? $associationValue[$targetField] : null; $types[] = $joinColumn->getType(); } } @@ -448,46 +446,45 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat $type = $column->getType(); $placeholder = $type->convertToDatabaseValueSQL('?', $this->platform); - $set[] = $quotedColumnName . ' = ' . $placeholder; + $set[] = sprintf('%s = %s', $quotedColumnName, $placeholder); $params[] = $value; - $types[] = $type; + $types[] = $column->getType(); } - $where = []; // @todo guilhermeblanco Bring this back: $this->em->getUnitOfWork()->getEntityIdentifier($entity); $identifier = $this->getIdentifier($entity); + $where = []; foreach ($this->class->identifier as $idField) { $property = $this->class->getProperty($idField); - if ($property instanceof FieldMetadata) { - $params[] = $identifier[$idField]; - $types[] = $property->getType(); - $where[] = $this->platform->quoteIdentifier($property->getColumnName()); - - continue; - } - - /** @var ToOneAssociationMetadata $property */ - $targetPersister = $this->em->getUnitOfWork()->getEntityPersister($property->getTargetEntity()); - - foreach ($property->getJoinColumns() as $joinColumn) { - /** @var JoinColumnMetadata $joinColumn */ - $referencedColumnName = $joinColumn->getReferencedColumnName(); + switch (true) { + case ($property instanceof FieldMetadata): + $where[] = $this->platform->quoteIdentifier($property->getColumnName()); + $params[] = $identifier[$idField]; + $types[] = $property->getType(); + break; - if (! $joinColumn->getType()) { + case ($property instanceof ToOneAssociationMetadata): $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); + $targetPersister = $this->em->getUnitOfWork()->getEntityPersister($property->getTargetEntity()); - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) - ); - } + foreach ($property->getJoinColumns() as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ + $quotedColumnName = $this->platform->quoteIdentifier($joinColumn->getColumnName()); + $referencedColumnName = $joinColumn->getReferencedColumnName(); + + if (! $joinColumn->getType()) { + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em)); + } - $value = $targetPersister->getColumnValue($identifier[$idField], $referencedColumnName); + $value = $targetPersister->getColumnValue($identifier[$idField], $referencedColumnName); - $params[] = $value; - $where[] = $joinColumn->getColumnName(); - $types[] = $joinColumn->getType(); + $where[] = $quotedColumnName; + $params[] = $value; + $types[] = $joinColumn->getType(); + } + break; } } @@ -533,7 +530,7 @@ protected final function updateTable($entity, $quotedTableName, array $updateDat */ protected function deleteJoinTableRecords($identifier) { - foreach ($this->class->getProperties() as $association) { + foreach ($this->class->getDeclaredPropertiesIterator() as $association) { if (! ($association instanceof ManyToManyAssociationMetadata)) { continue; } @@ -680,8 +677,6 @@ protected function prepareUpdateData($entity) $referencedColumnName = $joinColumn->getReferencedColumnName(); if (! $joinColumn->getType()) { - $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); - $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em)); } @@ -722,6 +717,7 @@ public function getColumnValue($entity, string $columnName) /* @var ToOneAssociationMetadata $property */ $unitOfWork = $this->em->getUnitOfWork(); + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); $targetPersister = $unitOfWork->getEntityPersister($property->getTargetEntity()); foreach ($property->getJoinColumns() as $joinColumn) { @@ -729,8 +725,6 @@ public function getColumnValue($entity, string $columnName) $referencedColumnName = $joinColumn->getReferencedColumnName(); if (! $joinColumn->getType()) { - $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); - $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em)); } @@ -1290,7 +1284,7 @@ protected function getSelectColumnsSQL() $eagerAliasCounter = 0; $columnList = []; - foreach ($this->class->getProperties() as $fieldName => $property) { + foreach ($this->class->getDeclaredPropertiesIterator() as $fieldName => $property) { switch (true) { case ($property instanceof FieldMetadata): $columnList[] = $this->getSelectColumnSQL($fieldName, $this->class); @@ -1325,16 +1319,17 @@ protected function getSelectColumnsSQL() $this->currentPersisterContext->rsm->addJoinedEntityResult($targetEntity, $assocAlias, 'r', $fieldName); - foreach ($eagerEntity->fieldNames as $field) { - $columnSQL = $eagerEntity->hasField($field) - ? $this->getSelectColumnSQL($field, $eagerEntity, $assocAlias) - : $this->getSelectColumnAssociationSQL( - $field, $eagerEntity->getProperty($field), $eagerEntity, $assocAlias - ) - ; + foreach ($eagerEntity->getDeclaredPropertiesIterator() as $eagerProperty) { + switch (true) { + case ($eagerProperty instanceof FieldMetadata): + $columnList[] = $this->getSelectColumnSQL($eagerProperty->getName(), $eagerEntity, $assocAlias); + break; - if ($columnSQL) { - $columnList[] = $columnSQL; + case ($eagerProperty instanceof ToOneAssociationMetadata && $eagerProperty->isOwningSide()): + $columnList[] = $this->getSelectColumnAssociationSQL( + $eagerProperty->getName(), $eagerProperty, $eagerEntity, $assocAlias + ); + break; } } @@ -1407,14 +1402,14 @@ protected function getSelectColumnAssociationSQL($field, AssociationMetadata $as $sqlTableAlias = $this->getSQLTableAlias($class->getTableName(), ($alias == 'r' ? '' : $alias)); foreach ($association->getJoinColumns() as $joinColumn) { - $columnName = $joinColumn->getColumnName(); - $quotedColumnName = $this->platform->quoteIdentifier($columnName); - $resultColumnName = $this->getSQLColumnAlias(); + /** @var JoinColumnMetadata $joinColumn */ + $columnName = $joinColumn->getColumnName(); + $quotedColumnName = $this->platform->quoteIdentifier($columnName); + $referencedColumnName = $joinColumn->getReferencedColumnName(); + $resultColumnName = $this->getSQLColumnAlias(); if (! $joinColumn->getType()) { - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) - ); + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em)); } $this->currentPersisterContext->rsm->addMetaResult( @@ -1525,7 +1520,7 @@ protected function getInsertColumnList() : null ; - foreach ($this->class->getProperties() as $name => $property) { + foreach ($this->class->getDeclaredPropertiesIterator() as $name => $property) { /*if (isset($this->class->embeddedClasses[$name])) { continue; }*/ @@ -1558,13 +1553,12 @@ protected function getInsertColumnList() $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); foreach ($property->getJoinColumns() as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ $columnName = $joinColumn->getColumnName(); $referencedColumnName = $joinColumn->getReferencedColumnName(); if (! $joinColumn->getType()) { - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) - ); + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em)); } $columns[] = $columnName; @@ -2038,10 +2032,11 @@ private function getTypes($field, $value, ClassMetadata $class) ; foreach ($joinColumns as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ + $referencedColumnName = $joinColumn->getReferencedColumnName(); + if (! $joinColumn->getType()) { - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $class, $this->em) - ); + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $class, $this->em)); } $types[] = $joinColumn->getType(); diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index 7476bb6c1c3..2a414b669ee 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -12,6 +12,7 @@ use Doctrine\ORM\Mapping\ColumnMetadata; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\GeneratorType; +use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; use Doctrine\ORM\Mapping\ToManyAssociationMetadata; use Doctrine\ORM\Mapping\ToOneAssociationMetadata; @@ -52,12 +53,13 @@ public function insert($entity) $subTableStmts[$this->class->getTableName()] = $this->conn->prepare($this->getInsertSQL()); } - foreach ($this->class->getParentClasses() as $parentClassName) { - $parentClass = $this->em->getClassMetadata($parentClassName); + $parentClass = $this->class; + + while (($parentClass = $parentClass->getParent()) !== null) { $parentTableName = $parentClass->getTableName(); if ($parentClass !== $rootClass) { - $parentPersister = $this->em->getUnitOfWork()->getEntityPersister($parentClassName); + $parentPersister = $this->em->getUnitOfWork()->getEntityPersister($parentClass->getClassName()); $subTableStmts[$parentTableName] = $this->conn->prepare($parentPersister->getInsertSQL()); } @@ -185,13 +187,12 @@ public function delete($entity) } // Delete from all tables individually, starting from this class' table up to the root table. - $rootTable = $this->class->table->getQuotedQualifiedName($this->platform); - + $rootTable = $this->class->table->getQuotedQualifiedName($this->platform); $affectedRows = $this->conn->delete($rootTable, $id); + $parentClass = $this->class; - foreach ($this->class->getParentClasses() as $parentClass) { - $parentMetadata = $this->em->getClassMetadata($parentClass); - $parentTable = $parentMetadata->table->getQuotedQualifiedName($this->platform); + while (($parentClass = $parentClass->getParent()) !== null) { + $parentTable = $parentClass->table->getQuotedQualifiedName($this->platform); $this->conn->delete($parentTable, $id); } @@ -306,9 +307,10 @@ protected function getLockTablesSql($lockMode) $baseTableAlias = $this->getSQLTableAlias($this->class->getTableName()); // INNER JOIN parent tables - foreach ($this->class->getParentClasses() as $parentClassName) { + $parentClass = $this->class; + + while (($parentClass = $parentClass->getParent()) !== null) { $conditions = []; - $parentClass = $this->em->getClassMetadata($parentClassName); $tableName = $parentClass->table->getQuotedQualifiedName($this->platform); $tableAlias = $this->getSQLTableAlias($parentClass->getTableName()); $joinSql .= ' INNER JOIN ' . $tableName . ' ' . $tableAlias . ' ON '; @@ -342,7 +344,7 @@ protected function getSelectColumnsSQL() $columnList = []; // Add columns - foreach ($this->class->getProperties() as $fieldName => $property) { + foreach ($this->class->getDeclaredPropertiesIterator() as $fieldName => $property) { if ($property instanceof FieldMetadata) { $columnList[] = $this->getSelectColumnSQL($fieldName, $property->getDeclaringClass()); @@ -356,10 +358,11 @@ protected function getSelectColumnsSQL() $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); foreach ($property->getJoinColumns() as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ + $referencedColumnName = $joinColumn->getReferencedColumnName(); + if (! $joinColumn->getType()) { - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) - ); + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em)); } $columnList[] = $this->getSelectJoinColumnSQL($joinColumn); @@ -367,49 +370,48 @@ protected function getSelectColumnsSQL() } // Add discriminator column (DO NOT ALIAS, see AbstractEntityInheritancePersister#processSQLResult). - $discrColumn = $this->class->discriminatorColumn; - $discrColumnName = $discrColumn->getColumnName(); - $discrColumnType = $discrColumn->getType(); - $resultColumnName = $this->platform->getSQLResultCasing($discrColumnName); + $discrColumn = $this->class->discriminatorColumn; + $discrTableAlias = $this->getSQLTableAlias($discrColumn->getTableName()); + $discrColumnName = $discrColumn->getColumnName(); + $discrColumnType = $discrColumn->getType(); + $resultColumnName = $this->platform->getSQLResultCasing($discrColumnName); + $quotedColumnName = $this->platform->quoteIdentifier($discrColumn->getColumnName()); $this->currentPersisterContext->rsm->setDiscriminatorColumn('r', $resultColumnName); $this->currentPersisterContext->rsm->addMetaResult('r', $resultColumnName, $discrColumnName, false, $discrColumnType); - $columnList[] = $discrColumnType->convertToDatabaseValueSQL( - $this->getSQLTableAlias($discrColumn->getTableName()) . '.' . $discrColumnName, - $this->platform - ); + $columnList[] = $discrColumnType->convertToDatabaseValueSQL($discrTableAlias . '.' . $quotedColumnName, $this->platform); // sub tables foreach ($this->class->getSubClasses() as $subClassName) { $subClass = $this->em->getClassMetadata($subClassName); // Add columns - foreach ($subClass->getProperties() as $fieldName => $property) { + foreach ($subClass->getDeclaredPropertiesIterator() as $fieldName => $property) { if ($subClass->isInheritedProperty($fieldName)) { continue; } - if ($property instanceof FieldMetadata) { - $columnList[] = $this->getSelectColumnSQL($fieldName, $subClass); + switch (true) { + case ($property instanceof FieldMetadata): + $columnList[] = $this->getSelectColumnSQL($fieldName, $subClass); + break; - continue; - } + case ($property instanceof ToOneAssociationMetadata && $property->isOwningSide()): + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); - if ($property instanceof ToManyAssociationMetadata || ! $property->isOwningSide()) { - continue; - } + foreach ($property->getJoinColumns() as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ + $referencedColumnName = $joinColumn->getReferencedColumnName(); - $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); + if (! $joinColumn->getType()) { + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em)); + } - foreach ($property->getJoinColumns() as $joinColumn) { - if (! $joinColumn->getType()) { - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) - ); - } + $columnList[] = $this->getSelectJoinColumnSQL($joinColumn); + } - $columnList[] = $this->getSelectJoinColumnSQL($joinColumn); + break; } } } @@ -426,7 +428,7 @@ protected function getInsertColumnList() { // Identifier columns must always come first in the column list of subclasses. $columns = []; - $parentColumns = $this->class->getParentClasses() + $parentColumns = $this->class->getParent() ? $this->class->getIdentifierColumns($this->em) : []; @@ -436,7 +438,7 @@ protected function getInsertColumnList() $this->columns[$columnName] = $column; } - foreach ($this->class->getProperties() as $name => $property) { + foreach ($this->class->getDeclaredPropertiesIterator() as $name => $property) { if (($property instanceof FieldMetadata && ($property instanceof VersionFieldMetadata || $this->class->isInheritedProperty($name))) || ($property instanceof AssociationMetadata && $this->class->isInheritedProperty($name)) /*|| isset($this->class->embeddedClasses[$name])*/) { @@ -448,13 +450,12 @@ protected function getInsertColumnList() $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); foreach ($property->getJoinColumns() as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ $columnName = $joinColumn->getColumnName(); $referencedColumnName = $joinColumn->getReferencedColumnName(); if (! $joinColumn->getType()) { - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em) - ); + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em)); } $columns[] = $columnName; @@ -504,9 +505,10 @@ private function getJoinSql($baseTableAlias) $identifierColumns = $this->class->getIdentifierColumns($this->em); // INNER JOIN parent tables - foreach ($this->class->getParentClasses() as $parentClassName) { + $parentClass = $this->class; + + while (($parentClass = $parentClass->getParent()) !== null) { $conditions = []; - $parentClass = $this->em->getClassMetadata($parentClassName); $tableName = $parentClass->table->getQuotedQualifiedName($this->platform); $tableAlias = $this->getSQLTableAlias($parentClass->getTableName()); $joinSql .= ' INNER JOIN ' . $tableName . ' ' . $tableAlias . ' ON '; diff --git a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php index 610765e8756..d3d00d1cabb 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php @@ -8,6 +8,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\Common\Collections\Criteria; use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\ToManyAssociationMetadata; use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\Utility\PersisterHelper; @@ -36,11 +37,9 @@ protected function getSelectColumnsSQL() $columnList[] = parent::getSelectColumnsSQL(); - $rootClass = $this->em->getClassMetadata($this->class->getRootClassName()); - $tableAlias = $this->getSQLTableAlias($rootClass->getTableName()); - // Append discriminator column $discrColumn = $this->class->discriminatorColumn; + $discrTableAlias = $this->getSQLTableAlias($discrColumn->getTableName()); $discrColumnName = $discrColumn->getColumnName(); $discrColumnType = $discrColumn->getType(); $resultColumnName = $this->platform->getSQLResultCasing($discrColumnName); @@ -49,14 +48,14 @@ protected function getSelectColumnsSQL() $this->currentPersisterContext->rsm->setDiscriminatorColumn('r', $resultColumnName); $this->currentPersisterContext->rsm->addMetaResult('r', $resultColumnName, $discrColumnName, false, $discrColumnType); - $columnList[] = $discrColumnType->convertToDatabaseValueSQL($tableAlias . '.' . $quotedColumnName, $this->platform); + $columnList[] = $discrColumnType->convertToDatabaseValueSQL($discrTableAlias . '.' . $quotedColumnName, $this->platform); // Append subclass columns foreach ($this->class->getSubClasses() as $subClassName) { $subClass = $this->em->getClassMetadata($subClassName); // Subclass columns - foreach ($subClass->getProperties() as $fieldName => $property) { + foreach ($subClass->getDeclaredPropertiesIterator() as $fieldName => $property) { if ($subClass->isInheritedProperty($fieldName)) { continue; } @@ -66,14 +65,15 @@ protected function getSelectColumnsSQL() $columnList[] = $this->getSelectColumnSQL($fieldName, $subClass); break; - case ($property instanceof ToOneAssociationMetadata): + case ($property instanceof ToOneAssociationMetadata && $property->isOwningSide()): $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); foreach ($property->getJoinColumns() as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ + $referencedColumnName = $joinColumn->getReferencedColumnName(); + if (! $joinColumn->getType()) { - $joinColumn->setType( - PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em) - ); + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em)); } $columnList[] = $this->getSelectJoinColumnSQL($joinColumn); diff --git a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php index a325526aac4..710e1547e39 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php +++ b/lib/Doctrine/ORM/Proxy/Factory/ProxyDefinition.php @@ -149,7 +149,7 @@ public function cloner(Proxy $proxy) : void );*/ } - foreach ($classMetadata->getProperties() as $property) { + foreach ($classMetadata->getDeclaredPropertiesIterator() as $property) { /** @var Property $property */ $property->setValue($proxy, $property->getValue($original)); } diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php index 12d91eb16d7..caacbf72cef 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php @@ -73,22 +73,26 @@ public function __construct(AST\Node $AST, $sqlWalker) $this->insertSql .= $sqlWalker->walkWhereClause($AST->whereClause); } - // 2. Create ID subselect statement used in DELETE ... WHERE ... IN (subselect) - $idSubselect = 'SELECT ' . $idColumnNameList . ' FROM ' . $tempTable; + // 2. Create statement used in DELETE ... WHERE ... IN (subselect) + $deleteSQLTemplate = sprintf( + 'DELETE FROM %%s WHERE (%s) IN (SELECT %s FROM %s)', + $idColumnNameList, + $idColumnNameList, + $tempTable + ); // 3. Create and store DELETE statements - $classNames = array_merge( - $primaryClass->getParentClasses(), - [$primaryClass->getClassName()], - $primaryClass->getSubClasses() + $hierarchyClasses = array_merge( + array_map( + function ($className) use ($em) { return $em->getClassMetadata($className); }, + array_reverse($primaryClass->getSubClasses()) + ), + [$primaryClass], + $primaryClass->getAncestorsIterator()->getArrayCopy() ); - foreach (array_reverse($classNames) as $className) { - $parentClass = $em->getClassMetadata($className); - $tableName = $parentClass->table->getQuotedQualifiedName($platform); - - $this->sqlStatements[] = 'DELETE FROM ' . $tableName - . ' WHERE (' . $idColumnNameList . ') IN (' . $idSubselect . ')'; + foreach ($hierarchyClasses as $class) { + $this->sqlStatements[] = sprintf($deleteSQLTemplate, $class->table->getQuotedQualifiedName($platform)); } // 4. Store DDL for temporary identifier table. diff --git a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php index 1f31768f941..20afc3d8485 100644 --- a/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php +++ b/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php @@ -80,39 +80,36 @@ public function __construct(AST\Node $AST, $sqlWalker) $this->insertSql .= $sqlWalker->walkFromClause($fromClause); - // 2. Create ID subselect statement used in UPDATE ... WHERE ... IN (subselect) - $idSubselect = 'SELECT ' . $idColumnNameList . ' FROM ' . $tempTable; + // 2. Create statement used in UPDATE ... WHERE ... IN (subselect) + $updateSQLTemplate = sprintf( + 'UPDATE %%s SET %%s WHERE (%s) IN (SELECT %s FROM %s)', + $idColumnNameList, + $idColumnNameList, + $tempTable + ); // 3. Create and store UPDATE statements - $classNames = array_merge( - $primaryClass->getParentClasses(), - [$primaryClass->getClassName()], - $primaryClass->getSubClasses() + $hierarchyClasses = array_merge( + array_map( + function ($className) use ($em) { return $em->getClassMetadata($className); }, + array_reverse($primaryClass->getSubClasses()) + ), + [$primaryClass], + $primaryClass->getAncestorsIterator()->getArrayCopy() ); - $i = -1; + $i = 0; - foreach (array_reverse($classNames) as $className) { - $affected = false; - $class = $em->getClassMetadata($className); - $tableName = $class->table->getQuotedQualifiedName($platform); - $updateSql = 'UPDATE ' . $tableName . ' SET '; + foreach ($hierarchyClasses as $class) { + $updateSQLParts = []; foreach ($updateItems as $updateItem) { $field = $updateItem->pathExpression->field; $property = $class->getProperty($field); if ($property && ! $class->isInheritedProperty($field)) { - $newValue = $updateItem->newValue; - - if ( ! $affected) { - $affected = true; - ++$i; - } else { - $updateSql .= ', '; - } - - $updateSql .= $sqlWalker->walkUpdateItem($updateItem); + $updateSQLParts[] = $sqlWalker->walkUpdateItem($updateItem); + $newValue = $updateItem->newValue; if ($newValue instanceof AST\InputParameter) { $this->sqlParameters[$i][] = $newValue->name; @@ -122,8 +119,14 @@ public function __construct(AST\Node $AST, $sqlWalker) } } - if ($affected) { - $this->sqlStatements[$i] = $updateSql . ' WHERE (' . $idColumnNameList . ') IN (' . $idSubselect . ')'; + if ($updateSQLParts) { + $this->sqlStatements[$i] = sprintf( + $updateSQLTemplate, + $class->table->getQuotedQualifiedName($platform), + implode(', ', $updateSQLParts) + ); + + $i++; } } diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index 38822445ece..d55b508b8f3 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -10,7 +10,9 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\InheritanceType; +use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\MappingException; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; use Doctrine\ORM\Utility\PersisterHelper; /** @@ -86,13 +88,17 @@ public function __construct(EntityManagerInterface $em, $defaultRenameMode = sel * * @return void */ - public function addRootEntityFromClassMetadata($class, $alias, $renamedColumns = [], $renameMode = null) + public function addRootEntityFromClassMetadata( + string $class, + string $alias, + array $renamedColumns = [], + int $renameMode = null + ) { - $renameMode = $renameMode ?: $this->defaultRenameMode; - $columnAliasMap = $this->getColumnAliasMap($class, $renameMode, $renamedColumns); + $renameMode = $renameMode ?: (empty($renamedColumns) ? $this->defaultRenameMode : self::COLUMN_RENAMING_CUSTOM); $this->addEntityResult($class, $alias); - $this->addAllClassFields($class, $alias, $columnAliasMap); + $this->addAllClassFields($class, $alias, $renamedColumns, $renameMode); } /** @@ -108,13 +114,19 @@ public function addRootEntityFromClassMetadata($class, $alias, $renamedColumns = * * @return void */ - public function addJoinedEntityFromClassMetadata($class, $alias, $parentAlias, $relation, $renamedColumns = [], $renameMode = null) + public function addJoinedEntityFromClassMetadata( + string $class, + string $alias, + string $parentAlias, + string $relation, + array $renamedColumns = [], + int $renameMode = null + ) { - $renameMode = $renameMode ?: $this->defaultRenameMode; - $columnAliasMap = $this->getColumnAliasMap($class, $renameMode, $renamedColumns); + $renameMode = $renameMode ?: (empty($renamedColumns) ? $this->defaultRenameMode : self::COLUMN_RENAMING_CUSTOM); $this->addJoinedEntityResult($class, $alias, $parentAlias, $relation); - $this->addAllClassFields($class, $alias, $columnAliasMap); + $this->addAllClassFields($class, $alias, $renamedColumns, $renameMode); } /** @@ -122,51 +134,66 @@ public function addJoinedEntityFromClassMetadata($class, $alias, $parentAlias, $ * * @param string $class * @param string $alias - * @param array $columnAliasMap + * @param array $customRenameColumns * * @return void * * @throws \InvalidArgumentException */ - protected function addAllClassFields($class, $alias, $columnAliasMap = []) + protected function addAllClassFields(string $class, string $alias, array $customRenameColumns, int $renameMode) : void { /** @var ClassMetadata $classMetadata */ $classMetadata = $this->em->getClassMetadata($class); $platform = $this->em->getConnection()->getDatabasePlatform(); - if ( ! $this->isInheritanceSupported($classMetadata)) { + if (! $this->isInheritanceSupported($classMetadata)) { throw new \InvalidArgumentException( 'ResultSetMapping builder does not currently support your inheritance scheme.' ); } - foreach ($classMetadata->fieldNames as $columnName => $propertyName) { - $property = $classMetadata->getProperty($propertyName); - $columnAlias = $platform->getSQLResultCasing($columnAliasMap[$columnName]); + foreach ($classMetadata->getDeclaredPropertiesIterator() as $property) { + switch (true) { + case ($property instanceof FieldMetadata): + $columnName = $property->getColumnName(); + $columnAlias = $platform->getSQLResultCasing( + $this->getColumnAlias($columnName, $renameMode, $customRenameColumns) + ); - if ($property instanceof FieldMetadata) { - if (isset($this->fieldMappings[$columnAlias])) { - throw new \InvalidArgumentException(sprintf( - "The column '%s' conflicts with another column in the mapper.", - $columnName - )); - } + if (isset($this->fieldMappings[$columnAlias])) { + throw new \InvalidArgumentException( + sprintf("The column '%s' conflicts with another column in the mapper.", $columnName) + ); + } - $this->addFieldResult($alias, $columnAlias, $propertyName); + $this->addFieldResult($alias, $columnAlias, $property->getName()); + break; - continue; - } + case ($property instanceof ToOneAssociationMetadata && $property->isOwningSide()): + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); - if (isset($this->metaMappings[$columnAlias])) { - throw new \InvalidArgumentException(sprintf( - "The column '%s' conflicts with another column in the mapper.", - $columnAlias - )); - } + foreach ($property->getJoinColumns() as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ + $columnName = $joinColumn->getColumnName(); + $referencedColumnName = $joinColumn->getReferencedColumnName(); + $columnAlias = $platform->getSQLResultCasing( + $this->getColumnAlias($columnName, $renameMode, $customRenameColumns) + ); + + if (isset($this->metaMappings[$columnAlias])) { + throw new \InvalidArgumentException( + sprintf("The column '%s' conflicts with another column in the mapper.", $columnName) + ); + } - $columnType = PersisterHelper::getTypeOfColumn($columnName, $classMetadata, $this->em); + if (! $joinColumn->getType()) { + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em)); + } - $this->addMetaResult($alias, $columnAlias, $columnName, $property->isPrimaryKey(), $columnType); + $this->addMetaResult($alias, $columnAlias, $columnName, $property->isPrimaryKey(), $joinColumn->getType()); + } + break; + } } } @@ -203,8 +230,7 @@ private function getColumnAlias($columnName, $mode, array $customRenameColumns) return $columnName . $this->sqlCounter++; case self::COLUMN_RENAMING_CUSTOM: - return isset($customRenameColumns[$columnName]) - ? $customRenameColumns[$columnName] : $columnName; + return $customRenameColumns[$columnName] ?? $columnName; case self::COLUMN_RENAMING_NONE: return $columnName; @@ -212,33 +238,6 @@ private function getColumnAlias($columnName, $mode, array $customRenameColumns) } } - /** - * Retrieves a class columns and join columns aliases that are used in the SELECT clause. - * - * This depends on the renaming mode selected by the user. - * - * @param string $className - * @param int $mode - * @param array $customRenameColumns - * - * @return array - */ - private function getColumnAliasMap($className, $mode, array $customRenameColumns) - { - if ($customRenameColumns) { // for BC with 2.2-2.3 API - $mode = self::COLUMN_RENAMING_CUSTOM; - } - - $columnAlias = []; - $classMetadata = $this->em->getClassMetadata($className); - - foreach ($classMetadata->fieldNames as $columnName => $propertyName) { - $columnAlias[$columnName] = $this->getColumnAlias($columnName, $mode, $customRenameColumns); - } - - return $columnAlias; - } - /** * Adds the mappings of the results of native SQL queries to the result set. * @@ -295,7 +294,7 @@ public function addNamedNativeQueryResultSetMapping(ClassMetadata $class, $resul $this->addNamedNativeQueryEntityResultMapping($classMetadata, $entityMapping, $joinAlias); - foreach ($class->getProperties() as $fieldName => $association) { + foreach ($class->getDeclaredPropertiesIterator() as $fieldName => $association) { if (! ($association instanceof AssociationMetadata)) { continue; } @@ -313,11 +312,8 @@ public function addNamedNativeQueryResultSetMapping(ClassMetadata $class, $resul if (isset($resultMapping['columns'])) { foreach ($resultMapping['columns'] as $entityMapping) { - $type = isset($class->fieldNames[$entityMapping['name']]) - ? $class->fieldNames[$entityMapping['name']]['type'] - : Type::getType('string'); - - $this->addScalarResult($entityMapping['name'], $entityMapping['name'], $type); + // @todo guilhermeblanco Collect type information from mapped column + $this->addScalarResult($entityMapping['name'], $entityMapping['name'], Type::getType('string')); } } @@ -390,19 +386,44 @@ public function addNamedNativeQueryEntityResultMapping(ClassMetadata $classMetad } } } else { - foreach ($classMetadata->fieldNames as $columnName => $propertyName) { - $property = $classMetadata->getProperty($propertyName); - $columnAlias = $platform->getSQLResultCasing($columnName); + foreach ($classMetadata->getDeclaredPropertiesIterator() as $property) { + switch (true) { + case ($property instanceof FieldMetadata): + $columnName = $property->getColumnName(); + $columnAlias = $platform->getSQLResultCasing($columnName); + + if (isset($this->fieldMappings[$columnAlias])) { + throw new \InvalidArgumentException( + sprintf("The column '%s' conflicts with another column in the mapper.", $columnName) + ); + } - if ($property instanceof FieldMetadata) { - $this->addFieldResult($alias, $columnAlias, $propertyName); + $this->addFieldResult($alias, $columnAlias, $property->getName()); + break; - continue; - } + case ($property instanceof ToOneAssociationMetadata && $property->isOwningSide()): + $targetClass = $this->em->getClassMetadata($property->getTargetEntity()); - $columnType = PersisterHelper::getTypeOfColumn($columnName, $classMetadata, $this->em); + foreach ($property->getJoinColumns() as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ + $columnName = $joinColumn->getColumnName(); + $referencedColumnName = $joinColumn->getReferencedColumnName(); + $columnAlias = $platform->getSQLResultCasing($columnName); - $this->addMetaResult($alias, $columnAlias, $columnName, $property->isPrimaryKey(), $columnType); + if (isset($this->metaMappings[$columnAlias])) { + throw new \InvalidArgumentException( + sprintf("The column '%s' conflicts with another column in the mapper.", $columnName) + ); + } + + if (! $joinColumn->getType()) { + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em)); + } + + $this->addMetaResult($alias, $columnAlias, $columnName, $property->isPrimaryKey(), $joinColumn->getType()); + } + break; + } } } diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 94ab4a751c9..4b972255895 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -10,6 +10,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\InheritanceType; +use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; use Doctrine\ORM\Mapping\ToManyAssociationMetadata; @@ -327,8 +328,9 @@ private function generateClassTableInheritanceJoins($class, $dqlAlias) $baseTableAlias = $this->getSQLTableAlias($class->getTableName(), $dqlAlias); // INNER JOIN parent class tables - foreach ($class->getParentClasses() as $parentClassName) { - $parentClass = $this->em->getClassMetadata($parentClassName); + $parentClass = $class; + + while (($parentClass = $parentClass->getParent()) !== null) { $tableName = $parentClass->table->getQuotedQualifiedName($this->platform); $tableAlias = $this->getSQLTableAlias($parentClass->getTableName(), $dqlAlias); @@ -755,7 +757,7 @@ public function walkSelectClause($selectClause) } // Add foreign key columns of class and also parent classes - foreach ($class->getProperties() as $association) { + foreach ($class->getDeclaredPropertiesIterator() as $association) { if (! ($association instanceof ToOneAssociationMetadata && $association->isOwningSide())) { continue; } else if (! $addMetaColumns && ! $association->isPrimaryKey()) { @@ -765,11 +767,16 @@ public function walkSelectClause($selectClause) $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); foreach ($association->getJoinColumns() as $joinColumn) { - $columnName = $joinColumn->getColumnName(); - $quotedColumnName = $this->platform->quoteIdentifier($columnName); - $columnAlias = $this->getSQLColumnAlias(); - $columnType = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); - $sqlTableAlias = $this->getSQLTableAlias($joinColumn->getTableName(), $dqlAlias); + /** @var JoinColumnMetadata $joinColumn */ + $columnName = $joinColumn->getColumnName(); + $referencedColumnName = $joinColumn->getReferencedColumnName(); + $quotedColumnName = $this->platform->quoteIdentifier($columnName); + $columnAlias = $this->getSQLColumnAlias(); + $sqlTableAlias = $this->getSQLTableAlias($joinColumn->getTableName(), $dqlAlias); + + if (! $joinColumn->getType()) { + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em)); + } $sqlSelectExpressions[] = sprintf( '%s.%s AS %s', @@ -778,7 +785,7 @@ public function walkSelectClause($selectClause) $columnAlias ); - $this->rsm->addMetaResult($dqlAlias, $columnAlias, $columnName, $association->isPrimaryKey(), $columnType); + $this->rsm->addMetaResult($dqlAlias, $columnAlias, $columnName, $association->isPrimaryKey(), $joinColumn->getType()); } } @@ -789,10 +796,9 @@ public function walkSelectClause($selectClause) // Add foreign key columns of subclasses foreach ($class->getSubClasses() as $subClassName) { - $subClass = $this->em->getClassMetadata($subClassName); - $sqlTableAlias = $this->getSQLTableAlias($subClass->getTableName(), $dqlAlias); + $subClass = $this->em->getClassMetadata($subClassName); - foreach ($subClass->getProperties() as $association) { + foreach ($subClass->getDeclaredPropertiesIterator() as $association) { // Skip if association is inherited if ($subClass->isInheritedProperty($association->getName())) { continue; @@ -805,10 +811,16 @@ public function walkSelectClause($selectClause) $targetClass = $this->em->getClassMetadata($association->getTargetEntity()); foreach ($association->getJoinColumns() as $joinColumn) { - $columnName = $joinColumn->getColumnName(); - $quotedColumnName = $this->platform->quoteIdentifier($columnName); - $columnAlias = $this->getSQLColumnAlias(); - $columnType = PersisterHelper::getTypeOfColumn($joinColumn->getReferencedColumnName(), $targetClass, $this->em); + /** @var JoinColumnMetadata $joinColumn */ + $columnName = $joinColumn->getColumnName(); + $referencedColumnName = $joinColumn->getReferencedColumnName(); + $quotedColumnName = $this->platform->quoteIdentifier($columnName); + $columnAlias = $this->getSQLColumnAlias(); + $sqlTableAlias = $this->getSQLTableAlias($joinColumn->getTableName(), $dqlAlias); + + if (! $joinColumn->getType()) { + $joinColumn->setType(PersisterHelper::getTypeOfColumn($referencedColumnName, $targetClass, $this->em)); + } $sqlSelectExpressions[] = sprintf( '%s.%s AS %s', @@ -817,7 +829,7 @@ public function walkSelectClause($selectClause) $columnAlias ); - $this->rsm->addMetaResult($dqlAlias, $columnAlias, $columnName, $association->isPrimaryKey(), $columnType); + $this->rsm->addMetaResult($dqlAlias, $columnAlias, $columnName, $association->isPrimaryKey(), $joinColumn->getType()); } } } @@ -1413,7 +1425,7 @@ public function walkSelectExpression($selectExpression) $sqlParts = []; // Select all fields from the queried class - foreach ($class->getProperties() as $fieldName => $property) { + foreach ($class->getDeclaredPropertiesIterator() as $fieldName => $property) { if (! ($property instanceof FieldMetadata)) { continue; } @@ -1448,7 +1460,7 @@ public function walkSelectExpression($selectExpression) foreach ($class->getSubClasses() as $subClassName) { $subClass = $this->em->getClassMetadata($subClassName); - foreach ($subClass->getProperties() as $fieldName => $property) { + foreach ($subClass->getDeclaredPropertiesIterator() as $fieldName => $property) { if (! ($property instanceof FieldMetadata)) { continue; } @@ -1715,19 +1727,28 @@ public function walkGroupByItem($groupByItem) } // IdentificationVariable + /** @var ClassMetadata $classMetadata */ $classMetadata = $this->queryComponents[$groupByItem]['metadata']; $sqlParts = []; - foreach ($classMetadata->fieldNames as $fieldName) { - $type = $classMetadata->hasField($fieldName) - ? AST\PathExpression::TYPE_STATE_FIELD - : AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION - ; + foreach ($classMetadata->getDeclaredPropertiesIterator() as $property) { + switch (true) { + case ($property instanceof FieldMetadata): + $type = AST\PathExpression::TYPE_STATE_FIELD; + $item = new AST\PathExpression($type, $groupByItem, $property->getName()); + $item->type = $type; - $item = new AST\PathExpression($type, $groupByItem, $fieldName); - $item->type = $type; + $sqlParts[] = $this->walkPathExpression($item); + break; + + case ($property instanceof ToOneAssociationMetadata && $property->isOwningSide()): + $type = AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION; + $item = new AST\PathExpression($type, $groupByItem, $property->getName()); + $item->type = $type; - $sqlParts[] = $this->walkPathExpression($item); + $sqlParts[] = $this->walkPathExpression($item); + break; + } } return implode(', ', $sqlParts); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index 5a9ca608238..5e50bc563b6 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -7,7 +7,9 @@ use Doctrine\Common\Persistence\Mapping\MappingException; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\AssociationMetadata; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ColumnMetadata; +use Doctrine\ORM\Mapping\ComponentMetadata; use Doctrine\ORM\Mapping\FieldMetadata; use Doctrine\ORM\Mapping\TableMetadata; use Symfony\Component\Console\Command\Command; @@ -72,7 +74,8 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage $table->setHeaders(['Field', 'Value']); - $metadata = $this->getClassMetadata($entityName, $entityManager); + $metadata = $this->getClassMetadata($entityName, $entityManager); + $parentValue = $metadata->getParent() === null ? 'None' : ''; array_map( [$table, 'addRow'], @@ -83,7 +86,10 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage $this->formatField('Custom repository class', $metadata->getCustomRepositoryClassName()), $this->formatField('Mapped super class?', $metadata->isMappedSuperclass), $this->formatField('Embedded class?', $metadata->isEmbeddedClass), - $this->formatField('Parent classes', $metadata->getParentClasses()), + $this->formatField('Parent classes', $parentValue), + ], + $this->formatParentClasses($metadata), + [ $this->formatField('Sub classes', $metadata->getSubClasses()), $this->formatField('Embedded classes', $metadata->getSubClasses()), $this->formatField('Named queries', $metadata->getNamedQueries()), @@ -91,7 +97,7 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage $this->formatField('SQL result set mappings', $metadata->getSqlResultSetMappings()), $this->formatField('Identifier', $metadata->getIdentifier()), $this->formatField('Inheritance type', $metadata->inheritanceType), - $this->formatField('Discriminator column', '') + $this->formatField('Discriminator column', ''), ], $this->formatColumn($metadata->discriminatorColumn), [ @@ -110,7 +116,7 @@ private function displayEntity($entityName, EntityManagerInterface $entityManage $this->formatEntityListeners($metadata->entityListeners), ], [$this->formatField('Property mappings:', '')], - $this->formatPropertyMappings($metadata->getProperties()) + $this->formatPropertyMappings($metadata->getDeclaredPropertiesIterator()) ) ); @@ -181,6 +187,49 @@ function ($mappedEntity) use ($entityName) { return $entityManager->getClassMetadata(current($matches)); } + /** + * @param ComponentMetadata $metadata + * + * @return array + */ + private function formatParentClasses(ComponentMetadata $metadata) + { + $output = []; + $parentClass = $metadata; + + while (($parentClass = $parentClass->getParent()) !== null) { + /** @var ClassMetadata $parentClass */ + $attributes = []; + + if ($parentClass->isEmbeddedClass) { + $attributes[] = 'Embedded'; + } + + if ($parentClass->isMappedSuperclass) { + $attributes[] = 'Mapped superclass'; + } + + if ($parentClass->inheritanceType) { + $attributes[] = ucfirst(strtolower($parentClass->inheritanceType)); + } + + if ($parentClass->isReadOnly()) { + $attributes[] = 'Read-only'; + } + + if ($parentClass->isVersioned()) { + $attributes[] = 'Versioned'; + } + + $output[] = $this->formatField( + sprintf(' %s', $parentClass->getParent()), + ($parentClass->isRootEntity() ? '(Root) ' : '') . $this->formatValue($attributes) + ); + } + + return $output; + } + /** * Format the given value for console output * @@ -268,11 +317,11 @@ private function formatAssociationMappings(array $propertyMappings) /** * Format the property mappings * - * @param array $propertyMappings + * @param iterable $propertyMappings * * @return array */ - private function formatPropertyMappings(array $propertyMappings) + private function formatPropertyMappings(iterable $propertyMappings) { $output = []; diff --git a/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php b/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php index d47ddbe022c..5d2a989a961 100644 --- a/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php +++ b/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php @@ -84,7 +84,7 @@ public function dumpIdentityMap(EntityManagerInterface $em) $cm = $em->getClassMetadata($className); - foreach ($cm->getProperties() as $field => $association) { + foreach ($cm->getDeclaredPropertiesIterator() as $field => $association) { if (! ($association instanceof AssociationMetadata)) { continue; } diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index e79d4e6fb53..d46cde0be0a 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -644,7 +644,7 @@ protected function generateEntityConstructor(ClassMetadata $metadata) $collections = []; - foreach ($metadata->getProperties() as $association) { + foreach ($metadata->getDeclaredPropertiesIterator() as $association) { if ($association instanceof ToManyAssociationMetadata) { $collections[] = sprintf('$this->%s = new \%s();', $association->getName(), ArrayCollection::class); } @@ -673,7 +673,7 @@ private function generateEmbeddableConstructor(ClassMetadata $metadata) $requiredFields = []; $optionalFields = []; - foreach ($metadata->getProperties() as $property) { + foreach ($metadata->getDeclaredPropertiesIterator() as $property) { if (! $property->isNullable()) { $requiredFields[] = $property; @@ -1143,7 +1143,7 @@ protected function generateEntityStubMethods(ClassMetadata $metadata) } }*/ - foreach ($metadata->getProperties() as $fieldName => $property) { + foreach ($metadata->getDeclaredPropertiesIterator() as $fieldName => $property) { if ($property instanceof FieldMetadata) { $nullable = $property->isNullable() ? 'null' : null; @@ -1240,7 +1240,7 @@ protected function generateEntityProperties(ClassMetadata $metadata) { $lines = []; - foreach ($metadata->getProperties() as $fieldName => $property) { + foreach ($metadata->getDeclaredPropertiesIterator() as $fieldName => $property) { if ($this->hasProperty($fieldName, $metadata) || $metadata->isInheritedProperty($fieldName) /*|| ( diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php index 3c2941ac1dc..2abd5b6256c 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -128,7 +128,7 @@ public function exportClassMetadata(ClassMetadata $metadata) } } - foreach ($metadata->getProperties() as $property) { + foreach ($metadata->getDeclaredPropertiesIterator() as $property) { if ($property instanceof FieldMetadata) { $this->exportFieldMetadata($metadata, $property, $lines); } else if ($property instanceof AssociationMetadata) { diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 8552419eb4d..c7b421f9d2b 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -160,7 +160,7 @@ public function exportClassMetadata(ClassMetadata $metadata) } } - $properties = $metadata->getProperties(); + $properties = iterator_to_array($metadata->getDeclaredPropertiesIterator()); $id = []; foreach ($properties as $name => $property) { @@ -208,6 +208,8 @@ public function exportClassMetadata(ClassMetadata $metadata) ManyToManyAssociationMetadata::class, ]; + + uasort($properties, function($m1, $m2) use (&$orderMap) { $a1 = array_search(get_class($m1), $orderMap); $a2 = array_search(get_class($m2), $orderMap); diff --git a/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php b/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php index 8cd20a37cab..09c2a914d4a 100644 --- a/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php +++ b/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php @@ -90,7 +90,7 @@ public function loadClassMetadata(LoadClassMetadataEventArgs $args) } } - foreach ($class->getProperties() as $association) { + foreach ($class->getDeclaredPropertiesIterator() as $association) { if ($association instanceof AssociationMetadata && isset($this->resolveTargetEntities[$association->getTargetEntity()])) { $targetEntity = $this->resolveTargetEntities[$association->getTargetEntity()]; diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 9a09db7cb2a..e82ab8aada3 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -157,9 +157,11 @@ public function getSchemaFromMetadata(array $classes) $this->addDiscriminatorColumnDefinition($class, $table); // Aggregate all the information from all classes in the hierarchy - foreach ($class->getParentClasses() as $parentClassName) { + $parentClass = $class; + + while (($parentClass = $parentClass->getParent()) !== null) { // Parent class information is already contained in this class - $processedClasses[$parentClassName] = true; + $processedClasses[$parent->getClassName()] = true; } foreach ($class->getSubClasses() as $subClassName) { @@ -177,7 +179,7 @@ public function getSchemaFromMetadata(array $classes) // Add all non-inherited fields as columns $pkColumns = []; - foreach ($class->getProperties() as $fieldName => $property) { + foreach ($class->getDeclaredPropertiesIterator() as $fieldName => $property) { if (! ($property instanceof FieldMetadata)) { continue; } @@ -323,7 +325,7 @@ public function getSchemaFromMetadata(array $classes) $processedClasses[$class->getClassName()] = true; - foreach ($class->getProperties() as $property) { + foreach ($class->getDeclaredPropertiesIterator() as $property) { if (! $property instanceof FieldMetadata || ! $property->hasValueGenerator() || $property->getValueGenerator()->getType() !== GeneratorType::SEQUENCE @@ -333,7 +335,7 @@ public function getSchemaFromMetadata(array $classes) $quotedName = $this->platform->quoteIdentifier($property->getValueGenerator()->getDefinition()['sequenceName']); - if ( ! $schema->hasSequence($quotedName)) { + if (! $schema->hasSequence($quotedName)) { $schema->createSequence($quotedName, $property->getValueGenerator()->getDefinition()['allocationSize']); } } @@ -408,7 +410,7 @@ private function gatherColumns($class, Table $table) { $pkColumns = []; - foreach ($class->getProperties() as $fieldName => $property) { + foreach ($class->getDeclaredPropertiesIterator() as $fieldName => $property) { if (! ($property instanceof FieldMetadata)) { continue; } @@ -448,7 +450,7 @@ private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Tabl ], ]; - if ($classMetadata->inheritanceType === InheritanceType::SINGLE_TABLE && count($classMetadata->getParentClasses()) > 0) { + if ($classMetadata->inheritanceType === InheritanceType::SINGLE_TABLE && $classMetadata->getParent()) { $options['notnull'] = false; } @@ -526,7 +528,7 @@ private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Tabl */ private function gatherRelationsSql($class, $table, $schema, &$addedFks, &$blacklistedFks) { - foreach ($class->getProperties() as $fieldName => $property) { + foreach ($class->getDeclaredPropertiesIterator() as $fieldName => $property) { if (! ($property instanceof AssociationMetadata)) { continue; } @@ -615,10 +617,10 @@ private function gatherRelationsSql($class, $table, $schema, &$addedFks, &$black private function getDefiningClass($class, $referencedColumnName) { if (isset($class->fieldNames[$referencedColumnName])) { - $referencedFieldName = $class->fieldNames[$referencedColumnName]; + $propertyName = $class->fieldNames[$referencedColumnName]; - if ($class->hasField($referencedFieldName)) { - return [$class, $referencedFieldName]; + if ($class->hasField($propertyName)) { + return [$class, $propertyName]; } } diff --git a/lib/Doctrine/ORM/Tools/SchemaValidator.php b/lib/Doctrine/ORM/Tools/SchemaValidator.php index 918dd6ee850..b207dc8d2c1 100644 --- a/lib/Doctrine/ORM/Tools/SchemaValidator.php +++ b/lib/Doctrine/ORM/Tools/SchemaValidator.php @@ -80,7 +80,7 @@ public function validateClass(ClassMetadata $class) { $ce = []; - foreach ($class->getProperties() as $fieldName => $association) { + foreach ($class->getDeclaredPropertiesIterator() as $fieldName => $association) { if (! ($association instanceof AssociationMetadata)) { continue; } diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 7ae1b7043a8..5436bc02a48 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -511,7 +511,7 @@ public function computeChangeSet(ClassMetadata $class, $entity) $actualData = []; - foreach ($class->getProperties() as $name => $property) { + foreach ($class->getDeclaredPropertiesIterator() as $name => $property) { $value = $property->getValue($entity); if ($property instanceof ToManyAssociationMetadata && $value !== null) { @@ -648,7 +648,7 @@ public function computeChangeSet(ClassMetadata $class, $entity) } // Look for changes in associations of the entity - foreach ($class->getProperties() as $property) { + foreach ($class->getDeclaredPropertiesIterator() as $property) { if (! ($property instanceof AssociationMetadata) || ($value = $property->getValue($entity)) === null) { continue; } @@ -845,12 +845,13 @@ private function persistNew($class, $entity) * @return void * * @throws ORMInvalidArgumentException If the passed entity is not MANAGED. + * @throws \RuntimeException */ - public function recomputeSingleEntityChangeSet(ClassMetadata $class, $entity) + public function recomputeSingleEntityChangeSet(ClassMetadata $class, $entity) : void { $oid = spl_object_hash($entity); - if ( ! isset($this->entityStates[$oid]) || $this->entityStates[$oid] != self::STATE_MANAGED) { + if (! isset($this->entityStates[$oid]) || $this->entityStates[$oid] !== self::STATE_MANAGED) { throw ORMInvalidArgumentException::entityNotManaged($entity); } @@ -865,7 +866,7 @@ public function recomputeSingleEntityChangeSet(ClassMetadata $class, $entity) $actualData = []; - foreach ($class->getProperties() as $name => $property) { + foreach ($class->getDeclaredPropertiesIterator() as $name => $property) { switch (true) { case ($property instanceof VersionFieldMetadata): // Ignore version field @@ -915,11 +916,11 @@ public function recomputeSingleEntityChangeSet(ClassMetadata $class, $entity) /** * Executes all entity insertions for entities of the specified type. * - * @param \Doctrine\ORM\Mapping\ClassMetadata $class + * @param ClassMetadata $class * * @return void */ - private function executeInserts($class) + private function executeInserts(ClassMetadata $class) : void { $className = $class->getClassName(); $persister = $this->getEntityPersister($className); @@ -1077,7 +1078,7 @@ private function getCommitOrder(array $entityChangeSet = null) // Calculate dependencies for new nodes while ($class = array_pop($newNodes)) { - foreach ($class->getProperties() as $property) { + foreach ($class->getDeclaredPropertiesIterator() as $property) { if (! ($property instanceof ToOneAssociationMetadata && $property->isOwningSide())) { continue; } @@ -1220,7 +1221,7 @@ public function scheduleExtraUpdate($entity, array $changeset) : void $extraUpdate = [$entity, $changeset]; if (isset($this->extraUpdates[$oid])) { - list(, $changeset2) = $this->extraUpdates[$oid]; + [$unused, $changeset2] = $this->extraUpdates[$oid]; $extraUpdate = [$entity, $changeset + $changeset2]; } @@ -1249,7 +1250,7 @@ public function isScheduledForUpdate($entity) : bool * * @return boolean */ - public function isScheduledForDirtyCheck($entity) + public function isScheduledForDirtyCheck($entity) : bool { $rootEntityName = $this->em->getClassMetadata(get_class($entity))->getRootClassName(); @@ -2016,15 +2017,13 @@ private function doRefresh($entity, array &$visited) */ private function cascadeRefresh($entity, array &$visited) { - $class = $this->em->getClassMetadata(get_class($entity)); - $associations = array_filter( - $class->getProperties(), - function (Property $property) { - return $property instanceof AssociationMetadata && in_array('refresh', $property->getCascade()); + $class = $this->em->getClassMetadata(get_class($entity)); + + foreach ($class->getDeclaredPropertiesIterator() as $association) { + if (! ($association instanceof AssociationMetadata && in_array('refresh', $association->getCascade()))) { + continue; } - ); - foreach ($associations as $association) { $relatedEntities = $association->getValue($entity); switch (true) { @@ -2060,15 +2059,13 @@ function (Property $property) { */ private function cascadeDetach($entity, array &$visited) { - $class = $this->em->getClassMetadata(get_class($entity)); - $associations = array_filter( - $class->getProperties(), - function (Property $property) { - return $property instanceof AssociationMetadata && in_array('detach', $property->getCascade()); + $class = $this->em->getClassMetadata(get_class($entity)); + + foreach ($class->getDeclaredPropertiesIterator() as $association) { + if (! ($association instanceof AssociationMetadata && in_array('detach', $association->getCascade()))) { + continue; } - ); - foreach ($associations as $association) { $relatedEntities = $association->getValue($entity); switch (true) { @@ -2105,15 +2102,13 @@ function (Property $property) { */ private function cascadeMerge($entity, $managedCopy, array &$visited) { - $class = $this->em->getClassMetadata(get_class($entity)); - $associations = array_filter( - $class->getProperties(), - function (Property $property) { - return $property instanceof AssociationMetadata && in_array('merge', $property->getCascade()); + $class = $this->em->getClassMetadata(get_class($entity)); + + foreach ($class->getDeclaredPropertiesIterator() as $association) { + if (! ($association instanceof AssociationMetadata && in_array('merge', $association->getCascade()))) { + continue; } - ); - foreach ($associations as $association) { /** @var AssociationMetadata $association */ $relatedEntities = $association->getValue($entity); @@ -2146,15 +2141,13 @@ function (Property $property) { */ private function cascadePersist($entity, array &$visited) { - $class = $this->em->getClassMetadata(get_class($entity)); - $associations = array_filter( - $class->getProperties(), - function (Property $property) { - return $property instanceof AssociationMetadata && in_array('persist', $property->getCascade()); + $class = $this->em->getClassMetadata(get_class($entity)); + + foreach ($class->getDeclaredPropertiesIterator() as $association) { + if (! ($association instanceof AssociationMetadata && in_array('persist', $association->getCascade()))) { + continue; } - ); - foreach ($associations as $association) { /** @var AssociationMetadata $association */ $relatedEntities = $association->getValue($entity); $targetEntity = $association->getTargetEntity(); @@ -2211,14 +2204,12 @@ private function cascadeRemove($entity, array &$visited) { $entitiesToCascade = []; $class = $this->em->getClassMetadata(get_class($entity)); - $associations = array_filter( - $class->getProperties(), - function (Property $property) { - return $property instanceof AssociationMetadata && in_array('remove', $property->getCascade()); + + foreach ($class->getDeclaredPropertiesIterator() as $association) { + if (! ($association instanceof AssociationMetadata && in_array('remove', $association->getCascade()))) { + continue; } - ); - foreach ($associations as $association) { if ($entity instanceof Proxy && ! $entity->__isInitialized()) { $entity->__load(); } @@ -2541,7 +2532,7 @@ public function createEntity($className, array $data, &$hints = []) return $entity; } - foreach ($class->getProperties() as $field => $association) { + foreach ($class->getDeclaredPropertiesIterator() as $field => $association) { if (! ($association instanceof AssociationMetadata)) { continue; } @@ -2626,6 +2617,7 @@ public function createEntity($className, array $data, &$hints = []) // TODO: Is this even computed right in all cases of composite keys? foreach ($association->getJoinColumns() as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ $joinColumnName = $joinColumn->getColumnName(); $joinColumnValue = isset($data[$joinColumnName]) ? $data[$joinColumnName] : null; $targetField = $targetClass->fieldNames[$joinColumn->getReferencedColumnName()]; @@ -2640,7 +2632,7 @@ public function createEntity($className, array $data, &$hints = []) $associatedId[$targetField] = $joinColumnValue; } - if (!$associatedId) { + if (! $associatedId) { // Foreign key is NULL $association->setValue($entity, null); $this->originalEntityData[$oid][$field] = null; @@ -3312,7 +3304,7 @@ private function mergeEntityStateIntoManagedCopy($entity, $managedCopy) $class = $this->em->getClassMetadata(get_class($entity)); - foreach ($class->getProperties() as $property) { + foreach ($class->getDeclaredPropertiesIterator() as $property) { switch (true) { case ($property instanceof FieldMetadata): if (! $property->isPrimaryKey()) { diff --git a/lib/Doctrine/ORM/Utility/PersisterHelper.php b/lib/Doctrine/ORM/Utility/PersisterHelper.php index 82065cc01c1..12fb60043ea 100644 --- a/lib/Doctrine/ORM/Utility/PersisterHelper.php +++ b/lib/Doctrine/ORM/Utility/PersisterHelper.php @@ -61,7 +61,7 @@ public static function getTypeOfColumn($columnName, ClassMetadata $class, Entity } // iterate over association mappings - foreach ($class->getProperties() as $association) { + foreach ($class->getDeclaredPropertiesIterator() as $association) { if (! ($association instanceof AssociationMetadata)) { continue; } diff --git a/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php b/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php index 864ef569858..a5835f6c08b 100644 --- a/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php +++ b/tests/Doctrine/Tests/EventListener/CacheMetadataListener.php @@ -31,7 +31,7 @@ public function loadClassMetadata(LoadClassMetadataEventArgs $event) $em = $event->getObjectManager(); /** @var $metadata \Doctrine\ORM\Mapping\ClassMetadata */ - if (strstr($metadata->name, 'Doctrine\Tests\Models\Cache')) { + if (strstr($metadata->getClassName(), 'Doctrine\Tests\Models\Cache')) { return; } diff --git a/tests/Doctrine/Tests/Mocks/MetadataDriverMock.php b/tests/Doctrine/Tests/Mocks/MetadataDriverMock.php index 2e52f536502..e9a229a5078 100644 --- a/tests/Doctrine/Tests/Mocks/MetadataDriverMock.php +++ b/tests/Doctrine/Tests/Mocks/MetadataDriverMock.php @@ -4,6 +4,7 @@ namespace Doctrine\Tests\Mocks; +use Doctrine\ORM\Mapping\ClassMetadataBuildingContext; use Doctrine\ORM\Mapping\Driver\MappingDriver; use Doctrine\ORM\Mapping\ClassMetadata; @@ -15,7 +16,11 @@ class MetadataDriverMock implements MappingDriver /** * {@inheritdoc} */ - public function loadMetadataForClass($className, ClassMetadata $metadata) + public function loadMetadataForClass( + string $className, + ClassMetadata $metadata, + ClassMetadataBuildingContext $metadataBuildingContext + ) { } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php b/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php index 6e9dc3de01e..c71a609066a 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php @@ -10,14 +10,16 @@ /** * @ORM\Entity * @ORM\AssociationOverrides({ - * @ORM\AssociationOverride(name="groups", + * @ORM\AssociationOverride( + * name="groups", * joinTable=@ORM\JoinTable( * name="ddc964_users_admingroups", * joinColumns=@ORM\JoinColumn(name="adminuser_id"), * inverseJoinColumns=@ORM\JoinColumn(name="admingroup_id") * ) * ), - * @ORM\AssociationOverride(name="address", + * @ORM\AssociationOverride( + * name="address", * joinColumns=@ORM\JoinColumn( * name="adminaddress_id", referencedColumnName="id" * ) diff --git a/tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php b/tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php index b81b8fec920..d758de32b6a 100644 --- a/tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php +++ b/tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php @@ -6,6 +6,8 @@ use Doctrine\ORM\Internal\CommitOrderCalculator; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ClassMetadataBuildingContext; +use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\Tests\OrmTestCase; /** @@ -17,20 +19,31 @@ */ class CommitOrderCalculatorTest extends OrmTestCase { + /** + * @var CommitOrderCalculator + */ private $calc; + /** + * @var ClassMetadataBuildingContext|\PHPUnit_Framework_MockObject_MockObject + */ + private $metadataBuildingContext; + protected function setUp() { - $this->calc = new CommitOrderCalculator(); + $this->calc = new CommitOrderCalculator(); + $this->metadataBuildingContext = new ClassMetadataBuildingContext( + $this->createMock(ClassMetadataFactory::class) + ); } public function testCommitOrdering1() { - $class1 = new ClassMetadata(NodeClass1::class); - $class2 = new ClassMetadata(NodeClass2::class); - $class3 = new ClassMetadata(NodeClass3::class); - $class4 = new ClassMetadata(NodeClass4::class); - $class5 = new ClassMetadata(NodeClass5::class); + $class1 = new ClassMetadata(NodeClass1::class, $this->metadataBuildingContext); + $class2 = new ClassMetadata(NodeClass2::class, $this->metadataBuildingContext); + $class3 = new ClassMetadata(NodeClass3::class, $this->metadataBuildingContext); + $class4 = new ClassMetadata(NodeClass4::class, $this->metadataBuildingContext); + $class5 = new ClassMetadata(NodeClass5::class, $this->metadataBuildingContext); $this->calc->addNode($class1->getClassName(), $class1); $this->calc->addNode($class2->getClassName(), $class2); @@ -53,8 +66,8 @@ public function testCommitOrdering1() public function testCommitOrdering2() { - $class1 = new ClassMetadata(NodeClass1::class); - $class2 = new ClassMetadata(NodeClass2::class); + $class1 = new ClassMetadata(NodeClass1::class, $this->metadataBuildingContext); + $class2 = new ClassMetadata(NodeClass2::class, $this->metadataBuildingContext); $this->calc->addNode($class1->getClassName(), $class1); $this->calc->addNode($class2->getClassName(), $class2); diff --git a/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php b/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php index a66871d197a..9c256c2ecb2 100644 --- a/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php +++ b/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php @@ -5,8 +5,11 @@ namespace Doctrine\Tests\ORM; use Doctrine\Common\Persistence\ObjectManager; +use Doctrine\ORM\EntityManager; use Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ClassMetadataBuildingContext; +use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\Tests\DoctrineTestCase; /** @@ -18,13 +21,16 @@ class OnClassMetadataNotFoundEventArgsTest extends DoctrineTestCase { public function testEventArgsMutability() { - /* @var $objectManager \Doctrine\Common\Persistence\ObjectManager */ - $objectManager = $this->createMock(ObjectManager::class); + $entityManager = $this->createMock(EntityManager::class); + $metadataBuildingContext = new ClassMetadataBuildingContext( + $this->createMock(ClassMetadataFactory::class) + ); - $args = new OnClassMetadataNotFoundEventArgs('foo', $objectManager); + $args = new OnClassMetadataNotFoundEventArgs('foo', $metadataBuildingContext, $entityManager); self::assertSame('foo', $args->getClassName()); - self::assertSame($objectManager, $args->getObjectManager()); + self::assertSame($metadataBuildingContext, $args->getClassMetadataBuildingContext()); + self::assertSame($entityManager, $args->getObjectManager()); self::assertNull($args->getFoundMetadata()); diff --git a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php index 2aca2af67e7..397a88c2aab 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTest.php @@ -118,7 +118,7 @@ public function testLoadMetadataWithForeignKeyFromDatabase() self::assertNull($bazMetadata->getProperty('barId'), "The foreign Key field should not be inflected, as 'barId' field is an association."); self::assertNotNull($bazMetadata->getProperty('id')); - self::assertArrayHasKey('bar', $bazMetadata->getProperties()); + self::assertArrayHasKey('bar', $bazMetadata->getDeclaredPropertiesIterator()); self::assertInstanceOf(ManyToOneAssociationMetadata::class, $bazMetadata->getProperty('bar')); } @@ -159,7 +159,7 @@ public function testIgnoreManyToManyTableWithoutFurtherForeignKeyDetails() $metadatas = $this->convertToClassMetadata([$tableA, $tableB], [$tableMany]); - self::assertCount(1, $metadatas['DbdriverBaz']->getProperties(), "no association mappings should be detected."); + self::assertCount(1, $metadatas['DbdriverBaz']->getDeclaredPropertiesIterator(), "no association mappings should be detected."); } public function testLoadMetadataFromDatabaseDetail() diff --git a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTestCase.php b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTestCase.php index 6fee2128622..bd901a1b7bc 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTestCase.php +++ b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTestCase.php @@ -4,6 +4,8 @@ namespace Doctrine\Tests\ORM\Functional; +use Doctrine\ORM\Mapping\ClassMetadataBuildingContext; +use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\Driver\DatabaseDriver; use Doctrine\Tests\OrmFunctionalTestCase; use Doctrine\ORM\Mapping\ClassMetadata; @@ -15,14 +17,20 @@ abstract class DatabaseDriverTestCase extends OrmFunctionalTestCase { protected function convertToClassMetadata(array $entityTables, array $manyTables = []) { + $metadataBuildingContext = new ClassMetadataBuildingContext( + $this->createMock(ClassMetadataFactory::class) + ); $sm = $this->em->getConnection()->getSchemaManager(); $driver = new DatabaseDriver($sm); $driver->setTables($entityTables, $manyTables); $metadatas = []; + foreach ($driver->getAllClassNames() AS $className) { - $class = new ClassMetadata($className); - $driver->loadMetadataForClass($className, $class); + $class = new ClassMetadata($className, $metadataBuildingContext); + + $driver->loadMetadataForClass($className, $class, $metadataBuildingContext); + $metadatas[$className] = $class; } @@ -35,6 +43,9 @@ protected function convertToClassMetadata(array $entityTables, array $manyTables */ protected function extractClassMetadata(array $classNames) { + $metadataBuildingContext = new ClassMetadataBuildingContext( + $this->createMock(ClassMetadataFactory::class) + ); $classNames = array_map('strtolower', $classNames); $metadatas = []; @@ -45,8 +56,11 @@ protected function extractClassMetadata(array $classNames) if (!in_array(strtolower($className), $classNames)) { continue; } - $class = new ClassMetadata($className); + + $class = new ClassMetadata($className, $metadataBuildingContext); + $driver->loadMetadataForClass($className, $class); + $metadatas[$className] = $class; } diff --git a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php index 2f1c7924302..004e2f28eeb 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php @@ -10,6 +10,8 @@ use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ClassMetadataBuildingContext; +use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Query\Filter\SQLFilter; use Doctrine\ORM\Query\FilterCollection; @@ -297,15 +299,18 @@ public function testSQLFilterSetParameterInfersType() public function testSQLFilterAddConstraint() { + $metadataBuildingContext = new ClassMetadataBuildingContext( + $this->createMock(ClassMetadataFactory::class) + ); $filter = new MySoftDeleteFilter($this->getMockEntityManager()); // Test for an entity that gets extra filter data - $metadata = new ClassMetadata('MyEntity\SoftDeleteNewsItem'); + $metadata = new ClassMetadata('MyEntity\SoftDeleteNewsItem', $metadataBuildingContext); self::assertEquals('t1_.deleted = 0', $filter->addFilterConstraint($metadata, 't1_')); // Test for an entity that doesn't get extra filter data - $metadata = new ClassMetadata('MyEntity\NoSoftDeleteNewsItem'); + $metadata = new ClassMetadata('MyEntity\NoSoftDeleteNewsItem', $metadataBuildingContext); self::assertEquals('', $filter->addFilterConstraint($metadata, 't1_')); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php index cf3b57cdb99..27e67545e88 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC168Test.php @@ -12,15 +12,13 @@ class DDC168Test extends \Doctrine\Tests\OrmFunctionalTestCase protected function setUp() { $this->useModelSet('company'); + parent::setUp(); $this->oldMetadata = $this->em->getClassMetadata(CompanyEmployee::class); - $metadata = clone $this->oldMetadata; - $properties = $metadata->getProperties(); - - ksort($properties); - + $metadata = clone $this->oldMetadata; + $this->em->getMetadataFactory()->setMetadataFor(CompanyEmployee::class, $metadata); } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php index df1ba1e4e9a..fb694453a60 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php @@ -48,8 +48,8 @@ public function testIssue() $mockMetadata ->expects($this->any()) - ->method('getProperties') - ->will($this->returnValue([])); + ->method('getDeclaredPropertiesIterator') + ->will($this->returnValue(new \ArrayIterator([]))); $entityManager->expects($this->any())->method('getConfiguration')->will($this->returnValue($configuration)); $entityManager->expects($this->any())->method('getConnection')->will($this->returnValue($connection)); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php index cd1191eb1df..c3dd0a3a2ad 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php @@ -6,6 +6,8 @@ use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ClassMetadataBuildingContext; +use Doctrine\ORM\Mapping\ClassMetadataFactory; /** * @group DDC-3103 @@ -19,9 +21,13 @@ public function testIssue() { $this->markTestSkipped('Embeddables are ommitted for now'); - $classMetadata = new ClassMetadata(DDC3103ArticleId::class); + $driver = $this->createAnnotationDriver(); + $metadataBuildingContext = new ClassMetadataBuildingContext( + $this->createMock(ClassMetadataFactory::class) + ); + $classMetadata = new ClassMetadata(DDC3103ArticleId::class, $metadataBuildingContext); - $this->createAnnotationDriver()->loadMetadataForClass(DDC3103ArticleId::class, $classMetadata); + $driver->loadMetadataForClass(DDC3103ArticleId::class, $classMetadata, $metadataBuildingContext); self::assertTrue( $classMetadata->isEmbeddedClass, diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php index 632e5fe1c8f..3dd84629a2c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php @@ -68,7 +68,7 @@ public function testCascadeRemoveOnChildren() { $class = $this->em->getClassMetadata(DDC599Subitem::class); - self::assertArrayHasKey('children', $class->getProperties()); + self::assertArrayHasKey('children', $class->getDeclaredPropertiesIterator()); self::assertContains('remove', $class->getProperty('children')->getCascade()); } } diff --git a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php index bd33b71b4c8..6b44e9e33ab 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php @@ -6,6 +6,8 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ClassMetadataBuildingContext; +use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; use Doctrine\ORM\Query\ResultSetMapping; @@ -33,12 +35,20 @@ class ResultSetMappingTest extends \Doctrine\Tests\OrmTestCase */ private $rsm; + /** + * @var ClassMetadataBuildingContext + */ + private $metadataBuildingContext; + protected function setUp() { parent::setUp(); - $this->em = $this->getTestEntityManager(); - $this->rsm = new ResultSetMapping; + $this->metadataBuildingContext = new ClassMetadataBuildingContext( + $this->createMock(ClassMetadataFactory::class) + ); + $this->em = $this->getTestEntityManager(); + $this->rsm = new ResultSetMapping; } /** @@ -109,7 +119,7 @@ public function testFluentInterface() */ public function testAddNamedNativeQueryResultSetMapping() { - $cm = new ClassMetadata(CmsUser::class); + $cm = new ClassMetadata(CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $joinColumn = new JoinColumnMetadata(); @@ -197,7 +207,7 @@ public function testAddNamedNativeQueryResultSetMapping() */ public function testAddNamedNativeQueryResultSetMappingWithoutFields() { - $cm = new ClassMetadata(CmsUser::class); + $cm = new ClassMetadata(CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $cm->addNamedNativeQuery( diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 4821fb6ee99..c4c77dd2f63 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -42,15 +42,30 @@ abstract class AbstractMappingDriverTest extends OrmTestCase { + /** + * @var Mapping\ClassMetadataBuildingContext + */ + protected $metadataBuildingContext; + + public function setUp() + { + parent::setUp(); + + $this->metadataBuildingContext = new Mapping\ClassMetadataBuildingContext( + $this->createMock(ClassMetadataFactory::class) + ); + } + abstract protected function loadDriver(); public function createClassMetadata($entityClassName) { $mappingDriver = $this->loadDriver(); - $class = new ClassMetadata($entityClassName); + $class = new ClassMetadata($entityClassName, $this->metadataBuildingContext); + $class->initializeReflection(new RuntimeReflectionService()); - $mappingDriver->loadMetadataForClass($entityClassName, $class); + $mappingDriver->loadMetadataForClass($entityClassName, $class, $this->metadataBuildingContext); return $class; } @@ -217,7 +232,7 @@ public function testEntityCustomGenerator() */ public function testProperties($class) { - self::assertCount(7, $class->getProperties()); + self::assertCount(7, $class->getDeclaredPropertiesIterator()); self::assertNotNull($class->getProperty('id')); self::assertNotNull($class->getProperty('name')); @@ -356,7 +371,7 @@ public function testBooleanValuesForOptionIsSetCorrectly() */ public function testOwningOneToOneAssociation($class) { - self::assertArrayHasKey('address', $class->getProperties()); + self::assertArrayHasKey('address', $class->getDeclaredPropertiesIterator()); $association = $class->getProperty('address'); @@ -374,7 +389,7 @@ public function testOwningOneToOneAssociation($class) */ public function testInverseOneToManyAssociation($class) { - self::assertArrayHasKey('phonenumbers', $class->getProperties()); + self::assertArrayHasKey('phonenumbers', $class->getDeclaredPropertiesIterator()); $association = $class->getProperty('phonenumbers'); @@ -396,7 +411,7 @@ public function testInverseOneToManyAssociation($class) */ public function testManyToManyAssociationWithCascadeAll($class) { - self::assertArrayHasKey('groups', $class->getProperties()); + self::assertArrayHasKey('groups', $class->getDeclaredPropertiesIterator()); $association = $class->getProperty('groups'); @@ -796,8 +811,8 @@ public function testAssociationOverridesMapping() $guestMetadata = $factory->getMetadataFor(DDC964Guest::class); // assert groups association mappings - self::assertArrayHasKey('groups', $guestMetadata->getProperties()); - self::assertArrayHasKey('groups', $adminMetadata->getProperties()); + self::assertArrayHasKey('groups', $guestMetadata->getDeclaredPropertiesIterator()); + self::assertArrayHasKey('groups', $adminMetadata->getDeclaredPropertiesIterator()); $guestGroups = $guestMetadata->getProperty('groups'); $adminGroups = $adminMetadata->getProperty('groups'); @@ -833,8 +848,8 @@ public function testAssociationOverridesMapping() self::assertEquals('admingroup_id', $adminGroupsInverseJoinColumn->getColumnName()); // assert address association mappings - self::assertArrayHasKey('address', $guestMetadata->getProperties()); - self::assertArrayHasKey('address', $adminMetadata->getProperties()); + self::assertArrayHasKey('address', $guestMetadata->getDeclaredPropertiesIterator()); + self::assertArrayHasKey('address', $adminMetadata->getDeclaredPropertiesIterator()); $guestAddress = $guestMetadata->getProperty('address'); $adminAddress = $adminMetadata->getProperty('address'); @@ -869,7 +884,7 @@ public function testInversedByOverrideMapping() $adminMetadata = $factory->getMetadataFor(DDC3579Admin::class); // assert groups association mappings - self::assertArrayHasKey('groups', $adminMetadata->getProperties()); + self::assertArrayHasKey('groups', $adminMetadata->getDeclaredPropertiesIterator()); $adminGroups = $adminMetadata->getProperty('groups'); @@ -885,7 +900,7 @@ public function testFetchOverrideMapping() // check override metadata $contractMetadata = $this->createClassMetadataFactory()->getMetadataFor(DDC5934Contract::class); - self::assertArrayHasKey('members', $contractMetadata->getProperties()); + self::assertArrayHasKey('members', $contractMetadata->getDeclaredPropertiesIterator()); $contractMembers = $contractMetadata->getProperty('members'); @@ -933,6 +948,7 @@ public function testAttributeOverridesMapping() [ 'guest_id' => 'id', 'guest_name' => 'name', + 'address_id' => 'address', ], $guestMetadata->fieldNames ); @@ -1084,7 +1100,7 @@ public function testSecondLevelCacheMapping() self::assertEquals(Mapping\CacheUsage::READ_ONLY, $class->getCache()->getUsage()); self::assertEquals('doctrine_tests_models_cache_city', $class->getCache()->getRegion()); - self::assertArrayHasKey('state', $class->getProperties()); + self::assertArrayHasKey('state', $class->getDeclaredPropertiesIterator()); $stateAssociation = $class->getProperty('state'); @@ -1092,7 +1108,7 @@ public function testSecondLevelCacheMapping() self::assertEquals(Mapping\CacheUsage::READ_ONLY, $stateAssociation->getCache()->getUsage()); self::assertEquals('doctrine_tests_models_cache_city__state', $stateAssociation->getCache()->getRegion()); - self::assertArrayHasKey('attractions', $class->getProperties()); + self::assertArrayHasKey('attractions', $class->getDeclaredPropertiesIterator()); $attractionsAssociation = $class->getProperty('attractions'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php index 6642b866e71..3a5c3c5acd6 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php @@ -26,13 +26,13 @@ class AnnotationDriverTest extends AbstractMappingDriverTest */ public function testLoadMetadataForNonEntityThrowsException() { - $cm = new ClassMetadata('stdClass'); + $cm = new ClassMetadata('stdClass', $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $reader = new AnnotationReader(); $annotationDriver = new AnnotationDriver($reader); $this->expectException(MappingException::class); - $annotationDriver->loadMetadataForClass('stdClass', $cm); + $annotationDriver->loadMetadataForClass('stdClass', $cm, $this->metadataBuildingContext); } /** @@ -43,8 +43,8 @@ public function testFailingSecondLevelCacheAssociation() { $mappingDriver = $this->loadDriver(); - $class = new ClassMetadata(AnnotationSLC::class); - $mappingDriver->loadMetadataForClass(AnnotationSLC::class, $class); + $class = new ClassMetadata(AnnotationSLC::class, $this->metadataBuildingContext); + $mappingDriver->loadMetadataForClass(AnnotationSLC::class, $class, $this->metadataBuildingContext); } /** @@ -52,11 +52,11 @@ public function testFailingSecondLevelCacheAssociation() */ public function testColumnWithMissingTypeDefaultsToString() { - $cm = new ClassMetadata(ColumnWithoutType::class); + $cm = new ClassMetadata(ColumnWithoutType::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $annotationDriver = $this->loadDriver(); - $annotationDriver->loadMetadataForClass(ColumnWithoutType::class, $cm); + $annotationDriver->loadMetadataForClass(ColumnWithoutType::class, $cm, $this->metadataBuildingContext); self::assertNotNull($cm->getProperty('id')); @@ -152,11 +152,11 @@ public function testJoinTablesWithMappedSuperclassForAnnotationDriver() $factory->setEntityManager($em); $classPage = $factory->getMetadataFor(File::class); - self::assertArrayHasKey('parentDirectory', $classPage->getProperties()); + self::assertArrayHasKey('parentDirectory', $classPage->getDeclaredPropertiesIterator()); self::assertEquals(File::class, $classPage->getProperty('parentDirectory')->getSourceEntity()); $classDirectory = $factory->getMetadataFor(Directory::class); - self::assertArrayHasKey('parentDirectory', $classDirectory->getProperties()); + self::assertArrayHasKey('parentDirectory', $classDirectory->getDeclaredPropertiesIterator()); self::assertEquals(Directory::class, $classDirectory->getProperty('parentDirectory')->getSourceEntity()); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index 36ad97c0c44..0bf9701e06d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -46,7 +46,7 @@ public function testGetMetadataForSubclassWithTransientBaseClass() $class = $this->cmf->getMetadataFor(EntitySubClass::class); self::assertEmpty($class->getSubClasses()); - self::assertEmpty($class->getParentClasses()); + self::assertCount(0, $class->getAncestorsIterator()); self::assertNotNull($class->getProperty('id')); self::assertNotNull($class->getProperty('name')); @@ -57,7 +57,7 @@ public function testGetMetadataForSubclassWithMappedSuperclass() $class = $this->cmf->getMetadataFor(EntitySubClass2::class); self::assertEmpty($class->getSubClasses()); - self::assertEmpty($class->getParentClasses()); + self::assertCount(0, $class->getAncestorsIterator()); self::assertNotNull($class->getProperty('id')); self::assertNotNull($class->getProperty('name')); @@ -70,7 +70,7 @@ public function testGetMetadataForSubclassWithMappedSuperclass() self::assertNotNull($class->getProperty('transient')); self::assertInstanceOf(TransientMetadata::class, $class->getProperty('transient')); - self::assertArrayHasKey('mappedRelated1', $class->getProperties()); + self::assertArrayHasKey('mappedRelated1', $class->getDeclaredPropertiesIterator()); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 04ce04d409f..315fdb0f3d1 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -53,11 +53,11 @@ public function testGetMetadataForSingleClass() $cmf->setMetadataFor($cm1->getClassName(), $cm1); // Prechecks - self::assertEquals([], $cm1->getParentClasses()); + self::assertCount(0, $cm1->getAncestorsIterator()); self::assertEquals(Mapping\InheritanceType::NONE, $cm1->inheritanceType); self::assertEquals(Mapping\GeneratorType::AUTO, $cm1->getProperty('id')->getValueGenerator()->getType()); self::assertTrue($cm1->hasField('name')); - self::assertCount(4, $cm1->getProperties()); // 2 fields + 2 associations + self::assertCount(4, $cm1->getDeclaredPropertiesIterator()); // 2 fields + 2 associations self::assertEquals('group', $cm1->table->getName()); // Go @@ -65,7 +65,7 @@ public function testGetMetadataForSingleClass() self::assertSame($cm1, $cmMap1); self::assertEquals('group', $cmMap1->table->getName()); - self::assertEquals([], $cmMap1->getParentClasses()); + self::assertCount(0, $cmMap1->getAncestorsIterator()); self::assertTrue($cmMap1->hasField('name')); } @@ -73,13 +73,15 @@ public function testGetMetadataFor_ThrowsExceptionOnUnknownCustomGeneratorClass( { $cm1 = $this->createValidClassMetadata(); - $cm1->getProperty('id')->setValueGenerator(new Mapping\ValueGeneratorMetadata( - Mapping\GeneratorType::CUSTOM, - [ - 'class' => 'NotExistingGenerator', - 'arguments' => [], - ] - )); + $cm1->getProperty('id')->setValueGenerator( + new Mapping\ValueGeneratorMetadata( + Mapping\GeneratorType::CUSTOM, + [ + 'class' => 'NotExistingGenerator', + 'arguments' => [], + ] + ) + ); $cmf = $this->createTestFactory(); @@ -93,9 +95,15 @@ public function testGetMetadataFor_ThrowsExceptionOnUnknownCustomGeneratorClass( public function testGetMetadataFor_ThrowsExceptionOnMissingCustomGeneratorDefinition() { $cm1 = $this->createValidClassMetadata(); - $cm1->getProperty('id')->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::CUSTOM)); + + $cm1->getProperty('id')->setValueGenerator( + new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::CUSTOM) + ); + $cmf = $this->createTestFactory(); + $cmf->setMetadataForClass($cm1->getClassName(), $cm1); + $this->expectException(ORMException::class); $actual = $cmf->getMetadataFor($cm1->getClassName()); @@ -262,7 +270,10 @@ protected function createTestFactory() protected function createValidClassMetadata() { // Self-made metadata - $cm1 = new ClassMetadata(TestEntity1::class); + $metadataBuildingContext = new Mapping\ClassMetadataBuildingContext( + $this->createMock(ClassMetadataFactory::class) + ); + $cm1 = new ClassMetadata(TestEntity1::class, $metadataBuildingContext); $cm1->initializeReflection(new RuntimeReflectionService()); $tableMetadata = new Mapping\TableMetadata(); @@ -488,12 +499,17 @@ class ClassMetadataFactoryTestSubject extends ClassMetadataFactory private $requestedClasses = []; /** @override */ - protected function newClassMetadataInstance($className) + protected function newClassMetadataInstance( + string $className, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) : ClassMetadata { $this->requestedClasses[] = $className; + if ( ! isset($this->mockMetadata[$className])) { throw new \InvalidArgumentException("No mock metadata found for class $className."); } + return $this->mockMetadata[$className]; } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 9c018531b03..1eb330a629d 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -34,27 +34,48 @@ class ClassMetadataTest extends OrmTestCase { - public function testClassMetadataInstanceSerialization() + /** + * @var Mapping\ClassMetadataBuildingContext|\PHPUnit_Framework_MockObject_MockObject + */ + private $metadataBuildingContext; + + public function setUp() + { + parent::setUp(); + + $this->metadataBuildingContext = new Mapping\ClassMetadataBuildingContext( + $this->createMock(Mapping\ClassMetadataFactory::class) + ); + } + + public function testClassMetadataInstanceSimpleState() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->initializeReflection(new RuntimeReflectionService()); - // Test initial state self::assertInstanceOf(\ReflectionClass::class, $cm->getReflectionClass()); self::assertEquals(CMS\CmsUser::class, $cm->getClassName()); self::assertEquals(CMS\CmsUser::class, $cm->getRootClassName()); self::assertEquals([], $cm->getSubClasses()); - self::assertEquals([], $cm->getParentClasses()); + self::assertCount(0, $cm->getAncestorsIterator()); self::assertEquals(Mapping\InheritanceType::NONE, $cm->inheritanceType); + } + + public function testClassMetadataInstanceSerialization() + { + $parent = new ClassMetadata(CMS\CmsEmployee::class, $this->metadataBuildingContext); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + + $cm->setParent($parent); + $cm->initializeReflection(new RuntimeReflectionService()); - // Customize state $discrColumn = new DiscriminatorColumnMetadata(); $discrColumn->setColumnName('disc'); $discrColumn->setType(Type::getType('integer')); $cm->setInheritanceType(Mapping\InheritanceType::SINGLE_TABLE); - $cm->setParentClasses(["UserParent"]); $cm->setSubclasses([ 'Doctrine\Tests\Models\CMS\One', 'Doctrine\Tests\Models\CMS\Two', @@ -72,7 +93,7 @@ public function testClassMetadataInstanceSerialization() $cm->addProperty($association); - self::assertCount(1, $cm->getProperties()); + self::assertCount(1, $cm->getDeclaredPropertiesIterator()); $serialized = serialize($cm); $cm = unserialize($serialized); @@ -81,7 +102,7 @@ public function testClassMetadataInstanceSerialization() // Check state self::assertInstanceOf(\ReflectionClass::class, $cm->getReflectionClass()); self::assertEquals(CMS\CmsUser::class, $cm->getClassName()); - self::assertEquals('UserParent', $cm->getRootClassName()); + self::assertEquals(CMS\CmsEmployee::class, $cm->getRootClassName()); self::assertEquals('Doctrine\Tests\Models\CMS\UserRepository', $cm->getCustomRepositoryClassName()); self::assertEquals( [ @@ -91,11 +112,12 @@ public function testClassMetadataInstanceSerialization() ], $cm->getSubClasses() ); - self::assertEquals(['UserParent'], $cm->getParentClasses()); + self::assertCount(1, $cm->getAncestorsIterator()); + self::assertEquals(CMS\CmsEmployee::class, $cm->getAncestorsIterator()->current()->getClassName()); self::assertEquals($discrColumn, $cm->discriminatorColumn); self::assertTrue($cm->isReadOnly()); self::assertEquals(['dql' => 'foo'], $cm->getNamedQueries()); - self::assertCount(1, $cm->getProperties()); + self::assertCount(1, $cm->getDeclaredPropertiesIterator()); self::assertInstanceOf(Mapping\OneToOneAssociationMetadata::class, $cm->getProperty('phonenumbers')); $oneOneMapping = $cm->getProperty('phonenumbers'); @@ -106,7 +128,7 @@ public function testClassMetadataInstanceSerialization() public function testFieldIsNullable() { - $metadata = new ClassMetadata(CMS\CmsUser::class); + $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $metadata->initializeReflection(new RuntimeReflectionService()); // Explicit Nullable @@ -155,7 +177,7 @@ public function testMapAssociationInGlobalNamespace() { require_once __DIR__."/../../Models/Global/GlobalNamespaceModel.php"; - $cm = new ClassMetadata(DoctrineGlobal_Article::class); + $cm = new ClassMetadata(DoctrineGlobal_Article::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); @@ -186,7 +208,7 @@ public function testMapAssociationInGlobalNamespace() public function testMapManyToManyJoinTableDefaults() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $association = new Mapping\ManyToManyAssociationMetadata('groups'); @@ -226,7 +248,7 @@ public function testMapManyToManyJoinTableDefaults() public function testSerializeManyToManyJoinTableCascade() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $association = new Mapping\ManyToManyAssociationMetadata('groups'); @@ -252,7 +274,7 @@ public function testSetDiscriminatorMapInGlobalNamespace() { require_once __DIR__."/../../Models/Global/GlobalNamespaceModel.php"; - $cm = new ClassMetadata('DoctrineGlobal_User'); + $cm = new ClassMetadata('DoctrineGlobal_User', $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $cm->setDiscriminatorMap(['descr' => 'DoctrineGlobal_Article', 'foo' => 'DoctrineGlobal_User']); @@ -267,7 +289,7 @@ public function testSetSubClassesInGlobalNamespace() { require_once __DIR__."/../../Models/Global/GlobalNamespaceModel.php"; - $cm = new ClassMetadata('DoctrineGlobal_User'); + $cm = new ClassMetadata('DoctrineGlobal_User', $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $cm->setSubclasses(['DoctrineGlobal_Article']); @@ -279,7 +301,7 @@ public function testSetSubClassesInGlobalNamespace() */ public function testSetInvalidVersionMapping_ThrowsException() { - $metadata = new ClassMetadata(CMS\CmsUser::class); + $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $property = new Mapping\VersionFieldMetadata('foo'); //new FieldMetadata('foo', 'foo', Type::getType('string')); $property->setDeclaringClass($metadata); @@ -295,7 +317,7 @@ public function testSetInvalidVersionMapping_ThrowsException() public function testGetSingleIdentifierFieldName_MultipleIdentifierEntity_ThrowsException() { - $metadata = new ClassMetadata(CMS\CmsUser::class); + $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $metadata->initializeReflection(new RuntimeReflectionService()); $fieldMetadata = new Mapping\FieldMetadata('name'); @@ -317,7 +339,7 @@ public function testGetSingleIdentifierFieldName_MultipleIdentifierEntity_Throws public function testGetSingleIdentifierFieldName_NoIdEntity_ThrowsException() { - $cm = new ClassMetadata(DDC6412File::class); + $cm = new ClassMetadata(DDC6412File::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); @@ -327,7 +349,7 @@ public function testGetSingleIdentifierFieldName_NoIdEntity_ThrowsException() public function testDuplicateAssociationMappingException() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $association = new Mapping\OneToOneAssociationMetadata('foo'); @@ -353,7 +375,7 @@ public function testDuplicateAssociationMappingException() public function testDuplicateColumnName_ThrowsMappingException() { - $metadata = new ClassMetadata(CMS\CmsUser::class); + $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $metadata->initializeReflection(new RuntimeReflectionService()); $fieldMetadata = new Mapping\FieldMetadata('name'); @@ -374,7 +396,7 @@ public function testDuplicateColumnName_ThrowsMappingException() public function testDuplicateColumnName_DiscriminatorColumn_ThrowsMappingException() { - $metadata = new ClassMetadata(CMS\CmsUser::class); + $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $metadata->initializeReflection(new RuntimeReflectionService()); $fieldMetadata = new Mapping\FieldMetadata('name'); @@ -396,7 +418,7 @@ public function testDuplicateColumnName_DiscriminatorColumn_ThrowsMappingExcepti public function testDuplicateColumnName_DiscriminatorColumn2_ThrowsMappingException() { - $metadata = new ClassMetadata(CMS\CmsUser::class); + $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $metadata->initializeReflection(new RuntimeReflectionService()); $discrColumn = new DiscriminatorColumnMetadata(); @@ -418,7 +440,7 @@ public function testDuplicateColumnName_DiscriminatorColumn2_ThrowsMappingExcept public function testDuplicateFieldAndAssociationMapping1_ThrowsException() { - $metadata = new ClassMetadata(CMS\CmsUser::class); + $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $metadata->initializeReflection(new RuntimeReflectionService()); $fieldMetadata = new Mapping\FieldMetadata('name'); @@ -438,7 +460,7 @@ public function testDuplicateFieldAndAssociationMapping1_ThrowsException() public function testDuplicateFieldAndAssociationMapping2_ThrowsException() { - $metadata = new ClassMetadata(CMS\CmsUser::class); + $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $metadata->initializeReflection(new RuntimeReflectionService()); $association = new Mapping\OneToOneAssociationMetadata('name'); @@ -461,7 +483,7 @@ public function testDuplicateFieldAndAssociationMapping2_ThrowsException() */ public function testGetTemporaryTableNameSchema() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $tableMetadata = new Mapping\TableMetadata(); @@ -476,14 +498,14 @@ public function testGetTemporaryTableNameSchema() public function testDefaultTableName() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); // When table's name is not given self::assertEquals('CmsUser', $cm->getTableName()); self::assertEquals('CmsUser', $cm->table->getName()); - $cm = new ClassMetadata(CMS\CmsAddress::class); + $cm = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); // When joinTable's name is not given @@ -514,7 +536,7 @@ public function testDefaultTableName() public function testDefaultJoinColumnName() { - $cm = new ClassMetadata(CMS\CmsAddress::class); + $cm = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); // this is really dirty, but it's the simplest way to test whether @@ -540,7 +562,7 @@ public function testDefaultJoinColumnName() self::assertEquals('user_id', $joinColumn->getColumnName()); - $cm = new ClassMetadata(CMS\CmsAddress::class); + $cm = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $joinTable = new Mapping\JoinTableMetadata(); @@ -581,7 +603,13 @@ public function testDefaultJoinColumnName() public function testOneToOneUnderscoreNamingStrategyDefaults() { $namingStrategy = new UnderscoreNamingStrategy(CASE_UPPER); - $metadata = new ClassMetadata(CMS\CmsAddress::class, $namingStrategy); + + $this->metadataBuildingContext = new Mapping\ClassMetadataBuildingContext( + $this->createMock(Mapping\ClassMetadataFactory::class), + $namingStrategy + ); + + $metadata = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); $association = new Mapping\OneToOneAssociationMetadata('user'); @@ -603,7 +631,13 @@ public function testOneToOneUnderscoreNamingStrategyDefaults() public function testManyToManyUnderscoreNamingStrategyDefaults() { $namingStrategy = new UnderscoreNamingStrategy(CASE_UPPER); - $metadata = new ClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress', $namingStrategy); + + $this->metadataBuildingContext = new Mapping\ClassMetadataBuildingContext( + $this->createMock(Mapping\ClassMetadataFactory::class), + $namingStrategy + ); + + $metadata = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); $association = new Mapping\ManyToManyAssociationMetadata('user'); @@ -626,7 +660,7 @@ public function testManyToManyUnderscoreNamingStrategyDefaults() self::assertEquals('CMS_USER_ID', $inverseJoinColumn->getColumnName()); self::assertEquals('ID', $inverseJoinColumn->getReferencedColumnName()); - $cm = new ClassMetadata('DoctrineGlobal_Article', $namingStrategy); + $cm = new ClassMetadata('DoctrineGlobal_Article', $this->metadataBuildingContext); $association = new Mapping\ManyToManyAssociationMetadata('author'); @@ -644,7 +678,7 @@ public function testManyToManyUnderscoreNamingStrategyDefaults() */ public function testSetMultipleIdentifierSetsComposite() { - $metadata = new ClassMetadata(CMS\CmsUser::class); + $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $metadata->initializeReflection(new RuntimeReflectionService()); $fieldMetadata = new Mapping\FieldMetadata('name'); @@ -666,7 +700,7 @@ public function testSetMultipleIdentifierSetsComposite() */ public function testJoinTableMappingDefaults() { - $metadata = new ClassMetadata('DoctrineGlobal_Article'); + $metadata = new ClassMetadata('DoctrineGlobal_Article', $this->metadataBuildingContext); $metadata->initializeReflection(new RuntimeReflectionService()); $association = new Mapping\ManyToManyAssociationMetadata('author'); @@ -685,7 +719,7 @@ public function testJoinTableMappingDefaults() */ public function testMapIdentifierAssociation() { - $cm = new ClassMetadata(DDC117ArticleDetails::class); + $cm = new ClassMetadata(DDC117ArticleDetails::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $association = new Mapping\OneToOneAssociationMetadata('article'); @@ -703,7 +737,7 @@ public function testMapIdentifierAssociation() */ public function testOrphanRemovalIdentifierAssociation() { - $cm = new ClassMetadata(DDC117ArticleDetails::class); + $cm = new ClassMetadata(DDC117ArticleDetails::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $this->expectException(MappingException::class); @@ -723,7 +757,7 @@ public function testOrphanRemovalIdentifierAssociation() */ public function testInverseIdentifierAssociation() { - $cm = new ClassMetadata(DDC117ArticleDetails::class); + $cm = new ClassMetadata(DDC117ArticleDetails::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $this->expectException(MappingException::class); @@ -743,7 +777,7 @@ public function testInverseIdentifierAssociation() */ public function testIdentifierAssociationManyToMany() { - $cm = new ClassMetadata(DDC117ArticleDetails::class); + $cm = new ClassMetadata(DDC117ArticleDetails::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $this->expectException(MappingException::class); @@ -765,7 +799,7 @@ public function testEmptyFieldNameThrowsException() $this->expectException(MappingException::class); $this->expectExceptionMessage("The field or association mapping misses the 'fieldName' attribute in entity '" . CMS\CmsUser::class . "'."); - $metadata = new ClassMetadata(CMS\CmsUser::class); + $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $metadata->initializeReflection(new RuntimeReflectionService()); $fieldMetadata = new Mapping\FieldMetadata(''); @@ -777,7 +811,7 @@ public function testEmptyFieldNameThrowsException() public function testRetrievalOfNamedQueries() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); self::assertEquals(0, count($cm->getNamedQueries())); @@ -792,7 +826,7 @@ public function testRetrievalOfNamedQueries() */ public function testRetrievalOfResultSetMappings() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); @@ -814,7 +848,7 @@ public function testRetrievalOfResultSetMappings() public function testExistanceOfNamedQuery() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); @@ -829,7 +863,7 @@ public function testExistanceOfNamedQuery() */ public function testRetrieveOfNamedNativeQuery() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $cm->addNamedNativeQuery( @@ -868,7 +902,7 @@ public function testRetrieveOfNamedNativeQuery() */ public function testRetrieveOfSqlResultSetMapping() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $cm->addSqlResultSetMapping( @@ -924,7 +958,7 @@ public function testRetrieveOfSqlResultSetMapping() */ public function testExistanceOfSqlResultSetMapping() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $cm->addSqlResultSetMapping( @@ -947,7 +981,7 @@ public function testExistanceOfSqlResultSetMapping() */ public function testExistanceOfNamedNativeQuery() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $cm->addNamedNativeQuery( @@ -964,7 +998,7 @@ public function testExistanceOfNamedNativeQuery() public function testRetrieveOfNamedQuery() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $cm->addNamedQuery('userById', 'SELECT u FROM __CLASS__ u WHERE u.id = ?1'); @@ -982,7 +1016,7 @@ public function testRetrieveOfNamedQuery() */ public function testRetrievalOfNamedNativeQueries() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); self::assertEquals(0, count($cm->getNamedNativeQueries())); @@ -1003,7 +1037,7 @@ public function testRetrievalOfNamedNativeQueries() */ public function testSerializeEntityListeners() { - $metadata = new ClassMetadata(CompanyContract::class); + $metadata = new ClassMetadata(CompanyContract::class, $this->metadataBuildingContext); $metadata->initializeReflection(new RuntimeReflectionService()); $metadata->addEntityListener(Events::prePersist, CompanyContractListener::class, 'prePersistHandler'); @@ -1021,7 +1055,7 @@ public function testSerializeEntityListeners() */ public function testNamingCollisionNamedQueryShouldThrowException() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $cm->addNamedQuery('userById', 'SELECT u FROM __CLASS__ u WHERE u.id = ?1'); @@ -1036,7 +1070,7 @@ public function testNamingCollisionNamedQueryShouldThrowException() */ public function testNamingCollisionNamedNativeQueryShouldThrowException() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $cm->addNamedNativeQuery( @@ -1064,7 +1098,7 @@ public function testNamingCollisionNamedNativeQueryShouldThrowException() */ public function testNamingCollisionSqlResultSetMappingShouldThrowException() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $cm->addSqlResultSetMapping( @@ -1096,7 +1130,7 @@ public function testNamingCollisionSqlResultSetMappingShouldThrowException() public function testClassCaseSensitivity() { $user = new CMS\CmsUser(); - $cm = new ClassMetadata(strtoupper(CMS\CmsUser::class)); + $cm = new ClassMetadata(strtoupper(CMS\CmsUser::class), $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); self::assertEquals(CMS\CmsUser::class, $cm->getClassName()); @@ -1107,7 +1141,7 @@ public function testClassCaseSensitivity() */ public function testLifecycleCallbackNotFound() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $cm->addLifecycleCallback('notfound', 'postLoad'); @@ -1122,7 +1156,7 @@ public function testLifecycleCallbackNotFound() */ public function testTargetEntityNotFound() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $association = new Mapping\ManyToOneAssociationMetadata('address'); @@ -1145,7 +1179,7 @@ public function testTargetEntityNotFound() */ public function testNameIsMandatoryForEntityNameSqlResultSetMappingException() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $cm->addSqlResultSetMapping( @@ -1167,10 +1201,16 @@ public function testNameIsMandatoryForEntityNameSqlResultSetMappingException() */ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategy() { - $namingStrategy = new MyNamespacedNamingStrategy(); - $addressMetadata = new ClassMetadata(CMS\CmsAddress::class, $namingStrategy); - $articleMetadata = new ClassMetadata(DoctrineGlobal_Article::class, $namingStrategy); - $routingMetadata = new ClassMetadata(RoutingLeg::class, $namingStrategy); + $namingStrategy = new MyNamespacedNamingStrategy(); + + $this->metadataBuildingContext = new Mapping\ClassMetadataBuildingContext( + $this->createMock(Mapping\ClassMetadataFactory::class), + $namingStrategy + ); + + $addressMetadata = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); + $articleMetadata = new ClassMetadata(DoctrineGlobal_Article::class, $this->metadataBuildingContext); + $routingMetadata = new ClassMetadata(RoutingLeg::class, $this->metadataBuildingContext); $addressMetadata->initializeReflection(new RuntimeReflectionService()); $articleMetadata->initializeReflection(new RuntimeReflectionService()); @@ -1200,7 +1240,13 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategy() public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategyPropertyToColumnName() { $namingStrategy = new MyPrefixNamingStrategy(); - $metadata = new ClassMetadata(CMS\CmsAddress::class, $namingStrategy); + + $this->metadataBuildingContext = new Mapping\ClassMetadataBuildingContext( + $this->createMock(Mapping\ClassMetadataFactory::class), + $namingStrategy + ); + + $metadata = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); $metadata->initializeReflection(new RuntimeReflectionService()); @@ -1232,7 +1278,7 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategyProperty */ public function testInvalidCascade() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $association = new Mapping\ManyToOneAssociationMetadata('address'); @@ -1250,7 +1296,7 @@ public function testInvalidCascade() */ public function testInvalidPropertyAssociationOverrideNameException() { - $cm = new ClassMetadata(DDC964Admin::class); + $cm = new ClassMetadata(DDC964Admin::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $association = new Mapping\ManyToOneAssociationMetadata('address'); @@ -1269,7 +1315,7 @@ public function testInvalidPropertyAssociationOverrideNameException() */ public function testInvalidPropertyAttributeOverrideNameException() { - $metadata = new ClassMetadata(DDC964Guest::class); + $metadata = new ClassMetadata(DDC964Guest::class, $this->metadataBuildingContext); $metadata->initializeReflection(new RuntimeReflectionService()); $fieldMetadata = new Mapping\FieldMetadata('name'); @@ -1291,7 +1337,7 @@ public function testInvalidPropertyAttributeOverrideNameException() */ public function testInvalidEntityListenerClassException() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $cm->addEntityListener(Events::postLoad, '\InvalidClassName', 'postLoadHandler'); @@ -1305,7 +1351,7 @@ public function testInvalidEntityListenerClassException() */ public function testInvalidEntityListenerMethodException() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $cm->addEntityListener(Events::postLoad, 'Doctrine\Tests\Models\Company\CompanyContractListener', 'invalidMethod'); @@ -1313,7 +1359,7 @@ public function testInvalidEntityListenerMethodException() public function testManyToManySelfReferencingNamingStrategyDefaults() { - $cm = new ClassMetadata(CustomTypeParent::class); + $cm = new ClassMetadata(CustomTypeParent::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $association = new Mapping\ManyToManyAssociationMetadata('friendsWithMe'); @@ -1356,7 +1402,7 @@ public function testManyToManySelfReferencingNamingStrategyDefaults() */ public function testQuotedSequenceName() { - $cm = new ClassMetadata(CMS\CmsUser::class); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); $id = new Mapping\FieldMetadata('id'); @@ -1380,7 +1426,7 @@ public function testQuotedSequenceName() */ public function testIsIdentifierMappedSuperClass() { - $class = new ClassMetadata(DDC2700MappedSuperClass::class); + $class = new ClassMetadata(DDC2700MappedSuperClass::class, $this->metadataBuildingContext); self::assertFalse($class->isIdentifier('foo')); } @@ -1390,7 +1436,7 @@ public function testIsIdentifierMappedSuperClass() */ public function testWakeupReflectionWithEmbeddableAndStaticReflectionService() { - $metadata = new ClassMetadata(TestEntity1::class); + $metadata = new ClassMetadata(TestEntity1::class, $this->metadataBuildingContext); $metadata->mapEmbedded( [ diff --git a/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php index 01ea68f1344..79ae94740a3 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php @@ -45,7 +45,8 @@ public function testFailingSecondLevelCacheAssociation() { $mappingDriver = $this->loadDriver(); - $class = new ClassMetadata(Mapping\PHPSLC::class); - $mappingDriver->loadMetadataForClass(Mapping\PHPSLC::class, $class); + $class = new ClassMetadata(Mapping\PHPSLC::class, $this->metadataBuildingContext); + + $mappingDriver->loadMetadataForClass(Mapping\PHPSLC::class, $class, $this->metadataBuildingContext); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php index a0bcfec3306..f4bd8a0251a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php @@ -27,9 +27,9 @@ public function testClassTableInheritanceDiscriminatorMap() { $mappingDriver = $this->loadDriver(); - $class = new ClassMetadata(CTI::class); + $class = new ClassMetadata(CTI::class, $this->metadataBuildingContext); $class->initializeReflection(new RuntimeReflectionService()); - $mappingDriver->loadMetadataForClass(CTI::class, $class); + $mappingDriver->loadMetadataForClass(CTI::class, $class, $this->metadataBuildingContext); $expectedMap = [ 'foo' => CTIFoo::class, @@ -49,8 +49,9 @@ public function testFailingSecondLevelCacheAssociation() { $mappingDriver = $this->loadDriver(); - $class = new ClassMetadata(XMLSLC::class); - $mappingDriver->loadMetadataForClass(XMLSLC::class, $class); + $class = new ClassMetadata(XMLSLC::class, $this->metadataBuildingContext); + + $mappingDriver->loadMetadataForClass(XMLSLC::class, $class, $this->metadataBuildingContext); } public function testIdentifierWithAssociationKey() @@ -65,7 +66,7 @@ public function testIdentifierWithAssociationKey() $class = $factory->getMetadataFor(DDC117Translation::class); self::assertEquals(['language', 'article'], $class->identifier); - self::assertArrayHasKey('article', $class->getProperties()); + self::assertArrayHasKey('article', $class->getDeclaredPropertiesIterator()); $association = $class->getProperty('article'); diff --git a/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php b/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php index c55fc06d1c9..b4f211714da 100644 --- a/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php @@ -4,6 +4,8 @@ namespace Doctrine\Tests\ORM\Proxy; +use Doctrine\ORM\Mapping\ClassMetadataBuildingContext; +use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Proxy\Factory\DefaultProxyResolver; use Doctrine\ORM\Proxy\Factory\ProxyFactory; use Doctrine\ORM\Configuration\ProxyConfiguration; @@ -47,6 +49,11 @@ class ProxyFactoryTest extends OrmTestCase */ private $proxyFactory; + /** + * @var ClassMetadataBuildingContext + */ + private $metadataBuildingContext; + /** * {@inheritDoc} */ @@ -54,9 +61,12 @@ protected function setUp() { parent::setUp(); - $this->connectionMock = new ConnectionMock([], new DriverMock()); - $this->emMock = EntityManagerMock::create($this->connectionMock); - $this->uowMock = new UnitOfWorkMock($this->emMock); + $this->metadataBuildingContext = new ClassMetadataBuildingContext( + $this->createMock(ClassMetadataFactory::class) + ); + $this->connectionMock = new ConnectionMock([], new DriverMock()); + $this->emMock = EntityManagerMock::create($this->connectionMock); + $this->uowMock = new UnitOfWorkMock($this->emMock); $this->emMock->setUnitOfWork($this->uowMock); @@ -104,7 +114,7 @@ public function testReferenceProxyDelegatesLoadingToThePersister() */ public function testSkipAbstractClassesOnGeneration() { - $cm = new ClassMetadata(AbstractClass::class); + $cm = new ClassMetadata(AbstractClass::class, $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); self::assertNotNull($cm->getReflectionClass()); diff --git a/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php b/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php index 3fd18522d8c..e3b48ea3fb9 100644 --- a/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php @@ -7,6 +7,8 @@ use Doctrine\ORM\Configuration; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ClassMetadataBuildingContext; +use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Repository\DefaultRepositoryFactory; use Doctrine\Tests\DoctrineTestCase; use Doctrine\Tests\Models\DDC753\DDC753DefaultRepository; @@ -34,14 +36,22 @@ class DefaultRepositoryFactoryTest extends DoctrineTestCase */ private $repositoryFactory; + /** + * @var ClassMetadataBuildingContext|\PHPUnit_Framework_MockObject_MockObject + */ + private $metadataBuildingContext; + /** * {@inheritDoc} */ protected function setUp() { - $this->configuration = $this->createMock(Configuration::class); - $this->entityManager = $this->createEntityManager(); - $this->repositoryFactory = new DefaultRepositoryFactory(); + $this->metadataBuildingContext = new ClassMetadataBuildingContext( + $this->createMock(ClassMetadataFactory::class) + ); + $this->configuration = $this->createMock(Configuration::class); + $this->entityManager = $this->createEntityManager(); + $this->repositoryFactory = new DefaultRepositoryFactory(); $this->configuration ->expects($this->any()) @@ -124,7 +134,7 @@ public function testCachesDistinctRepositoriesPerDistinctEntityManager() */ public function buildClassMetadata($className) { - $metadata = new ClassMetadata($className); + $metadata = new ClassMetadata($className, $this->metadataBuildingContext); $metadata->setCustomRepositoryClassName(null); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index ad27b67a524..1e8ee317e27 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -26,9 +26,17 @@ class EntityGeneratorTest extends OrmTestCase private $tmpDir; private $namespace; + /** + * @var Mapping\ClassMetadataBuildingContext + */ + private $metadataBuildingContext; + public function setUp() { - $this->namespace = uniqid("doctrine_"); + $this->metadataBuildingContext = new Mapping\ClassMetadataBuildingContext( + $this->createMock(ClassMetadataFactory::class) + ); + $this->namespace = uniqid("doctrine_", false); $this->tmpDir = sys_get_temp_dir(); mkdir($this->tmpDir . \DIRECTORY_SEPARATOR . $this->namespace); @@ -63,7 +71,7 @@ public function tearDown() */ public function generateBookEntityFixture(array $embeddedClasses = []) { - $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorBook'); + $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorBook', $this->metadataBuildingContext); $metadata->setCustomRepositoryClassName($this->namespace . '\EntityGeneratorBookRepository'); @@ -184,7 +192,7 @@ public function generateBookEntityFixture(array $embeddedClasses = []) private function generateEntityTypeFixture(array $field) { - $metadata = new ClassMetadata($this->namespace . '\EntityType'); + $metadata = new ClassMetadata($this->namespace . '\EntityType', $this->metadataBuildingContext); $tableMetadata = new Mapping\TableMetadata(); $tableMetadata->setName('entity_type'); @@ -217,7 +225,7 @@ private function generateEntityTypeFixture(array $field) */ private function generateIsbnEmbeddableFixture(array $embeddedClasses = [], $columnPrefix = null) { - $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorIsbn'); + $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorIsbn', $this->metadataBuildingContext); $metadata->isEmbeddedClass = true; $fieldMetadata = new Mapping\FieldMetadata('prefix'); @@ -275,7 +283,7 @@ private function generateIsbnEmbeddableFixture(array $embeddedClasses = [], $col */ private function generateTestEmbeddableFixture() { - $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorTestEmbeddable'); + $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorTestEmbeddable', $this->metadataBuildingContext); $metadata->isEmbeddedClass = true; @@ -353,7 +361,7 @@ public function testEmbeddedEntityWithNamedColumnPrefix() self::assertTrue($refClass->hasProperty('testEmbedded')); $docComment = $refClass->getProperty('testEmbedded')->getDocComment(); - $needle = sprintf('@Embedded(class="%s", columnPrefix="%s")', $testMetadata->name, $columnPrefix); + $needle = sprintf('@Embedded(class="%s", columnPrefix="%s")', $testMetadata->getClassName(), $columnPrefix); self::assertContains($needle, $docComment); } @@ -370,7 +378,7 @@ public function testEmbeddedEntityWithoutColumnPrefix() self::assertTrue($refClass->hasProperty('testEmbedded')); $docComment = $refClass->getProperty('testEmbedded')->getDocComment(); - $needle = sprintf('@Embedded(class="%s", columnPrefix=false)', $testMetadata->name); + $needle = sprintf('@Embedded(class="%s", columnPrefix=false)', $testMetadata->getClassName()); self::assertContains($needle, $docComment); } @@ -559,11 +567,11 @@ public function testLoadMetadata() $metadata->initializeReflection($reflectionService); - $cm = new ClassMetadata($metadata->getClassName()); + $cm = new ClassMetadata($metadata->getClassName(), $this->metadataBuildingContext); $cm->initializeReflection($reflectionService); $driver = $this->createAnnotationDriver(); - $driver->loadMetadataForClass($cm->getClassName(), $cm); + $driver->loadMetadataForClass($cm->getClassName(), $cm, $this->metadataBuildingContext); self::assertEquals($cm->getTableName(), $metadata->getTableName()); self::assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); @@ -595,10 +603,10 @@ public function testLoadPrefixedMetadata() $book = $this->newInstance($metadata); - $cm = new ClassMetadata($metadata->getClassName()); + $cm = new ClassMetadata($metadata->getClassName(), $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); - $driver->loadMetadataForClass($cm->getClassName(), $cm); + $driver->loadMetadataForClass($cm->getClassName(), $cm, $this->metadataBuildingContext); self::assertEquals($cm->getTableName(), $metadata->getTableName()); self::assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); @@ -621,7 +629,7 @@ public function testLoadPrefixedMetadata() */ public function testMappedSuperclassAnnotationGeneration() { - $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorBook'); + $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorBook', $this->metadataBuildingContext); $metadata->isMappedSuperclass = true; @@ -630,10 +638,10 @@ public function testMappedSuperclassAnnotationGeneration() $this->newInstance($metadata); // force instantiation (causes autoloading to kick in) $driver = new AnnotationDriver(new AnnotationReader(), []); - $cm = new ClassMetadata($metadata->getClassName()); + $cm = new ClassMetadata($metadata->getClassName(), $this->metadataBuildingContext); $cm->initializeReflection(new RuntimeReflectionService()); - $driver->loadMetadataForClass($cm->getClassName(), $cm); + $driver->loadMetadataForClass($cm->getClassName(), $cm, $this->metadataBuildingContext); self::assertTrue($cm->isMappedSuperclass); } @@ -659,7 +667,7 @@ public function testParseTokensInEntityFile($php, $classes) */ public function testGenerateEntityWithSequenceGenerator() { - $metadata = new ClassMetadata($this->namespace . '\DDC1784Entity'); + $metadata = new ClassMetadata($this->namespace . '\DDC1784Entity', $this->metadataBuildingContext); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); @@ -697,7 +705,7 @@ public function testGenerateEntityWithSequenceGenerator() */ public function testGenerateEntityWithMultipleInverseJoinColumns() { - $metadata = new ClassMetadata($this->namespace . '\DDC2079Entity'); + $metadata = new ClassMetadata($this->namespace . '\DDC2079Entity', $this->metadataBuildingContext); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php index 280e324e8e3..0836e0fd3c3 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php @@ -45,9 +45,13 @@ public function testFieldsAreProperlySerialized() /** * @group DDC-3428 */ - public function testSequenceGenerator() { + public function testSequenceGenerator() + { + $metadataBuildingContext = new Mapping\ClassMetadataBuildingContext( + $this->createMock(Mapping\ClassMetadataFactory::class) + ); $exporter = new XmlExporter(); - $metadata = new ClassMetadata('entityTest'); + $metadata = new ClassMetadata('entityTest', $metadataBuildingContext); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); @@ -86,9 +90,13 @@ public function testSequenceGenerator() { * @group 1216 * @group DDC-3439 */ - public function testFieldOptionsExport() { + public function testFieldOptionsExport() + { + $metadataBuildingContext = new Mapping\ClassMetadataBuildingContext( + $this->createMock(Mapping\ClassMetadataFactory::class) + ); $exporter = new XmlExporter(); - $metadata = new ClassMetadata('entityTest'); + $metadata = new ClassMetadata('entityTest', $metadataBuildingContext); $fieldMetadata = new Mapping\FieldMetadata('myField'); $fieldMetadata->setType(Type::getType('string')); diff --git a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php index 089342674fd..7789ae9a1c9 100644 --- a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php @@ -50,7 +50,7 @@ public function testResolveTargetEntityListenerCanResolveTargetEntity() $evm->addEventSubscriber($this->listener); $cm = $this->factory->getMetadataFor(ResolveTargetEntity::class); - $meta = $cm->getProperties(); + $meta = $cm->getDeclaredPropertiesIterator(); self::assertSame(TargetEntity::class, $meta['manyToMany']->getTargetEntity()); self::assertSame(ResolveTargetEntity::class, $meta['manyToOne']->getTargetEntity()); diff --git a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php index 4009a49bae6..a9eadf8ef55 100644 --- a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php +++ b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php @@ -12,6 +12,8 @@ use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Events; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\ClassMetadataBuildingContext; +use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\GeneratorType; use Doctrine\ORM\ORMInvalidArgumentException; use Doctrine\ORM\Reflection\RuntimeReflectionService; @@ -61,14 +63,22 @@ class UnitOfWorkTest extends OrmTestCase */ private $eventManager; + /** + * @var ClassMetadataBuildingContext|\PHPUnit_Framework_MockObject_MockObject + */ + private $metadataBuildingContext; + protected function setUp() { parent::setUp(); - $this->connectionMock = new ConnectionMock([], new DriverMock()); - $this->eventManager = $this->getMockBuilder(EventManager::class)->getMock(); - $this->emMock = EntityManagerMock::create($this->connectionMock, null, $this->eventManager); - $this->unitOfWork = new UnitOfWorkMock($this->emMock); + $this->metadataBuildingContext = new ClassMetadataBuildingContext( + $this->createMock(ClassMetadataFactory::class) + ); + $this->connectionMock = new ConnectionMock([], new DriverMock()); + $this->eventManager = $this->getMockBuilder(EventManager::class)->getMock(); + $this->emMock = EntityManagerMock::create($this->connectionMock, null, $this->eventManager); + $this->unitOfWork = new UnitOfWorkMock($this->emMock); $this->emMock->setUnitOfWork($this->unitOfWork); } @@ -601,7 +611,7 @@ public function testMergeWithExistingEntityWillNotPersistItNorTriggerPrePersistL */ public function testCanInstantiateInternalPhpClassSubclass() { - $classMetadata = new ClassMetadata(MyArrayObjectEntity::class); + $classMetadata = new ClassMetadata(MyArrayObjectEntity::class, $this->metadataBuildingContext); self::assertInstanceOf(MyArrayObjectEntity::class, $this->unitOfWork->newInstance($classMetadata)); } @@ -612,7 +622,11 @@ public function testCanInstantiateInternalPhpClassSubclass() public function testCanInstantiateInternalPhpClassSubclassFromUnserializedMetadata() { /* @var $classMetadata ClassMetadata */ - $classMetadata = unserialize(serialize(new ClassMetadata(MyArrayObjectEntity::class))); + $classMetadata = unserialize( + serialize( + new ClassMetadata(MyArrayObjectEntity::class, $this->metadataBuildingContext) + ) + ); $classMetadata->wakeupReflection(new RuntimeReflectionService()); From 72b753e428256c7b01bb7da81ad4f189f423a1c4 Mon Sep 17 00:00:00 2001 From: Usman Zafar Date: Mon, 7 Aug 2017 13:42:09 +0000 Subject: [PATCH 197/275] change the em property to fix the tests and UPGRADE file as per the PR comments. --- UPGRADE.md | 7 ++++--- tests/Doctrine/Tests/ORM/EntityManagerTest.php | 2 +- tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php | 2 -- tests/Doctrine/Tests/ORM/QueryBuilderTest.php | 2 +- tests/Doctrine/Tests/OrmTestCase.php | 2 +- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/UPGRADE.md b/UPGRADE.md index 70d21ae6053..bdd8b8d4449 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -1,14 +1,15 @@ # Upgrade to 3.0 +## BC Break: Removed `EntityManager#flush($entity)` and `EntityManager#flush($entities)` + +Final keyword has been added to the ``EntityManager::class`` in order to ensure that EntityManager is not used as valid extension point. Valid extension point should be EntityManagerInterface. + ## BC Break: ``EntityManagerInterface`` is now used instead of ``EntityManager`` in typehints `Sequencing\Generator#generate()` now takes ``EntityManagerInterface`` as its first argument instead of ``EntityManager``. If you have any custom generators, please update your code accordingly. ## BC Break: Removed `EntityManager#flush($entity)` and `EntityManager#flush($entities)` -Final keyword has been added to the ``EntityManager::class`` in order to ensure that EntityManager is not used as valid extension point. Valid extension point should be EntityManagerInterface. -## BC Break: Removed `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()`. diff --git a/tests/Doctrine/Tests/ORM/EntityManagerTest.php b/tests/Doctrine/Tests/ORM/EntityManagerTest.php index 927cf98e2d0..c89df1a33dc 100644 --- a/tests/Doctrine/Tests/ORM/EntityManagerTest.php +++ b/tests/Doctrine/Tests/ORM/EntityManagerTest.php @@ -222,7 +222,7 @@ public function testTransactionalAcceptsVariousCallables() public function transactionalCallback($em) { - self::assertSame($this->em->getEM(), $em); + self::assertSame($this->em, $em); return 'callback'; } diff --git a/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php index 58b4b3083b9..0508c57cd07 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php @@ -1005,7 +1005,6 @@ public function testScalarQueryWithoutResultVariables($userEntityKey) */ public function testCreatesProxyForLazyLoadingWithForeignKeys() { - $this->markTestSkipped('Fix with StaticProxy Factory as ProxyFactory::class does not exist anymore'); $rsm = new ResultSetMapping; $rsm->addEntityResult(ECommerceProduct::class, 'p'); $rsm->addFieldResult('p', 'p__id', 'id'); @@ -1055,7 +1054,6 @@ public function testCreatesProxyForLazyLoadingWithForeignKeys() */ public function testCreatesProxyForLazyLoadingWithForeignKeysWithAliasedProductEntity() { - $this->markTestSkipped('Fix with StaticProxy Factory as ProxyFactory::class does not exist anymore'); $rsm = new ResultSetMapping; $rsm->addEntityResult(ECommerceProduct::class, 'p', 'product'); $rsm->addFieldResult('p', 'p__id', 'id'); diff --git a/tests/Doctrine/Tests/ORM/QueryBuilderTest.php b/tests/Doctrine/Tests/ORM/QueryBuilderTest.php index 6c9c119e580..743bcd8f211 100644 --- a/tests/Doctrine/Tests/ORM/QueryBuilderTest.php +++ b/tests/Doctrine/Tests/ORM/QueryBuilderTest.php @@ -792,7 +792,7 @@ public function testMultipleIsolatedQueryConstruction() public function testGetEntityManager() { $qb = $this->em->createQueryBuilder(); - self::assertEquals($this->em->getEM(), $qb->getEntityManager()); + self::assertEquals($this->em, $qb->getEntityManager()); } public function testInitialStateIsClean() diff --git a/tests/Doctrine/Tests/OrmTestCase.php b/tests/Doctrine/Tests/OrmTestCase.php index 13e7b185f9c..ac2cc65f035 100644 --- a/tests/Doctrine/Tests/OrmTestCase.php +++ b/tests/Doctrine/Tests/OrmTestCase.php @@ -130,7 +130,7 @@ protected function getTestEntityManager($conn = null, $conf = null, $eventManage $conn = DriverManager::getConnection($conn, $config, $eventManager); } - return Mocks\EntityManagerMock::create($conn, $config, $eventManager); + return Mocks\EntityManagerMock::create($conn, $config, $eventManager)->getEM(); } protected function enableSecondLevelCache($log = true) From ba9041848d4f4150d97f90d5469fa39c67f08402 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Tue, 8 Aug 2017 17:19:16 -0400 Subject: [PATCH 198/275] Some quick typehints --- .../Mapping/AbstractClassMetadataFactory.php | 83 +++---- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 2 +- .../ORM/Mapping/ClassMetadataFactory.php | 208 ++++++------------ .../DisconnectedClassMetadataFactory.php | 5 +- 4 files changed, 116 insertions(+), 182 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php index 320627a69f8..adcac12e264 100644 --- a/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php @@ -5,7 +5,7 @@ namespace Doctrine\ORM\Mapping; use Doctrine\Common\Persistence\Mapping\ClassMetadataFactory; -use Doctrine\Common\Persistence\Mapping\MappingException; +use Doctrine\Common\Persistence\Mapping\MappingException as CommonMappingException; use Doctrine\Common\Cache\Cache; use Doctrine\Common\Util\ClassUtils; use Doctrine\ORM\Reflection\ReflectionService; @@ -52,7 +52,7 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory /** * @var ReflectionService|null */ - private $reflectionService = null; + private $reflectionService; /** * Sets the cache driver used by the factory to cache ClassMetadata instances. @@ -61,7 +61,7 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory * * @return void */ - public function setCacheDriver(Cache $cacheDriver = null) + public function setCacheDriver(?Cache $cacheDriver = null) : void { $this->cacheDriver = $cacheDriver; } @@ -69,9 +69,9 @@ public function setCacheDriver(Cache $cacheDriver = null) /** * Gets the cache driver used by the factory to cache ClassMetadata instances. * - * @return \Doctrine\Common\Cache\Cache|null + * @return Cache|null */ - public function getCacheDriver() + public function getCacheDriver() : ?Cache { return $this->cacheDriver; } @@ -81,7 +81,7 @@ public function getCacheDriver() * * @return ClassMetadata[] */ - public function getLoadedMetadata() + public function getLoadedMetadata() : array { return $this->loadedMetadata; } @@ -91,8 +91,12 @@ public function getLoadedMetadata() * mapping driver. * * @return array The ClassMetadata instances of all mapped classes. + * + * @throws \InvalidArgumentException + * @throws \ReflectionException + * @throws MappingException */ - public function getAllMetadata() + public function getAllMetadata() : array { if (! $this->initialized) { $this->initialize(); @@ -114,7 +118,7 @@ public function getAllMetadata() * * @return void */ - abstract protected function initialize(); + abstract protected function initialize() : void; /** * Gets the fully qualified class-name from the namespace alias. @@ -124,14 +128,14 @@ abstract protected function initialize(); * * @return string */ - abstract protected function getFqcnFromAlias($namespaceAlias, $simpleClassName); + abstract protected function getFqcnFromAlias($namespaceAlias, $simpleClassName) : string; /** * Returns the mapping driver implementation. * * @return Driver\MappingDriver */ - abstract protected function getDriver(); + abstract protected function getDriver() : Driver\MappingDriver; /** * Wakes up reflection after ClassMetadata gets unserialized from cache. @@ -141,7 +145,7 @@ abstract protected function getDriver(); * * @return void */ - abstract protected function wakeupReflection(ClassMetadata $class, ReflectionService $reflService); + abstract protected function wakeupReflection(ClassMetadata $class, ReflectionService $reflService) : void; /** * Initializes Reflection after ClassMetadata was constructed. @@ -151,7 +155,7 @@ abstract protected function wakeupReflection(ClassMetadata $class, ReflectionSer * * @return void */ - abstract protected function initializeReflection(ClassMetadata $class, ReflectionService $reflService); + abstract protected function initializeReflection(ClassMetadata $class, ReflectionService $reflService) : void; /** * Checks whether the class metadata is an entity. @@ -160,9 +164,9 @@ abstract protected function initializeReflection(ClassMetadata $class, Reflectio * * @param ClassMetadata $class * - * @return boolean + * @return bool */ - abstract protected function isEntity(ClassMetadata $class); + abstract protected function isEntity(ClassMetadata $class) : bool; /** * Gets the class metadata descriptor for a class. @@ -171,10 +175,11 @@ abstract protected function isEntity(ClassMetadata $class); * * @return ClassMetadata * + * @throws \InvalidArgumentException * @throws ReflectionException * @throws MappingException */ - public function getMetadataFor($className) + public function getMetadataFor($className) : ClassMetadata { if (isset($this->loadedMetadata[$className])) { return $this->loadedMetadata[$className]; @@ -182,7 +187,7 @@ public function getMetadataFor($className) // Check for namespace alias if (strpos($className, ':') !== false) { - list($namespaceAlias, $simpleClassName) = explode(':', $className, 2); + [$namespaceAlias, $simpleClassName] = explode(':', $className, 2); $realClassName = $this->getFqcnFromAlias($namespaceAlias, $simpleClassName); } else { @@ -217,7 +222,7 @@ public function getMetadataFor($className) } else { $this->loadMetadata($realClassName, $metadataBuildingContext); } - } catch (MappingException $loadingException) { + } catch (CommonMappingException $loadingException) { if (! $fallbackMetadataResponse = $this->onNotFoundMetadata($realClassName, $metadataBuildingContext)) { throw $loadingException; } @@ -240,9 +245,9 @@ public function getMetadataFor($className) * * @param string $className * - * @return boolean TRUE if the metadata of the class in question is already loaded, FALSE otherwise. + * @return bool TRUE if the metadata of the class in question is already loaded, FALSE otherwise. */ - public function hasMetadataFor($className) + public function hasMetadataFor($className) : bool { return isset($this->loadedMetadata[$className]); } @@ -257,7 +262,7 @@ public function hasMetadataFor($className) * * @return void */ - public function setMetadataFor($className, $class) + public function setMetadataFor($className, $class) : void { $this->loadedMetadata[$className] = $class; } @@ -268,8 +273,10 @@ public function setMetadataFor($className, $class) * @param string $name * * @return array + * + * @throws \InvalidArgumentException */ - protected function getParentClasses($name) + protected function getParentClasses($name) : array { // Collect parent classes, ignoring transient (not-mapped) classes. $parentClasses = []; @@ -293,13 +300,15 @@ protected function getParentClasses($name) * {@see Doctrine\Common\Persistence\Mapping\ReflectionService} interface * should be used for reflection. * - * @param string $name The name of the class for which the metadata should + * @param string $name The name of the class for which the metadata should * get loaded. * @param ClassMetadataBuildingContext $metadataBuildingContext * * @return array + * + * @throws \InvalidArgumentException */ - protected function loadMetadata(string $name, ClassMetadataBuildingContext $metadataBuildingContext) + protected function loadMetadata(string $name, ClassMetadataBuildingContext $metadataBuildingContext) : array { if ( ! $this->initialized) { $this->initialize(); @@ -311,18 +320,13 @@ protected function loadMetadata(string $name, ClassMetadataBuildingContext $meta $parentClasses[] = $name; // Move down the hierarchy of parent classes, starting from the topmost class - $parent = null; - $rootEntityFound = false; + $parent = null; $reflService = $this->getReflectionService(); foreach ($parentClasses as $className) { if (isset($this->loadedMetadata[$className])) { $parent = $this->loadedMetadata[$className]; - if ($this->isEntity($parent)) { - $rootEntityFound = true; - } - continue; } @@ -333,16 +337,12 @@ protected function loadMetadata(string $name, ClassMetadataBuildingContext $meta } $this->initializeReflection($class, $reflService); - $this->doLoadMetadata($class, $metadataBuildingContext, $rootEntityFound); + $this->doLoadMetadata($class, $metadataBuildingContext); $this->loadedMetadata[$className] = $class; $parent = $class; - if ($this->isEntity($class)) { - $rootEntityFound = true; - } - $this->wakeupReflection($class, $reflService); $loaded[] = $className; @@ -361,7 +361,10 @@ protected function loadMetadata(string $name, ClassMetadataBuildingContext $meta * * @return \Doctrine\ORM\Mapping\ClassMetadata|null */ - protected function onNotFoundMetadata($className, ClassMetadataBuildingContext $metadataBuildingContext) + protected function onNotFoundMetadata( + string $className, + ClassMetadataBuildingContext $metadataBuildingContext + ) : ?ClassMetadata { return null; } @@ -371,14 +374,12 @@ protected function onNotFoundMetadata($className, ClassMetadataBuildingContext $ * * @param ClassMetadata $class * @param ClassMetadataBuildingContext $metadataBuildingContext - * @param bool $rootEntityFound * * @return void */ abstract protected function doLoadMetadata( ClassMetadata $class, - ClassMetadataBuildingContext $metadataBuildingContext, - bool $rootEntityFound + ClassMetadataBuildingContext $metadataBuildingContext ) : void; /** @@ -412,7 +413,7 @@ public function isTransient($class) : bool // Check for namespace alias if (strpos($class, ':') !== false) { - list($namespaceAlias, $simpleClassName) = explode(':', $class, 2); + [$namespaceAlias, $simpleClassName] = explode(':', $class, 2); $class = $this->getFqcnFromAlias($namespaceAlias, $simpleClassName); } @@ -427,7 +428,7 @@ public function isTransient($class) : bool * * @return void */ - public function setReflectionService(ReflectionService $reflectionService) + public function setReflectionService(ReflectionService $reflectionService) : void { $this->reflectionService = $reflectionService; } @@ -437,7 +438,7 @@ public function setReflectionService(ReflectionService $reflectionService) * * @return ReflectionService */ - public function getReflectionService() + public function getReflectionService() : ReflectionService { if ($this->reflectionService === null) { $this->reflectionService = new RuntimeReflectionService(); diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 11ce17b27eb..87f2dad56b4 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -164,7 +164,7 @@ class ClassMetadata extends ComponentMetadata implements TableOwner * This does only apply to the JOINED and SINGLE_TABLE inheritance mapping strategies * where a discriminator column is used. * - * @var mixed + * @var array * * @see discriminatorColumn */ diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index a25641b60cf..686f14b9ca9 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -52,14 +52,9 @@ class ClassMetadataFactory extends AbstractClassMetadataFactory private $evm; /** - * @var array - */ - private $embeddablesActiveNesting = []; - - /** - * {@inheritDoc} + * {@inheritdoc} */ - protected function loadMetadata(string $name, ClassMetadataBuildingContext $metadataBuildingContext) + protected function loadMetadata(string $name, ClassMetadataBuildingContext $metadataBuildingContext) : array { $loaded = parent::loadMetadata($name, $metadataBuildingContext); @@ -77,9 +72,11 @@ public function setEntityManager(EntityManagerInterface $em) } /** - * {@inheritDoc} + * {@inheritdoc} + * + * @throws ORMException */ - protected function initialize() + protected function initialize() : void { $this->driver = $this->em->getConfiguration()->getMetadataDriverImpl(); $this->evm = $this->em->getEventManager(); @@ -87,12 +84,15 @@ protected function initialize() } /** - * {@inheritDoc} + * {@inheritdoc} */ - protected function onNotFoundMetadata($className, ClassMetadataBuildingContext $metadataBuildingContext) + protected function onNotFoundMetadata( + string $className, + ClassMetadataBuildingContext $metadataBuildingContext + ) : ?ClassMetadata { if (! $this->evm->hasListeners(Events::onClassMetadataNotFound)) { - return; + return null; } $eventArgs = new OnClassMetadataNotFoundEventArgs($className, $metadataBuildingContext, $this->em); @@ -104,11 +104,13 @@ protected function onNotFoundMetadata($className, ClassMetadataBuildingContext $ /** * {@inheritdoc} + * + * @throws MappingException + * @throws ORMException */ protected function doLoadMetadata( ClassMetadata $class, - ClassMetadataBuildingContext $metadataBuildingContext, - bool $rootEntityFound + ClassMetadataBuildingContext $metadataBuildingContext ) : void { @@ -122,7 +124,6 @@ protected function doLoadMetadata( } $this->addInheritedProperties($class, $parent); - $this->addInheritedEmbeddedClasses($class, $parent); $class->setInheritanceType($parent->inheritanceType); $class->setIdentifier($parent->identifier); @@ -150,40 +151,6 @@ protected function doLoadMetadata( $this->completeIdentifierGeneratorMappings($class); - /*if ( ! $class->isMappedSuperclass) { - foreach ($class->embeddedClasses as $property => $embeddableClass) { - if (isset($embeddableClass['inherited'])) { - continue; - } - - if ( ! (isset($embeddableClass['class']) && $embeddableClass['class'])) { - throw MappingException::missingEmbeddedClass($property); - } - - if (isset($this->embeddablesActiveNesting[$embeddableClass['class']])) { - throw MappingException::infiniteEmbeddableNesting($class->getClassName(), $property); - } - - $this->embeddablesActiveNesting[$class->getClassName()] = true; - - $embeddableMetadata = $this->getMetadataFor($embeddableClass['class']); - - if ($embeddableMetadata->isEmbeddedClass) { - $this->addNestedEmbeddedClasses($embeddableMetadata, $class, $property); - } - - $identifier = $embeddableMetadata->getIdentifier(); - - if (! empty($identifier)) { - $this->inheritIdGeneratorMapping($class, $embeddableMetadata); - } - - $class->inlineEmbeddable($property, $embeddableMetadata); - - unset($this->embeddablesActiveNesting[$class->getClassName()]); - } - }*/ - if ($parent) { if ($parent->inheritanceType === InheritanceType::SINGLE_TABLE) { $class->setTable($parent->table); @@ -209,7 +176,7 @@ protected function doLoadMetadata( } } - if ($class->isRootEntity() && $class->inheritanceType !== InheritanceType::NONE && ! $class->discriminatorMap) { + if (! $class->discriminatorMap && $class->inheritanceType !== InheritanceType::NONE && $class->isRootEntity()) { $this->addDefaultDiscriminatorMap($class); } @@ -231,7 +198,7 @@ protected function doLoadMetadata( * * @return void */ - protected function completeRuntimeMetadata(ClassMetadata $class, ClassMetadata $parent = null) + protected function completeRuntimeMetadata(ClassMetadata $class, ClassMetadata $parent = null) : void { if ( ! $parent) { return; @@ -261,16 +228,10 @@ protected function completeRuntimeMetadata(ClassMetadata $class, ClassMetadata $ // Resolve association join column table names foreach ($property->getJoinColumns() as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ $joinColumn->setTableName($joinColumn->getTableName() ?? $tableName); } } - - // Resolve embedded table names - /*foreach ($class->embeddedClasses as &$mapping) { - if ( ! isset($mapping['tableName'])) { - $mapping['tableName'] = $mapping['tableName'] ?? $tableName; - } - }*/ } /** @@ -283,7 +244,7 @@ protected function completeRuntimeMetadata(ClassMetadata $class, ClassMetadata $ * * @throws MappingException */ - protected function validateRuntimeMetadata(ClassMetadata $class, ClassMetadata $parent = null) + protected function validateRuntimeMetadata(ClassMetadata $class, ClassMetadata $parent = null) : void { if (! $class->getReflectionClass()) { // only validate if there is a reflection class instance @@ -338,9 +299,11 @@ protected function newClassMetadataBuildingContext() : ClassMetadataBuildingCont * * @return void * + * @throws \InvalidArgumentException + * @throws \ReflectionException * @throws MappingException */ - private function resolveDiscriminatorValue(ClassMetadata $metadata) + private function resolveDiscriminatorValue(ClassMetadata $metadata) : void { if ($metadata->discriminatorValue || ! $metadata->discriminatorMap || $metadata->isMappedSuperclass || ! $metadata->getReflectionClass() || $metadata->getReflectionClass()->isAbstract()) { @@ -382,7 +345,7 @@ private function resolveDiscriminatorValue(ClassMetadata $metadata) * * @throws MappingException */ - private function addDefaultDiscriminatorMap(ClassMetadata $class) + private function addDefaultDiscriminatorMap(ClassMetadata $class) : void { $allClasses = $this->driver->getAllClassNames(); $fqcn = $class->getClassName(); @@ -415,7 +378,7 @@ private function addDefaultDiscriminatorMap(ClassMetadata $class) * * @return string */ - private function getShortName($className) + private function getShortName($className) : string { if (strpos($className, "\\") === false) { return strtolower($className); @@ -429,12 +392,14 @@ private function getShortName($className) /** * Adds inherited fields to the subclass mapping. * - * @param \Doctrine\ORM\Mapping\ClassMetadata $subClass - * @param \Doctrine\ORM\Mapping\ClassMetadata $parentClass + * @param ClassMetadata $subClass + * @param ClassMetadata $parentClass * * @return void + * + * @throws MappingException */ - private function addInheritedProperties(ClassMetadata $subClass, ClassMetadata $parentClass) + private function addInheritedProperties(ClassMetadata $subClass, ClassMetadata $parentClass) : void { $isAbstract = $parentClass->isMappedSuperclass; @@ -447,59 +412,6 @@ private function addInheritedProperties(ClassMetadata $subClass, ClassMetadata $ } } - /** - * Adds inherited embedded mappings to the subclass mapping. - * - * @param \Doctrine\ORM\Mapping\ClassMetadata $subClass - * @param \Doctrine\ORM\Mapping\ClassMetadata $parentClass - * - * @return void - */ - private function addInheritedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata $parentClass) - { - /*foreach ($parentClass->embeddedClasses as $field => $embeddedClass) { - if ( ! isset($embeddedClass['tableName'])) { - $embeddedClass['tableName'] = ! $parentClass->isMappedSuperclass ? $parentClass->getTableName() : null; - } - - if ( ! isset($embeddedClass['inherited']) && ! $parentClass->isMappedSuperclass) { - $embeddedClass['inherited'] = $parentClass->getClassName(); - } - - $subClass->embeddedClasses[$field] = $embeddedClass; - }*/ - } - - /** - * Adds nested embedded classes metadata to a parent class. - * - * @param ClassMetadata $subClass Sub embedded class metadata to add nested embedded classes metadata from. - * @param ClassMetadata $parentClass Parent class to add nested embedded classes metadata to. - * @param string $prefix Embedded classes' prefix to use for nested embedded classes field names. - */ - private function addNestedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata $parentClass, $prefix) - { - /*foreach ($subClass->embeddedClasses as $property => $embeddableClass) { - if (isset($embeddableClass['inherited'])) { - continue; - } - - $embeddableMetadata = $this->getMetadataFor($embeddableClass['class']); - - $parentClass->mapEmbedded( - [ - 'fieldName' => $prefix . '.' . $property, - 'class' => $embeddableMetadata->getClassName(), - 'columnPrefix' => $embeddableClass['columnPrefix'], - 'declaredField' => $embeddableClass['declaredField'] - ? $prefix . '.' . $embeddableClass['declaredField'] - : $prefix, - 'originalField' => $embeddableClass['originalField'] ?: $property, - ] - ); - }*/ - } - /** * Copy the table indices from the parent class superclass to the child class * @@ -508,7 +420,7 @@ private function addNestedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata * * @return void */ - private function addInheritedIndexes(ClassMetadata $subClass, ClassMetadata $parentClass) + private function addInheritedIndexes(ClassMetadata $subClass, ClassMetadata $parentClass) : void { if ( ! $parentClass->isMappedSuperclass) { return; @@ -536,12 +448,14 @@ private function addInheritedIndexes(ClassMetadata $subClass, ClassMetadata $par * * @since 2.2 * - * @param \Doctrine\ORM\Mapping\ClassMetadata $subClass - * @param \Doctrine\ORM\Mapping\ClassMetadata $parentClass + * @param ClassMetadata $subClass + * @param ClassMetadata $parentClass * * @return void + * + * @throws MappingException */ - private function addInheritedNamedQueries(ClassMetadata $subClass, ClassMetadata $parentClass) + private function addInheritedNamedQueries(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->getNamedQueries() as $name => $query) { if ($subClass->hasNamedQuery($name)) { @@ -557,12 +471,14 @@ private function addInheritedNamedQueries(ClassMetadata $subClass, ClassMetadata * * @since 2.3 * - * @param \Doctrine\ORM\Mapping\ClassMetadata $subClass - * @param \Doctrine\ORM\Mapping\ClassMetadata $parentClass + * @param ClassMetadata $subClass + * @param ClassMetadata $parentClass * * @return void + * + * @throws MappingException */ - private function addInheritedNamedNativeQueries(ClassMetadata $subClass, ClassMetadata $parentClass) + private function addInheritedNamedNativeQueries(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->namedNativeQueries as $name => $query) { if (isset($subClass->namedNativeQueries[$name])) { @@ -585,12 +501,14 @@ private function addInheritedNamedNativeQueries(ClassMetadata $subClass, ClassMe * * @since 2.3 * - * @param \Doctrine\ORM\Mapping\ClassMetadata $subClass - * @param \Doctrine\ORM\Mapping\ClassMetadata $parentClass + * @param ClassMetadata $subClass + * @param ClassMetadata $parentClass * * @return void + * + * @throws MappingException */ - private function addInheritedSqlResultSetMappings(ClassMetadata $subClass, ClassMetadata $parentClass) + private function addInheritedSqlResultSetMappings(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->sqlResultSetMappings as $name => $mapping) { if (isset ($subClass->sqlResultSetMappings[$name])) { @@ -627,7 +545,7 @@ private function addInheritedSqlResultSetMappings(ClassMetadata $subClass, Class * * @throws ORMException */ - private function completeIdentifierGeneratorMappings(ClassMetadata $class) + private function completeIdentifierGeneratorMappings(ClassMetadata $class) : void { foreach ($class->getDeclaredPropertiesIterator() as $property) { if ( ! $property instanceof FieldMetadata /*&& ! $property instanceof AssocationMetadata*/) { @@ -670,7 +588,7 @@ private function completeFieldIdentifierGeneratorMapping(FieldMetadata $field) } // @todo guilhermeblanco Move sequence generation to DBAL - $sequencePrefix = $platform->getSequencePrefix($class->getTableName(), $class->getSchemaName()); + $sequencePrefix = $platform->getSequencePrefix($field->getTableName(), $field->getSchemaName()); $idSequenceName = sprintf('%s_%s_seq', $sequencePrefix, $field->getColumnName()); $sequenceName = $platform->fixSchemaElementName($idSequenceName); @@ -714,7 +632,7 @@ private function completeFieldIdentifierGeneratorMapping(FieldMetadata $field) /** * {@inheritDoc} */ - protected function wakeupReflection(ClassMetadata $class, ReflectionService $reflService) + protected function wakeupReflection(ClassMetadata $class, ReflectionService $reflService) : void { $class->wakeupReflection($reflService); } @@ -722,7 +640,7 @@ protected function wakeupReflection(ClassMetadata $class, ReflectionService $ref /** * {@inheritDoc} */ - protected function initializeReflection(ClassMetadata $class, ReflectionService $reflService) + protected function initializeReflection(ClassMetadata $class, ReflectionService $reflService) : void { $class->initializeReflection($reflService); } @@ -730,7 +648,7 @@ protected function initializeReflection(ClassMetadata $class, ReflectionService /** * {@inheritDoc} */ - protected function getFqcnFromAlias($namespaceAlias, $simpleClassName) + protected function getFqcnFromAlias($namespaceAlias, $simpleClassName) : string { return $this->em->getConfiguration()->getEntityNamespace($namespaceAlias) . '\\' . $simpleClassName; } @@ -738,7 +656,7 @@ protected function getFqcnFromAlias($namespaceAlias, $simpleClassName) /** * {@inheritDoc} */ - protected function getDriver() + protected function getDriver() : Driver\MappingDriver { return $this->driver; } @@ -746,7 +664,7 @@ protected function getDriver() /** * {@inheritDoc} */ - protected function isEntity(ClassMetadata $class) + protected function isEntity(ClassMetadata $class) : bool { return isset($class->isMappedSuperclass) && $class->isMappedSuperclass === false; } @@ -754,7 +672,7 @@ protected function isEntity(ClassMetadata $class) /** * @return Platforms\AbstractPlatform */ - private function getTargetPlatform() + private function getTargetPlatform() : Platforms\AbstractPlatform { if (!$this->targetPlatform) { $this->targetPlatform = $this->em->getConnection()->getDatabasePlatform(); @@ -763,7 +681,12 @@ private function getTargetPlatform() return $this->targetPlatform; } - private function buildValueGenerationPlan(ClassMetadata $class): void + /** + * @param ClassMetadata $class + * + * @return void + */ + private function buildValueGenerationPlan(ClassMetadata $class) : void { /** @var LocalColumnMetadata[] $generatedProperties */ $generatedProperties = []; @@ -800,7 +723,16 @@ private function buildValueGenerationPlan(ClassMetadata $class): void } } - private function createPropertyValueGenerator(ClassMetadata $class, LocalColumnMetadata $property): Sequencing\Generator + /** + * @param ClassMetadata $class + * @param LocalColumnMetadata $property + * + * @return Sequencing\Generator + */ + private function createPropertyValueGenerator( + ClassMetadata $class, + LocalColumnMetadata $property + ) : Sequencing\Generator { $platform = $this->getTargetPlatform(); diff --git a/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php b/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php index 88b01ccd823..5b8f79742b1 100644 --- a/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php @@ -4,6 +4,7 @@ namespace Doctrine\ORM\Tools; +use Doctrine\ORM\Reflection\ReflectionService; use Doctrine\ORM\Reflection\StaticReflectionService; use Doctrine\ORM\Mapping\ClassMetadataFactory; @@ -24,9 +25,9 @@ class DisconnectedClassMetadataFactory extends ClassMetadataFactory { /** - * @return StaticReflectionService + * @return ReflectionService */ - public function getReflectionService() + public function getReflectionService() : ReflectionService { return new StaticReflectionService(); } From 2b85eab2236e58645fed11076668ed3885b05ec3 Mon Sep 17 00:00:00 2001 From: Usman Zafar Date: Wed, 9 Aug 2017 12:24:13 +0000 Subject: [PATCH 199/275] Reverted the public method on construct to protected. Updated the tests. --- lib/Doctrine/ORM/EntityManager.php | 2 +- tests/Doctrine/Tests/Mocks/EntityManagerMock.php | 6 ++++-- .../Tests/ORM/Mapping/ClassMetadataFactoryTest.php | 8 +++++--- tests/Doctrine/Tests/ORM/UnitOfWorkTest.php | 2 +- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 0c3f2113c64..a207fd6f3c4 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -139,7 +139,7 @@ final class EntityManager implements EntityManagerInterface * @param \Doctrine\ORM\Configuration $config * @param \Doctrine\Common\EventManager $eventManager */ - public function __construct(Connection $conn, Configuration $config, EventManager $eventManager) + protected function __construct(Connection $conn, Configuration $config, EventManager $eventManager) { $this->conn = $conn; $this->config = $config; diff --git a/tests/Doctrine/Tests/Mocks/EntityManagerMock.php b/tests/Doctrine/Tests/Mocks/EntityManagerMock.php index 68ea5791c32..fd572b8b8ed 100644 --- a/tests/Doctrine/Tests/Mocks/EntityManagerMock.php +++ b/tests/Doctrine/Tests/Mocks/EntityManagerMock.php @@ -105,9 +105,11 @@ public static function create($conn, Configuration $config = null, EventManager $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver([])); } if (null === $eventManager) { - $eventManager = new EventManager(); + $eventManager = $conn->getEventManager(); } - return new EntityManagerMock(new EntityManager($conn, $config, $eventManager)); + + $em = EntityManager::create($conn, $config, $eventManager); + return new EntityManagerMock($em); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 04ce04d409f..ad9b8a8f1af 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -209,6 +209,9 @@ public function testGetAllMetadataWorksWithBadConnection() // DDC-3551 $conn = $this->createMock(Connection::class); $mockDriver = new MetadataDriverMock(); + $conn->expects($this->any()) + ->method('getEventManager') + ->willReturn(new EventManager()); $em = $this->createEntityManager($mockDriver, $conn); $conn->expects($this->any()) @@ -232,11 +235,10 @@ protected function createEntityManager($metadataDriver, $conn = null) $config->setProxyDir(__DIR__ . '/../../Proxies'); $config->setProxyNamespace('Doctrine\Tests\Proxies'); - $eventManager = new EventManager(); - if (!$conn) { - $conn = new ConnectionMock([], $driverMock, $config, $eventManager); + $conn = new ConnectionMock([], $driverMock, $config, new EventManager()); } + $eventManager = $conn->getEventManager(); $config->setMetadataDriverImpl($metadataDriver); diff --git a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php index 4009a49bae6..57ef7dafa01 100644 --- a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php +++ b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php @@ -65,8 +65,8 @@ protected function setUp() { parent::setUp(); - $this->connectionMock = new ConnectionMock([], new DriverMock()); $this->eventManager = $this->getMockBuilder(EventManager::class)->getMock(); + $this->connectionMock = new ConnectionMock([], new DriverMock(), null, $this->eventManager); $this->emMock = EntityManagerMock::create($this->connectionMock, null, $this->eventManager); $this->unitOfWork = new UnitOfWorkMock($this->emMock); From ca4b2ee06a3edca24b3871df79298be79fd326da Mon Sep 17 00:00:00 2001 From: Usman Zafar Date: Wed, 9 Aug 2017 12:51:48 +0000 Subject: [PATCH 200/275] updated the heading for upgrade doc --- UPGRADE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UPGRADE.md b/UPGRADE.md index bdd8b8d4449..b6ab07957b6 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -1,6 +1,6 @@ # Upgrade to 3.0 -## BC Break: Removed `EntityManager#flush($entity)` and `EntityManager#flush($entities)` +## BC Break: Added the final keyword for `EntityManager` Final keyword has been added to the ``EntityManager::class`` in order to ensure that EntityManager is not used as valid extension point. Valid extension point should be EntityManagerInterface. From 24f68291883d9bd7925bf8631fadf8e5edc437aa Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 9 Aug 2017 14:20:43 -0400 Subject: [PATCH 201/275] ClassMetadataFactory changed to bring ClassMetadata instantiation closer to MappingDriver loading call. Changed how ReflectionService is called for ClassMetadata initialization, simplifying calls. --- .../Mapping/AbstractClassMetadataFactory.php | 316 ++++++++---------- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 77 +---- .../Mapping/ClassMetadataBuildingContext.php | 15 + .../ORM/Mapping/ClassMetadataFactory.php | 102 +++--- .../ORM/Mapping/ComponentMetadata.php | 25 +- lib/Doctrine/ORM/Mapping/TableMetadata.php | 10 + .../DisconnectedClassMetadataFactory.php | 6 +- .../Tests/ORM/CommitOrderCalculatorTest.php | 4 +- .../OnClassMetadataNotFoundEventArgsTest.php | 5 +- .../ORM/Functional/DatabaseDriverTestCase.php | 7 +- .../Tests/ORM/Functional/SQLFilterTest.php | 5 +- .../ORM/Functional/Ticket/DDC2359Test.php | 26 +- .../ORM/Functional/Ticket/DDC3103Test.php | 6 +- .../ORM/Hydration/ResultSetMappingTest.php | 10 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 4 +- .../ORM/Mapping/AnnotationDriverTest.php | 17 +- .../ORM/Mapping/ClassMetadataFactoryTest.php | 7 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 153 +++------ .../ORM/Mapping/PHPMappingDriverTest.php | 2 + .../ORM/Mapping/XmlMappingDriverTest.php | 2 +- .../Tests/ORM/Proxy/ProxyFactoryTest.php | 4 +- .../DefaultRepositoryFactoryTest.php | 4 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 59 ++-- .../Export/XmlClassMetadataExporterTest.php | 7 +- tests/Doctrine/Tests/ORM/UnitOfWorkTest.php | 3 +- 25 files changed, 402 insertions(+), 474 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php index adcac12e264..68cd0ab4106 100644 --- a/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php @@ -52,7 +52,7 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory /** * @var ReflectionService|null */ - private $reflectionService; + protected $reflectionService; /** * Sets the cache driver used by the factory to cache ClassMetadata instances. @@ -87,86 +87,83 @@ public function getLoadedMetadata() : array } /** - * Forces the factory to load the metadata of all classes known to the underlying - * mapping driver. + * Sets the reflectionService. * - * @return array The ClassMetadata instances of all mapped classes. + * @param ReflectionService $reflectionService * - * @throws \InvalidArgumentException - * @throws \ReflectionException - * @throws MappingException + * @return void */ - public function getAllMetadata() : array + public function setReflectionService(ReflectionService $reflectionService) : void { - if (! $this->initialized) { - $this->initialize(); - } - - $driver = $this->getDriver(); - $metadata = []; - - foreach ($driver->getAllClassNames() as $className) { - $metadata[] = $this->getMetadataFor($className); - } - - return $metadata; + $this->reflectionService = $reflectionService; } /** - * Lazy initialization of this stuff, especially the metadata driver, - * since these are not needed at all when a metadata cache is active. + * Gets the reflection service associated with this metadata factory. * - * @return void + * @return ReflectionService */ - abstract protected function initialize() : void; + public function getReflectionService() : ReflectionService + { + if ($this->reflectionService === null) { + $this->reflectionService = new RuntimeReflectionService(); + } + + return $this->reflectionService; + } /** - * Gets the fully qualified class-name from the namespace alias. + * Checks whether the factory has the metadata for a class loaded already. * - * @param string $namespaceAlias - * @param string $simpleClassName + * @param string $className * - * @return string + * @return bool TRUE if the metadata of the class in question is already loaded, FALSE otherwise. */ - abstract protected function getFqcnFromAlias($namespaceAlias, $simpleClassName) : string; + public function hasMetadataFor($className) : bool + { + return isset($this->loadedMetadata[$className]); + } /** - * Returns the mapping driver implementation. + * Sets the metadata descriptor for a specific class. * - * @return Driver\MappingDriver - */ - abstract protected function getDriver() : Driver\MappingDriver; - - /** - * Wakes up reflection after ClassMetadata gets unserialized from cache. + * NOTE: This is only useful in very special cases, like when generating proxy classes. * - * @param ClassMetadata $class - * @param ReflectionService $reflService + * @param string $className + * @param ClassMetadata $class * * @return void */ - abstract protected function wakeupReflection(ClassMetadata $class, ReflectionService $reflService) : void; + public function setMetadataFor($className, $class) : void + { + $this->loadedMetadata[$className] = $class; + } /** - * Initializes Reflection after ClassMetadata was constructed. + * Forces the factory to load the metadata of all classes known to the underlying + * mapping driver. * - * @param ClassMetadata $class - * @param ReflectionService $reflService + * @return array The ClassMetadata instances of all mapped classes. * - * @return void + * @throws \InvalidArgumentException + * @throws \ReflectionException + * @throws MappingException */ - abstract protected function initializeReflection(ClassMetadata $class, ReflectionService $reflService) : void; + public function getAllMetadata() : array + { + if (! $this->initialized) { + $this->initialize(); + } - /** - * Checks whether the class metadata is an entity. - * - * This method should return false for mapped superclasses or embedded classes. - * - * @param ClassMetadata $class - * - * @return bool - */ - abstract protected function isEntity(ClassMetadata $class) : bool; + $driver = $this->getDriver(); + $metadata = []; + + foreach ($driver->getAllClassNames() as $className) { + $metadata[] = $this->getMetadataFor($className); + } + + return $metadata; + } /** * Gets the class metadata descriptor for a class. @@ -177,7 +174,7 @@ abstract protected function isEntity(ClassMetadata $class) : bool; * * @throws \InvalidArgumentException * @throws ReflectionException - * @throws MappingException + * @throws CommonMappingException */ public function getMetadataFor($className) : ClassMetadata { @@ -211,12 +208,10 @@ public function getMetadataFor($className) : ClassMetadata $this->wakeupReflection($cached, $this->getReflectionService()); } else { - foreach ($this->loadMetadata($realClassName, $metadataBuildingContext) as $loadedClassName) { - $this->cacheDriver->save( - $loadedClassName . $this->cacheSalt, - $this->loadedMetadata[$loadedClassName], - null - ); + foreach ($this->loadMetadata($realClassName, $metadataBuildingContext) as $loadedClass) { + $loadedClassName = $loadedClass->getClassName(); + + $this->cacheDriver->save($loadedClassName . $this->cacheSalt, $loadedClass, null); } } } else { @@ -240,56 +235,6 @@ public function getMetadataFor($className) : ClassMetadata return $this->loadedMetadata[$className]; } - /** - * Checks whether the factory has the metadata for a class loaded already. - * - * @param string $className - * - * @return bool TRUE if the metadata of the class in question is already loaded, FALSE otherwise. - */ - public function hasMetadataFor($className) : bool - { - return isset($this->loadedMetadata[$className]); - } - - /** - * Sets the metadata descriptor for a specific class. - * - * NOTE: This is only useful in very special cases, like when generating proxy classes. - * - * @param string $className - * @param ClassMetadata $class - * - * @return void - */ - public function setMetadataFor($className, $class) : void - { - $this->loadedMetadata[$className] = $class; - } - - /** - * Gets an array of parent classes for the given entity class. - * - * @param string $name - * - * @return array - * - * @throws \InvalidArgumentException - */ - protected function getParentClasses($name) : array - { - // Collect parent classes, ignoring transient (not-mapped) classes. - $parentClasses = []; - - foreach (array_reverse($this->getReflectionService()->getParentClasses($name)) as $parentClass) { - if ( ! $this->getDriver()->isTransient($parentClass)) { - $parentClasses[] = $parentClass; - } - } - - return $parentClasses; - } - /** * Loads the metadata of the class in question and all it's ancestors whose metadata * is still not loaded. @@ -304,7 +249,7 @@ protected function getParentClasses($name) : array * get loaded. * @param ClassMetadataBuildingContext $metadataBuildingContext * - * @return array + * @return array * * @throws \InvalidArgumentException */ @@ -330,27 +275,60 @@ protected function loadMetadata(string $name, ClassMetadataBuildingContext $meta continue; } - $class = $this->newClassMetadataInstance($className, $metadataBuildingContext); - - if ($parent) { - $class->setParent($parent); - } - - $this->initializeReflection($class, $reflService); - $this->doLoadMetadata($class, $metadataBuildingContext); + $class = $this->doLoadMetadata($className, $parent, $metadataBuildingContext); $this->loadedMetadata[$className] = $class; $parent = $class; - $this->wakeupReflection($class, $reflService); - - $loaded[] = $className; + $loaded[] = $class; } return $loaded; } + /** + * {@inheritDoc} + */ + public function isTransient($class) : bool + { + if ( ! $this->initialized) { + $this->initialize(); + } + + // Check for namespace alias + if (strpos($class, ':') !== false) { + [$namespaceAlias, $simpleClassName] = explode(':', $class, 2); + + $class = $this->getFqcnFromAlias($namespaceAlias, $simpleClassName); + } + + return $this->getDriver()->isTransient($class); + } + + /** + * Gets an array of parent classes for the given entity class. + * + * @param string $name + * + * @return array + * + * @throws \InvalidArgumentException + */ + protected function getParentClasses($name) : array + { + // Collect parent classes, ignoring transient (not-mapped) classes. + $parentClasses = []; + + foreach (array_reverse($this->getReflectionService()->getParentClasses($name)) as $parentClass) { + if ( ! $this->getDriver()->isTransient($parentClass)) { + $parentClasses[] = $parentClass; + } + } + + return $parentClasses; + } + /** * Provides a fallback hook for loading metadata when loading failed due to reflection/mapping exceptions * @@ -370,80 +348,70 @@ protected function onNotFoundMetadata( } /** - * Actually loads the metadata from the underlying metadata. - * - * @param ClassMetadata $class - * @param ClassMetadataBuildingContext $metadataBuildingContext + * Lazy initialization of this stuff, especially the metadata driver, + * since these are not needed at all when a metadata cache is active. * * @return void */ - abstract protected function doLoadMetadata( - ClassMetadata $class, - ClassMetadataBuildingContext $metadataBuildingContext - ) : void; + abstract protected function initialize() : void; /** - * Creates a new ClassMetadata instance for the given class name. + * Gets the fully qualified class-name from the namespace alias. * - * @param string $className - * @param ClassMetadataBuildingContext $metadataBuildingContext + * @param string $namespaceAlias + * @param string $simpleClassName * - * @return ClassMetadata + * @return string */ - abstract protected function newClassMetadataInstance( - string $className, - ClassMetadataBuildingContext $metadataBuildingContext - ) : ClassMetadata; + abstract protected function getFqcnFromAlias($namespaceAlias, $simpleClassName) : string; /** - * Creates a new ClassMetadataBuildingContext instance. + * Returns the mapping driver implementation. * - * @return ClassMetadataBuildingContext + * @return Driver\MappingDriver */ - abstract protected function newClassMetadataBuildingContext() : ClassMetadataBuildingContext; + abstract protected function getDriver() : Driver\MappingDriver; /** - * {@inheritDoc} + * Wakes up reflection after ClassMetadata gets unserialized from cache. + * + * @param ClassMetadata $class + * @param ReflectionService $reflService + * + * @return void */ - public function isTransient($class) : bool - { - if ( ! $this->initialized) { - $this->initialize(); - } - - // Check for namespace alias - if (strpos($class, ':') !== false) { - [$namespaceAlias, $simpleClassName] = explode(':', $class, 2); - - $class = $this->getFqcnFromAlias($namespaceAlias, $simpleClassName); - } - - return $this->getDriver()->isTransient($class); - } + abstract protected function wakeupReflection(ClassMetadata $class, ReflectionService $reflService) : void; /** - * Sets the reflectionService. + * Checks whether the class metadata is an entity. * - * @param ReflectionService $reflectionService + * This method should return false for mapped superclasses or embedded classes. * - * @return void + * @param ClassMetadata $class + * + * @return bool */ - public function setReflectionService(ReflectionService $reflectionService) : void - { - $this->reflectionService = $reflectionService; - } + abstract protected function isEntity(ClassMetadata $class) : bool; /** - * Gets the reflection service associated with this metadata factory. + * Creates a new ClassMetadata instance for the given class name. * - * @return ReflectionService + * @param string $className + * @param ClassMetadata|null $parent + * @param ClassMetadataBuildingContext $metadataBuildingContext + * + * @return ClassMetadata */ - public function getReflectionService() : ReflectionService - { - if ($this->reflectionService === null) { - $this->reflectionService = new RuntimeReflectionService(); - } + abstract protected function doLoadMetadata( + string $className, + ?ClassMetadata $parent, + ClassMetadataBuildingContext $metadataBuildingContext + ) : ClassMetadata; - return $this->reflectionService; - } + /** + * Creates a new ClassMetadataBuildingContext instance. + * + * @return ClassMetadataBuildingContext + */ + abstract protected function newClassMetadataBuildingContext() : ClassMetadataBuildingContext; } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 87f2dad56b4..d2ac5871c94 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -226,7 +226,7 @@ public function __construct( ClassMetadataBuildingContext $metadataBuildingContext ) { - parent::__construct($entityName); + parent::__construct($entityName, $metadataBuildingContext); $this->namingStrategy = $metadataBuildingContext->getNamingStrategy(); @@ -404,77 +404,24 @@ public function __sleep() /** * Restores some state that can not be serialized/unserialized. * - * @param ReflectionService $reflService + * @param ReflectionService $reflectionService * * @return void */ - public function wakeupReflection(ReflectionService $reflService) : void + public function wakeupReflection(ReflectionService $reflectionService) : void { // Restore ReflectionClass and properties - $this->reflectionClass = $reflService->getClass($this->className); + $this->reflectionClass = $reflectionService->getClass($this->className); if (! $this->reflectionClass) { return; } - /*$parentReflFields = []; + $this->className = $this->reflectionClass->getName(); - foreach ($this->embeddedClasses as $property => $embeddedClass) { - if (isset($embeddedClass['declaredField'])) { - $parentReflFields[$property] = new ReflectionEmbeddedProperty( - $parentReflFields[$embeddedClass['declaredField']], - $reflService->getAccessibleProperty( - $this->embeddedClasses[$embeddedClass['declaredField']]['class'], - $embeddedClass['originalField'] - ), - $this->embeddedClasses[$embeddedClass['declaredField']]['class'] - ); - - continue; - } - - $fieldRefl = $reflService->getAccessibleProperty( - isset($embeddedClass['declared']) ? $embeddedClass['declared'] : $this->getClassName(), - $property - ); - - // @todo guilhermeblanco Handle reflection initialization once embeddables are back. - $parentReflFields[$property] = $fieldRefl; - }*/ - - foreach ($this->declaredProperties as $field => $property) { + foreach ($this->declaredProperties as $property) { /** @var Property $property */ - - /*if (isset($mapping['declaredField']) && isset($parentReflFields[$mapping['declaredField']])) { - // @todo guilhermeblanco Handle reflection initialization once embeddables are back. - $this->reflection[$field] = new ReflectionEmbeddedProperty( - $parentReflFields[$mapping['declaredField']], - $reflService->getAccessibleProperty($mapping['originalClass'], $mapping['originalField']), - $mapping['originalClass'] - ); - continue; - }*/ - - $property->wakeupReflection($reflService); - } - } - - /** - * Initializes a new ClassMetadata instance that will hold the object-relational mapping - * metadata of the class with the given name. - * - * @param ReflectionService $reflService The reflection service. - * - * @return void - */ - public function initializeReflection(ReflectionService $reflService) : void - { - $entityReflClass = $reflService->getClass($this->className); - - $this->reflectionClass = $entityReflClass; - - if ($entityReflClass) { - $this->className = $this->reflectionClass->getName(); + $property->wakeupReflection($reflectionService); } } @@ -535,18 +482,18 @@ function (Property $property) { /** * Validates lifecycle callbacks. * - * @param ReflectionService $reflService + * @param ReflectionService $reflectionService * * @return void * * @throws MappingException */ - public function validateLifecycleCallbacks(ReflectionService $reflService) : void + public function validateLifecycleCallbacks(ReflectionService $reflectionService) : void { foreach ($this->lifecycleCallbacks as $callbacks) { /** @var array $callbacks */ foreach ($callbacks as $callbackFuncName) { - if (! $reflService->hasPublicMethod($this->className, $callbackFuncName)) { + if (! $reflectionService->hasPublicMethod($this->className, $callbackFuncName)) { throw MappingException::lifecycleCallbackMethodNotFound($this->className, $callbackFuncName); } } @@ -1465,7 +1412,9 @@ public function addProperty(Property $property) $this->validateAndCompleteManyToManyMapping($property); break; - // Transient properties are ignored on purpose here! =) + default: + // Transient properties are ignored on purpose here! =) + break; } $this->addDeclaredProperty($property); diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataBuildingContext.php b/lib/Doctrine/ORM/Mapping/ClassMetadataBuildingContext.php index 1ec3ff56592..fa16e0b47de 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataBuildingContext.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataBuildingContext.php @@ -24,6 +24,7 @@ use Doctrine\ORM\Mapping\Factory\DefaultNamingStrategy; use Doctrine\ORM\Mapping\Factory\NamingStrategy; +use Doctrine\ORM\Reflection\ReflectionService; /** * Class ClassMetadataBuildingContext @@ -38,6 +39,9 @@ class ClassMetadataBuildingContext /** @var AbstractClassMetadataFactory */ private $classMetadataFactory; + /** @var ReflectionService */ + private $reflectionService; + /** @var NamingStrategy */ private $namingStrategy; @@ -55,14 +59,17 @@ class ClassMetadataBuildingContext * ClassMetadataBuildingContext constructor. * * @param AbstractClassMetadataFactory $classMetadataFactory + * @param ReflectionService $reflectionService * @param NamingStrategy|null $namingStrategy */ public function __construct( AbstractClassMetadataFactory $classMetadataFactory, + ReflectionService $reflectionService, ?NamingStrategy $namingStrategy = null ) { $this->classMetadataFactory = $classMetadataFactory; + $this->reflectionService = $reflectionService; $this->namingStrategy = $namingStrategy ?: new DefaultNamingStrategy(); } @@ -74,6 +81,14 @@ public function getClassMetadataFactory() : AbstractClassMetadataFactory return $this->classMetadataFactory; } + /** + * @return ReflectionService + */ + public function getReflectionService() : ReflectionService + { + return $this->reflectionService; + } + /** * @return NamingStrategy */ diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 686f14b9ca9..0a5f8167512 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -58,7 +58,7 @@ protected function loadMetadata(string $name, ClassMetadataBuildingContext $meta { $loaded = parent::loadMetadata($name, $metadataBuildingContext); - array_map([$this, 'resolveDiscriminatorValue'], array_map([$this, 'getMetadataFor'], $loaded)); + array_map([$this, 'resolveDiscriminatorValue'], $loaded); return $loaded; } @@ -109,87 +109,88 @@ protected function onNotFoundMetadata( * @throws ORMException */ protected function doLoadMetadata( - ClassMetadata $class, + string $className, + ?ClassMetadata $parent, ClassMetadataBuildingContext $metadataBuildingContext - ) : void + ) : ClassMetadata { - - /* @var $class ClassMetadata */ - /* @var $parent ClassMetadata|null */ - $parent = $class->getParent(); + $classMetadata = new ClassMetadata($className, $metadataBuildingContext); if ($parent) { + $classMetadata->setParent($parent); + if ($parent->inheritanceType === InheritanceType::SINGLE_TABLE) { - $class->setTable($parent->table); + $classMetadata->setTable($parent->table); } - $this->addInheritedProperties($class, $parent); + $this->addInheritedProperties($classMetadata, $parent); - $class->setInheritanceType($parent->inheritanceType); - $class->setIdentifier($parent->identifier); + $classMetadata->setInheritanceType($parent->inheritanceType); + $classMetadata->setIdentifier($parent->identifier); if ($parent->discriminatorColumn) { - $class->setDiscriminatorColumn($parent->discriminatorColumn); - $class->setDiscriminatorMap($parent->discriminatorMap); + $classMetadata->setDiscriminatorColumn($parent->discriminatorColumn); + $classMetadata->setDiscriminatorMap($parent->discriminatorMap); } - $class->setLifecycleCallbacks($parent->lifecycleCallbacks); - $class->setChangeTrackingPolicy($parent->changeTrackingPolicy); + $classMetadata->setLifecycleCallbacks($parent->lifecycleCallbacks); + $classMetadata->setChangeTrackingPolicy($parent->changeTrackingPolicy); - if ($parent->isMappedSuperclass && ! $class->getCustomRepositoryClassName()) { - $class->setCustomRepositoryClassName($parent->getCustomRepositoryClassName()); + if ($parent->isMappedSuperclass && ! $classMetadata->getCustomRepositoryClassName()) { + $classMetadata->setCustomRepositoryClassName($parent->getCustomRepositoryClassName()); } - } // Invoke driver try { - $this->driver->loadMetadataForClass($class->getClassName(), $class, $metadataBuildingContext); + $this->driver->loadMetadataForClass($classMetadata->getClassName(), $classMetadata, $metadataBuildingContext); } catch (ReflectionException $e) { - throw MappingException::reflectionFailure($class->getClassName(), $e); + throw MappingException::reflectionFailure($classMetadata->getClassName(), $e); } - $this->completeIdentifierGeneratorMappings($class); + $this->completeIdentifierGeneratorMappings($classMetadata); if ($parent) { if ($parent->inheritanceType === InheritanceType::SINGLE_TABLE) { - $class->setTable($parent->table); + $classMetadata->setTable($parent->table); } - $this->addInheritedIndexes($class, $parent); - $this->addInheritedNamedQueries($class, $parent); + $this->addInheritedIndexes($classMetadata, $parent); + $this->addInheritedNamedQueries($classMetadata, $parent); if ($parent->getCache()) { - $class->setCache(clone $parent->getCache()); + $classMetadata->setCache(clone $parent->getCache()); } if ( ! empty($parent->namedNativeQueries)) { - $this->addInheritedNamedNativeQueries($class, $parent); + $this->addInheritedNamedNativeQueries($classMetadata, $parent); } if ( ! empty($parent->sqlResultSetMappings)) { - $this->addInheritedSqlResultSetMappings($class, $parent); + $this->addInheritedSqlResultSetMappings($classMetadata, $parent); } - if ( ! empty($parent->entityListeners) && empty($class->entityListeners)) { - $class->entityListeners = $parent->entityListeners; + if ( ! empty($parent->entityListeners) && empty($classMetadata->entityListeners)) { + $classMetadata->entityListeners = $parent->entityListeners; } } - if (! $class->discriminatorMap && $class->inheritanceType !== InheritanceType::NONE && $class->isRootEntity()) { - $this->addDefaultDiscriminatorMap($class); + if (! $classMetadata->discriminatorMap && $classMetadata->inheritanceType !== InheritanceType::NONE && $classMetadata->isRootEntity()) { + $this->addDefaultDiscriminatorMap($classMetadata); } - $this->completeRuntimeMetadata($class, $parent); + $this->completeRuntimeMetadata($classMetadata, $parent); if ($this->evm->hasListeners(Events::loadClassMetadata)) { - $eventArgs = new LoadClassMetadataEventArgs($class, $this->em); + $eventArgs = new LoadClassMetadataEventArgs($classMetadata, $this->em); $this->evm->dispatchEvent(Events::loadClassMetadata, $eventArgs); } - $this->buildValueGenerationPlan($class); - $this->validateRuntimeMetadata($class, $parent); + $this->buildValueGenerationPlan($classMetadata); + $this->validateRuntimeMetadata($classMetadata, $parent); + + return $classMetadata; } /** @@ -200,11 +201,7 @@ protected function doLoadMetadata( */ protected function completeRuntimeMetadata(ClassMetadata $class, ClassMetadata $parent = null) : void { - if ( ! $parent) { - return; - } - - if ( ! $parent->isMappedSuperclass) { + if (! $parent || ! $parent->isMappedSuperclass) { return; } @@ -272,23 +269,16 @@ protected function validateRuntimeMetadata(ClassMetadata $class, ClassMetadata $ } } - /** - * {@inheritdoc} - */ - protected function newClassMetadataInstance( - string $className, - ClassMetadataBuildingContext $metadataBuildingContext - ) : ClassMetadata - { - return new ClassMetadata($className, $metadataBuildingContext); - } - /** * {@inheritdoc} */ protected function newClassMetadataBuildingContext() : ClassMetadataBuildingContext { - return new ClassMetadataBuildingContext($this, $this->em->getConfiguration()->getNamingStrategy()); + return new ClassMetadataBuildingContext( + $this, + $this->getReflectionService(), + $this->em->getConfiguration()->getNamingStrategy() + ); } /** @@ -637,14 +627,6 @@ protected function wakeupReflection(ClassMetadata $class, ReflectionService $ref $class->wakeupReflection($reflService); } - /** - * {@inheritDoc} - */ - protected function initializeReflection(ClassMetadata $class, ReflectionService $reflService) : void - { - $class->initializeReflection($reflService); - } - /** * {@inheritDoc} */ diff --git a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php index 2d1a397255f..833637aa74a 100644 --- a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Doctrine\ORM\Mapping; +use Doctrine\ORM\Reflection\RuntimePublicReflectionProperty; /** * A ComponentMetadata instance holds object-relational property mapping. @@ -45,11 +46,15 @@ abstract class ComponentMetadata /** * ComponentMetadata constructor. * - * @param string $className + * @param string $className + * @param ClassMetadataBuildingContext $metadataBuildingContext */ - public function __construct(string $className) + public function __construct(string $className, ClassMetadataBuildingContext $metadataBuildingContext) { - $this->className = $className; + $reflectionService = $metadataBuildingContext->getReflectionService(); + + $this->reflectionClass = $reflectionService->getClass($className); + $this->className = $this->reflectionClass ? $this->reflectionClass->getName() : $className; } /** @@ -113,21 +118,31 @@ public function getDeclaredPropertiesIterator() : \ArrayIterator /** * @param Property $property * + * @throws \ReflectionException * @throws MappingException */ public function addDeclaredProperty(Property $property) : void { + $className = $this->getClassName(); $propertyName = $property->getName(); // @todo guilhermeblanco Switch to hasProperty once inherited properties are not being mapped on child classes if ($this->hasDeclaredProperty($propertyName)) { - throw MappingException::duplicateProperty($this->getClassName(), $this->getProperty($propertyName)); + throw MappingException::duplicateProperty($className, $this->getProperty($propertyName)); } $property->setDeclaringClass($this); if ($this->reflectionClass) { - $property->setReflectionProperty($this->reflectionClass->getProperty($propertyName)); + $reflectionProperty = new \ReflectionProperty($className, $propertyName); + + if ($reflectionProperty->isPublic()) { + $reflectionProperty = new RuntimePublicReflectionProperty($className, $propertyName); + } + + $reflectionProperty->setAccessible(true); + + $property->setReflectionProperty($reflectionProperty); } $this->declaredProperties[$propertyName] = $property; diff --git a/lib/Doctrine/ORM/Mapping/TableMetadata.php b/lib/Doctrine/ORM/Mapping/TableMetadata.php index 5294aa447f5..66396b9095d 100644 --- a/lib/Doctrine/ORM/Mapping/TableMetadata.php +++ b/lib/Doctrine/ORM/Mapping/TableMetadata.php @@ -7,6 +7,16 @@ use Doctrine\DBAL\Platforms\AbstractPlatform; +/** + * Class TableMetadata + * + * @package Doctrine\ORM\Mapping + * @since 3.0 + * + * @todo guilhermeblanco Add constructor requiring tableName and optional schemaName + * + * @author Guilherme Blanco + */ class TableMetadata { /** @var string|null */ diff --git a/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php b/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php index 5b8f79742b1..efcfa9549f3 100644 --- a/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Tools/DisconnectedClassMetadataFactory.php @@ -29,6 +29,10 @@ class DisconnectedClassMetadataFactory extends ClassMetadataFactory */ public function getReflectionService() : ReflectionService { - return new StaticReflectionService(); + if ($this->reflectionService === null) { + $this->reflectionService = new StaticReflectionService(); + } + + return $this->reflectionService; } } diff --git a/tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php b/tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php index d758de32b6a..141b01d8b7e 100644 --- a/tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php +++ b/tests/Doctrine/Tests/ORM/CommitOrderCalculatorTest.php @@ -8,6 +8,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataBuildingContext; use Doctrine\ORM\Mapping\ClassMetadataFactory; +use Doctrine\ORM\Reflection\RuntimeReflectionService; use Doctrine\Tests\OrmTestCase; /** @@ -33,7 +34,8 @@ protected function setUp() { $this->calc = new CommitOrderCalculator(); $this->metadataBuildingContext = new ClassMetadataBuildingContext( - $this->createMock(ClassMetadataFactory::class) + $this->createMock(ClassMetadataFactory::class), + new RuntimeReflectionService() ); } diff --git a/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php b/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php index 9c256c2ecb2..6f9b570690e 100644 --- a/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php +++ b/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php @@ -4,12 +4,12 @@ namespace Doctrine\Tests\ORM; -use Doctrine\Common\Persistence\ObjectManager; use Doctrine\ORM\EntityManager; use Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataBuildingContext; use Doctrine\ORM\Mapping\ClassMetadataFactory; +use Doctrine\ORM\Reflection\ReflectionService; use Doctrine\Tests\DoctrineTestCase; /** @@ -23,7 +23,8 @@ public function testEventArgsMutability() { $entityManager = $this->createMock(EntityManager::class); $metadataBuildingContext = new ClassMetadataBuildingContext( - $this->createMock(ClassMetadataFactory::class) + $this->createMock(ClassMetadataFactory::class), + $this->createMock(ReflectionService::class) ); $args = new OnClassMetadataNotFoundEventArgs('foo', $metadataBuildingContext, $entityManager); diff --git a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTestCase.php b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTestCase.php index bd901a1b7bc..d826c45040c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTestCase.php +++ b/tests/Doctrine/Tests/ORM/Functional/DatabaseDriverTestCase.php @@ -7,6 +7,7 @@ use Doctrine\ORM\Mapping\ClassMetadataBuildingContext; use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\Driver\DatabaseDriver; +use Doctrine\ORM\Reflection\ReflectionService; use Doctrine\Tests\OrmFunctionalTestCase; use Doctrine\ORM\Mapping\ClassMetadata; @@ -18,7 +19,8 @@ abstract class DatabaseDriverTestCase extends OrmFunctionalTestCase protected function convertToClassMetadata(array $entityTables, array $manyTables = []) { $metadataBuildingContext = new ClassMetadataBuildingContext( - $this->createMock(ClassMetadataFactory::class) + $this->createMock(ClassMetadataFactory::class), + $this->createMock(ReflectionService::class) ); $sm = $this->em->getConnection()->getSchemaManager(); $driver = new DatabaseDriver($sm); @@ -44,7 +46,8 @@ protected function convertToClassMetadata(array $entityTables, array $manyTables protected function extractClassMetadata(array $classNames) { $metadataBuildingContext = new ClassMetadataBuildingContext( - $this->createMock(ClassMetadataFactory::class) + $this->createMock(ClassMetadataFactory::class), + $this->createMock(ReflectionService::class) ); $classNames = array_map('strtolower', $classNames); $metadatas = []; diff --git a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php index 004e2f28eeb..074db749a4b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/SQLFilterTest.php @@ -15,6 +15,7 @@ use Doctrine\ORM\Mapping\FetchMode; use Doctrine\ORM\Query\Filter\SQLFilter; use Doctrine\ORM\Query\FilterCollection; +use Doctrine\ORM\Reflection\ReflectionService; use Doctrine\Tests\Models\CMS\CmsAddress; use Doctrine\Tests\Models\CMS\CmsArticle; use Doctrine\Tests\Models\CMS\CmsGroup; @@ -300,8 +301,10 @@ public function testSQLFilterSetParameterInfersType() public function testSQLFilterAddConstraint() { $metadataBuildingContext = new ClassMetadataBuildingContext( - $this->createMock(ClassMetadataFactory::class) + $this->createMock(ClassMetadataFactory::class), + $this->createMock(ReflectionService::class) ); + $filter = new MySoftDeleteFilter($this->getMockEntityManager()); // Test for an entity that gets extra filter data diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php index fb694453a60..51530f776a0 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2359Test.php @@ -22,7 +22,7 @@ class DDC2359Test extends DoctrineTestCase /** * Verifies that {@see \Doctrine\ORM\Mapping\ClassMetadataFactory::wakeupReflection} is - * not called twice when loading metadata from a driver + * not called when loading metadata from a driver */ public function testIssue() { @@ -32,7 +32,7 @@ public function testIssue() /* @var $metadataFactory \Doctrine\ORM\Mapping\ClassMetadataFactory|\PHPUnit_Framework_MockObject_MockObject */ $metadataFactory = $this->getMockBuilder(ClassMetadataFactory::class) - ->setMethods(['newClassMetadataInstance', 'wakeupReflection']) + ->setMethods(['doLoadMetadata', 'wakeupReflection']) ->getMock(); $configuration = $this->getMockBuilder(Configuration::class) @@ -51,15 +51,29 @@ public function testIssue() ->method('getDeclaredPropertiesIterator') ->will($this->returnValue(new \ArrayIterator([]))); - $entityManager->expects($this->any())->method('getConfiguration')->will($this->returnValue($configuration)); - $entityManager->expects($this->any())->method('getConnection')->will($this->returnValue($connection)); + $entityManager + ->expects($this->any()) + ->method('getConfiguration') + ->will($this->returnValue($configuration)); + + $entityManager + ->expects($this->any()) + ->method('getConnection') + ->will($this->returnValue($connection)); + $entityManager ->expects($this->any()) ->method('getEventManager') ->will($this->returnValue($this->createMock(EventManager::class))); - $metadataFactory->expects($this->any())->method('newClassMetadataInstance')->will($this->returnValue($mockMetadata)); - $metadataFactory->expects($this->once())->method('wakeupReflection'); + $metadataFactory + ->expects($this->any()) + ->method('doLoadMetadata') + ->will($this->returnValue($mockMetadata)); + + $metadataFactory + ->expects($this->never()) + ->method('wakeupReflection'); $metadataFactory->setEntityManager($entityManager); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php index c3dd0a3a2ad..8426c5131e3 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3103Test.php @@ -8,6 +8,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataBuildingContext; use Doctrine\ORM\Mapping\ClassMetadataFactory; +use Doctrine\ORM\Reflection\ReflectionService; /** * @group DDC-3103 @@ -22,9 +23,12 @@ public function testIssue() $this->markTestSkipped('Embeddables are ommitted for now'); $driver = $this->createAnnotationDriver(); + $metadataBuildingContext = new ClassMetadataBuildingContext( - $this->createMock(ClassMetadataFactory::class) + $this->createMock(ClassMetadataFactory::class), + $this->createMock(ReflectionService::class) ); + $classMetadata = new ClassMetadata(DDC3103ArticleId::class, $metadataBuildingContext); $driver->loadMetadataForClass(DDC3103ArticleId::class, $classMetadata, $metadataBuildingContext); diff --git a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php index 6b44e9e33ab..d469168def6 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php @@ -45,10 +45,12 @@ protected function setUp() parent::setUp(); $this->metadataBuildingContext = new ClassMetadataBuildingContext( - $this->createMock(ClassMetadataFactory::class) + $this->createMock(ClassMetadataFactory::class), + new RuntimeReflectionService() ); - $this->em = $this->getTestEntityManager(); - $this->rsm = new ResultSetMapping; + + $this->em = $this->getTestEntityManager(); + $this->rsm = new ResultSetMapping; } /** @@ -120,7 +122,6 @@ public function testFluentInterface() public function testAddNamedNativeQueryResultSetMapping() { $cm = new ClassMetadata(CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $joinColumn = new JoinColumnMetadata(); $joinColumn->setReferencedColumnName('id'); @@ -208,7 +209,6 @@ public function testAddNamedNativeQueryResultSetMapping() public function testAddNamedNativeQueryResultSetMappingWithoutFields() { $cm = new ClassMetadata(CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $cm->addNamedNativeQuery( 'find-all', diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index c4c77dd2f63..2e9a8cabe04 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -52,7 +52,8 @@ public function setUp() parent::setUp(); $this->metadataBuildingContext = new Mapping\ClassMetadataBuildingContext( - $this->createMock(ClassMetadataFactory::class) + $this->createMock(ClassMetadataFactory::class), + new RuntimeReflectionService() ); } @@ -64,7 +65,6 @@ public function createClassMetadata($entityClassName) $class = new ClassMetadata($entityClassName, $this->metadataBuildingContext); - $class->initializeReflection(new RuntimeReflectionService()); $mappingDriver->loadMetadataForClass($entityClassName, $class, $this->metadataBuildingContext); return $class; diff --git a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php index 3a5c3c5acd6..c957e6422b1 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php @@ -5,13 +5,10 @@ namespace Doctrine\Tests\ORM\Mapping; use Doctrine\Common\Annotations\AnnotationException; -use Doctrine\Common\Annotations\AnnotationReader; use Doctrine\ORM\Annotation as ORM; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataFactory; -use Doctrine\ORM\Mapping\Driver\AnnotationDriver; use Doctrine\ORM\Mapping\MappingException; -use Doctrine\ORM\Reflection\RuntimeReflectionService; use Doctrine\Tests\Models\CMS\CmsUser; use Doctrine\Tests\Models\DDC1872\DDC1872ExampleEntityWithoutOverride; use Doctrine\Tests\Models\DDC1872\DDC1872ExampleEntityWithOverride; @@ -27,12 +24,12 @@ class AnnotationDriverTest extends AbstractMappingDriverTest public function testLoadMetadataForNonEntityThrowsException() { $cm = new ClassMetadata('stdClass', $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); - $reader = new AnnotationReader(); - $annotationDriver = new AnnotationDriver($reader); + + $mappingDriver = $this->loadDriver(); $this->expectException(MappingException::class); - $annotationDriver->loadMetadataForClass('stdClass', $cm, $this->metadataBuildingContext); + + $mappingDriver->loadMetadataForClass('stdClass', $cm, $this->metadataBuildingContext); } /** @@ -53,10 +50,10 @@ public function testFailingSecondLevelCacheAssociation() public function testColumnWithMissingTypeDefaultsToString() { $cm = new ClassMetadata(ColumnWithoutType::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); - $annotationDriver = $this->loadDriver(); - $annotationDriver->loadMetadataForClass(ColumnWithoutType::class, $cm, $this->metadataBuildingContext); + $mappingDriver = $this->loadDriver(); + + $mappingDriver->loadMetadataForClass(ColumnWithoutType::class, $cm, $this->metadataBuildingContext); self::assertNotNull($cm->getProperty('id')); diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 315fdb0f3d1..a48bd3647d2 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -271,10 +271,11 @@ protected function createValidClassMetadata() { // Self-made metadata $metadataBuildingContext = new Mapping\ClassMetadataBuildingContext( - $this->createMock(ClassMetadataFactory::class) + $this->createMock(ClassMetadataFactory::class), + new RuntimeReflectionService() ); + $cm1 = new ClassMetadata(TestEntity1::class, $metadataBuildingContext); - $cm1->initializeReflection(new RuntimeReflectionService()); $tableMetadata = new Mapping\TableMetadata(); $tableMetadata->setName('group'); @@ -498,9 +499,9 @@ class ClassMetadataFactoryTestSubject extends ClassMetadataFactory private $mockMetadata = []; private $requestedClasses = []; - /** @override */ protected function newClassMetadataInstance( string $className, + ?Mapping\ClassMetadata $parent, Mapping\ClassMetadataBuildingContext $metadataBuildingContext ) : ClassMetadata { diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 1eb330a629d..34de0e40355 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -29,6 +29,7 @@ use Doctrine\Tests\Models\Routing\RoutingLeg; use Doctrine\Tests\OrmTestCase; use DoctrineGlobal_Article; +use SebastianBergmann\Environment\Runtime; require_once __DIR__ . '/../../Models/Global/GlobalNamespaceModel.php'; @@ -44,7 +45,8 @@ public function setUp() parent::setUp(); $this->metadataBuildingContext = new Mapping\ClassMetadataBuildingContext( - $this->createMock(Mapping\ClassMetadataFactory::class) + $this->createMock(Mapping\ClassMetadataFactory::class), + new RuntimeReflectionService() ); } @@ -52,8 +54,6 @@ public function testClassMetadataInstanceSimpleState() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); - self::assertInstanceOf(\ReflectionClass::class, $cm->getReflectionClass()); self::assertEquals(CMS\CmsUser::class, $cm->getClassName()); self::assertEquals(CMS\CmsUser::class, $cm->getRootClassName()); @@ -68,7 +68,6 @@ public function testClassMetadataInstanceSerialization() $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $cm->setParent($parent); - $cm->initializeReflection(new RuntimeReflectionService()); $discrColumn = new DiscriminatorColumnMetadata(); @@ -97,6 +96,7 @@ public function testClassMetadataInstanceSerialization() $serialized = serialize($cm); $cm = unserialize($serialized); + $cm->wakeupReflection(new RuntimeReflectionService()); // Check state @@ -129,7 +129,6 @@ public function testClassMetadataInstanceSerialization() public function testFieldIsNullable() { $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $metadata->initializeReflection(new RuntimeReflectionService()); // Explicit Nullable $fieldMetadata = new Mapping\FieldMetadata('status'); @@ -179,8 +178,6 @@ public function testMapAssociationInGlobalNamespace() $cm = new ClassMetadata(DoctrineGlobal_Article::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); - $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('bar'); @@ -209,7 +206,6 @@ public function testMapAssociationInGlobalNamespace() public function testMapManyToManyJoinTableDefaults() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $association = new Mapping\ManyToManyAssociationMetadata('groups'); @@ -249,7 +245,6 @@ public function testMapManyToManyJoinTableDefaults() public function testSerializeManyToManyJoinTableCascade() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $association = new Mapping\ManyToManyAssociationMetadata('groups'); @@ -275,7 +270,7 @@ public function testSetDiscriminatorMapInGlobalNamespace() require_once __DIR__."/../../Models/Global/GlobalNamespaceModel.php"; $cm = new ClassMetadata('DoctrineGlobal_User', $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); + $cm->setDiscriminatorMap(['descr' => 'DoctrineGlobal_Article', 'foo' => 'DoctrineGlobal_User']); self::assertEquals("DoctrineGlobal_Article", $cm->discriminatorMap['descr']); @@ -290,7 +285,7 @@ public function testSetSubClassesInGlobalNamespace() require_once __DIR__."/../../Models/Global/GlobalNamespaceModel.php"; $cm = new ClassMetadata('DoctrineGlobal_User', $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); + $cm->setSubclasses(['DoctrineGlobal_Article']); self::assertEquals("DoctrineGlobal_Article", $cm->getSubClasses()[0]); @@ -301,46 +296,43 @@ public function testSetSubClassesInGlobalNamespace() */ public function testSetInvalidVersionMapping_ThrowsException() { - $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $property = new Mapping\VersionFieldMetadata('foo'); //new FieldMetadata('foo', 'foo', Type::getType('string')); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + + $property = new Mapping\VersionFieldMetadata('foo'); - $property->setDeclaringClass($metadata); + $property->setDeclaringClass($cm); $property->setColumnName('foo'); $property->setType(Type::getType('string')); - $metadata->initializeReflection(new RuntimeReflectionService()); - $this->expectException(MappingException::class); - $metadata->addProperty($property); + $cm->addProperty($property); } public function testGetSingleIdentifierFieldName_MultipleIdentifierEntity_ThrowsException() { - $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $metadata->initializeReflection(new RuntimeReflectionService()); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); - $metadata->addProperty($fieldMetadata); + $cm->addProperty($fieldMetadata); $fieldMetadata = new Mapping\FieldMetadata('username'); $fieldMetadata->setType(Type::getType('string')); - $metadata->addProperty($fieldMetadata); + $cm->addProperty($fieldMetadata); - $metadata->setIdentifier(['name', 'username']); + $cm->setIdentifier(['name', 'username']); $this->expectException(MappingException::class); - $metadata->getSingleIdentifierFieldName(); + $cm->getSingleIdentifierFieldName(); } public function testGetSingleIdentifierFieldName_NoIdEntity_ThrowsException() { $cm = new ClassMetadata(DDC6412File::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); @@ -350,7 +342,6 @@ public function testGetSingleIdentifierFieldName_NoIdEntity_ThrowsException() public function testDuplicateAssociationMappingException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $association = new Mapping\OneToOneAssociationMetadata('foo'); @@ -375,14 +366,13 @@ public function testDuplicateAssociationMappingException() public function testDuplicateColumnName_ThrowsMappingException() { - $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $metadata->initializeReflection(new RuntimeReflectionService()); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); - $metadata->addProperty($fieldMetadata); + $cm->addProperty($fieldMetadata); $this->expectException(MappingException::class); @@ -391,19 +381,18 @@ public function testDuplicateColumnName_ThrowsMappingException() $fieldMetadata->setType(Type::getType('string')); $fieldMetadata->setColumnName('name'); - $metadata->addProperty($fieldMetadata); + $cm->addProperty($fieldMetadata); } public function testDuplicateColumnName_DiscriminatorColumn_ThrowsMappingException() { - $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $metadata->initializeReflection(new RuntimeReflectionService()); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); - $metadata->addProperty($fieldMetadata); + $cm->addProperty($fieldMetadata); $discrColumn = new DiscriminatorColumnMetadata(); @@ -413,13 +402,12 @@ public function testDuplicateColumnName_DiscriminatorColumn_ThrowsMappingExcepti $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); - $metadata->setDiscriminatorColumn($discrColumn); + $cm->setDiscriminatorColumn($discrColumn); } public function testDuplicateColumnName_DiscriminatorColumn2_ThrowsMappingException() { - $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $metadata->initializeReflection(new RuntimeReflectionService()); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $discrColumn = new DiscriminatorColumnMetadata(); @@ -427,7 +415,7 @@ public function testDuplicateColumnName_DiscriminatorColumn2_ThrowsMappingExcept $discrColumn->setType(Type::getType('string')); $discrColumn->setLength(255); - $metadata->setDiscriminatorColumn($discrColumn); + $cm->setDiscriminatorColumn($discrColumn); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); @@ -435,19 +423,18 @@ public function testDuplicateColumnName_DiscriminatorColumn2_ThrowsMappingExcept $fieldMetadata->setType(Type::getType('string')); - $metadata->addProperty($fieldMetadata); + $cm->addProperty($fieldMetadata); } public function testDuplicateFieldAndAssociationMapping1_ThrowsException() { - $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $metadata->initializeReflection(new RuntimeReflectionService()); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); - $metadata->addProperty($fieldMetadata); + $cm->addProperty($fieldMetadata); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); @@ -455,19 +442,18 @@ public function testDuplicateFieldAndAssociationMapping1_ThrowsException() $association->setTargetEntity(CMS\CmsUser::class); - $metadata->addProperty($association); + $cm->addProperty($association); } public function testDuplicateFieldAndAssociationMapping2_ThrowsException() { - $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $metadata->initializeReflection(new RuntimeReflectionService()); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $association = new Mapping\OneToOneAssociationMetadata('name'); $association->setTargetEntity(CMS\CmsUser::class); - $metadata->addProperty($association); + $cm->addProperty($association); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); @@ -475,7 +461,7 @@ public function testDuplicateFieldAndAssociationMapping2_ThrowsException() $fieldMetadata->setType(Type::getType('string')); - $metadata->addProperty($fieldMetadata); + $cm->addProperty($fieldMetadata); } /** @@ -484,7 +470,6 @@ public function testDuplicateFieldAndAssociationMapping2_ThrowsException() public function testGetTemporaryTableNameSchema() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $tableMetadata = new Mapping\TableMetadata(); @@ -499,14 +484,12 @@ public function testGetTemporaryTableNameSchema() public function testDefaultTableName() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); // When table's name is not given self::assertEquals('CmsUser', $cm->getTableName()); self::assertEquals('CmsUser', $cm->table->getName()); $cm = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); // When joinTable's name is not given $joinTable = new Mapping\JoinTableMetadata(); @@ -537,7 +520,6 @@ public function testDefaultTableName() public function testDefaultJoinColumnName() { $cm = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); // this is really dirty, but it's the simplest way to test whether // joinColumn's name will be automatically set to user_id @@ -563,7 +545,6 @@ public function testDefaultJoinColumnName() self::assertEquals('user_id', $joinColumn->getColumnName()); $cm = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('user_CmsUser'); @@ -606,6 +587,7 @@ public function testOneToOneUnderscoreNamingStrategyDefaults() $this->metadataBuildingContext = new Mapping\ClassMetadataBuildingContext( $this->createMock(Mapping\ClassMetadataFactory::class), + new RuntimeReflectionService(), $namingStrategy ); @@ -634,6 +616,7 @@ public function testManyToManyUnderscoreNamingStrategyDefaults() $this->metadataBuildingContext = new Mapping\ClassMetadataBuildingContext( $this->createMock(Mapping\ClassMetadataFactory::class), + new RuntimeReflectionService(), $namingStrategy ); @@ -678,21 +661,21 @@ public function testManyToManyUnderscoreNamingStrategyDefaults() */ public function testSetMultipleIdentifierSetsComposite() { - $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $metadata->initializeReflection(new RuntimeReflectionService()); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); - $metadata->addProperty($fieldMetadata); + $cm->addProperty($fieldMetadata); $fieldMetadata = new Mapping\FieldMetadata('username'); $fieldMetadata->setType(Type::getType('string')); - $metadata->addProperty($fieldMetadata); + $cm->addProperty($fieldMetadata); - $metadata->setIdentifier(['name', 'username']); - self::assertTrue($metadata->isIdentifierComposite()); + $cm->setIdentifier(['name', 'username']); + + self::assertTrue($cm->isIdentifierComposite()); } /** @@ -700,16 +683,15 @@ public function testSetMultipleIdentifierSetsComposite() */ public function testJoinTableMappingDefaults() { - $metadata = new ClassMetadata('DoctrineGlobal_Article', $this->metadataBuildingContext); - $metadata->initializeReflection(new RuntimeReflectionService()); + $cm = new ClassMetadata('DoctrineGlobal_Article', $this->metadataBuildingContext); $association = new Mapping\ManyToManyAssociationMetadata('author'); $association->setTargetEntity(CMS\CmsUser::class); - $metadata->addProperty($association); + $cm->addProperty($association); - $association = $metadata->getProperty('author'); + $association = $cm->getProperty('author'); self::assertEquals('doctrineglobal_article_cmsuser', $association->getJoinTable()->getName()); } @@ -720,7 +702,6 @@ public function testJoinTableMappingDefaults() public function testMapIdentifierAssociation() { $cm = new ClassMetadata(DDC117ArticleDetails::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $association = new Mapping\OneToOneAssociationMetadata('article'); @@ -738,7 +719,6 @@ public function testMapIdentifierAssociation() public function testOrphanRemovalIdentifierAssociation() { $cm = new ClassMetadata(DDC117ArticleDetails::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $this->expectException(MappingException::class); $this->expectExceptionMessage('The orphan removal option is not allowed on an association that'); @@ -758,7 +738,6 @@ public function testOrphanRemovalIdentifierAssociation() public function testInverseIdentifierAssociation() { $cm = new ClassMetadata(DDC117ArticleDetails::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $this->expectException(MappingException::class); $this->expectExceptionMessage('An inverse association is not allowed to be identifier in'); @@ -778,7 +757,6 @@ public function testInverseIdentifierAssociation() public function testIdentifierAssociationManyToMany() { $cm = new ClassMetadata(DDC117ArticleDetails::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $this->expectException(MappingException::class); $this->expectExceptionMessage('Many-to-many or one-to-many associations are not allowed to be identifier in'); @@ -799,20 +777,18 @@ public function testEmptyFieldNameThrowsException() $this->expectException(MappingException::class); $this->expectExceptionMessage("The field or association mapping misses the 'fieldName' attribute in entity '" . CMS\CmsUser::class . "'."); - $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $metadata->initializeReflection(new RuntimeReflectionService()); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); $fieldMetadata = new Mapping\FieldMetadata(''); $fieldMetadata->setType(Type::getType('string')); - $metadata->addProperty($fieldMetadata); + $cm->addProperty($fieldMetadata); } public function testRetrievalOfNamedQueries() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); self::assertEquals(0, count($cm->getNamedQueries())); @@ -827,8 +803,6 @@ public function testRetrievalOfNamedQueries() public function testRetrievalOfResultSetMappings() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); - self::assertEquals(0, count($cm->getSqlResultSetMappings())); @@ -849,8 +823,6 @@ public function testRetrievalOfResultSetMappings() public function testExistanceOfNamedQuery() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); - $cm->addNamedQuery('all', 'SELECT u FROM __CLASS__ u'); @@ -864,7 +836,6 @@ public function testExistanceOfNamedQuery() public function testRetrieveOfNamedNativeQuery() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $cm->addNamedNativeQuery( 'find-all', @@ -903,7 +874,6 @@ public function testRetrieveOfNamedNativeQuery() public function testRetrieveOfSqlResultSetMapping() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $cm->addSqlResultSetMapping( [ @@ -959,7 +929,6 @@ public function testRetrieveOfSqlResultSetMapping() public function testExistanceOfSqlResultSetMapping() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $cm->addSqlResultSetMapping( [ @@ -982,7 +951,6 @@ public function testExistanceOfSqlResultSetMapping() public function testExistanceOfNamedNativeQuery() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $cm->addNamedNativeQuery( 'find-all', @@ -999,7 +967,6 @@ public function testExistanceOfNamedNativeQuery() public function testRetrieveOfNamedQuery() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $cm->addNamedQuery('userById', 'SELECT u FROM __CLASS__ u WHERE u.id = ?1'); @@ -1017,7 +984,6 @@ public function testRetrieveOfNamedQuery() public function testRetrievalOfNamedNativeQueries() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); self::assertEquals(0, count($cm->getNamedNativeQueries())); @@ -1039,7 +1005,6 @@ public function testSerializeEntityListeners() { $metadata = new ClassMetadata(CompanyContract::class, $this->metadataBuildingContext); - $metadata->initializeReflection(new RuntimeReflectionService()); $metadata->addEntityListener(Events::prePersist, CompanyContractListener::class, 'prePersistHandler'); $metadata->addEntityListener(Events::postPersist, CompanyContractListener::class, 'postPersistHandler'); @@ -1056,7 +1021,6 @@ public function testSerializeEntityListeners() public function testNamingCollisionNamedQueryShouldThrowException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $cm->addNamedQuery('userById', 'SELECT u FROM __CLASS__ u WHERE u.id = ?1'); $cm->addNamedQuery('userById', 'SELECT u FROM __CLASS__ u WHERE u.id = ?1'); @@ -1071,7 +1035,6 @@ public function testNamingCollisionNamedQueryShouldThrowException() public function testNamingCollisionNamedNativeQueryShouldThrowException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $cm->addNamedNativeQuery( 'find-all', @@ -1099,7 +1062,6 @@ public function testNamingCollisionNamedNativeQueryShouldThrowException() public function testNamingCollisionSqlResultSetMappingShouldThrowException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $cm->addSqlResultSetMapping( [ @@ -1129,9 +1091,7 @@ public function testNamingCollisionSqlResultSetMappingShouldThrowException() */ public function testClassCaseSensitivity() { - $user = new CMS\CmsUser(); $cm = new ClassMetadata(strtoupper(CMS\CmsUser::class), $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); self::assertEquals(CMS\CmsUser::class, $cm->getClassName()); } @@ -1142,7 +1102,7 @@ public function testClassCaseSensitivity() public function testLifecycleCallbackNotFound() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); + $cm->addLifecycleCallback('notfound', 'postLoad'); $this->expectException(MappingException::class); @@ -1157,7 +1117,6 @@ public function testLifecycleCallbackNotFound() public function testTargetEntityNotFound() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $association = new Mapping\ManyToOneAssociationMetadata('address'); @@ -1180,7 +1139,6 @@ public function testTargetEntityNotFound() public function testNameIsMandatoryForEntityNameSqlResultSetMappingException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $cm->addSqlResultSetMapping( [ @@ -1205,16 +1163,13 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategy() $this->metadataBuildingContext = new Mapping\ClassMetadataBuildingContext( $this->createMock(Mapping\ClassMetadataFactory::class), + new RuntimeReflectionService(), $namingStrategy ); - $addressMetadata = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); - $articleMetadata = new ClassMetadata(DoctrineGlobal_Article::class, $this->metadataBuildingContext); - $routingMetadata = new ClassMetadata(RoutingLeg::class, $this->metadataBuildingContext); - - $addressMetadata->initializeReflection(new RuntimeReflectionService()); - $articleMetadata->initializeReflection(new RuntimeReflectionService()); - $routingMetadata->initializeReflection(new RuntimeReflectionService()); + $addressMetadata = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); + $articleMetadata = new ClassMetadata(DoctrineGlobal_Article::class, $this->metadataBuildingContext); + $routingMetadata = new ClassMetadata(RoutingLeg::class, $this->metadataBuildingContext); $association = new Mapping\ManyToManyAssociationMetadata('user'); @@ -1243,13 +1198,12 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategyProperty $this->metadataBuildingContext = new Mapping\ClassMetadataBuildingContext( $this->createMock(Mapping\ClassMetadataFactory::class), + new RuntimeReflectionService(), $namingStrategy ); $metadata = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); - $metadata->initializeReflection(new RuntimeReflectionService()); - $fieldMetadata = new Mapping\FieldMetadata('country'); $fieldMetadata->setType(Type::getType('string')); @@ -1279,7 +1233,6 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategyProperty public function testInvalidCascade() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $association = new Mapping\ManyToOneAssociationMetadata('address'); @@ -1297,7 +1250,6 @@ public function testInvalidCascade() public function testInvalidPropertyAssociationOverrideNameException() { $cm = new ClassMetadata(DDC964Admin::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $association = new Mapping\ManyToOneAssociationMetadata('address'); @@ -1316,7 +1268,6 @@ public function testInvalidPropertyAssociationOverrideNameException() public function testInvalidPropertyAttributeOverrideNameException() { $metadata = new ClassMetadata(DDC964Guest::class, $this->metadataBuildingContext); - $metadata->initializeReflection(new RuntimeReflectionService()); $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); @@ -1338,7 +1289,6 @@ public function testInvalidPropertyAttributeOverrideNameException() public function testInvalidEntityListenerClassException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $cm->addEntityListener(Events::postLoad, '\InvalidClassName', 'postLoadHandler'); } @@ -1352,7 +1302,6 @@ public function testInvalidEntityListenerClassException() public function testInvalidEntityListenerMethodException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $cm->addEntityListener(Events::postLoad, 'Doctrine\Tests\Models\Company\CompanyContractListener', 'invalidMethod'); } @@ -1360,7 +1309,6 @@ public function testInvalidEntityListenerMethodException() public function testManyToManySelfReferencingNamingStrategyDefaults() { $cm = new ClassMetadata(CustomTypeParent::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $association = new Mapping\ManyToManyAssociationMetadata('friendsWithMe'); @@ -1403,7 +1351,6 @@ public function testManyToManySelfReferencingNamingStrategyDefaults() public function testQuotedSequenceName() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); $id = new Mapping\FieldMetadata('id'); $id->setValueGenerator(new Mapping\ValueGeneratorMetadata( diff --git a/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php index 79ae94740a3..29be58ec039 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php @@ -50,3 +50,5 @@ public function testFailingSecondLevelCacheAssociation() $mappingDriver->loadMetadataForClass(Mapping\PHPSLC::class, $class, $this->metadataBuildingContext); } } + +class PHPSLC {} diff --git a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php index f4bd8a0251a..ce339497d89 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php @@ -28,7 +28,7 @@ public function testClassTableInheritanceDiscriminatorMap() $mappingDriver = $this->loadDriver(); $class = new ClassMetadata(CTI::class, $this->metadataBuildingContext); - $class->initializeReflection(new RuntimeReflectionService()); + $mappingDriver->loadMetadataForClass(CTI::class, $class, $this->metadataBuildingContext); $expectedMap = [ diff --git a/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php b/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php index b4f211714da..f6c5d4af71c 100644 --- a/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Proxy/ProxyFactoryTest.php @@ -62,7 +62,8 @@ protected function setUp() parent::setUp(); $this->metadataBuildingContext = new ClassMetadataBuildingContext( - $this->createMock(ClassMetadataFactory::class) + $this->createMock(ClassMetadataFactory::class), + new RuntimeReflectionService() ); $this->connectionMock = new ConnectionMock([], new DriverMock()); $this->emMock = EntityManagerMock::create($this->connectionMock); @@ -115,7 +116,6 @@ public function testReferenceProxyDelegatesLoadingToThePersister() public function testSkipAbstractClassesOnGeneration() { $cm = new ClassMetadata(AbstractClass::class, $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); self::assertNotNull($cm->getReflectionClass()); diff --git a/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php b/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php index e3b48ea3fb9..3fcf4f19657 100644 --- a/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Repository/DefaultRepositoryFactoryTest.php @@ -9,6 +9,7 @@ use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataBuildingContext; use Doctrine\ORM\Mapping\ClassMetadataFactory; +use Doctrine\ORM\Reflection\ReflectionService; use Doctrine\ORM\Repository\DefaultRepositoryFactory; use Doctrine\Tests\DoctrineTestCase; use Doctrine\Tests\Models\DDC753\DDC753DefaultRepository; @@ -47,7 +48,8 @@ class DefaultRepositoryFactoryTest extends DoctrineTestCase protected function setUp() { $this->metadataBuildingContext = new ClassMetadataBuildingContext( - $this->createMock(ClassMetadataFactory::class) + $this->createMock(ClassMetadataFactory::class), + $this->createMock(ReflectionService::class) ); $this->configuration = $this->createMock(Configuration::class); $this->entityManager = $this->createEntityManager(); diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 1e8ee317e27..463312171d5 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -12,10 +12,12 @@ use Doctrine\ORM\Mapping\Driver\AnnotationDriver; use Doctrine\ORM\Mapping; use Doctrine\ORM\Reflection\RuntimeReflectionService; +use Doctrine\ORM\Reflection\StaticReflectionService; use Doctrine\ORM\Tools\EntityGenerator; use Doctrine\Tests\Models\DDC2372\DDC2372Admin; use Doctrine\Tests\Models\DDC2372\DDC2372User; use Doctrine\Tests\OrmTestCase; +use SebastianBergmann\Environment\Runtime; class EntityGeneratorTest extends OrmTestCase { @@ -29,13 +31,25 @@ class EntityGeneratorTest extends OrmTestCase /** * @var Mapping\ClassMetadataBuildingContext */ - private $metadataBuildingContext; + private $staticMetadataBuildingContext; + + /** + * @var Mapping\ClassMetadataBuildingContext + */ + private $runtimeMetadataBuildingContext; public function setUp() { - $this->metadataBuildingContext = new Mapping\ClassMetadataBuildingContext( - $this->createMock(ClassMetadataFactory::class) + $this->staticMetadataBuildingContext = new Mapping\ClassMetadataBuildingContext( + $this->createMock(ClassMetadataFactory::class), + new StaticReflectionService() ); + + $this->runtimeMetadataBuildingContext = new Mapping\ClassMetadataBuildingContext( + $this->createMock(ClassMetadataFactory::class), + new RuntimeReflectionService() + ); + $this->namespace = uniqid("doctrine_", false); $this->tmpDir = sys_get_temp_dir(); @@ -71,7 +85,7 @@ public function tearDown() */ public function generateBookEntityFixture(array $embeddedClasses = []) { - $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorBook', $this->metadataBuildingContext); + $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorBook', $this->staticMetadataBuildingContext); $metadata->setCustomRepositoryClassName($this->namespace . '\EntityGeneratorBookRepository'); @@ -192,7 +206,7 @@ public function generateBookEntityFixture(array $embeddedClasses = []) private function generateEntityTypeFixture(array $field) { - $metadata = new ClassMetadata($this->namespace . '\EntityType', $this->metadataBuildingContext); + $metadata = new ClassMetadata($this->namespace . '\EntityType', $this->staticMetadataBuildingContext); $tableMetadata = new Mapping\TableMetadata(); $tableMetadata->setName('entity_type'); @@ -225,7 +239,7 @@ private function generateEntityTypeFixture(array $field) */ private function generateIsbnEmbeddableFixture(array $embeddedClasses = [], $columnPrefix = null) { - $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorIsbn', $this->metadataBuildingContext); + $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorIsbn', $this->staticMetadataBuildingContext); $metadata->isEmbeddedClass = true; $fieldMetadata = new Mapping\FieldMetadata('prefix'); @@ -283,7 +297,7 @@ private function generateIsbnEmbeddableFixture(array $embeddedClasses = [], $col */ private function generateTestEmbeddableFixture() { - $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorTestEmbeddable', $this->metadataBuildingContext); + $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorTestEmbeddable', $this->staticMetadataBuildingContext); $metadata->isEmbeddedClass = true; @@ -559,19 +573,14 @@ public function testLifecycleCallbacks() public function testLoadMetadata() { - $reflectionService = new RuntimeReflectionService(); - $embeddedMetadata = $this->generateIsbnEmbeddableFixture(); $metadata = $this->generateBookEntityFixture(['isbn' => $embeddedMetadata]); $book = $this->newInstance($metadata); - $metadata->initializeReflection($reflectionService); - - $cm = new ClassMetadata($metadata->getClassName(), $this->metadataBuildingContext); - $cm->initializeReflection($reflectionService); + $cm = new ClassMetadata($metadata->getClassName(), $this->runtimeMetadataBuildingContext); $driver = $this->createAnnotationDriver(); - $driver->loadMetadataForClass($cm->getClassName(), $cm, $this->metadataBuildingContext); + $driver->loadMetadataForClass($cm->getClassName(), $cm, $this->runtimeMetadataBuildingContext); self::assertEquals($cm->getTableName(), $metadata->getTableName()); self::assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); @@ -584,8 +593,7 @@ public function testLoadMetadata() // $isbn = $this->newInstance($embeddedMetadata); // -// $cm = new ClassMetadata($embeddedMetadata->getClassName()); -// $cm->initializeReflection($reflectionService); +// $cm = new ClassMetadata($embeddedMetadata->getClassName(), $this->runtimeMetadataBuildingContext); // // $driver->loadMetadataForClass($cm->getClassName(), $cm); // @@ -603,10 +611,9 @@ public function testLoadPrefixedMetadata() $book = $this->newInstance($metadata); - $cm = new ClassMetadata($metadata->getClassName(), $this->metadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); + $cm = new ClassMetadata($metadata->getClassName(), $this->runtimeMetadataBuildingContext); - $driver->loadMetadataForClass($cm->getClassName(), $cm, $this->metadataBuildingContext); + $driver->loadMetadataForClass($cm->getClassName(), $cm, $this->runtimeMetadataBuildingContext); self::assertEquals($cm->getTableName(), $metadata->getTableName()); self::assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); @@ -615,8 +622,7 @@ public function testLoadPrefixedMetadata() // $isbn = $this->newInstance($embeddedMetadata); // -// $cm = new ClassMetadata($embeddedMetadata->getClassName()); -// $cm->initializeReflection($reflectionService); +// $cm = new ClassMetadata($embeddedMetadata->getClassName(), $this->runtimeMetadataBuildingContext); // // $driver->loadMetadataForClass($cm->getClassName(), $cm); // @@ -629,7 +635,7 @@ public function testLoadPrefixedMetadata() */ public function testMappedSuperclassAnnotationGeneration() { - $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorBook', $this->metadataBuildingContext); + $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorBook', $this->staticMetadataBuildingContext); $metadata->isMappedSuperclass = true; @@ -638,10 +644,9 @@ public function testMappedSuperclassAnnotationGeneration() $this->newInstance($metadata); // force instantiation (causes autoloading to kick in) $driver = new AnnotationDriver(new AnnotationReader(), []); - $cm = new ClassMetadata($metadata->getClassName(), $this->metadataBuildingContext); + $cm = new ClassMetadata($metadata->getClassName(), $this->runtimeMetadataBuildingContext); - $cm->initializeReflection(new RuntimeReflectionService()); - $driver->loadMetadataForClass($cm->getClassName(), $cm, $this->metadataBuildingContext); + $driver->loadMetadataForClass($cm->getClassName(), $cm, $this->runtimeMetadataBuildingContext); self::assertTrue($cm->isMappedSuperclass); } @@ -667,7 +672,7 @@ public function testParseTokensInEntityFile($php, $classes) */ public function testGenerateEntityWithSequenceGenerator() { - $metadata = new ClassMetadata($this->namespace . '\DDC1784Entity', $this->metadataBuildingContext); + $metadata = new ClassMetadata($this->namespace . '\DDC1784Entity', $this->staticMetadataBuildingContext); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); @@ -705,7 +710,7 @@ public function testGenerateEntityWithSequenceGenerator() */ public function testGenerateEntityWithMultipleInverseJoinColumns() { - $metadata = new ClassMetadata($this->namespace . '\DDC2079Entity', $this->metadataBuildingContext); + $metadata = new ClassMetadata($this->namespace . '\DDC2079Entity', $this->staticMetadataBuildingContext); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php index 0836e0fd3c3..e7fbd03d1f5 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php @@ -7,6 +7,7 @@ use Doctrine\DBAL\Types\Type; use Doctrine\ORM\Mapping; use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Reflection\ReflectionService; use Doctrine\ORM\Tools\Export\Driver\XmlExporter; /** @@ -48,7 +49,8 @@ public function testFieldsAreProperlySerialized() public function testSequenceGenerator() { $metadataBuildingContext = new Mapping\ClassMetadataBuildingContext( - $this->createMock(Mapping\ClassMetadataFactory::class) + $this->createMock(Mapping\ClassMetadataFactory::class), + $this->createMock(ReflectionService::class) ); $exporter = new XmlExporter(); $metadata = new ClassMetadata('entityTest', $metadataBuildingContext); @@ -93,7 +95,8 @@ public function testSequenceGenerator() public function testFieldOptionsExport() { $metadataBuildingContext = new Mapping\ClassMetadataBuildingContext( - $this->createMock(Mapping\ClassMetadataFactory::class) + $this->createMock(Mapping\ClassMetadataFactory::class), + $this->createMock(ReflectionService::class) ); $exporter = new XmlExporter(); $metadata = new ClassMetadata('entityTest', $metadataBuildingContext); diff --git a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php index a9eadf8ef55..5b045f74747 100644 --- a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php +++ b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php @@ -73,7 +73,8 @@ protected function setUp() parent::setUp(); $this->metadataBuildingContext = new ClassMetadataBuildingContext( - $this->createMock(ClassMetadataFactory::class) + $this->createMock(ClassMetadataFactory::class), + new RuntimeReflectionService() ); $this->connectionMock = new ConnectionMock([], new DriverMock()); $this->eventManager = $this->getMockBuilder(EventManager::class)->getMock(); From cec19ecdaa6a5b76bc5a093e0cc4852bcf51eeb9 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Wed, 9 Aug 2017 23:59:41 -0400 Subject: [PATCH 202/275] More simplifications in ClassMetadataFactory. --- .../Mapping/AbstractClassMetadataFactory.php | 51 +-- .../ORM/Mapping/ClassMetadataFactory.php | 11 +- .../ORM/Mapping/Driver/AnnotationDriver.php | 417 ++++++++++++------ lib/Doctrine/ORM/Query/SqlWalker.php | 4 - 4 files changed, 303 insertions(+), 180 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php index 68cd0ab4106..fa69c724b8e 100644 --- a/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/AbstractClassMetadataFactory.php @@ -182,14 +182,7 @@ public function getMetadataFor($className) : ClassMetadata return $this->loadedMetadata[$className]; } - // Check for namespace alias - if (strpos($className, ':') !== false) { - [$namespaceAlias, $simpleClassName] = explode(':', $className, 2); - - $realClassName = $this->getFqcnFromAlias($namespaceAlias, $simpleClassName); - } else { - $realClassName = ClassUtils::getRealClass($className); - } + $realClassName = $this->normalizeClassName($className); if (isset($this->loadedMetadata[$realClassName])) { // We do not have the alias name in the map, include it @@ -206,7 +199,7 @@ public function getMetadataFor($className) : ClassMetadata if ($cached instanceof ClassMetadata) { $this->loadedMetadata[$realClassName] = $cached; - $this->wakeupReflection($cached, $this->getReflectionService()); + $cached->wakeupReflection($metadataBuildingContext->getReflectionService()); } else { foreach ($this->loadMetadata($realClassName, $metadataBuildingContext) as $loadedClass) { $loadedClassName = $loadedClass->getClassName(); @@ -265,8 +258,7 @@ protected function loadMetadata(string $name, ClassMetadataBuildingContext $meta $parentClasses[] = $name; // Move down the hierarchy of parent classes, starting from the topmost class - $parent = null; - $reflService = $this->getReflectionService(); + $parent = null; foreach ($parentClasses as $className) { if (isset($this->loadedMetadata[$className])) { @@ -290,20 +282,13 @@ protected function loadMetadata(string $name, ClassMetadataBuildingContext $meta /** * {@inheritDoc} */ - public function isTransient($class) : bool + public function isTransient($className) : bool { if ( ! $this->initialized) { $this->initialize(); } - // Check for namespace alias - if (strpos($class, ':') !== false) { - [$namespaceAlias, $simpleClassName] = explode(':', $class, 2); - - $class = $this->getFqcnFromAlias($namespaceAlias, $simpleClassName); - } - - return $this->getDriver()->isTransient($class); + return $this->getDriver()->isTransient($this->normalizeClassName($className)); } /** @@ -347,6 +332,22 @@ protected function onNotFoundMetadata( return null; } + /** + * @param string $className + * + * @return string + */ + private function normalizeClassName(string $className) : string + { + if (strpos($className, ':') !== false) { + [$namespaceAlias, $simpleClassName] = explode(':', $className, 2); + + return $this->getFqcnFromAlias($namespaceAlias, $simpleClassName); + } + + return ClassUtils::getRealClass($className); + } + /** * Lazy initialization of this stuff, especially the metadata driver, * since these are not needed at all when a metadata cache is active. @@ -372,16 +373,6 @@ abstract protected function getFqcnFromAlias($namespaceAlias, $simpleClassName) */ abstract protected function getDriver() : Driver\MappingDriver; - /** - * Wakes up reflection after ClassMetadata gets unserialized from cache. - * - * @param ClassMetadata $class - * @param ReflectionService $reflService - * - * @return void - */ - abstract protected function wakeupReflection(ClassMetadata $class, ReflectionService $reflService) : void; - /** * Checks whether the class metadata is an entity. * diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 0a5f8167512..6d383df032e 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -10,7 +10,6 @@ use Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs; use Doctrine\ORM\Events; use Doctrine\ORM\ORMException; -use Doctrine\ORM\Reflection\ReflectionService; use Doctrine\ORM\Sequencing; use Doctrine\ORM\Sequencing\Planning\ColumnValueGeneratorExecutor; use Doctrine\ORM\Sequencing\Planning\CompositeValueGenerationPlan; @@ -136,7 +135,7 @@ protected function doLoadMetadata( $classMetadata->setLifecycleCallbacks($parent->lifecycleCallbacks); $classMetadata->setChangeTrackingPolicy($parent->changeTrackingPolicy); - if ($parent->isMappedSuperclass && ! $classMetadata->getCustomRepositoryClassName()) { + if ($parent->isMappedSuperclass) { $classMetadata->setCustomRepositoryClassName($parent->getCustomRepositoryClassName()); } } @@ -619,14 +618,6 @@ private function completeFieldIdentifierGeneratorMapping(FieldMetadata $field) } } - /** - * {@inheritDoc} - */ - protected function wakeupReflection(ClassMetadata $class, ReflectionService $reflService) : void - { - $class->wakeupReflection($reflService); - } - /** * {@inheritDoc} */ diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 64a2c414267..fdb1b01adfb 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -250,71 +250,29 @@ public function loadMetadataForClass( string $className, Mapping\ClassMetadata $metadata, Mapping\ClassMetadataBuildingContext $metadataBuildingContext - ) + ) : Mapping\ClassMetadata { - $reflClass = $metadata->getReflectionClass(); + $reflectionClass = $metadata->getReflectionClass(); - if (! $reflClass) { + if (! $reflectionClass) { // this happens when running annotation driver in combination with // static reflection services. This is not the nicest fix - $reflClass = new \ReflectionClass($metadata->getClassName()); + $reflectionClass = new \ReflectionClass($metadata->getClassName()); } - $classAnnotations = $this->reader->getClassAnnotations($reflClass); - - foreach ($classAnnotations as $key => $annot) { - if ( ! is_numeric($key)) { - continue; - } - - $classAnnotations[get_class($annot)] = $annot; - } - - // Evaluate Entity annotation - switch (true) { - case isset($classAnnotations[Annotation\Entity::class]): - $entityAnnot = $classAnnotations[Annotation\Entity::class]; - - if ($entityAnnot->repositoryClass !== null) { - $metadata->setCustomRepositoryClassName( - $metadata->fullyQualifiedClassName($entityAnnot->repositoryClass) - ); - } - - if ($entityAnnot->readOnly) { - $metadata->asReadOnly(); - } - - break; - - case isset($classAnnotations[Annotation\MappedSuperclass::class]): - $mappedSuperclassAnnot = $classAnnotations[Annotation\MappedSuperclass::class]; - - if ($mappedSuperclassAnnot->repositoryClass !== null) { - $metadata->setCustomRepositoryClassName( - $metadata->fullyQualifiedClassName($mappedSuperclassAnnot->repositoryClass) - ); - } - - $metadata->isMappedSuperclass = true; - $metadata->isEmbeddedClass = false; - break; - - case isset($classAnnotations[Annotation\Embeddable::class]): - $metadata->isEmbeddedClass = true; - $metadata->isMappedSuperclass = false; - break; - - default: - throw Mapping\MappingException::classIsNotAValidEntityOrMappedSuperClass($className); - } + $classAnnotations = $this->getClassAnnotations($reflectionClass); + $classMetadata = $this->convertClassAnnotationsToClassMetadata( + $classAnnotations, + $reflectionClass, + $metadata + ); // Evaluate Table annotation if (isset($classAnnotations[Annotation\Table::class])) { $tableAnnot = $classAnnotations[Annotation\Table::class]; $table = $this->convertTableAnnotationToTableMetadata($tableAnnot); - $metadata->setTable($table); + $classMetadata->setTable($table); } // Evaluate @Cache annotation @@ -322,7 +280,7 @@ public function loadMetadataForClass( $cacheAnnot = $classAnnotations[Annotation\Cache::class]; $cache = $this->convertCacheAnnotationToCacheMetadata($cacheAnnot, $metadata); - $metadata->setCache($cache); + $classMetadata->setCache($cache); } // Evaluate NamedNativeQueries annotation @@ -330,7 +288,7 @@ public function loadMetadataForClass( $namedNativeQueriesAnnot = $classAnnotations[Annotation\NamedNativeQueries::class]; foreach ($namedNativeQueriesAnnot->value as $namedNativeQuery) { - $metadata->addNamedNativeQuery( + $classMetadata->addNamedNativeQuery( $namedNativeQuery->name, $namedNativeQuery->query, [ @@ -348,7 +306,7 @@ public function loadMetadataForClass( foreach ($sqlResultSetMappingsAnnot->value as $resultSetMapping) { $sqlResultSetMapping = $this->convertSqlResultSetMapping($resultSetMapping); - $metadata->addSqlResultSetMapping($sqlResultSetMapping); + $classMetadata->addSqlResultSetMapping($sqlResultSetMapping); } } @@ -365,7 +323,7 @@ public function loadMetadataForClass( throw new \UnexpectedValueException("@NamedQueries should contain an array of @NamedQuery annotations."); } - $metadata->addNamedQuery($namedQuery->name, $namedQuery->query); + $classMetadata->addNamedQuery($namedQuery->name, $namedQuery->query); } } @@ -373,14 +331,14 @@ public function loadMetadataForClass( if (isset($classAnnotations[Annotation\InheritanceType::class])) { $inheritanceTypeAnnot = $classAnnotations[Annotation\InheritanceType::class]; - $metadata->setInheritanceType( + $classMetadata->setInheritanceType( constant(sprintf('%s::%s', Mapping\InheritanceType::class, $inheritanceTypeAnnot->value)) ); - if ($metadata->inheritanceType !== Mapping\InheritanceType::NONE) { + if ($classMetadata->inheritanceType !== Mapping\InheritanceType::NONE) { $discriminatorColumn = new Mapping\DiscriminatorColumnMetadata(); - $discriminatorColumn->setTableName($metadata->getTableName()); + $discriminatorColumn->setTableName($classMetadata->getTableName()); $discriminatorColumn->setColumnName('dtype'); $discriminatorColumn->setType(Type::getType('string')); $discriminatorColumn->setLength(255); @@ -405,19 +363,19 @@ public function loadMetadataForClass( } } - $metadata->setDiscriminatorColumn($discriminatorColumn); + $classMetadata->setDiscriminatorColumn($discriminatorColumn); // Evaluate DiscriminatorMap annotation if (isset($classAnnotations[Annotation\DiscriminatorMap::class])) { $discriminatorMapAnnotation = $classAnnotations[Annotation\DiscriminatorMap::class]; $discriminatorMap = array_map( - function ($className) use ($metadata) { - return $metadata->fullyQualifiedClassName($className); + function ($className) use ($classMetadata) { + return $classMetadata->fullyQualifiedClassName($className); }, $discriminatorMapAnnotation->value ); - $metadata->setDiscriminatorMap($discriminatorMap); + $classMetadata->setDiscriminatorMap($discriminatorMap); } } } @@ -426,7 +384,7 @@ function ($className) use ($metadata) { if (isset($classAnnotations[Annotation\ChangeTrackingPolicy::class])) { $changeTrackingAnnot = $classAnnotations[Annotation\ChangeTrackingPolicy::class]; - $metadata->setChangeTrackingPolicy( + $classMetadata->setChangeTrackingPolicy( constant(sprintf('%s::%s', Mapping\ChangeTrackingPolicy::class, $changeTrackingAnnot->value)) ); } @@ -442,7 +400,7 @@ function ($className) use ($metadata) { if (! class_exists($listenerClassName)) { throw Mapping\MappingException::entityListenerClassNotFound( $listenerClassName, - $reflClass->getName() + $classMetadata->getClassName() ); } @@ -451,7 +409,7 @@ function ($className) use ($metadata) { /* @var $method \ReflectionMethod */ foreach ($listenerClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { foreach ($this->getMethodCallbacks($method) as $callback) { - $metadata->addEntityListener($callback, $listenerClassName, $method->getName()); + $classMetadata->addEntityListener($callback, $listenerClassName, $method->getName()); } } } @@ -460,29 +418,21 @@ function ($className) use ($metadata) { // Evaluate @HasLifecycleCallbacks annotation if (isset($classAnnotations[Annotation\HasLifecycleCallbacks::class])) { /* @var $method \ReflectionMethod */ - foreach ($reflClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { + foreach ($reflectionClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { foreach ($this->getMethodCallbacks($method) as $callback) { - $metadata->addLifecycleCallback($method->getName(), $callback); + $classMetadata->addLifecycleCallback($method->getName(), $callback); } } } // Evaluate annotations on properties/fields /* @var $reflProperty \ReflectionProperty */ - foreach ($reflClass->getProperties() as $reflProperty) { - if ($reflProperty->getDeclaringClass()->getName() !== $reflClass->getName()) { + foreach ($reflectionClass->getProperties() as $reflProperty) { + if ($reflProperty->getDeclaringClass()->getName() !== $reflectionClass->getName()) { continue; } - $propertyAnnotations = $this->reader->getPropertyAnnotations($reflProperty); - - foreach ($propertyAnnotations as $key => $annot) { - if (!is_numeric($key)) { - continue; - } - - $propertyAnnotations[get_class($annot)] = $annot; - } + $propertyAnnotations = $this->getPropertyAnnotations($reflProperty); // Field can only be annotated with one of: // @Column, @OneToOne, @OneToMany, @ManyToOne, @ManyToMany, @Embedded @@ -494,7 +444,7 @@ function ($className) use ($metadata) { $propertyAnnotations ); - $metadata->addProperty($fieldMetadata); + $classMetadata->addProperty($fieldMetadata); break; case isset($propertyAnnotations[Annotation\OneToOne::class]): @@ -504,7 +454,7 @@ function ($className) use ($metadata) { $metadata ); - $metadata->addProperty($assocMetadata); + $classMetadata->addProperty($assocMetadata); break; case isset($propertyAnnotations[Annotation\ManyToOne::class]): @@ -514,7 +464,7 @@ function ($className) use ($metadata) { $metadata ); - $metadata->addProperty($assocMetadata); + $classMetadata->addProperty($assocMetadata); break; case isset($propertyAnnotations[Annotation\OneToMany::class]): @@ -524,7 +474,7 @@ function ($className) use ($metadata) { $metadata ); - $metadata->addProperty($assocMetadata); + $classMetadata->addProperty($assocMetadata); break; case isset($propertyAnnotations[Annotation\ManyToMany::class]): @@ -534,7 +484,7 @@ function ($className) use ($metadata) { $metadata ); - $metadata->addProperty($assocMetadata); + $classMetadata->addProperty($assocMetadata); break; case isset($propertyAnnotations[Annotation\Embedded::class]): @@ -544,13 +494,13 @@ function ($className) use ($metadata) { $mapping['class'] = $embeddedAnnot->class; $mapping['columnPrefix'] = $embeddedAnnot->columnPrefix; - $metadata->mapEmbedded($mapping); + $classMetadata->mapEmbedded($mapping); break; default: $property = new Mapping\TransientMetadata($reflProperty->getName()); - $metadata->addProperty($property); + $classMetadata->addProperty($property); break; } } @@ -561,10 +511,10 @@ function ($className) use ($metadata) { foreach ($associationOverridesAnnot->value as $associationOverride) { $fieldName = $associationOverride->name; - $property = $metadata->getProperty($fieldName); + $property = $classMetadata->getProperty($fieldName); if (! $property) { - throw Mapping\MappingException::invalidOverrideFieldName($metadata->getClassName(), $fieldName); + throw Mapping\MappingException::invalidOverrideFieldName($classMetadata->getClassName(), $fieldName); } $existingClass = get_class($property); @@ -601,7 +551,7 @@ function ($className) use ($metadata) { ); } - $metadata->setPropertyOverride($override); + $classMetadata->setPropertyOverride($override); } } @@ -616,63 +566,125 @@ function ($className) use ($metadata) { false ); - $metadata->setPropertyOverride($fieldMetadata); + $classMetadata->setPropertyOverride($fieldMetadata); } } + + return $classMetadata; + } + + private function convertClassAnnotationsToClassMetadata( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $metadata + ) : Mapping\ClassMetadata + { + switch (true) { + case isset($classAnnotations[Annotation\Entity::class]): + return $this->convertClassAnnotationsToEntityClassMetadata( + $classAnnotations, + $reflectionClass, + $metadata + ); + + break; + + case isset($classAnnotations[Annotation\MappedSuperclass::class]): + return $this->convertClassAnnotationsToMappedSuperClassMetadata( + $classAnnotations, + $reflectionClass, + $metadata + ); + + case isset($classAnnotations[Annotation\Embeddable::class]): + return $this->convertClassAnnotationsToEmbeddableClassMetadata( + $classAnnotations, + $reflectionClass, + $metadata + ); + + default: + throw Mapping\MappingException::classIsNotAValidEntityOrMappedSuperClass($reflectionClass->getName()); + } } /** - * Attempts to resolve the fetch mode. - * - * @param string $className The class name. - * @param string $fetchMode The fetch mode. + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $metadata * - * @return integer The fetch mode as defined in ClassMetadata. + * @return Mapping\ClassMetadata * - * @throws Mapping\MappingException If the fetch mode is not valid. + * @throws Mapping\MappingException + * @throws \UnexpectedValueException */ - private function getFetchMode($className, $fetchMode) + private function convertClassAnnotationsToEntityClassMetadata( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $metadata + ) { - $fetchModeConstant = sprintf('%s::%s', Mapping\FetchMode::class, $fetchMode); + /** @var Annotation\Entity $entityAnnot */ + $entityAnnot = $classAnnotations[Annotation\Entity::class]; - if ( ! defined($fetchModeConstant)) { - throw Mapping\MappingException::invalidFetchMode($className, $fetchMode); + if ($entityAnnot->repositoryClass !== null) { + $metadata->setCustomRepositoryClassName( + $metadata->fullyQualifiedClassName($entityAnnot->repositoryClass) + ); } - return constant($fetchModeConstant); + if ($entityAnnot->readOnly) { + $metadata->asReadOnly(); + } + + return $metadata; } /** - * Parses the given method. - * - * @param \ReflectionMethod $method + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $metadata * - * @return array + * @return Mapping\ClassMetadata */ - private function getMethodCallbacks(\ReflectionMethod $method) + private function convertClassAnnotationsToMappedSuperClassMetadata( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $metadata + ) : Mapping\ClassMetadata { - $annotations = $this->getMethodAnnotations($method); - $events = [ - Events::prePersist => Annotation\PrePersist::class, - Events::postPersist => Annotation\PostPersist::class, - Events::preUpdate => Annotation\PreUpdate::class, - Events::postUpdate => Annotation\PostUpdate::class, - Events::preRemove => Annotation\PreRemove::class, - Events::postRemove => Annotation\PostRemove::class, - Events::postLoad => Annotation\PostLoad::class, - Events::preFlush => Annotation\PreFlush::class, - ]; - - // Check for callbacks - $callbacks = []; + /** @var Annotation\MappedSuperclass $mappedSuperclassAnnot */ + $mappedSuperclassAnnot = $classAnnotations[Annotation\MappedSuperclass::class]; - foreach ($events as $eventName => $annotationClassName) { - if (isset($annotations[$annotationClassName]) || $method->getName() === $eventName) { - $callbacks[] = $eventName; - } + if ($mappedSuperclassAnnot->repositoryClass !== null) { + $metadata->setCustomRepositoryClassName( + $metadata->fullyQualifiedClassName($mappedSuperclassAnnot->repositoryClass) + ); } - return $callbacks; + $metadata->isMappedSuperclass = true; + $metadata->isEmbeddedClass = false; + + return $metadata; + } + + /** + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $metadata + * + * @return Mapping\ClassMetadata + */ + private function convertClassAnnotationsToEmbeddableClassMetadata( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $metadata + ) : Mapping\ClassMetadata + { + $metadata->isMappedSuperclass = false; + $metadata->isEmbeddedClass = true; + + return $metadata; } /** @@ -793,7 +805,7 @@ private function convertReflectionPropertyToOneToOneAssociationMetadata( $targetEntity = $metadata->fullyQualifiedClassName($oneToOneAnnot->targetEntity); $assocMetadata->setTargetEntity($targetEntity); - $assocMetadata->setCascade($oneToOneAnnot->cascade); + $assocMetadata->setCascade($this->getCascade($className, $fieldName, $oneToOneAnnot->cascade)); $assocMetadata->setOrphanRemoval($oneToOneAnnot->orphanRemoval); $assocMetadata->setFetchMode($this->getFetchMode($className, $oneToOneAnnot->fetch)); @@ -857,7 +869,7 @@ private function convertReflectionPropertyToManyToOneAssociationMetadata( $targetEntity = $metadata->fullyQualifiedClassName($manyToOneAnnot->targetEntity); $assocMetadata->setTargetEntity($targetEntity); - $assocMetadata->setCascade($manyToOneAnnot->cascade); + $assocMetadata->setCascade($this->getCascade($className, $fieldName, $manyToOneAnnot->cascade)); $assocMetadata->setFetchMode($this->getFetchMode($className, $manyToOneAnnot->fetch)); if (! empty($manyToOneAnnot->inversedBy)) { @@ -916,7 +928,7 @@ private function convertReflectionPropertyToOneToManyAssociationMetadata( $targetEntity = $metadata->fullyQualifiedClassName($oneToManyAnnot->targetEntity); $assocMetadata->setTargetEntity($targetEntity); - $assocMetadata->setCascade($oneToManyAnnot->cascade); + $assocMetadata->setCascade($this->getCascade($className, $fieldName, $oneToManyAnnot->cascade)); $assocMetadata->setOrphanRemoval($oneToManyAnnot->orphanRemoval); $assocMetadata->setFetchMode($this->getFetchMode($className, $oneToManyAnnot->fetch)); @@ -964,7 +976,7 @@ private function convertReflectionPropertyToManyToManyAssociationMetadata( $targetEntity = $metadata->fullyQualifiedClassName($manyToManyAnnot->targetEntity); $assocMetadata->setTargetEntity($targetEntity); - $assocMetadata->setCascade($manyToManyAnnot->cascade); + $assocMetadata->setCascade($this->getCascade($className, $fieldName, $manyToManyAnnot->cascade)); $assocMetadata->setOrphanRemoval($manyToManyAnnot->orphanRemoval); $assocMetadata->setFetchMode($this->getFetchMode($className, $manyToManyAnnot->fetch)); @@ -1020,7 +1032,11 @@ private function convertReflectionPropertyToManyToManyAssociationMetadata( * * @return Mapping\FieldMetadata */ - private function convertColumnAnnotationToFieldMetadata(Annotation\Column $columnAnnot, string $fieldName, bool $isVersioned) + private function convertColumnAnnotationToFieldMetadata( + Annotation\Column $columnAnnot, + string $fieldName, + bool $isVersioned + ) : Mapping\FieldMetadata { $fieldMetadata = $isVersioned ? new Mapping\VersionFieldMetadata($fieldName) @@ -1060,7 +1076,9 @@ private function convertColumnAnnotationToFieldMetadata(Annotation\Column $colum * * @return Mapping\TableMetadata */ - private function convertTableAnnotationToTableMetadata(Annotation\Table $tableAnnot) + private function convertTableAnnotationToTableMetadata( + Annotation\Table $tableAnnot + ) : Mapping\TableMetadata { $table = new Mapping\TableMetadata(); @@ -1105,7 +1123,9 @@ private function convertTableAnnotationToTableMetadata(Annotation\Table $tableAn * * @return Mapping\JoinTableMetadata */ - private function convertJoinTableAnnotationToJoinTableMetadata(Annotation\JoinTable $joinTableAnnot) + private function convertJoinTableAnnotationToJoinTableMetadata( + Annotation\JoinTable $joinTableAnnot + ) : Mapping\JoinTableMetadata { $joinTable = new Mapping\JoinTableMetadata(); @@ -1139,7 +1159,9 @@ private function convertJoinTableAnnotationToJoinTableMetadata(Annotation\JoinTa * * @return Mapping\JoinColumnMetadata */ - private function convertJoinColumnAnnotationToJoinColumnMetadata(Annotation\JoinColumn $joinColumnAnnot) + private function convertJoinColumnAnnotationToJoinColumnMetadata( + Annotation\JoinColumn $joinColumnAnnot + ) : Mapping\JoinColumnMetadata { $joinColumn = new Mapping\JoinColumnMetadata(); @@ -1183,7 +1205,7 @@ private function convertCacheAnnotationToCacheMetadata( Annotation\Cache $cacheAnnot, Mapping\ClassMetadata $metadata, $fieldName = null - ) + ) : Mapping\CacheMetadata { $baseRegion = strtolower(str_replace('\\', '_', $metadata->getRootClassName())); $defaultRegion = $baseRegion . ($fieldName ? '__' . $fieldName : ''); @@ -1194,12 +1216,135 @@ private function convertCacheAnnotationToCacheMetadata( return new Mapping\CacheMetadata($usage, $region); } + /** + * Attempts to resolve the cascade modes. + * + * @param string $className The class name. + * @param string $fieldName The field name. + * @param array $originalCascades The original unprocessed field cascades. + * + * @return array The processed field cascades. + * + * @throws Mapping\MappingException If a cascade option is not valid. + */ + private function getCascade(string $className, string $fieldName, array $originalCascades) + { + $cascadeTypes = ['remove', 'persist', 'refresh', 'merge', 'detach']; + $cascades = array_map('strtolower', $originalCascades); + + if (in_array('all', $cascades)) { + $cascades = $cascadeTypes; + } + + if (count($cascades) !== count(array_intersect($cascades, $cascadeTypes))) { + $diffCascades = array_diff($cascades, array_intersect($cascades, $cascadeTypes)); + + throw Mapping\MappingException::invalidCascadeOption($diffCascades, $className, $fieldName); + } + + return $cascades; + } + + /** + * Attempts to resolve the fetch mode. + * + * @param string $className The class name. + * @param string $fetchMode The fetch mode. + * + * @return string The fetch mode as defined in ClassMetadata. + * + * @throws Mapping\MappingException If the fetch mode is not valid. + */ + private function getFetchMode($className, $fetchMode) : string + { + $fetchModeConstant = sprintf('%s::%s', Mapping\FetchMode::class, $fetchMode); + + if ( ! defined($fetchModeConstant)) { + throw Mapping\MappingException::invalidFetchMode($className, $fetchMode); + } + + return constant($fetchModeConstant); + } + + /** + * Parses the given method. + * + * @param \ReflectionMethod $method + * + * @return array + */ + private function getMethodCallbacks(\ReflectionMethod $method) : array + { + $annotations = $this->getMethodAnnotations($method); + $events = [ + Events::prePersist => Annotation\PrePersist::class, + Events::postPersist => Annotation\PostPersist::class, + Events::preUpdate => Annotation\PreUpdate::class, + Events::postUpdate => Annotation\PostUpdate::class, + Events::preRemove => Annotation\PreRemove::class, + Events::postRemove => Annotation\PostRemove::class, + Events::postLoad => Annotation\PostLoad::class, + Events::preFlush => Annotation\PreFlush::class, + ]; + + // Check for callbacks + $callbacks = []; + + foreach ($events as $eventName => $annotationClassName) { + if (isset($annotations[$annotationClassName]) || $method->getName() === $eventName) { + $callbacks[] = $eventName; + } + } + + return $callbacks; + } + + /** + * @param \ReflectionClass $reflectionClass + * + * @return array + */ + private function getClassAnnotations(\ReflectionClass $reflectionClass) : array + { + $classAnnotations = $this->reader->getClassAnnotations($reflectionClass); + + foreach ($classAnnotations as $key => $annot) { + if (! is_numeric($key)) { + continue; + } + + $classAnnotations[get_class($annot)] = $annot; + } + + return $classAnnotations; + } + + /** + * @param \ReflectionProperty $reflectionProperty + * + * @return array + */ + private function getPropertyAnnotations(\ReflectionProperty $reflectionProperty) : array + { + $propertyAnnotations = $this->reader->getPropertyAnnotations($reflectionProperty); + + foreach ($propertyAnnotations as $key => $annot) { + if (! is_numeric($key)) { + continue; + } + + $propertyAnnotations[get_class($annot)] = $annot; + } + + return $propertyAnnotations; + } + /** * @param \ReflectionMethod $reflectionMethod * * @return array */ - private function getMethodAnnotations(\ReflectionMethod $reflectionMethod) + private function getMethodAnnotations(\ReflectionMethod $reflectionMethod) : array { $methodAnnotations = $this->reader->getMethodAnnotations($reflectionMethod); diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 4b972255895..ecb7c822b13 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -660,10 +660,6 @@ public function walkPathExpression($pathExpr) $sql .= $this->walkIdentificationVariable($dqlAlias, $fieldName) . '.'; } - if ($property instanceof AssociationMetadata) { - var_dump($property); - } - $sql .= $this->platform->quoteIdentifier($property->getColumnName()); break; From 14ce66fca28abc1b145fff7854acb2216f273972 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Thu, 10 Aug 2017 10:43:00 -0400 Subject: [PATCH 203/275] Removed PHP and Static PHP mapping drivers, since they will be irrelevant with the new ClassMetadataFactory --- lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php | 60 ---- .../ORM/Mapping/Driver/StaticPHPDriver.php | 131 ------- .../ORM/Tools/Export/Driver/PhpExporter.php | 325 ------------------ .../Doctrine/Tests/Models/CMS/CmsAddress.php | 128 ------- tests/Doctrine/Tests/Models/CMS/CmsUser.php | 212 ------------ tests/Doctrine/Tests/Models/Cache/City.php | 5 - .../Tests/Models/Company/CompanyContract.php | 49 --- .../Models/Company/CompanyFixContract.php | 10 - .../Models/Company/CompanyFlexContract.php | 15 - .../Company/CompanyFlexUltraContract.php | 24 -- .../Tests/Models/Company/CompanyPerson.php | 47 --- .../DDC1476EntityWithDefaultFieldType.php | 15 - .../Models/DDC2825/ExplicitSchemaAndTable.php | 17 - .../DDC2825/SchemaAndTableInTableName.php | 17 - .../Tests/Models/DDC3579/DDC3579Admin.php | 8 - .../Tests/Models/DDC3579/DDC3579User.php | 28 -- .../Models/DDC5934/DDC5934BaseContract.php | 18 - .../Tests/Models/DDC5934/DDC5934Contract.php | 8 - .../Models/DDC869/DDC869ChequePayment.php | 11 - .../Models/DDC869/DDC869CreditCardPayment.php | 10 - .../Tests/Models/DDC869/DDC869Payment.php | 19 - .../Tests/Models/DDC889/DDC889Class.php | 11 - .../Tests/Models/DDC889/DDC889Entity.php | 3 - .../Tests/Models/DDC889/DDC889SuperClass.php | 9 - .../Tests/Models/DDC964/DDC964Admin.php | 37 -- .../Tests/Models/DDC964/DDC964Guest.php | 20 -- .../Tests/Models/DDC964/DDC964User.php | 63 ---- .../ORM/Mapping/AbstractMappingDriverTest.php | 254 -------------- .../ORM/Mapping/PHPMappingDriverTest.php | 54 --- .../Mapping/StaticPHPMappingDriverTest.php | 27 -- .../Doctrine.Tests.Models.CMS.CmsAddress.php | 135 -------- .../php/Doctrine.Tests.Models.CMS.CmsUser.php | 215 ------------ .../php/Doctrine.Tests.Models.Cache.City.php | 74 ---- ...e.Tests.Models.Company.CompanyContract.php | 54 --- ...ests.Models.Company.CompanyFixContract.php | 15 - ...sts.Models.Company.CompanyFlexContract.php | 22 -- ...odels.Company.CompanyFlexUltraContract.php | 32 -- ...ine.Tests.Models.Company.CompanyPerson.php | 51 --- ...1476.DDC1476EntityWithDefaultFieldType.php | 19 - ....Models.DDC2825.ExplicitSchemaAndTable.php | 22 -- ...dels.DDC2825.SchemaAndTableInTableName.php | 21 -- ...rine.Tests.Models.DDC3579.DDC3579Admin.php | 11 - ...trine.Tests.Models.DDC3579.DDC3579User.php | 31 -- ...sts.Models.DDC5934.DDC5934BaseContract.php | 22 -- ...e.Tests.Models.DDC5934.DDC5934Contract.php | 11 - ...ests.Models.DDC869.DDC869ChequePayment.php | 13 - ....Models.DDC869.DDC869CreditCardPayment.php | 13 - ...rine.Tests.Models.DDC869.DDC869Payment.php | 25 -- ...ctrine.Tests.Models.DDC889.DDC889Class.php | 14 - ...trine.Tests.Models.DDC889.DDC889Entity.php | 5 - ...e.Tests.Models.DDC889.DDC889SuperClass.php | 18 - ...ctrine.Tests.Models.DDC964.DDC964Admin.php | 40 --- ...ctrine.Tests.Models.DDC964.DDC964Guest.php | 24 -- ...octrine.Tests.Models.DDC964.DDC964User.php | 69 ---- .../php/Doctrine.Tests.ORM.Mapping.Animal.php | 44 --- .../Doctrine.Tests.ORM.Mapping.Comment.php | 31 -- ...ctrine.Tests.ORM.Mapping.DDC1170Entity.php | 21 -- ...octrine.Tests.ORM.Mapping.DDC807Entity.php | 22 -- .../php/Doctrine.Tests.ORM.Mapping.PHPSLC.php | 19 - .../php/Doctrine.Tests.ORM.Mapping.User.php | 155 --------- ...Models.DDC5934.DDC5934BaseContract.dcm.yml | 12 - ...sts.Models.DDC5934.DDC5934Contract.dcm.yml | 5 - .../AbstractClassMetadataExporterTest.php | 1 - .../Export/PhpClassMetadataExporterTest.php | 23 -- 64 files changed, 2924 deletions(-) delete mode 100644 lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php delete mode 100644 lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php delete mode 100644 lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/StaticPHPMappingDriverTest.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFixContract.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexContract.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexUltraContract.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579Admin.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934Contract.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869ChequePayment.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Class.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Entity.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889SuperClass.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Guest.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC5934.DDC5934Contract.dcm.yml delete mode 100644 tests/Doctrine/Tests/ORM/Tools/Export/PhpClassMetadataExporterTest.php diff --git a/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php b/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php deleted file mode 100644 index d9c6e18c19f..00000000000 --- a/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php +++ /dev/null @@ -1,60 +0,0 @@ - - * @author Guilherme Blanco - * @author Jonathan H. Wage - * @author Roman Borschel - */ -class PHPDriver extends FileDriver -{ - /** - * @var Mapping\ClassMetadata - */ - protected $metadata; - - /** - * {@inheritDoc} - */ - public function __construct($locator) - { - parent::__construct($locator, '.php'); - } - - /** - * {@inheritDoc} - */ - public function loadMetadataForClass( - string $className, - Mapping\ClassMetadata $metadata, - Mapping\ClassMetadataBuildingContext $metadataBuildingContext - ) - { - $this->metadata = $metadata; - - $this->loadMappingFile($this->locator->findMappingFile($className)); - } - - /** - * {@inheritDoc} - */ - protected function loadMappingFile($file) - { - $metadata = $this->metadata; - - include $file; - - return [$metadata->getClassName() => $metadata]; - } -} diff --git a/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php b/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php deleted file mode 100644 index 2971a70ef1b..00000000000 --- a/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php +++ /dev/null @@ -1,131 +0,0 @@ - - * @author Guilherme Blanco - * @author Jonathan H. Wage - * @author Roman Borschel - */ -class StaticPHPDriver implements MappingDriver -{ - /** - * Paths of entity directories. - * - * @var array - */ - private $paths = []; - - /** - * Map of all class names. - * - * @var array - */ - private $classNames; - - /** - * Constructor. - * - * @param array|string $paths - */ - public function __construct($paths) - { - $this->addPaths((array) $paths); - } - - /** - * Adds paths. - * - * @param array $paths - * - * @return void - */ - public function addPaths(array $paths) - { - $this->paths = array_unique(array_merge($this->paths, $paths)); - } - - /** - * {@inheritdoc} - */ - public function loadMetadataForClass( - string $className, - Mapping\ClassMetadata $metadata, - Mapping\ClassMetadataBuildingContext $metadataBuildingContext - ) - { - $className::loadMetadata($metadata, $metadataBuildingContext); - } - - /** - * {@inheritDoc} - * @todo Same code exists in AnnotationDriver, should we re-use it somehow or not worry about it? - */ - public function getAllClassNames() - { - if ($this->classNames !== null) { - return $this->classNames; - } - - if (!$this->paths) { - throw Mapping\MappingException::pathRequired(); - } - - $classes = []; - $includedFiles = []; - - foreach ($this->paths as $path) { - if (!is_dir($path)) { - throw Mapping\MappingException::fileMappingDriversRequireConfiguredDirectoryPath($path); - } - - $iterator = new \RecursiveIteratorIterator( - new \RecursiveDirectoryIterator($path), - \RecursiveIteratorIterator::LEAVES_ONLY - ); - - foreach ($iterator as $file) { - if ($file->getBasename('.php') == $file->getBasename()) { - continue; - } - - $sourceFile = realpath($file->getPathName()); - require_once $sourceFile; - $includedFiles[] = $sourceFile; - } - } - - $declared = get_declared_classes(); - - foreach ($declared as $className) { - $rc = new \ReflectionClass($className); - $sourceFile = $rc->getFileName(); - if (in_array($sourceFile, $includedFiles) && !$this->isTransient($className)) { - $classes[] = $className; - } - } - - $this->classNames = $classes; - - return $classes; - } - - /** - * {@inheritdoc} - */ - public function isTransient($className) - { - return ! method_exists($className, 'loadMetadata'); - } -} diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php deleted file mode 100644 index 2abd5b6256c..00000000000 --- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php +++ /dev/null @@ -1,325 +0,0 @@ - - */ -class PhpExporter extends AbstractExporter -{ - /** - * @var string - */ - protected $extension = '.php'; - - /** - * {@inheritdoc} - */ - public function exportClassMetadata(ClassMetadata $metadata) - { - $lines = []; - $lines[] = 'isMappedSuperclass) { - $lines[] = '$metadata->isMappedSuperclass = true;'; - } - - if ($metadata->inheritanceType) { - $lines[] = '$metadata->setInheritanceType(Mapping\InheritanceType::' . $metadata->inheritanceType . ');'; - } - - if ($metadata->getCustomRepositoryClassName()) { - $lines[] = '$metadata->setCustomRepositoryClassName("' . $metadata->getCustomRepositoryClassName() . '");'; - } - - if ($metadata->table) { - $table = $metadata->table; - - $lines[] = '$table = new Mapping\TableMetadata();'; - $lines[] = null; - - if (! empty($table->getSchema())) { - $lines[] = '$table->setSchema("' . $table->getSchema() . '");'; - } - - $lines[] = '$table->setName("' . $table->getName() . '");'; - $lines[] = '$table->setOptions(' . $this->varExport($table->getOptions()) . ');'; - - foreach ($table->getIndexes() as $index) { - $lines[] = '$table->addIndex(' . $this->varExport($index) . ');'; - } - - foreach ($table->getUniqueConstraints() as $constraint) { - $lines[] = '$table->addUniqueConstraint(' . $this->varExport($constraint) . ');'; - } - - $lines[] = null; - $lines[] = '$metadata->setTable($table);'; - } - - if ($metadata->discriminatorColumn) { - $discrColumn = $metadata->discriminatorColumn; - - $lines[] = '$discrColumn = new Mapping\DiscriminatorColumnMetadata();'; - $lines[] = null; - $lines[] = '$discrColumn->setColumnName("' . $discrColumn->getColumnName() . '");'; - $lines[] = '$discrColumn->setType(Type::getType("' . $discrColumn->getTypeName() . '"));'; - $lines[] = '$discrColumn->setTableName("' . $discrColumn->getTableName() . '");'; - - if (! empty($discrColumn->getColumnDefinition())) { - $lines[] = '$property->setColumnDefinition("' . $discrColumn->getColumnDefinition() . '");'; - } - - if (! empty($discrColumn->getLength())) { - $lines[] = '$property->setLength(' . $discrColumn->getLength() . ');'; - } - - if (! empty($discrColumn->getScale())) { - $lines[] = '$property->setScale(' . $discrColumn->getScale() . ');'; - } - - if (! empty($discrColumn->getPrecision())) { - $lines[] = '$property->setPrecision(' . $discrColumn->getPrecision() . ');'; - } - - $lines[] = '$discrColumn->setOptions(' . $this->varExport($discrColumn->getOptions()) . ');'; - $lines[] = '$discrColumn->setNullable(' . $this->varExport($discrColumn->isNullable()) . ');'; - $lines[] = '$discrColumn->setUnique(' . $this->varExport($discrColumn->isUnique()) . ');'; - $lines[] = null; - $lines[] = '$metadata->setDiscriminatorColumn($discrColumn);'; - } - - if ($metadata->discriminatorMap) { - $lines[] = '$metadata->setDiscriminatorMap(' . $this->varExport($metadata->discriminatorMap) . ');'; - } - - if ($metadata->changeTrackingPolicy) { - $lines[] = '$metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::' . $metadata->changeTrackingPolicy . ');'; - } - - if ($metadata->lifecycleCallbacks) { - foreach ($metadata->lifecycleCallbacks as $event => $callbacks) { - foreach ($callbacks as $callback) { - $lines[] = '$metadata->addLifecycleCallback("' . $callback . '", "' . $event . '");'; - } - } - } - - foreach ($metadata->getDeclaredPropertiesIterator() as $property) { - if ($property instanceof FieldMetadata) { - $this->exportFieldMetadata($metadata, $property, $lines); - } else if ($property instanceof AssociationMetadata) { - $this->exportAssociationMetadata($metadata, $property, $lines); - } - } - - return implode(PHP_EOL, $lines); - } - - private function exportFieldMetadata(ClassMetadata $metadata, FieldMetadata $property, array &$lines) - { - $lines[] = sprintf( - '$property = new Mapping\%sFieldMetadata("%s");', - ($metadata->versionProperty === $property) ? 'Version' : '', - $property->getName() - ); - - $lines[] = null; - $lines[] = '$property->setColumnName("' . $property->getColumnName() . '");'; - $lines[] = '$property->setType(Type::getType("' . $property->getTypeName() . '"));'; - $lines[] = '$property->setTableName("' . $property->getTableName() . '");'; - - if (! empty($property->getColumnDefinition())) { - $lines[] = '$property->setColumnDefinition("' . $property->getColumnDefinition() . '");'; - } - - if (! empty($property->getLength())) { - $lines[] = '$property->setLength(' . $property->getLength() . ');'; - } - - if (! empty($property->getScale())) { - $lines[] = '$property->setScale(' . $property->getScale() . ');'; - } - - if (! empty($property->getPrecision())) { - $lines[] = '$property->setPrecision(' . $property->getPrecision() . ');'; - } - - $lines[] = '$property->setOptions(' . $this->varExport($property->getOptions()) . ');'; - $lines[] = '$property->setPrimaryKey(' . $this->varExport($property->isPrimaryKey()) . ');'; - $lines[] = '$property->setNullable(' . $this->varExport($property->isNullable()) . ');'; - $lines[] = '$property->setUnique(' . $this->varExport($property->isUnique()) . ');'; - - if ($property->hasValueGenerator()) { - $lines[] = sprintf( - '$property->setValueGenerator(new Mapping\ValueGeneratorMetadata(%s, %s));', - $this->varExport($property->getValueGenerator()->getType()), - $this->varExport($property->getValueGenerator()->getDefinition()) - ); - } - - $lines[] = null; - $lines[] = '$metadata->addProperty($property);'; - } - - private function exportAssociationMetadata(ClassMetadata $metadata, AssociationMetadata $association, array &$lines) - { - $cascade = ['remove', 'persist', 'refresh', 'merge', 'detach']; - - foreach ($cascade as $key => $value) { - if ( ! in_array($value, $association->getCascade())) { - unset($cascade[$key]); - } - } - - if (count($cascade) === 5) { - $cascade = ['all']; - } - - if ($association instanceof OneToOneAssociationMetadata) { - $this->exportJoinColumns($association->getJoinColumns(), $lines, 'joinColumns'); - - $lines[] = '$association = new Mapping\OneToOneAssociationMetadata("' . $association->getName() . '");'; - $lines[] = null; - $lines[] = '$association->setJoinColumns($joinColumns);'; - } else if ($association instanceof ManyToOneAssociationMetadata) { - $this->exportJoinColumns($association->getJoinColumns(), $lines, 'joinColumns'); - - $lines[] = '$association = new Mapping\ManyToOneAssociationMetadata("' . $association->getName() . '");'; - $lines[] = null; - $lines[] = '$association->setJoinColumns($joinColumns);'; - } else if ($association instanceof OneToManyAssociationMetadata) { - $lines[] = '$association = new Mapping\OneToManyAssociationMetadata("' . $association->getName() . '");'; - $lines[] = null; - $lines[] = '$association->setOrderBy(' . $this->varExport($association->getOrderBy()) . ');'; - } else if ($association instanceof ManyToManyAssociationMetadata) { - if ($association->getJoinTable()) { - $this->exportJoinTable($association->getJoinTable(), $lines); - } - - $lines[] = '$association = new Mapping\ManyToManyAssociationMetadata("' . $association->getName() . '");'; - $lines[] = null; - - if ($association->getJoinTable()) { - $lines[] = '$association->setJoinTable($joinTable);'; - } - - if ($association->getIndexedBy()) { - $lines[] = '$association->setIndexedBy("' . $association->getIndexedBy() . '");'; - } - - $lines[] = '$association->setOrderBy(' . $this->varExport($association->getOrderBy()) . ');'; - } - - $lines[] = '$association->setTargetEntity("' . $association->getTargetEntity() . '");'; - $lines[] = '$association->setFetchMode("' . $association->getFetchMode() . '");'; - - if ($association->getMappedBy()) { - $lines[] = '$association->setMappedBy("' . $association->getMappedBy() . '");'; - } - - if ($association->getInversedBy()) { - $lines[] = '$association->setInversedBy("' . $association->getInversedBy() . '");'; - } - - $lines[] = '$association->setCascade(' . $this->varExport($cascade) . ');'; - $lines[] = '$association->setOrphanRemoval(' . $this->varExport($association->isOrphanRemoval()) . ');'; - $lines[] = '$association->setPrimaryKey(' . $this->varExport($association->isPrimaryKey()) . ');'; - $lines[] = null; - $lines[] = '$metadata->addProperty($association);'; - } - - private function exportJoinTable(JoinTableMetadata $joinTable, array &$lines) - { - $lines[] = null; - $lines[] = '$joinTable = new Mapping\JoinTableMetadata();'; - $lines[] = null; - $lines[] = '$joinTable->setName("' . $joinTable->getName() . '");'; - - if (! empty($joinTable->getSchema())) { - $lines[] = '$joinTable->setSchema("' . $joinTable->getSchema() . '");'; - } - - $lines[] = '$joinTable->setOptions(' . $this->varExport($joinTable->getOptions()) . ');'; - - $this->exportJoinColumns($joinTable->getJoinColumns(), $lines, 'joinColumns'); - - $lines[] = null; - $lines[] = 'foreach ($joinColumns as $joinColumn) {'; - $lines[] = ' $joinTable->addJoinColumn($joinColumn);'; - $lines[] = '}'; - $lines[] = null; - - $this->exportJoinColumns($joinTable->getInverseJoinColumns(), $lines, 'inverseJoinColumns'); - - $lines[] = null; - $lines[] = 'foreach ($inverseJoinColumns as $inverseJoinColumn) {'; - $lines[] = ' $joinTable->addInverseJoinColumn($inverseJoinColumn);'; - $lines[] = '}'; - } - - private function exportJoinColumns(array $joinColumns, array &$lines, $variableName) - { - $lines[] = '$' . $variableName . ' = array();'; - - foreach ($joinColumns as $joinColumn) { - /** @var JoinColumnMetadata $joinColumn */ - $lines[] = '$joinColumn = new Mapping\JoinColumnMetadata();'; - $lines[] = null; - $lines[] = '$joinColumn->setTableName("' . $joinColumn->getTableName() . '");'; - $lines[] = '$joinColumn->setColumnName("' . $joinColumn->getColumnName() . '");'; - $lines[] = '$joinColumn->setReferencedColumnName("' . $joinColumn->getReferencedColumnName() . '");'; - $lines[] = '$joinColumn->setAliasedName("' . $joinColumn->getAliasedName() . '");'; - $lines[] = '$joinColumn->setColumnDefinition("' . $joinColumn->getColumnDefinition() . '");'; - $lines[] = '$joinColumn->setOnDelete("' . $joinColumn->getOnDelete() . '");'; - $lines[] = '$joinColumn->setOptions(' . $this->varExport($joinColumn->getOptions()) . ');'; - $lines[] = '$joinColumn->setNullable("' . $joinColumn->isNullable() . '");'; - $lines[] = '$joinColumn->setUnique("' . $joinColumn->isUnique() . '");'; - $lines[] = '$joinColumn->setPrimaryKey("' . $joinColumn->isPrimaryKey() . '");'; - $lines[] = null; - $lines[] = '$' . $variableName . '[] = $joinColumn;'; - } - } - - /** - * @param mixed $var - * - * @return string - */ - protected function varExport($var) - { - $export = var_export($var, true); - $export = str_replace("\n", PHP_EOL . str_repeat(' ', 8), $export); - $export = str_replace(' ', ' ', $export); - $export = str_replace('array (', 'array(', $export); - $export = str_replace('array( ', 'array(', $export); - $export = str_replace(',)', ')', $export); - $export = str_replace(', )', ')', $export); - $export = str_replace(' ', ' ', $export); - - return $export; - } -} diff --git a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php index c1f7868d5b8..b10acd7bc7a 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php @@ -129,132 +129,4 @@ public function setUser(CmsUser $user) { $user->setAddress($this); } } - - public static function loadMetadata(Mapping\ClassMetadata $metadata) - { - $tableMetadata = new Mapping\TableMetadata(); - $tableMetadata->setName('company_person'); - - $metadata->setTable($tableMetadata); - - $fieldMetadata = new Mapping\FieldMetadata('id'); - - $fieldMetadata->setType(Type::getType('integer')); - $fieldMetadata->setPrimaryKey(true); - - $metadata->addProperty($fieldMetadata); - - $fieldMetadata = new Mapping\FieldMetadata('zip'); - - $fieldMetadata->setType(Type::getType('string')); - $fieldMetadata->setLength(50); - - $metadata->addProperty($fieldMetadata); - - $fieldMetadata = new Mapping\FieldMetadata('city'); - - $fieldMetadata->setType(Type::getType('string')); - $fieldMetadata->setLength(50); - - $metadata->addProperty($fieldMetadata); - - $joinColumns = []; - - $joinColumn = new Mapping\JoinColumnMetadata(); - - $joinColumn->setReferencedColumnName('id'); - - $joinColumns[] = $joinColumn; - - $association = new Mapping\OneToOneAssociationMetadata('user'); - - $association->setJoinColumns($joinColumns); - $association->setTargetEntity(CmsUser::class); - - $metadata->addProperty($association); - - $metadata->addNamedNativeQuery( - 'find-all', - 'SELECT id, country, city FROM cms_addresses', - [ - 'resultSetMapping' => 'mapping-find-all', - ] - ); - - $metadata->addNamedNativeQuery( - 'find-by-id', - 'SELECT * FROM cms_addresses WHERE id = ?', - [ - 'resultClass' => CmsAddress::class, - ] - ); - - $metadata->addNamedNativeQuery( - 'count', - 'SELECT COUNT(*) AS count FROM cms_addresses', - [ - 'resultSetMapping' => 'mapping-count', - ] - ); - - $metadata->addSqlResultSetMapping( - [ - 'name' => 'mapping-find-all', - 'columns' => [], - 'entities' => [ - [ - 'fields' => [ - [ - 'name' => 'id', - 'column' => 'id', - ], - [ - 'name' => 'city', - 'column' => 'city', - ], - [ - 'name' => 'country', - 'column' => 'country', - ], - ], - 'entityClass' => CmsAddress::class, - ], - ], - ] - ); - - $metadata->addSqlResultSetMapping( - [ - 'name' => 'mapping-without-fields', - 'columns' => [], - 'entities' => [ - [ - 'entityClass' => '__CLASS__', - 'fields' => [] - ] - ] - ] - ); - - $metadata->addSqlResultSetMapping( - [ - 'name' => 'mapping-count', - 'columns' => [ - ['name' => 'count'], - ] - ] - ); - - $metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, CmsAddressListener::class, 'postPersist'); - $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, CmsAddressListener::class, 'prePersist'); - - $metadata->addEntityListener(\Doctrine\ORM\Events::postUpdate, CmsAddressListener::class, 'postUpdate'); - $metadata->addEntityListener(\Doctrine\ORM\Events::preUpdate, CmsAddressListener::class, 'preUpdate'); - - $metadata->addEntityListener(\Doctrine\ORM\Events::postRemove, CmsAddressListener::class, 'postRemove'); - $metadata->addEntityListener(\Doctrine\ORM\Events::preRemove, CmsAddressListener::class, 'preRemove'); - - $metadata->addEntityListener(\Doctrine\ORM\Events::preFlush, CmsAddressListener::class, 'preFlush'); - $metadata->addEntityListener(\Doctrine\ORM\Events::postLoad, CmsAddressListener::class, 'postLoad'); - } } diff --git a/tests/Doctrine/Tests/Models/CMS/CmsUser.php b/tests/Doctrine/Tests/Models/CMS/CmsUser.php index 6115df23a85..f6c1dc1ba3f 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsUser.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsUser.php @@ -272,216 +272,4 @@ public function setEmail(CmsEmail $email = null) { } } } - - public static function loadMetadata(Mapping\ClassMetadata $metadata) - { - $tableMetadata = new Mapping\TableMetadata(); - $tableMetadata->setName('cms_users'); - - $metadata->setTable($tableMetadata); - - $metadata->addNamedNativeQuery( - 'fetchIdAndUsernameWithResultClass', - 'SELECT id, username FROM cms_users WHERE username = ?', - [ - 'resultClass' => CmsUser::class, - ] - ); - - $metadata->addNamedNativeQuery( - 'fetchAllColumns', - 'SELECT * FROM cms_users WHERE username = ?', - [ - 'resultClass' => CmsUser::class, - ] - ); - - $metadata->addNamedNativeQuery( - 'fetchJoinedAddress', - 'SELECT u.id, u.name, u.status, a.id AS a_id, a.country, a.zip, a.city FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?', - [ - 'resultSetMapping' => 'mappingJoinedAddress', - ] - ); - - $metadata->addNamedNativeQuery( - 'fetchJoinedPhonenumber', - 'SELECT id, name, status, phonenumber AS number FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ?', - [ - 'resultSetMapping' => 'mappingJoinedPhonenumber', - ] - ); - - $metadata->addNamedNativeQuery( - 'fetchUserPhonenumberCount', - 'SELECT id, name, status, COUNT(phonenumber) AS numphones FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username IN (?) GROUP BY id, name, status, username ORDER BY username', - [ - 'resultSetMapping' => 'mappingUserPhonenumberCount', - ] - ); - - $metadata->addNamedNativeQuery( - 'fetchMultipleJoinsEntityResults', - 'SELECT u.id AS u_id, u.name AS u_name, u.status AS u_status, a.id AS a_id, a.zip AS a_zip, a.country AS a_country, COUNT(p.phonenumber) AS numphones FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id INNER JOIN cms_phonenumbers p ON u.id = p.user_id GROUP BY u.id, u.name, u.status, u.username, a.id, a.zip, a.country ORDER BY u.username', - [ - 'resultSetMapping' => 'mappingMultipleJoinsEntityResults', - ] - ); - - $metadata->addSqlResultSetMapping( - [ - 'name' => 'mappingJoinedAddress', - 'columns' => [], - 'entities' => [ - [ - 'fields'=> [ - [ - 'name' => 'id', - 'column' => 'id', - ], - [ - 'name' => 'name', - 'column' => 'name', - ], - [ - 'name' => 'status', - 'column' => 'status', - ], - [ - 'name' => 'address.zip', - 'column' => 'zip', - ], - [ - 'name' => 'address.city', - 'column' => 'city', - ], - [ - 'name' => 'address.country', - 'column' => 'country', - ], - [ - 'name' => 'address.id', - 'column' => 'a_id', - ], - ], - 'entityClass' => '__CLASS__', - 'discriminatorColumn' => null - ], - ], - ] - ); - - $metadata->addSqlResultSetMapping( - [ - 'name' => 'mappingJoinedPhonenumber', - 'columns' => [], - 'entities' => [ - [ - 'fields'=> [ - [ - 'name' => 'id', - 'column' => 'id', - ], - [ - 'name' => 'name', - 'column' => 'name', - ], - [ - 'name' => 'status', - 'column' => 'status', - ], - [ - 'name' => 'phonenumbers.phonenumber', - 'column' => 'number', - ], - ], - 'entityClass' => CmsUser::class, - 'discriminatorColumn' => null - ], - ], - ] - ); - - $metadata->addSqlResultSetMapping( - [ - 'name' => 'mappingUserPhonenumberCount', - 'columns' => [], - 'entities' => [ - [ - 'fields' => [ - [ - 'name' => 'id', - 'column' => 'id', - ], - [ - 'name' => 'name', - 'column' => 'name', - ], - [ - 'name' => 'status', - 'column' => 'status', - ] - ], - 'entityClass' => CmsUser::class, - 'discriminatorColumn' => null - ] - ], - 'columns' => [ - [ - 'name' => 'numphones', - ] - ] - ] - ); - - $metadata->addSqlResultSetMapping( - [ - 'name' => 'mappingMultipleJoinsEntityResults', - 'entities' => [ - [ - 'fields' => [ - [ - 'name' => 'id', - 'column' => 'u_id', - ], - [ - 'name' => 'name', - 'column' => 'u_name', - ], - [ - 'name' => 'status', - 'column' => 'u_status', - ] - ], - 'entityClass' => '__CLASS__', - 'discriminatorColumn' => null, - ], - [ - 'fields' => [ - [ - 'name' => 'id', - 'column' => 'a_id', - ], - [ - 'name' => 'zip', - 'column' => 'a_zip', - ], - [ - 'name' => 'country', - 'column' => 'a_country', - ], - ], - 'entityClass' => CmsAddress::class, - 'discriminatorColumn' => null, - ], - ], - 'columns' => [ - [ - 'name' => 'numphones', - ] - ] - ] - ); - - } } diff --git a/tests/Doctrine/Tests/Models/Cache/City.php b/tests/Doctrine/Tests/Models/Cache/City.php index d9f0fbe3353..dca4496e443 100644 --- a/tests/Doctrine/Tests/Models/Cache/City.php +++ b/tests/Doctrine/Tests/Models/Cache/City.php @@ -103,9 +103,4 @@ public function getAttractions() { return $this->attractions; } - - public static function loadMetadata(Mapping\ClassMetadata $metadata) - { - include __DIR__ . '/../../ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php'; - } } diff --git a/tests/Doctrine/Tests/Models/Company/CompanyContract.php b/tests/Doctrine/Tests/Models/Company/CompanyContract.php index 6db42437b62..605da9c6e4b 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyContract.php @@ -137,53 +137,4 @@ public function removeEngineer(CompanyEmployee $engineer) } abstract public function calculatePrice(); - - static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) - { - $tableMetadata = new Mapping\TableMetadata(); - $tableMetadata->setName('company_contracts'); - - $metadata->setTable($tableMetadata); - $metadata->setInheritanceType(Mapping\InheritanceType::JOINED); - - $discrColumn = new Mapping\DiscriminatorColumnMetadata(); - - $discrColumn->setTableName($metadata->getTableName()); - $discrColumn->setColumnName('discr'); - $discrColumn->setType(Type::getType('string')); - - $metadata->setDiscriminatorColumn($discrColumn); - - $fieldMetadata = new Mapping\FieldMetadata('id'); - $fieldMetadata->setType(Type::getType('integer')); - $fieldMetadata->setPrimaryKey(true); - - $metadata->addProperty($fieldMetadata); - - $fieldMetadata = new Mapping\FieldMetadata('completed'); - $fieldMetadata->setType(Type::getType('boolean')); - $fieldMetadata->setColumnName('completed'); - - $metadata->addProperty($fieldMetadata); - - $metadata->setDiscriminatorMap( - [ - "fix" => CompanyFixContract::class, - "flexible" => CompanyFlexContract::class, - "flexultra" => CompanyFlexUltraContract::class - ] - ); - - $metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, CompanyContractListener::class, 'postPersistHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, CompanyContractListener::class, 'prePersistHandler'); - - $metadata->addEntityListener(\Doctrine\ORM\Events::postUpdate, CompanyContractListener::class, 'postUpdateHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::preUpdate, CompanyContractListener::class, 'preUpdateHandler'); - - $metadata->addEntityListener(\Doctrine\ORM\Events::postRemove, CompanyContractListener::class, 'postRemoveHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::preRemove, CompanyContractListener::class, 'preRemoveHandler'); - - $metadata->addEntityListener(\Doctrine\ORM\Events::preFlush, CompanyContractListener::class, 'preFlushHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::postLoad, CompanyContractListener::class, 'postLoadHandler'); - } } diff --git a/tests/Doctrine/Tests/Models/Company/CompanyFixContract.php b/tests/Doctrine/Tests/Models/Company/CompanyFixContract.php index 222aa8e44bc..b51444a79d5 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyFixContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyFixContract.php @@ -33,14 +33,4 @@ public function setFixPrice($fixPrice) { $this->fixPrice = $fixPrice; } - - static public function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadata $metadata) - { - $fieldMetadata = new Mapping\FieldMetadata('fixPrice'); - - $fieldMetadata->setType(Type::getType('integer')); - $fieldMetadata->setColumnName('fixPrice'); - - $metadata->addProperty($fieldMetadata); - } } diff --git a/tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php b/tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php index d7c2ffc810f..6b43ebdfd47 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyFlexContract.php @@ -114,19 +114,4 @@ public function removeManager(CompanyManager $manager) { $this->managers->removeElement($manager); } - - static public function loadMetadata(Mapping\ClassMetadata $metadata) - { - $fieldMetadata = new Mapping\FieldMetadata('hoursWorked'); - $fieldMetadata->setType(Type::getType('integer')); - $fieldMetadata->setColumnName('hoursWorked'); - - $metadata->addProperty($fieldMetadata); - - $fieldMetadata = new Mapping\FieldMetadata('pricePerHour'); - $fieldMetadata->setType(Type::getType('integer')); - $fieldMetadata->setColumnName('pricePerHour'); - - $metadata->addProperty($fieldMetadata); - } } diff --git a/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php b/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php index 0e952d51a96..84228d10237 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyFlexUltraContract.php @@ -35,28 +35,4 @@ public function setMaxPrice($maxPrice) { $this->maxPrice = $maxPrice; } - - static public function loadMetadata(Mapping\ClassMetadata $metadata) - { - $fieldMetadata = new Mapping\FieldMetadata('maxPrice'); - $fieldMetadata->setType(Type::getType('integer')); - $fieldMetadata->setColumnName('maxPrice'); - - $metadata->addProperty($fieldMetadata); - - $metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, CompanyContractListener::class, 'postPersistHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, CompanyContractListener::class, 'prePersistHandler'); - - $metadata->addEntityListener(\Doctrine\ORM\Events::postUpdate, CompanyContractListener::class, 'postUpdateHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::preUpdate, CompanyContractListener::class, 'preUpdateHandler'); - - $metadata->addEntityListener(\Doctrine\ORM\Events::postRemove, CompanyContractListener::class, 'postRemoveHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::preRemove, CompanyContractListener::class, 'preRemoveHandler'); - - $metadata->addEntityListener(\Doctrine\ORM\Events::preFlush, CompanyContractListener::class, 'preFlushHandler'); - $metadata->addEntityListener(\Doctrine\ORM\Events::postLoad, CompanyContractListener::class, 'postLoadHandler'); - - $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, CompanyFlexUltraContractListener::class, 'prePersistHandler1'); - $metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, CompanyFlexUltraContractListener::class, 'prePersistHandler2'); - } } diff --git a/tests/Doctrine/Tests/Models/Company/CompanyPerson.php b/tests/Doctrine/Tests/Models/Company/CompanyPerson.php index 4c949157a5d..5b1736b31ba 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyPerson.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyPerson.php @@ -122,52 +122,5 @@ public function setSpouse(CompanyPerson $spouse) { $this->spouse->setSpouse($this); } } - - public static function loadMetadata(Mapping\ClassMetadata $metadata) - { - $tableMetadata = new Mapping\TableMetadata(); - $tableMetadata->setName('company_person'); - - $metadata->setTable($tableMetadata); - - $metadata->addNamedNativeQuery( - 'fetchAllWithResultClass', - 'SELECT id, name, discr FROM company_persons ORDER BY name', - [ - 'resultClass' => CompanyPerson::class, - ] - ); - - $metadata->addNamedNativeQuery( - 'fetchAllWithSqlResultSetMapping', - 'SELECT id, name, discr AS discriminator FROM company_persons ORDER BY name', - [ - 'resultSetMapping' => 'mappingFetchAll', - ] - ); - - $metadata->addSqlResultSetMapping( - [ - 'name' => 'mappingFetchAll', - 'columns' => [], - 'entities' => [ - [ - 'fields' => [ - [ - 'name' => 'id', - 'column' => 'id', - ], - [ - 'name' => 'name', - 'column' => 'name', - ], - ], - 'entityClass' => '__CLASS__', - 'discriminatorColumn' => 'discriminator', - ], - ], - ] - ); - } } diff --git a/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php b/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php index 206289ed04c..1696dcb43ea 100644 --- a/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php +++ b/tests/Doctrine/Tests/Models/DDC1476/DDC1476EntityWithDefaultFieldType.php @@ -46,19 +46,4 @@ public function setName($name) { $this->name = $name; } - - public static function loadMetadata(Mapping\ClassMetadata $metadata) - { - $fieldMetadata = new Mapping\FieldMetadata('id'); - $fieldMetadata->setType(Type::getType('string')); - $fieldMetadata->setPrimaryKey(true); - - $metadata->addProperty($fieldMetadata); - - $fieldMetadata = new Mapping\FieldMetadata('name'); - $fieldMetadata->setType(Type::getType('string')); - - $metadata->addProperty($fieldMetadata); - } - } diff --git a/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php b/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php index c633bb18a15..4945b62ab9f 100644 --- a/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php +++ b/tests/Doctrine/Tests/Models/DDC2825/ExplicitSchemaAndTable.php @@ -19,21 +19,4 @@ class ExplicitSchemaAndTable * @ORM\GeneratedValue(strategy="AUTO") */ public $id; - - public static function loadMetadata(Mapping\ClassMetadata $metadata) - { - $tableMetadata = new Mapping\TableMetadata(); - - $tableMetadata->setSchema('explicit_schema'); - $tableMetadata->setName('explicit_table'); - - $metadata->setTable($tableMetadata); - - $fieldMetadata = new Mapping\FieldMetadata('id'); - - $fieldMetadata->setType(Type::getType('integer')); - $fieldMetadata->setPrimaryKey(true); - - $metadata->addProperty($fieldMetadata); - } } diff --git a/tests/Doctrine/Tests/Models/DDC2825/SchemaAndTableInTableName.php b/tests/Doctrine/Tests/Models/DDC2825/SchemaAndTableInTableName.php index ed0dc2c0d64..1e4df5c4a87 100644 --- a/tests/Doctrine/Tests/Models/DDC2825/SchemaAndTableInTableName.php +++ b/tests/Doctrine/Tests/Models/DDC2825/SchemaAndTableInTableName.php @@ -22,21 +22,4 @@ class SchemaAndTableInTableName * @ORM\GeneratedValue(strategy="AUTO") */ public $id; - - public static function loadMetadata(Mapping\ClassMetadata $metadata) - { - $tableMetadata = new Mapping\TableMetadata(); - - $tableMetadata->setName('implicit_table'); - $tableMetadata->setSchema('implicit_schema'); - - $metadata->setTable($tableMetadata); - - $fieldMetadata = new Mapping\FieldMetadata('id'); - - $fieldMetadata->setType(Type::getType('integer')); - $fieldMetadata->setPrimaryKey(true); - - $metadata->addProperty($fieldMetadata); - } } diff --git a/tests/Doctrine/Tests/Models/DDC3579/DDC3579Admin.php b/tests/Doctrine/Tests/Models/DDC3579/DDC3579Admin.php index 3ff99da9aa5..4eb2c2b01df 100644 --- a/tests/Doctrine/Tests/Models/DDC3579/DDC3579Admin.php +++ b/tests/Doctrine/Tests/Models/DDC3579/DDC3579Admin.php @@ -18,12 +18,4 @@ */ class DDC3579Admin extends DDC3579User { - public static function loadMetadata(Mapping\ClassMetadata $metadata) - { - $association = new Mapping\ManyToManyAssociationMetadata('groups'); - - $association->setInversedBy('admins'); - - $metadata->setPropertyOverride($association); - } } diff --git a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php index 0ccd6ca99bb..7af5851da47 100644 --- a/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php +++ b/tests/Doctrine/Tests/Models/DDC3579/DDC3579User.php @@ -82,32 +82,4 @@ public function getGroups() { return $this->groups; } - - public static function loadMetadata(Mapping\ClassMetadata $metadata) - { - $fieldMetadata = new Mapping\FieldMetadata('id'); - - $fieldMetadata->setType(Type::getType('integer')); - $fieldMetadata->setColumnName('user_id'); - $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); - - $metadata->addProperty($fieldMetadata); - - $fieldMetadata = new Mapping\FieldMetadata('name'); - - $fieldMetadata->setType(Type::getType('string')); - $fieldMetadata->setLength(250); - $fieldMetadata->setColumnName('user_name'); - $fieldMetadata->setNullable(true); - $fieldMetadata->setUnique(false); - - $metadata->addProperty($fieldMetadata); - - $association = new Mapping\ManyToManyAssociationMetadata('groups'); - - $association->setTargetEntity(DDC3579Group::class); - - $metadata->addProperty($association); - } } diff --git a/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php b/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php index d788bfc912b..7e6eb00b87f 100644 --- a/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php +++ b/tests/Doctrine/Tests/Models/DDC5934/DDC5934BaseContract.php @@ -32,22 +32,4 @@ public function __construct() { $this->members = new ArrayCollection(); } - - public static function loadMetadata(Mapping\ClassMetadata $metadata) - { - $fieldMetadata = new Mapping\FieldMetadata('id'); - - $fieldMetadata->setType(Type::getType('integer')); - $fieldMetadata->setColumnName('id'); - $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); - - $metadata->addProperty($fieldMetadata); - - $association = new Mapping\ManyToManyAssociationMetadata('members'); - - $association->setTargetEntity(DDC5934Member::class); - - $metadata->addProperty($association); - } } diff --git a/tests/Doctrine/Tests/Models/DDC5934/DDC5934Contract.php b/tests/Doctrine/Tests/Models/DDC5934/DDC5934Contract.php index 358d3b3487e..ef10fbaddbb 100644 --- a/tests/Doctrine/Tests/Models/DDC5934/DDC5934Contract.php +++ b/tests/Doctrine/Tests/Models/DDC5934/DDC5934Contract.php @@ -16,12 +16,4 @@ */ class DDC5934Contract extends DDC5934BaseContract { - public static function loadMetadata(ClassMetadata $metadata) - { - $association = new Mapping\ManyToManyAssociationMetadata('members'); - - $association->setFetchMode(Mapping\FetchMode::EXTRA_LAZY); - - $metadata->setPropertyOverride($association); - } } diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php index 5751f1b84aa..172ae880e11 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869ChequePayment.php @@ -13,17 +13,6 @@ */ class DDC869ChequePayment extends DDC869Payment { - /** @ORM\Column(type="string") */ protected $serialNumber; - - public static function loadMetadata(Mapping\ClassMetadata $metadata) - { - $fieldMetadata = new Mapping\FieldMetadata('serialNumber'); - - $fieldMetadata->setType(Type::getType('string')); - - $metadata->addProperty($fieldMetadata); - } - } diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869CreditCardPayment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869CreditCardPayment.php index 52d7a30189d..ed72555803d 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869CreditCardPayment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869CreditCardPayment.php @@ -15,14 +15,4 @@ class DDC869CreditCardPayment extends DDC869Payment { /** @ORM\Column(type="string") */ protected $creditCardNumber; - - public static function loadMetadata(Mapping\ClassMetadata $metadata) - { - $fieldMetadata = new Mapping\FieldMetadata('creditCardNumber'); - - $fieldMetadata->setType(Type::getType('string')); - - $metadata->addProperty($fieldMetadata); - } - } diff --git a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php index 7363e524317..f0fbcdd111b 100644 --- a/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php +++ b/tests/Doctrine/Tests/Models/DDC869/DDC869Payment.php @@ -22,23 +22,4 @@ class DDC869Payment /** @ORM\Column(type="float") */ protected $value; - - public static function loadMetadata(Mapping\ClassMetadata $metadata) - { - $fieldMetadata = new Mapping\FieldMetadata('id'); - $fieldMetadata->setType(Type::getType('integer')); - $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); - - $metadata->addProperty($fieldMetadata); - - $fieldMetadata = new Mapping\FieldMetadata('value'); - $fieldMetadata->setType(Type::getType('float')); - - $metadata->addProperty($fieldMetadata); - - $metadata->isMappedSuperclass = true; - - $metadata->setCustomRepositoryClassName(DDC869PaymentRepository::class); - } } diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php b/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php index 634ca5994a9..44b51a6f833 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889Class.php @@ -16,15 +16,4 @@ class DDC889Class extends DDC889SuperClass * @ORM\GeneratedValue */ protected $id; - - public static function loadMetadata(Mapping\ClassMetadata $metadata) - { - $fieldMetadata = new Mapping\FieldMetadata('id'); - $fieldMetadata->setType(Type::getType('integer')); - $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); - - $metadata->addProperty($fieldMetadata); - } - } diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889Entity.php b/tests/Doctrine/Tests/Models/DDC889/DDC889Entity.php index fdc50635ec0..f951e271bc1 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889Entity.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889Entity.php @@ -12,7 +12,4 @@ */ class DDC889Entity extends DDC889SuperClass { - public static function loadMetadata(Mapping\ClassMetadata $metadata) - { - } } diff --git a/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php b/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php index 464b5bfd83d..545ad6b9383 100644 --- a/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php +++ b/tests/Doctrine/Tests/Models/DDC889/DDC889SuperClass.php @@ -15,13 +15,4 @@ class DDC889SuperClass { /** @ORM\Column() */ protected $name; - - public static function loadMetadata(Mapping\ClassMetadata $metadata) - { - $fieldMetadata = new Mapping\FieldMetadata('name'); - $fieldMetadata->setType(Type::getType('string')); - - $metadata->addProperty($fieldMetadata); - $metadata->isMappedSuperclass = true; - } } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php b/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php index c71a609066a..6bd0adc1e67 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964Admin.php @@ -28,41 +28,4 @@ */ class DDC964Admin extends DDC964User { - public static function loadMetadata(Mapping\ClassMetadata $metadata) - { - $joinColumns = []; - - $joinColumn = new Mapping\JoinColumnMetadata(); - - $joinColumn->setColumnName('adminaddress_id'); - $joinColumn->setReferencedColumnName('id'); - $joinColumn->setOnDelete(''); - - $joinColumns[] = $joinColumn; - - $association = new Mapping\ManyToOneAssociationMetadata('address'); - - $association->setJoinColumns($joinColumns); - - $metadata->setPropertyOverride($association); - - $joinTable = new Mapping\JoinTableMetadata(); - $joinTable->setName('ddc964_users_admingroups'); - - $joinColumn = new Mapping\JoinColumnMetadata(); - $joinColumn->setColumnName('adminuser_id'); - - $joinTable->addJoinColumn($joinColumn); - - $joinColumn = new Mapping\JoinColumnMetadata(); - $joinColumn->setColumnName('admingroup_id'); - - $joinTable->addInverseJoinColumn($joinColumn); - - $association = new Mapping\ManyToManyAssociationMetadata('groups'); - - $association->setJoinTable($joinTable); - - $metadata->setPropertyOverride($association); - } } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php b/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php index cebdf7f3816..d25b5c25a98 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964Guest.php @@ -32,24 +32,4 @@ */ class DDC964Guest extends DDC964User { - public static function loadMetadata(Mapping\ClassMetadata $metadata) - { - $fieldMetadata = new Mapping\FieldMetadata('id'); - - $fieldMetadata->setType(Type::getType('integer')); - $fieldMetadata->setColumnName('guest_id'); - $fieldMetadata->setPrimaryKey(true); - - $metadata->setPropertyOverride($fieldMetadata); - - $fieldMetadata = new Mapping\FieldMetadata('name'); - - $fieldMetadata->setType(Type::getType('string')); - $fieldMetadata->setLength(240); - $fieldMetadata->setColumnName('guest_name'); - $fieldMetadata->setNullable(false); - $fieldMetadata->setUnique(true); - - $metadata->setPropertyOverride($fieldMetadata); - } } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php index 0c223e85c18..c187cc5920e 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php @@ -110,67 +110,4 @@ public function setAddress(DDC964Address $address) { $this->address = $address; } - - public static function loadMetadata(Mapping\ClassMetadata $metadata) - { - $fieldMetadata = new Mapping\FieldMetadata('id'); - $fieldMetadata->setType(Type::getType('integer')); - $fieldMetadata->setColumnName('user_id'); - $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); - - $metadata->addProperty($fieldMetadata); - - $fieldMetadata = new Mapping\FieldMetadata('name'); - $fieldMetadata->setType(Type::getType('string')); - $fieldMetadata->setLength(250); - $fieldMetadata->setColumnName('user_name'); - $fieldMetadata->setNullable(true); - $fieldMetadata->setUnique(false); - - $metadata->addProperty($fieldMetadata); - - $joinColumns = []; - - $joinColumn = new Mapping\JoinColumnMetadata(); - - $joinColumn->setColumnName('address_id'); - $joinColumn->setReferencedColumnName('id'); - - $joinColumns[] = $joinColumn; - - $association = new Mapping\ManyToOneAssociationMetadata('address'); - - $association->setJoinColumns($joinColumns); - $association->setTargetEntity(DDC964Address::class); - $association->setCascade(['persist', 'merge']); - - $metadata->addProperty($association); - - $joinTable = new Mapping\JoinTableMetadata(); - $joinTable->setName('ddc964_users_groups'); - - $joinColumn = new Mapping\JoinColumnMetadata(); - - $joinColumn->setColumnName('user_id'); - $joinColumn->setReferencedColumnName('id'); - - $joinTable->addJoinColumn($joinColumn); - - $joinColumn = new Mapping\JoinColumnMetadata(); - - $joinColumn->setColumnName('group_id'); - $joinColumn->setReferencedColumnName('id'); - - $joinTable->addInverseJoinColumn($joinColumn); - - $association = new Mapping\ManyToManyAssociationMetadata('groups'); - - $association->setJoinTable($joinTable); - $association->setTargetEntity(DDC964Group::class); - $association->setInversedBy('users'); - $association->setCascade(['persist', 'merge', 'detach']); - - $metadata->addProperty($association); - } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 2e9a8cabe04..f9e4979aa38 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -1280,156 +1280,6 @@ public function doStuffOnPostPersist() { } - - public static function loadMetadata(ClassMetadata $metadata) - { - $tableMetadata = new Mapping\TableMetadata(); - - $tableMetadata->setName('cms_users'); - $tableMetadata->addIndex( - [ - 'name' => 'name_idx', - 'columns' => ['name'], - 'unique' => false, - 'options' => [], - 'flags' => [], - ] - ); - - $tableMetadata->addIndex( - [ - 'name' => null, - 'columns' => ['user_email'], - 'unique' => false, - 'options' => [], - 'flags' => [], - ] - ); - - $tableMetadata->addUniqueConstraint( - [ - 'name' => 'search_idx', - 'columns' => ['name', 'user_email'], - 'options' => [], - 'flags' => [], - ] - ); - $tableMetadata->addOption('foo', 'bar'); - $tableMetadata->addOption('baz', ['key' => 'val']); - - $metadata->setTable($tableMetadata); - $metadata->setInheritanceType(Mapping\InheritanceType::NONE); - $metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); - - $metadata->addLifecycleCallback('doStuffOnPrePersist', 'prePersist'); - $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); - $metadata->addLifecycleCallback('doStuffOnPostPersist', 'postPersist'); - - $metadata->addNamedQuery('all', 'SELECT u FROM __CLASS__ u'); - - $fieldMetadata = new Mapping\FieldMetadata('id'); - $fieldMetadata->setType(Type::getType('integer')); - $fieldMetadata->setPrimaryKey(true); - $fieldMetadata->setOptions(['foo' => 'bar', 'unsigned' => false]); - $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata( - Mapping\GeneratorType::AUTO, - [ - 'sequenceName' => 'tablename_seq', - 'allocationSize' => 100, - ] - )); - - $metadata->addProperty($fieldMetadata); - - $fieldMetadata = new Mapping\FieldMetadata('name'); - $fieldMetadata->setType(Type::getType('string')); - $fieldMetadata->setLength(50); - $fieldMetadata->setNullable(true); - $fieldMetadata->setUnique(true); - $fieldMetadata->setOptions( - [ - 'foo' => 'bar', - 'baz' => [ - 'key' => 'val', - ], - 'fixed' => false, - ] - ); - - $metadata->addProperty($fieldMetadata); - - $fieldMetadata = new Mapping\FieldMetadata('email'); - - $fieldMetadata->setType(Type::getType('string')); - $fieldMetadata->setColumnName('user_email'); - $fieldMetadata->setColumnDefinition('CHAR(32) NOT NULL'); - - $metadata->addProperty($fieldMetadata); - - $fieldMetadata = new Mapping\VersionFieldMetadata('version'); - - $fieldMetadata->setType(Type::getType('integer')); - - $metadata->addProperty($fieldMetadata); - - $joinColumns = []; - - $joinColumn = new Mapping\JoinColumnMetadata(); - - $joinColumn->setColumnName('address_id'); - $joinColumn->setReferencedColumnName('id'); - $joinColumn->setOnDelete('CASCADE'); - - $joinColumns[] = $joinColumn; - - $association = new Mapping\OneToOneAssociationMetadata('address'); - - $association->setJoinColumns($joinColumns); - $association->setTargetEntity(Address::class); - $association->setInversedBy('user'); - $association->setCascade(['remove']); - $association->setOrphanRemoval(false); - - $metadata->addProperty($association); - - $association = new Mapping\OneToManyAssociationMetadata('phonenumbers'); - - $association->setTargetEntity(Phonenumber::class); - $association->setMappedBy('user'); - $association->setCascade(['persist']); - $association->setOrderBy(['number' => 'ASC']); - $association->setOrphanRemoval(true); - - $metadata->addProperty($association); - - $joinTable = new Mapping\JoinTableMetadata(); - $joinTable->setName('cms_users_groups'); - - $joinColumn = new Mapping\JoinColumnMetadata(); - - $joinColumn->setColumnName('user_id'); - $joinColumn->setReferencedColumnName('id'); - $joinColumn->setNullable(false); - $joinColumn->setUnique(false); - - $joinTable->addJoinColumn($joinColumn); - - $joinColumn = new Mapping\JoinColumnMetadata(); - - $joinColumn->setColumnName('group_id'); - $joinColumn->setReferencedColumnName('id'); - $joinColumn->setColumnDefinition('INT NULL'); - - $joinTable->addInverseJoinColumn($joinColumn); - - $association = new Mapping\ManyToManyAssociationMetadata('groups'); - - $association->setJoinTable($joinTable); - $association->setTargetEntity(Group::class); - $association->setCascade(['remove', 'persist', 'refresh', 'merge', 'detach']); - - $metadata->addProperty($association); - } } /** @@ -1445,37 +1295,16 @@ abstract class Animal * @ORM\CustomIdGenerator(class="stdClass") */ public $id; - - public static function loadMetadata(ClassMetadata $metadata) - { - $id = new Mapping\FieldMetadata('id'); - $id->setValueGenerator(new Mapping\ValueGeneratorMetadata( - Mapping\GeneratorType::CUSTOM, - [ - 'class' => 'stdClass', - 'arguments' => [], - ] - )); - $metadata->addProperty($id); - } } /** @ORM\Entity */ class Cat extends Animal { - public static function loadMetadata(ClassMetadata $metadata) - { - - } } /** @ORM\Entity */ class Dog extends Animal { - public static function loadMetadata(ClassMetadata $metadata) - { - - } } /** @@ -1519,24 +1348,6 @@ public function getValue() return $this->value; } - public static function loadMetadata(ClassMetadata $metadata) - { - $fieldMetadata = new Mapping\FieldMetadata('id'); - - $fieldMetadata->setType(Type::getType('integer')); - $fieldMetadata->setColumnDefinition('INT unsigned NOT NULL'); - $fieldMetadata->setPrimaryKey(true); - - $metadata->addProperty($fieldMetadata); - - $fieldMetadata = new Mapping\FieldMetadata('value'); - - $fieldMetadata->setType(Type::getType('string')); - $fieldMetadata->setColumnDefinition('VARCHAR(255) NOT NULL'); - - $metadata->addProperty($fieldMetadata); - } - } /** @@ -1553,25 +1364,6 @@ class DDC807Entity * @ORM\GeneratedValue(strategy="NONE") **/ public $id; - - public static function loadMetadata(ClassMetadata $metadata) - { - $fieldMetadata = new Mapping\FieldMetadata('id'); - - $fieldMetadata->setType(Type::getType('string')); - $fieldMetadata->setPrimaryKey(true); - - $metadata->addProperty($fieldMetadata); - - $discrColumn = new Mapping\DiscriminatorColumnMetadata(); - - $discrColumn->setTableName($metadata->getTableName()); - $discrColumn->setColumnName('dtype'); - $discrColumn->setType(Type::getType('string')); - $discrColumn->setColumnDefinition("ENUM('ONE','TWO')"); - - $metadata->setDiscriminatorColumn($discrColumn); - } } class DDC807SubClasse1 {} @@ -1591,31 +1383,6 @@ class Comment * @ORM\Column(type="text") */ private $content; - - public static function loadMetadata(ClassMetadata $metadata) - { - $tableMetadata = new Mapping\TableMetadata(); - - $tableMetadata->addIndex( - [ - 'name' => null, - 'unique' => false, - 'columns' => ['content'], - 'flags' => ['fulltext'], - 'options' => ['where' => 'content IS NOT NULL'], - ] - ); - - $metadata->setTable($tableMetadata); - $metadata->setInheritanceType(Mapping\InheritanceType::NONE); - - $fieldMetadata = new Mapping\FieldMetadata('content'); - $fieldMetadata->setType(Type::getType('text')); - $fieldMetadata->setNullable(false); - $fieldMetadata->setUnique(false); - - $metadata->addProperty($fieldMetadata); - } } /** @@ -1634,16 +1401,6 @@ class SingleTableEntityNoDiscriminatorColumnMapping * @ORM\GeneratedValue(strategy="NONE") */ public $id; - - public static function loadMetadata(ClassMetadata $metadata) - { - $fieldMetadata = new Mapping\FieldMetadata('id'); - $fieldMetadata->setType(Type::getType('string')); - $fieldMetadata->setPrimaryKey(true); - - $metadata->addProperty($fieldMetadata); - - } } /** @@ -1673,17 +1430,6 @@ class SingleTableEntityIncompleteDiscriminatorColumnMapping * @ORM\GeneratedValue(strategy="NONE") */ public $id; - - public static function loadMetadata(ClassMetadata $metadata) - { - // @todo: String != Integer and this should not work - $fieldMetadata = new Mapping\FieldMetadata('id'); - $fieldMetadata->setType(Type::getType('string')); - $fieldMetadata->setPrimaryKey(true); - - $metadata->addProperty($fieldMetadata); - - } } class SingleTableEntityIncompleteDiscriminatorColumnMappingSub1 diff --git a/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php deleted file mode 100644 index 29be58ec039..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/PHPMappingDriverTest.php +++ /dev/null @@ -1,54 +0,0 @@ -createAnnotationDriver(); -// $driver->loadMetadataForClass("Doctrine\Tests\ORM\Mapping\Animal", $meta); -// $exporter = $cme->getExporter('php', $path); -// echo $exporter->exportClassMetadata($meta); - - return new PHPDriver($path); - } - - /** - * All class are entitier for php driver - * - * @group DDC-889 - */ - public function testinvalidEntityOrMappedSuperClassShouldMentionParentClasses() - { - self::assertInstanceOf(ClassMetadata::class, $this->createClassMetadata(DDC889Class::class)); - } - - /** - * @expectedException Doctrine\ORM\Cache\CacheException - * @expectedExceptionMessage Entity association field "Doctrine\Tests\ORM\Mapping\PHPSLC#foo" not configured as part of the second-level cache. - */ - public function testFailingSecondLevelCacheAssociation() - { - $mappingDriver = $this->loadDriver(); - - $class = new ClassMetadata(Mapping\PHPSLC::class, $this->metadataBuildingContext); - - $mappingDriver->loadMetadataForClass(Mapping\PHPSLC::class, $class, $this->metadataBuildingContext); - } -} - -class PHPSLC {} diff --git a/tests/Doctrine/Tests/ORM/Mapping/StaticPHPMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/StaticPHPMappingDriverTest.php deleted file mode 100644 index 4b9dcb6e704..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/StaticPHPMappingDriverTest.php +++ /dev/null @@ -1,27 +0,0 @@ -createClassMetadata(DDC889Class::class)); - } -} diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php deleted file mode 100644 index 1f56ec0c3c0..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsAddress.php +++ /dev/null @@ -1,135 +0,0 @@ -setName('company_person'); - -/* @var $metadata ClassMetadata */ -$metadata->setTable($tableMetadata); - -$fieldMetadata = new Mapping\FieldMetadata('id'); -$fieldMetadata->setType(Type::getType('integer')); -$fieldMetadata->setPrimaryKey(true); - -$metadata->addProperty($fieldMetadata); - -$fieldMetadata = new Mapping\FieldMetadata('zip'); -$fieldMetadata->setType(Type::getType('string')); -$fieldMetadata->setLength(50); - -$metadata->addProperty($fieldMetadata); - -$fieldMetadata = new Mapping\FieldMetadata('city'); -$fieldMetadata->setType(Type::getType('string')); -$fieldMetadata->setLength(50); - -$metadata->addProperty($fieldMetadata); - -$joinColumns = []; - -$joinColumn = new Mapping\JoinColumnMetadata(); -$joinColumn->setReferencedColumnName("id"); - -$joinColumns[] = $joinColumn; - -$association = new Mapping\OneToOneAssociationMetadata('user'); - -$association->setJoinColumns($joinColumns); -$association->setTargetEntity(\Doctrine\Tests\Models\CMS\CmsUser::class); - -$metadata->addProperty($association); - -$metadata->addNamedNativeQuery( - 'find-all', - 'SELECT id, country, city FROM cms_addresses', - [ - 'resultSetMapping' => 'mapping-find-all', - ] -); - -$metadata->addNamedNativeQuery( - 'find-by-id', - 'SELECT * FROM cms_addresses WHERE id = ?', - [ - 'resultClass' => CmsAddress::class, - ] -); - -$metadata->addNamedNativeQuery( - 'count', - 'SELECT COUNT(*) AS count FROM cms_addresses', - [ - 'resultSetMapping' => 'mapping-count', - ] -); - - -$metadata->addSqlResultSetMapping( - [ - 'name' => 'mapping-find-all', - 'columns' => [], - 'entities' => [ - [ - 'fields' => [ - [ - 'name' => 'id', - 'column' => 'id', - ], - [ - 'name' => 'city', - 'column' => 'city', - ], - [ - 'name' => 'country', - 'column' => 'country', - ], - ], - 'entityClass' => CmsAddress::class, - ], - ], - ] -); - -$metadata->addSqlResultSetMapping( - [ - 'name' => 'mapping-without-fields', - 'columns' => [], - 'entities' => [ - [ - 'entityClass' => '__CLASS__', - 'fields' => [] - ] - ] - ] -); - -$metadata->addSqlResultSetMapping( - [ - 'name' => 'mapping-count', - 'columns' => [ - [ - 'name' => 'count', - ], - ] - ] -); - -$metadata->addEntityListener(Events::postPersist, CmsAddressListener::class, 'postPersist'); -$metadata->addEntityListener(Events::prePersist, CmsAddressListener::class, 'prePersist'); - -$metadata->addEntityListener(Events::postUpdate, CmsAddressListener::class, 'postUpdate'); -$metadata->addEntityListener(Events::preUpdate, CmsAddressListener::class, 'preUpdate'); - -$metadata->addEntityListener(Events::postRemove, CmsAddressListener::class, 'postRemove'); -$metadata->addEntityListener(Events::preRemove, CmsAddressListener::class, 'preRemove'); - -$metadata->addEntityListener(Events::preFlush, CmsAddressListener::class, 'preFlush'); -$metadata->addEntityListener(Events::postLoad, CmsAddressListener::class, 'postLoad'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php deleted file mode 100644 index 875403d1f33..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.CMS.CmsUser.php +++ /dev/null @@ -1,215 +0,0 @@ -setName('cms_users'); - -/* @var $metadata ClassMetadata */ -$metadata->setTable($tableMetadata); - -$metadata->addNamedNativeQuery( - 'fetchIdAndUsernameWithResultClass', - 'SELECT id, username FROM cms_users WHERE username = ?', - [ - 'resultClass' => CmsUser::class, - ] -); - -$metadata->addNamedNativeQuery( - 'fetchAllColumns', - 'SELECT * FROM cms_users WHERE username = ?', - [ - 'resultClass' => CmsUser::class, - ] -); - -$metadata->addNamedNativeQuery( - 'fetchJoinedAddress', - 'SELECT u.id, u.name, u.status, a.id AS a_id, a.country, a.zip, a.city FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?', - [ - 'resultSetMapping' => 'mappingJoinedAddress', - ] -); - -$metadata->addNamedNativeQuery( - 'fetchJoinedPhonenumber', - 'SELECT id, name, status, phonenumber AS number FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ?', - [ - 'resultSetMapping' => 'mappingJoinedPhonenumber', - ] -); - -$metadata->addNamedNativeQuery( - 'fetchUserPhonenumberCount', - 'SELECT id, name, status, COUNT(phonenumber) AS numphones FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username IN (?) GROUP BY id, name, status, username ORDER BY username', - [ - 'resultSetMapping' => 'mappingUserPhonenumberCount', - ] -); - -$metadata->addNamedNativeQuery( - 'fetchMultipleJoinsEntityResults', - 'SELECT u.id AS u_id, u.name AS u_name, u.status AS u_status, a.id AS a_id, a.zip AS a_zip, a.country AS a_country, COUNT(p.phonenumber) AS numphones FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id INNER JOIN cms_phonenumbers p ON u.id = p.user_id GROUP BY u.id, u.name, u.status, u.username, a.id, a.zip, a.country ORDER BY u.username', - [ - 'resultSetMapping' => 'mappingMultipleJoinsEntityResults', - ] -); - -$metadata->addSqlResultSetMapping( - [ - 'name' => 'mappingJoinedAddress', - 'columns' => [], - 'entities' => [ - [ - 'fields'=> [ - [ - 'name' => 'id', - 'column' => 'id', - ], - [ - 'name' => 'name', - 'column' => 'name', - ], - [ - 'name' => 'status', - 'column' => 'status', - ], - [ - 'name' => 'address.zip', - 'column' => 'zip', - ], - [ - 'name' => 'address.city', - 'column' => 'city', - ], - [ - 'name' => 'address.country', - 'column' => 'country', - ], - [ - 'name' => 'address.id', - 'column' => 'a_id', - ], - ], - 'entityClass' => '__CLASS__', - 'discriminatorColumn' => null - ], - ], - ] -); - -$metadata->addSqlResultSetMapping( - [ - 'name' => 'mappingJoinedPhonenumber', - 'columns' => [], - 'entities' => [ - [ - 'fields'=> [ - [ - 'name' => 'id', - 'column' => 'id', - ], - [ - 'name' => 'name', - 'column' => 'name', - ], - [ - 'name' => 'status', - 'column' => 'status', - ], - [ - 'name' => 'phonenumbers.phonenumber', - 'column' => 'number', - ], - ], - 'entityClass' => CmsUser::class, - 'discriminatorColumn' => null - ], - ], - ] -); - -$metadata->addSqlResultSetMapping( - [ - 'name' => 'mappingUserPhonenumberCount', - 'columns' => [], - 'entities' => [ - [ - 'fields' => [ - [ - 'name' => 'id', - 'column' => 'id', - ], - [ - 'name' => 'name', - 'column' => 'name', - ], - [ - 'name' => 'status', - 'column' => 'status', - ] - ], - 'entityClass' => CmsUser::class, - 'discriminatorColumn' => null - ] - ], - 'columns' => [ - [ - 'name' => 'numphones', - ] - ] - ] -); - -$metadata->addSqlResultSetMapping( - [ - 'name' => 'mappingMultipleJoinsEntityResults', - 'entities' => [ - [ - 'fields' => [ - [ - 'name' => 'id', - 'column' => 'u_id', - ], - [ - 'name' => 'name', - 'column' => 'u_name', - ], - [ - 'name' => 'status', - 'column' => 'u_status', - ] - ], - 'entityClass' => '__CLASS__', - 'discriminatorColumn' => null, - ], - [ - 'fields' => [ - [ - 'name' => 'id', - 'column' => 'a_id', - ], - [ - 'name' => 'zip', - 'column' => 'a_zip', - ], - [ - 'name' => 'country', - 'column' => 'a_country', - ], - ], - 'entityClass' => CmsAddress::class, - 'discriminatorColumn' => null, - ], - ], - 'columns' => [ - [ - 'name' => 'numphones', - ] - ] - ] -); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php deleted file mode 100644 index 480f5632524..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Cache.City.php +++ /dev/null @@ -1,74 +0,0 @@ -setName('cache_city'); - -$metadata->setTable($tableMetadata); -$metadata->setInheritanceType(Mapping\InheritanceType::NONE); -$metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); -$metadata->setCache( - new Mapping\CacheMetadata( - Mapping\CacheUsage::READ_ONLY, - 'doctrine_tests_models_cache_city' - ) -); - -$fieldMetadata = new Mapping\FieldMetadata('id'); -$fieldMetadata->setType(Type::getType('integer')); -$fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::IDENTITY)); - -$metadata->addProperty($fieldMetadata); - -$fieldMetadata = new Mapping\FieldMetadata('name'); -$fieldMetadata->setType(Type::getType('string')); - -$metadata->addProperty($fieldMetadata); - -$joinColumns = []; - -$joinColumn = new Mapping\JoinColumnMetadata(); - -$joinColumn->setColumnName("state_id"); -$joinColumn->setReferencedColumnName("id"); - -$joinColumns[] = $joinColumn; - -$association = new Mapping\OneToOneAssociationMetadata('state'); - -$association->setJoinColumns($joinColumns); -$association->setTargetEntity(State::class); -$association->setInversedBy('cities'); -$association->setCache( - new Mapping\CacheMetadata(Mapping\CacheUsage::READ_ONLY, 'doctrine_tests_models_cache_city__state') -); - -$metadata->addProperty($association); - -$association = new Mapping\ManyToManyAssociationMetadata('travels'); - -$association->setTargetEntity(Travel::class); -$association->setMappedBy('visitedCities'); - -$metadata->addProperty($association); - -$association = new Mapping\OneToManyAssociationMetadata('attractions'); - -$association->setTargetEntity(Attraction::class); -$association->setMappedBy('city'); -$association->setOrderBy(['name' => 'ASC']); -$association->setCache( - new Mapping\CacheMetadata(Mapping\CacheUsage::READ_ONLY, 'doctrine_tests_models_cache_city__attractions') -); - -$metadata->addProperty($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php deleted file mode 100644 index ba140a52ff5..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyContract.php +++ /dev/null @@ -1,54 +0,0 @@ -setName('company_contracts'); - -/* @var $metadata ClassMetadata */ -$metadata->setTable($tableMetadata); -$metadata->setInheritanceType(Mapping\InheritanceType::JOINED); - -$discrColumn = new Mapping\DiscriminatorColumnMetadata(); - -$discrColumn->setColumnName('discr'); -$discrColumn->setType(Type::getType('string')); - -$metadata->setDiscriminatorColumn($discrColumn); - -$metadata->setDiscriminatorMap( - [ - "fix" => Company\CompanyFixContract::class, - "flexible" => Company\CompanyFlexContract::class, - "flexultra" => Company\CompanyFlexUltraContract::class - ] -); - -$fieldMetadata = new Mapping\FieldMetadata('id'); -$fieldMetadata->setType(Type::getType('string')); -$fieldMetadata->setPrimaryKey(true); - -$metadata->addProperty($fieldMetadata); - -$fieldMetadata = new Mapping\FieldMetadata('completed'); -$fieldMetadata->setType(Type::getType('boolean')); - -$metadata->addProperty($fieldMetadata); - -$metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, CompanyContractListener::class, 'postPersistHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, CompanyContractListener::class, 'prePersistHandler'); - -$metadata->addEntityListener(\Doctrine\ORM\Events::postUpdate, CompanyContractListener::class, 'postUpdateHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::preUpdate, CompanyContractListener::class, 'preUpdateHandler'); - -$metadata->addEntityListener(\Doctrine\ORM\Events::postRemove, CompanyContractListener::class, 'postRemoveHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::preRemove, CompanyContractListener::class, 'preRemoveHandler'); - -$metadata->addEntityListener(\Doctrine\ORM\Events::preFlush, CompanyContractListener::class, 'preFlushHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::postLoad, CompanyContractListener::class, 'postLoadHandler'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFixContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFixContract.php deleted file mode 100644 index e2885c1762f..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFixContract.php +++ /dev/null @@ -1,15 +0,0 @@ -setType(Type::getType('integer')); -$fieldMetadata->setColumnName('fixPrice'); - -$metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexContract.php deleted file mode 100644 index c2a52d35417..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexContract.php +++ /dev/null @@ -1,22 +0,0 @@ -setType(Type::getType('integer')); -$fieldMetadata->setColumnName('hoursWorked'); - -$metadata->addProperty($fieldMetadata); - -$fieldMetadata = new Mapping\FieldMetadata('pricePerHour'); - -$fieldMetadata->setType(Type::getType('integer')); -$fieldMetadata->setColumnName('pricePerHour'); - -$metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexUltraContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexUltraContract.php deleted file mode 100644 index 0a25f59eb68..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyFlexUltraContract.php +++ /dev/null @@ -1,32 +0,0 @@ -setType(Type::getType('integer')); -$fieldMetadata->setColumnName('maxPrice'); - -$metadata->addProperty($fieldMetadata); - -$metadata->addEntityListener(\Doctrine\ORM\Events::postPersist, CompanyContractListener::class, 'postPersistHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, CompanyContractListener::class, 'prePersistHandler'); - -$metadata->addEntityListener(\Doctrine\ORM\Events::postUpdate, CompanyContractListener::class, 'postUpdateHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::preUpdate, CompanyContractListener::class, 'preUpdateHandler'); - -$metadata->addEntityListener(\Doctrine\ORM\Events::postRemove, CompanyContractListener::class, 'postRemoveHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::preRemove, CompanyContractListener::class, 'preRemoveHandler'); - -$metadata->addEntityListener(\Doctrine\ORM\Events::preFlush, CompanyContractListener::class, 'preFlushHandler'); -$metadata->addEntityListener(\Doctrine\ORM\Events::postLoad, CompanyContractListener::class, 'postLoadHandler'); - -$metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, CompanyFlexUltraContractListener::class, 'prePersistHandler1'); -$metadata->addEntityListener(\Doctrine\ORM\Events::prePersist, CompanyFlexUltraContractListener::class, 'prePersistHandler2'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php deleted file mode 100644 index 11a97742c54..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.Company.CompanyPerson.php +++ /dev/null @@ -1,51 +0,0 @@ -setName('company_person'); - -/* @var $metadata ClassMetadata */ -$metadata->setTable($tableMetadata); - -$metadata->addNamedNativeQuery( - 'fetchAllWithResultClass', - 'SELECT id, name, discr FROM company_persons ORDER BY name', - [ - 'resultClass' => CompanyPerson::class, - ] -); - -$metadata->addNamedNativeQuery( - 'fetchAllWithSqlResultSetMapping', - 'SELECT id, name, discr AS discriminator FROM company_persons ORDER BY name', - [ - 'resultSetMapping' => 'mappingFetchAll', - ] -); - -$metadata->addSqlResultSetMapping( - [ - 'name' => 'mappingFetchAll', - 'columns' => [], - 'entities' => [ - [ - 'fields' => [ - [ - 'name' => 'id', - 'column' => 'id', - ], - [ - 'name' => 'name', - 'column' => 'name', - ], - ], - 'entityClass' => '__CLASS__', - 'discriminatorColumn' => 'discriminator', - ], - ], - ] -); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php deleted file mode 100644 index aa5c8448181..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC1476.DDC1476EntityWithDefaultFieldType.php +++ /dev/null @@ -1,19 +0,0 @@ -setType(Type::getType('string')); -$fieldMetadata->setPrimaryKey(true); - -$metadata->addProperty($fieldMetadata); - -$fieldMetadata = new Mapping\FieldMetadata('name'); -$fieldMetadata->setType(Type::getType('string')); - -$metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php deleted file mode 100644 index 9911c4f9b80..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.ExplicitSchemaAndTable.php +++ /dev/null @@ -1,22 +0,0 @@ -setSchema('explicit_schema'); -$tableMetadata->setName('explicit_table'); - -/* @var $metadata ClassMetadata */ -$metadata->setTable($tableMetadata); - -$fieldMetadata = new Mapping\FieldMetadata('id'); - -$fieldMetadata->setType(Type::getType('integer')); -$fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); - -$metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php deleted file mode 100644 index 5d250d75249..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC2825.SchemaAndTableInTableName.php +++ /dev/null @@ -1,21 +0,0 @@ -setSchema('implicit_schema'); -$tableMetadata->setName('implicit_table'); - -/* @var $metadata ClassMetadata */ -$metadata->setTable($tableMetadata); - -$fieldMetadata = new Mapping\FieldMetadata('id'); -$fieldMetadata->setType(Type::getType('integer')); -$fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); - -$metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579Admin.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579Admin.php deleted file mode 100644 index cf41d4cc27b..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579Admin.php +++ /dev/null @@ -1,11 +0,0 @@ -setInversedBy('admins'); - -$metadata->setPropertyOverride($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php deleted file mode 100644 index 1b48aa1a52c..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC3579.DDC3579User.php +++ /dev/null @@ -1,31 +0,0 @@ -setType(Type::getType('integer')); -$fieldMetadata->setColumnName('user_id'); -$fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); - -$metadata->addProperty($fieldMetadata); - -$fieldMetadata = new Mapping\FieldMetadata('name'); -$fieldMetadata->setType(Type::getType('string')); -$fieldMetadata->setLength(250); -$fieldMetadata->setColumnName('user_name'); -$fieldMetadata->setNullable(true); -$fieldMetadata->setUnique(false); - -$metadata->addProperty($fieldMetadata); - -$association = new Mapping\ManyToManyAssociationMetadata('groups'); - -$association->setTargetEntity(\Doctrine\Tests\Models\DDC3579\DDC3579Group::class); - -$metadata->addProperty($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php deleted file mode 100644 index 3cce440b9bd..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.php +++ /dev/null @@ -1,22 +0,0 @@ -setType(Type::getType('integer')); -$fieldMetadata->setColumnName('id'); -$fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); - -$metadata->addProperty($fieldMetadata); - -$association = new Mapping\ManyToManyAssociationMetadata('members'); - -$association->setTargetEntity(\Doctrine\Tests\Models\DDC5934\DDC5934Member::class); - -$metadata->addProperty($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934Contract.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934Contract.php deleted file mode 100644 index 7ea88451455..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC5934.DDC5934Contract.php +++ /dev/null @@ -1,11 +0,0 @@ -setFetchMode(Mapping\FetchMode::EXTRA_LAZY); - -$metadata->setPropertyOverride($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869ChequePayment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869ChequePayment.php deleted file mode 100644 index d3136bcf26e..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869ChequePayment.php +++ /dev/null @@ -1,13 +0,0 @@ -setType(Type::getType('integer')); - -$metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.php deleted file mode 100644 index 93dc82c2e9e..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869CreditCardPayment.php +++ /dev/null @@ -1,13 +0,0 @@ -setType(Type::getType('string')); - -$metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php deleted file mode 100644 index da45bfd935a..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC869.DDC869Payment.php +++ /dev/null @@ -1,25 +0,0 @@ -isMappedSuperclass = true; - -$fieldMetadata = new Mapping\FieldMetadata('id'); -$fieldMetadata->setType(Type::getType('integer')); -$fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); - -$metadata->addProperty($fieldMetadata); - -$fieldMetadata = new Mapping\FieldMetadata('value'); -$fieldMetadata->setType(Type::getType('float')); - -$metadata->addProperty($fieldMetadata); - -$metadata->setCustomRepositoryClassName(DDC869PaymentRepository::class); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Class.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Class.php deleted file mode 100644 index 0280c264b7f..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Class.php +++ /dev/null @@ -1,14 +0,0 @@ -setType(Type::getType('integer')); -$fieldMetadata->setPrimaryKey(true); - -$metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Entity.php deleted file mode 100644 index 6cd1187b02d..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC889.DDC889Entity.php +++ /dev/null @@ -1,5 +0,0 @@ -isMappedSuperclass = true; - -$fieldMetadata = new Mapping\FieldMetadata('name'); -$fieldMetadata->setType(Type::getType('string')); -$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); - -$metadata->addProperty($fieldMetadata); - -$metadata->setCustomRepositoryClassName(DDC889SuperClass::class); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php deleted file mode 100644 index fa85dd6e804..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Admin.php +++ /dev/null @@ -1,40 +0,0 @@ -setColumnName('adminaddress_id'); -$joinColumn->setReferencedColumnName('id'); -$joinColumn->setOnDelete(''); - -$joinColumns[] = $joinColumn; - -$association = new Mapping\ManyToOneAssociationMetadata('address'); - -$association->setJoinColumns($joinColumns); - -$metadata->setPropertyOverride($association); - -$joinTable = new Mapping\JoinTableMetadata(); -$joinTable->setName('ddc964_users_admingroups'); - -$joinColumn = new Mapping\JoinColumnMetadata(); -$joinColumn->setColumnName('adminuser_id'); - -$joinTable->addJoinColumn($joinColumn); - -$joinColumn = new Mapping\JoinColumnMetadata(); -$joinColumn->setColumnName('admingroup_id'); - -$joinTable->addInverseJoinColumn($joinColumn); - -$association = new Mapping\ManyToManyAssociationMetadata('groups'); - -$association->setJoinTable($joinTable); - -$metadata->setPropertyOverride($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Guest.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Guest.php deleted file mode 100644 index a2617e1b4a4..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964Guest.php +++ /dev/null @@ -1,24 +0,0 @@ -setType(Type::getType('integer')); -$fieldMetadata->setColumnName('guest_id'); -$fieldMetadata->setPrimaryKey(true); - -$metadata->setPropertyOverride($fieldMetadata); - -$fieldMetadata = new Mapping\FieldMetadata('name'); - -$fieldMetadata->setType(Type::getType('string')); -$fieldMetadata->setLength(240); -$fieldMetadata->setColumnName('guest_name'); -$fieldMetadata->setNullable(false); -$fieldMetadata->setUnique(true); - -$metadata->setPropertyOverride($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php deleted file mode 100644 index 2674e4ddaed..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.Models.DDC964.DDC964User.php +++ /dev/null @@ -1,69 +0,0 @@ -setType(Type::getType('integer')); -$fieldMetadata->setColumnName('user_id'); -$fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::AUTO)); - -$metadata->addProperty($fieldMetadata); - -$fieldMetadata = new Mapping\FieldMetadata('name'); - -$fieldMetadata->setType(Type::getType('string')); -$fieldMetadata->setLength(250); -$fieldMetadata->setColumnName('user_name'); -$fieldMetadata->setNullable(true); -$fieldMetadata->setUnique(false); - -$metadata->addProperty($fieldMetadata); - -$joinColumns = []; - -$joinColumn = new Mapping\JoinColumnMetadata(); -$joinColumn->setColumnName('address_id'); -$joinColumn->setReferencedColumnName('id'); - -$joinColumns[] = $joinColumn; - -$association = new Mapping\ManyToOneAssociationMetadata('address'); - -$association->setJoinColumns($joinColumns); -$association->setTargetEntity(\Doctrine\Tests\Models\DDC964\DDC964Address::class); -$association->setCascade(['persist', 'merge']); - -$metadata->addProperty($association); - -$joinTable = new Mapping\JoinTableMetadata(); -$joinTable->setName('ddc964_users_groups'); - -$joinColumn = new Mapping\JoinColumnMetadata(); -$joinColumn->setColumnName("user_id"); -$joinColumn->setReferencedColumnName("id"); - -$joinTable->addJoinColumn($joinColumn); - -$inverseJoinColumns = []; - -$joinColumn = new Mapping\JoinColumnMetadata(); -$joinColumn->setColumnName("group_id"); -$joinColumn->setReferencedColumnName("id"); - -$joinTable->addInverseJoinColumn($joinColumn); - -$association = new Mapping\ManyToManyAssociationMetadata('groups'); - -$association->setJoinTable($joinTable); -$association->setTargetEntity(\Doctrine\Tests\Models\DDC964\DDC964Group::class); -$association->setInversedBy('user'); -$association->setCascade(['persist','merge','detach']); - -$metadata->addProperty($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php deleted file mode 100644 index 0bb63933841..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Animal.php +++ /dev/null @@ -1,44 +0,0 @@ -setTableName($metadata->getTableName()); -$discrColumn->setColumnName('dtype'); -$discrColumn->setType(Type::getType('string')); -$discrColumn->setLength(255); - -$metadata->setDiscriminatorColumn($discrColumn); - -$metadata->setDiscriminatorMap( - [ - 'cat' => Cat::class, - 'dog' => Dog::class, - ] -); - -$metadata->setInheritanceType(Mapping\InheritanceType::NONE); -$metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); - -$fieldMetadata = new Mapping\FieldMetadata('id'); - -$fieldMetadata->setType(Type::getType('integer')); -$fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setNullable(false); -$fieldMetadata->setUnique(false); -$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata( - Mapping\GeneratorType::CUSTOM, - [ - 'class' => 'stdClass', - 'arguments' => [], - ] -)); - -$metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php deleted file mode 100644 index 576770c3163..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.Comment.php +++ /dev/null @@ -1,31 +0,0 @@ -addIndex( - [ - 'name' => null, - 'columns' => ['content'], - 'unique' => false, - 'flags' => ['fulltext'], - 'options' => ['where' => 'content IS NOT NULL'], - ] -); - -/* @var $metadata ClassMetadata */ -$metadata->setTable($tableMetadata); -$metadata->setInheritanceType(Mapping\InheritanceType::NONE); - -$fieldMetadata = new Mapping\FieldMetadata('content'); - -$fieldMetadata->setType(Type::getType('text')); -$fieldMetadata->setNullable(false); -$fieldMetadata->setUnique(false); - -$metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php deleted file mode 100644 index e3071d2cf86..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC1170Entity.php +++ /dev/null @@ -1,21 +0,0 @@ -setType(Type::getType('integer')); -$fieldMetadata->setColumnDefinition('INT unsigned NOT NULL'); -$fieldMetadata->setPrimaryKey(true); - -$metadata->addProperty($fieldMetadata); - -$fieldMetadata = new Mapping\FieldMetadata('value'); -$fieldMetadata->setType(Type::getType('string')); -$fieldMetadata->setColumnDefinition('VARCHAR(255) NOT NULL'); - -$metadata->addProperty($fieldMetadata); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php deleted file mode 100644 index a2d62d9f7b0..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.DDC807Entity.php +++ /dev/null @@ -1,22 +0,0 @@ -setType(Type::getType('string')); -$fieldMetadata->setPrimaryKey(true); - -$metadata->addProperty($fieldMetadata); - -$discrColumn = new Mapping\DiscriminatorColumnMetadata(); - -$discrColumn->setColumnName('dtype'); -$discrColumn->setType(Type::getType('string')); -$discrColumn->setColumnDefinition("ENUM('ONE','TWO')"); - -$metadata->setDiscriminatorColumn($discrColumn); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php deleted file mode 100644 index ee80a2b8d77..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.PHPSLC.php +++ /dev/null @@ -1,19 +0,0 @@ -setCache( - new Mapping\CacheMetadata( - Mapping\CacheUsage::READ_ONLY, - 'doctrine_tests_orm_mapping_phpslc' - ) -); - -$association = new Mapping\ManyToOneAssociationMetadata('foo'); - -$association->setTargetEntity(PHPSLCFoo::class); -$association->setPrimaryKey(true); - -$metadata->addProperty($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php deleted file mode 100644 index 440a87abd80..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ /dev/null @@ -1,155 +0,0 @@ -setName('cms_users'); -$tableMetadata->addIndex( - [ - 'name' => 'name_idx', - 'columns' => ['name'], - 'unique' => false, - 'options' => [], - 'flags' => [], - ] -); -$tableMetadata->addIndex( - [ - 'name' => null, - 'columns' => ['user_email'], - 'unique' => false, - 'options' => [], - 'flags' => [], - ] -); -$tableMetadata->addUniqueConstraint( - [ - 'name' => 'search_idx', - 'columns' => ['name', 'user_email'], - 'options' => [], - 'flags' => [], - ] -); -$tableMetadata->addOption('foo', 'bar'); -$tableMetadata->addOption('baz', ['key' => 'val']); - -$metadata->setTable($tableMetadata); -$metadata->setInheritanceType(Mapping\InheritanceType::NONE); -$metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); - -$metadata->addLifecycleCallback('doStuffOnPrePersist', 'prePersist'); -$metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); -$metadata->addLifecycleCallback('doStuffOnPostPersist', 'postPersist'); - -$metadata->addNamedQuery('all', 'SELECT u FROM __CLASS__ u'); - -$fieldMetadata = new Mapping\FieldMetadata('id'); - -$fieldMetadata->setType(Type::getType('integer')); -$fieldMetadata->setPrimaryKey(true); -$fieldMetadata->setOptions(['foo' => 'bar', 'unsigned' => false]); -$fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata( - Mapping\GeneratorType::AUTO, - [ - 'sequenceName' => 'tablename_seq', - 'allocationSize' => 100, - ] -)); - -$metadata->addProperty($fieldMetadata); - -$fieldMetadata = new Mapping\FieldMetadata('name'); - -$fieldMetadata->setType(Type::getType('string')); -$fieldMetadata->setLength(50); -$fieldMetadata->setColumnName('name'); -$fieldMetadata->setNullable(true); -$fieldMetadata->setUnique(true); -$fieldMetadata->setOptions( - [ - 'foo' => 'bar', - 'baz' => ['key' => 'val'], - 'fixed' => false, - ] -); - -$metadata->addProperty($fieldMetadata); - -$fieldMetadata = new Mapping\FieldMetadata('email'); - -$fieldMetadata->setType(Type::getType('string')); -$fieldMetadata->setColumnName('user_email'); -$fieldMetadata->setColumnDefinition('CHAR(32) NOT NULL'); - -$metadata->addProperty($fieldMetadata); - -$versionFieldMetadata = new Mapping\VersionFieldMetadata('version'); - -$versionFieldMetadata->setType(Type::getType('integer')); - -$metadata->addProperty($versionFieldMetadata); - -$joinColumns = []; - -$joinColumn = new Mapping\JoinColumnMetadata(); -$joinColumn->setColumnName('address_id'); -$joinColumn->setReferencedColumnName('id'); -$joinColumn->setOnDelete('CASCADE'); - -$joinColumns[] = $joinColumn; - -$association = new Mapping\OneToOneAssociationMetadata('address'); - -$association->setJoinColumns($joinColumns); -$association->setTargetEntity(Address::class); -$association->setInversedBy('user'); -$association->setCascade(['remove']); -$association->setOrphanRemoval(false); - -$metadata->addProperty($association); - -$association = new Mapping\OneToManyAssociationMetadata('phonenumbers'); - -$association->setTargetEntity(Phonenumber::class); -$association->setMappedBy('user'); -$association->setCascade(['persist']); -$association->setOrphanRemoval(true); -$association->setOrderBy(['number' => 'ASC']); - -$metadata->addProperty($association); - -$joinTable = new Mapping\JoinTableMetadata(); -$joinTable->setName('cms_users_groups'); - -$joinColumn = new Mapping\JoinColumnMetadata(); -$joinColumn->setColumnName("user_id"); -$joinColumn->setReferencedColumnName("id"); -$joinColumn->setNullable(false); -$joinColumn->setUnique(false); - -$joinTable->addJoinColumn($joinColumn); - -$joinColumn = new Mapping\JoinColumnMetadata(); - -$joinColumn->setColumnName("group_id"); -$joinColumn->setReferencedColumnName("id"); -$joinColumn->setColumnDefinition("INT NULL"); - -$joinTable->addInverseJoinColumn($joinColumn); - -$association = new Mapping\ManyToManyAssociationMetadata('groups'); - -$association->setJoinTable($joinTable); -$association->setTargetEntity(Group::class); -$association->setCascade(['remove', 'persist', 'refresh', 'merge', 'detach']); - -$metadata->addProperty($association); diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.dcm.yml deleted file mode 100644 index 2044c9be527..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC5934.DDC5934BaseContract.dcm.yml +++ /dev/null @@ -1,12 +0,0 @@ -Doctrine\Tests\Models\DDC5934\DDC5934BaseContract: - type: mappedSuperclass - id: - id: - type: integer - column: id - generator: - strategy: AUTO - manyToMany: - members: - targetEntity: DDC5934Member - inversedBy: contract diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC5934.DDC5934Contract.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC5934.DDC5934Contract.dcm.yml deleted file mode 100644 index 45ba145853e..00000000000 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.Models.DDC5934.DDC5934Contract.dcm.yml +++ /dev/null @@ -1,5 +0,0 @@ -Doctrine\Tests\Models\DDC5934\DDC5934Contract: - type: entity - associationOverride: - members: - fetch: EXTRA_LAZY diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index 20914f6e2f8..e712d226fc6 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -60,7 +60,6 @@ protected function createEntityManager($metadataDriver) protected function createMetadataDriver($type, $path) { $mappingDriver = [ - 'php' => PHPDriver::class, 'annotation' => AnnotationDriver::class, 'xml' => XmlDriver::class, ]; diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/PhpClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/PhpClassMetadataExporterTest.php deleted file mode 100644 index e3543f6a427..00000000000 --- a/tests/Doctrine/Tests/ORM/Tools/Export/PhpClassMetadataExporterTest.php +++ /dev/null @@ -1,23 +0,0 @@ - - * @author Roman Borschel Date: Thu, 10 Aug 2017 11:42:46 -0400 Subject: [PATCH 204/275] Fixed broken tests --- .../ORM/Proxy/Factory/StaticProxyFactory.php | 3 +- .../Tests/Mocks/EntityManagerMock.php | 535 +----------------- .../OnClassMetadataNotFoundEventArgsTest.php | 4 +- .../ORM/Hydration/ObjectHydratorTest.php | 21 +- tests/Doctrine/Tests/OrmTestCase.php | 10 +- 5 files changed, 40 insertions(+), 533 deletions(-) diff --git a/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php b/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php index 78eafbc5cd5..d0c80ebb76e 100644 --- a/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/Factory/StaticProxyFactory.php @@ -103,9 +103,8 @@ protected function createProxyInstance(ProxyDefinition $definition) : Proxy { /** @var Proxy $classMetadata */ $proxyClassName = $definition->proxyClassName; - $proxyInstance = new $proxyClassName($definition); - return $proxyInstance; + return new $proxyClassName($definition); } /** diff --git a/tests/Doctrine/Tests/Mocks/EntityManagerMock.php b/tests/Doctrine/Tests/Mocks/EntityManagerMock.php index fd572b8b8ed..33f570e12a5 100644 --- a/tests/Doctrine/Tests/Mocks/EntityManagerMock.php +++ b/tests/Doctrine/Tests/Mocks/EntityManagerMock.php @@ -6,22 +6,14 @@ use Doctrine\Common\EventManager; use Doctrine\ORM\Configuration; +use Doctrine\ORM\Decorator\EntityManagerDecorator; use Doctrine\ORM\EntityManager; use Doctrine\ORM\EntityManagerInterface; -use Doctrine\ORM\Mapping; -use Doctrine\ORM\NativeQuery; -use Doctrine\ORM\OptimisticLockException; -use Doctrine\ORM\ORMException; -use Doctrine\ORM\PessimisticLockException; -use Doctrine\ORM\Query; -use Doctrine\ORM\Query\ResultSetMapping; -use Doctrine\ORM\QueryBuilder; -use Doctrine\ORM\Utility\IdentifierFlattener; /** * Special EntityManager mock used for testing purposes. */ -class EntityManagerMock implements EntityManagerInterface +class EntityManagerMock extends EntityManagerDecorator { /** * @var \Doctrine\ORM\UnitOfWork|null @@ -33,22 +25,12 @@ class EntityManagerMock implements EntityManagerInterface */ private $proxyFactoryMock; - /** @var EntityManagerInterface $em */ - private $em; - /** - * EntityManagerMock constructor. - * - * @param EntityManagerInterface $em + * @return EntityManagerInterface */ - public function __construct(EntityManagerInterface $em) - { - $this->em = $em; - } - - public function getEM() + public function getWrappedEntityManager() : EntityManagerInterface { - return $this->em; + return $this->wrapped; } /** @@ -56,11 +38,9 @@ public function getEM() */ public function getUnitOfWork() { - return $this->uowMock ?? $this->em->getUnitOfWork(); + return $this->uowMock ?? $this->wrapped->getUnitOfWork(); } - /* Mock API */ - /** * Sets a (mock) UnitOfWork that will be returned when getUnitOfWork() is called. * @@ -88,7 +68,7 @@ public function setProxyFactory($proxyFactory) */ public function getProxyFactory() { - return $this->proxyFactoryMock ?? $this->em->getProxyFactory(); + return $this->proxyFactoryMock ?? $this->wrapped->getProxyFactory(); } /** @@ -100,511 +80,18 @@ public static function create($conn, Configuration $config = null, EventManager { if (null === $config) { $config = new Configuration(); + $config->setProxyDir(__DIR__ . '/../Proxies'); $config->setProxyNamespace('Doctrine\Tests\Proxies'); - $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver([])); + $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver()); } + if (null === $eventManager) { $eventManager = $conn->getEventManager(); } $em = EntityManager::create($conn, $config, $eventManager); - return new EntityManagerMock($em); - } - - /** - * Returns the cache API for managing the second level cache regions or NULL if the cache is not enabled. - * - * @return \Doctrine\ORM\Cache|null - */ - public function getCache() - { - return $this->em->getCache(); - } - - /** - * Gets the database connection object used by the EntityManager. - * - * @return \Doctrine\DBAL\Connection - */ - public function getConnection() - { - return $this->em->getConnection(); - } - - - /** - * @return Query\Expr - */ - public function getExpressionBuilder() - { - return $this->em->getExpressionBuilder(); - } - - /** - * Gets an IdentifierFlattener used for converting Entities into an array of identifier values. - * - * @return IdentifierFlattener - */ - public function getIdentifierFlattener() - { - return $this->em->getIdentifierFlattener(); - } - - /** - * Starts a transaction on the underlying database connection. - * - * @return void - */ - public function beginTransaction() - { - $this->em->beginTransaction(); - } - - /** - * Executes a function in a transaction. - * - * The function gets passed this EntityManager instance as an (optional) parameter. - * - * {@link flush} is invoked prior to transaction commit. - * - * If an exception occurs during execution of the function or flushing or transaction commit, - * the transaction is rolled back, the EntityManager closed and the exception re-thrown. - * - * @param callable $func The function to execute transactionally. - * - * @return mixed The value returned from the closure. - * - * @throws \Throwable - */ - public function transactional(callable $func) - { - return $this->em->transactional($func); - } - - /** - * Commits a transaction on the underlying database connection. - * - * @return void - */ - public function commit() - { - $this->em->commit(); - } - - /** - * Performs a rollback on the underlying database connection. - * - * @return void - */ - public function rollback() - { - $this->em->rollback(); - } - - /** - * Creates a new Query object. - * - * @param string $dql The DQL string. - * - * @return Query - */ - public function createQuery($dql = '') - { - return $this->em->createQuery($dql); - } - - /** - * Creates a Query from a named query. - * - * @param string $name - * - * @return Query - */ - public function createNamedQuery($name) - { - return $this->em->createNamedQuery($name); - } - - /** - * Creates a native SQL query. - * - * @param string $sql - * @param ResultSetMapping $rsm The ResultSetMapping to use. - * - * @return NativeQuery - */ - public function createNativeQuery($sql, ResultSetMapping $rsm) - { - return $this->em->createNativeQuery($sql, $rsm); - } - - /** - * Creates a NativeQuery from a named native query. - * - * @param string $name - * - * @return NativeQuery - */ - public function createNamedNativeQuery($name) - { - return $this->em->createNamedNativeQuery($name); - } - - /** - * Create a QueryBuilder instance - * - * @return QueryBuilder - */ - public function createQueryBuilder() - { - return $this->em->createQueryBuilder(); - } - - /** - * Gets a reference to the entity identified by the given type and identifier - * without actually loading it, if the entity is not yet loaded. - * - * @param string $entityName The name of the entity type. - * @param mixed $id The entity identifier. - * - * @return object The entity reference. - * - * @throws ORMException - */ - public function getReference($entityName, $id) - { - return $this->em->getReference($entityName, $id); - } - - /** - * Gets a partial reference to the entity identified by the given type and identifier - * without actually loading it, if the entity is not yet loaded. - * - * The returned reference may be a partial object if the entity is not yet loaded/managed. - * If it is a partial object it will not initialize the rest of the entity state on access. - * Thus you can only ever safely access the identifier of an entity obtained through - * this method. - * - * The use-cases for partial references involve maintaining bidirectional associations - * without loading one side of the association or to update an entity without loading it. - * Note, however, that in the latter case the original (persistent) entity data will - * never be visible to the application (especially not event listeners) as it will - * never be loaded in the first place. - * - * @param string $entityName The name of the entity type. - * @param mixed $identifier The entity identifier. - * - * @return object The (partial) entity reference. - */ - public function getPartialReference($entityName, $identifier) - { - return $this->em->getPartialReference($entityName, $identifier); - } - - /** - * Closes the EntityManager. All entities that are currently managed - * by this EntityManager become detached. The EntityManager may no longer - * be used after it is closed. - * - * @return void - */ - public function close() - { - $this->em->close(); - } - - /** - * Creates a copy of the given entity. Can create a shallow or a deep copy. - * - * @param object $entity The entity to copy. - * @param boolean $deep FALSE for a shallow copy, TRUE for a deep copy. - * - * @return object The new entity. - * - * @throws \BadMethodCallException - */ - public function copy($entity, $deep = false) - { - return $this->em->copy($entity, $deep); - } - - /** - * Acquire a lock on the given entity. - * - * @param object $entity - * @param int $lockMode - * @param int|null $lockVersion - * - * @return void - * - * @throws OptimisticLockException - * @throws PessimisticLockException - */ - public function lock($entity, $lockMode, $lockVersion = null) - { - $this->em->lock($entity, $lockMode, $lockVersion); - } - - /** - * Gets the EventManager used by the EntityManager. - * - * @return \Doctrine\Common\EventManager - */ - public function getEventManager() - { - return $this->em->getEventManager(); - } - - /** - * Gets the Configuration used by the EntityManager. - * - * @return Configuration - */ - public function getConfiguration() - { - return $this->em->getConfiguration(); - } - - /** - * Check if the Entity manager is open or closed. - * - * @return bool - */ - public function isOpen() - { - return $this->em->isOpen(); - } - - /** - * Gets a hydrator for the given hydration mode. - * - * This method caches the hydrator instances which is used for all queries that don't - * selectively iterate over the result. - * - * @deprecated - * - * @param int $hydrationMode - * - * @return \Doctrine\ORM\Internal\Hydration\AbstractHydrator - */ - public function getHydrator($hydrationMode) - { - return $this->em->getHydrator($hydrationMode); - } - - /** - * Create a new instance for the given hydration mode. - * - * @param int $hydrationMode - * - * @return \Doctrine\ORM\Internal\Hydration\AbstractHydrator - * - * @throws ORMException - */ - public function newHydrator($hydrationMode) - { - return $this->em->newHydrator($hydrationMode); - } - - /** - * Gets the enabled filters. - * - * @return \Doctrine\ORM\Query\FilterCollection The active filter collection. - */ - public function getFilters() - { - return $this->em->getFilters(); - } - - /** - * Checks whether the state of the filter collection is clean. - * - * @return boolean True, if the filter collection is clean. - */ - public function isFiltersStateClean() - { - return $this->em->isFiltersStateClean(); - } - - /** - * Checks whether the Entity Manager has filters. - * - * @return boolean True, if the EM has a filter collection. - */ - public function hasFilters() - { - return $this->em->hasFilters(); - } - - /** - * Finds an object by its identifier. - * - * This is just a convenient shortcut for getRepository($className)->find($id). - * - * @param string $className The class name of the object to find. - * @param mixed $id The identity of the object to find. - * - * @return object The found object. - */ - public function find($className, $id) - { - return $this->em->find($className, $id); - } - - /** - * Tells the ObjectManager to make an instance managed and persistent. - * - * The object will be entered into the database as a result of the flush operation. - * - * NOTE: The persist operation always considers objects that are not yet known to - * this ObjectManager as NEW. Do not pass detached objects to the persist operation. - * - * @param object $object The instance to make managed and persistent. - * - * @return void - */ - public function persist($object) - { - $this->em->persist($object); - } - - /** - * Removes an object instance. - * - * A removed object will be removed from the database as a result of the flush operation. - * - * @param object $object The object instance to remove. - * - * @return void - */ - public function remove($object) - { - $this->em->remove($object); - } - - /** - * Merges the state of a detached object into the persistence context - * of this ObjectManager and returns the managed copy of the object. - * The object passed to merge will not become associated/managed with this ObjectManager. - * - * @param object $object - * - * @return object - */ - public function merge($object) - { - return $this->em->merge($object); - } - /** - * Clears the ObjectManager. All objects that are currently managed - * by this ObjectManager become detached. - * - * @param string|null $objectName if given, only objects of this type will get detached. - * - * @return void - */ - public function clear($objectName = null) - { - $this->em->clear($objectName); - } - - /** - * Detaches an object from the ObjectManager, causing a managed object to - * become detached. Unflushed changes made to the object if any - * (including removal of the object), will not be synchronized to the database. - * Objects which previously referenced the detached object will continue to - * reference it. - * - * @param object $object The object to detach. - * - * @return void - */ - public function detach($object) - { - $this->em->detach($object); - } - - /** - * Refreshes the persistent state of an object from the database, - * overriding any local changes that have not yet been persisted. - * - * @param object $object The object to refresh. - * - * @return void - */ - public function refresh($object) - { - $this->em->refresh($object); - } - - /** - * Flushes all changes to objects that have been queued up to now to the database. - * This effectively synchronizes the in-memory state of managed objects with the - * database. - * - * @return void - */ - public function flush() - { - $this->em->flush(); - } - - /** - * Gets the repository for a class. - * - * @param string $className - * - * @return \Doctrine\Common\Persistence\ObjectRepository - */ - public function getRepository($className) - { - return $this->em->getRepository($className); - } - - /** - * Gets the metadata factory used to gather the metadata of classes. - * - * @return \Doctrine\Common\Persistence\Mapping\ClassMetadataFactory - */ - public function getMetadataFactory() - { - return $this->em->getMetadataFactory(); - } - - /** - * Helper method to initialize a lazy loading proxy or persistent collection. - * - * This method is a no-op for other objects. - * - * @param object $obj - * - * @return void - */ - public function initializeObject($obj) - { - $this->em->initializeObject($obj); - } - - /** - * Checks if the object is part of the current UnitOfWork and therefore managed. - * - * @param object $object - * - * @return bool - */ - public function contains($object) - { - return $this->em->contains($object); - } - - /** - * @param string $className - * @return Mapping\ClassMetadata - */ - public function getClassMetadata($className) : Mapping\ClassMetadata - { - return $this->em->getClassMetadata($className); + return new EntityManagerMock($em); } } diff --git a/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php b/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php index 6f9b570690e..074504de676 100644 --- a/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php +++ b/tests/Doctrine/Tests/ORM/Event/OnClassMetadataNotFoundEventArgsTest.php @@ -4,7 +4,7 @@ namespace Doctrine\Tests\ORM; -use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataBuildingContext; @@ -21,7 +21,7 @@ class OnClassMetadataNotFoundEventArgsTest extends DoctrineTestCase { public function testEventArgsMutability() { - $entityManager = $this->createMock(EntityManager::class); + $entityManager = $this->createMock(EntityManagerInterface::class); $metadataBuildingContext = new ClassMetadataBuildingContext( $this->createMock(ClassMetadataFactory::class), $this->createMock(ReflectionService::class) diff --git a/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php b/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php index 0508c57cd07..67faa0f4dba 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ObjectHydratorTest.php @@ -1033,7 +1033,8 @@ public function testCreatesProxyForLazyLoadingWithForeignKeys() ->with($this->equalTo(ECommerceShipping::class), ['id' => 42]) ->will($this->returnValue($proxyInstance)); - $this->em->setProxyFactory($proxyFactory); + // @todo guilhermeblanco This should never have happened... replace this Reflection injection with proper API. + $this->swapPrivateProperty($this->em, 'proxyFactory', $proxyFactory); // configuring lazy loading $metadata = $this->em->getClassMetadata(ECommerceProduct::class); @@ -1082,7 +1083,8 @@ public function testCreatesProxyForLazyLoadingWithForeignKeysWithAliasedProductE ->with($this->equalTo(ECommerceShipping::class), ['id' => 42]) ->will($this->returnValue($proxyInstance)); - $this->em->setProxyFactory($proxyFactory); + // @todo guilhermeblanco This should never have happened... replace this Reflection injection with proper API. + $this->swapPrivateProperty($this->em, 'proxyFactory', $proxyFactory); // configuring lazy loading $metadata = $this->em->getClassMetadata(ECommerceProduct::class); @@ -2006,4 +2008,19 @@ public function testFetchJoinCollectionValuedAssociationWithDefaultArrayValue() self::assertCount(1, $result[0]->collection); self::assertInstanceOf(SimpleEntity::class, $result[0]->collection[0]); } + + /** + * @param object $object + * @param string $propertyName + * @param mixed $newValue + */ + private function swapPrivateProperty($object, string $propertyName, $newValue) + { + $reflectionClass = new \ReflectionClass($object); + $reflectionProperty = $reflectionClass->getProperty($propertyName); + + $reflectionProperty->setAccessible(true); + + $reflectionProperty->setValue($object, $newValue); + } } diff --git a/tests/Doctrine/Tests/OrmTestCase.php b/tests/Doctrine/Tests/OrmTestCase.php index ac2cc65f035..2aa38ef1854 100644 --- a/tests/Doctrine/Tests/OrmTestCase.php +++ b/tests/Doctrine/Tests/OrmTestCase.php @@ -80,13 +80,17 @@ protected function createAnnotationDriver($paths = []) * for a particular test, * * @param \Doctrine\DBAL\Connection|array $conn - * @param mixed $conf * @param \Doctrine\Common\EventManager|null $eventManager * @param bool $withSharedMetadata * * @return \Doctrine\ORM\EntityManagerInterface */ - protected function getTestEntityManager($conn = null, $conf = null, $eventManager = null, $withSharedMetadata = true) + protected function getTestEntityManager( + $conn = null, + $conf = null, + $eventManager = null, + $withSharedMetadata = true + ) { $metadataCache = $withSharedMetadata ? self::getSharedMetadataCacheImpl() @@ -130,7 +134,7 @@ protected function getTestEntityManager($conn = null, $conf = null, $eventManage $conn = DriverManager::getConnection($conn, $config, $eventManager); } - return Mocks\EntityManagerMock::create($conn, $config, $eventManager)->getEM(); + return Mocks\EntityManagerMock::create($conn, $config, $eventManager)->getWrappedEntityManager(); } protected function enableSecondLevelCache($log = true) From 13709891238bcfe39ea9720194d7b5a0b3b4426e Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 19:27:27 +0200 Subject: [PATCH 205/275] Removing `count()` operations from the `AbstractQuery` implementations --- lib/Doctrine/ORM/AbstractQuery.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/Doctrine/ORM/AbstractQuery.php b/lib/Doctrine/ORM/AbstractQuery.php index 53b52d6885d..028f995df34 100644 --- a/lib/Doctrine/ORM/AbstractQuery.php +++ b/lib/Doctrine/ORM/AbstractQuery.php @@ -312,7 +312,7 @@ function ($parameter) use ($key) } ); - return count($filteredParameters) ? $filteredParameters->first() : null; + return $filteredParameters->isEmpty() ? null : $filteredParameters->first(); } /** @@ -361,7 +361,7 @@ function ($parameter) use ($key) } ); - if (count($filteredParameters)) { + if (! $filteredParameters->isEmpty()) { $parameter = $filteredParameters->first(); $parameter->setValue($value, $type); @@ -757,11 +757,11 @@ public function getOneOrNullResult($hydrationMode = null) return $result; } - if (count($result) > 1) { + if (isset($result[1])) { throw new NonUniqueResultException; } - return array_shift($result); + return $result[0]; } /** @@ -791,11 +791,11 @@ public function getSingleResult($hydrationMode = null) return $result; } - if (count($result) > 1) { + if (isset($result[1])) { throw new NonUniqueResultException; } - return array_shift($result); + return $result[0]; } /** From a80f0e6864a2e5c8b4b381d05579426e40c9c1c5 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 19:27:51 +0200 Subject: [PATCH 206/275] Removing useless `count()` operations from the `PersistentCollection` internals --- lib/Doctrine/ORM/PersistentCollection.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/PersistentCollection.php b/lib/Doctrine/ORM/PersistentCollection.php index 42fa1f5fb41..311f126c826 100644 --- a/lib/Doctrine/ORM/PersistentCollection.php +++ b/lib/Doctrine/ORM/PersistentCollection.php @@ -533,7 +533,11 @@ public function offsetUnset($offset) */ public function isEmpty() { - return $this->collection->isEmpty() && $this->count() === 0; + if ($this->initialized) { + return $this->collection->isEmpty(); + } + + return $this->collection->isEmpty() && ! $this->count(); } /** From 6dd1d539e212fcdf13dd7018a80b9e8ae1c5f065 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 19:28:16 +0200 Subject: [PATCH 207/275] Removing useless counting around query resultset handling --- lib/Doctrine/ORM/Query.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/Doctrine/ORM/Query.php b/lib/Doctrine/ORM/Query.php index 347d8568a40..beb7d85c762 100644 --- a/lib/Doctrine/ORM/Query.php +++ b/lib/Doctrine/ORM/Query.php @@ -388,18 +388,19 @@ private function processParameterMappings($paramMappings) } $sqlPositions = $paramMappings[$key]; + $sqlPositionsCount = count($sqlPositions); // optimized multi value sql positions away for now, // they are not allowed in DQL anyways. $value = [$value]; $countValue = count($value); - for ($i = 0, $l = count($sqlPositions); $i < $l; $i++) { + for ($i = 0, $l = $sqlPositionsCount; $i < $l; $i++) { $sqlParams[$sqlPositions[$i]] = $value[($i % $countValue)]; } } - if (count($sqlParams) != count($types)) { + if (count($sqlParams) !== count($types)) { throw QueryException::parameterTypeMismatch(); } From 1c92b803ebc58ea38d6364f26b66a31bd9935887 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 19:28:50 +0200 Subject: [PATCH 208/275] Removing counting operations around parameter handling in `QueryBuilder` --- lib/Doctrine/ORM/QueryBuilder.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Doctrine/ORM/QueryBuilder.php b/lib/Doctrine/ORM/QueryBuilder.php index 8b51c623d20..ac0398465cc 100644 --- a/lib/Doctrine/ORM/QueryBuilder.php +++ b/lib/Doctrine/ORM/QueryBuilder.php @@ -526,7 +526,7 @@ function ($parameter) use ($key) } ); - if (count($filteredParameters)) { + if (! $filteredParameters->isEmpty()) { /* @var Query\Parameter $parameter */ $parameter = $filteredParameters->first(); $parameter->setValue($value, $type); @@ -607,7 +607,7 @@ function ($parameter) use ($key) } ); - return count($filteredParameters) ? $filteredParameters->first() : null; + return $filteredParameters->isEmpty() ? null : $filteredParameters->first(); } /** From 7a2d438b2e695bb447e862bd81f0cf41c541a46e Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 19:29:23 +0200 Subject: [PATCH 209/275] Removing counting operations in the `UnitOfWork` --- lib/Doctrine/ORM/UnitOfWork.php | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 5436bc02a48..01a9eca11a7 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -368,8 +368,12 @@ public function commit() // Entity deletions come last and need to be in reverse commit order if ($this->entityDeletions) { - for ($count = count($commitOrder), $i = $count - 1; $i >= 0 && $this->entityDeletions; --$i) { - $this->executeDeletions($commitOrder[$i]); + foreach (array_reverse($commitOrder) as $committedEntityName) { + if (! $this->entityDeletions) { + break; // just a performance optimisation + } + + $this->executeDeletions($committedEntityName); } } @@ -1091,12 +1095,10 @@ private function getCommitOrder(array $entityChangeSet = null) $newNodes[] = $targetClass; } - $weight = count( - array_filter( - $property->getJoinColumns(), - function (JoinColumnMetadata $joinColumn) { return $joinColumn->isNullable(); } - ) - ) === 0; + $weight = ! array_filter( + $property->getJoinColumns(), + function (JoinColumnMetadata $joinColumn) { return $joinColumn->isNullable(); } + ); $calc->addDependency($targetClass->getClassName(), $class->getClassName(), $weight); From d9aeb2b95bd45d340da0240e2359c631f570fd2a Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 19:34:48 +0200 Subject: [PATCH 210/275] Avoiding counting aliases when determining whether a query is simple or not --- lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php index ac3598e1d4d..c0778a7428f 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php @@ -53,13 +53,16 @@ class ArrayHydrator extends AbstractHydrator */ protected function prepare() { - $this->isSimpleQuery = count($this->rsm->aliasMap) <= 1; + $simpleQuery = 0; foreach ($this->rsm->aliasMap as $dqlAlias => $className) { $this->identifierMap[$dqlAlias] = []; $this->resultPointers[$dqlAlias] = []; $this->idTemplate[$dqlAlias] = ''; + $simpleQuery += 1; // avoiding counting the alias map } + + $this->isSimpleQuery = $simpleQuery < 2; } /** From df78548bdf1b72a384cd43c8fd1e20c3895e52ce Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 19:41:03 +0200 Subject: [PATCH 211/275] Avoid repeated counting of root aliases in `ArrayHydrator` --- lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php index c0778a7428f..c32e3bb9434 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php @@ -236,13 +236,14 @@ protected function hydrateRowData(array $row, array &$result) } $scalarCount = (isset($rowData['scalars'])? count($rowData['scalars']): 0); + $onlyOneRootAlias = 0 === $scalarCount && 1 === count($rowData['newObjects']); foreach ($rowData['newObjects'] as $objIndex => $newObject) { $class = $newObject['class']; $args = $newObject['args']; $obj = $class->newInstanceArgs($args); - if (count($args) == $scalarCount || ($scalarCount == 0 && count($rowData['newObjects']) == 1)) { + if ($onlyOneRootAlias || \count($args) === $scalarCount) { $result[$resultKey] = $obj; continue; From 031ec512d6ba8b9cd89b03e3723e0d68e67be100 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 19:45:16 +0200 Subject: [PATCH 212/275] Avoiding counting scalars at every iteration - simply checking once is enough --- lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php index f8c46a4e49a..c415ef4a45a 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php @@ -541,14 +541,14 @@ protected function hydrateRowData(array $row, array &$result) } - $scalarCount = (isset($rowData['scalars'])? count($rowData['scalars']): 0); + $hasNoScalars = ! (isset($rowData['scalars']) && $rowData['scalars']); foreach ($rowData['newObjects'] as $objIndex => $newObject) { $class = $newObject['class']; $args = $newObject['args']; $obj = $class->newInstanceArgs($args); - if ($scalarCount == 0 && count($rowData['newObjects']) == 1 ) { + if ($hasNoScalars && \count($rowData['newObjects']) === 1 ) { $result[$resultKey] = $obj; continue; From 4fe9070ccbf1d84ba16c26ad54e1f82eede3bfff Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 19:48:24 +0200 Subject: [PATCH 213/275] Removing counting of generated id fields when checking for composite identifiers --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index d2ac5871c94..8b9273aa129 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -449,7 +449,7 @@ public function validateIdentifier() : void && $property->hasValueGenerator(); }); - if ($this->isIdentifierComposite() && count($explicitlyGeneratedProperties) !== 0) { + if ($explicitlyGeneratedProperties && $this->isIdentifierComposite()) { throw MappingException::compositeKeyAssignedIdGeneratorRequired($this->className); } } From 7b226c801d4222ce1749520e542373b8e7ddf7ce Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 19:49:47 +0200 Subject: [PATCH 214/275] Quicker check on whether an identifier is composite - removes counting --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 8b9273aa129..eae1eacaa25 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -128,7 +128,7 @@ class ClassMetadata extends ComponentMetadata implements TableOwner * READ-ONLY: The field names of all fields that are part of the identifier/primary key * of the mapped entity class. * - * @var array + * @var string[] */ public $identifier = []; @@ -537,7 +537,7 @@ public function isIdentifier(string $fieldName) : bool */ public function isIdentifierComposite() : bool { - return count($this->identifier) > 1; + return isset($this->identifier[1]); } /** From 5ee2f4081918ce0f2a8b4985ea5d420e7c7c3835 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 19:51:24 +0200 Subject: [PATCH 215/275] Removing useless counting of the discriminator map during metadata loading --- lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 6d383df032e..f005e83f4be 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -254,7 +254,7 @@ protected function validateRuntimeMetadata(ClassMetadata $class, ClassMetadata $ // verify inheritance if ( ! $class->isMappedSuperclass && $class->inheritanceType !== InheritanceType::NONE) { if ( ! $parent) { - if (count($class->discriminatorMap) === 0) { + if (! $class->discriminatorMap) { throw MappingException::missingDiscriminatorMap($class->getClassName()); } From 0e38ef55d9ff2c03508906bfb326df0f366f36ba Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 19:52:52 +0200 Subject: [PATCH 216/275] Fixing check of inheritance on a mapped superclass --- lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index f005e83f4be..22b0feeaf26 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -262,7 +262,7 @@ protected function validateRuntimeMetadata(ClassMetadata $class, ClassMetadata $ throw MappingException::missingDiscriminatorColumn($class->getClassName()); } } - } else if ($class->isMappedSuperclass && $class->isRootEntity() && (count($class->discriminatorMap) || $class->discriminatorColumn)) { + } else if (($class->discriminatorMap || $class->discriminatorColumn) && $class->isMappedSuperclass && $class->isRootEntity()) { // second condition is necessary for mapped superclasses in the middle of an inheritance hierarchy throw MappingException::noInheritanceOnMappedSuperClass($class->getClassName()); } From 9bc68a4d7f2bb3daaf2bf2931ae144b1f9a973ea Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 19:55:41 +0200 Subject: [PATCH 217/275] Removing useless counting on whether subclasses are present --- lib/Doctrine/ORM/Mapping/EntityClassMetadata.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php b/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php index 39226996e8b..57bb4133c32 100644 --- a/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/EntityClassMetadata.php @@ -249,7 +249,7 @@ public function addSubClass(SubClassMetadata $subClassMetadata) : void */ public function hasSubClasses() : bool { - return count($this->subClasses) > 0; + return (bool) $this->subClasses; } /** From 87e7cfe888c05eba41cf12213ea2a2ecd0dd4a00 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 19:57:35 +0200 Subject: [PATCH 218/275] Removed counting of local variable when generating filter clauses for many to many collections --- lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php index bf57ea668e9..32fdaaf2903 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php @@ -368,7 +368,7 @@ protected function generateFilterConditionSQL(ClassMetadata $targetEntity, $targ $filterSql = implode(' AND ', $filterClauses); - return count($filterClauses) > 1 + return isset($filterClauses[1]) ? '(' . $filterSql . ')' : $filterSql ; From 58787deee4de826ed29c93d981443a30883333e8 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 19:59:34 +0200 Subject: [PATCH 219/275] Removing counting from `getSelectConditionStatementSQL` --- lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 0efb384ed95..5ac34ed96d6 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -1705,7 +1705,7 @@ public function getSelectConditionStatementSQL( $selectedColumns = []; $columns = $this->getSelectConditionStatementColumnSQL($field, $association); - if (in_array($comparison, [Comparison::IN, Comparison::NIN]) && count($columns) > 1) { + if (in_array($comparison, [Comparison::IN, Comparison::NIN]) && isset($columns[1])) { // @todo try to support multi-column IN expressions. Example: (col1, col2) IN (('val1A', 'val2A'), ...) throw ORMException::cantUseInOperatorOnCompositeKeys(); } From db19e173d5190c75ba5b99e4a9dee7911e2a8397 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 20:02:56 +0200 Subject: [PATCH 220/275] Removing some useless counting operations from the DQL parser --- lib/Doctrine/ORM/Query/Parser.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/Doctrine/ORM/Query/Parser.php b/lib/Doctrine/ORM/Query/Parser.php index d75637fadb3..ca5130c2cf2 100644 --- a/lib/Doctrine/ORM/Query/Parser.php +++ b/lib/Doctrine/ORM/Query/Parser.php @@ -781,7 +781,7 @@ private function processDeferredPathExpressions() // Build the error message $semanticalError = 'Invalid PathExpression. '; - $semanticalError .= (count($expectedStringTypes) == 1) + $semanticalError .= \count($expectedStringTypes) === 1 ? 'Must be a ' . $expectedStringTypes[0] . '.' : implode(' or ', $expectedStringTypes) . ' expected.'; @@ -798,7 +798,7 @@ private function processDeferredPathExpressions() */ private function processRootEntityAliasSelected() { - if ( ! count($this->identVariableExpressions)) { + if ( ! $this->identVariableExpressions) { return; } @@ -2380,7 +2380,7 @@ public function ConditionalExpression() // Phase 1 AST optimization: Prevent AST\ConditionalExpression // if only one AST\ConditionalTerm is defined - if (count($conditionalTerms) == 1) { + if (\count($conditionalTerms) === 1) { return $conditionalTerms[0]; } @@ -2405,7 +2405,7 @@ public function ConditionalTerm() // Phase 1 AST optimization: Prevent AST\ConditionalTerm // if only one AST\ConditionalFactor is defined - if (count($conditionalFactors) == 1) { + if (\count($conditionalFactors) === 1) { return $conditionalFactors[0]; } @@ -2728,7 +2728,7 @@ public function SimpleArithmeticExpression() // Phase 1 AST optimization: Prevent AST\SimpleArithmeticExpression // if only one AST\ArithmeticTerm is defined - if (count($terms) == 1) { + if (\count($terms) === 1) { return $terms[0]; } @@ -2754,7 +2754,7 @@ public function ArithmeticTerm() // Phase 1 AST optimization: Prevent AST\ArithmeticTerm // if only one AST\ArithmeticFactor is defined - if (count($factors) == 1) { + if (\count($factors) === 1) { return $factors[0]; } From 80e31d72c69787750fac37d2ca0685ee1776103f Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 20:04:35 +0200 Subject: [PATCH 221/275] Removing counting in an iteration when generating aliases --- lib/Doctrine/ORM/Query/QueryExpressionVisitor.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php b/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php index ca12bd4d573..d85cdd9b06c 100644 --- a/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php +++ b/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php @@ -131,10 +131,11 @@ public function walkComparison(Comparison $comparison) } $parameterName = str_replace('.', '_', $comparison->getField()); + $parameterCount = \count($this->parameters); foreach ($this->parameters as $parameter) { if ($parameter->getName() === $parameterName) { - $parameterName .= '_' . count($this->parameters); + $parameterName .= '_' . $parameterCount; break; } } From 65c49f4f7a69d833e117861fcab4a827dfa796ea Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 20:05:37 +0200 Subject: [PATCH 222/275] Removed counting of sql parts when deciding whether to wrap parts in parentheses --- lib/Doctrine/ORM/Query/SqlWalker.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index ecb7c822b13..3d4222eb30d 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -461,7 +461,7 @@ private function generateDiscriminatorColumnConditionSQL(array $dqlAliases) $sql = implode(' AND ', $sqlParts); - return (count($sqlParts) > 1) ? '(' . $sql . ')' : $sql; + return isset($sqlParts[1]) ? '(' . $sql . ')' : $sql; } /** From 6c6cf46d0abd04adb9240b16149c26458e06e332 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 20:06:46 +0200 Subject: [PATCH 223/275] Removed typical `if (count(expr)) {` issue from sql walker --- lib/Doctrine/ORM/Query/SqlWalker.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 3d4222eb30d..ca1169fa0dc 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -1832,7 +1832,7 @@ public function walkWhereClause($whereClause) } } - if (count($filterClauses)) { + if ($filterClauses) { if ($condSql) { $condSql = '(' . $condSql . ') AND '; } From a2f95840e68c1ca2348d3eac20e31b2f790ceffd Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 20:12:21 +0200 Subject: [PATCH 224/275] Avoiding fallback function lookup when counting expression parts in a generic query builder expression --- lib/Doctrine/ORM/Query/Expr/Base.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Doctrine/ORM/Query/Expr/Base.php b/lib/Doctrine/ORM/Query/Expr/Base.php index 23a74b733ab..17be88eff2c 100644 --- a/lib/Doctrine/ORM/Query/Expr/Base.php +++ b/lib/Doctrine/ORM/Query/Expr/Base.php @@ -92,7 +92,7 @@ public function add($arg) */ public function count() { - return count($this->parts); + return \count($this->parts); } /** @@ -100,7 +100,7 @@ public function count() */ public function __toString() { - if ($this->count() == 1) { + if (1 === $this->count()) { return (string) $this->parts[0]; } From 6a6312d15e71f778b8556bf0ed5b6cf05b81c9fa Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 20:13:45 +0200 Subject: [PATCH 225/275] Avoiding fallback function lookup when counting expression parts in an `OrderBy` query builder expression --- lib/Doctrine/ORM/Query/Expr/OrderBy.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Query/Expr/OrderBy.php b/lib/Doctrine/ORM/Query/Expr/OrderBy.php index 5a8261436df..0bae6323d55 100644 --- a/lib/Doctrine/ORM/Query/Expr/OrderBy.php +++ b/lib/Doctrine/ORM/Query/Expr/OrderBy.php @@ -68,7 +68,7 @@ public function add($sort, $order = null) */ public function count() { - return count($this->parts); + return \count($this->parts); } /** From 7f775d17a24bc339abad500bda20c29c59ab3dcb Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Fri, 11 Aug 2017 00:29:54 -0400 Subject: [PATCH 226/275] Moved class metadata binding to proper methods --- .../ORM/Mapping/Driver/AnnotationDriver.php | 742 ++++++++++-------- .../ORM/Functional/Ticket/DDC1404Test.php | 11 +- .../ORM/Mapping/AnnotationDriverTest.php | 33 +- .../Mapping/BasicInheritanceMappingTest.php | 20 - 4 files changed, 436 insertions(+), 370 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index fdb1b01adfb..e57bcbf69c3 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -267,14 +267,6 @@ public function loadMetadataForClass( $metadata ); - // Evaluate Table annotation - if (isset($classAnnotations[Annotation\Table::class])) { - $tableAnnot = $classAnnotations[Annotation\Table::class]; - $table = $this->convertTableAnnotationToTableMetadata($tableAnnot); - - $classMetadata->setTable($table); - } - // Evaluate @Cache annotation if (isset($classAnnotations[Annotation\Cache::class])) { $cacheAnnot = $classAnnotations[Annotation\Cache::class]; @@ -283,296 +275,41 @@ public function loadMetadataForClass( $classMetadata->setCache($cache); } - // Evaluate NamedNativeQueries annotation - if (isset($classAnnotations[Annotation\NamedNativeQueries::class])) { - $namedNativeQueriesAnnot = $classAnnotations[Annotation\NamedNativeQueries::class]; - - foreach ($namedNativeQueriesAnnot->value as $namedNativeQuery) { - $classMetadata->addNamedNativeQuery( - $namedNativeQuery->name, - $namedNativeQuery->query, - [ - 'resultClass' => $namedNativeQuery->resultClass, - 'resultSetMapping' => $namedNativeQuery->resultSetMapping, - ] - ); - } - } - - // Evaluate SqlResultSetMappings annotation - if (isset($classAnnotations[Annotation\SqlResultSetMappings::class])) { - $sqlResultSetMappingsAnnot = $classAnnotations[Annotation\SqlResultSetMappings::class]; - - foreach ($sqlResultSetMappingsAnnot->value as $resultSetMapping) { - $sqlResultSetMapping = $this->convertSqlResultSetMapping($resultSetMapping); - - $classMetadata->addSqlResultSetMapping($sqlResultSetMapping); - } - } - - // Evaluate NamedQueries annotation - if (isset($classAnnotations[Annotation\NamedQueries::class])) { - $namedQueriesAnnot = $classAnnotations[Annotation\NamedQueries::class]; - - if ( ! is_array($namedQueriesAnnot->value)) { - throw new \UnexpectedValueException("@NamedQueries should contain an array of @NamedQuery annotations."); - } - - foreach ($namedQueriesAnnot->value as $namedQuery) { - if ( ! ($namedQuery instanceof Annotation\NamedQuery)) { - throw new \UnexpectedValueException("@NamedQueries should contain an array of @NamedQuery annotations."); - } - - $classMetadata->addNamedQuery($namedQuery->name, $namedQuery->query); - } - } - - // Evaluate InheritanceType annotation - if (isset($classAnnotations[Annotation\InheritanceType::class])) { - $inheritanceTypeAnnot = $classAnnotations[Annotation\InheritanceType::class]; - - $classMetadata->setInheritanceType( - constant(sprintf('%s::%s', Mapping\InheritanceType::class, $inheritanceTypeAnnot->value)) - ); - - if ($classMetadata->inheritanceType !== Mapping\InheritanceType::NONE) { - $discriminatorColumn = new Mapping\DiscriminatorColumnMetadata(); - - $discriminatorColumn->setTableName($classMetadata->getTableName()); - $discriminatorColumn->setColumnName('dtype'); - $discriminatorColumn->setType(Type::getType('string')); - $discriminatorColumn->setLength(255); - - // Evaluate DiscriminatorColumn annotation - if (isset($classAnnotations[Annotation\DiscriminatorColumn::class])) { - /** @var Annotation\DiscriminatorColumn $discriminatorColumnAnnotation */ - $discriminatorColumnAnnotation = $classAnnotations[Annotation\DiscriminatorColumn::class]; - $typeName = ! empty($discriminatorColumnAnnotation->type) - ? $discriminatorColumnAnnotation->type - : 'string'; - - $discriminatorColumn->setType(Type::getType($typeName)); - $discriminatorColumn->setColumnName($discriminatorColumnAnnotation->name); - - if (! empty($discriminatorColumnAnnotation->columnDefinition)) { - $discriminatorColumn->setColumnDefinition($discriminatorColumnAnnotation->columnDefinition); - } - - if (! empty($discriminatorColumnAnnotation->length)) { - $discriminatorColumn->setLength($discriminatorColumnAnnotation->length); - } - } - - $classMetadata->setDiscriminatorColumn($discriminatorColumn); - - // Evaluate DiscriminatorMap annotation - if (isset($classAnnotations[Annotation\DiscriminatorMap::class])) { - $discriminatorMapAnnotation = $classAnnotations[Annotation\DiscriminatorMap::class]; - $discriminatorMap = array_map( - function ($className) use ($classMetadata) { - return $classMetadata->fullyQualifiedClassName($className); - }, - $discriminatorMapAnnotation->value - ); - - $classMetadata->setDiscriminatorMap($discriminatorMap); - } - } - } - - // Evaluate @ChangeTrackingPolicy annotation - if (isset($classAnnotations[Annotation\ChangeTrackingPolicy::class])) { - $changeTrackingAnnot = $classAnnotations[Annotation\ChangeTrackingPolicy::class]; - - $classMetadata->setChangeTrackingPolicy( - constant(sprintf('%s::%s', Mapping\ChangeTrackingPolicy::class, $changeTrackingAnnot->value)) - ); - } - - // Evaluate @EntityListeners annotation - if (isset($classAnnotations[Annotation\EntityListeners::class])) { - /** @var Annotation\EntityListeners $entityListenersAnnot */ - $entityListenersAnnot = $classAnnotations[Annotation\EntityListeners::class]; - - foreach ($entityListenersAnnot->value as $item) { - $listenerClassName = $metadata->fullyQualifiedClassName($item); - - if (! class_exists($listenerClassName)) { - throw Mapping\MappingException::entityListenerClassNotFound( - $listenerClassName, - $classMetadata->getClassName() - ); - } - - $listenerClass = new \ReflectionClass($listenerClassName); - - /* @var $method \ReflectionMethod */ - foreach ($listenerClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { - foreach ($this->getMethodCallbacks($method) as $callback) { - $classMetadata->addEntityListener($callback, $listenerClassName, $method->getName()); - } - } - } - } - - // Evaluate @HasLifecycleCallbacks annotation - if (isset($classAnnotations[Annotation\HasLifecycleCallbacks::class])) { - /* @var $method \ReflectionMethod */ - foreach ($reflectionClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { - foreach ($this->getMethodCallbacks($method) as $callback) { - $classMetadata->addLifecycleCallback($method->getName(), $callback); - } - } - } - // Evaluate annotations on properties/fields /* @var $reflProperty \ReflectionProperty */ - foreach ($reflectionClass->getProperties() as $reflProperty) { - if ($reflProperty->getDeclaringClass()->getName() !== $reflectionClass->getName()) { + foreach ($reflectionClass->getProperties() as $reflectionProperty) { + if ($reflectionProperty->getDeclaringClass()->getName() !== $reflectionClass->getName()) { continue; } - $propertyAnnotations = $this->getPropertyAnnotations($reflProperty); - - // Field can only be annotated with one of: - // @Column, @OneToOne, @OneToMany, @ManyToOne, @ManyToMany, @Embedded - switch (true) { - case isset($propertyAnnotations[Annotation\Column::class]): - // Field found - $fieldMetadata = $this->convertReflectionPropertyToFieldMetadata( - $reflProperty, - $propertyAnnotations - ); - - $classMetadata->addProperty($fieldMetadata); - break; - - case isset($propertyAnnotations[Annotation\OneToOne::class]): - $assocMetadata = $this->convertReflectionPropertyToOneToOneAssociationMetadata( - $reflProperty, - $propertyAnnotations, - $metadata - ); - - $classMetadata->addProperty($assocMetadata); - break; - - case isset($propertyAnnotations[Annotation\ManyToOne::class]): - $assocMetadata = $this->convertReflectionPropertyToManyToOneAssociationMetadata( - $reflProperty, - $propertyAnnotations, - $metadata - ); - - $classMetadata->addProperty($assocMetadata); - break; - - case isset($propertyAnnotations[Annotation\OneToMany::class]): - $assocMetadata = $this->convertReflectionPropertyToOneToManyAssociationMetadata( - $reflProperty, - $propertyAnnotations, - $metadata - ); - - $classMetadata->addProperty($assocMetadata); - break; - - case isset($propertyAnnotations[Annotation\ManyToMany::class]): - $assocMetadata = $this->convertReflectionPropertyToManyToManyAssociationMetadata( - $reflProperty, - $propertyAnnotations, - $metadata - ); - - $classMetadata->addProperty($assocMetadata); - break; - - case isset($propertyAnnotations[Annotation\Embedded::class]): - $embeddedAnnot = $propertyAnnotations[Annotation\Embedded::class]; - - $mapping['fieldName'] = $reflProperty->getName(); - $mapping['class'] = $embeddedAnnot->class; - $mapping['columnPrefix'] = $embeddedAnnot->columnPrefix; - - $classMetadata->mapEmbedded($mapping); - break; - - default: - $property = new Mapping\TransientMetadata($reflProperty->getName()); + $propertyAnnotations = $this->getPropertyAnnotations($reflectionProperty); + $property = $this->convertPropertyAnnotationsToProperty( + $propertyAnnotations, + $reflectionProperty, + $classMetadata + ); - $classMetadata->addProperty($property); - break; + if (! $property) { + continue; } - } - // Evaluate AssociationOverrides annotation - if (isset($classAnnotations[Annotation\AssociationOverrides::class])) { - $associationOverridesAnnot = $classAnnotations[Annotation\AssociationOverrides::class]; - - foreach ($associationOverridesAnnot->value as $associationOverride) { - $fieldName = $associationOverride->name; - $property = $classMetadata->getProperty($fieldName); - - if (! $property) { - throw Mapping\MappingException::invalidOverrideFieldName($classMetadata->getClassName(), $fieldName); - } - - $existingClass = get_class($property); - $override = new $existingClass($fieldName); - - // Check for JoinColumn/JoinColumns annotations - if ($associationOverride->joinColumns) { - $joinColumns = []; - - foreach ($associationOverride->joinColumns as $joinColumnAnnot) { - $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); - } - - $override->setJoinColumns($joinColumns); - } - - // Check for JoinTable annotations - if ($associationOverride->joinTable) { - $joinTableAnnot = $associationOverride->joinTable; - $joinTableMetadata = $this->convertJoinTableAnnotationToJoinTableMetadata($joinTableAnnot); - - $override->setJoinTable($joinTableMetadata); - } - - // Check for inversedBy - if ($associationOverride->inversedBy) { - $override->setInversedBy($associationOverride->inversedBy); - } - - // Check for fetch - if ($associationOverride->fetch) { - $override->setFetchMode( - constant(Mapping\FetchMode::class . '::' . $associationOverride->fetch) - ); - } - - $classMetadata->setPropertyOverride($override); - } + $metadata->addProperty($property); } - // Evaluate AttributeOverrides annotation - if (isset($classAnnotations[Annotation\AttributeOverrides::class])) { - $attributeOverridesAnnot = $classAnnotations[Annotation\AttributeOverrides::class]; - - foreach ($attributeOverridesAnnot->value as $attributeOverrideAnnot) { - $fieldMetadata = $this->convertColumnAnnotationToFieldMetadata( - $attributeOverrideAnnot->column, - $attributeOverrideAnnot->name, - false - ); - - $classMetadata->setPropertyOverride($fieldMetadata); - } - } + $this->attachPropertyOverrides($classAnnotations, $reflectionClass, $metadata); return $classMetadata; } + /** + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $metadata + * + * @return Mapping\ClassMetadata + * + * @throws Mapping\MappingException + */ private function convertClassAnnotationsToClassMetadata( array $classAnnotations, \ReflectionClass $reflectionClass, @@ -637,6 +374,41 @@ private function convertClassAnnotationsToEntityClassMetadata( $metadata->asReadOnly(); } + // Evaluate Table annotation + if (isset($classAnnotations[Annotation\Table::class])) { + $tableAnnot = $classAnnotations[Annotation\Table::class]; + $table = $this->convertTableAnnotationToTableMetadata($tableAnnot); + + $metadata->setTable($table); + } + + // Evaluate @ChangeTrackingPolicy annotation + if (isset($classAnnotations[Annotation\ChangeTrackingPolicy::class])) { + $changeTrackingAnnot = $classAnnotations[Annotation\ChangeTrackingPolicy::class]; + + $metadata->setChangeTrackingPolicy( + constant(sprintf('%s::%s', Mapping\ChangeTrackingPolicy::class, $changeTrackingAnnot->value)) + ); + } + + // Evaluate @InheritanceType annotation + if (isset($classAnnotations[Annotation\InheritanceType::class])) { + $inheritanceTypeAnnot = $classAnnotations[Annotation\InheritanceType::class]; + + $metadata->setInheritanceType( + constant(sprintf('%s::%s', Mapping\InheritanceType::class, $inheritanceTypeAnnot->value)) + ); + + if ($metadata->inheritanceType !== Mapping\InheritanceType::NONE) { + $this->attachDiscriminatorColumn($classAnnotations, $reflectionClass, $metadata); + } + } + + $this->attachNamedQueries($classAnnotations, $reflectionClass, $metadata); + $this->attachNamedNativeQueries($classAnnotations, $reflectionClass, $metadata); + $this->attachLifecycleCallbacks($classAnnotations, $reflectionClass, $metadata); + $this->attachEntityListeners($classAnnotations, $reflectionClass, $metadata); + return $metadata; } @@ -665,6 +437,11 @@ private function convertClassAnnotationsToMappedSuperClassMetadata( $metadata->isMappedSuperclass = true; $metadata->isEmbeddedClass = false; + $this->attachNamedQueries($classAnnotations, $reflectionClass, $metadata); + $this->attachNamedNativeQueries($classAnnotations, $reflectionClass, $metadata); + $this->attachLifecycleCallbacks($classAnnotations, $reflectionClass, $metadata); + $this->attachEntityListeners($classAnnotations, $reflectionClass, $metadata); + return $metadata; } @@ -688,44 +465,61 @@ private function convertClassAnnotationsToEmbeddableClassMetadata( } /** - * @param Annotation\SqlResultSetMapping $resultSetMapping + * @param array $propertyAnnotations + * @param \ReflectionProperty $reflectionProperty + * @param Mapping\ClassMetadata $metadata * - * @return array + * @todo guilhermeblanco Remove nullable typehint once embeddables are back + * + * @return Mapping\Property|null */ - private function convertSqlResultSetMapping(Annotation\SqlResultSetMapping $resultSetMapping) + private function convertPropertyAnnotationsToProperty( + array $propertyAnnotations, + \ReflectionProperty $reflectionProperty, + Mapping\ClassMetadata $metadata + ) : ?Mapping\Property { - $entities = []; + switch (true) { + case isset($propertyAnnotations[Annotation\Column::class]): + return $this->convertReflectionPropertyToFieldMetadata( + $reflectionProperty, + $propertyAnnotations + ); - foreach ($resultSetMapping->entities as $entityResultAnnot) { - $entityResult = [ - 'fields' => [], - 'entityClass' => $entityResultAnnot->entityClass, - 'discriminatorColumn' => $entityResultAnnot->discriminatorColumn, - ]; + case isset($propertyAnnotations[Annotation\OneToOne::class]): + return $this->convertReflectionPropertyToOneToOneAssociationMetadata( + $reflectionProperty, + $propertyAnnotations, + $metadata + ); - foreach ($entityResultAnnot->fields as $fieldResultAnnot) { - $entityResult['fields'][] = [ - 'name' => $fieldResultAnnot->name, - 'column' => $fieldResultAnnot->column - ]; - } + case isset($propertyAnnotations[Annotation\ManyToOne::class]): + return $this->convertReflectionPropertyToManyToOneAssociationMetadata( + $reflectionProperty, + $propertyAnnotations, + $metadata + ); - $entities[] = $entityResult; - } + case isset($propertyAnnotations[Annotation\OneToMany::class]): + return $this->convertReflectionPropertyToOneToManyAssociationMetadata( + $reflectionProperty, + $propertyAnnotations, + $metadata + ); - $columns = []; + case isset($propertyAnnotations[Annotation\ManyToMany::class]): + return $this->convertReflectionPropertyToManyToManyAssociationMetadata( + $reflectionProperty, + $propertyAnnotations, + $metadata + ); - foreach ($resultSetMapping->columns as $columnResultAnnot) { - $columns[] = [ - 'name' => $columnResultAnnot->name, - ]; - } + case isset($propertyAnnotations[Annotation\Embedded::class]): + return null; - return [ - 'name' => $resultSetMapping->name, - 'entities' => $entities, - 'columns' => $columns - ]; + default: + return new Mapping\TransientMetadata($reflectionProperty->getName()); + } } private function convertReflectionPropertyToFieldMetadata( @@ -1216,6 +1010,328 @@ private function convertCacheAnnotationToCacheMetadata( return new Mapping\CacheMetadata($usage, $region); } + /** + * @param Annotation\SqlResultSetMapping $resultSetMapping + * + * @return array + */ + private function convertSqlResultSetMapping(Annotation\SqlResultSetMapping $resultSetMapping) + { + $entities = []; + + foreach ($resultSetMapping->entities as $entityResultAnnot) { + $entityResult = [ + 'fields' => [], + 'entityClass' => $entityResultAnnot->entityClass, + 'discriminatorColumn' => $entityResultAnnot->discriminatorColumn, + ]; + + foreach ($entityResultAnnot->fields as $fieldResultAnnot) { + $entityResult['fields'][] = [ + 'name' => $fieldResultAnnot->name, + 'column' => $fieldResultAnnot->column + ]; + } + + $entities[] = $entityResult; + } + + $columns = []; + + foreach ($resultSetMapping->columns as $columnResultAnnot) { + $columns[] = [ + 'name' => $columnResultAnnot->name, + ]; + } + + return [ + 'name' => $resultSetMapping->name, + 'entities' => $entities, + 'columns' => $columns + ]; + } + + /** + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $metadata + * + * @return void + * + * @throws Mapping\MappingException + */ + private function attachDiscriminatorColumn( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $metadata + ) : void + { + $discriminatorColumn = new Mapping\DiscriminatorColumnMetadata(); + + $discriminatorColumn->setTableName($metadata->getTableName()); + $discriminatorColumn->setColumnName('dtype'); + $discriminatorColumn->setType(Type::getType('string')); + $discriminatorColumn->setLength(255); + + // Evaluate DiscriminatorColumn annotation + if (isset($classAnnotations[Annotation\DiscriminatorColumn::class])) { + /** @var Annotation\DiscriminatorColumn $discriminatorColumnAnnotation */ + $discriminatorColumnAnnotation = $classAnnotations[Annotation\DiscriminatorColumn::class]; + $typeName = ! empty($discriminatorColumnAnnotation->type) + ? $discriminatorColumnAnnotation->type + : 'string'; + + $discriminatorColumn->setType(Type::getType($typeName)); + $discriminatorColumn->setColumnName($discriminatorColumnAnnotation->name); + + if (! empty($discriminatorColumnAnnotation->columnDefinition)) { + $discriminatorColumn->setColumnDefinition($discriminatorColumnAnnotation->columnDefinition); + } + + if (! empty($discriminatorColumnAnnotation->length)) { + $discriminatorColumn->setLength($discriminatorColumnAnnotation->length); + } + } + + $metadata->setDiscriminatorColumn($discriminatorColumn); + + // Evaluate DiscriminatorMap annotation + if (isset($classAnnotations[Annotation\DiscriminatorMap::class])) { + $discriminatorMapAnnotation = $classAnnotations[Annotation\DiscriminatorMap::class]; + $discriminatorMap = array_map( + function ($className) use ($metadata) { + return $metadata->fullyQualifiedClassName($className); + }, + $discriminatorMapAnnotation->value + ); + + $metadata->setDiscriminatorMap($discriminatorMap); + } + } + + /** + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $metadata + * + * @return void + * + * @throws \UnexpectedValueException + * @throws Mapping\MappingException + */ + private function attachNamedQueries( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $metadata + ) : void + { + // Evaluate @NamedQueries annotation + if (isset($classAnnotations[Annotation\NamedQueries::class])) { + $namedQueriesAnnot = $classAnnotations[Annotation\NamedQueries::class]; + + if (! is_array($namedQueriesAnnot->value)) { + throw new \UnexpectedValueException("@NamedQueries should contain an array of @NamedQuery annotations."); + } + + foreach ($namedQueriesAnnot->value as $namedQuery) { + if (! ($namedQuery instanceof Annotation\NamedQuery)) { + throw new \UnexpectedValueException("@NamedQueries should contain an array of @NamedQuery annotations."); + } + + $metadata->addNamedQuery($namedQuery->name, $namedQuery->query); + } + } + } + + /** + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $metadata + * + * @return void + */ + private function attachNamedNativeQueries( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $metadata + ) : void + { + // Evaluate @NamedNativeQueries annotation + if (isset($classAnnotations[Annotation\NamedNativeQueries::class])) { + $namedNativeQueriesAnnot = $classAnnotations[Annotation\NamedNativeQueries::class]; + + foreach ($namedNativeQueriesAnnot->value as $namedNativeQuery) { + $metadata->addNamedNativeQuery( + $namedNativeQuery->name, + $namedNativeQuery->query, + [ + 'resultClass' => $namedNativeQuery->resultClass, + 'resultSetMapping' => $namedNativeQuery->resultSetMapping, + ] + ); + } + } + + // Evaluate @SqlResultSetMappings annotation + if (isset($classAnnotations[Annotation\SqlResultSetMappings::class])) { + $sqlResultSetMappingsAnnot = $classAnnotations[Annotation\SqlResultSetMappings::class]; + + foreach ($sqlResultSetMappingsAnnot->value as $resultSetMapping) { + $sqlResultSetMapping = $this->convertSqlResultSetMapping($resultSetMapping); + + $metadata->addSqlResultSetMapping($sqlResultSetMapping); + } + } + } + + /** + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $metadata + * + * @return void + */ + private function attachLifecycleCallbacks( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $metadata + ) : void + { + // Evaluate @HasLifecycleCallbacks annotation + if (isset($classAnnotations[Annotation\HasLifecycleCallbacks::class])) { + /* @var $method \ReflectionMethod */ + foreach ($reflectionClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { + foreach ($this->getMethodCallbacks($method) as $callback) { + $metadata->addLifecycleCallback($method->getName(), $callback); + } + } + } + } + + /** + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $metadata + * + * @return void + * + * @throws \ReflectionException + * @throws Mapping\MappingException + */ + private function attachEntityListeners( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $metadata + ) : void + { + // Evaluate @EntityListeners annotation + if (isset($classAnnotations[Annotation\EntityListeners::class])) { + /** @var Annotation\EntityListeners $entityListenersAnnot */ + $entityListenersAnnot = $classAnnotations[Annotation\EntityListeners::class]; + + foreach ($entityListenersAnnot->value as $item) { + $listenerClassName = $metadata->fullyQualifiedClassName($item); + + if (! class_exists($listenerClassName)) { + throw Mapping\MappingException::entityListenerClassNotFound( + $listenerClassName, + $metadata->getClassName() + ); + } + + $listenerClass = new \ReflectionClass($listenerClassName); + + /* @var $method \ReflectionMethod */ + foreach ($listenerClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { + foreach ($this->getMethodCallbacks($method) as $callback) { + $metadata->addEntityListener($callback, $listenerClassName, $method->getName()); + } + } + } + } + } + + /** + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $metadata + * + * @return void + * + * @throws Mapping\MappingException + */ + private function attachPropertyOverrides( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $metadata + ) : void + { + // Evaluate AssociationOverrides annotation + if (isset($classAnnotations[Annotation\AssociationOverrides::class])) { + $associationOverridesAnnot = $classAnnotations[Annotation\AssociationOverrides::class]; + + foreach ($associationOverridesAnnot->value as $associationOverride) { + $fieldName = $associationOverride->name; + $property = $metadata->getProperty($fieldName); + + if (! $property) { + throw Mapping\MappingException::invalidOverrideFieldName($metadata->getClassName(), $fieldName); + } + + $existingClass = get_class($property); + $override = new $existingClass($fieldName); + + // Check for JoinColumn/JoinColumns annotations + if ($associationOverride->joinColumns) { + $joinColumns = []; + + foreach ($associationOverride->joinColumns as $joinColumnAnnot) { + $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); + } + + $override->setJoinColumns($joinColumns); + } + + // Check for JoinTable annotations + if ($associationOverride->joinTable) { + $joinTableAnnot = $associationOverride->joinTable; + $joinTableMetadata = $this->convertJoinTableAnnotationToJoinTableMetadata($joinTableAnnot); + + $override->setJoinTable($joinTableMetadata); + } + + // Check for inversedBy + if ($associationOverride->inversedBy) { + $override->setInversedBy($associationOverride->inversedBy); + } + + // Check for fetch + if ($associationOverride->fetch) { + $override->setFetchMode( + constant(Mapping\FetchMode::class . '::' . $associationOverride->fetch) + ); + } + + $metadata->setPropertyOverride($override); + } + } + + // Evaluate AttributeOverrides annotation + if (isset($classAnnotations[Annotation\AttributeOverrides::class])) { + $attributeOverridesAnnot = $classAnnotations[Annotation\AttributeOverrides::class]; + + foreach ($attributeOverridesAnnot->value as $attributeOverrideAnnot) { + $fieldMetadata = $this->convertColumnAnnotationToFieldMetadata( + $attributeOverrideAnnot->column, + $attributeOverrideAnnot->name, + false + ); + + $metadata->setPropertyOverride($fieldMetadata); + } + } + } + /** * Attempts to resolve the cascade modes. * diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1404Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1404Test.php index c0af12480b3..03b346c5633 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1404Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1404Test.php @@ -63,7 +63,12 @@ public function loadFixtures() } /** - * @ORM\MappedSuperclass + * @ORM\Entity() + * @ORM\InheritanceType("JOINED") + * @ORM\DiscriminatorMap({ + * "parent" = "DDC1404ParentEntity", + * "child" = "DDC1404ChildEntity" + * }) * * @ORM\NamedQueries({ * @ORM\NamedQuery(name="all", query="SELECT p FROM __CLASS__ p"), @@ -72,7 +77,6 @@ public function loadFixtures() */ class DDC1404ParentEntity { - /** * @ORM\Id * @ORM\Column(type="integer") @@ -87,7 +91,6 @@ public function getId() { return $this->id; } - } /** @@ -100,7 +103,6 @@ public function getId() */ class DDC1404ChildEntity extends DDC1404ParentEntity { - /** * @ORM\Column(type="string") */ @@ -129,5 +131,4 @@ public function setName($name) { $this->name = $name; } - } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php index c957e6422b1..ad1fba9dcf5 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php @@ -178,27 +178,6 @@ public function testInvalidMappedSuperClassWithManyToManyAssociation() $usingInvalidMsc = $factory->getMetadataFor(UsingInvalidMappedSuperClass::class); } - /** - * @group DDC-1050 - */ - public function testInvalidMappedSuperClassWithInheritanceInformation() - { - $annotationDriver = $this->loadDriver(); - - $em = $this->getTestEntityManager(); - $em->getConfiguration()->setMetadataDriverImpl($annotationDriver); - $factory = new ClassMetadataFactory(); - $factory->setEntityManager($em); - - $this->expectException(MappingException::class); - $this->expectExceptionMessage( - "It is not supported to define inheritance information on a mapped " . - "superclass '" . MappedSuperClassInheritance::class . "'." - ); - - $usingInvalidMsc = $factory->getMetadataFor(MappedSuperClassInheritance::class); - } - /** * @group DDC-1034 */ @@ -298,20 +277,10 @@ class UsingInvalidMappedSuperClass extends InvalidMappedSuperClass private $id; } -/** - * @ORM\MappedSuperclass - * @ORM\InheritanceType("JOINED") - * @ORM\DiscriminatorMap({"test" = "ColumnWithoutType"}) - */ -class MappedSuperClassInheritance -{ - -} - /** * @ORM\Entity */ -class ColumnWithoutType extends MappedSuperClassInheritance +class ColumnWithoutType { /** @ORM\Id @ORM\Column */ public $id; diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index 0bf9701e06d..108147c7d09 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -190,22 +190,6 @@ public function testMultipleMappedSuperclasses() $class->getProperty('id')->getValueGenerator()->getDefinition() ); } - - /** - * Ensure indexes are inherited from the mapped superclass. - * - * @group DDC-3418 - */ - public function testMappedSuperclassIndex() - { - /* @var $ClassMetadata class */ - $class = $this->cmf->getMetadataFor(EntityIndexSubClass::class); - - self::assertNotNull($class->getProperty('mapped1')); - self::assertArrayHasKey('IDX_NAME_INDEX', $class->table->getUniqueConstraints()); - self::assertArrayHasKey('IDX_MAPPED1_INDEX', $class->table->getUniqueConstraints()); - self::assertArrayHasKey('IDX_MAPPED2_INDEX', $class->table->getIndexes()); - } } class TransientBaseClass { @@ -247,10 +231,6 @@ class EntitySubClass2 extends MappedSuperclassBase { /** * @ORM\MappedSuperclass - * @ORM\Table( - * uniqueConstraints={@ORM\UniqueConstraint(name="IDX_MAPPED1_INDEX",columns={"mapped1"})}, - * indexes={@ORM\Index(name="IDX_MAPPED2_INDEX", columns={"mapped2"})} - * ) */ class MappedSuperclassBaseIndex { /** @ORM\Column(type="string") */ From be91c6b70f4eb657f7faf4d5faeb4f30ba386adf Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 20:17:01 +0200 Subject: [PATCH 227/275] Reverting dangerous index lookup operations - resultset may contain gaps in the results --- lib/Doctrine/ORM/AbstractQuery.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/Doctrine/ORM/AbstractQuery.php b/lib/Doctrine/ORM/AbstractQuery.php index 028f995df34..f61e568af30 100644 --- a/lib/Doctrine/ORM/AbstractQuery.php +++ b/lib/Doctrine/ORM/AbstractQuery.php @@ -757,11 +757,11 @@ public function getOneOrNullResult($hydrationMode = null) return $result; } - if (isset($result[1])) { + if (count($result) > 1) { throw new NonUniqueResultException; } - return $result[0]; + return array_shift($result); } /** @@ -791,11 +791,11 @@ public function getSingleResult($hydrationMode = null) return $result; } - if (isset($result[1])) { + if (count($result) > 1) { throw new NonUniqueResultException; } - return $result[0]; + return array_shift($result); } /** From 200e53a27c88ed8bb9342e9e27349ec5b045d836 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 20:28:57 +0200 Subject: [PATCH 228/275] Replacing possible O(n^2) operation from `PersistentCollection` diffing operations --- lib/Doctrine/ORM/PersistentCollection.php | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/lib/Doctrine/ORM/PersistentCollection.php b/lib/Doctrine/ORM/PersistentCollection.php index 42fa1f5fb41..170569e3249 100644 --- a/lib/Doctrine/ORM/PersistentCollection.php +++ b/lib/Doctrine/ORM/PersistentCollection.php @@ -240,11 +240,12 @@ public function getSnapshot() */ public function getDeleteDiff() { - return array_udiff_assoc( - $this->snapshot, - $this->collection->toArray(), - function($a, $b) { return $a === $b ? 0 : 1; } - ); + $collectionItems = $this->collection->toArray(); + + return \array_values(\array_diff_key( + \array_combine(\array_map('spl_object_hash', $this->snapshot), $this->snapshot), + \array_combine(\array_map('spl_object_hash', $collectionItems), $collectionItems) + )); } /** @@ -255,11 +256,12 @@ function($a, $b) { return $a === $b ? 0 : 1; } */ public function getInsertDiff() { - return array_udiff_assoc( - $this->collection->toArray(), - $this->snapshot, - function($a, $b) { return $a === $b ? 0 : 1; } - ); + $collectionItems = $this->collection->toArray(); + + return \array_values(\array_diff_key( + \array_combine(\array_map('spl_object_hash', $collectionItems), $collectionItems), + \array_combine(\array_map('spl_object_hash', $this->snapshot), $this->snapshot) + )); } /** From 1ac31fcbc251a749237feb837b4e4f1c3f7bf207 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 20:32:12 +0200 Subject: [PATCH 229/275] Removing useless checking for never-used parameter, inlining merge operation --- lib/Doctrine/ORM/UnitOfWork.php | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 5436bc02a48..98047cd0ae7 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -1045,16 +1045,10 @@ private function executeDeletions($class) /** * Gets the commit order. * - * @param array|null $entityChangeSet - * * @return array */ - private function getCommitOrder(array $entityChangeSet = null) + private function getCommitOrder() { - if ($entityChangeSet === null) { - $entityChangeSet = array_merge($this->entityInsertions, $this->entityUpdates, $this->entityDeletions); - } - $calc = new Internal\CommitOrderCalculator(); // See if there are any new classes in the changeset, that are not in the @@ -1064,7 +1058,7 @@ private function getCommitOrder(array $entityChangeSet = null) // are not yet available. $newNodes = []; - foreach ($entityChangeSet as $entity) { + foreach (\array_merge($this->entityInsertions, $this->entityUpdates, $this->entityDeletions) as $entity) { $class = $this->em->getClassMetadata(get_class($entity)); if ($calc->hasNode($class->getClassName())) { From 3e2ad0078b2d90af9d0a56db41824daba37ee0f7 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 20:34:07 +0200 Subject: [PATCH 230/275] Removing useless variable --- lib/Doctrine/ORM/UnitOfWork.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 98047cd0ae7..d3838f1a115 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -2918,9 +2918,7 @@ public function hasPendingInsertions() */ public function size() { - $countArray = array_map('count', $this->identityMap); - - return array_sum($countArray); + return \array_sum(\array_map('count', $this->identityMap)); } /** From b69ddf8a9704d8fd5d6fd863e3c3d47dc8f19006 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 20:38:55 +0200 Subject: [PATCH 231/275] Removing useless post-array-population association hydration via `array_walk()` --- lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php b/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php index a72d50ef344..bae94a6fb01 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php +++ b/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php @@ -82,12 +82,12 @@ public function loadCacheEntry( foreach ($entityEntries as $index => $entityEntry) { $data = $entityEntry->resolveAssociationEntries($this->em); - $list[$index] = $this->uow->createEntity($entityEntry->class, $data, self::$hints); - } + $entity = $this->uow->createEntity($entityEntry->class, $data, self::$hints); - array_walk($list, function($entity, $index) use ($collection) { $collection->hydrateSet($index, $entity); - }); + + $list[$index] = $entity; + } $this->uow->hydrationComplete(); From 9351a20ee684e3964887b994205e03ca97137b4a Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 20:44:27 +0200 Subject: [PATCH 232/275] Removing useless `array_key_exists()` calls, using `??` operator instead --- lib/Doctrine/ORM/Cache/DefaultQueryCache.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Doctrine/ORM/Cache/DefaultQueryCache.php b/lib/Doctrine/ORM/Cache/DefaultQueryCache.php index e49e882e2ef..0bc4bbffb0b 100644 --- a/lib/Doctrine/ORM/Cache/DefaultQueryCache.php +++ b/lib/Doctrine/ORM/Cache/DefaultQueryCache.php @@ -109,7 +109,7 @@ public function get(QueryCacheKey $key, ResultSetMapping $rsm, array $hints = [] // @TODO - move to cache hydration component foreach ($entry->result as $index => $entry) { - $entityEntry = is_array($entries) && array_key_exists($index, $entries) ? $entries[$index] : null; + $entityEntry = is_array($entries) ? ($entries[$index] ?? null) : null; if ($entityEntry === null) { if ($this->cacheLogger !== null) { @@ -182,7 +182,7 @@ public function get(QueryCacheKey $key, ResultSetMapping $rsm, array $hints = [] $collection = []; foreach ($assoc['list'] as $assocIndex => $assocId) { - $assocEntry = is_array($assocEntries) && array_key_exists($assocIndex, $assocEntries) ? $assocEntries[$assocIndex] : null; + $assocEntry = is_array($assocEntries) ? ($assocEntries[$assocIndex] ?? null) : null; if ($assocEntry === null) { if ($this->cacheLogger !== null) { From 389f5df376e9e0aec568c8293012ac03e69fea48 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 11 Aug 2017 20:46:05 +0200 Subject: [PATCH 233/275] Removing `is_array` check on a type that can only have two possible states - using `instanceof` instead --- .../Cache/Persister/Collection/AbstractCollectionPersister.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php b/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php index 5a24ca81300..0e3ebe72932 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php @@ -5,6 +5,7 @@ namespace Doctrine\ORM\Cache\Persister\Collection; +use Doctrine\Common\Collections\Collection; use Doctrine\Common\Collections\Criteria; use Doctrine\ORM\Cache\EntityCacheKey; use Doctrine\ORM\Cache\CollectionCacheKey; @@ -165,7 +166,7 @@ public function storeCollectionCache(CollectionCacheKey $key, $elements) // Only preserve ordering if association configured it if (! ($association instanceof ToManyAssociationMetadata && $association->getIndexedBy())) { // Elements may be an array or a Collection - $elements = array_values(is_array($elements) ? $elements : $elements->getValues()); + $elements = \array_values($elements instanceof Collection ? $elements->getValues() : $elements); } $entry = $this->hydrator->buildCacheEntry($this->targetEntity, $key, $elements); From a7d1bd72dc030599989882a97c4f70833747df0f Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Sat, 12 Aug 2017 00:15:26 -0400 Subject: [PATCH 234/275] TableMetadata should only exist if ClassMetadata has a table. Started some concept work around Mapping Binders. --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 11 +- .../ORM/Mapping/ClassMetadataFactory.php | 40 - .../Driver/Annotation/AnnotationDriver.php | 1583 +++++++++++++++++ .../Binder/EmbeddableClassMetadataBinder.php | 91 + .../Binder/EntityClassMetadataBinder.php | 101 ++ .../Binder/MappedSuperClassMetadataBinder.php | 99 ++ .../ORM/Mapping/Driver/AnnotationDriver.php | 231 ++- .../ORM/Mapping/Driver/DatabaseDriver.php | 11 +- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 106 +- lib/Doctrine/ORM/Mapping/TableMetadata.php | 12 + lib/Doctrine/ORM/Tools/EntityGenerator.php | 2 +- .../ORM/Functional/Ticket/DDC3785Test.php | 1 + .../ORM/Hydration/ResultSetMappingTest.php | 3 + .../Tests/ORM/Mapping/ClassMetadataTest.php | 71 +- .../Tests/ORM/Tools/EntityGeneratorTest.php | 58 +- .../Export/XmlClassMetadataExporterTest.php | 6 + 16 files changed, 2224 insertions(+), 202 deletions(-) create mode 100644 lib/Doctrine/ORM/Mapping/Driver/Annotation/AnnotationDriver.php create mode 100644 lib/Doctrine/ORM/Mapping/Driver/Annotation/Binder/EmbeddableClassMetadataBinder.php create mode 100644 lib/Doctrine/ORM/Mapping/Driver/Annotation/Binder/EntityClassMetadataBinder.php create mode 100644 lib/Doctrine/ORM/Mapping/Driver/Annotation/Binder/MappedSuperClassMetadataBinder.php diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index eae1eacaa25..40e1321b1f1 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -229,8 +229,6 @@ public function __construct( parent::__construct($entityName, $metadataBuildingContext); $this->namingStrategy = $metadataBuildingContext->getNamingStrategy(); - - $this->setTable(new TableMetadata()); } /** @@ -730,11 +728,6 @@ protected function validateAndCompleteAssociationMapping(AssociationMetadata $pr $property->setOwningSide($property->getMappedBy() === null); $property->setTargetEntity($targetEntity); - // Mandatory and optional attributes for either side - if ($property->getMappedBy()) { - $property->setOwningSide(false); - } - // Complete id mapping if ($property->isPrimaryKey()) { if ($property->isOrphanRemoval()) { @@ -874,9 +867,7 @@ protected function validateAndCompleteToOneAssociationMetadata(ToOneAssociationM */ protected function validateAndCompleteToManyAssociationMetadata(ToManyAssociationMetadata $property) { - if ($property->isPrimaryKey()) { - throw MappingException::illegalToManyIdentifierAssociation($this->className, $property->getName()); - } + // Do nothing } /** diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 22b0feeaf26..50a0ca85ad2 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -118,10 +118,6 @@ protected function doLoadMetadata( if ($parent) { $classMetadata->setParent($parent); - if ($parent->inheritanceType === InheritanceType::SINGLE_TABLE) { - $classMetadata->setTable($parent->table); - } - $this->addInheritedProperties($classMetadata, $parent); $classMetadata->setInheritanceType($parent->inheritanceType); @@ -150,11 +146,6 @@ protected function doLoadMetadata( $this->completeIdentifierGeneratorMappings($classMetadata); if ($parent) { - if ($parent->inheritanceType === InheritanceType::SINGLE_TABLE) { - $classMetadata->setTable($parent->table); - } - - $this->addInheritedIndexes($classMetadata, $parent); $this->addInheritedNamedQueries($classMetadata, $parent); if ($parent->getCache()) { @@ -401,37 +392,6 @@ private function addInheritedProperties(ClassMetadata $subClass, ClassMetadata $ } } - /** - * Copy the table indices from the parent class superclass to the child class - * - * @param ClassMetadata $subClass - * @param ClassMetadata $parentClass - * - * @return void - */ - private function addInheritedIndexes(ClassMetadata $subClass, ClassMetadata $parentClass) : void - { - if ( ! $parentClass->isMappedSuperclass) { - return; - } - - foreach ($parentClass->table->getIndexes() as $indexName => $index) { - if ($subClass->table->hasIndex($indexName)) { - continue; - } - - $subClass->table->addIndex($index); - } - - foreach ($parentClass->table->getUniqueConstraints() as $constraintName => $constraint) { - if ($subClass->table->hasUniqueConstraint($constraintName)) { - continue; - } - - $subClass->table->addUniqueConstraint($constraint); - } - } - /** * Adds inherited named queries to the subclass mapping. * diff --git a/lib/Doctrine/ORM/Mapping/Driver/Annotation/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/Annotation/AnnotationDriver.php new file mode 100644 index 00000000000..ae57cc6a87e --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Driver/Annotation/AnnotationDriver.php @@ -0,0 +1,1583 @@ + + * @author Guilherme Blanco + * @author Jonathan H. Wage + * @author Roman Borschel + */ +class AnnotationDriver implements Mapping\Driver\MappingDriver +{ + /** + * {@inheritdoc} + */ + protected $entityAnnotationClasses = [ + Annotation\Entity::class => 1, + Annotation\MappedSuperclass::class => 2, + Annotation\Embeddable::class => 3, + ]; + + /** + * The AnnotationReader. + * + * @var AnnotationReader + */ + protected $reader; + + /** + * The paths where to look for mapping files. + * + * @var array + */ + protected $paths = []; + + /** + * The paths excluded from path where to look for mapping files. + * + * @var array + */ + protected $excludePaths = []; + + /** + * The file extension of mapping documents. + * + * @var string + */ + protected $fileExtension = '.php'; + + /** + * Cache for AnnotationDriver#getAllClassNames(). + * + * @var array|null + */ + protected $classNames; + + /** + * Initializes a new AnnotationDriver that uses the given AnnotationReader for reading + * docblock annotations. + * + * @param AnnotationReader $reader The AnnotationReader to use, duck-typed. + * @param string|array|null $paths One or multiple paths where mapping classes can be found. + */ + public function __construct($reader, $paths = null) + { + $this->reader = $reader; + + if ($paths) { + $this->addPaths((array) $paths); + } + } + + /** + * Appends lookup paths to metadata driver. + * + * @param array $paths + * + * @return void + */ + public function addPaths(array $paths) + { + $this->paths = array_unique(array_merge($this->paths, $paths)); + } + + /** + * Retrieves the defined metadata lookup paths. + * + * @return array + */ + public function getPaths() + { + return $this->paths; + } + + /** + * Append exclude lookup paths to metadata driver. + * + * @param array $paths + */ + public function addExcludePaths(array $paths) + { + $this->excludePaths = array_unique(array_merge($this->excludePaths, $paths)); + } + + /** + * Retrieve the defined metadata lookup exclude paths. + * + * @return array + */ + public function getExcludePaths() + { + return $this->excludePaths; + } + + /** + * Retrieve the current annotation reader + * + * @return AnnotationReader + */ + public function getReader() + { + return $this->reader; + } + + /** + * Gets the file extension used to look for mapping files under. + * + * @return string + */ + public function getFileExtension() + { + return $this->fileExtension; + } + + /** + * Sets the file extension used to look for mapping files under. + * + * @param string $fileExtension The file extension to set. + * + * @return void + */ + public function setFileExtension($fileExtension) + { + $this->fileExtension = $fileExtension; + } + + /** + * Returns whether the class with the specified name is transient. Only non-transient + * classes, that is entities and mapped superclasses, should have their metadata loaded. + * + * A class is non-transient if it is annotated with an annotation + * from the {@see AnnotationDriver::entityAnnotationClasses}. + * + * @param string $className + * + * @return boolean + */ + public function isTransient($className) + { + $classAnnotations = $this->reader->getClassAnnotations(new \ReflectionClass($className)); + + foreach ($classAnnotations as $annot) { + if (isset($this->entityAnnotationClasses[get_class($annot)])) { + return false; + } + } + return true; + } + + /** + * {@inheritDoc} + */ + public function getAllClassNames() + { + if ($this->classNames !== null) { + return $this->classNames; + } + + if (!$this->paths) { + throw Mapping\MappingException::pathRequired(); + } + + $classes = []; + $includedFiles = []; + + foreach ($this->paths as $path) { + if ( ! is_dir($path)) { + throw Mapping\MappingException::fileMappingDriversRequireConfiguredDirectoryPath($path); + } + + $iterator = new \RegexIterator( + new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($path, \FilesystemIterator::SKIP_DOTS), + \RecursiveIteratorIterator::LEAVES_ONLY + ), + '/^.+' . preg_quote($this->fileExtension) . '$/i', + \RecursiveRegexIterator::GET_MATCH + ); + + foreach ($iterator as $file) { + $sourceFile = $file[0]; + + if ( ! preg_match('(^phar:)i', $sourceFile)) { + $sourceFile = realpath($sourceFile); + } + + foreach ($this->excludePaths as $excludePath) { + $exclude = str_replace('\\', '/', realpath($excludePath)); + $current = str_replace('\\', '/', $sourceFile); + + if (strpos($current, $exclude) !== false) { + continue 2; + } + } + + require_once $sourceFile; + + $includedFiles[] = $sourceFile; + } + } + + $declared = get_declared_classes(); + + foreach ($declared as $className) { + $rc = new \ReflectionClass($className); + $sourceFile = $rc->getFileName(); + if (in_array($sourceFile, $includedFiles) && ! $this->isTransient($className)) { + $classes[] = $className; + } + } + + $this->classNames = $classes; + + return $classes; + } + + /** + * {@inheritdoc} + * + * @throws \UnexpectedValueException + * @throws \ReflectionException + * @throws Mapping\MappingException + */ + public function loadMetadataForClass( + string $className, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) : Mapping\ClassMetadata + { + $reflectionClass = $metadata->getReflectionClass(); + + if (! $reflectionClass) { + // this happens when running annotation driver in combination with + // static reflection services. This is not the nicest fix + $reflectionClass = new \ReflectionClass($metadata->getClassName()); + } + + $classAnnotations = $this->getClassAnnotations($reflectionClass); + $classMetadata = $this->convertClassAnnotationsToClassMetadata( + $reflectionClass, + $classAnnotations, + $metadata, + $metadataBuildingContext + ); + + // Evaluate @Cache annotation + if (isset($classAnnotations[Annotation\Cache::class])) { + $cacheAnnot = $classAnnotations[Annotation\Cache::class]; + $cache = $this->convertCacheAnnotationToCacheMetadata($cacheAnnot, $metadata); + + $classMetadata->setCache($cache); + } + + // Evaluate annotations on properties/fields + /* @var $reflProperty \ReflectionProperty */ + foreach ($reflectionClass->getProperties() as $reflectionProperty) { + if ($reflectionProperty->getDeclaringClass()->getName() !== $reflectionClass->getName()) { + continue; + } + + $propertyAnnotations = $this->getPropertyAnnotations($reflectionProperty); + $property = $this->convertPropertyAnnotationsToProperty( + $propertyAnnotations, + $reflectionProperty, + $classMetadata, + $metadataBuildingContext + ); + + if (! $property) { + continue; + } + + $metadata->addProperty($property); + } + + $this->attachPropertyOverrides($classAnnotations, $reflectionClass, $metadata, $metadataBuildingContext); + + return $classMetadata; + } + + /** + * @param \ReflectionClass $reflectionClass + * @param array $classAnnotations + * @param Mapping\ClassMetadata $metadata + * @param Mapping\ClassMetadataBuildingContext $metadataBuildingContext + * + * @return Mapping\ClassMetadata + * + * @throws \UnexpectedValueException + * @throws Mapping\MappingException + */ + private function convertClassAnnotationsToClassMetadata( + \ReflectionClass $reflectionClass, + array $classAnnotations, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) : Mapping\ClassMetadata + { + switch (true) { + case isset($classAnnotations[Annotation\Entity::class]): + $binder = new Binder\EntityClassMetadataBinder( + $reflectionClass, + $classAnnotations, + $metadata, + $metadataBuildingContext + ); + + break; + + case isset($classAnnotations[Annotation\MappedSuperclass::class]): + $binder = new Binder\MappedSuperClassMetadataBinder( + $reflectionClass, + $classAnnotations, + $metadata, + $metadataBuildingContext + ); + break; + + case isset($classAnnotations[Annotation\Embeddable::class]): + $binder = new Binder\EmbeddableClassMetadataBinder( + $reflectionClass, + $classAnnotations, + $metadata, + $metadataBuildingContext + ); + break; + + default: + throw Mapping\MappingException::classIsNotAValidEntityOrMappedSuperClass($reflectionClass->getName()); + } + + return $binder->bind(); + } + + /** + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $metadata + * @param Mapping\ClassMetadataBuildingContext $metadataBuildingContext + * + * @return Mapping\ClassMetadata + * + * @throws Mapping\MappingException + * @throws \UnexpectedValueException + */ + private function convertClassAnnotationsToEntityClassMetadata( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) + { + /** @var Annotation\Entity $entityAnnot */ + $entityAnnot = $classAnnotations[Annotation\Entity::class]; + + if ($entityAnnot->repositoryClass !== null) { + $metadata->setCustomRepositoryClassName( + $metadata->fullyQualifiedClassName($entityAnnot->repositoryClass) + ); + } + + if ($entityAnnot->readOnly) { + $metadata->asReadOnly(); + } + + $metadata->isMappedSuperclass = false; + $metadata->isEmbeddedClass = false; + + $this->attachTable($classAnnotations, $reflectionClass, $metadata, $metadataBuildingContext); + + // Evaluate @ChangeTrackingPolicy annotation + if (isset($classAnnotations[Annotation\ChangeTrackingPolicy::class])) { + $changeTrackingAnnot = $classAnnotations[Annotation\ChangeTrackingPolicy::class]; + + $metadata->setChangeTrackingPolicy( + constant(sprintf('%s::%s', Mapping\ChangeTrackingPolicy::class, $changeTrackingAnnot->value)) + ); + } + + // Evaluate @InheritanceType annotation + if (isset($classAnnotations[Annotation\InheritanceType::class])) { + $inheritanceTypeAnnot = $classAnnotations[Annotation\InheritanceType::class]; + + $metadata->setInheritanceType( + constant(sprintf('%s::%s', Mapping\InheritanceType::class, $inheritanceTypeAnnot->value)) + ); + + if ($metadata->inheritanceType !== Mapping\InheritanceType::NONE) { + $this->attachDiscriminatorColumn($classAnnotations, $reflectionClass, $metadata); + } + } + + $this->attachNamedQueries($classAnnotations, $reflectionClass, $metadata); + $this->attachNamedNativeQueries($classAnnotations, $reflectionClass, $metadata); + $this->attachLifecycleCallbacks($classAnnotations, $reflectionClass, $metadata); + $this->attachEntityListeners($classAnnotations, $reflectionClass, $metadata); + + return $metadata; + } + + /** + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $metadata + * @param Mapping\ClassMetadataBuildingContext $metadataBuildingContext + * + * @return Mapping\ClassMetadata + */ + private function convertClassAnnotationsToMappedSuperClassMetadata( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) : Mapping\ClassMetadata + { + /** @var Annotation\MappedSuperclass $mappedSuperclassAnnot */ + $mappedSuperclassAnnot = $classAnnotations[Annotation\MappedSuperclass::class]; + + if ($mappedSuperclassAnnot->repositoryClass !== null) { + $metadata->setCustomRepositoryClassName( + $metadata->fullyQualifiedClassName($mappedSuperclassAnnot->repositoryClass) + ); + } + + $metadata->isMappedSuperclass = true; + $metadata->isEmbeddedClass = false; + + $this->attachNamedQueries($classAnnotations, $reflectionClass, $metadata); + $this->attachNamedNativeQueries($classAnnotations, $reflectionClass, $metadata); + $this->attachLifecycleCallbacks($classAnnotations, $reflectionClass, $metadata); + $this->attachEntityListeners($classAnnotations, $reflectionClass, $metadata); + + return $metadata; + } + + /** + * @param array $propertyAnnotations + * @param \ReflectionProperty $reflectionProperty + * @param Mapping\ClassMetadata $metadata + * + * @todo guilhermeblanco Remove nullable typehint once embeddables are back + * + * @return Mapping\Property|null + * + * @throws Mapping\MappingException + */ + private function convertPropertyAnnotationsToProperty( + array $propertyAnnotations, + \ReflectionProperty $reflectionProperty, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) : ?Mapping\Property + { + switch (true) { + case isset($propertyAnnotations[Annotation\Column::class]): + return $this->convertReflectionPropertyToFieldMetadata( + $reflectionProperty, + $propertyAnnotations, + $metadata, + $metadataBuildingContext + ); + + case isset($propertyAnnotations[Annotation\OneToOne::class]): + return $this->convertReflectionPropertyToOneToOneAssociationMetadata( + $reflectionProperty, + $propertyAnnotations, + $metadata, + $metadataBuildingContext + ); + + case isset($propertyAnnotations[Annotation\ManyToOne::class]): + return $this->convertReflectionPropertyToManyToOneAssociationMetadata( + $reflectionProperty, + $propertyAnnotations, + $metadata, + $metadataBuildingContext + ); + + case isset($propertyAnnotations[Annotation\OneToMany::class]): + return $this->convertReflectionPropertyToOneToManyAssociationMetadata( + $reflectionProperty, + $propertyAnnotations, + $metadata, + $metadataBuildingContext + ); + + case isset($propertyAnnotations[Annotation\ManyToMany::class]): + return $this->convertReflectionPropertyToManyToManyAssociationMetadata( + $reflectionProperty, + $propertyAnnotations, + $metadata, + $metadataBuildingContext + ); + + case isset($propertyAnnotations[Annotation\Embedded::class]): + return null; + + default: + return new Mapping\TransientMetadata($reflectionProperty->getName()); + } + } + + /** + * @param \ReflectionProperty $reflProperty + * @param array $propertyAnnotations + * @param Mapping\ClassMetadata $metadata + * @param Mapping\ClassMetadataBuildingContext $metadataBuildingContext + * + * @return Mapping\FieldMetadata + * + * @throws Mapping\MappingException + */ + private function convertReflectionPropertyToFieldMetadata( + \ReflectionProperty $reflProperty, + array $propertyAnnotations, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) : Mapping\FieldMetadata + { + $className = $metadata->getClassName(); + $fieldName = $reflProperty->getName(); + $isVersioned = isset($propertyAnnotations[Annotation\Version::class]); + $columnAnnot = $propertyAnnotations[Annotation\Column::class]; + + if ($columnAnnot->type == null) { + throw Mapping\MappingException::propertyTypeIsRequired($className, $fieldName); + } + + $fieldMetadata = $this->convertColumnAnnotationToFieldMetadata($columnAnnot, $fieldName, $isVersioned); + + // Check for Id + if (isset($propertyAnnotations[Annotation\Id::class])) { + $fieldMetadata->setPrimaryKey(true); + } + + // Check for GeneratedValue strategy + if (isset($propertyAnnotations[Annotation\GeneratedValue::class])) { + $generatedValueAnnot = $propertyAnnotations[Annotation\GeneratedValue::class]; + $strategy = strtoupper($generatedValueAnnot->strategy); + $idGeneratorType = constant(sprintf('%s::%s', Mapping\GeneratorType::class, $strategy)); + + if ($idGeneratorType !== Mapping\GeneratorType::NONE) { + $idGeneratorDefinition = []; + + // Check for CustomGenerator/SequenceGenerator/TableGenerator definition + switch (true) { + case isset($propertyAnnotations[Annotation\SequenceGenerator::class]): + $seqGeneratorAnnot = $propertyAnnotations[Annotation\SequenceGenerator::class]; + + $idGeneratorDefinition = [ + 'sequenceName' => $seqGeneratorAnnot->sequenceName, + 'allocationSize' => $seqGeneratorAnnot->allocationSize, + ]; + + break; + + case isset($propertyAnnotations[Annotation\CustomIdGenerator::class]): + $customGeneratorAnnot = $propertyAnnotations[Annotation\CustomIdGenerator::class]; + + $idGeneratorDefinition = [ + 'class' => $customGeneratorAnnot->class, + 'arguments' => $customGeneratorAnnot->arguments, + ]; + + break; + + /* @todo If it is not supported, why does this exist? */ + case isset($propertyAnnotations['Doctrine\ORM\Mapping\TableGenerator']): + throw Mapping\MappingException::tableIdGeneratorNotImplemented($className); + } + + $fieldMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata($idGeneratorType, $idGeneratorDefinition)); + } + } + + return $fieldMetadata; + } + + /** + * @param \ReflectionProperty $reflectionProperty + * @param array $propertyAnnotations + * @param Mapping\ClassMetadata $metadata + * @param Mapping\ClassMetadataBuildingContext $metadataBuildingContext + * + * @return Mapping\OneToOneAssociationMetadata + */ + private function convertReflectionPropertyToOneToOneAssociationMetadata( + \ReflectionProperty $reflectionProperty, + array $propertyAnnotations, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) + { + $className = $metadata->getClassName(); + $fieldName = $reflectionProperty->getName(); + $oneToOneAnnot = $propertyAnnotations[Annotation\OneToOne::class]; + $assocMetadata = new Mapping\OneToOneAssociationMetadata($fieldName); + $targetEntity = $metadata->fullyQualifiedClassName($oneToOneAnnot->targetEntity); + + $assocMetadata->setTargetEntity($targetEntity); + $assocMetadata->setCascade($this->getCascade($className, $fieldName, $oneToOneAnnot->cascade)); + $assocMetadata->setOrphanRemoval($oneToOneAnnot->orphanRemoval); + $assocMetadata->setFetchMode($this->getFetchMode($className, $oneToOneAnnot->fetch)); + + if (! empty($oneToOneAnnot->mappedBy)) { + $assocMetadata->setMappedBy($oneToOneAnnot->mappedBy); + } + + if (! empty($oneToOneAnnot->inversedBy)) { + $assocMetadata->setInversedBy($oneToOneAnnot->inversedBy); + } + + // Check for Id + if (isset($propertyAnnotations[Annotation\Id::class])) { + $assocMetadata->setPrimaryKey(true); + } + + $this->attachAssociationPropertyCache($propertyAnnotations, $reflectionProperty, $assocMetadata, $metadata); + + // Check for JoinColumn/JoinColumns annotations + switch (true) { + case isset($propertyAnnotations[Annotation\JoinColumn::class]): + $joinColumnAnnot = $propertyAnnotations[Annotation\JoinColumn::class]; + + $assocMetadata->addJoinColumn( + $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot) + ); + + break; + + case isset($propertyAnnotations[Annotation\JoinColumns::class]): + $joinColumnsAnnot = $propertyAnnotations[Annotation\JoinColumns::class]; + + foreach ($joinColumnsAnnot->value as $joinColumnAnnot) { + $assocMetadata->addJoinColumn( + $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot) + ); + } + + break; + } + + return $assocMetadata; + } + + /** + * @param \ReflectionProperty $reflectionProperty + * @param array $propertyAnnotations + * @param Mapping\ClassMetadata $metadata + * @param Mapping\ClassMetadataBuildingContext $metadataBuildingContext + * + * @return Mapping\ManyToOneAssociationMetadata + */ + private function convertReflectionPropertyToManyToOneAssociationMetadata( + \ReflectionProperty $reflectionProperty, + array $propertyAnnotations, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) + { + $className = $metadata->getClassName(); + $fieldName = $reflectionProperty->getName(); + $manyToOneAnnot = $propertyAnnotations[Annotation\ManyToOne::class]; + $assocMetadata = new Mapping\ManyToOneAssociationMetadata($fieldName); + $targetEntity = $metadata->fullyQualifiedClassName($manyToOneAnnot->targetEntity); + + $assocMetadata->setTargetEntity($targetEntity); + $assocMetadata->setCascade($this->getCascade($className, $fieldName, $manyToOneAnnot->cascade)); + $assocMetadata->setFetchMode($this->getFetchMode($className, $manyToOneAnnot->fetch)); + + if (! empty($manyToOneAnnot->inversedBy)) { + $assocMetadata->setInversedBy($manyToOneAnnot->inversedBy); + } + + // Check for Id + if (isset($propertyAnnotations[Annotation\Id::class])) { + $assocMetadata->setPrimaryKey(true); + } + + $this->attachAssociationPropertyCache($propertyAnnotations, $reflectionProperty, $assocMetadata, $metadata); + + // Check for JoinColumn/JoinColumns annotations + switch (true) { + case isset($propertyAnnotations[Annotation\JoinColumn::class]): + $joinColumnAnnot = $propertyAnnotations[Annotation\JoinColumn::class]; + + $assocMetadata->addJoinColumn( + $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot) + ); + + break; + + case isset($propertyAnnotations[Annotation\JoinColumns::class]): + $joinColumnsAnnot = $propertyAnnotations[Annotation\JoinColumns::class]; + + foreach ($joinColumnsAnnot->value as $joinColumnAnnot) { + $assocMetadata->addJoinColumn( + $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot) + ); + } + + break; + } + + return $assocMetadata; + } + + /** + * @param \ReflectionProperty $reflectionProperty + * @param array $propertyAnnotations + * @param Mapping\ClassMetadata $metadata + * @param Mapping\ClassMetadataBuildingContext $metadataBuildingContext + * + * @return Mapping\OneToManyAssociationMetadata + * + * @throws Mapping\MappingException + */ + private function convertReflectionPropertyToOneToManyAssociationMetadata( + \ReflectionProperty $reflectionProperty, + array $propertyAnnotations, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) : Mapping\OneToManyAssociationMetadata + { + $className = $metadata->getClassName(); + $fieldName = $reflectionProperty->getName(); + $oneToManyAnnot = $propertyAnnotations[Annotation\OneToMany::class]; + $assocMetadata = new Mapping\OneToManyAssociationMetadata($fieldName); + $targetEntity = $metadata->fullyQualifiedClassName($oneToManyAnnot->targetEntity); + + $assocMetadata->setTargetEntity($targetEntity); + $assocMetadata->setCascade($this->getCascade($className, $fieldName, $oneToManyAnnot->cascade)); + $assocMetadata->setOrphanRemoval($oneToManyAnnot->orphanRemoval); + $assocMetadata->setFetchMode($this->getFetchMode($className, $oneToManyAnnot->fetch)); + + if (! empty($oneToManyAnnot->mappedBy)) { + $assocMetadata->setMappedBy($oneToManyAnnot->mappedBy); + } + + if (! empty($oneToManyAnnot->indexBy)) { + $assocMetadata->setIndexedBy($oneToManyAnnot->indexBy); + } + + // Check for OrderBy + if (isset($propertyAnnotations[Annotation\OrderBy::class])) { + $orderByAnnot = $propertyAnnotations[Annotation\OrderBy::class]; + + $assocMetadata->setOrderBy($orderByAnnot->value); + } + + // Check for Id + if (isset($propertyAnnotations[Annotation\Id::class])) { + throw Mapping\MappingException::illegalToManyIdentifierAssociation($className, $fieldName); + } + + $this->attachAssociationPropertyCache($propertyAnnotations, $reflectionProperty, $assocMetadata, $metadata); + + return $assocMetadata; + } + + /** + * @param \ReflectionProperty $reflectionProperty + * @param array $propertyAnnotations + * @param Mapping\ClassMetadata $metadata + * @param Mapping\ClassMetadataBuildingContext $metadataBuildingContext + * + * @return Mapping\ManyToManyAssociationMetadata + * + * @throws Mapping\MappingException + */ + private function convertReflectionPropertyToManyToManyAssociationMetadata( + \ReflectionProperty $reflectionProperty, + array $propertyAnnotations, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) : Mapping\ManyToManyAssociationMetadata + { + $className = $metadata->getClassName(); + $fieldName = $reflectionProperty->getName(); + $manyToManyAnnot = $propertyAnnotations[Annotation\ManyToMany::class]; + $assocMetadata = new Mapping\ManyToManyAssociationMetadata($fieldName); + $targetEntity = $metadata->fullyQualifiedClassName($manyToManyAnnot->targetEntity); + + $assocMetadata->setTargetEntity($targetEntity); + $assocMetadata->setCascade($this->getCascade($className, $fieldName, $manyToManyAnnot->cascade)); + $assocMetadata->setOrphanRemoval($manyToManyAnnot->orphanRemoval); + $assocMetadata->setFetchMode($this->getFetchMode($className, $manyToManyAnnot->fetch)); + + if (! empty($manyToManyAnnot->mappedBy)) { + $assocMetadata->setMappedBy($manyToManyAnnot->mappedBy); + } + + if (! empty($manyToManyAnnot->inversedBy)) { + $assocMetadata->setInversedBy($manyToManyAnnot->inversedBy); + } + + if (! empty($manyToManyAnnot->indexBy)) { + $assocMetadata->setIndexedBy($manyToManyAnnot->indexBy); + } + + // Check for JoinTable + if (isset($propertyAnnotations[Annotation\JoinTable::class])) { + $joinTableAnnot = $propertyAnnotations[Annotation\JoinTable::class]; + $joinTableMetadata = $this->convertJoinTableAnnotationToJoinTableMetadata($joinTableAnnot); + + $assocMetadata->setJoinTable($joinTableMetadata); + } + + // Check for OrderBy + if (isset($propertyAnnotations[Annotation\OrderBy::class])) { + $orderByAnnot = $propertyAnnotations[Annotation\OrderBy::class]; + + $assocMetadata->setOrderBy($orderByAnnot->value); + } + + // Check for Id + if (isset($propertyAnnotations[Annotation\Id::class])) { + throw Mapping\MappingException::illegalToManyIdentifierAssociation($className, $fieldName); + } + + $this->attachAssociationPropertyCache($propertyAnnotations, $reflectionProperty, $assocMetadata, $metadata); + + return $assocMetadata; + } + + /** + * Parse the given Column as FieldMetadata + * + * @param Annotation\Column $columnAnnot + * @param string $fieldName + * @param bool $isVersioned + * + * @return Mapping\FieldMetadata + */ + private function convertColumnAnnotationToFieldMetadata( + Annotation\Column $columnAnnot, + string $fieldName, + bool $isVersioned + ) : Mapping\FieldMetadata + { + $fieldMetadata = $isVersioned + ? new Mapping\VersionFieldMetadata($fieldName) + : new Mapping\FieldMetadata($fieldName) + ; + + $fieldMetadata->setType(Type::getType($columnAnnot->type)); + + if (! empty($columnAnnot->name)) { + $fieldMetadata->setColumnName($columnAnnot->name); + } + + if (! empty($columnAnnot->columnDefinition)) { + $fieldMetadata->setColumnDefinition($columnAnnot->columnDefinition); + } + + if (! empty($columnAnnot->length)) { + $fieldMetadata->setLength($columnAnnot->length); + } + + if ($columnAnnot->options) { + $fieldMetadata->setOptions($columnAnnot->options); + } + + $fieldMetadata->setScale($columnAnnot->scale); + $fieldMetadata->setPrecision($columnAnnot->precision); + $fieldMetadata->setNullable($columnAnnot->nullable); + $fieldMetadata->setUnique($columnAnnot->unique); + + return $fieldMetadata; + } + + /** + * Parse the given Table as TableMetadata + * + * @param Annotation\Table $tableAnnot + * @param Mapping\TableMetadata $table + * + * @return void + */ + private function convertTableAnnotationToTableMetadata( + Annotation\Table $tableAnnot, + Mapping\TableMetadata $table + ) : void + { + if (! empty($tableAnnot->name)) { + $table->setName($tableAnnot->name); + } + + if (! empty($tableAnnot->schema)) { + $table->setSchema($tableAnnot->schema); + } + + foreach ($tableAnnot->options as $optionName => $optionValue) { + $table->addOption($optionName, $optionValue); + } + + foreach ($tableAnnot->indexes as $indexAnnot) { + $table->addIndex([ + 'name' => $indexAnnot->name, + 'columns' => $indexAnnot->columns, + 'unique' => $indexAnnot->unique, + 'options' => $indexAnnot->options, + 'flags' => $indexAnnot->flags, + ]); + } + + foreach ($tableAnnot->uniqueConstraints as $uniqueConstraintAnnot) { + $table->addUniqueConstraint([ + 'name' => $uniqueConstraintAnnot->name, + 'columns' => $uniqueConstraintAnnot->columns, + 'options' => $uniqueConstraintAnnot->options, + 'flags' => $uniqueConstraintAnnot->flags, + ]); + } + + return $table; + } + + /** + * Parse the given JoinTable as JoinTableMetadata + * + * @param Annotation\JoinTable $joinTableAnnot + * + * @return Mapping\JoinTableMetadata + */ + private function convertJoinTableAnnotationToJoinTableMetadata( + Annotation\JoinTable $joinTableAnnot + ) : Mapping\JoinTableMetadata + { + $joinTable = new Mapping\JoinTableMetadata(); + + if (! empty($joinTableAnnot->name)) { + $joinTable->setName($joinTableAnnot->name); + } + + if (! empty($joinTableAnnot->schema)) { + $joinTable->setSchema($joinTableAnnot->schema); + } + + foreach ($joinTableAnnot->joinColumns as $joinColumnAnnot) { + $joinColumn = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); + + $joinTable->addJoinColumn($joinColumn); + } + + foreach ($joinTableAnnot->inverseJoinColumns as $joinColumnAnnot) { + $joinColumn = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); + + $joinTable->addInverseJoinColumn($joinColumn); + } + + return $joinTable; + } + + /** + * Parse the given JoinColumn as JoinColumnMetadata + * + * @param Annotation\JoinColumn $joinColumnAnnot + * + * @return Mapping\JoinColumnMetadata + */ + private function convertJoinColumnAnnotationToJoinColumnMetadata( + Annotation\JoinColumn $joinColumnAnnot + ) : Mapping\JoinColumnMetadata + { + $joinColumn = new Mapping\JoinColumnMetadata(); + + // @todo Remove conditionals for name and referencedColumnName once naming strategy is brought into drivers + if (! empty($joinColumnAnnot->name)) { + $joinColumn->setColumnName($joinColumnAnnot->name); + } + + if (! empty($joinColumnAnnot->referencedColumnName)) { + $joinColumn->setReferencedColumnName($joinColumnAnnot->referencedColumnName); + } + + $joinColumn->setNullable($joinColumnAnnot->nullable); + $joinColumn->setUnique($joinColumnAnnot->unique); + + if (! empty($joinColumnAnnot->fieldName)) { + $joinColumn->setAliasedName($joinColumnAnnot->fieldName); + } + + if (! empty($joinColumnAnnot->columnDefinition)) { + $joinColumn->setColumnDefinition($joinColumnAnnot->columnDefinition); + } + + if ($joinColumnAnnot->onDelete) { + $joinColumn->setOnDelete(strtoupper($joinColumnAnnot->onDelete)); + } + + return $joinColumn; + } + + /** + * Parse the given Cache as CacheMetadata + * + * @param Annotation\Cache $cacheAnnot + * @param Mapping\ClassMetadata $metadata + * @param null|string $fieldName + * + * @return Mapping\CacheMetadata + */ + private function convertCacheAnnotationToCacheMetadata( + Annotation\Cache $cacheAnnot, + Mapping\ClassMetadata $metadata, + $fieldName = null + ) : Mapping\CacheMetadata + { + $baseRegion = strtolower(str_replace('\\', '_', $metadata->getRootClassName())); + $defaultRegion = $baseRegion . ($fieldName ? '__' . $fieldName : ''); + + $usage = constant(sprintf('%s::%s', Mapping\CacheUsage::class, $cacheAnnot->usage)); + $region = $cacheAnnot->region ?: $defaultRegion; + + return new Mapping\CacheMetadata($usage, $region); + } + + /** + * @param Annotation\SqlResultSetMapping $resultSetMapping + * + * @return array + */ + private function convertSqlResultSetMapping(Annotation\SqlResultSetMapping $resultSetMapping) + { + $entities = []; + + foreach ($resultSetMapping->entities as $entityResultAnnot) { + $entityResult = [ + 'fields' => [], + 'entityClass' => $entityResultAnnot->entityClass, + 'discriminatorColumn' => $entityResultAnnot->discriminatorColumn, + ]; + + foreach ($entityResultAnnot->fields as $fieldResultAnnot) { + $entityResult['fields'][] = [ + 'name' => $fieldResultAnnot->name, + 'column' => $fieldResultAnnot->column + ]; + } + + $entities[] = $entityResult; + } + + $columns = []; + + foreach ($resultSetMapping->columns as $columnResultAnnot) { + $columns[] = [ + 'name' => $columnResultAnnot->name, + ]; + } + + return [ + 'name' => $resultSetMapping->name, + 'entities' => $entities, + 'columns' => $columns + ]; + } + + private function attachTable( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) : void + { + $parent = $metadata->getParent(); + + if ($parent->inheritanceType === InheritanceType::SINGLE_TABLE) { + $metadata->setTable($parent->table); + + return; + } + + $namingStrategy = $metadataBuildingContext->getNamingStrategy(); + $table = new Mapping\TableMetadata(); + + $table->setName($namingStrategy->classToTableName($metadata->getClassName())); + + // Evaluate @Table annotation + if (isset($classAnnotations[Annotation\Table::class])) { + $tableAnnot = $classAnnotations[Annotation\Table::class]; + + $this->convertTableAnnotationToTableMetadata($table, $tableAnnot); + } + + $metadata->setTable($table); + } + + /** + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $metadata + * + * @return void + * + * @throws Mapping\MappingException + */ + private function attachDiscriminatorColumn( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) : void + { + $discriminatorColumn = new Mapping\DiscriminatorColumnMetadata(); + + $discriminatorColumn->setTableName($metadata->getTableName()); + $discriminatorColumn->setColumnName('dtype'); + $discriminatorColumn->setType(Type::getType('string')); + $discriminatorColumn->setLength(255); + + // Evaluate DiscriminatorColumn annotation + if (isset($classAnnotations[Annotation\DiscriminatorColumn::class])) { + /** @var Annotation\DiscriminatorColumn $discriminatorColumnAnnotation */ + $discriminatorColumnAnnotation = $classAnnotations[Annotation\DiscriminatorColumn::class]; + $typeName = ! empty($discriminatorColumnAnnotation->type) + ? $discriminatorColumnAnnotation->type + : 'string'; + + $discriminatorColumn->setType(Type::getType($typeName)); + $discriminatorColumn->setColumnName($discriminatorColumnAnnotation->name); + + if (! empty($discriminatorColumnAnnotation->columnDefinition)) { + $discriminatorColumn->setColumnDefinition($discriminatorColumnAnnotation->columnDefinition); + } + + if (! empty($discriminatorColumnAnnotation->length)) { + $discriminatorColumn->setLength($discriminatorColumnAnnotation->length); + } + } + + $metadata->setDiscriminatorColumn($discriminatorColumn); + + // Evaluate DiscriminatorMap annotation + if (isset($classAnnotations[Annotation\DiscriminatorMap::class])) { + $discriminatorMapAnnotation = $classAnnotations[Annotation\DiscriminatorMap::class]; + $discriminatorMap = array_map( + function ($className) use ($metadata) { + return $metadata->fullyQualifiedClassName($className); + }, + $discriminatorMapAnnotation->value + ); + + $metadata->setDiscriminatorMap($discriminatorMap); + } + } + + /** + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $metadata + * + * @return void + * + * @throws \UnexpectedValueException + * @throws Mapping\MappingException + */ + private function attachNamedQueries( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $metadata + ) : void + { + // Evaluate @NamedQueries annotation + if (isset($classAnnotations[Annotation\NamedQueries::class])) { + $namedQueriesAnnot = $classAnnotations[Annotation\NamedQueries::class]; + + if (! is_array($namedQueriesAnnot->value)) { + throw new \UnexpectedValueException("@NamedQueries should contain an array of @NamedQuery annotations."); + } + + foreach ($namedQueriesAnnot->value as $namedQuery) { + if (! ($namedQuery instanceof Annotation\NamedQuery)) { + throw new \UnexpectedValueException("@NamedQueries should contain an array of @NamedQuery annotations."); + } + + $metadata->addNamedQuery($namedQuery->name, $namedQuery->query); + } + } + } + + /** + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $metadata + * + * @return void + */ + private function attachNamedNativeQueries( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $metadata + ) : void + { + // Evaluate @NamedNativeQueries annotation + if (isset($classAnnotations[Annotation\NamedNativeQueries::class])) { + $namedNativeQueriesAnnot = $classAnnotations[Annotation\NamedNativeQueries::class]; + + foreach ($namedNativeQueriesAnnot->value as $namedNativeQuery) { + $metadata->addNamedNativeQuery( + $namedNativeQuery->name, + $namedNativeQuery->query, + [ + 'resultClass' => $namedNativeQuery->resultClass, + 'resultSetMapping' => $namedNativeQuery->resultSetMapping, + ] + ); + } + } + + // Evaluate @SqlResultSetMappings annotation + if (isset($classAnnotations[Annotation\SqlResultSetMappings::class])) { + $sqlResultSetMappingsAnnot = $classAnnotations[Annotation\SqlResultSetMappings::class]; + + foreach ($sqlResultSetMappingsAnnot->value as $resultSetMapping) { + $sqlResultSetMapping = $this->convertSqlResultSetMapping($resultSetMapping); + + $metadata->addSqlResultSetMapping($sqlResultSetMapping); + } + } + } + + /** + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $metadata + * + * @return void + */ + private function attachLifecycleCallbacks( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $metadata + ) : void + { + // Evaluate @HasLifecycleCallbacks annotation + if (isset($classAnnotations[Annotation\HasLifecycleCallbacks::class])) { + /* @var $method \ReflectionMethod */ + foreach ($reflectionClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { + foreach ($this->getMethodCallbacks($method) as $callback) { + $metadata->addLifecycleCallback($method->getName(), $callback); + } + } + } + } + + /** + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $metadata + * + * @return void + * + * @throws \ReflectionException + * @throws Mapping\MappingException + */ + private function attachEntityListeners( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $metadata + ) : void + { + // Evaluate @EntityListeners annotation + if (isset($classAnnotations[Annotation\EntityListeners::class])) { + /** @var Annotation\EntityListeners $entityListenersAnnot */ + $entityListenersAnnot = $classAnnotations[Annotation\EntityListeners::class]; + + foreach ($entityListenersAnnot->value as $item) { + $listenerClassName = $metadata->fullyQualifiedClassName($item); + + if (! class_exists($listenerClassName)) { + throw Mapping\MappingException::entityListenerClassNotFound( + $listenerClassName, + $metadata->getClassName() + ); + } + + $listenerClass = new \ReflectionClass($listenerClassName); + + /* @var $method \ReflectionMethod */ + foreach ($listenerClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) { + foreach ($this->getMethodCallbacks($method) as $callback) { + $metadata->addEntityListener($callback, $listenerClassName, $method->getName()); + } + } + } + } + } + + /** + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $metadata + * + * @return void + * + * @throws Mapping\MappingException + */ + private function attachPropertyOverrides( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) : void + { + // Evaluate AssociationOverrides annotation + if (isset($classAnnotations[Annotation\AssociationOverrides::class])) { + $associationOverridesAnnot = $classAnnotations[Annotation\AssociationOverrides::class]; + + foreach ($associationOverridesAnnot->value as $associationOverride) { + $fieldName = $associationOverride->name; + $property = $metadata->getProperty($fieldName); + + if (! $property) { + throw Mapping\MappingException::invalidOverrideFieldName($metadata->getClassName(), $fieldName); + } + + $existingClass = get_class($property); + $override = new $existingClass($fieldName); + + // Check for JoinColumn/JoinColumns annotations + if ($associationOverride->joinColumns) { + $joinColumns = []; + + foreach ($associationOverride->joinColumns as $joinColumnAnnot) { + $joinColumns[] = $this->convertJoinColumnAnnotationToJoinColumnMetadata($joinColumnAnnot); + } + + $override->setJoinColumns($joinColumns); + } + + // Check for JoinTable annotations + if ($associationOverride->joinTable) { + $joinTableAnnot = $associationOverride->joinTable; + $joinTableMetadata = $this->convertJoinTableAnnotationToJoinTableMetadata($joinTableAnnot); + + $override->setJoinTable($joinTableMetadata); + } + + // Check for inversedBy + if ($associationOverride->inversedBy) { + $override->setInversedBy($associationOverride->inversedBy); + } + + // Check for fetch + if ($associationOverride->fetch) { + $override->setFetchMode( + constant(Mapping\FetchMode::class . '::' . $associationOverride->fetch) + ); + } + + $metadata->setPropertyOverride($override); + } + } + + // Evaluate AttributeOverrides annotation + if (isset($classAnnotations[Annotation\AttributeOverrides::class])) { + $attributeOverridesAnnot = $classAnnotations[Annotation\AttributeOverrides::class]; + + foreach ($attributeOverridesAnnot->value as $attributeOverrideAnnot) { + $fieldMetadata = $this->convertColumnAnnotationToFieldMetadata( + $attributeOverrideAnnot->column, + $attributeOverrideAnnot->name, + false + ); + + $metadata->setPropertyOverride($fieldMetadata); + } + } + } + + private function attachAssociationPropertyCache( + array $propertyAnnotations, + \ReflectionProperty $reflectionProperty, + Mapping\AssociationMetadata $assocMetadata, + Mapping\ClassMetadata $metadata + ) : void + { + // Check for Cache + if (isset($propertyAnnotations[Annotation\Cache::class])) { + $cacheAnnot = $propertyAnnotations[Annotation\Cache::class]; + $cacheMetadata = $this->convertCacheAnnotationToCacheMetadata( + $cacheAnnot, + $metadata, + $reflectionProperty->getName() + ); + + $assocMetadata->setCache($cacheMetadata); + } + } + + /** + * Attempts to resolve the cascade modes. + * + * @param string $className The class name. + * @param string $fieldName The field name. + * @param array $originalCascades The original unprocessed field cascades. + * + * @return array The processed field cascades. + * + * @throws Mapping\MappingException If a cascade option is not valid. + */ + private function getCascade(string $className, string $fieldName, array $originalCascades) : array + { + $cascadeTypes = ['remove', 'persist', 'refresh', 'merge', 'detach']; + $cascades = array_map('strtolower', $originalCascades); + + if (in_array('all', $cascades)) { + $cascades = $cascadeTypes; + } + + if (count($cascades) !== count(array_intersect($cascades, $cascadeTypes))) { + $diffCascades = array_diff($cascades, array_intersect($cascades, $cascadeTypes)); + + throw Mapping\MappingException::invalidCascadeOption($diffCascades, $className, $fieldName); + } + + return $cascades; + } + + /** + * Attempts to resolve the fetch mode. + * + * @param string $className The class name. + * @param string $fetchMode The fetch mode. + * + * @return string The fetch mode as defined in ClassMetadata. + * + * @throws Mapping\MappingException If the fetch mode is not valid. + */ + private function getFetchMode($className, $fetchMode) : string + { + $fetchModeConstant = sprintf('%s::%s', Mapping\FetchMode::class, $fetchMode); + + if (! defined($fetchModeConstant)) { + throw Mapping\MappingException::invalidFetchMode($className, $fetchMode); + } + + return constant($fetchModeConstant); + } + + /** + * Parses the given method. + * + * @param \ReflectionMethod $method + * + * @return array + */ + private function getMethodCallbacks(\ReflectionMethod $method) : array + { + $annotations = $this->getMethodAnnotations($method); + $events = [ + Events::prePersist => Annotation\PrePersist::class, + Events::postPersist => Annotation\PostPersist::class, + Events::preUpdate => Annotation\PreUpdate::class, + Events::postUpdate => Annotation\PostUpdate::class, + Events::preRemove => Annotation\PreRemove::class, + Events::postRemove => Annotation\PostRemove::class, + Events::postLoad => Annotation\PostLoad::class, + Events::preFlush => Annotation\PreFlush::class, + ]; + + // Check for callbacks + $callbacks = []; + + foreach ($events as $eventName => $annotationClassName) { + if (isset($annotations[$annotationClassName]) || $method->getName() === $eventName) { + $callbacks[] = $eventName; + } + } + + return $callbacks; + } + + /** + * @param \ReflectionClass $reflectionClass + * + * @return array + */ + private function getClassAnnotations(\ReflectionClass $reflectionClass) : array + { + $classAnnotations = $this->reader->getClassAnnotations($reflectionClass); + + foreach ($classAnnotations as $key => $annot) { + if (! is_numeric($key)) { + continue; + } + + $classAnnotations[get_class($annot)] = $annot; + } + + return $classAnnotations; + } + + /** + * @param \ReflectionProperty $reflectionProperty + * + * @return array + */ + private function getPropertyAnnotations(\ReflectionProperty $reflectionProperty) : array + { + $propertyAnnotations = $this->reader->getPropertyAnnotations($reflectionProperty); + + foreach ($propertyAnnotations as $key => $annot) { + if (! is_numeric($key)) { + continue; + } + + $propertyAnnotations[get_class($annot)] = $annot; + } + + return $propertyAnnotations; + } + + /** + * @param \ReflectionMethod $reflectionMethod + * + * @return array + */ + private function getMethodAnnotations(\ReflectionMethod $reflectionMethod) : array + { + $methodAnnotations = $this->reader->getMethodAnnotations($reflectionMethod); + + foreach ($methodAnnotations as $key => $annot) { + if (! is_numeric($key)) { + continue; + } + + $methodAnnotations[get_class($annot)] = $annot; + } + + return $methodAnnotations; + } + + /** + * Factory method for the Annotation Driver. + * + * @param array|string $paths + * @param AnnotationReader|null $reader + * + * @return AnnotationDriver + */ + static public function create($paths = [], AnnotationReader $reader = null) + { + if ($reader == null) { + $reader = new AnnotationReader(); + } + + return new self($reader, $paths); + } +} diff --git a/lib/Doctrine/ORM/Mapping/Driver/Annotation/Binder/EmbeddableClassMetadataBinder.php b/lib/Doctrine/ORM/Mapping/Driver/Annotation/Binder/EmbeddableClassMetadataBinder.php new file mode 100644 index 00000000000..be9ef1633a7 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Driver/Annotation/Binder/EmbeddableClassMetadataBinder.php @@ -0,0 +1,91 @@ + + */ +class EmbeddableClassMetadataBinder +{ + /** + * @var Mapping\ClassMetadataBuildingContext + */ + private $metadataBuildingContext; + + /** + * @var \ReflectionClass + */ + private $reflectionClass; + + /** + * [dreaming] One day we would eliminate this and only do: $reflectionClass->getAnnotations() + * + * @var array + */ + private $classAnnotations; + + /** + * @todo guilhermeblanco This should disappear once we instantiation happens in the Driver + * + * @var Mapping\ClassMetadata + */ + private $classMetadata; + + /** + * ComponentMetadataBinder constructor. + * + * @param \ReflectionClass $reflectionClass + * @param array $classAnnotations + * @param Mapping\ClassMetadata $classMetadata + * @param Mapping\ClassMetadataBuildingContext $metadataBuildingContext + */ + public function __construct( + \ReflectionClass $reflectionClass, + array $classAnnotations, + Mapping\ClassMetadata $classMetadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) + { + $this->reflectionClass = $reflectionClass; + $this->classAnnotations = $classAnnotations; + $this->classMetadata = $classMetadata; + $this->metadataBuildingContext = $metadataBuildingContext; + } + + /** + * @return Mapping\ClassMetadata + */ + public function bind() : Mapping\ClassMetadata + { + $classMetadata = $this->classMetadata; + + $this->processEmbeddableAnnotation($classMetadata, $this->classMetadata[Annotation\Embeddable::class]); + + return $classMetadata; + } + + /** + * @param Mapping\ClassMetadata $classMetadata + * @param Annotation\Embeddable $embeddableAnnotation + * + * @return void + */ + private function processEmbeddableAnnotation( + Mapping\ClassMetadata $classMetadata, + Annotation\Embeddable $embeddableAnnotation + ) : void + { + $classMetadata->isMappedSuperclass = false; + $classMetadata->isEmbeddedClass = true; + } +} diff --git a/lib/Doctrine/ORM/Mapping/Driver/Annotation/Binder/EntityClassMetadataBinder.php b/lib/Doctrine/ORM/Mapping/Driver/Annotation/Binder/EntityClassMetadataBinder.php new file mode 100644 index 00000000000..2226f32e171 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Driver/Annotation/Binder/EntityClassMetadataBinder.php @@ -0,0 +1,101 @@ + + */ +class EntityClassMetadataBinder +{ + /** + * @var Mapping\ClassMetadataBuildingContext + */ + private $metadataBuildingContext; + + /** + * @var \ReflectionClass + */ + private $reflectionClass; + + /** + * [dreaming] One day we would eliminate this and only do: $reflectionClass->getAnnotations() + * + * @var array + */ + private $classAnnotations; + + /** + * @todo guilhermeblanco This should disappear once we instantiation happens in the Driver + * + * @var Mapping\ClassMetadata + */ + private $classMetadata; + + /** + * ComponentMetadataBinder constructor. + * + * @param \ReflectionClass $reflectionClass + * @param array $classAnnotations + * @param Mapping\ClassMetadata $classMetadata + * @param Mapping\ClassMetadataBuildingContext $metadataBuildingContext + */ + public function __construct( + \ReflectionClass $reflectionClass, + array $classAnnotations, + Mapping\ClassMetadata $classMetadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) + { + $this->reflectionClass = $reflectionClass; + $this->classAnnotations = $classAnnotations; + $this->classMetadata = $classMetadata; + $this->metadataBuildingContext = $metadataBuildingContext; + } + + /** + * @return Mapping\ClassMetadata + */ + public function bind() : Mapping\ClassMetadata + { + $classMetadata = $this->classMetadata; + + $this->processEntityAnnotation($classMetadata, $this->classAnnotations[Annotation\Entity::class]); + + return $classMetadata; + } + + /** + * @param Mapping\ClassMetadata $classMetadata + * @param Annotation\Entity $entityAnnotation + * + * @return void + */ + private function processEntityAnnotation( + Mapping\ClassMetadata $classMetadata, + Annotation\Entity $entityAnnotation + ) : void + { + if ($entityAnnotation->repositoryClass !== null) { + $repositoryClassName = $classMetadata->fullyQualifiedClassName($entityAnnotation->repositoryClass); + + $classMetadata->setCustomRepositoryClassName($repositoryClassName); + } + + if ($entityAnnotation->readOnly) { + $classMetadata->asReadOnly(); + } + + $classMetadata->isMappedSuperclass = false; + $classMetadata->isEmbeddedClass = false; + } +} diff --git a/lib/Doctrine/ORM/Mapping/Driver/Annotation/Binder/MappedSuperClassMetadataBinder.php b/lib/Doctrine/ORM/Mapping/Driver/Annotation/Binder/MappedSuperClassMetadataBinder.php new file mode 100644 index 00000000000..8ab895b7484 --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/Driver/Annotation/Binder/MappedSuperClassMetadataBinder.php @@ -0,0 +1,99 @@ + + */ +class MappedSuperClassMetadataBinder +{ + /** + * @var Mapping\ClassMetadataBuildingContext + */ + private $metadataBuildingContext; + + /** + * @var \ReflectionClass + */ + private $reflectionClass; + + /** + * [dreaming] One day we would eliminate this and only do: $reflectionClass->getAnnotations() + * + * @var array + */ + private $classAnnotations; + + /** + * @todo guilhermeblanco This should disappear once we instantiation happens in the Driver + * + * @var Mapping\ClassMetadata + */ + private $classMetadata; + + /** + * ComponentMetadataBinder constructor. + * + * @param \ReflectionClass $reflectionClass + * @param array $classAnnotations + * @param Mapping\ClassMetadata $classMetadata + * @param Mapping\ClassMetadataBuildingContext $metadataBuildingContext + */ + public function __construct( + \ReflectionClass $reflectionClass, + array $classAnnotations, + Mapping\ClassMetadata $classMetadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) + { + $this->reflectionClass = $reflectionClass; + $this->classAnnotations = $classAnnotations; + $this->classMetadata = $classMetadata; + $this->metadataBuildingContext = $metadataBuildingContext; + } + + /** + * @return Mapping\ClassMetadata + * + * @throws Mapping\MappingException + */ + public function bind() : Mapping\ClassMetadata + { + $classMetadata = $this->classMetadata; + + $this->processMappedSuperclassAnnotation($classMetadata, $this->classAnnotations[Annotation\MappedSuperclass::class]); + + return $classMetadata; + } + + /** + * @param Mapping\ClassMetadata $classMetadata + * @param Annotation\MappedSuperclass $mappedSuperclassAnnotation + * + * @return void + */ + private function processMappedSuperclassAnnotation( + Mapping\ClassMetadata $classMetadata, + Annotation\MappedSuperclass $mappedSuperclassAnnotation + ) : void + { + if ($mappedSuperclassAnnotation->repositoryClass !== null) { + $classMetadata->setCustomRepositoryClassName( + $classMetadata->fullyQualifiedClassName($mappedSuperclassAnnotation->repositoryClass) + ); + } + + $classMetadata->isMappedSuperclass = true; + $classMetadata->isEmbeddedClass = false; + } +} diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index e57bcbf69c3..f3becf25db4 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -264,7 +264,8 @@ public function loadMetadataForClass( $classMetadata = $this->convertClassAnnotationsToClassMetadata( $classAnnotations, $reflectionClass, - $metadata + $metadata, + $metadataBuildingContext ); // Evaluate @Cache annotation @@ -302,9 +303,10 @@ public function loadMetadataForClass( } /** - * @param array $classAnnotations - * @param \ReflectionClass $reflectionClass - * @param Mapping\ClassMetadata $metadata + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $metadata + * @param Mapping\ClassMetadataBuildingContext $metadataBuildingContext * * @return Mapping\ClassMetadata * @@ -313,7 +315,8 @@ public function loadMetadataForClass( private function convertClassAnnotationsToClassMetadata( array $classAnnotations, \ReflectionClass $reflectionClass, - Mapping\ClassMetadata $metadata + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext ) : Mapping\ClassMetadata { switch (true) { @@ -321,7 +324,8 @@ private function convertClassAnnotationsToClassMetadata( return $this->convertClassAnnotationsToEntityClassMetadata( $classAnnotations, $reflectionClass, - $metadata + $metadata, + $metadataBuildingContext ); break; @@ -346,9 +350,10 @@ private function convertClassAnnotationsToClassMetadata( } /** - * @param array $classAnnotations - * @param \ReflectionClass $reflectionClass - * @param Mapping\ClassMetadata $metadata + * @param array $classAnnotations + * @param \ReflectionClass $reflectionClass + * @param Mapping\ClassMetadata $metadata + * @param Mapping\ClassMetadataBuildingContext $metadataBuildingContext * * @return Mapping\ClassMetadata * @@ -358,7 +363,8 @@ private function convertClassAnnotationsToClassMetadata( private function convertClassAnnotationsToEntityClassMetadata( array $classAnnotations, \ReflectionClass $reflectionClass, - Mapping\ClassMetadata $metadata + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext ) { /** @var Annotation\Entity $entityAnnot */ @@ -374,13 +380,10 @@ private function convertClassAnnotationsToEntityClassMetadata( $metadata->asReadOnly(); } - // Evaluate Table annotation - if (isset($classAnnotations[Annotation\Table::class])) { - $tableAnnot = $classAnnotations[Annotation\Table::class]; - $table = $this->convertTableAnnotationToTableMetadata($tableAnnot); + $metadata->isMappedSuperclass = false; + $metadata->isEmbeddedClass = false; - $metadata->setTable($table); - } + $this->attachTable($classAnnotations, $reflectionClass, $metadata, $metadataBuildingContext); // Evaluate @ChangeTrackingPolicy annotation if (isset($classAnnotations[Annotation\ChangeTrackingPolicy::class])) { @@ -483,7 +486,8 @@ private function convertPropertyAnnotationsToProperty( case isset($propertyAnnotations[Annotation\Column::class]): return $this->convertReflectionPropertyToFieldMetadata( $reflectionProperty, - $propertyAnnotations + $propertyAnnotations, + $metadata ); case isset($propertyAnnotations[Annotation\OneToOne::class]): @@ -522,12 +526,22 @@ private function convertPropertyAnnotationsToProperty( } } + /** + * @param \ReflectionProperty $reflProperty + * @param array $propertyAnnotations + * @param Mapping\ClassMetadata $metadata + * + * @return Mapping\FieldMetadata + * + * @throws Mapping\MappingException + */ private function convertReflectionPropertyToFieldMetadata( \ReflectionProperty $reflProperty, - array $propertyAnnotations - ) + array $propertyAnnotations, + Mapping\ClassMetadata $metadata + ) : Mapping\FieldMetadata { - $className = $reflProperty->getDeclaringClass()->getName(); + $className = $metadata->getClassName(); $fieldName = $reflProperty->getName(); $isVersioned = isset($propertyAnnotations[Annotation\Version::class]); $columnAnnot = $propertyAnnotations[Annotation\Column::class]; @@ -586,14 +600,21 @@ private function convertReflectionPropertyToFieldMetadata( return $fieldMetadata; } + /** + * @param \ReflectionProperty $reflectionProperty + * @param array $propertyAnnotations + * @param Mapping\ClassMetadata $metadata + * + * @return Mapping\OneToOneAssociationMetadata + */ private function convertReflectionPropertyToOneToOneAssociationMetadata( - \ReflectionProperty $reflProperty, + \ReflectionProperty $reflectionProperty, array $propertyAnnotations, Mapping\ClassMetadata $metadata ) { - $className = $reflProperty->getDeclaringClass()->getName(); - $fieldName = $reflProperty->getName(); + $className = $metadata->getClassName(); + $fieldName = $reflectionProperty->getName(); $oneToOneAnnot = $propertyAnnotations[Annotation\OneToOne::class]; $assocMetadata = new Mapping\OneToOneAssociationMetadata($fieldName); $targetEntity = $metadata->fullyQualifiedClassName($oneToOneAnnot->targetEntity); @@ -616,13 +637,7 @@ private function convertReflectionPropertyToOneToOneAssociationMetadata( $assocMetadata->setPrimaryKey(true); } - // Check for Cache - if (isset($propertyAnnotations[Annotation\Cache::class])) { - $cacheAnnot = $propertyAnnotations[Annotation\Cache::class]; - $cacheMetadata = $this->convertCacheAnnotationToCacheMetadata($cacheAnnot, $metadata, $fieldName); - - $assocMetadata->setCache($cacheMetadata); - } + $this->attachAssociationPropertyCache($propertyAnnotations, $reflectionProperty, $assocMetadata, $metadata); // Check for JoinColumn/JoinColumns annotations switch (true) { @@ -650,14 +665,21 @@ private function convertReflectionPropertyToOneToOneAssociationMetadata( return $assocMetadata; } + /** + * @param \ReflectionProperty $reflectionProperty + * @param array $propertyAnnotations + * @param Mapping\ClassMetadata $metadata + * + * @return Mapping\ManyToOneAssociationMetadata + */ private function convertReflectionPropertyToManyToOneAssociationMetadata( - \ReflectionProperty $reflProperty, + \ReflectionProperty $reflectionProperty, array $propertyAnnotations, Mapping\ClassMetadata $metadata ) { - $className = $reflProperty->getDeclaringClass()->getName(); - $fieldName = $reflProperty->getName(); + $className = $metadata->getClassName(); + $fieldName = $reflectionProperty->getName(); $manyToOneAnnot = $propertyAnnotations[Annotation\ManyToOne::class]; $assocMetadata = new Mapping\ManyToOneAssociationMetadata($fieldName); $targetEntity = $metadata->fullyQualifiedClassName($manyToOneAnnot->targetEntity); @@ -675,13 +697,7 @@ private function convertReflectionPropertyToManyToOneAssociationMetadata( $assocMetadata->setPrimaryKey(true); } - // Check for Cache - if (isset($propertyAnnotations[Annotation\Cache::class])) { - $cacheAnnot = $propertyAnnotations[Annotation\Cache::class]; - $cacheMetadata = $this->convertCacheAnnotationToCacheMetadata($cacheAnnot, $metadata, $fieldName); - - $assocMetadata->setCache($cacheMetadata); - } + $this->attachAssociationPropertyCache($propertyAnnotations, $reflectionProperty, $assocMetadata, $metadata); // Check for JoinColumn/JoinColumns annotations switch (true) { @@ -709,14 +725,23 @@ private function convertReflectionPropertyToManyToOneAssociationMetadata( return $assocMetadata; } + /** + * @param \ReflectionProperty $reflectionProperty + * @param array $propertyAnnotations + * @param Mapping\ClassMetadata $metadata + * + * @return Mapping\OneToManyAssociationMetadata + * + * @throws Mapping\MappingException + */ private function convertReflectionPropertyToOneToManyAssociationMetadata( - \ReflectionProperty $reflProperty, + \ReflectionProperty $reflectionProperty, array $propertyAnnotations, Mapping\ClassMetadata $metadata - ) + ) : Mapping\OneToManyAssociationMetadata { - $className = $reflProperty->getDeclaringClass()->getName(); - $fieldName = $reflProperty->getName(); + $className = $metadata->getClassName(); + $fieldName = $reflectionProperty->getName(); $oneToManyAnnot = $propertyAnnotations[Annotation\OneToMany::class]; $assocMetadata = new Mapping\OneToManyAssociationMetadata($fieldName); $targetEntity = $metadata->fullyQualifiedClassName($oneToManyAnnot->targetEntity); @@ -743,28 +768,31 @@ private function convertReflectionPropertyToOneToManyAssociationMetadata( // Check for Id if (isset($propertyAnnotations[Annotation\Id::class])) { - $assocMetadata->setPrimaryKey(true); + throw Mapping\MappingException::illegalToManyIdentifierAssociation($className, $fieldName); } - // Check for Cache - if (isset($propertyAnnotations[Annotation\Cache::class])) { - $cacheAnnot = $propertyAnnotations[Annotation\Cache::class]; - $cacheMetadata = $this->convertCacheAnnotationToCacheMetadata($cacheAnnot, $metadata, $fieldName); - - $assocMetadata->setCache($cacheMetadata); - } + $this->attachAssociationPropertyCache($propertyAnnotations, $reflectionProperty, $assocMetadata, $metadata); return $assocMetadata; } + /** + * @param \ReflectionProperty $reflectionProperty + * @param array $propertyAnnotations + * @param Mapping\ClassMetadata $metadata + * + * @return Mapping\ManyToManyAssociationMetadata + * + * @throws Mapping\MappingException + */ private function convertReflectionPropertyToManyToManyAssociationMetadata( - \ReflectionProperty $reflProperty, + \ReflectionProperty $reflectionProperty, array $propertyAnnotations, Mapping\ClassMetadata $metadata - ) + ) : Mapping\ManyToManyAssociationMetadata { - $className = $reflProperty->getDeclaringClass()->getName(); - $fieldName = $reflProperty->getName(); + $className = $metadata->getClassName(); + $fieldName = $reflectionProperty->getName(); $manyToManyAnnot = $propertyAnnotations[Annotation\ManyToMany::class]; $assocMetadata = new Mapping\ManyToManyAssociationMetadata($fieldName); $targetEntity = $metadata->fullyQualifiedClassName($manyToManyAnnot->targetEntity); @@ -803,16 +831,10 @@ private function convertReflectionPropertyToManyToManyAssociationMetadata( // Check for Id if (isset($propertyAnnotations[Annotation\Id::class])) { - $assocMetadata->setPrimaryKey(true); + throw Mapping\MappingException::illegalToManyIdentifierAssociation($className, $fieldName); } - // Check for Cache - if (isset($propertyAnnotations[Annotation\Cache::class])) { - $cacheAnnot = $propertyAnnotations[Annotation\Cache::class]; - $cacheMetadata = $this->convertCacheAnnotationToCacheMetadata($cacheAnnot, $metadata, $fieldName); - - $assocMetadata->setCache($cacheMetadata); - } + $this->attachAssociationPropertyCache($propertyAnnotations, $reflectionProperty, $assocMetadata, $metadata); return $assocMetadata; } @@ -866,30 +888,30 @@ private function convertColumnAnnotationToFieldMetadata( /** * Parse the given Table as TableMetadata * - * @param Annotation\Table $tableAnnot + * @param Annotation\Table $tableAnnot + * @param Mapping\TableMetadata $tableMetadata * - * @return Mapping\TableMetadata + * @return void */ private function convertTableAnnotationToTableMetadata( - Annotation\Table $tableAnnot - ) : Mapping\TableMetadata + Annotation\Table $tableAnnot, + Mapping\TableMetadata $tableMetadata + ) : void { - $table = new Mapping\TableMetadata(); - if (! empty($tableAnnot->name)) { - $table->setName($tableAnnot->name); + $tableMetadata->setName($tableAnnot->name); } if (! empty($tableAnnot->schema)) { - $table->setSchema($tableAnnot->schema); + $tableMetadata->setSchema($tableAnnot->schema); } foreach ($tableAnnot->options as $optionName => $optionValue) { - $table->addOption($optionName, $optionValue); + $tableMetadata->addOption($optionName, $optionValue); } foreach ($tableAnnot->indexes as $indexAnnot) { - $table->addIndex([ + $tableMetadata->addIndex([ 'name' => $indexAnnot->name, 'columns' => $indexAnnot->columns, 'unique' => $indexAnnot->unique, @@ -899,15 +921,13 @@ private function convertTableAnnotationToTableMetadata( } foreach ($tableAnnot->uniqueConstraints as $uniqueConstraintAnnot) { - $table->addUniqueConstraint([ + $tableMetadata->addUniqueConstraint([ 'name' => $uniqueConstraintAnnot->name, 'columns' => $uniqueConstraintAnnot->columns, 'options' => $uniqueConstraintAnnot->options, 'flags' => $uniqueConstraintAnnot->flags, ]); } - - return $table; } /** @@ -1051,6 +1071,43 @@ private function convertSqlResultSetMapping(Annotation\SqlResultSetMapping $resu ]; } + private function attachTable( + array $classAnnotations, + \ReflectionClass $reflectionClass, + Mapping\ClassMetadata $metadata, + Mapping\ClassMetadataBuildingContext $metadataBuildingContext + ) : void + { + $parent = $metadata->getParent(); + + if ($parent && $parent->inheritanceType === Mapping\InheritanceType::SINGLE_TABLE) { + // Handle the case where a middle mapped super class inherits from a single table inheritance tree. + do { + if (! $parent->isMappedSuperclass) { + $metadata->setTable($parent->table); + + break; + } + } while (($parent = $parent->getParent()) !== null); + + return; + } + + $namingStrategy = $metadataBuildingContext->getNamingStrategy(); + $tableMetadata = new Mapping\TableMetadata(); + + $tableMetadata->setName($namingStrategy->classToTableName($metadata->getClassName())); + + // Evaluate @Table annotation + if (isset($classAnnotations[Annotation\Table::class])) { + $tableAnnot = $classAnnotations[Annotation\Table::class]; + + $this->convertTableAnnotationToTableMetadata($tableAnnot, $tableMetadata); + } + + $metadata->setTable($tableMetadata); + } + /** * @param array $classAnnotations * @param \ReflectionClass $reflectionClass @@ -1332,6 +1389,26 @@ private function attachPropertyOverrides( } } + private function attachAssociationPropertyCache( + array $propertyAnnotations, + \ReflectionProperty $reflectionProperty, + Mapping\AssociationMetadata $assocMetadata, + Mapping\ClassMetadata $metadata + ) : void + { + // Check for Cache + if (isset($propertyAnnotations[Annotation\Cache::class])) { + $cacheAnnot = $propertyAnnotations[Annotation\Cache::class]; + $cacheMetadata = $this->convertCacheAnnotationToCacheMetadata( + $cacheAnnot, + $metadata, + $reflectionProperty->getName() + ); + + $assocMetadata->setCache($cacheMetadata); + } + } + /** * Attempts to resolve the cascade modes. * diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index 742d9582941..c2d13340d68 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -307,10 +307,11 @@ private function reverseEngineerMappingFromDatabase() */ private function buildTable(Mapping\ClassMetadata $metadata) { - $tableName = $this->classToTableNames[$metadata->getClassName()]; - $indexes = $this->tables[$tableName]->getIndexes(); + $tableName = $this->classToTableNames[$metadata->getClassName()]; + $indexes = $this->tables[$tableName]->getIndexes(); + $tableMetadata = new Mapping\TableMetadata(); - $metadata->table->setName($this->classToTableNames[$metadata->getClassName()]); + $tableMetadata->setName($this->classToTableNames[$metadata->getClassName()]); foreach ($indexes as $index) { /** @var Index $index */ @@ -318,7 +319,7 @@ private function buildTable(Mapping\ClassMetadata $metadata) continue; } - $metadata->table->addIndex([ + $tableMetadata->addIndex([ 'name' => $index->getName(), 'columns' => $index->getColumns(), 'unique' => $index->isUnique(), @@ -326,6 +327,8 @@ private function buildTable(Mapping\ClassMetadata $metadata) 'flags' => $index->getFlags(), ]); } + + $metadata->setTable($tableMetadata); } /** diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index bf59c8c25d7..6736c681f5d 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -68,58 +68,72 @@ public function loadMetadataForClass( throw Mapping\MappingException::classIsNotAValidEntityOrMappedSuperClass($className); } - // Evaluate attributes - if (isset($xmlRoot['table'])) { - $metadata->table->setName((string) $xmlRoot['table']); - } + // Process table information + $parent = $metadata->getParent(); - if (isset($xmlRoot['schema'])) { - $metadata->table->setSchema((string) $xmlRoot['schema']); - } + if ($parent && $parent->inheritanceType === Mapping\InheritanceType::SINGLE_TABLE) { + $metadata->setTable($parent->table); + } else { + $namingStrategy = $metadataBuildingContext->getNamingStrategy(); + $tableMetadata = new Mapping\TableMetadata(); - if (isset($xmlRoot->options)) { - $options = $this->parseOptions($xmlRoot->options->children()); + $tableMetadata->setName($namingStrategy->classToTableName($metadata->getClassName())); - foreach ($options as $optionName => $optionValue) { - $metadata->table->addOption($optionName, $optionValue); + // Evaluate attributes + if (isset($xmlRoot['table'])) { + $tableMetadata->setName((string) $xmlRoot['table']); } - } - // Evaluate - if (isset($xmlRoot->indexes)) { - foreach ($xmlRoot->indexes->index as $indexXml) { - $indexName = isset($indexXml['name']) ? (string) $indexXml['name'] : null; - $columns = explode(',', (string) $indexXml['columns']); - $isUnique = isset($indexXml['unique']) && $indexXml['unique']; - $options = isset($indexXml->options) ? $this->parseOptions($indexXml->options->children()) : []; - $flags = isset($indexXml['flags']) ? explode(',', (string) $indexXml['flags']) : []; - - $metadata->table->addIndex([ - 'name' => $indexName, - 'columns' => $columns, - 'unique' => $isUnique, - 'options' => $options, - 'flags' => $flags, - ]); + if (isset($xmlRoot['schema'])) { + $tableMetadata->setSchema((string) $xmlRoot['schema']); + } + + if (isset($xmlRoot->options)) { + $options = $this->parseOptions($xmlRoot->options->children()); + + foreach ($options as $optionName => $optionValue) { + $tableMetadata->addOption($optionName, $optionValue); + } + } + + // Evaluate + if (isset($xmlRoot->indexes)) { + foreach ($xmlRoot->indexes->index as $indexXml) { + $indexName = isset($indexXml['name']) ? (string) $indexXml['name'] : null; + $columns = explode(',', (string) $indexXml['columns']); + $isUnique = isset($indexXml['unique']) && $indexXml['unique']; + $options = isset($indexXml->options) ? $this->parseOptions($indexXml->options->children()) : []; + $flags = isset($indexXml['flags']) ? explode(',', (string) $indexXml['flags']) : []; + + $tableMetadata->addIndex([ + 'name' => $indexName, + 'columns' => $columns, + 'unique' => $isUnique, + 'options' => $options, + 'flags' => $flags, + ]); + } } - } - // Evaluate + // Evaluate - if (isset($xmlRoot->{'unique-constraints'})) { - foreach ($xmlRoot->{'unique-constraints'}->{'unique-constraint'} as $uniqueXml) { - $indexName = isset($uniqueXml['name']) ? (string) $uniqueXml['name'] : null; - $columns = explode(',', (string) $uniqueXml['columns']); - $options = isset($uniqueXml->options) ? $this->parseOptions($uniqueXml->options->children()) : []; - $flags = isset($uniqueXml['flags']) ? explode(',', (string) $uniqueXml['flags']) : []; + if (isset($xmlRoot->{'unique-constraints'})) { + foreach ($xmlRoot->{'unique-constraints'}->{'unique-constraint'} as $uniqueXml) { + $indexName = isset($uniqueXml['name']) ? (string) $uniqueXml['name'] : null; + $columns = explode(',', (string) $uniqueXml['columns']); + $options = isset($uniqueXml->options) ? $this->parseOptions($uniqueXml->options->children()) : []; + $flags = isset($uniqueXml['flags']) ? explode(',', (string) $uniqueXml['flags']) : []; - $metadata->table->addUniqueConstraint([ - 'name' => $indexName, - 'columns' => $columns, - 'options' => $options, - 'flags' => $flags, - ]); + $tableMetadata->addUniqueConstraint([ + 'name' => $indexName, + 'columns' => $columns, + 'options' => $options, + 'flags' => $flags, + ]); + } } + + $metadata->setTable($tableMetadata); } // Evaluate second level cache @@ -404,6 +418,10 @@ public function loadMetadataForClass( $association->setTargetEntity($targetEntity); $association->setMappedBy((string) $oneToManyElement['mapped-by']); + if (isset($associationIds[$association->getName()])) { + throw Mapping\MappingException::illegalToManyIdentifierAssociation($className, $association->getName()); + } + if (isset($oneToManyElement['fetch'])) { $association->setFetchMode( constant(sprintf('%s::%s', Mapping\FetchMode::class, (string) $oneToManyElement['fetch'])) @@ -510,6 +528,10 @@ public function loadMetadataForClass( $association->setTargetEntity($targetEntity); + if (isset($associationIds[$association->getName()])) { + throw Mapping\MappingException::illegalToManyIdentifierAssociation($className, $association->getName()); + } + if (isset($manyToManyElement['fetch'])) { $association->setFetchMode( constant(sprintf('%s::%s', Mapping\FetchMode::class, (string) $manyToManyElement['fetch'])) diff --git a/lib/Doctrine/ORM/Mapping/TableMetadata.php b/lib/Doctrine/ORM/Mapping/TableMetadata.php index 66396b9095d..4a69aa4b963 100644 --- a/lib/Doctrine/ORM/Mapping/TableMetadata.php +++ b/lib/Doctrine/ORM/Mapping/TableMetadata.php @@ -34,6 +34,18 @@ class TableMetadata /** @var array */ protected $uniqueConstraints = []; + /** + * TableMetadata constructor. + * + * @param null|string $name + * @param null|string $schema + */ + public function __construct(?string $name = null, ?string $schema = null) + { + $this->name = $name; + $this->schema = $schema; + } + /** * @return string|null */ diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index d46cde0be0a..c0b5d49a131 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -1013,7 +1013,7 @@ protected function generateEntityAnnotation(ClassMetadata $metadata) */ protected function generateTableAnnotation(ClassMetadata $metadata) { - if ($metadata->isEmbeddedClass) { + if ($metadata->isEmbeddedClass || $metadata->isMappedSuperclass) { return ''; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3785Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3785Test.php index f6a1ec28a57..6d18984c346 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3785Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3785Test.php @@ -30,6 +30,7 @@ protected function setUp() } /** + * @group embedded * @group DDC-3785 */ public function testOwningValueObjectIdIsCorrectlyTransformedWhenRemovingOrphanedChildEntities() diff --git a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php index d469168def6..4fdff963d71 100644 --- a/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Hydration/ResultSetMappingTest.php @@ -10,6 +10,7 @@ use Doctrine\ORM\Mapping\ClassMetadataFactory; use Doctrine\ORM\Mapping\JoinColumnMetadata; use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; +use Doctrine\ORM\Mapping\TableMetadata; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\ORM\Reflection\RuntimeReflectionService; use Doctrine\Tests\Models\CMS\CmsEmail; @@ -122,6 +123,7 @@ public function testFluentInterface() public function testAddNamedNativeQueryResultSetMapping() { $cm = new ClassMetadata(CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new TableMetadata("cms_users")); $joinColumn = new JoinColumnMetadata(); $joinColumn->setReferencedColumnName('id'); @@ -209,6 +211,7 @@ public function testAddNamedNativeQueryResultSetMapping() public function testAddNamedNativeQueryResultSetMappingWithoutFields() { $cm = new ClassMetadata(CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new TableMetadata("cms_users")); $cm->addNamedNativeQuery( 'find-all', diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 34de0e40355..0bfed7daa1e 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -53,6 +53,7 @@ public function setUp() public function testClassMetadataInstanceSimpleState() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); self::assertInstanceOf(\ReflectionClass::class, $cm->getReflectionClass()); self::assertEquals(CMS\CmsUser::class, $cm->getClassName()); @@ -65,8 +66,10 @@ public function testClassMetadataInstanceSimpleState() public function testClassMetadataInstanceSerialization() { $parent = new ClassMetadata(CMS\CmsEmployee::class, $this->metadataBuildingContext); - $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $parent->setTable(new Mapping\TableMetadata('cms_employee')); + $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable($parent->table); $cm->setParent($parent); $discrColumn = new DiscriminatorColumnMetadata(); @@ -129,6 +132,7 @@ public function testClassMetadataInstanceSerialization() public function testFieldIsNullable() { $metadata = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $metadata->setTable(new Mapping\TableMetadata('cms_users')); // Explicit Nullable $fieldMetadata = new Mapping\FieldMetadata('status'); @@ -177,6 +181,7 @@ public function testMapAssociationInGlobalNamespace() require_once __DIR__."/../../Models/Global/GlobalNamespaceModel.php"; $cm = new ClassMetadata(DoctrineGlobal_Article::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('doctrine_global_article')); $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('bar'); @@ -206,6 +211,7 @@ public function testMapAssociationInGlobalNamespace() public function testMapManyToManyJoinTableDefaults() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $association = new Mapping\ManyToManyAssociationMetadata('groups'); @@ -245,6 +251,7 @@ public function testMapManyToManyJoinTableDefaults() public function testSerializeManyToManyJoinTableCascade() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $association = new Mapping\ManyToManyAssociationMetadata('groups'); @@ -270,6 +277,7 @@ public function testSetDiscriminatorMapInGlobalNamespace() require_once __DIR__."/../../Models/Global/GlobalNamespaceModel.php"; $cm = new ClassMetadata('DoctrineGlobal_User', $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('doctrine_global_user')); $cm->setDiscriminatorMap(['descr' => 'DoctrineGlobal_Article', 'foo' => 'DoctrineGlobal_User']); @@ -285,6 +293,7 @@ public function testSetSubClassesInGlobalNamespace() require_once __DIR__."/../../Models/Global/GlobalNamespaceModel.php"; $cm = new ClassMetadata('DoctrineGlobal_User', $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('doctrine_global_user')); $cm->setSubclasses(['DoctrineGlobal_Article']); @@ -297,6 +306,7 @@ public function testSetSubClassesInGlobalNamespace() public function testSetInvalidVersionMapping_ThrowsException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $property = new Mapping\VersionFieldMetadata('foo'); @@ -312,6 +322,7 @@ public function testSetInvalidVersionMapping_ThrowsException() public function testGetSingleIdentifierFieldName_MultipleIdentifierEntity_ThrowsException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); @@ -333,6 +344,7 @@ public function testGetSingleIdentifierFieldName_MultipleIdentifierEntity_Throws public function testGetSingleIdentifierFieldName_NoIdEntity_ThrowsException() { $cm = new ClassMetadata(DDC6412File::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('ddc6412_file')); $this->expectException(\Doctrine\ORM\Mapping\MappingException::class); @@ -342,6 +354,7 @@ public function testGetSingleIdentifierFieldName_NoIdEntity_ThrowsException() public function testDuplicateAssociationMappingException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $association = new Mapping\OneToOneAssociationMetadata('foo'); @@ -367,6 +380,7 @@ public function testDuplicateAssociationMappingException() public function testDuplicateColumnName_ThrowsMappingException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $fieldMetadata = new Mapping\FieldMetadata('name'); @@ -387,6 +401,7 @@ public function testDuplicateColumnName_ThrowsMappingException() public function testDuplicateColumnName_DiscriminatorColumn_ThrowsMappingException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $fieldMetadata = new Mapping\FieldMetadata('name'); @@ -408,6 +423,7 @@ public function testDuplicateColumnName_DiscriminatorColumn_ThrowsMappingExcepti public function testDuplicateColumnName_DiscriminatorColumn2_ThrowsMappingException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $discrColumn = new DiscriminatorColumnMetadata(); @@ -429,6 +445,7 @@ public function testDuplicateColumnName_DiscriminatorColumn2_ThrowsMappingExcept public function testDuplicateFieldAndAssociationMapping1_ThrowsException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $fieldMetadata = new Mapping\FieldMetadata('name'); @@ -448,6 +465,7 @@ public function testDuplicateFieldAndAssociationMapping1_ThrowsException() public function testDuplicateFieldAndAssociationMapping2_ThrowsException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $association = new Mapping\OneToOneAssociationMetadata('name'); @@ -470,6 +488,7 @@ public function testDuplicateFieldAndAssociationMapping2_ThrowsException() public function testGetTemporaryTableNameSchema() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $tableMetadata = new Mapping\TableMetadata(); @@ -484,6 +503,7 @@ public function testGetTemporaryTableNameSchema() public function testDefaultTableName() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('CmsUser')); // When table's name is not given self::assertEquals('CmsUser', $cm->getTableName()); @@ -520,6 +540,7 @@ public function testDefaultTableName() public function testDefaultJoinColumnName() { $cm = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_address')); // this is really dirty, but it's the simplest way to test whether // joinColumn's name will be automatically set to user_id @@ -545,6 +566,7 @@ public function testDefaultJoinColumnName() self::assertEquals('user_id', $joinColumn->getColumnName()); $cm = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_address')); $joinTable = new Mapping\JoinTableMetadata(); $joinTable->setName('user_CmsUser'); @@ -591,7 +613,8 @@ public function testOneToOneUnderscoreNamingStrategyDefaults() $namingStrategy ); - $metadata = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); + $metadata = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); + $metadata->setTable(new Mapping\TableMetadata('cms_address')); $association = new Mapping\OneToOneAssociationMetadata('user'); @@ -620,7 +643,8 @@ public function testManyToManyUnderscoreNamingStrategyDefaults() $namingStrategy ); - $metadata = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); + $metadata = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); + $metadata->setTable(new Mapping\TableMetadata('cms_address')); $association = new Mapping\ManyToManyAssociationMetadata('user'); @@ -662,6 +686,7 @@ public function testManyToManyUnderscoreNamingStrategyDefaults() public function testSetMultipleIdentifierSetsComposite() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); @@ -702,6 +727,7 @@ public function testJoinTableMappingDefaults() public function testMapIdentifierAssociation() { $cm = new ClassMetadata(DDC117ArticleDetails::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata("ddc117_article_details")); $association = new Mapping\OneToOneAssociationMetadata('article'); @@ -719,6 +745,7 @@ public function testMapIdentifierAssociation() public function testOrphanRemovalIdentifierAssociation() { $cm = new ClassMetadata(DDC117ArticleDetails::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata("ddc117_article_details")); $this->expectException(MappingException::class); $this->expectExceptionMessage('The orphan removal option is not allowed on an association that'); @@ -738,6 +765,7 @@ public function testOrphanRemovalIdentifierAssociation() public function testInverseIdentifierAssociation() { $cm = new ClassMetadata(DDC117ArticleDetails::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata("ddc117_article_details")); $this->expectException(MappingException::class); $this->expectExceptionMessage('An inverse association is not allowed to be identifier in'); @@ -757,6 +785,7 @@ public function testInverseIdentifierAssociation() public function testIdentifierAssociationManyToMany() { $cm = new ClassMetadata(DDC117ArticleDetails::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata("ddc117_article_details")); $this->expectException(MappingException::class); $this->expectExceptionMessage('Many-to-many or one-to-many associations are not allowed to be identifier in'); @@ -778,6 +807,7 @@ public function testEmptyFieldNameThrowsException() $this->expectExceptionMessage("The field or association mapping misses the 'fieldName' attribute in entity '" . CMS\CmsUser::class . "'."); $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $fieldMetadata = new Mapping\FieldMetadata(''); @@ -789,6 +819,7 @@ public function testEmptyFieldNameThrowsException() public function testRetrievalOfNamedQueries() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); self::assertEquals(0, count($cm->getNamedQueries())); @@ -823,6 +854,7 @@ public function testRetrievalOfResultSetMappings() public function testExistanceOfNamedQuery() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $cm->addNamedQuery('all', 'SELECT u FROM __CLASS__ u'); @@ -836,6 +868,7 @@ public function testExistanceOfNamedQuery() public function testRetrieveOfNamedNativeQuery() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $cm->addNamedNativeQuery( 'find-all', @@ -874,6 +907,7 @@ public function testRetrieveOfNamedNativeQuery() public function testRetrieveOfSqlResultSetMapping() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $cm->addSqlResultSetMapping( [ @@ -929,6 +963,7 @@ public function testRetrieveOfSqlResultSetMapping() public function testExistanceOfSqlResultSetMapping() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $cm->addSqlResultSetMapping( [ @@ -951,6 +986,7 @@ public function testExistanceOfSqlResultSetMapping() public function testExistanceOfNamedNativeQuery() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $cm->addNamedNativeQuery( 'find-all', @@ -967,6 +1003,7 @@ public function testExistanceOfNamedNativeQuery() public function testRetrieveOfNamedQuery() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $cm->addNamedQuery('userById', 'SELECT u FROM __CLASS__ u WHERE u.id = ?1'); @@ -984,6 +1021,7 @@ public function testRetrieveOfNamedQuery() public function testRetrievalOfNamedNativeQueries() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); self::assertEquals(0, count($cm->getNamedNativeQueries())); @@ -1021,6 +1059,7 @@ public function testSerializeEntityListeners() public function testNamingCollisionNamedQueryShouldThrowException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $cm->addNamedQuery('userById', 'SELECT u FROM __CLASS__ u WHERE u.id = ?1'); $cm->addNamedQuery('userById', 'SELECT u FROM __CLASS__ u WHERE u.id = ?1'); @@ -1035,6 +1074,7 @@ public function testNamingCollisionNamedQueryShouldThrowException() public function testNamingCollisionNamedNativeQueryShouldThrowException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $cm->addNamedNativeQuery( 'find-all', @@ -1062,6 +1102,7 @@ public function testNamingCollisionNamedNativeQueryShouldThrowException() public function testNamingCollisionSqlResultSetMappingShouldThrowException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $cm->addSqlResultSetMapping( [ @@ -1092,6 +1133,7 @@ public function testNamingCollisionSqlResultSetMappingShouldThrowException() public function testClassCaseSensitivity() { $cm = new ClassMetadata(strtoupper(CMS\CmsUser::class), $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); self::assertEquals(CMS\CmsUser::class, $cm->getClassName()); } @@ -1102,6 +1144,7 @@ public function testClassCaseSensitivity() public function testLifecycleCallbackNotFound() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $cm->addLifecycleCallback('notfound', 'postLoad'); @@ -1117,6 +1160,7 @@ public function testLifecycleCallbackNotFound() public function testTargetEntityNotFound() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $association = new Mapping\ManyToOneAssociationMetadata('address'); @@ -1139,6 +1183,7 @@ public function testTargetEntityNotFound() public function testNameIsMandatoryForEntityNameSqlResultSetMappingException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $cm->addSqlResultSetMapping( [ @@ -1168,8 +1213,13 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategy() ); $addressMetadata = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); + $addressMetadata->setTable(new Mapping\TableMetadata($namingStrategy->classToTableName(CMS\CmsAddress::class))); + $articleMetadata = new ClassMetadata(DoctrineGlobal_Article::class, $this->metadataBuildingContext); + $articleMetadata->setTable(new Mapping\TableMetadata($namingStrategy->classToTableName(DoctrineGlobal_Article::class))); + $routingMetadata = new ClassMetadata(RoutingLeg::class, $this->metadataBuildingContext); + $routingMetadata->setTable(new Mapping\TableMetadata($namingStrategy->classToTableName(RoutingLeg::class))); $association = new Mapping\ManyToManyAssociationMetadata('user'); @@ -1203,6 +1253,7 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategyProperty ); $metadata = new ClassMetadata(CMS\CmsAddress::class, $this->metadataBuildingContext); + $metadata->setTable(new Mapping\TableMetadata($namingStrategy->classToTableName(CMS\CmsAddress::class))); $fieldMetadata = new Mapping\FieldMetadata('country'); @@ -1233,6 +1284,7 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategyProperty public function testInvalidCascade() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $association = new Mapping\ManyToOneAssociationMetadata('address'); @@ -1250,6 +1302,7 @@ public function testInvalidCascade() public function testInvalidPropertyAssociationOverrideNameException() { $cm = new ClassMetadata(DDC964Admin::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata("ddc964_admin")); $association = new Mapping\ManyToOneAssociationMetadata('address'); @@ -1267,17 +1320,18 @@ public function testInvalidPropertyAssociationOverrideNameException() */ public function testInvalidPropertyAttributeOverrideNameException() { - $metadata = new ClassMetadata(DDC964Guest::class, $this->metadataBuildingContext); + $cm = new ClassMetadata(DDC964Guest::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata("ddc964_guest")); $fieldMetadata = new Mapping\FieldMetadata('name'); $fieldMetadata->setType(Type::getType('string')); - $metadata->addProperty($fieldMetadata); + $cm->addProperty($fieldMetadata); $fieldMetadata = new Mapping\FieldMetadata('invalidPropertyName'); $fieldMetadata->setType(Type::getType('string')); - $metadata->setPropertyOverride($fieldMetadata); + $cm->setPropertyOverride($fieldMetadata); } /** @@ -1289,6 +1343,7 @@ public function testInvalidPropertyAttributeOverrideNameException() public function testInvalidEntityListenerClassException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $cm->addEntityListener(Events::postLoad, '\InvalidClassName', 'postLoadHandler'); } @@ -1302,6 +1357,7 @@ public function testInvalidEntityListenerClassException() public function testInvalidEntityListenerMethodException() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $cm->addEntityListener(Events::postLoad, 'Doctrine\Tests\Models\Company\CompanyContractListener', 'invalidMethod'); } @@ -1309,6 +1365,7 @@ public function testInvalidEntityListenerMethodException() public function testManyToManySelfReferencingNamingStrategyDefaults() { $cm = new ClassMetadata(CustomTypeParent::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata("custom_type_parent")); $association = new Mapping\ManyToManyAssociationMetadata('friendsWithMe'); @@ -1351,6 +1408,7 @@ public function testManyToManySelfReferencingNamingStrategyDefaults() public function testQuotedSequenceName() { $cm = new ClassMetadata(CMS\CmsUser::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata('cms_users')); $id = new Mapping\FieldMetadata('id'); $id->setValueGenerator(new Mapping\ValueGeneratorMetadata( @@ -1384,6 +1442,7 @@ public function testIsIdentifierMappedSuperClass() public function testWakeupReflectionWithEmbeddableAndStaticReflectionService() { $metadata = new ClassMetadata(TestEntity1::class, $this->metadataBuildingContext); + $cm->setTable(new Mapping\TableMetadata("test_entity1")); $metadata->mapEmbedded( [ diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 463312171d5..e8bba8cb5cf 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -240,6 +240,7 @@ private function generateEntityTypeFixture(array $field) private function generateIsbnEmbeddableFixture(array $embeddedClasses = [], $columnPrefix = null) { $metadata = new ClassMetadata($this->namespace . '\EntityGeneratorIsbn', $this->staticMetadataBuildingContext); + $metadata->isEmbeddedClass = true; $fieldMetadata = new Mapping\FieldMetadata('prefix'); @@ -522,6 +523,7 @@ public function testEntityUpdatingWorks() } /** + * @group embedded * @group DDC-2121 */ public function testMethodDocBlockShouldStartWithBackSlash() @@ -541,12 +543,16 @@ public function testMethodDocBlockShouldStartWithBackSlash() self::assertPhpDocReturnType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor|null', new \ReflectionMethod($book, 'getAuthor')); self::assertPhpDocParamType('\Doctrine\Tests\ORM\Tools\EntityGeneratorAuthor|null', new \ReflectionMethod($book, 'setAuthor')); -// $expectedClassName = '\\' . $embeddedMetadata->getClassName(); -// self::assertPhpDocVarType($expectedClassName, new \ReflectionProperty($book, 'isbn')); -// self::assertPhpDocReturnType($expectedClassName, new \ReflectionMethod($book, 'getIsbn')); -// self::assertPhpDocParamType($expectedClassName, new \ReflectionMethod($book, 'setIsbn')); + $expectedClassName = '\\' . $embeddedMetadata->getClassName(); + + self::assertPhpDocVarType($expectedClassName, new \ReflectionProperty($book, 'isbn')); + self::assertPhpDocReturnType($expectedClassName, new \ReflectionMethod($book, 'getIsbn')); + self::assertPhpDocParamType($expectedClassName, new \ReflectionMethod($book, 'setIsbn')); } + /** + * @group embedded + */ public function testEntityExtendsStdClass() { $this->generator->setClassToExtend('stdClass'); @@ -571,6 +577,9 @@ public function testLifecycleCallbacks() self::assertTrue($reflClass->hasMethod('willBeRemoved'), "Check for preRemove lifecycle callback."); } + /** + * @group embedded + */ public function testLoadMetadata() { $embeddedMetadata = $this->generateIsbnEmbeddableFixture(); @@ -586,21 +595,24 @@ public function testLoadMetadata() self::assertEquals($cm->lifecycleCallbacks, $metadata->lifecycleCallbacks); self::assertEquals($cm->identifier, $metadata->identifier); self::assertEquals($cm->getCustomRepositoryClassName(), $metadata->getCustomRepositoryClassName()); -// self::assertEquals($cm->embeddedClasses, $metadata->embeddedClasses); -// self::assertEquals($cm->isEmbeddedClass, $metadata->isEmbeddedClass); + self::assertEquals($cm->embeddedClasses, $metadata->embeddedClasses); + self::assertEquals($cm->isEmbeddedClass, $metadata->isEmbeddedClass); self::assertEquals(Mapping\FetchMode::EXTRA_LAZY, $cm->getProperty('comments')->getFetchMode()); -// $isbn = $this->newInstance($embeddedMetadata); -// -// $cm = new ClassMetadata($embeddedMetadata->getClassName(), $this->runtimeMetadataBuildingContext); -// -// $driver->loadMetadataForClass($cm->getClassName(), $cm); -// -// self::assertEquals($cm->embeddedClasses, $embeddedMetadata->embeddedClasses); -// self::assertEquals($cm->isEmbeddedClass, $embeddedMetadata->isEmbeddedClass); + $isbn = $this->newInstance($embeddedMetadata); + + $cm = new ClassMetadata($embeddedMetadata->getClassName(), $this->runtimeMetadataBuildingContext); + + $driver->loadMetadataForClass($cm->getClassName(), $cm); + + self::assertEquals($cm->embeddedClasses, $embeddedMetadata->embeddedClasses); + self::assertEquals($cm->isEmbeddedClass, $embeddedMetadata->isEmbeddedClass); } + /** + * @group embedded + */ public function testLoadPrefixedMetadata() { $embeddedMetadata = $this->generateIsbnEmbeddableFixture(); @@ -620,14 +632,14 @@ public function testLoadPrefixedMetadata() self::assertEquals($cm->identifier, $metadata->identifier); self::assertEquals($cm->getCustomRepositoryClassName(), $metadata->getCustomRepositoryClassName()); -// $isbn = $this->newInstance($embeddedMetadata); -// -// $cm = new ClassMetadata($embeddedMetadata->getClassName(), $this->runtimeMetadataBuildingContext); -// -// $driver->loadMetadataForClass($cm->getClassName(), $cm); -// -// self::assertEquals($cm->embeddedClasses, $embeddedMetadata->embeddedClasses); -// self::assertEquals($cm->isEmbeddedClass, $embeddedMetadata->isEmbeddedClass); + $isbn = $this->newInstance($embeddedMetadata); + + $cm = new ClassMetadata($embeddedMetadata->getClassName(), $this->runtimeMetadataBuildingContext); + + $driver->loadMetadataForClass($cm->getClassName(), $cm); + + self::assertEquals($cm->embeddedClasses, $embeddedMetadata->embeddedClasses); + self::assertEquals($cm->isEmbeddedClass, $embeddedMetadata->isEmbeddedClass); } /** @@ -673,6 +685,7 @@ public function testParseTokensInEntityFile($php, $classes) public function testGenerateEntityWithSequenceGenerator() { $metadata = new ClassMetadata($this->namespace . '\DDC1784Entity', $this->staticMetadataBuildingContext); + $metadata->setTable(new Mapping\TableMetadata('ddc1784_entity')); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); @@ -711,6 +724,7 @@ public function testGenerateEntityWithSequenceGenerator() public function testGenerateEntityWithMultipleInverseJoinColumns() { $metadata = new ClassMetadata($this->namespace . '\DDC2079Entity', $this->staticMetadataBuildingContext); + $metadata->setTable(new Mapping\TableMetadata('ddc2079_entity')); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php index e7fbd03d1f5..783cec1daf6 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/XmlClassMetadataExporterTest.php @@ -52,8 +52,11 @@ public function testSequenceGenerator() $this->createMock(Mapping\ClassMetadataFactory::class), $this->createMock(ReflectionService::class) ); + $exporter = new XmlExporter(); + $metadata = new ClassMetadata('entityTest', $metadataBuildingContext); + $metadata->setTable(new Mapping\TableMetadata('entityTest')); $fieldMetadata = new Mapping\FieldMetadata('id'); $fieldMetadata->setType(Type::getType('integer')); @@ -98,8 +101,11 @@ public function testFieldOptionsExport() $this->createMock(Mapping\ClassMetadataFactory::class), $this->createMock(ReflectionService::class) ); + $exporter = new XmlExporter(); + $metadata = new ClassMetadata('entityTest', $metadataBuildingContext); + $metadata->setTable(new Mapping\TableMetadata('entityTest')); $fieldMetadata = new Mapping\FieldMetadata('myField'); $fieldMetadata->setType(Type::getType('string')); From 32a4d64647ff544fca259bde030069f191869cd8 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 2 Dec 2015 17:54:48 +0100 Subject: [PATCH 235/275] Removing functional test cases covering `EntityManager#merge()` semantics --- .../ORM/Functional/Ticket/DDC117Test.php | 16 -- .../ORM/Functional/Ticket/DDC1276Test.php | 49 ----- .../ORM/Functional/Ticket/DDC1383Test.php | 102 ---------- .../ORM/Functional/Ticket/DDC1392Test.php | 131 ------------ .../ORM/Functional/Ticket/DDC1509Test.php | 150 -------------- .../ORM/Functional/Ticket/DDC1594Test.php | 43 ---- .../ORM/Functional/Ticket/DDC1734Test.php | 94 --------- .../ORM/Functional/Ticket/DDC2230Test.php | 23 --- .../ORM/Functional/Ticket/DDC2409Test.php | 74 ------- .../ORM/Functional/Ticket/DDC2645Test.php | 57 ------ .../ORM/Functional/Ticket/DDC3699Test.php | 104 ---------- .../ORM/Functional/Ticket/DDC501Test.php | 122 ------------ .../ORM/Functional/Ticket/DDC518Test.php | 37 ---- .../ORM/Functional/Ticket/DDC729Test.php | 188 ------------------ .../ORM/Functional/Ticket/DDC758Test.php | 187 ----------------- 15 files changed, 1377 deletions(-) delete mode 100644 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1276Test.php delete mode 100644 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1383Test.php delete mode 100644 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1392Test.php delete mode 100644 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php delete mode 100644 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1594Test.php delete mode 100644 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php delete mode 100644 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2409Test.php delete mode 100644 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2645Test.php delete mode 100644 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3699Test.php delete mode 100644 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC501Test.php delete mode 100644 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC518Test.php delete mode 100644 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC729Test.php delete mode 100644 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC117Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC117Test.php index 920ecc29f19..5aa72a78f31 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC117Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC117Test.php @@ -428,22 +428,6 @@ private function loadEditorFixture() return $this->em->find(get_class($editor), $editor->id); } - /** - * @group DDC-1519 - */ - public function testMergeForeignKeyIdentifierEntity() - { - $idCriteria = ['source' => $this->article1->id(), 'target' => $this->article2->id()]; - - $refRep = $this->em->find(DDC117Reference::class, $idCriteria); - - $this->em->detach($refRep); - $refRep = $this->em->merge($refRep); - - self::assertEquals($this->article1->id(), $refRep->source()->id()); - self::assertEquals($this->article2->id(), $refRep->target()->id()); - } - /** * @group DDC-1652 */ diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1276Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1276Test.php deleted file mode 100644 index 50e88602543..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1276Test.php +++ /dev/null @@ -1,49 +0,0 @@ -useModelSet('cms'); - parent::setUp(); - } - - public function testIssue() - { - $user = new CmsUser(); - $user->name = "Benjamin"; - $user->username = "beberlei"; - $user->status = "active"; - $this->em->persist($user); - - for ($i = 0; $i < 2; $i++) { - $group = new CmsGroup(); - $group->name = "group".$i; - $user->groups[] = $group; - $this->em->persist($group); - } - $this->em->flush(); - $this->em->clear(); - - $user = $this->em->find(CmsUser::class, $user->id); - $cloned = clone $user; - - self::assertSame($user->groups, $cloned->groups); - self::assertEquals(2, count($user->groups)); - $this->em->merge($cloned); - - self::assertEquals(2, count($user->groups)); - - $this->em->flush(); - } -} diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1383Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1383Test.php deleted file mode 100644 index ce53e30b85c..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1383Test.php +++ /dev/null @@ -1,102 +0,0 @@ -schemaTool->createSchema( - [ - $this->em->getClassMetadata(DDC1383AbstractEntity::class), - $this->em->getClassMetadata(DDC1383Entity::class), - ] - ); - } catch(\Exception $ignored) {} - } - - public function testFailingCase() - { - $parent = new DDC1383Entity(); - $child = new DDC1383Entity(); - - $child->setReference($parent); - - $this->em->persist($parent); - $this->em->persist($child); - - $id = $child->getId(); - - $this->em->flush(); - $this->em->clear(); - - // Try merging the parent entity - $child = $this->em->merge($child); - $parent = $child->getReference(); - - // Parent is not instance of the abstract class - self::assertTrue($parent instanceof DDC1383AbstractEntity, - "Entity class is " . get_class($parent) . ', "DDC1383AbstractEntity" was expected'); - - // Parent is NOT instance of entity - self::assertTrue($parent instanceof DDC1383Entity, - "Entity class is " . get_class($parent) . ', "DDC1383Entity" was expected'); - } -} - -/** - * @ORM\Entity - * @ORM\InheritanceType("JOINED") - * @ORM\DiscriminatorColumn(name="discr", type="integer") - * @ORM\DiscriminatorMap({1 = "DDC1383Entity"}) - */ -abstract class DDC1383AbstractEntity -{ - /** - * @ORM\Id - * @ORM\Column(type="integer") - * @ORM\GeneratedValue - */ - protected $id; - - public function getId() - { - return $this->id; - } - - public function setId($id) - { - $this->id = $id; - } -} - -/** - * @ORM\Entity - */ -class DDC1383Entity extends DDC1383AbstractEntity -{ - /** - * @ORM\ManyToOne(targetEntity="DDC1383AbstractEntity") - */ - protected $reference; - - public function getReference() - { - return $this->reference; - } - - public function setReference(DDC1383AbstractEntity $reference) - { - $this->reference = $reference; - } -} diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1392Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1392Test.php deleted file mode 100644 index 6ddcbce18ba..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1392Test.php +++ /dev/null @@ -1,131 +0,0 @@ -schemaTool->createSchema( - [ - $this->em->getClassMetadata(DDC1392File::class), - $this->em->getClassMetadata(DDC1392Picture::class), - ] - ); - } catch (\Exception $ignored) { - } - } - - public function testFailingCase() - { - $file = new DDC1392File; - - $picture = new DDC1392Picture; - $picture->setFile($file); - - $em = $this->em; - $em->persist($picture); - $em->flush(); - $em->clear(); - - $fileId = $file->getFileId(); - $pictureId = $picture->getPictureId(); - - self::assertTrue($fileId > 0); - - $picture = $em->find(DDC1392Picture::class, $pictureId); - self::assertEquals(UnitOfWork::STATE_MANAGED, $em->getUnitOfWork()->getEntityState($picture->getFile()), "Lazy Proxy should be marked MANAGED."); - - $file = $picture->getFile(); - - // With this activated there will be no problem - //$file->__load(); - - $picture->setFile(null); - - $em->clear(); - - $em->merge($file); - - $em->flush(); - - $q = $this->em->createQuery("SELECT COUNT(e) FROM " . __NAMESPACE__ . '\DDC1392File e'); - $result = $q->getSingleScalarResult(); - - self::assertEquals(1, $result); - } -} - -/** - * @ORM\Entity - */ -class DDC1392Picture -{ - /** - * @ORM\Column(name="picture_id", type="integer") - * @ORM\Id @ORM\GeneratedValue - */ - private $pictureId; - - /** - * @ORM\ManyToOne(targetEntity="DDC1392File", cascade={"persist", "remove"}) - * @ORM\JoinColumn(name="file_id", referencedColumnName="file_id") - */ - private $file; - - /** - * Get pictureId - */ - public function getPictureId() - { - return $this->pictureId; - } - - /** - * Set file - */ - public function setFile($value = null) - { - $this->file = $value; - } - - /** - * Get file - */ - public function getFile() - { - return $this->file; - } -} - -/** - * @ORM\Entity - */ -class DDC1392File -{ - /** - * @ORM\Column(name="file_id", type="integer") - * @ORM\Id - * @ORM\GeneratedValue(strategy="AUTO") - */ - public $fileId; - - /** - * Get fileId - */ - public function getFileId() - { - return $this->fileId; - } -} diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php deleted file mode 100644 index 0b743b2963c..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1509Test.php +++ /dev/null @@ -1,150 +0,0 @@ -schemaTool->createSchema( - [ - $this->em->getClassMetadata(DDC1509AbstractFile::class), - $this->em->getClassMetadata(DDC1509File::class), - $this->em->getClassMetadata(DDC1509Picture::class), - ] - ); - } catch (\Exception $ignored) { - - } - } - - public function testFailingCase() - { - $file = new DDC1509File; - $thumbnail = new DDC1509File; - - $picture = new DDC1509Picture; - $picture->setFile($file); - $picture->setThumbnail($thumbnail); - - - /* @var $em \Doctrine\ORM\EntityManagerInterface */ - $em = $this->em; - $em->persist($picture); - $em->flush(); - $em->clear(); - - $id = $picture->getPictureId(); - - $pic = $em->merge($picture); - /* @var $pic DDC1509Picture */ - - self::assertNotNull($pic->getThumbnail()); - self::assertNotNull($pic->getFile()); - } - -} - -/** - * @ORM\Entity - */ -class DDC1509Picture -{ - - /** - * @ORM\Column(type="integer") - * @ORM\Id - * @ORM\GeneratedValue(strategy="AUTO") - */ - private $id; - - /** - * @ORM\ManyToOne(targetEntity="DDC1509AbstractFile", cascade={"persist", "remove"}) - */ - private $thumbnail; - - /** - * @ORM\ManyToOne(targetEntity="DDC1509AbstractFile", cascade={"persist", "remove"}) - */ - private $file; - - /** - * Get pictureId - */ - public function getPictureId() - { - return $this->id; - } - - /** - * Set file - */ - public function setFile($value = null) - { - $this->file = $value; - } - - /** - * Get file - */ - public function getFile() - { - return $this->file; - } - - public function getThumbnail() - { - return $this->thumbnail; - } - - public function setThumbnail($thumbnail) - { - $this->thumbnail = $thumbnail; - } - -} - -/** - * @ORM\Entity - * @ORM\InheritanceType("SINGLE_TABLE") - * @ORM\DiscriminatorColumn(name="discr", type="string") - * @ORM\DiscriminatorMap({"abstractFile" = "DDC1509AbstractFile", "file" = "DDC1509File"}) - */ -class DDC1509AbstractFile -{ - - /** - * @ORM\Column(type="integer") - * @ORM\Id - * @ORM\GeneratedValue(strategy="AUTO") - */ - public $id; - - /** - * Get fileId - */ - public function getFileId() - { - return $this->id; - } - -} - -/** - * @ORM\Entity - */ -class DDC1509File extends DDC1509AbstractFile -{ - -} diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1594Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1594Test.php deleted file mode 100644 index 4d77cc76767..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1594Test.php +++ /dev/null @@ -1,43 +0,0 @@ -useModelSet('cms'); - parent::setUp(); - } - - public function testIssue() - { - $user = new CmsUser(); - $user->status = 'foo'; - $user->username = 'foo'; - $user->name = 'foo'; - - $this->em->persist($user); - $this->em->flush(); - - $this->em->clear(); - $detachedUser = clone $user; - $detachedUser->name = 'bar'; - $detachedUser->status = 'bar'; - - $newUser = $this->em->getReference(get_class($user), $user->id); - - $mergedUser = $this->em->merge($detachedUser); - - self::assertNotSame($mergedUser, $detachedUser); - self::assertEquals('bar', $detachedUser->getName()); - self::assertEquals('bar', $mergedUser->getName()); - } -} diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php deleted file mode 100644 index dfbacf99240..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1734Test.php +++ /dev/null @@ -1,94 +0,0 @@ -useModelSet('cms'); - parent::setUp(); - } - - /** - * This test is DDC-1734 minus the serialization, i.e. it works - * - * @group DDC-1734 - */ - public function testMergeWorksOnNonSerializedProxies() - { - $group = new CmsGroup(); - - $group->setName('Foo'); - $this->em->persist($group); - $this->em->flush(); - $this->em->clear(); - - $proxy = $this->getProxy($group); - - self::assertInstanceOf(Proxy::class, $proxy); - self::assertFalse($proxy->__isInitialized()); - - $this->em->detach($proxy); - $this->em->clear(); - - $proxy = $this->em->merge($proxy); - - self::assertEquals('Foo', $proxy->getName(), 'The entity is broken'); - } - - /** - * This test reproduces DDC-1734 which is: - * - A non-initialized proxy is detached and serialized (the identifier of the proxy is *not* serialized) - * - the object is deserialized and merged (to turn into an entity) - * - the entity is broken because it has no identifier and no field defined - * - * @group DDC-1734 - */ - public function testMergeWorksOnSerializedProxies() - { - $group = new CmsGroup(); - - $group->setName('Foo'); - $this->em->persist($group); - $this->em->flush(); - $this->em->clear(); - - $proxy = $this->getProxy($group); - - self::assertInstanceOf(Proxy::class, $proxy); - self::assertFalse($proxy->__isInitialized()); - - $this->em->detach($proxy); - $serializedProxy = serialize($proxy); - $this->em->clear(); - - $unserializedProxy = $this->em->merge(unserialize($serializedProxy)); - self::assertEquals('Foo', $unserializedProxy->getName(), 'The entity is broken'); - } - - /** - * @param object $object - * - * @return \Doctrine\Common\Proxy\Proxy - */ - private function getProxy($object) - { - $unitOfWork = $this->em->getUnitOfWork(); - $proxyFactory = $this->em->getProxyFactory(); - $className = get_class($object); - $persister = $unitOfWork->getEntityPersister($className); - $identifier = $persister->getIdentifier($object); - - return $proxyFactory->getProxy($className, $identifier); - } - -} diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php index d5a73d12547..3751f342df6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2230Test.php @@ -28,29 +28,6 @@ protected function setUp() } catch (ToolsException $e) {} } - public function testNotifyTrackingNotCalledOnUninitializedProxies() - { - $insertedUser = new DDC2230User(); - $insertedUser->address = new DDC2230Address(); - - $this->em->persist($insertedUser); - $this->em->persist($insertedUser->address); - $this->em->flush(); - $this->em->clear(); - - $user = $this->em->find(DDC2230User::class, $insertedUser->id); - - $this->em->clear(); - - $mergedUser = $this->em->merge($user); - - /* @var $address Proxy */ - $address = $mergedUser->address; - - self::assertInstanceOf(Proxy::class, $address); - self::assertFalse($address->__isInitialized()); - } - public function testNotifyTrackingCalledOnProxyInitialization() { $insertedAddress = new DDC2230Address(); diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2409Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2409Test.php deleted file mode 100644 index 486529dc6dd..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2409Test.php +++ /dev/null @@ -1,74 +0,0 @@ -useModelSet('cms'); - parent::setUp(); - } - - public function testIssue() - { - $em = $this->em; - $uow = $em->getUnitOfWork(); - - $originalArticle = new CmsArticle(); - $originalUser = new CmsUser(); - - $originalArticle->topic = 'Unit Test'; - $originalArticle->text = 'How to write a test'; - - $originalUser->name = 'Doctrine Bot'; - $originalUser->username = 'DoctrineBot'; - $originalUser->status = 'active'; - - $originalUser->addArticle($originalArticle); - - $em->persist($originalUser); - $em->persist($originalArticle); - $em->flush(); - $em->clear(); - - $article = $em->find(CmsArticle::class, $originalArticle->id); - $user = new CmsUser(); - - $user->name = 'Doctrine Bot 2.0'; - $user->username = 'BotDoctrine2'; - $user->status = 'new'; - - $article->setAuthor($user); - - self::assertEquals(UnitOfWork::STATE_DETACHED, $uow->getEntityState($originalArticle)); - self::assertEquals(UnitOfWork::STATE_DETACHED, $uow->getEntityState($originalUser)); - self::assertEquals(UnitOfWork::STATE_MANAGED, $uow->getEntityState($article)); - self::assertEquals(UnitOfWork::STATE_NEW, $uow->getEntityState($user)); - - $em->detach($user); - $em->detach($article); - - $userMerged = $em->merge($user); - $articleMerged = $em->merge($article); - - self::assertEquals(UnitOfWork::STATE_NEW, $uow->getEntityState($user)); - self::assertEquals(UnitOfWork::STATE_DETACHED, $uow->getEntityState($article)); - self::assertEquals(UnitOfWork::STATE_MANAGED, $uow->getEntityState($userMerged)); - self::assertEquals(UnitOfWork::STATE_MANAGED, $uow->getEntityState($articleMerged)); - - self::assertNotSame($user, $userMerged); - self::assertNotSame($article, $articleMerged); - self::assertNotSame($userMerged, $articleMerged->user); - self::assertSame($user, $articleMerged->user); - } -} diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2645Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2645Test.php deleted file mode 100644 index f00a9435888..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2645Test.php +++ /dev/null @@ -1,57 +0,0 @@ -id = 123; - - $foo = new DDC2645Foo(1, $bar, 'Foo'); - $foo2 = new DDC2645Foo(1, $bar, 'Bar'); - - $this->em->persist($bar); - $this->em->persist($foo); - - $foo3 = $this->em->merge($foo2); - - self::assertSame($foo, $foo3); - self::assertEquals('Bar', $foo->name); - } -} - -/** @ORM\Entity */ -class DDC2645Foo -{ - /** @ORM\Id @ORM\Column(type="integer") */ - private $id; - - /** @ORM\Id @ORM\ManyToOne(targetEntity="DDC2645Bar") */ - private $bar; - - /** @ORM\Column */ - public $name; - - public function __construct($id, $bar, $name) - { - $this->id = $id; - $this->bar = $bar; - $this->name = $name; - } -} - -/** @ORM\Entity */ -class DDC2645Bar -{ - /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue(strategy="NONE") */ - public $id; -} diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3699Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3699Test.php deleted file mode 100644 index c448ee7b92f..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC3699Test.php +++ /dev/null @@ -1,104 +0,0 @@ -useModelSet('ddc3699'); - - parent::setUp(); - } - - /** - * @group DDC-3699 - */ - public function testMergingParentClassFieldsDoesNotStopMergingScalarFieldsForToOneUninitializedAssociations() - { - $id = 1; - - $child = new DDC3699Child(); - - $child->id = $id; - $child->childField = 'childValue'; - $child->parentField = 'parentValue'; - - $relation = new DDC3699RelationOne(); - - $relation->id = $id; - $relation->child = $child ; - $child->oneRelation = $relation; - - $this->em->persist($relation); - $this->em->persist($child); - $this->em->flush(); - $this->em->clear(); - - // fixtures loaded - /* @var $unManagedChild DDC3699Child */ - $unManagedChild = $this->em->find(DDC3699Child::class, $id); - - $this->em->detach($unManagedChild); - - // make it managed again - $this->em->find(DDC3699Child::class, $id); - - $unManagedChild->childField = 'modifiedChildValue'; - $unManagedChild->parentField = 'modifiedParentValue'; - - /* @var $mergedChild DDC3699Child */ - $mergedChild = $this->em->merge($unManagedChild); - - self::assertSame($mergedChild->childField, 'modifiedChildValue'); - self::assertSame($mergedChild->parentField, 'modifiedParentValue'); - } - - /** - * @group DDC-3699 - */ - public function testMergingParentClassFieldsDoesNotStopMergingScalarFieldsForToManyUninitializedAssociations() - { - $id = 2; - - $child = new DDC3699Child(); - - $child->id = $id; - $child->childField = 'childValue'; - $child->parentField = 'parentValue'; - - $relation = new DDC3699RelationMany(); - - $relation->id = $id; - $relation->child = $child ; - $child->relations[] = $relation; - - $this->em->persist($relation); - $this->em->persist($child); - $this->em->flush(); - $this->em->clear(); - - /* @var $unmanagedChild DDC3699Child */ - $unmanagedChild = $this->em->find(DDC3699Child::class, $id); - $this->em->detach($unmanagedChild); - - // make it managed again - $this->em->find(DDC3699Child::class, $id); - - $unmanagedChild->childField = 'modifiedChildValue'; - $unmanagedChild->parentField = 'modifiedParentValue'; - - /* @var $mergedChild DDC3699Child */ - $mergedChild = $this->em->merge($unmanagedChild); - - self::assertSame($mergedChild->childField, 'modifiedChildValue'); - self::assertSame($mergedChild->parentField, 'modifiedParentValue'); - } -} diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC501Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC501Test.php deleted file mode 100644 index 8002a5cd57a..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC501Test.php +++ /dev/null @@ -1,122 +0,0 @@ -useModelSet('cms'); - parent::setUp(); - } - - public function testMergeUnitializedManyToManyAndOneToManyCollections() - { - // Create User - $user = $this->createAndPersistUser(); - $this->em->flush(); - - self::assertTrue($this->em->contains($user)); - $this->em->clear(); - self::assertFalse($this->em->contains($user)); - - unset($user); - - // Reload User from DB *without* any associations (i.e. an uninitialized PersistantCollection) - $userReloaded = $this->loadUserFromEntityManager(); - - self::assertTrue($this->em->contains($userReloaded)); - $this->em->clear(); - self::assertFalse($this->em->contains($userReloaded)); - - // freeze and unfreeze - $userClone = unserialize(serialize($userReloaded)); - self::assertInstanceOf(CmsUser::class, $userClone); - - // detached user can't know about his phonenumbers - self::assertEquals(0, count($userClone->getPhonenumbers())); - self::assertFalse($userClone->getPhonenumbers()->isInitialized(), "User::phonenumbers should not be marked initialized."); - - // detached user can't know about his groups either - self::assertEquals(0, count($userClone->getGroups())); - self::assertFalse($userClone->getGroups()->isInitialized(), "User::groups should not be marked initialized."); - - // Merge back and flush - $userClone = $this->em->merge($userClone); - - // Back in managed world I would expect to have my phonenumbers back but they aren't! - // Remember I didn't touch (and probably didn't need) them at all while in detached mode. - self::assertEquals(4, count($userClone->getPhonenumbers()), 'Phonenumbers are not available anymore'); - - // This works fine as long as cmUser::groups doesn't cascade "merge" - self::assertEquals(2, count($userClone->getGroups())); - - $this->em->flush(); - $this->em->clear(); - - self::assertFalse($this->em->contains($userClone)); - - // Reload user from DB - $userFromEntityManager = $this->loadUserFromEntityManager(); - - //Strange: Now the phonenumbers are back again - self::assertEquals(4, count($userFromEntityManager->getPhonenumbers())); - - // This works fine as long as cmUser::groups doesn't cascade "merge" - // Otherwise group memberships are physically deleted now! - self::assertEquals(2, count($userClone->getGroups())); - } - - protected function createAndPersistUser() - { - $user = new CmsUser(); - $user->name = 'Luka'; - $user->username = 'lukacho'; - $user->status = 'developer'; - - foreach([1111,2222,3333,4444] as $number) { - $phone = new CmsPhonenumber; - $phone->phonenumber = $number; - $user->addPhonenumber($phone); - } - - foreach(['Moshers', 'Headbangers'] as $groupName) { - $group = new CmsGroup; - $group->setName($groupName); - $user->addGroup($group); - } - - $this->em->persist($user); - - return $user; - } - - /** - * @return Doctrine\Tests\Models\CMS\CmsUser - */ - protected function loadUserFromEntityManager() - { - return $this->em - ->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u.name like :name') - ->setParameter('name', 'Luka') - ->getSingleResult(); - } - -} diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC518Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC518Test.php deleted file mode 100644 index 43623a5fede..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC518Test.php +++ /dev/null @@ -1,37 +0,0 @@ -useModelSet('cms'); - parent::setUp(); - } - - public function testMergeWithRelatedNew() - { - $article = new \Doctrine\Tests\Models\CMS\CmsArticle(); - $article->text = "foo"; - $article->topic = "bar"; - - $this->em->persist($article); - $this->em->flush(); - $this->em->detach($article); - $this->em->clear(); - - $user = new \Doctrine\Tests\Models\CMS\CmsUser(); - $user->username = "beberlei"; - $user->name = "Benjamin Eberlei"; - $user->status = "active"; - $article->user = $user; - - $this->em->persist($user); - $managedArticle = $this->em->merge($article); - - self::assertSame($article->user, $managedArticle->user); - } -} diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC729Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC729Test.php deleted file mode 100644 index 179f0c91a25..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC729Test.php +++ /dev/null @@ -1,188 +0,0 @@ -em); - $schemaTool->createSchema( - [ - $this->em->getClassMetadata(DDC729A::class), - $this->em->getClassMetadata(DDC729B::class), - ] - ); - } catch(\Exception $e) { - - } - } - - public function testMergeManyToMany() - { - $a = new DDC729A(); - $b = new DDC729B(); - $a->related[] = $b; - - $this->em->persist($a); - $this->em->persist($b); - $this->em->flush(); - $this->em->clear(); - $aId = $a->id; - - $a = new DDC729A(); - $a->id = $aId; - - self::assertInstanceOf(ArrayCollection::class, $a->related); - - $a = $this->em->merge($a); - - self::assertInstanceOf(PersistentCollection::class, $a->related); - - self::assertFalse($a->related->isInitialized(), "Collection should not be marked initialized."); - self::assertFalse($a->related->isDirty(), "Collection should not be marked as dirty."); - - $this->em->flush(); - $this->em->clear(); - - $a = $this->em->find(DDC729A::class, $aId); - self::assertEquals(1, count($a->related)); - } - - public function testUnidirectionalMergeManyToMany() - { - $a = new DDC729A(); - $b1 = new DDC729B(); - $b2 = new DDC729B(); - $a->related[] = $b1; - - $this->em->persist($a); - $this->em->persist($b1); - $this->em->persist($b2); - $this->em->flush(); - $this->em->clear(); - $aId = $a->id; - - $a = new DDC729A(); - $a->id = $aId; - - $a = $this->em->merge($a); - - $a->related->set(0, $this->em->merge($b1)); - - $a->related->set(1, $this->em->merge($b2)); - - $this->em->flush(); - $this->em->clear(); - - $a = $this->em->find(DDC729A::class, $aId); - self::assertEquals(2, count($a->related)); - } - - public function testBidirectionalMergeManyToMany() - { - $a = new DDC729A(); - $b1 = new DDC729B(); - $b2 = new DDC729B(); - $a->related[] = $b1; - - $this->em->persist($a); - $this->em->persist($b1); - $this->em->persist($b2); - $this->em->flush(); - $this->em->clear(); - $aId = $a->id; - - $a = new DDC729A(); - $a->id = $aId; - - $a = $this->em->merge($a); - - $a->related->set(0, $this->em->merge($b1)); - $b1->related->set(0, $a); - - $a->related->set(1, $this->em->merge($b2)); - $b2->related->set(0, $a); - - $this->em->flush(); - $this->em->clear(); - - $a = $this->em->find(DDC729A::class, $aId); - self::assertEquals(2, count($a->related)); - } - - public function testBidirectionalMultiMergeManyToMany() - { - $a = new DDC729A(); - $b1 = new DDC729B(); - $b2 = new DDC729B(); - $a->related[] = $b1; - - $this->em->persist($a); - $this->em->persist($b1); - $this->em->persist($b2); - $this->em->flush(); - $this->em->clear(); - $aId = $a->id; - - $a = new DDC729A(); - $a->id = $aId; - - $a = $this->em->merge($a); - - $a->related->set(0, $this->em->merge($b1)); - $b1->related->set(0, $this->em->merge($a)); - - $a->related->set(1, $this->em->merge($b2)); - $b2->related->set(0, $this->em->merge($a)); - - $this->em->flush(); - $this->em->clear(); - - $a = $this->em->find(DDC729A::class, $aId); - self::assertEquals(2, count($a->related)); - } -} - -/** - * @ORM\Entity - */ -class DDC729A -{ - /** @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") */ - public $id; - - /** @ORM\ManyToMany(targetEntity="DDC729B", inversedBy="related") */ - public $related; - - public function __construct() - { - $this->related = new \Doctrine\Common\Collections\ArrayCollection(); - } -} - -/** - * @ORM\Entity - */ -class DDC729B -{ - /** @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") */ - public $id; - - /** @ORM\ManyToMany(targetEntity="DDC729B", mappedBy="related") */ - public $related; - - public function __construct() - { - $this->related = new \Doctrine\Common\Collections\ArrayCollection(); - } -} diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php deleted file mode 100644 index d8d96089f62..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC758Test.php +++ /dev/null @@ -1,187 +0,0 @@ -markTestSkipped('Destroys testsuite'); - $this->useModelSet("cms"); - - parent::setUp(); - } - - /** - * Helper method to set cascade to merge only - */ - private function setCascadeMergeFor($class) - { - $metadata = $this->em->getMetadataFactory()->getMetaDataFor($class); - - foreach ($metadata->getProperties() as $association) { - if (! ($association instanceof AssociationMetadata)) { - continue; - } - - $association->setCascade(['merge']); - } - } - - /** - * Test that changing associations on detached entities and then cascade merging them - * causes the database to be updated with the new associations. - * This specifically tests adding new associations. - */ - public function testManyToManyMergeAssociationAdds() - { - $this->setCascadeMergeFor(CmsUser::class); - $this->setCascadeMergeFor(CmsGroup::class); - - // Put entities in the database - $cmsUser = new CmsUser(); - $cmsUser->username = "dave"; - $cmsUser->name = "Dave Keen"; - $cmsUser->status = "testing"; - - $group1 = new CmsGroup(); - $group1->name = "Group 1"; - - $group2 = new CmsGroup(); - $group2->name = "Group 2"; - - $this->em->persist($cmsUser); - $this->em->persist($group1); - $this->em->persist($group2); - $this->em->flush(); - - $cmsUserId = $cmsUser->id; - $group1Id = $group1->id; - $group2Id = $group2->id; - - $this->em->clear(); - - // Now create detached versions of the entities with some new associations. - $cmsUser = new CmsUser(); - $cmsUser->id = $cmsUserId; - $cmsUser->username = "dave"; - $cmsUser->name = "Dave Keen"; - $cmsUser->status = "testing"; - $cmsUser->groups = new ArrayCollection(); - - $group1 = new CmsGroup(); - $group1->id = $group1Id; - $group1->name = "Group 1"; - $group1->users = new ArrayCollection(); - - $group2 = new CmsGroup(); - $group2->id = $group2Id; - $group2->name = "Group 2"; - $group2->users = new ArrayCollection(); - - $cmsUser->addGroup($group1); - $cmsUser->addGroup($group2); - - // Cascade merge of cmsUser followed by a flush should add in the bidirectional new many-to-many associations between the user and the groups - $this->em->merge($cmsUser); - $this->em->flush(); - - $this->em->clear(); - - $cmsUsers = $this->em->getRepository(CmsUser::class)->findAll(); - $cmsGroups = $this->em->getRepository(CmsGroup::class)->findAll(); - - // Check the entities are in the database - self::assertEquals(1, sizeof($cmsUsers)); - self::assertEquals(2, sizeof($cmsGroups)); - - // Check the associations between the entities are now in the database - self::assertEquals(2, sizeof($cmsUsers[0]->groups)); - self::assertEquals(1, sizeof($cmsGroups[0]->users)); - self::assertEquals(1, sizeof($cmsGroups[1]->users)); - - self::assertSame($cmsUsers[0]->groups[0], $cmsGroups[0]); - self::assertSame($cmsUsers[0]->groups[1], $cmsGroups[1]); - self::assertSame($cmsGroups[0]->users[0], $cmsUsers[0]); - self::assertSame($cmsGroups[1]->users[0], $cmsUsers[0]); - } - - /** - * Test that changing associations on detached entities and then cascade merging them causes the - * database to be updated with the new associations. - */ - public function testManyToManyMergeAssociationRemoves() - { - $this->setCascadeMergeFor(CmsUser::class); - $this->setCascadeMergeFor(CmsGroup::class); - - $cmsUser = new CmsUser(); - $cmsUser->username = "dave"; - $cmsUser->name = "Dave Keen"; - $cmsUser->status = "testing"; - - $group1 = new CmsGroup(); - $group1->name = "Group 1"; - - $group2 = new CmsGroup(); - $group2->name = "Group 2"; - - $cmsUser->addGroup($group1); - $cmsUser->addGroup($group2); - - $this->em->persist($cmsUser); - $this->em->persist($group1); - $this->em->persist($group2); - $this->em->flush(); - - $cmsUserId = $cmsUser->id; - $group1Id = $group1->id; - $group2Id = $group2->id; - - $this->em->clear(); - - // Now create detached versions of the entities with NO associations. - $cmsUser = new CmsUser(); - $cmsUser->id = $cmsUserId; - $cmsUser->username = "dave"; - $cmsUser->name = "Dave Keen"; - $cmsUser->status = "testing"; - $cmsUser->groups = new ArrayCollection(); - - $group1 = new CmsGroup(); - $group1->id = $group1Id; - $group1->name = "Group 1"; - $group1->users = new ArrayCollection(); - - $group2 = new CmsGroup(); - $group2->id = $group2Id; - $group2->name = "Group 2"; - $group2->users = new ArrayCollection(); - - // Cascade merge of cmsUser followed by a flush should result in the association array collection being empty - $this->em->merge($cmsUser); - $this->em->flush(); - - $this->em->clear(); - - $cmsUsers = $this->em->getRepository(CmsUser::class)->findAll(); - $cmsGroups = $this->em->getRepository(CmsGroup::class)->findAll(); - - // Check the entities are in the database - self::assertEquals(1, sizeof($cmsUsers)); - self::assertEquals(2, sizeof($cmsGroups)); - - // Check the associations between the entities are now in the database - self::assertEquals(0, sizeof($cmsUsers[0]->groups)); - self::assertEquals(0, sizeof($cmsGroups[0]->users)); - self::assertEquals(0, sizeof($cmsGroups[1]->users)); - } -} From b8c017a467211763f79afa1c4bd4800b6fbce755 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 2 Dec 2015 17:57:54 +0100 Subject: [PATCH 236/275] Removing tests around `EntityManager#merge()` and similar operations --- .../Doctrine/Tests/ORM/EntityManagerTest.php | 2 - .../ORM/Functional/BasicFunctionalTest.php | 94 ------ .../ORM/Functional/DetachedEntityTest.php | 138 --------- .../ORM/Functional/EntityRepositoryTest.php | 3 +- .../Functional/MergeCompositeToOneKeyTest.php | 49 ---- .../Tests/ORM/Functional/MergeProxiesTest.php | 270 ------------------ .../Functional/MergeSharedEntitiesTest.php | 143 ---------- 7 files changed, 1 insertion(+), 698 deletions(-) delete mode 100644 tests/Doctrine/Tests/ORM/Functional/MergeCompositeToOneKeyTest.php delete mode 100644 tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php delete mode 100644 tests/Doctrine/Tests/ORM/Functional/MergeSharedEntitiesTest.php diff --git a/tests/Doctrine/Tests/ORM/EntityManagerTest.php b/tests/Doctrine/Tests/ORM/EntityManagerTest.php index c89df1a33dc..51d762c2e40 100644 --- a/tests/Doctrine/Tests/ORM/EntityManagerTest.php +++ b/tests/Doctrine/Tests/ORM/EntityManagerTest.php @@ -153,7 +153,6 @@ static public function dataMethodsAffectedByNoObjectArguments() return [ ['persist'], ['remove'], - ['merge'], ['refresh'], ['detach'] ]; @@ -175,7 +174,6 @@ static public function dataAffectedByErrorIfClosedException() ['flush'], ['persist'], ['remove'], - ['merge'], ['refresh'], ]; } diff --git a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php index e7f85beb1f9..8f7abad31bc 100644 --- a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php @@ -879,100 +879,6 @@ public function testGetPartialReferenceToUpdateObjectWithoutLoadingIt() self::assertEquals('Benjamin E.', $this->em->find(get_class($user), $userId)->name); } - public function testMergePersistsNewEntities() - { - $user = new CmsUser(); - $user->username = "beberlei"; - $user->name = "Benjamin E."; - $user->status = 'active'; - - $managedUser = $this->em->merge($user); - self::assertEquals('beberlei', $managedUser->username); - self::assertEquals('Benjamin E.', $managedUser->name); - self::assertEquals('active', $managedUser->status); - - self::assertTrue($user !== $managedUser); - self::assertTrue($this->em->contains($managedUser)); - - $this->em->flush(); - $userId = $managedUser->id; - $this->em->clear(); - - $user2 = $this->em->find(get_class($managedUser), $userId); - self::assertInstanceOf(CmsUser::class, $user2); - } - - public function testMergeNonPersistedProperties() - { - $user = new CmsUser(); - $user->username = "beberlei"; - $user->name = "Benjamin E."; - $user->status = 'active'; - $user->nonPersistedProperty = 'test'; - $user->nonPersistedPropertyObject = new CmsPhonenumber(); - - $managedUser = $this->em->merge($user); - - self::assertEquals('test', $managedUser->nonPersistedProperty); - self::assertSame($user->nonPersistedProperty, $managedUser->nonPersistedProperty); - self::assertSame($user->nonPersistedPropertyObject, $managedUser->nonPersistedPropertyObject); - self::assertTrue($user !== $managedUser); - self::assertTrue($this->em->contains($managedUser)); - - $this->em->flush(); - $userId = $managedUser->id; - $this->em->clear(); - - $user2 = $this->em->find(get_class($managedUser), $userId); - - self::assertNull($user2->nonPersistedProperty); - self::assertNull($user2->nonPersistedPropertyObject); - self::assertEquals('active', $user2->status); - } - - public function testMergeThrowsExceptionIfEntityWithGeneratedIdentifierDoesNotExist() - { - $this->expectException(EntityNotFoundException::class); - - $user = new CmsUser(); - - $user->username = "beberlei"; - $user->name = "Benjamin E."; - $user->status = 'active'; - $user->id = 42; - - $this->em->merge($user); - } - - /** - * @group DDC-634 - */ - public function testOneToOneMergeSetNull() - { - $user = new CmsUser(); - $user->username = "beberlei"; - $user->name = "Benjamin E."; - $user->status = 'active'; - - $ph = new CmsPhonenumber(); - $ph->phonenumber = "12345"; - $user->addPhonenumber($ph); - - $this->em->persist($user); - $this->em->persist($ph); - $this->em->flush(); - - $this->em->clear(); - - $ph->user = null; - $managedPh = $this->em->merge($ph); - - $this->em->flush(); - $this->em->clear(); - - self::assertNull($this->em->find(get_class($ph), $ph->phonenumber)->getUser()); - } - /** * @group DDC-952 */ diff --git a/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php b/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php index c23ee5bb03e..433c7d95f35 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php @@ -27,89 +27,6 @@ protected function setUp() parent::setUp(); } - public function testSimpleDetachMerge() - { - $user = new CmsUser; - $user->name = 'Roman'; - $user->username = 'romanb'; - $user->status = 'dev'; - $this->em->persist($user); - $this->em->flush(); - $this->em->clear(); - - // $user is now detached - self::assertFalse($this->em->contains($user)); - - $user->name = 'Roman B.'; - - $user2 = $this->em->merge($user); - - self::assertFalse($user === $user2); - self::assertTrue($this->em->contains($user2)); - self::assertEquals('Roman B.', $user2->name); - } - - public function testSerializeUnserializeModifyMerge() - { - $user = new CmsUser; - $user->name = 'Guilherme'; - $user->username = 'gblanco'; - $user->status = 'developer'; - - $ph1 = new CmsPhonenumber; - $ph1->phonenumber = "1234"; - $user->addPhonenumber($ph1); - - $this->em->persist($user); - $this->em->flush(); - - self::assertTrue($this->em->contains($user)); - self::assertTrue($user->phonenumbers->isInitialized()); - - $serialized = serialize($user); - - $this->em->clear(); - - self::assertFalse($this->em->contains($user)); - - unset($user); - - $user = unserialize($serialized); - - self::assertEquals(1, count($user->getPhonenumbers()), "Pre-Condition: 1 Phonenumber"); - - $ph2 = new CmsPhonenumber; - - $ph2->phonenumber = "56789"; - $user->addPhonenumber($ph2); - - $oldPhonenumbers = $user->getPhonenumbers(); - - self::assertEquals(2, count($oldPhonenumbers), "Pre-Condition: 2 Phonenumbers"); - self::assertFalse($this->em->contains($user)); - - $this->em->persist($ph2); - - // Merge back in - $user = $this->em->merge($user); // merge cascaded to phonenumbers - self::assertInstanceOf(CmsUser::class, $user->phonenumbers[0]->user); - self::assertInstanceOf(CmsUser::class, $user->phonenumbers[1]->user); - $im = $this->em->getUnitOfWork()->getIdentityMap(); - $this->em->flush(); - - self::assertTrue($this->em->contains($user), "Failed to assert that merged user is contained inside EntityManager persistence context."); - $phonenumbers = $user->getPhonenumbers(); - self::assertNotSame($oldPhonenumbers, $phonenumbers, "Merge should replace the Detached Collection with a new PersistentCollection."); - self::assertEquals(2, count($phonenumbers), "Failed to assert that two phonenumbers are contained in the merged users phonenumber collection."); - - self::assertInstanceOf(CmsPhonenumber::class, $phonenumbers[1]); - self::assertTrue($this->em->contains($phonenumbers[1]), "Failed to assert that second phonenumber in collection is contained inside EntityManager persistence context."); - - self::assertInstanceOf(CmsPhonenumber::class, $phonenumbers[0]); - self::assertTrue($this->em->getUnitOfWork()->isInIdentityMap($phonenumbers[0])); - self::assertTrue($this->em->contains($phonenumbers[0]), "Failed to assert that first phonenumber in collection is contained inside EntityManager persistence context."); - } - /** * @group DDC-203 */ @@ -128,38 +45,6 @@ public function testDetachedEntityThrowsExceptionOnFlush() $this->em->flush(); } - public function testUninitializedLazyAssociationsAreIgnoredOnMerge() - { - $user = new CmsUser; - $user->name = 'Guilherme'; - $user->username = 'gblanco'; - $user->status = 'developer'; - - $address = new CmsAddress; - $address->city = 'Berlin'; - $address->country = 'Germany'; - $address->street = 'Sesamestreet'; - $address->zip = 12345; - $address->setUser($user); - $this->em->persist($address); - $this->em->persist($user); - - $this->em->flush(); - $this->em->clear(); - - $address2 = $this->em->find(get_class($address), $address->id); - self::assertInstanceOf(Proxy::class, $address2->user); - self::assertFalse($address2->user->__isInitialized()); - $detachedAddress2 = unserialize(serialize($address2)); - self::assertInstanceOf(Proxy::class, $detachedAddress2->user); - self::assertFalse($detachedAddress2->user->__isInitialized()); - - $managedAddress2 = $this->em->merge($detachedAddress2); - self::assertInstanceOf(Proxy::class, $managedAddress2->user); - self::assertFalse($managedAddress2->user === $detachedAddress2->user); - self::assertFalse($managedAddress2->user->__isInitialized()); - } - /** * @group DDC-822 */ @@ -204,28 +89,5 @@ public function testDetachManagedUnpersistedEntity() self::assertFalse($this->em->contains($user)); self::assertFalse($this->em->getUnitOfWork()->isInIdentityMap($user)); } - - /** - * @group DDC-1340 - */ - public function testMergeArticleWrongVersion() - { - $article = new CmsArticle(); - $article->topic = "test"; - $article->text = "test"; - - $this->em->persist($article); - $this->em->flush(); - - $this->em->detach($article); - - $sql = 'UPDATE cms_articles SET version = version + 1 WHERE id = ' . $article->id; - $this->em->getConnection()->executeUpdate($sql); - - $this->expectException(OptimisticLockException::class); - $this->expectExceptionMessage('The optimistic lock failed, version 1 was expected, but is actually 2'); - - $this->em->merge($article); - } } diff --git a/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryTest.php b/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryTest.php index 337882f8737..e0ef7348a82 100644 --- a/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/EntityRepositoryTest.php @@ -950,13 +950,12 @@ public function testMatchingCriteriaEndsWithComparison() public function testMatchingCriteriaNullAssocComparison() { $fixtures = $this->loadFixtureUserEmail(); - $user = $this->em->merge($fixtures[0]); + $user = $this->em->find(get_class($fixtures[0]), $fixtures[0]->id); $repository = $this->em->getRepository(CmsUser::class); $criteriaIsNull = Criteria::create()->where(Criteria::expr()->isNull('email')); $criteriaEqNull = Criteria::create()->where(Criteria::expr()->eq('email', null)); $user->setEmail(null); - $this->em->persist($user); $this->em->flush(); $this->em->clear(); diff --git a/tests/Doctrine/Tests/ORM/Functional/MergeCompositeToOneKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/MergeCompositeToOneKeyTest.php deleted file mode 100644 index 2aae8d36922..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/MergeCompositeToOneKeyTest.php +++ /dev/null @@ -1,49 +0,0 @@ -schemaTool->createSchema( - [ - $this->em->getClassMetadata(Country::class), - $this->em->getClassMetadata(CompositeToOneKeyState::class), - ] - ); - } - - /** - * @group DDC-3378 - * @group 1176 - */ - public function testMergingOfEntityWithCompositeIdentifierContainingToOneAssociation() - { - $country = new Country(); - $country->country = 'US'; - - $state = new CompositeToOneKeyState(); - $state->state = 'CA'; - $state->country = $country; - - /* @var $merged CompositeToOneKeyState */ - $merged = $this->em->merge($state); - - self::assertInstanceOf(CompositeToOneKeyState::class, $state); - self::assertNotSame($state, $merged); - self::assertInstanceOf(Country::class, $merged->country); - self::assertNotSame($country, $merged->country); - } -} diff --git a/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php b/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php deleted file mode 100644 index 5a467ac1aae..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/MergeProxiesTest.php +++ /dev/null @@ -1,270 +0,0 @@ -useModelSet('generic'); - - parent::setUp(); - } - - /** - * @group DDC-1392 - * @group DDC-1734 - * @group DDC-3368 - * @group #1172 - */ - public function testMergeDetachedUnInitializedProxy() - { - $detachedUninitialized = $this->em->getReference(DateTimeModel::class, 123); - - $this->em->clear(); - - $managed = $this->em->getReference(DateTimeModel::class, 123); - - self::assertSame($managed, $this->em->merge($detachedUninitialized)); - - self::assertFalse($managed->__isInitialized()); - self::assertFalse($detachedUninitialized->__isInitialized()); - } - - /** - * @group DDC-1392 - * @group DDC-1734 - * @group DDC-3368 - * @group #1172 - */ - public function testMergeUnserializedUnInitializedProxy() - { - $detachedUninitialized = $this->em->getReference(DateTimeModel::class, 123); - - $this->em->clear(); - - $managed = $this->em->getReference(DateTimeModel::class, 123); - - self::assertSame( - $managed, - $this->em->merge(unserialize(serialize($this->em->merge($detachedUninitialized)))) - ); - - self::assertFalse($managed->__isInitialized()); - self::assertFalse($detachedUninitialized->__isInitialized()); - } - - /** - * @group DDC-1392 - * @group DDC-1734 - * @group DDC-3368 - * @group #1172 - */ - public function testMergeManagedProxy() - { - $managed = $this->em->getReference(DateTimeModel::class, 123); - - self::assertSame($managed, $this->em->merge($managed)); - - self::assertFalse($managed->__isInitialized()); - } - - /** - * @group DDC-1392 - * @group DDC-1734 - * @group DDC-3368 - * @group #1172 - * - * Bug discovered while working on DDC-2704 - merging towards un-initialized proxies does not initialize them, - * causing merged data to be lost when they are actually initialized - */ - public function testMergeWithExistingUninitializedManagedProxy() - { - $date = new DateTimeModel(); - - $this->em->persist($date); - $this->em->flush(); - $this->em->clear(); - - $managed = $this->em->getReference(DateTimeModel::class, $date->id); - - self::assertInstanceOf(Proxy::class, $managed); - self::assertFalse($managed->__isInitialized()); - - $date->date = $dateTime = new \DateTime(); - - self::assertSame($managed, $this->em->merge($date)); - self::assertTrue($managed->__isInitialized()); - self::assertSame($dateTime, $managed->date, 'Data was merged into the proxy after initialization'); - } - - /** - * @group DDC-1392 - * @group DDC-1734 - * @group DDC-3368 - * @group #1172 - */ - public function testMergingProxyFromDifferentEntityManagerWithExistingManagedInstanceDoesNotReplaceInitializer() - { - $em1 = $this->createEntityManager($logger1 = new DebugStack()); - $em2 = $this->createEntityManager($logger2 = new DebugStack()); - - $file1 = new DateTimeModel(); - $file2 = new DateTimeModel(); - - $em1->persist($file1); - $em2->persist($file2); - $em1->flush(); - $em2->flush(); - $em1->clear(); - $em2->clear(); - - $queryCount1 = count($logger1->queries); - $queryCount2 = count($logger2->queries); - - $proxy1 = $em1->getReference(DateTimeModel::class, $file1->id); - $proxy2 = $em2->getReference(DateTimeModel::class, $file1->id); - $merged2 = $em2->merge($proxy1); - - self::assertNotSame($proxy1, $merged2); - self::assertSame($proxy2, $merged2); - - self::assertFalse($proxy1->__isInitialized()); - self::assertFalse($proxy2->__isInitialized()); - - $proxy1->__load(); - - self::assertCount( - $queryCount1 + 1, - $logger1->queries, - 'Loading the first proxy was done through the first entity manager' - ); - self::assertCount( - $queryCount2, - $logger2->queries, - 'No queries were executed on the second entity manager, as it is unrelated with the first proxy' - ); - - $proxy2->__load(); - - self::assertCount( - $queryCount1 + 1, - $logger1->queries, - 'Loading the second proxy does not affect the first entity manager' - ); - self::assertCount( - $queryCount2 + 1, - $logger2->queries, - 'Loading of the second proxy instance was done through the second entity manager' - ); - } - - /** - * @group DDC-1392 - * @group DDC-1734 - * @group DDC-3368 - * @group #1172 - */ - public function testMergingUnInitializedProxyDoesNotInitializeIt() - { - $em1 = $this->createEntityManager($logger1 = new DebugStack()); - $em2 = $this->createEntityManager($logger2 = new DebugStack()); - - $file1 = new DateTimeModel(); - $file2 = new DateTimeModel(); - - $em1->persist($file1); - $em2->persist($file2); - $em1->flush(); - $em2->flush(); - $em1->clear(); - $em2->clear(); - - $queryCount1 = count($logger1->queries); - $queryCount2 = count($logger1->queries); - - $unManagedProxy = $em1->getReference(DateTimeModel::class, $file1->id); - $mergedInstance = $em2->merge($unManagedProxy); - - self::assertNotInstanceOf(Proxy::class, $mergedInstance); - self::assertNotSame($unManagedProxy, $mergedInstance); - self::assertFalse($unManagedProxy->__isInitialized()); - - self::assertCount( - $queryCount1, - $logger1->queries, - 'Loading the merged instance affected only the first entity manager' - ); - self::assertCount( - $queryCount1 + 1, - $logger2->queries, - 'Loading the merged instance was done via the second entity manager' - ); - - $unManagedProxy->__load(); - - self::assertCount( - $queryCount1 + 1, - $logger1->queries, - 'Loading the first proxy was done through the first entity manager' - ); - self::assertCount( - $queryCount2 + 1, - $logger2->queries, - 'No queries were executed on the second entity manager, as it is unrelated with the first proxy' - ); - } - - /** - * @param SQLLogger $logger - * - * @return EntityManagerInterface - */ - private function createEntityManager(SQLLogger $logger) - { - $config = new Configuration(); - - $config->setProxyDir(realpath(__DIR__ . '/../../Proxies')); - $config->setProxyNamespace('Doctrine\Tests\Proxies'); - $config->setMetadataDriverImpl( - $config->newDefaultAnnotationDriver([ - realpath(__DIR__ . '/../../Models/Cache') - ]) - ); - $config->setSQLLogger($logger); - - // always runs on sqlite to prevent multi-connection race-conditions with the test suite - // multi-connection is not relevant for the purpose of checking locking here, but merely - // to stub out DB-level access and intercept it - $connection = DriverManager::getConnection( - [ - 'driver' => 'pdo_sqlite', - 'memory' => true - ], - $config - ); - - - $entityManager = EntityManager::create($connection, $config); - - (new SchemaTool($entityManager))->createSchema([$entityManager->getClassMetadata(DateTimeModel::class)]); - - return $entityManager; - } -} diff --git a/tests/Doctrine/Tests/ORM/Functional/MergeSharedEntitiesTest.php b/tests/Doctrine/Tests/ORM/Functional/MergeSharedEntitiesTest.php deleted file mode 100644 index f8b9de7ae85..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/MergeSharedEntitiesTest.php +++ /dev/null @@ -1,143 +0,0 @@ -schemaTool->createSchema( - [ - $this->em->getClassMetadata(MSEFile::class), - $this->em->getClassMetadata(MSEPicture::class), - ] - ); - } catch (ToolsException $ignored) { - } - } - - public function testMergeSharedNewEntities() - { - $file = new MSEFile; - $picture = new MSEPicture; - - $picture->file = $file; - $picture->otherFile = $file; - - $picture = $this->em->merge($picture); - - self::assertEquals($picture->file, $picture->otherFile, 'Identical entities must remain identical'); - } - - public function testMergeSharedManagedEntities() - { - $file = new MSEFile; - $picture = new MSEPicture; - - $picture->file = $file; - $picture->otherFile = $file; - - $this->em->persist($file); - $this->em->persist($picture); - $this->em->flush(); - $this->em->clear(); - - $picture = $this->em->merge($picture); - - self::assertEquals($picture->file, $picture->otherFile, 'Identical entities must remain identical'); - } - - public function testMergeSharedDetachedSerializedEntities() - { - $file = new MSEFile; - $picture = new MSEPicture; - - $picture->file = $file; - $picture->otherFile = $file; - - $serializedPicture = serialize($picture); - - $this->em->persist($file); - $this->em->persist($picture); - $this->em->flush(); - $this->em->clear(); - - $picture = $this->em->merge(unserialize($serializedPicture)); - - self::assertEquals($picture->file, $picture->otherFile, 'Identical entities must remain identical'); - } - - /** - * @group DDC-2704 - */ - public function testMergeInheritedTransientPrivateProperties() - { - $admin1 = new MSEAdmin(); - $admin2 = new MSEAdmin(); - - $admin1->id = 123; - $admin2->id = 123; - - $this->em->persist($admin1); - - $admin2->setSession('zeh current session data'); - - self::assertSame($admin1, $this->em->merge($admin2)); - self::assertSame('zeh current session data', $admin1->getSession()); - } -} - -/** @ORM\Entity */ -class MSEPicture -{ - /** @ORM\Column(type="integer") @ORM\Id @ORM\GeneratedValue */ - public $id; - - /** @ORM\ManyToOne(targetEntity="MSEFile", cascade={"merge"}) */ - public $file; - - /** @ORM\ManyToOne(targetEntity="MSEFile", cascade={"merge"}) */ - public $otherFile; -} - -/** @ORM\Entity */ -class MSEFile -{ - /** @ORM\Column(type="integer") @ORM\Id @ORM\GeneratedValue(strategy="AUTO") */ - public $id; -} - -/** @ORM\MappedSuperclass */ -abstract class MSEUser -{ - private $session; // intentionally transient property - - public function getSession() - { - return $this->session; - } - - public function setSession($session) - { - $this->session = $session; - } -} - -/** @ORM\Entity */ -class MSEAdmin extends MSEUser -{ - /** @ORM\Column(type="integer") @ORM\Id @ORM\GeneratedValue(strategy="NONE") */ - public $id; -} From 466fa65eca0fa6aa6e118c63948f550abb8a6e4b Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 2 Dec 2015 17:58:16 +0100 Subject: [PATCH 237/275] Removing `EntityManager#merge()` logic --- lib/Doctrine/ORM/EntityManager.php | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index a207fd6f3c4..35a6b9b3924 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -697,29 +697,6 @@ public function detach($entity) $this->unitOfWork->detach($entity); } - /** - * Merges the state of a detached entity into the persistence context - * of this EntityManager and returns the managed copy of the entity. - * The entity passed to merge will not become associated/managed with this EntityManager. - * - * @param object $entity The detached entity to merge into the persistence context. - * - * @return object The managed copy of the entity. - * - * @throws ORMInvalidArgumentException - * @throws ORMException - */ - public function merge($entity) - { - if ( ! is_object($entity)) { - throw ORMInvalidArgumentException::invalidObject('EntityManager#merge()', $entity); - } - - $this->errorIfClosed(); - - return $this->unitOfWork->merge($entity); - } - /** * {@inheritDoc} * From 856280d6c887ef95c094a93646771374fbc851f0 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 2 Dec 2015 18:00:52 +0100 Subject: [PATCH 238/275] Removing merge operations from the UnitOfWork --- lib/Doctrine/ORM/UnitOfWork.php | 353 -------------------------------- 1 file changed, 353 deletions(-) diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 7c9d66e84b9..e166ae85ed4 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -1695,204 +1695,6 @@ private function doRemove($entity, array &$visited) } - /** - * Merges the state of the given detached entity into this UnitOfWork. - * - * @param object $entity - * - * @return object The managed copy of the entity. - * - * @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!? - */ - public function merge($entity) - { - $visited = []; - - return $this->doMerge($entity, $visited); - } - - /** - * Executes a merge operation on an entity. - * - * @param object $entity - * @param array $visited - * @param null|object $prevManagedCopy - * @param null|AssociationMetadata $association - * - * @return object The managed copy of the entity. - * - * @throws OptimisticLockException If the entity uses optimistic locking through a version - * attribute and the version check against the managed copy fails. - * @throws ORMInvalidArgumentException If the entity instance is NEW. - * @throws EntityNotFoundException if an assigned identifier is used in the entity, but none is provided - */ - private function doMerge($entity, array &$visited, $prevManagedCopy = null, AssociationMetadata $association = null) - { - $oid = spl_object_hash($entity); - - if (isset($visited[$oid])) { - $managedCopy = $visited[$oid]; - - if ($prevManagedCopy !== null) { - $this->updateAssociationWithMergedEntity($entity, $association, $prevManagedCopy, $managedCopy); - } - - return $managedCopy; - } - - $class = $this->em->getClassMetadata(get_class($entity)); - $persister = $this->getEntityPersister($class->getClassName()); - - // First we assume DETACHED, although it can still be NEW but we can avoid - // an extra db-roundtrip this way. If it is not MANAGED but has an identity, - // we need to fetch it from the db anyway in order to merge. - // MANAGED entities are ignored by the merge operation. - $managedCopy = $entity; - - if ($this->getEntityState($entity, self::STATE_DETACHED) !== self::STATE_MANAGED) { - // Try to look the entity up in the identity map. - $id = $persister->getIdentifier($entity); - - // If there is no ID, it is actually NEW. - if ( ! $id) { - $managedCopy = $this->newInstance($class); - - $this->mergeEntityStateIntoManagedCopy($entity, $managedCopy); - $this->persistNew($class, $managedCopy); - } else { - $flatId = $this->em->getIdentifierFlattener()->flattenIdentifier($class, $id); - $managedCopy = $this->tryGetById($flatId, $class->getRootClassName()); - - if ($managedCopy) { - // We have the entity in-memory already, just make sure its not removed. - if ($this->getEntityState($managedCopy) == self::STATE_REMOVED) { - throw ORMInvalidArgumentException::entityIsRemoved($managedCopy, "merge"); - } - } else { - // We need to fetch the managed copy in order to merge. - $managedCopy = $this->em->find($class->getClassName(), $flatId); - } - - if ($managedCopy === null) { - // If the identifier is ASSIGNED, it is NEW, otherwise an error - // since the managed entity was not found. - if (! $class->isIdentifierComposite() - && $class->getProperty($class->getSingleIdentifierFieldName()) instanceof FieldMetadata - && $class->getProperty($class->getSingleIdentifierFieldName())->hasValueGenerator()) { - throw EntityNotFoundException::fromClassNameAndIdentifier( - $class->getClassName(), - $this->em->getIdentifierFlattener()->flattenIdentifier($class, $id) - ); - } - - $managedCopy = $this->newInstance($class); - - $persister->setIdentifier($managedCopy, $id); - - $this->mergeEntityStateIntoManagedCopy($entity, $managedCopy); - $this->persistNew($class, $managedCopy); - } else { - $this->ensureVersionMatch($class, $entity, $managedCopy); - $this->mergeEntityStateIntoManagedCopy($entity, $managedCopy); - } - } - - $visited[$oid] = $managedCopy; // mark visited - - if ($class->changeTrackingPolicy === ChangeTrackingPolicy::DEFERRED_EXPLICIT) { - $this->scheduleForSynchronization($entity); - } - } - - if ($prevManagedCopy !== null) { - $this->updateAssociationWithMergedEntity($entity, $association, $prevManagedCopy, $managedCopy); - } - - // Mark the managed copy visited as well - $visited[spl_object_hash($managedCopy)] = $managedCopy; - - $this->cascadeMerge($entity, $managedCopy, $visited); - - return $managedCopy; - } - - /** - * @param ClassMetadata $class - * @param object $entity - * @param object $managedCopy - * - * @return void - * - * @throws OptimisticLockException - */ - private function ensureVersionMatch(ClassMetadata $class, $entity, $managedCopy) - { - if (! ($class->isVersioned() && $this->isLoaded($managedCopy) && $this->isLoaded($entity))) { - return; - } - - $managedCopyVersion = $class->versionProperty->getValue($managedCopy); - $entityVersion = $class->versionProperty->getValue($entity); - - // Throw exception if versions don't match. - if ($managedCopyVersion == $entityVersion) { - return; - } - - throw OptimisticLockException::lockFailedVersionMismatch($entity, $entityVersion, $managedCopyVersion); - } - - /** - * Tests if an entity is loaded - must either be a loaded proxy or not a proxy - * - * @param object $entity - * - * @return bool - */ - private function isLoaded($entity) - { - return !($entity instanceof Proxy) || $entity->__isInitialized(); - } - - /** - * Sets/adds associated managed copies into the previous entity's association field - * - * @param object $entity - * @param AssociationMetadata $association - * @param object $previousManagedCopy - * @param object $managedCopy - * - * @return void - */ - private function updateAssociationWithMergedEntity( - $entity, - AssociationMetadata $association, - $previousManagedCopy, - $managedCopy - ) - { - if ($association instanceof ToOneAssociationMetadata) { - $association->setValue($previousManagedCopy, $managedCopy); - - return; - } - - /** @var array|Collection $value */ - $value = $association->getValue($previousManagedCopy); - - $value[] = $managedCopy; - - if ($association instanceof OneToManyAssociationMetadata) { - $targetClass = $this->em->getClassMetadata(get_class($entity)); - $inverseAssociation = $targetClass->getProperty($association->getMappedBy()); - - $inverseAssociation->setValue($managedCopy, $previousManagedCopy); - } - } - /** * Detaches an entity from the persistence management. It's persistence will * no longer be managed by Doctrine. @@ -2087,46 +1889,6 @@ private function cascadeDetach($entity, array &$visited) } } - /** - * Cascades a merge operation to associated entities. - * - * @param object $entity - * @param object $managedCopy - * @param array $visited - * - * @return void - */ - private function cascadeMerge($entity, $managedCopy, array &$visited) - { - $class = $this->em->getClassMetadata(get_class($entity)); - - foreach ($class->getDeclaredPropertiesIterator() as $association) { - if (! ($association instanceof AssociationMetadata && in_array('merge', $association->getCascade()))) { - continue; - } - - /** @var AssociationMetadata $association */ - $relatedEntities = $association->getValue($entity); - - if ($relatedEntities instanceof Collection) { - if ($relatedEntities === $association->getValue($managedCopy)) { - continue; - } - - if ($relatedEntities instanceof PersistentCollection) { - // Unwrap so that foreach() does not initialize - $relatedEntities = $relatedEntities->unwrap(); - } - - foreach ($relatedEntities as $relatedEntity) { - $this->doMerge($relatedEntity, $visited, $managedCopy, $association); - } - } else if ($relatedEntities !== null) { - $this->doMerge($relatedEntities, $visited, $managedCopy, $association); - } - } - } - /** * Cascades the save operation to associated entities. * @@ -3278,121 +3040,6 @@ private function isIdentifierEquals($entity1, $entity2) return $id1 === $id2 || implode(' ', $id1) === implode(' ', $id2); } - /** - * @param object $entity - * @param object $managedCopy - * - * @throws ORMException - * @throws OptimisticLockException - * @throws TransactionRequiredException - */ - private function mergeEntityStateIntoManagedCopy($entity, $managedCopy) - { - if (! $this->isLoaded($entity)) { - return; - } - - if (! $this->isLoaded($managedCopy)) { - $managedCopy->__load(); - } - - $class = $this->em->getClassMetadata(get_class($entity)); - - foreach ($class->getDeclaredPropertiesIterator() as $property) { - switch (true) { - case ($property instanceof FieldMetadata): - if (! $property->isPrimaryKey()) { - $property->setValue($managedCopy, $property->getValue($entity)); - } - - break; - - case ($property instanceof ToOneAssociationMetadata): - $other = $property->getValue($entity); - - if ($other === null) { - $property->setValue($managedCopy, null); - - // Just break out of switch statement to continue execution - break; - } - - if ($other instanceof Proxy && ! $other->__isInitialized()) { - // Do not merge fields marked lazy that have not been fetched. - // Skip to next foreach element - continue 2; - } - - if (! in_array('merge', $property->getCascade())) { - if ($this->getEntityState($other) === self::STATE_DETACHED) { - $targetEntity = $property->getTargetEntity(); - $targetClass = $this->em->getClassMetadata($targetEntity); - $targetPersister = $this->getEntityPersister($targetEntity); - $relatedId = $targetPersister->getIdentifier($other); - - if ($targetClass->getSubClasses()) { - $other = $this->em->find($targetClass->getClassName(), $relatedId); - } else { - $other = $this->em->getProxyFactory()->getProxy($targetEntity, $relatedId); - - $this->registerManaged($other, $relatedId, []); - } - } - - $property->setValue($managedCopy, $other); - } - - break; - - case ($property instanceof ToManyAssociationMetadata): - $mergeCol = $property->getValue($entity); - - if ($mergeCol instanceof PersistentCollection && ! $mergeCol->isInitialized()) { - // do not merge fields marked lazy that have not been fetched. - // keep the lazy persistent collection of the managed copy. - continue 2; - } - - $managedCol = $property->getValue($managedCopy); - - if (! $managedCol) { - $managedCol = $property->wrap($managedCopy, [], $this->em); - - $property->setValue($managedCopy, $managedCol); - } - - if (in_array('merge', $property->getCascade())) { - $managedCol->initialize(); - - // clear and set dirty a managed collection if its not also the same collection to merge from. - if (! $managedCol->isEmpty() && $managedCol !== $mergeCol) { - $managedCol->unwrap()->clear(); - $managedCol->setDirty(true); - - if ($property instanceof ManyToManyAssociationMetadata && - $property->isOwningSide() && - $class->changeTrackingPolicy === ChangeTrackingPolicy::NOTIFY) { - $this->scheduleForSynchronization($managedCopy); - } - } - } - - break; - - default: - // Non-persistent properties are handled here. Copy them as-is - $property->setValue($managedCopy, $property->getValue($entity)); - - break; - } - - if ($class->changeTrackingPolicy === ChangeTrackingPolicy::NOTIFY) { - // Just treat all properties as changed, there is no other choice. - $this->propertyChanged($managedCopy, $property->getName(), null, $property->getValue($managedCopy)); - } - } - } - /** * This method called by hydrators, and indicates that hydrator totally completed current hydration cycle. * Unit of work able to fire deferred events, related to loading events here. From 439e92cad3129761a6eb99596d571e0179c05726 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 2 Dec 2015 18:06:07 +0100 Subject: [PATCH 239/275] Adding TODO: serialization of entities is something the ORM shouldn't deal with (directly) anymore --- docs/en/cookbook/entities-in-session.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/cookbook/entities-in-session.rst b/docs/en/cookbook/entities-in-session.rst index 664cff53f5c..e411e76deac 100644 --- a/docs/en/cookbook/entities-in-session.rst +++ b/docs/en/cookbook/entities-in-session.rst @@ -43,6 +43,7 @@ the session into a managed Doctrine object looks like this: Serializing entity into the session ----------------------------------- +@TODO: this section needs clarification/removal (or be moved to known limitations) Entities that are serialized into the session normally contain references to other entities as well. Think of the user entity has a reference to his articles, groups, photos or many other different entities. If you serialize From 81e91277dd2d8dbe632d36274154adcaa75f9cd3 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 2 Dec 2015 18:07:22 +0100 Subject: [PATCH 240/275] Adding @TODO about batch-processing and `detach()` operations: `clear()` may deal with it directly. --- docs/en/reference/batch-processing.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/reference/batch-processing.rst b/docs/en/reference/batch-processing.rst index ce47c538c29..6f30ba2647f 100644 --- a/docs/en/reference/batch-processing.rst +++ b/docs/en/reference/batch-processing.rst @@ -159,6 +159,7 @@ The following example shows how to do this: Iterating Large Results for Data-Processing ------------------------------------------- +@TODO - we probably want to suggest complete clear() operations (or rely on L2 cache instead) You can use the ``iterate()`` method just to iterate over a large result and no UPDATE or DELETE intention. The ``IterableResult`` instance returned from ``$query->iterate()`` implements the From 968b5b47cbaa8324cc3465d113af8cf694d1bd65 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 2 Dec 2015 18:07:51 +0100 Subject: [PATCH 241/275] Note about sections to be removed --- docs/en/reference/working-with-objects.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/reference/working-with-objects.rst b/docs/en/reference/working-with-objects.rst index bef73cebaa3..74b30aca1d2 100644 --- a/docs/en/reference/working-with-objects.rst +++ b/docs/en/reference/working-with-objects.rst @@ -326,6 +326,7 @@ in multiple ways with very different performance impacts. Detaching entities ------------------ +@TODO section needs removal/rework An entity is detached from an EntityManager and thus no longer managed by invoking the ``EntityManager#detach($entity)`` method on it or by cascading the detach operation to it. Changes made to the From 507151e88f8fbd44358f264bb6714e436e0f894a Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 2 Dec 2015 18:09:46 +0100 Subject: [PATCH 242/275] Removing tests around the `detach` functionality --- .../Doctrine/Tests/ORM/EntityManagerTest.php | 1 - .../ORM/Functional/BasicFunctionalTest.php | 39 -------- .../ORM/Functional/DetachedEntityTest.php | 93 ------------------- .../ORM/Functional/Ticket/DDC2106Test.php | 70 -------------- 4 files changed, 203 deletions(-) delete mode 100644 tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php delete mode 100644 tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2106Test.php diff --git a/tests/Doctrine/Tests/ORM/EntityManagerTest.php b/tests/Doctrine/Tests/ORM/EntityManagerTest.php index 51d762c2e40..b20917dde27 100644 --- a/tests/Doctrine/Tests/ORM/EntityManagerTest.php +++ b/tests/Doctrine/Tests/ORM/EntityManagerTest.php @@ -154,7 +154,6 @@ static public function dataMethodsAffectedByNoObjectArguments() ['persist'], ['remove'], ['refresh'], - ['detach'] ]; } diff --git a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php index 8f7abad31bc..0f7f28a232f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php @@ -487,45 +487,6 @@ public function testInitializeCollectionWithNewObjectsRetainsNewObjects() self::assertEquals(4, $gblanco2->getPhonenumbers()->count()); } - public function testSetSetAssociationWithGetReference() - { - $user = new CmsUser; - $user->name = 'Guilherme'; - $user->username = 'gblanco'; - $user->status = 'developer'; - $this->em->persist($user); - - $address = new CmsAddress; - $address->country = 'Germany'; - $address->city = 'Berlin'; - $address->zip = '12345'; - $this->em->persist($address); - - $this->em->flush(); - $this->em->detach($address); - - self::assertFalse($this->em->contains($address)); - self::assertTrue($this->em->contains($user)); - - // Assume we only got the identifier of the address and now want to attach - // that address to the user without actually loading it, using getReference(). - $addressRef = $this->em->getReference(CmsAddress::class, $address->getId()); - - $user->setAddress($addressRef); // Ugh! Initializes address 'cause of $address->setUser($user)! - - $this->em->flush(); - $this->em->clear(); - - // Check with a fresh load that the association is indeed there - $query = $this->em->createQuery("select u, a from Doctrine\Tests\Models\CMS\CmsUser u join u.address a where u.username='gblanco'"); - $gblanco = $query->getSingleResult(); - - self::assertInstanceOf(CmsUser::class, $gblanco); - self::assertInstanceOf(CmsAddress::class, $gblanco->getAddress()); - self::assertEquals('Berlin', $gblanco->getAddress()->getCity()); - - } - public function testOneToManyCascadeRemove() { $user = new CmsUser; diff --git a/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php b/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php deleted file mode 100644 index 433c7d95f35..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php +++ /dev/null @@ -1,93 +0,0 @@ -useModelSet('cms'); - parent::setUp(); - } - - /** - * @group DDC-203 - */ - public function testDetachedEntityThrowsExceptionOnFlush() - { - $this->expectException(UniqueConstraintViolationException::class); - - $ph = new CmsPhonenumber(); - $ph->phonenumber = '12345'; - - $this->em->persist($ph); - $this->em->flush(); - $this->em->clear(); - - $this->em->persist($ph); - $this->em->flush(); - } - - /** - * @group DDC-822 - */ - public function testUseDetachedEntityAsQueryParameter() - { - $user = new CmsUser; - $user->name = 'Guilherme'; - $user->username = 'gblanco'; - $user->status = 'developer'; - - $this->em->persist($user); - - $this->em->flush(); - $this->em->detach($user); - - $dql = 'SELECT u FROM ' . CmsUser::class . ' u WHERE u.id = ?1'; - $query = $this->em->createQuery($dql); - - $query->setParameter(1, $user); - - $newUser = $query->getSingleResult(); - - self::assertInstanceOf(CmsUser::class, $newUser); - self::assertEquals('gblanco', $newUser->username); - } - - /** - * @group DDC-920 - */ - public function testDetachManagedUnpersistedEntity() - { - $user = new CmsUser; - $user->name = 'Guilherme'; - $user->username = 'gblanco'; - $user->status = 'developer'; - - $this->em->persist($user); - $this->em->detach($user); - - $this->em->flush(); - - self::assertFalse($this->em->contains($user)); - self::assertFalse($this->em->getUnitOfWork()->isInIdentityMap($user)); - } -} - diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2106Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2106Test.php deleted file mode 100644 index cad07ab5bb6..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC2106Test.php +++ /dev/null @@ -1,70 +0,0 @@ -schemaTool->createSchema( - [ - $this->em->getClassMetadata(DDC2106Entity::class), - ] - ); - } - - public function testDetachedEntityAsId() - { - // We want an uninitialized PersistentCollection $entity->children - $entity = new DDC2106Entity(); - $this->em->persist($entity); - $this->em->flush(); - $this->em->detach($entity); - $entity = $this->em->getRepository(DDC2106Entity::class)->findOneBy([]); - - // ... and a managed entity without id - $entityWithoutId = new DDC2106Entity(); - $this->em->persist($entityWithoutId); - - $criteria = Criteria::create()->where(Criteria::expr()->eq('parent', $entityWithoutId)); - - self::assertCount(0, $entity->children->matching($criteria)); - } -} - -/** - * @ORM\Entity - */ -class DDC2106Entity -{ - /** - * @ORM\Id - * @ORM\GeneratedValue(strategy="IDENTITY") - * @ORM\Column(type="integer") - */ - public $id; - - /** @ORM\ManyToOne(targetEntity="DDC2106Entity", inversedBy="children") */ - public $parent; - - /** - * @ORM\OneToMany(targetEntity="DDC2106Entity", mappedBy="parent", cascade={"persist"}) - */ - public $children; - - public function __construct() - { - $this->children = new \Doctrine\Common\Collections\ArrayCollection; - } -} - From 7a2bedb346fa8b1c5d3a21cdf4372a1801a11d92 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 2 Dec 2015 18:09:59 +0100 Subject: [PATCH 243/275] Removing `EntityManager#detach()` --- lib/Doctrine/ORM/EntityManager.php | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 35a6b9b3924..d6ce860ad79 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -675,28 +675,6 @@ public function refresh($entity) $this->unitOfWork->refresh($entity); } - /** - * Detaches an entity from the EntityManager, causing a managed entity to - * become detached. Unflushed changes made to the entity if any - * (including removal of the entity), will not be synchronized to the database. - * Entities which previously referenced the detached entity will continue to - * reference it. - * - * @param object $entity The entity to detach. - * - * @return void - * - * @throws ORMInvalidArgumentException - */ - public function detach($entity) - { - if ( ! is_object($entity)) { - throw ORMInvalidArgumentException::invalidObject('EntityManager#detach()', $entity); - } - - $this->unitOfWork->detach($entity); - } - /** * {@inheritDoc} * From 3bf9f6a990f6fc875ab433094c6ceb23b1de7974 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 2 Dec 2015 18:16:21 +0100 Subject: [PATCH 244/275] Disabling test around the `EntityManager#clear($entityName)` functionality (improvement needed) --- tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php | 2 ++ tests/Doctrine/Tests/ORM/Functional/ReadOnlyTest.php | 2 ++ 2 files changed, 4 insertions(+) diff --git a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php index 0f7f28a232f..e6b79cd36b6 100644 --- a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php @@ -878,6 +878,8 @@ public function testManyToOneFetchModeQuery() */ public function testClear() { + // @TODO the semantics around `EntityManager#clear()` need to be improved + $this->markTestIncomplete('Feature has been disabled, and will be re-enabled later on'); $user = new CmsUser; $user->name = 'Dominik'; $user->username = 'domnikl'; diff --git a/tests/Doctrine/Tests/ORM/Functional/ReadOnlyTest.php b/tests/Doctrine/Tests/ORM/Functional/ReadOnlyTest.php index 80440290019..8da64758c65 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ReadOnlyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ReadOnlyTest.php @@ -65,6 +65,8 @@ public function testClearReadOnly() */ public function testClearEntitiesReadOnly() { + // @TODO the semantics around `EntityManager#clear()` need to be improved + $this->markTestIncomplete('Feature has been disabled, and will be re-enabled later on'); $readOnly = new ReadOnlyEntity("Test1", 1234); $this->em->persist($readOnly); $this->em->flush(); From 06be914543d1443c581a0efe1e8a6e44cf9831e0 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 2 Dec 2015 18:18:17 +0100 Subject: [PATCH 245/275] Removing `clear($entityName)` functionality (for now) --- lib/Doctrine/ORM/UnitOfWork.php | 101 -------------------------------- 1 file changed, 101 deletions(-) diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index e166ae85ed4..1b043fcdabb 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -1695,65 +1695,6 @@ private function doRemove($entity, array &$visited) } - /** - * Detaches an entity from the persistence management. It's persistence will - * no longer be managed by Doctrine. - * - * @param object $entity The entity to detach. - * - * @return void - */ - public function detach($entity) - { - $visited = []; - - $this->doDetach($entity, $visited); - } - - /** - * Executes a detach operation on the given entity. - * - * @param object $entity - * @param array $visited - * @param boolean $noCascade if true, don't cascade detach operation. - * - * @return void - */ - private function doDetach($entity, array &$visited, $noCascade = false) - { - $oid = spl_object_hash($entity); - - if (isset($visited[$oid])) { - return; // Prevent infinite recursion - } - - $visited[$oid] = $entity; // mark visited - - switch ($this->getEntityState($entity, self::STATE_DETACHED)) { - case self::STATE_MANAGED: - if ($this->isInIdentityMap($entity)) { - $this->removeFromIdentityMap($entity); - } - - unset( - $this->entityInsertions[$oid], - $this->entityUpdates[$oid], - $this->entityDeletions[$oid], - $this->entityIdentifiers[$oid], - $this->entityStates[$oid], - $this->originalEntityData[$oid] - ); - break; - case self::STATE_NEW: - case self::STATE_DETACHED: - return; - } - - if ( ! $noCascade) { - $this->cascadeDetach($entity, $visited); - } - } - /** * Refreshes the state of the given entity from the database, overwriting * any local, unpersisted changes. @@ -1847,48 +1788,6 @@ private function cascadeRefresh($entity, array &$visited) } } - /** - * Cascades a detach operation to associated entities. - * - * @param object $entity - * @param array $visited - * - * @return void - */ - private function cascadeDetach($entity, array &$visited) - { - $class = $this->em->getClassMetadata(get_class($entity)); - - foreach ($class->getDeclaredPropertiesIterator() as $association) { - if (! ($association instanceof AssociationMetadata && in_array('detach', $association->getCascade()))) { - continue; - } - - $relatedEntities = $association->getValue($entity); - - switch (true) { - case ($relatedEntities instanceof PersistentCollection): - // Unwrap so that foreach() does not initialize - $relatedEntities = $relatedEntities->unwrap(); - // break; is commented intentionally! - - case ($relatedEntities instanceof Collection): - case (is_array($relatedEntities)): - foreach ($relatedEntities as $relatedEntity) { - $this->doDetach($relatedEntity, $visited); - } - break; - - case ($relatedEntities !== null): - $this->doDetach($relatedEntities, $visited); - break; - - default: - // Do nothing - } - } - } - /** * Cascades the save operation to associated entities. * From 0f1869081c0fe2d7985661f6ce216b3ba104817d Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sat, 24 Jun 2017 10:34:43 +0200 Subject: [PATCH 246/275] #1577 remove newly introduced tests around merge/detach semantics, which were dropped --- .../Mock/NonProxyLoadingEntityManager.php | 8 -- .../MergeVersionedManyToOneTest.php | 46 -------- tests/Doctrine/Tests/ORM/UnitOfWorkTest.php | 110 ------------------ 3 files changed, 164 deletions(-) delete mode 100644 tests/Doctrine/Tests/ORM/Functional/MergeVersionedManyToOneTest.php diff --git a/tests/Doctrine/Performance/Mock/NonProxyLoadingEntityManager.php b/tests/Doctrine/Performance/Mock/NonProxyLoadingEntityManager.php index 4182a5fecea..c68a65ebbc7 100644 --- a/tests/Doctrine/Performance/Mock/NonProxyLoadingEntityManager.php +++ b/tests/Doctrine/Performance/Mock/NonProxyLoadingEntityManager.php @@ -292,14 +292,6 @@ public function remove($object) $this->realEntityManager->remove($object); } - /** - * {@inheritDoc} - */ - public function merge($object) - { - return $this->realEntityManager->merge($object); - } - /** * {@inheritDoc} */ diff --git a/tests/Doctrine/Tests/ORM/Functional/MergeVersionedManyToOneTest.php b/tests/Doctrine/Tests/ORM/Functional/MergeVersionedManyToOneTest.php deleted file mode 100644 index aa68701d942..00000000000 --- a/tests/Doctrine/Tests/ORM/Functional/MergeVersionedManyToOneTest.php +++ /dev/null @@ -1,46 +0,0 @@ -useModelSet('versioned_many_to_one'); - - parent::setUp(); - } - - /** - * This test case asserts that a detached and unmodified entity could be merge without firing - * OptimisticLockException. - */ - public function testSetVersionOnCreate() - { - $category = new Category(); - $article = new Article(); - - $article->name = 'Article'; - $article->category = $category; - - $this->em->persist($article); - $this->em->flush(); - $this->em->clear(); - - $articleMerged = $this->em->merge($article); - - $articleMerged->name = 'Article Merged'; - - $this->em->flush(); - self::assertEquals(2, $articleMerged->version); - } -} diff --git a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php index 3d1e4bb5708..7021cff5cce 100644 --- a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php +++ b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php @@ -497,116 +497,6 @@ public function entitiesWithInvalidIdentifiersProvider() ]; } - /** - * @group 5689 - * @group 1465 - */ - public function testObjectHashesOfMergedEntitiesAreNotUsedInOriginalEntityDataMap() - { - $user = new CmsUser(); - $user->name = 'ocramius'; - $mergedUser = $this->unitOfWork->merge($user); - - self::assertSame([], $this->unitOfWork->getOriginalEntityData($user), 'No original data was stored'); - self::assertSame([], $this->unitOfWork->getOriginalEntityData($mergedUser), 'No original data was stored'); - - - $user = null; - $mergedUser = null; - - // force garbage collection of $user (frees the used object hashes, which may be recycled) - gc_collect_cycles(); - - $newUser = new CmsUser(); - $newUser->name = 'ocramius'; - - $this->unitOfWork->persist($newUser); - - self::assertSame([], $this->unitOfWork->getOriginalEntityData($newUser), 'No original data was stored'); - } - - /** - * @group DDC-1955 - * @group 5570 - * @group 6174 - */ - public function testMergeWithNewEntityWillPersistItAndTriggerPrePersistListenersWithMergedEntityData() - { - $entity = new EntityWithRandomlyGeneratedField(); - - $generatedFieldValue = $entity->generatedField; - - $this - ->eventManager - ->expects(self::any()) - ->method('hasListeners') - ->willReturnCallback(function ($eventName) { - return $eventName === Events::prePersist; - }); - $this - ->eventManager - ->expects(self::once()) - ->method('dispatchEvent') - ->with( - self::anything(), - self::callback(function (LifecycleEventArgs $args) use ($entity, $generatedFieldValue) { - /* @var $object EntityWithRandomlyGeneratedField */ - $object = $args->getObject(); - - self::assertInstanceOf(EntityWithRandomlyGeneratedField::class, $object); - self::assertNotSame($entity, $object); - self::assertSame($generatedFieldValue, $object->generatedField); - - return true; - }) - ); - - /* @var $object EntityWithRandomlyGeneratedField */ - $object = $this->unitOfWork->merge($entity); - - self::assertNotSame($object, $entity); - self::assertInstanceOf(EntityWithRandomlyGeneratedField::class, $object); - self::assertSame($object->generatedField, $entity->generatedField); - } - - /** - * @group DDC-1955 - * @group 5570 - * @group 6174 - */ - public function testMergeWithExistingEntityWillNotPersistItNorTriggerPrePersistListeners() - { - $persistedEntity = new EntityWithRandomlyGeneratedField(); - $mergedEntity = new EntityWithRandomlyGeneratedField(); - - $mergedEntity->id = $persistedEntity->id; - $mergedEntity->generatedField = random_int( - $persistedEntity->generatedField + 1, - $persistedEntity->generatedField + 1000 - ); - - $this - ->eventManager - ->expects(self::any()) - ->method('hasListeners') - ->willReturnCallback(function ($eventName) { - return $eventName === Events::prePersist; - }); - $this->eventManager->expects(self::never())->method('dispatchEvent'); - - $this->unitOfWork->registerManaged( - $persistedEntity, - ['id' => $persistedEntity->id], - ['generatedField' => $persistedEntity->generatedField] - ); - - /* @var $merged EntityWithRandomlyGeneratedField */ - $merged = $this->unitOfWork->merge($mergedEntity); - - self::assertSame($merged, $persistedEntity); - self::assertSame($persistedEntity->generatedField, $mergedEntity->generatedField); - } - /** * @group DDC-3120 */ From 9de68f601321b74e8bb8c33fa038df46c9ca6bfc Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sat, 24 Jun 2017 11:08:01 +0200 Subject: [PATCH 247/275] #1577 adding upgrade notes about the BC break caused by merge() and detach() semantics removal --- UPGRADE.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/UPGRADE.md b/UPGRADE.md index b6ab07957b6..7efb096154f 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -1,5 +1,29 @@ # Upgrade to 3.0 +## BC Break: Removed `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 removed: + +* `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()` is not 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). + ## BC Break: Added the final keyword for `EntityManager` Final keyword has been added to the ``EntityManager::class`` in order to ensure that EntityManager is not used as valid extension point. Valid extension point should be EntityManagerInterface. From c49af2f56296b1ff8a009d335c649c84b350a723 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sat, 24 Jun 2017 11:22:57 +0200 Subject: [PATCH 248/275] #1577 re-adding `merge()` and `detach()`, since a release of doctrine/common is required to completely remove those methods from the `ObjectManager` interface first --- lib/Doctrine/ORM/EntityManager.php | 20 +++++++++++++++++++ .../Mock/NonProxyLoadingEntityManager.php | 14 ++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index d6ce860ad79..c1598576102 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -337,6 +337,26 @@ public function createQueryBuilder() return new QueryBuilder($this); } + /** + * {@inheritDoc} + * + * @deprecated + */ + public function merge($object) + { + throw new \BadMethodCallException('@TODO method disabled - will be removed in 3.0 with a release of doctrine/common'); + } + + /** + * {@inheritDoc} + * + * @deprecated + */ + public function detach($object) + { + throw new \BadMethodCallException('@TODO method disabled - will be removed in 3.0 with a release of doctrine/common'); + } + /** * Flushes all changes to objects that have been queued up to now to the database. * This effectively synchronizes the in-memory state of managed objects with the diff --git a/tests/Doctrine/Performance/Mock/NonProxyLoadingEntityManager.php b/tests/Doctrine/Performance/Mock/NonProxyLoadingEntityManager.php index c68a65ebbc7..ed1453b411c 100644 --- a/tests/Doctrine/Performance/Mock/NonProxyLoadingEntityManager.php +++ b/tests/Doctrine/Performance/Mock/NonProxyLoadingEntityManager.php @@ -302,10 +302,22 @@ public function clear($objectName = null) /** * {@inheritDoc} + * + * @deprecated + */ + public function merge($object) + { + throw new \BadMethodCallException('@TODO method disabled - will be removed in 3.0 with a release of doctrine/common'); + } + + /** + * {@inheritDoc} + * + * @deprecated */ public function detach($object) { - $this->realEntityManager->detach($object); + throw new \BadMethodCallException('@TODO method disabled - will be removed in 3.0 with a release of doctrine/common'); } /** From 9a7dedd9f5abac35420add047fd4dc87d67ffc80 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sat, 24 Jun 2017 11:29:15 +0200 Subject: [PATCH 249/275] #1577 re-wording 'working with sessions' section, so that users are discouraged from storing entities in sessions --- docs/en/cookbook/entities-in-session.rst | 57 ++++++++---------------- 1 file changed, 19 insertions(+), 38 deletions(-) diff --git a/docs/en/cookbook/entities-in-session.rst b/docs/en/cookbook/entities-in-session.rst index e411e76deac..47715d3c305 100644 --- a/docs/en/cookbook/entities-in-session.rst +++ b/docs/en/cookbook/entities-in-session.rst @@ -12,12 +12,14 @@ this working. Merging entity into an EntityManager ------------------------------------ -In Doctrine an entity objects has to be "managed" by an EntityManager to be -updateable. Entities saved into the session are not managed in the next request +In Doctrine, an entity objects has to be "managed" by an EntityManager to be +updated. Entities saved into the session are not managed in the next request anymore. This means that you have to register these entities with an EntityManager again if you want to change them or use them as part of -references between other entities. You can achieve this by calling -``EntityManager#merge()``. +references between other entities. + +It is a good idea to avoid storing entities in serialized formats such as +``$_SESSION``: instead, store the entity identifiers or raw data. For a representative User object the code to get turn an instance from the session into a managed Doctrine object looks like this: @@ -29,41 +31,20 @@ the session into a managed Doctrine object looks like this: $em = GetEntityManager(); // creates an EntityManager session_start(); - if (isset($_SESSION['user']) && $_SESSION['user'] instanceof User) { - $user = $_SESSION['user']; - $user = $em->merge($user); + if (isset($_SESSION['user'])) { + $user = $em->find(User::class, $_SESSION['user']); } -.. note:: - - A frequent mistake is not to get the merged user object from the return - value of ``EntityManager#merge()``. The entity object passed to merge is - not necessarily the same object that is returned from the method. - -Serializing entity into the session ------------------------------------ - -@TODO: this section needs clarification/removal (or be moved to known limitations) -Entities that are serialized into the session normally contain references to -other entities as well. Think of the user entity has a reference to his -articles, groups, photos or many other different entities. If you serialize -this object into the session then you don't want to serialize the related -entities as well. This is why you should call ``EntityManager#detach()`` on this -object or implement the __sleep() magic method on your entity. - -.. code-block:: php - - find("User", 1); - $em->detach($user); - $_SESSION['user'] = $user; - -.. note:: +Serializing entities into the session +------------------------------------- - When you called detach on your objects they get "unmanaged" with that - entity manager. This means you cannot use them as part of write operations - during ``EntityManager#flush()`` anymore in this request. +Serializing entities in the session means serializing also all associated +entities and collections. While this might look like a quick solution in +simple applications, you will encounter problems due to the fact that the +data in the session is stale. +In order to prevent working with stale data, try saving only minimal +information about your entities in your session, without storing entire +entity objects. Should you need the full information of an object, so it +is suggested to re-query the database, which is usually the most +authoritative source of information in typical PHP applications. From 28a26843f49f7185e36f3fec9c6df64b8ad412de Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sat, 24 Jun 2017 11:34:55 +0200 Subject: [PATCH 250/275] #1577 removing `detach()` calls references from the batch processing docs, adding links to existing batch processing utilities --- docs/en/reference/batch-processing.rst | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/docs/en/reference/batch-processing.rst b/docs/en/reference/batch-processing.rst index 6f30ba2647f..47c2d848b4e 100644 --- a/docs/en/reference/batch-processing.rst +++ b/docs/en/reference/batch-processing.rst @@ -159,7 +159,6 @@ The following example shows how to do this: Iterating Large Results for Data-Processing ------------------------------------------- -@TODO - we probably want to suggest complete clear() operations (or rely on L2 cache instead) You can use the ``iterate()`` method just to iterate over a large result and no UPDATE or DELETE intention. The ``IterableResult`` instance returned from ``$query->iterate()`` implements the @@ -174,8 +173,8 @@ problems using the following approach: foreach ($iterableResult as $row) { // do stuff with the data in the row, $row[0] is always the object - // detach from Doctrine, so that it can be Garbage-Collected immediately - $this->_em->detach($row[0]); + // detach all entities from Doctrine, so that Garbage-Collection can kick in immediately + $this->_em->clear(); } .. note:: @@ -184,5 +183,9 @@ problems using the following approach: fetch-join a collection-valued association. The nature of such SQL result sets is not suitable for incremental hydration. +Packages for easing Batch Processing +------------------------------------ - +You can implement batch processing yourself, or use an existing +package such as `DoctrineBatchUtils `_, +which already provides the logic described above in an encapsulated format. From d9e86afe058beb46dc92037ddb697e49240e08b7 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sat, 24 Jun 2017 11:37:45 +0200 Subject: [PATCH 251/275] #1577 removing and from the XSD --- doctrine-mapping.xsd | 2 -- 1 file changed, 2 deletions(-) diff --git a/doctrine-mapping.xsd b/doctrine-mapping.xsd index 610d261d8b2..32277abf2b5 100644 --- a/doctrine-mapping.xsd +++ b/doctrine-mapping.xsd @@ -35,10 +35,8 @@ - - From d8373994519dc0094d18b307ee4aafef93384908 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sat, 24 Jun 2017 11:38:15 +0200 Subject: [PATCH 252/275] #1577 removing cascade-merge and cascade-detach from mapping examples --- docs/en/reference/inheritance-mapping.rst | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/en/reference/inheritance-mapping.rst b/docs/en/reference/inheritance-mapping.rst index 2063624fe91..b577760ef2e 100644 --- a/docs/en/reference/inheritance-mapping.rst +++ b/docs/en/reference/inheritance-mapping.rst @@ -365,8 +365,7 @@ Example: - - + @@ -414,7 +413,7 @@ Example: joinColumn: name: address_id referencedColumnName: id - cascade: [ persist, merge ] + cascade: [ persist, refresh ] manyToMany: groups: targetEntity: Group @@ -426,7 +425,7 @@ Example: inverseJoinColumns: group_id: referencedColumnName: id - cascade: [ persist, merge, detach ] + cascade: [ persist, refresh ] # admin mapping MyProject\Model\Admin: From 775697afcfc31fb7ce6c5c9044e08b77c08ed9a2 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sat, 24 Jun 2017 11:38:37 +0200 Subject: [PATCH 253/275] #1577 removing cascade-merge and cascade-detach from mapping examples --- docs/en/reference/inheritance-mapping.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/reference/inheritance-mapping.rst b/docs/en/reference/inheritance-mapping.rst index b577760ef2e..6d807fe346e 100644 --- a/docs/en/reference/inheritance-mapping.rst +++ b/docs/en/reference/inheritance-mapping.rst @@ -521,7 +521,7 @@ Could be used by an entity that extends a mapped superclass to override a field - + From 1873d88b1b470fbc0bd153c70e370a9ef6f3fc57 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sat, 24 Jun 2017 11:43:30 +0200 Subject: [PATCH 254/275] #1577 removing references to merge/detach cascade operations --- docs/en/reference/working-with-associations.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/reference/working-with-associations.rst b/docs/en/reference/working-with-associations.rst index e115efbc97e..7d18eee337c 100644 --- a/docs/en/reference/working-with-associations.rst +++ b/docs/en/reference/working-with-associations.rst @@ -410,7 +410,7 @@ Transitive persistence / Cascade Operations Doctrine 2 provides a mechanism for transitive persistence through cascading of certain operations. Each association to another entity or a collection of entities can be configured to automatically cascade the following operations to the associated entities: -``persist``, ``remove``, ``merge``, ``detach``, ``refresh`` or ``all``. +``persist``, ``remove``, ``refresh`` or ``all``. The main use case for ``cascade: persist`` is to avoid "exposing" associated entities to your PHP application. Continuing with the User-Comment example of this chapter, this is how the creation of a new user and a new From e7d4154b78b9bc4b622d33697cf49decb6ba99f6 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sat, 24 Jun 2017 11:44:11 +0200 Subject: [PATCH 255/275] #1577 removing documentation about merge/detach methods, replaced by clear() documentation only --- docs/en/reference/working-with-objects.rst | 113 ++------------------- 1 file changed, 11 insertions(+), 102 deletions(-) diff --git a/docs/en/reference/working-with-objects.rst b/docs/en/reference/working-with-objects.rst index 74b30aca1d2..f0a3c8a0420 100644 --- a/docs/en/reference/working-with-objects.rst +++ b/docs/en/reference/working-with-objects.rst @@ -326,47 +326,36 @@ in multiple ways with very different performance impacts. Detaching entities ------------------ -@TODO section needs removal/rework -An entity is detached from an EntityManager and thus no longer -managed by invoking the ``EntityManager#detach($entity)`` method on -it or by cascading the detach operation to it. Changes made to the -detached entity, if any (including removal of the entity), will not -be synchronized to the database after the entity has been +All entities are detached from an EntityManager and thus no longer +managed by it after invoking the ``EntityManager#clear()`` method. +Changes made to the detached entities, if any (including their removal), +will not be synchronized to the database after they have been detached. -Doctrine will not hold on to any references to a detached entity. +Doctrine will not hold on to any references to detached entities. Example: .. code-block:: php detach($entity); + $em->clear(); The semantics of the detach operation, applied to an entity X are as follows: - - If X is a managed entity, the detach operation causes it to - become detached. The detach operation is cascaded to entities - referenced by X, if the relationships from X to these other - entities is mapped with cascade=DETACH or cascade=ALL (see - ":ref:`Transitive Persistence `"). Entities which previously referenced X + become detached. Entities which previously referenced X will continue to reference X. - If X is a new or detached entity, it is ignored by the detach operation. -- If X is a removed entity, the detach operation is cascaded to - entities referenced by X, if the relationships from X to these - other entities is mapped with cascade=DETACH or cascade=ALL (see - ":ref:`Transitive Persistence `"). Entities which previously referenced X - will continue to reference X. +- If X is a removed entity, it will become detached, and therefore + no longer scheduled to be removed. Entities which previously + referenced X will continue to reference X. There are several situations in which an entity is detached -automatically without invoking the ``detach`` method: +automatically: - -- When ``EntityManager#clear()`` is invoked, all entities that are - currently managed by the EntityManager instance become detached. - When serializing an entity. The entity retrieved upon subsequent unserialization will be detached (This is the case for all entities that are serialized and stored in some cache, i.e. when using the @@ -375,86 +364,6 @@ automatically without invoking the ``detach`` method: The ``detach`` operation is usually not as frequently needed and used as ``persist`` and ``remove``. -Merging entities ----------------- - -Merging entities refers to the merging of (usually detached) -entities into the context of an EntityManager so that they become -managed again. To merge the state of an entity into an -EntityManager use the ``EntityManager#merge($entity)`` method. The -state of the passed entity will be merged into a managed copy of -this entity and this copy will subsequently be returned. - -Example: - -.. code-block:: php - - merge($detachedEntity); - // $entity now refers to the fully managed copy returned by the merge operation. - // The EntityManager $em now manages the persistence of $entity as usual. - -.. note:: - - When you want to serialize/unserialize entities you - have to make all entity properties protected, never private. The - reason for this is, if you serialize a class that was a proxy - instance before, the private variables won't be serialized and a - PHP Notice is thrown. - - -The semantics of the merge operation, applied to an entity X, are -as follows: - - -- If X is a detached entity, the state of X is copied onto a - pre-existing managed entity instance X' of the same identity. -- If X is a new entity instance, a new managed copy X' will be - created and the state of X is copied onto this managed instance. -- If X is a removed entity instance, an InvalidArgumentException - will be thrown. -- If X is a managed entity, it is ignored by the merge operation, - however, the merge operation is cascaded to entities referenced by - relationships from X if these relationships have been mapped with - the cascade element value MERGE or ALL (see ":ref:`Transitive Persistence `"). -- For all entities Y referenced by relationships from X having the - cascade element value MERGE or ALL, Y is merged recursively as Y'. - For all such Y referenced by X, X' is set to reference Y'. (Note - that if X is managed then X is the same object as X'.) -- If X is an entity merged to X', with a reference to another - entity Y, where cascade=MERGE or cascade=ALL is not specified, then - navigation of the same association from X' yields a reference to a - managed object Y' with the same persistent identity as Y. - -The ``merge`` operation will throw an ``OptimisticLockException`` -if the entity being merged uses optimistic locking through a -version field and the versions of the entity being merged and the -managed copy don't match. This usually means that the entity has -been modified while being detached. - -The ``merge`` operation is usually not as frequently needed and -used as ``persist`` and ``remove``. The most common scenario for -the ``merge`` operation is to reattach entities to an EntityManager -that come from some cache (and are therefore detached) and you want -to modify and persist such an entity. - -.. warning:: - - If you need to perform multiple merges of entities that share certain subparts - of their object-graphs and cascade merge, then you have to call ``EntityManager#clear()`` between the - successive calls to ``EntityManager#merge()``. Otherwise you might end up with - multiple copies of the "same" object in the database, however with different ids. - -.. note:: - - If you load some detached entities from a cache and you do - not need to persist or delete them or otherwise make use of them - without the need for persistence services there is no need to use - ``merge``. I.e. you can simply pass detached objects from a cache - directly to the view. - - Synchronization with the Database --------------------------------- From 70a32a2b325c2a8529bee2766ae3f83914feb34e Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sat, 24 Jun 2017 11:54:44 +0200 Subject: [PATCH 256/275] #1577 removing all references to `merge` operations in the docs --- docs/en/reference/annotations-reference.rst | 2 +- docs/en/reference/best-practices.rst | 2 +- docs/en/reference/limitations-and-known-issues.rst | 9 --------- docs/en/reference/working-with-objects.rst | 2 +- docs/en/reference/xml-mapping.rst | 1 - docs/en/reference/yaml-mapping.rst | 2 +- ...override-field-association-mappings-in-subclasses.rst | 2 +- 7 files changed, 5 insertions(+), 15 deletions(-) diff --git a/docs/en/reference/annotations-reference.rst b/docs/en/reference/annotations-reference.rst index 8a2487a6502..80890ad0cf8 100644 --- a/docs/en/reference/annotations-reference.rst +++ b/docs/en/reference/annotations-reference.rst @@ -983,7 +983,7 @@ Example: `_. -Cascade Merge with Bi-directional Associations -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -There are two bugs now that concern the use of cascade merge in combination with bi-directional associations. -Make sure to study the behavior of cascade merge if you are using it: - -- `DDC-875 `_ Merge can sometimes add the same entity twice into a collection -- `DDC-763 `_ Cascade merge on associated entities can insert too many rows through "Persistence by Reachability" - Custom Persisters ~~~~~~~~~~~~~~~~~ diff --git a/docs/en/reference/working-with-objects.rst b/docs/en/reference/working-with-objects.rst index f0a3c8a0420..e7ea3e2f2f3 100644 --- a/docs/en/reference/working-with-objects.rst +++ b/docs/en/reference/working-with-objects.rst @@ -473,7 +473,7 @@ during development. .. note:: Do not invoke ``flush`` after every change to an entity - or every single invocation of persist/remove/merge/... This is an + or every single invocation of persist/remove/refresh/... This is an anti-pattern and unnecessarily reduces the performance of your application. Instead, form units of work that operate on your objects and call ``flush`` when you are done. While serving a diff --git a/docs/en/reference/xml-mapping.rst b/docs/en/reference/xml-mapping.rst index 5f013152789..2bb615013f3 100644 --- a/docs/en/reference/xml-mapping.rst +++ b/docs/en/reference/xml-mapping.rst @@ -688,7 +688,6 @@ specified by their respective tags: - ```` -- ```` - ```` - ```` diff --git a/docs/en/reference/yaml-mapping.rst b/docs/en/reference/yaml-mapping.rst index ea54e277ae9..1f45192ca38 100644 --- a/docs/en/reference/yaml-mapping.rst +++ b/docs/en/reference/yaml-mapping.rst @@ -114,7 +114,7 @@ of several common elements: phonenumbers: targetEntity: Phonenumber mappedBy: user - cascade: ["persist", "merge"] + cascade: ["persist", "refresh"] manyToMany: groups: targetEntity: Group diff --git a/docs/en/tutorials/override-field-association-mappings-in-subclasses.rst b/docs/en/tutorials/override-field-association-mappings-in-subclasses.rst index bdbf2be5ea8..1de13b8c07e 100644 --- a/docs/en/tutorials/override-field-association-mappings-in-subclasses.rst +++ b/docs/en/tutorials/override-field-association-mappings-in-subclasses.rst @@ -79,7 +79,7 @@ which has mapping metadata that is overridden by the annotation above: protected $foo; /** - * @ORM\OneToOne(targetEntity="Bar", cascade={"persist", "merge"}) + * @ORM\OneToOne(targetEntity="Bar", cascade={"persist", "refresh"}) * @ORM\JoinColumn(name="example_trait_bar_id", referencedColumnName="id") */ protected $bar; From e62b47fc67f724ebd731d6428cfb9feee16f7a03 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sat, 24 Jun 2017 11:55:08 +0200 Subject: [PATCH 257/275] #1577 `merge` and `detach` are no longer accepted cascade mappings --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 2 +- .../Mapping/Driver/NewAnnotationDriver.php | 2 +- .../Exporter/AssociationMetadataExporter.php | 2 +- lib/Doctrine/ORM/Mapping/MappingException.php | 2 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 2 +- .../ORM/Tools/Export/Driver/PhpExporter.php | 334 ++++++++++++++++++ .../ORM/Tools/Export/Driver/XmlExporter.php | 2 +- 7 files changed, 340 insertions(+), 6 deletions(-) create mode 100644 lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 40e1321b1f1..3e29679057a 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -756,7 +756,7 @@ protected function validateAndCompleteAssociationMapping(AssociationMetadata $pr } // Cascades - $cascadeTypes = ['remove', 'persist', 'refresh', 'merge', 'detach']; + $cascadeTypes = ['remove', 'persist', 'refresh']; $cascades = array_map('strtolower', $property->getCascade()); if (in_array('all', $cascades)) { diff --git a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php index ccbb30a2171..562d3118569 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/NewAnnotationDriver.php @@ -1127,7 +1127,7 @@ private function getFetchMode($className, $fetchMode) */ private function getCascade(string $className, string $fieldName, array $originalCascades) { - $cascadeTypes = ['remove', 'persist', 'refresh', 'merge', 'detach']; + $cascadeTypes = ['remove', 'persist', 'refresh']; $cascades = array_map('strtolower', $originalCascades); if (in_array('all', $cascades)) { diff --git a/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php index c89f54a2fe5..30462d10317 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php @@ -59,7 +59,7 @@ public function export($value, int $indentationLevel = 0): string */ private function resolveCascade(array $cascade) { - $resolvedCascade = ['remove', 'persist', 'refresh', 'merge', 'detach']; + $resolvedCascade = ['remove', 'persist', 'refresh']; foreach ($resolvedCascade as $key => $value) { if (in_array($value, $cascade, true)) { diff --git a/lib/Doctrine/ORM/Mapping/MappingException.php b/lib/Doctrine/ORM/Mapping/MappingException.php index 6f762ee83a8..8d623928ebb 100644 --- a/lib/Doctrine/ORM/Mapping/MappingException.php +++ b/lib/Doctrine/ORM/Mapping/MappingException.php @@ -781,7 +781,7 @@ public static function invalidCascadeOption(array $cascades, $className, $proper $cascades = implode(", ", array_map(function ($e) { return "'" . $e . "'"; }, $cascades)); return new self(sprintf( - "You have specified invalid cascade options for %s::$%s: %s; available options: 'remove', 'persist', 'refresh', 'merge', and 'detach'", + "You have specified invalid cascade options for %s::$%s: %s; available options: 'remove', 'persist', and 'refresh'", $className, $propertyName, $cascades diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index c0b5d49a131..94050f25c01 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -1548,7 +1548,7 @@ protected function generateAssociationMappingPropertyDocBlock(AssociationMetadat if ($association->getCascade()) { $cascades = []; - foreach (['remove', 'persist', 'refresh', 'merge', 'detach'] as $cascadeType) { + foreach (['remove', 'persist', 'refresh'] as $cascadeType) { if (in_array($cascadeType, $association->getCascade())) { $cascades[] = sprintf('"%s"', $cascadeType); } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php new file mode 100644 index 00000000000..f62ba8cb1f4 --- /dev/null +++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php @@ -0,0 +1,334 @@ +. + */ + +namespace Doctrine\ORM\Tools\Export\Driver; + +use Doctrine\ORM\Mapping\AssociationMetadata; +use Doctrine\ORM\Mapping\ClassMetadata; +use Doctrine\ORM\Mapping\FieldMetadata; +use Doctrine\ORM\Mapping\JoinColumnMetadata; +use Doctrine\ORM\Mapping\JoinTableMetadata; +use Doctrine\ORM\Mapping\ManyToManyAssociationMetadata; +use Doctrine\ORM\Mapping\ManyToOneAssociationMetadata; +use Doctrine\ORM\Mapping\OneToManyAssociationMetadata; +use Doctrine\ORM\Mapping\OneToOneAssociationMetadata; +use Doctrine\ORM\Mapping\ToOneAssociationMetadata; + +/** + * ClassMetadata exporter for PHP code. + * + * @link www.doctrine-project.org + * @since 2.0 + * @author Jonathan Wage + */ +class PhpExporter extends AbstractExporter +{ + /** + * @var string + */ + protected $extension = '.php'; + + /** + * {@inheritdoc} + */ + public function exportClassMetadata(ClassMetadata $metadata) + { + $lines = []; + $lines[] = 'isMappedSuperclass) { + $lines[] = '$metadata->isMappedSuperclass = true;'; + } + + if ($metadata->inheritanceType) { + $lines[] = '$metadata->setInheritanceType(Mapping\InheritanceType::' . $metadata->inheritanceType . ');'; + } + + if ($metadata->customRepositoryClassName) { + $lines[] = '$metadata->customRepositoryClassName = "' . $metadata->customRepositoryClassName . '";'; + } + + if ($metadata->table) { + $table = $metadata->table; + + $lines[] = '$table = new Mapping\TableMetadata();'; + $lines[] = null; + + if (! empty($table->getSchema())) { + $lines[] = '$table->setSchema("' . $table->getSchema() . '");'; + } + + $lines[] = '$table->setName("' . $table->getName() . '");'; + $lines[] = '$table->setOptions(' . $this->varExport($table->getOptions()) . ');'; + + foreach ($table->getIndexes() as $index) { + $lines[] = '$table->addIndex(' . $this->varExport($index) . ');'; + } + + foreach ($table->getUniqueConstraints() as $constraint) { + $lines[] = '$table->addUniqueConstraint(' . $this->varExport($constraint) . ');'; + } + + $lines[] = null; + $lines[] = '$metadata->setTable($table);'; + } + + if ($metadata->discriminatorColumn) { + $discrColumn = $metadata->discriminatorColumn; + + $lines[] = '$discrColumn = new Mapping\DiscriminatorColumnMetadata();'; + $lines[] = null; + $lines[] = '$discrColumn->setColumnName("' . $discrColumn->getColumnName() . '");'; + $lines[] = '$discrColumn->setType(Type::getType("' . $discrColumn->getTypeName() . '"));'; + $lines[] = '$discrColumn->setTableName("' . $discrColumn->getTableName() . '");'; + + if (! empty($discrColumn->getColumnDefinition())) { + $lines[] = '$property->setColumnDefinition("' . $discrColumn->getColumnDefinition() . '");'; + } + + if (! empty($discrColumn->getLength())) { + $lines[] = '$property->setLength(' . $discrColumn->getLength() . ');'; + } + + if (! empty($discrColumn->getScale())) { + $lines[] = '$property->setScale(' . $discrColumn->getScale() . ');'; + } + + if (! empty($discrColumn->getPrecision())) { + $lines[] = '$property->setPrecision(' . $discrColumn->getPrecision() . ');'; + } + + $lines[] = '$discrColumn->setOptions(' . $this->varExport($discrColumn->getOptions()) . ');'; + $lines[] = '$discrColumn->setNullable(' . $this->varExport($discrColumn->isNullable()) . ');'; + $lines[] = '$discrColumn->setUnique(' . $this->varExport($discrColumn->isUnique()) . ');'; + $lines[] = null; + $lines[] = '$metadata->setDiscriminatorColumn($discrColumn);'; + } + + if ($metadata->discriminatorMap) { + $lines[] = '$metadata->setDiscriminatorMap(' . $this->varExport($metadata->discriminatorMap) . ');'; + } + + if ($metadata->changeTrackingPolicy) { + $lines[] = '$metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::' . $metadata->changeTrackingPolicy . ');'; + } + + if ($metadata->lifecycleCallbacks) { + foreach ($metadata->lifecycleCallbacks as $event => $callbacks) { + foreach ($callbacks as $callback) { + $lines[] = '$metadata->addLifecycleCallback("' . $callback . '", "' . $event . '");'; + } + } + } + + if (! $metadata->isIdentifierComposite()) { + $lines[] = '$metadata->setIdGeneratorType(Mapping\GeneratorType::' . $metadata->generatorType . ');'; + } + + foreach ($metadata->getProperties() as $property) { + if ($property instanceof FieldMetadata) { + $this->exportFieldMetadata($metadata, $property, $lines); + } else if ($property instanceof AssociationMetadata) { + $this->exportAssociationMetadata($metadata, $property, $lines); + } + } + + return implode(PHP_EOL, $lines); + } + + private function exportFieldMetadata(ClassMetadata $metadata, FieldMetadata $property, array &$lines) + { + $lines[] = sprintf( + '$property = new Mapping\%sFieldMetadata("%s");', + ($metadata->versionProperty === $property) ? 'Version' : '', + $property->getName() + ); + + $lines[] = null; + $lines[] = '$property->setColumnName("' . $property->getColumnName() . '");'; + $lines[] = '$property->setType(Type::getType("' . $property->getTypeName() . '"));'; + $lines[] = '$property->setTableName("' . $property->getTableName() . '");'; + + if (! empty($property->getColumnDefinition())) { + $lines[] = '$property->setColumnDefinition("' . $property->getColumnDefinition() . '");'; + } + + if (! empty($property->getLength())) { + $lines[] = '$property->setLength(' . $property->getLength() . ');'; + } + + if (! empty($property->getScale())) { + $lines[] = '$property->setScale(' . $property->getScale() . ');'; + } + + if (! empty($property->getPrecision())) { + $lines[] = '$property->setPrecision(' . $property->getPrecision() . ');'; + } + + $lines[] = '$property->setOptions(' . $this->varExport($property->getOptions()) . ');'; + $lines[] = '$property->setPrimaryKey(' . $this->varExport($property->isPrimaryKey()) . ');'; + $lines[] = '$property->setNullable(' . $this->varExport($property->isNullable()) . ');'; + $lines[] = '$property->setUnique(' . $this->varExport($property->isUnique()) . ');'; + $lines[] = null; + $lines[] = '$metadata->addProperty($property);'; + } + + private function exportAssociationMetadata(ClassMetadata $metadata, AssociationMetadata $association, array &$lines) + { + $cascade = ['remove', 'persist', 'refresh']; + + foreach ($cascade as $key => $value) { + if ( ! in_array($value, $association->getCascade())) { + unset($cascade[$key]); + } + } + + if (count($cascade) === 5) { + $cascade = ['all']; + } + + if ($association instanceof OneToOneAssociationMetadata) { + $this->exportJoinColumns($association->getJoinColumns(), $lines, 'joinColumns'); + + $lines[] = '$association = new Mapping\OneToOneAssociationMetadata("' . $association->getName() . '");'; + $lines[] = null; + $lines[] = '$association->setJoinColumns($joinColumns);'; + } else if ($association instanceof ManyToOneAssociationMetadata) { + $this->exportJoinColumns($association->getJoinColumns(), $lines, 'joinColumns'); + + $lines[] = '$association = new Mapping\ManyToOneAssociationMetadata("' . $association->getName() . '");'; + $lines[] = null; + $lines[] = '$association->setJoinColumns($joinColumns);'; + } else if ($association instanceof OneToManyAssociationMetadata) { + $lines[] = '$association = new Mapping\OneToManyAssociationMetadata("' . $association->getName() . '");'; + $lines[] = null; + $lines[] = '$association->setOrderBy(' . $this->varExport($association->getOrderBy()) . ');'; + } else if ($association instanceof ManyToManyAssociationMetadata) { + if ($association->getJoinTable()) { + $this->exportJoinTable($association->getJoinTable(), $lines); + } + + $lines[] = '$association = new Mapping\ManyToManyAssociationMetadata("' . $association->getName() . '");'; + $lines[] = null; + + if ($association->getJoinTable()) { + $lines[] = '$association->setJoinTable($joinTable);'; + } + + if ($association->getIndexedBy()) { + $lines[] = '$association->setIndexedBy("' . $association->getIndexedBy() . '");'; + } + + $lines[] = '$association->setOrderBy(' . $this->varExport($association->getOrderBy()) . ');'; + } + + $lines[] = '$association->setTargetEntity("' . $association->getTargetEntity() . '");'; + $lines[] = '$association->setFetchMode("' . $association->getFetchMode() . '");'; + + if ($association->getMappedBy()) { + $lines[] = '$association->setMappedBy("' . $association->getMappedBy() . '");'; + } + + if ($association->getInversedBy()) { + $lines[] = '$association->setInversedBy("' . $association->getInversedBy() . '");'; + } + + $lines[] = '$association->setCascade(' . $this->varExport($cascade) . ');'; + $lines[] = '$association->setOrphanRemoval(' . $this->varExport($association->isOrphanRemoval()) . ');'; + $lines[] = '$association->setPrimaryKey(' . $this->varExport($association->isPrimaryKey()) . ');'; + $lines[] = null; + $lines[] = '$metadata->addProperty($association);'; + } + + private function exportJoinTable(JoinTableMetadata $joinTable, array &$lines) + { + $lines[] = null; + $lines[] = '$joinTable = new Mapping\JoinTableMetadata();'; + $lines[] = null; + $lines[] = '$joinTable->setName("' . $joinTable->getName() . '");'; + + if (! empty($joinTable->getSchema())) { + $lines[] = '$joinTable->setSchema("' . $joinTable->getSchema() . '");'; + } + + $lines[] = '$joinTable->setOptions(' . $this->varExport($joinTable->getOptions()) . ');'; + + $this->exportJoinColumns($joinTable->getJoinColumns(), $lines, 'joinColumns'); + + $lines[] = null; + $lines[] = 'foreach ($joinColumns as $joinColumn) {'; + $lines[] = ' $joinTable->addJoinColumn($joinColumn);'; + $lines[] = '}'; + $lines[] = null; + + $this->exportJoinColumns($joinTable->getInverseJoinColumns(), $lines, 'inverseJoinColumns'); + + $lines[] = null; + $lines[] = 'foreach ($inverseJoinColumns as $inverseJoinColumn) {'; + $lines[] = ' $joinTable->addInverseJoinColumn($inverseJoinColumn);'; + $lines[] = '}'; + } + + private function exportJoinColumns(array $joinColumns, array &$lines, $variableName) + { + $lines[] = '$' . $variableName . ' = array();'; + + foreach ($joinColumns as $joinColumn) { + /** @var JoinColumnMetadata $joinColumn */ + $lines[] = '$joinColumn = new Mapping\JoinColumnMetadata();'; + $lines[] = null; + $lines[] = '$joinColumn->setTableName("' . $joinColumn->getTableName() . '");'; + $lines[] = '$joinColumn->setColumnName("' . $joinColumn->getColumnName() . '");'; + $lines[] = '$joinColumn->setReferencedColumnName("' . $joinColumn->getReferencedColumnName() . '");'; + $lines[] = '$joinColumn->setAliasedName("' . $joinColumn->getAliasedName() . '");'; + $lines[] = '$joinColumn->setColumnDefinition("' . $joinColumn->getColumnDefinition() . '");'; + $lines[] = '$joinColumn->setOnDelete("' . $joinColumn->getOnDelete() . '");'; + $lines[] = '$joinColumn->setOptions(' . $this->varExport($joinColumn->getOptions()) . ');'; + $lines[] = '$joinColumn->setNullable("' . $joinColumn->isNullable() . '");'; + $lines[] = '$joinColumn->setUnique("' . $joinColumn->isUnique() . '");'; + $lines[] = '$joinColumn->setPrimaryKey("' . $joinColumn->isPrimaryKey() . '");'; + $lines[] = null; + $lines[] = '$' . $variableName . '[] = $joinColumn;'; + } + } + + /** + * @param mixed $var + * + * @return string + */ + protected function varExport($var) + { + $export = var_export($var, true); + $export = str_replace("\n", PHP_EOL . str_repeat(' ', 8), $export); + $export = str_replace(' ', ' ', $export); + $export = str_replace('array (', 'array(', $export); + $export = str_replace('array( ', 'array(', $export); + $export = str_replace(',)', ')', $export); + $export = str_replace(', )', ')', $export); + $export = str_replace(' ', ' ', $export); + + return $export; + } +} diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index c7b421f9d2b..13b11602e7d 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -429,7 +429,7 @@ private function exportCascade(\SimpleXMLElement $associationXml, array $associa { $cascades = []; - foreach (['remove', 'persist', 'refresh', 'merge', 'detach'] as $type) { + foreach (['remove', 'persist', 'refresh'] as $type) { if (in_array($type, $associationCascades)) { $cascades[] = 'cascade-' . $type; } From 9091d2cbb7187f42936068f2f9450e92aff23556 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sat, 24 Jun 2017 11:55:31 +0200 Subject: [PATCH 258/275] #1577 removing `merge` and `detach` related mapping operations in cascades in tests --- .../Tests/Models/CMS/CmsPhonenumber.php | 2 +- tests/Doctrine/Tests/Models/CMS/CmsUser.php | 6 +- .../Models/DDC1872/DDC1872ExampleTrait.php | 2 +- .../Tests/Models/DDC3346/DDC3346Author.php | 2 +- .../Tests/Models/DDC964/DDC964User.php | 68 +++++++- .../Tests/Models/Legacy/LegacyUser.php | 2 +- .../Models/VersionedManyToOne/Article.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 165 +++++++++++++++++- .../Tests/ORM/Mapping/ClassMetadataTest.php | 2 +- .../Doctrine.Tests.Models.CMS.CmsUser.dcm.xml | 11 +- ...ine.Tests.Models.DDC964.DDC964User.dcm.xml | 3 - .../Tests/ORM/Performance/DDC2602Test.php | 6 +- .../AbstractClassMetadataExporterTest.php | 8 - .../Doctrine.Tests.ORM.Tools.Export.User.php | 2 +- .../Doctrine.Tests.ORM.Tools.Export.User.php | 4 +- ...ctrine.Tests.ORM.Tools.Export.User.dcm.xml | 3 - 16 files changed, 241 insertions(+), 47 deletions(-) diff --git a/tests/Doctrine/Tests/Models/CMS/CmsPhonenumber.php b/tests/Doctrine/Tests/Models/CMS/CmsPhonenumber.php index 4ac6ac7bfcc..82b0dfe37ee 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsPhonenumber.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsPhonenumber.php @@ -17,7 +17,7 @@ class CmsPhonenumber */ public $phonenumber; /** - * @ORM\ManyToOne(targetEntity="CmsUser", inversedBy="phonenumbers", cascade={"merge"}) + * @ORM\ManyToOne(targetEntity="CmsUser", inversedBy="phonenumbers") * @ORM\JoinColumn(name="user_id", referencedColumnName="id") */ public $user; diff --git a/tests/Doctrine/Tests/Models/CMS/CmsUser.php b/tests/Doctrine/Tests/Models/CMS/CmsUser.php index f6c1dc1ba3f..a5719cab56e 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsUser.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsUser.php @@ -142,11 +142,11 @@ class CmsUser */ public $name; /** - * @ORM\OneToMany(targetEntity="CmsPhonenumber", mappedBy="user", cascade={"persist", "merge"}, orphanRemoval=true) + * @ORM\OneToMany(targetEntity="CmsPhonenumber", mappedBy="user", cascade={"persist"}, orphanRemoval=true) */ public $phonenumbers; /** - * @ORM\OneToMany(targetEntity="CmsArticle", mappedBy="user", cascade={"detach"}) + * @ORM\OneToMany(targetEntity="CmsArticle", mappedBy="user") */ public $articles; /** @@ -159,7 +159,7 @@ class CmsUser */ public $email; /** - * @ORM\ManyToMany(targetEntity="CmsGroup", inversedBy="users", cascade={"persist", "merge", "detach"}) + * @ORM\ManyToMany(targetEntity="CmsGroup", inversedBy="users", cascade={"persist"}) * @ORM\JoinTable(name="cms_users_groups", * joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, * inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")} diff --git a/tests/Doctrine/Tests/Models/DDC1872/DDC1872ExampleTrait.php b/tests/Doctrine/Tests/Models/DDC1872/DDC1872ExampleTrait.php index f60c0076473..26408a87c6a 100644 --- a/tests/Doctrine/Tests/Models/DDC1872/DDC1872ExampleTrait.php +++ b/tests/Doctrine/Tests/Models/DDC1872/DDC1872ExampleTrait.php @@ -20,7 +20,7 @@ trait DDC1872ExampleTrait protected $foo; /** - * @ORM\OneToOne(targetEntity="DDC1872Bar", cascade={"persist", "merge"}) + * @ORM\OneToOne(targetEntity="DDC1872Bar", cascade={"persist"}) * @ORM\JoinColumn(name="example_trait_bar_id", referencedColumnName="id") */ protected $bar; diff --git a/tests/Doctrine/Tests/Models/DDC3346/DDC3346Author.php b/tests/Doctrine/Tests/Models/DDC3346/DDC3346Author.php index 3dae943dcde..14aceee3097 100644 --- a/tests/Doctrine/Tests/Models/DDC3346/DDC3346Author.php +++ b/tests/Doctrine/Tests/Models/DDC3346/DDC3346Author.php @@ -24,7 +24,7 @@ class DDC3346Author public $username; /** - * @ORM\OneToMany(targetEntity="DDC3346Article", mappedBy="user", fetch="EAGER", cascade={"detach"}) + * @ORM\OneToMany(targetEntity="DDC3346Article", mappedBy="user", fetch="EAGER") */ public $articles = []; } diff --git a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php index c187cc5920e..0d4965d76eb 100644 --- a/tests/Doctrine/Tests/Models/DDC964/DDC964User.php +++ b/tests/Doctrine/Tests/Models/DDC964/DDC964User.php @@ -29,7 +29,7 @@ class DDC964User /** * @var ArrayCollection * - * @ORM\ManyToMany(targetEntity="DDC964Group", inversedBy="users", cascade={"persist", "merge", "detach"}) + * @ORM\ManyToMany(targetEntity="DDC964Group", inversedBy="users", cascade={"persist"}) * @ORM\JoinTable(name="ddc964_users_groups", * joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, * inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")} @@ -40,7 +40,7 @@ class DDC964User /** * @var DDC964Address * - * @ORM\ManyToOne(targetEntity="DDC964Address", cascade={"persist", "merge"}) + * @ORM\ManyToOne(targetEntity="DDC964Address", cascade={"persist"}) * @ORM\JoinColumn(name="address_id", referencedColumnName="id") */ protected $address; @@ -110,4 +110,68 @@ public function setAddress(DDC964Address $address) { $this->address = $address; } + + public static function loadMetadata(Mapping\ClassMetadata $metadata) + { + $fieldMetadata = new Mapping\FieldMetadata('id'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setColumnName('user_id'); + $fieldMetadata->setPrimaryKey(true); + + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('name'); + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setLength(250); + $fieldMetadata->setColumnName('user_name'); + $fieldMetadata->setNullable(true); + $fieldMetadata->setUnique(false); + + $metadata->addProperty($fieldMetadata); + + $joinColumns = []; + + $joinColumn = new Mapping\JoinColumnMetadata(); + + $joinColumn->setColumnName('address_id'); + $joinColumn->setReferencedColumnName('id'); + + $joinColumns[] = $joinColumn; + + $association = new Mapping\ManyToOneAssociationMetadata('address'); + + $association->setJoinColumns($joinColumns); + $association->setTargetEntity('DDC964Address'); + $association->setCascade(['persist']); + + $metadata->addProperty($association); + + $joinTable = new Mapping\JoinTableMetadata(); + $joinTable->setName('ddc964_users_groups'); + + $joinColumn = new Mapping\JoinColumnMetadata(); + + $joinColumn->setColumnName('user_id'); + $joinColumn->setReferencedColumnName('id'); + + $joinTable->addJoinColumn($joinColumn); + + $joinColumn = new Mapping\JoinColumnMetadata(); + + $joinColumn->setColumnName('group_id'); + $joinColumn->setReferencedColumnName('id'); + + $joinTable->addInverseJoinColumn($joinColumn); + + $association = new Mapping\ManyToManyAssociationMetadata('groups'); + + $association->setJoinTable($joinTable); + $association->setTargetEntity('DDC964Group'); + $association->setInversedBy('users'); + $association->setCascade(['persist']); + + $metadata->addProperty($association); + + $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); + } } diff --git a/tests/Doctrine/Tests/Models/Legacy/LegacyUser.php b/tests/Doctrine/Tests/Models/Legacy/LegacyUser.php index 8f91b3dfe5f..e7fb75756d9 100644 --- a/tests/Doctrine/Tests/Models/Legacy/LegacyUser.php +++ b/tests/Doctrine/Tests/Models/Legacy/LegacyUser.php @@ -41,7 +41,7 @@ class LegacyUser public $references; /** - * @ORM\ManyToMany(targetEntity="LegacyCar", inversedBy="users", cascade={"persist", "merge"}) + * @ORM\ManyToMany(targetEntity="LegacyCar", inversedBy="users", cascade={"persist"}) * @ORM\JoinTable(name="legacy_users_cars", * joinColumns={@ORM\JoinColumn(name="iUserId", referencedColumnName="iUserId")}, * inverseJoinColumns={@ORM\JoinColumn(name="iCarId", referencedColumnName="iCarId")} diff --git a/tests/Doctrine/Tests/Models/VersionedManyToOne/Article.php b/tests/Doctrine/Tests/Models/VersionedManyToOne/Article.php index a570a903810..8f468c31c9d 100644 --- a/tests/Doctrine/Tests/Models/VersionedManyToOne/Article.php +++ b/tests/Doctrine/Tests/Models/VersionedManyToOne/Article.php @@ -25,7 +25,7 @@ class Article public $name; /** - * @ORM\ManyToOne(targetEntity="Category", cascade={"merge", "persist"}) + * @ORM\ManyToOne(targetEntity="Category", cascade={"persist"}) */ public $category; diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index f9e4979aa38..814b9188e82 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -70,18 +70,13 @@ public function createClassMetadata($entityClassName) return $class; } - /** - * @param \Doctrine\ORM\EntityManagerInterface $entityClassName - * @return \Doctrine\ORM\Mapping\ClassMetadataFactory - */ - protected function createClassMetadataFactory(EntityManagerInterface $em = null) + protected function createClassMetadataFactory(EntityManagerInterface $em = null) : ClassMetadataFactory { $driver = $this->loadDriver(); $em = $em ?: $this->getTestEntityManager(); $factory = new ClassMetadataFactory(); $em->getConfiguration()->setMetadataDriverImpl($driver); - $factory->setEntityManager($em); return $factory; @@ -418,7 +413,7 @@ public function testManyToManyAssociationWithCascadeAll($class) self::assertTrue($association->isOwningSide()); // Make sure that cascade-all works as expected - self::assertEquals(['remove', 'persist', 'refresh', 'merge', 'detach'], $association->getCascade()); + self::assertEquals(['remove', 'persist', 'refresh'], $association->getCascade()); // Test Order By self::assertEquals([], $association->getOrderBy()); @@ -1280,6 +1275,162 @@ public function doStuffOnPostPersist() { } + + public static function loadMetadata(ClassMetadata $metadata) + { + $tableMetadata = new Mapping\TableMetadata(); + + $tableMetadata->setName('cms_users'); + $tableMetadata->addIndex( + [ + 'name' => 'name_idx', + 'columns' => ['name'], + 'unique' => false, + 'options' => [], + 'flags' => [], + ] + ); + + $tableMetadata->addIndex( + [ + 'name' => null, + 'columns' => ['user_email'], + 'unique' => false, + 'options' => [], + 'flags' => [], + ] + ); + + $tableMetadata->addUniqueConstraint( + [ + 'name' => 'search_idx', + 'columns' => ['name', 'user_email'], + 'options' => [], + 'flags' => [], + ] + ); + $tableMetadata->addOption('foo', 'bar'); + $tableMetadata->addOption('baz', ['key' => 'val']); + + $metadata->setTable($tableMetadata); + $metadata->setInheritanceType(Mapping\InheritanceType::NONE); + $metadata->setChangeTrackingPolicy(Mapping\ChangeTrackingPolicy::DEFERRED_IMPLICIT); + + $metadata->addLifecycleCallback('doStuffOnPrePersist', 'prePersist'); + $metadata->addLifecycleCallback('doOtherStuffOnPrePersistToo', 'prePersist'); + $metadata->addLifecycleCallback('doStuffOnPostPersist', 'postPersist'); + + $metadata->setGeneratorDefinition( + [ + 'sequenceName' => 'tablename_seq', + 'allocationSize' => 100, + ] + ); + + $metadata->addNamedQuery( + [ + 'name' => 'all', + 'query' => 'SELECT u FROM __CLASS__ u' + ] + ); + + $fieldMetadata = new Mapping\FieldMetadata('id'); + $fieldMetadata->setType(Type::getType('integer')); + $fieldMetadata->setPrimaryKey(true); + $fieldMetadata->setOptions(['foo' => 'bar', 'unsigned' => false]); + + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('name'); + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setLength(50); + $fieldMetadata->setNullable(true); + $fieldMetadata->setUnique(true); + $fieldMetadata->setOptions( + [ + 'foo' => 'bar', + 'baz' => [ + 'key' => 'val', + ], + 'fixed' => false, + ] + ); + + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\FieldMetadata('email'); + + $fieldMetadata->setType(Type::getType('string')); + $fieldMetadata->setColumnName('user_email'); + $fieldMetadata->setColumnDefinition('CHAR(32) NOT NULL'); + + $metadata->addProperty($fieldMetadata); + + $fieldMetadata = new Mapping\VersionFieldMetadata('version'); + + $fieldMetadata->setType(Type::getType('integer')); + + $metadata->addProperty($fieldMetadata); + $metadata->setIdGeneratorType(Mapping\GeneratorType::AUTO); + + $joinColumns = []; + + $joinColumn = new Mapping\JoinColumnMetadata(); + + $joinColumn->setColumnName('address_id'); + $joinColumn->setReferencedColumnName('id'); + $joinColumn->setOnDelete('CASCADE'); + + $joinColumns[] = $joinColumn; + + $association = new Mapping\OneToOneAssociationMetadata('address'); + + $association->setJoinColumns($joinColumns); + $association->setTargetEntity(Address::class); + $association->setInversedBy('user'); + $association->setCascade(['remove']); + $association->setOrphanRemoval(false); + + $metadata->addProperty($association); + + $association = new Mapping\OneToManyAssociationMetadata('phonenumbers'); + + $association->setTargetEntity(Phonenumber::class); + $association->setMappedBy('user'); + $association->setCascade(['persist']); + $association->setOrderBy(['number' => 'ASC']); + $association->setOrphanRemoval(true); + + $metadata->addProperty($association); + + $joinTable = new Mapping\JoinTableMetadata(); + $joinTable->setName('cms_users_groups'); + + $joinColumn = new Mapping\JoinColumnMetadata(); + + $joinColumn->setColumnName('user_id'); + $joinColumn->setReferencedColumnName('id'); + $joinColumn->setNullable(false); + $joinColumn->setUnique(false); + + $joinTable->addJoinColumn($joinColumn); + + $joinColumn = new Mapping\JoinColumnMetadata(); + + $joinColumn->setColumnName('group_id'); + $joinColumn->setReferencedColumnName('id'); + $joinColumn->setColumnDefinition('INT NULL'); + + $joinTable->addInverseJoinColumn($joinColumn); + + $association = new Mapping\ManyToManyAssociationMetadata('groups'); + + $association->setJoinTable($joinTable); + $association->setTargetEntity(Group::class); + $association->setCascade(['remove', 'persist', 'refresh']); + + $metadata->addProperty($association); + } } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 0bfed7daa1e..32b62e8a53f 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -1279,7 +1279,7 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategyProperty /** * @group DDC-1746 * @expectedException \Doctrine\ORM\Mapping\MappingException - * @expectedExceptionMessage You have specified invalid cascade options for Doctrine\Tests\Models\CMS\CmsUser::$address: 'invalid'; available options: 'remove', 'persist', 'refresh', 'merge', and 'detach' + * @expectedExceptionMessage You have specified invalid cascade options for Doctrine\Tests\Models\CMS\CmsUser::$address: 'invalid'; available options: 'remove', 'persist' and 'refresh' */ public function testInvalidCascade() { diff --git a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.CMS.CmsUser.dcm.xml b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.CMS.CmsUser.dcm.xml index 122a45e6fe9..44396e85a17 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.CMS.CmsUser.dcm.xml +++ b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.CMS.CmsUser.dcm.xml @@ -108,21 +108,14 @@ - - - - - - - + + - - diff --git a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.DDC964.DDC964User.dcm.xml b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.DDC964.DDC964User.dcm.xml index 68db74b48e5..3a8042f0b8e 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.DDC964.DDC964User.dcm.xml +++ b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.DDC964.DDC964User.dcm.xml @@ -14,7 +14,6 @@ - @@ -22,8 +21,6 @@ - - diff --git a/tests/Doctrine/Tests/ORM/Performance/DDC2602Test.php b/tests/Doctrine/Tests/ORM/Performance/DDC2602Test.php index 96418761253..bdf4aafa908 100644 --- a/tests/Doctrine/Tests/ORM/Performance/DDC2602Test.php +++ b/tests/Doctrine/Tests/ORM/Performance/DDC2602Test.php @@ -192,7 +192,7 @@ class DDC2602User * @ORM\OneToOne( * targetEntity="DDC2602Biography", * inversedBy="user", - * cascade={"persist", "merge", "refresh", "remove"} + * cascade={"persist", "refresh", "remove"} * ) * @ORM\JoinColumn(nullable=false) * @@ -218,7 +218,7 @@ class DDC2602Biography * @ORM\OneToOne( * targetEntity="DDC2602User", * mappedBy="biography", - * cascade={"persist", "merge", "refresh"} + * cascade={"persist", "refresh"} * ) * * @var DDC2602User @@ -265,7 +265,7 @@ class DDC2602BiographyField * @ORM\OneToMany( * targetEntity="DDC2602BiographyFieldChoice", * mappedBy="field", - * cascade={"persist", "merge", "refresh"} + * cascade={"persist", "refresh"} * ) * * @var \Doctrine\Common\Collections\ArrayCollection diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index e712d226fc6..516aa6693d9 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -245,8 +245,6 @@ public function testOneToOneAssociationsAreExported($class) self::assertContains('remove', $property->getCascade()); self::assertContains('persist', $property->getCascade()); self::assertNotContains('refresh', $property->getCascade()); - self::assertNotContains('merge', $property->getCascade()); - self::assertNotContains('detach', $property->getCascade()); self::assertTrue($property->isOrphanRemoval()); self::assertEquals(FetchMode::EAGER, $property->getFetchMode()); @@ -283,8 +281,6 @@ public function testOneToManyAssociationsAreExported($class) self::assertContains('remove', $property->getCascade()); self::assertContains('persist', $property->getCascade()); self::assertNotContains('refresh', $property->getCascade()); - self::assertContains('merge', $property->getCascade()); - self::assertNotContains('detach', $property->getCascade()); self::assertTrue($property->isOrphanRemoval()); self::assertEquals(FetchMode::LAZY, $property->getFetchMode()); @@ -321,8 +317,6 @@ public function testManyToManyAssociationsAreExported($class) self::assertContains('remove', $property->getCascade()); self::assertContains('persist', $property->getCascade()); self::assertContains('refresh', $property->getCascade()); - self::assertContains('merge', $property->getCascade()); - self::assertContains('detach', $property->getCascade()); self::assertEquals(FetchMode::EXTRA_LAZY, $property->getFetchMode()); @@ -358,10 +352,8 @@ public function testCascadeIsExported($class) self::assertNotNull($property); self::assertContains('persist', $property->getCascade()); - self::assertContains('merge', $property->getCascade()); self::assertContains('remove', $property->getCascade()); self::assertNotContains('refresh', $property->getCascade()); - self::assertNotContains('detach', $property->getCascade()); self::assertTrue($property->isOrphanRemoval()); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/annotation/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/annotation/Doctrine.Tests.ORM.Tools.Export.User.php index 67c9db10e6a..6ca851bd642 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/annotation/Doctrine.Tests.ORM.Tools.Export.User.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/annotation/Doctrine.Tests.ORM.Tools.Export.User.php @@ -44,7 +44,7 @@ class User /** * - * @ORM\OneToMany(targetEntity="Doctrine\Tests\ORM\Tools\Export\Phonenumber", mappedBy="user", cascade={"persist", "merge"}, orphanRemoval=true) + * @ORM\OneToMany(targetEntity="Doctrine\Tests\ORM\Tools\Export\Phonenumber", mappedBy="user", cascade={"persist"}, orphanRemoval=true) * @ORM\OrderBy({"number"="ASC"}) */ public $phonenumbers; diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php index 07e4a18f718..66e103e7021 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php @@ -101,7 +101,7 @@ $association->setTargetEntity(Export\Phonenumber::class); $association->setMappedBy('user'); -$association->setCascade(['persist', 'merge']); +$association->setCascade(['persist']); $association->setFetchMode(Mapping\FetchMode::LAZY); $association->setOrphanRemoval(true); $association->setOrderBy(['number' => 'ASC']); @@ -131,7 +131,7 @@ $association->setJoinTable($joinTable); $association->setTargetEntity(Export\Group::class); -$association->setCascade(['remove', 'persist', 'refresh', 'merge', 'detach']); +$association->setCascade(['remove', 'persist', 'refresh']); $association->setFetchMode(Mapping\FetchMode::EXTRA_LAZY); $metadata->addProperty($association); diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/xml/Doctrine.Tests.ORM.Tools.Export.User.dcm.xml b/tests/Doctrine/Tests/ORM/Tools/Export/xml/Doctrine.Tests.ORM.Tools.Export.User.dcm.xml index d541888c2a3..6d9c0a76306 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/xml/Doctrine.Tests.ORM.Tools.Export.User.dcm.xml +++ b/tests/Doctrine/Tests/ORM/Tools/Export/xml/Doctrine.Tests.ORM.Tools.Export.User.dcm.xml @@ -46,7 +46,6 @@ - @@ -57,8 +56,6 @@ - - From f84660bb14049c2ddbc3cbaf8cc00aa955316597 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sat, 24 Jun 2017 12:05:03 +0200 Subject: [PATCH 259/275] Corrected `XmlExporter` order of exported cascades --- lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php | 2 +- tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php | 2 +- .../Tools/Export/AbstractClassMetadataExporterTest.php | 8 +++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php index 13b11602e7d..d4beaf5dac6 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php @@ -429,7 +429,7 @@ private function exportCascade(\SimpleXMLElement $associationXml, array $associa { $cascades = []; - foreach (['remove', 'persist', 'refresh'] as $type) { + foreach (['persist', 'remove', 'refresh'] as $type) { if (in_array($type, $associationCascades)) { $cascades[] = 'cascade-' . $type; } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 32b62e8a53f..39f02d0132e 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -1279,7 +1279,7 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategyProperty /** * @group DDC-1746 * @expectedException \Doctrine\ORM\Mapping\MappingException - * @expectedExceptionMessage You have specified invalid cascade options for Doctrine\Tests\Models\CMS\CmsUser::$address: 'invalid'; available options: 'remove', 'persist' and 'refresh' + * @expectedExceptionMessage You have specified invalid cascade options for Doctrine\Tests\Models\CMS\CmsUser::$address: 'invalid'; available options: 'remove', 'persist', and 'refresh' */ public function testInvalidCascade() { diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php index 516aa6693d9..f4a7e7d072a 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php @@ -379,14 +379,16 @@ public function testCascadeAllCollapsed() { $type = $this->getType(); - if ($type == 'xml') { + if ($type === 'xml') { $xml = simplexml_load_file(__DIR__ . '/export/'.$type.'/Doctrine.Tests.ORM.Tools.Export.ExportedUser.dcm.xml'); $xml->registerXPathNamespace("d", "http://doctrine-project.org/schemas/orm/doctrine-mapping"); $nodes = $xml->xpath("/d:doctrine-mapping/d:entity/d:one-to-many[@field='interests']/d:cascade/d:*"); - self::assertEquals(1, count($nodes)); + self::assertCount(3, $nodes); - self::assertEquals('cascade-all', $nodes[0]->getName()); + self::assertEquals('cascade-persist', $nodes[0]->getName()); + self::assertEquals('cascade-remove', $nodes[1]->getName()); + self::assertEquals('cascade-refresh', $nodes[2]->getName()); } else { $this->markTestSkipped('Test not available for '.$type.' driver'); } From b55468c5f614cf220958ee1ded625d0516ff7cf0 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sun, 25 Jun 2017 05:04:22 +0200 Subject: [PATCH 260/275] #1577 re-enabling `clear($entityName)` tests --- tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php | 2 -- tests/Doctrine/Tests/ORM/Functional/ReadOnlyTest.php | 2 -- 2 files changed, 4 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php index e6b79cd36b6..0f7f28a232f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/BasicFunctionalTest.php @@ -878,8 +878,6 @@ public function testManyToOneFetchModeQuery() */ public function testClear() { - // @TODO the semantics around `EntityManager#clear()` need to be improved - $this->markTestIncomplete('Feature has been disabled, and will be re-enabled later on'); $user = new CmsUser; $user->name = 'Dominik'; $user->username = 'domnikl'; diff --git a/tests/Doctrine/Tests/ORM/Functional/ReadOnlyTest.php b/tests/Doctrine/Tests/ORM/Functional/ReadOnlyTest.php index 8da64758c65..80440290019 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ReadOnlyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ReadOnlyTest.php @@ -65,8 +65,6 @@ public function testClearReadOnly() */ public function testClearEntitiesReadOnly() { - // @TODO the semantics around `EntityManager#clear()` need to be improved - $this->markTestIncomplete('Feature has been disabled, and will be re-enabled later on'); $readOnly = new ReadOnlyEntity("Test1", 1234); $this->em->persist($readOnly); $this->em->flush(); From 4d54fac91d6c5bfbaffcb1820a7677180dc8e2ab Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Mon, 28 Aug 2017 17:30:55 +0200 Subject: [PATCH 261/275] #1577 removing references to `detach` and `merge` cascade operations in newer metadata driver implementations --- .../Driver/Annotation/AnnotationDriver.php | 2 +- .../ORM/Mapping/Driver/AnnotationDriver.php | 2 +- .../Exporter/AssociationMetadataExporter.php | 23 +++++-------------- 3 files changed, 8 insertions(+), 19 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/Driver/Annotation/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/Annotation/AnnotationDriver.php index ae57cc6a87e..d2aaee7c858 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/Annotation/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/Annotation/AnnotationDriver.php @@ -1434,7 +1434,7 @@ private function attachAssociationPropertyCache( */ private function getCascade(string $className, string $fieldName, array $originalCascades) : array { - $cascadeTypes = ['remove', 'persist', 'refresh', 'merge', 'detach']; + $cascadeTypes = ['remove', 'persist', 'refresh']; $cascades = array_map('strtolower', $originalCascades); if (in_array('all', $cascades)) { diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index f3becf25db4..2c47e4de614 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -1422,7 +1422,7 @@ private function attachAssociationPropertyCache( */ private function getCascade(string $className, string $fieldName, array $originalCascades) { - $cascadeTypes = ['remove', 'persist', 'refresh', 'merge', 'detach']; + $cascadeTypes = ['remove', 'persist', 'refresh']; $cascades = array_map('strtolower', $originalCascades); if (in_array('all', $cascades)) { diff --git a/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php b/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php index 30462d10317..1915bfc904d 100644 --- a/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php +++ b/lib/Doctrine/ORM/Mapping/Exporter/AssociationMetadataExporter.php @@ -53,26 +53,15 @@ public function export($value, int $indentationLevel = 0): string } /** - * @param array $cascade + * @param string[] $cascade * - * @return array + * @return string[] */ - private function resolveCascade(array $cascade) + private function resolveCascade(array $cascade) : array { - $resolvedCascade = ['remove', 'persist', 'refresh']; - - foreach ($resolvedCascade as $key => $value) { - if (in_array($value, $cascade, true)) { - continue; - } - - unset($resolvedCascade[$key]); - } - - return count($resolvedCascade) === 5 - ? ['all'] - : $resolvedCascade - ; + return array_diff(['remove', 'persist', 'refresh'], $cascade) + ? $cascade + : ['all']; } /** From e0e6cf48f573eb653fa6d60cf5dc895b932adf7f Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Mon, 28 Aug 2017 17:35:11 +0200 Subject: [PATCH 262/275] #1577 removed `detach` reference from the docs, as per @lcobucci's review Ref: https://github.com/doctrine/doctrine2/pull/1577#discussion_r124127083 --- docs/en/reference/working-with-objects.rst | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/en/reference/working-with-objects.rst b/docs/en/reference/working-with-objects.rst index e7ea3e2f2f3..a2194391159 100644 --- a/docs/en/reference/working-with-objects.rst +++ b/docs/en/reference/working-with-objects.rst @@ -361,9 +361,6 @@ automatically: that are serialized and stored in some cache, i.e. when using the Query Result Cache). -The ``detach`` operation is usually not as frequently needed and -used as ``persist`` and ``remove``. - Synchronization with the Database --------------------------------- From 37797a03aa4f46c15d9fb04bfbcaae4ce8e344bc Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Mon, 28 Aug 2017 17:36:33 +0200 Subject: [PATCH 263/275] #1577 rephrasing reference to `detach` that is now `clear()` instead Ref: https://github.com/doctrine/doctrine2/pull/1577#discussion_r124126422 - @lcobucci's review --- docs/en/reference/working-with-objects.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/reference/working-with-objects.rst b/docs/en/reference/working-with-objects.rst index a2194391159..7d2d385bcea 100644 --- a/docs/en/reference/working-with-objects.rst +++ b/docs/en/reference/working-with-objects.rst @@ -344,7 +344,7 @@ Example: The semantics of the detach operation, applied to an entity X are as follows: -- If X is a managed entity, the detach operation causes it to +- If X is a managed entity, the ``clear`` operation causes it to become detached. Entities which previously referenced X will continue to reference X. - If X is a new or detached entity, it is ignored by the detach From ffa44c80921afdfc34ea5f2fff57777b8e4fcfa1 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Mon, 28 Aug 2017 17:38:50 +0200 Subject: [PATCH 264/275] #1577 clarifying session user fetching as per @Majkl578's review Ref: https://github.com/doctrine/doctrine2/pull/1577#discussion_r124162444 --- docs/en/cookbook/entities-in-session.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/en/cookbook/entities-in-session.rst b/docs/en/cookbook/entities-in-session.rst index 47715d3c305..91ef8322185 100644 --- a/docs/en/cookbook/entities-in-session.rst +++ b/docs/en/cookbook/entities-in-session.rst @@ -33,6 +33,11 @@ the session into a managed Doctrine object looks like this: session_start(); if (isset($_SESSION['user'])) { $user = $em->find(User::class, $_SESSION['user']); + + if (! $user instanceof User) { + // user not found in the database + $_SESSION['user'] = null; + } } Serializing entities into the session From cd5413b64d96ca3679a6f191a27a1ead8a8e33ef Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Mon, 28 Aug 2017 13:15:09 +0200 Subject: [PATCH 265/275] Adding `ocramius/package-versions` as a replacement for the internal ORM `Version` class --- composer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/composer.json b/composer.json index ba881df2d3c..7a5d02f7142 100644 --- a/composer.json +++ b/composer.json @@ -22,6 +22,7 @@ "doctrine/common": "^2.7.1", "doctrine/cache": "~1.6", "doctrine/annotations": "~1.4", + "ocramius/package-versions": "^1.1.2", "symfony/console": "~3.0|~4.0" }, "require-dev": { From 73e815a1b401fa12c2aa15235c1e678c0621de3a Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Mon, 28 Aug 2017 13:21:14 +0200 Subject: [PATCH 266/275] Dropping references to the ORM `Version` class - using `PackageVersions` instead --- .../ORM/Tools/Console/ConsoleRunner.php | 5 ++- lib/Doctrine/ORM/Version.php | 41 ------------------- .../ORM/Tools/Console/ConsoleRunnerTest.php | 4 +- tests/Doctrine/Tests/ORM/Tools/SetupTest.php | 13 ++---- 4 files changed, 8 insertions(+), 55 deletions(-) delete mode 100644 lib/Doctrine/ORM/Version.php diff --git a/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php b/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php index 6d6769f3d47..2023102b609 100644 --- a/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php +++ b/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php @@ -7,7 +7,7 @@ use Doctrine\DBAL\Tools\Console as DBALConsole; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper; -use Doctrine\ORM\Version; +use PackageVersions\Versions; use Symfony\Component\Console\Application; use Symfony\Component\Console\Helper\HelperSet; @@ -55,10 +55,11 @@ public static function run(HelperSet $helperSet, array $commands = []) : void * @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); diff --git a/lib/Doctrine/ORM/Version.php b/lib/Doctrine/ORM/Version.php deleted file mode 100644 index b39a1b18868..00000000000 --- a/lib/Doctrine/ORM/Version.php +++ /dev/null @@ -1,41 +0,0 @@ - - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - */ -class Version -{ - /** - * Current Doctrine Version - */ - const VERSION = '3.0.0-DEV'; - - /** - * Compares a Doctrine version with the current one. - * - * @param string $version Doctrine version to compare. - * - * @return int Returns -1 if older, 0 if it is the same, 1 if version - * passed as argument is newer. - */ - public static function compare($version) - { - $currentVersion = str_replace(' ', '', strtolower(self::VERSION)); - $version = str_replace(' ', '', $version); - - return version_compare($version, $currentVersion); - } -} diff --git a/tests/Doctrine/Tests/ORM/Tools/Console/ConsoleRunnerTest.php b/tests/Doctrine/Tests/ORM/Tools/Console/ConsoleRunnerTest.php index 8651b3c086d..1e939ec4c75 100644 --- a/tests/Doctrine/Tests/ORM/Tools/Console/ConsoleRunnerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/Console/ConsoleRunnerTest.php @@ -5,8 +5,8 @@ namespace Doctrine\Tests\ORM\Tools\Console; use Doctrine\ORM\Tools\Console\ConsoleRunner; -use Doctrine\ORM\Version; use Doctrine\Tests\DoctrineTestCase; +use PackageVersions\Versions; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Helper\HelperSet; @@ -23,7 +23,7 @@ public function testCreateApplicationShouldReturnAnApplicationWithTheCorrectComm $app = ConsoleRunner::createApplication($helperSet); self::assertSame($helperSet, $app->getHelperSet()); - self::assertEquals(Version::VERSION, $app->getVersion()); + self::assertEquals(Versions::getVersion('doctrine/orm'), $app->getVersion()); self::assertTrue($app->has('dbal:import')); self::assertTrue($app->has('dbal:reserved-words')); diff --git a/tests/Doctrine/Tests/ORM/Tools/SetupTest.php b/tests/Doctrine/Tests/ORM/Tools/SetupTest.php index d0ba1fbacdd..2955afb0fbf 100644 --- a/tests/Doctrine/Tests/ORM/Tools/SetupTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/SetupTest.php @@ -9,9 +9,7 @@ use Doctrine\ORM\Configuration; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; use Doctrine\ORM\Mapping\Driver\XmlDriver; -use Doctrine\ORM\Mapping\Driver\YamlDriver; use Doctrine\ORM\Tools\Setup; -use Doctrine\ORM\Version; use Doctrine\Tests\OrmTestCase; class SetupTest extends OrmTestCase @@ -21,10 +19,6 @@ class SetupTest extends OrmTestCase public function setUp() { - if (strpos(Version::VERSION, "DEV") === false) { - $this->markTestSkipped("Test only runs in a dev-installation from Github"); - } - $this->originalAutoloaderCount = count(spl_autoload_functions()); $this->originalIncludePath = get_include_path(); } @@ -37,10 +31,9 @@ public function tearDown() set_include_path($this->originalIncludePath); $loaders = spl_autoload_functions(); - $numberOfLoaders = count($loaders); - for ($i = 0; $i < $numberOfLoaders; $i++) { - if ($i > $this->originalAutoloaderCount+1) { - spl_autoload_unregister($loaders[$i]); + foreach (spl_autoload_functions() as $i => $loader) { + if ($i > $this->originalAutoloaderCount + 1) { + spl_autoload_unregister($loader); } } } From c286a5345c5f9c17aeaf43f9727843a2b28ea0eb Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Mon, 28 Aug 2017 13:36:25 +0200 Subject: [PATCH 267/275] Removing build references to the `Version` class, which is finally gone-gone-gone --- build.properties | 3 --- build.xml | 23 ----------------------- 2 files changed, 26 deletions(-) diff --git a/build.properties b/build.properties index 4b4c921a556..e69de29bb2d 100644 --- a/build.properties +++ b/build.properties @@ -1,3 +0,0 @@ -# Version class and file -project.version_class = Doctrine\\ORM\\Version -project.version_file = lib/Doctrine/ORM/Version.php diff --git a/build.xml b/build.xml index 26132d19ca9..50cbcaa2649 100644 --- a/build.xml +++ b/build.xml @@ -38,29 +38,6 @@ - - - - - - - - - - - - - - - - - From b330e154c764bc51d5a7a998393f236d3eb0514f Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Mon, 28 Aug 2017 13:40:33 +0200 Subject: [PATCH 268/275] #6653 adding note to `UPGRADE.md` about the removal of `Doctrine\ORM\Version` --- UPGRADE.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/UPGRADE.md b/UPGRADE.md index 7efb096154f..ca618a2a0cf 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -1,5 +1,9 @@ # Upgrade to 3.0 +## BC Break: Removed `Doctrine\ORM\Version` + +The `Doctrine\ORM\Version` class is no longer available: please refrain from checking the ORM version at runtime. + ## BC Break: Removed `EntityManager#merge()` and `EntityManager#detach()` methods Merge and detach semantics were a poor fit for the PHP "share-nothing" architecture. From 7a094c886be4aac649b03fde2405929f7b6315b4 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Mon, 28 Aug 2017 17:42:34 +0200 Subject: [PATCH 269/275] #6653 removing unused variable as per @alcaeus' review Ref: https://github.com/doctrine/doctrine2/pull/6653#discussion_r135503849 --- tests/Doctrine/Tests/ORM/Tools/SetupTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Doctrine/Tests/ORM/Tools/SetupTest.php b/tests/Doctrine/Tests/ORM/Tools/SetupTest.php index 2955afb0fbf..25e32059a1a 100644 --- a/tests/Doctrine/Tests/ORM/Tools/SetupTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/SetupTest.php @@ -30,7 +30,7 @@ public function tearDown() } set_include_path($this->originalIncludePath); - $loaders = spl_autoload_functions(); + foreach (spl_autoload_functions() as $i => $loader) { if ($i > $this->originalAutoloaderCount + 1) { spl_autoload_unregister($loader); From dba197a5ecac0ac1f32910ddfe4c32085f218718 Mon Sep 17 00:00:00 2001 From: Michael Moravec Date: Fri, 1 Sep 2017 22:25:41 +0200 Subject: [PATCH 270/275] Use Generators instead of AppendIterator for properties iteration --- .../ORM/Mapping/ComponentMetadata.php | 25 ++++++++----------- .../ORM/Functional/Ticket/DDC599Test.php | 2 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 22 ++++++++-------- .../ORM/Mapping/AnnotationDriverTest.php | 4 +-- .../Mapping/BasicInheritanceMappingTest.php | 2 +- .../ORM/Mapping/XmlMappingDriverTest.php | 2 +- .../Tools/ResolveTargetEntityListenerTest.php | 2 +- 7 files changed, 27 insertions(+), 32 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php index 833637aa74a..b85ec5fe458 100644 --- a/lib/Doctrine/ORM/Mapping/ComponentMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ComponentMetadata.php @@ -108,11 +108,13 @@ public function getCache(): ?CacheMetadata } /** - * @return \ArrayIterator + * @return iterable */ - public function getDeclaredPropertiesIterator() : \ArrayIterator + public function getDeclaredPropertiesIterator() : iterable { - return new \ArrayIterator($this->declaredProperties); + foreach ($this->declaredProperties as $name => $property) { + yield $name => $property; + } } /** @@ -159,22 +161,15 @@ public function hasDeclaredProperty(string $propertyName) : bool } /** - * @return \Iterator + * @return iterable */ - public function getPropertiesIterator() : \Iterator + public function getPropertiesIterator() : iterable { - $declaredPropertiesIterator = $this->getDeclaredPropertiesIterator(); - - if (! $this->parent) { - return $declaredPropertiesIterator; + if ($this->parent) { + yield from $this->parent->getPropertiesIterator(); } - $iterator = new \AppendIterator(); - - $iterator->append($this->parent->getPropertiesIterator()); - $iterator->append($declaredPropertiesIterator); - - return $iterator; + yield from $this->getDeclaredPropertiesIterator(); } /** diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php index 3dd84629a2c..260ac5b2d0a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC599Test.php @@ -68,7 +68,7 @@ public function testCascadeRemoveOnChildren() { $class = $this->em->getClassMetadata(DDC599Subitem::class); - self::assertArrayHasKey('children', $class->getDeclaredPropertiesIterator()); + self::assertArrayHasKey('children', iterator_to_array($class->getDeclaredPropertiesIterator())); self::assertContains('remove', $class->getProperty('children')->getCascade()); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 814b9188e82..498f0545a62 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -366,7 +366,7 @@ public function testBooleanValuesForOptionIsSetCorrectly() */ public function testOwningOneToOneAssociation($class) { - self::assertArrayHasKey('address', $class->getDeclaredPropertiesIterator()); + self::assertArrayHasKey('address', iterator_to_array($class->getDeclaredPropertiesIterator())); $association = $class->getProperty('address'); @@ -384,7 +384,7 @@ public function testOwningOneToOneAssociation($class) */ public function testInverseOneToManyAssociation($class) { - self::assertArrayHasKey('phonenumbers', $class->getDeclaredPropertiesIterator()); + self::assertArrayHasKey('phonenumbers', iterator_to_array($class->getDeclaredPropertiesIterator())); $association = $class->getProperty('phonenumbers'); @@ -406,7 +406,7 @@ public function testInverseOneToManyAssociation($class) */ public function testManyToManyAssociationWithCascadeAll($class) { - self::assertArrayHasKey('groups', $class->getDeclaredPropertiesIterator()); + self::assertArrayHasKey('groups', iterator_to_array($class->getDeclaredPropertiesIterator())); $association = $class->getProperty('groups'); @@ -806,8 +806,8 @@ public function testAssociationOverridesMapping() $guestMetadata = $factory->getMetadataFor(DDC964Guest::class); // assert groups association mappings - self::assertArrayHasKey('groups', $guestMetadata->getDeclaredPropertiesIterator()); - self::assertArrayHasKey('groups', $adminMetadata->getDeclaredPropertiesIterator()); + self::assertArrayHasKey('groups', iterator_to_array($guestMetadata->getDeclaredPropertiesIterator())); + self::assertArrayHasKey('groups', iterator_to_array($adminMetadata->getDeclaredPropertiesIterator())); $guestGroups = $guestMetadata->getProperty('groups'); $adminGroups = $adminMetadata->getProperty('groups'); @@ -843,8 +843,8 @@ public function testAssociationOverridesMapping() self::assertEquals('admingroup_id', $adminGroupsInverseJoinColumn->getColumnName()); // assert address association mappings - self::assertArrayHasKey('address', $guestMetadata->getDeclaredPropertiesIterator()); - self::assertArrayHasKey('address', $adminMetadata->getDeclaredPropertiesIterator()); + self::assertArrayHasKey('address', iterator_to_array($guestMetadata->getDeclaredPropertiesIterator())); + self::assertArrayHasKey('address', iterator_to_array($adminMetadata->getDeclaredPropertiesIterator())); $guestAddress = $guestMetadata->getProperty('address'); $adminAddress = $adminMetadata->getProperty('address'); @@ -879,7 +879,7 @@ public function testInversedByOverrideMapping() $adminMetadata = $factory->getMetadataFor(DDC3579Admin::class); // assert groups association mappings - self::assertArrayHasKey('groups', $adminMetadata->getDeclaredPropertiesIterator()); + self::assertArrayHasKey('groups', iterator_to_array($adminMetadata->getDeclaredPropertiesIterator())); $adminGroups = $adminMetadata->getProperty('groups'); @@ -895,7 +895,7 @@ public function testFetchOverrideMapping() // check override metadata $contractMetadata = $this->createClassMetadataFactory()->getMetadataFor(DDC5934Contract::class); - self::assertArrayHasKey('members', $contractMetadata->getDeclaredPropertiesIterator()); + self::assertArrayHasKey('members', iterator_to_array($contractMetadata->getDeclaredPropertiesIterator())); $contractMembers = $contractMetadata->getProperty('members'); @@ -1095,7 +1095,7 @@ public function testSecondLevelCacheMapping() self::assertEquals(Mapping\CacheUsage::READ_ONLY, $class->getCache()->getUsage()); self::assertEquals('doctrine_tests_models_cache_city', $class->getCache()->getRegion()); - self::assertArrayHasKey('state', $class->getDeclaredPropertiesIterator()); + self::assertArrayHasKey('state', iterator_to_array($class->getDeclaredPropertiesIterator())); $stateAssociation = $class->getProperty('state'); @@ -1103,7 +1103,7 @@ public function testSecondLevelCacheMapping() self::assertEquals(Mapping\CacheUsage::READ_ONLY, $stateAssociation->getCache()->getUsage()); self::assertEquals('doctrine_tests_models_cache_city__state', $stateAssociation->getCache()->getRegion()); - self::assertArrayHasKey('attractions', $class->getDeclaredPropertiesIterator()); + self::assertArrayHasKey('attractions', iterator_to_array($class->getDeclaredPropertiesIterator())); $attractionsAssociation = $class->getProperty('attractions'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php index ad1fba9dcf5..86bed2b9754 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AnnotationDriverTest.php @@ -149,11 +149,11 @@ public function testJoinTablesWithMappedSuperclassForAnnotationDriver() $factory->setEntityManager($em); $classPage = $factory->getMetadataFor(File::class); - self::assertArrayHasKey('parentDirectory', $classPage->getDeclaredPropertiesIterator()); + self::assertArrayHasKey('parentDirectory', iterator_to_array($classPage->getDeclaredPropertiesIterator())); self::assertEquals(File::class, $classPage->getProperty('parentDirectory')->getSourceEntity()); $classDirectory = $factory->getMetadataFor(Directory::class); - self::assertArrayHasKey('parentDirectory', $classDirectory->getDeclaredPropertiesIterator()); + self::assertArrayHasKey('parentDirectory', iterator_to_array($classDirectory->getDeclaredPropertiesIterator())); self::assertEquals(Directory::class, $classDirectory->getProperty('parentDirectory')->getSourceEntity()); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php index 108147c7d09..da6a2f55aae 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/BasicInheritanceMappingTest.php @@ -70,7 +70,7 @@ public function testGetMetadataForSubclassWithMappedSuperclass() self::assertNotNull($class->getProperty('transient')); self::assertInstanceOf(TransientMetadata::class, $class->getProperty('transient')); - self::assertArrayHasKey('mappedRelated1', $class->getDeclaredPropertiesIterator()); + self::assertArrayHasKey('mappedRelated1', iterator_to_array($class->getDeclaredPropertiesIterator())); } /** diff --git a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php index ce339497d89..1749dea897a 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/XmlMappingDriverTest.php @@ -66,7 +66,7 @@ public function testIdentifierWithAssociationKey() $class = $factory->getMetadataFor(DDC117Translation::class); self::assertEquals(['language', 'article'], $class->identifier); - self::assertArrayHasKey('article', $class->getDeclaredPropertiesIterator()); + self::assertArrayHasKey('article', iterator_to_array($class->getDeclaredPropertiesIterator())); $association = $class->getProperty('article'); diff --git a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php index 7789ae9a1c9..b17207ccd1a 100644 --- a/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/ResolveTargetEntityListenerTest.php @@ -50,7 +50,7 @@ public function testResolveTargetEntityListenerCanResolveTargetEntity() $evm->addEventSubscriber($this->listener); $cm = $this->factory->getMetadataFor(ResolveTargetEntity::class); - $meta = $cm->getDeclaredPropertiesIterator(); + $meta = iterator_to_array($cm->getDeclaredPropertiesIterator()); self::assertSame(TargetEntity::class, $meta['manyToMany']->getTargetEntity()); self::assertSame(ResolveTargetEntity::class, $meta['manyToOne']->getTargetEntity()); From 4490b3b2c29fabc9d6469abe58937e5e4f350807 Mon Sep 17 00:00:00 2001 From: Michael Moravec Date: Fri, 1 Sep 2017 21:19:00 +0200 Subject: [PATCH 271/275] Enable multiple value generators per entity --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 10 ----- lib/Doctrine/ORM/Mapping/MappingException.php | 10 ----- lib/Doctrine/ORM/Tools/SchemaTool.php | 5 ++- .../Models/ValueGenerators/BarGenerator.php | 23 ++++++++++ .../CompositeGeneratedIdentifier.php | 42 +++++++++++++++++++ .../Models/ValueGenerators/FooGenerator.php | 23 ++++++++++ .../ORM/Functional/ValueGeneratorsTest.php | 37 ++++++++++++++++ .../Doctrine/Tests/OrmFunctionalTestCase.php | 7 ++++ 8 files changed, 136 insertions(+), 21 deletions(-) create mode 100644 tests/Doctrine/Tests/Models/ValueGenerators/BarGenerator.php create mode 100644 tests/Doctrine/Tests/Models/ValueGenerators/CompositeGeneratedIdentifier.php create mode 100644 tests/Doctrine/Tests/Models/ValueGenerators/FooGenerator.php create mode 100644 tests/Doctrine/Tests/ORM/Functional/ValueGeneratorsTest.php diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 3e29679057a..79dce1551c6 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -440,16 +440,6 @@ public function validateIdentifier() : void if (! $this->identifier) { throw MappingException::identifierRequired($this->className); } - - $explicitlyGeneratedProperties = array_filter($this->declaredProperties, function (Property $property) : bool { - return $property instanceof FieldMetadata - && $property->isPrimaryKey() - && $property->hasValueGenerator(); - }); - - if ($explicitlyGeneratedProperties && $this->isIdentifierComposite()) { - throw MappingException::compositeKeyAssignedIdGeneratorRequired($this->className); - } } /** diff --git a/lib/Doctrine/ORM/Mapping/MappingException.php b/lib/Doctrine/ORM/Mapping/MappingException.php index 8d623928ebb..9f905f6aa74 100644 --- a/lib/Doctrine/ORM/Mapping/MappingException.php +++ b/lib/Doctrine/ORM/Mapping/MappingException.php @@ -747,16 +747,6 @@ public static function invalidFetchMode($className, $annotation) return new self("Entity '" . $className . "' has a mapping with invalid fetch mode '" . $annotation . "'"); } - /** - * @param string $className - * - * @return MappingException - */ - public static function compositeKeyAssignedIdGeneratorRequired($className) - { - return new self("Entity '". $className . "' has a composite identifier but uses an ID generator other than manually assigning (Identity, Sequence). This is not supported."); - } - /** * @param string $targetEntity * @param string $sourceEntity diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index e82ab8aada3..5e0ad740489 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -486,7 +486,10 @@ private function gatherColumn($classMetadata, FieldMetadata $fieldMetadata, Tabl $options['customSchemaOptions'] = $fieldOptions; } - if ($fieldMetadata->hasValueGenerator() && $fieldMetadata->getValueGenerator()->getType() === GeneratorType::IDENTITY && $classMetadata->getIdentifierFieldNames() == [$fieldName]) { + if ($fieldMetadata->hasValueGenerator() + && $fieldMetadata->getValueGenerator()->getType() === GeneratorType::IDENTITY + && in_array($fieldName, $classMetadata->getIdentifierFieldNames(), true) + ) { $options['autoincrement'] = true; } diff --git a/tests/Doctrine/Tests/Models/ValueGenerators/BarGenerator.php b/tests/Doctrine/Tests/Models/ValueGenerators/BarGenerator.php new file mode 100644 index 00000000000..098472bc5d3 --- /dev/null +++ b/tests/Doctrine/Tests/Models/ValueGenerators/BarGenerator.php @@ -0,0 +1,23 @@ +a; + } + + public function getB() : ?string + { + return $this->b; + } +} diff --git a/tests/Doctrine/Tests/Models/ValueGenerators/FooGenerator.php b/tests/Doctrine/Tests/Models/ValueGenerators/FooGenerator.php new file mode 100644 index 00000000000..a75409293ad --- /dev/null +++ b/tests/Doctrine/Tests/Models/ValueGenerators/FooGenerator.php @@ -0,0 +1,23 @@ +useModelSet('valueGenerators'); + parent::setUp(); + } + + public function testCompositeIdentifierWithMultipleGenerators() : void + { + $entity = new CompositeGeneratedIdentifier(); + $this->em->persist($entity); + $this->em->flush(); + + self::assertSame(FooGenerator::VALUE, $entity->getA()); + self::assertSame(BarGenerator::VALUE, $entity->getB()); + + $this->em->clear(); + + $entity = $this->getEntityManager()->find( + CompositeGeneratedIdentifier::class, + ['a' => FooGenerator::VALUE, 'b' => BarGenerator::VALUE] + ); + self::assertNotNull($entity); + } +} diff --git a/tests/Doctrine/Tests/OrmFunctionalTestCase.php b/tests/Doctrine/Tests/OrmFunctionalTestCase.php index b19dff3ee3e..7114e8187cb 100644 --- a/tests/Doctrine/Tests/OrmFunctionalTestCase.php +++ b/tests/Doctrine/Tests/OrmFunctionalTestCase.php @@ -315,6 +315,9 @@ abstract class OrmFunctionalTestCase extends OrmTestCase Models\Issue5989\Issue5989Employee::class, Models\Issue5989\Issue5989Manager::class, ], + 'valueGenerators' => [ + Models\ValueGenerators\CompositeGeneratedIdentifier::class, + ], ]; /** @@ -600,6 +603,10 @@ protected function tearDown() $conn->executeUpdate('DELETE FROM issue5989_managers'); } + if (isset($this->usedModelSets['value_generators'])) { + $conn->executeUpdate('DELETE FROM vg_composite_generated_identifier'); + } + $this->em->clear(); } From 3b441a42e98c0e8cf4ad44582f69fab9b7ea64d7 Mon Sep 17 00:00:00 2001 From: Michael Moravec Date: Fri, 1 Sep 2017 22:39:29 +0200 Subject: [PATCH 272/275] Forbid composite or non-primary IDENTITY generators on single entity --- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 26 ++++++++++ .../ORM/Mapping/ClassMetadataFactory.php | 1 + lib/Doctrine/ORM/Mapping/MappingException.php | 20 ++++++++ .../DummyWithThreeProperties.php | 19 +++++++ .../Tests/ORM/Mapping/ClassMetadataTest.php | 49 +++++++++++++++++++ 5 files changed, 115 insertions(+) create mode 100644 tests/Doctrine/Tests/Models/ValueGenerators/DummyWithThreeProperties.php diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 79dce1551c6..1393676f84a 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -442,6 +442,32 @@ public function validateIdentifier() : void } } + /** + * Validates field value generators. + */ + public function validateValueGenerators() : void + { + foreach ($this->getPropertiesIterator() as $property) { + if (! $property instanceof FieldMetadata || ! $property->hasValueGenerator()) { + continue; + } + + $generator = $property->getValueGenerator(); + + if ($generator->getType() !== GeneratorType::IDENTITY) { + continue; + } + + if (! $property->isPrimaryKey()) { + throw MappingException::nonPrimaryidentityGeneratorNotSupported($this->className); + } + + if ($this->isIdentifierComposite()) { + throw MappingException::compositeIdentityGeneratorNotSupported($this->className); + } + } + } + /** * Validates association targets actually exist. * diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 50a0ca85ad2..d57b9ceb333 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -239,6 +239,7 @@ protected function validateRuntimeMetadata(ClassMetadata $class, ClassMetadata $ } $class->validateIdentifier(); + $class->validateValueGenerators(); $class->validateAssociations(); $class->validateLifecycleCallbacks($this->getReflectionService()); diff --git a/lib/Doctrine/ORM/Mapping/MappingException.php b/lib/Doctrine/ORM/Mapping/MappingException.php index 9f905f6aa74..111a2382344 100644 --- a/lib/Doctrine/ORM/Mapping/MappingException.php +++ b/lib/Doctrine/ORM/Mapping/MappingException.php @@ -747,6 +747,26 @@ public static function invalidFetchMode($className, $annotation) return new self("Entity '" . $className . "' has a mapping with invalid fetch mode '" . $annotation . "'"); } + /** + * @param string $className + * + * @return MappingException + */ + public static function nonPrimaryidentityGeneratorNotSupported($className) + { + return new self("Entity '". $className . "' has a an Identity strategy defined on a non-primary field. This is not supported."); + } + + /** + * @param string $className + * + * @return MappingException + */ + public static function compositeIdentityGeneratorNotSupported($className) + { + return new self("Entity '". $className . "' has a composite identifier with with an Identity strategy. This is not supported."); + } + /** * @param string $targetEntity * @param string $sourceEntity diff --git a/tests/Doctrine/Tests/Models/ValueGenerators/DummyWithThreeProperties.php b/tests/Doctrine/Tests/Models/ValueGenerators/DummyWithThreeProperties.php new file mode 100644 index 00000000000..151f753a176 --- /dev/null +++ b/tests/Doctrine/Tests/Models/ValueGenerators/DummyWithThreeProperties.php @@ -0,0 +1,19 @@ +metadataBuildingContext); + $classMetadata->setTable(new Mapping\TableMetadata()); + + $fooMetadata = new Mapping\FieldMetadata('a'); + $fooMetadata->setType(Type::getType(Type::INTEGER)); + $fooMetadata->setPrimaryKey(true); + $fooMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::NONE)); + $classMetadata->addProperty($fooMetadata); + + $barMetadata = new Mapping\FieldMetadata('b'); + $barMetadata->setType(Type::getType(Type::INTEGER)); + $barMetadata->setPrimaryKey(true); + $barMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::IDENTITY)); + $classMetadata->addProperty($barMetadata); + + $classMetadata->validateValueGenerators(); + } + + /** + * @expectedException \Doctrine\ORM\Mapping\MappingException + * @expectedExceptionMessage Entity 'Doctrine\Tests\Models\ValueGenerators\DummyWithThreeProperties' has a an Identity strategy defined on a non-primary field. This is not supported. + */ + public function testNonPrimaryIdentityValueGenerator() : void + { + $classMetadata = new ClassMetadata(DummyWithThreeProperties::class, $this->metadataBuildingContext); + $classMetadata->setTable(new Mapping\TableMetadata()); + + $fooMetadata = new Mapping\FieldMetadata('a'); + $fooMetadata->setType(Type::getType(Type::INTEGER)); + $fooMetadata->setPrimaryKey(true); + $fooMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::NONE)); + $classMetadata->addProperty($fooMetadata); + + $barMetadata = new Mapping\FieldMetadata('b'); + $barMetadata->setType(Type::getType(Type::INTEGER)); + $barMetadata->setPrimaryKey(false); + $barMetadata->setValueGenerator(new Mapping\ValueGeneratorMetadata(Mapping\GeneratorType::IDENTITY)); + $classMetadata->addProperty($barMetadata); + + $classMetadata->validateValueGenerators(); + } + /** * @group DDC-1663 */ From e4627942521be9f816e8373eb7c05be373fdf0ac Mon Sep 17 00:00:00 2001 From: Michael Moravec Date: Mon, 4 Sep 2017 00:04:26 +0200 Subject: [PATCH 273/275] Added test for non-identifier generators --- .../NonIdentifierGenerators.php | 53 +++++++++++++++++++ .../ORM/Functional/ValueGeneratorsTest.php | 18 +++++++ .../Doctrine/Tests/OrmFunctionalTestCase.php | 2 + 3 files changed, 73 insertions(+) create mode 100644 tests/Doctrine/Tests/Models/ValueGenerators/NonIdentifierGenerators.php diff --git a/tests/Doctrine/Tests/Models/ValueGenerators/NonIdentifierGenerators.php b/tests/Doctrine/Tests/Models/ValueGenerators/NonIdentifierGenerators.php new file mode 100644 index 00000000000..17fb0a80532 --- /dev/null +++ b/tests/Doctrine/Tests/Models/ValueGenerators/NonIdentifierGenerators.php @@ -0,0 +1,53 @@ +id; + } + + public function getFoo() : ?string + { + return $this->foo; + } + + public function getBar() : ?string + { + return $this->bar; + } +} diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueGeneratorsTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueGeneratorsTest.php index a2e67069569..a6664108039 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueGeneratorsTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueGeneratorsTest.php @@ -6,6 +6,7 @@ use Doctrine\Tests\Models\ValueGenerators\BarGenerator; use Doctrine\Tests\Models\ValueGenerators\CompositeGeneratedIdentifier; use Doctrine\Tests\Models\ValueGenerators\FooGenerator; +use Doctrine\Tests\Models\ValueGenerators\NonIdentifierGenerators; use Doctrine\Tests\OrmFunctionalTestCase; class ValueGeneratorsTest extends OrmFunctionalTestCase @@ -34,4 +35,21 @@ public function testCompositeIdentifierWithMultipleGenerators() : void ); self::assertNotNull($entity); } + + public function testNonIdentifierGenerators() : void + { + $entity = new NonIdentifierGenerators(); + + $this->em->persist($entity); + $this->em->flush(); + + self::assertNotNull($entity->getId()); + self::assertSame(FooGenerator::VALUE, $entity->getFoo()); + self::assertSame(BarGenerator::VALUE, $entity->getBar()); + + $this->em->clear(); + + $entity = $this->getEntityManager()->find(NonIdentifierGenerators::class, $entity->getId()); + self::assertNotNull($entity); + } } diff --git a/tests/Doctrine/Tests/OrmFunctionalTestCase.php b/tests/Doctrine/Tests/OrmFunctionalTestCase.php index 7114e8187cb..8f17c91e7a8 100644 --- a/tests/Doctrine/Tests/OrmFunctionalTestCase.php +++ b/tests/Doctrine/Tests/OrmFunctionalTestCase.php @@ -317,6 +317,7 @@ abstract class OrmFunctionalTestCase extends OrmTestCase ], 'valueGenerators' => [ Models\ValueGenerators\CompositeGeneratedIdentifier::class, + Models\ValueGenerators\NonIdentifierGenerators::class, ], ]; @@ -605,6 +606,7 @@ protected function tearDown() if (isset($this->usedModelSets['value_generators'])) { $conn->executeUpdate('DELETE FROM vg_composite_generated_identifier'); + $conn->executeUpdate('DELETE FROM vg_non_identifier_generators'); } $this->em->clear(); From f135146112d854928625a0a38c8f015c4fe643b4 Mon Sep 17 00:00:00 2001 From: Michael Moravec Date: Mon, 4 Sep 2017 00:35:18 +0200 Subject: [PATCH 274/275] Added test for generators in inheritance --- .../InheritanceGeneratorsChildA.php | 26 ++++++++++++++ .../InheritanceGeneratorsChildB.php | 26 ++++++++++++++ .../InheritanceGeneratorsRoot.php | 34 +++++++++++++++++++ .../ORM/Functional/ValueGeneratorsTest.php | 30 ++++++++++++++++ .../Doctrine/Tests/OrmFunctionalTestCase.php | 4 +++ 5 files changed, 120 insertions(+) create mode 100644 tests/Doctrine/Tests/Models/ValueGenerators/InheritanceGeneratorsChildA.php create mode 100644 tests/Doctrine/Tests/Models/ValueGenerators/InheritanceGeneratorsChildB.php create mode 100644 tests/Doctrine/Tests/Models/ValueGenerators/InheritanceGeneratorsRoot.php diff --git a/tests/Doctrine/Tests/Models/ValueGenerators/InheritanceGeneratorsChildA.php b/tests/Doctrine/Tests/Models/ValueGenerators/InheritanceGeneratorsChildA.php new file mode 100644 index 00000000000..9696074b764 --- /dev/null +++ b/tests/Doctrine/Tests/Models/ValueGenerators/InheritanceGeneratorsChildA.php @@ -0,0 +1,26 @@ +a; + } +} diff --git a/tests/Doctrine/Tests/Models/ValueGenerators/InheritanceGeneratorsChildB.php b/tests/Doctrine/Tests/Models/ValueGenerators/InheritanceGeneratorsChildB.php new file mode 100644 index 00000000000..8ad1d3a3815 --- /dev/null +++ b/tests/Doctrine/Tests/Models/ValueGenerators/InheritanceGeneratorsChildB.php @@ -0,0 +1,26 @@ +b; + } +} diff --git a/tests/Doctrine/Tests/Models/ValueGenerators/InheritanceGeneratorsRoot.php b/tests/Doctrine/Tests/Models/ValueGenerators/InheritanceGeneratorsRoot.php new file mode 100644 index 00000000000..9358cbc229b --- /dev/null +++ b/tests/Doctrine/Tests/Models/ValueGenerators/InheritanceGeneratorsRoot.php @@ -0,0 +1,34 @@ +id; + } +} diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueGeneratorsTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueGeneratorsTest.php index a6664108039..ed99ddf44e5 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueGeneratorsTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueGeneratorsTest.php @@ -6,6 +6,9 @@ use Doctrine\Tests\Models\ValueGenerators\BarGenerator; use Doctrine\Tests\Models\ValueGenerators\CompositeGeneratedIdentifier; use Doctrine\Tests\Models\ValueGenerators\FooGenerator; +use Doctrine\Tests\Models\ValueGenerators\InheritanceGeneratorsChildA; +use Doctrine\Tests\Models\ValueGenerators\InheritanceGeneratorsChildB; +use Doctrine\Tests\Models\ValueGenerators\InheritanceGeneratorsRoot; use Doctrine\Tests\Models\ValueGenerators\NonIdentifierGenerators; use Doctrine\Tests\OrmFunctionalTestCase; @@ -52,4 +55,31 @@ public function testNonIdentifierGenerators() : void $entity = $this->getEntityManager()->find(NonIdentifierGenerators::class, $entity->getId()); self::assertNotNull($entity); } + + public function testValueGeneratorsInInheritance() : void + { + $rootEntity = new InheritanceGeneratorsRoot(); + + $this->em->persist($rootEntity); + $this->em->flush(); + + $this->assertNotNull($rootEntity->getId()); + + $childAEntity = new InheritanceGeneratorsChildA(); + + $this->em->persist($childAEntity); + $this->em->flush(); + + $this->assertNotNull($childAEntity); + $this->assertSame(FooGenerator::VALUE, $childAEntity->getA()); + + $childBEntity = new InheritanceGeneratorsChildB(); + + $this->em->persist($childBEntity); + $this->em->flush(); + + $this->assertNotNull($childBEntity); + $this->assertSame(FooGenerator::VALUE, $childBEntity->getA()); + $this->assertSame(BarGenerator::VALUE, $childBEntity->getB()); + } } diff --git a/tests/Doctrine/Tests/OrmFunctionalTestCase.php b/tests/Doctrine/Tests/OrmFunctionalTestCase.php index 8f17c91e7a8..a7a1aaf281c 100644 --- a/tests/Doctrine/Tests/OrmFunctionalTestCase.php +++ b/tests/Doctrine/Tests/OrmFunctionalTestCase.php @@ -318,6 +318,9 @@ abstract class OrmFunctionalTestCase extends OrmTestCase 'valueGenerators' => [ Models\ValueGenerators\CompositeGeneratedIdentifier::class, Models\ValueGenerators\NonIdentifierGenerators::class, + Models\ValueGenerators\InheritanceGeneratorsRoot::class, + Models\ValueGenerators\InheritanceGeneratorsChildA::class, + Models\ValueGenerators\InheritanceGeneratorsChildB::class, ], ]; @@ -607,6 +610,7 @@ protected function tearDown() if (isset($this->usedModelSets['value_generators'])) { $conn->executeUpdate('DELETE FROM vg_composite_generated_identifier'); $conn->executeUpdate('DELETE FROM vg_non_identifier_generators'); + $conn->executeUpdate('DELETE FROM vg_inheritance_generators'); } $this->em->clear(); From 9c820466a784f5e360a5a5e39caff1f743d3b770 Mon Sep 17 00:00:00 2001 From: Michael Moravec Date: Mon, 4 Sep 2017 00:59:38 +0200 Subject: [PATCH 275/275] Added test with composite identifier with association and custom generators --- .../ValueGenerators/AssociationIdentifier.php | 58 +++++++++++++++++++ .../AssociationIdentifierTarget.php | 28 +++++++++ .../ORM/Functional/ValueGeneratorsTest.php | 20 +++++++ .../Doctrine/Tests/OrmFunctionalTestCase.php | 4 ++ 4 files changed, 110 insertions(+) create mode 100644 tests/Doctrine/Tests/Models/ValueGenerators/AssociationIdentifier.php create mode 100644 tests/Doctrine/Tests/Models/ValueGenerators/AssociationIdentifierTarget.php diff --git a/tests/Doctrine/Tests/Models/ValueGenerators/AssociationIdentifier.php b/tests/Doctrine/Tests/Models/ValueGenerators/AssociationIdentifier.php new file mode 100644 index 00000000000..0fa2227df5a --- /dev/null +++ b/tests/Doctrine/Tests/Models/ValueGenerators/AssociationIdentifier.php @@ -0,0 +1,58 @@ +target = new AssociationIdentifierTarget(); + } + + public function getTarget() : AssociationIdentifierTarget + { + return $this->target; + } + + public function getId() : ?string + { + return $this->id; + } + + public function getRegular() : ?string + { + return $this->regular; + } +} diff --git a/tests/Doctrine/Tests/Models/ValueGenerators/AssociationIdentifierTarget.php b/tests/Doctrine/Tests/Models/ValueGenerators/AssociationIdentifierTarget.php new file mode 100644 index 00000000000..c85083c73b0 --- /dev/null +++ b/tests/Doctrine/Tests/Models/ValueGenerators/AssociationIdentifierTarget.php @@ -0,0 +1,28 @@ +id; + } +} diff --git a/tests/Doctrine/Tests/ORM/Functional/ValueGeneratorsTest.php b/tests/Doctrine/Tests/ORM/Functional/ValueGeneratorsTest.php index ed99ddf44e5..4484fc07e71 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ValueGeneratorsTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ValueGeneratorsTest.php @@ -3,6 +3,8 @@ namespace Doctrine\Tests\ORM\Functional; +use Doctrine\Tests\Models\ValueGenerators\AssociationIdentifier; +use Doctrine\Tests\Models\ValueGenerators\AssociationIdentifierTarget; use Doctrine\Tests\Models\ValueGenerators\BarGenerator; use Doctrine\Tests\Models\ValueGenerators\CompositeGeneratedIdentifier; use Doctrine\Tests\Models\ValueGenerators\FooGenerator; @@ -82,4 +84,22 @@ public function testValueGeneratorsInInheritance() : void $this->assertSame(FooGenerator::VALUE, $childBEntity->getA()); $this->assertSame(BarGenerator::VALUE, $childBEntity->getB()); } + + public function testGeneratorsWithAssociationInIdentifier() : void + { + $entity = new AssociationIdentifier(); + + $this->em->persist($entity); + $this->em->flush(); + + $this->assertSame(FooGenerator::VALUE, $entity->getId()); + $this->assertSame(BarGenerator::VALUE, $entity->getRegular()); + + $entity = $this->em->find( + AssociationIdentifier::class, + ['id' => FooGenerator::VALUE, 'target' => AssociationIdentifierTarget::ID] + ); + + $this->assertNotNull($entity); + } } diff --git a/tests/Doctrine/Tests/OrmFunctionalTestCase.php b/tests/Doctrine/Tests/OrmFunctionalTestCase.php index a7a1aaf281c..1891d1ea39a 100644 --- a/tests/Doctrine/Tests/OrmFunctionalTestCase.php +++ b/tests/Doctrine/Tests/OrmFunctionalTestCase.php @@ -321,6 +321,8 @@ abstract class OrmFunctionalTestCase extends OrmTestCase Models\ValueGenerators\InheritanceGeneratorsRoot::class, Models\ValueGenerators\InheritanceGeneratorsChildA::class, Models\ValueGenerators\InheritanceGeneratorsChildB::class, + Models\ValueGenerators\AssociationIdentifier::class, + Models\ValueGenerators\AssociationIdentifierTarget::class, ], ]; @@ -611,6 +613,8 @@ protected function tearDown() $conn->executeUpdate('DELETE FROM vg_composite_generated_identifier'); $conn->executeUpdate('DELETE FROM vg_non_identifier_generators'); $conn->executeUpdate('DELETE FROM vg_inheritance_generators'); + $conn->executeUpdate('DELETE FROM vg_association_identifier'); + $conn->executeUpdate('DELETE FROM vg_association_identifier_target'); } $this->em->clear();